From: Maxious Date: Sun, 20 Mar 2011 04:48:28 +0000 Subject: AWS fixes and js google analytics X-Git-Url: http://maxious.lambdacomplex.org/git/?p=busui.git&a=commitdiff&h=9ca11cc377fd0fad2461fe74c4718d4dc089f939 --- AWS fixes and js google analytics --- --- a/about.php +++ b/about.php @@ -1,11 +1,17 @@

Busness Time - An ACT bus timetable webapp
-Based on the maxious-canberra-transit-feed (download, last updated )
-Source code for the transit feed and this site @ http://maxious.lambdacomplex.org/git
+Based on the maxious-canberra-transit-feed (download, +last updated )
+Source code for the transit +feed and this +site available from github.
Uses jQuery Mobile, PHP, Ruby, Python, Google Transit Feed Specification tools, OpenTripPlanner, OpenLayers, OpenStreetMap, Cloudmade Geocoder and Tile Service

Feedback encouraged; contact maxious@lambdacomplex.org
--- a/aws/awsStartup.sh +++ b/aws/awsStartup.sh @@ -1,10 +1,10 @@ #!/bin/bash #this script should be run from a fresh git checkout from http://maxious.lambdacomplex.org #ami base must have yum install lighttpd-fastcgi, git, tomcat6 -#screen php-cli php-gd tomcat6-webapps tomcat6-admin-webapps +#screen php-cli php-gd tomcat6-webapps tomcat6-admin-webapps svn maven2 #http://www.how2forge.org/installing-lighttpd-with-php5-and-mysql-support-on-fedora-12 -cp -rfv /tmp/busui/* /var/www +cp /root/aws.php /tmp/ chcon -h system_u:object_r:httpd_sys_content_t /var/www chcon -R -h root:object_r:httpd_sys_content_t /var/www/* chcon -R -t httpd_sys_content_rw_t /var/www/staticmaplite/cache @@ -13,7 +13,8 @@ -O /var/www/cbrfeed.zip easy_install transitfeed easy_install simplejson -screen -d -m /var/www/view.sh +screen -S viewsh -X quit +screen -S viewsh -d -m /var/www/view.sh wget http://s3-ap-southeast-1.amazonaws.com/busresources/Graph.obj \ -O /tmp/Graph.obj --- /dev/null +++ b/aws/compress.conf @@ -1,1 +1,33 @@ +####################################################################### +## +## Output Compression +## -------------------- +## +## see http://www.lighttpd.net/documentation/compress.html +## +server.modules += ( "mod_compress" ) +## +## where should the compressed files be cached? +## see the base config for the declaration of the variable. +## +## This directory should be changed per vhost otherwise you can +## run into trouble with overlapping filenames +## +compress.cache-dir = cache_dir + "/compress" + +## +## FileTypes to compress. +## +#compress.filetype = ("text/plain", "text/html") +compress.filetype = ("text/plain", "text/html", "text/javascript", "text/css", "text/xml") + +## +## Maximum filesize that will be compressed. +## Default is 0, which means unlimited file size. +## +#compress.max-filesize = 0 + +## +####################################################################### + --- /dev/null +++ b/aws/expire.conf @@ -1,1 +1,29 @@ +####################################################################### +## +## Expire Module +## --------------- +## +## See http://www.lighttpd.net/documentation/expire.html +## +server.modules += ( "mod_expire" ) +## +## assignes a expiration to all files below the specified path. The +## specification of the time is made up of: +## +## +## +#expire.url = ( +# "/buggy/" => "access 2 hours", +# "/images/" => "access plus 1 seconds 2 minutes" +#) +etag.use-mtime = "enable" +etag.use-inode = "disable" +static-file.etags = "enable" +$HTTP["url"] =~ "\.(css|js|png|jpg|ico|gif)$" { + expire.url = ( "" => "access 7 days" ) +} + +## +####################################################################### + --- a/aws/fastcgi.conf +++ b/aws/fastcgi.conf --- a/aws/modules.conf +++ b/aws/modules.conf @@ -76,7 +76,7 @@ ## ## mod_compress ## -#include "conf.d/compress.conf" +include "conf.d/compress.conf" ## ## mod_userdir @@ -106,7 +106,7 @@ ## ## mod_expire ## -#include "conf.d/expire.conf" +include "conf.d/expire.conf" ## ## mod_secdownload --- a/aws/php.ini +++ b/aws/php.ini @@ -1,4 +1,6 @@ [PHP] + +date.timezone = "Australia/Sydney" ;;;;;;;;;;;;;;;;;;; ; About php.ini ; @@ -288,7 +290,7 @@ ; Note: You need to use zlib.output_handler instead of the standard ; output_handler, or otherwise the output will be corrupted. ; http://www.php.net/manual/en/zlib.configuration.php#ini.zlib.output-compression -zlib.output_compression = Off +zlib.output_compression = on ; http://www.php.net/manual/en/zlib.configuration.php#ini.zlib.output-compression-level ;zlib.output_compression_level = -1 @@ -1264,7 +1266,7 @@ ; where MODE is the octal representation of the mode. Note that this ; does not overwrite the process's umask. ; http://www.php.net/manual/en/session.configuration.php#ini.session.save-path -session.save_path = "/var/lib/php/session" +session.save_path = "/tmp" ; Whether to use cookies. ; http://www.php.net/manual/en/session.configuration.php#ini.session.use-cookies --- a/aws/rc.local +++ b/aws/rc.local --- /dev/null +++ b/common-geo.inc.php @@ -1,1 +1,149 @@ - + $mapPoint) { + $markers.= $mapPoint[0] . "," . $mapPoint[1] . "," . $markerImage . ($index + 1); + if ($index + 1 != sizeof($mapPoints)) $markers.= "|"; + if ($mapPoint[0] < $minlat) $minlat = $mapPoint[0]; + if ($mapPoint[0] > $maxlat) $maxlat = $mapPoint[0]; + if ($mapPoint[1] < $minlon) $minlon = $mapPoint[1]; + if ($mapPoint[1] > $maxlon) $maxlon = $mapPoint[1]; + $totalLat+= $mapPoint[0]; + $totalLon+= $mapPoint[1]; + } + if ($zoom == 0) { + $mapwidthinmeters = distance($minlat, $minlon, $minlat, $maxlon); + foreach (array_reverse($metersperpixel, true) as $zoomLevel => $maxdistance) { + if ($zoom == 0 && $mapwidthinmeters < ($maxdistance + 50)) $zoom = $zoomLevel; + } + } + $center = $totalLat / sizeof($mapPoints) . "," . $totalLon / sizeof($mapPoints); + } + $output = ""; + if ($collapsible) $output.= '

Open Map...

'; + $output.= '
'; + if ($collapsible) $output.= '
'; + return $output; +} +function distance($lat1, $lng1, $lat2, $lng2, $roundLargeValues = false) +{ + $pi80 = M_PI / 180; + $lat1*= $pi80; + $lng1*= $pi80; + $lat2*= $pi80; + $lng2*= $pi80; + $r = 6372.797; // mean radius of Earth in km + $dlat = $lat2 - $lat1; + $dlng = $lng2 - $lng1; + $a = sin($dlat / 2) * sin($dlat / 2) + cos($lat1) * cos($lat2) * sin($dlng / 2) * sin($dlng / 2); + $c = 2 * atan2(sqrt($a) , sqrt(1 - $a)); + $km = $r * $c; + if ($roundLargeValues) { + if ($km < 1) return floor($km * 1000); + else return round($km,2)."k"; + } else return floor($km * 1000); +} +function decodePolylineToArray($encoded) +{ + // source: http://latlongeeks.com/forum/viewtopic.php?f=4&t=5 + $length = strlen($encoded); + $index = 0; + $points = array(); + $lat = 0; + $lng = 0; + while ($index < $length) { + // Temporary variable to hold each ASCII byte. + $b = 0; + // The encoded polyline consists of a latitude value followed by a + // longitude value. They should always come in pairs. Read the + // latitude value first. + $shift = 0; + $result = 0; + do { + // The `ord(substr($encoded, $index++))` statement returns the ASCII + // code for the character at $index. Subtract 63 to get the original + // value. (63 was added to ensure proper ASCII characters are displayed + // in the encoded polyline string, which is `human` readable) + $b = ord(substr($encoded, $index++)) - 63; + // AND the bits of the byte with 0x1f to get the original 5-bit `chunk. + // Then left shift the bits by the required amount, which increases + // by 5 bits each time. + // OR the value into $results, which sums up the individual 5-bit chunks + // into the original value. Since the 5-bit chunks were reversed in + // order during encoding, reading them in this way ensures proper + // summation. + $result|= ($b & 0x1f) << $shift; + $shift+= 5; + } + // Continue while the read byte is >= 0x20 since the last `chunk` + // was not OR'd with 0x20 during the conversion process. (Signals the end) + while ($b >= 0x20); + // Check if negative, and convert. (All negative values have the last bit + // set) + $dlat = (($result & 1) ? ~($result >> 1) : ($result >> 1)); + // Compute actual latitude since value is offset from previous value. + $lat+= $dlat; + // The next values will correspond to the longitude for this point. + $shift = 0; + $result = 0; + do { + $b = ord(substr($encoded, $index++)) - 63; + $result|= ($b & 0x1f) << $shift; + $shift+= 5; + } while ($b >= 0x20); + $dlng = (($result & 1) ? ~($result >> 1) : ($result >> 1)); + $lng+= $dlng; + // The actual latitude and longitude values were multiplied by + // 1e5 before encoding so that they could be converted to a 32-bit + // integer representation. (With a decimal accuracy of 5 places) + // Convert back to original values. + $points[] = array( + $lat * 1e-5, + $lng * 1e-5 + ); + } + return $points; +} +function geocode($query, $giveOptions) +{ + global $cloudmadeAPIkey; + $url = "http://geocoding.cloudmade.com/$cloudmadeAPIkey/geocoding/v2/find.js?query=" . urlencode($query) . "&bbox=-35.5,149.00,-35.15,149.1930&return_location=true&bbox_only=true"; + $contents = json_decode(getPage($url)); + if ($giveOptions) return $contents->features; + elseif (isset($contents->features[0]->centroid)) return $contents->features[0]->centroid->coordinates[0] . "," . $contents->features[0]->centroid->coordinates[1]; + else return ""; +} +function reverseGeocode($lat, $lng) +{ + global $cloudmadeAPIkey; + $url = "http://geocoding.cloudmade.com/$cloudmadeAPIkey/geocoding/v2/find.js?around=" . $lat . "," . $lng . "&distance=closest&object_type=road"; + $contents = json_decode(getPage($url)); + return $contents->features[0]->properties->name; +} +?> --- /dev/null +++ b/common-net.inc.php @@ -1,1 +1,23 @@ - + Database temporarily unavailable: " . curl_errno($ch) . " " . curl_error($ch) . "
"; + curl_close($ch); + debug(print_r($page,true),"json"); + return $page; +} +function curPageURL() +{ + $isHTTPS = (isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] == "on"); + $port = (isset($_SERVER["SERVER_PORT"]) && ((!$isHTTPS && $_SERVER["SERVER_PORT"] != "80") || ($isHTTPS && $_SERVER["SERVER_PORT"] != "443"))); + $port = ($port) ? ':' . $_SERVER["SERVER_PORT"] : ''; + $url = ($isHTTPS ? 'https://' : 'http://') . $_SERVER["SERVER_NAME"] . $port . htmlentities(dirname($_SERVER['PHP_SELF']) , ENT_QUOTES) . "/"; + return $url; +} +?> --- /dev/null +++ b/common-template.inc.php @@ -1,1 +1,223 @@ - + + + + + ' . $pageTitle . ' + '; + if ($datepicker) echo ''; + if (isDebugServer()) echo ' + + '; + else echo ' + + '; + if ($datepicker) echo ' + '; + echo ''; + if (strstr($_SERVER['HTTP_USER_AGENT'], 'iPhone') || strstr($_SERVER['HTTP_USER_AGENT'], 'iPod')) { + echo ' + + + '; + } + if ($geolocate) { + echo " "; + } + echo ' + + + + '; + if ($opendiv) { + echo '
+ +
+

' . $pageTitle . '

+
+ +
'; + } +} +function include_footer() +{ + if ($geolocate && isset($_SESSION['lat'])) { + echo ""; + } + echo ''; + if (!isDebug()) { + $googleAnalyticsImageUrl = googleAnalyticsGetImageUrl(); + echo ''; + } +} +function timePlaceSettings($geolocate = false) +{ + global $service_periods; + $geoerror = false; + if ($geolocate == true) { + $geoerror = !isset($_SESSION['lat']) || !isset($_SESSION['lat']) || $_SESSION['lat'] == "" || $_SESSION['lon'] == ""; + } + if ($geoerror) { + echo '
Sorry, but your location could not currently be detected. + Please allow location permission, wait for your location to be detected, + or enter an address/co-ordinates in the box below.
'; + } + echo '
+

Change Time/Place (' . (isset($_SESSION['time']) ? $_SESSION['time'] : "Current Time,") . ' ' . ucwords(service_period()) . ')...

+
+
+
+ + +
+
+ + Current Time? +
+
+ + + +
+ + + +
'; +} +?> + --- /dev/null +++ b/common-transit.inc.php @@ -1,1 +1,73 @@ - + 0) { + $midnight = mktime(0, 0, 0, date("n") , date("j") , date("Y")); + return date("h:ia", $midnight + $seconds); + } + else { + return ""; + } +} +function viaPoints($tripid, $stopid, $timingPointsOnly = false) +{ + global $APIurl; + $url = $APIurl . "/json/tripstoptimes?trip=" . $tripid; + $json = json_decode(getPage($url)); + debug(print_r($json, true)); + $stops = $json[0]; + $times = $json[1]; + $foundStop = false; + $viaPoints = Array(); + foreach ($stops as $key => $row) { + if ($foundStop) { + if (!$timingPointsOnly || !startsWith($row[5], "Wj")) { + $viaPoints[] = Array( + "id" => $row[0], + "name" => $row[1], + "time" => $times[$key] + ); + } + } + else { + if ($row[0] == $stopid) $foundStop = true; + } + } + return $viaPoints; +} +function viaPointNames($tripid, $stopid) +{ + $points = viaPoints($tripid, $stopid, true); + $pointNames = Array(); + foreach ($points as $point) { + $pointNames[] = $point['name']; + } + return implode(", ", $pointNames); +} +?> --- a/common.inc.php +++ b/common.inc.php @@ -1,470 +1,180 @@ centroid)) { - $session['lat'] = $contents[0]->centroid->coordinates[0]; - $session['lon'] = $contents[0]->centroid->coordinates[1]; - } - else { - $session['lat'] = ""; - $session['lon'] = ""; - } - } -//print_r ($_SESSION); -function isDebug() +if (isset($_REQUEST['service_period'])) { + $_SESSION['service_period'] = filter_var($_REQUEST['service_period'], FILTER_SANITIZE_STRING); +} +if (isset($_REQUEST['time'])) { + $_SESSION['time'] = filter_var($_REQUEST['time'], FILTER_SANITIZE_STRING); +} +if (isset($_REQUEST['geolocate'])) { + $geocoded = false; + if (isset($_REQUEST['lat']) && isset($_REQUEST['lon'])) { + $_SESSION['lat'] = trim(filter_var($_REQUEST['lat'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION)); + $_SESSION['lon'] = trim(filter_var($_REQUEST['lon'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION)); + } + else { + $geolocate = filter_var($_REQUEST['geolocate'], FILTER_SANITIZE_URL); + echo $_REQUEST['geolocate']; + if (startsWith($geolocate, "-")) { + $locateparts = explode(",", $geolocate); + $_SESSION['lat'] = $locateparts[0]; + $_SESSION['lon'] = $locateparts[1]; + } + else { + $contents = geocode($geolocate, true); + print_r($contents); + if (isset($contents[0]->centroid)) { + $geocoded = true; + $_SESSION['lat'] = $contents[0]->centroid->coordinates[0]; + $_SESSION['lon'] = $contents[0]->centroid->coordinates[1]; + } + else { + $_SESSION['lat'] = ""; + $_SESSION['lon'] = ""; + } + } + } +} +debug(print_r($_SESSION, true) , "session"); +function isDebugServer() { - return $_SERVER['SERVER_NAME'] == "10.0.1.154" || $_SERVER['SERVER_NAME'] == "localhost" || $_SERVER['SERVER_NAME'] == "127.0.0.1" || !$_SERVER['SERVER_NAME']; + return $_SERVER['SERVER_NAME'] == "10.0.1.154" || $_SERVER['SERVER_NAME'] == "localhost" || $_SERVER['SERVER_NAME'] == "127.0.0.1" || !$_SERVER['SERVER_NAME']; } - -function isMetricsOn() +function isDebug($debugReason = "other") { - return true; + global $debugOkay; + return in_array($debugReason, $debugOkay, false) && isDebugServer(); } - -function debug($msg) { - if (isDebug()) echo ""; +function debug($msg, $debugReason = "other") +{ + if (isDebug($debugReason)) echo "\n\n"; } -function isFastDevice() { - $fastDevices = Array("Mozilla/5.0 (X11;", "Mozilla/5.0 (Windows;", "Mozilla/5.0 (iP", "Mozilla/5.0 (Linux; U; Android", "Mozilla/4.0 (compatible; MSIE"); - $slowDevices = Array("J2ME","MIDP","Opera/","Mozilla/2.0 (compatible;","Mozilla/3.0 (compatible;"); - return true; +function isJQueryMobileDevice() +{ + // http://forum.jquery.com/topic/what-is-the-best-way-to-detect-all-useragents-which-can-handle-jquery-mobile#14737000002087897 + $user_agent = $_SERVER['HTTP_USER_AGENT']; + return preg_match('/iphone/i', $user_agent) + || preg_match('/android/i', $user_agent) + || preg_match('/webos/i', $user_agent) + || preg_match('/ios/i', $user_agent) + || preg_match('/bada/i', $user_agent) + || preg_match('/maemo/i', $user_agent) + || preg_match('/meego/i', $user_agent) + || preg_match('/fennec/i', $user_agent) + || (preg_match('/symbian/i', $user_agent) + && preg_match('/s60/i', $user_agent) + && $browser['majorver'] >= 5) + || (preg_match('/symbian/i', $user_agent) + && preg_match('/platform/i', $user_agent) + && $browser['majorver'] >= 3) + || (preg_match('/blackberry/i', $user_agent) + && $browser['majorver'] >= 5) + || (preg_match('/opera mobile/i', $user_agent) + && $browser['majorver'] >= 10) + || (preg_match('/opera mini/i', $user_agent) + && $browser['majorver'] >= 5); } - -function include_header($pageTitle, $pageType, $opendiv = true, $geolocate = false) { - echo ' - - - - '.$pageTitle.''; - if (isDebug()) echo ' - - '; - else echo ' - - '; -echo ' - - - - - - - - - '; - if ($geolocate) { -echo " "; - } -echo ' - - '; - if (isMetricsOn()) { - require_once('owa/owa_env.php'); - require_once(OWA_DIR.'owa_php.php'); - $owa = new owa_php(); - $owa->setSiteId('bus.lambdacomplex.org'); - $owa->setPageTitle($pageTitle); - $owa->setPageType($pageType); - $owa->trackPageView(); - $owa->placeHelperPageTags(); - } - -if ($opendiv) { - echo '
- -
-

'.$pageTitle.'

-
-
'; -} -} -function include_footer() -{ - if ($geolocate && isset($_SESSION['lat'])) { - echo ""; - } - echo ''; -} - -$service_periods = Array ('sunday','saturday','weekday'); - -function service_period() -{ -if (isset($_SESSION['service_period'])) return $_SESSION['service_period']; - -switch (date('w')){ - -case 0: - return 'sunday'; -case 6: - return 'saturday'; -default: - return 'weekday'; -} -} - function remove_spaces($string) { - return str_replace(' ','',$string); + return str_replace(' ', '', $string); } - -function midnight_seconds() +function object2array($object) { -// from http://www.perturb.org/display/Perlfunc__Seconds_Since_Midnight.html -if (isset($_SESSION['time'])) { - $time = strtotime($_SESSION['time']); - return (date("G",$time) * 3600) + (date("i",$time) * 60) + date("s",$time); - } - return (date("G") * 3600) + (date("i") * 60) + date("s"); + if (is_object($object)) { + foreach ($object as $key => $value) { + $array[$key] = $value; + } + } + else { + $array = $object; + } + return $array; } - -function midnight_seconds_to_time($seconds) +function startsWith($haystack, $needle, $case = true) { -if ($seconds > 0) { - $midnight = mktime (0, 0, 0, date("n"), date("j"), date("Y")); - return date("h:ia",$midnight+$seconds); -} else { -return ""; + if ($case) { + return (strcmp(substr($haystack, 0, strlen($needle)) , $needle) === 0); + } + return (strcasecmp(substr($haystack, 0, strlen($needle)) , $needle) === 0); } +function endsWith($haystack, $needle, $case = true) +{ + if ($case) { + return (strcmp(substr($haystack, strlen($haystack) - strlen($needle)) , $needle) === 0); + } + return (strcasecmp(substr($haystack, strlen($haystack) - strlen($needle)) , $needle) === 0); } -function getPage($url) +function bracketsMeanNewLine($input) { - debug($url); - $ch = curl_init($url); -curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 ); -curl_setopt( $ch, CURLOPT_HEADER, 0 ); - curl_setopt($ch,CURLOPT_TIMEOUT,30); -$page = curl_exec($ch); - if(curl_errno($ch)) echo " Database temporarily unavailable: ".curl_errno($ch)." ".curl_error($ch).""; -curl_close($ch); -return $page; + return str_replace(")", "", str_replace("(", "
", $input)); } -function array_flatten($a,$f=array()){ - if(!$a||!is_array($a))return ''; - foreach($a as $k=>$v){ - if(is_array($v))$f=array_flatten($v,$f); - else $f[$k]=$v; - } - return $f; -} - -function staticmap($mapPoints, $zoom = 0, $markerImage = "iconb") +function sksort(&$array, $subkey = "id", $sort_ascending = false) { -$width = 300; -$height = 300; -$metersperpixel[9]=305.492*$width; -$metersperpixel[10]=152.746*$width; -$metersperpixel[11]=76.373*$width; -$metersperpixel[12]=38.187*$width; -$metersperpixel[13]=19.093*$width; -$metersperpixel[14]=9.547*$width; -$metersperpixel[15]=4.773*$width; -$metersperpixel[16]=2.387*$width; -// $metersperpixel[17]=1.193*$width; -$center = ""; -$markers = ""; -$minlat = 999; -$minlon = 999; -$maxlat = 0; -$maxlon = 0; - - if (sizeof($mapPoints) < 1) return "map error"; - if (sizeof($mapPoints) === 1) { - if ($zoom == 0) $zoom = 14; - $markers .= "{$mapPoints[0][0]},{$mapPoints[0][1]},$markerimage"; - $center = "{$mapPoints[0][0]},{$mapPoints[0][1]}"; - } else { - foreach ($mapPoints as $index => $mapPoint) { - $markers .= $mapPoint[0].",".$mapPoint[1].",".$markerImage.($index+1); - if ($index+1 != sizeof($mapPoints)) $markers .= "|"; - if ($mapPoint[0] < $minlat) $minlat = $mapPoint[0]; - if ($mapPoint[0] > $maxlat) $maxlat = $mapPoint[0]; - if ($mapPoint[1] < $minlon) $minlon = $mapPoint[1]; - if ($mapPoint[1] > $maxlon) $maxlon = $mapPoint[1]; - $totalLat += $mapPoint[0]; - $totalLon += $mapPoint[1]; - } - if ($zoom == 0) { - $mapwidthinmeters = distance($minlat,$minlon,$minlat,$maxlon); - foreach (array_reverse($metersperpixel,true) as $zoomLevel => $maxdistance) - { - if ($zoom == 0 && $mapwidthinmeters < ($maxdistance + 50)) $zoom = $zoomLevel; - } - } - $center = $totalLat/sizeof($mapPoints).",".$totalLon/sizeof($mapPoints); - } - $output = ""; - if(basename($_SERVER['PHP_SELF']) != "tripPlanner.php") $output .= '

Open Map...

'; - $output .= '
'; - if(basename($_SERVER['PHP_SELF']) != "tripPlanner.php") $output .= '
'; - return $output; -} - -function distance($lat1, $lng1, $lat2, $lng2) -{ - $pi80 = M_PI / 180; - $lat1 *= $pi80; - $lng1 *= $pi80; - $lat2 *= $pi80; - $lng2 *= $pi80; - - $r = 6372.797; // mean radius of Earth in km - $dlat = $lat2 - $lat1; - $dlng = $lng2 - $lng1; - $a = sin($dlat / 2) * sin($dlat / 2) + cos($lat1) * cos($lat2) * sin($dlng / 2) * sin($dlng / 2); - $c = 2 * atan2(sqrt($a), sqrt(1 - $a)); - $km = $r * $c; - - return $km * 1000; -} - -function decodePolylineToArray($encoded) -{ -// source: http://latlongeeks.com/forum/viewtopic.php?f=4&t=5 - $length = strlen($encoded); - $index = 0; - $points = array(); - $lat = 0; - $lng = 0; - - while ($index < $length) - { - // Temporary variable to hold each ASCII byte. - $b = 0; - - // The encoded polyline consists of a latitude value followed by a - // longitude value. They should always come in pairs. Read the - // latitude value first. - $shift = 0; - $result = 0; - do - { - // The `ord(substr($encoded, $index++))` statement returns the ASCII - // code for the character at $index. Subtract 63 to get the original - // value. (63 was added to ensure proper ASCII characters are displayed - // in the encoded polyline string, which is `human` readable) - $b = ord(substr($encoded, $index++)) - 63; - - // AND the bits of the byte with 0x1f to get the original 5-bit `chunk. - // Then left shift the bits by the required amount, which increases - // by 5 bits each time. - // OR the value into $results, which sums up the individual 5-bit chunks - // into the original value. Since the 5-bit chunks were reversed in - // order during encoding, reading them in this way ensures proper - // summation. - $result |= ($b & 0x1f) << $shift; - $shift += 5; - } - // Continue while the read byte is >= 0x20 since the last `chunk` - // was not OR'd with 0x20 during the conversion process. (Signals the end) - while ($b >= 0x20); - - // Check if negative, and convert. (All negative values have the last bit - // set) - $dlat = (($result & 1) ? ~($result >> 1) : ($result >> 1)); - - // Compute actual latitude since value is offset from previous value. - $lat += $dlat; - - // The next values will correspond to the longitude for this point. - $shift = 0; - $result = 0; - do - { - $b = ord(substr($encoded, $index++)) - 63; - $result |= ($b & 0x1f) << $shift; - $shift += 5; - } - while ($b >= 0x20); - - $dlng = (($result & 1) ? ~($result >> 1) : ($result >> 1)); - $lng += $dlng; - - // The actual latitude and longitude values were multiplied by - // 1e5 before encoding so that they could be converted to a 32-bit - // integer representation. (With a decimal accuracy of 5 places) - // Convert back to original values. - $points[] = array($lat * 1e-5, $lng * 1e-5); - } - - return $points; -} - -function object2array($object) { - if (is_object($object)) { - foreach ($object as $key => $value) { - $array[$key] = $value; - } - } - else { - $array = $object; - } - return $array; -} - -function geocode($query, $giveOptions) { - global $cloudmadeAPIkey; - $url = "http://geocoding.cloudmade.com/$cloudmadeAPIkey/geocoding/v2/find.js?query=".$query."&bbox=-35.5,149.00,-35.15,149.1930&return_location=true&bbox_only=true"; - $contents = json_decode(getPage($url)); - if ($giveOptions) return $contents->features; - elseif (isset($contents->features[0]->centroid)) return $contents->features[0]->centroid->coordinates[0].",".$contents->features[0]->centroid->coordinates[1]; - else return ""; -} - -function reverseGeocode($lat,$lng) { - global $cloudmadeAPIkey; - $url = "http://geocoding.cloudmade.com/$cloudmadeAPIkey/geocoding/v2/find.js?around=".$lat.",".$lng."&distance=closest&object_type=road"; - $contents = json_decode(getPage($url)); - return $contents->features[0]->properties->name; -} - -function startsWith($haystack,$needle,$case=true) { - if($case){return (strcmp(substr($haystack, 0, strlen($needle)),$needle)===0);} - return (strcasecmp(substr($haystack, 0, strlen($needle)),$needle)===0); -} - -function endsWith($haystack,$needle,$case=true) { - if($case){return (strcmp(substr($haystack, strlen($haystack) - strlen($needle)),$needle)===0);} - return (strcasecmp(substr($haystack, strlen($haystack) - strlen($needle)),$needle)===0); -} -function bracketsMeanNewLine($input) { - return str_replace(")","
",str_replace("(","
",$input)); -} - -function viaPoints($tripid,$stopid, $timingPointsOnly = false) { - global $APIurl; - $url = $APIurl."/json/tripstoptimes?trip=".$tripid; - -$json = json_decode(getPage($url)); -debug(print_r($json,true)); -$stops = $json[0]; -$times = $json[1]; -$foundStop = false; -$viaPoints = Array(); -foreach ($stops as $key => $row) -{ - if ($foundStop) { - if (!$timingPointsOnly || !startsWith($row[5],"Wj") ) { - $viaPoints[] = Array("id" => $row[0], "name" => $row[1], "time" => $times[$key]); - } - } else { - if ($row[0] == $stopid) $foundStop = true; - } -} - return $viaPoints; -} - -function viaPointNames($tripid,$stopid) { - $points = viaPoints($tripid,$stopid,true); - $pointNames = Array(); - foreach ($points as $point) { - $pointNames[] = $point['name']; - } - return implode(", ",$pointNames); -} - -function timePlaceSettings($geolocate = false) { - global $service_periods; - $geoerror = false; - if ($geolocate == true) { - $geoerror = !isset($_SESSION['lat']) || !isset($_SESSION['lat']) - || $_SESSION['lat'] == "" || $_SESSION['lon'] == ""; - } - if ($geoerror) { - echo '
Sorry, but your location could not currently be detected. - Please allow location permission, wait for your location to be detected, - or enter an address/co-ordinates in the box below.
'; - } - echo '
-

Change Time/Place...

-
-
-
- - -
-
- - Current Time? -
-
- - - -
- - - -
'; + if (count($array)) $temp_array[key($array) ] = array_shift($array); + foreach ($array as $key => $val) { + $offset = 0; + $found = false; + foreach ($temp_array as $tmp_key => $tmp_val) { + if (!$found and strtolower($val[$subkey]) > strtolower($tmp_val[$subkey])) { + $temp_array = array_merge((array)array_slice($temp_array, 0, $offset) , array( + $key => $val + ) , array_slice($temp_array, $offset)); + $found = true; + } + $offset++; + } + if (!$found) $temp_array = array_merge($temp_array, array( + $key => $val + )); + } + if ($sort_ascending) $array = array_reverse($temp_array); + else $array = $temp_array; } ?> --- a/css/jquery-mobile-1.0a3.css +++ b/css/jquery-mobile-1.0a3.css --- a/css/jquery.ui.datepicker.mobile.css +++ b/css/jquery.ui.datepicker.mobile.css @@ -1,30 +1,18 @@ -/* - * jQuery UI Datepicker @VERSION - * - * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Datepicker#theming - */ -div.hasDatepicker{ display: block; padding: 0; overflow: visible; margin: 8px 0; } -.ui-datepicker { overflow: visible; margin: 0; max-width: 500px; } -.ui-datepicker .ui-datepicker-header { position:relative; padding:.4em 0; border-bottom: 0; font-weight: bold; } -.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { padding: 1px 0 1px 2px; position:absolute; top: .5em; margin-top: 0; text-indent: -9999px; } +div.hasDatepicker{display:block;padding:0;overflow:visible;margin:8px 0;} +.ui-datepicker{overflow:visible;margin:0;max-width:500px;} +.ui-datepicker .ui-datepicker-header{position:relative;padding:.4em 0;border-bottom:0;font-weight:bold;} +.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next{padding:1px 0 1px 2px;position:absolute;top:.5em;margin-top:0;text-indent:-9999px;} +.ui-datepicker .ui-datepicker-prev{left:6px;} +.ui-datepicker .ui-datepicker-next{right:6px;} +.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center;} +.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0;} +.ui-datepicker select.ui-datepicker-month-year{width:100%;} +.ui-datepicker select.ui-datepicker-month, .ui-datepicker select.ui-datepicker-year{width:49%;} +.ui-datepicker table{width:100%;border-collapse:collapse;margin:0;} +.ui-datepicker td{border-width:1px;padding:0;text-align:center;} +.ui-datepicker td span, .ui-datepicker td a{display:block;padding:.2em 0;font-weight:bold;margin:0;border-width:0;text-align:center;text-decoration:none;} +.ui-datepicker-calendar th{padding-top:.3em;padding-bottom:.3em;} +.ui-datepicker-calendar th span, .ui-datepicker-calendar span.ui-state-default{opacity:.3;} +.ui-datepicker-calendar td a{padding-top:.5em;padding-bottom:.5em;} +.min-width-480px div.hasDatepicker{width:63%;display:inline-block;margin:0;} -.ui-datepicker .ui-datepicker-prev { left:6px; } -.ui-datepicker .ui-datepicker-next { right:6px; } -.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; } -.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; } -.ui-datepicker select.ui-datepicker-month-year {width: 100%;} -.ui-datepicker select.ui-datepicker-month, -.ui-datepicker select.ui-datepicker-year { width: 49%;} -.ui-datepicker table {width: 100%; border-collapse: collapse; margin:0; } -.ui-datepicker td { border-width: 1px; padding: 0; text-align: center; } -.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em 0; font-weight: bold; margin: 0; border-width: 0; text-align: center; text-decoration: none; } - -.ui-datepicker-calendar th { padding-top: .3em; padding-bottom: .3em; } -.ui-datepicker-calendar th span, .ui-datepicker-calendar span.ui-state-default { opacity: .3; } -.ui-datepicker-calendar td a { padding-top: .5em; padding-bottom: .5em; } - -.min-width-480px div.hasDatepicker { width: 63%; display: inline-block; margin: 0; } --- a/feedback.php +++ b/feedback.php @@ -1,18 +1,51 @@ verifyEmailAddress($address); + //$con->listVerifiedEmailAddresses(); + $m = new SimpleEmailServiceMessage(); + $m->addTo($address); + $m->setFrom($address); + $m->setSubject($topic); + $m->setMessageFromString($message); + $con->sendEmail($m); + } + else { + // In case any of our lines are larger than 70 characters, we should use wordwrap() + $message = wordwrap($message, 70); + // Send + mail($address, $topic, $message); + } +} ?>

Add/Move/Delete a Bus Stop Location

StopID: or StopCode: + if you click on feedback from a stop page, these will get filled in automatically. else describe the location/street of the stop Suggested Stop Location (lat/long or words): + if your device supports javascript, you can pick a location from the map above + +Submit!

Bug Report/Feedback

+Please leave feedback about bugs/errors or general suggestions about improvements that could be made to the way the data is presented! + + +Submit! --- /dev/null +++ b/ga.php @@ -1,1 +1,187 @@ + array( + "method" => "GET", + "user_agent" => $_SERVER["HTTP_USER_AGENT"], + "header" => ("Accepts-Language: " . $_SERVER["HTTP_ACCEPT_LANGUAGE"])) + ); + if (!empty($_GET["utmdebug"])) { + $data = file_get_contents( + $utmUrl, false, stream_context_create($options)); + } else { + $data = @file_get_contents( + $utmUrl, false, stream_context_create($options)); + } + } + + // Track a page view, updates all the cookies and campaign tracker, + // makes a server side request to Google Analytics and writes the transparent + // gif byte data to the response. + function trackPageView() { + $timeStamp = time(); + $domainName = $_SERVER["SERVER_NAME"]; + if (empty($domainName)) { + $domainName = ""; + } + + // Get the referrer from the utmr parameter, this is the referrer to the + // page that contains the tracking pixel, not the referrer for tracking + // pixel. + $documentReferer = $_GET["utmr"]; + if (empty($documentReferer) && $documentReferer !== "0") { + $documentReferer = "-"; + } else { + $documentReferer = urldecode($documentReferer); + } + $documentPath = $_GET["utmp"]; + if (empty($documentPath)) { + $documentPath = ""; + } else { + $documentPath = urldecode($documentPath); + } + + $account = $_GET["utmac"]; + $userAgent = $_SERVER["HTTP_USER_AGENT"]; + if (empty($userAgent)) { + $userAgent = ""; + } + + // Try and get visitor cookie from the request. + $cookie = $_COOKIE[COOKIE_NAME]; + + $guidHeader = $_SERVER["HTTP_X_DCMGUID"]; + if (empty($guidHeader)) { + $guidHeader = $_SERVER["HTTP_X_UP_SUBNO"]; + } + if (empty($guidHeader)) { + $guidHeader = $_SERVER["HTTP_X_JPHONE_UID"]; + } + if (empty($guidHeader)) { + $guidHeader = $_SERVER["HTTP_X_EM_UID"]; + } + + $visitorId = getVisitorId($guidHeader, $account, $userAgent, $cookie); + + // Always try and add the cookie to the response. + setrawcookie( + COOKIE_NAME, + $visitorId, + $timeStamp + COOKIE_USER_PERSISTENCE, + COOKIE_PATH); + + $utmGifLocation = "http://www.google-analytics.com/__utm.gif"; + + // Construct the gif hit url. + $utmUrl = $utmGifLocation . "?" . + "utmwv=" . VERSION . + "&utmn=" . getRandomNumber() . + "&utmhn=" . urlencode($domainName) . + "&utmr=" . urlencode($documentReferer) . + "&utmp=" . urlencode($documentPath) . + "&utmac=" . $account . + "&utmcc=__utma%3D999.999.999.999.999.1%3B" . + "&utmvid=" . $visitorId . + "&utmip=" . getIP($_SERVER["REMOTE_ADDR"]); + + sendRequestToGoogleAnalytics($utmUrl); + + // If the debug parameter is on, add a header to the response that contains + // the url that was used to contact Google Analytics. + if (!empty($_GET["utmdebug"])) { + header("X-GA-MOBILE-URL:" . $utmUrl); + } + // Finally write the gif data to the response. + writeGifData(); + } +?> + --- a/index.php +++ b/index.php @@ -1,13 +1,14 @@ -
-

busness time


Canberra Bus Timetables and Trip Planner
+

busness time


Canberra Bus Timetables and Trip Planner
- Launch Trip Planner... + + Launch Trip Planner... " ).datepicker({ altField: "#" + $(this).attr( "id" ), showOtherMonths: true }) ); + $(this).addClass("hasDatepicker"); + } + }); + }); +})( jQuery ); + --- a/js/jquery-1.5.js +++ b/js/jquery-1.5.js --- a/js/jquery-mobile-1.0a3.js +++ b/js/jquery-mobile-1.0a3.js --- a/js/jquery.effects.core.js +++ b/js/jquery.effects.core.js --- a/js/jquery.ui.autocomplete.js +++ b/js/jquery.ui.autocomplete.js --- a/js/jquery.ui.datepicker.mobile.js +++ /dev/null @@ -1,59 +1,1 @@ -/* -* jQuery Mobile Framework : temporary extension to port jQuery UI's datepicker for mobile -* Copyright (c) jQuery Project -* Dual licensed under the MIT or GPL Version 2 licenses. -* http://jquery.org/license -*/ -(function($, undefined ) { - //cache previous datepicker ui method - var prevDp = $.fn.datepicker; - - //rewrite datepicker - $.fn.datepicker = function( options ){ - - var dp = this; - - //call cached datepicker plugin - prevDp.call( this, options ); - - //extend with some dom manipulation to update the markup for jQM - //call immediately - function updateDatepicker(){ - $( ".ui-datepicker-header", dp ).addClass("ui-body-c ui-corner-top").removeClass("ui-corner-all"); - $( ".ui-datepicker-prev, .ui-datepicker-next", dp ).attr("href", "#"); - $( ".ui-datepicker-prev", dp ).buttonMarkup({iconpos: "notext", icon: "arrow-l", shadow: true, corners: true}); - $( ".ui-datepicker-next", dp ).buttonMarkup({iconpos: "notext", icon: "arrow-r", shadow: true, corners: true}); - $( ".ui-datepicker-calendar th", dp ).addClass("ui-bar-c"); - $( ".ui-datepicker-calendar td", dp ).addClass("ui-body-c"); - $( ".ui-datepicker-calendar a", dp ).buttonMarkup({corners: false, shadow: false}); - $( ".ui-datepicker-calendar a.ui-state-active", dp ).addClass("ui-btn-active"); // selected date - $( ".ui-datepicker-calendar a.ui-state-highlight", dp ).addClass("ui-btn-up-e"); // today"s date - $( ".ui-datepicker-calendar .ui-btn", dp ).each(function(){ - var el = $(this); - // remove extra button markup - necessary for date value to be interpreted correctly - el.html( el.find( ".ui-btn-text" ).text() ); - }); - }; - - //update now - updateDatepicker(); - - // and on click - $( dp ).click( updateDatepicker ); - - //return jqm obj - return this; - }; - - //bind to pagecreate to automatically enhance date inputs - $( ".ui-page" ).live( "pagecreate", function(){ - $( "#date, input[type='date'], input[data-type='date']" ).each(function(){ - if ($(this).hasClass("hasDatepicker") == false) { - $(this).after( $( "
" ).datepicker({ altField: "#" + $(this).attr( "id" ), showOtherMonths: true }) ); - $(this).addClass("hasDatepicker"); - } - }); - }); -})( jQuery ); - --- a/js/jquery.ui.position.js +++ b/js/jquery.ui.position.js --- a/js/jquery.ui.widget.js +++ b/js/jquery.ui.widget.js --- a/layar_api.php +++ b/layar_api.php @@ -1,58 +1,61 @@ $page_start && $stopNum <= $page_end) { - $hotspot = Array(); - $hotspot['id'] = $row[0]; - $hotspot['title'] = $row[1]; - $hotspot['type'] = 0; - $hotspot['lat'] = floor($row[2]*1000000); - $hotspot['lon'] = floor($row[3]*1000000); - $hotspot['distance'] = distance($row[2], $row[3], $_REQUEST['lat'], $_REQUEST['lon']); - if (!isset($_REQUEST['radius']) || $hotspot['distance'] < $_REQUEST['radius']) { - $hotspot['actions'] = Array(Array("label" => 'View more trips/information', 'uri' => 'http://bus.lambdacomplex.org/'.'stop.php?stopid='.$row[0])); - $url = $APIurl."/json/stoptrips?stop=".$row[0]."&time=".midnight_seconds()."&service_period=".service_period(); - $trips = json_decode(getPage($url)); - debug(print_r($trips,true)); - foreach ($trips as $key => $row) - { - if ($key < 3) { - $hotspot['line'.strval($key+2)]= $row[1][1] .' @ ' .midnight_seconds_to_time($row[0]); - } - } - if (sizeof($trips) == 0) $hotspot['line2'] = 'No trips in the near future.'; - $output['hotspots'][] = $hotspot; - } - } +foreach ($contents as $row) { + $stopNum++; + if ($stopNum > $page_start && $stopNum <= $page_end) { + $hotspot = Array(); + $hotspot['id'] = $row[0]; + $hotspot['title'] = $row[1]; + $hotspot['type'] = 0; + $hotspot['lat'] = floor($row[2] * 1000000); + $hotspot['lon'] = floor($row[3] * 1000000); + $hotspot['distance'] = distance($row[2], $row[3], $_REQUEST['lat'], $_REQUEST['lon']); + $hotspot['actions'] = Array( + Array( + "label" => 'View more trips/information', + 'uri' => 'http://bus.lambdacomplex.org/' . 'stop.php?stopid=' . $row[0] + ) + ); + $url = $APIurl . "/json/stoptrips?stop=" . $row[0] . "&time=" . midnight_seconds() . "&service_period=" . service_period() . "&limit=4&time_range=" . strval(90 * 60); + $trips = json_decode(getPage($url)); + debug(print_r($trips, true)); + foreach ($trips as $key => $row) { + if ($key < 3) { + $hotspot['line' . strval($key + 2) ] = $row[1][1] . ' @ ' . midnight_seconds_to_time($row[0]); + } + } + if (sizeof($trips) == 0) $hotspot['line2'] = 'No trips in the near future.'; + $output['hotspots'][] = $hotspot; + } } if (sizeof($hotspot) > 0) { - $output['errorString'] = 'ok'; - $output['errorCode'] = 0; - } else { - $output['errorString'] = 'no results, try increasing range'; - $output['errorCode'] = 21; + $output['errorString'] = 'ok'; + $output['errorCode'] = 0; +} +else { + $output['errorString'] = 'no results, try increasing range'; + $output['errorCode'] = 21; } if ($page_end >= $max_results || sizeof($hotspot) < $max_page) { - $output["morePages"] = false; - $output["nextPageKey"] = null; -} else { - $output["morePages"] = true; - $output["nextPageKey"] = $page_end; + $output["morePages"] = false; + $output["nextPageKey"] = null; +} +else { + $output["morePages"] = true; + $output["nextPageKey"] = $page_end; } echo json_encode($output); ?> --- /dev/null +++ b/myway_api.json.php @@ -1,1 +1,125 @@ + "SRNO", + "DOBmonth" => "month", + "DOBday" => "day", + "DOByear" => "year", + "secret_answer" => "pwrd", + "button" => "button" +); +foreach (Array( + "card_number", + "DOBday", + "DOBmonth", + "DOByear" +) as $field_name) { + if (isset($_REQUEST[$field_name])) { + $fields[$field_name] = filter_var($_REQUEST[$field_name], FILTER_SANITIZE_NUMBER_INT); + } + else { + $return["error"][] = $field_name. " parameter invalid or unspecified"; + } +} +if (isset($_REQUEST['secret_answer'])) { + $fields['secret_answer'] = filter_var($_REQUEST['secret_answer'], FILTER_SANITIZE_STRING, Array( + FILTER_FLAG_NO_ENCODE_QUOTES, + FILTER_FLAG_STRIP_HIGH, + FILTER_FLAG_STRIP_LOW + )); +} +else { + $return["error"][] = "secret_answer parameter invalid or unspecified"; +} +$fields['button'] = 'Submit'; +$fields_string = ""; +//url-ify the data for the POST +foreach ($fields as $key => $value) { + if (sizeof($value) === 0) $return['error'][] = $key . " parameter invalid or unspecified"; + $fields_string.= $field_mapping[$key] . '=' . $value . '&'; +} +$fields_string = rtrim($fields_string, '&'); +if (!isset($return['error'])) { + //open connection + $ch = curl_init(); + //set the url, number of POST vars, POST data + curl_setopt($ch, CURLOPT_URL, $url); + curl_setopt($ch, CURLOPT_POST, count($fields)); + curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + curl_setopt($ch, CURLOPT_HEADER, 0); + curl_setopt($ch, CURLOPT_TIMEOUT, 30); + //execute post + $pageHTML = curl_exec($ch); + if (curl_errno($ch)) $return["error"][] = "Network error " . curl_errno($ch) . " " . curl_error($ch) . " " . $url . $fields_string; + //close connection + curl_close($ch); +} +if (!isset($return['error'])) { + include_once ('simple_html_dom.php'); + $page = str_get_html($pageHTML); + $pageAlerts = $page->find(".smartCardAlert"); + if (sizeof($pageAlerts) > 0) { + $return['error'][] = $pageAlerts[0]->plaintext; + } + if (!isset($return['error'])) { + $tableNum = 0; + $tableName = Array( + 1 => "myway_carddetails", + 2 => "myway_transactions" + ); + foreach ($page->find("table") as $table) { + $tableNum++; + $tableColumns = Array(); + $tableColumnNum = 0; + foreach ($table->find("th") as $th) { + $tableColumns[$tableColumnNum] = cleanString($th->plaintext); + $tableColumnNum++; + } + $tableRowNum = 0; + foreach ($table->find("tr") as $tr) { + $tableColumnNum = 0; + foreach ($tr->find("td") as $td) { + if ($tableNum == 1) $return[$tableName[$tableNum]][$tableColumns[$tableColumnNum]] = cleanString($td->plaintext); + else $return[$tableName[$tableNum]][$tableRowNum][$tableColumns[$tableColumnNum]] = cleanString($td->plaintext); + $tableColumnNum++; + } + $tableRowNum++; + } + } + } +} +if (sizeof($return) == 0) { +$return['error'][] = "No data extracted from MyWay website - API may be out of date"; +} + +header('Content-Type: text/javascript; charset=utf8'); +// header('Access-Control-Allow-Origin: http://bus.lambdacomplex.org/'); +header('Access-Control-Max-Age: 3628800'); +header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE'); +if (isset($_GET['callback'])) { + $json = '(' . json_encode($return) . ');'; //must wrap in parens and end with semicolon + print_r($_GET['callback'] . $json); //callback is prepended for json-p + +} +else echo json_encode($return); +?> + --- /dev/null +++ b/mywaybalance.php @@ -1,1 +1,64 @@ +" . var_dump($return['error']) . ""; + } else { + echo "

Balance: " . $return['myway_carddetails']['Card Balance'] . "

"; + echo '
  • Recent Transactions
  • '; + foreach ($return['myway_transactions'] as $transaction) { + echo "
  • " . $transaction["Date / Time"] . ""; + echo "
    " . $transaction["TX Reference No / Type"]. ""; + echo '

    '.$transaction["TX Amount"].'

    '; + echo "
  • "; + } + echo "
"; + } +} +if (isset($_REQUEST['card_number']) && isset($_REQUEST['date']) && isset($_REQUEST['secret_answer'])) { + $cardNumber = $_REQUEST['card_number']; + $date = explode("/", $_REQUEST['date']); + $pwrd = $_REQUEST['secret_answer']; + if ($_REQUEST['remember'] == true) { + $_COOKIE['card_number'] = $cardNumber; + $_COOKIE['date'] = $date; + $_COOKIE['secret_answer'] = $pwrd; + } + printBalance($cardNumber, $date, $pwrd); +} +else if (isset($_COOKIE['card_number']) && isset($_COOKIE['date']) && isset($_COOKIE['secret_answer'])) { + $cardNumber = $_COOKIE['card_number']; + $date = explode("/", $_COOKIE['date']); + $pwrd = $_COOKIE['secret_answer']; + printBalance($cardNumber, $date, $pwrd); +} +else { + $date = (isset($_REQUEST['date']) ? filter_var($_REQUEST['date'], FILTER_SANITIZE_STRING) : date("m/d/Y")); + echo '
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
'; +} +include_footer(); +?> --- a/owa/Callbacks.inc +++ /dev/null @@ -1,10 +1,1 @@ - --- a/owa/action.php +++ /dev/null @@ -1,48 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - * @depricated - */ - -$owa = new owa_php; - -$owa->e->debug('Special action request received by action.php...'); - -if ( $owa->isEndpointEnabled( basename( __FILE__ ) ) ) { - - // run controller or view and echo page content - echo $owa->handleRequestFromURL(); -} else { - // unload owa - $owa->restInPeace(); -} - -?> --- a/owa/api.php +++ /dev/null @@ -1,49 +1,1 @@ - - * @copyright Copyright © 2010 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.3.0 - * @link http://wiki.openwebanalytics.com/index.php?title=REST_API - */ - -// define entry point cnstant -define('OWA_API', true); -// invoke OWA -$owa = new owa_php; - -if ( $owa->isEndpointEnabled( basename( __FILE__ ) ) ) { - - // run api command and echo page content - echo $owa->handleRequest('', 'base.apiRequest'); -} else { - // unload owa - $owa->restInPeace(); -} - -?> --- a/owa/cli.php +++ /dev/null @@ -1,92 +1,1 @@ - - * @copyright Copyright © 2010 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.2.1 - */ - -define('OWA_CLI', true); - -if (!empty($_POST)) { - exit(); -} elseif (!empty($_GET)) { - exit(); -} elseif (!empty($argv)) { - $params = array(); - // get params from the command line args - // $argv is a php super global variable - - for ($i=1; $iisEndpointEnabled( basename( __FILE__ ) ) ) { - - // setting CLI mode to true - $owa->setSetting('base', 'cli_mode', true); - // setting user auth - $owa->setCurrentUser('admin', 'cli-user'); - // run controller or view and echo page content - $s = owa_coreAPI::serviceSingleton(); - $s->loadCliCommands(); - - if (array_key_exists('cmd', $params)) { - - $cmd = $s->getCliCommandClass($params['cmd']); - - if ($cmd) { - $params['do'] = $cmd; - echo $owa->handleRequest($params); - } else { - echo "Invalid command name."; - } - - } else { - echo "Missing a command argument."; - } - -} else { - // unload owa - $owa->restInPeace(); -} - -?> --- a/owa/conf/countryCodes2Names.php +++ /dev/null @@ -1,253 +1,1 @@ - 'Afghanistan', - 'AX' => 'Ã…land Islands', - 'AL' => 'Albania', - 'DZ' => 'Algeria', - 'AS' => 'American Samoa', - 'AD' => 'Andorra', - 'AO' => 'Angola', - 'AI' => 'Anguilla', - 'AQ' => 'Antarctica', - 'AG' => 'Antigua and Barbuda', - 'AR' => 'Argentina', - 'AM' => 'Armenia', - 'AW' => 'Aruba', - 'AU' => 'Australia', - 'AT' => 'Austria', - 'AZ' => 'Azerbaijan', - 'BS' => 'Bahamas', - 'BH' => 'Bahrain', - 'BD' => 'Bangladesh', - 'BB' => 'Barbados', - 'BY' => 'Belarus', - 'BE' => 'Belgium', - 'BZ' => 'Belize', - 'BJ' => 'Benin', - 'BM' => 'Bermuda', - 'BT' => 'Bhutan', - 'BO' => 'Bolivia, Plurinational State of', - 'BA' => 'Bosnia and Herzegovina', - 'BW' => 'Botswana', - 'BV' => 'Bouvet Island', - 'BR' => 'Brazil', - 'IO' => 'British Indian Ocean Territory', - 'BN' => 'Brunei Darussalam', - 'BG' => 'Bulgaria', - 'BF' => 'Burkina Faso', - 'BI' => 'Burundi', - 'KH' => 'Cambodia', - 'CM' => 'Cameroon', - 'CA' => 'Canada', - 'CV' => 'Cape Verde', - 'KY' => 'Cayman Islands', - 'CF' => 'Central African Republic', - 'TD' => 'Chad', - 'CL' => 'Chile', - 'CN' => 'China', - 'CX' => 'Christmas Island', - 'CC' => 'Cocos (Keeling) Islands', - 'CO' => 'Colombia', - 'KM' => 'Comoros', - 'CG' => 'Congo', - 'CD' => 'Congo, the Democratic Republic of the', - 'CK' => 'Cook Islands', - 'CR' => 'Costa Rica', - 'CI' => "Côte d'Ivoire", - 'HR' => 'Croatia', - 'CU' => 'Cuba', - 'CY' => 'Cyprus', - 'CZ' => 'Czech Republic', - 'DK' => 'Denmark', - 'DJ' => 'Djibouti', - 'DM' => 'Dominica', - 'DO' => 'Dominican Republic', - 'EC' => 'Ecuador', - 'EG' => 'Egypt', - 'SV' => 'El Salvador', - 'GQ' => 'Equatorial Guinea', - 'ER' => 'Eritrea', - 'EE' => 'Estonia', - 'ET' => 'Ethiopia', - 'FK' => 'Falkland Islands (Malvinas)', - 'FO' => 'Faroe Islands', - 'FJ' => 'Fiji', - 'FI' => 'Finland', - 'FR' => 'France', - 'GF' => 'French Guiana', - 'PF' => 'French Polynesia', - 'TF' => 'French Southern Territories', - 'GA' => 'Gabon', - 'GM' => 'Gambia', - 'GE' => 'Georgia', - 'DE' => 'Germany', - 'GH' => 'Ghana', - 'GI' => 'Gibraltar', - 'GR' => 'Greece', - 'GL' => 'Greenland', - 'GD' => 'Grenada', - 'GP' => 'Guadeloupe', - 'GU' => 'Guam', - 'GT' => 'Guatemala', - 'GG' => 'Guernsey', - 'GN' => 'Guinea', - 'GW' => 'Guinea-Bissau', - 'GY' => 'Guyana', - 'HT' => 'Haiti', - 'HM' => 'Heard Island and McDonald Islands', - 'VA' => 'Holy See (Vatican City State)', - 'HN' => 'Honduras', - 'HK' => 'Hong Kong', - 'HU' => 'Hungary', - 'IS' => 'Iceland', - 'IN' => 'India', - 'ID' => 'Indonesia', - 'IR' => 'Iran, Islamic Republic of', - 'IQ' => 'Iraq', - 'IE' => 'Ireland', - 'IM' => 'Isle of Man', - 'IL' => 'Israel', - 'IT' => 'Italy', - 'JM' => 'Jamaica', - 'JP' => 'Japan', - 'JE' => 'Jersey', - 'JO' => 'Jordan', - 'KZ' => 'Kazakhstan', - 'KE' => 'Kenya', - 'KI' => 'Kiribati', - 'KP' => "Korea, Democratic People's Republic of", - 'KR' => 'Korea, Republic of', - 'KW' => 'Kuwait', - 'KG' => 'Kyrgyzstan', - 'LA' => "Lao People's Democratic Republic", - 'LV' => 'Latvia', - 'LB' => 'Lebanon', - 'LS' => 'Lesotho', - 'LR' => 'Liberia', - 'LY' => 'Libyan Arab Jamahiriya', - 'LI' => 'Liechtenstein', - 'LT' => 'Lithuania', - 'LU' => 'Luxembourg', - 'MO' => 'Macao', - 'MK' => 'Macedonia, the former Yugoslav Republic of', - 'MG' => 'Madagascar', - 'MW' => 'Malawi', - 'MY' => 'Malaysia', - 'MV' => 'Maldives', - 'ML' => 'Mali', - 'MT' => 'Malta', - 'MH' => 'Marshall Islands', - 'MQ' => 'Martinique', - 'MR' => 'Mauritania', - 'MU' => 'Mauritius', - 'YT' => 'Mayotte', - 'MX' => 'Mexico', - 'FM' => 'Micronesia, Federated States of', - 'MD' => 'Moldova, Republic of', - 'MC' => 'Monaco', - 'MN' => 'Mongolia', - 'ME' => 'Montenegro', - 'MS' => 'Montserrat', - 'MA' => 'Morocco', - 'MZ' => 'Mozambique', - 'MM' => 'Myanmar', - 'NA' => 'Namibia', - 'NR' => 'Nauru', - 'NP' => 'Nepal', - 'NL' => 'Netherlands', - 'AN' => 'Netherlands Antilles', - 'NC' => 'New Caledonia', - 'NZ' => 'New Zealand', - 'NI' => 'Nicaragua', - 'NE' => 'Niger', - 'NG' => 'Nigeria', - 'NU' => 'Niue', - 'NF' => 'Norfolk Island', - 'MP' => 'Northern Mariana Islands', - 'NO' => 'Norway', - 'OM' => 'Oman', - 'PK' => 'Pakistan', - 'PW' => 'Palau', - 'PS' => 'Palestinian Territory, Occupied', - 'PA' => 'Panama', - 'PG' => 'Papua New Guinea', - 'PY' => 'Paraguay', - 'PE' => 'Peru', - 'PH' => 'Philippines', - 'PN' => 'Pitcairn', - 'PL' => 'Poland', - 'PT' => 'Portugal', - 'PR' => 'Puerto Rico', - 'QA' => 'Qatar', - 'RE' => 'Réunion', - 'RO' => 'Romania', - 'RU' => 'Russian Federation', - 'RW' => 'Rwanda', - 'BL' => 'Saint Barthélemy', - 'SH' => 'Saint Helena', - 'KN' => 'Saint Kitts and Nevis', - 'LC' => 'Saint Lucia', - 'MF' => 'Saint Martin (French part)', - 'PM' => 'Saint Pierre and Miquelon', - 'VC' => 'Saint Vincent and the Grenadines', - 'WS' => 'Samoa', - 'SM' => 'San Marino', - 'ST' => 'Sao Tome and Principe', - 'SA' => 'Saudi Arabia', - 'SN' => 'Senegal', - 'RS' => 'Serbia', - 'SC' => 'Seychelles', - 'SL' => 'Sierra Leone', - 'SG' => 'Singapore', - 'SK' => 'Slovakia', - 'SI' => 'Slovenia', - 'SB' => 'Solomon Islands', - 'SO' => 'Somalia', - 'ZA' => 'South Africa', - 'GS' => 'South Georgia and the South Sandwich Islands', - 'ES' => 'Spain', - 'LK' => 'Sri Lanka', - 'SD' => 'Sudan', - 'SR' => 'Suriname', - 'SJ' => 'Svalbard and Jan Mayen', - 'SZ' => 'Swaziland', - 'SE' => 'Sweden', - 'CH' => 'Switzerland', - 'SY' => 'Syrian Arab Republic', - 'TW' => 'Taiwan, Province of China', - 'TJ' => 'Tajikistan', - 'TZ' => 'Tanzania, United Republic of', - 'TH' => 'Thailand', - 'TL' => 'Timor-Leste', - 'TG' => 'Togo', - 'TK' => 'Tokelau', - 'TO' => 'Tonga', - 'TT' => 'Trinidad and Tobago', - 'TN' => 'Tunisia', - 'TR' => 'Turkey', - 'TM' => 'Turkmenistan', - 'TC' => 'Turks and Caicos Islands', - 'TV' => 'Tuvalu', - 'UG' => 'Uganda', - 'UA' => 'Ukraine', - 'AE' => 'United Arab Emirates', - 'GB' => 'United Kingdom', - 'US' => 'United States', - 'UM' => 'United States Minor Outlying Islands', - 'UY' => 'Uruguay', - 'UZ' => 'Uzbekistan', - 'VU' => 'Vanuatu', - 'VE' => 'Venezuela, Bolivarian Republic of', - 'VN' => 'Viet Nam', - 'VG' => 'Virgin Islands, British', - 'VI' => 'Virgin Islands, U.S.', - 'WF' => 'Wallis and Futuna', - 'EH' => 'Western Sahara', - 'YE' => 'Yemen', - 'ZM' => 'Zambia', - 'ZW' => 'Zimbabwe' -); -?> + --- a/owa/conf/countryNames2Codes.php +++ /dev/null @@ -1,250 +1,1 @@ - 'AF', - "Ã…land islands" => 'AX', - "albania" => 'AL', - "algeria" => 'DZ', - "american samoa" => 'AS', - "andorra" => 'AD', - "angola" => 'AO', - "anguilla" => 'AI', - "antarctica" => 'AQ', - "antigua and barbuda" => 'AG', - "argentina" => 'AR', - "armenia" => 'AM', - "aruba" => 'AW', - "australia" => 'AU', - "austria" => 'AT', - "azerbaijan" => 'AZ', - "bahamas" => 'BS', - "bahrain" => 'BH', - "bangladesh" => 'BD', - "barbados" => 'BB', - "belarus" => 'BY', - "belgium" => 'BE', - "belize" => 'BZ', - "benin" => 'BJ', - "bermuda" => 'BM', - "bhutan" => 'BT', - "bolivia, plurinational state of" => 'BO', - "bosnia and herzegovina" => 'BA', - "botswana" => 'BW', - "bouvet island" => 'BV', - "brazil" => 'BR', - "british indian ocean territory" => 'IO', - "brunei darussalam" => 'BN', - "bulgaria" => 'BG', - "burkina faso" => 'BF', - "burundi" => 'BI', - "cambodia" => 'KH', - "cameroon" => 'CM', - "canada" => 'CA', - "cape verde" => 'CV', - "cayman islands" => 'KY', - "central african republic" => 'CF', - "chad" => 'TD', - "chile" => 'CL', - "china" => 'CN', - "christmas island" => 'CX', - "cocos (keeling) islands" => 'CC', - "colombia" => 'CO', - "comoros" => 'KM', - "congo" => 'CG', - "congo, the democratic republic of the" => 'CD', - "cook islands" => 'CK', - "costa rica" => 'CR', - "côte d'ivoire" => 'CI', - "croatia" => 'HR', - "cuba" => 'CU', - "cyprus" => 'CY', - "czech republic" => 'CZ', - "denmark" => 'DK', - "djibouti" => 'DJ', - "dominica" => 'DM', - "dominican republic" => 'DO', - "ecuador" => 'EC', - "egypt" => 'EG', - "el salvador" => 'SV', - "equatorial guinea" => 'GQ', - "eritrea" => 'ER', - "estonia" => 'EE', - "ethiopia" => 'ET', - "falkland islands (malvinas)" => 'FK', - "faroe islands" => 'FO', - "fiji" => 'FJ', - "finland" => 'FI', - "france" => 'FR', - "french guiana" => 'GF', - "french polynesia" => 'PF', - "french southern territories" => 'TF', - "gabon" => 'GA', - "gambia" => 'GM', - "georgia" => 'GE', - "germany" => 'DE', - "ghana" => 'GH', - "gibraltar" => 'GI', - "greece" => 'GR', - "greenland" => 'GL', - "grenada" => 'GD', - "guadeloupe" => 'GP', - "guam" => 'GU', - "guatemala" => 'GT', - "guernsey" => 'GG', - "guinea" => 'GN', - "guinea-bissau" => 'GW', - "guyana" => 'GY', - "haiti" => 'HT', - "heard island and mcdonald islands" => 'HM', - "holy see (vatican city state)" => 'VA', - "honduras" => 'HN', - "hong kong" => 'HK', - "hungary" => 'HU', - "iceland" => 'IS', - "india" => 'IN', - "indonesia" => 'ID', - "iran, islamic republic of" => 'IR', - "iraq" => 'IQ', - "ireland" => 'IE', - "isle of man" => 'IM', - "israel" => 'IL', - "italy" => 'IT', - "jamaica" => 'JM', - "japan" => 'JP', - "jersey" => 'JE', - "jordan" => 'JO', - "kazakhstan" => 'KZ', - "kenya" => 'KE', - "kiribati" => 'KI', - "korea, democratic people's republic of" => 'KP', - "korea, republic of" => 'KR', - "kuwait" => 'KW', - "kyrgyzstan" => 'KG', - "lao people's democratic republic" => 'LA', - "latvia" => 'LV', - "lebanon" => 'LB', - "lesotho" => 'LS', - "liberia" => 'LR', - "libyan arab jamahiriya" => 'LY', - "liechtenstein" => 'LI', - "lithuania" => 'LT', - "luxembourg" => 'LU', - "macao" => 'MO', - "macedonia, the former yugoslav republic of" => 'MK', - "madagascar" => 'MG', - "malawi" => 'MW', - "malaysia" => 'MY', - "maldives" => 'MV', - "mali" => 'ML', - "malta" => 'MT', - "marshall islands" => 'MH', - "martinique" => 'MQ', - "mauritania" => 'MR', - "mauritius" => 'MU', - "mayotte" => 'YT', - "mexico" => 'MX', - "micronesia, federated states of" => 'FM', - "moldova, republic of" => 'MD', - "monaco" => 'MC', - "mongolia" => 'MN', - "montenegro" => 'ME', - "montserrat" => 'MS', - "morocco" => 'MA', - "mozambique" => 'MZ', - "myanmar" => 'MM', - "namibia" => 'NA', - "nauru" => 'NR', - "nepal" => 'NP', - "netherlands" => 'NL', - "netherlands antilles" => 'AN', - "new caledonia" => 'NC', - "new zealand" => 'NZ', - "nicaragua" => 'NI', - "niger" => 'NE', - "nigeria" => 'NG', - "niue" => 'NU', - "norfolk island" => 'NF', - "northern mariana islands" => 'MP', - "norway" => 'NO', - "oman" => 'OM', - "pakistan" => 'PK', - "palau" => 'PW', - "palestinian territory, occupied" => 'PS', - "panama" => 'PA', - "papua new guinea" => 'PG', - "paraguay" => 'PY', - "peru" => 'PE', - "philippines" => 'PH', - "pitcairn" => 'PN', - "poland" => 'PL', - "portugal" => 'PT', - "puerto rico" => 'PR', - "qatar" => 'QA', - "réunion" => 'RE', - "romania" => 'RO', - "russian federation" => 'RU', - "rwanda" => 'RW', - "saint barthélemy" => 'BL', - "saint helena" => 'SH', - "saint kitts and nevis" => 'KN', - "saint lucia" => 'LC', - "saint martin (french part)" => 'MF', - "saint pierre and miquelon" => 'PM', - "saint vincent and the grenadines" => 'VC', - "samoa" => 'WS', - "san marino" => 'SM', - "sao tome and principe" => 'ST', - "saudi arabia" => 'SA', - "senegal" => 'SN', - "serbia" => 'RS', - "seychelles" => 'SC', - "sierra leone" => 'SL', - "singapore" => 'SG', - "slovakia" => 'SK', - "slovenia" => 'SI', - "solomon islands" => 'SB', - "somalia" => 'SO', - "south africa" => 'ZA', - "south georgia and the south sandwich islands" => 'GS', - "spain" => 'ES', - "sri lanka" => 'LK', - "sudan" => 'SD', - "suriname" => 'SR', - "svalbard and jan mayen" => 'SJ', - "swaziland" => 'SZ', - "sweden" => 'SE', - "switzerland" => 'CH', - "syrian arab republic" => 'SY', - "taiwan, province of china" => 'TW', - "tajikistan" => 'TJ', - "tanzania, united republic of" => 'TZ', - "thailand" => 'TH', - "timor-leste" => 'TL', - "togo" => 'TG', - "tokelau" => 'TK', - "tonga" => 'TO', - "trinidad and tobago" => 'TT', - "tunisia" => 'TN', - "turkey" => 'TR', - "turkmenistan" => 'TM', - "turks and caicos islands" => 'TC', - "tuvalu" => 'TV', - "uganda" => 'UG', - "ukraine" => 'UA', - "united arab emirates" => 'AE', - "united kingdom" => 'GB', - "united states" => 'US', - "united states minor outlying islands" => 'UM', - "uruguay" => 'UY', - "uzbekistan" => 'UZ', - "vanuatu" => 'VU', - "venezuela, bolivarian republic of" => 'VE', - "viet nam" => 'VN', - "virgin islands, british" => 'VG', - "virgin islands, u.s." => 'VI', - "wallis and futuna" => 'WF', - "western sahara" => 'EH', - "yemen" => 'YE', - "zambia" => 'ZM', - "zimbabwe" => 'ZW', -); -?> + --- a/owa/conf/index.php +++ /dev/null @@ -1,3 +1,1 @@ - + --- a/owa/conf/messages.php +++ /dev/null @@ -1,100 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision: 1051 $ - * @since owa 1.0.0 - */ - -$_owa_messages = array( - -2000 => array("An e-mail containing instructions on how to complete the password reset process has been sent to %s",1), -2001 => array("The e-mail %s was not found in our database. Please check the address and try again.",1), -2002 => array("Login Failed. Your user name or password did not match.",0), -2003 => array("Your Account lacks the necessary privileges to access the requested resource.",0), -2004 => array("You must login to access the requested resource.",0), -2010 => array("Success. Logout Complete.",0), -2011 => array("Error. Can't find your temporary passkey in the db.",0), - -// Options/Configuration related -2500 => array("Options Saved.",0), -2501 => array("The module was activated successfully.",0), -2502 => array("The module was deactivated successfully.",0), -2503 => array("Options reset to Default Values.",0), -2504 => array("Entity %s Schema Created.",1), -2504 => array("Goal Saved.",0), - - -//User managment -3000 => array("Success. User Added.", 0), -3001 => array("Error. That user name is already taken.",0), -3002 => array("The form data that you entered contained one or more errors. Please check the data and submit the from again."), -3003 => array("Success. User profile saved.",0), -3004 => array("Success. User acount deleted."), -3005 => array("Enter Your New Password", 0), -3006 => array("Success. Please login with your new password.",0), -3007 => array("Error. Your passwords must match.",0), -3008 => array("Error. Your password must be %s characters long.", 1), -3009 => array("Error. A user with that email address already exists.", 0), -3010 => array("A user with that email address does not exist.", 0), -3011 => array("Could not update user profile."), -3012 => array("Could not connect the database. Check your settings and try again.",0), - -//sites management -3200 => array("Error. Please fill in all required fields.",0), -3201 => array("Success. Site Profile Updated.",0), -3202 => array("Success. Site Added.",0), -3203 => array("Error. Site Could not be added",0), -3204 => array("Success. Site Deleted.",0), -3206 => array("Error. A site with that domain already exists.",0), -3207 => array("Error. You must enter a domain when adding a web site.",0), -3208 => array("Error. That site does not exist.",0), -3208 => array("Please remove the http:// from your beginning of your domain.",0), - - -//install -3300 => array("Could not connect to the database. Please check the database connection settings in your configuration file and try again.",0), -3301 => array("This version of OWA requires PHP 5.2.x or higher.",0), -3302 => array("Database Schema Installation failed. Please check the error log file for more details.",0), -3303 => array("Success. Default Site Added.",0), -3304 => array("Success. Admin User Added.",0), -3305 => array("Success. Base Database Schema Installed.",0), -3306 => array("Error. User id already exists for some reason.",0), -3307 => array("Updates failed. Check OWA's error log file for more details and try again.",0), -3308 => array("Success. Updates were applied.",0), -3309 => array("Site Domain is required.",0), -3310 => array("E-mail Address is required.",0), -3311 => array("These updates must be applied using the command line interface (CLI). Run '/path/to/php cli.php cmd=update' from your server's command shell to apply these updates. For more information on updating see the install/update page on the wiki.",0), -// Graph related -3500 => array("There is no data for\nthis time period.",0), - -// Report Related -3600 => array("Unknown",0) - -); - - -?> + --- a/owa/conf/os.ini +++ /dev/null @@ -1,73 +1,1 @@ -;;; Operating Systems -[info] -name="2006-03-30" - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Windows - -[Win.*NT 5.1] -name="Windows XP" - -[Win.*NT 5\.0] -name="Windows 2000" - -[Win.*(Vista|XP|2000|ME|NT|9.?)] -name="Windows $1" - -[Windows .*(3\.11|NT)] -name="Windows $1" - -[Win32] -name="Windows [prior to 1995" - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; UNIX - -[Linux 2\.(.?)\.] -name="Linux 2.$1.x" - -[Linux] -name="Linux [unknown version]" - -[FreeBSD .*-CURRENT$] -name="FreeBSD -CURRENT" - -[FreeBSD (.?)\.] -name="FreeBSD $1.x" - -[NetBSD 1\.(.?)\.] -name="NetBSD 1.$1.x" - -[(Free|Net|Open)BSD] -name="$1BSD [unknown]" - -[HP-UX B\.(10|11)\.] -name="HP-UX B.$1.x" - -[IRIX(64)? 6\.] -name="IRIX 6.x" - -[SunOS 4\.1] -name="SunOS 4.1.x" - -[SunOS 5\.([4-6])] -name="Solaris 2.$1.x" - -[SunOS 5\.([78])] -name="Solaris $1.x" - -[X11] -name="UNIX [unknown]" - -[Unix] -name="UNIX [unknown]" - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Macintosh - -[Mac_PowerPC] -name="Mac OS [PowerPC]" - -[Mac OS X] -name="Mac OS X" - -[*] -name="Unknown OS" --- a/owa/conf/query_strings.ini +++ /dev/null @@ -1,29 +1,1 @@ -[\?(?:.+&|)q=(.+?)(?:&|$)] -[search\?(?:.+&|)p=(.+?)(?:&|$)] -[\?(?:.+&|)Keywords=(.+?)(?:&|$)] -[\?(?:.+&|)MT=(.+?)(?:&|$)] -[\?(?:.+&|)Q=(.+?)(?:&|$)] -[\?(?:.+&|)QUERY=(.+?)(?:&|$)] -[\?(?:.+&|)Suchwort=(.+?)(?:&|$)] -[\?(?:.+&|)ask=(.+?)(?:&|$)] -[\?(?:.+&|)eingabe=(.+?)(?:&|$)] -[\?(?:.+&|)in=(.+?)(?:&|$)] -[\?(?:.+&|)keyword=(.+?)(?:&|$)] -[\?(?:.+&|)keywords=(.+?)(?:&|$)] -[\?(?:.+&|)kw=(.+?)(?:&|$)] -[\?(?:.+&|)mots=(.+?)(?:&|$)] -[\?(?:.+&|)motscles=(.+?)(?:&|$)] -[\?(?:.+&|)query=(.+?)(?:&|$)] -[\?(?:.+&|)query2=(.+?)(?:&|$)] -[\?(?:.+&|)queryterm=(.+?)(?:&|$)] -[\?(?:.+&|)sTerm=(.+?)(?:&|$)] -[\?(?:.+&|)sc=(.+?)(?:&|$)] -[\?(?:.+&|)search=(.+?)(?:&|$)] -[\?(?:.+&|)search2=(.+?)(?:&|$)] -[\?(?:.+&|)searchfor=(.+?)(?:&|$)] -[\?(?:.+&|)searchText=(.+?)(?:&|$)] -[\?(?:.+&|)srch=(.+?)(?:&|$)] -[\?(?:.+&|)su=(.+?)(?:&|$)] -[\?(?:.+&|)such=(.+?)(?:&|$)] -[\?(?:.+&|)suche=(.+?)(?:&|$)] -[\?(?:.+&|)szukaj=(.+?)(?:&|$)] + --- a/owa/conf/robots.ini +++ /dev/null @@ -1,14 +1,1 @@ -#bot# -#crawl# -#spider# -#curl# -#host# -#localhost# -#java# -#libcurl# -#libwww# -#lwp# -#perl# -#php# -#wget# -#search# + --- a/owa/conf/search_engines.ini +++ /dev/null @@ -1,418 +1,1 @@ -;;; Search Engines - -[info] -name="2006-02-22" - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Google -[Google] -name="Google" - -[google\.co\.uk/custom\?(?:.+&|)q=(.+?)(?:&|$)] -parent=Google - -[groups\.google\.(?:com|fr)/groups\?(?:.+&|)q=(.+?)(?:&|$)] -parent=Google - -[go(?:[ogle]{4})\.[a-z.]+(?::80|)/(?:search|linux|de|ie|url|custom|cobrand|bsd|mac|netscape|uk|redhat|webhp)\?(?:.+&|)q=(.+?)(?:&|$)] -parent=Google - -[google\.com/u/[A-Za-z0-9]*\?(?:.+&|)q=(.+?)(?:&|$)] -parent=Google - -[images\.google\.[a-z]*/imgres\?(?:.+&|)imgurl=(.+?)(?:&|$)] -parent=Google - -[images\.google\.[a-z]*/images\?(?:.+&|)q=(.+?)(?:&|$)] -parent=Google - -[google\.netscape\.com/(?:netscape|search)\?(?:.+&|)q=(.+?)(?:&|$)] -parent=Google - -[216\.239\.[0-9]+\.100/search\?(?:.+&|)q=(.+?)(?:&|$)] -parent=Google - -[free\.fr/google\.pl\?(?:.+&|)q=(.+?)(?:&|$)] -parent=Google - -[google\.com/search\?(?:.+&|)query=(.+?)(?:&|$)] -parent=Google - -[google\.netscape\.com/netscape\?(?:.+&|)query=(.+?)(?:&|$)] -parent=Google - -[google\.com/netscape\?(?:.+&|)query=(.+?)(?:&|$)] -parent=Google - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; OVERTURE - -[Overture] -name="Overture" - -[overture\.com/d/search[^?]*\?(?:.+&|)Keywords=(.+?)(?:&|$)] -parent=Overture - -[search\.as\.orientation\.com/cgi-bin/gotosearch\.cgi\?(?:.+&|)Keywords=(.+?)(?:&|$)] -parent=Overture - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; HOTBOT - -[Hotbot] -name="HotBot" - -[hotbot\?(?:.+&|)MT=(.+?)(?:&|$)] -parent=Hotbot - -[hotbot\.lycos\.com/?\?(?:.+&|)MT=(.+?)(?:&|$)] -parent=Hotbot - -[hotbot\.lycos\.com\/text/default\.asp\?(?:.+&|)MT=(.+?)(?:&|$)] -parent=Hotbot - -[hotbot\.lycos\.com/director\.asp\?(?:.+&|)q=(.+?)(?:&|$)] -parent=Hotbot - -[hotbot\.lycos\.com/include/nc_frameset_ink_highend\.asp\?(?:.+&|)q=(.+?)(?:&|$)] -parent=Hotbot - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; MSN - -[MSN] -name="MSN search" - -[search\..*msn\..+/spbasic\.htm\?(?:.+&|)MT=(.+?)(?:&|$)] -parent=MSN - -[search\..*msn\..+/(?:sp)?results\.asp\?(?:.+&|)MT=(.+?)(?:&|$)] -parent=MSN - -[search\.[a-z.]*msn\.[a-z.]+/(?:sp)?(?:results\.asp|basic\.htm|results\.aspx)\?(?:.+&|)q=(.+?)(?:&|$)] -parent=MSN - -[search\.[a-z.]*msn\.[a-z.]+/autosearch/as_(?:pane)?results\.asp\?(?:.+&|)q=(.+?)(?:&|$)] -parent=MSN - -[msn\.[^/]+/[^?]+?default\.asp\?(?:.+&|)s=(.+?)(?:&|$)] -parent=MSN - -[encarta\.msn\.com/(?:encarta|find)/search\.asp\?(?:.+&|)search=(.+?)(?:&|$)] -name="MSN Encarta" - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Random Engines - -[goo\.ne\.jp/[^?]+\.asp\?(?:.+&|)MT=(.+?)(?:&|$)] -name="Goo Japan" - -[search\.icq\.com/default\.asp\?(?:.+&|)MT=(.+?)(?:&|$)] -name="ICQ Directory" - -[nomade\.(?:tiscali\.)?fr/(?:ink|[_a-zA-Z0-9]*recherche[_a-zA-Z0-9]*)\.asp\?(?:.+&|)MT=(.+?)(?:&|$)] -name="Nomade" - -[yahoo\.co\.jp/bin/search\?(?:.+&|)p=(.+?)(?:&|$)] -name="Yahoo Japan" - -[metacrawler\.com(?:/crawler|)\?(?:.+&|)general=(.+?)(?:&|$)] -name="MetaCrawler" - -[chello\.[^/]+/utilities/search[^?]*\?(?:.+&|)keywords=(.+?)(?:&|$)] -name="Chello" - -[Voila] -name"Viola" - -[voila\.[^/]+/(?:S/)?(?:ns|www|msie_fr|quiquoiou|voilang|voila|search|wanadoo[a-z_]*|r?msie4[a-z_]*)\?(?:.+&|)kw=(.+?)(?:&|$)] -parent=Voila - -[voila\.fr/voila\?(?:.+&|)kw=(.+?)(?:&|$)] -parent=Voila - -[voila\.fr/(?:quiquoiou|voilang|voila|search|wanadoo[a-z_]*|r?msie4[a-z_]*)/?\?(?:.+&|)mots=(.+?)(?:&|$)] -parent=Voila - -[search\.ke\.wanadoo\.fr/S/wanadoo\?(?:.+&|)kw=(.+?)(?:&|$)] -name="Wanadoo.fr" - -[freshmeat\.net/search/?\?(?:.+&|)q=(.+?)(?:&|$)] -name="Freshmeat" - -[Vivisimo] -name="Vivisimo" - -[vivisimo.com/search\?(?:.+&|)query=(.+?)(?:&|$)] -parent=Vivisimo - -[vivisimo\.com/cgi-bin/xml2html\.sh\?(?:.+&|)s=(.+?)(?:&|$)] -parent=Vivisimo - -[vivisimo\.com/cgi-bin/treeHtmlMain\?(?:.+&|)s=(.+?)(?:&|$)] -parent=Vivisimo - -[webcrawler.com/cgi-bin/WebQuery\?(?:.+&|)searchText=(.+?)(?:&|$)] -name="WebCrawler" - -[findology\.com/(?:ce/|)search\.pl\?(?:.+&|)search=(.+?)(?:&|$)] -name="Findology" - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Search.com - -[Search.com] -name="Search.com" - -[search\.cnet\.com/Infoseek/\?(?:.+&|)QUERY=(.+?)(?:&|$)] -parent=Search.com - -[search\.com/Infoseek/\?(?:.+&|)QUERY=(.+?)(?:&|$)] -parent=Search.com - -[search\.com/search\?(?:.+&|)q=(.+?)(?:&|$)] -parent=Search.com - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Ask Jeeves - -[Ask_Jeeves] -name="Ask Jeeves" - - -[(?:askjeeves|aj|ask)\..+/main/meta[aA]nswer\.asp\?(?:.+&|)ask=(.+?)(?:&|$)] -parent=Ask_Jeeves - -[(?:askjeeves|aj|ask)\..+/main/[aA]sk[jJ]eeves\.asp\?(?:.+&|)ask=(.+?)(?:&|$)] -parent=Ask_Jeeves - -[(?:askjeeves|aj|ask)\..+/main/followup\.asp\?(?:.+&|)ask=(.+?)(?:&|$)] -parent=Ask_Jeeves - -[(?:askjeeves|aj|ask)\..+/main/Links\.asp\?(?:.+&|)ask=(.+?)(?:&|$)] -parent=Ask_Jeeves - -[(?:askjeeves|aj|ask)\..+/main/moreResults\.asp\?(?:.+&|)ask=(.+?)(?:&|$)] -parent=Ask_Jeeves - -[tm\.ask\.com/r\?(?:.+&|)ask=(.+?)(?:&|$)] -parent=Ask_Jeeves - -[ask\.co\.uk/main/followup40\.asp\?(?:.+&|)ask=(.+?)(?:&|$)] -parent=Ask_Jeeves - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; LookSmart - -[Looksmart] -name="Looksmart" - -[looksmart\.com\?(?:.+&|)key=(.+?)(?:&|$)] -parent=Looksmart - -[looksmart\.(?:co\.uk|com)/r_search\?(?:.+&|)key=(.+?)(?:&|$)] -parent=Looksmart - -[surfy\.com/cgi-bin/search\?(?:.+&|)key=(.+?)(?:&|$)] -parent=Looksmart - -[synd(?:-[a-z]+)?\.looksmart\.co\.uk/synd-[a-z]*/Search[a-z]*\.jsp\?(?:.+&|)key=(.+?)(?:&|$)] -parent=Looksmart - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Alltheweb - -[alltheweb\.(?:com|net)/search\?(?:.+&|)q=(.+?)(?:&|$)] -name="Alltheweb" - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; AltaVista - -[Altavista] -name="AltaVista" - -[altavista\.com/(?:query|q|)\?(?:.+&|)q=(.+?)(?:&|$)] -parent=Altavista - -[altavista\.com/iepane\?(?:.+&|)q=(.+?)(?:&|$)] -parent=Altavista - -[altavista\.com/sites/search/res_text\?(?:.+&|)q=(.+?)(?:&|$)] -parent=Altavista - -[altavista\.com/sites/listings/GT_av\?(?:.+&|)q=(.+?)(?:&|$)] -parent=Altavista - -[altavista\.com/web\?(?:.+&|)q=(.+?)(?:&|$)] -parent=Altavista - -[altavista\.com/iepane\?(?:.+&|)search=(.+?)(?:&|$)] -parent=Altavista - -[altavista\.com/sites/search/res_text\?(?:.+&|)search=(.+?)(?:&|$)] -parent=Altavista - -[altavista\.digital\.com/sites/search/web\?(?:.+&|)search=(.+?)(?:&|$)] -parent=Altavista - -[[-a-z]+\.altavista\.com/q\?(?:.+&|)what=(.+?)(?:&|$)] -parent=Altavista - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; CompuServe - -[CompuServe] -name="Compuserve" - -[compuserve(?:office)*\.de/suche/suche\.jsp\?(?:.+&|)q=(.+?)(?:&|$)] -parent=CompuServe - -[cissearch\.compuserve\.com/search/cssearch/cssearch-(?:frameset|results)\.adp\?(?:.+&|)sTerm=(.+?)(?:&|$)] -parent=CompuServe - -[search\.cs\.com/search/cssearch/cssearch-frameset\.adp\?(?:.+&|)sTerm=(.+?)(?:&|$)] -parent=CompuServe - -[websearch\.cs\.com/cs/results/cssearch-(?:banner|frameset)\.adp\?(?:.+&|)sTerm=(.+?)(?:&|$)] -parent=CompuServe - -[websearch\.cs\.com/gateway/results/gateway-(?:cat|frameset|results|banner)\.adp\?(?:.+&|)sTerm=(.+?)(?:&|$)] -parent=CompuServe - -[search\.compuserve\.co\.uk/results\.adp\?(?:.+&|)query=(.+?)(?:&|$)] -parent=CompuServe - - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Dogpile - -[Dogpile] -name="Dogpile" - -[dogpile\.com/texis/search\?(?:.+&|)q=(.+?)(?:&|$)] -parent=Dogpile - -[dogpile\.com/info.dogpl/search/web/(?:.+&|)] -parent=Dogpile - -[catalog\.dogpile\.com/texis/catalog\?(?:.+&|)q=(.+?)(?:&|$)] -parent=Dogpile - -[catalog\.dogpile\.com/texis/redir/main\.bin\?(?:.+&|)q=(.+?)(?:&|$)] -parent=Dogpile - -[opendir\.dogpile\.com/texis/dpdir/search\.html\?(?:.+&|)q=(.+?)(?:&|$)] -parent=Dogpile - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; AOL - -[AOL] -name="AOL" - -[(?:search|suchen|recherche|aolrecherches)\.aol\.(?:co\.)?[a-z.]+/(?:search|minisearch|itemsearch|results|web|cat|dirsearch|advncd|redirect)(?:_[a-z]+)?\.adp\?(?:.+&|)query=(.+?)(?:&|$)] -parent=AOL - -[uk-nf01\.web\.aol\.com/cgi-bin/pursuit\?(?:.+&|)query=(.+?)(?:&|$)] -parent=AOL - -[americaonline\.com\.br/cgi-bin\?(?:.+&|)query=(.+?)(?:&|$)] -parent=AOL - -[shopping\.aol\.de/scripts/ao/results\.php\?(?:.+&|)query=(.+?)(?:&|$)] -parent=AOL - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; LYCOS - -[Lycos] -name="Lycos" - -[(?:richmedia|multimedia|search)\.lycos\.com/default.asp\?(?:.+&|)query=(.+?)(?:&|$)] -parent=Lycos - -[lycosuk\.co\.uk/cgi-bin/pursuit\?(?:.+&|)query=(.+?)(?:&|$)] -parent=Lycos - -[lycos\.com(?:\.)*/srch(?:/setup\.html|/more\.html)*\?(?:.+&|)query=(.+?)(?:&|$)] -parent=Lycos - -[search\.lycos\.com/main(?:/|/default.asp|)\?(?:.+&|)query=(.+?)(?:&|$)] -parent=Lycos - -[lycos\.com/srch/\?(?:.+&|)query=(.+?)(?:&|$)] -parent=Lycos - -[lycos\.com/srch/index\.html\?(?:.+&|)query=(.+?)(?:&|$)] -parent=Lycos - -[search\.lycos\.com/main\?(?:.+&|)query=(.+?)(?:&|$)] -parent=Lycos - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; MAMA - -[Mamma] -name="Mamma" - -[mamma\.com/Mamma\?(?:.+&|)query=(.+?)(?:&|$)] -parent=Mamma - -[mamma[0-9]+\.mamma\.com/Mamma\?(?:.+&|)query=(.+?)(?:&|$)] -parent=Mamma - -[partners\.mamma\.com/(?:Altavista|Askjeeves1|Beaucoup|Botbot|Cb_12c4|HotSheet|Hotbar|Pages)\?(?:.+&|)query=(.+?)(?:&|$)] -parent=Mamma - -[mamma\.com/Mamma_pictures\?(?:.+&|)query=(.+?)(?:&|$)] -parent=Mamma - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; EXCITE - -[Excite] -name="Excite" - -[search\.excite\.com\?(?:.+&|)s=(.+?)(?:&|$)] -parent=Excite - -[excite\.[a-z.]+/search\search.dcg\?(?:.+&|)s=(.+?)(?:&|$)] -parent=Excite - -[\.excite(?:\.[a-z]+|)\.[a-z]+/[^?]+\?(?:.+&|)search=(.+?)(?:&|$)] -parent=Excite - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; YAHOO - -[Yahoo] -name="Yahoo!" - -[de\.finance\.yahoo\.com/q\?(?:.+&|)s=(.+?)(?:&|$)] -parent=Yahoo - -[(?:[a-z]+\.)?search\.yahoo\.[^/]+/(?:[a-z]+/)?search/?[^?]*\?(?:.+&|)p=(.+?)(?:&|$)] -parent=Yahoo - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DMOZ - -[dmoz] -name="The Open Directory Project (DMOZ)" - -[search\.dmoz\.org\?(?:.+&|)search=(.+?)(?:&|$)] -parent=dmoz - -[directory\.wwwresources\.com/directory.cgi\?(?:.+&|)search2=(.+?)(?:&|$)] -parent=dmoz - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; NETSCAPE - -[Netscape] -name="Netscape" - -[(?:search|search-intl|directory)\.netscape\.com/(?:[a-z]*/)?google\.tmpl\?(?:.+&|)search=(.+?)(?:&|$)] -parent=Netscape - -[search\.netscape\.com/search.psp\?(?:.+&|)search=(.+?)(?:&|$)] -parent=Netscape - -[search\.netscape\.com\?(?:.+&|)search=(.+?)(?:&|$)] -parent=Netscape - -[directory\.netscape\.com/cgi-bin/search\?(?:.+&|)search=(.+?)(?:&|$)] -parent=Netscape - -[directory\.netscape\.com/search\.tmpl\?(?:.+&|)search=(.+?)(?:&|$)] -parent=Netscape - -[search-intl\.netscape\.com/(?:de|fr|uk)/search(?:[0-9]|)\.tmpl\?(?:.+&|)search=(.+?)(?:&|$)] -parent=Netscape - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Default - -;;; [*] -;;; name="Unknown Referer" --- a/owa/daemon.php +++ /dev/null @@ -1,53 +1,1 @@ - - * @copyright Copyright © 2006-2011 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ -require_once('owa_env.php'); -require_once(OWA_DIR.'owa_php.php'); -require_once(OWA_BASE_CLASS_DIR.'daemon.php'); - -define('OWA_DAEMON', true); - -if (!empty($_POST)) { - exit(); -} elseif (!empty($_GET)) { - exit(); -} - -$owa = new owa_php(); - -if ( $owa->isEndpointEnabled( basename( __FILE__ ) ) ) { - // start daemon - $daemon = new owa_daemon(); - $daemon->start(); - -} else { - // unload owa - $owa->restInPeace(); -} - -?> --- a/owa/eventQueue.php +++ /dev/null @@ -1,366 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ -class eventQueue { - - /** - * Stores listeners - * - */ - var $listeners = array(); - - /** - * Stores listener IDs by event type - * - */ - var $listenersByEventType = array(); - - /** - * Stores listener IDs by event type - * - */ - var $listenersByFilterType = array(); - - /** - * Constructor - * - */ - function __construct() { - - } - - /** - * Attach - * - * Attaches observers by event type. - * Takes a valid user defined callback function for use by PHP's call_user_func_array - * - * @param $event_name string - * @param $observer mixed can be a function name or function array - * @return bool - */ - - function attach($event_name, $observer) { - - $id = md5(microtime()); - - // Register event names for this handler - if(is_array($event_name)) { - - foreach ($event_name as $k => $name) { - - $this->listenersByEventType[$name][] = $id; - } - - } else { - - $this->listenersByEventType[$event_name][] = $id; - } - - $this->listeners[$id] = $observer; - - return true; - } - - /** - * Attach - * - * Attaches observers by filter type. - * Takes a valid user defined callback function for use by PHP's call_user_func_array - * - * @param $filter_name string - * @param $observer mixed can be a function name or function array - * @return bool - */ - - function attachFilter($filter_name, $observer, $priority = 10) { - - $id = md5(microtime()); - - $this->listenersByFilterType[$filter_name][$priority][] = $id; - - $this->listeners[$id] = $observer; - - } - - /** - * Notify - * - * Notifies all handlers of events in order that they were registered - * - * @param $event_type string - * @param $event array - * @return bool - */ - function notify($event) { - - $responses = array(); - owa_coreAPI::debug("Notifying listeners of ".$event->getEventType()); - //print_r($this->listenersByEventType[$event_type] ); - //print $event->getEventType(); - if (array_key_exists($event->getEventType(), $this->listenersByEventType)) { - $list = $this->listenersByEventType[$event->getEventType()]; - //print_r($list); - if (!empty($list)) { - foreach ($this->listenersByEventType[$event->getEventType()] as $k => $observer_id) { - //print_r($list); - $class = get_class( $this->listeners[$observer_id][0] ); - $responses[ $class ] = call_user_func_array($this->listeners[$observer_id], array($event)); - //owa_coreAPI::debug(print_r($event, true)); - owa_coreAPI::debug(sprintf("%s event handled by %s.",$event->getEventType(), get_class($this->listeners[$observer_id][0]))); - } - } - } else { - owa_coreAPI::debug("no listeners registered for this event type."); - } - - owa_coreAPI::debug('EHS: Responses - '.print_r($responses, true)); - - if ( in_array( OWA_EHS_EVENT_FAILED, $responses, true ) ) { - owa_coreAPI::debug("EHS: Event was not handled successfully by some handlers."); - //$q = $this->getAsyncEventQueue(owa_coreAPI::getSetting('base', 'event_queue_type')); - //$q->addToQueue($event); - return OWA_EHS_EVENT_FAILED; - } else { - owa_coreAPI::debug("EHS: Event was handled successfully by all handlers."); - return OWA_EHS_EVENT_HANDLED; - } - - } - - /** - * Notify Untill - * - * Notifies all handlers of events in order that they were registered - * Stops notifying after first handler returns true - * - * @param $event_type string - * @param $event array - * @return bool - */ - - function notifyUntill() { - owa_coreAPI::debug("Notifying Until listener for $event_type answers"); - } - - /** - * Filter - * - * Filters event by handlers in order that they were registered - * - * @param $filter_name string - * @param $value array - * @return $new_value mixed - */ - function filter($filter_name, $value = '') { - owa_coreAPI::debug("Filtering $filter_name"); - - if (array_key_exists($filter_name, $this->listenersByFilterType)) { - // sort the filter list by priority - ksort($this->listenersByFilterType[$filter_name]); - //get the function arguments - $args = func_get_args(); - // outer priority loop - foreach ($this->listenersByFilterType[$filter_name] as $priority) { - // inner filter class/function loop - foreach ($priority as $observer_id) { - // pass args to filter - owa_coreAPI::debug(sprintf("Filter: %s::%s. Value passed: %s", get_class($this->listeners[$observer_id][0]),$this->listeners[$observer_id][1], print_r($value, true))); - $value = call_user_func_array($this->listeners[$observer_id], array_slice($args,1)); - owa_coreAPI::debug(sprintf("Filter: %s::%s. Value returned: %s", get_class($this->listeners[$observer_id][0]),$this->listeners[$observer_id][1], print_r($value, true))); - // set filterred value as value in args for next filter - $args[1] = $value; - // debug whats going on - owa_coreAPI::debug(sprintf("%s filtered by %s.", $filter_name, get_class($this->listeners[$observer_id][0]))); - } - } - } - - return $value; - } - - /** - * Log - * - * Notifies handlers of tracking events - * Provides switch for async notification - * - * @param $event_params array - * @param $event_type string - */ - function log($event_params, $event_type = '') { - //owa_coreAPI::debug("Notifying listeners of tracking event type: $event_type"); - - if (!is_a($event_params,'owa_event')) { - $event = owa_coreAPI::supportClassFactory('base', 'event'); - $event->setProperties($event_params); - $event->setEventType($event_type); - } else { - $event = $event_params; - } - - $this->asyncNotify($event); - - } - - /** - * Async Notify - * - * Adds event to async notiication queue for notification by another process. - * - * @param $event array - * @return bool - */ - function asyncNotify($event) { - - // check config to see if async mode is enabled, if not fall back to realtime notification - if (owa_coreAPI::getSetting('base', 'queue_events')) { - owa_coreAPI::debug(sprintf("Adding event of %s to async %s queue.", $event->getEventType(), owa_coreAPI::getSetting('base', 'event_queue_type'))); - // check to see first if OWA is not already acting as a remote event queue, - // then check to see if we are configured to use a remote or local event queue - // then see if we have an endpoint - if (!owa_coreAPI::getSetting('base', 'is_remote_event_queue') && - owa_coreAPI::getSetting('base', 'use_remote_event_queue') && - owa_coreAPI::getSetting('base', 'remote_event_queue_type') && - owa_coreAPI::getSetting('base', 'remote_event_queue_endpoint')) { - // get a network queue - $q = $this->getAsyncEventQueue(owa_coreAPI::getSetting('base', 'remote_event_queue_type')); - // use a local event queue - } else { - // get a local event queue - $q = $this->getAsyncEventQueue(owa_coreAPI::getSetting('base', 'event_queue_type')); - } - - // if an event queue is returned then pass it the event - if ($q) { - - return $q->addToQueue($event); - // otherwise skip the queue and just notify the listeners immeadiately. - } else { - return $this->notify($event); - } - - // otherwise skip the queue and just notify the listeners immeadiately. - } else { - return $this->notify($event); - } - } - - function getAsyncEventQueue($type) { - - static $q = array(); - - if ( ! array_key_exists( $type, $q ) ) { - - switch( $type ) { - - case 'http': - $q['http'] = owa_coreAPI::supportClassFactory( 'base', 'httpEventQueue' ); - break; - case 'database': - $q['database'] = owa_coreAPI::supportClassFactory( 'base', 'dbEventQueue' ); - break; - case 'file': - $q['file'] = owa_coreAPI::supportClassFactory( 'base', 'fileEventQueue' ); - break; - } - } - - if ( array_key_exists( $type, $q ) ) { - return $q[$type]; - } else { - owa_coreAPI::debug('No event queue of that type exists.'); - return false; - } - } - - function eventFactory() { - - return owa_coreAPI::supportClassFactory('base', 'event'); - } - - function makeEvent($type = '') { - - $event = $this->eventFactory(); - - if ($type) { - $event->setEventType($type); - } - - return $event; - } - -/* - function processEventQueue($processing_queue_type = '') { - - // get the primary async queue - - // get an item from the queue - - // send to the notify method - - // check return status - - // mark item accordingly - } -*/ - - /** - * Singleton - * - * @static - * @return object - * @access public - */ - public static function &get_instance() { - - static $eq; - - if (empty($eq)) { - $eq = new eventQueue(); - } - - return $eq; - } - -} - -?> + --- a/owa/includes/CronParser.php +++ /dev/null @@ -1,604 +1,1 @@ -calcLastRan($cron_str0); -// $cron->getLastRanUnix() returns an Unix timestamp -echo "Cron '$cron_str0' last due at: " . date('r', $cron->getLastRanUnix()) . "

"; -// $cron->getLastRan() returns last due time in an array -print_r($cron->getLastRan()); -echo "Debug:
" . nl2br($cron->getDebug()); - -$cron_str1 = "3 12 * * *"; -if ($cron->calcLastRan($cron_str1)) -{ - echo "

Cron '$cron_str1' last due at: " . date('r', $cron->getLastRanUnix()) . "

"; - print_r($cron->getLastRan()); -} -else -{ - echo "Error parsing"; -} -echo "Debug:
" . nl2br($cron->getDebug()); - - *####################################################################################################### - */ - -class CronParser -{ - - var $bits = Array(); //exploded String like 0 1 * * * - var $now = Array(); //Array of cron-style entries for time() - var $lastRan; //Timestamp of last ran time. - var $taken; - var $debug; - var $year; - var $month; - var $day; - var $hour; - var $minute; - var $minutes_arr = array(); //minutes array based on cron string - var $hours_arr = array(); //hours array based on cron string - var $months_arr = array(); //months array based on cron string - - function getLastRan() - { - return explode(",", strftime("%M,%H,%d,%m,%w,%Y", $this->lastRan)); //Get the values for now in a format we can use - } - - function getLastRanUnix() - { - return $this->lastRan; - } - - function getDebug() - { - return $this->debug; - } - - function debug($str) - { - if (is_array($str)) - { - $this->debug .= "\nArray: "; - foreach($str as $k=>$v) - { - $this->debug .= "$k=>$v, "; - } - - } - else - { - $this->debug .= "\n$str"; - } - //echo nl2br($this->debug); - } - - /** - * Assumes that value is not *, and creates an array of valid numbers that - * the string represents. Returns an array. - */ - function expand_ranges($str) - { - if (strstr($str, ",")) - { - $arParts = explode(',', $str); - foreach ($arParts AS $part) - { - if (strstr($part, '-')) - { - $arRange = explode('-', $part); - for ($i = $arRange[0]; $i <= $arRange[1]; $i++) - { - $ret[] = $i; - } - } - else - { - $ret[] = $part; - } - } - } - elseif (strstr($str, '-')) - { - $arRange = explode('-', $str); - for ($i = $arRange[0]; $i <= $arRange[1]; $i++) - { - $ret[] = $i; - } - } - else - { - $ret[] = $str; - } - $ret = array_unique($ret); - sort($ret); - return $ret; - } - - function daysinmonth($month, $year) - { - return date('t', mktime(0, 0, 0, $month, 1, $year)); - } - - /** - * Calculate the last due time before this moment - */ - function calcLastRan($string) - { - - $tstart = microtime(); - $this->debug = ""; - $this->lastRan = 0; - $this->year = NULL; - $this->month = NULL; - $this->day = NULL; - $this->hour = NULL; - $this->minute = NULL; - $this->hours_arr = array(); - $this->minutes_arr = array(); - $this->months_arr = array(); - - $string = preg_replace('/[\s]{2,}/', ' ', $string); - - if (preg_match('/[^-,* \\d]/', $string) !== 0) - { - $this->debug("Cron String contains invalid character"); - return false; - } - - $this->debug("Working on cron schedule: $string"); - $this->bits = @explode(" ", $string); - - if (count($this->bits) != 5) - { - $this->debug("Cron string is invalid. Too many or too little sections after explode"); - return false; - } - - //put the current time into an array - $t = strftime("%M,%H,%d,%m,%w,%Y", time()); - $this->now = explode(",", $t); - - $this->year = $this->now[5]; - - $arMonths = $this->_getMonthsArray(); - - do - { - $this->month = array_pop($arMonths); - } - while ($this->month > $this->now[3]); - - if ($this->month === NULL) - { - $this->year = $this->year - 1; - $this->debug("Not due within this year. So checking the previous year " . $this->year); - $arMonths = $this->_getMonthsArray(); - $this->_prevMonth($arMonths); - } - elseif ($this->month == $this->now[3]) //now Sep, month = array(7,9,12) - { - $this->debug("Cron is due this month, getting days array."); - $arDays = $this->_getDaysArray($this->month, $this->year); - - do - { - $this->day = array_pop($arDays); - } - while ($this->day > $this->now[2]); - - if ($this->day === NULL) - { - $this->debug("Smallest day is even greater than today"); - $this->_prevMonth($arMonths); - } - elseif ($this->day == $this->now[2]) - { - $this->debug("Due to run today"); - $arHours = $this->_getHoursArray(); - - do - { - $this->hour = array_pop($arHours); - } - while ($this->hour > $this->now[1]); - - if ($this->hour === NULL) // now =2, arHours = array(3,5,7) - { - $this->debug("Not due this hour and some earlier hours, so go for previous day"); - $this->_prevDay($arDays, $arMonths); - } - elseif ($this->hour < $this->now[1]) //now =2, arHours = array(1,3,5) - { - $this->minute = $this->_getLastMinute(); - } - else // now =2, arHours = array(1,2,5) - { - $this->debug("Due this hour"); - $arMinutes = $this->_getMinutesArray(); - do - { - $this->minute = array_pop($arMinutes); - } - while ($this->minute > $this->now[0]); - - if ($this->minute === NULL) - { - $this->debug("Not due this minute, so go for previous hour."); - $this->_prevHour($arHours, $arDays, $arMonths); - } - else - { - $this->debug("Due this very minute or some earlier minutes before this moment within this hour."); - } - } - } - else - { - $this->debug("Cron was due on " . $this->day . " of this month"); - $this->hour = $this->_getLastHour(); - $this->minute = $this->_getLastMinute(); - } - } - else //now Sep, arrMonths=array(7, 10) - { - $this->debug("Cron was due before this month. Previous month is: " . $this->year . '-' . $this->month); - $this->day = $this->_getLastDay($this->month, $this->year); - if ($this->day === NULL) - { - //No scheduled date within this month. So we will try the previous month in the month array - $this->_prevMonth($arMonths); - } - else - { - $this->hour = $this->_getLastHour(); - $this->minute = $this->_getLastMinute(); - } - } - - $tend = microtime(); - $this->taken = $tend - $tstart; - $this->debug("Parsing $string taken " . $this->taken . " seconds"); - - //if the last due is beyond 1970 - if ($this->minute === NULL) - { - $this->debug("Error calculating last due time"); - return false; - } - else - { - $this->debug("LAST DUE: " . $this->hour . ":" . $this->minute . " on " . $this->day . "/" . $this->month . "/" . $this->year); - $this->lastRan = mktime($this->hour, $this->minute, 0, $this->month, $this->day, $this->year); - return true; - } - } - - //get the due time before current month - function _prevMonth($arMonths) - { - $this->month = array_pop($arMonths); - if ($this->month === NULL) - { - $this->year = $this->year -1; - if ($this->year <= 1970) - { - $this->debug("Can not calculate last due time. At least not before 1970.."); - } - else - { - $this->debug("Have to go for previous year " . $this->year); - $arMonths = $this->_getMonthsArray(); - $this->_prevMonth($arMonths); - } - } - else - { - $this->debug("Getting the last day for previous month: " . $this->year . '-' . $this->month); - $this->day = $this->_getLastDay($this->month, $this->year); - - if ($this->day === NULL) - { - //no available date schedule in this month - $this->_prevMonth($arMonths); - } - else - { - $this->hour = $this->_getLastHour(); - $this->minute = $this->_getLastMinute(); - } - } - - } - - //get the due time before current day - function _prevDay($arDays, $arMonths) - { - $this->debug("Go for the previous day"); - $this->day = array_pop($arDays); - if ($this->day === NULL) - { - $this->debug("Have to go for previous month"); - $this->_prevMonth($arMonths); - } - else - { - $this->hour = $this->_getLastHour(); - $this->minute = $this->_getLastMinute(); - } - } - - //get the due time before current hour - function _prevHour($arHours, $arDays, $arMonths) - { - $this->debug("Going for previous hour"); - $this->hour = array_pop($arHours); - if ($this->hour === NULL) - { - $this->debug("Have to go for previous day"); - $this->_prevDay($arDays, $arMonths); - } - else - { - $this->minute = $this->_getLastMinute(); - } - } - - //not used at the moment - function _getLastMonth() - { - $months = $this->_getMonthsArray(); - $month = array_pop($months); - - return $month; - } - - function _getLastDay($month, $year) - { - //put the available days for that month into an array - $days = $this->_getDaysArray($month, $year); - $day = array_pop($days); - - return $day; - } - - function _getLastHour() - { - $hours = $this->_getHoursArray(); - $hour = array_pop($hours); - - return $hour; - } - - function _getLastMinute() - { - $minutes = $this->_getMinutesArray(); - $minute = array_pop($minutes); - - return $minute; - } - - //remove the out of range array elements. $arr should be sorted already and does not contain duplicates - function _sanitize ($arr, $low, $high) - { - $count = count($arr); - for ($i = 0; $i <= ($count - 1); $i++) - { - if ($arr[$i] < $low) - { - $this->debug("Remove out of range element. {$arr[$i]} is outside $low - $high"); - unset($arr[$i]); - } - else - { - break; - } - } - - for ($i = ($count - 1); $i >= 0; $i--) - { - if ($arr[$i] > $high) - { - $this->debug("Remove out of range element. {$arr[$i]} is outside $low - $high"); - unset ($arr[$i]); - } - else - { - break; - } - } - - //re-assign keys - sort($arr); - return $arr; - } - - //given a month/year, list all the days within that month fell into the week days list. - function _getDaysArray($month, $year = 0) - { - if ($year == 0) - { - $year = $this->year; - } - - $days = array(); - - //return everyday of the month if both bit[2] and bit[4] are '*' - if ($this->bits[2] == '*' AND $this->bits[4] == '*') - { - $days = $this->getDays($month, $year); - } - else - { - //create an array for the weekdays - if ($this->bits[4] == '*') - { - for ($i = 0; $i <= 6; $i++) - { - $arWeekdays[] = $i; - } - } - else - { - $arWeekdays = $this->expand_ranges($this->bits[4]); - $arWeekdays = $this->_sanitize($arWeekdays, 0, 7); - - //map 7 to 0, both represents Sunday. Array is sorted already! - if (in_array(7, $arWeekdays)) - { - if (in_array(0, $arWeekdays)) - { - array_pop($arWeekdays); - } - else - { - $tmp[] = 0; - array_pop($arWeekdays); - $arWeekdays = array_merge($tmp, $arWeekdays); - } - } - } - $this->debug("Array for the weekdays"); - $this->debug($arWeekdays); - - if ($this->bits[2] == '*') - { - $daysmonth = $this->getDays($month, $year); - } - else - { - $daysmonth = $this->expand_ranges($this->bits[2]); - // so that we do not end up with 31 of Feb - $daysinmonth = $this->daysinmonth($month, $year); - $daysmonth = $this->_sanitize($daysmonth, 1, $daysinmonth); - } - - //Now match these days with weekdays - foreach ($daysmonth AS $day) - { - $wkday = date('w', mktime(0, 0, 0, $month, $day, $year)); - if (in_array($wkday, $arWeekdays)) - { - $days[] = $day; - } - } - } - $this->debug("Days array matching weekdays for $year-$month"); - $this->debug($days); - return $days; - } - - //given a month/year, return an array containing all the days in that month - function getDays($month, $year) - { - $daysinmonth = $this->daysinmonth($month, $year); - $this->debug("Number of days in $year-$month : $daysinmonth"); - $days = array(); - for ($i = 1; $i <= $daysinmonth; $i++) - { - $days[] = $i; - } - return $days; - } - - function _getHoursArray() - { - if (empty($this->hours_arr)) - { - $hours = array(); - - if ($this->bits[1] == '*') - { - for ($i = 0; $i <= 23; $i++) - { - $hours[] = $i; - } - } - else - { - $hours = $this->expand_ranges($this->bits[1]); - $hours = $this->_sanitize($hours, 0, 23); - } - - $this->debug("Hour array"); - $this->debug($hours); - $this->hours_arr = $hours; - } - return $this->hours_arr; - } - - function _getMinutesArray() - { - if (empty($this->minutes_arr)) - { - $minutes = array(); - - if ($this->bits[0] == '*') - { - for ($i = 0; $i <= 60; $i++) - { - $minutes[] = $i; - } - } - else - { - $minutes = $this->expand_ranges($this->bits[0]); - $minutes = $this->_sanitize($minutes, 0, 59); - } - $this->debug("Minutes array"); - $this->debug($minutes); - $this->minutes_arr = $minutes; - } - return $this->minutes_arr; - } - - function _getMonthsArray() - { - if (empty($this->months_arr)) - { - $months = array(); - if ($this->bits[3] == '*') - { - for ($i = 1; $i <= 12; $i++) - { - $months[] = $i; - } - } - else - { - $months = $this->expand_ranges($this->bits[3]); - $months = $this->_sanitize($months, 1, 12); - } - $this->debug("Months array"); - $this->debug($months); - $this->months_arr = $months; - } - return $this->months_arr; - } - -} -?> --- a/owa/includes/Daemon.class.php +++ /dev/null @@ -1,380 +1,1 @@ -= 4.3.0 or PHP 5 - * PHP compiled with: - * --enable-sigchild - * --enable-pcntl - * - * @package binarychoice.system.unix - * @author Michal 'Seth' Golebiowski - * @copyright Copyright 2005 Seth - * @since 1.0.3 - */ -class Daemon -{ - /**#@+ - * @access public - */ - /** - * User ID - * - * @var int - * @since 1.0 - */ - var $userID = 99; - - /** - * Group ID - * - * @var integer - * @since 1.0 - */ - var $groupID = 99; - - /** - * Terminate daemon when set identity failure ? - * - * @var bool - * @since 1.0.3 - */ - var $requireSetIdentity = false; - - /** - * Path to PID file - * - * @var string - * @since 1.0.1 - */ - var $pidFileLocation = '/tmp/daemon.pid'; - - /** - * Home path - * - * @var string - * @since 1.0 - */ - var $homePath = '/'; - /**#@-*/ - - - /**#@+ - * @access protected - */ - /** - * Current process ID - * - * @var int - * @since 1.0 - */ - var $_pid = 0; - - /** - * Is this process a children - * - * @var boolean - * @since 1.0 - */ - var $_isChildren = false; - - /** - * Is daemon running - * - * @var boolean - * @since 1.0 - */ - var $_isRunning = false; - /**#@-*/ - - - /** - * Constructor - * - * @access public - * @since 1.0 - * @return void - */ - function __construct() - { - error_reporting(0); - set_time_limit(0); - ob_implicit_flush(); - - } - - /** - * Starts daemon - * - * @access public - * @since 1.0 - * @return bool - */ - function start() - { - $this->_logMessage('Starting daemon'); - - if (!$this->_daemonize()) - { - $this->_logMessage('Could not start daemon', DLOG_ERROR); - - return false; - } - - - $this->_logMessage('Running...'); - - $this->_isRunning = true; - - - while ($this->_isRunning) - { - $this->_doTask(); - } - - return true; - } - - /** - * Stops daemon - * - * @access public - * @since 1.0 - * @return void - */ - function stop() - { - $this->_logMessage('Stoping daemon'); - - $this->_isRunning = false; - } - - /** - * Do task - * - * @access protected - * @since 1.0 - * @return void - */ - function _doTask() - { - // override this method - } - - /** - * Logs message - * - * @access protected - * @since 1.0 - * @return void - */ - function _logMessage($msg, $level = DLOG_NOTICE) - { - // override this method - } - - /** - * Daemonize - * - * Several rules or characteristics that most daemons possess: - * 1) Check is daemon already running - * 2) Fork child process - * 3) Sets identity - * 4) Make current process a session laeder - * 5) Write process ID to file - * 6) Change home path - * 7) umask(0) - * - * @access private - * @since 1.0 - * @return void - */ - function _daemonize() - { - ob_end_flush(); - - if ($this->_isDaemonRunning()) - { - // Deamon is already running. Exiting - return false; - } - - if (!$this->_fork()) - { - // Coudn't fork. Exiting. - return false; - } - - if (!$this->_setIdentity() && $this->requireSetIdentity) - { - // Required identity set failed. Exiting - return false; - } - - if (!posix_setsid()) - { - $this->_logMessage('Could not make the current process a session leader', DLOG_ERROR); - - return false; - } - - if (!$fp = @fopen($this->pidFileLocation, 'w')) - { - $this->_logMessage('Could not write to PID file', DLOG_ERROR); - - return false; - } - else - { - fputs($fp, $this->_pid); - fclose($fp); - } - - @chdir($this->homePath); - umask(0); - - declare(ticks = 1); - - pcntl_signal(SIGCHLD, array(&$this, 'sigHandler')); - pcntl_signal(SIGTERM, array(&$this, 'sigHandler')); - - return true; - } - - /** - * Cheks is daemon already running - * - * @access private - * @since 1.0.3 - * @return bool - */ - function _isDaemonRunning() - { - $oldPid = @file_get_contents($this->pidFileLocation); - - if ($oldPid !== false && posix_kill(trim($oldPid),0)) - { - $this->_logMessage('Daemon already running with PID: '.$oldPid, (DLOG_TO_CONSOLE | DLOG_ERROR)); - - return true; - } - else - { - return false; - } - } - - /** - * Forks process - * - * @access private - * @since 1.0 - * @return bool - */ - function _fork() - { - $this->_logMessage('Forking...'); - - if (!function_exists('pcntl_fork')) { - $this->_logMessage('Forking 2...'); - } - $pid = pcntl_fork(); - - if ($pid == -1) // error - { - $this->_logMessage('Could not fork', DLOG_ERROR); - - return false; - } - else if ($pid) // parent - { - $this->_logMessage('Killing parent'); - - exit(); - } - else // children - { - $this->_isChildren = true; - $this->_pid = posix_getpid(); - - return true; - } - } - - /** - * Sets identity of a daemon and returns result - * - * @access private - * @since 1.0 - * @return bool - */ - function _setIdentity() - { - if (!posix_setgid($this->groupID) || !posix_setuid($this->userID)) - { - $this->_logMessage('Could not set identity', DLOG_WARNING); - - return false; - } - else - { - return true; - } - } - - /** - * Signals handler - * - * @access public - * @since 1.0 - * @return void - */ - function sigHandler($sigNo) - { - switch ($sigNo) - { - case SIGTERM: // Shutdown - $this->_logMessage('Shutdown signal'); - exit(); - break; - - case SIGCHLD: // Halt - $this->_logMessage('Halt signal'); - while (pcntl_waitpid(-1, $status, WNOHANG) > 0); - break; - } - } - - /** - * Releases daemon pid file - * This method is called on exit (destructor like) - * - * @access public - * @since 1.0 - * @return void - */ - function __destruct() - { - if ($this->_isChildren && file_exists($this->pidFileLocation)) - { - $this->_logMessage('Releasing daemon'); - - unlink($this->pidFileLocation); - } - } -} -?> + --- a/owa/includes/JSON.php +++ /dev/null @@ -1,862 +1,1 @@ - - * @author Matt Knapp - * @author Brett Stimmerman - * @copyright 2005 Michal Migurski - * @version CVS: $Id: JSON.php 288200 2009-09-09 15:41:29Z alan_k $ - * @license http://www.opensource.org/licenses/bsd-license.php - * @link http://pear.php.net/pepr/pepr-proposal-show.php?id=198 - */ -/** - * Marker constant for Services_JSON::decode(), used to flag stack state - */ -define('SERVICES_JSON_SLICE', 1); - -/** - * Marker constant for Services_JSON::decode(), used to flag stack state - */ -define('SERVICES_JSON_IN_STR', 2); - -/** - * Marker constant for Services_JSON::decode(), used to flag stack state - */ -define('SERVICES_JSON_IN_ARR', 3); - -/** - * Marker constant for Services_JSON::decode(), used to flag stack state - */ -define('SERVICES_JSON_IN_OBJ', 4); - -/** - * Marker constant for Services_JSON::decode(), used to flag stack state - */ -define('SERVICES_JSON_IN_CMT', 5); - -/** - * Behavior switch for Services_JSON::decode() - */ -define('SERVICES_JSON_LOOSE_TYPE', 16); - -/** - * Behavior switch for Services_JSON::decode() - */ -define('SERVICES_JSON_SUPPRESS_ERRORS', 32); - -/** - * Converts to and from JSON format. - * - * Brief example of use: - * - * - * // create a new instance of Services_JSON - * $json = new Services_JSON(); - * - * // convert a complexe value to JSON notation, and send it to the browser - * $value = array('foo', 'bar', array(1, 2, 'baz'), array(3, array(4))); - * $output = $json->encode($value); - * - * print($output); - * // prints: ["foo","bar",[1,2,"baz"],[3,[4]]] - * - * // accept incoming POST data, assumed to be in JSON notation - * $input = file_get_contents('php://input', 1000000); - * $value = $json->decode($input); - * - */ -class Services_JSON -{ - /** - * constructs a new JSON instance - * - * @param int $use object behavior flags; combine with boolean-OR - * - * possible values: - * - SERVICES_JSON_LOOSE_TYPE: loose typing. - * "{...}" syntax creates associative arrays - * instead of objects in decode(). - * - SERVICES_JSON_SUPPRESS_ERRORS: error suppression. - * Values which can't be encoded (e.g. resources) - * appear as NULL instead of throwing errors. - * By default, a deeply-nested resource will - * bubble up with an error, so all return values - * from encode() should be checked with isError() - */ - function Services_JSON($use = 0) - { - $this->use = $use; - } - - /** - * convert a string from one UTF-16 char to one UTF-8 char - * - * Normally should be handled by mb_convert_encoding, but - * provides a slower PHP-only method for installations - * that lack the multibye string extension. - * - * @param string $utf16 UTF-16 character - * @return string UTF-8 character - * @access private - */ - function utf162utf8($utf16) - { - // oh please oh please oh please oh please oh please - if(function_exists('mb_convert_encoding')) { - return mb_convert_encoding($utf16, 'UTF-8', 'UTF-16'); - } - - $bytes = (ord($utf16{0}) << 8) | ord($utf16{1}); - - switch(true) { - case ((0x7F & $bytes) == $bytes): - // this case should never be reached, because we are in ASCII range - // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - return chr(0x7F & $bytes); - - case (0x07FF & $bytes) == $bytes: - // return a 2-byte UTF-8 character - // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - return chr(0xC0 | (($bytes >> 6) & 0x1F)) - . chr(0x80 | ($bytes & 0x3F)); - - case (0xFFFF & $bytes) == $bytes: - // return a 3-byte UTF-8 character - // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - return chr(0xE0 | (($bytes >> 12) & 0x0F)) - . chr(0x80 | (($bytes >> 6) & 0x3F)) - . chr(0x80 | ($bytes & 0x3F)); - } - - // ignoring UTF-32 for now, sorry - return ''; - } - - /** - * convert a string from one UTF-8 char to one UTF-16 char - * - * Normally should be handled by mb_convert_encoding, but - * provides a slower PHP-only method for installations - * that lack the multibye string extension. - * - * @param string $utf8 UTF-8 character - * @return string UTF-16 character - * @access private - */ - function utf82utf16($utf8) - { - // oh please oh please oh please oh please oh please - if(function_exists('mb_convert_encoding')) { - return mb_convert_encoding($utf8, 'UTF-16', 'UTF-8'); - } - - switch(strlen($utf8)) { - case 1: - // this case should never be reached, because we are in ASCII range - // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - return $utf8; - - case 2: - // return a UTF-16 character from a 2-byte UTF-8 char - // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - return chr(0x07 & (ord($utf8{0}) >> 2)) - . chr((0xC0 & (ord($utf8{0}) << 6)) - | (0x3F & ord($utf8{1}))); - - case 3: - // return a UTF-16 character from a 3-byte UTF-8 char - // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - return chr((0xF0 & (ord($utf8{0}) << 4)) - | (0x0F & (ord($utf8{1}) >> 2))) - . chr((0xC0 & (ord($utf8{1}) << 6)) - | (0x7F & ord($utf8{2}))); - } - - // ignoring UTF-32 for now, sorry - return ''; - } - - /** - * encodes an arbitrary variable into JSON format (and sends JSON Header) - * - * @param mixed $var any number, boolean, string, array, or object to be encoded. - * see argument 1 to Services_JSON() above for array-parsing behavior. - * if var is a strng, note that encode() always expects it - * to be in ASCII or UTF-8 format! - * - * @return mixed JSON string representation of input var or an error if a problem occurs - * @access public - */ - function encode($var) - { - header('Content-type: application/json'); - return $this->_encode($var); - } - /** - * encodes an arbitrary variable into JSON format without JSON Header - warning - may allow CSS!!!!) - * - * @param mixed $var any number, boolean, string, array, or object to be encoded. - * see argument 1 to Services_JSON() above for array-parsing behavior. - * if var is a strng, note that encode() always expects it - * to be in ASCII or UTF-8 format! - * - * @return mixed JSON string representation of input var or an error if a problem occurs - * @access public - */ - function encodeUnsafe($var) - { - return $this->_encode($var); - } - /** - * PRIVATE CODE that does the work of encodes an arbitrary variable into JSON format - * - * @param mixed $var any number, boolean, string, array, or object to be encoded. - * see argument 1 to Services_JSON() above for array-parsing behavior. - * if var is a strng, note that encode() always expects it - * to be in ASCII or UTF-8 format! - * - * @return mixed JSON string representation of input var or an error if a problem occurs - * @access public - */ - function _encode($var) - { - - switch (gettype($var)) { - case 'boolean': - return $var ? 'true' : 'false'; - - case 'NULL': - return 'null'; - - case 'integer': - return (int) $var; - - case 'double': - case 'float': - return (float) $var; - - case 'string': - // STRINGS ARE EXPECTED TO BE IN ASCII OR UTF-8 FORMAT - $ascii = ''; - $strlen_var = strlen($var); - - /* - * Iterate over every character in the string, - * escaping with a slash or encoding to UTF-8 where necessary - */ - for ($c = 0; $c < $strlen_var; ++$c) { - - $ord_var_c = ord($var{$c}); - - switch (true) { - case $ord_var_c == 0x08: - $ascii .= '\b'; - break; - case $ord_var_c == 0x09: - $ascii .= '\t'; - break; - case $ord_var_c == 0x0A: - $ascii .= '\n'; - break; - case $ord_var_c == 0x0C: - $ascii .= '\f'; - break; - case $ord_var_c == 0x0D: - $ascii .= '\r'; - break; - - case $ord_var_c == 0x22: - case $ord_var_c == 0x2F: - case $ord_var_c == 0x5C: - // double quote, slash, slosh - $ascii .= '\\'.$var{$c}; - break; - - case (($ord_var_c >= 0x20) && ($ord_var_c <= 0x7F)): - // characters U-00000000 - U-0000007F (same as ASCII) - $ascii .= $var{$c}; - break; - - case (($ord_var_c & 0xE0) == 0xC0): - // characters U-00000080 - U-000007FF, mask 110XXXXX - // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - if ($c+1 >= $strlen_var) { - $c += 1; - $ascii .= '?'; - break; - } - - $char = pack('C*', $ord_var_c, ord($var{$c + 1})); - $c += 1; - $utf16 = $this->utf82utf16($char); - $ascii .= sprintf('\u%04s', bin2hex($utf16)); - break; - - case (($ord_var_c & 0xF0) == 0xE0): - if ($c+2 >= $strlen_var) { - $c += 2; - $ascii .= '?'; - break; - } - // characters U-00000800 - U-0000FFFF, mask 1110XXXX - // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - $char = pack('C*', $ord_var_c, - @ord($var{$c + 1}), - @ord($var{$c + 2})); - $c += 2; - $utf16 = $this->utf82utf16($char); - $ascii .= sprintf('\u%04s', bin2hex($utf16)); - break; - - case (($ord_var_c & 0xF8) == 0xF0): - if ($c+3 >= $strlen_var) { - $c += 3; - $ascii .= '?'; - break; - } - // characters U-00010000 - U-001FFFFF, mask 11110XXX - // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - $char = pack('C*', $ord_var_c, - ord($var{$c + 1}), - ord($var{$c + 2}), - ord($var{$c + 3})); - $c += 3; - $utf16 = $this->utf82utf16($char); - $ascii .= sprintf('\u%04s', bin2hex($utf16)); - break; - - case (($ord_var_c & 0xFC) == 0xF8): - // characters U-00200000 - U-03FFFFFF, mask 111110XX - // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - if ($c+4 >= $strlen_var) { - $c += 4; - $ascii .= '?'; - break; - } - $char = pack('C*', $ord_var_c, - ord($var{$c + 1}), - ord($var{$c + 2}), - ord($var{$c + 3}), - ord($var{$c + 4})); - $c += 4; - $utf16 = $this->utf82utf16($char); - $ascii .= sprintf('\u%04s', bin2hex($utf16)); - break; - - case (($ord_var_c & 0xFE) == 0xFC): - if ($c+5 >= $strlen_var) { - $c += 5; - $ascii .= '?'; - break; - } - // characters U-04000000 - U-7FFFFFFF, mask 1111110X - // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - $char = pack('C*', $ord_var_c, - ord($var{$c + 1}), - ord($var{$c + 2}), - ord($var{$c + 3}), - ord($var{$c + 4}), - ord($var{$c + 5})); - $c += 5; - $utf16 = $this->utf82utf16($char); - $ascii .= sprintf('\u%04s', bin2hex($utf16)); - break; - } - } - return '"'.$ascii.'"'; - - case 'array': - /* - * As per JSON spec if any array key is not an integer - * we must treat the the whole array as an object. We - * also try to catch a sparsely populated associative - * array with numeric keys here because some JS engines - * will create an array with empty indexes up to - * max_index which can cause memory issues and because - * the keys, which may be relevant, will be remapped - * otherwise. - * - * As per the ECMA and JSON specification an object may - * have any string as a property. Unfortunately due to - * a hole in the ECMA specification if the key is a - * ECMA reserved word or starts with a digit the - * parameter is only accessible using ECMAScript's - * bracket notation. - */ - - // treat as a JSON object - if (is_array($var) && count($var) && (array_keys($var) !== range(0, sizeof($var) - 1))) { - $properties = array_map(array($this, 'name_value'), - array_keys($var), - array_values($var)); - - foreach($properties as $property) { - if(Services_JSON::isError($property)) { - return $property; - } - } - - return '{' . join(',', $properties) . '}'; - } - - // treat it like a regular array - $elements = array_map(array($this, '_encode'), $var); - - foreach($elements as $element) { - if(Services_JSON::isError($element)) { - return $element; - } - } - - return '[' . join(',', $elements) . ']'; - - case 'object': - $vars = get_object_vars($var); - - $properties = array_map(array($this, 'name_value'), - array_keys($vars), - array_values($vars)); - - foreach($properties as $property) { - if(Services_JSON::isError($property)) { - return $property; - } - } - - return '{' . join(',', $properties) . '}'; - - default: - return ($this->use & SERVICES_JSON_SUPPRESS_ERRORS) - ? 'null' - : new Services_JSON_Error(gettype($var)." can not be encoded as JSON string"); - } - } - - /** - * array-walking function for use in generating JSON-formatted name-value pairs - * - * @param string $name name of key to use - * @param mixed $value reference to an array element to be encoded - * - * @return string JSON-formatted name-value pair, like '"name":value' - * @access private - */ - function name_value($name, $value) - { - $encoded_value = $this->_encode($value); - - if(Services_JSON::isError($encoded_value)) { - return $encoded_value; - } - - return $this->_encode(strval($name)) . ':' . $encoded_value; - } - - /** - * reduce a string by removing leading and trailing comments and whitespace - * - * @param $str string string value to strip of comments and whitespace - * - * @return string string value stripped of comments and whitespace - * @access private - */ - function reduce_string($str) - { - $str = preg_replace(array( - - // eliminate single line comments in '// ...' form - '#^\s*//(.+)$#m', - - // eliminate multi-line comments in '/* ... */' form, at start of string - '#^\s*/\*(.+)\*/#Us', - - // eliminate multi-line comments in '/* ... */' form, at end of string - '#/\*(.+)\*/\s*$#Us' - - ), '', $str); - - // eliminate extraneous space - return trim($str); - } - - /** - * decodes a JSON string into appropriate variable - * - * @param string $str JSON-formatted string - * - * @return mixed number, boolean, string, array, or object - * corresponding to given JSON input string. - * See argument 1 to Services_JSON() above for object-output behavior. - * Note that decode() always returns strings - * in ASCII or UTF-8 format! - * @access public - */ - function decode($str) - { - $str = $this->reduce_string($str); - - switch (strtolower($str)) { - case 'true': - return true; - - case 'false': - return false; - - case 'null': - return null; - - default: - $m = array(); - - if (is_numeric($str)) { - // Lookie-loo, it's a number - - // This would work on its own, but I'm trying to be - // good about returning integers where appropriate: - // return (float)$str; - - // Return float or int, as appropriate - return ((float)$str == (integer)$str) - ? (integer)$str - : (float)$str; - - } elseif (preg_match('/^("|\').*(\1)$/s', $str, $m) && $m[1] == $m[2]) { - // STRINGS RETURNED IN UTF-8 FORMAT - $delim = substr($str, 0, 1); - $chrs = substr($str, 1, -1); - $utf8 = ''; - $strlen_chrs = strlen($chrs); - - for ($c = 0; $c < $strlen_chrs; ++$c) { - - $substr_chrs_c_2 = substr($chrs, $c, 2); - $ord_chrs_c = ord($chrs{$c}); - - switch (true) { - case $substr_chrs_c_2 == '\b': - $utf8 .= chr(0x08); - ++$c; - break; - case $substr_chrs_c_2 == '\t': - $utf8 .= chr(0x09); - ++$c; - break; - case $substr_chrs_c_2 == '\n': - $utf8 .= chr(0x0A); - ++$c; - break; - case $substr_chrs_c_2 == '\f': - $utf8 .= chr(0x0C); - ++$c; - break; - case $substr_chrs_c_2 == '\r': - $utf8 .= chr(0x0D); - ++$c; - break; - - case $substr_chrs_c_2 == '\\"': - case $substr_chrs_c_2 == '\\\'': - case $substr_chrs_c_2 == '\\\\': - case $substr_chrs_c_2 == '\\/': - if (($delim == '"' && $substr_chrs_c_2 != '\\\'') || - ($delim == "'" && $substr_chrs_c_2 != '\\"')) { - $utf8 .= $chrs{++$c}; - } - break; - - case preg_match('/\\\u[0-9A-F]{4}/i', substr($chrs, $c, 6)): - // single, escaped unicode character - $utf16 = chr(hexdec(substr($chrs, ($c + 2), 2))) - . chr(hexdec(substr($chrs, ($c + 4), 2))); - $utf8 .= $this->utf162utf8($utf16); - $c += 5; - break; - - case ($ord_chrs_c >= 0x20) && ($ord_chrs_c <= 0x7F): - $utf8 .= $chrs{$c}; - break; - - case ($ord_chrs_c & 0xE0) == 0xC0: - // characters U-00000080 - U-000007FF, mask 110XXXXX - //see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - $utf8 .= substr($chrs, $c, 2); - ++$c; - break; - - case ($ord_chrs_c & 0xF0) == 0xE0: - // characters U-00000800 - U-0000FFFF, mask 1110XXXX - // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - $utf8 .= substr($chrs, $c, 3); - $c += 2; - break; - - case ($ord_chrs_c & 0xF8) == 0xF0: - // characters U-00010000 - U-001FFFFF, mask 11110XXX - // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - $utf8 .= substr($chrs, $c, 4); - $c += 3; - break; - - case ($ord_chrs_c & 0xFC) == 0xF8: - // characters U-00200000 - U-03FFFFFF, mask 111110XX - // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - $utf8 .= substr($chrs, $c, 5); - $c += 4; - break; - - case ($ord_chrs_c & 0xFE) == 0xFC: - // characters U-04000000 - U-7FFFFFFF, mask 1111110X - // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - $utf8 .= substr($chrs, $c, 6); - $c += 5; - break; - - } - - } - - return $utf8; - - } elseif (preg_match('/^\[.*\]$/s', $str) || preg_match('/^\{.*\}$/s', $str)) { - // array, or object notation - - if ($str{0} == '[') { - $stk = array(SERVICES_JSON_IN_ARR); - $arr = array(); - } else { - if ($this->use & SERVICES_JSON_LOOSE_TYPE) { - $stk = array(SERVICES_JSON_IN_OBJ); - $obj = array(); - } else { - $stk = array(SERVICES_JSON_IN_OBJ); - $obj = new stdClass(); - } - } - - array_push($stk, array('what' => SERVICES_JSON_SLICE, - 'where' => 0, - 'delim' => false)); - - $chrs = substr($str, 1, -1); - $chrs = $this->reduce_string($chrs); - - if ($chrs == '') { - if (reset($stk) == SERVICES_JSON_IN_ARR) { - return $arr; - - } else { - return $obj; - - } - } - - //print("\nparsing {$chrs}\n"); - - $strlen_chrs = strlen($chrs); - - for ($c = 0; $c <= $strlen_chrs; ++$c) { - - $top = end($stk); - $substr_chrs_c_2 = substr($chrs, $c, 2); - - if (($c == $strlen_chrs) || (($chrs{$c} == ',') && ($top['what'] == SERVICES_JSON_SLICE))) { - // found a comma that is not inside a string, array, etc., - // OR we've reached the end of the character list - $slice = substr($chrs, $top['where'], ($c - $top['where'])); - array_push($stk, array('what' => SERVICES_JSON_SLICE, 'where' => ($c + 1), 'delim' => false)); - //print("Found split at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n"); - - if (reset($stk) == SERVICES_JSON_IN_ARR) { - // we are in an array, so just push an element onto the stack - array_push($arr, $this->decode($slice)); - - } elseif (reset($stk) == SERVICES_JSON_IN_OBJ) { - // we are in an object, so figure - // out the property name and set an - // element in an associative array, - // for now - $parts = array(); - - if (preg_match('/^\s*(["\'].*[^\\\]["\'])\s*:\s*(\S.*),?$/Uis', $slice, $parts)) { - // "name":value pair - $key = $this->decode($parts[1]); - $val = $this->decode($parts[2]); - - if ($this->use & SERVICES_JSON_LOOSE_TYPE) { - $obj[$key] = $val; - } else { - $obj->$key = $val; - } - } elseif (preg_match('/^\s*(\w+)\s*:\s*(\S.*),?$/Uis', $slice, $parts)) { - // name:value pair, where name is unquoted - $key = $parts[1]; - $val = $this->decode($parts[2]); - - if ($this->use & SERVICES_JSON_LOOSE_TYPE) { - $obj[$key] = $val; - } else { - $obj->$key = $val; - } - } - - } - - } elseif ((($chrs{$c} == '"') || ($chrs{$c} == "'")) && ($top['what'] != SERVICES_JSON_IN_STR)) { - // found a quote, and we are not inside a string - array_push($stk, array('what' => SERVICES_JSON_IN_STR, 'where' => $c, 'delim' => $chrs{$c})); - //print("Found start of string at {$c}\n"); - - } elseif (($chrs{$c} == $top['delim']) && - ($top['what'] == SERVICES_JSON_IN_STR) && - ((strlen(substr($chrs, 0, $c)) - strlen(rtrim(substr($chrs, 0, $c), '\\'))) % 2 != 1)) { - // found a quote, we're in a string, and it's not escaped - // we know that it's not escaped becase there is _not_ an - // odd number of backslashes at the end of the string so far - array_pop($stk); - //print("Found end of string at {$c}: ".substr($chrs, $top['where'], (1 + 1 + $c - $top['where']))."\n"); - - } elseif (($chrs{$c} == '[') && - in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) { - // found a left-bracket, and we are in an array, object, or slice - array_push($stk, array('what' => SERVICES_JSON_IN_ARR, 'where' => $c, 'delim' => false)); - //print("Found start of array at {$c}\n"); - - } elseif (($chrs{$c} == ']') && ($top['what'] == SERVICES_JSON_IN_ARR)) { - // found a right-bracket, and we're in an array - array_pop($stk); - //print("Found end of array at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n"); - - } elseif (($chrs{$c} == '{') && - in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) { - // found a left-brace, and we are in an array, object, or slice - array_push($stk, array('what' => SERVICES_JSON_IN_OBJ, 'where' => $c, 'delim' => false)); - //print("Found start of object at {$c}\n"); - - } elseif (($chrs{$c} == '}') && ($top['what'] == SERVICES_JSON_IN_OBJ)) { - // found a right-brace, and we're in an object - array_pop($stk); - //print("Found end of object at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n"); - - } elseif (($substr_chrs_c_2 == '/*') && - in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) { - // found a comment start, and we are in an array, object, or slice - array_push($stk, array('what' => SERVICES_JSON_IN_CMT, 'where' => $c, 'delim' => false)); - $c++; - //print("Found start of comment at {$c}\n"); - - } elseif (($substr_chrs_c_2 == '*/') && ($top['what'] == SERVICES_JSON_IN_CMT)) { - // found a comment end, and we're in one now - array_pop($stk); - $c++; - - for ($i = $top['where']; $i <= $c; ++$i) - $chrs = substr_replace($chrs, ' ', $i, 1); - - //print("Found end of comment at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n"); - - } - - } - - if (reset($stk) == SERVICES_JSON_IN_ARR) { - return $arr; - - } elseif (reset($stk) == SERVICES_JSON_IN_OBJ) { - return $obj; - - } - - } - } - } - - /** - * @todo Ultimately, this should just call PEAR::isError() - */ - function isError($data, $code = null) - { - if (class_exists('pear')) { - return PEAR::isError($data, $code); - } elseif (is_object($data) && (get_class($data) == 'services_json_error' || - is_subclass_of($data, 'services_json_error'))) { - return true; - } - - return false; - } -} - -if (class_exists('PEAR_Error')) { - - class Services_JSON_Error extends PEAR_Error - { - function Services_JSON_Error($message = 'unknown error', $code = null, - $mode = null, $options = null, $userinfo = null) - { - parent::PEAR_Error($message, $code, $mode, $options, $userinfo); - } - } - -} else { - - /** - * @todo Ultimately, this class shall be descended from PEAR_Error - */ - class Services_JSON_Error - { - function Services_JSON_Error($message = 'unknown error', $code = null, - $mode = null, $options = null, $userinfo = null) - { - - } - } - -} - - --- a/owa/includes/Log-1.12.2/Log.php +++ /dev/null @@ -1,843 +1,1 @@ - - * @author Jon Parise - * @since Horde 1.3 - * @package Log - */ -class Log -{ - /** - * Indicates whether or not the log can been opened / connected. - * - * @var boolean - * @access protected - */ - var $_opened = false; - - /** - * Instance-specific unique identification number. - * - * @var integer - * @access protected - */ - var $_id = 0; - - /** - * The label that uniquely identifies this set of log messages. - * - * @var string - * @access protected - */ - var $_ident = ''; - - /** - * The default priority to use when logging an event. - * - * @var integer - * @access protected - */ - var $_priority = PEAR_LOG_INFO; - - /** - * The bitmask of allowed log levels. - * - * @var integer - * @access protected - */ - var $_mask = PEAR_LOG_ALL; - - /** - * Holds all Log_observer objects that wish to be notified of new messages. - * - * @var array - * @access protected - */ - var $_listeners = array(); - - /** - * Maps canonical format keys to position arguments for use in building - * "line format" strings. - * - * @var array - * @access protected - */ - var $_formatMap = array('%{timestamp}' => '%1$s', - '%{ident}' => '%2$s', - '%{priority}' => '%3$s', - '%{message}' => '%4$s', - '%{file}' => '%5$s', - '%{line}' => '%6$s', - '%{function}' => '%7$s', - '%{class}' => '%8$s', - '%\{' => '%%{'); - - /** - * Attempts to return a concrete Log instance of type $handler. - * - * @param string $handler The type of concrete Log subclass to return. - * Attempt to dynamically include the code for - * this subclass. Currently, valid values are - * 'console', 'syslog', 'sql', 'file', and 'mcal'. - * - * @param string $name The name of the actually log file, table, or - * other specific store to use. Defaults to an - * empty string, with which the subclass will - * attempt to do something intelligent. - * - * @param string $ident The identity reported to the log system. - * - * @param array $conf A hash containing any additional configuration - * information that a subclass might need. - * - * @param int $level Log messages up to and including this level. - * - * @return object Log The newly created concrete Log instance, or - * null on an error. - * @access public - * @since Log 1.0 - */ - public static function factory($handler, $name = '', $ident = '', - $conf = array(), $level = PEAR_LOG_DEBUG) - { - $handler = strtolower($handler); - $class = 'Log_' . $handler; - $classfile = 'Log/' . $handler . '.php'; - - /* - * Attempt to include our version of the named class, but don't treat - * a failure as fatal. The caller may have already included their own - * version of the named class. - */ - if (!class_exists($class, false)) { - include_once $classfile; - } - - /* If the class exists, return a new instance of it. */ - if (class_exists($class, false)) { - $obj = new $class($name, $ident, $conf, $level); - return $obj; - } - - $null = null; - return $null; - } - - /** - * Attempts to return a reference to a concrete Log instance of type - * $handler, only creating a new instance if no log instance with the same - * parameters currently exists. - * - * You should use this if there are multiple places you might create a - * logger, you don't want to create multiple loggers, and you don't want to - * check for the existance of one each time. The singleton pattern does all - * the checking work for you. - * - * You MUST call this method with the $var = &Log::singleton() syntax. - * Without the ampersand (&) in front of the method name, you will not get - * a reference, you will get a copy. - * - * @param string $handler The type of concrete Log subclass to return. - * Attempt to dynamically include the code for - * this subclass. Currently, valid values are - * 'console', 'syslog', 'sql', 'file', and 'mcal'. - * - * @param string $name The name of the actually log file, table, or - * other specific store to use. Defaults to an - * empty string, with which the subclass will - * attempt to do something intelligent. - * - * @param string $ident The identity reported to the log system. - * - * @param array $conf A hash containing any additional configuration - * information that a subclass might need. - * - * @param int $level Log messages up to and including this level. - * - * @return object Log The newly created concrete Log instance, or - * null on an error. - * @access public - * @since Log 1.0 - */ - public static function singleton($handler, $name = '', $ident = '', - $conf = array(), $level = PEAR_LOG_DEBUG) - { - static $instances; - if (!isset($instances)) $instances = array(); - - $signature = serialize(array($handler, $name, $ident, $conf, $level)); - if (!isset($instances[$signature])) { - $instances[$signature] = Log::factory($handler, $name, $ident, - $conf, $level); - } - - return $instances[$signature]; - } - - /** - * Abstract implementation of the open() method. - * @since Log 1.0 - */ - function open() - { - return false; - } - - /** - * Abstract implementation of the close() method. - * @since Log 1.0 - */ - function close() - { - return false; - } - - /** - * Abstract implementation of the flush() method. - * @since Log 1.8.2 - */ - function flush() - { - return false; - } - - /** - * Abstract implementation of the log() method. - * @since Log 1.0 - */ - function log($message, $priority = null) - { - return false; - } - - /** - * A convenience function for logging a emergency event. It will log a - * message at the PEAR_LOG_EMERG log level. - * - * @param mixed $message String or object containing the message - * to log. - * - * @return boolean True if the message was successfully logged. - * - * @access public - * @since Log 1.7.0 - */ - function emerg($message) - { - return $this->log($message, PEAR_LOG_EMERG); - } - - /** - * A convenience function for logging an alert event. It will log a - * message at the PEAR_LOG_ALERT log level. - * - * @param mixed $message String or object containing the message - * to log. - * - * @return boolean True if the message was successfully logged. - * - * @access public - * @since Log 1.7.0 - */ - function alert($message) - { - return $this->log($message, PEAR_LOG_ALERT); - } - - /** - * A convenience function for logging a critical event. It will log a - * message at the PEAR_LOG_CRIT log level. - * - * @param mixed $message String or object containing the message - * to log. - * - * @return boolean True if the message was successfully logged. - * - * @access public - * @since Log 1.7.0 - */ - function crit($message) - { - return $this->log($message, PEAR_LOG_CRIT); - } - - /** - * A convenience function for logging a error event. It will log a - * message at the PEAR_LOG_ERR log level. - * - * @param mixed $message String or object containing the message - * to log. - * - * @return boolean True if the message was successfully logged. - * - * @access public - * @since Log 1.7.0 - */ - function err($message) - { - return $this->log($message, PEAR_LOG_ERR); - } - - /** - * A convenience function for logging a warning event. It will log a - * message at the PEAR_LOG_WARNING log level. - * - * @param mixed $message String or object containing the message - * to log. - * - * @return boolean True if the message was successfully logged. - * - * @access public - * @since Log 1.7.0 - */ - function warning($message) - { - return $this->log($message, PEAR_LOG_WARNING); - } - - /** - * A convenience function for logging a notice event. It will log a - * message at the PEAR_LOG_NOTICE log level. - * - * @param mixed $message String or object containing the message - * to log. - * - * @return boolean True if the message was successfully logged. - * - * @access public - * @since Log 1.7.0 - */ - function notice($message) - { - return $this->log($message, PEAR_LOG_NOTICE); - } - - /** - * A convenience function for logging a information event. It will log a - * message at the PEAR_LOG_INFO log level. - * - * @param mixed $message String or object containing the message - * to log. - * - * @return boolean True if the message was successfully logged. - * - * @access public - * @since Log 1.7.0 - */ - function info($message) - { - return $this->log($message, PEAR_LOG_INFO); - } - - /** - * A convenience function for logging a debug event. It will log a - * message at the PEAR_LOG_DEBUG log level. - * - * @param mixed $message String or object containing the message - * to log. - * - * @return boolean True if the message was successfully logged. - * - * @access public - * @since Log 1.7.0 - */ - function debug($message) - { - return $this->log($message, PEAR_LOG_DEBUG); - } - - /** - * Returns the string representation of the message data. - * - * If $message is an object, _extractMessage() will attempt to extract - * the message text using a known method (such as a PEAR_Error object's - * getMessage() method). If a known method, cannot be found, the - * serialized representation of the object will be returned. - * - * If the message data is already a string, it will be returned unchanged. - * - * @param mixed $message The original message data. This may be a - * string or any object. - * - * @return string The string representation of the message. - * - * @access protected - */ - function _extractMessage($message) - { - /* - * If we've been given an object, attempt to extract the message using - * a known method. If we can't find such a method, default to the - * "human-readable" version of the object. - * - * We also use the human-readable format for arrays. - */ - if (is_object($message)) { - if (method_exists($message, 'getmessage')) { - $message = $message->getMessage(); - } else if (method_exists($message, 'tostring')) { - $message = $message->toString(); - } else if (method_exists($message, '__tostring')) { - $message = (string)$message; - } else { - $message = var_export($message, true); - } - } else if (is_array($message)) { - if (isset($message['message'])) { - if (is_scalar($message['message'])) { - $message = $message['message']; - } else { - $message = var_export($message['message'], true); - } - } else { - $message = var_export($message, true); - } - } else if (is_bool($message) || $message === NULL) { - $message = var_export($message, true); - } - - /* Otherwise, we assume the message is a string. */ - return $message; - } - - /** - * Using debug_backtrace(), returns the file, line, and enclosing function - * name of the source code context from which log() was invoked. - * - * @param int $depth The initial number of frames we should step - * back into the trace. - * - * @return array Array containing four strings: the filename, the line, - * the function name, and the class name from which log() - * was called. - * - * @access private - * @since Log 1.9.4 - */ - function _getBacktraceVars($depth) - { - /* Start by generating a backtrace from the current call (here). */ - $bt = debug_backtrace(); - - /* Store some handy shortcuts to our previous frames. */ - $bt0 = isset($bt[$depth]) ? $bt[$depth] : null; - $bt1 = isset($bt[$depth + 1]) ? $bt[$depth + 1] : null; - - /* - * If we were ultimately invoked by the composite handler, we need to - * increase our depth one additional level to compensate. - */ - $class = isset($bt1['class']) ? $bt1['class'] : null; - if ($class !== null && strcasecmp($class, 'Log_composite') == 0) { - $depth++; - $bt0 = isset($bt[$depth]) ? $bt[$depth] : null; - $bt1 = isset($bt[$depth + 1]) ? $bt[$depth + 1] : null; - $class = isset($bt1['class']) ? $bt1['class'] : null; - } - - /* - * We're interested in the frame which invoked the log() function, so - * we need to walk back some number of frames into the backtrace. The - * $depth parameter tells us where to start looking. We go one step - * further back to find the name of the encapsulating function from - * which log() was called. - */ - $file = isset($bt0) ? $bt0['file'] : null; - $line = isset($bt0) ? $bt0['line'] : 0; - $func = isset($bt1) ? $bt1['function'] : null; - - /* - * However, if log() was called from one of our "shortcut" functions, - * we're going to need to go back an additional step. - */ - if (in_array($func, array('emerg', 'alert', 'crit', 'err', 'warning', - 'notice', 'info', 'debug'))) { - $bt2 = isset($bt[$depth + 2]) ? $bt[$depth + 2] : null; - - $file = is_array($bt1) ? $bt1['file'] : null; - $line = is_array($bt1) ? $bt1['line'] : 0; - $func = is_array($bt2) ? $bt2['function'] : null; - $class = isset($bt2['class']) ? $bt2['class'] : null; - } - - /* - * If we couldn't extract a function name (perhaps because we were - * executed from the "main" context), provide a default value. - */ - if ($func === null) { - $func = '(none)'; - } - - /* Return a 4-tuple containing (file, line, function, class). */ - return array($file, $line, $func, $class); - } - - /** - * Produces a formatted log line based on a format string and a set of - * variables representing the current log record and state. - * - * @return string Formatted log string. - * - * @access protected - * @since Log 1.9.4 - */ - function _format($format, $timestamp, $priority, $message) - { - /* - * If the format string references any of the backtrace-driven - * variables (%5 %6,%7,%8), generate the backtrace and fetch them. - */ - if (preg_match('/%[5678]/', $format)) { - list($file, $line, $func, $class) = $this->_getBacktraceVars(2); - } - - /* - * Build the formatted string. We use the sprintf() function's - * "argument swapping" capability to dynamically select and position - * the variables which will ultimately appear in the log string. - */ - return sprintf($format, - $timestamp, - $this->_ident, - $this->priorityToString($priority), - $message, - isset($file) ? $file : '', - isset($line) ? $line : '', - isset($func) ? $func : '', - isset($class) ? $class : ''); - } - - /** - * Returns the string representation of a PEAR_LOG_* integer constant. - * - * @param int $priority A PEAR_LOG_* integer constant. - * - * @return string The string representation of $level. - * - * @access public - * @since Log 1.0 - */ - function priorityToString($priority) - { - $levels = array( - PEAR_LOG_EMERG => 'emergency', - PEAR_LOG_ALERT => 'alert', - PEAR_LOG_CRIT => 'critical', - PEAR_LOG_ERR => 'error', - PEAR_LOG_WARNING => 'warning', - PEAR_LOG_NOTICE => 'notice', - PEAR_LOG_INFO => 'info', - PEAR_LOG_DEBUG => 'debug' - ); - - return $levels[$priority]; - } - - /** - * Returns the the PEAR_LOG_* integer constant for the given string - * representation of a priority name. This function performs a - * case-insensitive search. - * - * @param string $name String containing a priority name. - * - * @return string The PEAR_LOG_* integer contstant corresponding - * the the specified priority name. - * - * @access public - * @since Log 1.9.0 - */ - function stringToPriority($name) - { - $levels = array( - 'emergency' => PEAR_LOG_EMERG, - 'alert' => PEAR_LOG_ALERT, - 'critical' => PEAR_LOG_CRIT, - 'error' => PEAR_LOG_ERR, - 'warning' => PEAR_LOG_WARNING, - 'notice' => PEAR_LOG_NOTICE, - 'info' => PEAR_LOG_INFO, - 'debug' => PEAR_LOG_DEBUG - ); - - return $levels[strtolower($name)]; - } - - /** - * Calculate the log mask for the given priority. - * - * This method may be called statically. - * - * @param integer $priority The priority whose mask will be calculated. - * - * @return integer The calculated log mask. - * - * @access public - * @since Log 1.7.0 - */ - public static function MASK($priority) - { - return (1 << $priority); - } - - /** - * Calculate the log mask for all priorities up to the given priority. - * - * This method may be called statically. - * - * @param integer $priority The maximum priority covered by this mask. - * - * @return integer The resulting log mask. - * - * @access public - * @since Log 1.7.0 - * - * @deprecated deprecated since Log 1.9.4; use Log::MAX() instead - */ - public static function UPTO($priority) - { - return Log::MAX($priority); - } - - /** - * Calculate the log mask for all priorities greater than or equal to the - * given priority. In other words, $priority will be the lowest priority - * matched by the resulting mask. - * - * This method may be called statically. - * - * @param integer $priority The minimum priority covered by this mask. - * - * @return integer The resulting log mask. - * - * @access public - * @since Log 1.9.4 - */ - public static function MIN($priority) - { - return PEAR_LOG_ALL ^ ((1 << $priority) - 1); - } - - /** - * Calculate the log mask for all priorities less than or equal to the - * given priority. In other words, $priority will be the highests priority - * matched by the resulting mask. - * - * This method may be called statically. - * - * @param integer $priority The maximum priority covered by this mask. - * - * @return integer The resulting log mask. - * - * @access public - * @since Log 1.9.4 - */ - public static function MAX($priority) - { - return ((1 << ($priority + 1)) - 1); - } - - /** - * Set and return the level mask for the current Log instance. - * - * @param integer $mask A bitwise mask of log levels. - * - * @return integer The current level mask. - * - * @access public - * @since Log 1.7.0 - */ - function setMask($mask) - { - $this->_mask = $mask; - - return $this->_mask; - } - - /** - * Returns the current level mask. - * - * @return interger The current level mask. - * - * @access public - * @since Log 1.7.0 - */ - function getMask() - { - return $this->_mask; - } - - /** - * Check if the given priority is included in the current level mask. - * - * @param integer $priority The priority to check. - * - * @return boolean True if the given priority is included in the current - * log mask. - * - * @access protected - * @since Log 1.7.0 - */ - function _isMasked($priority) - { - return (Log::MASK($priority) & $this->_mask); - } - - /** - * Returns the current default priority. - * - * @return integer The current default priority. - * - * @access public - * @since Log 1.8.4 - */ - function getPriority() - { - return $this->_priority; - } - - /** - * Sets the default priority to the specified value. - * - * @param integer $priority The new default priority. - * - * @access public - * @since Log 1.8.4 - */ - function setPriority($priority) - { - $this->_priority = $priority; - } - - /** - * Adds a Log_observer instance to the list of observers that are listening - * for messages emitted by this Log instance. - * - * @param object $observer The Log_observer instance to attach as a - * listener. - * - * @param boolean True if the observer is successfully attached. - * - * @access public - * @since Log 1.0 - */ - function attach(&$observer) - { - if (!is_a($observer, 'Log_observer')) { - return false; - } - - $this->_listeners[$observer->_id] = &$observer; - - return true; - } - - /** - * Removes a Log_observer instance from the list of observers. - * - * @param object $observer The Log_observer instance to detach from - * the list of listeners. - * - * @param boolean True if the observer is successfully detached. - * - * @access public - * @since Log 1.0 - */ - function detach($observer) - { - if (!is_a($observer, 'Log_observer') || - !isset($this->_listeners[$observer->_id])) { - return false; - } - - unset($this->_listeners[$observer->_id]); - - return true; - } - - /** - * Informs each registered observer instance that a new message has been - * logged. - * - * @param array $event A hash describing the log event. - * - * @access protected - */ - function _announce($event) - { - foreach ($this->_listeners as $id => $listener) { - if ($event['priority'] <= $this->_listeners[$id]->_priority) { - $this->_listeners[$id]->notify($event); - } - } - } - - /** - * Indicates whether this is a composite class. - * - * @return boolean True if this is a composite class. - * - * @access public - * @since Log 1.0 - */ - function isComposite() - { - return false; - } - - /** - * Sets this Log instance's identification string. - * - * @param string $ident The new identification string. - * - * @access public - * @since Log 1.6.3 - */ - function setIdent($ident) - { - $this->_ident = $ident; - } - - /** - * Returns the current identification string. - * - * @return string The current Log instance's identification string. - * - * @access public - * @since Log 1.6.3 - */ - function getIdent() - { - return $this->_ident; - } -} - --- a/owa/includes/Log-1.12.2/Log/composite.php +++ /dev/null @@ -1,232 +1,1 @@ - - * @author Jon Parise - * - * @since Horde 1.3 - * @since Log 1.0 - * @package Log - * - * @example composite.php Using the composite handler. - */ -class Log_composite extends Log -{ - /** - * Array holding all of the Log instances to which log events should be - * sent. - * - * @var array - * @access private - */ - var $_children = array(); - - - /** - * Constructs a new composite Log object. - * - * @param boolean $name This parameter is ignored. - * @param boolean $ident This parameter is ignored. - * @param boolean $conf This parameter is ignored. - * @param boolean $level This parameter is ignored. - * - * @access public - */ - function Log_composite($name, $ident = '', $conf = array(), - $level = PEAR_LOG_DEBUG) - { - $this->_ident = $ident; - } - - /** - * Opens all of the child instances. - * - * @return True if all of the child instances were successfully opened. - * - * @access public - */ - function open() - { - /* Attempt to open each of our children. */ - $this->_opened = true; - foreach ($this->_children as $id => $child) { - $this->_opened &= $this->_children[$id]->open(); - } - - /* If all children were opened, return success. */ - return $this->_opened; - } - - /** - * Closes all of the child instances. - * - * @return True if all of the child instances were successfully closed. - * - * @access public - */ - function close() - { - /* Attempt to close each of our children. */ - $closed = true; - foreach ($this->_children as $id => $child) { - $closed &= $this->_children[$id]->close(); - } - - /* Track the _opened state for consistency. */ - $this->_opened = false; - - /* If all children were closed, return success. */ - return $closed; - } - - /** - * Flushes all child instances. It is assumed that all of the children - * have been successfully opened. - * - * @return True if all of the child instances were successfully flushed. - * - * @access public - * @since Log 1.8.2 - */ - function flush() - { - /* Attempt to flush each of our children. */ - $flushed = true; - foreach ($this->_children as $id => $child) { - $flushed &= $this->_children[$id]->flush(); - } - - /* If all children were flushed, return success. */ - return $flushed; - } - - /** - * Sends $message and $priority to each child of this composite. If the - * children aren't already open, they will be opened here. - * - * @param mixed $message String or object containing the message - * to log. - * @param string $priority (optional) The priority of the message. - * Valid values are: PEAR_LOG_EMERG, - * PEAR_LOG_ALERT, PEAR_LOG_CRIT, - * PEAR_LOG_ERR, PEAR_LOG_WARNING, - * PEAR_LOG_NOTICE, PEAR_LOG_INFO, and - * PEAR_LOG_DEBUG. - * - * @return boolean True if the entry is successfully logged. - * - * @access public - */ - function log($message, $priority = null) - { - /* If a priority hasn't been specified, use the default value. */ - if ($priority === null) { - $priority = $this->_priority; - } - - /* - * If the handlers haven't been opened, attempt to open them now. - * However, we don't treat failure to open all of the handlers as a - * fatal error. We defer that consideration to the success of calling - * each handler's log() method below. - */ - if (!$this->_opened) { - $this->open(); - } - - /* Attempt to log the event using each of the children. */ - $success = true; - foreach ($this->_children as $id => $child) { - $success &= $this->_children[$id]->log($message, $priority); - } - - $this->_announce(array('priority' => $priority, 'message' => $message)); - - /* Return success if all of the children logged the event. */ - return $success; - } - - /** - * Returns true if this is a composite. - * - * @return boolean True if this is a composite class. - * - * @access public - */ - function isComposite() - { - return true; - } - - /** - * Sets this identification string for all of this composite's children. - * - * @param string $ident The new identification string. - * - * @access public - * @since Log 1.6.7 - */ - function setIdent($ident) - { - /* Call our base class's setIdent() method. */ - parent::setIdent($ident); - - /* ... and then call setIdent() on all of our children. */ - foreach ($this->_children as $id => $child) { - $this->_children[$id]->setIdent($ident); - } - } - - /** - * Adds a Log instance to the list of children. - * - * @param object $child The Log instance to add. - * - * @return boolean True if the Log instance was successfully added. - * - * @access public - */ - function addChild(&$child) - { - /* Make sure this is a Log instance. */ - if (!is_a($child, 'Log')) { - return false; - } - - $this->_children[$child->_id] = &$child; - - return true; - } - - /** - * Removes a Log instance from the list of children. - * - * @param object $child The Log instance to remove. - * - * @return boolean True if the Log instance was successfully removed. - * - * @access public - */ - function removeChild($child) - { - if (!is_a($child, 'Log') || !isset($this->_children[$child->_id])) { - return false; - } - - unset($this->_children[$child->_id]); - - return true; - } - -} - --- a/owa/includes/Log-1.12.2/Log/console.php +++ /dev/null @@ -1,209 +1,1 @@ - - * @since Log 1.1 - * @package Log - * - * @example console.php Using the console handler. - */ -class Log_console extends Log -{ - /** - * Handle to the current output stream. - * @var resource - * @access private - */ - var $_stream = STDOUT; - - /** - * Should the output be buffered or displayed immediately? - * @var string - * @access private - */ - var $_buffering = false; - - /** - * String holding the buffered output. - * @var string - * @access private - */ - var $_buffer = ''; - - /** - * String containing the format of a log line. - * @var string - * @access private - */ - var $_lineFormat = '%1$s %2$s [%3$s] %4$s'; - - /** - * String containing the timestamp format. It will be passed directly to - * strftime(). Note that the timestamp string will generated using the - * current locale. - * @var string - * @access private - */ - var $_timeFormat = '%b %d %H:%M:%S'; - - /** - * Constructs a new Log_console object. - * - * @param string $name Ignored. - * @param string $ident The identity string. - * @param array $conf The configuration array. - * @param int $level Log messages up to and including this level. - * @access public - */ - function Log_console($name, $ident = '', $conf = array(), - $level = PEAR_LOG_DEBUG) - { - $this->_id = md5(microtime()); - $this->_ident = $ident; - $this->_mask = Log::UPTO($level); - - if (!empty($conf['stream'])) { - $this->_stream = $conf['stream']; - } - - if (isset($conf['buffering'])) { - $this->_buffering = $conf['buffering']; - } - - if (!empty($conf['lineFormat'])) { - $this->_lineFormat = str_replace(array_keys($this->_formatMap), - array_values($this->_formatMap), - $conf['lineFormat']); - } - - if (!empty($conf['timeFormat'])) { - $this->_timeFormat = $conf['timeFormat']; - } - - /* - * If output buffering has been requested, we need to register a - * shutdown function that will dump the buffer upon termination. - */ - if ($this->_buffering) { - register_shutdown_function(array(&$this, '_Log_console')); - } - } - - /** - * Destructor - */ - function _Log_console() - { - $this->close(); - } - - /** - * Open the output stream. - * - * @access public - * @since Log 1.9.7 - */ - function open() - { - $this->_opened = true; - return true; - } - - /** - * Closes the output stream. - * - * This results in a call to flush(). - * - * @access public - * @since Log 1.9.0 - */ - function close() - { - $this->flush(); - $this->_opened = false; - return true; - } - - /** - * Flushes all pending ("buffered") data to the output stream. - * - * @access public - * @since Log 1.8.2 - */ - function flush() - { - /* - * If output buffering is enabled, dump the contents of the buffer to - * the output stream. - */ - if ($this->_buffering && (strlen($this->_buffer) > 0)) { - fwrite($this->_stream, $this->_buffer); - $this->_buffer = ''; - } - - if (is_resource($this->_stream)) { - return fflush($this->_stream); - } - - return false; - } - - /** - * Writes $message to the text console. Also, passes the message - * along to any Log_observer instances that are observing this Log. - * - * @param mixed $message String or object containing the message to log. - * @param string $priority The priority of the message. Valid - * values are: PEAR_LOG_EMERG, PEAR_LOG_ALERT, - * PEAR_LOG_CRIT, PEAR_LOG_ERR, PEAR_LOG_WARNING, - * PEAR_LOG_NOTICE, PEAR_LOG_INFO, and PEAR_LOG_DEBUG. - * @return boolean True on success or false on failure. - * @access public - */ - function log($message, $priority = null) - { - /* If a priority hasn't been specified, use the default value. */ - if ($priority === null) { - $priority = $this->_priority; - } - - /* Abort early if the priority is above the maximum logging level. */ - if (!$this->_isMasked($priority)) { - return false; - } - - /* Extract the string representation of the message. */ - $message = $this->_extractMessage($message); - - /* Build the string containing the complete log line. */ - $line = $this->_format($this->_lineFormat, - strftime($this->_timeFormat), - $priority, $message) . "\n"; - - /* - * If buffering is enabled, append this line to the output buffer. - * Otherwise, print the line to the output stream immediately. - */ - if ($this->_buffering) { - $this->_buffer .= $line; - } else { - fwrite($this->_stream, $line); - } - - /* Notify observers about this log message. */ - $this->_announce(array('priority' => $priority, 'message' => $message)); - - return true; - } - -} - --- a/owa/includes/Log-1.12.2/Log/daemon.php +++ /dev/null @@ -1,236 +1,1 @@ - - * @version $Revision: 250926 $ - * @package Log - */ -class Log_daemon extends Log -{ - /** - * Integer holding the log facility to use. - * @var string - */ - var $_name = LOG_DAEMON; - - /** - * Var holding the resource pointer to the socket - * @var resource - */ - var $_socket; - - /** - * The ip address or servername - * @see http://www.php.net/manual/en/transports.php - * @var string - */ - var $_ip = '127.0.0.1'; - - /** - * Protocol to use (tcp, udp, etc.) - * @see http://www.php.net/manual/en/transports.php - * @var string - */ - var $_proto = 'udp'; - - /** - * Port to connect to - * @var int - */ - var $_port = 514; - - /** - * Maximum message length in bytes - * @var int - */ - var $_maxsize = 4096; - - /** - * Socket timeout in seconds - * @var int - */ - var $_timeout = 1; - - - /** - * Constructs a new syslog object. - * - * @param string $name The syslog facility. - * @param string $ident The identity string. - * @param array $conf The configuration array. - * @param int $maxLevel Maximum level at which to log. - * @access public - */ - function Log_daemon($name, $ident = '', $conf = array(), - $level = PEAR_LOG_DEBUG) - { - /* Ensure we have a valid integer value for $name. */ - if (empty($name) || !is_int($name)) { - $name = LOG_SYSLOG; - } - - $this->_id = md5(microtime()); - $this->_name = $name; - $this->_ident = $ident; - $this->_mask = Log::UPTO($level); - - if (isset($conf['ip'])) { - $this->_ip = $conf['ip']; - } - if (isset($conf['proto'])) { - $this->_proto = $conf['proto']; - } - if (isset($conf['port'])) { - $this->_port = $conf['port']; - } - if (isset($conf['maxsize'])) { - $this->_maxsize = $conf['maxsize']; - } - if (isset($conf['timeout'])) { - $this->_timeout = $conf['timeout']; - } - $this->_proto = $this->_proto . '://'; - - register_shutdown_function(array(&$this, '_Log_daemon')); - } - - /** - * Destructor. - * - * @access private - */ - function _Log_daemon() - { - $this->close(); - } - - /** - * Opens a connection to the system logger, if it has not already - * been opened. This is implicitly called by log(), if necessary. - * @access public - */ - function open() - { - if (!$this->_opened) { - $this->_opened = (bool)($this->_socket = @fsockopen( - $this->_proto . $this->_ip, - $this->_port, - $errno, - $errstr, - $this->_timeout)); - } - return $this->_opened; - } - - /** - * Closes the connection to the system logger, if it is open. - * @access public - */ - function close() - { - if ($this->_opened) { - $this->_opened = false; - return fclose($this->_socket); - } - return true; - } - - /** - * Sends $message to the currently open syslog connection. Calls - * open() if necessary. Also passes the message along to any Log_observer - * instances that are observing this Log. - * - * @param string $message The textual message to be logged. - * @param int $priority (optional) The priority of the message. Valid - * values are: LOG_EMERG, LOG_ALERT, LOG_CRIT, - * LOG_ERR, LOG_WARNING, LOG_NOTICE, LOG_INFO, - * and LOG_DEBUG. The default is LOG_INFO. - * @access public - */ - function log($message, $priority = null) - { - /* If a priority hasn't been specified, use the default value. */ - if ($priority === null) { - $priority = $this->_priority; - } - - /* Abort early if the priority is above the maximum logging level. */ - if (!$this->_isMasked($priority)) { - return false; - } - - /* If the connection isn't open and can't be opened, return failure. */ - if (!$this->_opened && !$this->open()) { - return false; - } - - /* Extract the string representation of the message. */ - $message = $this->_extractMessage($message); - - /* Set the facility level. */ - $facility_level = intval($this->_name) + - intval($this->_toSyslog($priority)); - - /* Prepend ident info. */ - if (!empty($this->_ident)) { - $message = $this->_ident . ' ' . $message; - } - - /* Check for message length. */ - if (strlen($message) > $this->_maxsize) { - $message = substr($message, 0, ($this->_maxsize) - 10) . ' [...]'; - } - - /* Write to socket. */ - fwrite($this->_socket, '<' . $facility_level . '>' . $message . "\n"); - - $this->_announce(array('priority' => $priority, 'message' => $message)); - } - - /** - * Converts a PEAR_LOG_* constant into a syslog LOG_* constant. - * - * This function exists because, under Windows, not all of the LOG_* - * constants have unique values. Instead, the PEAR_LOG_* were introduced - * for global use, with the conversion to the LOG_* constants kept local to - * to the syslog driver. - * - * @param int $priority PEAR_LOG_* value to convert to LOG_* value. - * - * @return The LOG_* representation of $priority. - * - * @access private - */ - function _toSyslog($priority) - { - static $priorities = array( - PEAR_LOG_EMERG => LOG_EMERG, - PEAR_LOG_ALERT => LOG_ALERT, - PEAR_LOG_CRIT => LOG_CRIT, - PEAR_LOG_ERR => LOG_ERR, - PEAR_LOG_WARNING => LOG_WARNING, - PEAR_LOG_NOTICE => LOG_NOTICE, - PEAR_LOG_INFO => LOG_INFO, - PEAR_LOG_DEBUG => LOG_DEBUG - ); - - /* If we're passed an unknown priority, default to LOG_INFO. */ - if (!is_int($priority) || !in_array($priority, $priorities)) { - return LOG_INFO; - } - - return $priorities[$priority]; - } - -} - --- a/owa/includes/Log-1.12.2/Log/display.php +++ /dev/null @@ -1,162 +1,1 @@ - - * @since Log 1.8.0 - * @package Log - * - * @example display.php Using the display handler. - */ -class Log_display extends Log -{ - /** - * String containing the format of a log line. - * @var string - * @access private - */ - var $_lineFormat = '%3$s: %4$s'; - - /** - * String containing the timestamp format. It will be passed directly to - * strftime(). Note that the timestamp string will generated using the - * current locale. - * @var string - * @access private - */ - var $_timeFormat = '%b %d %H:%M:%S'; - - /** - * Constructs a new Log_display object. - * - * @param string $name Ignored. - * @param string $ident The identity string. - * @param array $conf The configuration array. - * @param int $level Log messages up to and including this level. - * @access public - */ - function Log_display($name = '', $ident = '', $conf = array(), - $level = PEAR_LOG_DEBUG) - { - $this->_id = md5(microtime()); - $this->_ident = $ident; - $this->_mask = Log::UPTO($level); - - /* Start by configuring the line format. */ - if (!empty($conf['lineFormat'])) { - $this->_lineFormat = str_replace(array_keys($this->_formatMap), - array_values($this->_formatMap), - $conf['lineFormat']); - } - - /* We may need to prepend a string to our line format. */ - $prepend = null; - if (isset($conf['error_prepend'])) { - $prepend = $conf['error_prepend']; - } else { - $prepend = ini_get('error_prepend_string'); - } - if (!empty($prepend)) { - $this->_lineFormat = $prepend . $this->_lineFormat; - } - - /* We may also need to append a string to our line format. */ - $append = null; - if (isset($conf['error_append'])) { - $append = $conf['error_append']; - } else { - $append = ini_get('error_append_string'); - } - if (!empty($append)) { - $this->_lineFormat .= $append; - } - - /* Lastly, the line ending sequence is also configurable. */ - if (isset($conf['linebreak'])) { - $this->_lineFormat .= $conf['linebreak']; - } else { - $this->_lineFormat .= "
\n"; - } - - /* The user can also change the time format. */ - if (!empty($conf['timeFormat'])) { - $this->_timeFormat = $conf['timeFormat']; - } - } - - /** - * Opens the display handler. - * - * @access public - * @since Log 1.9.6 - */ - function open() - { - $this->_opened = true; - return true; - } - - /** - * Closes the display handler. - * - * @access public - * @since Log 1.9.6 - */ - function close() - { - $this->_opened = false; - return true; - } - - /** - * Writes $message to the text browser. Also, passes the message - * along to any Log_observer instances that are observing this Log. - * - * @param mixed $message String or object containing the message to log. - * @param string $priority The priority of the message. Valid - * values are: PEAR_LOG_EMERG, PEAR_LOG_ALERT, - * PEAR_LOG_CRIT, PEAR_LOG_ERR, PEAR_LOG_WARNING, - * PEAR_LOG_NOTICE, PEAR_LOG_INFO, and PEAR_LOG_DEBUG. - * @return boolean True on success or false on failure. - * @access public - */ - function log($message, $priority = null) - { - /* If a priority hasn't been specified, use the default value. */ - if ($priority === null) { - $priority = $this->_priority; - } - - /* Abort early if the priority is above the maximum logging level. */ - if (!$this->_isMasked($priority)) { - return false; - } - - /* Extract the string representation of the message. */ - $message = $this->_extractMessage($message); - - /* Build and output the complete log line. */ - echo $this->_format($this->_lineFormat, - strftime($this->_timeFormat), - $priority, - nl2br(htmlspecialchars($message))); - - /* Notify observers about this log message. */ - $this->_announce(array('priority' => $priority, 'message' => $message)); - - return true; - } - -} - --- a/owa/includes/Log-1.12.2/Log/error_log.php +++ /dev/null @@ -1,161 +1,1 @@ - - * @since Log 1.7.0 - * @package Log - * - * @example error_log.php Using the error_log handler. - */ -class Log_error_log extends Log -{ - /** - * The error_log() log type. - * @var integer - * @access private - */ - var $_type = PEAR_LOG_TYPE_SYSTEM; - - /** - * The type-specific destination value. - * @var string - * @access private - */ - var $_destination = ''; - - /** - * Additional headers to pass to the mail() function when the - * PEAR_LOG_TYPE_MAIL type is used. - * @var string - * @access private - */ - var $_extra_headers = ''; - - /** - * String containing the format of a log line. - * @var string - * @access private - */ - var $_lineFormat = '%2$s: %4$s'; - - /** - * String containing the timestamp format. It will be passed directly to - * strftime(). Note that the timestamp string will generated using the - * current locale. - * @var string - * @access private - */ - var $_timeFormat = '%b %d %H:%M:%S'; - - /** - * Constructs a new Log_error_log object. - * - * @param string $name One of the PEAR_LOG_TYPE_* constants. - * @param string $ident The identity string. - * @param array $conf The configuration array. - * @param int $level Log messages up to and including this level. - * @access public - */ - function Log_error_log($name, $ident = '', $conf = array(), - $level = PEAR_LOG_DEBUG) - { - $this->_id = md5(microtime()); - $this->_type = $name; - $this->_ident = $ident; - $this->_mask = Log::UPTO($level); - - if (!empty($conf['destination'])) { - $this->_destination = $conf['destination']; - } - - if (!empty($conf['extra_headers'])) { - $this->_extra_headers = $conf['extra_headers']; - } - - if (!empty($conf['lineFormat'])) { - $this->_lineFormat = str_replace(array_keys($this->_formatMap), - array_values($this->_formatMap), - $conf['lineFormat']); - } - - if (!empty($conf['timeFormat'])) { - $this->_timeFormat = $conf['timeFormat']; - } - } - - /** - * Opens the handler. - * - * @access public - * @since Log 1.9.6 - */ - function open() - { - $this->_opened = true; - return true; - } - - /** - * Closes the handler. - * - * @access public - * @since Log 1.9.6 - */ - function close() - { - $this->_opened = false; - return true; - } - - /** - * Logs $message using PHP's error_log() function. The message is also - * passed along to any Log_observer instances that are observing this Log. - * - * @param mixed $message String or object containing the message to log. - * @param string $priority The priority of the message. Valid - * values are: PEAR_LOG_EMERG, PEAR_LOG_ALERT, - * PEAR_LOG_CRIT, PEAR_LOG_ERR, PEAR_LOG_WARNING, - * PEAR_LOG_NOTICE, PEAR_LOG_INFO, and PEAR_LOG_DEBUG. - * @return boolean True on success or false on failure. - * @access public - */ - function log($message, $priority = null) - { - /* If a priority hasn't been specified, use the default value. */ - if ($priority === null) { - $priority = $this->_priority; - } - - /* Abort early if the priority is above the maximum logging level. */ - if (!$this->_isMasked($priority)) { - return false; - } - - /* Extract the string representation of the message. */ - $message = $this->_extractMessage($message); - - /* Build the string containing the complete log line. */ - $line = $this->_format($this->_lineFormat, - strftime($this->_timeFormat), - $priority, $message); - - /* Pass the log line and parameters to the error_log() function. */ - $success = error_log($line, $this->_type, $this->_destination, - $this->_extra_headers); - - $this->_announce(array('priority' => $priority, 'message' => $message)); - - return $success; - } - -} - --- a/owa/includes/Log-1.12.2/Log/file.php +++ /dev/null @@ -1,317 +1,1 @@ - - * @author Roman Neuhauser - * @since Log 1.0 - * @package Log - * - * @example file.php Using the file handler. - */ -class Log_file extends Log -{ - /** - * String containing the name of the log file. - * @var string - * @access private - */ - var $_filename = 'php.log'; - - /** - * Handle to the log file. - * @var resource - * @access private - */ - var $_fp = false; - - /** - * Should new log entries be append to an existing log file, or should the - * a new log file overwrite an existing one? - * @var boolean - * @access private - */ - var $_append = true; - - /** - * Should advisory file locking (i.e., flock()) be used? - * @var boolean - * @access private - */ - var $_locking = false; - - /** - * Integer (in octal) containing the log file's permissions mode. - * @var integer - * @access private - */ - var $_mode = 0644; - - /** - * Integer (in octal) specifying the file permission mode that will be - * used when creating directories that do not already exist. - * @var integer - * @access private - */ - var $_dirmode = 0755; - - /** - * String containing the format of a log line. - * @var string - * @access private - */ - var $_lineFormat = '%1$s %2$s [%3$s] %4$s'; - - /** - * String containing the timestamp format. It will be passed directly to - * strftime(). Note that the timestamp string will generated using the - * current locale. - * @var string - * @access private - */ - var $_timeFormat = '%b %d %H:%M:%S'; - - /** - * String containing the end-on-line character sequence. - * @var string - * @access private - */ - var $_eol = "\n"; - - /** - * Constructs a new Log_file object. - * - * @param string $name Ignored. - * @param string $ident The identity string. - * @param array $conf The configuration array. - * @param int $level Log messages up to and including this level. - * @access public - */ - function Log_file($name, $ident = '', $conf = array(), - $level = PEAR_LOG_DEBUG) - { - $this->_id = md5(microtime()); - $this->_filename = $name; - $this->_ident = $ident; - $this->_mask = Log::UPTO($level); - - if (isset($conf['append'])) { - $this->_append = $conf['append']; - } - - if (isset($conf['locking'])) { - $this->_locking = $conf['locking']; - } - - if (!empty($conf['mode'])) { - if (is_string($conf['mode'])) { - $this->_mode = octdec($conf['mode']); - } else { - $this->_mode = $conf['mode']; - } - } - - if (!empty($conf['dirmode'])) { - if (is_string($conf['dirmode'])) { - $this->_dirmode = octdec($conf['dirmode']); - } else { - $this->_dirmode = $conf['dirmode']; - } - } - - if (!empty($conf['lineFormat'])) { - $this->_lineFormat = str_replace(array_keys($this->_formatMap), - array_values($this->_formatMap), - $conf['lineFormat']); - } - - if (!empty($conf['timeFormat'])) { - $this->_timeFormat = $conf['timeFormat']; - } - - if (!empty($conf['eol'])) { - $this->_eol = $conf['eol']; - } else { - $this->_eol = (strstr(PHP_OS, 'WIN')) ? "\r\n" : "\n"; - } - - register_shutdown_function(array(&$this, '_Log_file')); - } - - /** - * Destructor - */ - function _Log_file() - { - if ($this->_opened) { - $this->close(); - } - } - - /** - * Creates the given directory path. If the parent directories don't - * already exist, they will be created, too. - * - * This implementation is inspired by Python's os.makedirs function. - * - * @param string $path The full directory path to create. - * @param integer $mode The permissions mode with which the - * directories will be created. - * - * @return True if the full path is successfully created or already - * exists. - * - * @access private - */ - function _mkpath($path, $mode = 0700) - { - /* Separate the last pathname component from the rest of the path. */ - $head = dirname($path); - $tail = basename($path); - - /* Make sure we've split the path into two complete components. */ - if (empty($tail)) { - $head = dirname($path); - $tail = basename($path); - } - - /* Recurse up the path if our current segment does not exist. */ - if (!empty($head) && !empty($tail) && !is_dir($head)) { - $this->_mkpath($head, $mode); - } - - /* Create this segment of the path. */ - return @mkdir($head, $mode); - } - - /** - * Opens the log file for output. If the specified log file does not - * already exist, it will be created. By default, new log entries are - * appended to the end of the log file. - * - * This is implicitly called by log(), if necessary. - * - * @access public - */ - function open() - { - if (!$this->_opened) { - /* If the log file's directory doesn't exist, create it. */ - if (!is_dir(dirname($this->_filename))) { - $this->_mkpath($this->_filename, $this->_dirmode); - } - - /* Determine whether the log file needs to be created. */ - $creating = !file_exists($this->_filename); - - /* Obtain a handle to the log file. */ - $this->_fp = fopen($this->_filename, ($this->_append) ? 'a' : 'w'); - - /* We consider the file "opened" if we have a valid file pointer. */ - $this->_opened = ($this->_fp !== false); - - /* Attempt to set the file's permissions if we just created it. */ - if ($creating && $this->_opened) { - chmod($this->_filename, $this->_mode); - } - } - - return $this->_opened; - } - - /** - * Closes the log file if it is open. - * - * @access public - */ - function close() - { - /* If the log file is open, close it. */ - if ($this->_opened && fclose($this->_fp)) { - $this->_opened = false; - } - - return ($this->_opened === false); - } - - /** - * Flushes all pending data to the file handle. - * - * @access public - * @since Log 1.8.2 - */ - function flush() - { - if (is_resource($this->_fp)) { - return fflush($this->_fp); - } - - return false; - } - - /** - * Logs $message to the output window. The message is also passed along - * to any Log_observer instances that are observing this Log. - * - * @param mixed $message String or object containing the message to log. - * @param string $priority The priority of the message. Valid - * values are: PEAR_LOG_EMERG, PEAR_LOG_ALERT, - * PEAR_LOG_CRIT, PEAR_LOG_ERR, PEAR_LOG_WARNING, - * PEAR_LOG_NOTICE, PEAR_LOG_INFO, and PEAR_LOG_DEBUG. - * @return boolean True on success or false on failure. - * @access public - */ - function log($message, $priority = null) - { - /* If a priority hasn't been specified, use the default value. */ - if ($priority === null) { - $priority = $this->_priority; - } - - /* Abort early if the priority is above the maximum logging level. */ - if (!$this->_isMasked($priority)) { - return false; - } - - /* If the log file isn't already open, open it now. */ - if (!$this->_opened && !$this->open()) { - return false; - } - - /* Extract the string representation of the message. */ - $message = $this->_extractMessage($message); - - /* Build the string containing the complete log line. */ - $line = $this->_format($this->_lineFormat, - strftime($this->_timeFormat), - $priority, $message) . $this->_eol; - - /* If locking is enabled, acquire an exclusive lock on the file. */ - if ($this->_locking) { - flock($this->_fp, LOCK_EX); - } - - /* Write the log line to the log file. */ - $success = (fwrite($this->_fp, $line) !== false); - - /* Unlock the file now that we're finished writing to it. */ - if ($this->_locking) { - flock($this->_fp, LOCK_UN); - } - - /* Notify observers about this log message. */ - $this->_announce(array('priority' => $priority, 'message' => $message)); - - return $success; - } - -} - --- a/owa/includes/Log-1.12.2/Log/firebug.php +++ /dev/null @@ -1,215 +1,1 @@ - - * @since Log 1.9.11 - * @package Log - * - * @example firebug.php Using the firebug handler. - */ -class Log_firebug extends Log -{ - /** - * Should the output be buffered or displayed immediately? - * @var string - * @access private - */ - var $_buffering = false; - - /** - * String holding the buffered output. - * @var string - * @access private - */ - var $_buffer = array(); - - /** - * String containing the format of a log line. - * @var string - * @access private - */ - var $_lineFormat = '%2$s [%3$s] %4$s'; - - /** - * String containing the timestamp format. It will be passed directly to - * strftime(). Note that the timestamp string will generated using the - * current locale. - * - * Note! Default lineFormat of this driver does not display time. - * - * @var string - * @access private - */ - var $_timeFormat = '%b %d %H:%M:%S'; - - /** - * Mapping of log priorities to Firebug methods. - * @var array - * @access private - */ - var $_methods = array( - PEAR_LOG_EMERG => 'error', - PEAR_LOG_ALERT => 'error', - PEAR_LOG_CRIT => 'error', - PEAR_LOG_ERR => 'error', - PEAR_LOG_WARNING => 'warn', - PEAR_LOG_NOTICE => 'info', - PEAR_LOG_INFO => 'info', - PEAR_LOG_DEBUG => 'debug' - ); - - /** - * Constructs a new Log_firebug object. - * - * @param string $name Ignored. - * @param string $ident The identity string. - * @param array $conf The configuration array. - * @param int $level Log messages up to and including this level. - * @access public - */ - function Log_firebug($name = '', $ident = 'PHP', $conf = array(), - $level = PEAR_LOG_DEBUG) - { - $this->_id = md5(microtime()); - $this->_ident = $ident; - $this->_mask = Log::UPTO($level); - if (isset($conf['buffering'])) { - $this->_buffering = $conf['buffering']; - } - - if ($this->_buffering) { - register_shutdown_function(array(&$this, '_Log_firebug')); - } - - if (!empty($conf['lineFormat'])) { - $this->_lineFormat = str_replace(array_keys($this->_formatMap), - array_values($this->_formatMap), - $conf['lineFormat']); - } - - if (!empty($conf['timeFormat'])) { - $this->_timeFormat = $conf['timeFormat']; - } - } - - /** - * Opens the firebug handler. - * - * @access public - */ - function open() - { - $this->_opened = true; - return true; - } - - /** - * Destructor - */ - function _Log_firebug() - { - $this->close(); - } - - /** - * Closes the firebug handler. - * - * @access public - */ - function close() - { - $this->flush(); - $this->_opened = false; - return true; - } - - /** - * Flushes all pending ("buffered") data. - * - * @access public - */ - function flush() { - if (count($this->_buffer)) { - print '\n"; - }; - $this->_buffer = array(); - } - - /** - * Writes $message to Firebug console. Also, passes the message - * along to any Log_observer instances that are observing this Log. - * - * @param mixed $message String or object containing the message to log. - * @param string $priority The priority of the message. Valid - * values are: PEAR_LOG_EMERG, PEAR_LOG_ALERT, - * PEAR_LOG_CRIT, PEAR_LOG_ERR, PEAR_LOG_WARNING, - * PEAR_LOG_NOTICE, PEAR_LOG_INFO, and PEAR_LOG_DEBUG. - * @return boolean True on success or false on failure. - * @access public - */ - function log($message, $priority = null) - { - /* If a priority hasn't been specified, use the default value. */ - if ($priority === null) { - $priority = $this->_priority; - } - - /* Abort early if the priority is above the maximum logging level. */ - if (!$this->_isMasked($priority)) { - return false; - } - - /* Extract the string representation of the message. */ - $message = $this->_extractMessage($message); - $method = $this->_methods[$priority]; - - /* normalize line breaks */ - $message = str_replace("\r\n", "\n", $message); - - /* escape line breaks */ - $message = str_replace("\n", "\\n\\\n", $message); - - /* escape quotes */ - $message = str_replace('"', '\\"', $message); - - /* Build the string containing the complete log line. */ - $line = $this->_format($this->_lineFormat, - strftime($this->_timeFormat), - $priority, - $message); - - if ($this->_buffering) { - $this->_buffer[] = sprintf('console.%s("%s");', $method, $line); - } else { - print '\n"; - } - /* Notify observers about this log message. */ - $this->_announce(array('priority' => $priority, 'message' => $message)); - - return true; - } - -} - --- a/owa/includes/Log-1.12.2/Log/mail.php +++ /dev/null @@ -1,295 +1,1 @@ - - * @author Jon Parise - * @since Log 1.3 - * @package Log - * - * @example mail.php Using the mail handler. - */ -class Log_mail extends Log -{ - /** - * String holding the recipients' email addresses. Multiple addresses - * should be separated with commas. - * @var string - * @access private - */ - var $_recipients = ''; - - /** - * String holding the sender's email address. - * @var string - * @access private - */ - var $_from = ''; - - /** - * String holding the email's subject. - * @var string - * @access private - */ - var $_subject = '[Log_mail] Log message'; - - /** - * String holding an optional preamble for the log messages. - * @var string - * @access private - */ - var $_preamble = ''; - - /** - * String containing the format of a log line. - * @var string - * @access private - */ - var $_lineFormat = '%1$s %2$s [%3$s] %4$s'; - - /** - * String containing the timestamp format. It will be passed directly to - * strftime(). Note that the timestamp string will generated using the - * current locale. - * @var string - * @access private - */ - var $_timeFormat = '%b %d %H:%M:%S'; - - /** - * String holding the mail message body. - * @var string - * @access private - */ - var $_message = ''; - - /** - * Flag used to indicated that log lines have been written to the message - * body and the message should be sent on close(). - * @var boolean - * @access private - */ - var $_shouldSend = false; - - /** - * String holding the backend name of PEAR::Mail - * @var string - * @access private - */ - var $_mailBackend = ''; - - /** - * Array holding the params for PEAR::Mail - * @var array - * @access private - */ - var $_mailParams = array(); - - /** - * Constructs a new Log_mail object. - * - * Here is how you can customize the mail driver with the conf[] hash : - * $conf['from']: the mail's "From" header line, - * $conf['subject']: the mail's "Subject" line. - * $conf['mailBackend']: backend name of PEAR::Mail - * $conf['mailParams']: parameters for the PEAR::Mail backend - * - * @param string $name The message's recipients. - * @param string $ident The identity string. - * @param array $conf The configuration array. - * @param int $level Log messages up to and including this level. - * @access public - */ - function Log_mail($name, $ident = '', $conf = array(), - $level = PEAR_LOG_DEBUG) - { - $this->_id = md5(microtime()); - $this->_recipients = $name; - $this->_ident = $ident; - $this->_mask = Log::UPTO($level); - - if (!empty($conf['from'])) { - $this->_from = $conf['from']; - } else { - $this->_from = ini_get('sendmail_from'); - } - - if (!empty($conf['subject'])) { - $this->_subject = $conf['subject']; - } - - if (!empty($conf['preamble'])) { - $this->_preamble = $conf['preamble']; - } - - if (!empty($conf['lineFormat'])) { - $this->_lineFormat = str_replace(array_keys($this->_formatMap), - array_values($this->_formatMap), - $conf['lineFormat']); - } - - if (!empty($conf['timeFormat'])) { - $this->_timeFormat = $conf['timeFormat']; - } - - if (!empty($conf['mailBackend'])) { - $this->_mailBackend = $conf['mailBackend']; - } - - if (!empty($conf['mailParams'])) { - $this->_mailParams = $conf['mailParams']; - } - - /* register the destructor */ - register_shutdown_function(array(&$this, '_Log_mail')); - } - - /** - * Destructor. Calls close(). - * - * @access private - */ - function _Log_mail() - { - $this->close(); - } - - /** - * Starts a new mail message. - * This is implicitly called by log(), if necessary. - * - * @access public - */ - function open() - { - if (!$this->_opened) { - if (!empty($this->_preamble)) { - $this->_message = $this->_preamble . "\r\n\r\n"; - } - $this->_opened = true; - $_shouldSend = false; - } - - return $this->_opened; - } - - /** - * Closes the message, if it is open, and sends the mail. - * This is implicitly called by the destructor, if necessary. - * - * @access public - */ - function close() - { - if ($this->_opened) { - if ($this->_shouldSend && !empty($this->_message)) { - if ($this->_mailBackend === '') { // use mail() - $headers = "From: $this->_from\r\n"; - $headers .= 'User-Agent: PEAR Log Package'; - if (mail($this->_recipients, $this->_subject, - $this->_message, $headers) == false) { - return false; - } - } else { // use PEAR::Mail - include_once 'Mail.php'; - $headers = array('From' => $this->_from, - 'To' => $this->_recipients, - 'User-Agent' => 'PEAR Log Package', - 'Subject' => $this->_subject); - $mailer = &Mail::factory($this->_mailBackend, - $this->_mailParams); - $res = $mailer->send($this->_recipients, $headers, - $this->_message); - if (PEAR::isError($res)) { - return false; - } - } - - /* Clear the message string now that the email has been sent. */ - $this->_message = ''; - $this->_shouldSend = false; - } - $this->_opened = false; - } - - return ($this->_opened === false); - } - - /** - * Flushes the log output by forcing the email message to be sent now. - * Events that are logged after flush() is called will be appended to a - * new email message. - * - * @access public - * @since Log 1.8.2 - */ - function flush() - { - /* - * It's sufficient to simply call close() to flush the output. - * The next call to log() will cause the handler to be reopened. - */ - return $this->close(); - } - - /** - * Writes $message to the currently open mail message. - * Calls open(), if necessary. - * - * @param mixed $message String or object containing the message to log. - * @param string $priority The priority of the message. Valid - * values are: PEAR_LOG_EMERG, PEAR_LOG_ALERT, - * PEAR_LOG_CRIT, PEAR_LOG_ERR, PEAR_LOG_WARNING, - * PEAR_LOG_NOTICE, PEAR_LOG_INFO, and PEAR_LOG_DEBUG. - * @return boolean True on success or false on failure. - * @access public - */ - function log($message, $priority = null) - { - /* If a priority hasn't been specified, use the default value. */ - if ($priority === null) { - $priority = $this->_priority; - } - - /* Abort early if the priority is above the maximum logging level. */ - if (!$this->_isMasked($priority)) { - return false; - } - - /* If the message isn't open and can't be opened, return failure. */ - if (!$this->_opened && !$this->open()) { - return false; - } - - /* Extract the string representation of the message. */ - $message = $this->_extractMessage($message); - - /* Append the string containing the complete log line. */ - $this->_message .= $this->_format($this->_lineFormat, - strftime($this->_timeFormat), - $priority, $message) . "\r\n"; - $this->_shouldSend = true; - - /* Notify observers about this log message. */ - $this->_announce(array('priority' => $priority, 'message' => $message)); - - return true; - } -} - --- a/owa/includes/Log-1.12.2/Log/mcal.php +++ /dev/null @@ -1,171 +1,1 @@ - - * @since Horde 1.3 - * @since Log 1.0 - * @package Log - */ -class Log_mcal extends Log -{ - /** - * holding the calendar specification to connect to. - * @var string - * @access private - */ - var $_calendar = '{localhost/mstore}'; - - /** - * holding the username to use. - * @var string - * @access private - */ - var $_username = ''; - - /** - * holding the password to use. - * @var string - * @access private - */ - var $_password = ''; - - /** - * holding the options to pass to the calendar stream. - * @var integer - * @access private - */ - var $_options = 0; - - /** - * ResourceID of the MCAL stream. - * @var string - * @access private - */ - var $_stream = ''; - - /** - * Integer holding the log facility to use. - * @var string - * @access private - */ - var $_name = LOG_SYSLOG; - - - /** - * Constructs a new Log_mcal object. - * - * @param string $name The category to use for our events. - * @param string $ident The identity string. - * @param array $conf The configuration array. - * @param int $level Log messages up to and including this level. - * @access public - */ - function Log_mcal($name, $ident = '', $conf = array(), - $level = PEAR_LOG_DEBUG) - { - $this->_id = md5(microtime()); - $this->_name = $name; - $this->_ident = $ident; - $this->_mask = Log::UPTO($level); - $this->_calendar = $conf['calendar']; - $this->_username = $conf['username']; - $this->_password = $conf['password']; - $this->_options = $conf['options']; - } - - /** - * Opens a calendar stream, if it has not already been - * opened. This is implicitly called by log(), if necessary. - * @access public - */ - function open() - { - if (!$this->_opened) { - $this->_stream = mcal_open($this->_calendar, $this->_username, - $this->_password, $this->_options); - $this->_opened = true; - } - - return $this->_opened; - } - - /** - * Closes the calendar stream, if it is open. - * @access public - */ - function close() - { - if ($this->_opened) { - mcal_close($this->_stream); - $this->_opened = false; - } - - return ($this->_opened === false); - } - - /** - * Logs $message and associated information to the currently open - * calendar stream. Calls open() if necessary. Also passes the - * message along to any Log_observer instances that are observing - * this Log. - * - * @param mixed $message String or object containing the message to log. - * @param string $priority The priority of the message. Valid - * values are: PEAR_LOG_EMERG, PEAR_LOG_ALERT, - * PEAR_LOG_CRIT, PEAR_LOG_ERR, PEAR_LOG_WARNING, - * PEAR_LOG_NOTICE, PEAR_LOG_INFO, and PEAR_LOG_DEBUG. - * @return boolean True on success or false on failure. - * @access public - */ - function log($message, $priority = null) - { - /* If a priority hasn't been specified, use the default value. */ - if ($priority === null) { - $priority = $this->_priority; - } - - /* Abort early if the priority is above the maximum logging level. */ - if (!$this->_isMasked($priority)) { - return false; - } - - /* If the connection isn't open and can't be opened, return failure. */ - if (!$this->_opened && !$this->open()) { - return false; - } - - /* Extract the string representation of the message. */ - $message = $this->_extractMessage($message); - - $date_str = date('Y:n:j:G:i:s'); - $dates = explode(':', $date_str); - - mcal_event_init($this->_stream); - mcal_event_set_title($this->_stream, $this->_ident); - mcal_event_set_category($this->_stream, $this->_name); - mcal_event_set_description($this->_stream, $message); - mcal_event_add_attribute($this->_stream, 'priority', $priority); - mcal_event_set_start($this->_stream, $dates[0], $dates[1], $dates[2], - $dates[3], $dates[4], $dates[5]); - mcal_event_set_end($this->_stream, $dates[0], $dates[1], $dates[2], - $dates[3], $dates[4], $dates[5]); - mcal_append_event($this->_stream); - - $this->_announce(array('priority' => $priority, 'message' => $message)); - - return true; - } - -} - --- a/owa/includes/Log-1.12.2/Log/mdb2.php +++ /dev/null @@ -1,359 +1,1 @@ - - * @author Jon Parise - * @since Log 1.9.0 - * @package Log - */ -class Log_mdb2 extends Log -{ - /** - * Variable containing the DSN information. - * @var mixed - * @access private - */ - var $_dsn = ''; - - /** - * Array containing our set of DB configuration options. - * @var array - * @access private - */ - var $_options = array('persistent' => true); - - /** - * Object holding the database handle. - * @var object - * @access private - */ - var $_db = null; - - /** - * Resource holding the prepared statement handle. - * @var resource - * @access private - */ - var $_statement = null; - - /** - * Flag indicating that we're using an existing database connection. - * @var boolean - * @access private - */ - var $_existingConnection = false; - - /** - * String holding the database table to use. - * @var string - * @access private - */ - var $_table = 'log_table'; - - /** - * String holding the name of the ID sequence. - * @var string - * @access private - */ - var $_sequence = 'log_id'; - - /** - * Maximum length of the $ident string. This corresponds to the size of - * the 'ident' column in the SQL table. - * @var integer - * @access private - */ - var $_identLimit = 16; - - /** - * Set of field types used in the database table. - * @var array - * @access private - */ - var $_types = array( - 'id' => 'integer', - 'logtime' => 'timestamp', - 'ident' => 'text', - 'priority' => 'text', - 'message' => 'clob' - ); - - /** - * Constructs a new sql logging object. - * - * @param string $name The target SQL table. - * @param string $ident The identification field. - * @param array $conf The connection configuration array. - * @param int $level Log messages up to and including this level. - * @access public - */ - function Log_mdb2($name, $ident = '', $conf = array(), - $level = PEAR_LOG_DEBUG) - { - $this->_id = md5(microtime()); - $this->_table = $name; - $this->_mask = Log::UPTO($level); - - /* If an options array was provided, use it. */ - if (isset($conf['options']) && is_array($conf['options'])) { - $this->_options = $conf['options']; - } - - /* If a specific sequence name was provided, use it. */ - if (!empty($conf['sequence'])) { - $this->_sequence = $conf['sequence']; - } - - /* If a specific sequence name was provided, use it. */ - if (isset($conf['identLimit'])) { - $this->_identLimit = $conf['identLimit']; - } - - /* Now that the ident limit is confirmed, set the ident string. */ - $this->setIdent($ident); - - /* If an existing database connection was provided, use it. */ - if (isset($conf['db'])) { - $this->_db = &$conf['db']; - $this->_existingConnection = true; - $this->_opened = true; - } elseif (isset($conf['singleton'])) { - $this->_db = &MDB2::singleton($conf['singleton'], $this->_options); - $this->_existingConnection = true; - $this->_opened = true; - } else { - $this->_dsn = $conf['dsn']; - } - } - - /** - * Opens a connection to the database, if it has not already - * been opened. This is implicitly called by log(), if necessary. - * - * @return boolean True on success, false on failure. - * @access public - */ - function open() - { - if (!$this->_opened) { - /* Use the DSN and options to create a database connection. */ - $this->_db = &MDB2::connect($this->_dsn, $this->_options); - if (PEAR::isError($this->_db)) { - return false; - } - - /* Create a prepared statement for repeated use in log(). */ - if (!$this->_prepareStatement()) { - return false; - } - - /* We now consider out connection open. */ - $this->_opened = true; - } - - return $this->_opened; - } - - /** - * Closes the connection to the database if it is still open and we were - * the ones that opened it. It is the caller's responsible to close an - * existing connection that was passed to us via $conf['db']. - * - * @return boolean True on success, false on failure. - * @access public - */ - function close() - { - /* If we have a statement object, free it. */ - if (is_object($this->_statement)) { - $this->_statement->free(); - $this->_statement = null; - } - - /* If we opened the database connection, disconnect it. */ - if ($this->_opened && !$this->_existingConnection) { - $this->_opened = false; - return $this->_db->disconnect(); - } - - return ($this->_opened === false); - } - - /** - * Sets this Log instance's identification string. Note that this - * SQL-specific implementation will limit the length of the $ident string - * to sixteen (16) characters. - * - * @param string $ident The new identification string. - * - * @access public - * @since Log 1.8.5 - */ - function setIdent($ident) - { - $this->_ident = substr($ident, 0, $this->_identLimit); - } - - /** - * Inserts $message to the currently open database. Calls open(), - * if necessary. Also passes the message along to any Log_observer - * instances that are observing this Log. - * - * @param mixed $message String or object containing the message to log. - * @param string $priority The priority of the message. Valid - * values are: PEAR_LOG_EMERG, PEAR_LOG_ALERT, - * PEAR_LOG_CRIT, PEAR_LOG_ERR, PEAR_LOG_WARNING, - * PEAR_LOG_NOTICE, PEAR_LOG_INFO, and PEAR_LOG_DEBUG. - * @return boolean True on success or false on failure. - * @access public - */ - function log($message, $priority = null) - { - /* If a priority hasn't been specified, use the default value. */ - if ($priority === null) { - $priority = $this->_priority; - } - - /* Abort early if the priority is above the maximum logging level. */ - if (!$this->_isMasked($priority)) { - return false; - } - - /* If the connection isn't open and can't be opened, return failure. */ - if (!$this->_opened && !$this->open()) { - return false; - } - - /* If we don't already have a statement object, create one. */ - if (!is_object($this->_statement) && !$this->_prepareStatement()) { - return false; - } - - /* Extract the string representation of the message. */ - $message = $this->_extractMessage($message); - - /* Build our set of values for this log entry. */ - $values = array( - 'id' => $this->_db->nextId($this->_sequence), - 'logtime' => MDB2_Date::mdbNow(), - 'ident' => $this->_ident, - 'priority' => $priority, - 'message' => $message - ); - - /* Execute the SQL query for this log entry insertion. */ - $this->_db->expectError(MDB2_ERROR_NOSUCHTABLE); - $result = &$this->_statement->execute($values); - $this->_db->popExpect(); - - /* Attempt to handle any errors. */ - if (PEAR::isError($result)) { - /* We can only handle MDB2_ERROR_NOSUCHTABLE errors. */ - if ($result->getCode() != MDB2_ERROR_NOSUCHTABLE) { - return false; - } - - /* Attempt to create the target table. */ - if (!$this->_createTable()) { - return false; - } - - /* Recreate our prepared statement resource. */ - $this->_statement->free(); - if (!$this->_prepareStatement()) { - return false; - } - - /* Attempt to re-execute the insertion query. */ - $result = $this->_statement->execute($values); - if (PEAR::isError($result)) { - return false; - } - } - - $this->_announce(array('priority' => $priority, 'message' => $message)); - - return true; - } - - /** - * Create the log table in the database. - * - * @return boolean True on success or false on failure. - * @access private - */ - function _createTable() - { - $this->_db->loadModule('Manager', null, true); - $result = $this->_db->manager->createTable( - $this->_table, - array( - 'id' => array('type' => $this->_types['id']), - 'logtime' => array('type' => $this->_types['logtime']), - 'ident' => array('type' => $this->_types['ident']), - 'priority' => array('type' => $this->_types['priority']), - 'message' => array('type' => $this->_types['message']) - ) - ); - if (PEAR::isError($result)) { - return false; - } - - $result = $this->_db->manager->createIndex( - $this->_table, - 'unique_id', - array('fields' => array('id' => true), 'unique' => true) - ); - if (PEAR::isError($result)) { - return false; - } - - return true; - } - - /** - * Prepare the SQL insertion statement. - * - * @return boolean True if the statement was successfully created. - * - * @access private - * @since Log 1.9.0 - */ - function _prepareStatement() - { - $this->_statement = &$this->_db->prepare( - 'INSERT INTO ' . $this->_table . - ' (id, logtime, ident, priority, message)' . - ' VALUES(:id, :logtime, :ident, :priority, :message)', - $this->_types, MDB2_PREPARE_MANIP); - - /* Return success if we didn't generate an error. */ - return (PEAR::isError($this->_statement) === false); - } -} - --- a/owa/includes/Log-1.12.2/Log/null.php +++ /dev/null @@ -1,92 +1,1 @@ - - * @since Log 1.8.2 - * @package Log - * - * @example null.php Using the null handler. - */ -class Log_null extends Log -{ - /** - * Constructs a new Log_null object. - * - * @param string $name Ignored. - * @param string $ident The identity string. - * @param array $conf The configuration array. - * @param int $level Log messages up to and including this level. - * @access public - */ - function Log_null($name, $ident = '', $conf = array(), - $level = PEAR_LOG_DEBUG) - { - $this->_id = md5(microtime()); - $this->_ident = $ident; - $this->_mask = Log::UPTO($level); - } - - /** - * Opens the handler. - * - * @access public - * @since Log 1.9.6 - */ - function open() - { - $this->_opened = true; - return true; - } - - /** - * Closes the handler. - * - * @access public - * @since Log 1.9.6 - */ - function close() - { - $this->_opened = false; - return true; - } - - /** - * Simply consumes the log event. The message will still be passed - * along to any Log_observer instances that are observing this Log. - * - * @param mixed $message String or object containing the message to log. - * @param string $priority The priority of the message. Valid - * values are: PEAR_LOG_EMERG, PEAR_LOG_ALERT, - * PEAR_LOG_CRIT, PEAR_LOG_ERR, PEAR_LOG_WARNING, - * PEAR_LOG_NOTICE, PEAR_LOG_INFO, and PEAR_LOG_DEBUG. - * @return boolean True on success or false on failure. - * @access public - */ - function log($message, $priority = null) - { - /* If a priority hasn't been specified, use the default value. */ - if ($priority === null) { - $priority = $this->_priority; - } - - /* Abort early if the priority is above the maximum logging level. */ - if (!$this->_isMasked($priority)) { - return false; - } - - $this->_announce(array('priority' => $priority, 'message' => $message)); - - return true; - } - -} - --- a/owa/includes/Log-1.12.2/Log/observer.php +++ /dev/null @@ -1,130 +1,1 @@ - - * @since Horde 1.3 - * @since Log 1.0 - * @package Log - * - * @example observer_mail.php An example Log_observer implementation. - */ -class Log_observer -{ - /** - * Instance-specific unique identification number. - * - * @var integer - * @access private - */ - var $_id = 0; - - /** - * The minimum priority level of message that we want to hear about. - * PEAR_LOG_EMERG is the highest priority, so we will only hear messages - * with an integer priority value less than or equal to ours. It defaults - * to PEAR_LOG_INFO, which listens to everything except PEAR_LOG_DEBUG. - * - * @var string - * @access private - */ - var $_priority = PEAR_LOG_INFO; - - /** - * Creates a new basic Log_observer instance. - * - * @param integer $priority The highest priority at which to receive - * log event notifications. - * - * @access public - */ - function Log_observer($priority = PEAR_LOG_INFO) - { - $this->_id = md5(microtime()); - $this->_priority = $priority; - } - - /** - * Attempts to return a new concrete Log_observer instance of the requested - * type. - * - * @param string $type The type of concreate Log_observer subclass - * to return. - * @param integer $priority The highest priority at which to receive - * log event notifications. - * @param array $conf Optional associative array of additional - * configuration values. - * - * @return object The newly created concrete Log_observer - * instance, or null on an error. - */ - function &factory($type, $priority = PEAR_LOG_INFO, $conf = array()) - { - $type = strtolower($type); - $class = 'Log_observer_' . $type; - - /* - * If the desired class already exists (because the caller has supplied - * it from some custom location), simply instantiate and return a new - * instance. - */ - if (class_exists($class)) { - $object = &new $class($priority, $conf); - return $object; - } - - /* Support both the new-style and old-style file naming conventions. */ - $newstyle = true; - $classfile = dirname(__FILE__) . '/observer_' . $type . '.php'; - - if (!file_exists($classfile)) { - $classfile = 'Log/' . $type . '.php'; - $newstyle = false; - } - - /* - * Attempt to include our version of the named class, but don't treat - * a failure as fatal. The caller may have already included their own - * version of the named class. - */ - @include_once $classfile; - - /* If the class exists, return a new instance of it. */ - if (class_exists($class)) { - /* Support both new-style and old-style construction. */ - if ($newstyle) { - $object = &new $class($priority, $conf); - } else { - $object = &new $class($priority); - } - return $object; - } - - $null = null; - return $null; - } - - /** - * This is a stub method to make sure that Log_Observer classes do - * something when they are notified of a message. The default behavior - * is to just print the message, which is obviously not desireable in - * practically any situation - which is why you need to override this - * method. :) - * - * @param array $event A hash describing the log event. - */ - function notify($event) - { - print_r($event); - } -} - --- a/owa/includes/Log-1.12.2/Log/sql.php +++ /dev/null @@ -1,295 +1,1 @@ - - * @since Horde 1.3 - * @since Log 1.0 - * @package Log - * - * @example sql.php Using the SQL handler. - */ -class Log_sql extends Log -{ - /** - * Variable containing the DSN information. - * @var mixed - * @access private - */ - var $_dsn = ''; - - /** - * String containing the SQL insertion statement. - * - * @var string - * @access private - */ - var $_sql = ''; - - /** - * Array containing our set of DB configuration options. - * @var array - * @access private - */ - var $_options = array('persistent' => true); - - /** - * Object holding the database handle. - * @var object - * @access private - */ - var $_db = null; - - /** - * Resource holding the prepared statement handle. - * @var resource - * @access private - */ - var $_statement = null; - - /** - * Flag indicating that we're using an existing database connection. - * @var boolean - * @access private - */ - var $_existingConnection = false; - - /** - * String holding the database table to use. - * @var string - * @access private - */ - var $_table = 'log_table'; - - /** - * String holding the name of the ID sequence. - * @var string - * @access private - */ - var $_sequence = 'log_id'; - - /** - * Maximum length of the $ident string. This corresponds to the size of - * the 'ident' column in the SQL table. - * @var integer - * @access private - */ - var $_identLimit = 16; - - - /** - * Constructs a new sql logging object. - * - * @param string $name The target SQL table. - * @param string $ident The identification field. - * @param array $conf The connection configuration array. - * @param int $level Log messages up to and including this level. - * @access public - */ - function Log_sql($name, $ident = '', $conf = array(), - $level = PEAR_LOG_DEBUG) - { - $this->_id = md5(microtime()); - $this->_table = $name; - $this->_mask = Log::UPTO($level); - - /* Now that we have a table name, assign our SQL statement. */ - if (!empty($conf['sql'])) { - $this->_sql = $conf['sql']; - } else { - $this->_sql = 'INSERT INTO ' . $this->_table . - ' (id, logtime, ident, priority, message)' . - ' VALUES(?, CURRENT_TIMESTAMP, ?, ?, ?)'; - } - - /* If an options array was provided, use it. */ - if (isset($conf['options']) && is_array($conf['options'])) { - $this->_options = $conf['options']; - } - - /* If a specific sequence name was provided, use it. */ - if (!empty($conf['sequence'])) { - $this->_sequence = $conf['sequence']; - } - - /* If a specific sequence name was provided, use it. */ - if (isset($conf['identLimit'])) { - $this->_identLimit = $conf['identLimit']; - } - - /* Now that the ident limit is confirmed, set the ident string. */ - $this->setIdent($ident); - - /* If an existing database connection was provided, use it. */ - if (isset($conf['db'])) { - $this->_db = &$conf['db']; - $this->_existingConnection = true; - $this->_opened = true; - } else { - $this->_dsn = $conf['dsn']; - } - } - - /** - * Opens a connection to the database, if it has not already - * been opened. This is implicitly called by log(), if necessary. - * - * @return boolean True on success, false on failure. - * @access public - */ - function open() - { - if (!$this->_opened) { - /* Use the DSN and options to create a database connection. */ - $this->_db = &DB::connect($this->_dsn, $this->_options); - if (DB::isError($this->_db)) { - return false; - } - - /* Create a prepared statement for repeated use in log(). */ - if (!$this->_prepareStatement()) { - return false; - } - - /* We now consider out connection open. */ - $this->_opened = true; - } - - return $this->_opened; - } - - /** - * Closes the connection to the database if it is still open and we were - * the ones that opened it. It is the caller's responsible to close an - * existing connection that was passed to us via $conf['db']. - * - * @return boolean True on success, false on failure. - * @access public - */ - function close() - { - if ($this->_opened && !$this->_existingConnection) { - $this->_opened = false; - $this->_db->freePrepared($this->_statement); - return $this->_db->disconnect(); - } - - return ($this->_opened === false); - } - - /** - * Sets this Log instance's identification string. Note that this - * SQL-specific implementation will limit the length of the $ident string - * to sixteen (16) characters. - * - * @param string $ident The new identification string. - * - * @access public - * @since Log 1.8.5 - */ - function setIdent($ident) - { - $this->_ident = substr($ident, 0, $this->_identLimit); - } - - /** - * Inserts $message to the currently open database. Calls open(), - * if necessary. Also passes the message along to any Log_observer - * instances that are observing this Log. - * - * @param mixed $message String or object containing the message to log. - * @param string $priority The priority of the message. Valid - * values are: PEAR_LOG_EMERG, PEAR_LOG_ALERT, - * PEAR_LOG_CRIT, PEAR_LOG_ERR, PEAR_LOG_WARNING, - * PEAR_LOG_NOTICE, PEAR_LOG_INFO, and PEAR_LOG_DEBUG. - * @return boolean True on success or false on failure. - * @access public - */ - function log($message, $priority = null) - { - /* If a priority hasn't been specified, use the default value. */ - if ($priority === null) { - $priority = $this->_priority; - } - - /* Abort early if the priority is above the maximum logging level. */ - if (!$this->_isMasked($priority)) { - return false; - } - - /* If the connection isn't open and can't be opened, return failure. */ - if (!$this->_opened && !$this->open()) { - return false; - } - - /* If we don't already have our statement object yet, create it. */ - if (!is_object($this->_statement) && !$this->_prepareStatement()) { - return false; - } - - /* Extract the string representation of the message. */ - $message = $this->_extractMessage($message); - - /* Build our set of values for this log entry. */ - $id = $this->_db->nextId($this->_sequence); - $values = array($id, $this->_ident, $priority, $message); - - /* Execute the SQL query for this log entry insertion. */ - $result =& $this->_db->execute($this->_statement, $values); - if (DB::isError($result)) { - return false; - } - - $this->_announce(array('priority' => $priority, 'message' => $message)); - - return true; - } - - /** - * Prepare the SQL insertion statement. - * - * @return boolean True if the statement was successfully created. - * - * @access private - * @since Log 1.9.1 - */ - function _prepareStatement() - { - $this->_statement = $this->_db->prepare($this->_sql); - - /* Return success if we didn't generate an error. */ - return (DB::isError($this->_statement) === false); - } -} - --- a/owa/includes/Log-1.12.2/Log/sqlite.php +++ /dev/null @@ -1,226 +1,1 @@ - - * @author Jon Parise - * @since Log 1.8.3 - * @package Log - * - * @example sqlite.php Using the Sqlite handler. - */ -class Log_sqlite extends Log -{ - /** - * Array containing the connection defaults - * @var array - * @access private - */ - var $_options = array('mode' => 0666, - 'persistent' => false); - - /** - * Object holding the database handle. - * @var object - * @access private - */ - var $_db = null; - - /** - * Flag indicating that we're using an existing database connection. - * @var boolean - * @access private - */ - var $_existingConnection = false; - - /** - * String holding the database table to use. - * @var string - * @access private - */ - var $_table = 'log_table'; - - - /** - * Constructs a new sql logging object. - * - * @param string $name The target SQL table. - * @param string $ident The identification field. - * @param mixed $conf Can be an array of configuration options used - * to open a new database connection - * or an already opened sqlite connection. - * @param int $level Log messages up to and including this level. - * @access public - */ - function Log_sqlite($name, $ident = '', &$conf, $level = PEAR_LOG_DEBUG) - { - $this->_id = md5(microtime()); - $this->_table = $name; - $this->_ident = $ident; - $this->_mask = Log::UPTO($level); - - if (is_array($conf)) { - foreach ($conf as $k => $opt) { - $this->_options[$k] = $opt; - } - } else { - // If an existing database connection was provided, use it. - $this->_db =& $conf; - $this->_existingConnection = true; - } - } - - /** - * Opens a connection to the database, if it has not already - * been opened. This is implicitly called by log(), if necessary. - * - * @return boolean True on success, false on failure. - * @access public - */ - function open() - { - if (is_resource($this->_db)) { - $this->_opened = true; - return $this->_createTable(); - } else { - /* Set the connection function based on the 'persistent' option. */ - if (empty($this->_options['persistent'])) { - $connectFunction = 'sqlite_open'; - } else { - $connectFunction = 'sqlite_popen'; - } - - /* Attempt to connect to the database. */ - if ($this->_db = $connectFunction($this->_options['filename'], - (int)$this->_options['mode'], - $error)) { - $this->_opened = true; - return $this->_createTable(); - } - } - - return $this->_opened; - } - - /** - * Closes the connection to the database if it is still open and we were - * the ones that opened it. It is the caller's responsible to close an - * existing connection that was passed to us via $conf['db']. - * - * @return boolean True on success, false on failure. - * @access public - */ - function close() - { - /* We never close existing connections. */ - if ($this->_existingConnection) { - return false; - } - - if ($this->_opened) { - $this->_opened = false; - sqlite_close($this->_db); - } - - return ($this->_opened === false); - } - - /** - * Inserts $message to the currently open database. Calls open(), - * if necessary. Also passes the message along to any Log_observer - * instances that are observing this Log. - * - * @param mixed $message String or object containing the message to log. - * @param string $priority The priority of the message. Valid - * values are: PEAR_LOG_EMERG, PEAR_LOG_ALERT, - * PEAR_LOG_CRIT, PEAR_LOG_ERR, PEAR_LOG_WARNING, - * PEAR_LOG_NOTICE, PEAR_LOG_INFO, and PEAR_LOG_DEBUG. - * @return boolean True on success or false on failure. - * @access public - */ - function log($message, $priority = null) - { - /* If a priority hasn't been specified, use the default value. */ - if ($priority === null) { - $priority = $this->_priority; - } - - /* Abort early if the priority is above the maximum logging level. */ - if (!$this->_isMasked($priority)) { - return false; - } - - /* If the connection isn't open and can't be opened, return failure. */ - if (!$this->_opened && !$this->open()) { - return false; - } - - // Extract the string representation of the message. - $message = $this->_extractMessage($message); - - // Build the SQL query for this log entry insertion. - $q = sprintf('INSERT INTO [%s] (logtime, ident, priority, message) ' . - "VALUES ('%s', '%s', %d, '%s')", - $this->_table, - strftime('%Y-%m-%d %H:%M:%S', time()), - sqlite_escape_string($this->_ident), - $priority, - sqlite_escape_string($message)); - if (!($res = @sqlite_unbuffered_query($this->_db, $q))) { - return false; - } - $this->_announce(array('priority' => $priority, 'message' => $message)); - - return true; - } - - /** - * Checks whether the log table exists and creates it if necessary. - * - * @return boolean True on success or false on failure. - * @access private - */ - function _createTable() - { - $q = "SELECT name FROM sqlite_master WHERE name='" . $this->_table . - "' AND type='table'"; - - $res = sqlite_query($this->_db, $q); - - if (sqlite_num_rows($res) == 0) { - $q = 'CREATE TABLE [' . $this->_table . '] (' . - 'id INTEGER PRIMARY KEY NOT NULL, ' . - 'logtime NOT NULL, ' . - 'ident CHAR(16) NOT NULL, ' . - 'priority INT NOT NULL, ' . - 'message)'; - - if (!($res = sqlite_unbuffered_query($this->_db, $q))) { - return false; - } - } - - return true; - } - -} - --- a/owa/includes/Log-1.12.2/Log/syslog.php +++ /dev/null @@ -1,229 +1,1 @@ - - * @author Jon Parise - * @since Horde 1.3 - * @since Log 1.0 - * @package Log - * - * @example syslog.php Using the syslog handler. - */ -class Log_syslog extends Log -{ - /** - * Integer holding the log facility to use. - * @var integer - * @access private - */ - var $_name = LOG_SYSLOG; - - /** - * Should we inherit the current syslog connection for this process, or - * should we call openlog() to start a new syslog connection? - * @var boolean - * @access private - */ - var $_inherit = false; - - /** - * Maximum message length that will be sent to syslog(). If the handler - * receives a message longer than this length limit, it will be split into - * multiple syslog() calls. - * @var integer - * @access private - */ - var $_maxLength = 500; - - /** - * String containing the format of a message. - * @var string - * @access private - */ - var $_lineFormat = '%4$s'; - - /** - * String containing the timestamp format. It will be passed directly to - * strftime(). Note that the timestamp string will generated using the - * current locale. - * @var string - * @access private - */ - var $_timeFormat = '%b %d %H:%M:%S'; - - /** - * Constructs a new syslog object. - * - * @param string $name The syslog facility. - * @param string $ident The identity string. - * @param array $conf The configuration array. - * @param int $level Log messages up to and including this level. - * @access public - */ - function Log_syslog($name, $ident = '', $conf = array(), - $level = PEAR_LOG_DEBUG) - { - /* Ensure we have a valid integer value for $name. */ - if (empty($name) || !is_int($name)) { - $name = LOG_SYSLOG; - } - - if (isset($conf['inherit'])) { - $this->_inherit = $conf['inherit']; - $this->_opened = $this->_inherit; - } - if (isset($conf['maxLength'])) { - $this->_maxLength = $conf['maxLength']; - } - if (!empty($conf['lineFormat'])) { - $this->_lineFormat = str_replace(array_keys($this->_formatMap), - array_values($this->_formatMap), - $conf['lineFormat']); - } - if (!empty($conf['timeFormat'])) { - $this->_timeFormat = $conf['timeFormat']; - } - - $this->_id = md5(microtime()); - $this->_name = $name; - $this->_ident = $ident; - $this->_mask = Log::UPTO($level); - } - - /** - * Opens a connection to the system logger, if it has not already - * been opened. This is implicitly called by log(), if necessary. - * @access public - */ - function open() - { - if (!$this->_opened) { - $this->_opened = openlog($this->_ident, LOG_PID, $this->_name); - } - - return $this->_opened; - } - - /** - * Closes the connection to the system logger, if it is open. - * @access public - */ - function close() - { - if ($this->_opened && !$this->_inherit) { - closelog(); - $this->_opened = false; - } - - return true; - } - - /** - * Sends $message to the currently open syslog connection. Calls - * open() if necessary. Also passes the message along to any Log_observer - * instances that are observing this Log. - * - * @param mixed $message String or object containing the message to log. - * @param int $priority (optional) The priority of the message. Valid - * values are: PEAR_LOG_EMERG, PEAR_LOG_ALERT, - * PEAR_LOG_CRIT, PEAR_LOG_ERR, PEAR_LOG_WARNING, - * PEAR_LOG_NOTICE, PEAR_LOG_INFO, and PEAR_LOG_DEBUG. - * @return boolean True on success or false on failure. - * @access public - */ - function log($message, $priority = null) - { - /* If a priority hasn't been specified, use the default value. */ - if ($priority === null) { - $priority = $this->_priority; - } - - /* Abort early if the priority is above the maximum logging level. */ - if (!$this->_isMasked($priority)) { - return false; - } - - /* If the connection isn't open and can't be opened, return failure. */ - if (!$this->_opened && !$this->open()) { - return false; - } - - /* Extract the string representation of the message. */ - $message = $this->_extractMessage($message); - - /* Build a syslog priority value based on our current configuration. */ - $priority = $this->_toSyslog($priority); - if ($this->_inherit) { - $priority |= $this->_name; - } - - /* Apply the configured line format to the message string. */ - $message = $this->_format($this->_lineFormat, - strftime($this->_timeFormat), - $priority, $message); - - /* Split the string into parts based on our maximum length setting. */ - $parts = str_split($message, $this->_maxLength); - if ($parts === false) { - return false; - } - - foreach ($parts as $part) { - if (!syslog($priority, $part)) { - return false; - } - } - - $this->_announce(array('priority' => $priority, 'message' => $message)); - - return true; - } - - /** - * Converts a PEAR_LOG_* constant into a syslog LOG_* constant. - * - * This function exists because, under Windows, not all of the LOG_* - * constants have unique values. Instead, the PEAR_LOG_* were introduced - * for global use, with the conversion to the LOG_* constants kept local to - * to the syslog driver. - * - * @param int $priority PEAR_LOG_* value to convert to LOG_* value. - * - * @return The LOG_* representation of $priority. - * - * @access private - */ - function _toSyslog($priority) - { - static $priorities = array( - PEAR_LOG_EMERG => LOG_EMERG, - PEAR_LOG_ALERT => LOG_ALERT, - PEAR_LOG_CRIT => LOG_CRIT, - PEAR_LOG_ERR => LOG_ERR, - PEAR_LOG_WARNING => LOG_WARNING, - PEAR_LOG_NOTICE => LOG_NOTICE, - PEAR_LOG_INFO => LOG_INFO, - PEAR_LOG_DEBUG => LOG_DEBUG - ); - - /* If we're passed an unknown priority, default to LOG_INFO. */ - if (!is_int($priority) || !in_array($priority, $priorities)) { - return LOG_INFO; - } - - return $priorities[$priority]; - } - -} - --- a/owa/includes/Log-1.12.2/Log/win.php +++ /dev/null @@ -1,287 +1,1 @@ - - * @since Log 1.7.0 - * @package Log - * - * @example win.php Using the window handler. - */ -class Log_win extends Log -{ - /** - * The name of the output window. - * @var string - * @access private - */ - var $_name = 'LogWindow'; - - /** - * The title of the output window. - * @var string - * @access private - */ - var $_title = 'Log Output Window'; - - /** - * Mapping of log priorities to styles. - * @var array - * @access private - */ - var $_styles = array( - PEAR_LOG_EMERG => 'color: red;', - PEAR_LOG_ALERT => 'color: orange;', - PEAR_LOG_CRIT => 'color: yellow;', - PEAR_LOG_ERR => 'color: green;', - PEAR_LOG_WARNING => 'color: blue;', - PEAR_LOG_NOTICE => 'color: indigo;', - PEAR_LOG_INFO => 'color: violet;', - PEAR_LOG_DEBUG => 'color: black;' - ); - - /** - * String buffer that holds line that are pending output. - * @var array - * @access private - */ - var $_buffer = array(); - - /** - * Constructs a new Log_win object. - * - * @param string $name Ignored. - * @param string $ident The identity string. - * @param array $conf The configuration array. - * @param int $level Log messages up to and including this level. - * @access public - */ - function Log_win($name, $ident = '', $conf = array(), - $level = PEAR_LOG_DEBUG) - { - $this->_id = md5(microtime()); - $this->_name = str_replace(' ', '_', $name); - $this->_ident = $ident; - $this->_mask = Log::UPTO($level); - - if (isset($conf['title'])) { - $this->_title = $conf['title']; - } - if (isset($conf['styles']) && is_array($conf['styles'])) { - $this->_styles = $conf['styles']; - } - if (isset($conf['colors']) && is_array($conf['colors'])) { - foreach ($conf['colors'] as $level => $color) { - $this->_styles[$level] .= "color: $color;"; - } - } - - register_shutdown_function(array(&$this, '_Log_win')); - } - - /** - * Destructor - */ - function _Log_win() - { - if ($this->_opened || (count($this->_buffer) > 0)) { - $this->close(); - } - } - - /** - * The first time open() is called, it will open a new browser window and - * prepare it for output. - * - * This is implicitly called by log(), if necessary. - * - * @access public - */ - function open() - { - if (!$this->_opened) { - $win = $this->_name; - $styles = $this->_styles; - - if (!empty($this->_ident)) { - $identHeader = "$win.document.writeln('Ident')"; - } else { - $identHeader = ''; - } - - echo <<< EOT - -EOT; - $this->_opened = true; - } - - return $this->_opened; - } - - /** - * Closes the output stream if it is open. If there are still pending - * lines in the output buffer, the output window will be opened so that - * the buffer can be drained. - * - * @access public - */ - function close() - { - /* - * If there are still lines waiting to be written, open the output - * window so that we can drain the buffer. - */ - if (!$this->_opened && (count($this->_buffer) > 0)) { - $this->open(); - } - - if ($this->_opened) { - $this->_writeln(''); - $this->_writeln(''); - $this->_drainBuffer(); - $this->_opened = false; - } - - return ($this->_opened === false); - } - - /** - * Writes the contents of the output buffer to the output window. - * - * @access private - */ - function _drainBuffer() - { - $win = $this->_name; - foreach ($this->_buffer as $line) { - echo "\n"; - } - - /* Now that the buffer has been drained, clear it. */ - $this->_buffer = array(); - } - - /** - * Writes a single line of text to the output buffer. - * - * @param string $line The line of text to write. - * - * @access private - */ - function _writeln($line) - { - /* Add this line to our output buffer. */ - $this->_buffer[] = $line; - - /* Buffer the output until this page's headers have been sent. */ - if (!headers_sent()) { - return; - } - - /* If we haven't already opened the output window, do so now. */ - if (!$this->_opened && !$this->open()) { - return; - } - - /* Drain the buffer to the output window. */ - $this->_drainBuffer(); - } - - /** - * Logs $message to the output window. The message is also passed along - * to any Log_observer instances that are observing this Log. - * - * @param mixed $message String or object containing the message to log. - * @param string $priority The priority of the message. Valid - * values are: PEAR_LOG_EMERG, PEAR_LOG_ALERT, - * PEAR_LOG_CRIT, PEAR_LOG_ERR, PEAR_LOG_WARNING, - * PEAR_LOG_NOTICE, PEAR_LOG_INFO, and PEAR_LOG_DEBUG. - * @return boolean True on success or false on failure. - * @access public - */ - function log($message, $priority = null) - { - /* If a priority hasn't been specified, use the default value. */ - if ($priority === null) { - $priority = $this->_priority; - } - - /* Abort early if the priority is above the maximum logging level. */ - if (!$this->_isMasked($priority)) { - return false; - } - - /* Extract the string representation of the message. */ - $message = $this->_extractMessage($message); - $message = preg_replace('/\r\n|\n|\r/', '
', $message); - - list($usec, $sec) = explode(' ', microtime()); - - /* Build the output line that contains the log entry row. */ - $line = ''; - $line .= sprintf('%s.%s', - strftime('%H:%M:%S', $sec), substr($usec, 2, 2)); - if (!empty($this->_ident)) { - $line .= '' . $this->_ident . ''; - } - $line .= '' . ucfirst($this->priorityToString($priority)) . ''; - $line .= sprintf('%s', $priority, $message); - $line .= ''; - - $this->_writeln($line); - - $this->_announce(array('priority' => $priority, 'message' => $message)); - - return true; - } - -} - --- a/owa/includes/PHPMailer_v2.0.3/ChangeLog.txt +++ /dev/null @@ -1,299 +1,1 @@ -ChangeLog -Version 2.0.3 (November 08 2008) -* fixed line 1041 in class.smtp.php (endless loop from missing = sign) -* fixed duplicate images in email body -* removed English language from language files and made it a default within - class.phpmailer.php - if no language is found, it will default to use - the english language translation -* corrected $basedir to $directory -* changed default of $LE to "\r\n" to comply with RFC 2822. Can be set by the user - if default is not acceptable -* removed trim() from return results in EncodeQP -* changed $this->AltBody = $textMsg; to $this->AltBody = html_entity_decode($textMsg); -* We have removed the /phpdoc from the downloads. All documentation is now on - the http://phpmailer.codeworxtech.com website. - -Version 2.0.2 (June 04 2008) - -** NOTE: WE HAVE A NEW LANGUAGE VARIABLE FOR DIGITALLY SIGNED S/MIME EMAILS. - IF YOU CAN HELP WITH LANGUAGES OTHER THAN ENGLISH AND SPANISH, IT WOULD BE - APPRECIATED. - -* added S/MIME functionality (ability to digitally sign emails) - BIG THANKS TO "sergiocambra" for posting this patch back in November 2007. - The "Signed Emails" functionality adds the Sign method to pass the private key - filename and the password to read it, and then email will be sent with - content-type multipart/signed and with the digital signature attached. -* added ability to define path (mainly for embedded images) - function MsgHTML($message,$basedir='') ... where: - $basedir is the fully qualified path -* fixed MsgHTML() function: - - Embedded Images where images are specified by :// will not be altered or embedded -* fixed the return value of SMTP exit code ( pclose ) -* addressed issue of multibyte characters in subject line and truncating -* added ability to have user specified Message ID - (default is still that PHPMailer create a unique Message ID) -* corrected unidentified message type to 'application/octet-stream' -* fixed chunk_split() multibyte issue (thanks to Colin Brown, et al). -* added check for added attachments -* enhanced conversion of HTML to text in MsgHTML (thanks to "brunny") - -Version 2.0.1 (Sun, Dec 02 2007) -* corrected incorrect version numbers in all three classes - -Version 2.0.0 (Sun, Dec 02 2007) -* implemented updated EncodeQP (thanks to coolbru, aka Marcus Bointon) -* finished all testing, all known bugs corrected, enhancements tested -- note: designed for PHP4, but will work with PHP5 (not compatible with - E_STRICT) ... full PHP5 version of PHPMailer released separately. - PHP5 version will NOT work with PHP4. - -Version 2.0.0 rc2 (Fri, Nov 16 2007), interim release -* implements new property to control VERP in class.smtp.php - example (requires instantiating class.smtp.php): - $mail->do_verp = true; -* POP-before-SMTP functionality included, thanks to Richard Davey - (see class.pop3.php & pop3_before_smtp_test.php for examples) -* included example showing how to use PHPMailer with GMAIL -* fixed the missing Cc in SendMail() and Mail() - -****************** -A note on sending bulk emails: - -If the email you are sending is not personalized, consider using the -"undisclosed-recipient:;" strategy. That is, put all of your recipients -in the Bcc field and set the To field to "undisclosed-recipients:;". -It's a lot faster (only one send) and saves quite a bit on resources. -Contrary to some opinions, this will not get you listed in spam engines - -it's a legitimate way for you to send emails. - -A partial example for use with PHPMailer: - -$mail->AddAddress("undisclosed-recipients:;"); -$mail->AddBCC("email1@anydomain.com,email2@anyotherdomain.com,email3@anyalternatedomain.com"); - -Many email service providers restrict the number of emails that can be sent -in any given time period. Often that is between 50 - 60 emails maximum -per hour or per send session. - -If that's the case, then break up your Bcc lists into chunks that are one -less than your limit, and put a pause in your script. -******************* - -Version 2.0.0 rc1 (Thu, Nov 08 2007), interim release -* dramatically simplified using inline graphics ... it's fully automated and - requires no user input -* added automatic document type detection for attachments and pictures -* added MsgHTML() function to replace Body tag for HTML emails -* fixed the SendMail security issues (input validation vulnerability) -* enhanced the AddAddresses functionality so that the "Name" portion is used - in the email address -* removed the need to use the AltBody method (set from the HTML, or default - text used) -* set the PHP Mail() function as the default (still support SendMail, SMTP Mail) -* removed the need to set the IsHTML property (set automatically) -* added Estonian language file by Indrek Päri -* added header injection patch -* added "set" method to permit users to create their own pseudo-properties - like 'X-Headers', etc. - example of use: - $mail->set('X-Priority', '3'); - $mail->set('X-MSMail-Priority', 'Normal'); -* fixed warning message in SMTP get_lines method -* added TLS/SSL SMTP support - example of use: - $mail = new PHPMailer(); - $mail->Mailer = "smtp"; - $mail->Host = "smtp.example.com"; - $mail->SMTPSecure = "tls"; // option - //$mail->SMTPSecure = "ssl"; // option - ... - $mail->Send(); -* PHPMailer has been tested with PHP4 (4.4.7) and PHP5 (5.2.7) -* Works with PHP installed as a module or as CGI-PHP -- NOTE: will NOT work with PHP5 in E_STRICT error mode - -Version 1.73 (Sun, Jun 10 2005) -* Fixed denial of service bug: http://www.cybsec.com/vuln/PHPMailer-DOS.pdf -* Now has a total of 20 translations -* Fixed alt attachments bug: http://tinyurl.com/98u9k - -Version 1.72 (Wed, May 25 2004) -* Added Dutch, Swedish, Czech, Norwegian, and Turkish translations. -* Received: Removed this method because spam filter programs like -SpamAssassin reject this header. -* Fixed error count bug. -* SetLanguage default is now "language/". -* Fixed magic_quotes_runtime bug. - -Version 1.71 (Tue, Jul 28 2003) -* Made several speed enhancements -* Added German and Italian translation files -* Fixed HELO/AUTH bugs on keep-alive connects -* Now provides an error message if language file does not load -* Fixed attachment EOL bug -* Updated some unclear documentation -* Added additional tests and improved others - -Version 1.70 (Mon, Jun 20 2003) -* Added SMTP keep-alive support -* Added IsError method for error detection -* Added error message translation support (SetLanguage) -* Refactored many methods to increase library performance -* Hello now sends the newer EHLO message before HELO as per RFC 2821 -* Removed the boundary class and replaced it with GetBoundary -* Removed queue support methods -* New $Hostname variable -* New Message-ID header -* Received header reformat -* Helo variable default changed to $Hostname -* Removed extra spaces in Content-Type definition (#667182) -* Return-Path should be set to Sender when set -* Adds Q or B encoding to headers when necessary -* quoted-encoding should now encode NULs \000 -* Fixed encoding of body/AltBody (#553370) -* Adds "To: undisclosed-recipients:;" when all recipients are hidden (BCC) -* Multiple bug fixes - -Version 1.65 (Fri, Aug 09 2002) -* Fixed non-visible attachment bug (#585097) for Outlook -* SMTP connections are now closed after each transaction -* Fixed SMTP::Expand return value -* Converted SMTP class documentation to phpDocumentor format - -Version 1.62 (Wed, Jun 26 2002) -* Fixed multi-attach bug -* Set proper word wrapping -* Reduced memory use with attachments -* Added more debugging -* Changed documentation to phpDocumentor format - -Version 1.60 (Sat, Mar 30 2002) -* Sendmail pipe and address patch (Christian Holtje) -* Added embedded image and read confirmation support (A. Ognio) -* Added unit tests -* Added SMTP timeout support (*nix only) -* Added possibly temporary PluginDir variable for SMTP class -* Added LE message line ending variable -* Refactored boundary and attachment code -* Eliminated SMTP class warnings -* Added SendToQueue method for future queuing support - -Version 1.54 (Wed, Dec 19 2001) -* Add some queuing support code -* Fixed a pesky multi/alt bug -* Messages are no longer forced to have "To" addresses - -Version 1.50 (Thu, Nov 08 2001) -* Fix extra lines when not using SMTP mailer -* Set WordWrap variable to int with a zero default - -Version 1.47 (Tue, Oct 16 2001) -* Fixed Received header code format -* Fixed AltBody order error -* Fixed alternate port warning - -Version 1.45 (Tue, Sep 25 2001) -* Added enhanced SMTP debug support -* Added support for multiple ports on SMTP -* Added Received header for tracing -* Fixed AddStringAttachment encoding -* Fixed possible header name quote bug -* Fixed wordwrap() trim bug -* Couple other small bug fixes - -Version 1.41 (Wed, Aug 22 2001) -* Fixed AltBody bug w/o attachments -* Fixed rfc_date() for certain mail servers - -Version 1.40 (Sun, Aug 12 2001) -* Added multipart/alternative support (AltBody) -* Documentation update -* Fixed bug in Mercury MTA - -Version 1.29 (Fri, Aug 03 2001) -* Added AddStringAttachment() method -* Added SMTP authentication support - -Version 1.28 (Mon, Jul 30 2001) -* Fixed a typo in SMTP class -* Fixed header issue with Imail (win32) SMTP server -* Made fopen() calls for attachments use "rb" to fix win32 error - -Version 1.25 (Mon, Jul 02 2001) -* Added RFC 822 date fix (Patrice) -* Added improved error handling by adding a $ErrorInfo variable -* Removed MailerDebug variable (obsolete with new error handler) - -Version 1.20 (Mon, Jun 25 2001) -* Added quoted-printable encoding (Patrice) -* Set Version as public and removed PrintVersion() -* Changed phpdoc to only display public variables and methods - -Version 1.19 (Thu, Jun 21 2001) -* Fixed MS Mail header bug -* Added fix for Bcc problem with mail(). *Does not work on Win32* - (See PHP bug report: http://www.php.net/bugs.php?id=11616) -* mail() no longer passes a fifth parameter when not needed - -Version 1.15 (Fri, Jun 15 2001) -[Note: these changes contributed by Patrice Fournier] -* Changed all remaining \n to \r\n -* Bcc: header no longer writen to message except -when sent directly to sendmail -* Added a small message to non-MIME compliant mail reader -* Added Sender variable to change the Sender email -used in -f for sendmail/mail and in 'MAIL FROM' for smtp mode -* Changed boundary setting to a place it will be set only once -* Removed transfer encoding for whole message when using multipart -* Message body now uses Encoding in multipart messages -* Can set encoding and type to attachments 7bit, 8bit -and binary attachment are sent as is, base64 are encoded -* Can set Encoding to base64 to send 8 bits body -through 7 bits servers - -Version 1.10 (Tue, Jun 12 2001) -* Fixed win32 mail header bug (printed out headers in message body) - -Version 1.09 (Fri, Jun 08 2001) -* Changed date header to work with Netscape mail programs -* Altered phpdoc documentation - -Version 1.08 (Tue, Jun 05 2001) -* Added enhanced error-checking -* Added phpdoc documentation to source - -Version 1.06 (Fri, Jun 01 2001) -* Added optional name for file attachments - -Version 1.05 (Tue, May 29 2001) -* Code cleanup -* Eliminated sendmail header warning message -* Fixed possible SMTP error - -Version 1.03 (Thu, May 24 2001) -* Fixed problem where qmail sends out duplicate messages - -Version 1.02 (Wed, May 23 2001) -* Added multiple recipient and attachment Clear* methods -* Added Sendmail public variable -* Fixed problem with loading SMTP library multiple times - -Version 0.98 (Tue, May 22 2001) -* Fixed problem with redundant mail hosts sending out multiple messages -* Added additional error handler code -* Added AddCustomHeader() function -* Added support for Microsoft mail client headers (affects priority) -* Fixed small bug with Mailer variable -* Added PrintVersion() function - -Version 0.92 (Tue, May 15 2001) -* Changed file names to class.phpmailer.php and class.smtp.php to match - current PHP class trend. -* Fixed problem where body not being printed when a message is attached -* Several small bug fixes - -Version 0.90 (Tue, April 17 2001) -* Intial public release - --- a/owa/includes/PHPMailer_v2.0.3/LICENSE +++ /dev/null @@ -1,505 +1,1 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 - - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Lesser General Public License, applies to some -specially designated software packages--typically libraries--of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations below. - - When we speak of free software, we are referring to freedom of use, -not price. Our General Public Licenses are designed to make sure that -you have the freedom to distribute copies of free software (and charge -for this service if you wish); that you receive source code or can get -it if you want it; that you can change the software and use pieces of -it in new free programs; and that you are informed that you can do -these things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. - - Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it becomes -a de-facto standard. To achieve this, non-free programs must be -allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, whereas the latter must -be combined with the library in order to run. - - GNU LESSER GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser General Public License (also called "this License"). -Each licensee is addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also combine or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with. - - c) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - d) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - e) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the materials to be distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties with -this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Lesser General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Libraries - - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms of the -ordinary General Public License). - - To apply these terms, attach the following notices to the library. It is -safest to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the library, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James Random Hacker. - - , 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! - - --- a/owa/includes/PHPMailer_v2.0.3/README +++ /dev/null @@ -1,170 +1,1 @@ -/******************************************************************* -* The http://phpmailer.codeworxtech.com/ website now carries a few * -* advertisements through the Google Adsense network. Please visit * -* the advertiser sites and help us offset some of our costs. * -* Thanks .... * -********************************************************************/ - -PHPMailer -Full Featured Email Transfer Class for PHP -========================================== - -Version 2.3 (November 08, 2008) - -PHP4 continues to be a major platform for developers. We are responding -to the emails received to continue development for PHP4 with this -release. - -We have removed the /phpdoc from the downloads. All documentation is now on -the http://phpmailer.codeworxtech.com website. - -For all other changes and notes, please see the changelog. - -Donations are accepted at PayPal with our id "paypal@worxteam.com". - -Version 2.2 (July 15 2008) - -- see the changelog. - -Version 2.0.2 (June 04 2008) - -With this release, we are announcing that the development of PHPMailer for PHP5 -will be our focus from this date on. We have implemented all the enhancements -and fixes from the sourceforge.net Tracker. - -** NOTE: WE HAVE A NEW LANGUAGE VARIABLE FOR DIGITALLY SIGNED S/MIME EMAILS. - IF YOU CAN HELP WITH LANGUAGES OTHER THAN ENGLISH AND SPANISH, IT WOULD BE - APPRECIATED. - -We have now added S/MIME functionality (ability to digitally sign emails). -BIG THANKS TO "sergiocambra" for posting this patch back in November 2007. -The "Signed Emails" functionality adds the Sign method to pass the private key -filename and the password to read it, and then email will be sent with -content-type multipart/signed and with the digital signature attached. - -We have also included more example files to show the use of "sendmail", "mail()", -"smtp", and "gmail". - -We are also looking for more programmers to join the volunteer development team. -If you have an interest in this, please let us know. - -Enjoy! - -** NOTE: - -As of November 2007, PHPMailer has a new project team headed by industry -veteran Andy Prevost (codeworxtech). The first release in more than two -years will focus on fixes, adding ease-of-use enhancements, provide -basic compatibility with PHP4 and PHP5 using PHP5 backwards compatibility -features. A new release is planned before year-end 2007 that will provide -full compatiblity with PHP4 and PHP5, as well as more bug fixes. - -We are looking for project developers to assist in restoring PHPMailer to -its leadership position. Our goals are to simplify use of PHPMailer, provide -good documentation and examples, and retain backward compatibility to level -1.7.3 standards. - -If you are interested in helping out, visit http://sourceforge.net/projects/phpmailer -and indicate your interest. - -** - -http://phpmailer.sourceforge.net/ - -This software is licenced under the LGPL. Please read LICENSE for information on the -software availability and distribution. - -Class Features: -- Send emails with multiple TOs, CCs, BCCs and REPLY-TOs -- Redundant SMTP servers -- Multipart/alternative emails for mail clients that do not read HTML email -- Support for 8bit, base64, binary, and quoted-printable encoding -- Uses the same methods as the very popular AspEmail active server (COM) component -- SMTP authentication -- Native language support -- Word wrap, and more! - -Why you might need it: - -Many PHP developers utilize email in their code. The only PHP function -that supports this is the mail() function. However, it does not expose -any of the popular features that many email clients use nowadays like -HTML-based emails and attachments. There are two proprietary -development tools out there that have all the functionality built into -easy to use classes: AspEmail(tm) and AspMail. Both of these -programs are COM components only available on Windows. They are also a -little pricey for smaller projects. - -Since I do Linux development I’ve missed these tools for my PHP coding. -So I built a version myself that implements the same methods (object -calls) that the Windows-based components do. It is open source and the -LGPL license allows you to place the class in your proprietary PHP -projects. - - -Installation: - -Copy class.phpmailer.php into your php.ini include_path. If you are -using the SMTP mailer then place class.smtp.php in your path as well. -In the language directory you will find several files like -phpmailer.lang-en.php. If you look right before the .php extension -that there are two letters. These represent the language type of the -translation file. For instance "en" is the English file and "br" is -the Portuguese file. Chose the file that best fits with your language -and place it in the PHP include path. If your language is English -then you have nothing more to do. If it is a different language then -you must point PHPMailer to the correct translation. To do this, call -the PHPMailer SetLanguage method like so: - -// To load the Portuguese version -$mail->SetLanguage("br", "/optional/path/to/language/directory/"); - -That's it. You should now be ready to use PHPMailer! - - -A Simple Example: - -IsSMTP(); // set mailer to use SMTP -$mail->Host = "smtp1.example.com;smtp2.example.com"; // specify main and backup server -$mail->SMTPAuth = true; // turn on SMTP authentication -$mail->Username = "jswan"; // SMTP username -$mail->Password = "secret"; // SMTP password - -$mail->From = "from@example.com"; -$mail->FromName = "Mailer"; -$mail->AddAddress("josh@example.net", "Josh Adams"); -$mail->AddAddress("ellen@example.com"); // name is optional -$mail->AddReplyTo("info@example.com", "Information"); - -$mail->WordWrap = 50; // set word wrap to 50 characters -$mail->AddAttachment("/var/tmp/file.tar.gz"); // add attachments -$mail->AddAttachment("/tmp/image.jpg", "new.jpg"); // optional name -$mail->IsHTML(true); // set email format to HTML - -$mail->Subject = "Here is the subject"; -$mail->Body = "This is the HTML message body in bold!"; -$mail->AltBody = "This is the body in plain text for non-HTML mail clients"; - -if(!$mail->Send()) -{ - echo "Message could not be sent.

"; - echo "Mailer Error: " . $mail->ErrorInfo; - exit; -} - -echo "Message has been sent"; -?> - -CHANGELOG - -See ChangeLog.txt - -Download: http://sourceforge.net/project/showfiles.php?group_id=26031 - -Andy Prevost --- a/owa/includes/PHPMailer_v2.0.3/class.phpmailer.php +++ /dev/null @@ -1,1909 +1,1 @@ -ContentType = 'text/html'; - } else { - $this->ContentType = 'text/plain'; - } - } - - /** - * Sets Mailer to send message using SMTP. - * @return void - */ - function IsSMTP() { - $this->Mailer = 'smtp'; - } - - /** - * Sets Mailer to send message using PHP mail() function. - * @return void - */ - function IsMail() { - $this->Mailer = 'mail'; - } - - /** - * Sets Mailer to send message using the $Sendmail program. - * @return void - */ - function IsSendmail() { - $this->Mailer = 'sendmail'; - } - - /** - * Sets Mailer to send message using the qmail MTA. - * @return void - */ - function IsQmail() { - $this->Sendmail = '/var/qmail/bin/sendmail'; - $this->Mailer = 'sendmail'; - } - - ///////////////////////////////////////////////// - // METHODS, RECIPIENTS - ///////////////////////////////////////////////// - - /** - * Adds a "To" address. - * @param string $address - * @param string $name - * @return void - */ - function AddAddress($address, $name = '') { - $cur = count($this->to); - $this->to[$cur][0] = trim($address); - $this->to[$cur][1] = $name; - } - - /** - * Adds a "Cc" address. Note: this function works - * with the SMTP mailer on win32, not with the "mail" - * mailer. - * @param string $address - * @param string $name - * @return void - */ - function AddCC($address, $name = '') { - $cur = count($this->cc); - $this->cc[$cur][0] = trim($address); - $this->cc[$cur][1] = $name; - } - - /** - * Adds a "Bcc" address. Note: this function works - * with the SMTP mailer on win32, not with the "mail" - * mailer. - * @param string $address - * @param string $name - * @return void - */ - function AddBCC($address, $name = '') { - $cur = count($this->bcc); - $this->bcc[$cur][0] = trim($address); - $this->bcc[$cur][1] = $name; - } - - /** - * Adds a "Reply-To" address. - * @param string $address - * @param string $name - * @return void - */ - function AddReplyTo($address, $name = '') { - $cur = count($this->ReplyTo); - $this->ReplyTo[$cur][0] = trim($address); - $this->ReplyTo[$cur][1] = $name; - } - - ///////////////////////////////////////////////// - // METHODS, MAIL SENDING - ///////////////////////////////////////////////// - - /** - * Creates message and assigns Mailer. If the message is - * not sent successfully then it returns false. Use the ErrorInfo - * variable to view description of the error. - * @return bool - */ - function Send() { - $header = ''; - $body = ''; - $result = true; - - if((count($this->to) + count($this->cc) + count($this->bcc)) < 1) { - $this->SetError($this->Lang('provide_address')); - return false; - } - - /* Set whether the message is multipart/alternative */ - if(!empty($this->AltBody)) { - $this->ContentType = 'multipart/alternative'; - } - - $this->error_count = 0; // reset errors - $this->SetMessageType(); - $header .= $this->CreateHeader(); - $body = $this->CreateBody(); - - if($body == '') { - return false; - } - - /* Choose the mailer */ - switch($this->Mailer) { - case 'sendmail': - $result = $this->SendmailSend($header, $body); - break; - case 'smtp': - $result = $this->SmtpSend($header, $body); - break; - case 'mail': - $result = $this->MailSend($header, $body); - break; - default: - $result = $this->MailSend($header, $body); - break; - //$this->SetError($this->Mailer . $this->Lang('mailer_not_supported')); - //$result = false; - //break; - } - - return $result; - } - - /** - * Sends mail using the $Sendmail program. - * @access private - * @return bool - */ - function SendmailSend($header, $body) { - if ($this->Sender != '') { - $sendmail = sprintf("%s -oi -f %s -t", escapeshellcmd($this->Sendmail), escapeshellarg($this->Sender)); - } else { - $sendmail = sprintf("%s -oi -t", escapeshellcmd($this->Sendmail)); - } - - if(!@$mail = popen($sendmail, 'w')) { - $this->SetError($this->Lang('execute') . $this->Sendmail); - return false; - } - - fputs($mail, $header); - fputs($mail, $body); - - $result = pclose($mail); - if (version_compare(phpversion(), '4.2.3') == -1) { - $result = $result >> 8 & 0xFF; - } - if($result != 0) { - $this->SetError($this->Lang('execute') . $this->Sendmail); - return false; - } - return true; - } - - /** - * Sends mail using the PHP mail() function. - * @access private - * @return bool - */ - function MailSend($header, $body) { - - $to = ''; - for($i = 0; $i < count($this->to); $i++) { - if($i != 0) { $to .= ', '; } - $to .= $this->AddrFormat($this->to[$i]); - } - - $toArr = split(',', $to); - - $params = sprintf("-oi -f %s", $this->Sender); - if ($this->Sender != '' && strlen(ini_get('safe_mode')) < 1) { - $old_from = ini_get('sendmail_from'); - ini_set('sendmail_from', $this->Sender); - if ($this->SingleTo === true && count($toArr) > 1) { - foreach ($toArr as $key => $val) { - $rt = @mail($val, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header, $params); - } - } else { - $rt = @mail($to, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header, $params); - } - } else { - if ($this->SingleTo === true && count($toArr) > 1) { - foreach ($toArr as $key => $val) { - $rt = @mail($val, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header, $params); - } - } else { - $rt = @mail($to, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header); - } - } - - if (isset($old_from)) { - ini_set('sendmail_from', $old_from); - } - - if(!$rt) { - $this->SetError($this->Lang('instantiate')); - return false; - } - - return true; - } - - /** - * Sends mail via SMTP using PhpSMTP (Author: - * Chris Ryan). Returns bool. Returns false if there is a - * bad MAIL FROM, RCPT, or DATA input. - * @access private - * @return bool - */ - function SmtpSend($header, $body) { - include_once($this->PluginDir . 'class.smtp.php'); - $error = ''; - $bad_rcpt = array(); - - if(!$this->SmtpConnect()) { - return false; - } - - $smtp_from = ($this->Sender == '') ? $this->From : $this->Sender; - if(!$this->smtp->Mail($smtp_from)) { - $error = $this->Lang('from_failed') . $smtp_from; - $this->SetError($error); - $this->smtp->Reset(); - return false; - } - - /* Attempt to send attach all recipients */ - for($i = 0; $i < count($this->to); $i++) { - if(!$this->smtp->Recipient($this->to[$i][0])) { - $bad_rcpt[] = $this->to[$i][0]; - } - } - for($i = 0; $i < count($this->cc); $i++) { - if(!$this->smtp->Recipient($this->cc[$i][0])) { - $bad_rcpt[] = $this->cc[$i][0]; - } - } - for($i = 0; $i < count($this->bcc); $i++) { - if(!$this->smtp->Recipient($this->bcc[$i][0])) { - $bad_rcpt[] = $this->bcc[$i][0]; - } - } - - if(count($bad_rcpt) > 0) { // Create error message - for($i = 0; $i < count($bad_rcpt); $i++) { - if($i != 0) { - $error .= ', '; - } - $error .= $bad_rcpt[$i]; - } - $error = $this->Lang('recipients_failed') . $error; - $this->SetError($error); - $this->smtp->Reset(); - return false; - } - - if(!$this->smtp->Data($header . $body)) { - $this->SetError($this->Lang('data_not_accepted')); - $this->smtp->Reset(); - return false; - } - if($this->SMTPKeepAlive == true) { - $this->smtp->Reset(); - } else { - $this->SmtpClose(); - } - - return true; - } - - /** - * Initiates a connection to an SMTP server. Returns false if the - * operation failed. - * @access private - * @return bool - */ - function SmtpConnect() { - if($this->smtp == NULL) { - $this->smtp = new SMTP(); - } - - $this->smtp->do_debug = $this->SMTPDebug; - $hosts = explode(';', $this->Host); - $index = 0; - $connection = ($this->smtp->Connected()); - - /* Retry while there is no connection */ - while($index < count($hosts) && $connection == false) { - $hostinfo = array(); - if(eregi('^(.+):([0-9]+)$', $hosts[$index], $hostinfo)) { - $host = $hostinfo[1]; - $port = $hostinfo[2]; - } else { - $host = $hosts[$index]; - $port = $this->Port; - } - - if($this->smtp->Connect(((!empty($this->SMTPSecure))?$this->SMTPSecure.'://':'').$host, $port, $this->Timeout)) { - if ($this->Helo != '') { - $this->smtp->Hello($this->Helo); - } else { - $this->smtp->Hello($this->ServerHostname()); - } - - $connection = true; - if($this->SMTPAuth) { - if(!$this->smtp->Authenticate($this->Username, $this->Password)) { - $this->SetError($this->Lang('authenticate')); - $this->smtp->Reset(); - $connection = false; - } - } - } - $index++; - } - if(!$connection) { - $this->SetError($this->Lang('connect_host')); - } - - return $connection; - } - - /** - * Closes the active SMTP session if one exists. - * @return void - */ - function SmtpClose() { - if($this->smtp != NULL) { - if($this->smtp->Connected()) { - $this->smtp->Quit(); - $this->smtp->Close(); - } - } - } - - /** - * Sets the language for all class error messages. Returns false - * if it cannot load the language file. The default language type - * is English. - * @param string $lang_type Type of language (e.g. Portuguese: "br") - * @param string $lang_path Path to the language file directory - * @access public - * @return bool - */ - function SetLanguage($lang_type, $lang_path = 'language/') { - if(file_exists($lang_path.'phpmailer.lang-'.$lang_type.'.php')) { - include($lang_path.'phpmailer.lang-'.$lang_type.'.php'); - } elseif (file_exists($lang_path.'phpmailer.lang-en.php')) { - include($lang_path.'phpmailer.lang-en.php'); - } else { - $PHPMAILER_LANG = array(); - $PHPMAILER_LANG["provide_address"] = 'You must provide at least one ' . - $PHPMAILER_LANG["mailer_not_supported"] = ' mailer is not supported.'; - $PHPMAILER_LANG["execute"] = 'Could not execute: '; - $PHPMAILER_LANG["instantiate"] = 'Could not instantiate mail function.'; - $PHPMAILER_LANG["authenticate"] = 'SMTP Error: Could not authenticate.'; - $PHPMAILER_LANG["from_failed"] = 'The following From address failed: '; - $PHPMAILER_LANG["recipients_failed"] = 'SMTP Error: The following ' . - $PHPMAILER_LANG["data_not_accepted"] = 'SMTP Error: Data not accepted.'; - $PHPMAILER_LANG["connect_host"] = 'SMTP Error: Could not connect to SMTP host.'; - $PHPMAILER_LANG["file_access"] = 'Could not access file: '; - $PHPMAILER_LANG["file_open"] = 'File Error: Could not open file: '; - $PHPMAILER_LANG["encoding"] = 'Unknown encoding: '; - $PHPMAILER_LANG["signing"] = 'Signing Error: '; - } - $this->language = $PHPMAILER_LANG; - - return true; - } - - ///////////////////////////////////////////////// - // METHODS, MESSAGE CREATION - ///////////////////////////////////////////////// - - /** - * Creates recipient headers. - * @access private - * @return string - */ - function AddrAppend($type, $addr) { - $addr_str = $type . ': '; - $addr_str .= $this->AddrFormat($addr[0]); - if(count($addr) > 1) { - for($i = 1; $i < count($addr); $i++) { - $addr_str .= ', ' . $this->AddrFormat($addr[$i]); - } - } - $addr_str .= $this->LE; - - return $addr_str; - } - - /** - * Formats an address correctly. - * @access private - * @return string - */ - function AddrFormat($addr) { - if(empty($addr[1])) { - $formatted = $this->SecureHeader($addr[0]); - } else { - $formatted = $this->EncodeHeader($this->SecureHeader($addr[1]), 'phrase') . " <" . $this->SecureHeader($addr[0]) . ">"; - } - - return $formatted; - } - - /** - * Wraps message for use with mailers that do not - * automatically perform wrapping and for quoted-printable. - * Original written by philippe. - * @access private - * @return string - */ - function WrapText($message, $length, $qp_mode = false) { - $soft_break = ($qp_mode) ? sprintf(" =%s", $this->LE) : $this->LE; - // If utf-8 encoding is used, we will need to make sure we don't - // split multibyte characters when we wrap - $is_utf8 = (strtolower($this->CharSet) == "utf-8"); - - $message = $this->FixEOL($message); - if (substr($message, -1) == $this->LE) { - $message = substr($message, 0, -1); - } - - $line = explode($this->LE, $message); - $message = ''; - for ($i=0 ;$i < count($line); $i++) { - $line_part = explode(' ', $line[$i]); - $buf = ''; - for ($e = 0; $e $length)) { - $space_left = $length - strlen($buf) - 1; - if ($e != 0) { - if ($space_left > 20) { - $len = $space_left; - if ($is_utf8) { - $len = $this->UTF8CharBoundary($word, $len); - } elseif (substr($word, $len - 1, 1) == "=") { - $len--; - } elseif (substr($word, $len - 2, 1) == "=") { - $len -= 2; - } - $part = substr($word, 0, $len); - $word = substr($word, $len); - $buf .= ' ' . $part; - $message .= $buf . sprintf("=%s", $this->LE); - } else { - $message .= $buf . $soft_break; - } - $buf = ''; - } - while (strlen($word) > 0) { - $len = $length; - if ($is_utf8) { - $len = $this->UTF8CharBoundary($word, $len); - } elseif (substr($word, $len - 1, 1) == "=") { - $len--; - } elseif (substr($word, $len - 2, 1) == "=") { - $len -= 2; - } - $part = substr($word, 0, $len); - $word = substr($word, $len); - - if (strlen($word) > 0) { - $message .= $part . sprintf("=%s", $this->LE); - } else { - $buf = $part; - } - } - } else { - $buf_o = $buf; - $buf .= ($e == 0) ? $word : (' ' . $word); - - if (strlen($buf) > $length and $buf_o != '') { - $message .= $buf_o . $soft_break; - $buf = $word; - } - } - } - $message .= $buf . $this->LE; - } - - return $message; - } - - /** - * Finds last character boundary prior to maxLength in a utf-8 - * quoted (printable) encoded string. - * Original written by Colin Brown. - * @access private - * @param string $encodedText utf-8 QP text - * @param int $maxLength find last character boundary prior to this length - * @return int - */ - function UTF8CharBoundary($encodedText, $maxLength) { - $foundSplitPos = false; - $lookBack = 3; - while (!$foundSplitPos) { - $lastChunk = substr($encodedText, $maxLength - $lookBack, $lookBack); - $encodedCharPos = strpos($lastChunk, "="); - if ($encodedCharPos !== false) { - // Found start of encoded character byte within $lookBack block. - // Check the encoded byte value (the 2 chars after the '=') - $hex = substr($encodedText, $maxLength - $lookBack + $encodedCharPos + 1, 2); - $dec = hexdec($hex); - if ($dec < 128) { // Single byte character. - // If the encoded char was found at pos 0, it will fit - // otherwise reduce maxLength to start of the encoded char - $maxLength = ($encodedCharPos == 0) ? $maxLength : - $maxLength - ($lookBack - $encodedCharPos); - $foundSplitPos = true; - } elseif ($dec >= 192) { // First byte of a multi byte character - // Reduce maxLength to split at start of character - $maxLength = $maxLength - ($lookBack - $encodedCharPos); - $foundSplitPos = true; - } elseif ($dec < 192) { // Middle byte of a multi byte character, look further back - $lookBack += 3; - } - } else { - // No encoded character found - $foundSplitPos = true; - } - } - return $maxLength; - } - - /** - * Set the body wrapping. - * @access private - * @return void - */ - function SetWordWrap() { - if($this->WordWrap < 1) { - return; - } - - switch($this->message_type) { - case 'alt': - /* fall through */ - case 'alt_attachments': - $this->AltBody = $this->WrapText($this->AltBody, $this->WordWrap); - break; - default: - $this->Body = $this->WrapText($this->Body, $this->WordWrap); - break; - } - } - - /** - * Assembles message header. - * @access private - * @return string - */ - function CreateHeader() { - $result = ''; - - /* Set the boundaries */ - $uniq_id = md5(uniqid(time())); - $this->boundary[1] = 'b1_' . $uniq_id; - $this->boundary[2] = 'b2_' . $uniq_id; - - $result .= $this->HeaderLine('Date', $this->RFCDate()); - if($this->Sender == '') { - $result .= $this->HeaderLine('Return-Path', trim($this->From)); - } else { - $result .= $this->HeaderLine('Return-Path', trim($this->Sender)); - } - - /* To be created automatically by mail() */ - if($this->Mailer != 'mail') { - if(count($this->to) > 0) { - $result .= $this->AddrAppend('To', $this->to); - } elseif (count($this->cc) == 0) { - $result .= $this->HeaderLine('To', 'undisclosed-recipients:;'); - } - } - - $from = array(); - $from[0][0] = trim($this->From); - $from[0][1] = $this->FromName; - $result .= $this->AddrAppend('From', $from); - - /* sendmail and mail() extract Cc from the header before sending */ - if((($this->Mailer == 'sendmail') || ($this->Mailer == 'mail')) && (count($this->cc) > 0)) { - $result .= $this->AddrAppend('Cc', $this->cc); - } - - /* sendmail and mail() extract Bcc from the header before sending */ - if((($this->Mailer == 'sendmail') || ($this->Mailer == 'mail')) && (count($this->bcc) > 0)) { - $result .= $this->AddrAppend('Bcc', $this->bcc); - } - - if(count($this->ReplyTo) > 0) { - $result .= $this->AddrAppend('Reply-To', $this->ReplyTo); - } - - /* mail() sets the subject itself */ - if($this->Mailer != 'mail') { - $result .= $this->HeaderLine('Subject', $this->EncodeHeader($this->SecureHeader($this->Subject))); - } - - if($this->MessageID != '') { - $result .= $this->HeaderLine('Message-ID',$this->MessageID); - } else { - $result .= sprintf("Message-ID: <%s@%s>%s", $uniq_id, $this->ServerHostname(), $this->LE); - } - $result .= $this->HeaderLine('X-Priority', $this->Priority); - $result .= $this->HeaderLine('X-Mailer', 'PHPMailer (phpmailer.sourceforge.net) [version ' . $this->Version . ']'); - - if($this->ConfirmReadingTo != '') { - $result .= $this->HeaderLine('Disposition-Notification-To', '<' . trim($this->ConfirmReadingTo) . '>'); - } - - // Add custom headers - for($index = 0; $index < count($this->CustomHeader); $index++) { - $result .= $this->HeaderLine(trim($this->CustomHeader[$index][0]), $this->EncodeHeader(trim($this->CustomHeader[$index][1]))); - } - if (!$this->sign_key_file) { - $result .= $this->HeaderLine('MIME-Version', '1.0'); - $result .= $this->GetMailMIME(); - } - - return $result; - } - - /** - * Returns the message MIME. - * @access private - * @return string - */ - function GetMailMIME() { - $result = ''; - switch($this->message_type) { - case 'plain': - $result .= $this->HeaderLine('Content-Transfer-Encoding', $this->Encoding); - $result .= sprintf("Content-Type: %s; charset=\"%s\"", $this->ContentType, $this->CharSet); - break; - case 'attachments': - /* fall through */ - case 'alt_attachments': - if($this->InlineImageExists()){ - $result .= sprintf("Content-Type: %s;%s\ttype=\"text/html\";%s\tboundary=\"%s\"%s", 'multipart/related', $this->LE, $this->LE, $this->boundary[1], $this->LE); - } else { - $result .= $this->HeaderLine('Content-Type', 'multipart/mixed;'); - $result .= $this->TextLine("\tboundary=\"" . $this->boundary[1] . '"'); - } - break; - case 'alt': - $result .= $this->HeaderLine('Content-Type', 'multipart/alternative;'); - $result .= $this->TextLine("\tboundary=\"" . $this->boundary[1] . '"'); - break; - } - - if($this->Mailer != 'mail') { - $result .= $this->LE.$this->LE; - } - - return $result; - } - - /** - * Assembles the message body. Returns an empty string on failure. - * @access private - * @return string - */ - function CreateBody() { - $result = ''; - if ($this->sign_key_file) { - $result .= $this->GetMailMIME(); - } - - $this->SetWordWrap(); - - switch($this->message_type) { - case 'alt': - $result .= $this->GetBoundary($this->boundary[1], '', 'text/plain', ''); - $result .= $this->EncodeString($this->AltBody, $this->Encoding); - $result .= $this->LE.$this->LE; - $result .= $this->GetBoundary($this->boundary[1], '', 'text/html', ''); - $result .= $this->EncodeString($this->Body, $this->Encoding); - $result .= $this->LE.$this->LE; - $result .= $this->EndBoundary($this->boundary[1]); - break; - case 'plain': - $result .= $this->EncodeString($this->Body, $this->Encoding); - break; - case 'attachments': - $result .= $this->GetBoundary($this->boundary[1], '', '', ''); - $result .= $this->EncodeString($this->Body, $this->Encoding); - $result .= $this->LE; - $result .= $this->AttachAll(); - break; - case 'alt_attachments': - $result .= sprintf("--%s%s", $this->boundary[1], $this->LE); - $result .= sprintf("Content-Type: %s;%s" . "\tboundary=\"%s\"%s", 'multipart/alternative', $this->LE, $this->boundary[2], $this->LE.$this->LE); - $result .= $this->GetBoundary($this->boundary[2], '', 'text/plain', '') . $this->LE; // Create text body - $result .= $this->EncodeString($this->AltBody, $this->Encoding); - $result .= $this->LE.$this->LE; - $result .= $this->GetBoundary($this->boundary[2], '', 'text/html', '') . $this->LE; // Create the HTML body - $result .= $this->EncodeString($this->Body, $this->Encoding); - $result .= $this->LE.$this->LE; - $result .= $this->EndBoundary($this->boundary[2]); - $result .= $this->AttachAll(); - break; - } - - if($this->IsError()) { - $result = ''; - } else if ($this->sign_key_file) { - $file = tempnam("", "mail"); - $fp = fopen($file, "w"); - fwrite($fp, $result); - fclose($fp); - $signed = tempnam("", "signed"); - - if (@openssl_pkcs7_sign($file, $signed, "file://".$this->sign_cert_file, array("file://".$this->sign_key_file, $this->sign_key_pass), null)) { - $fp = fopen($signed, "r"); - $result = fread($fp, filesize($this->sign_key_file)); - $result = ''; - while(!feof($fp)){ - $result = $result . fread($fp, 1024); - } - fclose($fp); - } else { - $this->SetError($this->Lang("signing").openssl_error_string()); - $result = ''; - } - - unlink($file); - unlink($signed); - } - - return $result; - } - - /** - * Returns the start of a message boundary. - * @access private - */ - function GetBoundary($boundary, $charSet, $contentType, $encoding) { - $result = ''; - if($charSet == '') { - $charSet = $this->CharSet; - } - if($contentType == '') { - $contentType = $this->ContentType; - } - if($encoding == '') { - $encoding = $this->Encoding; - } - $result .= $this->TextLine('--' . $boundary); - $result .= sprintf("Content-Type: %s; charset = \"%s\"", $contentType, $charSet); - $result .= $this->LE; - $result .= $this->HeaderLine('Content-Transfer-Encoding', $encoding); - $result .= $this->LE; - - return $result; - } - - /** - * Returns the end of a message boundary. - * @access private - */ - function EndBoundary($boundary) { - return $this->LE . '--' . $boundary . '--' . $this->LE; - } - - /** - * Sets the message type. - * @access private - * @return void - */ - function SetMessageType() { - if(count($this->attachment) < 1 && strlen($this->AltBody) < 1) { - $this->message_type = 'plain'; - } else { - if(count($this->attachment) > 0) { - $this->message_type = 'attachments'; - } - if(strlen($this->AltBody) > 0 && count($this->attachment) < 1) { - $this->message_type = 'alt'; - } - if(strlen($this->AltBody) > 0 && count($this->attachment) > 0) { - $this->message_type = 'alt_attachments'; - } - } - } - - /* Returns a formatted header line. - * @access private - * @return string - */ - function HeaderLine($name, $value) { - return $name . ': ' . $value . $this->LE; - } - - /** - * Returns a formatted mail line. - * @access private - * @return string - */ - function TextLine($value) { - return $value . $this->LE; - } - - ///////////////////////////////////////////////// - // CLASS METHODS, ATTACHMENTS - ///////////////////////////////////////////////// - - /** - * Adds an attachment from a path on the filesystem. - * Returns false if the file could not be found - * or accessed. - * @param string $path Path to the attachment. - * @param string $name Overrides the attachment name. - * @param string $encoding File encoding (see $Encoding). - * @param string $type File extension (MIME) type. - * @return bool - */ - function AddAttachment($path, $name = '', $encoding = 'base64', $type = 'application/octet-stream') { - if(!@is_file($path)) { - $this->SetError($this->Lang('file_access') . $path); - return false; - } - - $filename = basename($path); - if($name == '') { - $name = $filename; - } - - $cur = count($this->attachment); - $this->attachment[$cur][0] = $path; - $this->attachment[$cur][1] = $filename; - $this->attachment[$cur][2] = $name; - $this->attachment[$cur][3] = $encoding; - $this->attachment[$cur][4] = $type; - $this->attachment[$cur][5] = false; // isStringAttachment - $this->attachment[$cur][6] = 'attachment'; - $this->attachment[$cur][7] = 0; - - return true; - } - - /** - * Attaches all fs, string, and binary attachments to the message. - * Returns an empty string on failure. - * @access private - * @return string - */ - function AttachAll() { - /* Return text of body */ - $mime = array(); - - /* Add all attachments */ - for($i = 0; $i < count($this->attachment); $i++) { - /* Check for string attachment */ - $bString = $this->attachment[$i][5]; - if ($bString) { - $string = $this->attachment[$i][0]; - } else { - $path = $this->attachment[$i][0]; - } - - $filename = $this->attachment[$i][1]; - $name = $this->attachment[$i][2]; - $encoding = $this->attachment[$i][3]; - $type = $this->attachment[$i][4]; - $disposition = $this->attachment[$i][6]; - $cid = $this->attachment[$i][7]; - - $mime[] = sprintf("--%s%s", $this->boundary[1], $this->LE); - $mime[] = sprintf("Content-Type: %s; name=\"%s\"%s", $type, $this->EncodeHeader($this->SecureHeader($name)), $this->LE); - $mime[] = sprintf("Content-Transfer-Encoding: %s%s", $encoding, $this->LE); - - if($disposition == 'inline') { - $mime[] = sprintf("Content-ID: <%s>%s", $cid, $this->LE); - } - - $mime[] = sprintf("Content-Disposition: %s; filename=\"%s\"%s", $disposition, $this->EncodeHeader($this->SecureHeader($name)), $this->LE.$this->LE); - - /* Encode as string attachment */ - if($bString) { - $mime[] = $this->EncodeString($string, $encoding); - if($this->IsError()) { - return ''; - } - $mime[] = $this->LE.$this->LE; - } else { - $mime[] = $this->EncodeFile($path, $encoding); - if($this->IsError()) { - return ''; - } - $mime[] = $this->LE.$this->LE; - } - } - - $mime[] = sprintf("--%s--%s", $this->boundary[1], $this->LE); - - return join('', $mime); - } - - /** - * Encodes attachment in requested format. Returns an - * empty string on failure. - * @access private - * @return string - */ - function EncodeFile ($path, $encoding = 'base64') { - if(!@$fd = fopen($path, 'rb')) { - $this->SetError($this->Lang('file_open') . $path); - return ''; - } - $magic_quotes = get_magic_quotes_runtime(); - set_magic_quotes_runtime(0); - $file_buffer = fread($fd, filesize($path)); - $file_buffer = $this->EncodeString($file_buffer, $encoding); - fclose($fd); - set_magic_quotes_runtime($magic_quotes); - - return $file_buffer; - } - - /** - * Encodes string to requested format. Returns an - * empty string on failure. - * @access private - * @return string - */ - function EncodeString ($str, $encoding = 'base64') { - $encoded = ''; - switch(strtolower($encoding)) { - case 'base64': - /* chunk_split is found in PHP >= 3.0.6 */ - $encoded = chunk_split(base64_encode($str), 76, $this->LE); - break; - case '7bit': - case '8bit': - $encoded = $this->FixEOL($str); - if (substr($encoded, -(strlen($this->LE))) != $this->LE) - $encoded .= $this->LE; - break; - case 'binary': - $encoded = $str; - break; - case 'quoted-printable': - $encoded = $this->EncodeQP($str); - break; - default: - $this->SetError($this->Lang('encoding') . $encoding); - break; - } - return $encoded; - } - - /** - * Encode a header string to best of Q, B, quoted or none. - * @access private - * @return string - */ - function EncodeHeader ($str, $position = 'text') { - $x = 0; - - switch (strtolower($position)) { - case 'phrase': - if (!preg_match('/[\200-\377]/', $str)) { - /* Can't use addslashes as we don't know what value has magic_quotes_sybase. */ - $encoded = addcslashes($str, "\0..\37\177\\\""); - if (($str == $encoded) && !preg_match('/[^A-Za-z0-9!#$%&\'*+\/=?^_`{|}~ -]/', $str)) { - return ($encoded); - } else { - return ("\"$encoded\""); - } - } - $x = preg_match_all('/[^\040\041\043-\133\135-\176]/', $str, $matches); - break; - case 'comment': - $x = preg_match_all('/[()"]/', $str, $matches); - /* Fall-through */ - case 'text': - default: - $x += preg_match_all('/[\000-\010\013\014\016-\037\177-\377]/', $str, $matches); - break; - } - - if ($x == 0) { - return ($str); - } - - $maxlen = 75 - 7 - strlen($this->CharSet); - /* Try to select the encoding which should produce the shortest output */ - if (strlen($str)/3 < $x) { - $encoding = 'B'; - if (function_exists('mb_strlen') && $this->HasMultiBytes($str)) { - // Use a custom function which correctly encodes and wraps long - // multibyte strings without breaking lines within a character - $encoded = $this->Base64EncodeWrapMB($str); - } else { - $encoded = base64_encode($str); - $maxlen -= $maxlen % 4; - $encoded = trim(chunk_split($encoded, $maxlen, "\n")); - } - } else { - $encoding = 'Q'; - $encoded = $this->EncodeQ($str, $position); - $encoded = $this->WrapText($encoded, $maxlen, true); - $encoded = str_replace('='.$this->LE, "\n", trim($encoded)); - } - - $encoded = preg_replace('/^(.*)$/m', " =?".$this->CharSet."?$encoding?\\1?=", $encoded); - $encoded = trim(str_replace("\n", $this->LE, $encoded)); - - return $encoded; - } - - /** - * Checks if a string contains multibyte characters. - * @access private - * @param string $str multi-byte text to wrap encode - * @return bool - */ - function HasMultiBytes($str) { - if (function_exists('mb_strlen')) { - return (strlen($str) > mb_strlen($str, $this->CharSet)); - } else { // Assume no multibytes (we can't handle without mbstring functions anyway) - return False; - } - } - - /** - * Correctly encodes and wraps long multibyte strings for mail headers - * without breaking lines within a character. - * Adapted from a function by paravoid at http://uk.php.net/manual/en/function.mb-encode-mimeheader.php - * @access private - * @param string $str multi-byte text to wrap encode - * @return string - */ - function Base64EncodeWrapMB($str) { - $start = "=?".$this->CharSet."?B?"; - $end = "?="; - $encoded = ""; - - $mb_length = mb_strlen($str, $this->CharSet); - // Each line must have length <= 75, including $start and $end - $length = 75 - strlen($start) - strlen($end); - // Average multi-byte ratio - $ratio = $mb_length / strlen($str); - // Base64 has a 4:3 ratio - $offset = $avgLength = floor($length * $ratio * .75); - - for ($i = 0; $i < $mb_length; $i += $offset) { - $lookBack = 0; - - do { - $offset = $avgLength - $lookBack; - $chunk = mb_substr($str, $i, $offset, $this->CharSet); - $chunk = base64_encode($chunk); - $lookBack++; - } - while (strlen($chunk) > $length); - - $encoded .= $chunk . $this->LE; - } - - // Chomp the last linefeed - $encoded = substr($encoded, 0, -strlen($this->LE)); - return $encoded; - } - - /** - * Encode string to quoted-printable. - * @access private - * @return string - */ - function EncodeQP( $input = '', $line_max = 76, $space_conv = false ) { - $hex = array('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'); - $lines = preg_split('/(?:\r\n|\r|\n)/', $input); - $eol = "\r\n"; - $escape = '='; - $output = ''; - while( list(, $line) = each($lines) ) { - $linlen = strlen($line); - $newline = ''; - for($i = 0; $i < $linlen; $i++) { - $c = substr( $line, $i, 1 ); - $dec = ord( $c ); - if ( ( $i == 0 ) && ( $dec == 46 ) ) { // convert first point in the line into =2E - $c = '=2E'; - } - if ( $dec == 32 ) { - if ( $i == ( $linlen - 1 ) ) { // convert space at eol only - $c = '=20'; - } else if ( $space_conv ) { - $c = '=20'; - } - } elseif ( ($dec == 61) || ($dec < 32 ) || ($dec > 126) ) { // always encode "\t", which is *not* required - $h2 = floor($dec/16); - $h1 = floor($dec%16); - $c = $escape.$hex[$h2].$hex[$h1]; - } - if ( (strlen($newline) + strlen($c)) >= $line_max ) { // CRLF is not counted - $output .= $newline.$escape.$eol; // soft line break; " =\r\n" is okay - $newline = ''; - // check if newline first character will be point or not - if ( $dec == 46 ) { - $c = '=2E'; - } - } - $newline .= $c; - } // end of for - $output .= $newline.$eol; - } // end of while - return $output; - } - - /** - * Encode string to q encoding. - * @access private - * @return string - */ - function EncodeQ ($str, $position = 'text') { - /* There should not be any EOL in the string */ - $encoded = preg_replace("[\r\n]", '', $str); - - switch (strtolower($position)) { - case 'phrase': - $encoded = preg_replace("/([^A-Za-z0-9!*+\/ -])/e", "'='.sprintf('%02X', ord('\\1'))", $encoded); - break; - case 'comment': - $encoded = preg_replace("/([\(\)\"])/e", "'='.sprintf('%02X', ord('\\1'))", $encoded); - case 'text': - default: - /* Replace every high ascii, control =, ? and _ characters */ - $encoded = preg_replace('/([\000-\011\013\014\016-\037\075\077\137\177-\377])/e', - "'='.sprintf('%02X', ord('\\1'))", $encoded); - break; - } - - /* Replace every spaces to _ (more readable than =20) */ - $encoded = str_replace(' ', '_', $encoded); - - return $encoded; - } - - /** - * Adds a string or binary attachment (non-filesystem) to the list. - * This method can be used to attach ascii or binary data, - * such as a BLOB record from a database. - * @param string $string String attachment data. - * @param string $filename Name of the attachment. - * @param string $encoding File encoding (see $Encoding). - * @param string $type File extension (MIME) type. - * @return void - */ - function AddStringAttachment($string, $filename, $encoding = 'base64', $type = 'application/octet-stream') { - /* Append to $attachment array */ - $cur = count($this->attachment); - $this->attachment[$cur][0] = $string; - $this->attachment[$cur][1] = $filename; - $this->attachment[$cur][2] = $filename; - $this->attachment[$cur][3] = $encoding; - $this->attachment[$cur][4] = $type; - $this->attachment[$cur][5] = true; // isString - $this->attachment[$cur][6] = 'attachment'; - $this->attachment[$cur][7] = 0; - } - - /** - * Adds an embedded attachment. This can include images, sounds, and - * just about any other document. Make sure to set the $type to an - * image type. For JPEG images use "image/jpeg" and for GIF images - * use "image/gif". - * @param string $path Path to the attachment. - * @param string $cid Content ID of the attachment. Use this to identify - * the Id for accessing the image in an HTML form. - * @param string $name Overrides the attachment name. - * @param string $encoding File encoding (see $Encoding). - * @param string $type File extension (MIME) type. - * @return bool - */ - function AddEmbeddedImage($path, $cid, $name = '', $encoding = 'base64', $type = 'application/octet-stream') { - - if(!@is_file($path)) { - $this->SetError($this->Lang('file_access') . $path); - return false; - } - - $filename = basename($path); - if($name == '') { - $name = $filename; - } - - /* Append to $attachment array */ - $cur = count($this->attachment); - $this->attachment[$cur][0] = $path; - $this->attachment[$cur][1] = $filename; - $this->attachment[$cur][2] = $name; - $this->attachment[$cur][3] = $encoding; - $this->attachment[$cur][4] = $type; - $this->attachment[$cur][5] = false; - $this->attachment[$cur][6] = 'inline'; - $this->attachment[$cur][7] = $cid; - - return true; - } - - /** - * Returns true if an inline attachment is present. - * @access private - * @return bool - */ - function InlineImageExists() { - $result = false; - for($i = 0; $i < count($this->attachment); $i++) { - if($this->attachment[$i][6] == 'inline') { - $result = true; - break; - } - } - - return $result; - } - - ///////////////////////////////////////////////// - // CLASS METHODS, MESSAGE RESET - ///////////////////////////////////////////////// - - /** - * Clears all recipients assigned in the TO array. Returns void. - * @return void - */ - function ClearAddresses() { - $this->to = array(); - } - - /** - * Clears all recipients assigned in the CC array. Returns void. - * @return void - */ - function ClearCCs() { - $this->cc = array(); - } - - /** - * Clears all recipients assigned in the BCC array. Returns void. - * @return void - */ - function ClearBCCs() { - $this->bcc = array(); - } - - /** - * Clears all recipients assigned in the ReplyTo array. Returns void. - * @return void - */ - function ClearReplyTos() { - $this->ReplyTo = array(); - } - - /** - * Clears all recipients assigned in the TO, CC and BCC - * array. Returns void. - * @return void - */ - function ClearAllRecipients() { - $this->to = array(); - $this->cc = array(); - $this->bcc = array(); - } - - /** - * Clears all previously set filesystem, string, and binary - * attachments. Returns void. - * @return void - */ - function ClearAttachments() { - $this->attachment = array(); - } - - /** - * Clears all custom headers. Returns void. - * @return void - */ - function ClearCustomHeaders() { - $this->CustomHeader = array(); - } - - ///////////////////////////////////////////////// - // CLASS METHODS, MISCELLANEOUS - ///////////////////////////////////////////////// - - /** - * Adds the error message to the error container. - * Returns void. - * @access private - * @return void - */ - function SetError($msg) { - $this->error_count++; - $this->ErrorInfo = $msg; - } - - /** - * Returns the proper RFC 822 formatted date. - * @access private - * @return string - */ - function RFCDate() { - $tz = date('Z'); - $tzs = ($tz < 0) ? '-' : '+'; - $tz = abs($tz); - $tz = (int)($tz/3600)*100 + ($tz%3600)/60; - $result = sprintf("%s %s%04d", date('D, j M Y H:i:s'), $tzs, $tz); - - return $result; - } - - /** - * Returns the appropriate server variable. Should work with both - * PHP 4.1.0+ as well as older versions. Returns an empty string - * if nothing is found. - * @access private - * @return mixed - */ - function ServerVar($varName) { - global $HTTP_SERVER_VARS; - global $HTTP_ENV_VARS; - - if(!isset($_SERVER)) { - $_SERVER = $HTTP_SERVER_VARS; - if(!isset($_SERVER['REMOTE_ADDR'])) { - $_SERVER = $HTTP_ENV_VARS; // must be Apache - } - } - - if(isset($_SERVER[$varName])) { - return $_SERVER[$varName]; - } else { - return ''; - } - } - - /** - * Returns the server hostname or 'localhost.localdomain' if unknown. - * @access private - * @return string - */ - function ServerHostname() { - if ($this->Hostname != '') { - $result = $this->Hostname; - } elseif ($this->ServerVar('SERVER_NAME') != '') { - $result = $this->ServerVar('SERVER_NAME'); - } else { - $result = 'localhost.localdomain'; - } - - return $result; - } - - /** - * Returns a message in the appropriate language. - * @access private - * @return string - */ - function Lang($key) { - if(count($this->language) < 1) { - $this->SetLanguage('en'); // set the default language - } - - if(isset($this->language[$key])) { - return $this->language[$key]; - } else { - return 'Language string failed to load: ' . $key; - } - } - - /** - * Returns true if an error occurred. - * @return bool - */ - function IsError() { - return ($this->error_count > 0); - } - - /** - * Changes every end of line from CR or LF to CRLF. - * @access private - * @return string - */ - function FixEOL($str) { - $str = str_replace("\r\n", "\n", $str); - $str = str_replace("\r", "\n", $str); - $str = str_replace("\n", $this->LE, $str); - return $str; - } - - /** - * Adds a custom header. - * @return void - */ - function AddCustomHeader($custom_header) { - $this->CustomHeader[] = explode(':', $custom_header, 2); - } - - /** - * Evaluates the message and returns modifications for inline images and backgrounds - * @access public - * @return $message - */ - function MsgHTML($message,$basedir='') { - preg_match_all("/(src|background)=\"(.*)\"/Ui", $message, $images); - if(isset($images[2])) { - foreach($images[2] as $i => $url) { - // do not change urls for absolute images (thanks to corvuscorax) - if (!preg_match('/^[A-z][A-z]*:\/\//',$url)) { - $filename = basename($url); - $directory = dirname($url); - ($directory == '.')?$directory='':''; - $cid = 'cid:' . md5($filename); - $fileParts = split("\.", $filename); - $ext = $fileParts[1]; - $mimeType = $this->_mime_types($ext); - if ( strlen($basedir) > 1 && substr($basedir,-1) != '/') { $basedir .= '/'; } - if ( strlen($directory) > 1 && substr($directory,-1) != '/') { $directory .= '/'; } - if ( $this->AddEmbeddedImage($basedir.$directory.$filename, md5($filename), $filename, 'base64',$mimeType) ) { - $message = preg_replace("/".$images[1][$i]."=\"".preg_quote($url, '/')."\"/Ui", $images[1][$i]."=\"".$cid."\"", $message); - } - } - } - } - $this->IsHTML(true); - $this->Body = $message; - $textMsg = trim(strip_tags(preg_replace('/<(head|title|style|script)[^>]*>.*?<\/\\1>/s','',$message))); - if ( !empty($textMsg) && empty($this->AltBody) ) { - $this->AltBody = html_entity_decode($textMsg); - } - if ( empty($this->AltBody) ) { - $this->AltBody = 'To view this email message, open the email in with HTML compatibility!' . "\n\n"; - } - } - - /** - * Gets the mime type of the embedded or inline image - * @access private - * @return mime type of ext - */ - function _mime_types($ext = '') { - $mimes = array( - 'ai' => 'application/postscript', - 'aif' => 'audio/x-aiff', - 'aifc' => 'audio/x-aiff', - 'aiff' => 'audio/x-aiff', - 'avi' => 'video/x-msvideo', - 'bin' => 'application/macbinary', - 'bmp' => 'image/bmp', - 'class' => 'application/octet-stream', - 'cpt' => 'application/mac-compactpro', - 'css' => 'text/css', - 'dcr' => 'application/x-director', - 'dir' => 'application/x-director', - 'dll' => 'application/octet-stream', - 'dms' => 'application/octet-stream', - 'doc' => 'application/msword', - 'dvi' => 'application/x-dvi', - 'dxr' => 'application/x-director', - 'eml' => 'message/rfc822', - 'eps' => 'application/postscript', - 'exe' => 'application/octet-stream', - 'gif' => 'image/gif', - 'gtar' => 'application/x-gtar', - 'htm' => 'text/html', - 'html' => 'text/html', - 'jpe' => 'image/jpeg', - 'jpeg' => 'image/jpeg', - 'jpg' => 'image/jpeg', - 'hqx' => 'application/mac-binhex40', - 'js' => 'application/x-javascript', - 'lha' => 'application/octet-stream', - 'log' => 'text/plain', - 'lzh' => 'application/octet-stream', - 'mid' => 'audio/midi', - 'midi' => 'audio/midi', - 'mif' => 'application/vnd.mif', - 'mov' => 'video/quicktime', - 'movie' => 'video/x-sgi-movie', - 'mp2' => 'audio/mpeg', - 'mp3' => 'audio/mpeg', - 'mpe' => 'video/mpeg', - 'mpeg' => 'video/mpeg', - 'mpg' => 'video/mpeg', - 'mpga' => 'audio/mpeg', - 'oda' => 'application/oda', - 'pdf' => 'application/pdf', - 'php' => 'application/x-httpd-php', - 'php3' => 'application/x-httpd-php', - 'php4' => 'application/x-httpd-php', - 'phps' => 'application/x-httpd-php-source', - 'phtml' => 'application/x-httpd-php', - 'png' => 'image/png', - 'ppt' => 'application/vnd.ms-powerpoint', - 'ps' => 'application/postscript', - 'psd' => 'application/octet-stream', - 'qt' => 'video/quicktime', - 'ra' => 'audio/x-realaudio', - 'ram' => 'audio/x-pn-realaudio', - 'rm' => 'audio/x-pn-realaudio', - 'rpm' => 'audio/x-pn-realaudio-plugin', - 'rtf' => 'text/rtf', - 'rtx' => 'text/richtext', - 'rv' => 'video/vnd.rn-realvideo', - 'sea' => 'application/octet-stream', - 'shtml' => 'text/html', - 'sit' => 'application/x-stuffit', - 'so' => 'application/octet-stream', - 'smi' => 'application/smil', - 'smil' => 'application/smil', - 'swf' => 'application/x-shockwave-flash', - 'tar' => 'application/x-tar', - 'text' => 'text/plain', - 'txt' => 'text/plain', - 'tgz' => 'application/x-tar', - 'tif' => 'image/tiff', - 'tiff' => 'image/tiff', - 'wav' => 'audio/x-wav', - 'wbxml' => 'application/vnd.wap.wbxml', - 'wmlc' => 'application/vnd.wap.wmlc', - 'word' => 'application/msword', - 'xht' => 'application/xhtml+xml', - 'xhtml' => 'application/xhtml+xml', - 'xl' => 'application/excel', - 'xls' => 'application/vnd.ms-excel', - 'xml' => 'text/xml', - 'xsl' => 'text/xml', - 'zip' => 'application/zip' - ); - return ( ! isset($mimes[strtolower($ext)])) ? 'application/octet-stream' : $mimes[strtolower($ext)]; - } - - /** - * Set (or reset) Class Objects (variables) - * - * Usage Example: - * $page->set('X-Priority', '3'); - * - * @access public - * @param string $name Parameter Name - * @param mixed $value Parameter Value - * NOTE: will not work with arrays, there are no arrays to set/reset - */ - function set ( $name, $value = '' ) { - if ( isset($this->$name) ) { - $this->$name = $value; - } else { - $this->SetError('Cannot set or reset variable ' . $name); - return false; - } - } - - /** - * Read a file from a supplied filename and return it. - * - * @access public - * @param string $filename Parameter File Name - */ - function getFile($filename) { - $return = ''; - if ($fp = fopen($filename, 'rb')) { - while (!feof($fp)) { - $return .= fread($fp, 1024); - } - fclose($fp); - return $return; - } else { - return false; - } - } - - /** - * Strips newlines to prevent header injection. - * @access private - * @param string $str String - * @return string - */ - function SecureHeader($str) { - $str = trim($str); - $str = str_replace("\r", "", $str); - $str = str_replace("\n", "", $str); - return $str; - } - - /** - * Set the private key file and password to sign the message. - * - * @access public - * @param string $key_filename Parameter File Name - * @param string $key_pass Password for private key - */ - function Sign($cert_filename, $key_filename, $key_pass) { - $this->sign_cert_file = $cert_filename; - $this->sign_key_file = $key_filename; - $this->sign_key_pass = $key_pass; - } - -} - -?> --- a/owa/includes/PHPMailer_v2.0.3/class.pop3.php +++ /dev/null @@ -1,437 +1,1 @@ -pop_conn = 0; - $this->connected = false; - $this->error = null; - } - - /** - * Combination of public events - connect, login, disconnect - * - * @param string $host - * @param integer $port - * @param integer $tval - * @param string $username - * @param string $password - */ - function Authorise ($host, $port = false, $tval = false, $username, $password, $debug_level = 0) - { - $this->host = $host; - - // If no port value is passed, retrieve it - if ($port == false) - { - $this->port = $this->POP3_PORT; - } - else - { - $this->port = $port; - } - - // If no port value is passed, retrieve it - if ($tval == false) - { - $this->tval = $this->POP3_TIMEOUT; - } - else - { - $this->tval = $tval; - } - - $this->do_debug = $debug_level; - $this->username = $username; - $this->password = $password; - - // Refresh the error log - $this->error = null; - - // Connect - $result = $this->Connect($this->host, $this->port, $this->tval); - - if ($result) - { - $login_result = $this->Login($this->username, $this->password); - - if ($login_result) - { - $this->Disconnect(); - - return true; - } - - } - - // We need to disconnect regardless if the login succeeded - $this->Disconnect(); - - return false; - } - - /** - * Connect to the POP3 server - * - * @param string $host - * @param integer $port - * @param integer $tval - * @return boolean - */ - function Connect ($host, $port = false, $tval = 30) - { - // Are we already connected? - if ($this->connected) - { - return true; - } - - /* - On Windows this will raise a PHP Warning error if the hostname doesn't exist. - Rather than supress it with @fsockopen, let's capture it cleanly instead - */ - - set_error_handler(array(&$this, 'catchWarning')); - - // Connect to the POP3 server - $this->pop_conn = fsockopen($host, // POP3 Host - $port, // Port # - $errno, // Error Number - $errstr, // Error Message - $tval); // Timeout (seconds) - - // Restore the error handler - restore_error_handler(); - - // Does the Error Log now contain anything? - if ($this->error && $this->do_debug >= 1) - { - $this->displayErrors(); - } - - // Did we connect? - if ($this->pop_conn == false) - { - // It would appear not... - $this->error = array( - 'error' => "Failed to connect to server $host on port $port", - 'errno' => $errno, - 'errstr' => $errstr - ); - - if ($this->do_debug >= 1) - { - $this->displayErrors(); - } - - return false; - } - - // Increase the stream time-out - - // Check for PHP 4.3.0 or later - if (version_compare(phpversion(), '4.3.0', 'ge')) - { - stream_set_timeout($this->pop_conn, $tval, 0); - } - else - { - // Does not work on Windows - if (substr(PHP_OS, 0, 3) !== 'WIN') - { - socket_set_timeout($this->pop_conn, $tval, 0); - } - } - - // Get the POP3 server response - $pop3_response = $this->getResponse(); - - // Check for the +OK - if ($this->checkResponse($pop3_response)) - { - // The connection is established and the POP3 server is talking - $this->connected = true; - return true; - } - - } - - /** - * Login to the POP3 server (does not support APOP yet) - * - * @param string $username - * @param string $password - * @return boolean - */ - function Login ($username = '', $password = '') - { - if ($this->connected == false) - { - $this->error = 'Not connected to POP3 server'; - - if ($this->do_debug >= 1) - { - $this->displayErrors(); - } - } - - if (empty($username)) - { - $username = $this->username; - } - - if (empty($password)) - { - $password = $this->password; - } - - $pop_username = "USER $username" . $this->CRLF; - $pop_password = "PASS $password" . $this->CRLF; - - // Send the Username - $this->sendString($pop_username); - $pop3_response = $this->getResponse(); - - if ($this->checkResponse($pop3_response)) - { - // Send the Password - $this->sendString($pop_password); - $pop3_response = $this->getResponse(); - - if ($this->checkResponse($pop3_response)) - { - return true; - } - else - { - return false; - } - } - else - { - return false; - } - } - - /** - * Disconnect from the POP3 server - */ - function Disconnect () - { - $this->sendString('QUIT'); - - fclose($this->pop_conn); - } - - /* - --------------- - Private Methods - --------------- - */ - - /** - * Get the socket response back. - * $size is the maximum number of bytes to retrieve - * - * @param integer $size - * @return string - */ - function getResponse ($size = 128) - { - $pop3_response = fgets($this->pop_conn, $size); - - return $pop3_response; - } - - /** - * Send a string down the open socket connection to the POP3 server - * - * @param string $string - * @return integer - */ - function sendString ($string) - { - $bytes_sent = fwrite($this->pop_conn, $string, strlen($string)); - - return $bytes_sent; - - } - - /** - * Checks the POP3 server response for +OK or -ERR - * - * @param string $string - * @return boolean - */ - function checkResponse ($string) - { - if (substr($string, 0, 3) !== '+OK') - { - $this->error = array( - 'error' => "Server reported an error: $string", - 'errno' => 0, - 'errstr' => '' - ); - - if ($this->do_debug >= 1) - { - $this->displayErrors(); - } - - return false; - } - else - { - return true; - } - - } - - /** - * If debug is enabled, display the error message array - * - */ - function displayErrors () - { - echo '

';
-
-      foreach ($this->error as $single_error)
-    {
-        print_r($single_error);
-    }
-
-      echo '
'; - } - - /** - * Takes over from PHP for the socket warning handler - * - * @param integer $errno - * @param string $errstr - * @param string $errfile - * @param integer $errline - */ - function catchWarning ($errno, $errstr, $errfile, $errline) - { - $this->error[] = array( - 'error' => "Connecting to the POP3 server raised a PHP warning: ", - 'errno' => $errno, - 'errstr' => $errstr - ); - } - - // End of class -} -?> - --- a/owa/includes/PHPMailer_v2.0.3/class.smtp.php +++ /dev/null @@ -1,1063 +1,1 @@ -smtp_conn = 0; - $this->error = null; - $this->helo_rply = null; - - $this->do_debug = 0; - } - - /************************************************************* - * CONNECTION FUNCTIONS * - ***********************************************************/ - - /** - * Connect to the server specified on the port specified. - * If the port is not specified use the default SMTP_PORT. - * If tval is specified then a connection will try and be - * established with the server for that number of seconds. - * If tval is not specified the default is 30 seconds to - * try on the connection. - * - * SMTP CODE SUCCESS: 220 - * SMTP CODE FAILURE: 421 - * @access public - * @return bool - */ - function Connect($host,$port=0,$tval=30) { - # set the error val to null so there is no confusion - $this->error = null; - - # make sure we are __not__ connected - if($this->connected()) { - # ok we are connected! what should we do? - # for now we will just give an error saying we - # are already connected - $this->error = array("error" => "Already connected to a server"); - return false; - } - - if(empty($port)) { - $port = $this->SMTP_PORT; - } - - #connect to the smtp server - $this->smtp_conn = fsockopen($host, # the host of the server - $port, # the port to use - $errno, # error number if any - $errstr, # error message if any - $tval); # give up after ? secs - # verify we connected properly - if(empty($this->smtp_conn)) { - $this->error = array("error" => "Failed to connect to server", - "errno" => $errno, - "errstr" => $errstr); - if($this->do_debug >= 1) { - echo "SMTP -> ERROR: " . $this->error["error"] . - ": $errstr ($errno)" . $this->CRLF; - } - return false; - } - - # sometimes the SMTP server takes a little longer to respond - # so we will give it a longer timeout for the first read - // Windows still does not have support for this timeout function - if(substr(PHP_OS, 0, 3) != "WIN") - socket_set_timeout($this->smtp_conn, $tval, 0); - - # get any announcement stuff - $announce = $this->get_lines(); - - # set the timeout of any socket functions at 1/10 of a second - //if(function_exists("socket_set_timeout")) - // socket_set_timeout($this->smtp_conn, 0, 100000); - - if($this->do_debug >= 2) { - echo "SMTP -> FROM SERVER:" . $this->CRLF . $announce; - } - - return true; - } - - /** - * Performs SMTP authentication. Must be run after running the - * Hello() method. Returns true if successfully authenticated. - * @access public - * @return bool - */ - function Authenticate($username, $password) { - // Start authentication - fputs($this->smtp_conn,"AUTH LOGIN" . $this->CRLF); - - $rply = $this->get_lines(); - $code = substr($rply,0,3); - - if($code != 334) { - $this->error = - array("error" => "AUTH not accepted from server", - "smtp_code" => $code, - "smtp_msg" => substr($rply,4)); - if($this->do_debug >= 1) { - echo "SMTP -> ERROR: " . $this->error["error"] . - ": " . $rply . $this->CRLF; - } - return false; - } - - // Send encoded username - fputs($this->smtp_conn, base64_encode($username) . $this->CRLF); - - $rply = $this->get_lines(); - $code = substr($rply,0,3); - - if($code != 334) { - $this->error = - array("error" => "Username not accepted from server", - "smtp_code" => $code, - "smtp_msg" => substr($rply,4)); - if($this->do_debug >= 1) { - echo "SMTP -> ERROR: " . $this->error["error"] . - ": " . $rply . $this->CRLF; - } - return false; - } - - // Send encoded password - fputs($this->smtp_conn, base64_encode($password) . $this->CRLF); - - $rply = $this->get_lines(); - $code = substr($rply,0,3); - - if($code != 235) { - $this->error = - array("error" => "Password not accepted from server", - "smtp_code" => $code, - "smtp_msg" => substr($rply,4)); - if($this->do_debug >= 1) { - echo "SMTP -> ERROR: " . $this->error["error"] . - ": " . $rply . $this->CRLF; - } - return false; - } - - return true; - } - - /** - * Returns true if connected to a server otherwise false - * @access private - * @return bool - */ - function Connected() { - if(!empty($this->smtp_conn)) { - $sock_status = socket_get_status($this->smtp_conn); - if($sock_status["eof"]) { - # hmm this is an odd situation... the socket is - # valid but we are not connected anymore - if($this->do_debug >= 1) { - echo "SMTP -> NOTICE:" . $this->CRLF . - "EOF caught while checking if connected"; - } - $this->Close(); - return false; - } - return true; # everything looks good - } - return false; - } - - /** - * Closes the socket and cleans up the state of the class. - * It is not considered good to use this function without - * first trying to use QUIT. - * @access public - * @return void - */ - function Close() { - $this->error = null; # so there is no confusion - $this->helo_rply = null; - if(!empty($this->smtp_conn)) { - # close the connection and cleanup - fclose($this->smtp_conn); - $this->smtp_conn = 0; - } - } - - /*************************************************************** - * SMTP COMMANDS * - *************************************************************/ - - /** - * Issues a data command and sends the msg_data to the server - * finializing the mail transaction. $msg_data is the message - * that is to be send with the headers. Each header needs to be - * on a single line followed by a with the message headers - * and the message body being seperated by and additional . - * - * Implements rfc 821: DATA - * - * SMTP CODE INTERMEDIATE: 354 - * [data] - * . - * SMTP CODE SUCCESS: 250 - * SMTP CODE FAILURE: 552,554,451,452 - * SMTP CODE FAILURE: 451,554 - * SMTP CODE ERROR : 500,501,503,421 - * @access public - * @return bool - */ - function Data($msg_data) { - $this->error = null; # so no confusion is caused - - if(!$this->connected()) { - $this->error = array( - "error" => "Called Data() without being connected"); - return false; - } - - fputs($this->smtp_conn,"DATA" . $this->CRLF); - - $rply = $this->get_lines(); - $code = substr($rply,0,3); - - if($this->do_debug >= 2) { - echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply; - } - - if($code != 354) { - $this->error = - array("error" => "DATA command not accepted from server", - "smtp_code" => $code, - "smtp_msg" => substr($rply,4)); - if($this->do_debug >= 1) { - echo "SMTP -> ERROR: " . $this->error["error"] . - ": " . $rply . $this->CRLF; - } - return false; - } - - # the server is ready to accept data! - # according to rfc 821 we should not send more than 1000 - # including the CRLF - # characters on a single line so we will break the data up - # into lines by \r and/or \n then if needed we will break - # each of those into smaller lines to fit within the limit. - # in addition we will be looking for lines that start with - # a period '.' and append and additional period '.' to that - # line. NOTE: this does not count towards are limit. - - # normalize the line breaks so we know the explode works - $msg_data = str_replace("\r\n","\n",$msg_data); - $msg_data = str_replace("\r","\n",$msg_data); - $lines = explode("\n",$msg_data); - - # we need to find a good way to determine is headers are - # in the msg_data or if it is a straight msg body - # currently I am assuming rfc 822 definitions of msg headers - # and if the first field of the first line (':' sperated) - # does not contain a space then it _should_ be a header - # and we can process all lines before a blank "" line as - # headers. - $field = substr($lines[0],0,strpos($lines[0],":")); - $in_headers = false; - if(!empty($field) && !strstr($field," ")) { - $in_headers = true; - } - - $max_line_length = 998; # used below; set here for ease in change - - while(list(,$line) = @each($lines)) { - $lines_out = null; - if($line == "" && $in_headers) { - $in_headers = false; - } - # ok we need to break this line up into several - # smaller lines - while(strlen($line) > $max_line_length) { - $pos = strrpos(substr($line,0,$max_line_length)," "); - - # Patch to fix DOS attack - if(!$pos) { - $pos = $max_line_length - 1; - } - - $lines_out[] = substr($line,0,$pos); - $line = substr($line,$pos + 1); - # if we are processing headers we need to - # add a LWSP-char to the front of the new line - # rfc 822 on long msg headers - if($in_headers) { - $line = "\t" . $line; - } - } - $lines_out[] = $line; - - # now send the lines to the server - while(list(,$line_out) = @each($lines_out)) { - if(strlen($line_out) > 0) - { - if(substr($line_out, 0, 1) == ".") { - $line_out = "." . $line_out; - } - } - fputs($this->smtp_conn,$line_out . $this->CRLF); - } - } - - # ok all the message data has been sent so lets get this - # over with aleady - fputs($this->smtp_conn, $this->CRLF . "." . $this->CRLF); - - $rply = $this->get_lines(); - $code = substr($rply,0,3); - - if($this->do_debug >= 2) { - echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply; - } - - if($code != 250) { - $this->error = - array("error" => "DATA not accepted from server", - "smtp_code" => $code, - "smtp_msg" => substr($rply,4)); - if($this->do_debug >= 1) { - echo "SMTP -> ERROR: " . $this->error["error"] . - ": " . $rply . $this->CRLF; - } - return false; - } - return true; - } - - /** - * Expand takes the name and asks the server to list all the - * people who are members of the _list_. Expand will return - * back and array of the result or false if an error occurs. - * Each value in the array returned has the format of: - * [ ] - * The definition of is defined in rfc 821 - * - * Implements rfc 821: EXPN - * - * SMTP CODE SUCCESS: 250 - * SMTP CODE FAILURE: 550 - * SMTP CODE ERROR : 500,501,502,504,421 - * @access public - * @return string array - */ - function Expand($name) { - $this->error = null; # so no confusion is caused - - if(!$this->connected()) { - $this->error = array( - "error" => "Called Expand() without being connected"); - return false; - } - - fputs($this->smtp_conn,"EXPN " . $name . $this->CRLF); - - $rply = $this->get_lines(); - $code = substr($rply,0,3); - - if($this->do_debug >= 2) { - echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply; - } - - if($code != 250) { - $this->error = - array("error" => "EXPN not accepted from server", - "smtp_code" => $code, - "smtp_msg" => substr($rply,4)); - if($this->do_debug >= 1) { - echo "SMTP -> ERROR: " . $this->error["error"] . - ": " . $rply . $this->CRLF; - } - return false; - } - - # parse the reply and place in our array to return to user - $entries = explode($this->CRLF,$rply); - while(list(,$l) = @each($entries)) { - $list[] = substr($l,4); - } - - return $list; - } - - /** - * Sends the HELO command to the smtp server. - * This makes sure that we and the server are in - * the same known state. - * - * Implements from rfc 821: HELO - * - * SMTP CODE SUCCESS: 250 - * SMTP CODE ERROR : 500, 501, 504, 421 - * @access public - * @return bool - */ - function Hello($host="") { - $this->error = null; # so no confusion is caused - - if(!$this->connected()) { - $this->error = array( - "error" => "Called Hello() without being connected"); - return false; - } - - # if a hostname for the HELO was not specified determine - # a suitable one to send - if(empty($host)) { - # we need to determine some sort of appopiate default - # to send to the server - $host = "localhost"; - } - - // Send extended hello first (RFC 2821) - if(!$this->SendHello("EHLO", $host)) - { - if(!$this->SendHello("HELO", $host)) - return false; - } - - return true; - } - - /** - * Sends a HELO/EHLO command. - * @access private - * @return bool - */ - function SendHello($hello, $host) { - fputs($this->smtp_conn, $hello . " " . $host . $this->CRLF); - - $rply = $this->get_lines(); - $code = substr($rply,0,3); - - if($this->do_debug >= 2) { - echo "SMTP -> FROM SERVER: " . $this->CRLF . $rply; - } - - if($code != 250) { - $this->error = - array("error" => $hello . " not accepted from server", - "smtp_code" => $code, - "smtp_msg" => substr($rply,4)); - if($this->do_debug >= 1) { - echo "SMTP -> ERROR: " . $this->error["error"] . - ": " . $rply . $this->CRLF; - } - return false; - } - - $this->helo_rply = $rply; - - return true; - } - - /** - * Gets help information on the keyword specified. If the keyword - * is not specified then returns generic help, ussually contianing - * A list of keywords that help is available on. This function - * returns the results back to the user. It is up to the user to - * handle the returned data. If an error occurs then false is - * returned with $this->error set appropiately. - * - * Implements rfc 821: HELP [ ] - * - * SMTP CODE SUCCESS: 211,214 - * SMTP CODE ERROR : 500,501,502,504,421 - * @access public - * @return string - */ - function Help($keyword="") { - $this->error = null; # to avoid confusion - - if(!$this->connected()) { - $this->error = array( - "error" => "Called Help() without being connected"); - return false; - } - - $extra = ""; - if(!empty($keyword)) { - $extra = " " . $keyword; - } - - fputs($this->smtp_conn,"HELP" . $extra . $this->CRLF); - - $rply = $this->get_lines(); - $code = substr($rply,0,3); - - if($this->do_debug >= 2) { - echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply; - } - - if($code != 211 && $code != 214) { - $this->error = - array("error" => "HELP not accepted from server", - "smtp_code" => $code, - "smtp_msg" => substr($rply,4)); - if($this->do_debug >= 1) { - echo "SMTP -> ERROR: " . $this->error["error"] . - ": " . $rply . $this->CRLF; - } - return false; - } - - return $rply; - } - - /** - * Starts a mail transaction from the email address specified in - * $from. Returns true if successful or false otherwise. If True - * the mail transaction is started and then one or more Recipient - * commands may be called followed by a Data command. - * - * Implements rfc 821: MAIL FROM: - * - * SMTP CODE SUCCESS: 250 - * SMTP CODE SUCCESS: 552,451,452 - * SMTP CODE SUCCESS: 500,501,421 - * @access public - * @return bool - */ - function Mail($from) { - $this->error = null; # so no confusion is caused - - if(!$this->connected()) { - $this->error = array( - "error" => "Called Mail() without being connected"); - return false; - } - - $useVerp = ($this->do_verp ? "XVERP" : ""); - fputs($this->smtp_conn,"MAIL FROM:<" . $from . ">" . $useVerp . $this->CRLF); - - $rply = $this->get_lines(); - $code = substr($rply,0,3); - - if($this->do_debug >= 2) { - echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply; - } - - if($code != 250) { - $this->error = - array("error" => "MAIL not accepted from server", - "smtp_code" => $code, - "smtp_msg" => substr($rply,4)); - if($this->do_debug >= 1) { - echo "SMTP -> ERROR: " . $this->error["error"] . - ": " . $rply . $this->CRLF; - } - return false; - } - return true; - } - - /** - * Sends the command NOOP to the SMTP server. - * - * Implements from rfc 821: NOOP - * - * SMTP CODE SUCCESS: 250 - * SMTP CODE ERROR : 500, 421 - * @access public - * @return bool - */ - function Noop() { - $this->error = null; # so no confusion is caused - - if(!$this->connected()) { - $this->error = array( - "error" => "Called Noop() without being connected"); - return false; - } - - fputs($this->smtp_conn,"NOOP" . $this->CRLF); - - $rply = $this->get_lines(); - $code = substr($rply,0,3); - - if($this->do_debug >= 2) { - echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply; - } - - if($code != 250) { - $this->error = - array("error" => "NOOP not accepted from server", - "smtp_code" => $code, - "smtp_msg" => substr($rply,4)); - if($this->do_debug >= 1) { - echo "SMTP -> ERROR: " . $this->error["error"] . - ": " . $rply . $this->CRLF; - } - return false; - } - return true; - } - - /** - * Sends the quit command to the server and then closes the socket - * if there is no error or the $close_on_error argument is true. - * - * Implements from rfc 821: QUIT - * - * SMTP CODE SUCCESS: 221 - * SMTP CODE ERROR : 500 - * @access public - * @return bool - */ - function Quit($close_on_error=true) { - $this->error = null; # so there is no confusion - - if(!$this->connected()) { - $this->error = array( - "error" => "Called Quit() without being connected"); - return false; - } - - # send the quit command to the server - fputs($this->smtp_conn,"quit" . $this->CRLF); - - # get any good-bye messages - $byemsg = $this->get_lines(); - - if($this->do_debug >= 2) { - echo "SMTP -> FROM SERVER:" . $this->CRLF . $byemsg; - } - - $rval = true; - $e = null; - - $code = substr($byemsg,0,3); - if($code != 221) { - # use e as a tmp var cause Close will overwrite $this->error - $e = array("error" => "SMTP server rejected quit command", - "smtp_code" => $code, - "smtp_rply" => substr($byemsg,4)); - $rval = false; - if($this->do_debug >= 1) { - echo "SMTP -> ERROR: " . $e["error"] . ": " . - $byemsg . $this->CRLF; - } - } - - if(empty($e) || $close_on_error) { - $this->Close(); - } - - return $rval; - } - - /** - * Sends the command RCPT to the SMTP server with the TO: argument of $to. - * Returns true if the recipient was accepted false if it was rejected. - * - * Implements from rfc 821: RCPT TO: - * - * SMTP CODE SUCCESS: 250,251 - * SMTP CODE FAILURE: 550,551,552,553,450,451,452 - * SMTP CODE ERROR : 500,501,503,421 - * @access public - * @return bool - */ - function Recipient($to) { - $this->error = null; # so no confusion is caused - - if(!$this->connected()) { - $this->error = array( - "error" => "Called Recipient() without being connected"); - return false; - } - - fputs($this->smtp_conn,"RCPT TO:<" . $to . ">" . $this->CRLF); - - $rply = $this->get_lines(); - $code = substr($rply,0,3); - - if($this->do_debug >= 2) { - echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply; - } - - if($code != 250 && $code != 251) { - $this->error = - array("error" => "RCPT not accepted from server", - "smtp_code" => $code, - "smtp_msg" => substr($rply,4)); - if($this->do_debug >= 1) { - echo "SMTP -> ERROR: " . $this->error["error"] . - ": " . $rply . $this->CRLF; - } - return false; - } - return true; - } - - /** - * Sends the RSET command to abort and transaction that is - * currently in progress. Returns true if successful false - * otherwise. - * - * Implements rfc 821: RSET - * - * SMTP CODE SUCCESS: 250 - * SMTP CODE ERROR : 500,501,504,421 - * @access public - * @return bool - */ - function Reset() { - $this->error = null; # so no confusion is caused - - if(!$this->connected()) { - $this->error = array( - "error" => "Called Reset() without being connected"); - return false; - } - - fputs($this->smtp_conn,"RSET" . $this->CRLF); - - $rply = $this->get_lines(); - $code = substr($rply,0,3); - - if($this->do_debug >= 2) { - echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply; - } - - if($code != 250) { - $this->error = - array("error" => "RSET failed", - "smtp_code" => $code, - "smtp_msg" => substr($rply,4)); - if($this->do_debug >= 1) { - echo "SMTP -> ERROR: " . $this->error["error"] . - ": " . $rply . $this->CRLF; - } - return false; - } - - return true; - } - - /** - * Starts a mail transaction from the email address specified in - * $from. Returns true if successful or false otherwise. If True - * the mail transaction is started and then one or more Recipient - * commands may be called followed by a Data command. This command - * will send the message to the users terminal if they are logged - * in. - * - * Implements rfc 821: SEND FROM: - * - * SMTP CODE SUCCESS: 250 - * SMTP CODE SUCCESS: 552,451,452 - * SMTP CODE SUCCESS: 500,501,502,421 - * @access public - * @return bool - */ - function Send($from) { - $this->error = null; # so no confusion is caused - - if(!$this->connected()) { - $this->error = array( - "error" => "Called Send() without being connected"); - return false; - } - - fputs($this->smtp_conn,"SEND FROM:" . $from . $this->CRLF); - - $rply = $this->get_lines(); - $code = substr($rply,0,3); - - if($this->do_debug >= 2) { - echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply; - } - - if($code != 250) { - $this->error = - array("error" => "SEND not accepted from server", - "smtp_code" => $code, - "smtp_msg" => substr($rply,4)); - if($this->do_debug >= 1) { - echo "SMTP -> ERROR: " . $this->error["error"] . - ": " . $rply . $this->CRLF; - } - return false; - } - return true; - } - - /** - * Starts a mail transaction from the email address specified in - * $from. Returns true if successful or false otherwise. If True - * the mail transaction is started and then one or more Recipient - * commands may be called followed by a Data command. This command - * will send the message to the users terminal if they are logged - * in and send them an email. - * - * Implements rfc 821: SAML FROM: - * - * SMTP CODE SUCCESS: 250 - * SMTP CODE SUCCESS: 552,451,452 - * SMTP CODE SUCCESS: 500,501,502,421 - * @access public - * @return bool - */ - function SendAndMail($from) { - $this->error = null; # so no confusion is caused - - if(!$this->connected()) { - $this->error = array( - "error" => "Called SendAndMail() without being connected"); - return false; - } - - fputs($this->smtp_conn,"SAML FROM:" . $from . $this->CRLF); - - $rply = $this->get_lines(); - $code = substr($rply,0,3); - - if($this->do_debug >= 2) { - echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply; - } - - if($code != 250) { - $this->error = - array("error" => "SAML not accepted from server", - "smtp_code" => $code, - "smtp_msg" => substr($rply,4)); - if($this->do_debug >= 1) { - echo "SMTP -> ERROR: " . $this->error["error"] . - ": " . $rply . $this->CRLF; - } - return false; - } - return true; - } - - /** - * Starts a mail transaction from the email address specified in - * $from. Returns true if successful or false otherwise. If True - * the mail transaction is started and then one or more Recipient - * commands may be called followed by a Data command. This command - * will send the message to the users terminal if they are logged - * in or mail it to them if they are not. - * - * Implements rfc 821: SOML FROM: - * - * SMTP CODE SUCCESS: 250 - * SMTP CODE SUCCESS: 552,451,452 - * SMTP CODE SUCCESS: 500,501,502,421 - * @access public - * @return bool - */ - function SendOrMail($from) { - $this->error = null; # so no confusion is caused - - if(!$this->connected()) { - $this->error = array( - "error" => "Called SendOrMail() without being connected"); - return false; - } - - fputs($this->smtp_conn,"SOML FROM:" . $from . $this->CRLF); - - $rply = $this->get_lines(); - $code = substr($rply,0,3); - - if($this->do_debug >= 2) { - echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply; - } - - if($code != 250) { - $this->error = - array("error" => "SOML not accepted from server", - "smtp_code" => $code, - "smtp_msg" => substr($rply,4)); - if($this->do_debug >= 1) { - echo "SMTP -> ERROR: " . $this->error["error"] . - ": " . $rply . $this->CRLF; - } - return false; - } - return true; - } - - /** - * This is an optional command for SMTP that this class does not - * support. This method is here to make the RFC821 Definition - * complete for this class and __may__ be implimented in the future - * - * Implements from rfc 821: TURN - * - * SMTP CODE SUCCESS: 250 - * SMTP CODE FAILURE: 502 - * SMTP CODE ERROR : 500, 503 - * @access public - * @return bool - */ - function Turn() { - $this->error = array("error" => "This method, TURN, of the SMTP ". - "is not implemented"); - if($this->do_debug >= 1) { - echo "SMTP -> NOTICE: " . $this->error["error"] . $this->CRLF; - } - return false; - } - - /** - * Verifies that the name is recognized by the server. - * Returns false if the name could not be verified otherwise - * the response from the server is returned. - * - * Implements rfc 821: VRFY - * - * SMTP CODE SUCCESS: 250,251 - * SMTP CODE FAILURE: 550,551,553 - * SMTP CODE ERROR : 500,501,502,421 - * @access public - * @return int - */ - function Verify($name) { - $this->error = null; # so no confusion is caused - - if(!$this->connected()) { - $this->error = array( - "error" => "Called Verify() without being connected"); - return false; - } - - fputs($this->smtp_conn,"VRFY " . $name . $this->CRLF); - - $rply = $this->get_lines(); - $code = substr($rply,0,3); - - if($this->do_debug >= 2) { - echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply; - } - - if($code != 250 && $code != 251) { - $this->error = - array("error" => "VRFY failed on name '$name'", - "smtp_code" => $code, - "smtp_msg" => substr($rply,4)); - if($this->do_debug >= 1) { - echo "SMTP -> ERROR: " . $this->error["error"] . - ": " . $rply . $this->CRLF; - } - return false; - } - return $rply; - } - - /******************************************************************* - * INTERNAL FUNCTIONS * - ******************************************************************/ - - /** - * Read in as many lines as possible - * either before eof or socket timeout occurs on the operation. - * With SMTP we can tell if we have more lines to read if the - * 4th character is '-' symbol. If it is a space then we don't - * need to read anything else. - * @access private - * @return string - */ - function get_lines() { - $data = ""; - while($str == @fgets($this->smtp_conn,515)) { - if($this->do_debug >= 4) { - echo "SMTP -> get_lines(): \$data was \"$data\"" . - $this->CRLF; - echo "SMTP -> get_lines(): \$str is \"$str\"" . - $this->CRLF; - } - $data .= $str; - if($this->do_debug >= 4) { - echo "SMTP -> get_lines(): \$data is \"$data\"" . $this->CRLF; - } - # if the 4th character is a space then we are done reading - # so just break the loop - if(substr($str,3,1) == " ") { break; } - } - return $data; - } - -} - - - ?> - --- a/owa/includes/PHPMailer_v2.0.3/codeworxtech.html +++ /dev/null @@ -1,122 +1,1 @@ - - - - - - -
-
-
-The http://phpmailer.codeworxtech.com/ website now carries a few -advertisements through the Google Adsense network to help offset -some of our costs.
-Thanks ....
-
-

My name is Andy Prevost, AKA "codeworxtech".
-www.codeworxtech.com for more information.
-

-

WHY USE OUR TOOLS & WHAT'S IN IT FOR YOU?

-

A valid question. We're developers too. We've been writing software, primarily for the internet, for more than 15 years. Along the way, there are two major things that had tremendous impact of our company: PHP and Open Source. PHP is without doubt the most popular platform for the internet. There has been more progress in this area of technology because of Open Source software than in any other IT segment. We have used many open source tools, some as learning tools, some as components in projects we were working on. To us, it's not about popularity ... we're committed to robust, stable, and efficient tools you can use to get your projects in your user's hands quickly. So the shorter answer: what's in it for you? rapid development and rapid deployment without fuss and with straight forward open source licensing.

-

Now, the introductions:

-

Our company, Worx International Inc., is the publisher of several Open Source applications and developer tools as well as several commercial PHP applications. The Open Source applications are ttCMS and DCP Portal. The Open Source developer tools include QuickComponents (QuickSkin and QuickCache) and now PHPMailer. -We have staff and offices in the United States, Caribbean, the Middle -East, and our primary development center in Canada. Our company is represented by -agents and resellers globally.

-

Worx International Inc. is at the forefront of developing PHP applications. Our staff are all Zend Certified university educated and experts at object oriented programming. While Worx International Inc. can handle any project from trouble shooting programs written by others all the way to finished mission-critical applications, we specialize in taking projects from inception all the way through to implementation - on budget, and on time. If you need help with your projects, we're the team to get it done right at a reasonable price.

-

Over the years, there have been a number of tools that have been constant favorites in all of our projects. We have become the project administrators for most of these tools.

-

Our developer tools are all Open Source. Here's a brief description:

-
    -
  • PHPMailer. Originally authored by Brent Matzelle, PHPMailer is the leading "email transfer class" for PHP. PHPMailer is downloaded more than 18000 times each and every month by developers looking for a stable, simple email solution. We used it ourselves for years as our favorite tool. It's always been small (the entire footprint is around 100 Kb), stable, and as complete a solution as you can find. Other tools are nowhere near as simple. And more importantly, most of our applications (including PHPMailer) is implemented in a smaller footprint than one competing email class. Our thanks to Brent Matzelle for this superb tool - our commitment is to keep it lean, keep it focused, and compliant with standards. Visit the PHPMailer website at - http://phpmailer.codeworxtech.com/.
    - Please note: all of our focus is now on the PHPMailer for PHP5.
    - PS. While you are at it, please visit our sponsor's sites, click on their ads. - It helps offset some of our costs.
    - Want to help? We're looking for progressive developers to join our team of volunteer professionals working on PHPMailer. Our entire focus is on PHPMailer for PHP5, and our next major task is to enhance our - exception/error handling with PHP 5's object oriented try/throw/catch mechanisms. If you are interested, let us know.
    -
    -
  • -
  • QuickCache. Originally authored by Jean Pierre Deckers as jpCache, QuickCache is an HTTP OpCode caching strategy that works on your entire site with only one line of code at the top of your script. The cached pages can be stored as files or as database objects. The benefits are absolutely astounding: bandwidth savings of up to 80% and screen display times increased by 8 - 10x. Visit the QuickCache website at - http://quickcache.codeworxtech.com/.
    -
    -
  • -
  • QuickSkin. Originally authored by Philipp v. Criegern and named "SmartTemplate". The project was taken over by Manuel 'EndelWar' Dalla Lana and now by "codeworxtech". QuickSkin is one of the truly outstanding templating engines available, but has always been confused with Smarty Templating Engine. QuickSkin is even more relevant today than when it was launched. It's a small footprint with big impact on your projects. It features a built in caching technology, token based substitution, and works on the concept of one single HTML file as the template. The HTML template file can contain variable information making it one small powerful tool for your developer tool kit. Visit the QuickSkin website at - http://quickskin.codeworxtech.com/.
    -
    -
  • -
-

We're committed to PHP and to the Open Source community.

-

Opportunities with Worx International Inc.:

-
    -
  • Resellers/Agents: We're always interested in talking with companies that -want to represent -Worx International Inc. in their markets. We also have private label programs for our commercial products (in certain circumstances).
  • -
  • Programmers/Developers: We are usually fully staffed, however, if you would like to be considered for a career with -Worx International Inc., we would be pleased to hear from you.
    -A few things to note:
    -
      -
    • experience level does not matter: from fresh out of college to multi-year experience - it's your - creative mind and a positive attitude we want
    • -
    • if you contact us looking for employment, include a cover letter, indicate what type of work/career you are looking for and expected compensation
    • -
    • if you are representing someone else looking for work, do not contact us. We have an exclusive relationship with a recruiting partner already and not interested in altering the arrangement. We will not hire your candidate under any circumstances unless they wish to approach us individually.
    • -
    • any contact that ignores any of these points will be discarded
    • -
  • -
  • Affiliates/Partnerships: We are interested in partnering with other firms who are leaders in their field. We clearly understand that successful companies are built on successful relationships in all industries world-wide. We currently have innovative relationships throughout the world that are mutually beneficial. Drop us a line and let's talk.
  • -
-Regards,
-Andy Prevost (aka, codeworxtech)
-codeworxtech@users.sourceforge.net
-
-We now also offer website design. hosting, and remote forms processing. Visit WorxStudio.com for more information.
-
-
- - --- a/owa/includes/PHPMailer_v2.0.3/docs/extending.html +++ /dev/null @@ -1,149 +1,1 @@ - - -Examples using phpmailer - - - - -

Examples using phpmailer

- -

1. Advanced Example

-

- -This demonstrates sending out multiple email messages with binary attachments -from a MySQL database with multipart/alternative support.

- - - - -
-
-require("class.phpmailer.php");
-
-$mail = new phpmailer();
-
-$mail->From     = "list@example.com";
-$mail->FromName = "List manager";
-$mail->Host     = "smtp1.example.com;smtp2.example.com";
-$mail->Mailer   = "smtp";
-
-@MYSQL_CONNECT("localhost","root","password");
-@mysql_select_db("my_company");
-$query  = "SELECT full_name, email, photo FROM employee WHERE id=$id";
-$result = @MYSQL_QUERY($query);
-
-while ($row = mysql_fetch_array ($result))
-{
-    // HTML body
-    $body  = "Hello <font size=\"4\">" . $row["full_name"] . "</font>, <p>";
-    $body .= "<i>Your</i> personal photograph to this message.<p>";
-    $body .= "Sincerely, <br>";
-    $body .= "phpmailer List manager";
-
-    // Plain text body (for mail clients that cannot read HTML)
-    $text_body  = "Hello " . $row["full_name"] . ", \n\n";
-    $text_body .= "Your personal photograph to this message.\n\n";
-    $text_body .= "Sincerely, \n";
-    $text_body .= "phpmailer List manager";
-
-    $mail->Body    = $body;
-    $mail->AltBody = $text_body;
-    $mail->AddAddress($row["email"], $row["full_name"]);
-    $mail->AddStringAttachment($row["photo"], "YourPhoto.jpg");
-
-    if(!$mail->Send())
-        echo "There has been a mail error sending to " . $row["email"] . "<br>";
-
-    // Clear all addresses and attachments for next loop
-    $mail->ClearAddresses();
-    $mail->ClearAttachments();
-}
-
-
-

- -

2. Extending phpmailer

-

- -Extending classes with inheritance is one of the most -powerful features of object-oriented -programming. It allows you to make changes to the -original class for your -own personal use without hacking the original -classes. Plus, it is very -easy to do. I've provided an example: - -

-Here's a class that extends the phpmailer class and sets the defaults -for the particular site:
-PHP include file: mail.inc.php -

- - - - - -
-
-require("class.phpmailer.php");
-
-class my_phpmailer extends phpmailer {
-    // Set default variables for all new objects
-    var $From     = "from@example.com";
-    var $FromName = "Mailer";
-    var $Host     = "smtp1.example.com;smtp2.example.com";
-    var $Mailer   = "smtp";                         // Alternative to IsSMTP()
-    var $WordWrap = 75;
-
-    // Replace the default error_handler
-    function error_handler($msg) {
-        print("My Site Error");
-        print("Description:");
-        printf("%s", $msg);
-        exit;
-    }
-
-    // Create an additional function
-    function do_something($something) {
-        // Place your new code here
-    }
-}
-
-
- -Now here's a normal PHP page in the site, which will have all the defaults set -above:
-Normal PHP file: mail_test.php -

- - - - - -
-
-require("mail.inc.php");
-
-// Instantiate your new class
-$mail = new my_phpmailer;
-
-// Now you only need to add the necessary stuff
-$mail->AddAddress("josh@example.com", "Josh Adams");
-$mail->Subject = "Here is the subject";
-$mail->Body    = "This is the message body";
-$mail->AddAttachment("c:/temp/11-10-00.zip", "new_name.zip");  // optional name
-
-if(!$mail->Send())
-{
-   echo "There was an error sending the message";
-   exit;
-}
-
-echo "Message was sent successfully";
-
-
-

- - - --- a/owa/includes/PHPMailer_v2.0.3/docs/faq.html +++ /dev/null @@ -1,68 +1,1 @@ - - -PHPMailer FAQ - - - -
-
-

PHPMailer FAQ

-
    - -
  • Q: I'm using the SMTP mailer and I keep on getting a timeout message - well before the X seconds I set it for. What gives?
    - A: PHP versions 4.0.4pl1 and earlier have a bug in which sockets timeout - early. You can fix this by re-compiling PHP 4.0.4pl1 with this fix: - timeoutfix.diff. Otherwise you can wait for the new PHP release.

  • - -
  • Q: I am concerned that using include files will take up too much - processing time on my computer. How can I make it run faster?
    - A: PHP by itself is very fast. Much faster than ASP or JSP running on - the same type of server. This is because it has very little overhead compared - to its competitors and it pre-compiles all of - its code before it runs each script (in PHP4). However, all of - this compiling and re-compiling can take up a lot of valuable - computer resources. However, there are programs out there that compile - PHP code and store it in memory (or on mmaped files) to reduce the - processing immensely. Two of these: APC - (Alternative PHP Cache) and Afterburner - (Win32 download) - are excellent free tools that do just this. If you have the money - you might also try Zend Cache, it is - even faster than the open source varieties. All of these tools make your - scripts run faster while also reducing the load on your server. I have tried - them myself and they are quite stable too.

  • - -
  • Q: What mailer gives me the best performance?
    - A: On a single machine the sendmail (or Qmail) is fastest overall. - Next fastest is mail() to give you the best performance. Both do not have the overhead of SMTP. - If you have you have your mail server on a another machine then - SMTP is your only option, but you do get the benefit of redundant mail servers.
    - If you are running a mailing list with thousands of names, the fastest mailers in order are: SMTP, sendmail (or Qmail), mail().

  • - -
  • Q: When I try to attach a file with on my server I get a - "Could not find {file} on filesystem error". Why is this?
    - A: If you are using a Unix machine this is probably because the user - running your web server does not have read access to the directory in question. If you are using Windows, - then the problem probably is that you have used single backslashes to denote directories (\). - A single backslash has a special meaning to PHP so these are not - valid. Instead use double backslashes ("\\") or a single forward - slash ("/").

  • - -
- -
-
- - - --- a/owa/includes/PHPMailer_v2.0.3/docs/pop3_article.txt +++ /dev/null @@ -1,40 +1,1 @@ -This is built for PHP Mailer 1.72 and was not tested with any previous version. It was developed under PHP 4.3.11 (E_ALL). It works under PHP 5 and 5.1 with E_ALL, but not in Strict mode due to var deprecation (but then neither does PHP Mailer either!). It follows the RFC 1939 standard explicitly and is fully commented. - -With that noted, here is how to implement it: -Install the class file - -I didn't want to modify the PHP Mailer classes at all, so you will have to include/require this class along with the base one. It can sit quite happily in the phpmailer-1.72 directory: -[geshi lang=php] require 'phpmailer-1.72/class.phpmailer.php'; require 'phpmailer-1.72/class.pop3.php'; [/geshi] -When you need it, create your POP3 object - -Right before I invoke PHP Mailer I activate the POP3 authorisation. POP3 before SMTP is a process whereby you login to your web hosts POP3 mail server BEFORE sending out any emails via SMTP. The POP3 logon 'verifies' your ability to send email by SMTP, which typically otherwise blocks you. On my web host (Pair Networks) a single POP3 logon is enough to 'verify' you for 90 minutes. Here is some sample PHP code that activates the POP3 logon and then sends an email via PHP Mailer: -[geshi lang=php] Authorise('pop3.example.com', 110, 30, 'mailer', 'password', 1); $mail = new PHPMailer(); $mail->SMTPDebug = 2; $mail->IsSMTP(); $mail->IsHTML(false); $mail->Host = 'relay.example.com'; $mail->From = 'mailer@example.com'; $mail->FromName = 'Example Mailer'; $mail->Subject = 'My subject'; $mail->Body = 'Hello world'; $mail->AddAddress('rich@corephp.co.uk', 'Richard Davey'); if (!$mail->Send()) { echo $mail->ErrorInfo; } ?> [/geshi] - -The PHP Mailer parts of this code should be obvious to anyone who has used PHP Mailer before. One thing to note - you almost certainly will not need to use SMTP Authentication *and* POP3 before SMTP together. The Authorisation method is a proxy method to all of the others within that class. There are Connect, Logon and Disconnect methods available, but I wrapped them in the single Authorisation one to make things easier. -The Parameters - -The Authorise parameters are as follows: -[geshi lang=php]$pop->Authorise('pop3.example.com', 110, 30, 'mailer', 'password', 1);[/geshi] - - 1. pop3.example.com - The POP3 Mail Server Name (hostname or IP address) - 2. 110 - The POP3 Port on which to connect (default is usually 110, but check with your host) - 3. 30 - A connection time-out value (in seconds) - 4. mailer - The POP3 Username required to logon - 5. password - The POP3 Password required to logon - 6. 1 - The class debug level (0 = off, 1+ = debug output is echoed to the browser) - -Final Comments + the Download - -1) This class does not support APOP connections. This is only because I did not have an APOP server to test with, but if you'd like to see that added just contact me. - -2) Opening and closing lots of POP3 connections can be quite a resource/network drain. If you need to send a whole batch of emails then just perform the authentication once at the start, and then loop through your mail sending script. Providing this process doesn't take longer than the verification period lasts on your POP3 server, you should be fine. With my host that period is 90 minutes, i.e. plenty of time. - -3) If you have heavy requirements for this script (i.e. send a LOT of email on a frequent basis) then I would advise seeking out an alternative sending method (direct SMTP ideally). If this isn't possible then you could modify this class so the 'last authorised' date is recorded somewhere (MySQL, Flat file, etc) meaning you only open a new connection if the old one has expired, saving you precious overhead. - -4) There are lots of other POP3 classes for PHP available. However most of them implement the full POP3 command set, where-as this one is purely for authentication, and much lighter as a result. However using any of the other POP3 classes to just logon to your server would have the same net result. At the end of the day, use whatever method you feel most comfortable with. -Download - -Here is the full class file plus my test script: POP_before_SMTP_PHPMailer.zip (4 KB) - Please note that it does not include PHPMailer itself. - -My thanks to Chris Ryan for the inspiration (even if indirectly, via his SMTP class) --- a/owa/includes/PHPMailer_v2.0.3/docs/use_gmail.txt +++ /dev/null @@ -1,46 +1,1 @@ -getFile('contents.html'); -$body = eregi_replace("[\]",'',$body); - -$mail->IsSMTP(); -$mail->SMTPAuth = true; // enable SMTP authentication -$mail->SMTPSecure = "ssl"; // sets the prefix to the servier -$mail->Host = "smtp.gmail.com"; // sets GMAIL as the SMTP server -$mail->Port = 465; // set the SMTP port - -$mail->Username = "yourname@gmail.com"; // GMAIL username -$mail->Password = "password"; // GMAIL password - -$mail->From = "replyto@yourdomain.com"; -$mail->FromName = "Webmaster"; -$mail->Subject = "This is the subject"; -$mail->AltBody = "This is the body when user views in plain text format"; //Text Body -$mail->WordWrap = 50; // set word wrap - -$mail->MsgHTML($body); - -$mail->AddReplyTo("replyto@yourdomain.com","Webmaster"); - -$mail->AddAttachment("/path/to/file.zip"); // attachment -$mail->AddAttachment("/path/to/image.jpg", "new.jpg"); // attachment - -$mail->AddAddress("username@domain.com","First Last"); - -$mail->IsHTML(true); // send as HTML - -if(!$mail->Send()) { - echo "Mailer Error: " . $mail->ErrorInfo; -} else { - echo "Message has been sent"; -} - -?> --- a/owa/includes/PHPMailer_v2.0.3/examples/contents.html +++ /dev/null @@ -1,13 +1,1 @@ - -
-

-
- This is a test of PHPMailer v2.0.0 rc1.
-
-This particular example uses HTML, with a <div> tag and inline
-styles.
-
-Also note the use of the PHPMailer at the top with no specific code to handle -including it in the body of the email.
- --- a/owa/includes/PHPMailer_v2.0.3/examples/index.html +++ /dev/null @@ -1,74 +1,1 @@ -

The example file "test_mail.php" contents include:

-
- -<?php
-
-include_once('../class.phpmailer.php');
-
-$mail = new PHPMailer();
-
-$body = $mail->getFile('contents.html');
-
-$body = eregi_replace("[\]",'',$body);
-$subject = eregi_replace("[\]",'',$subject);
-
-$mail->From = "name@yourdomain.com";
-$mail->FromName = "First Last";
-
-$mail->Subject = "PHPMailer Test Subject";
-
-$mail->AltBody = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test
-
-$mail->MsgHTML($body);
-
-$mail->AddAddress("whoto@otherdomain.com", "John Doe");
-
-if(!$mail->Send()) {
- echo 'Failed to send mail';
-} else {
- echo 'Mail sent';
-}
-
-?> -
-
-
-Although you could use full compabitility with PHPMailer 1.7.3, this example -shows how to use the new features. If you view 'contents.html', you will note -that there is a background image used in the <body tag as well as an image used -with a regular <img tag. Here's what the HTML file looks like:
-
-
- -<body background="images/bkgrnd.gif" style="margin: 0px;">
-<div style="width: 640px; font-family: Arial, Helvetica, sans-serif; font-size: 11px;">
-<div align="center"><img src="images/phpmailer.gif" style="height: 90px; width: 340px"></div><br>
-<br>
- This is a test of PHPMailer v2.0.0 rc1.<br>
-<br>
-This particular example uses <strong>HTML</strong>, with a <div> tag and inline<br>
-styles.<br>
-<br>
-Also note the use of the PHPMailer at the top with no specific code to handle
-including it in the body of the email.</div>
-</body>
-
-
-
-A few things to notice in the PHP script that generates the email: -
    -
  • the use of $mail->AltBody is completely optional. If not used, PHPMailer - will use the HTML text with htmlentities().
  • -
  • the background= and <img src= images were processed without any directives - or methods from the PHP script
  • -
  • there is no specific code to define the image type ... that is handled - automatically by PHPMailer when it parses the images
  • -
  • we are using a new class method '$mail->MsgHTML($body)' ... that is what will handle the parsing of the images and creating the AltBody text
  • -
-

Of course, you can still use PHPMailer the same way you have in the past. -That provides full compatibility with all existing scripts, while new scripts -can take advantage of the new features.

-

Modify test_mail.php now with your own email address and try it out.

-To see what the email SHOULD look like in your HTML compatible email viewer: click here
- --- a/owa/includes/PHPMailer_v2.0.3/examples/pop3_before_smtp_test.php +++ /dev/null @@ -1,40 +1,1 @@ - - -POP before SMTP Test - - - - -
-Authorise('pop3.example.com', 110, 30, 'mailer', 'password', 1);
-
-  $mail = new PHPMailer();
-
-  $mail->IsSMTP();
-  $mail->SMTPDebug = 2;
-  $mail->IsHTML(false);
-
-  $mail->Host     = 'relay.example.com';
-
-  $mail->From     = 'mailer@example.com';
-  $mail->FromName = 'Example Mailer';
-
-  $mail->Subject  =  'My subject';
-  $mail->Body     =  'Hello world';
-  $mail->AddAddress('name@anydomain.com', 'First Last');
-
-  if (!$mail->Send())
-  {
-    echo $mail->ErrorInfo;
-  }
-?>
-
- - - --- a/owa/includes/PHPMailer_v2.0.3/examples/test_gmail.php +++ /dev/null @@ -1,46 +1,1 @@ -getFile('contents.html'); -$body = eregi_replace("[\]",'',$body); - -$mail->IsSMTP(); -$mail->SMTPAuth = true; // enable SMTP authentication -$mail->SMTPSecure = "ssl"; // sets the prefix to the servier -$mail->Host = "smtp.gmail.com"; // sets GMAIL as the SMTP server -$mail->Port = 465; // set the SMTP port for the GMAIL server - -$mail->Username = "yourusername@gmail.com"; // GMAIL username -$mail->Password = "yourpassword"; // GMAIL password - -$mail->AddReplyTo("yourusername@gmail.com","First Last"); - -$mail->From = "name@yourdomain.com"; -$mail->FromName = "First Last"; - -$mail->Subject = "PHPMailer Test Subject via gmail"; - -//$mail->Body = "Hi,
This is the HTML BODY
"; //HTML Body -$mail->AltBody = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test -$mail->WordWrap = 50; // set word wrap - -$mail->MsgHTML($body); - -$mail->AddAddress("whoto@otherdomain.com", "John Doe"); - -$mail->AddAttachment("images/phpmailer.gif"); // attachment - -$mail->IsHTML(true); // send as HTML - -if(!$mail->Send()) { - echo "Mailer Error: " . $mail->ErrorInfo; -} else { - echo "Message sent!"; -} - -?> --- a/owa/includes/PHPMailer_v2.0.3/examples/test_mail.php +++ /dev/null @@ -1,30 +1,1 @@ -getFile('contents.html'); -$body = eregi_replace("[\]",'',$body); - -$mail->From = "name@yourdomain.com"; -$mail->FromName = "First Last"; - -$mail->Subject = "PHPMailer Test Subject via mail()"; - -$mail->AltBody = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test - -$mail->MsgHTML($body); - -$mail->AddAddress("whoto@otherdomain.com", "John Doe"); - -$mail->AddAttachment("images/phpmailer.gif"); // attachment - -if(!$mail->Send()) { - echo "Mailer Error: " . $mail->ErrorInfo; -} else { - echo "Message sent!"; -} - -?> --- a/owa/includes/PHPMailer_v2.0.3/examples/test_sendmail.php +++ /dev/null @@ -1,31 +1,1 @@ -getFile('contents.html'); -$body = eregi_replace("[\]",'',$body); - -$mail->IsSendmail(); // telling the class to use SendMail transport - -$mail->From = "name@yourdomain.com"; -$mail->FromName = "First Last"; - -$mail->Subject = "PHPMailer Test Subject via smtp"; - -$mail->AltBody = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test - -$mail->MsgHTML($body); - -$mail->AddAddress("whoto@otherdomain.com", "John Doe"); - -$mail->AddAttachment("images/phpmailer.gif"); // attachment - -if(!$mail->Send()) { - echo "Mailer Error: " . $mail->ErrorInfo; -} else { - echo "Message sent!"; -} - -?> --- a/owa/includes/PHPMailer_v2.0.3/examples/test_smtp.php +++ /dev/null @@ -1,34 +1,1 @@ -getFile('contents.html'); -$body = eregi_replace("[\]",'',$body); - -$mail->IsSMTP(); // telling the class to use SMTP -$mail->Host = "mail.yourdomain.com"; // SMTP server - -$mail->From = "name@yourdomain.com"; -$mail->FromName = "First Last"; - -$mail->Subject = "PHPMailer Test Subject via smtp"; - -$mail->AltBody = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test - -$mail->MsgHTML($body); - -$mail->AddAddress("whoto@otherdomain.com", "John Doe"); - -$mail->AddAttachment("images/phpmailer.gif"); // attachment - -if(!$mail->Send()) { - echo "Mailer Error: " . $mail->ErrorInfo; -} else { - echo "Message sent!"; -} - -?> --- a/owa/includes/PHPMailer_v2.0.3/language/phpmailer.lang-br.php +++ /dev/null @@ -1,23 +1,1 @@ - --- a/owa/includes/PHPMailer_v2.0.3/language/phpmailer.lang-ca.php +++ /dev/null @@ -1,24 +1,1 @@ - --- a/owa/includes/PHPMailer_v2.0.3/language/phpmailer.lang-cz.php +++ /dev/null @@ -1,26 +1,1 @@ - --- a/owa/includes/PHPMailer_v2.0.3/language/phpmailer.lang-de.php +++ /dev/null @@ -1,26 +1,1 @@ - --- a/owa/includes/PHPMailer_v2.0.3/language/phpmailer.lang-dk.php +++ /dev/null @@ -1,25 +1,1 @@ - */ -$PHPMAILER_LANG = array(); - -$PHPMAILER_LANG["provide_address"] = 'Du skal indtaste mindst en ' . - 'modtagers emailadresse.'; -$PHPMAILER_LANG["mailer_not_supported"] = ' mailer understøttes ikke.'; -$PHPMAILER_LANG["execute"] = 'Kunne ikke køre: '; -$PHPMAILER_LANG["instantiate"] = 'Kunne ikke initialisere email funktionen.'; -$PHPMAILER_LANG["authenticate"] = 'SMTP fejl: Kunne ikke logge pÃ¥.'; -$PHPMAILER_LANG["from_failed"] = 'Følgende afsenderadresse er forkert: '; -$PHPMAILER_LANG["recipients_failed"] = 'SMTP fejl: Følgende' . - 'modtagere er forkerte: '; -$PHPMAILER_LANG["data_not_accepted"] = 'SMTP fejl: Data kunne ikke accepteres.'; -$PHPMAILER_LANG["connect_host"] = 'SMTP fejl: Kunne ikke tilslutte SMTP serveren.'; -$PHPMAILER_LANG["file_access"] = 'Ingen adgang til fil: '; -$PHPMAILER_LANG["file_open"] = 'Fil fejl: Kunne ikke Ã¥bne filen: '; -$PHPMAILER_LANG["encoding"] = 'Ukendt encode-format: '; -$PHPMAILER_LANG["signing"] = 'Signing Error: '; - -?> --- a/owa/includes/PHPMailer_v2.0.3/language/phpmailer.lang-en.php +++ /dev/null @@ -1,25 +1,1 @@ - --- a/owa/includes/PHPMailer_v2.0.3/language/phpmailer.lang-es.php +++ /dev/null @@ -1,25 +1,1 @@ - --- a/owa/includes/PHPMailer_v2.0.3/language/phpmailer.lang-et.php +++ /dev/null @@ -1,24 +1,1 @@ - --- a/owa/includes/PHPMailer_v2.0.3/language/phpmailer.lang-fi.php +++ /dev/null @@ -1,25 +1,1 @@ - --- a/owa/includes/PHPMailer_v2.0.3/language/phpmailer.lang-fo.php +++ /dev/null @@ -1,27 +1,1 @@ - --- a/owa/includes/PHPMailer_v2.0.3/language/phpmailer.lang-fr.php +++ /dev/null @@ -1,25 +1,1 @@ - --- a/owa/includes/PHPMailer_v2.0.3/language/phpmailer.lang-hu.php +++ /dev/null @@ -1,25 +1,1 @@ - --- a/owa/includes/PHPMailer_v2.0.3/language/phpmailer.lang-it.php +++ /dev/null @@ -1,29 +1,1 @@ -*/ -$PHPMAILER_LANG = array(); - -$PHPMAILER_LANG["provide_address"] = 'Deve essere fornito almeno un'. - ' indirizzo ricevente'; -$PHPMAILER_LANG["mailer_not_supported"] = 'Mailer non supportato'; -$PHPMAILER_LANG["execute"] = "Impossibile eseguire l'operazione: "; -$PHPMAILER_LANG["instantiate"] = 'Impossibile istanziare la funzione mail'; -$PHPMAILER_LANG["authenticate"] = 'SMTP Error: Impossibile autenticarsi.'; -$PHPMAILER_LANG["from_failed"] = 'I seguenti indirizzi mittenti hanno'. - ' generato errore: '; -$PHPMAILER_LANG["recipients_failed"] = 'SMTP Error: I seguenti indirizzi'. - 'destinatari hanno generato errore: '; -$PHPMAILER_LANG["data_not_accepted"] = 'SMTP Error: Data non accettati dal'. - 'server.'; -$PHPMAILER_LANG["connect_host"] = 'SMTP Error: Impossibile connettersi'. - ' all\'host SMTP.'; -$PHPMAILER_LANG["file_access"] = 'Impossibile accedere al file: '; -$PHPMAILER_LANG["file_open"] = 'File Error: Impossibile aprire il file: '; -$PHPMAILER_LANG["encoding"] = 'Encoding set dei caratteri sconosciuto: '; -$PHPMAILER_LANG["signing"] = 'Signing Error: '; - -?> --- a/owa/includes/PHPMailer_v2.0.3/language/phpmailer.lang-nl.php +++ /dev/null @@ -1,25 +1,1 @@ - --- a/owa/includes/PHPMailer_v2.0.3/language/phpmailer.lang-no.php +++ /dev/null @@ -1,25 +1,1 @@ - --- a/owa/includes/PHPMailer_v2.0.3/language/phpmailer.lang-pl.php +++ /dev/null @@ -1,25 +1,1 @@ - --- a/owa/includes/PHPMailer_v2.0.3/language/phpmailer.lang-ro.php +++ /dev/null @@ -1,24 +1,1 @@ - */ -$PHPMAILER_LANG = array(); - -$PHPMAILER_LANG["provide_address"] = 'Trebuie sa adaugati cel putin un recipient (adresa de mail).'; -$PHPMAILER_LANG["mailer_not_supported"] = ' mailer nu este suportat.'; -$PHPMAILER_LANG["execute"] = 'Nu pot executa: '; -$PHPMAILER_LANG["instantiate"] = 'Nu am putut instantia functia mail.'; -$PHPMAILER_LANG["authenticate"] = 'Eroare SMTP: Nu a functionat autentificarea.'; -$PHPMAILER_LANG["from_failed"] = 'Urmatoarele adrese From au dat eroare: '; -$PHPMAILER_LANG["recipients_failed"] = 'Eroare SMTP: Urmatoarele adrese de mail au dat eroare: '; -$PHPMAILER_LANG["data_not_accepted"] = 'Eroare SMTP: Continutul mailului nu a fost acceptat.'; -$PHPMAILER_LANG["connect_host"] = 'Eroare SMTP: Nu m-am putut conecta la adresa SMTP.'; -$PHPMAILER_LANG["file_access"] = 'Nu pot accesa fisierul: '; -$PHPMAILER_LANG["file_open"] = 'Eroare de fisier: Nu pot deschide fisierul: '; -$PHPMAILER_LANG["encoding"] = 'Encodare necunoscuta: '; -$PHPMAILER_LANG["signing"] = 'Signing Error: '; - -?> --- a/owa/includes/PHPMailer_v2.0.3/language/phpmailer.lang-ru.php +++ /dev/null @@ -1,24 +1,1 @@ - */ -$PHPMAILER_LANG = array(); - -$PHPMAILER_LANG["provide_address"] = 'Ïîæàëóéñòà, ââåäèòå õîòÿ áû îäèí àäðåñ e-mail ' . - 'ïîëó÷àòåëÿ.'; -$PHPMAILER_LANG["mailer_not_supported"] = ' - ïî÷òîâûé ñåðâåð íå ïîääåðæèâàåòñÿ.'; -$PHPMAILER_LANG["execute"] = 'Íåâîçìîæíî âûïîëíèòü êîìàíäó: '; -$PHPMAILER_LANG["instantiate"] = 'Íåâîçìîæíî çàïóñòèòü ôóíêöèþ mail.'; -$PHPMAILER_LANG["authenticate"] = 'Îøèáêà SMTP: îøèáêà àâòîðèçàöèè.'; -$PHPMAILER_LANG["from_failed"] = 'Íåâåðíûé àäðåñ îòïðàâèòåëÿ: '; -$PHPMAILER_LANG["recipients_failed"] = 'Îøèáêà SMTP: îòïðàâêà ïî ñëåäóþùèì ' . - 'àäðåñàì ïîëó÷àòåëåé íå óäàëàñü: '; -$PHPMAILER_LANG["data_not_accepted"] = 'Îøèáêà SMTP: äàííûå íå ïðèíÿòû.'; -$PHPMAILER_LANG["connect_host"] = 'Îøèáêà SMTP: íå óäàåòñÿ ïîäêëþ÷èòüñÿ ê ñåðâåðó SMTP.'; -$PHPMAILER_LANG["file_access"] = 'Íåò äîñòóïà ê ôàéëó: '; -$PHPMAILER_LANG["file_open"] = 'Ôàéëîâàÿ îøèáêà: íå óäàåòñÿ îòêðûòü ôàéë: '; -$PHPMAILER_LANG["encoding"] = 'Íåèçâåñòíûé âèä êîäèðîâêè: '; -$PHPMAILER_LANG["signing"] = 'Signing Error: '; - -?> --- a/owa/includes/PHPMailer_v2.0.3/language/phpmailer.lang-se.php +++ /dev/null @@ -1,25 +1,1 @@ - */ -$PHPMAILER_LANG = array(); - -$PHPMAILER_LANG["provide_address"] = 'Du måste ange minst en ' . - 'mottagares e-postadress.'; -$PHPMAILER_LANG["mailer_not_supported"] = ' mailer stöds inte.'; -$PHPMAILER_LANG["execute"] = 'Kunde inte köra: '; -$PHPMAILER_LANG["instantiate"] = 'Kunde inte initiera e-postfunktion.'; -$PHPMAILER_LANG["authenticate"] = 'SMTP fel: Kunde inte autentisera.'; -$PHPMAILER_LANG["from_failed"] = 'Följande avsändaradress är felaktig: '; -$PHPMAILER_LANG["recipients_failed"] = 'SMTP fel: Följande ' . - 'mottagare är felaktig: '; -$PHPMAILER_LANG["data_not_accepted"] = 'SMTP fel: Data accepterades inte.'; -$PHPMAILER_LANG["connect_host"] = 'SMTP fel: Kunde inte ansluta till SMTP-server.'; -$PHPMAILER_LANG["file_access"] = 'Ingen åtkomst till fil: '; -$PHPMAILER_LANG["file_open"] = 'Fil fel: Kunde inte öppna fil: '; -$PHPMAILER_LANG["encoding"] = 'Okänt encode-format: '; -$PHPMAILER_LANG["signing"] = 'Signing Error: '; - -?> --- a/owa/includes/PHPMailer_v2.0.3/language/phpmailer.lang-tr.php +++ /dev/null @@ -1,26 +1,1 @@ - --- a/owa/includes/PHPMailer_v2.0.3/test/phpmailer_test.php +++ /dev/null @@ -1,573 +1,1 @@ -TestCase( $name ); - } - - /** - * Run before each test is started. - */ - function setUp() { - global $global_vars; - global $INCLUDE_DIR; - - $this->Mail = new PHPMailer(); - - $this->Mail->Priority = 3; - $this->Mail->Encoding = "8bit"; - $this->Mail->CharSet = "iso-8859-1"; - $this->Mail->From = "unit_test@phpmailer.sf.net"; - $this->Mail->FromName = "Unit Tester"; - $this->Mail->Sender = ""; - $this->Mail->Subject = "Unit Test"; - $this->Mail->Body = ""; - $this->Mail->AltBody = ""; - $this->Mail->WordWrap = 0; - $this->Mail->Host = $global_vars["mail_host"]; - $this->Mail->Port = 25; - $this->Mail->Helo = "localhost.localdomain"; - $this->Mail->SMTPAuth = false; - $this->Mail->Username = ""; - $this->Mail->Password = ""; - $this->Mail->PluginDir = $INCLUDE_DIR; - $this->Mail->AddReplyTo("no_reply@phpmailer.sf.net", "Reply Guy"); - $this->Mail->Sender = "unit_test@phpmailer.sf.net"; - - if(strlen($this->Mail->Host) > 0) - $this->Mail->Mailer = "smtp"; - else - { - $this->Mail->Mailer = "mail"; - $this->Sender = "unit_test@phpmailer.sf.net"; - } - - global $global_vars; - $this->SetAddress($global_vars["mail_to"], "Test User"); - if(strlen($global_vars["mail_cc"]) > 0) - $this->SetAddress($global_vars["mail_cc"], "Carbon User", "cc"); - } - - /** - * Run after each test is completed. - */ - function tearDown() { - // Clean global variables - $this->Mail = NULL; - $this->ChangeLog = array(); - $this->NoteLog = array(); - } - - - /** - * Build the body of the message in the appropriate format. - * @private - * @returns void - */ - function BuildBody() { - $this->CheckChanges(); - - // Determine line endings for message - if($this->Mail->ContentType == "text/html" || strlen($this->Mail->AltBody) > 0) - { - $eol = "
"; - $bullet = "
  • "; - $bullet_start = "
      "; - $bullet_end = "
    "; - } - else - { - $eol = "\n"; - $bullet = " - "; - $bullet_start = ""; - $bullet_end = ""; - } - - $ReportBody = ""; - - $ReportBody .= "---------------------" . $eol; - $ReportBody .= "Unit Test Information" . $eol; - $ReportBody .= "---------------------" . $eol; - $ReportBody .= "phpmailer version: " . $this->Mail->Version . $eol; - $ReportBody .= "Content Type: " . $this->Mail->ContentType . $eol; - - if(strlen($this->Mail->Host) > 0) - $ReportBody .= "Host: " . $this->Mail->Host . $eol; - - // If attachments then create an attachment list - if(count($this->Mail->attachment) > 0) - { - $ReportBody .= "Attachments:" . $eol; - $ReportBody .= $bullet_start; - for($i = 0; $i < count($this->Mail->attachment); $i++) - { - $ReportBody .= $bullet . "Name: " . $this->Mail->attachment[$i][1] . ", "; - $ReportBody .= "Encoding: " . $this->Mail->attachment[$i][3] . ", "; - $ReportBody .= "Type: " . $this->Mail->attachment[$i][4] . $eol; - } - $ReportBody .= $bullet_end . $eol; - } - - // If there are changes then list them - if(count($this->ChangeLog) > 0) - { - $ReportBody .= "Changes" . $eol; - $ReportBody .= "-------" . $eol; - - $ReportBody .= $bullet_start; - for($i = 0; $i < count($this->ChangeLog); $i++) - { - $ReportBody .= $bullet . $this->ChangeLog[$i][0] . " was changed to [" . - $this->ChangeLog[$i][1] . "]" . $eol; - } - $ReportBody .= $bullet_end . $eol . $eol; - } - - // If there are notes then list them - if(count($this->NoteLog) > 0) - { - $ReportBody .= "Notes" . $eol; - $ReportBody .= "-----" . $eol; - - $ReportBody .= $bullet_start; - for($i = 0; $i < count($this->NoteLog); $i++) - { - $ReportBody .= $bullet . $this->NoteLog[$i] . $eol; - } - $ReportBody .= $bullet_end; - } - - // Re-attach the original body - $this->Mail->Body .= $eol . $eol . $ReportBody; - } - - /** - * Check which default settings have been changed for the report. - * @private - * @returns void - */ - function CheckChanges() { - if($this->Mail->Priority != 3) - $this->AddChange("Priority", $this->Mail->Priority); - if($this->Mail->Encoding != "8bit") - $this->AddChange("Encoding", $this->Mail->Encoding); - if($this->Mail->CharSet != "iso-8859-1") - $this->AddChange("CharSet", $this->Mail->CharSet); - if($this->Mail->Sender != "") - $this->AddChange("Sender", $this->Mail->Sender); - if($this->Mail->WordWrap != 0) - $this->AddChange("WordWrap", $this->Mail->WordWrap); - if($this->Mail->Mailer != "mail") - $this->AddChange("Mailer", $this->Mail->Mailer); - if($this->Mail->Port != 25) - $this->AddChange("Port", $this->Mail->Port); - if($this->Mail->Helo != "localhost.localdomain") - $this->AddChange("Helo", $this->Mail->Helo); - if($this->Mail->SMTPAuth) - $this->AddChange("SMTPAuth", "true"); - } - - /** - * Adds a change entry. - * @private - * @returns void - */ - function AddChange($sName, $sNewValue) { - $cur = count($this->ChangeLog); - $this->ChangeLog[$cur][0] = $sName; - $this->ChangeLog[$cur][1] = $sNewValue; - } - - /** - * Adds a simple note to the message. - * @public - * @returns void - */ - function AddNote($sValue) { - $this->NoteLog[] = $sValue; - } - - /** - * Adds all of the addresses - * @public - * @returns void - */ - function SetAddress($sAddress, $sName = "", $sType = "to") { - switch($sType) - { - case "to": - $this->Mail->AddAddress($sAddress, $sName); - break; - case "cc": - $this->Mail->AddCC($sAddress, $sName); - break; - case "bcc": - $this->Mail->AddBCC($sAddress, $sName); - break; - } - } - - ///////////////////////////////////////////////// - // UNIT TESTS - ///////////////////////////////////////////////// - - /** - * Try a plain message. - */ - function test_WordWrap() { - - $this->Mail->WordWrap = 40; - $my_body = "Here is the main body of this message. It should " . - "be quite a few lines. It should be wrapped at the " . - "40 characters. Make sure that it is."; - $nBodyLen = strlen($my_body); - $my_body .= "\n\nThis is the above body length: " . $nBodyLen; - - $this->Mail->Body = $my_body; - $this->Mail->Subject .= ": Wordwrap"; - - $this->BuildBody(); - $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo); - } - - /** - * Try a plain message. - */ - function test_Low_Priority() { - - $this->Mail->Priority = 5; - $this->Mail->Body = "Here is the main body. There should be " . - "a reply to address in this message."; - $this->Mail->Subject .= ": Low Priority"; - $this->Mail->AddReplyTo("nobody@nobody.com", "Nobody (Unit Test)"); - - $this->BuildBody(); - $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo); - } - - /** - * Simple plain file attachment test. - */ - function test_Multiple_Plain_FileAttachment() { - - $this->Mail->Body = "Here is the text body"; - $this->Mail->Subject .= ": Plain + Multiple FileAttachments"; - - if(!$this->Mail->AddAttachment("test.png")) - { - $this->assert(false, $this->Mail->ErrorInfo); - return; - } - - if(!$this->Mail->AddAttachment("phpmailer_test.php", "test.txt")) - { - $this->assert(false, $this->Mail->ErrorInfo); - return; - } - - $this->BuildBody(); - $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo); - } - - /** - * Simple plain string attachment test. - */ - function test_Plain_StringAttachment() { - - $this->Mail->Body = "Here is the text body"; - $this->Mail->Subject .= ": Plain + StringAttachment"; - - $sAttachment = "These characters are the content of the " . - "string attachment.\nThis might be taken from a ". - "database or some other such thing. "; - - $this->Mail->AddStringAttachment($sAttachment, "string_attach.txt"); - - $this->BuildBody(); - $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo); - } - - /** - * Plain quoted-printable message. - */ - function test_Quoted_Printable() { - - $this->Mail->Body = "Here is the main body"; - $this->Mail->Subject .= ": Plain + Quoted-printable"; - $this->Mail->Encoding = "quoted-printable"; - - $this->BuildBody(); - $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo); - } - - /** - * Try a plain message. - */ - function test_Html() { - - $this->Mail->IsHTML(true); - $this->Mail->Subject .= ": HTML only"; - - $this->Mail->Body = "This is a test message written in HTML.
    " . - "Go to " . - "http://phpmailer.sourceforge.net/ for new versions of " . - "phpmailer.

    Thank you!"; - - $this->BuildBody(); - $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo); - } - - /** - * Simple HTML and attachment test - */ - function test_HTML_Attachment() { - - $this->Mail->Body = "This is the HTML part of the email."; - $this->Mail->Subject .= ": HTML + Attachment"; - $this->Mail->IsHTML(true); - - if(!$this->Mail->AddAttachment("phpmailer_test.php", "test_attach.txt")) - { - $this->assert(false, $this->Mail->ErrorInfo); - return; - } - - $this->BuildBody(); - $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo); - } - - /** - * An embedded attachment test. - */ - function test_Embedded_Image() { - - $this->Mail->Body = "Embedded Image: \"phpmailer\"" . - "Here is an image!"; - $this->Mail->Subject .= ": Embedded Image"; - $this->Mail->IsHTML(true); - - if(!$this->Mail->AddEmbeddedImage("test.png", "my-attach", "test.png", - "base64", "image/png")) - { - $this->assert(false, $this->Mail->ErrorInfo); - return; - } - - $this->BuildBody(); - $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo); - } - - /** - * An embedded attachment test. - */ - function test_Multi_Embedded_Image() { - - $this->Mail->Body = "Embedded Image: \"phpmailer\"" . - "Here is an image!"; - $this->Mail->Subject .= ": Embedded Image + Attachment"; - $this->Mail->IsHTML(true); - - if(!$this->Mail->AddEmbeddedImage("test.png", "my-attach", "test.png", - "base64", "image/png")) - { - $this->assert(false, $this->Mail->ErrorInfo); - return; - } - - if(!$this->Mail->AddAttachment("phpmailer_test.php", "test.txt")) - { - $this->assert(false, $this->Mail->ErrorInfo); - return; - } - - $this->BuildBody(); - $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo); - } - - /** - * Simple multipart/alternative test. - */ - function test_AltBody() { - - $this->Mail->Body = "This is the HTML part of the email."; - $this->Mail->AltBody = "Here is the text body of this message. " . - "It should be quite a few lines. It should be wrapped at the " . - "40 characters. Make sure that it is."; - $this->Mail->WordWrap = 40; - $this->AddNote("This is a mulipart alternative email"); - $this->Mail->Subject .= ": AltBody + Word Wrap"; - - $this->BuildBody(); - $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo); - } - - /** - * Simple HTML and attachment test - */ - function test_AltBody_Attachment() { - - $this->Mail->Body = "This is the HTML part of the email."; - $this->Mail->AltBody = "This is the text part of the email."; - $this->Mail->Subject .= ": AltBody + Attachment"; - $this->Mail->IsHTML(true); - - if(!$this->Mail->AddAttachment("phpmailer_test.php", "test_attach.txt")) - { - $this->assert(false, $this->Mail->ErrorInfo); - return; - } - - $this->BuildBody(); - $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo); - - $fp = fopen("message.txt", "w"); - fwrite($fp, $this->Mail->CreateHeader() . $this->Mail->CreateBody()); - fclose($fp); - } - - function test_MultipleSend() { - $this->Mail->Body = "Sending two messages without keepalive"; - $this->BuildBody(); - $subject = $this->Mail->Subject; - - $this->Mail->Subject = $subject . ": SMTP 1"; - $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo); - - $this->Mail->Subject = $subject . ": SMTP 2"; - $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo); - } - - function test_SmtpKeepAlive() { - $this->Mail->Body = "This was done using the SMTP keep-alive."; - $this->BuildBody(); - $subject = $this->Mail->Subject; - - $this->Mail->SMTPKeepAlive = true; - $this->Mail->Subject = $subject . ": SMTP keep-alive 1"; - $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo); - - $this->Mail->Subject = $subject . ": SMTP keep-alive 2"; - $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo); - $this->Mail->SmtpClose(); - } - - /** - * Tests this denial of service attack: - * http://www.cybsec.com/vuln/PHPMailer-DOS.pdf - */ - function test_DenialOfServiceAttack() { - $this->Mail->Body = "This should no longer cause a denial of service."; - $this->BuildBody(); - - $this->Mail->Subject = str_repeat("A", 998); - $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo); - } - - function test_Error() { - $this->Mail->Subject .= ": This should be sent"; - $this->BuildBody(); - $this->Mail->ClearAllRecipients(); // no addresses should cause an error - $this->assert($this->Mail->IsError() == false, "Error found"); - $this->assert($this->Mail->Send() == false, "Send succeeded"); - $this->assert($this->Mail->IsError(), "No error found"); - $this->assertEquals('You must provide at least one ' . - 'recipient email address.', $this->Mail->ErrorInfo); - $this->Mail->AddAddress(get("mail_to")); - $this->assert($this->Mail->Send(), "Send failed"); - } -} - -/** - * Create and run test instance. - */ - -if(isset($HTTP_GET_VARS)) - $global_vars = $HTTP_GET_VARS; -else - $global_vars = $_REQUEST; - -if(isset($global_vars["submitted"])) -{ - echo "Test results:
    "; - $suite = new TestSuite( "phpmailerTest" ); - - $testRunner = new TestRunner; - $testRunner->run($suite); - echo "


    "; -} - -function get($sName) { - global $global_vars; - if(isset($global_vars[$sName])) - return $global_vars[$sName]; - else - return ""; -} - -?> - - - -

    phpmailer Unit Test

    -By entering a SMTP hostname it will automatically perform tests with SMTP. - -
    - -To Address: "/> -
    -Cc Address: "/> -
    -SMTP Hostname: "/> -

    - - -

    - - --- a/owa/includes/PHPMailer_v2.0.3/test/phpunit.php +++ /dev/null @@ -1,377 +1,1 @@ - -// OntoSys, Inc -// -// $Id: phpunit.php,v 1.1 2002/03/30 19:32:17 bmatzelle Exp $ - -// Copyright (c) 2000 Fred Yankowski - -// Permission is hereby granted, free of charge, to any person -// obtaining a copy of this software and associated documentation -// files (the "Software"), to deal in the Software without -// restriction, including without limitation the rights to use, copy, -// modify, merge, publish, distribute, sublicense, and/or sell copies -// of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS -// BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN -// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -// -error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE | - E_CORE_ERROR | E_CORE_WARNING); - -/* -interface Test { - function run(&$aTestResult); - function countTestCases(); -} -*/ - -function trace($msg) { - return; - print($msg); - flush(); -} - - -class Exception { - /* Emulate a Java exception, sort of... */ - var $message; - function Exception($message) { - $this->message = $message; - } - function getMessage() { - return $this->message; - } -} - -class Assert { - function assert($boolean, $message=0) { - if (! $boolean) - $this->fail($message); - } - - function assertEquals($expected, $actual, $message=0) { - if ($expected != $actual) { - $this->failNotEquals($expected, $actual, "expected", $message); - } - } - - function assertRegexp($regexp, $actual, $message=false) { - if (! preg_match($regexp, $actual)) { - $this->failNotEquals($regexp, $actual, "pattern", $message); - } - } - - function failNotEquals($expected, $actual, $expected_label, $message=0) { - // Private function for reporting failure to match. - $str = $message ? ($message . ' ') : ''; - $str .= "($expected_label/actual)
    "; - $htmlExpected = htmlspecialchars($expected); - $htmlActual = htmlspecialchars($actual); - $str .= sprintf("
    %s\n--------\n%s
    ", - $htmlExpected, $htmlActual); - $this->fail($str); - } -} - -class TestCase extends Assert /* implements Test */ { - /* Defines context for running tests. Specific context -- such as - instance variables, global variables, global state -- is defined - by creating a subclass that specializes the setUp() and - tearDown() methods. A specific test is defined by a subclass - that specializes the runTest() method. */ - var $fName; - var $fResult; - var $fExceptions = array(); - - function TestCase($name) { - $this->fName = $name; - } - - function run($testResult=0) { - /* Run this single test, by calling the run() method of the - TestResult object which will in turn call the runBare() method - of this object. That complication allows the TestResult object - to do various kinds of progress reporting as it invokes each - test. Create/obtain a TestResult object if none was passed in. - Note that if a TestResult object was passed in, it must be by - reference. */ - if (! $testResult) - $testResult = $this->_createResult(); - $this->fResult = $testResult; - $testResult->run(&$this); - $this->fResult = 0; - return $testResult; - } - - function countTestCases() { - return 1; - } - - function runTest() { - $name = $this->name(); - // Since isset($this->$name) is false, no way to run defensive checks - $this->$name(); - } - - function setUp() /* expect override */ { - //print("TestCase::setUp()
    \n"); - } - - function tearDown() /* possible override */ { - //print("TestCase::tearDown()
    \n"); - } - - //////////////////////////////////////////////////////////////// - - - function _createResult() /* protected */ { - /* override this to use specialized subclass of TestResult */ - return new TestResult; - } - - function fail($message=0) { - //printf("TestCase::fail(%s)
    \n", ($message) ? $message : ''); - /* JUnit throws AssertionFailedError here. We just record the - failure and carry on */ - $this->fExceptions[] = new Exception(&$message); - } - - function error($message) { - /* report error that requires correction in the test script - itself, or (heaven forbid) in this testing infrastructure */ - printf('ERROR: ' . $message . '
    '); - $this->fResult->stop(); - } - - function failed() { - return count($this->fExceptions); - } - - function getExceptions() { - return $this->fExceptions; - } - - function name() { - return $this->fName; - } - - function runBare() { - $this->setup(); - $this->runTest(); - $this->tearDown(); - } -} - - -class TestSuite /* implements Test */ { - /* Compose a set of Tests (instances of TestCase or TestSuite), and - run them all. */ - var $fTests = array(); - - function TestSuite($classname=false) { - if ($classname) { - // Find all methods of the given class whose name starts with - // "test" and add them to the test suite. We are just _barely_ - // able to do this with PHP's limited introspection... Note - // that PHP seems to store method names in lower case, and we - // have to avoid the constructor function for the TestCase class - // superclass. This will fail when $classname starts with - // "Test" since that will have a constructor method that will - // get matched below and then treated (incorrectly) as a test - // method. So don't name any TestCase subclasses as "Test..."! - if (floor(phpversion()) >= 4) { - // PHP4 introspection, submitted by Dylan Kuhn - $names = get_class_methods($classname); - while (list($key, $method) = each($names)) { - if (preg_match('/^test/', $method) && $method != "testcase") { - $this->addTest(new $classname($method)); - } - } - } - else { - $dummy = new $classname("dummy"); - $names = (array) $dummy; - while (list($key, $value) = each($names)) { - $type = gettype($value); - if ($type == "user function" && preg_match('/^test/', $key) - && $key != "testcase") { - $this->addTest(new $classname($key)); - } - } - } - } - } - - function addTest($test) { - /* Add TestCase or TestSuite to this TestSuite */ - $this->fTests[] = $test; - } - - function run(&$testResult) { - /* Run all TestCases and TestSuites comprising this TestSuite, - accumulating results in the given TestResult object. */ - reset($this->fTests); - while (list($na, $test) = each($this->fTests)) { - if ($testResult->shouldStop()) - break; - $test->run(&$testResult); - } - } - - function countTestCases() { - /* Number of TestCases comprising this TestSuite (including those - in any constituent TestSuites) */ - $count = 0; - reset($fTests); - while (list($na, $test_case) = each($this->fTests)) { - $count += $test_case->countTestCases(); - } - return $count; - } -} - - -class TestFailure { - /* Record failure of a single TestCase, associating it with the - exception(s) that occurred */ - var $fFailedTestName; - var $fExceptions; - - function TestFailure(&$test, &$exceptions) { - $this->fFailedTestName = $test->name(); - $this->fExceptions = $exceptions; - } - - function getExceptions() { - return $this->fExceptions; - } - function getTestName() { - return $this->fFailedTestName; - } -} - - -class TestResult { - /* Collect the results of running a set of TestCases. */ - var $fFailures = array(); - var $fRunTests = 0; - var $fStop = false; - - function TestResult() { } - - function _endTest($test) /* protected */ { - /* specialize this for end-of-test action, such as progress - reports */ - } - - function getFailures() { - return $this->fFailures; - } - - function run($test) { - /* Run a single TestCase in the context of this TestResult */ - $this->_startTest($test); - $this->fRunTests++; - - $test->runBare(); - - /* this is where JUnit would catch AssertionFailedError */ - $exceptions = $test->getExceptions(); - if ($exceptions) - $this->fFailures[] = new TestFailure(&$test, &$exceptions); - $this->_endTest($test); - } - - function countTests() { - return $this->fRunTests; - } - - function shouldStop() { - return $this->fStop; - } - - function _startTest($test) /* protected */ { - /* specialize this for start-of-test actions */ - } - - function stop() { - /* set indication that the test sequence should halt */ - $fStop = true; - } - - function countFailures() { - return count($this->fFailures); - } -} - - -class TextTestResult extends TestResult { - /* Specialize TestResult to produce text/html report */ - function TextTestResult() { - $this->TestResult(); // call superclass constructor - } - - function report() { - /* report result of test run */ - $nRun = $this->countTests(); - $nFailures = $this->countFailures(); - printf("

    %s test%s run
    ", $nRun, ($nRun == 1) ? '' : 's'); - printf("%s failure%s.
    \n", $nFailures, ($nFailures == 1) ? '' : 's'); - if ($nFailures == 0) - return; - - print("

      \n"); - $failures = $this->getFailures(); - while (list($i, $failure) = each($failures)) { - $failedTestName = $failure->getTestName(); - printf("
    1. %s\n", $failedTestName); - - $exceptions = $failure->getExceptions(); - print("
        "); - while (list($na, $exception) = each($exceptions)) - printf("
      • %s\n", $exception->getMessage()); - print("
      "); - } - print("
    \n"); - } - - function _startTest($test) { - printf("%s ", $test->name()); - flush(); - } - - function _endTest($test) { - $outcome = $test->failed() - ? "FAIL" - : "ok"; - printf("$outcome
    \n"); - flush(); - } -} - - -class TestRunner { - /* Run a suite of tests and report results. */ - function run($suite) { - $result = new TextTestResult; - $suite->run($result); - $result->report(); - } -} - -?> --- a/owa/includes/Snoopy.class.php +++ /dev/null @@ -1,1250 +1,1 @@ - -Copyright (c): 1999-2008 New Digital Group, all rights reserved -Version: 1.2.4 - - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -You may contact the author of Snoopy by e-mail at: -monte@ohrt.com - -The latest version of Snoopy can be obtained from: -http://snoopy.sourceforge.net/ - -*************************************************/ - -class Snoopy -{ - /**** Public variables ****/ - - /* user definable vars */ - - var $host = "www.php.net"; // host name we are connecting to - var $port = 80; // port we are connecting to - var $proxy_host = ""; // proxy host to use - var $proxy_port = ""; // proxy port to use - var $proxy_user = ""; // proxy user to use - var $proxy_pass = ""; // proxy password to use - - var $agent = "Snoopy v1.2.4"; // agent we masquerade as - var $referer = ""; // referer info to pass - var $cookies = array(); // array of cookies to pass - // $cookies["username"]="joe"; - var $rawheaders = array(); // array of raw headers to send - // $rawheaders["Content-type"]="text/html"; - - var $maxredirs = 5; // http redirection depth maximum. 0 = disallow - var $lastredirectaddr = ""; // contains address of last redirected address - var $offsiteok = true; // allows redirection off-site - var $maxframes = 0; // frame content depth maximum. 0 = disallow - var $expandlinks = true; // expand links to fully qualified URLs. - // this only applies to fetchlinks() - // submitlinks(), and submittext() - var $passcookies = true; // pass set cookies back through redirects - // NOTE: this currently does not respect - // dates, domains or paths. - - var $user = ""; // user for http authentication - var $pass = ""; // password for http authentication - - // http accept types - var $accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*"; - - var $results = ""; // where the content is put - - var $error = ""; // error messages sent here - var $response_code = ""; // response code returned from server - var $headers = array(); // headers returned from server sent here - var $maxlength = 500000; // max return data length (body) - var $read_timeout = 0; // timeout on read operations, in seconds - // supported only since PHP 4 Beta 4 - // set to 0 to disallow timeouts - var $timed_out = false; // if a read operation timed out - var $status = 0; // http request status - - var $temp_dir = "/tmp"; // temporary directory that the webserver - // has permission to write to. - // under Windows, this should be C:\temp - - var $curl_path = "/usr/local/bin/curl"; - // Snoopy will use cURL for fetching - // SSL content if a full system path to - // the cURL binary is supplied here. - // set to false if you do not have - // cURL installed. See http://curl.haxx.se - // for details on installing cURL. - // Snoopy does *not* use the cURL - // library functions built into php, - // as these functions are not stable - // as of this Snoopy release. - - /**** Private variables ****/ - - var $_maxlinelen = 4096; // max line length (headers) - - var $_httpmethod = "GET"; // default http request method - var $_httpversion = "HTTP/1.0"; // default http request version - var $_submit_method = "POST"; // default submit method - var $_submit_type = "application/x-www-form-urlencoded"; // default submit type - var $_mime_boundary = ""; // MIME boundary for multipart/form-data submit type - var $_redirectaddr = false; // will be set if page fetched is a redirect - var $_redirectdepth = 0; // increments on an http redirect - var $_frameurls = array(); // frame src urls - var $_framedepth = 0; // increments on frame depth - - var $_isproxy = false; // set if using a proxy server - var $_fp_timeout = 30; // timeout for socket connection - -/*======================================================================*\ - Function: fetch - Purpose: fetch the contents of a web page - (and possibly other protocols in the - future like ftp, nntp, gopher, etc.) - Input: $URI the location of the page to fetch - Output: $this->results the output text from the fetch -\*======================================================================*/ - - function fetch($URI) - { - - //preg_match("|^([^:]+)://([^:/]+)(:[\d]+)*(.*)|",$URI,$URI_PARTS); - $URI_PARTS = parse_url($URI); - if (!empty($URI_PARTS["user"])) - $this->user = $URI_PARTS["user"]; - if (!empty($URI_PARTS["pass"])) - $this->pass = $URI_PARTS["pass"]; - if (empty($URI_PARTS["query"])) - $URI_PARTS["query"] = ''; - if (empty($URI_PARTS["path"])) - $URI_PARTS["path"] = ''; - - switch(strtolower($URI_PARTS["scheme"])) - { - case "http": - $this->host = $URI_PARTS["host"]; - if(!empty($URI_PARTS["port"])) - $this->port = $URI_PARTS["port"]; - if($this->_connect($fp)) - { - if($this->_isproxy) - { - // using proxy, send entire URI - $this->_httprequest($URI,$fp,$URI,$this->_httpmethod); - } - else - { - $path = $URI_PARTS["path"].($URI_PARTS["query"] ? "?".$URI_PARTS["query"] : ""); - // no proxy, send only the path - $this->_httprequest($path, $fp, $URI, $this->_httpmethod); - } - - $this->_disconnect($fp); - - if($this->_redirectaddr) - { - /* url was redirected, check if we've hit the max depth */ - if($this->maxredirs > $this->_redirectdepth) - { - // only follow redirect if it's on this site, or offsiteok is true - if(preg_match("|^http://".preg_quote($this->host)."|i",$this->_redirectaddr) || $this->offsiteok) - { - /* follow the redirect */ - $this->_redirectdepth++; - $this->lastredirectaddr=$this->_redirectaddr; - $this->fetch($this->_redirectaddr); - } - } - } - - if($this->_framedepth < $this->maxframes && count($this->_frameurls) > 0) - { - $frameurls = $this->_frameurls; - $this->_frameurls = array(); - - while(list(,$frameurl) = each($frameurls)) - { - if($this->_framedepth < $this->maxframes) - { - $this->fetch($frameurl); - $this->_framedepth++; - } - else - break; - } - } - } - else - { - return false; - } - return true; - break; - case "https": - if(!$this->curl_path) - return false; - if(function_exists("is_executable")) - if (!is_executable($this->curl_path)) - return false; - $this->host = $URI_PARTS["host"]; - if(!empty($URI_PARTS["port"])) - $this->port = $URI_PARTS["port"]; - if($this->_isproxy) - { - // using proxy, send entire URI - $this->_httpsrequest($URI,$URI,$this->_httpmethod); - } - else - { - $path = $URI_PARTS["path"].($URI_PARTS["query"] ? "?".$URI_PARTS["query"] : ""); - // no proxy, send only the path - $this->_httpsrequest($path, $URI, $this->_httpmethod); - } - - if($this->_redirectaddr) - { - /* url was redirected, check if we've hit the max depth */ - if($this->maxredirs > $this->_redirectdepth) - { - // only follow redirect if it's on this site, or offsiteok is true - if(preg_match("|^http://".preg_quote($this->host)."|i",$this->_redirectaddr) || $this->offsiteok) - { - /* follow the redirect */ - $this->_redirectdepth++; - $this->lastredirectaddr=$this->_redirectaddr; - $this->fetch($this->_redirectaddr); - } - } - } - - if($this->_framedepth < $this->maxframes && count($this->_frameurls) > 0) - { - $frameurls = $this->_frameurls; - $this->_frameurls = array(); - - while(list(,$frameurl) = each($frameurls)) - { - if($this->_framedepth < $this->maxframes) - { - $this->fetch($frameurl); - $this->_framedepth++; - } - else - break; - } - } - return true; - break; - default: - // not a valid protocol - $this->error = 'Invalid protocol "'.$URI_PARTS["scheme"].'"\n'; - return false; - break; - } - return true; - } - -/*======================================================================*\ - Function: submit - Purpose: submit an http form - Input: $URI the location to post the data - $formvars the formvars to use. - format: $formvars["var"] = "val"; - $formfiles an array of files to submit - format: $formfiles["var"] = "/dir/filename.ext"; - Output: $this->results the text output from the post -\*======================================================================*/ - - function submit($URI, $formvars="", $formfiles="") - { - unset($postdata); - - $postdata = $this->_prepare_post_body($formvars, $formfiles); - - $URI_PARTS = parse_url($URI); - if (!empty($URI_PARTS["user"])) - $this->user = $URI_PARTS["user"]; - if (!empty($URI_PARTS["pass"])) - $this->pass = $URI_PARTS["pass"]; - if (empty($URI_PARTS["query"])) - $URI_PARTS["query"] = ''; - if (empty($URI_PARTS["path"])) - $URI_PARTS["path"] = ''; - - switch(strtolower($URI_PARTS["scheme"])) - { - case "http": - $this->host = $URI_PARTS["host"]; - if(!empty($URI_PARTS["port"])) - $this->port = $URI_PARTS["port"]; - if($this->_connect($fp)) - { - if($this->_isproxy) - { - // using proxy, send entire URI - $this->_httprequest($URI,$fp,$URI,$this->_submit_method,$this->_submit_type,$postdata); - } - else - { - $path = $URI_PARTS["path"].($URI_PARTS["query"] ? "?".$URI_PARTS["query"] : ""); - // no proxy, send only the path - $this->_httprequest($path, $fp, $URI, $this->_submit_method, $this->_submit_type, $postdata); - } - - $this->_disconnect($fp); - - if($this->_redirectaddr) - { - /* url was redirected, check if we've hit the max depth */ - if($this->maxredirs > $this->_redirectdepth) - { - if(!preg_match("|^".$URI_PARTS["scheme"]."://|", $this->_redirectaddr)) - $this->_redirectaddr = $this->_expandlinks($this->_redirectaddr,$URI_PARTS["scheme"]."://".$URI_PARTS["host"]); - - // only follow redirect if it's on this site, or offsiteok is true - if(preg_match("|^http://".preg_quote($this->host)."|i",$this->_redirectaddr) || $this->offsiteok) - { - /* follow the redirect */ - $this->_redirectdepth++; - $this->lastredirectaddr=$this->_redirectaddr; - if( strpos( $this->_redirectaddr, "?" ) > 0 ) - $this->fetch($this->_redirectaddr); // the redirect has changed the request method from post to get - else - $this->submit($this->_redirectaddr,$formvars, $formfiles); - } - } - } - - if($this->_framedepth < $this->maxframes && count($this->_frameurls) > 0) - { - $frameurls = $this->_frameurls; - $this->_frameurls = array(); - - while(list(,$frameurl) = each($frameurls)) - { - if($this->_framedepth < $this->maxframes) - { - $this->fetch($frameurl); - $this->_framedepth++; - } - else - break; - } - } - - } - else - { - return false; - } - return true; - break; - case "https": - if(!$this->curl_path) - return false; - if(function_exists("is_executable")) - if (!is_executable($this->curl_path)) - return false; - $this->host = $URI_PARTS["host"]; - if(!empty($URI_PARTS["port"])) - $this->port = $URI_PARTS["port"]; - if($this->_isproxy) - { - // using proxy, send entire URI - $this->_httpsrequest($URI, $URI, $this->_submit_method, $this->_submit_type, $postdata); - } - else - { - $path = $URI_PARTS["path"].($URI_PARTS["query"] ? "?".$URI_PARTS["query"] : ""); - // no proxy, send only the path - $this->_httpsrequest($path, $URI, $this->_submit_method, $this->_submit_type, $postdata); - } - - if($this->_redirectaddr) - { - /* url was redirected, check if we've hit the max depth */ - if($this->maxredirs > $this->_redirectdepth) - { - if(!preg_match("|^".$URI_PARTS["scheme"]."://|", $this->_redirectaddr)) - $this->_redirectaddr = $this->_expandlinks($this->_redirectaddr,$URI_PARTS["scheme"]."://".$URI_PARTS["host"]); - - // only follow redirect if it's on this site, or offsiteok is true - if(preg_match("|^http://".preg_quote($this->host)."|i",$this->_redirectaddr) || $this->offsiteok) - { - /* follow the redirect */ - $this->_redirectdepth++; - $this->lastredirectaddr=$this->_redirectaddr; - if( strpos( $this->_redirectaddr, "?" ) > 0 ) - $this->fetch($this->_redirectaddr); // the redirect has changed the request method from post to get - else - $this->submit($this->_redirectaddr,$formvars, $formfiles); - } - } - } - - if($this->_framedepth < $this->maxframes && count($this->_frameurls) > 0) - { - $frameurls = $this->_frameurls; - $this->_frameurls = array(); - - while(list(,$frameurl) = each($frameurls)) - { - if($this->_framedepth < $this->maxframes) - { - $this->fetch($frameurl); - $this->_framedepth++; - } - else - break; - } - } - return true; - break; - - default: - // not a valid protocol - $this->error = 'Invalid protocol "'.$URI_PARTS["scheme"].'"\n'; - return false; - break; - } - return true; - } - -/*======================================================================*\ - Function: fetchlinks - Purpose: fetch the links from a web page - Input: $URI where you are fetching from - Output: $this->results an array of the URLs -\*======================================================================*/ - - function fetchlinks($URI) - { - if ($this->fetch($URI)) - { - if($this->lastredirectaddr) - $URI = $this->lastredirectaddr; - if(is_array($this->results)) - { - for($x=0;$xresults);$x++) - $this->results[$x] = $this->_striplinks($this->results[$x]); - } - else - $this->results = $this->_striplinks($this->results); - - if($this->expandlinks) - $this->results = $this->_expandlinks($this->results, $URI); - return true; - } - else - return false; - } - -/*======================================================================*\ - Function: fetchform - Purpose: fetch the form elements from a web page - Input: $URI where you are fetching from - Output: $this->results the resulting html form -\*======================================================================*/ - - function fetchform($URI) - { - - if ($this->fetch($URI)) - { - - if(is_array($this->results)) - { - for($x=0;$xresults);$x++) - $this->results[$x] = $this->_stripform($this->results[$x]); - } - else - $this->results = $this->_stripform($this->results); - - return true; - } - else - return false; - } - - -/*======================================================================*\ - Function: fetchtext - Purpose: fetch the text from a web page, stripping the links - Input: $URI where you are fetching from - Output: $this->results the text from the web page -\*======================================================================*/ - - function fetchtext($URI) - { - if($this->fetch($URI)) - { - if(is_array($this->results)) - { - for($x=0;$xresults);$x++) - $this->results[$x] = $this->_striptext($this->results[$x]); - } - else - $this->results = $this->_striptext($this->results); - return true; - } - else - return false; - } - -/*======================================================================*\ - Function: submitlinks - Purpose: grab links from a form submission - Input: $URI where you are submitting from - Output: $this->results an array of the links from the post -\*======================================================================*/ - - function submitlinks($URI, $formvars="", $formfiles="") - { - if($this->submit($URI,$formvars, $formfiles)) - { - if($this->lastredirectaddr) - $URI = $this->lastredirectaddr; - if(is_array($this->results)) - { - for($x=0;$xresults);$x++) - { - $this->results[$x] = $this->_striplinks($this->results[$x]); - if($this->expandlinks) - $this->results[$x] = $this->_expandlinks($this->results[$x],$URI); - } - } - else - { - $this->results = $this->_striplinks($this->results); - if($this->expandlinks) - $this->results = $this->_expandlinks($this->results,$URI); - } - return true; - } - else - return false; - } - -/*======================================================================*\ - Function: submittext - Purpose: grab text from a form submission - Input: $URI where you are submitting from - Output: $this->results the text from the web page -\*======================================================================*/ - - function submittext($URI, $formvars = "", $formfiles = "") - { - if($this->submit($URI,$formvars, $formfiles)) - { - if($this->lastredirectaddr) - $URI = $this->lastredirectaddr; - if(is_array($this->results)) - { - for($x=0;$xresults);$x++) - { - $this->results[$x] = $this->_striptext($this->results[$x]); - if($this->expandlinks) - $this->results[$x] = $this->_expandlinks($this->results[$x],$URI); - } - } - else - { - $this->results = $this->_striptext($this->results); - if($this->expandlinks) - $this->results = $this->_expandlinks($this->results,$URI); - } - return true; - } - else - return false; - } - - - -/*======================================================================*\ - Function: set_submit_multipart - Purpose: Set the form submission content type to - multipart/form-data -\*======================================================================*/ - function set_submit_multipart() - { - $this->_submit_type = "multipart/form-data"; - } - - -/*======================================================================*\ - Function: set_submit_normal - Purpose: Set the form submission content type to - application/x-www-form-urlencoded -\*======================================================================*/ - function set_submit_normal() - { - $this->_submit_type = "application/x-www-form-urlencoded"; - } - - - - -/*======================================================================*\ - Private functions -\*======================================================================*/ - - -/*======================================================================*\ - Function: _striplinks - Purpose: strip the hyperlinks from an html document - Input: $document document to strip. - Output: $match an array of the links -\*======================================================================*/ - - function _striplinks($document) - { - preg_match_all("'<\s*a\s.*?href\s*=\s* # find ]+)) # if quote found, match up to next matching - # quote, otherwise match up to next space - 'isx",$document,$links); - - - // catenate the non-empty matches from the conditional subpattern - - while(list($key,$val) = each($links[2])) - { - if(!empty($val)) - $match[] = $val; - } - - while(list($key,$val) = each($links[3])) - { - if(!empty($val)) - $match[] = $val; - } - - // return the links - return $match; - } - -/*======================================================================*\ - Function: _stripform - Purpose: strip the form elements from an html document - Input: $document document to strip. - Output: $match an array of the links -\*======================================================================*/ - - function _stripform($document) - { - preg_match_all("'<\/?(FORM|INPUT|SELECT|TEXTAREA|(OPTION))[^<>]*>(?(2)(.*(?=<\/?(option|select)[^<>]*>[\r\n]*)|(?=[\r\n]*))|(?=[\r\n]*))'Usi",$document,$elements); - - // catenate the matches - $match = implode("\r\n",$elements[0]); - - // return the links - return $match; - } - - - -/*======================================================================*\ - Function: _striptext - Purpose: strip the text from an html document - Input: $document document to strip. - Output: $text the resulting text -\*======================================================================*/ - - function _striptext($document) - { - - // I didn't use preg eval (//e) since that is only available in PHP 4.0. - // so, list your entities one by one here. I included some of the - // more common ones. - - $search = array("']*?>.*?'si", // strip out javascript - "'<[\/\!]*?[^<>]*?>'si", // strip out html tags - "'([\r\n])[\s]+'", // strip out white space - "'&(quot|#34|#034|#x22);'i", // replace html entities - "'&(amp|#38|#038|#x26);'i", // added hexadecimal values - "'&(lt|#60|#060|#x3c);'i", - "'&(gt|#62|#062|#x3e);'i", - "'&(nbsp|#160|#xa0);'i", - "'&(iexcl|#161);'i", - "'&(cent|#162);'i", - "'&(pound|#163);'i", - "'&(copy|#169);'i", - "'&(reg|#174);'i", - "'&(deg|#176);'i", - "'&(#39|#039|#x27);'", - "'&(euro|#8364);'i", // europe - "'&a(uml|UML);'", // german - "'&o(uml|UML);'", - "'&u(uml|UML);'", - "'&A(uml|UML);'", - "'&O(uml|UML);'", - "'&U(uml|UML);'", - "'ß'i", - ); - $replace = array( "", - "", - "\\1", - "\"", - "&", - "<", - ">", - " ", - chr(161), - chr(162), - chr(163), - chr(169), - chr(174), - chr(176), - chr(39), - chr(128), - "ä", - "ö", - "ü", - "Ä", - "Ö", - "Ü", - "ß", - ); - - $text = preg_replace($search,$replace,$document); - - return $text; - } - -/*======================================================================*\ - Function: _expandlinks - Purpose: expand each link into a fully qualified URL - Input: $links the links to qualify - $URI the full URI to get the base from - Output: $expandedLinks the expanded links -\*======================================================================*/ - - function _expandlinks($links,$URI) - { - - preg_match("/^[^\?]+/",$URI,$match); - - $match = preg_replace("|/[^\/\.]+\.[^\/\.]+$|","",$match[0]); - $match = preg_replace("|/$|","",$match); - $match_part = parse_url($match); - $match_root = - $match_part["scheme"]."://".$match_part["host"]; - - $search = array( "|^http://".preg_quote($this->host)."|i", - "|^(\/)|i", - "|^(?!http://)(?!mailto:)|i", - "|/\./|", - "|/[^\/]+/\.\./|" - ); - - $replace = array( "", - $match_root."/", - $match."/", - "/", - "/" - ); - - $expandedLinks = preg_replace($search,$replace,$links); - - return $expandedLinks; - } - -/*======================================================================*\ - Function: _httprequest - Purpose: go get the http data from the server - Input: $url the url to fetch - $fp the current open file pointer - $URI the full URI - $body body contents to send if any (POST) - Output: -\*======================================================================*/ - - function _httprequest($url,$fp,$URI,$http_method,$content_type="",$body="") - { - $cookie_headers = ''; - if($this->passcookies && $this->_redirectaddr) - $this->setcookies(); - - $URI_PARTS = parse_url($URI); - if(empty($url)) - $url = "/"; - $headers = $http_method." ".$url." ".$this->_httpversion."\r\n"; - if(!empty($this->agent)) - $headers .= "User-Agent: ".$this->agent."\r\n"; - if(!empty($this->host) && !isset($this->rawheaders['Host'])) { - $headers .= "Host: ".$this->host; - if(!empty($this->port)) - $headers .= ":".$this->port; - $headers .= "\r\n"; - } - if(!empty($this->accept)) - $headers .= "Accept: ".$this->accept."\r\n"; - if(!empty($this->referer)) - $headers .= "Referer: ".$this->referer."\r\n"; - if(!empty($this->cookies)) - { - if(!is_array($this->cookies)) - $this->cookies = (array)$this->cookies; - - reset($this->cookies); - if ( count($this->cookies) > 0 ) { - $cookie_headers .= 'Cookie: '; - foreach ( $this->cookies as $cookieKey => $cookieVal ) { - $cookie_headers .= $cookieKey."=".urlencode($cookieVal)."; "; - } - $headers .= substr($cookie_headers,0,-2) . "\r\n"; - } - } - if(!empty($this->rawheaders)) - { - if(!is_array($this->rawheaders)) - $this->rawheaders = (array)$this->rawheaders; - while(list($headerKey,$headerVal) = each($this->rawheaders)) - $headers .= $headerKey.": ".$headerVal."\r\n"; - } - if(!empty($content_type)) { - $headers .= "Content-type: $content_type"; - if ($content_type == "multipart/form-data") - $headers .= "; boundary=".$this->_mime_boundary; - $headers .= "\r\n"; - } - if(!empty($body)) - $headers .= "Content-length: ".strlen($body)."\r\n"; - if(!empty($this->user) || !empty($this->pass)) - $headers .= "Authorization: Basic ".base64_encode($this->user.":".$this->pass)."\r\n"; - - //add proxy auth headers - if(!empty($this->proxy_user)) - $headers .= 'Proxy-Authorization: ' . 'Basic ' . base64_encode($this->proxy_user . ':' . $this->proxy_pass)."\r\n"; - - - $headers .= "\r\n"; - - // set the read timeout if needed - if ($this->read_timeout > 0) - socket_set_timeout($fp, $this->read_timeout); - $this->timed_out = false; - - fwrite($fp,$headers.$body,strlen($headers.$body)); - - $this->_redirectaddr = false; - unset($this->headers); - - while($currentHeader = fgets($fp,$this->_maxlinelen)) - { - if ($this->read_timeout > 0 && $this->_check_timeout($fp)) - { - $this->status=-100; - return false; - } - - if($currentHeader == "\r\n") - break; - - // if a header begins with Location: or URI:, set the redirect - if(preg_match("/^(Location:|URI:)/i",$currentHeader)) - { - // get URL portion of the redirect - preg_match("/^(Location:|URI:)[ ]+(.*)/i",chop($currentHeader),$matches); - // look for :// in the Location header to see if hostname is included - if(!preg_match("|\:\/\/|",$matches[2])) - { - // no host in the path, so prepend - $this->_redirectaddr = $URI_PARTS["scheme"]."://".$this->host.":".$this->port; - // eliminate double slash - if(!preg_match("|^/|",$matches[2])) - $this->_redirectaddr .= "/".$matches[2]; - else - $this->_redirectaddr .= $matches[2]; - } - else - $this->_redirectaddr = $matches[2]; - } - - if(preg_match("|^HTTP/|",$currentHeader)) - { - if(preg_match("|^HTTP/[^\s]*\s(.*?)\s|",$currentHeader, $status)) - { - $this->status= $status[1]; - } - $this->response_code = $currentHeader; - } - - $this->headers[] = $currentHeader; - } - - $results = ''; - do { - $_data = fread($fp, $this->maxlength); - if (strlen($_data) == 0) { - break; - } - $results .= $_data; - } while(true); - - if ($this->read_timeout > 0 && $this->_check_timeout($fp)) - { - $this->status=-100; - return false; - } - - // check if there is a a redirect meta tag - - if(preg_match("']*?content[\s]*=[\s]*[\"\']?\d+;[\s]*URL[\s]*=[\s]*([^\"\']*?)[\"\']?>'i",$results,$match)) - - { - $this->_redirectaddr = $this->_expandlinks($match[1],$URI); - } - - // have we hit our frame depth and is there frame src to fetch? - if(($this->_framedepth < $this->maxframes) && preg_match_all("']+)'i",$results,$match)) - { - $this->results[] = $results; - for($x=0; $x_frameurls[] = $this->_expandlinks($match[1][$x],$URI_PARTS["scheme"]."://".$this->host); - } - // have we already fetched framed content? - elseif(is_array($this->results)) - $this->results[] = $results; - // no framed content - else - $this->results = $results; - - return true; - } - -/*======================================================================*\ - Function: _httpsrequest - Purpose: go get the https data from the server using curl - Input: $url the url to fetch - $URI the full URI - $body body contents to send if any (POST) - Output: -\*======================================================================*/ - - function _httpsrequest($url,$URI,$http_method,$content_type="",$body="") - { - if($this->passcookies && $this->_redirectaddr) - $this->setcookies(); - - $headers = array(); - - $URI_PARTS = parse_url($URI); - if(empty($url)) - $url = "/"; - // GET ... header not needed for curl - //$headers[] = $http_method." ".$url." ".$this->_httpversion; - if(!empty($this->agent)) - $headers[] = "User-Agent: ".$this->agent; - if(!empty($this->host)) - if(!empty($this->port)) - $headers[] = "Host: ".$this->host.":".$this->port; - else - $headers[] = "Host: ".$this->host; - if(!empty($this->accept)) - $headers[] = "Accept: ".$this->accept; - if(!empty($this->referer)) - $headers[] = "Referer: ".$this->referer; - if(!empty($this->cookies)) - { - if(!is_array($this->cookies)) - $this->cookies = (array)$this->cookies; - - reset($this->cookies); - if ( count($this->cookies) > 0 ) { - $cookie_str = 'Cookie: '; - foreach ( $this->cookies as $cookieKey => $cookieVal ) { - $cookie_str .= $cookieKey."=".urlencode($cookieVal)."; "; - } - $headers[] = substr($cookie_str,0,-2); - } - } - if(!empty($this->rawheaders)) - { - if(!is_array($this->rawheaders)) - $this->rawheaders = (array)$this->rawheaders; - while(list($headerKey,$headerVal) = each($this->rawheaders)) - $headers[] = $headerKey.": ".$headerVal; - } - if(!empty($content_type)) { - if ($content_type == "multipart/form-data") - $headers[] = "Content-type: $content_type; boundary=".$this->_mime_boundary; - else - $headers[] = "Content-type: $content_type"; - } - if(!empty($body)) - $headers[] = "Content-length: ".strlen($body); - if(!empty($this->user) || !empty($this->pass)) - $headers[] = "Authorization: BASIC ".base64_encode($this->user.":".$this->pass); - - for($curr_header = 0; $curr_header < count($headers); $curr_header++) { - $safer_header = strtr( $headers[$curr_header], "\"", " " ); - $cmdline_params .= " -H \"".$safer_header."\""; - } - - if(!empty($body)) - $cmdline_params .= " -d \"$body\""; - - if($this->read_timeout > 0) - $cmdline_params .= " -m ".$this->read_timeout; - - $headerfile = tempnam($temp_dir, "sno"); - - exec($this->curl_path." -k -D \"$headerfile\"".$cmdline_params." \"".escapeshellcmd($URI)."\"",$results,$return); - - if($return) - { - $this->error = "Error: cURL could not retrieve the document, error $return."; - return false; - } - - - $results = implode("\r\n",$results); - - $result_headers = file("$headerfile"); - - $this->_redirectaddr = false; - unset($this->headers); - - for($currentHeader = 0; $currentHeader < count($result_headers); $currentHeader++) - { - - // if a header begins with Location: or URI:, set the redirect - if(preg_match("/^(Location: |URI: )/i",$result_headers[$currentHeader])) - { - // get URL portion of the redirect - preg_match("/^(Location: |URI:)\s+(.*)/",chop($result_headers[$currentHeader]),$matches); - // look for :// in the Location header to see if hostname is included - if(!preg_match("|\:\/\/|",$matches[2])) - { - // no host in the path, so prepend - $this->_redirectaddr = $URI_PARTS["scheme"]."://".$this->host.":".$this->port; - // eliminate double slash - if(!preg_match("|^/|",$matches[2])) - $this->_redirectaddr .= "/".$matches[2]; - else - $this->_redirectaddr .= $matches[2]; - } - else - $this->_redirectaddr = $matches[2]; - } - - if(preg_match("|^HTTP/|",$result_headers[$currentHeader])) - $this->response_code = $result_headers[$currentHeader]; - - $this->headers[] = $result_headers[$currentHeader]; - } - - // check if there is a a redirect meta tag - - if(preg_match("']*?content[\s]*=[\s]*[\"\']?\d+;[\s]*URL[\s]*=[\s]*([^\"\']*?)[\"\']?>'i",$results,$match)) - { - $this->_redirectaddr = $this->_expandlinks($match[1],$URI); - } - - // have we hit our frame depth and is there frame src to fetch? - if(($this->_framedepth < $this->maxframes) && preg_match_all("']+)'i",$results,$match)) - { - $this->results[] = $results; - for($x=0; $x_frameurls[] = $this->_expandlinks($match[1][$x],$URI_PARTS["scheme"]."://".$this->host); - } - // have we already fetched framed content? - elseif(is_array($this->results)) - $this->results[] = $results; - // no framed content - else - $this->results = $results; - - unlink("$headerfile"); - - return true; - } - -/*======================================================================*\ - Function: setcookies() - Purpose: set cookies for a redirection -\*======================================================================*/ - - function setcookies() - { - for($x=0; $xheaders); $x++) - { - if(preg_match('/^set-cookie:[\s]+([^=]+)=([^;]+)/i', $this->headers[$x],$match)) - $this->cookies[$match[1]] = urldecode($match[2]); - } - } - - -/*======================================================================*\ - Function: _check_timeout - Purpose: checks whether timeout has occurred - Input: $fp file pointer -\*======================================================================*/ - - function _check_timeout($fp) - { - if ($this->read_timeout > 0) { - $fp_status = socket_get_status($fp); - if ($fp_status["timed_out"]) { - $this->timed_out = true; - return true; - } - } - return false; - } - -/*======================================================================*\ - Function: _connect - Purpose: make a socket connection - Input: $fp file pointer -\*======================================================================*/ - - function _connect(&$fp) - { - if(!empty($this->proxy_host) && !empty($this->proxy_port)) - { - $this->_isproxy = true; - - $host = $this->proxy_host; - $port = $this->proxy_port; - } - else - { - $host = $this->host; - $port = $this->port; - } - - $this->status = 0; - - if($fp = fsockopen( - $host, - $port, - $errno, - $errstr, - $this->_fp_timeout - )) - { - // socket connection succeeded - - return true; - } - else - { - // socket connection failed - $this->status = $errno; - switch($errno) - { - case -3: - $this->error="socket creation failed (-3)"; - case -4: - $this->error="dns lookup failure (-4)"; - case -5: - $this->error="connection refused or timed out (-5)"; - default: - $this->error="connection failed (".$errno.")"; - } - return false; - } - } -/*======================================================================*\ - Function: _disconnect - Purpose: disconnect a socket connection - Input: $fp file pointer -\*======================================================================*/ - - function _disconnect($fp) - { - return(fclose($fp)); - } - - -/*======================================================================*\ - Function: _prepare_post_body - Purpose: Prepare post body according to encoding type - Input: $formvars - form variables - $formfiles - form upload files - Output: post body -\*======================================================================*/ - - function _prepare_post_body($formvars, $formfiles) - { - settype($formvars, "array"); - settype($formfiles, "array"); - $postdata = ''; - - if (count($formvars) == 0 && count($formfiles) == 0) - return; - - switch ($this->_submit_type) { - case "application/x-www-form-urlencoded": - reset($formvars); - while(list($key,$val) = each($formvars)) { - if (is_array($val) || is_object($val)) { - while (list($cur_key, $cur_val) = each($val)) { - $postdata .= urlencode($key)."[]=".urlencode($cur_val)."&"; - } - } else - $postdata .= urlencode($key)."=".urlencode($val)."&"; - } - break; - - case "multipart/form-data": - $this->_mime_boundary = "Snoopy".md5(uniqid(microtime())); - - reset($formvars); - while(list($key,$val) = each($formvars)) { - if (is_array($val) || is_object($val)) { - while (list($cur_key, $cur_val) = each($val)) { - $postdata .= "--".$this->_mime_boundary."\r\n"; - $postdata .= "Content-Disposition: form-data; name=\"$key\[\]\"\r\n\r\n"; - $postdata .= "$cur_val\r\n"; - } - } else { - $postdata .= "--".$this->_mime_boundary."\r\n"; - $postdata .= "Content-Disposition: form-data; name=\"$key\"\r\n\r\n"; - $postdata .= "$val\r\n"; - } - } - - reset($formfiles); - while (list($field_name, $file_names) = each($formfiles)) { - settype($file_names, "array"); - while (list(, $file_name) = each($file_names)) { - if (!is_readable($file_name)) continue; - - $fp = fopen($file_name, "r"); - $file_content = fread($fp, filesize($file_name)); - fclose($fp); - $base_name = basename($file_name); - - $postdata .= "--".$this->_mime_boundary."\r\n"; - $postdata .= "Content-Disposition: form-data; name=\"$field_name\"; filename=\"$base_name\"\r\n\r\n"; - $postdata .= "$file_content\r\n"; - } - } - $postdata .= "--".$this->_mime_boundary."--\r\n"; - break; - } - - return $postdata; - } -} - -?> --- a/owa/includes/class.inputfilter.php +++ /dev/null @@ -1,314 +1,1 @@ -tagsArray = (array) $tagsArray; - $this->attrArray = (array) $attrArray; - $this->tagsMethod = $tagsMethod; - $this->attrMethod = $attrMethod; - $this->xssAuto = $xssAuto; - } - - /** - * Method to be called by another php script. Processes for XSS and specified bad code. - * @access public - * @param Mixed $source - input string/array-of-string to be 'cleaned' - * @return String $source - 'cleaned' version of input parameter - */ - function process($source) { - // clean all elements in this array - if (is_array($source)) { - foreach($source as $key => $value) - // filter element for XSS and other 'bad' code etc. - if (is_string($value)) $source[$key] = $this->remove($this->decode($value)); - return $source; - // clean this string - } else if (is_string($source)) { - // filter source for XSS and other 'bad' code etc. - return $this->remove($this->decode($source)); - // return parameter as given - } else return $source; - } - - /** - * Internal method to iteratively remove all unwanted tags and attributes - * @access protected - * @param String $source - input string to be 'cleaned' - * @return String $source - 'cleaned' version of input parameter - */ - function remove($source) { - $loopCounter=0; - // provides nested-tag protection - while($source != $this->filterTags($source)) { - $source = $this->filterTags($source); - $loopCounter++; - } - return $source; - } - - /** - * Internal method to strip a string of certain tags - * @access protected - * @param String $source - input string to be 'cleaned' - * @return String $source - 'cleaned' version of input parameter - */ - function filterTags($source) { - // filter pass setup - $preTag = NULL; - $postTag = $source; - // find initial tag's position - $tagOpen_start = strpos($source, '<'); - // interate through string until no tags left - while($tagOpen_start !== FALSE) { - // process tag interatively - $preTag .= substr($postTag, 0, $tagOpen_start); - $postTag = substr($postTag, $tagOpen_start); - $fromTagOpen = substr($postTag, 1); - // end of tag - $tagOpen_end = strpos($fromTagOpen, '>'); - if ($tagOpen_end === false) break; - // next start of tag (for nested tag assessment) - $tagOpen_nested = strpos($fromTagOpen, '<'); - if (($tagOpen_nested !== false) && ($tagOpen_nested < $tagOpen_end)) { - $preTag .= substr($postTag, 0, ($tagOpen_nested+1)); - $postTag = substr($postTag, ($tagOpen_nested+1)); - $tagOpen_start = strpos($postTag, '<'); - continue; - } - $tagOpen_nested = (strpos($fromTagOpen, '<') + $tagOpen_start + 1); - $currentTag = substr($fromTagOpen, 0, $tagOpen_end); - $tagLength = strlen($currentTag); - if (!$tagOpen_end) { - $preTag .= $postTag; - $tagOpen_start = strpos($postTag, '<'); - } - // iterate through tag finding attribute pairs - setup - $tagLeft = $currentTag; - $attrSet = array(); - $currentSpace = strpos($tagLeft, ' '); - // is end tag - if (substr($currentTag, 0, 1) == "/") { - $isCloseTag = TRUE; - list($tagName) = explode(' ', $currentTag); - $tagName = substr($tagName, 1); - // is start tag - } else { - $isCloseTag = FALSE; - list($tagName) = explode(' ', $currentTag); - } - // excludes all "non-regular" tagnames OR no tagname OR remove if xssauto is on and tag is blacklisted - if ((!preg_match("/^[a-z][a-z0-9]*$/i",$tagName)) || (!$tagName) || ((in_array(strtolower($tagName), $this->tagBlacklist)) && ($this->xssAuto))) { - $postTag = substr($postTag, ($tagLength + 2)); - $tagOpen_start = strpos($postTag, '<'); - // don't append this tag - continue; - } - // this while is needed to support attribute values with spaces in! - while ($currentSpace !== FALSE) { - $fromSpace = substr($tagLeft, ($currentSpace+1)); - $nextSpace = strpos($fromSpace, ' '); - $openQuotes = strpos($fromSpace, '"'); - $closeQuotes = strpos(substr($fromSpace, ($openQuotes+1)), '"') + $openQuotes + 1; - // another equals exists - if (strpos($fromSpace, '=') !== FALSE) { - // opening and closing quotes exists - if (($openQuotes !== FALSE) && (strpos(substr($fromSpace, ($openQuotes+1)), '"') !== FALSE)) - $attr = substr($fromSpace, 0, ($closeQuotes+1)); - // one or neither exist - else $attr = substr($fromSpace, 0, $nextSpace); - // no more equals exist - } else $attr = substr($fromSpace, 0, $nextSpace); - // last attr pair - if (!$attr) $attr = $fromSpace; - // add to attribute pairs array - $attrSet[] = $attr; - // next inc - $tagLeft = substr($fromSpace, strlen($attr)); - $currentSpace = strpos($tagLeft, ' '); - } - // appears in array specified by user - $tagFound = in_array(strtolower($tagName), $this->tagsArray); - // remove this tag on condition - if ((!$tagFound && $this->tagsMethod) || ($tagFound && !$this->tagsMethod)) { - // reconstruct tag with allowed attributes - if (!$isCloseTag) { - $attrSet = $this->filterAttr($attrSet); - $preTag .= '<' . $tagName; - for ($i = 0; $i < count($attrSet); $i++) - $preTag .= ' ' . $attrSet[$i]; - // reformat single tags to XHTML - if (strpos($fromTagOpen, "'; - else $preTag .= ' />'; - // just the tagname - } else $preTag .= ''; - } - // find next tag's start - $postTag = substr($postTag, ($tagLength + 2)); - $tagOpen_start = strpos($postTag, '<'); - } - // append any code after end of tags - $preTag .= $postTag; - return $preTag; - } - - /** - * Internal method to strip a tag of certain attributes - * @access protected - * @param Array $attrSet - * @return Array $newSet - */ - function filterAttr($attrSet) { - $newSet = array(); - // process attributes - for ($i = 0; $i xssAuto) && ((in_array(strtolower($attrSubSet[0]), $this->attrBlacklist)) || (substr($attrSubSet[0], 0, 2) == 'on')))) - continue; - // xss attr value filtering - if ($attrSubSet[1]) { - // strips unicode, hex, etc - $attrSubSet[1] = str_replace('&#', '', $attrSubSet[1]); - // strip normal newline within attr value - $attrSubSet[1] = preg_replace('/\s+/', '', $attrSubSet[1]); - // strip double quotes - $attrSubSet[1] = str_replace('"', '', $attrSubSet[1]); - // [requested feature] convert single quotes from either side to doubles (Single quotes shouldn't be used to pad attr value) - if ((substr($attrSubSet[1], 0, 1) == "'") && (substr($attrSubSet[1], (strlen($attrSubSet[1]) - 1), 1) == "'")) - $attrSubSet[1] = substr($attrSubSet[1], 1, (strlen($attrSubSet[1]) - 2)); - // strip slashes - $attrSubSet[1] = stripslashes($attrSubSet[1]); - } - // auto strip attr's with "javascript: - if ( ((strpos(strtolower($attrSubSet[1]), 'expression') !== false) && (strtolower($attrSubSet[0]) == 'style')) || - (strpos(strtolower($attrSubSet[1]), 'javascript:') !== false) || - (strpos(strtolower($attrSubSet[1]), 'behaviour:') !== false) || - (strpos(strtolower($attrSubSet[1]), 'vbscript:') !== false) || - (strpos(strtolower($attrSubSet[1]), 'mocha:') !== false) || - (strpos(strtolower($attrSubSet[1]), 'livescript:') !== false) - ) continue; - - // if matches user defined array - $attrFound = in_array(strtolower($attrSubSet[0]), $this->attrArray); - // keep this attr on condition - if ((!$attrFound && $this->attrMethod) || ($attrFound && !$this->attrMethod)) { - // attr has value - if ($attrSubSet[1]) $newSet[] = $attrSubSet[0] . '="' . $attrSubSet[1] . '"'; - // attr has decimal zero as value - else if ($attrSubSet[1] == "0") $newSet[] = $attrSubSet[0] . '="0"'; - // reformat single attributes to XHTML - else $newSet[] = $attrSubSet[0] . '="' . $attrSubSet[0] . '"'; - } - } - return $newSet; - } - - /** - * Try to convert to plaintext - * @access protected - * @param String $source - * @return String $source - */ - function decode($source) { - // url decode - $source = html_entity_decode($source, ENT_QUOTES, "ISO-8859-1"); - // convert decimal - $source = preg_replace('/&#(\d+);/me',"chr(\\1)", $source); // decimal notation - // convert hex - $source = preg_replace('/&#x([a-f0-9]+);/mei',"chr(0x\\1)", $source); // hex notation - return $source; - } - - /** - * Method to be called by another php script. Processes for SQL injection - * @access public - * @param Mixed $source - input string/array-of-string to be 'cleaned' - * @param Buffer $connection - An open MySQL connection - * @return String $source - 'cleaned' version of input parameter - */ - function safeSQL($source, &$connection) { - // clean all elements in this array - if (is_array($source)) { - foreach($source as $key => $value) - // filter element for SQL injection - if (is_string($value)) $source[$key] = $this->quoteSmart($this->decode($value), $connection); - return $source; - // clean this string - } else if (is_string($source)) { - // filter source for SQL injection - if (is_string($source)) return $this->quoteSmart($this->decode($source), $connection); - // return parameter as given - } else return $source; - } - - /** - * @author Chris Tobin - * @author Daniel Morris - * @access protected - * @param String $source - * @param Resource $connection - An open MySQL connection - * @return String $source - */ - function quoteSmart($source, &$connection) { - // strip slashes - if (get_magic_quotes_gpc()) $source = stripslashes($source); - // quote both numeric and text - $source = $this->escapeString($source, $connection); - return $source; - } - - /** - * @author Chris Tobin - * @author Daniel Morris - * @access protected - * @param String $source - * @param Resource $connection - An open MySQL connection - * @return String $source - */ - function escapeString($string, &$connection) { - // depreciated function - if (version_compare(phpversion(),"4.3.0", "<")) mysql_escape_string($string); - // current function - else mysql_real_escape_string($string); - return $string; - } -} - -?> --- a/owa/includes/httpclient-2009-09-02/LICENSE.txt +++ /dev/null @@ -1,37 +1,1 @@ -HTTP client PHP class -This LICENSE is in the BSD license style. - -License Version Control: -@(#) $Id: LICENSE.txt,v 1.1 2006/04/17 19:44:04 mlemos Exp $ - -Copyright (c) 1999 - 2006, Manuel Lemos -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - 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. - - Neither the name of Manuel Lemos nor the names of his contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"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 REGENTS OR -CONTRIBUTORS 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. - --- a/owa/includes/httpclient-2009-09-02/http.php +++ /dev/null @@ -1,1982 +1,1 @@ -"01", - "Feb"=>"02", - "Mar"=>"03", - "Apr"=>"04", - "May"=>"05", - "Jun"=>"06", - "Jul"=>"07", - "Aug"=>"08", - "Sep"=>"09", - "Oct"=>"10", - "Nov"=>"11", - "Dec"=>"12"); - var $session=''; - var $connection_close=0; - - /* Private methods - DO NOT CALL */ - - Function Tokenize($string,$separator="") - { - if(!strcmp($separator,"")) - { - $separator=$string; - $string=$this->next_token; - } - for($character=0;$characternext_token=substr($string,$found+1); - return(substr($string,0,$found)); - } - else - { - $this->next_token=""; - return($string); - } - } - - Function CookieEncode($value, $name) - { - return($name ? str_replace("=", "%25", $value) : str_replace(";", "%3B", $value)); - } - - Function SetError($error) - { - return($this->error=$error); - } - - Function SetPHPError($error, &$php_error_message) - { - if(IsSet($php_error_message) - && strlen($php_error_message)) - $error.=": ".$php_error_message; - return($this->SetError($error)); - } - - Function SetDataAccessError($error,$check_connection=0) - { - $this->error=$error; - if(!$this->use_curl - && function_exists("socket_get_status")) - { - $status=socket_get_status($this->connection); - if($status["timed_out"]) - $this->error.=": data access time out"; - elseif($status["eof"]) - { - if($check_connection) - $this->error=""; - else - $this->error.=": the server disconnected"; - } - } - } - - Function OutputDebug($message) - { - $message.="\n"; - if($this->html_debug) - $message=str_replace("\n","
    \n",HtmlEntities($message)); - echo $message; - flush(); - } - - Function GetLine() - { - for($line="";;) - { - if($this->use_curl) - { - $eol=strpos($this->response,"\n",$this->read_response); - $data=($eol ? substr($this->response,$this->read_response,$eol+1-$this->read_response) : ""); - $this->read_response+=strlen($data); - } - else - { - if(feof($this->connection)) - { - $this->SetDataAccessError("reached the end of data while reading from the HTTP server connection"); - return(0); - } - $data=fgets($this->connection,100); - } - if(GetType($data)!="string" - || strlen($data)==0) - { - $this->SetDataAccessError("it was not possible to read line from the HTTP server"); - return(0); - } - $line.=$data; - $length=strlen($line); - if($length - && !strcmp(substr($line,$length-1,1),"\n")) - { - $length-=(($length>=2 && !strcmp(substr($line,$length-2,1),"\r")) ? 2 : 1); - $line=substr($line,0,$length); - if($this->debug) - $this->OutputDebug("S $line"); - return($line); - } - } - } - - Function PutLine($line) - { - if($this->debug) - $this->OutputDebug("C $line"); - if(!fputs($this->connection,$line."\r\n")) - { - $this->SetDataAccessError("it was not possible to send a line to the HTTP server"); - return(0); - } - return(1); - } - - Function PutData($data) - { - if(strlen($data)) - { - if($this->debug) - $this->OutputDebug('C '.$data); - if(!fputs($this->connection,$data)) - { - $this->SetDataAccessError("it was not possible to send data to the HTTP server"); - return(0); - } - } - return(1); - } - - Function FlushData() - { - if(!fflush($this->connection)) - { - $this->SetDataAccessError("it was not possible to send data to the HTTP server"); - return(0); - } - return(1); - } - - Function ReadChunkSize() - { - if($this->remaining_chunk==0) - { - $debug=$this->debug; - if(!$this->debug_response_body) - $this->debug=0; - $line=$this->GetLine(); - $this->debug=$debug; - if(GetType($line)!="string") - return($this->SetError("4 could not read chunk start: ".$this->error)); - $this->remaining_chunk=hexdec($line); - } - return(""); - } - - Function ReadBytes($length) - { - if($this->use_curl) - { - $bytes=substr($this->response,$this->read_response,min($length,strlen($this->response)-$this->read_response)); - $this->read_response+=strlen($bytes); - if($this->debug - && $this->debug_response_body - && strlen($bytes)) - $this->OutputDebug("S ".$bytes); - } - else - { - if($this->chunked) - { - for($bytes="",$remaining=$length;$remaining;) - { - if(strlen($this->ReadChunkSize())) - return(""); - if($this->remaining_chunk==0) - { - $this->last_chunk_read=1; - break; - } - $ask=min($this->remaining_chunk,$remaining); - $chunk=@fread($this->connection,$ask); - $read=strlen($chunk); - if($read==0) - { - $this->SetDataAccessError("it was not possible to read data chunk from the HTTP server"); - return(""); - } - if($this->debug - && $this->debug_response_body) - $this->OutputDebug("S ".$chunk); - $bytes.=$chunk; - $this->remaining_chunk-=$read; - $remaining-=$read; - if($this->remaining_chunk==0) - { - if(feof($this->connection)) - return($this->SetError("reached the end of data while reading the end of data chunk mark from the HTTP server")); - $data=@fread($this->connection,2); - if(strcmp($data,"\r\n")) - { - $this->SetDataAccessError("it was not possible to read end of data chunk from the HTTP server"); - return(""); - } - } - } - } - else - { - $bytes=@fread($this->connection,$length); - if(strlen($bytes)) - { - if($this->debug - && $this->debug_response_body) - $this->OutputDebug("S ".$bytes); - } - else - $this->SetDataAccessError("it was not possible to read data from the HTTP server", $this->connection_close); - } - } - return($bytes); - } - - Function EndOfInput() - { - if($this->use_curl) - return($this->read_response>=strlen($this->response)); - if($this->chunked) - return($this->last_chunk_read); - return(feof($this->connection)); - } - - Function Resolve($domain, &$ip, $server_type) - { - if(preg_match('/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/',$domain)) - $ip=$domain; - else - { - if($this->debug) - $this->OutputDebug('Resolving '.$server_type.' server domain "'.$domain.'"...'); - if(!strcmp($ip=@gethostbyname($domain),$domain)) - $ip=""; - } - if(strlen($ip)==0 - || (strlen($this->exclude_address) - && !strcmp(@gethostbyname($this->exclude_address),$ip))) - return($this->SetError("could not resolve the host domain \"".$domain."\"")); - return(''); - } - - Function Connect($host_name, $host_port, $ssl, $server_type = 'HTTP') - { - $domain=$host_name; - $port = $host_port; - if(strlen($error = $this->Resolve($domain, $ip, $server_type))) - return($error); - if(strlen($this->socks_host_name)) - { - switch($this->socks_version) - { - case '4': - $version = 4; - break; - case '5': - $version = 5; - break; - default: - return('it was not specified a supported SOCKS protocol version'); - break; - } - $host_ip = $ip; - $port = $this->socks_host_port; - $host_server_type = $server_type; - $server_type = 'SOCKS'; - if(strlen($error = $this->Resolve($this->socks_host_name, $ip, $server_type))) - return($error); - } - if($this->debug) - $this->OutputDebug('Connecting to '.$server_type.' server IP '.$ip.' port '.$port.'...'); - if($ssl) - $ip="ssl://".$ip; - if(($this->connection=($this->timeout ? @fsockopen($ip, $port, $errno, $error, $this->timeout) : @fsockopen($ip, $port, $errno)))==0) - { - switch($errno) - { - case -3: - return($this->SetError("-3 socket could not be created")); - case -4: - return($this->SetError("-4 dns lookup on hostname \"".$host_name."\" failed")); - case -5: - return($this->SetError("-5 connection refused or timed out")); - case -6: - return($this->SetError("-6 fdopen() call failed")); - case -7: - return($this->SetError("-7 setvbuf() call failed")); - default: - return($this->SetPHPError($errno." could not connect to the host \"".$host_name."\"",$php_errormsg)); - } - } - else - { - if($this->data_timeout - && function_exists("socket_set_timeout")) - socket_set_timeout($this->connection,$this->data_timeout,0); - if(strlen($this->socks_host_name)) - { - if($this->debug) - $this->OutputDebug('Connected to the SOCKS server '.$this->socks_host_name); - $send_error = 'it was not possible to send data to the SOCKS server'; - $receive_error = 'it was not possible to receive data from the SOCKS server'; - switch($version) - { - case 4: - $command = 1; - if(!fputs($this->connection, chr($version).chr($command).pack('nN', $host_port, ip2long($host_ip)).$this->user.Chr(0))) - $error = $this->SetDataAccessError($send_error); - else - { - $response = fgets($this->connection, 9); - if(strlen($response) != 8) - $error = $this->SetDataAccessError($receive_error); - else - { - $socks_errors = array( - "\x5a"=>'', - "\x5b"=>'request rejected', - "\x5c"=>'request failed because client is not running identd (or not reachable from the server)', - "\x5d"=>'request failed because client\'s identd could not confirm the user ID string in the request', - ); - $error_code = $response[1]; - $error = (IsSet($socks_errors[$error_code]) ? $socks_errors[$error_code] : 'unknown'); - if(strlen($error)) - $error = 'SOCKS error: '.$error; - } - } - break; - case 5: - if($this->debug) - $this->OutputDebug('Negotiating the authentication method ...'); - $methods = 1; - $method = 0; - if(!fputs($this->connection, chr($version).chr($methods).chr($method))) - $error = $this->SetDataAccessError($send_error); - else - { - $response = fgets($this->connection, 3); - if(strlen($response) != 2) - $error = $this->SetDataAccessError($receive_error); - elseif(Ord($response[1]) != $method) - $error = 'the SOCKS server requires an authentication method that is not yet supported'; - else - { - if($this->debug) - $this->OutputDebug('Connecting to '.$host_server_type.' server IP '.$host_ip.' port '.$host_port.'...'); - $command = 1; - $address_type = 1; - if(!fputs($this->connection, chr($version).chr($command)."\x00".chr($address_type).pack('Nn', ip2long($host_ip), $host_port))) - $error = $this->SetDataAccessError($send_error); - else - { - $response = fgets($this->connection, 11); - if(strlen($response) != 10) - $error = $this->SetDataAccessError($receive_error); - else - { - $socks_errors = array( - "\x00"=>'', - "\x01"=>'general SOCKS server failure', - "\x02"=>'connection not allowed by ruleset', - "\x03"=>'Network unreachable', - "\x04"=>'Host unreachable', - "\x05"=>'Connection refused', - "\x06"=>'TTL expired', - "\x07"=>'Command not supported', - "\x08"=>'Address type not supported' - ); - $error_code = $response[1]; - $error = (IsSet($socks_errors[$error_code]) ? $socks_errors[$error_code] : 'unknown'); - if(strlen($error)) - $error = 'SOCKS error: '.$error; - } - } - } - } - break; - default: - $error = 'support for SOCKS protocol version '.$this->socks_version.' is not yet implemented'; - break; - } - if(strlen($error)) - { - fclose($this->connection); - return($error); - } - } - if($this->debug) - $this->OutputDebug("Connected to $host_name"); - if(strlen($this->proxy_host_name) - && !strcmp(strtolower($this->protocol), 'https')) - { - if(function_exists('stream_socket_enable_crypto') - && in_array('ssl', stream_get_transports())) - $this->state = "ConnectedToProxy"; - else - { - $this->OutputDebug("It is not possible to start SSL after connecting to the proxy server. If the proxy refuses to forward the SSL request, you may need to upgrade to PHP 5.1 or later with OpenSSL support enabled."); - $this->state="Connected"; - } - } - else - $this->state="Connected"; - return(""); - } - } - - Function Disconnect() - { - if($this->debug) - $this->OutputDebug("Disconnected from ".$this->host_name); - if($this->use_curl) - { - curl_close($this->connection); - $this->response=""; - } - else - fclose($this->connection); - $this->state="Disconnected"; - return(""); - } - - /* Public methods */ - - Function GetRequestArguments($url, &$arguments) - { - $this->error = ''; - $arguments=array(); - $url = str_replace(' ', '%20', $url); - $parameters=@parse_url($url); - if(!$parameters) - return($this->SetError("it was not specified a valid URL")); - if(!IsSet($parameters["scheme"])) - return($this->SetError("it was not specified the protocol type argument")); - switch(strtolower($parameters["scheme"])) - { - case "http": - case "https": - $arguments["Protocol"]=$parameters["scheme"]; - break; - default: - return($parameters["scheme"]." connection scheme is not yet supported"); - } - if(!IsSet($parameters["host"])) - return($this->SetError("it was not specified the connection host argument")); - $arguments["HostName"]=$parameters["host"]; - $arguments["Headers"]=array("Host"=>$parameters["host"].(IsSet($parameters["port"]) ? ":".$parameters["port"] : "")); - if(IsSet($parameters["user"])) - { - $arguments["AuthUser"]=UrlDecode($parameters["user"]); - if(!IsSet($parameters["pass"])) - $arguments["AuthPassword"]=""; - } - if(IsSet($parameters["pass"])) - { - if(!IsSet($parameters["user"])) - $arguments["AuthUser"]=""; - $arguments["AuthPassword"]=UrlDecode($parameters["pass"]); - } - if(IsSet($parameters["port"])) - { - if(strcmp($parameters["port"],strval(intval($parameters["port"])))) - return($this->SetError("it was not specified a valid connection host argument")); - $arguments["HostPort"]=intval($parameters["port"]); - } - else - $arguments["HostPort"]=0; - $arguments["RequestURI"]=(IsSet($parameters["path"]) ? $parameters["path"] : "/").(IsSet($parameters["query"]) ? "?".$parameters["query"] : ""); - if(strlen($this->user_agent)) - $arguments["Headers"]["User-Agent"]=$this->user_agent; - return(""); - } - - Function Open($arguments) - { - if(strlen($this->error)) - return($this->error); - if($this->state!="Disconnected") - return("1 already connected"); - if(IsSet($arguments["HostName"])) - $this->host_name=$arguments["HostName"]; - if(IsSet($arguments["HostPort"])) - $this->host_port=$arguments["HostPort"]; - if(IsSet($arguments["ProxyHostName"])) - $this->proxy_host_name=$arguments["ProxyHostName"]; - if(IsSet($arguments["ProxyHostPort"])) - $this->proxy_host_port=$arguments["ProxyHostPort"]; - if(IsSet($arguments["SOCKSHostName"])) - $this->socks_host_name=$arguments["SOCKSHostName"]; - if(IsSet($arguments["SOCKSHostPort"])) - $this->socks_host_port=$arguments["SOCKSHostPort"]; - if(IsSet($arguments["SOCKSVersion"])) - $this->socks_version=$arguments["SOCKSVersion"]; - if(IsSet($arguments["Protocol"])) - $this->protocol=$arguments["Protocol"]; - switch(strtolower($this->protocol)) - { - case "http": - $default_port=80; - break; - case "https": - $default_port=443; - break; - default: - return($this->SetError("2 it was not specified a valid connection protocol")); - } - if(strlen($this->proxy_host_name)==0) - { - if(strlen($this->host_name)==0) - return($this->SetError("2 it was not specified a valid hostname")); - $host_name=$this->host_name; - $host_port=($this->host_port ? $this->host_port : $default_port); - $server_type = 'HTTP'; - } - else - { - $host_name=$this->proxy_host_name; - $host_port=$this->proxy_host_port; - $server_type = 'HTTP proxy'; - } - $ssl=(strtolower($this->protocol)=="https" && strlen($this->proxy_host_name)==0); - if($ssl - && strlen($this->socks_host_name)) - return($this->SetError('establishing SSL connections via a SOCKS server is not yet supported')); - $this->use_curl=($ssl && $this->prefer_curl && function_exists("curl_init")); - if($this->debug) - $this->OutputDebug("Connecting to ".$this->host_name); - if($this->use_curl) - { - $error=(($this->connection=curl_init($this->protocol."://".$this->host_name.($host_port==$default_port ? "" : ":".strval($host_port))."/")) ? "" : "Could not initialize a CURL session"); - if(strlen($error)==0) - { - if(IsSet($arguments["SSLCertificateFile"])) - curl_setopt($this->connection,CURLOPT_SSLCERT,$arguments["SSLCertificateFile"]); - if(IsSet($arguments["SSLCertificatePassword"])) - curl_setopt($this->connection,CURLOPT_SSLCERTPASSWD,$arguments["SSLCertificatePassword"]); - if(IsSet($arguments["SSLKeyFile"])) - curl_setopt($this->connection,CURLOPT_SSLKEY,$arguments["SSLKeyFile"]); - if(IsSet($arguments["SSLKeyPassword"])) - curl_setopt($this->connection,CURLOPT_SSLKEYPASSWD,$arguments["SSLKeyPassword"]); - } - $this->state="Connected"; - } - else - { - $error=""; - if(strlen($this->proxy_host_name) - && (IsSet($arguments["SSLCertificateFile"]) - || IsSet($arguments["SSLCertificateFile"]))) - $error="establishing SSL connections using certificates or private keys via non-SSL proxies is not supported"; - else - { - if($ssl) - { - if(IsSet($arguments["SSLCertificateFile"])) - $error="establishing SSL connections using certificates is only supported when the cURL extension is enabled"; - elseif(IsSet($arguments["SSLKeyFile"])) - $error="establishing SSL connections using a private key is only supported when the cURL extension is enabled"; - else - { - $version=explode(".",function_exists("phpversion") ? phpversion() : "3.0.7"); - $php_version=intval($version[0])*1000000+intval($version[1])*1000+intval($version[2]); - if($php_version<4003000) - $error="establishing SSL connections requires at least PHP version 4.3.0 or having the cURL extension enabled"; - elseif(!function_exists("extension_loaded") - || !extension_loaded("openssl")) - $error="establishing SSL connections requires the OpenSSL extension enabled"; - } - } - if(strlen($error)==0) - $error=$this->Connect($host_name, $host_port, $ssl, $server_type); - } - } - if(strlen($error)) - return($this->SetError($error)); - $this->session=md5(uniqid("")); - return(""); - } - - Function Close() - { - if($this->state=="Disconnected") - return("1 already disconnected"); - $error=$this->Disconnect(); - if(strlen($error)==0) - $this->state="Disconnected"; - return($error); - } - - Function PickCookies(&$cookies,$secure) - { - if(IsSet($this->cookies[$secure])) - { - $now=gmdate("Y-m-d H-i-s"); - for($domain=0,Reset($this->cookies[$secure]);$domaincookies[$secure]);Next($this->cookies[$secure]),$domain++) - { - $domain_pattern=Key($this->cookies[$secure]); - $match=strlen($this->request_host)-strlen($domain_pattern); - if($match>=0 - && !strcmp($domain_pattern,substr($this->request_host,$match)) - && ($match==0 - || $domain_pattern[0]=="." - || $this->request_host[$match-1]==".")) - { - for(Reset($this->cookies[$secure][$domain_pattern]),$path_part=0;$path_partcookies[$secure][$domain_pattern]);Next($this->cookies[$secure][$domain_pattern]),$path_part++) - { - $path=Key($this->cookies[$secure][$domain_pattern]); - if(strlen($this->request_uri)>=strlen($path) - && substr($this->request_uri,0,strlen($path))==$path) - { - for(Reset($this->cookies[$secure][$domain_pattern][$path]),$cookie=0;$cookiecookies[$secure][$domain_pattern][$path]);Next($this->cookies[$secure][$domain_pattern][$path]),$cookie++) - { - $cookie_name=Key($this->cookies[$secure][$domain_pattern][$path]); - $expires=$this->cookies[$secure][$domain_pattern][$path][$cookie_name]["expires"]; - if($expires=="" - || strcmp($now,$expires)<0) - $cookies[$cookie_name]=$this->cookies[$secure][$domain_pattern][$path][$cookie_name]; - } - } - } - } - } - } - } - - Function GetFileDefinition($file, &$definition) - { - $name=""; - if(IsSet($file["FileName"])) - $name=basename($file["FileName"]); - if(IsSet($file["Name"])) - $name=$file["Name"]; - if(strlen($name)==0) - return("it was not specified the file part name"); - if(IsSet($file["Content-Type"])) - { - $content_type=$file["Content-Type"]; - $type=$this->Tokenize(strtolower($content_type),"/"); - $sub_type=$this->Tokenize(""); - switch($type) - { - case "text": - case "image": - case "audio": - case "video": - case "application": - case "message": - break; - case "automatic": - switch($sub_type) - { - case "name": - switch(GetType($dot=strrpos($name,"."))=="integer" ? strtolower(substr($name,$dot)) : "") - { - case ".xls": - $content_type="application/excel"; - break; - case ".hqx": - $content_type="application/macbinhex40"; - break; - case ".doc": - case ".dot": - case ".wrd": - $content_type="application/msword"; - break; - case ".pdf": - $content_type="application/pdf"; - break; - case ".pgp": - $content_type="application/pgp"; - break; - case ".ps": - case ".eps": - case ".ai": - $content_type="application/postscript"; - break; - case ".ppt": - $content_type="application/powerpoint"; - break; - case ".rtf": - $content_type="application/rtf"; - break; - case ".tgz": - case ".gtar": - $content_type="application/x-gtar"; - break; - case ".gz": - $content_type="application/x-gzip"; - break; - case ".php": - case ".php3": - $content_type="application/x-httpd-php"; - break; - case ".js": - $content_type="application/x-javascript"; - break; - case ".ppd": - case ".psd": - $content_type="application/x-photoshop"; - break; - case ".swf": - case ".swc": - case ".rf": - $content_type="application/x-shockwave-flash"; - break; - case ".tar": - $content_type="application/x-tar"; - break; - case ".zip": - $content_type="application/zip"; - break; - case ".mid": - case ".midi": - case ".kar": - $content_type="audio/midi"; - break; - case ".mp2": - case ".mp3": - case ".mpga": - $content_type="audio/mpeg"; - break; - case ".ra": - $content_type="audio/x-realaudio"; - break; - case ".wav": - $content_type="audio/wav"; - break; - case ".bmp": - $content_type="image/bitmap"; - break; - case ".gif": - $content_type="image/gif"; - break; - case ".iff": - $content_type="image/iff"; - break; - case ".jb2": - $content_type="image/jb2"; - break; - case ".jpg": - case ".jpe": - case ".jpeg": - $content_type="image/jpeg"; - break; - case ".jpx": - $content_type="image/jpx"; - break; - case ".png": - $content_type="image/png"; - break; - case ".tif": - case ".tiff": - $content_type="image/tiff"; - break; - case ".wbmp": - $content_type="image/vnd.wap.wbmp"; - break; - case ".xbm": - $content_type="image/xbm"; - break; - case ".css": - $content_type="text/css"; - break; - case ".txt": - $content_type="text/plain"; - break; - case ".htm": - case ".html": - $content_type="text/html"; - break; - case ".xml": - $content_type="text/xml"; - break; - case ".mpg": - case ".mpe": - case ".mpeg": - $content_type="video/mpeg"; - break; - case ".qt": - case ".mov": - $content_type="video/quicktime"; - break; - case ".avi": - $content_type="video/x-ms-video"; - break; - case ".eml": - $content_type="message/rfc822"; - break; - default: - $content_type="application/octet-stream"; - break; - } - break; - default: - return($content_type." is not a supported automatic content type detection method"); - } - break; - default: - return($content_type." is not a supported file content type"); - } - } - else - $content_type="application/octet-stream"; - $definition=array( - "Content-Type"=>$content_type, - "NAME"=>$name - ); - if(IsSet($file["FileName"])) - { - if(GetType($length=@filesize($file["FileName"]))!="integer") - { - $error="it was not possible to determine the length of the file ".$file["FileName"]; - if(IsSet($php_errormsg) - && strlen($php_errormsg)) - $error.=": ".$php_errormsg; - if(!file_exists($file["FileName"])) - $error="it was not possible to access the file ".$file["FileName"]; - return($error); - } - $definition["FILENAME"]=$file["FileName"]; - $definition["Content-Length"]=$length; - } - elseif(IsSet($file["Data"])) - $definition["Content-Length"]=strlen($definition["DATA"]=$file["Data"]); - else - return("it was not specified a valid file name"); - return(""); - } - - Function ConnectFromProxy($arguments, &$headers) - { - if(!$this->PutLine('CONNECT '.$this->host_name.':'.($this->host_port ? $this->host_port : 443).' HTTP/1.0') - || (strlen($this->user_agent) - && !$this->PutLine('User-Agent: '.$this->user_agent)) - || (IsSet($arguments['Headers']['Proxy-Authorization']) - && !$this->PutLine('Proxy-Authorization: '.$arguments['Headers']['Proxy-Authorization'])) - || !$this->PutLine('')) - { - $this->Disconnect(); - return($this->error); - } - $this->state = "ConnectSent"; - if(strlen($error=$this->ReadReplyHeadersResponse($headers))) - return($error); - $proxy_authorization=""; - while(!strcmp($this->response_status, "100")) - { - $this->state="ConnectSent"; - if(strlen($error=$this->ReadReplyHeadersResponse($headers))) - return($error); - } - switch($this->response_status) - { - case "200": - if(!@stream_socket_enable_crypto($this->connection, 1, STREAM_CRYPTO_METHOD_SSLv23_CLIENT)) - { - $this->SetPHPError('it was not possible to start a SSL encrypted connection via this proxy', $php_errormsg); - $this->Disconnect(); - return($this->error); - } - $this->state = "Connected"; - break; - case "407": - if(strlen($error=$this->Authenticate($headers, -1, $proxy_authorization, $this->proxy_request_user, $this->proxy_request_password, $this->proxy_request_realm, $this->proxy_request_workstation))) - return($error); - break; - default: - return($this->SetError("unable to send request via proxy")); - } - return(""); - } - - Function SendRequest($arguments) - { - if(strlen($this->error)) - return($this->error); - if(IsSet($arguments["ProxyUser"])) - $this->proxy_request_user=$arguments["ProxyUser"]; - elseif(IsSet($this->proxy_user)) - $this->proxy_request_user=$this->proxy_user; - if(IsSet($arguments["ProxyPassword"])) - $this->proxy_request_password=$arguments["ProxyPassword"]; - elseif(IsSet($this->proxy_password)) - $this->proxy_request_password=$this->proxy_password; - if(IsSet($arguments["ProxyRealm"])) - $this->proxy_request_realm=$arguments["ProxyRealm"]; - elseif(IsSet($this->proxy_realm)) - $this->proxy_request_realm=$this->proxy_realm; - if(IsSet($arguments["ProxyWorkstation"])) - $this->proxy_request_workstation=$arguments["ProxyWorkstation"]; - elseif(IsSet($this->proxy_workstation)) - $this->proxy_request_workstation=$this->proxy_workstation; - switch($this->state) - { - case "Disconnected": - return($this->SetError("1 connection was not yet established")); - case "Connected": - $connect = 0; - break; - case "ConnectedToProxy": - if(strlen($error = $this->ConnectFromProxy($arguments, $headers))) - return($error); - $connect = 1; - break; - default: - return($this->SetError("2 can not send request in the current connection state")); - } - if(IsSet($arguments["RequestMethod"])) - $this->request_method=$arguments["RequestMethod"]; - if(IsSet($arguments["User-Agent"])) - $this->user_agent=$arguments["User-Agent"]; - if(!IsSet($arguments["Headers"]["User-Agent"]) - && strlen($this->user_agent)) - $arguments["Headers"]["User-Agent"]=$this->user_agent; - if(strlen($this->request_method)==0) - return($this->SetError("3 it was not specified a valid request method")); - if(IsSet($arguments["RequestURI"])) - $this->request_uri=$arguments["RequestURI"]; - if(strlen($this->request_uri)==0 - || substr($this->request_uri,0,1)!="/") - return($this->SetError("4 it was not specified a valid request URI")); - $this->request_arguments=$arguments; - $this->request_headers=(IsSet($arguments["Headers"]) ? $arguments["Headers"] : array()); - $body_length=0; - $this->request_body=""; - $get_body=1; - if($this->request_method=="POST" - || $this->request_method=="PUT") - { - if(IsSet($arguments['StreamRequest'])) - { - $get_body = 0; - $this->request_headers["Transfer-Encoding"]="chunked"; - } - elseif(IsSet($arguments["PostFiles"]) - || ($this->force_multipart_form_post - && IsSet($arguments["PostValues"]))) - { - $boundary="--".md5(uniqid(time())); - $this->request_headers["Content-Type"]="multipart/form-data; boundary=".$boundary.(IsSet($arguments["CharSet"]) ? "; charset=".$arguments["CharSet"] : ""); - $post_parts=array(); - if(IsSet($arguments["PostValues"])) - { - $values=$arguments["PostValues"]; - if(GetType($values)!="array") - return($this->SetError("5 it was not specified a valid POST method values array")); - for(Reset($values),$value=0;$value$headers,"DATA"=>$data); - $body_length+=strlen($headers)+strlen($data)+strlen("\r\n"); - } - } - $body_length+=strlen("--".$boundary."--\r\n"); - $files=(IsSet($arguments["PostFiles"]) ? $arguments["PostFiles"] : array()); - Reset($files); - $end=(GetType($input=Key($files))!="string"); - for(;!$end;) - { - if(strlen($error=$this->GetFileDefinition($files[$input],$definition))) - return("3 ".$error); - $headers="--".$boundary."\r\nContent-Disposition: form-data; name=\"".$input."\"; filename=\"".$definition["NAME"]."\"\r\nContent-Type: ".$definition["Content-Type"]."\r\n\r\n"; - $part=count($post_parts); - $post_parts[$part]=array("HEADERS"=>$headers); - if(IsSet($definition["FILENAME"])) - { - $post_parts[$part]["FILENAME"]=$definition["FILENAME"]; - $data=""; - } - else - $data=$definition["DATA"]; - $post_parts[$part]["DATA"]=$data; - $body_length+=strlen($headers)+$definition["Content-Length"]+strlen("\r\n"); - Next($files); - $end=(GetType($input=Key($files))!="string"); - } - $get_body=0; - } - elseif(IsSet($arguments["PostValues"])) - { - $values=$arguments["PostValues"]; - if(GetType($values)!="array") - return($this->SetError("5 it was not specified a valid POST method values array")); - for(Reset($values),$value=0;$value0) - $this->request_body.="&"; - $this->request_body.=UrlEncode($k)."=".UrlEncode($values[$k][$v]); - } - } - else - { - if($value>0) - $this->request_body.="&"; - $this->request_body.=UrlEncode($k)."=".UrlEncode($values[$k]); - } - } - $this->request_headers["Content-Type"]="application/x-www-form-urlencoded".(IsSet($arguments["CharSet"]) ? "; charset=".$arguments["CharSet"] : ""); - $get_body=0; - } - } - if($get_body - && (IsSet($arguments["Body"]) - || IsSet($arguments["BodyStream"]))) - { - if(IsSet($arguments["Body"])) - $this->request_body=$arguments["Body"]; - else - { - $stream=$arguments["BodyStream"]; - $this->request_body=""; - for($part=0; $partrequest_body.=$stream[$part]["Data"]; - elseif(IsSet($stream[$part]["File"])) - { - if(!($file=@fopen($stream[$part]["File"],"rb"))) - return($this->SetPHPError("could not open upload file ".$stream[$part]["File"], $php_errormsg)); - while(!feof($file)) - { - if(GetType($block=@fread($file,$this->file_buffer_length))!="string") - { - $error=$this->SetPHPError("could not read body stream file ".$stream[$part]["File"], $php_errormsg); - fclose($file); - return($error); - } - $this->request_body.=$block; - } - fclose($file); - } - else - return("5 it was not specified a valid file or data body stream element at position ".$part); - } - } - if(!IsSet($this->request_headers["Content-Type"])) - $this->request_headers["Content-Type"]="application/octet-stream".(IsSet($arguments["CharSet"]) ? "; charset=".$arguments["CharSet"] : ""); - } - if(IsSet($arguments["AuthUser"])) - $this->request_user=$arguments["AuthUser"]; - elseif(IsSet($this->user)) - $this->request_user=$this->user; - if(IsSet($arguments["AuthPassword"])) - $this->request_password=$arguments["AuthPassword"]; - elseif(IsSet($this->password)) - $this->request_password=$this->password; - if(IsSet($arguments["AuthRealm"])) - $this->request_realm=$arguments["AuthRealm"]; - elseif(IsSet($this->realm)) - $this->request_realm=$this->realm; - if(IsSet($arguments["AuthWorkstation"])) - $this->request_workstation=$arguments["AuthWorkstation"]; - elseif(IsSet($this->workstation)) - $this->request_workstation=$this->workstation; - if(strlen($this->proxy_host_name)==0 - || $connect) - $request_uri=$this->request_uri; - else - { - switch(strtolower($this->protocol)) - { - case "http": - $default_port=80; - break; - case "https": - $default_port=443; - break; - } - $request_uri=strtolower($this->protocol)."://".$this->host_name.(($this->host_port==0 || $this->host_port==$default_port) ? "" : ":".$this->host_port).$this->request_uri; - } - if($this->use_curl) - { - $version=(GetType($v=curl_version())=="array" ? (IsSet($v["version"]) ? $v["version"] : "0.0.0") : (preg_match("/^libcurl\\/([0-9]+\\.[0-9]+\\.[0-9]+)/",$v,$m) ? $m[1] : "0.0.0")); - $curl_version=100000*intval($this->Tokenize($version,"."))+1000*intval($this->Tokenize("."))+intval($this->Tokenize("")); - $protocol_version=($curl_version<713002 ? "1.0" : $this->protocol_version); - } - else - $protocol_version=$this->protocol_version; - $this->request=$this->request_method." ".$request_uri." HTTP/".$protocol_version; - if($body_length - || ($body_length=strlen($this->request_body))) - $this->request_headers["Content-Length"]=$body_length; - for($headers=array(),$host_set=0,Reset($this->request_headers),$header=0;$headerrequest_headers);Next($this->request_headers),$header++) - { - $header_name=Key($this->request_headers); - $header_value=$this->request_headers[$header_name]; - if(GetType($header_value)=="array") - { - for(Reset($header_value),$value=0;$valuerequest_headers))=="host") - { - $this->request_host=strtolower($header_value); - $host_set=1; - } - } - if(!$host_set) - { - $headers[]="Host: ".$this->host_name; - $this->request_host=strtolower($this->host_name); - } - if(count($this->cookies)) - { - $cookies=array(); - $this->PickCookies($cookies,0); - if(strtolower($this->protocol)=="https") - $this->PickCookies($cookies,1); - if(count($cookies)) - { - $h=count($headers); - $headers[$h]="Cookie:"; - for(Reset($cookies),$cookie=0;$cookieuse_curl) - { - if(IsSet($arguments['StreamRequest'])) - return($this->SetError("Streaming request data is not supported when using Curl")); - if($body_length - && strlen($this->request_body)==0) - { - for($request_body="",$success=1,$part=0;$partSetPHPError("could not open upload file ".$post_parts[$part]["FILENAME"], $php_errormsg); - $success=0; - break; - } - while(!feof($file)) - { - if(GetType($block=@fread($file,$this->file_buffer_length))!="string") - { - $this->SetPHPError("could not read upload file", $php_errormsg); - $success=0; - break; - } - $request_body.=$block; - } - fclose($file); - if(!$success) - break; - } - $request_body.="\r\n"; - } - $request_body.="--".$boundary."--\r\n"; - } - else - $request_body=$this->request_body; - curl_setopt($this->connection,CURLOPT_HEADER,1); - curl_setopt($this->connection,CURLOPT_RETURNTRANSFER,1); - if($this->timeout) - curl_setopt($this->connection,CURLOPT_TIMEOUT,$this->timeout); - curl_setopt($this->connection,CURLOPT_SSL_VERIFYPEER,0); - curl_setopt($this->connection,CURLOPT_SSL_VERIFYHOST,0); - $request=$this->request."\r\n".implode("\r\n",$headers)."\r\n\r\n".$request_body; - curl_setopt($this->connection,CURLOPT_CUSTOMREQUEST,$request); - if($this->debug) - $this->OutputDebug("C ".$request); - if(!($success=(strlen($this->response=curl_exec($this->connection))!=0))) - { - $error=curl_error($this->connection); - $this->SetError("Could not execute the request".(strlen($error) ? ": ".$error : "")); - } - } - else - { - if(($success=$this->PutLine($this->request))) - { - for($header=0;$headerPutLine($headers[$header])) - break; - } - if($success - && ($success=$this->PutLine(""))) - { - if(IsSet($arguments['StreamRequest'])) - $next_state = "SendingRequestBody"; - elseif($body_length) - { - if(strlen($this->request_body)) - $success=$this->PutData($this->request_body); - else - { - for($part=0;$partPutData($post_parts[$part]["HEADERS"])) - || !($success=$this->PutData($post_parts[$part]["DATA"]))) - break; - if(IsSet($post_parts[$part]["FILENAME"])) - { - if(!($file=@fopen($post_parts[$part]["FILENAME"],"rb"))) - { - $this->SetPHPError("could not open upload file ".$post_parts[$part]["FILENAME"], $php_errormsg); - $success=0; - break; - } - while(!feof($file)) - { - if(GetType($block=@fread($file,$this->file_buffer_length))!="string") - { - $this->SetPHPError("could not read upload file", $php_errormsg); - $success=0; - break; - } - if(!($success=$this->PutData($block))) - break; - } - fclose($file); - if(!$success) - break; - } - if(!($success=$this->PutLine(""))) - break; - } - if($success) - $success=$this->PutLine("--".$boundary."--"); - } - if($success) - $sucess=$this->FlushData(); - } - } - } - } - if(!$success) - return($this->SetError("5 could not send the HTTP request: ".$this->error)); - $this->state=$next_state; - return(""); - } - - Function SetCookie($name, $value, $expires="" , $path="/" , $domain="" , $secure=0, $verbatim=0) - { - if(strlen($this->error)) - return($this->error); - if(strlen($name)==0) - return($this->SetError("it was not specified a valid cookie name")); - if(strlen($path)==0 - || strcmp($path[0],"/")) - return($this->SetError($path." is not a valid path for setting cookie ".$name)); - if($domain=="" - || !strpos($domain,".",$domain[0]=="." ? 1 : 0)) - return($this->SetError($domain." is not a valid domain for setting cookie ".$name)); - $domain=strtolower($domain); - if(!strcmp($domain[0],".")) - $domain=substr($domain,1); - if(!$verbatim) - { - $name=$this->CookieEncode($name,1); - $value=$this->CookieEncode($value,0); - } - $secure=intval($secure); - $this->cookies[$secure][$domain][$path][$name]=array( - "name"=>$name, - "value"=>$value, - "domain"=>$domain, - "path"=>$path, - "expires"=>$expires, - "secure"=>$secure - ); - return(""); - } - - Function SendRequestBody($data, $end_of_data) - { - if(strlen($this->error)) - return($this->error); - switch($this->state) - { - case "Disconnected": - return($this->SetError("1 connection was not yet established")); - case "Connected": - case "ConnectedToProxy": - return($this->SetError("2 request was not sent")); - case "SendingRequestBody": - break; - case "RequestSent": - return($this->SetError("3 request body was already sent")); - default: - return($this->SetError("4 can not send the request body in the current connection state")); - } - $length = strlen($data); - if($length) - { - $size = dechex($length)."\r\n"; - if(!$this->PutData($size) - || !$this->PutData($data)) - return($this->error); - } - if($end_of_data) - { - $size = "0\r\n"; - if(!$this->PutData($size)) - return($this->error); - $this->state = "RequestSent"; - } - return(""); - } - - Function ReadReplyHeadersResponse(&$headers) - { - $headers=array(); - if(strlen($this->error)) - return($this->error); - switch($this->state) - { - case "Disconnected": - return($this->SetError("1 connection was not yet established")); - case "Connected": - return($this->SetError("2 request was not sent")); - case "ConnectedToProxy": - return($this->SetError("2 connection from the remote server from the proxy was not yet established")); - case "SendingRequestBody": - return($this->SetError("4 request body data was not completely sent")); - case "ConnectSent": - $connect = 1; - break; - case "RequestSent": - $connect = 0; - break; - default: - return($this->SetError("3 can not get request headers in the current connection state")); - } - $this->content_length=$this->read_length=$this->read_response=$this->remaining_chunk=0; - $this->content_length_set=$this->chunked=$this->last_chunk_read=$chunked=0; - $this->connection_close=0; - for($this->response_status="";;) - { - $line=$this->GetLine(); - if(GetType($line)!="string") - return($this->SetError("4 could not read request reply: ".$this->error)); - if(strlen($this->response_status)==0) - { - if(!preg_match($match="/^http\\/[0-9]+\\.[0-9]+[ \t]+([0-9]+)[ \t]*(.*)\$/i",$line,$matches)) - return($this->SetError("3 it was received an unexpected HTTP response status")); - $this->response_status=$matches[1]; - $this->response_message=$matches[2]; - } - if($line=="") - { - if(strlen($this->response_status)==0) - return($this->SetError("3 it was not received HTTP response status")); - $this->state=($connect ? "GotConnectHeaders" : "GotReplyHeaders"); - break; - } - $header_name=strtolower($this->Tokenize($line,":")); - $header_value=Trim(Chop($this->Tokenize("\r\n"))); - if(IsSet($headers[$header_name])) - { - if(GetType($headers[$header_name])=="string") - $headers[$header_name]=array($headers[$header_name]); - $headers[$header_name][]=$header_value; - } - else - $headers[$header_name]=$header_value; - if(!$connect) - { - switch($header_name) - { - case "content-length": - $this->content_length=intval($headers[$header_name]); - $this->content_length_set=1; - break; - case "transfer-encoding": - $encoding=$this->Tokenize($header_value,"; \t"); - if(!$this->use_curl - && !strcmp($encoding,"chunked")) - $chunked=1; - break; - case "set-cookie": - if($this->support_cookies) - { - if(GetType($headers[$header_name])=="array") - $cookie_headers=$headers[$header_name]; - else - $cookie_headers=array($headers[$header_name]); - for($cookie=0;$cookieTokenize($cookie_headers[$cookie],"=")); - $cookie_value=$this->Tokenize(";"); - $domain=$this->request_host; - $path="/"; - $expires=""; - $secure=0; - while(($name=trim(UrlDecode($this->Tokenize("="))))!="") - { - $value=UrlDecode($this->Tokenize(";")); - switch($name) - { - case "domain": - $domain=$value; - break; - case "path": - $path=$value; - break; - case "expires": - if(preg_match("/^((Mon|Monday|Tue|Tuesday|Wed|Wednesday|Thu|Thursday|Fri|Friday|Sat|Saturday|Sun|Sunday), )?([0-9]{2})\\-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\-([0-9]{2,4}) ([0-9]{2})\\:([0-9]{2})\\:([0-9]{2}) GMT\$/",$value,$matches)) - { - $year=intval($matches[5]); - if($year<1900) - $year+=($year<70 ? 2000 : 1900); - $expires="$year-".$this->months[$matches[4]]."-".$matches[3]." ".$matches[6].":".$matches[7].":".$matches[8]; - } - break; - case "secure": - $secure=1; - break; - } - } - if(strlen($this->SetCookie($cookie_name, $cookie_value, $expires, $path , $domain, $secure, 1))) - $this->error=""; - } - } - break; - case "connection": - $this->connection_close=!strcmp(strtolower($header_value),"close"); - break; - } - } - } - $this->chunked=$chunked; - if($this->content_length_set) - $this->connection_close=0; - return(""); - } - - Function Redirect(&$headers) - { - if($this->follow_redirect) - { - if(!IsSet($headers["location"]) - || (GetType($headers["location"])!="array" - && strlen($location=$headers["location"])==0) - || (GetType($headers["location"])=="array" - && strlen($location=$headers["location"][0])==0)) - return($this->SetError("3 it was received a redirect without location URL")); - if(strcmp($location[0],"/")) - { - $location_arguments=parse_url($location); - if(!IsSet($location_arguments["scheme"])) - $location=((GetType($end=strrpos($this->request_uri,"/"))=="integer" && $end>1) ? substr($this->request_uri,0,$end) : "")."/".$location; - } - if(!strcmp($location[0],"/")) - $location=$this->protocol."://".$this->host_name.($this->host_port ? ":".$this->host_port : "").$location; - $error=$this->GetRequestArguments($location,$arguments); - if(strlen($error)) - return($this->SetError("could not process redirect url: ".$error)); - $arguments["RequestMethod"]="GET"; - if(strlen($error=$this->Close())==0 - && strlen($error=$this->Open($arguments))==0 - && strlen($error=$this->SendRequest($arguments))==0) - { - $this->redirection_level++; - if($this->redirection_level>$this->redirection_limit) - $error="it was exceeded the limit of request redirections"; - else - $error=$this->ReadReplyHeaders($headers); - $this->redirection_level--; - } - if(strlen($error)) - return($this->SetError($error)); - } - return(""); - } - - Function Authenticate(&$headers, $proxy, &$proxy_authorization, &$user, &$password, &$realm, &$workstation) - { - if($proxy) - { - $authenticate_header="proxy-authenticate"; - $authorization_header="Proxy-Authorization"; - $authenticate_status="407"; - $authentication_mechanism=$this->proxy_authentication_mechanism; - } - else - { - $authenticate_header="www-authenticate"; - $authorization_header="Authorization"; - $authenticate_status="401"; - $authentication_mechanism=$this->authentication_mechanism; - } - if(IsSet($headers[$authenticate_header])) - { - if(function_exists("class_exists") - && !class_exists("sasl_client_class")) - return($this->SetError("the SASL client class needs to be loaded to be able to authenticate".($proxy ? " with the proxy server" : "")." and access this site")); - if(GetType($headers[$authenticate_header])=="array") - $authenticate=$headers[$authenticate_header]; - else - $authenticate=array($headers[$authenticate_header]); - for($response="", $mechanisms=array(),$m=0;$mTokenize($authenticate[$m]," "); - $response=$this->Tokenize(""); - if(strlen($authentication_mechanism)) - { - if(!strcmp($authentication_mechanism,$mechanism)) - { - $mechanisms[]=$mechanism; - break; - } - } - else - $mechanisms[]=$mechanism; - } - $sasl=new sasl_client_class; - if(IsSet($user)) - $sasl->SetCredential("user",$user); - if(IsSet($password)) - $sasl->SetCredential("password",$password); - if(IsSet($realm)) - $sasl->SetCredential("realm",$realm); - if(IsSet($workstation)) - $sasl->SetCredential("workstation",$workstation); - $sasl->SetCredential("uri",$this->request_uri); - $sasl->SetCredential("method",$this->request_method); - $sasl->SetCredential("session",$this->session); - do - { - $status=$sasl->Start($mechanisms,$message,$interactions); - } - while($status==SASL_INTERACT); - switch($status) - { - case SASL_CONTINUE: - break; - case SASL_NOMECH: - return($this->SetError(($proxy ? "proxy " : "")."authentication error: ".(strlen($authentication_mechanism) ? "authentication mechanism ".$authentication_mechanism." may not be used: " : "").$sasl->error)); - default: - return($this->SetError("Could not start the SASL ".($proxy ? "proxy " : "")."authentication client: ".$sasl->error)); - } - if($proxy >= 0) - { - for(;;) - { - if(strlen($error=$this->ReadReplyBody($body,$this->file_buffer_length))) - return($error); - if(strlen($body)==0) - break; - } - } - $authorization_value=$sasl->mechanism.(IsSet($message) ? " ".($sasl->encode_response ? base64_encode($message) : $message) : ""); - $request_arguments=$this->request_arguments; - $arguments=$request_arguments; - $arguments["Headers"][$authorization_header]=$authorization_value; - if(!$proxy - && strlen($proxy_authorization)) - $arguments["Headers"]["Proxy-Authorization"]=$proxy_authorization; - if(strlen($error=$this->Close()) - || strlen($error=$this->Open($arguments))) - return($this->SetError($error)); - $authenticated=0; - if(IsSet($message)) - { - if($proxy < 0) - { - if(strlen($error=$this->ConnectFromProxy($arguments, $headers))) - return($this->SetError($error)); - } - else - { - if(strlen($error=$this->SendRequest($arguments)) - || strlen($error=$this->ReadReplyHeadersResponse($headers))) - return($this->SetError($error)); - } - if(!IsSet($headers[$authenticate_header])) - $authenticate=array(); - elseif(GetType($headers[$authenticate_header])=="array") - $authenticate=$headers[$authenticate_header]; - else - $authenticate=array($headers[$authenticate_header]); - for($mechanism=0;$mechanismTokenize($authenticate[$mechanism]," "),$sasl->mechanism)) - { - $response=$this->Tokenize(""); - break; - } - } - switch($this->response_status) - { - case $authenticate_status: - break; - case "301": - case "302": - case "303": - case "307": - if($proxy >= 0) - return($this->Redirect($headers)); - default: - if(intval($this->response_status/100)==2) - { - if($proxy) - $proxy_authorization=$authorization_value; - $authenticated=1; - break; - } - if($proxy - && !strcmp($this->response_status,"401")) - { - $proxy_authorization=$authorization_value; - $authenticated=1; - break; - } - return($this->SetError(($proxy ? "proxy " : "")."authentication error: ".$this->response_status." ".$this->response_message)); - } - } - for(;!$authenticated;) - { - do - { - $status=$sasl->Step($response,$message,$interactions); - } - while($status==SASL_INTERACT); - switch($status) - { - case SASL_CONTINUE: - $authorization_value=$sasl->mechanism.(IsSet($message) ? " ".($sasl->encode_response ? base64_encode($message) : $message) : ""); - $arguments=$request_arguments; - $arguments["Headers"][$authorization_header]=$authorization_value; - if(!$proxy - && strlen($proxy_authorization)) - $arguments["Headers"]["Proxy-Authorization"]=$proxy_authorization; - if($proxy < 0) - { - if(strlen($error=$this->ConnectFromProxy($arguments, $headers))) - return($this->SetError($error)); - } - else - { - if(strlen($error=$this->SendRequest($arguments)) - || strlen($error=$this->ReadReplyHeadersResponse($headers))) - return($this->SetError($error)); - } - switch($this->response_status) - { - case $authenticate_status: - if(GetType($headers[$authenticate_header])=="array") - $authenticate=$headers[$authenticate_header]; - else - $authenticate=array($headers[$authenticate_header]); - for($response="",$mechanism=0;$mechanismTokenize($authenticate[$mechanism]," "),$sasl->mechanism)) - { - $response=$this->Tokenize(""); - break; - } - } - if($proxy >= 0) - { - for(;;) - { - if(strlen($error=$this->ReadReplyBody($body,$this->file_buffer_length))) - return($error); - if(strlen($body)==0) - break; - } - } - $this->state="Connected"; - break; - case "301": - case "302": - case "303": - case "307": - if($proxy >= 0) - return($this->Redirect($headers)); - default: - if(intval($this->response_status/100)==2) - { - if($proxy) - $proxy_authorization=$authorization_value; - $authenticated=1; - break; - } - if($proxy - && !strcmp($this->response_status,"401")) - { - $proxy_authorization=$authorization_value; - $authenticated=1; - break; - } - return($this->SetError(($proxy ? "proxy " : "")."authentication error: ".$this->response_status." ".$this->response_message)); - } - break; - default: - return($this->SetError("Could not process the SASL ".($proxy ? "proxy " : "")."authentication step: ".$sasl->error)); - } - } - } - return(""); - } - - Function ReadReplyHeaders(&$headers) - { - if(strlen($error=$this->ReadReplyHeadersResponse($headers))) - return($error); - $proxy_authorization=""; - while(!strcmp($this->response_status, "100")) - { - $this->state="RequestSent"; - if(strlen($error=$this->ReadReplyHeadersResponse($headers))) - return($error); - } - switch($this->response_status) - { - case "301": - case "302": - case "303": - case "307": - if(strlen($error=$this->Redirect($headers))) - return($error); - break; - case "407": - if(strlen($error=$this->Authenticate($headers, 1, $proxy_authorization, $this->proxy_request_user, $this->proxy_request_password, $this->proxy_request_realm, $this->proxy_request_workstation))) - return($error); - if(strcmp($this->response_status,"401")) - return(""); - case "401": - return($this->Authenticate($headers, 0, $proxy_authorization, $this->request_user, $this->request_password, $this->request_realm, $this->request_workstation)); - } - return(""); - } - - Function ReadReplyBody(&$body,$length) - { - $body=""; - if(strlen($this->error)) - return($this->error); - switch($this->state) - { - case "Disconnected": - return($this->SetError("1 connection was not yet established")); - case "Connected": - case "ConnectedToProxy": - return($this->SetError("2 request was not sent")); - case "RequestSent": - if(($error=$this->ReadReplyHeaders($headers))!="") - return($error); - break; - case "GotReplyHeaders": - break; - default: - return($this->SetError("3 can not get request headers in the current connection state")); - } - if($this->content_length_set) - $length=min($this->content_length-$this->read_length,$length); - if($length>0 - && !$this->EndOfInput() - && ($body=$this->ReadBytes($length))=="") - { - if(strlen($this->error)) - return($this->SetError("4 could not get the request reply body: ".$this->error)); - } - $this->read_length+=strlen($body); - return(""); - } - - Function SaveCookies(&$cookies, $domain='', $secure_only=0, $persistent_only=0) - { - $now=gmdate("Y-m-d H-i-s"); - $cookies=array(); - for($secure_cookies=0,Reset($this->cookies);$secure_cookiescookies);Next($this->cookies),$secure_cookies++) - { - $secure=Key($this->cookies); - if(!$secure_only - || $secure) - { - for($cookie_domain=0,Reset($this->cookies[$secure]);$cookie_domaincookies[$secure]);Next($this->cookies[$secure]),$cookie_domain++) - { - $domain_pattern=Key($this->cookies[$secure]); - $match=strlen($domain)-strlen($domain_pattern); - if(strlen($domain)==0 - || ($match>=0 - && !strcmp($domain_pattern,substr($domain,$match)) - && ($match==0 - || $domain_pattern[0]=="." - || $domain[$match-1]=="."))) - { - for(Reset($this->cookies[$secure][$domain_pattern]),$path_part=0;$path_partcookies[$secure][$domain_pattern]);Next($this->cookies[$secure][$domain_pattern]),$path_part++) - { - $path=Key($this->cookies[$secure][$domain_pattern]); - for(Reset($this->cookies[$secure][$domain_pattern][$path]),$cookie=0;$cookiecookies[$secure][$domain_pattern][$path]);Next($this->cookies[$secure][$domain_pattern][$path]),$cookie++) - { - $cookie_name=Key($this->cookies[$secure][$domain_pattern][$path]); - $expires=$this->cookies[$secure][$domain_pattern][$path][$cookie_name]["expires"]; - if((!$persistent_only - && strlen($expires)==0) - || (strlen($expires) - && strcmp($now,$expires)<0)) - $cookies[$secure][$domain_pattern][$path][$cookie_name]=$this->cookies[$secure][$domain_pattern][$path][$cookie_name]; - } - } - } - } - } - } - } - - Function SavePersistentCookies(&$cookies, $domain='', $secure_only=0) - { - $this->SaveCookies($cookies, $domain, $secure_only, 1); - } - - Function GetPersistentCookies(&$cookies, $domain='', $secure_only=0) - { - $this->SavePersistentCookies($cookies, $domain, $secure_only); - } - - Function RestoreCookies($cookies, $clear=1) - { - $new_cookies=($clear ? array() : $this->cookies); - for($secure_cookies=0, Reset($cookies); $secure_cookiesSetError("invalid cookie secure value type (".serialize($secure).")")); - for($cookie_domain=0,Reset($cookies[$secure]);$cookie_domainSetError("invalid cookie domain value type (".serialize($domain_pattern).")")); - for(Reset($cookies[$secure][$domain_pattern]),$path_part=0;$path_partSetError("invalid cookie path value type (".serialize($path).")")); - for(Reset($cookies[$secure][$domain_pattern][$path]),$cookie=0;$cookieSetError("invalid cookie expiry value type (".serialize($expires).")")); - $new_cookies[$secure][$domain_pattern][$path][$cookie_name]=array( - "name"=>$cookie_name, - "value"=>$value, - "domain"=>$domain_pattern, - "path"=>$path, - "expires"=>$expires, - "secure"=>$secure - ); - } - } - } - } - $this->cookies=$new_cookies; - return(""); - } -}; - -?> --- a/owa/includes/httpclient-2009-09-02/test_http.php +++ /dev/null @@ -1,238 +1,1 @@ - - -Test for Manuel Lemos' PHP HTTP class - - -

    Test for Manuel Lemos' PHP HTTP class

    -
    -
      -timeout=0; - - /* Data transfer timeout */ - $http->data_timeout=0; - - /* Output debugging information about the progress of the connection */ - $http->debug=1; - - /* Format dubug output to display with HTML pages */ - $http->html_debug=1; - - - /* - * Need to emulate a certain browser user agent? - * Set the user agent this way: - */ - $http->user_agent="Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"; - - /* - * If you want to the class to follow the URL of redirect responses - * set this variable to 1. - */ - $http->follow_redirect=1; - - /* - * How many consecutive redirected requests the class should follow. - */ - $http->redirection_limit=5; - - /* - * If your DNS always resolves non-existing domains to a default IP - * address to force the redirection to a given page, specify the - * default IP address in this variable to make the class handle it - * as when domain resolution fails. - */ - $http->exclude_address=""; - - /* - * If you want to establish SSL connections and you do not want the - * class to use the CURL library, set this variable to 0 . - */ - $http->prefer_curl=0; - - /* - * If basic authentication is required, specify the user name and - * password in these variables. - */ - - $user=""; - $password=""; - $realm=""; /* Authentication realm or domain */ - $workstation=""; /* Workstation for NTLM authentication */ - $authentication=(strlen($user) ? UrlEncode($user).":".UrlEncode($password)."@" : ""); - -/* - Do you want to access a page via SSL? - Just specify the https:// URL. - $url="https://www.openssl.org/"; -*/ - - $url="http://".$authentication."www.php.net/"; - - /* - * Generate a list of arguments for opening a connection and make an - * HTTP request from a given URL. - */ - $error=$http->GetRequestArguments($url,$arguments); - - if(strlen($realm)) - $arguments["AuthRealm"]=$realm; - - if(strlen($workstation)) - $arguments["AuthWorkstation"]=$workstation; - - $http->authentication_mechanism=""; // force a given authentication mechanism; - - /* - * If you need to access a site using a proxy server, use these - * arguments to set the proxy host and authentication credentials if - * necessary. - */ - /* - $arguments["ProxyHostName"]="127.0.0.1"; - $arguments["ProxyHostPort"]=3128; - $arguments["ProxyUser"]="proxyuser"; - $arguments["ProxyPassword"]="proxypassword"; - $arguments["ProxyRealm"]="proxyrealm"; // Proxy authentication realm or domain - $arguments["ProxyWorkstation"]="proxyrealm"; // Workstation for NTLM proxy authentication - $http->proxy_authentication_mechanism=""; // force a given proxy authentication mechanism; - */ - - /* - * If you need to access a site using a SOCKS server, use these - * arguments to set the SOCKS host and port. - */ - /* - $arguments["SOCKSHostName"]='127.0.0.1'; - $arguments["SOCKSHostPort"]=1080; - $arguments["SOCKSVersion"]='5'; - */ - - /* Set additional request headers */ - $arguments["Headers"]["Pragma"]="nocache"; -/* - Is it necessary to specify a certificate to access a page via SSL? - Specify the certificate file this way. - $arguments["SSLCertificateFile"]="my_certificate_file.pem"; - $arguments["SSLCertificatePassword"]="some certificate password"; -*/ - -/* - Is it necessary to preset some cookies? - Just use the SetCookie function to set each cookie this way: - - $cookie_name="LAST_LANG"; - $cookie_value="de"; - $cookie_expires="2010-01-01 00:00:00"; // "" for session cookies - $cookie_uri_path="/"; - $cookie_domain=".php.net"; - $cookie_secure=0; // 1 for SSL only cookies - $http->SetCookie($cookie_name, $cookie_value, $cookie_expiry, $cookie_uri_path, $cookie_domain, $cookie_secure); -*/ - - echo "

    • Opening connection to:
    • \n
      ",HtmlEntities($arguments["HostName"]),"
      \n"; - flush(); - $error=$http->Open($arguments); - - if($error=="") - { - echo "

    • Sending request for page:
    • \n
      ";
      -		echo HtmlEntities($arguments["RequestURI"]),"\n";
      -		if(strlen($user))
      -			echo "\nLogin:    ",$user,"\nPassword: ",str_repeat("*",strlen($password));
      -		echo "
      \n"; - flush(); - $error=$http->SendRequest($arguments); - - if($error=="") - { - echo "

    • Request:\n
      \n".HtmlEntities($http->request)."
      \n"; - echo "

    • Request headers:\n
      \n";
      -			for(Reset($http->request_headers),$header=0;$headerrequest_headers);Next($http->request_headers),$header++)
      -			{
      -				$header_name=Key($http->request_headers);
      -				if(GetType($http->request_headers[$header_name])=="array")
      -				{
      -					for($header_value=0;$header_valuerequest_headers[$header_name]);$header_value++)
      -						echo $header_name.": ".$http->request_headers[$header_name][$header_value],"\r\n";
      -				}
      -				else
      -					echo $header_name.": ".$http->request_headers[$header_name],"\r\n";
      -			}
      -			echo "
      \n"; - flush(); - - $headers=array(); - $error=$http->ReadReplyHeaders($headers); - if($error=="") - { - echo "

    • Response status code:\n

      ".$http->response_status; - switch($http->response_status) - { - case "301": - case "302": - case "303": - case "307": - echo " (redirect to ".$headers["location"].")
      \nSet the follow_redirect variable to handle redirect responses automatically."; - break; - } - echo "

      \n"; - echo "

    • Response headers:\n
      \n";
      -				for(Reset($headers),$header=0;$header\n";
      -				flush();
      -
      -				echo "

    • Response body:\n
      \n";
      -				for(;;)
      -				{
      -					$error=$http->ReadReplyBody($body,1000);
      -					if($error!=""
      -					|| strlen($body)==0)
      -						break;
      -					echo HtmlSpecialChars($body);
      -				}
      -				echo "
      \n"; - flush(); - } - } - $http->Close(); - } - if(strlen($error)) - echo "

      Error: ",$error,"

      \n"; -?> -
    -
    - - - --- a/owa/includes/index.php +++ /dev/null @@ -1,3 +1,1 @@ - + --- a/owa/includes/jsmin-1.1.1.php +++ /dev/null @@ -1,291 +1,1 @@ - - * @copyright 2002 Douglas Crockford (jsmin.c) - * @copyright 2008 Ryan Grove (PHP port) - * @license http://opensource.org/licenses/mit-license.php MIT License - * @version 1.1.1 (2008-03-02) - * @link http://code.google.com/p/jsmin-php/ - */ - -class JSMin { - const ORD_LF = 10; - const ORD_SPACE = 32; - - protected $a = ''; - protected $b = ''; - protected $input = ''; - protected $inputIndex = 0; - protected $inputLength = 0; - protected $lookAhead = null; - protected $output = ''; - - // -- Public Static Methods -------------------------------------------------- - - public static function minify($js) { - $jsmin = new JSMin($js); - return $jsmin->min(); - } - - // -- Public Instance Methods ------------------------------------------------ - - public function __construct($input) { - $this->input = str_replace("\r\n", "\n", $input); - $this->inputLength = strlen($this->input); - } - - // -- Protected Instance Methods --------------------------------------------- - - protected function action($d) { - switch($d) { - case 1: - $this->output .= $this->a; - - case 2: - $this->a = $this->b; - - if ($this->a === "'" || $this->a === '"') { - for (;;) { - $this->output .= $this->a; - $this->a = $this->get(); - - if ($this->a === $this->b) { - break; - } - - if (ord($this->a) <= self::ORD_LF) { - throw new JSMinException('Unterminated string literal.'); - } - - if ($this->a === '\\') { - $this->output .= $this->a; - $this->a = $this->get(); - } - } - } - - case 3: - $this->b = $this->next(); - - if ($this->b === '/' && ( - $this->a === '(' || $this->a === ',' || $this->a === '=' || - $this->a === ':' || $this->a === '[' || $this->a === '!' || - $this->a === '&' || $this->a === '|' || $this->a === '?')) { - - $this->output .= $this->a . $this->b; - - for (;;) { - $this->a = $this->get(); - - if ($this->a === '/') { - break; - } elseif ($this->a === '\\') { - $this->output .= $this->a; - $this->a = $this->get(); - } elseif (ord($this->a) <= self::ORD_LF) { - throw new JSMinException('Unterminated regular expression '. - 'literal.'); - } - - $this->output .= $this->a; - } - - $this->b = $this->next(); - } - } - } - - protected function get() { - $c = $this->lookAhead; - $this->lookAhead = null; - - if ($c === null) { - if ($this->inputIndex < $this->inputLength) { - $c = $this->input[$this->inputIndex]; - $this->inputIndex += 1; - } else { - $c = null; - } - } - - if ($c === "\r") { - return "\n"; - } - - if ($c === null || $c === "\n" || ord($c) >= self::ORD_SPACE) { - return $c; - } - - return ' '; - } - - protected function isAlphaNum($c) { - return ord($c) > 126 || $c === '\\' || preg_match('/^[\w\$]$/', $c) === 1; - } - - protected function min() { - $this->a = "\n"; - $this->action(3); - - while ($this->a !== null) { - switch ($this->a) { - case ' ': - if ($this->isAlphaNum($this->b)) { - $this->action(1); - } else { - $this->action(2); - } - break; - - case "\n": - switch ($this->b) { - case '{': - case '[': - case '(': - case '+': - case '-': - $this->action(1); - break; - - case ' ': - $this->action(3); - break; - - default: - if ($this->isAlphaNum($this->b)) { - $this->action(1); - } - else { - $this->action(2); - } - } - break; - - default: - switch ($this->b) { - case ' ': - if ($this->isAlphaNum($this->a)) { - $this->action(1); - break; - } - - $this->action(3); - break; - - case "\n": - switch ($this->a) { - case '}': - case ']': - case ')': - case '+': - case '-': - case '"': - case "'": - $this->action(1); - break; - - default: - if ($this->isAlphaNum($this->a)) { - $this->action(1); - } - else { - $this->action(3); - } - } - break; - - default: - $this->action(1); - break; - } - } - } - - return $this->output; - } - - protected function next() { - $c = $this->get(); - - if ($c === '/') { - switch($this->peek()) { - case '/': - for (;;) { - $c = $this->get(); - - if (ord($c) <= self::ORD_LF) { - return $c; - } - } - - case '*': - $this->get(); - - for (;;) { - switch($this->get()) { - case '*': - if ($this->peek() === '/') { - $this->get(); - return ' '; - } - break; - - case null: - throw new JSMinException('Unterminated comment.'); - } - } - - default: - return $c; - } - } - - return $c; - } - - protected function peek() { - $this->lookAhead = $this->get(); - return $this->lookAhead; - } -} - -// -- Exceptions --------------------------------------------------------------- -class JSMinException extends Exception {} -?> + --- a/owa/includes/lastRSS.php +++ /dev/null @@ -1,223 +1,1 @@ -cache_dir != '') { - $cache_file = $this->cache_dir . '/rsscache_' . md5($rss_url); - $timedif = @(time() - filemtime($cache_file)); - if ($timedif < $this->cache_time) { - // cached file is fresh enough, return cached array - $result = unserialize(join('', file($cache_file))); - // set 'cached' to 1 only if cached file is correct - if ($result) $result['cached'] = 1; - } else { - // cached file is too old, create new - $result = $this->Parse($rss_url); - $serialized = serialize($result); - if ($f = @fopen($cache_file, 'w')) { - fwrite ($f, $serialized, strlen($serialized)); - fclose($f); - } - if ($result) $result['cached'] = 0; - } - } - // If CACHE DISABLED >> load and parse the file directly - else { - $result = $this->Parse($rss_url); - - if ($result) $result['cached'] = 0; - } - // return result - return $result; - } - - // ------------------------------------------------------------------- - // Modification of preg_match(); return trimed field with index 1 - // from 'classic' preg_match() array output - // ------------------------------------------------------------------- - function my_preg_match ($pattern, $subject) { - // start regullar expression - preg_match($pattern, $subject, $out); - - // if there is some result... process it and return it - if(isset($out[1])) { - // Process CDATA (if present) - if ($this->CDATA == 'content') { // Get CDATA content (without CDATA tag) - $out[1] = strtr($out[1], array(''', ']]>'=>'')); - } elseif ($this->CDATA == 'strip') { // Strip CDATA - $out[1] = strtr($out[1], array(''', ']]>'=>'')); - } - - // If code page is set convert character encoding to required - if ($this->cp != '') - //$out[1] = $this->MyConvertEncoding($this->rsscp, $this->cp, $out[1]); - $out[1] = iconv($this->rsscp, $this->cp.'//TRANSLIT', $out[1]); - // Return result - return trim($out[1]); - } else { - // if there is NO result, return empty string - return ''; - } - } - - // ------------------------------------------------------------------- - // Replace HTML entities &something; by real characters - // ------------------------------------------------------------------- - function unhtmlentities ($string) { - // Get HTML entities table - $trans_tbl = get_html_translation_table (HTML_ENTITIES, ENT_QUOTES); - // Flip keys<==>values - $trans_tbl = array_flip ($trans_tbl); - // Add support for ' entity (missing in HTML_ENTITIES) - $trans_tbl += array(''' => "'"); - // Replace entities by values - return strtr ($string, $trans_tbl); - } - - // ------------------------------------------------------------------- - // Parse() is private method used by Get() to load and parse RSS file. - // Don't use Parse() in your scripts - use Get($rss_file) instead. - // ------------------------------------------------------------------- - function Parse ($rss_url) { - // Open and load RSS file - - if ($f = @fopen($rss_url, 'r')) { - $rss_content = ''; - while (!feof($f)) { - $rss_content .= fgets($f, 4096); - print $rss_content; - } - fclose($f); - - // Parse document encoding - $result['encoding'] = $this->my_preg_match("'encoding=[\'\"](.*?)[\'\"]'si", $rss_content); - // if document codepage is specified, use it - if ($result['encoding'] != '') - { $this->rsscp = $result['encoding']; } // This is used in my_preg_match() - // otherwise use the default codepage - else - { $this->rsscp = $this->default_cp; } // This is used in my_preg_match() - - // Parse CHANNEL info - preg_match("'(.*?)'si", $rss_content, $out_channel); - foreach($this->channeltags as $channeltag) - { - $temp = $this->my_preg_match("'<$channeltag.*?>(.*?)'si", $out_channel[1]); - if ($temp != '') $result[$channeltag] = $temp; // Set only if not empty - } - // If date_format is specified and lastBuildDate is valid - if ($this->date_format != '' && ($timestamp = strtotime($result['lastBuildDate'])) !==-1) { - // convert lastBuildDate to specified date format - $result['lastBuildDate'] = date($this->date_format, $timestamp); - } - - // Parse TEXTINPUT info - preg_match("']*[^/])>(.*?)'si", $rss_content, $out_textinfo); - // This a little strange regexp means: - // Look for tag with or without any attributes, but skip truncated version (it's not beggining tag) - if (isset($out_textinfo[2])) { - foreach($this->textinputtags as $textinputtag) { - $temp = $this->my_preg_match("'<$textinputtag.*?>(.*?)'si", $out_textinfo[2]); - if ($temp != '') $result['textinput_'.$textinputtag] = $temp; // Set only if not empty - } - } - // Parse IMAGE info - preg_match("'(.*?)'si", $rss_content, $out_imageinfo); - if (isset($out_imageinfo[1])) { - foreach($this->imagetags as $imagetag) { - $temp = $this->my_preg_match("'<$imagetag.*?>(.*?)'si", $out_imageinfo[1]); - if ($temp != '') $result['image_'.$imagetag] = $temp; // Set only if not empty - } - } - // Parse ITEMS - preg_match_all("'(.*?)'si", $rss_content, $items); - $rss_items = $items[2]; - $i = 0; - $result['items'] = array(); // create array even if there are no items - foreach($rss_items as $rss_item) { - // If number of items is lower then limit: Parse one item - if ($i < $this->items_limit || $this->items_limit == 0) { - foreach($this->itemtags as $itemtag) { - $temp = $this->my_preg_match("'<$itemtag.*?>(.*?)'si", $rss_item); - if ($temp != '') $result['items'][$i][$itemtag] = $temp; // Set only if not empty - } - // Strip HTML tags and other bullshit from DESCRIPTION - if ($this->stripHTML && $result['items'][$i]['description']) - $result['items'][$i]['description'] = strip_tags($this->unhtmlentities(strip_tags($result['items'][$i]['description']))); - // Strip HTML tags and other bullshit from TITLE - if ($this->stripHTML && $result['items'][$i]['title']) - $result['items'][$i]['title'] = strip_tags($this->unhtmlentities(strip_tags($result['items'][$i]['title']))); - // If date_format is specified and pubDate is valid - if ($this->date_format != '' && ($timestamp = strtotime($result['items'][$i]['pubDate'])) !==-1) { - // convert pubDate to specified date format - $result['items'][$i]['pubDate'] = date($this->date_format, $timestamp); - } - // Item counter - $i++; - } - } - - $result['items_count'] = $i; - return $result; - } - else // Error in opening return False - { - return False; - } - } -} - -?> + --- a/owa/includes/memcached-client.php +++ /dev/null @@ -1,1098 +1,1 @@ - | -// | 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. | -// | | -// | 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. | -// +---------------------------------------------------------------------------+ -// | Author: Ryan T. Dean | -// | Heavily influenced by the Perl memcached client by Brad Fitzpatrick. | -// | Permission granted by Brad Fitzpatrick for relicense of ported Perl | -// | client logic under 2-clause BSD license. | -// +---------------------------------------------------------------------------+ -// -// $TCAnet$ -// -/** - * This is the PHP client for memcached - a distributed memory cache daemon. - * More information is available at http://www.danga.com/memcached/ - * - * Usage example: - * - * require_once 'memcached.php'; - * - * $mc = new memcached(array( - * 'servers' => array('127.0.0.1:10000', - * array('192.0.0.1:10010', 2), - * '127.0.0.1:10020'), - * 'debug' => false, - * 'compress_threshold' => 10240, - * 'persistant' => true)); - * - * $mc->add('key', array('some', 'array')); - * $mc->replace('key', 'some random string'); - * $val = $mc->get('key'); - * - * @author Ryan T. Dean - * @version 0.1.2 - */ - -// {{{ requirements -// }}} - -// {{{ class memcached -/** - * memcached client class implemented using (p)fsockopen() - * - * @author Ryan T. Dean - * @ingroup Cache - */ -class memcached -{ - // {{{ properties - // {{{ public - - // {{{ constants - // {{{ flags - - /** - * Flag: indicates data is serialized - */ - const SERIALIZED = 1; - - /** - * Flag: indicates data is compressed - */ - const COMPRESSED = 2; - - // }}} - - /** - * Minimum savings to store data compressed - */ - const COMPRESSION_SAVINGS = 0.20; - - // }}} - - - /** - * Command statistics - * - * @var array - * @access public - */ - var $stats; - - // }}} - // {{{ private - - /** - * Cached Sockets that are connected - * - * @var array - * @access private - */ - var $_cache_sock; - - /** - * Current debug status; 0 - none to 9 - profiling - * - * @var boolean - * @access private - */ - var $_debug; - - /** - * Dead hosts, assoc array, 'host'=>'unixtime when ok to check again' - * - * @var array - * @access private - */ - var $_host_dead; - - /** - * Is compression available? - * - * @var boolean - * @access private - */ - var $_have_zlib; - - /** - * Do we want to use compression? - * - * @var boolean - * @access private - */ - var $_compress_enable; - - /** - * At how many bytes should we compress? - * - * @var integer - * @access private - */ - var $_compress_threshold; - - /** - * Are we using persistant links? - * - * @var boolean - * @access private - */ - var $_persistant; - - /** - * If only using one server; contains ip:port to connect to - * - * @var string - * @access private - */ - var $_single_sock; - - /** - * Array containing ip:port or array(ip:port, weight) - * - * @var array - * @access private - */ - var $_servers; - - /** - * Our bit buckets - * - * @var array - * @access private - */ - var $_buckets; - - /** - * Total # of bit buckets we have - * - * @var integer - * @access private - */ - var $_bucketcount; - - /** - * # of total servers we have - * - * @var integer - * @access private - */ - var $_active; - - /** - * Stream timeout in seconds. Applies for example to fread() - * - * @var integer - * @access private - */ - var $_timeout_seconds; - - /** - * Stream timeout in microseconds - * - * @var integer - * @access private - */ - var $_timeout_microseconds; - - /** - * Connect timeout in seconds - */ - var $_connect_timeout; - - /** - * Number of connection attempts for each server - */ - var $_connect_attempts; - - // }}} - // }}} - // {{{ methods - // {{{ public functions - // {{{ memcached() - - /** - * Memcache initializer - * - * @param array $args Associative array of settings - * - * @return mixed - * @access public - */ - function memcached ($args) - { - $this->set_servers(@$args['servers']); - $this->_debug = @$args['debug']; - $this->stats = array(); - $this->_compress_threshold = @$args['compress_threshold']; - $this->_persistant = array_key_exists('persistant', $args) ? (@$args['persistant']) : false; - $this->_compress_enable = true; - $this->_have_zlib = function_exists("gzcompress"); - - $this->_cache_sock = array(); - $this->_host_dead = array(); - - $this->_timeout_seconds = 1; - $this->_timeout_microseconds = 0; - - $this->_connect_timeout = 0.01; - $this->_connect_attempts = 3; - } - - // }}} - // {{{ add() - - /** - * Adds a key/value to the memcache server if one isn't already set with - * that key - * - * @param string $key Key to set with data - * @param mixed $val Value to store - * @param integer $exp (optional) Time to expire data at - * - * @return boolean - * @access public - */ - function add ($key, $val, $exp = 0) - { - return $this->_set('add', $key, $val, $exp); - } - - // }}} - // {{{ decr() - - /** - * Decriment a value stored on the memcache server - * - * @param string $key Key to decriment - * @param integer $amt (optional) Amount to decriment - * - * @return mixed FALSE on failure, value on success - * @access public - */ - function decr ($key, $amt=1) - { - return $this->_incrdecr('decr', $key, $amt); - } - - // }}} - // {{{ delete() - - /** - * Deletes a key from the server, optionally after $time - * - * @param string $key Key to delete - * @param integer $time (optional) How long to wait before deleting - * - * @return boolean TRUE on success, FALSE on failure - * @access public - */ - function delete ($key, $time = 0) - { - if (!$this->_active) - return false; - - $sock = $this->get_sock($key); - if (!is_resource($sock)) - return false; - - $key = is_array($key) ? $key[1] : $key; - - @$this->stats['delete']++; - $cmd = "delete $key $time\r\n"; - if(!$this->_safe_fwrite($sock, $cmd, strlen($cmd))) - { - $this->_dead_sock($sock); - return false; - } - $res = trim(fgets($sock)); - - if ($this->_debug) - $this->_debugprint(sprintf("MemCache: delete %s (%s)\n", $key, $res)); - - if ($res == "DELETED") - return true; - return false; - } - - // }}} - // {{{ disconnect_all() - - /** - * Disconnects all connected sockets - * - * @access public - */ - function disconnect_all () - { - foreach ($this->_cache_sock as $sock) - fclose($sock); - - $this->_cache_sock = array(); - } - - // }}} - // {{{ enable_compress() - - /** - * Enable / Disable compression - * - * @param boolean $enable TRUE to enable, FALSE to disable - * - * @access public - */ - function enable_compress ($enable) - { - $this->_compress_enable = $enable; - } - - // }}} - // {{{ forget_dead_hosts() - - /** - * Forget about all of the dead hosts - * - * @access public - */ - function forget_dead_hosts () - { - $this->_host_dead = array(); - } - - // }}} - // {{{ get() - - /** - * Retrieves the value associated with the key from the memcache server - * - * @param string $key Key to retrieve - * - * @return mixed - * @access public - */ - function get ($key) - { - $fname = 'memcached::get'; - - if (defined('MEDIAWIKI')) wfProfileIn( $fname ); - - if ( $this->_debug ) { - $this->_debugprint( "get($key)\n" ); - } - - if (!$this->_active) { - if (defined('MEDIAWIKI')) wfProfileOut( $fname ); - return false; - } - - $sock = $this->get_sock($key); - - if (!is_resource($sock)) { - if (defined('MEDIAWIKI')) wfProfileOut( $fname ); - return false; - } - - @$this->stats['get']++; - - $cmd = "get $key\r\n"; - if (!$this->_safe_fwrite($sock, $cmd, strlen($cmd))) - { - $this->_dead_sock($sock); - if (defined('MEDIAWIKI')) wfProfileOut( $fname ); - return false; - } - - $val = array(); - $this->_load_items($sock, $val); - - if ($this->_debug) - foreach ($val as $k => $v) - $this->_debugprint(sprintf("MemCache: sock %s got %s\n", serialize($sock), $k)); - - if (defined('MEDIAWIKI')) wfProfileOut( $fname ); - return @$val[$key]; - } - - // }}} - // {{{ get_multi() - - /** - * Get multiple keys from the server(s) - * - * @param array $keys Keys to retrieve - * - * @return array - * @access public - */ - function get_multi ($keys) - { - if (!$this->_active) - return false; - - @$this->stats['get_multi']++; - $sock_keys = array(); - - foreach ($keys as $key) - { - $sock = $this->get_sock($key); - if (!is_resource($sock)) continue; - $key = is_array($key) ? $key[1] : $key; - if (!isset($sock_keys[$sock])) - { - $sock_keys[$sock] = array(); - $socks[] = $sock; - } - $sock_keys[$sock][] = $key; - } - - // Send out the requests - foreach ($socks as $sock) - { - $cmd = "get"; - foreach ($sock_keys[$sock] as $key) - { - $cmd .= " ". $key; - } - $cmd .= "\r\n"; - - if ($this->_safe_fwrite($sock, $cmd, strlen($cmd))) - { - $gather[] = $sock; - } else - { - $this->_dead_sock($sock); - } - } - - // Parse responses - $val = array(); - foreach ($gather as $sock) - { - $this->_load_items($sock, $val); - } - - if ($this->_debug) - foreach ($val as $k => $v) - $this->_debugprint(sprintf("MemCache: got %s\n", $k)); - - return $val; - } - - // }}} - // {{{ incr() - - /** - * Increments $key (optionally) by $amt - * - * @param string $key Key to increment - * @param integer $amt (optional) amount to increment - * - * @return integer New key value? - * @access public - */ - function incr ($key, $amt=1) - { - return $this->_incrdecr('incr', $key, $amt); - } - - // }}} - // {{{ replace() - - /** - * Overwrites an existing value for key; only works if key is already set - * - * @param string $key Key to set value as - * @param mixed $value Value to store - * @param integer $exp (optional) Experiation time - * - * @return boolean - * @access public - */ - function replace ($key, $value, $exp=0) - { - return $this->_set('replace', $key, $value, $exp); - } - - // }}} - // {{{ run_command() - - /** - * Passes through $cmd to the memcache server connected by $sock; returns - * output as an array (null array if no output) - * - * NOTE: due to a possible bug in how PHP reads while using fgets(), each - * line may not be terminated by a \r\n. More specifically, my testing - * has shown that, on FreeBSD at least, each line is terminated only - * with a \n. This is with the PHP flag auto_detect_line_endings set - * to falase (the default). - * - * @param resource $sock Socket to send command on - * @param string $cmd Command to run - * - * @return array Output array - * @access public - */ - function run_command ($sock, $cmd) - { - if (!is_resource($sock)) - return array(); - - if (!$this->_safe_fwrite($sock, $cmd, strlen($cmd))) - return array(); - - while (true) - { - $res = fgets($sock); - $ret[] = $res; - if (preg_match('/^END/', $res)) - break; - if (strlen($res) == 0) - break; - } - return $ret; - } - - // }}} - // {{{ set() - - /** - * Unconditionally sets a key to a given value in the memcache. Returns true - * if set successfully. - * - * @param string $key Key to set value as - * @param mixed $value Value to set - * @param integer $exp (optional) Experiation time - * - * @return boolean TRUE on success - * @access public - */ - function set ($key, $value, $exp=0) - { - return $this->_set('set', $key, $value, $exp); - } - - // }}} - // {{{ set_compress_threshold() - - /** - * Sets the compression threshold - * - * @param integer $thresh Threshold to compress if larger than - * - * @access public - */ - function set_compress_threshold ($thresh) - { - $this->_compress_threshold = $thresh; - } - - // }}} - // {{{ set_debug() - - /** - * Sets the debug flag - * - * @param boolean $dbg TRUE for debugging, FALSE otherwise - * - * @access public - * - * @see memcahced::memcached - */ - function set_debug ($dbg) - { - $this->_debug = $dbg; - } - - // }}} - // {{{ set_servers() - - /** - * Sets the server list to distribute key gets and puts between - * - * @param array $list Array of servers to connect to - * - * @access public - * - * @see memcached::memcached() - */ - function set_servers ($list) - { - $this->_servers = $list; - $this->_active = count($list); - $this->_buckets = null; - $this->_bucketcount = 0; - - $this->_single_sock = null; - if ($this->_active == 1) - $this->_single_sock = $this->_servers[0]; - } - - /** - * Sets the timeout for new connections - * - * @param integer $seconds Number of seconds - * @param integer $microseconds Number of microseconds - * - * @access public - */ - function set_timeout ($seconds, $microseconds) - { - $this->_timeout_seconds = $seconds; - $this->_timeout_microseconds = $microseconds; - } - - // }}} - // }}} - // {{{ private methods - // {{{ _close_sock() - - /** - * Close the specified socket - * - * @param string $sock Socket to close - * - * @access private - */ - function _close_sock ($sock) - { - $host = array_search($sock, $this->_cache_sock); - fclose($this->_cache_sock[$host]); - unset($this->_cache_sock[$host]); - } - - // }}} - // {{{ _connect_sock() - - /** - * Connects $sock to $host, timing out after $timeout - * - * @param integer $sock Socket to connect - * @param string $host Host:IP to connect to - * - * @return boolean - * @access private - */ - function _connect_sock (&$sock, $host) - { - list ($ip, $port) = explode(":", $host); - $sock = false; - $timeout = $this->_connect_timeout; - $errno = $errstr = null; - for ($i = 0; !$sock && $i < $this->_connect_attempts; $i++) { - if ($i > 0) { - # Sleep until the timeout, in case it failed fast - $elapsed = microtime(true) - $t; - if ( $elapsed < $timeout ) { - usleep(($timeout - $elapsed) * 1e6); - } - $timeout *= 2; - } - $t = microtime(true); - if ($this->_persistant == 1) - { - $sock = @pfsockopen($ip, $port, $errno, $errstr, $timeout); - } else - { - $sock = @fsockopen($ip, $port, $errno, $errstr, $timeout); - } - } - if (!$sock) { - if ($this->_debug) - $this->_debugprint( "Error connecting to $host: $errstr\n" ); - return false; - } - - // Initialise timeout - stream_set_timeout($sock, $this->_timeout_seconds, $this->_timeout_microseconds); - - return true; - } - - // }}} - // {{{ _dead_sock() - - /** - * Marks a host as dead until 30-40 seconds in the future - * - * @param string $sock Socket to mark as dead - * - * @access private - */ - function _dead_sock ($sock) - { - $host = array_search($sock, $this->_cache_sock); - @list ($ip, /* $port */) = explode(":", $host); - $this->_host_dead[$ip] = time() + 30 + intval(rand(0, 10)); - $this->_host_dead[$host] = $this->_host_dead[$ip]; - unset($this->_cache_sock[$host]); - } - - // }}} - // {{{ get_sock() - - /** - * get_sock - * - * @param string $key Key to retrieve value for; - * - * @return mixed resource on success, false on failure - * @access private - */ - function get_sock ($key) - { - if (!$this->_active) - return false; - - if ($this->_single_sock !== null) { - $this->_flush_read_buffer($this->_single_sock); - return $this->sock_to_host($this->_single_sock); - } - - $hv = is_array($key) ? intval($key[0]) : $this->_hashfunc($key); - - if ($this->_buckets === null) - { - foreach ($this->_servers as $v) - { - if (is_array($v)) - { - for ($i=0; $i<$v[1]; $i++) - $bu[] = $v[0]; - } else - { - $bu[] = $v; - } - } - $this->_buckets = $bu; - $this->_bucketcount = count($bu); - } - - $realkey = is_array($key) ? $key[1] : $key; - for ($tries = 0; $tries<20; $tries++) - { - $host = $this->_buckets[$hv % $this->_bucketcount]; - $sock = $this->sock_to_host($host); - if (is_resource($sock)) { - $this->_flush_read_buffer($sock); - return $sock; - } - $hv = $this->_hashfunc( $hv . $realkey ); - } - - return false; - } - - // }}} - // {{{ _hashfunc() - - /** - * Creates a hash integer based on the $key - * - * @param string $key Key to hash - * - * @return integer Hash value - * @access private - */ - function _hashfunc ($key) - { - # Hash function must on [0,0x7ffffff] - # We take the first 31 bits of the MD5 hash, which unlike the hash - # function used in a previous version of this client, works - return hexdec(substr(md5($key),0,8)) & 0x7fffffff; - } - - // }}} - // {{{ _incrdecr() - - /** - * Perform increment/decriment on $key - * - * @param string $cmd Command to perform - * @param string $key Key to perform it on - * @param integer $amt Amount to adjust - * - * @return integer New value of $key - * @access private - */ - function _incrdecr ($cmd, $key, $amt=1) - { - if (!$this->_active) - return null; - - $sock = $this->get_sock($key); - if (!is_resource($sock)) - return null; - - $key = is_array($key) ? $key[1] : $key; - @$this->stats[$cmd]++; - if (!$this->_safe_fwrite($sock, "$cmd $key $amt\r\n")) - return $this->_dead_sock($sock); - - stream_set_timeout($sock, 1, 0); - $line = fgets($sock); - $match = array(); - if (!preg_match('/^(\d+)/', $line, $match)) - return null; - return $match[1]; - } - - // }}} - // {{{ _load_items() - - /** - * Load items into $ret from $sock - * - * @param resource $sock Socket to read from - * @param array $ret Returned values - * - * @access private - */ - function _load_items ($sock, &$ret) - { - while (1) - { - $decl = fgets($sock); - if ($decl == "END\r\n") - { - return true; - } elseif (preg_match('/^VALUE (\S+) (\d+) (\d+)\r\n$/', $decl, $match)) - { - list($rkey, $flags, $len) = array($match[1], $match[2], $match[3]); - $bneed = $len+2; - $offset = 0; - - while ($bneed > 0) - { - $data = fread($sock, $bneed); - $n = strlen($data); - if ($n == 0) - break; - $offset += $n; - $bneed -= $n; - @$ret[$rkey] .= $data; - } - - if ($offset != $len+2) - { - // Something is borked! - if ($this->_debug) - $this->_debugprint(sprintf("Something is borked! key %s expecting %d got %d length\n", $rkey, $len+2, $offset)); - - unset($ret[$rkey]); - $this->_close_sock($sock); - return false; - } - - if ($this->_have_zlib && $flags & memcached::COMPRESSED) - $ret[$rkey] = gzuncompress($ret[$rkey]); - - $ret[$rkey] = rtrim($ret[$rkey]); - - if ($flags & memcached::SERIALIZED) - $ret[$rkey] = unserialize($ret[$rkey]); - - } else - { - $this->_debugprint("Error parsing memcached response\n"); - return 0; - } - } - } - - // }}} - // {{{ _set() - - /** - * Performs the requested storage operation to the memcache server - * - * @param string $cmd Command to perform - * @param string $key Key to act on - * @param mixed $val What we need to store - * @param integer $exp When it should expire - * - * @return boolean - * @access private - */ - function _set ($cmd, $key, $val, $exp) - { - if (!$this->_active) - return false; - - $sock = $this->get_sock($key); - if (!is_resource($sock)) - return false; - - @$this->stats[$cmd]++; - - $flags = 0; - - if (!is_scalar($val)) - { - $val = serialize($val); - $flags |= memcached::SERIALIZED; - if ($this->_debug) - $this->_debugprint(sprintf("client: serializing data as it is not scalar\n")); - } - - $len = strlen($val); - - if ($this->_have_zlib && $this->_compress_enable && - $this->_compress_threshold && $len >= $this->_compress_threshold) - { - $c_val = gzcompress($val, 9); - $c_len = strlen($c_val); - - if ($c_len < $len*(1 - memcached::COMPRESSION_SAVINGS)) - { - if ($this->_debug) - $this->_debugprint(sprintf("client: compressing data; was %d bytes is now %d bytes\n", $len, $c_len)); - $val = $c_val; - $len = $c_len; - $flags |= memcached::COMPRESSED; - } - } - if (!$this->_safe_fwrite($sock, "$cmd $key $flags $exp $len\r\n$val\r\n")) - return $this->_dead_sock($sock); - - $line = trim(fgets($sock)); - - if ($this->_debug) - { - $this->_debugprint(sprintf("%s %s (%s)\n", $cmd, $key, $line)); - } - if ($line == "STORED") - return true; - return false; - } - - // }}} - // {{{ sock_to_host() - - /** - * Returns the socket for the host - * - * @param string $host Host:IP to get socket for - * - * @return mixed IO Stream or false - * @access private - */ - function sock_to_host ($host) - { - if (isset($this->_cache_sock[$host])) - return $this->_cache_sock[$host]; - - $sock = null; - $now = time(); - list ($ip, /* $port */) = explode (":", $host); - if (isset($this->_host_dead[$host]) && $this->_host_dead[$host] > $now || - isset($this->_host_dead[$ip]) && $this->_host_dead[$ip] > $now) - return null; - - if (!$this->_connect_sock($sock, $host)) - return $this->_dead_sock($host); - - // Do not buffer writes - stream_set_write_buffer($sock, 0); - - $this->_cache_sock[$host] = $sock; - - return $this->_cache_sock[$host]; - } - - function _debugprint($str){ - print($str); - } - - /** - * Write to a stream, timing out after the correct amount of time - * - * @return bool false on failure, true on success - */ - /* - function _safe_fwrite($f, $buf, $len = false) { - stream_set_blocking($f, 0); - - if ($len === false) { - wfDebug("Writing " . strlen( $buf ) . " bytes\n"); - $bytesWritten = fwrite($f, $buf); - } else { - wfDebug("Writing $len bytes\n"); - $bytesWritten = fwrite($f, $buf, $len); - } - $n = stream_select($r=NULL, $w = array($f), $e = NULL, 10, 0); - # $this->_timeout_seconds, $this->_timeout_microseconds); - - wfDebug("stream_select returned $n\n"); - stream_set_blocking($f, 1); - return $n == 1; - return $bytesWritten; - }*/ - - /** - * Original behaviour - */ - function _safe_fwrite($f, $buf, $len = false) { - if ($len === false) { - $bytesWritten = fwrite($f, $buf); - } else { - $bytesWritten = fwrite($f, $buf, $len); - } - return $bytesWritten; - } - - /** - * Flush the read buffer of a stream - */ - function _flush_read_buffer($f) { - if (!is_resource($f)) { - return; - } - - $r = array( $f ); - $w = NULL; - $e = NULL; - $n = stream_select( $r, $w, $e, 0, 0 ); - while ($n == 1 && !feof($f)) { - fread($f, 1024); - $r= array( $f ); - $w = NULL; - $e = NULL; - $n = stream_select( $r, $w, $e, 0, 0 ); - } - } - - // }}} - // }}} - // }}} -} - -// vim: sts=3 sw=3 et - -// }}} -?> --- a/owa/includes/pqp/README.txt +++ /dev/null @@ -1,102 +1,1 @@ -PHP Quick Profiler README -http://particletree.com/features/php-quick-profiler/ -#### On This Page #### - -1. Introduction and Overview of Files -2. Getting the Example Working -3. Setting up the Database Class -4. Using Smarty instead of PHP echos - -##################################### -1. Introduction and Overview of Files -##################################### - -PHP Quick Profiler is a helper class that outputs debugging related information -to the screen when the page has finished executing. This zip package contains a -functional example project that utilizes the helper classes. - -- index.php : The landing page of the example. Navigate to it in your browser to see the demo. -- display.php : Contains the markup for PQP. -- pqp.tpl : A Smarty variation of the PQP markup. -- /css/ : The stylesheets used by PQP. -- /images/ : The images used by PQP. -- /classes/Console.php : The class used to log items to the PQP display. -- /classes/MySqlDatabase : A sample database wrapper to explain how database logging could be implemented. -- /classes/PhpQuickProfiler : The core class that compiles the data before outputting to the browser. - -############################## -2. Getting the Example Working -############################## - -For the most part, the example will work once you drop it in your root directory. -There are a few settings to check though. - -- In PHPQuickProfiler.php, set the $config member variable to the path relative to your root (located in the constructor). -- If PQP does not appear after navigating to index.php in your browser, locate the destructor -of the PQPExample class (at the bottom). Rename the function from __destruct() to display(). Then, -manually call the function display() just underneath the class after the call to init(). The reason this would -happen is because the destructor is not firing on your server configuration. -- At this point, everything should work except for the database tab. - -################################ -3. Setting up the Database Class -################################ - -NOTE - This step does require knowledge on PHP / Database interactions. There is no copy/paste solution. - -Logging database data is by far the hardest part of integrating PQP into your own project. It -requires that you have some sort of database wrapper around your code. If you do, it should be easy to implement. -To show you how it works, follow these steps with the sample database class we have provided. - -- Create a database named 'test' and run the following query on it. - -CREATE TABLE `Posts` ( - `PostId` int(11) unsigned NOT NULL default '0', - PRIMARY KEY (`PostId`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1 - -- In index.php, uncomment out the second include, which includes the database class. -- In index.php, uncomment out the function sampleDatabaseData(). -- In the sampleDatabaseData(), supply your database host, username, password, and database name. - -Given those steps, database logging will be enabled. If you would like to transition this to your own database class, -open /classes/MySqlDatabase.php and note the following: - -- $queryCount and $queries member variables declared on initialization -- When a query is run, the following is executed: - -$start = $this->getTime(); -$rs = mysql_query($sql, $this->conn); -$this->queryCount += 1; -$this->logQuery($sql, $start); - -- Everything in /classes/MySqlDatabase.php under the section comment "Debugging" -must be available for the above snippet to work. - -#################################### -4. Using Smarty instead of PHP echos -#################################### - -We love Smarty and hate echos, but to make this work for everyone we set the default as echos. To show love -to the Smarty users out there, we have included a pqp.tpl file for PQP. To make it work, you would have to change -the following in /classes/PhpQuickProfiler.php: - -- Add a require_once to your Smarty Library. -- In the constructor, declare an instance of Smarty: $this->smarty = new Smarty(...); -- Everywhere in in the code you see $this->output[... change it to a smarty assign. For example: - -$this->output['logs'] = $logs; - -... becomes ... - -$this->smarty->assign('logs', $logs); - -After doing it once, you'll see the pattern and can probably use a find/replace to do the rest quickly. - -- Locate the display() function at the bottom. Remove the last 2 lines, and add: - -$this->smarty->display('pathToDisplay.tpl'); - -All set after that! - --- a/owa/includes/pqp/classes/Console.php +++ /dev/null @@ -1,90 +1,1 @@ - $data, - "type" => 'log' - ); - $GLOBALS['debugger_logs']['console'][] = $logItem; - $GLOBALS['debugger_logs']['logCount'] += 1; - } - - /*--------------------------------------------------- - LOG MEMORY USAGE OF VARIABLE OR ENTIRE SCRIPT - -----------------------------------------------------*/ - - public function logMemory($object = false, $name = 'PHP') { - $memory = memory_get_usage(); - if($object) $memory = strlen(serialize($object)); - $logItem = array( - "data" => $memory, - "type" => 'memory', - "name" => $name, - "dataType" => gettype($object) - ); - $GLOBALS['debugger_logs']['console'][] = $logItem; - $GLOBALS['debugger_logs']['memoryCount'] += 1; - } - - /*----------------------------------- - LOG A PHP EXCEPTION OBJECT - ------------------------------------*/ - - public function logError($exception, $message) { - $logItem = array( - "data" => $message, - "type" => 'error', - "file" => $exception->getFile(), - "line" => $exception->getLine() - ); - $GLOBALS['debugger_logs']['console'][] = $logItem; - $GLOBALS['debugger_logs']['errorCount'] += 1; - } - - /*------------------------------------ - POINT IN TIME SPEED SNAPSHOT - -------------------------------------*/ - - public function logSpeed($name = 'Point in Time') { - $logItem = array( - "data" => PhpQuickProfiler::getMicroTime(), - "type" => 'speed', - "name" => $name - ); - $GLOBALS['debugger_logs']['console'][] = $logItem; - $GLOBALS['debugger_logs']['speedCount'] += 1; - } - - /*----------------------------------- - SET DEFAULTS & RETURN LOGS - ------------------------------------*/ - - public function getLogs() { - if(!$GLOBALS['debugger_logs']['memoryCount']) $GLOBALS['debugger_logs']['memoryCount'] = 0; - if(!$GLOBALS['debugger_logs']['logCount']) $GLOBALS['debugger_logs']['logCount'] = 0; - if(!$GLOBALS['debugger_logs']['speedCount']) $GLOBALS['debugger_logs']['speedCount'] = 0; - if(!$GLOBALS['debugger_logs']['errorCount']) $GLOBALS['debugger_logs']['errorCount'] = 0; - return $GLOBALS['debugger_logs']; - } -} - -?> --- a/owa/includes/pqp/classes/MySqlDatabase.php +++ /dev/null @@ -1,116 +1,1 @@ -host = $host; - $this->user = $user; - $this->password = $password; - } - - function connect($new = false) { - $this->conn = mysql_connect($this->host, $this->user, $this->password, $new); - if(!$this->conn) { - throw new Exception('We\'re working on a few connection issues.'); - } - } - - function changeDatabase($database) { - $this->database = $database; - if($this->conn) { - if(!mysql_select_db($database, $this->conn)) { - throw new CustomException('We\'re working on a few connection issues.'); - } - } - } - - function lazyLoadConnection() { - $this->connect(true); - if($this->database) $this->changeDatabase($this->database); - } - - /*----------------------------------- - QUERY - ------------------------------------*/ - - function query($sql) { - if(!$this->conn) $this->lazyLoadConnection(); - $start = $this->getTime(); - $rs = mysql_query($sql, $this->conn); - $this->queryCount += 1; - $this->logQuery($sql, $start); - if(!$rs) { - throw new Exception('Could not execute query.'); - } - return $rs; - } - - /*----------------------------------- - DEBUGGING - ------------------------------------*/ - - function logQuery($sql, $start) { - $query = array( - 'sql' => $sql, - 'time' => ($this->getTime() - $start)*1000 - ); - array_push($this->queries, $query); - } - - function getTime() { - $time = microtime(); - $time = explode(' ', $time); - $time = $time[1] + $time[0]; - $start = $time; - return $start; - } - - public function getReadableTime($time) { - $ret = $time; - $formatter = 0; - $formats = array('ms', 's', 'm'); - if($time >= 1000 && $time < 60000) { - $formatter = 1; - $ret = ($time / 1000); - } - if($time >= 60000) { - $formatter = 2; - $ret = ($time / 1000) / 60; - } - $ret = number_format($ret,3,'.','') . ' ' . $formats[$formatter]; - return $ret; - } - - function __destruct() { - @mysql_close($this->conn); - } - -} - -?> - --- a/owa/includes/pqp/classes/PhpQuickProfiler.php +++ /dev/null @@ -1,204 +1,1 @@ -startTime = $startTime; - $this->config = $config; - require_once($config.'classes/Console.php'); - } - - /*------------------------------------------- - FORMAT THE DIFFERENT TYPES OF LOGS - -------------------------------------------*/ - - public function gatherConsoleData() { - $logs = Console::getLogs(); - if($logs['console']) { - foreach($logs['console'] as $key => $log) { - if($log['type'] == 'log') { - $logs['console'][$key]['data'] = print_r($log['data'], true); - } - elseif($log['type'] == 'memory') { - $logs['console'][$key]['data'] = $this->getReadableFileSize($log['data']); - } - elseif($log['type'] == 'speed') { - $logs['console'][$key]['data'] = $this->getReadableTime(($log['data'] - $this->startTime)*1000); - } - } - } - $this->output['logs'] = $logs; - } - - /*------------------------------------------- - AGGREGATE DATA ON THE FILES INCLUDED - -------------------------------------------*/ - - public function gatherFileData() { - $files = get_included_files(); - $fileList = array(); - $fileTotals = array( - "count" => count($files), - "size" => 0, - "largest" => 0, - ); - - foreach($files as $key => $file) { - $size = filesize($file); - $fileList[] = array( - 'name' => $file, - 'size' => $this->getReadableFileSize($size) - ); - $fileTotals['size'] += $size; - if($size > $fileTotals['largest']) $fileTotals['largest'] = $size; - } - - $fileTotals['size'] = $this->getReadableFileSize($fileTotals['size']); - $fileTotals['largest'] = $this->getReadableFileSize($fileTotals['largest']); - $this->output['files'] = $fileList; - $this->output['fileTotals'] = $fileTotals; - } - - /*------------------------------------------- - MEMORY USAGE AND MEMORY AVAILABLE - -------------------------------------------*/ - - public function gatherMemoryData() { - $memoryTotals = array(); - $memoryTotals['used'] = $this->getReadableFileSize(memory_get_peak_usage()); - $memoryTotals['total'] = ini_get("memory_limit"); - $this->output['memoryTotals'] = $memoryTotals; - } - - /*-------------------------------------------------------- - QUERY DATA -- DATABASE OBJECT WITH LOGGING REQUIRED - ----------------------------------------------------------*/ - - public function gatherQueryData() { - $queryTotals = array(); - $queryTotals['count'] = 0; - $queryTotals['time'] = 0; - $queries = array(); - - if($this->db != '') { - $queryTotals['count'] += $this->db->queryCount; - foreach($this->db->queries as $key => $query) { - $query = $this->attemptToExplainQuery($query); - $queryTotals['time'] += $query['time']; - $query['time'] = $this->getReadableTime($query['time']); - $queries[] = $query; - } - } - - $queryTotals['time'] = $this->getReadableTime($queryTotals['time']); - $this->output['queries'] = $queries; - $this->output['queryTotals'] = $queryTotals; - } - - /*-------------------------------------------------------- - CALL SQL EXPLAIN ON THE QUERY TO FIND MORE INFO - ----------------------------------------------------------*/ - - function attemptToExplainQuery($query) { - try { - $sql = 'EXPLAIN '.$query['sql']; - $rs = $this->db->query($sql); - } - catch(Exception $e) {} - if($rs) { - $row = mysql_fetch_array($rs, MYSQL_ASSOC); - $query['explain'] = $row; - } - return $query; - } - - /*------------------------------------------- - SPEED DATA FOR ENTIRE PAGE LOAD - -------------------------------------------*/ - - public function gatherSpeedData() { - $speedTotals = array(); - $speedTotals['total'] = $this->getReadableTime(($this->getMicroTime() - $this->startTime)*1000); - $speedTotals['allowed'] = ini_get("max_execution_time"); - $this->output['speedTotals'] = $speedTotals; - } - - /*------------------------------------------- - HELPER FUNCTIONS TO FORMAT DATA - -------------------------------------------*/ - - function getMicroTime() { - $time = microtime(); - $time = explode(' ', $time); - return $time[1] + $time[0]; - } - - public function getReadableFileSize($size, $retstring = null) { - // adapted from code at http://aidanlister.com/repos/v/function.size_readable.php - $sizes = array('bytes', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'); - - if ($retstring === null) { $retstring = '%01.2f %s'; } - - $lastsizestring = end($sizes); - - foreach ($sizes as $sizestring) { - if ($size < 1024) { break; } - if ($sizestring != $lastsizestring) { $size /= 1024; } - } - if ($sizestring == $sizes[0]) { $retstring = '%01d %s'; } // Bytes aren't normally fractional - return sprintf($retstring, $size, $sizestring); - } - - public function getReadableTime($time) { - $ret = $time; - $formatter = 0; - $formats = array('ms', 's', 'm'); - if($time >= 1000 && $time < 60000) { - $formatter = 1; - $ret = ($time / 1000); - } - if($time >= 60000) { - $formatter = 2; - $ret = ($time / 1000) / 60; - } - $ret = number_format($ret,3,'.','') . ' ' . $formats[$formatter]; - return $ret; - } - - /*--------------------------------------------------------- - DISPLAY TO THE SCREEN -- CALL WHEN CODE TERMINATING - -----------------------------------------------------------*/ - - public function display($db = '', $master_db = '') { - $this->db = $db; - $this->master_db = $master_db; - $this->gatherConsoleData(); - $this->gatherFileData(); - $this->gatherMemoryData(); - $this->gatherQueryData(); - $this->gatherSpeedData(); - require_once($this->config.'display.php'); - displayPqp($this->output, OWA_PUBLIC_URL.'includes/pqp/'); - } - -} - -?> --- a/owa/includes/pqp/css/pQp.css +++ /dev/null @@ -1,406 +1,1 @@ -/* - - - - - - - - - - - - - - - - - - - - - - Title : PHP Quick Profiler CSS - Author : Designed by Kevin Hale. - URL : http://particletree.com/features/php-quick-profiler/ - - Last Updated : April 21, 2009 - -- - - - - - - - - - - - - - - - - - - - - */ - -.pQp{ - width:100%; - text-align:center; - position:fixed; - bottom:0; -} -* html .pQp{ - position:absolute; -} -.pQp *{ - margin:0; - padding:0; - border:none; -} -#pQp{ - margin:0 auto; - width:85%; - min-width:960px; - background-color:#222; - border:12px solid #000; - border-bottom:none; - font-family:"Lucida Grande", Tahoma, Arial, sans-serif; - -webkit-border-top-left-radius:15px; - -webkit-border-top-right-radius:15px; - -moz-border-radius-topleft:15px; - -moz-border-radius-topright:15px; -} -#pQp .pqp-box h3{ - font-weight:normal; - line-height:200px; - padding:0 15px; - color:#fff; -} -.pQp, .pQp td{ - color:#444; -} - -/* ----- IDS ----- */ - -#pqp-metrics{ - background:#000; - width:100%; -} -#pqp-console, #pqp-speed, #pqp-queries, #pqp-memory, #pqp-files{ - background:url(../images/overlay.gif); - border-top:1px solid #ccc; - height:200px; - overflow:auto; -} - -/* ----- Colors ----- */ - -.pQp .green{color:#588E13 !important;} -.pQp .blue{color:#3769A0 !important;} -.pQp .purple{color:#953FA1 !important;} -.pQp .orange{color:#D28C00 !important;} -.pQp .red{color:#B72F09 !important;} - -/* ----- Logic ----- */ - -#pQp, #pqp-console, #pqp-speed, #pqp-queries, #pqp-memory, #pqp-files{ - display:none; -} -.pQp .console, .pQp .speed, .pQp .queries, .pQp .memory, .pQp .files{ - display:block !important; -} -.pQp .console #pqp-console, .pQp .speed #pqp-speed, .pQp .queries #pqp-queries, -.pQp .memory #pqp-memory, .pQp .files #pqp-files{ - display:block; -} -.console td.green, .speed td.blue, .queries td.purple, .memory td.orange, .files td.red{ - background:#222 !important; - border-bottom:6px solid #fff !important; - cursor:default !important; -} - -.tallDetails #pQp .pqp-box{ - height:500px; -} -.tallDetails #pQp .pqp-box h3{ - line-height:500px; -} -.hideDetails #pQp .pqp-box{ - display:none !important; -} -.hideDetails #pqp-footer{ - border-top:1px dotted #444; -} -.hideDetails #pQp #pqp-metrics td{ - height:50px; - background:#000 !important; - border-bottom:none !important; - cursor:default !important; -} -.hideDetails #pQp var{ - font-size:18px; - margin:0 0 2px 0; -} -.hideDetails #pQp h4{ - font-size:10px; -} -.hideDetails .heightToggle{ - visibility:hidden; -} - -/* ----- Metrics ----- */ - -#pqp-metrics td{ - height:80px; - width:20%; - text-align:center; - cursor:pointer; - border:1px solid #000; - border-bottom:6px solid #444; - -webkit-border-top-left-radius:10px; - -moz-border-radius-topleft:10px; - -webkit-border-top-right-radius:10px; - -moz-border-radius-topright:10px; -} -#pqp-metrics td:hover{ - background:#222; - border-bottom:6px solid #777; -} -#pqp-metrics .green{ - border-left:none; -} -#pqp-metrics .red{ - border-right:none; -} - -#pqp-metrics h4{ - text-shadow:#000 1px 1px 1px; -} -.side var{ - text-shadow:#444 1px 1px 1px; -} - -.pQp var{ - font-size:23px; - font-weight:bold; - font-style:normal; - margin:0 0 3px 0; - display:block; -} -.pQp h4{ - font-size:12px; - color:#fff; - margin:0 0 4px 0; -} - -/* ----- Main ----- */ - -.pQp .main{ - width:80%; -} -*+html .pQp .main{ - width:78%; -} -* html .pQp .main{ - width:77%; -} -.pQp .main td{ - padding:7px 15px; - text-align:left; - background:#151515; - border-left:1px solid #333; - border-right:1px solid #333; - border-bottom:1px dotted #323232; - color:#FFF; -} -.pQp .main td, pre{ - font-family:Monaco, "Consolas", "Lucida Console", "Courier New", monospace; - font-size:11px; -} -.pQp .main td.alt{ - background:#111; -} -.pQp .main tr.alt td{ - background:#2E2E2E; - border-top:1px dotted #4E4E4E; -} -.pQp .main tr.alt td.alt{ - background:#333; -} -.pQp .main td b{ - float:right; - font-weight:normal; - color:#E6F387; -} -.pQp .main td:hover{ - background:#2E2E2E; -} - -/* ----- Side ----- */ - -.pQp .side{ - float:left; - width:20%; - background:#000; - color:#fff; - -webkit-border-bottom-left-radius:30px; - -moz-border-radius-bottomleft:30px; - text-align:center; -} -.pQp .side td{ - padding:10px 0 5px 0; - background:url(../images/side.png) repeat-y right; -} -.pQp .side var{ - color:#fff; - font-size:15px; -} -.pQp .side h4{ - font-weight:normal; - color:#F4FCCA; - font-size:11px; -} - -/* ----- Console ----- */ - -#pqp-console .side td{ - padding:12px 0; -} -#pqp-console .side td.alt1{ - background:#588E13; - width:51%; -} -#pqp-console .side td.alt2{ - background-color:#B72F09; -} -#pqp-console .side td.alt3{ - background:#D28C00; - border-bottom:1px solid #9C6800; - border-left:1px solid #9C6800; - -webkit-border-bottom-left-radius:30px; - -moz-border-radius-bottomleft:30px; -} -#pqp-console .side td.alt4{ - background-color:#3769A0; - border-bottom:1px solid #274B74; -} - -#pqp-console .main table{ - width:100%; -} -#pqp-console td div{ - width:100%; - overflow:hidden; -} -#pqp-console td.type{ - font-family:"Lucida Grande", Tahoma, Arial, sans-serif; - text-align:center; - text-transform: uppercase; - font-size:9px; - padding-top:9px; - color:#F4FCCA; - vertical-align:top; - width:40px; -} -.pQp .log-log td.type{ - background:#47740D !important; -} -.pQp .log-error td.type{ - background:#9B2700 !important; -} -.pQp .log-memory td.type{ - background:#D28C00 !important; -} -.pQp .log-speed td.type{ - background:#2B5481 !important; -} - -.pQp .log-log pre{ - color:#999; -} -.pQp .log-log td:hover pre{ - color:#fff; -} - -.pQp .log-memory em, .pQp .log-speed em{ - float:left; - font-style:normal; - display:block; - color:#fff; -} -.pQp .log-memory pre, .pQp .log-speed pre{ - float:right; - white-space: normal; - display:block; - color:#FFFD70; -} - -/* ----- Speed ----- */ - -#pqp-speed .side td{ - padding:12px 0; -} -#pqp-speed .side{ - background-color:#3769A0; -} -#pqp-speed .side td.alt{ - background-color:#2B5481; - border-bottom:1px solid #1E3C5C; - border-left:1px solid #1E3C5C; - -webkit-border-bottom-left-radius:30px; - -moz-border-radius-bottomleft:30px; -} - -/* ----- Queries ----- */ - -#pqp-queries .side{ - background-color:#953FA1; - border-bottom:1px solid #662A6E; - border-left:1px solid #662A6E; -} -#pqp-queries .side td.alt{ - background-color:#7B3384; -} -#pqp-queries .main b{ - float:none; -} -#pqp-queries .main em{ - display:block; - padding:2px 0 0 0; - font-style:normal; - color:#aaa; -} - -/* ----- Memory ----- */ - -#pqp-memory .side td{ - padding:12px 0; -} -#pqp-memory .side{ - background-color:#C48200; -} -#pqp-memory .side td.alt{ - background-color:#AC7200; - border-bottom:1px solid #865900; - border-left:1px solid #865900; - -webkit-border-bottom-left-radius:30px; - -moz-border-radius-bottomleft:30px; -} - -/* ----- Files ----- */ - -#pqp-files .side{ - background-color:#B72F09; - border-bottom:1px solid #7C1F00; - border-left:1px solid #7C1F00; -} -#pqp-files .side td.alt{ - background-color:#9B2700; -} - -/* ----- Footer ----- */ - -#pqp-footer{ - width:100%; - background:#000; - font-size:11px; - border-top:1px solid #ccc; -} -#pqp-footer td{ - padding:0 !important; - border:none !important; -} -#pqp-footer strong{ - color:#fff; -} -#pqp-footer a{ - color:#999; - padding:5px 10px; - text-decoration:none; -} -#pqp-footer .credit{ - width:20%; - text-align:left; -} -#pqp-footer .actions{ - width:80%; - text-align:right; -} -#pqp-footer .actions a{ - float:right; - width:auto; -} -#pqp-footer a:hover, #pqp-footer a:hover strong, #pqp-footer a:hover b{ - background:#fff; - color:blue !important; - text-decoration:underline; -} -#pqp-footer a:active, #pqp-footer a:active strong, #pqp-footer a:active b{ - background:#ECF488; - color:green !important; -} --- a/owa/includes/pqp/display.php +++ /dev/null @@ -1,350 +1,1 @@ - - -JAVASCRIPT; - -echo '
  • '; - -} - -?> --- a/owa/includes/pqp/index.php +++ /dev/null @@ -1,178 +1,1 @@ -profiler = new PhpQuickProfiler(PhpQuickProfiler::getMicroTime()); - } - - public function init() { - $this->sampleConsoleData(); - $this->sampleDatabaseData(); - $this->sampleMemoryLeak(); - $this->sampleSpeedComparison(); - } - - /*------------------------------------------- - EXAMPLES OF THE 4 CONSOLE FUNCTIONS - -------------------------------------------*/ - - public function sampleConsoleData() { - try { - Console::log('Begin logging data'); - Console::logMemory($this, 'PQP Example Class : Line '.__LINE__); - Console::logSpeed('Time taken to get to line '.__LINE__); - Console::log(array('Name' => 'Ryan', 'Last' => 'Campbell')); - Console::logSpeed('Time taken to get to line '.__LINE__); - Console::logMemory($this, 'PQP Example Class : Line '.__LINE__); - Console::log('Ending log below with a sample error.'); - throw new Exception('Unable to write to log!'); - } - catch(Exception $e) { - Console::logError($e, 'Sample error logging.'); - } - } - - /*------------------------------------- - DATABASE OBJECT TO LOG QUERIES - --------------------------------------*/ - - public function sampleDatabaseData() { - /*$this->db = new MySqlDatabase( - 'your DB host', - 'your DB user', - 'your DB password'); - $this->db->connect(true); - $this->db->changeDatabase('your db name'); - - $sql = 'SELECT PostId FROM Posts WHERE PostId > 2'; - $rs = $this->db->query($sql); - - $sql = 'SELECT COUNT(PostId) FROM Posts'; - $rs = $this->db->query($sql); - - $sql = 'SELECT COUNT(PostId) FROM Posts WHERE PostId != 1'; - $rs = $this->db->query($sql);*/ - } - - /*----------------------------------- - EXAMPLE MEMORY LEAK DETECTED - ------------------------------------*/ - - public function sampleMemoryLeak() { - $ret = ''; - $longString = 'This is a really long string that when appended with the . symbol - will cause memory to be duplicated in order to create the new string.'; - for($i = 0; $i < 10; $i++) { - $ret = $ret . $longString; - Console::logMemory($ret, 'Watch memory leak -- iteration '.$i); - } - } - - /*----------------------------------- - POINT IN TIME SPEED MARKS - ------------------------------------*/ - - public function sampleSpeedComparison() { - Console::logSpeed('Time taken to get to line '.__LINE__); - Console::logSpeed('Time taken to get to line '.__LINE__); - Console::logSpeed('Time taken to get to line '.__LINE__); - Console::logSpeed('Time taken to get to line '.__LINE__); - Console::logSpeed('Time taken to get to line '.__LINE__); - Console::logSpeed('Time taken to get to line '.__LINE__); - } - - public function __destruct() { - $this->profiler->display($this->db); - } - -} - -$pqp = new PQPExample(); -$pqp->init(); - -?> - - - - - - -PHP Quick Profiler Demo - - - - - - - - - -
    -

    On this Page You Can See How to
    Use the PHP Quick Profiler to...

    - -
      -
    • Log PHP Objects. [ Demo ]
    • -
    • Watch as a string eats up memory. [ Demo ]
    • -
    • Monitor our queries and their indexes. [ Demo ]
    • -
    • Ensure page execution time is acceptable. [ Demo ]
    • -
    • Prevent files from getting out of control. [ Demo ]
    • -
    - - Return to Particletree. -
    - - - --- a/owa/includes/pqp/pqp.tpl +++ /dev/null @@ -1,271 +1,1 @@ - -{literal} - -{/literal} - - --- a/owa/includes/template_class.php +++ /dev/null @@ -1,201 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ -class Template { - - /** - * Template files directory - * - * @var string - */ - var $template_dir; - - /** - * Template Variables - * - * @var array - */ - var $vars = array(); - - /** - * Template file - * - * @var string - */ - var $file; - - /** - * Constructor - * - * @access public - */ - function Template() { - - return; - } - - /** - * Set the template file - * - * @param string $file - */ - function set_template($file = null) { - $this->file = $this->template_dir.$file; - return; - } - - /** - * Set a template variable - * - * @param string $name - * @param unknown_value $value - * @access public - */ - function set($name, $value) { - - if (is_object($value)) { - $class = 'Template'; - if ($value instanceof $this) { - $value = $value->fetch(); - } - } - - $this->vars[$name] = $value; - return; - } - - /** - * Open, parse, and return the template file. - * - * @param string $file - * @return string $contents - * @access public - */ - function fetch($file = null) { - if(!$file): - $file = $this->file; - else: - $file = $this->template_dir.$file; - endif; - - extract($this->vars); // Extract the vars to local namespace - ob_start(); // Start output buffering - include($file); // Include the file - $contents = ob_get_contents(); // Get the contents of the buffer - ob_end_clean(); // End buffering and discard - return $contents; // Return the contents - } - -} - -/** -* An extension to Template that provides automatic caching of -* template contents. -*/ -class CachedTemplate extends Template { - var $cache_id; - var $expire; - var $cached; - - /** - * Constructor. - * - * @param $cache_id string unique cache identifier - * @param $expire int number of seconds the cache will live - */ - function CachedTemplate($cache_id = null, $expire = 900) { - $this->Template(); - $this->cache_id = $cache_id ? 'cache/' . md5($cache_id) : $cache_id; - $this->expire = $expire; - } - - /** - * Test to see whether the currently loaded cache_id has a valid - * corrosponding cache file. - */ - function is_cached() { - if($this->cached) return true; - - // Passed a cache_id? - if(!$this->cache_id) return false; - - // Cache file exists? - if(!file_exists($this->cache_id)) return false; - - // Can get the time of the file? - if(!($mtime = filemtime($this->cache_id))) return false; - - // Cache expired? - if(($mtime + $this->expire) < time()) { - @unlink($this->cache_id); - return false; - } - else { - /** - * Cache the results of this is_cached() call. Why? So - * we don't have to double the overhead for each template. - * If we didn't cache, it would be hitting the file system - * twice as much (file_exists() & filemtime() [twice each]). - */ - $this->cached = true; - return true; - } - } - - /** - * This function returns a cached copy of a template (if it exists), - * otherwise, it parses it as normal and caches the content. - * - * @param $file string the template file - */ - function fetch_cache($file) { - if($this->is_cached()) { - $fp = @fopen($this->cache_id, 'r'); - $contents = fread($fp, filesize($this->cache_id)); - fclose($fp); - return $contents; - } - else { - $contents = $this->fetch($file); - - // Write the cache - if($fp = @fopen($this->cache_id, 'w')) { - fwrite($fp, $contents); - fclose($fp); - } - else { - die('Unable to write cache.'); - } - - return $contents; - } - } -} - -?> + --- a/owa/index.php +++ /dev/null @@ -1,50 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -// Initialize owa admin -$owa = &new owa_php; - -if (!$owa->isOwaInstalled()) { - // redirect to install - owa_lib::redirectBrowser(owa_coreAPI::getSetting('base','public_url').'install.php'); -} - -if ( $owa->isEndpointEnabled( basename( __FILE__ ) ) ) { - - // run controller or view and echo page content - echo $owa->handleRequestFromURL(); -} else { - // unload owa - $owa->restInPeace(); -} -?> --- a/owa/ini_db.php +++ /dev/null @@ -1,236 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category wa - * @package wa - * @version $Revision$ - * @since wa 1.0.0 - */ -class ini_db extends owa_base { - - /** - * Data file - * - * @var unknown_type - */ - var $ini_file; - - /** - * Result Format - * - * @var string - */ - var $return_format; - - /** - * Cache flag - * - * @var boolean - */ - var $cache = true; - - - /** - * Database Access Object - * - * @var object - */ - var $db; - - /** - * Constructor - * - * @param string $ini_file - * @param string_type $sections - * @param string $return_format - * @access public - * @return ini_db - */ - function __construct($ini_file, $sections = null, $return_format = 'object') { - - parent::__construct(); - $this->ini_file = $ini_file; - $this->return_format = $return_format; - - if (!empty($sections)){ - $this->db = $this->readINIfile($this->ini_file, ';'); - } else { - $this->db = file($this->ini_file); - } - } - - /** - * Returns a section from an ini file based on regex match rule - * contained as keys in an ini file. - * - * @param string - * @access public - */ - function fetch($haystack) { - - $record = null; - - foreach ($this->db as $key=>$value) { - if (($key!='#*#')&&(!array_key_exists('parent',$value))) continue; - - $keyEreg = '#'.$key.'#'; - - if (preg_match($keyEreg, $haystack)) { - $record=array('regex'=>strtolower($keyEreg),'pattern'=>$key)+$value; - - $maxDeep=8; - while (array_key_exists('parent',$value)&&(--$maxDeep>0)) - - $record+=($value = $this->db[strtolower($value['parent'])]); - break; - } - } - - switch ($this->return_format) { - case "array": - return $record; - break; - case "object": - return ((object)$record); - break; - } - return $record; - } - - /** - * Returns part of the passed string based on regex match rules - * contained as keys in an ini file. - * - * @param string - * @access public - * @return string - */ - function match($haystack) { - - $needle = ''; - - if (!empty($haystack)): - - $tmp = ''; - - foreach ($this->db as $key => $value) { - - if (!empty($value)): - //$this->e->debug('ref db:'.print_r($this->db, true)); - preg_match(trim($value), $haystack, $tmp); - if (!empty($tmp)): - $needle = $tmp; - //$this->e->debug('ref db:'.print_r($tmp, true)); - endif; - endif; - } - - return $needle; - - else: - return; - endif; - } - - function contains($haystack = '') { - - $pos = false; - - if ($haystack) { - - foreach ($this->db as $k => $needle) { - $needle = substr(strtolower(trim($needle)),1,-1); - $pos = strpos(strtolower($haystack), $needle); - - if ($pos) { - owa_coreAPI::debug(sprintf('Haystack contains "%s" at position %d', $needle, $pos)); - return true; - } - } - - return false; - } - } - - /** - * Fetch a record set and perfrom a regex replace on the name - * - * @param string $haystack - * @return string - */ - function fetch_replace($haystack) { - - $record = $this->fetch($haystack); - - //print_r($record); - - $new_record = preg_replace($record->regex, $record->name, $haystack); - - return $new_record; - } - - /** - * Reads INI file - * - * @param string $filename - * @param string $commentchar - * @return array - */ - function readINIfile ($filename, $commentchar) { - $array1 = file($filename); - $section = ''; - foreach ($array1 as $filedata) { - $dataline = trim($filedata); - $firstchar = substr($dataline, 0, 1); - if ($firstchar!=$commentchar && $dataline!='') { - //It's an entry (not a comment and not a blank line) - if ($firstchar == '[' && substr($dataline, -1, 1) == ']') { - //It's a section - $section = strtolower(substr($dataline, 1, -1)); - } else { - //It's a key... - $delimiter = strpos($dataline, '='); - if ($delimiter > 0) { - //...with a value - $key = strtolower(trim(substr($dataline, 0, $delimiter))); - $value = trim(substr($dataline, $delimiter + 1)); - if (substr($value, 1, 1) == '"' && substr($value, -1, 1) == '"') { $value = substr($value, 1, -1); } - $array2[$section][$key] = stripcslashes($value); - } else { - //...without a value - $array2[$section][strtolower(trim($dataline))]=''; - } - } - } else { - //It's a comment or blank line. Ignore. - } - } - - return $array2; - } -} - -?> + --- a/owa/install.php +++ /dev/null @@ -1,59 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -// Initialize owa -//define('OWA_ERROR_HANDLER', 'development'); -define('OWA_CACHE_OBJECTS', false); -define('OWA_INSTALLING', true); -$owa = new owa_php(); -if ( $owa->isEndpointEnabled( basename( __FILE__ ) ) ) { - - // need third param here so that seting is not persisted. - $owa->setSetting('base','main_url', 'install.php'); - // run controller, echo page content - $do = owa_coreAPI::getRequestParam('do'); - $params = array(); - if (empty($do)) { - - $params['do'] = 'base.installStart'; - } - - // run controller or view and echo page content - echo $owa->handleRequest($params); - -} else { - // unload owa - $owa->restInPeace(); -} - -?> + --- a/owa/log.php +++ /dev/null @@ -1,46 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -ignore_user_abort(true); -$owa = new owa_php(); -if ( $owa->isEndpointEnabled( basename( __FILE__ ) ) ) { - $owa->e->debug('Logging Event from Url...'); - // log event - $ret = $owa->logEventFromUrl(); - echo owa_coreAPI::displayView(array(), 'base.pixel'); -} else { - // unload owa - $owa->restInPeace(); -} - -?> + --- a/owa/module.inc +++ /dev/null @@ -1,523 +1,1 @@ -getConfig('galleryBaseUrl'); - $urlgenerator = $gallery->getUrlGenerator(); - $gallery_base_url = $urlgenerator->getCurrentUrlDir(); - - // Gallery specific config overrides array - - $owa_config['report_wrapper'] = 'wrapper_gallery2.tpl'; - $owa_config['images_url'] = OWA_PUBLIC_URL.'i/'; - $owa_config['images_absolute_url'] = $owa_config['images_url']; - $owa_config['main_url'] = $gallery_base_url.'main.php?g2_view=core.SiteAdmin&g2_subView=owa.owaGeneric'; - $owa_config['main_absolute_url'] = $owa_config['main_url']; - $owa_config['action_url'] = $gallery_base_url.'main.php?g2_view=owa.owaAction&owa_specialAction'; - $owa_config['log_url'] = $gallery_base_url.'main.php?g2_view=owa.owaAction&owa_logAction=1'; - $owa_config['link_template'] = '%s&%s'; - //$owa_config['authentication'] = 'gallery'; - $owa_config['site_id'] = md5($gallery_base_url); - $owa_config['query_string_filters'] = 'g2_fromNavId'; - $owa_config['is_embedded'] = 'true'; - - $gallery->debug('hello from gallery owa plugin'); - - // create owa instance - $owa = new owa_php($owa_config); - $gallery->debug('new owa instance created'); - - return $owa; - - endif; - -} - -/** - * Sets OWA priviledge info for current gallery user - */ -function owa_set_priviledges() { - - global $gallery; - - // get Gallery's active user - $u = $gallery->getActiveUser(); - - // create instance of OWA - $owa = owa_factory(); - - //set user level. Needed for OWA's auth module. - - // check to see if user is a guest or not - list ($ret, $user) = GalleryCoreApi::isAnonymousUser(); - - if ($user == true): - - $level = 'everyone'; - - else: - // check to see if the user is a site admin. important becasue we might not want - // to log such users activities. - list ($ret, $admin) = GalleryCoreApi::isUserInSiteAdminGroup(); - - if ($admin = true): - $level = 'admin'; - else: - $level = 'viewer'; - endif; - - endif; - - // preemptively set the current user info and mark as authenticated so that - // downstream controllers don't have to authenticate - $cu =&owa_coreAPI::getCurrentUser(); - - // gallery gives all users a username of guest if there are not named users... - if ($u->userName != 'guest'): - $cu->setUserData('user_id', $u->userName); - $cu->setUserData('email_address', $u->email); - $cu->setUserData('real_name', $u->fullName); - endif; - - $cu->setRole($level); - $cu->setAuthStatus(true); - - return; -} - -/** - * OWA Gallery Module - * - * Integrates OWA with Gallery 2.2 or later - * - * @package owa - * @author Peter Adams - * @version $Revision$ $Date: $ - */ -class owaModule extends GalleryModule { - - function owaModule() { - global $gallery; - - $this->setId('owa'); - $this->setName($gallery->i18n('Open Web Analytics for Gallery')); - $this->setDescription($gallery->i18n('Adds web analytics capabilities to Gallery.')); - $this->setVersion('1.0.0'); - $this->setGroup('OWA', $gallery->i18n('Open Web Analytics')); - $this->setRequiredCoreApi(array(7, 18)); - $this->setRequiredModuleApi(array(3, 4)); - $this->setCallbacks('getSiteAdminViews|getSystemLinks'); - - return; - } - - - /** - * Main OWA logging method - * - * Using getSystemLinks as a callback because it is called on every request. - */ - function getSystemLinks() { - - global $gallery; - - - if (GalleryUtilities::hasRequestVariable('view')): - $viewName = GalleryUtilities::getRequestVariables('view'); - - - // ensure this is not a Gallery admin screen - if ($viewName == "core.SiteAdmin" || $viewName == "core.ItemAdmin"): - return; - else: - - // get instance of owa - $owa = owa_factory(); - - // set user priviledges of the request for OWA to log - owa_set_priviledges(); - - // Setup OWA request params - $params = array(); - - // get information on current view - list ($ret, $view) = GalleryView::loadView($viewName); - list ($ret, $page_type) = $view->getViewDescription(); - $params['page_type'] = $page_type; - - //Log request is for an item, get item details - if (GalleryUtilities::hasRequestVariable('itemId')): - //Lookup item from view - list ($rest, $item) = $view->getItem(); - $params['page_title'] = $item->title; - else: - $params['page_title'] = $page_type; - endif; - - // is RSS page type - - if (($viewName == "rss.Render") || ($viewName == "rss.SimpleRender")): - $params['page_type'] = 'feed'; - $params['is_feedreader'] = true; - $params['feed_format'] = $_GET['feed']; - endif; - - // log request - - //print_r($owa->config); - - $owa->log($params); - endif; - endif; - - return; - - } - - - /** - * Check to see if OWA is installed and activated - * - */ - function owa_isActivated() { - - list ($ret, $params) = GalleryCoreApi::fetchAllPluginParameters('module', 'owa'); - - if (!empty($params)): - return true; - else: - return false; - endif; - } - - - /** - * @see GalleryModule::getSiteAdminViews - */ - function getSiteAdminViews() { - - global $gallery; - - // this is needed becasue on the plugins page this callback is triggered - // whether then plugin is active or not for some reason. - //if ($this->owa_isActivated()): - // get OWA instance - // $owa = owa_factory(); - // set user priviledges of the request for OWA - // owa_set_priviledges(); - //endif; - - $data = array(array('name' => $this->translate('Dashboard'), 'view' => 'owa.owaDashboard'), - array('name' => $this->translate('Admin Settings'), 'view' => 'owa.owaOptions')); - return array(null, $data); - } - - /** - * Module specific logic for install - * - * @see GalleryModule::install - */ - function upgrade($currentVersion, $statusMonitor) { - - global $gallery; - - $owa_config = array(); - $owa_config['do_not_fetch_config_from_db'] = true; - $owa = owa_factory($owa_config); - // set user priviledges of the request for OWA to log - owa_set_priviledges(); - - //get the base gallery url - $urlgenerator = $gallery->getUrlGenerator(); - $site_url = $urlgenerator->getCurrentUrlDir(); - - //Config('galleryBaseUrl'); - - $params = array('site_id' => md5($site_url), - 'name' => 'Gallery', - 'domain' => $site_url, - 'description' => '', - 'do' => 'base.installEmbedded'); - - $page = $owa->handleRequest($params); - - return null; - } - - /* - - // register event handlers - function performFactoryRegistrations() { - - owa_coreAPI::debug("g2 factory regs"); - $ret = GalleryCoreApi::registerFactoryImplementation('GalleryEventListener', 'owaLoginEventHandler ', 'owa', __FILE__, 'owa', array('Gallery::Login'), null); - - $ret = GalleryCoreApi::registerFactoryImplementation('GalleryEventListener', 'owaLoginEventHandler ', 'owa', __FILE__, 'owa', array('Gallery::Logout'), null); - - //$listener = new owaLoginEventHandler(); - //$ret = GalleryCoreApi::registerEventListener('Gallery::Login', $listener, true); - //$ret = GalleryCoreApi::registerEventListener('Gallery::Logout', $listener, true); - - if ($ret) { - return $ret; - } - - return null; - - } - -*/ -} - -/** - * OWA Gallery Views - * - * Enables OWA to be embedded as a Gallery's site admin screen - */ -class owaOptionsView extends GalleryView { - - /** - * @see GalleryView::loadTemplate - */ - function loadTemplate(&$template, &$form) { - - $owa = owa_factory(); - - owa_set_priviledges(); - - $params = array(); - - if (empty($owa->params['do'])): - $params['do'] = 'base.optionsGeneral'; - endif; - - $page = $owa->handleRequest($params); - $template->setVariable('owa', array('content' => $page)); - return array(null, array('body' => 'modules/owa/modules/base/templates/gallery.tpl')); - } - - /** - * Does this view change any data? Only controllers should change data, but AJAX and some - * immediate views are handled in views in Gallery. - * @return bool true if the view changes data - */ - function isControllerLike() { - return true; - } - - -} - -/** - * OWA Gallery Views - * - * - */ -class owaDashboardView extends GalleryView { - - /** - * @see GalleryView::loadTemplate - */ - function loadTemplate(&$template, &$form) { - - $owa = owa_factory(); - - owa_set_priviledges(); - - $params = array(); - //$params['view'] = 'base.report'; - $params['action'] = 'base.reportDashboard'; - $params['period'] = 'today'; - $page = $owa->handleRequest($params); - $template->setVariable('owa', array('content' => $page)); - return array(null, array('body' => 'modules/owa/modules/base/templates/gallery.tpl')); - } - -} - -class owaGenericView extends GalleryView { - - /** - * @see GalleryView::loadTemplate - */ - function loadTemplate(&$template, &$form) { - - $owa = owa_factory(); - - owa_set_priviledges(); - - $page = $owa->handleRequest(); - $template->setVariable('owa', array('content' => $page)); - return array(null, array('body' => 'modules/owa/modules/base/templates/gallery.tpl')); - } - - /** - * Does this view change any data? Only controllers should change data, but AJAX and some - * immediate views are handled in views in Gallery. - * @return bool true if the view changes data - */ - function isControllerLike() { - return true; - } - -} - - -GalleryCoreApi::requireOnce('modules/core/classes/GalleryController.class'); -class owaControlController extends GalleryController { - - /** - * @see GalleryController::handleRequest - */ - function handleRequest($form) { - - $result = array('delegate' => array('view' => 'owa.owaGeneric'), - 'status' => 1, 'error' => ''); - return array(null, $result); - - } - -} - - -/** - * Handles OWA's special action requests - * - */ -class owaActionView extends GalleryView { - - - /** - * @see GalleryView::isImmediate - */ - function isImmediate() { - return true; - } - - /** - * Method called when view is set to render immeadiately. - * This will bypass Gallery's global templating allowing - * the view to send output directly to the browser. - */ - function renderImmediate($status, $error) { - - global $gallery; - $owa = owa_factory(); - - $gallery->debug('hello from owaAction'); - owa_set_priviledges(); - - $owa->handleSpecialActionRequest(); - - return null; - } - - -} - -/** - * Gallery Template Callback for OWA footer elements - * - * This class is packaged here for convienence only but could also be - * put in Callbacks.inc. - */ -class owaCallbacks { - - function callback($params, &$smarty, $callback, $userId=null) { - /* 1. Identify the exact callback */ - switch ($callback) { - case 'pagetags': - - $viewName = GalleryUtilities::getRequestVariables('view'); - // ensure this is not a Gallery admin screen - - if ($viewName == "core.SiteAdmin" || $viewName == "core.ItemAdmin"): - return; - else: - /* 2. Load the requested data */ - - $owa = owa_factory(); - $tags = $owa->placeHelperPageTags(false); - - /* 3. Assign the requested data to a template variable */ - $block =& $smarty->_tpl_vars['block']; - - /* By convention, put the data into $block[$moduleId] (in this case, moduleId is 'owa') */ - $block['owa']['pagetags'] = array('owaData' => $tags, - 'randomNumber' => rand()); // You can put any data into the template variable... - endif; - - break; - - case 'SomeOtherCallbackName': - ; - break; - default: - ; - } - - return null; - } -} - -class owaLoginEventHandler { - - function owaLoginEventHandler() { - return; - } - - function __construct() { - return; - } - - function handleEvent($event) { - global $gallery; - owa_coreAPI::debug("hello from login event handler ".print_r($event)); - return array(null, null); - } - -} - -?> --- a/owa/modules/base/apiRequest.php +++ /dev/null @@ -1,79 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.3.0 - */ - -class owa_apiRequestController extends owa_controller { - - function __construct($params) { - - return parent::__construct($params); - } - - function action() { - - $s = owa_coreAPI::serviceSingleton(); - // lookup method class - $do = $s->getApiMethodClass($this->getParam('do')); - - if ($do) { - - // check credentials - /* PERFORM AUTHENTICATION */ - if (array_key_exists('required_capability', $do)) { - - /* CHECK USER FOR CAPABILITIES */ - if ( ! owa_coreAPI::isCurrentUserCapable( $do['required_capability'] ) ) { - // doesn't look like the currentuser has the necessary priviledges - owa_coreAPI::debug('User does not have capability required by this controller.'); - // auth user - $auth = &owa_auth::get_instance(); - $status = $auth->authenticateUser(); - // if auth was not successful then return login view. - if ($status['auth_status'] != true) { - return 'This method requires authentication.'; - } else { - //check for needed capability again now that they are authenticated - if (!owa_coreAPI::isCurrentUserCapable($do['required_capability'])) { - return 'Your user does not have privileges to access this method.'; - } - } - } - } - - //perform - $map = owa_coreAPI::getRequest()->getAllOwaParams(); - echo owa_coreAPI::executeApiCommand($map); - } - } -} - -?> --- a/owa/modules/base/build.php +++ /dev/null @@ -1,76 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_buildController extends owa_cliController { - - function __construct($params) { - - parent::__construct($params); - - $this->setRequiredCapability('edit_modules'); - - return; - } - - function action() { - - - // build owa.tracker-combined-min.js - owa_coreAPI::debug("Building owa.tracker-combined-min.js"); - - $tracker_js = array(); - $tracker_js['json2'] = OWA_MODULES_DIR.'base/js/includes/json2.js'; - $tracker_js['lazyload'] = OWA_MODULES_DIR.'base/js/includes/lazyload-2.0.min.js'; - $tracker_js['owa'] = OWA_MODULES_DIR.'base/js/owa.js'; - $tracker_js['owa.tracker'] = OWA_MODULES_DIR.'base/js/owa.tracker.js'; - - $minjs = sprintf("// OWA Tracker Min file created %s \n\n",date(time())); - - foreach ($tracker_js as $k => $v) { - owa_coreAPI::debug("Minimizing Javascript in $v"); - $minjs .= "//// Start of $k //// \n"; - $minjs .= JSMin::minify(file_get_contents($v)) . "\n"; - $minjs .= "//// End of $k //// \n"; - } - - $handle = fopen(OWA_MODULES_DIR."base/js/owa.tracker-combined-min.js", "w"); - fwrite($handle, $minjs); - fclose($handle); - - return; - } - -} - - -?> + --- a/owa/modules/base/classes/browscap.php +++ /dev/null @@ -1,177 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_browscap extends owa_base { - - - /** - * main browscap_db maintained by Gary Keith's - * Browser Capabilities project. - * - * @var array - */ - var $browscap_db; - - /** - * Browscap Record for current User agent - * - * @var unknown_type - */ - var $browser; - - /** - * Current user Agent - * - * @var string - */ - var $ua; - var $cache; - var $cacheExpiration; - - function __construct($ua = '') { - - parent::__construct(); - // set user agent - $this->ua = $ua; - - // init cache - $this->cache = &owa_coreAPI::cacheSingleton(); - $this->cacheExpiration = owa_coreAPI::getSetting('base', 'default_cache_expiration_period'); - $this->cache->setCollectionExpirationPeriod('browscap', $this->cacheExpiration); - //lookup robot in main browscap db - $this->browser = $this->lookup($this->ua); - $this->e->debug('Browser Name : '. $this->browser->Browser); - - } - - function robotCheck() { - // must use == due to wacky type issues with phpBrowsecap ini file - if ($this->browser->Crawler == "true" || $this->browser->Crawler == "1") { - return true; - } elseif ($this->browser->Browser === "Default Browser") { - return $this->robotRegexCheck(); - } - - return false; - } - - function lookup($user_agent) { - - if (owa_coreAPI::getSetting('base','cache_objects') === true) { - owa_coreAPI::profile($this, __FUNCTION__, __LINE__); - $cache_obj = $this->cache->get('browscap', $this->ua); - } - - if (!empty($cache_obj)) { - owa_coreAPI::profile($this, __FUNCTION__, __LINE__); - return $cache_obj; - - } else { - owa_coreAPI::profile($this, __FUNCTION__, __LINE__); - - // Load browscap file into memory - $user_browscap_file = OWA_DATA_DIR.'browscap/php_browscap.ini'; - // check to see if a user downloaded version of the file exists - if ( file_exists( $user_browscap_file ) ) { - $this->browscap_db = $this->load( $user_browscap_file ); - } else { - $this->browscap_db = $this->load( $this->config['browscap.ini'] ); - } - - $cap = null; - - foreach ($this->browscap_db as $key=>$value) { - if (($key!='*')&&(!array_key_exists('Parent',$value))) continue; - $keyEreg='^'.str_replace( - array('\\','.','?','*','^','$','[',']','|','(',')','+','{','}','%'), - array('\\\\','\\.','.','.*','\\^','\\$','\\[','\\]','\\|','\\(','\\)','\\+','\\{','\\}','\\%'), - $key).'$'; - if (preg_match('%'.$keyEreg.'%i',$user_agent)) - { - $cap=array('browser_name_regex'=>strtolower($keyEreg),'browser_name_pattern'=>$key)+$value; - $maxDeep=8; - while (array_key_exists('Parent',$value)&&(--$maxDeep>0)) - $cap += ($value = $this->browscap_db[$value['Parent']]); - break; - } - } - - if ( ! empty( $cap ) ) { - - if ( $this->config['cache_objects'] == true ) { - if ( $cap['Browser'] != 'Default Browser' ) { - $this->cache->set( 'browscap', $this->ua, (object)$cap, $this->cacheExpiration ); - } - } - } - - return ( (object)$cap ); - } - } - - function load($file) { - - if(defined('INI_SCANNER_RAW')) { - return parse_ini_file($file, true, INI_SCANNER_RAW); - } else { - return parse_ini_file($file, true); - } - - } - - function robotRegexCheck() { - - $db = new ini_db(OWA_CONF_DIR.'robots.ini'); - owa_coreAPI::debug('Checking for robot strings...'); - $match = $db->contains($this->ua); - - if (!empty($match)): - owa_coreAPI::debug('Robot detect string found.'); - $this->browser->Crawler = true; - return true; - else: - return false; - endif; - - } - - function get($name) { - - return $this->browser->$name; - } - -} - -?> + --- a/owa/modules/base/classes/cache.php +++ /dev/null @@ -1,258 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - - -class owa_cache { - - var $cache; - var $statistics = array('warm' => 0, 'cold' => 0, 'miss' => 0, 'replaced' => 0, 'added' => 0, 'removed' => 0, 'dirty' => 0); - var $cache_id = 1; // default cache id - var $collections; - var $dirty_collections; - var $dirty_objs = array(); - var $global_collections = array(); - var $collection_expiration_periods = array(); - var $e; - - /** - * Constructor - * - * Takes cache directory as param - * - * @param $cache_dir string - */ - function __construct($cache_dir = '') { - - $this->e = &owa_coreAPI::errorSingleton(); - } - - function set($collection, $key, $value, $expires = '') { - - $hkey = $this->hash($key); - //owa_coreAPI::debug('set key: '.$key); - //owa_coreAPI::debug('set hkey: '.$hkey); - $this->cache[$collection][$hkey] = $value; - $this->debug(sprintf('Added Object to Cache - Collection: %s, id: %s', $collection, $hkey)); - $this->statistics['added']++; - $this->dirty_objs[$collection][$hkey] = $hkey; - $this->dirty_collections[$collection] = true; - $this->debug(sprintf('Added Object to Dirty List - Collection: %s, id: %s', $collection, $hkey)); - $this->statistics['dirty']++; - - } - - function replace($collection, $key, $value) { - - $hkey = $this->hash($key); - $this->cache[$collection][$hkey] = $value; - $this->debug(sprintf('Replacing Object in Cache - Collection: %s, id: %s', $collection, $hkey)); - $this->statistics['replaced']++; - - // check to make sure the dirty collection exists and object is not already in there. - if (!empty($this->dirty_objs[$collection])) { - if(!in_array($hkey, $this->dirty_objs[$collection])) { - $this->dirty_objs[$collection][] = $hkey; - $this->dirty_collections[$collection] = true; - $this->debug(sprintf('Added Object to Dirty List - Collection: %s, id: %s', $collection, $hkey)); - $this->statistics['dirty']++; - } - } else { - $this->dirty_objs[$collection][] = $hkey; - $this->dirty_collections[$collection] = true; - $this->debug(sprintf('Added Object to Dirty List - Collection: %s, id: %s', $collection, $hkey)); - $this->statistics['dirty']++; - } - - - } - - function get($collection, $key) { - - $id = $this->hash($key); - // check warm cache and return - if (isset($this->cache[$collection][$id])) { - $this->debug(sprintf('CACHE HIT (Warm) - Retrieved Object from Cache - Collection: %s, id: %s', $collection, $id)); - $this->statistics['warm']++; - //load from cache file - } else { - - $item = $this->getItemFromCacheStore($collection, $id); - if ($item) { - $this->cache[$collection][$id] = $item; - $this->debug(sprintf('CACHE HIT (Cold) - Retrieved Object from Cache File - Collection: %s, id: %s', $collection, $id)); - $this->statistics['cold']++; - } else { - $this->debug( sprintf( 'CACHE MISS - object not found for Collection: %s, id: %s', $collection, $id ) ); - $this->statistics['miss']++; - } - } - - if (isset($this->cache[$collection][$id])) { - return $this->cache[$collection][$id]; - } else { - return false; - } - - } - - function remove($collection, $key) { - - $id = $this->hash($key); - unset($this->cache[$collection][$id]); - - return $this->removeItemFromCacheStore($collection, $id); - - } - - function persistCache() { - - $this->debug("starting to persist cache..."); - - // check for dirty objects - if (!empty($this->dirty_objs)) { - - $this->debug('Dirty Objects: '.print_r($this->dirty_objs, true)); - $this->debug("starting to persist cache..."); - - // persist dirty objects - foreach ($this->dirty_objs as $collection => $ids) { - - foreach ($ids as $id) { - $this->putItemToCacheStore($collection, $id); - } - } - - } else { - $this->debug("There seem to be no dirty objects in the cache to persist."); - } - } - - /** - * Store specific implementation of getting an object from the cold cache store - */ - function getItemFromCacheStore($collection, $id) { - return false; - } - /** - * Store specific implementation of putting an object to the cold cache store - */ - function putItemToCacheStore($collection, $id) { - return false; - } - - /** - * Store specific implementation of removing an object to the cold cache store - */ - function removeItemFromCacheStore($collection, $id) { - return false; - } - - /** - * Store specific implementation of flushing the cold cache store - */ - function flush() { - - return false; - } - - function getStats() { - - return sprintf("Cache Statistics: - Total Hits: %s (Warm/Cold: %s/%s) - Total Miss: %s - Total Added to Cache: %s - Total Replaced: %s - Total Persisted: %s - Total Removed: %s", - $this->statistics['warm'] + $this->statistics['cold'], - $this->statistics['warm'], - $this->statistics['cold'], - $this->statistics['miss'], - $this->statistics['added'], - $this->statistics['replaced'], - $this->statistics['dirty'], - $this->statistics['removed']); - } - - function prepare($obj) { - - return $obj; - } - - function __destruct() { - - $this->persistCache(); - $this->debug($this->getStats()); - $this->persistStats(); - } - - function persistStats() { - - return false; - } - - function hash($id) { - - return md5($id); - } - - function debug($msg) { - - return owa_coreAPI::debug($msg); - } - - function error($msg) { - - return false; - } - - function setCollectionExpirationPeriod($collection_name, $seconds) { - - $this->collection_expiration_periods[$collection_name] = $seconds; - } - - function getCollectionExpirationPeriod($collection_name) { - - // for some reason an 'array_key_exists' check does not work here. using isset instead. - if (isset($this->collection_expiration_periods[$collection_name])) { - return $this->collection_expiration_periods[$collection_name]; - } else { - return false; - } - } - - function setGlobalCollection($collection) { - - return $this->global_collections[] = $collection; - - } -} - -?> --- a/owa/modules/base/classes/calculatedMetric.php +++ /dev/null @@ -1,58 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.3.0 - */ - -class owa_calculatedMetric extends owa_metric { - - var $is_calculated = true; - var $child_metrics = array(); - var $formula; - - function setChildMetric($name) { - - $this->child_metrics[] = $name; - } - - function getChildMetrics() { - - return $this->child_metrics; - } - - function setFormula($string) { - - $this->formula = $string; - } - - function getFormula() { - - return $this->formula; - } -} - -?> --- a/owa/modules/base/classes/chartData.php +++ /dev/null @@ -1,120 +1,1 @@ - - * @copyright Copyright © 2008 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - - -class owa_chartData { - - var $series_data = array(); - var $series_labels = array(); - - function __construct() { - - return; - } - - function owa_chartData() { - - return owa_chartData::__construct(); - } - - function setSeries($name, $data, $label = '') { - - $this->series_data[$name] = $data; - $this->series_label[$name] = $label; - return; - } - - function getSeriesData($name) { - - if (array_key_exists($name, $this->series_data)) { - return $this->series_data[$name]; - } else { - return array(); - } - - } - - function getSeriesLabel($name) { - - if (array_key_exists($name, $this->series_label)) { - return $this->series_label[$name]; - } else { - return false; - } - } - - function getMin($name) { - - $min = min($this->getSeriesData($name)); - - if ($min >= 0) { - return 0; - } else { - return $min - 2; - } - - } - - function getMax($name, $name2 = null) { - - $max_values = array(); - - $max_values[] = max($this->getSeriesData($name)); - - if (!empty($name2)) { - $max_values[] = max($this->getSeriesData($name2)); - } - - $max = max($max_values); - - return $max + 2; - } - - function checkForSeries() { - - $counts = array(); - foreach ($this->series_data as $series) { - - $counts[] = count($series); - } - - if (array_sum($counts) > 0) { - return true; - } else { - return false; - } - } - - -} - - - -?> --- a/owa/modules/base/classes/cliController.php +++ /dev/null @@ -1,62 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - - -class owa_cliController extends owa_adminController { - - var $is_admin = true; - - /** - * Constructor - * - * @param array $params - * @return owa_controller - */ - function __construct($params) { - - if (owa_coreAPI::getSetting('base', 'cli_mode')) { - - return parent::__construct($params); - - } else { - - owa_coreAPI::notice("Controller not called from CLI"); - exit; - } - } - - -} - -?> + --- a/owa/modules/base/classes/client.php +++ /dev/null @@ -1,611 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_client extends owa_caller { - - var $commerce_event; - - var $pageview_event; - - var $global_event_properties = array(); - - var $stateInit; - - // set one traffic has been attributed. - var $isTrafficAttributed; - - public function __construct($config = null) { - - $this->pageview_event = $this->makeEvent(); - $this->pageview_event->setEventType('base.page_request'); - - return parent::__construct($config); - } - - public function setPageTitle($value) { - $this->pageview_event->set('page_title', $value); - } - - public function setPageType($value) { - $this->pageview_event->set('page_type', $value); - } - - public function setProperty($name, $value) { - $this->setGlobalEventProperty($name, $value); - } - - private function setGlobalEventProperty($name, $value) { - - $this->global_event_properties[$name] = $value; - } - - private function getGlobalEventProperty($name) { - - if ( array_key_exists($name, $this->global_event_properties) ) { - return $this->global_event_properties[$name]; - } - } - - private function manageState( &$event ) { - - if ( ! $this->stateInit ) { - $this->setVisitorId( $event ); - $this->setFirstSessionTimestamp( $event ); - $this->setLastRequestTime( $event ); - $this->setSessionId( $event ); - $this->setNumberPriorSessions( $event ); - $this->setTrafficAttribution( $event ); - // clear old style session cookie - $session_store_name = sprintf('%s_%s', owa_coreAPI::getSetting('base', 'site_session_param'), $this->site_id); - owa_coreAPI::clearState( $session_store_name ); - - $this->stateInit = true; - } - } - - private function setVisitorId( &$event ) { - - $visitor_id = owa_coreAPI::getStateParam( 'v', 'vid' ); - - if ( ! $visitor_id ) { - $visitor_id = owa_coreAPI::getStateParam( 'v' ); - owa_coreAPI::clearState( 'v' ); - owa_coreAPI::setState( 'v', 'vid', $visitor_id, 'cookie', true ); - - } - - if ( ! $visitor_id ) { - $visitor_id = $event->getSiteSpecificGuid( $this->site_id ); - $this->setGlobalEventProperty( 'is_new_visitor', true ); - owa_coreAPI::setState( 'v', 'vid', $visitor_id, 'cookie', true ); - } - // set property on event object - $this->setGlobalEventProperty( 'visitor_id', $visitor_id ); - } - - private function setNumberPriorSessions( &$event ) { - // if check for nps value in vistor cookie. - $nps = owa_coreAPI::getStateParam('v', 'nps'); - // set value to 0 if not found. - if (!$nps) { - $nps = 0; - } - - // if new session, increment visit count and persist to state store - if ( $this->getGlobalEventProperty('is_new_session' ) ) { - owa_coreAPI::setState('v', 'nps', $nps + 1, 'cookie', true); - } - - // set property on the event object - $this->setGlobalEventProperty('num_prior_sessions', $nps); - } - - private function setFirstSessionTimestamp( &$event ) { - - $fsts = owa_coreAPI::getStateParam( 'v', 'fsts' ); - - if ( ! $fsts ) { - $fsts = $event->get('timestamp'); - owa_coreAPI::setState(owa_coreAPI::getSetting('base', 'visitor_param'), 'fsts', $fsts , 'cookie', true); - } - - $this->setGlobalEventProperty( 'fsts', $fsts ); - } - - private function setSessionId( &$event ) { - - $is_new_session = $this->isNewSession( $event->get( 'timestamp' ), $this->getGlobalEventProperty( 'last_req' ) ); - if ( $is_new_session ) { - //set prior_session_id - $prior_session_id = owa_coreAPI::getStateParam('s', 'sid'); - if ( ! $prior_session_id ) { - $state_store_name = sprintf('%s_%s', owa_coreAPI::getSetting('base', 'site_session_param'), $this->site_id); - $prior_session_id = owa_coreAPI::getStateParam($state_store_name, 's'); - } - if ($prior_session_id) { - $this->setGlobalEventProperty( 'prior_session_id', $prior_session_id ); - } - $session_id = $event->getSiteSpecificGuid( $this->site_id ); - // it's a new session. generate new session ID - $this->setGlobalEventProperty( 'session_id', $session_id ); - //mark new session flag on current request - $this->setGlobalEventProperty( 'is_new_session', true ); - owa_coreAPI::setState( 's', 'sid', $session_id, 'cookie', true ); - } else { - // Must be an active session so just pull the session id from the state store - $session_id = owa_coreAPI::getStateParam('s', 'sid'); - - // support for old style cookie - if ( ! $session_id ) { - $state_store_name = sprintf('%s_%s', owa_coreAPI::getSetting('base', 'site_session_param'), $this->site_id); - $session_id = owa_coreAPI::getStateParam($state_store_name, 's'); - owa_coreAPI::setState( 's', 'sid', $session_id, 'cookie', true ); - } - - $this->setGlobalEventProperty('session_id', $session_id); - } - - // fail-safe just in case there is no session_id - if ( ! $this->getGlobalEventProperty( 'session_id' ) ) { - $session_id = $event->getSiteSpecificGuid( $this->site_id ); - $this->setGlobalEventProperty( 'session_id', $session_id ); - //mark new session flag on current request - $this->setGlobalEventProperty( 'is_new_session', true ); - owa_coreAPI::debug('hello from failsafe'); - owa_coreAPI::setState( 's', 'sid', $session_id, 'cookie', true ); - } - } - - private function setLastRequestTime( &$event ) { - - $last_req = owa_coreAPI::getStateParam('s', 'last_req'); - - // suppport for old style cookie - if ( ! $last_req ) { - $state_store_name = sprintf( '%s_%s', owa_coreAPI::getSetting( 'base', 'site_session_param' ), $this->site_id ); - $last_req = owa_coreAPI::getStateParam( $state_store_name, 'last_req' ); - } - // set property on event object - $this->setGlobalEventProperty( 'last_req', $last_req ); - // store new state value - owa_coreAPI::setState( 's', 'last_req', $event->get( 'timestamp' ), 'cookie', true ); - } - - /** - * Check to see if request is a new or active session - * - * @return boolean - */ - private function isNewSession($timestamp = '', $last_req = 0) { - - $is_new_session = false; - - if ( ! $timestamp ) { - $timestamp = time(); - } - - $time_since_lastreq = $timestamp - $last_req; - $len = owa_coreAPI::getSetting( 'base', 'session_length' ); - if ( $time_since_lastreq < $len ) { - owa_coreAPI::debug("This request is part of a active session."); - return false; - } else { - //NEW SESSION. prev session expired, because no requests since some time. - owa_coreAPI::debug("This request is the start of a new session. Prior session expired."); - return true; - } - } - - /** - * Logs tracking event from url params taken from request scope. - * Takes event type from url. - * - * @return unknown - */ - function logEventFromUrl($manage_state = false) { - - // keeps php executing even if the client closes the connection - ignore_user_abort(true); - $service = &owa_coreAPI::serviceSingleton(); - $service->request->decodeRequestParams(); - $event = owa_coreAPI::supportClassFactory('base', 'event'); - $event->setEventType(owa_coreAPI::getRequestParam('event_type')); - $event->setProperties($service->request->getAllOwaParams()); - - // check for third party cookie mode. - $mode = owa_coreAPI::getRequestParam('thirdParty'); - if ( $mode ) { - return $this->trackEvent($event); - } else { - return owa_coreAPI::logEvent($event->getEventType(), $event); - } - } - - /** - * Logs tracking event - * - * This function fires a tracking event that will be processed and then dispatched - * - * @param object $event - * @return boolean - */ - public function trackEvent($event) { - - // do not track anything if user is in overlay mode - if (owa_coreAPI::getStateParam('overlay')) { - return false; - } - - // needed by helper page tags function so it can append to first hit tag url - if (!$this->getSiteId()) { - $this->setSiteId($event->get('site_id')); - } - - if (!$this->getSiteId()) { - $this->setSiteId(owa_coreAPI::getRequestParam('site_id')); - } - - // set various state properties. - $this->manageState( $event ); - - - $event = $this->setAllGlobalEventProperties( $event ); - - // send event to log API for processing. - return owa_coreAPI::logEvent($event->getEventType(), $event); - } - - public function setAllGlobalEventProperties( $event ) { - - if ( ! $event->get('site_id') ) { - $event->set( 'site_id', $this->getSiteId() ); - } - - // merge global event properties - foreach ($this->global_event_properties as $k => $v) { - $event->set($k, $v); - } - - return $event; - - } - - public function getAllEventProperties( $event ) { - - $event = $this->setAllGlobalEventProperties( $event ); - return $event->getProperties(); - } - - public function trackPageview($event = '') { - - if ($event) { - $event->setEventType('base.page_request'); - $this->pageview_event = $event; - } - return $this->trackEvent($this->pageview_event); - } - - public function trackAction($action_group = '', $action_name, $action_label = '', $numeric_value = 0) { - - $event = $this->makeEvent(); - $event->setEventType('track.action'); - $event->set('action_group', $action_group); - $event->set('action_name', $action_name); - $event->set('action_label', $action_label); - $event->set('numeric_value', $numeric_value); - $event->set('site_id', $this->getSiteId()); - return $this->trackEvent($event); - } - - /** - * Creates a ecommerce Transaction event - * - * Creates a parent commerce.transaction event - */ - public function addTransaction( - $order_id, - $order_source = '', - $total = 0, - $tax = 0, - $shipping = 0, - $gateway = '', - $country = '', - $state = '', - $city = '', - $page_url = '', - $session_id = '' - ) { - - $this->commerce_event = $this->makeEvent(); - $this->commerce_event->setEventType( 'ecommerce.transaction' ); - $this->commerce_event->set( 'ct_order_id', $order_id ); - $this->commerce_event->set( 'ct_order_source', $order_source ); - $this->commerce_event->set( 'ct_total', $total ); - $this->commerce_event->set( 'ct_tax', $tax ); - $this->commerce_event->set( 'ct_shipping', $shipping ); - $this->commerce_event->set( 'ct_gateway', $gateway ); - $this->commerce_event->set( 'page_url', $page_url ); - $this->commerce_event->set( 'ct_line_items', array() ); - $this->commerce_event->set( 'country', $page_url ); - $this->commerce_event->set( 'state', $page_url ); - $this->commerce_event->set( 'city', $page_url ); - if ( $session_id ) { - $this->commerce_event->set( 'original_session_id', $session_id ); - // tells the client to NOT manage state properties as we are - // going to look them up from the session later. - $this->commerce_event->set( 'is_state_set', true ); - } - } - - /** - * Adds a line item to a commerce transaction - * - * Creates and a commerce.line_item event and adds it to the parent transaction event - */ - public function addTransactionLineItem($order_id, $sku = '', $product_name = '', $category = '', $unit_price = 0, $quantity = 0) { - - if ( empty( $this->commerce_event ) ) { - $this->addTransaction('none set'); - } - - $li = array(); - $li['li_order_id'] = $order_id ; - $li['li_sku'] = $sku ; - $li['li_product_name'] = $product_name ; - $li['li_category'] = $category ; - $li['li_unit_price'] = $unit_price ; - $li['li_quantity'] = $quantity ; - - $items = $this->commerce_event->get( 'ct_line_items' ); - $items[] = $li; - $this->commerce_event->set( 'ct_line_items', $items ); - } - - /** - * tracks a commerce events - * - * Tracks a parent transaction event by sending it to the event queue - */ - public function trackTransaction() { - - if ( ! empty( $this->commerce_event ) ) { - $this->trackEvent( $this->commerce_event ); - $this->commerce_event = ''; - } - } - - public function createSiteId($value) { - - return md5($value); - } - - function getCampaignProperties( $event ) { - - $campaign_params = owa_coreAPI::getSetting( 'base', 'campaign_params' ); - $campaign_properties = array(); - $campaign_state = array(); - foreach ($campaign_params as $k => $param) { - //look for property on the event - $property = $event->get($param); - - // look for property on the request scope. - if ( ! $property ) { - $property = owa_coreAPI::getRequestParam($param); - } - if ( $property ) { - $campaign_properties[$k] = $property; - } - } - - // backfill values for incomplete param combos - - if (array_key_exists('at', $campaign_properties) && !array_key_exists('ad', $campaign_properties)) { - $campaign_properties['ad'] = '(not set)'; - } - - if (array_key_exists('ad', $campaign_properties) && !array_key_exists('at', $campaign_properties)) { - $campaign_properties['at'] = '(not set)'; - } - - if (!empty($campaign_properties)) { - //$campaign_properties['ts'] = $event->get('timestamp'); - } - - owa_coreAPI::debug('campaign properties: '. print_r($campaign_properties, true)); - - return $campaign_properties; - } - - function directAttributionModel( &$campaign_properties ) { - - // add new campaign info to existing campaign cookie. - if ( !empty( $campaign_properties ) ) { - $campaign_state = $this->getCampaignState(); - // add timestamp - //$campaign_properties['ts'] = $event->get('timestamp'); - // add new campaign into state array - $campaign_state[] = (object) $campaign_properties; - - // if more than x slice the first one off to make room - $count = count( $campaign_state ); - $max = owa_coreAPI::getSetting( 'base', 'max_prior_campaigns'); - if ($count > $max ) { - array_shift( $campaign_state ); - } - - // reset state - $this->setCampaignCookie($campaign_state); - - // set flag - $this->isTrafficAttributed = true; - } - - } - - function originalAttributionModel( &$campaign_properties ) { - - $campaign_state = $this->getCampaignState(); - // orignal touch was set previously. jus use that. - if (!empty($campaign_state)) { - // do nothing - // set the attributes from the first campaign touch - $campaign_properties = $campaign_state[0]; - $this->isTrafficAttributed = true; - - // no orginal touch, set one if it's a new campaign touch - } else { - - if (!empty($campaign_properties)) { - // add timestamp - //$campaign_properties['ts'] = $event->get('timestamp'); - owa_coreAPI::debug('Setting original Campaign attrbution.'); - $campaign_state[] = $campaign_properties; - // set cookie - $this->setCampaignCookie($campaign_state); - $this->isTrafficAttributed = true; - } - } - } - - function getCampaignState() { - - $campaign_state = owa_coreAPI::getStateParam( 'c' ); - if ( $campaign_state ) { - $campaign_state = json_decode( $campaign_state ); - } else { - $campaign_state = array(); - } - - return $campaign_state; - } - - function setTrafficAttribution( &$event ) { - - // if not then look for individual campaign params on the request. - // this happens when the client is php and the params are on the url - $campaign_properties = $this->getCampaignProperties( $event ); - if ( $campaign_properties ) { - $campaign_properties['ts'] = $event->get('timestamp'); - } - - // choose attribution model. - $model = owa_coreAPI::getSetting('base', 'trafficAttributionMode'); - switch ( $model ) { - - case 'direct': - owa_coreAPI::debug( 'Applying "Direct" Traffic Attribution Model' ); - $this->directAttributionModel( $campaign_properties ); - break; - case 'original': - owa_coreAPI::debug( 'Applying "Original" Traffic Attribution Model' ); - $this->originalAttributionModel( $campaign_properties ); - break; - default: - owa_coreAPI::debug( 'Applying Default (Direct) Traffic Attribution Model' ); - $this->directAttributionModel( $campaign_properties ); - } - - // if one of the attribution methods attributes the traffic them - // set attribution properties on the event object - if ( $this->isTrafficAttributed ) { - - owa_coreAPI::debug( 'Attributing Traffic to: %s', print_r($campaign_pproperties, true ) ); - - $this->applyCampaignPropertiesToEvent( $event, $campaign_properties ); - - // set campaign touches - $campaign_state = owa_coreAPI::getStateParam('c'); - if ($campaign_state) { - $this->setGlobalEventProperty( 'attribs', json_encode( $campaign_state ) ); - } - - } else { - owa_coreAPI::debug( 'No traffic attribution.' ); - } - } - - function applyCampaignPropertiesToEvent( $event, $campaign_properties) { - - // set the attributes - if (!empty($campaign_properties)) { - - foreach ($campaign_properties as $k => $v) { - - if ($k === 'md') { - $this->setGlobalEventProperty( 'medium', $campaign_properties[$k] ); - } - - if ($k === 'sr') { - $this->setGlobalEventProperty( 'source', $campaign_properties[$k] ); - } - - if ($k === 'cn') { - $this->setGlobalEventProperty( 'campaign', $campaign_properties[$k] ); - } - - if ($k === 'at') { - $this->setGlobalEventProperty( 'ad_type', $campaign_properties[$k] ); - } - - if ($k === 'ad') { - $this->setGlobalEventProperty( 'ad', $campaign_properties[$k] ); - } - - if ($k === 'tr') { - $this->setGlobalEventProperty( 'search_terms', $campaign_properties[$k] ); - } - } - } - } - - function setCampaignCookie($values) { - // reset state - owa_coreAPI::setState('c', '', - json_encode( $values ), - 'cookie', - owa_coreAPI::getSetting( 'base', 'campaign_attribution_window' ) ); - } - - // sets cookies domain - function setCookieDomain($domain) { - - if (!empty($domain)) { - $c = &owa_coreAPI::configSingleton(); - // sanitizes the domain - $c->setCookieDomain($domain); - } - } -} - -?> --- a/owa/modules/base/classes/column.php +++ /dev/null @@ -1,198 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_dbColumn { - - var $name; - - var $value; - - var $data_type; - - var $foriegn_key; - - var $is_primary_key = false; - - var $auto_increment = false; - - var $is_unique = false; - - var $is_not_null = false; - - var $label; - - var $index; - - var $default_value; - - function __construct($name ='', $data_type = '') { - - if ($name) { - $this->setName($name); - } - - if ($data_type) { - $this->setDataType($data_type); - } - - } - - function get($name) { - - return $this->$name; - } - - function set($name, $value) { - - $this->$name = $value; - - return; - } - - function getValue() { - - return $this->value; - } - - function setValue($value) { - - $this->value = $value; - - return; - } - - function getDefinition() { - - $definition = ''; - - $definition .= $this->get('data_type'); - - // Check for auto increment - if ($this->get('auto_increment') == true): - $definition .= ' '.OWA_DTD_AUTO_INCREMENT; - endif; - - // Check for auto Not null - if ($this->get('is_not_null') == true): - $definition .= ' '.OWA_DTD_NOT_NULL; - endif; - - // Check for unique - if ($this->get('is_unique') == true): - $definition .= ' '.OWA_DTD_UNIQUE; - endif; - - // check for primary key - if ($this->get('is_primary_key') == true): - $definition .= ' '.OWA_DTD_PRIMARY_KEY; - //$definition .= sprintf(", INDEX (%s)", $this->get('name')); - endif; - - // check for index - if ($this->get('index') == true): - $definition .= sprintf(", INDEX (%s)", $this->get('name')); - endif; - - return $definition; - - } - - function setDataType($type) { - - $this->data_type = $type; - } - - function setDefaultValue($value) { - - $this->default_value = $value; - } - - function setPrimaryKey() { - - $this->is_primary_key = true; - } - - function setIndex() { - - $this->index = true; - } - - function setNotNull() { - - $this->is_not_null = true; - } - - function setUnique() { - - $this->is_unique = true; - } - - function setLabel($label) { - - $this->label = $label; - } - - function setForeignKey($entity, $column = 'id') { - - $this->foreign_key = array($entity, $column); - } - - function getForeignKey() { - - return $this->foreign_key; - } - - function isForeignKey() { - - if (!empty($this->foreign_key)) { - return true; - } else { - return false; - } - } - - function setAutoIncrement() { - - $this->auto_increment = true; - } - - function setName($name) { - - $this->name = $name; - } - - function getName() { - - return $this->name; - } - - } - -?> + --- a/owa/modules/base/classes/daemon.php +++ /dev/null @@ -1,225 +1,1 @@ -params = $this->getArgs(); - - if (isset($this->params['interval'])) { - $this->job_scheduling_interval = $this->params['interval']; - } - - if (isset($this->params['max_workers'])) { - $this->max_workers = $this->params['max_workers']; - } - - if (isset($this->params['pid_file_location'])) { - $this->pidFileLocation = $this->params['pid_file_location']; - } - - if (isset($this->params['uid'])) { - $this->userID = $this->params['uid']; - } - - if (isset($this->params['gid'])) { - $this->groupID = $this->params['gid']; - } - - if (isset($this->params['pid_file_location'])) { - $this->pidFileLocation = $this->params['pid_file_location']; - } - - $s = owa_coreAPI::serviceSingleton(); - $this->jobs = $s->getMap('backgound_jobs'); - - $this->eq = owa_coreAPI::getEventDispatch(); - - return parent::__construct(); - } - - function getArgs() { - - $params = array(); - // get params from the command line args - // $argv is a php super global variable - global $argv; - for ( $i=1; $i < count( $argv ); $i++ ) { - $it = split("=",$argv[$i]); - $params[$it[0]] = $it[1]; - } - - return $params; - } - - function _logMessage($msg, $status = DLOG_NOTICE) { - - if ($status & DLOG_TO_CONSOLE) { - echo $msg."\n"; - } - - owa_coreAPI::notice("Daemon: $msg"); - } - - function isWorkerAvailable() { - - $active_workers = count( $this->pids ); - $available_workers = $this->max_workers - $active_workers; - if ( $available_workers >= 1 ) { - return true; - } else { - return false; - } - } - - function isAnotherWorkerAllowed($job_name, $job_max_workers = '') { - - if ( ! $job_max_workers ) { - $job_max_workers = $this->defaultMaxWorkersPerJob; - } - - if ( array_key_exists($job_name, $this->workerCountByJob ) ) { - if ( $this->workerCountByJob[$job_name] < $job_max_workers) { - owa_coreAPI::debug(sprintf( - "New worker processes is allowed for job: %s. %d of %d processes are active.", - $job_name, - $this->workerCountByJob[$job_name], $job_max_workers - )); - return true; - } else { - owa_coreAPI::debug(sprintf( - "New worker processes not allowed for job: %s. %d of %d processes are active.", - $job_name, - $this->workerCountByJob[$job_name], $job_max_workers - )); - return false; - } - } else { - owa_coreAPI::debug(sprintf( - "New worker processes is allowed for job: %s. %d of %d processes are active.", - $job_name, - $this->workerCountByJob[$job_name], $job_max_workers - )); - return true; - } - } - - function isTimeForJob($cron_tab, $last_execution_time) { - - $cron = new CronParser(); - $cron->calcLastRan($cron_tab); - $last_due = $cron->getLastRanUnix(); - - if ($last_due > $last_execution_time) { - return true; - } else { - return false; - } - } - - function getLastExecutionTime($job_name) { - - if ( array_key_exists( $job_name, $this->lastExecutionTimeByJob ) ) { - return $this->lastExecutionTimeByJob[$job_name]; - } else { - return 0; - } - } - - /** - * This function is happening in a while loop - */ - function _doTask() { - - if ( $this->isWorkerAvailable() ) { - - $jobs = $this->jobs; - - if ( $jobs ) { - $i = 0; - //for ($i = 0; $i < $available_workers; $i++) { - foreach ($jobs as $k => $job) { - - if ( $this->isAnotherWorkerAllowed( $job['name'], $job['max_processes'] ) && - $this->isTimeForJob( $job['cron_tab'], $this->getLastExecutionTime( $job['name'] ) ) ) { - // fork a new child - $pid = pcntl_fork(); - if ( ! $pid ) { - // this part is executed in the child - owa_coreAPI::debug( 'New child process executing job ' . print_r( $job, true ) ); - pcntl_exec( OWA_DIR.'cli.php', $job['cmd'] ); // takes an array of arguments - exit(); - } elseif ($pid == -1) { - // happens when something goes wrong and fork fails (handle errors here) - owa_coreAPI::debug( 'Could not fork new child' ); - } else { - // this part is executed in the parent - // We add pids to a global array, so that when we get a kill signal - // we tell the kids to flush and exit. - if ( array_key_exists( $k, $this->workerCountByJob ) ) { - $this->workerCountByJob[$k]++; - } else { - $this->workerCountByJob[$k] = 1; - $this->lastExecutionTimeByJob[$k] = time(); - $this->jobsByPid[$pid] = $k; - } - - $this->pids[] = $pid; - } - } - } - } - } - - // Collect any children which have exited on their own. pcntl_waitpid will - // return the PID that exited or 0 or ERROR - // WNOHANG means we won't sit here waiting if there's not a child ready - // for us to reap immediately - // -1 means any child - $dead_and_gone = pcntl_waitpid( -1, $status, WNOHANG ); - - while( $dead_and_gone > 0 ) { - // Remove the gone pid from the array - unset( $this->pids[array_search( $dead_and_gone, $this->pids )] ); - $past_job = $this->jobsByPid[$dead_and_gone]; - // decrement worker count - --$this->workerCountByJob[$past_job]; - unset($this->jobsByPid[$dead_and_gone]); - - // Look for another one - $dead_and_gone = pcntl_waitpid( -1, $status, WNOHANG); - } - - owa_coreAPI::debug(sprintf( - "Daemon Statistics -- pidsByJob: %s, workerCountByJob: %s, lastExecutionTimeByJob: %s", - print_r( $this->pidsByJob, true), - print_r( $this->workerCountByJob, true), - print_r( $this->lastExecutiontimeByJob, true) - )); - - // Sleep for some interval - sleep($this->job_scheduling_interval); - } -} - -?> - --- a/owa/modules/base/classes/date.php +++ /dev/null @@ -1,143 +1,1 @@ - - * @copyright Copyright © 2008 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - - -class owa_date { - - var $yyyymmdd; - var $timestamp; - var $label; - var $label_formal; - var $year; - var $month; - var $day; - var $is_leap_year; - var $day_of_week; - var $day_of_week_label; - var $day_of_year; - var $day_of_year_label; - var $week_of_year; - var $hour; - var $minute; - var $second; - var $microsecond; - var $meridiem; - var $num_days_in_month; - var $utc_offset; - - function __construct() { - - return; - } - - function set($date, $format = 'yyyymmdd') { - - switch ($format) { - - case 'yyyymmdd': - $this->yyyymmdd = $date; - list($this->year, $this->month, $this->day) = sscanf($date, "%4d%2d%2d"); - $this->timestamp = mktime(0, 0, 0, $this->month, $this->day, $this->year); - break; - - case 'timestamp': - $this->timestamp = $date; - $this->yyyymmdd = date('Ymd', $date); - list($this->year, $this->month, $this->day) = sscanf($this->yyyymmdd, "%4d%2d%2d"); - break; - - - } - - $this->utc_offset = date('Z', $this->timestamp); - $this->hour = date('H', $this->timestamp); - $this->minute = date('i', $this->timestamp); - $this->second = date('s', $this->timestamp); - $this->microsecond = date('u', $this->timestamp); - $this->meridiem = date('a', $this->timestamp); - $this->day_of_week = date('w', $this->timestamp); - $this->day_of_week_label = date('l', $this->timestamp); - $this->week_of_year = date('W', $this->timestamp); - $this->day_of_year = date('z', $this->timestamp); - $this->num_days_in_month = date('t', $this->timestamp); - $this->label = date('m/d/Y', $this->timestamp); - $this->label_formal = date('F jS Y', $this->timestamp); - } - - function get($name){ - - return $this->$name; - } - - function getDay() { - return $this->day; - } - - function getMonth() { - return $this->month; - } - - function getYear() { - return $this->year; - } - - function getLabel($format = '') { - - if (empty($format)) { - - $format = 'label'; - - } else { - - $format = 'label_'.$format; - } - - return $this->$format; - } - - function getYyyymmdd() { - - return $this->yyyymmdd; - } - - function getTimestamp() { - - return $this->timestamp; - } - - function getLocalTimestamp() { - - return $this->getTimestamp() + $this->utc_offset; - } -} - - - -?> --- a/owa/modules/base/classes/dbEventQueue.php +++ /dev/null @@ -1,179 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_dbEventQueue extends eventQueue { - - var $db; - var $items_per_fetch = 50; - - function __construct($queue_dir = '') { - - $this->db = owa_coreAPI::dbSingleton(); - return parent::__construct(); - } - - function addToQueue($event) { - - $qi = owa_coreAPI::entityFactory('base.queue_item'); - $serialized_event = serialize( $event ); - $qi->set( 'id', $qi->generateId( $serialized_event) ); - $qi->set( 'event_type', $event->getEventType() ); - $qi->set( 'status', 'unhandled' ); - $qi->set( 'priority', $this->determinPriority( $event->getEventType() ) ); - $qi->set( 'event', $serialized_event ); - $qi->set( 'insertion_timestamp', $this->makeTimestamp() ); - $qi->set( 'insertion_datestamp', $this->makeDatestamp() ); - $qi->save(); - } - - function markAsFailed($item_id, $error_msg = '') { - - $qi = owa_coreAPI::entityFactory('base.queue_item'); - $qi->load($item_id); - $inserted_timestamp = $qi->get('insertion_timestamp'); - if ($inserted_timestamp) { - $qi->set( 'failed_attempt_count' , $qi->get( 'failed_attempt_count' ) + 1 ); - $qi->set( 'last_attempt_timestamp', $this->makeTimestamp() ); - $qi->set( 'not_before_timestamp', $this->determineNextAttempt($qi->get('event_type'), $qi->get('failed_attempt_count') ) ); - $qi->set( 'last_error_msg', $error_msg); - $qi->save(); - } - } - - function markAsHandled($item_id) { - $qi = owa_coreAPI::entityFactory('base.queue_item'); - $qi->load($item_id); - $inserted_timestamp = $qi->get('insertion_timestamp'); - if ($inserted_timestamp) { - $qi->set( 'status', 'handled' ); - $qi->set( 'handled_timestamp', $this->makeTimestamp() ); - $qi->save(); - } - } - - function getNextItems($limit = '') { - - if ( ! $limit ) { - $limit = $this->items_per_fetch; - } - $this->db->select( '*' ); - $this->db->from( 'owa_queue_item' ); - $this->db->where( 'status', 'unhandled' ); - $this->db->where( 'not_before_timestamp', time(), '<' ); - $this->db->orderBy( 'insertion_timestamp' , 'ASC' ); - $this->db->limit( $limit ); - - $items = $this->db->getAllRows(); - - if ( $items ) { - $entities = array(); - foreach ( $items as $item ) { - $qi = owa_coreAPI::entityFactory( 'base.queue_item' ); - $qi->setProperties( $item ); - $entities[] = $qi; - } - - if ( $limit > 1 ) { - return $entities; - } else { - return $entities[0]; - } - } - } - - function getNextItem() { - - return $this->getNextItems(1); - } - - function determineNextAttempt($event_type, $failed_count) { - - return $this->makeTimeStamp(time() + 30); - } - - function makeTimestamp() { - - return time(); - } - - // safe for mysql timestamp column type - function makeDatestamp($time = '') { - - if ( ! $time ) { - $time = time(); - } - - return gmdate("Y-m-d H:i:s", $time); - } - - function determinPriority($event_type) { - - return 99; - } - - function processQueue() { - - $more = true; - - while( $more ) { - - $items = $this->getNextItems(); - - if ( $items ) { - - foreach ( $items as $item ) { - owa_coreAPI::debug('About to dispatch queue item id: ' . $item->get( 'id' ) ); - $event = unserialize( $item->get('event') ); - $dispatch = owa_coreAPI::getEventDispatch(); - $ret = $dispatch->notify( $event ); - owa_coreAPI::debug($ret); - - $id = $item->get( 'id' ); - if ( $ret === OWA_EHS_EVENT_HANDLED ) { - $this->markAsHandled( $id ); - owa_coreAPI::debug("EHS: marked item ($id) as handled."); - } else { - $this->markAsFailed( $id ); - owa_coreAPI::debug("EHS: marked item ($id) as failed."); - } - - } - - } else { - $more = false; - } - } - } -} - -?> --- a/owa/modules/base/classes/error.php +++ /dev/null @@ -1,419 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ -class owa_error { - - /** - * Instance of the current logger - * - * @var object - */ - var $logger; - - /** - * Buffered Msgs - * - * @var array - */ - var $bmsgs; - - var $hasChildren = false; - - var $init = false; - - var $c; - - /** - * Constructor - * - */ - function __construct() { - - // setup composite logger - $this->logger = &Log::singleton('composite'); - $this->addLogger('null'); - } - - function __destruct() { - - return; - } - - function setConfig($c) { - $this->c = $c; - } - - function setErrorLevel() { - - return; - } - - function addLogger($type, $mask = null, $config = array()) { - - // make child logger - $child = $this->loggerFactory($type, $config); - - if (!empty($child)): - //set error level mask - if (!empty($mask)): - $child->setMask($mask); - endif; - - // add child to main composite logger - $ret = $this->logger->addChild($child); - else: - $ret = false; - endif; - - //set hasChildren flag - if ($ret == true): - $this->hasChildren = true; - else: - return false; - endif; - } - - function removeLogger($type) { - return false; - } - - - function setHandler($type) { - - switch ($type) { - case "development": - $this->createDevelopmentHandler(); - break; - case "production": - $this->createProductionHandler(); - break; - default: - $this->createProductionHandler(); - } - - $this->init = true; - $this->logBufferedMsgs(); - - return; - - } - - function createDevelopmentHandler() { - - $mask = PEAR_LOG_ALL; - $this->addLogger('file', $mask); - - if (defined('OWA_CLI')) { - $this->addLogger('console', $mask); - } - } - - function createCliDevelopmentHandler() { - - $mask = PEAR_LOG_ALL; - $this->addLogger('file', $mask); - $this->addLogger('console', $mask); - } - - function createCliProductionHandler() { - - $mail_mask = Log::MASK(PEAR_LOG_EMERG) | Log::MASK(PEAR_LOG_CRIT) | Log::MASK(PEAR_LOG_ALERT); - $this->addLogger('mail', $mail_mask); - $this->addLogger('console', $file_mask); - } - - function createProductionHandler() { - - $file_mask = PEAR_LOG_ALL ^ Log::MASK(PEAR_LOG_DEBUG) ^ Log::MASK(PEAR_LOG_INFO); - $this->addLogger('file', $file_mask); - $mail_mask = Log::MASK(PEAR_LOG_EMERG) | Log::MASK(PEAR_LOG_CRIT) | Log::MASK(PEAR_LOG_ALERT); - $this->addLogger('mail', $mail_mask); - - if (defined('OWA_CLI')) { - $this->addLogger('console', $file_mask); - } - } - - - function debug($message) { - - return $this->log($message, PEAR_LOG_DEBUG); - - } - - function info($message) { - - return $this->log($message, PEAR_LOG_INFO); - } - - function notice($message) { - - return $this->log($message, PEAR_LOG_NOTICE); - } - - function warning($message) { - - return $this->log($message, PEAR_LOG_WARNING); - } - - function err($message) { - - return $this->log($message, PEAR_LOG_ERR); - - } - - function crit($message) { - - return $this->log($message, PEAR_LOG_CRIT); - - } - - function alert($message) { - - return $this->log($message, PEAR_LOG_ALERT); - - } - - function emerg($message) { - - return $this->log($message, PEAR_LOG_EMERG); - - } - - function log($err, $priority) { - - // log to normal logger - if ($this->init) { - return $this->logger->log($err, $priority); - } else { - return $this->bufferMsg($err, $priority); - } - } - - function bufferMsg($err, $priority) { - - $this->bmsgs[] = array('error' => $err, 'priority' => $priority); - return true; - } - - function logBufferedMsgs() { - - if (!empty($this->bmsgs)): - foreach($this->bmsgs as $msg) { - - $this->log($msg['error'], $msg['priority']); - } - - $this->bmsgs = null; - endif; - - return; - - } - - - function loggerFactory($type, $config = array()) { - - switch ($type) { - case "display": - return $this->make_display_logger($config); - break; - case "window": - return $this->make_window_logger($config); - break; - case "file": - return $this->make_file_logger($config); - break; - case "syslog": - return $this->make_syslog_logger($config); - break; - case "mail": - return $this->make_mail_logger($config); - break; - case "console": - return $this->make_console_logger($config); - break; - case "firebug": - return $this->makeFirebugLogger($config); - break; - case "null": - return $this->make_null_logger(); - break; - default: - return false; - } - - } - - function makeFirebugLogger() { - - $logger = &Log::singleton('firebug', '', getmypid()); - return $logger; - } - - - /** - * Builds a null logger - * - * @return object - */ - function make_null_logger() { - - $logger = &Log::singleton('null'); - return $logger; - } - - - /** - * Builds a console logger - * - * @return object - */ - function make_console_logger() { - if (!defined('STDOUT')) { - define('STDOUT', fopen("php://stdout", "r")); - } - $conf = array('stream' => STDOUT, 'buffering' => false); - $logger = &Log::singleton('console', '', getmypid(), $conf); - return $logger; - } - - /** - * Builds a logger that writes to a file. - * - * @return unknown - */ - function make_file_logger() { - - // fetch config object - //$c = &owa_coreAPI::configSingleton(); - - // test to see if file is writable - $handle = @fopen(owa_coreAPI::getSetting('base', 'error_log_file'), "a"); - - if ($handle != false): - fclose($handle); - $conf = array('mode' => 0600, 'timeFormat' => '%X %x', 'lineFormat' => '%1$s %2$s [%3$s] %4$s'); - $logger = &Log::singleton('file', owa_coreAPI::getSetting('base', 'error_log_file'), getmypid(), $conf); - return $logger; - else: - return; - endif; - } - - /** - * Builds a logger that sends lines via email - * - * @return unknown - */ - function make_mail_logger() { - - // fetch config object - $c = &owa_coreAPI::configSingleton(); - - $conf = array('subject' => 'Important Error Log Events', 'from' => 'OWA-Error-Logger'); - $logger = &Log::singleton('mail', owa_coreAPI::getSetting('base', 'notice_email'), getmypid(), $conf); - - return $logger; - } - - function logPhpErrors() { - error_reporting(E_ALL); - ini_set('display_errors', E_ALL); - return set_error_handler(array("owa_error", "handlePhpError")); - - } - - - /** - * Alternative error handler for PHP specific errors. - * - * @param string $errno - * @param string $errmsg - * @param string $filename - * @param string $linenum - * @param string $vars - */ - function handlePhpError($errno = null, $errmsg, $filename, $linenum, $vars) { - - $dt = date("Y-m-d H:i:s (T)"); - - // set of errors for which a var trace will be saved - $user_errors = array(E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE, E_STRICT); - - $err = "\n"; - $err .= "\t" . $dt . "\n"; - $err .= "\t" . $errno . "\n"; - $err .= "\t" . $errmsg . "\n"; - $err .= "\t" . $filename . "\n"; - $err .= "\t" . $linenum . "\n"; - - if (in_array($errno, $user_errors)) { - // $err .= "\t" . wddx_serialize_value($vars, "Variables") . "\n"; - } - - $err .= "\n\n"; - - owa_coreAPI::debug($err); - - return; - } - - function backtrace() { - - $dbgTrace = debug_backtrace(); - $bt = array(); - foreach($dbgTrace as $dbgIndex => $dbgInfo) { - - $bt[$dbgIndex] = array('file' => $dbgInfo['file'], - 'line' => $dbgInfo['line'], - 'function' => $dbgInfo['function'], - 'args' => $dbgInfo['args']); - } - - return $bt; - - } - -} - -?> + --- a/owa/modules/base/classes/event.php +++ /dev/null @@ -1,272 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_event { - - /** - * Event Properties - * - * @var array - */ - var $properties = array(); - - /** - * State - * - * @var string - */ - //var $state; - - var $eventType; - - /** - * Time since last request. - * - * Used to tell if a new session should be created. - * - * @var integer $time_since_lastreq - */ - var $time_since_lastreq; - - /** - * Event guid - * - * @var string - */ - var $guid; - - /** - * Constructor - * @access public - */ - function __construct() { - - // Set GUID for event - $this->guid = $this->set_guid(); - //needed? - $this->set('guid', $this->guid); - $this->set('timestamp', time() ); - - } - - function set($name, $value) { - - $this->properties[$name] = $value; - return; - } - - function get($name) { - - if(array_key_exists($name, $this->properties)) { - //print_r($this->properties[$name]); - return $this->properties[$name]; - } else { - return false; - } - } - - /** - * Sets time related event properties - * - * @param integer $timestamp - */ - function setTime($timestamp = null) { - - if ( $timestamp ) { - $this->set('timestamp', $timestamp); - } else { - $timestamp = $this->get('timestamp'); - } - - // convert to local time and reset timestamp - //$timestamp = owa_lib::utcToLocalTimestamp($timestamp); - //$this->set('timestamp', $timestamp); - - $this->set('year', date("Y", $timestamp)); - $this->set('month', date("n", $timestamp)); - $this->set('day', date("d", $timestamp)); - $this->set('yyyymmdd', date("Ymd", $timestamp)); - $this->set('dayofweek', date("D", $timestamp)); - $this->set('dayofyear', date("z", $timestamp)); - $this->set('weekofyear', date("W", $timestamp)); - $this->set('hour', date("G", $timestamp)); - $this->set('minute', date("i", $timestamp)); - $this->set('second', date("s", $timestamp)); - - //epoc time - list($msec, $sec) = explode(" ", microtime()); - $this->set('sec', $sec); - $this->set('msec', $msec); - - } - - function setCookieDomain($domain) { - - $this->properties['cookie_domain'] = $domain; - } - - /** - * Determines the time since the last request from this borwser - * - * @access private - * @return integer - */ - function timeSinceLastRequest() { - - return ($this->get('timestamp') - $this->get('last_req')); - } - - /** - * Applies calling application specific properties to request - * - * @access private - * @param array $properties - */ - function setProperties($properties = null) { - - if(!empty($properties)) { - - if (empty($this->properties)) { - $this->properties = $properties; - } else { - $this->properties = array_merge($this->properties, $properties); - } - } - } - - function replaceProperties($properties) { - - $this->properties = $properties; - } - - /** - * Create guid from process id - * - * @return integer - * @access private - */ - function set_guid() { - - return crc32(getmypid().time().rand()); - - } - - /** - * Create guid from string - * - * @param string $string - * @return integer - * @access private - */ - function set_string_guid($string) { - - return crc32(strtolower($string)); - - } - - /** - * Attempts to make a unique ID out of http request variables. - * This should only be used when storing state in a cookie is impossible. - * - * @return integer - */ - function setEnvGUID() { - - return crc32( $this->get('ua') . $this->get('ip_address') ); - - } - - function setSiteSessionState($site_id, $name, $value, $store_type = 'cookie') { - - $store_name = owa_coreAPI::getSetting('base', 'site_session_param').'_'.$site_id; - return owa_coreAPI::setState($store_name, $name, $value, $store_type, true); - } - - function deleteSiteSessionState($site_id, $store_type = 'cookie') { - - $store_name = owa_coreAPI::getSetting('base', 'site_session_param').'_'.$site_id; - return owa_coreAPI::clearState($store_name); - } - - function getProperties() { - - return $this->properties; - } - - function getEventType() { - - if (!empty($this->eventType)) { - return $this->eventType; - } elseif ($this->get('event_type')) { - return $this->get('event_type'); - } else { - - return 'unknown_event_type'; - } - } - - function setEventType($value) { - $this->eventType = $value; - } - - function cleanProperties() { - - return $this->setProperties(owa_lib::inputFilter($this->getProperties())); - } - - function setPageTitle($value) { - - $this->set('page_title', $value); - } - - function setSiteId($value) { - - $this->set('site_id', $value); - } - - function setPageType($value) { - - $this->set('page_type', $value); - } - - function getGuid() { - - return $this->guid; - } - - function getSiteSpecificGuid($site_id) { - - return crc32(getmypid().time().rand().$site_id); - } - - -} - -?> + --- a/owa/modules/base/classes/eventQueue.php +++ /dev/null @@ -1,49 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_eventQueue { - - function __construct() { - - } - - function addToQueue($event) { - - return false; - } - - function processQueue() { - - return false; - } - -} - -?> --- a/owa/modules/base/classes/fileCache.php +++ /dev/null @@ -1,286 +1,1 @@ - - * @copyright Copyright © 2006 - 2011 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_fileCache extends owa_cache { - - var $cache_dir; - var $lock_file_name = 'cache.lock'; - var $cache_file_header = ''; - var $file_perms = 0750; - var $dir_perms = 0750; - var $mutex; - - /** - * Constructor - * - * Takes cache directory as param - * - * @param $cache_dir string - */ - function __construct($cache_dir = '') { - - if ($cache_dir) { - $this->cache_dir = $cache_dir; - } else { - $this->cache_dir = OWA_CACHE_DIR; - } - - return parent::__construct(); - } - - function getItemFromCacheStore($collection, $id) { - - $cache_file = $this->makeCollectionDirPath($collection).$id.'.php'; - $this->debug("check cache file: ".$cache_file); - - // if no cache file then return false - if (!file_exists($cache_file)) { - $this->debug(sprintf('Cache File not found for Collection: %s, id: %s, file: %s', $collection, $id, $cache_file)); - return false; - - // cache object has expired - } elseif ((filectime($cache_file) + $this->getCollectionExpirationPeriod($collection)) < time()) { - $this->debug("time: ".time()); - $this->debug("ctime: ".filectime($cache_file)); - $this->debug("diff: ".(time() - filectime($cache_file))); - $this->debug("exp period: ".$this->getCollectionExpirationPeriod($collection)); - $this->removeCacheFile($this->makeCollectionDirPath($collection).$id.'.php'); - $this->debug(sprintf('Cache Object has expired for Collection: %s, id: %s', $collection, $id)); - return false; - - // load from cache file - } else { - return unserialize(base64_decode(substr(@ file_get_contents($cache_file), strlen($this->cache_file_header), -strlen($this->cache_file_footer)))); - } - - } - - function putItemToCacheStore($collection, $id) { - owa_coreAPI::debug('put id: '.$id); - if ( $this->acquire_lock() ) { - $this->makeCacheCollectionDir($collection); - $this->debug(' writing file for: '.$collection.$id); - // create collection dir - $collection_dir = $this->makeCollectionDirPath($collection); - // asemble cache file name - $cache_file = $collection_dir.$id.'.php'; - - $this->removeCacheFile($cache_file); - - $temp_cache_file = tempnam($collection_dir, 'tmp_'.$id); - - $data = $this->cache_file_header.base64_encode(serialize($this->cache[$collection][$id])).$this->cache_file_footer; - - - // open the temp cache file for writing - $tcf_handle = @fopen($temp_cache_file, 'w'); - - if ( false === $tcf_handle ) { - $this->debug('could not acquire temp file handler'); - } else { - - fputs($tcf_handle, $data); - - fclose($tcf_handle); - - if (!@ rename($temp_cache_file, $cache_file)) { - - if (!@ copy($temp_cache_file, $cache_file)) { - $this->debug('could not rename or copy temp file to cache file'); - } else { - @ unlink($temp_cache_file); - $this->debug('removing temp cache file'); - } - } - - @ chmod($cache_file, $this->file_perms); - $this->debug('changing file permissions on cache file'); - } - - $this->release_lock(); - } else { - $this->debug("could not persist item to cache due to failure acquiring lock."); - } - } - - function removeItemFromCacheStore($collection, $id) { - - return $this->removeCacheFile($this->makeCollectionDirPath($collection).$id.'.php'); - } - - function makeCollectionDirPath($collection) { - - if (!in_array($collection, $this->global_collections)) { - return $this->cache_dir.$this->cache_id.DIRECTORY_SEPARATOR.$collection.DIRECTORY_SEPARATOR; - } else { - return $this->cache_dir.$collection.DIRECTORY_SEPARATOR; - } - } - - function makeCacheCollectionDir($collection) { - - // check to see if the caches directory is writable, return if not. - if (!is_writable($this->cache_dir)) { - return; - } - - // localize the cache directory based on some id passed from caller - - if (!file_exists($this->cache_dir.$this->cache_id)) { - - mkdir($this->cache_dir.$this->cache_id); - chmod($this->cache_dir.$this->cache_id, $this->dir_perms); - } - - $collection_dir = $this->makeCollectionDirPath($collection); - - if (!file_exists($collection_dir)) { - - mkdir($collection_dir); - chmod($collection_dir, $this->dir_perms); - } - - if (!file_exists($collection_dir."index.php")) { - - touch($collection_dir."index.php"); - chmod($collection_dir."index.php", $this->file_perms); - } - } - - function removeCacheFile($cache_file) { - - // Remove the cache file - if (file_exists($cache_file)) { - @ unlink($cache_file); - $this->debug('Cache File Removed: '.$cache_file); - $this->statistics['removed']++; - return true; - } else { - return false; - } - } - - function flush() { - - $tld = $this->readDir($this->cache_dir); - $this->debug("Reading cache file list from: ". $this->cache_dir); - $this->deleteFiles($tld['files']); - - foreach ($tld['dirs'] as $k => $dir) { - - $sld = $this->readDir($dir); - $this->debug("Reading cache file list from: ". $dir); - if (array_key_exists('files', $sld)) { - $this->deleteFiles($sld['files']); - } - foreach ($sld['dirs'] as $sk => $sdir) { - $ssld = $this->readDir($sdir); - $this->debug("Reading cache file list from: ". $sdir); - $this->deleteFiles($ssld['files']); - - rmdir($sdir); - } - - rmdir($dir); - } - } - - function setCacheDir($dir) { - - $this->cache_dir = $dir; - } - - function acquire_lock() { - // Acquire a write lock. - $this->mutex = @fopen($this->cache_dir.$this->lock_file_name, 'w'); - if (false == $this->mutex) { - return false; - } else { - flock($this->mutex, LOCK_EX); - return true; - } - } - - function release_lock() { - // Release write lock. - flock($this->mutex, LOCK_UN); - fclose($this->mutex); - } - - function readDir($dir) { - - if ($handle = opendir($dir)) { - - while (($file = readdir($handle)) !== false) { - - if (is_dir($dir.$file)) { - - if (strpos($file, '.') === false) { - $data['dirs'][] = $dir.$file.DIRECTORY_SEPARATOR; - } - } else { - if (strpos($file, '.php') == true) { - $data['files'][] = $dir.$file; - } - - if (strpos($file, '.lock') == true) { - $data['files'][] = $dir.$file; - } - } - } - - } - - closedir($handle); - return $data; - } - - function deleteFiles($files) { - - if (!empty($files)) { - - foreach ($files as $file) { - $this->debug("About to unlink cache file: ".$file); - unlink($file); - } - - } else { - owa_coreAPI::debug('No Cache Files to delete.'); - } - - return true; - } - -} - -?> --- a/owa/modules/base/classes/fileEventQueue.php +++ /dev/null @@ -1,274 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_fileEventQueue extends owa_eventQueue { - - var $queue; - var $error_logger; - var $queue_dir; - var $event_file; - - function __construct($queue_dir = '') { - - // set event file - if (!$queue_dir) { - $this->queue_dir = owa_coreAPI::getSetting('base', 'async_log_dir'); - } - - $this->event_file = $this->queue_dir.'events.txt'; - $this->lock_file = $this->queue_dir.'lock.txt'; - } - - function makeQueue() { - - //make file queue - $conf = array('mode' => 0600, 'timeFormat' => '%X %x'); - //$this->queue = &Log::singleton('async_queue', $this->event_file, 'async_event_queue', $conf); - $this->queue = Log::singleton('file', $this->event_file, 'async_event_queue', $conf); - $this->queue->_lineFormat = '%1$s|*|%2$s|*|[%3$s]|*|%4$s'; - // not sure why this is needed but it is. - $this->queue->_filename = $this->event_file; - } - - function addToQueue($event) { - - if (!$this->queue) { - $this->makeQueue(); - } - - $this->queue->log(urlencode(serialize($event))); - - } - - function processQueue($event_file = '') { - - if ($event_file) { - - $this->event_file = $this->queue_dir.$event_file; - } - - if ( file_exists( $this->event_file ) ) { - - $event_log_rotate_size = owa_coreAPI::getSetting( 'base', 'async_log_rotate_size' ); - - if ( filesize( $this->event_file ) > $event_log_rotate_size ) { - - owa_coreAPI::notice(sprintf('Starting Async Event Processing Run for: %s', $this->event_file)); - - //check for lock file - if (!$this->isLocked()) { - - return $this->process_event_log($this->event_file); - - } else { - - owa_coreAPI::notice(sprintf('Previous Process (%d) still active. Terminating Run.', $former_pid)); - } - - } else { - - owa_coreAPI::debug("Event file is not large enough to process yet. Size is only: ".filesize($this->event_file)); - } - - } else { - - owa_coreAPI::debug("No event file found at: ".$this->event_file); - } - - } - - function isLocked() { - - if (file_exists($this->lock_file)) { - //read contents of lock file for last PID - $lock = fopen($this->lock_file, "r") or die ("Could not read lock file"); - if ($lock) { - while (!feof($lock)) { - $former_pid = fgets($lock, 4096); - } - fclose($lock); - } - - //check to see if former process is still running - $ps_check = $this->isRunning($former_pid); - //if the process is still running, exit. - if ($ps_check) { - owa_coreAPI::notice(sprintf('Previous Process (%d) still active. Terminating Run.', $former_pid)); - return true; - //if it's not running remove the lock file and proceead. - } else { - owa_coreAPI::debug(sprintf('Process %d is no longer running. Deleting old Lock file. \n', $former_pid)); - unlink ($this->lock_file); - return false; - } - - } else { - return false; - } - } - - function isRunning($pid) { - - $process_state = ''; - - exec("ps $pid", $process_state); - //print $pid; - print_r($process_state); - - if (count($process_state) >= 2) { - return true; - } else { - return false; - } - } - - function process_event_log($file) { - - // check to see if event log file exisits - if (!file_exists($file)) { - owa_coreAPI::debug("Event file does not exist at $file"); - return false; - } - - //create lock file - $this->create_lock_file(); - - // get event dispatcher - $dispatch = owa_coreAPI::getEventDispatch(); - - // Create a new log file name - $new_file_name = $this->queue_dir.time().".".getmypid(); - $new_file = $new_file_name.".processing"; - - // Rename current log file - rename ($file, $new_file ) or die ("Could not rename file"); - owa_coreAPI::debug('renamed event file.'); - - // open file for reading - $handle = @fopen($new_file, "r"); - if ($handle) { - while (!feof($handle)) { - - // Read row - $buffer = fgets($handle, 14096); // big enough? - - // Parse the row - $event = $this->parse_log_row($buffer); - - // Log event to the event queue - if (!empty($event)) { - //print_r($event); - // debug - owa_coreAPI::debug(sprintf('Processing: %s (%s)', '', $event->guid)); - // send event object to event queue - $ret = $dispatch->notify($event); - - // is the dispatch was not successful then add the event back into the queue. - if ( $ret != OWA_EHS_EVENT_HANDLED ) { - $dispatch->asyncNotify($event); - } - - } else { - owa_coreAPI::debug("No event found in log row. Must be end of file."); - } - } - //Close file - fclose($handle); - - // rename file to mark it as processed - $processed_file_name = $new_file_name.".processed"; - rename ($new_file, $processed_file_name) or die ("Could not rename file"); - owa_coreAPI::debug(sprintf('Processing Complete. Renaming File to %s', $processed_file_name )); - - //Delete processed file - unlink($processed_file_name); - owa_coreAPI::debug(sprintf('Deleting File %s', $processed_file_name)); - - //Delete Lock file - unlink($this->lock_file); - - return true; - } else { - //could not open file for processing - owa_coreAPI::error(sprintf('Could not open file %s. Terminating Run.', $new_file)); - } - } - - function makeErrorLogFile() { - - $conf = array('mode' => 640, 'timeFormat' => '%X %x'); - $this->error_logger = &Log::singleton('file', owa_coreAPI::getSetting('async_error_log_file'), 'ident', $conf); - $this->error_logger->_lineFormat = '[%3$s]'; - $this->error_logger->_filename = owa_coreAPI::getSetting('async_error_log_file'); - } - - function logError($event) { - - } - - /** - * Parse row from event log file - * - * @param string $row - * @return array - */ - function parse_log_row($row) { - if ($row) { - $raw_event = explode("|*|", $row); - //print_r($raw_event); - //$row_array = array( 'timestamp' => $raw_event[0], 'event_type' => $raw_event[3], 'event_obj' => $raw_event[4]); - $row_array = array( 'timestamp' => $raw_event[0], 'event_obj' => $raw_event[3]); - //print_r($row_array); - $event = unserialize(urldecode($row_array['event_obj'])); - //print_r($event); - return $event; - } - } - - function create_lock_file() { - - $lock_file = fopen($this->lock_file, "w+") or die ("Could not create lock file at: ".$this->lock_file); - - // Write PID to lock file - if (fwrite($lock_file, getmypid()) === FALSE) { - owa_coreAPI::debug('Cannot write to lock file. Terminating Run.'); - exit; - } - - return; - } -} - -?> --- a/owa/modules/base/classes/geolocation.php +++ /dev/null @@ -1,149 +1,1 @@ - - * @copyright Copyright © 2008 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.3.0 - */ - - -class owa_geolocation { - - var $properties = array(); - - public static function getInstance() { - - return new owa_geolocation(); - } - - function __construct() { - - } - - function __destruct() { - - } - - function getGeolocationFromIp($ip_address, $refresh = false) { - - if (empty($this->properties) || $refresh === true) { - - $geo = array('ip_address' => $ip_address, - 'city' => '', - 'country' => '', - 'state' => '', - 'country_code' => '', - 'latitude' => '', - 'longitude' => ''); - - if ( owa_coreAPI::getSetting( 'base', 'geolocation_lookup' ) ) { - - $eq = owa_coreAPI::getEventDispatch(); - $geo = $eq->filter('geolocation', $geo); - - } - - foreach ($geo as $k => $v) { - if ( ! $v ) { - $geo[$k] = '(not set)'; - } - } - - $this->properties = $geo; - } - } - - function getProperty($name) { - - if (array_key_exists($name, $this->properties)) { - return $this->properties[$name]; - } - } - - function setProperty($name, $value) { - - $this->properties[$name] = $value; - } - - function getCity() { - - if (array_key_exists('city', $this->properties)) { - return $this->properties['city']; - } - } - - function getState() { - if (array_key_exists('state', $this->properties)) { - return $this->properties['state']; - } - } - - function getCountry() { - if (array_key_exists('country', $this->properties)) { - return $this->properties['country']; - } - } - - function getCountryCode() { - if (array_key_exists('country_code', $this->properties)) { - return $this->properties['country_code']; - } - } - - function getLatitude() { - if (array_key_exists('latitude', $this->properties)) { - return $this->properties['latitude']; - } - } - - function getLongitude() { - if (array_key_exists('longitude', $this->properties)) { - return $this->properties['longitude']; - } - } - - function generateId($country = '', $state = '', $city = '') { - - if ( ! $country ) { - - $country = $this->getCountry(); - } - - if ( ! $state ) { - - $state = $this->getState(); - } - - if ( ! $city ) { - - $city = $this->getCity(); - } - $id_string = trim( strtolower($country)) . trim( strtolower($state)) . trim( strtolower($city)); - return owa_lib::setStringGuid( $id_string ); - - } -} - -?> --- a/owa/modules/base/classes/goalManager.php +++ /dev/null @@ -1,208 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - - -class owa_goalManager extends owa_base { - - var $goals; - var $activeGoals; - var $goal_group_labels; - var $activeGoalGroups; - var $activeGoalsByGroup; - var $site_id; - var $numGoals; - var $numGoalGroups; - var $isDirtyGoals; - var $isDirtyGoalGroups; - - /** - * Constructor - * - * Takes cache directory as param - * - * @param $cache_dir string - */ - function __construct( $site_id ) { - - $this->site_id = $site_id; - $this->numGoals = owa_coreAPI::getSetting('base', 'numGoals'); - $this->numGoalGroups = owa_coreAPI::getSetting('base', 'numGoalGroups'); - $this->loadGoals( $site_id ); - $this->loadGoalGroupLabels ( $site_id ); - } - - function setSiteId( $site_id ) { - - $this->site_id = $site_id; - } - - function loadGoalGroupLabels( $site_id ) { - - $this->goal_group_labels = array(); - for ( $i = 1; $i <= $this->numGoalGroups; $i++ ) { - $this->goal_group_labels[$i] = "Goal Group $i"; - } - - $from_db = owa_coreAPI::getSiteSetting( $site_id , 'goal_groups' ); - - if ($from_db) { - - foreach($from_db as $k => $goalGroup) { - if (array_key_exists($k, $this->goal_group_labels)) { - $this->goal_group_labels[$k] = $goalGroup; - } - } - } - } - - function loadGoals( $site_id ) { - - $this->goals = array(); - - for ( $i = 1; $i <= $this->numGoals; $i++ ) { - $this->goals[$i] = array( - 'goal_number' => '', - 'goal_name' => '', - 'goal_group' => '', - 'goal_status' => '', - 'goal_type' => '' - ); - } - - $from_db = owa_coreAPI::getSiteSetting( $site_id, 'goals' ); - - if ($from_db) { - - foreach ($from_db as $k => $goal) { - - if (array_key_exists($k, $this->goals)) { - // add to goal array - $this->goals[$k] = $goal; - // set active goal lists - if (array_key_exists('goal_status', $goal) && $goal['goal_status'] === 'active') { - // set active goals - $this->activeGoals[] = $goal['goal_number']; - // set active goal groups - if (array_key_exists('goal_group', $goal)) { - $this->activeGoalGroups[$goal['goal_group']] = $goal['goal_group']; - // set active goals by group - $this->activeGoalsByGroup[$goal['goal_group']][] = $goal['goal_number']; - } - } - } - } - } - } - - function getActiveGoals() { - if (!empty($this->activeGoals)) { - $goals = array(); - foreach ($this->activeGoals as $goal_number) { - $goals[$goal_number] = $this->getGoal($goal_number); - } - return $goals; - } - } - - function getAllGoals() { - - return $this->goals; - } - - function getActiveGoalGroups() { - - return $this->activeGoalGroups; - } - - function getActiveGoalsByGroup($group_number) { - - return $this->activeGoalsByGroup[$group_number]; - } - - function getGoal($number) { - - if ( array_key_exists( $number, $this->goals ) ) { - - return $this->goals[$number]; - } - } - - function getGoalGroupLabel($number) { - - if ( array_key_exists( $number, $this->goal_group_labels ) ) { - - return $this->goal_group_labels[$number]; - } - } - - function getAllGoalGroupLabels() { - - return $this->goal_group_labels; - } - - function saveGoal($number, $goal) { - - if ( $number <= $this->numGoals ) { - - $goal['goal_number'] = $number; - $this->goals[$goal['goal_number']] = $goal; - $this->isDirtyGoals = true; - } - } - - function saveGoalGroupLabel($number, $goal_group) { - - $this->goal_group_labels[$number] = $goal_group; - $this->isDirtyGoalGroups = true; - } - - function __destruct() { - - if ( $this->isDirtyGoals ) { - - owa_coreAPI::persistSiteSetting( $this->site_id, 'goals', $this->goals ); - } - - if ( $this->isDirtyGoalGroups ) { - - owa_coreAPI::persistSiteSetting( $this->site_id, 'goal_groups', $this->goal_group_labels ); - } - } - - function getGoalFunnel($goal_number) { - - $goal = $this->getGoal($goal_number); - if ( array_key_exists( 'details', $goal ) && array_key_exists( 'funnel_steps', $goal['details'] ) ) { - return $goal['details']['funnel_steps']; - } - } -} - -?> --- a/owa/modules/base/classes/hostip.php +++ /dev/null @@ -1,187 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ -class owa_hostip extends owa_location { - - /** - * URL template for REST based web service - * - * @var unknown_type - */ - var $ws_url = "http://api.hostip.info/get_html.php?ip=%s&position=true"; - - /** - * Constructor - * - * @return owa_hostip - */ - function __construct() { - - return parent::__construct(); - } - - /** - * Fetches the location from the hostip.info web service - * - * @param string $ip - */ - function get_location($location_map) { - - $city = ''; - $state = ''; - $country = ''; - $country_code = ''; - $latitude = ''; - $longitude = ''; - - // check to see if ip is in map - if ( array_key_exists('ip_address',$location_map) - && ! empty( $location_map['ip_address'] ) - && empty( $location_map['country'] ) ) { - - // check to see if ip is valid and not a private address - if ( filter_var( $location_map['ip_address'], - FILTER_VALIDATE_IP, - FILTER_FLAG_IPV4 | - FILTER_FLAG_NO_PRIV_RANGE ) ) { - - // create crawler - $crawler = new owa_http; - $crawler->read_timeout = owa_coreAPI::getSetting('base','ws_timeout'); - // hit web service - $crawler->fetch(sprintf($this->ws_url, $location_map['ip_address'])); - owa_coreAPI::debug(sprintf("HostIp web service response code: %s", $crawler->crawler->response_code)); - $location = $crawler->crawler->results; - // replace delimiter - $location = str_replace("\n", "|", $location); - // convert string to array - $loc_array = explode("|", $location); - $result = array(); - // convert array to multi dimensional array - foreach ($loc_array as $k => $v) { - - if (!empty($v)) { - list($name, $value) = explode(":", $v, 2); - $result[$name] = $value; - } - } - - // parse the city line of response - if ( isset( $result['City'] ) && ! empty( $result['City'] ) ) { - // lowercase - $result['City'] = strtolower($result['City']); - // explode into array - $city_array = explode(',', $result['City']); - // city name is always first - $city = $city_array[0]; - // if there is a second element then it's a state - if (isset($city_array[1])) { - $state = $city_array[1]; - } - } - - // parse country line of response - if ( isset( $result['Country'] ) && ! empty( $result['Country'] ) ) { - //lowercase - $result['Country'] = strtolower( $result['Country'] ); - // set country - $country_parts = explode('(', trim( $result['Country'] ) ); - $country = $country_parts[0]; - // if there is a second element then it's a country code. - if ( isset($country_parts[1] ) ) { - $country_code = substr($country_code,0,-1); - } - // debug - owa_coreAPI::debug('Parse of Hostip country string: '.$result['Country'].' c: '. $country.' cc: '.$country_code); - - } - - // set latitude - if ( isset( $result['Latitude'] ) && ! empty( $result['Latitude'] ) ) { - $latitude = $result['Latitude']; - } - // set longitude - if ( isset( $result['Longitude'] ) && ! empty( $result['Longitude'] ) ) { - $longitude = $result['Longitude']; - } - } - - // fail safe checks for empty, unknown or private adddress labels - // check to make sure values are not "private address" contain "unknown" or "xx" - if ( empty($city) || strpos( $city, 'private' ) || strpos( $city, 'unknown') ) { - - $city = '(not set)'; - } - // check state - if ( empty($state) || strpos( $state, 'private' ) || strpos( $state, 'unknown') ) { - - $state = '(not set)'; - } - // check country - if ( empty( $country ) - || strpos( $country, 'unknown' ) - || strpos( $country, 'private' ) - ) { - $country = '(not set)'; - } - // check country code - if ( empty( $country_code ) - || strpos( $country_code, 'xx' ) - || strpos( $country_code, 'unknown' ) - || strpos( $country_code, 'private' ) - ) { - $country_code = '(not set)'; - } - - $location_map['city'] = strtolower(trim($city)); - $location_map['state'] = strtolower(trim($state)); - $location_map['country'] = strtolower(trim($country)); - $location_map['country_code'] = strtoupper(trim($country_code)); - $location_map['latitude'] = trim($latitude); - $location_map['longitude'] = trim($longitude); - - // log headers if status is not a 200 - if ( isset( $crawler->response_code ) && ! strpos( $crawler->response_code, '200' ) ) { - owa_coreAPI::debug(sprintf("HostIp web service response headers: %s", print_r($crawler->crawler->headers, true))); - } - } - - return $location_map; - } -} - -?> + --- a/owa/modules/base/classes/httpEventQueue.php +++ /dev/null @@ -1,87 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_httpEventQueue extends owa_eventQueue { - - var $endpoint = ''; - - function __construct($options = '') { - // set the endpoint. move this to constructor - if (array_key_exists('endpoint', $options)) { - $this->endpoint = $options['endpoint']; - } else { - $this->endpoint = owa_coreAPI::getSetting('base', 'remote_event_queue_endpoint'); - } - } - - function addToQueue($event) { - - if ($event) { - $properties['owa_event'] = base64_encode(serialize($event)); - - //$properties = array_map('urlencode', $properties); - $properties = owa_lib::implode_assoc('=', '&', $properties); - //print_r($properties); - //return; - } else { - return; - } - - $parts = parse_url($this->endpoint); - - $fp = fsockopen($parts['host'], isset($parts['port'])?$parts['port']:80, $errno, $errstr, 30); - - if (!$fp) { - return false; - } else { - $out = "POST ".$parts['path']." HTTP/1.1\r\n"; - $out.= "Host: ".$parts['host']."\r\n"; - $out.= "Content-Type: application/x-www-form-urlencoded\r\n"; - $out.= "Content-Length: ".strlen($properties)."\r\n"; - $out.= "Connection: Close\r\n\r\n"; - $out.= $properties; - owa_coreAPI::debug("out: $out"); - - fwrite($fp, $out); - fclose($fp); - return true; - } - - } - - function processQueue() { - - } - -} - -?> --- a/owa/modules/base/classes/index.php +++ /dev/null @@ -1,3 +1,1 @@ - + --- a/owa/modules/base/classes/installController.php +++ /dev/null @@ -1,160 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - - -class owa_installController extends owa_controller { - - var $is_installer = true; - - function __construct($params) { - - // needed just in case a re-install happens and updates are also needed. - // tells the controller to skip the updates redirect - if (!defined('OWA_INSTALLING')) { - define('OWA_INSTALLING', true); - } - - //$this->c->setSetting('base', 'cache_objects', false); - - return parent::__construct($params); - } - - function pre() { - - if (owa_coreAPI::getSetting('base', 'install_complete')) { - owa_coreAPI::debug('Install complete redirecting to base.installDetected'); - return $this->redirectBrowser('base.installDetected', false); - } - - return; - } - - function installSchema() { - - $service = &owa_coreAPI::serviceSingleton(); - $base = $service->getModule('base'); - $status = $base->install(); - return $status; - - } - - function createAdminUser($email_address, $real_name = '') { - - //create user entity - $u = owa_coreAPI::entityFactory('base.user'); - // check to see if an admin user already exists - $u->getByColumn('role', 'admin'); - $id_check = $u->get('id'); - // if not then proceed - if (empty($id_check)) { - - //Check to see if user name already exists - $u->getByColumn('user_id', 'admin'); - - $id = $u->get('id'); - - // Set user object Params - if (empty($id)) { - - $password = $u->generateRandomPassword(); - $ret = $u->createNewUser('admin', 'admin', $password, $email_address, $real_name); - owa_coreAPI::debug("Admin user created successfully."); - return $password; - - } else { - owa_coreAPI::debug($this->getMsg(3306)); - } - } else { - owa_coreAPI::debug("Admin user already exists."); - } - - } - - function createDefaultSite($domain, $name = '', $description = '', $site_family = '', $site_id = '') { - - if (!$name) { - $name = $domain; - } - - $site = owa_coreAPI::entityFactory('base.site'); - - if (!$site_id) { - $site_id = $site->generateSiteId($domain); - } - - - // Check to see if default site already exists - $this->e->notice('Checking for existence of default site.'); - - // create site_id....how??? - $site->getByColumn('site_id', $site_id); - $id = $site->get('id'); - - if(empty($id)) { - // Create default site - $site->set('id', $site->generateId($site_id)); - $site->set('site_id', $site_id); - $site->set('name', $name); - $site->set('description', $description); - $site->set('domain', $domain); - $site->set('site_family', $site_family); - $site_status = $site->create(); - - if ($site_status == true) { - $this->e->notice('Created default site.'); - } else { - $this->e->notice('Creation of default site failed.'); - } - - } else { - $this->e->notice(sprintf("Default site already exists (id = %s). nothing to do here.", $id)); - } - - return $site->get('site_id'); - } - - function checkDbConnection() { - - // Check DB connection status - $db = &owa_coreAPI::dbSingleton(); - $db->connect(); - if ($db->connection_status === true) { - return true; - } else { - return false; - } - - } - -} - -?> --- a/owa/modules/base/classes/installManager.php +++ /dev/null @@ -1,140 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - - -class owa_installManager extends owa_base { - - function __construct($params = '') { - - return parent::__construct($params); - } - - function installSchema() { - - $service = &owa_coreAPI::serviceSingleton(); - $base = $service->getModule('base'); - $status = $base->install(); - return $status; - - } - - function createAdminUser($email_address, $real_name = '', $password = '') { - - //create user entity - $u = owa_coreAPI::entityFactory('base.user'); - // check to see if an admin user already exists - $u->getByColumn('role', 'admin'); - $id_check = $u->get('id'); - // if not then proceed - if (empty($id_check)) { - - //Check to see if user name already exists - $u->getByColumn('user_id', 'admin'); - - $id = $u->get('id'); - - // Set user object Params - if (empty($id)) { - - if ( ! $password ) { - - $password = $u->generateRandomPassword(); - } - - $ret = $u->createNewUser('admin', 'admin', $password, $email_address, $real_name); - owa_coreAPI::debug("Admin user created successfully."); - return $password; - - } else { - owa_coreAPI::debug($this->getMsg(3306)); - } - } else { - owa_coreAPI::debug("Admin user already exists."); - } - - } - - function createDefaultSite($domain, $name = '', $description = '', $site_family = '', $site_id = '') { - - if (!$name) { - $name = $domain; - } - - $site = owa_coreAPI::entityFactory('base.site'); - - if (!$site_id) { - $site_id = $site->generateSiteId($domain); - } - - - // Check to see if default site already exists - $this->e->notice('Checking for existence of default site.'); - - // create site_id....how??? - $site->getByColumn('site_id', $site_id); - $id = $site->get('id'); - - if(empty($id)) { - // Create default site - $site->set('id', $site->generateId($site_id)); - $site->set('site_id', $site_id); - $site->set('name', $name); - $site->set('description', $description); - $site->set('domain', $domain); - $site->set('site_family', $site_family); - $site_status = $site->create(); - - if ($site_status == true) { - $this->e->notice('Created default site.'); - } else { - $this->e->notice('Creation of default site failed.'); - } - - } else { - $this->e->notice(sprintf("Default site already exists (id = %s). nothing to do here.", $id)); - } - - return $site->get('site_id'); - } - - function checkDbConnection() { - - // Check DB connection status - $db = &owa_coreAPI::dbSingleton(); - $db->connect(); - if ($db->connection_status === true) { - return true; - } else { - return false; - } - } -} - -?> --- a/owa/modules/base/classes/mailer.php +++ /dev/null @@ -1,93 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_mailer extends owa_base { - - var $mailer; - - /** - * Constructor - * - * @return owa_mailer - */ - function __construct() { - - parent::__construct(); - $this->mailer = new PHPMailer(); - - if (!empty($this->config['mailer-from'])): - $this->mailer->From = $this->config['mailer-from']; - endif; - - if (!empty($this->config['mailer-fromName'])): - $this->mailer->FromName = $this->config['mailer-fromName']; - endif; - - if (!empty($this->config['mailer-host'])): - $this->mailer->Host = $this->config['mailer-host']; - endif; - - if (!empty($this->config['mailer-port'])): - $this->mailer->Port = $this->config['mailer-port']; - endif; - - if (!empty($this->config['mailer-smtpAuth'])): - $this->mailer->SMTPAuth = $this->config['mailer-smtpAuth']; - endif; - - if (!empty($this->config['mailer-username'])): - $this->mailer->Username = $this->config['mailer-username']; - endif; - - if (!empty($this->config['mailer-password'])): - $this->mailer->Password = $this->config['mailer-password']; - endif; - - return; - - } - - function sendMail() { - - if(!$this->mailer->Send()): - - return $this->e->debug(sprintf("Mailer Failure. Was not able to send to %s with subject of '%s'. Error Msgs: '%s'", $this->mailer->to, $this->mailer->Subject, $this->mailer->ErrorInfo)); - - else: - return $this->e->debug(sprintf("Mail sent to %s with the subject of '%s'.", $this->mailer->to[0], $this->mailer->Subject)); - endif; - - - } -} - -?> + --- a/owa/modules/base/classes/memcachedCache.php +++ /dev/null @@ -1,144 +1,1 @@ - - * @copyright Copyright © 2006 - 2011 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_memcachedCache extends owa_cache { - - var $mc; - - /** - * Constructor - * - * Takes cache directory as param - * - * @param $cache_dir string - */ - function __construct() { - - $servers = owa_coreAPI::getSetting( 'base', 'memcachedServers' ); - if ( ! $servers ) { - owa_coreAPI::notice('No memcached servers found in configuration settings.'); - return; - } - $persistant = owa_coreAPI::getSetting( 'base', 'memcachedPersisantConnections' ); - $error_mode = owa_coreAPI::getSetting( 'base', 'error_handler' ); - if ( $error_mode === 'development' ) { - $debug = true; - } else { - $debug = false; - } - - $this->mc = new owa_memcachedClient(array( - 'servers' => $servers, - 'debug' => $debug, - 'compress_threshold' => 10240, - 'persistant' => $persistant - )); - - return parent::__construct(); - } - - function makeKey($values) { - $key = 'owa-'; - $key .= $this->cache_id . '-'; - $key .= implode('-', $values); - return $key; - } - - function getItemFromCacheStore($collection, $id) { - $key = $this->makeKey( array( $collection, $id ) ); - $item = $this->mc->get( $key ); - - if ($item) { - $this->debug("$key retrieved from memcache."); - return $item; - } else { - $this->debug("$key was not found in memcache."); - } - - } - - function putItemToCacheStore($collection, $id) { - - $key = $this->makeKey( array( $collection, $id ) ); - $item = $this->cache[$collection][$id]; - $expiration = $this->getCollectionExpirationPeriod( $collection ); - $ret = $this->mc->replace( $key, $item, $expiration ); - - if ( $ret ) { - $this->debug( "$key successfully replaced in memcache." ); - return true; - - } else { - $ret = $this->mc->add( $key, $item ); - if ( $ret ) { - $this->debug( "$key successfully added to memcache." ); - return true; - } else { - $this->debug( "$key not added/replaced in memcache." ); - return false; - } - } - } - - function removeItemFromCacheStore($collection, $id) { - - $key = $this->makeKey( array( $collection, $id ) ); - $item = $this->cache[$collection][$id]; - $ret = $this->mc->delete($key); - - if ($ret) { - $this->debug( "$key successfully deleted from memcache." ); - } else { - $this->debug( "$key not deleted from memcache."); - } - } - - function flush() { - - owa_coreAPI::notice("Cannot flush Memcache from client."); - return true; - } -} - -class owa_memcachedClient extends memcached { - - function _debugprint( $text ) { - owa_coreAPI::debug( "memcached: $text" ); - } -} - -?> - --- a/owa/modules/base/classes/paginatedResultSet.php +++ /dev/null @@ -1,370 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ -class owa_paginatedResultSet { - - /** - * Unique hash of result set used by front end - * to see if there are any changes. - */ - var $guid; - - var $timePeriod; - var $resultsPerPage = 25; - var $resultsTotal; - var $resultsReturned; - var $resultsRows = array(); - var $sortColumn; - var $sortOrder; - - /** - * Aggregate values for metrics - */ - var $aggregates = array(); - - var $rows; - - var $labels; - - var $more; - var $page = 1; - var $total_pages; - - /** - * The API URL that produces the results - */ - var $self; - - /** - * The API URL that produces the next page of results - */ - var $next; - - /** - * The API URL that produces the previous page of results - */ - var $previous; - - /** - * The base API URL that is used to construct client side pagination links. - * Does not contain any 'page' params. - */ - var $base_url; - - var $results_count = 0; - var $offset = 0; - var $limit; - var $query_limit; - - - function __construct() { - - } - - function setLimit($limit) { - - $this->resultsPerPage = $limit; - $this->limit = $limit; - } - - function setPage($page) { - - $this->page = $page; - } - - function setMorePages() { - - $this->more = true; - } - - function calculateOffset() { - - $this->offset = $this->limit * ($this->page - 1); - return $this->offset; - } - - function countResults($results) { - - $this->resultsTotal = count($results); - $this->results_count = count($results); - - if ($this->limit) { - $this->total_pages = ceil(($this->results_count + $this->offset) / $this->limit); - - if ($this->results_count <= $this->limit) { - // no more pages - } else { - // more pages - $this->setMorePages(); - - } - } - } - - function getRowCount() { - - return $this->results_count; - } - - function generate($dao, $method = 'getAllRows') { - - if (!empty($this->limit)) { - // query for more than we need - $dao->limit($this->limit * 10); - } - - if (!empty($this->page)) { - - $dao->offset($this->calculateOffset()); - } else { - $this->page = 1; - } - - $results = $dao->$method(); - if (!empty($results)) { - $this->countResults($results); - - if ($this->resultsPerPage) { - $this->rows = array_slice($results, 0, $this->limit); - } else { - $this->rows = $results; - } - - $this->resultsReturned = count($this->rows); - } else { - $this->rows = array(); - } - - return $this->rows; - } - - function getResultSetAsArray() { - - $set = array(); - - $set['labels'] = $this->labels; - $set['rows'] = $this->rows; - $set['count'] = $this->results_count; - $set['page'] = $this->page; - $set['total_pages'] = $this->total_pages; - $set['more'] = $this->more; - $set['period'] = $this->getPeriodInfo(); - return $set; - } - - function setLabels($labels) { - - $this->labels = $labels; - } - - function displayPagination() { - - - } - - function getPeriodInfo() { - return $this->periodInfo; - } - - function setPeriodInfo($info) { - $this->timePeriod = $info; - } - - function getLabel($key) { - - if (array_key_exists($key, $this->labels)) { - return $this->labels[$key]; - } - } - - function getAllLabels() { - - return $this->labels; - } - - - function formatResults($format) { - - $formats = array('html' => 'resultSetToHtml', - 'json' => 'resultSetToJson', - 'jsonp' => 'resultSetToJsonp', - 'xml' => 'resultSetToXml', - 'php' => 'resultSetToSerializedPhp', - 'csv' => 'resultSetToCsv', - 'debug' => 'resultSetToDebug'); - - if (array_key_exists($format, $formats)) { - - return $this->$formats[$format](); - } else { - return 'That format is not supported'; - } - - } - - - function resultSetToXml() { - - $t = new owa_template; - - $t->set_template('resultSetXml.php'); - $t->set('rs', $this); - - return $t->fetch(); - } - - function resultSetToJson() { - return json_encode($this); - } - - function resultSetToJsonp($callback = '') { - - // if not found look on the request scope. - if ( ! $callback ) { - $callback = owa_coreAPI::getRequestParam('jsonpCallback'); - } - - if ( ! $callback ) { - - return $this->resultSetToJson(); - } - - $t = new owa_template; - $t->set_template('json.php'); - - // set - $body = sprintf("%s(%s);", $callback, json_encode( $this ) ); - - $t->set('json', $body); - return $t->fetch(); - } - - function resultSetToDebug() { - - return print_r($this, true); - } - - function resultSetToSerializedPhp() { - return serialize($this); - } - - function resultSetToHtml($class = 'dimensionalResultSet') { - $t = new owa_template; - - $t->set_template('resultSetHtml.php'); - $t->set('rs', $this); - $t->set('class', $class); - - return $t->fetch(); - } - - function getDataRows() { - return $this->resultsRows; - } - - function addLinkToRowItem($item_name, $template, $subs) { - - - foreach ($this->resultsRows as $k => $row) { - - $sub_array = array(); - - foreach ($subs as $sub) { - $sub_array[] = urlencode($this->resultsRows[$k][$sub]['value']); - } - - $this->resultsRows[$k][$item_name]['link'] = vsprintf($template, $sub_array); - } - - } - - function getSeries($name) { - - $rows = $this->getDataRows(); - - if ($rows) { - $series = array(); - foreach ($rows as $row) { - foreach($row as $item) { - if ($item['name'] === $name) { - $series[] = $item['value']; - } - } - } - return $series; - } else { - return false; - } - } - - function getAggregateMetric($name) { - - if (array_key_exists($name, $this->aggregates)) { - return $this->aggregates[$name]['value']; - } else { - owa_coreAPI::debug("No aggregate metric called $name found."); - } - } - - function setAggregateMetric($name, $value, $label, $data_type, $formatted_value = '') { - - $this->aggregates[$name] = array('result_type' => 'metric', 'name' => $name, 'value' => $value, 'label' => $label, 'data_type' => $data_type, 'formatted_value' => $formatted_value); - } - - function appendRow($row_num, $type, $name, $value, $label, $data_type, $formatted_value = '') { - - $this->resultsRows[$row_num][$name] = array('result_type' => $type, 'name' => $name, 'value' => $value, 'label' => $label, 'data_type' => $data_type, 'formatted_value' => $formatted_value); - } - - function removeMetric($name) { - - if (array_key_exists($name, $this->aggregates)) { - - unset($this->aggregates[$name]); - } - - if ($this->getRowCount() > 0) { - - foreach ($this->resultsRows as $k => $row) { - - if (array_key_exists($name, $row)) { - - unset($this->resultsRows[$k][$name]); - } - } - } - } - - function createResultSetHash() { - - $this->guid = md5(serialize($this)); - } -} - -?> --- a/owa/modules/base/classes/pagination.php +++ /dev/null @@ -1,113 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ -class owa_pagination extends owa_base { - - var $page = 1; - - var $limit; - - var $offset = 0; - - var $total_count; - - function __construct() { - - return; - - } - - function setLimit($limit) { - $this->limit = $limit; - return; - } - - function setPage($page) { - $this->page = $page; - return; - } - - function setMorePages($bool) { - - $this->more_pages = $bool; - return; - - } - - function calculateOffset() { - - $this->offset = $this->limit * ($this->page - 1); - return $this->offset; - } - - function getMaxPageNum() { - - if ($this->total_count > 0) { - - $c = $this->total_count / $this->limit; - $c = ceil($c); - } else { - - $c = 0; - } - - return $c; - } - - function getPagination() { - - $pagination = array(); - $pagination['limit'] = $this->limit; - $pagination['page_num'] = $this->page; - $pagination['offset'] = $this->offset; - $pagination['max_page_num'] = $this->getMaxPageNum(); - $pagination['more_pages'] = $this->more_pages; - $pagination['total_count'] = $this->total_count; - $pagination['results_count'] = $this->results_count; - $pagination['diff_count'] = $this->total_count - $this->results_count; - return $pagination; - } - - function countResults($results) { - - $this->results_count = count($results); - - if ($this->results_count < $this->limit): - $this->more_pages = false; - else: - $this->more_pages = true; - endif; - - return; - } - -} - - -?> --- a/owa/modules/base/classes/resultSetManager.php +++ /dev/null @@ -1,1298 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.3.0 - */ - -class owa_resultSetManager extends owa_base { - - /** - * The params of the caller, either a report or graph - * - * @var array - */ - var $params = array(); - - /** - * The lables for calculated measures - * - * @var array - */ - var $labels = array(); - - /** - * Data Access Object - * - * @var object - */ - var $db; - - /** - * The dimensions to groupby - * - * @var array - */ - var $dimensions = array(); - - /** - * The Number of Dimensions to groupby - * - * @var integer - */ - var $dimensionCount; - - /** - * The table/column or denormalized dimensions - * associated with this metric - * - * @var array - */ - var $denormalizedDimensions = array(); - - var $_default_offset = 0; - var $page; - var $limit; - var $order; - var $format; - var $constraint_operators = array('==','!=','>=', '<=', '>', '<', '=~', '!~', '=@','!@'); - var $related_entities = array(); - var $related_dimensions = array(); - var $related_metrics = array(); - var $resultSet; - var $base_table; - var $metrics = array(); - var $metricsByTable = array(); - var $childMetrics = array(); - var $calculatedMetrics = array(); - var $query_params = array(); - var $baseEntity; - var $metricObjectsByEntityMap = array(); - var $errors = array(); - var $formatters = array(); - - function __construct($db = '') { - - if ($db) { - $this->db = $db; - } else { - $this->db = owa_coreAPI::dbSingleton(); - } - - $this->formatters = array( - //'yyyymmdd' => array($this, 'dateFormatter'), - 'timestamp' => array($this, 'formatSeconds'), - 'percentage' => array($this, 'formatPercentage'), - 'integer' => array($this, 'numberFormatter'), - 'currency' => array($this, 'formatCurrency') - ); - - return parent::__construct(); - } - - - function setConstraint($name, $value, $operator = '') { - - if (empty($operator)) { - $operator = '='; - } - - if (!empty($value)) { - $this->params['constraints'][] = array('operator' => $operator, 'value' => $value, 'name' => $name); - } - } - - function setConstraints($array) { - - if (is_array($array)) { - - if (is_array($this->params['constraints'])) { - $this->params['constraints'] = array_merge($array, $this->params['constraints']); - } else { - $this->params['constraints'] = $array; - } - } - } - - function constraintsStringToArray($string) { - - if ($string) { - //print_r($string); - // add string to query params array for use in URLs. - $this->query_params['constraints'] = $string; - - $constraints = explode(',', $string); - //print_r($constraints); - $constraint_array = array(); - - foreach($constraints as $constraint) { - - foreach ($this->constraint_operators as $operator) { - - if (strpos($constraint, $operator)) { - list ($name, $value) = split($operator, $constraint); - - $constraint_array[] = array('name' => $name, 'value' => $value, 'operator' => $operator); - - - break; - } - } - } - //print_r($constraint_array); - return $constraint_array; - } - } - - function getConstraints() { - - return $this->params['constraints']; - } - - function applyConstraints() { - - $nconstraints = array(); - - foreach ($this->getConstraints() as $k => $constraint) { - - $dim = $this->lookupDimension($constraint['name'], $this->baseEntity); - - //$dimEntity = owa_coreAPI::entityFactory($dim['entity']); - - - $col = $dim['column']; - $constraint['name'] = $col; - $nconstraints[$col] = $constraint; - $this->db->multiWhere($nconstraints); - //print_r($nconstraints); - - } - - } - - - function chooseBaseEntity() { - - $metric_imps = array(); - - // load metric implementations - foreach ($this->metrics as $metric_name) { - - $metric_imps = array_merge($this->getMetricEntities($metric_name), $metric_imps); - - - } - //print_r($metric_imps); - owa_coreAPI::debug('pre-reduce set of entities to choose from: '.print_r($metric_imps, true)); - - $entities = array(); - // reduce entities - foreach ($metric_imps as $mimp) { - - if (empty($entities)) { - $entities = $mimp; - } - - $entities = $this->reduceTables($mimp, $entities); - - if (empty($entities)) { - return $this->addError('illegal metric combination'); - } - } - - owa_coreAPI::debug('post-reduce set of entities to choose from: '.print_r($entities, true)); - - // check summary level of entities - $niceness = array(); - - foreach ($entities as $entity) { - - $niceness[$entity] = owa_coreAPI::entityFactory($entity)->getSummaryLevel(); - } - //sort by summary level - arsort($niceness); - - owa_coreAPI::debug('Entities summary levels: '.print_r($niceness, true)); - - $entity_count = count($niceness); - $i = 1; - //check entities for dimension relations - foreach ($niceness as $entity_name => $summary_level) { - - $error = false; - - //cycle through each dimension frm dim list and those found in constraints. - $dims = array_unique(array_merge($this->dimensions, $this->getDimensionsFromConstraints())); - - owa_coreAPI::debug(sprintf('Dimensions: %s',print_r($this->dimensions, true))); - - owa_coreAPI::debug(sprintf('Checking the following dimensions for relation to %s: %s',$entity_name, print_r($dims, true))); - - foreach ($dims as $dimension) { - - $check = $this->isDimensionRelated($dimension, $entity_name); - - // is the realtionship check fails then move onto the next entity. - if (!$check) { - $error = true; - owa_coreAPI::debug("$dimension is not related to $entity_name. Moving on to next entity..."); - break; - } else { - owa_coreAPI::debug("Dimension: $dimension is related to $entity_name."); - } - } - - // is no error then everythig is related and we are good to go. - if (!$error) { - owa_coreAPI::debug('optimal base entity is: '.$entity_name); - $this->baseEntity = owa_coreAPI::entityFactory($entity_name); - return $this->baseEntity; - } - - if ($i === $entity_count) { - $this->addError('illegal dimension combination: '.$dimension); - } else { - $i++; - } - } - } - - function getDimensionsFromConstraints() { - - $dims = array(); - - $constraints = $this->getConstraints(); - //print_r($constraints); - if (!empty($constraints)) { - - foreach ($constraints as $carray) { - - $dims[] = $carray['name']; - } - } - - return $dims; - } - - function isDimensionRelated($dimension_name, $entity_name) { - - $entity = owa_coreAPI::entityFactory($entity_name); - - $dimension = $this->lookupDimension($dimension_name, $entity); - - if ($dimension['denormalized'] === true) { - $this->related_dimensions[$dimension['name']] = $dimension; - owa_coreAPI::debug("Dimension: $dimension_name is denormalized into $entity_name"); - return true; - } else { - - $fk = $this->getDimensionForeignKey($dimension, $entity); - - if ($fk) { - owa_coreAPI::debug("Dimension: $dimension_name is related to $entity_name"); - $this->related_dimensions[$dimension['name']] = $dimension; - return true; - } else { - owa_coreAPI::debug("Could not find a foreign key for $dimension_name in $entity_name"); - } - } - } - - function getMetricEntities($metric_name) { - - //get the class implementations - $s = owa_coreAPI::serviceSingleton(); - $classes = $s->getMetricClasses($metric_name); - - $entities = array(); - - // cycles through metric classes and get their entity names - foreach ($classes as $name => $map) { - $m = owa_coreAPI::metricFactory($map['class'], $map['params']); - - // check to see if this is a calculated metric - if ($m->isCalculated()) { - - foreach ($m->getChildMetrics() as $cmetric_name) { - $this->addCalculatedMetric($m); - $entities = array_merge($this->getMetricEntities($cmetric_name), $entities); - } - - } else { - $this->metricObjectsByEntityMap[$m->getEntityName()][$metric_name] = $m; - $entities[$metric_name][] = $m->getEntityName(); - } - - } - - return $entities; - } - - function reduceTables($new, $old) { - - return array_intersect($new, $old); - } - - function getDimensionForeignKey($dimension, $entity) { - - if ($dimension) { - //$entity = ; - $dim = $dimension; - $fk = array(); - // check for foreign key column by name if dimension specifies one - if (array_key_exists('foreign_key_name', $dim) && !empty($dim['foreign_key_name'])) { - // get foreign key col by - if ($entity->isForeignKeyColumn($dim['foreign_key_name'])){ - $fk = array('col' => $dim['foreign_key_name'], 'entity' => $entity); - } - - } else { - // if not check for foreign key by entity name - //check to see if the metric's entity has a foreign key to the dimenesion table. - $fk = array(); - - $fkcol = $entity->getForeignKeyColumn($dim['entity']); - owa_coreAPI::debug("Foreign Key check: ". print_r($fkcol, true)); - if ($fkcol) { - $fk['col'] = $fkcol; - $fk['entity'] = $entity; - } - } - - return $fk; - } - } - - function lookupDimension($name, $entity) { - - // check dimensions - if (array_key_exists($name, $this->related_dimensions)) { - //return $this->related_dimensions[$name]; - } - //print_r($this->metrics[0]); - // check for denormalized - - $service = owa_coreAPI::serviceSingleton(); - $dim = $service->getDenormalizedDimension($name, $entity->getName()); - - if ($dim) { - //apply table aliasing to dimension column - $dim['column'] = $entity->getTableAlias().'.'.$dim['column']; - } else { - - // check for normalized dim - if (array_key_exists($name, $this->related_dimensions)) { - $dim = $this->related_dimensions[$name]; - } else { - - $dim = $service->getDimension($name); - - if ($dim) { - $dimEntity = owa_coreAPI::entityFactory($dim['entity']); - // alias needs to use fk name in case there are two joins on the - // same table. This is also used in addRelation method - $alias = $dimEntity->getTableAlias().'_via_'.$dim['foreign_key_name']; - //$dim['column'] = $dimEntity->getTableAlias().'.'.$dim['column']; - $dim['column'] = $alias.'.'.$dim['column']; - } else { - $msg = "$name is not a registered dimension."; - owa_coreAPI::debug($msg); - $this->addError($msg); - } - - } - } - - return $dim; - } - - function setLimit($value) { - - if (!empty($value)) { - - $this->limit = $value; - } - } - - function setOrder($value) { - - if (!empty($value)) { - $this->params['order'] = $value; - } - } - - function getOrder() { - - if (array_key_exists('order', $this->params)) { - return $this->params['order']; - } - } - - function setSort($column, $order) { - - //$this->params['orderby'][] = array($this->getColumnName($column), $order); - } - - function setSorts($array) { - - if (is_array($array)) { - - if (!empty($this->params['orderby'])) { - $this->params['orderby'] = array_merge($array, $this->params['orderby']); - - } else { - $this->params['orderby'] = $array; - } - } - } - - function sortStringToArray($string) { - - if ($string) { - - // add string to query params array for use in URLs. - $this->query_params['sort'] = $string; - - $sorts = explode(',', $string); - - $sort_array = array(); - - foreach ($sorts as $sort) { - - if (strpos($sort, '-')) { - $column = substr($sort, 0, -1); - $order = 'DESC'; - } else { - $column = $sort; - $order = 'ASC'; - } - - //$col_name = $this->getColumnName($column); - $check = $this->isSortValid($column); - - if ($check) { - - $col_name = $column; - - if ($col_name) { - $sort_array[$sort][0] = $col_name; - $sort_array[$sort][1] = $order; - - } else { - $this->addError("$column is not a valid column to sort on"); - } - } - } - - return $sort_array; - } - } - - function isSortValid($needle) { - - $haystack = array_merge($this->metrics, $this->dimensions); - return in_array($needle, $haystack); - } - - function setPage($value) { - - if (!empty($value)) { - - $this->page = $value; - - if (!empty($this->pagination)) { - $this->pagination->setPage($value); - } - } - } - - function setOffset($value) { - - if (!empty($value)) { - $this->params['offset'] = $value; - } - } - - function setFormat($value) { - if (!empty($value)) { - $this->format; - $this->params['result_format'] = $value; - } - } - - function setPeriod($value) { - if (!empty($value)) { - $this->params['period'] = $value; - } - } - - function setTimePeriod($period_name = '', $startDate = null, $endDate = null, $startTime = null, $endTime = null) { - - $map = false; - - if ($startDate && $endDate) { - $period_name = 'date_range'; - $map = array('startDate' => $startDate, 'endDate' => $endDate); - $dimension_name = 'date'; - $format = 'yyyymmdd'; - } elseif ($startTime && $endTime) { - $period_name = 'time_range'; - $map = array('startTime' => $startTime, 'endTime' => $endTime); - $dimension_name = 'timestamp'; - $format = 'timestamp'; - } else { - owa_coreAPI::debug('no start/end params passed to owa_metric::setTimePeriod'); - $dimension_name = 'date'; - $format = 'yyyymmdd'; - } - - // add to query params array for use in URL construction - if ($map) { - $this->query_params = array_merge($map, $this->query_params); - } else { - $this->query_params['period'] = $period_name; - } - - $p = owa_coreAPI::supportClassFactory('base', 'timePeriod'); - - $p->set($period_name, $map); - - $this->setPeriod($p); - - $start = $p->startDate->get($format); - $end = $p->endDate->get($format); - - $this->setConstraint($dimension_name, array('start' => $start, 'end' => $end), 'BETWEEN'); - - - } - - function setStartDate($date) { - - if (!empty($date)) { - $this->params['startDate'] = $date; - } - } - - function setEndDate($date) { - if (!empty($date)) { - $this->params['endDate'] = $date; - } - } - - function applyMetaDataToResults($results) { - - $new_rows = array(); - - foreach ($results as $row) { - - $new_rows[] = $this->applyMetaDataToSingleResultRow($row); - } - - return $new_rows; - } - - function applyMetaDataToSingleResultRow($row) { - - $new_row = array(); - - foreach ($row as $k => $v) { - - if (in_array($k, $this->dimensions)) { - $type = 'dimension'; - $dim = $this->lookupDimension($k, $this->baseEntity); - $data_type = $dim['data_type']; - } elseif (in_array($k, $this->metrics)){ - $type = 'metric'; - $data_type = $this->getMetric($k)->getDataType(); - } - - - - $new_row[$k] = array( - 'result_type' => $type, - 'name' => $k, - 'value' => $v, - 'formatted_value' => $this->formatValue($data_type, $v), - 'label' => $this->getLabel($k), 'data_type' => $data_type); - } - - return $new_row; - } - - function formatValue($type, $value) { - - if (array_key_exists($type, $this->formatters)) { - - $formatter = $this->formatters[$type]; - - if (!empty($formatter)) { - - $value = call_user_func($formatter, $value); - } - } - - - return $value; - } - - function numberFormatter($value) { - - return number_format($value); - } - - function formatSeconds($value) { - - return date("G:i:s",mktime(0,0,($value))); - } - - function formatPercentage($value) { - - return number_format($value * 100, 2).'%'; - } - - function formatCurrency($value) { - - return owa_lib::formatCurrency( $value, owa_coreAPI::getSetting( 'base', 'currencyLocal' ) ); - } - - /** - * Sets an individual label - * return the key so that it can be nested - * @return $key string - */ - function addLabel($key, $label) { - - $this->labels[$key] = $label; - return $key; - } - - function getLabel($key = '') { - - if (array_key_exists($key, $this->labels)) { - return $this->labels[$key]; - } else { - //owa_coreAPI::debug("No label found for $key."); - } - - } - - /** - * Retrieve the labels of the measures - * - */ - function getLabels() { - - return $this->labels; - } - - /** - * Sets an individual label - * return the key so that it can be nested - * @return $key string - */ - function setLabel($label) { - - $this->labels[$this->getName()] = $label; - } - - /** - * Set the labels of the measures - * - */ - function setLabels($array) { - - $this->labels = $array; - } - - function getPeriod() { - - return $this->params['period']; - } - - function getLimit() { - - return $this->limit; - } - - /** - * Adds a dimension to the dimension map - * - * Retrieves dimension info from service layer and checks to see if - * dimension is denromalized or if it is a valid relation - */ - function setDimension($name) { - - if ($name) { - $this->dimensions[] = $name; - } - } - - function setDimensions($array) { - - if ($array) { - - foreach($array as $name) { - - $this->setDimension($name); - } - } - } - - function dimensionsStringToArray($string) { - - // add string to query params array for use in URLs. - $this->query_params['dimensions'] = $string; - return explode(',', $string); - } - - function metricsStringToArray($string) { - - // add string to query params array for use in URLs. - $this->query_params['metrics'] = $string; - return explode(',', $string); - } - - - function dimensionsArrayToString($array) { - - return implode(',', $array); - } - - /** - * Applies dimensional sql to dao object - */ - function applyDimensions() { - - foreach ($this->dimensions as $dimension_name) { - $dim = $this->lookupDimension($dimension_name, $this->baseEntity); - // add column name to select statement - $this->db->selectColumn($dim['column'], $dim['name']); - // add groupby - $this->db->groupBy($dim['column']); - $this->addLabel($dim['name'], $dim['label']); - } - } - - function applyJoins() { - - foreach($this->related_dimensions as $dim) { - $this->addRelation($dim); - } - } - - function addRelation($dim) { - - // if denomalized, skip - if ($dim['denormalized'] === true) { - return; - } - - // have already determined base enttiy at this point so use that. - $fk = $this->getDimensionForeignKey($dim, $this->baseEntity); - //print_r($fk); - //print $fk; - if ($fk) { - - // create dimension entity - $dimEntity = owa_coreAPI::entityFactory($dim['entity']); - // get foreign key column - //$bm = $this->getBaseMetric(); - //$fpk_col = $bm->entity->getProperty($fk); - $fpk_col = $fk['entity']->getProperty($fk['col']); - //$fpk_col = $this->baseEntity->getProperty($fk['col']); - - //print_r($fk['col']); - $fpk = $fpk_col->getForeignKey(); - // add join - //print_r($fpk); - // needed to make joins unique in cases where there are - // two joins onthe same table using different foreign keys. - $alias = $dimEntity->getTableAlias().'_via_'.$dim['foreign_key_name']; - //$this->db->join(OWA_SQL_JOIN, $dimEntity->getTableName(), $dimEntity->getTableAlias(), $fk['entity']->getTableAlias().'.'.$fk['col'], $dimEntity->getTableAlias().'.'.$fpk[1]); - $this->db->join(OWA_SQL_JOIN, $dimEntity->getTableName(), $alias, $fk['entity']->getTableAlias().'.'.$fk['col'], $alias.'.'.$fpk[1]); - - //$this->addColumn($dim['name'], $dimEntity->getTableAlias().'.'.$dim['column']); - $this->addColumn($dim['name'], $alias.'.'.$dim['column']); - - } else { - // add error result set - owa_coreAPI::debug(sprintf('%s metric does not have relation to dimension %s', $fk['entity']->getName(), $dim['name'])); - } - - } - - // remove - function addMetric($metric_name, $child = false) { - - $ret = false; - - $m = $this->getMetric($metric_name); - - if (!$m) { - $m = owa_coreAPI::metricFactory($metric_name); - - if ($m) { - - - // necessary if the metric was first added as a child but later added as a parent. - if (!$child) { - - if (array_key_exists($metric_name, $this->childMetrics)) { - unset ($this->childMetrics[$metric_name]); - } - } else { - // add child metrics to child metric maps - // check to see if it wasn't already added as a non-child metric. - if (!array_key_exists($metric_name, $this->metrics)){ - $this->childMetrics[$metric_name] = $metric_name; - } - } - - // check to see if this is a calculated metric - if ($m->isCalculated()) { - - return $this->addCalculatedMetric($m); - } - - if ($this->checkForFactTableRelation($m)) { - - $this->metrics[$metric_name] = $m; - $this->metricsByTable[$m->getTableName()] = $metric_name; - $this->addSelect($m->getSelect()); - $this->addLabel($m->getName(), $m->getLabel()); - - $ret = true; - } - - } else { - $this->addError("$metric_name is not a metric."); - } - } else { - $ret = true; - } - - - - return $ret; - } - - function addCalculatedMetric($calc_metric_obj) { - - // add label of calculated metric obj - $this->addLabel($calc_metric_obj->getName(),$calc_metric_obj->getLabel()); - // add to calculated metric map - $this->calculatedMetrics[$calc_metric_obj->getName()] = $calc_metric_obj; - - } - - function getCalculatedMetricByName($name) { - - return $this->calculatedMetrics[$name]; - } - - function addSelect($select_array) { - - $this->params['selects'][] = $select_array; - } - - function getSelects() { - - if (array_key_exists('selects', $this->params)) { - return $this->params['selects']; - } - } - - function applySelects() { - //print_r($this->metrics); - foreach($this->metrics as $k => $metric_name) { - - if (!array_key_exists($metric_name, $this->calculatedMetrics)) { - - $m = $this->metricObjectsByEntityMap[$this->baseEntity->getName()][$metric_name]; - - $select = $m->getSelect(); - //print_r ($select); - $this->db->selectColumn($select[0], $select[1]); - } else { - $m = $this->getCalculatedMetricByName($metric_name); - } - - $this->addLabel($m->getName(), $m->getLabel()); - } - - // add selects for calculated metrics - if (!empty($this->calculatedMetrics)) { - - // loop through calculated metric objects - foreach ($this->calculatedMetrics as $cmetric) { - //create child metrics - foreach( $cmetric->getChildMetrics() as $child_name) { - // check to see if the metric has already been added - if (!in_array($child_name, $this->metrics)) { - - $child = $this->metricObjectsByEntityMap[$this->baseEntity->getName()][$child_name]; - $select = $child->getSelect(); - //print_r ($select[0]); - $this->db->selectColumn($select[0], $select[1]); - // needed so we can remove this temp metric later - $this->childMetrics[] = $child_name; - owa_coreAPI::debug("Added $child_name to ChildMetrics array"); - } - } - } - } - } - - function getFormat() { - - if (array_key_exists('result_format', $this->params)) { - return $this->params['result_format']; - } - } - - function getColumnName($string) { - - //$string = trim($string); - if (array_key_exists($string, $this->related_dimensions)) { - return $this->related_dimensions[$string]['column']; - } - - if (array_key_exists($string, $this->related_metrics)) { - return $string; - } - - - //return $string; - - } - - /** - * Sets a metric's column name into the all_columns map - * - * this is needed when combining metrics so that sort and - * constraint column names can be looked up fro ma single map. - */ - function addColumn($name, $col) { - - $this->all_columns[$name] = $col; - } - - function addError($msg) { - - $this->errors[] = $msg; - owa_coreAPI::debug($msg); - } - - /** - * Generates a result set for the metric - * - */ - function getResults() { - - // get paginated result set object - $rs = owa_coreAPI::supportClassFactory('base', 'paginatedResultSet'); - - $bm = $this->chooseBaseEntity(); - - if ($bm) { - - $bname = $bm->getName(); - - owa_coreAPI::debug("Using $bname as base entity for making result set."); - - // set constraints - $this->applyJoins(); - $this->applyConstraints(); - $this->applySelects(); - - $this->db->selectFrom($bm->getTableName(), $bm->getTableAlias()); - // generate aggregate results - $results = $this->db->getOneRow(); - // merge into result set - if ($results) { - $rs->aggregates = array_merge($this->applyMetaDataToSingleResultRow($results), $rs->aggregates); - } - - // setup dimensional query - if (!empty($this->dimensions)) { - $this->applyJoins(); - // apply dimensional SQL - $this->applyDimensions(); - - $this->applySelects(); - - $this->db->selectFrom($bm->getTableName(), $bm->getTableAlias()); - - // pass limit to db object if one exists - if (!empty($this->limit)) { - $rs->setLimit($this->limit); - } - // pass limit to db object if one exists - if (!empty($this->page)) { - $rs->setPage($this->page); - } - - $this->applyConstraints(); - - if (array_key_exists('orderby', $this->params)) { - $sorts = $this->params['orderby']; - // apply sort by - if ($sorts) { - foreach ($sorts as $sort) { - $this->db->orderBy($sort[0], $sort[1]); - $rs->sortColumn = $sort[0]; - if (isset($sort[1])){ - $rs->sortOrder = strtolower($sort[1]); - } else { - $rs->sortOrder = 'asc'; - } - } - } - } - - // add labels - $rs->setLabels($this->getLabels()); - - // generate dimensonal results - $results = $rs->generate($this->db); - - $rs->resultsRows = $this->applyMetaDataToResults($results); - } - - // add labels - $rs->setLabels($this->getLabels()); - - // add period info - - $rs->setPeriodInfo($this->params['period']->getAllInfo()); - - $rs = $this->computeCalculatedMetrics($rs); - - // add urls - $urls = $this->makeResultSetUrls(); - $rs->self = $urls['self']; - - if ($rs->more) { - - $rs->next = $urls['next']; - } - - if ($this->page >=2) { - $rs->previous = $urls['previous']; - } - - $rs->createResultSetHash(); - } - - $rs->errors = $this->errors; - - return $rs; - } - - function computeCalculatedMetrics($rs) { - - foreach ($this->calculatedMetrics as $cm) { - - // add aggregate metric - $formula = $cm->getFormula(); - $div_by_zero = false; - - foreach ($cm->getChildMetrics() as $metric_name) { - - $ag_value = $rs->getAggregateMetric($metric_name); - - if (empty($ag_value) || $ag_value == 0) { - $ag_value = 0; - $div_by_zero = true; - } - - $formula = str_replace($metric_name, $ag_value, $formula); - } - - if ( ! $div_by_zero ) { - $value = $this->evalFormula($formula); - } else { - $value = 0; - } - - $rs->setAggregateMetric($cm->getName(), $value, $cm->getLabel(), $cm->getDataType(), $this->formatValue($cm->getDataType(), $value)); - - // add dimensional metric - - if ($rs->getRowCount() > 0) { - - foreach ($rs->resultsRows as $k => $row) { - - // add aggregate metric - $formula = $cm->getFormula(); - $row_div_by_zero = false; - foreach ($cm->getChildMetrics() as $metric_name) { - - if (array_key_exists($metric_name, $row)) { - $row_value = $row[$metric_name]['value']; - } else { - $row_value = ''; - } - if (empty($row_value) || $row_value == 0) { - $row_value = 0; - $row_div_by_zero = true; - } - - $formula = str_replace($metric_name, $row_value, $formula); - - } - - if ( ! $row_div_by_zero ) { - $value = $this->evalFormula($formula); - } else { - $value = 0; - } - - $rs->appendRow($k, 'metric', $cm->getName(), $value, $cm->getLabel(), $cm->getDataType(), $this->formatValue($cm->getDataType(), $value)); - } - } - - foreach ($this->childMetrics as $metric_name) { - - $rs->removeMetric($metric_name); - } - - } - - return $rs; - } - - function evalFormula($formula) { - - //safety first. should only be computing numbers. - $formula = str_replace('$','', $formula); - - // need parens and @ to handle divsion by zero errors - $formula = '$value = ('.$formula.');'; - //print $formula; - // calc - @ eval($formula); - - if (!$value) { - $value = 0; - } - - return $value; - } - - function getMetric($name) { - - if (in_array($name, $this->metrics)) { - return $this->metricObjectsByEntityMap[$this->baseEntity->getName()][$name]; - } - } - - function setQueryStringParam($name, $string) { - - $this->query_params[$name] = $string; - } - - function makeResultSetUrls() { - - $urls = array(); - // get api url - $api_url = owa_coreAPI::getSetting('base', 'api_url'); - // get base query params - $query_params = $this->query_params; - // add api command - $query_params['do'] = 'getResultSet'; - //add format - if ($this->format) { - $query_params['format'] = $this->format; - } else { - $query_params['format'] = 'json'; - } - // add current page if any - if ($this->page) { - $query_params['page'] = $this->page; - } - // add limit - if ($this->limit) { - $query_params['resultsPerPage'] = $this->limit; - } - - // build url for this result set - $link_template = owa_coreAPI::getSetting('base', 'link_template'); - $q = $this->buildQueryString($query_params); - $urls['self'] = sprintf($link_template, $api_url, $q); - - // build url for next page of result set - $next_query_params = $query_params; - if ($this->page) { - $next_query_params['page'] = $query_params['page'] + 1; - } else { - $next_query_params['page'] = 2; - } - - $nq = $this->buildQueryString($next_query_params); - $urls['next'] = sprintf($link_template, $api_url, $nq); - - // build previous url if page is greater than 2 - if ($this->page >= 2) { - $previous_query_params = $query_params; - $previous_query_params['page'] = $query_params['page'] - 1; - $pq = $this->buildQueryString($previous_query_params); - $urls['previous'] = sprintf($link_template, $api_url, $pq); - } - - $base_query_params = $this->query_params; - $base_query_params['format'] = $this->format; - - // build pagination url template for use in constructing - $q = $this->buildQueryString($base_query_params); - $url['base_url'] = sprintf($link_template, $api_url, $q); - - return $urls; - } - - function buildQueryString($params, $seperator = '&') { - - $new = array(); - //get namespace - $ns = owa_coreAPI::getSetting('base', 'ns'); - foreach ($params as $k => $v) { - - $new[$ns.$k] = $v; - } - - return http_build_query($new,'', $seperator); - } - -} - -?> --- a/owa/modules/base/classes/sanitize.php +++ /dev/null @@ -1,318 +1,1 @@ - - * @copyright Copyright © 2006-2010 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.3.0 - */ - -class owa_sanitize { - - /** - * Remove Non alpha or numeric characters - * - * @param string|array $input String or array contain input to sanitize. - * @param array $exceptions An array of additional characters that should be allowed. - * @return string|array $sanitzed A Santized string or array - */ - public static function removeNonAlphaNumeric($input, $exceptions = array()) { - - $allow = ''; - - // add exceptions to allowed char part of regex - if ( !empty( $exceptions ) ) { - foreach ( $exceptions as $value ) { - $allowed_chars .= "\\$value"; - } - } - - $regex = "/[^{$allowed_chars}a-zA-Z0-9]/"; - - // check to see if string is an array - if ( is_array ( $input ) ) { - $sanitized = array(); - foreach ( $input as $key => $item ) { - $sanitized[$key] = preg_replace( $regex, '', $item ); - } - // assume input is a singel string - } else { - $sanitized = preg_replace( $regex, '', $input ); - } - - return $sanitized; - } - - /** - * Escapes a string for use in display output - * - * @param string $string The string to be escaped - * @param string $encoding The charset to use in encoding. - * @param string $quotes The php constant for encodig quotations used by htmlentities - * @return string html encoded string - * @link http://www.php.net/manual/en/function.htmlentities.php - * @access public - */ - public static function escapeForDisplay($string, $encoding = 'UTF-8', $quotes = '') { - - if (!$quotes) { - //use mode to ocnvert both single and double quotes. - $quotes = ENT_QUOTES; - } - - return htmlentities($string, $quotes, $encoding); - } - - - /** - * Strip Whitespace - * - * @param string $str String to strip - * @return string whitespace sanitized input - * @access public - */ - public static function stripWhitespace( $input ) { - - $output = preg_replace( '/[\n\r\t]+/', '', $input ); - return preg_replace( '/\s{2,}/', ' ', $output ); - } - - /** - * Strip IMG html tags - * - * @param string $input String to sanitize - * @return string String with no img tags - * @access public - */ - public static function stripImages( $input ) { - - $output = preg_replace('/(]*>)(]+alt=")([^"]*)("[^>]*>)(<\/a>)/i', '$1$3$5
    ', $input); - $output = preg_replace('/(]+alt=")([^"]*)("[^>]*>)/i', '$2
    ', $output); - $output = preg_replace('/]*>/i', '', $output); - return $output; - } - - /** - * Strip Scripts and Stylesheets - * - * @param string $input String to sanitize - * @return string String with - - - -

    Flot Examples

    -
    - -

    Example of loading data dynamically with AJAX. Percentage change in GDP (source: Eurostat). Click the buttons below.

    - -

    The data is fetched over HTTP, in this case directly from text - files. Usually the URL would point to some web server handler - (e.g. a PHP page or Java/.NET/Python/Ruby on Rails handler) that - extracts it from a database and serializes it to JSON.

    - -

    - - - data - - -

    - -

    - - - data - - -

    - -

    - - - data - - -

    - -

    If you combine AJAX with setTimeout, you can poll the server - for new data.

    - -

    - -

    - - - - - - --- a/owa/modules/base/js/includes/jquery/flot/examples/annotating.html +++ /dev/null @@ -1,76 +1,1 @@ - - - - - Flot Examples - - - - - - -

    Flot Examples

    -
    - -

    Flot has support for simple background decorations such as - lines and rectangles. They can be useful for marking up certain - areas. You can easily add any HTML you need with standard DOM - manipulation, e.g. for labels. For drawing custom shapes there is - also direct access to the canvas.

    - - - - - - --- a/owa/modules/base/js/includes/jquery/flot/examples/basic.html +++ /dev/null @@ -1,39 +1,1 @@ - - - - - Flot Examples - - - - - - -

    Flot Examples

    -
    - -

    Simple example. You don't need to specify much to get an - attractive look. Put in a placeholder, make sure you set its - dimensions (otherwise the plot library will barf) and call the - plot function with the data. The axes are automatically - scaled.

    - - - - - - --- a/owa/modules/base/js/includes/jquery/flot/examples/data-eu-gdp-growth-1.json +++ /dev/null @@ -1,5 +1,1 @@ -{ - label: 'Europe (EU27)', - data: [[1999, 3.0], [2000, 3.9]] -} --- a/owa/modules/base/js/includes/jquery/flot/examples/data-eu-gdp-growth-2.json +++ /dev/null @@ -1,5 +1,1 @@ -{ - label: 'Europe (EU27)', - data: [[1999, 3.0], [2000, 3.9], [2001, 2.0], [2002, 1.2]] -} --- a/owa/modules/base/js/includes/jquery/flot/examples/data-eu-gdp-growth-3.json +++ /dev/null @@ -1,5 +1,1 @@ -{ - label: 'Europe (EU27)', - data: [[1999, 3.0], [2000, 3.9], [2001, 2.0], [2002, 1.2], [2003, 1.3], [2004, 2.5]] -} --- a/owa/modules/base/js/includes/jquery/flot/examples/data-eu-gdp-growth-4.json +++ /dev/null @@ -1,5 +1,1 @@ -{ - label: 'Europe (EU27)', - data: [[1999, 3.0], [2000, 3.9], [2001, 2.0], [2002, 1.2], [2003, 1.3], [2004, 2.5], [2005, 2.0], [2006, 3.1]] -} --- a/owa/modules/base/js/includes/jquery/flot/examples/data-eu-gdp-growth-5.json +++ /dev/null @@ -1,5 +1,1 @@ -{ - label: 'Europe (EU27)', - data: [[1999, 3.0], [2000, 3.9], [2001, 2.0], [2002, 1.2], [2003, 1.3], [2004, 2.5], [2005, 2.0], [2006, 3.1], [2007, 2.9], [2008, 0.9]] -} --- a/owa/modules/base/js/includes/jquery/flot/examples/data-eu-gdp-growth.json +++ /dev/null @@ -1,5 +1,1 @@ -{ - label: 'Europe (EU27)', - data: [[1999, 3.0], [2000, 3.9], [2001, 2.0], [2002, 1.2], [2003, 1.3], [2004, 2.5], [2005, 2.0], [2006, 3.1], [2007, 2.9], [2008, 0.9]] -} --- a/owa/modules/base/js/includes/jquery/flot/examples/data-japan-gdp-growth.json +++ /dev/null @@ -1,5 +1,1 @@ -{ - label: 'Japan', - data: [[1999, -0.1], [2000, 2.9], [2001, 0.2], [2002, 0.3], [2003, 1.4], [2004, 2.7], [2005, 1.9], [2006, 2.0], [2007, 2.3], [2008, -0.7]] -} --- a/owa/modules/base/js/includes/jquery/flot/examples/data-usa-gdp-growth.json +++ /dev/null @@ -1,5 +1,1 @@ -{ - label: 'USA', - data: [[1999, 4.4], [2000, 3.7], [2001, 0.8], [2002, 1.6], [2003, 2.5], [2004, 3.6], [2005, 2.9], [2006, 2.8], [2007, 2.0], [2008, 1.1]] -} --- a/owa/modules/base/js/includes/jquery/flot/examples/dual-axis.html +++ /dev/null @@ -1,40 +1,1 @@ - - - - - Flot Examples - - - - - - -

    Flot Examples

    -
    - -

    Dual axis support showing the raw oil price in US $/barrel of - crude oil (left axis) vs. the exchange rate from US $ to € (right - axis).

    - -

    As illustrated, you can put in secondary y and x axes if you - need to. For each data series, simply specify the axis number.

    - - - - - --- a/owa/modules/base/js/includes/jquery/flot/examples/graph-types.html +++ /dev/null @@ -1,76 +1,1 @@ - - - - - Flot Examples - - - - - - -

    Flot Examples

    -
    - -

    Flot supports lines, points, filled areas, bars and any - combinations of these, in the same plot and even on the same data - series.

    - - - - - - --- a/owa/modules/base/js/includes/jquery/flot/examples/image.html +++ /dev/null @@ -1,46 +1,1 @@ - - - - - Flot Examples - - - - - - - -

    Flot Examples

    -
    - -

    The Cat's Eye Nebula (picture from Hubble).

    - -

    With the image plugin, you can plot images. This is for example - useful for getting ticks on complex prerendered visualizations. - Instead of inputting data points, you put in the images and where - their two opposite corners are supposed to be in plot space.

    - -

    Images represent a little further complication because you need - to make sure they are loaded before you can use them (Flot skips - incomplete images). The plugin comes with a couple of helpers - for doing that.

    - - - - - - --- a/owa/modules/base/js/includes/jquery/flot/examples/index.html +++ /dev/null @@ -1,44 +1,1 @@ - - - - - Flot Examples - - - - - - -

    Flot Examples

    -

    Here are some examples for Flot, the Javascript charting library for jQuery:

    - - - -

    Being interactive:

    - - - -

    Some more esoteric features:

    - - - - - --- a/owa/modules/base/js/includes/jquery/flot/examples/interacting.html +++ /dev/null @@ -1,94 +1,1 @@ - - - - - Flot Examples - - - - - - -

    Flot Examples

    -
    - -

    One of the goals of Flot is to support user interactions. Try - pointing and clicking on the points.

    - -

    Mouse hovers at - (0, 0).

    - -

    A tooltip is easy to build with a bit of jQuery code and the - data returned from the plot.

    - -

    Enable tooltip

    - - - - - - --- a/owa/modules/base/js/includes/jquery/flot/examples/layout.css +++ /dev/null @@ -1,7 +1,1 @@ -body { - font-family: sans-serif; - font-size: 16px; - margin: 50px; - max-width: 800px; -} --- a/owa/modules/base/js/includes/jquery/flot/examples/navigate.html +++ /dev/null @@ -1,119 +1,1 @@ - - - - - Flot Examples - - - - - - - - -

    Flot Examples

    -
    - -

    - -

    With the navigate plugin it is easy to add panning and zooming. - Drag to pan, double click to zoom (or use the mouse scrollwheel).

    - -

    The plugin fires events (useful for synchronizing several - plots) and adds a couple of public methods so you can easily build - a little user interface around it, like the little buttons at the - top right in the plot.

    - - - - - - - --- a/owa/modules/base/js/includes/jquery/flot/examples/selection.html +++ /dev/null @@ -1,115 +1,1 @@ - - - - - Flot Examples - - - - - - - -

    Flot Examples

    -
    - -

    1000 kg. CO2 emissions per year per capita for various countries (source: Wikipedia).

    - -

    Flot supports selections through the selection plugin. - You can enable rectangular selection - or one-dimensional selection if the user should only be able to - select on one axis. Try left-click and drag on the plot above - where selection on the x axis is enabled.

    - -

    You selected:

    - -

    The plot command returns a plot object you can use to control - the selection. Click the buttons below.

    - -

    -

    - -

    Selections are really useful for zooming. Just replot the - chart with min and max values for the axes set to the values - in the "plotselected" event triggered. Enable the checkbox - below and select a region again.

    - -

    Zoom to selection.

    - - - - - - --- a/owa/modules/base/js/includes/jquery/flot/examples/setting-options.html +++ /dev/null @@ -1,66 +1,1 @@ - - - - - Flot Examples - - - - - - -

    Flot Examples

    -
    - -

    There are plenty of options you can set to control the precise - looks of your plot. You can control the axes, the legend, the - default graph type, the look of grid, etc.

    - -

    The idea is that Flot goes to great lengths to provide sensible - defaults which you can then customize as needed for your - particular application. If you've found a use case where the - defaults can be improved, please don't hesitate to give your - feedback.

    - - - - - - --- a/owa/modules/base/js/includes/jquery/flot/examples/stacking.html +++ /dev/null @@ -1,78 +1,1 @@ - - - - - Flot Examples - - - - - - - -

    Flot Examples

    -
    - -

    With the stack plugin, you can have Flot stack the - series. This is useful if you wish to display both a total and the - constituents it is made of. The only requirement is that you provide - the input sorted on x.

    - -

    - - -

    - -

    - - - -

    - - - - - - --- a/owa/modules/base/js/includes/jquery/flot/examples/thresholding.html +++ /dev/null @@ -1,55 +1,1 @@ - - - - - Flot Examples - - - - - - - -

    Flot Examples

    -
    - -

    With the threshold plugin, you can apply a specific color to - the part of a data series below a threshold. This is can be useful - for highlighting negative values, e.g. when displaying net results - or what's in stock.

    - -

    - - - -

    - - - - - - --- a/owa/modules/base/js/includes/jquery/flot/examples/time.html +++ /dev/null @@ -1,72 +1,1 @@ - - - - - Flot Examples - - - - - - -

    Flot Examples

    -
    - -

    Monthly mean atmospheric CO2 in PPM at Mauna Loa, Hawaii (source: NOAA/ESRL).

    - -

    If you tell Flot that an axis represents time, the data will - be interpreted as timestamps and the ticks adjusted and - formatted accordingly.

    - -

    Zoom to: - -

    - -

    The timestamps must be specified as Javascript timestamps, as - milliseconds since January 1, 1970 00:00. This is like Unix - timestamps, but in milliseconds instead of seconds (remember to - multiply with 1000!).

    - -

    As an extra caveat, the timestamps are interpreted according to - UTC to avoid having the graph shift with each visitor's local - time zone. So you might have to add your local time zone offset - to the timestamps or simply pretend that the data was produced - in UTC instead of your local time zone.

    - - - - - - --- a/owa/modules/base/js/includes/jquery/flot/examples/tracking.html +++ /dev/null @@ -1,96 +1,1 @@ - - - - - Flot Examples - - - - - - - -

    Flot Examples

    -
    - -

    You can add crosshairs that'll track the mouse position, either - on both axes or as here on only one.

    - -

    If you combine it with listening on hover events, you can use - it to track the intersection on the curves by interpolating - the data points (look at the legend).

    - -

    - - - - - - --- a/owa/modules/base/js/includes/jquery/flot/examples/turning-series.html +++ /dev/null @@ -1,99 +1,1 @@ - - - - - Flot Examples - - - - - - -

    Flot Examples

    -
    - -

    Here is an example with real data: military budgets for - various countries in constant (2005) million US dollars (source: SIPRI).

    - -

    Since all data is available client-side, it's pretty easy to - make the plot interactive. Try turning countries on/off with the - checkboxes below.

    - -

    Show:

    - - - - - - --- a/owa/modules/base/js/includes/jquery/flot/examples/visitors.html +++ /dev/null @@ -1,91 +1,1 @@ - - - - - Flot Examples - - - - - - - -

    Flot Examples

    -
    - -

    Visitors per day to the Flot homepage. Weekends are colored. Try zooming. - The plot below shows an overview.

    - -
    - - - - - - --- a/owa/modules/base/js/includes/jquery/flot/examples/zooming.html +++ /dev/null @@ -1,99 +1,1 @@ - - - - - Flot Examples - - - - - - - -

    Flot Examples

    -
    -
    -
    - -
    -
    - -

    -
    - -

    The selection support makes - pretty advanced zooming schemes possible. With a few lines of code, - the small overview plot to the right has been connected to the large - plot. Try selecting a rectangle on either of them.

    - - - - - - --- a/owa/modules/base/js/includes/jquery/flot/excanvas.js +++ /dev/null @@ -1,1428 +1,1 @@ -// Copyright 2006 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// Known Issues: -// -// * Patterns only support repeat. -// * Radial gradient are not implemented. The VML version of these look very -// different from the canvas one. -// * Clipping paths are not implemented. -// * Coordsize. The width and height attribute have higher priority than the -// width and height style values which isn't correct. -// * Painting mode isn't implemented. -// * Canvas width/height should is using content-box by default. IE in -// Quirks mode will draw the canvas using border-box. Either change your -// doctype to HTML5 -// (http://www.whatwg.org/specs/web-apps/current-work/#the-doctype) -// or use Box Sizing Behavior from WebFX -// (http://webfx.eae.net/dhtml/boxsizing/boxsizing.html) -// * Non uniform scaling does not correctly scale strokes. -// * Filling very large shapes (above 5000 points) is buggy. -// * Optimize. There is always room for speed improvements. - -// Only add this code if we do not already have a canvas implementation -if (!document.createElement('canvas').getContext) { - -(function() { - - // alias some functions to make (compiled) code shorter - var m = Math; - var mr = m.round; - var ms = m.sin; - var mc = m.cos; - var abs = m.abs; - var sqrt = m.sqrt; - - // this is used for sub pixel precision - var Z = 10; - var Z2 = Z / 2; - - /** - * This funtion is assigned to the elements as element.getContext(). - * @this {HTMLElement} - * @return {CanvasRenderingContext2D_} - */ - function getContext() { - return this.context_ || - (this.context_ = new CanvasRenderingContext2D_(this)); - } - - var slice = Array.prototype.slice; - - /** - * Binds a function to an object. The returned function will always use the - * passed in {@code obj} as {@code this}. - * - * Example: - * - * g = bind(f, obj, a, b) - * g(c, d) // will do f.call(obj, a, b, c, d) - * - * @param {Function} f The function to bind the object to - * @param {Object} obj The object that should act as this when the function - * is called - * @param {*} var_args Rest arguments that will be used as the initial - * arguments when the function is called - * @return {Function} A new function that has bound this - */ - function bind(f, obj, var_args) { - var a = slice.call(arguments, 2); - return function() { - return f.apply(obj, a.concat(slice.call(arguments))); - }; - } - - function encodeHtmlAttribute(s) { - return String(s).replace(/&/g, '&').replace(/"/g, '"'); - } - - function addNamespacesAndStylesheet(doc) { - // create xmlns - if (!doc.namespaces['g_vml_']) { - doc.namespaces.add('g_vml_', 'urn:schemas-microsoft-com:vml', - '#default#VML'); - - } - if (!doc.namespaces['g_o_']) { - doc.namespaces.add('g_o_', 'urn:schemas-microsoft-com:office:office', - '#default#VML'); - } - - // Setup default CSS. Only add one style sheet per document - if (!doc.styleSheets['ex_canvas_']) { - var ss = doc.createStyleSheet(); - ss.owningElement.id = 'ex_canvas_'; - ss.cssText = 'canvas{display:inline-block;overflow:hidden;' + - // default size is 300x150 in Gecko and Opera - 'text-align:left;width:300px;height:150px}'; - } - } - - // Add namespaces and stylesheet at startup. - addNamespacesAndStylesheet(document); - - var G_vmlCanvasManager_ = { - init: function(opt_doc) { - if (/MSIE/.test(navigator.userAgent) && !window.opera) { - var doc = opt_doc || document; - // Create a dummy element so that IE will allow canvas elements to be - // recognized. - doc.createElement('canvas'); - doc.attachEvent('onreadystatechange', bind(this.init_, this, doc)); - } - }, - - init_: function(doc) { - // find all canvas elements - var els = doc.getElementsByTagName('canvas'); - for (var i = 0; i < els.length; i++) { - this.initElement(els[i]); - } - }, - - /** - * Public initializes a canvas element so that it can be used as canvas - * element from now on. This is called automatically before the page is - * loaded but if you are creating elements using createElement you need to - * make sure this is called on the element. - * @param {HTMLElement} el The canvas element to initialize. - * @return {HTMLElement} the element that was created. - */ - initElement: function(el) { - if (!el.getContext) { - el.getContext = getContext; - - // Add namespaces and stylesheet to document of the element. - addNamespacesAndStylesheet(el.ownerDocument); - - // Remove fallback content. There is no way to hide text nodes so we - // just remove all childNodes. We could hide all elements and remove - // text nodes but who really cares about the fallback content. - el.innerHTML = ''; - - // do not use inline function because that will leak memory - el.attachEvent('onpropertychange', onPropertyChange); - el.attachEvent('onresize', onResize); - - var attrs = el.attributes; - if (attrs.width && attrs.width.specified) { - // TODO: use runtimeStyle and coordsize - // el.getContext().setWidth_(attrs.width.nodeValue); - el.style.width = attrs.width.nodeValue + 'px'; - } else { - el.width = el.clientWidth; - } - if (attrs.height && attrs.height.specified) { - // TODO: use runtimeStyle and coordsize - // el.getContext().setHeight_(attrs.height.nodeValue); - el.style.height = attrs.height.nodeValue + 'px'; - } else { - el.height = el.clientHeight; - } - //el.getContext().setCoordsize_() - } - return el; - } - }; - - function onPropertyChange(e) { - var el = e.srcElement; - - switch (e.propertyName) { - case 'width': - el.getContext().clearRect(); - el.style.width = el.attributes.width.nodeValue + 'px'; - // In IE8 this does not trigger onresize. - el.firstChild.style.width = el.clientWidth + 'px'; - break; - case 'height': - el.getContext().clearRect(); - el.style.height = el.attributes.height.nodeValue + 'px'; - el.firstChild.style.height = el.clientHeight + 'px'; - break; - } - } - - function onResize(e) { - var el = e.srcElement; - if (el.firstChild) { - el.firstChild.style.width = el.clientWidth + 'px'; - el.firstChild.style.height = el.clientHeight + 'px'; - } - } - - G_vmlCanvasManager_.init(); - - // precompute "00" to "FF" - var decToHex = []; - for (var i = 0; i < 16; i++) { - for (var j = 0; j < 16; j++) { - decToHex[i * 16 + j] = i.toString(16) + j.toString(16); - } - } - - function createMatrixIdentity() { - return [ - [1, 0, 0], - [0, 1, 0], - [0, 0, 1] - ]; - } - - function matrixMultiply(m1, m2) { - var result = createMatrixIdentity(); - - for (var x = 0; x < 3; x++) { - for (var y = 0; y < 3; y++) { - var sum = 0; - - for (var z = 0; z < 3; z++) { - sum += m1[x][z] * m2[z][y]; - } - - result[x][y] = sum; - } - } - return result; - } - - function copyState(o1, o2) { - o2.fillStyle = o1.fillStyle; - o2.lineCap = o1.lineCap; - o2.lineJoin = o1.lineJoin; - o2.lineWidth = o1.lineWidth; - o2.miterLimit = o1.miterLimit; - o2.shadowBlur = o1.shadowBlur; - o2.shadowColor = o1.shadowColor; - o2.shadowOffsetX = o1.shadowOffsetX; - o2.shadowOffsetY = o1.shadowOffsetY; - o2.strokeStyle = o1.strokeStyle; - o2.globalAlpha = o1.globalAlpha; - o2.font = o1.font; - o2.textAlign = o1.textAlign; - o2.textBaseline = o1.textBaseline; - o2.arcScaleX_ = o1.arcScaleX_; - o2.arcScaleY_ = o1.arcScaleY_; - o2.lineScale_ = o1.lineScale_; - } - - var colorData = { - aliceblue: '#F0F8FF', - antiquewhite: '#FAEBD7', - aquamarine: '#7FFFD4', - azure: '#F0FFFF', - beige: '#F5F5DC', - bisque: '#FFE4C4', - black: '#000000', - blanchedalmond: '#FFEBCD', - blueviolet: '#8A2BE2', - brown: '#A52A2A', - burlywood: '#DEB887', - cadetblue: '#5F9EA0', - chartreuse: '#7FFF00', - chocolate: '#D2691E', - coral: '#FF7F50', - cornflowerblue: '#6495ED', - cornsilk: '#FFF8DC', - crimson: '#DC143C', - cyan: '#00FFFF', - darkblue: '#00008B', - darkcyan: '#008B8B', - darkgoldenrod: '#B8860B', - darkgray: '#A9A9A9', - darkgreen: '#006400', - darkgrey: '#A9A9A9', - darkkhaki: '#BDB76B', - darkmagenta: '#8B008B', - darkolivegreen: '#556B2F', - darkorange: '#FF8C00', - darkorchid: '#9932CC', - darkred: '#8B0000', - darksalmon: '#E9967A', - darkseagreen: '#8FBC8F', - darkslateblue: '#483D8B', - darkslategray: '#2F4F4F', - darkslategrey: '#2F4F4F', - darkturquoise: '#00CED1', - darkviolet: '#9400D3', - deeppink: '#FF1493', - deepskyblue: '#00BFFF', - dimgray: '#696969', - dimgrey: '#696969', - dodgerblue: '#1E90FF', - firebrick: '#B22222', - floralwhite: '#FFFAF0', - forestgreen: '#228B22', - gainsboro: '#DCDCDC', - ghostwhite: '#F8F8FF', - gold: '#FFD700', - goldenrod: '#DAA520', - grey: '#808080', - greenyellow: '#ADFF2F', - honeydew: '#F0FFF0', - hotpink: '#FF69B4', - indianred: '#CD5C5C', - indigo: '#4B0082', - ivory: '#FFFFF0', - khaki: '#F0E68C', - lavender: '#E6E6FA', - lavenderblush: '#FFF0F5', - lawngreen: '#7CFC00', - lemonchiffon: '#FFFACD', - lightblue: '#ADD8E6', - lightcoral: '#F08080', - lightcyan: '#E0FFFF', - lightgoldenrodyellow: '#FAFAD2', - lightgreen: '#90EE90', - lightgrey: '#D3D3D3', - lightpink: '#FFB6C1', - lightsalmon: '#FFA07A', - lightseagreen: '#20B2AA', - lightskyblue: '#87CEFA', - lightslategray: '#778899', - lightslategrey: '#778899', - lightsteelblue: '#B0C4DE', - lightyellow: '#FFFFE0', - limegreen: '#32CD32', - linen: '#FAF0E6', - magenta: '#FF00FF', - mediumaquamarine: '#66CDAA', - mediumblue: '#0000CD', - mediumorchid: '#BA55D3', - mediumpurple: '#9370DB', - mediumseagreen: '#3CB371', - mediumslateblue: '#7B68EE', - mediumspringgreen: '#00FA9A', - mediumturquoise: '#48D1CC', - mediumvioletred: '#C71585', - midnightblue: '#191970', - mintcream: '#F5FFFA', - mistyrose: '#FFE4E1', - moccasin: '#FFE4B5', - navajowhite: '#FFDEAD', - oldlace: '#FDF5E6', - olivedrab: '#6B8E23', - orange: '#FFA500', - orangered: '#FF4500', - orchid: '#DA70D6', - palegoldenrod: '#EEE8AA', - palegreen: '#98FB98', - paleturquoise: '#AFEEEE', - palevioletred: '#DB7093', - papayawhip: '#FFEFD5', - peachpuff: '#FFDAB9', - peru: '#CD853F', - pink: '#FFC0CB', - plum: '#DDA0DD', - powderblue: '#B0E0E6', - rosybrown: '#BC8F8F', - royalblue: '#4169E1', - saddlebrown: '#8B4513', - salmon: '#FA8072', - sandybrown: '#F4A460', - seagreen: '#2E8B57', - seashell: '#FFF5EE', - sienna: '#A0522D', - skyblue: '#87CEEB', - slateblue: '#6A5ACD', - slategray: '#708090', - slategrey: '#708090', - snow: '#FFFAFA', - springgreen: '#00FF7F', - steelblue: '#4682B4', - tan: '#D2B48C', - thistle: '#D8BFD8', - tomato: '#FF6347', - turquoise: '#40E0D0', - violet: '#EE82EE', - wheat: '#F5DEB3', - whitesmoke: '#F5F5F5', - yellowgreen: '#9ACD32' - }; - - - function getRgbHslContent(styleString) { - var start = styleString.indexOf('(', 3); - var end = styleString.indexOf(')', start + 1); - var parts = styleString.substring(start + 1, end).split(','); - // add alpha if needed - if (parts.length == 4 && styleString.substr(3, 1) == 'a') { - alpha = Number(parts[3]); - } else { - parts[3] = 1; - } - return parts; - } - - function percent(s) { - return parseFloat(s) / 100; - } - - function clamp(v, min, max) { - return Math.min(max, Math.max(min, v)); - } - - function hslToRgb(parts){ - var r, g, b; - h = parseFloat(parts[0]) / 360 % 360; - if (h < 0) - h++; - s = clamp(percent(parts[1]), 0, 1); - l = clamp(percent(parts[2]), 0, 1); - if (s == 0) { - r = g = b = l; // achromatic - } else { - var q = l < 0.5 ? l * (1 + s) : l + s - l * s; - var p = 2 * l - q; - r = hueToRgb(p, q, h + 1 / 3); - g = hueToRgb(p, q, h); - b = hueToRgb(p, q, h - 1 / 3); - } - - return '#' + decToHex[Math.floor(r * 255)] + - decToHex[Math.floor(g * 255)] + - decToHex[Math.floor(b * 255)]; - } - - function hueToRgb(m1, m2, h) { - if (h < 0) - h++; - if (h > 1) - h--; - - if (6 * h < 1) - return m1 + (m2 - m1) * 6 * h; - else if (2 * h < 1) - return m2; - else if (3 * h < 2) - return m1 + (m2 - m1) * (2 / 3 - h) * 6; - else - return m1; - } - - function processStyle(styleString) { - var str, alpha = 1; - - styleString = String(styleString); - if (styleString.charAt(0) == '#') { - str = styleString; - } else if (/^rgb/.test(styleString)) { - var parts = getRgbHslContent(styleString); - var str = '#', n; - for (var i = 0; i < 3; i++) { - if (parts[i].indexOf('%') != -1) { - n = Math.floor(percent(parts[i]) * 255); - } else { - n = Number(parts[i]); - } - str += decToHex[clamp(n, 0, 255)]; - } - alpha = parts[3]; - } else if (/^hsl/.test(styleString)) { - var parts = getRgbHslContent(styleString); - str = hslToRgb(parts); - alpha = parts[3]; - } else { - str = colorData[styleString] || styleString; - } - return {color: str, alpha: alpha}; - } - - var DEFAULT_STYLE = { - style: 'normal', - variant: 'normal', - weight: 'normal', - size: 10, - family: 'sans-serif' - }; - - // Internal text style cache - var fontStyleCache = {}; - - function processFontStyle(styleString) { - if (fontStyleCache[styleString]) { - return fontStyleCache[styleString]; - } - - var el = document.createElement('div'); - var style = el.style; - try { - style.font = styleString; - } catch (ex) { - // Ignore failures to set to invalid font. - } - - return fontStyleCache[styleString] = { - style: style.fontStyle || DEFAULT_STYLE.style, - variant: style.fontVariant || DEFAULT_STYLE.variant, - weight: style.fontWeight || DEFAULT_STYLE.weight, - size: style.fontSize || DEFAULT_STYLE.size, - family: style.fontFamily || DEFAULT_STYLE.family - }; - } - - function getComputedStyle(style, element) { - var computedStyle = {}; - - for (var p in style) { - computedStyle[p] = style[p]; - } - - // Compute the size - var canvasFontSize = parseFloat(element.currentStyle.fontSize), - fontSize = parseFloat(style.size); - - if (typeof style.size == 'number') { - computedStyle.size = style.size; - } else if (style.size.indexOf('px') != -1) { - computedStyle.size = fontSize; - } else if (style.size.indexOf('em') != -1) { - computedStyle.size = canvasFontSize * fontSize; - } else if(style.size.indexOf('%') != -1) { - computedStyle.size = (canvasFontSize / 100) * fontSize; - } else if (style.size.indexOf('pt') != -1) { - computedStyle.size = fontSize / .75; - } else { - computedStyle.size = canvasFontSize; - } - - // Different scaling between normal text and VML text. This was found using - // trial and error to get the same size as non VML text. - computedStyle.size *= 0.981; - - return computedStyle; - } - - function buildStyle(style) { - return style.style + ' ' + style.variant + ' ' + style.weight + ' ' + - style.size + 'px ' + style.family; - } - - function processLineCap(lineCap) { - switch (lineCap) { - case 'butt': - return 'flat'; - case 'round': - return 'round'; - case 'square': - default: - return 'square'; - } - } - - /** - * This class implements CanvasRenderingContext2D interface as described by - * the WHATWG. - * @param {HTMLElement} surfaceElement The element that the 2D context should - * be associated with - */ - function CanvasRenderingContext2D_(surfaceElement) { - this.m_ = createMatrixIdentity(); - - this.mStack_ = []; - this.aStack_ = []; - this.currentPath_ = []; - - // Canvas context properties - this.strokeStyle = '#000'; - this.fillStyle = '#000'; - - this.lineWidth = 1; - this.lineJoin = 'miter'; - this.lineCap = 'butt'; - this.miterLimit = Z * 1; - this.globalAlpha = 1; - this.font = '10px sans-serif'; - this.textAlign = 'left'; - this.textBaseline = 'alphabetic'; - this.canvas = surfaceElement; - - var el = surfaceElement.ownerDocument.createElement('div'); - el.style.width = surfaceElement.clientWidth + 'px'; - el.style.height = surfaceElement.clientHeight + 'px'; - el.style.overflow = 'hidden'; - el.style.position = 'absolute'; - surfaceElement.appendChild(el); - - this.element_ = el; - this.arcScaleX_ = 1; - this.arcScaleY_ = 1; - this.lineScale_ = 1; - } - - var contextPrototype = CanvasRenderingContext2D_.prototype; - contextPrototype.clearRect = function() { - if (this.textMeasureEl_) { - this.textMeasureEl_.removeNode(true); - this.textMeasureEl_ = null; - } - this.element_.innerHTML = ''; - }; - - contextPrototype.beginPath = function() { - // TODO: Branch current matrix so that save/restore has no effect - // as per safari docs. - this.currentPath_ = []; - }; - - contextPrototype.moveTo = function(aX, aY) { - var p = this.getCoords_(aX, aY); - this.currentPath_.push({type: 'moveTo', x: p.x, y: p.y}); - this.currentX_ = p.x; - this.currentY_ = p.y; - }; - - contextPrototype.lineTo = function(aX, aY) { - var p = this.getCoords_(aX, aY); - this.currentPath_.push({type: 'lineTo', x: p.x, y: p.y}); - - this.currentX_ = p.x; - this.currentY_ = p.y; - }; - - contextPrototype.bezierCurveTo = function(aCP1x, aCP1y, - aCP2x, aCP2y, - aX, aY) { - var p = this.getCoords_(aX, aY); - var cp1 = this.getCoords_(aCP1x, aCP1y); - var cp2 = this.getCoords_(aCP2x, aCP2y); - bezierCurveTo(this, cp1, cp2, p); - }; - - // Helper function that takes the already fixed cordinates. - function bezierCurveTo(self, cp1, cp2, p) { - self.currentPath_.push({ - type: 'bezierCurveTo', - cp1x: cp1.x, - cp1y: cp1.y, - cp2x: cp2.x, - cp2y: cp2.y, - x: p.x, - y: p.y - }); - self.currentX_ = p.x; - self.currentY_ = p.y; - } - - contextPrototype.quadraticCurveTo = function(aCPx, aCPy, aX, aY) { - // the following is lifted almost directly from - // http://developer.mozilla.org/en/docs/Canvas_tutorial:Drawing_shapes - - var cp = this.getCoords_(aCPx, aCPy); - var p = this.getCoords_(aX, aY); - - var cp1 = { - x: this.currentX_ + 2.0 / 3.0 * (cp.x - this.currentX_), - y: this.currentY_ + 2.0 / 3.0 * (cp.y - this.currentY_) - }; - var cp2 = { - x: cp1.x + (p.x - this.currentX_) / 3.0, - y: cp1.y + (p.y - this.currentY_) / 3.0 - }; - - bezierCurveTo(this, cp1, cp2, p); - }; - - contextPrototype.arc = function(aX, aY, aRadius, - aStartAngle, aEndAngle, aClockwise) { - aRadius *= Z; - var arcType = aClockwise ? 'at' : 'wa'; - - var xStart = aX + mc(aStartAngle) * aRadius - Z2; - var yStart = aY + ms(aStartAngle) * aRadius - Z2; - - var xEnd = aX + mc(aEndAngle) * aRadius - Z2; - var yEnd = aY + ms(aEndAngle) * aRadius - Z2; - - // IE won't render arches drawn counter clockwise if xStart == xEnd. - if (xStart == xEnd && !aClockwise) { - xStart += 0.125; // Offset xStart by 1/80 of a pixel. Use something - // that can be represented in binary - } - - var p = this.getCoords_(aX, aY); - var pStart = this.getCoords_(xStart, yStart); - var pEnd = this.getCoords_(xEnd, yEnd); - - this.currentPath_.push({type: arcType, - x: p.x, - y: p.y, - radius: aRadius, - xStart: pStart.x, - yStart: pStart.y, - xEnd: pEnd.x, - yEnd: pEnd.y}); - - }; - - contextPrototype.rect = function(aX, aY, aWidth, aHeight) { - this.moveTo(aX, aY); - this.lineTo(aX + aWidth, aY); - this.lineTo(aX + aWidth, aY + aHeight); - this.lineTo(aX, aY + aHeight); - this.closePath(); - }; - - contextPrototype.strokeRect = function(aX, aY, aWidth, aHeight) { - var oldPath = this.currentPath_; - this.beginPath(); - - this.moveTo(aX, aY); - this.lineTo(aX + aWidth, aY); - this.lineTo(aX + aWidth, aY + aHeight); - this.lineTo(aX, aY + aHeight); - this.closePath(); - this.stroke(); - - this.currentPath_ = oldPath; - }; - - contextPrototype.fillRect = function(aX, aY, aWidth, aHeight) { - var oldPath = this.currentPath_; - this.beginPath(); - - this.moveTo(aX, aY); - this.lineTo(aX + aWidth, aY); - this.lineTo(aX + aWidth, aY + aHeight); - this.lineTo(aX, aY + aHeight); - this.closePath(); - this.fill(); - - this.currentPath_ = oldPath; - }; - - contextPrototype.createLinearGradient = function(aX0, aY0, aX1, aY1) { - var gradient = new CanvasGradient_('gradient'); - gradient.x0_ = aX0; - gradient.y0_ = aY0; - gradient.x1_ = aX1; - gradient.y1_ = aY1; - return gradient; - }; - - contextPrototype.createRadialGradient = function(aX0, aY0, aR0, - aX1, aY1, aR1) { - var gradient = new CanvasGradient_('gradientradial'); - gradient.x0_ = aX0; - gradient.y0_ = aY0; - gradient.r0_ = aR0; - gradient.x1_ = aX1; - gradient.y1_ = aY1; - gradient.r1_ = aR1; - return gradient; - }; - - contextPrototype.drawImage = function(image, var_args) { - var dx, dy, dw, dh, sx, sy, sw, sh; - - // to find the original width we overide the width and height - var oldRuntimeWidth = image.runtimeStyle.width; - var oldRuntimeHeight = image.runtimeStyle.height; - image.runtimeStyle.width = 'auto'; - image.runtimeStyle.height = 'auto'; - - // get the original size - var w = image.width; - var h = image.height; - - // and remove overides - image.runtimeStyle.width = oldRuntimeWidth; - image.runtimeStyle.height = oldRuntimeHeight; - - if (arguments.length == 3) { - dx = arguments[1]; - dy = arguments[2]; - sx = sy = 0; - sw = dw = w; - sh = dh = h; - } else if (arguments.length == 5) { - dx = arguments[1]; - dy = arguments[2]; - dw = arguments[3]; - dh = arguments[4]; - sx = sy = 0; - sw = w; - sh = h; - } else if (arguments.length == 9) { - sx = arguments[1]; - sy = arguments[2]; - sw = arguments[3]; - sh = arguments[4]; - dx = arguments[5]; - dy = arguments[6]; - dw = arguments[7]; - dh = arguments[8]; - } else { - throw Error('Invalid number of arguments'); - } - - var d = this.getCoords_(dx, dy); - - var w2 = sw / 2; - var h2 = sh / 2; - - var vmlStr = []; - - var W = 10; - var H = 10; - - // For some reason that I've now forgotten, using divs didn't work - vmlStr.push(' ' , - '', - ''); - - this.element_.insertAdjacentHTML('BeforeEnd', vmlStr.join('')); - }; - - contextPrototype.stroke = function(aFill) { - var W = 10; - var H = 10; - // Divide the shape into chunks if it's too long because IE has a limit - // somewhere for how long a VML shape can be. This simple division does - // not work with fills, only strokes, unfortunately. - var chunkSize = 5000; - - var min = {x: null, y: null}; - var max = {x: null, y: null}; - - for (var j = 0; j < this.currentPath_.length; j += chunkSize) { - var lineStr = []; - var lineOpen = false; - - lineStr.push(''); - - if (!aFill) { - appendStroke(this, lineStr); - } else { - appendFill(this, lineStr, min, max); - } - - lineStr.push(''); - - this.element_.insertAdjacentHTML('beforeEnd', lineStr.join('')); - } - }; - - function appendStroke(ctx, lineStr) { - var a = processStyle(ctx.strokeStyle); - var color = a.color; - var opacity = a.alpha * ctx.globalAlpha; - var lineWidth = ctx.lineScale_ * ctx.lineWidth; - - // VML cannot correctly render a line if the width is less than 1px. - // In that case, we dilute the color to make the line look thinner. - if (lineWidth < 1) { - opacity *= lineWidth; - } - - lineStr.push( - '' - ); - } - - function appendFill(ctx, lineStr, min, max) { - var fillStyle = ctx.fillStyle; - var arcScaleX = ctx.arcScaleX_; - var arcScaleY = ctx.arcScaleY_; - var width = max.x - min.x; - var height = max.y - min.y; - if (fillStyle instanceof CanvasGradient_) { - // TODO: Gradients transformed with the transformation matrix. - var angle = 0; - var focus = {x: 0, y: 0}; - - // additional offset - var shift = 0; - // scale factor for offset - var expansion = 1; - - if (fillStyle.type_ == 'gradient') { - var x0 = fillStyle.x0_ / arcScaleX; - var y0 = fillStyle.y0_ / arcScaleY; - var x1 = fillStyle.x1_ / arcScaleX; - var y1 = fillStyle.y1_ / arcScaleY; - var p0 = ctx.getCoords_(x0, y0); - var p1 = ctx.getCoords_(x1, y1); - var dx = p1.x - p0.x; - var dy = p1.y - p0.y; - angle = Math.atan2(dx, dy) * 180 / Math.PI; - - // The angle should be a non-negative number. - if (angle < 0) { - angle += 360; - } - - // Very small angles produce an unexpected result because they are - // converted to a scientific notation string. - if (angle < 1e-6) { - angle = 0; - } - } else { - var p0 = ctx.getCoords_(fillStyle.x0_, fillStyle.y0_); - focus = { - x: (p0.x - min.x) / width, - y: (p0.y - min.y) / height - }; - - width /= arcScaleX * Z; - height /= arcScaleY * Z; - var dimension = m.max(width, height); - shift = 2 * fillStyle.r0_ / dimension; - expansion = 2 * fillStyle.r1_ / dimension - shift; - } - - // We need to sort the color stops in ascending order by offset, - // otherwise IE won't interpret it correctly. - var stops = fillStyle.colors_; - stops.sort(function(cs1, cs2) { - return cs1.offset - cs2.offset; - }); - - var length = stops.length; - var color1 = stops[0].color; - var color2 = stops[length - 1].color; - var opacity1 = stops[0].alpha * ctx.globalAlpha; - var opacity2 = stops[length - 1].alpha * ctx.globalAlpha; - - var colors = []; - for (var i = 0; i < length; i++) { - var stop = stops[i]; - colors.push(stop.offset * expansion + shift + ' ' + stop.color); - } - - // When colors attribute is used, the meanings of opacity and o:opacity2 - // are reversed. - lineStr.push(''); - } else if (fillStyle instanceof CanvasPattern_) { - if (width && height) { - var deltaLeft = -min.x; - var deltaTop = -min.y; - lineStr.push(''); - } - } else { - var a = processStyle(ctx.fillStyle); - var color = a.color; - var opacity = a.alpha * ctx.globalAlpha; - lineStr.push(''); - } - } - - contextPrototype.fill = function() { - this.stroke(true); - }; - - contextPrototype.closePath = function() { - this.currentPath_.push({type: 'close'}); - }; - - /** - * @private - */ - contextPrototype.getCoords_ = function(aX, aY) { - var m = this.m_; - return { - x: Z * (aX * m[0][0] + aY * m[1][0] + m[2][0]) - Z2, - y: Z * (aX * m[0][1] + aY * m[1][1] + m[2][1]) - Z2 - }; - }; - - contextPrototype.save = function() { - var o = {}; - copyState(this, o); - this.aStack_.push(o); - this.mStack_.push(this.m_); - this.m_ = matrixMultiply(createMatrixIdentity(), this.m_); - }; - - contextPrototype.restore = function() { - if (this.aStack_.length) { - copyState(this.aStack_.pop(), this); - this.m_ = this.mStack_.pop(); - } - }; - - function matrixIsFinite(m) { - return isFinite(m[0][0]) && isFinite(m[0][1]) && - isFinite(m[1][0]) && isFinite(m[1][1]) && - isFinite(m[2][0]) && isFinite(m[2][1]); - } - - function setM(ctx, m, updateLineScale) { - if (!matrixIsFinite(m)) { - return; - } - ctx.m_ = m; - - if (updateLineScale) { - // Get the line scale. - // Determinant of this.m_ means how much the area is enlarged by the - // transformation. So its square root can be used as a scale factor - // for width. - var det = m[0][0] * m[1][1] - m[0][1] * m[1][0]; - ctx.lineScale_ = sqrt(abs(det)); - } - } - - contextPrototype.translate = function(aX, aY) { - var m1 = [ - [1, 0, 0], - [0, 1, 0], - [aX, aY, 1] - ]; - - setM(this, matrixMultiply(m1, this.m_), false); - }; - - contextPrototype.rotate = function(aRot) { - var c = mc(aRot); - var s = ms(aRot); - - var m1 = [ - [c, s, 0], - [-s, c, 0], - [0, 0, 1] - ]; - - setM(this, matrixMultiply(m1, this.m_), false); - }; - - contextPrototype.scale = function(aX, aY) { - this.arcScaleX_ *= aX; - this.arcScaleY_ *= aY; - var m1 = [ - [aX, 0, 0], - [0, aY, 0], - [0, 0, 1] - ]; - - setM(this, matrixMultiply(m1, this.m_), true); - }; - - contextPrototype.transform = function(m11, m12, m21, m22, dx, dy) { - var m1 = [ - [m11, m12, 0], - [m21, m22, 0], - [dx, dy, 1] - ]; - - setM(this, matrixMultiply(m1, this.m_), true); - }; - - contextPrototype.setTransform = function(m11, m12, m21, m22, dx, dy) { - var m = [ - [m11, m12, 0], - [m21, m22, 0], - [dx, dy, 1] - ]; - - setM(this, m, true); - }; - - /** - * The text drawing function. - * The maxWidth argument isn't taken in account, since no browser supports - * it yet. - */ - contextPrototype.drawText_ = function(text, x, y, maxWidth, stroke) { - var m = this.m_, - delta = 1000, - left = 0, - right = delta, - offset = {x: 0, y: 0}, - lineStr = []; - - var fontStyle = getComputedStyle(processFontStyle(this.font), - this.element_); - - var fontStyleString = buildStyle(fontStyle); - - var elementStyle = this.element_.currentStyle; - var textAlign = this.textAlign.toLowerCase(); - switch (textAlign) { - case 'left': - case 'center': - case 'right': - break; - case 'end': - textAlign = elementStyle.direction == 'ltr' ? 'right' : 'left'; - break; - case 'start': - textAlign = elementStyle.direction == 'rtl' ? 'right' : 'left'; - break; - default: - textAlign = 'left'; - } - - // 1.75 is an arbitrary number, as there is no info about the text baseline - switch (this.textBaseline) { - case 'hanging': - case 'top': - offset.y = fontStyle.size / 1.75; - break; - case 'middle': - break; - default: - case null: - case 'alphabetic': - case 'ideographic': - case 'bottom': - offset.y = -fontStyle.size / 2.25; - break; - } - - switch(textAlign) { - case 'right': - left = delta; - right = 0.05; - break; - case 'center': - left = right = delta / 2; - break; - } - - var d = this.getCoords_(x + offset.x, y + offset.y); - - lineStr.push(''); - - if (stroke) { - appendStroke(this, lineStr); - } else { - // TODO: Fix the min and max params. - appendFill(this, lineStr, {x: -left, y: 0}, - {x: right, y: fontStyle.size}); - } - - var skewM = m[0][0].toFixed(3) + ',' + m[1][0].toFixed(3) + ',' + - m[0][1].toFixed(3) + ',' + m[1][1].toFixed(3) + ',0,0'; - - var skewOffset = mr(d.x / Z) + ',' + mr(d.y / Z); - - lineStr.push('', - '', - ''); - - this.element_.insertAdjacentHTML('beforeEnd', lineStr.join('')); - }; - - contextPrototype.fillText = function(text, x, y, maxWidth) { - this.drawText_(text, x, y, maxWidth, false); - }; - - contextPrototype.strokeText = function(text, x, y, maxWidth) { - this.drawText_(text, x, y, maxWidth, true); - }; - - contextPrototype.measureText = function(text) { - if (!this.textMeasureEl_) { - var s = ''; - this.element_.insertAdjacentHTML('beforeEnd', s); - this.textMeasureEl_ = this.element_.lastChild; - } - var doc = this.element_.ownerDocument; - this.textMeasureEl_.innerHTML = ''; - this.textMeasureEl_.style.font = this.font; - // Don't use innerHTML or innerText because they allow markup/whitespace. - this.textMeasureEl_.appendChild(doc.createTextNode(text)); - return {width: this.textMeasureEl_.offsetWidth}; - }; - - /******** STUBS ********/ - contextPrototype.clip = function() { - // TODO: Implement - }; - - contextPrototype.arcTo = function() { - // TODO: Implement - }; - - contextPrototype.createPattern = function(image, repetition) { - return new CanvasPattern_(image, repetition); - }; - - // Gradient / Pattern Stubs - function CanvasGradient_(aType) { - this.type_ = aType; - this.x0_ = 0; - this.y0_ = 0; - this.r0_ = 0; - this.x1_ = 0; - this.y1_ = 0; - this.r1_ = 0; - this.colors_ = []; - } - - CanvasGradient_.prototype.addColorStop = function(aOffset, aColor) { - aColor = processStyle(aColor); - this.colors_.push({offset: aOffset, - color: aColor.color, - alpha: aColor.alpha}); - }; - - function CanvasPattern_(image, repetition) { - assertImageIsValid(image); - switch (repetition) { - case 'repeat': - case null: - case '': - this.repetition_ = 'repeat'; - break - case 'repeat-x': - case 'repeat-y': - case 'no-repeat': - this.repetition_ = repetition; - break; - default: - throwException('SYNTAX_ERR'); - } - - this.src_ = image.src; - this.width_ = image.width; - this.height_ = image.height; - } - - function throwException(s) { - throw new DOMException_(s); - } - - function assertImageIsValid(img) { - if (!img || img.nodeType != 1 || img.tagName != 'IMG') { - throwException('TYPE_MISMATCH_ERR'); - } - if (img.readyState != 'complete') { - throwException('INVALID_STATE_ERR'); - } - } - - function DOMException_(s) { - this.code = this[s]; - this.message = s +': DOM Exception ' + this.code; - } - var p = DOMException_.prototype = new Error; - p.INDEX_SIZE_ERR = 1; - p.DOMSTRING_SIZE_ERR = 2; - p.HIERARCHY_REQUEST_ERR = 3; - p.WRONG_DOCUMENT_ERR = 4; - p.INVALID_CHARACTER_ERR = 5; - p.NO_DATA_ALLOWED_ERR = 6; - p.NO_MODIFICATION_ALLOWED_ERR = 7; - p.NOT_FOUND_ERR = 8; - p.NOT_SUPPORTED_ERR = 9; - p.INUSE_ATTRIBUTE_ERR = 10; - p.INVALID_STATE_ERR = 11; - p.SYNTAX_ERR = 12; - p.INVALID_MODIFICATION_ERR = 13; - p.NAMESPACE_ERR = 14; - p.INVALID_ACCESS_ERR = 15; - p.VALIDATION_ERR = 16; - p.TYPE_MISMATCH_ERR = 17; - - // set up externs - G_vmlCanvasManager = G_vmlCanvasManager_; - CanvasRenderingContext2D = CanvasRenderingContext2D_; - CanvasGradient = CanvasGradient_; - CanvasPattern = CanvasPattern_; - DOMException = DOMException_; -})(); - -} // if - --- a/owa/modules/base/js/includes/jquery/flot/jquery.colorhelpers.js +++ /dev/null @@ -1,175 +1,1 @@ -/* Plugin for jQuery for working with colors. - * - * Version 1.0. - * - * Inspiration from jQuery color animation plugin by John Resig. - * - * Released under the MIT license by Ole Laursen, October 2009. - * - * Examples: - * - * $.color.parse("#fff").scale('rgb', 0.25).add('a', -0.5).toString() - * var c = $.color.extract($("#mydiv"), 'background-color'); - * console.log(c.r, c.g, c.b, c.a); - * $.color.make(100, 50, 25, 0.4).toString() // returns "rgba(100,50,25,0.4)" - * - * Note that .scale() and .add() work in-place instead of returning - * new objects. - */ -(function() { - jQuery.color = {}; - - // construct color object with some convenient chainable helpers - jQuery.color.make = function (r, g, b, a) { - var o = {}; - o.r = r || 0; - o.g = g || 0; - o.b = b || 0; - o.a = a != null ? a : 1; - - o.add = function (c, d) { - for (var i = 0; i < c.length; ++i) - o[c.charAt(i)] += d; - return o.normalize(); - }; - - o.scale = function (c, f) { - for (var i = 0; i < c.length; ++i) - o[c.charAt(i)] *= f; - return o.normalize(); - }; - - o.toString = function () { - if (o.a >= 1.0) { - return "rgb("+[o.r, o.g, o.b].join(",")+")"; - } else { - return "rgba("+[o.r, o.g, o.b, o.a].join(",")+")"; - } - }; - - o.normalize = function () { - function clamp(min, value, max) { - return value < min ? min: (value > max ? max: value); - } - - o.r = clamp(0, parseInt(o.r), 255); - o.g = clamp(0, parseInt(o.g), 255); - o.b = clamp(0, parseInt(o.b), 255); - o.a = clamp(0, o.a, 1); - return o; - }; - - o.clone = function () { - return jQuery.color.make(o.r, o.b, o.g, o.a); - }; - - return o.normalize(); - } - - // extract CSS color property from element, going up in the DOM - // if it's "transparent" - jQuery.color.extract = function (elem, css) { - var c; - do { - c = elem.css(css).toLowerCase(); - // keep going until we find an element that has color, or - // we hit the body - if (c != '' && c != 'transparent') - break; - elem = elem.parent(); - } while (!jQuery.nodeName(elem.get(0), "body")); - - // catch Safari's way of signalling transparent - if (c == "rgba(0, 0, 0, 0)") - c = "transparent"; - - return jQuery.color.parse(c); - } - - // parse CSS color string (like "rgb(10, 32, 43)" or "#fff"), - // returns color object - jQuery.color.parse = function (str) { - var res, m = jQuery.color.make; - - // Look for rgb(num,num,num) - if (res = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(str)) - return m(parseInt(res[1], 10), parseInt(res[2], 10), parseInt(res[3], 10)); - - // Look for rgba(num,num,num,num) - if (res = /rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(str)) - return m(parseInt(res[1], 10), parseInt(res[2], 10), parseInt(res[3], 10), parseFloat(res[4])); - - // Look for rgb(num%,num%,num%) - if (res = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(str)) - return m(parseFloat(res[1])*2.55, parseFloat(res[2])*2.55, parseFloat(res[3])*2.55); - - // Look for rgba(num%,num%,num%,num) - if (res = /rgba\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(str)) - return m(parseFloat(res[1])*2.55, parseFloat(res[2])*2.55, parseFloat(res[3])*2.55, parseFloat(res[4])); - - // Look for #a0b1c2 - if (res = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(str)) - return m(parseInt(res[1], 16), parseInt(res[2], 16), parseInt(res[3], 16)); - - // Look for #fff - if (res = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(str)) - return m(parseInt(res[1]+res[1], 16), parseInt(res[2]+res[2], 16), parseInt(res[3]+res[3], 16)); - - // Otherwise, we're most likely dealing with a named color - var name = jQuery.trim(str).toLowerCase(); - if (name == "transparent") - return m(255, 255, 255, 0); - else { - res = lookupColors[name]; - return m(res[0], res[1], res[2]); - } - } - - var lookupColors = { - aqua:[0,255,255], - azure:[240,255,255], - beige:[245,245,220], - black:[0,0,0], - blue:[0,0,255], - brown:[165,42,42], - cyan:[0,255,255], - darkblue:[0,0,139], - darkcyan:[0,139,139], - darkgrey:[169,169,169], - darkgreen:[0,100,0], - darkkhaki:[189,183,107], - darkmagenta:[139,0,139], - darkolivegreen:[85,107,47], - darkorange:[255,140,0], - darkorchid:[153,50,204], - darkred:[139,0,0], - darksalmon:[233,150,122], - darkviolet:[148,0,211], - fuchsia:[255,0,255], - gold:[255,215,0], - green:[0,128,0], - indigo:[75,0,130], - khaki:[240,230,140], - lightblue:[173,216,230], - lightcyan:[224,255,255], - lightgreen:[144,238,144], - lightgrey:[211,211,211], - lightpink:[255,182,193], - lightyellow:[255,255,224], - lime:[0,255,0], - magenta:[255,0,255], - maroon:[128,0,0], - navy:[0,0,128], - olive:[128,128,0], - orange:[255,165,0], - pink:[255,192,203], - purple:[128,0,128], - violet:[128,0,128], - red:[255,0,0], - silver:[192,192,192], - white:[255,255,255], - yellow:[255,255,0] - }; -})(); - --- a/owa/modules/base/js/includes/jquery/flot/jquery.colorhelpers.min.js +++ /dev/null @@ -1,1 +1,1 @@ -(function(){jQuery.color={};jQuery.color.make=function(E,D,B,C){var F={};F.r=E||0;F.g=D||0;F.b=B||0;F.a=C!=null?C:1;F.add=function(I,H){for(var G=0;G=1){return"rgb("+[F.r,F.g,F.b].join(",")+")"}else{return"rgba("+[F.r,F.g,F.b,F.a].join(",")+")"}};F.normalize=function(){function G(I,J,H){return JH?H:J)}F.r=G(0,parseInt(F.r),255);F.g=G(0,parseInt(F.g),255);F.b=G(0,parseInt(F.b),255);F.a=G(0,F.a,1);return F};F.clone=function(){return jQuery.color.make(F.r,F.b,F.g,F.a)};return F.normalize()};jQuery.color.extract=function(C,B){var D;do{D=C.css(B).toLowerCase();if(D!=""&&D!="transparent"){break}C=C.parent()}while(!jQuery.nodeName(C.get(0),"body"));if(D=="rgba(0, 0, 0, 0)"){D="transparent"}return jQuery.color.parse(D)};jQuery.color.parse=function(E){var D,B=jQuery.color.make;if(D=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(E)){return B(parseInt(D[1],10),parseInt(D[2],10),parseInt(D[3],10))}if(D=/rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(E)){return B(parseInt(D[1],10),parseInt(D[2],10),parseInt(D[3],10),parseFloat(D[4]))}if(D=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(E)){return B(parseFloat(D[1])*2.55,parseFloat(D[2])*2.55,parseFloat(D[3])*2.55)}if(D=/rgba\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(E)){return B(parseFloat(D[1])*2.55,parseFloat(D[2])*2.55,parseFloat(D[3])*2.55,parseFloat(D[4]))}if(D=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(E)){return B(parseInt(D[1],16),parseInt(D[2],16),parseInt(D[3],16))}if(D=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(E)){return B(parseInt(D[1]+D[1],16),parseInt(D[2]+D[2],16),parseInt(D[3]+D[3],16))}var C=jQuery.trim(E).toLowerCase();if(C=="transparent"){return B(255,255,255,0)}else{D=A[C];return B(D[0],D[1],D[2])}};var A={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0]}})(); + --- a/owa/modules/base/js/includes/jquery/flot/jquery.flot.crosshair.js +++ /dev/null @@ -1,157 +1,1 @@ -/* -Flot plugin for showing a crosshair, thin lines, when the mouse hovers -over the plot. - crosshair: { - mode: null or "x" or "y" or "xy" - color: color - lineWidth: number - } - -Set the mode to one of "x", "y" or "xy". The "x" mode enables a -vertical crosshair that lets you trace the values on the x axis, "y" -enables a horizontal crosshair and "xy" enables them both. "color" is -the color of the crosshair (default is "rgba(170, 0, 0, 0.80)"), -"lineWidth" is the width of the drawn lines (default is 1). - -The plugin also adds four public methods: - - - setCrosshair(pos) - - Set the position of the crosshair. Note that this is cleared if - the user moves the mouse. "pos" should be on the form { x: xpos, - y: ypos } (or x2 and y2 if you're using the secondary axes), which - is coincidentally the same format as what you get from a "plothover" - event. If "pos" is null, the crosshair is cleared. - - - clearCrosshair() - - Clear the crosshair. - - - lockCrosshair(pos) - - Cause the crosshair to lock to the current location, no longer - updating if the user moves the mouse. Optionally supply a position - (passed on to setCrosshair()) to move it to. - - Example usage: - var myFlot = $.plot( $("#graph"), ..., { crosshair: { mode: "x" } } }; - $("#graph").bind("plothover", function (evt, position, item) { - if (item) { - // Lock the crosshair to the data point being hovered - myFlot.lockCrosshair({ x: item.datapoint[0], y: item.datapoint[1] }); - } - else { - // Return normal crosshair operation - myFlot.unlockCrosshair(); - } - }); - - - unlockCrosshair() - - Free the crosshair to move again after locking it. -*/ - -(function ($) { - var options = { - crosshair: { - mode: null, // one of null, "x", "y" or "xy", - color: "rgba(170, 0, 0, 0.80)", - lineWidth: 1 - } - }; - - function init(plot) { - // position of crosshair in pixels - var crosshair = { x: -1, y: -1, locked: false }; - - plot.setCrosshair = function setCrosshair(pos) { - if (!pos) - crosshair.x = -1; - else { - var axes = plot.getAxes(); - - crosshair.x = Math.max(0, Math.min(pos.x != null ? axes.xaxis.p2c(pos.x) : axes.x2axis.p2c(pos.x2), plot.width())); - crosshair.y = Math.max(0, Math.min(pos.y != null ? axes.yaxis.p2c(pos.y) : axes.y2axis.p2c(pos.y2), plot.height())); - } - - plot.triggerRedrawOverlay(); - }; - - plot.clearCrosshair = plot.setCrosshair; // passes null for pos - - plot.lockCrosshair = function lockCrosshair(pos) { - if (pos) - plot.setCrosshair(pos); - crosshair.locked = true; - } - - plot.unlockCrosshair = function unlockCrosshair() { - crosshair.locked = false; - } - - plot.hooks.bindEvents.push(function (plot, eventHolder) { - if (!plot.getOptions().crosshair.mode) - return; - - eventHolder.mouseout(function () { - if (crosshair.x != -1) { - crosshair.x = -1; - plot.triggerRedrawOverlay(); - } - }); - - eventHolder.mousemove(function (e) { - if (plot.getSelection && plot.getSelection()) { - crosshair.x = -1; // hide the crosshair while selecting - return; - } - - if (crosshair.locked) - return; - - var offset = plot.offset(); - crosshair.x = Math.max(0, Math.min(e.pageX - offset.left, plot.width())); - crosshair.y = Math.max(0, Math.min(e.pageY - offset.top, plot.height())); - plot.triggerRedrawOverlay(); - }); - }); - - plot.hooks.drawOverlay.push(function (plot, ctx) { - var c = plot.getOptions().crosshair; - if (!c.mode) - return; - - var plotOffset = plot.getPlotOffset(); - - ctx.save(); - ctx.translate(plotOffset.left, plotOffset.top); - - if (crosshair.x != -1) { - ctx.strokeStyle = c.color; - ctx.lineWidth = c.lineWidth; - ctx.lineJoin = "round"; - - ctx.beginPath(); - if (c.mode.indexOf("x") != -1) { - ctx.moveTo(crosshair.x, 0); - ctx.lineTo(crosshair.x, plot.height()); - } - if (c.mode.indexOf("y") != -1) { - ctx.moveTo(0, crosshair.y); - ctx.lineTo(plot.width(), crosshair.y); - } - ctx.stroke(); - } - ctx.restore(); - }); - } - - $.plot.plugins.push({ - init: init, - options: options, - name: 'crosshair', - version: '1.0' - }); -})(jQuery); - --- a/owa/modules/base/js/includes/jquery/flot/jquery.flot.crosshair.min.js +++ /dev/null @@ -1,1 +1,1 @@ -(function(B){var A={crosshair:{mode:null,color:"rgba(170, 0, 0, 0.80)",lineWidth:1}};function C(G){var H={x:-1,y:-1,locked:false};G.setCrosshair=function D(J){if(!J){H.x=-1}else{var I=G.getAxes();H.x=Math.max(0,Math.min(J.x!=null?I.xaxis.p2c(J.x):I.x2axis.p2c(J.x2),G.width()));H.y=Math.max(0,Math.min(J.y!=null?I.yaxis.p2c(J.y):I.y2axis.p2c(J.y2),G.height()))}G.triggerRedrawOverlay()};G.clearCrosshair=G.setCrosshair;G.lockCrosshair=function E(I){if(I){G.setCrosshair(I)}H.locked=true};G.unlockCrosshair=function F(){H.locked=false};G.hooks.bindEvents.push(function(J,I){if(!J.getOptions().crosshair.mode){return }I.mouseout(function(){if(H.x!=-1){H.x=-1;J.triggerRedrawOverlay()}});I.mousemove(function(K){if(J.getSelection&&J.getSelection()){H.x=-1;return }if(H.locked){return }var L=J.offset();H.x=Math.max(0,Math.min(K.pageX-L.left,J.width()));H.y=Math.max(0,Math.min(K.pageY-L.top,J.height()));J.triggerRedrawOverlay()})});G.hooks.drawOverlay.push(function(K,I){var L=K.getOptions().crosshair;if(!L.mode){return }var J=K.getPlotOffset();I.save();I.translate(J.left,J.top);if(H.x!=-1){I.strokeStyle=L.color;I.lineWidth=L.lineWidth;I.lineJoin="round";I.beginPath();if(L.mode.indexOf("x")!=-1){I.moveTo(H.x,0);I.lineTo(H.x,K.height())}if(L.mode.indexOf("y")!=-1){I.moveTo(0,H.y);I.lineTo(K.width(),H.y)}I.stroke()}I.restore()})}B.plot.plugins.push({init:C,options:A,name:"crosshair",version:"1.0"})})(jQuery); + --- a/owa/modules/base/js/includes/jquery/flot/jquery.flot.image.js +++ /dev/null @@ -1,238 +1,1 @@ -/* -Flot plugin for plotting images, e.g. useful for putting ticks on a -prerendered complex visualization. -The data syntax is [[image, x1, y1, x2, y2], ...] where (x1, y1) and -(x2, y2) are where you intend the two opposite corners of the image to -end up in the plot. Image must be a fully loaded Javascript image (you -can make one with new Image()). If the image is not complete, it's -skipped when plotting. - -There are two helpers included for retrieving images. The easiest work -the way that you put in URLs instead of images in the data (like -["myimage.png", 0, 0, 10, 10]), then call $.plot.image.loadData(data, -options, callback) where data and options are the same as you pass in -to $.plot. This loads the images, replaces the URLs in the data with -the corresponding images and calls "callback" when all images are -loaded (or failed loading). In the callback, you can then call $.plot -with the data set. See the included example. - -A more low-level helper, $.plot.image.load(urls, callback) is also -included. Given a list of URLs, it calls callback with an object -mapping from URL to Image object when all images are loaded or have -failed loading. - -Options for the plugin are - - series: { - images: { - show: boolean - anchor: "corner" or "center" - alpha: [0,1] - } - } - -which can be specified for a specific series - - $.plot($("#placeholder"), [{ data: [ ... ], images: { ... } ]) - -Note that because the data format is different from usual data points, -you can't use images with anything else in a specific data series. - -Setting "anchor" to "center" causes the pixels in the image to be -anchored at the corner pixel centers inside of at the pixel corners, -effectively letting half a pixel stick out to each side in the plot. - - -A possible future direction could be support for tiling for large -images (like Google Maps). - -*/ - -(function ($) { - var options = { - series: { - images: { - show: false, - alpha: 1, - anchor: "corner" // or "center" - } - } - }; - - $.plot.image = {}; - - $.plot.image.loadDataImages = function (series, options, callback) { - var urls = [], points = []; - - var defaultShow = options.series.images.show; - - $.each(series, function (i, s) { - if (!(defaultShow || s.images.show)) - return; - - if (s.data) - s = s.data; - - $.each(s, function (i, p) { - if (typeof p[0] == "string") { - urls.push(p[0]); - points.push(p); - } - }); - }); - - $.plot.image.load(urls, function (loadedImages) { - $.each(points, function (i, p) { - var url = p[0]; - if (loadedImages[url]) - p[0] = loadedImages[url]; - }); - - callback(); - }); - } - - $.plot.image.load = function (urls, callback) { - var missing = urls.length, loaded = {}; - if (missing == 0) - callback({}); - - $.each(urls, function (i, url) { - var handler = function () { - --missing; - - loaded[url] = this; - - if (missing == 0) - callback(loaded); - }; - - $('').load(handler).error(handler).attr('src', url); - }); - } - - function draw(plot, ctx) { - var plotOffset = plot.getPlotOffset(); - - $.each(plot.getData(), function (i, series) { - var points = series.datapoints.points, - ps = series.datapoints.pointsize; - - for (var i = 0; i < points.length; i += ps) { - var img = points[i], - x1 = points[i + 1], y1 = points[i + 2], - x2 = points[i + 3], y2 = points[i + 4], - xaxis = series.xaxis, yaxis = series.yaxis, - tmp; - - // actually we should check img.complete, but it - // appears to be a somewhat unreliable indicator in - // IE6 (false even after load event) - if (!img || img.width <= 0 || img.height <= 0) - continue; - - if (x1 > x2) { - tmp = x2; - x2 = x1; - x1 = tmp; - } - if (y1 > y2) { - tmp = y2; - y2 = y1; - y1 = tmp; - } - - // if the anchor is at the center of the pixel, expand the - // image by 1/2 pixel in each direction - if (series.images.anchor == "center") { - tmp = 0.5 * (x2-x1) / (img.width - 1); - x1 -= tmp; - x2 += tmp; - tmp = 0.5 * (y2-y1) / (img.height - 1); - y1 -= tmp; - y2 += tmp; - } - - // clip - if (x1 == x2 || y1 == y2 || - x1 >= xaxis.max || x2 <= xaxis.min || - y1 >= yaxis.max || y2 <= yaxis.min) - continue; - - var sx1 = 0, sy1 = 0, sx2 = img.width, sy2 = img.height; - if (x1 < xaxis.min) { - sx1 += (sx2 - sx1) * (xaxis.min - x1) / (x2 - x1); - x1 = xaxis.min; - } - - if (x2 > xaxis.max) { - sx2 += (sx2 - sx1) * (xaxis.max - x2) / (x2 - x1); - x2 = xaxis.max; - } - - if (y1 < yaxis.min) { - sy2 += (sy1 - sy2) * (yaxis.min - y1) / (y2 - y1); - y1 = yaxis.min; - } - - if (y2 > yaxis.max) { - sy1 += (sy1 - sy2) * (yaxis.max - y2) / (y2 - y1); - y2 = yaxis.max; - } - - x1 = xaxis.p2c(x1); - x2 = xaxis.p2c(x2); - y1 = yaxis.p2c(y1); - y2 = yaxis.p2c(y2); - - // the transformation may have swapped us - if (x1 > x2) { - tmp = x2; - x2 = x1; - x1 = tmp; - } - if (y1 > y2) { - tmp = y2; - y2 = y1; - y1 = tmp; - } - - tmp = ctx.globalAlpha; - ctx.globalAlpha *= series.images.alpha; - ctx.drawImage(img, - sx1, sy1, sx2 - sx1, sy2 - sy1, - x1 + plotOffset.left, y1 + plotOffset.top, - x2 - x1, y2 - y1); - ctx.globalAlpha = tmp; - } - }); - } - - function processRawData(plot, series, data, datapoints) { - if (!series.images.show) - return; - - // format is Image, x1, y1, x2, y2 (opposite corners) - datapoints.format = [ - { required: true }, - { x: true, number: true, required: true }, - { y: true, number: true, required: true }, - { x: true, number: true, required: true }, - { y: true, number: true, required: true } - ]; - } - - function init(plot) { - plot.hooks.processRawData.push(processRawData); - plot.hooks.draw.push(draw); - } - - $.plot.plugins.push({ - init: init, - options: options, - name: 'image', - version: '1.1' - }); -})(jQuery); - --- a/owa/modules/base/js/includes/jquery/flot/jquery.flot.image.min.js +++ /dev/null @@ -1,1 +1,1 @@ -(function(D){var B={series:{images:{show:false,alpha:1,anchor:"corner"}}};D.plot.image={};D.plot.image.loadDataImages=function(G,F,K){var J=[],H=[];var I=F.series.images.show;D.each(G,function(L,M){if(!(I||M.images.show)){return }if(M.data){M=M.data}D.each(M,function(N,O){if(typeof O[0]=="string"){J.push(O[0]);H.push(O)}})});D.plot.image.load(J,function(L){D.each(H,function(N,O){var M=O[0];if(L[M]){O[0]=L[M]}});K()})};D.plot.image.load=function(H,I){var G=H.length,F={};if(G==0){I({})}D.each(H,function(K,J){var L=function(){--G;F[J]=this;if(G==0){I(F)}};D("").load(L).error(L).attr("src",J)})};function A(H,F){var G=H.getPlotOffset();D.each(H.getData(),function(O,P){var X=P.datapoints.points,I=P.datapoints.pointsize;for(var O=0;OK){N=K;K=M;M=N}if(V>T){N=T;T=V;V=N}if(P.images.anchor=="center"){N=0.5*(K-M)/(Q.width-1);M-=N;K+=N;N=0.5*(T-V)/(Q.height-1);V-=N;T+=N}if(M==K||V==T||M>=W.max||K<=W.min||V>=S.max||T<=S.min){continue}var L=0,U=0,J=Q.width,R=Q.height;if(MW.max){J+=(J-L)*(W.max-K)/(K-M);K=W.max}if(VS.max){U+=(U-R)*(S.max-T)/(T-V);T=S.max}M=W.p2c(M);K=W.p2c(K);V=S.p2c(V);T=S.p2c(T);if(M>K){N=K;K=M;M=N}if(V>T){N=T;T=V;V=N}N=F.globalAlpha;F.globalAlpha*=P.images.alpha;F.drawImage(Q,L,U,J-L,R-U,M+G.left,V+G.top,K-M,T-V);F.globalAlpha=N}})}function C(I,F,G,H){if(!F.images.show){return }H.format=[{required:true},{x:true,number:true,required:true},{y:true,number:true,required:true},{x:true,number:true,required:true},{y:true,number:true,required:true}]}function E(F){F.hooks.processRawData.push(C);F.hooks.draw.push(A)}D.plot.plugins.push({init:E,options:B,name:"image",version:"1.1"})})(jQuery); + --- a/owa/modules/base/js/includes/jquery/flot/jquery.flot.js +++ /dev/null @@ -1,2120 +1,1 @@ -/* Javascript plotting library for jQuery, v. 0.6. - * - * Released under the MIT license by IOLA, December 2007. - * - */ -// first an inline dependency, jquery.colorhelpers.js, we inline it here -// for convenience - -/* Plugin for jQuery for working with colors. - * - * Version 1.0. - * - * Inspiration from jQuery color animation plugin by John Resig. - * - * Released under the MIT license by Ole Laursen, October 2009. - * - * Examples: - * - * $.color.parse("#fff").scale('rgb', 0.25).add('a', -0.5).toString() - * var c = $.color.extract($("#mydiv"), 'background-color'); - * console.log(c.r, c.g, c.b, c.a); - * $.color.make(100, 50, 25, 0.4).toString() // returns "rgba(100,50,25,0.4)" - * - * Note that .scale() and .add() work in-place instead of returning - * new objects. - */ -(function(){jQuery.color={};jQuery.color.make=function(E,D,B,C){var F={};F.r=E||0;F.g=D||0;F.b=B||0;F.a=C!=null?C:1;F.add=function(I,H){for(var G=0;G=1){return"rgb("+[F.r,F.g,F.b].join(",")+")"}else{return"rgba("+[F.r,F.g,F.b,F.a].join(",")+")"}};F.normalize=function(){function G(I,J,H){return JH?H:J)}F.r=G(0,parseInt(F.r),255);F.g=G(0,parseInt(F.g),255);F.b=G(0,parseInt(F.b),255);F.a=G(0,F.a,1);return F};F.clone=function(){return jQuery.color.make(F.r,F.b,F.g,F.a)};return F.normalize()};jQuery.color.extract=function(C,B){var D;do{D=C.css(B).toLowerCase();if(D!=""&&D!="transparent"){break}C=C.parent()}while(!jQuery.nodeName(C.get(0),"body"));if(D=="rgba(0, 0, 0, 0)"){D="transparent"}return jQuery.color.parse(D)};jQuery.color.parse=function(E){var D,B=jQuery.color.make;if(D=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(E)){return B(parseInt(D[1],10),parseInt(D[2],10),parseInt(D[3],10))}if(D=/rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(E)){return B(parseInt(D[1],10),parseInt(D[2],10),parseInt(D[3],10),parseFloat(D[4]))}if(D=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(E)){return B(parseFloat(D[1])*2.55,parseFloat(D[2])*2.55,parseFloat(D[3])*2.55)}if(D=/rgba\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(E)){return B(parseFloat(D[1])*2.55,parseFloat(D[2])*2.55,parseFloat(D[3])*2.55,parseFloat(D[4]))}if(D=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(E)){return B(parseInt(D[1],16),parseInt(D[2],16),parseInt(D[3],16))}if(D=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(E)){return B(parseInt(D[1]+D[1],16),parseInt(D[2]+D[2],16),parseInt(D[3]+D[3],16))}var C=jQuery.trim(E).toLowerCase();if(C=="transparent"){return B(255,255,255,0)}else{D=A[C];return B(D[0],D[1],D[2])}};var A={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0]}})(); - -// the actual Flot code -(function($) { - function Plot(placeholder, data_, options_, plugins) { - // data is on the form: - // [ series1, series2 ... ] - // where series is either just the data as [ [x1, y1], [x2, y2], ... ] - // or { data: [ [x1, y1], [x2, y2], ... ], label: "some label", ... } - - var series = [], - options = { - // the color theme used for graphs - colors: ["#edc240", "#afd8f8", "#cb4b4b", "#4da74d", "#9440ed"], - legend: { - show: true, - noColumns: 1, // number of colums in legend table - labelFormatter: null, // fn: string -> string - labelBoxBorderColor: "#ccc", // border color for the little label boxes - container: null, // container (as jQuery object) to put legend in, null means default on top of graph - position: "ne", // position of default legend container within plot - margin: 5, // distance from grid edge to default legend container within plot - backgroundColor: null, // null means auto-detect - backgroundOpacity: 0.85 // set to 0 to avoid background - }, - xaxis: { - mode: null, // null or "time" - transform: null, // null or f: number -> number to transform axis - inverseTransform: null, // if transform is set, this should be the inverse function - min: null, // min. value to show, null means set automatically - max: null, // max. value to show, null means set automatically - autoscaleMargin: null, // margin in % to add if auto-setting min/max - ticks: null, // either [1, 3] or [[1, "a"], 3] or (fn: axis info -> ticks) or app. number of ticks for auto-ticks - tickFormatter: null, // fn: number -> string - labelWidth: null, // size of tick labels in pixels - labelHeight: null, - - // mode specific options - tickDecimals: null, // no. of decimals, null means auto - tickSize: null, // number or [number, "unit"] - minTickSize: null, // number or [number, "unit"] - monthNames: null, // list of names of months - timeformat: null, // format string to use - twelveHourClock: false // 12 or 24 time in time mode - }, - yaxis: { - autoscaleMargin: 0.02 - }, - x2axis: { - autoscaleMargin: null - }, - y2axis: { - autoscaleMargin: 0.02 - }, - series: { - points: { - show: false, - radius: 3, - lineWidth: 2, // in pixels - fill: true, - fillColor: "#ffffff" - }, - lines: { - // we don't put in show: false so we can see - // whether lines were actively disabled - lineWidth: 2, // in pixels - fill: false, - fillColor: null, - steps: false - }, - bars: { - show: false, - lineWidth: 2, // in pixels - barWidth: 1, // in units of the x axis - fill: true, - fillColor: null, - align: "left", // or "center" - horizontal: false // when horizontal, left is now top - }, - shadowSize: 3 - }, - grid: { - show: true, - aboveData: false, - color: "#545454", // primary color used for outline and labels - backgroundColor: null, // null for transparent, else color - tickColor: "rgba(0,0,0,0.15)", // color used for the ticks - labelMargin: 5, // in pixels - borderWidth: 2, // in pixels - borderColor: null, // set if different from the grid color - markings: null, // array of ranges or fn: axes -> array of ranges - markingsColor: "#f4f4f4", - markingsLineWidth: 2, - // interactive stuff - clickable: false, - hoverable: false, - autoHighlight: true, // highlight in case mouse is near - mouseActiveRadius: 10 // how far the mouse can be away to activate an item - }, - hooks: {} - }, - canvas = null, // the canvas for the plot itself - overlay = null, // canvas for interactive stuff on top of plot - eventHolder = null, // jQuery object that events should be bound to - ctx = null, octx = null, - axes = { xaxis: {}, yaxis: {}, x2axis: {}, y2axis: {} }, - plotOffset = { left: 0, right: 0, top: 0, bottom: 0}, - canvasWidth = 0, canvasHeight = 0, - plotWidth = 0, plotHeight = 0, - hooks = { - processOptions: [], - processRawData: [], - processDatapoints: [], - draw: [], - bindEvents: [], - drawOverlay: [] - }, - plot = this; - - // public functions - plot.setData = setData; - plot.setupGrid = setupGrid; - plot.draw = draw; - plot.getPlaceholder = function() { return placeholder; }; - plot.getCanvas = function() { return canvas; }; - plot.getPlotOffset = function() { return plotOffset; }; - plot.width = function () { return plotWidth; }; - plot.height = function () { return plotHeight; }; - plot.offset = function () { - var o = eventHolder.offset(); - o.left += plotOffset.left; - o.top += plotOffset.top; - return o; - }; - plot.getData = function() { return series; }; - plot.getAxes = function() { return axes; }; - plot.getOptions = function() { return options; }; - plot.highlight = highlight; - plot.unhighlight = unhighlight; - plot.triggerRedrawOverlay = triggerRedrawOverlay; - plot.pointOffset = function(point) { - return { left: parseInt(axisSpecToRealAxis(point, "xaxis").p2c(+point.x) + plotOffset.left), - top: parseInt(axisSpecToRealAxis(point, "yaxis").p2c(+point.y) + plotOffset.top) }; - }; - - - // public attributes - plot.hooks = hooks; - - // initialize - initPlugins(plot); - parseOptions(options_); - constructCanvas(); - setData(data_); - setupGrid(); - draw(); - bindEvents(); - - - function executeHooks(hook, args) { - args = [plot].concat(args); - for (var i = 0; i < hook.length; ++i) - hook[i].apply(this, args); - } - - function initPlugins() { - for (var i = 0; i < plugins.length; ++i) { - var p = plugins[i]; - p.init(plot); - if (p.options) - $.extend(true, options, p.options); - } - } - - function parseOptions(opts) { - $.extend(true, options, opts); - if (options.grid.borderColor == null) - options.grid.borderColor = options.grid.color; - // backwards compatibility, to be removed in future - if (options.xaxis.noTicks && options.xaxis.ticks == null) - options.xaxis.ticks = options.xaxis.noTicks; - if (options.yaxis.noTicks && options.yaxis.ticks == null) - options.yaxis.ticks = options.yaxis.noTicks; - if (options.grid.coloredAreas) - options.grid.markings = options.grid.coloredAreas; - if (options.grid.coloredAreasColor) - options.grid.markingsColor = options.grid.coloredAreasColor; - if (options.lines) - $.extend(true, options.series.lines, options.lines); - if (options.points) - $.extend(true, options.series.points, options.points); - if (options.bars) - $.extend(true, options.series.bars, options.bars); - if (options.shadowSize) - options.series.shadowSize = options.shadowSize; - - for (var n in hooks) - if (options.hooks[n] && options.hooks[n].length) - hooks[n] = hooks[n].concat(options.hooks[n]); - - executeHooks(hooks.processOptions, [options]); - } - - function setData(d) { - series = parseData(d); - fillInSeriesOptions(); - processData(); - } - - function parseData(d) { - var res = []; - for (var i = 0; i < d.length; ++i) { - var s = $.extend(true, {}, options.series); - - if (d[i].data) { - s.data = d[i].data; // move the data instead of deep-copy - delete d[i].data; - - $.extend(true, s, d[i]); - - d[i].data = s.data; - } - else - s.data = d[i]; - res.push(s); - } - - return res; - } - - function axisSpecToRealAxis(obj, attr) { - var a = obj[attr]; - if (!a || a == 1) - return axes[attr]; - if (typeof a == "number") - return axes[attr.charAt(0) + a + attr.slice(1)]; - return a; // assume it's OK - } - - function fillInSeriesOptions() { - var i; - - // collect what we already got of colors - var neededColors = series.length, - usedColors = [], - assignedColors = []; - for (i = 0; i < series.length; ++i) { - var sc = series[i].color; - if (sc != null) { - --neededColors; - if (typeof sc == "number") - assignedColors.push(sc); - else - usedColors.push($.color.parse(series[i].color)); - } - } - - // we might need to generate more colors if higher indices - // are assigned - for (i = 0; i < assignedColors.length; ++i) { - neededColors = Math.max(neededColors, assignedColors[i] + 1); - } - - // produce colors as needed - var colors = [], variation = 0; - i = 0; - while (colors.length < neededColors) { - var c; - if (options.colors.length == i) // check degenerate case - c = $.color.make(100, 100, 100); - else - c = $.color.parse(options.colors[i]); - - // vary color if needed - var sign = variation % 2 == 1 ? -1 : 1; - c.scale('rgb', 1 + sign * Math.ceil(variation / 2) * 0.2) - - // FIXME: if we're getting to close to something else, - // we should probably skip this one - colors.push(c); - - ++i; - if (i >= options.colors.length) { - i = 0; - ++variation; - } - } - - // fill in the options - var colori = 0, s; - for (i = 0; i < series.length; ++i) { - s = series[i]; - - // assign colors - if (s.color == null) { - s.color = colors[colori].toString(); - ++colori; - } - else if (typeof s.color == "number") - s.color = colors[s.color].toString(); - - // turn on lines automatically in case nothing is set - if (s.lines.show == null) { - var v, show = true; - for (v in s) - if (s[v].show) { - show = false; - break; - } - if (show) - s.lines.show = true; - } - - // setup axes - s.xaxis = axisSpecToRealAxis(s, "xaxis"); - s.yaxis = axisSpecToRealAxis(s, "yaxis"); - } - } - - function processData() { - var topSentry = Number.POSITIVE_INFINITY, - bottomSentry = Number.NEGATIVE_INFINITY, - i, j, k, m, length, - s, points, ps, x, y, axis, val, f, p; - - for (axis in axes) { - axes[axis].datamin = topSentry; - axes[axis].datamax = bottomSentry; - axes[axis].used = false; - } - - function updateAxis(axis, min, max) { - if (min < axis.datamin) - axis.datamin = min; - if (max > axis.datamax) - axis.datamax = max; - } - - for (i = 0; i < series.length; ++i) { - s = series[i]; - s.datapoints = { points: [] }; - - executeHooks(hooks.processRawData, [ s, s.data, s.datapoints ]); - } - - // first pass: clean and copy data - for (i = 0; i < series.length; ++i) { - s = series[i]; - - var data = s.data, format = s.datapoints.format; - - if (!format) { - format = []; - // find out how to copy - format.push({ x: true, number: true, required: true }); - format.push({ y: true, number: true, required: true }); - - if (s.bars.show) - format.push({ y: true, number: true, required: false, defaultValue: 0 }); - - s.datapoints.format = format; - } - - if (s.datapoints.pointsize != null) - continue; // already filled in - - if (s.datapoints.pointsize == null) - s.datapoints.pointsize = format.length; - - ps = s.datapoints.pointsize; - points = s.datapoints.points; - - insertSteps = s.lines.show && s.lines.steps; - s.xaxis.used = s.yaxis.used = true; - - for (j = k = 0; j < data.length; ++j, k += ps) { - p = data[j]; - - var nullify = p == null; - if (!nullify) { - for (m = 0; m < ps; ++m) { - val = p[m]; - f = format[m]; - - if (f) { - if (f.number && val != null) { - val = +val; // convert to number - if (isNaN(val)) - val = null; - } - - if (val == null) { - if (f.required) - nullify = true; - - if (f.defaultValue != null) - val = f.defaultValue; - } - } - - points[k + m] = val; - } - } - - if (nullify) { - for (m = 0; m < ps; ++m) { - val = points[k + m]; - if (val != null) { - f = format[m]; - // extract min/max info - if (f.x) - updateAxis(s.xaxis, val, val); - if (f.y) - updateAxis(s.yaxis, val, val); - } - points[k + m] = null; - } - } - else { - // a little bit of line specific stuff that - // perhaps shouldn't be here, but lacking - // better means... - if (insertSteps && k > 0 - && points[k - ps] != null - && points[k - ps] != points[k] - && points[k - ps + 1] != points[k + 1]) { - // copy the point to make room for a middle point - for (m = 0; m < ps; ++m) - points[k + ps + m] = points[k + m]; - - // middle point has same y - points[k + 1] = points[k - ps + 1]; - - // we've added a point, better reflect that - k += ps; - } - } - } - } - - // give the hooks a chance to run - for (i = 0; i < series.length; ++i) { - s = series[i]; - - executeHooks(hooks.processDatapoints, [ s, s.datapoints]); - } - - // second pass: find datamax/datamin for auto-scaling - for (i = 0; i < series.length; ++i) { - s = series[i]; - points = s.datapoints.points, - ps = s.datapoints.pointsize; - - var xmin = topSentry, ymin = topSentry, - xmax = bottomSentry, ymax = bottomSentry; - - for (j = 0; j < points.length; j += ps) { - if (points[j] == null) - continue; - - for (m = 0; m < ps; ++m) { - val = points[j + m]; - f = format[m]; - if (!f) - continue; - - if (f.x) { - if (val < xmin) - xmin = val; - if (val > xmax) - xmax = val; - } - if (f.y) { - if (val < ymin) - ymin = val; - if (val > ymax) - ymax = val; - } - } - } - - if (s.bars.show) { - // make sure we got room for the bar on the dancing floor - var delta = s.bars.align == "left" ? 0 : -s.bars.barWidth/2; - if (s.bars.horizontal) { - ymin += delta; - ymax += delta + s.bars.barWidth; - } - else { - xmin += delta; - xmax += delta + s.bars.barWidth; - } - } - - updateAxis(s.xaxis, xmin, xmax); - updateAxis(s.yaxis, ymin, ymax); - } - - for (axis in axes) { - if (axes[axis].datamin == topSentry) - axes[axis].datamin = null; - if (axes[axis].datamax == bottomSentry) - axes[axis].datamax = null; - } - } - - function constructCanvas() { - function makeCanvas(width, height) { - var c = document.createElement('canvas'); - c.width = width; - c.height = height; - if ($.browser.msie) // excanvas hack - c = window.G_vmlCanvasManager.initElement(c); - return c; - } - - canvasWidth = placeholder.width(); - canvasHeight = placeholder.height(); - placeholder.html(""); // clear placeholder - if (placeholder.css("position") == 'static') - placeholder.css("position", "relative"); // for positioning labels and overlay - - if (canvasWidth <= 0 || canvasHeight <= 0) - throw "Invalid dimensions for plot, width = " + canvasWidth + ", height = " + canvasHeight; - - if ($.browser.msie) // excanvas hack - window.G_vmlCanvasManager.init_(document); // make sure everything is setup - - // the canvas - canvas = $(makeCanvas(canvasWidth, canvasHeight)).appendTo(placeholder).get(0); - ctx = canvas.getContext("2d"); - - // overlay canvas for interactive features - overlay = $(makeCanvas(canvasWidth, canvasHeight)).css({ position: 'absolute', left: 0, top: 0 }).appendTo(placeholder).get(0); - octx = overlay.getContext("2d"); - octx.stroke(); - } - - function bindEvents() { - // we include the canvas in the event holder too, because IE 7 - // sometimes has trouble with the stacking order - eventHolder = $([overlay, canvas]); - - // bind events - if (options.grid.hoverable) - eventHolder.mousemove(onMouseMove); - - if (options.grid.clickable) - eventHolder.click(onClick); - - executeHooks(hooks.bindEvents, [eventHolder]); - } - - function setupGrid() { - function setTransformationHelpers(axis, o) { - function identity(x) { return x; } - - var s, m, t = o.transform || identity, - it = o.inverseTransform; - - // add transformation helpers - if (axis == axes.xaxis || axis == axes.x2axis) { - // precompute how much the axis is scaling a point - // in canvas space - s = axis.scale = plotWidth / (t(axis.max) - t(axis.min)); - m = t(axis.min); - - // data point to canvas coordinate - if (t == identity) // slight optimization - axis.p2c = function (p) { return (p - m) * s; }; - else - axis.p2c = function (p) { return (t(p) - m) * s; }; - // canvas coordinate to data point - if (!it) - axis.c2p = function (c) { return m + c / s; }; - else - axis.c2p = function (c) { return it(m + c / s); }; - } - else { - s = axis.scale = plotHeight / (t(axis.max) - t(axis.min)); - m = t(axis.max); - - if (t == identity) - axis.p2c = function (p) { return (m - p) * s; }; - else - axis.p2c = function (p) { return (m - t(p)) * s; }; - if (!it) - axis.c2p = function (c) { return m - c / s; }; - else - axis.c2p = function (c) { return it(m - c / s); }; - } - } - - function measureLabels(axis, axisOptions) { - var i, labels = [], l; - - axis.labelWidth = axisOptions.labelWidth; - axis.labelHeight = axisOptions.labelHeight; - - if (axis == axes.xaxis || axis == axes.x2axis) { - // to avoid measuring the widths of the labels, we - // construct fixed-size boxes and put the labels inside - // them, we don't need the exact figures and the - // fixed-size box content is easy to center - if (axis.labelWidth == null) - axis.labelWidth = canvasWidth / (axis.ticks.length > 0 ? axis.ticks.length : 1); - - // measure x label heights - if (axis.labelHeight == null) { - labels = []; - for (i = 0; i < axis.ticks.length; ++i) { - l = axis.ticks[i].label; - if (l) - labels.push('
    ' + l + '
    '); - } - - if (labels.length > 0) { - var dummyDiv = $('
    ' - + labels.join("") + '
    ').appendTo(placeholder); - axis.labelHeight = dummyDiv.height(); - dummyDiv.remove(); - } - } - } - else if (axis.labelWidth == null || axis.labelHeight == null) { - // calculate y label dimensions - for (i = 0; i < axis.ticks.length; ++i) { - l = axis.ticks[i].label; - if (l) - labels.push('
    ' + l + '
    '); - } - - if (labels.length > 0) { - var dummyDiv = $('
    ' - + labels.join("") + '
    ').appendTo(placeholder); - if (axis.labelWidth == null) - axis.labelWidth = dummyDiv.width(); - if (axis.labelHeight == null) - axis.labelHeight = dummyDiv.find("div").height(); - dummyDiv.remove(); - } - - } - - if (axis.labelWidth == null) - axis.labelWidth = 0; - if (axis.labelHeight == null) - axis.labelHeight = 0; - } - - function setGridSpacing() { - // get the most space needed around the grid for things - // that may stick out - var maxOutset = options.grid.borderWidth; - for (i = 0; i < series.length; ++i) - maxOutset = Math.max(maxOutset, 2 * (series[i].points.radius + series[i].points.lineWidth/2)); - - plotOffset.left = plotOffset.right = plotOffset.top = plotOffset.bottom = maxOutset; - - var margin = options.grid.labelMargin + options.grid.borderWidth; - - if (axes.xaxis.labelHeight > 0) - plotOffset.bottom = Math.max(maxOutset, axes.xaxis.labelHeight + margin); - if (axes.yaxis.labelWidth > 0) - plotOffset.left = Math.max(maxOutset, axes.yaxis.labelWidth + margin); - if (axes.x2axis.labelHeight > 0) - plotOffset.top = Math.max(maxOutset, axes.x2axis.labelHeight + margin); - if (axes.y2axis.labelWidth > 0) - plotOffset.right = Math.max(maxOutset, axes.y2axis.labelWidth + margin); - - plotWidth = canvasWidth - plotOffset.left - plotOffset.right; - plotHeight = canvasHeight - plotOffset.bottom - plotOffset.top; - } - - var axis; - for (axis in axes) - setRange(axes[axis], options[axis]); - - if (options.grid.show) { - for (axis in axes) { - prepareTickGeneration(axes[axis], options[axis]); - setTicks(axes[axis], options[axis]); - measureLabels(axes[axis], options[axis]); - } - - setGridSpacing(); - } - else { - plotOffset.left = plotOffset.right = plotOffset.top = plotOffset.bottom = 0; - plotWidth = canvasWidth; - plotHeight = canvasHeight; - } - - for (axis in axes) - setTransformationHelpers(axes[axis], options[axis]); - - if (options.grid.show) - insertLabels(); - - insertLegend(); - } - - function setRange(axis, axisOptions) { - var min = +(axisOptions.min != null ? axisOptions.min : axis.datamin), - max = +(axisOptions.max != null ? axisOptions.max : axis.datamax), - delta = max - min; - - if (delta == 0.0) { - // degenerate case - var widen = max == 0 ? 1 : 0.01; - - if (axisOptions.min == null) - min -= widen; - // alway widen max if we couldn't widen min to ensure we - // don't fall into min == max which doesn't work - if (axisOptions.max == null || axisOptions.min != null) - max += widen; - } - else { - // consider autoscaling - var margin = axisOptions.autoscaleMargin; - if (margin != null) { - if (axisOptions.min == null) { - min -= delta * margin; - // make sure we don't go below zero if all values - // are positive - if (min < 0 && axis.datamin != null && axis.datamin >= 0) - min = 0; - } - if (axisOptions.max == null) { - max += delta * margin; - if (max > 0 && axis.datamax != null && axis.datamax <= 0) - max = 0; - } - } - } - axis.min = min; - axis.max = max; - } - - function prepareTickGeneration(axis, axisOptions) { - // estimate number of ticks - var noTicks; - if (typeof axisOptions.ticks == "number" && axisOptions.ticks > 0) - noTicks = axisOptions.ticks; - else if (axis == axes.xaxis || axis == axes.x2axis) - // heuristic based on the model a*sqrt(x) fitted to - // some reasonable data points - noTicks = 0.3 * Math.sqrt(canvasWidth); - else - noTicks = 0.3 * Math.sqrt(canvasHeight); - - var delta = (axis.max - axis.min) / noTicks, - size, generator, unit, formatter, i, magn, norm; - - if (axisOptions.mode == "time") { - // pretty handling of time - - // map of app. size of time units in milliseconds - var timeUnitSize = { - "second": 1000, - "minute": 60 * 1000, - "hour": 60 * 60 * 1000, - "day": 24 * 60 * 60 * 1000, - "month": 30 * 24 * 60 * 60 * 1000, - "year": 365.2425 * 24 * 60 * 60 * 1000 - }; - - - // the allowed tick sizes, after 1 year we use - // an integer algorithm - var spec = [ - [1, "second"], [2, "second"], [5, "second"], [10, "second"], - [30, "second"], - [1, "minute"], [2, "minute"], [5, "minute"], [10, "minute"], - [30, "minute"], - [1, "hour"], [2, "hour"], [4, "hour"], - [8, "hour"], [12, "hour"], - [1, "day"], [2, "day"], [3, "day"], - [0.25, "month"], [0.5, "month"], [1, "month"], - [2, "month"], [3, "month"], [6, "month"], - [1, "year"] - ]; - - var minSize = 0; - if (axisOptions.minTickSize != null) { - if (typeof axisOptions.tickSize == "number") - minSize = axisOptions.tickSize; - else - minSize = axisOptions.minTickSize[0] * timeUnitSize[axisOptions.minTickSize[1]]; - } - - for (i = 0; i < spec.length - 1; ++i) - if (delta < (spec[i][0] * timeUnitSize[spec[i][1]] - + spec[i + 1][0] * timeUnitSize[spec[i + 1][1]]) / 2 - && spec[i][0] * timeUnitSize[spec[i][1]] >= minSize) - break; - size = spec[i][0]; - unit = spec[i][1]; - - // special-case the possibility of several years - if (unit == "year") { - magn = Math.pow(10, Math.floor(Math.log(delta / timeUnitSize.year) / Math.LN10)); - norm = (delta / timeUnitSize.year) / magn; - if (norm < 1.5) - size = 1; - else if (norm < 3) - size = 2; - else if (norm < 7.5) - size = 5; - else - size = 10; - - size *= magn; - } - - if (axisOptions.tickSize) { - size = axisOptions.tickSize[0]; - unit = axisOptions.tickSize[1]; - } - - generator = function(axis) { - var ticks = [], - tickSize = axis.tickSize[0], unit = axis.tickSize[1], - d = new Date(axis.min); - - var step = tickSize * timeUnitSize[unit]; - - if (unit == "second") - d.setUTCSeconds(floorInBase(d.getUTCSeconds(), tickSize)); - if (unit == "minute") - d.setUTCMinutes(floorInBase(d.getUTCMinutes(), tickSize)); - if (unit == "hour") - d.setUTCHours(floorInBase(d.getUTCHours(), tickSize)); - if (unit == "month") - d.setUTCMonth(floorInBase(d.getUTCMonth(), tickSize)); - if (unit == "year") - d.setUTCFullYear(floorInBase(d.getUTCFullYear(), tickSize)); - - // reset smaller components - d.setUTCMilliseconds(0); - if (step >= timeUnitSize.minute) - d.setUTCSeconds(0); - if (step >= timeUnitSize.hour) - d.setUTCMinutes(0); - if (step >= timeUnitSize.day) - d.setUTCHours(0); - if (step >= timeUnitSize.day * 4) - d.setUTCDate(1); - if (step >= timeUnitSize.year) - d.setUTCMonth(0); - - - var carry = 0, v = Number.NaN, prev; - do { - prev = v; - v = d.getTime(); - ticks.push({ v: v, label: axis.tickFormatter(v, axis) }); - if (unit == "month") { - if (tickSize < 1) { - // a bit complicated - we'll divide the month - // up but we need to take care of fractions - // so we don't end up in the middle of a day - d.setUTCDate(1); - var start = d.getTime(); - d.setUTCMonth(d.getUTCMonth() + 1); - var end = d.getTime(); - d.setTime(v + carry * timeUnitSize.hour + (end - start) * tickSize); - carry = d.getUTCHours(); - d.setUTCHours(0); - } - else - d.setUTCMonth(d.getUTCMonth() + tickSize); - } - else if (unit == "year") { - d.setUTCFullYear(d.getUTCFullYear() + tickSize); - } - else - d.setTime(v + step); - } while (v < axis.max && v != prev); - - return ticks; - }; - - formatter = function (v, axis) { - var d = new Date(v); - - // first check global format - if (axisOptions.timeformat != null) - return $.plot.formatDate(d, axisOptions.timeformat, axisOptions.monthNames); - - var t = axis.tickSize[0] * timeUnitSize[axis.tickSize[1]]; - var span = axis.max - axis.min; - var suffix = (axisOptions.twelveHourClock) ? " %p" : ""; - - if (t < timeUnitSize.minute) - fmt = "%h:%M:%S" + suffix; - else if (t < timeUnitSize.day) { - if (span < 2 * timeUnitSize.day) - fmt = "%h:%M" + suffix; - else - fmt = "%b %d %h:%M" + suffix; - } - else if (t < timeUnitSize.month) - fmt = "%b %d"; - else if (t < timeUnitSize.year) { - if (span < timeUnitSize.year) - fmt = "%b"; - else - fmt = "%b %y"; - } - else - fmt = "%y"; - - return $.plot.formatDate(d, fmt, axisOptions.monthNames); - }; - } - else { - // pretty rounding of base-10 numbers - var maxDec = axisOptions.tickDecimals; - var dec = -Math.floor(Math.log(delta) / Math.LN10); - if (maxDec != null && dec > maxDec) - dec = maxDec; - - magn = Math.pow(10, -dec); - norm = delta / magn; // norm is between 1.0 and 10.0 - - if (norm < 1.5) - size = 1; - else if (norm < 3) { - size = 2; - // special case for 2.5, requires an extra decimal - if (norm > 2.25 && (maxDec == null || dec + 1 <= maxDec)) { - size = 2.5; - ++dec; - } - } - else if (norm < 7.5) - size = 5; - else - size = 10; - - size *= magn; - - if (axisOptions.minTickSize != null && size < axisOptions.minTickSize) - size = axisOptions.minTickSize; - - if (axisOptions.tickSize != null) - size = axisOptions.tickSize; - - axis.tickDecimals = Math.max(0, (maxDec != null) ? maxDec : dec); - - generator = function (axis) { - var ticks = []; - - // spew out all possible ticks - var start = floorInBase(axis.min, axis.tickSize), - i = 0, v = Number.NaN, prev; - do { - prev = v; - v = start + i * axis.tickSize; - ticks.push({ v: v, label: axis.tickFormatter(v, axis) }); - ++i; - } while (v < axis.max && v != prev); - return ticks; - }; - - formatter = function (v, axis) { - return v.toFixed(axis.tickDecimals); - }; - } - - axis.tickSize = unit ? [size, unit] : size; - axis.tickGenerator = generator; - if ($.isFunction(axisOptions.tickFormatter)) - axis.tickFormatter = function (v, axis) { return "" + axisOptions.tickFormatter(v, axis); }; - else - axis.tickFormatter = formatter; - } - - function setTicks(axis, axisOptions) { - axis.ticks = []; - - if (!axis.used) - return; - - if (axisOptions.ticks == null) - axis.ticks = axis.tickGenerator(axis); - else if (typeof axisOptions.ticks == "number") { - if (axisOptions.ticks > 0) - axis.ticks = axis.tickGenerator(axis); - } - else if (axisOptions.ticks) { - var ticks = axisOptions.ticks; - - if ($.isFunction(ticks)) - // generate the ticks - ticks = ticks({ min: axis.min, max: axis.max }); - - // clean up the user-supplied ticks, copy them over - var i, v; - for (i = 0; i < ticks.length; ++i) { - var label = null; - var t = ticks[i]; - if (typeof t == "object") { - v = t[0]; - if (t.length > 1) - label = t[1]; - } - else - v = t; - if (label == null) - label = axis.tickFormatter(v, axis); - axis.ticks[i] = { v: v, label: label }; - } - } - - if (axisOptions.autoscaleMargin != null && axis.ticks.length > 0) { - // snap to ticks - if (axisOptions.min == null) - axis.min = Math.min(axis.min, axis.ticks[0].v); - if (axisOptions.max == null && axis.ticks.length > 1) - axis.max = Math.max(axis.max, axis.ticks[axis.ticks.length - 1].v); - } - } - - function draw() { - ctx.clearRect(0, 0, canvasWidth, canvasHeight); - - var grid = options.grid; - - if (grid.show && !grid.aboveData) - drawGrid(); - - for (var i = 0; i < series.length; ++i) - drawSeries(series[i]); - - executeHooks(hooks.draw, [ctx]); - - if (grid.show && grid.aboveData) - drawGrid(); - } - - function extractRange(ranges, coord) { - var firstAxis = coord + "axis", - secondaryAxis = coord + "2axis", - axis, from, to, reverse; - - if (ranges[firstAxis]) { - axis = axes[firstAxis]; - from = ranges[firstAxis].from; - to = ranges[firstAxis].to; - } - else if (ranges[secondaryAxis]) { - axis = axes[secondaryAxis]; - from = ranges[secondaryAxis].from; - to = ranges[secondaryAxis].to; - } - else { - // backwards-compat stuff - to be removed in future - axis = axes[firstAxis]; - from = ranges[coord + "1"]; - to = ranges[coord + "2"]; - } - - // auto-reverse as an added bonus - if (from != null && to != null && from > to) - return { from: to, to: from, axis: axis }; - - return { from: from, to: to, axis: axis }; - } - - function drawGrid() { - var i; - - ctx.save(); - ctx.translate(plotOffset.left, plotOffset.top); - - // draw background, if any - if (options.grid.backgroundColor) { - ctx.fillStyle = getColorOrGradient(options.grid.backgroundColor, plotHeight, 0, "rgba(255, 255, 255, 0)"); - ctx.fillRect(0, 0, plotWidth, plotHeight); - } - - // draw markings - var markings = options.grid.markings; - if (markings) { - if ($.isFunction(markings)) - // xmin etc. are backwards-compatible, to be removed in future - markings = markings({ xmin: axes.xaxis.min, xmax: axes.xaxis.max, ymin: axes.yaxis.min, ymax: axes.yaxis.max, xaxis: axes.xaxis, yaxis: axes.yaxis, x2axis: axes.x2axis, y2axis: axes.y2axis }); - - for (i = 0; i < markings.length; ++i) { - var m = markings[i], - xrange = extractRange(m, "x"), - yrange = extractRange(m, "y"); - - // fill in missing - if (xrange.from == null) - xrange.from = xrange.axis.min; - if (xrange.to == null) - xrange.to = xrange.axis.max; - if (yrange.from == null) - yrange.from = yrange.axis.min; - if (yrange.to == null) - yrange.to = yrange.axis.max; - - // clip - if (xrange.to < xrange.axis.min || xrange.from > xrange.axis.max || - yrange.to < yrange.axis.min || yrange.from > yrange.axis.max) - continue; - - xrange.from = Math.max(xrange.from, xrange.axis.min); - xrange.to = Math.min(xrange.to, xrange.axis.max); - yrange.from = Math.max(yrange.from, yrange.axis.min); - yrange.to = Math.min(yrange.to, yrange.axis.max); - - if (xrange.from == xrange.to && yrange.from == yrange.to) - continue; - - // then draw - xrange.from = xrange.axis.p2c(xrange.from); - xrange.to = xrange.axis.p2c(xrange.to); - yrange.from = yrange.axis.p2c(yrange.from); - yrange.to = yrange.axis.p2c(yrange.to); - - if (xrange.from == xrange.to || yrange.from == yrange.to) { - // draw line - ctx.beginPath(); - ctx.strokeStyle = m.color || options.grid.markingsColor; - ctx.lineWidth = m.lineWidth || options.grid.markingsLineWidth; - //ctx.moveTo(Math.floor(xrange.from), yrange.from); - //ctx.lineTo(Math.floor(xrange.to), yrange.to); - ctx.moveTo(xrange.from, yrange.from); - ctx.lineTo(xrange.to, yrange.to); - ctx.stroke(); - } - else { - // fill area - ctx.fillStyle = m.color || options.grid.markingsColor; - ctx.fillRect(xrange.from, yrange.to, - xrange.to - xrange.from, - yrange.from - yrange.to); - } - } - } - - // draw the inner grid - ctx.lineWidth = 1; - ctx.strokeStyle = options.grid.tickColor; - ctx.beginPath(); - var v, axis = axes.xaxis; - for (i = 0; i < axis.ticks.length; ++i) { - v = axis.ticks[i].v; - if (v <= axis.min || v >= axes.xaxis.max) - continue; // skip those lying on the axes - - ctx.moveTo(Math.floor(axis.p2c(v)) + ctx.lineWidth/2, 0); - ctx.lineTo(Math.floor(axis.p2c(v)) + ctx.lineWidth/2, plotHeight); - } - - axis = axes.yaxis; - for (i = 0; i < axis.ticks.length; ++i) { - v = axis.ticks[i].v; - if (v <= axis.min || v >= axis.max) - continue; - - ctx.moveTo(0, Math.floor(axis.p2c(v)) + ctx.lineWidth/2); - ctx.lineTo(plotWidth, Math.floor(axis.p2c(v)) + ctx.lineWidth/2); - } - - axis = axes.x2axis; - for (i = 0; i < axis.ticks.length; ++i) { - v = axis.ticks[i].v; - if (v <= axis.min || v >= axis.max) - continue; - - ctx.moveTo(Math.floor(axis.p2c(v)) + ctx.lineWidth/2, -5); - ctx.lineTo(Math.floor(axis.p2c(v)) + ctx.lineWidth/2, 5); - } - - axis = axes.y2axis; - for (i = 0; i < axis.ticks.length; ++i) { - v = axis.ticks[i].v; - if (v <= axis.min || v >= axis.max) - continue; - - ctx.moveTo(plotWidth-5, Math.floor(axis.p2c(v)) + ctx.lineWidth/2); - ctx.lineTo(plotWidth+5, Math.floor(axis.p2c(v)) + ctx.lineWidth/2); - } - - ctx.stroke(); - - if (options.grid.borderWidth) { - // draw border - var bw = options.grid.borderWidth; - ctx.lineWidth = bw; - ctx.strokeStyle = options.grid.borderColor; - ctx.strokeRect(-bw/2, -bw/2, plotWidth + bw, plotHeight + bw); - } - - ctx.restore(); - } - - function insertLabels() { - placeholder.find(".tickLabels").remove(); - - var html = ['
    ']; - - function addLabels(axis, labelGenerator) { - for (var i = 0; i < axis.ticks.length; ++i) { - var tick = axis.ticks[i]; - if (!tick.label || tick.v < axis.min || tick.v > axis.max) - continue; - html.push(labelGenerator(tick, axis)); - } - } - - var margin = options.grid.labelMargin + options.grid.borderWidth; - - addLabels(axes.xaxis, function (tick, axis) { - return '
    ' + tick.label + "
    "; - }); - - - addLabels(axes.yaxis, function (tick, axis) { - return '
    ' + tick.label + "
    "; - }); - - addLabels(axes.x2axis, function (tick, axis) { - return '
    ' + tick.label + "
    "; - }); - - addLabels(axes.y2axis, function (tick, axis) { - return '
    ' + tick.label + "
    "; - }); - - html.push('
    '); - - placeholder.append(html.join("")); - } - - function drawSeries(series) { - if (series.lines.show) - drawSeriesLines(series); - if (series.bars.show) - drawSeriesBars(series); - if (series.points.show) - drawSeriesPoints(series); - } - - function drawSeriesLines(series) { - function plotLine(datapoints, xoffset, yoffset, axisx, axisy) { - var points = datapoints.points, - ps = datapoints.pointsize, - prevx = null, prevy = null; - - ctx.beginPath(); - for (var i = ps; i < points.length; i += ps) { - var x1 = points[i - ps], y1 = points[i - ps + 1], - x2 = points[i], y2 = points[i + 1]; - - if (x1 == null || x2 == null) - continue; - - // clip with ymin - if (y1 <= y2 && y1 < axisy.min) { - if (y2 < axisy.min) - continue; // line segment is outside - // compute new intersection point - x1 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1; - y1 = axisy.min; - } - else if (y2 <= y1 && y2 < axisy.min) { - if (y1 < axisy.min) - continue; - x2 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1; - y2 = axisy.min; - } - - // clip with ymax - if (y1 >= y2 && y1 > axisy.max) { - if (y2 > axisy.max) - continue; - x1 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1; - y1 = axisy.max; - } - else if (y2 >= y1 && y2 > axisy.max) { - if (y1 > axisy.max) - continue; - x2 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1; - y2 = axisy.max; - } - - // clip with xmin - if (x1 <= x2 && x1 < axisx.min) { - if (x2 < axisx.min) - continue; - y1 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1; - x1 = axisx.min; - } - else if (x2 <= x1 && x2 < axisx.min) { - if (x1 < axisx.min) - continue; - y2 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1; - x2 = axisx.min; - } - - // clip with xmax - if (x1 >= x2 && x1 > axisx.max) { - if (x2 > axisx.max) - continue; - y1 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1; - x1 = axisx.max; - } - else if (x2 >= x1 && x2 > axisx.max) { - if (x1 > axisx.max) - continue; - y2 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1; - x2 = axisx.max; - } - - if (x1 != prevx || y1 != prevy) - ctx.moveTo(axisx.p2c(x1) + xoffset, axisy.p2c(y1) + yoffset); - - prevx = x2; - prevy = y2; - ctx.lineTo(axisx.p2c(x2) + xoffset, axisy.p2c(y2) + yoffset); - } - ctx.stroke(); - } - - function plotLineArea(datapoints, axisx, axisy) { - var points = datapoints.points, - ps = datapoints.pointsize, - bottom = Math.min(Math.max(0, axisy.min), axisy.max), - top, lastX = 0, areaOpen = false; - - for (var i = ps; i < points.length; i += ps) { - var x1 = points[i - ps], y1 = points[i - ps + 1], - x2 = points[i], y2 = points[i + 1]; - - if (areaOpen && x1 != null && x2 == null) { - // close area - ctx.lineTo(axisx.p2c(lastX), axisy.p2c(bottom)); - ctx.fill(); - areaOpen = false; - continue; - } - - if (x1 == null || x2 == null) - continue; - - // clip x values - - // clip with xmin - if (x1 <= x2 && x1 < axisx.min) { - if (x2 < axisx.min) - continue; - y1 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1; - x1 = axisx.min; - } - else if (x2 <= x1 && x2 < axisx.min) { - if (x1 < axisx.min) - continue; - y2 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1; - x2 = axisx.min; - } - - // clip with xmax - if (x1 >= x2 && x1 > axisx.max) { - if (x2 > axisx.max) - continue; - y1 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1; - x1 = axisx.max; - } - else if (x2 >= x1 && x2 > axisx.max) { - if (x1 > axisx.max) - continue; - y2 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1; - x2 = axisx.max; - } - - if (!areaOpen) { - // open area - ctx.beginPath(); - ctx.moveTo(axisx.p2c(x1), axisy.p2c(bottom)); - areaOpen = true; - } - - // now first check the case where both is outside - if (y1 >= axisy.max && y2 >= axisy.max) { - ctx.lineTo(axisx.p2c(x1), axisy.p2c(axisy.max)); - ctx.lineTo(axisx.p2c(x2), axisy.p2c(axisy.max)); - lastX = x2; - continue; - } - else if (y1 <= axisy.min && y2 <= axisy.min) { - ctx.lineTo(axisx.p2c(x1), axisy.p2c(axisy.min)); - ctx.lineTo(axisx.p2c(x2), axisy.p2c(axisy.min)); - lastX = x2; - continue; - } - - // else it's a bit more complicated, there might - // be two rectangles and two triangles we need to fill - // in; to find these keep track of the current x values - var x1old = x1, x2old = x2; - - // and clip the y values, without shortcutting - - // clip with ymin - if (y1 <= y2 && y1 < axisy.min && y2 >= axisy.min) { - x1 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1; - y1 = axisy.min; - } - else if (y2 <= y1 && y2 < axisy.min && y1 >= axisy.min) { - x2 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1; - y2 = axisy.min; - } - - // clip with ymax - if (y1 >= y2 && y1 > axisy.max && y2 <= axisy.max) { - x1 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1; - y1 = axisy.max; - } - else if (y2 >= y1 && y2 > axisy.max && y1 <= axisy.max) { - x2 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1; - y2 = axisy.max; - } - - - // if the x value was changed we got a rectangle - // to fill - if (x1 != x1old) { - if (y1 <= axisy.min) - top = axisy.min; - else - top = axisy.max; - - ctx.lineTo(axisx.p2c(x1old), axisy.p2c(top)); - ctx.lineTo(axisx.p2c(x1), axisy.p2c(top)); - } - - // fill the triangles - ctx.lineTo(axisx.p2c(x1), axisy.p2c(y1)); - ctx.lineTo(axisx.p2c(x2), axisy.p2c(y2)); - - // fill the other rectangle if it's there - if (x2 != x2old) { - if (y2 <= axisy.min) - top = axisy.min; - else - top = axisy.max; - - ctx.lineTo(axisx.p2c(x2), axisy.p2c(top)); - ctx.lineTo(axisx.p2c(x2old), axisy.p2c(top)); - } - - lastX = Math.max(x2, x2old); - } - - if (areaOpen) { - ctx.lineTo(axisx.p2c(lastX), axisy.p2c(bottom)); - ctx.fill(); - } - } - - ctx.save(); - ctx.translate(plotOffset.left, plotOffset.top); - ctx.lineJoin = "round"; - - var lw = series.lines.lineWidth, - sw = series.shadowSize; - // FIXME: consider another form of shadow when filling is turned on - if (lw > 0 && sw > 0) { - // draw shadow as a thick and thin line with transparency - ctx.lineWidth = sw; - ctx.strokeStyle = "rgba(0,0,0,0.1)"; - // position shadow at angle from the mid of line - var angle = Math.PI/18; - plotLine(series.datapoints, Math.sin(angle) * (lw/2 + sw/2), Math.cos(angle) * (lw/2 + sw/2), series.xaxis, series.yaxis); - ctx.lineWidth = sw/2; - plotLine(series.datapoints, Math.sin(angle) * (lw/2 + sw/4), Math.cos(angle) * (lw/2 + sw/4), series.xaxis, series.yaxis); - } - - ctx.lineWidth = lw; - ctx.strokeStyle = series.color; - var fillStyle = getFillStyle(series.lines, series.color, 0, plotHeight); - if (fillStyle) { - ctx.fillStyle = fillStyle; - plotLineArea(series.datapoints, series.xaxis, series.yaxis); - } - - if (lw > 0) - plotLine(series.datapoints, 0, 0, series.xaxis, series.yaxis); - ctx.restore(); - } - - function drawSeriesPoints(series) { - function plotPoints(datapoints, radius, fillStyle, offset, circumference, axisx, axisy) { - var points = datapoints.points, ps = datapoints.pointsize; - - for (var i = 0; i < points.length; i += ps) { - var x = points[i], y = points[i + 1]; - if (x == null || x < axisx.min || x > axisx.max || y < axisy.min || y > axisy.max) - continue; - - ctx.beginPath(); - ctx.arc(axisx.p2c(x), axisy.p2c(y) + offset, radius, 0, circumference, false); - if (fillStyle) { - ctx.fillStyle = fillStyle; - ctx.fill(); - } - ctx.stroke(); - } - } - - ctx.save(); - ctx.translate(plotOffset.left, plotOffset.top); - - var lw = series.lines.lineWidth, - sw = series.shadowSize, - radius = series.points.radius; - if (lw > 0 && sw > 0) { - // draw shadow in two steps - var w = sw / 2; - ctx.lineWidth = w; - ctx.strokeStyle = "rgba(0,0,0,0.1)"; - plotPoints(series.datapoints, radius, null, w + w/2, Math.PI, - series.xaxis, series.yaxis); - - ctx.strokeStyle = "rgba(0,0,0,0.2)"; - plotPoints(series.datapoints, radius, null, w/2, Math.PI, - series.xaxis, series.yaxis); - } - - ctx.lineWidth = lw; - ctx.strokeStyle = series.color; - plotPoints(series.datapoints, radius, - getFillStyle(series.points, series.color), 0, 2 * Math.PI, - series.xaxis, series.yaxis); - ctx.restore(); - } - - function drawBar(x, y, b, barLeft, barRight, offset, fillStyleCallback, axisx, axisy, c, horizontal) { - var left, right, bottom, top, - drawLeft, drawRight, drawTop, drawBottom, - tmp; - - if (horizontal) { - drawBottom = drawRight = drawTop = true; - drawLeft = false; - left = b; - right = x; - top = y + barLeft; - bottom = y + barRight; - - // account for negative bars - if (right < left) { - tmp = right; - right = left; - left = tmp; - drawLeft = true; - drawRight = false; - } - } - else { - drawLeft = drawRight = drawTop = true; - drawBottom = false; - left = x + barLeft; - right = x + barRight; - bottom = b; - top = y; - - // account for negative bars - if (top < bottom) { - tmp = top; - top = bottom; - bottom = tmp; - drawBottom = true; - drawTop = false; - } - } - - // clip - if (right < axisx.min || left > axisx.max || - top < axisy.min || bottom > axisy.max) - return; - - if (left < axisx.min) { - left = axisx.min; - drawLeft = false; - } - - if (right > axisx.max) { - right = axisx.max; - drawRight = false; - } - - if (bottom < axisy.min) { - bottom = axisy.min; - drawBottom = false; - } - - if (top > axisy.max) { - top = axisy.max; - drawTop = false; - } - - left = axisx.p2c(left); - bottom = axisy.p2c(bottom); - right = axisx.p2c(right); - top = axisy.p2c(top); - - // fill the bar - if (fillStyleCallback) { - c.beginPath(); - c.moveTo(left, bottom); - c.lineTo(left, top); - c.lineTo(right, top); - c.lineTo(right, bottom); - c.fillStyle = fillStyleCallback(bottom, top); - c.fill(); - } - - // draw outline - if (drawLeft || drawRight || drawTop || drawBottom) { - c.beginPath(); - - // FIXME: inline moveTo is buggy with excanvas - c.moveTo(left, bottom + offset); - if (drawLeft) - c.lineTo(left, top + offset); - else - c.moveTo(left, top + offset); - if (drawTop) - c.lineTo(right, top + offset); - else - c.moveTo(right, top + offset); - if (drawRight) - c.lineTo(right, bottom + offset); - else - c.moveTo(right, bottom + offset); - if (drawBottom) - c.lineTo(left, bottom + offset); - else - c.moveTo(left, bottom + offset); - c.stroke(); - } - } - - function drawSeriesBars(series) { - function plotBars(datapoints, barLeft, barRight, offset, fillStyleCallback, axisx, axisy) { - var points = datapoints.points, ps = datapoints.pointsize; - - for (var i = 0; i < points.length; i += ps) { - if (points[i] == null) - continue; - drawBar(points[i], points[i + 1], points[i + 2], barLeft, barRight, offset, fillStyleCallback, axisx, axisy, ctx, series.bars.horizontal); - } - } - - ctx.save(); - ctx.translate(plotOffset.left, plotOffset.top); - - // FIXME: figure out a way to add shadows (for instance along the right edge) - ctx.lineWidth = series.bars.lineWidth; - ctx.strokeStyle = series.color; - var barLeft = series.bars.align == "left" ? 0 : -series.bars.barWidth/2; - var fillStyleCallback = series.bars.fill ? function (bottom, top) { return getFillStyle(series.bars, series.color, bottom, top); } : null; - plotBars(series.datapoints, barLeft, barLeft + series.bars.barWidth, 0, fillStyleCallback, series.xaxis, series.yaxis); - ctx.restore(); - } - - function getFillStyle(filloptions, seriesColor, bottom, top) { - var fill = filloptions.fill; - if (!fill) - return null; - - if (filloptions.fillColor) - return getColorOrGradient(filloptions.fillColor, bottom, top, seriesColor); - - var c = $.color.parse(seriesColor); - c.a = typeof fill == "number" ? fill : 0.4; - c.normalize(); - return c.toString(); - } - - function insertLegend() { - placeholder.find(".legend").remove(); - - if (!options.legend.show) - return; - - var fragments = [], rowStarted = false, - lf = options.legend.labelFormatter, s, label; - for (i = 0; i < series.length; ++i) { - s = series[i]; - label = s.label; - if (!label) - continue; - - if (i % options.legend.noColumns == 0) { - if (rowStarted) - fragments.push(''); - fragments.push(''); - rowStarted = true; - } - - if (lf) - label = lf(label, s); - - fragments.push( - '
    ' + - '' + label + ''); - } - if (rowStarted) - fragments.push(''); - - if (fragments.length == 0) - return; - - var table = '' + fragments.join("") + '
    '; - if (options.legend.container != null) - $(options.legend.container).html(table); - else { - var pos = "", - p = options.legend.position, - m = options.legend.margin; - if (m[0] == null) - m = [m, m]; - if (p.charAt(0) == "n") - pos += 'top:' + (m[1] + plotOffset.top) + 'px;'; - else if (p.charAt(0) == "s") - pos += 'bottom:' + (m[1] + plotOffset.bottom) + 'px;'; - if (p.charAt(1) == "e") - pos += 'right:' + (m[0] + plotOffset.right) + 'px;'; - else if (p.charAt(1) == "w") - pos += 'left:' + (m[0] + plotOffset.left) + 'px;'; - var legend = $('
    ' + table.replace('style="', 'style="position:absolute;' + pos +';') + '
    ').appendTo(placeholder); - if (options.legend.backgroundOpacity != 0.0) { - // put in the transparent background - // separately to avoid blended labels and - // label boxes - var c = options.legend.backgroundColor; - if (c == null) { - c = options.grid.backgroundColor; - if (c && typeof c == "string") - c = $.color.parse(c); - else - c = $.color.extract(legend, 'background-color'); - c.a = 1; - c = c.toString(); - } - var div = legend.children(); - $('
    ').prependTo(legend).css('opacity', options.legend.backgroundOpacity); - } - } - } - - - // interactive features - - var highlights = [], - redrawTimeout = null; - - // returns the data item the mouse is over, or null if none is found - function findNearbyItem(mouseX, mouseY, seriesFilter) { - var maxDistance = options.grid.mouseActiveRadius, - smallestDistance = maxDistance * maxDistance + 1, - item = null, foundPoint = false, i, j; - - for (i = 0; i < series.length; ++i) { - if (!seriesFilter(series[i])) - continue; - - var s = series[i], - axisx = s.xaxis, - axisy = s.yaxis, - points = s.datapoints.points, - ps = s.datapoints.pointsize, - mx = axisx.c2p(mouseX), // precompute some stuff to make the loop faster - my = axisy.c2p(mouseY), - maxx = maxDistance / axisx.scale, - maxy = maxDistance / axisy.scale; - - if (s.lines.show || s.points.show) { - for (j = 0; j < points.length; j += ps) { - var x = points[j], y = points[j + 1]; - if (x == null) - continue; - - // For points and lines, the cursor must be within a - // certain distance to the data point - if (x - mx > maxx || x - mx < -maxx || - y - my > maxy || y - my < -maxy) - continue; - - // We have to calculate distances in pixels, not in - // data units, because the scales of the axes may be different - var dx = Math.abs(axisx.p2c(x) - mouseX), - dy = Math.abs(axisy.p2c(y) - mouseY), - dist = dx * dx + dy * dy; // we save the sqrt - - // use <= to ensure last point takes precedence - // (last generally means on top of) - if (dist <= smallestDistance) { - smallestDistance = dist; - item = [i, j / ps]; - } - } - } - - if (s.bars.show && !item) { // no other point can be nearby - var barLeft = s.bars.align == "left" ? 0 : -s.bars.barWidth/2, - barRight = barLeft + s.bars.barWidth; - - for (j = 0; j < points.length; j += ps) { - var x = points[j], y = points[j + 1], b = points[j + 2]; - if (x == null) - continue; - - // for a bar graph, the cursor must be inside the bar - if (series[i].bars.horizontal ? - (mx <= Math.max(b, x) && mx >= Math.min(b, x) && - my >= y + barLeft && my <= y + barRight) : - (mx >= x + barLeft && mx <= x + barRight && - my >= Math.min(b, y) && my <= Math.max(b, y))) - item = [i, j / ps]; - } - } - } - - if (item) { - i = item[0]; - j = item[1]; - ps = series[i].datapoints.pointsize; - - return { datapoint: series[i].datapoints.points.slice(j * ps, (j + 1) * ps), - dataIndex: j, - series: series[i], - seriesIndex: i }; - } - - return null; - } - - function onMouseMove(e) { - if (options.grid.hoverable) - triggerClickHoverEvent("plothover", e, - function (s) { return s["hoverable"] != false; }); - } - - function onClick(e) { - triggerClickHoverEvent("plotclick", e, - function (s) { return s["clickable"] != false; }); - } - - // trigger click or hover event (they send the same parameters - // so we share their code) - function triggerClickHoverEvent(eventname, event, seriesFilter) { - var offset = eventHolder.offset(), - pos = { pageX: event.pageX, pageY: event.pageY }, - canvasX = event.pageX - offset.left - plotOffset.left, - canvasY = event.pageY - offset.top - plotOffset.top; - - if (axes.xaxis.used) - pos.x = axes.xaxis.c2p(canvasX); - if (axes.yaxis.used) - pos.y = axes.yaxis.c2p(canvasY); - if (axes.x2axis.used) - pos.x2 = axes.x2axis.c2p(canvasX); - if (axes.y2axis.used) - pos.y2 = axes.y2axis.c2p(canvasY); - - var item = findNearbyItem(canvasX, canvasY, seriesFilter); - - if (item) { - // fill in mouse pos for any listeners out there - item.pageX = parseInt(item.series.xaxis.p2c(item.datapoint[0]) + offset.left + plotOffset.left); - item.pageY = parseInt(item.series.yaxis.p2c(item.datapoint[1]) + offset.top + plotOffset.top); - } - - if (options.grid.autoHighlight) { - // clear auto-highlights - for (var i = 0; i < highlights.length; ++i) { - var h = highlights[i]; - if (h.auto == eventname && - !(item && h.series == item.series && h.point == item.datapoint)) - unhighlight(h.series, h.point); - } - - if (item) - highlight(item.series, item.datapoint, eventname); - } - - placeholder.trigger(eventname, [ pos, item ]); - } - - function triggerRedrawOverlay() { - if (!redrawTimeout) - redrawTimeout = setTimeout(drawOverlay, 30); - } - - function drawOverlay() { - redrawTimeout = null; - - // draw highlights - octx.save(); - octx.clearRect(0, 0, canvasWidth, canvasHeight); - octx.translate(plotOffset.left, plotOffset.top); - - var i, hi; - for (i = 0; i < highlights.length; ++i) { - hi = highlights[i]; - - if (hi.series.bars.show) - drawBarHighlight(hi.series, hi.point); - else - drawPointHighlight(hi.series, hi.point); - } - octx.restore(); - - executeHooks(hooks.drawOverlay, [octx]); - } - - function highlight(s, point, auto) { - if (typeof s == "number") - s = series[s]; - - if (typeof point == "number") - point = s.data[point]; - - var i = indexOfHighlight(s, point); - if (i == -1) { - highlights.push({ series: s, point: point, auto: auto }); - - triggerRedrawOverlay(); - } - else if (!auto) - highlights[i].auto = false; - } - - function unhighlight(s, point) { - if (s == null && point == null) { - highlights = []; - triggerRedrawOverlay(); - } - - if (typeof s == "number") - s = series[s]; - - if (typeof point == "number") - point = s.data[point]; - - var i = indexOfHighlight(s, point); - if (i != -1) { - highlights.splice(i, 1); - - triggerRedrawOverlay(); - } - } - - function indexOfHighlight(s, p) { - for (var i = 0; i < highlights.length; ++i) { - var h = highlights[i]; - if (h.series == s && h.point[0] == p[0] - && h.point[1] == p[1]) - return i; - } - return -1; - } - - function drawPointHighlight(series, point) { - var x = point[0], y = point[1], - axisx = series.xaxis, axisy = series.yaxis; - - if (x < axisx.min || x > axisx.max || y < axisy.min || y > axisy.max) - return; - - var pointRadius = series.points.radius + series.points.lineWidth / 2; - octx.lineWidth = pointRadius; - octx.strokeStyle = $.color.parse(series.color).scale('a', 0.5).toString(); - var radius = 1.5 * pointRadius; - octx.beginPath(); - octx.arc(axisx.p2c(x), axisy.p2c(y), radius, 0, 2 * Math.PI, false); - octx.stroke(); - } - - function drawBarHighlight(series, point) { - octx.lineWidth = series.bars.lineWidth; - octx.strokeStyle = $.color.parse(series.color).scale('a', 0.5).toString(); - var fillStyle = $.color.parse(series.color).scale('a', 0.5).toString(); - var barLeft = series.bars.align == "left" ? 0 : -series.bars.barWidth/2; - drawBar(point[0], point[1], point[2] || 0, barLeft, barLeft + series.bars.barWidth, - 0, function () { return fillStyle; }, series.xaxis, series.yaxis, octx, series.bars.horizontal); - } - - function getColorOrGradient(spec, bottom, top, defaultColor) { - if (typeof spec == "string") - return spec; - else { - // assume this is a gradient spec; IE currently only - // supports a simple vertical gradient properly, so that's - // what we support too - var gradient = ctx.createLinearGradient(0, top, 0, bottom); - - for (var i = 0, l = spec.colors.length; i < l; ++i) { - var c = spec.colors[i]; - if (typeof c != "string") { - c = $.color.parse(defaultColor).scale('rgb', c.brightness); - c.a *= c.opacity; - c = c.toString(); - } - gradient.addColorStop(i / (l - 1), c); - } - - return gradient; - } - } - } - - $.plot = function(placeholder, data, options) { - var plot = new Plot($(placeholder), data, options, $.plot.plugins); - /*var t0 = new Date(); - var t1 = new Date(); - var tstr = "time used (msecs): " + (t1.getTime() - t0.getTime()) - if (window.console) - console.log(tstr); - else - alert(tstr);*/ - return plot; - }; - - $.plot.plugins = []; - - // returns a string with the date d formatted according to fmt - $.plot.formatDate = function(d, fmt, monthNames) { - var leftPad = function(n) { - n = "" + n; - return n.length == 1 ? "0" + n : n; - }; - - var r = []; - var escape = false; - var hours = d.getUTCHours(); - var isAM = hours < 12; - if (monthNames == null) - monthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; - - if (fmt.search(/%p|%P/) != -1) { - if (hours > 12) { - hours = hours - 12; - } else if (hours == 0) { - hours = 12; - } - } - for (var i = 0; i < fmt.length; ++i) { - var c = fmt.charAt(i); - - if (escape) { - switch (c) { - case 'h': c = "" + hours; break; - case 'H': c = leftPad(hours); break; - case 'M': c = leftPad(d.getUTCMinutes()); break; - case 'S': c = leftPad(d.getUTCSeconds()); break; - case 'd': c = "" + d.getUTCDate(); break; - case 'm': c = "" + (d.getUTCMonth() + 1); break; - case 'y': c = "" + d.getUTCFullYear(); break; - case 'b': c = "" + monthNames[d.getUTCMonth()]; break; - case 'p': c = (isAM) ? ("" + "am") : ("" + "pm"); break; - case 'P': c = (isAM) ? ("" + "AM") : ("" + "PM"); break; - } - r.push(c); - escape = false; - } - else { - if (c == "%") - escape = true; - else - r.push(c); - } - } - return r.join(""); - }; - - // round to nearby lower multiple of base - function floorInBase(n, base) { - return base * Math.floor(n / base); - } - -})(jQuery); - --- a/owa/modules/base/js/includes/jquery/flot/jquery.flot.min.js +++ /dev/null @@ -1,1 +1,1 @@ -(function(){jQuery.color={};jQuery.color.make=function(G,H,J,I){var A={};A.r=G||0;A.g=H||0;A.b=J||0;A.a=I!=null?I:1;A.add=function(C,D){for(var E=0;E=1){return"rgb("+[A.r,A.g,A.b].join(",")+")"}else{return"rgba("+[A.r,A.g,A.b,A.a].join(",")+")"}};A.normalize=function(){function C(E,D,F){return DF?F:D)}A.r=C(0,parseInt(A.r),255);A.g=C(0,parseInt(A.g),255);A.b=C(0,parseInt(A.b),255);A.a=C(0,A.a,1);return A};A.clone=function(){return jQuery.color.make(A.r,A.b,A.g,A.a)};return A.normalize()};jQuery.color.extract=function(E,F){var A;do{A=E.css(F).toLowerCase();if(A!=""&&A!="transparent"){break}E=E.parent()}while(!jQuery.nodeName(E.get(0),"body"));if(A=="rgba(0, 0, 0, 0)"){A="transparent"}return jQuery.color.parse(A)};jQuery.color.parse=function(A){var F,H=jQuery.color.make;if(F=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(A)){return H(parseInt(F[1],10),parseInt(F[2],10),parseInt(F[3],10))}if(F=/rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(A)){return H(parseInt(F[1],10),parseInt(F[2],10),parseInt(F[3],10),parseFloat(F[4]))}if(F=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(A)){return H(parseFloat(F[1])*2.55,parseFloat(F[2])*2.55,parseFloat(F[3])*2.55)}if(F=/rgba\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(A)){return H(parseFloat(F[1])*2.55,parseFloat(F[2])*2.55,parseFloat(F[3])*2.55,parseFloat(F[4]))}if(F=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(A)){return H(parseInt(F[1],16),parseInt(F[2],16),parseInt(F[3],16))}if(F=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(A)){return H(parseInt(F[1]+F[1],16),parseInt(F[2]+F[2],16),parseInt(F[3]+F[3],16))}var G=jQuery.trim(A).toLowerCase();if(G=="transparent"){return H(255,255,255,0)}else{F=B[G];return H(F[0],F[1],F[2])}};var B={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0]}})();(function(C){function B(l,W,X,E){var O=[],g={colors:["#edc240","#afd8f8","#cb4b4b","#4da74d","#9440ed"],legend:{show:true,noColumns:1,labelFormatter:null,labelBoxBorderColor:"#ccc",container:null,position:"ne",margin:5,backgroundColor:null,backgroundOpacity:0.85},xaxis:{mode:null,transform:null,inverseTransform:null,min:null,max:null,autoscaleMargin:null,ticks:null,tickFormatter:null,labelWidth:null,labelHeight:null,tickDecimals:null,tickSize:null,minTickSize:null,monthNames:null,timeformat:null,twelveHourClock:false},yaxis:{autoscaleMargin:0.02},x2axis:{autoscaleMargin:null},y2axis:{autoscaleMargin:0.02},series:{points:{show:false,radius:3,lineWidth:2,fill:true,fillColor:"#ffffff"},lines:{lineWidth:2,fill:false,fillColor:null,steps:false},bars:{show:false,lineWidth:2,barWidth:1,fill:true,fillColor:null,align:"left",horizontal:false},shadowSize:3},grid:{show:true,aboveData:false,color:"#545454",backgroundColor:null,tickColor:"rgba(0,0,0,0.15)",labelMargin:5,borderWidth:2,borderColor:null,markings:null,markingsColor:"#f4f4f4",markingsLineWidth:2,clickable:false,hoverable:false,autoHighlight:true,mouseActiveRadius:10},hooks:{}},P=null,AC=null,AD=null,Y=null,AJ=null,s={xaxis:{},yaxis:{},x2axis:{},y2axis:{}},e={left:0,right:0,top:0,bottom:0},y=0,Q=0,I=0,t=0,L={processOptions:[],processRawData:[],processDatapoints:[],draw:[],bindEvents:[],drawOverlay:[]},G=this;G.setData=f;G.setupGrid=k;G.draw=AH;G.getPlaceholder=function(){return l};G.getCanvas=function(){return P};G.getPlotOffset=function(){return e};G.width=function(){return I};G.height=function(){return t};G.offset=function(){var AK=AD.offset();AK.left+=e.left;AK.top+=e.top;return AK};G.getData=function(){return O};G.getAxes=function(){return s};G.getOptions=function(){return g};G.highlight=AE;G.unhighlight=x;G.triggerRedrawOverlay=q;G.pointOffset=function(AK){return{left:parseInt(T(AK,"xaxis").p2c(+AK.x)+e.left),top:parseInt(T(AK,"yaxis").p2c(+AK.y)+e.top)}};G.hooks=L;b(G);r(X);c();f(W);k();AH();AG();function Z(AM,AK){AK=[G].concat(AK);for(var AL=0;AL=g.colors.length){AP=0;++AO}}var AQ=0,AW;for(AP=0;APAl.datamax){Al.datamax=Aj}}for(Ac=0;Ac0&&Ab[AZ-AX]!=null&&Ab[AZ-AX]!=Ab[AZ]&&Ab[AZ-AX+1]!=Ab[AZ+1]){for(AV=0;AVAU){AU=Ai}}if(Af.y){if(AiAd){Ad=Ai}}}}if(AR.bars.show){var Ag=AR.bars.align=="left"?0:-AR.bars.barWidth/2;if(AR.bars.horizontal){AY+=Ag;Ad+=Ag+AR.bars.barWidth}else{AS+=Ag;AU+=Ag+AR.bars.barWidth}}AN(AR.xaxis,AS,AU);AN(AR.yaxis,AY,Ad)}for(AK in s){if(s[AK].datamin==AW){s[AK].datamin=null}if(s[AK].datamax==AQ){s[AK].datamax=null}}}function c(){function AK(AM,AL){var AN=document.createElement("canvas");AN.width=AM;AN.height=AL;if(C.browser.msie){AN=window.G_vmlCanvasManager.initElement(AN)}return AN}y=l.width();Q=l.height();l.html("");if(l.css("position")=="static"){l.css("position","relative")}if(y<=0||Q<=0){throw"Invalid dimensions for plot, width = "+y+", height = "+Q}if(C.browser.msie){window.G_vmlCanvasManager.init_(document)}P=C(AK(y,Q)).appendTo(l).get(0);Y=P.getContext("2d");AC=C(AK(y,Q)).css({position:"absolute",left:0,top:0}).appendTo(l).get(0);AJ=AC.getContext("2d");AJ.stroke()}function AG(){AD=C([AC,P]);if(g.grid.hoverable){AD.mousemove(D)}if(g.grid.clickable){AD.click(d)}Z(L.bindEvents,[AD])}function k(){function AL(AT,AU){function AP(AV){return AV}var AS,AO,AQ=AU.transform||AP,AR=AU.inverseTransform;if(AT==s.xaxis||AT==s.x2axis){AS=AT.scale=I/(AQ(AT.max)-AQ(AT.min));AO=AQ(AT.min);if(AQ==AP){AT.p2c=function(AV){return(AV-AO)*AS}}else{AT.p2c=function(AV){return(AQ(AV)-AO)*AS}}if(!AR){AT.c2p=function(AV){return AO+AV/AS}}else{AT.c2p=function(AV){return AR(AO+AV/AS)}}}else{AS=AT.scale=t/(AQ(AT.max)-AQ(AT.min));AO=AQ(AT.max);if(AQ==AP){AT.p2c=function(AV){return(AO-AV)*AS}}else{AT.p2c=function(AV){return(AO-AQ(AV))*AS}}if(!AR){AT.c2p=function(AV){return AO-AV/AS}}else{AT.c2p=function(AV){return AR(AO-AV/AS)}}}}function AN(AR,AT){var AQ,AS=[],AP;AR.labelWidth=AT.labelWidth;AR.labelHeight=AT.labelHeight;if(AR==s.xaxis||AR==s.x2axis){if(AR.labelWidth==null){AR.labelWidth=y/(AR.ticks.length>0?AR.ticks.length:1)}if(AR.labelHeight==null){AS=[];for(AQ=0;AQ'+AP+"
    ")}}if(AS.length>0){var AO=C('
    '+AS.join("")+'
    ').appendTo(l);AR.labelHeight=AO.height();AO.remove()}}}else{if(AR.labelWidth==null||AR.labelHeight==null){for(AQ=0;AQ'+AP+"
    ")}}if(AS.length>0){var AO=C('
    '+AS.join("")+"
    ").appendTo(l);if(AR.labelWidth==null){AR.labelWidth=AO.width()}if(AR.labelHeight==null){AR.labelHeight=AO.find("div").height()}AO.remove()}}}if(AR.labelWidth==null){AR.labelWidth=0}if(AR.labelHeight==null){AR.labelHeight=0}}function AM(){var AP=g.grid.borderWidth;for(i=0;i0){e.bottom=Math.max(AP,s.xaxis.labelHeight+AO)}if(s.yaxis.labelWidth>0){e.left=Math.max(AP,s.yaxis.labelWidth+AO)}if(s.x2axis.labelHeight>0){e.top=Math.max(AP,s.x2axis.labelHeight+AO)}if(s.y2axis.labelWidth>0){e.right=Math.max(AP,s.y2axis.labelWidth+AO)}I=y-e.left-e.right;t=Q-e.bottom-e.top}var AK;for(AK in s){K(s[AK],g[AK])}if(g.grid.show){for(AK in s){F(s[AK],g[AK]);p(s[AK],g[AK]);AN(s[AK],g[AK])}AM()}else{e.left=e.right=e.top=e.bottom=0;I=y;t=Q}for(AK in s){AL(s[AK],g[AK])}if(g.grid.show){h()}AI()}function K(AN,AQ){var AM=+(AQ.min!=null?AQ.min:AN.datamin),AK=+(AQ.max!=null?AQ.max:AN.datamax),AP=AK-AM;if(AP==0){var AL=AK==0?1:0.01;if(AQ.min==null){AM-=AL}if(AQ.max==null||AQ.min!=null){AK+=AL}}else{var AO=AQ.autoscaleMargin;if(AO!=null){if(AQ.min==null){AM-=AP*AO;if(AM<0&&AN.datamin!=null&&AN.datamin>=0){AM=0}}if(AQ.max==null){AK+=AP*AO;if(AK>0&&AN.datamax!=null&&AN.datamax<=0){AK=0}}}}AN.min=AM;AN.max=AK}function F(AP,AS){var AO;if(typeof AS.ticks=="number"&&AS.ticks>0){AO=AS.ticks}else{if(AP==s.xaxis||AP==s.x2axis){AO=0.3*Math.sqrt(y)}else{AO=0.3*Math.sqrt(Q)}}var AX=(AP.max-AP.min)/AO,AZ,AT,AV,AW,AR,AM,AL;if(AS.mode=="time"){var AU={second:1000,minute:60*1000,hour:60*60*1000,day:24*60*60*1000,month:30*24*60*60*1000,year:365.2425*24*60*60*1000};var AY=[[1,"second"],[2,"second"],[5,"second"],[10,"second"],[30,"second"],[1,"minute"],[2,"minute"],[5,"minute"],[10,"minute"],[30,"minute"],[1,"hour"],[2,"hour"],[4,"hour"],[8,"hour"],[12,"hour"],[1,"day"],[2,"day"],[3,"day"],[0.25,"month"],[0.5,"month"],[1,"month"],[2,"month"],[3,"month"],[6,"month"],[1,"year"]];var AN=0;if(AS.minTickSize!=null){if(typeof AS.tickSize=="number"){AN=AS.tickSize}else{AN=AS.minTickSize[0]*AU[AS.minTickSize[1]]}}for(AR=0;AR=AN){break}}AZ=AY[AR][0];AV=AY[AR][1];if(AV=="year"){AM=Math.pow(10,Math.floor(Math.log(AX/AU.year)/Math.LN10));AL=(AX/AU.year)/AM;if(AL<1.5){AZ=1}else{if(AL<3){AZ=2}else{if(AL<7.5){AZ=5}else{AZ=10}}}AZ*=AM}if(AS.tickSize){AZ=AS.tickSize[0];AV=AS.tickSize[1]}AT=function(Ac){var Ah=[],Af=Ac.tickSize[0],Ai=Ac.tickSize[1],Ag=new Date(Ac.min);var Ab=Af*AU[Ai];if(Ai=="second"){Ag.setUTCSeconds(A(Ag.getUTCSeconds(),Af))}if(Ai=="minute"){Ag.setUTCMinutes(A(Ag.getUTCMinutes(),Af))}if(Ai=="hour"){Ag.setUTCHours(A(Ag.getUTCHours(),Af))}if(Ai=="month"){Ag.setUTCMonth(A(Ag.getUTCMonth(),Af))}if(Ai=="year"){Ag.setUTCFullYear(A(Ag.getUTCFullYear(),Af))}Ag.setUTCMilliseconds(0);if(Ab>=AU.minute){Ag.setUTCSeconds(0)}if(Ab>=AU.hour){Ag.setUTCMinutes(0)}if(Ab>=AU.day){Ag.setUTCHours(0)}if(Ab>=AU.day*4){Ag.setUTCDate(1)}if(Ab>=AU.year){Ag.setUTCMonth(0)}var Ak=0,Aj=Number.NaN,Ad;do{Ad=Aj;Aj=Ag.getTime();Ah.push({v:Aj,label:Ac.tickFormatter(Aj,Ac)});if(Ai=="month"){if(Af<1){Ag.setUTCDate(1);var Aa=Ag.getTime();Ag.setUTCMonth(Ag.getUTCMonth()+1);var Ae=Ag.getTime();Ag.setTime(Aj+Ak*AU.hour+(Ae-Aa)*Af);Ak=Ag.getUTCHours();Ag.setUTCHours(0)}else{Ag.setUTCMonth(Ag.getUTCMonth()+Af)}}else{if(Ai=="year"){Ag.setUTCFullYear(Ag.getUTCFullYear()+Af)}else{Ag.setTime(Aj+Ab)}}}while(AjAK){AQ=AK}AM=Math.pow(10,-AQ);AL=AX/AM;if(AL<1.5){AZ=1}else{if(AL<3){AZ=2;if(AL>2.25&&(AK==null||AQ+1<=AK)){AZ=2.5;++AQ}}else{if(AL<7.5){AZ=5}else{AZ=10}}}AZ*=AM;if(AS.minTickSize!=null&&AZ0){AO.ticks=AO.tickGenerator(AO)}}else{if(AQ.ticks){var AP=AQ.ticks;if(C.isFunction(AP)){AP=AP({min:AO.min,max:AO.max})}var AN,AK;for(AN=0;AN1){AL=AM[1]}}else{AK=AM}if(AL==null){AL=AO.tickFormatter(AK,AO)}AO.ticks[AN]={v:AK,label:AL}}}}}if(AQ.autoscaleMargin!=null&&AO.ticks.length>0){if(AQ.min==null){AO.min=Math.min(AO.min,AO.ticks[0].v)}if(AQ.max==null&&AO.ticks.length>1){AO.max=Math.max(AO.max,AO.ticks[AO.ticks.length-1].v)}}}function AH(){Y.clearRect(0,0,y,Q);var AL=g.grid;if(AL.show&&!AL.aboveData){S()}for(var AK=0;AKAP){return{from:AP,to:AQ,axis:AN}}return{from:AQ,to:AP,axis:AN}}function S(){var AO;Y.save();Y.translate(e.left,e.top);if(g.grid.backgroundColor){Y.fillStyle=R(g.grid.backgroundColor,t,0,"rgba(255, 255, 255, 0)");Y.fillRect(0,0,I,t)}var AL=g.grid.markings;if(AL){if(C.isFunction(AL)){AL=AL({xmin:s.xaxis.min,xmax:s.xaxis.max,ymin:s.yaxis.min,ymax:s.yaxis.max,xaxis:s.xaxis,yaxis:s.yaxis,x2axis:s.x2axis,y2axis:s.y2axis})}for(AO=0;AOAQ.axis.max||AN.toAN.axis.max){continue}AQ.from=Math.max(AQ.from,AQ.axis.min);AQ.to=Math.min(AQ.to,AQ.axis.max);AN.from=Math.max(AN.from,AN.axis.min);AN.to=Math.min(AN.to,AN.axis.max);if(AQ.from==AQ.to&&AN.from==AN.to){continue}AQ.from=AQ.axis.p2c(AQ.from);AQ.to=AQ.axis.p2c(AQ.to);AN.from=AN.axis.p2c(AN.from);AN.to=AN.axis.p2c(AN.to);if(AQ.from==AQ.to||AN.from==AN.to){Y.beginPath();Y.strokeStyle=AK.color||g.grid.markingsColor;Y.lineWidth=AK.lineWidth||g.grid.markingsLineWidth;Y.moveTo(AQ.from,AN.from);Y.lineTo(AQ.to,AN.to);Y.stroke()}else{Y.fillStyle=AK.color||g.grid.markingsColor;Y.fillRect(AQ.from,AN.to,AQ.to-AQ.from,AN.from-AN.to)}}}Y.lineWidth=1;Y.strokeStyle=g.grid.tickColor;Y.beginPath();var AM,AP=s.xaxis;for(AO=0;AO=s.xaxis.max){continue}Y.moveTo(Math.floor(AP.p2c(AM))+Y.lineWidth/2,0);Y.lineTo(Math.floor(AP.p2c(AM))+Y.lineWidth/2,t)}AP=s.yaxis;for(AO=0;AO=AP.max){continue}Y.moveTo(0,Math.floor(AP.p2c(AM))+Y.lineWidth/2);Y.lineTo(I,Math.floor(AP.p2c(AM))+Y.lineWidth/2)}AP=s.x2axis;for(AO=0;AO=AP.max){continue}Y.moveTo(Math.floor(AP.p2c(AM))+Y.lineWidth/2,-5);Y.lineTo(Math.floor(AP.p2c(AM))+Y.lineWidth/2,5)}AP=s.y2axis;for(AO=0;AO=AP.max){continue}Y.moveTo(I-5,Math.floor(AP.p2c(AM))+Y.lineWidth/2);Y.lineTo(I+5,Math.floor(AP.p2c(AM))+Y.lineWidth/2)}Y.stroke();if(g.grid.borderWidth){var AR=g.grid.borderWidth;Y.lineWidth=AR;Y.strokeStyle=g.grid.borderColor;Y.strokeRect(-AR/2,-AR/2,I+AR,t+AR)}Y.restore()}function h(){l.find(".tickLabels").remove();var AK=['
    '];function AM(AP,AQ){for(var AO=0;AOAP.max){continue}AK.push(AQ(AN,AP))}}var AL=g.grid.labelMargin+g.grid.borderWidth;AM(s.xaxis,function(AN,AO){return'
    '+AN.label+"
    "});AM(s.yaxis,function(AN,AO){return'
    '+AN.label+"
    "});AM(s.x2axis,function(AN,AO){return'
    '+AN.label+"
    "});AM(s.y2axis,function(AN,AO){return'
    '+AN.label+"
    "});AK.push("
    ");l.append(AK.join(""))}function AA(AK){if(AK.lines.show){a(AK)}if(AK.bars.show){n(AK)}if(AK.points.show){o(AK)}}function a(AN){function AM(AY,AZ,AR,Ad,Ac){var Ae=AY.points,AS=AY.pointsize,AW=null,AV=null;Y.beginPath();for(var AX=AS;AX=Aa&&Ab>Ac.max){if(Aa>Ac.max){continue}AU=(Ac.max-Ab)/(Aa-Ab)*(AT-AU)+AU;Ab=Ac.max}else{if(Aa>=Ab&&Aa>Ac.max){if(Ab>Ac.max){continue}AT=(Ac.max-Ab)/(Aa-Ab)*(AT-AU)+AU;Aa=Ac.max}}if(AU<=AT&&AU=AT&&AU>Ad.max){if(AT>Ad.max){continue}Ab=(Ad.max-AU)/(AT-AU)*(Aa-Ab)+Ab;AU=Ad.max}else{if(AT>=AU&&AT>Ad.max){if(AU>Ad.max){continue}Aa=(Ad.max-AU)/(AT-AU)*(Aa-Ab)+Ab;AT=Ad.max}}if(AU!=AW||Ab!=AV){Y.moveTo(Ad.p2c(AU)+AZ,Ac.p2c(Ab)+AR)}AW=AT;AV=Aa;Y.lineTo(Ad.p2c(AT)+AZ,Ac.p2c(Aa)+AR)}Y.stroke()}function AO(AX,Ae,Ac){var Af=AX.points,AR=AX.pointsize,AS=Math.min(Math.max(0,Ac.min),Ac.max),Aa,AV=0,Ad=false;for(var AW=AR;AW=AT&&AU>Ae.max){if(AT>Ae.max){continue}Ab=(Ae.max-AU)/(AT-AU)*(AZ-Ab)+Ab;AU=Ae.max}else{if(AT>=AU&&AT>Ae.max){if(AU>Ae.max){continue}AZ=(Ae.max-AU)/(AT-AU)*(AZ-Ab)+Ab;AT=Ae.max}}if(!Ad){Y.beginPath();Y.moveTo(Ae.p2c(AU),Ac.p2c(AS));Ad=true}if(Ab>=Ac.max&&AZ>=Ac.max){Y.lineTo(Ae.p2c(AU),Ac.p2c(Ac.max));Y.lineTo(Ae.p2c(AT),Ac.p2c(Ac.max));AV=AT;continue}else{if(Ab<=Ac.min&&AZ<=Ac.min){Y.lineTo(Ae.p2c(AU),Ac.p2c(Ac.min));Y.lineTo(Ae.p2c(AT),Ac.p2c(Ac.min));AV=AT;continue}}var Ag=AU,AY=AT;if(Ab<=AZ&&Ab=Ac.min){AU=(Ac.min-Ab)/(AZ-Ab)*(AT-AU)+AU;Ab=Ac.min}else{if(AZ<=Ab&&AZ=Ac.min){AT=(Ac.min-Ab)/(AZ-Ab)*(AT-AU)+AU;AZ=Ac.min}}if(Ab>=AZ&&Ab>Ac.max&&AZ<=Ac.max){AU=(Ac.max-Ab)/(AZ-Ab)*(AT-AU)+AU;Ab=Ac.max}else{if(AZ>=Ab&&AZ>Ac.max&&Ab<=Ac.max){AT=(Ac.max-Ab)/(AZ-Ab)*(AT-AU)+AU;AZ=Ac.max}}if(AU!=Ag){if(Ab<=Ac.min){Aa=Ac.min}else{Aa=Ac.max}Y.lineTo(Ae.p2c(Ag),Ac.p2c(Aa));Y.lineTo(Ae.p2c(AU),Ac.p2c(Aa))}Y.lineTo(Ae.p2c(AU),Ac.p2c(Ab));Y.lineTo(Ae.p2c(AT),Ac.p2c(AZ));if(AT!=AY){if(AZ<=Ac.min){Aa=Ac.min}else{Aa=Ac.max}Y.lineTo(Ae.p2c(AT),Ac.p2c(Aa));Y.lineTo(Ae.p2c(AY),Ac.p2c(Aa))}AV=Math.max(AT,AY)}if(Ad){Y.lineTo(Ae.p2c(AV),Ac.p2c(AS));Y.fill()}}Y.save();Y.translate(e.left,e.top);Y.lineJoin="round";var AP=AN.lines.lineWidth,AK=AN.shadowSize;if(AP>0&&AK>0){Y.lineWidth=AK;Y.strokeStyle="rgba(0,0,0,0.1)";var AQ=Math.PI/18;AM(AN.datapoints,Math.sin(AQ)*(AP/2+AK/2),Math.cos(AQ)*(AP/2+AK/2),AN.xaxis,AN.yaxis);Y.lineWidth=AK/2;AM(AN.datapoints,Math.sin(AQ)*(AP/2+AK/4),Math.cos(AQ)*(AP/2+AK/4),AN.xaxis,AN.yaxis)}Y.lineWidth=AP;Y.strokeStyle=AN.color;var AL=V(AN.lines,AN.color,0,t);if(AL){Y.fillStyle=AL;AO(AN.datapoints,AN.xaxis,AN.yaxis)}if(AP>0){AM(AN.datapoints,0,0,AN.xaxis,AN.yaxis)}Y.restore()}function o(AN){function AP(AU,AT,Ab,AR,AV,AZ,AY){var Aa=AU.points,AQ=AU.pointsize;for(var AS=0;ASAZ.max||AWAY.max){continue}Y.beginPath();Y.arc(AZ.p2c(AX),AY.p2c(AW)+AR,AT,0,AV,false);if(Ab){Y.fillStyle=Ab;Y.fill()}Y.stroke()}}Y.save();Y.translate(e.left,e.top);var AO=AN.lines.lineWidth,AL=AN.shadowSize,AK=AN.points.radius;if(AO>0&&AL>0){var AM=AL/2;Y.lineWidth=AM;Y.strokeStyle="rgba(0,0,0,0.1)";AP(AN.datapoints,AK,null,AM+AM/2,Math.PI,AN.xaxis,AN.yaxis);Y.strokeStyle="rgba(0,0,0,0.2)";AP(AN.datapoints,AK,null,AM/2,Math.PI,AN.xaxis,AN.yaxis)}Y.lineWidth=AO;Y.strokeStyle=AN.color;AP(AN.datapoints,AK,V(AN.points,AN.color),0,2*Math.PI,AN.xaxis,AN.yaxis);Y.restore()}function AB(AV,AU,Ad,AQ,AY,AN,AL,AT,AS,Ac,AZ){var AM,Ab,AR,AX,AO,AK,AW,AP,Aa;if(AZ){AP=AK=AW=true;AO=false;AM=Ad;Ab=AV;AX=AU+AQ;AR=AU+AY;if(AbAT.max||AXAS.max){return }if(AMAT.max){Ab=AT.max;AK=false}if(ARAS.max){AX=AS.max;AW=false}AM=AT.p2c(AM);AR=AS.p2c(AR);Ab=AT.p2c(Ab);AX=AS.p2c(AX);if(AL){Ac.beginPath();Ac.moveTo(AM,AR);Ac.lineTo(AM,AX);Ac.lineTo(Ab,AX);Ac.lineTo(Ab,AR);Ac.fillStyle=AL(AR,AX);Ac.fill()}if(AO||AK||AW||AP){Ac.beginPath();Ac.moveTo(AM,AR+AN);if(AO){Ac.lineTo(AM,AX+AN)}else{Ac.moveTo(AM,AX+AN)}if(AW){Ac.lineTo(Ab,AX+AN)}else{Ac.moveTo(Ab,AX+AN)}if(AK){Ac.lineTo(Ab,AR+AN)}else{Ac.moveTo(Ab,AR+AN)}if(AP){Ac.lineTo(AM,AR+AN)}else{Ac.moveTo(AM,AR+AN)}Ac.stroke()}}function n(AM){function AL(AS,AR,AU,AP,AT,AW,AV){var AX=AS.points,AO=AS.pointsize;for(var AQ=0;AQ")}AP.push("");AN=true}if(AV){AR=AV(AR,AU)}AP.push('
    '+AR+"")}if(AN){AP.push("")}if(AP.length==0){return }var AT=''+AP.join("")+"
    ";if(g.legend.container!=null){C(g.legend.container).html(AT)}else{var AQ="",AL=g.legend.position,AM=g.legend.margin;if(AM[0]==null){AM=[AM,AM]}if(AL.charAt(0)=="n"){AQ+="top:"+(AM[1]+e.top)+"px;"}else{if(AL.charAt(0)=="s"){AQ+="bottom:"+(AM[1]+e.bottom)+"px;"}}if(AL.charAt(1)=="e"){AQ+="right:"+(AM[0]+e.right)+"px;"}else{if(AL.charAt(1)=="w"){AQ+="left:"+(AM[0]+e.left)+"px;"}}var AS=C('
    '+AT.replace('style="','style="position:absolute;'+AQ+";")+"
    ").appendTo(l);if(g.legend.backgroundOpacity!=0){var AO=g.legend.backgroundColor;if(AO==null){AO=g.grid.backgroundColor;if(AO&&typeof AO=="string"){AO=C.color.parse(AO)}else{AO=C.color.extract(AS,"background-color")}AO.a=1;AO=AO.toString()}var AK=AS.children();C('
    ').prependTo(AS).css("opacity",g.legend.backgroundOpacity)}}}var w=[],J=null;function AF(AR,AP,AM){var AX=g.grid.mouseActiveRadius,Aj=AX*AX+1,Ah=null,Aa=false,Af,Ad;for(Af=0;AfAL||AT-AZ<-AL||AS-AW>AK||AS-AW<-AK){continue}var AV=Math.abs(AQ.p2c(AT)-AR),AU=Math.abs(AO.p2c(AS)-AP),Ab=AV*AV+AU*AU;if(Ab<=Aj){Aj=Ab;Ah=[Af,Ad/Ac]}}}if(AY.bars.show&&!Ah){var AN=AY.bars.align=="left"?0:-AY.bars.barWidth/2,Ag=AN+AY.bars.barWidth;for(Ad=0;Ad=Math.min(Ai,AT)&&AW>=AS+AN&&AW<=AS+Ag):(AZ>=AT+AN&&AZ<=AT+Ag&&AW>=Math.min(Ai,AS)&&AW<=Math.max(Ai,AS))){Ah=[Af,Ad/Ac]}}}}if(Ah){Af=Ah[0];Ad=Ah[1];Ac=O[Af].datapoints.pointsize;return{datapoint:O[Af].datapoints.points.slice(Ad*Ac,(Ad+1)*Ac),dataIndex:Ad,series:O[Af],seriesIndex:Af}}return null}function D(AK){if(g.grid.hoverable){H("plothover",AK,function(AL){return AL.hoverable!=false})}}function d(AK){H("plotclick",AK,function(AL){return AL.clickable!=false})}function H(AL,AK,AM){var AN=AD.offset(),AS={pageX:AK.pageX,pageY:AK.pageY},AQ=AK.pageX-AN.left-e.left,AO=AK.pageY-AN.top-e.top;if(s.xaxis.used){AS.x=s.xaxis.c2p(AQ)}if(s.yaxis.used){AS.y=s.yaxis.c2p(AO)}if(s.x2axis.used){AS.x2=s.x2axis.c2p(AQ)}if(s.y2axis.used){AS.y2=s.y2axis.c2p(AO)}var AT=AF(AQ,AO,AM);if(AT){AT.pageX=parseInt(AT.series.xaxis.p2c(AT.datapoint[0])+AN.left+e.left);AT.pageY=parseInt(AT.series.yaxis.p2c(AT.datapoint[1])+AN.top+e.top)}if(g.grid.autoHighlight){for(var AP=0;APAQ.max||ARAP.max){return }var AO=AN.points.radius+AN.points.lineWidth/2;AJ.lineWidth=AO;AJ.strokeStyle=C.color.parse(AN.color).scale("a",0.5).toString();var AK=1.5*AO;AJ.beginPath();AJ.arc(AQ.p2c(AL),AP.p2c(AR),AK,0,2*Math.PI,false);AJ.stroke()}function z(AN,AK){AJ.lineWidth=AN.bars.lineWidth;AJ.strokeStyle=C.color.parse(AN.color).scale("a",0.5).toString();var AM=C.color.parse(AN.color).scale("a",0.5).toString();var AL=AN.bars.align=="left"?0:-AN.bars.barWidth/2;AB(AK[0],AK[1],AK[2]||0,AL,AL+AN.bars.barWidth,0,function(){return AM},AN.xaxis,AN.yaxis,AJ,AN.bars.horizontal)}function R(AM,AL,AQ,AO){if(typeof AM=="string"){return AM}else{var AP=Y.createLinearGradient(0,AQ,0,AL);for(var AN=0,AK=AM.colors.length;AN12){K=K-12}else{if(K==0){K=12}}}for(var F=0;F0&&L.which!=M.which)||E(L.target).is(M.not)){return }}switch(L.type){case"mousedown":E.extend(M,E(K).offset(),{elem:K,target:L.target,pageX:L.pageX,pageY:L.pageY});A.add(document,"mousemove mouseup",H,M);G(K,false);F.dragging=null;return false;case !F.dragging&&"mousemove":if(I(L.pageX-M.pageX)+I(L.pageY-M.pageY) zr[1]))) - return; - - axisOptions.min = min; - axisOptions.max = max; - } - - scaleAxis(x1, x2, 'xaxis'); - scaleAxis(x1, x2, 'x2axis'); - scaleAxis(y1, y2, 'yaxis'); - scaleAxis(y1, y2, 'y2axis'); - - plot.setupGrid(); - plot.draw(); - - if (!args.preventEvent) - plot.getPlaceholder().trigger("plotzoom", [ plot ]); - } - - plot.pan = function (args) { - var l = +args.left, t = +args.top, - axes = plot.getAxes(), options = plot.getOptions(); - - if (isNaN(l)) - l = 0; - if (isNaN(t)) - t = 0; - - function panAxis(delta, name) { - var axis = axes[name], - axisOptions = options[name], - min, max; - - if (!axis.used) - return; - - min = axis.c2p(axis.p2c(axis.min) + delta), - max = axis.c2p(axis.p2c(axis.max) + delta); - - var pr = axisOptions.panRange; - if (pr) { - // check whether we hit the wall - if (pr[0] != null && pr[0] > min) { - delta = pr[0] - min; - min += delta; - max += delta; - } - - if (pr[1] != null && pr[1] < max) { - delta = pr[1] - max; - min += delta; - max += delta; - } - } - - axisOptions.min = min; - axisOptions.max = max; - } - - panAxis(l, 'xaxis'); - panAxis(l, 'x2axis'); - panAxis(t, 'yaxis'); - panAxis(t, 'y2axis'); - - plot.setupGrid(); - plot.draw(); - - if (!args.preventEvent) - plot.getPlaceholder().trigger("plotpan", [ plot ]); - } - - plot.hooks.bindEvents.push(bindEvents); - } - - $.plot.plugins.push({ - init: init, - options: options, - name: 'navigate', - version: '1.1' - }); -})(jQuery); - --- a/owa/modules/base/js/includes/jquery/flot/jquery.flot.navigate.min.js +++ /dev/null @@ -1,1 +1,1 @@ -(function(R){R.fn.drag=function(A,B,C){if(B){this.bind("dragstart",A)}if(C){this.bind("dragend",C)}return !A?this.trigger("drag"):this.bind("drag",B?B:A)};var M=R.event,L=M.special,Q=L.drag={not:":input",distance:0,which:1,dragging:false,setup:function(A){A=R.extend({distance:Q.distance,which:Q.which,not:Q.not},A||{});A.distance=N(A.distance);M.add(this,"mousedown",O,A);if(this.attachEvent){this.attachEvent("ondragstart",J)}},teardown:function(){M.remove(this,"mousedown",O);if(this===Q.dragging){Q.dragging=Q.proxy=false}P(this,true);if(this.detachEvent){this.detachEvent("ondragstart",J)}}};L.dragstart=L.dragend={setup:function(){},teardown:function(){}};function O(A){var B=this,C,D=A.data||{};if(D.elem){B=A.dragTarget=D.elem;A.dragProxy=Q.proxy||B;A.cursorOffsetX=D.pageX-D.left;A.cursorOffsetY=D.pageY-D.top;A.offsetX=A.pageX-A.cursorOffsetX;A.offsetY=A.pageY-A.cursorOffsetY}else{if(Q.dragging||(D.which>0&&A.which!=D.which)||R(A.target).is(D.not)){return }}switch(A.type){case"mousedown":R.extend(D,R(B).offset(),{elem:B,target:A.target,pageX:A.pageX,pageY:A.pageY});M.add(document,"mousemove mouseup",O,D);P(B,false);Q.dragging=null;return false;case !Q.dragging&&"mousemove":if(N(A.pageX-D.pageX)+N(A.pageY-D.pageY)Z[1]))){return }a.min=X;a.max=T}K(G,F,"xaxis");K(G,F,"x2axis");K(P,O,"yaxis");K(P,O,"y2axis");D.setupGrid();D.draw();if(!M.preventEvent){D.getPlaceholder().trigger("plotzoom",[D])}};D.pan=function(I){var F=+I.left,J=+I.top,K=D.getAxes(),H=D.getOptions();if(isNaN(F)){F=0}if(isNaN(J)){J=0}function G(R,M){var O=K[M],Q=H[M],N,L;if(!O.used){return }N=O.c2p(O.p2c(O.min)+R),L=O.c2p(O.p2c(O.max)+R);var P=Q.panRange;if(P){if(P[0]!=null&&P[0]>N){R=P[0]-N;N+=R;L+=R}if(P[1]!=null&&P[1]1) - options.series.pie.tilt=1; - if (options.series.pie.tilt<0) - options.series.pie.tilt=0; - - // add processData hook to do transformations on the data - plot.hooks.processDatapoints.push(processDatapoints); - plot.hooks.drawOverlay.push(drawOverlay); - - // add draw hook - plot.hooks.draw.push(draw); - } - } - - // bind hoverable events - function bindEvents(plot, eventHolder) - { - var options = plot.getOptions(); - - if (options.series.pie.show && options.grid.hoverable) - eventHolder.unbind('mousemove').mousemove(onMouseMove); - - if (options.series.pie.show && options.grid.clickable) - eventHolder.unbind('click').click(onClick); - } - - - // debugging function that prints out an object - function alertObject(obj) - { - var msg = ''; - function traverse(obj, depth) - { - if (!depth) - depth = 0; - for (var i = 0; i < obj.length; ++i) - { - for (var j=0; jcanvas.width-maxRadius) - centerLeft = canvas.width-maxRadius; - } - - function fixData(data) - { - for (var i = 0; i < data.length; ++i) - { - if (typeof(data[i].data)=='number') - data[i].data = [[1,data[i].data]]; - else if (typeof(data[i].data)=='undefined' || typeof(data[i].data[0])=='undefined') - { - if (typeof(data[i].data)!='undefined' && typeof(data[i].data.label)!='undefined') - data[i].label = data[i].data.label; // fix weirdness coming from flot - data[i].data = [[1,0]]; - - } - } - return data; - } - - function combine(data) - { - data = fixData(data); - calcTotal(data); - var combined = 0; - var numCombined = 0; - var color = options.series.pie.combine.color; - - var newdata = []; - for (var i = 0; i < data.length; ++i) - { - // make sure its a number - data[i].data[0][1] = parseFloat(data[i].data[0][1]); - if (!data[i].data[0][1]) - data[i].data[0][1] = 0; - - if (data[i].data[0][1]/total<=options.series.pie.combine.threshold) - { - combined += data[i].data[0][1]; - numCombined++; - if (!color) - color = data[i].color; - } - else - { - newdata.push({ - data: [[1,data[i].data[0][1]]], - color: data[i].color, - label: data[i].label, - angle: (data[i].data[0][1]*(Math.PI*2))/total, - percent: (data[i].data[0][1]/total*100) - }); - } - } - if (numCombined>0) - newdata.push({ - data: [[1,combined]], - color: color, - label: options.series.pie.combine.label, - angle: (combined*(Math.PI*2))/total, - percent: (combined/total*100) - }); - return newdata; - } - - function draw(plot, newCtx) - { - if (!target) return; // if no series were passed - ctx = newCtx; - - setupPie(); - var slices = plot.getData(); - - var attempts = 0; - while (redraw && attempts0) - maxRadius *= shrink; - attempts += 1; - clear(); - if (options.series.pie.tilt<=0.8) - drawShadow(); - drawPie(); - } - if (attempts >= redrawAttempts) { - clear(); - target.prepend('
    Could not draw pie with labels contained inside canvas
    '); - } - - if ( plot.setSeries && plot.insertLegend ) - { - plot.setSeries(slices); - plot.insertLegend(); - } - - // we're actually done at this point, just defining internal functions at this point - - function clear() - { - ctx.clearRect(0,0,canvas.width,canvas.height); - target.children().filter('.pieLabel, .pieLabelBackground').remove(); - } - - function drawShadow() - { - var shadowLeft = 5; - var shadowTop = 15; - var edge = 10; - var alpha = 0.02; - - // set radius - if (options.series.pie.radius>1) - var radius = options.series.pie.radius; - else - var radius = maxRadius * options.series.pie.radius; - - if (radius>=(canvas.width/2)-shadowLeft || radius*options.series.pie.tilt>=(canvas.height/2)-shadowTop || radius<=edge) - return; // shadow would be outside canvas, so don't draw it - - ctx.save(); - ctx.translate(shadowLeft,shadowTop); - ctx.globalAlpha = alpha; - ctx.fillStyle = '#000'; - - // center and rotate to starting position - ctx.translate(centerLeft,centerTop); - ctx.scale(1, options.series.pie.tilt); - - //radius -= edge; - for (var i=1; i<=edge; i++) - { - ctx.beginPath(); - ctx.arc(0,0,radius,0,Math.PI*2,false); - ctx.fill(); - radius -= i; - } - - ctx.restore(); - } - - function drawPie() - { - startAngle = Math.PI*options.series.pie.startAngle; - - // set radius - if (options.series.pie.radius>1) - var radius = options.series.pie.radius; - else - var radius = maxRadius * options.series.pie.radius; - - // center and rotate to starting position - ctx.save(); - ctx.translate(centerLeft,centerTop); - ctx.scale(1, options.series.pie.tilt); - //ctx.rotate(startAngle); // start at top; -- This doesn't work properly in Opera - - // draw slices - ctx.save(); - var currentAngle = startAngle; - for (var i = 0; i < slices.length; ++i) - { - slices[i].startAngle = currentAngle; - drawSlice(slices[i].angle, slices[i].color, true); - } - ctx.restore(); - - // draw slice outlines - ctx.save(); - ctx.lineWidth = options.series.pie.stroke.width; - currentAngle = startAngle; - for (var i = 0; i < slices.length; ++i) - drawSlice(slices[i].angle, options.series.pie.stroke.color, false); - ctx.restore(); - - // draw donut hole - drawDonutHole(ctx); - - // draw labels - if (options.series.pie.label.show) - drawLabels(); - - // restore to original state - ctx.restore(); - - function drawSlice(angle, color, fill) - { - if (angle<=0) - return; - - if (fill) - ctx.fillStyle = color; - else - { - ctx.strokeStyle = color; - ctx.lineJoin = 'round'; - } - - ctx.beginPath(); - if (angle!=Math.PI*2) - ctx.moveTo(0,0); // Center of the pie - else if ($.browser.msie) - angle -= 0.0001; - //ctx.arc(0,0,radius,0,angle,false); // This doesn't work properly in Opera - ctx.arc(0,0,radius,currentAngle,currentAngle+angle,false); - ctx.closePath(); - //ctx.rotate(angle); // This doesn't work properly in Opera - currentAngle += angle; - - if (fill) - ctx.fill(); - else - ctx.stroke(); - } - - function drawLabels() - { - var currentAngle = startAngle; - - // set radius - if (options.series.pie.label.radius>1) - var radius = options.series.pie.label.radius; - else - var radius = maxRadius * options.series.pie.label.radius; - - for (var i = 0; i < slices.length; ++i) - { - if (slices[i].percent >= options.series.pie.label.threshold*100) - drawLabel(slices[i], currentAngle, i); - currentAngle += slices[i].angle; - } - - function drawLabel(slice, startAngle, index) - { - if (slice.data[0][1]==0) - return; - - // format label text - var lf = options.legend.labelFormatter, text, plf = options.series.pie.label.formatter; - if (lf) - text = lf(slice.label, slice); - else - text = slice.label; - if (plf) - text = plf(text, slice); - - var halfAngle = ((startAngle+slice.angle) + startAngle)/2; - var x = centerLeft + Math.round(Math.cos(halfAngle) * radius); - var y = centerTop + Math.round(Math.sin(halfAngle) * radius) * options.series.pie.tilt; - - var html = '' + text + ""; - target.append(html); - var label = target.children('#pieLabel'+index); - var labelTop = (y - label.height()/2); - var labelLeft = (x - label.width()/2); - label.css('top', labelTop); - label.css('left', labelLeft); - - // check to make sure that the label is not outside the canvas - if (0-labelTop>0 || 0-labelLeft>0 || canvas.height-(labelTop+label.height())<0 || canvas.width-(labelLeft+label.width())<0) - redraw = true; - - if (options.series.pie.label.background.opacity != 0) { - // put in the transparent background separately to avoid blended labels and label boxes - var c = options.series.pie.label.background.color; - if (c == null) { - c = slice.color; - } - var pos = 'top:'+labelTop+'px;left:'+labelLeft+'px;'; - $('
    ').insertBefore(label).css('opacity', options.series.pie.label.background.opacity); - } - } // end individual label function - } // end drawLabels function - } // end drawPie function - } // end draw function - - // Placed here because it needs to be accessed from multiple locations - function drawDonutHole(layer) - { - // draw donut hole - if(options.series.pie.innerRadius > 0) - { - // subtract the center - layer.save(); - innerRadius = options.series.pie.innerRadius > 1 ? options.series.pie.innerRadius : maxRadius * options.series.pie.innerRadius; - layer.globalCompositeOperation = 'destination-out'; // this does not work with excanvas, but it will fall back to using the stroke color - layer.beginPath(); - layer.fillStyle = options.series.pie.stroke.color; - layer.arc(0,0,innerRadius,0,Math.PI*2,false); - layer.fill(); - layer.closePath(); - layer.restore(); - - // add inner stroke - layer.save(); - layer.beginPath(); - layer.strokeStyle = options.series.pie.stroke.color; - layer.arc(0,0,innerRadius,0,Math.PI*2,false); - layer.stroke(); - layer.closePath(); - layer.restore(); - // TODO: add extra shadow inside hole (with a mask) if the pie is tilted. - } - } - - //-- Additional Interactive related functions -- - - function isPointInPoly(poly, pt) - { - for(var c = false, i = -1, l = poly.length, j = l - 1; ++i < l; j = i) - ((poly[i][1] <= pt[1] && pt[1] < poly[j][1]) || (poly[j][1] <= pt[1] && pt[1]< poly[i][1])) - && (pt[0] < (poly[j][0] - poly[i][0]) * (pt[1] - poly[i][1]) / (poly[j][1] - poly[i][1]) + poly[i][0]) - && (c = !c); - return c; - } - - function findNearbySlice(mouseX, mouseY) - { - var slices = plot.getData(), - options = plot.getOptions(), - radius = options.series.pie.radius > 1 ? options.series.pie.radius : maxRadius * options.series.pie.radius; - - for (var i = 0; i < slices.length; ++i) - { - var s = slices[i]; - - if(s.pie.show) - { - ctx.save(); - ctx.beginPath(); - ctx.moveTo(0,0); // Center of the pie - //ctx.scale(1, options.series.pie.tilt); // this actually seems to break everything when here. - ctx.arc(0,0,radius,s.startAngle,s.startAngle+s.angle,false); - ctx.closePath(); - x = mouseX-centerLeft; - y = mouseY-centerTop; - if(ctx.isPointInPath) - { - if (ctx.isPointInPath(mouseX-centerLeft, mouseY-centerTop)) - { - //alert('found slice!'); - ctx.restore(); - return {datapoint: [s.percent, s.data], dataIndex: 0, series: s, seriesIndex: i}; - } - } - else - { - // excanvas for IE doesn;t support isPointInPath, this is a workaround. - p1X = (radius * Math.cos(s.startAngle)); - p1Y = (radius * Math.sin(s.startAngle)); - p2X = (radius * Math.cos(s.startAngle+(s.angle/4))); - p2Y = (radius * Math.sin(s.startAngle+(s.angle/4))); - p3X = (radius * Math.cos(s.startAngle+(s.angle/2))); - p3Y = (radius * Math.sin(s.startAngle+(s.angle/2))); - p4X = (radius * Math.cos(s.startAngle+(s.angle/1.5))); - p4Y = (radius * Math.sin(s.startAngle+(s.angle/1.5))); - p5X = (radius * Math.cos(s.startAngle+s.angle)); - p5Y = (radius * Math.sin(s.startAngle+s.angle)); - arrPoly = [[0,0],[p1X,p1Y],[p2X,p2Y],[p3X,p3Y],[p4X,p4Y],[p5X,p5Y]]; - arrPoint = [x,y]; - // TODO: perhaps do some mathmatical trickery here with the Y-coordinate to compensate for pie tilt? - if(isPointInPoly(arrPoly, arrPoint)) - { - ctx.restore(); - return {datapoint: [s.percent, s.data], dataIndex: 0, series: s, seriesIndex: i}; - } - } - ctx.restore(); - } - } - - return null; - } - - function onMouseMove(e) - { - triggerClickHoverEvent('plothover', e); - } - - function onClick(e) - { - triggerClickHoverEvent('plotclick', e); - } - - // trigger click or hover event (they send the same parameters so we share their code) - function triggerClickHoverEvent(eventname, e) - { - var offset = plot.offset(), - canvasX = parseInt(e.pageX - offset.left), - canvasY = parseInt(e.pageY - offset.top), - item = findNearbySlice(canvasX, canvasY); - - if (options.grid.autoHighlight) - { - // clear auto-highlights - for (var i = 0; i < highlights.length; ++i) - { - var h = highlights[i]; - if (h.auto == eventname && !(item && h.series == item.series)) - unhighlight(h.series); - } - } - - // if no slice was found, quit - if (!item) - return; - - // highlight the slice - highlight(item.series, eventname); - - // trigger any hover bind events - var pos = { pageX: e.pageX, pageY: e.pageY }; - target.trigger(eventname, [ pos, item ]); - } - - function highlight(s, auto) - { - if (typeof s == "number") - s = series[s]; - - var i = indexOfHighlight(s); - if (i == -1) - { - highlights.push({ series: s, auto: auto }); - plot.triggerRedrawOverlay(); - } - else if (!auto) - highlights[i].auto = false; - } - - function unhighlight(s) - { - if (s == null) - { - highlights = []; - plot.triggerRedrawOverlay(); - } - - if (typeof s == "number") - s = series[s]; - - var i = indexOfHighlight(s); - if (i != -1) - { - highlights.splice(i, 1); - plot.triggerRedrawOverlay(); - } - } - - function indexOfHighlight(s) - { - for (var i = 0; i < highlights.length; ++i) - { - var h = highlights[i]; - if (h.series == s) - return i; - } - return -1; - } - - function drawOverlay(plot, octx) - { - //alert(options.series.pie.radius); - var options = plot.getOptions(); - //alert(options.series.pie.radius); - - var radius = options.series.pie.radius > 1 ? options.series.pie.radius : maxRadius * options.series.pie.radius; - - octx.save(); - octx.translate(centerLeft, centerTop); - octx.scale(1, options.series.pie.tilt); - - for (i = 0; i < highlights.length; ++i) - drawHighlight(highlights[i].series); - - drawDonutHole(octx); - - octx.restore(); - - function drawHighlight(series) - { - if (series.angle < 0) return; - - //octx.fillStyle = parseColor(options.series.pie.highlight.color).scale(null, null, null, options.series.pie.highlight.opacity).toString(); - octx.fillStyle = "rgba(255, 255, 255, "+options.series.pie.highlight.opacity+")"; // this is temporary until we have access to parseColor - - octx.beginPath(); - if (series.angle!=Math.PI*2) - octx.moveTo(0,0); // Center of the pie - octx.arc(0,0,radius,series.startAngle,series.startAngle+series.angle,false); - octx.closePath(); - octx.fill(); - } - - } - - } // end init (plugin body) - - // define pie specific options and their default values - var options = { - series: { - pie: { - show: false, - radius: 'auto', // actual radius of the visible pie (based on full calculated radius if <=1, or hard pixel value) - innerRadius:0, /* for donut */ - startAngle: 3/2, - tilt: 1, - offset: { - top: 0, - left: 'auto' - }, - stroke: { - color: '#FFF', - width: 1 - }, - label: { - show: 'auto', - formatter: function(label, slice){ - return '
    '+label+'
    '+Math.round(slice.percent)+'%
    '; - }, // formatter function - radius: 1, // radius at which to place the labels (based on full calculated radius if <=1, or hard pixel value) - background: { - color: null, - opacity: 0 - }, - threshold: 0 // percentage at which to hide the label (i.e. the slice is too narrow) - }, - combine: { - threshold: -1, // percentage at which to combine little slices into one larger slice - color: null, // color to give the new slice (auto-generated if null) - label: 'Other' // label to give the new slice - }, - highlight: { - //color: '#FFF', // will add this functionality once parseColor is available - opacity: 0.5 - } - } - } - }; - - $.plot.plugins.push({ - init: init, - options: options, - name: "pie", - version: "1.0" - }); -})(jQuery); + --- a/owa/modules/base/js/includes/jquery/flot/jquery.flot.selection.js +++ /dev/null @@ -1,300 +1,1 @@ -/* -Flot plugin for selecting regions. -The plugin defines the following options: - - selection: { - mode: null or "x" or "y" or "xy", - color: color - } - -You enable selection support by setting the mode to one of "x", "y" or -"xy". In "x" mode, the user will only be able to specify the x range, -similarly for "y" mode. For "xy", the selection becomes a rectangle -where both ranges can be specified. "color" is color of the selection. - -When selection support is enabled, a "plotselected" event will be emitted -on the DOM element you passed into the plot function. The event -handler gets one extra parameter with the ranges selected on the axes, -like this: - - placeholder.bind("plotselected", function(event, ranges) { - alert("You selected " + ranges.xaxis.from + " to " + ranges.xaxis.to) - // similar for yaxis, secondary axes are in x2axis - // and y2axis if present - }); - -The "plotselected" event is only fired when the user has finished -making the selection. A "plotselecting" event is fired during the -process with the same parameters as the "plotselected" event, in case -you want to know what's happening while it's happening, - -A "plotunselected" event with no arguments is emitted when the user -clicks the mouse to remove the selection. - -The plugin allso adds the following methods to the plot object: - -- setSelection(ranges, preventEvent) - - Set the selection rectangle. The passed in ranges is on the same - form as returned in the "plotselected" event. If the selection - mode is "x", you should put in either an xaxis (or x2axis) object, - if the mode is "y" you need to put in an yaxis (or y2axis) object - and both xaxis/x2axis and yaxis/y2axis if the selection mode is - "xy", like this: - - setSelection({ xaxis: { from: 0, to: 10 }, yaxis: { from: 40, to: 60 } }); - - setSelection will trigger the "plotselected" event when called. If - you don't want that to happen, e.g. if you're inside a - "plotselected" handler, pass true as the second parameter. - -- clearSelection(preventEvent) - - Clear the selection rectangle. Pass in true to avoid getting a - "plotunselected" event. - -- getSelection() - - Returns the current selection in the same format as the - "plotselected" event. If there's currently no selection, the - function returns null. - -*/ - -(function ($) { - function init(plot) { - var selection = { - first: { x: -1, y: -1}, second: { x: -1, y: -1}, - show: false, - active: false - }; - - // FIXME: The drag handling implemented here should be - // abstracted out, there's some similar code from a library in - // the navigation plugin, this should be massaged a bit to fit - // the Flot cases here better and reused. Doing this would - // make this plugin much slimmer. - var savedhandlers = {}; - - function onMouseMove(e) { - if (selection.active) { - plot.getPlaceholder().trigger("plotselecting", [ getSelection() ]); - - updateSelection(e); - } - } - - function onMouseDown(e) { - if (e.which != 1) // only accept left-click - return; - - // cancel out any text selections - document.body.focus(); - - // prevent text selection and drag in old-school browsers - if (document.onselectstart !== undefined && savedhandlers.onselectstart == null) { - savedhandlers.onselectstart = document.onselectstart; - document.onselectstart = function () { return false; }; - } - if (document.ondrag !== undefined && savedhandlers.ondrag == null) { - savedhandlers.ondrag = document.ondrag; - document.ondrag = function () { return false; }; - } - - setSelectionPos(selection.first, e); - - selection.active = true; - - $(document).one("mouseup", onMouseUp); - } - - function onMouseUp(e) { - // revert drag stuff for old-school browsers - if (document.onselectstart !== undefined) - document.onselectstart = savedhandlers.onselectstart; - if (document.ondrag !== undefined) - document.ondrag = savedhandlers.ondrag; - - // no more draggy-dee-drag - selection.active = false; - updateSelection(e); - - if (selectionIsSane()) - triggerSelectedEvent(); - else { - // this counts as a clear - plot.getPlaceholder().trigger("plotunselected", [ ]); - plot.getPlaceholder().trigger("plotselecting", [ null ]); - } - - return false; - } - - function getSelection() { - if (!selectionIsSane()) - return null; - - var x1 = Math.min(selection.first.x, selection.second.x), - x2 = Math.max(selection.first.x, selection.second.x), - y1 = Math.max(selection.first.y, selection.second.y), - y2 = Math.min(selection.first.y, selection.second.y); - - var r = {}; - var axes = plot.getAxes(); - if (axes.xaxis.used) - r.xaxis = { from: axes.xaxis.c2p(x1), to: axes.xaxis.c2p(x2) }; - if (axes.x2axis.used) - r.x2axis = { from: axes.x2axis.c2p(x1), to: axes.x2axis.c2p(x2) }; - if (axes.yaxis.used) - r.yaxis = { from: axes.yaxis.c2p(y1), to: axes.yaxis.c2p(y2) }; - if (axes.y2axis.used) - r.y2axis = { from: axes.y2axis.c2p(y1), to: axes.y2axis.c2p(y2) }; - return r; - } - - function triggerSelectedEvent() { - var r = getSelection(); - - plot.getPlaceholder().trigger("plotselected", [ r ]); - - // backwards-compat stuff, to be removed in future - var axes = plot.getAxes(); - if (axes.xaxis.used && axes.yaxis.used) - plot.getPlaceholder().trigger("selected", [ { x1: r.xaxis.from, y1: r.yaxis.from, x2: r.xaxis.to, y2: r.yaxis.to } ]); - } - - function clamp(min, value, max) { - return value < min? min: (value > max? max: value); - } - - function setSelectionPos(pos, e) { - var o = plot.getOptions(); - var offset = plot.getPlaceholder().offset(); - var plotOffset = plot.getPlotOffset(); - pos.x = clamp(0, e.pageX - offset.left - plotOffset.left, plot.width()); - pos.y = clamp(0, e.pageY - offset.top - plotOffset.top, plot.height()); - - if (o.selection.mode == "y") - pos.x = pos == selection.first? 0: plot.width(); - - if (o.selection.mode == "x") - pos.y = pos == selection.first? 0: plot.height(); - } - - function updateSelection(pos) { - if (pos.pageX == null) - return; - - setSelectionPos(selection.second, pos); - if (selectionIsSane()) { - selection.show = true; - plot.triggerRedrawOverlay(); - } - else - clearSelection(true); - } - - function clearSelection(preventEvent) { - if (selection.show) { - selection.show = false; - plot.triggerRedrawOverlay(); - if (!preventEvent) - plot.getPlaceholder().trigger("plotunselected", [ ]); - } - } - - function setSelection(ranges, preventEvent) { - var axis, range, axes = plot.getAxes(); - var o = plot.getOptions(); - - if (o.selection.mode == "y") { - selection.first.x = 0; - selection.second.x = plot.width(); - } - else { - axis = ranges["xaxis"]? axes["xaxis"]: (ranges["x2axis"]? axes["x2axis"]: axes["xaxis"]); - range = ranges["xaxis"] || ranges["x2axis"] || { from:ranges["x1"], to:ranges["x2"] } - selection.first.x = axis.p2c(Math.min(range.from, range.to)); - selection.second.x = axis.p2c(Math.max(range.from, range.to)); - } - - if (o.selection.mode == "x") { - selection.first.y = 0; - selection.second.y = plot.height(); - } - else { - axis = ranges["yaxis"]? axes["yaxis"]: (ranges["y2axis"]? axes["y2axis"]: axes["yaxis"]); - range = ranges["yaxis"] || ranges["y2axis"] || { from:ranges["y1"], to:ranges["y2"] } - selection.first.y = axis.p2c(Math.min(range.from, range.to)); - selection.second.y = axis.p2c(Math.max(range.from, range.to)); - } - - selection.show = true; - plot.triggerRedrawOverlay(); - if (!preventEvent) - triggerSelectedEvent(); - } - - function selectionIsSane() { - var minSize = 5; - return Math.abs(selection.second.x - selection.first.x) >= minSize && - Math.abs(selection.second.y - selection.first.y) >= minSize; - } - - plot.clearSelection = clearSelection; - plot.setSelection = setSelection; - plot.getSelection = getSelection; - - plot.hooks.bindEvents.push(function(plot, eventHolder) { - var o = plot.getOptions(); - if (o.selection.mode != null) - eventHolder.mousemove(onMouseMove); - - if (o.selection.mode != null) - eventHolder.mousedown(onMouseDown); - }); - - - plot.hooks.drawOverlay.push(function (plot, ctx) { - // draw selection - if (selection.show && selectionIsSane()) { - var plotOffset = plot.getPlotOffset(); - var o = plot.getOptions(); - - ctx.save(); - ctx.translate(plotOffset.left, plotOffset.top); - - var c = $.color.parse(o.selection.color); - - ctx.strokeStyle = c.scale('a', 0.8).toString(); - ctx.lineWidth = 1; - ctx.lineJoin = "round"; - ctx.fillStyle = c.scale('a', 0.4).toString(); - - var x = Math.min(selection.first.x, selection.second.x), - y = Math.min(selection.first.y, selection.second.y), - w = Math.abs(selection.second.x - selection.first.x), - h = Math.abs(selection.second.y - selection.first.y); - - ctx.fillRect(x, y, w, h); - ctx.strokeRect(x, y, w, h); - - ctx.restore(); - } - }); - } - - $.plot.plugins.push({ - init: init, - options: { - selection: { - mode: null, // one of null, "x", "y" or "xy" - color: "#e8cfac" - } - }, - name: 'selection', - version: '1.0' - }); -})(jQuery); - --- a/owa/modules/base/js/includes/jquery/flot/jquery.flot.selection.min.js +++ /dev/null @@ -1,1 +1,1 @@ -(function(A){function B(J){var O={first:{x:-1,y:-1},second:{x:-1,y:-1},show:false,active:false};var L={};function D(Q){if(O.active){J.getPlaceholder().trigger("plotselecting",[F()]);K(Q)}}function M(Q){if(Q.which!=1){return }document.body.focus();if(document.onselectstart!==undefined&&L.onselectstart==null){L.onselectstart=document.onselectstart;document.onselectstart=function(){return false}}if(document.ondrag!==undefined&&L.ondrag==null){L.ondrag=document.ondrag;document.ondrag=function(){return false}}C(O.first,Q);O.active=true;A(document).one("mouseup",I)}function I(Q){if(document.onselectstart!==undefined){document.onselectstart=L.onselectstart}if(document.ondrag!==undefined){document.ondrag=L.ondrag}O.active=false;K(Q);if(E()){H()}else{J.getPlaceholder().trigger("plotunselected",[]);J.getPlaceholder().trigger("plotselecting",[null])}return false}function F(){if(!E()){return null}var R=Math.min(O.first.x,O.second.x),Q=Math.max(O.first.x,O.second.x),T=Math.max(O.first.y,O.second.y),S=Math.min(O.first.y,O.second.y);var U={};var V=J.getAxes();if(V.xaxis.used){U.xaxis={from:V.xaxis.c2p(R),to:V.xaxis.c2p(Q)}}if(V.x2axis.used){U.x2axis={from:V.x2axis.c2p(R),to:V.x2axis.c2p(Q)}}if(V.yaxis.used){U.yaxis={from:V.yaxis.c2p(T),to:V.yaxis.c2p(S)}}if(V.y2axis.used){U.y2axis={from:V.y2axis.c2p(T),to:V.y2axis.c2p(S)}}return U}function H(){var Q=F();J.getPlaceholder().trigger("plotselected",[Q]);var R=J.getAxes();if(R.xaxis.used&&R.yaxis.used){J.getPlaceholder().trigger("selected",[{x1:Q.xaxis.from,y1:Q.yaxis.from,x2:Q.xaxis.to,y2:Q.yaxis.to}])}}function G(R,S,Q){return SQ?Q:S)}function C(U,R){var T=J.getOptions();var S=J.getPlaceholder().offset();var Q=J.getPlotOffset();U.x=G(0,R.pageX-S.left-Q.left,J.width());U.y=G(0,R.pageY-S.top-Q.top,J.height());if(T.selection.mode=="y"){U.x=U==O.first?0:J.width()}if(T.selection.mode=="x"){U.y=U==O.first?0:J.height()}}function K(Q){if(Q.pageX==null){return }C(O.second,Q);if(E()){O.show=true;J.triggerRedrawOverlay()}else{P(true)}}function P(Q){if(O.show){O.show=false;J.triggerRedrawOverlay();if(!Q){J.getPlaceholder().trigger("plotunselected",[])}}}function N(R,Q){var T,S,U=J.getAxes();var V=J.getOptions();if(V.selection.mode=="y"){O.first.x=0;O.second.x=J.width()}else{T=R.xaxis?U.xaxis:(R.x2axis?U.x2axis:U.xaxis);S=R.xaxis||R.x2axis||{from:R.x1,to:R.x2};O.first.x=T.p2c(Math.min(S.from,S.to));O.second.x=T.p2c(Math.max(S.from,S.to))}if(V.selection.mode=="x"){O.first.y=0;O.second.y=J.height()}else{T=R.yaxis?U.yaxis:(R.y2axis?U.y2axis:U.yaxis);S=R.yaxis||R.y2axis||{from:R.y1,to:R.y2};O.first.y=T.p2c(Math.min(S.from,S.to));O.second.y=T.p2c(Math.max(S.from,S.to))}O.show=true;J.triggerRedrawOverlay();if(!Q){H()}}function E(){var Q=5;return Math.abs(O.second.x-O.first.x)>=Q&&Math.abs(O.second.y-O.first.y)>=Q}J.clearSelection=P;J.setSelection=N;J.getSelection=F;J.hooks.bindEvents.push(function(R,Q){var S=R.getOptions();if(S.selection.mode!=null){Q.mousemove(D)}if(S.selection.mode!=null){Q.mousedown(M)}});J.hooks.drawOverlay.push(function(T,Y){if(O.show&&E()){var R=T.getPlotOffset();var Q=T.getOptions();Y.save();Y.translate(R.left,R.top);var U=A.color.parse(Q.selection.color);Y.strokeStyle=U.scale("a",0.8).toString();Y.lineWidth=1;Y.lineJoin="round";Y.fillStyle=U.scale("a",0.4).toString();var W=Math.min(O.first.x,O.second.x),V=Math.min(O.first.y,O.second.y),X=Math.abs(O.second.x-O.first.x),S=Math.abs(O.second.y-O.first.y);Y.fillRect(W,V,X,S);Y.strokeRect(W,V,X,S);Y.restore()}})}A.plot.plugins.push({init:B,options:{selection:{mode:null,color:"#e8cfac"}},name:"selection",version:"1.0"})})(jQuery); + --- a/owa/modules/base/js/includes/jquery/flot/jquery.flot.stack.js +++ /dev/null @@ -1,153 +1,1 @@ -/* -Flot plugin for stacking data sets, i.e. putting them on top of each -other, for accumulative graphs. Note that the plugin assumes the data -is sorted on x. Also note that stacking a mix of positive and negative -values in most instances doesn't make sense (so it looks weird). -Two or more series are stacked when their "stack" attribute is set to -the same key (which can be any number or string or just "true"). To -specify the default stack, you can set - - series: { - stack: null or true or key (number/string) - } - -or specify it for a specific series - - $.plot($("#placeholder"), [{ data: [ ... ], stack: true ]) - -The stacking order is determined by the order of the data series in -the array (later series end up on top of the previous). - -Internally, the plugin modifies the datapoints in each series, adding -an offset to the y value. For line series, extra data points are -inserted through interpolation. For bar charts, the second y value is -also adjusted. -*/ - -(function ($) { - var options = { - series: { stack: null } // or number/string - }; - - function init(plot) { - function findMatchingSeries(s, allseries) { - var res = null - for (var i = 0; i < allseries.length; ++i) { - if (s == allseries[i]) - break; - - if (allseries[i].stack == s.stack) - res = allseries[i]; - } - - return res; - } - - function stackData(plot, s, datapoints) { - if (s.stack == null) - return; - - var other = findMatchingSeries(s, plot.getData()); - if (!other) - return; - - var ps = datapoints.pointsize, - points = datapoints.points, - otherps = other.datapoints.pointsize, - otherpoints = other.datapoints.points, - newpoints = [], - px, py, intery, qx, qy, bottom, - withlines = s.lines.show, withbars = s.bars.show, - withsteps = withlines && s.lines.steps, - i = 0, j = 0, l; - - while (true) { - if (i >= points.length) - break; - - l = newpoints.length; - - if (j >= otherpoints.length - || otherpoints[j] == null - || points[i] == null) { - // degenerate cases - for (m = 0; m < ps; ++m) - newpoints.push(points[i + m]); - i += ps; - } - else { - // cases where we actually got two points - px = points[i]; - py = points[i + 1]; - qx = otherpoints[j]; - qy = otherpoints[j + 1]; - bottom = 0; - - if (px == qx) { - for (m = 0; m < ps; ++m) - newpoints.push(points[i + m]); - - newpoints[l + 1] += qy; - bottom = qy; - - i += ps; - j += otherps; - } - else if (px > qx) { - // we got past point below, might need to - // insert interpolated extra point - if (withlines && i > 0 && points[i - ps] != null) { - intery = py + (points[i - ps + 1] - py) * (qx - px) / (points[i - ps] - px); - newpoints.push(qx); - newpoints.push(intery + qy) - for (m = 2; m < ps; ++m) - newpoints.push(points[i + m]); - bottom = qy; - } - - j += otherps; - } - else { - for (m = 0; m < ps; ++m) - newpoints.push(points[i + m]); - - // we might be able to interpolate a point below, - // this can give us a better y - if (withlines && j > 0 && otherpoints[j - ps] != null) - bottom = qy + (otherpoints[j - ps + 1] - qy) * (px - qx) / (otherpoints[j - ps] - qx); - - newpoints[l + 1] += bottom; - - i += ps; - } - - if (l != newpoints.length && withbars) - newpoints[l + 2] += bottom; - } - - // maintain the line steps invariant - if (withsteps && l != newpoints.length && l > 0 - && newpoints[l] != null - && newpoints[l] != newpoints[l - ps] - && newpoints[l + 1] != newpoints[l - ps + 1]) { - for (m = 0; m < ps; ++m) - newpoints[l + ps + m] = newpoints[l + m]; - newpoints[l + 1] = newpoints[l - ps + 1]; - } - } - - datapoints.points = newpoints; - } - - plot.hooks.processDatapoints.push(stackData); - } - - $.plot.plugins.push({ - init: init, - options: options, - name: 'stack', - version: '1.0' - }); -})(jQuery); - --- a/owa/modules/base/js/includes/jquery/flot/jquery.flot.stack.min.js +++ /dev/null @@ -1,1 +1,1 @@ -(function(B){var A={series:{stack:null}};function C(F){function D(J,I){var H=null;for(var G=0;G=Y.length){break}U=N.length;if(V>=S.length||S[V]==null||Y[X]==null){for(m=0;ma){if(O&&X>0&&Y[X-T]!=null){I=Q+(Y[X-T+1]-Q)*(a-R)/(Y[X-T]-R);N.push(a);N.push(I+Z);for(m=2;m0&&S[V-T]!=null){M=Z+(S[V-T+1]-Z)*(R-a)/(S[V-T]-a)}N[U+1]+=M;X+=T}}if(U!=N.length&&K){N[U+2]+=M}}if(J&&U!=N.length&&U>0&&N[U]!=null&&N[U]!=N[U-T]&&N[U+1]!=N[U-T+1]){for(m=0;m 0 && origpoints[i - ps] != null) { - var interx = (x - origpoints[i - ps]) / (y - origpoints[i - ps + 1]) * (below - y) + x; - prevp.push(interx); - prevp.push(below); - for (m = 2; m < ps; ++m) - prevp.push(origpoints[i + m]); - - p.push(null); // start new segment - p.push(null); - for (m = 2; m < ps; ++m) - p.push(origpoints[i + m]); - p.push(interx); - p.push(below); - for (m = 2; m < ps; ++m) - p.push(origpoints[i + m]); - } - - p.push(x); - p.push(y); - } - - datapoints.points = newpoints; - thresholded.datapoints.points = threspoints; - - if (thresholded.datapoints.points.length > 0) - plot.getData().push(thresholded); - - // FIXME: there are probably some edge cases left in bars - } - - plot.hooks.processDatapoints.push(thresholdData); - } - - $.plot.plugins.push({ - init: init, - options: options, - name: 'threshold', - version: '1.0' - }); -})(jQuery); - --- a/owa/modules/base/js/includes/jquery/flot/jquery.flot.threshold.min.js +++ /dev/null @@ -1,1 +1,1 @@ -(function(B){var A={series:{threshold:null}};function C(D){function E(L,S,M){if(!S.threshold){return }var F=M.pointsize,I,O,N,G,K,H=B.extend({},S);H.datapoints={points:[],pointsize:F};H.label=null;H.color=S.threshold.color;H.threshold=null;H.originSeries=S;H.data=[];var P=S.threshold.below,Q=M.points,R=S.lines.show;threspoints=[];newpoints=[];for(I=0;I0&&Q[I-F]!=null){var J=(O-Q[I-F])/(N-Q[I-F+1])*(P-N)+O;K.push(J);K.push(P);for(m=2;m0){L.getData().push(H)}}D.hooks.processDatapoints.push(E)}B.plot.plugins.push({init:C,options:A,name:"threshold",version:"1.0"})})(jQuery); + --- a/owa/modules/base/js/includes/jquery/flot/jquery.js +++ /dev/null @@ -1,4377 +1,1 @@ -/*! - * jQuery JavaScript Library v1.3.2 - * http://jquery.com/ - * - * Copyright (c) 2009 John Resig - * Dual licensed under the MIT and GPL licenses. - * http://docs.jquery.com/License - * - * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009) - * Revision: 6246 - */ -(function(){ -var - // Will speed up references to window, and allows munging its name. - window = this, - // Will speed up references to undefined, and allows munging its name. - undefined, - // Map over jQuery in case of overwrite - _jQuery = window.jQuery, - // Map over the $ in case of overwrite - _$ = window.$, - - jQuery = window.jQuery = window.$ = function( selector, context ) { - // The jQuery object is actually just the init constructor 'enhanced' - return new jQuery.fn.init( selector, context ); - }, - - // A simple way to check for HTML strings or ID strings - // (both of which we optimize for) - quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/, - // Is it a simple selector - isSimple = /^.[^:#\[\.,]*$/; - -jQuery.fn = jQuery.prototype = { - init: function( selector, context ) { - // Make sure that a selection was provided - selector = selector || document; - - // Handle $(DOMElement) - if ( selector.nodeType ) { - this[0] = selector; - this.length = 1; - this.context = selector; - return this; - } - // Handle HTML strings - if ( typeof selector === "string" ) { - // Are we dealing with HTML string or an ID? - var match = quickExpr.exec( selector ); - - // Verify a match, and that no context was specified for #id - if ( match && (match[1] || !context) ) { - - // HANDLE: $(html) -> $(array) - if ( match[1] ) - selector = jQuery.clean( [ match[1] ], context ); - - // HANDLE: $("#id") - else { - var elem = document.getElementById( match[3] ); - - // Handle the case where IE and Opera return items - // by name instead of ID - if ( elem && elem.id != match[3] ) - return jQuery().find( selector ); - - // Otherwise, we inject the element directly into the jQuery object - var ret = jQuery( elem || [] ); - ret.context = document; - ret.selector = selector; - return ret; - } - - // HANDLE: $(expr, [context]) - // (which is just equivalent to: $(content).find(expr) - } else - return jQuery( context ).find( selector ); - - // HANDLE: $(function) - // Shortcut for document ready - } else if ( jQuery.isFunction( selector ) ) - return jQuery( document ).ready( selector ); - - // Make sure that old selector state is passed along - if ( selector.selector && selector.context ) { - this.selector = selector.selector; - this.context = selector.context; - } - - return this.setArray(jQuery.isArray( selector ) ? - selector : - jQuery.makeArray(selector)); - }, - - // Start with an empty selector - selector: "", - - // The current version of jQuery being used - jquery: "1.3.2", - - // The number of elements contained in the matched element set - size: function() { - return this.length; - }, - - // Get the Nth element in the matched element set OR - // Get the whole matched element set as a clean array - get: function( num ) { - return num === undefined ? - - // Return a 'clean' array - Array.prototype.slice.call( this ) : - - // Return just the object - this[ num ]; - }, - - // Take an array of elements and push it onto the stack - // (returning the new matched element set) - pushStack: function( elems, name, selector ) { - // Build a new jQuery matched element set - var ret = jQuery( elems ); - - // Add the old object onto the stack (as a reference) - ret.prevObject = this; - - ret.context = this.context; - - if ( name === "find" ) - ret.selector = this.selector + (this.selector ? " " : "") + selector; - else if ( name ) - ret.selector = this.selector + "." + name + "(" + selector + ")"; - - // Return the newly-formed element set - return ret; - }, - - // Force the current matched set of elements to become - // the specified array of elements (destroying the stack in the process) - // You should use pushStack() in order to do this, but maintain the stack - setArray: function( elems ) { - // Resetting the length to 0, then using the native Array push - // is a super-fast way to populate an object with array-like properties - this.length = 0; - Array.prototype.push.apply( this, elems ); - - return this; - }, - - // Execute a callback for every element in the matched set. - // (You can seed the arguments with an array of args, but this is - // only used internally.) - each: function( callback, args ) { - return jQuery.each( this, callback, args ); - }, - - // Determine the position of an element within - // the matched set of elements - index: function( elem ) { - // Locate the position of the desired element - return jQuery.inArray( - // If it receives a jQuery object, the first element is used - elem && elem.jquery ? elem[0] : elem - , this ); - }, - - attr: function( name, value, type ) { - var options = name; - - // Look for the case where we're accessing a style value - if ( typeof name === "string" ) - if ( value === undefined ) - return this[0] && jQuery[ type || "attr" ]( this[0], name ); - - else { - options = {}; - options[ name ] = value; - } - - // Check to see if we're setting style values - return this.each(function(i){ - // Set all the styles - for ( name in options ) - jQuery.attr( - type ? - this.style : - this, - name, jQuery.prop( this, options[ name ], type, i, name ) - ); - }); - }, - - css: function( key, value ) { - // ignore negative width and height values - if ( (key == 'width' || key == 'height') && parseFloat(value) < 0 ) - value = undefined; - return this.attr( key, value, "curCSS" ); - }, - - text: function( text ) { - if ( typeof text !== "object" && text != null ) - return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) ); - - var ret = ""; - - jQuery.each( text || this, function(){ - jQuery.each( this.childNodes, function(){ - if ( this.nodeType != 8 ) - ret += this.nodeType != 1 ? - this.nodeValue : - jQuery.fn.text( [ this ] ); - }); - }); - - return ret; - }, - - wrapAll: function( html ) { - if ( this[0] ) { - // The elements to wrap the target around - var wrap = jQuery( html, this[0].ownerDocument ).clone(); - - if ( this[0].parentNode ) - wrap.insertBefore( this[0] ); - - wrap.map(function(){ - var elem = this; - - while ( elem.firstChild ) - elem = elem.firstChild; - - return elem; - }).append(this); - } - - return this; - }, - - wrapInner: function( html ) { - return this.each(function(){ - jQuery( this ).contents().wrapAll( html ); - }); - }, - - wrap: function( html ) { - return this.each(function(){ - jQuery( this ).wrapAll( html ); - }); - }, - - append: function() { - return this.domManip(arguments, true, function(elem){ - if (this.nodeType == 1) - this.appendChild( elem ); - }); - }, - - prepend: function() { - return this.domManip(arguments, true, function(elem){ - if (this.nodeType == 1) - this.insertBefore( elem, this.firstChild ); - }); - }, - - before: function() { - return this.domManip(arguments, false, function(elem){ - this.parentNode.insertBefore( elem, this ); - }); - }, - - after: function() { - return this.domManip(arguments, false, function(elem){ - this.parentNode.insertBefore( elem, this.nextSibling ); - }); - }, - - end: function() { - return this.prevObject || jQuery( [] ); - }, - - // For internal use only. - // Behaves like an Array's method, not like a jQuery method. - push: [].push, - sort: [].sort, - splice: [].splice, - - find: function( selector ) { - if ( this.length === 1 ) { - var ret = this.pushStack( [], "find", selector ); - ret.length = 0; - jQuery.find( selector, this[0], ret ); - return ret; - } else { - return this.pushStack( jQuery.unique(jQuery.map(this, function(elem){ - return jQuery.find( selector, elem ); - })), "find", selector ); - } - }, - - clone: function( events ) { - // Do the clone - var ret = this.map(function(){ - if ( !jQuery.support.noCloneEvent && !jQuery.isXMLDoc(this) ) { - // IE copies events bound via attachEvent when - // using cloneNode. Calling detachEvent on the - // clone will also remove the events from the orignal - // In order to get around this, we use innerHTML. - // Unfortunately, this means some modifications to - // attributes in IE that are actually only stored - // as properties will not be copied (such as the - // the name attribute on an input). - var html = this.outerHTML; - if ( !html ) { - var div = this.ownerDocument.createElement("div"); - div.appendChild( this.cloneNode(true) ); - html = div.innerHTML; - } - - return jQuery.clean([html.replace(/ jQuery\d+="(?:\d+|null)"/g, "").replace(/^\s*/, "")])[0]; - } else - return this.cloneNode(true); - }); - - // Copy the events from the original to the clone - if ( events === true ) { - var orig = this.find("*").andSelf(), i = 0; - - ret.find("*").andSelf().each(function(){ - if ( this.nodeName !== orig[i].nodeName ) - return; - - var events = jQuery.data( orig[i], "events" ); - - for ( var type in events ) { - for ( var handler in events[ type ] ) { - jQuery.event.add( this, type, events[ type ][ handler ], events[ type ][ handler ].data ); - } - } - - i++; - }); - } - - // Return the cloned set - return ret; - }, - - filter: function( selector ) { - return this.pushStack( - jQuery.isFunction( selector ) && - jQuery.grep(this, function(elem, i){ - return selector.call( elem, i ); - }) || - - jQuery.multiFilter( selector, jQuery.grep(this, function(elem){ - return elem.nodeType === 1; - }) ), "filter", selector ); - }, - - closest: function( selector ) { - var pos = jQuery.expr.match.POS.test( selector ) ? jQuery(selector) : null, - closer = 0; - - return this.map(function(){ - var cur = this; - while ( cur && cur.ownerDocument ) { - if ( pos ? pos.index(cur) > -1 : jQuery(cur).is(selector) ) { - jQuery.data(cur, "closest", closer); - return cur; - } - cur = cur.parentNode; - closer++; - } - }); - }, - - not: function( selector ) { - if ( typeof selector === "string" ) - // test special case where just one selector is passed in - if ( isSimple.test( selector ) ) - return this.pushStack( jQuery.multiFilter( selector, this, true ), "not", selector ); - else - selector = jQuery.multiFilter( selector, this ); - - var isArrayLike = selector.length && selector[selector.length - 1] !== undefined && !selector.nodeType; - return this.filter(function() { - return isArrayLike ? jQuery.inArray( this, selector ) < 0 : this != selector; - }); - }, - - add: function( selector ) { - return this.pushStack( jQuery.unique( jQuery.merge( - this.get(), - typeof selector === "string" ? - jQuery( selector ) : - jQuery.makeArray( selector ) - ))); - }, - - is: function( selector ) { - return !!selector && jQuery.multiFilter( selector, this ).length > 0; - }, - - hasClass: function( selector ) { - return !!selector && this.is( "." + selector ); - }, - - val: function( value ) { - if ( value === undefined ) { - var elem = this[0]; - - if ( elem ) { - if( jQuery.nodeName( elem, 'option' ) ) - return (elem.attributes.value || {}).specified ? elem.value : elem.text; - - // We need to handle select boxes special - if ( jQuery.nodeName( elem, "select" ) ) { - var index = elem.selectedIndex, - values = [], - options = elem.options, - one = elem.type == "select-one"; - - // Nothing was selected - if ( index < 0 ) - return null; - - // Loop through all the selected options - for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) { - var option = options[ i ]; - - if ( option.selected ) { - // Get the specifc value for the option - value = jQuery(option).val(); - - // We don't need an array for one selects - if ( one ) - return value; - - // Multi-Selects return an array - values.push( value ); - } - } - - return values; - } - - // Everything else, we just grab the value - return (elem.value || "").replace(/\r/g, ""); - - } - - return undefined; - } - - if ( typeof value === "number" ) - value += ''; - - return this.each(function(){ - if ( this.nodeType != 1 ) - return; - - if ( jQuery.isArray(value) && /radio|checkbox/.test( this.type ) ) - this.checked = (jQuery.inArray(this.value, value) >= 0 || - jQuery.inArray(this.name, value) >= 0); - - else if ( jQuery.nodeName( this, "select" ) ) { - var values = jQuery.makeArray(value); - - jQuery( "option", this ).each(function(){ - this.selected = (jQuery.inArray( this.value, values ) >= 0 || - jQuery.inArray( this.text, values ) >= 0); - }); - - if ( !values.length ) - this.selectedIndex = -1; - - } else - this.value = value; - }); - }, - - html: function( value ) { - return value === undefined ? - (this[0] ? - this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g, "") : - null) : - this.empty().append( value ); - }, - - replaceWith: function( value ) { - return this.after( value ).remove(); - }, - - eq: function( i ) { - return this.slice( i, +i + 1 ); - }, - - slice: function() { - return this.pushStack( Array.prototype.slice.apply( this, arguments ), - "slice", Array.prototype.slice.call(arguments).join(",") ); - }, - - map: function( callback ) { - return this.pushStack( jQuery.map(this, function(elem, i){ - return callback.call( elem, i, elem ); - })); - }, - - andSelf: function() { - return this.add( this.prevObject ); - }, - - domManip: function( args, table, callback ) { - if ( this[0] ) { - var fragment = (this[0].ownerDocument || this[0]).createDocumentFragment(), - scripts = jQuery.clean( args, (this[0].ownerDocument || this[0]), fragment ), - first = fragment.firstChild; - - if ( first ) - for ( var i = 0, l = this.length; i < l; i++ ) - callback.call( root(this[i], first), this.length > 1 || i > 0 ? - fragment.cloneNode(true) : fragment ); - - if ( scripts ) - jQuery.each( scripts, evalScript ); - } - - return this; - - function root( elem, cur ) { - return table && jQuery.nodeName(elem, "table") && jQuery.nodeName(cur, "tr") ? - (elem.getElementsByTagName("tbody")[0] || - elem.appendChild(elem.ownerDocument.createElement("tbody"))) : - elem; - } - } -}; - -// Give the init function the jQuery prototype for later instantiation -jQuery.fn.init.prototype = jQuery.fn; - -function evalScript( i, elem ) { - if ( elem.src ) - jQuery.ajax({ - url: elem.src, - async: false, - dataType: "script" - }); - - else - jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" ); - - if ( elem.parentNode ) - elem.parentNode.removeChild( elem ); -} - -function now(){ - return +new Date; -} - -jQuery.extend = jQuery.fn.extend = function() { - // copy reference to target object - var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options; - - // Handle a deep copy situation - if ( typeof target === "boolean" ) { - deep = target; - target = arguments[1] || {}; - // skip the boolean and the target - i = 2; - } - - // Handle case when target is a string or something (possible in deep copy) - if ( typeof target !== "object" && !jQuery.isFunction(target) ) - target = {}; - - // extend jQuery itself if only one argument is passed - if ( length == i ) { - target = this; - --i; - } - - for ( ; i < length; i++ ) - // Only deal with non-null/undefined values - if ( (options = arguments[ i ]) != null ) - // Extend the base object - for ( var name in options ) { - var src = target[ name ], copy = options[ name ]; - - // Prevent never-ending loop - if ( target === copy ) - continue; - - // Recurse if we're merging object values - if ( deep && copy && typeof copy === "object" && !copy.nodeType ) - target[ name ] = jQuery.extend( deep, - // Never move original objects, clone them - src || ( copy.length != null ? [ ] : { } ) - , copy ); - - // Don't bring in undefined values - else if ( copy !== undefined ) - target[ name ] = copy; - - } - - // Return the modified object - return target; -}; - -// exclude the following css properties to add px -var exclude = /z-?index|font-?weight|opacity|zoom|line-?height/i, - // cache defaultView - defaultView = document.defaultView || {}, - toString = Object.prototype.toString; - -jQuery.extend({ - noConflict: function( deep ) { - window.$ = _$; - - if ( deep ) - window.jQuery = _jQuery; - - return jQuery; - }, - - // See test/unit/core.js for details concerning isFunction. - // Since version 1.3, DOM methods and functions like alert - // aren't supported. They return false on IE (#2968). - isFunction: function( obj ) { - return toString.call(obj) === "[object Function]"; - }, - - isArray: function( obj ) { - return toString.call(obj) === "[object Array]"; - }, - - // check if an element is in a (or is an) XML document - isXMLDoc: function( elem ) { - return elem.nodeType === 9 && elem.documentElement.nodeName !== "HTML" || - !!elem.ownerDocument && jQuery.isXMLDoc( elem.ownerDocument ); - }, - - // Evalulates a script in a global context - globalEval: function( data ) { - if ( data && /\S/.test(data) ) { - // Inspired by code by Andrea Giammarchi - // http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html - var head = document.getElementsByTagName("head")[0] || document.documentElement, - script = document.createElement("script"); - - script.type = "text/javascript"; - if ( jQuery.support.scriptEval ) - script.appendChild( document.createTextNode( data ) ); - else - script.text = data; - - // Use insertBefore instead of appendChild to circumvent an IE6 bug. - // This arises when a base node is used (#2709). - head.insertBefore( script, head.firstChild ); - head.removeChild( script ); - } - }, - - nodeName: function( elem, name ) { - return elem.nodeName && elem.nodeName.toUpperCase() == name.toUpperCase(); - }, - - // args is for internal usage only - each: function( object, callback, args ) { - var name, i = 0, length = object.length; - - if ( args ) { - if ( length === undefined ) { - for ( name in object ) - if ( callback.apply( object[ name ], args ) === false ) - break; - } else - for ( ; i < length; ) - if ( callback.apply( object[ i++ ], args ) === false ) - break; - - // A special, fast, case for the most common use of each - } else { - if ( length === undefined ) { - for ( name in object ) - if ( callback.call( object[ name ], name, object[ name ] ) === false ) - break; - } else - for ( var value = object[0]; - i < length && callback.call( value, i, value ) !== false; value = object[++i] ){} - } - - return object; - }, - - prop: function( elem, value, type, i, name ) { - // Handle executable functions - if ( jQuery.isFunction( value ) ) - value = value.call( elem, i ); - - // Handle passing in a number to a CSS property - return typeof value === "number" && type == "curCSS" && !exclude.test( name ) ? - value + "px" : - value; - }, - - className: { - // internal only, use addClass("class") - add: function( elem, classNames ) { - jQuery.each((classNames || "").split(/\s+/), function(i, className){ - if ( elem.nodeType == 1 && !jQuery.className.has( elem.className, className ) ) - elem.className += (elem.className ? " " : "") + className; - }); - }, - - // internal only, use removeClass("class") - remove: function( elem, classNames ) { - if (elem.nodeType == 1) - elem.className = classNames !== undefined ? - jQuery.grep(elem.className.split(/\s+/), function(className){ - return !jQuery.className.has( classNames, className ); - }).join(" ") : - ""; - }, - - // internal only, use hasClass("class") - has: function( elem, className ) { - return elem && jQuery.inArray( className, (elem.className || elem).toString().split(/\s+/) ) > -1; - } - }, - - // A method for quickly swapping in/out CSS properties to get correct calculations - swap: function( elem, options, callback ) { - var old = {}; - // Remember the old values, and insert the new ones - for ( var name in options ) { - old[ name ] = elem.style[ name ]; - elem.style[ name ] = options[ name ]; - } - - callback.call( elem ); - - // Revert the old values - for ( var name in options ) - elem.style[ name ] = old[ name ]; - }, - - css: function( elem, name, force, extra ) { - if ( name == "width" || name == "height" ) { - var val, props = { position: "absolute", visibility: "hidden", display:"block" }, which = name == "width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ]; - - function getWH() { - val = name == "width" ? elem.offsetWidth : elem.offsetHeight; - - if ( extra === "border" ) - return; - - jQuery.each( which, function() { - if ( !extra ) - val -= parseFloat(jQuery.curCSS( elem, "padding" + this, true)) || 0; - if ( extra === "margin" ) - val += parseFloat(jQuery.curCSS( elem, "margin" + this, true)) || 0; - else - val -= parseFloat(jQuery.curCSS( elem, "border" + this + "Width", true)) || 0; - }); - } - - if ( elem.offsetWidth !== 0 ) - getWH(); - else - jQuery.swap( elem, props, getWH ); - - return Math.max(0, Math.round(val)); - } - - return jQuery.curCSS( elem, name, force ); - }, - - curCSS: function( elem, name, force ) { - var ret, style = elem.style; - - // We need to handle opacity special in IE - if ( name == "opacity" && !jQuery.support.opacity ) { - ret = jQuery.attr( style, "opacity" ); - - return ret == "" ? - "1" : - ret; - } - - // Make sure we're using the right name for getting the float value - if ( name.match( /float/i ) ) - name = styleFloat; - - if ( !force && style && style[ name ] ) - ret = style[ name ]; - - else if ( defaultView.getComputedStyle ) { - - // Only "float" is needed here - if ( name.match( /float/i ) ) - name = "float"; - - name = name.replace( /([A-Z])/g, "-$1" ).toLowerCase(); - - var computedStyle = defaultView.getComputedStyle( elem, null ); - - if ( computedStyle ) - ret = computedStyle.getPropertyValue( name ); - - // We should always get a number back from opacity - if ( name == "opacity" && ret == "" ) - ret = "1"; - - } else if ( elem.currentStyle ) { - var camelCase = name.replace(/\-(\w)/g, function(all, letter){ - return letter.toUpperCase(); - }); - - ret = elem.currentStyle[ name ] || elem.currentStyle[ camelCase ]; - - // From the awesome hack by Dean Edwards - // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291 - - // If we're not dealing with a regular pixel number - // but a number that has a weird ending, we need to convert it to pixels - if ( !/^\d+(px)?$/i.test( ret ) && /^\d/.test( ret ) ) { - // Remember the original values - var left = style.left, rsLeft = elem.runtimeStyle.left; - - // Put in the new values to get a computed value out - elem.runtimeStyle.left = elem.currentStyle.left; - style.left = ret || 0; - ret = style.pixelLeft + "px"; - - // Revert the changed values - style.left = left; - elem.runtimeStyle.left = rsLeft; - } - } - - return ret; - }, - - clean: function( elems, context, fragment ) { - context = context || document; - - // !context.createElement fails in IE with an error but returns typeof 'object' - if ( typeof context.createElement === "undefined" ) - context = context.ownerDocument || context[0] && context[0].ownerDocument || document; - - // If a single string is passed in and it's a single tag - // just do a createElement and skip the rest - if ( !fragment && elems.length === 1 && typeof elems[0] === "string" ) { - var match = /^<(\w+)\s*\/?>$/.exec(elems[0]); - if ( match ) - return [ context.createElement( match[1] ) ]; - } - - var ret = [], scripts = [], div = context.createElement("div"); - - jQuery.each(elems, function(i, elem){ - if ( typeof elem === "number" ) - elem += ''; - - if ( !elem ) - return; - - // Convert html string into DOM nodes - if ( typeof elem === "string" ) { - // Fix "XHTML"-style tags in all browsers - elem = elem.replace(/(<(\w+)[^>]*?)\/>/g, function(all, front, tag){ - return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i) ? - all : - front + ">"; - }); - - // Trim whitespace, otherwise indexOf won't work as expected - var tags = elem.replace(/^\s+/, "").substring(0, 10).toLowerCase(); - - var wrap = - // option or optgroup - !tags.indexOf("", "" ] || - - !tags.indexOf("", "" ] || - - tags.match(/^<(thead|tbody|tfoot|colg|cap)/) && - [ 1, "", "
    " ] || - - !tags.indexOf("", "" ] || - - // matched above - (!tags.indexOf("", "" ] || - - !tags.indexOf("", "" ] || - - // IE can't serialize and - - - - - - - - - - - -

    ECMAScript Templating Benchmarks

    -
    -

    ©2010 aefxx // powered by jQuery // idea taken from Brian Landau

    -
      -
    • -

      srender

      -
        -

        -
      • -
      • -

        mustache.js

        -
          -

          -
        • -
        • -

          Underscore

          -
            -

            -
          • -
          • -

            jQote2

            -
              -

              -
            • -
            • -

              Tempest

              -
                -

                -
              • -
              • -

                nano

                -
                  -

                  -
                • -
                • -

                  jQuery templating

                  -
                    -

                    -
                  • -
                  • - Check all -
                  • -
                  • - -   Cycles:  - 5x - 10x - 25x - 50x -   Types:  - Simple - Loop -
                  • -
                  -

                  â–ˆ Single Passed Run    Median in ms [Arithm. AVG in ms]

                  -
                  - - - - - - - - --- a/owa/modules/base/js/includes/jquery/jQote2/jqote.qunit.htm +++ /dev/null @@ -1,115 +1,1 @@ - - - - jQote2 QUnit Simple Test Suite // aefxx.com - - - - - - - -

                  jQote2 QUnit Simple Test Suite

                  -

                  -

                  -
                    - - - - - - - - - - - - - --- a/owa/modules/base/js/includes/jquery/jQote2/jquery.jqote2.js +++ /dev/null @@ -1,119 +1,1 @@ -/* - * jQote2 - client-side Javascript templating engine - * Copyright (C) 2010, aefxx - * http://aefxx.com/ - * - * Licensed under the DWTFYWT PUBLIC LICENSE v2 - * Copyright (C) 2004, Sam Hocevar - * - * Date: Sun, May 5th, 2010 - * Version: 0.9.2 - */ -(function($) { - var ARR = '[object Array]', - FUNC = '[object Function]', - STR = '[object String]'; - var n = 0, - tag = '%', - type_of = Object.prototype.toString; - - $.fn.extend({ - jqote: function(data, t) { - var data = type_of.call(data) === ARR ? data : [data], - dom = ''; - - this.each(function(i) { - var f = ( fn = $.jqotecache[this.jqote] ) ? fn : $.jqotec(this, t || tag); - - for ( var j=0; j < data.length; j++ ) - dom += f.call(data[j], i, j, data, f); - }); - - return dom; - }, - - jqoteapp: function(elem, data, t) { - var dom = $.jqote(elem, data, t); - - return this.each(function() { - $(this).append(dom); - }); - }, - - jqotepre: function(elem, data, t) { - var dom = $.jqote(elem, data, t); - - return this.each(function() { - $(this).prepend(dom); - }); - }, - - jqotesub: function(elem, data, t) { - var dom = $.jqote(elem, data, t); - - return this.each(function() { - $(this).html(dom); - }); - } - }); - - $.extend({ - jqote: function(elem, data, t) { - var dom = '', fn = [], t = t || tag, type = type_of.call(elem), - data = type_of.call(data) === ARR ? data : [data]; - - if ( type === FUNC ) - fn = [elem]; - - else if ( type === ARR ) - fn = type_of.call(elem[0]) === FUNC ? - elem : $.map(elem, function(e) { return $.jqotec(e, t); }); - - else if ( type === STR ) - fn.push( elem.indexOf('<' + t) < 0 ? - $.jqotec($(elem), t) : $.jqotec(elem, t)); - - else fn = $.map($(elem), function(e) { return $.jqotec(e, t); }); - - for ( var i=0,l=fn.length; i < l; i++ ) - for ( var j=0; j < data.length; j++ ) - dom += fn[i].call(data[j], i, j, data, fn[i]); - - return dom; - }, - - jqotec: function(elem, t) { - var fn, str = '', t = t || tag, - type = type_of.call(elem), - tmpl = ( type === STR && elem.indexOf('<' + t) >= 0 ) ? - elem : ( elem = ( type === STR || elem instanceof jQuery ) ? - $(elem)[0] : elem ).innerHTML; - - var arr = tmpl.replace(/\s*\s*|[\r\n\t]/g, '') - .split('<'+t).join(t+'>\x1b') - .split(t+'>'); - - for ( var i=0,l=arr.length; i < l; i++ ) - str += arr[i].charAt(0) !== '\x1b' ? - "out+='" + arr[i].replace(/([^\\])?(["'])/g, '$1\\$2') + "'" : (arr[i].charAt(1) === '=' ? - '+' + arr[i].substr(2) + ';' : ';' + arr[i].substr(1)); - - fn = new Function('i, j, data, fn', 'var out="";' + str + '; return out;'); - - return type_of.call(elem) === STR ? - fn : $.jqotecache[elem.jqote = elem.jqote || n++] = fn; - }, - - jqotefn: function(elem) { - return $.jqotecache[$(elem)[0].jqote] || false; - }, - - jqotetag: function(str) { - tag = str; - }, - - jqotecache: [] - }); -})(jQuery); - --- a/owa/modules/base/js/includes/jquery/jQote2/jquery.jqote2.min.js +++ /dev/null @@ -1,13 +1,1 @@ -/* - * jQote2 - client-side Javascript templating engine - * Copyright (C) 2010, aefxx - * http://aefxx.com/ - * - * Licensed under the DWTFYWT PUBLIC LICENSE v2 - * Copyright (C) 2004, Sam Hocevar - * - * Date: Sun, May 5th, 2010 - * Version: 0.9.2 - */ -(function($){var A='[object Array]',F='[object Function]',S='[object String]',n=0,c='%',ts=Object.prototype.toString;$.fn.extend({jqote:function(x,y){var x=ts.call(x)===A?x:[x],d='';this.each(function(i){var f=(l=$.jqotecache[this.jqote])?l:$.jqotec(this,y||c);for(var j=0;j=0)?e:(e=(t===S||e instanceof jQuery)?$(e)[0]:e).innerHTML;var a=h.replace(/\s*\s*|[\r\n\t]/g,'').split('<'+y).join(y+'>\x1b').split(y+'>');for(var i=0,q=a.length;i)[^>]*$|^#(\w+)$/,isSimple=/^.[^:#\[\.]*$/,undefined;jQuery.fn=jQuery.prototype={init:function(selector,context){selector=selector||document;if(selector.nodeType){this[0]=selector;this.length=1;return this;}if(typeof selector=="string"){var match=quickExpr.exec(selector);if(match&&(match[1]||!context)){if(match[1])selector=jQuery.clean([match[1]],context);else{var elem=document.getElementById(match[3]);if(elem){if(elem.id!=match[3])return jQuery().find(selector);return jQuery(elem);}selector=[];}}else -return jQuery(context).find(selector);}else if(jQuery.isFunction(selector))return jQuery(document)[jQuery.fn.ready?"ready":"load"](selector);return this.setArray(jQuery.makeArray(selector));},jquery:"1.2.6",size:function(){return this.length;},length:0,get:function(num){return num==undefined?jQuery.makeArray(this):this[num];},pushStack:function(elems){var ret=jQuery(elems);ret.prevObject=this;return ret;},setArray:function(elems){this.length=0;Array.prototype.push.apply(this,elems);return this;},each:function(callback,args){return jQuery.each(this,callback,args);},index:function(elem){var ret=-1;return jQuery.inArray(elem&&elem.jquery?elem[0]:elem,this);},attr:function(name,value,type){var options=name;if(name.constructor==String)if(value===undefined)return this[0]&&jQuery[type||"attr"](this[0],name);else{options={};options[name]=value;}return this.each(function(i){for(name in options)jQuery.attr(type?this.style:this,name,jQuery.prop(this,options[name],type,i,name));});},css:function(key,value){if((key=='width'||key=='height')&&parseFloat(value)<0)value=undefined;return this.attr(key,value,"curCSS");},text:function(text){if(typeof text!="object"&&text!=null)return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(text));var ret="";jQuery.each(text||this,function(){jQuery.each(this.childNodes,function(){if(this.nodeType!=8)ret+=this.nodeType!=1?this.nodeValue:jQuery.fn.text([this]);});});return ret;},wrapAll:function(html){if(this[0])jQuery(html,this[0].ownerDocument).clone().insertBefore(this[0]).map(function(){var elem=this;while(elem.firstChild)elem=elem.firstChild;return elem;}).append(this);return this;},wrapInner:function(html){return this.each(function(){jQuery(this).contents().wrapAll(html);});},wrap:function(html){return this.each(function(){jQuery(this).wrapAll(html);});},append:function(){return this.domManip(arguments,true,false,function(elem){if(this.nodeType==1)this.appendChild(elem);});},prepend:function(){return this.domManip(arguments,true,true,function(elem){if(this.nodeType==1)this.insertBefore(elem,this.firstChild);});},before:function(){return this.domManip(arguments,false,false,function(elem){this.parentNode.insertBefore(elem,this);});},after:function(){return this.domManip(arguments,false,true,function(elem){this.parentNode.insertBefore(elem,this.nextSibling);});},end:function(){return this.prevObject||jQuery([]);},find:function(selector){var elems=jQuery.map(this,function(elem){return jQuery.find(selector,elem);});return this.pushStack(/[^+>] [^+>]/.test(selector)||selector.indexOf("..")>-1?jQuery.unique(elems):elems);},clone:function(events){var ret=this.map(function(){if(jQuery.browser.msie&&!jQuery.isXMLDoc(this)){var clone=this.cloneNode(true),container=document.createElement("div");container.appendChild(clone);return jQuery.clean([container.innerHTML])[0];}else -return this.cloneNode(true);});var clone=ret.find("*").andSelf().each(function(){if(this[expando]!=undefined)this[expando]=null;});if(events===true)this.find("*").andSelf().each(function(i){if(this.nodeType==3)return;var events=jQuery.data(this,"events");for(var type in events)for(var handler in events[type])jQuery.event.add(clone[i],type,events[type][handler],events[type][handler].data);});return ret;},filter:function(selector){return this.pushStack(jQuery.isFunction(selector)&&jQuery.grep(this,function(elem,i){return selector.call(elem,i);})||jQuery.multiFilter(selector,this));},not:function(selector){if(selector.constructor==String)if(isSimple.test(selector))return this.pushStack(jQuery.multiFilter(selector,this,true));else -selector=jQuery.multiFilter(selector,this);var isArrayLike=selector.length&&selector[selector.length-1]!==undefined&&!selector.nodeType;return this.filter(function(){return isArrayLike?jQuery.inArray(this,selector)<0:this!=selector;});},add:function(selector){return this.pushStack(jQuery.unique(jQuery.merge(this.get(),typeof selector=='string'?jQuery(selector):jQuery.makeArray(selector))));},is:function(selector){return!!selector&&jQuery.multiFilter(selector,this).length>0;},hasClass:function(selector){return this.is("."+selector);},val:function(value){if(value==undefined){if(this.length){var elem=this[0];if(jQuery.nodeName(elem,"select")){var index=elem.selectedIndex,values=[],options=elem.options,one=elem.type=="select-one";if(index<0)return null;for(var i=one?index:0,max=one?index+1:options.length;i=0||jQuery.inArray(this.name,value)>=0);else if(jQuery.nodeName(this,"select")){var values=jQuery.makeArray(value);jQuery("option",this).each(function(){this.selected=(jQuery.inArray(this.value,values)>=0||jQuery.inArray(this.text,values)>=0);});if(!values.length)this.selectedIndex=-1;}else -this.value=value;});},html:function(value){return value==undefined?(this[0]?this[0].innerHTML:null):this.empty().append(value);},replaceWith:function(value){return this.after(value).remove();},eq:function(i){return this.slice(i,i+1);},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments));},map:function(callback){return this.pushStack(jQuery.map(this,function(elem,i){return callback.call(elem,i,elem);}));},andSelf:function(){return this.add(this.prevObject);},data:function(key,value){var parts=key.split(".");parts[1]=parts[1]?"."+parts[1]:"";if(value===undefined){var data=this.triggerHandler("getData"+parts[1]+"!",[parts[0]]);if(data===undefined&&this.length)data=jQuery.data(this[0],key);return data===undefined&&parts[1]?this.data(parts[0]):data;}else -return this.trigger("setData"+parts[1]+"!",[parts[0],value]).each(function(){jQuery.data(this,key,value);});},removeData:function(key){return this.each(function(){jQuery.removeData(this,key);});},domManip:function(args,table,reverse,callback){var clone=this.length>1,elems;return this.each(function(){if(!elems){elems=jQuery.clean(args,this.ownerDocument);if(reverse)elems.reverse();}var obj=this;if(table&&jQuery.nodeName(this,"table")&&jQuery.nodeName(elems[0],"tr"))obj=this.getElementsByTagName("tbody")[0]||this.appendChild(this.ownerDocument.createElement("tbody"));var scripts=jQuery([]);jQuery.each(elems,function(){var elem=clone?jQuery(this).clone(true)[0]:this;if(jQuery.nodeName(elem,"script"))scripts=scripts.add(elem);else{if(elem.nodeType==1)scripts=scripts.add(jQuery("script",elem).remove());callback.call(obj,elem);}});scripts.each(evalScript);});}};jQuery.fn.init.prototype=jQuery.fn;function evalScript(i,elem){if(elem.src)jQuery.ajax({url:elem.src,async:false,dataType:"script"});else -jQuery.globalEval(elem.text||elem.textContent||elem.innerHTML||"");if(elem.parentNode)elem.parentNode.removeChild(elem);}function now(){return+new Date;}jQuery.extend=jQuery.fn.extend=function(){var target=arguments[0]||{},i=1,length=arguments.length,deep=false,options;if(target.constructor==Boolean){deep=target;target=arguments[1]||{};i=2;}if(typeof target!="object"&&typeof target!="function")target={};if(length==i){target=this;--i;}for(;i-1;}},swap:function(elem,options,callback){var old={};for(var name in options){old[name]=elem.style[name];elem.style[name]=options[name];}callback.call(elem);for(var name in options)elem.style[name]=old[name];},css:function(elem,name,force){if(name=="width"||name=="height"){var val,props={position:"absolute",visibility:"hidden",display:"block"},which=name=="width"?["Left","Right"]:["Top","Bottom"];function getWH(){val=name=="width"?elem.offsetWidth:elem.offsetHeight;var padding=0,border=0;jQuery.each(which,function(){padding+=parseFloat(jQuery.curCSS(elem,"padding"+this,true))||0;border+=parseFloat(jQuery.curCSS(elem,"border"+this+"Width",true))||0;});val-=Math.round(padding+border);}if(jQuery(elem).is(":visible"))getWH();else -jQuery.swap(elem,props,getWH);return Math.max(0,val);}return jQuery.curCSS(elem,name,force);},curCSS:function(elem,name,force){var ret,style=elem.style;function color(elem){if(!jQuery.browser.safari)return false;var ret=defaultView.getComputedStyle(elem,null);return!ret||ret.getPropertyValue("color")=="";}if(name=="opacity"&&jQuery.browser.msie){ret=jQuery.attr(style,"opacity");return ret==""?"1":ret;}if(jQuery.browser.opera&&name=="display"){var save=style.outline;style.outline="0 solid black";style.outline=save;}if(name.match(/float/i))name=styleFloat;if(!force&&style&&style[name])ret=style[name];else if(defaultView.getComputedStyle){if(name.match(/float/i))name="float";name=name.replace(/([A-Z])/g,"-$1").toLowerCase();var computedStyle=defaultView.getComputedStyle(elem,null);if(computedStyle&&!color(elem))ret=computedStyle.getPropertyValue(name);else{var swap=[],stack=[],a=elem,i=0;for(;a&&color(a);a=a.parentNode)stack.unshift(a);for(;i]*?)\/>/g,function(all,front,tag){return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?all:front+">";});var tags=jQuery.trim(elem).toLowerCase(),div=context.createElement("div");var wrap=!tags.indexOf("",""]||!tags.indexOf("",""]||tags.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"","
                    "]||!tags.indexOf("",""]||(!tags.indexOf("",""]||!tags.indexOf("",""]||jQuery.browser.msie&&[1,"div
                    ","
                    "]||[0,"",""];div.innerHTML=wrap[1]+elem+wrap[2];while(wrap[0]--)div=div.lastChild;if(jQuery.browser.msie){var tbody=!tags.indexOf(""&&tags.indexOf("=0;--j)if(jQuery.nodeName(tbody[j],"tbody")&&!tbody[j].childNodes.length)tbody[j].parentNode.removeChild(tbody[j]);if(/^\s/.test(elem))div.insertBefore(context.createTextNode(elem.match(/^\s*/)[0]),div.firstChild);}elem=jQuery.makeArray(div.childNodes);}if(elem.length===0&&(!jQuery.nodeName(elem,"form")&&!jQuery.nodeName(elem,"select")))return;if(elem[0]==undefined||jQuery.nodeName(elem,"form")||elem.options)ret.push(elem);else -ret=jQuery.merge(ret,elem);});return ret;},attr:function(elem,name,value){if(!elem||elem.nodeType==3||elem.nodeType==8)return undefined;var notxml=!jQuery.isXMLDoc(elem),set=value!==undefined,msie=jQuery.browser.msie;name=notxml&&jQuery.props[name]||name;if(elem.tagName){var special=/href|src|style/.test(name);if(name=="selected"&&jQuery.browser.safari)elem.parentNode.selectedIndex;if(name in elem&¬xml&&!special){if(set){if(name=="type"&&jQuery.nodeName(elem,"input")&&elem.parentNode)throw"type property can't be changed";elem[name]=value;}if(jQuery.nodeName(elem,"form")&&elem.getAttributeNode(name))return elem.getAttributeNode(name).nodeValue;return elem[name];}if(msie&¬xml&&name=="style")return jQuery.attr(elem.style,"cssText",value);if(set)elem.setAttribute(name,""+value);var attr=msie&¬xml&&special?elem.getAttribute(name,2):elem.getAttribute(name);return attr===null?undefined:attr;}if(msie&&name=="opacity"){if(set){elem.zoom=1;elem.filter=(elem.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(value)+''=="NaN"?"":"alpha(opacity="+value*100+")");}return elem.filter&&elem.filter.indexOf("opacity=")>=0?(parseFloat(elem.filter.match(/opacity=([^)]*)/)[1])/100)+'':"";}name=name.replace(/-([a-z])/ig,function(all,letter){return letter.toUpperCase();});if(set)elem[name]=value;return elem[name];},trim:function(text){return(text||"").replace(/^\s+|\s+$/g,"");},makeArray:function(array){var ret=[];if(array!=null){var i=array.length;if(i==null||array.split||array.setInterval||array.call)ret[0]=array;else -while(i)ret[--i]=array[i];}return ret;},inArray:function(elem,array){for(var i=0,length=array.length;i*",this).remove();while(this.firstChild)this.removeChild(this.firstChild);}},function(name,fn){jQuery.fn[name]=function(){return this.each(fn,arguments);};});jQuery.each(["Height","Width"],function(i,name){var type=name.toLowerCase();jQuery.fn[type]=function(size){return this[0]==window?jQuery.browser.opera&&document.body["client"+name]||jQuery.browser.safari&&window["inner"+name]||document.compatMode=="CSS1Compat"&&document.documentElement["client"+name]||document.body["client"+name]:this[0]==document?Math.max(Math.max(document.body["scroll"+name],document.documentElement["scroll"+name]),Math.max(document.body["offset"+name],document.documentElement["offset"+name])):size==undefined?(this.length?jQuery.css(this[0],type):null):this.css(type,size.constructor==String?size:size+"px");};});function num(elem,prop){return elem[0]&&parseInt(jQuery.curCSS(elem[0],prop,true),10)||0;}var chars=jQuery.browser.safari&&parseInt(jQuery.browser.version)<417?"(?:[\\w*_-]|\\\\.)":"(?:[\\w\u0128-\uFFFF*_-]|\\\\.)",quickChild=new RegExp("^>\\s*("+chars+"+)"),quickID=new RegExp("^("+chars+"+)(#)("+chars+"+)"),quickClass=new RegExp("^([#.]?)("+chars+"*)");jQuery.extend({expr:{"":function(a,i,m){return m[2]=="*"||jQuery.nodeName(a,m[2]);},"#":function(a,i,m){return a.getAttribute("id")==m[2];},":":{lt:function(a,i,m){return im[3]-0;},nth:function(a,i,m){return m[3]-0==i;},eq:function(a,i,m){return m[3]-0==i;},first:function(a,i){return i==0;},last:function(a,i,m,r){return i==r.length-1;},even:function(a,i){return i%2==0;},odd:function(a,i){return i%2;},"first-child":function(a){return a.parentNode.getElementsByTagName("*")[0]==a;},"last-child":function(a){return jQuery.nth(a.parentNode.lastChild,1,"previousSibling")==a;},"only-child":function(a){return!jQuery.nth(a.parentNode.lastChild,2,"previousSibling");},parent:function(a){return a.firstChild;},empty:function(a){return!a.firstChild;},contains:function(a,i,m){return(a.textContent||a.innerText||jQuery(a).text()||"").indexOf(m[3])>=0;},visible:function(a){return"hidden"!=a.type&&jQuery.css(a,"display")!="none"&&jQuery.css(a,"visibility")!="hidden";},hidden:function(a){return"hidden"==a.type||jQuery.css(a,"display")=="none"||jQuery.css(a,"visibility")=="hidden";},enabled:function(a){return!a.disabled;},disabled:function(a){return a.disabled;},checked:function(a){return a.checked;},selected:function(a){return a.selected||jQuery.attr(a,"selected");},text:function(a){return"text"==a.type;},radio:function(a){return"radio"==a.type;},checkbox:function(a){return"checkbox"==a.type;},file:function(a){return"file"==a.type;},password:function(a){return"password"==a.type;},submit:function(a){return"submit"==a.type;},image:function(a){return"image"==a.type;},reset:function(a){return"reset"==a.type;},button:function(a){return"button"==a.type||jQuery.nodeName(a,"button");},input:function(a){return/input|select|textarea|button/i.test(a.nodeName);},has:function(a,i,m){return jQuery.find(m[3],a).length;},header:function(a){return/h\d/i.test(a.nodeName);},animated:function(a){return jQuery.grep(jQuery.timers,function(fn){return a==fn.elem;}).length;}}},parse:[/^(\[) *@?([\w-]+) *([!*$^~=]*) *('?"?)(.*?)\4 *\]/,/^(:)([\w-]+)\("?'?(.*?(\(.*?\))?[^(]*?)"?'?\)/,new RegExp("^([:.#]*)("+chars+"+)")],multiFilter:function(expr,elems,not){var old,cur=[];while(expr&&expr!=old){old=expr;var f=jQuery.filter(expr,elems,not);expr=f.t.replace(/^\s*,\s*/,"");cur=not?elems=f.r:jQuery.merge(cur,f.r);}return cur;},find:function(t,context){if(typeof t!="string")return[t];if(context&&context.nodeType!=1&&context.nodeType!=9)return[];context=context||document;var ret=[context],done=[],last,nodeName;while(t&&last!=t){var r=[];last=t;t=jQuery.trim(t);var foundToken=false,re=quickChild,m=re.exec(t);if(m){nodeName=m[1].toUpperCase();for(var i=0;ret[i];i++)for(var c=ret[i].firstChild;c;c=c.nextSibling)if(c.nodeType==1&&(nodeName=="*"||c.nodeName.toUpperCase()==nodeName))r.push(c);ret=r;t=t.replace(re,"");if(t.indexOf(" ")==0)continue;foundToken=true;}else{re=/^([>+~])\s*(\w*)/i;if((m=re.exec(t))!=null){r=[];var merge={};nodeName=m[2].toUpperCase();m=m[1];for(var j=0,rl=ret.length;j=0;if(!not&&pass||not&&!pass)tmp.push(r[i]);}return tmp;},filter:function(t,r,not){var last;while(t&&t!=last){last=t;var p=jQuery.parse,m;for(var i=0;p[i];i++){m=p[i].exec(t);if(m){t=t.substring(m[0].length);m[2]=m[2].replace(/\\/g,"");break;}}if(!m)break;if(m[1]==":"&&m[2]=="not")r=isSimple.test(m[3])?jQuery.filter(m[3],r,true).r:jQuery(r).not(m[3]);else if(m[1]==".")r=jQuery.classFilter(r,m[2],not);else if(m[1]=="["){var tmp=[],type=m[3];for(var i=0,rl=r.length;i=0)^not)tmp.push(a);}r=tmp;}else if(m[1]==":"&&m[2]=="nth-child"){var merge={},tmp=[],test=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(m[3]=="even"&&"2n"||m[3]=="odd"&&"2n+1"||!/\D/.test(m[3])&&"0n+"+m[3]||m[3]),first=(test[1]+(test[2]||1))-0,last=test[3]-0;for(var i=0,rl=r.length;i=0)add=true;if(add^not)tmp.push(node);}r=tmp;}else{var fn=jQuery.expr[m[1]];if(typeof fn=="object")fn=fn[m[2]];if(typeof fn=="string")fn=eval("false||function(a,i){return "+fn+";}");r=jQuery.grep(r,function(elem,i){return fn(elem,i,m,r);},not);}}return{r:r,t:t};},dir:function(elem,dir){var matched=[],cur=elem[dir];while(cur&&cur!=document){if(cur.nodeType==1)matched.push(cur);cur=cur[dir];}return matched;},nth:function(cur,result,dir,elem){result=result||1;var num=0;for(;cur;cur=cur[dir])if(cur.nodeType==1&&++num==result)break;return cur;},sibling:function(n,elem){var r=[];for(;n;n=n.nextSibling){if(n.nodeType==1&&n!=elem)r.push(n);}return r;}});jQuery.event={add:function(elem,types,handler,data){if(elem.nodeType==3||elem.nodeType==8)return;if(jQuery.browser.msie&&elem.setInterval)elem=window;if(!handler.guid)handler.guid=this.guid++;if(data!=undefined){var fn=handler;handler=this.proxy(fn,function(){return fn.apply(this,arguments);});handler.data=data;}var events=jQuery.data(elem,"events")||jQuery.data(elem,"events",{}),handle=jQuery.data(elem,"handle")||jQuery.data(elem,"handle",function(){if(typeof jQuery!="undefined"&&!jQuery.event.triggered)return jQuery.event.handle.apply(arguments.callee.elem,arguments);});handle.elem=elem;jQuery.each(types.split(/\s+/),function(index,type){var parts=type.split(".");type=parts[0];handler.type=parts[1];var handlers=events[type];if(!handlers){handlers=events[type]={};if(!jQuery.event.special[type]||jQuery.event.special[type].setup.call(elem)===false){if(elem.addEventListener)elem.addEventListener(type,handle,false);else if(elem.attachEvent)elem.attachEvent("on"+type,handle);}}handlers[handler.guid]=handler;jQuery.event.global[type]=true;});elem=null;},guid:1,global:{},remove:function(elem,types,handler){if(elem.nodeType==3||elem.nodeType==8)return;var events=jQuery.data(elem,"events"),ret,index;if(events){if(types==undefined||(typeof types=="string"&&types.charAt(0)=="."))for(var type in events)this.remove(elem,type+(types||""));else{if(types.type){handler=types.handler;types=types.type;}jQuery.each(types.split(/\s+/),function(index,type){var parts=type.split(".");type=parts[0];if(events[type]){if(handler)delete events[type][handler.guid];else -for(handler in events[type])if(!parts[1]||events[type][handler].type==parts[1])delete events[type][handler];for(ret in events[type])break;if(!ret){if(!jQuery.event.special[type]||jQuery.event.special[type].teardown.call(elem)===false){if(elem.removeEventListener)elem.removeEventListener(type,jQuery.data(elem,"handle"),false);else if(elem.detachEvent)elem.detachEvent("on"+type,jQuery.data(elem,"handle"));}ret=null;delete events[type];}}});}for(ret in events)break;if(!ret){var handle=jQuery.data(elem,"handle");if(handle)handle.elem=null;jQuery.removeData(elem,"events");jQuery.removeData(elem,"handle");}}},trigger:function(type,data,elem,donative,extra){data=jQuery.makeArray(data);if(type.indexOf("!")>=0){type=type.slice(0,-1);var exclusive=true;}if(!elem){if(this.global[type])jQuery("*").add([window,document]).trigger(type,data);}else{if(elem.nodeType==3||elem.nodeType==8)return undefined;var val,ret,fn=jQuery.isFunction(elem[type]||null),event=!data[0]||!data[0].preventDefault;if(event){data.unshift({type:type,target:elem,preventDefault:function(){},stopPropagation:function(){},timeStamp:now()});data[0][expando]=true;}data[0].type=type;if(exclusive)data[0].exclusive=true;var handle=jQuery.data(elem,"handle");if(handle)val=handle.apply(elem,data);if((!fn||(jQuery.nodeName(elem,'a')&&type=="click"))&&elem["on"+type]&&elem["on"+type].apply(elem,data)===false)val=false;if(event)data.shift();if(extra&&jQuery.isFunction(extra)){ret=extra.apply(elem,val==null?data:data.concat(val));if(ret!==undefined)val=ret;}if(fn&&donative!==false&&val!==false&&!(jQuery.nodeName(elem,'a')&&type=="click")){this.triggered=true;try{elem[type]();}catch(e){}}this.triggered=false;}return val;},handle:function(event){var val,ret,namespace,all,handlers;event=arguments[0]=jQuery.event.fix(event||window.event);namespace=event.type.split(".");event.type=namespace[0];namespace=namespace[1];all=!namespace&&!event.exclusive;handlers=(jQuery.data(this,"events")||{})[event.type];for(var j in handlers){var handler=handlers[j];if(all||handler.type==namespace){event.handler=handler;event.data=handler.data;ret=handler.apply(this,arguments);if(val!==false)val=ret;if(ret===false){event.preventDefault();event.stopPropagation();}}}return val;},fix:function(event){if(event[expando]==true)return event;var originalEvent=event;event={originalEvent:originalEvent};var props="altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target timeStamp toElement type view wheelDelta which".split(" ");for(var i=props.length;i;i--)event[props[i]]=originalEvent[props[i]];event[expando]=true;event.preventDefault=function(){if(originalEvent.preventDefault)originalEvent.preventDefault();originalEvent.returnValue=false;};event.stopPropagation=function(){if(originalEvent.stopPropagation)originalEvent.stopPropagation();originalEvent.cancelBubble=true;};event.timeStamp=event.timeStamp||now();if(!event.target)event.target=event.srcElement||document;if(event.target.nodeType==3)event.target=event.target.parentNode;if(!event.relatedTarget&&event.fromElement)event.relatedTarget=event.fromElement==event.target?event.toElement:event.fromElement;if(event.pageX==null&&event.clientX!=null){var doc=document.documentElement,body=document.body;event.pageX=event.clientX+(doc&&doc.scrollLeft||body&&body.scrollLeft||0)-(doc.clientLeft||0);event.pageY=event.clientY+(doc&&doc.scrollTop||body&&body.scrollTop||0)-(doc.clientTop||0);}if(!event.which&&((event.charCode||event.charCode===0)?event.charCode:event.keyCode))event.which=event.charCode||event.keyCode;if(!event.metaKey&&event.ctrlKey)event.metaKey=event.ctrlKey;if(!event.which&&event.button)event.which=(event.button&1?1:(event.button&2?3:(event.button&4?2:0)));return event;},proxy:function(fn,proxy){proxy.guid=fn.guid=fn.guid||proxy.guid||this.guid++;return proxy;},special:{ready:{setup:function(){bindReady();return;},teardown:function(){return;}},mouseenter:{setup:function(){if(jQuery.browser.msie)return false;jQuery(this).bind("mouseover",jQuery.event.special.mouseenter.handler);return true;},teardown:function(){if(jQuery.browser.msie)return false;jQuery(this).unbind("mouseover",jQuery.event.special.mouseenter.handler);return true;},handler:function(event){if(withinElement(event,this))return true;event.type="mouseenter";return jQuery.event.handle.apply(this,arguments);}},mouseleave:{setup:function(){if(jQuery.browser.msie)return false;jQuery(this).bind("mouseout",jQuery.event.special.mouseleave.handler);return true;},teardown:function(){if(jQuery.browser.msie)return false;jQuery(this).unbind("mouseout",jQuery.event.special.mouseleave.handler);return true;},handler:function(event){if(withinElement(event,this))return true;event.type="mouseleave";return jQuery.event.handle.apply(this,arguments);}}}};jQuery.fn.extend({bind:function(type,data,fn){return type=="unload"?this.one(type,data,fn):this.each(function(){jQuery.event.add(this,type,fn||data,fn&&data);});},one:function(type,data,fn){var one=jQuery.event.proxy(fn||data,function(event){jQuery(this).unbind(event,one);return(fn||data).apply(this,arguments);});return this.each(function(){jQuery.event.add(this,type,one,fn&&data);});},unbind:function(type,fn){return this.each(function(){jQuery.event.remove(this,type,fn);});},trigger:function(type,data,fn){return this.each(function(){jQuery.event.trigger(type,data,this,true,fn);});},triggerHandler:function(type,data,fn){return this[0]&&jQuery.event.trigger(type,data,this[0],false,fn);},toggle:function(fn){var args=arguments,i=1;while(i=0){var selector=url.slice(off,url.length);url=url.slice(0,off);}callback=callback||function(){};var type="GET";if(params)if(jQuery.isFunction(params)){callback=params;params=null;}else{params=jQuery.param(params);type="POST";}var self=this;jQuery.ajax({url:url,type:type,dataType:"html",data:params,complete:function(res,status){if(status=="success"||status=="notmodified")self.html(selector?jQuery("
                    ").append(res.responseText.replace(//g,"")).find(selector):res.responseText);self.each(callback,[res.responseText,status,res]);}});return this;},serialize:function(){return jQuery.param(this.serializeArray());},serializeArray:function(){return this.map(function(){return jQuery.nodeName(this,"form")?jQuery.makeArray(this.elements):this;}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password/i.test(this.type));}).map(function(i,elem){var val=jQuery(this).val();return val==null?null:val.constructor==Array?jQuery.map(val,function(val,i){return{name:elem.name,value:val};}):{name:elem.name,value:val};}).get();}});jQuery.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(i,o){jQuery.fn[o]=function(f){return this.bind(o,f);};});var jsc=now();jQuery.extend({get:function(url,data,callback,type){if(jQuery.isFunction(data)){callback=data;data=null;}return jQuery.ajax({type:"GET",url:url,data:data,success:callback,dataType:type});},getScript:function(url,callback){return jQuery.get(url,null,callback,"script");},getJSON:function(url,data,callback){return jQuery.get(url,data,callback,"json");},post:function(url,data,callback,type){if(jQuery.isFunction(data)){callback=data;data={};}return jQuery.ajax({type:"POST",url:url,data:data,success:callback,dataType:type});},ajaxSetup:function(settings){jQuery.extend(jQuery.ajaxSettings,settings);},ajaxSettings:{url:location.href,global:true,type:"GET",timeout:0,contentType:"application/x-www-form-urlencoded",processData:true,async:true,data:null,username:null,password:null,accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(s){s=jQuery.extend(true,s,jQuery.extend(true,{},jQuery.ajaxSettings,s));var jsonp,jsre=/=\?(&|$)/g,status,data,type=s.type.toUpperCase();if(s.data&&s.processData&&typeof s.data!="string")s.data=jQuery.param(s.data);if(s.dataType=="jsonp"){if(type=="GET"){if(!s.url.match(jsre))s.url+=(s.url.match(/\?/)?"&":"?")+(s.jsonp||"callback")+"=?";}else if(!s.data||!s.data.match(jsre))s.data=(s.data?s.data+"&":"")+(s.jsonp||"callback")+"=?";s.dataType="json";}if(s.dataType=="json"&&(s.data&&s.data.match(jsre)||s.url.match(jsre))){jsonp="jsonp"+jsc++;if(s.data)s.data=(s.data+"").replace(jsre,"="+jsonp+"$1");s.url=s.url.replace(jsre,"="+jsonp+"$1");s.dataType="script";window[jsonp]=function(tmp){data=tmp;success();complete();window[jsonp]=undefined;try{delete window[jsonp];}catch(e){}if(head)head.removeChild(script);};}if(s.dataType=="script"&&s.cache==null)s.cache=false;if(s.cache===false&&type=="GET"){var ts=now();var ret=s.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+ts+"$2");s.url=ret+((ret==s.url)?(s.url.match(/\?/)?"&":"?")+"_="+ts:"");}if(s.data&&type=="GET"){s.url+=(s.url.match(/\?/)?"&":"?")+s.data;s.data=null;}if(s.global&&!jQuery.active++)jQuery.event.trigger("ajaxStart");var remote=/^(?:\w+:)?\/\/([^\/?#]+)/;if(s.dataType=="script"&&type=="GET"&&remote.test(s.url)&&remote.exec(s.url)[1]!=location.host){var head=document.getElementsByTagName("head")[0];var script=document.createElement("script");script.src=s.url;if(s.scriptCharset)script.charset=s.scriptCharset;if(!jsonp){var done=false;script.onload=script.onreadystatechange=function(){if(!done&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){done=true;success();complete();head.removeChild(script);}};}head.appendChild(script);return undefined;}var requestDone=false;var xhr=window.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest();if(s.username)xhr.open(type,s.url,s.async,s.username,s.password);else -xhr.open(type,s.url,s.async);try{if(s.data)xhr.setRequestHeader("Content-Type",s.contentType);if(s.ifModified)xhr.setRequestHeader("If-Modified-Since",jQuery.lastModified[s.url]||"Thu, 01 Jan 1970 00:00:00 GMT");xhr.setRequestHeader("X-Requested-With","XMLHttpRequest");xhr.setRequestHeader("Accept",s.dataType&&s.accepts[s.dataType]?s.accepts[s.dataType]+", */*":s.accepts._default);}catch(e){}if(s.beforeSend&&s.beforeSend(xhr,s)===false){s.global&&jQuery.active--;xhr.abort();return false;}if(s.global)jQuery.event.trigger("ajaxSend",[xhr,s]);var onreadystatechange=function(isTimeout){if(!requestDone&&xhr&&(xhr.readyState==4||isTimeout=="timeout")){requestDone=true;if(ival){clearInterval(ival);ival=null;}status=isTimeout=="timeout"&&"timeout"||!jQuery.httpSuccess(xhr)&&"error"||s.ifModified&&jQuery.httpNotModified(xhr,s.url)&&"notmodified"||"success";if(status=="success"){try{data=jQuery.httpData(xhr,s.dataType,s.dataFilter);}catch(e){status="parsererror";}}if(status=="success"){var modRes;try{modRes=xhr.getResponseHeader("Last-Modified");}catch(e){}if(s.ifModified&&modRes)jQuery.lastModified[s.url]=modRes;if(!jsonp)success();}else -jQuery.handleError(s,xhr,status);complete();if(s.async)xhr=null;}};if(s.async){var ival=setInterval(onreadystatechange,13);if(s.timeout>0)setTimeout(function(){if(xhr){xhr.abort();if(!requestDone)onreadystatechange("timeout");}},s.timeout);}try{xhr.send(s.data);}catch(e){jQuery.handleError(s,xhr,null,e);}if(!s.async)onreadystatechange();function success(){if(s.success)s.success(data,status);if(s.global)jQuery.event.trigger("ajaxSuccess",[xhr,s]);}function complete(){if(s.complete)s.complete(xhr,status);if(s.global)jQuery.event.trigger("ajaxComplete",[xhr,s]);if(s.global&&!--jQuery.active)jQuery.event.trigger("ajaxStop");}return xhr;},handleError:function(s,xhr,status,e){if(s.error)s.error(xhr,status,e);if(s.global)jQuery.event.trigger("ajaxError",[xhr,s,e]);},active:0,httpSuccess:function(xhr){try{return!xhr.status&&location.protocol=="file:"||(xhr.status>=200&&xhr.status<300)||xhr.status==304||xhr.status==1223||jQuery.browser.safari&&xhr.status==undefined;}catch(e){}return false;},httpNotModified:function(xhr,url){try{var xhrRes=xhr.getResponseHeader("Last-Modified");return xhr.status==304||xhrRes==jQuery.lastModified[url]||jQuery.browser.safari&&xhr.status==undefined;}catch(e){}return false;},httpData:function(xhr,type,filter){var ct=xhr.getResponseHeader("content-type"),xml=type=="xml"||!type&&ct&&ct.indexOf("xml")>=0,data=xml?xhr.responseXML:xhr.responseText;if(xml&&data.documentElement.tagName=="parsererror")throw"parsererror";if(filter)data=filter(data,type);if(type=="script")jQuery.globalEval(data);if(type=="json")data=eval("("+data+")");return data;},param:function(a){var s=[];if(a.constructor==Array||a.jquery)jQuery.each(a,function(){s.push(encodeURIComponent(this.name)+"="+encodeURIComponent(this.value));});else -for(var j in a)if(a[j]&&a[j].constructor==Array)jQuery.each(a[j],function(){s.push(encodeURIComponent(j)+"="+encodeURIComponent(this));});else -s.push(encodeURIComponent(j)+"="+encodeURIComponent(jQuery.isFunction(a[j])?a[j]():a[j]));return s.join("&").replace(/%20/g,"+");}});jQuery.fn.extend({show:function(speed,callback){return speed?this.animate({height:"show",width:"show",opacity:"show"},speed,callback):this.filter(":hidden").each(function(){this.style.display=this.oldblock||"";if(jQuery.css(this,"display")=="none"){var elem=jQuery("<"+this.tagName+" />").appendTo("body");this.style.display=elem.css("display");if(this.style.display=="none")this.style.display="block";elem.remove();}}).end();},hide:function(speed,callback){return speed?this.animate({height:"hide",width:"hide",opacity:"hide"},speed,callback):this.filter(":visible").each(function(){this.oldblock=this.oldblock||jQuery.css(this,"display");this.style.display="none";}).end();},_toggle:jQuery.fn.toggle,toggle:function(fn,fn2){return jQuery.isFunction(fn)&&jQuery.isFunction(fn2)?this._toggle.apply(this,arguments):fn?this.animate({height:"toggle",width:"toggle",opacity:"toggle"},fn,fn2):this.each(function(){jQuery(this)[jQuery(this).is(":hidden")?"show":"hide"]();});},slideDown:function(speed,callback){return this.animate({height:"show"},speed,callback);},slideUp:function(speed,callback){return this.animate({height:"hide"},speed,callback);},slideToggle:function(speed,callback){return this.animate({height:"toggle"},speed,callback);},fadeIn:function(speed,callback){return this.animate({opacity:"show"},speed,callback);},fadeOut:function(speed,callback){return this.animate({opacity:"hide"},speed,callback);},fadeTo:function(speed,to,callback){return this.animate({opacity:to},speed,callback);},animate:function(prop,speed,easing,callback){var optall=jQuery.speed(speed,easing,callback);return this[optall.queue===false?"each":"queue"](function(){if(this.nodeType!=1)return false;var opt=jQuery.extend({},optall),p,hidden=jQuery(this).is(":hidden"),self=this;for(p in prop){if(prop[p]=="hide"&&hidden||prop[p]=="show"&&!hidden)return opt.complete.call(this);if(p=="height"||p=="width"){opt.display=jQuery.css(this,"display");opt.overflow=this.style.overflow;}}if(opt.overflow!=null)this.style.overflow="hidden";opt.curAnim=jQuery.extend({},prop);jQuery.each(prop,function(name,val){var e=new jQuery.fx(self,opt,name);if(/toggle|show|hide/.test(val))e[val=="toggle"?hidden?"show":"hide":val](prop);else{var parts=val.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),start=e.cur(true)||0;if(parts){var end=parseFloat(parts[2]),unit=parts[3]||"px";if(unit!="px"){self.style[name]=(end||1)+unit;start=((end||1)/e.cur(true))*start;self.style[name]=start+unit;}if(parts[1])end=((parts[1]=="-="?-1:1)*end)+start;e.custom(start,end,unit);}else -e.custom(start,val,"");}});return true;});},queue:function(type,fn){if(jQuery.isFunction(type)||(type&&type.constructor==Array)){fn=type;type="fx";}if(!type||(typeof type=="string"&&!fn))return queue(this[0],type);return this.each(function(){if(fn.constructor==Array)queue(this,type,fn);else{queue(this,type).push(fn);if(queue(this,type).length==1)fn.call(this);}});},stop:function(clearQueue,gotoEnd){var timers=jQuery.timers;if(clearQueue)this.queue([]);this.each(function(){for(var i=timers.length-1;i>=0;i--)if(timers[i].elem==this){if(gotoEnd)timers[i](true);timers.splice(i,1);}});if(!gotoEnd)this.dequeue();return this;}});var queue=function(elem,type,array){if(elem){type=type||"fx";var q=jQuery.data(elem,type+"queue");if(!q||array)q=jQuery.data(elem,type+"queue",jQuery.makeArray(array));}return q;};jQuery.fn.dequeue=function(type){type=type||"fx";return this.each(function(){var q=queue(this,type);q.shift();if(q.length)q[0].call(this);});};jQuery.extend({speed:function(speed,easing,fn){var opt=speed&&speed.constructor==Object?speed:{complete:fn||!fn&&easing||jQuery.isFunction(speed)&&speed,duration:speed,easing:fn&&easing||easing&&easing.constructor!=Function&&easing};opt.duration=(opt.duration&&opt.duration.constructor==Number?opt.duration:jQuery.fx.speeds[opt.duration])||jQuery.fx.speeds.def;opt.old=opt.complete;opt.complete=function(){if(opt.queue!==false)jQuery(this).dequeue();if(jQuery.isFunction(opt.old))opt.old.call(this);};return opt;},easing:{linear:function(p,n,firstNum,diff){return firstNum+diff*p;},swing:function(p,n,firstNum,diff){return((-Math.cos(p*Math.PI)/2)+0.5)*diff+firstNum;}},timers:[],timerId:null,fx:function(elem,options,prop){this.options=options;this.elem=elem;this.prop=prop;if(!options.orig)options.orig={};}});jQuery.fx.prototype={update:function(){if(this.options.step)this.options.step.call(this.elem,this.now,this);(jQuery.fx.step[this.prop]||jQuery.fx.step._default)(this);if(this.prop=="height"||this.prop=="width")this.elem.style.display="block";},cur:function(force){if(this.elem[this.prop]!=null&&this.elem.style[this.prop]==null)return this.elem[this.prop];var r=parseFloat(jQuery.css(this.elem,this.prop,force));return r&&r>-10000?r:parseFloat(jQuery.curCSS(this.elem,this.prop))||0;},custom:function(from,to,unit){this.startTime=now();this.start=from;this.end=to;this.unit=unit||this.unit||"px";this.now=this.start;this.pos=this.state=0;this.update();var self=this;function t(gotoEnd){return self.step(gotoEnd);}t.elem=this.elem;jQuery.timers.push(t);if(jQuery.timerId==null){jQuery.timerId=setInterval(function(){var timers=jQuery.timers;for(var i=0;ithis.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var done=true;for(var i in this.options.curAnim)if(this.options.curAnim[i]!==true)done=false;if(done){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(jQuery.css(this.elem,"display")=="none")this.elem.style.display="block";}if(this.options.hide)this.elem.style.display="none";if(this.options.hide||this.options.show)for(var p in this.options.curAnim)jQuery.attr(this.elem.style,p,this.options.orig[p]);}if(done)this.options.complete.call(this.elem);return false;}else{var n=t-this.startTime;this.state=n/this.options.duration;this.pos=jQuery.easing[this.options.easing||(jQuery.easing.swing?"swing":"linear")](this.state,n,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update();}return true;}};jQuery.extend(jQuery.fx,{speeds:{slow:600,fast:200,def:400},step:{scrollLeft:function(fx){fx.elem.scrollLeft=fx.now;},scrollTop:function(fx){fx.elem.scrollTop=fx.now;},opacity:function(fx){jQuery.attr(fx.elem.style,"opacity",fx.now);},_default:function(fx){fx.elem.style[fx.prop]=fx.now+fx.unit;}}});jQuery.fn.offset=function(){var left=0,top=0,elem=this[0],results;if(elem)with(jQuery.browser){var parent=elem.parentNode,offsetChild=elem,offsetParent=elem.offsetParent,doc=elem.ownerDocument,safari2=safari&&parseInt(version)<522&&!/adobeair/i.test(userAgent),css=jQuery.curCSS,fixed=css(elem,"position")=="fixed";if(elem.getBoundingClientRect){var box=elem.getBoundingClientRect();add(box.left+Math.max(doc.documentElement.scrollLeft,doc.body.scrollLeft),box.top+Math.max(doc.documentElement.scrollTop,doc.body.scrollTop));add(-doc.documentElement.clientLeft,-doc.documentElement.clientTop);}else{add(elem.offsetLeft,elem.offsetTop);while(offsetParent){add(offsetParent.offsetLeft,offsetParent.offsetTop);if(mozilla&&!/^t(able|d|h)$/i.test(offsetParent.tagName)||safari&&!safari2)border(offsetParent);if(!fixed&&css(offsetParent,"position")=="fixed")fixed=true;offsetChild=/^body$/i.test(offsetParent.tagName)?offsetChild:offsetParent;offsetParent=offsetParent.offsetParent;}while(parent&&parent.tagName&&!/^body|html$/i.test(parent.tagName)){if(!/^inline|table.*$/i.test(css(parent,"display")))add(-parent.scrollLeft,-parent.scrollTop);if(mozilla&&css(parent,"overflow")!="visible")border(parent);parent=parent.parentNode;}if((safari2&&(fixed||css(offsetChild,"position")=="absolute"))||(mozilla&&css(offsetChild,"position")!="absolute"))add(-doc.body.offsetLeft,-doc.body.offsetTop);if(fixed)add(Math.max(doc.documentElement.scrollLeft,doc.body.scrollLeft),Math.max(doc.documentElement.scrollTop,doc.body.scrollTop));}results={top:top,left:left};}function border(elem){add(jQuery.curCSS(elem,"borderLeftWidth",true),jQuery.curCSS(elem,"borderTopWidth",true));}function add(l,t){left+=parseInt(l,10)||0;top+=parseInt(t,10)||0;}return results;};jQuery.fn.extend({position:function(){var left=0,top=0,results;if(this[0]){var offsetParent=this.offsetParent(),offset=this.offset(),parentOffset=/^body|html$/i.test(offsetParent[0].tagName)?{top:0,left:0}:offsetParent.offset();offset.top-=num(this,'marginTop');offset.left-=num(this,'marginLeft');parentOffset.top+=num(offsetParent,'borderTopWidth');parentOffset.left+=num(offsetParent,'borderLeftWidth');results={top:offset.top-parentOffset.top,left:offset.left-parentOffset.left};}return results;},offsetParent:function(){var offsetParent=this[0].offsetParent;while(offsetParent&&(!/^body|html$/i.test(offsetParent.tagName)&&jQuery.css(offsetParent,'position')=='static'))offsetParent=offsetParent.offsetParent;return jQuery(offsetParent);}});jQuery.each(['Left','Top'],function(i,name){var method='scroll'+name;jQuery.fn[method]=function(val){if(!this[0])return;return val!=undefined?this.each(function(){this==window||this==document?window.scrollTo(!i?val:jQuery(window).scrollLeft(),i?val:jQuery(window).scrollTop()):this[method]=val;}):this[0]==window||this[0]==document?self[i?'pageYOffset':'pageXOffset']||jQuery.boxModel&&document.documentElement[method]||document.body[method]:this[0][method];};});jQuery.each(["Height","Width"],function(i,name){var tl=i?"Left":"Top",br=i?"Right":"Bottom";jQuery.fn["inner"+name]=function(){return this[name.toLowerCase()]()+num(this,"padding"+tl)+num(this,"padding"+br);};jQuery.fn["outer"+name]=function(margin){return this["inner"+name]()+num(this,"border"+tl+"Width")+num(this,"border"+br+"Width")+(margin?num(this,"margin"+tl)+num(this,"margin"+br):0);};});})(); + --- a/owa/modules/base/js/includes/jquery/jquery-1.3.2.min.js +++ /dev/null @@ -1,19 +1,1 @@ -/* - * jQuery JavaScript Library v1.3.2 - * http://jquery.com/ - * - * Copyright (c) 2009 John Resig - * Dual licensed under the MIT and GPL licenses. - * http://docs.jquery.com/License - * - * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009) - * Revision: 6246 - */ -(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("",""]||!O.indexOf("",""]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"","
                    "]||!O.indexOf("",""]||(!O.indexOf("",""]||!O.indexOf("",""]||!o.support.htmlSerialize&&[1,"div
                    ","
                    "]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}}); -/* - * Sizzle CSS Selector Engine - v0.9.3 - * Copyright 2009, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * More information: http://sizzlejs.com/ - */ -(function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return UT[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="

                    ";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="
                    ";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var Z=0,U=V.length;Z0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0){I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("
                    ").append(M.responseText.replace(//g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function(){G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='
                    ';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})(); + --- a/owa/modules/base/js/includes/jquery/jquery-1.4.2.min.js +++ /dev/null @@ -1,155 +1,1 @@ -/*! - * jQuery JavaScript Library v1.4.2 - * http://jquery.com/ - * - * Copyright 2010, John Resig - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * Includes Sizzle.js - * http://sizzlejs.com/ - * Copyright 2010, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * - * Date: Sat Feb 13 22:33:48 2010 -0500 - */ -(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/, -Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&& -(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this, -a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b=== -"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this, -function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b
                    a"; -var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected, -parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent= -false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n= -s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true, -applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando]; -else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this, -a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b=== -w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i, -cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected= -c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed"); -a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g, -function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split("."); -k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a), -C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B=0){a.type= -e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&& -f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive; -if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data", -e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a, -"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a, -d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, -e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift(); -t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D|| -g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()}, -CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m, -g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)}, -text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}}, -setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return hl[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h= -h[3];l=0;for(m=h.length;l=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m=== -"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g, -h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&& -q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML=""; -if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="

                    ";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}(); -(function(){var g=s.createElement("div");g.innerHTML="
                    ";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}: -function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f0)for(var j=d;j0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j= -{},i;if(f&&a.length){e=0;for(var o=a.length;e-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a=== -"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode", -d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")? -a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType=== -1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/"},F={option:[1,""],legend:[1,"
                    ","
                    "],thead:[1,"","
                    "],tr:[2,"","
                    "],td:[3,"","
                    "],col:[2,"","
                    "],area:[1,"",""],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div
                    ","
                    "];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d= -c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this}, -wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})}, -prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b, -this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild); -return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja, -""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]); -return this}else{e=0;for(var j=d.length;e0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["", -""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]===""&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e= -c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]? -c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja= -function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter= -Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a, -"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f= -a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b= -a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=//gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!== -"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("
                    ").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this}, -serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), -function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href, -global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&& -e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)? -"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache=== -false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B= -false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since", -c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E|| -d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x); -g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status=== -1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b=== -"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional; -if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration=== -"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]|| -c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start; -this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now= -this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem, -e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b
                    "; -a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b); -c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a, -d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top- -f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset": -"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in -e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window); --- a/owa/modules/base/js/includes/jquery/jquery-ui-1.8.1.custom.min.js +++ /dev/null @@ -1,756 +1,1 @@ -/*! - * jQuery UI 1.8.1 - * - * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI - */ -jQuery.ui||function(c){c.ui={version:"1.8.1",plugin:{add:function(a,b,d){a=c.ui[a].prototype;for(var e in d){a.plugins[e]=a.plugins[e]||[];a.plugins[e].push([b,d[e]])}},call:function(a,b,d){if((b=a.plugins[b])&&a.element[0].parentNode)for(var e=0;e0)return true;a[b]=1;d=a[b]>0;a[b]=0;return d},isOverAxis:function(a,b,d){return a>b&&a=0)&&c(a).is(":focusable")}})}(jQuery); -;/*! - * jQuery UI Widget 1.8.1 - * - * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Widget - */ -(function(b){var j=b.fn.remove;b.fn.remove=function(a,c){return this.each(function(){if(!c)if(!a||b.filter(a,[this]).length)b("*",this).add(this).each(function(){b(this).triggerHandler("remove")});return j.call(b(this),a,c)})};b.widget=function(a,c,d){var e=a.split(".")[0],f;a=a.split(".")[1];f=e+"-"+a;if(!d){d=c;c=b.Widget}b.expr[":"][f]=function(h){return!!b.data(h,a)};b[e]=b[e]||{};b[e][a]=function(h,g){arguments.length&&this._createWidget(h,g)};c=new c;c.options=b.extend({},c.options);b[e][a].prototype= -b.extend(true,c,{namespace:e,widgetName:a,widgetEventPrefix:b[e][a].prototype.widgetEventPrefix||a,widgetBaseClass:f},d);b.widget.bridge(a,b[e][a])};b.widget.bridge=function(a,c){b.fn[a]=function(d){var e=typeof d==="string",f=Array.prototype.slice.call(arguments,1),h=this;d=!e&&f.length?b.extend.apply(null,[true,d].concat(f)):d;if(e&&d.substring(0,1)==="_")return h;e?this.each(function(){var g=b.data(this,a),i=g&&b.isFunction(g[d])?g[d].apply(g,f):g;if(i!==g&&i!==undefined){h=i;return false}}):this.each(function(){var g= -b.data(this,a);if(g){d&&g.option(d);g._init()}else b.data(this,a,new c(d,this))});return h}};b.Widget=function(a,c){arguments.length&&this._createWidget(a,c)};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(a,c){this.element=b(c).data(this.widgetName,this);this.options=b.extend(true,{},this.options,b.metadata&&b.metadata.get(c)[this.widgetName],a);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()});this._create(); -this._init()},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(a,c){var d=a,e=this;if(arguments.length===0)return b.extend({},e.options);if(typeof a==="string"){if(c===undefined)return this.options[a];d={};d[a]=c}b.each(d,function(f, -h){e._setOption(f,h)});return e},_setOption:function(a,c){this.options[a]=c;if(a==="disabled")this.widget()[c?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",c);return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(a,c,d){var e=this.options[a];c=b.Event(c);c.type=(a===this.widgetEventPrefix?a:this.widgetEventPrefix+a).toLowerCase();d=d||{};if(c.originalEvent){a= -b.event.props.length;for(var f;a;){f=b.event.props[--a];c[f]=c.originalEvent[f]}}this.element.trigger(c,d);return!(b.isFunction(e)&&e.call(this.element[0],c,d)===false||c.isDefaultPrevented())}}})(jQuery); -;/*! - * jQuery UI Mouse 1.8.1 - * - * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Mouse - * - * Depends: - * jquery.ui.widget.js - */ -(function(c){c.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var a=this;this.element.bind("mousedown."+this.widgetName,function(b){return a._mouseDown(b)}).bind("click."+this.widgetName,function(b){if(a._preventClickEvent){a._preventClickEvent=false;b.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(a){a.originalEvent=a.originalEvent||{};if(!a.originalEvent.mouseHandled){this._mouseStarted&& -this._mouseUp(a);this._mouseDownEvent=a;var b=this,e=a.which==1,f=typeof this.options.cancel=="string"?c(a.target).parents().add(a.target).filter(this.options.cancel).length:false;if(!e||f||!this._mouseCapture(a))return true;this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet)this._mouseDelayTimer=setTimeout(function(){b.mouseDelayMet=true},this.options.delay);if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a)){this._mouseStarted=this._mouseStart(a)!==false;if(!this._mouseStarted){a.preventDefault(); -return true}}this._mouseMoveDelegate=function(d){return b._mouseMove(d)};this._mouseUpDelegate=function(d){return b._mouseUp(d)};c(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);c.browser.safari||a.preventDefault();return a.originalEvent.mouseHandled=true}},_mouseMove:function(a){if(c.browser.msie&&!a.button)return this._mouseUp(a);if(this._mouseStarted){this._mouseDrag(a);return a.preventDefault()}if(this._mouseDistanceMet(a)&& -this._mouseDelayMet(a))(this._mouseStarted=this._mouseStart(this._mouseDownEvent,a)!==false)?this._mouseDrag(a):this._mouseUp(a);return!this._mouseStarted},_mouseUp:function(a){c(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;this._preventClickEvent=a.target==this._mouseDownEvent.target;this._mouseStop(a)}return false},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX- -a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return true}})})(jQuery); -;/* - * jQuery UI Position 1.8.1 - * - * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Position - */ -(function(c){c.ui=c.ui||{};var m=/left|center|right/,n=/top|center|bottom/,p=c.fn.position,q=c.fn.offset;c.fn.position=function(a){if(!a||!a.of)return p.apply(this,arguments);a=c.extend({},a);var b=c(a.of),d=(a.collision||"flip").split(" "),e=a.offset?a.offset.split(" "):[0,0],g,h,i;if(a.of.nodeType===9){g=b.width();h=b.height();i={top:0,left:0}}else if(a.of.scrollTo&&a.of.document){g=b.width();h=b.height();i={top:b.scrollTop(),left:b.scrollLeft()}}else if(a.of.preventDefault){a.at="left top";g=h= -0;i={top:a.of.pageY,left:a.of.pageX}}else{g=b.outerWidth();h=b.outerHeight();i=b.offset()}c.each(["my","at"],function(){var f=(a[this]||"").split(" ");if(f.length===1)f=m.test(f[0])?f.concat(["center"]):n.test(f[0])?["center"].concat(f):["center","center"];f[0]=m.test(f[0])?f[0]:"center";f[1]=n.test(f[1])?f[1]:"center";a[this]=f});if(d.length===1)d[1]=d[0];e[0]=parseInt(e[0],10)||0;if(e.length===1)e[1]=e[0];e[1]=parseInt(e[1],10)||0;if(a.at[0]==="right")i.left+=g;else if(a.at[0]==="center")i.left+= -g/2;if(a.at[1]==="bottom")i.top+=h;else if(a.at[1]==="center")i.top+=h/2;i.left+=e[0];i.top+=e[1];return this.each(function(){var f=c(this),k=f.outerWidth(),l=f.outerHeight(),j=c.extend({},i);if(a.my[0]==="right")j.left-=k;else if(a.my[0]==="center")j.left-=k/2;if(a.my[1]==="bottom")j.top-=l;else if(a.my[1]==="center")j.top-=l/2;j.left=parseInt(j.left);j.top=parseInt(j.top);c.each(["left","top"],function(o,r){c.ui.position[d[o]]&&c.ui.position[d[o]][r](j,{targetWidth:g,targetHeight:h,elemWidth:k, -elemHeight:l,offset:e,my:a.my,at:a.at})});c.fn.bgiframe&&f.bgiframe();f.offset(c.extend(j,{using:a.using}))})};c.ui.position={fit:{left:function(a,b){var d=c(window);b=a.left+b.elemWidth-d.width()-d.scrollLeft();a.left=b>0?a.left-b:Math.max(0,a.left)},top:function(a,b){var d=c(window);b=a.top+b.elemHeight-d.height()-d.scrollTop();a.top=b>0?a.top-b:Math.max(0,a.top)}},flip:{left:function(a,b){if(b.at[0]!=="center"){var d=c(window);d=a.left+b.elemWidth-d.width()-d.scrollLeft();var e=b.my[0]==="left"? --b.elemWidth:b.my[0]==="right"?b.elemWidth:0,g=-2*b.offset[0];a.left+=a.left<0?e+b.targetWidth+g:d>0?e-b.targetWidth+g:0}},top:function(a,b){if(b.at[1]!=="center"){var d=c(window);d=a.top+b.elemHeight-d.height()-d.scrollTop();var e=b.my[1]==="top"?-b.elemHeight:b.my[1]==="bottom"?b.elemHeight:0,g=b.at[1]==="top"?b.targetHeight:-b.targetHeight,h=-2*b.offset[1];a.top+=a.top<0?e+b.targetHeight+h:d>0?e+g+h:0}}}};if(!c.offset.setOffset){c.offset.setOffset=function(a,b){if(/static/.test(c.curCSS(a,"position")))a.style.position= -"relative";var d=c(a),e=d.offset(),g=parseInt(c.curCSS(a,"top",true),10)||0,h=parseInt(c.curCSS(a,"left",true),10)||0;e={top:b.top-e.top+g,left:b.left-e.left+h};"using"in b?b.using.call(a,e):d.css(e)};c.fn.offset=function(a){var b=this[0];if(!b||!b.ownerDocument)return null;if(a)return this.each(function(){c.offset.setOffset(this,a)});return q.call(this)}}})(jQuery); -;/* - * jQuery UI Draggable 1.8.1 - * - * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Draggables - * - * Depends: - * jquery.ui.core.js - * jquery.ui.mouse.js - * jquery.ui.widget.js - */ -(function(d){d.widget("ui.draggable",d.ui.mouse,{widgetEventPrefix:"drag",options:{addClasses:true,appendTo:"parent",axis:false,connectToSortable:false,containment:false,cursor:"auto",cursorAt:false,grid:false,handle:false,helper:"original",iframeFix:false,opacity:false,refreshPositions:false,revert:false,revertDuration:500,scope:"default",scroll:true,scrollSensitivity:20,scrollSpeed:20,snap:false,snapMode:"both",snapTolerance:20,stack:false,zIndex:false},_create:function(){if(this.options.helper== -"original"&&!/^(?:r|a|f)/.test(this.element.css("position")))this.element[0].style.position="relative";this.options.addClasses&&this.element.addClass("ui-draggable");this.options.disabled&&this.element.addClass("ui-draggable-disabled");this._mouseInit()},destroy:function(){if(this.element.data("draggable")){this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");this._mouseDestroy();return this}},_mouseCapture:function(a){var b= -this.options;if(this.helper||b.disabled||d(a.target).is(".ui-resizable-handle"))return false;this.handle=this._getHandle(a);if(!this.handle)return false;return true},_mouseStart:function(a){var b=this.options;this.helper=this._createHelper(a);this._cacheHelperProportions();if(d.ui.ddmanager)d.ui.ddmanager.current=this;this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.positionAbs=this.element.offset();this.offset={top:this.offset.top- -this.margins.top,left:this.offset.left-this.margins.left};d.extend(this.offset,{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this.position=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;b.cursorAt&&this._adjustOffsetFromHelper(b.cursorAt);b.containment&&this._setContainment();if(this._trigger("start",a)===false){this._clear();return false}this._cacheHelperProportions(); -d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a);this.helper.addClass("ui-draggable-dragging");this._mouseDrag(a,true);return true},_mouseDrag:function(a,b){this.position=this._generatePosition(a);this.positionAbs=this._convertPositionTo("absolute");if(!b){b=this._uiHash();if(this._trigger("drag",a,b)===false){this._mouseUp({});return false}this.position=b.position}if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis|| -this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";d.ui.ddmanager&&d.ui.ddmanager.drag(this,a);return false},_mouseStop:function(a){var b=false;if(d.ui.ddmanager&&!this.options.dropBehaviour)b=d.ui.ddmanager.drop(this,a);if(this.dropped){b=this.dropped;this.dropped=false}if(!this.element[0]||!this.element[0].parentNode)return false;if(this.options.revert=="invalid"&&!b||this.options.revert=="valid"&&b||this.options.revert===true||d.isFunction(this.options.revert)&&this.options.revert.call(this.element, -b)){var c=this;d(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){c._trigger("stop",a)!==false&&c._clear()})}else this._trigger("stop",a)!==false&&this._clear();return false},cancel:function(){this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear();return this},_getHandle:function(a){var b=!this.options.handle||!d(this.options.handle,this.element).length?true:false;d(this.options.handle,this.element).find("*").andSelf().each(function(){if(this== -a.target)b=true});return b},_createHelper:function(a){var b=this.options;a=d.isFunction(b.helper)?d(b.helper.apply(this.element[0],[a])):b.helper=="clone"?this.element.clone():this.element;a.parents("body").length||a.appendTo(b.appendTo=="parent"?this.element[0].parentNode:b.appendTo);a[0]!=this.element[0]&&!/(fixed|absolute)/.test(a.css("position"))&&a.css("position","absolute");return a},_adjustOffsetFromHelper:function(a){if(typeof a=="string")a=a.split(" ");if(d.isArray(a))a={left:+a[0],top:+a[1]|| -0};if("left"in a)this.offset.click.left=a.left+this.margins.left;if("right"in a)this.offset.click.left=this.helperProportions.width-a.right+this.margins.left;if("top"in a)this.offset.click.top=a.top+this.margins.top;if("bottom"in a)this.offset.click.top=this.helperProportions.height-a.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var a=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0], -this.offsetParent[0])){a.left+=this.scrollParent.scrollLeft();a.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&d.browser.msie)a={top:0,left:0};return{top:a.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:a.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a=this.element.position();return{top:a.top- -(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var a=this.options;if(a.containment== -"parent")a.containment=this.helper[0].parentNode;if(a.containment=="document"||a.containment=="window")this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,d(a.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(d(a.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(a.containment)&& -a.containment.constructor!=Array){var b=d(a.containment)[0];if(b){a=d(a.containment).offset();var c=d(b).css("overflow")!="hidden";this.containment=[a.left+(parseInt(d(b).css("borderLeftWidth"),10)||0)+(parseInt(d(b).css("paddingLeft"),10)||0)-this.margins.left,a.top+(parseInt(d(b).css("borderTopWidth"),10)||0)+(parseInt(d(b).css("paddingTop"),10)||0)-this.margins.top,a.left+(c?Math.max(b.scrollWidth,b.offsetWidth):b.offsetWidth)-(parseInt(d(b).css("borderLeftWidth"),10)||0)-(parseInt(d(b).css("paddingRight"), -10)||0)-this.helperProportions.width-this.margins.left,a.top+(c?Math.max(b.scrollHeight,b.offsetHeight):b.offsetHeight)-(parseInt(d(b).css("borderTopWidth"),10)||0)-(parseInt(d(b).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}}else if(a.containment.constructor==Array)this.containment=a.containment},_convertPositionTo:function(a,b){if(!b)b=this.position;a=a=="absolute"?1:-1;var c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0], -this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName);return{top:b.top+this.offset.relative.top*a+this.offset.parent.top*a-(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():f?0:c.scrollTop())*a),left:b.left+this.offset.relative.left*a+this.offset.parent.left*a-(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft(): -f?0:c.scrollLeft())*a)}},_generatePosition:function(a){var b=this.options,c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName),e=a.pageX,g=a.pageY;if(this.originalPosition){if(this.containment){if(a.pageX-this.offset.click.leftthis.containment[2])e=this.containment[2]+this.offset.click.left;if(a.pageY-this.offset.click.top>this.containment[3])g=this.containment[3]+this.offset.click.top}if(b.grid){g=this.originalPageY+Math.round((g-this.originalPageY)/b.grid[1])*b.grid[1];g=this.containment?!(g-this.offset.click.topthis.containment[3])?g:!(g-this.offset.click.topthis.containment[2])?e:!(e-this.offset.click.left
                    ').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1E3}).css(d(this).offset()).appendTo("body")})},stop:function(){d("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)})}});d.ui.plugin.add("draggable","opacity",{start:function(a,b){a=d(b.helper);b=d(this).data("draggable").options; -if(a.css("opacity"))b._opacity=a.css("opacity");a.css("opacity",b.opacity)},stop:function(a,b){a=d(this).data("draggable").options;a._opacity&&d(b.helper).css("opacity",a._opacity)}});d.ui.plugin.add("draggable","scroll",{start:function(){var a=d(this).data("draggable");if(a.scrollParent[0]!=document&&a.scrollParent[0].tagName!="HTML")a.overflowOffset=a.scrollParent.offset()},drag:function(a){var b=d(this).data("draggable"),c=b.options,f=false;if(b.scrollParent[0]!=document&&b.scrollParent[0].tagName!= -"HTML"){if(!c.axis||c.axis!="x")if(b.overflowOffset.top+b.scrollParent[0].offsetHeight-a.pageY=0;h--){var i=c.snapElements[h].left,k=i+c.snapElements[h].width,j=c.snapElements[h].top,l=j+c.snapElements[h].height;if(i-e=j&&f<=l||h>=j&&h<=l||fl)&&(e>=i&& -e<=k||g>=i&&g<=k||ek);default:return false}};d.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(a,b){var c=d.ui.ddmanager.droppables[a.options.scope]||[],e=b?b.type:null,g=(a.currentItem||a.element).find(":data(droppable)").andSelf(),f=0;a:for(;f
                    ').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(), -top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle= -this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=a.handles||(!d(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne", -nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all")this.handles="n,e,s,w,se,sw,ne,nw";var c=this.handles.split(",");this.handles={};for(var e=0;e
                    ');/sw|se|ne|nw/.test(g)&&f.css({zIndex:++a.zIndex});"se"==g&&f.addClass("ui-icon ui-icon-gripsmall-diagonal-se");this.handles[g]=".ui-resizable-"+g;this.element.append(f)}}this._renderAxis=function(h){h=h||this.element;for(var i in this.handles){if(this.handles[i].constructor== -String)this.handles[i]=d(this.handles[i],this.element).show();if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var j=d(this.handles[i],this.element),l=0;l=/sw|ne|nw|se|n|s/.test(i)?j.outerHeight():j.outerWidth();j=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join("");h.css(j,l);this._proportionallyResize()}d(this.handles[i])}};this._renderAxis(this.element);this._handles=d(".ui-resizable-handle",this.element).disableSelection(); -this._handles.mouseover(function(){if(!b.resizing){if(this.className)var h=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);b.axis=h&&h[1]?h[1]:"se"}});if(a.autoHide){this._handles.hide();d(this.element).addClass("ui-resizable-autohide").hover(function(){d(this).removeClass("ui-resizable-autohide");b._handles.show()},function(){if(!b.resizing){d(this).addClass("ui-resizable-autohide");b._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var b=function(c){d(c).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()}; -if(this.elementIsWrapper){b(this.element);var a=this.element;a.after(this.originalElement.css({position:a.css("position"),width:a.outerWidth(),height:a.outerHeight(),top:a.css("top"),left:a.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);b(this.originalElement);return this},_mouseCapture:function(b){var a=false;for(var c in this.handles)if(d(this.handles[c])[0]==b.target)a=true;return!this.options.disabled&&a},_mouseStart:function(b){var a=this.options,c=this.element.position(), -e=this.element;this.resizing=true;this.documentScroll={top:d(document).scrollTop(),left:d(document).scrollLeft()};if(e.is(".ui-draggable")||/absolute/.test(e.css("position")))e.css({position:"absolute",top:c.top,left:c.left});d.browser.opera&&/relative/.test(e.css("position"))&&e.css({position:"relative",top:"auto",left:"auto"});this._renderProxy();c=m(this.helper.css("left"));var g=m(this.helper.css("top"));if(a.containment){c+=d(a.containment).scrollLeft()||0;g+=d(a.containment).scrollTop()||0}this.offset= -this.helper.offset();this.position={left:c,top:g};this.size=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalSize=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalPosition={left:c,top:g};this.sizeDiff={width:e.outerWidth()-e.width(),height:e.outerHeight()-e.height()};this.originalMousePosition={left:b.pageX,top:b.pageY};this.aspectRatio=typeof a.aspectRatio=="number"?a.aspectRatio: -this.originalSize.width/this.originalSize.height||1;a=d(".ui-resizable-"+this.axis).css("cursor");d("body").css("cursor",a=="auto"?this.axis+"-resize":a);e.addClass("ui-resizable-resizing");this._propagate("start",b);return true},_mouseDrag:function(b){var a=this.helper,c=this.originalMousePosition,e=this._change[this.axis];if(!e)return false;c=e.apply(this,[b,b.pageX-c.left||0,b.pageY-c.top||0]);if(this._aspectRatio||b.shiftKey)c=this._updateRatio(c,b);c=this._respectSize(c,b);this._propagate("resize", -b);a.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize();this._updateCache(c);this._trigger("resize",b,this.ui());return false},_mouseStop:function(b){this.resizing=false;var a=this.options,c=this;if(this._helper){var e=this._proportionallyResizeElements,g=e.length&&/textarea/i.test(e[0].nodeName);e=g&&d.ui.hasScroll(e[0],"left")?0:c.sizeDiff.height; -g={width:c.size.width-(g?0:c.sizeDiff.width),height:c.size.height-e};e=parseInt(c.element.css("left"),10)+(c.position.left-c.originalPosition.left)||null;var f=parseInt(c.element.css("top"),10)+(c.position.top-c.originalPosition.top)||null;a.animate||this.element.css(d.extend(g,{top:f,left:e}));c.helper.height(c.size.height);c.helper.width(c.size.width);this._helper&&!a.animate&&this._proportionallyResize()}d("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop", -b);this._helper&&this.helper.remove();return false},_updateCache:function(b){this.offset=this.helper.offset();if(k(b.left))this.position.left=b.left;if(k(b.top))this.position.top=b.top;if(k(b.height))this.size.height=b.height;if(k(b.width))this.size.width=b.width},_updateRatio:function(b){var a=this.position,c=this.size,e=this.axis;if(b.height)b.width=c.height*this.aspectRatio;else if(b.width)b.height=c.width/this.aspectRatio;if(e=="sw"){b.left=a.left+(c.width-b.width);b.top=null}if(e=="nw"){b.top= -a.top+(c.height-b.height);b.left=a.left+(c.width-b.width)}return b},_respectSize:function(b){var a=this.options,c=this.axis,e=k(b.width)&&a.maxWidth&&a.maxWidthb.width,h=k(b.height)&&a.minHeight&&a.minHeight>b.height;if(f)b.width=a.minWidth;if(h)b.height=a.minHeight;if(e)b.width=a.maxWidth;if(g)b.height=a.maxHeight;var i=this.originalPosition.left+this.originalSize.width,j=this.position.top+this.size.height, -l=/sw|nw|w/.test(c);c=/nw|ne|n/.test(c);if(f&&l)b.left=i-a.minWidth;if(e&&l)b.left=i-a.maxWidth;if(h&&c)b.top=j-a.minHeight;if(g&&c)b.top=j-a.maxHeight;if((a=!b.width&&!b.height)&&!b.left&&b.top)b.top=null;else if(a&&!b.top&&b.left)b.left=null;return b},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var b=this.helper||this.element,a=0;a
                    ');var a=d.browser.msie&&d.browser.version<7,c=a?1:0;a=a?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+a,height:this.element.outerHeight()+a,position:"absolute",left:this.elementOffset.left-c+"px",top:this.elementOffset.top-c+"px",zIndex:++b.zIndex});this.helper.appendTo("body").disableSelection()}else this.helper=this.element},_change:{e:function(b,a){return{width:this.originalSize.width+ -a}},w:function(b,a){return{left:this.originalPosition.left+a,width:this.originalSize.width-a}},n:function(b,a,c){return{top:this.originalPosition.top+c,height:this.originalSize.height-c}},s:function(b,a,c){return{height:this.originalSize.height+c}},se:function(b,a,c){return d.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[b,a,c]))},sw:function(b,a,c){return d.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[b,a,c]))},ne:function(b,a,c){return d.extend(this._change.n.apply(this, -arguments),this._change.e.apply(this,[b,a,c]))},nw:function(b,a,c){return d.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[b,a,c]))}},_propagate:function(b,a){d.ui.plugin.call(this,b,[a,this.ui()]);b!="resize"&&this._trigger(b,a,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});d.extend(d.ui.resizable, -{version:"1.8.1"});d.ui.plugin.add("resizable","alsoResize",{start:function(){var b=d(this).data("resizable").options,a=function(c){d(c).each(function(){d(this).data("resizable-alsoresize",{width:parseInt(d(this).width(),10),height:parseInt(d(this).height(),10),left:parseInt(d(this).css("left"),10),top:parseInt(d(this).css("top"),10)})})};if(typeof b.alsoResize=="object"&&!b.alsoResize.parentNode)if(b.alsoResize.length){b.alsoResize=b.alsoResize[0];a(b.alsoResize)}else d.each(b.alsoResize,function(c){a(c)}); -else a(b.alsoResize)},resize:function(){var b=d(this).data("resizable"),a=b.options,c=b.originalSize,e=b.originalPosition,g={height:b.size.height-c.height||0,width:b.size.width-c.width||0,top:b.position.top-e.top||0,left:b.position.left-e.left||0},f=function(h,i){d(h).each(function(){var j=d(this),l=d(this).data("resizable-alsoresize"),p={};d.each((i&&i.length?i:["width","height","top","left"])||["width","height","top","left"],function(n,o){if((n=(l[o]||0)+(g[o]||0))&&n>=0)p[o]=n||null});if(/relative/.test(j.css("position"))&& -d.browser.opera){b._revertToRelativePosition=true;j.css({position:"absolute",top:"auto",left:"auto"})}j.css(p)})};typeof a.alsoResize=="object"&&!a.alsoResize.nodeType?d.each(a.alsoResize,function(h,i){f(h,i)}):f(a.alsoResize)},stop:function(){var b=d(this).data("resizable");if(b._revertToRelativePosition&&d.browser.opera){b._revertToRelativePosition=false;el.css({position:"relative"})}d(this).removeData("resizable-alsoresize-start")}});d.ui.plugin.add("resizable","animate",{stop:function(b){var a= -d(this).data("resizable"),c=a.options,e=a._proportionallyResizeElements,g=e.length&&/textarea/i.test(e[0].nodeName),f=g&&d.ui.hasScroll(e[0],"left")?0:a.sizeDiff.height;g={width:a.size.width-(g?0:a.sizeDiff.width),height:a.size.height-f};f=parseInt(a.element.css("left"),10)+(a.position.left-a.originalPosition.left)||null;var h=parseInt(a.element.css("top"),10)+(a.position.top-a.originalPosition.top)||null;a.element.animate(d.extend(g,h&&f?{top:h,left:f}:{}),{duration:c.animateDuration,easing:c.animateEasing, -step:function(){var i={width:parseInt(a.element.css("width"),10),height:parseInt(a.element.css("height"),10),top:parseInt(a.element.css("top"),10),left:parseInt(a.element.css("left"),10)};e&&e.length&&d(e[0]).css({width:i.width,height:i.height});a._updateCache(i);a._propagate("resize",b)}})}});d.ui.plugin.add("resizable","containment",{start:function(){var b=d(this).data("resizable"),a=b.element,c=b.options.containment;if(a=c instanceof d?c.get(0):/parent/.test(c)?a.parent().get(0):c){b.containerElement= -d(a);if(/document/.test(c)||c==document){b.containerOffset={left:0,top:0};b.containerPosition={left:0,top:0};b.parentData={element:d(document),left:0,top:0,width:d(document).width(),height:d(document).height()||document.body.parentNode.scrollHeight}}else{var e=d(a),g=[];d(["Top","Right","Left","Bottom"]).each(function(i,j){g[i]=m(e.css("padding"+j))});b.containerOffset=e.offset();b.containerPosition=e.position();b.containerSize={height:e.innerHeight()-g[3],width:e.innerWidth()-g[1]};c=b.containerOffset; -var f=b.containerSize.height,h=b.containerSize.width;h=d.ui.hasScroll(a,"left")?a.scrollWidth:h;f=d.ui.hasScroll(a)?a.scrollHeight:f;b.parentData={element:a,left:c.left,top:c.top,width:h,height:f}}}},resize:function(b){var a=d(this).data("resizable"),c=a.options,e=a.containerOffset,g=a.position;b=a._aspectRatio||b.shiftKey;var f={top:0,left:0},h=a.containerElement;if(h[0]!=document&&/static/.test(h.css("position")))f=e;if(g.left<(a._helper?e.left:0)){a.size.width+=a._helper?a.position.left-e.left: -a.position.left-f.left;if(b)a.size.height=a.size.width/c.aspectRatio;a.position.left=c.helper?e.left:0}if(g.top<(a._helper?e.top:0)){a.size.height+=a._helper?a.position.top-e.top:a.position.top;if(b)a.size.width=a.size.height*c.aspectRatio;a.position.top=a._helper?e.top:0}a.offset.left=a.parentData.left+a.position.left;a.offset.top=a.parentData.top+a.position.top;c=Math.abs((a._helper?a.offset.left-f.left:a.offset.left-f.left)+a.sizeDiff.width);e=Math.abs((a._helper?a.offset.top-f.top:a.offset.top- -e.top)+a.sizeDiff.height);g=a.containerElement.get(0)==a.element.parent().get(0);f=/relative|absolute/.test(a.containerElement.css("position"));if(g&&f)c-=a.parentData.left;if(c+a.size.width>=a.parentData.width){a.size.width=a.parentData.width-c;if(b)a.size.height=a.size.width/a.aspectRatio}if(e+a.size.height>=a.parentData.height){a.size.height=a.parentData.height-e;if(b)a.size.width=a.size.height*a.aspectRatio}},stop:function(){var b=d(this).data("resizable"),a=b.options,c=b.containerOffset,e=b.containerPosition, -g=b.containerElement,f=d(b.helper),h=f.offset(),i=f.outerWidth()-b.sizeDiff.width;f=f.outerHeight()-b.sizeDiff.height;b._helper&&!a.animate&&/relative/.test(g.css("position"))&&d(this).css({left:h.left-e.left-c.left,width:i,height:f});b._helper&&!a.animate&&/static/.test(g.css("position"))&&d(this).css({left:h.left-e.left-c.left,width:i,height:f})}});d.ui.plugin.add("resizable","ghost",{start:function(){var b=d(this).data("resizable"),a=b.options,c=b.size;b.ghost=b.originalElement.clone();b.ghost.css({opacity:0.25, -display:"block",position:"relative",height:c.height,width:c.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof a.ghost=="string"?a.ghost:"");b.ghost.appendTo(b.helper)},resize:function(){var b=d(this).data("resizable");b.ghost&&b.ghost.css({position:"relative",height:b.size.height,width:b.size.width})},stop:function(){var b=d(this).data("resizable");b.ghost&&b.helper&&b.helper.get(0).removeChild(b.ghost.get(0))}});d.ui.plugin.add("resizable","grid",{resize:function(){var b= -d(this).data("resizable"),a=b.options,c=b.size,e=b.originalSize,g=b.originalPosition,f=b.axis;a.grid=typeof a.grid=="number"?[a.grid,a.grid]:a.grid;var h=Math.round((c.width-e.width)/(a.grid[0]||1))*(a.grid[0]||1);a=Math.round((c.height-e.height)/(a.grid[1]||1))*(a.grid[1]||1);if(/^(se|s|e)$/.test(f)){b.size.width=e.width+h;b.size.height=e.height+a}else if(/^(ne)$/.test(f)){b.size.width=e.width+h;b.size.height=e.height+a;b.position.top=g.top-a}else{if(/^(sw)$/.test(f)){b.size.width=e.width+h;b.size.height= -e.height+a}else{b.size.width=e.width+h;b.size.height=e.height+a;b.position.top=g.top-a}b.position.left=g.left-h}}});var m=function(b){return parseInt(b,10)||0},k=function(b){return!isNaN(parseInt(b,10))}})(jQuery); -;/* - * jQuery UI Selectable 1.8.1 - * - * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Selectables - * - * Depends: - * jquery.ui.core.js - * jquery.ui.mouse.js - * jquery.ui.widget.js - */ -(function(e){e.widget("ui.selectable",e.ui.mouse,{options:{appendTo:"body",autoRefresh:true,distance:0,filter:"*",tolerance:"touch"},_create:function(){var d=this;this.element.addClass("ui-selectable");this.dragged=false;var f;this.refresh=function(){f=e(d.options.filter,d.element[0]);f.each(function(){var c=e(this),b=c.offset();e.data(this,"selectable-item",{element:this,$element:c,left:b.left,top:b.top,right:b.left+c.outerWidth(),bottom:b.top+c.outerHeight(),startselected:false,selected:c.hasClass("ui-selected"), -selecting:c.hasClass("ui-selecting"),unselecting:c.hasClass("ui-unselecting")})})};this.refresh();this.selectees=f.addClass("ui-selectee");this._mouseInit();this.helper=e(document.createElement("div")).css({border:"1px dotted black"}).addClass("ui-selectable-helper")},destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item");this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable");this._mouseDestroy();return this}, -_mouseStart:function(d){var f=this;this.opos=[d.pageX,d.pageY];if(!this.options.disabled){var c=this.options;this.selectees=e(c.filter,this.element[0]);this._trigger("start",d);e(c.appendTo).append(this.helper);this.helper.css({"z-index":100,position:"absolute",left:d.clientX,top:d.clientY,width:0,height:0});c.autoRefresh&&this.refresh();this.selectees.filter(".ui-selected").each(function(){var b=e.data(this,"selectable-item");b.startselected=true;if(!d.metaKey){b.$element.removeClass("ui-selected"); -b.selected=false;b.$element.addClass("ui-unselecting");b.unselecting=true;f._trigger("unselecting",d,{unselecting:b.element})}});e(d.target).parents().andSelf().each(function(){var b=e.data(this,"selectable-item");if(b){b.$element.removeClass("ui-unselecting").addClass("ui-selecting");b.unselecting=false;b.selecting=true;b.selected=true;f._trigger("selecting",d,{selecting:b.element});return false}})}},_mouseDrag:function(d){var f=this;this.dragged=true;if(!this.options.disabled){var c=this.options, -b=this.opos[0],g=this.opos[1],h=d.pageX,i=d.pageY;if(b>h){var j=h;h=b;b=j}if(g>i){j=i;i=g;g=j}this.helper.css({left:b,top:g,width:h-b,height:i-g});this.selectees.each(function(){var a=e.data(this,"selectable-item");if(!(!a||a.element==f.element[0])){var k=false;if(c.tolerance=="touch")k=!(a.left>h||a.righti||a.bottomb&&a.rightg&&a.bottom *",opacity:false,placeholder:false,revert:false,scroll:true,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1E3},_create:function(){this.containerCache={};this.element.addClass("ui-sortable"); -this.refresh();this.floating=this.items.length?/left|right/.test(this.items[0].item.css("float")):false;this.offset=this.element.offset();this._mouseInit()},destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").removeData("sortable").unbind(".sortable");this._mouseDestroy();for(var a=this.items.length-1;a>=0;a--)this.items[a].item.removeData("sortable-item");return this},_setOption:function(a,b){if(a==="disabled"){this.options[a]=b;this.widget()[b?"addClass":"removeClass"]("ui-sortable-disabled")}else d.Widget.prototype._setOption.apply(self, -arguments)},_mouseCapture:function(a,b){if(this.reverting)return false;if(this.options.disabled||this.options.type=="static")return false;this._refreshItems(a);var c=null,e=this;d(a.target).parents().each(function(){if(d.data(this,"sortable-item")==e){c=d(this);return false}});if(d.data(a.target,"sortable-item")==e)c=d(a.target);if(!c)return false;if(this.options.handle&&!b){var f=false;d(this.options.handle,c).find("*").andSelf().each(function(){if(this==a.target)f=true});if(!f)return false}this.currentItem= -c;this._removeCurrentsFromItems();return true},_mouseStart:function(a,b,c){b=this.options;var e=this;this.currentContainer=this;this.refreshPositions();this.helper=this._createHelper(a);this._cacheHelperProportions();this._cacheMargins();this.scrollParent=this.helper.scrollParent();this.offset=this.currentItem.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};this.helper.css("position","absolute");this.cssPosition=this.helper.css("position");d.extend(this.offset, -{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;b.cursorAt&&this._adjustOffsetFromHelper(b.cursorAt);this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]};this.helper[0]!=this.currentItem[0]&&this.currentItem.hide();this._createPlaceholder();b.containment&&this._setContainment(); -if(b.cursor){if(d("body").css("cursor"))this._storedCursor=d("body").css("cursor");d("body").css("cursor",b.cursor)}if(b.opacity){if(this.helper.css("opacity"))this._storedOpacity=this.helper.css("opacity");this.helper.css("opacity",b.opacity)}if(b.zIndex){if(this.helper.css("zIndex"))this._storedZIndex=this.helper.css("zIndex");this.helper.css("zIndex",b.zIndex)}if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML")this.overflowOffset=this.scrollParent.offset();this._trigger("start", -a,this._uiHash());this._preserveHelperProportions||this._cacheHelperProportions();if(!c)for(c=this.containers.length-1;c>=0;c--)this.containers[c]._trigger("activate",a,e._uiHash(this));if(d.ui.ddmanager)d.ui.ddmanager.current=this;d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a);this.dragging=true;this.helper.addClass("ui-sortable-helper");this._mouseDrag(a);return true},_mouseDrag:function(a){this.position=this._generatePosition(a);this.positionAbs=this._convertPositionTo("absolute"); -if(!this.lastPositionAbs)this.lastPositionAbs=this.positionAbs;if(this.options.scroll){var b=this.options,c=false;if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){if(this.overflowOffset.top+this.scrollParent[0].offsetHeight-a.pageY=0;b--){c=this.items[b];var e=c.item[0],f=this._intersectsWithPointer(c);if(f)if(e!=this.currentItem[0]&&this.placeholder[f==1?"next":"prev"]()[0]!=e&&!d.ui.contains(this.placeholder[0],e)&&(this.options.type=="semi-dynamic"?!d.ui.contains(this.element[0],e):true)){this.direction=f==1?"down":"up";if(this.options.tolerance=="pointer"||this._intersectsWithSides(c))this._rearrange(a, -c);else break;this._trigger("change",a,this._uiHash());break}}this._contactContainers(a);d.ui.ddmanager&&d.ui.ddmanager.drag(this,a);this._trigger("sort",a,this._uiHash());this.lastPositionAbs=this.positionAbs;return false},_mouseStop:function(a,b){if(a){d.ui.ddmanager&&!this.options.dropBehaviour&&d.ui.ddmanager.drop(this,a);if(this.options.revert){var c=this;b=c.placeholder.offset();c.reverting=true;d(this.helper).animate({left:b.left-this.offset.parent.left-c.margins.left+(this.offsetParent[0]== -document.body?0:this.offsetParent[0].scrollLeft),top:b.top-this.offset.parent.top-c.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){c._clear(a)})}else this._clear(a,b);return false}},cancel:function(){var a=this;if(this.dragging){this._mouseUp();this.options.helper=="original"?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):this.currentItem.show();for(var b=this.containers.length-1;b>=0;b--){this.containers[b]._trigger("deactivate", -null,a._uiHash(this));if(this.containers[b].containerCache.over){this.containers[b]._trigger("out",null,a._uiHash(this));this.containers[b].containerCache.over=0}}}this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]);this.options.helper!="original"&&this.helper&&this.helper[0].parentNode&&this.helper.remove();d.extend(this,{helper:null,dragging:false,reverting:false,_noFinalSort:null});this.domPosition.prev?d(this.domPosition.prev).after(this.currentItem): -d(this.domPosition.parent).prepend(this.currentItem);return this},serialize:function(a){var b=this._getItemsAsjQuery(a&&a.connected),c=[];a=a||{};d(b).each(function(){var e=(d(a.item||this).attr(a.attribute||"id")||"").match(a.expression||/(.+)[-=_](.+)/);if(e)c.push((a.key||e[1]+"[]")+"="+(a.key&&a.expression?e[1]:e[2]))});return c.join("&")},toArray:function(a){var b=this._getItemsAsjQuery(a&&a.connected),c=[];a=a||{};b.each(function(){c.push(d(a.item||this).attr(a.attribute||"id")||"")});return c}, -_intersectsWith:function(a){var b=this.positionAbs.left,c=b+this.helperProportions.width,e=this.positionAbs.top,f=e+this.helperProportions.height,g=a.left,h=g+a.width,i=a.top,k=i+a.height,j=this.offset.click.top,l=this.offset.click.left;j=e+j>i&&e+jg&&b+la[this.floating?"width":"height"]?j:g0?"down":"up")},_getDragHorizontalDirection:function(){var a= -this.positionAbs.left-this.lastPositionAbs.left;return a!=0&&(a>0?"right":"left")},refresh:function(a){this._refreshItems(a);this.refreshPositions();return this},_connectWith:function(){var a=this.options;return a.connectWith.constructor==String?[a.connectWith]:a.connectWith},_getItemsAsjQuery:function(a){var b=[],c=[],e=this._connectWith();if(e&&a)for(a=e.length-1;a>=0;a--)for(var f=d(e[a]),g=f.length-1;g>=0;g--){var h=d.data(f[g],"sortable");if(h&&h!=this&&!h.options.disabled)c.push([d.isFunction(h.options.items)? -h.options.items.call(h.element):d(h.options.items,h.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),h])}c.push([d.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):d(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]);for(a=c.length-1;a>=0;a--)c[a][0].each(function(){b.push(this)});return d(b)},_removeCurrentsFromItems:function(){for(var a=this.currentItem.find(":data(sortable-item)"), -b=0;b=0;f--)for(var g=d(e[f]),h=g.length-1;h>=0;h--){var i=d.data(g[h],"sortable");if(i&&i!=this&&!i.options.disabled){c.push([d.isFunction(i.options.items)? -i.options.items.call(i.element[0],a,{item:this.currentItem}):d(i.options.items,i.element),i]);this.containers.push(i)}}for(f=c.length-1;f>=0;f--){a=c[f][1];e=c[f][0];h=0;for(g=e.length;h=0;b--){var c=this.items[b],e=this.options.toleranceElement?d(this.options.toleranceElement, -c.item):c.item;if(!a){c.width=e.outerWidth();c.height=e.outerHeight()}e=e.offset();c.left=e.left;c.top=e.top}if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(b=this.containers.length-1;b>=0;b--){e=this.containers[b].element.offset();this.containers[b].containerCache.left=e.left;this.containers[b].containerCache.top=e.top;this.containers[b].containerCache.width=this.containers[b].element.outerWidth();this.containers[b].containerCache.height= -this.containers[b].element.outerHeight()}return this},_createPlaceholder:function(a){var b=a||this,c=b.options;if(!c.placeholder||c.placeholder.constructor==String){var e=c.placeholder;c.placeholder={element:function(){var f=d(document.createElement(b.currentItem[0].nodeName)).addClass(e||b.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];if(!e)f.style.visibility="hidden";return f},update:function(f,g){if(!(e&&!c.forcePlaceholderSize)){g.height()||g.height(b.currentItem.innerHeight()- -parseInt(b.currentItem.css("paddingTop")||0,10)-parseInt(b.currentItem.css("paddingBottom")||0,10));g.width()||g.width(b.currentItem.innerWidth()-parseInt(b.currentItem.css("paddingLeft")||0,10)-parseInt(b.currentItem.css("paddingRight")||0,10))}}}}b.placeholder=d(c.placeholder.element.call(b.element,b.currentItem));b.currentItem.after(b.placeholder);c.placeholder.update(b,b.placeholder)},_contactContainers:function(a){for(var b=null,c=null,e=this.containers.length-1;e>=0;e--)if(!d.ui.contains(this.currentItem[0], -this.containers[e].element[0]))if(this._intersectsWith(this.containers[e].containerCache)){if(!(b&&d.ui.contains(this.containers[e].element[0],b.element[0]))){b=this.containers[e];c=e}}else if(this.containers[e].containerCache.over){this.containers[e]._trigger("out",a,this._uiHash(this));this.containers[e].containerCache.over=0}if(b)if(this.containers.length===1){this.containers[c]._trigger("over",a,this._uiHash(this));this.containers[c].containerCache.over=1}else if(this.currentContainer!=this.containers[c]){b= -1E4;e=null;for(var f=this.positionAbs[this.containers[c].floating?"left":"top"],g=this.items.length-1;g>=0;g--)if(d.ui.contains(this.containers[c].element[0],this.items[g].item[0])){var h=this.items[g][this.containers[c].floating?"left":"top"];if(Math.abs(h-f)this.containment[2])f=this.containment[2]+this.offset.click.left;if(a.pageY-this.offset.click.top>this.containment[3])g=this.containment[3]+this.offset.click.top}if(b.grid){g=this.originalPageY+Math.round((g-this.originalPageY)/b.grid[1])*b.grid[1];g=this.containment?!(g-this.offset.click.topthis.containment[3])?g:!(g-this.offset.click.topthis.containment[2])?f:!(f-this.offset.click.left=0;e--)if(d.ui.contains(this.containers[e].element[0],this.currentItem[0])&&!b){c.push(function(f){return function(g){f._trigger("receive",g,this._uiHash(this))}}.call(this,this.containers[e]));c.push(function(f){return function(g){f._trigger("update", -g,this._uiHash(this))}}.call(this,this.containers[e]))}}for(e=this.containers.length-1;e>=0;e--){b||c.push(function(f){return function(g){f._trigger("deactivate",g,this._uiHash(this))}}.call(this,this.containers[e]));if(this.containers[e].containerCache.over){c.push(function(f){return function(g){f._trigger("out",g,this._uiHash(this))}}.call(this,this.containers[e]));this.containers[e].containerCache.over=0}}this._storedCursor&&d("body").css("cursor",this._storedCursor);this._storedOpacity&&this.helper.css("opacity", -this._storedOpacity);if(this._storedZIndex)this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex);this.dragging=false;if(this.cancelHelperRemoval){if(!b){this._trigger("beforeStop",a,this._uiHash());for(e=0;e li > :first-child,> :not(li):even",icons:{header:"ui-icon-triangle-1-e",headerSelected:"ui-icon-triangle-1-s"},navigation:false,navigationFilter:function(){return this.href.toLowerCase()==location.href.toLowerCase()}},_create:function(){var a=this.options,b=this;this.running=0;this.element.addClass("ui-accordion ui-widget ui-helper-reset"); -this.element[0].nodeName=="UL"&&this.element.children("li").addClass("ui-accordion-li-fix");this.headers=this.element.find(a.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all").bind("mouseenter.accordion",function(){c(this).addClass("ui-state-hover")}).bind("mouseleave.accordion",function(){c(this).removeClass("ui-state-hover")}).bind("focus.accordion",function(){c(this).addClass("ui-state-focus")}).bind("blur.accordion",function(){c(this).removeClass("ui-state-focus")}); -this.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom");if(a.navigation){var d=this.element.find("a").filter(a.navigationFilter);if(d.length){var f=d.closest(".ui-accordion-header");this.active=f.length?f:d.closest(".ui-accordion-content").prev()}}this.active=this._findActive(this.active||a.active).toggleClass("ui-state-default").toggleClass("ui-state-active").toggleClass("ui-corner-all").toggleClass("ui-corner-top");this.active.next().addClass("ui-accordion-content-active"); -this._createIcons();this.resize();this.element.attr("role","tablist");this.headers.attr("role","tab").bind("keydown",function(g){return b._keydown(g)}).next().attr("role","tabpanel");this.headers.not(this.active||"").attr("aria-expanded","false").attr("tabIndex","-1").next().hide();this.active.length?this.active.attr("aria-expanded","true").attr("tabIndex","0"):this.headers.eq(0).attr("tabIndex","0");c.browser.safari||this.headers.find("a").attr("tabIndex","-1");a.event&&this.headers.bind(a.event+ -".accordion",function(g){b._clickHandler.call(b,g,this);g.preventDefault()})},_createIcons:function(){var a=this.options;if(a.icons){c("").addClass("ui-icon "+a.icons.header).prependTo(this.headers);this.active.find(".ui-icon").toggleClass(a.icons.header).toggleClass(a.icons.headerSelected);this.element.addClass("ui-accordion-icons")}},_destroyIcons:function(){this.headers.children(".ui-icon").remove();this.element.removeClass("ui-accordion-icons")},destroy:function(){var a=this.options;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role").unbind(".accordion").removeData("accordion"); -this.headers.unbind(".accordion").removeClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("tabIndex");this.headers.find("a").removeAttr("tabIndex");this._destroyIcons();var b=this.headers.next().css("display","").removeAttr("role").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active");if(a.autoHeight||a.fillHeight)b.css("height", -"");return this},_setOption:function(a,b){c.Widget.prototype._setOption.apply(this,arguments);a=="active"&&this.activate(b);if(a=="icons"){this._destroyIcons();b&&this._createIcons()}},_keydown:function(a){var b=c.ui.keyCode;if(!(this.options.disabled||a.altKey||a.ctrlKey)){var d=this.headers.length,f=this.headers.index(a.target),g=false;switch(a.keyCode){case b.RIGHT:case b.DOWN:g=this.headers[(f+1)%d];break;case b.LEFT:case b.UP:g=this.headers[(f-1+d)%d];break;case b.SPACE:case b.ENTER:this._clickHandler({target:a.target}, -a.target);a.preventDefault()}if(g){c(a.target).attr("tabIndex","-1");c(g).attr("tabIndex","0");g.focus();return false}return true}},resize:function(){var a=this.options,b;if(a.fillSpace){if(c.browser.msie){var d=this.element.parent().css("overflow");this.element.parent().css("overflow","hidden")}b=this.element.parent().height();c.browser.msie&&this.element.parent().css("overflow",d);this.headers.each(function(){b-=c(this).outerHeight(true)});this.headers.next().each(function(){c(this).height(Math.max(0, -b-c(this).innerHeight()+c(this).height()))}).css("overflow","auto")}else if(a.autoHeight){b=0;this.headers.next().each(function(){b=Math.max(b,c(this).height())}).height(b)}return this},activate:function(a){this.options.active=a;a=this._findActive(a)[0];this._clickHandler({target:a},a);return this},_findActive:function(a){return a?typeof a=="number"?this.headers.filter(":eq("+a+")"):this.headers.not(this.headers.not(a)):a===false?c([]):this.headers.filter(":eq(0)")},_clickHandler:function(a,b){var d= -this.options;if(!d.disabled)if(a.target){a=c(a.currentTarget||b);b=a[0]==this.active[0];d.active=d.collapsible&&b?false:c(".ui-accordion-header",this.element).index(a);if(!(this.running||!d.collapsible&&b)){this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").find(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header);if(!b){a.removeClass("ui-state-default ui-corner-all").addClass("ui-state-active ui-corner-top").find(".ui-icon").removeClass(d.icons.header).addClass(d.icons.headerSelected); -a.next().addClass("ui-accordion-content-active")}e=a.next();f=this.active.next();g={options:d,newHeader:b&&d.collapsible?c([]):a,oldHeader:this.active,newContent:b&&d.collapsible?c([]):e,oldContent:f};d=this.headers.index(this.active[0])>this.headers.index(a[0]);this.active=b?c([]):a;this._toggle(e,f,g,b,d)}}else if(d.collapsible){this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").find(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header); -this.active.next().addClass("ui-accordion-content-active");var f=this.active.next(),g={options:d,newHeader:c([]),oldHeader:d.active,newContent:c([]),oldContent:f},e=this.active=c([]);this._toggle(e,f,g)}},_toggle:function(a,b,d,f,g){var e=this.options,k=this;this.toShow=a;this.toHide=b;this.data=d;var i=function(){if(k)return k._completed.apply(k,arguments)};this._trigger("changestart",null,this.data);this.running=b.size()===0?a.size():b.size();if(e.animated){d={};d=e.collapsible&&f?{toShow:c([]), -toHide:b,complete:i,down:g,autoHeight:e.autoHeight||e.fillSpace}:{toShow:a,toHide:b,complete:i,down:g,autoHeight:e.autoHeight||e.fillSpace};if(!e.proxied)e.proxied=e.animated;if(!e.proxiedDuration)e.proxiedDuration=e.duration;e.animated=c.isFunction(e.proxied)?e.proxied(d):e.proxied;e.duration=c.isFunction(e.proxiedDuration)?e.proxiedDuration(d):e.proxiedDuration;f=c.ui.accordion.animations;var h=e.duration,j=e.animated;if(j&&!f[j]&&!c.easing[j])j="slide";f[j]||(f[j]=function(l){this.slide(l,{easing:j, -duration:h||700})});f[j](d)}else{if(e.collapsible&&f)a.toggle();else{b.hide();a.show()}i(true)}b.prev().attr("aria-expanded","false").attr("tabIndex","-1").blur();a.prev().attr("aria-expanded","true").attr("tabIndex","0").focus()},_completed:function(a){var b=this.options;this.running=a?0:--this.running;if(!this.running){b.clearStyle&&this.toShow.add(this.toHide).css({height:"",overflow:""});this.toHide.removeClass("ui-accordion-content-active");this._trigger("change",null,this.data)}}});c.extend(c.ui.accordion, -{version:"1.8.1",animations:{slide:function(a,b){a=c.extend({easing:"swing",duration:300},a,b);if(a.toHide.size())if(a.toShow.size()){var d=a.toShow.css("overflow"),f=0,g={},e={},k;b=a.toShow;k=b[0].style.width;b.width(parseInt(b.parent().width(),10)-parseInt(b.css("paddingLeft"),10)-parseInt(b.css("paddingRight"),10)-(parseInt(b.css("borderLeftWidth"),10)||0)-(parseInt(b.css("borderRightWidth"),10)||0));c.each(["height","paddingTop","paddingBottom"],function(i,h){e[h]="hide";i=(""+c.css(a.toShow[0], -h)).match(/^([\d+-.]+)(.*)$/);g[h]={value:i[1],unit:i[2]||"px"}});a.toShow.css({height:0,overflow:"hidden"}).show();a.toHide.filter(":hidden").each(a.complete).end().filter(":visible").animate(e,{step:function(i,h){if(h.prop=="height")f=h.end-h.start===0?0:(h.now-h.start)/(h.end-h.start);a.toShow[0].style[h.prop]=f*g[h.prop].value+g[h.prop].unit},duration:a.duration,easing:a.easing,complete:function(){a.autoHeight||a.toShow.css("height","");a.toShow.css("width",k);a.toShow.css({overflow:d});a.complete()}})}else a.toHide.animate({height:"hide"}, -a);else a.toShow.animate({height:"show"},a)},bounceslide:function(a){this.slide(a,{easing:a.down?"easeOutBounce":"swing",duration:a.down?1E3:200})}}})})(jQuery); -;/* - * jQuery UI Autocomplete 1.8.1 - * - * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Autocomplete - * - * Depends: - * jquery.ui.core.js - * jquery.ui.widget.js - * jquery.ui.position.js - */ -(function(e){e.widget("ui.autocomplete",{options:{minLength:1,delay:300},_create:function(){var a=this,b=this.element[0].ownerDocument;this.element.addClass("ui-autocomplete-input").attr("autocomplete","off").attr({role:"textbox","aria-autocomplete":"list","aria-haspopup":"true"}).bind("keydown.autocomplete",function(c){var d=e.ui.keyCode;switch(c.keyCode){case d.PAGE_UP:a._move("previousPage",c);break;case d.PAGE_DOWN:a._move("nextPage",c);break;case d.UP:a._move("previous",c);c.preventDefault(); -break;case d.DOWN:a._move("next",c);c.preventDefault();break;case d.ENTER:a.menu.active&&c.preventDefault();case d.TAB:if(!a.menu.active)return;a.menu.select(c);break;case d.ESCAPE:a.element.val(a.term);a.close(c);break;case d.LEFT:case d.RIGHT:case d.SHIFT:case d.CONTROL:case d.ALT:break;default:clearTimeout(a.searching);a.searching=setTimeout(function(){a.search(null,c)},a.options.delay);break}}).bind("focus.autocomplete",function(){a.selectedItem=null;a.previous=a.element.val()}).bind("blur.autocomplete", -function(c){clearTimeout(a.searching);a.closing=setTimeout(function(){a.close(c);a._change(c)},150)});this._initSource();this.response=function(){return a._response.apply(a,arguments)};this.menu=e("
                      ").addClass("ui-autocomplete").appendTo("body",b).menu({focus:function(c,d){d=d.item.data("item.autocomplete");false!==a._trigger("focus",null,{item:d})&&/^key/.test(c.originalEvent.type)&&a.element.val(d.value)},selected:function(c,d){d=d.item.data("item.autocomplete");false!==a._trigger("select", -c,{item:d})&&a.element.val(d.value);a.close(c);c=a.previous;if(a.element[0]!==b.activeElement){a.element.focus();a.previous=c}a.selectedItem=d},blur:function(){a.menu.element.is(":visible")&&a.element.val(a.term)}}).zIndex(this.element.zIndex()+1).css({top:0,left:0}).hide().data("menu");e.fn.bgiframe&&this.menu.element.bgiframe()},destroy:function(){this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup"); -this.menu.element.remove();e.Widget.prototype.destroy.call(this)},_setOption:function(a){e.Widget.prototype._setOption.apply(this,arguments);a==="source"&&this._initSource()},_initSource:function(){var a,b;if(e.isArray(this.options.source)){a=this.options.source;this.source=function(c,d){d(e.ui.autocomplete.filter(a,c.term))}}else if(typeof this.options.source==="string"){b=this.options.source;this.source=function(c,d){e.getJSON(b,c,d)}}else this.source=this.options.source},search:function(a,b){a= -a!=null?a:this.element.val();if(a.length").data("item.autocomplete",b).append(""+b.label+"").appendTo(a)},_move:function(a,b){if(this.menu.element.is(":visible"))if(this.menu.first()&& -/^previous/.test(a)||this.menu.last()&&/^next/.test(a)){this.element.val(this.term);this.menu.deactivate()}else this.menu[a](b);else this.search(null,b)},widget:function(){return this.menu.element}});e.extend(e.ui.autocomplete,{escapeRegex:function(a){return a.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi,"\\$1")},filter:function(a,b){var c=new RegExp(e.ui.autocomplete.escapeRegex(b),"i");return e.grep(a,function(d){return c.test(d.label||d.value||d)})}})})(jQuery); -(function(e){e.widget("ui.menu",{_create:function(){var a=this;this.element.addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr({role:"listbox","aria-activedescendant":"ui-active-menuitem"}).click(function(b){if(e(b.target).closest(".ui-menu-item a").length){b.preventDefault();a.select(b)}});this.refresh()},refresh:function(){var a=this;this.element.children("li:not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","menuitem").children("a").addClass("ui-corner-all").attr("tabindex", --1).mouseenter(function(b){a.activate(b,e(this).parent())}).mouseleave(function(){a.deactivate()})},activate:function(a,b){this.deactivate();if(this.hasScroll()){var c=b.offset().top-this.element.offset().top,d=this.element.attr("scrollTop"),f=this.element.height();if(c<0)this.element.attr("scrollTop",d+c);else c>f&&this.element.attr("scrollTop",d+c-f+b.height())}this.active=b.eq(0).children("a").addClass("ui-state-hover").attr("id","ui-active-menuitem").end();this._trigger("focus",a,{item:b})},deactivate:function(){if(this.active){this.active.children("a").removeClass("ui-state-hover").removeAttr("id"); -this._trigger("blur");this.active=null}},next:function(a){this.move("next",".ui-menu-item:first",a)},previous:function(a){this.move("prev",".ui-menu-item:last",a)},first:function(){return this.active&&!this.active.prev().length},last:function(){return this.active&&!this.active.next().length},move:function(a,b,c){if(this.active){a=this.active[a+"All"](".ui-menu-item").eq(0);a.length?this.activate(c,a):this.activate(c,this.element.children(b))}else this.activate(c,this.element.children(b))},nextPage:function(a){if(this.hasScroll())if(!this.active|| -this.last())this.activate(a,this.element.children(":first"));else{var b=this.active.offset().top,c=this.element.height(),d=this.element.children("li").filter(function(){var f=e(this).offset().top-b-c+e(this).height();return f<10&&f>-10});d.length||(d=this.element.children(":last"));this.activate(a,d)}else this.activate(a,this.element.children(!this.active||this.last()?":first":":last"))},previousPage:function(a){if(this.hasScroll())if(!this.active||this.first())this.activate(a,this.element.children(":last")); -else{var b=this.active.offset().top,c=this.element.height();result=this.element.children("li").filter(function(){var d=e(this).offset().top-b+c-e(this).height();return d<10&&d>-10});result.length||(result=this.element.children(":first"));this.activate(a,result)}else this.activate(a,this.element.children(!this.active||this.first()?":last":":first"))},hasScroll:function(){return this.element.height()
                      ").addClass("ui-button-text").html(this.options.label).appendTo(b.empty()).text(), -d=this.options.icons,e=d.primary&&d.secondary;if(d.primary||d.secondary){b.addClass("ui-button-text-icon"+(e?"s":""));d.primary&&b.prepend("");d.secondary&&b.append("");if(!this.options.text){b.addClass(e?"ui-button-icons-only":"ui-button-icon-only").removeClass("ui-button-text-icons ui-button-text-icon");this.hasTitle||b.attr("title",c)}}else b.addClass("ui-button-text-only")}}}); -a.widget("ui.buttonset",{_create:function(){this.element.addClass("ui-buttonset");this._init()},_init:function(){this.refresh()},_setOption:function(b,c){b==="disabled"&&this.buttons.button("option",b,c);a.Widget.prototype._setOption.apply(this,arguments)},refresh:function(){this.buttons=this.element.find(":button, :submit, :reset, :checkbox, :radio, a, :data(button)").filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass("ui-corner-left").end().filter(":last").addClass("ui-corner-right").end().end()}, -destroy:function(){this.element.removeClass("ui-buttonset");this.buttons.map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy");a.Widget.prototype.destroy.call(this)}})})(jQuery); -;/* - * jQuery UI Dialog 1.8.1 - * - * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Dialog - * - * Depends: - * jquery.ui.core.js - * jquery.ui.widget.js - * jquery.ui.button.js - * jquery.ui.draggable.js - * jquery.ui.mouse.js - * jquery.ui.position.js - * jquery.ui.resizable.js - */ -(function(c){c.widget("ui.dialog",{options:{autoOpen:true,buttons:{},closeOnEscape:true,closeText:"close",dialogClass:"",draggable:true,hide:null,height:"auto",maxHeight:false,maxWidth:false,minHeight:150,minWidth:150,modal:false,position:"center",resizable:true,show:null,stack:true,title:"",width:300,zIndex:1E3},_create:function(){this.originalTitle=this.element.attr("title");var a=this,b=a.options,d=b.title||a.originalTitle||" ",e=c.ui.dialog.getTitleId(a.element),g=(a.uiDialog=c("
                      ")).appendTo(document.body).hide().addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+ -b.dialogClass).css({zIndex:b.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(i){if(b.closeOnEscape&&i.keyCode&&i.keyCode===c.ui.keyCode.ESCAPE){a.close(i);i.preventDefault()}}).attr({role:"dialog","aria-labelledby":e}).mousedown(function(i){a.moveToTop(false,i)});a.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(g);var f=(a.uiDialogTitlebar=c("
                      ")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(g), -h=c('').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").hover(function(){h.addClass("ui-state-hover")},function(){h.removeClass("ui-state-hover")}).focus(function(){h.addClass("ui-state-focus")}).blur(function(){h.removeClass("ui-state-focus")}).click(function(i){a.close(i);return false}).appendTo(f);(a.uiDialogTitlebarCloseText=c("")).addClass("ui-icon ui-icon-closethick").text(b.closeText).appendTo(h);c("").addClass("ui-dialog-title").attr("id", -e).html(d).prependTo(f);if(c.isFunction(b.beforeclose)&&!c.isFunction(b.beforeClose))b.beforeClose=b.beforeclose;f.find("*").add(f).disableSelection();b.draggable&&c.fn.draggable&&a._makeDraggable();b.resizable&&c.fn.resizable&&a._makeResizable();a._createButtons(b.buttons);a._isOpen=false;c.fn.bgiframe&&g.bgiframe()},_init:function(){this.options.autoOpen&&this.open()},destroy:function(){var a=this;a.overlay&&a.overlay.destroy();a.uiDialog.hide();a.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body"); -a.uiDialog.remove();a.originalTitle&&a.element.attr("title",a.originalTitle);return a},widget:function(){return this.uiDialog},close:function(a){var b=this,d;if(false!==b._trigger("beforeClose",a)){b.overlay&&b.overlay.destroy();b.uiDialog.unbind("keypress.ui-dialog");b._isOpen=false;if(b.options.hide)b.uiDialog.hide(b.options.hide,function(){b._trigger("close",a)});else{b.uiDialog.hide();b._trigger("close",a)}c.ui.dialog.overlay.resize();if(b.options.modal){d=0;c(".ui-dialog").each(function(){if(this!== -b.uiDialog[0])d=Math.max(d,c(this).css("z-index"))});c.ui.dialog.maxZ=d}return b}},isOpen:function(){return this._isOpen},moveToTop:function(a,b){var d=this,e=d.options;if(e.modal&&!a||!e.stack&&!e.modal)return d._trigger("focus",b);if(e.zIndex>c.ui.dialog.maxZ)c.ui.dialog.maxZ=e.zIndex;if(d.overlay){c.ui.dialog.maxZ+=1;d.overlay.$el.css("z-index",c.ui.dialog.overlay.maxZ=c.ui.dialog.maxZ)}a={scrollTop:d.element.attr("scrollTop"),scrollLeft:d.element.attr("scrollLeft")};c.ui.dialog.maxZ+=1;d.uiDialog.css("z-index", -c.ui.dialog.maxZ);d.element.attr(a);d._trigger("focus",b);return d},open:function(){if(!this._isOpen){var a=this,b=a.options,d=a.uiDialog;a.overlay=b.modal?new c.ui.dialog.overlay(a):null;d.next().length&&d.appendTo("body");a._size();a._position(b.position);d.show(b.show);a.moveToTop(true);b.modal&&d.bind("keypress.ui-dialog",function(e){if(e.keyCode===c.ui.keyCode.TAB){var g=c(":tabbable",this),f=g.filter(":first");g=g.filter(":last");if(e.target===g[0]&&!e.shiftKey){f.focus(1);return false}else if(e.target=== -f[0]&&e.shiftKey){g.focus(1);return false}}});c([]).add(d.find(".ui-dialog-content :tabbable:first")).add(d.find(".ui-dialog-buttonpane :tabbable:first")).add(d).filter(":first").focus();a._trigger("open");a._isOpen=true;return a}},_createButtons:function(a){var b=this,d=false,e=c("
                      ").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix");b.uiDialog.find(".ui-dialog-buttonpane").remove();typeof a==="object"&&a!==null&&c.each(a,function(){return!(d=true)});if(d){c.each(a, -function(g,f){g=c('').text(g).click(function(){f.apply(b.element[0],arguments)}).appendTo(e);c.fn.button&&g.button()});e.appendTo(b.uiDialog)}},_makeDraggable:function(){function a(f){return{position:f.position,offset:f.offset}}var b=this,d=b.options,e=c(document),g;b.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(f,h){g=d.height==="auto"?"auto":c(this).height();c(this).height(c(this).height()).addClass("ui-dialog-dragging"); -b._trigger("dragStart",f,a(h))},drag:function(f,h){b._trigger("drag",f,a(h))},stop:function(f,h){d.position=[h.position.left-e.scrollLeft(),h.position.top-e.scrollTop()];c(this).removeClass("ui-dialog-dragging").height(g);b._trigger("dragStop",f,a(h));c.ui.dialog.overlay.resize()}})},_makeResizable:function(a){function b(f){return{originalPosition:f.originalPosition,originalSize:f.originalSize,position:f.position,size:f.size}}a=a===undefined?this.options.resizable:a;var d=this,e=d.options,g=d.uiDialog.css("position"); -a=typeof a==="string"?a:"n,e,s,w,se,sw,ne,nw";d.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:d.element,maxWidth:e.maxWidth,maxHeight:e.maxHeight,minWidth:e.minWidth,minHeight:d._minHeight(),handles:a,start:function(f,h){c(this).addClass("ui-dialog-resizing");d._trigger("resizeStart",f,b(h))},resize:function(f,h){d._trigger("resize",f,b(h))},stop:function(f,h){c(this).removeClass("ui-dialog-resizing");e.height=c(this).height();e.width=c(this).width();d._trigger("resizeStop", -f,b(h));c.ui.dialog.overlay.resize()}}).css("position",g).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_minHeight:function(){var a=this.options;return a.height==="auto"?a.minHeight:Math.min(a.minHeight,a.height)},_position:function(a){var b=[],d=[0,0];a=a||c.ui.dialog.prototype.options.position;if(typeof a==="string"||typeof a==="object"&&"0"in a){b=a.split?a.split(" "):[a[0],a[1]];if(b.length===1)b[1]=b[0];c.each(["left","top"],function(e,g){if(+b[e]===b[e]){d[e]=b[e];b[e]= -g}})}else if(typeof a==="object"){if("left"in a){b[0]="left";d[0]=a.left}else if("right"in a){b[0]="right";d[0]=-a.right}if("top"in a){b[1]="top";d[1]=a.top}else if("bottom"in a){b[1]="bottom";d[1]=-a.bottom}}(a=this.uiDialog.is(":visible"))||this.uiDialog.show();this.uiDialog.css({top:0,left:0}).position({my:b.join(" "),at:b.join(" "),offset:d.join(" "),of:window,collision:"fit",using:function(e){var g=c(this).css(e).offset().top;g<0&&c(this).css("top",e.top-g)}});a||this.uiDialog.hide()},_setOption:function(a, -b){var d=this,e=d.uiDialog,g=e.is(":data(resizable)"),f=false;switch(a){case "beforeclose":a="beforeClose";break;case "buttons":d._createButtons(b);break;case "closeText":d.uiDialogTitlebarCloseText.text(""+b);break;case "dialogClass":e.removeClass(d.options.dialogClass).addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+b);break;case "disabled":b?e.addClass("ui-dialog-disabled"):e.removeClass("ui-dialog-disabled");break;case "draggable":b?d._makeDraggable():e.draggable("destroy");break; -case "height":f=true;break;case "maxHeight":g&&e.resizable("option","maxHeight",b);f=true;break;case "maxWidth":g&&e.resizable("option","maxWidth",b);f=true;break;case "minHeight":g&&e.resizable("option","minHeight",b);f=true;break;case "minWidth":g&&e.resizable("option","minWidth",b);f=true;break;case "position":d._position(b);break;case "resizable":g&&!b&&e.resizable("destroy");g&&typeof b==="string"&&e.resizable("option","handles",b);!g&&b!==false&&d._makeResizable(b);break;case "title":c(".ui-dialog-title", -d.uiDialogTitlebar).html(""+(b||" "));break;case "width":f=true;break}c.Widget.prototype._setOption.apply(d,arguments);f&&d._size()},_size:function(){var a=this.options,b;this.element.css({width:"auto",minHeight:0,height:0});b=this.uiDialog.css({height:"auto",width:a.width}).height();this.element.css(a.height==="auto"?{minHeight:Math.max(a.minHeight-b,0),height:"auto"}:{minHeight:0,height:Math.max(a.height-b,0)}).show();this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option","minHeight", -this._minHeight())}});c.extend(c.ui.dialog,{version:"1.8.1",uuid:0,maxZ:0,getTitleId:function(a){a=a.attr("id");if(!a){this.uuid+=1;a=this.uuid}return"ui-dialog-title-"+a},overlay:function(a){this.$el=c.ui.dialog.overlay.create(a)}});c.extend(c.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:c.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(a){return a+".dialog-overlay"}).join(" "),create:function(a){if(this.instances.length===0){setTimeout(function(){c.ui.dialog.overlay.instances.length&& -c(document).bind(c.ui.dialog.overlay.events,function(d){return c(d.target).zIndex()>=c.ui.dialog.overlay.maxZ})},1);c(document).bind("keydown.dialog-overlay",function(d){if(a.options.closeOnEscape&&d.keyCode&&d.keyCode===c.ui.keyCode.ESCAPE){a.close(d);d.preventDefault()}});c(window).bind("resize.dialog-overlay",c.ui.dialog.overlay.resize)}var b=(this.oldInstances.pop()||c("
                      ").addClass("ui-widget-overlay")).appendTo(document.body).css({width:this.width(),height:this.height()});c.fn.bgiframe&& -b.bgiframe();this.instances.push(b);return b},destroy:function(a){this.oldInstances.push(this.instances.splice(c.inArray(a,this.instances),1)[0]);this.instances.length===0&&c([document,window]).unbind(".dialog-overlay");a.remove();var b=0;c.each(this.instances,function(){b=Math.max(b,this.css("z-index"))});this.maxZ=b},height:function(){var a,b;if(c.browser.msie&&c.browser.version<7){a=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight);b=Math.max(document.documentElement.offsetHeight, -document.body.offsetHeight);return a
                      ");if(!a.values)a.values=[this._valueMin(),this._valueMin()];if(a.values.length&&a.values.length!==2)a.values=[a.values[0],a.values[0]]}else this.range=d("
                      ");this.range.appendTo(this.element).addClass("ui-slider-range");if(a.range==="min"||a.range==="max")this.range.addClass("ui-slider-range-"+a.range);this.range.addClass("ui-widget-header")}d(".ui-slider-handle",this.element).length===0&&d("").appendTo(this.element).addClass("ui-slider-handle"); -if(a.values&&a.values.length)for(;d(".ui-slider-handle",this.element).length").appendTo(this.element).addClass("ui-slider-handle");this.handles=d(".ui-slider-handle",this.element).addClass("ui-state-default ui-corner-all");this.handle=this.handles.eq(0);this.handles.add(this.range).filter("a").click(function(c){c.preventDefault()}).hover(function(){a.disabled||d(this).addClass("ui-state-hover")},function(){d(this).removeClass("ui-state-hover")}).focus(function(){if(a.disabled)d(this).blur(); -else{d(".ui-slider .ui-state-focus").removeClass("ui-state-focus");d(this).addClass("ui-state-focus")}}).blur(function(){d(this).removeClass("ui-state-focus")});this.handles.each(function(c){d(this).data("index.ui-slider-handle",c)});this.handles.keydown(function(c){var e=true,f=d(this).data("index.ui-slider-handle"),g,h,i;if(!b.options.disabled){switch(c.keyCode){case d.ui.keyCode.HOME:case d.ui.keyCode.END:case d.ui.keyCode.PAGE_UP:case d.ui.keyCode.PAGE_DOWN:case d.ui.keyCode.UP:case d.ui.keyCode.RIGHT:case d.ui.keyCode.DOWN:case d.ui.keyCode.LEFT:e= -false;if(!b._keySliding){b._keySliding=true;d(this).addClass("ui-state-active");g=b._start(c,f);if(g===false)return}break}i=b.options.step;g=b.options.values&&b.options.values.length?(h=b.values(f)):(h=b.value());switch(c.keyCode){case d.ui.keyCode.HOME:h=b._valueMin();break;case d.ui.keyCode.END:h=b._valueMax();break;case d.ui.keyCode.PAGE_UP:h=g+(b._valueMax()-b._valueMin())/5;break;case d.ui.keyCode.PAGE_DOWN:h=g-(b._valueMax()-b._valueMin())/5;break;case d.ui.keyCode.UP:case d.ui.keyCode.RIGHT:if(g=== -b._valueMax())return;h=g+i;break;case d.ui.keyCode.DOWN:case d.ui.keyCode.LEFT:if(g===b._valueMin())return;h=g-i;break}b._slide(c,f,h);return e}}).keyup(function(c){var e=d(this).data("index.ui-slider-handle");if(b._keySliding){b._keySliding=false;b._stop(c,e);b._change(c,e);d(this).removeClass("ui-state-active")}});this._refreshValue();this._animateOff=false},destroy:function(){this.handles.remove();this.range.remove();this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider"); -this._mouseDestroy();return this},_mouseCapture:function(b){var a=this.options,c,e,f,g,h,i;if(a.disabled)return false;this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()};this.elementOffset=this.element.offset();c={x:b.pageX,y:b.pageY};e=this._normValueFromMouse(c);f=this._valueMax()-this._valueMin()+1;h=this;this.handles.each(function(j){var k=Math.abs(e-h.values(j));if(f>k){f=k;g=d(this);i=j}});if(a.range===true&&this.values(1)===a.min){i+=1;g=d(this.handles[i])}if(this._start(b, -i)===false)return false;this._mouseSliding=true;h._handleIndex=i;g.addClass("ui-state-active").focus();a=g.offset();this._clickOffset=!d(b.target).parents().andSelf().is(".ui-slider-handle")?{left:0,top:0}:{left:b.pageX-a.left-g.width()/2,top:b.pageY-a.top-g.height()/2-(parseInt(g.css("borderTopWidth"),10)||0)-(parseInt(g.css("borderBottomWidth"),10)||0)+(parseInt(g.css("marginTop"),10)||0)};e=this._normValueFromMouse(c);this._slide(b,i,e);return this._animateOff=true},_mouseStart:function(){return true}, -_mouseDrag:function(b){var a=this._normValueFromMouse({x:b.pageX,y:b.pageY});this._slide(b,this._handleIndex,a);return false},_mouseStop:function(b){this.handles.removeClass("ui-state-active");this._mouseSliding=false;this._stop(b,this._handleIndex);this._change(b,this._handleIndex);this._clickOffset=this._handleIndex=null;return this._animateOff=false},_detectOrientation:function(){this.orientation=this.options.orientation==="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(b){var a; -if(this.orientation==="horizontal"){a=this.elementSize.width;b=b.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)}else{a=this.elementSize.height;b=b.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)}a=b/a;if(a>1)a=1;if(a<0)a=0;if(this.orientation==="vertical")a=1-a;b=this._valueMax()-this._valueMin();return this._trimAlignValue(this._valueMin()+a*b)},_start:function(b,a){var c={handle:this.handles[a],value:this.value()};if(this.options.values&&this.options.values.length){c.value= -this.values(a);c.values=this.values()}return this._trigger("start",b,c)},_slide:function(b,a,c){var e;if(this.options.values&&this.options.values.length){e=this.values(a?0:1);if(this.options.values.length===2&&this.options.range===true&&(a===0&&c>e||a===1&&c1){this.options.values[b]=this._trimAlignValue(a);this._refreshValue();this._change(null,b)}if(arguments.length)if(d.isArray(arguments[0])){c=this.options.values;e=arguments[0];for(f=0;fthis._valueMax())return this._valueMax();var a=this.options.step,c=b%a;b=b-c;if(c>=a/2)b+=a;return parseFloat(b.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var b=this.options.range,a=this.options,c=this, -e=!this._animateOff?a.animate:false,f,g={},h,i,j,k;if(this.options.values&&this.options.values.length)this.handles.each(function(l){f=(c.values(l)-c._valueMin())/(c._valueMax()-c._valueMin())*100;g[c.orientation==="horizontal"?"left":"bottom"]=f+"%";d(this).stop(1,1)[e?"animate":"css"](g,a.animate);if(c.options.range===true)if(c.orientation==="horizontal"){if(l===0)c.range.stop(1,1)[e?"animate":"css"]({left:f+"%"},a.animate);if(l===1)c.range[e?"animate":"css"]({width:f-h+"%"},{queue:false,duration:a.animate})}else{if(l=== -0)c.range.stop(1,1)[e?"animate":"css"]({bottom:f+"%"},a.animate);if(l===1)c.range[e?"animate":"css"]({height:f-h+"%"},{queue:false,duration:a.animate})}h=f});else{i=this.value();j=this._valueMin();k=this._valueMax();f=k!==j?(i-j)/(k-j)*100:0;g[c.orientation==="horizontal"?"left":"bottom"]=f+"%";this.handle.stop(1,1)[e?"animate":"css"](g,a.animate);if(b==="min"&&this.orientation==="horizontal")this.range.stop(1,1)[e?"animate":"css"]({width:f+"%"},a.animate);if(b==="max"&&this.orientation==="horizontal")this.range[e? -"animate":"css"]({width:100-f+"%"},{queue:false,duration:a.animate});if(b==="min"&&this.orientation==="vertical")this.range.stop(1,1)[e?"animate":"css"]({height:f+"%"},a.animate);if(b==="max"&&this.orientation==="vertical")this.range[e?"animate":"css"]({height:100-f+"%"},{queue:false,duration:a.animate})}}});d.extend(d.ui.slider,{version:"1.8.1"})})(jQuery); -;/* - * jQuery UI Tabs 1.8.1 - * - * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Tabs - * - * Depends: - * jquery.ui.core.js - * jquery.ui.widget.js - */ -(function(d){var s=0,u=0;d.widget("ui.tabs",{options:{add:null,ajaxOptions:null,cache:false,cookie:null,collapsible:false,disable:null,disabled:[],enable:null,event:"click",fx:null,idPrefix:"ui-tabs-",load:null,panelTemplate:"
                      ",remove:null,select:null,show:null,spinner:"Loading…",tabTemplate:'
                    • #{label}
                    • '},_create:function(){this._tabify(true)},_setOption:function(c,e){if(c=="selected")this.options.collapsible&&e==this.options.selected|| -this.select(e);else{this.options[c]=e;this._tabify()}},_tabId:function(c){return c.title&&c.title.replace(/\s/g,"_").replace(/[^A-Za-z0-9\-_:\.]/g,"")||this.options.idPrefix+ ++s},_sanitizeSelector:function(c){return c.replace(/:/g,"\\:")},_cookie:function(){var c=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+ ++u);return d.cookie.apply(null,[c].concat(d.makeArray(arguments)))},_ui:function(c,e){return{tab:c,panel:e,index:this.anchors.index(c)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var c= -d(this);c.html(c.data("label.tabs")).removeData("label.tabs")})},_tabify:function(c){function e(g,f){g.css({display:""});!d.support.opacity&&f.opacity&&g[0].style.removeAttribute("filter")}this.list=this.element.find("ol,ul").eq(0);this.lis=d("li:has(a[href])",this.list);this.anchors=this.lis.map(function(){return d("a",this)[0]});this.panels=d([]);var a=this,b=this.options,h=/^#.+/;this.anchors.each(function(g,f){var j=d(f).attr("href"),l=j.split("#")[0],p;if(l&&(l===location.toString().split("#")[0]|| -(p=d("base")[0])&&l===p.href)){j=f.hash;f.href=j}if(h.test(j))a.panels=a.panels.add(a._sanitizeSelector(j));else if(j!="#"){d.data(f,"href.tabs",j);d.data(f,"load.tabs",j.replace(/#.*$/,""));j=a._tabId(f);f.href="#"+j;f=d("#"+j);if(!f.length){f=d(b.panelTemplate).attr("id",j).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(a.panels[g-1]||a.list);f.data("destroy.tabs",true)}a.panels=a.panels.add(f)}else b.disabled.push(g)});if(c){this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all"); -this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.lis.addClass("ui-state-default ui-corner-top");this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom");if(b.selected===undefined){location.hash&&this.anchors.each(function(g,f){if(f.hash==location.hash){b.selected=g;return false}});if(typeof b.selected!="number"&&b.cookie)b.selected=parseInt(a._cookie(),10);if(typeof b.selected!="number"&&this.lis.filter(".ui-tabs-selected").length)b.selected= -this.lis.index(this.lis.filter(".ui-tabs-selected"));b.selected=b.selected||(this.lis.length?0:-1)}else if(b.selected===null)b.selected=-1;b.selected=b.selected>=0&&this.anchors[b.selected]||b.selected<0?b.selected:0;b.disabled=d.unique(b.disabled.concat(d.map(this.lis.filter(".ui-state-disabled"),function(g){return a.lis.index(g)}))).sort();d.inArray(b.selected,b.disabled)!=-1&&b.disabled.splice(d.inArray(b.selected,b.disabled),1);this.panels.addClass("ui-tabs-hide");this.lis.removeClass("ui-tabs-selected ui-state-active"); -if(b.selected>=0&&this.anchors.length){this.panels.eq(b.selected).removeClass("ui-tabs-hide");this.lis.eq(b.selected).addClass("ui-tabs-selected ui-state-active");a.element.queue("tabs",function(){a._trigger("show",null,a._ui(a.anchors[b.selected],a.panels[b.selected]))});this.load(b.selected)}d(window).bind("unload",function(){a.lis.add(a.anchors).unbind(".tabs");a.lis=a.anchors=a.panels=null})}else b.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"));this.element[b.collapsible?"addClass": -"removeClass"]("ui-tabs-collapsible");b.cookie&&this._cookie(b.selected,b.cookie);c=0;for(var i;i=this.lis[c];c++)d(i)[d.inArray(c,b.disabled)!=-1&&!d(i).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled");b.cache===false&&this.anchors.removeData("cache.tabs");this.lis.add(this.anchors).unbind(".tabs");if(b.event!="mouseover"){var k=function(g,f){f.is(":not(.ui-state-disabled)")&&f.addClass("ui-state-"+g)},n=function(g,f){f.removeClass("ui-state-"+g)};this.lis.bind("mouseover.tabs", -function(){k("hover",d(this))});this.lis.bind("mouseout.tabs",function(){n("hover",d(this))});this.anchors.bind("focus.tabs",function(){k("focus",d(this).closest("li"))});this.anchors.bind("blur.tabs",function(){n("focus",d(this).closest("li"))})}var m,o;if(b.fx)if(d.isArray(b.fx)){m=b.fx[0];o=b.fx[1]}else m=o=b.fx;var q=o?function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.hide().removeClass("ui-tabs-hide").animate(o,o.duration||"normal",function(){e(f,o);a._trigger("show", -null,a._ui(g,f[0]))})}:function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.removeClass("ui-tabs-hide");a._trigger("show",null,a._ui(g,f[0]))},r=m?function(g,f){f.animate(m,m.duration||"normal",function(){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");e(f,m);a.element.dequeue("tabs")})}:function(g,f){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");a.element.dequeue("tabs")};this.anchors.bind(b.event+".tabs", -function(){var g=this,f=d(this).closest("li"),j=a.panels.filter(":not(.ui-tabs-hide)"),l=d(a._sanitizeSelector(this.hash));if(f.hasClass("ui-tabs-selected")&&!b.collapsible||f.hasClass("ui-state-disabled")||f.hasClass("ui-state-processing")||a._trigger("select",null,a._ui(this,l[0]))===false){this.blur();return false}b.selected=a.anchors.index(this);a.abort();if(b.collapsible)if(f.hasClass("ui-tabs-selected")){b.selected=-1;b.cookie&&a._cookie(b.selected,b.cookie);a.element.queue("tabs",function(){r(g, -j)}).dequeue("tabs");this.blur();return false}else if(!j.length){b.cookie&&a._cookie(b.selected,b.cookie);a.element.queue("tabs",function(){q(g,l)});a.load(a.anchors.index(this));this.blur();return false}b.cookie&&a._cookie(b.selected,b.cookie);if(l.length){j.length&&a.element.queue("tabs",function(){r(g,j)});a.element.queue("tabs",function(){q(g,l)});a.load(a.anchors.index(this))}else throw"jQuery UI Tabs: Mismatching fragment identifier.";d.browser.msie&&this.blur()});this.anchors.bind("click.tabs", -function(){return false})},destroy:function(){var c=this.options;this.abort();this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs");this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.anchors.each(function(){var e=d.data(this,"href.tabs");if(e)this.href=e;var a=d(this).unbind(".tabs");d.each(["href","load","cache"],function(b,h){a.removeData(h+".tabs")})});this.lis.unbind(".tabs").add(this.panels).each(function(){d.data(this, -"destroy.tabs")?d(this).remove():d(this).removeClass("ui-state-default ui-corner-top ui-tabs-selected ui-state-active ui-state-hover ui-state-focus ui-state-disabled ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide")});c.cookie&&this._cookie(null,c.cookie);return this},add:function(c,e,a){if(a===undefined)a=this.anchors.length;var b=this,h=this.options;e=d(h.tabTemplate.replace(/#\{href\}/g,c).replace(/#\{label\}/g,e));c=!c.indexOf("#")?c.replace("#",""):this._tabId(d("a",e)[0]);e.addClass("ui-state-default ui-corner-top").data("destroy.tabs", -true);var i=d("#"+c);i.length||(i=d(h.panelTemplate).attr("id",c).data("destroy.tabs",true));i.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide");if(a>=this.lis.length){e.appendTo(this.list);i.appendTo(this.list[0].parentNode)}else{e.insertBefore(this.lis[a]);i.insertBefore(this.panels[a])}h.disabled=d.map(h.disabled,function(k){return k>=a?++k:k});this._tabify();if(this.anchors.length==1){h.selected=0;e.addClass("ui-tabs-selected ui-state-active");i.removeClass("ui-tabs-hide"); -this.element.queue("tabs",function(){b._trigger("show",null,b._ui(b.anchors[0],b.panels[0]))});this.load(0)}this._trigger("add",null,this._ui(this.anchors[a],this.panels[a]));return this},remove:function(c){var e=this.options,a=this.lis.eq(c).remove(),b=this.panels.eq(c).remove();if(a.hasClass("ui-tabs-selected")&&this.anchors.length>1)this.select(c+(c+1=c?--h:h});this._tabify();this._trigger("remove", -null,this._ui(a.find("a")[0],b[0]));return this},enable:function(c){var e=this.options;if(d.inArray(c,e.disabled)!=-1){this.lis.eq(c).removeClass("ui-state-disabled");e.disabled=d.grep(e.disabled,function(a){return a!=c});this._trigger("enable",null,this._ui(this.anchors[c],this.panels[c]));return this}},disable:function(c){var e=this.options;if(c!=e.selected){this.lis.eq(c).addClass("ui-state-disabled");e.disabled.push(c);e.disabled.sort();this._trigger("disable",null,this._ui(this.anchors[c],this.panels[c]))}return this}, -select:function(c){if(typeof c=="string")c=this.anchors.index(this.anchors.filter("[href$="+c+"]"));else if(c===null)c=-1;if(c==-1&&this.options.collapsible)c=this.options.selected;this.anchors.eq(c).trigger(this.options.event+".tabs");return this},load:function(c){var e=this,a=this.options,b=this.anchors.eq(c)[0],h=d.data(b,"load.tabs");this.abort();if(!h||this.element.queue("tabs").length!==0&&d.data(b,"cache.tabs"))this.element.dequeue("tabs");else{this.lis.eq(c).addClass("ui-state-processing"); -if(a.spinner){var i=d("span",b);i.data("label.tabs",i.html()).html(a.spinner)}this.xhr=d.ajax(d.extend({},a.ajaxOptions,{url:h,success:function(k,n){d(e._sanitizeSelector(b.hash)).html(k);e._cleanup();a.cache&&d.data(b,"cache.tabs",true);e._trigger("load",null,e._ui(e.anchors[c],e.panels[c]));try{a.ajaxOptions.success(k,n)}catch(m){}},error:function(k,n){e._cleanup();e._trigger("load",null,e._ui(e.anchors[c],e.panels[c]));try{a.ajaxOptions.error(k,n,c,b)}catch(m){}}}));e.element.dequeue("tabs");return this}}, -abort:function(){this.element.queue([]);this.panels.stop(false,true);this.element.queue("tabs",this.element.queue("tabs").splice(-2,2));if(this.xhr){this.xhr.abort();delete this.xhr}this._cleanup();return this},url:function(c,e){this.anchors.eq(c).removeData("cache.tabs").data("load.tabs",e);return this},length:function(){return this.anchors.length}});d.extend(d.ui.tabs,{version:"1.8.1"});d.extend(d.ui.tabs.prototype,{rotation:null,rotate:function(c,e){var a=this,b=this.options,h=a._rotate||(a._rotate= -function(i){clearTimeout(a.rotation);a.rotation=setTimeout(function(){var k=b.selected;a.select(++k
                      ')}function E(a,b){d.extend(a, -b);for(var c in b)if(b[c]==null||b[c]==undefined)a[c]=b[c];return a}d.extend(d.ui,{datepicker:{version:"1.8.1"}});var y=(new Date).getTime();d.extend(J.prototype,{markerClassName:"hasDatepicker",log:function(){this.debug&&console.log.apply("",arguments)},_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(a){E(this._defaults,a||{});return this},_attachDatepicker:function(a,b){var c=null;for(var e in this._defaults){var f=a.getAttribute("date:"+e);if(f){c=c||{};try{c[e]=eval(f)}catch(h){c[e]= -f}}}e=a.nodeName.toLowerCase();f=e=="div"||e=="span";if(!a.id)a.id="dp"+ ++this.uuid;var i=this._newInst(d(a),f);i.settings=d.extend({},b||{},c||{});if(e=="input")this._connectDatepicker(a,i);else f&&this._inlineDatepicker(a,i)},_newInst:function(a,b){return{id:a[0].id.replace(/([^A-Za-z0-9_])/g,"\\\\$1"),input:a,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:b,dpDiv:!b?this.dpDiv:d('
                      ')}}, -_connectDatepicker:function(a,b){var c=d(a);b.append=d([]);b.trigger=d([]);if(!c.hasClass(this.markerClassName)){this._attachments(c,b);c.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp).bind("setData.datepicker",function(e,f,h){b.settings[f]=h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});this._autoSize(b);d.data(a,"datepicker",b)}},_attachments:function(a,b){var c=this._get(b,"appendText"),e=this._get(b,"isRTL");b.append&& -b.append.remove();if(c){b.append=d(''+c+"");a[e?"before":"after"](b.append)}a.unbind("focus",this._showDatepicker);b.trigger&&b.trigger.remove();c=this._get(b,"showOn");if(c=="focus"||c=="both")a.focus(this._showDatepicker);if(c=="button"||c=="both"){c=this._get(b,"buttonText");var f=this._get(b,"buttonImage");b.trigger=d(this._get(b,"buttonImageOnly")?d("").addClass(this._triggerClass).attr({src:f,alt:c,title:c}):d('').addClass(this._triggerClass).html(f== -""?c:d("").attr({src:f,alt:c,title:c})));a[e?"before":"after"](b.trigger);b.trigger.click(function(){d.datepicker._datepickerShowing&&d.datepicker._lastInput==a[0]?d.datepicker._hideDatepicker():d.datepicker._showDatepicker(a[0]);return false})}},_autoSize:function(a){if(this._get(a,"autoSize")&&!a.inline){var b=new Date(2009,11,20),c=this._get(a,"dateFormat");if(c.match(/[DM]/)){var e=function(f){for(var h=0,i=0,g=0;gh){h=f[g].length;i=g}return i};b.setMonth(e(this._get(a, -c.match(/MM/)?"monthNames":"monthNamesShort")));b.setDate(e(this._get(a,c.match(/DD/)?"dayNames":"dayNamesShort"))+20-b.getDay())}a.input.attr("size",this._formatDate(a,b).length)}},_inlineDatepicker:function(a,b){var c=d(a);if(!c.hasClass(this.markerClassName)){c.addClass(this.markerClassName).append(b.dpDiv).bind("setData.datepicker",function(e,f,h){b.settings[f]=h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});d.data(a,"datepicker",b);this._setDate(b,this._getDefaultDate(b), -true);this._updateDatepicker(b);this._updateAlternate(b)}},_dialogDatepicker:function(a,b,c,e,f){a=this._dialogInst;if(!a){a="dp"+ ++this.uuid;this._dialogInput=d('');this._dialogInput.keydown(this._doKeyDown);d("body").append(this._dialogInput);a=this._dialogInst=this._newInst(this._dialogInput,false);a.settings={};d.data(this._dialogInput[0],"datepicker",a)}E(a.settings,e||{});b=b&&b.constructor==Date? -this._formatDate(a,b):b;this._dialogInput.val(b);this._pos=f?f.length?f:[f.pageX,f.pageY]:null;if(!this._pos)this._pos=[document.documentElement.clientWidth/2-100+(document.documentElement.scrollLeft||document.body.scrollLeft),document.documentElement.clientHeight/2-150+(document.documentElement.scrollTop||document.body.scrollTop)];this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px");a.settings.onSelect=c;this._inDialog=true;this.dpDiv.addClass(this._dialogClass);this._showDatepicker(this._dialogInput[0]); -d.blockUI&&d.blockUI(this.dpDiv);d.data(this._dialogInput[0],"datepicker",a);return this},_destroyDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();d.removeData(a,"datepicker");if(e=="input"){c.append.remove();c.trigger.remove();b.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)}else if(e=="div"||e=="span")b.removeClass(this.markerClassName).empty()}}, -_enableDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();if(e=="input"){a.disabled=false;c.trigger.filter("button").each(function(){this.disabled=false}).end().filter("img").css({opacity:"1.0",cursor:""})}else if(e=="div"||e=="span")b.children("."+this._inlineClass).children().removeClass("ui-state-disabled");this._disabledInputs=d.map(this._disabledInputs,function(f){return f==a?null:f})}},_disableDatepicker:function(a){var b= -d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();if(e=="input"){a.disabled=true;c.trigger.filter("button").each(function(){this.disabled=true}).end().filter("img").css({opacity:"0.5",cursor:"default"})}else if(e=="div"||e=="span")b.children("."+this._inlineClass).children().addClass("ui-state-disabled");this._disabledInputs=d.map(this._disabledInputs,function(f){return f==a?null:f});this._disabledInputs[this._disabledInputs.length]=a}},_isDisabledDatepicker:function(a){if(!a)return false; -for(var b=0;b-1}},_doKeyUp:function(a){a=d.datepicker._getInst(a.target);if(a.input.val()!=a.lastVal)try{if(d.datepicker.parseDate(d.datepicker._get(a,"dateFormat"),a.input?a.input.val():null,d.datepicker._getFormatConfig(a))){d.datepicker._setDateFromField(a);d.datepicker._updateAlternate(a);d.datepicker._updateDatepicker(a)}}catch(b){d.datepicker.log(b)}return true},_showDatepicker:function(a){a=a.target|| -a;if(a.nodeName.toLowerCase()!="input")a=d("input",a.parentNode)[0];if(!(d.datepicker._isDisabledDatepicker(a)||d.datepicker._lastInput==a)){var b=d.datepicker._getInst(a);d.datepicker._curInst&&d.datepicker._curInst!=b&&d.datepicker._curInst.dpDiv.stop(true,true);var c=d.datepicker._get(b,"beforeShow");E(b.settings,c?c.apply(a,[a,b]):{});b.lastVal=null;d.datepicker._lastInput=a;d.datepicker._setDateFromField(b);if(d.datepicker._inDialog)a.value="";if(!d.datepicker._pos){d.datepicker._pos=d.datepicker._findPos(a); -d.datepicker._pos[1]+=a.offsetHeight}var e=false;d(a).parents().each(function(){e|=d(this).css("position")=="fixed";return!e});if(e&&d.browser.opera){d.datepicker._pos[0]-=document.documentElement.scrollLeft;d.datepicker._pos[1]-=document.documentElement.scrollTop}c={left:d.datepicker._pos[0],top:d.datepicker._pos[1]};d.datepicker._pos=null;b.dpDiv.css({position:"absolute",display:"block",top:"-1000px"});d.datepicker._updateDatepicker(b);c=d.datepicker._checkOffset(b,c,e);b.dpDiv.css({position:d.datepicker._inDialog&& -d.blockUI?"static":e?"fixed":"absolute",display:"none",left:c.left+"px",top:c.top+"px"});if(!b.inline){c=d.datepicker._get(b,"showAnim");var f=d.datepicker._get(b,"duration"),h=function(){d.datepicker._datepickerShowing=true;var i=d.datepicker._getBorders(b.dpDiv);b.dpDiv.find("iframe.ui-datepicker-cover").css({left:-i[0],top:-i[1],width:b.dpDiv.outerWidth(),height:b.dpDiv.outerHeight()})};b.dpDiv.zIndex(d(a).zIndex()+1);d.effects&&d.effects[c]?b.dpDiv.show(c,d.datepicker._get(b,"showOptions"),f, -h):b.dpDiv[c||"show"](c?f:null,h);if(!c||!f)h();b.input.is(":visible")&&!b.input.is(":disabled")&&b.input.focus();d.datepicker._curInst=b}}},_updateDatepicker:function(a){var b=this,c=d.datepicker._getBorders(a.dpDiv);a.dpDiv.empty().append(this._generateHTML(a)).find("iframe.ui-datepicker-cover").css({left:-c[0],top:-c[1],width:a.dpDiv.outerWidth(),height:a.dpDiv.outerHeight()}).end().find("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a").bind("mouseout",function(){d(this).removeClass("ui-state-hover"); -this.className.indexOf("ui-datepicker-prev")!=-1&&d(this).removeClass("ui-datepicker-prev-hover");this.className.indexOf("ui-datepicker-next")!=-1&&d(this).removeClass("ui-datepicker-next-hover")}).bind("mouseover",function(){if(!b._isDisabledDatepicker(a.inline?a.dpDiv.parent()[0]:a.input[0])){d(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");d(this).addClass("ui-state-hover");this.className.indexOf("ui-datepicker-prev")!=-1&&d(this).addClass("ui-datepicker-prev-hover"); -this.className.indexOf("ui-datepicker-next")!=-1&&d(this).addClass("ui-datepicker-next-hover")}}).end().find("."+this._dayOverClass+" a").trigger("mouseover").end();c=this._getNumberOfMonths(a);var e=c[1];e>1?a.dpDiv.addClass("ui-datepicker-multi-"+e).css("width",17*e+"em"):a.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");a.dpDiv[(c[0]!=1||c[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi");a.dpDiv[(this._get(a,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"); -a==d.datepicker._curInst&&d.datepicker._datepickerShowing&&a.input&&a.input.is(":visible")&&!a.input.is(":disabled")&&a.input.focus()},_getBorders:function(a){var b=function(c){return{thin:1,medium:2,thick:3}[c]||c};return[parseFloat(b(a.css("border-left-width"))),parseFloat(b(a.css("border-top-width")))]},_checkOffset:function(a,b,c){var e=a.dpDiv.outerWidth(),f=a.dpDiv.outerHeight(),h=a.input?a.input.outerWidth():0,i=a.input?a.input.outerHeight():0,g=document.documentElement.clientWidth+d(document).scrollLeft(), -k=document.documentElement.clientHeight+d(document).scrollTop();b.left-=this._get(a,"isRTL")?e-h:0;b.left-=c&&b.left==a.input.offset().left?d(document).scrollLeft():0;b.top-=c&&b.top==a.input.offset().top+i?d(document).scrollTop():0;b.left-=Math.min(b.left,b.left+e>g&&g>e?Math.abs(b.left+e-g):0);b.top-=Math.min(b.top,b.top+f>k&&k>f?Math.abs(f+i):0);return b},_findPos:function(a){for(var b=this._get(this._getInst(a),"isRTL");a&&(a.type=="hidden"||a.nodeType!=1);)a=a[b?"previousSibling":"nextSibling"]; -a=d(a).offset();return[a.left,a.top]},_hideDatepicker:function(a){var b=this._curInst;if(!(!b||a&&b!=d.data(a,"datepicker")))if(this._datepickerShowing){a=this._get(b,"showAnim");var c=this._get(b,"duration"),e=function(){d.datepicker._tidyDialog(b);this._curInst=null};d.effects&&d.effects[a]?b.dpDiv.hide(a,d.datepicker._get(b,"showOptions"),c,e):b.dpDiv[a=="slideDown"?"slideUp":a=="fadeIn"?"fadeOut":"hide"](a?c:null,e);a||e();if(a=this._get(b,"onClose"))a.apply(b.input?b.input[0]:null,[b.input?b.input.val(): -"",b]);this._datepickerShowing=false;this._lastInput=null;if(this._inDialog){this._dialogInput.css({position:"absolute",left:"0",top:"-100px"});if(d.blockUI){d.unblockUI();d("body").append(this.dpDiv)}}this._inDialog=false}},_tidyDialog:function(a){a.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(a){if(d.datepicker._curInst){a=d(a.target);a[0].id!=d.datepicker._mainDivId&&a.parents("#"+d.datepicker._mainDivId).length==0&&!a.hasClass(d.datepicker.markerClassName)&& -!a.hasClass(d.datepicker._triggerClass)&&d.datepicker._datepickerShowing&&!(d.datepicker._inDialog&&d.blockUI)&&d.datepicker._hideDatepicker()}},_adjustDate:function(a,b,c){a=d(a);var e=this._getInst(a[0]);if(!this._isDisabledDatepicker(a[0])){this._adjustInstDate(e,b+(c=="M"?this._get(e,"showCurrentAtPos"):0),c);this._updateDatepicker(e)}},_gotoToday:function(a){a=d(a);var b=this._getInst(a[0]);if(this._get(b,"gotoCurrent")&&b.currentDay){b.selectedDay=b.currentDay;b.drawMonth=b.selectedMonth=b.currentMonth; -b.drawYear=b.selectedYear=b.currentYear}else{var c=new Date;b.selectedDay=c.getDate();b.drawMonth=b.selectedMonth=c.getMonth();b.drawYear=b.selectedYear=c.getFullYear()}this._notifyChange(b);this._adjustDate(a)},_selectMonthYear:function(a,b,c){a=d(a);var e=this._getInst(a[0]);e._selectingMonthYear=false;e["selected"+(c=="M"?"Month":"Year")]=e["draw"+(c=="M"?"Month":"Year")]=parseInt(b.options[b.selectedIndex].value,10);this._notifyChange(e);this._adjustDate(a)},_clickMonthYear:function(a){a=this._getInst(d(a)[0]); -a.input&&a._selectingMonthYear&&!d.browser.msie&&a.input.focus();a._selectingMonthYear=!a._selectingMonthYear},_selectDay:function(a,b,c,e){var f=d(a);if(!(d(e).hasClass(this._unselectableClass)||this._isDisabledDatepicker(f[0]))){f=this._getInst(f[0]);f.selectedDay=f.currentDay=d("a",e).html();f.selectedMonth=f.currentMonth=b;f.selectedYear=f.currentYear=c;this._selectDate(a,this._formatDate(f,f.currentDay,f.currentMonth,f.currentYear))}},_clearDate:function(a){a=d(a);this._getInst(a[0]);this._selectDate(a, -"")},_selectDate:function(a,b){a=this._getInst(d(a)[0]);b=b!=null?b:this._formatDate(a);a.input&&a.input.val(b);this._updateAlternate(a);var c=this._get(a,"onSelect");if(c)c.apply(a.input?a.input[0]:null,[b,a]);else a.input&&a.input.trigger("change");if(a.inline)this._updateDatepicker(a);else{this._hideDatepicker();this._lastInput=a.input[0];typeof a.input[0]!="object"&&a.input.focus();this._lastInput=null}},_updateAlternate:function(a){var b=this._get(a,"altField");if(b){var c=this._get(a,"altFormat")|| -this._get(a,"dateFormat"),e=this._getDate(a),f=this.formatDate(c,e,this._getFormatConfig(a));d(b).each(function(){d(this).val(f)})}},noWeekends:function(a){a=a.getDay();return[a>0&&a<6,""]},iso8601Week:function(a){a=new Date(a.getTime());a.setDate(a.getDate()+4-(a.getDay()||7));var b=a.getTime();a.setMonth(0);a.setDate(1);return Math.floor(Math.round((b-a)/864E5)/7)+1},parseDate:function(a,b,c){if(a==null||b==null)throw"Invalid arguments";b=typeof b=="object"?b.toString():b+"";if(b=="")return null; -for(var e=(c?c.shortYearCutoff:null)||this._defaults.shortYearCutoff,f=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,h=(c?c.dayNames:null)||this._defaults.dayNames,i=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort,g=(c?c.monthNames:null)||this._defaults.monthNames,k=c=-1,l=-1,u=-1,j=false,o=function(p){(p=z+1-1){k=1;l=u;do{e=this._getDaysInMonth(c,k-1);if(l<=e)break;k++;l-=e}while(1)}v=this._daylightSavingAdjust(new Date(c, -k-1,l));if(v.getFullYear()!=c||v.getMonth()+1!=k||v.getDate()!=l)throw"Invalid date";return v},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*24*60*60*1E7,formatDate:function(a,b,c){if(!b)return"";var e=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,f=(c? -c.dayNames:null)||this._defaults.dayNames,h=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort;c=(c?c.monthNames:null)||this._defaults.monthNames;var i=function(o){(o=j+112?a.getHours()+2:0);return a},_setDate:function(a,b,c){var e=!b,f=a.selectedMonth,h=a.selectedYear;b=this._restrictMinMax(a,this._determineDate(a,b,new Date));a.selectedDay=a.currentDay=b.getDate();a.drawMonth=a.selectedMonth=a.currentMonth=b.getMonth();a.drawYear=a.selectedYear=a.currentYear=b.getFullYear();if((f!=a.selectedMonth||h!=a.selectedYear)&&!c)this._notifyChange(a);this._adjustInstDate(a);if(a.input)a.input.val(e?"":this._formatDate(a))},_getDate:function(a){return!a.currentYear|| -a.input&&a.input.val()==""?null:this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay))},_generateHTML:function(a){var b=new Date;b=this._daylightSavingAdjust(new Date(b.getFullYear(),b.getMonth(),b.getDate()));var c=this._get(a,"isRTL"),e=this._get(a,"showButtonPanel"),f=this._get(a,"hideIfNoPrevNext"),h=this._get(a,"navigationAsDateFormat"),i=this._getNumberOfMonths(a),g=this._get(a,"showCurrentAtPos"),k=this._get(a,"stepMonths"),l=i[0]!=1||i[1]!=1,u=this._daylightSavingAdjust(!a.currentDay? -new Date(9999,9,9):new Date(a.currentYear,a.currentMonth,a.currentDay)),j=this._getMinMaxDate(a,"min"),o=this._getMinMaxDate(a,"max");g=a.drawMonth-g;var m=a.drawYear;if(g<0){g+=12;m--}if(o){var n=this._daylightSavingAdjust(new Date(o.getFullYear(),o.getMonth()-i[0]*i[1]+1,o.getDate()));for(n=j&&nn;){g--;if(g<0){g=11;m--}}}a.drawMonth=g;a.drawYear=m;n=this._get(a,"prevText");n=!h?n:this.formatDate(n,this._daylightSavingAdjust(new Date(m,g-k,1)),this._getFormatConfig(a)); -n=this._canAdjustMonth(a,-1,m,g)?''+n+"":f?"":''+n+"";var r=this._get(a,"nextText");r=!h?r:this.formatDate(r,this._daylightSavingAdjust(new Date(m, -g+k,1)),this._getFormatConfig(a));f=this._canAdjustMonth(a,+1,m,g)?''+r+"":f?"":''+r+"";k=this._get(a,"currentText");r=this._get(a,"gotoCurrent")&& -a.currentDay?u:b;k=!h?k:this.formatDate(k,r,this._getFormatConfig(a));h=!a.inline?'":"";e=e?'
                      '+(c?h:"")+(this._isInRange(a,r)?'":"")+(c?"":h)+"
                      ":"";h=parseInt(this._get(a,"firstDay"),10);h=isNaN(h)?0:h;k=this._get(a,"showWeek");r=this._get(a,"dayNames");this._get(a,"dayNamesShort");var s=this._get(a,"dayNamesMin"),z=this._get(a,"monthNames"),v=this._get(a,"monthNamesShort"),p=this._get(a,"beforeShowDay"),w=this._get(a,"showOtherMonths"),G=this._get(a,"selectOtherMonths");this._get(a,"calculateWeek");for(var K=this._getDefaultDate(a),H="",C=0;C1)switch(D){case 0:x+=" ui-datepicker-group-first";t=" ui-corner-"+(c?"right":"left");break;case i[1]-1:x+=" ui-datepicker-group-last";t=" ui-corner-"+(c?"left":"right");break;default:x+=" ui-datepicker-group-middle";t="";break}x+='">'}x+='
                      '+(/all|left/.test(t)&&C==0?c? -f:n:"")+(/all|right/.test(t)&&C==0?c?n:f:"")+this._generateMonthYearHeader(a,g,m,j,o,C>0||D>0,z,v)+'
                      ';var A=k?'":"";for(t=0;t<7;t++){var q=(t+h)%7;A+="=5?' class="ui-datepicker-week-end"':"")+'>'+s[q]+""}x+=A+"";A=this._getDaysInMonth(m,g);if(m==a.selectedYear&&g==a.selectedMonth)a.selectedDay=Math.min(a.selectedDay, -A);t=(this._getFirstDayOfMonth(m,g)-h+7)%7;A=l?6:Math.ceil((t+A)/7);q=this._daylightSavingAdjust(new Date(m,g,1-t));for(var N=0;N";var O=!k?"":'";for(t=0;t<7;t++){var F=p?p.apply(a.input?a.input[0]:null,[q]):[true,""],B=q.getMonth()!=g,I=B&&!G||!F[0]||j&&qo;O+='";q.setDate(q.getDate()+1);q=this._daylightSavingAdjust(q)}x+=O+""}g++;if(g>11){g=0;m++}x+="
                      '+this._get(a,"weekHeader")+"
                      '+this._get(a,"calculateWeek")(q)+""+(B&&!w?" ":I?''+q.getDate()+ -"":''+q.getDate()+"")+"
                      "+(l?""+(i[0]>0&&D==i[1]-1?'
                      ':""):"");L+=x}H+=L}H+=e+(d.browser.msie&&parseInt(d.browser.version,10)<7&&!a.inline?'': -"");a._keyEvent=false;return H},_generateMonthYearHeader:function(a,b,c,e,f,h,i,g){var k=this._get(a,"changeMonth"),l=this._get(a,"changeYear"),u=this._get(a,"showMonthAfterYear"),j='
                      ',o="";if(h||!k)o+=''+i[b]+"";else{i=e&&e.getFullYear()==c;var m=f&&f.getFullYear()==c;o+='"}u||(j+=o+(h||!(k&&l)?" ":""));if(h||!l)j+=''+c+"";else{g=this._get(a,"yearRange").split(":");var r=(new Date).getFullYear();i=function(s){s=s.match(/c[+-].*/)?c+parseInt(s.substring(1),10):s.match(/[+-].*/)?r+parseInt(s,10):parseInt(s,10);return isNaN(s)?r:s};b=i(g[0]);g=Math.max(b, -i(g[1]||""));b=e?Math.max(b,e.getFullYear()):b;g=f?Math.min(g,f.getFullYear()):g;for(j+='"}j+=this._get(a,"yearSuffix");if(u)j+=(h||!(k&&l)?" ":"")+o;j+="
                      ";return j},_adjustInstDate:function(a,b,c){var e= -a.drawYear+(c=="Y"?b:0),f=a.drawMonth+(c=="M"?b:0);b=Math.min(a.selectedDay,this._getDaysInMonth(e,f))+(c=="D"?b:0);e=this._restrictMinMax(a,this._daylightSavingAdjust(new Date(e,f,b)));a.selectedDay=e.getDate();a.drawMonth=a.selectedMonth=e.getMonth();a.drawYear=a.selectedYear=e.getFullYear();if(c=="M"||c=="Y")this._notifyChange(a)},_restrictMinMax:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");b=c&&ba?a:b},_notifyChange:function(a){var b=this._get(a, -"onChangeMonthYear");if(b)b.apply(a.input?a.input[0]:null,[a.selectedYear,a.selectedMonth+1,a])},_getNumberOfMonths:function(a){a=this._get(a,"numberOfMonths");return a==null?[1,1]:typeof a=="number"?[1,a]:a},_getMinMaxDate:function(a,b){return this._determineDate(a,this._get(a,b+"Date"),null)},_getDaysInMonth:function(a,b){return 32-(new Date(a,b,32)).getDate()},_getFirstDayOfMonth:function(a,b){return(new Date(a,b,1)).getDay()},_canAdjustMonth:function(a,b,c,e){var f=this._getNumberOfMonths(a); -c=this._daylightSavingAdjust(new Date(c,e+(b<0?b:f[0]*f[1]),1));b<0&&c.setDate(this._getDaysInMonth(c.getFullYear(),c.getMonth()));return this._isInRange(a,c)},_isInRange:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");return(!c||b.getTime()>=c.getTime())&&(!a||b.getTime()<=a.getTime())},_getFormatConfig:function(a){var b=this._get(a,"shortYearCutoff");b=typeof b!="string"?b:(new Date).getFullYear()%100+parseInt(b,10);return{shortYearCutoff:b,dayNamesShort:this._get(a, -"dayNamesShort"),dayNames:this._get(a,"dayNames"),monthNamesShort:this._get(a,"monthNamesShort"),monthNames:this._get(a,"monthNames")}},_formatDate:function(a,b,c,e){if(!b){a.currentDay=a.selectedDay;a.currentMonth=a.selectedMonth;a.currentYear=a.selectedYear}b=b?typeof b=="object"?b:this._daylightSavingAdjust(new Date(e,c,b)):this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay));return this.formatDate(this._get(a,"dateFormat"),b,this._getFormatConfig(a))}});d.fn.datepicker= -function(a){if(!d.datepicker.initialized){d(document).mousedown(d.datepicker._checkExternalClick).find("body").append(d.datepicker.dpDiv);d.datepicker.initialized=true}var b=Array.prototype.slice.call(arguments,1);if(typeof a=="string"&&(a=="isDisabled"||a=="getDate"||a=="widget"))return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b));if(a=="option"&&arguments.length==2&&typeof arguments[1]=="string")return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b)); -return this.each(function(){typeof a=="string"?d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this].concat(b)):d.datepicker._attachDatepicker(this,a)})};d.datepicker=new J;d.datepicker.initialized=false;d.datepicker.uuid=(new Date).getTime();d.datepicker.version="1.8.1";window["DP_jQuery_"+y]=d})(jQuery); -;/* - * jQuery UI Progressbar 1.8.1 - * - * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Progressbar - * - * Depends: - * jquery.ui.core.js - * jquery.ui.widget.js - */ -(function(b){b.widget("ui.progressbar",{options:{value:0},_create:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this._valueMin(),"aria-valuemax":this._valueMax(),"aria-valuenow":this._value()});this.valueDiv=b("
                      ").appendTo(this.element);this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"); -this.valueDiv.remove();b.Widget.prototype.destroy.apply(this,arguments)},value:function(a){if(a===undefined)return this._value();this._setOption("value",a);return this},_setOption:function(a,c){switch(a){case "value":this.options.value=c;this._refreshValue();this._trigger("change");break}b.Widget.prototype._setOption.apply(this,arguments)},_value:function(){var a=this.options.value;if(typeof a!=="number")a=0;if(athis._valueMax())a=this._valueMax();return a}, -_valueMin:function(){return 0},_valueMax:function(){return 100},_refreshValue:function(){var a=this.value();this.valueDiv[a===this._valueMax()?"addClass":"removeClass"]("ui-corner-right").width(a+"%");this.element.attr("aria-valuenow",a)}});b.extend(b.ui.progressbar,{version:"1.8.1"})})(jQuery); -;/* - * jQuery UI Effects 1.8.1 - * - * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Effects/ - */ -jQuery.effects||function(f){function k(c){var a;if(c&&c.constructor==Array&&c.length==3)return c;if(a=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(c))return[parseInt(a[1],10),parseInt(a[2],10),parseInt(a[3],10)];if(a=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(c))return[parseFloat(a[1])*2.55,parseFloat(a[2])*2.55,parseFloat(a[3])*2.55];if(a=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(c))return[parseInt(a[1], -16),parseInt(a[2],16),parseInt(a[3],16)];if(a=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(c))return[parseInt(a[1]+a[1],16),parseInt(a[2]+a[2],16),parseInt(a[3]+a[3],16)];if(/rgba\(0, 0, 0, 0\)/.exec(c))return l.transparent;return l[f.trim(c).toLowerCase()]}function q(c,a){var b;do{b=f.curCSS(c,a);if(b!=""&&b!="transparent"||f.nodeName(c,"body"))break;a="backgroundColor"}while(c=c.parentNode);return k(b)}function m(){var c=document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle, -a={},b,d;if(c&&c.length&&c[0]&&c[c[0]])for(var e=c.length;e--;){b=c[e];if(typeof c[b]=="string"){d=b.replace(/\-(\w)/g,function(g,h){return h.toUpperCase()});a[d]=c[b]}}else for(b in c)if(typeof c[b]==="string")a[b]=c[b];return a}function n(c){var a,b;for(a in c){b=c[a];if(b==null||f.isFunction(b)||a in r||/scrollbar/.test(a)||!/color/i.test(a)&&isNaN(parseFloat(b)))delete c[a]}return c}function s(c,a){var b={_:0},d;for(d in a)if(c[d]!=a[d])b[d]=a[d];return b}function j(c,a,b,d){if(typeof c=="object"){d= -a;b=null;a=c;c=a.effect}if(f.isFunction(a)){d=a;b=null;a={}}if(f.isFunction(b)){d=b;b=null}if(typeof a=="number"||f.fx.speeds[a]){d=b;b=a;a={}}a=a||{};b=b||a.duration;b=f.fx.off?0:typeof b=="number"?b:f.fx.speeds[b]||f.fx.speeds._default;d=d||a.complete;return[c,a,b,d]}f.effects={};f.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor","borderTopColor","color","outlineColor"],function(c,a){f.fx.step[a]=function(b){if(!b.colorInit){b.start=q(b.elem,a);b.end=k(b.end);b.colorInit= -true}b.elem.style[a]="rgb("+Math.max(Math.min(parseInt(b.pos*(b.end[0]-b.start[0])+b.start[0],10),255),0)+","+Math.max(Math.min(parseInt(b.pos*(b.end[1]-b.start[1])+b.start[1],10),255),0)+","+Math.max(Math.min(parseInt(b.pos*(b.end[2]-b.start[2])+b.start[2],10),255),0)+")"}});var l={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189, -183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255, -165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]},o=["add","remove","toggle"],r={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};f.effects.animateClass=function(c,a,b,d){if(f.isFunction(b)){d=b;b=null}return this.each(function(){var e=f(this),g=e.attr("style")||" ",h=n(m.call(this)),p,t=e.attr("className");f.each(o,function(u, -i){c[i]&&e[i+"Class"](c[i])});p=n(m.call(this));e.attr("className",t);e.animate(s(h,p),a,b,function(){f.each(o,function(u,i){c[i]&&e[i+"Class"](c[i])});if(typeof e.attr("style")=="object"){e.attr("style").cssText="";e.attr("style").cssText=g}else e.attr("style",g);d&&d.apply(this,arguments)})})};f.fn.extend({_addClass:f.fn.addClass,addClass:function(c,a,b,d){return a?f.effects.animateClass.apply(this,[{add:c},a,b,d]):this._addClass(c)},_removeClass:f.fn.removeClass,removeClass:function(c,a,b,d){return a? -f.effects.animateClass.apply(this,[{remove:c},a,b,d]):this._removeClass(c)},_toggleClass:f.fn.toggleClass,toggleClass:function(c,a,b,d,e){return typeof a=="boolean"||a===undefined?b?f.effects.animateClass.apply(this,[a?{add:c}:{remove:c},b,d,e]):this._toggleClass(c,a):f.effects.animateClass.apply(this,[{toggle:c},a,b,d])},switchClass:function(c,a,b,d,e){return f.effects.animateClass.apply(this,[{add:a,remove:c},b,d,e])}});f.extend(f.effects,{version:"1.8.1",save:function(c,a){for(var b=0;b").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0});c.wrap(b);b=c.parent();if(c.css("position")=="static"){b.css({position:"relative"});c.css({position:"relative"})}else{f.extend(a,{position:c.css("position"),zIndex:c.css("z-index")});f.each(["top","left","bottom","right"],function(d,e){a[e]=c.css(e);if(isNaN(parseInt(a[e],10)))a[e]="auto"}); -c.css({position:"relative",top:0,left:0})}return b.css(a).show()},removeWrapper:function(c){if(c.parent().is(".ui-effects-wrapper"))return c.parent().replaceWith(c);return c},setTransition:function(c,a,b,d){d=d||{};f.each(a,function(e,g){unit=c.cssUnit(g);if(unit[0]>0)d[g]=unit[0]*b+unit[1]});return d}});f.fn.extend({effect:function(c){var a=j.apply(this,arguments);a={options:a[1],duration:a[2],callback:a[3]};var b=f.effects[c];return b&&!f.fx.off?b.call(this,a):this},_show:f.fn.show,show:function(c){if(!c|| -typeof c=="number"||f.fx.speeds[c])return this._show.apply(this,arguments);else{var a=j.apply(this,arguments);a[1].mode="show";return this.effect.apply(this,a)}},_hide:f.fn.hide,hide:function(c){if(!c||typeof c=="number"||f.fx.speeds[c])return this._hide.apply(this,arguments);else{var a=j.apply(this,arguments);a[1].mode="hide";return this.effect.apply(this,a)}},__toggle:f.fn.toggle,toggle:function(c){if(!c||typeof c=="number"||f.fx.speeds[c]||typeof c=="boolean"||f.isFunction(c))return this.__toggle.apply(this, -arguments);else{var a=j.apply(this,arguments);a[1].mode="toggle";return this.effect.apply(this,a)}},cssUnit:function(c){var a=this.css(c),b=[];f.each(["em","px","%","pt"],function(d,e){if(a.indexOf(e)>0)b=[parseFloat(a),e]});return b}});f.easing.jswing=f.easing.swing;f.extend(f.easing,{def:"easeOutQuad",swing:function(c,a,b,d,e){return f.easing[f.easing.def](c,a,b,d,e)},easeInQuad:function(c,a,b,d,e){return d*(a/=e)*a+b},easeOutQuad:function(c,a,b,d,e){return-d*(a/=e)*(a-2)+b},easeInOutQuad:function(c, -a,b,d,e){if((a/=e/2)<1)return d/2*a*a+b;return-d/2*(--a*(a-2)-1)+b},easeInCubic:function(c,a,b,d,e){return d*(a/=e)*a*a+b},easeOutCubic:function(c,a,b,d,e){return d*((a=a/e-1)*a*a+1)+b},easeInOutCubic:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a+b;return d/2*((a-=2)*a*a+2)+b},easeInQuart:function(c,a,b,d,e){return d*(a/=e)*a*a*a+b},easeOutQuart:function(c,a,b,d,e){return-d*((a=a/e-1)*a*a*a-1)+b},easeInOutQuart:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a+b;return-d/2*((a-=2)*a*a*a-2)+ -b},easeInQuint:function(c,a,b,d,e){return d*(a/=e)*a*a*a*a+b},easeOutQuint:function(c,a,b,d,e){return d*((a=a/e-1)*a*a*a*a+1)+b},easeInOutQuint:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a*a+b;return d/2*((a-=2)*a*a*a*a+2)+b},easeInSine:function(c,a,b,d,e){return-d*Math.cos(a/e*(Math.PI/2))+d+b},easeOutSine:function(c,a,b,d,e){return d*Math.sin(a/e*(Math.PI/2))+b},easeInOutSine:function(c,a,b,d,e){return-d/2*(Math.cos(Math.PI*a/e)-1)+b},easeInExpo:function(c,a,b,d,e){return a==0?b:d*Math.pow(2, -10*(a/e-1))+b},easeOutExpo:function(c,a,b,d,e){return a==e?b+d:d*(-Math.pow(2,-10*a/e)+1)+b},easeInOutExpo:function(c,a,b,d,e){if(a==0)return b;if(a==e)return b+d;if((a/=e/2)<1)return d/2*Math.pow(2,10*(a-1))+b;return d/2*(-Math.pow(2,-10*--a)+2)+b},easeInCirc:function(c,a,b,d,e){return-d*(Math.sqrt(1-(a/=e)*a)-1)+b},easeOutCirc:function(c,a,b,d,e){return d*Math.sqrt(1-(a=a/e-1)*a)+b},easeInOutCirc:function(c,a,b,d,e){if((a/=e/2)<1)return-d/2*(Math.sqrt(1-a*a)-1)+b;return d/2*(Math.sqrt(1-(a-=2)* -a)+1)+b},easeInElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e)==1)return b+d;g||(g=e*0.3);if(h").css({position:"absolute",visibility:"visible",left:-f*(h/d),top:-e*(i/c)}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:h/d,height:i/c,left:g.left+f*(h/d)+(a.options.mode=="show"?(f-Math.floor(d/2))*(h/d):0),top:g.top+e*(i/c)+(a.options.mode=="show"?(e-Math.floor(c/2))*(i/c):0),opacity:a.options.mode=="show"?0:1}).animate({left:g.left+f*(h/d)+(a.options.mode=="show"?0:(f-Math.floor(d/2))*(h/d)),top:g.top+ -e*(i/c)+(a.options.mode=="show"?0:(e-Math.floor(c/2))*(i/c)),opacity:a.options.mode=="show"?1:0},a.duration||500);setTimeout(function(){a.options.mode=="show"?b.css({visibility:"visible"}):b.css({visibility:"visible"}).hide();a.callback&&a.callback.apply(b[0]);b.dequeue();j("div.ui-effects-explode").remove()},a.duration||500)})}})(jQuery); -;/* - * jQuery UI Effects Fold 1.8.1 - * - * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Effects/Fold - * - * Depends: - * jquery.effects.core.js - */ -(function(c){c.effects.fold=function(a){return this.queue(function(){var b=c(this),j=["position","top","left"],d=c.effects.setMode(b,a.options.mode||"hide"),g=a.options.size||15,h=!!a.options.horizFirst,k=a.duration?a.duration/2:c.fx.speeds._default/2;c.effects.save(b,j);b.show();var e=c.effects.createWrapper(b).css({overflow:"hidden"}),f=d=="show"!=h,l=f?["width","height"]:["height","width"];f=f?[e.width(),e.height()]:[e.height(),e.width()];var i=/([0-9]+)%/.exec(g);if(i)g=parseInt(i[1],10)/100* -f[d=="hide"?0:1];if(d=="show")e.css(h?{height:0,width:g}:{height:g,width:0});h={};i={};h[l[0]]=d=="show"?f[0]:g;i[l[1]]=d=="show"?f[1]:0;e.animate(h,k,a.options.easing).animate(i,k,a.options.easing,function(){d=="hide"&&b.hide();c.effects.restore(b,j);c.effects.removeWrapper(b);a.callback&&a.callback.apply(b[0],arguments);b.dequeue()})})}})(jQuery); -;/* - * jQuery UI Effects Highlight 1.8.1 - * - * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Effects/Highlight - * - * Depends: - * jquery.effects.core.js - */ -(function(b){b.effects.highlight=function(c){return this.queue(function(){var a=b(this),e=["backgroundImage","backgroundColor","opacity"],d=b.effects.setMode(a,c.options.mode||"show"),f={backgroundColor:a.css("backgroundColor")};if(d=="hide")f.opacity=0;b.effects.save(a,e);a.show().css({backgroundImage:"none",backgroundColor:c.options.color||"#ffff99"}).animate(f,{queue:false,duration:c.duration,easing:c.options.easing,complete:function(){d=="hide"&&a.hide();b.effects.restore(a,e);d=="show"&&!b.support.opacity&& -this.style.removeAttribute("filter");c.callback&&c.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery); -;/* - * jQuery UI Effects Pulsate 1.8.1 - * - * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Effects/Pulsate - * - * Depends: - * jquery.effects.core.js - */ -(function(d){d.effects.pulsate=function(a){return this.queue(function(){var b=d(this),c=d.effects.setMode(b,a.options.mode||"show");times=(a.options.times||5)*2-1;duration=a.duration?a.duration/2:d.fx.speeds._default/2;isVisible=b.is(":visible");animateTo=0;if(!isVisible){b.css("opacity",0).show();animateTo=1}if(c=="hide"&&isVisible||c=="show"&&!isVisible)times--;for(c=0;c').appendTo(document.body).addClass(a.options.className).css({top:d.top,left:d.left,height:b.innerHeight(),width:b.innerWidth(),position:"absolute"}).animate(c,a.duration,a.options.easing,function(){f.remove();a.callback&&a.callback.apply(b[0],arguments); -b.dequeue()})})}})(jQuery); -; + --- a/owa/modules/base/js/includes/jquery/jquery-ui-personalized-1.5.2.min.js +++ /dev/null @@ -1,478 +1,1 @@ -;(function($){$.ui={plugin:{add:function(module,option,set){var proto=$.ui[module].prototype;for(var i in set){proto.plugins[i]=proto.plugins[i]||[];proto.plugins[i].push([option,set[i]]);}},call:function(instance,name,args){var set=instance.plugins[name];if(!set){return;} -for(var i=0;i').addClass(name).css({position:'absolute',top:'-5000px',left:'-5000px',display:'block'}).appendTo('body');$.ui.cssCache[name]=!!((!(/auto|default/).test(tmp.css('cursor'))||(/^[1-9]/).test(tmp.css('height'))||(/^[1-9]/).test(tmp.css('width'))||!(/none/).test(tmp.css('backgroundImage'))||!(/transparent|rgba\(0, 0, 0, 0\)/).test(tmp.css('backgroundColor'))));try{$('body').get(0).removeChild(tmp.get(0));}catch(e){} -return $.ui.cssCache[name];},disableSelection:function(el){$(el).attr('unselectable','on').css('MozUserSelect','none');},enableSelection:function(el){$(el).attr('unselectable','off').css('MozUserSelect','');},hasScroll:function(e,a){var scroll=/top/.test(a||"top")?'scrollTop':'scrollLeft',has=false;if(e[scroll]>0)return true;e[scroll]=1;has=e[scroll]>0?true:false;e[scroll]=0;return has;}};var _remove=$.fn.remove;$.fn.remove=function(){$("*",this).add(this).triggerHandler("remove");return _remove.apply(this,arguments);};function getter(namespace,plugin,method){var methods=$[namespace][plugin].getter||[];methods=(typeof methods=="string"?methods.split(/,?\s+/):methods);return($.inArray(method,methods)!=-1);} -$.widget=function(name,prototype){var namespace=name.split(".")[0];name=name.split(".")[1];$.fn[name]=function(options){var isMethodCall=(typeof options=='string'),args=Array.prototype.slice.call(arguments,1);if(isMethodCall&&getter(namespace,name,options)){var instance=$.data(this[0],name);return(instance?instance[options].apply(instance,args):undefined);} -return this.each(function(){var instance=$.data(this,name);if(isMethodCall&&instance&&$.isFunction(instance[options])){instance[options].apply(instance,args);}else if(!isMethodCall){$.data(this,name,new $[namespace][name](this,options));}});};$[namespace][name]=function(element,options){var self=this;this.widgetName=name;this.widgetBaseClass=namespace+'-'+name;this.options=$.extend({},$.widget.defaults,$[namespace][name].defaults,options);this.element=$(element).bind('setData.'+name,function(e,key,value){return self.setData(key,value);}).bind('getData.'+name,function(e,key){return self.getData(key);}).bind('remove',function(){return self.destroy();});this.init();};$[namespace][name].prototype=$.extend({},$.widget.prototype,prototype);};$.widget.prototype={init:function(){},destroy:function(){this.element.removeData(this.widgetName);},getData:function(key){return this.options[key];},setData:function(key,value){this.options[key]=value;if(key=='disabled'){this.element[value?'addClass':'removeClass'](this.widgetBaseClass+'-disabled');}},enable:function(){this.setData('disabled',false);},disable:function(){this.setData('disabled',true);}};$.widget.defaults={disabled:false};$.ui.mouse={mouseInit:function(){var self=this;this.element.bind('mousedown.'+this.widgetName,function(e){return self.mouseDown(e);});if($.browser.msie){this._mouseUnselectable=this.element.attr('unselectable');this.element.attr('unselectable','on');} -this.started=false;},mouseDestroy:function(){this.element.unbind('.'+this.widgetName);($.browser.msie&&this.element.attr('unselectable',this._mouseUnselectable));},mouseDown:function(e){(this._mouseStarted&&this.mouseUp(e));this._mouseDownEvent=e;var self=this,btnIsLeft=(e.which==1),elIsCancel=(typeof this.options.cancel=="string"?$(e.target).parents().add(e.target).filter(this.options.cancel).length:false);if(!btnIsLeft||elIsCancel||!this.mouseCapture(e)){return true;} -this._mouseDelayMet=!this.options.delay;if(!this._mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){self._mouseDelayMet=true;},this.options.delay);} -if(this.mouseDistanceMet(e)&&this.mouseDelayMet(e)){this._mouseStarted=(this.mouseStart(e)!==false);if(!this._mouseStarted){e.preventDefault();return true;}} -this._mouseMoveDelegate=function(e){return self.mouseMove(e);};this._mouseUpDelegate=function(e){return self.mouseUp(e);};$(document).bind('mousemove.'+this.widgetName,this._mouseMoveDelegate).bind('mouseup.'+this.widgetName,this._mouseUpDelegate);return false;},mouseMove:function(e){if($.browser.msie&&!e.button){return this.mouseUp(e);} -if(this._mouseStarted){this.mouseDrag(e);return false;} -if(this.mouseDistanceMet(e)&&this.mouseDelayMet(e)){this._mouseStarted=(this.mouseStart(this._mouseDownEvent,e)!==false);(this._mouseStarted?this.mouseDrag(e):this.mouseUp(e));} -return!this._mouseStarted;},mouseUp:function(e){$(document).unbind('mousemove.'+this.widgetName,this._mouseMoveDelegate).unbind('mouseup.'+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;this.mouseStop(e);} -return false;},mouseDistanceMet:function(e){return(Math.max(Math.abs(this._mouseDownEvent.pageX-e.pageX),Math.abs(this._mouseDownEvent.pageY-e.pageY))>=this.options.distance);},mouseDelayMet:function(e){return this._mouseDelayMet;},mouseStart:function(e){},mouseDrag:function(e){},mouseStop:function(e){},mouseCapture:function(e){return true;}};$.ui.mouse.defaults={cancel:null,distance:1,delay:0};})(jQuery);(function($){$.widget("ui.draggable",$.extend({},$.ui.mouse,{init:function(){var o=this.options;if(o.helper=='original'&&!(/(relative|absolute|fixed)/).test(this.element.css('position'))) -this.element.css('position','relative');this.element.addClass('ui-draggable');(o.disabled&&this.element.addClass('ui-draggable-disabled'));this.mouseInit();},mouseStart:function(e){var o=this.options;if(this.helper||o.disabled||$(e.target).is('.ui-resizable-handle'))return false;var handle=!this.options.handle||!$(this.options.handle,this.element).length?true:false;$(this.options.handle,this.element).find("*").andSelf().each(function(){if(this==e.target)handle=true;});if(!handle)return false;if($.ui.ddmanager)$.ui.ddmanager.current=this;this.helper=$.isFunction(o.helper)?$(o.helper.apply(this.element[0],[e])):(o.helper=='clone'?this.element.clone():this.element);if(!this.helper.parents('body').length)this.helper.appendTo((o.appendTo=='parent'?this.element[0].parentNode:o.appendTo));if(this.helper[0]!=this.element[0]&&!(/(fixed|absolute)/).test(this.helper.css("position")))this.helper.css("position","absolute");this.margins={left:(parseInt(this.element.css("marginLeft"),10)||0),top:(parseInt(this.element.css("marginTop"),10)||0)};this.cssPosition=this.helper.css("position");this.offset=this.element.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};this.offset.click={left:e.pageX-this.offset.left,top:e.pageY-this.offset.top};this.offsetParent=this.helper.offsetParent();var po=this.offsetParent.offset();if(this.offsetParent[0]==document.body&&$.browser.mozilla)po={top:0,left:0};this.offset.parent={top:po.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:po.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)};var p=this.element.position();this.offset.relative=this.cssPosition=="relative"?{top:p.top-(parseInt(this.helper.css("top"),10)||0)+this.offsetParent[0].scrollTop,left:p.left-(parseInt(this.helper.css("left"),10)||0)+this.offsetParent[0].scrollLeft}:{top:0,left:0};this.originalPosition=this.generatePosition(e);this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()};if(o.cursorAt){if(o.cursorAt.left!=undefined)this.offset.click.left=o.cursorAt.left+this.margins.left;if(o.cursorAt.right!=undefined)this.offset.click.left=this.helperProportions.width-o.cursorAt.right+this.margins.left;if(o.cursorAt.top!=undefined)this.offset.click.top=o.cursorAt.top+this.margins.top;if(o.cursorAt.bottom!=undefined)this.offset.click.top=this.helperProportions.height-o.cursorAt.bottom+this.margins.top;} -if(o.containment){if(o.containment=='parent')o.containment=this.helper[0].parentNode;if(o.containment=='document'||o.containment=='window')this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,$(o.containment=='document'?document:window).width()-this.offset.relative.left-this.offset.parent.left-this.helperProportions.width-this.margins.left-(parseInt(this.element.css("marginRight"),10)||0),($(o.containment=='document'?document:window).height()||document.body.parentNode.scrollHeight)-this.offset.relative.top-this.offset.parent.top-this.helperProportions.height-this.margins.top-(parseInt(this.element.css("marginBottom"),10)||0)];if(!(/^(document|window|parent)$/).test(o.containment)){var ce=$(o.containment)[0];var co=$(o.containment).offset();this.containment=[co.left+(parseInt($(ce).css("borderLeftWidth"),10)||0)-this.offset.relative.left-this.offset.parent.left,co.top+(parseInt($(ce).css("borderTopWidth"),10)||0)-this.offset.relative.top-this.offset.parent.top,co.left+Math.max(ce.scrollWidth,ce.offsetWidth)-(parseInt($(ce).css("borderLeftWidth"),10)||0)-this.offset.relative.left-this.offset.parent.left-this.helperProportions.width-this.margins.left-(parseInt(this.element.css("marginRight"),10)||0),co.top+Math.max(ce.scrollHeight,ce.offsetHeight)-(parseInt($(ce).css("borderTopWidth"),10)||0)-this.offset.relative.top-this.offset.parent.top-this.helperProportions.height-this.margins.top-(parseInt(this.element.css("marginBottom"),10)||0)];}} -this.propagate("start",e);this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()};if($.ui.ddmanager&&!o.dropBehaviour)$.ui.ddmanager.prepareOffsets(this,e);this.helper.addClass("ui-draggable-dragging");this.mouseDrag(e);return true;},convertPositionTo:function(d,pos){if(!pos)pos=this.position;var mod=d=="absolute"?1:-1;return{top:(pos.top -+this.offset.relative.top*mod -+this.offset.parent.top*mod --(this.cssPosition=="fixed"||(this.cssPosition=="absolute"&&this.offsetParent[0]==document.body)?0:this.offsetParent[0].scrollTop)*mod -+(this.cssPosition=="fixed"?$(document).scrollTop():0)*mod -+this.margins.top*mod),left:(pos.left -+this.offset.relative.left*mod -+this.offset.parent.left*mod --(this.cssPosition=="fixed"||(this.cssPosition=="absolute"&&this.offsetParent[0]==document.body)?0:this.offsetParent[0].scrollLeft)*mod -+(this.cssPosition=="fixed"?$(document).scrollLeft():0)*mod -+this.margins.left*mod)};},generatePosition:function(e){var o=this.options;var position={top:(e.pageY --this.offset.click.top --this.offset.relative.top --this.offset.parent.top -+(this.cssPosition=="fixed"||(this.cssPosition=="absolute"&&this.offsetParent[0]==document.body)?0:this.offsetParent[0].scrollTop) --(this.cssPosition=="fixed"?$(document).scrollTop():0)),left:(e.pageX --this.offset.click.left --this.offset.relative.left --this.offset.parent.left -+(this.cssPosition=="fixed"||(this.cssPosition=="absolute"&&this.offsetParent[0]==document.body)?0:this.offsetParent[0].scrollLeft) --(this.cssPosition=="fixed"?$(document).scrollLeft():0))};if(!this.originalPosition)return position;if(this.containment){if(position.leftthis.containment[2])position.left=this.containment[2];if(position.top>this.containment[3])position.top=this.containment[3];} -if(o.grid){var top=this.originalPosition.top+Math.round((position.top-this.originalPosition.top)/o.grid[1])*o.grid[1];position.top=this.containment?(!(topthis.containment[3])?top:(!(topthis.containment[2])?left:(!(left').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1000}).css($(this).offset()).appendTo("body");});},stop:function(e,ui){$("div.DragDropIframeFix").each(function(){this.parentNode.removeChild(this);});}});$.ui.plugin.add("draggable","scroll",{start:function(e,ui){var o=ui.options;var i=$(this).data("draggable");o.scrollSensitivity=o.scrollSensitivity||20;o.scrollSpeed=o.scrollSpeed||20;i.overflowY=function(el){do{if(/auto|scroll/.test(el.css('overflow'))||(/auto|scroll/).test(el.css('overflow-y')))return el;el=el.parent();}while(el[0].parentNode);return $(document);}(this);i.overflowX=function(el){do{if(/auto|scroll/.test(el.css('overflow'))||(/auto|scroll/).test(el.css('overflow-x')))return el;el=el.parent();}while(el[0].parentNode);return $(document);}(this);if(i.overflowY[0]!=document&&i.overflowY[0].tagName!='HTML')i.overflowYOffset=i.overflowY.offset();if(i.overflowX[0]!=document&&i.overflowX[0].tagName!='HTML')i.overflowXOffset=i.overflowX.offset();},drag:function(e,ui){var o=ui.options;var i=$(this).data("draggable");if(i.overflowY[0]!=document&&i.overflowY[0].tagName!='HTML'){if((i.overflowYOffset.top+i.overflowY[0].offsetHeight)-e.pageY=0;i--){var l=inst.snapElements[i].left,r=l+inst.snapElements[i].width,t=inst.snapElements[i].top,b=t+inst.snapElements[i].height;if(!((l-d=t&&y1<=b)||(y2>=t&&y2<=b)||(y1b))&&((x1>=l&&x1<=r)||(x2>=l&&x2<=r)||(x1r));break;default:return false;break;}};$.ui.ddmanager={current:null,droppables:[],prepareOffsets:function(t,e){var m=$.ui.ddmanager.droppables;var type=e?e.type:null;for(var i=0;i').css({position:el.css('position'),width:el.outerWidth(),height:el.outerHeight(),top:el.css('top'),left:el.css('left')}));var oel=this.element;this.element=this.element.parent();this.element.data('resizable',this);this.element.css({marginLeft:oel.css("marginLeft"),marginTop:oel.css("marginTop"),marginRight:oel.css("marginRight"),marginBottom:oel.css("marginBottom")});oel.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});if($.browser.safari&&o.preventDefault)oel.css('resize','none');o.proportionallyResize=oel.css({position:'static',zoom:1,display:'block'});this.element.css({margin:oel.css('margin')});this._proportionallyResize();} -if(!o.handles)o.handles=!$('.ui-resizable-handle',this.element).length?"e,s,se":{n:'.ui-resizable-n',e:'.ui-resizable-e',s:'.ui-resizable-s',w:'.ui-resizable-w',se:'.ui-resizable-se',sw:'.ui-resizable-sw',ne:'.ui-resizable-ne',nw:'.ui-resizable-nw'};if(o.handles.constructor==String){o.zIndex=o.zIndex||1000;if(o.handles=='all')o.handles='n,e,s,w,se,sw,ne,nw';var n=o.handles.split(",");o.handles={};var insertionsDefault={handle:'position: absolute; display: none; overflow:hidden;',n:'top: 0pt; width:100%;',e:'right: 0pt; height:100%;',s:'bottom: 0pt; width:100%;',w:'left: 0pt; height:100%;',se:'bottom: 0pt; right: 0px;',sw:'bottom: 0pt; left: 0px;',ne:'top: 0pt; right: 0px;',nw:'top: 0pt; left: 0px;'};for(var i=0;i'].join('')).css(applyZIndex);o.handles[handle]='.ui-resizable-'+handle;this.element.append(axis.css(loadDefault?allDefTheme:{}).css(o.knobHandles?allKnobTheme:{}).addClass(o.knobHandles?'ui-resizable-knob-handle':'').addClass(o.knobHandles));} -if(o.knobHandles)this.element.addClass('ui-resizable-knob').css(!$.ui.css('ui-resizable-knob')?{}:{});} -this._renderAxis=function(target){target=target||this.element;for(var i in o.handles){if(o.handles[i].constructor==String) -o.handles[i]=$(o.handles[i],this.element).show();if(o.transparent) -o.handles[i].css({opacity:0});if(this.element.is('.ui-wrapper')&&o._nodeName.match(/textarea|input|select|button/i)){var axis=$(o.handles[i],this.element),padWrapper=0;padWrapper=/sw|ne|nw|se|n|s/.test(i)?axis.outerHeight():axis.outerWidth();var padPos=['padding',/ne|nw|n/.test(i)?'Top':/se|sw|s/.test(i)?'Bottom':/^e$/.test(i)?'Right':'Left'].join("");if(!o.transparent) -target.css(padPos,padWrapper);this._proportionallyResize();} -if(!$(o.handles[i]).length)continue;}};this._renderAxis(this.element);o._handles=$('.ui-resizable-handle',self.element);if(o.disableSelection) -o._handles.each(function(i,e){$.ui.disableSelection(e);});o._handles.mouseover(function(){if(!o.resizing){if(this.className) -var axis=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);self.axis=o.axis=axis&&axis[1]?axis[1]:'se';}});if(o.autoHide){o._handles.hide();$(self.element).addClass("ui-resizable-autohide").hover(function(){$(this).removeClass("ui-resizable-autohide");o._handles.show();},function(){if(!o.resizing){$(this).addClass("ui-resizable-autohide");o._handles.hide();}});} -this.mouseInit();},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,options:this.options,originalSize:this.originalSize,originalPosition:this.originalPosition};},propagate:function(n,e){$.ui.plugin.call(this,n,[e,this.ui()]);if(n!="resize")this.element.triggerHandler(["resize",n].join(""),[e,this.ui()],this.options[n]);},destroy:function(){var el=this.element,wrapped=el.children(".ui-resizable").get(0);this.mouseDestroy();var _destroy=function(exp){$(exp).removeClass("ui-resizable ui-resizable-disabled").removeData("resizable").unbind(".resizable").find('.ui-resizable-handle').remove();};_destroy(el);if(el.is('.ui-wrapper')&&wrapped){el.parent().append($(wrapped).css({position:el.css('position'),width:el.outerWidth(),height:el.outerHeight(),top:el.css('top'),left:el.css('left')})).end().remove();_destroy(wrapped);}},mouseStart:function(e){if(this.options.disabled)return false;var handle=false;for(var i in this.options.handles){if($(this.options.handles[i])[0]==e.target)handle=true;} -if(!handle)return false;var o=this.options,iniPos=this.element.position(),el=this.element,num=function(v){return parseInt(v,10)||0;},ie6=$.browser.msie&&$.browser.version<7;o.resizing=true;o.documentScroll={top:$(document).scrollTop(),left:$(document).scrollLeft()};if(el.is('.ui-draggable')||(/absolute/).test(el.css('position'))){var sOffset=$.browser.msie&&!o.containment&&(/absolute/).test(el.css('position'))&&!(/relative/).test(el.parent().css('position'));var dscrollt=sOffset?o.documentScroll.top:0,dscrolll=sOffset?o.documentScroll.left:0;el.css({position:'absolute',top:(iniPos.top+dscrollt),left:(iniPos.left+dscrolll)});} -if($.browser.opera&&/relative/.test(el.css('position'))) -el.css({position:'relative',top:'auto',left:'auto'});this._renderProxy();var curleft=num(this.helper.css('left')),curtop=num(this.helper.css('top'));if(o.containment){curleft+=$(o.containment).scrollLeft()||0;curtop+=$(o.containment).scrollTop()||0;} -this.offset=this.helper.offset();this.position={left:curleft,top:curtop};this.size=o.helper||ie6?{width:el.outerWidth(),height:el.outerHeight()}:{width:el.width(),height:el.height()};this.originalSize=o.helper||ie6?{width:el.outerWidth(),height:el.outerHeight()}:{width:el.width(),height:el.height()};this.originalPosition={left:curleft,top:curtop};this.sizeDiff={width:el.outerWidth()-el.width(),height:el.outerHeight()-el.height()};this.originalMousePosition={left:e.pageX,top:e.pageY};o.aspectRatio=(typeof o.aspectRatio=='number')?o.aspectRatio:((this.originalSize.height/this.originalSize.width)||1);if(o.preserveCursor) -$('body').css('cursor',this.axis+'-resize');this.propagate("start",e);return true;},mouseDrag:function(e){var el=this.helper,o=this.options,props={},self=this,smp=this.originalMousePosition,a=this.axis;var dx=(e.pageX-smp.left)||0,dy=(e.pageY-smp.top)||0;var trigger=this._change[a];if(!trigger)return false;var data=trigger.apply(this,[e,dx,dy]),ie6=$.browser.msie&&$.browser.version<7,csdif=this.sizeDiff;if(o._aspectRatio||e.shiftKey) -data=this._updateRatio(data,e);data=this._respectSize(data,e);this.propagate("resize",e);el.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!o.helper&&o.proportionallyResize) -this._proportionallyResize();this._updateCache(data);this.element.triggerHandler("resize",[e,this.ui()],this.options["resize"]);return false;},mouseStop:function(e){this.options.resizing=false;var o=this.options,num=function(v){return parseInt(v,10)||0;},self=this;if(o.helper){var pr=o.proportionallyResize,ista=pr&&(/textarea/i).test(pr.get(0).nodeName),soffseth=ista&&$.ui.hasScroll(pr.get(0),'left')?0:self.sizeDiff.height,soffsetw=ista?0:self.sizeDiff.width;var s={width:(self.size.width-soffsetw),height:(self.size.height-soffseth)},left=(parseInt(self.element.css('left'),10)+(self.position.left-self.originalPosition.left))||null,top=(parseInt(self.element.css('top'),10)+(self.position.top-self.originalPosition.top))||null;if(!o.animate) -this.element.css($.extend(s,{top:top,left:left}));if(o.helper&&!o.animate)this._proportionallyResize();} -if(o.preserveCursor) -$('body').css('cursor','auto');this.propagate("stop",e);if(o.helper)this.helper.remove();return false;},_updateCache:function(data){var o=this.options;this.offset=this.helper.offset();if(data.left)this.position.left=data.left;if(data.top)this.position.top=data.top;if(data.height)this.size.height=data.height;if(data.width)this.size.width=data.width;},_updateRatio:function(data,e){var o=this.options,cpos=this.position,csize=this.size,a=this.axis;if(data.height)data.width=(csize.height/o.aspectRatio);else if(data.width)data.height=(csize.width*o.aspectRatio);if(a=='sw'){data.left=cpos.left+(csize.width-data.width);data.top=null;} -if(a=='nw'){data.top=cpos.top+(csize.height-data.height);data.left=cpos.left+(csize.width-data.width);} -return data;},_respectSize:function(data,e){var el=this.helper,o=this.options,pRatio=o._aspectRatio||e.shiftKey,a=this.axis,ismaxw=data.width&&o.maxWidth&&o.maxWidthdata.width,isminh=data.height&&o.minHeight&&o.minHeight>data.height;if(isminw)data.width=o.minWidth;if(isminh)data.height=o.minHeight;if(ismaxw)data.width=o.maxWidth;if(ismaxh)data.height=o.maxHeight;var dw=this.originalPosition.left+this.originalSize.width,dh=this.position.top+this.size.height;var cw=/sw|nw|w/.test(a),ch=/nw|ne|n/.test(a);if(isminw&&cw)data.left=dw-o.minWidth;if(ismaxw&&cw)data.left=dw-o.maxWidth;if(isminh&&ch)data.top=dh-o.minHeight;if(ismaxh&&ch)data.top=dh-o.maxHeight;var isNotwh=!data.width&&!data.height;if(isNotwh&&!data.left&&data.top)data.top=null;else if(isNotwh&&!data.top&&data.left)data.left=null;return data;},_proportionallyResize:function(){var o=this.options;if(!o.proportionallyResize)return;var prel=o.proportionallyResize,el=this.helper||this.element;if(!o.borderDif){var b=[prel.css('borderTopWidth'),prel.css('borderRightWidth'),prel.css('borderBottomWidth'),prel.css('borderLeftWidth')],p=[prel.css('paddingTop'),prel.css('paddingRight'),prel.css('paddingBottom'),prel.css('paddingLeft')];o.borderDif=$.map(b,function(v,i){var border=parseInt(v,10)||0,padding=parseInt(p[i],10)||0;return border+padding;});} -prel.css({height:(el.height()-o.borderDif[0]-o.borderDif[2])+"px",width:(el.width()-o.borderDif[1]-o.borderDif[3])+"px"});},_renderProxy:function(){var el=this.element,o=this.options;this.elementOffset=el.offset();if(o.helper){this.helper=this.helper||$('
                      ');var ie6=$.browser.msie&&$.browser.version<7,ie6offset=(ie6?1:0),pxyoffset=(ie6?2:-1);this.helper.addClass(o.helper).css({width:el.outerWidth()+pxyoffset,height:el.outerHeight()+pxyoffset,position:'absolute',left:this.elementOffset.left-ie6offset+'px',top:this.elementOffset.top-ie6offset+'px',zIndex:++o.zIndex});this.helper.appendTo("body");if(o.disableSelection) -$.ui.disableSelection(this.helper.get(0));}else{this.helper=el;}},_change:{e:function(e,dx,dy){return{width:this.originalSize.width+dx};},w:function(e,dx,dy){var o=this.options,cs=this.originalSize,sp=this.originalPosition;return{left:sp.left+dx,width:cs.width-dx};},n:function(e,dx,dy){var o=this.options,cs=this.originalSize,sp=this.originalPosition;return{top:sp.top+dy,height:cs.height-dy};},s:function(e,dx,dy){return{height:this.originalSize.height+dy};},se:function(e,dx,dy){return $.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,dx,dy]));},sw:function(e,dx,dy){return $.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,dx,dy]));},ne:function(e,dx,dy){return $.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,dx,dy]));},nw:function(e,dx,dy){return $.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,dx,dy]));}}}));$.extend($.ui.resizable,{defaults:{cancel:":input",distance:1,delay:0,preventDefault:true,transparent:false,minWidth:10,minHeight:10,aspectRatio:false,disableSelection:true,preserveCursor:true,autoHide:false,knobHandles:false}});$.ui.plugin.add("resizable","containment",{start:function(e,ui){var o=ui.options,self=$(this).data("resizable"),el=self.element;var oc=o.containment,ce=(oc instanceof $)?oc.get(0):(/parent/.test(oc))?el.parent().get(0):oc;if(!ce)return;self.containerElement=$(ce);if(/document/.test(oc)||oc==document){self.containerOffset={left:0,top:0};self.containerPosition={left:0,top:0};self.parentData={element:$(document),left:0,top:0,width:$(document).width(),height:$(document).height()||document.body.parentNode.scrollHeight};} -else{self.containerOffset=$(ce).offset();self.containerPosition=$(ce).position();self.containerSize={height:$(ce).innerHeight(),width:$(ce).innerWidth()};var co=self.containerOffset,ch=self.containerSize.height,cw=self.containerSize.width,width=($.ui.hasScroll(ce,"left")?ce.scrollWidth:cw),height=($.ui.hasScroll(ce)?ce.scrollHeight:ch);self.parentData={element:ce,left:co.left,top:co.top,width:width,height:height};}},resize:function(e,ui){var o=ui.options,self=$(this).data("resizable"),ps=self.containerSize,co=self.containerOffset,cs=self.size,cp=self.position,pRatio=o._aspectRatio||e.shiftKey,cop={top:0,left:0},ce=self.containerElement;if(ce[0]!=document&&/static/.test(ce.css('position'))) -cop=self.containerPosition;if(cp.left<(o.helper?co.left:cop.left)){self.size.width=self.size.width+(o.helper?(self.position.left-co.left):(self.position.left-cop.left));if(pRatio)self.size.height=self.size.width*o.aspectRatio;self.position.left=o.helper?co.left:cop.left;} -if(cp.top<(o.helper?co.top:0)){self.size.height=self.size.height+(o.helper?(self.position.top-co.top):self.position.top);if(pRatio)self.size.width=self.size.height/o.aspectRatio;self.position.top=o.helper?co.top:0;} -var woset=(o.helper?self.offset.left-co.left:(self.position.left-cop.left))+self.sizeDiff.width,hoset=(o.helper?self.offset.top-co.top:self.position.top)+self.sizeDiff.height;if(woset+self.size.width>=self.parentData.width){self.size.width=self.parentData.width-woset;if(pRatio)self.size.height=self.size.width*o.aspectRatio;} -if(hoset+self.size.height>=self.parentData.height){self.size.height=self.parentData.height-hoset;if(pRatio)self.size.width=self.size.height/o.aspectRatio;}},stop:function(e,ui){var o=ui.options,self=$(this).data("resizable"),cp=self.position,co=self.containerOffset,cop=self.containerPosition,ce=self.containerElement;var helper=$(self.helper),ho=helper.offset(),w=helper.innerWidth(),h=helper.innerHeight();if(o.helper&&!o.animate&&/relative/.test(ce.css('position'))) -$(this).css({left:(ho.left-co.left),top:(ho.top-co.top),width:w,height:h});if(o.helper&&!o.animate&&/static/.test(ce.css('position'))) -$(this).css({left:cop.left+(ho.left-co.left),top:cop.top+(ho.top-co.top),width:w,height:h});}});$.ui.plugin.add("resizable","grid",{resize:function(e,ui){var o=ui.options,self=$(this).data("resizable"),cs=self.size,os=self.originalSize,op=self.originalPosition,a=self.axis,ratio=o._aspectRatio||e.shiftKey;o.grid=typeof o.grid=="number"?[o.grid,o.grid]:o.grid;var ox=Math.round((cs.width-os.width)/(o.grid[0]||1))*(o.grid[0]||1),oy=Math.round((cs.height-os.height)/(o.grid[1]||1))*(o.grid[1]||1);if(/^(se|s|e)$/.test(a)){self.size.width=os.width+ox;self.size.height=os.height+oy;} -else if(/^(ne)$/.test(a)){self.size.width=os.width+ox;self.size.height=os.height+oy;self.position.top=op.top-oy;} -else if(/^(sw)$/.test(a)){self.size.width=os.width+ox;self.size.height=os.height+oy;self.position.left=op.left-ox;} -else{self.size.width=os.width+ox;self.size.height=os.height+oy;self.position.top=op.top-oy;self.position.left=op.left-ox;}}});$.ui.plugin.add("resizable","animate",{stop:function(e,ui){var o=ui.options,self=$(this).data("resizable");var pr=o.proportionallyResize,ista=pr&&(/textarea/i).test(pr.get(0).nodeName),soffseth=ista&&$.ui.hasScroll(pr.get(0),'left')?0:self.sizeDiff.height,soffsetw=ista?0:self.sizeDiff.width;var style={width:(self.size.width-soffsetw),height:(self.size.height-soffseth)},left=(parseInt(self.element.css('left'),10)+(self.position.left-self.originalPosition.left))||null,top=(parseInt(self.element.css('top'),10)+(self.position.top-self.originalPosition.top))||null;self.element.animate($.extend(style,top&&left?{top:top,left:left}:{}),{duration:o.animateDuration||"slow",easing:o.animateEasing||"swing",step:function(){var data={width:parseInt(self.element.css('width'),10),height:parseInt(self.element.css('height'),10),top:parseInt(self.element.css('top'),10),left:parseInt(self.element.css('left'),10)};if(pr)pr.css({width:data.width,height:data.height});self._updateCache(data);self.propagate("animate",e);}});}});$.ui.plugin.add("resizable","ghost",{start:function(e,ui){var o=ui.options,self=$(this).data("resizable"),pr=o.proportionallyResize,cs=self.size;if(!pr)self.ghost=self.element.clone();else self.ghost=pr.clone();self.ghost.css({opacity:.25,display:'block',position:'relative',height:cs.height,width:cs.width,margin:0,left:0,top:0}).addClass('ui-resizable-ghost').addClass(typeof o.ghost=='string'?o.ghost:'');self.ghost.appendTo(self.helper);},resize:function(e,ui){var o=ui.options,self=$(this).data("resizable"),pr=o.proportionallyResize;if(self.ghost)self.ghost.css({position:'relative',height:self.size.height,width:self.size.width});},stop:function(e,ui){var o=ui.options,self=$(this).data("resizable"),pr=o.proportionallyResize;if(self.ghost&&self.helper)self.helper.get(0).removeChild(self.ghost.get(0));}});$.ui.plugin.add("resizable","alsoResize",{start:function(e,ui){var o=ui.options,self=$(this).data("resizable"),_store=function(exp){$(exp).each(function(){$(this).data("resizable-alsoresize",{width:parseInt($(this).width(),10),height:parseInt($(this).height(),10),left:parseInt($(this).css('left'),10),top:parseInt($(this).css('top'),10)});});};if(typeof(o.alsoResize)=='object'){if(o.alsoResize.length){o.alsoResize=o.alsoResize[0];_store(o.alsoResize);} -else{$.each(o.alsoResize,function(exp,c){_store(exp);});}}else{_store(o.alsoResize);}},resize:function(e,ui){var o=ui.options,self=$(this).data("resizable"),os=self.originalSize,op=self.originalPosition;var delta={height:(self.size.height-os.height)||0,width:(self.size.width-os.width)||0,top:(self.position.top-op.top)||0,left:(self.position.left-op.left)||0},_alsoResize=function(exp,c){$(exp).each(function(){var start=$(this).data("resizable-alsoresize"),style={},css=c&&c.length?c:['width','height','top','left'];$.each(css||['width','height','top','left'],function(i,prop){var sum=(start[prop]||0)+(delta[prop]||0);if(sum&&sum>=0) -style[prop]=sum||null;});$(this).css(style);});};if(typeof(o.alsoResize)=='object'){$.each(o.alsoResize,function(exp,c){_alsoResize(exp,c);});}else{_alsoResize(o.alsoResize);}},stop:function(e,ui){$(this).removeData("resizable-alsoresize-start");}});})(jQuery);(function($){$.widget("ui.selectable",$.extend({},$.ui.mouse,{init:function(){var self=this;this.element.addClass("ui-selectable");this.dragged=false;var selectees;this.refresh=function(){selectees=$(self.options.filter,self.element[0]);selectees.each(function(){var $this=$(this);var pos=$this.offset();$.data(this,"selectable-item",{element:this,$element:$this,left:pos.left,top:pos.top,right:pos.left+$this.width(),bottom:pos.top+$this.height(),startselected:false,selected:$this.hasClass('ui-selected'),selecting:$this.hasClass('ui-selecting'),unselecting:$this.hasClass('ui-unselecting')});});};this.refresh();this.selectees=selectees.addClass("ui-selectee");this.mouseInit();this.helper=$(document.createElement('div')).css({border:'1px dotted black'});},toggle:function(){if(this.options.disabled){this.enable();}else{this.disable();}},destroy:function(){this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable");this.mouseDestroy();},mouseStart:function(e){var self=this;this.opos=[e.pageX,e.pageY];if(this.options.disabled) -return;var options=this.options;this.selectees=$(options.filter,this.element[0]);this.element.triggerHandler("selectablestart",[e,{"selectable":this.element[0],"options":options}],options.start);$('body').append(this.helper);this.helper.css({"z-index":100,"position":"absolute","left":e.clientX,"top":e.clientY,"width":0,"height":0});if(options.autoRefresh){this.refresh();} -this.selectees.filter('.ui-selected').each(function(){var selectee=$.data(this,"selectable-item");selectee.startselected=true;if(!e.ctrlKey){selectee.$element.removeClass('ui-selected');selectee.selected=false;selectee.$element.addClass('ui-unselecting');selectee.unselecting=true;self.element.triggerHandler("selectableunselecting",[e,{selectable:self.element[0],unselecting:selectee.element,options:options}],options.unselecting);}});var isSelectee=false;$(e.target).parents().andSelf().each(function(){if($.data(this,"selectable-item"))isSelectee=true;});return this.options.keyboard?!isSelectee:true;},mouseDrag:function(e){var self=this;this.dragged=true;if(this.options.disabled) -return;var options=this.options;var x1=this.opos[0],y1=this.opos[1],x2=e.pageX,y2=e.pageY;if(x1>x2){var tmp=x2;x2=x1;x1=tmp;} -if(y1>y2){var tmp=y2;y2=y1;y1=tmp;} -this.helper.css({left:x1,top:y1,width:x2-x1,height:y2-y1});this.selectees.each(function(){var selectee=$.data(this,"selectable-item");if(!selectee||selectee.element==self.element[0]) -return;var hit=false;if(options.tolerance=='touch'){hit=(!(selectee.left>x2||selectee.righty2||selectee.bottomx1&&selectee.righty1&&selectee.bottomitem[this.floating?'width':'height'])){return(y1+this.offset.click.top>t&&y1+this.offset.click.topl&&x1+this.offset.click.leftitem[this.floating?'width':'height'])){if(!(y1+this.offset.click.top>t&&y1+this.offset.click.topl&&x1+this.offset.click.leftl&&x1+this.offset.click.leftl+item.width/2&&x1+this.offset.click.leftt&&y1+this.offset.click.topt+item.height/2&&y1+this.offset.click.topl&&x1r)return 1;}else{if(y2>t&&y1b)return 2;}} -return false;},refresh:function(){this.refreshItems();this.refreshPositions();},refreshItems:function(){this.items=[];this.containers=[this];var items=this.items;var self=this;var queries=[[$.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):$(this.options.items,this.element),this]];if(this.options.connectWith){for(var i=this.options.connectWith.length-1;i>=0;i--){var cur=$(this.options.connectWith[i]);for(var j=cur.length-1;j>=0;j--){var inst=$.data(cur[j],'sortable');if(inst&&!inst.options.disabled){queries.push([$.isFunction(inst.options.items)?inst.options.items.call(inst.element):$(inst.options.items,inst.element),inst]);this.containers.push(inst);}};};} -for(var i=queries.length-1;i>=0;i--){queries[i][0].each(function(){$.data(this,'sortable-item',queries[i][1]);items.push({item:$(this),instance:queries[i][1],width:0,height:0,left:0,top:0});});};},refreshPositions:function(fast){if(this.offsetParent){var po=this.offsetParent.offset();this.offset.parent={top:po.top+this.offsetParentBorders.top,left:po.left+this.offsetParentBorders.left};} -for(var i=this.items.length-1;i>=0;i--){if(this.items[i].instance!=this.currentContainer&&this.currentContainer&&this.items[i].item[0]!=this.currentItem[0]) -continue;var t=this.options.toleranceElement?$(this.options.toleranceElement,this.items[i].item):this.items[i].item;if(!fast){this.items[i].width=t[0].offsetWidth;this.items[i].height=t[0].offsetHeight;} -var p=t.offset();this.items[i].left=p.left;this.items[i].top=p.top;};if(this.options.custom&&this.options.custom.refreshContainers){this.options.custom.refreshContainers.call(this);}else{for(var i=this.containers.length-1;i>=0;i--){var p=this.containers[i].element.offset();this.containers[i].containerCache.left=p.left;this.containers[i].containerCache.top=p.top;this.containers[i].containerCache.width=this.containers[i].element.outerWidth();this.containers[i].containerCache.height=this.containers[i].element.outerHeight();};}},destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").removeData("sortable").unbind(".sortable");this.mouseDestroy();for(var i=this.items.length-1;i>=0;i--) -this.items[i].item.removeData("sortable-item");},createPlaceholder:function(that){var self=that||this,o=self.options;if(o.placeholder.constructor==String){var className=o.placeholder;o.placeholder={element:function(){return $('
                      ').addClass(className)[0];},update:function(i,p){p.css(i.offset()).css({width:i.outerWidth(),height:i.outerHeight()});}};} -self.placeholder=$(o.placeholder.element.call(self.element,self.currentItem)).appendTo('body').css({position:'absolute'});o.placeholder.update.call(self.element,self.currentItem,self.placeholder);},contactContainers:function(e){for(var i=this.containers.length-1;i>=0;i--){if(this.intersectsWith(this.containers[i].containerCache)){if(!this.containers[i].containerCache.over){if(this.currentContainer!=this.containers[i]){var dist=10000;var itemWithLeastDistance=null;var base=this.positionAbs[this.containers[i].floating?'left':'top'];for(var j=this.items.length-1;j>=0;j--){if(!contains(this.containers[i].element[0],this.items[j].item[0]))continue;var cur=this.items[j][this.containers[i].floating?'left':'top'];if(Math.abs(cur-base)=0;i--){this.containers[i].propagate("activate",e,this);}} -if($.ui.ddmanager)$.ui.ddmanager.current=this;if($.ui.ddmanager&&!o.dropBehaviour)$.ui.ddmanager.prepareOffsets(this,e);this.dragging=true;this.mouseDrag(e);return true;},convertPositionTo:function(d,pos){if(!pos)pos=this.position;var mod=d=="absolute"?1:-1;return{top:(pos.top -+this.offset.parent.top*mod --(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)*mod -+this.margins.top*mod),left:(pos.left -+this.offset.parent.left*mod --(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollLeft)*mod -+this.margins.left*mod)};},generatePosition:function(e){var o=this.options;var position={top:(e.pageY --this.offset.click.top --this.offset.parent.top -+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)),left:(e.pageX --this.offset.click.left --this.offset.parent.left -+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollLeft))};if(!this.originalPosition)return position;if(this.containment){if(position.leftthis.containment[2])position.left=this.containment[2];if(position.top>this.containment[3])position.top=this.containment[3];} -if(o.grid){var top=this.originalPosition.top+Math.round((position.top-this.originalPosition.top)/o.grid[1])*o.grid[1];position.top=this.containment?(!(topthis.containment[3])?top:(!(topthis.containment[2])?left:(!(left=0;i--){var intersection=this.intersectsWithEdge(this.items[i]);if(!intersection)continue;if(this.items[i].item[0]!=this.currentItem[0]&&this.currentItem[intersection==1?"next":"prev"]()[0]!=this.items[i].item[0]&&!contains(this.currentItem[0],this.items[i].item[0])&&(this.options.type=='semi-dynamic'?!contains(this.element[0],this.items[i].item[0]):true)){this.direction=intersection==1?"down":"up";this.rearrange(e,this.items[i]);this.propagate("change",e);break;}} -this.contactContainers(e);if($.ui.ddmanager)$.ui.ddmanager.drag(this,e);this.element.triggerHandler("sort",[e,this.ui()],this.options["sort"]);return false;},rearrange:function(e,i,a,hardRefresh){a?a[0].appendChild(this.currentItem[0]):i.item[0].parentNode.insertBefore(this.currentItem[0],(this.direction=='down'?i.item[0]:i.item[0].nextSibling));this.counter=this.counter?++this.counter:1;var self=this,counter=this.counter;window.setTimeout(function(){if(counter==self.counter)self.refreshPositions(!hardRefresh);},0);if(this.options.placeholder) -this.options.placeholder.update.call(this.element,this.currentItem,this.placeholder);},mouseStop:function(e,noPropagation){if($.ui.ddmanager&&!this.options.dropBehaviour) -$.ui.ddmanager.drop(this,e);if(this.options.revert){var self=this;var cur=self.currentItem.offset();if(self.placeholder)self.placeholder.animate({opacity:'hide'},(parseInt(this.options.revert,10)||500)-50);$(this.helper).animate({left:cur.left-this.offset.parent.left-self.margins.left+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollLeft),top:cur.top-this.offset.parent.top-self.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){self.clear(e);});}else{this.clear(e,noPropagation);} -return false;},clear:function(e,noPropagation){if(this.domPosition.prev!=this.currentItem.prev().not(".ui-sortable-helper")[0]||this.domPosition.parent!=this.currentItem.parent()[0])this.propagate("update",e,null,noPropagation);if(!contains(this.element[0],this.currentItem[0])){this.propagate("remove",e,null,noPropagation);for(var i=this.containers.length-1;i>=0;i--){if(contains(this.containers[i].element[0],this.currentItem[0])){this.containers[i].propagate("update",e,this,noPropagation);this.containers[i].propagate("receive",e,this,noPropagation);}};};for(var i=this.containers.length-1;i>=0;i--){this.containers[i].propagate("deactivate",e,this,noPropagation);if(this.containers[i].containerCache.over){this.containers[i].propagate("out",e,this);this.containers[i].containerCache.over=0;}} -this.dragging=false;if(this.cancelHelperRemoval){this.propagate("stop",e,null,noPropagation);return false;} -$(this.currentItem).css('visibility','');if(this.placeholder)this.placeholder.remove();this.helper.remove();this.helper=null;this.propagate("stop",e,null,noPropagation);return true;}}));$.extend($.ui.sortable,{getter:"serialize toArray",defaults:{helper:"clone",tolerance:"guess",distance:1,delay:0,scroll:true,scrollSensitivity:20,scrollSpeed:20,cancel:":input",items:'> *',zIndex:1000,dropOnEmpty:true,appendTo:"parent"}});$.ui.plugin.add("sortable","cursor",{start:function(e,ui){var t=$('body');if(t.css("cursor"))ui.options._cursor=t.css("cursor");t.css("cursor",ui.options.cursor);},stop:function(e,ui){if(ui.options._cursor)$('body').css("cursor",ui.options._cursor);}});$.ui.plugin.add("sortable","zIndex",{start:function(e,ui){var t=ui.helper;if(t.css("zIndex"))ui.options._zIndex=t.css("zIndex");t.css('zIndex',ui.options.zIndex);},stop:function(e,ui){if(ui.options._zIndex)$(ui.helper).css('zIndex',ui.options._zIndex);}});$.ui.plugin.add("sortable","opacity",{start:function(e,ui){var t=ui.helper;if(t.css("opacity"))ui.options._opacity=t.css("opacity");t.css('opacity',ui.options.opacity);},stop:function(e,ui){if(ui.options._opacity)$(ui.helper).css('opacity',ui.options._opacity);}});$.ui.plugin.add("sortable","scroll",{start:function(e,ui){var o=ui.options;var i=$(this).data("sortable");i.overflowY=function(el){do{if(/auto|scroll/.test(el.css('overflow'))||(/auto|scroll/).test(el.css('overflow-y')))return el;el=el.parent();}while(el[0].parentNode);return $(document);}(i.currentItem);i.overflowX=function(el){do{if(/auto|scroll/.test(el.css('overflow'))||(/auto|scroll/).test(el.css('overflow-x')))return el;el=el.parent();}while(el[0].parentNode);return $(document);}(i.currentItem);if(i.overflowY[0]!=document&&i.overflowY[0].tagName!='HTML')i.overflowYOffset=i.overflowY.offset();if(i.overflowX[0]!=document&&i.overflowX[0].tagName!='HTML')i.overflowXOffset=i.overflowX.offset();},sort:function(e,ui){var o=ui.options;var i=$(this).data("sortable");if(i.overflowY[0]!=document&&i.overflowY[0].tagName!='HTML'){if((i.overflowYOffset.top+i.overflowY[0].offsetHeight)-e.pageY").insertBefore(options.headers);$("").appendTo(options.headers);options.headers.addClass("ui-accordion-header").attr("tabindex","0");} -var maxHeight;if(options.fillSpace){maxHeight=this.element.parent().height();options.headers.each(function(){maxHeight-=$(this).outerHeight();});var maxPadding=0;options.headers.next().each(function(){maxPadding=Math.max(maxPadding,$(this).innerHeight()-$(this).height());}).height(maxHeight-maxPadding);}else if(options.autoHeight){maxHeight=0;options.headers.next().each(function(){maxHeight=Math.max(maxHeight,$(this).outerHeight());}).height(maxHeight);} -options.headers.not(options.active||"").next().hide();options.active.parent().andSelf().addClass(options.selectedClass);if(options.event){this.element.bind((options.event)+".accordion",clickHandler);}},activate:function(index){clickHandler.call(this.element[0],{target:findActive(this.options.headers,index)[0]});},destroy:function(){this.options.headers.next().css("display","");if(this.options.fillSpace||this.options.autoHeight){this.options.headers.next().css("height","");} -$.removeData(this.element[0],"accordion");this.element.removeClass("ui-accordion").unbind(".accordion");}});function scopeCallback(callback,scope){return function(){return callback.apply(scope,arguments);};};function completed(cancel){if(!$.data(this,"accordion")){return;} -var instance=$.data(this,"accordion");var options=instance.options;options.running=cancel?0:--options.running;if(options.running){return;} -if(options.clearStyle){options.toShow.add(options.toHide).css({height:"",overflow:""});} -$(this).triggerHandler("accordionchange",[$.event.fix({type:'accordionchange',target:instance.element[0]}),options.data],options.change);} -function toggle(toShow,toHide,data,clickedActive,down){var options=$.data(this,"accordion").options;options.toShow=toShow;options.toHide=toHide;options.data=data;var complete=scopeCallback(completed,this);options.running=toHide.size()===0?toShow.size():toHide.size();if(options.animated){if(!options.alwaysOpen&&clickedActive){$.ui.accordion.animations[options.animated]({toShow:jQuery([]),toHide:toHide,complete:complete,down:down,autoHeight:options.autoHeight});}else{$.ui.accordion.animations[options.animated]({toShow:toShow,toHide:toHide,complete:complete,down:down,autoHeight:options.autoHeight});}}else{if(!options.alwaysOpen&&clickedActive){toShow.toggle();}else{toHide.hide();toShow.show();} -complete(true);}} -function clickHandler(event){var options=$.data(this,"accordion").options;if(options.disabled){return false;} -if(!event.target&&!options.alwaysOpen){options.active.parent().andSelf().toggleClass(options.selectedClass);var toHide=options.active.next(),data={options:options,newHeader:jQuery([]),oldHeader:options.active,newContent:jQuery([]),oldContent:toHide},toShow=(options.active=$([]));toggle.call(this,toShow,toHide,data);return false;} -var clicked=$(event.target);clicked=$(clicked.parents(options.header)[0]||clicked);var clickedActive=clicked[0]==options.active[0];if(options.running||(options.alwaysOpen&&clickedActive)){return false;} -if(!clicked.is(options.header)){return;} -options.active.parent().andSelf().toggleClass(options.selectedClass);if(!clickedActive){clicked.parent().andSelf().addClass(options.selectedClass);} -var toShow=clicked.next(),toHide=options.active.next(),data={options:options,newHeader:clicked,oldHeader:options.active,newContent:toShow,oldContent:toHide},down=options.headers.index(options.active[0])>options.headers.index(clicked[0]);options.active=clickedActive?$([]):clicked;toggle.call(this,toShow,toHide,data,clickedActive,down);return false;};function findActive(headers,selector){return selector!=undefined?typeof selector=="number"?headers.filter(":eq("+selector+")"):headers.not(headers.not(selector)):selector===false?$([]):headers.filter(":eq(0)");} -$.extend($.ui.accordion,{defaults:{selectedClass:"selected",alwaysOpen:true,animated:'slide',event:"click",header:"a",autoHeight:true,running:0,navigationFilter:function(){return this.href.toLowerCase()==location.href.toLowerCase();}},animations:{slide:function(options,additions){options=$.extend({easing:"swing",duration:300},options,additions);if(!options.toHide.size()){options.toShow.animate({height:"show"},options);return;} -var hideHeight=options.toHide.height(),showHeight=options.toShow.height(),difference=showHeight/hideHeight;options.toShow.css({height:0,overflow:'hidden'}).show();options.toHide.filter(":hidden").each(options.complete).end().filter(":visible").animate({height:"hide"},{step:function(now){var current=(hideHeight-now)*difference;if($.browser.msie||$.browser.opera){current=Math.ceil(current);} -options.toShow.height(current);},duration:options.duration,easing:options.easing,complete:function(){if(!options.autoHeight){options.toShow.css("height","auto");} -options.complete();}});},bounceslide:function(options){this.slide(options,{easing:options.down?"bounceout":"swing",duration:options.down?1000:200});},easeslide:function(options){this.slide(options,{easing:"easeinout",duration:700});}}});$.fn.activate=function(index){return this.accordion("activate",index);};})(jQuery);(function($){var setDataSwitch={dragStart:"start.draggable",drag:"drag.draggable",dragStop:"stop.draggable",maxHeight:"maxHeight.resizable",minHeight:"minHeight.resizable",maxWidth:"maxWidth.resizable",minWidth:"minWidth.resizable",resizeStart:"start.resizable",resize:"drag.resizable",resizeStop:"stop.resizable"};$.widget("ui.dialog",{init:function(){var self=this,options=this.options,resizeHandles=typeof options.resizable=='string'?options.resizable:'n,e,s,w,se,sw,ne,nw',uiDialogContent=this.element.addClass('ui-dialog-content').wrap('
                      ').wrap('
                      '),uiDialogContainer=(this.uiDialogContainer=uiDialogContent.parent().addClass('ui-dialog-container').css({position:'relative',width:'100%',height:'100%'})),title=options.title||uiDialogContent.attr('title')||'',uiDialogTitlebar=(this.uiDialogTitlebar=$('
                      ')).append(''+title+'').append('X').prependTo(uiDialogContainer),uiDialog=(this.uiDialog=uiDialogContainer.parent()).appendTo(document.body).hide().addClass('ui-dialog').addClass(options.dialogClass).addClass(uiDialogContent.attr('className')).removeClass('ui-dialog-content').css({position:'absolute',width:options.width,height:options.height,overflow:'hidden',zIndex:options.zIndex}).attr('tabIndex',-1).css('outline',0).keydown(function(ev){if(options.closeOnEscape){var ESC=27;(ev.keyCode&&ev.keyCode==ESC&&self.close());}}).mousedown(function(){self.moveToTop();}),uiDialogButtonPane=(this.uiDialogButtonPane=$('
                      ')).addClass('ui-dialog-buttonpane').css({position:'absolute',bottom:0}).appendTo(uiDialog);this.uiDialogTitlebarClose=$('.ui-dialog-titlebar-close',uiDialogTitlebar).hover(function(){$(this).addClass('ui-dialog-titlebar-close-hover');},function(){$(this).removeClass('ui-dialog-titlebar-close-hover');}).mousedown(function(ev){ev.stopPropagation();}).click(function(){self.close();return false;});this.uiDialogTitlebar.find("*").add(this.uiDialogTitlebar).each(function(){$.ui.disableSelection(this);});if($.fn.draggable){uiDialog.draggable({cancel:'.ui-dialog-content',helper:options.dragHelper,handle:'.ui-dialog-titlebar',start:function(e,ui){self.moveToTop();(options.dragStart&&options.dragStart.apply(self.element[0],arguments));},drag:function(e,ui){(options.drag&&options.drag.apply(self.element[0],arguments));},stop:function(e,ui){(options.dragStop&&options.dragStop.apply(self.element[0],arguments));$.ui.dialog.overlay.resize();}});(options.draggable||uiDialog.draggable('disable'));} -if($.fn.resizable){uiDialog.resizable({cancel:'.ui-dialog-content',helper:options.resizeHelper,maxWidth:options.maxWidth,maxHeight:options.maxHeight,minWidth:options.minWidth,minHeight:options.minHeight,start:function(){(options.resizeStart&&options.resizeStart.apply(self.element[0],arguments));},resize:function(e,ui){(options.autoResize&&self.size.apply(self));(options.resize&&options.resize.apply(self.element[0],arguments));},handles:resizeHandles,stop:function(e,ui){(options.autoResize&&self.size.apply(self));(options.resizeStop&&options.resizeStop.apply(self.element[0],arguments));$.ui.dialog.overlay.resize();}});(options.resizable||uiDialog.resizable('disable'));} -this.createButtons(options.buttons);this.isOpen=false;(options.bgiframe&&$.fn.bgiframe&&uiDialog.bgiframe());(options.autoOpen&&this.open());},setData:function(key,value){(setDataSwitch[key]&&this.uiDialog.data(setDataSwitch[key],value));switch(key){case"buttons":this.createButtons(value);break;case"draggable":this.uiDialog.draggable(value?'enable':'disable');break;case"height":this.uiDialog.height(value);break;case"position":this.position(value);break;case"resizable":(typeof value=='string'&&this.uiDialog.data('handles.resizable',value));this.uiDialog.resizable(value?'enable':'disable');break;case"title":$(".ui-dialog-title",this.uiDialogTitlebar).text(value);break;case"width":this.uiDialog.width(value);break;} -$.widget.prototype.setData.apply(this,arguments);},position:function(pos){var wnd=$(window),doc=$(document),pTop=doc.scrollTop(),pLeft=doc.scrollLeft(),minTop=pTop;if($.inArray(pos,['center','top','right','bottom','left'])>=0){pos=[pos=='right'||pos=='left'?pos:'center',pos=='top'||pos=='bottom'?pos:'middle'];} -if(pos.constructor!=Array){pos=['center','middle'];} -if(pos[0].constructor==Number){pLeft+=pos[0];}else{switch(pos[0]){case'left':pLeft+=0;break;case'right':pLeft+=wnd.width()-this.uiDialog.width();break;default:case'center':pLeft+=(wnd.width()-this.uiDialog.width())/2;}} -if(pos[1].constructor==Number){pTop+=pos[1];}else{switch(pos[1]){case'top':pTop+=0;break;case'bottom':pTop+=wnd.height()-this.uiDialog.height();break;default:case'middle':pTop+=(wnd.height()-this.uiDialog.height())/2;}} -pTop=Math.max(pTop,minTop);this.uiDialog.css({top:pTop,left:pLeft});},size:function(){var container=this.uiDialogContainer,titlebar=this.uiDialogTitlebar,content=this.element,tbMargin=parseInt(content.css('margin-top'),10)+parseInt(content.css('margin-bottom'),10),lrMargin=parseInt(content.css('margin-left'),10)+parseInt(content.css('margin-right'),10);content.height(container.height()-titlebar.outerHeight()-tbMargin);content.width(container.width()-lrMargin);},open:function(){if(this.isOpen){return;} -this.overlay=this.options.modal?new $.ui.dialog.overlay(this):null;(this.uiDialog.next().length>0)&&this.uiDialog.appendTo('body');this.position(this.options.position);this.uiDialog.show(this.options.show);this.options.autoResize&&this.size();this.moveToTop(true);var openEV=null;var openUI={options:this.options};this.uiDialogTitlebarClose.focus();this.element.triggerHandler("dialogopen",[openEV,openUI],this.options.open);this.isOpen=true;},moveToTop:function(force){if((this.options.modal&&!force)||(!this.options.stack&&!this.options.modal)){return this.element.triggerHandler("dialogfocus",[null,{options:this.options}],this.options.focus);} -var maxZ=this.options.zIndex,options=this.options;$('.ui-dialog:visible').each(function(){maxZ=Math.max(maxZ,parseInt($(this).css('z-index'),10)||options.zIndex);});(this.overlay&&this.overlay.$el.css('z-index',++maxZ));this.uiDialog.css('z-index',++maxZ);this.element.triggerHandler("dialogfocus",[null,{options:this.options}],this.options.focus);},close:function(){(this.overlay&&this.overlay.destroy());this.uiDialog.hide(this.options.hide);var closeEV=null;var closeUI={options:this.options};this.element.triggerHandler("dialogclose",[closeEV,closeUI],this.options.close);$.ui.dialog.overlay.resize();this.isOpen=false;},destroy:function(){(this.overlay&&this.overlay.destroy());this.uiDialog.hide();this.element.unbind('.dialog').removeData('dialog').removeClass('ui-dialog-content').hide().appendTo('body');this.uiDialog.remove();},createButtons:function(buttons){var self=this,hasButtons=false,uiDialogButtonPane=this.uiDialogButtonPane;uiDialogButtonPane.empty().hide();$.each(buttons,function(){return!(hasButtons=true);});if(hasButtons){uiDialogButtonPane.show();$.each(buttons,function(name,fn){$('
                      ');} -$.extend(Datepicker.prototype,{markerClassName:'hasDatepicker',log:function(){if(this.debug) -console.log.apply('',arguments);},setDefaults:function(settings){extendRemove(this._defaults,settings||{});return this;},_attachDatepicker:function(target,settings){var inlineSettings=null;for(attrName in this._defaults){var attrValue=target.getAttribute('date:'+attrName);if(attrValue){inlineSettings=inlineSettings||{};try{inlineSettings[attrName]=eval(attrValue);}catch(err){inlineSettings[attrName]=attrValue;}}} -var nodeName=target.nodeName.toLowerCase();var inline=(nodeName=='div'||nodeName=='span');if(!target.id) -target.id='dp'+new Date().getTime();var inst=this._newInst($(target),inline);inst.settings=$.extend({},settings||{},inlineSettings||{});if(nodeName=='input'){this._connectDatepicker(target,inst);}else if(inline){this._inlineDatepicker(target,inst);}},_newInst:function(target,inline){return{id:target[0].id,input:target,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:inline,dpDiv:(!inline?this.dpDiv:$('
                      '))};},_connectDatepicker:function(target,inst){var input=$(target);if(input.hasClass(this.markerClassName)) -return;var appendText=this._get(inst,'appendText');var isRTL=this._get(inst,'isRTL');if(appendText) -input[isRTL?'before':'after'](''+appendText+'');var showOn=this._get(inst,'showOn');if(showOn=='focus'||showOn=='both') -input.focus(this._showDatepicker);if(showOn=='button'||showOn=='both'){var buttonText=this._get(inst,'buttonText');var buttonImage=this._get(inst,'buttonImage');var trigger=$(this._get(inst,'buttonImageOnly')?$('').addClass(this._triggerClass).attr({src:buttonImage,alt:buttonText,title:buttonText}):$('').addClass(this._triggerClass).html(buttonImage==''?buttonText:$('').attr({src:buttonImage,alt:buttonText,title:buttonText})));input[isRTL?'before':'after'](trigger);trigger.click(function(){if($.datepicker._datepickerShowing&&$.datepicker._lastInput==target) -$.datepicker._hideDatepicker();else -$.datepicker._showDatepicker(target);return false;});} -input.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).bind("setData.datepicker",function(event,key,value){inst.settings[key]=value;}).bind("getData.datepicker",function(event,key){return this._get(inst,key);});$.data(target,PROP_NAME,inst);},_inlineDatepicker:function(target,inst){var input=$(target);if(input.hasClass(this.markerClassName)) -return;input.addClass(this.markerClassName).append(inst.dpDiv).bind("setData.datepicker",function(event,key,value){inst.settings[key]=value;}).bind("getData.datepicker",function(event,key){return this._get(inst,key);});$.data(target,PROP_NAME,inst);this._setDate(inst,this._getDefaultDate(inst));this._updateDatepicker(inst);},_inlineShow:function(inst){var numMonths=this._getNumberOfMonths(inst);inst.dpDiv.width(numMonths[1]*$('.ui-datepicker',inst.dpDiv[0]).width());},_dialogDatepicker:function(input,dateText,onSelect,settings,pos){var inst=this._dialogInst;if(!inst){var id='dp'+new Date().getTime();this._dialogInput=$('');this._dialogInput.keydown(this._doKeyDown);$('body').append(this._dialogInput);inst=this._dialogInst=this._newInst(this._dialogInput,false);inst.settings={};$.data(this._dialogInput[0],PROP_NAME,inst);} -extendRemove(inst.settings,settings||{});this._dialogInput.val(dateText);this._pos=(pos?(pos.length?pos:[pos.pageX,pos.pageY]):null);if(!this._pos){var browserWidth=window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth;var browserHeight=window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight;var scrollX=document.documentElement.scrollLeft||document.body.scrollLeft;var scrollY=document.documentElement.scrollTop||document.body.scrollTop;this._pos=[(browserWidth/2)-100+scrollX,(browserHeight/2)-150+scrollY];} -this._dialogInput.css('left',this._pos[0]+'px').css('top',this._pos[1]+'px');inst.settings.onSelect=onSelect;this._inDialog=true;this.dpDiv.addClass(this._dialogClass);this._showDatepicker(this._dialogInput[0]);if($.blockUI) -$.blockUI(this.dpDiv);$.data(this._dialogInput[0],PROP_NAME,inst);return this;},_destroyDatepicker:function(target){var nodeName=target.nodeName.toLowerCase();var $target=$(target);$.removeData(target,PROP_NAME);if(nodeName=='input'){$target.siblings('.'+this._appendClass).remove().end().siblings('.'+this._triggerClass).remove().end().removeClass(this.markerClassName).unbind('focus',this._showDatepicker).unbind('keydown',this._doKeyDown).unbind('keypress',this._doKeyPress);}else if(nodeName=='div'||nodeName=='span') -$target.removeClass(this.markerClassName).empty();},_enableDatepicker:function(target){target.disabled=false;$(target).siblings('button.'+this._triggerClass).each(function(){this.disabled=false;}).end().siblings('img.'+this._triggerClass).css({opacity:'1.0',cursor:''});this._disabledInputs=$.map(this._disabledInputs,function(value){return(value==target?null:value);});},_disableDatepicker:function(target){target.disabled=true;$(target).siblings('button.'+this._triggerClass).each(function(){this.disabled=true;}).end().siblings('img.'+this._triggerClass).css({opacity:'0.5',cursor:'default'});this._disabledInputs=$.map(this._disabledInputs,function(value){return(value==target?null:value);});this._disabledInputs[this._disabledInputs.length]=target;},_isDisabledDatepicker:function(target){if(!target) -return false;for(var i=0;i-1);},_showDatepicker:function(input){input=input.target||input;if(input.nodeName.toLowerCase()!='input') -input=$('input',input.parentNode)[0];if($.datepicker._isDisabledDatepicker(input)||$.datepicker._lastInput==input) -return;var inst=$.data(input,PROP_NAME);var beforeShow=$.datepicker._get(inst,'beforeShow');extendRemove(inst.settings,(beforeShow?beforeShow.apply(input,[input,inst]):{}));$.datepicker._hideDatepicker(null,'');$.datepicker._lastInput=input;$.datepicker._setDateFromField(inst);if($.datepicker._inDialog) -input.value='';if(!$.datepicker._pos){$.datepicker._pos=$.datepicker._findPos(input);$.datepicker._pos[1]+=input.offsetHeight;} -var isFixed=false;$(input).parents().each(function(){isFixed|=$(this).css('position')=='fixed';return!isFixed;});if(isFixed&&$.browser.opera){$.datepicker._pos[0]-=document.documentElement.scrollLeft;$.datepicker._pos[1]-=document.documentElement.scrollTop;} -var offset={left:$.datepicker._pos[0],top:$.datepicker._pos[1]};$.datepicker._pos=null;inst.rangeStart=null;inst.dpDiv.css({position:'absolute',display:'block',top:'-1000px'});$.datepicker._updateDatepicker(inst);inst.dpDiv.width($.datepicker._getNumberOfMonths(inst)[1]*$('.ui-datepicker',inst.dpDiv[0])[0].offsetWidth);offset=$.datepicker._checkOffset(inst,offset,isFixed);inst.dpDiv.css({position:($.datepicker._inDialog&&$.blockUI?'static':(isFixed?'fixed':'absolute')),display:'none',left:offset.left+'px',top:offset.top+'px'});if(!inst.inline){var showAnim=$.datepicker._get(inst,'showAnim')||'show';var duration=$.datepicker._get(inst,'duration');var postProcess=function(){$.datepicker._datepickerShowing=true;if($.browser.msie&&parseInt($.browser.version)<7) -$('iframe.ui-datepicker-cover').css({width:inst.dpDiv.width()+4,height:inst.dpDiv.height()+4});};if($.effects&&$.effects[showAnim]) -inst.dpDiv.show(showAnim,$.datepicker._get(inst,'showOptions'),duration,postProcess);else -inst.dpDiv[showAnim](duration,postProcess);if(duration=='') -postProcess();if(inst.input[0].type!='hidden') -inst.input[0].focus();$.datepicker._curInst=inst;}},_updateDatepicker:function(inst){var dims={width:inst.dpDiv.width()+4,height:inst.dpDiv.height()+4};inst.dpDiv.empty().append(this._generateDatepicker(inst)).find('iframe.ui-datepicker-cover').css({width:dims.width,height:dims.height});var numMonths=this._getNumberOfMonths(inst);inst.dpDiv[(numMonths[0]!=1||numMonths[1]!=1?'add':'remove')+'Class']('ui-datepicker-multi');inst.dpDiv[(this._get(inst,'isRTL')?'add':'remove')+'Class']('ui-datepicker-rtl');if(inst.input&&inst.input[0].type!='hidden') -$(inst.input[0]).focus();},_checkOffset:function(inst,offset,isFixed){var pos=inst.input?this._findPos(inst.input[0]):null;var browserWidth=window.innerWidth||document.documentElement.clientWidth;var browserHeight=window.innerHeight||document.documentElement.clientHeight;var scrollX=document.documentElement.scrollLeft||document.body.scrollLeft;var scrollY=document.documentElement.scrollTop||document.body.scrollTop;if(this._get(inst,'isRTL')||(offset.left+inst.dpDiv.width()-scrollX)>browserWidth) -offset.left=Math.max((isFixed?0:scrollX),pos[0]+(inst.input?inst.input.width():0)-(isFixed?scrollX:0)-inst.dpDiv.width()- -(isFixed&&$.browser.opera?document.documentElement.scrollLeft:0));else -offset.left-=(isFixed?scrollX:0);if((offset.top+inst.dpDiv.height()-scrollY)>browserHeight) -offset.top=Math.max((isFixed?0:scrollY),pos[1]-(isFixed?scrollY:0)-(this._inDialog?0:inst.dpDiv.height())- -(isFixed&&$.browser.opera?document.documentElement.scrollTop:0));else -offset.top-=(isFixed?scrollY:0);return offset;},_findPos:function(obj){while(obj&&(obj.type=='hidden'||obj.nodeType!=1)){obj=obj.nextSibling;} -var position=$(obj).offset();return[position.left,position.top];},_hideDatepicker:function(input,duration){var inst=this._curInst;if(!inst) -return;var rangeSelect=this._get(inst,'rangeSelect');if(rangeSelect&&this._stayOpen) -this._selectDate('#'+inst.id,this._formatDate(inst,inst.currentDay,inst.currentMonth,inst.currentYear));this._stayOpen=false;if(this._datepickerShowing){duration=(duration!=null?duration:this._get(inst,'duration'));var showAnim=this._get(inst,'showAnim');var postProcess=function(){$.datepicker._tidyDialog(inst);};if(duration!=''&&$.effects&&$.effects[showAnim]) -inst.dpDiv.hide(showAnim,$.datepicker._get(inst,'showOptions'),duration,postProcess);else -inst.dpDiv[(duration==''?'hide':(showAnim=='slideDown'?'slideUp':(showAnim=='fadeIn'?'fadeOut':'hide')))](duration,postProcess);if(duration=='') -this._tidyDialog(inst);var onClose=this._get(inst,'onClose');if(onClose) -onClose.apply((inst.input?inst.input[0]:null),[this._getDate(inst),inst]);this._datepickerShowing=false;this._lastInput=null;inst.settings.prompt=null;if(this._inDialog){this._dialogInput.css({position:'absolute',left:'0',top:'-100px'});if($.blockUI){$.unblockUI();$('body').append(this.dpDiv);}} -this._inDialog=false;} -this._curInst=null;},_tidyDialog:function(inst){inst.dpDiv.removeClass(this._dialogClass).unbind('.ui-datepicker');$('.'+this._promptClass,inst.dpDiv).remove();},_checkExternalClick:function(event){if(!$.datepicker._curInst) -return;var $target=$(event.target);if(($target.parents('#'+$.datepicker._mainDivId).length==0)&&!$target.hasClass($.datepicker.markerClassName)&&!$target.hasClass($.datepicker._triggerClass)&&$.datepicker._datepickerShowing&&!($.datepicker._inDialog&&$.blockUI)) -$.datepicker._hideDatepicker(null,'');},_adjustDate:function(id,offset,period){var target=$(id);var inst=$.data(target[0],PROP_NAME);this._adjustInstDate(inst,offset,period);this._updateDatepicker(inst);},_gotoToday:function(id){var target=$(id);var inst=$.data(target[0],PROP_NAME);if(this._get(inst,'gotoCurrent')&&inst.currentDay){inst.selectedDay=inst.currentDay;inst.drawMonth=inst.selectedMonth=inst.currentMonth;inst.drawYear=inst.selectedYear=inst.currentYear;} -else{var date=new Date();inst.selectedDay=date.getDate();inst.drawMonth=inst.selectedMonth=date.getMonth();inst.drawYear=inst.selectedYear=date.getFullYear();} -this._adjustDate(target);this._notifyChange(inst);},_selectMonthYear:function(id,select,period){var target=$(id);var inst=$.data(target[0],PROP_NAME);inst._selectingMonthYear=false;inst[period=='M'?'drawMonth':'drawYear']=select.options[select.selectedIndex].value-0;this._adjustDate(target);this._notifyChange(inst);},_clickMonthYear:function(id){var target=$(id);var inst=$.data(target[0],PROP_NAME);if(inst.input&&inst._selectingMonthYear&&!$.browser.msie) -inst.input[0].focus();inst._selectingMonthYear=!inst._selectingMonthYear;},_changeFirstDay:function(id,day){var target=$(id);var inst=$.data(target[0],PROP_NAME);inst.settings.firstDay=day;this._updateDatepicker(inst);},_selectDay:function(id,month,year,td){if($(td).hasClass(this._unselectableClass)) -return;var target=$(id);var inst=$.data(target[0],PROP_NAME);var rangeSelect=this._get(inst,'rangeSelect');if(rangeSelect){this._stayOpen=!this._stayOpen;if(this._stayOpen){$('.ui-datepicker td').removeClass(this._currentClass);$(td).addClass(this._currentClass);}} -inst.selectedDay=inst.currentDay=$('a',td).html();inst.selectedMonth=inst.currentMonth=month;inst.selectedYear=inst.currentYear=year;if(this._stayOpen){inst.endDay=inst.endMonth=inst.endYear=null;} -else if(rangeSelect){inst.endDay=inst.currentDay;inst.endMonth=inst.currentMonth;inst.endYear=inst.currentYear;} -this._selectDate(id,this._formatDate(inst,inst.currentDay,inst.currentMonth,inst.currentYear));if(this._stayOpen){inst.rangeStart=new Date(inst.currentYear,inst.currentMonth,inst.currentDay);this._updateDatepicker(inst);} -else if(rangeSelect){inst.selectedDay=inst.currentDay=inst.rangeStart.getDate();inst.selectedMonth=inst.currentMonth=inst.rangeStart.getMonth();inst.selectedYear=inst.currentYear=inst.rangeStart.getFullYear();inst.rangeStart=null;if(inst.inline) -this._updateDatepicker(inst);}},_clearDate:function(id){var target=$(id);var inst=$.data(target[0],PROP_NAME);if(this._get(inst,'mandatory')) -return;this._stayOpen=false;inst.endDay=inst.endMonth=inst.endYear=inst.rangeStart=null;this._selectDate(target,'');},_selectDate:function(id,dateStr){var target=$(id);var inst=$.data(target[0],PROP_NAME);dateStr=(dateStr!=null?dateStr:this._formatDate(inst));if(this._get(inst,'rangeSelect')&&dateStr) -dateStr=(inst.rangeStart?this._formatDate(inst,inst.rangeStart):dateStr)+this._get(inst,'rangeSeparator')+dateStr;if(inst.input) -inst.input.val(dateStr);this._updateAlternate(inst);var onSelect=this._get(inst,'onSelect');if(onSelect) -onSelect.apply((inst.input?inst.input[0]:null),[dateStr,inst]);else if(inst.input) -inst.input.trigger('change');if(inst.inline) -this._updateDatepicker(inst);else if(!this._stayOpen){this._hideDatepicker(null,this._get(inst,'duration'));this._lastInput=inst.input[0];if(typeof(inst.input[0])!='object') -inst.input[0].focus();this._lastInput=null;}},_updateAlternate:function(inst){var altField=this._get(inst,'altField');if(altField){var altFormat=this._get(inst,'altFormat');var date=this._getDate(inst);dateStr=(isArray(date)?(!date[0]&&!date[1]?'':this.formatDate(altFormat,date[0],this._getFormatConfig(inst))+ -this._get(inst,'rangeSeparator')+this.formatDate(altFormat,date[1]||date[0],this._getFormatConfig(inst))):this.formatDate(altFormat,date,this._getFormatConfig(inst)));$(altField).each(function(){$(this).val(dateStr);});}},noWeekends:function(date){var day=date.getDay();return[(day>0&&day<6),''];},iso8601Week:function(date){var checkDate=new Date(date.getFullYear(),date.getMonth(),date.getDate(),(date.getTimezoneOffset()/-60));var firstMon=new Date(checkDate.getFullYear(),1-1,4);var firstDay=firstMon.getDay()||7;firstMon.setDate(firstMon.getDate()+1-firstDay);if(firstDay<4&&checkDatenew Date(checkDate.getFullYear(),12-1,28)){firstDay=new Date(checkDate.getFullYear()+1,1-1,4).getDay()||7;if(firstDay>4&&(checkDate.getDay()||7)0&&iValue='0'&&value.charAt(iValue)<='9'){num=num*10+(value.charAt(iValue++)-0);size--;} -if(size==origSize) -throw'Missing number at position '+iValue;return num;};var getName=function(match,shortNames,longNames){var names=(lookAhead(match)?longNames:shortNames);var size=0;for(var j=0;j0&&iValue0){var settings=this._getFormatConfig(inst);if(dates.length>1){date=this.parseDate(dateFormat,dates[1],settings)||defaultDate;inst.endDay=date.getDate();inst.endMonth=date.getMonth();inst.endYear=date.getFullYear();} -try{date=this.parseDate(dateFormat,dates[0],settings)||defaultDate;}catch(e){this.log(e);date=defaultDate;}} -inst.selectedDay=date.getDate();inst.drawMonth=inst.selectedMonth=date.getMonth();inst.drawYear=inst.selectedYear=date.getFullYear();inst.currentDay=(dates[0]?date.getDate():0);inst.currentMonth=(dates[0]?date.getMonth():0);inst.currentYear=(dates[0]?date.getFullYear():0);this._adjustInstDate(inst);},_getDefaultDate:function(inst){var date=this._determineDate(this._get(inst,'defaultDate'),new Date());var minDate=this._getMinMaxDate(inst,'min',true);var maxDate=this._getMinMaxDate(inst,'max');date=(minDate&&datemaxDate?maxDate:date);return date;},_determineDate:function(date,defaultDate){var offsetNumeric=function(offset){var date=new Date();date.setUTCDate(date.getUTCDate()+offset);return date;};var offsetString=function(offset,getDaysInMonth){var date=new Date();var year=date.getFullYear();var month=date.getMonth();var day=date.getDate();var pattern=/([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g;var matches=pattern.exec(offset);while(matches){switch(matches[2]||'d'){case'd':case'D':day+=(matches[1]-0);break;case'w':case'W':day+=(matches[1]*7);break;case'm':case'M':month+=(matches[1]-0);day=Math.min(day,getDaysInMonth(year,month));break;case'y':case'Y':year+=(matches[1]-0);day=Math.min(day,getDaysInMonth(year,month));break;} -matches=pattern.exec(offset);} -return new Date(year,month,day);};return(date==null?defaultDate:(typeof date=='string'?offsetString(date,this._getDaysInMonth):(typeof date=='number'?offsetNumeric(date):date)));},_setDate:function(inst,date,endDate){var clear=!(date);date=this._determineDate(date,new Date());inst.selectedDay=inst.currentDay=date.getDate();inst.drawMonth=inst.selectedMonth=inst.currentMonth=date.getMonth();inst.drawYear=inst.selectedYear=inst.currentYear=date.getFullYear();if(this._get(inst,'rangeSelect')){if(endDate){endDate=this._determineDate(endDate,null);inst.endDay=endDate.getDate();inst.endMonth=endDate.getMonth();inst.endYear=endDate.getFullYear();}else{inst.endDay=inst.currentDay;inst.endMonth=inst.currentMonth;inst.endYear=inst.currentYear;}} -this._adjustInstDate(inst);if(inst.input) -inst.input.val(clear?'':this._formatDate(inst)+ -(!this._get(inst,'rangeSelect')?'':this._get(inst,'rangeSeparator')+ -this._formatDate(inst,inst.endDay,inst.endMonth,inst.endYear)));},_getDate:function(inst){var startDate=(!inst.currentYear||(inst.input&&inst.input.val()=='')?null:new Date(inst.currentYear,inst.currentMonth,inst.currentDay));if(this._get(inst,'rangeSelect')){return[inst.rangeStart||startDate,(!inst.endYear?null:new Date(inst.endYear,inst.endMonth,inst.endDay))];}else -return startDate;},_generateDatepicker:function(inst){var today=new Date();today=new Date(today.getFullYear(),today.getMonth(),today.getDate());var showStatus=this._get(inst,'showStatus');var isRTL=this._get(inst,'isRTL');var clear=(this._get(inst,'mandatory')?'':'');var controls='
                      '+(isRTL?'':clear)+''+(isRTL?clear:'')+'
                      ';var prompt=this._get(inst,'prompt');var closeAtTop=this._get(inst,'closeAtTop');var hideIfNoPrevNext=this._get(inst,'hideIfNoPrevNext');var navigationAsDateFormat=this._get(inst,'navigationAsDateFormat');var numMonths=this._getNumberOfMonths(inst);var stepMonths=this._get(inst,'stepMonths');var isMultiMonth=(numMonths[0]!=1||numMonths[1]!=1);var currentDate=(!inst.currentDay?new Date(9999,9,9):new Date(inst.currentYear,inst.currentMonth,inst.currentDay));var minDate=this._getMinMaxDate(inst,'min',true);var maxDate=this._getMinMaxDate(inst,'max');var drawMonth=inst.drawMonth;var drawYear=inst.drawYear;if(maxDate){var maxDraw=new Date(maxDate.getFullYear(),maxDate.getMonth()-numMonths[1]+1,maxDate.getDate());maxDraw=(minDate&&maxDrawmaxDraw){drawMonth--;if(drawMonth<0){drawMonth=11;drawYear--;}}} -var prevText=this._get(inst,'prevText');prevText=(!navigationAsDateFormat?prevText:this.formatDate(prevText,new Date(drawYear,drawMonth-stepMonths,1),this._getFormatConfig(inst)));var prev='
                      '+(this._canAdjustMonth(inst,-1,drawYear,drawMonth)?''+prevText+'':(hideIfNoPrevNext?'':''))+'
                      ';var nextText=this._get(inst,'nextText');nextText=(!navigationAsDateFormat?nextText:this.formatDate(nextText,new Date(drawYear,drawMonth+stepMonths,1),this._getFormatConfig(inst)));var next='
                      '+(this._canAdjustMonth(inst,+1,drawYear,drawMonth)?''+nextText+'':(hideIfNoPrevNext?'':''))+'
                      ';var currentText=this._get(inst,'currentText');currentText=(!navigationAsDateFormat?currentText:this.formatDate(currentText,today,this._getFormatConfig(inst)));var html=(prompt?'
                      '+prompt+'
                      ':'')+ -(closeAtTop&&!inst.inline?controls:'')+'';var firstDay=this._get(inst,'firstDay');var changeFirstDay=this._get(inst,'changeFirstDay');var dayNames=this._get(inst,'dayNames');var dayNamesShort=this._get(inst,'dayNamesShort');var dayNamesMin=this._get(inst,'dayNamesMin');var monthNames=this._get(inst,'monthNames');var beforeShowDay=this._get(inst,'beforeShowDay');var highlightWeek=this._get(inst,'highlightWeek');var showOtherMonths=this._get(inst,'showOtherMonths');var showWeeks=this._get(inst,'showWeeks');var calculateWeek=this._get(inst,'calculateWeek')||this.iso8601Week;var status=(showStatus?this._get(inst,'dayStatus')||' ':'');var dateStatus=this._get(inst,'statusForDate')||this.dateStatus;var endDate=inst.endDay?new Date(inst.endYear,inst.endMonth,inst.endDay):currentDate;for(var row=0;row'+ -this._generateMonthYearHeader(inst,drawMonth,drawYear,minDate,maxDate,selectedDate,row>0||col>0,showStatus,monthNames)+''+''+ -(showWeeks?'':'');for(var dow=0;dow<7;dow++){var day=(dow+firstDay)%7;var dayStatus=(status.indexOf('DD')>-1?status.replace(/DD/,dayNames[day]):status.replace(/D/,dayNamesShort[day]));html+='=5?' class="ui-datepicker-week-end-cell"':'')+'>'+ -(!changeFirstDay?''+ -dayNamesMin[day]+(changeFirstDay?'':'')+'';} -html+='';var daysInMonth=this._getDaysInMonth(drawYear,drawMonth);if(drawYear==inst.selectedYear&&drawMonth==inst.selectedMonth) -inst.selectedDay=Math.min(inst.selectedDay,daysInMonth);var leadDays=(this._getFirstDayOfMonth(drawYear,drawMonth)-firstDay+7)%7;var printDate=new Date(drawYear,drawMonth,1-leadDays);var numRows=(isMultiMonth?6:Math.ceil((leadDays+daysInMonth)/7));for(var dRow=0;dRow'+ -(showWeeks?'':'');for(var dow=0;dow<7;dow++){var daySettings=(beforeShowDay?beforeShowDay.apply((inst.input?inst.input[0]:null),[printDate]):[true,'']);var otherMonth=(printDate.getMonth()!=drawMonth);var unselectable=otherMonth||!daySettings[0]||(minDate&&printDatemaxDate);html+='';printDate.setUTCDate(printDate.getUTCDate()+1);} -html+='';} -drawMonth++;if(drawMonth>11){drawMonth=0;drawYear++;} -html+='
                      '+this._get(inst,'weekHeader')+'
                      '+calculateWeek(printDate)+''+ -(otherMonth?(showOtherMonths?printDate.getDate():' '):(unselectable?printDate.getDate():''+printDate.getDate()+''))+'
                      ';} -html+=(showStatus?'
                      '+(this._get(inst,'initStatus')||' ')+'
                      ':'')+ -(!closeAtTop&&!inst.inline?controls:'')+'
                      '+ -($.browser.msie&&parseInt($.browser.version)<7&&!inst.inline?'':'');return html;},_generateMonthYearHeader:function(inst,drawMonth,drawYear,minDate,maxDate,selectedDate,secondary,showStatus,monthNames){minDate=(inst.rangeStart&&minDate&&selectedDate';for(var month=0;month<12;month++){if((!inMinYear||month>=minDate.getMonth())&&(!inMaxYear||month<=maxDate.getMonth())) -html+='';} -html+='';} -if(secondary||!this._get(inst,'changeYear')) -html+=drawYear;else{var years=this._get(inst,'yearRange').split(':');var year=0;var endYear=0;if(years.length!=2){year=drawYear-10;endYear=drawYear+10;}else if(years[0].charAt(0)=='+'||years[0].charAt(0)=='-'){year=endYear=new Date().getFullYear();year+=parseInt(years[0],10);endYear+=parseInt(years[1],10);}else{year=parseInt(years[0],10);endYear=parseInt(years[1],10);} -year=(minDate?Math.max(year,minDate.getFullYear()):year);endYear=(maxDate?Math.min(endYear,maxDate.getFullYear()):endYear);html+='';} -html+='
                      ';return html;},_addStatus:function(inst,text){return' onmouseover="jQuery(\'#ui-datepicker-status-'+inst.id+'\').html(\''+text+'\');" '+'onmouseout="jQuery(\'#ui-datepicker-status-'+inst.id+'\').html(\' \');"';},_adjustInstDate:function(inst,offset,period){var year=inst.drawYear+(period=='Y'?offset:0);var month=inst.drawMonth+(period=='M'?offset:0);var day=Math.min(inst.selectedDay,this._getDaysInMonth(year,month))+ -(period=='D'?offset:0);var date=new Date(year,month,day);var minDate=this._getMinMaxDate(inst,'min',true);var maxDate=this._getMinMaxDate(inst,'max');date=(minDate&&datemaxDate?maxDate:date);inst.selectedDay=date.getDate();inst.drawMonth=inst.selectedMonth=date.getMonth();inst.drawYear=inst.selectedYear=date.getFullYear();if(period=='M'||period=='Y') -this._notifyChange(inst);},_notifyChange:function(inst){var onChange=this._get(inst,'onChangeMonthYear');if(onChange) -onChange.apply((inst.input?inst.input[0]:null),[new Date(inst.selectedYear,inst.selectedMonth,1),inst]);},_getNumberOfMonths:function(inst){var numMonths=this._get(inst,'numberOfMonths');return(numMonths==null?[1,1]:(typeof numMonths=='number'?[1,numMonths]:numMonths));},_getMinMaxDate:function(inst,minMax,checkRange){var date=this._determineDate(this._get(inst,minMax+'Date'),null);if(date){date.setHours(0);date.setMinutes(0);date.setSeconds(0);date.setMilliseconds(0);} -return(!checkRange||!inst.rangeStart?date:(!date||inst.rangeStart>date?inst.rangeStart:date));},_getDaysInMonth:function(year,month){return 32-new Date(year,month,32).getDate();},_getFirstDayOfMonth:function(year,month){return new Date(year,month,1).getDay();},_canAdjustMonth:function(inst,offset,curYear,curMonth){var numMonths=this._getNumberOfMonths(inst);var date=new Date(curYear,curMonth+(offset<0?offset:numMonths[1]),1);if(offset<0) -date.setDate(this._getDaysInMonth(date.getFullYear(),date.getMonth()));return this._isInRange(inst,date);},_isInRange:function(inst,date){var newMinDate=(!inst.rangeStart?null:new Date(inst.selectedYear,inst.selectedMonth,inst.selectedDay));newMinDate=(newMinDate&&inst.rangeStart=minDate)&&(!maxDate||date<=maxDate));},_getFormatConfig:function(inst){var shortYearCutoff=this._get(inst,'shortYearCutoff');shortYearCutoff=(typeof shortYearCutoff!='string'?shortYearCutoff:new Date().getFullYear()%100+parseInt(shortYearCutoff,10));return{shortYearCutoff:shortYearCutoff,dayNamesShort:this._get(inst,'dayNamesShort'),dayNames:this._get(inst,'dayNames'),monthNamesShort:this._get(inst,'monthNamesShort'),monthNames:this._get(inst,'monthNames')};},_formatDate:function(inst,day,month,year){if(!day){inst.currentDay=inst.selectedDay;inst.currentMonth=inst.selectedMonth;inst.currentYear=inst.selectedYear;} -var date=(day?(typeof day=='object'?day:new Date(year,month,day)):new Date(inst.currentYear,inst.currentMonth,inst.currentDay));return this.formatDate(this._get(inst,'dateFormat'),date,this._getFormatConfig(inst));}});function extendRemove(target,props){$.extend(target,props);for(var name in props) -if(props[name]==null||props[name]==undefined) -target[name]=props[name];return target;};function isArray(a){return(a&&(($.browser.safari&&typeof a=='object'&&a.length)||(a.constructor&&a.constructor.toString().match(/\Array\(\)/))));};$.fn.datepicker=function(options){var otherArgs=Array.prototype.slice.call(arguments,1);if(typeof options=='string'&&(options=='isDisabled'||options=='getDate')) -return $.datepicker['_'+options+'Datepicker'].apply($.datepicker,[this[0]].concat(otherArgs));return this.each(function(){typeof options=='string'?$.datepicker['_'+options+'Datepicker'].apply($.datepicker,[this].concat(otherArgs)):$.datepicker._attachDatepicker(this,options);});};$.datepicker=new Datepicker();$(document).ready(function(){$(document.body).append($.datepicker.dpDiv).mousedown($.datepicker._checkExternalClick);});})(jQuery);;(function($){$.effects=$.effects||{};$.extend($.effects,{save:function(el,set){for(var i=0;i
                      ');var wrapper=el.parent();if(el.css('position')=='static'){wrapper.css({position:'relative'});el.css({position:'relative'});}else{var top=el.css('top');if(isNaN(parseInt(top)))top='auto';var left=el.css('left');if(isNaN(parseInt(left)))left='auto';wrapper.css({position:el.css('position'),top:top,left:left,zIndex:el.css('z-index')}).show();el.css({position:'relative',top:0,left:0});} -wrapper.css(props);return wrapper;},removeWrapper:function(el){if(el.parent().attr('id')=='fxWrapper') -return el.parent().replaceWith(el);return el;},setTransition:function(el,list,factor,val){val=val||{};$.each(list,function(i,x){unit=el.cssUnit(x);if(unit[0]>0)val[x]=unit[0]*factor+unit[1];});return val;},animateClass:function(value,duration,easing,callback){var cb=(typeof easing=="function"?easing:(callback?callback:null));var ea=(typeof easing=="object"?easing:null);return this.each(function(){var offset={};var that=$(this);var oldStyleAttr=that.attr("style")||'';if(typeof oldStyleAttr=='object')oldStyleAttr=oldStyleAttr["cssText"];if(value.toggle){that.hasClass(value.toggle)?value.remove=value.toggle:value.add=value.toggle;} -var oldStyle=$.extend({},(document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle));if(value.add)that.addClass(value.add);if(value.remove)that.removeClass(value.remove);var newStyle=$.extend({},(document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle));if(value.add)that.removeClass(value.add);if(value.remove)that.addClass(value.remove);for(var n in newStyle){if(typeof newStyle[n]!="function"&&newStyle[n]&&n.indexOf("Moz")==-1&&n.indexOf("length")==-1&&newStyle[n]!=oldStyle[n]&&(n.match(/color/i)||(!n.match(/color/i)&&!isNaN(parseInt(newStyle[n],10))))&&(oldStyle.position!="static"||(oldStyle.position=="static"&&!n.match(/left|top|bottom|right/))))offset[n]=newStyle[n];} -that.animate(offset,duration,ea,function(){if(typeof $(this).attr("style")=='object'){$(this).attr("style")["cssText"]="";$(this).attr("style")["cssText"]=oldStyleAttr;}else $(this).attr("style",oldStyleAttr);if(value.add)$(this).addClass(value.add);if(value.remove)$(this).removeClass(value.remove);if(cb)cb.apply(this,arguments);});});}});$.fn.extend({_show:$.fn.show,_hide:$.fn.hide,__toggle:$.fn.toggle,_addClass:$.fn.addClass,_removeClass:$.fn.removeClass,_toggleClass:$.fn.toggleClass,effect:function(fx,o,speed,callback){return $.effects[fx]?$.effects[fx].call(this,{method:fx,options:o||{},duration:speed,callback:callback}):null;},show:function(){if(!arguments[0]||(arguments[0].constructor==Number||/(slow|normal|fast)/.test(arguments[0]))) -return this._show.apply(this,arguments);else{var o=arguments[1]||{};o['mode']='show';return this.effect.apply(this,[arguments[0],o,arguments[2]||o.duration,arguments[3]||o.callback]);}},hide:function(){if(!arguments[0]||(arguments[0].constructor==Number||/(slow|normal|fast)/.test(arguments[0]))) -return this._hide.apply(this,arguments);else{var o=arguments[1]||{};o['mode']='hide';return this.effect.apply(this,[arguments[0],o,arguments[2]||o.duration,arguments[3]||o.callback]);}},toggle:function(){if(!arguments[0]||(arguments[0].constructor==Number||/(slow|normal|fast)/.test(arguments[0]))||(arguments[0].constructor==Function)) -return this.__toggle.apply(this,arguments);else{var o=arguments[1]||{};o['mode']='toggle';return this.effect.apply(this,[arguments[0],o,arguments[2]||o.duration,arguments[3]||o.callback]);}},addClass:function(classNames,speed,easing,callback){return speed?$.effects.animateClass.apply(this,[{add:classNames},speed,easing,callback]):this._addClass(classNames);},removeClass:function(classNames,speed,easing,callback){return speed?$.effects.animateClass.apply(this,[{remove:classNames},speed,easing,callback]):this._removeClass(classNames);},toggleClass:function(classNames,speed,easing,callback){return speed?$.effects.animateClass.apply(this,[{toggle:classNames},speed,easing,callback]):this._toggleClass(classNames);},morph:function(remove,add,speed,easing,callback){return $.effects.animateClass.apply(this,[{add:add,remove:remove},speed,easing,callback]);},switchClass:function(){return this.morph.apply(this,arguments);},cssUnit:function(key){var style=this.css(key),val=[];$.each(['em','px','%','pt'],function(i,unit){if(style.indexOf(unit)>0) -val=[parseFloat(style),unit];});return val;}});jQuery.each(['backgroundColor','borderBottomColor','borderLeftColor','borderRightColor','borderTopColor','color','outlineColor'],function(i,attr){jQuery.fx.step[attr]=function(fx){if(fx.state==0){fx.start=getColor(fx.elem,attr);fx.end=getRGB(fx.end);} -fx.elem.style[attr]="rgb("+[Math.max(Math.min(parseInt((fx.pos*(fx.end[0]-fx.start[0]))+fx.start[0]),255),0),Math.max(Math.min(parseInt((fx.pos*(fx.end[1]-fx.start[1]))+fx.start[1]),255),0),Math.max(Math.min(parseInt((fx.pos*(fx.end[2]-fx.start[2]))+fx.start[2]),255),0)].join(",")+")";}});function getRGB(color){var result;if(color&&color.constructor==Array&&color.length==3) -return color;if(result=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(color)) -return[parseInt(result[1]),parseInt(result[2]),parseInt(result[3])];if(result=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(color)) -return[parseFloat(result[1])*2.55,parseFloat(result[2])*2.55,parseFloat(result[3])*2.55];if(result=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(color)) -return[parseInt(result[1],16),parseInt(result[2],16),parseInt(result[3],16)];if(result=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(color)) -return[parseInt(result[1]+result[1],16),parseInt(result[2]+result[2],16),parseInt(result[3]+result[3],16)];if(result=/rgba\(0, 0, 0, 0\)/.exec(color)) -return colors['transparent'] -return colors[jQuery.trim(color).toLowerCase()];} -function getColor(elem,attr){var color;do{color=jQuery.curCSS(elem,attr);if(color!=''&&color!='transparent'||jQuery.nodeName(elem,"body")) -break;attr="backgroundColor";}while(elem=elem.parentNode);return getRGB(color);};var colors={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]};jQuery.easing['jswing']=jQuery.easing['swing'];jQuery.extend(jQuery.easing,{def:'easeOutQuad',swing:function(x,t,b,c,d){return jQuery.easing[jQuery.easing.def](x,t,b,c,d);},easeInQuad:function(x,t,b,c,d){return c*(t/=d)*t+b;},easeOutQuad:function(x,t,b,c,d){return-c*(t/=d)*(t-2)+b;},easeInOutQuad:function(x,t,b,c,d){if((t/=d/2)<1)return c/2*t*t+b;return-c/2*((--t)*(t-2)-1)+b;},easeInCubic:function(x,t,b,c,d){return c*(t/=d)*t*t+b;},easeOutCubic:function(x,t,b,c,d){return c*((t=t/d-1)*t*t+1)+b;},easeInOutCubic:function(x,t,b,c,d){if((t/=d/2)<1)return c/2*t*t*t+b;return c/2*((t-=2)*t*t+2)+b;},easeInQuart:function(x,t,b,c,d){return c*(t/=d)*t*t*t+b;},easeOutQuart:function(x,t,b,c,d){return-c*((t=t/d-1)*t*t*t-1)+b;},easeInOutQuart:function(x,t,b,c,d){if((t/=d/2)<1)return c/2*t*t*t*t+b;return-c/2*((t-=2)*t*t*t-2)+b;},easeInQuint:function(x,t,b,c,d){return c*(t/=d)*t*t*t*t+b;},easeOutQuint:function(x,t,b,c,d){return c*((t=t/d-1)*t*t*t*t+1)+b;},easeInOutQuint:function(x,t,b,c,d){if((t/=d/2)<1)return c/2*t*t*t*t*t+b;return c/2*((t-=2)*t*t*t*t+2)+b;},easeInSine:function(x,t,b,c,d){return-c*Math.cos(t/d*(Math.PI/2))+c+b;},easeOutSine:function(x,t,b,c,d){return c*Math.sin(t/d*(Math.PI/2))+b;},easeInOutSine:function(x,t,b,c,d){return-c/2*(Math.cos(Math.PI*t/d)-1)+b;},easeInExpo:function(x,t,b,c,d){return(t==0)?b:c*Math.pow(2,10*(t/d-1))+b;},easeOutExpo:function(x,t,b,c,d){return(t==d)?b+c:c*(-Math.pow(2,-10*t/d)+1)+b;},easeInOutExpo:function(x,t,b,c,d){if(t==0)return b;if(t==d)return b+c;if((t/=d/2)<1)return c/2*Math.pow(2,10*(t-1))+b;return c/2*(-Math.pow(2,-10*--t)+2)+b;},easeInCirc:function(x,t,b,c,d){return-c*(Math.sqrt(1-(t/=d)*t)-1)+b;},easeOutCirc:function(x,t,b,c,d){return c*Math.sqrt(1-(t=t/d-1)*t)+b;},easeInOutCirc:function(x,t,b,c,d){if((t/=d/2)<1)return-c/2*(Math.sqrt(1-t*t)-1)+b;return c/2*(Math.sqrt(1-(t-=2)*t)+1)+b;},easeInElastic:function(x,t,b,c,d){var s=1.70158;var p=0;var a=c;if(t==0)return b;if((t/=d)==1)return b+c;if(!p)p=d*.3;if(a').css({position:'absolute',visibility:'visible',left:-j*(width/cells),top:-i*(height/rows)}).parent().addClass('effects-explode').css({position:'absolute',overflow:'hidden',width:width/cells,height:height/rows,left:offset.left+j*(width/cells)+(o.options.mode=='show'?(j-Math.floor(cells/2))*(width/cells):0),top:offset.top+i*(height/rows)+(o.options.mode=='show'?(i-Math.floor(rows/2))*(height/rows):0),opacity:o.options.mode=='show'?0:1}).animate({left:offset.left+j*(width/cells)+(o.options.mode=='show'?0:(j-Math.floor(cells/2))*(width/cells)),top:offset.top+i*(height/rows)+(o.options.mode=='show'?0:(i-Math.floor(rows/2))*(height/rows)),opacity:o.options.mode=='show'?1:0},o.duration||500);}} -setTimeout(function(){o.options.mode=='show'?el.css({visibility:'visible'}):el.css({visibility:'visible'}).hide();if(o.callback)o.callback.apply(el[0]);el.dequeue();$('.effects-explode').remove();},o.duration||500);});};})(jQuery);(function($){$.effects.fold=function(o){return this.queue(function(){var el=$(this),props=['position','top','left'];var mode=$.effects.setMode(el,o.options.mode||'hide');var size=o.options.size||15;var horizFirst=!(!o.options.horizFirst);$.effects.save(el,props);el.show();var wrapper=$.effects.createWrapper(el).css({overflow:'hidden'});var widthFirst=((mode=='show')!=horizFirst);var ref=widthFirst?['width','height']:['height','width'];var distance=widthFirst?[wrapper.width(),wrapper.height()]:[wrapper.height(),wrapper.width()];var percent=/([0-9]+)%/.exec(size);if(percent)size=parseInt(percent[1])/100*distance[mode=='hide'?0:1];if(mode=='show')wrapper.css(horizFirst?{height:0,width:size}:{height:size,width:0});var animation1={},animation2={};animation1[ref[0]]=mode=='show'?distance[0]:size;animation2[ref[1]]=mode=='show'?distance[1]:0;wrapper.animate(animation1,o.duration/2,o.options.easing).animate(animation2,o.duration/2,o.options.easing,function(){if(mode=='hide')el.hide();$.effects.restore(el,props);$.effects.removeWrapper(el);if(o.callback)o.callback.apply(el[0],arguments);el.dequeue();});});};})(jQuery);;(function($){$.effects.highlight=function(o){return this.queue(function(){var el=$(this),props=['backgroundImage','backgroundColor','opacity'];var mode=$.effects.setMode(el,o.options.mode||'show');var color=o.options.color||"#ffff99";var oldColor=el.css("backgroundColor");$.effects.save(el,props);el.show();el.css({backgroundImage:'none',backgroundColor:color});var animation={backgroundColor:oldColor};if(mode=="hide")animation['opacity']=0;el.animate(animation,{queue:false,duration:o.duration,easing:o.options.easing,complete:function(){if(mode=="hide")el.hide();$.effects.restore(el,props);if(mode=="show"&&jQuery.browser.msie)this.style.removeAttribute('filter');if(o.callback)o.callback.apply(this,arguments);el.dequeue();}});});};})(jQuery);(function($){$.effects.pulsate=function(o){return this.queue(function(){var el=$(this);var mode=$.effects.setMode(el,o.options.mode||'show');var times=o.options.times||5;if(mode=='hide')times--;if(el.is(':hidden')){el.css('opacity',0);el.show();el.animate({opacity:1},o.duration/2,o.options.easing);times=times-2;} -for(var i=0;i').appendTo(document.body);if(o.options.className)transfer.addClass(o.options.className);transfer.addClass(o.options.className);transfer.css({top:position.top,left:position.left,height:el.outerHeight()-parseInt(transfer.css('borderTopWidth'))-parseInt(transfer.css('borderBottomWidth')),width:el.outerWidth()-parseInt(transfer.css('borderLeftWidth'))-parseInt(transfer.css('borderRightWidth')),position:'absolute'});position=target.offset();animation={top:position.top,left:position.left,height:target.outerHeight()-parseInt(transfer.css('borderTopWidth'))-parseInt(transfer.css('borderBottomWidth')),width:target.outerWidth()-parseInt(transfer.css('borderLeftWidth'))-parseInt(transfer.css('borderRightWidth'))};transfer.animate(animation,o.duration,o.options.easing,function(){transfer.remove();if(o.callback)o.callback.apply(el[0],arguments);el.dequeue();});});};})(jQuery); + --- a/owa/modules/base/js/includes/jquery/jquery.jgrowl_minimized.js +++ /dev/null @@ -1,4 +1,1 @@ -(function($){$.jGrowl=function(m,o){if($('#jGrowl').size()==0)$('
                      ').addClass($.jGrowl.defaults.position).appendTo('body');$('#jGrowl').jGrowl(m,o);};$.fn.jGrowl=function(m,o){if($.isFunction(this.each)){var args=arguments;return this.each(function(){var self=this;if($(this).data('jGrowl.instance')==undefined){$(this).data('jGrowl.instance',$.extend(new $.fn.jGrowl(),{notifications:[],element:null,interval:null}));$(this).data('jGrowl.instance').startup(this);} -if($.isFunction($(this).data('jGrowl.instance')[m])){$(this).data('jGrowl.instance')[m].apply($(this).data('jGrowl.instance'),$.makeArray(args).slice(1));}else{$(this).data('jGrowl.instance').create(m,o);}});};};$.extend($.fn.jGrowl.prototype,{defaults:{pool:0,header:'',group:'',sticky:false,position:'top-right',glue:'after',theme:'default',corners:'10px',check:250,life:3000,speed:'normal',easing:'swing',closer:true,closeTemplate:'×',closerTemplate:'
                      [ close all ]
                      ',log:function(e,m,o){},beforeOpen:function(e,m,o){},open:function(e,m,o){},beforeClose:function(e,m,o){},close:function(e,m,o){},animateOpen:{opacity:'show'},animateClose:{opacity:'hide'}},notifications:[],element:null,interval:null,create:function(message,o){var o=$.extend({},this.defaults,o);this.notifications[this.notifications.length]={message:message,options:o};o.log.apply(this.element,[this.element,message,o]);},render:function(notification){var self=this;var message=notification.message;var o=notification.options;var notification=$('
                      '+o.closeTemplate+'
                      '+o.header+'
                      '+message+'
                      ').data("jGrowl",o).addClass(o.theme).children('div.close').bind("click.jGrowl",function(){$(this).parent().trigger('jGrowl.close');}).parent();(o.glue=='after')?$('div.jGrowl-notification:last',this.element).after(notification):$('div.jGrowl-notification:first',this.element).before(notification);$(notification).bind("mouseover.jGrowl",function(){$(this).data("jGrowl").pause=true;}).bind("mouseout.jGrowl",function(){$(this).data("jGrowl").pause=false;}).bind('jGrowl.beforeOpen',function(){o.beforeOpen.apply(self.element,[self.element,message,o]);}).bind('jGrowl.open',function(){o.open.apply(self.element,[self.element,message,o]);}).bind('jGrowl.beforeClose',function(){o.beforeClose.apply(self.element,[self.element,message,o]);}).bind('jGrowl.close',function(){$(this).data('jGrowl').pause=true;$(this).trigger('jGrowl.beforeClose').animate(o.animateClose,o.speed,o.easing,function(){$(this).remove();o.close.apply(self.element,[self.element,message,o]);});}).trigger('jGrowl.beforeOpen').animate(o.animateOpen,o.speed,o.easing,function(){$(this).data("jGrowl").created=new Date();}).trigger('jGrowl.open');if($.fn.corner!=undefined)$(notification).corner(o.corners);if($('div.jGrowl-notification:parent',this.element).size()>1&&$('div.jGrowl-closer',this.element).size()==0&&this.defaults.closer!=false){$(this.defaults.closerTemplate).addClass('jGrowl-closer').addClass(this.defaults.theme).appendTo(this.element).animate(this.defaults.animateOpen,this.defaults.speed,this.defaults.easing).bind("click.jGrowl",function(){$(this).siblings().children('div.close').trigger("click.jGrowl");if($.isFunction(self.defaults.closer))self.defaults.closer.apply($(this).parent()[0],[$(this).parent()[0]]);});};},update:function(){$(this.element).find('div.jGrowl-notification:parent').each(function(){if($(this).data("jGrowl")!=undefined&&$(this).data("jGrowl").created!=undefined&&($(this).data("jGrowl").created.getTime()+$(this).data("jGrowl").life)<(new Date()).getTime()&&$(this).data("jGrowl").sticky!=true&&($(this).data("jGrowl").pause==undefined||$(this).data("jGrowl").pause!=true)){$(this).trigger('jGrowl.close');}});if(this.notifications.length>0&&(this.defaults.pool==0||$(this.element).find('div.jGrowl-notification:parent').size()');this.interval=setInterval(function(){$(e).data('jGrowl.instance').update();},this.defaults.check);if($.browser.msie&&parseInt($.browser.version)<7&&!window["XMLHttpRequest"])$(this.element).addClass('ie6');},shutdown:function(){$(this.element).removeClass('jGrowl').find('div.jGrowl-notification').remove();clearInterval(this.interval);}});$.jGrowl.defaults=$.fn.jGrowl.prototype.defaults;})(jQuery); --- a/owa/modules/base/js/includes/jquery/jquery.jmap-r72.js +++ /dev/null @@ -1,1361 +1,1 @@ -/** - * @classDescription The Mapifies variable is the main class object for jMaps - */ -var Mapifies; -if (!Mapifies) Mapifies = {}; - -/** - * The main object that holds the maps - */ -Mapifies.MapObjects = {}; - -/** - * Creates a new map on the passed element with the defined options. Creates a global object that contains the map. - * @method - * @namespace Mapifies.MapObjects - * @id Mapifies.MapObjects.Set - * @alias Mapifies.MapObjects.Set - * @param {jQuery} element The element that contains the map. - * @param {Object} options An object that contains the options. - * @return {Object} The object that contains the map. - */ -Mapifies.MapObjects.Set = function ( element, options ) { - var mapName = jQuery(element).attr('id'); - var thisMap = new GMap2(element); - Mapifies.MapObjects[mapName] = thisMap; - Mapifies.MapObjects[mapName].Options = options; - return Mapifies.MapObjects[mapName]; -}; - -/** - * Adds additional objects and functions to an existing MapObject - * @method - * @namespace Mapifies.MapObjects - * @id Mapifies.MapObjects.Append - * @alias Mapifies.MapObjects.Append - * @param {jQuery} element The element that contains the map - * @param {Object} description The name of the object to create - * @param {Object} appending The object or function to append - */ -Mapifies.MapObjects.Append = function ( element, description, appending ) { - var mapName = jQuery(element).attr('id'); - Mapifies.MapObjects[mapName][description] = appending; -}; - -/** - * Returns the current map object for the passed element - * @method - * @namespace Mapifies.MapObjects - * @id Mapifies.MapObjects.Get - * @alias Mapifies.MapObjects.Get - * @param {jQuery} element The element that contains the map. - * @return {Object} Mapifies The Mapifies object that contains the map. - */ -Mapifies.MapObjects.Get = function ( element ) { - return Mapifies.MapObjects[jQuery(element).attr('id')]; -}; - -/** - * The main function to initialise the map - * @method - * @namespace Mapifies - * @id Mapifies.Initialise - * @alias Mapifies.Initialise - * @param {jQuery} element The element to initialise the map on. - * @param {Object} options The object that contains the options. - * @param {Object} callback The callback function to pass out after initialising the map. - * @return {Function} callback The callback option with the map object and options. - */ -Mapifies.Initialise = function ( element, options, callback ) { - /** - * Default options for Initialise - * @method - * @namespace Mapifies.Initialise - * @id Mapifies.Initialise.defaults - * @alias Mapifies.Initialise.defaults - * @param {String} language The locale language for the map - * @param {String} mapType The type of map to create. Options are 'map' (default), 'sat' and 'hybrid'. - * @param {Object} mapCenter An array that contains the Lat/Lng coordinates of the map center. - * @param {Number} mapZoom The initial zoom level of the map. - * @param {String} mapControl The option for the map control. The options are 'small' (default), 'large' or 'none' - * @param {Boolean} mapEnableType Defines if the buttons for map type are shown. Default false. - * @param {Boolean} mapEnableOverview Defines if the map overview is shown. Default false. - * @param {Boolean} mapEnableDragging Defines if the map is draggable or not. Default true. - * @param {Boolean} mapEnableInfoWindows Defines if info windows are shown on the map or not. Default true. - * @param {Boolean} mapEnableDoubleClickZoom Defines if double clicking zooms the map. Default false. - * @param {Boolean} mapEnableSmoothZoom Defines if smooth scrolling is enabled. Default false. - * @param {Boolean} mapEnableGoogleBar Defines if the google map search tool is enabled. Default false. - * @param {Boolean} mapEnableScaleControl Defines if the scale bar is shown. Default false. - * @param {Boolean} mapShowjMapsIcon Defines if the jMaps icon is shown. Default true. - * @param {Boolean} debugMode Defines if the map object created is returned to the Firebug console. Default false. - * @return {Object} The options for SearchAddress - */ - function defaults() { - return { - // Initial type of map to display - 'language': 'en', - // Options: "map", "sat", "hybrid" - 'mapType': 'map', - // Initial map center - 'mapCenter': [55.958858,-3.162302], - // Initial zoom level - 'mapZoom': 12, - // Initial map control size - // Options: "large", "small", "none" - 'mapControl': 'small', - // Initialise type of map control - 'mapEnableType': false, - // Initialise small map overview - 'mapEnableOverview': false, - // Enable map dragging when left button held down - 'mapEnableDragging': true, - // Enable map info windows - 'mapEnableInfoWindows': true, - // Enable double click zooming - 'mapEnableDoubleClickZoom': false, - // Enable zooming with scroll wheel - 'mapEnableScrollZoom': false, - // Enable smooth zoom - 'mapEnableSmoothZoom': false, - // Enable Google Bar - 'mapEnableGoogleBar': false, - // Enables scale bar - 'mapEnableScaleControl': false, - // Enable the Mapifies icon - 'mapShowjMapsIcon': true, - //Debug Mode - 'debugMode': false - }; - }; - options = jQuery.extend(defaults(), options); - - if (GBrowserIsCompatible()) { - - var thisMap = Mapifies.MapObjects.Set(element, options); - var mapType = Mapifies.GetMapType(options.mapType); - thisMap.setCenter(new GLatLng(options.mapCenter[0], options.mapCenter[1]), options.mapZoom, mapType); - - if (options.mapShowjMapsIcon) { - Mapifies.AddScreenOverlay(element, - { - 'imageUrl':'http://hg.digitalspaghetti.me.uk/jmaps/raw-file/3228fade0b3c/docs/images/jmaps-mapicon.png', - 'screenXY':[70,10], - 'overlayXY':[0,0], - 'size':[42,25] - } - ); - } - - // Attach a controller to the map view - // Will attach a large or small. If any other value passed (i.e. "none") it is ignored - switch (options.mapControl) { - case "small": - thisMap.addControl(new GSmallMapControl()); - break; - case "large": - thisMap.addControl(new GLargeMapControl()); - break; - }; - // Type of map Control (Map,Sat,Hyb) - if (options.mapEnableType) - thisMap.addControl(new GMapTypeControl()); // Off by default - // Show the small overview map - if (options.mapEnableOverview) - thisMap.addControl(new GOverviewMapControl());// Off by default - // GMap2 Functions (in order of the docs for clarity) - // Enable a mouse-dragable map - if (!options.mapEnableDragging) - thisMap.disableDragging(); // On by default - // Enable Info Windows - if (!options.mapEnableInfoWindows) - thisMap.disableInfoWindow(); // On by default - // Enable double click zoom on the map - if (options.mapEnableDoubleClickZoom) - thisMap.enableDoubleClickZoom(); // On by default - // Enable scrollwheel on the map - if (options.mapEnableScrollZoom) - thisMap.enableScrollWheelZoom(); //Off by default - // Enable smooth zooming - if (options.mapEnableSmoothZoom) - thisMap.enableContinuousZoom(); // Off by default - // Enable Google Bar - if (options.mapEnableGoogleBar) - thisMap.enableGoogleBar(); //Off by default - // Enables Scale bar - if (options.mapEnableScaleControl) - thisMap.addControl(new GScaleControl()); - - if (options.debugMode) - console.log(Mapifies); - - if (typeof callback == 'function') - return callback(thisMap, element, options); - } else { - jQuery(element).text('Your browser does not support Google Maps.'); - return false; - } - return; -}; - -/** - * A function to move a map to a passed position - * @method - * @namespace Mapifies - * @id Mapifies.MoveTo - * @alias Mapifies.MoveTo - * @param {jQuery} element The element to initialise the map on. - * @param {Object} options The object that contains the options. - * @param {Object} callback The callback function to pass out after initialising the map. - * @return {Function} callback The callback option with the map object and options or true. - */ -Mapifies.MoveTo = function ( element, options, callback ) { - /** - * Default options for MoveTo - * @method - * @namespace Mapifies - * @id Mapifies.MoveTo - * @alias Mapifies.MoveTo - * @param {String} centerMethod The element to initialise the map on. - * @param {String} mapType The type of map to create. Options are 'map' (default), 'sat' and 'hybrid'. - * @param {Object} mapCenter An array that contains the Lat/Lng coordinates of the map center. - * @param {Number} mapZoom The initial zoom level of the map. - * @return {Function} callback The callback option with the point object and options or true. - */ - function defaults() { - return { - 'centerMethod': 'normal', - 'mapType': null, - 'mapCenter': [], - 'mapZoom': null - }; - }; - var thisMap = Mapifies.MapObjects.Get(element); - options = jQuery.extend(defaults(), options); - if (options.mapType) - var mapType = Mapifies.GetMapType(options.mapType); - var point = new GLatLng(options.mapCenter[0], options.mapCenter[1]); - switch (options.centerMethod) { - case 'normal': - thisMap.setCenter(point, options.mapZoom, mapType); - break; - case 'pan': - thisMap.panTo(point); - break; - } - if (typeof callback == 'function') return callback(point, options); -}; - -/** - * Save your current position on the map - * @method - * @namespace Mapifies - * @id Mapifies.SavePosition - * @alias Mapifies.SavePosition - * @param {jQuery} element The element to initialise the map on. - * @param {Object} options The object that contains the options. - * @param {Object} callback The callback function to pass out after initialising the map. - * @return {Function} callback The callback option with the map object and options or true. - */ -Mapifies.SavePosition = function( element, options, callback ) { - var thisMap = Mapifies.MapObjects.Get(element); - thisMap.savePosition(); - if (typeof callback == 'function') return callback(thisMap); -}; - -/** - * Goto a previously saved position - * @method - * @namespace Mapifies - * @id Mapifies.GotoSavedPosition - * @alias Mapifies.GotoSavedPosition - * @param {jQuery} element The element to initialise the map on. - * @param {Object} options The object that contains the options. - * @param {Function} callback The callback function to pass out after initialising the map. - * @return {Function} callback The callback option with the map object and options or true. - */ -Mapifies.GotoSavedPosition = function ( element, options, callback) { - var thisMap = Mapifies.MapObjects.Get(element); - thisMap.returnToSavedPosition(); - if (typeof callback == 'function') return callback(thisMap); -}; - -/** - * Create a keyboard handler to handle keyboard navigation - * @method - * @namespace Mapifies - * @id Mapifies.CreateKeyboardHandler - * @alias Mapifies.CreateKeyboardHandler - * @param {jQuery} element The element to initialise the map on. - * @param {Object} options The object that contains the options. - * @param {Object} callback The callback function to pass out after initialising the map. - * @return {Function} callback The callback option with the keyboard handler. - */ -Mapifies.CreateKeyboardHandler = function( element, options, callback ) { - var thisMap = Mapifies.MapObjects.Get(element); - var keyboardHandler = new GKeyboardHandler(thisMap); - if (typeof callback == 'function') return callback(keyboardHandler); -}; - -/** - * Check if a map container element has been resized or toggled from show/hide (Added r68) - * @method - * @namespace Mapifies - * @id Mapifies.CheckResize - * @alias Mapifies.CheckResize - * @param {jQuery} element The element to initialise the map on. - * @param {Object} options The object that contains the options. - * @param {Object} callback The callback function to pass out after initialising the map. - * @return {Function} callback The callback option with the map object handler. - */ -Mapifies.CheckResize = function( element, options, callback ) { - var thisMap = Mapifies.MapObjects.Get(element); - thisMap.checkResize(); - if (typeof callback == 'function') return callback(element); -}; - -/** - * The SearchAddress function takes a map, options and callback function. The options can contain either an address string, to which a point is returned - or reverse geocoding a GLatLng, where an address is returned - * @method - * @namespace Mapifies - * @id Mapifies.SearchAddress - * @param {jQuery} element The jQuery object containing the map element. - * @param {Object} options An object of options - * @param {Function} callback The callback function that returns the result - * @return {Function} Returns a passed callback function or true if no callback specified - */ -Mapifies.SearchAddress = function( element, options, callback) { - /** - * Default options for SearchAddress - * @method - * @namespace Mapifies.SearchAddress - * @id Mapifies.SearchAddress.defaults - * @alias Mapifies.SearchAddress.defaults - * @param {String} query The Address or GLatLng to query in the geocoder - * @param {String} returnType The type of value you want to return from Google. This is mapped to the function names available, the options are 'getLatLng' which returns coordinates, and 'getLocations' which returns points. - * @param {GGeoCache} cache The GGeoCache to store the results in if required - * @param {String} countryCode The country code to localise results - * @return {Object} The options for SearchAddress - */ - function defaults() { - return { - // Address to search for - 'query': null, - // Return Type - 'returnType': 'getLatLng', - // Optional Cache to store Geocode Data (not implemented yet) - 'cache': undefined, - // Country code for localisation (not implemented yet) - 'countryCode': 'uk' - }; - }; - var thisMap = Mapifies.MapObjects.Get(element); - options = jQuery.extend(defaults(), options); - - // Check to see if the Geocoder already exists in the object - // or create a temporary locally scoped one. - if (typeof thisMap.Geocoder === 'undefined') { - if (typeof options.cache === 'undefined') { - var geoCoder = new GClientGeocoder(); - } else { - var geoCoder = new GClientGeocoder(cache); - } - Mapifies.MapObjects.Append(element, 'Geocoder', geoCoder); - // We need to get the map object again, now we have attached the geocoder - thisMap = Mapifies.MapObjects.Get(element); - } - thisMap.Geocoder[options.returnType](options.query, function(result){ - if (typeof callback === 'function') { - return callback(result, options); - } - }); - return; -}; - -/** - * The SearchDirections function allows you to search for directions between two or more points and return it to a map and a directions panel - * @method - * @namespace Mapifies - * @id Mapifies.SearchDirections - * @param {jQuery} element The jQuery object containing the map element. - * @param {Object} options An object of options - * @param {Function} callback The callback function that returns the result - * @return {Function} Returns a passed callback function or true if no callback specified - */ -Mapifies.SearchDirections = function( element, options, callback) { - /** - * Default options for SearchDirections - * @method - * @namespace Mapifies.SearchDirections - * @id Mapifies.SearchDirections.defaults - * @alias Mapifies.SearchDirections.defaults - * @param {String} query The directions query to parse. Must contain one 'from:' and one 'to:' query, but can contain multiple 'to:' queries. - * @param {String} panel The ID of the panel that the directions will be sent to. - * @param {String} local The local for the directions. - * @param {String} travelMode Allows you to specify the travel mode, either 'driving' or 'walking'. Driving is the default. - * @param {Boolean} avoidHighways Allows you to avoid Highways/Motorway's on trips. Please note this may not always be possible depending on the route. - * @param {Boolean} getPolyline Decides if the returned result will draw a polyline on the map on the journey. Default is True. - * @param {Boolean} getSteps Decides if the textual directions are returned to the directions panel. - * @param {Boolean} preserveViewport Decides if the map will zoom and center in on the directions results. - * @param {Boolean} clearLastSearch Clears the last direction search if you do not want to have multiple points. - * @return {Object} The options for SearchDirections - */ - function defaults() { - return { - // From address - 'query': null, - // Optional panel to show text directions - 'panel': null, - //The locale to use for the directions result. - 'locale': 'en_GB', - //The mode of travel, such as driving (default) or walking - 'travelMode': 'driving', - // Option to avoid highways - 'avoidHighways': false, - // Get polyline - 'getPolyline': true, - // Get directions - 'getSteps': true, - // Preserve Viewport - 'preserveViewport' : false, - // clear last search - 'clearLastSearch' : false - }; - }; - var thisMap = Mapifies.MapObjects.Get(element); - options = jQuery.extend(defaults(), options); - - var queryOptions = { - 'locale': options.locale, - 'travelMode': options.travelMode, - 'avoidHighways': options.avoidHighways, - 'getPolyline': options.getPolyline, - 'getSteps': options.getSteps, - 'preserveViewport' : options.preserveViewport - }; - - var panel = $(options.panel).get(0); - - if (typeof thisMap.Directions === 'undefined') { - Mapifies.MapObjects.Append(element, 'Directions', new GDirections(thisMap, panel)); - } - - GEvent.addListener(thisMap.Directions, "load", onLoad); - GEvent.addListener(thisMap.Directions, "error", onError); - - if (options.clearLastSearch) { - thisMap.Directions.clear(); - } - - thisMap.Directions.load(options.query, queryOptions); - - function onLoad() { - if (typeof callback == 'function') return callback(thisMap.Directions, options); - } - - function onError() { - if (typeof callback == 'function') return callback(thisMap.Directions, options); - } - - return; -}; - -/** - * Create an adsense ads manager for the map. The Adsense manager will parse your page and show adverts on the map that relate to this. Requires your adsense publisher id and channel - * @method - * @namespace Mapifies - * @id Mapifies.CreateAdsManager - * @param {jQuery} element The jQuery object containing the map element. - * @param {Object} options An object of options - * @param {Function} callback The callback function that returns the result - * @return {Function} Returns a passed callback function or true if no callback specified - */ - -Mapifies.CreateAdsManager = function( element, options, callback) { - /** - * Default options for CreateAdsManager - * @method - * @namespace Mapifies.CreateAdsManager - * @id Mapifies.CreateAdsManager.defaults - * @alias Mapifies.CreateAdsManager.defaults - * @param {String} publisherId Your Adsense publisher ID - * @param {Number} maxAdsOnMap The maximum number of ads to show on the map at one time - * @param {Number} channel The AdSense channel this belongs to - * @param {Number} minZoomLevel The minimum zoom level to begin showing ads at - * @return {Object} The options for CreateAdsManager - */ - function defaults() { - return { - 'publisherId':'', - 'maxAdsOnMap':3, - 'channel':0, - 'minZoomLevel':6 - } - }; - var thisMap = Mapifies.MapObjects.Get(element); - options = jQuery.extend(defaults(), options); - - var adsOptions = { - 'maxAdsOnMap':options.maxAdsOnMap, - 'channel':options.channel, - 'minZoomLevel':options.minZoomLevel - } - - if (typeof thisMap.AdsManager == 'undefined') { - Mapifies.MapObjects.Append(element, 'AdsManager', new GAdsManager(thisMap, options.publisherId, adsOptions)); - } - - if (typeof callback == 'function') return callback(thisMap.AdsManager, options); -}; -/** - * This function allows you to pass a GeoXML or KML feed to a Google map. - * @method - * @namespace Mapifies - * @id Mapifies.AddFeed - * @alias Mapifies.AddFeed - * @param {jQuery} element The element to initialise the map on. - * @param {Object} options The object that contains the options. - * @param {Fucntion} callback The callback function to pass out after initialising the map. - * @return {Function} callback The callback option with the feed object and options. - */ -Mapifies.AddFeed = function( element, options, callback ) { - /** - * Default options for AddFeed - * @method - * @namespace Mapifies.AddFeed - * @id Mapifies.AddFeed.defaults - * @alias Mapifies.AddFeed.defaults - * @param {String} feedUrl The URL of the GeoXML or KML feed. - * @param {Object} mapCenter An array with a lat/lng position to center the map on - * @return {Object} The options for AddFeed - */ - function defaults() { - return { - // URL of the feed to pass (required) - 'feedUrl': null, - // Position to center the map on (optional) - 'mapCenter': [] - }; - }; - var thisMap = Mapifies.MapObjects.Get(element); - options = jQuery.extend(defaults(), options); - - // Load feed - var feed = new GGeoXml(options.feedUrl); - // Add as overlay - thisMap.addOverlay(feed); - - // If the user has passed the optional mapCenter, - // then center the map on that point - if (options.mapCenter[0] && options.mapCenter[1]) - thisMap.setCenter(new GLatLng(options.mapCenter[0], options.mapCenter[1])); - - if (typeof callback == 'function') return callback( feed, options ); - return; -}; - -/** - * This function allows you to remove a GeoXML or KML feed from a Google map. - * @method - * @namespace Mapifies - * @id Mapifies.RemoveFeed - * @alias Mapifies.RemoveFeed - * @param {jQuery} element The element to initialise the map on. - * @param {GGeoXML} feed The feed to remove from the map - * @param {Function} callback The callback function to pass out after initialising the map. - * @return {Function} callback The callback option with the feed object and options. - */ -Mapifies.RemoveFeed = function ( element, feed, callback ) { - var thisMap = Mapifies.MapObjects.Get(element); - thisMap.removeOverlay(feed); - if (typeof callback == 'function') return callback( feed ); - return; -}; -/** - * This function allows you to add a ground overlay to a map - * @method - * @namespace Mapifies - * @id Mapifies.AddGroundOverlay - * @alias Mapifies.AddGroundOverlay - * @param {jQuery} element The element to initialise the map on. - * @param {Object} options The object that contains the options. - * @param {Function} callback The callback function to pass out after initialising the map. - * @return {Function} callback The callback option with the feed object and options. - */ -Mapifies.AddGroundOverlay = function( element, options, callback) { - /** - * Default options for AddGroundOverlay - * @method - * @namespace Mapifies.AddGroundOverlay - * @id Mapifies.AddGroundOverlay.defaults - * @alias Mapifies.AddGroundOverlay.defaults - * @param {Object} overlaySouthWestBounds The coordinates of the South West bounds of the image - * @param {Object} overlayNorthEastBounds The coordinates of the North East bounds of the image - * @param {String} overlayImage The URL of the image to be loaded - * @return {Object} The options for AddGroundOverlay - */ - function defaults() { - return { - // South West Boundry - 'overlaySouthWestBounds': undefined, - // North East Boundry - 'overlayNorthEastBounds': undefined, - // Image - 'overlayImage': undefined - }; - }; - - var thisMap = Mapifies.MapObjects.Get(element); - options = jQuery.extend(defaults(), options); - - var boundries = new GLatLngBounds(new GLatLng(options.overlaySouthWestBounds[0], options.overlaySouthWestBounds[1]), new GLatLng(options.overlayNorthEastBounds[0], options.overlayNorthEastBounds[1])); - groundOverlay = new GGroundOverlay(options.overlayImage, boundries); - - thisMap.addOverlay(groundOverlay); - - if (typeof callback == 'function') return callback( groundOverlay, options ); - return; -}; - -/** - * This function removes an existing ground overlay - * @method - * @namespace Mapifies - * @id Mapifies.RemoveGroundOverlay - * @alias Mapifies.RemoveGroundOverlay - * @param {jQuery} element The element to initialise the map on. - * @param {GGroundOverlay} groundOverlay The ground overlay to remove. - * @param {Function} callback The callback function to pass out after initialising the map. - * @return {Function} callback The callback option with the feed object and options. - */ -Mapifies.RemoveGroundOverlay = function ( element, groundOverlay, callback ) { - var thisMap = Mapifies.MapObjects.Get(element); - thisMap.removeOverlay(groundOverlay); - if (typeof callback === 'function') return callback(groundOverlay); - return; -}; -/** - * This function allows you to add markers to the map with several options - * @method - * @namespace Mapifies - * @id Mapifies.AddMarker - * @alias Mapifies.AddMarker - * @param {jQuery} element The element to initialise the map on. - * @param {Object} options The object that contains the options. - * @param {Function} callback The callback function to pass out after initialising the map. - * @return {Function} callback The callback option with the marker object and options. - */ -Mapifies.AddMarker = function ( element, options, callback ) { - /** - * Default options for AddGroundOverlay - * @method - * @namespace Mapifies.AddGroundOverlay - * @id Mapifies.AddGroundOverlay.defaults - * @alias Mapifies.AddGroundOverlay.defaults - * @param {Object} pointLatLng The Lat/Lng coordinates of the marker. - * @param {String} pointHTML The HTML to appear in the markers info window. - * @param {String} pointOpenHTMLEvent The javascript event type to open the marker info window. Default is 'click'. - * @param {Boolean} pointIsDraggable Defines if the point is draggable by the end user. Default false. - * @param {Boolean} pointIsRemovable Defines if the point can be removed by the user. Default false. - * @param {Boolean} pointRemoveEvent The event type to remove a marker. Default 'dblclick'. - * @param {Number} pointMinZoom The minimum zoom level to display the marker if using a marker manager. - * @param {Number} pointMaxZoom The maximum zoom level to display the marker if using a marker manager. - * @param {GIcon} pointIcon A GIcon to display instead of the standard marker graphic. - * @param {Boolean} centerMap Automatically center the map on the new marker. Default false. - * @param {String} centerMoveMethod The method in which to move to the marker. Options are 'normal' (default) and 'pan'. Added r64 - * @return {Object} The options for AddGroundOverlay - */ - function defaults() { - var values = { - 'pointLatLng': undefined, - 'pointHTML': undefined, - 'pointOpenHTMLEvent': 'click', - 'pointIsDraggable': false, - 'pointIsRemovable': false, - 'pointRemoveEvent': 'dblclick', - 'pointMinZoom': 4, - 'pointMaxZoom': 17, - 'pointIcon': undefined, - 'centerMap': false, - 'centerMoveMethod':'normal' - }; - return values; - }; - var thisMap = Mapifies.MapObjects.Get(element); - options = jQuery.extend({}, defaults(), options); - - var markerOptions = {} - - if (typeof options.pointIcon == 'object') - jQuery.extend(markerOptions, {'icon': options.pointIcon}); - - if (options.pointIsDraggable) - jQuery.extend(markerOptions, {'draggable': options.pointIsDraggable}); - - if (options.centerMap) { - switch (options.centerMoveMethod) { - case 'normal': - thisMap.setCenter(new GLatLng(options.pointLatLng[0],options.pointLatLng[1])); - break; - case 'pan': - thisMap.panTo(new GLatLng(options.pointLatLng[0],options.pointLatLng[1])); - break; - } - } - - - // Create marker, optional parameter to make it draggable - var marker = new GMarker(new GLatLng(options.pointLatLng[0],options.pointLatLng[1]), markerOptions); - - // If it has HTML to pass in, add an event listner for a click - if(options.pointHTML) - GEvent.addListener(marker, options.pointOpenHTMLEvent, function(){ - marker.openInfoWindowHtml(options.pointHTML, {maxContent: options.pointMaxContent, maxTitle: options.pointMaxTitle}); - }); - // If it is removable, add dblclick event - if(options.pointIsRemovable) - GEvent.addListener(marker, options.pointRemoveEvent, function(){ - thisMap.removeOverlay(marker); - }); - - // If the marker manager exists, add it - if(thisMap.MarkerManager) { - thisMap.MarkerManager.addMarker(marker, options.pointMinZoom, options.pointMaxZoom); - } else { - // Direct rendering to map - thisMap.addOverlay(marker); - } - - if (typeof callback == 'function') return callback(marker, options); - return; -}; - - -/** - * This function allows you to remove markers from the map - * @method - * @namespace Mapifies - * @id Mapifies.RemoveMarker - * @alias Mapifies.RemoveMarker - * @param {jQuery} element The element to initialise the map on. - * @param {GMarker} options The marker to be removed - * @param {Function} callback The callback function to pass out after initialising the map. - * @return {Function} callback The callback option with the marker object. - */ -Mapifies.RemoveMarker = function ( element, marker, callback ) { - var thisMap = Mapifies.MapObjects.Get(element); - thisMap.removeOverlay(marker); - if (typeof callback === 'function') return callback(marker); - return; -}; - -/** - * This function allows you to create a marker manager to store and manage any markers created on the map. Google recommends not using this marker manager and instead using the open source one. - * @method - * @deprecated - * @namespace Mapifies - * @id Mapifies.CreateMarkerManager - * @alias Mapifies.CreateMarkerManager - * @param {jQuery} element The element to initialise the map on. - * @param {GMarker} options The marker to be removed - * @param {Function} callback The callback function to pass out after initialising the map. - * @return {Function} callback The callback option with the marker object and options. - */ -Mapifies.CreateMarkerManager = function(element, options, callback) { - /** - * Default options for CreateMarkerManager - * @method - * @namespace Mapifies.CreateMarkerManager - * @id Mapifies.CreateMarkerManager.defaults - * @alias Mapifies.CreateMarkerManager.defaults - * @param {Number} borderPadding Specifies, in pixels, the extra padding outside the map's current viewport monitored by a manager. Markers that fall within this padding are added to the map, even if they are not fully visible. - * @param {Number} maxZoom The maximum zoom level to show markers at - * @param {Boolean} trackMarkers Indicates whether or not a marker manager should track markers' movements. - * @return {Object} The options for CreateMarkerManager - */ - function defaults() { - return { - 'markerManager': 'GMarkerManager', - // Border Padding in pixels - 'borderPadding': 100, - // Max zoom level - 'maxZoom': 17, - // Track markers - 'trackMarkers': false - } - } - var thisMap = Mapifies.MapObjects.Get(element); - options = jQuery.extend(defaults(), options); - - var markerManagerOptions = { - 'borderPadding': options.borderPadding, - 'maxZoom': options.maxZoom, - 'trackMarkers': options.trackMarkers - } - - var markerManager = new window[options.markerManager](thisMap, options); - Mapifies.MapObjects.Append(element, 'MarkerManager',markerManager); - - // Return the callback - if (typeof callback == 'function') return callback( markerManager, options ); -}; -/** - * This function allows you to add a polygon to a map using GLatLng points - * @method - * @namespace Mapifies - * @id Mapifies.AddPolygon - * @alias Mapifies.AddPolygon - * @param {jQuery} element The element to initialise the map on. - * @param {Object} options The object that contains the options. - * @param {Function} callback The callback function to pass out after initialising the map. - * @return {Function} callback The callback option with the polygon object, polygon options and options. - */ -Mapifies.AddPolygon = function( element, options, callback ) { - /** - * Default options for AddPolygon - * @method - * @namespace Mapifies.AddPolygon - * @id Mapifies.AddPolygon.defaults - * @alias Mapifies.AddPolygon.defaults - * @param {Object} polygonPoints An array of Lat/Lng points that make up the vertexes of the polygon. - * @param {String} polygonStrokeColor The stroke colour for the polygon. - * @param {Number} polygonStrokeWeight The thickness of the polygon line. - * @param {Number} polygonStrokeOpacity A value from 0 to 1 of for the line opacity. - * @param {String} polygonFillColor The colour of the fill area for the polygon. - * @param {Number} polygonFillOpacity The value from 0 to 1 for the polygon fill opacity. - * @param {Object} mapCenter An array containing the LatLng point to center on. - * @param {Boolean} polygonClickable Defines if the polygon is clickable or not. Default true. - * @return {Object} The options for AddPolygon - */ - function defaults() { - return { - // An array of GLatLng objects - 'polygonPoints': [], - // The outer stroke colour - 'polygonStrokeColor': "#000000", - // Stroke thickness - 'polygonStrokeWeight': 5, - // Stroke Opacity - 'polygonStrokeOpacity': 1, - // Fill colour - 'polygonFillColor': "#ff0000", - // Fill opacity - 'polygonFillOpacity': 1, - // Optional center map - 'mapCenter': undefined, - // Is polygon clickable? - 'polygonClickable': true - } - } - - var thisMap = Mapifies.MapObjects.Get(element); - options = jQuery.extend(defaults(), options); - var polygonOptions = {}; - - if (!options.polygonClickable) - polygonOptions = jQuery.extend(polygonOptions, {clickable: false}); - - if(typeof options.mapCenter !== 'undefined' && options.mapCenter[0] && options.mapCenter[1]) - thisMap.setCenter(new GLatLng(options.mapCenter[0], options.mapCenter[1])); - - var allPoints = []; - jQuery.each(options.polygonPoints, function(i, point) { - allPoints.push(new GLatLng(point[0],point[1])); - }); - - var polygon = new GPolygon(allPoints, options.polygonStrokeColor, options.polygonStrokeWeight, options.polygonStrokeOpacity, options.polygonFillColor, options.polygonFillOpacity, polygonOptions); - thisMap.addOverlay(polygon); - - if (typeof callback == 'function') return callback(polygon, polygonOptions, options); - return; -} - -/** - * This function allows you to remove a polygon from the map - * @method - * @namespace Mapifies - * @id Mapifies.RemovePolygon - * @alias Mapifies.RemovePolygon - * @param {jQuery} element The element to initialise the map on. - * @param {GPolygon} polygon The polygon to be removed - * @param {Function} callback The callback function to pass out after initialising the map. - * @return {Function} callback The callback option with the polygon. - */ -Mapifies.RemovePolygon = function ( element, polygon, callback ) { - var thisMap = Mapifies.MapObjects.Get(element); - thisMap.removeOverlay(polygon); - if (typeof callback === 'function') return callback(polygon); - return; -}; -/** - * This function allows you to add a polyline to a map using GLatLng points - * @method - * @namespace Mapifies - * @id Mapifies.AddPolyline - * @alias Mapifies.AddPolyline - * @param {jQuery} element The element to initialise the map on. - * @param {Object} options The object that contains the options. - * @param {Function} callback The callback function to pass out after initialising the map. - * @return {Function} callback The callback option with the polygon object, polygon options and options. - */ -Mapifies.AddPolyline = function (element, options, callback) { - /** - * Default options for AddPolyline - * @method - * @namespace Mapifies.AddPolyline - * @id Mapifies.AddPolygon.defaults - * @alias Mapifies.AddPolygon.defaults - * @param {Object} polylinePoints An array of Lat/Lng points that make up the vertexes of the polyline. - * @param {String} polylineStrokeColor The stroke colour for the polyline. - * @param {Number} polylineStrokeWidth The thickness of the polyline line. - * @param {Number} polylineStrokeOpacity A value from 0 to 1 of for the line opacity. - * @param {Object} mapCenter An array containing the LatLng point to center on. - * @param {Boolean} polylineGeodesic Defines if the line follows the curve of the earth. Default false. - * @param {Boolean} polylineClickable Defines if the polygon is clickable or not. Default true. - * @return {Object} The options for AddPolyline - */ - function defaults() { - return { - // An array of GLatLng objects - 'polylinePoints': [], - // Colour of the line - 'polylineStrokeColor': "#ff0000", - // Width of the line - 'polylineStrokeWidth': 10, - // Opacity of the line - 'polylineStrokeOpacity': 1, - // Optional center map - 'mapCenter': [], - // Is line Geodesic (i.e. bends to the curve of the earth)? - 'polylineGeodesic': false, - // Is line clickable? - 'polylineClickable': true - }; - }; - - var thisMap = Mapifies.MapObjects.Get(element); - options = jQuery.extend(defaults(), options); - var polyLineOptions = {}; - if (options.polylineGeodesic) - jQuery.extend(polyLineOptions, {geodesic: true}); - - if(!options.polylineClickable) - jQuery.extend(polyLineOptions, {clickable: false}); - - if (options.mapCenter[0] && options.mapCenter[1]) - thisMap.setCenter(new GLatLng(options.mapCenter[0], options.mapCenter[1])); - - var allPoints = []; - jQuery.each(options.polylinePoints, function(i, point) { - allPoints.push(new GLatLng(point[0],point[1])); - }); - - var polyline = new GPolyline(allPoints, options.polylineStrokeColor, options.polylineStrokeWidth, options.polylineStrokeOpacity, polyLineOptions); - thisMap.addOverlay(polyline); - - if (typeof callback == 'function') return callback(polyline, polyLineOptions, options); - return; -} - -/** - * This function allows you to remove a polyline from the map - * @method - * @namespace Mapifies - * @id Mapifies.RemovePolyline - * @alias Mapifies.RemovePolyline - * @param {jQuery} element The element to initialise the map on. - * @param {GPolyline} polyline The polyline to be removed - * @param {Function} callback The callback function to pass out after initialising the map. - * @return {Function} callback The callback option with the polyline. - */ -Mapifies.RemovePolyline = function (element, polyline, callback ) { - var thisMap = Mapifies.MapObjects.Get(element); - thisMap.removeOverlay(polyline); - if (typeof callback === 'function') return callback(polyline); - return; -}; - -/** - * This function allows you to add a screen overlay to a map. - * @method - * @namespace Mapifies - * @id Mapifies.AddScreenOverlay - * @alias Mapifies.AddScreenOverlay - * @param {jQuery} element The element to initialise the map on. - * @param {Object} options The object that contains the options. - * @param {Function} callback The callback function to pass out after initialising the map. - * @return {Function} callback The callback option with the screen overlay and options. - */ -Mapifies.AddScreenOverlay = function( element, options, callback ) { - /** - * Default options for AddScreenOverlay - * @method - * @namespace Mapifies.AddScreenOverlay - * @id Mapifies.AddScreenOverlay.defaults - * @alias Mapifies.AddScreenOverlay.defaults - * @param {String} imageUrl The URL of the image to load. - * @param {Object} screenXY The X/Y position in the viewport to place the image. - * @param {Object} overlayXY The overlay X/Y position in the viewport. - * @param {Object} size The size of the image, which is converted to a GSize. - * @return {Object} The options for AddScreenOverlay - */ - function defaults() { - return { - 'imageUrl':'', - 'screenXY':[], - 'overlayXY':[], - 'size':[] - }; - }; - var thisMap = Mapifies.MapObjects.Get(element); - options = jQuery.extend(defaults(), options); - - var overlay = new GScreenOverlay(options.imageUrl, new GScreenPoint(options.screenXY[0],options.screenXY[1]), new GScreenPoint(options.overlayXY[0],options.overlayXY[1]), new GScreenSize(options.size[0],options.size[1])); - thisMap.addOverlay(overlay); - - if (typeof callback == 'function') return callback(overlay, options); -}; - -/** - * This function allows you to remove a screen overlay from the map - * @method - * @namespace Mapifies - * @id Mapifies.RemoveScreenOverlay - * @alias Mapifies.RemoveScreenOverlay - * @param {jQuery} element The element to initialise the map on. - * @param {GScreenOverlay} overlay The overlay to be removed - * @param {Function} callback The callback function to pass out after initialising the map. - * @return {Function} callback The callback option with the overlay. - */ -Mapifies.RemoveScreenOverlay = function ( element, overlay, callback ) { - var thisMap = Mapifies.MapObjects.Get(element); - thisMap.removeOverlay(overlay); - if (typeof callback === 'function') return callback(overlay); - return; -}; - -/** - * This function allows you to add a Google Streetview - * @method - * @namespace Mapifies - * @id Mapifies.CreateStreetviewPanorama - * @alias Mapifies.CreateStreetviewPanorama - * @param {jQuery} element The element to initialise the map on. - * @param {Object} options The object that contains the options. - * @param {Function} callback The callback function to pass out after initialising the map. - * @return {Function} callback The callback option with the street view. - */ -Mapifies.CreateStreetviewPanorama = function( element, options, callback ) { - /** - * Default options for CreateStreetviewPanorama - * @method - * @namespace Mapifies.CreateStreetviewPanorama - * @id Mapifies.CreateStreetviewPanorama.defaults - * @alias Mapifies.CreateStreetviewPanorama.defaults - * @param {String} overideContainer A ID of a div to put the street view into, otherwise it will default to the map. - * @param {Object} latlng The starting Lat/Lng of the streetview - this is required. - * @param {Object} pov The point of view to initialse the map on. This is 3 values, X/Y/Z - * @return {Object} The options for CreateStreetviewPanorama - */ - function defaults() { - return { - 'overideContainer':'', - 'latlng':[40.75271883902363, -73.98262023925781], - 'pov': [] - } - }; - var thisMap = Mapifies.MapObjects.Get(element); - options = jQuery.extend(defaults(), options); - // Create Street View Overlay - - var container = null; - if (options.overideContainer !== '') { - container = jQuery(options.overideContainer).get(0); - } else { - container = jQuery(element).get(0); - } - - var viewOptions = {}; - if (options.pov.length > 0) { - jQuery.extend(viewOptions, {'pov':new GPov(options.latlng[0],options.latlng[1],options.latlng[2])}); - } - if (options.latlng.length > 0) { - jQuery.extend(viewOptions, {'latlng':new GLatLng(options.latlng[0],options.latlng[1])}); - } - - var overlay = new GStreetviewPanorama(container, viewOptions); - if (typeof callback == 'function') return callback(overlay, options); - return; -}; - -/** - * This function allows you to remove a street view from the map - * @method - * @namespace Mapifies - * @id Mapifies.RemoveStreetviewPanorama - * @alias Mapifies.RemoveStreetviewPanorama - * @param {jQuery} element The element to initialise the map on. - * @param {GStreetView} view The view to be removed - * @param {Function} callback The callback function to pass out after initialising the map. - * @return {Function} callback The callback option with the view. - */ -Mapifies.RemoveStreetviewPanorama = function ( element, view, callback ) { - var thisMap = Mapifies.MapObjects.Get(element); - view.remove(); - if (typeof callback == 'function') return callback( view ); - return; -}; -/** - * This function allows you to add a Google Traffic Layer - * @method - * @namespace Mapifies - * @id Mapifies.AddTrafficInfo - * @alias Mapifies.AddTrafficInfo - * @param {jQuery} element The element to initialise the map on. - * @param {Object} options The object that contains the options. - * @param {Function} callback The callback function to pass out after initialising the map. - * @return {Function} callback The callback option with the traffic layer. - */ -Mapifies.AddTrafficInfo = function( element, options, callback) { - /** - * Default options for AddTrafficInfo - * @method - * @namespace Mapifies.AddTrafficInfo - * @id Mapifies.AddTrafficInfo.defaults - * @alias Mapifies.AddTrafficInfo.defaults - * @param {Object} mapCenter The Lat/Lng to center the map on - * @return {Object} The options for AddTrafficInfo - */ - function defaults() { - return { - // Center the map on this point (optional) - 'mapCenter': [] - }; - }; - var thisMap = Mapifies.MapObjects.Get(element); - options = jQuery.extend(defaults(), options); - - var trafficOverlay = new GTrafficOverlay; - // Add overlay - thisMap.addOverlay(trafficOverlay); - // If the user has passed the optional mapCenter, - // then center the map on that point - if (options.mapCenter[0] && options.mapCenter[1]) { - thisMap.setCenter(new GLatLng(options.mapCenter[0], options.mapCenter[1])); - } - if (typeof callback == 'function') return callback(trafficOverlay, options); -}; - -/** - * This function allows you to remove a traffic layer from the map - * @method - * @namespace Mapifies - * @id Mapifies.RemoveTrafficInfo - * @alias Mapifies.RemoveTrafficInfo - * @param {jQuery} element The element to initialise the map on. - * @param {GTrafficOverlay} trafficOverlay The traffic overlay to be removed - * @param {Function} callback The callback function to pass out after initialising the map. - * @return {Function} callback The callback option with the traffic overlay. - */ -Mapifies.RemoveTrafficInfo = function ( element, trafficOverlay, callback ) { - var thisMap = Mapifies.MapObjects.Get(element); - thisMap.removeOverlay(trafficOverlay); - if (typeof callback === 'function') return callback(trafficOverlay); - return; -}; -/** - * A helper method that allows you to pass the status code of a search and get back a friendly oject - * @method - * @namespace Mapifies - * @id Mapifies.SearchCode - * @param {Number} code The status code of the query - * @return {Object} Returns a friendly object that contains the 'code', a 'success' boolean and a helpful 'message'. - */ -Mapifies.SearchCode = function ( code ) { - switch (code) { - case G_GEO_SUCCESS: - return {'code':G_GEO_SUCCESS,'success':true,'message':'Success'}; - case G_GEO_UNKNOWN_ADDRESS: - return {'code' : G_GEO_UNKNOWN_ADDRESS, 'success' : false, 'message' : 'No corresponding geographic location could be found for one of the specified addresses. This may be due to the fact that the address is relatively new, or it may be incorrect'}; - break; - case G_GEO_SERVER_ERROR: - return {'code' : G_GEO_UNKNOWN_ADDRESS, 'success' : false, 'message' : 'A geocoding or directions request could not be successfully processed, yet the exact reason for the failure is not known.'}; - break; - case G_GEO_MISSING_QUERY: - return {'code' : G_GEO_UNKNOWN_ADDRESS, 'success' : false, 'message' : 'The HTTP q parameter was either missing or had no value. For geocoder requests, this means that an empty address was specified as input. For directions requests, this means that no query was specified in the input.'}; - break; - case G_GEO_BAD_KEY: - return {'code' : G_GEO_UNKNOWN_ADDRESS, 'success' : false, 'message' : 'The given key is either invalid or does not match the domain for which it was given.'}; - break; - case G_GEO_BAD_REQUEST: - return {'code' : G_GEO_UNKNOWN_ADDRESS, 'success' : false, 'message' : 'A directions request could not be successfully parsed.'}; - break; - default: - return { - 'code': null, - 'success': false, - 'message': 'An unknown error occurred.' - }; - break; - }; -} - -/** - * An internal function to get the google maptype constant - * @method - * @namespace Mapifies - * @id Mapifies.GetMapType - * @alias Mapifies.GetMapType - * @param {String} mapType The string of the map type. - * @return {String} mapType The Google constant for a maptype. - */ -Mapifies.GetMapType = function ( mapType ) { - // Lets set our map type based on the options - switch(mapType) { - case 'map': // Normal Map - mapType = G_NORMAL_MAP; - break; - case 'sat': // Satallite Imagery - mapType = G_SATELLITE_MAP; - break; - case 'hybrid': //Hybrid Map - mapType = G_HYBRID_MAP; - break; - }; - return mapType; -}; - -/** - * An internal function to get the google travel mode constant - * @method - * @namespace Mapifies - * @id Mapifies.GetTravelMode - * @alias Mapifies.GetTravelMode - * @param {String} travelMode The string of the travel mode. - * @return {String} travelMode The Google constant for a travel mode. - */ -Mapifies.GetTravelMode = function ( travelMode ) { - switch(travelMode) { - case 'driving': - travelMode = G_TRAVEL_MODE_DRIVING; - break; - case 'walking': - travelMode = G_TRAVEL_MODE_WALKING; - break; - }; - return travelMode; -}; - -/** - * A helper function to create a google GIcon - * @method - * @namespace Mapifies - * @id Mapifies.createIcon - * @alias Mapifies.createIcon - * @param {Object} options The options to create the icon - * @return {GIcon} A GIcon object - */ -Mapifies.createIcon = function (options) { - /** - * Default options for createIcon - * @method - * @namespace Mapifies.createIcon - * @id Mapifies.createIcon.defaults - * @alias Mapifies.createIcon.defaults - * @param {String} iconImage The foreground image URL of the icon. - * @param {String} iconShadow The shadow image URL of the icon. - * @param {GSize} iconSize The pixel size of the foreground image of the icon. - * @param {GSize} iconShadowSize The pixel size of the shadow image. - * @param {GPoint} iconAnchor The pixel coordinate relative to the top left corner of the icon image at which this icon is anchored to the map. - * @param {GPoint} iconInfoWindowAnchor The pixel coordinate relative to the top left corner of the icon image at which the info window is anchored to this icon. - * @param {String} iconPrintImage The URL of the foreground icon image used for printed maps. It must be the same size as the main icon image given by image. - * @param {String} iconMozPrintImage The URL of the foreground icon image used for printed maps in Firefox/Mozilla. It must be the same size as the main icon image given by image. - * @param {String} iconPrintShadow The URL of the shadow image used for printed maps. It should be a GIF image since most browsers cannot print PNG images. - * @param {String} iconTransparent The URL of a virtually transparent version of the foreground icon image used to capture click events in Internet Explorer. This image should be a 24-bit PNG version of the main icon image with 1% opacity, but the same shape and size as the main icon. - * @return {Object} The options for createIcon - */ - function defaults() { - return { - 'iconImage': undefined, - 'iconShadow': undefined, - 'iconSize': undefined, - 'iconShadowSize': undefined, - 'iconAnchor': undefined, - 'iconInfoWindowAnchor': undefined, - 'iconPrintImage': undefined, - 'iconMozPrintImage': undefined, - 'iconPrintShadow': undefined, - 'iconTransparent': undefined - }; - }; - - options = jQuery.extend(defaults(), options); - var icon = new GIcon(G_DEFAULT_ICON); - - if(options.iconImage) - icon.image = options.iconImage; - if(options.iconShadow) - icon.shadow = options.iconShadow; - if(options.iconSize) - icon.iconSize = options.iconSize; - if(options.iconShadowSize) - icon.shadowSize = options.iconShadowSize; - if(options.iconAnchor) - icon.iconAnchor = options.iconAnchor; - if(options.iconInfoWindowAnchor) - icon.infoWindowAnchor = options.iconInfoWindowAnchor; - return icon; -}; - -/** - * A helper function to get the map center as a GLatLng - * @method - * @namespace Mapifies - * @id Mapifies.getCenter - * @alias Mapifies.getCenter - * @param {jQuery} element The element that contains the map. - * @return {GLatLng} A object containing the center of the map - */ -Mapifies.getCenter = function ( element ) { - var thisMap = Mapifies.MapObjects.Get(element); - return thisMap.getCenter(); -}; - -/** - * A helper function to get the bounds of the map - * @method - * @namespace Mapifies - * @id Mapifies.getBounds - * @alias Mapifies.getBounds - * @param {jQuery} element The element that contains the map. - * @return {GSize} The bounds of the map - */ -Mapifies.getBounds = function (element){ - var thisMap = Mapifies.MapObjects.Get(element); - return thisMap.getBounds(); -};var Mapifies; - -if (!Mapifies) Mapifies = {}; - -(function($){ - $.fn.jmap = function(method, options, callback) { - return this.each(function(){ - if (method == 'init' && typeof options == 'undefined') { - new Mapifies.Initialise(this, {}, null); - } else if (method == 'init' && typeof options == 'object') { - new Mapifies.Initialise(this, options, callback); - } else if (method == 'init' && typeof options == 'function') { - new Mapifies.Initialise(this, {}, options); - } else if (typeof method == 'object' || method == null) { - new Mapifies.Initialise(this, method, options); - } else { - try { - new Mapifies[method](this, options, callback); - } catch(err) { - throw Error('Mapifies Function Does Not Exist'); - } - } - }); - } -})(jQuery); - --- a/owa/modules/base/js/includes/jquery/jquery.jqGrid.min.js +++ /dev/null @@ -1,417 +1,1 @@ -/* -* jqGrid 3.6.5 - jQuery Grid -* Copyright (c) 2008, Tony Tomov, tony@trirand.com -* Dual licensed under the MIT and GPL licenses -* http://www.opensource.org/licenses/mit-license.php -* http://www.gnu.org/licenses/gpl-2.0.html -* Date:2010-05-05 -* Modules: grid.base.js; jquery.fmatter.js; grid.custom.js; grid.common.js; grid.formedit.js; jquery.searchFilter.js; grid.inlinedit.js; grid.celledit.js; jqModal.js; jqDnR.js; grid.subgrid.js; grid.treegrid.js; grid.import.js; JsonXml.js; grid.setcolumns.js; grid.postext.js; grid.tbltogrid.js; grid.jqueryui.js; -*/ -(function(b){b.jgrid=b.jgrid||{};b.extend(b.jgrid,{htmlDecode:function(f){if(f==" "||f==" "||f.length==1&&f.charCodeAt(0)==160)return"";return!f?f:String(f).replace(/&/g,"&").replace(/>/g,">").replace(/</g,"<").replace(/"/g,'"')},htmlEncode:function(f){return!f?f:String(f).replace(/&/g,"&").replace(/>/g,">").replace(/])*>/gi;if(f)return(f=f.replace(k,""))&&f!==" "&&f!==" "?f.replace(/\"/g,"'"):"";else return f},stringToDoc:function(f){var k;if(typeof f!=="string")return f;try{k=(new DOMParser).parseFromString(f,"text/xml")}catch(i){k=new ActiveXObject("Microsoft.XMLDOM"); -k.async=false;k.loadXML(f)}return k&&k.documentElement&&k.documentElement.tagName!="parsererror"?k:null},parse:function(f){f=f;if(f.substr(0,9)=="while(1);")f=f.substr(9);if(f.substr(0,2)=="/*")f=f.substr(2,f.length-4);f||(f="{}");return b.jgrid.useJSON===true&&typeof JSON==="object"&&typeof JSON.parse==="function"?JSON.parse(f):eval("("+f+")")},jqID:function(f){f+="";return f.replace(/([\.\:\[\]])/g,"\\$1")},ajaxOptions:{},extend:function(f){b.extend(b.fn.jqGrid,f);this.no_legacy_api||b.fn.extend(f)}}); -b.fn.jqGrid=function(f){if(typeof f=="string"){var k=b.fn.jqGrid[f];if(!k)throw"jqGrid - No such method: "+f;var i=b.makeArray(arguments).slice(1);return k.apply(this,i)}return this.each(function(){if(!this.grid){var h=b.extend(true,{url:"",height:150,page:1,rowNum:20,records:0,pager:"",pgbuttons:true,pginput:true,colModel:[],rowList:[],colNames:[],sortorder:"asc",sortname:"",datatype:"xml",mtype:"GET",altRows:false,selarrrow:[],savedRow:[],shrinkToFit:true,xmlReader:{},jsonReader:{},subGrid:false, -subGridModel:[],reccount:0,lastpage:0,lastsort:0,selrow:null,beforeSelectRow:null,onSelectRow:null,onSortCol:null,ondblClickRow:null,onRightClickRow:null,onPaging:null,onSelectAll:null,loadComplete:null,gridComplete:null,loadError:null,loadBeforeSend:null,afterInsertRow:null,beforeRequest:null,onHeaderClick:null,viewrecords:false,loadonce:false,multiselect:false,multikey:false,editurl:null,search:false,caption:"",hidegrid:true,hiddengrid:false,postData:{},userData:{},treeGrid:false,treeGridModel:"nested", -treeReader:{},treeANode:-1,ExpandColumn:null,tree_root_level:0,prmNames:{page:"page",rows:"rows",sort:"sidx",order:"sord",search:"_search",nd:"nd",id:"id",oper:"oper",editoper:"edit",addoper:"add",deloper:"del",subgridid:"id",npage:null},forceFit:false,gridstate:"visible",cellEdit:false,cellsubmit:"remote",nv:0,loadui:"enable",toolbar:[false,""],scroll:false,multiboxonly:false,deselectAfterSort:true,scrollrows:false,autowidth:false,scrollOffset:18,cellLayout:5,subGridWidth:20,multiselectWidth:20, -gridview:false,rownumWidth:25,rownumbers:false,pagerpos:"center",recordpos:"right",footerrow:false,userDataOnFooter:false,hoverrows:true,altclass:"ui-priority-secondary",viewsortcols:[false,"vertical",true],resizeclass:"",autoencode:false,remapColumns:[],ajaxGridOptions:{},direction:"ltr",toppager:false,headertitles:false,scrollTimeout:200},b.jgrid.defaults,f||{}),g={headers:[],cols:[],footers:[],dragStart:function(c,d,e){this.resizing={idx:c,startX:d.clientX,sOL:e[0]};this.hDiv.style.cursor="col-resize"; -this.curGbox=b("#rs_m"+h.id,"#gbox_"+h.id);this.curGbox.css({display:"block",left:e[0],top:e[1],height:e[2]});b.isFunction(h.resizeStart)&&h.resizeStart.call(this,d,c);document.onselectstart=function(){return false}},dragMove:function(c){if(this.resizing){var d=c.clientX-this.resizing.startX;c=this.headers[this.resizing.idx];var e=h.direction==="ltr"?c.width+d:c.width-d,l;if(e>33){this.curGbox.css({left:this.resizing.sOL+d});if(h.forceFit===true){l=this.headers[this.resizing.idx+h.nv];d=h.direction=== -"ltr"?l.width-d:l.width+d;if(d>33){c.newWidth=e;l.newWidth=d}}else{this.newWidth=h.direction==="ltr"?h.tblwidth+d:h.tblwidth-d;c.newWidth=e}}}},dragEnd:function(){this.hDiv.style.cursor="default";if(this.resizing){var c=this.resizing.idx,d=this.headers[c].newWidth||this.headers[c].width;d=parseInt(d,10);this.resizing=false;b("#rs_m"+h.id).css("display","none");h.colModel[c].width=d;this.headers[c].width=d;this.headers[c].el.style.width=d+"px";if(this.cols.length>0)this.cols[c].style.width=d+"px"; -if(this.footers.length>0)this.footers[c].style.width=d+"px";if(h.forceFit===true){d=this.headers[c+h.nv].newWidth||this.headers[c+h.nv].width;this.headers[c+h.nv].width=d;this.headers[c+h.nv].el.style.width=d+"px";if(this.cols.length>0)this.cols[c+h.nv].style.width=d+"px";if(this.footers.length>0)this.footers[c+h.nv].style.width=d+"px";h.colModel[c+h.nv].width=d}else{h.tblwidth=this.newWidth||h.tblwidth;b("table:first",this.bDiv).css("width",h.tblwidth+"px");b("table:first",this.hDiv).css("width", -h.tblwidth+"px");this.hDiv.scrollLeft=this.bDiv.scrollLeft;if(h.footerrow){b("table:first",this.sDiv).css("width",h.tblwidth+"px");this.sDiv.scrollLeft=this.bDiv.scrollLeft}}b.isFunction(h.resizeStop)&&h.resizeStop.call(this,d,c)}this.curGbox=null;document.onselectstart=function(){return true}},populateVisible:function(){g.timer&&clearTimeout(g.timer);g.timer=null;var c=b(g.bDiv).height();if(c){var d=b("table:first",g.bDiv),e=b("> tbody > tr:visible:first",d).outerHeight()||g.prevRowHeight;if(e){g.prevRowHeight= -e;var l=h.rowNum,n=g.scrollTop=g.bDiv.scrollTop,o=Math.round(d.position().top)-n,p=o+d.height();e=e*l;var w,y,s;if(o<=0&&(h.lastpage===undefined||parseInt((p+n+e-1)/e,10)<=h.lastpage)){y=parseInt((c-p+e-1)/e,10);if(p>=0||y<2||h.scroll===true){w=Math.round((p+n)/e)+1;o=-1}else o=1}if(o>0){w=parseInt(n/e,10)+1;y=parseInt((n+c)/e,10)+2-w;s=true}if(y)if(!(h.lastpage&&w>h.lastpage))if(g.hDiv.loading)g.timer=setTimeout(g.populateVisible,h.scrollTimeout);else{h.page=w;if(s){g.selectionPreserver(d[0]);g.emptyRows(g.bDiv, -false)}g.populate(y)}}}},scrollGrid:function(){if(h.scroll){var c=g.bDiv.scrollTop;if(c!=g.scrollTop){g.scrollTop=c;g.timer&&clearTimeout(g.timer);g.timer=setTimeout(g.populateVisible,200)}}g.hDiv.scrollLeft=g.bDiv.scrollLeft;if(h.footerrow)g.sDiv.scrollLeft=g.bDiv.scrollLeft},selectionPreserver:function(c){var d=c.p,e=d.selrow,l=d.selarrrow?b.makeArray(d.selarrrow):null,n=c.grid.bDiv.scrollLeft,o=d.gridComplete;d.gridComplete=function(){d.selrow=null;d.selarrrow=[];if(d.multiselect&&l&&l.length> -0)for(var p=0;p"),t,x=b.browser.msie?true:false,C=b.browser.safari? -true:false;a=this;a.p.direction=b.trim(a.p.direction.toLowerCase());if(b.inArray(a.p.direction,["ltr","rtl"])==-1)a.p.direction="ltr";m=a.p.direction;b(q).insertBefore(this);b(this).appendTo(q).removeClass("scroll");var K=b("
                      ");b(K).insertBefore(q).attr({id:"gbox_"+this.id,dir:m});b(q).appendTo(K).attr("id","gview_"+this.id);t=x&&b.browser.version<=6?'': -"";b("
                      ").append(t).insertBefore(q);b("
                      "+this.p.loadtext+"
                      ").insertBefore(q);b(this).attr({cellSpacing:"0",cellPadding:"0",border:"0",role:"grid","aria-multiselectable":!!this.p.multiselect,"aria-labelledby":"gbox_"+this.id});var J=function(c,d){c=parseInt(c,10);return isNaN(c)?d?d:0:c},F=function(c,d,e){var l=a.p.colModel[c],n=l.align,o='style="', -p=l.classes,w=l.name;if(n)o+="text-align:"+n+";";if(l.hidden===true)o+="display:none;";if(d===0)o+="width: "+g.headers[c].width+"px;";o+='"'+(p!==undefined?' class="'+p+'"':"")+(l.title&&e?' title="'+b.jgrid.stripHtml(e)+'"':"");o+=' aria-describedby="'+a.p.id+"_"+w+'"';return o},Q=function(c){return c===undefined||c===null||c===""?" ":a.p.autoencode?b.jgrid.htmlEncode(c):c+""},M=function(c,d,e,l,n){e=a.p.colModel[e];if(typeof e.formatter!=="undefined"){c={rowId:c,colModel:e,gid:a.p.id};d=b.isFunction(e.formatter)? -e.formatter.call(a,d,c,l,n):b.fmatter?b.fn.fmatter(e.formatter,d,c,l,n):Q(d)}else d=Q(d);return d},R=function(c,d,e,l,n){c=M(c,d,e,n,"add");return'"+c+""},u=function(c,d,e){c='';d=F(d,e,"");return'"+c+""},la=function(c,d,e,l){e=(parseInt(e,10)-1)*parseInt(l,10)+1+d;c=F(c,d,"");return'"+e+""},ca=function(c){var d,e=[],l=0,n;for(n=0;ndiv:first",c).css({height:"auto"}).children("div:first").css({height:0,display:"none"});c.scrollTop=0}},U=function(c,d){var e,l,n,o;if(typeof d==="function")return d(c);e=c[d];if(e===undefined){if(typeof d==="string")n=d.split(".");try{if(o=n.length)for(e=c;e&&o--;){l=n.shift();e=e[l]}}catch(p){}}return e},ia=function(c,d,e,l,n){var o=new Date;a.p.reccount=0;if(b.isXMLDoc(c)){if(a.p.treeANode===-1&&!a.p.scroll){aa(d,false);e=0}else e=e>0?e:0;var p,w=0,y,s,r=0,v=0, -z=0,D,N,L=[],P,G={},da=a.rows.length,E,W,B=[],S=0,ga=a.p.altRows===true?" "+a.p.altclass:"";a.p.xmlReader.repeatitems||(L=ca("xml"));D=a.p.keyIndex===false?a.p.xmlReader.id:a.p.keyIndex;if(L.length>0&&!isNaN(D)){if(a.p.remapColumns&&a.p.remapColumns.length)D=b.inArray(D,a.p.remapColumns);D=L[D]}N=(D+"").indexOf("[")===-1?L.length?function(X,V){return b(D,X).text()||V}:function(X,V){return b(a.p.xmlReader.cell,X).eq(D).text()||V}:function(X,V){return X.getAttribute(D.replace(/[\[\]]/g,""))||V};a.p.userData= -{};b(a.p.xmlReader.page,c).each(function(){a.p.page=this.textContent||this.text||0});b(a.p.xmlReader.total,c).each(function(){a.p.lastpage=this.textContent||this.text;if(a.p.lastpage===undefined)a.p.lastpage=1});b(a.p.xmlReader.records,c).each(function(){a.p.records=this.textContent||this.text||0});b(a.p.xmlReader.userdata,c).each(function(){a.p.userData[this.getAttribute("name")]=this.textContent||this.text});c=b(a.p.xmlReader.root+" "+a.p.xmlReader.row,c);var ha=c.length,O=0;if(c&&ha){var ma=parseInt(a.p.rowNum, -10),wa=a.p.scroll?(parseInt(a.p.page,10)-1)*ma+1:1;if(n)ma*=n+1;for(n=b.isFunction(a.p.afterInsertRow);O';if(a.p.rownumbers===true){B[S++]=la(0,O,a.p.page,a.p.rowNum);z=1}if(a.p.multiselect===true){B[S++]=u(W,z,O);r=1}if(a.p.subGrid===true){B[S++]=b(a).jqGrid("addSubGridCell",r+z,O+e);v=1}if(a.p.xmlReader.repeatitems){P||(P=fa(r+v+z));var za=b(a.p.xmlReader.cell, -E);b.each(P,function(X){var V=za[this];if(!V)return false;y=V.textContent||V.text;G[a.p.colModel[X+r+v+z].name]=y;B[S++]=R(W,y,X+r+v+z,O+e,E)})}else for(p=0;p";if(a.p.gridview===false){if(a.p.treeGrid===true){p=a.p.treeANode>=-1?a.p.treeANode:0;s=b(B.join(""))[0];try{b(a).jqGrid("setTreeNode",G,s)}catch(Fa){}da===0?b("tbody:first",d).append(s):b(a.rows[O+p+e]).after(s)}else b("tbody:first",d).append(B.join("")); -if(a.p.subGrid===true)try{b(a).jqGrid("addSubGrid",a.rows[a.rows.length-1],r+z)}catch(Ga){}n&&a.p.afterInsertRow.call(a,W,G,E);B=[];S=0}G={};w++;O++;if(w==ma)break}}a.p.gridview===true&&b("tbody:first",d).append(B.join(""));a.p.totaltime=new Date-o;if(w>0){a.grid.cols=a.rows[0].cells;if(a.p.records===0)a.p.records=ha}B=null;if(!a.p.treeGrid&&!a.p.scroll)a.grid.bDiv.scrollTop=0;a.p.reccount=w;a.p.treeANode=-1;a.p.userDataOnFooter&&b(a).jqGrid("footerData","set",a.p.userData,true);l||na(false,true)}}, -ra=function(c,d,e,l,n){var o=new Date;a.p.reccount=0;if(c){if(a.p.treeANode===-1&&!a.p.scroll){aa(d,false);e=0}else e=e>0?e:0;var p=0,w,y,s,r=[],v,z=0,D=0,N=0,L,P,G,da={},E,W=a.rows.length,B;s=[];E=0;var S=a.p.altRows===true?" "+a.p.altclass:"";a.p.page=U(c,a.p.jsonReader.page)||0;G=U(c,a.p.jsonReader.total);a.p.lastpage=G===undefined?1:G;a.p.records=U(c,a.p.jsonReader.records)||0;a.p.userData=U(c,a.p.jsonReader.userdata)||{};a.p.jsonReader.repeatitems||(v=r=ca("json"));G=a.p.keyIndex===false?a.p.jsonReader.id: -a.p.keyIndex;if(r.length>0&&!isNaN(G)){if(a.p.remapColumns&&a.p.remapColumns.length)G=b.inArray(G,a.p.remapColumns);G=r[G]}if(P=U(c,a.p.jsonReader.root)){L=P.length;c=0;var ga=parseInt(a.p.rowNum,10),ha=a.p.scroll?(parseInt(a.p.page,10)-1)*ga+1:1;if(n)ga*=n+1;for(var O=b.isFunction(a.p.afterInsertRow);c';if(a.p.rownumbers===true){s[E++]=la(0,c,a.p.page,a.p.rowNum);N=1}if(a.p.multiselect){s[E++]=u(B,N,c);z=1}if(a.p.subGrid){s[E++]=b(a).jqGrid("addSubGridCell",z+N,c+e);D=1}if(a.p.jsonReader.repeatitems){if(a.p.jsonReader.cell)n=U(n,a.p.jsonReader.cell);v||(v=fa(z+D+N))}for(y=0;y";if(a.p.gridview===false){if(a.p.treeGrid===true){E=a.p.treeANode>=-1?a.p.treeANode:0;s=b(s.join(""))[0]; -try{b(a).jqGrid("setTreeNode",da,s)}catch(ma){}W===0?b("tbody:first",d).append(s):b(a.rows[c+E+e]).after(s)}else b("tbody:first",d).append(s.join(""));if(a.p.subGrid===true)try{b(a).jqGrid("addSubGrid",a.rows[a.rows.length-1],z+N)}catch(wa){}O&&a.p.afterInsertRow.call(a,B,da,n);s=[];E=0}da={};p++;c++;if(p==ga)break}a.p.gridview===true&&b("tbody:first",d).append(s.join(""));a.p.totaltime=new Date-o;if(p>0){a.grid.cols=a.rows[0].cells;if(a.p.records===0)a.p.records=L}}if(!a.p.treeGrid&&!a.p.scroll)a.grid.bDiv.scrollTop= -0;a.p.reccount=p;a.p.treeANode=-1;a.p.userDataOnFooter&&b(a).jqGrid("footerData","set",a.p.userData,true);l||na(false,true)}},na=function(c,d){var e,l,n,o,p,w,y,s="";n=parseInt(a.p.page,10)-1;if(n<0)n=0;n*=parseInt(a.p.rowNum,10);p=n+a.p.reccount;if(a.p.scroll){e=b("tbody:first > tr",a.grid.bDiv);n=p-e.length;if(l=e.outerHeight()){e=n*l;l=parseInt(a.p.records,10)*l;b(">div:first",a.grid.bDiv).css({height:l}).children("div:first").css({height:e,display:e?"":"none"})}}s=a.p.pager?a.p.pager:"";s+=a.p.toppager? -s?","+a.p.toppager:a.p.toppager:"";if(s){y=b.jgrid.formatter.integer||{};if(a.p.loadonce){e=l=1;a.p.lastpage=a.page=1;b(".selbox",s).attr("disabled",true)}else{e=J(a.p.page);l=J(a.p.lastpage);b(".selbox",s).attr("disabled",false)}if(a.p.pginput===true){b(".ui-pg-input",s).val(a.p.page);b("#sp_1",s).html(b.fmatter?b.fmatter.util.NumberFormat(a.p.lastpage,y):a.p.lastpage)}if(a.p.viewrecords)if(a.p.reccount===0)b(".ui-paging-info",s).html(a.p.emptyrecords);else{o=n+1;w=a.p.records;if(b.fmatter){o=b.fmatter.util.NumberFormat(o, -y);p=b.fmatter.util.NumberFormat(p,y);w=b.fmatter.util.NumberFormat(w,y)}b(".ui-paging-info",s).html(b.jgrid.format(a.p.recordtext,o,p,w))}if(a.p.pgbuttons===true){if(e<=0)e=l=0;if(e==1||e===0){b("#first, #prev",a.p.pager).addClass("ui-state-disabled").removeClass("ui-state-hover");a.p.toppager&&b("#first_t, #prev_t",a.p.toppager).addClass("ui-state-disabled").removeClass("ui-state-hover")}else{b("#first, #prev",a.p.pager).removeClass("ui-state-disabled");a.p.toppager&&b("#first_t, #prev_t",a.p.toppager).removeClass("ui-state-disabled")}if(e== -l||e===0){b("#next, #last",a.p.pager).addClass("ui-state-disabled").removeClass("ui-state-hover");a.p.toppager&&b("#next_t, #last_t",a.p.toppager).addClass("ui-state-disabled").removeClass("ui-state-hover")}else{b("#next, #last",a.p.pager).removeClass("ui-state-disabled");a.p.toppager&&b("#next_t, #last_t",a.p.toppager).removeClass("ui-state-disabled")}}}c===true&&a.p.rownumbers===true&&b("td.jqgrid-rownum",a.rows).each(function(r){b(this).html(n+1+r)});d&&a.p.jqgdnd&&b(a).jqGrid("gridDnD","updateDnD"); -b.isFunction(a.p.gridComplete)&&a.p.gridComplete.call(a)},Y=function(c){if(!a.grid.hDiv.loading){var d=a.p.scroll&&c===false,e={},l,n=a.p.prmNames;if(a.p.page<=0)a.p.page=1;if(n.search!==null)e[n.search]=a.p.search;if(n.nd!==null)e[n.nd]=(new Date).getTime();if(n.rows!==null)e[n.rows]=a.p.rowNum;if(n.page!==null)e[n.page]=a.p.page;if(n.sort!==null)e[n.sort]=a.p.sortname;if(n.order!==null)e[n.order]=a.p.sortorder;var o=a.p.loadComplete,p=b.isFunction(o);p||(o=null);var w=0;c=c||1;if(c>1)if(n.npage!== -null){e[n.npage]=c;w=c-1;c=1}else o=function(s){p&&a.p.loadComplete.call(a,s);a.grid.hDiv.loading=false;a.p.page++;Y(c-1)};else n.npage!==null&&delete a.p.postData[n.npage];b.extend(a.p.postData,e);var y=!a.p.scroll?0:a.rows.length-1;if(b.isFunction(a.p.datatype))a.p.datatype.call(a,a.p.postData,"load_"+a.p.id);else{b.isFunction(a.p.beforeRequest)&&a.p.beforeRequest.call(a);l=a.p.datatype.toLowerCase();switch(l){case "json":case "jsonp":case "xml":case "script":b.ajax(b.extend({url:a.p.url,type:a.p.mtype, -dataType:l,data:b.isFunction(a.p.serializeGridData)?a.p.serializeGridData.call(a,a.p.postData):a.p.postData,success:function(s){l==="xml"?ia(s,a.grid.bDiv,y,c>1,w):ra(s,a.grid.bDiv,y,c>1,w);o&&o.call(a,s);d&&a.grid.populateVisible();if(a.p.loadonce||a.p.treeGrid)a.p.datatype="local";ja()},error:function(s,r,v){b.isFunction(a.p.loadError)&&a.p.loadError.call(a,s,r,v);ja()},beforeSend:function(s){oa();b.isFunction(a.p.loadBeforeSend)&&a.p.loadBeforeSend.call(a,s)}},b.jgrid.ajaxOptions,a.p.ajaxGridOptions)); -break;case "xmlstring":oa();e=b.jgrid.stringToDoc(a.p.datastr);p&&a.p.loadComplete.call(a,e);ia(e,a.grid.bDiv);a.p.datatype="local";a.p.datastr=null;ja();break;case "jsonstring":oa();e=typeof a.p.datastr=="string"?b.jgrid.parse(a.p.datastr):a.p.datastr;p&&a.p.loadComplete.call(a,e);ra(e,a.grid.bDiv);a.p.datatype="local";a.p.datastr=null;ja();break;case "local":case "clientside":oa();a.p.datatype="local";p&&a.p.loadComplete.call(a,"");Aa();na(true,true);ja();break}}}},oa=function(){a.grid.hDiv.loading= -true;if(!a.p.hiddengrid)switch(a.p.loadui){case "disable":break;case "enable":b("#load_"+a.p.id).show();break;case "block":b("#lui_"+a.p.id).show();b("#load_"+a.p.id).show();break}},ja=function(){a.grid.hDiv.loading=false;switch(a.p.loadui){case "disable":break;case "enable":b("#load_"+a.p.id).hide();break;case "block":b("#lui_"+a.p.id).hide();b("#load_"+a.p.id).hide();break}},Aa=function(){var c=/[\$,%]/g,d=[],e=0,l,n,o,p=a.p.sortorder=="asc"?1:-1,w=false,y;b.each(a.p.colModel,function(r){if(this.index== -a.p.sortname||this.name==a.p.sortname){if(a.p.lastsort==r)w=true;e=r;l=this.sorttype;return false}});o=l=="float"||l=="number"||l=="currency"?function(r){r=parseFloat(r.replace(c,""));return isNaN(r)?0:r}:l=="int"||l=="integer"?function(r){return J(r.replace(c,""),0)}:l=="date"||l=="datetime"?function(r){return Ba(a.p.colModel[e].datefmt||"Y-m-d",r).getTime()}:b.isFunction(l)?l:function(r){return b.trim(r.toUpperCase())};y=a.p.colModel[e];b.each(a.rows,function(r,v){try{n=b.unformat(b(v).children("td").eq(e), -{rowId:v.id,colModel:y},e,true)}catch(z){n=b(v).children("td").eq(e).text()}v.sortKey=o(n);d[r]=this});if(a.p.treeGrid)b(a).jqGrid("SortTree",p);else{w?d.reverse():d.sort(function(r,v){if(r.sortKeyv.sortKey)return p;return 0});if(d[0]){b("td",d[0]).each(function(r){b(this).css("width",g.headers[r].width+"px")});a.grid.cols=d[0].cells}var s="";if(a.p.altRows)s=a.p.altclass;b.each(d,function(r,v){if(s)r%2==1?b(v).addClass(s):b(v).removeClass(s);b("tbody",a.grid.bDiv).append(v); -v.sortKey=null})}a.grid.bDiv.scrollTop=0},Ba=function(c,d){var e={m:1,d:1,y:1970,h:0,i:0,s:0},l,n,o;if(d=b.trim(d)){d=d.split(/[\\\/:_;.\t\T\s-]/);c=c.split(/[\\\/:_;.\t\T\s-]/);var p=b.jgrid.formatter.date.monthNames,w=b.jgrid.formatter.date.AmPm,y=function(s,r){if(s===0){if(r==12)r=0}else if(r!=12)r+=12;return r};l=0;for(n=c.length;l11)d[l]=o+1-12}if(c[l]=="a"){o=b.inArray(d[l],w);if(o!== --1&&o<2&&d[l]==w[o]){d[l]=o;e.h=y(d[l],e.h)}}if(c[l]=="A"){o=b.inArray(d[l],w);if(o!==-1&&o>1&&d[l]==w[o]){d[l]=o-2;e.h=y(d[l],e.h)}}e[c[l].toLowerCase()]=parseInt(d[l],10)}e.m=parseInt(e.m,10)-1;c=e.y;if(c>=70&&c<=99)e.y=1900+e.y;else if(c>=0&&c<=69)e.y=2E3+e.y}return new Date(e.y,e.m,e.d,e.h,e.i,e.s,0)};t=function(c,d){var e="",l="",n="",o,p,w,y,s=function(r){var v;if(b.isFunction(a.p.onPaging))v= -a.p.onPaging.call(a,r);a.p.selrow=null;if(a.p.multiselect){a.p.selarrrow=[];b("#cb_"+b.jgrid.jqID(a.p.id),a.grid.hDiv).attr("checked",false)}a.p.savedRow=[];if(v=="stop")return false;return true};c=c.substr(1);o="pg_"+c;p=c+"_left";w=c+"_center";y=c+"_right";b("#"+c).append("
                      ").attr("dir","ltr");if(a.p.rowList.length>0){n="";n+=""}if(m=="rtl")l+=n;if(a.p.pginput===true)e=""+b.jgrid.format(a.p.pgtext||"","", -"")+"";if(a.p.pgbuttons===true){p=["first"+d,"prev"+d,"next"+d,"last"+d];m=="rtl"&&p.reverse();l+="";l+="";l+=e!=""?""+e+"": -"";l+="";l+=""}else if(e!="")l+=e;if(m=="ltr")l+=n;l+="";a.p.viewrecords===true&&b("td#"+c+"_"+a.p.recordpos,"#"+o).append("
                      ");b("td#"+c+"_"+a.p.pagerpos,"#"+o).append(l);n=b(".ui-jqgrid").css("font-size")|| -"11px";b("body").append("");l=b(l).clone().appendTo("#testpg").width();b("#testpg").remove();if(l>0){if(e!="")l+=50;b("td#"+c+"_"+a.p.pagerpos,"#"+o).width(l)}a.p._nvtd=[];a.p._nvtd[0]=l?Math.floor((a.p.width-l)/2):Math.floor(a.p.width/3);a.p._nvtd[1]=0;l=null;b(".ui-pg-selbox","#"+o).bind("change",function(){a.p.page=Math.round(a.p.rowNum*(a.p.page-1)/this.value-0.5)+1;a.p.rowNum=this.value; -if(d)b(".ui-pg-selbox",a.p.pager).val(this.value);else a.p.toppager&&b(".ui-pg-selbox",a.p.toppager).val(this.value);if(!s("records"))return false;Y();return false});if(a.p.pgbuttons===true){b(".ui-pg-button","#"+o).hover(function(){if(b(this).hasClass("ui-state-disabled"))this.style.cursor="default";else{b(this).addClass("ui-state-hover");this.style.cursor="pointer"}},function(){if(!b(this).hasClass("ui-state-disabled")){b(this).removeClass("ui-state-hover");this.style.cursor="default"}});b("#first"+ -d+", #prev"+d+", #next"+d+", #last"+d,"#"+c).click(function(){var r=J(a.p.page,1),v=J(a.p.lastpage,1),z=false,D=true,N=true,L=true,P=true;if(v===0||v===1)P=L=N=D=false;else if(v>1&&r>=1)if(r===1)N=D=false;else{if(!(r>1&&r1&&r===0){P=L=false;r=v-1}if(this.id==="first"+d&&D){a.p.page=1;z=true}if(this.id==="prev"+d&&N){a.p.page=r-1;z=true}if(this.id==="next"+d&&L){a.p.page=r+1;z=true}if(this.id==="last"+d&&P){a.p.page=v;z=true}if(z){if(!s(this.id))return false;Y()}return false})}a.p.pginput=== -true&&b("input.ui-pg-input","#"+o).keypress(function(r){if((r.charCode?r.charCode:r.keyCode?r.keyCode:0)==13){a.p.page=b(this).val()>0?b(this).val():a.p.page;if(!s("user"))return false;Y();return false}return this})};var xa=function(c,d,e,l){if(a.p.colModel[d].sortable)if(!(a.p.savedRow.length>0)){if(!e){if(a.p.lastsort==d)if(a.p.sortorder=="asc")a.p.sortorder="desc";else{if(a.p.sortorder=="desc")a.p.sortorder="asc"}else a.p.sortorder=a.p.colModel[d].firstsortorder||"asc";a.p.page=1}if(l)if(a.p.lastsort== -d&&a.p.sortorder==l&&!e)return;else a.p.sortorder=l;e=b("thead:first",a.grid.hDiv).get(0);b("tr th:eq("+a.p.lastsort+") span.ui-grid-ico-sort",e).addClass("ui-state-disabled");b("tr th:eq("+a.p.lastsort+")",e).attr("aria-selected","false");b("tr th:eq("+d+") span.ui-icon-"+a.p.sortorder,e).removeClass("ui-state-disabled");b("tr th:eq("+d+")",e).attr("aria-selected","true");if(!a.p.viewsortcols[0])if(a.p.lastsort!=d){b("tr th:eq("+a.p.lastsort+") span.s-ico",e).hide();b("tr th:eq("+d+") span.s-ico", -e).show()}c=c.substring(5);a.p.sortname=a.p.colModel[d].index||c;e=a.p.sortorder;if(b.isFunction(a.p.onSortCol))if(a.p.onSortCol.call(a,c,d,e)=="stop"){a.p.lastsort=d;return}if(a.p.datatype=="local")a.p.deselectAfterSort&&b(a).jqGrid("resetSelection");else{a.p.selrow=null;a.p.multiselect&&b("#cb_"+b.jgrid.jqID(a.p.id),a.grid.hDiv).attr("checked",false);a.p.selarrrow=[];a.p.savedRow=[];a.p.scroll&&aa(a.grid.bDiv,true)}a.p.subGrid&&a.p.datatype=="local"&&b("td.sgexpanded","#"+a.p.id).each(function(){b(this).trigger("click")}); -Y();a.p.lastsort=d;if(a.p.sortname!=c&&d)a.p.lastsort=d}},Ca=function(c){var d=c,e;for(e=c+1;e");this.p.colModel.unshift({name:"cb",width:C?a.p.multiselectWidth+a.p.cellLayout: -a.p.multiselectWidth,sortable:false,resizable:false,hidedlg:true,search:false,align:"center",fixed:true})}if(this.p.rownumbers){this.p.colNames.unshift("");this.p.colModel.unshift({name:"rn",width:a.p.rownumWidth,sortable:false,resizable:false,hidedlg:true,search:false,align:"center",fixed:true})}a.p.xmlReader=b.extend(true,{root:"rows",row:"row",page:"rows>page",total:"rows>total",records:"rows>records",repeatitems:true,cell:"cell",id:"[id]",userdata:"userdata",subgrid:{root:"rows",row:"row",repeatitems:true, -cell:"cell"}},a.p.xmlReader);a.p.jsonReader=b.extend(true,{root:"rows",page:"page",total:"total",records:"records",repeatitems:true,cell:"cell",id:"id",userdata:"userdata",subgrid:{root:"rows",repeatitems:true,cell:"cell"}},a.p.jsonReader);if(a.p.scroll){a.p.pgbuttons=false;a.p.pginput=false;a.p.rowList=[]}var H="",ya,ba,sa,ka,pa,I,A,ea;ba=ea="";if(a.p.shrinkToFit===true&&a.p.forceFit===true)for(j=a.p.colModel.length-1;j>=0;j--)if(!a.p.colModel[j].hidden){a.p.colModel[j].resizable= -false;break}if(a.p.viewsortcols[1]=="horizontal"){ea=" ui-i-asc";ba=" ui-i-desc"}ya=x?"class='ui-th-div-ie'":"";ea="";for(j=0;j";ba=a.p.colModel[j].index||a.p.colModel[j].name;H+="
                      "+a.p.colNames[j];a.p.colModel[j].width=a.p.colModel[j].width?parseInt(a.p.colModel[j].width,10):150;if(typeof a.p.colModel[j].title!=="boolean")a.p.colModel[j].title=true;if(ba==a.p.sortname)a.p.lastsort=j;H+=ea+"
                      "}H+="";b(this).append(H);b("thead tr:first th", -this).hover(function(){b(this).addClass("ui-state-hover")},function(){b(this).removeClass("ui-state-hover")});if(this.p.multiselect){var ta=[],qa;b("#cb_"+b.jgrid.jqID(a.p.id),this).bind("click",function(){if(this.checked){b("[id^=jqg_]",a.rows).attr("checked",true);b(a.rows).each(function(c){if(!b(this).hasClass("subgrid")){b(this).addClass("ui-state-highlight").attr("aria-selected","true");a.p.selarrrow[c]=a.p.selrow=this.id}});qa=true;ta=[]}else{b("[id^=jqg_]",a.rows).attr("checked",false);b(a.rows).each(function(c){if(!b(this).hasClass("subgrid")){b(this).removeClass("ui-state-highlight").attr("aria-selected", -"false");ta[c]=this.id}});a.p.selarrrow=[];a.p.selrow=null;qa=false}if(b.isFunction(a.p.onSelectAll))a.p.onSelectAll.call(a,qa?a.p.selarrrow:ta,qa)})}if(a.p.autowidth===true){H=b(K).innerWidth();a.p.width=H>0?H:"nw"}(function(){var c=0,d=a.p.cellLayout,e=0,l,n=a.p.scrollOffset,o,p=false,w,y=0,s=0,r=0,v;if(C)d=0;b.each(a.p.colModel,function(){if(typeof this.hidden==="undefined")this.hidden=false;if(this.hidden===false){c+=J(this.width,0);if(this.fixed){y+=this.width;s+=this.width+d}else e++;r++}}); -if(isNaN(a.p.width))a.p.width=g.width=c;else g.width=a.p.width;a.p.tblwidth=c;if(a.p.shrinkToFit===false&&a.p.forceFit===true)a.p.forceFit=false;if(a.p.shrinkToFit===true&&e>0){w=g.width-d*e-s;if(!isNaN(a.p.height)){w-=n;p=true}c=0;b.each(a.p.colModel,function(z){if(this.hidden===false&&!this.fixed){this.width=o=Math.round(w*this.width/(a.p.tblwidth-y));c+=o;l=z}});v=0;if(p){if(g.width-s-(c+d*e)!==n)v=g.width-s-(c+d*e)-n}else if(!p&&Math.abs(g.width-s-(c+d*e))!==1)v=g.width-s-(c+d*e);a.p.colModel[l].width+= -v;a.p.tblwidth=c+v+y+r*d;if(a.p.tblwidth>a.p.width){a.p.colModel[l].width-=a.p.tblwidth-parseInt(a.p.width,10);a.p.tblwidth=a.p.width}}})();b(K).css("width",g.width+"px").append("
                       
                      ");b(q).css("width",g.width+"px");H=b("thead:first",a).get(0);var ua="";q=b("tr:first",H);a.p.disableClick=false;b("th",q).each(function(c){sa=a.p.colModel[c].width;if(typeof a.p.colModel[c].resizable==="undefined")a.p.colModel[c].resizable=true;if(a.p.colModel[c].resizable){ka=document.createElement("span");b(ka).html(" ").addClass("ui-jqgrid-resize ui-jqgrid-resize-"+m);b.browser.opera||b(ka).css("cursor","col-resize");b(this).addClass(a.p.resizeclass)}else ka="";b(this).css("width",sa+"px").prepend(ka);a.p.colModel[c].hidden&&b(this).css("display","none"); -g.headers[c]={width:sa,el:this};pa=a.p.colModel[c].sortable;if(typeof pa!=="boolean")pa=a.p.colModel[c].sortable=true;var d=a.p.colModel[c].name;d=="cb"||d=="subgrid"||d=="rn"||a.p.viewsortcols[2]&&b("div",this).addClass("ui-jqgrid-sortable");if(pa)if(a.p.viewsortcols[0]){b("div span.s-ico",this).show();c==a.p.lastsort&&b("div span.ui-icon-"+a.p.sortorder,this).removeClass("ui-state-disabled")}else if(c==a.p.lastsort){b("div span.s-ico",this).show();b("div span.ui-icon-"+a.p.sortorder,this).removeClass("ui-state-disabled")}ua+= -""}).mousedown(function(c){if(b(c.target).closest("th>span.ui-jqgrid-resize").length==1){var d=b.jgrid.getCellIndex(this);if(a.p.forceFit===true)a.p.nv=Ca(d);g.dragStart(d,c,Da(d));return false}}).click(function(c){if(a.p.disableClick)return a.p.disableClick=false;var d="th>div.ui-jqgrid-sortable",e,l;a.p.viewsortcols[2]||(d="th>div>span>span.ui-grid-ico-sort");c=b(c.target).closest(d);if(c.length==1){d=b.jgrid.getCellIndex(this);if(!a.p.viewsortcols[2]){e= -true;l=c.attr("sort")}xa(b("div",this)[0].id,d,e,l);return false}});if(a.p.sortable&&b.fn.sortable)try{b(a).jqGrid("sortableColumns",q)}catch(Ja){}ua+="
                       
                      ";this.appendChild(document.createElement("tbody"));b(this).addClass("ui-jqgrid-btable");q=b("
                      ").append(H);var T=a.p.caption&&a.p.hiddengrid===true?true:false;H=b("
                      ");g.hDiv=document.createElement("div");b(g.hDiv).css({width:g.width+"px"}).addClass("ui-state-default ui-jqgrid-hdiv").append(H);b(H).append(q);T&&b(g.hDiv).hide();if(a.p.pager){if(typeof a.p.pager=="string"){if(a.p.pager.substr(0,1)!="#")a.p.pager="#"+a.p.pager}else a.p.pager="#"+b(a.p.pager).attr("id");b(a.p.pager).css({width:g.width+"px"}).appendTo(K).addClass("ui-state-default ui-jqgrid-pager ui-corner-bottom");T&&b(a.p.pager).hide();t(a.p.pager,"")}a.p.cellEdit=== -false&&a.p.hoverrows===true&&b(a).bind("mouseover",function(c){A=b(c.target).closest("tr.jqgrow");b(A).attr("class")!=="subgrid"&&b(A).addClass("ui-state-hover");return false}).bind("mouseout",function(c){A=b(c.target).closest("tr.jqgrow");b(A).removeClass("ui-state-hover");return false});var Z,$;b(a).before(g.hDiv).click(function(c){I=c.target;var d=b(I).hasClass("cbox");A=b(I,a.rows).closest("tr.jqgrow");if(b(A).length===0)return this;var e=true;if(b.isFunction(a.p.beforeSelectRow))e=a.p.beforeSelectRow.call(a, -A[0].id,c);if(I.tagName=="A"||(I.tagName=="INPUT"||I.tagName=="TEXTAREA"||I.tagName=="OPTION"||I.tagName=="SELECT")&&!d)return this;if(e===true){if(a.p.cellEdit===true)if(a.p.multiselect&&d)b(a).jqGrid("setSelection",A[0].id,true);else{Z=A[0].rowIndex;$=b.jgrid.getCellIndex(I);try{b(a).jqGrid("editCell",Z,$,true)}catch(l){}}else if(a.p.multikey)if(c[a.p.multikey])b(a).jqGrid("setSelection",A[0].id,true);else{if(a.p.multiselect&&d){d=b("[id^=jqg_]",A).attr("checked");b("[id^=jqg_]",A).attr("checked", -!d)}}else{if(a.p.multiselect&&a.p.multiboxonly)if(!d){b(a.p.selarrrow).each(function(n,o){n=a.rows.namedItem(o);b(n).removeClass("ui-state-highlight");b("#jqg_"+b.jgrid.jqID(o),n).attr("checked",false)});a.p.selarrrow=[];b("#cb_"+b.jgrid.jqID(a.p.id),a.grid.hDiv).attr("checked",false)}b(a).jqGrid("setSelection",A[0].id,true)}if(b.isFunction(a.p.onCellSelect)){Z=A[0].id;$=b.jgrid.getCellIndex(I);a.p.onCellSelect.call(a,Z,$,b(I).html(),c)}c.stopPropagation()}else return this}).bind("reloadGrid",function(c, -d){if(a.p.treeGrid===true)a.p.datatype=a.p.treedatatype;d&&d.current&&a.grid.selectionPreserver(a);if(a.p.datatype=="local")b(a).jqGrid("resetSelection");else if(!a.p.treeGrid){a.p.selrow=null;if(a.p.multiselect){a.p.selarrrow=[];b("#cb_"+b.jgrid.jqID(a.p.id),a.grid.hDiv).attr("checked",false)}a.p.savedRow=[];a.p.scroll&&aa(a.grid.bDiv,true)}if(d&&d.page){c=d.page;if(c>a.p.lastpage)c=a.p.lastpage;if(c<1)c=1;a.p.page=c;a.grid.bDiv.scrollTop=a.grid.prevRowHeight?(c-1)*a.grid.prevRowHeight*a.p.rowNum: -0}if(a.grid.prevRowHeight&&a.p.scroll){delete a.p.lastpage;a.grid.populateVisible()}else a.grid.populate();return false});b.isFunction(this.p.ondblClickRow)&&b(this).dblclick(function(c){I=c.target;A=b(I,a.rows).closest("tr.jqgrow");if(b(A).length===0)return false;Z=A[0].rowIndex;$=b.jgrid.getCellIndex(I);a.p.ondblClickRow.call(a,b(A).attr("id"),Z,$,c);return false});b.isFunction(this.p.onRightClickRow)&&b(this).bind("contextmenu",function(c){I=c.target;A=b(I,a.rows).closest("tr.jqgrow");if(b(A).length=== -0)return false;a.p.multiselect||b(a).jqGrid("setSelection",A[0].id,true);Z=A[0].rowIndex;$=b.jgrid.getCellIndex(I);a.p.onRightClickRow.call(a,b(A).attr("id"),Z,$,c);return false});g.bDiv=document.createElement("div");b(g.bDiv).append(b('
                      ').append("
                      ").append(this)).addClass("ui-jqgrid-bdiv").css({height:a.p.height+(isNaN(a.p.height)?"":"px"),width:g.width+"px"}).scroll(g.scrollGrid);b("table:first",g.bDiv).css({width:a.p.tblwidth+ -"px"});if(x){b("tbody",this).size()==2&&b("tbody:first",this).remove();a.p.multikey&&b(g.bDiv).bind("selectstart",function(){return false})}else a.p.multikey&&b(g.bDiv).bind("mousedown",function(){return false});T&&b(g.bDiv).hide();g.cDiv=document.createElement("div");var va=a.p.hidegrid===true?b("").addClass("ui-jqgrid-titlebar-close HeaderButton").hover(function(){va.addClass("ui-state-hover")},function(){va.removeClass("ui-state-hover")}).append("").css(m== -"rtl"?"left":"right","0px"):"";b(g.cDiv).append(va).append(""+a.p.caption+"").addClass("ui-jqgrid-titlebar ui-widget-header ui-corner-top ui-helper-clearfix");b(g.cDiv).insertBefore(g.hDiv);if(a.p.toolbar[0]){g.uDiv=document.createElement("div");if(a.p.toolbar[1]=="top")b(g.uDiv).insertBefore(g.hDiv);else a.p.toolbar[1]=="bottom"&&b(g.uDiv).insertAfter(g.hDiv);if(a.p.toolbar[1]=="both"){g.ubDiv=document.createElement("div");b(g.uDiv).insertBefore(g.hDiv).addClass("ui-userdata ui-state-default").attr("id", -"t_"+this.id);b(g.ubDiv).insertAfter(g.hDiv).addClass("ui-userdata ui-state-default").attr("id","tb_"+this.id);T&&b(g.ubDiv).hide()}else b(g.uDiv).width(g.width).addClass("ui-userdata ui-state-default").attr("id","t_"+this.id);T&&b(g.uDiv).hide()}if(a.p.toppager){a.p.toppager=a.p.id+"_toppager";g.topDiv=b("
                      ")[0];a.p.toppager="#"+a.p.toppager;b(g.topDiv).insertBefore(g.hDiv).addClass("ui-state-default ui-jqgrid-toppager").width(g.width);t(a.p.toppager,"_t")}if(a.p.footerrow){g.sDiv= -b("
                      ")[0];H=b("
                      ");b(g.sDiv).append(H).insertAfter(g.hDiv).width(g.width);b(H).append(ua);g.footers=b(".ui-jqgrid-ftable",g.sDiv)[0].rows[0].cells;if(a.p.rownumbers)g.footers[0].className="ui-state-default jqgrid-rownum";T&&b(g.sDiv).hide()}if(a.p.caption){var Ea=a.p.datatype;if(a.p.hidegrid===true){b(".ui-jqgrid-titlebar-close",g.cDiv).click(function(c){var d=b.isFunction(a.p.onHeaderClick);if(a.p.gridstate== -"visible"){b(".ui-jqgrid-bdiv, .ui-jqgrid-hdiv","#gview_"+a.p.id).slideUp("fast");a.p.pager&&b(a.p.pager).slideUp("fast");a.p.toppager&&b(a.p.toppager).slideUp("fast");if(a.p.toolbar[0]===true){a.p.toolbar[1]=="both"&&b(g.ubDiv).slideUp("fast");b(g.uDiv).slideUp("fast")}a.p.footerrow&&b(".ui-jqgrid-sdiv","#gbox_"+a.p.id).slideUp("fast");b("span",this).removeClass("ui-icon-circle-triangle-n").addClass("ui-icon-circle-triangle-s");a.p.gridstate="hidden";b("#gbox_"+a.p.id).hasClass("ui-resizable")&& -b(".ui-resizable-handle","#gbox_"+a.p.id).hide();if(d)T||a.p.onHeaderClick.call(a,a.p.gridstate,c)}else if(a.p.gridstate=="hidden"){b(".ui-jqgrid-hdiv, .ui-jqgrid-bdiv","#gview_"+a.p.id).slideDown("fast");a.p.pager&&b(a.p.pager).slideDown("fast");a.p.toppager&&b(a.p.toppager).slideDown("fast");if(a.p.toolbar[0]===true){a.p.toolbar[1]=="both"&&b(g.ubDiv).slideDown("fast");b(g.uDiv).slideDown("fast")}a.p.footerrow&&b(".ui-jqgrid-sdiv","#gbox_"+a.p.id).slideDown("fast");b("span",this).removeClass("ui-icon-circle-triangle-s").addClass("ui-icon-circle-triangle-n"); -if(T){a.p.datatype=Ea;Y();T=false}a.p.gridstate="visible";b("#gbox_"+a.p.id).hasClass("ui-resizable")&&b(".ui-resizable-handle","#gbox_"+a.p.id).show();d&&a.p.onHeaderClick.call(a,a.p.gridstate,c)}return false});if(T){a.p.datatype="local";b(".ui-jqgrid-titlebar-close",g.cDiv).trigger("click")}}}else b(g.cDiv).hide();b(g.hDiv).after(g.bDiv).mousemove(function(c){if(g.resizing){g.dragMove(c);return false}});b(".ui-jqgrid-labels",g.hDiv).bind("selectstart",function(){return false});b(document).mouseup(function(){if(g.resizing){g.dragEnd(); -return false}return true});this.updateColumns=function(){var c=this.rows[0],d=this;if(c){b("td",c).each(function(e){b(this).css("width",d.grid.headers[e].width+"px")});this.grid.cols=c.cells}return this};a.formatCol=F;a.sortData=xa;a.updatepager=na;a.formatter=function(c,d,e,l,n){return M(c,d,e,l,n)};b.extend(g,{populate:Y,emptyRows:aa});this.grid=g;a.addXmlData=function(c){ia(c,a.grid.bDiv)};a.addJSONData=function(c){ra(c,a.grid.bDiv)};Y();a.p.hiddengrid=false;b(window).unload(function(){a=null})}}})}; -b.jgrid.extend({getGridParam:function(f){var k=this[0];if(k.grid)return f?typeof k.p[f]!="undefined"?k.p[f]:null:k.p},setGridParam:function(f){return this.each(function(){this.grid&&typeof f==="object"&&b.extend(true,this.p,f)})},getDataIDs:function(){var f=[],k=0,i;this.each(function(){if((i=this.rows.length)&&i>0)for(;k=q+t)b(h.grid.bDiv)[0].scrollTop=x-(q+t)+a+t;else if(x=0&&i(g)}if(h.p.multiselect){h.p.selrow=j.id;m=b.inArray(h.p.selrow,h.p.selarrrow);if(m===-1){j.className!=="ui-subgrid"&&b(j).addClass("ui-state-highlight").attr("aria-selected","true");g=true;b("#jqg_"+b.jgrid.jqID(h.p.selrow), -h.rows[j.rowIndex]).attr("checked",g);h.p.selarrrow.push(h.p.selrow);h.p.onSelectRow&&k&&h.p.onSelectRow.call(h,h.p.selrow,g)}else{j.className!=="ui-subgrid"&&b(j).removeClass("ui-state-highlight").attr("aria-selected","false");g=false;b("#jqg_"+b.jgrid.jqID(h.p.selrow),h.rows[j.rowIndex]).attr("checked",g);h.p.selarrrow.splice(m,1);h.p.onSelectRow&&k&&h.p.onSelectRow.call(h,h.p.selrow,g);j=h.p.selarrrow[0];h.p.selrow=j===undefined?null:j}}else if(j.className!=="ui-subgrid"){h.p.selrow&&b(h.rows.namedItem(h.p.selrow)).removeClass("ui-state-highlight").attr("aria-selected", -"false");h.p.selrow=j.id;b(j).addClass("ui-state-highlight").attr("aria-selected","true");h.p.onSelectRow&&k&&h.p.onSelectRow.call(h,h.p.selrow,true)}}}})},resetSelection:function(){return this.each(function(){var f=this,k;if(f.p.multiselect){b(f.p.selarrrow).each(function(i,h){k=f.rows.namedItem(h);b(k).removeClass("ui-state-highlight").attr("aria-selected","false");b("#jqg_"+b.jgrid.jqID(h),k).attr("checked",false)});b("#cb_"+b.jgrid.jqID(f.p.id),f.grid.hDiv).attr("checked",false);f.p.selarrrow= -[]}else if(f.p.selrow){b("tr#"+b.jgrid.jqID(f.p.selrow),f.grid.bDiv).removeClass("ui-state-highlight").attr("aria-selected","false");f.p.selrow=null}f.p.savedRow=[]})},getRowData:function(f){var k={},i,h=false,g,j=0;this.each(function(){var m=this,a,q;if(typeof f=="undefined"){h=true;i=[];g=m.rows.length}else{q=m.rows.namedItem(f);if(!q)return k;g=1}for(;j span:first",q).html(a).attr(j):b("td:eq("+x+")",q).html(a).attr(j);g=true}});if(t==="string")b(q).addClass(i);else t==="object"&&b(q).css(i)});return g},addRowData:function(f,k,i,h){i||(i="last");var g=false,j,m,a,q,t,x,C,K,J="",F,Q,M,R;if(k){if(b.isArray(k)){F=true;i="last";Q=f}else{k=[k];F=false}this.each(function(){var u=this,la=k.length;t=u.p.rownumbers===true?1:0;a=u.p.multiselect===true?1:0;q=u.p.subGrid===true?1:0;if(!F)if(typeof f!="undefined")f+= -"";else{f=u.p.records+1+"";if(u.p.keyIndex!==false){Q=u.p.colModel[u.p.keyIndex+a+q+t].name;if(typeof k[0][Q]!="undefined")f=k[0][Q]}}M=u.p.altclass;for(var ca=0,fa="",aa=b.isFunction(u.p.afterInsertRow)?true:false;ca0"}if(a){K='';J=u.formatCol(t,1,"");m+='"+K+""}if(q)m+=b(u).jqGrid("addSubGridCell",a+t,1);for(C=a+q+t;C"+K+""}m=''+m+"";if(u.p.subGrid===true){m=b(m)[0];b(u).jqGrid("addSubGrid", -m,a+t)}if(u.rows.length===0)b("table:first",u.grid.bDiv).append(m);else switch(i){case "last":b(u.rows[u.rows.length-1]).after(m);break;case "first":b(u.rows[0]).before(m);break;case "after":if(x=u.rows.namedItem(h))b(u.rows[x.rowIndex+1]).hasClass("ui-subgrid")?b(u.rows[x.rowIndex+1]).after(m):b(x).after(m);break;case "before":if(x=u.rows.namedItem(h)){b(x).before(m);x=x.rowIndex}break}u.p.records++;u.p.reccount++;if(!u.grid.cols||!u.grid.cols.length)u.grid.cols=u.rows[0].cells;if(i==="first"||i=== -"before"&&x<=1||u.rows.length===1)u.updateColumns();aa&&u.p.afterInsertRow.call(u,f,R,R);ca++}if(u.p.altRows===true&&!F)if(i=="last")(u.rows.length-1)%2==1&&b(u.rows[u.rows.length-1]).addClass(M);else b(u.rows).each(function(ia){ia%2==1?b(this).addClass(M):b(this).removeClass(M)});u.updatepager(true,true);g=true})}return g},footerData:function(f,k,i){function h(q){for(var t in q)if(q.hasOwnProperty(t))return false;return true}var g,j=false,m={},a;if(typeof f=="undefined")f="get";if(typeof i!="boolean")i= -true;f=f.toLowerCase();this.each(function(){var q=this,t;if(!q.grid||!q.p.footerrow)return false;if(f=="set")if(h(k))return false;j=true;b(this.p.colModel).each(function(x){g=this.name;if(f=="set"){if(k[g]!==undefined){t=i?q.formatter("",k[g],x,k,"edit"):k[g];a=this.title?{title:b.jgrid.stripHtml(t)}:{};b("tr.footrow td:eq("+x+")",q.grid.sDiv).html(t).attr(a);j=true}}else if(f=="get")m[g]=b("tr.footrow td:eq("+x+")",q.grid.sDiv).html()})});return f=="get"?m:j},ShowHideCol:function(f,k){return this.each(function(){var i= -this,h=false;if(i.grid){if(typeof f==="string")f=[f];k=k!="none"?"":"none";var g=k==""?true:false;b(this.p.colModel).each(function(j){if(b.inArray(this.name,f)!==-1&&this.hidden===g){b("tr",i.grid.hDiv).each(function(){b("th:eq("+j+")",this).css("display",k)});b(i.rows).each(function(m){b("td:eq("+j+")",i.rows[m]).css("display",k)});i.p.footerrow&&b("td:eq("+j+")",i.grid.sDiv).css("display",k);if(k=="none")i.p.tblwidth-=this.width;else i.p.tblwidth+=this.width;this.hidden=!g;h=true}});if(h===true){b("table:first", -i.grid.hDiv).width(i.p.tblwidth);b("table:first",i.grid.bDiv).width(i.p.tblwidth);i.grid.hDiv.scrollLeft=i.grid.bDiv.scrollLeft;if(i.p.footerrow){b("table:first",i.grid.sDiv).width(i.p.tblwidth);i.grid.sDiv.scrollLeft=i.grid.bDiv.scrollLeft}}}})},hideCol:function(f){return this.each(function(){b(this).jqGrid("ShowHideCol",f,"none")})},showCol:function(f){return this.each(function(){b(this).jqGrid("ShowHideCol",f,"")})},remapColumns:function(f,k,i){function h(m){var a;a=m.length?b.makeArray(m):b.extend({}, -m);b.each(f,function(q){m[q]=a[this]})}function g(m,a){b(">tr"+(a||""),m).each(function(){var q=this,t=b.makeArray(q.cells);b.each(f,function(){var x=t[this];x&&q.appendChild(x)})})}var j=this.get(0);h(j.p.colModel);h(j.p.colNames);h(j.grid.headers);g(b("thead:first",j.grid.hDiv),i&&":not(.ui-jqgrid-labels)");k&&g(b("tbody:first",j.grid.bDiv),".jqgrow");j.p.footerrow&&g(b("tbody:first",j.grid.sDiv));if(j.p.remapColumns)if(j.p.remapColumns.length)h(j.p.remapColumns);else j.p.remapColumns=b.makeArray(f); -j.p.lastsort=b.inArray(j.p.lastsort,f);if(j.p.treeGrid)j.p.expColInd=b.inArray(j.p.expColInd,f)},setGridWidth:function(f,k){return this.each(function(){var i=this,h,g=0,j=i.p.cellLayout,m,a=0,q=false,t=i.p.scrollOffset,x,C=0,K=0,J=0,F;if(i.grid){if(typeof k!="boolean")k=i.p.shrinkToFit;if(!isNaN(f)){f=parseInt(f,10);i.grid.width=i.p.width=f;b("#gbox_"+i.p.id).css("width",f+"px");b("#gview_"+i.p.id).css("width",f+"px");b(i.grid.bDiv).css("width",f+"px");b(i.grid.hDiv).css("width",f+"px");i.p.pager&& -b(i.p.pager).css("width",f+"px");i.p.toppager&&b(i.p.toppager).css("width",f+"px");if(i.p.toolbar[0]===true){b(i.grid.uDiv).css("width",f+"px");i.p.toolbar[1]=="both"&&b(i.grid.ubDiv).css("width",f+"px")}i.p.footerrow&&b(i.grid.sDiv).css("width",f+"px");if(k===false&&i.p.forceFit===true)i.p.forceFit=false;if(k===true){if(b.browser.safari)j=0;b.each(i.p.colModel,function(){if(this.hidden===false){g+=parseInt(this.width,10);if(this.fixed){K+=this.width;C+=this.width+j}else a++;J++}});if(a!==0){i.p.tblwidth= -g;x=f-j*a-C;if(!isNaN(i.p.height))if(b(i.grid.bDiv)[0].clientHeight0;b.each(i.p.colModel,function(M){if(this.hidden===false&&!this.fixed){h=Math.round(x*this.width/(i.p.tblwidth-K));if(!(h<0)){this.width=h;g+=h;i.grid.headers[M].width=h;i.grid.headers[M].el.style.width=h+"px";if(i.p.footerrow)i.grid.footers[M].style.width=h+"px";if(Q)i.grid.cols[M].style.width=h+"px";m=M}}});F=0;if(q){if(f-C-(g+j*a)!==t)F=f-C-(g+j*a)-t}else if(Math.abs(f- -C-(g+j*a))!==1)F=f-C-(g+j*a);i.p.colModel[m].width+=F;i.p.tblwidth=g+F+K+j*J;if(i.p.tblwidth>f){q=i.p.tblwidth-parseInt(f,10);i.p.tblwidth=f;h=i.p.colModel[m].width-=q}else h=i.p.colModel[m].width;i.grid.headers[m].width=h;i.grid.headers[m].el.style.width=h+"px";if(Q)i.grid.cols[m].style.width=h+"px";b("table:first",i.grid.bDiv).css("width",i.p.tblwidth+"px");b("table:first",i.grid.hDiv).css("width",i.p.tblwidth+"px");i.grid.hDiv.scrollLeft=i.grid.bDiv.scrollLeft;if(i.p.footerrow){i.grid.footers[m].style.width= -h+"px";b("table:first",i.grid.sDiv).css("width",i.p.tblwidth+"px")}}}}}})},setGridHeight:function(f){return this.each(function(){var k=this;if(k.grid){b(k.grid.bDiv).css({height:f+(isNaN(f)?"":"px")});k.p.height=f;k.p.scroll&&k.grid.populateVisible()}})},setCaption:function(f){return this.each(function(){this.p.caption=f;b("span.ui-jqgrid-title",this.grid.cDiv).html(f);b(this.grid.cDiv).show()})},setLabel:function(f,k,i,h){return this.each(function(){var g=this,j=-1;if(g.grid){if(isNaN(f))b(g.p.colModel).each(function(q){if(this.name== -f){j=q;return false}});else j=parseInt(f,10);if(j>=0){var m=b("tr.ui-jqgrid-labels th:eq("+j+")",g.grid.hDiv);if(k){var a=b(".s-ico",m);b("[id^=jqgh_]",m).empty().html(k).append(a);g.p.colNames[j]=k}if(i)typeof i==="string"?b(m).addClass(i):b(m).css(i);typeof h==="object"&&b(m).attr(h)}}})},setCell:function(f,k,i,h,g,j){return this.each(function(){var m=this,a=-1,q,t;if(m.grid){if(isNaN(k))b(m.p.colModel).each(function(C){if(this.name==k){a=C;return false}});else a=parseInt(k,10);if(a>=0)if(q=m.rows.namedItem(f)){var x= -b("td:eq("+a+")",q);if(i!==""||j===true){q=m.formatter(f,i,a,q,"edit");t=m.p.colModel[a].title?{title:b.jgrid.stripHtml(q)}:{};m.p.treeGrid&&b(".tree-wrap",b(x)).length>0?b("span",b(x)).html(q).attr(t):b(x).html(q).attr(t)}if(typeof h==="string")b(x).addClass(h);else h&&b(x).css(h);typeof g==="object"&&b(x).attr(g)}}})},getCell:function(f,k){var i=false;this.each(function(){var h=this,g=-1;if(h.grid){if(isNaN(k))b(h.p.colModel).each(function(a){if(this.name===k){g=a;return false}});else g=parseInt(k, -10);if(g>=0){var j=h.rows.namedItem(f);if(j)try{i=b.unformat(b("td:eq("+g+")",j),{rowId:j.id,colModel:h.p.colModel[g]},g)}catch(m){i=b.jgrid.htmlDecode(b("td:eq("+g+")",j).html())}}}});return i},getCol:function(f,k,i){var h=[],g,j=0;k=typeof k!="boolean"?false:k;if(typeof i=="undefined")i=false;this.each(function(){var m=this,a=-1;if(m.grid){if(isNaN(f))b(m.p.colModel).each(function(C){if(this.name===f){a=C;return false}});else a=parseInt(f,10);if(a>=0){var q=m.rows.length,t=0;if(q&&q>0){for(;t0){if(a<0){e+=g;a=e.length-1}else if(g!==".")e= -e.replace(".",g);for(;e.length-1-a-1?a:e.length;g=e.substring(a);for(var f=-1,i=a;i>0;i--){f++;if(f%3===0&&i!==a&&(!d||i>1))g=h+g;g=e.charAt(i-1)+g}e=g}e=b.prefix?b.prefix+e:e;return e=b.suffix?e+b.suffix:e}else return a},DateFormat:function(a,b,d,e){var g=function(m,r){m=String(m);for(r=parseInt(r,10)||2;m.length11)b[i]=f+1-12}h[a[i].toLowerCase()]=parseInt(b[i],10)}h.m=parseInt(h.m,10)-1;f=h.y;if(f>=70&&f<=99)h.y=1900+h.y;else if(f>=0&&f<=69)h.y=2E3+h.y;f=new Date(h.y,h.m,h.d,h.h,h.i,h.s,h.u)}if(d in -e.masks)d=e.masks[d];else d||(d="Y-m-d");h=f.getHours();a=f.getMinutes();b=f.getDate();i=f.getMonth()+1;k=f.getTimezoneOffset();var l=f.getSeconds(),o=f.getMilliseconds(),n=f.getDay(),p=f.getFullYear(),q=(n+6)%7+1,s=(new Date(p,i-1,b)-new Date(p,0,1))/864E5,t={d:g(b),D:j.i18n.dayNames[n],j:b,l:j.i18n.dayNames[n+7],N:q,S:e.S(b),w:n,z:s,W:q<5?Math.floor((s+q-1)/7)+1:Math.floor((s+q-1)/7)||(((new Date(p-1,0,1)).getDay()+6)%7<4?53:52),F:j.i18n.monthNames[i-1+12],m:g(i),M:j.i18n.monthNames[i-1],n:i,t:"?", -L:"?",o:"?",Y:p,y:String(p).substring(2),a:h<12?e.AmPm[0]:e.AmPm[1],A:h<12?e.AmPm[2]:e.AmPm[3],B:"?",g:h%12||12,G:h,h:g(h%12||12),H:g(h),i:g(a),s:g(l),u:o,e:"?",I:"?",O:(k>0?"-":"+")+g(Math.floor(Math.abs(k)/60)*100+Math.abs(k)%60,4),P:"?",T:(String(f).match(/\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g)||[""]).pop().replace(/[^-+\dA-Z]/g,""),Z:"?",c:"?",r:"?",U:Math.floor(f/1E3)};return d.replace(/\\.|[dDjlNSwzWFmMntLoYyaABgGhHisueIOPTZcrU]/g, -function(m){return m in t?t[m]:m.substring(1)})}};c.fn.fmatter.defaultFormat=function(a,b){return isValue(a)&&a!==""?a:b.defaultValue?b.defaultValue:" "};c.fn.fmatter.email=function(a,b){return isEmpty(a)?c.fn.fmatter.defaultFormat(a,b):'
                      '+a+""};c.fn.fmatter.checkbox=function(a,b){var d=c.extend({},b.checkbox);isUndefined(b.colModel.formatoptions)||(d=c.extend({},d,b.colModel.formatoptions));b=d.disabled===true?"disabled":"";if(isEmpty(a)||isUndefined(a))a=c.fn.fmatter.defaultFormat(a, -d);a+="";a=a.toLowerCase();return'"};c.fn.fmatter.link=function(a,b){var d={target:b.target},e="";isUndefined(b.colModel.formatoptions)||(d=c.extend({},d,b.colModel.formatoptions));if(d.target)e="target="+d.target;return isEmpty(a)?c.fn.fmatter.defaultFormat(a,b):"'+a+""};c.fn.fmatter.showlink=function(a,b){var d={baseLinkUrl:b.baseLinkUrl,showAction:b.showAction, -addParam:b.addParam||"",target:b.target,idName:b.idName},e="";isUndefined(b.colModel.formatoptions)||(d=c.extend({},d,b.colModel.formatoptions));if(d.target)e="target="+d.target;d=d.baseLinkUrl+d.showAction+"?"+d.idName+"="+b.rowId+d.addParam;return isString(a)?"'+a+"":c.fn.fmatter.defaultFormat(a,b)};c.fn.fmatter.integer=function(a,b){var d=c.extend({},b.integer);isUndefined(b.colModel.formatoptions)||(d=c.extend({},d,b.colModel.formatoptions));if(isEmpty(a))return d.defaultValue; -return c.fmatter.util.NumberFormat(a,d)};c.fn.fmatter.number=function(a,b){var d=c.extend({},b.number);isUndefined(b.colModel.formatoptions)||(d=c.extend({},d,b.colModel.formatoptions));if(isEmpty(a))return d.defaultValue;return c.fmatter.util.NumberFormat(a,d)};c.fn.fmatter.currency=function(a,b){var d=c.extend({},b.currency);isUndefined(b.colModel.formatoptions)||(d=c.extend({},d,b.colModel.formatoptions));if(isEmpty(a))return d.defaultValue;return c.fmatter.util.NumberFormat(a,d)};c.fn.fmatter.date= -function(a,b,d,e){d=c.extend({},b.date);isUndefined(b.colModel.formatoptions)||(d=c.extend({},d,b.colModel.formatoptions));return!d.reformatAfterEdit&&e=="edit"?c.fn.fmatter.defaultFormat(a,b):isEmpty(a)?c.fn.fmatter.defaultFormat(a,b):c.fmatter.util.DateFormat(d.srcformat,a,d.newformat,d)};c.fn.fmatter.select=function(a,b){a+="";var d=false,e=[];if(!isUndefined(b.colModel.editoptions))d=b.colModel.editoptions.value;if(d){var g=b.colModel.editoptions.multiple===true?true:false,h=[],f;if(g){h=a.split(","); -h=c.map(h,function(l){return c.trim(l)})}if(isString(d))for(var i=d.split(";"),k=0,j=0;j2)f[1]=jQuery.map(f,function(l,o){if(o>0)return l}).join(":");if(g){if(jQuery.inArray(f[0],h)>-1){e[k]=f[1];k++}}else if(c.trim(f[0])==c.trim(a)){e[0]=f[1];break}}else if(isObject(d))if(g)e=jQuery.map(h,function(l){return d[l]});else e[0]=d[a]||""}a=e.join(", ");return a==""?c.fn.fmatter.defaultFormat(a,b):a};c.fn.fmatter.rowactions=function(a,b,d,e){switch(d){case "edit":d= -function(){c("tr#"+a+" div.ui-inline-edit, tr#"+a+" div.ui-inline-del","#"+b).show();c("tr#"+a+" div.ui-inline-save, tr#"+a+" div.ui-inline-cancel","#"+b).hide()};c("#"+b).jqGrid("editRow",a,e,null,null,null,{oper:"edit"},d,null,d);c("tr#"+a+" div.ui-inline-edit, tr#"+a+" div.ui-inline-del","#"+b).hide();c("tr#"+a+" div.ui-inline-save, tr#"+a+" div.ui-inline-cancel","#"+b).show();break;case "save":c("#"+b).jqGrid("saveRow",a,null,null);c("tr#"+a+" div.ui-inline-edit, tr#"+a+" div.ui-inline-del","#"+ -b).show();c("tr#"+a+" div.ui-inline-save, tr#"+a+" div.ui-inline-cancel","#"+b).hide();break;case "cancel":c("#"+b).jqGrid("restoreRow",a);c("tr#"+a+" div.ui-inline-edit, tr#"+a+" div.ui-inline-del","#"+b).show();c("tr#"+a+" div.ui-inline-save, tr#"+a+" div.ui-inline-cancel","#"+b).hide();break}};c.fn.fmatter.actions=function(a,b){a={keys:false,editbutton:true,delbutton:true};isUndefined(b.colModel.formatoptions)||(a=c.extend(a,b.colModel.formatoptions));var d=b.rowId,e="",g;if(typeof d=="undefined"|| -isEmpty(d))return"";if(a.editbutton){g="onclick=$.fn.fmatter.rowactions('"+d+"','"+b.gid+"','edit',"+a.keys+");";e=e+"
                      "}if(a.delbutton){g="onclick=jQuery('#"+b.gid+"').jqGrid('delGridRow','"+d+"');";e=e+"
                      "}g="onclick=$.fn.fmatter.rowactions('"+d+"','"+b.gid+"','save',false);";e=e+"";g="onclick=$.fn.fmatter.rowactions('"+d+"','"+b.gid+"','cancel',false);";return e=e+"
                      "};c.unformat=function(a,b,d,e){var g,h=b.colModel.formatter,f=b.colModel.formatoptions||{},i=/([\.\*\_\'\(\)\{\}\+\?\\])/g;unformatFunc=b.colModel.unformat||c.fn.fmatter[h]&&c.fn.fmatter[h].unformat;if(typeof unformatFunc!=="undefined"&&isFunction(unformatFunc))g=unformatFunc(c(a).text(),b,a);else if(typeof h!=="undefined"&&isString(h)){g=c.jgrid.formatter||{};switch(h){case "integer":f=c.extend({},g.integer,f);b=f.thousandsSeparator.replace(i,"\\$1");b=new RegExp(b,"g");g= -c(a).text().replace(b,"");break;case "number":f=c.extend({},g.number,f);b=f.thousandsSeparator.replace(i,"\\$1");b=new RegExp(b,"g");g=c(a).text().replace(b,"").replace(f.decimalSeparator,".");break;case "currency":f=c.extend({},g.currency,f);b=f.thousandsSeparator.replace(i,"\\$1");b=new RegExp(b,"g");g=c(a).text().replace(b,"").replace(f.decimalSeparator,".").replace(f.prefix,"").replace(f.suffix,"");break;case "checkbox":f=b.colModel.editoptions?b.colModel.editoptions.value.split(":"):["Yes","No"]; -g=c("input",a).attr("checked")?f[0]:f[1];break;case "select":g=c.unformat.select(a,b,d,e);break;case "actions":return"";default:g=c(a).text()}}return g?g:e===true?c(a).text():c.jgrid.htmlDecode(c(a).html())};c.unformat.select=function(a,b,d,e){d=[];a=c(a).text();if(e===true)return a;b=c.extend({},b.colModel.editoptions);if(b.value){var g=b.value;b=b.multiple===true?true:false;e=[];var h;if(b){e=a.split(",");e=c.map(e,function(j){return c.trim(j)})}if(isString(g))for(var f=g.split(";"),i=0,k=0;k-1){d[i]=h[0];i++}}else if(c.trim(h[1])==c.trim(a)){d[0]=h[0];break}}else if(isObject(g)){b||(e[0]=a);d=jQuery.map(e,function(j){var l;c.each(g,function(o,n){if(n==j){l=o;return false}});if(l)return l})}return d.join(", ")}else return a||""};isValue=function(a){return isObject(a)||isString(a)||isNumber(a)||isBoolean(a)};isBoolean=function(a){return typeof a==="boolean"};isNull=function(a){return a===null};isNumber=function(a){return typeof a==="number"&& -isFinite(a)};isString=function(a){return typeof a==="string"};isEmpty=function(a){if(!isString(a)&&isValue(a))return false;else if(!isValue(a))return true;a=c.trim(a).replace(/\ \;/ig,"").replace(/\ \;/ig,"");return a===""};isUndefined=function(a){return typeof a==="undefined"};isObject=function(a){return a&&(typeof a==="object"||isFunction(a))||false};isFunction=function(a){return typeof a==="function"}})(jQuery); -(function(a){a.jgrid.extend({getColProp:function(g){var d={},b=this[0];if(b.grid){b=b.p.colModel;for(var n=0;n0&&a(g).each(function(){c=this;if(o=h.rows.namedItem(c[d])){f=c[d];if(b===true)if(h.p.jsonReader.repeatitems===true){if(h.p.jsonReader.cell)c=c[h.p.jsonReader.cell];for(var e=0;e span:first",o).html(l).attr(q):a("td:eq("+e+")",o).html(l).attr(q)}return s=true}a(h.p.colModel).each(function(m){n=b===true?this.jsonmap|| -this.name:this.name;if(c[n]!==undefined){l=h.formatter(f,c[n],m,c,"edit");q=this.title?{title:a.jgrid.stripHtml(l)}:{};h.p.treeGrid===true&&n==h.p.ExpandColumn?a("td:eq("+m+") > span:first",o).html(l).attr(q):a("td:eq("+m+")",o).html(l).attr(q);s=true}})}})});return s},filterGrid:function(g,d){d=a.extend({gridModel:false,gridNames:false,gridToolbar:false,filterModel:[],formtype:"horizontal",autosearch:true,formclass:"filterform",tableclass:"filtertable",buttonclass:"filterbutton",searchButton:"Search", -clearButton:"Clear",enableSearch:false,enableClear:false,beforeSearch:null,afterSearch:null,beforeClear:null,afterClear:null,url:"",marksearched:true},d||{});return this.each(function(){var b=this;this.p=d;if(this.p.filterModel.length===0&&this.p.gridModel===false)alert("No filter is set");else if(g){this.p.gridid=g.indexOf("#")!=-1?g:"#"+g;var n=a(this.p.gridid).jqGrid("getGridParam","colModel");if(n){if(this.p.gridModel===true){var s=a(this.p.gridid)[0],q;a.each(n,function(f){var e=[];this.search= -this.search===false?false:true;q=this.editrules&&this.editrules.searchhidden===true?true:this.hidden===true?false:true;if(this.search===true&&q===true){e.label=b.p.gridNames===true?s.p.colNames[f]:"";e.name=this.name;e.index=this.index||this.name;e.stype=this.edittype||"text";if(e.stype!="select")e.stype="text";e.defval=this.defval||"";e.surl=this.surl||"";e.sopt=this.editoptions||{};e.width=this.width;b.p.filterModel.push(e)}})}else a.each(b.p.filterModel,function(){for(var f=0;f0?true:false;a.extend(i.p.postData,f);var j;if(b.p.url){j=a(i).jqGrid("getGridParam","url");a(i).jqGrid("setGridParam",{url:b.p.url})}a(i).jqGrid("setGridParam",{search:p}).trigger("reloadGrid",[{page:1}]);j&&a(i).jqGrid("setGridParam", -{url:j});a.isFunction(b.p.afterSearch)&&b.p.afterSearch()},l=function(){var f={},e,m=0,i=a(b.p.gridid)[0],k;a.isFunction(b.p.beforeClear)&&b.p.beforeClear();a.each(b.p.filterModel,function(){k=this.index;e=this.defval?this.defval:"";if(!this.stype)this.stype="text";switch(this.stype){case "select":var r;a("select[name="+k+"] option",b).each(function(v){if(v===0)this.selected=true;if(a(this).text()==e){this.selected=true;r=a(this).val();return false}});if(r){f[k]=r;b.p.marksearched&&a("#jqgh_"+this.name, -i.grid.hDiv).addClass("dirty-cell");m++}else{b.p.marksearched&&a("#jqgh_"+this.name,i.grid.hDiv).removeClass("dirty-cell");try{delete i.p.postData[this.index]}catch(u){}}break;case "text":a("input[name="+k+"]",b).val(e);if(e){f[k]=e;b.p.marksearched&&a("#jqgh_"+this.name,i.grid.hDiv).addClass("dirty-cell");m++}else{b.p.marksearched&&a("#jqgh_"+this.name,i.grid.hDiv).removeClass("dirty-cell");try{delete i.p.postData[this.index]}catch(t){}}break}});var p=m>0?true:false;a.extend(i.p.postData,f);var j; -if(b.p.url){j=a(i).jqGrid("getGridParam","url");a(i).jqGrid("setGridParam",{url:b.p.url})}a(i).jqGrid("setGridParam",{search:p}).trigger("reloadGrid",[{page:1}]);j&&a(i).jqGrid("setGridParam",{url:j});a.isFunction(b.p.afterClear)&&b.p.afterClear()},o=a("
                      "),c=a("
                      ");a(o).append(c);(function(){var f=document.createElement("tr"), -e,m,i,k;b.p.formtype=="horizontal"&&a(c).append(f);a.each(b.p.filterModel,function(p){i=document.createElement("td");a(i).append("");k=document.createElement("td");var j=this;if(!this.stype)this.stype="text";switch(this.stype){case "select":if(this.surl)a(k).load(this.surl,function(){j.defval&&a("select",this).val(j.defval);a("select",this).attr({name:j.index||j.name,id:"sg_"+j.name});j.sopt&&a("select",this).attr(j.sopt);b.p.gridToolbar===true&&j.width&& -a("select",this).width(j.width);b.p.autosearch===true&&a("select",this).change(function(){h();return false})});else if(j.sopt.value){var r=j.sopt.value,u=document.createElement("select");a(u).attr({name:j.index||j.name,id:"sg_"+j.name}).attr(j.sopt);var t;if(typeof r==="string"){p=r.split(";");for(var v=0;v");j.sopt&&a("input",k).attr(j.sopt);if(b.p.gridToolbar===true&&j.width)a.browser.msie?a("input",k).width(j.width- -4):a("input",k).width(j.width-2);b.p.autosearch===true&&a("input",k).keypress(function(w){if((w.charCode?w.charCode:w.keyCode?w.keyCode:0)==13){h();return false}return this});break}if(b.p.formtype=="horizontal"){b.p.gridToolbar===true&&b.p.gridNames===false?a(f).append(k):a(f).append(i).append(k);a(f).append(k)}else{e=document.createElement("tr");a(e).append(i).append(k);a(c).append(e)}});k=document.createElement("td");if(b.p.enableSearch===true){m="";a(k).append(m);a("input#sButton",k).click(function(){h();return false})}if(b.p.enableClear===true){m="";a(k).append(m);a("input#cButton",k).click(function(){l();return false})}if(b.p.enableClear===true||b.p.enableSearch===true)if(b.p.formtype=="horizontal")a(f).append(k);else{e=document.createElement("tr");a(e).append(" ").append(k);a(c).append(e)}})();a(this).append(o); -this.triggerSearch=h;this.clearSearch=l}else alert("Could not get grid colModel")}else alert("No target grid is set!")})},filterToolbar:function(g){g=a.extend({autosearch:true,searchOnEnter:true,beforeSearch:null,afterSearch:null,beforeClear:null,afterClear:null,searchurl:"",stringResult:false,groupOp:"AND"},g||{});return this.each(function(){function d(h,l){var o=a(h);o[0]&&jQuery.each(l,function(){this.data!==undefined?o.bind(this.type,this.data,this.fn):o.bind(this.type,this.fn)})}var b=this,n= -function(){var h={},l=0,o,c,f={};a.each(b.p.colModel,function(){c=this.index||this.name;var j=this.searchoptions&&this.searchoptions.sopt?this.searchoptions.sopt[0]:"bw";switch(this.stype){case "select":if(o=a("select[name="+c+"]",b.grid.hDiv).val()){h[c]=o;f[c]=j;l++}else try{delete b.p.postData[c]}catch(r){}break;case "text":if(o=a("input[name="+c+"]",b.grid.hDiv).val()){h[c]=o;f[c]=j;l++}else try{delete b.p.postData[c]}catch(u){}break}});var e=l>0?true:false;if(g.stringResult){var m='{"groupOp":"'+ -g.groupOp+'","rules":[',i=0;a.each(h,function(j,r){if(i>0)m+=",";m+='{"field":"'+j+'",';m+='"op":"'+f[j]+'",';m+='"data":"'+r+'"}';i++});m+="]}";a.extend(b.p.postData,{filters:m})}else a.extend(b.p.postData,h);var k;if(b.p.searchurl){k=b.p.url;a(b).jqGrid("setGridParam",{url:b.p.searchurl})}var p=false;if(a.isFunction(g.beforeSearch))p=g.beforeSearch.call(b);p||a(b).jqGrid("setGridParam",{search:e}).trigger("reloadGrid",[{page:1}]);k&&a(b).jqGrid("setGridParam",{url:k});a.isFunction(g.afterSearch)&& -g.afterSearch()},s=a(""),q;a.each(b.p.colModel,function(){var h=this,l,o,c,f;o=a("");l=a("
                      ");this.hidden===true&&a(o).css("display","none");this.search=this.search===false?false:true;if(typeof this.stype=="undefined")this.stype="text";c=a.extend({},this.searchoptions||{});if(this.search)switch(this.stype){case "select":if(f= -this.surl||c.dataUrl)a.ajax(a.extend({url:f,dataType:"html",complete:function(p){if(c.buildSelect!==undefined)(p=c.buildSelect(p))&&a(l).append(p);else a(l).append(p.responseText);c.defaultValue&&a("select",l).val(c.defaultValue);a("select",l).attr({name:h.index||h.name,id:"gs_"+h.name});c.attr&&a("select",l).attr(c.attr);a("select",l).css({width:"100%"});c.dataInit!==undefined&&c.dataInit(a("select",l)[0]);c.dataEvents!==undefined&&d(a("select",l)[0],c.dataEvents);g.autosearch===true&&a("select", -l).change(function(){n();return false});p=null}},a.jgrid.ajaxOptions,b.p.ajaxSelectOptions||{}));else{var e;if(h.searchoptions&&h.searchoptions.value)e=h.searchoptions.value;else if(h.editoptions&&h.editoptions.value)e=h.editoptions.value;if(e){f=document.createElement("select");f.style.width="100%";a(f).attr({name:h.index||h.name,id:"gs_"+h.name});var m,i;if(typeof e==="string"){e=e.split(";");for(var k=0;k");c.attr&&a("input",l).attr(c.attr);c.dataInit!==undefined&&c.dataInit(a("input",l)[0]);c.dataEvents!==undefined&&d(a("input",l)[0],c.dataEvents);if(g.autosearch===true)g.searchOnEnter?a("input",l).keypress(function(p){if((p.charCode?p.charCode:p.keyCode?p.keyCode:0)==13){n();return false}return this}):a("input",l).keydown(function(p){switch(p.which){case 9:case 16:case 37:case 38:case 39:case 40:case 27:break;default:q&&clearTimeout(q);q=setTimeout(function(){n()}, -500)}});break}a(o).append(l);a(s).append(o)});a("table thead",b.grid.hDiv).append(s);this.triggerToolbar=n;this.clearToolbar=function(h){var l={},o,c=0,f;h=typeof h!="boolean"?true:h;a.each(b.p.colModel,function(){o=this.searchoptions&&this.searchoptions.defaultValue?this.searchoptions.defaultValue:"";f=this.index||this.name;switch(this.stype){case "select":var j;a("select[name="+f+"] option",b.grid.hDiv).each(function(t){if(t===0)this.selected=true;if(a(this).text()==o){this.selected=true;j=a(this).val(); -return false}});if(j){l[f]=j;c++}else try{delete b.p.postData[f]}catch(r){}break;case "text":a("input[name="+f+"]",b.grid.hDiv).val(o);if(o){l[f]=o;c++}else try{delete b.p.postData[f]}catch(u){}break}});var e=c>0?true:false;if(g.stringResult){var m='{"groupOp":"'+g.groupOp+'","rules":[',i=0;a.each(l,function(j,r){if(i>0)m+=",";m+='{"field":"'+j+'",';m+='"op":"eq",';m+='"data":"'+r+'"}';i++});m+="]}";a.extend(b.p.postData,{filters:m})}else a.extend(b.p.postData,l);var k;if(b.p.searchurl){k=b.p.url; -a(b).jqGrid("setGridParam",{url:b.p.searchurl})}var p=false;if(a.isFunction(g.beforeClear))p=g.beforeClear.call(b);p||h&&a(b).jqGrid("setGridParam",{search:e}).trigger("reloadGrid",[{page:1}]);k&&a(b).jqGrid("setGridParam",{url:k});a.isFunction(g.afterClear)&&g.afterClear()};this.toggleToolbar=function(){var h=a("tr.ui-search-toolbar",b.grid.hDiv);h.css("display")=="none"?h.show():h.hide()}})}})})(jQuery); -var showModal=function(a){a.w.show()},closeModal=function(a){a.w.hide().attr("aria-hidden","true");a.o&&a.o.remove()},hideModal=function(a,b){b=jQuery.extend({jqm:true,gb:""},b||{});if(b.onClose){var c=b.onClose(a);if(typeof c=="boolean"&&!c)return}if(jQuery.fn.jqm&&b.jqm===true)jQuery(a).attr("aria-hidden","true").jqmHide();else{if(b.gb!="")try{jQuery(".jqgrid-overlay:first",b.gb).hide()}catch(e){}jQuery(a).hide().attr("aria-hidden","true")}}; -function findPos(a){var b=0,c=0;if(a.offsetParent){do{b+=a.offsetLeft;c+=a.offsetTop}while(a=a.offsetParent)}return[b,c]} -var createModal=function(a,b,c,e,f,h){var d=document.createElement("div"),g;g=jQuery(c.gbox).attr("dir")=="rtl"?true:false;d.className="ui-widget ui-widget-content ui-corner-all ui-jqdialog";d.id=a.themodal;var i=document.createElement("div");i.className="ui-jqdialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix";i.id=a.modalhead;jQuery(i).append(""+c.caption+"");var j=jQuery("").hover(function(){j.addClass("ui-state-hover")}, -function(){j.removeClass("ui-state-hover")}).append("");jQuery(i).append(j);if(g){d.dir="rtl";jQuery(".ui-jqdialog-title",i).css("float","right");jQuery(".ui-jqdialog-titlebar-close",i).css("left","0.3em")}else{d.dir="ltr";jQuery(".ui-jqdialog-title",i).css("float","left");jQuery(".ui-jqdialog-titlebar-close",i).css("right","0.3em")}var l=document.createElement("div");jQuery(l).addClass("ui-jqdialog-content ui-widget-content").attr("id",a.modalcontent); -jQuery(l).append(b);d.appendChild(l);jQuery(d).prepend(i);h===true?jQuery("body").append(d):jQuery(d).insertBefore(e);if(typeof c.jqModal==="undefined")c.jqModal=true;b={};if(jQuery.fn.jqm&&c.jqModal===true){if(c.left===0&&c.top===0){e=[];e=findPos(f);c.left=e[0]+4;c.top=e[1]+4}b.top=c.top+"px";b.left=c.left}else if(c.left!==0||c.top!==0){b.left=c.left;b.top=c.top+"px"}jQuery("a.ui-jqdialog-titlebar-close",i).click(function(){var n=jQuery("#"+a.themodal).data("onClose")||c.onClose,k=jQuery("#"+a.themodal).data("gbox")|| -c.gbox;hideModal("#"+a.themodal,{gb:k,jqm:c.jqModal,onClose:n});return false});if(c.width===0||!c.width)c.width=300;if(c.height===0||!c.height)c.height=200;if(!c.zIndex)c.zIndex=950;f=0;if(g&&b.left&&!h){f=jQuery(c.gbox).width()-(!isNaN(c.width)?parseInt(c.width,10):0)-8;b.left=parseInt(b.left,10)+parseInt(f,10)}if(b.left)b.left+="px";jQuery(d).css(jQuery.extend({width:isNaN(c.width)?"auto":c.width+"px",height:isNaN(c.height)?"auto":c.height+"px",zIndex:c.zIndex,overflow:"hidden"},b)).attr({tabIndex:"-1", -role:"dialog","aria-labelledby":a.modalhead,"aria-hidden":"true"});if(typeof c.drag=="undefined")c.drag=true;if(typeof c.resize=="undefined")c.resize=true;if(c.drag){jQuery(i).css("cursor","move");if(jQuery.fn.jqDrag)jQuery(d).jqDrag(i);else try{jQuery(d).draggable({handle:jQuery("#"+i.id)})}catch(q){}}if(c.resize)if(jQuery.fn.jqResize){jQuery(d).append("
                      ");jQuery("#"+a.themodal).jqResize(".jqResize", -a.scrollelm?"#"+a.scrollelm:false)}else try{jQuery(d).resizable({handles:"se, sw",alsoResize:a.scrollelm?"#"+a.scrollelm:false})}catch(o){}c.closeOnEscape===true&&jQuery(d).keydown(function(n){if(n.which==27){n=jQuery("#"+a.themodal).data("onClose")||c.onClose;hideModal(this,{gb:c.gbox,jqm:c.jqModal,onClose:n})}})},viewModal=function(a,b){b=jQuery.extend({toTop:true,overlay:10,modal:false,onShow:showModal,onHide:closeModal,gbox:"",jqm:true,jqM:true},b||{});if(jQuery.fn.jqm&&b.jqm===true)b.jqM?jQuery(a).attr("aria-hidden", -"false").jqm(b).jqmShow():jQuery(a).attr("aria-hidden","false").jqmShow();else{if(b.gbox!=""){jQuery(".jqgrid-overlay:first",b.gbox).show();jQuery(a).data("gbox",b.gbox)}jQuery(a).show().attr("aria-hidden","false");try{jQuery(":input:visible",a)[0].focus()}catch(c){}}}; -function info_dialog(a,b,c,e){var f={width:290,height:"auto",dataheight:"auto",drag:true,resize:false,caption:""+a+"",left:250,top:170,zIndex:1E3,jqModal:true,modal:false,closeOnEscape:true,align:"center",buttonalign:"center",buttons:[]};jQuery.extend(f,e||{});var h=f.jqModal;if(jQuery.fn.jqm&&!h)h=false;a="";if(f.buttons.length>0)for(e=0;e"+ -f.buttons[e].text+""}e=isNaN(f.dataheight)?f.dataheight:f.dataheight+"px";var d="
                      ";d+="
                      "+b+"
                      ";d+=c?"
                      "+ -c+""+a+"
                      ":a!=""?"
                      "+a+"
                      ":"";d+="
                      ";try{jQuery("#info_dialog").attr("aria-hidden")=="false"&&hideModal("#info_dialog",{jqm:h});jQuery("#info_dialog").remove()}catch(g){}createModal({themodal:"info_dialog",modalhead:"info_head",modalcontent:"info_content",scrollelm:"infocnt"},d,f,"","",true);a&&jQuery.each(f.buttons, -function(j){jQuery("#"+this.id,"#info_id").bind("click",function(){f.buttons[j].onClick.call(jQuery("#info_dialog"));return false})});jQuery("#closedialog","#info_id").click(function(j){hideModal("#info_dialog",{jqm:h});return false});jQuery(".fm-button","#info_dialog").hover(function(){jQuery(this).addClass("ui-state-hover")},function(){jQuery(this).removeClass("ui-state-hover")});viewModal("#info_dialog",{onHide:function(j){j.w.hide().remove();j.o&&j.o.remove()},modal:f.modal,jqm:h});try{$("#info_dialog").focus()}catch(i){}} -function createEl(a,b,c,e,f){function h(k,m){if(jQuery.isFunction(m.dataInit)){k.id=m.id;m.dataInit(k);delete m.id;delete m.dataInit}if(m.dataEvents){jQuery.each(m.dataEvents,function(){this.data!==undefined?jQuery(k).bind(this.type,this.data,this.fn):jQuery(k).bind(this.type,this.fn)});delete m.dataEvents}return m}var d="";b.defaultValue&&delete b.defaultValue;switch(a){case "textarea":d=document.createElement("textarea");if(e)b.cols||jQuery(d).css({width:"98%"});else if(!b.cols)b.cols=20;if(!b.rows)b.rows= -2;if(c==" "||c==" "||c.length==1&&c.charCodeAt(0)==160)c="";d.value=c;b=h(d,b);jQuery(d).attr(b).attr({role:"textbox",multiline:"true"});break;case "checkbox":d=document.createElement("input");d.type="checkbox";if(b.value){var g=b.value.split(":");if(c===g[0]){d.checked=true;d.defaultChecked=true}d.value=g[0];jQuery(d).attr("offval",g[1]);try{delete b.value}catch(i){}}else{g=c.toLowerCase();if(g.search(/(false|0|no|off|undefined)/i)<0&&g!==""){d.checked=true;d.defaultChecked=true;d.value= -c}else d.value="on";jQuery(d).attr("offval","off")}b=h(d,b);jQuery(d).attr(b).attr("role","checkbox");break;case "select":d=document.createElement("select");d.setAttribute("role","select");var j,l=[];if(b.multiple===true){j=true;d.multiple="multiple";$(d).attr("aria-multiselectable","true")}else j=false;if(typeof b.dataUrl!="undefined")jQuery.ajax(jQuery.extend({url:b.dataUrl,type:"GET",complete:function(k,m){try{delete b.dataUrl;delete b.value}catch(r){}if(typeof b.buildSelect!="undefined"){k=b.buildSelect(k); -k=jQuery(k).html();delete b.buildSelect}else k=jQuery(k.responseText).html();if(k){jQuery(d).append(k);b=h(d,b);if(typeof b.size==="undefined")b.size=j?3:1;if(j){l=c.split(",");l=jQuery.map(l,function(p){return jQuery.trim(p)})}else l[0]=jQuery.trim(c);jQuery(d).attr(b);setTimeout(function(){jQuery("option",d).each(function(p){if(p===0)this.selected="";$(this).attr("role","option");if(jQuery.inArray(jQuery.trim(jQuery(this).text()),l)>-1||jQuery.inArray(jQuery.trim(jQuery(this).val()),l)>-1){this.selected= -"selected";if(!j)return false}})},0)}}},f||{}));else if(b.value){if(j){l=c.split(",");l=jQuery.map(l,function(k){return jQuery.trim(k)});if(typeof b.size==="undefined")b.size=3}else b.size=1;if(typeof b.value==="function")b.value=b.value();if(typeof b.value==="string"){e=b.value.split(";");for(g=0;g2)f[1]=jQuery.map(f,function(k,m){if(m>0)return k}).join(":");a=document.createElement("option");a.setAttribute("role","option");a.value=f[0];a.innerHTML=f[1]; -if(!j&&(jQuery.trim(f[0])==jQuery.trim(c)||jQuery.trim(f[1])==jQuery.trim(c)))a.selected="selected";if(j&&(jQuery.inArray(jQuery.trim(f[1]),l)>-1||jQuery.inArray(jQuery.trim(f[0]),l)>-1))a.selected="selected";d.appendChild(a)}}else if(typeof b.value==="object"){e=b.value;for(g in e)if(e.hasOwnProperty(g)){a=document.createElement("option");a.setAttribute("role","option");a.value=g;a.innerHTML=e[g];if(!j&&(jQuery.trim(g)==jQuery.trim(c)||jQuery.trim(e[g])==jQuery.trim(c)))a.selected="selected";if(j&& -(jQuery.inArray(jQuery.trim(e[g]),l)>-1||jQuery.inArray(jQuery.trim(g),l)>-1))a.selected="selected";d.appendChild(a)}}b=h(d,b);try{delete b.value}catch(q){}jQuery(d).attr(b)}break;case "text":case "password":case "button":g=a=="button"?"button":"textbox";d=document.createElement("input");d.type=a;d.value=c;b=h(d,b);if(a!="button")if(e)b.size||jQuery(d).css({width:"98%"});else if(!b.size)b.size=20;jQuery(d).attr(b).attr("role",g);break;case "image":case "file":d=document.createElement("input");d.type= -a;b=h(d,b);jQuery(d).attr(b);break;case "custom":d=document.createElement("span");try{if(jQuery.isFunction(b.custom_element)){var o=b.custom_element.call(this,c,b);if(o){o=jQuery(o).addClass("customelement").attr({id:b.id,name:b.name});jQuery(d).empty().append(o)}else throw"e2";}else throw"e1";}catch(n){n=="e1"&&info_dialog(jQuery.jgrid.errors.errcap,"function 'custom_element' "+jQuery.jgrid.edit.msg.nodefined,jQuery.jgrid.edit.bClose);n=="e2"?info_dialog(jQuery.jgrid.errors.errcap,"function 'custom_element' "+ -jQuery.jgrid.edit.msg.novalue,jQuery.jgrid.edit.bClose):info_dialog(jQuery.jgrid.errors.errcap,n.message,jQuery.jgrid.edit.bClose)}break}return d}function daysInFebruary(a){return a%4===0&&(a%100!==0||a%400===0)?29:28}function DaysArray(a){for(var b=1;b<=a;b++){this[b]=31;if(b==4||b==6||b==9||b==11)this[b]=30;if(b==2)this[b]=29}return this} -function checkDate(a,b){var c={},e;a=a.toLowerCase();e=a.indexOf("/")!=-1?"/":a.indexOf("-")!=-1?"-":a.indexOf(".")!=-1?".":"/";a=a.split(e);b=b.split(e);if(b.length!=3)return false;e=-1;for(var f,h=-1,d=-1,g=0;g12)return false}if(h===-1)return false;else{i=c[a[h]].toString();if(i.length<1||c[a[h]]<1||c[a[h]]>31||c[a[d]]==2&&c[a[h]]>daysInFebruary(c[a[e]])||c[a[h]]>g[c[a[d]]])return false}return true}function isEmpty(a){return a.match(/^s+$/)||a==""?true:false} -function checkTime(a){var b=/^(\d{1,2}):(\d{2})([ap]m)?$/;if(!isEmpty(a))if(a=a.match(b)){if(a[3]){if(a[1]<1||a[1]>12)return false}else if(a[1]>23)return false;if(a[2]>59)return false}else return false;return true} -function checkValues(a,b,c){var e,f,h;if(typeof b=="string"){f=0;for(len=c.p.colModel.length;f=0)e=c.p.colModel[b].editrules;if(e){h||(h=c.p.colNames[b]);if(e.required===true)if(a.match(/^s+$/)||a=="")return[false,h+": "+jQuery.jgrid.edit.msg.required,""];f=e.required===false?false:true;if(e.number===true)if(!(f===false&&isEmpty(a)))if(isNaN(a))return[false,h+": "+ -jQuery.jgrid.edit.msg.number,""];if(typeof e.minValue!="undefined"&&!isNaN(e.minValue))if(parseFloat(a)parseFloat(e.maxValue))return[false,h+": "+jQuery.jgrid.edit.msg.maxValue+" "+e.maxValue,""];var g;if(e.email===true)if(!(f===false&&isEmpty(a))){g=/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i; -if(!g.test(a))return[false,h+": "+jQuery.jgrid.edit.msg.email,""]}if(e.integer===true)if(!(f===false&&isEmpty(a))){if(isNaN(a))return[false,h+": "+jQuery.jgrid.edit.msg.integer,""];if(a%1!==0||a.indexOf(".")!=-1)return[false,h+": "+jQuery.jgrid.edit.msg.integer,""]}if(e.date===true)if(!(f===false&&isEmpty(a))){b=c.p.colModel[b].datefmt||"Y-m-d";if(!checkDate(b,a))return[false,h+": "+jQuery.jgrid.edit.msg.date+" - "+b,""]}if(e.time===true)if(!(f===false&&isEmpty(a)))if(!checkTime(a))return[false,h+ -": "+jQuery.jgrid.edit.msg.date+" - hh:mm (am/pm)",""];if(e.url===true)if(!(f===false&&isEmpty(a))){g=/^(((https?)|(ftp)):\/\/([\-\w]+\.)+\w{2,3}(\/[%\-\w]+(\.\w{2,})?)*(([\w\-\.\?\\\/+@&#;`~=%!]*)(\.\w{2,})?)*\/?)/i;if(!g.test(a))return[false,h+": "+jQuery.jgrid.edit.msg.url,""]}if(e.custom===true)if(!(f===false&&isEmpty(a)))if(jQuery.isFunction(e.custom_func)){a=e.custom_func.call(c,a,h);return jQuery.isArray(a)?a:[false,jQuery.jgrid.edit.msg.customarray,""]}else return[false,jQuery.jgrid.edit.msg.customfcheck, -""]}return[true,"",""]}; -(function(a){var c=null;a.jgrid.extend({searchGrid:function(d){d=a.extend({recreateFilter:false,drag:true,sField:"searchField",sValue:"searchString",sOper:"searchOper",sFilter:"filters",loadDefaults:true,beforeShowSearch:null,afterShowSearch:null,onInitializeSearch:null,closeAfterSearch:false,closeAfterReset:false,closeOnEscape:false,multipleSearch:false,cloneSearchRowOnAdd:true,sopt:null,stringResult:undefined,onClose:null,useDataProxy:false,overlay:true},a.jgrid.search,d||{});return this.each(function(){function b(o, -s){s=o.p.postData[s.sFilter];if(typeof s=="string")s=a.jgrid.parse(s);if(s){s.groupOp&&o.SearchFilter.setGroupOp(s.groupOp);if(s.rules){var y,J=0,k=s.rules.length;for(y=false;J1){var s=a("#"+h).css("zIndex");a("#"+h).css({zIndex:parseInt(s,10)+o})}a("#"+h).show();d.overlay===true&&a(".jqgrid-overlay:first","#gbox_"+z.p.id).show();try{a(":input:visible","#"+h)[0].focus()}catch(y){}}var z=this;if(z.grid)if(a.fn.searchFilter){var h="fbox_"+z.p.id;d.recreateFilter===true&&a("#"+h).remove();if(a("#"+h).html()!=null){a.isFunction(d.beforeShowSearch)&&d.beforeShowSearch(a("#"+ -h));F();a.isFunction(d.afterShowSearch)&&d.afterShowSearch(a("#"+h))}else{var p=[],H=a("#"+z.p.id).jqGrid("getGridParam","colNames"),f=a("#"+z.p.id).jqGrid("getGridParam","colModel"),l=["eq","ne","lt","le","gt","ge","bw","bn","in","ni","ew","en","cn","nc"],e,j,m,u=[];if(d.sopt!==null)for(e=m=0;e0)for(e=0;e0){a("").insertBefore("#gview_"+z.p.id);if(d.stringResult===undefined)d.stringResult=d.multipleSearch;z.SearchFilter=a("#"+h).searchFilter(p,{groupOps:d.groupOps,operators:u,onClose:t,resetText:d.Reset, -searchText:d.Find,windowTitle:d.caption,rulesText:d.rulesText,matchText:d.matchText,onSearch:q,onReset:D,stringResult:d.stringResult,ajaxSelectOptions:a.extend({},a.jgrid.ajaxOptions,z.p.ajaxSelectOptions||{}),clone:d.cloneSearchRowOnAdd});a(".ui-widget-overlay","#"+h).remove();z.p.direction=="rtl"&&a(".ui-closer","#"+h).css("float","left");if(d.drag===true){a("#"+h+" table thead tr:first td:first").css("cursor","move");if(jQuery.fn.jqDrag)a("#"+h).jqDrag(a("#"+h+" table thead tr:first td:first")); -else try{a("#"+h).draggable({handle:a("#"+h+" table thead tr:first td:first")})}catch(Q){}}if(d.multipleSearch===false){a(".ui-del, .ui-add, .ui-del, .ui-add-last, .matchText, .rulesText","#"+h).hide();a("select[name='groupOp']","#"+h).hide()}d.multipleSearch===true&&d.loadDefaults===true&&b(z,d);a.isFunction(d.onInitializeSearch)&&d.onInitializeSearch(a("#"+h));a.isFunction(d.beforeShowSearch)&&d.beforeShowSearch(a("#"+h));F();a.isFunction(d.afterShowSearch)&&d.afterShowSearch(a("#"+h));d.closeOnEscape=== -true&&a("#"+h).keydown(function(o){o.which==27&&t(a("#"+h))})}}}})},editGridRow:function(d,b){c=b=a.extend({top:0,left:0,width:300,height:"auto",dataheight:"auto",modal:false,drag:true,resize:true,url:null,mtype:"POST",clearAfterAdd:true,closeAfterEdit:false,reloadAfterSubmit:true,onInitializeForm:null,beforeInitData:null,beforeShowForm:null,afterShowForm:null,beforeSubmit:null,afterSubmit:null,onclickSubmit:null,afterComplete:null,onclickPgButtons:null,afterclickPgButtons:null,editData:{},recreateForm:false, -jqModal:true,closeOnEscape:false,addedrow:"first",topinfo:"",bottominfo:"",saveicon:[],closeicon:[],savekey:[false,13],navkeys:[false,38,40],checkOnSubmit:false,checkOnUpdate:false,_savedData:{},processing:false,onClose:null,ajaxEditOptions:{},serializeEditData:null,viewPagerButtons:true},a.jgrid.edit,b||{});return this.each(function(){function q(g,n){g===0?a("#pData","#"+j+"_2").addClass("ui-state-disabled"):a("#pData","#"+j+"_2").removeClass("ui-state-disabled");g==n?a("#nData","#"+j+"_2").addClass("ui-state-disabled"): -a("#nData","#"+j+"_2").removeClass("ui-state-disabled")}function D(){var g=a(f).jqGrid("getDataIDs"),n=a("#id_g","#"+j).val();return[a.inArray(n,g),g]}function t(){var g=true;a("#FormError","#"+j).hide();if(c.checkOnUpdate){k={};i={};F();w=a.extend({},k,i);if(O=H(w,c._savedData)){a("#"+e).data("disabled",true);a(".confirm","#"+m.themodal).show();g=false}}return g}function F(){a(".FormElement","#"+j).each(function(){var g=a(".customelement",this);if(g.length){var n=g[0].name;a.each(f.p.colModel,function(){if(this.name== -n&&this.editoptions&&a.isFunction(this.editoptions.custom_value)){try{k[n]=this.editoptions.custom_value(a("#"+n,"#"+j),"get");if(k[n]===undefined)throw"e1";}catch(r){r=="e1"?info_dialog(jQuery.jgrid.errors.errcap,"function 'custom_value' "+a.jgrid.edit.msg.novalue,jQuery.jgrid.edit.bClose):info_dialog(jQuery.jgrid.errors.errcap,r.message,jQuery.jgrid.edit.bClose)}return true}})}else{switch(a(this).get(0).type){case "checkbox":if(a(this).attr("checked"))k[this.name]=a(this).val();else{g=a(this).attr("offval"); -k[this.name]=g}break;case "select-one":k[this.name]=a("option:selected",this).val();i[this.name]=a("option:selected",this).text();break;case "select-multiple":k[this.name]=a(this).val();k[this.name]=k[this.name]?k[this.name].join(","):"";var v=[];a("option:selected",this).each(function(r,E){v[r]=a(E).text()});i[this.name]=v.join(",");break;case "password":case "text":case "textarea":case "button":k[this.name]=a(this).val();break}if(f.p.autoencode)k[this.name]=a.jgrid.htmlEncode(k[this.name])}});return true} -function z(g,n,v,r){for(var E,A,B,M=0,x,P,C,T=[],G=false,V="",R=1;R<=r;R++)V+="  ";if(g!="_empty")G=a(n).jqGrid("getInd",g);a(n.p.colModel).each(function(U){E=this.name;P=(A=this.editrules&&this.editrules.edithidden===true?false:this.hidden===true?true:false)?"style='display:none'":"";if(E!=="cb"&&E!=="subgrid"&&this.editable===true&&E!=="rn"){if(G===false)x="";else if(E==n.p.ExpandColumn&& -n.p.treeGrid===true)x=a("td:eq("+U+")",n.rows[G]).text();else try{x=a.unformat(a("td:eq("+U+")",n.rows[G]),{rowId:g,colModel:this},U)}catch(ca){x=a("td:eq("+U+")",n.rows[G]).html()}var W=a.extend({},this.editoptions||{},{id:E,name:E}),X=a.extend({},{elmprefix:"",elmsuffix:"",rowabove:false,rowcontent:""},this.formoptions||{}),ba=parseInt(X.rowpos,10)||M+1,da=parseInt((parseInt(X.colpos,10)||1)*2,10);if(g=="_empty"&&W.defaultValue)x=a.isFunction(W.defaultValue)?W.defaultValue():W.defaultValue;if(!this.edittype)this.edittype= -"text";if(f.p.autoencode)x=a.jgrid.htmlDecode(x);C=createEl(this.edittype,W,x,false,a.extend({},a.jgrid.ajaxOptions,n.p.ajaxSelectOptions||{}));if(x==""&&this.edittype=="checkbox")x=a(C).attr("offval");if(x==""&&this.edittype=="select")x=a("option:eq(0)",C).text();if(c.checkOnSubmit||c.checkOnUpdate)c._savedData[E]=x;a(C).addClass("FormElement");B=a(v).find("tr[rowpos="+ba+"]");if(X.rowabove){W=a(""+X.rowcontent+"");a(v).append(W);W[0].rp=ba}if(B.length=== -0){B=a("").addClass("FormData").attr("id","tr_"+E);a(B).append(V);a(v).append(B);B[0].rp=ba}a("td:eq("+(da-2)+")",B[0]).html(typeof X.label==="undefined"?n.p.colNames[U]:X.label);a("td:eq("+(da-1)+")",B[0]).append(X.elmprefix).append(C).append(X.elmsuffix);T[M]=U;M++}});if(M>0){R=a("");R[0].rp=M+999;a(v).append(R);if(c.checkOnSubmit||c.checkOnUpdate)c._savedData[n.p.id+"_id"]=g}return T}function h(g,n,v){var r,E=0,A,B,M,x,P;if(c.checkOnSubmit||c.checkOnUpdate){c._savedData={};c._savedData[n.p.id+"_id"]=g}var C=n.p.colModel;if(g=="_empty"){a(C).each(function(){r=this.name;M=a.extend({},this.editoptions||{});B=a("#"+a.jgrid.jqID(r),"#"+v);if(B[0]!=null){x="";if(M.defaultValue){x=a.isFunction(M.defaultValue)?M.defaultValue():M.defaultValue;if(B[0].type=="checkbox"){P= -x.toLowerCase();if(P.search(/(false|0|no|off|undefined)/i)<0&&P!==""){B[0].checked=true;B[0].defaultChecked=true;B[0].value=x}else B.attr({checked:"",defaultChecked:""})}else B.val(x)}else if(B[0].type=="checkbox"){B[0].checked=false;B[0].defaultChecked=false;x=a(B).attr("offval")}else if(B[0].type.substr(0,6)=="select")B[0].selectedIndex=0;else B.val(x);if(c.checkOnSubmit===true||c.checkOnUpdate)c._savedData[r]=x}});a("#id_g","#"+v).val(g)}else{var T=a(n).jqGrid("getInd",g,true);if(T){a("td",T).each(function(G){r= -C[G].name;if(r!=="cb"&&r!=="subgrid"&&r!=="rn"&&C[G].editable===true){if(r==n.p.ExpandColumn&&n.p.treeGrid===true)A=a(this).text();else try{A=a.unformat(this,{rowId:g,colModel:C[G]},G)}catch(V){A=a(this).html()}if(f.p.autoencode)A=a.jgrid.htmlDecode(A);if(c.checkOnSubmit===true||c.checkOnUpdate)c._savedData[r]=A;r=a.jgrid.jqID(r);switch(C[G].edittype){case "password":case "text":case "button":case "image":a("#"+r,"#"+v).val(A);break;case "textarea":if(A==" "||A==" "||A.length==1&&A.charCodeAt(0)== -160)A="";a("#"+r,"#"+v).val(A);break;case "select":var R=A.split(",");R=a.map(R,function(ca){return a.trim(ca)});a("#"+r+" option","#"+v).each(function(){this.selected=!C[G].editoptions.multiple&&(R[0]==a.trim(a(this).text())||R[0]==a.trim(a(this).val()))?true:C[G].editoptions.multiple?a.inArray(a.trim(a(this).text()),R)>-1||a.inArray(a.trim(a(this).val()),R)>-1?true:false:false});break;case "checkbox":A+="";if(C[G].editoptions&&C[G].editoptions.value)if(C[G].editoptions.value.split(":")[0]==A){a("#"+ -r,"#"+v).attr("checked",true);a("#"+r,"#"+v).attr("defaultChecked",true)}else{a("#"+r,"#"+v).attr("checked",false);a("#"+r,"#"+v).attr("defaultChecked","")}else{A=A.toLowerCase();if(A.search(/(false|0|no|off|undefined)/i)<0&&A!==""){a("#"+r,"#"+v).attr("checked",true);a("#"+r,"#"+v).attr("defaultChecked",true)}else{a("#"+r,"#"+v).attr("checked",false);a("#"+r,"#"+v).attr("defaultChecked","")}}break;case "custom":try{if(C[G].editoptions&&a.isFunction(C[G].editoptions.custom_value))C[G].editoptions.custom_value(a("#"+ -r,"#"+v),"set",A);else throw"e1";}catch(U){U=="e1"?info_dialog(jQuery.jgrid.errors.errcap,"function 'custom_value' "+a.jgrid.edit.msg.nodefined,jQuery.jgrid.edit.bClose):info_dialog(jQuery.jgrid.errors.errcap,U.message,jQuery.jgrid.edit.bClose)}break}E++}});E>0&&a("#id_g","#"+j).val(g)}}}function p(){var g,n=[true,"",""],v={},r=f.p.prmNames,E,A;if(a.isFunction(c.beforeCheckValues)){var B=c.beforeCheckValues(k,a("#"+e),k[f.p.id+"_id"]=="_empty"?r.addoper:r.editoper);if(B&&typeof B==="object")k=B}for(var M in k)if(k.hasOwnProperty(M)){n= -checkValues(k[M],M,f);if(n[0]===false)break}if(n[0]){if(a.isFunction(c.onclickSubmit))v=c.onclickSubmit(c,k)||{};if(a.isFunction(c.beforeSubmit))n=c.beforeSubmit(k,a("#"+e))}if(n[0]&&!c.processing){c.processing=true;a("#sData","#"+j+"_2").addClass("ui-state-active");A=r.oper;E=r.id;k[A]=a.trim(k[f.p.id+"_id"])=="_empty"?r.addoper:r.editoper;if(k[A]!=r.addoper)k[E]=k[f.p.id+"_id"];else if(k[E]===undefined)k[E]=k[f.p.id+"_id"];delete k[f.p.id+"_id"];k=a.extend(k,c.editData,v);v=a.extend({url:c.url? -c.url:a(f).jqGrid("getGridParam","editurl"),type:c.mtype,data:a.isFunction(c.serializeEditData)?c.serializeEditData(k):k,complete:function(x,P){if(P!="success"){n[0]=false;n[1]=a.isFunction(c.errorTextFormat)?c.errorTextFormat(x):P+" Status: '"+x.statusText+"'. Error code: "+x.status}else if(a.isFunction(c.afterSubmit))n=c.afterSubmit(x,k);if(n[0]===false){a("#FormError>td","#"+j).html(n[1]);a("#FormError","#"+j).show()}else{a.each(f.p.colModel,function(){if(i[this.name]&&this.formatter&&this.formatter== -"select")try{delete i[this.name]}catch(G){}});k=a.extend(k,i);f.p.autoencode&&a.each(k,function(G,V){k[G]=a.jgrid.htmlDecode(V)});if(k[A]==r.addoper){n[2]||(n[2]=parseInt(f.p.records,10)+1);k[E]=n[2];if(c.closeAfterAdd){if(c.reloadAfterSubmit)a(f).trigger("reloadGrid");else{a(f).jqGrid("addRowData",n[2],k,b.addedrow);a(f).jqGrid("setSelection",n[2])}hideModal("#"+m.themodal,{gb:"#gbox_"+l,jqm:b.jqModal,onClose:c.onClose})}else if(c.clearAfterAdd){c.reloadAfterSubmit?a(f).trigger("reloadGrid"):a(f).jqGrid("addRowData", -n[2],k,b.addedrow);h("_empty",f,e)}else c.reloadAfterSubmit?a(f).trigger("reloadGrid"):a(f).jqGrid("addRowData",n[2],k,b.addedrow)}else{if(c.reloadAfterSubmit){a(f).trigger("reloadGrid");c.closeAfterEdit||setTimeout(function(){a(f).jqGrid("setSelection",k[E])},1E3)}else f.p.treeGrid===true?a(f).jqGrid("setTreeRow",k[E],k):a(f).jqGrid("setRowData",k[E],k);c.closeAfterEdit&&hideModal("#"+m.themodal,{gb:"#gbox_"+l,jqm:b.jqModal,onClose:c.onClose})}if(a.isFunction(c.afterComplete)){g=x;setTimeout(function(){c.afterComplete(g, -k,a("#"+e));g=null},500)}}c.processing=false;if(c.checkOnSubmit||c.checkOnUpdate){a("#"+e).data("disabled",false);if(c._savedData[f.p.id+"_id"]!="_empty")for(var C in c._savedData)if(k[C])c._savedData[C]=k[C]}a("#sData","#"+j+"_2").removeClass("ui-state-active");try{a(":input:visible","#"+e)[0].focus()}catch(T){}},error:function(x,P,C){a("#FormError>td","#"+j).html(P+" : "+C);a("#FormError","#"+j).show();c.processing=false;a("#"+e).data("disabled",false);a("#sData","#"+j+"_2").removeClass("ui-state-active")}}, -a.jgrid.ajaxOptions,c.ajaxEditOptions);if(!v.url&&!c.useDataProxy)if(a.isFunction(f.p.dataProxy))c.useDataProxy=true;else{n[0]=false;n[1]+=" "+a.jgrid.errors.nourl}if(n[0])c.useDataProxy?f.p.dataProxy.call(f,v,"set_"+f.p.id):a.ajax(v)}if(n[0]===false){a("#FormError>td","#"+j).html(n[1]);a("#FormError","#"+j).show()}}function H(g,n){var v=false,r;for(r in g)if(g[r]!=n[r]){v=true;break}return v}var f=this;if(f.grid&&d){var l=f.p.id,e="FrmGrid_"+l,j="TblGrid_"+l,m={themodal:"editmod"+l,modalhead:"edithd"+ -l,modalcontent:"editcnt"+l,scrollelm:e},u=a.isFunction(c.beforeShowForm)?c.beforeShowForm:false,Q=a.isFunction(c.afterShowForm)?c.afterShowForm:false,o=a.isFunction(c.beforeInitData)?c.beforeInitData:false,s=a.isFunction(c.onInitializeForm)?c.onInitializeForm:false,y=1,J=0,k,i,w,O;if(d=="new"){d="_empty";b.caption=b.addCaption}else b.caption=b.editCaption;b.recreateForm===true&&a("#"+m.themodal).html()!=null&&a("#"+m.themodal).remove();var S=true;if(b.checkOnUpdate&&b.jqModal&&!b.modal)S=false;if(a("#"+ -m.themodal).html()!=null){a(".ui-jqdialog-title","#"+m.modalhead).html(b.caption);a("#FormError","#"+j).hide();if(c.topinfo){a(".topinfo","#"+j+"_2").html(c.topinfo);a(".tinfo","#"+j+"_2").show()}else a(".tinfo","#"+j+"_2").hide();if(c.bottominfo){a(".bottominfo","#"+j+"_2").html(c.bottominfo);a(".binfo","#"+j+"_2").show()}else a(".binfo","#"+j+"_2").hide();o&&o(a("#"+e));h(d,f,e);d=="_empty"||!c.viewPagerButtons?a("#pData, #nData","#"+j+"_2").hide():a("#pData, #nData","#"+j+"_2").show();if(c.processing=== -true){c.processing=false;a("#sData","#"+j+"_2").removeClass("ui-state-active")}if(a("#"+e).data("disabled")===true){a(".confirm","#"+m.themodal).hide();a("#"+e).data("disabled",false)}u&&u(a("#"+e));a("#"+m.themodal).data("onClose",c.onClose);viewModal("#"+m.themodal,{gbox:"#gbox_"+l,jqm:b.jqModal,jqM:false,closeoverlay:S,modal:b.modal});S||a(".jqmOverlay").click(function(){if(!t())return false;hideModal("#"+m.themodal,{gb:"#gbox_"+l,jqm:b.jqModal,onClose:c.onClose});return false});Q&&Q(a("#"+e))}else{a(f.p.colModel).each(function(){var g= -this.formoptions;y=Math.max(y,g?g.colpos||0:0);J=Math.max(J,g?g.rowpos||0:0)});var I=isNaN(b.dataheight)?b.dataheight:b.dataheight+"px",K;I=a("
                      ").data("disabled",false);var L=a("
                      ");a(I).append(L);K=a("");K[0].rp=0;a(L).append(K);K=a(""+c.topinfo+"");K[0].rp=0;a(L).append(K);o&&o(a("#"+e));K=(o=f.p.direction=="rtl"?true:false)?"nData":"pData";var N=o?"pData":"nData";z(d,f,L,y);K="";N=""; -var Z=""+b.bSubmit+"",$=""+b.bCancel+"";K="";K+="";K+="
                      "+Z+$+"
                      ";if(J>0){var aa=[];a.each(a(L)[0].rows,function(g,n){aa[g]=n});aa.sort(function(g,n){if(g.rp>n.rp)return 1;if(g.rp
                      ").append(I).append(K);createModal(m,I,b,"#gview_"+f.p.id,a("#gview_"+f.p.id)[0]);if(o){a("#pData, #nData","#"+j+"_2").css("float","right");a(".EditButton","#"+j+ -"_2").css("text-align","left")}c.topinfo&&a(".tinfo","#"+j+"_2").show();c.bottominfo&&a(".binfo","#"+j+"_2").show();K=I=null;a("#"+m.themodal).keydown(function(g){var n=g.target;if(a("#"+e).data("disabled")===true)return false;if(c.savekey[0]===true&&g.which==c.savekey[1])if(n.tagName!="TEXTAREA"){a("#sData","#"+j+"_2").trigger("click");return false}if(g.which===27){if(!t())return false;Y&&hideModal(this,{gb:b.gbox,jqm:b.jqModal,onClose:c.onClose});return false}if(c.navkeys[0]===true){if(a("#id_g", -"#"+j).val()=="_empty")return true;if(g.which==c.navkeys[1]){a("#pData","#"+j+"_2").trigger("click");return false}if(g.which==c.navkeys[2]){a("#nData","#"+j+"_2").trigger("click");return false}}});if(b.checkOnUpdate){a("a.ui-jqdialog-titlebar-close span","#"+m.themodal).removeClass("jqmClose");a("a.ui-jqdialog-titlebar-close","#"+m.themodal).unbind("click").click(function(){if(!t())return false;hideModal("#"+m.themodal,{gb:"#gbox_"+l,jqm:b.jqModal,onClose:c.onClose});return false})}b.saveicon=a.extend([true, -"left","ui-icon-disk"],b.saveicon);b.closeicon=a.extend([true,"left","ui-icon-close"],b.closeicon);if(b.saveicon[0]===true)a("#sData","#"+j+"_2").addClass(b.saveicon[1]=="right"?"fm-button-icon-right":"fm-button-icon-left").append("");if(b.closeicon[0]===true)a("#cData","#"+j+"_2").addClass(b.closeicon[1]=="right"?"fm-button-icon-right":"fm-button-icon-left").append("");if(c.checkOnSubmit||c.checkOnUpdate){Z= -""+b.bYes+"";N=""+b.bNo+"";$=""+b.bExit+"";I=b.zIndex||999;I++;a("
                      "+b.saveData+"

                      "+Z+N+$+"
                      ").insertAfter("#"+e);a("#sNew","#"+m.themodal).click(function(){p();a("#"+e).data("disabled",false);a(".confirm","#"+m.themodal).hide();return false});a("#nNew","#"+m.themodal).click(function(){a(".confirm","#"+ -m.themodal).hide();a("#"+e).data("disabled",false);setTimeout(function(){a(":input","#"+e)[0].focus()},0);return false});a("#cNew","#"+m.themodal).click(function(){a(".confirm","#"+m.themodal).hide();a("#"+e).data("disabled",false);hideModal("#"+m.themodal,{gb:"#gbox_"+l,jqm:b.jqModal,onClose:c.onClose});return false})}s&&s(a("#"+e));d=="_empty"||!c.viewPagerButtons?a("#pData,#nData","#"+j+"_2").hide():a("#pData,#nData","#"+j+"_2").show();u&&u(a("#"+e));a("#"+m.themodal).data("onClose",c.onClose); -viewModal("#"+m.themodal,{gbox:"#gbox_"+l,jqm:b.jqModal,closeoverlay:S,modal:b.modal});S||a(".jqmOverlay").click(function(){if(!t())return false;hideModal("#"+m.themodal,{gb:"#gbox_"+l,jqm:b.jqModal,onClose:c.onClose});return false});Q&&Q(a("#"+e));a(".fm-button","#"+m.themodal).hover(function(){a(this).addClass("ui-state-hover")},function(){a(this).removeClass("ui-state-hover")});a("#sData","#"+j+"_2").click(function(){k={};i={};a("#FormError","#"+j).hide();F();if(k[f.p.id+"_id"]=="_empty")p();else if(b.checkOnSubmit=== -true){w=a.extend({},k,i);if(O=H(w,c._savedData)){a("#"+e).data("disabled",true);a(".confirm","#"+m.themodal).show()}else p()}else p();return false});a("#cData","#"+j+"_2").click(function(){if(!t())return false;hideModal("#"+m.themodal,{gb:"#gbox_"+l,jqm:b.jqModal,onClose:c.onClose});return false});a("#nData","#"+j+"_2").click(function(){if(!t())return false;a("#FormError","#"+j).hide();var g=D();g[0]=parseInt(g[0],10);if(g[0]!=-1&&g[1][g[0]+1]){a.isFunction(b.onclickPgButtons)&&b.onclickPgButtons("next", -a("#"+e),g[1][g[0]]);h(g[1][g[0]+1],f,e);a(f).jqGrid("setSelection",g[1][g[0]+1]);a.isFunction(b.afterclickPgButtons)&&b.afterclickPgButtons("next",a("#"+e),g[1][g[0]+1]);q(g[0]+1,g[1].length-1)}return false});a("#pData","#"+j+"_2").click(function(){if(!t())return false;a("#FormError","#"+j).hide();var g=D();if(g[0]!=-1&&g[1][g[0]-1]){a.isFunction(b.onclickPgButtons)&&b.onclickPgButtons("prev",a("#"+e),g[1][g[0]]);h(g[1][g[0]-1],f,e);a(f).jqGrid("setSelection",g[1][g[0]-1]);a.isFunction(b.afterclickPgButtons)&& -b.afterclickPgButtons("prev",a("#"+e),g[1][g[0]-1]);q(g[0]-1,g[1].length-1)}return false})}u=D();q(u[0],u[1].length-1)}})},viewGridRow:function(d,b){b=a.extend({top:0,left:0,width:0,height:"auto",dataheight:"auto",modal:false,drag:true,resize:true,jqModal:true,closeOnEscape:false,labelswidth:"30%",closeicon:[],navkeys:[false,38,40],onClose:null,beforeShowForm:null,viewPagerButtons:true},a.jgrid.view,b||{});return this.each(function(){function q(){if(b.closeOnEscape===true||b.navkeys[0]===true)setTimeout(function(){a(".ui-jqdialog-titlebar-close", -"#"+l.modalhead).focus()},0)}function D(i,w){i===0?a("#pData","#"+f+"_2").addClass("ui-state-disabled"):a("#pData","#"+f+"_2").removeClass("ui-state-disabled");i==w?a("#nData","#"+f+"_2").addClass("ui-state-disabled"):a("#nData","#"+f+"_2").removeClass("ui-state-disabled")}function t(){var i=a(h).jqGrid("getDataIDs"),w=a("#id_g","#"+f).val();return[a.inArray(w,i),i]}function F(i,w,O,S){for(var I,K,L,N=0,Z,$,aa=[],Y=false,g="  ",n="",v=["integer","number","currency"],r=0,E=0,A,B,M,x=1;x<=S;x++)n+=x==1?g:"  ";a(w.p.colModel).each(function(){K=this.editrules&&this.editrules.edithidden===true?false:this.hidden===true?true:false;if(!K&&this.align==="right")if(this.formatter&&a.inArray(this.formatter,v)!==-1)r= -Math.max(r,parseInt(this.width,10));else E=Math.max(E,parseInt(this.width,10))});A=r!==0?r:E!==0?E:0;Y=a(w).jqGrid("getInd",i);a(w.p.colModel).each(function(P){I=this.name;B=false;$=(K=this.editrules&&this.editrules.edithidden===true?false:this.hidden===true?true:false)?"style='display:none'":"";M=typeof this.viewable!="boolean"?true:this.viewable;if(I!=="cb"&&I!=="subgrid"&&I!=="rn"&&M){Z=Y===false?"":I==w.p.ExpandColumn&&w.p.treeGrid===true?a("td:eq("+P+")",w.rows[Y]).text():a("td:eq("+P+")",w.rows[Y]).html(); -B=this.align==="right"&&A!==0?true:false;a.extend({},this.editoptions||{},{id:I,name:I});var C=a.extend({},{rowabove:false,rowcontent:""},this.formoptions||{}),T=parseInt(C.rowpos,10)||N+1,G=parseInt((parseInt(C.colpos,10)||1)*2,10);if(C.rowabove){var V=a(""+C.rowcontent+"");a(O).append(V);V[0].rp=T}L=a(O).find("tr[rowpos="+T+"]");if(L.length===0){L=a("").addClass("FormData").attr("id","trv_"+I);a(L).append(n);a(O).append(L); -L[0].rp=T}a("td:eq("+(G-2)+")",L[0]).html(""+(typeof C.label==="undefined"?w.p.colNames[P]:C.label)+"");a("td:eq("+(G-1)+")",L[0]).append(""+Z+"").attr("id","v_"+I);B&&a("td:eq("+(G-1)+") span",L[0]).css({"text-align":"right",width:A+"px"});aa[N]=P;N++}});if(N>0){i=a("");i[0].rp=N+99;a(O).append(i)}return aa} -function z(i,w){var O,S,I=0,K,L;if(L=a(w).jqGrid("getInd",i,true)){a("td",L).each(function(N){O=w.p.colModel[N].name;S=w.p.colModel[N].editrules&&w.p.colModel[N].editrules.edithidden===true?false:w.p.colModel[N].hidden===true?true:false;if(O!=="cb"&&O!=="subgrid"&&O!=="rn"){K=O==w.p.ExpandColumn&&w.p.treeGrid===true?a(this).text():a(this).html();a.extend({},w.p.colModel[N].editoptions||{});O=a.jgrid.jqID("v_"+O);a("#"+O+" span","#"+f).html(K);S&&a("#"+O,"#"+f).parents("tr:first").hide();I++}});I> -0&&a("#id_g","#"+f).val(i)}}var h=this;if(h.grid&&d){if(!b.imgpath)b.imgpath=h.p.imgpath;var p=h.p.id,H="ViewGrid_"+p,f="ViewTbl_"+p,l={themodal:"viewmod"+p,modalhead:"viewhd"+p,modalcontent:"viewcnt"+p,scrollelm:H},e=1,j=0;if(a("#"+l.themodal).html()!=null){a(".ui-jqdialog-title","#"+l.modalhead).html(b.caption);a("#FormError","#"+f).hide();z(d,h);a.isFunction(b.beforeShowForm)&&b.beforeShowForm(a("#"+H));viewModal("#"+l.themodal,{gbox:"#gbox_"+p,jqm:b.jqModal,jqM:false,modal:b.modal});q()}else{a(h.p.colModel).each(function(){var i= -this.formoptions;e=Math.max(e,i?i.colpos||0:0);j=Math.max(j,i?i.rowpos||0:0)});var m=isNaN(b.dataheight)?b.dataheight:b.dataheight+"px",u=a("
                      "),Q=a("
                      ");a(u).append(Q);F(d,h,Q,e);m=h.p.direction=="rtl"?true:false;var o="",s="",y=""+b.bClose+"";if(j>0){var J=[];a.each(a(Q)[0].rows,function(i,w){J[i]=w});J.sort(function(i,w){if(i.rp>w.rp)return 1; -if(i.rp").append(u).append("
                      "+y+"
                      ");createModal(l,u,b,"#gview_"+h.p.id,a("#gview_"+h.p.id)[0]); -if(m){a("#pData, #nData","#"+f+"_2").css("float","right");a(".EditButton","#"+f+"_2").css("text-align","left")}b.viewPagerButtons||a("#pData, #nData","#"+f+"_2").hide();u=null;a("#"+l.themodal).keydown(function(i){if(i.which===27){k&&hideModal(this,{gb:b.gbox,jqm:b.jqModal,onClose:b.onClose});return false}if(b.navkeys[0]===true){if(i.which===b.navkeys[1]){a("#pData","#"+f+"_2").trigger("click");return false}if(i.which===b.navkeys[2]){a("#nData","#"+f+"_2").trigger("click");return false}}});b.closeicon= -a.extend([true,"left","ui-icon-close"],b.closeicon);if(b.closeicon[0]===true)a("#cData","#"+f+"_2").addClass(b.closeicon[1]=="right"?"fm-button-icon-right":"fm-button-icon-left").append("");a.isFunction(b.beforeShowForm)&&b.beforeShowForm(a("#"+H));viewModal("#"+l.themodal,{gbox:"#gbox_"+p,jqm:b.jqModal,modal:b.modal});a(".fm-button:not(.ui-state-disabled)","#"+f+"_2").hover(function(){a(this).addClass("ui-state-hover")},function(){a(this).removeClass("ui-state-hover")}); -q();a("#cData","#"+f+"_2").click(function(){hideModal("#"+l.themodal,{gb:"#gbox_"+p,jqm:b.jqModal,onClose:b.onClose});return false});a("#nData","#"+f+"_2").click(function(){a("#FormError","#"+f).hide();var i=t();i[0]=parseInt(i[0],10);if(i[0]!=-1&&i[1][i[0]+1]){a.isFunction(b.onclickPgButtons)&&b.onclickPgButtons("next",a("#"+H),i[1][i[0]]);z(i[1][i[0]+1],h);a(h).jqGrid("setSelection",i[1][i[0]+1]);a.isFunction(b.afterclickPgButtons)&&b.afterclickPgButtons("next",a("#"+H),i[1][i[0]+1]);D(i[0]+1,i[1].length- -1)}q();return false});a("#pData","#"+f+"_2").click(function(){a("#FormError","#"+f).hide();var i=t();if(i[0]!=-1&&i[1][i[0]-1]){a.isFunction(b.onclickPgButtons)&&b.onclickPgButtons("prev",a("#"+H),i[1][i[0]]);z(i[1][i[0]-1],h);a(h).jqGrid("setSelection",i[1][i[0]-1]);a.isFunction(b.afterclickPgButtons)&&b.afterclickPgButtons("prev",a("#"+H),i[1][i[0]-1]);D(i[0]-1,i[1].length-1)}q();return false})}m=t();D(m[0],m[1].length-1)}})},delGridRow:function(d,b){c=b=a.extend({top:0,left:0,width:240,height:"auto", -dataheight:"auto",modal:false,drag:true,resize:true,url:"",mtype:"POST",reloadAfterSubmit:true,beforeShowForm:null,afterShowForm:null,beforeSubmit:null,onclickSubmit:null,afterSubmit:null,jqModal:true,closeOnEscape:false,delData:{},delicon:[],cancelicon:[],onClose:null,ajaxDelOptions:{},processing:false,serializeDelData:null,useDataProxy:false},a.jgrid.del,b||{});return this.each(function(){var q=this;if(q.grid)if(d){var D=typeof b.beforeShowForm==="function"?true:false,t=typeof b.afterShowForm=== -"function"?true:false,F=q.p.id,z={},h="DelTbl_"+F,p,H,f,l,e={themodal:"delmod"+F,modalhead:"delhd"+F,modalcontent:"delcnt"+F,scrollelm:h};if(jQuery.isArray(d))d=d.join();if(a("#"+e.themodal).html()!=null){a("#DelData>td","#"+h).text(d);a("#DelError","#"+h).hide();if(c.processing===true){c.processing=false;a("#dData","#"+h).removeClass("ui-state-active")}D&&b.beforeShowForm(a("#"+h));viewModal("#"+e.themodal,{gbox:"#gbox_"+F,jqm:b.jqModal,jqM:false,modal:b.modal})}else{var j=isNaN(b.dataheight)?b.dataheight: -b.dataheight+"px";j="
                      ";j+="";j+="";j+="";j+='";j+="
                      '+b.msg+"
                       
                      ";j+="
                      "+(""+b.bSubmit+"")+" "+(""+b.bCancel+"")+"
                      ";b.gbox="#gbox_"+F;createModal(e,j,b,"#gview_"+q.p.id,a("#gview_"+q.p.id)[0]);a(".fm-button", -"#"+h+"_2").hover(function(){a(this).addClass("ui-state-hover")},function(){a(this).removeClass("ui-state-hover")});b.delicon=a.extend([true,"left","ui-icon-scissors"],b.delicon);b.cancelicon=a.extend([true,"left","ui-icon-cancel"],b.cancelicon);if(b.delicon[0]===true)a("#dData","#"+h+"_2").addClass(b.delicon[1]=="right"?"fm-button-icon-right":"fm-button-icon-left").append("");if(b.cancelicon[0]===true)a("#eData","#"+h+"_2").addClass(b.cancelicon[1]== -"right"?"fm-button-icon-right":"fm-button-icon-left").append("");a("#dData","#"+h+"_2").click(function(){var m=[true,""];z={};var u=a("#DelData>td","#"+h).text();if(typeof b.onclickSubmit==="function")z=b.onclickSubmit(c,u)||{};if(typeof b.beforeSubmit==="function")m=b.beforeSubmit(u);if(m[0]&&!c.processing){c.processing=true;a(this).addClass("ui-state-active");f=q.p.prmNames;p=a.extend({},c.delData,z);l=f.oper;p[l]=f.deloper;H=f.id;p[H]=u;var Q=a.extend({url:c.url? -c.url:a(q).jqGrid("getGridParam","editurl"),type:b.mtype,data:a.isFunction(b.serializeDelData)?b.serializeDelData(p):p,complete:function(o,s){if(s!="success"){m[0]=false;m[1]=a.isFunction(c.errorTextFormat)?c.errorTextFormat(o):s+" Status: '"+o.statusText+"'. Error code: "+o.status}else if(typeof c.afterSubmit==="function")m=c.afterSubmit(o,p);if(m[0]===false){a("#DelError>td","#"+h).html(m[1]);a("#DelError","#"+h).show()}else{if(c.reloadAfterSubmit)a(q).trigger("reloadGrid");else{s=[];s=u.split(","); -if(q.p.treeGrid===true)try{a(q).jqGrid("delTreeNode",s[0])}catch(y){}else for(var J=0;Jtd","#"+h).html(s+" : "+y);a("#DelError","#"+h).show();c.processing= -false;a("#dData","#"+h+"_2").removeClass("ui-state-active")}},a.jgrid.ajaxOptions,b.ajaxDelOptions);if(!Q.url&&!c.useDataProxy)if(a.isFunction(q.p.dataProxy))c.useDataProxy=true;else{m[0]=false;m[1]+=" "+a.jgrid.errors.nourl}if(m[0])c.useDataProxy?q.p.dataProxy.call(q,Q,"del_"+q.p.id):a.ajax(Q)}if(m[0]===false){a("#DelError>td","#"+h).html(m[1]);a("#DelError","#"+h).show()}return false});a("#eData","#"+h+"_2").click(function(){hideModal("#"+e.themodal,{gb:"#gbox_"+F,jqm:b.jqModal,onClose:c.onClose}); -return false});D&&b.beforeShowForm(a("#"+h));viewModal("#"+e.themodal,{gbox:"#gbox_"+F,jqm:b.jqModal,modal:b.modal})}t&&b.afterShowForm(a("#"+h));b.closeOnEscape===true&&setTimeout(function(){a(".ui-jqdialog-titlebar-close","#"+e.modalhead).focus()},0)}})},navGrid:function(d,b,q,D,t,F,z){b=a.extend({edit:true,editicon:"ui-icon-pencil",add:true,addicon:"ui-icon-plus",del:true,delicon:"ui-icon-trash",search:true,searchicon:"ui-icon-search",refresh:true,refreshicon:"ui-icon-refresh",refreshstate:"firstpage", -view:false,viewicon:"ui-icon-document",position:"left",closeOnEscape:true,beforeRefresh:null,afterRefresh:null,cloneToTop:false},a.jgrid.nav,b||{});return this.each(function(){var h={themodal:"alertmod",modalhead:"alerthd",modalcontent:"alertcnt"},p=this,H,f,l;if(!(!p.grid||typeof d!="string")){if(a("#"+h.themodal).html()===null){if(typeof window.innerWidth!="undefined"){H=window.innerWidth;f=window.innerHeight}else if(typeof document.documentElement!="undefined"&&typeof document.documentElement.clientWidth!= -"undefined"&&document.documentElement.clientWidth!==0){H=document.documentElement.clientWidth;f=document.documentElement.clientHeight}else{H=1024;f=768}createModal(h,"
                      "+b.alerttext+"
                      ",{gbox:"#gbox_"+p.p.id,jqModal:true,drag:true,resize:true,caption:b.alertcap,top:f/2-25,left:H/2-100,width:200,height:"auto",closeOnEscape:b.closeOnEscape},"","",true)}H=1;if(b.cloneToTop&&p.p.toppager)H=2;for(f=0;f"), -j,m;if(f===0){j=d;m=p.p.id;if(j==p.p.toppager){m+="_top";H=1}}else{j=p.p.toppager;m=p.p.id+"_top"}p.p.direction=="rtl"&&a(e).attr("dir","rtl").css("float","right");if(b.add){D=D||{};l=a("");a(l).append("
                      "+b.addtext+"
                      ");a("tr",e).append(l);a(l,e).attr({title:b.addtitle||"",id:D.id||"add_"+m}).click(function(){a(this).hasClass("ui-state-disabled")||(typeof b.addfunc=="function"?b.addfunc(): -a(p).jqGrid("editGridRow","new",D));return false}).hover(function(){a(this).hasClass("ui-state-disabled")||a(this).addClass("ui-state-hover")},function(){a(this).removeClass("ui-state-hover")});l=null}if(b.edit){l=a("");q=q||{};a(l).append("
                      "+b.edittext+"
                      ");a("tr",e).append(l);a(l,e).attr({title:b.edittitle||"",id:q.id||"edit_"+m}).click(function(){if(!a(this).hasClass("ui-state-disabled")){var u= -p.p.selrow;if(u)typeof b.editfunc=="function"?b.editfunc(u):a(p).jqGrid("editGridRow",u,q);else{viewModal("#"+h.themodal,{gbox:"#gbox_"+p.p.id,jqm:true});a("#jqg_alrt").focus()}}return false}).hover(function(){a(this).hasClass("ui-state-disabled")||a(this).addClass("ui-state-hover")},function(){a(this).removeClass("ui-state-hover")});l=null}if(b.view){l=a("");z=z||{};a(l).append("
                      "+b.viewtext+ -"
                      ");a("tr",e).append(l);a(l,e).attr({title:b.viewtitle||"",id:z.id||"view_"+m}).click(function(){if(!a(this).hasClass("ui-state-disabled")){var u=p.p.selrow;if(u)a(p).jqGrid("viewGridRow",u,z);else{viewModal("#"+h.themodal,{gbox:"#gbox_"+p.p.id,jqm:true});a("#jqg_alrt").focus()}}return false}).hover(function(){a(this).hasClass("ui-state-disabled")||a(this).addClass("ui-state-hover")},function(){a(this).removeClass("ui-state-hover")});l=null}if(b.del){l=a(""); -t=t||{};a(l).append("
                      "+b.deltext+"
                      ");a("tr",e).append(l);a(l,e).attr({title:b.deltitle||"",id:t.id||"del_"+m}).click(function(){if(!a(this).hasClass("ui-state-disabled")){var u;if(p.p.multiselect){u=p.p.selarrrow;if(u.length===0)u=null}else u=p.p.selrow;if(u)"function"==typeof b.delfunc?b.delfunc(u):a(p).jqGrid("delGridRow",u,t);else{viewModal("#"+h.themodal,{gbox:"#gbox_"+p.p.id,jqm:true});a("#jqg_alrt").focus()}}return false}).hover(function(){a(this).hasClass("ui-state-disabled")|| -a(this).addClass("ui-state-hover")},function(){a(this).removeClass("ui-state-hover")});l=null}if(b.add||b.edit||b.del||b.view)a("tr",e).append("");if(b.search){l=a("");F=F||{};a(l).append("
                      "+b.searchtext+"
                      ");a("tr",e).append(l);a(l,e).attr({title:b.searchtitle||"",id:F.id||"search_"+ -m}).click(function(){a(this).hasClass("ui-state-disabled")||a(p).jqGrid("searchGrid",F);return false}).hover(function(){a(this).hasClass("ui-state-disabled")||a(this).addClass("ui-state-hover")},function(){a(this).removeClass("ui-state-hover")});l=null}if(b.refresh){l=a("");a(l).append("
                      "+b.refreshtext+"
                      ");a("tr",e).append(l);a(l,e).attr({title:b.refreshtitle||"",id:"refresh_"+m}).click(function(){if(!a(this).hasClass("ui-state-disabled")){a.isFunction(b.beforeRefresh)&& -b.beforeRefresh();p.p.search=false;try{a("#fbox_"+p.p.id).searchFilter().reset();a.isFunction(p.clearToolbar)&&p.clearToolbar(false)}catch(u){}switch(b.refreshstate){case "firstpage":a(p).trigger("reloadGrid",[{page:1}]);break;case "current":a(p).trigger("reloadGrid",[{current:true}]);break}a.isFunction(b.afterRefresh)&&b.afterRefresh()}return false}).hover(function(){a(this).hasClass("ui-state-disabled")||a(this).addClass("ui-state-hover")},function(){a(this).removeClass("ui-state-hover")});l=null}l= -a(".ui-jqgrid").css("font-size")||"11px";a("body").append("");l=a(e).clone().appendTo("#testpg2").width();a("#testpg2").remove();a(j+"_"+b.position,j).append(e);if(p.p._nvtd){if(l>p.p._nvtd[0]){a(j+"_"+b.position,j).width(l);p.p._nvtd[0]=l}p.p._nvtd[1]=l}e=l=l=null}}})},navButtonAdd:function(d,b){b=a.extend({caption:"newButton",title:"",buttonicon:"ui-icon-newwin",onClickButton:null,position:"last", -cursor:"pointer"},b||{});return this.each(function(){if(this.grid){if(d.indexOf("#")!==0)d="#"+d;var q=a(".navtable",d)[0],D=this;if(q){var t=a("");b.buttonicon.toString().toUpperCase()=="NONE"?a(t).addClass("ui-pg-button ui-corner-all").append("
                      "+b.caption+"
                      "):a(t).addClass("ui-pg-button ui-corner-all").append("
                      "+b.caption+"
                      ");b.id&&a(t).attr("id",b.id);if(b.position=="first")q.rows[0].cells.length=== -0?a("tr",q).append(t):a("tr td:eq(0)",q).before(t);else a("tr",q).append(t);a(t,q).attr("title",b.title||"").click(function(F){a(this).hasClass("ui-state-disabled")||a.isFunction(b.onClickButton)&&b.onClickButton.call(D,F);return false}).hover(function(){a(this).hasClass("ui-state-disabled")||a(this).addClass("ui-state-hover")},function(){a(this).removeClass("ui-state-hover")})}}})},navSeparatorAdd:function(d,b){b=a.extend({sepclass:"ui-separator",sepcontent:""},b||{});return this.each(function(){if(this.grid){if(d.indexOf("#")!== -0)d="#"+d;var q=a(".navtable",d)[0];if(q){var D=""+b.sepcontent+"";a("tr",q).append(D)}}})},GridToForm:function(d,b){return this.each(function(){var q=this;if(q.grid){var D=a(q).jqGrid("getRowData",d);if(D)for(var t in D)a("[name="+t+"]",b).is("input:radio")||a("[name="+t+"]",b).is("input:checkbox")?a("[name="+t+"]",b).each(function(){a(this).val()==D[t]?a(this).attr("checked","checked"):a(this).attr("checked", -"")}):a("[name="+t+"]",b).val(D[t])}})},FormToGrid:function(d,b,q,D){return this.each(function(){var t=this;if(t.grid){q||(q="set");D||(D="first");var F=a(b).serializeArray(),z={};a.each(F,function(h,p){z[p.name]=p.value});if(q=="add")a(t).jqGrid("addRowData",d,z,D);else q=="set"&&a(t).jqGrid("setRowData",d,z)}})}})})(jQuery); -jQuery.fn.searchFilter=function(k,H){function I(e,l,v){this.$=e;this.add=function(a){a==null?e.find(".ui-add-last").click():e.find(".sf:eq("+a+") .ui-add").click();return this};this.del=function(a){a==null?e.find(".sf:last .ui-del").click():e.find(".sf:eq("+a+") .ui-del").click();return this};this.search=function(){e.find(".ui-search").click();return this};this.reset=function(){e.find(".ui-reset").click();return this};this.close=function(){e.find(".ui-closer").click();return this};if(l!=null){function C(){jQuery(this).toggleClass("ui-state-hover"); -return false}function D(a){jQuery(this).toggleClass("ui-state-active",a.type=="mousedown");return false}function m(a,b){return""}function w(a,b,d){return""}function E(a,b){a=e.find("tr.sf td.data "+a);a[0]!=null&&b(a)}function F(a,b){var d=e.find("tr.sf td.data "+a);d[0]!=null&&jQuery.each(b,function(){this.data!=null?d.bind(this.type,this.data,this.fn):d.bind(this.type,this.fn)})}var f=jQuery.extend({}, -jQuery.fn.searchFilter.defaults,v),n=-1,r="";jQuery.each(f.groupOps,function(){r+=m(this.op,this.text)});r="";e.html("").addClass("ui-searchFilter").append("
                       
                      "+ -f.windowTitle+"
                       
                      "+ -f.resetText+""+f.searchText+""+f.matchText+" "+r+" "+f.rulesText+" 
                      "); -var x=e.find("tr.sf"),G=x.find("td.fields"),y=x.find("td.ops"),o=x.find("td.data"),s="";jQuery.each(f.operators,function(){s+=m(this.op,this.text)});s=w("default",s,true);y.append(s);o.append("");var t="",z=false,p=false;jQuery.each(l,function(a){t+=m(this.itemval,this.text);if(this.ops!=null){z=true;var b="";jQuery.each(this.ops,function(){b+=m(this.op,this.text)});b=w("field"+a,b,true);y.append(b)}if(this.dataUrl!=null){if(a>n)n=a;p=true; -var d=this.dataEvents,c=this.dataInit,g=this.buildSelect;jQuery.ajax(jQuery.extend({url:this.dataUrl,complete:function(h){h=g!=null?jQuery("
                      ").append(g(h)):jQuery("
                      ").append(h.responseText);h.find("select").addClass("field"+a).hide();o.append(h.html());c&&E(".field"+a,c);d&&F(".field"+a,d);a==n&&e.find("tr.sf td.fields select[name='field']").change()}},f.ajaxSelectOptions))}else if(this.dataValues!=null){p=true;var i="";jQuery.each(this.dataValues,function(){i+=m(this.value,this.text)}); -i=w("field"+a,i,true);o.append(i)}else if(this.dataEvents!=null||this.dataInit!=null){p=true;i="";o.append(i)}this.dataInit!=null&&a!=n&&E(".field"+a,this.dataInit);this.dataEvents!=null&&a!=n&&F(".field"+a,this.dataEvents)});t="";G.append(t);l=G.find("select[name='field']");z?l.change(function(a){var b=a.target.selectedIndex;a=jQuery(a.target).parents("tr.sf").find("td.ops");a.find("select").removeAttr("name").hide();b=a.find(".field"+ -b);if(b[0]==null)b=a.find(".default");b.attr("name","op").show()}):y.find(".default").attr("name","op").show();p?l.change(function(a){var b=a.target.selectedIndex;a=jQuery(a.target).parents("tr.sf").find("td.data");a.find("select,input").removeClass("vdata").hide();b=a.find(".field"+b);if(b[0]==null)b=a.find(".default");b.show().addClass("vdata")}):o.find(".default").show().addClass("vdata");if(z||p)l.change();e.find(".ui-state-default").hover(C,C).mousedown(D).mouseup(D);e.find(".ui-closer").click(function(){f.onClose(jQuery(e.selector)); -return false});e.find(".ui-del").click(function(a){a=jQuery(a.target).parents(".sf");if(a.siblings(".sf").length>0){f.datepickerFix===true&&jQuery.fn.datepicker!==undefined&&a.find(".hasDatepicker").datepicker("destroy");a.remove()}else{a.find("select[name='field']")[0].selectedIndex=0;a.find("select[name='op']")[0].selectedIndex=0;a.find(".data input").val("");a.find(".data select").each(function(){this.selectedIndex=0});a.find("select[name='field']").change()}return false});e.find(".ui-add").click(function(a){a= -jQuery(a.target).parents(".sf");var b=a.clone(true).insertAfter(a);b.find(".ui-state-default").removeClass("ui-state-hover ui-state-active");if(f.clone){b.find("select[name='field']")[0].selectedIndex=a.find("select[name='field']")[0].selectedIndex;if(b.find("select[name='op']")[0]!=null)b.find("select[name='op']").focus()[0].selectedIndex=a.find("select[name='op']")[0].selectedIndex;var d=b.find("select.vdata");if(d[0]!=null)d[0].selectedIndex=a.find("select.vdata")[0].selectedIndex}else{b.find(".data input").val(""); -b.find("select[name='field']").focus()}f.datepickerFix===true&&jQuery.fn.datepicker!==undefined&&a.find(".hasDatepicker").each(function(){var c=jQuery.data(this,"datepicker").settings;b.find("#"+this.id).unbind().removeAttr("id").removeClass("hasDatepicker").datepicker(c)});b.find("select[name='field']").change();return false});e.find(".ui-search").click(function(){var a=jQuery(e.selector),b,d=a.find("select[name='groupOp'] :selected").val();b=f.stringResult?'{"groupOp":"'+d+'","rules":[':{groupOp:d, -rules:[]};a.find(".sf").each(function(c){var g=jQuery(this).find("select[name='field'] :selected").val(),i=jQuery(this).find("select[name='op'] :selected").val(),h=jQuery(this).find("input.vdata,select.vdata :selected").val();h+="";h=h.replace(/\\/g,"\\\\").replace(/\"/g,'\\"');if(f.stringResult){if(c>0)b+=",";b+='{"field":"'+g+'",';b+='"op":"'+i+'",';b+='"data":"'+h+'"}'}else b.rules.push({field:g,op:i,data:h})});if(f.stringResult)b+="]}";f.onSearch(b);return false});e.find(".ui-reset").click(function(){var a= -jQuery(e.selector);a.find(".ui-del").click();a.find("select[name='groupOp']")[0].selectedIndex=0;f.onReset();return false});e.find(".ui-add-last").click(function(){var a=jQuery(e.selector+" .sf:last"),b=a.clone(true).insertAfter(a);b.find(".ui-state-default").removeClass("ui-state-hover ui-state-active");b.find(".data input").val("");b.find("select[name='field']").focus();f.datepickerFix===true&&jQuery.fn.datepicker!==undefined&&a.find(".hasDatepicker").each(function(){var d=jQuery.data(this,"datepicker").settings; -b.find("#"+this.id).unbind().removeAttr("id").removeClass("hasDatepicker").datepicker(d)});b.find("select[name='field']").change();return false});this.setGroupOp=function(a){selDOMobj=this.$.find("select[name='groupOp']")[0];var b={},d=selDOMobj.options.length,c;for(c=0;c select[class='field"+c+"']")[0]){g=0;for(h=selDOMobj.options.length;g select[class='field"+c+"']")[0]){j[d[c]].data={};g=0;for(h=selDOMobj.options.length;g0){q.id=d;b.p.savedRow.push(q);a(h).attr("editable","1");a("td:eq("+p+") input",h).focus();t===true&&a(h).bind("keydown",function(j){j.keyCode===27&&a(b).jqGrid("restoreRow",d,f);if(j.keyCode===13){if(j.target.tagName=="TEXTAREA")return true;a(b).jqGrid("saveRow",d,n,o,u,s,c,f);return false}j.stopPropagation()});a.isFunction(i)&&i(d)}}}})},saveRow:function(d,t,i,n,o,u,s){return this.each(function(){var c=this,f,b={},k={},l,r,p,q;if(c.grid){q=a(c).jqGrid("getInd",d,true);if(q!==false){l= -a(q).attr("editable");i=i?i:c.p.editurl;if(l==="1"){var h;a("td",q).each(function(m){h=c.p.colModel[m];f=h.name;if(f!="cb"&&f!="subgrid"&&h.editable===true&&f!="rn"){switch(h.edittype){case "checkbox":var e=["Yes","No"];if(h.editoptions)e=h.editoptions.value.split(":");b[f]=a("input",this).attr("checked")?e[0]:e[1];break;case "text":case "password":case "textarea":case "button":b[f]=a("input, textarea",this).val();break;case "select":if(h.editoptions.multiple){e=a("select",this);var x=[];b[f]=a(e).val(); -b[f]=b[f]?b[f].join(","):"";a("select > option:selected",this).each(function(y,z){x[y]=a(z).text()});k[f]=x.join(",")}else{b[f]=a("select>option:selected",this).val();k[f]=a("select>option:selected",this).text()}if(h.formatter&&h.formatter=="select")k={};break;case "custom":try{if(h.editoptions&&a.isFunction(h.editoptions.custom_value)){b[f]=h.editoptions.custom_value(a(".customelement",this),"get");if(b[f]===undefined)throw"e2";}else throw"e1";}catch(w){w=="e1"&&info_dialog(jQuery.jgrid.errors.errcap, -"function 'custom_value' "+a.jgrid.edit.msg.nodefined,jQuery.jgrid.edit.bClose);w=="e2"?info_dialog(jQuery.jgrid.errors.errcap,"function 'custom_value' "+a.jgrid.edit.msg.novalue,jQuery.jgrid.edit.bClose):info_dialog(jQuery.jgrid.errors.errcap,w.message,jQuery.jgrid.edit.bClose)}break}p=checkValues(b[f],m,c);if(p[0]===false){p[1]=b[f]+" "+p[1];return false}if(c.p.autoencode)b[f]=a.jgrid.htmlEncode(b[f])}});if(p[0]===false)try{var g=findPos(a("#"+d)[0]);info_dialog(a.jgrid.errors.errcap,p[1],a.jgrid.edit.bClose, -{left:g[0],top:g[1]})}catch(j){alert(p[1])}else{if(b){var v;g=c.p.prmNames;v=g.oper;l=g.id;b[v]=g.editoper;b[l]=d;if(typeof c.p.inlineData=="undefined")c.p.inlineData={};if(typeof n=="undefined")n={};b=a.extend({},b,c.p.inlineData,n)}if(i=="clientArray"){b=a.extend({},b,k);c.p.autoencode&&a.each(b,function(m,e){b[m]=a.jgrid.htmlDecode(e)});l=a(c).jqGrid("setRowData",d,b);a(q).attr("editable","0");for(g=0;g=0&&c.p.savedRow.splice(r,1); -a.isFunction(o)&&o(d,l)}else{a("#lui_"+c.p.id).show();a.ajax(a.extend({url:i,data:a.isFunction(c.p.serializeRowData)?c.p.serializeRowData(b):b,type:"POST",complete:function(m,e){a("#lui_"+c.p.id).hide();if(e==="success")if((a.isFunction(t)?t(m):true)===true){c.p.autoencode&&a.each(b,function(x,w){b[x]=a.jgrid.htmlDecode(w)});b=a.extend({},b,k);a(c).jqGrid("setRowData",d,b);a(q).attr("editable","0");for(e=0;e=0&&c.p.savedRow.splice(r,1); -a.isFunction(o)&&o(d,m)}else a(c).jqGrid("restoreRow",d,s)},error:function(m,e){a("#lui_"+c.p.id).hide();a.isFunction(u)?u(d,m,e):alert("Error Row: "+d+" Result: "+m.status+":"+m.statusText+" Status: "+e)}},a.jgrid.ajaxOptions,c.p.ajaxRowOptions||{}))}a(q).unbind("keydown")}}}}})},restoreRow:function(d,t){return this.each(function(){var i=this,n,o,u={};if(i.grid){o=a(i).jqGrid("getInd",d,true);if(o!==false){for(var s=0;s=0){if(a.isFunction(a.fn.datepicker))try{a("input.hasDatepicker", -"#"+o.id).datepicker("hide")}catch(c){}a.each(i.p.colModel,function(){if(this.editable===true&&this.name in i.p.savedRow[n])u[this.name]=i.p.savedRow[n][this.name]});a(i).jqGrid("setRowData",d,u);a(o).attr("editable","0").unbind("keydown");i.p.savedRow.splice(n,1)}a.isFunction(t)&&t(d)}}})}})})(jQuery); -(function(b){b.jgrid.extend({editCell:function(d,e,a){return this.each(function(){var c=this,h,f,g;if(!(!c.grid||c.p.cellEdit!==true)){e=parseInt(e,10);c.p.selrow=c.rows[d].id;c.p.knv||b(c).jqGrid("GridNav");if(c.p.savedRow.length>0){if(a===true)if(d==c.p.iRow&&e==c.p.iCol)return;b(c).jqGrid("saveCell",c.p.savedRow[0].id,c.p.savedRow[0].ic)}else window.setTimeout(function(){b("#"+c.p.knv).attr("tabindex","-1").focus()},0);h=c.p.colModel[e].name;if(!(h=="subgrid"||h=="cb"||h=="rn")){g=b("td:eq("+e+ -")",c.rows[d]);if(c.p.colModel[e].editable===true&&a===true&&!g.hasClass("not-editable-cell")){if(parseInt(c.p.iCol,10)>=0&&parseInt(c.p.iRow,10)>=0){b("td:eq("+c.p.iCol+")",c.rows[c.p.iRow]).removeClass("edit-cell ui-state-highlight");b(c.rows[c.p.iRow]).removeClass("selected-row ui-state-hover")}b(g).addClass("edit-cell ui-state-highlight");b(c.rows[d]).addClass("selected-row ui-state-hover");try{f=b.unformat(g,{rowId:c.rows[d].id,colModel:c.p.colModel[e]},e)}catch(k){f=b(g).html()}if(c.p.autoencode)f= -b.jgrid.htmlDecode(f);if(!c.p.colModel[e].edittype)c.p.colModel[e].edittype="text";c.p.savedRow.push({id:d,ic:e,name:h,v:f});if(b.isFunction(c.p.formatCell)){var j=c.p.formatCell(c.rows[d].id,h,f,d,e);if(j!==undefined)f=j}j=b.extend({},c.p.colModel[e].editoptions||{},{id:d+"_"+h,name:h});var i=createEl(c.p.colModel[e].edittype,j,f,true,b.extend({},b.jgrid.ajaxOptions,c.p.ajaxSelectOptions||{}));b.isFunction(c.p.beforeEditCell)&&c.p.beforeEditCell(c.rows[d].id,h,f,d,e);b(g).html("").append(i).attr("tabindex", -"0");window.setTimeout(function(){b(i).focus()},0);b("input, select, textarea",g).bind("keydown",function(l){if(l.keyCode===27)if(b("input.hasDatepicker",g).length>0)b(".ui-datepicker").is(":hidden")?b(c).jqGrid("restoreCell",d,e):b("input.hasDatepicker",g).datepicker("hide");else b(c).jqGrid("restoreCell",d,e);l.keyCode===13&&b(c).jqGrid("saveCell",d,e);if(l.keyCode==9)if(c.grid.hDiv.loading)return false;else l.shiftKey?b(c).jqGrid("prevCell",d,e):b(c).jqGrid("nextCell",d,e);l.stopPropagation()}); -b.isFunction(c.p.afterEditCell)&&c.p.afterEditCell(c.rows[d].id,h,f,d,e)}else{if(parseInt(c.p.iCol,10)>=0&&parseInt(c.p.iRow,10)>=0){b("td:eq("+c.p.iCol+")",c.rows[c.p.iRow]).removeClass("edit-cell ui-state-highlight");b(c.rows[c.p.iRow]).removeClass("selected-row ui-state-hover")}g.addClass("edit-cell ui-state-highlight");b(c.rows[d]).addClass("selected-row ui-state-hover");if(b.isFunction(c.p.onSelectCell)){f=g.html().replace(/\ \;/ig,"");c.p.onSelectCell(c.rows[d].id,h,f,d,e)}}c.p.iCol=e;c.p.iRow= -d}}})},saveCell:function(d,e){return this.each(function(){var a=this,c;if(!(!a.grid||a.p.cellEdit!==true)){c=a.p.savedRow.length>=1?0:null;if(c!==null){var h=b("td:eq("+e+")",a.rows[d]),f,g,k=a.p.colModel[e],j=k.name,i=b.jgrid.jqID(j);switch(k.edittype){case "select":if(k.editoptions.multiple){i=b("#"+d+"_"+i,a.rows[d]);var l=[];if(f=b(i).val())f.join(",");else f="";b("option:selected",i).each(function(m,p){l[m]=b(p).text()});g=l.join(",")}else{f=b("#"+d+"_"+i+">option:selected",a.rows[d]).val(); -g=b("#"+d+"_"+i+">option:selected",a.rows[d]).text()}if(k.formatter)g=f;break;case "checkbox":var n=["Yes","No"];if(k.editoptions)n=k.editoptions.value.split(":");g=f=b("#"+d+"_"+i,a.rows[d]).attr("checked")?n[0]:n[1];break;case "password":case "text":case "textarea":case "button":g=f=b("#"+d+"_"+i,a.rows[d]).val();break;case "custom":try{if(k.editoptions&&b.isFunction(k.editoptions.custom_value)){f=k.editoptions.custom_value(b(".customelement",h),"get");if(f===undefined)throw"e2";else g=f}else throw"e1"; -}catch(q){q=="e1"&&info_dialog(jQuery.jgrid.errors.errcap,"function 'custom_value' "+b.jgrid.edit.msg.nodefined,jQuery.jgrid.edit.bClose);q=="e2"?info_dialog(jQuery.jgrid.errors.errcap,"function 'custom_value' "+b.jgrid.edit.msg.novalue,jQuery.jgrid.edit.bClose):info_dialog(jQuery.jgrid.errors.errcap,q.message,jQuery.jgrid.edit.bClose)}break}if(g!=a.p.savedRow[c].v){if(b.isFunction(a.p.beforeSaveCell))if(c=a.p.beforeSaveCell(a.rows[d].id,j,f,d,e))f=c;var r=checkValues(f,e,a);if(r[0]===true){c={}; -if(b.isFunction(a.p.beforeSubmitCell))(c=a.p.beforeSubmitCell(a.rows[d].id,j,f,d,e))||(c={});b("input.hasDatepicker",h).length>0&&b("input.hasDatepicker",h).datepicker("hide");if(a.p.cellsubmit=="remote")if(a.p.cellurl){var o={};if(a.p.autoencode)f=b.jgrid.htmlEncode(f);o[j]=f;n=a.p.prmNames;k=n.id;i=n.oper;o[k]=a.rows[d].id;o[i]=n.editoper;o=b.extend(c,o);b("#lui_"+a.p.id).show();a.grid.hDiv.loading=true;b.ajax(b.extend({url:a.p.cellurl,data:b.isFunction(a.p.serializeCellData)?a.p.serializeCellData(o): -o,type:"POST",complete:function(m,p){b("#lui_"+a.p.id).hide();a.grid.hDiv.loading=false;if(p=="success")if(b.isFunction(a.p.afterSubmitCell)){m=a.p.afterSubmitCell(m,o.id,j,f,d,e);if(m[0]===true){b(h).empty();b(a).jqGrid("setCell",a.rows[d].id,e,g,false,false,true);b(h).addClass("dirty-cell");b(a.rows[d]).addClass("edited");b.isFunction(a.p.afterSaveCell)&&a.p.afterSaveCell(a.rows[d].id,j,f,d,e);a.p.savedRow.splice(0,1)}else{info_dialog(b.jgrid.errors.errcap,m[1],b.jgrid.edit.bClose);b(a).jqGrid("restoreCell", -d,e)}}else{b(h).empty();b(a).jqGrid("setCell",a.rows[d].id,e,g,false,false,true);b(h).addClass("dirty-cell");b(a.rows[d]).addClass("edited");b.isFunction(a.p.afterSaveCell)&&a.p.afterSaveCell(a.rows[d].id,j,f,d,e);a.p.savedRow.splice(0,1)}},error:function(m,p){b("#lui_"+a.p.id).hide();a.grid.hDiv.loading=false;b.isFunction(a.p.errorCell)?a.p.errorCell(m,p):info_dialog(b.jgrid.errors.errcap,m.status+" : "+m.statusText+"
                      "+p,b.jgrid.edit.bClose);b(a).jqGrid("restoreCell",d,e)}},b.jgrid.ajaxOptions, -a.p.ajaxCellOptions||{}))}else try{info_dialog(b.jgrid.errors.errcap,b.jgrid.errors.nourl,b.jgrid.edit.bClose);b(a).jqGrid("restoreCell",d,e)}catch(s){}if(a.p.cellsubmit=="clientArray"){b(h).empty();b(a).jqGrid("setCell",a.rows[d].id,e,g,false,false,true);b(h).addClass("dirty-cell");b(a.rows[d]).addClass("edited");b.isFunction(a.p.afterSaveCell)&&a.p.afterSaveCell(a.rows[d].id,j,f,d,e);a.p.savedRow.splice(0,1)}}else try{window.setTimeout(function(){info_dialog(b.jgrid.errors.errcap,f+" "+r[1],b.jgrid.edit.bClose)}, -100);b(a).jqGrid("restoreCell",d,e)}catch(t){}}else b(a).jqGrid("restoreCell",d,e)}b.browser.opera?b("#"+a.p.knv).attr("tabindex","-1").focus():window.setTimeout(function(){b("#"+a.p.knv).attr("tabindex","-1").focus()},0)}})},restoreCell:function(d,e){return this.each(function(){var a=this,c;if(!(!a.grid||a.p.cellEdit!==true)){c=a.p.savedRow.length>=1?0:null;if(c!==null){var h=b("td:eq("+e+")",a.rows[d]);if(b.isFunction(b.fn.datepicker))try{b("input.hasDatepicker",h).datepicker("hide")}catch(f){}b(h).empty().attr("tabindex", -"-1");b(a).jqGrid("setCell",a.rows[d].id,e,a.p.savedRow[c].v,false,false,true);a.p.savedRow.splice(0,1)}window.setTimeout(function(){b("#"+a.p.knv).attr("tabindex","-1").focus()},0)}})},nextCell:function(d,e){return this.each(function(){var a=this,c=false;if(!(!a.grid||a.p.cellEdit!==true)){for(var h=e+1;h0&&b(a).jqGrid("saveCell",d,e)}})},prevCell:function(d, -e){return this.each(function(){var a=this,c=false;if(!(!a.grid||a.p.cellEdit!==true)){for(var h=e-1;h>=0;h--)if(a.p.colModel[h].editable===true){c=h;break}if(c!==false)b(a).jqGrid("editCell",d,c,true);else a.p.savedRow.length>0&&b(a).jqGrid("saveCell",d,e)}})},GridNav:function(){return this.each(function(){function d(g,k,j){if(j.substr(0,1)=="v"){var i=b(a.grid.bDiv)[0].clientHeight,l=b(a.grid.bDiv)[0].scrollTop,n=a.rows[g].offsetTop+a.rows[g].clientHeight,q=a.rows[g].offsetTop;if(j=="vd")if(n>=i)b(a.grid.bDiv)[0].scrollTop= -b(a.grid.bDiv)[0].scrollTop+a.rows[g].clientHeight;if(j=="vu")if(q=j+parseInt(i,10))b(a.grid.bDiv)[0].scrollLeft=b(a.grid.bDiv)[0].scrollLeft+a.rows[g].cells[k].clientWidth;else if(l=0;i--)if(a.p.colModel[i].hidden!==true){j=i;break}}if(k=="rgt"){j=g-1;for(i=g;i"),h,f;b(c).insertBefore(a.grid.cDiv); -b("#"+a.p.knv).focus().keydown(function(g){f=g.keyCode;if(a.p.direction=="rtl")if(f==37)f=39;else if(f==39)f=37;switch(f){case 38:if(a.p.iRow-1>=0){d(a.p.iRow-1,a.p.iCol,"vu");b(a).jqGrid("editCell",a.p.iRow-1,a.p.iCol,false)}break;case 40:if(a.p.iRow+1<=a.rows.length-1){d(a.p.iRow+1,a.p.iCol,"vd");b(a).jqGrid("editCell",a.p.iRow+1,a.p.iCol,false)}break;case 37:if(a.p.iCol-1>=0){h=e(a.p.iCol-1,"lft");d(a.p.iRow,h,"h");b(a).jqGrid("editCell",a.p.iRow,h,false)}break;case 39:if(a.p.iCol+1<=a.p.colModel.length- -1){h=e(a.p.iCol+1,"rgt");d(a.p.iRow,h,"h");b(a).jqGrid("editCell",a.p.iRow,h,false)}break;case 13:parseInt(a.p.iCol,10)>=0&&parseInt(a.p.iRow,10)>=0&&b(a).jqGrid("editCell",a.p.iRow,a.p.iCol,true);break}return false})}})},getChangedCells:function(d){var e=[];d||(d="all");this.each(function(){var a=this,c;!a.grid||a.p.cellEdit!==true||b(a.rows).each(function(h){var f={};if(b(this).hasClass("edited")){b("td",this).each(function(g){c=a.p.colModel[g].name;if(c!=="cb"&&c!=="subgrid")if(d=="dirty"){if(b(this).hasClass("dirty-cell"))try{f[c]= -b.unformat(this,{rowId:a.rows[h].id,colModel:a.p.colModel[g]},g)}catch(k){f[c]=b.jgrid.htmlDecode(b(this).html())}}else try{f[c]=b.unformat(this,{rowId:a.rows[h].id,colModel:a.p.colModel[g]},g)}catch(j){f[c]=b.jgrid.htmlDecode(b(this).html())}});f.id=this.id;e.push(f)}})});return e}})})(jQuery); -(function(b){b.fn.jqm=function(a){var f={overlay:50,closeoverlay:true,overlayClass:"jqmOverlay",closeClass:"jqmClose",trigger:".jqModal",ajax:e,ajaxText:"",target:e,modal:e,toTop:e,onShow:e,onHide:e,onLoad:e};return this.each(function(){if(this._jqm)return i[this._jqm].c=b.extend({},i[this._jqm].c,a);l++;this._jqm=l;i[l]={c:b.extend(f,b.jqm.params,a),a:e,w:b(this).addClass("jqmID"+l),s:l};f.trigger&&b(this).jqmAddTrigger(f.trigger)})};b.fn.jqmAddClose=function(a){return o(this,a,"jqmHide")};b.fn.jqmAddTrigger= -function(a){return o(this,a,"jqmShow")};b.fn.jqmShow=function(a){return this.each(function(){b.jqm.open(this._jqm,a)})};b.fn.jqmHide=function(a){return this.each(function(){b.jqm.close(this._jqm,a)})};b.jqm={hash:{},open:function(a,f){var c=i[a],d=c.c,h="."+d.closeClass,g=parseInt(c.w.css("z-index"));g=g>0?g:3E3;var j=b("
                      ").css({height:"100%",width:"100%",position:"fixed",left:0,top:0,"z-index":g-1,opacity:d.overlay/100});if(c.a)return e;c.t=f;c.a=true;c.w.css("z-index",g);if(d.modal){k[0]|| -setTimeout(function(){p("bind")},1);k.push(a)}else if(d.overlay>0)d.closeoverlay&&c.w.jqmAddClose(j);else j=e;c.o=j?j.addClass(d.overlayClass).prependTo("body"):e;if(q){b("html,body").css({height:"100%",width:"100%"});if(j){j=j.css({position:"absolute"})[0];for(var m in{Top:1,Left:1})j.style.setExpression(m.toLowerCase(),"(_=(document.documentElement.scroll"+m+" || document.body.scroll"+m+"))+'px'")}}if(d.ajax){a=d.target||c.w;g=d.ajax;a=typeof a=="string"?b(a,c.w):b(a);g=g.substr(0,1)=="@"?b(f).attr(g.substring(1)): -g;a.html(d.ajaxText).load(g,function(){d.onLoad&&d.onLoad.call(this,c);h&&c.w.jqmAddClose(b(h,c.w));r(c)})}else h&&c.w.jqmAddClose(b(h,c.w));d.toTop&&c.o&&c.w.before('').insertAfter(c.o);d.onShow?d.onShow(c):c.w.show();r(c);return e},close:function(a){a=i[a];if(!a.a)return e;a.a=e;if(k[0]){k.pop();k[0]||p("unbind")}a.c.toTop&&a.o&&b("#jqmP"+a.w[0]._jqm).after(a.w).remove();if(a.c.onHide)a.c.onHide(a);else{a.w.hide();a.o&&a.o.remove()}return e},params:{}};var l= -0,i=b.jqm.hash,k=[],q=b.browser.msie&&b.browser.version=="6.0",e=false,r=function(a){var f=b('').css({opacity:0});if(q)if(a.o)a.o.html('

                      ').prepend(f);else b("iframe.jqm",a.w)[0]||a.w.prepend(f);s(a)},s=function(a){try{b(":input:visible",a.w)[0].focus()}catch(f){}},p=function(a){b(document)[a]("keypress",n)[a]("keydown",n)[a]("mousedown",n)},n=function(a){var f=i[k[k.length-1]];(a=!b(a.target).parents(".jqmID"+ -f.s)[0])&&s(f);return!a},o=function(a,f,c){return a.each(function(){var d=this._jqm;b(f).each(function(){if(!this[c]){this[c]=[];b(this).click(function(){for(var h in{jqmShow:1,jqmHide:1})for(var g in this[h])i[this[h][g]]&&i[this[h][g]].w[h](this);return e})}this[c].push(d)})})}})(jQuery); -(function(b){b.fn.jqDrag=function(a){return l(this,a,"d")};b.fn.jqResize=function(a,e){return l(this,a,"r",e)};b.jqDnR={dnr:{},e:0,drag:function(a){if(c.k=="d")d.css({left:c.X+a.pageX-c.pX,top:c.Y+a.pageY-c.pY});else{d.css({width:Math.max(a.pageX-c.pX+c.W,0),height:Math.max(a.pageY-c.pY+c.H,0)});M1&&f.css({width:Math.max(a.pageX-M1.pX+M1.W,0),height:Math.max(a.pageY-M1.pY+M1.H,0)})}return false},stop:function(){b(document).unbind("mousemove",i.drag).unbind("mouseup",i.stop)}};var i=b.jqDnR,c=i.dnr, -d=i.e,f,l=function(a,e,n,m){return a.each(function(){e=e?b(e,a):a;e.bind("mousedown",{e:a,k:n},function(g){var j=g.data,h={};d=j.e;f=m?b(m):false;if(d.css("position")!="relative")try{d.position(h)}catch(o){}c={X:h.left||k("left")||0,Y:h.top||k("top")||0,W:k("width")||d[0].scrollWidth||0,H:k("height")||d[0].scrollHeight||0,pX:g.pageX,pY:g.pageY,k:j.k};M1=f&&j.k!="d"?{X:h.left||f1("left")||0,Y:h.top||f1("top")||0,W:f[0].offsetWidth||f1("width")||0,H:f[0].offsetHeight||f1("height")||0,pX:g.pageX,pY:g.pageY, -k:j.k}:false;b(document).mousemove(b.jqDnR.drag).mouseup(b.jqDnR.stop);return false})})},k=function(a){return parseInt(d.css(a))||false};f1=function(a){return parseInt(f.css(a))||false}})(jQuery); -(function(a){a.jgrid.extend({setSubGrid:function(){return this.each(function(){var e=this;e.p.colNames.unshift("");e.p.colModel.unshift({name:"subgrid",width:a.browser.safari?e.p.subGridWidth+e.p.cellLayout:e.p.subGridWidth,sortable:false,resizable:false,hidedlg:true,search:false,fixed:true});e=e.p.subGridModel;if(e[0]){e[0].align=a.extend([],e[0].align||[]);for(var c=0;c":'"},addSubGrid:function(e,c){return this.each(function(){var b=this;if(b.grid){var n,k,p,t,s,u,o;a("td:eq("+c+")",e).click(function(){if(a(this).hasClass("sgcollapsed")){p=b.p.id;n=a(this).parent(); -t=c>=1?" ":"";k=a(n).attr("id");o=true;if(a.isFunction(b.p.subGridBeforeExpand))o=b.p.subGridBeforeExpand(p+"_"+k,k);if(o===false)return false;s=0;a.each(b.p.colModel,function(){if(this.hidden===true||this.name=="rn"||this.name=="cb")s++});u=""+t+"

                      ";a(this).parent().after(u+"
                      ");a.isFunction(b.p.subGridRowExpanded)?b.p.subGridRowExpanded(p+"_"+k,k):x(n);a(this).html("").removeClass("sgcollapsed").addClass("sgexpanded")}else if(a(this).hasClass("sgexpanded")){o=true;if(a.isFunction(b.p.subGridRowColapsed)){n=a(this).parent();k=a(n).attr("id");o=b.p.subGridRowColapsed(p+"_"+k,k)}if(o===false)return false;a(this).parent().next().remove(".ui-subgrid"); -a(this).html("").removeClass("sgexpanded").addClass("sgcollapsed")}return false});var x=function(g){var j,f,d,h;j=a(g).attr("id");f={nd_:(new Date).getTime()};f[b.p.prmNames.subgridid]=j;if(!b.p.subGridModel[0])return false;if(b.p.subGridModel[0].params)for(h=0;h").html(j);a(g).append(j)},v=function(g,j){var f,d,h,i=a("
                      "),l=a("");for(d=0;d");a(f).html(b.p.subGridModel[0].name[d]); -a(f).width(b.p.subGridModel[0].width[d]);a(l).append(f)}a(i).append(l);if(g){h=b.p.xmlReader.subgrid;a(h.root+" "+h.row,g).each(function(){l=a("");if(h.repeatitems===true)a(h.cell,this).each(function(q){r(l,a(this).text()||" ",q)});else{var m=b.p.subGridModel[0].mapping||b.p.subGridModel[0].name;if(m)for(d=0;d"),m=a("");for(d=0;d");a(f).html(b.p.subGridModel[0].name[d]);a(f).width(b.p.subGridModel[0].width[d]);a(m).append(f)}a(l).append(m);if(g){f=b.p.jsonReader.subgrid;g=g[f.root];if(typeof g!=="undefined")for(d=0;d< -g.length;d++){h=g[d];m=a("");if(f.repeatitems===true){if(f.cell)h=h[f.cell];for(i=0;i";i+="
                      ";if(parseInt(a[k],10)!==parseInt(b.p.tree_root_level, -10))d(b).jqGrid("isVisibleNode",c)||d(c).css("display","none");d("td:eq("+e+")",c).wrapInner("").prepend(i);d(".treeclick",c).bind("click",function(h){h=d(h.target||h.srcElement,b.rows).parents("tr.jqgrow")[0].rowIndex;if(!b.rows[h].isLeaf)if(b.rows[h].expanded){d(b).jqGrid("collapseRow",b.rows[h]);d(b).jqGrid("collapseNode",b.rows[h])}else{d(b).jqGrid("expandRow",b.rows[h]);d(b).jqGrid("expandNode",b.rows[h])}return false});b.p.ExpandColClick===true&&d("span",c).css("cursor","pointer").bind("click", -function(h){h=d(h.target||h.srcElement,b.rows).parents("tr.jqgrow")[0].rowIndex;if(!b.rows[h].isLeaf)if(b.rows[h].expanded){d(b).jqGrid("collapseRow",b.rows[h]);d(b).jqGrid("collapseNode",b.rows[h])}else{d(b).jqGrid("expandRow",b.rows[h]);d(b).jqGrid("expandNode",b.rows[h])}d(b).jqGrid("setSelection",b.rows[h].id);return false})}})},setTreeGrid:function(){return this.each(function(){var a=this,c=0;if(a.p.treeGrid){a.p.treedatatype||d.extend(a.p,{treedatatype:a.p.datatype});a.p.subGrid=false;a.p.altRows= -false;a.p.pgbuttons=false;a.p.pginput=false;a.p.multiselect=false;a.p.rowList=[];a.p.treeIcons=d.extend({plus:"ui-icon-triangle-1-"+(a.p.direction=="rtl"?"w":"e"),minus:"ui-icon-triangle-1-s",leaf:"ui-icon-radio-off"},a.p.treeIcons||{});if(a.p.treeGridModel=="nested")a.p.treeReader=d.extend({level_field:"level",left_field:"lft",right_field:"rgt",leaf_field:"isLeaf",expanded_field:"expanded"},a.p.treeReader);else if(a.p.treeGridModel=="adjacency")a.p.treeReader=d.extend({level_field:"level",parent_id_field:"parent", -leaf_field:"isLeaf",expanded_field:"expanded"},a.p.treeReader);for(var b in a.p.colModel)if(a.p.colModel.hasOwnProperty(b)){if(a.p.colModel[b].name==a.p.ExpandColumn){a.p.expColInd=c;break}c++}if(!a.p.expColInd)a.p.expColInd=0;d.each(a.p.treeReader,function(e,f){if(f){a.p.colNames.push(f);a.p.colModel.push({name:f,width:1,hidden:true,sortable:false,resizable:false,hidedlg:true,editable:true,search:false})}})}})},expandRow:function(a){this.each(function(){var c=this;if(c.grid&&c.p.treeGrid){var b= -d(c).jqGrid("getNodeChildren",a);d(b).each(function(){d(this).css("display","");this.expanded&&d(c).jqGrid("expandRow",this)})}})},collapseRow:function(a){this.each(function(){var c=this;if(c.grid&&c.p.treeGrid){var b=d(c).jqGrid("getNodeChildren",a);d(b).each(function(){d(this).css("display","none");this.expanded&&d(c).jqGrid("collapseRow",this)})}})},getRootNodes:function(){var a=[];this.each(function(){var c=this;if(c.grid&&c.p.treeGrid)switch(c.p.treeGridModel){case "nested":var b=c.p.treeReader.level_field; -d(c.rows).each(function(){parseInt(this[b],10)===parseInt(c.p.tree_root_level,10)&&a.push(this)});break;case "adjacency":d(c.rows).each(function(){if(this.parent_id===null||String(this.parent_id).toLowerCase()=="null")a.push(this)});break}});return a},getNodeDepth:function(a){var c=null;this.each(function(){var b=this;if(this.grid&&this.p.treeGrid)switch(b.p.treeGridModel){case "nested":c=parseInt(a.level,10)-parseInt(this.p.tree_root_level,10);break;case "adjacency":c=d(b).jqGrid("getNodeAncestors", -a).length;break}});return c},getNodeParent:function(a){var c=null;this.each(function(){var b=this;if(b.grid&&b.p.treeGrid)switch(b.p.treeGridModel){case "nested":var e=parseInt(a.lft,10),f=parseInt(a.rgt,10),j=parseInt(a.level,10);d(this.rows).each(function(){if(parseInt(this.level,10)===j-1&&parseInt(this.lft,10)f){c=this;return false}});break;case "adjacency":d(this.rows).each(function(){if(this.id==a.parent_id){c=this;return false}});break}});return c},getNodeChildren:function(a){var c= -[];this.each(function(){var b=this;if(b.grid&&b.p.treeGrid)switch(b.p.treeGridModel){case "nested":var e=parseInt(a.lft,10),f=parseInt(a.rgt,10),j=parseInt(a.level,10);d(this.rows).each(function(){parseInt(this.level,10)===j+1&&parseInt(this.lft,10)>e&&parseInt(this.rgt,10)=k&&parseInt(this.lft,10)>=f&&parseInt(this.lft,10)<=j&&c.push(this)});break;case "adjacency":c.push(a);d(this.rows).each(function(g){e=c.length;for(g=0;g0?true:false});return c},expandNode:function(a){return this.each(function(){if(this.grid&&this.p.treeGrid)if(!a.expanded)if(d(this).jqGrid("isNodeLoaded", -a)){a.expanded=true;d("div.treeclick",a).removeClass(this.p.treeIcons.plus+" tree-plus").addClass(this.p.treeIcons.minus+" tree-minus")}else{a.expanded=true;d("div.treeclick",a).removeClass(this.p.treeIcons.plus+" tree-plus").addClass(this.p.treeIcons.minus+" tree-minus");this.p.treeANode=a.rowIndex;this.p.datatype=this.p.treedatatype;this.p.treeGridModel=="nested"?d(this).jqGrid("setGridParam",{postData:{nodeid:a.id,n_left:a.lft,n_right:a.rgt,n_level:a.level}}):d(this).jqGrid("setGridParam",{postData:{nodeid:a.id, -parentid:a.parent_id,n_level:a.level}});d(this).trigger("reloadGrid");this.p.treeGridModel=="nested"?d(this).jqGrid("setGridParam",{postData:{nodeid:"",n_left:"",n_right:"",n_level:""}}):d(this).jqGrid("setGridParam",{postData:{nodeid:"",parentid:"",n_level:""}})}})},collapseNode:function(a){return this.each(function(){if(this.grid&&this.p.treeGrid)if(a.expanded){a.expanded=false;d("div.treeclick",a).removeClass(this.p.treeIcons.minus+" tree-minus").addClass(this.p.treeIcons.plus+" tree-plus")}})}, -SortTree:function(a){return this.each(function(){if(this.grid&&this.p.treeGrid){var c,b,e,f=[],j=this,k=d(this).jqGrid("getRootNodes");k.sort(function(g,i){if(g.sortKeyi.sortKey)return a;return 0});if(k[0]){d("td",k[0]).each(function(g){d(this).css("width",j.grid.headers[g].width+"px")});j.grid.cols=k[0].cells}c=0;for(b=k.length;ci.sortKey)return b;return 0});e=0;for(f=k.length;e0)for(var f=0;fgrid",data:"roots>rows"},jsonGrid:{config:"grid",data:"data"},ajaxOptions:{}},a||{});return this.each(function(){var e=this,c=function(d,g){var f=b(g.xmlGrid.config,d)[0];g=b(g.xmlGrid.data,d)[0];var k;if(xmlJsonClass.xml2json&&b.jgrid.parse){f=xmlJsonClass.xml2json(f," ");f=b.jgrid.parse(f);for(var h in f)if(f.hasOwnProperty(h))k=f[h];if(g){h=f.grid.datatype; -f.grid.datatype="xmlstring";f.grid.datastr=d;b(e).jqGrid(k).jqGrid("setGridParam",{datatype:h})}else b(e).jqGrid(k)}else alert("xml2json or parse are not present")},i=function(d,g){if(d&&typeof d=="string"){var f=b.jgrid.parse(d);d=f[g.jsonGrid.config];if(g=f[g.jsonGrid.data]){f=d.datatype;d.datatype="jsonstring";d.datastr=g;b(e).jqGrid(d).jqGrid("setGridParam",{datatype:f})}else b(e).jqGrid(d)}};switch(a.imptype){case "xml":b.ajax(b.extend({url:a.impurl,type:a.mtype,data:a.impData,dataType:"xml", -complete:function(d,g){if(g=="success"){c(d.responseXML,a);b.isFunction(a.importComplete)&&a.importComplete(d)}}},a.ajaxOptions));break;case "xmlstring":if(a.impstring&&typeof a.impstring=="string"){var j=b.jgrid.stringToDoc(a.impstring);if(j){c(j,a);b.isFunction(a.importComplete)&&a.importComplete(j);a.impstring=null}j=null}break;case "json":b.ajax(b.extend({url:a.impurl,type:a.mtype,data:a.impData,dataType:"json",complete:function(d,g){if(g=="success"){i(d.responseText,a);b.isFunction(a.importComplete)&& -a.importComplete(d)}}},a.ajaxOptions));break;case "jsonstring":if(a.impstring&&typeof a.impstring=="string"){i(a.impstring,a);b.isFunction(a.importComplete)&&a.importComplete(a.impstring);a.impstring=null}break}})},jqGridExport:function(a){a=b.extend({exptype:"xmlstring",root:"grid",ident:"\t"},a||{});var e=null;this.each(function(){if(this.grid){var c=b.extend({},b(this).jqGrid("getGridParam"));if(c.rownumbers){c.colNames.splice(0,1);c.colModel.splice(0,1)}if(c.multiselect){c.colNames.splice(0,1); -c.colModel.splice(0,1)}if(c.subGrid){c.colNames.splice(0,1);c.colModel.splice(0,1)}c.knv=null;if(c.treeGrid)for(var i in c.treeReader)if(c.treeReader.hasOwnProperty(i)){c.colNames.splice(c.colNames.length-1);c.colModel.splice(c.colModel.length-1)}switch(a.exptype){case "xmlstring":e="<"+a.root+">"+xmlJsonClass.json2xml(c,a.ident)+"";break;case "jsonstring":e="{"+xmlJsonClass.toJson(c,a.root,a.ident)+"}";if(c.postData.filters!==undefined){e=e.replace(/filters":"/,'filters":');e=e.replace(/}]}"/, -"}]}")}break}}});return e},excelExport:function(a){a=b.extend({exptype:"remote",url:null,oper:"oper",tag:"excel",exportOptions:{}},a||{});return this.each(function(){$t=this;if(this.grid)if(a.exptype=="remote"){var e=b.extend({},this.p.postData);e[a.oper]=a.tag;e=jQuery.param(e);window.location=a.url+"?"+e}})}})})(jQuery); -var xmlJsonClass={xml2json:function(a,b){if(a.nodeType===9)a=a.documentElement;a=this.toJson(this.toObj(this.removeWhite(a)),a.nodeName,"\t");return"{\n"+b+(b?a.replace(/\t/g,b):a.replace(/\t|\n/g,""))+"\n}"},json2xml:function(a,b){var g=function(d,c,j){var i="",k,h;if(d instanceof Array)if(d.length===0)i+=j+"<"+c+">__EMPTY_ARRAY_\n";else{k=0;for(h=d.length;k":"/>";if(k){for(h in d)if(d.hasOwnProperty(h))if(h==="#text")i+=d[h];else if(h==="#cdata")i+="";else if(h.charAt(0)!=="@")i+=g(d[h],h,j+"\t");i+=(i.charAt(i.length-1)==="\n"?j:"")+""}}else i+=typeof d==="function"?j+"<"+c+">":d.toString()==='""'||d.toString().length===0?j+"<"+c+">__EMPTY_STRING_":j+"<"+c+">"+d.toString()+"";return i},e="",f;for(f in a)if(a.hasOwnProperty(f))e+= -g(a[f],f,"");return b?e.replace(/\t/g,b):e.replace(/\t|\n/g,"")},toObj:function(a){var b={},g=/function/i;if(a.nodeType===1){if(a.attributes.length){var e;for(e=0;e1)b=this.escape(this.innerXml(a));else for(c=a.firstChild;c;c=c.nextSibling)if(g.test(a.firstChild.nodeValue)){b=a.firstChild.nodeValue;break}else b["#cdata"]=this.escape(c.nodeValue)}if(!a.attributes.length&&!a.firstChild)b=null}else if(a.nodeType===9)b=this.toObj(a.documentElement);else alert("unhandled node type: "+ -a.nodeType);return b},toJson:function(a,b,g){var e=b?'"'+b+'"':"";if(a==="[]")e+=b?":[]":"[]";else if(a instanceof Array){var f,d,c=[];d=0;for(f=a.length;d1?"\n"+g+"\t"+c.join(",\n"+g+"\t")+"\n"+g:c.join(""))+"]"}else if(a===null)e+=(b&&":")+"null";else if(typeof a==="object"){f=[];for(d in a)if(a.hasOwnProperty(d))f[f.length]=this.toJson(a[d],d,g+"\t");e+=(b?":{":"{")+(f.length>1?"\n"+g+"\t"+f.join(",\n"+g+"\t")+"\n"+g:f.join(""))+ -"}"}else if(typeof a==="string"){g=/function/i;f=a.toString();e+=/(^-?\d+\.?\d*$)/.test(f)||g.test(f)||f==="false"||f==="true"?(b&&":")+f:(b&&":")+'"'+a+'"'}else e+=(b&&":")+a.toString();return e},innerXml:function(a){var b="";if("innerHTML"in a)b=a.innerHTML;else{var g=function(e){var f="",d;if(e.nodeType===1){f+="<"+e.nodeName;for(d=0;d"}else f+="/>"}else if(e.nodeType===3)f+=e.nodeValue;else if(e.nodeType===4)f+="";return f};for(a=a.firstChild;a;a=a.nextSibling)b+=g(a)}return b},escape:function(a){return a.replace(/[\\]/g,"\\\\").replace(/[\"]/g,'\\"').replace(/[\n]/g,"\\n").replace(/[\r]/g,"\\r")},removeWhite:function(a){a.normalize();var b;for(b=a.firstChild;b;)if(b.nodeType===3)if(b.nodeValue.match(/[^ \f\n\r\t\v]/))b=b.nextSibling;else{var g=b.nextSibling;a.removeChild(b); -b=g}else{b.nodeType===1&&this.removeWhite(b);b=b.nextSibling}return a}}; -(function(b){b.jgrid.extend({setColumns:function(a){a=b.extend({top:0,left:0,width:200,height:"auto",dataheight:"auto",modal:false,drag:true,beforeShowForm:null,afterShowForm:null,afterSubmitForm:null,closeOnEscape:true,ShrinkToFit:false,jqModal:false,saveicon:[true,"left","ui-icon-disk"],closeicon:[true,"left","ui-icon-close"],onClose:null,colnameview:true,closeAfterSubmit:true,updateAfterCheck:false,recreateForm:false},b.jgrid.col,a||{});return this.each(function(){var c=this;if(c.grid){var j=typeof a.beforeShowForm=== -"function"?true:false,k=typeof a.afterShowForm==="function"?true:false,l=typeof a.afterSubmitForm==="function"?true:false,e=c.p.id,d="ColTbl_"+e,f={themodal:"colmod"+e,modalhead:"colhd"+e,modalcontent:"colcnt"+e,scrollelm:d};a.recreateForm===true&&b("#"+f.themodal).html()!=null&&b("#"+f.themodal).remove();if(b("#"+f.themodal).html()!=null){j&&a.beforeShowForm(b("#"+d));viewModal("#"+f.themodal,{gbox:"#gbox_"+e,jqm:a.jqModal,jqM:false,modal:a.modal})}else{var g=isNaN(a.dataheight)?a.dataheight:a.dataheight+ -"px";g="
                      ";g+="";for(i=0;i");g+="
                      ";g+="
                      "+(!a.updateAfterCheck?""+a.bSubmit+"":"")+" "+(""+ -a.bCancel+"")+"
                      ";a.gbox="#gbox_"+e;createModal(f,g,a,"#gview_"+c.p.id,b("#gview_"+c.p.id)[0]);if(a.saveicon[0]==true)b("#dData","#"+d+"_2").addClass(a.saveicon[1]=="right"?"fm-button-icon-right":"fm-button-icon-left").append("");if(a.closeicon[0]==true)b("#eData","#"+d+"_2").addClass(a.closeicon[1]=="right"?"fm-button-icon-right":"fm-button-icon-left").append("");a.updateAfterCheck? -b(":input","#"+d).click(function(){var h=this.id.substr(4);if(h){this.checked?b(c).jqGrid("showCol",h):b(c).jqGrid("hideCol",h);a.ShrinkToFit===true&&b(c).jqGrid("setGridWidth",c.grid.width-0.0010,true)}return this}):b("#dData","#"+d+"_2").click(function(){for(i=0;i0,q=!b&&l.length>0,m=b||q;f=f.attr("name")||l.attr("name");var c=[],g=[];jQuery("th",jQuery(this)).each(function(){if(c.length===0&&m){c.push({name:"__selection__",index:"__selection__",width:0,hidden:true});g.push("__selection__")}else{c.push({name:jQuery(this).attr("id")|| -jQuery.trim(jQuery.jgrid.stripHtml(jQuery(this).html())).split(" ").join("_"),index:jQuery(this).attr("id")||jQuery.trim(jQuery.jgrid.stripHtml(jQuery(this).html())).split(" ").join("_"),width:jQuery(this).width()||150});g.push(jQuery(this).html())}});var e=[],h=[],i=[];jQuery("tbody > tr",jQuery(this)).each(function(){var j={},d=0;jQuery("td",jQuery(this)).each(function(){if(d===0&&m){var k=jQuery("input",jQuery(this)),n=k.attr("value");h.push(n||e.length);k.attr("checked")&&i.push(n);j[c[d].name]= -k.attr("value")}else j[c[d].name]=jQuery(this).html();d++});d>0&&e.push(j)});jQuery(this).empty();jQuery(this).addClass("scroll");jQuery(this).jqGrid($.extend({datatype:"local",width:a,colNames:g,colModel:c,multiselect:b},p||{}));for(a=0;a0)if((b=h[a])&&b.replace)b=encodeURIComponent(b).replace(/[.\-%]/g,"_");if(b===null)b=a+1;jQuery(this).jqGrid("addRowData",b,e[a])}for(a=0;ath:not(:has(#jqgh_cb,#jqgh_rn,#jqgh_subgrid),:hidden)",placeholder:{element:function(e){return a(document.createElement(e[0].nodeName)).addClass(e[0].className+ -" ui-sortable-placeholder ui-state-highlight").removeClass("ui-sortable-helper")[0]},update:function(e,h){h.height(e.currentItem.innerHeight()-parseInt(e.currentItem.css("paddingTop")||0,10)-parseInt(e.currentItem.css("paddingBottom")||0,10));h.width(e.currentItem.innerWidth()-parseInt(e.currentItem.css("paddingLeft")||0,10)-parseInt(e.currentItem.css("paddingRight")||0,10))}},update:function(e,h){e=a(h.item).parent();e=a(">th",e);var j={};a.each(c.p.colModel,function(m){j[this.name]=m});var l=[]; -e.each(function(){var m=a(">div",this).get(0).id.replace(/^jqgh_/,"");m in j&&l.push(j[m])});a(c).jqGrid("remapColumns",l,true,true);a.isFunction(c.p.sortable.update)&&c.p.sortable.update(l);setTimeout(function(){c.p.disableClick=false},50)}};if(c.p.sortable.options)a.extend(g,c.p.sortable.options);else if(a.isFunction(c.p.sortable))c.p.sortable={update:c.p.sortable};if(g.start){var d=g.start;g.start=function(e,h){i();d.call(this,e,h)}}else g.start=i;if(c.p.sortable.exclude)g.items+=":not("+c.p.sortable.exclude+ -")";b.sortable(g).data("sortable").floating=true})},columnChooser:function(b){function i(f,k,p){if(k>=0){var o=f.slice(),r=o.splice(k,Math.max(f.length-k,k));if(k>f.length)k=f.length;o[k]=p;return o.concat(r)}}function c(f,k){if(f)if(typeof f=="string")a.fn[f]&&a.fn[f].apply(k,a.makeArray(arguments).slice(2));else a.isFunction(f)&&f.apply(k,a.makeArray(arguments).slice(2))}var g=this;if(!a("#colchooser_"+g[0].p.id).length){var d=a('
                      '), -e=a("select",d);b=a.extend({width:420,height:240,classname:null,done:function(f){f&&g.jqGrid("remapColumns",f,true)},msel:"multiselect",dlog:"dialog",dlog_opts:function(f){var k={};k[f.bSubmit]=function(){f.apply_perm();f.cleanup(false)};k[f.bCancel]=function(){f.cleanup(true)};return{buttons:k,close:function(){f.cleanup(true)},modal:false,resizable:false,width:f.width+20}},apply_perm:function(){a("option",e).each(function(){this.selected?g.jqGrid("showCol",h[this.value].name):g.jqGrid("hideCol", -h[this.value].name)});var f=[];a("option[selected]",e).each(function(){f.push(parseInt(this.value,10))});a.each(f,function(){delete l[h[parseInt(this,10)].name]});a.each(l,function(){var k=parseInt(this,10);f=i(f,k,k)});b.done&&b.done.call(g,f)},cleanup:function(f){c(b.dlog,d,"destroy");c(b.msel,e,"destroy");d.remove();f&&b.done&&b.done.call(g)},msel_opts:{}},a.jgrid.col,b||{});if(a.ui)if(a.ui.multiselect)if(b.msel=="multiselect"){if(!a.jgrid._multiselect){alert("Multiselect plugin loaded after jqGrid. Please load the plugin before the jqGrid!"); -return}b.msel_opts=a.extend(a.ui.multiselect.defaults,b.msel_opts)}b.caption&&d.attr("title",b.caption);if(b.classname){d.addClass(b.classname);e.addClass(b.classname)}if(b.width){a(">div",d).css({width:b.width,margin:"0 auto"});e.css("width",b.width)}if(b.height){a(">div",d).css("height",b.height);e.css("height",b.height-10)}var h=g.jqGrid("getGridParam","colModel"),j=g.jqGrid("getGridParam","colNames"),l={},m=[];e.empty();a.each(h,function(f){l[this.name]=f;if(this.hidedlg)this.hidden||m.push(f); -else e.append("")});var n=a.isFunction(b.dlog_opts)?b.dlog_opts.call(g,b):b.dlog_opts;c(b.dlog,d,n);n=a.isFunction(b.msel_opts)?b.msel_opts.call(g,b):b.msel_opts;c(b.msel,e,n)}},sortableRows:function(b){return this.each(function(){var i=this;if(i.grid)if(!i.p.treeGrid)if(a.fn.sortable){b=a.extend({cursor:"move",axis:"y",items:".jqgrow"},b||{});if(b.start&&a.isFunction(b.start)){b._start_=b.start;delete b.start}else b._start_= -false;if(b.update&&a.isFunction(b.update)){b._update_=b.update;delete b.update}else b._update_=false;b.start=function(c,g){a(g.item).css("border-width","0px");a("td",g.item).each(function(h){this.style.width=i.grid.cols[h].style.width});if(i.p.subGrid){var d=a(g.item).attr("id");try{a(i).jqGrid("collapseSubGridRow",d)}catch(e){}}b._start_&&b._start_.apply(this,[c,g])};b.update=function(c,g){a(g.item).css("border-width","");i.updateColumns();i.p.rownumbers===true&&a("td.jqgrid-rownum",i.rows).each(function(d){a(this).html(d+ -1)});b._update_&&b._update_.apply(this,[c,g])};a("tbody:first",i).sortable(b);a("tbody:first",i).disableSelection()}})},gridDnD:function(b){return this.each(function(){function i(){var d=a.data(c,"dnd");a("tr.jqgrow:not(.ui-draggable)",c).draggable(a.isFunction(d.drag)?d.drag.call(a(c),d):d.drag)}var c=this;if(c.grid)if(!c.p.treeGrid)if(a.fn.draggable&&a.fn.droppable){a("#jqgrid_dnd").html()===null&&a("body").append("
                      ");if(typeof b=="string"&&b== -"updateDnD"&&c.p.jqgdnd===true)i();else{b=a.extend({drag:function(d){return a.extend({start:function(e,h){if(c.p.subGrid){var j=a(h.helper).attr("id");try{a(c).jqGrid("collapseSubGridRow",j)}catch(l){}}for(j=0;j35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('7(1C 1w.6=="T"){1w.T=1w.T;B 6=u(a,c){7(1w==q)v 1p 6(a,c);a=a||17;7(6.1t(a))v 1p 6(17)[6.E.27?"27":"2O"](a);7(1C a=="23"){B m=/^[^<]*(<(.|\\s)+>)[^>]*$/.2Q(a);7(m)a=6.3k([m[1]]);J v 1p 6(c).2o(a)}v q.6r(a.1l==2y&&a||(a.3Y||a.I&&a!=1w&&!a.24&&a[0]!=T&&a[0].24)&&6.3M(a)||[a])};7(1C $!="T")6.2S$=$;B $=6;6.E=6.8p={3Y:"1.1.2",8q:u(){v q.I},I:0,2b:u(1T){v 1T==T?6.3M(q):q[1T]},2r:u(a){B L=6(a);L.6p=q;v L},6r:u(a){q.I=0;[].1g.14(q,a);v q},K:u(E,1E){v 6.K(q,E,1E)},2h:u(1c){B 4c=-1;q.K(u(i){7(q==1c)4c=i});v 4c},1I:u(1Y,O,C){B 1c=1Y;7(1Y.1l==3t)7(O==T)v q.I&&6[C||"1I"](q[0],1Y)||T;J{1c={};1c[1Y]=O}v q.K(u(2h){P(B H 1x 1c)6.1I(C?q.1q:q,H,6.H(q,1c[H],C,2h,H))})},1m:u(1Y,O){v q.1I(1Y,O,"30")},2L:u(e){7(1C e=="23")v q.3u().3r(17.8t(e));B t="";6.K(e||q,u(){6.K(q.2I,u(){7(q.24!=8)t+=q.24!=1?q.60:6.E.2L([q])})});v t},2K:u(){B a=6.3k(1A);v q.K(u(){B b=a[0].3l(U);q.11.2X(b,q);22(b.1b)b=b.1b;b.4C(q)})},3r:u(){v q.3j(1A,U,1,u(a){q.4C(a)})},5i:u(){v q.3j(1A,U,-1,u(a){q.2X(a,q.1b)})},5j:u(){v q.3j(1A,12,1,u(a){q.11.2X(a,q)})},5t:u(){v q.3j(1A,12,-1,u(a){q.11.2X(a,q.2e)})},4g:u(){v q.6p||6([])},2o:u(t){v q.2r(6.31(q,u(a){v 6.2o(t,a)}),t)},4Y:u(4N){v q.2r(6.31(q,u(a){B a=a.3l(4N!=T?4N:U);a.$1H=16;v a}))},1D:u(t){v q.2r(6.1t(t)&&6.2q(q,u(2z,2h){v t.14(2z,[2h])})||6.3z(t,q))},2g:u(t){v q.2r(t.1l==3t&&6.3z(t,q,U)||6.2q(q,u(a){v(t.1l==2y||t.3Y)?6.3y(a,t)<0:a!=t}))},1M:u(t){v q.2r(6.2k(q.2b(),t.1l==3t?6(t).2b():t.I!=T&&(!t.1f||t.1f=="8v")?t:[t]))},4l:u(1s){v 1s?6.1D(1s,q).r.I>0:12},1a:u(1a){v 1a==T?(q.I?q[0].O:16):q.1I("O",1a)},4U:u(1a){v 1a==T?(q.I?q[0].2t:16):q.3u().3r(1a)},3j:u(1E,1P,3Z,E){B 4Y=q.I>1;B a=6.3k(1E);7(3Z<0)a.8w();v q.K(u(){B 1c=q;7(1P&&6.1f(q,"1P")&&6.1f(a[0],"3m"))1c=q.5J("20")[0]||q.4C(17.6n("20"));6.K(a,u(){E.14(1c,[4Y?q.3l(U):q])})})}};6.1z=6.E.1z=u(){B 1O=1A[0],a=1;7(1A.I==1){1O=q;a=0}B H;22(H=1A[a++])P(B i 1x H)1O[i]=H[i];v 1O};6.1z({8x:u(){7(6.2S$)$=6.2S$;v 6},1t:u(E){v!!E&&1C E!="23"&&!E.1f&&1C E[0]=="T"&&/u/i.1n(E+"")},4B:u(D){v D.66&&D.5I&&!D.5I.64},1f:u(D,Y){v D.1f&&D.1f.3K()==Y.3K()},K:u(1c,E,1E){7(1c.I==T)P(B i 1x 1c)E.14(1c[i],1E||[i,1c[i]]);J P(B i=0,6q=1c.I;i<6q;i++)7(E.14(1c[i],1E||[i,1c[i]])===12)3O;v 1c},H:u(D,O,C,2h,H){7(6.1t(O))O=O.3n(D,[2h]);B 6s=/z-?2h|7P-?8A|1d|58|8B-?28/i;v O&&O.1l==3Q&&C=="30"&&!6s.1n(H)?O+"4S":O},19:{1M:u(D,c){6.K(c.3o(/\\s+/),u(i,Q){7(!6.19.2V(D.19,Q))D.19+=(D.19?" ":"")+Q})},2f:u(D,c){D.19=c?6.2q(D.19.3o(/\\s+/),u(Q){v!6.19.2V(c,Q)}).6t(" "):""},2V:u(t,c){t=t.19||t;c=c.1R(/([\\.\\\\\\+\\*\\?\\[\\^\\]\\$\\(\\)\\{\\}\\=\\!\\<\\>\\|\\:])/g,"\\\\$1");v t&&1p 4v("(^|\\\\s)"+c+"(\\\\s|$)").1n(t)}},4d:u(e,o,f){P(B i 1x o){e.1q["1N"+i]=e.1q[i];e.1q[i]=o[i]}f.14(e,[]);P(B i 1x o)e.1q[i]=e.1q["1N"+i]},1m:u(e,p){7(p=="28"||p=="3V"){B 1N={},46,3P,d=["7d","8C","8D","8E"];6.K(d,u(){1N["8F"+q]=0;1N["8G"+q+"8H"]=0});6.4d(e,1N,u(){7(6.1m(e,"1h")!="1Z"){46=e.8I;3P=e.8J}J{e=6(e.3l(U)).2o(":4j").5l("2Z").4g().1m({4n:"1G",45:"8K",1h:"2D",7I:"0",8M:"0"}).5z(e.11)[0];B 3d=6.1m(e.11,"45");7(3d==""||3d=="4b")e.11.1q.45="6x";46=e.6y;3P=e.6z;7(3d==""||3d=="4b")e.11.1q.45="4b";e.11.33(e)}});v p=="28"?46:3P}v 6.30(e,p)},30:u(D,H,53){B L;7(H=="1d"&&6.W.1j)v 6.1I(D.1q,"1d");7(H=="4h"||H=="2v")H=6.W.1j?"3T":"2v";7(!53&&D.1q[H])L=D.1q[H];J 7(17.44&&17.44.4W){7(H=="2v"||H=="3T")H="4h";H=H.1R(/([A-Z])/g,"-$1").4m();B Q=17.44.4W(D,16);7(Q)L=Q.55(H);J 7(H=="1h")L="1Z";J 6.4d(D,{1h:"2D"},u(){B c=17.44.4W(q,"");L=c&&c.55(H)||""})}J 7(D.51){B 56=H.1R(/\\-(\\w)/g,u(m,c){v c.3K()});L=D.51[H]||D.51[56]}v L},3k:u(a){B r=[];6.K(a,u(i,1r){7(!1r)v;7(1r.1l==3Q)1r=1r.6C();7(1C 1r=="23"){B s=6.35(1r),1V=17.6n("1V"),2i=[];B 2K=!s.18("<1u")&&[1,"<42>",""]||(!s.18("<6D")||!s.18("<20")||!s.18("<6E"))&&[1,"<1P>",""]||!s.18("<3m")&&[2,"<1P><20>",""]||(!s.18("<6F")||!s.18("<6G"))&&[3,"<1P><20><3m>",""]||[0,"",""];1V.2t=2K[1]+s+2K[2];22(2K[0]--)1V=1V.1b;7(6.W.1j){7(!s.18("<1P")&&s.18("<20")<0)2i=1V.1b&&1V.1b.2I;J 7(2K[1]=="<1P>"&&s.18("<20")<0)2i=1V.2I;P(B n=2i.I-1;n>=0;--n)7(6.1f(2i[n],"20")&&!2i[n].2I.I)2i[n].11.33(2i[n])}1r=[];P(B i=0,l=1V.2I.I;im[3]-0",2a:"m[3]-0==i",5q:"m[3]-0==i",2u:"i==0",2T:"i==r.I-1",5R:"i%2==0",5S:"i%2","2a-3s":"6.2a(a.11.1b,m[3],\'2e\',a)==a","2u-3s":"6.2a(a.11.1b,1,\'2e\')==a","2T-3s":"6.2a(a.11.7n,1,\'5s\')==a","7p-3s":"6.2B(a.11.1b).I==1",5u:"a.1b",3u:"!a.1b",5v:"6.E.2L.14([a]).18(m[3])>=0",3i:\'a.C!="1G"&&6.1m(a,"1h")!="1Z"&&6.1m(a,"4n")!="1G"\',1G:\'a.C=="1G"||6.1m(a,"1h")=="1Z"||6.1m(a,"4n")=="1G"\',7v:"!a.2W",2W:"a.2W",2Z:"a.2Z",2Y:"a.2Y||6.1I(a,\'2Y\')",2L:"a.C==\'2L\'",4j:"a.C==\'4j\'",5x:"a.C==\'5x\'",4G:"a.C==\'4G\'",5y:"a.C==\'5y\'",4R:"a.C==\'4R\'",5A:"a.C==\'5A\'",5B:"a.C==\'5B\'",3x:\'a.C=="3x"||6.1f(a,"3x")\',5C:"/5C|42|7A|3x/i.1n(a.1f)"},".":"6.19.2V(a,m[2])","@":{"=":"z==m[4]","!=":"z!=m[4]","^=":"z&&!z.18(m[4])","$=":"z&&z.2U(z.I - m[4].I,m[4].I)==m[4]","*=":"z&&z.18(m[4])>=0","":"z",4u:u(m){v["",m[1],m[3],m[2],m[5]]},5P:"z=a[m[3]];7(!z||/5E|3e/.1n(m[3]))z=6.1I(a,m[3]);"},"[":"6.2o(m[2],a).I"},5M:[/^\\[ *(@)([a-2m-3C-]*) *([!*$^=]*) *(\'?"?)(.*?)\\4 *\\]/i,/^(\\[)\\s*(.*?(\\[.*?\\])?[^[]*?)\\s*\\]/,/^(:)([a-2m-3C-]*)\\("?\'?(.*?(\\(.*?\\))?[^(]*?)"?\'?\\)/i,/^([:.#]*)([a-2m-3C*-]*)/i],1Q:[/^(\\/?\\.\\.)/,"a.11",/^(>|\\/)/,"6.2B(a.1b)",/^(\\+)/,"6.2a(a,2,\'2e\')",/^(~)/,u(a){B s=6.2B(a.11.1b);v s.3N(6.3y(a,s)+1)}],3z:u(1s,1U,2g){B 1N,Q=[];22(1s&&1s!=1N){1N=1s;B f=6.1D(1s,1U,2g);1s=f.t.1R(/^\\s*,\\s*/,"");Q=2g?1U=f.r:6.2k(Q,f.r)}v Q},2o:u(t,1B){7(1C t!="23")v[t];7(1B&&!1B.24)1B=16;1B=1B||17;7(!t.18("//")){1B=1B.4H;t=t.2U(2,t.I)}J 7(!t.18("/")){1B=1B.4H;t=t.2U(1,t.I);7(t.18("/")>=1)t=t.2U(t.18("/"),t.I)}B L=[1B],2c=[],2T=16;22(t&&2T!=t){B r=[];2T=t;t=6.35(t).1R(/^\\/\\//i,"");B 3B=12;B 1J=/^[\\/>]\\s*([a-2m-9*-]+)/i;B m=1J.2Q(t);7(m){6.K(L,u(){P(B c=q.1b;c;c=c.2e)7(c.24==1&&(6.1f(c,m[1])||m[1]=="*"))r.1g(c)});L=r;t=t.1R(1J,"");7(t.18(" ")==0)5F;3B=U}J{P(B i=0;i<6.1Q.I;i+=2){B 1J=6.1Q[i];B m=1J.2Q(t);7(m){r=L=6.31(L,6.1t(6.1Q[i+1])?6.1Q[i+1]:u(a){v 40(6.1Q[i+1])});t=6.35(t.1R(1J,""));3B=U;3O}}}7(t&&!3B){7(!t.18(",")){7(L[0]==1B)L.4L();6.2k(2c,L);r=L=[1B];t=" "+t.2U(1,t.I)}J{B 34=/^([a-2m-3C-]+)(#)([a-2m-9\\\\*2S-]*)/i;B m=34.2Q(t);7(m){m=[0,m[2],m[3],m[1]]}J{34=/^([#.]?)([a-2m-9\\\\*2S-]*)/i;m=34.2Q(t)}7(m[1]=="#"&&L[L.I-1].4X){B 2l=L[L.I-1].4X(m[2]);7(6.W.1j&&2l&&2l.2J!=m[2])2l=6(\'[@2J="\'+m[2]+\'"]\',L[L.I-1])[0];L=r=2l&&(!m[3]||6.1f(2l,m[3]))?[2l]:[]}J{7(m[1]==".")B 4r=1p 4v("(^|\\\\s)"+m[2]+"(\\\\s|$)");6.K(L,u(){B 3E=m[1]!=""||m[0]==""?"*":m[2];7(6.1f(q,"7J")&&3E=="*")3E="3g";6.2k(r,m[1]!=""&&L.I!=1?6.4x(q,[],m[1],m[2],4r):q.5J(3E))});7(m[1]=="."&&L.I==1)r=6.2q(r,u(e){v 4r.1n(e.19)});7(m[1]=="#"&&L.I==1){B 5K=r;r=[];6.K(5K,u(){7(q.36("2J")==m[2]){r=[q];v 12}})}L=r}t=t.1R(34,"")}}7(t){B 1a=6.1D(t,r);L=r=1a.r;t=6.35(1a.t)}}7(L&&L[0]==1B)L.4L();6.2k(2c,L);v 2c},1D:u(t,r,2g){22(t&&/^[a-z[({<*:.#]/i.1n(t)){B p=6.5M,m;6.K(p,u(i,1J){m=1J.2Q(t);7(m){t=t.7M(m[0].I);7(6.1s[m[1]].4u)m=6.1s[m[1]].4u(m);v 12}});7(m[1]==":"&&m[2]=="2g")r=6.1D(m[3],r,U).r;J 7(m[1]=="."){B 1J=1p 4v("(^|\\\\s)"+m[2]+"(\\\\s|$)");r=6.2q(r,u(e){v 1J.1n(e.19||"")},2g)}J{B f=6.1s[m[1]];7(1C f!="23")f=6.1s[m[1]][m[2]];40("f = u(a,i){"+(6.1s[m[1]].5P||"")+"v "+f+"}");r=6.2q(r,f,2g)}}v{r:r,t:t}},4x:u(o,r,1Q,Y,1J){P(B s=o.1b;s;s=s.2e)7(s.24==1){B 1M=U;7(1Q==".")1M=s.19&&1J.1n(s.19);J 7(1Q=="#")1M=s.36("2J")==Y;7(1M)r.1g(s);7(1Q=="#"&&r.I)3O;7(s.1b)6.4x(s,r,1Q,Y,1J)}v r},4z:u(D){B 4A=[];B Q=D.11;22(Q&&Q!=17){4A.1g(Q);Q=Q.11}v 4A},2a:u(Q,1i,3Z,D){1i=1i||1;B 1T=0;P(;Q;Q=Q[3Z]){7(Q.24==1)1T++;7(1T==1i||1i=="5R"&&1T%2==0&&1T>1&&Q==D||1i=="5S"&&1T%2==1&&Q==D)v Q}},2B:u(n,D){B r=[];P(;n;n=n.2e){7(n.24==1&&(!D||n!=D))r.1g(n)}v r}});6.G={1M:u(S,C,1o,F){7(6.W.1j&&S.3L!=T)S=1w;7(F)1o.F=F;7(!1o.2A)1o.2A=q.2A++;7(!S.$1H)S.$1H={};B 38=S.$1H[C];7(!38){38=S.$1H[C]={};7(S["39"+C])38[0]=S["39"+C]}38[1o.2A]=1o;S["39"+C]=q.5Y;7(!q.1k[C])q.1k[C]=[];q.1k[C].1g(S)},2A:1,1k:{},2f:u(S,C,1o){7(S.$1H){B i,j,k;7(C&&C.C){1o=C.1o;C=C.C}7(C&&S.$1H[C])7(1o)5U S.$1H[C][1o.2A];J P(i 1x S.$1H[C])5U S.$1H[C][i];J P(j 1x S.$1H)q.2f(S,j);P(k 1x S.$1H[C])7(k){k=U;3O}7(!k)S["39"+C]=16}},1S:u(C,F,S){F=6.3M(F||[]);7(!S)6.K(q.1k[C]||[],u(){6.G.1S(C,F,q)});J{B 1o=S["39"+C],1a,E=6.1t(S[C]);7(1o){F.61(q.2j({C:C,1O:S}));7((1a=1o.14(S,F))!==12)q.4F=U}7(E&&1a!==12)S[C]();q.4F=12}},5Y:u(G){7(1C 6=="T"||6.G.4F)v;G=6.G.2j(G||1w.G||{});B 3R;B c=q.$1H[G.C];B 1E=[].3N.3n(1A,1);1E.61(G);P(B j 1x c){1E[0].1o=c[j];1E[0].F=c[j].F;7(c[j].14(q,1E)===12){G.2n();G.2H();3R=12}}7(6.W.1j)G.1O=G.2n=G.2H=G.1o=G.F=16;v 3R},2j:u(G){7(!G.1O&&G.63)G.1O=G.63;7(G.65==T&&G.67!=T){B e=17.4H,b=17.64;G.65=G.67+(e.68||b.68);G.7Y=G.7Z+(e.6c||b.6c)}7(6.W.2N&&G.1O.24==3){B 3a=G;G=6.1z({},3a);G.1O=3a.1O.11;G.2n=u(){v 3a.2n()};G.2H=u(){v 3a.2H()}}7(!G.2n)G.2n=u(){q.3R=12};7(!G.2H)G.2H=u(){q.82=U};v G}};6.E.1z({3U:u(C,F,E){v q.K(u(){6.G.1M(q,C,E||F,F)})},6u:u(C,F,E){v q.K(u(){6.G.1M(q,C,u(G){6(q).6f(G);v(E||F).14(q,1A)},F)})},6f:u(C,E){v q.K(u(){6.G.2f(q,C,E)})},1S:u(C,F){v q.K(u(){6.G.1S(C,F,q)})},3X:u(){B a=1A;v q.6j(u(e){q.4M=q.4M==0?1:0;e.2n();v a[q.4M].14(q,[e])||12})},83:u(f,g){u 4O(e){B p=(e.C=="41"?e.84:e.85)||e.86;22(p&&p!=q)2G{p=p.11}2w(e){p=q};7(p==q)v 12;v(e.C=="41"?f:g).14(q,[e])}v q.41(4O).6k(4O)},27:u(f){7(6.3W)f.14(17,[6]);J{6.3c.1g(u(){v f.14(q,[6])})}v q}});6.1z({3W:12,3c:[],27:u(){7(!6.3W){6.3W=U;7(6.3c){6.K(6.3c,u(){q.14(17)});6.3c=16}7(6.W.3h||6.W.3f)17.87("6o",6.27,12)}}});1p u(){6.K(("88,8a,2O,8b,8d,52,6j,8e,"+"8f,8g,8h,41,6k,8j,42,"+"4R,8k,8l,8m,2C").3o(","),u(i,o){6.E[o]=u(f){v f?q.3U(o,f):q.1S(o)}});7(6.W.3h||6.W.3f)17.8n("6o",6.27,12);J 7(6.W.1j){17.8o("<8r"+"8s 2J=62 8u=U "+"3e=//:><\\/2d>");B 2d=17.4X("62");7(2d)2d.37=u(){7(q.3D!="1X")v;q.11.33(q);6.27()};2d=16}J 7(6.W.2N)6.50=3L(u(){7(17.3D=="8y"||17.3D=="1X"){4p(6.50);6.50=16;6.27()}},10);6.G.1M(1w,"2O",6.27)};7(6.W.1j)6(1w).6u("52",u(){B 1k=6.G.1k;P(B C 1x 1k){B 4Z=1k[C],i=4Z.I;7(i&&C!=\'52\')6w 6.G.2f(4Z[i-1],C);22(--i)}});6.E.1z({6A:u(V,21,M){q.2O(V,21,M,1)},2O:u(V,21,M,1W){7(6.1t(V))v q.3U("2O",V);M=M||u(){};B C="5d";7(21)7(6.1t(21)){M=21;21=16}J{21=6.3g(21);C="5V"}B 4e=q;6.3v({V:V,C:C,F:21,1W:1W,1X:u(2P,15){7(15=="2M"||!1W&&15=="5L")4e.1I("2t",2P.3G).4V().K(M,[2P.3G,15,2P]);J M.14(4e,[2P.3G,15,2P])}});v q},6B:u(){v 6.3g(q)},4V:u(){v q.2o("2d").K(u(){7(q.3e)6.59(q.3e);J 6.4a(q.2L||q.6H||q.2t||"")}).4g()}});7(!1w.3p)3p=u(){v 1p 6I("6K.6M")};6.K("5m,5Q,5O,5W,5N,5H".3o(","),u(i,o){6.E[o]=u(f){v q.3U(o,f)}});6.1z({2b:u(V,F,M,C,1W){7(6.1t(F)){M=F;F=16}v 6.3v({V:V,F:F,2M:M,4t:C,1W:1W})},6Q:u(V,F,M,C){v 6.2b(V,F,M,C,1)},59:u(V,M){v 6.2b(V,16,M,"2d")},6S:u(V,F,M){v 6.2b(V,F,M,"6m")},6U:u(V,F,M,C){7(6.1t(F)){M=F;F={}}v 6.3v({C:"5V",V:V,F:F,2M:M,4t:C})},6X:u(29){6.3q.29=29},6Y:u(5c){6.1z(6.3q,5c)},3q:{1k:U,C:"5d",29:0,5r:"70/x-73-3w-77",5h:U,48:U,F:16},3S:{},3v:u(s){s=6.1z({},6.3q,s);7(s.F){7(s.5h&&1C s.F!="23")s.F=6.3g(s.F);7(s.C.4m()=="2b"){s.V+=((s.V.18("?")>-1)?"&":"?")+s.F;s.F=16}}7(s.1k&&!6.4E++)6.G.1S("5m");B 4y=12;B N=1p 3p();N.7j(s.C,s.V,s.48);7(s.F)N.3A("7l-7m",s.5r);7(s.1W)N.3A("7o-4K-7q",6.3S[s.V]||"7s, 7t 7w 7x 4o:4o:4o 7z");N.3A("X-7B-7C","3p");7(N.7E)N.3A("7F","7G");7(s.5G)s.5G(N);7(s.1k)6.G.1S("5H",[N,s]);B 37=u(4s){7(N&&(N.3D==4||4s=="29")){4y=U;7(3I){4p(3I);3I=16}B 15;2G{15=6.5Z(N)&&4s!="29"?s.1W&&6.69(N,s.V)?"5L":"2M":"2C";7(15!="2C"){B 3F;2G{3F=N.4P("6b-4K")}2w(e){}7(s.1W&&3F)6.3S[s.V]=3F;B F=6.6i(N,s.4t);7(s.2M)s.2M(F,15);7(s.1k)6.G.1S("5N",[N,s])}J 6.3J(s,N,15)}2w(e){15="2C";6.3J(s,N,15,e)}7(s.1k)6.G.1S("5O",[N,s]);7(s.1k&&!--6.4E)6.G.1S("5Q");7(s.1X)s.1X(N,15);7(s.48)N=16}};B 3I=3L(37,13);7(s.29>0)57(u(){7(N){N.7N();7(!4y)37("29")}},s.29);2G{N.7Q(s.F)}2w(e){6.3J(s,N,16,e)}7(!s.48)37();v N},3J:u(s,N,15,e){7(s.2C)s.2C(N,15,e);7(s.1k)6.G.1S("5W",[N,s,e])},4E:0,5Z:u(r){2G{v!r.15&&7V.7W=="4G:"||(r.15>=5X&&r.15<7X)||r.15==6d||6.W.2N&&r.15==T}2w(e){}v 12},69:u(N,V){2G{B 6e=N.4P("6b-4K");v N.15==6d||6e==6.3S[V]||6.W.2N&&N.15==T}2w(e){}v 12},6i:u(r,C){B 4Q=r.4P("8c-C");B F=!C&&4Q&&4Q.18("N")>=0;F=C=="N"||F?r.8i:r.3G;7(C=="2d")6.4a(F);7(C=="6m")40("F = "+F);7(C=="4U")6("<1V>").4U(F).4V();v F},3g:u(a){B s=[];7(a.1l==2y||a.3Y)6.K(a,u(){s.1g(2x(q.Y)+"="+2x(q.O))});J P(B j 1x a)7(a[j]&&a[j].1l==2y)6.K(a[j],u(){s.1g(2x(j)+"="+2x(q))});J s.1g(2x(j)+"="+2x(a[j]));v s.6t("&")},4a:u(F){7(1w.54)1w.54(F);J 7(6.W.2N)1w.57(F,0);J 40.3n(1w,F)}});6.E.1z({1L:u(R,M){B 1G=q.1D(":1G");R?1G.26({28:"1L",3V:"1L",1d:"1L"},R,M):1G.K(u(){q.1q.1h=q.2E?q.2E:"";7(6.1m(q,"1h")=="1Z")q.1q.1h="2D"});v q},1K:u(R,M){B 3i=q.1D(":3i");R?3i.26({28:"1K",3V:"1K",1d:"1K"},R,M):3i.K(u(){q.2E=q.2E||6.1m(q,"1h");7(q.2E=="1Z")q.2E="2D";q.1q.1h="1Z"});v q},5g:6.E.3X,3X:u(E,4I){B 1E=1A;v 6.1t(E)&&6.1t(4I)?q.5g(E,4I):q.K(u(){6(q)[6(q).4l(":1G")?"1L":"1K"].14(6(q),1E)})},7a:u(R,M){v q.26({28:"1L"},R,M)},7c:u(R,M){v q.26({28:"1K"},R,M)},7f:u(R,M){v q.K(u(){B 5k=6(q).4l(":1G")?"1L":"1K";6(q).26({28:5k},R,M)})},7r:u(R,M){v q.26({1d:"1L"},R,M)},7u:u(R,M){v q.26({1d:"1K"},R,M)},7y:u(R,43,M){v q.26({1d:43},R,M)},26:u(H,R,1v,M){v q.1F(u(){q.2F=6.1z({},H);B 1u=6.R(R,1v,M);P(B p 1x H){B e=1p 6.3b(q,1u,p);7(H[p].1l==3Q)e.2s(e.Q(),H[p]);J e[H[p]](H)}})},1F:u(C,E){7(!E){E=C;C="3b"}v q.K(u(){7(!q.1F)q.1F={};7(!q.1F[C])q.1F[C]=[];q.1F[C].1g(E);7(q.1F[C].I==1)E.14(q)})}});6.1z({R:u(R,1v,E){B 1u=R&&R.1l==7K?R:{1X:E||!E&&1v||6.1t(R)&&R,25:R,1v:E&&1v||1v&&1v.1l!=4w&&1v};1u.25=(1u.25&&1u.25.1l==3Q?1u.25:{7R:7S,7T:5X}[1u.25])||7U;1u.1N=1u.1X;1u.1X=u(){6.6a(q,"3b");7(6.1t(1u.1N))1u.1N.14(q)};v 1u},1v:{},1F:{},6a:u(D,C){C=C||"3b";7(D.1F&&D.1F[C]){D.1F[C].4L();B f=D.1F[C][0];7(f)f.14(D)}},3b:u(D,1e,H){B z=q;B y=D.1q;B 4D=6.1m(D,"1h");y.5T="1G";z.a=u(){7(1e.49)1e.49.14(D,[z.2p]);7(H=="1d")6.1I(y,"1d",z.2p);J 7(6l(z.2p))y[H]=6l(z.2p)+"4S";y.1h="2D"};z.6v=u(){v 4T(6.1m(D,H))};z.Q=u(){B r=4T(6.30(D,H));v r&&r>-8z?r:z.6v()};z.2s=u(4f,43){z.4J=(1p 5o()).5w();z.2p=4f;z.a();z.4q=3L(u(){z.49(4f,43)},13)};z.1L=u(){7(!D.1y)D.1y={};D.1y[H]=q.Q();1e.1L=U;z.2s(0,D.1y[H]);7(H!="1d")y[H]="5a"};z.1K=u(){7(!D.1y)D.1y={};D.1y[H]=q.Q();1e.1K=U;z.2s(D.1y[H],0)};z.3X=u(){7(!D.1y)D.1y={};D.1y[H]=q.Q();7(4D=="1Z"){1e.1L=U;7(H!="1d")y[H]="5a";z.2s(0,D.1y[H])}J{1e.1K=U;z.2s(D.1y[H],0)}};z.49=u(32,47){B t=(1p 5o()).5w();7(t>1e.25+z.4J){4p(z.4q);z.4q=16;z.2p=47;z.a();7(D.2F)D.2F[H]=U;B 2c=U;P(B i 1x D.2F)7(D.2F[i]!==U)2c=12;7(2c){y.5T="";y.1h=4D;7(6.1m(D,"1h")=="1Z")y.1h="2D";7(1e.1K)y.1h="1Z";7(1e.1K||1e.1L)P(B p 1x D.2F)7(p=="1d")6.1I(y,p,D.1y[p]);J y[p]=""}7(2c&&6.1t(1e.1X))1e.1X.14(D)}J{B n=t-q.4J;B p=n/1e.25;z.2p=1e.1v&&6.1v[1e.1v]?6.1v[1e.1v](p,n,32,(47-32),1e.25):((-6h.7O(p*6h.8L)/2)+0.5)*(47-32)+32;z.a()}}}})}',62,545,'||||||jQuery|if|||||||||||||||||||this||||function|return||||||var|type|elem|fn|data|event|prop|length|else|each|ret|callback|xml|value|for|cur|speed|element|undefined|true|url|browser||name|||parentNode|false||apply|status|null|document|indexOf|className|val|firstChild|obj|opacity|options|nodeName|push|display|result|msie|global|constructor|css|test|handler|new|style|arg|expr|isFunction|opt|easing|window|in|orig|extend|arguments|context|typeof|filter|args|queue|hidden|events|attr|re|hide|show|add|old|target|table|token|replace|trigger|num|elems|div|ifModified|complete|key|none|tbody|params|while|string|nodeType|duration|animate|ready|height|timeout|nth|get|done|script|nextSibling|remove|not|index|tb|fix|merge|oid|z0|preventDefault|find|now|grep|pushStack|custom|innerHTML|first|cssFloat|catch|encodeURIComponent|Array|el|guid|sibling|error|block|oldblock|curAnim|try|stopPropagation|childNodes|id|wrap|text|success|safari|load|res|exec|al|_|last|substr|has|disabled|insertBefore|selected|checked|curCSS|map|firstNum|removeChild|re2|trim|getAttribute|onreadystatechange|handlers|on|originalEvent|fx|readyList|parPos|src|opera|param|mozilla|visible|domManip|clean|cloneNode|tr|call|split|XMLHttpRequest|ajaxSettings|append|child|String|empty|ajax|form|button|inArray|multiFilter|setRequestHeader|foundToken|9_|readyState|tag|modRes|responseText|second|ival|handleError|toUpperCase|setInterval|makeArray|slice|break|oWidth|Number|returnValue|lastModified|styleFloat|bind|width|isReady|toggle|jquery|dir|eval|mouseover|select|to|defaultView|position|oHeight|lastNum|async|step|globalEval|static|pos|swap|self|from|end|float|alpha|radio|inv|is|toLowerCase|visibility|00|clearInterval|timer|rec|isTimeout|dataType|_resort|RegExp|Function|getAll|requestDone|parents|matched|isXMLDoc|appendChild|oldDisplay|active|triggered|file|documentElement|fn2|startTime|Modified|shift|lastToggle|deep|handleHover|getResponseHeader|ct|submit|px|parseFloat|html|evalScripts|getComputedStyle|getElementById|clone|els|safariTimer|currentStyle|unload|force|execScript|getPropertyValue|newProp|setTimeout|zoom|getScript|1px|sl|settings|GET|rl|check|_toggle|processData|prepend|before|state|removeAttr|ajaxStart|lt|Date|gt|eq|contentType|previousSibling|after|parent|contains|getTime|checkbox|password|appendTo|image|reset|input|webkit|href|continue|beforeSend|ajaxSend|ownerDocument|getElementsByTagName|tmp|notmodified|parse|ajaxSuccess|ajaxComplete|_prefix|ajaxStop|even|odd|overflow|delete|POST|ajaxError|200|handle|httpSuccess|nodeValue|unshift|__ie_init|srcElement|body|pageX|tagName|clientX|scrollLeft|httpNotModified|dequeue|Last|scrollTop|304|xmlRes|unbind|100|Math|httpData|click|mouseout|parseInt|json|createElement|DOMContentLoaded|prevObject|ol|setArray|exclude|join|one|max|do|relative|clientHeight|clientWidth|loadIfModified|serialize|toString|thead|tfoot|td|th|textContent|ActiveXObject|htmlFor|Microsoft|class|XMLHTTP|readOnly|gi|match|getIfModified|9999|getJSON|getAttributeNode|post|setAttribute|ig|ajaxTimeout|ajaxSetup|concat|application|userAgent|compatible|www|compatMode|CSS1Compat|next|urlencoded|siblings|children|slideDown|prependTo|slideUp|Top|insertAfter|slideToggle|removeAttribute|addClass|removeClass|open|toggleClass|Content|Type|lastChild|If|only|Since|fadeIn|Thu|01|fadeOut|enabled|Jan|1970|fadeTo|GMT|textarea|Requested|With|prev|overrideMimeType|Connection|close|boxModel|right|object|Object|navigator|substring|abort|cos|font|send|slow|600|fast|400|location|protocol|300|pageY|clientY|method|action|cancelBubble|hover|fromElement|toElement|relatedTarget|removeEventListener|blur|readonly|focus|resize|content|scroll|dblclick|mousedown|mouseup|mousemove|responseXML|change|keydown|keypress|keyup|addEventListener|write|prototype|size|scr|ipt|createTextNode|defer|FORM|reverse|noConflict|loaded|10000|weight|line|Bottom|Right|Left|padding|border|Width|offsetHeight|offsetWidth|absolute|PI|left'.split('|'),0,{})) --- a/owa/modules/base/js/includes/jquery/jquery.sparkline.min.js +++ /dev/null @@ -1,76 +1,1 @@ -/* jquery.sparkline 1.2.1 - http://omnipotent.net/jquery.sparkline/ */ -(function($){$.fn.simpledraw=function(width,height,use_existing){if(use_existing&&this[0].vcanvas)return this[0].vcanvas;if(width==undefined)width=$(this).innerWidth();if(height==undefined)height=$(this).innerHeight();if($.browser.hasCanvas){return new vcanvas_canvas(width,height,this);}else if($.browser.msie){return new vcanvas_vml(width,height,this);}else{return false;}};$.fn.sparkline=function(uservalues,options){var options=$.extend({type:'line',lineColor:'#00f',fillColor:'#cdf',defaultPixelsPerValue:3,width:'auto',height:'auto',composite:false},options?options:{});return this.each(function(){var values=(uservalues=='html'||uservalues==undefined)?$(this).text().split(','):uservalues;var width=options.width=='auto'?values.length*options.defaultPixelsPerValue:options.width;if(options.height=='auto'){var tmp=document.createElement('span');tmp.innerHTML='a';$(this).append(tmp);height=$(tmp).innerHeight();$(tmp).remove();}else{height=options.height;} -$.fn.sparkline[options.type].call(this,values,options,width,height);});};$.fn.sparkline.line=function(values,options,width,height){var options=$.extend({spotColor:'#f80',spotRadius:1.5,minSpotColor:'#f80',maxSpotColor:'#f80',normalRangeMin:undefined,normalRangeMax:undefined,normalRangeColor:'#ccc',chartRangeMin:undefined,chartRangeMax:undefined},options?options:{});var xvalues=[],yvalues=[];for(i=0;imaxy) -maxy=options.normalRangeMax;} -if(options.chartRangeMin!=undefined&&options.chartRangeMinmaxy){maxy=options.chartRangeMax;} -var rangex=maxx-minx==0?1:maxx-minx;var rangey=maxy-miny==0?1:maxy-miny;var vl=yvalues.length-1;if(vl<1){this.innerHTML='';return;} -var target=$(this).simpledraw(width,height,options.composite);if(target){var canvas_width=target.pixel_width;var canvas_height=target.pixel_height;var canvas_top=0;var canvas_left=0;if(options.spotRadius&&(canvas_width<(options.spotRadius*4)||canvas_height<(options.spotRadius*4))){options.spotRadius=0;} -if(options.spotRadius){if(options.minSpotColor||(options.spotColor&&yvalues[vl]==miny)) -canvas_height-=Math.ceil(options.spotRadius);if(options.maxSpotColor||(options.spotColor&&yvalues[vl]==maxy)){canvas_height-=Math.ceil(options.spotRadius);canvas_top+=Math.ceil(options.spotRadius);} -if(options.minSpotColor||options.maxSpotColor&&(yvalues[0]==miny||yvalues[0]==maxy)){canvas_left+=Math.ceil(options.spotRadius);canvas_width-=Math.ceil(options.spotRadius);} -if(options.spotColor||(options.minSpotColor||options.maxSpotColor&&(yvalues[vl]==miny||yvalues[vl]==maxy))) -canvas_width-=Math.ceil(options.spotRadius);} -canvas_height--;if(options.normalRangeMin!=undefined){var ytop=canvas_top+Math.round(canvas_height-(canvas_height*((options.normalRangeMax-miny)/rangey)));var height=Math.round((canvas_height*(options.normalRangeMax-options.normalRangeMin))/rangey);target.drawRect(canvas_left,ytop,canvas_width,height,undefined,options.normalRangeColor);} -var path=[[canvas_left,canvas_top+canvas_height]];for(var i=0;imax){max=options.chartRangeMax;} -if(options.zeroAxis==undefined)options.zeroAxis=min<0;var range=max-min+1;var target=$(this).simpledraw(width,height);if(target){var canvas_width=target.pixel_width;var canvas_height=target.pixel_height;var yzero=min<0&&options.zeroAxis?canvas_height-Math.round(canvas_height*(Math.abs(min)/range))-1:canvas_height-1;for(var i=0;i0){var y=0;var height=half_height-1;var color=options.posBarColor;}else{var y=half_height-1;var height=2;var color=options.zeroBarColor;} -if(options.colorMap[values[i]]){color=options.colorMap[values[i]];} -if($.browser.msie) -target.drawRect(x,y,options.barWidth-1,height-1,color,color);else -target.drawRect(x,y,options.barWidth,height,undefined,color);}}else{this.innerHTML='';}};$.fn.sparkline.discrete=function(values,options,width,height){values=$.map(values,Number);var options=$.extend({lineHeight:'auto',thresholdColor:undefined,thresholdValue:0,chartRangeMax:undefined,chartRangeMin:undefined},options);width=options.width=='auto'?values.length*2:width;var interval=Math.floor(width/values.length);var target=$(this).simpledraw(width,height);if(target){var canvas_width=target.pixel_width;var canvas_height=target.pixel_height;var line_height=options.lineHeight=='auto'?Math.round(canvas_height*0.3):options.lineHeight;var pheight=canvas_height-line_height;var min=Math.min.apply(Math,values);var max=Math.max.apply(Math,values);if(options.chartRangeMin!=undefined&&options.chartRangeMinmax){max=options.chartRangeMax;} -var range=max-min;for(var i=0;i1){var canvas_width=target.pixel_width-Math.ceil(options.targetWidth/2);var canvas_height=target.pixel_height;var min=Math.min.apply(Math,values);var max=Math.max.apply(Math,values);if(options.base==undefined){var min=min<0?min:0;}else{min=options.base;} -var range=max-min;for(i=2;i1){var canvas_width=target.pixel_width;var canvas_height=target.pixel_height;var radius=Math.floor(Math.min(canvas_width,canvas_height)/2);var total=0;for(var i=0;i0){end=next+(circle*(values[i]/total));} -target.drawPieSlice(radius,radius,radius,start,end,undefined,options.sliceColors[i%options.sliceColors.length]);next=end;}}};if(!Array.prototype.indexOf){Array.prototype.indexOf=function(entry){for(var i=0;i';this.canvas.insertAdjacentHTML('beforeEnd',groupel);this.group=$(this.canvas).children()[0];},drawShape:function(path,lineColor,fillColor){var vpath=[];for(var i=0;i' -+' ';this.group.insertAdjacentHTML('beforeEnd',vel);},drawCircle:function(x,y,radius,lineColor,fillColor){x-=radius+1;y-=radius+1;var stroke=lineColor==undefined?' stroked="false" ':' strokeWeight="1" strokeColor="'+lineColor+'" ';var fill=fillColor==undefined?' filled="false"':' fillColor="'+fillColor+'" filled="true" ';var vel='';this.group.insertAdjacentHTML('beforeEnd',vel);},drawPieSlice:function(x,y,radius,startAngle,endAngle,lineColor,fillColor){if(startAngle==endAngle){return;} -if((endAngle-startAngle)==(2*Math.PI)){startAngle=0.0;endAngle=(2*Math.PI);} -var startx=x+Math.round(Math.cos(startAngle)*radius);var starty=y+Math.round(Math.sin(startAngle)*radius);var endx=x+Math.round(Math.cos(endAngle)*radius);var endy=y+Math.round(Math.sin(endAngle)*radius);var vpath=[x-radius,y-radius,x+radius,y+radius,startx,starty,endx,endy];var stroke=lineColor==undefined?' stroked="false" ':' strokeWeight="1" strokeColor="'+lineColor+'" ';var fill=fillColor==undefined?' filled="false"':' fillColor="'+fillColor+'" filled="true" ';var vel='' -+' ';this.group.insertAdjacentHTML('beforeEnd',vel);},drawRect:function(x,y,width,height,lineColor,fillColor){return this.drawShape([[x,y],[x,y+height],[x+width,y+height],[x+width,y],[x,y]],lineColor,fillColor);}});})(jQuery); --- a/owa/modules/base/js/includes/jquery/jquery.sprintf.js +++ /dev/null @@ -1,58 +1,1 @@ -/** - * sprintf and vsprintf for jQuery - * somewhat based on http://jan.moesen.nu/code/javascript/sprintf-and-printf-in-javascript/ - * - * Copyright (c) 2008 Sabin Iacob (m0n5t3r) - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * @license http://www.gnu.org/licenses/gpl.html - * @project jquery.sprintf - */ -(function($){ - var formats = { - '%': function(val) {return '%';}, - 'b': function(val) {return parseInt(val, 10).toString(2);}, - 'c': function(val) {return String.fromCharCode(parseInt(val, 10));}, - 'd': function(val) {return parseInt(val, 10) ? parseInt(val, 10) : 0;}, - 'u': function(val) {return Math.abs(val);}, - 'f': function(val, p) {return (p > -1) ? Math.round(parseFloat(val) * Math.pow(10, p)) / Math.pow(10, p): parseFloat(val);}, - 'o': function(val) {return parseInt(val, 10).toString(8);}, - 's': function(val) {return val;}, - 'x': function(val) {return ('' + parseInt(val, 10).toString(16)).toLowerCase();}, - 'X': function(val) {return ('' + parseInt(val, 10).toString(16)).toUpperCase();} - }; - var re = /%(?:(\d+)?(?:\.(\d+))?|\(([^)]+)\))([%bcdufosxX])/g; - - var dispatch = function(data){ - if(data.length == 1 && typeof data[0] == 'object') { //python-style printf - data = data[0]; - return function(match, w, p, lbl, fmt, off, str) { - return formats[fmt](data[lbl]); - }; - } else { // regular, somewhat incomplete, printf - var idx = 0; // oh, the beauty of closures :D - return function(match, w, p, lbl, fmt, off, str) { - return formats[fmt](data[idx++], p); - }; - } - }; - - $.extend({ - sprintf: function(format) { - var argv = Array.apply(null, arguments).slice(1); - return format.replace(re, dispatch(argv)); - }, - vsprintf: function(format, data) { - return format.replace(re, dispatch(data)); - } - }); -})(jQuery); --- a/owa/modules/base/js/includes/jquery/spy.js +++ /dev/null @@ -1,169 +1,1 @@ -/* - jQuery Plugin spy (leftlogic.com/info/articles/jquery_spy2) - (c) 2006 Remy Sharp (leftlogic.com) - $Id: spy.js,v 1.4 2006/09/30 11:05:04 remy Exp $ -*/ -var spyRunning = 1; -$.fn.spy = function(settings) { - var spy = this; - spy.epoch = new Date(1970, 0, 1); - spy.last = ''; - spy.parsing = 0; - spy.waitTimer = 0; - spy.json = null; - - if (!settings.ajax) { - alert("An AJAX/AJAH URL must be set for the spy to work."); - return; - } - - spy.attachHolder = function() { - // not mad on this, but the only way to parse HTML collections - if (o.method == 'html') - $('body').append('
                      '); - } - - // returns true for 'no dupe', and false for 'dupe found' - // latest = is latest ajax return value (raw) - // last = is previous ajax return value (raw) - // note that comparing latest and last if they're JSON objects - // always returns false, so you need to implement it manually. - spy.isDupe = function(latest, last) { - if ((last.constructor == Object) && (o.method == 'html')) - return (latest.html() == last.html()); - else if (last.constructor == String) - return (latest == last); - else - return 0; - } - - spy.timestamp = function() { - var now = new Date(); - return Math.floor((now - spy.epoch) / 1000); - } - - spy.parse = function(e, r) { - spy.parsing = 1; // flag to stop pull via ajax - if (o.method == 'html') { - $('div#_spyTmp').html(r); // add contents to hidden div - } else if (o.method == 'json') { - eval('spy.json = ' + r); // convert text to json - } - - if ((o.method == 'json' && spy.json.constructor == Array) || o.method == 'html') { - if (spy.parseItem(e)) { - spy.waitTimer = window.setInterval(function() { - if (spyRunning) { - if (!spy.parseItem(e)) { - spy.parsing = 0; - clearInterval(spy.waitTimer); - } - } - }, o.timeout); - } else { - spy.parsing = 0; - } - } else if (o.method == 'json') { // we just have 1 - eval('spy.json = ' + r) - spy.addItem(e, spy.json); - spy.parsing = 0; - } - } - - // returns true if there's more to parse - spy.parseItem = function(e) { - if (o.method == 'html') { - // note: pre jq-1.0 doesn't return the object - var i = $('div#_spyTmp').find('div:first').remove(); - if (i.size() > 0) { - i.hide(); - spy.addItem(e, i); - } - return ($('div#_spyTmp').find('div').size() != 0); - } else { - if (spy.json.length) { - var i = spy.json.shift(); - spy.addItem(e, i); - } - - return (spy.json.length != 0); - } - } - - spy.addItem = function(e, i) { - if (! o.isDupe.call(this, i, spy.last)) { - spy.last = i; // note i is a pointer - so when it gets modified, so does spy.last - $('#' + e.id + ' > div:gt(' + (o.limit - 2) + ')').remove(); - $('#' + e.id + ' > div:gt(' + (o.limit - o.fadeLast - 2) + ')').fadeEachDown(); - o.push.call(e, i); - $('#' + e.id + ' > div:first').fadeIn(o.fadeInSpeed); - } - } - - spy.push = function(r) { - $('#' + this.id).prepend(r); - } - - var o = { - limit: (settings.limit || 10), - fadeLast: (settings.fadeLast || 5), - ajax: settings.ajax, - timeout: (settings.timeout || 3000), - method: (settings.method || 'html').toLowerCase(), - push: (settings.push || spy.push), - fadeInSpeed: (settings.fadeInSpeed || 'slow'), // 1400 = crawl - timestamp: (settings.timestamp || spy.timestamp), - isDupe: (settings.isDupe || spy.isDupe) - }; - - spy.attachHolder(); - - return this.each(function() { - var e = this; - var timestamp = o.timestamp.call(); - var lr = ''; // last ajax return - - spy.ajaxTimer = window.setInterval(function() { - if (spyRunning && (!spy.parsing)) { - $.get(o.ajax, owa_getData() - , function(r) { - spy.parse(e, r); - }); - timestamp = o.timestamp.call(); - } else { - - var d = new Date(); - timestamp = Math.round(d.getTime() / 1000); - - } - }, o.timeout); - }); -}; - -$.fn.fadeEachDown = function() { - var s = this.size(); - return this.each(function(i) { - var o = 1 - (s == 1 ? 0.5 : 0.85/s*(i+1)); - var e = this.style; - if (window.ActiveXObject) - e.filter = "alpha(opacity=" + o*100 + ")"; - e.opacity = o; - }); -}; - -function pauseSpy() { - spyRunning = 0; - var temp_time; - last_end_time = temp_time; - $('div#_spyTmp').html(""); - $('div#spyContainer').prepend('
                      The spy has been paused...
                      '); - - return false; -} - -function playSpy() { - spyRunning = 1; - $('div#spyContainer').prepend('
                      The spy has been re-started...
                      '); - return false; -} --- a/owa/modules/base/js/includes/jquery/ui/i18n/ui.datepicker-ar.js +++ /dev/null @@ -1,23 +1,1 @@ -/* Arabic Translation for jQuery UI date picker plugin. */ -/* Khaled Al Horani -- koko.dw@gmail.com */ -/* خالد الحوراني -- koko.dw@gmail.com */ -/* NOTE: monthNames are the original months names and thez are the Arabic names, not the new months name Ùبراير - يناير and there isnät any Arabic roots for these months */ -jQuery(function($){ - $.datepicker.regional['ar'] = { - clearText: 'مسح', clearStatus: 'امسح التاريخ الحالي', - closeText: 'إغلاق', closeStatus: 'إغلاق بدون Ø­Ùظ', - prevText: '<السابق', prevStatus: 'عرض الشهر السابق', - nextText: 'التالي>', nextStatus: 'عرض الشهر القادم', - currentText: 'اليوم', currentStatus: 'عرض الشهر الحالي', - monthNames: ['كانون الثاني', 'شباط', 'آذار', 'نيسان', 'آذار', 'حزيران', 'تموز', 'آب', 'أيلول', 'تشرين الأول', 'تشرين الثاني', 'كانون الأول'], - monthNamesShort: ['1','2','3','4','5','6','7','8','9','10','11','12'], - monthStatus: 'عرض شهر آخر', yearStatus: 'عرض سنة آخرى', - weekHeader: 'أسبوع', weekStatus: 'أسبوع السنة', - dayNames: ['السبت', 'الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة'], - dayNamesShort: ['سبت', 'أحد', 'اثنين', 'ثلاثاء', 'أربعاء', 'خميس', 'جمعة'], - dayNamesMin: ['سبت', 'أحد', 'اثنين', 'ثلاثاء', 'أربعاء', 'خميس', 'جمعة'], - dayStatus: 'اختر DD لليوم الأول من الأسبوع', dateStatus: 'اختر D, M d', - dateFormat: 'dd/mm/yy', firstDay: 0, - initStatus: 'اختر يوم', isRTL: true}; - $.datepicker.setDefaults($.datepicker.regional['ar']); -}); + --- a/owa/modules/base/js/includes/jquery/ui/i18n/ui.datepicker-bg.js +++ /dev/null @@ -1,23 +1,1 @@ -/* Bulgarian initialisation for the jQuery UI date picker plugin. */ -/* Written by Stoyan Kyosev (http://svest.org). */ -jQuery(function($){ - $.datepicker.regional['bg'] = {clearText: 'изчиÑти', clearStatus: 'изчиÑти актуалната дата', - closeText: 'затвори', closeStatus: 'затвори без промени', - prevText: '<назад', prevStatus: 'покажи поÑÐ»ÐµÐ´Ð½Ð¸Ñ Ð¼ÐµÑец', - nextText: 'напред>', nextStatus: 'покажи ÑÐ»ÐµÐ´Ð²Ð°Ñ‰Ð¸Ñ Ð¼ÐµÑец', - currentText: 'днеÑ', currentStatus: '', - monthNames: ['Януари','Февруари','Март','Ðприл','Май','Юни', - 'Юли','ÐвгуÑÑ‚','Септември','Октомври','Ðоември','Декември'], - monthNamesShort: ['Яну','Фев','Мар','Ðпр','Май','Юни', - 'Юли','Ðвг','Сеп','Окт','Ðов','Дек'], - monthStatus: 'покажи друг меÑец', yearStatus: 'покажи друга година', - weekHeader: 'Wk', weekStatus: 'Ñедмица от меÑеца', - dayNames: ['ÐеделÑ','Понеделник','Вторник','СрÑда','Четвъртък','Петък','Събота'], - dayNamesShort: ['Ðед','Пон','Вто','СрÑ','Чет','Пет','Съб'], - dayNamesMin: ['Ðе','По','Ð’Ñ‚','Ср','Че','Пе','Съ'], - dayStatus: 'Сложи DD като първи ден от Ñедмицата', dateStatus: 'Избери D, M d', - dateFormat: 'dd.mm.yy', firstDay: 1, - initStatus: 'Избери дата', isRTL: false}; - $.datepicker.setDefaults($.datepicker.regional['bg']); -}); --- a/owa/modules/base/js/includes/jquery/ui/i18n/ui.datepicker-ca.js +++ /dev/null @@ -1,22 +1,1 @@ -/* Inicialització en català per a l'extenció 'calendar' per jQuery. */ -/* Writers: (joan.leon@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['ca'] = {clearText: 'Netejar', clearStatus: '', - closeText: 'Tancar', closeStatus: '', - prevText: '<Ant', prevStatus: '', - nextText: 'Seg>', nextStatus: '', - currentText: 'Avui', currentStatus: '', - monthNames: ['Gener','Febrer','Març','Abril','Maig','Juny', - 'Juliol','Agost','Setembre','Octubre','Novembre','Desembre'], - monthNamesShort: ['Gen','Feb','Mar','Abr','Mai','Jun', - 'Jul','Ago','Set','Oct','Nov','Des'], - monthStatus: '', yearStatus: '', - weekHeader: 'Sm', weekStatus: '', - dayNames: ['Diumenge','Dilluns','Dimarts','Dimecres','Dijous','Divendres','Dissabte'], - dayNamesShort: ['Dug','Dln','Dmt','Dmc','Djs','Dvn','Dsb'], - dayNamesMin: ['Dg','Dl','Dt','Dc','Dj','Dv','Ds'], - dayStatus: 'DD', dateStatus: 'D, M d', - dateFormat: 'mm/dd/yy', firstDay: 0, - initStatus: '', isRTL: false}; - $.datepicker.setDefaults($.datepicker.regional['ca']); -}); + --- a/owa/modules/base/js/includes/jquery/ui/i18n/ui.datepicker-cs.js +++ /dev/null @@ -1,23 +1,1 @@ -/* Czech initialisation for the jQuery UI date picker plugin. */ -/* Written by Tomas Muller (tomas@tomas-muller.net). */ -jQuery(function($){ - $.datepicker.regional['cs'] = {clearText: 'Vymazat', clearStatus: 'Vymaže zadané datum', - closeText: 'Zavřít', closeStatus: 'ZavÅ™e kalendář beze zmÄ›ny', - prevText: '<Dříve', prevStatus: 'PÅ™ejít na pÅ™edchozí mÄ›sí', - nextText: 'PozdÄ›ji>', nextStatus: 'PÅ™ejít na další mÄ›síc', - currentText: 'Nyní', currentStatus: 'PÅ™ejde na aktuální mÄ›síc', - monthNames: ['leden','únor','bÅ™ezen','duben','kvÄ›ten','Äerven', - 'Äervenec','srpen','září','říjen','listopad','prosinec'], - monthNamesShort: ['led','úno','bÅ™e','dub','kvÄ›','Äer', - 'Ävc','srp','zář','říj','lis','pro'], - monthStatus: 'PÅ™ejít na jiný mÄ›síc', yearStatus: 'PÅ™ejít na jiný rok', - weekHeader: 'Týd', weekStatus: 'Týden v roce', - dayNames: ['nedÄ›le', 'pondÄ›lí', 'úterý', 'stÅ™eda', 'Ätvrtek', 'pátek', 'sobota'], - dayNamesShort: ['ne', 'po', 'út', 'st', 'Ät', 'pá', 'so'], - dayNamesMin: ['ne','po','út','st','Ät','pá','so'], - dayStatus: 'Nastavit DD jako první den v týdnu', dateStatus: '\'Vyber\' DD, M d', - dateFormat: 'dd.mm.yy', firstDay: 1, - initStatus: 'Vyberte datum', isRTL: false}; - $.datepicker.setDefaults($.datepicker.regional['cs']); -}); --- a/owa/modules/base/js/includes/jquery/ui/i18n/ui.datepicker-da.js +++ /dev/null @@ -1,23 +1,1 @@ -/* Danish initialisation for the jQuery UI date picker plugin. */ -/* Written by Jan Christensen ( deletestuff@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['da'] = {clearText: 'Nulstil', clearStatus: 'Nulstil den aktuelle dato', - closeText: 'Luk', closeStatus: 'Luk uden ændringer', - prevText: '<Forrige', prevStatus: 'Vis forrige mÃ¥ned', - nextText: 'Næste>', nextStatus: 'Vis næste mÃ¥ned', - currentText: 'Idag', currentStatus: 'Vis aktuel mÃ¥ned', - monthNames: ['Januar','Februar','Marts','April','Maj','Juni', - 'Juli','August','September','Oktober','November','December'], - monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', - 'Jul','Aug','Sep','Okt','Nov','Dec'], - monthStatus: 'Vis en anden mÃ¥ned', yearStatus: 'Vis et andet Ã¥r', - weekHeader: 'Uge', weekStatus: 'Ã…rets uge', - dayNames: ['Søndag','Mandag','Tirsdag','Onsdag','Torsdag','Fredag','Lørdag'], - dayNamesShort: ['Søn','Man','Tir','Ons','Tor','Fre','Lør'], - dayNamesMin: ['Sø','Ma','Ti','On','To','Fr','Lø'], - dayStatus: 'Sæt DD som første ugedag', dateStatus: 'Vælg D, M d', - dateFormat: 'dd-mm-yy', firstDay: 0, - initStatus: 'Vælg en dato', isRTL: false}; - $.datepicker.setDefaults($.datepicker.regional['da']); -}); --- a/owa/modules/base/js/includes/jquery/ui/i18n/ui.datepicker-de.js +++ /dev/null @@ -1,23 +1,1 @@ -/* German initialisation for the jQuery UI date picker plugin. */ -/* Written by Milian Wolff (mail@milianw.de). */ -jQuery(function($){ - $.datepicker.regional['de'] = {clearText: 'löschen', clearStatus: 'aktuelles Datum löschen', - closeText: 'schließen', closeStatus: 'ohne Änderungen schließen', - prevText: '<zurück', prevStatus: 'letzten Monat zeigen', - nextText: 'Vor>', nextStatus: 'nächsten Monat zeigen', - currentText: 'heute', currentStatus: '', - monthNames: ['Januar','Februar','März','April','Mai','Juni', - 'Juli','August','September','Oktober','November','Dezember'], - monthNamesShort: ['Jan','Feb','Mär','Apr','Mai','Jun', - 'Jul','Aug','Sep','Okt','Nov','Dez'], - monthStatus: 'anderen Monat anzeigen', yearStatus: 'anderes Jahr anzeigen', - weekHeader: 'Wo', weekStatus: 'Woche des Monats', - dayNames: ['Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag'], - dayNamesShort: ['So','Mo','Di','Mi','Do','Fr','Sa'], - dayNamesMin: ['So','Mo','Di','Mi','Do','Fr','Sa'], - dayStatus: 'Setze DD als ersten Wochentag', dateStatus: 'Wähle D, M d', - dateFormat: 'dd.mm.yy', firstDay: 1, - initStatus: 'Wähle ein Datum', isRTL: false}; - $.datepicker.setDefaults($.datepicker.regional['de']); -}); --- a/owa/modules/base/js/includes/jquery/ui/i18n/ui.datepicker-es.js +++ /dev/null @@ -1,22 +1,1 @@ -/* Inicialización en español para la extensión 'UI date picker' para jQuery. */ -/* Traducido por Vester (xvester@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['es'] = {clearText: 'Limpiar', clearStatus: '', - closeText: 'Cerrar', closeStatus: '', - prevText: '<Ant', prevStatus: '', - nextText: 'Sig>', nextStatus: '', - currentText: 'Hoy', currentStatus: '', - monthNames: ['Enero','Febrero','Marzo','Abril','Mayo','Junio', - 'Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'], - monthNamesShort: ['Ene','Feb','Mar','Abr','May','Jun', - 'Jul','Ago','Sep','Oct','Nov','Dic'], - monthStatus: '', yearStatus: '', - weekHeader: 'Sm', weekStatus: '', - dayNames: ['Domingo','Lunes','Martes','Miércoles','Jueves','Viernes','Sádabo'], - dayNamesShort: ['Dom','Lun','Mar','Mié','Juv','Vie','Sáb'], - dayNamesMin: ['Do','Lu','Ma','Mi','Ju','Vi','Sá'], - dayStatus: 'DD', dateStatus: 'D, M d', - dateFormat: 'dd/mm/yy', firstDay: 0, - initStatus: '', isRTL: false}; - $.datepicker.setDefaults($.datepicker.regional['es']); -}); + --- a/owa/modules/base/js/includes/jquery/ui/i18n/ui.datepicker-fi.js +++ /dev/null @@ -1,25 +1,1 @@ -/* Finnish initialisation for the jQuery UI date picker plugin. */ -/* Written by Harri Kilpiö (harrikilpio@gmail.com). */ -$(document).ready(function(){ - $.datepicker.regional['fi'] = { - clearText: 'Tyhjennä', clearStatus: '', - closeText: 'Sulje', closeStatus: '', - prevText: '«Edellinen', prevStatus: '', - nextText: 'Seuraava»', nextStatus: '', - currentText: 'Tänään', currentStatus: '', - monthNames: ['Tammikuu','Helmikuu','Maaliskuu','Huhtikuu','Toukokuu','Kesäkuu', - 'Heinäkuu','Elokuu','Syyskuu','Lokakuu','Marraskuu','Joulukuu'], - monthNamesShort: ['Tammi','Helmi','Maalis','Huhti','Touko','Kesä', - 'Heinä','Elo','Syys','Loka','Marras','Joulu'], - monthStatus: '', yearStatus: '', - weekHeader: 'Vk', weekStatus: '', - dayNamesShort: ['Su','Ma','Ti','Ke','To','Pe','Su'], - dayNames: ['Sunnuntai','Maanantai','Tiistai','Keskiviikko','Torstai','Perjantai','Lauantai'], - dayNamesMin: ['Su','Ma','Ti','Ke','To','Pe','La'], - dayStatus: 'DD', dateStatus: 'D, M d', - dateFormat: 'dd.mm.yy', firstDay: 1, - initStatus: '', isRTL: false}; - $.datepicker.setDefaults($.datepicker.regional['fi']); -}); - --- a/owa/modules/base/js/includes/jquery/ui/i18n/ui.datepicker-fr.js +++ /dev/null @@ -1,22 +1,1 @@ -/* French initialisation for the jQuery UI date picker plugin. */ -/* Written by Keith Wood (kbwood@virginbroadband.com.au) and Stéphane Nahmani (sholby@sholby.net). */ -jQuery(function($){ - $.datepicker.regional['fr'] = {clearText: 'Effacer', clearStatus: '', - closeText: 'Fermer', closeStatus: 'Fermer sans modifier', - prevText: '<Préc', prevStatus: 'Voir le mois précédent', - nextText: 'Suiv>', nextStatus: 'Voir le mois suivant', - currentText: 'Courant', currentStatus: 'Voir le mois courant', - monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin', - 'Juillet','Août','Septembre','Octobre','Novembre','Décembre'], - monthNamesShort: ['Jan','Fév','Mar','Avr','Mai','Jun', - 'Jul','Aoû','Sep','Oct','Nov','Déc'], - monthStatus: 'Voir un autre mois', yearStatus: 'Voir un autre année', - weekHeader: 'Sm', weekStatus: '', - dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'], - dayNamesShort: ['Dim','Lun','Mar','Mer','Jeu','Ven','Sam'], - dayNamesMin: ['Di','Lu','Ma','Me','Je','Ve','Sa'], - dayStatus: 'Utiliser DD comme premier jour de la semaine', dateStatus: 'Choisir le DD, MM d', - dateFormat: 'dd/mm/yy', firstDay: 0, - initStatus: 'Choisir la date', isRTL: false}; - $.datepicker.setDefaults($.datepicker.regional['fr']); -}); + --- a/owa/modules/base/js/includes/jquery/ui/i18n/ui.datepicker-he.js +++ /dev/null @@ -1,23 +1,1 @@ -/* Hebrew initialisation for the UI Datepicker extension. */ -/* Written by Amir Hardon (ahardon at gmail dot com). */ -jQuery(document).ready(function(){ - jQuery.datepicker.regional['he'] = {clearText: 'נקה', clearStatus: '', - closeText: 'סגור', closeStatus: '', - prevText: '<הקוד×', prevStatus: '', - nextText: 'הב×>', nextStatus: '', - currentText: 'היו×', currentStatus: '', - monthNames: ['ינו×ר','פברו×ר','מרץ','×פריל','מ××™','יוני', - 'יולי','×וגוסט','ספטמבר','×וקטובר','נובמבר','דצמבר'], - monthNamesShort: ['1','2','3','4','5','6', - '7','8','9','10','11','12'], - monthStatus: '', yearStatus: '', - weekHeader: 'Sm', weekStatus: '', - dayNames: ['ר×שון','שני','שלישי','רביעי','חמישי','שישי','שבת'], - dayNamesShort: ['×\'','ב\'','×’\'','ד\'','×”\'','ו\'','שבת'], - dayNamesMin: ['×\'','ב\'','×’\'','ד\'','×”\'','ו\'','שבת'], - dayStatus: 'DD', dateStatus: 'DD, M d', - dateFormat: 'dd/mm/yy', firstDay: 0, - initStatus: '', isRTL: true}; - jQuery.datepicker.setDefaults($.datepicker.regional['he']); -}); --- a/owa/modules/base/js/includes/jquery/ui/i18n/ui.datepicker-hu.js +++ /dev/null @@ -1,23 +1,1 @@ -/* Hungarian initialisation for the jQuery UI date picker plugin. */ -/* Written by Istvan Karaszi (jquerycalendar@spam.raszi.hu). */ -jQuery(function($){ - $.datepicker.regional['hu'] = {clearText: 'törlés', clearStatus: '', - closeText: 'bezárás', closeStatus: '', - prevText: '« vissza', prevStatus: '', - nextText: 'elÅ‘re »', nextStatus: '', - currentText: 'ma', currentStatus: '', - monthNames: ['Január', 'Február', 'Március', 'Ãprilis', 'Május', 'Június', - 'Július', 'Augusztus', 'Szeptember', 'Október', 'November', 'December'], - monthNamesShort: ['Jan', 'Feb', 'Már', 'Ãpr', 'Máj', 'Jún', - 'Júl', 'Aug', 'Szep', 'Okt', 'Nov', 'Dec'], - monthStatus: '', yearStatus: '', - weekHeader: 'Hé', weekStatus: '', - dayNames: ['Vasámap', 'Hétfö', 'Kedd', 'Szerda', 'Csütörtök', 'Péntek', 'Szombat'], - dayNamesShort: ['Vas', 'Hét', 'Ked', 'Sze', 'Csü', 'Pén', 'Szo'], - dayNamesMin: ['V', 'H', 'K', 'Sze', 'Cs', 'P', 'Szo'], - dayStatus: 'DD', dateStatus: 'D, M d', - dateFormat: 'yy-mm-dd', firstDay: 1, - initStatus: '', isRTL: false}; - $.datepicker.setDefaults($.datepicker.regional['hu']); -}); --- a/owa/modules/base/js/includes/jquery/ui/i18n/ui.datepicker-hy.js +++ /dev/null @@ -1,22 +1,1 @@ -/* Armenian(UTF-8) initialisation for the jQuery UI date picker plugin. */ -/* Written by Levon Zakaryan (levon.zakaryan@gmail.com)*/ -jQuery(function($){ - $.datepicker.regional['hy'] = {clearText: 'Õ„Õ¡Ö„Ö€Õ¥Õ¬', clearStatus: '', - closeText: 'Õ“Õ¡Õ¯Õ¥Õ¬', closeStatus: '', - prevText: '<Õ†Õ¡Õ­.', prevStatus: '', - nextText: 'Õ€Õ¡Õ».>', nextStatus: '', - currentText: 'Ô±ÕµÕ½Ö…Ö€', currentStatus: '', - monthNames: ['Õ€Õ¸Ö‚Õ¶Õ¾Õ¡Ö€','Õ“Õ¥Õ¿Ö€Õ¾Õ¡Ö€','Õ„Õ¡Ö€Õ¿','Ô±ÕºÖ€Õ«Õ¬','Õ„Õ¡ÕµÕ«Õ½','Õ€Õ¸Ö‚Õ¶Õ«Õ½', - 'Õ€Õ¸Ö‚Õ¬Õ«Õ½','Õ•Õ£Õ¸Õ½Õ¿Õ¸Õ½','ÕÕ¥ÕºÕ¿Õ¥Õ´Õ¢Õ¥Ö€','Õ€Õ¸Õ¯Õ¿Õ¥Õ´Õ¢Õ¥Ö€','Õ†Õ¸ÕµÕ¥Õ´Õ¢Õ¥Ö€','Ô´Õ¥Õ¯Õ¿Õ¥Õ´Õ¢Õ¥Ö€'], - monthNamesShort: ['Õ€Õ¸Ö‚Õ¶Õ¾','Õ“Õ¥Õ¿Ö€','Õ„Õ¡Ö€Õ¿','Ô±ÕºÖ€','Õ„Õ¡ÕµÕ«Õ½','Õ€Õ¸Ö‚Õ¶Õ«Õ½', - 'Õ€Õ¸Ö‚Õ¬','Õ•Õ£Õ½','ÕÕ¥Õº','Õ€Õ¸Õ¯','Õ†Õ¸Õµ','Ô´Õ¥Õ¯'], - monthStatus: '', yearStatus: '', - weekHeader: 'Õ‡Ô²Õ', weekStatus: '', - dayNames: ['Õ¯Õ«Ö€Õ¡Õ¯Õ«','Õ¥Õ¯Õ¸Ö‚Õ·Õ¡Õ¢Õ©Õ«','Õ¥Ö€Õ¥Ö„Õ·Õ¡Õ¢Õ©Õ«','Õ¹Õ¸Ö€Õ¥Ö„Õ·Õ¡Õ¢Õ©Õ«','Õ°Õ«Õ¶Õ£Õ·Õ¡Õ¢Õ©Õ«','Õ¸Ö‚Ö€Õ¢Õ¡Õ©','Õ·Õ¡Õ¢Õ¡Õ©'], - dayNamesShort: ['Õ¯Õ«Ö€','Õ¥Ö€Õ¯','Õ¥Ö€Ö„','Õ¹Ö€Ö„','Õ°Õ¶Õ£','Õ¸Ö‚Ö€Õ¢','Õ·Õ¢Õ©'], - dayNamesMin: ['Õ¯Õ«Ö€','Õ¥Ö€Õ¯','Õ¥Ö€Ö„','Õ¹Ö€Ö„','Õ°Õ¶Õ£','Õ¸Ö‚Ö€Õ¢','Õ·Õ¢Õ©'], - dayStatus: 'DD', dateStatus: 'D, M d', - dateFormat: 'dd.mm.yy', firstDay: 1, - initStatus: '', isRTL: false}; - $.datepicker.setDefaults($.datepicker.regional['hy']); -}); + --- a/owa/modules/base/js/includes/jquery/ui/i18n/ui.datepicker-id.js +++ /dev/null @@ -1,22 +1,1 @@ -/* Indonesian initialisation for the jQuery UI date picker plugin. */ -/* Written by Deden Fathurahman (dedenf@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['id'] = {clearText: 'kosongkan', clearStatus: 'bersihkan tanggal yang sekarang', - closeText: 'Tutup', closeStatus: 'Tutup tanpa mengubah', - prevText: '<mundur', prevStatus: 'Tampilkan bulan sebelumnya', - nextText: 'maju>', nextStatus: 'Tampilkan bulan berikutnya', - currentText: 'hari ini', currentStatus: 'Tampilkan bulan sekarang', - monthNames: ['Januari','Februari','Maret','April','Mei','Juni', - 'Juli','Agustus','September','Oktober','Nopember','Desember'], - monthNamesShort: ['Jan','Feb','Mar','Apr','Mei','Jun', - 'Jul','Agus','Sep','Okt','Nop','Des'], - monthStatus: 'Tampilkan bulan yang berbeda', yearStatus: 'Tampilkan tahun yang berbeda', - weekHeader: 'Mg', weekStatus: 'Minggu dalam tahun', - dayNames: ['Minggu','Senin','Selasa','Rabu','Kamis','Jumat','Sabtu'], - dayNamesShort: ['Min','Sen','Sel','Rab','kam','Jum','Sab'], - dayNamesMin: ['Mg','Sn','Sl','Rb','Km','jm','Sb'], - dayStatus: 'gunakan DD sebagai awal hari dalam minggu', dateStatus: 'pilih le DD, MM d', - dateFormat: 'dd/mm/yy', firstDay: 0, - initStatus: 'Pilih Tanggal', isRTL: false}; - $.datepicker.setDefaults($.datepicker.regional['id']); -}); + --- a/owa/modules/base/js/includes/jquery/ui/i18n/ui.datepicker-is.js +++ /dev/null @@ -1,22 +1,1 @@ -/* Icelandic initialisation for the jQuery UI date picker plugin. */ -/* Written by Haukur H. Thorsson (haukur@eskill.is). */ -jQuery(function($){ - $.datepicker.regional['is'] = {clearText: 'Hreinsa', clearStatus: '', - closeText: 'Loka', closeStatus: '', - prevText: '< Fyrri', prevStatus: '', - nextText: 'Næsti >', nextStatus: '', - currentText: 'Í dag', currentStatus: '', - monthNames: ['Janúar','Febrúar','Mars','Apríl','Maí','Júní', - 'Júlí','Ágúst','September','Október','Nóvember','Desember'], - monthNamesShort: ['Jan','Feb','Mar','Apr','Maí','Jún', - 'Júl','Ágú','Sep','Okt','Nóv','Des'], - monthStatus: '', yearStatus: '', - weekHeader: 'Vika', weekStatus: '', - dayNames: ['Sunnudagur','Mánudagur','Þriðjudagur','Miðvikudagur','Fimmtudagur','Föstudagur','Laugardagur'], - dayNamesShort: ['Sun','Mán','Þri','Mið','Fim','Fös','Lau'], - dayNamesMin: ['Su','Má','Þr','Mi','Fi','Fö','La'], - dayStatus: 'DD', dateStatus: 'D, M d', - dateFormat: 'dd/mm/yy', firstDay: 0, - initStatus: '', isRTL: false}; - $.datepicker.setDefaults($.datepicker.regional['is']); -}); + --- a/owa/modules/base/js/includes/jquery/ui/i18n/ui.datepicker-it.js +++ /dev/null @@ -1,23 +1,1 @@ -/* Italian initialisation for the jQuery UI date picker plugin. */ -/* Written by Apaella (apaella@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['it'] = {clearText: 'Svuota', clearStatus: '', - closeText: 'Chiudi', closeStatus: '', - prevText: '<Prec', prevStatus: '', - nextText: 'Succ>', nextStatus: '', - currentText: 'Oggi', currentStatus: '', - monthNames: ['Gennaio','Febbraio','Marzo','Aprile','Maggio','Giugno', - 'Luglio','Agosto','Settembre','Ottobre','Novembre','Dicembre'], - monthNamesShort: ['Gen','Feb','Mar','Apr','Mag','Giu', - 'Lug','Ago','Set','Ott','Nov','Dic'], - monthStatus: '', yearStatus: '', - weekHeader: 'Sm', weekStatus: '', - dayNames: ['Domenica','Lunedì','Martedì','Mercoledì','Giovedì','Venerdì','Sabato'], - dayNamesShort: ['Dom','Lun','Mar','Mer','Gio','Ven','Sab'], - dayNamesMin: ['Do','Lu','Ma','Me','Gio','Ve','Sa'], - dayStatus: 'DD', dateStatus: 'D, M d', - dateFormat: 'dd/mm/yy', firstDay: 1, - initStatus: '', isRTL: false}; - $.datepicker.setDefaults($.datepicker.regional['it']); -}); --- a/owa/modules/base/js/includes/jquery/ui/i18n/ui.datepicker-ja.js +++ /dev/null @@ -1,22 +1,1 @@ -/* Japanese (UTF-8) initialisation for the jQuery UI date picker plugin. */ -/* Written by Milly. */ -jQuery(function($){ - $.datepicker.regional['ja'] = {clearText: '削除', clearStatus: '', - closeText: '閉じる', closeStatus: '', - prevText: '<前月', prevStatus: '', - nextText: '次月>', nextStatus: '', - currentText: '今日', currentStatus: '', - monthNames: ['1月','2月','3月','4月','5月','6月', - '7月','8月','9月','10月','11月','12月'], - monthNamesShort: ['1月','2月','3月','4月','5月','6月', - '7月','8月','9月','10月','11月','12月'], - monthStatus: '', yearStatus: '', - weekHeader: 'Wk', weekStatus: '', - dayNames: ['日','月','火','水','木','金','土'], - dayNamesShort: ['日','月','火','水','木','金','土'], - dayNamesMin: ['日','月','火','水','木','金','土'], - dayStatus: 'DD', dateStatus: 'D, M d', - dateFormat: 'yy/mm/dd', firstDay: 0, - initStatus: '', isRTL: false}; - $.datepicker.setDefaults($.datepicker.regional['ja']); -}); + --- a/owa/modules/base/js/includes/jquery/ui/i18n/ui.datepicker-ko.js +++ /dev/null @@ -1,22 +1,1 @@ -/* Korean initialisation for the jQuery calendar extension. */ -/* Written by DaeKwon Kang (ncrash.dk@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['ko'] = {clearText: '지우기', clearStatus: '', - closeText: '닫기', closeStatus: '', - prevText: 'ì´ì „달', prevStatus: '', - nextText: '다ìŒë‹¬', nextStatus: '', - currentText: '오늘', currentStatus: '', - monthNames: ['1ì›”(JAN)','2ì›”(FEB)','3ì›”(MAR)','4ì›”(APR)','5ì›”(MAY)','6ì›”(JUN)', - '7ì›”(JUL)','8ì›”(AUG)','9ì›”(SEP)','10ì›”(OCT)','11ì›”(NOV)','12ì›”(DEC)'], - monthNamesShort: ['1ì›”(JAN)','2ì›”(FEB)','3ì›”(MAR)','4ì›”(APR)','5ì›”(MAY)','6ì›”(JUN)', - '7ì›”(JUL)','8ì›”(AUG)','9ì›”(SEP)','10ì›”(OCT)','11ì›”(NOV)','12ì›”(DEC)'], - monthStatus: '', yearStatus: '', - weekHeader: 'Wk', weekStatus: '', - dayNames: ['ì¼','ì›”','í™”','수','목','금','토'], - dayNamesShort: ['ì¼','ì›”','í™”','수','목','금','토'], - dayNamesMin: ['ì¼','ì›”','í™”','수','목','금','토'], - dayStatus: 'DD', dateStatus: 'D, M d', - dateFormat: 'yy-mm-dd', firstDay: 0, - initStatus: '', isRTL: false}; - $.datepicker.setDefaults($.datepicker.regional['ko']); -}); + --- a/owa/modules/base/js/includes/jquery/ui/i18n/ui.datepicker-lt.js +++ /dev/null @@ -1,25 +1,1 @@ -/** - * Lithuanian (UTF-8) initialisation for the jQuery UI date picker plugin. - * - * @author Arturas Paleicikas - */ -jQuery(function($){ - $.datepicker.regional['lt'] = {clearText: 'IÅ¡valyti', clearStatus: '', - closeText: 'Uždaryti', closeStatus: '', - prevText: '<Atgal', prevStatus: '', - nextText: 'Pirmyn>', nextStatus: '', - currentText: 'Å iandien', currentStatus: '', - monthNames: ['Sausis','Vasaris','Kovas','Balandis','Gegužė','Birželis', - 'Liepa','RugpjÅ«tis','RugsÄ—jis','Spalis','Lapkritis','Gruodis'], - monthNamesShort: ['Sau','Vas','Kov','Bal','Geg','Bir', - 'Lie','Rugp','Rugs','Spa','Lap','Gru'], - monthStatus: '', yearStatus: '', - weekHeader: '', weekStatus: '', - dayNames: ['sekmadienis','pirmadienis','antradienis','treÄiadienis','ketvirtadienis','penktadienis','Å¡eÅ¡tadienis'], - dayNamesShort: ['sek','pir','ant','tre','ket','pen','Å¡eÅ¡'], - dayNamesMin: ['Se','Pr','An','Tr','Ke','Pe','Å e'], - dayStatus: 'DD', dateStatus: 'D, M d', - dateFormat: 'yy-mm-dd', firstDay: 1, - initStatus: '', isRTL: false}; - $.datepicker.setDefaults($.datepicker.regional['lt']); -}); + --- a/owa/modules/base/js/includes/jquery/ui/i18n/ui.datepicker-lv.js +++ /dev/null @@ -1,25 +1,1 @@ -/** - * Latvian (UTF-8) initialisation for the jQuery UI date picker plugin. - * @author Arturas Paleicikas - */ -jQuery(function($){ - $.datepicker.regional['lv'] = { - clearText: 'NotÄ«rÄ«t', clearStatus: '', - closeText: 'AizvÄ“rt', closeStatus: '', - prevText: 'Iepr', prevStatus: '', - nextText: 'NÄka', nextStatus: '', - currentText: 'Å odien', currentStatus: '', - monthNames: ['JanvÄris','FebruÄris','Marts','AprÄ«lis','Maijs','JÅ«nijs', - 'JÅ«lijs','Augusts','Septembris','Oktobris','Novembris','Decembris'], - monthNamesShort: ['Jan','Feb','Mar','Apr','Mai','JÅ«n', - 'JÅ«l','Aug','Sep','Okt','Nov','Dec'], - monthStatus: '', yearStatus: '', - weekHeader: 'Nav', weekStatus: '', - dayNames: ['svÄ“tdiena','pirmdiena','otrdiena','treÅ¡diena','ceturtdiena','piektdiena','sestdiena'], - dayNamesShort: ['svt','prm','otr','tre','ctr','pkt','sst'], - dayNamesMin: ['Sv','Pr','Ot','Tr','Ct','Pk','Ss'], - dayStatus: 'DD', dateStatus: 'D, M d', - dateFormat: 'dd-mm-yy', firstDay: 1, - initStatus: '', isRTL: false}; - $.datepicker.setDefaults($.datepicker.regional['lv']); -}); + --- a/owa/modules/base/js/includes/jquery/ui/i18n/ui.datepicker-nl.js +++ /dev/null @@ -1,21 +1,1 @@ -/* Dutch (UTF-8) initialisation for the jQuery UI date picker plugin. */ -jQuery(function($){ - $.datepicker.regional['nl'] = {clearText: 'Wissen', clearStatus: 'Wis de huidige datum', - closeText: 'Sluiten', closeStatus: 'Sluit zonder verandering', - prevText: '<Terug', prevStatus: 'Laat de voorgaande maand zien', - nextText: 'Volgende>', nextStatus: 'Laat de volgende maand zien', - currentText: 'Vandaag', currentStatus: 'Laat de huidige maand zien', - monthNames: ['Januari','Februari','Maart','April','Mei','Juni', - 'Juli','Augustus','September','Oktober','November','December'], - monthNamesShort: ['Jan','Feb','Mrt','Apr','Mei','Jun', - 'Jul','Aug','Sep','Okt','Nov','Dec'], - monthStatus: 'Laat een andere maand zien', yearStatus: 'Laat een ander jaar zien', - weekHeader: 'Wk', weekStatus: 'Week van het jaar', - dayNames: ['Zondag','Maandag','Dinsdag','Woensdag','Donderdag','Vrijdag','Zaterdag'], - dayNamesShort: ['Zon','Maa','Din','Woe','Don','Vri','Zat'], - dayNamesMin: ['Zo','Ma','Di','Wo','Do','Vr','Za'], - dayStatus: 'DD', dateStatus: 'D, M d', - dateFormat: 'dd.mm.yy', firstDay: 1, - initStatus: 'Kies een datum', isRTL: false}; - $.datepicker.setDefaults($.datepicker.regional['nl']); -}); + --- a/owa/modules/base/js/includes/jquery/ui/i18n/ui.datepicker-no.js +++ /dev/null @@ -1,24 +1,1 @@ -/* Norwegian initialisation for the jQuery UI date picker plugin. */ -/* Written by Naimdjon Takhirov (naimdjon@gmail.com). */ -$(document).ready(function(){ - $.datepicker.regional['no'] = {clearText: 'Tøm', clearStatus: '', - closeText: 'Lukk', closeStatus: '', - prevText: '«Forrige', prevStatus: '', - nextText: 'Neste»', nextStatus: '', - currentText: 'I dag', currentStatus: '', - monthNames: ['Januar','Februar','Mars','April','Mai','Juni', - 'Juli','August','September','Oktober','November','Desember'], - monthNamesShort: ['Jan','Feb','Mar','Apr','Mai','Jun', - 'Jul','Aug','Sep','Okt','Nov','Des'], - monthStatus: '', yearStatus: '', - weekHeader: 'Uke', weekStatus: '', - dayNamesShort: ['Søn','Man','Tir','Ons','Tor','Fre','Lør'], - dayNames: ['Søndag','Mandag','Tirsdag','Onsdag','Torsdag','Fredag','Lørdag'], - dayNamesMin: ['Sø','Ma','Ti','On','To','Fr','Lø'], - dayStatus: 'DD', dateStatus: 'D, M d', - dateFormat: 'yy-mm-dd', firstDay: 0, - initStatus: '', isRTL: false}; - $.datepicker.setDefaults($.datepicker.regional['no']); -}); - --- a/owa/modules/base/js/includes/jquery/ui/i18n/ui.datepicker-pl.js +++ /dev/null @@ -1,23 +1,1 @@ -/* Polish initialisation for the jQuery UI date picker plugin. */ -/* Written by Jacek Wysocki (jacek.wysocki@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['pl'] = {clearText: 'Wyczyść', clearStatus: 'Wyczyść obecnÄ… datÄ™', - closeText: 'Zamknij', closeStatus: 'Zamknij bez zapisywania', - prevText: '<Poprzedni', prevStatus: 'Pokaż poprzedni miesiÄ…c', - nextText: 'NastÄ™pny>', nextStatus: 'Pokaż nastÄ™pny miesiÄ…c', - currentText: 'DziÅ›', currentStatus: 'Pokaż aktualny miesiÄ…c', - monthNames: ['StyczeÅ„','Luty','Marzec','KwiecieÅ„','Maj','Czerwiec', - 'Lipiec','SierpieÅ„','WrzesieÅ„','Październik','Listopad','GrudzieÅ„'], - monthNamesShort: ['Sty','Lu','Mar','Kw','Maj','Cze', - 'Lip','Sie','Wrz','Pa','Lis','Gru'], - monthStatus: 'Pokaż inny miesiÄ…c', yearStatus: 'Pokaż inny rok', - weekHeader: 'Tydz', weekStatus: 'TydzieÅ„ roku', - dayNames: ['Niedziela','Poniedzialek','Wtorek','Åšroda','Czwartek','PiÄ…tek','Sobota'], - dayNamesShort: ['Nie','Pn','Wt','Åšr','Czw','Pt','So'], - dayNamesMin: ['N','Pn','Wt','Åšr','Cz','Pt','So'], - dayStatus: 'Ustaw DD jako pierwszy dzieÅ„ tygodnia', dateStatus: 'Wybierz D, M d', - dateFormat: 'yy-mm-dd', firstDay: 1, - initStatus: 'Wybierz datÄ™', isRTL: false}; - $.datepicker.setDefaults($.datepicker.regional['pl']); -}); --- a/owa/modules/base/js/includes/jquery/ui/i18n/ui.datepicker-pt-BR.js +++ /dev/null @@ -1,22 +1,1 @@ -/* Brazilian initialisation for the jQuery UI date picker plugin. */ -/* Written by Leonildo Costa Silva (leocsilva@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['pt-BR'] = {clearText: 'Limpar', clearStatus: '', - closeText: 'Fechar', closeStatus: '', - prevText: '<Anterior', prevStatus: '', - nextText: 'Próximo>', nextStatus: '', - currentText: 'Hoje', currentStatus: '', - monthNames: ['Janeiro','Fevereiro','Março','Abril','Maio','Junho', - 'Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'], - monthNamesShort: ['Jan','Fev','Mar','Abr','Mai','Jun', - 'Jul','Ago','Set','Out','Nov','Dez'], - monthStatus: '', yearStatus: '', - weekHeader: 'Sm', weekStatus: '', - dayNames: ['Domingo','Segunda-feira','Terça-feira','Quarta-feira','Quinta-feira','Sexta-feira','Sabado'], - dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','Sab'], - dayNamesMin: ['Dom','Seg','Ter','Qua','Qui','Sex','Sab'], - dayStatus: 'DD', dateStatus: 'D, M d', - dateFormat: 'dd/mm/yy', firstDay: 0, - initStatus: '', isRTL: false}; - $.datepicker.setDefaults($.datepicker.regional['pt-BR']); -}); + --- a/owa/modules/base/js/includes/jquery/ui/i18n/ui.datepicker-ro.js +++ /dev/null @@ -1,23 +1,1 @@ -/* Romanian initialisation for the jQuery UI date picker plugin. */ -/* Written by Edmond L. (ll_edmond@walla.com). */ -jQuery(function($){ - $.datepicker.regional['ro'] = {clearText: 'Curat', clearStatus: 'Sterge data curenta', - closeText: 'Inchide', closeStatus: 'Inchide fara schimbare', - prevText: '<Anterior', prevStatus: 'Arata luna trecuta', - nextText: 'Urmator>', nextStatus: 'Arata luna urmatoare', - currentText: 'Azi', currentStatus: 'Arata luna curenta', - monthNames: ['Ianuarie','Februarie','Martie','Aprilie','Mai','Junie', - 'Julie','August','Septembrie','Octobrie','Noiembrie','Decembrie'], - monthNamesShort: ['Ian', 'Feb', 'Mar', 'Apr', 'Mai', 'Jun', - 'Jul', 'Aug', 'Sep', 'Oct', 'Noi', 'Dec'], - monthStatus: 'Arata o luna diferita', yearStatus: 'Arat un an diferit', - weekHeader: 'Sapt', weekStatus: 'Saptamana anului', - dayNames: ['Duminica', 'Luni', 'Marti', 'Miercuri', 'Joi', 'Vineri', 'Sambata'], - dayNamesShort: ['Dum', 'Lun', 'Mar', 'Mie', 'Joi', 'Vin', 'Sam'], - dayNamesMin: ['Du','Lu','Ma','Mi','Jo','Vi','Sa'], - dayStatus: 'Seteaza DD ca prima saptamana zi', dateStatus: 'Selecteaza D, M d', - dateFormat: 'mm/dd/yy', firstDay: 0, - initStatus: 'Selecteaza o data', isRTL: false}; - $.datepicker.setDefaults($.datepicker.regional['ro']); -}); --- a/owa/modules/base/js/includes/jquery/ui/i18n/ui.datepicker-ru.js +++ /dev/null @@ -1,22 +1,1 @@ -/* Russian (UTF-8) initialisation for the jQuery UI date picker plugin. */ -/* Written by Andrew Stromnov (stromnov@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['ru'] = {clearText: 'ОчиÑтить', clearStatus: '', - closeText: 'Закрыть', closeStatus: '', - prevText: '<Пред', prevStatus: '', - nextText: 'След>', nextStatus: '', - currentText: 'СегоднÑ', currentStatus: '', - monthNames: ['Январь','Февраль','Март','Ðпрель','Май','Июнь', - 'Июль','ÐвгуÑÑ‚','СентÑбрь','ОктÑбрь','ÐоÑбрь','Декабрь'], - monthNamesShort: ['Янв','Фев','Мар','Ðпр','Май','Июн', - 'Июл','Ðвг','Сен','Окт','ÐоÑ','Дек'], - monthStatus: '', yearStatus: '', - weekHeader: 'Ðе', weekStatus: '', - dayNames: ['воÑкреÑенье','понедельник','вторник','Ñреда','четверг','пÑтница','Ñуббота'], - dayNamesShort: ['вÑк','пнд','втр','Ñрд','чтв','птн','Ñбт'], - dayNamesMin: ['Ð’Ñ','Пн','Ð’Ñ‚','Ср','Чт','Пт','Сб'], - dayStatus: 'DD', dateStatus: 'D, M d', - dateFormat: 'dd.mm.yy', firstDay: 1, - initStatus: '', isRTL: false}; - $.datepicker.setDefaults($.datepicker.regional['ru']); -}); + --- a/owa/modules/base/js/includes/jquery/ui/i18n/ui.datepicker-sk.js +++ /dev/null @@ -1,23 +1,1 @@ -/* Slovak initialisation for the jQuery UI date picker plugin. */ -/* Written by Vojtech Rinik (vojto@hmm.sk). */ -jQuery(function($){ - $.datepicker.regional['sk'] = {clearText: 'ZmazaÅ¥', clearStatus: '', - closeText: 'ZavrieÅ¥', closeStatus: '', - prevText: '<Predchádzajúci', prevStatus: '', - nextText: 'Nasledujúci>', nextStatus: '', - currentText: 'Dnes', currentStatus: '', - monthNames: ['Január','Február','Marec','Apríl','Máj','Jún', - 'Júl','August','September','Október','November','December'], - monthNamesShort: ['Jan','Feb','Mar','Apr','Máj','Jún', - 'Júl','Aug','Sep','Okt','Nov','Dec'], - monthStatus: '', yearStatus: '', - weekHeader: 'Ty', weekStatus: '', - dayNames: ['Nedel\'a','Pondelok','Utorok','Streda','Å tvrtok','Piatok','Sobota'], - dayNamesShort: ['Ned','Pon','Uto','Str','Å tv','Pia','Sob'], - dayNamesMin: ['Ne','Po','Ut','St','Å t','Pia','So'], - dayStatus: 'DD', dateStatus: 'D, M d', - dateFormat: 'dd.mm.yy', firstDay: 0, - initStatus: '', isRTL: false}; - $.datepicker.setDefaults($.datepicker.regional['sk']); -}); --- a/owa/modules/base/js/includes/jquery/ui/i18n/ui.datepicker-sv.js +++ /dev/null @@ -1,23 +1,1 @@ -/* Swedish initialisation for the jQuery UI date picker plugin. */ -/* Written by Anders Ekdahl ( anders@nomadiz.se). */ -jQuery(function($){ - $.datepicker.regional['sv'] = {clearText: 'Rensa', clearStatus: '', - closeText: 'Stäng', closeStatus: '', - prevText: '«Förra', prevStatus: '', - nextText: 'Nästa»', nextStatus: '', - currentText: 'Idag', currentStatus: '', - monthNames: ['Januari','Februari','Mars','April','Maj','Juni', - 'Juli','Augusti','September','Oktober','November','December'], - monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', - 'Jul','Aug','Sep','Okt','Nov','Dec'], - monthStatus: '', yearStatus: '', - weekHeader: 'Ve', weekStatus: '', - dayNamesShort: ['Sön','MÃ¥n','Tis','Ons','Tor','Fre','Lör'], - dayNames: ['Söndag','MÃ¥ndag','Tisdag','Onsdag','Torsdag','Fredag','Lördag'], - dayNamesMin: ['Sö','MÃ¥','Ti','On','To','Fr','Lö'], - dayStatus: 'DD', dateStatus: 'D, M d', - dateFormat: 'yy-mm-dd', firstDay: 1, - initStatus: '', isRTL: false}; - $.datepicker.setDefaults($.datepicker.regional['sv']); -}); --- a/owa/modules/base/js/includes/jquery/ui/i18n/ui.datepicker-th.js +++ /dev/null @@ -1,22 +1,1 @@ -/* Thai initialisation for the jQuery UI date picker plugin. */ -/* Written by pipo (pipo@sixhead.com). */ -jQuery(function($){ - $.datepicker.regional['th'] = {clearText: 'ลบ', clearStatus: '', - closeText: 'ปิด', closeStatus: '', - prevText: '« à¸¢à¹‰à¸­à¸™', prevStatus: '', - nextText: 'ถัดไป »', nextStatus: '', - currentText: 'วันนี้', currentStatus: '', - monthNames: ['มà¸à¸£à¸²à¸„ม','à¸à¸¸à¸¡à¸ à¸²à¸žà¸±à¸™à¸˜à¹Œ','มีนาคม','เมษายน','พฤษภาคม','มิถุนายน', - 'à¸à¸£à¸à¸à¸²à¸„ม','สิงหาคม','à¸à¸±à¸™à¸¢à¸²à¸¢à¸™','ตุลาคม','พฤศจิà¸à¸²à¸¢à¸™','ธันวาคม'], - monthNamesShort: ['ม.ค.','à¸.พ.','มี.ค.','เม.ย.','พ.ค.','มิ.ย.', - 'à¸.ค.','ส.ค.','à¸.ย.','ต.ค.','พ.ย.','ธ.ค.'], - monthStatus: '', yearStatus: '', - weekHeader: 'Sm', weekStatus: '', - dayNames: ['อาทิตย์','จันทร์','อังคาร','พุธ','พฤหัสบดี','ศุà¸à¸£à¹Œ','เสาร์'], - dayNamesShort: ['อา.','จ.','อ.','พ.','พฤ.','ศ.','ส.'], - dayNamesMin: ['อา.','จ.','อ.','พ.','พฤ.','ศ.','ส.'], - dayStatus: 'DD', dateStatus: 'D, M d', - dateFormat: 'dd/mm/yy', firstDay: 0, - initStatus: '', isRTL: false}; - $.datepicker.setDefaults($.datepicker.regional['th']); -}); + --- a/owa/modules/base/js/includes/jquery/ui/i18n/ui.datepicker-tr.js +++ /dev/null @@ -1,22 +1,1 @@ -/* Turkish initialisation for the jQuery UI date picker plugin. */ -/* Written by Izzet Emre Erkan (kara@karalamalar.net). */ -jQuery(function($){ - $.datepicker.regional['tr'] = {clearText: 'temizle', clearStatus: 'geçerli tarihi temizler', - closeText: 'kapat', closeStatus: 'sadece göstergeyi kapat', - prevText: '<geri', prevStatus: 'önceki ayı göster', - nextText: 'ileri>', nextStatus: 'sonraki ayı göster', - currentText: 'bugün', currentStatus: '', - monthNames: ['Ocak','Åžubat','Mart','Nisan','Mayıs','Haziran', - 'Temmuz','AÄŸustos','Eylül','Ekim','Kasım','Aralık'], - monthNamesShort: ['Oca','Åžub','Mar','Nis','May','Haz', - 'Tem','AÄŸu','Eyl','Eki','Kas','Ara'], - monthStatus: 'baÅŸka ay', yearStatus: 'baÅŸka yıl', - weekHeader: 'Hf', weekStatus: 'Ayın haftaları', - dayNames: ['Pazar','Pazartesi','Salı','ÇarÅŸamba','PerÅŸembe','Cuma','Cumartesi'], - dayNamesShort: ['Pz','Pt','Sa','Ça','Pe','Cu','Ct'], - dayNamesMin: ['Pz','Pt','Sa','Ça','Pe','Cu','Ct'], - dayStatus: 'Haftanın ilk gününü belirleyin', dateStatus: 'D, M d seçiniz', - dateFormat: 'dd.mm.yy', firstDay: 1, - initStatus: 'Bir tarih seçiniz', isRTL: false}; - $.datepicker.setDefaults($.datepicker.regional['tr']); -}); + --- a/owa/modules/base/js/includes/jquery/ui/i18n/ui.datepicker-uk.js +++ /dev/null @@ -1,22 +1,1 @@ -/* Ukrainian (UTF-8) initialisation for the jQuery UI date picker plugin. */ -/* Written by Maxim Drogobitskiy (maxdao@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['uk'] = {clearText: 'ОчиÑтити', clearStatus: '', - closeText: 'Закрити', closeStatus: '', - prevText: '<<', prevStatus: '', - nextText: '>>', nextStatus: '', - currentText: 'Сьогодні', currentStatus: '', - monthNames: ['Січень','Лютий','Березень','Квітень','Травень','Червень', - 'Липень','Серпень','ВереÑень','Жовтень','ЛиÑтопад','Грудень'], - monthNamesShort: ['Січ','Лют','Бер','Кві','Тра','Чер', - 'Лип','Сер','Вер','Жов','ЛиÑ','Гру'], - monthStatus: '', yearStatus: '', - weekHeader: 'Ðе', weekStatus: '', - dayNames: ['неділÑ','понеділок','вівторок','Ñереда','четвер','пÑтницÑ','Ñуббота'], - dayNamesShort: ['нед','пнд','вів','Ñрд','чтв','птн','Ñбт'], - dayNamesMin: ['Ðд','Пн','Ð’Ñ‚','Ср','Чт','Пт','Сб'], - dayStatus: 'DD', dateStatus: 'D, M d', - dateFormat: 'dd.mm.yy', firstDay: 1, - initStatus: '', isRTL: false}; - $.datepicker.setDefaults($.datepicker.regional['uk']); -}); + --- a/owa/modules/base/js/includes/jquery/ui/i18n/ui.datepicker-zh-CN.js +++ /dev/null @@ -1,23 +1,1 @@ -/* Chinese initialisation for the jQuery UI date picker plugin. */ -/* Written by Cloudream (cloudream@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['zh-CN'] = {clearText: '清除', clearStatus: '清除已选日期', - closeText: '关闭', closeStatus: 'ä¸æ”¹å˜å½“å‰é€‰æ‹©', - prevText: '<上月', prevStatus: '显示上月', - nextText: '下月>', nextStatus: '显示下月', - currentText: '今天', currentStatus: '显示本月', - monthNames: ['一月','二月','三月','四月','五月','六月', - '七月','八月','ä¹æœˆ','å月','å一月','å二月'], - monthNamesShort: ['一','二','三','å››','五','å…­', - '七','å…«','ä¹','å','å一','å二'], - monthStatus: '选择月份', yearStatus: '选择年份', - weekHeader: '周', weekStatus: '年内周次', - dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'], - dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'], - dayNamesMin: ['æ—¥','一','二','三','å››','五','å…­'], - dayStatus: '设置 DD 为一周起始', dateStatus: '选择 m月 dæ—¥, DD', - dateFormat: 'yy-mm-dd', firstDay: 1, - initStatus: '请选择日期', isRTL: false}; - $.datepicker.setDefaults($.datepicker.regional['zh-CN']); -}); --- a/owa/modules/base/js/includes/jquery/ui/i18n/ui.datepicker-zh-TW.js +++ /dev/null @@ -1,24 +1,1 @@ -/* Chinese initialisation for the jQuery UI date picker plugin. */ -/* Written by Ressol (ressol@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['zh-TW'] = { - clearText: '清除', clearStatus: '清除已é¸æ—¥æœŸ', - closeText: '關閉', closeStatus: 'ä¸æ”¹è®Šç›®å‰çš„é¸æ“‡', - prevText: '<上月', prevStatus: '顯示上月', - nextText: '下月>', nextStatus: '顯示下月', - currentText: '今天', currentStatus: '顯示本月', - monthNames: ['一月','二月','三月','四月','五月','六月', - '七月','八月','ä¹æœˆ','å月','å一月','å二月'], - monthNamesShort: ['一','二','三','å››','五','å…­', - '七','å…«','ä¹','å','å一','å二'], - monthStatus: 'é¸æ“‡æœˆä»½', yearStatus: 'é¸æ“‡å¹´ä»½', - weekHeader: '周', weekStatus: '年內周次', - dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'], - dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'], - dayNamesMin: ['æ—¥','一','二','三','å››','五','å…­'], - dayStatus: '設定 DD 為一周起始', dateStatus: 'é¸æ“‡ m月 dæ—¥, DD', - dateFormat: 'yy/mm/dd', firstDay: 1, - initStatus: 'è«‹é¸æ“‡æ—¥æœŸ', isRTL: false}; - $.datepicker.setDefaults($.datepicker.regional['zh-TW']); -}); --- a/owa/modules/base/js/includes/json2.js +++ /dev/null @@ -1,483 +1,1 @@ -/* - http://www.JSON.org/json2.js - 2010-11-17 - Public Domain. - - NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK. - - See http://www.JSON.org/js.html - - - This code should be minified before deployment. - See http://javascript.crockford.com/jsmin.html - - USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO - NOT CONTROL. - - - This file creates a global JSON object containing two methods: stringify - and parse. - - JSON.stringify(value, replacer, space) - value any JavaScript value, usually an object or array. - - replacer an optional parameter that determines how object - values are stringified for objects. It can be a - function or an array of strings. - - space an optional parameter that specifies the indentation - of nested structures. If it is omitted, the text will - be packed without extra whitespace. If it is a number, - it will specify the number of spaces to indent at each - level. If it is a string (such as '\t' or ' '), - it contains the characters used to indent at each level. - - This method produces a JSON text from a JavaScript value. - - When an object value is found, if the object contains a toJSON - method, its toJSON method will be called and the result will be - stringified. A toJSON method does not serialize: it returns the - value represented by the name/value pair that should be serialized, - or undefined if nothing should be serialized. The toJSON method - will be passed the key associated with the value, and this will be - bound to the value - - For example, this would serialize Dates as ISO strings. - - Date.prototype.toJSON = function (key) { - function f(n) { - // Format integers to have at least two digits. - return n < 10 ? '0' + n : n; - } - - return this.getUTCFullYear() + '-' + - f(this.getUTCMonth() + 1) + '-' + - f(this.getUTCDate()) + 'T' + - f(this.getUTCHours()) + ':' + - f(this.getUTCMinutes()) + ':' + - f(this.getUTCSeconds()) + 'Z'; - }; - - You can provide an optional replacer method. It will be passed the - key and value of each member, with this bound to the containing - object. The value that is returned from your method will be - serialized. If your method returns undefined, then the member will - be excluded from the serialization. - - If the replacer parameter is an array of strings, then it will be - used to select the members to be serialized. It filters the results - such that only members with keys listed in the replacer array are - stringified. - - Values that do not have JSON representations, such as undefined or - functions, will not be serialized. Such values in objects will be - dropped; in arrays they will be replaced with null. You can use - a replacer function to replace those with JSON values. - JSON.stringify(undefined) returns undefined. - - The optional space parameter produces a stringification of the - value that is filled with line breaks and indentation to make it - easier to read. - - If the space parameter is a non-empty string, then that string will - be used for indentation. If the space parameter is a number, then - the indentation will be that many spaces. - - Example: - - text = JSON.stringify(['e', {pluribus: 'unum'}]); - // text is '["e",{"pluribus":"unum"}]' - - - text = JSON.stringify(['e', {pluribus: 'unum'}], null, '\t'); - // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]' - - text = JSON.stringify([new Date()], function (key, value) { - return this[key] instanceof Date ? - 'Date(' + this[key] + ')' : value; - }); - // text is '["Date(---current time---)"]' - - - JSON.parse(text, reviver) - This method parses a JSON text to produce an object or array. - It can throw a SyntaxError exception. - - The optional reviver parameter is a function that can filter and - transform the results. It receives each of the keys and values, - and its return value is used instead of the original value. - If it returns what it received, then the structure is not modified. - If it returns undefined then the member is deleted. - - Example: - - // Parse the text. Values that look like ISO date strings will - // be converted to Date objects. - - myData = JSON.parse(text, function (key, value) { - var a; - if (typeof value === 'string') { - a = -/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value); - if (a) { - return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4], - +a[5], +a[6])); - } - } - return value; - }); - - myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) { - var d; - if (typeof value === 'string' && - value.slice(0, 5) === 'Date(' && - value.slice(-1) === ')') { - d = new Date(value.slice(5, -1)); - if (d) { - return d; - } - } - return value; - }); - - - This is a reference implementation. You are free to copy, modify, or - redistribute. -*/ - -/*jslint evil: true, strict: false, regexp: false */ - -/*members "", "\b", "\t", "\n", "\f", "\r", "\"", JSON, "\\", apply, - call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours, - getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join, - lastIndex, length, parse, prototype, push, replace, slice, stringify, - test, toJSON, toString, valueOf -*/ - - -// Create a JSON object only if one does not already exist. We create the -// methods in a closure to avoid creating global variables. - -if (!this.JSON) { - this.JSON = {}; -} - -(function () { - "use strict"; - - function f(n) { - // Format integers to have at least two digits. - return n < 10 ? '0' + n : n; - } - - if (typeof Date.prototype.toJSON !== 'function') { - - Date.prototype.toJSON = function (key) { - - return isFinite(this.valueOf()) ? - this.getUTCFullYear() + '-' + - f(this.getUTCMonth() + 1) + '-' + - f(this.getUTCDate()) + 'T' + - f(this.getUTCHours()) + ':' + - f(this.getUTCMinutes()) + ':' + - f(this.getUTCSeconds()) + 'Z' : null; - }; - - String.prototype.toJSON = - Number.prototype.toJSON = - Boolean.prototype.toJSON = function (key) { - return this.valueOf(); - }; - } - - var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, - escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, - gap, - indent, - meta = { // table of character substitutions - '\b': '\\b', - '\t': '\\t', - '\n': '\\n', - '\f': '\\f', - '\r': '\\r', - '"' : '\\"', - '\\': '\\\\' - }, - rep; - - - function quote(string) { - -// If the string contains no control characters, no quote characters, and no -// backslash characters, then we can safely slap some quotes around it. -// Otherwise we must also replace the offending characters with safe escape -// sequences. - - escapable.lastIndex = 0; - return escapable.test(string) ? - '"' + string.replace(escapable, function (a) { - var c = meta[a]; - return typeof c === 'string' ? c : - '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); - }) + '"' : - '"' + string + '"'; - } - - - function str(key, holder) { - -// Produce a string from holder[key]. - - var i, // The loop counter. - k, // The member key. - v, // The member value. - length, - mind = gap, - partial, - value = holder[key]; - -// If the value has a toJSON method, call it to obtain a replacement value. - - if (value && typeof value === 'object' && - typeof value.toJSON === 'function') { - value = value.toJSON(key); - } - -// If we were called with a replacer function, then call the replacer to -// obtain a replacement value. - - if (typeof rep === 'function') { - value = rep.call(holder, key, value); - } - -// What happens next depends on the value's type. - - switch (typeof value) { - case 'string': - return quote(value); - - case 'number': - -// JSON numbers must be finite. Encode non-finite numbers as null. - - return isFinite(value) ? String(value) : 'null'; - - case 'boolean': - case 'null': - -// If the value is a boolean or null, convert it to a string. Note: -// typeof null does not produce 'null'. The case is included here in -// the remote chance that this gets fixed someday. - - return String(value); - -// If the type is 'object', we might be dealing with an object or an array or -// null. - - case 'object': - -// Due to a specification blunder in ECMAScript, typeof null is 'object', -// so watch out for that case. - - if (!value) { - return 'null'; - } - -// Make an array to hold the partial results of stringifying this object value. - - gap += indent; - partial = []; - -// Is the value an array? - - if (Object.prototype.toString.apply(value) === '[object Array]') { - -// The value is an array. Stringify every element. Use null as a placeholder -// for non-JSON values. - - length = value.length; - for (i = 0; i < length; i += 1) { - partial[i] = str(i, value) || 'null'; - } - -// Join all of the elements together, separated with commas, and wrap them in -// brackets. - - v = partial.length === 0 ? '[]' : - gap ? '[\n' + gap + - partial.join(',\n' + gap) + '\n' + - mind + ']' : - '[' + partial.join(',') + ']'; - gap = mind; - return v; - } - -// If the replacer is an array, use it to select the members to be stringified. - - if (rep && typeof rep === 'object') { - length = rep.length; - for (i = 0; i < length; i += 1) { - k = rep[i]; - if (typeof k === 'string') { - v = str(k, value); - if (v) { - partial.push(quote(k) + (gap ? ': ' : ':') + v); - } - } - } - } else { - -// Otherwise, iterate through all of the keys in the object. - - for (k in value) { - if (Object.hasOwnProperty.call(value, k)) { - v = str(k, value); - if (v) { - partial.push(quote(k) + (gap ? ': ' : ':') + v); - } - } - } - } - -// Join all of the member texts together, separated with commas, -// and wrap them in braces. - - v = partial.length === 0 ? '{}' : - gap ? '{\n' + gap + partial.join(',\n' + gap) + '\n' + - mind + '}' : '{' + partial.join(',') + '}'; - gap = mind; - return v; - } - } - -// If the JSON object does not yet have a stringify method, give it one. - - if (typeof JSON.stringify !== 'function') { - JSON.stringify = function (value, replacer, space) { - -// The stringify method takes a value and an optional replacer, and an optional -// space parameter, and returns a JSON text. The replacer can be a function -// that can replace values, or an array of strings that will select the keys. -// A default replacer method can be provided. Use of the space parameter can -// produce text that is more easily readable. - - var i; - gap = ''; - indent = ''; - -// If the space parameter is a number, make an indent string containing that -// many spaces. - - if (typeof space === 'number') { - for (i = 0; i < space; i += 1) { - indent += ' '; - } - -// If the space parameter is a string, it will be used as the indent string. - - } else if (typeof space === 'string') { - indent = space; - } - -// If there is a replacer, it must be a function or an array. -// Otherwise, throw an error. - - rep = replacer; - if (replacer && typeof replacer !== 'function' && - (typeof replacer !== 'object' || - typeof replacer.length !== 'number')) { - throw new Error('JSON.stringify'); - } - -// Make a fake root object containing our value under the key of ''. -// Return the result of stringifying the value. - - return str('', {'': value}); - }; - } - - -// If the JSON object does not yet have a parse method, give it one. - - if (typeof JSON.parse !== 'function') { - JSON.parse = function (text, reviver) { - -// The parse method takes a text and an optional reviver function, and returns -// a JavaScript value if the text is a valid JSON text. - - var j; - - function walk(holder, key) { - -// The walk method is used to recursively walk the resulting structure so -// that modifications can be made. - - var k, v, value = holder[key]; - if (value && typeof value === 'object') { - for (k in value) { - if (Object.hasOwnProperty.call(value, k)) { - v = walk(value, k); - if (v !== undefined) { - value[k] = v; - } else { - delete value[k]; - } - } - } - } - return reviver.call(holder, key, value); - } - - -// Parsing happens in four stages. In the first stage, we replace certain -// Unicode characters with escape sequences. JavaScript handles many characters -// incorrectly, either silently deleting them, or treating them as line endings. - - text = String(text); - cx.lastIndex = 0; - if (cx.test(text)) { - text = text.replace(cx, function (a) { - return '\\u' + - ('0000' + a.charCodeAt(0).toString(16)).slice(-4); - }); - } - -// In the second stage, we run the text against regular expressions that look -// for non-JSON patterns. We are especially concerned with '()' and 'new' -// because they can cause invocation, and '=' because it can cause mutation. -// But just to be safe, we want to reject all unexpected forms. - -// We split the second stage into 4 regexp operations in order to work around -// crippling inefficiencies in IE's and Safari's regexp engines. First we -// replace the JSON backslash pairs with '@' (a non-JSON character). Second, we -// replace all simple value tokens with ']' characters. Third, we delete all -// open brackets that follow a colon or comma or that begin the text. Finally, -// we look to see that the remaining characters are only whitespace or ']' or -// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval. - - if (/^[\],:{}\s]*$/ -.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@') -.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']') -.replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) { - -// In the third stage we use the eval function to compile the text into a -// JavaScript structure. The '{' operator is subject to a syntactic ambiguity -// in JavaScript: it can begin a block or an object literal. We wrap the text -// in parens to eliminate the ambiguity. - - j = eval('(' + text + ')'); - -// In the optional fourth stage, we recursively walk the new structure, passing -// each name/value pair to a reviver function for possible transformation. - - return typeof reviver === 'function' ? - walk({'': j}, '') : j; - } - -// If the text is not JSON parseable, then a SyntaxError is thrown. - - throw new SyntaxError('JSON.parse'); - }; - } -}()); --- a/owa/modules/base/js/includes/lazyload-2.0.min.js +++ /dev/null @@ -1,1 +1,1 @@ -LazyLoad=function(){var f=document,g,b={},e={css:[],js:[]},a;function j(l,k){var m=f.createElement(l),d;for(d in k){if(k.hasOwnProperty(d)){m.setAttribute(d,k[d])}}return m}function h(d){var l=b[d];if(!l){return}var m=l.callback,k=l.urls;k.shift();if(!k.length){if(m){m.call(l.scope||window,l.obj)}b[d]=null;if(e[d].length){i(d)}}}function c(){if(a){return}var k=navigator.userAgent,l=parseFloat,d;a={gecko:0,ie:0,opera:0,webkit:0};d=k.match(/AppleWebKit\/(\S*)/);if(d&&d[1]){a.webkit=l(d[1])}else{d=k.match(/MSIE\s([^;]*)/);if(d&&d[1]){a.ie=l(d[1])}else{if((/Gecko\/(\S*)/).test(k)){a.gecko=1;d=k.match(/rv:([^\s\)]*)/);if(d&&d[1]){a.gecko=l(d[1])}}else{if(d=k.match(/Opera\/(\S*)/)){a.opera=l(d[1])}}}}}function i(r,q,s,m,t){var n,o,l,k,d;c();if(q){q=q.constructor===Array?q:[q];if(r==="css"||a.gecko||a.opera){e[r].push({urls:[].concat(q),callback:s,obj:m,scope:t})}else{for(n=0,o=q.length;n 127) && (c < 2048)) { - utftext += String.fromCharCode((c >> 6) | 192); - utftext += String.fromCharCode((c & 63) | 128); - } - else { - utftext += String.fromCharCode((c >> 12) | 224); - utftext += String.fromCharCode(((c >> 6) & 63) | 128); - utftext += String.fromCharCode((c & 63) | 128); - } - - } - - return utftext; - }, - - // private method for UTF-8 decoding - _utf8_decode : function (utftext) { - var string = ""; - var i = 0; - var c = c1 = c2 = 0; - - while ( i < utftext.length ) { - - c = utftext.charCodeAt(i); - - if (c < 128) { - string += String.fromCharCode(c); - i++; - } - else if((c > 191) && (c < 224)) { - c2 = utftext.charCodeAt(i+1); - string += String.fromCharCode(((c & 31) << 6) | (c2 & 63)); - i += 2; - } - else { - c2 = utftext.charCodeAt(i+1); - c3 = utftext.charCodeAt(i+2); - string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63)); - i += 3; - } - - } - - return string; - } - -} --- a/owa/modules/base/js/index.php +++ /dev/null @@ -1,3 +1,1 @@ - + --- a/owa/modules/base/js/owa.chart.js +++ /dev/null @@ -1,59 +1,1 @@ -OWA.chart = function() { - this.config = OWA.config; - - return; -} - -OWA.chart.prototype = { - - properties: new Object, - - config: '', - - dom_id: '', - - data: '', - - height: "100%", - - width: "100%", - - render: function() { - - swfobject.embedSWF(this.config.modules_url + "base/js/includes/" + this.config.ofc_version + "/open-flash-chart.swf", this.dom_id, this.width, this.height, "9.0.0", "expressInstall.swf", {"get-data":"OWA.items['"+this.dom_id+"'].getData", id: this.dom_id}); - - }, - - getData: function() { - - //alert( 'reading data...obj' ); - return JSON.stringify(this.data); - }, - - setData: function(data) { - - this.data = data; - return; - }, - - setHeight: function(height) { - - this.height = height; - return; - }, - - setWidth: function(width) { - - this.width = width; - return; - }, - - setDomId: function(dom_id) { - - this.dom_id = dom_id; - return; - } - -} - --- a/owa/modules/base/js/owa.heatmap.js +++ /dev/null @@ -1,576 +1,1 @@ -// -// Open Web Analytics - An Open Source Web Analytics Framework -// -// Copyright 2010 Peter Adams. All rights reserved. -// -// Licensed under GPL v2.0 http://www.gnu.org/copyleft/gpl.html -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// $Id$ -// -/** - * Javascript Heatmap Library - * - * @author Peter Adams - * @web Open Web Analytics - * @copyright Copyright © 2006-2010 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.2.1 - */ -OWA.heatmap = function(w, h) { - - this.docDimensions = this.getDim(document); - - w = w || this.docDimensions.w; - h = h || this.docDimensions.h; - OWA.debug("Canvas size: %s by %s", w, h); - this.createCanvas(w,h); - this.canvas = document.getElementById('owa_heatmap'); - this.context = this.canvas.getContext('2d'); - this.calcRegions(); - -}; - -OWA.heatmap.prototype = { - - options: { - dotSize: 12, - numRegions: 40, - alphaIncrement:50, - demoMode: false, - liveMode: false, - mapInterval: 1000, - randomDataCount: 200, - rowsPerFetch: 100, - strokeRegions: false, - svgUrl: OWA.getSetting('baseUrl')+'/modules/base/i/test.svg#f1', - baseUrl: '', - apiUrl: '' - }, - canvas: null, - context: null, - docDimensions: null, - regions: new Array(), - regionsMap: new Array(), - regionWidth: null, - regionHeight: null, - dirtyRegions: new Object(), - timer: '', - clicks: '', - nextPage: 1, - more: true, - lock: false, - - /** - * Marks a region as dirty so that it can be re-rendered - */ - markRegionDirty: function(region_num) { - if (region_num >= 0) { - this.dirtyRegions[region_num] = true; - OWA.debug("marking region dirty: %s", region_num); - } else { - OWA.debug("no region to mark dirty!"); - } - }, - - showControlPanel: function() { - var that = this; - jQuery('body').append('
                      '); - jQuery('#owa_overlay').append(''); - jQuery('#owa_overlay').append('
                      Start
                      '); - jQuery('#owa_overlay_start').toggleClass('active'); - jQuery('#owa_overlay').append('
                      Stop
                      '); - jQuery('#owa_overlay').append('
                      X
                      '); - jQuery('#owa_overlay_start').click(function(){that.startTimer()}); - jQuery('#owa_overlay_stop').click(function(){that.stopTimer()}); - jQuery('.owa_overlay_control').bind('click', function(){ - jQuery(".owa_overlay_control").removeClass('active'); - jQuery(this).addClass('active'); - }); - jQuery('#owa_overlay_end').click(function(){that.endSession()}); - //eliminate session cookie when window closes. - jQuery(window).unload(function() {OWA.endOverlaySession()}); - }, - - /** - * Main generation method. kicks off the timer if in liveMode - */ - generate: function() { - - this.showControlPanel(); - this.applyBlur(); - - if (this.options.liveMode === true) { - - this.startTimer(); - - } else { - - this.map(); - } - - - }, - - endSession: function() { - - OWA.util.eraseCookie('owa_overlay', document.domain); - window.close(); - }, - - startTimer: function() { - var that = this; - this.timer = setInterval(function(){that.map()}, this.options.mapInterval); - }, - - stopTimer: function() { - if (!this.timer) return false; - clearInterval(this.timer); - }, - - /** - * Gets data and plots it - */ - map: function() { - - if (this.lock == true) { - OWA.debug("skipping data fetch due to lock."); - return; - } else { - this.lock = true; - } - - if (this.options.liveMode === true) { - - var more = this.checkForMoreClicks(); - if (more === true) { - OWA.debug('there are more clicks to fetch.'); - var data = this.getData(); - } else { - OWA.debug('there are no more clicks to fetch.'); - this.stopTimer(); - } - } else { - var data = this.getData(); - } - }, - - /** - * Gets data, random if in demoMode - */ - getData: function() { - - // get data - if (this.options.demoMode === true) { - return this.getRandomData(this.options.randomDataCount); - } else { - var data = this.fetchData(this.getNextPage()); - - return; - } - }, - - checkForMoreClicks: function() { - - return this.more; - }, - - getNextPage: function() { - - return this.nextPage; - }, - - setNextPage: function(page) { - OWA.debug("setNextpage received page as %d", page); - this.nextPage++; - OWA.debug("setNextpage is setting page as %d", this.nextPage); - }, - - setMore: function(bool) { - - this.more = bool; - }, - - /** - * Fetches data via ajax request - */ - fetchData: function(page) { - - var p = OWA.util.readCookie('owa_overlay'); - //alert(unescape(p)); - var params = OWA.util.parseCookieStringToJson(p); - //params.action = 'base.reportOverlay'; - //params.document_url = OWA.util.urlEncode(document.location); - params.action = 'getDomClicks'; - params.pageUrl = OWA.util.urlEncode(document.location); - //params.document_url = document.location; - //OWA.debug('encoded url: '+OWA.util.urlEncode(document.location)); - params.resultsPerPage = this.options.rowsPerFetch; - params.format = 'jsonp'; - - // add page number if one was passed in - if (page) { - OWA.debug("fetchData will fetch page %s", page); - params.page = page; - } - - //closure - var that = this; - - jQuery.ajax({ - url: OWA.getApiEndpoint(), - data: OWA.util.nsParams(params), - dataType: 'jsonp', - jsonp: 'owa_jsonpCallback', - success: function(data) { - that.plotClickData(data); - } - }); - }, - - plotClickData: function(data) { - - if (data) { - //OWA.debug('setClicks says data is defined'); - this.clicks = data; - - //set more flag - if (data.more === true && data.more != null) { - OWA.debug("plotClickData says more flag was set to true"); - this.setMore(true); - //set next page - this.setNextPage(data.page); - } else { - OWA.debug("plotClickData says more flag was set to false"); - this.setMore(false); - } - - //plot dots - //this.plotDots(this.getClicks()); - this.plotDotsRound(this.getClicks()); - this.lock = false; - return true; - } else { - return false; - } - - }, - - getClicks: function() { - //OWA.debug("getClicks is logging %s", this.clicks['page']); - return this.clicks.rows; - }, - - /** - * Looks up the a region's top lower right corner plot points - */ - getRegion: function(num) { - //OWA.debug("Getting dims for region %s", num); - return this.regions[num]; - }, - - /** - * Sets the color of a pixels a region based on their alpha values - */ - setColor: function(num) { - OWA.debug("About to set color for region %s", num); - var dims = this.getRegion(num); - OWA.debug("set color coords %s %s", dims.x, dims.y); - - // get the actual pixel data from the region - var canvasData = this.context.getImageData(dims.x, dims.y, this.regionWidth, this.regionHeight); - var pix = canvasData.data; - - // Loop over each pixel and invert the color. - for (var i = 0, n = pix.length; i < n; i += 4) { - var rgb = this.getRgbFromAlpha(pix[i+3]); - pix[i ] = Math.round(parseInt(rgb.r)); // red - pix[i+1] = Math.round(parseInt(rgb.g)); // green - pix[i+2] = Math.round(parseInt(rgb.b)); // blue - - } - - // Draw the ImageData object at the given (x,y) coordinates. - this.context.putImageData(canvasData,dims.x,dims.y); - }, - - getRgbFromAlpha : function(alpha) { - - var rgb = {'r': null, 'g': null, 'b': null}; - - // set colors based on current alpha value - if( alpha <= 255 && alpha >= 235 ){ - tmp = 255 - alpha; - rgb.r = 255 - tmp; - rgb.g = tmp * 12; - } else if ( alpha <= 234 && alpha >= 200 ){ - tmp = 234 - alpha; - rgb.r = 255 - ( tmp * 8 ); - rgb.g = 255; - } else if ( alpha <= 199 && alpha >= 150 ){ - tmp = 199 - alpha; - rgb.g = 255; - rgb.b = tmp * 5; - } else if ( alpha <= 149 && alpha >= 100 ){ - tmp = 149 - alpha; - rgb.g = 255 - ( tmp * 5 ); - rgb.b = 255; - } else { - rgb.b = 255; - } - - return rgb; - }, - - /** - * Fills a region with grey - * DEPRICATED - */ - fillRegion: function(num) { - - this.fillRectangle(this.regions[num].x, this.regions[num].y, this.regionWidth, this.regionHeight, "rgba(0,0,0, 0.5)"); - }, - - strokeRegion: function(num) { - - this.context.strokeRect(this.regions[num].x, this.regions[num].y, this.regionWidth, this.regionHeight); - - }, - - /** - * Fills a rectangle with an rgba value - */ - fillRectangle: function(x,y,w,h,rgba) { - - this.context.fillStyle = rgba; - this.context.fillRect(x, y, w, h); - }, - - /** - * Fils all regions - * DEPRICATED - */ - fillAllRegions: function() { - - for (var i=0, n = this.regions.length; i < n; i++) { - //OWA.debug("region %s", i); - this.fillRegion(i); - } - - }, - - /** - * Find the region that a set of coordinates falls into - */ - findRegion: function(x, y) { - x = parseFloat(x); - y = parseFloat(y); - // walk the outer x map in ascending order - OWA.debug("finding region for %s", x,y); - for (i in this.regionsMap) { - // look for the first value that is greater that or equals to the x coordinate - if (this.regionsMap.hasOwnProperty(i)) { - OWA.debug("regionmap i: %s", i); - if (x <= i) { - // For that x coordinate walk the inner map in ascending order - OWA.debug("regionmap x chosen: %s. x was: %s", i, x); - for ( n in this.regionsMap[i]) { - // find the first value that is greater than or equals to the y coordinate - if (this.regionsMap[i].hasOwnProperty(n)) { - //OWA.debug("what is this %s", n); - if (y <= n) { - // Return the region number - OWA.debug("stopping on regionmap y: %s", n); - OWA.debug("regionmap y: %s", n); - OWA.debug("region chosen: %s (i = %s, n = %s)", this.regionsMap[i][n], i , n); - return this.regionsMap[i][n]; - } - } - - } - } - } - } - // Something went wrong as the coordinate does not fit into any region - //OWA.debug("can't find region for %s %s", x, y); - }, - - /** - * Chop the document up into a set of regions - */ - calcRegions: function() { - - // Calculate the region dimensions. This is controlled by the option numRegion. - // More regions will increase the speed of rendering. - this.regionWidth = Math.round((this.docDimensions.w / this.options.numRegions) * 100)/100; - this.regionHeight = Math.round((this.docDimensions.h / this.options.numRegions) * 100)/100; - OWA.debug("Region dims: %s %s", this.regionWidth, this.regionHeight); - - var count = 0; - - // y loop - for (var y = this.regionHeight, n = this.docDimensions.h; y <= n; y+=this.regionHeight) { - y = Math.round(y * 100)/100 -.00; - OWA.debug("calcregions y value", y); - // x loop - for (var x = this.regionWidth, nn = this.docDimensions.w; x <= nn; x+=this.regionWidth) { - x = Math.round(x * 100)/100 -.00; - // add region - this.regions[count] = {'x': x - this.regionWidth, 'y': y - this.regionHeight}; - //create inner y map - if (!this.regionsMap[x]) { - this.regionsMap[x] = Array(); - } - //add region to inner map - this.regionsMap[x][y] = count; - //OWA.debug("adding to map: %s %s %s",x,y,count); - - if (this.options.strokeRegions === true) { - this.strokeRegion(count); - } - - count++; - } - - //OWA.debug("x Count: %s", this.regions.length); - } - - - }, - - /** - * Generates random data - * Takes an int - */ - getRandomData: function(count) { - - var data = Array(); - - for (var li=0; li < count; li++) { - var x = Math.round(Math.floor(Math.random()*(this.docDimensions.w-this.options.dotSize))); - var y = Math.round(Math.floor(Math.random()*(this.docDimensions.h-this.options.dotSize))); - - data.push({'x':x,'y':y}); - } - - return data; - }, - - /** - * Plots dots on a the canvas - * - */ - plotDotsRound: function(data) { - - for( var i = 0; i < data.length; i++) { - - if ((data[i].x + this.options.dotSize) > this.docDimensions.w) { - data[i].x = data[i].x - this.options.dotSize; - } - - if ((data[i].y + this.options.dotSize) > this.docDimensions.h) { - data[i].y = data[i].y - this.options.dotSize; - } - - - if ((data[i].x <= this.docDimensions.w) && (data[i].y <= this.docDimensions.h)) { - OWA.debug("plotting %s %s", data[i].x, data[i].y); - } else { - OWA.debug("not getting image data. coordinates %s %s are outside the canvas", data[i].x, data[i].y); - continue; - } - - if ((data[i].x >= 0) && (data[i].y >= 0)) { - OWA.debug("plotting %s %s", data[i].x, data[i].y); - } else { - OWA.debug("not getting image data. coordinates %s %s less than zero.", data[i].x, data[i].y); - continue; - } - - // create a radial gradient with the defined parameters. we want to draw an alphamap - var rgr = this.context.createRadialGradient(data[i].x,data[i].y,7,data[i].x,data[i].y,this.options.dotSize); - // the center of the radial gradient has .1 alpha value - rgr.addColorStop(0, 'rgba(0,0,0,0.1)'); - // and it fades out to 0 - rgr.addColorStop(1, 'rgba(0,0,0,0)'); - // drawing the gradient - this.context.fillStyle = rgr; - this.context.fillRect(data[i].x-this.options.dotSize,data[i].y-this.options.dotSize,2*this.options.dotSize,2*this.options.dotSize); - - // mark region dirty - this.markRegionDirty(this.findRegion(data[i].x,data[i].y)); - } - // color dirty Regions - this.processDirtyRegions(); - }, - - processDirtyRegions: function() { - - for (i in this.dirtyRegions) { - if (this.dirtyRegions.hasOwnProperty(i)) { - this.setColor(i); - } - } - - this.dirtyRegions = new Array(); - - }, - - applyBlur: function() { - - // apply gausian blur - - this.canvas.className = 'owa_blur'; - }, - - getDocHeight : function() { - var D = document; - return Math.max( - Math.max(D.body.scrollHeight, D.documentElement.scrollHeight), - Math.max(D.body.offsetHeight, D.documentElement.offsetHeight), - Math.max(D.body.clientHeight, D.documentElement.clientHeight) - ); - }, - - getDim: function(d) { - - var w=200, h=200, scr_h, off_h; - //OWA.setSetting('debug', true); - if( d.height ) { - //OWA.debug("doc dims %s %s", d.width, d.height); - //return {'w':d.width,'h':d.height}; - } - - if( d.body ) { - - if( d.body.scrollHeight ) { h=scr_h=d.body.scrollHeight; w=d.body.scrollWidth; } - if( d.body.offsetHeight ) { h=off_h=d.body.offsetHeight; w=d.body.offsetWidth; } - if( scr_h && off_h ) h=Math.max(scr_h, off_h); - } - - h = this.getDocHeight(); - OWA.debug("doc dims %s %s", w, h); - - return {'w': w,'h':h}; - }, - - createCanvas: function(w, h) { - - var that = this; - jQuery("body").append(''); - }, - - getDataPoints: function() { - - } - -} --- a/owa/modules/base/js/owa.js +++ /dev/null @@ -1,1496 +1,1 @@ -var OWA = { - items: {}, - overlay: '', - config: { - ns: 'owa_', - baseUrl: '', - hashCookiesToDomain: true - }, - state: {}, - overlayActive: false, - - // depricated - setSetting: function(name, value) { - return this.setOption(name, value); - }, - // depricated - getSetting: function(name) { - return this.getOption(name); - }, - - setOption: function(name, value) { - this.config[name] = value; - }, - - getOption: function(name) { - return this.config[name]; - }, - - initializeStateManager: function() { - - if ( ! this.state.hasOwnProperty('init') ) { - - OWA.debug('initializing state manager...'); - this.state = new OWA.stateManager(); - } - }, - - checkForState: function( store_name ) { - - this.initializeStateManager(); - return this.state.isPresent( store_name ); - }, - - setState : function(store_name, key, value, is_perminant,format, expiration_days) { - - this.initializeStateManager(); - return this.state.set(store_name, key, value, is_perminant,format, expiration_days); - }, - - replaceState : function (store_name, value, is_perminant, format, expiration_days) { - - this.initializeStateManager(); - return this.state.replaceStore(store_name, value, is_perminant, format, expiration_days); - }, - - getStateFromCookie : function(store_name) { - - this.initializeStateManager(); - return this.state.getStateFromCookie(store_name); - }, - - getState : function(store_name, key) { - - this.initializeStateManager(); - return this.state.get(store_name, key); - }, - - clearState : function(store_name) { - - this.initializeStateManager(); - return this.state.clear(store_name); - }, - - getStateStoreFormat: function(store_name) { - - this.initializeStateManager(); - return this.state.getStoreFormat(store_name); - }, - - setStateStoreFormat: function(store_name, format) { - - this.initializeStateManager(); - return this.state.setStoreFormat(store_name, format); - }, - - debug: function() { - - var debugging = OWA.getSetting('debug') || false; // or true - - if ( debugging ) { - - if(window.console) { - - if (window.console.firebug) { - console.log.apply(this, arguments); - } else { - console.log.apply(console, arguments); - } - } - } - }, - - setApiEndpoint : function (endpoint) { - this.config['api_endpoint'] = endpoint; - }, - - getApiEndpoint : function() { - return this.config['api_endpoint'] || this.getSetting('baseUrl') + 'api.php'; - }, - - loadHeatmap: function(p) { - var that = this; - OWA.util.loadScript(OWA.getSetting('baseUrl')+'/modules/base/js/includes/jquery/jquery-1.4.2.min.js', function(){}); - OWA.util.loadCss(OWA.getSetting('baseUrl')+'/modules/base/css/owa.overlay.css', function(){}); - OWA.util.loadScript(OWA.getSetting('baseUrl')+'/modules/base/js/owa.heatmap.js', function(){ - that.overlay = new OWA.heatmap(); - //hm.setParams(p); - //hm.options.demoMode = true; - that.overlay.options.liveMode = true; - that.overlay.generate(); - }); - }, - - loadPlayer: function() { - var that = this; - OWA.debug("Loading Domstream Player"); - OWA.util.loadScript(OWA.getSetting('baseUrl')+'/modules/base/js/includes/jquery/jquery-1.4.2.min.js', function(){}); - OWA.util.loadCss(OWA.getSetting('baseUrl')+'/modules/base/css/owa.overlay.css', function(){}); - OWA.util.loadScript(OWA.getSetting('baseUrl')+'/modules/base/js/owa.player.js', function(){ - that.overlay = new OWA.player(); - }); - }, - - startOverlaySession: function(p) { - - // set global is overlay actve flag - OWA.overlayActive = true; - //alert(JSON.stringify(p)); - - if (p.hasOwnProperty('api_url')) { - - OWA.setApiEndpoint(p.api_url); - } - - // get param from cookie - //var params = OWA.util.parseCookieStringToJson(p); - var params = p; - // evaluate the action param - if (params.action === 'loadHeatmap') { - this.loadHeatmap(p); - } else if (params.action === 'loadPlayer') { - this.loadPlayer(p); - } - - }, - - endOverlaySession : function() { - - OWA.util.eraseCookie('owa_overlay', document.domain); - OWA.overlayActive = false; - } - - -} - -OWA.stateManager = function() { - - this.cookies = OWA.util.readAllCookies(); - this.init = true; -}; - -OWA.stateManager.prototype = { - - init: false, - cookies: '', - stores: {}, - storeFormats: {}, - - isPresent: function( store_name ) { - - if ( this.stores.hasOwnProperty( store_name ) ) { - return true; - } - }, - - set: function(store_name, key, value, is_perminant,format, expiration_days) { - - if ( ! this.isPresent( store_name ) ) { - this.load(store_name); - } - - if ( ! this.isPresent( store_name ) ) { - OWA.debug('Creating state store (%s)', store_name); - this.stores[store_name] = {}; - // add cookie domain hash - if (OWA.getSetting('hashCookiesToDomain')) { - this.stores[store_name].cdh = OWA.util.getCookieDomainHash(OWA.getSetting('cookie_domain')); - } - } - - if ( key ) { - this.stores[store_name][key] = value; - } else { - this.stores[store_name] = value; - } - - if ( ! format ) { - - // check the orginal format that the state store was loaded from. - if (this.storeFormats.hasOwnProperty(store_name)) { - format = this.storeFormats[store_name]; - } - } - - if (format === 'json') { - state_value = JSON.stringify(this.stores[store_name]); - } else { - state_value = OWA.util.assocStringFromJson(this.stores[store_name]); - } - - if ( ! expiration_days ) { - - if ( is_perminant ) { - expiration_days = 3600; - } - } - - // set or reset the campaign cookie - OWA.debug('Populating state store (%s) with value: %s', store_name, state_value); - var domain = OWA.getSetting('cookie_domain') || document.domain; - // erase cookie - //OWA.util.eraseCookie( 'owa_'+store_name, domain ); - // set cookie - OWA.util.setCookie( 'owa_'+store_name, state_value, expiration_days, '/', domain ); - }, - - replaceStore : function (store_name, value, is_perminant, format, expiration_days) { - - OWA.debug('replace state format: %s, value: %s',format, JSON.stringify(value)); - if ( store_name ) { - - if (value) { - - this.stores[store_name] = value; - this.storeFormats[store_name] = format; - - if (format === 'json') { - cookie_value = JSON.stringify(value); - } else { - cookie_value = OWA.util.assocStringFromJson(value); - } - } - - var domain = OWA.getSetting('cookie_domain') || document.domain; - - if ( ! expiration_days ) { - - if ( is_perminant ) { - expiration_days = 3600; - } - } - OWA.debug('About to replace state store (%s) with: %s', store_name, cookie_value); - OWA.util.setCookie( 'owa_'+ store_name, cookie_value, expiration_days, '/', domain ); - - } - }, - - getStateFromCookie : function(store_name) { - - var store = unescape( OWA.util.readCookie( OWA.getSetting('ns') + store_name ) ); - if ( store ) { - return store; - } - }, - - get : function(store_name, key) { - - if ( ! this.isPresent( store_name ) ) { - this.load(store_name); - } - - if ( this.isPresent( store_name ) ) { - if ( key ) { - if ( this.stores[store_name].hasOwnProperty( key ) ) { - return this.stores[store_name][key]; - } - } else { - return this.stores[store_name]; - } - } else { - OWA.debug('No state store (%s) was found', store_name); - return ''; - } - - }, - - getCookieValues: function(cookie_name) { - - if (this.cookies.hasOwnProperty(cookie_name)) { - return this.cookies[cookie_name]; - } - }, - - load: function(store_name) { - - var state = ''; - var cookie_values = this.getCookieValues( OWA.getSetting('ns') + store_name ); - - if (cookie_values) { - - for (var i=0;i < cookie_values.length;i++) { - - - var raw_cookie_value = unescape( cookie_values[i] ); - var cookie_value = OWA.util.decodeCookieValue( raw_cookie_value ); - //OWA.debug(raw_cookie_value); - var format = OWA.util.getCookieValueFormat( raw_cookie_value ); - - if ( OWA.getSetting('hashCookiesToDomain') ) { - var domain = OWA.getSetting('cookie_domain'); - var dhash = OWA.util.getCookieDomainHash(domain); - - if ( cookie_value.hasOwnProperty( 'cdh' ) ) { - OWA.debug( 'Cookie value cdh: %s, domain hash: %s', cookie_value.cdh, dhash ); - if ( cookie_value.cdh == dhash ) { - OWA.debug('Cookie: %s, index: %s domain hash matches current cookie domain. Loading...', store_name, i); - state = cookie_value; - break; - } else { - OWA.debug('Cookie: %s, index: %s domain hash does not match current cookie domain. Not loading.', store_name, i); - } - } else { - //OWA.debug(cookie_value); - OWA.debug('Cookie: %s, index: %s has no domain hash. Not going to Load it.', store_name, i); - } - - } else { - // just get the last cookie set by that name - var lastIndex = cookie_values.length -1 ; - if (i === lastIndex) { - state = cookie_value; - } - } - } - } - - if ( state ) { - this.stores[store_name] = state; - this.storeFormats[store_name] = format; - OWA.debug('Loaded state store: %s with: %s', store_name, JSON.stringify(state)); - } else { - - OWA.debug('No state for store: %s was found. Nothing to Load.', store_name); - } - }, - - clear: function(store_name) { - // delete cookie - this.stores[store_name] = ''; - OWA.util.eraseCookie(OWA.getSetting('ns') + store_name); - }, - - getStoreFormat: function(store_name) { - - return this.storeFormats[store_name]; - }, - - setStoreFormat: function(store_name, format) { - - this.storeFormats[store_name] = format; - } -}; - - -OWA.util = { - - ns: function(string) { - - return OWA.config.ns + string; - - }, - - nsAll: function(obj) { - - var nsObj = new Object(); - - for(param in obj) { // print out the params - if (obj.hasOwnProperty(param)) { - nsObj[OWA.config.ns+param] = obj[param]; - } - } - - return nsObj; - }, - - getScript: function(file, path) { - - jQuery.getScript(path + file); - - return; - - }, - - makeUrl: function(template, uri, params) { - var url = jQuery.sprintf(template, uri, jQuery.param(OWA.util.nsAll(params))); - //alert(url); - return url; - }, - - createCookie: function (name,value,days,domain) { - if (days) { - var date = new Date(); - date.setTime(date.getTime()+(days*24*60*60*1000)); - var expires = "; expires="+date.toGMTString(); - } - else var expires = ""; - document.cookie = name+"="+value+expires+"; path=/"; - }, - - setCookie: function (name,value,days,path,domain,secure) { - var date = new Date(); - date.setTime(date.getTime()+(days*24*60*60*1000)); - - document.cookie = name + "=" + escape (value) + - ((days) ? "; expires=" + date.toGMTString() : "") + - ((path) ? "; path=" + path : "") + - ((domain) ? "; domain=" + domain : "") + - ((secure) ? "; secure" : ""); - }, - - readAllCookies: function() { - - OWA.debug('Reading all cookies...'); - //var dhash = ''; - var jar = {}; - //var nameEQ = name + "="; - var ca = document.cookie.split(';'); - - if (ca) { - OWA.debug(document.cookie); - for(var i=0;i < ca.length;i++) { - - cat = OWA.util.trim(ca[i]); - var pos = OWA.util.strpos(cat, '='); - var key = cat.substring(0,pos); - var value = cat.substring(pos+1, cat.length); - //OWA.debug('key %s, value %s', key, value); - // create cookie jar array for that key - // this is needed because you can have multiple cookies with the same name - if ( ! jar.hasOwnProperty(key) ) { - jar[key] = []; - } - // add the value to the array - jar[key].push(value); - } - - OWA.debug(JSON.stringify(jar)); - return jar; - } - }, - - /** - * Reads and returns values from cookies. - * - * NOTE: this function returns an array of values as there can be - * more than one cookie with the same name. - * - * @return array - */ - readCookie: function (name) { - OWA.debug('Attempting to read cookie: %s', name); - var jar = OWA.util.readAllCookies(); - if ( jar ) { - if ( jar.hasOwnProperty(name) ) { - return jar[name]; - } else { - return ''; - } - } - }, - - eraseCookie: function (name, domain) { - OWA.debug(document.cookie); - if ( ! domain ) { - domain = OWA.getSetting('cookie_domain') || document.domain; - } - OWA.debug("erasing cookie: " + name + " in domain: " +domain); - this.setCookie(name,"",-1,"/",domain); - // attempt to read the cookie again to see if its there under another valid domain - var test = OWA.util.readCookie(name); - // if so then try the alternate domain - if (test) { - - var period = domain.substr(0,1); - OWA.debug('period: '+period); - if (period === '.') { - var domain2 = domain.substr(1); - OWA.debug("erasing " + name + " in domain2: " + domain2); - this.setCookie(name,"",-2,"/", domain2); - - - } else { - // domain = '.'+ domain - OWA.debug("erasing " + name + " in domain3: " + domain); - this.setCookie(name,"",-2,"/",domain); - } - //OWA.debug("erasing " + name + " in domain: "); - //this.setCookie(name,"",-2,"/"); - } - - }, - - eraseMultipleCookies: function(names, domain) { - - for (var i=0; i < names.length; i++) { - this.eraseCookie(names[i], domain); - } - }, - - loadScript: function (url, callback){ - - return LazyLoad.js(url, callback); - }, - - loadCss: function (url, callback){ - - return LazyLoad.css(url, callback); - }, - - parseCookieString: function parseQuery(v) { - var queryAsAssoc = new Array(); - var queryString = unescape(v); - var keyValues = queryString.split("|||"); - //alert(keyValues); - for (var i in keyValues) { - if (keyValues.hasOwnProperty(i)) { - var key = keyValues[i].split("=>"); - queryAsAssoc[key[0]] = key[1]; - } - //alert(key[0] +"="+ key[1]); - } - - return queryAsAssoc; - }, - - parseCookieStringToJson: function parseQuery(v) { - var queryAsObj = new Object; - var queryString = unescape(v); - var keyValues = queryString.split("|||"); - //alert(keyValues); - for (var i in keyValues) { - if (keyValues.hasOwnProperty(i)) { - var key = keyValues[i].split("=>"); - queryAsObj[key[0]] = key[1]; - //alert(key[0] +"="+ key[1]); - } - } - //alert (queryAsObj.period); - return queryAsObj; - }, - - nsParams: function(obj) { - var new_obj = new Object; - - for(param in obj) { - if (obj.hasOwnProperty(param)) { - new_obj['owa_'+ param] = obj[param]; - } - } - - return new_obj; - }, - - urlEncode : function(str) { - // URL-encodes string - // - // version: 1009.2513 - // discuss at: http://phpjs.org/functions/urlencode - // + original by: Philip Peterson - // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) - // + input by: AJ - // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) - // + improved by: Brett Zamir (http://brett-zamir.me) - // + bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) - // + input by: travc - // + input by: Brett Zamir (http://brett-zamir.me) - // + bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) - // + improved by: Lars Fischer - // + input by: Ratheous - // + reimplemented by: Brett Zamir (http://brett-zamir.me) - // + bugfixed by: Joris - // + reimplemented by: Brett Zamir (http://brett-zamir.me) - // % note 1: This reflects PHP 5.3/6.0+ behavior - // % note 2: Please be aware that this function expects to encode into UTF-8 encoded strings, as found on - // % note 2: pages served as UTF-8 - // * example 1: urlencode('Kevin van Zonneveld!'); - // * returns 1: 'Kevin+van+Zonneveld%21' - // * example 2: urlencode('http://kevin.vanzonneveld.net/'); - // * returns 2: 'http%3A%2F%2Fkevin.vanzonneveld.net%2F' - // * example 3: urlencode('http://www.google.nl/search?q=php.js&ie=utf-8&oe=utf-8&aq=t&rls=com.ubuntu:en-US:unofficial&client=firefox-a'); - // * returns 3: 'http%3A%2F%2Fwww.google.nl%2Fsearch%3Fq%3Dphp.js%26ie%3Dutf-8%26oe%3Dutf-8%26aq%3Dt%26rls%3Dcom.ubuntu%3Aen-US%3Aunofficial%26client%3Dfirefox-a' - str = (str+'').toString(); - - // Tilde should be allowed unescaped in future versions of PHP (as reflected below), but if you want to reflect current - // PHP behavior, you would need to add ".replace(/~/g, '%7E');" to the following. - return encodeURIComponent(str).replace(/!/g, '%21').replace(/'/g, '%27').replace(/\(/g, '%28').replace(/\)/g, '%29').replace(/\*/g, '%2A').replace(/%20/g, '+'); - - }, - - urldecode : function (str) { - // Decodes URL-encoded string - // - // version: 1008.1718 - // discuss at: http://phpjs.org/functions/urldecode - // + original by: Philip Peterson - // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) - // + input by: AJ - // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) - // + improved by: Brett Zamir (http://brett-zamir.me) - // + input by: travc - // + input by: Brett Zamir (http://brett-zamir.me) - // + bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) - // + improved by: Lars Fischer - // + input by: Ratheous - // + improved by: Orlando - // + reimplemented by: Brett Zamir (http://brett-zamir.me) - // + bugfixed by: Rob - // % note 1: info on what encoding functions to use from: http://xkr.us/articles/javascript/encode-compare/ - // % note 2: Please be aware that this function expects to decode from UTF-8 encoded strings, as found on - // % note 2: pages served as UTF-8 - // * example 1: urldecode('Kevin+van+Zonneveld%21'); - // * returns 1: 'Kevin van Zonneveld!' - // * example 2: urldecode('http%3A%2F%2Fkevin.vanzonneveld.net%2F'); - // * returns 2: 'http://kevin.vanzonneveld.net/' - // * example 3: urldecode('http%3A%2F%2Fwww.google.nl%2Fsearch%3Fq%3Dphp.js%26ie%3Dutf-8%26oe%3Dutf-8%26aq%3Dt%26rls%3Dcom.ubuntu%3Aen-US%3Aunofficial%26client%3Dfirefox-a'); - // * returns 3: 'http://www.google.nl/search?q=php.js&ie=utf-8&oe=utf-8&aq=t&rls=com.ubuntu:en-US:unofficial&client=firefox-a' - - return decodeURIComponent(str.replace(/\+/g, '%20')); - }, - - parseUrlParams : function(url) { - - var _GET = {}; - for(var i,a,m,n,o,v,p=location.href.split(/[?&]/),l=p.length,k=1;k'; - outer = outer || '|||'; - - if (str){ - - if (!this.strpos(str, inner)) { - - return str; - - } else { - - var assoc = {}; - outer_array = str.split(outer); - //OWA.debug('outer array: %s', JSON.stringify(outer_array)); - for (var i = 0, n = outer_array.length; i < n; i++) { - - var inside_array = outer_array[i].split(inner); - - assoc[inside_array[0]] = inside_array[1]; - } - } - - //OWA.debug('jsonFromAssocString: ' + JSON.stringify(assoc)); - return assoc; - } - }, - - assocStringFromJson : function(obj) { - - var string = ''; - var i = 0; - var count = OWA.util.countObjectProperties(obj); - - for (prop in obj) { - i++; - string += prop + '=>' + obj[prop]; - - if (i < count) { - string += '|||'; - } - } - //OWA.debug('OWA.util.assocStringFromJson: %s', string); - return string; - - }, - - getDomainFromUrl : function (url, strip_www) { - - var domain = url.split(/\/+/g)[1]; - - if (strip_www === true) { - var fp = domain.split('.')[0]; - - if (fp === 'www') { - return domain.substring(4); - } else { - return domain; - } - - } else { - return domain; - } - }, - - getCurrentUnixTimestamp : function() { - return Math.round(new Date().getTime() / 1000); - }, - - generateHash : function(value) { - - return this.crc32(value); - }, - - generateRandomGuid : function(salt) { - var time = this.getCurrentUnixTimestamp(); - var random = this.rand(); - return this.generateHash(time + random + salt); - }, - - crc32 : function ( str ) { - // Calculate the crc32 polynomial of a string - // - // version: 1008.1718 - // discuss at: http://phpjs.org/functions/crc32 - // + original by: Webtoolkit.info (http://www.webtoolkit.info/) - // + improved by: T0bsn - // - depends on: utf8_encode - // * example 1: crc32('Kevin van Zonneveld'); - // * returns 1: 1249991249 - str = this.utf8_encode(str); - var table = "00000000 77073096 EE0E612C 990951BA 076DC419 706AF48F E963A535 9E6495A3 0EDB8832 79DCB8A4 E0D5E91E 97D2D988 09B64C2B 7EB17CBD E7B82D07 90BF1D91 1DB71064 6AB020F2 F3B97148 84BE41DE 1ADAD47D 6DDDE4EB F4D4B551 83D385C7 136C9856 646BA8C0 FD62F97A 8A65C9EC 14015C4F 63066CD9 FA0F3D63 8D080DF5 3B6E20C8 4C69105E D56041E4 A2677172 3C03E4D1 4B04D447 D20D85FD A50AB56B 35B5A8FA 42B2986C DBBBC9D6 ACBCF940 32D86CE3 45DF5C75 DCD60DCF ABD13D59 26D930AC 51DE003A C8D75180 BFD06116 21B4F4B5 56B3C423 CFBA9599 B8BDA50F 2802B89E 5F058808 C60CD9B2 B10BE924 2F6F7C87 58684C11 C1611DAB B6662D3D 76DC4190 01DB7106 98D220BC EFD5102A 71B18589 06B6B51F 9FBFE4A5 E8B8D433 7807C9A2 0F00F934 9609A88E E10E9818 7F6A0DBB 086D3D2D 91646C97 E6635C01 6B6B51F4 1C6C6162 856530D8 F262004E 6C0695ED 1B01A57B 8208F4C1 F50FC457 65B0D9C6 12B7E950 8BBEB8EA FCB9887C 62DD1DDF 15DA2D49 8CD37CF3 FBD44C65 4DB26158 3AB551CE A3BC0074 D4BB30E2 4ADFA541 3DD895D7 A4D1C46D D3D6F4FB 4369E96A 346ED9FC AD678846 DA60B8D0 44042D73 33031DE5 AA0A4C5F DD0D7CC9 5005713C 270241AA BE0B1010 C90C2086 5768B525 206F85B3 B966D409 CE61E49F 5EDEF90E 29D9C998 B0D09822 C7D7A8B4 59B33D17 2EB40D81 B7BD5C3B C0BA6CAD EDB88320 9ABFB3B6 03B6E20C 74B1D29A EAD54739 9DD277AF 04DB2615 73DC1683 E3630B12 94643B84 0D6D6A3E 7A6A5AA8 E40ECF0B 9309FF9D 0A00AE27 7D079EB1 F00F9344 8708A3D2 1E01F268 6906C2FE F762575D 806567CB 196C3671 6E6B06E7 FED41B76 89D32BE0 10DA7A5A 67DD4ACC F9B9DF6F 8EBEEFF9 17B7BE43 60B08ED5 D6D6A3E8 A1D1937E 38D8C2C4 4FDFF252 D1BB67F1 A6BC5767 3FB506DD 48B2364B D80D2BDA AF0A1B4C 36034AF6 41047A60 DF60EFC3 A867DF55 316E8EEF 4669BE79 CB61B38C BC66831A 256FD2A0 5268E236 CC0C7795 BB0B4703 220216B9 5505262F C5BA3BBE B2BD0B28 2BB45A92 5CB36A04 C2D7FFA7 B5D0CF31 2CD99E8B 5BDEAE1D 9B64C2B0 EC63F226 756AA39C 026D930A 9C0906A9 EB0E363F 72076785 05005713 95BF4A82 E2B87A14 7BB12BAE 0CB61B38 92D28E9B E5D5BE0D 7CDCEFB7 0BDBDF21 86D3D2D4 F1D4E242 68DDB3F8 1FDA836E 81BE16CD F6B9265B 6FB077E1 18B74777 88085AE6 FF0F6A70 66063BCA 11010B5C 8F659EFF F862AE69 616BFFD3 166CCF45 A00AE278 D70DD2EE 4E048354 3903B3C2 A7672661 D06016F7 4969474D 3E6E77DB AED16A4A D9D65ADC 40DF0B66 37D83BF0 A9BCAE53 DEBB9EC5 47B2CF7F 30B5FFE9 BDBDF21C CABAC28A 53B39330 24B4A3A6 BAD03605 CDD70693 54DE5729 23D967BF B3667A2E C4614AB8 5D681B02 2A6F2B94 B40BBE37 C30C8EA1 5A05DF1B 2D02EF8D"; - - var crc = 0; - var x = 0; - var y = 0; - - crc = crc ^ (-1); - for (var i = 0, iTop = str.length; i < iTop; i++) { - y = ( crc ^ str.charCodeAt( i ) ) & 0xFF; - x = "0x" + table.substr( y * 9, 8 ); - crc = ( crc >>> 8 ) ^ x; - } - - return crc ^ (-1); - }, - - utf8_encode : function ( argString ) { - // Encodes an ISO-8859-1 string to UTF-8 - // - // version: 1009.2513 - // discuss at: http://phpjs.org/functions/utf8_encode - // + original by: Webtoolkit.info (http://www.webtoolkit.info/) - // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) - // + improved by: sowberry - // + tweaked by: Jack - // + bugfixed by: Onno Marsman - // + improved by: Yves Sucaet - // + bugfixed by: Onno Marsman - // + bugfixed by: Ulrich - // * example 1: utf8_encode('Kevin van Zonneveld'); - // * returns 1: 'Kevin van Zonneveld' - var string = (argString+''); // .replace(/\r\n/g, "\n").replace(/\r/g, "\n"); - - var utftext = ""; - var start, end; - var stringl = 0; - - start = end = 0; - stringl = string.length; - for (var n = 0; n < stringl; n++) { - var c1 = string.charCodeAt(n); - var enc = null; - - if (c1 < 128) { - end++; - } else if (c1 > 127 && c1 < 2048) { - enc = String.fromCharCode((c1 >> 6) | 192) + String.fromCharCode((c1 & 63) | 128); - } else { - enc = String.fromCharCode((c1 >> 12) | 224) + String.fromCharCode(((c1 >> 6) & 63) | 128) + String.fromCharCode((c1 & 63) | 128); - } - if (enc !== null) { - if (end > start) { - utftext += string.substring(start, end); - } - utftext += enc; - start = end = n+1; - } - } - - if (end > start) { - utftext += string.substring(start, string.length); - } - - return utftext; - }, - - utf8_decode : function( str_data ) { - // Converts a UTF-8 encoded string to ISO-8859-1 - // - // version: 1009.2513 - // discuss at: http://phpjs.org/functions/utf8_decode - // + original by: Webtoolkit.info (http://www.webtoolkit.info/) - // + input by: Aman Gupta - // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) - // + improved by: Norman "zEh" Fuchs - // + bugfixed by: hitwork - // + bugfixed by: Onno Marsman - // + input by: Brett Zamir (http://brett-zamir.me) - // + bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) - // * example 1: utf8_decode('Kevin van Zonneveld'); - // * returns 1: 'Kevin van Zonneveld' - var tmp_arr = [], i = 0, ac = 0, c1 = 0, c2 = 0, c3 = 0; - - str_data += ''; - - while ( i < str_data.length ) { - c1 = str_data.charCodeAt(i); - if (c1 < 128) { - tmp_arr[ac++] = String.fromCharCode(c1); - i++; - } else if ((c1 > 191) && (c1 < 224)) { - c2 = str_data.charCodeAt(i+1); - tmp_arr[ac++] = String.fromCharCode(((c1 & 31) << 6) | (c2 & 63)); - i += 2; - } else { - c2 = str_data.charCodeAt(i+1); - c3 = str_data.charCodeAt(i+2); - tmp_arr[ac++] = String.fromCharCode(((c1 & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63)); - i += 3; - } - } - - return tmp_arr.join(''); - }, - - trim : function (str, charlist) { - // Strips whitespace from the beginning and end of a string - // - // version: 1009.2513 - // discuss at: http://phpjs.org/functions/trim - // + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) - // + improved by: mdsjack (http://www.mdsjack.bo.it) - // + improved by: Alexander Ermolaev (http://snippets.dzone.com/user/AlexanderErmolaev) - // + input by: Erkekjetter - // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) - // + input by: DxGx - // + improved by: Steven Levithan (http://blog.stevenlevithan.com) - // + tweaked by: Jack - // + bugfixed by: Onno Marsman - // * example 1: trim(' Kevin van Zonneveld '); - // * returns 1: 'Kevin van Zonneveld' - // * example 2: trim('Hello World', 'Hdle'); - // * returns 2: 'o Wor' - // * example 3: trim(16, 1); - // * returns 3: 6 - var whitespace, l = 0, i = 0; - str += ''; - - if (!charlist) { - // default list - whitespace = " \n\r\t\f\x0b\xa0\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u3000"; - } else { - // preg_quote custom list - charlist += ''; - whitespace = charlist.replace(/([\[\]\(\)\.\?\/\*\{\}\+\$\^\:])/g, '$1'); - } - - l = str.length; - for (i = 0; i < l; i++) { - if (whitespace.indexOf(str.charAt(i)) === -1) { - str = str.substring(i); - break; - } - } - - l = str.length; - for (i = l - 1; i >= 0; i--) { - if (whitespace.indexOf(str.charAt(i)) === -1) { - str = str.substring(0, i + 1); - break; - } - } - - return whitespace.indexOf(str.charAt(0)) === -1 ? str : ''; - }, - - rand : function(min, max) { - // Returns a random number - // - // version: 1008.1718 - // discuss at: http://phpjs.org/functions/rand - // + original by: Leslie Hoare - // + bugfixed by: Onno Marsman - // * example 1: rand(1, 1); - // * returns 1: 1 - - var argc = arguments.length; - if (argc === 0) { - min = 0; - max = 2147483647; - } else if (argc === 1) { - throw new Error('Warning: rand() expects exactly 2 parameters, 1 given'); - } - return Math.floor(Math.random() * (max - min + 1)) + min; - }, - - base64_encode: function (data) { - // Encodes string using MIME base64 algorithm - // - // version: 1009.2513 - // discuss at: http://phpjs.org/functions/base64_encode - // + original by: Tyler Akins (http://rumkin.com) - // + improved by: Bayron Guevara - // + improved by: Thunder.m - // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) - // + bugfixed by: Pellentesque Malesuada - // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) - // - depends on: utf8_encode - // * example 1: base64_encode('Kevin van Zonneveld'); - // * returns 1: 'S2V2aW4gdmFuIFpvbm5ldmVsZA==' - // mozilla has this native - // - but breaks in 2.0.0.12! - //if (typeof this.window['atob'] == 'function') { - // return atob(data); - //} - - var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; - var o1, o2, o3, h1, h2, h3, h4, bits, i = 0, ac = 0, enc="", tmp_arr = []; - - if (!data) { - return data; - } - - data = this.utf8_encode(data+''); - - do { // pack three octets into four hexets - o1 = data.charCodeAt(i++); - o2 = data.charCodeAt(i++); - o3 = data.charCodeAt(i++); - - bits = o1<<16 | o2<<8 | o3; - - h1 = bits>>18 & 0x3f; - h2 = bits>>12 & 0x3f; - h3 = bits>>6 & 0x3f; - h4 = bits & 0x3f; - - // use hexets to index into b64, and append result to encoded string - tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4); - } while (i < data.length); - - enc = tmp_arr.join(''); - - switch (data.length % 3) { - case 1: - enc = enc.slice(0, -2) + '=='; - break; - case 2: - enc = enc.slice(0, -1) + '='; - break; - } - - return enc; - }, - - base64_decode: function (data) { - // Decodes string using MIME base64 algorithm - // - // version: 1009.2513 - // discuss at: http://phpjs.org/functions/base64_decode - // + original by: Tyler Akins (http://rumkin.com) - // + improved by: Thunder.m - // + input by: Aman Gupta - // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) - // + bugfixed by: Onno Marsman - // + bugfixed by: Pellentesque Malesuada - // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) - // + input by: Brett Zamir (http://brett-zamir.me) - // + bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) - // - depends on: utf8_decode - // * example 1: base64_decode('S2V2aW4gdmFuIFpvbm5ldmVsZA=='); - // * returns 1: 'Kevin van Zonneveld' - // mozilla has this native - // - but breaks in 2.0.0.12! - //if (typeof this.window['btoa'] == 'function') { - // return btoa(data); - //} - - var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; - var o1, o2, o3, h1, h2, h3, h4, bits, i = 0, ac = 0, dec = "", tmp_arr = []; - - if (!data) { - return data; - } - - data += ''; - - do { // unpack four hexets into three octets using index points in b64 - h1 = b64.indexOf(data.charAt(i++)); - h2 = b64.indexOf(data.charAt(i++)); - h3 = b64.indexOf(data.charAt(i++)); - h4 = b64.indexOf(data.charAt(i++)); - - bits = h1<<18 | h2<<12 | h3<<6 | h4; - - o1 = bits>>16 & 0xff; - o2 = bits>>8 & 0xff; - o3 = bits & 0xff; - - if (h3 == 64) { - tmp_arr[ac++] = String.fromCharCode(o1); - } else if (h4 == 64) { - tmp_arr[ac++] = String.fromCharCode(o1, o2); - } else { - tmp_arr[ac++] = String.fromCharCode(o1, o2, o3); - } - } while (i < data.length); - - dec = tmp_arr.join(''); - dec = this.utf8_decode(dec); - - return dec; - }, - - sprintf : function( ) { - // Return a formatted string - // - // version: 1009.2513 - // discuss at: http://phpjs.org/functions/sprintf - // + original by: Ash Searle (http://hexmen.com/blog/) - // + namespaced by: Michael White (http://getsprink.com) - // + tweaked by: Jack - // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) - // + input by: Paulo Freitas - // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) - // + input by: Brett Zamir (http://brett-zamir.me) - // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) - // * example 1: sprintf("%01.2f", 123.1); - // * returns 1: 123.10 - // * example 2: sprintf("[%10s]", 'monkey'); - // * returns 2: '[ monkey]' - // * example 3: sprintf("[%'#10s]", 'monkey'); - // * returns 3: '[####monkey]' - var regex = /%%|%(\d+\$)?([-+\'#0 ]*)(\*\d+\$|\*|\d+)?(\.(\*\d+\$|\*|\d+))?([scboxXuidfegEG])/g; - var a = arguments, i = 0, format = a[i++]; - - // pad() - var pad = function (str, len, chr, leftJustify) { - if (!chr) {chr = ' ';} - var padding = (str.length >= len) ? '' : Array(1 + len - str.length >>> 0).join(chr); - return leftJustify ? str + padding : padding + str; - }; - - // justify() - var justify = function (value, prefix, leftJustify, minWidth, zeroPad, customPadChar) { - var diff = minWidth - value.length; - if (diff > 0) { - if (leftJustify || !zeroPad) { - value = pad(value, minWidth, customPadChar, leftJustify); - } else { - value = value.slice(0, prefix.length) + pad('', diff, '0', true) + value.slice(prefix.length); - } - } - return value; - }; - - // formatBaseX() - var formatBaseX = function (value, base, prefix, leftJustify, minWidth, precision, zeroPad) { - // Note: casts negative numbers to positive ones - var number = value >>> 0; - prefix = prefix && number && {'2': '0b', '8': '0', '16': '0x'}[base] || ''; - value = prefix + pad(number.toString(base), precision || 0, '0', false); - return justify(value, prefix, leftJustify, minWidth, zeroPad); - }; - - // formatString() - var formatString = function (value, leftJustify, minWidth, precision, zeroPad, customPadChar) { - if (precision != null) { - value = value.slice(0, precision); - } - return justify(value, '', leftJustify, minWidth, zeroPad, customPadChar); - }; - - // doFormat() - var doFormat = function (substring, valueIndex, flags, minWidth, _, precision, type) { - var number; - var prefix; - var method; - var textTransform; - var value; - - if (substring == '%%') {return '%';} - - // parse flags - var leftJustify = false, positivePrefix = '', zeroPad = false, prefixBaseX = false, customPadChar = ' '; - var flagsl = flags.length; - for (var j = 0; flags && j < flagsl; j++) { - switch (flags.charAt(j)) { - case ' ': positivePrefix = ' '; break; - case '+': positivePrefix = '+'; break; - case '-': leftJustify = true; break; - case "'": customPadChar = flags.charAt(j+1); break; - case '0': zeroPad = true; break; - case '#': prefixBaseX = true; break; - } - } - - // parameters may be null, undefined, empty-string or real valued - // we want to ignore null, undefined and empty-string values - if (!minWidth) { - minWidth = 0; - } else if (minWidth == '*') { - minWidth = +a[i++]; - } else if (minWidth.charAt(0) == '*') { - minWidth = +a[minWidth.slice(1, -1)]; - } else { - minWidth = +minWidth; - } - - // Note: undocumented perl feature: - if (minWidth < 0) { - minWidth = -minWidth; - leftJustify = true; - } - - if (!isFinite(minWidth)) { - throw new Error('sprintf: (minimum-)width must be finite'); - } - - if (!precision) { - precision = 'fFeE'.indexOf(type) > -1 ? 6 : (type == 'd') ? 0 : undefined; - } else if (precision == '*') { - precision = +a[i++]; - } else if (precision.charAt(0) == '*') { - precision = +a[precision.slice(1, -1)]; - } else { - precision = +precision; - } - - // grab value using valueIndex if required? - value = valueIndex ? a[valueIndex.slice(0, -1)] : a[i++]; - - switch (type) { - case 's': return formatString(String(value), leftJustify, minWidth, precision, zeroPad, customPadChar); - case 'c': return formatString(String.fromCharCode(+value), leftJustify, minWidth, precision, zeroPad); - case 'b': return formatBaseX(value, 2, prefixBaseX, leftJustify, minWidth, precision, zeroPad); - case 'o': return formatBaseX(value, 8, prefixBaseX, leftJustify, minWidth, precision, zeroPad); - case 'x': return formatBaseX(value, 16, prefixBaseX, leftJustify, minWidth, precision, zeroPad); - case 'X': return formatBaseX(value, 16, prefixBaseX, leftJustify, minWidth, precision, zeroPad).toUpperCase(); - case 'u': return formatBaseX(value, 10, prefixBaseX, leftJustify, minWidth, precision, zeroPad); - case 'i': - case 'd': - number = parseInt(+value, 10); - prefix = number < 0 ? '-' : positivePrefix; - value = prefix + pad(String(Math.abs(number)), precision, '0', false); - return justify(value, prefix, leftJustify, minWidth, zeroPad); - case 'e': - case 'E': - case 'f': - case 'F': - case 'g': - case 'G': - number = +value; - prefix = number < 0 ? '-' : positivePrefix; - method = ['toExponential', 'toFixed', 'toPrecision']['efg'.indexOf(type.toLowerCase())]; - textTransform = ['toString', 'toUpperCase']['eEfFgG'.indexOf(type) % 2]; - value = prefix + Math.abs(number)[method](precision); - return justify(value, prefix, leftJustify, minWidth, zeroPad)[textTransform](); - default: return substring; - } - }; - - return format.replace(regex, doFormat); - }, - - clone : function (mixed) { - - var newObj = (mixed instanceof Array) ? [] : {}; - for (i in mixed) { - if (mixed[i] && (typeof mixed[i] == "object") ) { - newObj[i] = OWA.util.clone(mixed[i]); - } else { - newObj[i] = mixed[i]; - } - } - return newObj; - }, - - strtolower : function( str ) { - - return (str+'').toLowerCase(); - }, - - in_array : function(needle, haystack, argStrict) { - // Checks if the given value exists in the array - // - // version: 1008.1718 - // discuss at: http://phpjs.org/functions/in_array - // + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) - // + improved by: vlado houba - // + input by: Billy - // + bugfixed by: Brett Zamir (http://brett-zamir.me) - // * example 1: in_array('van', ['Kevin', 'van', 'Zonneveld']); - // * returns 1: true - // * example 2: in_array('vlado', {0: 'Kevin', vlado: 'van', 1: 'Zonneveld'}); - // * returns 2: false - // * example 3: in_array(1, ['1', '2', '3']); - // * returns 3: true - // * example 3: in_array(1, ['1', '2', '3'], false); - // * returns 3: true - // * example 4: in_array(1, ['1', '2', '3'], true); - // * returns 4: false - var key = '', strict = !!argStrict; - - if (strict) { - for (key in haystack) { - if (haystack[key] === needle) { - return true; - } - } - } else { - for (key in haystack) { - if (haystack[key] == needle) { - return true; - } - } - } - - return false; - }, - - dechex: function (number) { - // Returns a string containing a hexadecimal representation of the given number - // - // version: 1009.2513 - // discuss at: http://phpjs.org/functions/dechex - // + original by: Philippe Baumann - // + bugfixed by: Onno Marsman - // + improved by: http://stackoverflow.com/questions/57803/how-to-convert-decimal-to-hex-in-javascript - // + input by: pilus - // * example 1: dechex(10); - // * returns 1: 'a' - // * example 2: dechex(47); - // * returns 2: '2f' - // * example 3: dechex(-1415723993); - // * returns 3: 'ab9dc427' - if (number < 0) { - number = 0xFFFFFFFF + number + 1; - } - return parseInt(number, 10).toString(16); - }, - - explode: function (delimiter, string, limit) { - // Splits a string on string separator and return array of components. - // If limit is positive only limit number of components is returned. - // If limit is negative all components except the last abs(limit) are returned. - // - // version: 1009.2513 - // discuss at: http://phpjs.org/functions/explode - // + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) - // + improved by: kenneth - // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) - // + improved by: d3x - // + bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) - // * example 1: explode(' ', 'Kevin van Zonneveld'); - // * returns 1: {0: 'Kevin', 1: 'van', 2: 'Zonneveld'} - // * example 2: explode('=', 'a=bc=d', 2); - // * returns 2: ['a', 'bc=d'] - - var emptyArray = { 0: '' }; - - // third argument is not required - if ( arguments.length < 2 || - typeof arguments[0] == 'undefined' || - typeof arguments[1] == 'undefined' ) { - return null; - } - - if ( delimiter === '' || - delimiter === false || - delimiter === null ) { - return false; - } - - if ( typeof delimiter == 'function' || - typeof delimiter == 'object' || - typeof string == 'function' || - typeof string == 'object' ) { - return emptyArray; - } - - if ( delimiter === true ) { - delimiter = '1'; - } - - if (!limit) { - return string.toString().split(delimiter.toString()); - } else { - // support for limit argument - var splitted = string.toString().split(delimiter.toString()); - var partA = splitted.splice(0, limit - 1); - var partB = splitted.join(delimiter.toString()); - partA.push(partB); - return partA; - } - } -} --- a/owa/modules/base/js/owa.map.js +++ /dev/null @@ -1,89 +1,1 @@ -OWA.map = function() { - - return; -} -OWA.map.prototype = { - - markers: new Object, - - config: '', - - dom_id: 'map', - - height: "100%", - - width: "100%", - - mapType: '', - - placeMarkers: function() { - - var lvmarkers = this.markers; - var dom_id = this.dom_id; - var mType = this.getMapSettings(); - - - jQuery(document).ready(function(){ - - jQuery('#'+ dom_id).jmap('init', mType); - - for(k in lvmarkers) { - - jQuery('#'+ dom_id).jmap('AddMarker', lvmarkers[k]); - - } - - }); - - return; - - }, - - getMapSettings: function() { - - switch(this.mapType) { - - case 'earth': - return {'mapType': G_SATELLITE_3D_MAP,'mapZoom': 3,'mapCenter':[30.958639, -90.162516], 'mapShowjMapsIcon': false, 'mapEnableType': true, 'mapEnableOverview': true}; - - break; - - default: - - return {'mapType': G_NORMAL_MAP,'mapZoom': 2,'mapCenter':[8.958639, -3.162516], 'mapShowjMapsIcon': false, 'mapEnableType': true, 'mapEnableOverview': true}; - - - } - - }, - - reloadMap: function(t) { - - this.mapType = t; - this.placeMarkers(); - return; - } - -} - -// Bind event handlers -jQuery(document).ready(function(){ - //jQuery.getScript(OWA.config.js_url + "includes/jquery/tablesorter/jquery.tablesorter.js"); - jQuery('.owa_map-type-control').click(owa_map_changeView); - -}); - -function owa_map_changeView() { - - // get the map id - var dom_id = jQuery(this).siblings('.jmap').get(0).id; - var type = jQuery(this).attr('maptype'); - OWA.items[dom_id].reloadMap(type); - return; - -} - - - - --- a/owa/modules/base/js/owa.player.js +++ /dev/null @@ -1,322 +1,1 @@ -// -// Open Web Analytics - An Open Source Web Analytics Framework -// -// Copyright 2010 Peter Adams. All rights reserved. -// -// Licensed under GPL v2.0 http://www.gnu.org/copyleft/gpl.html -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// $Id$ -// -/** - * Javascript Domstream Player Library - * - * @author Peter Adams - * @web Open Web Analytics - * @copyright Copyright © 2006-2010 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.2.1 - */ - -OWA.player = function() { - - OWA.util.loadScript(OWA.getSetting('baseUrl')+'/modules/base/js/includes/jquery/jquery-1.3.2.min.js', function(){}); - OWA.util.loadScript(OWA.getSetting('baseUrl')+'/modules/base/js/includes/jquery/jquery.jgrowl_minimized.js', function(){}); - OWA.util.loadCss(OWA.getSetting('baseUrl')+'/modules/base/css/jquery.jgrowl.css', function(){}); - OWA.util.loadCss(OWA.getSetting('baseUrl')+'/modules/base/css/owa.overlay.css', function(){}); - this.fetchData(); - this.showPlayerControls(); - -} - -OWA.player.prototype = { - - timer : null, - queue_step : 1, - queue_count : 0, - animateInterval : 250, - stream : null, - lock : false, - - block : function() { - this.lock = true; - }, - - unblock : function() { - this.lock = false; - }, - - load : function(data) { - - this.stream = data; - // count the events in the queue - this.queue_count = this.stream.events.length; - }, - - /** - * Fetches data via ajax request - */ - fetchData: function() { - - var p = OWA.util.readCookie('owa_overlay'); - //alert(unescape(p)); - var params = OWA.util.parseCookieStringToJson(p); - params.action = 'getDomstream'; - - //closure - var that = this; - - jQuery.ajax({ - url: OWA.getApiEndpoint(), - data: OWA.util.nsParams(params), - dataType: 'jsonp', - jsonp: 'owa_jsonpCallback', - success: function(data) { - that.load(data); - } - }); - - //OWA.debug(data.page); - }, - - - moveCursor : function(x, y) { - this.block(); - jQuery('#owa-cursor').animate({top: y +'px', left: x +'px'}, { queue:true, duration:100}, 'swing', this.unblock()); - //console.log("Moving to X: %s Y: %s", x, y); - this.setStatus("Mouse Movement to: "+x+", "+y); - }, - - scrollViewport : function(x, y) { - - //jQuery('html, body').animate({scrollTop: y}, 0); - window.scroll(0,y) - //console.log("Scrolling to Y: %s", y); - this.setStatus("Scrolling to: "+ y); - }, - - start : function() { - - var that = this; - this.timer = setInterval(function(){that.step()}, this.animateInterval); - }, - - step : function() { - - if (this.lock) { - OWA.debug("Can not step as player is locked"); - return; - } - - if (this.queue_count === 0) { - this.stop(); - } else if ((this.queue_count > 0) && (this.queue_step >= this.queue_count)) { - this.stop(); - } else { - // get the next event in the queue - var event = this.getNextEvent(); - // trigger dom stream events - //jQuery().trigger(event.event_type, [event]); - this.playEvent(event); - } - }, - - getNextEvent : function() { - OWA.debug("Queue step is: "+ this.queue_step); - var event = this.stream.events[this.queue_step]; - OWA.debug("getting event... " + event.event_type); - // increment the queue step - this.queue_step++; - return event; - }, - - playEvent : function(event) { - OWA.debug("playing event of type: " + event.event_type); - switch (event.event_type) { - case 'dom.movement': - return this.movementEventHandler(event); - case 'dom.scroll': - return this.scrollEventHandler(event); - case 'dom.keypress': - return this.keypressEventHandler(event); - case 'dom.click': - return this.clickEventHandler(event); - } - }, - - stop : function() { - - // change control static color - jQuery('#owa_overlay_start').removeClass('active'); - if (!this.timer) return false; - clearInterval(this.timer); - this.setStatus('Ready.'); - - }, - - play : function() { - OWA.debug("Now playing Domstream."); - - if ((this.queue_step = this.queue_count)) { - this.queue_step = 1; - } - - this.start(); - this.setStatus('Playing...'); - }, - - showPlayerControls : function() { - - //create player control bar - var player = '
                      '; - jQuery('body').append(player); - jQuery('#owa_overlay').append(''); //logo - var startlink = '
                      Play
                      '; - jQuery('#owa_overlay').append(startlink); - var pauselink = '
                      Pause
                      '; - jQuery('#owa_overlay').append(pauselink); - var closelink = '
                      Hide
                      '; - jQuery('#owa_overlay').append(closelink); - var status_msg = '
                      ...
                      '; - jQuery('#owa_overlay').append(status_msg); - - //create hidden player controls container - var hiddenplayer = '
                      '; - jQuery('body').append(hiddenplayer); - jQuery("#owa_overlay_hidden").hide(); - - //add cursor - var cursor = '
                      '; - jQuery('body').append(cursor); - - jQuery('#owa_overlay_start').toggleClass('active'); - - // set active color. not sure this works right.... - jQuery('.owa_overlay_control').click( function(){ - jQuery(".owa_overlay_control").removeClass('active'); - jQuery(this).addClass('active'); - }); - - //hide toolbar and make visible the 'show' button - jQuery("#owa_overlay_logo").click(function() { - jQuery("#owa_overlay").slideToggle("fast"); - jQuery("#owa_overlay_hidden").fadeIn("slow"); - }); - - //show toolbar and hide the 'show' button - jQuery("#owa_overlay_hidden").click(function() { - jQuery("#owa_overlay").slideToggle("fast"); - jQuery("#owa_overlay_hidden").fadeOut(); - }); - - //closure - var that = this; - - // start player - jQuery('#owa_player_start').bind('click', function(e) {that.play(e)}); - - // pause player - jQuery('#owa_player_stop').bind('click', function(e) {that.stop(e)}); - - // eliminate overlay cookie when close button is pressed. - jQuery('#owa_player_close').click( function() { - jQuery("#owa_overlay").slideToggle("fast"); - jQuery("#owa_overlay_hidden").fadeIn("slow"); - }); - - // eliminate overlay cookie when window closes. - jQuery(window).unload(function() {OWA.endOverlaySession()}); - }, - - setStatus : function(msg) { - - jQuery('#owa-overlay-status').html(msg); - - }, - - showNotification : function(msg, header) { - jQuery.jGrowl.defaults.position = 'center'; - jQuery.jGrowl.defaults.closer = false; - jQuery.jGrowl.defaults.pool = 1; - jQuery.jGrowl(msg, { - life: 250, - speed: 25, - position: "center", - closer: false, - header: header - }); - - }, - - movementEventHandler : function(e) { - - return this.moveCursor(e.cursor_x, e.cursor_y); - }, - - scrollEventHandler : function(e) { - - this.scrollViewport(e.x, e.y); - }, - - keypressEventHandler : function(event) { - - if (event.dom_element_id != "" || undefined) { - var accessor = '#'+event.dom_element_id; - } else if (event.dom_element_name) { - var accessor = event.dom_element_tag+"[name="+event.dom_element_name+"]"; - //console.log("accessor: %s", accessor); - } - - var element_value = jQuery(accessor).val() || ''; - element_value += event.key_value; - jQuery(accessor).val(element_value); - this.showNotification(event.key_value, "Key Press:"); - this.setStatus("Key Press: " + event.key_value); - }, - - clickEventHandler : function(event) { - - var accessor = ''; - - if (event.dom_element_id != "" && event.dom_element_id != "(not set)" ) { - accessor = '#'+event.dom_element_id; - var accessor_msg = accessor; - } else if (event.dom_element_name != "" && event.dom_element_name != "(not set)" ) { - accessor = event.dom_element_tag+"[name="+event.dom_element_name+"]"; - var accessor_msg = accessor; - //console.log("accessor: %s", accessor); - } else if(event.dom_element_class != "" && event.dom_element_class != "(not set)") { - var accessor_msg = event.dom_element_tag+"."+event.dom_element_class; - } else { - var accessor_msg = event.dom_element_tag; - } - - var d = new Date(); - var id = 'owa-click-marker' + '_' + d.getTime()+1; - var marker = '
                      '; - jQuery('body').append(marker); - jQuery('#'+id).css({'position': 'absolute','left': event.click_x +'px', 'top': event.click_y +'px', 'z-index' : 89}); - - if (accessor) { - jQuery(accessor).click(); - jQuery(accessor).focus(); - } - //jQuery('#owa-latest-click').slideToggle('normal'); - //console.log("Clicking: %s", accessor); - //this.setStatus("Clicking: "+accessor); - this.setStatus("Click @ "+event.click_x+", "+event.click_y); - this.showNotification(accessor_msg, "Clicked On DOM Element:"); - - - } - -} --- a/owa/modules/base/js/owa.report.js +++ /dev/null @@ -1,221 +1,1 @@ -OWA.report = function(dom_id) { - - this.dom_id = dom_id; - this.config = OWA.config; - this.properties = {}; - this.tabs = {}; -} -OWA.report.prototype = { - - options: {}, - - config: '', - - showSiteFilter : function(dom_id) { - - // create dom elements - // ... - - // bind event handlers - that = this; - jQuery('#owa_reportSiteFilterSelect').change( function() { that.reload(); } ); - jQuery("#owa_reportPeriodFilterSubmit").click( function() { that.reload(); } ); - }, - - reload: function() { - - // add new site_id to properties - var siteId = jQuery("#owa_reportSiteFilterSelect option:selected").val(); - OWA.debug(this.properties['action']); - this.properties['siteId'] = siteId; - // reload report - var url = OWA.util.makeUrl(OWA.config.link_template, OWA.config.main_url, this.properties); - window.location.href = url; - }, - - setRequestProperty : function(name, value) { - - this.properties[name] = value; - }, - - _parseDate: function (date) { - - - }, - - setDateRange: function (date) { - - this.properties.startDate = jQuery.datepicker.formatDate('yymmdd', jQuery("#owa_report-datepicker-start").datepicker("getDate")); - this.properties.endDate = jQuery.datepicker.formatDate('yymmdd', jQuery("#owa_report-datepicker-end").datepicker("getDate")); - if (this.properties.startDate != null && this.properties.endDate != null) { - this.setPeriod('date_range'); - } - }, - - setPeriod: function(period) { - - this.properties.period = period; - - if ( this.properties.hasOwnProperty( 'startDate' ) ) { - delete this.properties[ 'startDate' ]; - } - - if ( this.properties.hasOwnProperty( 'endDate' ) ) { - delete this.properties[ 'endDate' ]; - } - }, - - addTab : function(obj) { - - if (obj.dom_id.length > 0 ) { - this.tabs[obj.dom_id] = obj; - } else { - OWA.debug('tab cannot be added with no dom_id set.'); - } - }, - - createTabs : function() { - - var that = this; - - jQuery("#report-tabs").prepend('
                        '); - for (tab in this.tabs) { - - if ( this.tabs.hasOwnProperty(tab) ) { - jQuery("#report-tabs > .report-tabs-nav-list").append(OWA.util.sprintf( '
                      • %s
                      • ', tab, that.tabs[tab].label ) ); - - } - } - - jQuery("#report-tabs").tabs({ - show: function(event, ui) { - OWA.debug('tab selected is: %s', ui.panel.id); - that.tabs[ui.panel.id].load(); - } - }); - - }, - - getSiteId : function() { - - if (this.properties.hasOwnProperty('siteId')) { - - return this.properties.siteId; - } - }, - - getPeriod : function() { - - if (this.properties.hasOwnProperty('period')) { - - return this.properties.period; - } - }, - - getStartDate : function() { - - if (this.properties.hasOwnProperty('startDate')) { - - return this.properties.startDate; - } - - }, - - getEndDate : function() { - - if (this.properties.hasOwnProperty('endDate')) { - - return this.properties.endDate; - } - } -} - -OWA.report.tab = function(dom_id) { - this.dom_id = dom_id; - this.resultSetExplorers = {}; - this.label = 'Default label'; - this.isLoaded = false; - this.load = function() { - if ( ! this.isLoaded ) { - for (rse in this.resultSetExplorers) { - - if (this.resultSetExplorers.hasOwnProperty(rse)) { - - this.resultSetExplorers[rse].load(); - } - - } - - this.isLoaded = true; - } - } -} - -OWA.report.tab.prototype = { - - addRse : function (name, rse) { - - this.resultSetExplorers[name] = rse; - }, - - setLabel : function (label) { - this.label = label; - }, - - setDomId : function (dom_id) { - this.dom_id = dom_id; - } -} - -// Bind event handlers -jQuery(document).ready(function(){ - - jQuery('#owa_reportPeriodFilter').change(owa_reportSetPeriod); - jQuery("#owa_reportPeriodLabelContainer").click(function() { - jQuery("#owa_reportPeriodFiltersContainer").toggle(); - }); - jQuery("#owa_report-datepicker-start, #owa_report-datepicker-end").datepicker({ - beforeShow: customRange, - showOn: "both", - dateFormat: 'mm-dd-yy', - onSelect: function(date) {owa_reportSetDateRange(date);} - - //buttonImage: "templates/images/calendar.gif", - //buttonImageOnly: true - }); - // make tables sortable - //jQuery.tablesorter.defaults.widgets = ['zebra']; - //jQuery('.tablesorter').tablesorter(); - // report side navigaion panels - toggle - jQuery('.owa_admin_nav_topmenu_toggle').click(function () { - jQuery(this).parent().siblings('.owa_admin_nav_subgroup').toggle(); - }); -}); - - -function customRange(input) { - - return {minDate: (input.id == "owa_report-datepicker-end" ? jQuery("#owa_report-datepicker-start").datepicker("getDate") : null), - maxDate: (input.id == "owa_report-datepicker-start" ? jQuery("#owa_report-datepicker-end").datepicker("getDate") : null)}; - -} - -function owa_reportSetDateRange(date) { - - if (date != null) { - var reportname = jQuery('.owa_reportContainer').get(0).id; - OWA.items[reportname].setDateRange(); - OWA.items[reportname].setPeriod('date_range'); - // toggle the drop down to custom data range label - jQuery("#owa_reportPeriodFilter option:contains('Custom Date Range')").attr("selected", true); - } -} - -function owa_reportSetPeriod() { - - var period = jQuery("#owa_reportPeriodFilter option:selected").val(); - var reportname = jQuery(this).parents(".owa_reportContainer").get(0).id; - OWA.items[reportname].setPeriod(period); - OWA.items[reportname].reload(); -} --- a/owa/modules/base/js/owa.resultSetExplorer.js +++ /dev/null @@ -1,1135 +1,1 @@ -// -// Open Web Analytics - An Open Source Web Analytics Framework -// -// Copyright 2010 Peter Adams. All rights reserved. -// -// Licensed under GPL v2.0 http://www.gnu.org/copyleft/gpl.html -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// $Id$ -// -/** - * Result Set Explorer Library - * - * @author Peter Adams - * @web Open Web Analytics - * @copyright Copyright © 2006-2010 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.3.0 - */ - -OWA.resultSetExplorer = function(dom_id, options) { - - this.dom_id = dom_id || ''; - this.gridInit = false; - this.init = { - grid: false, - pieChart: false, - areaChart: false - }; - - this.columnLinks = ''; - this._columnLinksCount = 0; - this.resultSet = []; - this.currentView = ''; - this.currentContainerWidth = ''; - this.currentWindowWidth = ''; - this.view = ''; - this.asyncQueue = []; - - this.domSelectors = { - areaChart: '', - grid: '' - }; - - this.options = { - defaultView: 'grid', - areaChart: { - series:[], - showDots: true, - showLegend: true, - lineWidth: 4 - }, - pieChart: { - metric: '', - dimension: '', - metrics: [], - numSlices: 5 - }, - sparkline: { - metric: '' - }, - grid: { - showRowNumbers: true, - excludeColumns: [], - columnFormatters: {} - }, - template: { - template: '', - params: '', - mode: 'append', - dom_id: '' - }, - metricBoxes: { - width: '' - }, - chart: {showGrid: true}, - chartHeight: 125, - chartWidth:700, - autoResizeCharts: true, - views:['grid', 'areaChart','pie', 'sparkline'] - }; - - this.viewObjects = {}; - this.loadUrl = ''; -}; - -OWA.resultSetExplorer.prototype = { - - //remove - viewMethods: { - grid: 'refreshGrid', - areaChart: 'makeAreaChart', - pie: 'makePieChart', - sparkline: 'makeSparkline', - template: 'renderTemplate' - }, - - setDataLoadUrl : function(url) { - - this.loadUrl = url; - }, - - getOption : function(name) { - - return this.options[name]; - }, - - setView : function(name) { - - this.view = name; - }, - - getAggregates : function() { - - return this.resultSet.aggregates; - }, - - // called after data is rendered for a view - setCurrentView : function(name) { - - jQuery(that.domSelectors[that.currentView]).toggle(); - this.currentView = name; - }, - - getRowValues : function(old) { - - var row = {}; - - for (var item in old) { - - if (old.hasOwnProperty(item)) { - row[item] = old[item].value; - } - } - - return row; - }, - - // makesa unqiue idfor each row - makeRowGuid : function(row) { - - }, - - loadFromArray : function(json, view) { - - if (view) { - this.view = view; - } - - this.loader(json); - - }, - - load : function(url) { - - url = url || this.loadUrl; - this.getResultSet(url); - }, - - displayGrid : function () { - this.injectDomElements(); - this.setGridOptions(); - this.addAllRowsToGrid(); - this.makeGridPagination(); - this.gridInit = true; - this.currentView = 'grid'; - - }, - - makeGrid : function(dom_id) { - - dom_id = dom_id || this.dom_id; - - //if (typeof this.viewObjects[dom_id] != 'undefined') { - this.viewObjects[dom_id] = new OWA.dataGrid(dom_id); - //} - - this.viewObjects[dom_id].makeGrid(this.resultSet); - }, - - refreshGrid : function() { - - var that = this; - - // custom formattter functions. - jQuery.extend(jQuery.fn.fmatter , { - // urlFormatter allows for a single param substitution. - urlFormatter : function(cellvalue, options, rowdata) { - var sub_value = options.rowId; - //alert(options.rowId); - var name = options.colModel.realColName; - //var name = 'actionName'; - //alert(that.columnLinks[name].template); - OWA.debug(options.rowId-1+' '+name); - //var new_url = that.columnLinks[name].template.replace('%s', escape(sub_value)); - var new_url = that.resultSet.resultsRows[options.rowId-1][name].link; - var link = '' + cellvalue + ''; - return link; - }, - - useServerFormatter : function(cellvalue, options, rowdata) { - var name = options.colModel.realColName; - return that.resultSet.resultsRows[options.rowId-1][name].formatted_value; - } - - }); - - - - if (this.resultSet.resultsReturned > 0) { - - // happens with first results set when loading from URL. - if (this.gridInit !== true) { - this.displayGrid(); - } - - jQuery("#"+that.dom_id + ' _grid').jqGrid('clearGridData',true); - this.addAllRowsToGrid(); - - // hide the built in jqgrid loading divs. - jQuery("#load_"+that.dom_id+"_grid").hide(); - jQuery("#load_"+that.dom_id+"_grid").css("z-index", 101); - - // check to see if we need ot hide the previous page control. - if (this.resultSet.page == 1) { - jQuery("#"+that.dom_id +' > .owa_resultsExplorerBottomControls > UL > .owa_previousPageControl').hide(); - } else if (this.resultSet.page == this.resultSet.total_pages) { - jQuery("#"+that.dom_id +' > .owa_resultsExplorerBottomControls > UL > .owa_nextPageControl').hide(); - } else { - jQuery("#"+that.dom_id +' > .owa_resultsExplorerBottomControls > UL > .owa_previousPageControl').show(); - } - - } else { - jQuery("#"+that.dom_id).html("No data is available for this time period."); - } - }, - - loader : function(data) { - - if (data) { - // check to see if resultSet is new - if (this.resultSet.length > 0) { - // if not new then return. nothing to do. - if (data.resultSet.guid === this.resultSet.guid) { - return; - } - - } - - this.setResultSet(data); - - if (this.view) { - var method_name = this.viewMethods[this.view]; - this[method_name](); - } - - if (this.asyncQueue.length > 0) { - - for(var i=0;i< this.asyncQueue.length;i++) { - - this.dynamicFunc(this.asyncQueue[i]); - } - } - } - }, - - dynamicFunc : function (func){ - //alert(func[0]); - var args = Array.prototype.slice.call(func, 1); - //alert(args); - this[func[0]].apply(this, args); - }, - - // fetch the result set from the server - getResultSet : function(url) { - - var that = this; - - // uses the built in jqgrid loading divs. just giveit a message and show it. - jQuery("#load_"+that.dom_id+"_grid").html('Loading...'); - jQuery("#load_"+that.dom_id+"_grid").show(); - jQuery("#load_"+that.dom_id+"_grid").css("z-index", 1000); - jQuery.getJSON(url, '', function (data) {that.loader(data);}); - }, - - injectDomElements : function() { - - var p = ''; - - p += '
                        '; - p += '
                          '; - p += '
                          '; - - var that = this; - jQuery('#'+that.dom_id).append(p); - }, - - setGridOptions : function() { - - var that = this; - - var columns = []; - - var columnDef = ''; - - for (var column in this.resultSet.resultsRows[0]) { - - // check to see if we should exclude any columns - if (this.options.grid.excludeColumns.length > 0) { - - for (var i=0;i<=this.options.grid.excludeColumns.length -1;i++) { - // if column name is not on the exclude list then add it. - if (this.options.grid.excludeColumns[i] != column) { - // add column - columnDef = this.makeGridColumnDef(this.resultSet.resultsRows[0][column]); - columns.push(columnDef); - } - } - - } else { - // add column - columnDef = this.makeGridColumnDef(this.resultSet.resultsRows[0][column]); - columns.push(columnDef); - } - - } - - jQuery('#' + that.dom_id + '_grid').jqGrid({ - jsonReader: { - repeatitems: false, - root: "resultsRows", - cell: '', - id: '', - page: 'page', - total: 'total_pages', - records: 'resultsReturned' - }, - afterInsertRow: function(rowid, rowdata, rowelem) {return;}, - datatype: 'local', - colModel: columns, - rownumbers: that.options.grid.showRowNumbers, - viewrecords: true, - rowNum: that.resultSet.resultsReturned, - height: '100%', - autowidth: true, - hoverrows: false, - sortname: that.resultSet.sortColumn + '.value', - sortorder: that.resultSet.sortOrder - }); - - // set header css - for (var y=0;y < columns.length;y++) { - var css = {}; - //if dimension column then left align - if ( columns[y].classes == 'owa_dimensionGridCell' ) { - css['text-align'] = 'left'; - } else { - css['text-align'] = 'right'; - } - // if sort column then bold. - if (this.resultSet.sortColumn +'.value' === columns[y].name) { - //css.fontWeight = 'bold'; - } - // set the css. no way to just set a class... - jQuery('#' + that.dom_id + '_grid').jqGrid('setLabel', columns[y].name, '',css); - } - - /* - // custom formattter functions. - jQuery.extend(jQuery.fn.fmatter , { - // urlFormatter allows for a single param substitution. - urlFormatter : function(cellvalue, options, rowdata) { - var sub_value = options.rowId; - //alert(options.rowId); - var name = options.colModel.realColName; - //var name = 'actionName'; - //alert(that.columnLinks[name].template); - OWA.debug(options.rowId-1+' '+name); - //var new_url = that.columnLinks[name].template.replace('%s', escape(sub_value)); - var new_url = that.resultSet.resultsRows[options.rowId-1][name].link; - var link = '' + cellvalue + ''; - return link; - } - }); - */ - }, - - makeGridColumnDef : function(column) { - - var _sort_type = ''; - var _align = ''; - var _format = ''; - var _class = ''; - var _width = ''; - var _resizable = true; - var _fixed = false; - var _datefmt = ''; - - if (column.result_type === 'dimension') { - _align = 'left'; - _class = 'owa_dimensionGridCell'; - } else { - _align = 'right'; - _class = 'owa_metricGridCell'; - _width = 100; - _resizable = false; - _fixed = true; - } - - if (column.data_type === 'string') { - _sort_type = 'text'; - } else { - _sort_type = 'number'; - } - - if (column.link) { - _format = 'urlFormatter'; - } else { - _format = 'useServerFormatter'; - } - - // set custom formatter if one exists. - if (this.options.grid.columnFormatters.hasOwnProperty(column.name)) { - _format = this.options.grid.columnFormatters[column.name]; - } - - var columnDef = { - name: column.name +'.value', - index: column.name +'.value', - label: column.label, - sorttype: _sort_type, - align: _align, - formatter: _format, - classes: _class, - width: _width, - resizable: _resizable, - fixed: _fixed, - realColName: column.name, - datefmt: _datefmt - }; - - return columnDef; - - }, - - makeColumnDefinitions : function() { - - }, - - - addRowToGrid : function(row, id) { - - var that = this; - - rowid = id || that.makeRowGuid(row); - - jQuery("#"+that.dom_id + '_grid').jqGrid('addRowData',rowid,that.getRowValues(row)); - }, - - addAllRowsToGrid :function() { - - var that = this; - jQuery("#"+that.dom_id + '_grid')[0].addJSONData(that.resultSet); - this.displayRowCount(); - }, - - displayRowCount : function() { - - if (this.resultSet.total_pages > 1) { - - var start = ''; - var end = ''; - if (this.resultSet.page === 1) { - start = 1; - end = this.resultSet.resultsReturned; - } else { - start = ((this.resultSet.page -1) * this.resultSet.resultsPerPage) + 1; - end = ((this.resultSet.page -1) * this.resultSet.resultsPerPage) + this.resultSet.resultsReturned; - } - - var p = '
                        • '; - p += 'Results: '+ start + ' - ' + end; - p = p + '
                        • '; - - var that = this; - //alert ("#"+that.dom_id + '_grid' + ' > .owa_rowCount'); - var check = jQuery("#"+that.dom_id + ' > .owa_resultsExplorerBottomControls > UL > .owa_rowCount').html(); - //alert(check); - if (check === null) { - jQuery("#"+that.dom_id +' > .owa_resultsExplorerBottomControls > UL').append(p); - } else { - jQuery("#"+that.dom_id +' > .owa_resultsExplorerBottomControls > UL > .owa_rowCount').html(p); - } - } - }, - - makeGridPagination : function() { - - if (this.resultSet.more) { - - var that = this; - - var p = ''; - p = p + '
                        • '; - p = p + 'Previous Page
                        • '; - jQuery("#"+that.dom_id +' > .owa_resultsExplorerBottomControls > UL').append(p); - jQuery(".owa_previousPageControl").bind('click', function() {that.pageGrid(that.resultSet.previous);}); - - var pn = ''; - pn = pn + '
                        • '; - pn = pn + 'Next Page
                        • '; - - jQuery("#"+that.dom_id + ' > .owa_resultsExplorerBottomControls > UL').append(pn); - jQuery("#"+that.dom_id + ' > .owa_resultsExplorerBottomControls > UL > .owa_nextPageControl').bind('click', function() {that.pageGrid(that.resultSet.next);}); - - if (this.resultSet.page == 1) { - jQuery("#"+that.dom_id +' > .owa_resultsExplorerBottomControls > UL > .owa_previousPageControl').hide(); - } - - } - }, - - pageGrid : function (url) { - - this.getResultSet(url); - var that = this; - - }, - - addLinkToColumn : function(col_name, link_template, sub_params) { - this.columnLinks = {}; - if (col_name) { - var item = {}; - item.name = col_name; - item.template = link_template; - item.params = sub_params; - - this.columnLinks[col_name] = item; - item = ''; - } - - this._columnLinksCount++; - //alert(this.dom_id); - }, - - setResultSet : function(rs) { - this.resultSet = rs; - this.applyLinks(); - }, - - applyLinks : function() { - - var p = ''; - - if (this.resultSet.resultsRows.length > 0) { - - if (this._columnLinksCount > 0) { - - for(var i=0;i<=this.resultSet.resultsRows.length - 1;i++) { - - for (var y in this.columnLinks) { - if (this.columnLinks.hasOwnProperty(y)) { - //alert(this.dom_id + ' : '+y); - var template = this.columnLinks[y].template; - - if (this.resultSet.resultsRows[i][y].name.length > 0) { - //if (this.resultSet.resultsRows[i][this.columnLinks[y]].name.length > 0) { - - for (var z in this.columnLinks[y].params) { - - if (this.columnLinks[y].params.hasOwnProperty(z)) { - - template = template.replace('%s', OWA.util.urlEncode(this.resultSet.resultsRows[i][this.columnLinks[y].params[z]].value)); - } - } - - this.resultSet.resultsRows[i][this.columnLinks[y].name].link = template; - } - } - } - } - } - } - }, - - getContainerWidth : function() { - - var that = this; - - if (this.getOption('autoResizeCharts')) { - return jQuery("#"+that.dom_id).width(); - } else { - return this.getOption('chartWidth'); - } - }, - - getContainerHeight : function() { - var that = this; - var h = jQuery("#"+that.dom_id).height(); - //alert(h); - return h; - - }, - - setupAreaChart : function(series, dom_id) { - - dom_id = dom_id || this.dom_id; - this.domSelectors.areaChart = "#"+dom_id + ' > .owa_areaChart'; - - var that = this; - - //var w = this.getContainerWidth(); - var w = jQuery("#"+dom_id).css('width'); - //alert(w); - var h = this.getContainerHeight() || this.getOption('chartHeight'); - - - jQuery("#"+dom_id).append('
                          '); - - jQuery(that.domSelectors.areaChart).css('width', w); - jQuery(that.domSelectors.areaChart).css('height', h); - - // binds a tooltip to plot points - var previousPoint = null; - jQuery(that.domSelectors.areaChart).bind("plothover", function (event, pos, item) { - - jQuery("#x").text(pos.x.toFixed(2)); - jQuery("#y").text(pos.y.toFixed(2)); - - if (item) { - if (previousPoint != item.datapoint) { - - previousPoint = item.datapoint; - - jQuery("#tooltip").remove(); - var x = item.datapoint[0].toFixed(0), - y = item.datapoint[1].toFixed(0); - - if (that.options.areaChart.flot.xaxis.mode === 'time') { - - x = that.timestampFormatter(x); - } - - that.showTooltip(item.pageX -75, item.pageY -50, - x+'
                          '+item.series.label + ": " + y); - } - } else { - jQuery("#tooltip").remove(); - previousPoint = null; - } - - }); - - }, - - formatValue : function(type, value) { - - switch(type) { - // convery yyyymmdd to javascript timestamp as flot requires that - case 'yyyymmdd': - - //date = jQuery.datepicker.parseDate('yymmdd', value); - //value = Date.parse(date); - var year = value.substring(0,4) * 1; - var month = (value.substring(4,6) * 1) -1; - var day = value.substring(6,8) * 1; - var d = Date.UTC(year,month,day,0,0,0,0); - value = d; - OWA.debug('year: %s, month: %s, day: %s, timestamp: %s',year,month,day,d); - break; - - case 'currency': - value = value/100; - } - - return value; - }, - - timestampFormatter : function(timestamp) { - - var d = new Date(timestamp*1); - var curr_date = d.getDate(); - var curr_month = d.getMonth() + 1; - var curr_year = d.getFullYear(); - //alert(d+' date: '+curr_month); - var date = curr_month + "/" + curr_date + "/" + curr_year; - //var date = curr_month + "/" + curr_date; - return date; - }, - - - /** - * Main method for displaying an area chart - */ - makeAreaChart : function(series, dom_id) { - - dom_id = dom_id || this.dom_id; - var selector = "#"+dom_id + ' > .owa_areaChart'; - - if (this.resultSet.resultsRows.length > 0) { - - - var dataseries = []; - series = series || this.options.areaChart.series; - var data = []; - for(var ii=0;ii<=series.length -1;ii++) { - - var x_series_name = series[ii].x; - var y_series_name = series[ii].y; - - - - //create data array - for(var i=0;i<=this.resultSet.resultsRows.length -1;i++) { - data_type_x = this.resultSet.resultsRows[i][x_series_name].data_type; - data_type_y = this.resultSet.resultsRows[i][y_series_name].data_type; - var item =[this.formatValue(data_type_x, this.resultSet.resultsRows[i][x_series_name].value), this.formatValue(data_type_y, this.resultSet.resultsRows[i][y_series_name].value)]; - data.push(item); - } - //alert(this.resultSet.resultsRows[i][series[ii].x].value); - var l = this.getMetricLabel(y_series_name); - dataseries.push({ label: l, data: data}); - - } - - //var that = this; - - - - if(jQuery("#"+dom_id + ' > .owa_areaChart').length === 0) { - - this.setupAreaChart(series, dom_id); - } - - var num_ticks = data.length; - // reduce number of x axis ticks if data set has too many points. - if (data.length > 10) { - - num_ticks = 10; - } - - var options = { - - yaxis: { - tickDecimals:0 }, - xaxis:{ - ticks: num_ticks, - tickDecimals: null - }, - grid: {show: this.options.chart.showGrid, hoverable: true, autoHilight:true, borderWidth:0, borderColor: null}, - series: { - points: { show: this.options.areaChart.showDots, fill: this.options.areaChart.showDots}, - lines: { show: true, fill: true, fillColor: "rgba(202,225,255, 0.6)", lineWidth: this.options.areaChart.lineWidth} - - }, - colors: ["#1874CD", "#dba255", "#919733"], - legend: { - position: 'ne', - margin: [0,-10], - show:this.options.areaChart.showLegend - } - }; - - if (data_type_x === 'yyyymmdd') { - - options.xaxis.mode = "time"; - //options.xaxis.timeformat = "%m/%d/%y"; - options.xaxis.timeformat = "%m/%d"; - } - - this.options.areaChart.flot = options; - jQuery.plot(jQuery(selector), dataseries, options); - this.currentContainerWidth = jQuery("#"+dom_id).width(); - this.currentWindowWidth = jQuery(window).width(); - - // resize window handler - var that = this; - jQuery(window).resize(function () { - var sel = that.domSelectors.areaChart; - //alert(sel); - //var that = this; - var chartw =jQuery(sel).width(); - var containerw = jQuery("#"+dom_id).width(); - var ccontainerw = that.currentContainerWidth; - var ww = jQuery(window).width(); - OWA.debug('cur-container-w: '+ccontainerw); - OWA.debug('new-container-w: '+containerw); - - // check to see if the container or the window width has changed - // redraw the graph if it has. - if ((containerw != ccontainerw) || (ww != that.currentWindowWidth)) { - - //var d = that.currentWindowWidth - ww; - var d = ww - that.currentWindowWidth; - //alert(d); - jQuery(sel).css('width', chartw + d); - that.makeAreaChart(series, dom_id); - } - that.currentContainerWidth = containerw; - that.currentWindowWidth = ww; - }); - - - } else { - jQuery('#'+ dom_id).html("No data is available for this time period"); - jQuery('#'+ dom_id).css('height', '50px'); - - } - - }, - - // shows a tool tip for flot charts - showTooltip : function(x, y, contents) { - - jQuery('
                          ' + contents + '
                          ').css( { - position: 'absolute', - display: 'none', - top: y + 5, - left: x + 5, - border: '1px solid #cccccc', - padding: '2px', - 'background-color': '#ffffff', - opacity: 0.90 - }).appendTo("body").fadeIn(100); - }, - - getMetricLabel : function(name) { - //alert(this.resultSet.aggregates[name].label); - if (this.resultSet.aggregates[name].label.length > 0) { - return this.resultSet.aggregates[name].label; - } else { - return 'unknown'; - } - }, - - getMetricValue : function(name) { - //alert(this.resultSet.aggregates[name].label); - if (this.resultSet.aggregates[name].value.length > 0) { - return this.resultSet.aggregates[name].value; - } else { - return 0; - } - }, - - setupPieChart : function() { - - var that = this; - var w = this.getContainerWidth(); - //alert(w); - var h = this.getContainerWidth(); //this.getOption('chartHeight'); - //alert(h); - jQuery("#"+that.dom_id).append('
                          '); - jQuery(that.domSelectors.pieChart).css('width', w); - jQuery(that.domSelectors.pieChart).css('height', h); - }, - - makePieChart : function () { - - this.domSelectors.pieChart = "#"+this.dom_id + ' > .owa_pieChart'; - var selector = this.domSelectors.pieChart; - var that = this; - //create data array - var data = []; - var count = 0; - - if (this.options.pieChart.dimension.length > 0) { - // plots a dimensional set of data - - if (this.resultSet.resultsRows.length > 0) { - - var dimension = this.options.pieChart.dimension; - var numSlices = this.options.pieChart.numSlices; - var metric = this.options.pieChart.metric; - - //create data array - var iterations = 0; - if (numSlices > this.resultSet.resultsRows.length) { - iterations = this.resultSet.resultsRows.length; - } else { - iterations = numSlices; - } - - - for(var i=0;i<=iterations -1;i++) { - - var item = {label: this.resultSet.resultsRows[i][dimension].value, data: this.resultSet.resultsRows[i][metric].value * 1}; - data.push(item); - count = count + this.resultSet.resultsRows[i][metric].value; - } - - // if there are extra slices then lump into other bucket. - if (this.resultSet.resultsRows.length > iterations) { - var others = this.resultSet.aggregates[metric] - count; - data.push({label: 'others', data: others}); - } - - } else { - //no results - jQuery('#'+ that.dom_id).append("No data is available for this time period"); - jQuery('#'+ that.dom_id).css('height', '50px'); - - } - } else { - - if (!jQuery.isEmptyObject(that.resultSet.aggregates)) { - // plots a set of values taken from the aggregrate metrics array - var metrics = this.options.pieChart.metrics; - for(var ii=0;ii<=metrics.length -1 ;ii++) { - var value = this.resultSet.aggregates[metrics[ii]].value * 1; - data.push({label: this.getMetricLabel(metrics[ii]), data: value}); - } - } else { - //OWA.setSetting('debug', true); - //OWA.debug('there was no data'); - //alert('hi'); - jQuery('#'+ that.dom_id).append("No data is available for this time period"); - jQuery('#'+ that.dom_id).css('height', '50px'); - - } - - } - - if (this.init.pieInit !== true) { - - this.setupPieChart(); - } - - // options - var options = { - series: { - pie: { - show: true, - //showLabel: true, - label: { - show: true, - background: { - color: '#ffffff', - opacity: '.7' - }, - radius:1, - formatter: function(label, slice){ - return '
                          '+Math.round(slice.percent)+'%
                          '; - } - //formatter: function(label, slice){ return '
                          '+label+'
                          '+Math.round(slice.percent)+'%
                          ';} - - } - } - }, - - legend: { - show: true, - position: "ne", - margin: [-160,50] - }, - colors: ["#6BAED6", "#FD8D3C", "#dba255", "#919733"] - }; - - //GRAPH - jQuery.plot(jQuery(selector), data, options); - this.init.pieChart = true; - }, - - renderTemplate : function(template, params, mode, dom_id) { - - template = template || this.options.template.template; - params = params || this.options.template.params; - mode = mode || this.options.template.mode; - dom_id = dom_id || this.options.template.dom_id || this.dom_id; - jQuery.jqotetag('*'); - //dom_id = dom_id || this.dom_id; - - if (mode === 'append') { - jQuery('#' + dom_id).jqoteapp(template, params); - } else if (mode === 'prepend') { - jQuery('#' + dom_id).jqotepre(template, params); - } else if (mode === 'replace') { - jQuery('#' + dom_id).jqotesub(template, params); - } - }, - - makeSparkline : function(metric_name, dom_id, filter) { - metric_name = metric_name || this.options.sparkline.metric; - dom_id = dom_id || this.dom_id; - var sl = new OWA.sparkline(dom_id); - var data = this.getSeries(metric_name, '',filter); - - if (!data) { - data = [0,0,0]; - } - - sl.loadFromArray(data); - - this.currentView = 'sparkline'; - }, - - getSeries : function(value_name, value_name2, filter) { - - if (this.resultSet.resultsRows.length > 0) { - - var series = []; - //create data array - for(var i=0;i<=this.resultSet.resultsRows.length -1;i++) { - - if (filter) { - check = filter(this.resultSet.resultsRows[i]); - if (!check) { - continue; - } - } - - var item = ''; - if (value_name2) { - item =[this.resultSet.resultsRows[i][value_name].value, this.resultSet.resultsRows[i][value_name2].value]; - } else { - item = this.resultSet.resultsRows[i][value_name].value; - - } - - series.push(item); - } - - return series; - } - }, - - makeMetricBoxes : function(dom_id, template, label, metrics, filter) { - dom_id = dom_id || this.dom_id; - template = template || '#metricInfobox'; - - jQuery('#' + dom_id).append('
                          '); - for(var i in this.resultSet.aggregates) { - - if (this.resultSet.aggregates.hasOwnProperty(i)) { - var item = this.resultSet.aggregates[i]; - item.dom_id = dom_id+'-'+this.resultSet.aggregates[i].name+'-'+this.resultSet.guid; - if (label) { - item.label = label; - } - - if (this.options.metricBoxes.width) { - item.width = this.options.metricBoxes.width; - } - - - // set alt tag for jqote. needed to avoid problem with php's asp_tags ini directive - jQuery.jqotetag('*'); - jQuery('#' + dom_id).jqoteapp(template, item); - - this.makeSparkline(this.resultSet.aggregates[i].name, item.dom_id+'-sparkline', filter); - - } - } - jQuery('#' + dom_id).append('
                          '); - jQuery('#' + dom_id).append('
                          '); - }, - - renderResultsRows : function(dom_id, template) { - - if (this.resultSet.resultsRows.length > 0) { - var that = this; - dom_id = dom_id || this.dom_id; - - var table = ''; - var data = []; - //re-order the data into an array - for (var d_item in this.resultSet.resultsRows[0]) { - - if (this.resultSet.resultsRows[0].hasOwnProperty(d_item)) { - data.push(this.resultSet.resultsRows[0][d_item]); - } - } - // set alt tag for jqote. needed to avoid problem with php's asp_tags ini directive - jQuery.jqotetag('*'); - //make table headers - var ths = jQuery('#simpleTable-headers').jqote(data); - // make outer table - table = jQuery('#simpleTable-outer').jqote({dom_id: dom_id+'_simpleTable', headers: ths}); - // add to dom - jQuery('#'+dom_id).html(table); - // append rows - for(i=0;i<= this.resultSet.resultsRows.length -1;i++) { - - var cells = ''; - for (var r_item in this.resultSet.resultsRows[i]) { - - if (this.resultSet.resultsRows[i].hasOwnProperty(r_item)) { - cells += jQuery('#table-column').jqote(this.resultSet.resultsRows[i][r_item]); - } - } - - var row = jQuery('#table-row').jqote({columns: cells}); - jQuery('#'+dom_id+'_simpleTable').append(row); - } - - } else { - jQuery('#'+dom_id).html("No results to display."); - } - }, - - getApiEndpoint : function() { - - return this.getOption('api_endpoint') || OWA.getSetting('api_endpoint'); - }, - - makeApiRequestUrl : function(method, options, url) { - - var url = url || this.getApiEndpoint(); - url += '?'; - url += 'owa_do=' + method; - var count = OWA.util.countObjectProperties(options); - var i = 1; - for (option in options) { - - if (options.hasOwnProperty(option)) { - - if (typeof options[option] != 'undefined') { - url += '&owa_' +option + '=' + OWA.util.urlEncode(options[option]); - } - i++; - } - } - - return url; - } - -}; --- a/owa/modules/base/js/owa.sparkline.js +++ /dev/null @@ -1,80 +1,1 @@ -// -// Open Web Analytics - An Open Source Web Analytics Framework -// -// Copyright 2010 Peter Adams. All rights reserved. -// -// Licensed under GPL v2.0 http://www.gnu.org/copyleft/gpl.html -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// $Id$ -// -/** - * OWA Sparkline Implementation - * - * @author Peter Adams - * @web Open Web Analytics - * @copyright Copyright © 2006-2010 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.3.0 - */ - -OWA.sparkline = function(dom_id) { - - this.config = OWA.config || ''; - - this.dom_id = dom_id || ''; - - this.data = ''; - - this.options = { - type: 'line', - lineWidth: 2, - width: '100px', - height: '20px', - spotRadius: 0, - //lineColor: '', - //spotColor: '', - minSpotColor: '#FF0000', - maxSpotColor: '#00FF00' - }; - -} - -OWA.sparkline.prototype = { - - render: function() { - - jQuery('#' + this.dom_id).sparkline('html', this.options); - }, - - loadFromArray :function(data) { - jQuery('#' + this.dom_id).sparkline(data, this.options); - }, - - setHeight: function(height) { - - this.options.height = height; - return; - }, - - setWidth: function(width) { - - this.options.width = width; - }, - - setDomId: function(dom_id) { - - this.dom_id = dom_id; - } - -} - --- a/owa/modules/base/js/owa.spy.js +++ /dev/null @@ -1,85 +1,1 @@ -OWA.spy = function() { - //this.config = OWA.config; - - return; -} - -OWA.spy.prototype = { - - properties: new Object, - last_start_time: '', - last_end_time: 0, - - init: function(dom_id, url) { - - jQuery('#'+ dom_id).spy({ - 'limit': 10, - 'fadeLast': 5, - 'ajax': url, - 'fadeInSpeed': '500', - 'timeout': 5000 - //'timestamp': owa_getNow - }); - - }, - - getStartTime: function() { - - var d = new Date(); - var ts = ''; - - if (this.last_end_time > 0) { - - ts = this.last_end_time; - this.last_end_time = this.getNow(); - } else { - - ts = this.getNow(); - this.last_end_time = ts; - } - - return ts; - - }, - - getNow: function() { - - var d = new Date(); - var now; - now = Math.round(d.getTime() / 1000); - - return now; - - } - - -} - - -function pauseSpy() { - spyRunning = 0; - var temp_time; - last_end_time = temp_time; - jQuery('div#_spyTmp').html(""); - jQuery('div#spyContainer').prepend('
                          The spy has been paused...
                          '); - - return false; -} - -function playSpy() { - spyRunning = 1; - jQuery('div#spyContainer').prepend('
                          The spy has been re-started...
                          '); - return false; -} - -function owa_getData() { - - spy.properties.startTime = spy.getStartTime(); - spy.properties.endTime = spy.getNow(); - //alert(OWA.util.nsAll(spy.properties)); - return OWA.util.nsAll(spy.properties); - - - } - --- a/owa/modules/base/js/owa.template.js +++ /dev/null @@ -1,48 +1,1 @@ -OWA.template = function(options) { - if (options) { - this.options = options; - } -} - -OWA.template.prototype = { - - /** - * Template cache - */ - _tmplCache = {}, - - /** - * Client side template parser that uses <#= #> and <# code #> expressions. - * and # # code blocks for template expansion. - * - * @param str string The text of the template to expand - * @param data mixed Any javascript variable that is to be merged. - * @return string - */ - parseTemplate = function(str, data) { - - var err = ""; - try { - var func = this._tmplCache[str]; - if (!func) { - var strFunc = "var p=[],print=function(){p.push.apply(p,arguments);};" + - "with(obj){p.push('" + - str.replace(/[\r\t\n]/g, " ") - .replace(/'(?=[^#]*#>)/g, "\t") - .split("'").join("\\'") - .split("\t").join("'") - .replace(/<#=(.+?)#>/g, "',$1,'") - .split("<#").join("');") - .split("#>").join("p.push('") - + "');}return p.join('');"; - - //alert(strFunc); - func = new Function("obj", strFunc); - this._tmplCache[str] = func; - } - return func(data); - } catch (e) { err = e.message; } - return "< # ERROR: " + err.htmlEncode() + " # >"; - } -} --- a/owa/modules/base/js/owa.tracker-combined-min.js +++ /dev/null @@ -1,192 +1,1 @@ -// OWA Tracker Min file created 1295114210 -//// Start of json2 //// - -if(!this.JSON){this.JSON={};} -(function(){"use strict";function f(n){return n<10?'0'+n:n;} -if(typeof Date.prototype.toJSON!=='function'){Date.prototype.toJSON=function(key){return isFinite(this.valueOf())?this.getUTCFullYear()+'-'+ -f(this.getUTCMonth()+1)+'-'+ -f(this.getUTCDate())+'T'+ -f(this.getUTCHours())+':'+ -f(this.getUTCMinutes())+':'+ -f(this.getUTCSeconds())+'Z':null;};String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(key){return this.valueOf();};} -var cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,escapable=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,gap,indent,meta={'\b':'\\b','\t':'\\t','\n':'\\n','\f':'\\f','\r':'\\r','"':'\\"','\\':'\\\\'},rep;function quote(string){escapable.lastIndex=0;return escapable.test(string)?'"'+string.replace(escapable,function(a){var c=meta[a];return typeof c==='string'?c:'\\u'+('0000'+a.charCodeAt(0).toString(16)).slice(-4);})+'"':'"'+string+'"';} -function str(key,holder){var i,k,v,length,mind=gap,partial,value=holder[key];if(value&&typeof value==='object'&&typeof value.toJSON==='function'){value=value.toJSON(key);} -if(typeof rep==='function'){value=rep.call(holder,key,value);} -switch(typeof value){case'string':return quote(value);case'number':return isFinite(value)?String(value):'null';case'boolean':case'null':return String(value);case'object':if(!value){return'null';} -gap+=indent;partial=[];if(Object.prototype.toString.apply(value)==='[object Array]'){length=value.length;for(i=0;i");queryAsAssoc[key[0]]=key[1];}} -return queryAsAssoc;},parseCookieStringToJson:function parseQuery(v){var queryAsObj=new Object;var queryString=unescape(v);var keyValues=queryString.split("|||");for(var i in keyValues){if(keyValues.hasOwnProperty(i)){var key=keyValues[i].split("=>");queryAsObj[key[0]]=key[1];}} -return queryAsObj;},nsParams:function(obj){var new_obj=new Object;for(param in obj){if(obj.hasOwnProperty(param)){new_obj['owa_'+param]=obj[param];}} -return new_obj;},urlEncode:function(str){str=(str+'').toString();return encodeURIComponent(str).replace(/!/g,'%21').replace(/'/g,'%27').replace(/\(/g,'%28').replace(/\)/g,'%29').replace(/\*/g,'%2A').replace(/%20/g,'+');},urldecode:function(str){return decodeURIComponent(str.replace(/\+/g,'%20'));},parseUrlParams:function(url){var _GET={};for(var i,a,m,n,o,v,p=location.href.split(/[?&]/),l=p.length,k=1;k';outer=outer||'|||';if(str){if(!this.strpos(str,inner)){return str;}else{var assoc={};outer_array=str.split(outer);for(var i=0,n=outer_array.length;i'+obj[prop];if(i>>8)^x;} -return crc^(-1);},utf8_encode:function(argString){var string=(argString+'');var utftext="";var start,end;var stringl=0;start=end=0;stringl=string.length;for(var n=0;n127&&c1<2048){enc=String.fromCharCode((c1>>6)|192)+String.fromCharCode((c1&63)|128);}else{enc=String.fromCharCode((c1>>12)|224)+String.fromCharCode(((c1>>6)&63)|128)+String.fromCharCode((c1&63)|128);} -if(enc!==null){if(end>start){utftext+=string.substring(start,end);} -utftext+=enc;start=end=n+1;}} -if(end>start){utftext+=string.substring(start,string.length);} -return utftext;},utf8_decode:function(str_data){var tmp_arr=[],i=0,ac=0,c1=0,c2=0,c3=0;str_data+='';while(i191)&&(c1<224)){c2=str_data.charCodeAt(i+1);tmp_arr[ac++]=String.fromCharCode(((c1&31)<<6)|(c2&63));i+=2;}else{c2=str_data.charCodeAt(i+1);c3=str_data.charCodeAt(i+2);tmp_arr[ac++]=String.fromCharCode(((c1&15)<<12)|((c2&63)<<6)|(c3&63));i+=3;}} -return tmp_arr.join('');},trim:function(str,charlist){var whitespace,l=0,i=0;str+='';if(!charlist){whitespace=" \n\r\t\f\x0b\xa0\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u3000";}else{charlist+='';whitespace=charlist.replace(/([\[\]\(\)\.\?\/\*\{\}\+\$\^\:])/g,'$1');} -l=str.length;for(i=0;i=0;i--){if(whitespace.indexOf(str.charAt(i))===-1){str=str.substring(0,i+1);break;}} -return whitespace.indexOf(str.charAt(0))===-1?str:'';},rand:function(min,max){var argc=arguments.length;if(argc===0){min=0;max=2147483647;}else if(argc===1){throw new Error('Warning: rand() expects exactly 2 parameters, 1 given');} -return Math.floor(Math.random()*(max-min+1))+min;},base64_encode:function(data){var b64="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";var o1,o2,o3,h1,h2,h3,h4,bits,i=0,ac=0,enc="",tmp_arr=[];if(!data){return data;} -data=this.utf8_encode(data+'');do{o1=data.charCodeAt(i++);o2=data.charCodeAt(i++);o3=data.charCodeAt(i++);bits=o1<<16|o2<<8|o3;h1=bits>>18&0x3f;h2=bits>>12&0x3f;h3=bits>>6&0x3f;h4=bits&0x3f;tmp_arr[ac++]=b64.charAt(h1)+b64.charAt(h2)+b64.charAt(h3)+b64.charAt(h4);}while(i>16&0xff;o2=bits>>8&0xff;o3=bits&0xff;if(h3==64){tmp_arr[ac++]=String.fromCharCode(o1);}else if(h4==64){tmp_arr[ac++]=String.fromCharCode(o1,o2);}else{tmp_arr[ac++]=String.fromCharCode(o1,o2,o3);}}while(i=len)?'':Array(1+len-str.length>>>0).join(chr);return leftJustify?str+padding:padding+str;};var justify=function(value,prefix,leftJustify,minWidth,zeroPad,customPadChar){var diff=minWidth-value.length;if(diff>0){if(leftJustify||!zeroPad){value=pad(value,minWidth,customPadChar,leftJustify);}else{value=value.slice(0,prefix.length)+pad('',diff,'0',true)+value.slice(prefix.length);}} -return value;};var formatBaseX=function(value,base,prefix,leftJustify,minWidth,precision,zeroPad){var number=value>>>0;prefix=prefix&&number&&{'2':'0b','8':'0','16':'0x'}[base]||'';value=prefix+pad(number.toString(base),precision||0,'0',false);return justify(value,prefix,leftJustify,minWidth,zeroPad);};var formatString=function(value,leftJustify,minWidth,precision,zeroPad,customPadChar){if(precision!=null){value=value.slice(0,precision);} -return justify(value,'',leftJustify,minWidth,zeroPad,customPadChar);};var doFormat=function(substring,valueIndex,flags,minWidth,_,precision,type){var number;var prefix;var method;var textTransform;var value;if(substring=='%%'){return'%';} -var leftJustify=false,positivePrefix='',zeroPad=false,prefixBaseX=false,customPadChar=' ';var flagsl=flags.length;for(var j=0;flags&&j-1?6:(type=='d')?0:undefined;}else if(precision=='*'){precision=+a[i++];}else if(precision.charAt(0)=='*'){precision=+a[precision.slice(1,-1)];}else{precision=+precision;} -value=valueIndex?a[valueIndex.slice(0,-1)]:a[i++];switch(type){case's':return formatString(String(value),leftJustify,minWidth,precision,zeroPad,customPadChar);case'c':return formatString(String.fromCharCode(+value),leftJustify,minWidth,precision,zeroPad);case'b':return formatBaseX(value,2,prefixBaseX,leftJustify,minWidth,precision,zeroPad);case'o':return formatBaseX(value,8,prefixBaseX,leftJustify,minWidth,precision,zeroPad);case'x':return formatBaseX(value,16,prefixBaseX,leftJustify,minWidth,precision,zeroPad);case'X':return formatBaseX(value,16,prefixBaseX,leftJustify,minWidth,precision,zeroPad).toUpperCase();case'u':return formatBaseX(value,10,prefixBaseX,leftJustify,minWidth,precision,zeroPad);case'i':case'd':number=parseInt(+value,10);prefix=number<0?'-':positivePrefix;value=prefix+pad(String(Math.abs(number)),precision,'0',false);return justify(value,prefix,leftJustify,minWidth,zeroPad);case'e':case'E':case'f':case'F':case'g':case'G':number=+value;prefix=number<0?'-':positivePrefix;method=['toExponential','toFixed','toPrecision']['efg'.indexOf(type.toLowerCase())];textTransform=['toString','toUpperCase']['eEfFgG'.indexOf(type)%2];value=prefix+Math.abs(number)[method](precision);return justify(value,prefix,leftJustify,minWidth,zeroPad)[textTransform]();default:return substring;}};return format.replace(regex,doFormat);},clone:function(mixed){var newObj=(mixed instanceof Array)?[]:{};for(i in mixed){if(mixed[i]&&(typeof mixed[i]=="object")){newObj[i]=OWA.util.clone(mixed[i]);}else{newObj[i]=mixed[i];}} -return newObj;},strtolower:function(str){return(str+'').toLowerCase();},in_array:function(needle,haystack,argStrict){var key='',strict=!!argStrict;if(strict){for(key in haystack){if(haystack[key]===needle){return true;}}}else{for(key in haystack){if(haystack[key]==needle){return true;}}} -return false;},dechex:function(number){if(number<0){number=0xFFFFFFFF+number+1;} -return parseInt(number,10).toString(16);},explode:function(delimiter,string,limit){var emptyArray={0:''};if(arguments.length<2||typeof arguments[0]=='undefined'||typeof arguments[1]=='undefined'){return null;} -if(delimiter===''||delimiter===false||delimiter===null){return false;} -if(typeof delimiter=='function'||typeof delimiter=='object'||typeof string=='function'||typeof string=='object'){return emptyArray;} -if(delimiter===true){delimiter='1';} -if(!limit){return string.toString().split(delimiter.toString());}else{var splitted=string.toString().split(delimiter.toString());var partA=splitted.splice(0,limit-1);var partB=splitted.join(delimiter.toString());partA.push(partB);return partA;}}} -//// End of owa //// -//// Start of owa.tracker //// - -OWA.event=function(){this.properties=new Object();this.set('timestamp',OWA.util.getCurrentUnixTimestamp());} -OWA.event.prototype={id:'',siteId:'',properties:{},get:function(name){if(this.properties.hasOwnProperty(name)){return this.properties[name];}},set:function(name,value){this.properties[name]=value;},setEventType:function(event_type){this.set("event_type",event_type);},getProperties:function(){return this.properties;},merge:function(properties){for(param in properties){if(properties.hasOwnProperty(param)){this.set(param,properties[param]);}}}} -OWA.commandQueue=function(){OWA.debug('Command Queue object created');} -OWA.commandQueue.prototype={asyncCmds:'',push:function(cmd){var args=Array.prototype.slice.call(cmd,1);var obj_name='';var method='';var check=OWA.util.strpos(cmd[0],'.');if(!check){obj_name='OWATracker';method=cmd[0];}else{var parts=cmd[0].split('.');obj_name=parts[0];method=parts[1];} -OWA.debug('cmd queue object name %s',obj_name);OWA.debug('cmd queue object method name %s',method);if(typeof window[obj_name]=="undefined"){OWA.debug('making global object named: %s',obj_name);window[obj_name]=new OWA.tracker({globalObjectName:obj_name});} -window[obj_name][method].apply(window[obj_name],args);},loadCmds:function(cmds){this.asyncCmds=cmds;},process:function(){for(var i=0;i0){this.page.merge(owa_params);}}} -OWA.tracker.prototype={id:'',siteId:'',init:0,stateInit:false,globalEventProperties:{},sharableStateStores:['v','s','c'],startTime:null,endTime:null,campaignState:[],isNewCampaign:false,isNewSessionFlag:false,isTrafficAttributed:false,cookie_names:['owa_s','owa_v','owa_c'],linkedStateSet:false,hashCookiesToDomain:true,urlParams:{},streamBindings:['bindMovementEvents','bindScrollEvents','bindKeypressEvents','bindClickEvents'],page:'',click:'',domstream:'',movement:'',keystroke:'',hover:'',last_event:'',last_movement:'',event_queue:[],player:'',overlay:'',setDebug:function(bool){OWA.setSetting('debug',bool);},checkForLinkedState:function(){var ls=this.getUrlParam('owa_state');if(!ls){ls=this.getAnchorParam('owa_state');} -if(ls){OWA.debug('Shared OWA state detected...');ls=OWA.util.base64_decode(OWA.util.urldecode(ls));OWA.debug('linked state: %s',ls);var state=ls.split('.');OWA.debug('linked state: %s',JSON.stringify(state));if(state){for(var i=0;state.length>i;i++){var pair=state[i].split('=');OWA.debug('pair: %s',pair);var value=OWA.util.urldecode(pair[1]);OWA.debug('pair: %s',value);decodedvalue=OWA.util.decodeCookieValue(value);var format=OWA.util.getCookieValueFormat(value);decodedvalue.cdh=OWA.util.getCookieDomainHash(this.getCookieDomain());OWA.replaceState(pair[0],decodedvalue,true,format);}}} -this.linkedStateSet=true;},shareStateByLink:function(url){OWA.debug('href of link: '+url);if(url){var state=this.createSharedStateValue();var anchor=this.getUrlAnchorValue();if(!anchor){OWA.debug('shared state: %s',state);document.location.href=url+'#owa_state.'+state;}else{}}},createSharedStateValue:function(){var state='';for(var i=0;this.sharableStateStores.length>i;i++){var value=OWA.getState(this.sharableStateStores[i]);value=OWA.util.encodeJsonForCookie(value,OWA.getStateStoreFormat(this.sharableStateStores[i]));if(value){state+=OWA.util.sprintf('%s=%s',this.sharableStateStores[i],OWA.util.urlEncode(value));if(this.sharableStateStores.length!=(i+1)){state+='.';}}} -if(state){OWA.debug('linked state to send: %s',state);state=OWA.util.base64_encode(state);state=OWA.util.urlEncode(state);return state;}},shareShareByPost:function(form){var state=this.createSharedStateValue();form.action+='#owa_state.'+state;form.submit();},getCookieDomain:function(){return this.getOption('cookie_domain')||OWA.getSetting('cookie_domain')||document.domain;},setCookieDomain:function(domain){var not_passed=false;if(!domain){domain=document.domain;not_passed=true;} -var period=domain.substr(0,1);if(period==='.'){domain=domain.substr(1);} -var contains_www=false;var www=domain.substr(0,4);if(www==='www.'){if(not_passed){domain=domain.substr(4);} -contains_www=true;} -var match=false;if(document.domain===domain){match=true;} -domain='.'+domain;this.setOption('cookie_domain',domain);this.setOption('cookie_domain_set',true);OWA.setSetting('cookie_domain',domain);OWA.debug('Cookie domain is: %s',domain);},getCookieDomainHash:function(domain){return OWA.util.crc32(domain);},setCookieDomainHashing:function(value){this.hashCookiesToDomain=value;OWA.setSetting('hashCookiesToDomain',value);},checkForOverlaySession:function(){var a=this.getAnchorParam('owa_overlay');if(a){a=OWA.util.base64_decode(OWA.util.urldecode(a));a=OWA.util.urldecode(a);OWA.debug('overlay anchor value: '+a);OWA.util.setCookie('owa_overlay',a,'','/',document.domain);this.pause();OWA.startOverlaySession(OWA.util.decodeCookieValue(a));}},getUrlAnchorValue:function(){var anchor=self.document.location.hash.substring(1);OWA.debug('anchor value: '+anchor);return anchor;},getAnchorParam:function(name){var anchor=this.getUrlAnchorValue();if(anchor){OWA.debug('anchor is: %s',anchor);var pairs=anchor.split(',');OWA.debug('anchor pairs: %s',JSON.stringify(pairs));if(pairs.length>0){var values={};for(var i=0;pairs.length>i;i++){var pieces=pairs[i].split('.');OWA.debug('anchor pieces: %s',JSON.stringify(pieces));values[pieces[0]]=pieces[1];} -OWA.debug('anchor values: %s',JSON.stringify(values));if(values.hasOwnProperty(name)){return values[name];}}}},getUrlParam:function(name){this.urlParams=this.urlParams||OWA.util.parseUrlParams();if(this.urlParams.hasOwnProperty(name)){return this.urlParams[name];}else{return false;}},dynamicFunc:function(func){var args=Array.prototype.slice.call(func,1);this[func[0]].apply(this,args);},setPageTitle:function(title){this.page.set("page_title",title);},setPageType:function(type){this.page.set("page_type",type);},setSiteId:function(site_id){this.siteId=site_id;},getSiteId:function(){return this.siteId;},setEndpoint:function(endpoint){endpoint=('https:'==document.location.protocol?window.owa_baseSecUrl||endpoint.replace(/http:/,'https:'):endpoint);this.setOption('baseUrl',endpoint);OWA.config.baseUrl=endpoint;},setLoggerEndpoint:function(url){this.setOption('logger_endpoint',this.forceUrlProtocol(url));},getLoggerEndpoint:function(){var url=this.getOption('logger_endpoint')||this.getEndpoint()||OWA.getSetting('baseUrl');return url+'log.php';},setApiEndpoint:function(url){this.setOption('api_endpoint',this.forceUrlProtocol(url));OWA.setApiEndpoint(url);},getApiEndpoint:function(){return this.getOption('api_endpoint')||this.getEndpoint()+'api.php';},forceUrlProtocol:function(url){url=('https:'==document.location.protocol?url.replace(/http:/,'https:'):url);return url;},getEndpoint:function(){return this.getOption('baseUrl');},trackPageView:function(url){if(url){this.page.set('page_url',url);} -this.page.setEventType("base.page_request");return this.trackEvent(this.page);},trackAction:function(action_group,action_name,action_label,numeric_value){var event=new OWA.event;event.setEventType('track.action');event.set('site_id',this.getSiteId());event.set('page_url',this.page.get('page_url'));event.set('action_group',action_group);event.set('action_name',action_name);event.set('action_label',action_label);event.set('numeric_value',numeric_value);this.trackEvent(event);OWA.debug("Action logged");},trackClicks:function(handler){this.setOption('logClicksAsTheyHappen',true);this.bindClickEvents();},bindClickEvents:function(){if(!this.isClickTrackingEnabled){var that=this;if(window.addEventListener){window.addEventListener('click',function(e){that.clickEventHandler(e);},false);}else if(window.attachEvent){window.attachEvent('click',function(e){that.clickEventHandler(e);});} -this.isClickTrackingEnabled=true;}},trackDomStream:function(){if(this.active){var rand=Math.floor(Math.random()*100+1);if(rand<=this.getOption('logDomStreamPercentage')){this.setOption('trackDomStream',true);var len=this.streamBindings.length;for(var i=0;ithis.options.domstreamEventThreshold){if(!this.domstream.get('domstream_guid')){var salt='domstream'+this.page.get('page_url')+this.getSiteId();this.domstream.set('domstream_guid',OWA.util.generateRandomGuid(salt));} -this.domstream.setEventType('dom.stream');this.domstream.set('site_id',this.getSiteId());this.domstream.set('page_url',this.page.get('page_url'));this.domstream.set('timestamp',OWA.util.getCurrentUnixTimestamp());this.domstream.set('duration',this.getElapsedTime());this.domstream.set('stream_events',JSON.stringify(this.event_queue));this.domstream.set('stream_length',this.event_queue.length);this.trackEvent(this.domstream);this.event_queue=[];}else{OWA.debug("Domstream had too few events to log.");}},startDomstreamTimer:function(){var interval=this.getOption('domstreamLoggingInterval') -var that=this;var domstreamTimer=setInterval(function(){that.logDomStream()},interval);},log:function(){this.page.setEventType("base.page_request");return this.logEvent(this.page);},logEventAjax:function(event,method){if(this.active){if(event instanceof OWA.event){var properties=event.getProperties();}else{var properties=event;} -method=method||'GET';if(method==='GET'){return this.ajaxGet(properties);}else{this.ajaxPost(properties);return;}}},isObjectType:function(obj,type){return!!(obj&&type&&type.prototype&&obj.constructor==type.prototype.constructor);},getAjaxObj:function(){if(window.XMLHttpRequest){var ajax=new XMLHttpRequest()}else{if(window.ActiveXObject){var ajax=new ActiveXObject("Microsoft.XMLHTTP");}} -return ajax;},ajaxGet:function(properties){var url=this._assembleRequestUrl(properties);var ajax=this.getAjaxObj();ajax.open("GET",url,false);ajax.send(null);},ajaxPost:function(properties){var ajax=this.getAjaxObj();var params=this.prepareRequestParams(properties);ajax.open("POST",this.getLoggerEndpoint(),false);ajax.setRequestHeader("Content-type","application/x-www-form-urlencoded");ajax.setRequestHeader("Content-length",params.length);ajax.setRequestHeader("Connection","close");ajax.onreadystatechange=function(){if(ajax.readyState==4&&ajax.status==200){}} -ajax.send(params);},ajaxJsonp:function(url){var script=document.createElement("script");script.setAttribute("src",url);script.setAttribute("type","text/javascript");document.body.appendChild(script);},prepareRequestParams:function(properties){var get='';properties.site_id=this.getSiteId();for(param in properties){var value='';var kvp='';if(properties.hasOwnProperty(param)){if(OWA.util.is_array(properties[param])){for(var i=0,n=properties[param].length;i0){dom_name=targ.name;} -click.set("dom_element_name",dom_name);var dom_value='(not set)';if(targ.hasOwnProperty('value')&&targ.value.length>0){dom_value=targ.value;} -click.set("dom_element_value",dom_value);var dom_id='(not set)';if(!targ.hasOwnProperty('id')&&targ.id.length>0){dom_id=targ.id;} -click.set("dom_element_id",dom_id);var dom_class='(not set)';if(targ.hasOwnProperty('className')&&targ.className.length>0){dom_class=targ.className;} -click.set("dom_element_class",dom_class);click.set("dom_element_tag",OWA.util.strtolower(targ.tagName));click.set("page_url",window.location.href);var viewport=this.getViewportDimensions();click.set("page_width",viewport.width);click.set("page_height",viewport.height);var properties=this.getDomElementProperties(targ);click.merge(this.filterDomProperties(properties));click.set("dom_element_x",this.findPosX(targ)+'');click.set("dom_element_y",this.findPosY(targ)+'');var coords=this.getCoords(e);click.set('click_x',coords.x);click.set('click_y',coords.y);if(this.getOption('trackDomStream')){this.addToEventQueue(click)} -var full_click=OWA.util.clone(click);if(this.getOption('logClicksAsTheyHappen')){this.trackEvent(full_click);} -this.click=full_click;},filterDomProperties:function(properties){return properties;},callMethod:function(string,data){return this[string](data);},addDomStreamEventBinding:function(method_name){this.streamBindings.push(method_name);},bindMovementEvents:function(){var that=this;document.onmousemove=function(e){that.movementEventHandler(e);}},movementEventHandler:function(e){e=e||window.event;var now=this.getTime();if(now>this.last_movement+this.getOption('movementInterval')){this.movement=new OWA.event();this.movement.setEventType("dom.movement");var coords=this.getCoords(e);this.movement.set('cursor_x',coords.x);this.movement.set('cursor_y',coords.y);this.addToEventQueue(this.movement);this.last_movement=now;}},bindScrollEvents:function(){var that=this;window.onscroll=function(e){that.scrollEventHandler(e);}},scrollEventHandler:function(e){e=e||window.event;var now=this.getTimestamp();var event=new OWA.event();event.setEventType('dom.scroll');var coords=this.getScrollingPosition();event.set('x',coords.x);event.set('y',coords.y);var targ=this._getTarget(e);event.set("dom_element_name",targ.name);event.set("dom_element_value",targ.value);event.set("dom_element_id",targ.id);this.addToEventQueue(event);this.last_scroll=now;},getScrollingPosition:function(){var position=[0,0];if(typeof window.pageYOffset!='undefined'){position={x:window.pageXOffset,y:window.pageYOffset};}else if(typeof document.documentElement.scrollTop!='undefined'&&document.documentElement.scrollTop>0){position={x:document.documentElement.scrollLeft,y:document.documentElement.scrollTop};}else if(typeof document.body.scrollTop!='undefined'){position={x:document.body.scrollLeft,y:document.body.scrollTop};} -return position;},bindHoverEvents:function(){},bindFocusEvents:function(){var that=this;},bindKeypressEvents:function(){var that=this;document.onkeypress=function(e){that.keypressEventHandler(e);}},keypressEventHandler:function(e){var targ=this._getTarget(e);if(targ.tagName==='INPUT'&&targ.type==='password'){return;} -var key_code=e.keyCode?e.keyCode:e.charCode -var key_value=String.fromCharCode(key_code);var event=new OWA.event();event.setEventType('dom.keypress');event.set('key_value',key_value);event.set('key_code',key_code);event.set("dom_element_name",targ.name);event.set("dom_element_value",targ.value);event.set("dom_element_id",targ.id);event.set("dom_element_tag",targ.tagName);this.addToEventQueue(event);},getTimestamp:function(){return OWA.util.getCurrentUnixTimestamp();},getTime:function(){return Math.round(new Date().getTime());},getElapsedTime:function(){return this.getTimestamp()-this.startTime;},getOption:function(name){if(this.options.hasOwnProperty(name)){return this.options[name];}},setOption:function(name,value){this.options[name]=value;},setLastEvent:function(event){return;},addToEventQueue:function(event){if(this.active&&!this.isPausedBySibling()){var now=this.getTimestamp();if(event!=undefined){this.event_queue.push(event.getProperties());}else{}}},isPausedBySibling:function(){return OWA.getSetting('loggerPause');},sleep:function(delay){var start=new Date().getTime();while(new Date().getTime()0){this.urlParams=OWA.util.parseUrlParams(document.URL);OWA.debug('GET: '+JSON.stringify(this.urlParams));} -var campaignKeys=this.getOption('campaignKeys');var campaign_params={};for(var i=0,n=campaignKeys.length;ithis.options.maxPriorCampaigns){var removed=this.campaignState.splice(0,1);OWA.debug('Too many prior campaigns in state store. Dropping oldest to make room.');} -this.setCampaignCookie(this.campaignState);this.isTrafficAttributed=true;}},originalAttributionModel:function(campaign_params){if(this.campaignState.length>0){OWA.debug('Original attribution detected.');campaign_params=this.campaignState[0];this.isTrafficAttributed=true;}else{OWA.debug('Setting Original Campaign touch.');if(this.isNewCampaign){this.campaignState.push(campaign_params);this.setCampaignCookie(this.campaignState);this.isTrafficAttributed=true;}} -return campaign_params;},setTrafficAttribution:function(event){var campaignState=OWA.getState('c','attribs');if(campaignState){this.campaignState=campaignState;} -var campaign_params=this.getCampaignProperties();switch(this.options.trafficAttributionMode){case'direct':OWA.debug('Applying "Direct" Traffic Attribution Model');this.directAttributionModel(campaign_params);break;case'original':OWA.debug('Applying "Original" Traffic Attribution Model');campaign_params=this.originalAttributionModel(campaign_params);break;default:OWA.debug('Applying Default (Direct) Traffic Attribution Model');this.directAttributionModel(campaign_params);} -if(this.isTrafficAttributed){OWA.debug('Attributing Traffic to: %s',JSON.stringify(campaign_params));this.applyCampaignPropertiesToEvent(event,campaign_params);if(this.campaignState.length>0){this.setGlobalEventProperty('attribs',JSON.stringify(this.campaignState));}}else{OWA.debug('No traffic attribution.');}},setCampaignCookie:function(values){OWA.setState('c','attribs',values,'','json',this.options.campaignAttributionWindow);},checkRefererForSearchEngine:function(referer){var _get=OWA.util.parseUrlParams(referer);var query_params=['q','p','search','Keywords','ask','keyword','keywords','kw','pattern','pgm','qr','qry','qs','qt','qu','query','queryterm','question','sTerm','searchfor','searchText','srch','su','what'];for(var i=0,n=query_params.length;i - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.2.1 - */ -OWA.event = function() { - - this.properties = new Object(); - this.set('timestamp', OWA.util.getCurrentUnixTimestamp() ); -} - -OWA.event.prototype = { - - id : '', - - siteId : '', - - properties : {}, - - get : function(name) { - - if ( this.properties.hasOwnProperty(name) ) { - - return this.properties[name]; - } - }, - - set : function(name, value) { - - this.properties[name] = value; - }, - - setEventType : function(event_type) { - - this.set("event_type", event_type); - }, - - getProperties : function() { - - return this.properties; - }, - - merge : function(properties) { - - for(param in properties) { - - if (properties.hasOwnProperty(param)) { - - this.set(param, properties[param]); - } - } - } -} - -OWA.commandQueue = function() { - - OWA.debug('Command Queue object created'); -} - -OWA.commandQueue.prototype = { - asyncCmds: '', - push : function (cmd) { - - //alert(func[0]); - var args = Array.prototype.slice.call(cmd, 1); - //alert(args); - - var obj_name = ''; - var method = ''; - var check = OWA.util.strpos( cmd[0], '.' ); - - if ( ! check ) { - obj_name = 'OWATracker'; - method = cmd[0]; - } else { - var parts = cmd[0].split( '.' ); - obj_name = parts[0]; - method = parts[1]; - } - - OWA.debug('cmd queue object name %s', obj_name); - OWA.debug('cmd queue object method name %s', method); - - // is OWATracker created? - if ( typeof window[obj_name] == "undefined" ) { - OWA.debug('making global object named: %s', obj_name); - window[obj_name] = new OWA.tracker( { globalObjectName: obj_name } ); - } - - window[obj_name][method].apply(window[obj_name], args); - }, - - loadCmds: function(cmds) { - - this.asyncCmds = cmds; - }, - - process: function() { - - for (var i=0; i < this.asyncCmds.length;i++) { - this.push(this.asyncCmds[i]); - } - } -}; - -/** - * Javascript Tracker Object - * - * @author Peter Adams - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.2.1 - */ -OWA.tracker = function( options ) { - - //this.setDebug(true); - // set start time - this.startTime = this.getTimestamp(); - - // Configuration options - this.options = { - logClicks: true, - logPage: true, - logMovement: false, - encodeProperties: false, - movementInterval: 100, - logDomStreamPercentage: 100, - domstreamLoggingInterval: 3000, - domstreamEventThreshold: 10, - maxPriorCampaigns: 5, - campaignAttributionWindow: 60, - trafficAttributionMode: 'direct', - sessionLength: 1800, - thirdParty: false, - cookie_domain: false, - campaignKeys: [ - { public: 'owa_medium', private: 'md', full: 'medium' }, - { public: 'owa_campaign', private: 'cn', full: 'campaign' }, - { public: 'owa_source', private: 'sr', full: 'source' }, - { public: 'owa_search_terms', private: 'tr', full: 'search_terms' }, - { public: 'owa_ad', private: 'ad', full: 'ad' }, - { public: 'owa_ad_type', private: 'at', full: 'ad_type' } ], - logger_endpoint: '', - api_endpoint: '' - - }; - - // Endpoint URL of log service. needed for backwards compatability with old tags - var endpoint = window.owa_baseUrl || OWA.config.baseUrl ; - if (endpoint) { - this.setEndpoint(endpoint); - } else { - OWA.debug('no global endpoint url found.'); - } - - this.endpoint = OWA.config.baseUrl; - // Active status of tracker - this.active = true; - - if ( options ) { - - for (opt in options) { - - this.options[opt] = options[opt]; - } - } - - // private vars - this.ecommerce_transaction = '', - this.isClickTrackingEnabled = false; - - // check to se if an overlay session is active - this.checkForOverlaySession(); - - // set default page properties - this.page = new OWA.event(); - this.page.set('page_url', document.URL); - this.setPageTitle(document.title); - this.page.set("referer", document.referrer); - this.page.set('timestamp', this.startTime); - - // merge page properties from global owa_params object - if (typeof owa_params != 'undefined') { - // merge page params from the global object if it exists - if (owa_params.length > 0) { - this.page.merge(owa_params); - } - } -} - -OWA.tracker.prototype = { - - id : '', - // site id - siteId : '', - // ??? - init: 0, - // flag to tell if client state has been set - stateInit: false, - // properties that should be added to all events - globalEventProperties: {}, - // state sores that can be shared across sites - sharableStateStores: ['v', 's', 'c'], - // Time When tracker is loaded - startTime: null, - // time when tracker is unloaded - endTime: null, - // campaign state holder - campaignState : [], - // flag for new campaign status - isNewCampaign: false, - // flag for new session status - isNewSessionFlag: false, - // flag for whether or not traffic has been attributed - isTrafficAttributed: false, - cookie_names: ['owa_s', 'owa_v', 'owa_c'], - linkedStateSet: false, - hashCookiesToDomain: true, - /** - * GET params parsed from URL - */ - urlParams: {}, - /** - * DOM stream Event Binding Methods - */ - streamBindings : ['bindMovementEvents', 'bindScrollEvents','bindKeypressEvents', 'bindClickEvents'], - /** - * Page view event - */ - page : '', - /** - * Latest click event - */ - click : '', - /** - * Domstream event - */ - domstream : '', - /** - * Latest Movement Event - */ - movement : '', - /** - * Latest Keystroke Event - */ - keystroke : '', - /** - * Latest Hover Event - */ - hover : '', - - last_event : '', - last_movement : '', - /** - * DOM Stream Event Queue - */ - event_queue : [], - player: '', - overlay: '', - - setDebug : function(bool) { - - OWA.setSetting('debug', bool); - }, - - checkForLinkedState : function() { - - var ls = this.getUrlParam('owa_state'); - - if ( ! ls ) { - ls = this.getAnchorParam('owa_state'); - } - - if ( ls ) { - OWA.debug('Shared OWA state detected...'); - - ls = OWA.util.base64_decode(OWA.util.urldecode(ls)); - //ls = OWA.util.trim(ls, '\u0000'); - //ls = OWA.util.trim(ls, '\u0000'); - OWA.debug('linked state: %s', ls); - - var state = ls.split('.'); - //var state = OWA.util.explode('.', ls); - OWA.debug('linked state: %s', JSON.stringify(state)); - if ( state ) { - - for (var i=0; state.length > i; i++) { - - var pair = state[i].split('='); - OWA.debug('pair: %s', pair); - // add cookie domain hash for current cookie domain - var value = OWA.util.urldecode(pair[1]); - OWA.debug('pair: %s', value); - //OWA.debug('about to decode shared link state value: %s', value); - decodedvalue = OWA.util.decodeCookieValue(value); - //OWA.debug('decoded shared link state value: %s', JSON.stringify(decodedvalue)); - var format = OWA.util.getCookieValueFormat(value); - //OWA.debug('format of decoded shared state value: %s', format); - decodedvalue.cdh = OWA.util.getCookieDomainHash( this.getCookieDomain() ); - - OWA.replaceState( pair[0], decodedvalue, true, format ); - } - } - } - - this.linkedStateSet = true; - }, - - /** - * Shares User State cross domains using GET string - * - * gets cookies and concatenates them together using: - * name1=encoded_value1.name2=encoded_value2 - * then base64 encodes the entire string and appends it - * to an href - * - * @param url string - */ - shareStateByLink : function(url) { - - OWA.debug( 'href of link: '+ url ); - if ( url ) { - - var state = this.createSharedStateValue(); - - //check to see if we can just stick this on the anchor - var anchor = this.getUrlAnchorValue(); - if ( ! anchor ) { - - OWA.debug('shared state: %s', state); - document.location.href = url + '#owa_state.' + state ; - - // if not then we need ot insert it into GET params - } else { - - } - } - }, - - createSharedStateValue : function() { - - var state = ''; - - for (var i=0; this.sharableStateStores.length > i;i++) { - var value = OWA.getState( this.sharableStateStores[i] ); - value = OWA.util.encodeJsonForCookie(value, OWA.getStateStoreFormat(this.sharableStateStores[i])); - - if (value) { - state += OWA.util.sprintf( '%s=%s', this.sharableStateStores[i], OWA.util.urlEncode(value) ); - if ( this.sharableStateStores.length != ( i + 1) ) { - state += '.'; - } - } - } - - // base64 for transport - if ( state ) { - OWA.debug('linked state to send: %s', state); - - state = OWA.util.base64_encode(state); - state = OWA.util.urlEncode(state); - return state; - } - }, - - shareShareByPost : function (form) { - - var state = this.createSharedStateValue(); - form.action += '#owa_state.' + state; - form.submit(); - }, - - getCookieDomain : function() { - - return this.getOption('cookie_domain') || OWA.getSetting('cookie_domain') || document.domain; - - }, - - setCookieDomain : function(domain) { - - var not_passed = false; - - if ( ! domain ) { - domain = document.domain; - not_passed = true; - //this.setOption('cookie_domain_mode', 'auto'); - //OWA.setSetting('cookie_domain_mode', 'auto'); - } - - // remove the leading period - var period = domain.substr(0,1); - if (period === '.') { - domain = domain.substr(1); - } - - var contains_www = false; - var www = domain.substr(0,4); - // check for www and eliminate it if no domain was passed. - if (www === 'www.') { - if ( not_passed ) { - domain = domain.substr(4); - } - - contains_www = true; - } - - var match = false; - if (document.domain === domain) { - match = true; - } - - /* - if (match === true) { - // check to see if the domain is www - if ( contains_www === true ) { - // eliminate any top level domain cookies - OWA.debug('document domain matches cookie domain and includes www. cleaning up cookies.'); - //erase the no www domain cookie (ie. .openwebanalytics.com) - var top_domain = document.domain.substr(4); - OWA.util.eraseMultipleCookies(this.cookie_names, top_domain); - } - - } else { - // erase the document.domain version of all cookies (ie. www.openwebanalytics.com) - OWA.debug('document domain does not match cookie domain. cleaning up by erasing cookies under document.domain .'); - OWA.util.eraseMultipleCookies(this.cookie_names, document.domain); - - - //if ( contains_www === true) { - // OWA.util.eraseMultipleCookies(this.cookie_names, document.domain.substr(4)); - // OWA.util.eraseMultipleCookies(this.cookie_names, document.domain.substr(4)); - //} - - } - */ - - // add the leading period back - domain = '.' + domain; - this.setOption('cookie_domain', domain); - this.setOption('cookie_domain_set', true); - OWA.setSetting('cookie_domain', domain); - OWA.debug('Cookie domain is: %s', domain); - }, - - getCookieDomainHash: function(domain) { - - return OWA.util.crc32(domain); - }, - - setCookieDomainHashing: function(value) { - this.hashCookiesToDomain = value; - OWA.setSetting('hashCookiesToDomain', value); - }, - - checkForOverlaySession: function() { - - // check to see if overlay sesson should be created - var a = this.getAnchorParam('owa_overlay'); - - if ( a ) { - a = OWA.util.base64_decode(OWA.util.urldecode(a)); - //a = OWA.util.trim(a, '\u0000'); - a = OWA.util.urldecode( a ); - OWA.debug('overlay anchor value: ' + a); - //var domain = this.getCookieDomain(); - - // set the overlay cookie - OWA.util.setCookie('owa_overlay',a, '','/', document.domain ); - ////alert(OWA.util.readCookie('owa_overlay') ); - // pause tracker so we dont log anything during an overlay session - this.pause(); - // start overlay session - OWA.startOverlaySession( OWA.util.decodeCookieValue( a ) ); - } - }, - - getUrlAnchorValue : function() { - - var anchor = self.document.location.hash.substring(1); - OWA.debug('anchor value: ' + anchor); - return anchor; - }, - - getAnchorParam : function(name) { - - var anchor = this.getUrlAnchorValue(); - - if ( anchor ) { - OWA.debug('anchor is: %s', anchor); - var pairs = anchor.split(','); - OWA.debug('anchor pairs: %s', JSON.stringify(pairs)); - if ( pairs.length > 0 ) { - - var values = {}; - for( var i=0; pairs.length > i;i++ ) { - - var pieces = pairs[i].split('.'); - OWA.debug('anchor pieces: %s', JSON.stringify(pieces)); - values[pieces[0]] = pieces[1]; - } - - OWA.debug('anchor values: %s', JSON.stringify(values)); - - if ( values.hasOwnProperty( name ) ) { - return values[name]; - } - } - - } - }, - - getUrlParam : function(name) { - - this.urlParams = this.urlParams || OWA.util.parseUrlParams(); - - if ( this.urlParams.hasOwnProperty( name ) ) { - return this.urlParams[name]; - } else { - return false; - } - }, - - dynamicFunc : function (func){ - //alert(func[0]); - var args = Array.prototype.slice.call(func, 1); - //alert(args); - this[func[0]].apply(this, args); - }, - - /** - * Convienence method for seting page title - */ - setPageTitle: function(title) { - - this.page.set("page_title", title); - }, - - /** - * Convienence method for seting page type - */ - setPageType : function(type) { - - this.page.set("page_type", type); - }, - - /** - * Sets the siteId to be appended to all logging events - */ - setSiteId : function(site_id) { - this.siteId = site_id; - }, - - /** - * Convienence method for getting siteId of the logger - */ - getSiteId : function() { - return this.siteId; - }, - - setEndpoint : function (endpoint) { - - endpoint = ('https:' == document.location.protocol ? window.owa_baseSecUrl || endpoint.replace(/http:/, 'https:') : endpoint ); - this.setOption('baseUrl', endpoint); - OWA.config.baseUrl = endpoint; - }, - - setLoggerEndpoint : function(url) { - - this.setOption( 'logger_endpoint', this.forceUrlProtocol( url ) ); - }, - - getLoggerEndpoint : function() { - - var url = this.getOption( 'logger_endpoint') || this.getEndpoint() || OWA.getSetting('baseUrl') ; - - return url + 'log.php'; - }, - - setApiEndpoint : function(url) { - - this.setOption( 'api_endpoint', this.forceUrlProtocol( url ) ); - OWA.setApiEndpoint(url); - }, - - getApiEndpoint : function() { - - return this.getOption('api_endpoint') || this.getEndpoint() + 'api.php'; - }, - - forceUrlProtocol : function (url) { - - url = ('https:' == document.location.protocol ? url.replace(/http:/, 'https:') : url ); - return url; - }, - - - getEndpoint : function() { - return this.getOption('baseUrl'); - }, - - /** - * Logs a page view event - */ - trackPageView : function(url) { - - if (url) { - this.page.set('page_url', url); - } - - this.page.setEventType("base.page_request"); - - return this.trackEvent(this.page); - }, - - trackAction : function(action_group, action_name, action_label, numeric_value) { - - var event = new OWA.event; - - event.setEventType('track.action'); - event.set('site_id', this.getSiteId()); - event.set('page_url', this.page.get('page_url')); - event.set('action_group', action_group); - event.set('action_name', action_name); - event.set('action_label', action_label); - event.set('numeric_value', numeric_value); - this.trackEvent(event); - OWA.debug("Action logged"); - }, - - trackClicks : function(handler) { - // flag to tell handler to log clicks as they happen - this.setOption('logClicksAsTheyHappen', true); - this.bindClickEvents(); - - }, - - bindClickEvents : function() { - - if ( ! this.isClickTrackingEnabled ) { - var that = this; - // Registers the handler for the before navigate event so that the dom stream can be logged - if (window.addEventListener) { - window.addEventListener('click', function (e) {that.clickEventHandler(e);}, false); - } else if(window.attachEvent) { - window.attachEvent('click', function (e) {that.clickEventHandler(e);}); - } - - this.isClickTrackingEnabled = true; - } - - }, - - trackDomStream : function() { - - if (this.active) { - - // check random number against logging percentage - var rand = Math.floor(Math.random() * 100 + 1 ); - - if (rand <= this.getOption('logDomStreamPercentage')) { - - // needed by click handler - this.setOption('trackDomStream', true); - // loop through stream event bindings - var len = this.streamBindings.length; - for ( var i = 0; i < len; i++ ) { - //for (method in this.streamBindings) { - - this.callMethod(this.streamBindings[i]); - } - - this.startDomstreamTimer(); - } else { - OWA.debug("not tracking domstream for this user."); - } - } - }, - - logDomStream : function() { - - this.domstream = this.domstream || new OWA.event; - - if ( this.event_queue.length > this.options.domstreamEventThreshold ) { - - // make an domstream_id if one does not exist. needed for upstream processing - if ( ! this.domstream.get('domstream_guid') ) { - var salt = 'domstream' + this.page.get('page_url') + this.getSiteId(); - this.domstream.set( 'domstream_guid', OWA.util.generateRandomGuid( salt ) ); - } - - this.domstream.setEventType( 'dom.stream' ); - this.domstream.set( 'site_id', this.getSiteId()); - this.domstream.set( 'page_url', this.page.get('page_url') ); - //this.domstream.set( 'timestamp', this.startTime); - this.domstream.set( 'timestamp', OWA.util.getCurrentUnixTimestamp() ); - this.domstream.set( 'duration', this.getElapsedTime()); - this.domstream.set( 'stream_events', JSON.stringify(this.event_queue)); - this.domstream.set( 'stream_length', this.event_queue.length ); - this.trackEvent( this.domstream ); - this.event_queue = []; - - } else { - OWA.debug("Domstream had too few events to log."); - } - }, - - startDomstreamTimer : function() { - - var interval = this.getOption('domstreamLoggingInterval') - var that = this; - var domstreamTimer = setInterval( - function(){ that.logDomStream() }, - interval - ); - }, - - /** - * Deprecated - */ - log : function() { - this.page.setEventType("base.page_request"); - return this.logEvent(this.page); - }, - - /** - * Logs event asyncronously using AJAX GET - */ - logEventAjax : function (event, method) { - if (this.active) { - - if (event instanceof OWA.event) { - var properties = event.getProperties(); - } else { - var properties = event; - } - - method = method || 'GET'; - - if (method === 'GET') { - return this.ajaxGet(properties); - } else { - this.ajaxPost(properties); - return; - } - - } - - - }, - - isObjectType : function(obj, type) { - return !!(obj && type && type.prototype && obj.constructor == type.prototype.constructor); - }, - - - /** - * Gets XMLHttpRequest Object - */ - getAjaxObj : function() { - - if (window.XMLHttpRequest){ - // If IE7, Mozilla, Safari, etc: Use native object - var ajax = new XMLHttpRequest() - } else { - - if (window.ActiveXObject){ - // ...otherwise, use the ActiveX control for IE5.x and IE6 - var ajax = new ActiveXObject("Microsoft.XMLHTTP"); - } - - } - return ajax; - }, - - ajaxGet : function(properties) { - - var url = this._assembleRequestUrl(properties); - var ajax = this.getAjaxObj(); - ajax.open("GET", url, false); - ajax.send(null); - }, - - /** - * AJAX POST Request - */ - ajaxPost : function(properties) { - - var ajax = this.getAjaxObj(); - var params = this.prepareRequestParams(properties); - - ajax.open("POST", this.getLoggerEndpoint(), false); - //Send the proper header information along with the request - ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); - ajax.setRequestHeader("Content-length", params.length); - ajax.setRequestHeader("Connection", "close"); - - ajax.onreadystatechange = function() {//Call a function when the state changes. - if(ajax.readyState == 4 && ajax.status == 200) { - //console.log("ajax response: %s", ajax.responseText); - } - } - - ajax.send(params); - - }, - - ajaxJsonp : function (url) { - - var script = document.createElement("script"); - script.setAttribute("src",url); - script.setAttribute("type","text/javascript"); - document.body.appendChild(script); - }, - - prepareRequestParams : function(properties) { - - var get = ''; - - // append site_id to properties - properties.site_id = this.getSiteId(); - //assemble query string - for ( param in properties ) { - // print out the params - var value = ''; - var kvp = ''; - - if ( properties.hasOwnProperty(param) ) { - - if ( OWA.util.is_array( properties[param] ) ) { - - for ( var i = 0, n = properties[param].length; i < n; i++ ) { - - if ( OWA.util.is_object( properties[param][i] ) ) { - for ( o_param in properties[param][i] ) { - kvp = OWA.util.sprintf('owa_%s[%s][%s]=%s&', param, i, o_param, OWA.util.urlEncode( properties[param][i][o_param] ) ); - get += kvp; - } - } else { - // what the heck is it then. assum string - kvp = OWA.util.sprintf('owa_%s[%s]=%s&', param, i, OWA.util.urlEncode( properties[param][i] ) ); - get += kvp; - } - } - // assume it's a string - } else { - kvp = OWA.util.sprintf('owa_%s=%s&', param, OWA.util.urlEncode( properties[param] ) ); - - } - - - //needed? - } else { - - kvp = OWA.util.sprintf('owa_%s=%s&', '', OWA.util.urlEncode( properties[param] ) ); - } - - get += kvp; - } - //OWA.debug('GET string: %s', get); - return get; - }, - - /** - * Sends an OWA event to the server for processing using GET - * inserts 1x1 pixel IMG tag into DOM - */ - trackEvent : function(event, block) { - //OWA.debug('pre global event: %s', JSON.stringify(event)); - - if ( this.getOption('cookie_domain_set') != true ) { - // set default cookie domain - this.setCookieDomain(); - } - - if ( this.linkedStateSet != true ) { - //check for linked state send from another domain - this.checkForLinkedState(); - } - - if ( this.active ) { - if ( ! block ) { - block_flag = false; - } else { - block_flag = true; - } - - // check for third party mode. - if ( this.getOption( 'thirdParty' ) ) { - // tell upstream client to manage state - this.globalEventProperties.thirdParty = true; - // add in campaign related properties for upstream evaluation - this.setCampaignRelatedProperties(event); - } else { - // else we are in first party mode, so manage state on the client. - this.manageState(event); - } - - this.addGlobalPropertiesToEvent( event ); - //OWA.debug('post global event: %s', JSON.stringify(event)); - return this.logEvent( event.getProperties(), block_flag ); - } - }, - - addGlobalPropertiesToEvent : function ( event ) { - OWA.debug( 'Adding global properties to event: %s', JSON.stringify(this.globalEventProperties) ); - for ( prop in this.globalEventProperties ) { - event.set( prop, this.globalEventProperties[prop] ); - } - }, - - - /** - * Logs event by inserting 1x1 pixel IMG tag into DOM - */ - logEvent : function (properties, block) { - - if (this.active) { - - var url = this._assembleRequestUrl(properties); - OWA.debug('url : %s', url); - image = new Image(1, 1); - //expireDateTime = now.getTime() + delay; - image.onLoad = function () { }; - image.src = url; - if (block) { - //OWA.debug(' blocking...'); - } - OWA.debug('Inserted web bug for %s', properties['event_type']); - } - }, - - /** - * Private method for helping assemble request params - */ - _assembleRequestUrl : function(properties) { - - // append site_id to properties - properties.site_id = this.getSiteId(); - var get = this.prepareRequestParams(properties); - - var log_url = this.getLoggerEndpoint(); - - if (log_url.indexOf('?') === -1) { - log_url += '?'; - } else { - log_url += '&'; - } - - // add some radomness for cache busting - return log_url + get; - }, - - getViewportDimensions : function() { - - var viewport = new Object(); - viewport.width = window.innerWidth ? window.innerWidth : document.body.offsetWidth; - viewport.height = window.innerHeight ? window.innerHeight : document.body.offsetHeight; - return viewport; - }, - - /** - * Sets the X coordinate of where in the browser the user clicked - * - */ - findPosX : function(obj) { - - var curleft = 0; - if (obj.offsetParent) - { - while (obj.offsetParent) - { - curleft += obj.offsetLeft - obj = obj.offsetParent; - } - } - else if (obj.x) - curleft += obj.x; - return curleft; - }, - - /** - * Sets the Y coordinates of where in the browser the user clicked - * - */ - findPosY : function(obj) { - - var curtop = 0; - if (obj.offsetParent) - { - while (obj.offsetParent) - { - curtop += obj.offsetTop - obj = obj.offsetParent; - } - } - else if (obj.y) - curtop += obj.y; - return curtop; - }, - - /** - * Get the HTML elementassociated with an event - * - */ - _getTarget : function(e) { - - // Determine the actual html element that generated the event - var targ = e.target || e.srcElement; - - if (targ.nodeType == 3) { - // defeat Safari bug - targ = target.parentNode; - } - - return targ; - }, - - /** - * Sets coordinates of where in the browser the user clicked - * - */ - getCoords : function(e) { - - var coords = new Object(); - - if ( typeof( e.pageX ) == 'number' ) { - coords.x = e.pageX + ''; - coords.y = e.pageY + ''; - } else { - coords.x = e.clientX + ''; - coords.y = e.clientY + ''; - } - - return coords; - }, - - /** - * Sets the tag name of html eleemnt that generated the event - */ - getDomElementProperties : function(targ) { - - var properties = new Object(); - // Set properties of the owa_click object. - properties.dom_element_tag = targ.tagName; - - if (targ.tagName == "A") { - - if (targ.textContent != undefined) { - properties.dom_element_text = targ.textContent; - } else { - properties.dom_element_text = targ.innerText; - } - - properties.target_url = targ.href; - - } else if (targ.tagName == "INPUT") { - - properties.dom_element_text = targ.value; - - } else if (targ.tagName == "IMG") { - - properties.target_url = targ.parentNode.href; - properties.dom_element_text = targ.alt; - - } else { - - //properties.target_url = targ.parentNode.href || null; - - if (targ.textContent != undefined) { - //properties.html_element_text = targ.textContent; - properties.html_element_text = ''; - } else { - //properties.html_element_text = targ.innerText; - properties.html_element_text = ''; - } - } - - return properties; - }, - - clickEventHandler : function(e) { - - // hack for IE7 - e = e || window.event; - - var click = new OWA.event(); - // set event type - click.setEventType("dom.click"); - - //clicked DOM element properties - var targ = this._getTarget(e); - - var dom_name = '(not set)'; - if ( targ.hasOwnProperty( 'name' ) && targ.name.length > 0 ) { - dom_name = targ.name; - } - click.set("dom_element_name", dom_name); - - var dom_value = '(not set)'; - if ( targ.hasOwnProperty( 'value' ) && targ.value.length > 0 ) { - dom_value = targ.value; - } - click.set("dom_element_value", dom_value); - - var dom_id = '(not set)'; - if ( ! targ.hasOwnProperty( 'id' ) && targ.id.length > 0) { - dom_id = targ.id; - } - click.set("dom_element_id", dom_id); - - var dom_class = '(not set)'; - if ( targ.hasOwnProperty( 'className' ) && targ.className.length > 0) { - dom_class = targ.className; - } - click.set("dom_element_class", dom_class); - - click.set("dom_element_tag", OWA.util.strtolower(targ.tagName)); - click.set("page_url", window.location.href); - // view port dimensions - needed for calculating relative position - var viewport = this.getViewportDimensions(); - click.set("page_width", viewport.width); - click.set("page_height", viewport.height); - var properties = this.getDomElementProperties(targ); - click.merge(this.filterDomProperties(properties)); - // set coordinates - click.set("dom_element_x", this.findPosX(targ) + ''); - click.set("dom_element_y", this.findPosY(targ) + ''); - var coords = this.getCoords(e); - click.set('click_x', coords.x); - click.set('click_y', coords.y); - - // add to event queue is logging dom stream - if (this.getOption('trackDomStream')) { - this.addToEventQueue(click) - } - var full_click = OWA.util.clone(click); - //if all that works then log - if (this.getOption('logClicksAsTheyHappen')) { - this.trackEvent(full_click); - } - - - this.click = full_click; - }, - - // stub for a filter that will strip certain properties or abort the logging - filterDomProperties : function(properties) { - - return properties; - - }, - - callMethod : function(string, data) { - - return this[string](data); - }, - - addDomStreamEventBinding : function(method_name) { - this.streamBindings.push(method_name); - }, - - bindMovementEvents : function() { - - var that = this; - document.onmousemove = function (e) {that.movementEventHandler(e);} - }, - - movementEventHandler : function(e) { - - // hack for IE7 - e = e || window.event; - var now = this.getTime(); - if (now > this.last_movement + this.getOption('movementInterval')) { - // set event type - this.movement = new OWA.event(); - this.movement.setEventType("dom.movement"); - var coords = this.getCoords(e); - this.movement.set('cursor_x', coords.x); - this.movement.set('cursor_y', coords.y); - this.addToEventQueue(this.movement); - this.last_movement = now; - } - - }, - - bindScrollEvents : function() { - - var that = this; - window.onscroll = function (e) {that.scrollEventHandler(e);} - }, - - scrollEventHandler : function(e) { - - // hack for IE7 - e = e || window.event; - - var now = this.getTimestamp(); - - var event = new OWA.event(); - event.setEventType('dom.scroll'); - var coords = this.getScrollingPosition(); - event.set('x', coords.x); - event.set('y', coords.y); - var targ = this._getTarget(e); - event.set("dom_element_name", targ.name); - event.set("dom_element_value", targ.value); - event.set("dom_element_id", targ.id); - this.addToEventQueue(event); - this.last_scroll = now; - - }, - - getScrollingPosition : function() { - - var position = [0, 0]; - if (typeof window.pageYOffset != 'undefined') { - position = {x: window.pageXOffset, y: window.pageYOffset}; - } else if (typeof document.documentElement.scrollTop != 'undefined' && document.documentElement.scrollTop > 0) { - position = {x: document.documentElement.scrollLeft, y: document.documentElement.scrollTop}; - } else if (typeof document.body.scrollTop != 'undefined') { - position = {x: document.body.scrollLeft, y: document.body.scrollTop}; - } - return position; - }, - - bindHoverEvents : function() { - - //handler = handler || this.hoverEventHandler; - //document.onmousemove = handler; - - }, - - bindFocusEvents : function() { - - var that = this; - - }, - - bindKeypressEvents : function() { - - var that = this; - document.onkeypress = function (e) {that.keypressEventHandler(e);} - - }, - - keypressEventHandler : function(e) { - var targ = this._getTarget(e); - - if (targ.tagName === 'INPUT' && targ.type === 'password') { - return; - } - - var key_code = e.keyCode? e.keyCode : e.charCode - var key_value = String.fromCharCode(key_code); - var event = new OWA.event(); - event.setEventType('dom.keypress'); - event.set('key_value', key_value); - event.set('key_code', key_code); - event.set("dom_element_name", targ.name); - event.set("dom_element_value", targ.value); - event.set("dom_element_id", targ.id); - event.set("dom_element_tag", targ.tagName); - //console.log("Keypress: %s %d", key_value, key_code); - this.addToEventQueue(event); - - }, - - // utc epoch in seconds - getTimestamp : function() { - - return OWA.util.getCurrentUnixTimestamp(); - }, - - // utc epoch in milliseconds - getTime : function() { - - return Math.round(new Date().getTime()); - }, - - getElapsedTime : function() { - - return this.getTimestamp() - this.startTime; - }, - - getOption : function(name) { - - if ( this.options.hasOwnProperty(name) ) { - return this.options[name]; - } - }, - - setOption : function(name, value) { - - this.options[name] = value; - }, - - setLastEvent : function(event) { - return; - }, - - addToEventQueue : function(event) { - - if (this.active && !this.isPausedBySibling()) { - - var now = this.getTimestamp(); - - if (event != undefined) { - this.event_queue.push(event.getProperties()); - //console.debug("Now logging %s for: %d", event.get('event_type'), now); - } else { - //console.debug("No event properties to log"); - } - - } - }, - - isPausedBySibling: function() { - - return OWA.getSetting('loggerPause'); - }, - - sleep : function(delay) { - var start = new Date().getTime(); - while (new Date().getTime() < start + delay); - }, - - pause : function() { - - this.active = false; - }, - - restart : function() { - this.active = true; - }, - - // Event object Factory - makeEvent : function() { - return new OWA.event(); - }, - - // adds a new Domstream event binding. takes function name - addStreamEventBinding : function(name) { - - this.streamBindings.push(name); - }, - - // gets campaign related properties from request scope. - getCampaignProperties : function() { - - // load GET params from URL - if (!this.urlParams.length > 0) { - this.urlParams = OWA.util.parseUrlParams(document.URL); - OWA.debug('GET: '+ JSON.stringify(this.urlParams)); - } - - // look for attributes in the url of the page - var campaignKeys = this.getOption('campaignKeys'); - - // pull campaign params from _GET - var campaign_params = {}; - - for (var i = 0, n = campaignKeys.length; i < n; i++) { - - if ( this.urlParams.hasOwnProperty(campaignKeys[i].public) ) { - - campaign_params[campaignKeys[i].private] = this.urlParams[campaignKeys[i].public]; - //OWA.debug('campaign params obj: ' + JSON.stringify(campaign_params)); - this.isNewCampaign = true; - } - } - - // check for incomplete combos and backfill values if needed - if (campaign_params['at'] && !campaign_params['ad']) { - campaign_params['ad'] = '(not set)'; - } - - if (campaign_params['ad'] && !campaign_params['at']) { - campaign_params['at'] = '(not set)'; - } - - if (this.isNewCampaign) { - //campaign_params['ts'] = this.page.get('timestamp'); - } - - return campaign_params; - }, - - applyCampaignPropertiesToEvent : function(event, properties) { - - var campaignKeys = this.getOption('campaignKeys'); - for (var i = 0, n = campaignKeys.length; i < n; i++) { - if ( properties.hasOwnProperty(campaignKeys[i].private) ) { - this.setGlobalEventProperty(campaignKeys[i].full, properties[campaignKeys[i].private]); - //OWA.debug('setting campaign property %s %s', campaignKeys[i].private, properties[campaignKeys[i].private]); - } - } - }, - - // used when in third party cookie mode to send raw campaign related - // properties as part of the event. upstream handler needs these to - // do traffic attribution. - setCampaignRelatedProperties : function( event ) { - var properties = this.getCampaignProperties(); - OWA.debug('campaign properties: %s', JSON.stringify(properties)); - this.applyCampaignPropertiesToEvent( event, properties ); - }, - - directAttributionModel : function(campaign_params) { - - if ( this.isNewCampaign ) { - OWA.debug( 'campaign state length: %s', this.campaignState.length ); - // add the new campaing params to the prior touches array - this.campaignState.push( campaign_params ); - - // if there is prior campaign touches, check to see if there is room for one more touch - if ( this.campaignState.length > this.options.maxPriorCampaigns ) { - // splice array to make room for the new one - var removed = this.campaignState.splice( 0, 1 ); - OWA.debug('Too many prior campaigns in state store. Dropping oldest to make room.'); - //OWA.debug('campaign state array post slice: ' + JSON.stringify( this.campaignState ) ); - } - - // set/reset the campaign cookie. - this.setCampaignCookie( this.campaignState ); - - // set flag - this.isTrafficAttributed = true; - } - }, - - originalAttributionModel : function( campaign_params ) { - - // orignal touch was set previously. jus use that. - if ( this.campaignState.length > 0 ) { - // do nothing - OWA.debug( 'Original attribution detected.' ); - // set the attributes from the first campaign touch - - campaign_params = this.campaignState[0]; - // set flag - this.isTrafficAttributed = true; - - // no orginal touch, set one if its a new campaign touch - } else { - OWA.debug( 'Setting Original Campaign touch.' ); - if ( this.isNewCampaign ) { - - this.campaignState.push( campaign_params ); - // set cookie - this.setCampaignCookie( this.campaignState ); - // set flag - this.isTrafficAttributed = true; - } - } - - return campaign_params; - - }, - - setTrafficAttribution : function( event ) { - - var campaignState = OWA.getState( 'c', 'attribs' ); - - if (campaignState) { - this.campaignState = campaignState; - } - - var campaign_params = this.getCampaignProperties(); - - // choose attribution mode. - switch ( this.options.trafficAttributionMode ) { - - case 'direct': - OWA.debug( 'Applying "Direct" Traffic Attribution Model' ); - this.directAttributionModel( campaign_params ); - break; - case 'original': - OWA.debug( 'Applying "Original" Traffic Attribution Model' ); - campaign_params = this.originalAttributionModel( campaign_params ); - break; - default: - OWA.debug( 'Applying Default (Direct) Traffic Attribution Model' ); - this.directAttributionModel( campaign_params ); - } - - // if one of the attribution methods attributes the traffic them - // set attribution properties on the event object - if ( this.isTrafficAttributed ) { - - OWA.debug( 'Attributing Traffic to: %s', JSON.stringify( campaign_params ) ); - - this.applyCampaignPropertiesToEvent( event, campaign_params ); - - // set campaign touches - if ( this.campaignState.length > 0 ) { - this.setGlobalEventProperty( 'attribs', JSON.stringify( this.campaignState ) ); - //event.set( 'campaign_timestamp', campaign_params.ts ); - - } - - // tells upstream processing to skip attribution - //event.set( 'is_attributed', true ); - - } else { - OWA.debug( 'No traffic attribution.' ); - } - - }, - - setCampaignCookie : function( values ) { - OWA.setState( 'c', 'attribs', values, '', 'json', this.options.campaignAttributionWindow ); - }, - - checkRefererForSearchEngine : function ( referer ) { - - var _get = OWA.util.parseUrlParams( referer ); - - var query_params = [ - 'q', 'p','search', 'Keywords','ask','keyword','keywords','kw','pattern', 'pgm','qr','qry','qs','qt','qu','query','queryterm','question', - 'sTerm','searchfor','searchText','srch','su','what' - ]; - - for ( var i = 0, n = query_params.length; i < n; i++ ) { - if ( _get[query_params[i]] ) { - OWA.debug( 'Found search engine query param: ' + query_params[i] ); - return true; - } - } - }, - - addTransaction : function ( order_id, order_source, total, tax, shipping, gateway, city, state, country ) { - this.ecommerce_transaction = new OWA.event(); - this.ecommerce_transaction.setEventType( 'ecommerce.transaction' ); - this.ecommerce_transaction.set( 'ct_order_id', order_id ); - this.ecommerce_transaction.set( 'ct_order_source', order_source ); - this.ecommerce_transaction.set( 'ct_total', total ); - this.ecommerce_transaction.set( 'ct_tax', tax ); - this.ecommerce_transaction.set( 'ct_shipping', shipping ); - this.ecommerce_transaction.set( 'ct_gateway', gateway ); - this.ecommerce_transaction.set( 'page_url', this.page.get('page_url') ); - this.ecommerce_transaction.set( 'city', city ); - this.ecommerce_transaction.set( 'state', state ); - this.ecommerce_transaction.set( 'country', country ); - - OWA.debug('setting up ecommerce transaction'); - - this.ecommerce_transaction.set( 'ct_line_items', [] ); - OWA.debug('completed setting up ecommerce transaction'); - }, - - addTransactionLineItem : function ( order_id, sku, product_name, category, unit_price, quantity ) { - - if ( ! this.ecommerce_transaction ) { - this.addTransaction('none set'); - } - - var li = {}; - li.li_order_id = order_id ; - li.li_sku = sku ; - li.li_product_name = product_name ; - li.li_category = category ; - li.li_unit_price = unit_price ; - li.li_quantity = quantity ; - var items = this.ecommerce_transaction.get( 'ct_line_items' ); - items.push( li ); - this.ecommerce_transaction.set( 'ct_line_items', items ); - }, - - trackTransaction : function () { - - if ( this.ecommerce_transaction ) { - this.trackEvent( this.ecommerce_transaction ); - this.ecommerce_transaction = ''; - } - }, - - manageState : function( event ) { - - if ( ! this.stateInit ) { - this.setVisitorId( event ); - this.setFirstSessionTimestamp( event ); - this.setLastRequestTime( event ); - this.setSessionId( event ); - this.setNumberPriorSessions( event ); - this.setTrafficAttribution( event ); - this.stateInit = true; - } - }, - - setNumberPriorSessions : function ( event ) { - OWA.debug('setting number of prior sessions'); - // if check for nps value in vistor cookie. - var nps = OWA.getState( 'v', 'nps' ); - // set value to 1 if not found as it means its he first session. - if ( ! nps ) { - nps = '0'; - } - - if ( this.isNewSessionFlag === true ) { - // increment visit count and persist to state store - nps = nps * 1; - nps++; - OWA.setState( 'v', 'nps', nps, true ); - } - - this.globalEventProperties.num_prior_sessions = nps; - - }, - - setVisitorId : function( event ) { - - var visitor_id = OWA.getState( 'v', 'vid' ); - - if ( ! visitor_id ) { - visitor_id = OWA.getState( 'v' ); - - if (visitor_id) { - OWA.clearState( 'v' ); - OWA.setState( 'v', 'vid', visitor_id, true ); - } - } - - if ( ! visitor_id ) { - visitor_id = OWA.util.generateRandomGuid( this.siteId ); - - this.globalEventProperties.is_new_visitor = true; - OWA.setState( 'v', 'vid', visitor_id, true ); - OWA.debug('Creating new visitor id'); - } - // set property on event object - this.globalEventProperties.visitor_id = visitor_id ; - }, - - setFirstSessionTimestamp : function( event ) { - var fsts = OWA.getState( 'v', 'fsts' ); - - if ( ! fsts ) { - fsts = event.get('timestamp'); - OWA.debug('setting fsts value: %s', fsts); - OWA.setState('v', 'fsts', fsts , true); - } - - this.globalEventProperties.fsts = fsts; - }, - - setLastRequestTime : function( event ) { - - var last_req = OWA.getState('s', 'last_req'); - - // suppport for old style cookie - if ( ! last_req ) { - var state_store_name = OWA.util.sprintf( '%s_%s', 'ss', this.siteId ); - last_req = OWA.getState( state_store_name, 'last_req' ); - } - // set property on event object - this.globalEventProperties.last_req = last_req; - // store new state value - OWA.setState( 's', 'last_req', event.get( 'timestamp' ), true ); - }, - - setSessionId : function ( event ) { - var session_id = ''; - var state_store_name = ''; - var is_new_session = this.isNewSession( event.get( 'timestamp' ), this.getGlobalEventProperty( 'last_req' ) ); - if ( is_new_session ) { - //set prior_session_id - var prior_session_id = OWA.getState('s', 'sid'); - if ( ! prior_session_id ) { - state_store_name = OWA.util.sprintf('%s_%s', 'ss', this.getSiteId() ); - prior_session_id = OWA.getState(state_store_name, 's'); - } - if ( prior_session_id ) { - this.globalEventProperties.prior_session_id = prior_session_id; - } - session_id = OWA.util.generateRandomGuid( this.getSiteId() ); - // it's a new session. generate new session ID - this.globalEventProperties.session_id = session_id; - //mark new session flag on current request - this.globalEventProperties.is_new_session = true; - this.isNewSessionFlag = true; - OWA.setState( 's', 'sid', session_id, true ); - } else { - // Must be an active session so just pull the session id from the state store - session_id = OWA.getState('s', 'sid'); - // support for old style cookie - if ( ! session_id ) { - state_store_name = OWA.util.sprintf( '%s_%s', 'ss', this.getSiteId() ); - session_id = OWA.getState(state_store_name, 's'); - OWA.setState( 's', 'sid', session_id, true ); - } - - this.globalEventProperties.session_id = session_id; - } - - // fail-safe just in case there is no session_id - if ( ! this.getGlobalEventProperty( 'session_id' ) ) { - session_id = OWA.util.generateRandomGuid( this.getSiteId() ); - this.globalEventProperties.session_id = session_id; - //mark new session flag on current request - this.globalEventProperties.is_new_session = true; - this.isNewSessionFlag = true; - OWA.setState( 's', 'sid', session_id, true ); - } - - }, - - isNewSession : function( timestamp, last_req ) { - - var is_new_session = false; - - if ( ! timestamp ) { - timestamp = OWA.util.getCurrentUnixTimestamp(); - } - - if ( ! last_req ) { - last_req = 0; - } - - var time_since_lastreq = timestamp - last_req; - var len = this.options.sessionLength; - if ( time_since_lastreq < len ) { - OWA.debug("This request is part of a active session."); - return false; - } else { - //NEW SESSION. prev session expired, because no requests since some time. - OWA.debug("This request is the start of a new session. Prior session expired."); - return true; - } - }, - - getGlobalEventProperty : function( name ) { - - if ( this.globalEventProperties.hasOwnProperty(name) ) { - - return this.globalEventProperties[name]; - } - }, - - setGlobalEventProperty : function (name, value) { - - this.globalEventProperties[name] = value; - }, - - setPageProperties : function(properties) { - - for (prop in properties) { - - if ( properties.hasOwnProperty( prop ) ) { - this.page.set( prop, properties[prop] ); - } - } - } - -}; - -(function() { - //if ( typeof owa_baseUrl != "undefined" ) { - // OWA.config.baseUrl = owa_baseUrl; - //} - // execute commands global owa_cmds command queue - if ( typeof owa_cmds === 'undefined' ) { - var q = new OWA.commandQueue(); - } else { - if ( OWA.util.is_array(owa_cmds) ) { - var q = new OWA.commandQueue(); - q.loadCmds( owa_cmds ); - } - } - - window['owa_cmds'] = q; - window['owa_cmds'].process(); -})(); --- a/owa/modules/base/js/owa.widgets.js +++ /dev/null @@ -1,209 +1,1 @@ -// OWA Widgets -OWA.widget = function() { - - this.config = OWA.config; - - return; -} - -OWA.widget.prototype = { - - properties: new Object, - - config: '', - - dom_id: '', - - name: '', - - current_view: '', - - page_num: 1, - - max_page_num: 2, - - more_pages: false, - - minimized: false, - - displayPagination: function() { - - var widget_pagination_div = "#"+this.dom_id+"_widget-pagination"; - var pages = this._makePagination(); - jQuery(widget_pagination_div).show("fast"); - jQuery(widget_pagination_div).html(pages); - jQuery('.owa_widget-paginationcontrol').click(owa_widget_page_results); - - return; - }, - - - hidePagination: function() { - - var widget_pagination_div = "#"+this.dom_id+"_widget-pagination"; - jQuery(widget_pagination_div).hide(); - - return; - }, - - changeView: function(view) { - - var widgetcontentid = "#"+this.dom_id+"_widget-content"; - - this.properties.format = view; - - jQuery(widgetcontentid).slideUp("fast"); - - jQuery.ajax({ - method: "get", - url: this.config.action_url, - data: OWA.util.nsAll(this.properties), - //show loading just when link is clicked - beforeSend: function(){ jQuery("#"+this.dom_id).children(".owa_widget-status").show("slow");}, - //stop showing loading when the process is complete - complete: function(){ jQuery("#"+this.dom_id).children(".owa_widget-status").hide("slow");}, - //so, if data is retrieved, store it in html - success: function(html){ - jQuery(widgetcontentid).show("slow"); //animation - jQuery(widgetcontentid).html(html); //show the html inside .content div - - - - - } - }); //close $.ajax( - - this.current_view = view; - - if (view == "table") { - this.displayPagination(); - } else { - this.hidePagination(); - } - - return true; - - }, - - _makePagination: function() { - - var pagination = ''; - var anchor = this._makeLinkAnchor(); - - // previous nav link - if (this.page_num > 1) { - pagination = 'Pages: '; - pagination = pagination + this._makePaginationLink(anchor, "<< Previous") + ' ... '; - } - - for (i = 1; i <= this.max_page_num; i++) { - - // let's pick a page name for our link - var page_name = i; - - // to link or not to link - if (i == this.page_num) { - pagination = pagination + page_name; - } else { - pagination = pagination + this._makePaginationLink(anchor, page_name); - } - - // add commas - if (i != this.max_page_num) { - pagination = pagination + ', '; - } - - } - - // previous nav link - if (this.page_num < this.max_page_num) { - if (this.more_pages == true) { - pagination = pagination + this._makePaginationLink(anchor, "Next >>") + ' ... '; - } - } - - - return pagination; - - }, - - _makePaginationLink: function(anchor, page_name) { - - var link = '' + page_name + ''; - return link; - }, - - _makeLinkAnchor: function() { - - return anchor = "#"+this.dom_id+"_widget-header"; - } - - - -} - -// Bind event handlers -jQuery(document).ready(function(){ - //jQuery.getScript(OWA.config.js_url + "includes/jquery/tablesorter/jquery.tablesorter.js"); - jQuery('.owa_widget-control').click(owa_widget_changeView); - jQuery('.owa_widget-pagecontrol').click(owa_widget_changeView); - jQuery('.owa_widget-close').click(owa_widget_close); - jQuery('.owa_widget-status').hide("slow"); - jQuery('.owa_widget-collapsetoggle').click(owa_widget_toggle); - jQuery('.owa_widget-paginationcontrol').click(owa_widget_page_results); - -}); - - -// Event handler for changeing views -function owa_widget_changeView() { - - var view = jQuery(this).attr("name"); - var widgetname = jQuery(this).parents(".owa_widget-container").get(0).id; - //alert(widgetname); - return OWA.items[widgetname].changeView(view); - -} - -function owa_widget_close() { - - return jQuery(this).parents(".owa_widget-container").hide("slow"); -} - -function owa_widget_toggle() { - - // get the widget name - var widgetname = jQuery(this).parents(".owa_widget-container").get(0).id; - - // toggle the visibility of the child element - jQuery('#'+widgetname).children(".owa_widget-innercontainer").toggle("slow"); - - if (OWA.items[widgetname].minimized != true) { - // set property on widget object - OWA.items[widgetname].minimized = true; - //change the text of the link to reflect new state - jQuery(this).html("Show"); - } else { - // set property on widget object - OWA.items[widgetname].minimized = false; - //change the text of the link to reflect new state - jQuery(this).html("Minimize"); - } - - return; -} - -function owa_widget_page_results() { - var page = jQuery(this).text(); - alert(page); - var widgetname = jQuery(this).parents(".owa_widget-container").get(0).id; - OWA.items[widgetname].page_num = page; - OWA.items[widgetname].properties.page = page; - var view = OWA.items[widgetname].current_view; - return OWA.items[widgetname].changeView(view); - -} - - - --- a/owa/modules/base/js/wz_jsgraphics.js +++ /dev/null @@ -1,944 +1,1 @@ -/* This notice must be untouched at all times. - -wz_jsgraphics.js v. 2.36 -The latest version is available at -http://www.walterzorn.com -or http://www.devira.com -or http://www.walterzorn.de - -Copyright (c) 2002-2004 Walter Zorn. All rights reserved. -Created 3. 11. 2002 by Walter Zorn (Web: http://www.walterzorn.com ) -Last modified: 21. 6. 2006 - -Performance optimizations for Internet Explorer -by Thomas Frank and John Holdsworth. -fillPolygon method implemented by Matthieu Haller. - -High Performance JavaScript Graphics Library. -Provides methods -- to draw lines, rectangles, ellipses, polygons - with specifiable line thickness, -- to fill rectangles and ellipses -- to draw text. -NOTE: Operations, functions and branching have rather been optimized -to efficiency and speed than to shortness of source code. - -LICENSE: LGPL - -This library is free software; you can redistribute it and/or -modify it under the terms of the GNU Lesser General Public -License (LGPL) as published by the Free Software Foundation; either -version 2.1 of the License, or (at your option) any later version. - -This library is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public -License along with this library; if not, write to the Free Software -Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA, -or see http://www.gnu.org/copyleft/lesser.html -*/ - - -var jg_ihtm, jg_ie, jg_fast, jg_dom, jg_moz, -jg_n4 = (document.layers && typeof document.classes != "undefined"); - - -function chkDHTM(x, i) -{ - x = document.body || null; - jg_ie = x && typeof x.insertAdjacentHTML != "undefined"; - jg_dom = (x && !jg_ie && - typeof x.appendChild != "undefined" && - typeof document.createRange != "undefined" && - typeof (i = document.createRange()).setStartBefore != "undefined" && - typeof i.createContextualFragment != "undefined"); - jg_ihtm = !jg_ie && !jg_dom && x && typeof x.innerHTML != "undefined"; - jg_fast = jg_ie && document.all && !window.opera; - jg_moz = jg_dom && typeof x.style.MozOpacity != "undefined"; -} - - -function pntDoc() -{ - this.wnd.document.write(jg_fast? this.htmRpc() : this.htm); - this.htm = ''; -} - - -function pntCnvDom() -{ - var x = this.wnd.document.createRange(); - x.setStartBefore(this.cnv); - x = x.createContextualFragment(jg_fast? this.htmRpc() : this.htm); - if(this.cnv) this.cnv.appendChild(x); - this.htm = ''; -} - - -function pntCnvIe() -{ - if(this.cnv) this.cnv.insertAdjacentHTML("BeforeEnd", jg_fast? this.htmRpc() : this.htm); - this.htm = ''; -} - - -function pntCnvIhtm() -{ - if(this.cnv) this.cnv.innerHTML += this.htm; - this.htm = ''; -} - - -function pntCnv() -{ - this.htm = ''; -} - - -function mkDiv(x, y, w, h) -{ - this.htm += '
                          <\/div>'; -} - - -function mkDivIe(x, y, w, h) -{ - this.htm += '%%'+this.color+';'+x+';'+y+';'+w+';'+h+';'; -} - - -function mkDivPrt(x, y, w, h) -{ - this.htm += '
                          <\/div>'; -} - - -function mkLyr(x, y, w, h) -{ - this.htm += '<\/layer>\n'; -} - - -var regex = /%%([^;]+);([^;]+);([^;]+);([^;]+);([^;]+);/g; -function htmRpc() -{ - return this.htm.replace( - regex, - '
                          \n'); -} - - -function htmPrtRpc() -{ - return this.htm.replace( - regex, - '
                          \n'); -} - - -function mkLin(x1, y1, x2, y2) -{ - if (x1 > x2) - { - var _x2 = x2; - var _y2 = y2; - x2 = x1; - y2 = y1; - x1 = _x2; - y1 = _y2; - } - var dx = x2-x1, dy = Math.abs(y2-y1), - x = x1, y = y1, - yIncr = (y1 > y2)? -1 : 1; - - if (dx >= dy) - { - var pr = dy<<1, - pru = pr - (dx<<1), - p = pr-dx, - ox = x; - while ((dx--) > 0) - { - ++x; - if (p > 0) - { - this.mkDiv(ox, y, x-ox, 1); - y += yIncr; - p += pru; - ox = x; - } - else p += pr; - } - this.mkDiv(ox, y, x2-ox+1, 1); - } - - else - { - var pr = dx<<1, - pru = pr - (dy<<1), - p = pr-dy, - oy = y; - if (y2 <= y1) - { - while ((dy--) > 0) - { - if (p > 0) - { - this.mkDiv(x++, y, 1, oy-y+1); - y += yIncr; - p += pru; - oy = y; - } - else - { - y += yIncr; - p += pr; - } - } - this.mkDiv(x2, y2, 1, oy-y2+1); - } - else - { - while ((dy--) > 0) - { - y += yIncr; - if (p > 0) - { - this.mkDiv(x++, oy, 1, y-oy); - p += pru; - oy = y; - } - else p += pr; - } - this.mkDiv(x2, oy, 1, y2-oy+1); - } - } -} - - -function mkLin2D(x1, y1, x2, y2) -{ - if (x1 > x2) - { - var _x2 = x2; - var _y2 = y2; - x2 = x1; - y2 = y1; - x1 = _x2; - y1 = _y2; - } - var dx = x2-x1, dy = Math.abs(y2-y1), - x = x1, y = y1, - yIncr = (y1 > y2)? -1 : 1; - - var s = this.stroke; - if (dx >= dy) - { - if (dx > 0 && s-3 > 0) - { - var _s = (s*dx*Math.sqrt(1+dy*dy/(dx*dx))-dx-(s>>1)*dy) / dx; - _s = (!(s-4)? Math.ceil(_s) : Math.round(_s)) + 1; - } - else var _s = s; - var ad = Math.ceil(s/2); - - var pr = dy<<1, - pru = pr - (dx<<1), - p = pr-dx, - ox = x; - while ((dx--) > 0) - { - ++x; - if (p > 0) - { - this.mkDiv(ox, y, x-ox+ad, _s); - y += yIncr; - p += pru; - ox = x; - } - else p += pr; - } - this.mkDiv(ox, y, x2-ox+ad+1, _s); - } - - else - { - if (s-3 > 0) - { - var _s = (s*dy*Math.sqrt(1+dx*dx/(dy*dy))-(s>>1)*dx-dy) / dy; - _s = (!(s-4)? Math.ceil(_s) : Math.round(_s)) + 1; - } - else var _s = s; - var ad = Math.round(s/2); - - var pr = dx<<1, - pru = pr - (dy<<1), - p = pr-dy, - oy = y; - if (y2 <= y1) - { - ++ad; - while ((dy--) > 0) - { - if (p > 0) - { - this.mkDiv(x++, y, _s, oy-y+ad); - y += yIncr; - p += pru; - oy = y; - } - else - { - y += yIncr; - p += pr; - } - } - this.mkDiv(x2, y2, _s, oy-y2+ad); - } - else - { - while ((dy--) > 0) - { - y += yIncr; - if (p > 0) - { - this.mkDiv(x++, oy, _s, y-oy+ad); - p += pru; - oy = y; - } - else p += pr; - } - this.mkDiv(x2, oy, _s, y2-oy+ad+1); - } - } -} - - -function mkLinDott(x1, y1, x2, y2) -{ - if (x1 > x2) - { - var _x2 = x2; - var _y2 = y2; - x2 = x1; - y2 = y1; - x1 = _x2; - y1 = _y2; - } - var dx = x2-x1, dy = Math.abs(y2-y1), - x = x1, y = y1, - yIncr = (y1 > y2)? -1 : 1, - drw = true; - if (dx >= dy) - { - var pr = dy<<1, - pru = pr - (dx<<1), - p = pr-dx; - while ((dx--) > 0) - { - if (drw) this.mkDiv(x, y, 1, 1); - drw = !drw; - if (p > 0) - { - y += yIncr; - p += pru; - } - else p += pr; - ++x; - } - if (drw) this.mkDiv(x, y, 1, 1); - } - - else - { - var pr = dx<<1, - pru = pr - (dy<<1), - p = pr-dy; - while ((dy--) > 0) - { - if (drw) this.mkDiv(x, y, 1, 1); - drw = !drw; - y += yIncr; - if (p > 0) - { - ++x; - p += pru; - } - else p += pr; - } - if (drw) this.mkDiv(x, y, 1, 1); - } -} - - -function mkOv(left, top, width, height) -{ - var a = width>>1, b = height>>1, - wod = width&1, hod = (height&1)+1, - cx = left+a, cy = top+b, - x = 0, y = b, - ox = 0, oy = b, - aa = (a*a)<<1, bb = (b*b)<<1, - st = (aa>>1)*(1-(b<<1)) + bb, - tt = (bb>>1) - aa*((b<<1)-1), - w, h; - while (y > 0) - { - if (st < 0) - { - st += bb*((x<<1)+3); - tt += (bb<<1)*(++x); - } - else if (tt < 0) - { - st += bb*((x<<1)+3) - (aa<<1)*(y-1); - tt += (bb<<1)*(++x) - aa*(((y--)<<1)-3); - w = x-ox; - h = oy-y; - if (w&2 && h&2) - { - this.mkOvQds(cx, cy, -x+2, ox+wod, -oy, oy-1+hod, 1, 1); - this.mkOvQds(cx, cy, -x+1, x-1+wod, -y-1, y+hod, 1, 1); - } - else this.mkOvQds(cx, cy, -x+1, ox+wod, -oy, oy-h+hod, w, h); - ox = x; - oy = y; - } - else - { - tt -= aa*((y<<1)-3); - st -= (aa<<1)*(--y); - } - } - this.mkDiv(cx-a, cy-oy, a-ox+1, (oy<<1)+hod); - this.mkDiv(cx+ox+wod, cy-oy, a-ox+1, (oy<<1)+hod); -} - - -function mkOv2D(left, top, width, height) -{ - var s = this.stroke; - width += s-1; - height += s-1; - var a = width>>1, b = height>>1, - wod = width&1, hod = (height&1)+1, - cx = left+a, cy = top+b, - x = 0, y = b, - aa = (a*a)<<1, bb = (b*b)<<1, - st = (aa>>1)*(1-(b<<1)) + bb, - tt = (bb>>1) - aa*((b<<1)-1); - - if (s-4 < 0 && (!(s-2) || width-51 > 0 && height-51 > 0)) - { - var ox = 0, oy = b, - w, h, - pxl, pxr, pxt, pxb, pxw; - while (y > 0) - { - if (st < 0) - { - st += bb*((x<<1)+3); - tt += (bb<<1)*(++x); - } - else if (tt < 0) - { - st += bb*((x<<1)+3) - (aa<<1)*(y-1); - tt += (bb<<1)*(++x) - aa*(((y--)<<1)-3); - w = x-ox; - h = oy-y; - - if (w-1) - { - pxw = w+1+(s&1); - h = s; - } - else if (h-1) - { - pxw = s; - h += 1+(s&1); - } - else pxw = h = s; - this.mkOvQds(cx, cy, -x+1, ox-pxw+w+wod, -oy, -h+oy+hod, pxw, h); - ox = x; - oy = y; - } - else - { - tt -= aa*((y<<1)-3); - st -= (aa<<1)*(--y); - } - } - this.mkDiv(cx-a, cy-oy, s, (oy<<1)+hod); - this.mkDiv(cx+a+wod-s+1, cy-oy, s, (oy<<1)+hod); - } - - else - { - var _a = (width-((s-1)<<1))>>1, - _b = (height-((s-1)<<1))>>1, - _x = 0, _y = _b, - _aa = (_a*_a)<<1, _bb = (_b*_b)<<1, - _st = (_aa>>1)*(1-(_b<<1)) + _bb, - _tt = (_bb>>1) - _aa*((_b<<1)-1), - - pxl = new Array(), - pxt = new Array(), - _pxb = new Array(); - pxl[0] = 0; - pxt[0] = b; - _pxb[0] = _b-1; - while (y > 0) - { - if (st < 0) - { - st += bb*((x<<1)+3); - tt += (bb<<1)*(++x); - pxl[pxl.length] = x; - pxt[pxt.length] = y; - } - else if (tt < 0) - { - st += bb*((x<<1)+3) - (aa<<1)*(y-1); - tt += (bb<<1)*(++x) - aa*(((y--)<<1)-3); - pxl[pxl.length] = x; - pxt[pxt.length] = y; - } - else - { - tt -= aa*((y<<1)-3); - st -= (aa<<1)*(--y); - } - - if (_y > 0) - { - if (_st < 0) - { - _st += _bb*((_x<<1)+3); - _tt += (_bb<<1)*(++_x); - _pxb[_pxb.length] = _y-1; - } - else if (_tt < 0) - { - _st += _bb*((_x<<1)+3) - (_aa<<1)*(_y-1); - _tt += (_bb<<1)*(++_x) - _aa*(((_y--)<<1)-3); - _pxb[_pxb.length] = _y-1; - } - else - { - _tt -= _aa*((_y<<1)-3); - _st -= (_aa<<1)*(--_y); - _pxb[_pxb.length-1]--; - } - } - } - - var ox = 0, oy = b, - _oy = _pxb[0], - l = pxl.length, - w, h; - for (var i = 0; i < l; i++) - { - if (typeof _pxb[i] != "undefined") - { - if (_pxb[i] < _oy || pxt[i] < oy) - { - x = pxl[i]; - this.mkOvQds(cx, cy, -x+1, ox+wod, -oy, _oy+hod, x-ox, oy-_oy); - ox = x; - oy = pxt[i]; - _oy = _pxb[i]; - } - } - else - { - x = pxl[i]; - this.mkDiv(cx-x+1, cy-oy, 1, (oy<<1)+hod); - this.mkDiv(cx+ox+wod, cy-oy, 1, (oy<<1)+hod); - ox = x; - oy = pxt[i]; - } - } - this.mkDiv(cx-a, cy-oy, 1, (oy<<1)+hod); - this.mkDiv(cx+ox+wod, cy-oy, 1, (oy<<1)+hod); - } -} - - -function mkOvDott(left, top, width, height) -{ - var a = width>>1, b = height>>1, - wod = width&1, hod = height&1, - cx = left+a, cy = top+b, - x = 0, y = b, - aa2 = (a*a)<<1, aa4 = aa2<<1, bb = (b*b)<<1, - st = (aa2>>1)*(1-(b<<1)) + bb, - tt = (bb>>1) - aa2*((b<<1)-1), - drw = true; - while (y > 0) - { - if (st < 0) - { - st += bb*((x<<1)+3); - tt += (bb<<1)*(++x); - } - else if (tt < 0) - { - st += bb*((x<<1)+3) - aa4*(y-1); - tt += (bb<<1)*(++x) - aa2*(((y--)<<1)-3); - } - else - { - tt -= aa2*((y<<1)-3); - st -= aa4*(--y); - } - if (drw) this.mkOvQds(cx, cy, -x, x+wod, -y, y+hod, 1, 1); - drw = !drw; - } -} - - -function mkRect(x, y, w, h) -{ - var s = this.stroke; - this.mkDiv(x, y, w, s); - this.mkDiv(x+w, y, s, h); - this.mkDiv(x, y+h, w+s, s); - this.mkDiv(x, y+s, s, h-s); -} - - -function mkRectDott(x, y, w, h) -{ - this.drawLine(x, y, x+w, y); - this.drawLine(x+w, y, x+w, y+h); - this.drawLine(x, y+h, x+w, y+h); - this.drawLine(x, y, x, y+h); -} - - -function jsgFont() -{ - this.PLAIN = 'font-weight:normal;'; - this.BOLD = 'font-weight:bold;'; - this.ITALIC = 'font-style:italic;'; - this.ITALIC_BOLD = this.ITALIC + this.BOLD; - this.BOLD_ITALIC = this.ITALIC_BOLD; -} -var Font = new jsgFont(); - - -function jsgStroke() -{ - this.DOTTED = -1; -} -var Stroke = new jsgStroke(); - - -function jsGraphics(id, wnd) -{ - this.setColor = new Function('arg', 'this.color = arg.toLowerCase();'); - - this.setStroke = function(x) - { - this.stroke = x; - if (!(x+1)) - { - this.drawLine = mkLinDott; - this.mkOv = mkOvDott; - this.drawRect = mkRectDott; - } - else if (x-1 > 0) - { - this.drawLine = mkLin2D; - this.mkOv = mkOv2D; - this.drawRect = mkRect; - } - else - { - this.drawLine = mkLin; - this.mkOv = mkOv; - this.drawRect = mkRect; - } - }; - - - this.setPrintable = function(arg) - { - this.printable = arg; - if (jg_fast) - { - this.mkDiv = mkDivIe; - this.htmRpc = arg? htmPrtRpc : htmRpc; - } - else this.mkDiv = jg_n4? mkLyr : arg? mkDivPrt : mkDiv; - }; - - - this.setFont = function(fam, sz, sty) - { - this.ftFam = fam; - this.ftSz = sz; - this.ftSty = sty || Font.PLAIN; - }; - - - this.drawPolyline = this.drawPolyLine = function(x, y, s) - { - for (var i=0 ; i>1, b = (h -= 1)>>1, - wod = (w&1)+1, hod = (h&1)+1, - cx = left+a, cy = top+b, - x = 0, y = b, - ox = 0, oy = b, - aa2 = (a*a)<<1, aa4 = aa2<<1, bb = (b*b)<<1, - st = (aa2>>1)*(1-(b<<1)) + bb, - tt = (bb>>1) - aa2*((b<<1)-1), - pxl, dw, dh; - if (w+1) while (y > 0) - { - if (st < 0) - { - st += bb*((x<<1)+3); - tt += (bb<<1)*(++x); - } - else if (tt < 0) - { - st += bb*((x<<1)+3) - aa4*(y-1); - pxl = cx-x; - dw = (x<<1)+wod; - tt += (bb<<1)*(++x) - aa2*(((y--)<<1)-3); - dh = oy-y; - this.mkDiv(pxl, cy-oy, dw, dh); - this.mkDiv(pxl, cy+y+hod, dw, dh); - ox = x; - oy = y; - } - else - { - tt -= aa2*((y<<1)-3); - st -= aa4*(--y); - } - } - this.mkDiv(cx-a, cy-oy, w+1, (oy<<1)+hod); - }; - - -/* fillPolygon method, implemented by Matthieu Haller. -This javascript function is an adaptation of the gdImageFilledPolygon for Walter Zorn lib. -C source of GD 1.8.4 found at http://www.boutell.com/gd/ - -THANKS to Kirsten Schulz for the polygon fixes! - -The intersection finding technique of this code could be improved -by remembering the previous intertersection, and by using the slope. -That could help to adjust intersections to produce a nice -interior_extrema. */ - this.fillPolygon = function(array_x, array_y) - { - var i; - var y; - var miny, maxy; - var x1, y1; - var x2, y2; - var ind1, ind2; - var ints; - - var n = array_x.length; - - if (!n) return; - - - miny = array_y[0]; - maxy = array_y[0]; - for (i = 1; i < n; i++) - { - if (array_y[i] < miny) - miny = array_y[i]; - - if (array_y[i] > maxy) - maxy = array_y[i]; - } - for (y = miny; y <= maxy; y++) - { - var polyInts = new Array(); - ints = 0; - for (i = 0; i < n; i++) - { - if (!i) - { - ind1 = n-1; - ind2 = 0; - } - else - { - ind1 = i-1; - ind2 = i; - } - y1 = array_y[ind1]; - y2 = array_y[ind2]; - if (y1 < y2) - { - x1 = array_x[ind1]; - x2 = array_x[ind2]; - } - else if (y1 > y2) - { - y2 = array_y[ind1]; - y1 = array_y[ind2]; - x2 = array_x[ind1]; - x1 = array_x[ind2]; - } - else continue; - - // modified 11. 2. 2004 Walter Zorn - if ((y >= y1) && (y < y2)) - polyInts[ints++] = Math.round((y-y1) * (x2-x1) / (y2-y1) + x1); - - else if ((y == maxy) && (y > y1) && (y <= y2)) - polyInts[ints++] = Math.round((y-y1) * (x2-x1) / (y2-y1) + x1); - } - polyInts.sort(integer_compare); - for (i = 0; i < ints; i+=2) - this.mkDiv(polyInts[i], y, polyInts[i+1]-polyInts[i]+1, 1); - } - }; - - - this.drawString = function(txt, x, y) - { - this.htm += '
                          '+ - txt + - '<\/div>'; - }; - - -/* drawStringRect() added by Rick Blommers. -Allows to specify the size of the text rectangle and to align the -text both horizontally (e.g. right) and vertically within that rectangle */ - this.drawStringRect = function(txt, x, y, width, halign) - { - this.htm += '
                          '+ - txt + - '<\/div>'; - }; - - - this.drawImage = function(imgSrc, x, y, w, h, a) - { - this.htm += '
                          '+ - ''+ - '<\/div>'; - }; - - - this.clear = function() - { - this.htm = ""; - if (this.cnv) this.cnv.innerHTML = this.defhtm; - }; - - - this.mkOvQds = function(cx, cy, xl, xr, yt, yb, w, h) - { - this.mkDiv(xr+cx, yt+cy, w, h); - this.mkDiv(xr+cx, yb+cy, w, h); - this.mkDiv(xl+cx, yb+cy, w, h); - this.mkDiv(xl+cx, yt+cy, w, h); - }; - - this.setStroke(1); - this.setFont('verdana,geneva,helvetica,sans-serif', String.fromCharCode(0x31, 0x32, 0x70, 0x78), Font.PLAIN); - this.color = '#000000'; - this.htm = ''; - this.wnd = wnd || window; - - if (!(jg_ie || jg_dom || jg_ihtm)) chkDHTM(); - if (typeof id != 'string' || !id) this.paint = pntDoc; - else - { - this.cnv = document.all? (this.wnd.document.all[id] || null) - : document.getElementById? (this.wnd.document.getElementById(id) || null) - : null; - this.defhtm = (this.cnv && this.cnv.innerHTML)? this.cnv.innerHTML : ''; - this.paint = jg_dom? pntCnvDom : jg_ie? pntCnvIe : jg_ihtm? pntCnvIhtm : pntCnv; - } - - this.setPrintable(false); -} - - - -function integer_compare(x,y) -{ - return (x < y) ? -1 : ((x > y)*1); -} - --- a/owa/modules/base/jsLogLib.php +++ /dev/null @@ -1,119 +1,1 @@ -setView('base.jsLogLibView'); - - return; - - } - -} - -/** - * Combined Javascript Tracker Library and Invocation view - * - * Returns owa.tracker lib and invocation as a non minimized contatinated stream. This method - * has been depricated in favor of a static file approach and is maintained - * solely for backwards compatability with old style tags. - * - * @author Peter Adams - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_jsLogLibView extends owa_view { - - function owa_jsLogLibView() { - - return owa_jsLogLibView::__construct(); - } - - function __construct() { - - return parent::__construct(); - } - - function render($data) { - - // load body template - $this->t->set_template('wrapper_blank.tpl'); - - // check to see if we should log clicks. - if (!owa_coreAPI::getSetting('base', 'log_dom_clicks')) { - $this->body->set('do_not_log_clicks', true); - } - - // check to see if we should log clicks. - if (!owa_coreAPI::getSetting('base', 'log_dom_stream')) { - $this->body->set('do_not_log_domstream', true); - } - - //set siteId variable name to support old style owa_params js object - $this->body->set("site_id", "owa_params['site_id']"); - // set name of javascript object containing params that need to be logged - // depricated, but needed to support old style tags - $this->body->set("owa_params", true); - // load body template - $this->body->set_template('js_logger.tpl'); - - // assemble JS libs - $this->setJs('json2', 'base/js/includes/json2.js'); - $this->setJs('lazyload', 'base/js/includes/lazyload-2.0.min.js'); - $this->setJs('owa', 'base/js/owa.js'); - $this->setJs('owa.tracker', 'base/js/owa.tracker.js'); - //$this->setJs('url_encode', 'base/js/includes/url_encode.js'); - $this->concatinateJs(); - - - return; - } - - -} - - - - -?> + --- a/owa/modules/base/kmlVisitsGeolocation.php +++ /dev/null @@ -1,136 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_kmlVisitsGeolocationController extends owa_reportController { - - function owa_kmlVisitsGeolocationController($params) { - - return owa_kmlVisitsGeolocationController::__construct($params); - - } - - function __construct($params) { - - return parent::__construct($params); - } - - function action() { - - // Load the core API - $api = &owa_coreAPI::singleton($this->params); - - if ($this->params['site_id']): - //get site labels - $s = owa_coreAPI::entityFactory('base.site'); - $s->getByColumn('site_id', $this->getParam('site_id')); - $this->set('site_name', $s->get('name')); - $this->set('site_description', $s->get('description')); - else: - $this->set('site_name', 'All Sites'); - $this->set('site_description', 'All Sites Tracked by OWA'); - endif; - - //setup Metrics - $m = owa_coreApi::metricFactory('base.latestVisits'); - $m->setConstraint('site_id', $this->getParam('site_id')); - $m->setPeriod($this->getPeriod()); - $m->setOrder(OWA_SQL_DESCENDING); - $m->setLimit(15); - $results = $m->generate(); - - - $this->set('latest_visits', $results); - - $this->setView('base.kmlVisitsGeolocation'); - - return; - - } - -} - -/** - * Visits Geolocation KML View - * - * @author Peter Adams - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_kmlVisitsGeolocationView extends owa_view { - - function owa_kmlVisitsGeolocationView() { - - return owa_kmlVisitsGeolocationView::__construct(); - } - - function __construct() { - - return parent::__construct(); - } - - function render($data) { - - $this->t->set_template('wrapper_blank.tpl'); - - // load body template - $this->body->set_template('kml_visits_geolocation.tpl'); - $this->body->set('visits', $this->get('latest_visits')); - $this->body->set('site_name', $this->get('site_name')); - $this->body->set('site_domain', $this->get('site_domain')); - $this->body->set('site_description', $this->get('site_description')); - - //$this->_setLinkState(); - - $this->body->set('xml', ''); - - header('Content-type: application/vnd.google-earth.kml+xml; charset=UTF-8', true); - - header('Content-Disposition: inline; filename="owa.kml"'); - //header('Content-type: text/plain', true); - return; - } - - -} - - -?> + --- a/owa/modules/base/kmlVisitsGeolocationNetworkLink.php +++ /dev/null @@ -1,125 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_kmlVisitsGeolocationNetworkLinkController extends owa_reportController { - - function __construct($params) { - - $this->priviledge_level = 'viewer'; - return parent::__construct($params); - } - - function action() { - - // Load the core API - $api = &owa_coreAPI::singleton($this->params); - - $data = array(); - $data['params'] = $this->params; - - if ($this->params['site_id']): - //get site labels - $s = owa_coreAPI::entityFactory('base.site'); - $s->getByColumn('site_id', $this->params['site_id']); - $data['site_name'] = $s->get('name'); - $data['site_description'] = $s->get('description'); - $data['site_domain'] = $s->get('domain'); - else: - $data['site_name'] = 'All Sites'; - $data['site_description'] = 'Visits for all sitess tracked by OWA.'; - $data['site_domain'] = 'owa'; - endif; - - - $data['view'] = 'base.kmlVisitsGeolocationNetworkLink'; - $data['user_name'] = $this->params['u']; - $data['passkey'] = $this->params['pk']; - - return $data; - - } - -} - - - -/** - * Visits Geolocation KML View - * - * @author Peter Adams - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_kmlVisitsGeolocationNetworkLinkView extends owa_view { - - function __construct() { - - $this->priviledge_level = 'guest'; - - return parent::__construct(); - } - - function render($data) { - - $this->t->set_template('wrapper_blank.tpl'); - - // load body template - $this->body->set_template('kml_network_link_geolocation.tpl'); - $this->body->set('params', $data['params']); - $this->body->set('site_name', $data['site_name']); - $this->body->set('site_domain', $data['site_domain']); - $this->body->set('site_description', $data['site_description']); - $this->body->set('period_label', owa_lib::get_period_label($data['params']['period'])); - $this->body->set('date_label', owa_lib::getDateLabel($data['params']['period'])); - $this->body->set('xml', ''); - $this->body->set('user_name', $data['user_name']); - $this->body->set('passkey', $data['passkey']); - - $this->_setLinkState(); - - header('Content-type: application/vnd.google-earth.kml+xml; charset=UTF-8', true); - //header('Content-type: application/keyhole', true); - } -} - - -?> + --- a/owa/modules/base/login.php +++ /dev/null @@ -1,60 +1,1 @@ -authenticateUser(); - $go = $this->getParam('go'); - // if authentication is successfull - if ($status['auth_status'] == true) { - - if (!empty($go)) { - // redirect to url if present - $url = urldecode($go); - $this->e->debug("redirecting browser to...:". $url); - owa_lib::redirectBrowser($url); - - } else { - //else redirect to home page - - // these need to be unset as they were set previously by the doAction method. - // need to refactor this out. - $this->set('auth_status', ''); - $this->set('params', ''); - $this->set('site_id', ''); - $this->setRedirectAction($this->config['start_page']); - } - - } else { - // return login form with error msg - $this->setView('base.loginForm'); - $this->set('go', $go); - $this->set('error_code', 2002); - $this->set('user_id', $this->getParam('user_id')); - - } - } -} - -?> --- a/owa/modules/base/loginForm.php +++ /dev/null @@ -1,80 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ -class owa_loginFormController extends owa_controller { - - function __construct($params) { - - return parent::__construct($params); - } - - function action() { - - $cu = owa_coreAPI::getCurrentUser(); - - $this->set('go', $this->getParam('go')); - $this->set('user_id', $cu->getUserData('user_id')); - $this->setView('base.loginForm'); - } -} - -/** - * Login Form View - * - * @author Peter Adams - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_loginFormView extends owa_view { - - function __construct() { - - return parent::__construct(); - } - - function construct($data) { - - $this->setTitle("Login"); - $this->t->set_template('wrapper_public.tpl'); - $this->body->set_template('login_form.tpl'); - $this->body->set('headline', 'Please login using the from below'); - $this->body->set('user_id', $this->get('user_id')); - $this->body->set('go', $this->get('go')); - } -} - -?> --- a/owa/modules/base/logout.php +++ /dev/null @@ -1,44 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_logoutController extends owa_controller { - - function action() { - - $auth = &owa_auth::get_instance(); - $auth->deleteCredentials(); - $this->setRedirectAction('base.loginForm'); - } -} - -?> --- a/owa/modules/base/metrics/actions.php +++ /dev/null @@ -1,45 +1,1 @@ -Open Web Analytics -// Copyright Peter Adams. All rights reserved. -// -// Licensed under GPL v2.0 http://www.gnu.org/copyleft/gpl.html -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// $Id$ -// - -/** - * Actions Count Metric - * - * @author Peter Adams - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.3.0 - */ - -class owa_actions extends owa_metric { - - function __construct() { - - $this->setName('actions'); - $this->setLabel('Actions'); - $this->setEntity('base.action_fact'); - $this->setColumn('id'); - $this->setSelect(sprintf("count(distinct %s)", $this->getColumn())); - $this->setDataType('integer'); - return parent::__construct(); - } -} - -?> + --- a/owa/modules/base/metrics/actionsPerVisit.php +++ /dev/null @@ -1,49 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.3.0 - */ - -class owa_actionsPerVisit extends owa_calculatedMetric { - - function __construct() { - - $this->setName('actionsPerVisit'); - $this->setLabel('Actions / Visit'); - $this->setChildMetric('actions'); - $this->setChildMetric('visits'); - $this->setFormula('round(actions / visits, 1)'); - $this->setDataType('decimal'); - return parent::__construct(); - } -} - -?> + --- a/owa/modules/base/metrics/actionsValue.php +++ /dev/null @@ -1,45 +1,1 @@ -Open Web Analytics -// Copyright Peter Adams. All rights reserved. -// -// Licensed under GPL v2.0 http://www.gnu.org/copyleft/gpl.html -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// $Id$ -// - -/** - * Unique Action Count Metric - * - * @author Peter Adams - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.3.0 - */ - -class owa_actionsValue extends owa_metric { - - function __construct() { - - $this->setName('actionsValue'); - $this->setLabel('Actions Value'); - $this->setEntity('base.action_fact'); - $this->setColumn('numeric_value'); - $this->setSelect(sprintf("sum(%s)", $this->getColumn())); - $this->setDataType('integer'); - return parent::__construct(); - } -} - -?> + --- a/owa/modules/base/metrics/bounceRate.php +++ /dev/null @@ -1,49 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.3.0 - */ - -class owa_bounceRate extends owa_calculatedMetric { - - function __construct() { - - $this->setName('bounceRate'); - $this->setLabel('Bounce Rate'); - $this->setChildMetric('bounces'); - $this->setChildMetric('visits'); - $this->setFormula('bounces / visits'); - $this->setDataType('percentage'); - return parent::__construct(); - } -} - -?> + --- a/owa/modules/base/metrics/bounces.php +++ /dev/null @@ -1,45 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.3.0 - */ - -class owa_bounces extends owa_metric { - - function __construct() { - - $this->setName('bounces'); - $this->setLabel('Bounces'); - $this->setEntity('base.session'); - $this->setColumn('is_bounce'); - $this->setSelect(sprintf("sum(CASE %s WHEN TRUE THEN 1 ELSE 0 END)", $this->getColumn())); - $this->setDataType('integer'); - return parent::__construct(); - } -} - -?> + --- a/owa/modules/base/metrics/clickBrowserTypes.php +++ /dev/null @@ -1,64 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_clickBrowserTypes extends owa_metric { - - function owa_clickBrowserTypes($params = null) { - - return owa_clickBrowserTypes::__construct($params); - - } - - function __construct($params = null) { - - return parent::__construct($params); - } - - function calculate() { - - $this->db->selectFrom('owa_click', 'click'); - - $this->db->selectColumn("count(distinct click.id) as count, - ua.id, - ua.ua as ua, - ua.browser_type"); - $this->db->join(OWA_SQL_JOIN_LEFT_OUTER,'owa_ua', 'ua', 'ua_id', 'ua.id'); - $this->db->groupBy('ua.browser_type'); - $this->db->orderBy('count'); - - return $this->db->getAllRows(); - - } - - -} - - -?> + --- a/owa/modules/base/metrics/domClicks.php +++ /dev/null @@ -1,45 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_domClicks extends owa_metric { - - function __construct() { - - $this->setName('domClicks'); - $this->setLabel('Dom Clicks'); - $this->setEntity('base.click'); - $this->setColumn('id'); - $this->setSelect(sprintf("count(%s)", $this->getColumn())); - $this->setDataType('integer'); - return parent::__construct(); - } -} - -?> + --- a/owa/modules/base/metrics/ecommerceConversionRate.php +++ /dev/null @@ -1,49 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_ecommerceConversionRate extends owa_calculatedMetric { - - function __construct() { - - $this->setName('ecommerceConversionRate'); - $this->setLabel('Ecommerce Conversion Rate'); - $this->setChildMetric('visits'); - $this->setChildMetric('transactions'); - $this->setFormula('transactions / visits'); - $this->setDataType('percentage'); - return parent::__construct(); - } -} - -?> + --- a/owa/modules/base/metrics/feedReaders.php +++ /dev/null @@ -1,45 +1,1 @@ - - * @copyright Copyright © 2010 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.3.0 - */ - -class owa_feedReaders extends owa_metric { - - function __construct() { - - $this->setName('feedReaders'); - $this->setLabel('Feed Readers'); - $this->setEntity('base.feed_request'); - $this->setColumn('feed_reader_guid'); - $this->setSelect(sprintf("count(distinct %s)", $this->getColumn())); - $this->setDataType('integer'); - return parent::__construct(); - } -} - -?> + --- a/owa/modules/base/metrics/feedRequests.php +++ /dev/null @@ -1,45 +1,1 @@ - - * @copyright Copyright © 2010 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.3.0 - */ - -class owa_feedRequests extends owa_metric { - - function __construct() { - - $this->setName('feedRequests'); - $this->setLabel('Feed Requests'); - $this->setEntity('base.feed_request'); - $this->setColumn('id'); - $this->setSelect(sprintf("count(distinct %s)", $this->getColumn())); - $this->setDataType('integer'); - return parent::__construct(); - } -} - -?> + --- a/owa/modules/base/metrics/feedSubscriptions.php +++ /dev/null @@ -1,45 +1,1 @@ - - * @copyright Copyright © 2010 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.3.0 - */ - -class owa_feedSubscriptions extends owa_metric { - - function __construct() { - - $this->setName('feedSubscriptions'); - $this->setLabel('Feed Subscriptions'); - $this->setEntity('base.feed_request'); - $this->setColumn('subscription_id'); - $this->setSelect(sprintf("count(distinct %s)", $this->getColumn())); - $this->setDataType('integer'); - return parent::__construct(); - } -} - -?> + --- a/owa/modules/base/metrics/goalAbandonRateAll.php +++ /dev/null @@ -1,49 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_goalAbandonRateAll extends owa_calculatedMetric { - - function __construct() { - - $this->setName('goalAbandonRateAll'); - $this->setLabel('Goal Abandonment Rate'); - $this->setChildMetric('goalCompletionsAll'); - $this->setChildMetric('goalStartsAll'); - $this->setFormula('goalStartsAll / goalCompletionsAll'); - $this->setDataType('percentage'); - return parent::__construct(); - } -} - -?> + --- a/owa/modules/base/metrics/goalCompletionsAll.php +++ /dev/null @@ -1,45 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_goalCompletionsAll extends owa_metric { - - function __construct() { - - $this->setName('goalCompletionsAll'); - $this->setLabel('Goal Completions'); - $this->setEntity('base.session'); - $this->setColumn('num_goals'); - $this->setSelect(sprintf("SUM(%s)", $this->getColumn())); - $this->setDataType('integer'); - return parent::__construct(); - } -} - -?> + --- a/owa/modules/base/metrics/goalConversionRateAll.php +++ /dev/null @@ -1,49 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_goalConversionRateAll extends owa_calculatedMetric { - - function __construct() { - - $this->setName('goalConversionRateAll'); - $this->setLabel('Goal Conversion Rate'); - $this->setChildMetric('visits'); - $this->setChildMetric('goalCompletionsAll'); - $this->setFormula('goalCompletionsAll / visits'); - $this->setDataType('percentage'); - return parent::__construct(); - } -} - -?> + --- a/owa/modules/base/metrics/goalNCompletions.php +++ /dev/null @@ -1,57 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_goalNCompletions extends owa_metric { - - function __construct( $params ) { - - if ( array_key_exists( 'goal_number' , $params ) ) { - $goal_number = $params['goal_number']; - } - - $siteId = owa_coreAPI::getRequestParam('siteId'); - $gm = owa_coreAPI::supportClassFactory('base', 'goalManager', $siteId); - $goal = $gm->getGoal($goal_number); - $name = 'goal'.$goal_number.'Completions'; - $this->setName( $name ); - $this->setLabel( sprintf('G%d: %s', $goal_number,$goal['goal_name'] ) ); - $this->setEntity( 'base.session' ); - $column = 'goal_'.$goal_number; - $this->setColumn( $column ); - $this->setSelect( sprintf( "SUM(%s)", $this->getColumn() ) ); - $this->setDataType( 'integer' ); - return parent::__construct(); - } -} - -?> + --- a/owa/modules/base/metrics/goalNStarts.php +++ /dev/null @@ -1,56 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_goalNStarts extends owa_metric { - - function __construct( $params ) { - - if ( array_key_exists( 'goal_number' ), $params ) { - $goal_number = $params['goal_number']; - } - $siteId = owa_coreAPI::getRequestParam('siteId'); - $gm = owa_coreAPI::supportClassFactory('base', 'goalManager', $siteId); - $goal = $gm->getGoal($goal_number); - $name = 'goal'.$goal_number.'Starts'; - $this->setName( $name ); - $this->setLabel( $goal['name'] . ' Starts'); - $this->setEntity( 'base.session' ); - $column = 'goal_'.$goal_number.'_start'; - $this->setColumn( $column ); - $this->setSelect( sprintf( "SUM(%s)", $this->getColumn() ) ); - $this->setDataType( 'integer' ); - return parent::__construct(); - } -} - -?> + --- a/owa/modules/base/metrics/goalNValue.php +++ /dev/null @@ -1,56 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_goalNValue extends owa_metric { - - function __construct( $params ) { - - if ( array_key_exists( 'goal_number' ), $params ) { - $goal_number = $params['goal_number']; - } - $siteId = owa_coreAPI::getRequestParam('siteId'); - $gm = owa_coreAPI::supportClassFactory('base', 'goalManager', $siteId); - $goal = $gm->getGoal($goal_number); - $name = 'goal'.$goal_number.'Value'; - $this->setName( $name ); - $this->setLabel( "G$goal_number Value"); - $this->setEntity( 'base.session' ); - $column = 'goal_'.$goal_number.'_value'; - $this->setColumn( $column ); - $this->setSelect( sprintf( "SUM(%s)", $this->getColumn() ) ); - $this->setDataType( 'currency' ); - return parent::__construct(); - } -} - -?> + --- a/owa/modules/base/metrics/goalStartsAll.php +++ /dev/null @@ -1,45 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_goalStartsAll extends owa_metric { - - function __construct() { - - $this->setName('goalStartsAll'); - $this->setLabel('Goal Starts'); - $this->setEntity('base.session'); - $this->setColumn('num_goal_starts'); - $this->setSelect(sprintf("SUM(%s)", $this->getColumn())); - $this->setDataType('integer'); - return parent::__construct(); - } -} - -?> + --- a/owa/modules/base/metrics/goalValueAll.php +++ /dev/null @@ -1,45 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_goalValueAll extends owa_metric { - - function __construct() { - - $this->setName('goalValueAll'); - $this->setLabel('All Goals Value'); - $this->setEntity('base.session'); - $this->setColumn('goals_value'); - $this->setSelect(sprintf("SUM(%s)", $this->getColumn())); - $this->setDataType('currency'); - return parent::__construct(); - } -} - -?> + --- a/owa/modules/base/metrics/index.php +++ /dev/null @@ -1,3 +1,1 @@ - + --- a/owa/modules/base/metrics/latestDomstreams.php +++ /dev/null @@ -1,58 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_latestDomstreams extends owa_metric { - - function owa_latestDomstreams($params = null) { - - return owa_latestDomstreams::__construct($params); - } - - function __construct($params = null) { - - return parent::__construct($params); - } - - function calculate() { - - $this->db->selectFrom('owa_domstream'); - $this->db->selectColumn("id, timestamp, page_url, duration"); - $this->db->selectColumn($this->setLabel('id', 'Domstream ID')); - $this->db->selectColumn($this->setLabel('page_url', 'Page URL')); - $this->db->selectColumn($this->setLabel('duration', 'Duration')); - $this->db->selectColumn($this->setLabel('timestamp', 'Timestamp')); - $this->db->orderBy('timestamp', 'DESC'); - } - - -} - - -?> + --- a/owa/modules/base/metrics/lineItemQuantity.php +++ /dev/null @@ -1,47 +1,1 @@ -Open Web Analytics -// Copyright Peter Adams. All rights reserved. -// -// Licensed under GPL v2.0 http://www.gnu.org/copyleft/gpl.html -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// $Id$ -// - -/** - * Line Item Quantity Metric - * - * A Sum of the total number of items purchased as part of an ecomerce transaction. - * - * @author Peter Adams - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_lineItemQuantity extends owa_metric { - - function __construct() { - - $this->setName('lineItemQuantity'); - $this->setLabel('Quantity'); - $this->setEntity('base.commerce_line_item_fact'); - $this->setColumn('quantity'); - $this->setSelect(sprintf("SUM(%s)", $this->getColumn())); - $this->setDataType('integer'); - return parent::__construct(); - } -} - -?> + --- a/owa/modules/base/metrics/lineItemQuantityFromSessionFact.php +++ /dev/null @@ -1,48 +1,1 @@ -Open Web Analytics -// Copyright Peter Adams. All rights reserved. -// -// Licensed under GPL v2.0 http://www.gnu.org/copyleft/gpl.html -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// $Id$ -// - -/** - * Line Item Quantity Metric - * - * A Sum of the total number of items purchased as part of an ecomerce transaction. - * Derived from use of the owa_session fact table. - * - * @author Peter Adams - * @copyright Copyright © 2006 - 2011 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_lineItemQuantityFromSessionFact extends owa_metric { - - function __construct() { - - $this->setName('lineItemQuantity'); - $this->setLabel('Quantity'); - $this->setEntity('base.session'); - $this->setColumn('commerce_items_quantity'); - $this->setSelect(sprintf("SUM(%s)", $this->getColumn())); - $this->setDataType('integer'); - return parent::__construct(); - } -} - -?> + --- a/owa/modules/base/metrics/lineItemRevenue.php +++ /dev/null @@ -1,47 +1,1 @@ -Open Web Analytics -// Copyright Peter Adams. All rights reserved. -// -// Licensed under GPL v2.0 http://www.gnu.org/copyleft/gpl.html -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// $Id$ -// - -/** - * Line Item Revenue Metric - * - * A Sum of the total number of items purchased as part of an ecomerce transaction. - * - * @author Peter Adams - * @copyright Copyright © 2006 - 2011 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_lineItemRevenue extends owa_metric { - - function __construct() { - - $this->setName('lineItemRevenue'); - $this->setLabel('Item Revenue'); - $this->setEntity('base.commerce_line_item_fact'); - $this->setColumn('item_revenue'); - $this->setSelect(sprintf("SUM(%s)", $this->getColumn())); - $this->setDataType('currency'); - return parent::__construct(); - } -} - -?> + --- a/owa/modules/base/metrics/lineItemRevenueFromSessionFact.php +++ /dev/null @@ -1,48 +1,1 @@ -Open Web Analytics -// Copyright Peter Adams. All rights reserved. -// -// Licensed under GPL v2.0 http://www.gnu.org/copyleft/gpl.html -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// $Id$ -// - -/** - * Line Item Revenue Metric - * - * A Sum of the total number of items purchased as part of an ecomerce transaction. - * Derived from use of owa_session fact table - * - * @author Peter Adams - * @copyright Copyright © 2006 - 2011 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_lineItemRevenueFromSessionFact extends owa_metric { - - function __construct() { - - $this->setName('lineItemRevenue'); - $this->setLabel('Item Revenue'); - $this->setEntity('base.session'); - $this->setColumn('commerce_items_revenue'); - $this->setSelect(sprintf("SUM(%s)", $this->getColumn())); - $this->setDataType('currency'); - return parent::__construct(); - } -} - -?> + --- a/owa/modules/base/metrics/newVisitors.php +++ /dev/null @@ -1,46 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.3.0 - */ - -class owa_newVisitors extends owa_metric { - - function __construct() { - - $this->setName('newVisitors'); - $this->setLabel('New Visitors'); - $this->setEntity('base.session'); - $this->setColumn('is_new_visitor'); - $this->setSelect(sprintf("sum(CASE %s WHEN TRUE THEN 1 ELSE 0 END)", $this->getColumn())); - $this->setDataType('integer'); - - return parent::__construct(); - } -} - -?> + --- a/owa/modules/base/metrics/pageViews.php +++ /dev/null @@ -1,45 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.3.0 - */ - -class owa_pageViews extends owa_metric { - - function __construct() { - - $this->setName('pageViews'); - $this->setLabel('Page Views'); - $this->setEntity('base.request'); - $this->setColumn('id'); - $this->setSelect(sprintf("count(distinct %s)", $this->getColumn())); - $this->setDataType('integer'); - return parent::__construct(); - } -} - -?> + --- a/owa/modules/base/metrics/pageViewsFromSessionFact.php +++ /dev/null @@ -1,45 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.3.0 - */ - -class owa_pageViewsFromSessionFact extends owa_metric { - - function __construct() { - - $this->setName('pageViews'); - $this->setLabel('Page Views'); - $this->setEntity('base.session'); - $this->setColumn('num_pageviews'); - $this->setSelect(sprintf("SUM(%s)", $this->getColumn())); - $this->setDataType('integer'); - return parent::__construct(); - } -} - -?> + --- a/owa/modules/base/metrics/pagesPerVisit.php +++ /dev/null @@ -1,49 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.3.0 - */ - -class owa_pagesPerVisit extends owa_calculatedMetric { - - function __construct() { - - $this->setName('pagesPerVisit'); - $this->setLabel('Pages Per Visit'); - $this->setChildMetric('pageViews'); - $this->setChildMetric('visits'); - $this->setFormula('round(pageViews / visits, 2)'); - $this->setDataType('decimal'); - return parent::__construct(); - } -} - -?> + --- a/owa/modules/base/metrics/repeatVisitors.php +++ /dev/null @@ -1,45 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.3.0 - */ - -class owa_repeatVisitors extends owa_metric { - - function __construct() { - - $this->setName('repeatVisitors'); - $this->setLabel('Repeat Visitors'); - $this->setEntity('base.session'); - $this->setSelect("(count(distinct(session.visitor_id)) - sum(CASE session.is_new_visitor WHEN TRUE THEN 1 ELSE 0 END))"); - $this->setDataType('integer'); - - return parent::__construct(); - } -} - -?> + --- a/owa/modules/base/metrics/revenuePerTransaction.php +++ /dev/null @@ -1,49 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_revenuePerTransaction extends owa_calculatedMetric { - - function __construct() { - - $this->setName('revenuePerTransaction'); - $this->setLabel('Avg. Transaction Value'); - $this->setChildMetric('transactionRevenue'); - $this->setChildMetric('transactions'); - $this->setFormula('transactionRevenue / transactions'); - $this->setDataType('currency'); - return parent::__construct(); - } -} - -?> + --- a/owa/modules/base/metrics/revenuePerVisit.php +++ /dev/null @@ -1,49 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_revenuePerVisit extends owa_calculatedMetric { - - function __construct() { - - $this->setName('revenuePerVisit'); - $this->setLabel('Revenue Per Visit'); - $this->setChildMetric('transactionRevenue'); - $this->setChildMetric('visits'); - $this->setFormula('transactionRevenue / visits'); - $this->setDataType('currency'); - return parent::__construct(); - } -} - -?> + --- a/owa/modules/base/metrics/sessionBrowserTypes.php +++ /dev/null @@ -1,60 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_sessionBrowserTypes extends owa_metric { - - function owa_sessionBrowserTypes($params = null) { - - return owa_sessionBrowserTypes::__construct($params); - - } - - function __construct($params = null) { - - parent::__construct($params); - } - - function calculate() { - - $this->db->selectFrom('owa_session', 'session'); - $this->db->selectColumn("count(distinct session.id) as count, ua.ua as ua, ua.browser_type"); - $this->db->join(OWA_SQL_JOIN_LEFT_OUTER, 'owa_ua', 'ua', 'ua_id', 'ua.id'); - $this->db->groupBy('ua.browser_type'); - $this->db->orderBy('count', $this->getOrder()); - - return $this->db->getAllRows(); - - } - - -} - - -?> + --- a/owa/modules/base/metrics/shippingRevenue.php +++ /dev/null @@ -1,47 +1,1 @@ -Open Web Analytics -// Copyright Peter Adams. All rights reserved. -// -// Licensed under GPL v2.0 http://www.gnu.org/copyleft/gpl.html -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// $Id$ -// - -/** - * Ecommerce Tax Revenue Metric - * - * A Sum of the tax revenue of ecommerce transactions - * - * @author Peter Adams - * @copyright Copyright © 2006 - 2011 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_shippingRevenue extends owa_metric { - - function __construct() { - - $this->setName('shippingRevenue'); - $this->setLabel('Shipping'); - $this->setEntity('base.commerce_transaction_fact'); - $this->setColumn('shipping_revenue'); - $this->setSelect(sprintf("SUM(%s)", $this->getColumn())); - $this->setDataType('currency'); - return parent::__construct(); - } -} - -?> + --- a/owa/modules/base/metrics/shippingRevenueFromSessionFact.php +++ /dev/null @@ -1,48 +1,1 @@ -Open Web Analytics -// Copyright Peter Adams. All rights reserved. -// -// Licensed under GPL v2.0 http://www.gnu.org/copyleft/gpl.html -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// $Id$ -// - -/** - * Ecommerce Shipping Revenue Metric - * - * A Sum of the tax revenue of ecommerce transactions - * Derived from owa_session fact table. - * - * @author Peter Adams - * @copyright Copyright © 2006 - 2011 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_shippingRevenueFromSessionFact extends owa_metric { - - function __construct() { - - $this->setName('shippingRevenue'); - $this->setLabel('Shipping'); - $this->setEntity('base.session'); - $this->setColumn('commerce_shipping_revenue'); - $this->setSelect(sprintf("SUM(%s)", $this->getColumn())); - $this->setDataType('currency'); - return parent::__construct(); - } -} - -?> + --- a/owa/modules/base/metrics/taxRevenue.php +++ /dev/null @@ -1,47 +1,1 @@ -Open Web Analytics -// Copyright Peter Adams. All rights reserved. -// -// Licensed under GPL v2.0 http://www.gnu.org/copyleft/gpl.html -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// $Id$ -// - -/** - * Ecommerce Tax Revenue Metric - * - * A Sum of the tax revenue of ecommerce transactions - * - * @author Peter Adams - * @copyright Copyright © 2006 - 2011 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_taxRevenue extends owa_metric { - - function __construct() { - - $this->setName('taxRevenue'); - $this->setLabel('Tax'); - $this->setEntity('base.commerce_transaction_fact'); - $this->setColumn('tax_revenue'); - $this->setSelect(sprintf("SUM(%s)", $this->getColumn())); - $this->setDataType('currency'); - return parent::__construct(); - } -} - -?> + --- a/owa/modules/base/metrics/taxRevenueFromSessionFact.php +++ /dev/null @@ -1,48 +1,1 @@ -Open Web Analytics -// Copyright Peter Adams. All rights reserved. -// -// Licensed under GPL v2.0 http://www.gnu.org/copyleft/gpl.html -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// $Id$ -// - -/** - * Ecommerce Tax Revenue Metric - * - * A Sum of the tax revenue of ecommerce transactions - * Derived from owa_session fact table. - * - * @author Peter Adams - * @copyright Copyright © 2006 - 2011 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_taxRevenueFromSessionFact extends owa_metric { - - function __construct() { - - $this->setName('taxRevenue'); - $this->setLabel('Tax Revenue'); - $this->setEntity('base.session'); - $this->setColumn('commerce_tax_revenue'); - $this->setSelect(sprintf("SUM(%s)", $this->getColumn())); - $this->setDataType('currency'); - return parent::__construct(); - } -} - -?> + --- a/owa/modules/base/metrics/topReferers.php +++ /dev/null @@ -1,87 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_topReferers extends owa_metric { - - function owa_topReferers($params = null) { - - return owa_topReferers::__construct($params); - - } - - function __construct($params = '') { - - return parent::__construct($params); - } - - function calculate() { - - $this->db->selectColumn("count(referer.id) as count, - sum(session.num_pageviews) as page_views, - url, - page_title, - site_name, - query_terms, - snippet, - refering_anchortext, - is_searchengine"); - - $this->db->selectFrom('owa_session', 'session'); - $this->db->join(OWA_SQL_JOIN_LEFT_OUTER, 'owa_referer', 'referer', 'referer_id', 'referer.id'); - $this->db->groupBy('referer.url'); - $this->db->orderBy('count', $this->getOrder()); - $this->db->where('is_searchengine', 1, '!='); - - $ret = $this->db->getAllRows(); - - return $ret; - - } - - function paginationCount() { - - $this->db->selectColumn("count(distinct referer.id) as count"); - - $this->db->selectFrom('owa_session', 'session'); - $this->db->join(OWA_SQL_JOIN_LEFT_OUTER, 'owa_referer', 'referer', 'referer_id', 'referer.id'); - $this->db->where('is_searchengine', 1, '!='); - - $ret = $this->db->getOneRow(); - - return $ret['count']; - - - } - - -} - - -?> + --- a/owa/modules/base/metrics/topVisitors.php +++ /dev/null @@ -1,72 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_topVisitors extends owa_metric { - - function owa_topVisitors($params = null) { - - return owa_topVisitors::__construct($params = null); - - } - - function __construct($params = null) { - - parent::__construct($params); - } - - function calculate() { - - $this->db->selectColumn("count(visitor_id) as count, visitor_id as vis_id, user_name, user_email"); - $this->db->selectFrom('owa_session'); - $this->db->groupBy('vis_id'); - $this->db->orderBy('count', $this->getOrder()); - - $ret = $this->db->getAllRows(); - - return $ret; - - } - - function paginationCount() { - - $this->db->selectColumn("count(distinct visitor_id) as count"); - $this->db->selectFrom('owa_session'); - - $ret = $this->db->getOneRow(); - - return $ret['count']; - - } - - -} - - -?> + --- a/owa/modules/base/metrics/transactionRevenue.php +++ /dev/null @@ -1,47 +1,1 @@ -Open Web Analytics -// Copyright Peter Adams. All rights reserved. -// -// Licensed under GPL v2.0 http://www.gnu.org/copyleft/gpl.html -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// $Id$ -// - -/** - * Ecommerce Transactions Revenue Metric - * - * A Sum of the total revenue of ecommerce transactions - * - * @author Peter Adams - * @copyright Copyright © 2006 - 2011 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_transactionRevenue extends owa_metric { - - function __construct() { - - $this->setName('transactionRevenue'); - $this->setLabel('Revenue'); - $this->setEntity('base.commerce_transaction_fact'); - $this->setColumn('total_revenue'); - $this->setSelect(sprintf("SUM(%s)", $this->getColumn())); - $this->setDataType('currency'); - return parent::__construct(); - } -} - -?> + --- a/owa/modules/base/metrics/transactionRevenueFromSessionFact.php +++ /dev/null @@ -1,48 +1,1 @@ -Open Web Analytics -// Copyright Peter Adams. All rights reserved. -// -// Licensed under GPL v2.0 http://www.gnu.org/copyleft/gpl.html -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// $Id$ -// - -/** - * Ecommerce Transactions Revenue Metric - * - * A Sum of the total revenue of ecommerce transactions - * Derived from owa_session fact table. - * - * @author Peter Adams - * @copyright Copyright © 2006 - 2011 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_transactionRevenueFromSessionFact extends owa_metric { - - function __construct() { - - $this->setName('transactionRevenue'); - $this->setLabel('Revenue'); - $this->setEntity('base.session'); - $this->setColumn('commerce_trans_revenue'); - $this->setSelect(sprintf("SUM(%s)", $this->getColumn())); - $this->setDataType('currency'); - return parent::__construct(); - } -} - -?> + --- a/owa/modules/base/metrics/transactions.php +++ /dev/null @@ -1,47 +1,1 @@ -Open Web Analytics -// Copyright Peter Adams. All rights reserved. -// -// Licensed under GPL v2.0 http://www.gnu.org/copyleft/gpl.html -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// $Id$ -// - -/** - * Ecommerce Trnsactions Quantity Metric - * - * A Sum of the total number of ecommerce transactions - * - * @author Peter Adams - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_transactions extends owa_metric { - - function __construct() { - - $this->setName('transactions'); - $this->setLabel('Transactions'); - $this->setEntity('base.commerce_transaction_fact'); - $this->setColumn('id'); - $this->setSelect(sprintf("count(%s)", $this->getColumn())); - $this->setDataType('integer'); - return parent::__construct(); - } -} - -?> + --- a/owa/modules/base/metrics/transactionsFromSessionFact.php +++ /dev/null @@ -1,48 +1,1 @@ -Open Web Analytics -// Copyright Peter Adams. All rights reserved. -// -// Licensed under GPL v2.0 http://www.gnu.org/copyleft/gpl.html -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// $Id$ -// - -/** - * Ecommerce Transactions Quantity Metric - * - * A Sum of the total number of ecommerce transactions - * Derived from owa_session fact table. - * - * @author Peter Adams - * @copyright Copyright © 2006 - 2011 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_transactionsFromSessionFact extends owa_metric { - - function __construct() { - - $this->setName('transactions'); - $this->setLabel('Transactions'); - $this->setEntity('base.session'); - $this->setColumn('commerce_trans_count'); - $this->setSelect(sprintf("SUM(%s)", $this->getColumn())); - $this->setDataType('integer'); - return parent::__construct(); - } -} - -?> + --- a/owa/modules/base/metrics/uniqueActions.php +++ /dev/null @@ -1,45 +1,1 @@ -Open Web Analytics -// Copyright Peter Adams. All rights reserved. -// -// Licensed under GPL v2.0 http://www.gnu.org/copyleft/gpl.html -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// $Id$ -// - -/** - * Unique Action Count Metric - * - * @author Peter Adams - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.3.0 - */ - -class owa_uniqueActions extends owa_metric { - - function __construct() { - - $this->setName('uniqueActions'); - $this->setLabel('Unique Actions'); - $this->setEntity('base.action_fact'); - $this->setColumn('action_name'); - $this->setSelect(sprintf("count(distinct %s)", $this->getColumn())); - $this->setDataType('integer'); - return parent::__construct(); - } -} - -?> + --- a/owa/modules/base/metrics/uniqueLineItems.php +++ /dev/null @@ -1,47 +1,1 @@ -Open Web Analytics -// Copyright Peter Adams. All rights reserved. -// -// Licensed under GPL v2.0 http://www.gnu.org/copyleft/gpl.html -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// $Id$ -// - -/** - * Ecommerce Unique Line Items Metric - * - * A distinct count of the line items of ecommerce transactions - * - * @author Peter Adams - * @copyright Copyright © 2006 - 2011 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_uniqueLineItems extends owa_metric { - - function __construct() { - - $this->setName('uniqueLineItems'); - $this->setLabel('Unique Items'); - $this->setEntity('base.commerce_transaction_fact'); - $this->setColumn('sku'); - $this->setSelect(sprintf("count(distinct %s)", $this->getColumn())); - $this->setDataType('integer'); - return parent::__construct(); - } -} - -?> + --- a/owa/modules/base/metrics/uniqueLineItemsFromSessionFact.php +++ /dev/null @@ -1,48 +1,1 @@ -Open Web Analytics -// Copyright Peter Adams. All rights reserved. -// -// Licensed under GPL v2.0 http://www.gnu.org/copyleft/gpl.html -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// $Id$ -// - -/** - * Ecommerce Unique Line Items Metric - * - * A distinct count of the line items of ecommerce transactions - * Derived from owa_session fact table - * - * @author Peter Adams - * @copyright Copyright © 2006 - 2011 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_uniqueLineItemsFromSessionFact extends owa_metric { - - function __construct() { - - $this->setName('uniqueLineItems'); - $this->setLabel('Unique Items'); - $this->setEntity('base.session'); - $this->setColumn('commerce_items_count'); - $this->setSelect(sprintf("SUM(%s)", $this->getColumn())); - $this->setDataType('integer'); - return parent::__construct(); - } -} - -?> + --- a/owa/modules/base/metrics/uniquePageViews.php +++ /dev/null @@ -1,46 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.3.0 - */ - -class owa_uniquePageViews extends owa_metric { - - function __construct() { - - $this->setName('uniquePageViews'); - $this->setLabel('Unique Page Views'); - $this->setEntity('base.request'); - $this->setColumn('document_id'); - $this->setSelect(sprintf("count(distinct %s)", $this->getColumn())); - $this->setDataType('integer'); - - return parent::__construct(); - } -} - -?> + --- a/owa/modules/base/metrics/uniqueVisitors.php +++ /dev/null @@ -1,46 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.3.0 - */ - -class owa_uniqueVisitors extends owa_metric { - - function __construct() { - - $this->setName('uniqueVisitors'); - $this->setLabel('Unique Visitors'); - $this->setEntity('base.session'); - $this->setColumn('visitor_id'); - $this->setSelect(sprintf("count(distinct(%s))", $this->getColumn())); - $this->setDataType('integer'); - - return parent::__construct(); - } -} - -?> + --- a/owa/modules/base/metrics/visitDuration.php +++ /dev/null @@ -1,45 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.3.0 - */ - -class owa_visitDuration extends owa_metric { - - function __construct() { - - $this->setName('visitDuration'); - $this->setLabel('Avg. Visit Duration'); - $this->setEntity('base.session'); - $this->setSelect(sprintf("round(avg(%s.last_req - %s.timestamp))", $this->entity->getTableAlias(), $this->entity->getTableAlias())); - $this->setDataType('timestamp'); - - return parent::__construct(); - } -} - -?> + --- a/owa/modules/base/metrics/visitors.php +++ /dev/null @@ -1,46 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_visitors extends owa_metric { - - function __construct() { - - $this->setName('visitors'); - $this->setLabel('Visitors'); - $this->setEntity('base.session'); - $this->setColumn('visitor_id'); - $this->setSelect(sprintf("count(%s)", $this->getColumn())); - $this->setDataType('integer'); - - return parent::__construct(); - } -} - -?> + --- a/owa/modules/base/metrics/visitorsFromRequestFact.php +++ /dev/null @@ -1,46 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_visitorsFromRequestFact extends owa_metric { - - function __construct() { - - $this->setName('visitors'); - $this->setLabel('Visitors'); - $this->setEntity('base.request'); - $this->setColumn('visitor_id'); - $this->setSelect(sprintf("count(%s)", $this->getColumn())); - $this->setDataType('integer'); - - return parent::__construct(); - } -} - -?> + --- a/owa/modules/base/metrics/visits.php +++ /dev/null @@ -1,46 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.3.0 - */ - -class owa_visits extends owa_metric { - - function __construct() { - - $this->setName('visits'); - $this->setLabel('Visits'); - $this->setEntity('base.session'); - $this->setColumn('id'); - $this->setSelect(sprintf("count(distinct %s)", $this->getColumn())); - $this->setDataType('integer'); - - return parent::__construct(); - } -} - -?> + --- a/owa/modules/base/metrics/visitsFromRequestFact.php +++ /dev/null @@ -1,46 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.3.0 - */ - -class owa_visitsFromRequestFact extends owa_metric { - - function __construct() { - - $this->setName('visits'); - $this->setLabel('Visits'); - $this->setEntity('base.request'); - $this->setColumn('session_id'); - $this->setSelect(sprintf("count(distinct %s)", $this->getColumn())); - $this->setDataType('integer'); - - return parent::__construct(); - } -} - -?> + --- a/owa/modules/base/module.php +++ /dev/null @@ -1,1373 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_baseModule extends owa_module { - - /** - * Constructor - * - */ - function __construct() { - - $this->name = 'base'; - $this->display_name = 'Open Web Analytics'; - $this->group = 'Base'; - $this->author = 'Peter Adams'; - $this->version = 6; - $this->description = 'Base functionality for OWA.'; - $this->config_required = false; - $this->required_schema_version = 6; - - /** - * Register Filters - * - * The following lines register filter methods. - */ - $this->registerFilter('operating_system', $this, 'determineOperatingSystem', 0); - $this->registerFilter('ip_address', $this, 'setIp', 0); - $this->registerFilter('full_host', $this, 'resolveHost', 0); - $this->registerFilter('host', $this, 'getHostDomain', 0); - $this->registerFilter('attributed_campaign', $this, 'attributeCampaign', 10); - $this->registerFilter('geolocation', 'hostip', 'get_location', 10, 'classes'); - //Clean Query Strings - if (owa_coreAPI::getSetting('base', 'clean_query_string')) { - $this->registerFilter('page_url', $this, 'makeUrlCanonical',0); - $this->registerFilter('prior_page', $this, 'makeUrlCanonical',0); - $this->registerFilter('target_url', $this, 'makeUrlCanonical',0); - } - // event procesing daemon jobs - $this->registerBackgroundJob('process_event_queue', 'cli.php cmd=processEventQueue', owa_coreAPI::getSetting('base', 'processQueuesJobSchedule'), 10); - - /** - * Register Service Implementations - * - * The following lines register various service implementations. - */ - - /** - * Register Metrics - * - * The following lines register various data metrics. - */ - $this->registerMetric('pageViews', 'base.pageViews'); - $this->registerMetric('pageViews', 'base.pageViewsFromSessionFact'); - $this->registerMetric('uniqueVisitors', 'base.uniqueVisitors'); - $this->registerMetric('visits', 'base.visits'); - $this->registerMetric('visits', 'base.visitsFromRequestFact'); - $this->registerMetric('visitors', 'base.visitors'); - $this->registerMetric('visitors', 'base.visitorsFromRequestFact'); - $this->registerMetric('newVisitors', 'base.newVisitors'); - $this->registerMetric('repeatVisitors', 'base.repeatVisitors'); - $this->registerMetric('bounces', 'base.bounces'); - $this->registerMetric('visitDuration', 'base.visitDuration'); - $this->registerMetric('uniquePageViews', 'base.uniquePageViews'); - $this->registerMetric('bounceRate', 'base.bounceRate'); - $this->registerMetric('pagesPerVisit', 'base.pagesPerVisit'); - $this->registerMetric('actions', 'base.actions'); - $this->registerMetric('uniqueActions', 'base.uniqueActions'); - $this->registerMetric('actionsValue', 'base.actionsValue'); - //$this->registerMetric('actionsPerVisit', 'base.actionsPerVisit'); - $this->registerMetric('feedRequests', 'base.feedRequests'); - $this->registerMetric('feedReaders', 'base.feedReaders'); - $this->registerMetric('feedSubscriptions', 'base.feedSubscriptions'); - - // goals - $gcount = owa_coreAPI::getSetting('base', 'numGoals'); - for ($num = 1; $num <= $gcount;$num++) { - $params = array('goal_number' => $num); - - $metric_name = 'goal'.$num.'Completions'; - $this->registerMetric($metric_name, 'base.goalNCompletions', $params); - - $metric_name = 'goal'.$num.'Starts'; - $this->registerMetric($metric_name, 'base.goalNStarts', $params); - - $metric_name = 'goal'.$num.'Value'; - $this->registerMetric($metric_name, 'base.goalNValue', $params); - } - - $this->registerMetric('goalCompletionsAll', 'base.goalCompletionsAll'); - $this->registerMetric('goalStartsAll', 'base.goalStartsAll'); - $this->registerMetric('goalValueAll', 'base.goalValueAll'); - $this->registerMetric('goalConversionRateAll', 'base.goalConversionRateAll'); - $this->registerMetric('goalAbandonRateAll', 'base.goalAbandonRateAll'); - - // ecommerce metrics - $this->registerMetric('lineItemQuantity', 'base.lineItemQuantity'); - $this->registerMetric('lineItemQuantity', 'base.lineItemQuantityFromSessionFact'); - $this->registerMetric('lineItemRevenue', 'base.lineItemRevenue'); - $this->registerMetric('lineItemRevenue', 'base.lineItemRevenueFromSessionFact'); - $this->registerMetric('transactions', 'base.transactions'); - $this->registerMetric('transactions', 'base.transactionsFromSessionFact'); - $this->registerMetric('transactionRevenue', 'base.transactionRevenue'); - $this->registerMetric('transactionRevenue', 'base.transactionRevenueFromSessionFact'); - $this->registerMetric('taxRevenue', 'base.taxRevenue'); - $this->registerMetric('taxRevenue', 'base.taxRevenueFromSessionFact'); - $this->registerMetric('shippingRevenue', 'base.shippingRevenue'); - $this->registerMetric('shippingRevenue', 'base.shippingRevenueFromSessionFact'); - $this->registerMetric('uniqueLineItems', 'base.uniqueLineItems'); - $this->registerMetric('uniqueLineItems', 'base.uniqueLineItemsFromSessionFact'); - $this->registerMetric('revenuePerTransaction', 'base.revenuePerTransaction'); - $this->registerMetric('revenuePerVisit', 'base.revenuePerVisit'); - $this->registerMetric('ecommerceConversionRate', 'base.ecommerceConversionRate'); - $this->registerMetric('domClicks', 'base.domClicks'); - /** - * Register Dimensions - * - * The following lines register various data dimensions. - */ - $this->registerDimension('browserVersion', 'base.ua', 'browser', 'Browser Version', 'visitor', 'The browser version of the visitor.'); - $this->registerDimension('browserType', 'base.ua', 'browser_type', 'Browser Type', 'visitor', 'The browser type of the visitor.'); - $this->registerDimension('osType', 'base.os', 'name', 'Operating System', 'visitor', 'The operating System of the visitor.'); - $this->registerDimension('ipAddress', 'base.host', 'ip_address', 'IP Address', 'visitor', 'The IP address of the visitor.'); - $this->registerDimension('hostName', 'base.host', 'full_host', 'Host Name', 'visitor', 'The host name used by the visitor.'); - $this->registerDimension('city', 'base.location_dim', 'city', 'City', 'visitor', 'The city of the visitor.'); - $this->registerDimension('country', 'base.location_dim', 'country', 'Country', 'visitor', 'The country of the visitor.'); - $this->registerDimension('latitude', 'base.location_dim', 'latitude', 'Latitude', 'visitor', 'The latitude of the visitor.'); - $this->registerDimension('longitude', 'base.location_dim', 'longitude', 'Longitude', 'visitor', 'The longitude of the visitor.'); - $this->registerDimension('countryCode', 'base.location_dim', 'country_code', 'Country Code', 'visitor', 'The ISO country code of the visitor.'); - $this->registerDimension('stateRegion', 'base.location_dim', 'state', 'State/Region', 'visitor', 'The state or region of the visitor.'); - - $this->registerDimension('timeSinceLastVisit', 'base.session', 'time_sinse_priorsession', 'Time Since Last Visit', 'visitor', 'The time since the last visit.', '', true); - $this->registerDimension('isRepeatVisitor', 'base.session', 'is_repeat_visitor', 'Repeat Visitor', 'visitor', 'Repeat Site Visitor.', '', true); - $this->registerDimension('isNewVisitor', 'base.session', 'is_new_visitor', 'New Visitor', 'visitor', 'New Site Visitor.', '', true); - $this->registerDimension('language', 'base.session', 'language', 'Language', 'visit', 'The language of the visit.', '', true); - $this->registerDimension('language', 'base.request', 'language', 'Language', 'visit', 'The language of the visit.', '', true); - // campaign related - $this->registerDimension('medium', 'base.session', 'medium', 'Medium', 'visit', 'The medium of channel of visit.', '', true); - $this->registerDimension('latestAttributions', 'base.session', 'latest_attributions', 'Latest Attributions', 'visit', 'The latest campaign attributions.', '', true); - $this->registerDimension('source', 'base.source_dim', 'source_domain', 'Source', 'visit', 'The traffic source of the visit.'); - $this->registerDimension('campaign', 'base.campaign_dim', 'name', 'Campaign', 'visit', 'The campaign that originated the visit.'); - $this->registerDimension('ad', 'base.ad_dim', 'name', 'Ad', 'visit', 'The name of the ad that originated the visit.'); - $this->registerDimension('adType', 'base.ad_dim', 'type', 'Ad Type', 'visit', 'The type of ad that originated the visit.'); - - $this->registerDimension('siteDomain', 'base.site', 'domain', 'Site Domain', 'visit', 'The domain of the site.'); - $this->registerDimension('siteName', 'base.site', 'name', 'Site Name', 'visit', 'The name of the site.'); - $this->registerDimension('siteId', 'base.site', 'site_id', 'Site ID', 'visit', 'The ID of the site.'); - $this->registerDimension('userName', 'base.visitor', 'user_name', 'User Name', 'visitor', 'The name or ID of the user.'); - $this->registerDimension('userEmail', 'base.visitor', 'user_email', 'Email Address', 'visitor', 'The email address of the user.'); - - // Date and time oriented dimensions - $this->registerDimension('date', 'base.session', 'yyyymmdd', 'Date', 'visit', 'The date.', '', true, 'yyyymmdd'); - $this->registerDimension('day', 'base.session', 'day', 'Day', 'visit', 'The day.', '', true); - $this->registerDimension('month', 'base.session', 'month', 'Month', 'visit', 'The month.', '', true); - $this->registerDimension('year', 'base.session', 'year', 'Year', 'visit', 'The year.', '', true); - $this->registerDimension('dayofweek', 'base.session', 'dayofweek', 'Day of Week', 'visit', 'The day of the week.', '', true); - $this->registerDimension('dayofyear', 'base.session', 'dayofyear', 'Day of Year', 'visit', 'The day of the year.', '', true); - $this->registerDimension('weekofyear', 'base.session', 'weekofyear', 'Week of Year', 'visit', 'The week of the year.', '', true); - $this->registerDimension('siteId', 'base.session', 'site_id', 'Site ID', 'visit', 'The ID of the the web site.', '', true); - $this->registerDimension('daysSinceLastVisit', 'base.session', 'days_since_prior_session', 'Days Since Last Visit', 'visit', 'The number of days since the last visit.', '', true); - $this->registerDimension('daysSinceFirstVisit', 'base.session', 'days_since_first_session', 'Days Since First Visit', 'visit', 'The number of days since the first visit of the user.', '', true); - - $this->registerDimension('priorVisitCount', 'base.session', 'num_prior_sessions', 'Prior Visits', 'visit', 'The number of prior visits, excluding the current one.', '', true); - - $this->registerDimension('priorVisitCount', 'base.request', 'num_prior_sessions', 'Prior Visits', 'visit', 'The number of prior visits, excluding the current one.', '', true); - - $this->registerDimension('date', 'base.request', 'yyyymmdd', 'Date', 'visit', 'The date.', '', true, 'yyyymmdd'); - $this->registerDimension('day', 'base.request', 'day', 'Day', 'visit', 'The day.', '', true); - $this->registerDimension('month', 'base.request', 'month', 'Month', 'visit', 'The month.', '', true); - $this->registerDimension('year', 'base.request', 'year', 'Year', 'visit', 'The year.', '', true); - $this->registerDimension('dayofweek', 'base.request', 'dayofweek', 'Day of Week', 'visit', 'The day of the week.', '', true); - $this->registerDimension('dayofyear', 'base.request', 'dayofyear', 'Day of Year', 'visit', 'The day of the year.', '', true); - $this->registerDimension('weekofyear', 'base.request', 'weekofyear', 'Week of Year', 'visit', 'The week of the year.', '', true); - $this->registerDimension('siteId', 'base.request', 'site_id', 'Site ID', 'visit', 'The ID of the the web site.', '', true); - - $this->registerDimension('actionName', 'base.action_fact', 'action_name', 'Action Name', 'actions', 'The name of the action.', '', true); - $this->registerDimension('actionGroup', 'base.action_fact', 'action_group', 'Action Group', 'actions', 'The group that an action belongs to.', '', true); - $this->registerDimension('actionLabel', 'base.action_fact', 'action_label', 'Action Label', 'actions', 'The label associated with an action.', '', true); - $this->registerDimension('date', 'base.action_fact', 'yyyymmdd', 'Date', 'action', 'The date.', '', true, 'yyyymmdd'); - $this->registerDimension('siteId', 'base.acton_fact', 'site_id', 'Site ID', 'visit', 'The ID of the the web site.', '', true); - - // visit - $this->registerDimension('entryPageUrl', 'base.document', 'url', 'Entry Page URL', 'visit', 'The URL of the entry page.', 'first_page_id'); - $this->registerDimension('entryPagePath', 'base.document', 'uri', 'Entry Page Path', 'visit', 'The URI of the entry page.', 'first_page_id'); - $this->registerDimension('entryPageTitle', 'base.document', 'page_title', 'Entry Page Title', 'visit', 'The title of the entry page.', 'first_page_id'); - $this->registerDimension('entryPageType', 'base.document', 'page_type', 'Entry Page Type', 'visit', 'The page type of the entry page.', 'first_page_id'); - $this->registerDimension('exitPageUrl', 'base.document', 'url', 'Exit Page URL', 'visit', 'The URL of the exit page.', 'last_page_id'); - $this->registerDimension('exitPagePath', 'base.document', 'uri', 'Exit Page Path', 'visit', 'The URI of the exit page.', 'last_page_id'); - $this->registerDimension('exitPageTitle', 'base.document', 'page_title', 'Exit Page Title', 'visit', 'The title of the exit page.', 'last_page_id'); - $this->registerDimension('exitPageType', 'base.document', 'page_type', 'Exit Page Type', 'visit', 'The page type of the exit page.', 'last_page_id'); - $this->registerDimension('priorPageUrl', 'base.document', 'url', 'Prior Page URL', 'visit', 'The URL of the prior page.', 'prior_document_id'); - $this->registerDimension('priorPagePath', 'base.document', 'uri', 'Prior Page Path', 'visit', 'The URI of the prior page.', 'prior_document_id'); - $this->registerDimension('priorPageTitle', 'base.document', 'page_title', 'Prior Page Title', 'visit', 'The title of the prior page.', 'prior_document_id'); - $this->registerDimension('priorPageType', 'base.document', 'page_type', 'Prior Page Type', 'visit', 'The page type of the prior page.', 'prior_document_id'); - - // traffic sources - $this->registerDimension('referralPageUrl', 'base.referer', 'url', 'Referral Page URL', 'traffic sources', 'The url of the referring web page.'); - $this->registerDimension('referralPageTitle', 'base.referer', 'page_title', 'Referral Page Title', 'traffic sources', 'The title of the referring web page.'); - $this->registerDimension('referralSearchTerms', 'base.search_term_dim', 'terms', 'Search Terms', 'traffic sources', 'The referring search terms.', 'referring_search_term_id'); - $this->registerDimension('referralLinkText', 'base.referer', 'refering_anchortext', 'Referral Link Text', 'traffic sources', 'The text of the referring link.'); - $this->registerDimension('isSearchEngine', 'base.referer', 'is_searchengine', 'Search Engine', 'traffic sources', 'Is traffic source a search engine.'); - $this->registerDimension('referralWebSite', 'base.referer', 'site', 'Referral Web Site', 'traffic sources', 'The full domain of the referring web site.'); - - // content - $this->registerDimension('pageUrl', 'base.document', 'url', 'Page URL', 'content', 'The URL of the web page.', 'document_id'); - $this->registerDimension('pagePath', 'base.document', 'uri', 'Page Path', 'content', 'The path of the web page.', 'document_id'); - $this->registerDimension('pageTitle', 'base.document', 'page_title', 'Page Title', 'content', 'The title of the web page.', 'document_id'); - $this->registerDimension('pageType', 'base.document', 'page_type', 'Page Type', 'content', 'The page type of the web page.', 'document_id'); - - // feeds - $this->registerDimension('date', 'base.feed_request', 'yyyymmdd', 'Date', 'date', 'The date.', '', true, 'yyyymmdd'); - $this->registerDimension('day', 'base.feed_request', 'day', 'Day', 'date', 'The day.', '', true); - $this->registerDimension('month', 'base.feed_request', 'month', 'Month', 'date', 'The month.', '', true); - $this->registerDimension('year', 'base.feed_request', 'year', 'Year', 'date', 'The year.', '', true); - $this->registerDimension('dayofweek', 'base.feed_request', 'dayofweek', 'Day of Week', 'date', 'The day of the week.', '', true); - $this->registerDimension('dayofyear', 'base.feed_request', 'dayofyear', 'Day of Year', 'date', 'The day of the year.', '', true); - $this->registerDimension('weekofyear', 'base.feed_request', 'weekofyear', 'Week of Year', 'date', 'The week of the year.', '', true); - $this->registerDimension('feedType', 'base.feed_request', 'feed_format', 'Feed Type', 'feed', 'The type or format of the feed.', '', true); - $this->registerDimension('siteId', 'base.feed_request', 'site_id', 'Site ID', 'request', 'The ID of the the web site.', '', true); - - //clicks - $this->registerDimension('date', 'base.click', 'yyyymmdd', 'Date', 'visit', 'The date.', '', true, 'yyyymmdd'); - // IDs - $this->registerDimension('visitorId', 'base.visitor', 'id', 'Visitor ID', 'visitor', 'The ID of the visitor.'); - $this->registerDimension('sessionId', 'base.session', 'id', 'Session ID', 'visit', 'The ID of the session/visit.'); - - $this->registerDimension('daysToTransaction', 'base.commerce_transaction_fact', 'days_since_first_session', 'Days To Purchase', 'ecommerce', 'The number of days since the first visit and an e-commerce transaction.', '', true); - $this->registerDimension('visitsToTransaction', 'base.commerce_transaction_fact', 'num_prior_sessions', 'Visits To Purchase', 'ecommerce', 'The number of visits prior to an e-commerce transaction.', '', true); - - // productName - $this->registerDimension( - 'productName', - 'base.commerce_line_item_fact', - 'product_name', - 'Product Name', - 'ecommerce', - 'The name of the product purchased.', - '', - true - ); - // productSku - $this->registerDimension('productSku', 'base.commerce_line_item_fact', 'sku', 'Product SKU', 'ecommerce', 'The SKU code of the product purchased.', '', true); - // productCategory - $this->registerDimension('productCategory', 'base.commerce_line_item_fact', 'category', 'Product Category', 'ecommerce', 'The category of product purchased.', '', true); - // transactionOriginator - $this->registerDimension('transactionOriginator', 'base.commerce_transaction_fact', 'order_source', 'Originator', 'ecommerce', 'The store or location that originated the transaction.', '', true); - // transactionId - $this->registerDimension('transactionId', 'base.commerce_transaction_fact', 'order_id', 'Transaction ID', 'ecommerce', 'The id of the e-commerce transaction.', '', true); - $this->registerDimension('transactionGateway', 'base.commerce_transaction_fact', 'gateway', 'Payment Gateway', 'ecommerce', 'The payment gateway or provider used in the e-commerce transaction.', '', true); - // daysToTransaction - $this->registerDimension('daysToTransaction', 'base.commerce_transaction_fact', 'days_since_first_session', "Days To Purchase', 'ecommerce', 'The number of days between the visitor's first visit and when transaction occurred.", '', true); - // visitsToTransaction - $this->registerDimension('visitsToTransaction', 'base.commerce_transaction_fact', 'num_prior_sessions', "Visits To Purchase', 'ecommerce', 'The number of visits before the transaction occurred.", '', true); - $this->registerDimension('date', 'base.commerce_line_item_fact', 'yyyymmdd', 'Date', 'ecommerce', 'The date.', '', true, 'yyyymmdd'); - $this->registerDimension('date', 'base.commerce_transaction_fact', 'yyyymmdd', 'Date', 'ecommerce', 'The date.', '', true, 'yyyymmdd'); - $this->registerDimension('timestamp', 'base.commerce_transaction_fact', 'timestamp', 'Time', 'ecommerce', 'The timestamp of the transaction.', '', true); - $this->registerDimension('siteId', 'base.commerce_line_item_fact', 'site_id', 'Site Id', 'ecommerce', 'The site ID.', '', true, 'site_id'); - $this->registerDimension('siteId', 'base.commerce_transaction_fact', 'site_id', 'Site Id', 'ecommerce', 'The site ID.', '', true, 'site_id'); - // dom clicks - $this->registerDimension('siteId', 'base.click', 'site_id', 'Site Id', 'site', 'The site ID.', '', true, 'site_id'); - $this->registerDimension('date', 'base.click', 'yyyymmdd', 'Date', 'date', 'The date.', '', true, 'yyyymmdd'); - $this->registerDimension('domElementId', 'base.click', 'dom_element_id', 'Dom ID', 'dom', 'The id of the dom element.', '', true); - $this->registerDimension('domElementName', 'base.click', 'dom_element_name', 'Dom Name', 'dom', 'The name of the dom element.', '', true); - $this->registerDimension('domElementText', 'base.click', 'dom_element_text', 'Dom Text', 'dom', 'The text associated the dom element.', '', true); - $this->registerDimension('domElementValue', 'base.click', 'dom_element_value', 'Dom Value', 'dom', 'The value of the dom element.', '', true); - $this->registerDimension('domElementTag', 'base.click', 'dom_element_tag', 'Dom Tag', 'dom', 'The html tag of the dom element.', '', true); - $this->registerDimension('domElementClass', 'base.click', 'dom_element_class', 'Dom Class', 'dom', 'The class of the dom element.', '', true); - - /** - * Register CLI Commands - * - * The following lines register various command line interface (CLI) controller. - */ - $this->registerCliCommand('update', 'base.updatesApplyCli'); - $this->registerCliCommand('build', 'base.build'); - $this->registerCliCommand('flush-cache', 'base.flushCacheCli'); - $this->registerCliCommand('processEventQueue', 'base.processEventQueue'); - $this->registerCliCommand('install', 'base.installCli'); - $this->registerCliCommand('activate', 'base.moduleActivateCli'); - $this->registerCliCommand('deactivate', 'base.moduleDeactivateCli'); - $this->registerCliCommand('install-module', 'base.moduleInstallCli'); - - /** - * Register API methods - * - * The following lines register various API methods. - */ - $this->registerApiMethod('getResultSet', - array($this, 'getResultSet'), - array( - 'metrics', - 'dimensions', - 'siteId', - 'constraints', - 'sort', - 'resultsPerPage', - 'page', - 'offset', - 'period', - 'startDate', - 'endDate', - 'startTime', - 'endTime', - 'format'), - '', - 'view_reports' - ); - - $this->registerApiMethod('getDomstreams', - array( $this, 'getDomstreams' ), - array( - 'startDate', - 'endDate', - 'document_id', - 'siteId', - 'resultsPerPage', - 'page', - 'format' ), - '', - 'view_reports' - ); - - $this->registerApiMethod('getLatestVisits', - array($this, 'getLatestVisits'), - array( 'startDate', 'endDate', 'visitorId', 'siteId', 'resultsPerPage', 'page', 'format'), - '', - 'view_reports' - ); - - $this->registerApiMethod('getClickstream', - array($this, 'getClickstream'), - array( 'sessionId', 'resultsPerPage', 'page','format'), - '', - 'view_reports' - ); - - $this->registerApiMethod('getVisitDetail', - array($this, 'getVisitDetail'), - array( 'sessionId', 'format'), - '', - 'view_reports' - ); - - $this->registerApiMethod('getTransactionDetail', - array($this, 'getTransactionDetail'), - array( 'transactionId', 'format'), - '', - 'view_reports' - ); - - $this->registerApiMethod('getDomClicks', - array($this, 'getDomClicks'), - array( - 'pageUrl', - 'siteId', - 'startDate', - 'endDate', - 'document_id', - 'period', - 'resultsPerPage', - 'page', - 'format' - ), - '', - 'view_reports' - ); - - $this->registerApiMethod('getTransactions', - array($this, 'getTransactions'), - array( - 'siteId', - 'startDate', - 'endDate', - 'period', - 'sort', - 'resultsPerPage', - 'page', - 'format' - ), - '', - 'view_reports' - ); - - $this->registerApiMethod('getDomstream', - array($this, 'getDomstream'), - array('domstream_guid'), - '', - 'view_reports' - ); - - return parent::__construct(); - } - - /** - * Registers Admin panels - * - */ - function registerAdminPanels() { - - $this->addAdminPanel(array( - 'do' => 'base.optionsGeneral', - 'priviledge' => 'admin', - 'anchortext' => 'Main Configuration', - 'group' => 'General', - 'order' => 1) - ); - - $this->addAdminPanel(array( - 'do' => 'base.users', - 'priviledge' => 'admin', - 'anchortext' => 'User Management', - 'group' => 'General', - 'order' => 2) - ); - - - - $this->addAdminPanel(array( - 'do' => 'base.sites', - 'priviledge' => 'admin', - 'anchortext' => 'Tracked Sites', - 'group' => 'General', - 'order' => 3) - ); - - $this->addAdminPanel(array( - 'do' => 'base.optionsModules', - 'priviledge' => 'admin', - 'anchortext' => 'Modules', - 'group' => 'General', - 'order' => 3) - ); - - /* - $this->addAdminPanel(array( - 'do' => 'base.optionsGoals', - 'priviledge' => 'admin', - 'anchortext' => 'Goal Settings', - 'group' => 'General', - 'order' => 3) - ); - */ - } - - function registerNavigation() { - - $this->addNavigationLink('Reports', '', 'base.reportDashboard', 'Dashboard', 1); - $this->addNavigationLink('Reports', '', 'base.reportVisitors', 'Visitors', 3); - - $this->addNavigationLink('Reports', '', 'base.reportContent', 'Content', 4); - - $this->addNavigationLink('Reports', '', 'base.reportEcommerce', 'Ecommerce', 1); - $this->addNavigationLink('Reports', 'Ecommerce', 'base.reportRevenue', 'Revenue', 2); - $this->addNavigationLink('Reports', 'Ecommerce', 'base.reportTransactions', 'Transactions', 3); - $this->addNavigationLink('Reports', 'Ecommerce', 'base.reportVisitsToPurchase', 'Visits To Purchase', 4); - $this->addNavigationLink('Reports', 'Ecommerce', 'base.reportDaysToPurchase', 'Days To Purchase', 5); - - $this->addNavigationLink('Reports', 'Content', 'base.reportPages', 'Top Pages', 1); - $this->addNavigationLink('Reports', 'Content', 'base.reportPageTypes', 'Page Types', 2); - $this->addNavigationLink('Reports', 'Content', 'base.reportFeeds', 'Feeds', 7); - $this->addNavigationLink('Reports', 'Content', 'base.reportEntryPages', 'Entry Pages', 3); - $this->addNavigationLink('Reports', 'Content', 'base.reportExitPages', 'Exit Pages', 4); - $this->addNavigationLink('Reports', 'Content', 'base.reportDomstreams', 'Domstreams', 5); - $this->addNavigationLink('Reports', '', 'base.reportActionTracking', 'Action Tracking', 1); - $this->addNavigationLink('Reports', 'Action Tracking', 'base.reportActionGroups', 'Action Groups', 2); - $this->addNavigationLink('Reports', 'Visitors', 'base.reportGeolocation', 'Geo-location', 1); - $this->addNavigationLink('Reports', 'Visitors', 'base.reportHosts', 'Domains', 2); - $this->addNavigationLink('Reports', 'Visitors', 'base.reportVisitorsLoyalty', 'Visitor Loyalty', 3); - $this->addNavigationLink('Reports', 'Visitors', 'base.reportVisitorsRecency', 'Visitor Recency', 4); - $this->addNavigationLink('Reports', 'Visitors', 'base.reportVisitorsAge', 'Visitor Age', 5); - $this->addNavigationLink('Reports', 'Visitors', 'base.reportBrowsers', 'Browser Types', 6); - $this->addNavigationLink('Reports', 'Visitors', 'base.reportOs', 'Operating Systems', 7); - - $this->addNavigationLink('Reports', '', 'base.reportTraffic', 'Traffic', 2); - $this->addNavigationLink('Reports', 'Traffic', 'base.reportKeywords', 'Search Terms', 1); - $this->addNavigationLink('Reports', 'Traffic', 'base.reportAnchortext', 'Inbound Link Text', 2); - $this->addNavigationLink('Reports', 'Traffic', 'base.reportSearchEngines', 'Search Engines', 3); - $this->addNavigationLink('Reports', 'Traffic', 'base.reportReferringSites', 'Referring Web Sites', 4); - $this->addNavigationLink('Reports', 'Traffic', 'base.reportCampaigns', 'Campaigns', 5); - $this->addNavigationLink('Reports', 'Traffic', 'base.reportAds', 'Ad Performance', 6); - $this->addNavigationLink('Reports', 'Traffic', 'base.reportAdTypes', 'Ad Types', 7); - $this->addNavigationLink('Reports', 'Traffic', 'base.reportCreativePerformance', 'Creative Performance', 8); - $this->addNavigationLink('Reports', 'Traffic', 'base.reportAttributionHistory', 'Attribution History', 8); - $this->addNavigationLink('Reports', '', 'base.reportGoals', 'Goals', 5); - $this->addNavigationLink('Reports', 'Goals', 'base.reportGoalFunnel', 'Funnel Visualization', 1); - - } - - /** - * Registers Event Handlers with queue queue - * - */ - function _registerEventHandlers() { - - // User management - $this->registerEventHandler(array('base.set_password', 'base.reset_password', 'base.new_user_account'), 'userHandlers'); - // Page Requests - $this->registerEventHandler(array('base.page_request', 'base.first_page_request'), 'requestHandlers'); - // Sessions - $this->registerEventHandler(array('base.page_request_logged', 'base.first_page_request_logged'), 'sessionHandlers'); - // Clicks - $this->registerEventHandler('dom.click', 'clickHandlers'); - // Documents - $this->registerEventHandler(array( - 'base.page_request_logged', - 'base.first_page_request_logged', - 'base.feed_request_logged') , 'documentHandlers'); - // Referers - $this->registerEventHandler('base.new_session', 'refererHandlers'); - // Search Terms - $this->registerEventHandler('base.new_session', 'searchTermHandlers'); - // Location - $this->registerEventHandler( array( 'base.new_session', 'ecommerce.transaction' ), 'locationHandlers' ); - // operating systems - $this->registerEventHandler('base.new_session', 'osHandlers'); - // source dimension - $this->registerEventHandler('base.page_request', 'sourceHandlers'); - // campaign dimension - $this->registerEventHandler('base.page_request', 'campaignHandlers'); - // ad dimension - $this->registerEventHandler('base.page_request', 'adHandlers'); - // conversions - $this->registerEventHandler(array( - 'base.new_session', - 'base.session_update', - 'ecommerce.transaction_persisted' ), 'conversionHandlers'); - // User Agent dimension - $this->registerEventHandler(array('base.feed_request', 'base.new_session'), 'userAgentHandlers'); - // Hosts - $this->registerEventHandler(array('base.feed_request', 'base.new_session'), 'hostHandlers'); - // Hosts - $this->registerEventHandler('base.feed_request', 'feedRequestHandlers'); - // User management - $this->registerEventHandler('base.new_session', 'visitorHandlers'); - // Nofifcation handlers - $this->registerEventHandler('base.new_session', 'notifyHandlers'); - // install complete handler - $this->registerEventHandler('install_complete', $this, 'installCompleteHandler'); - // domstreams - $this->registerEventHandler('dom.stream', 'domstreamHandlers'); - // actions - $this->registerEventHandler('track.action', 'actionHandler'); - // Commerce - $this->registerEventHandler('ecommerce.transaction', 'commerceTransactionHandlers'); - $this->registerEventHandler('ecommerce.transaction_persisted', 'sessionCommerceSummaryHandlers'); - } - - function _registerEventProcessors() { - - $this->addEventProcessor('base.page_request', 'base.processRequest'); - $this->addEventProcessor('base.first_page_request', 'base.processFirstRequest'); - } - - function _registerEntities() { - - $this->registerEntity(array( - 'request', - 'session', - 'document', - 'feed_request', - 'click', - 'ua', - 'referer', - 'site', - 'visitor', - 'host', - 'exit', - 'os', - 'impression', - 'configuration', - 'user', - 'domstream', - 'action_fact', - 'search_term_dim', - 'ad_dim', - 'source_dim', - 'campaign_dim', - 'location_dim', - 'commerce_transaction_fact', - 'commerce_line_item_fact', - 'queue_item') - ); - - } - - function installCompleteHandler($event) { - - //owa_coreAPI::debug('test handler: '.print_r($event, true)); - } - - /** - * Determine the operating system of the browser making the request - * - * @param string $user_agent - * @return string - */ - function determineOperatingSystem($os = '', $ua) { - - if (empty($os)) { - - $matches = array( - 'Win.*NT 5\.0' =>'Windows 2000', - 'Win.*NT 5.1' =>'Windows XP', - 'Win.*(Vista|XP|2000|ME|NT|9.?)'=>'Windows $1', - 'Windows .*(3\.11|NT)' =>'Windows $1', - 'Win32' =>'Windows [prior to 1995]', - 'Linux 2\.(.?)\.' =>'Linux 2.$1.x', - 'Linux' =>'Linux [unknown version]', - 'FreeBSD .*-CURRENT$' =>'FreeBSD -CURRENT', - 'FreeBSD (.?)\.' =>'FreeBSD $1.x', - 'NetBSD 1\.(.?)\.' =>'NetBSD 1.$1.x', - '(Free|Net|Open)BSD' =>'$1BSD [unknown]', - 'HP-UX B\.(10|11)\.' =>'HP-UX B.$1.x', - 'IRIX(64)? 6\.' =>'IRIX 6.x', - 'SunOS 4\.1' =>'SunOS 4.1.x', - 'SunOS 5\.([4-6])' =>'Solaris 2.$1.x', - 'SunOS 5\.([78])' =>'Solaris $1.x', - 'Mac_PowerPC' =>'Mac OS [PowerPC]', - 'Mac OS X' =>'Mac OS X', - 'X11' =>'UNIX [unknown]', - 'Unix' =>'UNIX [unknown]', - 'BeOS' =>'BeOS [unknown]', - 'QNX' =>'QNX [unknown]', - ); - - $uas = array_map(create_function('$a', 'return "#.*$a.*#";'), array_keys($matches)); - - $os = preg_replace($uas, array_values($matches), $ua); - } - - return $os; - } - - /** - * Get IP address from request - * - * @return string - * @access private - */ - function setIp($ip) { - - $HTTP_X_FORWARDED_FOR = owa_coreAPI::getServerParam('HTTP_X_FORWARDED_FOR'); - $HTTP_CLIENT_IP = owa_coreAPI::getServerParam('HTTP_CLIENT_IP'); - - // check for a non-unknown proxy address - if (!empty($HTTP_X_FORWARDED_FOR) && strpos(strtolower($HTTP_X_FORWARDED_FOR), 'unknown') === false) { - - // if more than one use the last one - if (strpos($HTTP_X_FORWARDED_FOR, ',') === false) { - $ip = $HTTP_X_FORWARDED_FOR; - } else { - $ips = array_reverse(explode(",", $HTTP_X_FORWARDED_FOR)); - $ip = $ips[0]; - } - - // or else just use the remote address - } else { - - if ($HTTP_CLIENT_IP) { - $ip = $HTTP_CLIENT_IP; - } - - } - - return $ip; - - } - - /** - * Resolve hostname from IP address - * - * @access public - */ - function resolveHost($remote_host = '', $ip_address = '') { - - // See if host is already resolved - if (empty($remote_host)) { - - // Do the host lookup - if (owa_coreAPI::getSetting('base', 'resolve_hosts')) { - $remote_host = @gethostbyaddr($ip_address); - } - - } - - return $remote_host; - } - - function getHostDomain($fullhost = '', $ip_address = '') { - - $host = ''; - - if (!empty($fullhost)) { - - // Sometimes gethostbyaddr returns 'unknown' or the IP address if it can't resolve the host - if ($fullhost === 'localhost') { - $host = 'localhost'; - } elseif ($fullhost === 'unknown') { - $host = $ip_address; - } elseif ($fullhost != $ip_address) { - - $host_array = explode('.', $fullhost); - - // resort so top level domain is first in array - $host_array = array_reverse($host_array); - - // array of tlds. this should probably be in the config array not here. - $tlds = array('com', 'net', 'org', 'gov', 'mil', 'edu'); - - if (in_array($host_array[0], $tlds)) { - $host = $host_array[1].".".$host_array[0]; - } else { - $host = $host_array[2].".".$host_array[1].".".$host_array[0]; - } - - } - - } else { - $host = $ip_address; - } - - return $host; - } - - /** - * Filter function Strips a URL of certain defined session or tracking params - * - * @return string - */ - function makeUrlCanonical($url, $site_id = '') { - - owa_coreAPI::debug('makeUrlCanonical using site_id: '.$site_id); - //remove anchors - $pos = strpos($url, '#'); - if($pos) { - - $url = substr($url, 0, $pos); - } - - $filter_string = owa_coreAPI::getSiteSetting($site_id, 'query_string_filters'); - - if ($filter_string) { - $filters = str_replace(' ', '', $filter_string); - $filters = explode(',', $filter_string); - } else { - $filters = array(); - } - - // merge global filters - $global_filters = owa_coreAPI::getSetting('base', 'query_string_filters'); - if ($global_filters) { - $global_filters = str_replace(' ', '', $global_filters); - $global_filters = explode(',', $global_filters); - $filters = array_merge($global_filters, $filters); - } - - // OWA specific params to filter - array_push($filters, owa_coreAPI::getSetting('base', 'ns').'source'); - array_push($filters, owa_coreAPI::getSetting('base', 'ns').'medium'); - array_push($filters, owa_coreAPI::getSetting('base', 'ns').'campaign'); - array_push($filters, owa_coreAPI::getSetting('base', 'ns').'ad'); - array_push($filters, owa_coreAPI::getSetting('base', 'ns').'ad_type'); - array_push($filters, owa_coreAPI::getSetting('base', 'ns').'overlay'); - array_push($filters, owa_coreAPI::getSetting('base', 'ns').'state'); - array_push($filters, owa_coreAPI::getSetting('base', 'ns').owa_coreAPI::getSetting('base', 'feed_subscription_param')); - - //print_r($filters); - - foreach ($filters as $filter => $value) { - - $url = preg_replace( - '#\?' . - $value . - '=.*$|&' . - $value . - '=.*$|' . - $value . - '=.*&#msiU', - '', - $url - ); - - } - - - //check for dangling '?'. this might occure if all params are stripped. - - // returns last character of string - $test = substr($url, -1); - - // if dangling '?' is found clean up the url by removing it. - if ($test == '?') { - $url = substr($url, 0, -1); - } - - //check and remove default page - $default_page = owa_coreAPI::getSiteSetting($site_id, 'default_page'); - - if ($default_page) { - - $default_length = strlen($default_page); - - if ($default_length) { - - //test for string - $default_test = substr($url, 0 - $default_length, $default_length); - if ($default_test === $default_page) { - $url = substr($url, 0, 0 - $default_length); - } - } - } - - // check and remove trailing slash - if (substr($url, -1) === '/') { - - $url = substr($url, 0, -1); - } - - return $url; - - } - - /** - * Convienence method for generating a data result set - * - * Takes an array of values that contain necessary params to compute the results set. - * Strings use ',' to seperate their values if needed. Array name/value pairs include: - * - * array(metrics => 'foo,bar' - * , dimensions => 'dim1,dim2,dim3' - * , period => 'today' - * , startDate => 'yyyymmdd' - * , endDate => 'yyyymmdd' - * , startTime => timestamp - * , endTime => timestamp - * , constraints => 'con1=foo, con2=bar' - * , page => 1 - * , offset => 0 - * , limit => 10 - * , sort => 'dim1,dim2' - * - * - * @param $params array - * @return paginatedResultSet obj - * @link http://wiki.openwebanalytics.com/index.php?title=REST_API - */ - function getResultSet($metrics, $dimensions = '', $siteId = '', $constraints = '', $sort = '', $resultsPerPage = '', $page = '', $offset = '', $period = '', $startDate = '', $endDate = '', $startTime = '', $endTime = '', $format = '') { - - //print_r(func_get_args()); - // create the metric obj for the first metric - require_once(OWA_BASE_CLASS_DIR.'resultSetManager.php'); - $rsm = new owa_resultSetManager; - - if ($metrics) { - $rsm->metrics = $rsm->metricsStringToArray($metrics); - } else { - return false; - } - - // set dimensions - if ($dimensions) { - $rsm->setDimensions($rsm->dimensionsStringToArray($dimensions)); - } - - // set period - if (!$period) { - $period = 'today'; - } - - $rsm->setTimePeriod($period, - $startDate, - $endDate, - $startTime, - $endTime); - - // set constraints - if ($constraints) { - - $rsm->setConstraints($rsm->constraintsStringToArray($constraints)); - } - - //site_id - if ($siteId) { - $rsm->setConstraints($rsm->constraintsStringToArray('siteId=='.$siteId)); - } - - // set sort order - if ($sort) { - $rsm->setSorts($rsm->sortStringToArray($sort)); - } - - // set limit - if ($resultsPerPage) { - $rsm->setLimit($resultsPerPage); - } - - // set limit (alt key) - if ($resultsPerPage) { - $rsm->setLimit($resultsPerPage); - } - - // set page - if ($page) { - $rsm->setPage($page); - } - - // set offset - if ($offset) { - $rsm->setOffset($offset); - } - - // set format - if ($format) { - $rsm->setFormat($format); - } - - // get results - $rs = $rsm->getResults(); - - if ($format) { - owa_lib::setContentTypeHeader($format); - return $rs->formatResults($format); - } else { - return $rs; - } - } - - function getDomstreams($start_date, $end_date, $document_id = '', $siteId = '', $resultsPerPage = 20, $page = 1, $format = '') { - - $rs = owa_coreAPI::supportClassFactory('base', 'paginatedResultSet'); - $db = owa_coreAPI::dbSingleton(); - $db->selectFrom('owa_domstream'); - $db->selectColumn("domstream_guid, max(timestamp) as timestamp, page_url, duration"); - //$db->selectColumn('id'); - $db->selectColumn('document_id'); - $db->groupby('domstream_guid'); - //$db->selectColumn('events'); - $db->where('yyyymmdd', array('start' => $start_date, 'end' => $end_date), 'BETWEEN'); - if ($document_id) { - $db->where('document_id', $document_id); - } - - if ($siteId) { - $db->where('site_id', $siteId); - } - - $db->orderBy('timestamp', 'DESC'); - - // pass limit to rs object if one exists - $rs->setLimit($resultsPerPage); - - // pass page to rs object if one exists - $rs->setPage($page); - - $results = $rs->generate($db); - - $rs->setLabels(array('id' => 'Domstream ID', 'page_url' => 'Page Url', 'duration' => 'Duration', 'timestamp' => 'Timestamp')); - - if ($format) { - owa_lib::setContentTypeHeader($format); - return $rs->formatResults($format); - } else { - return $rs; - } - } - - function getVisitDetail($sessionId, $format = '') { - - if ($sessionId) { - - $rs = owa_coreAPI::supportClassFactory('base', 'paginatedResultSet'); - $db = owa_coreAPI::dbSingleton(); - - $s = owa_coreAPI::entityFactory('base.session'); - $h = owa_coreAPI::entityFactory('base.host'); - $ua = owa_coreAPI::entityFactory('base.ua'); - $d = owa_coreAPI::entityFactory('base.document'); - $v = owa_coreAPI::entityFactory('base.visitor'); - $r = owa_coreAPI::entityFactory('base.referer'); - - $db->selectFrom($s->getTableName()); - - $db->selectColumn($s->getColumnsSql('session_')); - $db->selectColumn($h->getColumnsSql('host_')); - $db->selectColumn($ua->getColumnsSql('ua_')); - $db->selectColumn($d->getColumnsSql('document_')); - $db->selectColumn($v->getColumnsSql('visitor_')); - $db->selectColumn($r->getColumnsSql('referer_')); - - $db->join(OWA_SQL_JOIN_LEFT_OUTER, $h->getTableName(), '', 'host_id'); - $db->join(OWA_SQL_JOIN_LEFT_OUTER, $ua->getTableName(), '', 'ua_id'); - $db->join(OWA_SQL_JOIN_LEFT_OUTER, $d->getTableName(), '', 'first_page_id'); - $db->join(OWA_SQL_JOIN_LEFT_OUTER, $v->getTableName(), '', 'visitor_id'); - $db->join(OWA_SQL_JOIN_LEFT_OUTER, $r->getTableName(), '', 'referer_id'); - - - $db->where($s->getTableName().'.id', $sessionId); - - - $results = $rs->generate($db); - $rs->resultsRows = $results; - - if ($format) { - owa_lib::setContentTypeHeader($format); - return $rs->formatResults($format); - } else { - return $rs; - } - } - } - - function getLatestVisits($startDate = '', $endDate = '', $visitorId = '', $siteId = '', $resultsPerPage = 20, $page = 1, $format = '') { - - $rs = owa_coreAPI::supportClassFactory('base', 'paginatedResultSet'); - $db = owa_coreAPI::dbSingleton(); - - $s = owa_coreAPI::entityFactory('base.session'); - $h = owa_coreAPI::entityFactory('base.host'); - $ua = owa_coreAPI::entityFactory('base.ua'); - $d = owa_coreAPI::entityFactory('base.document'); - $v = owa_coreAPI::entityFactory('base.visitor'); - $r = owa_coreAPI::entityFactory('base.referer'); - - $db->selectFrom($s->getTableName()); - - $db->selectColumn($s->getColumnsSql('session_')); - $db->selectColumn($h->getColumnsSql('host_')); - $db->selectColumn($ua->getColumnsSql('ua_')); - $db->selectColumn($d->getColumnsSql('document_')); - $db->selectColumn($v->getColumnsSql('visitor_')); - $db->selectColumn($r->getColumnsSql('referer_')); - - $db->join(OWA_SQL_JOIN_LEFT_OUTER, $h->getTableName(), '', 'host_id'); - $db->join(OWA_SQL_JOIN_LEFT_OUTER, $ua->getTableName(), '', 'ua_id'); - $db->join(OWA_SQL_JOIN_LEFT_OUTER, $d->getTableName(), '', 'first_page_id'); - $db->join(OWA_SQL_JOIN_LEFT_OUTER, $v->getTableName(), '', 'visitor_id'); - $db->join(OWA_SQL_JOIN_LEFT_OUTER, $r->getTableName(), '', 'referer_id'); - - $db->orderBy('session_timestamp','DESC'); - - if ($visitorId) { - $db->where('visitor_id', $visitorId); - } - - if ($siteId) { - $db->where('site_id', $siteId); - } - - if ($startDate && $endDate) { - $db->where('owa_session.yyyymmdd', array('start' => $startDate, 'end' => $endDate), 'BETWEEN'); - } - - $db->orderBy('timestamp', 'DESC'); - - // pass limit to rs object if one exists - $rs->setLimit($resultsPerPage); - - // pass page to rs object if one exists - $rs->setPage($page); - - $results = $rs->generate($db); - $rs->resultsRows = $results; - - if ($format) { - owa_lib::setContentTypeHeader($format); - return $rs->formatResults($format); - } else { - return $rs; - } - } - - function getClickstream($sessionId, $resultsPerPage = 100, $page = 1, $format = '') { - - $rs = owa_coreAPI::supportClassFactory('base', 'paginatedResultSet'); - $db = owa_coreAPI::dbSingleton(); - $db->selectFrom('owa_request', 'request'); - $db->selectColumn("*"); - // pass constraints into where clause - $db->join(OWA_SQL_JOIN_LEFT_OUTER, 'owa_document', 'document', 'document_id', 'document.id'); - - if ($sessionId) { - $db->where('session_id', $sessionId); - } - - $db->orderBy('timestamp','DESC'); - - // pass limit to rs object if one exists - $rs->setLimit($resultsPerPage); - - // pass page to rs object if one exists - $rs->setPage($page); - - $results = $rs->generate($db); - $rs->resultsRows = $results; - //print_r($rs); - if ($format) { - owa_lib::setContentTypeHeader($format); - return $rs->formatResults($format); - } else { - - return $rs; - } - } - - /** - * Retrieves full detail of an ecommerce transaction - * - * @param $transactionId string the id of the transaction you want - * @param $format string the format you want returned - * @return - */ - function getTransactionDetail( $transactionId, $format = 'php' ) { - - $t = owa_coreAPI::entityFactory( 'base.commerce_transaction_fact' ); - $t->getbyColumn('order_id',$transactionId); - $trans_detail = array(); - - $id = $t->get( 'id' ); - if ( $id ) { - $trans_detail = $t->_getProperties(); - // fetch line items - $db = owa_coreAPI::dbSingleton(); - - $db->selectFrom( 'owa_commerce_line_item_fact' ); - $db->selectColumn( '*' ); - $db->where( 'order_id', $transactionId ); - $lis = $db->getAllRows(); - $trans_detail['line_items'] = $lis; - } - - return $trans_detail; - } - - function attributeCampaign( $tracking_event ) { - - $mode = owa_coreAPI::getSetting('base', 'campaign_attribution_mode'); - // direct mode means that that we attribute the latest campaign touch - // if the request originaled from the touching the campaign. - if ( $mode === 'direct' ) { - if ( $tracking_event->get( 'from_campaign' ) ) { - $campaigns = array_reverse( $tracking_event->get( 'campaign_touches' ) ); - //$tracking_event->set( 'attributed_campaign', $campaigns[0] ); - return $campaigns[0]; - } - // orginal mode means that we always attribute the request to the - // first touch regardless of the medium/source that generated the request - } elseif ( $mode === 'original' ) { - $campaigns = $tracking_event->get( 'campaign_touches' ); - //$tracking_event->set( 'attributed_campaign', $campaigns[0] ); - return $campaigns[0]; - } - } - - function getTransactions($siteId, $startDate, $endDate, $period, $sort = 'desc', $resultsPerPage = 25, $page = 1, $format = 'json') { - - $db = owa_coreAPI::dbSingleton(); - $db->selectFrom('owa_commerce_transaction_fact'); - $db->selectColumn("*"); - $db->orderBy('timestamp', $sort); - $db->where('site_id', $siteId); - - if ( $period ) { - - $p = owa_coreAPI::supportClassFactory('base', 'timePeriod'); - $p->set($period); - $startDate = $p->startDate->get('yyyymmdd'); - $endDate = $p->endDate->get('yyyymmdd'); - } - - if ($startDate && $endDate) { - $db->where('yyyymmdd', array('start' => $startDate, 'end' => $endDate), 'BETWEEN'); - } - - // pass limit to rs object if one exists - $rs->setLimit($resultsPerPage); - - // pass page to rs object if one exists - $rs->setPage($page); - - $results = $rs->generate($db); - //$rs->resultsRows = $results; - - if ($format) { - owa_lib::setContentTypeHeader($format); - return $rs->formatResults($format); - } else { - return $rs; - } - - } - - function getDomClicks($pageUrl, $siteId, $startDate, $endDate, $document_id = '', $period = '', $resultsPerPage = 100, $page = 1, $format = 'jsonp') { - - // Fetch document object - $d = owa_coreAPI::entityFactory('base.document'); - - if ( ! $document_id ) { - - $eq = owa_coreAPI::getEventDispatch(); - $document_id = $d->generateId( $eq->filter('page_url', urldecode( $pageUrl ), $siteId ) ) ; - } - - $d->getByColumn('id', $document_id); - - - $rs = owa_coreAPI::supportClassFactory('base', 'paginatedResultSet'); - $db = owa_coreAPI::dbSingleton(); - $db->selectFrom('owa_click'); - $db->selectColumn("click_x as x, - click_y as y, - page_width, - page_height, - dom_element_x, - dom_element_y, - position"); - - - $db->orderBy('click_y', 'ASC'); - $db->where('document_id', $document_id); - $db->where('site_id', $siteId); - - - if ( $period ) { - - $p = owa_coreAPI::supportClassFactory('base', 'timePeriod'); - $p->set($period); - $startDate = $p->startDate->get('yyyymmdd'); - $endDate = $p->endDate->get('yyyymmdd'); - } - - if ($startDate && $endDate) { - $db->where('yyyymmdd', array('start' => $startDate, 'end' => $endDate), 'BETWEEN'); - } - - // pass limit to rs object if one exists - $rs->setLimit($resultsPerPage); - - // pass page to rs object if one exists - $rs->setPage($page); - - $results = $rs->generate($db); - //$rs->resultsRows = $results; - - if ($format) { - owa_lib::setContentTypeHeader($format); - return $rs->formatResults($format); - } else { - return $rs; - } - } - - function getDomstream( $domstream_guid ) { - - if ( ! $domstream_guid ) { - return; - } - // Fetch document object - $d = owa_coreAPI::entityFactory('base.domstream'); - //$d->load($this->getParam('domstream_id')); - //$json = new Services_JSON(); - //$d->set('events', $json->decode($d->get('events'))); - - $db = owa_coreAPI::dbSingleton(); - $db->select('*'); - $db->from( $d->getTableName() ); - $db->where( 'domstream_guid', $domstream_guid ); - $db->orderBy('timestamp', 'ASC'); - $ret = $db->getAllRows(); - //print_r($ret); - $combined = ''; - foreach ($ret as $row) { - $combined = $this->mergeStreamEvents( $row['events'], $combined ); - } - - $row['events'] = json_decode($combined); - - $t = new owa_template; - $t->set_template('json.php'); - //$json = new Services_JSON(); - // set - - // if not found look on the request scope. - $callback = owa_coreAPI::getRequestParam('jsonpCallback'); - if ( ! $callback ) { - - $t->set('json', json_encode( $row ) ); - } else { - $body = sprintf("%s(%s);", $callback, json_encode( $row ) ); - $t->set('json', $body); - } - return $t->fetch(); - } - - function mergeStreamEvents($new, $old = '') { - - if ( $old) { - $old = json_decode($old); - } else { - $old = array(); - } - owa_coreAPI::debug('old: '.print_r($old, true)); - $new = json_decode($new); - owa_coreAPI::debug('new: '.print_r($new, true)); - //$combined = array_merge($old, $new); - //array_splice($old, count($old), 0, $new); - - foreach ($new as $v) { - $old[] = $v; - } - $combined = $old; - owa_coreAPI::debug('combined: '.print_r($combined, true)); - owa_coreAPI::debug('combined count: '.count($combined)); - $combined = json_encode($combined); - return $combined; - - } - - /* - function eventProcessingDaemonJobs($jobs) { - - $source = owa_coreAPI::getSetting( 'base', 'event_queue_type' ); - $dest = owa_coreAPI::getSetting( 'base', 'event_secondary_queue_type' ); - - // check event file - $event_log_file = owa_coreAPI::getSetting( 'base', 'async_log_dir' ) . owa_coreAPI::getSetting( 'base', 'async_log_file' ); - $event_log_rotate_size = owa_coreAPI::getSetting( 'base', 'async_log_rotate_size' ); - if ( file_exists( $event_log_file ) && filesize( $event_log_file ) > $event_log_rotate_size ) { - $file_cmd = array('cmd=processEventQueue'); - $file_cmd[] = 'source=file'; - - if ( $dest ) { - $file_cmd[] = 'destination='.$dest; - } - $jobs['processEventQueue'] = array('cmd' => $file_cmd, 'max_workers' => 3, 'interval' => 100); - - $queue_file_exists = true; - } - - return $jobs; - } - */ -} - - -?> + --- a/owa/modules/base/moduleActivate.php +++ /dev/null @@ -1,61 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_moduleActivateController extends owa_adminController { - - function __construct($params) { - - $this->setRequiredCapability('edit_modules'); - return parent::__construct($params); - } - - function action() { - - $module = $this->getParam('module'); - - if ( $module ) { - $ret = owa_coreAPI::installModule($module); - } - - $data = array(); - - $data['do'] = 'base.optionsModules'; - $data['view_method'] = 'redirect'; - $data['status_code'] = 2501; - - return $data; - - } - -} - -?> + --- a/owa/modules/base/moduleActivateCli.php +++ /dev/null @@ -1,56 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_moduleActivateCliController extends owa_cliController { - - function __construct($params) { - - $this->setRequiredCapability('edit_modules'); - return parent::__construct($params); - } - - function action() { - - $module = $this->getParam('module'); - - if ( $module ) { - - $ret = owa_coreAPI::activateModule($module); - - } else { - owa_coreAPI::notice('No module argument was specified. Use module=xxx'); - } - } - -} - -?> + --- a/owa/modules/base/moduleDeactivate.php +++ /dev/null @@ -1,54 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_moduleDeactivateController extends owa_adminController { - - function __construct($params) { - - $this->setRequiredCapability('edit_modules'); - - return parent::__construct($params); - - } - - function action() { - - $s = &owa_coreAPI::serviceSingleton(); - $m = $s->getModule($this->getParam('module')); - $m->deactivate(); - $this->setRedirectAction('base.optionsModules'); - $this->setStatusCode(2502); - } - -} - -?> + --- a/owa/modules/base/moduleDeactivateCli.php +++ /dev/null @@ -1,56 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_moduleDeactivateCliController extends owa_cliController { - - function __construct($params) { - - $this->setRequiredCapability('edit_modules'); - return parent::__construct($params); - } - - function action() { - - $module = $this->getParam('module'); - - if ( $module ) { - - $ret = owa_coreAPI::deactivateModule($module); - - } else { - owa_coreAPI::notice('No module argument was specified. Use module=xxx'); - } - } - -} - -?> + --- a/owa/modules/base/moduleInstallCli.php +++ /dev/null @@ -1,56 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_moduleInstallCliController extends owa_cliController { - - function __construct($params) { - - $this->setRequiredCapability('edit_modules'); - return parent::__construct($params); - } - - function action() { - - $module = $this->getParam('module'); - - if ( $module ) { - - $ret = owa_coreAPI::installModule($module); - - } else { - owa_coreAPI::notice('No module argument was specified. Use module=xxx'); - } - } - -} - -?> + --- a/owa/modules/base/notifyNewSession.php +++ /dev/null @@ -1,96 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_notifyNewSessionController extends owa_controller { - - function __construct($params) { - - $this->priviledge_level = 'guest'; - return parent::__construct($params); - } - - function action() { - - // Control logic - - $s = owa_coreAPI::entityFactory('base.site'); - - $s->getByPk('site_id', $this->params['site_id']); - - $data['site'] = $s->_getProperties(); - - $data['email_address']= $this->config['notice_email']; - $data['session'] = $this->params; - $data['subject'] = sprintf('OWA: New Visit to %s', $s->get('domain')); - $data['view'] = 'base.notifyNewSession'; - $data['plainTextView'] = 'base.notifyNewSessionPlainText'; - $data['view_method'] = 'email-html'; - - return $data; - - } - - -} - - -/** - * New Session Notification View - * - * @author Peter Adams - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_notifyNewSessionView extends owa_view { - - function __construct() { - - return parent::__construct(); - } - - function render($data) { - - $this->t->set_template('wrapper_email.tpl'); - $this->body->set_template('new_session_email.tpl'); - $this->body->set('site', $data['site']); - $this->body->set('session', $data['session']); - } -} - -?> + --- a/owa/modules/base/notifyNewSessionPlainText.php +++ /dev/null @@ -1,50 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_notifyNewSessionPlainTextView extends owa_view { - - function __construct() { - - return parent::__construct(); - } - - function render($data) { - - $this->t->set_template('wrapper_blank.tpl'); - $this->body->set_template('new_session_email_plain_text.tpl'); - $this->body->set('site', $data['site']); - $this->body->set('session', $data['session']); - } -} - -?> --- a/owa/modules/base/options.php +++ /dev/null @@ -1,70 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_optionsView extends owa_view { - - function __construct() { - - $this->default_subview = 'base.optionsGeneral'; - - return parent::__construct(); - } - - function render($data) { - - //page title - $this->t->set('page_title', 'OWA Options'); - - // load body template - $this->body->set_template('options.tpl'); - - // fetch admin links from all modules - // need api call here. - $this->body->set('headline', 'OWA Settings'); - - // get admin panels - $api = &owa_coreAPI::singleton(); - $panels = $api->getAdminPanels(); - //print_r($panels); - $this->body->set('panels', $panels); - - // Assign config data - $this->body->set('config', $this->config); - $this->setJs('jquery', 'base/js/includes/jquery/jquery-1.4.2.min.js', '1.4.2'); - $this->setJs("sprinf", "base/js/includes/jquery/jquery.sprintf.js", '', array('jquery')); - $this->setJs("jquery-ui", "base/js/includes/jquery/jquery-ui-1.8.1.custom.min.js", '1.8.1', array('jquery')); - $this->setJs("owa", "base/js/owa.js"); - $this->setCss('base/css/owa.admin.css'); - } -} - -?> + --- a/owa/modules/base/optionsFlushCache.php +++ /dev/null @@ -1,60 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_optionsFlushCacheController extends owa_adminController { - - function __construct($params) { - - $this->setRequiredCapability('edit_settings'); - return parent::__construct($params); - } - - function action() { - - $cache = &owa_coreAPI::cacheSingleton(); - $cache->flush(); - - $this->e->notice("Cache Flushed"); - - $data = array(); - $data['do'] = 'base.optionsGeneral'; - $data['view_method'] = 'redirect'; - //$data['configuration'] = $nbsettings; - $data['status_code'] = 2500; - - return $data; - - } - -} - -?> + --- a/owa/modules/base/optionsGeneral.php +++ /dev/null @@ -1,86 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_optionsGeneralController extends owa_adminController { - - function __construct($params) { - - parent::__construct($params); - $this->type = 'options'; - $this->setRequiredCapability('edit_settings'); - return; - } - - function action() { - - $this->data['configuration'] = $this->c->fetch('base'); - - // add data to container - $this->data['view'] = 'base.options'; - $this->data['subview'] = 'base.optionsGeneral'; - $this->data['view_method'] = 'delegate'; - - return $this->data; - - } - -} - -/** - * Options View - * - * @author Peter Adams - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_optionsGeneralView extends owa_view { - - function render($data) { - - // load template - $this->body->set_template('options_general.tpl'); - // fetch admin links from all modules - $this->body->set('headline', 'General Configuration Options'); - - //print_r($data['config']); - // assign config data - $this->body->set('config', $data['configuration']); - } -} - -?> + --- a/owa/modules/base/optionsGoalEdit.php +++ /dev/null @@ -1,146 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_optionsGoalEditController extends owa_adminController { - - function __construct($params) { - - parent::__construct($params); - $this->type = 'options'; - $this->setRequiredCapability('edit_settings'); - $this->setNonceRequired(); - $goal = $this->getParam('goal'); - // check that goal number is present - $v1 = owa_coreAPI::validationFactory('required'); - $v1->setValues($goal['goal_number']); - $this->setValidation('goal_number', $v1); - - // check that goal status is present - $v1 = owa_coreAPI::validationFactory('required'); - $v1->setValues($goal['goal_status']); - $this->setValidation('goal_status', $v1); - - // check that goal status is present - $v1 = owa_coreAPI::validationFactory('required'); - $v1->setValues($goal['goal_group']); - $this->setValidation('goal_group', $v1); - - // check that goal type is present - $v1 = owa_coreAPI::validationFactory('required'); - $v1->setValues($goal['goal_type']); - $this->setValidation('goal_type', $v1); - - if ($goal['goal_type'] === 'url_destination') { - // check that match_type is present - $v1 = owa_coreAPI::validationFactory('required'); - $v1->setValues($goal['details']['match_type']); - $this->setValidation('match_type', $v1); - - // check that goal_url is present - $v1 = owa_coreAPI::validationFactory('required'); - $v1->setValues($goal['details']['goal_url']); - $this->setValidation('goal_url', $v1); - } - - $steps = $goal['details']['funnel_steps']; - - if ($steps) { - - foreach ($steps as $num => $step) { - - if (!empty($step['name']) || !empty($step['url'])) { - // check that step name is present - $v1 = owa_coreAPI::validationFactory('required'); - $v1->setValues($step['name']); - $this->setValidation('step_name_'.$num, $v1); - - // check that step url is present - $v1 = owa_coreAPI::validationFactory('required'); - $v1->setValues($step['url']); - $this->setValidation('step_url_'.$num, $v1); - - // check that step is_required is present - $v1 = owa_coreAPI::validationFactory('required'); - $v1->setValues($step['is_required']); - //$this->setValidation('step_is_required_'.$num, $v1); - } - - $check = owa_lib::array_values_assoc($step); - if (!empty($check)) { - $step['step_number'] = $num; - $this->params['goal']['details']['funnel_steps'][$num] = $step; - } else { - // remove the array as it only contains empty values. - // this can happen when the use adds a step but does not fill in any - // values. - unset( $this->params['goal']['details']['funnel_steps'][$num] ); - } - } - } - } - - function action() { - - // setup goal manager - $siteId = $this->get('siteId'); - $gm = owa_coreAPI::supportClassFactory('base', 'goalManager', $siteId); - $goal = $this->getParam('goal'); - //$all_goals = owa_coreAPI::getSiteSetting($site_id, 'goals'); - //$goal_groups = owa_coreAPI::getSiteSetting($site_id, 'goal_groups'); - $gm->saveGoal($goal['goal_number'], $goal); - - if ( $this->get( 'new_goal_group_name' ) ) { - $gm->saveGoalGroupLabel($goal['goal_group'], $this->get( 'new_goal_group_name' ) ); - //$goal_groups[$goal['goal_group']] = $this->get( 'new_goal_group_name' ); - } - - owa_coreAPI::debug('New goals: '.print_r($gm->goals,true)); - $this->setStatusCode(2504); - $this->set('siteId', $siteId); - $this->setRedirectAction('base.optionsGoals'); - } - - function errorAction() { - $goal = $this->getParam('goal'); - $this->setView('base.options'); - $this->setSubview('base.optionsGoalEntry'); - $this->set('error_code', 3311); - $this->set('goal', $goal); - $this->set('goal_number', $goal['goal_number']); - $siteId = $this->get('siteId'); - $gm = owa_coreAPI::supportClassFactory('base', 'goalManager', $siteId); - $this->set('goal_groups', $gm->getAllGoalGroupLabels() ); - } -} - -?> + --- a/owa/modules/base/optionsGoalEntry.php +++ /dev/null @@ -1,87 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_optionsGoalEntryController extends owa_adminController { - - function __construct($params) { - - parent::__construct($params); - $this->type = 'options'; - $this->setRequiredCapability('edit_settings'); - } - - function action() { - - $number = $this->getParam( 'goal_number' ); - $siteId = $this->get('siteId'); - $gm = owa_coreAPI::supportClassFactory('base', 'goalManager', $siteId); - $goal = $gm->getGoal( $number ); - $goal_groups = $gm->getAllGoalGroupLabels(); - $this->set( 'goal_groups', $goal_groups ); - $this->set( 'goal', $goal ); - $this->set('goal_number', $number); - $this->set('siteId', $this->getParam( 'siteId' ) ); - $this->setView('base.options'); - $this->setSubView('base.optionsGoalEntry'); - - } -} - -/** - * Goals Roster View - * - * @author Peter Adams - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_optionsGoalEntryView extends owa_view { - - function render() { - - $this->body->set_template( 'options_goal_entry.php' ); - $this->body->set( 'headline', 'Edit Goal'); - $this->body->set( 'goal', $this->get( 'goal' ) ); - $this->body->set( 'goal_groups', $this->get( 'goal_groups' ) ); - $this->body->set( 'goal_number', $this->get( 'goal_number' ) ); - $this->body->set( 'siteId', $this->get( 'siteId' ) ); - $this->setJs('jquery', 'base/js/includes/jquery/jquery-1.4.2.min.js'); - $this->setJs('jqote', 'base/js/includes/jquery/jQote2/jquery.jqote2.min.js'); - } -} - -?> + --- a/owa/modules/base/optionsGoals.php +++ /dev/null @@ -1,83 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_optionsGoalsController extends owa_adminController { - - function __construct($params) { - - parent::__construct($params); - $this->type = 'options'; - $this->setRequiredCapability('edit_settings'); - } - - function action() { - - $siteId = $this->get('siteId'); - $gm = owa_coreAPI::supportClassFactory('base', 'goalManager', $siteId); - $goals = $gm->getAllGoals(); - $goal_groups = $gm->getAllGoalGroupLabels(); - $this->set('goals', $goals); - $this->set('goal_groups', $goal_groups); - $this->setView('base.options'); - $this->setSubView('base.optionsGoals'); - $this->set('siteId', $siteId); - } -} - -/** - * Goals Roster View - * - * @author Peter Adams - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_optionsGoalsView extends owa_view { - - function render($data) { - - // load template - $this->body->set_template( 'options_goals.tpl' ); - // fetch admin links from all modules - $this->body->set( 'headline', 'Conversion Goals'); - $this->body->set( 'goals', $this->get( 'goals' ) ); - $this->body->set( 'goal_groups', $this->get( 'goal_groups' ) ); - $this->body->set( 'siteId', $this->get( 'siteId' ) ); - } -} - -?> + --- a/owa/modules/base/optionsModules.php +++ /dev/null @@ -1,141 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_optionsModulesController extends owa_adminController { - - function __construct($params) { - - $this->setRequiredCapability('edit_modules'); - return parent::__construct($params); - } - - function action() { - - $path = OWA_BASE_CLASSES_DIR.'modules'.DIRECTORY_SEPARATOR; - $dirs = array(); - - if ($handle = opendir($path)): - while (($file = readdir($handle)) !== false) { - - // test for '.' in dir name - if (strpos($file, '.') === false): - - // test for whether file is a dir - if (is_dir($path.$file)): - - $mod = owa_coreAPI::moduleClassFactory($file); - $dirs[$file]['name'] = $mod->name; - $dirs[$file]['display_name'] = $mod->display_name; - $dirs[$file]['author'] = $mod->author; - $dirs[$file]['group'] = $mod->group; - $dirs[$file]['version'] = $mod->version; - $dirs[$file]['description'] = $mod->description; - $dirs[$file]['config_required'] = $mod->config_required; - $dirs[$file]['current_schema_version'] = $mod->getSchemaVersion(); - $dirs[$file]['required_schema_version'] = $mod->getRequiredSchemaVersion(); - $dirs[$file]['schema_uptodate'] = $mod->isSchemaCurrent(); - //$dirs['stats'] = lstat($path.$file); - - endif; - - endif; - } - endif; - - closedir($handle); - - ksort($dirs); - - // remove base module so it can't be deactivated - // unset($dirs['base']); - - $active_modules = owa_coreAPI::getActiveModules(); - - foreach ($active_modules as $module) { - - if (!empty($dirs[$module])): - $dirs[$module]['status'] = 'active'; - endif; - } - - // add data to container - $this->setView('base.options'); - $this->setSubview('base.optionsModules'); - $this->set('modules', $dirs); - - return; - - } - -} - -/** - * Options Modules View - * - * @author Peter Adams - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_optionsModulesView extends owa_view { - - function __construct($params) { - - //set priviledge level - $this->_setPriviledgeLevel('admin'); - //set page type - $this->_setPageType('Administration Page'); - - return parent::__construct(); - } - - function render($data) { - - //$this->c->get('base', 'modules')); - - // load template - $this->body->set_template('options_modules.tpl'); - - // fetch admin links from all modules - $this->body->set('headline', 'Modules Administration'); - - // Assign module data - $this->body->set('modules', $this->get('modules')); - } -} - -?> + --- a/owa/modules/base/optionsReset.php +++ /dev/null @@ -1,57 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_optionsResetController extends owa_adminController { - - function __construct($params) { - - $this->setRequiredCapability('edit_settings'); - return parent::__construct($params); - } - - function action() { - - $config = owa_coreAPI::configSingleton(); - - $ret = $config->reset($this->get('module')); - - if ($ret) { - - $this->e->notice($this->getMsg(2503)); - $this->setStatusCode(2503); - } - - $this->setRedirectAction('base.optionsGeneral'); - } -} - -?> + --- a/owa/modules/base/optionsUpdate.php +++ /dev/null @@ -1,68 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_optionsUpdateController extends owa_adminController { - - function __construct($params) { - - $this->setRequiredCapability('edit_settings'); - $this->setNonceRequired(); - return parent::__construct($params); - - } - - function action() { - - $c = owa_coreAPI::configSingleton(); - - $config_values = $this->get('config'); - - if (!empty($config_values)) { - - foreach ($config_values as $k => $v) { - - list($module, $name) = split("\.", $k); - $c->persistSetting($module, $name, $v); - } - - $c->save(); - owa_coreAPI::notice("Configuration changes saved to database."); - $this->setStatusCode(2500); - } - - $this->setRedirectAction('base.optionsGeneral'); - } - -} - - -?> + --- a/owa/modules/base/overlayLauncher.php +++ /dev/null @@ -1,60 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_overlayLauncherController extends owa_controller { - - function action() { - - // setup overlay cookiestate - //owa_coreAPI::setState('overlay', '', urldecode($this->getParam('overlay_params')), 'cookie'); - - - - // load entity for document id to get URL - $d = owa_coreAPI::entityFactory('base.document'); - $d->load($this->getParam('document_id')); - - $url = trim( $d->get( 'url' ) ); - - if ( strpos( $url, '#' ) ) { - $parts = explode( '#', $url ); - $url = $parts[0]; - } - - $url = $url.'#owa_overlay.' . trim( base64_encode( urlencode($this->getParam( 'overlay_params' ) ) ), '\u0000' ); - - // redirect browser - $this->redirectBrowserToUrl($url); - } -} - -?> + --- a/owa/modules/base/passwordResetForm.php +++ /dev/null @@ -1,74 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_passwordResetFormController extends owa_controller { - - function __construct($params) { - - return parent::__construct($params); - } - - function action() { - - $this->setView('base.passwordResetForm'); - } -} - - -/** - * Password Reset Request View - * - * @author Peter Adams - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_passwordResetFormView extends owa_view { - - function __construct() { - - return parent::__construct(); - } - - function render($data) { - $this->t->set_template('wrapper_public.tpl'); - $this->body->set_template('users_password_reset_request.tpl'); - } - -} - -?> --- a/owa/modules/base/passwordResetRequest.php +++ /dev/null @@ -1,76 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_passwordResetRequestController extends owa_controller { - - function __construct($params) { - - parent::__construct($params); - - $v1 = owa_coreAPI::validationFactory('entityExists'); - $v1->setConfig('entity', 'base.user'); - $v1->setConfig('column', 'email_address'); - $v1->setValues(trim($this->getParam('email_address'))); - $v1->setErrorMessage($this->getMsg(3010)); - $this->setValidation('email_address', $v1); - } - - function action() { - - // Log password reset request to event queue - $eq = &eventQueue::get_instance(); - - $eq->log(array('email_address' => $this->getParam('email_address')), 'base.reset_password'); - - // return view - $this->setView('base.passwordResetForm'); - $email_address = trim($this->getParam('email_address')); - $msg = $this->getMsg(2000, $email_address); - $this->set('status_msg', $msg); - - return; - } - - function errorAction() { - - $this->setView('base.passwordResetForm'); - $this->set('error_msg', $this->getMsg(2001, $this->getParam('email_address'))); - return; - } - - - -} - - - -?> --- a/owa/modules/base/pixel.php +++ /dev/null @@ -1,57 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_pixelView extends owa_view { - - function render($data) { - - // Set Page title - $this->t->set_template('wrapper_blank.tpl'); - - // load body template - $this->body->set_template('pixel.tpl'); - - $this->body->set('img', sprintf( - '%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%', - 71,73,70,56,57,97,1,0,1,0,128,255,0,192,192,192,0,0,0,33,249,4,1,0,0,0,0,44,0,0,0,0,1,0,1,0,0,2,2,68,1,0,59 - )); - - - header('Content-type: image/gif', true); - - } -} - -?> + --- a/owa/modules/base/processEvent.php +++ /dev/null @@ -1,435 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_processEventController extends owa_controller { - - var $event; - var $eq; - - function __construct($params) { - - if (array_key_exists('event', $params) && !empty($params['event'])) { - - $this->event = $params['event']; - - } else { - owa_coreAPI::debug("No event object was passed to controller."); - $this->event = owa_coreAPI::supportClassFactory('base', 'event'); - } - - $this->eq = owa_coreAPI::getEventDispatch(); - - return parent::__construct($params); - - } - - /** - * Main Control Logic - * - * @return unknown - */ - function action() { - - return; - - } - - /** - * Must be called before all other event property setting functions - */ - function pre() { - - // Set all time related properties - $this->event->setTime(); - - // set repeat visitor type flag visitor is not new. - if ( ! $this->event->get( 'is_new_visitor' ) ) { - $this->event->set( 'is_repeat_visitor', true ); - } else { - // properly cast this to a bool. - $this->event->set( 'is_new_visitor', true ); - } - - //set user agent - if (!$this->event->get('HTTP_USER_AGENT')) { - $this->event->set('HTTP_USER_AGENT', owa_coreAPI::getServerParam('HTTP_USER_AGENT')); - } - - $this->event->set( 'HTTP_USER_AGENT', $this->eq->filter( 'user_agent', $this->event->get( 'HTTP_USER_AGENT' ) ) ); - //set user agent id - $this->event->set( 'ua_id', owa_lib::setStringGuid( $this->event->get( 'HTTP_USER_AGENT' ) ) ); - - // set referer - // needed in case javascript logger sets the referer variable but is blank - if ($this->event->get('referer')) { - //TODO: STANDARDIZE NAME to avoid doing this map - $referer = $this->event->get('referer'); - } else { - owa_coreAPI::debug('ref: '.owa_coreAPI::getServerParam('HTTP_REFERER')); - $referer = owa_coreAPI::getServerParam('HTTP_REFERER'); - } - - $this->event->set('HTTP_REFERER', $this->eq->filter('http_referer', $referer)); - - // set host - if (!$this->event->get('HTTP_HOST')) { - $this->event->set('HTTP_HOST', owa_coreAPI::getServerParam('HTTP_HOST')); - } - - // set language - if (!$this->event->get( 'language' ) ) { - $this->event->set( 'language', $this->eq->filter('language', substr(owa_coreAPI::getServerParam( 'HTTP_ACCEPT_LANGUAGE' ),0,5 ) ) ); - } - - $this->event->set('HTTP_HOST', $this->eq->filter('http_host', $this->event->get('HTTP_HOST'))); - - // set page type to unknown if not already set by caller - if (!$this->event->get('page_type')) { - $this->event->set('page_type', '(not set)'); - } - - $this->event->set('page_type', $this->eq->filter('page_type', $this->event->get('page_type'))); - - // Set the page url or else construct it from environmental vars - if (!$this->event->get('page_url')) { - $this->event->set('page_url', owa_lib::get_current_url()); - } - - $this->event->set( 'page_url', $this->eq->filter( 'page_url', $this->event->get( 'page_url' ), $this->event->get( 'site_id' ) ) ); - // set document/page id - $this->event->set( 'document_id', owa_lib::setStringGuid( $this->event->get( 'page_url' ) ) ); - // needed? - $this->event->set('inbound_page_url', $this->event->get('page_url')); - - // Page title - if ( $this->event->get( 'page_title' ) ) { - $page_title = owa_lib::utf8Encode( trim( $this->event->get( 'page_title' ) ) ); - } else { - $page_title = '(not set)'; - } - - $this->event->set('page_title', $this->eq->filter( 'page_title', $page_title ) ); - - $page_parse = parse_url($this->event->get('page_url')); - - if (!array_key_exists('path', $page_parse) || empty($page_parse['path'])) { - $page_parse['path'] = '/'; - } - - if (!$this->event->get('page_uri')) { - - if (array_key_exists('query', $page_parse) || !empty($page_parse['query'])) { - $this->event->set('page_uri', $this->eq->filter('page_uri', sprintf('%s?%s', $page_parse['path'], $page_parse['query']))); - } else { - $this->event->set('page_uri', $this->eq->filter('page_uri', $page_parse['path'])); - } - - } - - // set internal referer - if ($this->event->get('HTTP_REFERER')) { - - $referer_parse = parse_url($this->event->get('HTTP_REFERER')); - - if ($referer_parse['host'] === $page_parse['host']) { - $this->event->set('prior_page', $this->eq->filter('prior_page', $this->event->get('HTTP_REFERER'), $this->event->get( 'site_id' ) ) ); - } else { - - $this->event->set('external_referer', true); - $this->event->set('referer_id', owa_lib::setStringGuid($this->event->get('HTTP_REFERER' ) ) ); - - if ( ! $this->event->get( 'search_terms' ) ) { - // set query terms - $qt = $this->extractSearchTerms($this->event->get('HTTP_REFERER')); - - if ($qt) { - $this->event->set('search_terms', trim( strtolower( $qt ) ) ); - } - } - } - } - - // set referring search term id - if ($this->event->get( 'search_terms' ) ) { - $this->event->set('referring_search_term_id', owa_lib::setStringGuid( trim( strtolower( $this->event->get('search_terms') ) ) ) ); - } - - // Filter the target url of clicks - if ($this->event->get('target_url')) { - $this->event->set('target_url', $this->eq->filter('target_url', $this->event->get('target_url'), $this->event->get( 'site_id' ) ) ); - } - - // Set Ip Address - if (!$this->event->get('ip_address')) { - $this->event->set('ip_address', owa_coreAPI::getServerParam('REMOTE_ADDR')); - } - - $this->event->set('ip_address', $this->eq->filter('ip_address', $this->event->get('ip_address'))); - - // Set host related properties - if (!$this->event->get('REMOTE_HOST')) { - $this->event->set('REMOTE_HOST', owa_coreAPI::getServerParam('REMOTE_HOST')); - } - // host properties - $this->event->set( 'full_host', $this->eq->filter( 'full_host', - $this->event->get( 'REMOTE_HOST' ), - $this->event->get( 'ip_address' ) ) ); - - $this->event->set( 'host', $this->eq->filter( 'host', $this->event->get( 'full_host' ), $this->event->get( 'ip_address' ) ) ); - // Generate host_id - $this->event->set( 'host_id', owa_lib::setStringGuid( $this->event->get( 'full_host' ) ) ); - - // Browser related properties - $service = owa_coreAPI::serviceSingleton(); - $bcap = $service->getBrowscap(); - - // Assume browser untill told otherwise - $this->event->set('is_browser',true); - - $this->event->set('browser_type', $this->eq->filter('browser_type', $bcap->get('Browser'))); - - if ($bcap->get('Version')) { - $this->event->set('browser', $this->eq->filter('browser', $bcap->get('Browser') . ' ' . $bcap->get('Version'))); - } else { - $this->event->set('browser', $this->eq->filter('browser', $bcap->get('Browser'))); - } - - // Set Operating System - $this->event->set( 'os', $this->eq->filter( 'operating_system', $bcap->get( 'Platform' ), $this->event->get( 'HTTP_USER_AGENT' ) ) ); - $this->event->set( 'os_id', owa_lib::setStringGuid( $this->event->get( 'os' ) ) ); - - //Check for what kind of page request this is - if ($bcap->get('Crawler')) { - $this->event->set('is_robot', true); - $this->event->set('is_browser', false); - } - - // feed request properties - $et = $this->event->getEventType(); - if ($et === 'base.feed_request') { - - // Feed subscription tracking code - if (!$this->event->get('feed_subscription_id')) { - $this->event->set('feed_subscription_id', $this->getParam(owa_coreAPI::getSetting('base', 'feed_subscription_param'))); - } - - // needed?? - $this->event->set('feed_reader_guid', $this->event->setEnvGUID()); - // set feedreader flag to true, browser flag to false - $this->event->set('is_feedreader', true); - $this->event->set('is_browser', false); - } - - // record and filter visitor personally identifiable info (PII) - if (owa_coreAPI::getSetting('base', 'log_visitor_pii')) { - - $cu = owa_coreAPI::getCurrentUser(); - - // set user name - $this->event->set('user_name', $this->eq->filter('user_name', $cu->user->get('user_id'))); - - // set email_address - if ($this->event->get('email_address')) { - $email_adress = $this->event->get('email_address'); - } else { - $email_address = $cu->user->get('email_address'); - } - - $this->event->set('user_email', $this->eq->filter('user_email', $email_address)); - } else { - // remove ip address from event - $this->event->set('ip_address', '(not set)'); - } - - // calc days since first session - $this->setDaysSinceFirstSession(); - - if ( $this->event->get('is_new_session') ) { - //mark entry page flag on current request - $this->event->set( 'is_entry_page', true ); - - // mark event type as first_page_request. Necessary????? - //$this->event->setEventType('base.first_page_request'); - - // if this is not the first sessio nthen calc days sisne last session - if ($this->event->get('last_req')) { - $this->event->set('days_since_prior_session', round(($this->event->get('timestamp') - $this->event->get('last_req'))/(3600*24))); - } - - if ( ! $this->event->get('medium') ) { - $this->setMedium(); - } - - if ( ! $this->event->get('source') ) { - $this->setSource(); - } - - } - - if ( $this->event->get( 'source' ) ) { - $this->event->set( 'source_id', owa_lib::setStringGuid( trim( strtolower( $this->event->get( 'source' ) ) ) ) ); - } - - if ( $this->event->get( 'campaign' ) ) { - $this->event->set( 'campaign_id', owa_lib::setStringGuid( trim( strtolower( $this->event->get( 'campaign' ) ) ) ) ); - } - - if ( $this->event->get( 'ad' ) ) { - $this->event->set( 'ad_id', owa_lib::setStringGuid( trim( strtolower( $this->event->get( 'ad' ) ) ) ) ); - } - } - - function post() { - - return $this->addToEventQueue(); - - } - - /** - * Log request properties of the first hit from a new visitor to a special cookie. - * - * This is used to determine if the request is made by an actual browser instead - * of a robot with spoofed or unknown user agent. - * - * @access public - */ - function log_first_hit() { - - $state_name = owa_coreAPI::getSetting('base', 'first_hit_param'); - $this->event->set('event_type', 'base.first_page_request'); - return owa_coreAPI::setState($state_name, '', $this->event->getProperties(), 'cookie', true); - } - - function addToEventQueue() { - - if (!$this->event->get('do_not_log')) { - // pass event to handlers but filter it first - $this->eq->asyncNotify($this->eq->filter('post_processed_tracking_event', $this->event)); - return owa_coreAPI::debug('Logged '.$this->event->getEventType().' to event queue with properties: '.print_r($this->event->getProperties(), true)); - } else { - owa_coreAPI::debug("Not logging event due to 'do not log' flag being set."); - } - - } - - /** - * Parses query terms from referer - * - * @param string $referer - * @return string - * @access private - */ - function extractSearchTerms($referer) { - - /* Look for query_terms */ - $db = new ini_db(owa_coreAPI::getSetting('base', 'query_strings.ini')); - - $match = $db->match($referer); - - if (!empty($match[1])) { - - return trim(strtolower(urldecode($match[1]))); - - } - } - - // if no campaign attribution look for standard medium/source: - // organic-search, referral, direct - function setMedium() { - - // if there is an external referer - if ( $this->event->get( 'external_referer' ) ) { - - // see if its from a search engine - if ( $this->event->get( 'search_terms' ) ) { - $medium = 'organic-search'; - } else { - // assume its a plain old referral - $medium = 'referral'; - } - } else { - // set as direct - $medium = 'direct'; - } - - $this->event->set( 'medium', $medium ); - } - - function setSource() { - - $ref = $this->event->get( 'external_referer' ); - - if ( $ref ) { - $source = $this->getDomainFromUrl( $ref ); - } else { - $source = '(none)'; - } - - $this->event->set( 'source', $source); - } - - function getDomainFromUrl($url, $strip_www = true) { - - $split_url = preg_split('/\/+/', $url); - $domain = $split_url[1]; - if ($strip_www === true) { - $domain_parts = explode('.', $domain); - $fp = $domain_parts[0]; - if ($fp === 'www') { - return substring($domain, 4); - } else { - return $domain; - } - - } else { - return $domain; - } - } - - function setDaysSinceFirstSession() { - - $fsts = $this->event->get( 'fsts' ); - if ( $fsts ) { - $this->event->set('days_since_first_session', round(($this->event->get('timestamp') - $fsts)/(3600*24))); - } else { - // this means that first session timestamp was not set in the cookie even though it's not a new user...so we set it. - // This can happen with users prior to 1.3.0. when this value was introduced into the cookie. - $this->event->set('days_since_first_session', 0); - } - } -} - - -?> --- a/owa/modules/base/processEventQueue.php +++ /dev/null @@ -1,78 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_processEventQueueController extends owa_cliController { - - function __construct($params) { - - $this->setRequiredCapability( 'edit_modules' ); - return parent::__construct( $params ); - } - - function action() { - - if ( $this->getParam( 'source' ) ) { - $input_queue_type = $this->getParam( 'source' ); - } else { - $input_queue_type = owa_coreAPI::getSetting( 'base', 'event_queue_type' ); - } - - $processing_queue_type = $this->getParam( 'destination' ); - - if ( ! $processing_queue_type ) { - - $processing_queue_type = owa_coreAPI::getSetting( 'base', 'event_secondary_queue_type' ); - } - - // switch event queue setting in case a new events should be sent to a different type of queue. - // this is handy for when processing from a file queue to a database queue - if ( $processing_queue_type ) { - owa_coreAPI::setSetting( 'base', 'event_queue_type', $processing_queue_type ); - owa_coreAPI::debug( "Setting event queue type to $processing_queue_type for processing." ); - } - - $d = owa_coreAPI::getEventDispatch(); - owa_coreAPI::debug( "Loading $input_queue_type event queue." ); - $q = $d->getAsyncEventQueue( $input_queue_type ); - - $ret = $q->processQueue(); - - // go ahead and process the secondary event queue - if ( $ret && $processing_queue_type ) { - $destq = $d->getAsyncEventQueue( $processing_queue_type ); - $destq->processQueue(); - } - } -} - -?> --- a/owa/modules/base/processFirstRequest.php +++ /dev/null @@ -1,70 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_processFirstRequestController extends owa_processEventController { - - function __construct($params) { - - return parent::__construct($params); - } - - function pre() { - - return false; - } - - function action() { - - $fh_state_name = owa_coreAPI::getSetting('base', 'first_hit_param'); - //print_r($fh_state_name); - $fh = owa_coreAPI::getStateParam($fh_state_name); - owa_coreAPI::debug('cookiename: '.$fh_state_name); - //owa_coreAPI::debug(print_r($_COOKIE, true)); - if (!empty($fh)) { - - $this->event->replaceProperties($fh); - $this->event->setEventType('base.first_page_request'); - //owa_coreAPI::debug(print_r($this->event, true)); - // Delete first_hit Cookie - owa_coreAPI::clearState($fh_state_name); - - } - - $this->setView('base.pixel'); - $this->setViewMethod('image'); - } -} - -?> + --- a/owa/modules/base/processRequest.php +++ /dev/null @@ -1,83 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_processRequestController extends owa_processEventController { - - function __construct($params) { - - return parent::__construct($params); - } - - function action() { - - // Control logic - - // Do not log if the first_hit cookie is still present. - $fh_state_name = owa_coreAPI::getSetting('base', 'first_hit_param'); - $fh = owa_coreAPI::getStateParam($fh_state_name); - - if (!empty($fh)) { - $this->e->debug('Clearing left over first first hit cookie.'); - owa_coreAPI::clearState($fh_state_name); - $this->e->debug('Left over first first hit cookie found...aborting request as likely a robot.'); - $this->event->set('do_not_log', true); - return; - } - - // set variety of new session properties. - if ($this->event->get('is_new_session')) { - - } - } - - function post() { - - if ( owa_coreAPI::getSetting('base', 'delay_first_hit') ) { - - // If not, then make sure that there is an inbound visitor_id - if ( ! $this->event->get( 'visitor_id' ) ) { - // Log request properties to a cookie for processing by a second request and return - owa_coreAPI::debug('Logging this request to first hit cookie.'); - return $this->log_first_hit(); - } - } - - owa_coreAPI::debug('Logging '.$this->event->getEventType().' to event queue...'); - - return $this->addToEventQueue(); - } -} - -?> + --- a/owa/modules/base/report.php +++ /dev/null @@ -1,256 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_reportView extends owa_view { - - function render($data) { - - // Set Page title - $this->t->set('page_title', $this->get('title')); - - // Set Page headline - $this->body->set('title', $this->get('title')); - $this->body->set('titleSuffix', $this->get('titleSuffix')); - - // Report Period Filters - $pl = owa_coreAPI::supportClassFactory('base', 'timePeriod'); - $this->body->set('reporting_periods', $pl->getPeriodLabels()); - - // Set reporting period - $this->setPeriod($this->data['period']); - $this->subview->body->set('is_default_period', $this->get('is_default_period')); - - //create the report control params array - $this->report_params = $this->data['params']; - unset($this->report_params['p']); - unset($this->report_params['u']); - unset($this->report_params['v']); - - // unset per site session cookies but not site_id param - foreach ($this->report_params as $k => $v) { - - // remove site specific session values - if (substr($k, 0, 3) == 'ss_'): - unset($this->report_params[$k]); - endif; - - // remove left over first hit session value if found. - if (substr($k, 0, 10) == 'first_hit_'): - unset($this->report_params[$k]); - endif; - - } - - unset($this->report_params['guid']); - unset($this->report_params['caller']); - - $this->body->set('params', $this->report_params); - $this->subview->body->set('params', $this->report_params); - $this->_setLinkState(); - - // set site filter list - $this->body->set('sites', $this->get('sites') ); - - $this->body->set('dom_id', $this->data['dom_id']); - // add if here - $this->subview->body->set('dom_id', $this->data['dom_id']); - $this->body->set('do', $this->data['do']); - - // Set navigation - $this->body->set('top_level_report_nav', $this->get('top_level_report_nav')); - - // load body template - $this->body->set_template('report.tpl'); - - // set Js libs to be loaded - $this->setJs('jquery', 'base/js/includes/jquery/jquery-1.4.2.min.js', '1.4.2'); - $this->setJs("sprintf", "base/js/includes/jquery/jquery.sprintf.js", '', array('jquery')); - $this->setJs("jquery-ui", "base/js/includes/jquery/jquery-ui-1.8.1.custom.min.js", '1.8.1', array('jquery')); - $this->setJs("sparkline", "base/js/includes/jquery/jquery.sparkline.min.js", '', array('jquery')); - $this->setJs('jqgrid','base/js/includes/jquery/jquery.jqGrid.min.js'); - $this->setJs('excanvas','base/js/includes/excanvas.compiled.js', '', '', true); - $this->setJs('flot','base/js/includes/jquery/flot/jquery.flot.min.js'); - $this->setJs('flot-pie','base/js/includes/jquery/flot/jquery.flot.pie.js'); - $this->setJs('jqote','base/js/includes/jquery/jQote2/jquery.jqote2.min.js'); - $this->setJs("owa", "base/js/owa.js"); - $this->setJs("owa.report", 'base/js/owa.report.js', '', array('owa', 'jquery')); - //$this->setJs("owa.dataGrid", "base/js/owa.dataGrid.js", '', array('owa', 'jquery', 'jquery-ui')); - $this->setJs("owa.resultSetExplorer", "base/js/owa.resultSetExplorer.js", '', array('owa', 'jquery', 'jquery-ui')); - $this->setJs("json2", "base/js/includes/json2.js"); - $this->setJs("owa.sparkline", "base/js/owa.sparkline.js", '', array('owa', 'jquery', 'sparkline')); - - // css libs to be loaded - $this->setCss('base/css/smoothness/jquery-ui-1.8.1.custom.css'); - $this->setCss("base/css/owa.report.css"); - $this->setCss('base/css/ui.jqgrid.css'); - } - - /** - * Set report period - * - * @access public - * @param string $period - */ - function setPeriod($period) { - - // set in various templates and params - $this->data['params']['period'] = $period->get(); - $this->body->set('period', $period->get()); - $this->body->set('period_obj', $period); - $this->subview->body->set('period_obj', $period); - $this->subview->body->set('period', $period->get()); - // set period label - $period_label = $period->getLabel(); - $this->body->set('period_label', $period_label); - $this->subview->body->set('period_label', $period_label); - } - - /** - * Applies calling params - * - * @access private - * @param array $properties - */ - function _setParams($params = null) { - - if(!empty($params)) { - foreach ($params as $key => $value) { - if(!empty($value)) { - $this->params[$key] = $value; - } - } - } - } - - function post() { - - $this->setCss("base/css/owa.admin.css"); - } -} - -/** - * Dimension Report View - * - * @author Peter Adams - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_reportDimensionView extends owa_view { - - function render($data) { - - // Assign Data to templates - $this->body->set('tabs', $this->get('tabs') ); - $this->body->set('metrics', $this->get('metrics')); - $this->body->set('dimensions', $this->get('dimensions')); - $this->body->set('sort', $this->get('sort')); - $this->body->set('resultsPerPage', $this->get('resultsPerPage')); - $this->body->set('dimensionLink', $this->get('dimensionLink')); - $this->body->set('trendChartMetric', $this->get('trendChartMetric')); - $this->body->set('trendTitle', $this->get('trendTitle')); - $this->body->set('constraints', $this->get('constraints')); - $this->body->set('gridTitle', $this->get('gridTitle')); - $this->body->set('gridFormatters', $this->get('gridFormatters')); - $this->body->set('excludeColumns', $this->get('excludeColumns')); - $this->body->set_template('report_dimensionalTrend.php'); - } -} - -/** - * Dimension Detail Report View - * - * @author Peter Adams - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_reportDimensionDetailView extends owa_view { - - function render($data) { - - // Assign Data to templates - $this->body->set('tabs', $this->get('tabs') ); - $this->body->set('metrics', $this->get('metrics')); - $this->body->set('dimension', $this->get('dimension')); - $this->body->set('trendChartMetric', $this->get('trendChartMetric')); - $this->body->set('trendTitle', $this->get('trendTitle')); - $this->body->set('constraints', $this->get('constraints')); - $this->body->set('dimension_properties', $this->get('dimension_properties')); - $this->body->set('dimension_template', $this->get('dimension_template')); - $this->body->set('excludeColumns', $this->get('excludeColumns')); - $this->body->set_template('report_dimensionDetail.php'); - } -} - -/** - * Simple Dimensional Report View - * - * @author Peter Adams - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_reportSimpleDimensionalView extends owa_view { - - function render() { - - // Assign Data to templates - $this->body->set('metrics', $this->get('metrics')); - $this->body->set('dimensions', $this->get('dimensions')); - $this->body->set('sort', $this->get('sort')); - $this->body->set('resultsPerPage', $this->get('resultsPerPage')); - $this->body->set('dimensionLink', $this->get('dimensionLink')); - $this->body->set('trendChartMetric', $this->get('trendChartMetric')); - $this->body->set('trendTitle', $this->get('trendTitle')); - $this->body->set('gridFormatters', $this->get('gridFormatters')); - $this->body->set('constraints', $this->get('constraints')); - $this->body->set('gridTitle', $this->get('gridTitle')); - $this->body->set('excludeColumns', $this->get('excludeColumns')); - $this->body->set_template('report_dimensionDetailNoTabs.php'); - } -} - -?> + --- a/owa/modules/base/reportActionDetail.php +++ /dev/null @@ -1,51 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.3.0 - */ - -class owa_reportActionDetailController extends owa_reportController { - - function action() { - - $actionName = $this->getParam('actionName'); - $actionGroup = $this->getParam('actionGroup'); - - $this->setSubview('base.reportSimpleDimensional'); - $this->setTitle('Action Detail: ', $actionGroup.': '.$actionName); - $this->set('metrics', 'actions,actionsValue'); - $this->set('dimensions', 'actionLabel'); - $this->set('sort', 'actions-'); - $this->set('trendChartMetric', 'actions'); - $this->set('trendTitle', 'There were <*= this.d.resultSet.aggregates.actions.formatted_value *> actions of this type.'); - $this->set('constraints', 'actionName=='.urlencode($actionName).',actionGroup=='.urlencode($actionGroup)); - } -} - -?> + --- a/owa/modules/base/reportActionGroup.php +++ /dev/null @@ -1,61 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.3.0 - */ - -class owa_reportActionGroupController extends owa_reportController { - - function action() { - - $actionGroup = $this->getParam('actionGroup'); - - $this->setSubview('base.reportSimpleDimensional'); - $this->setTitle('Action Group: ', $actionGroup); - $this->set('metrics', 'actions,uniqueActions,actionsValue'); - $this->set('dimensions', 'actionGroup,actionName'); - $this->set('sort', 'actions-'); - $this->set('resultsPerPage', 25); - $this->set('dimensionLink', array( - 'linkColumn' => 'actionName', - 'template' => array( - 'do' => 'base.reportActionDetail', - 'actionName' => '%s', - 'actionGroup' => '%s'), - 'valueColumns' => array('actionName', 'actionGroup'))); - - $this->set('trendChartMetric', 'actions'); - $this->set('constraints', 'actionGroup=='.urlencode($actionGroup)); - $this->set('trendTitle', 'There were <*= this.d.resultSet.aggregates.actions.formatted_value *> actions for this action group.'); - $this->set('excludeColumns', "'actionGroup'"); - //$this->set('gridTitle', 'Top Page Types'); - } -} - -?> + --- a/owa/modules/base/reportActionGroups.php +++ /dev/null @@ -1,52 +1,1 @@ - - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.3.0 - */ - -class owa_reportActionGroupsController extends owa_reportController { - - function action() { - - $this->setSubview('base.reportSimpleDimensional'); - $this->setTitle('Action Groups'); - $this->set('metrics', 'actions,uniqueActions,actionsValue'); - $this->set('dimensions', 'actionGroup'); - $this->set('sort', 'actions-'); - $this->set('resultsPerPage', 25); - $this->set('dimensionLink', array('linkColumn' => 'actionGroup', - 'template' => array('do' => 'base.reportActionGroup', 'actionGroup' => '%s'), - 'valueColumns' => 'actionGroup')); - $this->set('trendChartMetric', 'actions'); - $this->set('trendTitle', 'There were <*= this.d.resultSet.aggregates.actions.formatted_value *> actions for all action groups.'); - } -} - -?> + --- a/owa/modules/base/reportActionTracking.php +++ /dev/null @@ -1,84 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.3.0 - */ - -class owa_reportActionTrackingController extends owa_reportController { - - function action() { - - $this->setSubview('base.reportActionTracking'); - $this->setTitle('Actions'); - $this->set('metrics', 'actions,uniqueActions,actionsValue'); - //$this->set('dimensions', 'pageTitle,pageUrl'); - $this->set('sort', 'actions'); - $this->set('resultsPerPage', 30); - $this->set('dimensionLink', array('linkColumn' => 'pageTitle', - 'template' => array('do' => 'base.reportDocument', 'pageUrl' => '%s'), - 'valueColumns' => 'pageUrl')); - $this->set('trendChartMetric', 'actions'); - $this->set('trendTitle', 'There were <*= this.d.resultSet.aggregates.actions.formatted_value *> actions performed on all pages.'); - - } -} - -/** - * Action Tracking Report View - * - * @author Peter Adams - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.3.0 - */ - -class owa_reportActionTrackingView extends owa_view { - - function render() { - - // Assign Data to templates - $this->body->set('metrics', $this->get('metrics')); - $this->body->set('dimensions', $this->get('dimensions')); - $this->body->set('sort', $this->get('sort')); - $this->body->set('resultsPerPage', $this->get('resultsPerPage')); - $this->body->set('dimensionLink', $this->get('dimensionLink')); - $this->body->set('trendChartMetric', $this->get('trendChartMetric')); - $this->body->set('trendTitle', $this->get('trendTitle')); - $this->body->set('constraints', $this->get('constraints')); - $this->body->set('gridTitle', $this->get('gridTitle')); - $this->body->set('hideGrid', true); - $this->body->set_template('report_actionTracking.php'); - } -} - -?> + --- a/owa/modules/base/reportAdDetail.php +++ /dev/null @@ -1,49 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_reportAdDetailController extends owa_reportController { - - function action() { - - $dim_value = strtolower($this->getParam('ad')); - $this->setTitle('Ad: ', $dim_value); - $this->set('metrics', 'visits,pageViews,bounces'); - $this->set('sort', 'visits-'); - $this->set('resultsPerPage', 25); - $this->set('constraints', 'ad=='.urlencode($dim_value)); - $this->set('trendChartMetric', 'visits'); - $this->set('trendTitle', 'There were <*= this.d.resultSet.aggregates.visits.formatted_value *> visits from this ad.'); - $this->setSubview('base.reportDimensionDetail'); - } -} - -?> + --- a/owa/modules/base/reportAdTypeDetail.php +++ /dev/null @@ -1,49 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_reportAdTypeDetailController extends owa_reportController { - - function action() { - - $dim_value = strtolower($this->getParam('adType')); - $this->setTitle('Ad Type: ', $dim_value); - $this->set('metrics', 'visits,pageViews,bounces'); - $this->set('sort', 'visits-'); - $this->set('resultsPerPage', 25); - $this->set('constraints', 'adType=='.urlencode($dim_value)); - $this->set('trendChartMetric', 'visits'); - $this->set('trendTitle', 'There were <*= this.d.resultSet.aggregates.visits.formatted_value *> visits from this ad type.'); - $this->setSubview('base.reportDimensionDetail'); - } -} - -?> + --- a/owa/modules/base/reportAdTypes.php +++ /dev/null @@ -1,54 +1,1 @@ - - * @copyright Copyright © 2006-2010 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_reportAdTypesController extends owa_reportController { - - function action() { - - $this->setSubview('base.reportDimension'); - $this->setTitle('Ad Types'); - $this->set('metrics', 'visits,pageViews,bounces'); - $this->set('dimensions', 'adType'); - $this->set('sort', 'visits-'); - $this->set('resultsPerPage', 30); - $this->set('dimensionLink', array( - 'linkColumn' => 'adType', - 'template' => array('do' => 'base.reportAdTypeDetail', 'adType' => '%s'), - 'valueColumns' => 'adType')); - - $this->set('trendChartMetric', 'visits'); - $this->set('trendTitle', 'There were <*= this.d.resultSet.aggregates.visits.formatted_value *> visits from ads.'); - $this->set('gridTitle', 'Top Ad Types'); - } -} - -?> + --- a/owa/modules/base/reportAds.php +++ /dev/null @@ -1,54 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_reportAdsController extends owa_reportController { - - function action() { - - $this->setSubview('base.reportDimension'); - $this->setTitle('Ad Performance'); - $this->set('metrics', 'visits,pageViews,bounces'); - $this->set('dimensions', 'ad'); - $this->set('sort', 'visits-'); - $this->set('resultsPerPage', 30); - $this->set('dimensionLink', array( - 'linkColumn' => 'ad', - 'template' => array('do' => 'base.reportAdDetail', 'ad' => '%s'), - 'valueColumns' => 'ad')); - $this->set('constraints', 'ad!=null'); - $this->set('trendChartMetric', 'visits'); - $this->set('trendTitle', 'There were <*= this.d.resultSet.aggregates.visits.formatted_value *> visits from ads.'); - $this->set('gridTitle', 'Top Ads'); - } -} - -?> + --- a/owa/modules/base/reportAnchortext.php +++ /dev/null @@ -1,57 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_reportAnchortextController extends owa_reportController { - - function action() { - - $this->setView('base.report'); - $this->setSubview('base.reportDimension'); - $this->setTitle('Referral Link Text'); - $this->set('metrics', 'visits,pageViews,bounces'); - $this->set('dimensions', 'referralLinkText'); - $this->set('sort', 'visits-'); - $this->set('resultsPerPage', 30); - $this->set('constraints', 'medium==referral'); - $this->set('dimensionLink', array( - 'linkColumn' => 'referralLinkText', - 'template' => array( - 'do' => 'base.reportReferralLinkTextDetail', - 'referralLinkText' => '%s'), - 'valueColumns' => 'referralLinkText')); - - $this->set('trendChartMetric', 'visits'); - $this->set('trendTitle', 'There were <*= this.d.resultSet.aggregates.visits.formatted_value *> visits from referrals.'); - } -} - -?> + --- a/owa/modules/base/reportAttributionHistory.php +++ /dev/null @@ -1,62 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_reportAttributionHistoryController extends owa_reportController { - - function action() { - - $this->setSubview('base.reportDimension'); - $this->setTitle('Attribution History'); - - $this->set('dimensions', 'latestAttributions'); - $this->set('sort', 'visits-'); - $this->set('resultsPerPage', 25); - - $this->set('trendChartMetric', 'visits'); - $this->set('trendTitle', 'There were <*= this.d.resultSet.aggregates.visits.formatted_value *> visits from all mediums/source.'); - - $this->set('gridFormatters', array('latestAttributions' => - "function(value) { - if (value) { - table = jQuery('#attributionCell').jqote(JSON.parse(value), '*'); - return table; - } else { - return '(none)'; - } - } - " - )); - } -} - - -?> + --- a/owa/modules/base/reportAvgOrderValue.php +++ /dev/null @@ -1,51 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_reportAvgOrderValueController extends owa_reportController { - - function action() { - - $this->setSubview('base.reportSimpleDimensional'); - $this->setTitle('Average Order Value'); - $this->set('metrics', 'revenuePerTransaction'); - $this->set('dimensions', 'date'); - $this->set('sort', 'date-'); - $this->set('resultsPerPage', 30); - - $this->set('trendChartMetric', 'revenuePerTransaction'); - $this->set('trendTitle', 'Average order Value was <*= this.d.resultSet.aggregates.revenuePerTransaction.formatted_value *> across all transactions.'); - - } -} - -?> + --- a/owa/modules/base/reportBrowserDetail.php +++ /dev/null @@ -1,52 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.3.0 - */ - -class owa_reportBrowserDetailController extends owa_reportController { - - function action() { - - $browser = $this->getParam('browserType'); - - $this->set('dimension_properties', array('browser_family' => $browser)); - $this->set('dimension_template', 'dimension_browser.php'); - $this->setSubview('base.reportDimension'); - $this->setTitle('Browser Detail:'); - $this->set('metrics', 'visits,pageViews,bounces'); - $this->set('dimensions', 'browserVersion'); - $this->set('sort', 'visits-'); - $this->set('trendChartMetric', 'visits'); - $this->set('trendTitle', 'There were <*= this.d.resultSet.aggregates.visits.formatted_value *> visits from this browser type.'); - $this->set('constraints', 'browserType=='.urlencode($browser)); - } -} - -?> + --- a/owa/modules/base/reportBrowsers.php +++ /dev/null @@ -1,54 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.3.0 - */ - -class owa_reportBrowsersController extends owa_reportController { - - function action() { - - $this->setSubview('base.reportDimension'); - $this->setTitle('Browser Types'); - $this->set('metrics', 'visits,pageViews,bounces'); - $this->set('dimensions', 'browserType'); - $this->set('sort', 'visits-'); - $this->set('resultsPerPage', 25); - $this->set('dimensionLink', array( - 'linkColumn' => 'browserType', - 'template' => array('do' => 'base.reportBrowserDetail', 'browserType' => '%s'), - 'valueColumns' => 'browserType')); - - $this->set('trendChartMetric', 'visits'); - $this->set('trendTitle', 'There were <*= this.d.resultSet.aggregates.visits.formatted_value *> visits for all browser types.'); - } -} - - -?> + --- a/owa/modules/base/reportCampaignDetail.php +++ /dev/null @@ -1,49 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_reportCampaignDetailController extends owa_reportController { - - function action() { - - $dim_value = strtolower($this->getParam('campaign')); - $this->setTitle('Campaign: ', $dim_value); - $this->set('metrics', 'visits,pageViews,bounces'); - $this->set('sort', 'visits-'); - $this->set('resultsPerPage', 25); - $this->set('constraints', 'campaign=='.urlencode($dim_value)); - $this->set('trendChartMetric', 'visits'); - $this->set('trendTitle', 'There were <*= this.d.resultSet.aggregates.visits.formatted_value *> visits from this campaign.'); - $this->setSubview('base.reportDimensionDetail'); - } -} - -?> + --- a/owa/modules/base/reportCampaigns.php +++ /dev/null @@ -1,59 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_reportCampaignsController extends owa_reportController { - - function action() { - - $this->setSubview('base.reportDimension'); - $this->setTitle('Campaigns'); - $metrics = 'visits,pageViews,bounces'; - if ( owa_coreAPI::getSetting('base', 'enableEcommerceReporting') ) { - $metrics .= ',transactions,transactionRevenue'; - } - - $this->set('metrics', $metrics); - $this->set('dimensions', 'campaign'); - $this->set('sort', 'visits-'); - $this->set('resultsPerPage', 30); - $this->set('dimensionLink', array( - 'linkColumn' => 'campaign', - 'template' => array('do' => 'base.reportCampaignDetail', 'campaign' => '%s'), - 'valueColumns' => 'campaign')); - $this->set('constraints', 'campaign!=null'); - $this->set('trendChartMetric', 'visits'); - $this->set('trendTitle', 'There were <*= this.d.resultSet.aggregates.visits.formatted_value *> visits from campaigns.'); - $this->set('gridTitle', 'Top Campaigns'); - } -} - -?> + --- a/owa/modules/base/reportCommerce.php +++ /dev/null @@ -1,68 +1,1 @@ - - * @copyright Copyright © 2006 - 2011 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_reportCommerceController extends owa_reportController { - - function action() { - - $this->setSubview('base.reportCommerce'); - $this->setTitle('Ecommerce Overview'); - } - -} - -/** - * Commerce Report View - * - * @author Peter Adams - * @copyright Copyright © 2006 - 2011 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_reportCommerceView extends owa_view { - - function render($data) { - - // Assign Data to templates - - $this->body->set('headline', 'Ecommerce'); - $this->body->set_template('report_commerce.php'); - } - -} - -?> + --- a/owa/modules/base/reportContent.php +++ /dev/null @@ -1,68 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_reportContentController extends owa_reportController { - - function action() { - - $this->setSubview('base.reportContent'); - $this->setTitle('Content Overview'); - } - -} - -/** - * Content Report View - * - * @author Peter Adams - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_reportContentView extends owa_view { - - function render($data) { - - // Assign Data to templates - - $this->body->set('headline', 'Content'); - $this->body->set_template('report_content.tpl'); - } - -} - -?> + --- a/owa/modules/base/reportCountryDetail.php +++ /dev/null @@ -1,54 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_reportCountryDetailController extends owa_reportController { - - function action() { - - $value = $this->getParam('country'); - $this->setSubview('base.reportDimension'); - $this->setTitle('Country: ', $value); - //$this->set('metrics', 'visits,pageViews,bounces'); - $this->set('dimensions', 'stateRegion,country'); - $this->set('sort', 'visits'); - $this->set('resultsPerPage', 30); - $this->set('dimensionLink', array( - 'linkColumn' => 'stateRegion', - 'template' => array('do' => 'base.reportStateDetail', 'stateRegion' => '%s', 'country' => '%s'), - 'valueColumns' => array('stateRegion', 'country'))); - $this->set('constraints', 'country=='.urlencode($value)); - $this->set('trendChartMetric', 'visits'); - $this->set('trendTitle', 'There were <*= this.d.resultSet.aggregates.visits.formatted_value *> visits from this country.'); - } -} - -?> + --- a/owa/modules/base/reportCreativePerformance.php +++ /dev/null @@ -1,54 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_reportCreativePerformanceController extends owa_reportController { - - function action() { - - $this->setSubview('base.reportDimension'); - $this->setTitle('Creative Performance'); - - $this->set('dimensions', 'ad,entryPagePath'); - $this->set('sort', 'visits-'); - $this->set('resultsPerPage', 25); - $this->set('dimensionLink', array( - 'linkColumn' => 'ad', - 'template' => array('do' => 'base.reportAdDetail', 'ad' => '%s'), - 'valueColumns' => 'ad')); - - $this->set('trendChartMetric', 'visits'); - $this->set('trendTitle', 'There were <*= this.d.resultSet.aggregates.visits.formatted_value *> visits for all ads.'); - } -} - - -?> + --- a/owa/modules/base/reportDashboard.php +++ /dev/null @@ -1,105 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_reportDashboardController extends owa_reportController { - - function action() { - - // action counts - $params = array('period' => $this->get('period'), - 'startDate' => $this->get('startDate'), - 'endDate' => $this->get('endDate'), - 'metrics' => 'actions', - 'dimensions' => 'actionName', - 'siteId' => $this->getParam('siteId'), - 'do' => 'getResultSet' - ); - - $rs = owa_coreAPI::executeApiCommand($params); - //print_r($rs); - $this->set('actions', $rs); - - $rs = owa_coreAPI::executeApiCommand(array( - - 'do' => 'getLatestVisits', - 'siteId' => $this->getParam('siteId'), - 'page' => $this->getParam('page'), - 'startDate' => $this->getParam('startDate'), - 'endDate' => $this->getParam('endDate'), - 'period' => $this->getParam('period'), - 'resultsPerPage' => 10 - )); - - $this->set('latest_visits', $rs); - - // set view stuff - $this->setSubview('base.reportDashboard'); - $this->setTitle('Dashboard'); - - $metrics = 'visits,uniqueVisitors,pageViews,bounceRate,pagesPerVisit,visitDuration'; - - if ( owa_coreAPI::getSiteSetting( $this->getParam('siteId'), 'enableEcommerceReporting') ) { - $metrics .= ',transactions,transactionRevenue'; - } - - $this->set('metrics', $metrics); - } -} - -require_once(OWA_BASE_DIR.'/owa_view.php'); - -/** - * Dashboard Report View - * - * @author Peter Adams - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_reportDashboardView extends owa_view { - - function render() { - - $this->body->set_template('report_dashboard.tpl'); - $this->body->set('summary', $this->get('summary')); - $this->body->set('site_trend', $this->get('site_trend')); - $this->body->set('visits', $this->get('latest_visits')); - $this->body->set('actions', $this->get('actions')); - $this->body->set('metrics', $this->get('metrics')); - } -} - -?> + --- a/owa/modules/base/reportDaysToPurchase.php +++ /dev/null @@ -1,50 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_reportDaysToPurchaseController extends owa_reportController { - - function action() { - - $this->setSubview('base.reportSimpleDimensional'); - $this->setTitle('Days To Purchase'); - $this->set('metrics', 'transactions'); - $this->set('dimensions', 'daysToTransaction'); - $this->set('sort', 'daysToTransaction'); - $this->set('resultsPerPage', 30); - $this->set('trendChartMetric', 'transactions'); - $this->set('trendTitle', 'There were <*= this.d.resultSet.aggregates.transactions.formatted_value *> transactions from all visitors.'); - - } -} - -?> + --- a/owa/modules/base/reportDocument.php +++ /dev/null @@ -1,99 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_reportDocumentController extends owa_reportController { - - function action() { - - $d = owa_coreAPI::entityFactory('base.document'); - - if ($this->getParam('pageUrl')) { - $pageUrl = $this->getParam('pageUrl'); - $d->getByColumn('url', $pageUrl); - $this->set('constraints', 'pageUrl=='.urlencode($pageUrl)); - $title_slug = $pageUrl; - } - - if ($this->getParam('pagePath')) { - $pagePath = $this->getParam('pagePath'); - $d->getByColumn('uri', $pagePath); - $this->set('constraints', 'pagePath=='.urlencode($pagePath)); - $title_slug = $pagePath; - } - - $this->setTitle('Page Detail: '); - $this->set('document', $d); - $this->set('metrics', 'visits,pageViews'); - $this->set('resultsPerPage', 30); - $this->set('trendChartMetric', 'pageViews'); - $this->set('trendTitle', 'There were <*= this.d.resultSet.aggregates.pageViews.formatted_value *> page views for this page.'); - $this->setSubview('base.reportDocument'); - } - -} - - -/** - * Document Report View - * - * @author Peter Adams - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_reportDocumentView extends owa_view { - - function render($data) { - - // Assign Data to templates - $this->body->set('metrics', $this->get('metrics')); - $this->body->set('dimensions', $this->get('dimensions')); - $this->body->set('sort', $this->get('sort')); - $this->body->set('resultsPerPage', $this->get('resultsPerPage')); - $this->body->set('dimensionLink', $this->get('dimensionLink')); - $this->body->set('trendChartMetric', $this->get('trendChartMetric')); - $this->body->set('trendTitle', $this->get('trendTitle')); - $this->body->set('constraints', $this->get('constraints')); - $this->body->set('gridTitle', $this->get('gridTitle')); - $this->body->set('document', $this->get('document')); - $this->body->set('dimension_properties', $this->get('document')); - $this->body->set('dimension_template', 'item_document.php'); - $this->body->set_template('report_document.tpl'); - } -} - -?> + --- a/owa/modules/base/reportDomClicks.php +++ /dev/null @@ -1,107 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_reportDomClicksController extends owa_reportController { - - function action() { - - $d = owa_coreAPI::entityFactory('base.document'); - - if ($this->getParam('pageUrl')) { - $pageUrl = $this->getParam('pageUrl'); - $d->getByColumn('url', $pageUrl); - $this->set('constraints', 'pageUrl=='.urlencode($pageUrl)); - $title_slug = $pageUrl; - } - - if ($this->getParam('pagePath')) { - $pagePath = $this->getParam('pagePath'); - $d->getByColumn('uri', $pagePath); - $this->set('constraints', 'pagePath=='.urlencode($pagePath)); - $title_slug = $pagePath; - } - - if ($this->getParam('document_id')) { - $did = $this->getParam('document_id'); - $d->load( $did ); - $pagePath = $d->get('uri'); - $this->set('constraints', 'pagePath=='.urlencode($pagePath)); - $title_slug = $pagePath; - } - - $this->setTitle('Dom Clicks: ', $title_slug); - $this->set('document', $d); - $this->setSubview('base.reportDomClicks'); - $this->set('metrics', 'domClicks'); - $this->set('sort', 'domClicks'); - $this->set('resultsPerPage', 30); - $this->set('trendChartMetric', 'domClicks'); - $this->set('trendTitle', 'There were <*= this.d.resultSet.aggregates.domClicks.formatted_value *> dom clicks for this web page.'); - } -} - -/** - * Dom Clicks Report View - * - * @author Peter Adams - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_reportDomClicksView extends owa_view { - - function render() { - - // Assign Data to templates - $this->body->set('metrics', $this->get('metrics')); - $this->body->set('dimensions', $this->get('dimensions')); - $this->body->set('sort', $this->get('sort')); - $this->body->set('resultsPerPage', $this->get('resultsPerPage')); - $this->body->set('dimensionLink', $this->get('dimensionLink')); - $this->body->set('trendChartMetric', $this->get('trendChartMetric')); - $this->body->set('trendTitle', $this->get('trendTitle')); - $this->body->set('constraints', $this->get('constraints')); - $this->body->set('gridTitle', $this->get('gridTitle')); - $this->body->set('hideGrid', true); - $this->body->set('dimension_properties', $this->get('document')); - $this->body->set('dimension_template', 'item_document.php'); - $this->body->set_template('report_dom_clicks.php'); - $this->body->set('document', $this->get('document')); - } -} - -?> + --- a/owa/modules/base/reportDomstreams.php +++ /dev/null @@ -1,113 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.2.1 - */ - -class owa_reportDomstreamsController extends owa_reportController { - - function action() { - - $document_id = ''; - - // get period - $p = $this->getPeriod(); - - // check for limits - if ($this->getParam('document_id') || $this->getParam('pageUrl') || $this->getParam('pagePath')) { - $doc = owa_coreAPI::entityFactory('base.document'); - - if ($this->getParam('pageUrl')) { - $doc->getByColumn('url', $this->getParam('pageUrl')); - } elseif ($this->getParam('pagePath')) { - $doc->getByColumn('uri', $this->getParam('pagePath')); - } else { - $doc->load($this->getParam('document_id')); - } - - $document_id = $doc->get('id'); - - $this->setTitle('Domstream Recordings: ', $doc->get('url')); - $this->set('document', $doc->_getProperties()); - $this->set('item_properties', $doc); - } else { - // latest domstream report - $this->setTitle('Latest Domstreams'); - } - - $ds = owa_coreAPI::executeApiCommand(array( - - 'do' => 'getDomstreams', - 'startDate' => $p->getStartDate()->getYyyymmdd(), - 'endDate' => $p->getEndDate()->getYyyymmdd(), - 'document_id' => $document_id, - 'siteId' => $this->getParam('siteId'), - 'page' => $this->getParam('page'), - 'resultsPerPage' => 50, - 'format' => $this->getParam('format') - )); - - $this->set('domstreams', $ds); - //print_r($ds); - - // set view stuff - $this->setSubview('base.reportDomstreams'); - - - } - -} - -/** - * Domstream Report View - * - * @author Peter Adams - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.2.1 - */ - -class owa_reportDomstreamsView extends owa_view { - - function render() { - - $this->body->set('domstreams', $this->get('domstreams')); - $this->body->set_template('report_domstreams.tpl'); - $doc = $this->get('document'); - $this->body->set('document', $doc); - $this->body->set('properties', $this->get('item_properties')); - } - -} - -?> + --- a/owa/modules/base/reportEcommerce.php +++ /dev/null @@ -1,79 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_reportEcommerceController extends owa_reportController { - - function action() { - - $this->setSubview('base.reportEcommerce'); - $this->setTitle('Ecommerce'); - $this->set('metrics', 'visits,transactions,transactionRevenue,ecommerceConversionRate,revenuePerVisit,revenuePerTransaction'); - $this->set('sort', 'actions'); - $this->set('resultsPerPage', 30); - $this->set('trendChartMetric', 'transactions'); - $this->set('trendTitle', 'There were <*= this.d.resultSet.aggregates.transactions.formatted_value *> transactions completed.'); - } -} - -/** - * Ecommerce Tracking Report View - * - * @author Peter Adams - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.3.0 - */ - -class owa_reportEcommerceView extends owa_view { - - function render() { - - // Assign Data to templates - $this->body->set('metrics', $this->get('metrics')); - $this->body->set('dimensions', $this->get('dimensions')); - $this->body->set('sort', $this->get('sort')); - $this->body->set('resultsPerPage', $this->get('resultsPerPage')); - $this->body->set('dimensionLink', $this->get('dimensionLink')); - $this->body->set('trendChartMetric', $this->get('trendChartMetric')); - $this->body->set('trendTitle', $this->get('trendTitle')); - $this->body->set('constraints', $this->get('constraints')); - $this->body->set('gridTitle', $this->get('gridTitle')); - $this->body->set('hideGrid', true); - $this->body->set_template('report_ecommerce.php'); - } -} - -?> + --- a/owa/modules/base/reportEcommerceConversionRate.php +++ /dev/null @@ -1,51 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_reportEcommerceConversionRateController extends owa_reportController { - - function action() { - - $this->setSubview('base.reportSimpleDimensional'); - $this->setTitle('Total Revenue'); - $this->set('metrics', 'visits,ecommerceConversionRate'); - $this->set('dimensions', 'date'); - $this->set('sort', 'date-'); - $this->set('resultsPerPage', 30); - - $this->set('trendChartMetric', 'ecommerceConversionRate'); - $this->set('trendTitle', 'There were <*= this.d.resultSet.aggregates.ecommerceConversionRate.formatted_value *> across all visits.'); - - } -} - -?> + --- a/owa/modules/base/reportEntryPages.php +++ /dev/null @@ -1,56 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.3.0 - */ - -class owa_reportEntryPagesController extends owa_reportController { - - function action() { - - $this->setSubview('base.reportDimension'); - $this->setTitle('Entry Pages'); - //$this->set('metrics', 'visits,pageViews,bounces'); - $this->set('dimensions', 'entryPagePath,entryPageUrl,entryPageTitle'); - $this->set('sort', 'visits-'); - $this->set('resultsPerPage', 30); - $this->set('dimensionLink', array( - 'linkColumn' => 'entryPageTitle', - 'template' => array('do' => 'base.reportDocument', 'pageUrl' => '%s'), - 'valueColumns' => 'entryPageUrl')); - - $this->set('trendChartMetric', 'visits'); - $this->set('trendTitle', 'There were <*= this.d.resultSet.aggregates.visits.formatted_value *> visits to the site through all entry pages.'); - $this->set('gridTitle', 'Top Entry Pages'); - $this->set('excludeColumns', "'entryPageUrl'"); - } -} - - -?> + --- a/owa/modules/base/reportExitPages.php +++ /dev/null @@ -1,55 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.3.0 - */ - -class owa_reportExitPagesController extends owa_reportController { - - function action() { - - $this->setSubview('base.reportDimension'); - $this->setTitle('Exit Pages'); - $this->set('metrics', 'visits,pageViews,bounces'); - $this->set('dimensions', 'exitPageTitle,exitPagePath,exitPageUrl'); - $this->set('sort', 'visits-'); - $this->set('resultsPerPage', 30); - $this->set('dimensionLink', array( - 'linkColumn' => 'exitPageTitle', - 'template' => array('do' => 'base.reportDocument', 'pageUrl' => '%s'), - 'valueColumns' => 'exitPageUrl')); - - $this->set('trendChartMetric', 'visits'); - $this->set('trendTitle', 'There were <*= this.d.resultSet.aggregates.visits.formatted_value *> visits to the site.'); - $this->set('gridTitle', 'Top Exit Pages'); - $this->set('excludeColumns', "'exitPageUrl'"); - } -} - -?> + --- a/owa/modules/base/reportFeeds.php +++ /dev/null @@ -1,82 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_reportFeedsController extends owa_reportController { - - function action() { - - $this->set('metrics', 'feedReaders,feedRequests,feedSubscriptions'); - $this->set('resultsPerPage', 30); - $this->set('trendChartMetric', 'feedReaders'); - $this->set('trendTitle', 'There were <*= this.d.resultSet.aggregates.feedReaders.formatted_value *> readers of all feeds.'); - $this->set('dimensions', 'feedType'); - $this->set('sort', 'feedReaders-'); - // view stuff - $this->setView('base.report'); - $this->setSubview('base.reportFeeds'); - $this->setTitle('Feeds'); - } -} - -/** - * Feeds Report View - * - * @author Peter Adams - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_reportFeedsView extends owa_view { - - function render($data) { - - // Assign Data to templates - - $this->body->set('metrics', $this->get('metrics')); - $this->body->set('dimensions', $this->get('dimensions')); - $this->body->set('sort', $this->get('sort')); - $this->body->set('resultsPerPage', $this->get('resultsPerPage')); - $this->body->set('dimensionLink', $this->get('dimensionLink')); - $this->body->set('trendChartMetric', $this->get('trendChartMetric')); - $this->body->set('trendTitle', $this->get('trendTitle')); - $this->body->set('constraints', $this->get('constraints')); - $this->body->set('gridTitle', $this->get('gridTitle')); - $this->body->set_template('report_feeds.tpl'); - } -} - -?> + --- a/owa/modules/base/reportGeolocation.php +++ /dev/null @@ -1,53 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_reportGeolocationController extends owa_reportController { - - function action() { - - $this->setSubview('base.reportDimension'); - $this->setTitle('Visitor Geolocation'); - //$this->set('metrics', 'visits,pageViews,bounces'); - $this->set('dimensions', 'country,countryCode'); - $this->set('sort', 'visits'); - $this->set('resultsPerPage', 30); - $this->set('dimensionLink', array( - 'linkColumn' => 'country', - 'template' => array('do' => 'base.reportCountryDetail', 'country' => '%s'), - 'valueColumns' => 'country')); - - $this->set('trendChartMetric', 'visits'); - $this->set('trendTitle', 'There were <*= this.d.resultSet.aggregates.visits.formatted_value *> visits from all locations.'); - } -} - -?> + --- a/owa/modules/base/reportGoalFunnel.php +++ /dev/null @@ -1,151 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_reportGoalFunnelController extends owa_reportController { - - function action() { - - $gm = owa_coreAPI::supportClassFactory('base', 'goalManager', $this->getParam( 'siteId' ) ); - - $goal_number = $this->getParam('goalNumber'); - - if ( ! $goal_number ) { - $goal_number = 1; - } - - $goal = $gm->getGoal($goal_number); - $funnel = $gm->getGoalFunnel($goal_number); - - if ( $funnel ) { - $goal = $gm->getGoal($goal_number); - // find required steps. build a constraint string. - $required_step_constraints = ''; - $steps_count = count($funnel); - for ($i=1; $i <= $steps_count ;$i++ ) { - - if (array_key_exists('is_required', $funnel[$i]) && $funnel[$i]['is_required'] === true) { - - $required_step_constraints .= 'pagePath=='.$funnel[$i]['url'].','; - } - } - $required_step_constraints = trim($required_step_constraints, ','); - - //print $required_step_constraints; - // get total visits - $total_visitors_rs = owa_coreAPI::executeApiCommand(array( - 'period' => $this->get('period'), - 'startDate' => $this->get('startDate'), - 'endDate' => $this->get('endDate'), - 'constraints' => $required_step_constraints, - 'metrics' => 'visitors', - 'do' => 'getResultSet', - 'siteId' => $this->getParam( 'siteId' ) - )); - //print_r($total_visitors_rs); - $total_visitors = $total_visitors_rs->getAggregateMetric( 'visitors' ); - //print "Total visits: $total_visitors"; - - $this->set( 'total_visitors', $total_visitors); - // get visits for each step - - // add goal url to steps array - $funnel[] = array('url' => $goal['details']['goal_url'], 'name' => $goal['goal_name'], 'step_number' => $steps_count + 1); - foreach ( $funnel as $k => $step ) { - $operator = '=='; - $rs = owa_coreAPI::executeApiCommand(array( - 'period' => $this->get('period'), - 'startDate' => $this->get('startDate'), - 'endDate' => $this->get('endDate'), - 'metrics' => 'visitors', - 'constraints' => 'pagePath'.$operator.$step['url'], - 'do' => 'getResultSet', - 'siteId' => $this->getParam( 'siteId' ) - )); - - $visitors = $rs->getAggregateMetric('visitors') ? $rs->getAggregateMetric('visitors'): 0; - $funnel[$k]['visitors'] = $visitors; - - // backfill check in case there are more visitors to this step than were at prior step. - if ($funnel[$k]['visitors'] <= $funnel[$k-1]['visitors']) { - if ($funnel[$k-1]['visitors'] > 0 ) { - $funnel[$k]['visitor_percentage'] = round($funnel[$k]['visitors'] / $funnel[$k-1]['visitors'], 4) * 100 . '%'; - } else { - $funnel[$k]['visitor_percentage'] = '0.00%'; - } - } else { - $funnel[$k]['visitor_percentage'] = '100%'; - } - } - - //print_r($funnel); - - $goal_step = end($funnel); - $goal_conversion_rate = round($goal_step['visitors'] / $total_visitors, 2) * 100 . '%'; - $this->set('goal_conversion_rate', $goal_conversion_rate); - $this->set('funnel', $funnel); - - } - // set view stuff - $this->setSubview('base.reportGoalFunnel'); - $this->setTitle('Funnel Visualization:', 'Goal ' . $goal_number); - $this->set('goal_number', $goal_number); - } -} - -require_once(OWA_BASE_DIR.'/owa_view.php'); - -/** - * Goal Funnel Report View - * - * @author Peter Adams - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_reportGoalFunnelView extends owa_view { - - function render() { - - $this->body->set_template('report_goal_funnel.php'); - $this->body->set('funnel', $this->get('funnel')); - $this->body->set('funnel_json', json_encode($this->get('funnel'))); - $this->body->set('goal_conversion_rate', $this->get('goal_conversion_rate')); - $this->body->set('numGoals', owa_coreAPI::getSetting('base', 'numGoals') ); - $this->body->set('goal_number', $this->get('goal_number') ); - } -} - -?> + --- a/owa/modules/base/reportGoals.php +++ /dev/null @@ -1,96 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_reportGoalsController extends owa_reportController { - - function action() { - - $this->setSubview('base.reportGoals'); - $this->setTitle('Goals'); - $this->set('metrics', 'visits,goalCompletionsAll,goalConversionRateAll,goalAbandonRateAll,goalValueAll'); - $this->set('trendTitle', 'There were <*= this.d.resultSet.aggregates.goalCompletionsAll.formatted_value *> goals completed.'); - $this->set('trendChartMetric', 'goalCompletionsAll'); - - $gm = owa_coreAPI::supportClassFactory('base', 'goalManager', $siteId); - $goals = $gm->getActiveGoals(); - - if ($goals) { - $goal_metrics = ''; - $goal_count = count($goals); - $i = 1; - foreach ($goals as $goal) { - $goal_metrics .= 'goal'.$goal['goal_number'].'Completions'; - - if ($i < $goal_count) { - $goal_metrics .= ','; - } - $i++; - } - } - $this->set('goal_metrics', $goal_metrics); - } -} - -/** - * Goal Report View - * - * @author Peter Adams - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_reportGoalsView extends owa_view { - - function render() { - - // Assign Data to templates - $this->body->set('metrics', $this->get('metrics')); - $this->body->set('dimensions', $this->get('dimensions')); - $this->body->set('sort', $this->get('sort')); - $this->body->set('resultsPerPage', $this->get('resultsPerPage')); - $this->body->set('dimensionLink', $this->get('dimensionLink')); - $this->body->set('trendChartMetric', $this->get('trendChartMetric')); - $this->body->set('trendTitle', $this->get('trendTitle')); - $this->body->set('constraints', $this->get('constraints')); - $this->body->set('gridTitle', $this->get('gridTitle')); - $this->body->set('hideGrid', true); - $this->body->set('goal_metrics', $this->get('goal_metrics')); - $this->body->set_template('report_goals.php'); - } -} - -?> + --- a/owa/modules/base/reportHostDetail.php +++ /dev/null @@ -1,50 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_reportHostDetailController extends owa_reportController { - - function action() { - - $hostName = $this->getParam('hostName'); - - $this->setSubview('base.reportDimensionDetail'); - $this->setTitle('Host Detail: ', $hostName); - $this->set('metrics', 'visits,pageViews,bounces'); - $this->set('dimension', 'hostName'); - $this->set('trendChartMetric', 'visits'); - $this->set('trendTitle', 'There were <*= this.d.resultSet.aggregates.visits.formatted_value *> visits from this host.'); - $this->set('constraints', 'hostName=='.urlencode($hostName)); - } -} - -?> + --- a/owa/modules/base/reportHosts.php +++ /dev/null @@ -1,54 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_reportHostsController extends owa_reportController { - - function action() { - - $this->setSubview('base.reportDimension'); - $this->setTitle('Host Names'); - $this->set('metrics', 'visits,pageViews,bounces'); - $this->set('dimensions', 'hostName'); - $this->set('sort', 'visits-'); - $this->set('resultsPerPage', 30); - $this->set('dimensionLink', array( - 'linkColumn' => 'hostName', - 'template' => array('do' => 'base.reportHostDetail', 'hostName' => '%s'), - 'valueColumns' => 'hostName')); - - $this->set('trendChartMetric', 'visits'); - $this->set('trendTitle', 'There were <*= this.d.resultSet.aggregates.visits.formatted_value *> visits from all hosts.'); - $this->set('gridTitle', 'Top Hosts'); - } -} - -?> + --- a/owa/modules/base/reportKeywordDetail.php +++ /dev/null @@ -1,49 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_reportKeywordDetailController extends owa_reportController { - - function action() { - - $searchTerm = $this->getParam('referralSearchTerms'); - - $this->setSubview('base.reportDimensionDetail'); - $this->setTitle('Search Term Detail: ', $searchTerm); - $this->set('metrics', 'visits,pageViews,bounces'); - $this->set('dimension', 'referralSearchTerms'); - $this->set('trendChartMetric', 'visits'); - $this->set('trendTitle', 'There were <*= this.d.resultSet.aggregates.visits.formatted_value *> visits from this search term.'); - $this->set('constraints', 'referralSearchTerms=='.urlencode($searchTerm)); - } -} - -?> + --- a/owa/modules/base/reportKeywords.php +++ /dev/null @@ -1,54 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_reportKeywordsController extends owa_reportController { - - function action() { - - $this->setView('base.report'); - $this->setSubview('base.reportDimension'); - $this->setTitle('Referring Search Terms'); - //$this->set('metrics', 'visits,pageViews,bounces'); - $this->set('dimensions', 'referralSearchTerms'); - $this->set('sort', 'visits-'); - $this->set('resultsPerPage', 30); - $this->set('dimensionLink', array( - 'linkColumn' => 'referralSearchTerms', - 'template' => array('do' => 'base.reportKeywordDetail', 'referralSearchTerms' => '%s'), - 'valueColumns' => 'referralSearchTerms')); - $this->set('constraints', 'medium==organic-search'); - $this->set('trendChartMetric', 'visits'); - $this->set('trendTitle', 'There were <*= this.d.resultSet.aggregates.visits.formatted_value *> visits from search engines.'); - } -} - -?> + --- a/owa/modules/base/reportOs.php +++ /dev/null @@ -1,53 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.3.0 - */ - -class owa_reportOsController extends owa_reportController { - - function action() { - - $this->setSubview('base.reportDimension'); - $this->setTitle('Operating Systems'); - $this->set('metrics', 'visits,pageViews,bounces'); - $this->set('dimensions', 'osType'); - $this->set('sort', 'visits-'); - $this->set('resultsPerPage', 25); - $this->set('dimensionLink', array( - 'linkColumn' => 'osType', - 'template' => array('do' => 'base.reportOsDetail', 'osType' => '%s'), - 'valueColumns' => 'osType')); - $this->set('trendChartMetric', 'visits'); - $this->set('trendTitle', 'There were <*= this.d.resultSet.aggregates.visits.formatted_value *> visits for all operating systems.'); - $this->set('gridTitle', 'Top Page Types'); - } -} - -?> + --- a/owa/modules/base/reportOsDetail.php +++ /dev/null @@ -1,50 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.3.0 - */ - -class owa_reportOsDetailController extends owa_reportController { - - function action() { - - $os = $this->getParam('osType'); - $this->setSubview('base.reportDimensionDetail'); - $this->setTitle('Operating System: ', $os); - $this->set('metrics', 'visits,pageViews'); - //$this->set('dimensions', 'osType'); - $this->set('constraints', 'osType=='.urlencode($os)); - $this->set('sort', 'visits-'); - $this->set('trendChartMetric', 'visits'); - $this->set('trendTitle', 'There were <*= this.d.resultSet.aggregates.visits.formatted_value *> visits for this operating system.'); - //$this->set('gridTitle', 'Top Page Types'); - } -} - -?> + --- a/owa/modules/base/reportPageTypeDetail.php +++ /dev/null @@ -1,50 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.3.0 - */ - -class owa_reportPageTypeDetailController extends owa_reportController { - - function action() { - - $pageType = $this->getParam('pageType'); - $this->setSubview('base.reportSimpleDimensional'); - $this->setTitle('Page Type: ', $pageType); - $this->set('metrics', 'visits,pageViews'); - //$this->set('dimensions', 'pageType'); - $this->set('constraints', 'pageType=='.urlencode($pageType)); - $this->set('sort', 'pageViews-'); - $this->set('trendChartMetric', 'pageViews'); - $this->set('trendTitle', 'There were <*= this.d.resultSet.aggregates.pageViews.formatted_value *> page views for this page type.'); - $this->set('gridTitle', 'Top Page Types'); - } -} - -?> + --- a/owa/modules/base/reportPageTypes.php +++ /dev/null @@ -1,55 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.3.0 - */ - -class owa_reportPageTypesController extends owa_reportController { - - function action() { - - $this->setSubview('base.reportSimpleDimensional'); - $this->setTitle('Page Types'); - $this->set('metrics', 'visits,pageViews'); - $this->set('dimensions', 'pageType'); - $this->set('sort', 'pageViews-'); - $this->set('resultsPerPage', 25); - $this->set('dimensionLink', array( - 'linkColumn' => 'pageType', - 'template' => array('do' => 'base.reportPageTypeDetail', 'pageType' => '%s'), - 'valueColumns' => 'pageType')); - - $this->set('trendChartMetric', 'pageViews'); - $this->set('trendTitle', 'There were <*= this.d.resultSet.aggregates.pageViews.formatted_value *> page views for all page types.'); - $this->set('gridTitle', 'Top Page Types'); - } -} - - -?> + --- a/owa/modules/base/reportPages.php +++ /dev/null @@ -1,55 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_reportPagesController extends owa_reportController { - - function action() { - - $this->setSubview('base.reportSimpleDimensional'); - $this->setTitle('Web Pages'); - $this->set('metrics', 'pageViews,visits,uniquePageViews'); - // add ametrics override setting - $this->set('dimensions', 'pagePath,pageTitle,pageType'); - //$this->set('excludeColumns', "'pageUrl'"); - $this->set('sort', 'pageViews-'); - $this->set('resultsPerPage', 30); - $this->set('dimensionLink', array( - 'linkColumn' => 'pagePath', - 'template' => array('do' => 'base.reportDocument', 'pagePath' => '%s'), - 'valueColumns' => 'pagePath')); - $this->set('trendChartMetric', 'pageViews'); - $this->set('trendTitle', 'There were <*= this.d.resultSet.aggregates.pageViews.formatted_value *> page views for <*= this.d.resultSet.aggregates.uniquePageViews.value *> unique pages.'); - $this->set('gridTitle', 'Top Pages'); - } -} - -?> + --- a/owa/modules/base/reportProductCategories.php +++ /dev/null @@ -1,54 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_reportProductCategoriesController extends owa_reportController { - - function action() { - - $dim_name = 'productCategory'; - $this->setSubview('base.reportSimpleDimensional'); - $this->setTitle('Product SKUs'); - $this->set('metrics', 'lineItemQuantity,lineItemRevenue'); - $this->set('dimensions', $dim_name); - $this->set('sort', 'lineItemQuantity-'); - $this->set('resultsPerPage', 30); - $this->set('dimensionLink', array('linkColumn' => $dim_name, - 'template' => array('do' => 'base.reportProductCategoryDetail', $dim_name => '%s'), - 'valueColumns' => $dim_name)); - $this->set('trendChartMetric', 'lineItemQuantity'); - $this->set('trendTitle', 'There were <*= this.d.resultSet.aggregates.lineItemQuantity.formatted_value *> products sold across all Categories.'); - - } -} - -?> + --- a/owa/modules/base/reportProductCategoryDetail.php +++ /dev/null @@ -1,51 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_reportProductCategoryDetailController extends owa_reportController { - - function action() { - - $dim_name = 'productCategory'; - $dim_value = $this->getParam($dim_name); - - $this->setSubview('base.reportSimpleDimensional'); - $this->setTitle('Product Category: ', $dim_value); - $this->set('metrics', 'lineItemQuantity,lineItemRevenue'); - $this->set('dimension', $dim_name); - $this->set('trendChartMetric', 'lineItemQuantity'); - $this->set('trendTitle', 'There were <*= this.d.resultSet.aggregates.lineItemQuantity.formatted_value *> units sold for this SKU.'); - $this->set('constraints', $dim_name.'=='.urlencode($dim_value)); - } -} - -?> + --- a/owa/modules/base/reportProductDetail.php +++ /dev/null @@ -1,51 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_reportProductDetailController extends owa_reportController { - - function action() { - - $dim_name = 'productName'; - $dim_value = $this->getParam($dim_name); - - $this->setSubview('base.reportSimpleDimensional'); - $this->setTitle('Product Detail: ', $dim_value); - $this->set('metrics', 'lineItemQuantity,lineItemRevenue'); - $this->set('dimension', $dim_name); - $this->set('trendChartMetric', 'lineItemQuantity'); - $this->set('trendTitle', 'There were <*= this.d.resultSet.aggregates.lineItemQuantity.formatted_value *> units sold for this product.'); - $this->set('constraints', $dim_name.'=='.urlencode($dim_value)); - } -} - -?> + --- a/owa/modules/base/reportProductSkuDetail.php +++ /dev/null @@ -1,51 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_reportProductSkuDetailController extends owa_reportController { - - function action() { - - $dim_name = 'productSku'; - $dim_value = $this->getParam($dim_name); - - $this->setSubview('base.reportSimpleDimensional'); - $this->setTitle('Product SKU: ', $dim_value); - $this->set('metrics', 'lineItemQuantity,lineItemRevenue'); - $this->set('dimension', $dim_name); - $this->set('trendChartMetric', 'lineItemQuantity'); - $this->set('trendTitle', 'There were <*= this.d.resultSet.aggregates.lineItemQuantity.formatted_value *> units sold for this SKU.'); - $this->set('constraints', $dim_name.'=='.urlencode($dim_value)); - } -} - -?> + --- a/owa/modules/base/reportProductSkus.php +++ /dev/null @@ -1,54 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_reportProductSkusController extends owa_reportController { - - function action() { - - $dim_name = 'productSku'; - $this->setSubview('base.reportSimpleDimensional'); - $this->setTitle('Product SKUs'); - $this->set('metrics', 'lineItemQuantity,lineItemRevenue'); - $this->set('dimensions', $dim_name); - $this->set('sort', 'lineItemQuantity-'); - $this->set('resultsPerPage', 30); - $this->set('dimensionLink', array('linkColumn' => $dim_name, - 'template' => array('do' => 'base.reportProductSkuDetail', $dim_name => '%s'), - 'valueColumns' => $dim_name)); - $this->set('trendChartMetric', 'lineItemQuantity'); - $this->set('trendTitle', 'There were <*= this.d.resultSet.aggregates.lineItemQuantity.formatted_value *> products sold across all SKUs.'); - - } -} - -?> + --- a/owa/modules/base/reportProducts.php +++ /dev/null @@ -1,53 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_reportProductsController extends owa_reportController { - - function action() { - - $this->setSubview('base.reportSimpleDimensional'); - $this->setTitle('Products'); - $this->set('metrics', 'lineItemQuantity,lineItemRevenue'); - $this->set('dimensions', 'productName'); - $this->set('sort', 'actions'); - $this->set('resultsPerPage', 30); - $this->set('dimensionLink', array('linkColumn' => 'productName', - 'template' => array('do' => 'base.reportProductDetail', 'productName' => '%s'), - 'valueColumns' => 'productName')); - $this->set('trendChartMetric', 'lineItemQuantity'); - $this->set('trendTitle', 'There were <*= this.d.resultSet.aggregates.lineItemQuantity.formatted_value *> products sold.'); - - } -} - -?> + --- a/owa/modules/base/reportReferralDetail.php +++ /dev/null @@ -1,63 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.3.0 - */ - -class owa_reportReferralDetailController extends owa_reportController { - - function action() { - - $referral = $this->getParam('referralPageUrl'); - - $this->setSubview('base.reportDimensionDetail'); - $this->setTitle('Referral:'); - - $r = owa_coreAPI::entityFactory('base.referer'); - $r->getByColumn('url', $referral); - - $this->set('dimension_properties', array( - 'page_title' => $r->get('page_title'), - 'url' => $r->get('url'), - 'snippet' => $r->get('snippet') ) ); - - $this->set('dimension_template', 'dimension_referral.php'); - - - $this->set('metrics', 'visits,pageViews,bounces'); - $this->set('dimensions', 'referralPageTitle,referralWebSite'); - $this->set('sort', 'visits-'); - $this->set('resultsPerPage', 25); - $this->set('constraints', 'referralPageUrl=='.urlencode($referral)); - $this->set('trendChartMetric', 'visits'); - $this->set('trendTitle', 'There were <*= this.d.resultSet.aggregates.visits.formatted_value *> visits from this referral.'); - } -} - -?> + --- a/owa/modules/base/reportReferralLinkTextDetail.php +++ /dev/null @@ -1,52 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_reportReferralLinkTextDetailController extends owa_reportController { - - function action() { - - $linkText = $this->getParam('referralLinkText'); - - $this->setView('base.report'); - $this->setSubview('base.reportDimensionDetail'); - $this->setTitle('Referral Link Text: ', $linkText); - $this->set('metrics', 'visits,pageViews,bounces'); - $this->set('dimensions', 'referralLinkText'); - $this->set('sort', 'visits'); - $this->set('resultsPerPage', 30); - $this->set('constraints', 'referralLinkText=='.urlencode($linkText)); - $this->set('trendChartMetric', 'visits'); - $this->set('trendTitle', 'There were <*= this.d.resultSet.aggregates.visits.formatted_value *> visits from links with this text.'); - } -} - -?> + --- a/owa/modules/base/reportReferringSites.php +++ /dev/null @@ -1,54 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_reportReferringSitesController extends owa_reportController { - - function action() { - - $this->setSubview('base.reportDimension'); - $this->setTitle('Referrals'); - $this->set('metrics', 'visits,pageViews,bounces'); - $this->set('dimensions', 'referralPageTitle,referralPageUrl'); - $this->set('sort', 'visits-'); - $this->set('resultsPerPage', 30); - $this->set('dimensionLink', array( - 'linkColumn' => 'referralPageTitle', - 'template' => array('do' => 'base.reportReferralDetail', 'referralPageUrl' => '%s'), - 'valueColumns' => 'referralPageUrl')); - $this->set('constraints', 'medium==referral'); - $this->set('trendChartMetric', 'visits'); - $this->set('trendTitle', 'There were <*= this.d.resultSet.aggregates.visits.formatted_value *> visits from referrals.'); - $this->set('gridTitle', 'Top Referrals'); - } -} - -?> + --- a/owa/modules/base/reportRevenue.php +++ /dev/null @@ -1,51 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_reportRevenueController extends owa_reportController { - - function action() { - - $this->setSubview('base.reportSimpleDimensional'); - $this->setTitle('Total Revenue'); - $this->set('metrics', 'transactionRevenue'); - $this->set('dimensions', 'date'); - $this->set('sort', 'date-'); - $this->set('resultsPerPage', 30); - - $this->set('trendChartMetric', 'transactionRevenue'); - $this->set('trendTitle', 'There were <*= this.d.resultSet.aggregates.transactionRevenue.formatted_value *> across all transactions.'); - - } -} - -?> + --- a/owa/modules/base/reportSearchEngineDetail.php +++ /dev/null @@ -1,51 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.3.0 - */ - -class owa_reportSearchEngineDetailController extends owa_reportController { - - function action() { - - $searchEngine = $this->getParam('referralWebSite'); - - $this->setSubview('base.reportDimensionDetail'); - $this->setTitle('Search Engine: ', $searchEngine); - $this->set('metrics', 'visits,pageViews,bounces'); - $this->set('dimensions', 'referralWebSite'); - $this->set('sort', 'visits'); - $this->set('resultsPerPage', 30); - $this->set('constraints', 'source==organic-search'); - $this->set('trendChartMetric', 'visits'); - $this->set('trendTitle', 'There were <*= this.d.resultSet.aggregates.visits.formatted_value *> visits from this search engine.'); - } -} - -?> + --- a/owa/modules/base/reportSearchEngines.php +++ /dev/null @@ -1,54 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_reportSearchEnginesController extends owa_reportController { - - function action() { - - $this->setSubview('base.reportDimension'); - $this->setTitle('Search Engines'); - $this->set('metrics', 'visits,pageViews,bounces'); - $this->set('dimensions', 'referralWebSite'); - $this->set('sort', 'visits-'); - $this->set('resultsPerPage', 30); - $this->set('dimensionLink', array( - 'linkColumn' => 'referralWebSite', - 'template' => array('do' => 'base.reportSearchEngineDetail', 'referralWebSite' => '%s'), - 'valueColumns' => 'referralWebSite')); - $this->set('constraints', 'medium==organic-search'); - $this->set('trendChartMetric', 'visits'); - $this->set('trendTitle', 'There were <*= this.d.resultSet.aggregates.visits.formatted_value *> visits from search engines.'); - $this->set('gridTitle', 'Top Search Engines'); - } -} - -?> + --- a/owa/modules/base/reportSourceDetail.php +++ /dev/null @@ -1,51 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_reportSourceDetailController extends owa_reportController { - - function action() { - - $dim_name = 'source'; - $dim_value = $this->getParam('source'); - - $this->setSubview('base.reportDimensionDetail'); - $this->setTitle('Source Detail: ', $dim_value); - //$this->set('metrics', 'visits,pageViews,bounces'); - $this->set('dimension', $dim_name); - $this->set('trendChartMetric', 'visits'); - $this->set('trendTitle', 'There were <*= this.d.resultSet.aggregates.visits.formatted_value *> visits from this source.'); - $this->set('constraints', $dim_name.'=='.urlencode($dim_value)); - } -} - -?> + --- a/owa/modules/base/reportSources.php +++ /dev/null @@ -1,55 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_reportSourcesController extends owa_reportController { - - function action() { - - $this->setSubview('base.reportDimension'); - $this->setTitle('Sources'); - $this->set('dimensions', 'source,medium'); - $this->set('sort', 'visits'); - $this->set('resultsPerPage', 30); - $this->set('dimensionLink', array( - 'linkColumn' => 'source', - 'template' => array( - 'do' => 'base.reportSourceDetail', - 'source' => '%s'), - 'valueColumns' => 'source' - )); - - $this->set('trendChartMetric', 'visits'); - $this->set('trendTitle', 'There were <*= this.d.resultSet.aggregates.visits.formatted_value *> visits from all sources.'); - } -} - -?> + --- a/owa/modules/base/reportStateDetail.php +++ /dev/null @@ -1,59 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_reportStateDetailController extends owa_reportController { - - function action() { - - $state = $this->getParam('stateRegion'); - $country = $this->getParam('country'); - $this->setSubview('base.reportDimension'); - $this->setTitle('State/Region: ', $state); - //$this->set('metrics', 'visits,pageViews,bounces'); - $this->set('dimensions', 'city,stateRegion'); - $this->set('sort', 'visits'); - $this->set('resultsPerPage', 30); - /* - - $this->set('dimensionLink', array( - 'linkColumn' => 'stateRegion', - 'template' => array('do' => 'base.reportStateDetail', 'stateRegion' => '%s'), - 'valueColumns' => 'stateRegion')); - -*/ - $this->set('constraints', 'country=='.urlencode($country).',stateRegion=='.urlencode($state)); - $this->set('trendChartMetric', 'visits'); - $this->set('trendTitle', 'There were <*= this.d.resultSet.aggregates.visits.formatted_value *> visits from this state/region.'); - } -} - -?> + --- a/owa/modules/base/reportTraffic.php +++ /dev/null @@ -1,67 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_reportTrafficController extends owa_reportController { - - function action() { - - // view stuff - $this->setView('base.report'); - $this->setSubview('base.reportTraffic'); - $this->setTitle('Traffic Sources'); - } -} - -/** - * Traffic Report View - * - * @author Peter Adams - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_reportTrafficView extends owa_view { - - function render($data) { - - // Assign Data to templates - - $this->body->set_template('report_traffic.tpl'); - } -} - -?> + --- a/owa/modules/base/reportTransactionDetail.php +++ /dev/null @@ -1,75 +1,1 @@ - - * @copyright Copyright © 2006 - 2011 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_reportTransactionDetailController extends owa_reportController { - - function action() { - - $transactionId = $this->getParam('transactionId'); - - $trans_detail = owa_coreAPI::executeAPICommand(array( - 'do' => 'getTransactionDetail', - 'transactionId' => $transactionId, - 'format' => 'php' - )); - - $this->set('trans_detail', $trans_detail); - $this->setSubview('base.reportTransactionDetail'); - $this->setTitle('Transaction Detail for: ', $transaction_id); - } - -} - -/** - * Transaction Detail Report View - * - * @author Peter Adams - * @copyright Copyright © 2006 - 2011 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_reportTransactionDetailView extends owa_view { - - function render() { - - $this->body->set( 'trans_detail', $this->get( 'trans_detail' ) ); - $this->body->set_template( 'report_transaction_detail.php' ); - } - -} - -?> + --- a/owa/modules/base/reportTransactions.php +++ /dev/null @@ -1,65 +1,1 @@ - - * @copyright Copyright © 2006 - 2011 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_reportTransactionsController extends owa_reportController { - - function action() { - - $this->setSubview('base.reportTransactions'); - $this->setTitle('Transactions Overview'); - } - -} - -/** - * Transactions Report View - * - * @author Peter Adams - * @copyright Copyright © 2006 - 2011 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_reportTransactionsView extends owa_view { - - function render($data) { - - $this->body->set_template('report_transactions.php'); - } - -} - -?> + --- a/owa/modules/base/reportVisit.php +++ /dev/null @@ -1,83 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_reportVisitController extends owa_reportController { - - function action() { - - $visit = owa_coreAPI::executeApiCommand(array( - 'do' => 'getVisitDetail', - 'sessionId' => $this->getParam('session_id') ) ); - - //setup Metrics - $rs = owa_coreAPI::executeApiCommand(array( - 'do' => 'getClickstream', - 'sessionId' => $this->getParam('session_id') ) ); - - $this->set('clickstream', $rs); - $this->set('visit', $visit); - $this->set('session_id', $this->getParam('session_id')); - $this->setView('base.report'); - $this->setSubview('base.reportVisit'); - $this->setTitle('Visit Clickstream'); - } -} - -/** - * Visit Report View - * - * @author Peter Adams - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_reportVisitView extends owa_view { - - function render() { - - // Assign data to templates - $this->body->set_template('report_visit.tpl'); - $this->body->set('session_id', $this->get('session_id')); - $this->body->set('visits', $this->get('visit')); - $this->body->set('clickstream', $this->get('clickstream')); - } -} - -?> + --- a/owa/modules/base/reportVisitor.php +++ /dev/null @@ -1,79 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_reportVisitorController extends owa_reportController { - - function action() { - - $visitorId = $this->getParam('visitorId'); - - if (!$visitorId) { - $visitorId = $this->getParam('visitor_id'); - } - - $v = owa_coreAPI::entityFactory('base.visitor'); - $v->load($visitorId); - - $this->set('visitor_id', $visitorId); - $this->set('visitor', $v); - $this->setView('base.report'); - $this->setSubview('base.reportVisitor'); - $this->setTitle('Visitor History:', $v->getVisitorName()); - } - -} - -/** - * Visit Report View - * - * @author Peter Adams - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_reportVisitorView extends owa_view { - - function render($data) { - - $this->body->set_template('report_visitor.tpl'); - $this->body->set('visitor_id', $this->get('visitor_id')); - $this->body->set('visits', $this->get('visits')); - $this->body->set('visitor', $this->get('visitor')); - } -} - -?> + --- a/owa/modules/base/reportVisitors.php +++ /dev/null @@ -1,78 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_reportVisitorsController extends owa_reportController { - - function action() { - - $rs = owa_coreAPI::executeApiCommand(array( - - 'do' => 'getLatestVisits', - 'siteId' => $this->getParam('siteId'), - 'page' => $this->getParam('page'), - 'startDate' => $this->getParam('startDate'), - 'endDate' => $this->getParam('endDate'), - 'period' => $this->getParam('period'), - 'resultsPerPage' => 10 ) ); - - $this->set('latest_visits', $rs); - - // view stuff - $this->setView('base.report'); - $this->setSubview('base.reportVisitors'); - $this->setTitle('Visitors'); - } -} - -/** - * Visitors Report View - * - * @author Peter Adams - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_reportVisitorsView extends owa_view { - - function render($data) { - - $this->body->set_template('report_visitors.tpl'); - $this->body->set('visits', $this->get('latest_visits')); - } -} - -?> + --- a/owa/modules/base/reportVisitorsAge.php +++ /dev/null @@ -1,49 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.3.0 - */ - -class owa_reportVisitorsAgeController extends owa_reportController { - - function action() { - - $this->setSubview('base.reportDimension'); - $this->setTitle('Visitor Age'); - $this->set('metrics', 'visits'); - $this->set('dimensions', 'daysSinceFirstVisit'); - $this->set('sort', 'daysSinceFirstVisit'); - $this->set('resultsPerPage', 25); - $this->set('trendChartMetric', 'visits'); - $this->set('trendTitle', 'There were <*= this.d.resultSet.aggregates.visits.formatted_value *> visits from all sources.'); - } -} - -?> + --- a/owa/modules/base/reportVisitorsLoyalty.php +++ /dev/null @@ -1,48 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_reportVisitorsLoyaltyController extends owa_reportController { - - function action() { - - $this->setSubview('base.reportDimension'); - $this->setTitle('Visitor Loyalty'); - $this->set('metrics', 'visits'); - $this->set('dimensions', 'priorVisitCount'); - $this->set('sort', 'priorVisitCount'); - $this->set('resultsPerPage', 25); - $this->set('trendChartMetric', 'visits'); - $this->set('trendTitle', 'There were <*= this.d.resultSet.aggregates.visits.formatted_value *> visits from all sources.'); - } -} - -?> + --- a/owa/modules/base/reportVisitorsRecency.php +++ /dev/null @@ -1,48 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.3.0 - */ - -class owa_reportVisitorsRecencyController extends owa_reportController { - - function action() { - - $this->setSubview('base.reportDimension'); - $this->setTitle('Visitor Recency'); - $this->set('metrics', 'visits'); - $this->set('dimensions', 'daysSinceLastVisit'); - $this->set('sort', 'daysSinceLastVisit'); - $this->set('resultsPerPage', 25); - $this->set('trendChartMetric', 'visits'); - $this->set('trendTitle', 'There were <*= this.d.resultSet.aggregates.visits.formatted_value *> visits from all sources.'); - } -} - -?> + --- a/owa/modules/base/reportVisitorsRoster.php +++ /dev/null @@ -1,97 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - * @depricated - * @todo remove - */ - -class owa_reportVisitorsRosterController extends owa_reportController { - - function __construct($params) { - - $this->priviledge_level = 'viewer'; - return parent::__construct($params); - } - - function action() { - - - $db = owa_coreAPI::dbSingleton(); - - $db->selectColumn("distinct session.visitor_id as visitor_id, visitor.user_name, visitor.user_email"); - $db->selectFrom('owa_session', 'session'); - $db->join(OWA_SQL_JOIN_LEFT_OUTER, 'owa_visitor', 'visitor', 'visitor_id', 'visitor.id'); - - $db->where('site_id', $this->getParam('site_id')); - - // make new timeperiod of a day - $period = owa_coreAPI::makeTimePeriod('day', array('startDate' => $this->getParam('first_session'))); - $start = $period->getStartDate(); - $end = $period->getEndDate(); - //print_r($period); - // set new period so lables show up right. - $db->where('first_session_timestamp', - array('start' => $start->getTimestamp(), 'end' => $end->getTimestamp()), - 'BETWEEN'); - - $ret = $db->getAllRows(); - - $this->set('visitors', $ret); - $this->setSubview('base.reportVisitorsRoster'); - $this->setTitle('New Visitors from', $period->getStartDate()->label); - } - -} - -/** - * Visitors Roster Report View - * - * @author Peter Adams - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_reportVisitorsRosterView extends owa_view { - - function render($data) { - - $this->body->set_template('report_visitors_roster.tpl'); - $this->body->set('headline', 'Visitors'); - $this->body->set('visitors', $data['visitors']); - } -} - -?> + --- a/owa/modules/base/reportVisits.php +++ /dev/null @@ -1,94 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.3.0 - */ - -class owa_reportVisitsController extends owa_reportController { - - function action() { - - $visitorId = $this->getParam('visitorId'); - - if (!$visitorId) { - $visitorId = $this->getParam('visitor_id'); - } - - $v = owa_coreAPI::entityFactory('base.visitor'); - $v->load($visitorId); - - if ($this->getParam('date')) { - $startDate = $this->getParam('date'); - $endDate = $this->getParam('date'); - } - - $rs = owa_coreAPI::executeApiCommand(array( - - 'do' => 'getLatestVisits', - 'visitorId' => $visitorId, - 'siteId' => $this->getParam('siteId'), - 'page' => $this->getParam('page'), - 'startDate' => $startDate, - 'endDate' => $endDate, - 'format' => '' ) ); - - $this->set('visits', $rs); - $this->set('visitor', $v); - $this->set('visitor_id', $visitorId); - $this->setView('base.report'); - $this->setSubview('base.reportVisits'); - $this->setTitle('Visit History For: ', $v->getVisitorName()); - } -} - -/** - * Visits Report View - * - * @author Peter Adams - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.3.0 - */ - -class owa_reportVisitsView extends owa_view { - - function render() { - - $this->body->set_template('report_visits.php'); - $this->body->set('visitor_id', $this->get('visitor_id')); - $this->body->set('visits', $this->get('visits')); - $this->body->set('visitor', $this->get('visitor')); - } -} - -?> + --- a/owa/modules/base/reportVisitsGeolocation.php +++ /dev/null @@ -1,91 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_reportVisitsGeolocationController extends owa_reportController { - - function action() { - - $site_id = $this->getParam('siteId'); - - if ($site_id) { - //get site labels - $s = owa_coreAPI::entityFactory('base.site'); - $s->getByColumn('site_id', $site_id); - $this->set('site_name', $s->get('name')); - $this->set('site_description', $s->get('description')); - } - - $rs = owa_coreAPI::executeApiCommand(array( - 'do' => 'getLatestVisits', - 'siteId' => $this->getParam('siteId'), - 'page' => $this->getParam('page'), - 'startDate' => $this->getParam('startDate'), - 'endDate' => $this->getParam('endDate'), - 'period' => $this->getParam('period'), - 'resultsPerPage' => 200 ) ); - - $this->set('latest_visits', $rs); - $this->set('site_id', $site_id); - $this->setTitle('Visitor Geo-location'); - $this->setView('base.report'); - $this->setSubview('base.reportVisitsGeolocation'); - } -} - - -/** - * Visits Geolocation Report View - * - * @author Peter Adams - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_reportVisitsGeolocationView extends owa_view { - - function render($data) { - - // Assign data to templates - $this->body->set_template('report_geolocation.tpl'); - $this->body->set('latest_visits', $this->get('latest_visits')); - $this->body->set('site_id', $this->get('site_id') ); - $this->setjs('jmaps', 'base/js/includes/jquery/jquery.jmap-r72.js'); - $this->setjs('owa.map', 'base/js/owa.map.js'); - } -} - -?> + --- a/owa/modules/base/reportVisitsToPurchase.php +++ /dev/null @@ -1,50 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_reportVisitsToPurchaseController extends owa_reportController { - - function action() { - - $this->setSubview('base.reportSimpleDimensional'); - $this->setTitle('Visits To Purchase'); - $this->set('metrics', 'transactions'); - $this->set('dimensions', 'visitsToTransaction'); - $this->set('sort', 'visitsToTransaction'); - $this->set('resultsPerPage', 30); - $this->set('trendChartMetric', 'transactions'); - $this->set('trendTitle', 'There were <*= this.d.resultSet.aggregates.transactions.formatted_value *> transactions from all visitors.'); - - } -} - -?> + --- a/owa/modules/base/sites.php +++ /dev/null @@ -1,77 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_sitesController extends owa_adminController { - - function __construct($params) { - - $this->setRequiredCapability('edit_sites'); - return parent::__construct($params); - } - - function action() { - - $s = owa_coreAPI::entityFactory('base.site'); - $sites = owa_coreAPI::getSitesList(); - $this->set('tracked_sites', $sites); - $this->setSubview('base.sites'); - $this->setView('base.options'); - } -} - - -/** - * Sites Roster View - * - * @author Peter Adams - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_sitesView extends owa_view { - - function render() { - - //page title - $this->t->set('page_title', 'Sites Roster'); - $this->body->set_template('sites.tpl'); - $this->body->set('headline', 'Web Sites Roster'); - $this->body->set('tracked_sites', $this->get('tracked_sites')); - } -} - -?> + --- a/owa/modules/base/sitesAdd.php +++ /dev/null @@ -1,122 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_sitesAddView extends owa_view { - - function render($data) { - - //page title - $this->t->set('page_title', 'Add Web Site'); - $this->body->set('headline', 'Add Web Site Profile'); - // load body template - $this->body->set_template('sites_addoredit.tpl'); - - $this->body->set('action', 'base.sitesAdd'); - - //Check to see if user is passed by constructor or else fetch the object. - if ($data['site']) { - $this->body->set('site', $data['site']); - } - } -} - -/** - * Add Site Controller - * - * @author Peter Adams - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_sitesAddController extends owa_adminController { - - function __construct($params) { - - parent::__construct($params); - - $this->setRequiredCapability('edit_sites'); - - // Config for the domain validation - $domain_conf = array('substring' => 'http', 'position' => 0, 'operator' => '!=', 'errorMsgTemplate' => 'Please remove the "http://" from your begining of your domain.'); - - // Add validations to the run - $this->addValidation('domain', $this->params['domain'], 'subStringPosition', $domain_conf); - $this->addValidation('domain', $this->params['domain'], 'required'); - - // Check user name exists - $v2 = owa_coreAPI::validationFactory('entityDoesNotExist'); - $v2->setConfig('entity', 'base.site'); - $v2->setConfig('column', 'domain'); - $v2->setValues($this->getParam('protocol').$this->getParam('domain')); - $v2->setErrorMessage($this->getMsg(3206)); - $this->setValidation('domain', $v2); - - // require nonce for this action - $this->setNonceRequired(); - } - - function action() { - - $this->params['domain'] = $this->params['protocol'].$this->params['domain']; - - $site = owa_coreAPI::entityFactory('base.site'); - $site_id = md5($this->params['domain']); - $site->set('id', $site->generateId($site_id)); - $site->set('site_id', $site_id); - $site->set('name', $this->params['name']); - $site->set('domain', $this->params['domain']); - $site->set('description', $this->params['description']); - $site->set('site_family', $this->params['site_family']); - $site->create(); - - $this->setRedirectAction('base.sites'); - $this->set('status_code', 3202); - } - - function errorAction() { - - $this->setView('base.options'); - $this->setSubview('base.sitesProfile'); - $this->set('error_code', 3311); - $this->set('site', $this->params); - } - -} - - -?> + --- a/owa/modules/base/sitesDelete.php +++ /dev/null @@ -1,56 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_sitesDeleteController extends owa_adminController { - - function __construct($params) { - parent::__construct($params); - $this->setRequiredCapability('edit_sites'); - $this->setNonceRequired(); - } - - function action() { - - $site = owa_coreAPI::entityFactory('base.site'); - $site->delete($this->params['siteId'], 'site_id'); - - $data['view_method'] = 'redirect'; - $data['do'] = 'base.sites'; - $data['status_code'] = 3204; - - return $data; - } - -} - - -?> + --- a/owa/modules/base/sitesEdit.php +++ /dev/null @@ -1,77 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_sitesEditController extends owa_adminController { - - function __construct($params) { - - parent::__construct($params); - - $this->setRequiredCapability('edit_sites'); - $this->setNonceRequired(); - - // validations - - // check that user_id is present - $v1 = owa_coreAPI::validationFactory('required'); - $v1->setValues($this->getParam('siteId')); - $this->setValidation('siteId', $v1); - - // Check user name exists - $v2 = owa_coreAPI::validationFactory('entityExists'); - $v2->setConfig('entity', 'base.site'); - $v2->setConfig('column', 'site_id'); - $v2->setValues($this->getParam('siteId')); - $v2->setErrorMessage($this->getMsg(3208)); - $this->setValidation('siteId', $v2); - } - - function action() { - - // This needs form validation in a bad way. - - $site = owa_coreAPI::entityFactory('base.site'); - $site->set('site_id', $this->params['siteId']); - $site->set('name', $this->params['name']); - $site->set('domain', $this->params['domain']); - $site->set('description', $this->params['description']); - $site->update('site_id'); - - $data['view_method'] = 'redirect'; - $data['do'] = 'base.sites'; - $data['status_code'] = 3201; - - return $data; - } -} - -?> + --- a/owa/modules/base/sitesEditSettings.php +++ /dev/null @@ -1,99 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_sitesEditSettingsController extends owa_adminController { - - function __construct($params) { - - parent::__construct($params); - $this->setRequiredCapability('edit_sites'); - $this->setNonceRequired(); - - // validations - - // check that user_id is present - $v1 = owa_coreAPI::validationFactory('required'); - $v1->setValues($this->getParam('siteId')); - $this->setValidation('siteId', $v1); - - // Check site exists - $v2 = owa_coreAPI::validationFactory('entityExists'); - $v2->setConfig('entity', 'base.site'); - $v2->setConfig('column', 'site_id'); - $v2->setValues($this->getParam('siteId')); - $v2->setErrorMessage($this->getMsg(3208)); - $this->setValidation('siteId', $v2); - } - - function action() { - - $site_id = $this->getParam( 'siteId' ); - $site = owa_coreAPI::entityFactory( 'base.site' ); - $site->load( $site->generateId( $site_id ) ); - $settings = $site->get( 'settings' ); - - if ( ! is_array($settings) ) { - - $settings = array(); - } - - $new_settings = $this->getParam( 'config' ); - - if ($new_settings) { - $site->set('settings', array_merge( $settings, $new_settings ) ); - - $ret = $site->update(); - - if ($ret) { - $this->setStatusCode( 3201 ); - } - - $this->set('siteId', $site_id); - $this->set('edit', true); - $this->setRedirectAction( 'base.sitesProfile' ); - } - } - - function errorAction() { - - $this->setView('base.options'); - $this->setSubview('base.sitesProfile'); - $this->set('error_code', 3311); - $site_id = $this->getParam( 'siteId' ); - $site = owa_coreAPI::entityFactory( 'base.site' ); - $site->load( $site->generateId( $site_id ) ); - $this->set('site', $site); - $this->set('config', $this->params); - } -} - -?> + --- a/owa/modules/base/sitesInvocation.php +++ /dev/null @@ -1,94 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_sitesInvocationController extends owa_adminController { - - function __construct($params) { - - $this->setRequiredCapability('edit_sites'); - return parent::__construct($params); - } - - function action() { - $site_id = $this->getParam('siteId'); - $this->set('site_id', $site_id); - $s = owa_coreAPI::entityFactory('base.site'); - $s->getByColumn('site_id', $site_id); - $this->set('site', $s); - $this->setSubview('base.sitesInvocation'); - $this->setView('base.options'); - } -} - - - -/** - * Sites Invocation Instructions - * - * @author Peter Adams - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - - -class owa_sitesInvocationView extends owa_view { - - function render($data) { - - $site = $this->get('site'); - - if ($site->get('name')) { - $name = sprintf("%s (%s)", $site->get('domain'), $site->get('name')); - } else { - $name = $site->get('domain'); - } - - - //page title - $this->t->set('page_title', 'Tracking Tags'); - $this->body->set('site', $site); - $this->body->set('name', $name); - // load body template - $this->body->set_template('sites_invocation.tpl'); - - $this->body->set('site_id', $this->get('site_id')); - - } -} - -?> --- a/owa/modules/base/sitesProfile.php +++ /dev/null @@ -1,106 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_sitesProfileController extends owa_adminController { - - function __construct($params) { - - $this->setRequiredCapability('edit_sites'); - return parent::__construct($params); - } - - function action() { - - // needed as this controller is - $site_id = $this->getParam('siteId'); - if (!empty($site_id)) { - $site = owa_coreAPI::entityFactory('base.site'); - $site->getByColumn('site_id', $site_id); - $site_data = $site->_getProperties(); - $this->set('config', $site->get('settings') ); - $this->set('edit', $this->getParam('edit')); - } else { - $site_data = array(); - } - - $this->set('site', $site_data); - $this->set('siteId', $site_id); - $this->setView('base.options'); - $this->setSubview('base.sitesProfile'); - } - -} - - -/** - * Sites Profile View - * - * @author Peter Adams - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_sitesProfileView extends owa_view { - - function render() { - - $site = $this->get('site'); - if ($this->get('edit')) { - $this->body->set('action', 'base.sitesEdit'); - $this->body->set('headline', 'Edit Site Profile for: '. $site['domain'] ); - - } else { - $this->body->set('action', 'base.sitesAdd'); - $this->body->set('headline', 'Add a New Tracked Site Profile'); - - } - - $this->t->set( 'page_title', 'Site Profile for: '. $site['domain'] ); - $this->body->set( 'site', $site ); - $this->body->set( 'edit', $this->get('edit') ); - $this->body->set( 'site_id', $this->get('siteId') ); - $this->body->set( 'config', $this->get('config') ); - //print_r($this->get('config')); - $this->body->set_template( 'sites_addoredit.tpl' ); - } - - -} - - - -?> + --- a/owa/modules/base/templates/chart_dom.tpl +++ /dev/null @@ -1,13 +1,1 @@ -
                          -
                          -
                          - --- a/owa/modules/base/templates/config_dom.tpl +++ /dev/null @@ -1,15 +1,1 @@ -// OWA CONFIG SETTINGS - -OWA.config.main_url = ""; -OWA.config.public_url = ""; -OWA.config.baseUrl = ""; -//OWA.config.js_url = ""; -OWA.config.action_url = ""; -OWA.config.images_url = ""; -OWA.config.log_url = ""; -OWA.config.modules_url = ""; -OWA.config.api_endpoint = ""; -OWA.config.ns = ""; -OWA.config.link_template = ""; - --- a/owa/modules/base/templates/css.tpl +++ /dev/null @@ -1,284 +1,1 @@ - + --- a/owa/modules/base/templates/dimension_browser.php +++ /dev/null @@ -1,14 +1,1 @@ -
                          -
                          - -
                          -
                          -
                          - out($properties['browser_family'], true, true); ?> -
                          - -
                          -
                          - -
                          --- a/owa/modules/base/templates/dimension_referral.php +++ /dev/null @@ -1,21 +1,1 @@ -
                          -
                          - -
                          -
                          -
                          - out($properties['page_title'], true, true); - } else { - $this->out('No Title', false); - } - ?> -
                          -
                          - out($properties['url']);?>   Visit Site » -
                          -
                          out($properties['snippet'], false);?>
                          -
                          -
                          -
                          + --- a/owa/modules/base/templates/error_validation_summary.tpl +++ /dev/null @@ -1,6 +1,1 @@ -The form that you completed had some errors: -
                            - $v): ?> -
                          • - -
                          + --- a/owa/modules/base/templates/filter_period.tpl +++ /dev/null @@ -1,41 +1,1 @@ -
                          - - - - - -
                          - out( $this->get( 'period_label' ) );?>out( $this->get( 'date_label' ) );?> -
                          - - - - - - - - - - - - - - - - - - -
                          --- a/owa/modules/base/templates/filter_site.tpl +++ /dev/null @@ -1,23 +1,1 @@ -
                          - -
                          - Web Site: - -
                          -   - - - -
                          -
                          + --- a/owa/modules/base/templates/footer.php +++ /dev/null @@ -1,3 +1,1 @@ - + --- a/owa/modules/base/templates/gallery.tpl +++ /dev/null @@ -1,2 +1,1 @@ - -{$owa.content} + --- a/owa/modules/base/templates/generic_error.tpl +++ /dev/null @@ -1,2 +1,1 @@ -
                          --- a/owa/modules/base/templates/generic_table.tpl +++ /dev/null @@ -1,48 +1,1 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - setTemplate($table_row_template));?> - - - - - - - - -
                          - - - -
                          No data to display.
                          - - --- a/owa/modules/base/templates/head.tpl +++ /dev/null @@ -1,23 +1,1 @@ - - - - - - - - - - - - - - - - - - - - --- a/owa/modules/base/templates/header.tpl +++ /dev/null @@ -1,34 +1,1 @@ -
                          - - -   - - - - getCurrentUser(); ?> - - Hi, out( $cu->getUserData('user_id') );?> ! • - - - - - - - - - - -
                          - -
                          - - - headerActions(); ?> - -
                          + --- a/owa/modules/base/templates/index.php +++ /dev/null @@ -1,3 +1,1 @@ - + --- a/owa/modules/base/templates/install.tpl +++ /dev/null @@ -1,9 +1,1 @@ -
                          -
                          -

                          Open Web Analytics Installer

                          -
                          -
                          -
                          - -
                          --- a/owa/modules/base/templates/install_check_env.tpl +++ /dev/null @@ -1,23 +1,1 @@ - - -

                          Uh-oh. We found a few issues.

                          - -

                          We found a few problems with your server environment. Please resolve these issues and start the installation again.

                          - - - -

                          Problems

                          - -

                          - - - -

                          - --- a/owa/modules/base/templates/install_config_entry.php +++ /dev/null @@ -1,67 +1,1 @@ -

                          Configuration Settings

                          -

                          -We could not locate OWA's owa-config.php configuration file. You can use the form below to create the file but this may not work on all hosts. If file generation fails, you can just create it manually by renaming owa-config-dist.php to owa-config.php and filling in your database information and public URL. -

                          -
                          -
                          - -

                          Web URL of OWA

                          -

                          - URL of OWA: - - - - This is the web URL of OWA's base directory. -

                          - -

                          Database

                          -

                          - Database Type: - - - - This is the type of database you are going to use. -

                          - -

                          - Database Host: - - - - This is the host that your database resides on. Localhost is ok. -

                          - -

                          - Database Name: - - - - This is the name of the database to install tables into. -

                          - -

                          - Database User: - - - - This is the user name to connect to the database. -

                          - -

                          - Database Password: - - - - This is the password to connect to the database. -

                          -

                          - createNonceFormField('base.installConfig');?> - - -

                          - -

                          - -
                          + --- a/owa/modules/base/templates/install_defaults_entry.php +++ /dev/null @@ -1,34 +1,1 @@ -

                          Default Site & User Information

                          -
                          -
                          - -

                          - Site Domain - - - - - This is the domain of the site to track. -

                          - -

                          - Your E-mail Address - - - - This is the e-mail address of the admin user. -

                          - -

                          - createNonceFormField('base.installBase');?> - - -

                          - -
                          - -
                          - + --- a/owa/modules/base/templates/install_finish.tpl +++ /dev/null @@ -1,20 +1,1 @@ -
                          - -

                          Success! That's It. Installation is Complete.

                          -

                          Open Web Analytics has been successfully installed. Login using the user name and password below and generate a tracker.

                          -

                          - User Name: - -

                          -

                          - Password: - - Be sure to change this password. -

                          -
                          -

                          - "base.sitesInvocation", "siteId" => $site_id), false, owa_coreAPI::getSetting('base','public_url'));?>" target="_blank"> - Login and generate a site tracker! - -

                          -
                          + --- a/owa/modules/base/templates/install_finish_embedded.tpl +++ /dev/null @@ -1,8 +1,1 @@ -
                          - -

                          Installation is complete. That's it, you made it!

                          - -

                          From here you can configure OWA's settings, or view your analytics.

                          - - -

                          + --- a/owa/modules/base/templates/install_schema_detected.tpl +++ /dev/null @@ -1,14 +1,1 @@ -
                          - -

                          Whoops. It looks like OWA is already installed!

                          - -

                          To re-install OWA, drop all owa_ tables run the installer again.

                          -
                          -

                          - "base.loginForm"), false, owa_coreAPI::getSetting('base','public_url'));?>"> - Login - -

                          - -
                          --- a/owa/modules/base/templates/install_start.tpl +++ /dev/null @@ -1,15 +1,1 @@ -
                          -

                          Welcome to the Installer!

                          - -

                          The next few screens will guide you through installing the Open Web Analytics framework. If at any time you - need help, please consult the config['wiki_url'];?>>OWA Wiki.

                          -
                          -

                          - Let's Get Started... -

                          - - - -
                          - --- a/owa/modules/base/templates/install_start_embedded.tpl +++ /dev/null @@ -1,32 +1,1 @@ -
                          -

                          - - It looks like the Open Web Analytics database still needs to be installed. -

                          - -
                          - - - - - - - - - - - - - - - -
                          - - -

                          -

                          If at any time you need help, please consult the config['wiki_url'];?>>OWA Wiki.

                          - - -
                          - --- a/owa/modules/base/templates/invocation.tpl +++ /dev/null @@ -1,38 +1,1 @@ -
                          - Javascript -
                          -

                          To track page views using Javascript, cut and paste this tracking tag into the HTML of your web pages. Learn more about how to use OWA's Javascript tracking API to track your web site and pages.

                          - - -
                          -
                          - -
                          - PHP -
                          - -

                          To track page views using PHP, cut and paste the following code to your PHP script/application. Learn more about how to use OWA's PHP Tracking API to track your web site and pages.

                          - - - -
                          -
                          - --- a/owa/modules/base/templates/item_document.php +++ /dev/null @@ -1,13 +1,1 @@ -
                          -
                          - -
                          -
                          -
                          get('page_title');?>
                          -
                          - get('url');?>   Visit Site » -
                          -
                          Page Type: get('page_type');?>
                          -
                          -
                          -
                          + --- a/owa/modules/base/templates/js_helper_tags.tpl +++ /dev/null @@ -1,10 +1,1 @@ - -getValue( 'first_hit_tag', $options ) ):?> - - - -getTemplatePath('base','js_log_tag.tpl')); ?> + --- a/owa/modules/base/templates/js_log_tag.tpl +++ /dev/null @@ -1,38 +1,1 @@ -getValue( 'no_script_wrapper', $options ) ): ?> - - - - + --- a/owa/modules/base/templates/js_logger.tpl +++ /dev/null @@ -1,6 +1,1 @@ -// js includes - -// invocation -includeTemplate('js_tracker_invocation.php');?> - --- a/owa/modules/base/templates/js_owa_params.tpl +++ /dev/null @@ -1,4 +1,1 @@ -var owa_params = new Object(); -owa_params["site_id"] = ""; - --- a/owa/modules/base/templates/js_report_templates.php +++ /dev/null @@ -1,59 +1,1 @@ - - - - - - - - - - - - - --- a/owa/modules/base/templates/json.php +++ /dev/null @@ -1,1 +1,1 @@ - + --- a/owa/modules/base/templates/kml_network_link_geolocation.tpl +++ /dev/null @@ -1,21 +1,1 @@ - - - - - Open Web Analytics Links - 1 - 1 - These are network links for OWA. - - - 1 - 0 - Visits for - 0 - 1 - - makeAbsoluteLink(array('do' => 'base.kmlVisitsGeolocation', 'rand' => rand()), true, '', true);?> - - - - + --- a/owa/modules/base/templates/kml_visits_geolocation.tpl +++ /dev/null @@ -1,20 +1,1 @@ - - - - - OWA: Visits to - Site visits for - - - - - / at : - ]]> - - ,,5000 - - #defaultStyle - - - - - + --- a/owa/modules/base/templates/login_form.tpl +++ /dev/null @@ -1,35 +1,1 @@ -
                          -
                          Login

                          - -
                          - -
                          - -
                          - -
                          User Name:
                          -

                          -
                          Password:
                          -

                          - - -
                          - -
                          -
                          - -
                          - -
                          - - -
                          - - Forgot your password? - -
                          - - - - --- a/owa/modules/base/templates/map_dom.tpl +++ /dev/null @@ -1,28 +1,1 @@ -config['google_maps_api_key'])):?> - - - - - -
                          - You must have a Google Maps API Key to use this feature. Google provides this key for free at this Google web site. Once you obtain a key enter in on the profile page for this tracked web site. -
                          - - - - --- a/owa/modules/base/templates/metricInfobox.php +++ /dev/null @@ -1,5 +1,1 @@ -
                          -

                          getlabel($count->aggregates[$metric_name]['name']);?>

                          -

                          aggregates[$metric_name]['value'];?>

                          -

                          displaySeriesAsSparkline($count->aggregates[$metric_name]['name'], $trend, $dom_id);?>

                          -
                          + --- a/owa/modules/base/templates/msgs.tpl +++ /dev/null @@ -1,7 +1,1 @@ - -
                          - - -
                          - --- a/owa/modules/base/templates/new_session_email.tpl +++ /dev/null @@ -1,9 +1,1 @@ - -

                          New Visit to from:

                          - Visitor:
                          - Email or Username: |
                          - Host:
                          - City/Country:
                          - Entry page: ()
                          - --- a/owa/modules/base/templates/new_session_email_plain_text.tpl +++ /dev/null @@ -1,8 +1,1 @@ -New Visit to from: -Visitor: -Email or Username: | -Host: -City/Country: -Entry page: () - --- a/owa/modules/base/templates/news.tpl +++ /dev/null @@ -1,9 +1,1 @@ - -
                          - $value): ?> -
                          - -

                          - -
                          - + --- a/owa/modules/base/templates/ofc.tpl +++ /dev/null @@ -1,2 +1,1 @@ -ofc($this->makeAbsoluteLink(array('do' => $widget, 'period' => $params['period'], 'site_id' => $params['site_id'], 'format' => 'graphData'), true), true, $dom_id, $this->config['action_url']); ?> --- a/owa/modules/base/templates/options.tpl +++ /dev/null @@ -1,32 +1,1 @@ -
                          - - - - - - - - - - - - - -
                          - out( $headline );?> -
                          -

                          Open Web Analytics has several configuration options that can be set using the controls below. Once changes are made click the save button to save the configuration to the database. To learn more about configuring OWA, visit the OWA Wiki

                          -
                          -
                          --- a/owa/modules/base/templates/options_db.tpl +++ /dev/null @@ -1,41 +1,1 @@ -

                          -
                          - -
                          - Database Options - -
                          - Asynchronous Event Handling Mode: - -
                          - -
                          - - Event Log File Directory:
                          - -
                          - -
                          - - Event Log File Name:
                          - -
                          - -
                          - -
                          - - - - -
                          - --- a/owa/modules/base/templates/options_errors.tpl +++ /dev/null @@ -1,24 +1,1 @@ -

                          -
                          - -
                          - Error Logging - -
                          - Logging Mode: - - -
                          - -
                          - - - -
                          --- a/owa/modules/base/templates/options_general.tpl +++ /dev/null @@ -1,242 +1,1 @@ -
                          - -
                          - -
                          - -
                          - Request Processing Options - -
                          -
                          Resolve Host Names
                          -
                          Controls the resolution of host names (e.g. verizon.com) from visitor's raw IP addresses.
                          -
                          - -
                          -
                          - -
                          -
                          Log Requests From Feed Readers
                          -
                          Controls the logging of page requests made by Feed Readers. This setting must be enabled in order to compile statistics about your site's feeds.
                          -
                          - -
                          -
                          - -
                          -
                          Log Requests From Known Robots
                          -
                          Controls the logging of page requests made by known robots and spiders. Turning this feature on will dramatically increase the number of requests that are processed and logged.
                          -
                          - -
                          -
                          - -
                          -
                          Log Requests From Named Users
                          -
                          Controls the logging of requests made by named users.
                          -
                          - -
                          -
                          - - - -
                          -
                          Fetch Referring Web Page Info
                          -
                          Controls whether OWA should crawl the web pages that refer visitors to your web site and extract descriptive meta-data that will be used in reporting.
                          -
                          - -
                          -
                          - -
                          -
                          Delay First Hit
                          -
                          This setting controls whether OWA should delay logging the first hit of new visitors untill a secondary http request for a special web bug is made. This tactic is used to foil spiders/robots that spoof their user agents in an attempt to appear like a normal web browser.
                          -
                          - -
                          -
                          - -
                          -
                          Log Domstreams
                          -
                          This setting controls whether OWA should should log Domstreams.
                          -
                          - -
                          -
                          - - -
                          -
                          P3P Compact Privacy Policy
                          -
                          This setting controls the P3P compact privacy policy that is returned to the browser when OWA sets cookies. Click here for more information on compact privacy policies and choosing the right one for your web site.
                          -
                          -
                          - -
                          -
                          URL Parameters
                          -
                          This setting controls the URL parameters that OWA should ignore when processing requests. This is useful for avoiding duplicate URLs due to the use of tracking or others state parameters in your URLs. Parameter names should be separated by comma.
                          -
                          -
                          - -
                          - -
                          - -
                          - Visitor Announcements - -
                          -
                          Announce New Visitors Via E-mail
                          -
                          Announces each new visitor to your web site via e-mail. If you have a lot of visitors then you probably want to keep this feature turned off.
                          -
                          - -
                          -
                          - -
                          -
                          Notice E-mail Address
                          -
                          This is the e-mail address that new visitor e-mails will be sent to.
                          -
                          - -
                          - -
                          - - -
                          - -
                          - - Geo-location - -
                          -
                          Perform Geo-location Lookup
                          -
                          Lookup the geographic location of visitors.
                          -
                          - -
                          -
                          - -
                          -
                          Google Maps API Key
                          -
                          Google maps API key is needed to produce Google maps of visitor geo-locations. You may obtain an API key from this Google web site for free.
                          -
                          -
                          - -
                          - -
                          - -
                          - Feed Tracking - -
                          -
                          Feed Link Tracking
                          -
                          Adds tracking parameters to RSS or Atom feeds links. This provides a way to track how many visitors come from your feeds.
                          -
                          - -
                          -
                          - -
                          - -
                          - -
                          - Event Queueing - -
                          -
                          Event Log File Directory
                          -
                          This is the file system path of the file that OWA will write queued events to when Event Queuing mode is turned on. (e.g. /path/to/owa/log/file.txt)
                          -
                          -
                          - -
                          - -
                          - - -
                          - Object Cache - -
                          -
                          Cache Control
                          -
                          Enables and disables object caching. This will improve performance under high load conditions. The object cache can be turned on/off via your config file. -
                          -
                          - Status: ONOFF
                          -
                          - -
                          -
                          Flush Cache
                          -
                          Flushes the object cache
                          - -
                          - - -
                          - -
                          - -
                          - - e-commerce - -
                          -
                          e-commerce Reporting
                          -
                          Adds e-commerce metrics/statistics to reports.
                          -
                          - -
                          -
                          -
                          - -
                          - - createNonceFormField('base.optionsUpdate');?> - - - - - -
                          -
                          + --- a/owa/modules/base/templates/options_goal_entry.php +++ /dev/null @@ -1,259 +1,1 @@ -
                          - -
                          - -

                          Goal out($goal_number);?> Settings

                          - -
                          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
                          Name: - -
                          Group: -

                          - The group that you want to assign this goal to. Goal groups are presented as a tab view on most reports. -

                          -
                          - - -

                          Edit the group label: - - -
                          Status: - - - -
                          - Value: -

                          - The value associated with achieving this goal. -

                          -
                          - - Optional -
                          - Type: -

                          - The type of goal. -

                          -
                          - > URL Destination
                          - - > Pages / Visit
                          - - > Visit Duration
                          - - -
                          - - -
                          - -

                          Goal Details

                          - - - - - - - - - -
                          Match Type: - - -
                          - Goal URL: -

                          - Example: /register.html -

                          -
                          - -
                          - -

                          Funnel

                          - - - - - - - - - -
                          Step URLNameIs Required?
                          -
                          - Add New Funnel Step -
                          - - -
                          -

                          Goal Details

                          - Not implemented yet. -
                          - - -
                          -

                          Goal Details

                          - Not implemented yet. -
                          - - - - - createNonceFormField('base.optionsGoalEdit');?> -
                          - -
                          - -
                          - - - - - - + --- a/owa/modules/base/templates/options_goals.tpl +++ /dev/null @@ -1,44 +1,1 @@ -
                          - -
                          - - - - - - - - - - - - - - - $goal): ?> - - - - - - - - - - - - - -
                          Goal NumberGoal NameGoal GroupGoal TypeStatus
                          Goal out($k);?> Edit

                          out($goal['goal_name']);?> - out($goal_groups[$goal['goal_group']] ); - } else { - $this->out( $goal['goal_group'] ); - } - } - ?> - out($goal['goal_type']);?>out($goal['goal_status']);?>
                          - -
                          + --- a/owa/modules/base/templates/options_modules.tpl +++ /dev/null @@ -1,49 +1,1 @@ -
                          -
                          - - - - - - - - - - - - - - - $v): ?> - - - - - - - - - - - -
                          ModuleCurrent SchemaRequired SchemaSchema Up to Date?
                          -
                          - -
                          - - - Deactivate - - Activate - - - -
                          - - - -There are no additional modules installed. - - - -
                          + --- a/owa/modules/base/templates/options_reporting.tpl +++ /dev/null @@ -1,18 +1,1 @@ -

                          -
                          - -
                          - Reporting - -
                          - - Reporting Wrapper:
                          - -
                          - -
                          - - - -
                          --- a/owa/modules/base/templates/options_request_processing.tpl +++ /dev/null @@ -1,99 +1,1 @@ -

                          -
                          - -
                          - Request Processing Options - -
                          - Resolve Host Names: - -
                          - -
                          - Log Requests from Feed Readers: - -
                          - -
                          - Log Requests from Known Robots: - -
                          - -
                          - Announce New Visitors via E-mail: - -
                          - -
                          - - Notice Email Address:
                          - -
                          - -
                          - -
                          - Geo-location Options - -
                          - - Perform Geo-location Lookup: - -
                          -
                          - Geolocation Service: - - -
                          - -
                          - - - -
                          --- a/owa/modules/base/templates/pixel.tpl +++ /dev/null @@ -1,1 +1,1 @@ - + --- a/owa/modules/base/templates/report.tpl +++ /dev/null @@ -1,43 +1,1 @@ - -
                          - - - - - - - -
                          -
                          -
                          - makeNavigationMenu($top_level_report_nav);?> -
                          -
                          -
                          - -
                          - -
                          - -
                          -
                          -
                          get('titleSuffix');?>
                          - -
                          - - -
                          -
                          -
                          - - --- a/owa/modules/base/templates/report_actionDetail.php +++ /dev/null @@ -1,87 +1,1 @@ -
                          Action Metrics
                          -
                          - - - - - - -
                          - aggregates as $row):?> -
                          -

                          -

                          -
                          - -
                          -
                          - -
                          Analysis Workbook
                          -
                          - - - -
                          - - -
                          - -
                          - -
                          - -
                          - -
                          - -
                          - - - --- a/owa/modules/base/templates/report_actionTracking.php +++ /dev/null @@ -1,51 +1,1 @@ - - - - - - - - - -
                          -
                          -
                          Actions by Name
                          -
                          - -
                          -
                          -
                          -
                          Actions By Group
                          -
                          - -
                          -
                          - --- a/owa/modules/base/templates/report_anchortext.tpl +++ /dev/null @@ -1,64 +1,1 @@ -
                          -
                          -

                          -
                          -
                          - - -
                          - -
                          -
                          Top Inbound Link Text
                          -
                          - - - -
                          - - --- a/owa/modules/base/templates/report_commerce.php +++ /dev/null @@ -1,112 +1,1 @@ -
                          -
                          -
                          -
                          -
                          - -
                          -
                          - - - - - - - -
                          - -
                          - - -
                          -
                          Products
                          - -
                          - -
                          - -
                          - -
                          -
                          Traffic Sources
                          -
                          - -
                          - -
                          - - - - - - - --- a/owa/modules/base/templates/report_content.tpl +++ /dev/null @@ -1,139 +1,1 @@ -
                          -
                          -
                          -
                          -
                          - -
                          -
                          - - - - - - - -
                          - -
                          - - -
                          -
                          Top Pages
                          - -
                          - -
                          - -
                          -
                          Content Reports
                          -
                          -
                            -
                          • - Domstream Recordings - See user mouse movement and keypress recordings. -
                          • -
                          • - Actions - See which actions your user performed. -
                          • -
                          • - Entry & Exits - See which web pages user entered and exited on. -
                          • -
                          • - Feeds - See trends for feed subscribers and usage. -
                          • -
                          -
                          - - -
                          -
                          Top Page Types
                          -
                          - -
                          - -
                          - - - - - - - --- a/owa/modules/base/templates/report_dashboard.tpl +++ /dev/null @@ -1,194 +1,1 @@ -
                          -
                          Site Metrics
                          - -

                          -
                          - -
                          -
                          - - - - - -
                          - -
                          -
                          Top Content
                          - -
                          - -
                          - -
                          -
                          Visitor Types
                          -
                          -
                          - -
                          -
                          Latest Visits
                          - -
                          - -
                          - - getDataRows()):?> -
                          -
                          Actions
                          - -
                          - - - - - - -
                          - getDataRows() as $k => $row):?> -
                          -

                          -

                          -
                          - -
                          - - - -
                          -
                          - - -
                          -
                          Traffic Sources
                          -
                          -
                          - -
                          -
                          Top Referrers
                          - -
                          - -
                          - -
                          -
                          OWA News
                          - getWidget('base.widgetOwaNews','',false);?> -
                          -
                          - - - - + --- a/owa/modules/base/templates/report_dimensionDetail.php +++ /dev/null @@ -1,64 +1,1 @@ - -
                          - renderDimension($dimension_template, $dimension_properties);?> -
                          - -
                          - -
                          -
                          -
                          - - $tab): ?> -
                          - -
                          - -
                          - -
                          - get('hideGrid')):?> -
                          - - -
                          - -
                          -
                          - - - - - --- a/owa/modules/base/templates/report_dimensionDetailNoTabs.php +++ /dev/null @@ -1,111 +1,1 @@ - -
                          - renderDimension($dimension_template, $dimension_properties);?> -
                          - -
                          - -
                          -
                          -
                          - - -
                          - - - -
                          - - -
                          - -get( 'dimensions' ) ):?> -
                          - -
                          - - - -
                          - - - --- a/owa/modules/base/templates/report_dimensionalTrend.php +++ /dev/null @@ -1,109 +1,1 @@ -
                          - -
                          -
                          -
                          - - $tab): ?> -
                          - -
                          - get('pie' ) ): ?> -
                          - -
                          - get('hideGrid')):?> -
                          - - -
                          - -
                          -
                          - - - --- a/owa/modules/base/templates/report_document.tpl +++ /dev/null @@ -1,76 +1,1 @@ - -
                          - renderDimension($dimension_template, $dimension_properties);?> -
                          - - - - -
                          - - - - - - -
                          -
                          -
                          Next Pages Viewed
                          -
                          -
                          -
                          -
                          Prior Pages Viewed
                          -
                          -
                          -
                          -
                          Related Reports:
                          - -

                          - Heatmap Overlay (Firefox 3.5+ required) -

                          - -

                          - Domstreams - mouse movement recordings. -

                          - -

                          - Dom Clicks - analysis of dom clicks. -

                          - - -
                          -
                          - - - - - - + --- a/owa/modules/base/templates/report_document_detail.tpl +++ /dev/null @@ -1,15 +1,1 @@ - - - - - - - - - - - - - -
                          Title
                          URL:
                          Page Type:
                          --- a/owa/modules/base/templates/report_dom_clicks.php +++ /dev/null @@ -1,90 +1,1 @@ - - -
                          - - - - - - - -
                          - -
                          -
                          Dom IDs
                          -
                          - -
                          - -
                          -
                          Name Attributes
                          -
                          - -
                          - -
                          - -
                          -
                          HTML Tags
                          -
                          - -
                          - -
                          -
                          Dom Classes
                          -
                          - -
                          - -
                          -
                          - --- a/owa/modules/base/templates/report_domstreams.tpl +++ /dev/null @@ -1,52 +1,1 @@ - - - - - - - - - - - - - - - rows as $ds): ?> - - - - - - - - - - -
                          getLabel('timestamp');?>getLabel('page_url');?>getLabel('duration');?>
                          - - - - truncate($ds['page_url'], 150);?> - - - - - Play -
                          - -makePaginationFromResultSet($domstreams, array('do' => 'base.reportDomstreams'), true);?> - - - There are no refering web pages for this time period. - + --- a/owa/modules/base/templates/report_ecommerce.php +++ /dev/null @@ -1,107 +1,1 @@ -
                          - -
                          - - -
                          -
                          -
                          - - -
                          - - - - - - - -
                          -
                          -
                          Product Performance
                          -
                          - -
                          - -
                          -
                          Sales Sources
                          -
                          - -
                          -
                          -
                          -
                          Related Reports
                          -
                          - -
                          -
                          -
                          - - - --- a/owa/modules/base/templates/report_feeds.tpl +++ /dev/null @@ -1,1 +1,1 @@ - + --- a/owa/modules/base/templates/report_geolocation.tpl +++ /dev/null @@ -1,18 +1,1 @@ - - - -
                          -

                          Download KML

                          - - -
                          - -makePaginationFromResultSet($latest_visits, array('do' => 'base.reportVisitsGeolocation'));?> - - - --- a/owa/modules/base/templates/report_goal_funnel.php +++ /dev/null @@ -1,148 +1,1 @@ -
                          - - Choose a goal: -
                          - -get('funnel') ):?> - - - - - - - $step):?> - - - - - - - - - - - - - -
                          Prior Page Viewed

                          out($goal_conversion_rate);?> conversion rate

                          Next Page Viewed
                          -
                          - -
                          -
                          -
                          Step out($step['step_number']);?>: out($step['name']);?>
                          -
                          out($step['visitors']);?> visitors
                          -
                          out($step['url']);?>
                          -
                          - -
                          -
                          -
                          -
                          - out($funnel[$k+1]['visitor_percentage']);?>
                          - Proceeded to step: out($funnel[$k+1]['name']); ?> -
                          - - - -No Funnel has been configured for this goal. Add a funnel - - - --- a/owa/modules/base/templates/report_goals.php +++ /dev/null @@ -1,74 +1,1 @@ -
                          - -
                          - - -
                          -
                          -
                          - - -
                          - - - - - - - -
                          -
                          -
                          Goal Performance
                          -
                          - - - -
                          - -
                          -
                          -
                          Related Reports
                          -
                          - -
                          -
                          -
                          - - - --- a/owa/modules/base/templates/report_header.tpl +++ /dev/null @@ -1,8 +1,1 @@ - - - - - - -
                          - + --- a/owa/modules/base/templates/report_latest_visits.tpl +++ /dev/null @@ -1,12 +1,1 @@ - - - resultsRows as $row): ?> - - - - -
                          - makePaginationFromResultSet($visits);?> - - There were no visits during this time period. - + --- a/owa/modules/base/templates/report_nav.tpl +++ /dev/null @@ -1,38 +1,1 @@ -
                          - -
                            - $l): ?> -
                          • -
                            - -
                            -
                            -
                            - -
                            - -
                            - - - -
                            -
                              - -
                            • -
                              - -
                              - -
                            • - -
                            -
                            - -
                            -
                          • - -
                          - -
                          - --- a/owa/modules/base/templates/report_period_filters.tpl +++ /dev/null @@ -1,363 +1,1 @@ - - - - - - - - - - - - - - - - - -
                          SiteReporting Period
                          -
                          - -
                          -
                          - - - - - - - - - - - - -
                          - CHECKED> - Time Period:
                          - -
                          -
                          - CHECKED> - Date Period: -
                          - -
                          -
                          - -
                          - -
                          - - - - - - - - - - - - - - -
                          MonthDayYear
                          - - - - - - -
                          -
                          - -
                          - - - - - - - - - - - - -
                          MonthYear
                          - - - -
                          -
                          - -
                          - - - - - - - - - - -
                          Year
                          - -
                          -
                          - -
                          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
                          Start MonthStart DayStart YearEnd MonthEnd DayEnd Year
                          - - - - - - - to - - - - - - -
                          -
                          - -
                          - - - --- a/owa/modules/base/templates/report_top_visitors.tpl +++ /dev/null @@ -1,36 +1,1 @@ - - - - - - - - - - - - - - - - - -
                          VisitorVisits
                          - - - - - - - - - - - - - -
                          - - -There are no visitors for this time period. - + --- a/owa/modules/base/templates/report_traffic.tpl +++ /dev/null @@ -1,208 +1,1 @@ -
                          -
                          -
                          -
                          -
                          - - - - - - - - -
                          -
                          -
                          -
                          -
                          -
                          - - - - - - - -
                          - -
                          - -
                          -
                          Top Sources
                          - -
                          - -
                          - -
                          Related Reports
                          -
                          -
                            -
                          • - Search Engines - See which search engines your visitors are coming from. -
                          • -
                          • - Keywords - See what keywords your visitor are using to find your web site. -
                          • -
                          • - Referring Web Sites - See which web sites are linking to your web site. -
                          • -
                          • - Inbound Link Text - See what words Referring Web Sites use to describe your web site. -
                          • -
                          -
                          -
                          - -
                          -
                          Top Keywords
                          - -
                          - -
                          - -
                          - -
                          -
                          Top Referrals
                          -
                          - -
                          -
                          - - - - - - - - - + --- a/owa/modules/base/templates/report_transaction_detail.php +++ /dev/null @@ -1,85 +1,1 @@ - - - - - - - array( - 'label' => 'Order Id' - ), - 'order_source' => array( - 'label' => 'Order Source' - ), - 'gateway' => array( - 'label' => 'Transaction Processing Gateway' - ), - 'total_revenue' => array( - 'label' => 'Total Revenue', - 'data_type' => 'currency' - ), - 'tax_revenue' => array( - 'label' => 'Tax Revenue' - ), - 'shipping_revenue' => array( - 'label' => 'Shipping Revenue' - ), - - ); - ?> - - - - - - - - - - - - - - - - - - - - - - - - - - -
                          Order Idout( $trans_detail['order_id'] );?>
                          Order Sourceout( $trans_detail['order_source'] );?>
                          Processing Gatewayout( $trans_detail['gateway'] );?>
                          Total Revenueout( $this->formatCurrency( $trans_detail['total_revenue'] ) );?>
                          Tax Revenueout( $this->formatCurrency( $trans_detail['tax_revenue'] ) );?>
                          Shipping Revenueout( $this->formatCurrency( $trans_detail['shipping_revenue'] ) );?>
                          - -

                          Transaction Line Items

                          - - - - - - - - - - - - - - - - - - - -
                          Product NameSKUUnit PriceQuantityItem Revenue
                          out( $li['product_name'] ); ?> (out( $li['category'] ); ?>)out( $li['sku'] ); ?>out( $li['quantity'] ); ?>out( $this->formatCurrency( $li['unit_price'] ) ); ?>out( $this->formatCurrency( $li['item_revenue'] ) ); ?>
                          - -None. - - - --- a/owa/modules/base/templates/report_transactions.php +++ /dev/null @@ -1,72 +1,1 @@ -
                          -
                          -
                          -
                          -
                          - -
                          -
                          - - - - - - - -
                          - -
                          -
                          Transaction Roster
                          -
                          - -
                          - -
                          - - - - - - - --- a/owa/modules/base/templates/report_trend_section.php +++ /dev/null @@ -1,31 +1,1 @@ -
                          - -
                          - -
                          -
                          -
                          - - -
                          --- a/owa/modules/base/templates/report_visit.tpl +++ /dev/null @@ -1,34 +1,1 @@ -
                          Visit Summary
                          -
                          - -
                          - -
                          Visit Clickstream
                          -
                          - - -
                          - - - - - - resultsRows as $s): ?> - - - - -
                          TimePage
                          - - - - - -
                          :: - ()
                          - -
                          -
                          -
                          -
                          - + --- a/owa/modules/base/templates/report_visit_summary.tpl +++ /dev/null @@ -1,88 +1,1 @@ -
                          - - - - - - - -
                          - / @ at : | - , choose_browser_icon($visit['ua_browser_type']);?>
                          - - - - - - - - - - - - - - - - - - - - - - - - - -
                          - - - New Visitor - - Repeat Visitor - - - - - - - - - - (Last visit was - - day ago. - - days ago. - - ) - - -
                          - Entry Page - - ()
                          -
                          - - Refering URL - - truncate($visit['referer_page_title'], 80, '...');?>
                          truncate($visit['referer_url'], 80, '...');?>truncate($visit['referer_url'], 50, '...');?> -
                          - -
                          - -
                          - -
                          - -
                          - Pages -
                          -
                          - -
                          -
                          -
                          - - -
                          - -
                          + --- a/owa/modules/base/templates/report_visit_summary_balloon.tpl +++ /dev/null @@ -1,58 +1,1 @@ -

                          -

                          - - -New Visitor - -Returning Visitor (Last visit was - -day ago. - -days ago. - -) - -choose_browser_icon($visit['ua_browser_type']);?>

                          - - - / at : -

                          - - -, - -

                          - - - - - - - - - - - - - - - -
                          - Visitor - - - - -
                          - Entry Page - - escapeForXml($visit['document_page_title']);?> ()
                          - -
                          - Refering URL - - escapeForXml($this->truncate($visit['referer_page_title'], 80, '...'));?> truncate($visit['referer_url'], 35, '...');?>truncate($visit['referer_url'], 50, '...');?> -
                          - -

                          View Visit Details

                          - -
                          + --- a/owa/modules/base/templates/report_visitor.tpl +++ /dev/null @@ -1,29 +1,1 @@ - - -
                          - -
                          - -
                          - - --- a/owa/modules/base/templates/report_visitors.tpl +++ /dev/null @@ -1,103 +1,1 @@ -
                          -
                          -
                          - - -
                          -
                          - -
                          - - - - - - - -
                          -
                          -
                          Latest Visits
                          - - makePaginationFromResultSet($visits, array('do' => 'base.reportVisitors'), true);?> -
                          -
                          -
                          -
                          Visitor Reports
                          -

                          - Visitor Loyalty - See how long ago your visitors first came to your web site. -

                          -

                          - Geo-location - See which parts of the world your visitors are coming from. -

                          -

                          - Domains - See which Networks or Internet hosts your visitors are coming from. -

                          -
                          - - -
                          -
                          Browser Types
                          -
                          - -
                          - -
                          -
                          Most Frequent Visitors
                          -
                          - -
                          - -
                          - - - - + --- a/owa/modules/base/templates/report_visitors_roster.tpl +++ /dev/null @@ -1,27 +1,1 @@ -

                          :

                          - - - - - - - - - - - - - -
                          - - - -
                          - There are no visitors during this time period. -
                          + --- a/owa/modules/base/templates/report_visits.php +++ /dev/null @@ -1,5 +1,1 @@ -
                          -
                          Latest Visits
                          - - makePagination($pagination, array('do' => $params['do']));?> -
                          + --- a/owa/modules/base/templates/resultSetHtml.php +++ /dev/null @@ -1,35 +1,1 @@ - - - - -resultsRows):?> -resultsRows[0] as $k => $v):?> - - - - - - - - - - - -resultsRows):?> -resultsRows as $row):?> - - $v):?> - - - - - - -
                          - - - - - -
                          --- a/owa/modules/base/templates/resultSetXml.php +++ /dev/null @@ -1,31 +1,1 @@ -");?> - - -timePeriod as $k => $v):?> - %s\n", $k, $this->escapeForXml($v), $k);?> - - - -aggregates as $item):?> - \n", $item['result_type'], $this->escapeForXml($item['name']), $this->escapeForXml($item['value']), $this->escapeForXml($item['label']));?> - - - - resultsTotal;?> - - resultsReturned;?> - - resultsPerPage;?> - - -resultsRows as $row):?> - - - \n", $item['result_type'], $this->escapeForXml($item['name']), $this->escapeForXml($item['value']), $this->escapeForXml($item['label']));?> - - - - - - --- a/owa/modules/base/templates/row_topPages.tpl +++ /dev/null @@ -1,2 +1,1 @@ -truncate($row['page_title'], 100, '...');?> () - + --- a/owa/modules/base/templates/row_topReferers.tpl +++ /dev/null @@ -1,3 +1,1 @@ -truncate($row['page_title'], 70, '...');?>truncate($row['url'], 70, '...');?> - --- a/owa/modules/base/templates/row_visitSummary.tpl +++ /dev/null @@ -1,110 +1,1 @@ - -
                          - -

                          »

                          - - - - - - - - -
                          - - - -
                          - - - - - - - - - New Visitor - -
                          - - , - -
                          -
                          - choose_browser_icon($row['ua_browser_type']);?> - - - - - - -
                          - Pages - -
                          - - - -
                          - Length -
                          - - - - - - - - - - - - - - - - - - - - - - - - - - - -
                          - Entry Page - - - - - - - () - - -
                          - truncate($row['document_url'],80,'...');?> -
                          - - Refering URL - - - - truncate($row['referer_page_title'], 80, '...');?>
                          truncate($row['referer_url'], 80, '...');?>truncate($row['referer_url'], 80, '...');?> -
                          - -
                          - -
                          - + --- a/owa/modules/base/templates/sites.tpl +++ /dev/null @@ -1,45 +1,1 @@ -
                          -
                          -

                          Below is the list of Web Sites that can be tracked. A site must appear in this list -if it is to be tracked/reported separately.

                          - -
                          - Tracked Web Sites (Add a Site) - - - - - - - - - - - - $value):?> - - - - - - - - -
                          Name & DescriptionOptions
                          - - out( $value['name'] );?> -
                          - - out( $value['description'] );?>
                          - - out( $value['domain'] );?>
                          -
                          - Edit | - Delete | - Get Tracking Code | - Goals -
                          - -
                          -
                          --- a/owa/modules/base/templates/sites_addoredit.tpl +++ /dev/null @@ -1,100 +1,1 @@ -
                          -
                          -
                          - - Site Profile - -
                          - - - - - - - - - - - - - - - - - - - - - - - - - - - -
                          Site ID:out( $site['site_id'] );?>
                          Domain:out( $site['domain'] );?> - - - -
                          - out( $validation_errors['domain'] );?> -
                          Site Name:
                          Description: - -
                          -
                          - createNonceFormField($action);?> - - - -
                          - -
                          - - -
                          - -
                          - Site Settings - -
                          -
                          P3P Compact Privacy Policy
                          -
                          This setting controls the P3P compact privacy policy that is returned to the browser when OWA sets cookies. Click here for more information on compact privacy policies and choosing the right one for your web site.
                          -
                          -
                          - -
                          -
                          URL Parameters
                          -
                          This setting controls the URL parameters that OWA should ignore when processing requests. This is useful for avoiding duplicate URLs due to the use of tracking or others state parameters in your URLs. Parameter names should be separated by comma.
                          -
                          -
                          - -
                          -
                          Default Page
                          -
                          This is the page that your web server defaults to when there is no page specified in your URL (e.g. index.html). Use this setting to combine page views for www.domain.com and www.domain.com/index.html.
                          -
                          -
                          - -
                          -
                          e-commerce Reporting
                          -
                          Adds e-commerce metrics/statistics to reports.
                          -
                          - -
                          -
                          - -
                          - - createNonceFormField('base.sitesEditSettings');?> - - - - -
                          -
                          -
                          + --- a/owa/modules/base/templates/sites_invocation.tpl +++ /dev/null @@ -1,9 +1,1 @@ -
                          Tracking Tag
                          -
                          -

                          The Domain for this web site is: get('domain');?>

                          -

                          The Site ID for this web site is:

                          - - -
                          - --- a/owa/modules/base/templates/sparkline.tpl +++ /dev/null @@ -1,3 +1,1 @@ - - --- a/owa/modules/base/templates/sparklineJs.tpl +++ /dev/null @@ -1,4 +1,1 @@ - - + --- a/owa/modules/base/templates/sparkline_dom.tpl +++ /dev/null @@ -1,11 +1,1 @@ - - - --- a/owa/modules/base/templates/updates.tpl +++ /dev/null @@ -1,36 +1,1 @@ -
                          -
                          -

                          Open Web Analytics Updater

                          -
                          -
                          -
                          - -

                          Some Modules need to create or update their database tables.

                          - -

                          Here is the list of modules that have updates that needs to be applied:

                          - -

                          -

                            - - $module): ?> - -
                          • - - - -
                          -

                          -

                          It is recommended that you backup your database before applying updates.

                          -
                          - -

                          - Apply updates -

                          - -
                          -
                          - - - - --- a/owa/modules/base/templates/users.tpl +++ /dev/null @@ -1,45 +1,1 @@ -
                          -
                          -
                          - - - Users (Add New User) - - - - - - - - - - - - - - - - - - $value):?> - - - - - - - - - - - - -
                          User IDReal NameEmail AddressRoleAPI KeyLast UpdatedOptions
                          Edit - - | Delete
                          - - - There are no User Accounts. - -
                          -
                          + --- a/owa/modules/base/templates/users_addoredit.tpl +++ /dev/null @@ -1,64 +1,1 @@ -
                          -
                          -
                          - User Profile - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
                          User Name - - - - - -
                          Real Name
                          Role - -
                          E-mail Address
                          - - createNonceFormField($action);?> - - -
                          - -
                          - -

                          -

                          - - Change Password - -
                          - -
                          --- a/owa/modules/base/templates/users_change_password.tpl +++ /dev/null @@ -1,36 +1,1 @@ -
                          -
                          Password Setup

                          -
                          Enter your new password below.

                          -
                          - - - - - - - -
                          - -
                          -
                          -
                          New Password
                          -

                          -
                          Re-type your Password
                          -

                          - - - -
                          -
                          -
                          - - - - - - - -
                          -
                          - --- a/owa/modules/base/templates/users_new_account_email.tpl +++ /dev/null @@ -1,11 +1,1 @@ -An Open Web Analytics account has been created for you. -Your User Name is: - -To login you need to set your password by clicking on the link below. - -makeAbsoluteLink(array('do' => 'base.usersPasswordEntry', 'k' => $key));?> - -Once your password has been setup you can login to OWA at the following URL: - -makeAbsoluteLink(array('do' => 'base.reportDashboard'));?> --- a/owa/modules/base/templates/users_password_reset_request.tpl +++ /dev/null @@ -1,51 +1,1 @@ -
                          -
                          Password Reset

                          -
                          Enter the e-mail address associated with your account.

                          -
                          - - - - - - - -
                          - -
                          -
                          -
                          E-mail address:
                          - - - - - - - -

                          - - - - - - -
                          -
                          - -
                          - - - - - - - -
                          - -
                          - - - -
                          - - --- a/owa/modules/base/templates/users_reset_password_email.tpl +++ /dev/null @@ -1,7 +1,1 @@ -Someone, hopefully you, has requested a reset of your Open Web Analytics account password. -If this message was generated in error, please disregard. If not, please click on the link below -to complete the process. - -makeAbsoluteLink(array('do' => 'base.usersPasswordEntry', 'k' => $key)); - --- a/owa/modules/base/templates/users_set_password_email.tpl +++ /dev/null @@ -1,2 +1,1 @@ -Your Open Web Analytics password was successfully changed on from IP address . --- a/owa/modules/base/templates/widget.tpl +++ /dev/null @@ -1,42 +1,1 @@ - -
                          - -
                          - - - - - -
                          - - -
                          - Minimize - | - Close -
                          -
                          - -
                          -
                          - " border="0" align="ABSMIDDLE"> Loading... -
                          - -
                          - -
                          - -
                          - 1): ?> - Views: - $v): ?> - / - - -
                          - -
                          - -
                          - --- a/owa/modules/base/templates/widget_dom.tpl +++ /dev/null @@ -1,13 +1,1 @@ - --- a/owa/modules/base/templates/widget_inpage.tpl +++ /dev/null @@ -1,28 +1,1 @@ - -
                          - - -
                          - 1): ?> - Views: - $v): ?> - / - - -
                          - - -
                          -
                          - " border="0" align="ABSMIDDLE"> Loading... -
                          - -
                          - -
                          - -
                          - -
                          - --- a/owa/modules/base/templates/wrapper_blank.tpl +++ /dev/null @@ -1,1 +1,1 @@ - + --- a/owa/modules/base/templates/wrapper_blank_whead.tpl +++ /dev/null @@ -1,2 +1,1 @@ -setTemplate('head.tpl'));?> - + --- a/owa/modules/base/templates/wrapper_default.tpl +++ /dev/null @@ -1,28 +1,1 @@ - - - - - - Open Web Analytics - <?php echo $page_title;?> - - getTemplatePath('base','head.tpl'));?> - getTemplatePath('base','css.tpl'));?> - - - - - -
                          - getTemplatePath('base', 'header.tpl'));?> - - getTemplatePath('base', 'msgs.tpl'));?> - - - - getTemplatePath('base', 'footer.php'));?> -
                          - - - + --- a/owa/modules/base/templates/wrapper_email.tpl +++ /dev/null @@ -1,4 +1,1 @@ --- Open Web Analytics ------------------------------- - - --- a/owa/modules/base/templates/wrapper_gallery2.tpl +++ /dev/null @@ -1,10 +1,1 @@ -setTemplate('css.tpl'));?> - -setTemplate('header.tpl'));?> - -setTemplate('msgs.tpl'));?> - -setTemplate('head.tpl'));?> - - --- a/owa/modules/base/templates/wrapper_mediawiki.tpl +++ /dev/null @@ -1,21 +1,1 @@ - - - - - - Open Web Analytics - <?php echo $page_title;?> - setTemplate('css.tpl'));?> - - setTemplate('head.tpl'));?> - - - - - - setTemplate('msgs.tpl'));?> - - - - getTemplatePath('base', 'footer.php'));?> - - + --- a/owa/modules/base/templates/wrapper_public.tpl +++ /dev/null @@ -1,36 +1,1 @@ - - - - - - <?php echo $page_title;?> - Open Web Analytics - - - - - setTemplate('css.tpl'));?> - -
                          - -
                          - setTemplate('msgs.tpl'));?> -
                          - - - -



                          -
                          - Web Analytics powered by Open Web Analytics - v: -
                          - -
                          - - + --- a/owa/modules/base/templates/wrapper_subview.tpl +++ /dev/null @@ -1,1 +1,1 @@ - + --- a/owa/modules/base/templates/wrapper_wordpress.tpl +++ /dev/null @@ -1,15 +1,1 @@ -setTemplate('css.tpl'));?> - -
                          - -setTemplate('header.tpl'));?> - -setTemplate('msgs.tpl'));?> - -setTemplate('head.tpl'));?> - - - -getTemplatePath('base', 'footer.php'));?> - -
                          + --- a/owa/modules/base/templates/xml_visits_geolocation.tpl +++ /dev/null @@ -1,21 +1,1 @@ - - - OWA: Visits to - Site visits for - - - - - - / at : - ]]> - - ,,5000 - - #defaultStyle - - - - - - - + --- a/owa/modules/base/updates.php +++ /dev/null @@ -1,65 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_updatesView extends owa_view { - - function render($data) { - - //switch wrapper if OWA is not embedded - // needed becasue this view might be rendered before anything else. - if ($this->config['is_embedded'] != true) { - $this->t->set_template('wrapper_public.tpl'); - } - - $this->body->set_template('updates.tpl');// This is the inner template - $this->body->set('headline', 'Your database needs to be upgraded...'); - $this->body->set('modules', $data['modules']); - } -} - -class owa_updatesController extends owa_controller { - - function action() { - - $data = array(); - - $data['view_method'] = 'delegate'; - $data['view'] = 'base.updates'; - $data['modules'] = owa_coreAPI::getModulesNeedingUpdates(); - - return $data; - } -} - -?> --- a/owa/modules/base/updates/003.php +++ /dev/null @@ -1,67 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - - -class owa_base_003_update extends owa_update { - - function up() { - - $db = owa_coreAPI::dbSingleton(); - $s = &owa_coreAPI::serviceSingleton(); - - $entities = $s->modules[$this->module_name]->getEntities(); - - foreach ($entities as $k => $v) { - - $ret = $db->alterTableType($this->c->get('base', 'ns').$v, 'InnoDB'); - - if ($ret == true): - $this->e->notice(sprintf('Changed Table %s to InnoDB', $v)); - else: - $this->e->notice(sprintf('Change to Table %s failed', $v)); - return false; - endif; - - } - - - return true; - - - } - - function down() { - - return false; - } - -} - -?> --- a/owa/modules/base/updates/004.php +++ /dev/null @@ -1,101 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.2.1 - */ - - -class owa_base_004_update extends owa_update { - - function up() { - - // create admin user for embedded installs. - // embedded installs did not create admin users until this release (v1.2.1) - $cu = owa_coreAPI::getCurrentUser(); - $this->createAdminUser($cu->getUserData('email_address')); - - $ds = owa_coreAPI::entityFactory('base.domstream'); - $ret = $ds->createTable(); - - if ($ret == true) { - $this->e->notice('Domstream entity table created'); - return true; - } else { - $this->e->notice('Domstream entity table creation failed'); - return false; - } - } - - function down() { - - return false; - } - - function createAdminUser($email_address) { - - //create user entity - $u = owa_coreAPI::entityFactory('base.user'); - // check to see if an admin user already exists - $u->getByColumn('role', 'admin'); - $id_check = $u->get('id'); - // if not then proceed - if (empty($id_check)) { - - //Check to see if user name already exists - $u->getByColumn('user_id', 'admin'); - - $id = $u->get('id'); - - // Set user object Params - if (empty($id)) { - - $password = $u->generateRandomPassword(); - $u->set('user_id', 'admin'); - $u->set('role', 'admin'); - $u->set('real_name', ''); - $u->set('email_address', $email_address); - $u->set('password', owa_lib::encryptPassword($password)); - $u->set('creation_date', time()); - $u->set('last_update_date', time()); - $ret = $u->create(); - - owa_coreAPI::debug("Admin user created successfully."); - - return $password; - - } else { - owa_coreAPI::debug($this->getMsg(3306)); - } - } else { - owa_coreAPI::debug("Admin user already exists."); - } - - } - -} - -?> --- a/owa/modules/base/updates/005.php +++ /dev/null @@ -1,380 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.3 - */ - - -class owa_base_005_update extends owa_update { - - var $schema_version = 5; - var $is_cli_mode_required = true; - - function up() { - - $tables = array('owa_session', 'owa_request', 'owa_click', 'owa_feed_request'); - - foreach ($tables as $table) { - - // add yyyymmdd column to owa_session - $db = owa_coreAPI::dbSingleton(); - $db->addColumn($table, 'yyyymmdd', 'INT'); - $db->addIndex($table, 'yyyymmdd'); - $ret = $db->query("update $table set yyyymmdd = - concat(cast(year as CHAR), lpad(CAST(month AS CHAR), 2, '0'), lpad(CAST(day AS CHAR), 2, '0')) "); - - if ($ret == true) { - $this->e->notice('Added yyyymmdd column to '.$table); - } else { - $this->e->notice('Failed to add yyyymmdd column to '.$table); - return false; - } - } - - $visitor = owa_coreAPI::entityFactory('base.visitor'); - - $ret = $visitor->addColumn('num_prior_sessions'); - - if (!$ret) { - $this->e->notice('Failed to add num_prior_sessions column to owa_visitor'); - return false; - } - - $ret = $visitor->addColumn('first_session_yyyymmdd'); - - if (!$ret) { - $this->e->notice('Failed to add first_session_yyyymmdd column to owa_visitor'); - return false; - } - - $ret = $db->query("update owa_visitor set first_session_yyyymmdd = - concat(cast(first_session_year as CHAR), lpad(CAST(first_session_month AS CHAR), 2, '0'), lpad(CAST(first_session_day AS CHAR), 2, '0')) "); - - if (!$ret) { - $this->e->notice('Failed to populate first_session_yyyymmdd column in owa_visitor'); - return false; - } - - $request = owa_coreAPI::entityFactory('base.request'); - - $ret = $request->addColumn('prior_document_id'); - - if (!$ret) { - $this->e->notice('Failed to add prior_document_id column to owa_request'); - return false; - } - - $ret = $request->addColumn('num_prior_sessions'); - - if (!$ret) { - $this->e->notice('Failed to add num_prior_sessions column to owa_request'); - return false; - } - - - $session = owa_coreAPI::entityFactory('base.session'); - - $ret = $session->addColumn('num_prior_sessions'); - - if (!$ret) { - $this->e->notice('Failed to add num_prior_sessions column to owa_session'); - return false; - } - - - $ret = $session->addColumn('is_bounce'); - - if (!$ret) { - $this->e->notice('Failed to add is_bounce column to owa_session'); - return false; - } - - $ret = $db->query("update owa_session set is_bounce = true WHERE num_pageviews = 1"); - - if (!$ret) { - $this->e->notice('Failed to populate is_bounce column in owa_session'); - return false; - } - - $ret = $session->addColumn('referring_search_term_id'); - - if (!$ret) { - $this->e->notice('Failed to add referring_search_term_id column in owa_session'); - return false; - } - - $ret = $session->addColumn('days_since_prior_session'); - - if (!$ret) { - $this->e->notice('Failed to add days_since_prior_session column in owa_session'); - return false; - } - - $ret = $db->query("update owa_session set days_since_prior_session = round(time_sinse_priorsession/(3600*24)) WHERE time_sinse_priorsession IS NOT NULL and time_sinse_priorsession > 0"); - - if (!$ret) { - $this->e->notice('Failed to populate days_since_prior_session column in owa_session'); - return false; - } - - $ret = $session->addColumn('days_since_first_session'); - - - if (!$ret) { - $this->e->notice('Failed to add days_since_first_session column in owa_session'); - return false; - } - - $ret = $db->query("update owa_session, owa_visitor set owa_session.days_since_first_session = round((owa_session.timestamp - owa_visitor.first_session_timestamp)/(3600*24)) WHERE owa_session.visitor_id = owa_visitor.id AND owa_visitor.first_session_timestamp IS NOT NULL"); - - if (!$ret) { - $this->e->notice('Failed to populate days_since_first_session column in owa_session'); - return false; - } - - // add api column - $u = owa_coreAPI::entityFactory('base.user'); - $ret = $u->addColumn('api_key'); - - if (!$ret) { - $this->e->notice('Failed to add api_key column to owa_user'); - return false; - } - - // add uri column - $d = owa_coreAPI::entityFactory('base.document'); - $d->addColumn('uri'); - $ret = $db->query("update owa_document set uri = substring_index(SUBSTR(url FROM 1+ length(substring_index(url, '/', 3))), '#', 1) "); - - if (!$ret) { - $this->e->notice('Failed to add uri column to owa_document'); - return false; - } - - $a = owa_coreAPI::entityFactory('base.action_fact'); - $ret = $a->createTable(); - - if ($ret === true) { - $this->e->notice('Action fact entity table created'); - } else { - $this->e->notice('Action fact entity table creation failed'); - return false; - } - - $st = owa_coreAPI::entityFactory('base.search_term_dim'); - $ret = $st->createTable(); - - if ($ret === true) { - $this->e->notice('Search Term Dimension entity table created'); - } else { - $this->e->notice('Search Term Dimension entity table creation failed'); - return false; - } - - // migrate search terms to new table - $ret = $db->query( - "INSERT INTO - owa_search_term_dim (id, terms, term_count) - SELECT - distinct(CRC32(LOWER(query_terms))) as id, - query_terms as terms, - length(query_terms) + 1 - length(replace(query_terms,' ','')) as term_count - FROM - owa_referer - WHERE - query_terms != ''" - ); - - if (!$ret) { - $this->e->notice('Failed to migrate search terms to new table.'); - return false; - } - - //populate search term foreign key in session table - $ret = $db->query( - "UPDATE - owa_session as session, owa_referer as referer - SET - session.referring_search_term_id = (CRC32(LOWER(referer.query_terms))) - WHERE - session.referer_id = referer.id and - session.referer_id != 0 AND - referer.query_terms != ''" - ); - - if (!$ret) { - $this->e->notice('Failed to add referring_search_term_id values to owa_session'); - return false; - } - - //populate search source in session table - $ret = $db->query( - "UPDATE - owa_session as session - SET - session.source = 'organic-search' - WHERE - session.referring_search_term_id IS NOT null" - ); - - if (!$ret) { - $this->e->notice('Failed to populate session.source values for organic-search'); - return false; - } - - //populate search source in session table - $ret = $db->query( - "UPDATE - owa_session as session - SET - session.source = 'referral' - WHERE - session.referer_id != 0 AND - session.referer_id != '' AND - session.referer_id IS NOT null AND - session.source != 'feed' AND - session.source != 'organic-search'" - ); - - if (!$ret) { - $this->e->notice('Failed to populate session.source values for referral'); - return false; - } - - - // add apiKeys to each user - $users = $db->get_results("select user_id from owa_user"); - - foreach ($users as $user) { - - $u = owa_coreAPI::entityFactory('base.user'); - $u->load($user['user_id'],'user_id'); - - if (!$u->get('api_key')) { - $u->set('api_key', $u->generateTempPasskey($u->get('user_id'))); - $u->update(); - } - } - - // change character encoding to UTF-8 - $tables = array('owa_request', 'owa_session', 'owa_feed_request', 'owa_click', 'owa_document', 'owa_ua', 'owa_site', 'owa_user', 'owa_configuration', 'owa_visitor', 'owa_os', 'owa_impression', 'owa_host', 'owa_exit','owa_domstream'); - - foreach ($tables as $table) { - - // change snippet dtd - $ret = $db->query(sprintf("ALTER TABLE %s CONVERT TO CHARACTER SET utf8", $table)); - - if (!$ret) { - $this->e->notice('Failed to change table character encoding for: ' .$table); - return false; - } - - } - - // change snippet dtd - $ret = $db->query("ALTER TABLE owa_referer MODIFY snippet MEDIUMTEXT"); - - if (!$ret) { - $this->e->notice('Failed to modify snippet column of owa_referer'); - return false; - } - - // change snippet dtd - $ret = $db->query("ALTER TABLE owa_domstream MODIFY page_url VARCHAR(255)"); - - if (!$ret) { - $this->e->notice('Failed to modify page_url column of owa_domstream'); - return false; - } - - // change snippet dtd - $ret = $db->query("ALTER TABLE owa_domstream MODIFY events MEDIUMTEXT"); - - if (!$ret) { - $this->e->notice('Failed to modify events column of owa_domstream'); - return false; - } - - // change snippet dtd - $ret = $db->query("ALTER TABLE owa_site MODIFY description MEDIUMTEXT"); - - if (!$ret) { - $this->e->notice('Failed to modify description column of owa_site'); - return false; - } - - // check for bad permissions on config file - if (file_exists(OWA_DIR . 'owa-config.php')) { - @chmod(OWA_DIR . 'owa-config.php', 0750); - } - - if (file_exists(OWA_DIR . 'conf/owa-config.php')) { - @chmod(OWA_DIR . 'conf/owa-config.php', 0750); - } - - if (file_exists(OWA_DIR . 'cli.php')) { - @chmod(OWA_DIR . 'cli.php', 0700); - } - - // must return true - return true; - } - - function down() { - - $visitor = owa_coreAPI::entityFactory('base.visitor'); - $visitor->dropColumn('num_prior_sessions'); - $visitor->dropColumn('first_session_yyyymmdd'); - $session = owa_coreAPI::entityFactory('base.session'); - $session->dropColumn('yyyymmdd'); - $session->dropColumn('is_bounce'); - $session->dropColumn('referring_search_term_id'); - $session->dropColumn('days_since_first_session'); - $session->dropColumn('days_since_prior_session'); - $session->dropColumn('num_prior_sessions'); - $request = owa_coreAPI::entityFactory('base.request'); - $request->dropColumn('yyyymmdd'); - $request->dropColumn('prior_document_id'); - $request->dropColumn('num_prior_sessions'); - $click = owa_coreAPI::entityFactory('base.click'); - $click->dropColumn('yyyymmdd'); - $feed_request = owa_coreAPI::entityFactory('base.feed_request'); - $feed_request->dropColumn('yyyymmdd'); - $u = owa_coreAPI::entityFactory('base.user'); - $u->dropColumn('api_key'); - $u = owa_coreAPI::entityFactory('base.document'); - $u->dropColumn('uri'); - $af = owa_coreAPI::entityFactory('base.action_fact'); - $af->dropTable(); - $st = owa_coreAPI::entityFactory('base.search_term_dim'); - $st->dropTable(); - - return true; - } -} - -?> --- a/owa/modules/base/updates/006.php +++ /dev/null @@ -1,282 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - - -class owa_base_006_update extends owa_update { - - var $schema_version = 6; - var $is_cli_mode_required = true; - - function up() { - - $session = owa_coreAPI::entityFactory('base.session'); - $session_columns = array( - 'num_goals', - 'num_goal_starts', - 'goals_value', - 'location_id', - 'language', - 'source_id', - 'ad_id', - 'campaign_id', - 'latest_attributions', - 'commerce_trans_count', - 'commerce_trans_revenue', - 'commerce_items_revenue', - 'commerce_items_count', - 'commerce_items_quantity', - 'commerce_shipping_revenue', - 'commerce_tax_revenue'); - - // create goal related columns - $goals = owa_coreAPI::getSetting('base', 'numGoals'); - - for ($i=1; $i <= $goals; $i++ ) { - $session_columns[] = 'goal_'.$i; - $session_columns[] = 'goal_'.$i.'_start'; - $session_columns[] = 'goal_'.$i.'_value'; - } - // add columns to owa_session - foreach ( $session_columns as $session_col_name ) { - $ret = $session->addColumn( $session_col_name ); - if ( $ret === true ) { - $this->e->notice( "$session_col_name added to owa_session" ); - } else { - $this->e->notice( "Adding $session_col_name to owa_session failed." ); - return false; - } - } - //rename col - $ret = $session->renameColumn('source', 'medium'); - if (!$ret) { - $this->e->notice('Failed to rename source column to medium in owa_session'); - return false; - } - - $request = owa_coreAPI::entityFactory('base.request'); - $request_columns = array( - 'location_id', - 'language'); - - // add columns to owa_session - foreach ( $request_columns as $request_col_name ) { - $ret = $request->addColumn( $request_col_name ); - if ( $ret === true ) { - $this->e->notice( "$request_col_name added to owa_request" ); - } else { - $this->e->notice( "Adding $request_col_name to owa_request failed." ); - return false; - } - } - - $domstream = owa_coreAPI::entityFactory('base.domstream'); - $ret = $domstream->addColumn('domstream_guid'); - - if ( $ret === true ) { - $this->e->notice( "domstream_guid added to owa_domstream" ); - } else { - $this->e->notice( "Adding domstream_guid to owa_domstream failed." ); - return false; - } - - $db = owa_coreAPI::dbSingleton(); - $ret = $db->query("update owa_domstream set domstream_guid = id"); - - $site = owa_coreAPI::entityFactory('base.site'); - $ret = $site->addColumn('settings'); - - if ( $ret === true ) { - $this->e->notice( "settings added to owa_site" ); - } else { - $this->e->notice( "Adding settings to owa_site failed." ); - return false; - } - //$db->query("alter table owa_site DROP PRIMARY KEY"); - $db->query("ALTER TABLE owa_site ADD id_1_3 INT"); - if ( $ret === true ) { - $this->e->notice( "id_1_3 column added to owa_site" ); - } else { - $this->e->notice( "adding id_1_3 column to owa_site failed." ); - return false; - } - - $ret = $db->query("update owa_site set id_1_3 = id"); - if ( $ret === true ) { - $this->e->notice( "populating id_1_3 in owa_site." ); - } else { - $this->e->notice( "population of id_1_3 column in owa_site failed." ); - return false; - } - - $ret = $db->query('ALTER TABLE owa_site MODIFY id BIGINT'); - if ( $ret === true ) { - $this->e->notice( "id column modified in owa_site" ); - } else { - $this->e->notice( "modify of id column in owa_site failed." ); - return false; - } - - $ret = $db->query("update owa_site set id = CRC32(site_id)"); - if ( $ret === true ) { - $this->e->notice( "populating id column in owa_site was successful." ); - } else { - $this->e->notice( "populating id column in owa_site failed." ); - return false; - } - - $click = owa_coreAPI::entityFactory('base.click'); - $ret = $click->addColumn('dom_element_class'); - - if ( $ret === true ) { - $this->e->notice( "dom_element_class added to owa_click" ); - } else { - $this->e->notice( "Adding dom_element_class to owa_click failed." ); - return false; - } - - $ret = $click->addColumn('dom_element_parent_id'); - - if ( $ret === true ) { - $this->e->notice( "dom_element_parent_id added to owa_click" ); - } else { - $this->e->notice( "Adding dom_element_parent_id to owa_click failed." ); - return false; - } - - - //create new entitiy tables - $new_entities = array( - 'base.ad_dim', - 'base.source_dim', - 'base.campaign_dim', - 'base.location_dim', - 'base.commerce_transaction_fact', - 'base.commerce_line_item_fact', - 'base.queue_item'); - - foreach ($new_entities as $entity_name) { - $entity = owa_coreAPI::entityFactory($entity_name); - $ret = $entity->createTable(); - - if ($ret === true) { - $this->e->notice("$entity_name table created."); - } else { - $this->e->notice("$entity_name table failed."); - return false; - } - } - - // must return true - return true; - } - - function down() { - - $session = owa_coreAPI::entityFactory('base.session'); - // owa_session columns to drop - $session_columns = array( - 'num_goals', - 'num_goal_starts', - 'goals_value', - 'location_id', - 'language', - 'source_id', - 'ad_id', - 'campaign_id', - 'latest_attributions', - 'commerce_trans_count', - 'commerce_trans_revenue', - 'commerce_items_revenue', - 'commerce_items_count', - 'commerce_items_quantity', - 'commerce_shipping_revenue', - 'commerce_tax_revenue'); - - // add in goal related columns - $goals = owa_coreAPI::getSetting('base', 'numGoals'); - for ($i=1; $i <= $goals; $i++ ) { - $session_columns[] = 'goal_'.$i; - $session_columns[] = 'goal_'.$i.'_start'; - $session_columns[] = 'goal_'.$i.'_value'; - } - //drop columns from owa_session - foreach ($session_columns as $session_col_name) { - $session->dropColumn($session_col_name); - } - //rename col back to original - $session->renameColumn('medium', 'source', true); - - //drop request columns - $request = owa_coreAPI::entityFactory('base.request'); - $request_columns = array( - 'location_id', - 'language'); - - // add columns to owa_session - foreach ( $request_columns as $request_col_name ) { - $ret = $request->dropColumn( $request_col_name ); - } - - $domstream = owa_coreAPI::entityFactory('base.domstream'); - $domstream->dropColumn('domstream_guid'); - - $site = owa_coreAPI::entityFactory('base.site'); - $site->dropColumn('settings'); - //$site->modifyColumn('id'); - $db = owa_coreAPI::dbSingleton(); - $db->query('ALTER TABLE owa_site MODIFY id SERIAL'); - $db->query('UPDATE owa_site SET id = id_1_3'); - $ret = $db->query('ALTER TABLE owa_site MODIFY id INT'); - $db->query('ALTER TABLE owa_site DROP id_1_3'); - - $click = owa_coreAPI::entityFactory('base.click'); - $click->dropColumn('dom_element_class'); - $click->dropColumn('dom_element_parent_id'); - - //drop tables - $new_entities = array( - 'base.ad_dim', - 'base.source_dim', - 'base.campaign_dim', - 'base.location_dim', - 'base.commerce_transaction_fact', - 'base.commerce_line_item_fact', - 'base.queue_item'); - - foreach ($new_entities as $entity_name) { - $entity = owa_coreAPI::entityFactory($entity_name); - $ret = $entity->dropTable(); - } - - return true; - } -} - -?> --- a/owa/modules/base/updatesApply.php +++ /dev/null @@ -1,81 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_updatesApplyController extends owa_controller { - - function action() { - - // fetch list of modules that require updates - $s = &owa_coreAPI::serviceSingleton(); - - $modules = $s->getModulesNeedingUpdates(); - //print_r($modules); - //return; - - // foreach do update in order - - $error = false; - - foreach ($modules as $k => $v) { - - $ret = $s->modules[$v]->update(); - - if ($ret != true): - $error = true; - // if there is an error check to see if it's because the cli update mode is required - $cli_update_required = $s->modules[$v]->isCliUpdateModeRequired(); - break; - endif; - - } - - if ($error === true) { - - if($cli_update_required) { - $this->set('error_msg', $this->getMsg(3311)); - } else { - $this->set('error_msg', $this->getMsg(3307)); - } - - $this->setView('base.error'); - $this->setViewMethod('delegate'); - } else { - - // add data to container - $this->set('status_code', 3308); - $this->set('do', 'base.optionsGeneral'); - $this->setViewMethod('redirect'); - } - } -} - -?> + --- a/owa/modules/base/updatesApplyCli.php +++ /dev/null @@ -1,122 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_updatesApplyCliController extends owa_cliController { - - function __construct($params) { - define('OWA_UPDATING', true); - return parent::__construct($params); - } - - function action() { - - // fetch list of modules that require updates - $s = &owa_coreAPI::serviceSingleton(); - - if ($this->isParam('listpending')) { - - return $this->listPendingUpdates(); - } - - if ($this->getParam('apply')) { - - return $this->apply($this->get('apply')); - } - - if ($this->getParam('rollback')) { - - return $this->rollback($this->get('rollback')); - } - - $modules = $s->getModulesNeedingUpdates(); - //print_r($modules); - //return; - - // foreach do update in order - if (!empty($modules)) { - $error = false; - - foreach ($modules as $k => $v) { - - $ret = $s->modules[$v]->update(); - - if ($ret != true): - $error = true; - break; - endif; - - } - - if ($error === true) { - owa_coreAPI::notice($this->getMsg(3307)); - } else { - - // add data to container - owa_coreAPI::notice($this->getMsg(3308)); - } - } else { - owa_coreAPI::notice("There are no modules with pending updates to apply."); - } - - - } - - function listPendingUpdates() { - - $s = &owa_coreAPI::serviceSingleton(); - $modules = $s->getModulesNeedingUpdates(); - if ($modules) { - owa_coreAPI::notice(sprintf("Updates pending include: %s",print_r($modules, true))); - } else { - owa_coreAPI::notice("No updates are pending."); - } - } - - function apply($update) { - - list($module, $seq) = explode('.', $update); - $u = owa_coreAPI::updateFactory($module, $seq); - $ret = $u->apply(); - - if ($ret) { - owa_coreAPI::notice("Updates applied successfully."); - } - } - - function rollback($update) { - list($module, $seq) = explode('.', $update); - $u = owa_coreAPI::updateFactory($module, $seq); - $u->rollback(); - owa_coreAPI::notice("Rollback completed."); - } - -} - -?> + --- a/owa/modules/base/users.php +++ /dev/null @@ -1,78 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ -class owa_usersController extends owa_adminController { - - function __construct($params) { - - $this->setRequiredCapability('edit_users'); - return parent::__construct($params); - } - - function action() { - - $db = owa_coreAPI::dbSingleton(); - $db->selectFrom('owa_user'); - $db->selectColumn("*"); - $users = $db->getAllRows(); - $this->set('users', $users); - $this->setView('base.options'); - $this->setSubview('base.users'); - } -} - - -/** - * Users Roster View - * - * @author Peter Adams - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ -class owa_usersView extends owa_view { - - function render() { - - //page title - $this->t->set('page_title', 'User Roster'); - $this->body->set_template('users.tpl'); - $this->body->set('headline', 'User Roster'); - $this->body->set('users', $this->get('users')); - } -} - -?> + --- a/owa/modules/base/usersAdd.php +++ /dev/null @@ -1,106 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_usersAddController extends owa_adminController { - - function __construct($params) { - - parent::__construct($params); - - $this->setRequiredCapability('edit_users'); - $this->setNonceRequired(); - - // Check for user with the same email address - // this is needed or else the change password feature will not know which account - // to chane the password for. - $v1 = owa_coreAPI::validationFactory('entityDoesNotExist'); - $v1->setConfig('entity', 'base.user'); - $v1->setConfig('column', 'email_address'); - $v1->setValues(trim($this->getParam('email_address'))); - $v1->setErrorMessage($this->getMsg(3009)); - $this->setValidation('email_address', $v1); - - // Check user name. - $v2 = owa_coreAPI::validationFactory('entityDoesNotExist'); - $v2->setConfig('entity', 'base.user'); - $v2->setConfig('column', 'user_id'); - $v2->setValues(trim($this->getParam('user_id'))); - $v2->setErrorMessage($this->getMsg(3001)); - $this->setValidation('user_id', $v2); - - return; - } - - function action() { - - $userManager = owa_coreApi::supportClassFactory('base', 'userManager'); - - - $user_params = array( 'user_id' => trim($this->params['user_id']), - 'real_name' => $this->params['real_name'], - 'role' => $this->params['role'], - 'email_address' => trim($this->params['email_address'])); - - $temp_passkey = $userManager->createNewUser($user_params); - - // log account creation event to event queue - $eq = &eventQueue::get_instance(); - $eq->log(array( 'user_id' => $this->params['user_id'], - 'real_name' => $this->params['real_name'], - 'role' => $this->params['role'], - 'email_address' => $this->params['email_address'], - 'temp_passkey' => $temp_passkey), - 'base.new_user_account'); - - - $this->setRedirectAction('base.users'); - $this->set('status_code', 3000); - - return; - } - - function errorAction() { - $this->setView('base.options'); - $this->setSubview('base.usersProfile'); - $this->set('error_code', 3009); - //assign original form data so the user does not have to re-enter the data - $this->set('profile', $this->params); - - return; - - } - -} - - -?> + --- a/owa/modules/base/usersChangePassword.php +++ /dev/null @@ -1,97 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_usersChangePasswordController extends owa_controller { - - function owa_usersChangePasswordController($params) { - - return owa_usersChangePasswordController::__construct($params); - - } - - function __construct($params) { - - parent::__construct($params); - - // Add validations to the run - $v1 = owa_coreAPI::validationFactory('stringMatch'); - $v1->setValues(array($this->getParam('password'), $this->getParam('password2'))); - $v1->setErrorMessage("Your passwords must match."); - $this->setValidation('password_match', $v1); - - $v2 = owa_coreAPI::validationFactory('stringLength'); - $v2->setValues($this->getParam('password')); - $v2->setConfig('operator', '>='); - $v2->setConfig('length', 6); - $v2->setErrorMessage("Your password must be at least 6 characters in length."); - $this->setValidation('password_length', $v2); - - return; - } - - function action() { - - $auth = &owa_auth::get_instance(); - $status = $auth->authenticateUserTempPasskey($this->params['k']); - - // log to event queue - if ($status === true) { - $eq = & eventQueue::get_instance(); - $new_password = array('key' => $this->params['k'], 'password' => $auth->encryptPassword($this->params['password']), 'ip' => $_SERVER['REMOTE_ADDR']); - $eq->log($new_password, 'base.set_password'); - $auth->deleteCredentials(); - $this->setRedirectAction('base.loginForm'); - $this->set('status_code', 3006); - } else { - $this->setRedirectAction('base.loginForm'); - $this->set('error_code', 2011); // can't find key in the db - } - - return; - } - - function errorAction() { - //print 'error action'; - $this->setView('base.usersPasswordEntry'); - $this->set('k', $this->getParam('k')); - //$this->set('password', $this->getParam('password')); - //$this->set('password2', $this->getParam('password2')); - return; - } -} - -?> + --- a/owa/modules/base/usersDelete.php +++ /dev/null @@ -1,54 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_usersDeleteController extends owa_adminController { - - function __construct($params) { - - $this->setRequiredCapability('edit_users'); - $this->setNonceRequired(); - return parent::__construct($params); - } - - function action() { - - $userManager = owa_coreApi::supportClassFactory('base', 'userManager'); - - // add check here to ensure that this is not the default user.... - $userManager->deleteUser($this->getParam('user_id')); - - $this->setRedirectAction('base.users'); - $this->set('status_code', 3004); - } -} - -?> + --- a/owa/modules/base/usersEdit.php +++ /dev/null @@ -1,85 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_usersEditController extends owa_adminController { - - function __construct($params) { - - parent::__construct($params); - - $this->setRequiredCapability('edit_users'); - $this->setNonceRequired(); - - // check that user_id is present - $v1 = owa_coreAPI::validationFactory('required'); - $v1->setValues($this->getParam('user_id')); - $this->setValidation('user_id', $v1); - - // Check user name exists - $v2 = owa_coreAPI::validationFactory('entityExists'); - $v2->setConfig('entity', 'base.user'); - $v2->setConfig('column', 'user_id'); - $v2->setValues($this->getParam('user_id')); - $v2->setErrorMessage($this->getMsg(3001)); - $this->setValidation('user_id', $v2); - } - - function action() { - - // This needs form validation in a bad way. - - $u = owa_coreAPI::entityFactory('base.user'); - $u->getByColumn('user_id', $this->getParam('user_id')); - $u->set('email_address', $this->getParam('email_address')); - $u->set('real_name', $this->getParam('real_name')); - - // never change the role of the admin user - if ($u->get('user_id') != 'admin') { - $u->set('role', $this->getParam('role')); - } - $u->update(); - $this->set('status_code', 3003); - $this->setRedirectAction('base.users'); - } - - function errorAction() { - - $this->setView('base.options'); - $this->setSubview('base.usersProfile'); - $this->set('error_code', 3311); - $this->set('user', $this->params); - } - -} - - -?> + --- a/owa/modules/base/usersNewAccount.php +++ /dev/null @@ -1,97 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_usersNewAccountController extends owa_controller { - - function __construct($params) { - return parent::__construct($params); - - } - - function action() { - - $event = $this->getParam('event'); - - // return email view - $data['user_id']= $event->get('user_id'); - $data['email_address']= $event->get('email_address'); - $data['temp_passkey'] = $event->get('temp_passkey'); - $data['subject'] = 'OWA User Account Setup'; - $data['view'] = 'base.usersNewAccount'; - $data['view_method'] = 'email'; - - return $data; - } - -} - - -/** - * New Account Notification View - * - * @author Peter Adams - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_usersNewAccountView extends owa_mailView { - - function owa_usersNewAccountView() { - - return owa_usersNewAccountView::__construct(); - } - - function __construct() { - - return parent::__construct(); - } - - function render($data) { - - $this->t->set_template('wrapper_email.tpl'); - $this->body->set_template('users_new_account_email.tpl'); - $this->body->set('user_id', $data['user_id']); - $this->body->set('key', $data['temp_passkey']); - - // mailer specific - $this->setMailSubject($data['subject']); - $this->addMailToAddress($data['email_address'], $data['name']); - - } -} - -?> + --- a/owa/modules/base/usersPasswordEntry.php +++ /dev/null @@ -1,93 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_usersPasswordEntryController extends owa_controller { - - function owa_usersPasswordEntryController($params) { - - return owa_usersPasswordEntryController::__construct($params); - } - - function __construct($params) { - - return parent::__construct($params); - } - - function action() { - - $this->set('key', $this->getParam('k')); - $this->setView('base.usersPasswordEntry'); - return; - } - - -} - -/** - * Change Password View - * - * Presents a simple form to the user asking them to enter a new password. - * - * @author Peter Adams - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_usersPasswordEntryView extends owa_view { - - function owa_usersPasswordEntryView() { - - return owa_usersPasswordEntryView::__construct(); - } - - function __construct() { - - return parent::__construct(); - } - - function render($data) { - - $this->t->set_template('wrapper_public.tpl'); - $this->body->set_template('users_change_password.tpl'); - $this->body->set('headline', $this->getMsg(3005)); - $this->body->set('key', $this->get('key')); - } -} - -?> + --- a/owa/modules/base/usersProfile.php +++ /dev/null @@ -1,110 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_usersProfileController extends owa_controller { - - function owa_usersProfileController($params) { - - return owa_usersProfileController::__construct($params); - } - - function __construct($params) { - - $this->setRequiredCapability('edit_users'); - return parent::__construct($params); - } - - function action() { - - // This needs form validation in a bad way. - //Check to see if user is passed by constructor or else fetch the object. - if ($this->getParam('user_id')) { - $u = owa_coreAPI::entityFactory('base.user'); - $u->getByColumn('user_id', $this->getParam('user_id')); - $this->set('profile', $u->_getProperties()); - $this->set('edit', true); - $this->set('user_id', $this->getParam('user_id')); - } else { - $this->set('profile', array()); - } - - $this->setView('base.options'); - $this->setSubview('base.usersProfile'); - - return $data; - } - -} - -/** - * OWA User Profile View - * - * @author Peter Adams - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_usersProfileView extends owa_view { - - function __construct() { - - return parent::__construct(); - } - - function render($data) { - - if ($this->get('edit')) { - $this->body->set('headline', 'Edit user profile'); - $this->body->set('action', 'base.usersEdit'); - $this->body->set('edit', true); - } else { - $this->body->set('headline', 'Add a new user profile'); - $this->body->set('action', 'base.usersAdd'); - } - //page title - $this->t->set('page_title', 'User Profile'); - $this->body->set_template('users_addoredit.tpl'); - $this->body->set('roles', owa_coreAPI::getAllRoles()); - $this->body->set('user', $this->get('profile')); - - } - - -} - - -?> + --- a/owa/modules/base/usersResetPassword.php +++ /dev/null @@ -1,92 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_usersResetPasswordController extends owa_controller { - - function __construct($params) { - - return parent::__construct($params); - } - - function action() { - - $event = $this->getParam('event'); - - $auth = &owa_auth::get_instance(); - $u = owa_coreAPI::entityFactory('base.user'); - $u->getByColumn('email_address', $event->get('email_address')); - $u->set('temp_passkey', $auth->generateTempPasskey($u->get('user_id'))); - $status = $u->update(); - $this->e->debug('status: '.$status); - if ($status === true): - - $this->setView('base.usersResetPassword'); - $this->set('key', $u->get('temp_passkey')); - $this->set('email_address', $u->get('email_address')); - - else: - $this->e->debug("could not update password in db."); - endif; - - return; - } - -} - -/** - * Reset Password Notification View - * - * @author Peter Adams - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_usersResetPasswordView extends owa_mailView { - - function render($data) { - - $this->t->set_template('wrapper_email.tpl'); - $this->body->set_template('users_reset_password_email.tpl'); - $this->body->set('key', $this->get('key')); - $this->setMailSubject('Your New OWA Password'); - $this->addMailToAddress($this->get('email_address')); - } -} - - -?> + --- a/owa/modules/base/usersSetPassword.php +++ /dev/null @@ -1,94 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_usersSetPasswordController extends owa_controller { - - function __construct($params) { - - return parent::__construct($params); - } - - function action() { - - $event = $this->getParam('event'); - - $u = owa_coreAPI::entityFactory('base.user'); - $u->getByColumn('temp_passkey', $event->get('key')); - $u->set('temp_passkey', ''); - $u->set('password', $event->get('password')); - $status = $u->update(); - - if ($status == true): - - $data['view'] = 'base.usersSetPassword'; - $data['view_method'] = 'email'; - $data['ip'] = $event->get('ip'); - $data['subject'] = 'Password Change Complete'; - $data['email_address'] = $u->get('email_address'); - - endif; - - return $data; - } - -} - -/** - * Set Password Notification View - * - * @author Peter Adams - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_usersSetPasswordView extends owa_view { - - function __construct() { - - return parent::__construct(); - } - - function render($data) { - - $this->t->set_template('wrapper_email.tpl'); - $this->body->set_template('users_set_password_email.tpl'); - $this->body->set('ip', $data['ip']); - } -} - -?> + --- a/owa/modules/base/widgetOwaNews.php +++ /dev/null @@ -1,68 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_widgetOwaNewsController extends owa_widgetController { - - function __construct($params) { - - return parent::__construct($params); - } - - function action() { - - $this->set('title', 'OWA News'); - - //$data['params'] = $this->params; - - //Fetch latest OWA news - $rss = new owa_news; - //print_r($this->config); - $news = $rss->Get($this->config['owa_rss_url']); - $this->set('news', $news); - $this->setView('base.widgetOwaNews'); - } - -} - -class owa_widgetOwaNewsView extends owa_view { - - function render($data) { - - $this->t->set_template('wrapper_blank.tpl'); - $this->body->set_template('news.tpl'); - $this->body->set('news', $data['news']); - } - -} - -?> + --- a/owa/modules/base/xmlVisitsGeolocation.php +++ /dev/null @@ -1,135 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_xmlVisitsGeolocationController extends owa_reportController { - - function owa_xmlVisitsGeolocationController($params) { - - return owa_xmlVisitsGeolocationController::__construct($params); - } - - function __construct($params) { - - return parent::__construct($params); - } - - function action() { - - $site_id = $this->getParam('site_id'); - if ($site_id): - //get site labels - $s = owa_coreAPI::entityFactory('base.site'); - $s->getByColumn('site_id', $site_id); - $this->set('site_name', $s->get('name')); - $this->set('site_description', $s->get('description')); - else: - $this->set('site_name', 'All Sites'); - $this->set('site_description', 'All Sites Tracked by OWA'); - endif; - - //setup Metrics - $m = owa_coreApi::metricFactory('base.latestVisits'); - $m->setConstraint('site_id', $this->getParam('site_id')); - //$period = $this->makeTimePeriod('all_time'); - $m->setPeriod($this->getPeriod()); - $m->setLimit(100); - $m->setOrder('DESC'); - $this->set('latest_visits', $m->generate()); - $this->setView('base.xmlVisitsGeolocation'); - - return; - - } - -} - - - -/** - * Visits Geolocation xml View - * - * @author Peter Adams - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_xmlVisitsGeolocationView extends owa_view { - - function owa_xmlVisitsGeolocationView() { - - return owa_xmlVisitsGeolocationView::__construct(); - } - - function __construct() { - - return parent::__construct(); - } - - function render($data) { - - $this->t->set_template('wrapper_blank.tpl'); - - // load body template - $this->body->set_template('xml_visits_geolocation.tpl'); - //$this->body->set_template('kml_google_sample.tpl'); - $this->body->set('visits', $this->get('latest_visits')); - $this->body->set('site_name', $this->get('site_name')); - $this->body->set('site_domain', $this->get('site_domain')); - $this->body->set('site_description', $this->get('site_description')); - $this->body->set('xml', trim('')); - $this->_setLinkState(); - - //if (substr_count($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip')): - // ob_start("ob_gzhandler"); - // header('Content-type: text/xml', true); - // ob_end_flush(); - //else: - //header('Content-type: text/xml', true); - header('Content-type: application/vnd.google-earth.kml+xml; charset=UTF-8', true); - //endif: - - return; - } - - -} - - -?> + --- a/owa/modules/hello/exampleSettings.php +++ /dev/null @@ -1,87 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.3.0 - */ - -class owa_exampleSettingsController extends owa_adminController { - - function __construct($params) { - - parent::__construct($params); - $this->type = 'options'; - $this->setRequiredCapability('edit_settings'); - } - - function action() { - - // add data to container - $this->setView('base.options'); - $this->setSubview('base.exampleSettings'); - } - -} - -/** - * Options View - * - * @author Peter Adams - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_exampleSettingsView extends owa_view { - - function __construct($params) { - //set page type - $this->_setPageType('Administration Page'); - return parent::__construct($params); - } - - function render($data) { - - // load template - $this->body->setTemplateFile('hello', 'example_settings.php'); - // assign headline - $this->body->set('headline', 'Example Settings Page'); - } - - -} - - - - -?> --- a/owa/modules/hello/module.php +++ /dev/null @@ -1,105 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_helloModule extends owa_module { - - - function __construct() { - - $this->name = 'hello'; - $this->display_name = 'Hello World'; - $this->group = 'hello'; - $this->author = 'Peter Adams'; - $this->version = '1.0'; - $this->description = 'Hello world sample module.'; - $this->config_required = false; - $this->required_schema_version = 1; - - return parent::__construct(); - } - - /** - * Registers Admin panels with the core API - * - */ - function registerAdminPanels() { - - $this->addAdminPanel(array( 'do' => 'hello.exampleSettings', - 'priviledge' => 'admin', - 'anchortext' => 'Hello World!', - 'group' => 'Test', - 'order' => 1)); - - - return; - - } - - function registerNavigation() { - - /*$this->addNavigationLink(array('view' => 'base.reportDocument', - 'nav_name' => 'subnav', - 'ref' => 'base.reportClicks', - 'priviledge' => 'viewer', - 'anchortext' => 'Click Map Report', - 'order' => 1)); - - */ - - return; - - } - - /** - * Registers Event Handlers with queue queue - * - */ - function _registerEventHandlers() { - - - // Clicks - //$this->_addHandler('base.click', 'clickHandlers'); - - return; - - } - - function _registerEntities() { - - //$this->entities[] = 'myentity'; - } - - -} - - -?> + --- a/owa/modules/hello/templates/example_settings.php +++ /dev/null @@ -1,3 +1,1 @@ -

                          -Hello world. This is how you create a settings page. --- a/owa/modules/index.php +++ /dev/null @@ -1,3 +1,1 @@ - + --- a/owa/modules/maxmind_geoip/classes/maxmind.php +++ /dev/null @@ -1,177 +1,1 @@ - - * @copyright Copyright © 2010 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ -class owa_maxmind extends owa_location { - - /** - * URL template for REST based web service - * - * @var unknown_type - */ - var $ws_url = ''; - var $db_file_dir; - var $db_file_name = 'GeoLiteCity.dat'; - var $db_file_path; - var $db_File_present = false; - - /** - * Constructor - * - * @return owa_hostip - */ - function __construct() { - - if ( ! defined( 'OWA_MAXMIND_DATA_DIR' ) ) { - define('OWA_MAXMIND_DATA_DIR', OWA_DATA_DIR.'maxmind'.DIRECTORY_SEPARATOR); - } - - $this->db_file_path = OWA_MAXMIND_DATA_DIR.$this->db_file_name; - - if ( file_exists( $this->db_file_path ) ) { - $this->db_file_present = true; - } else { - owa_coreAPI::notice('Maxmind DB file could is not present at: ' . OWA_MAXMIND_DATA_DIR); - } - - return parent::__construct(); - } - - function isDbReady() { - - return $this->db_file_present; - } - - /** - * Fetches the location from the Maxmind local db - * - * @param string $ip - */ - function getLocation($location_map) { - - if ( ! $this->isDbReady() ) { - return $location_map; - } - - if ( ! array_key_exists( 'ip_address', $location_map ) ) { - return $location_map; - } - - // check for shared memory capability - if ( function_exists( 'shmop_open' ) ) { - $flag = Net_GeoIP::SHARED_MEMORY ; - } else { - $flag = Net_GeoIp::STANDARD ; - } - - $geoip = Net_GeoIP::getInstance($this->db_file_path, $flag); - $location = $geoip->lookupLocation($location_map['ip_address']); - - if ($location) { - - $location_map['city'] = strtolower(trim($location->__get('city'))); - $location_map['state'] = strtolower(trim($location->__get('region'))); - $location_map['country'] = strtolower(trim($location->__get('countryName'))); - $location_map['country_code'] = strtoupper(trim($location->__get('countryCode'))); - $location_map['country_code3'] = strtoupper(trim($location->__get('countryCode3'))); - $location_map['latitude'] = trim($location->__get('latitude')); - $location_map['longitude'] = trim($location->__get('longitude')); - $location_map['dma_code'] = trim($location->__get('dmaCode')); - $location_map['area_code'] = trim($location->__get('areaCode')); - $location_map['postal_code'] = trim($location->__get('postalCode')); - } - - return $location_map; - } - - - function getLocationFromWebService($location_map) { - - $license_key = owa_coreAPI::getSetting('maxmind_geoip', 'ws_license_key'); - - if ( ! array_key_exists( 'ip_address', $location_map ) ) { - return $location_map; - } - - $geoloc = GeoCityLocateIspOrg::getInstance(); - $geoloc->setLicenceKey( $license_key ); - $geoloc->setIP( $location_map['ip_address'] ); - - if ( $geoloc->isError() ) { - owa_coreAPI::debug( $geoloc->isError().": " . $geoloc->getError() ); - return $location_map; - } - - $location_map['city'] = strtolower( trim( $geoloc->getCity() ) ); - $location_map['state'] = strtolower( trim($geoloc->getState() ) ); - $location_map['country'] = strtolower( trim( $geoloc->lookupCountryCode( $geoloc->getCountryCode() ) ) ); - $location_map['country_code'] = strtoupper( trim($geoloc->getCountryCode() ) ); - $location_map['latitude'] = trim( $geoloc->getLat() ); - $location_map['longitude'] = trim( $geoloc->getLong() ); - $location_map['dma_code'] = trim( $geoloc->getMetroCode() ); - $location_map['dma'] = trim( $geoloc->lookupMetroCode( $geoloc->getMetroCode() ) ); - $location_map['area_code'] = trim( $geoloc->getAreaCode() ); - $location_map['postal_code'] = trim( $geoloc->getZip() ); - $location_map['isp'] = trim( $geoloc->getIsp() ); - $location_map['organization'] = trim( $geoloc->getOrganization() ); - $location_map['subcountry_code'] = trim( $geoloc->lookupSubCountryCode( $geoloc->getState(), $geoloc->getCountryCode() ) ); - - return $location_map; - } - -} - -?> --- a/owa/modules/maxmind_geoip/includes/Net_GeoIP-1.0.0RC3/Net/GeoIP.php +++ /dev/null @@ -1,905 +1,1 @@ - (original Maxmind version) | - * | Hans Lellelid | - * +----------------------------------------------------------------------+ - * - * @category Net - * @package Net_GeoIP - * @author Jim Winstead (original Maxmind PHP API) - * @author Hans Lellelid - * @license LGPL http://www.gnu.org/licenses/lgpl.txt - * @link http://pear.php.net/package/Net_GeoIp - * $Id: GeoIP.php 296763 2010-03-25 00:53:44Z clockwerx $ - */ - -require_once 'PEAR/Exception.php'; - -/** - * GeoIP class provides an API for performing geo-location lookups based on IP - * address. - * - * To use this class you must have a [binary version] GeoIP database. There is - * a free GeoIP country database which can be obtained from Maxmind: - * {@link http://www.maxmind.com/app/geoip_country} - * - * - * SIMPLE USE - * - * - * Create an instance: - * - * - * $geoip = Net_GeoIP::getInstance('/path/to/geoipdb.dat', Net_GeoIP::SHARED_MEMORY); - * - * - * Depending on which database you are using (free, or one of paid versions) - * you must use appropriate lookup method: - * - * - * // for free country db: - * $country_name = $geoip->lookupCountryName($_SERVER['REMOTE_ADDR']); - * $country_code = $geoip->lookupCountryCode($_SERVER['REMOTE_ADDR']); - * - * // for [non-free] region db: - * list($ctry_code, $region) = $geoip->lookupRegion($_SERVER['REMOTE_ADDR']); - * - * // for [non-free] city db: - * $location = $geoip->lookupLocation($_SERVER['REMOTE_ADDR']); - * print "city: " . $location->city . ", " . $location->region; - * print "lat: " . $location->latitude . ", long: " . $location->longitude; - * - * // for organization or ISP db: - * $org_or_isp_name = $geoip->lookupOrg($_SERVER['REMOTE_ADDR']); - * - * - * - * MULTIPLE INSTANCES - * - * - * You can have several instances of this class, one for each database file - * you are using. You should use the static getInstance() singleton method - * to save on overhead of setting up database segments. Note that only one - * instance is stored per filename, and any flags will be ignored if an - * instance already exists for the specifiedfilename. - * - * Special note on using SHARED_MEMORY flag - * - * If you are using SHARED_MEMORY (shmop) you can only use SHARED_MEMORY for - * one (1) instance (i.e. for one database). Any subsequent attempts to - * instantiate using SHARED_MEMORY will read the same shared memory block - * already initialized, and therefore will cause problems since the expected - * database format won't match the database in the shared memory block. - * - * Note that there is no easy way to flag "nice errors" to prevent attempts - * to create new instances using SHARED_MEMORY flag and it is also not posible - * (in a safe way) to allow new instances to overwrite the shared memory block. - * - * In short, is you are using multiple databses, use the SHARED_MEMORY flag - * with care. - * - * - * LOOKUPS ON HOSTNAMES - * - * - * Note that this PHP API does NOT support lookups on hostnames. This is so - * that the public API can be kept simple and so that the lookup functions - * don't need to try name lookups if IP lookup fails (which would be the only - * way to keep the API simple and support name-based lookups). - * - * If you do not know the IP address, you can convert an name to IP very - * simply using PHP native functions or other libraries: - * - * - * $geoip->lookupCountryName(gethostbyname('www.sunset.se')); - * - * - * Or, if you don't know whether an address is a name or ip address, use - * application-level logic: - * - * - * if (ip2long($ip_or_name) === false) { - * $ip = gethostbyname($ip_or_name); - * } else { - * $ip = $ip_or_name; - * } - * $ctry = $geoip->lookupCountryName($ip); - * - * - * @category Net - * @package Net_GeoIP - * @author Jim Winstead (original Maxmind PHP API) - * @author Hans Lellelid - * @license LGPL http://www.gnu.org/licenses/lgpl.txt - * @link http://pear.php.net/package/Net_GeoIp - */ -class Net_GeoIP -{ - /** - * Exception error code used for invalid IP address. - */ - const ERR_INVALID_IP = 218624992; // crc32('Net_GeoIP::ERR_INVALID_IP') - - /** - * Exception error code when there is a DB-format-related error. - */ - const ERR_DB_FORMAT = 866184008; // crc32('Net_GeoIP::ERR_DB_FORMAT') - - public static $COUNTRY_CODES = array( - "", "AP", "EU", "AD", "AE", "AF", "AG", "AI", "AL", "AM", "AN", "AO", "AQ", - "AR", "AS", "AT", "AU", "AW", "AZ", "BA", "BB", "BD", "BE", "BF", "BG", "BH", - "BI", "BJ", "BM", "BN", "BO", "BR", "BS", "BT", "BV", "BW", "BY", "BZ", "CA", - "CC", "CD", "CF", "CG", "CH", "CI", "CK", "CL", "CM", "CN", "CO", "CR", "CU", - "CV", "CX", "CY", "CZ", "DE", "DJ", "DK", "DM", "DO", "DZ", "EC", "EE", "EG", - "EH", "ER", "ES", "ET", "FI", "FJ", "FK", "FM", "FO", "FR", "FX", "GA", "GB", - "GD", "GE", "GF", "GH", "GI", "GL", "GM", "GN", "GP", "GQ", "GR", "GS", "GT", - "GU", "GW", "GY", "HK", "HM", "HN", "HR", "HT", "HU", "ID", "IE", "IL", "IN", - "IO", "IQ", "IR", "IS", "IT", "JM", "JO", "JP", "KE", "KG", "KH", "KI", "KM", - "KN", "KP", "KR", "KW", "KY", "KZ", "LA", "LB", "LC", "LI", "LK", "LR", "LS", - "LT", "LU", "LV", "LY", "MA", "MC", "MD", "MG", "MH", "MK", "ML", "MM", "MN", - "MO", "MP", "MQ", "MR", "MS", "MT", "MU", "MV", "MW", "MX", "MY", "MZ", "NA", - "NC", "NE", "NF", "NG", "NI", "NL", "NO", "NP", "NR", "NU", "NZ", "OM", "PA", - "PE", "PF", "PG", "PH", "PK", "PL", "PM", "PN", "PR", "PS", "PT", "PW", "PY", - "QA", "RE", "RO", "RU", "RW", "SA", "SB", "SC", "SD", "SE", "SG", "SH", "SI", - "SJ", "SK", "SL", "SM", "SN", "SO", "SR", "ST", "SV", "SY", "SZ", "TC", "TD", - "TF", "TG", "TH", "TJ", "TK", "TM", "TN", "TO", "TL", "TR", "TT", "TV", "TW", - "TZ", "UA", "UG", "UM", "US", "UY", "UZ", "VA", "VC", "VE", "VG", "VI", "VN", - "VU", "WF", "WS", "YE", "YT", "RS", "ZA", "ZM", "ME", "ZW", "A1", "A2", "O1", - "AX", "GG", "IM", "JE", "BL", "MF" - ); - - public static $COUNTRY_CODES3 = array( - "","AP","EU","AND","ARE","AFG","ATG","AIA","ALB","ARM","ANT","AGO","AQ","ARG", - "ASM","AUT","AUS","ABW","AZE","BIH","BRB","BGD","BEL","BFA","BGR","BHR","BDI", - "BEN","BMU","BRN","BOL","BRA","BHS","BTN","BV","BWA","BLR","BLZ","CAN","CC", - "COD","CAF","COG","CHE","CIV","COK","CHL","CMR","CHN","COL","CRI","CUB","CPV", - "CX","CYP","CZE","DEU","DJI","DNK","DMA","DOM","DZA","ECU","EST","EGY","ESH", - "ERI","ESP","ETH","FIN","FJI","FLK","FSM","FRO","FRA","FX","GAB","GBR","GRD", - "GEO","GUF","GHA","GIB","GRL","GMB","GIN","GLP","GNQ","GRC","GS","GTM","GUM", - "GNB","GUY","HKG","HM","HND","HRV","HTI","HUN","IDN","IRL","ISR","IND","IO", - "IRQ","IRN","ISL","ITA","JAM","JOR","JPN","KEN","KGZ","KHM","KIR","COM","KNA", - "PRK","KOR","KWT","CYM","KAZ","LAO","LBN","LCA","LIE","LKA","LBR","LSO","LTU", - "LUX","LVA","LBY","MAR","MCO","MDA","MDG","MHL","MKD","MLI","MMR","MNG","MAC", - "MNP","MTQ","MRT","MSR","MLT","MUS","MDV","MWI","MEX","MYS","MOZ","NAM","NCL", - "NER","NFK","NGA","NIC","NLD","NOR","NPL","NRU","NIU","NZL","OMN","PAN","PER", - "PYF","PNG","PHL","PAK","POL","SPM","PCN","PRI","PSE","PRT","PLW","PRY","QAT", - "REU","ROU","RUS","RWA","SAU","SLB","SYC","SDN","SWE","SGP","SHN","SVN","SJM", - "SVK","SLE","SMR","SEN","SOM","SUR","STP","SLV","SYR","SWZ","TCA","TCD","TF", - "TGO","THA","TJK","TKL","TLS","TKM","TUN","TON","TUR","TTO","TUV","TWN","TZA", - "UKR","UGA","UM","USA","URY","UZB","VAT","VCT","VEN","VGB","VIR","VNM","VUT", - "WLF","WSM","YEM","YT","SRB","ZAF","ZMB","MNE","ZWE","A1","A2","O1", - "ALA","GGY","IMN","JEY","BLM","MAF" - ); - - public static $COUNTRY_NAMES = array( - "", "Asia/Pacific Region", "Europe", "Andorra", "United Arab Emirates", - "Afghanistan", "Antigua and Barbuda", "Anguilla", "Albania", "Armenia", - "Netherlands Antilles", "Angola", "Antarctica", "Argentina", "American Samoa", - "Austria", "Australia", "Aruba", "Azerbaijan", "Bosnia and Herzegovina", - "Barbados", "Bangladesh", "Belgium", "Burkina Faso", "Bulgaria", "Bahrain", - "Burundi", "Benin", "Bermuda", "Brunei Darussalam", "Bolivia", "Brazil", - "Bahamas", "Bhutan", "Bouvet Island", "Botswana", "Belarus", "Belize", - "Canada", "Cocos (Keeling) Islands", "Congo, The Democratic Republic of the", - "Central African Republic", "Congo", "Switzerland", "Cote D'Ivoire", "Cook Islands", - "Chile", "Cameroon", "China", "Colombia", "Costa Rica", "Cuba", "Cape Verde", - "Christmas Island", "Cyprus", "Czech Republic", "Germany", "Djibouti", - "Denmark", "Dominica", "Dominican Republic", "Algeria", "Ecuador", "Estonia", - "Egypt", "Western Sahara", "Eritrea", "Spain", "Ethiopia", "Finland", "Fiji", - "Falkland Islands (Malvinas)", "Micronesia, Federated States of", "Faroe Islands", - "France", "France, Metropolitan", "Gabon", "United Kingdom", - "Grenada", "Georgia", "French Guiana", "Ghana", "Gibraltar", "Greenland", - "Gambia", "Guinea", "Guadeloupe", "Equatorial Guinea", "Greece", "South Georgia and the South Sandwich Islands", - "Guatemala", "Guam", "Guinea-Bissau", - "Guyana", "Hong Kong", "Heard Island and McDonald Islands", "Honduras", - "Croatia", "Haiti", "Hungary", "Indonesia", "Ireland", "Israel", "India", - "British Indian Ocean Territory", "Iraq", "Iran, Islamic Republic of", - "Iceland", "Italy", "Jamaica", "Jordan", "Japan", "Kenya", "Kyrgyzstan", - "Cambodia", "Kiribati", "Comoros", "Saint Kitts and Nevis", "Korea, Democratic People's Republic of", - "Korea, Republic of", "Kuwait", "Cayman Islands", - "Kazakstan", "Lao People's Democratic Republic", "Lebanon", "Saint Lucia", - "Liechtenstein", "Sri Lanka", "Liberia", "Lesotho", "Lithuania", "Luxembourg", - "Latvia", "Libyan Arab Jamahiriya", "Morocco", "Monaco", "Moldova, Republic of", - "Madagascar", "Marshall Islands", "Macedonia", - "Mali", "Myanmar", "Mongolia", "Macau", "Northern Mariana Islands", - "Martinique", "Mauritania", "Montserrat", "Malta", "Mauritius", "Maldives", - "Malawi", "Mexico", "Malaysia", "Mozambique", "Namibia", "New Caledonia", - "Niger", "Norfolk Island", "Nigeria", "Nicaragua", "Netherlands", "Norway", - "Nepal", "Nauru", "Niue", "New Zealand", "Oman", "Panama", "Peru", "French Polynesia", - "Papua New Guinea", "Philippines", "Pakistan", "Poland", "Saint Pierre and Miquelon", - "Pitcairn Islands", "Puerto Rico", "Palestinian Territory", - "Portugal", "Palau", "Paraguay", "Qatar", "Reunion", "Romania", - "Russian Federation", "Rwanda", "Saudi Arabia", "Solomon Islands", - "Seychelles", "Sudan", "Sweden", "Singapore", "Saint Helena", "Slovenia", - "Svalbard and Jan Mayen", "Slovakia", "Sierra Leone", "San Marino", "Senegal", - "Somalia", "Suriname", "Sao Tome and Principe", "El Salvador", "Syrian Arab Republic", - "Swaziland", "Turks and Caicos Islands", "Chad", "French Southern Territories", - "Togo", "Thailand", "Tajikistan", "Tokelau", "Turkmenistan", - "Tunisia", "Tonga", "Timor-Leste", "Turkey", "Trinidad and Tobago", "Tuvalu", - "Taiwan", "Tanzania, United Republic of", "Ukraine", - "Uganda", "United States Minor Outlying Islands", "United States", "Uruguay", - "Uzbekistan", "Holy See (Vatican City State)", "Saint Vincent and the Grenadines", - "Venezuela", "Virgin Islands, British", "Virgin Islands, U.S.", - "Vietnam", "Vanuatu", "Wallis and Futuna", "Samoa", "Yemen", "Mayotte", - "Serbia", "South Africa", "Zambia", "Montenegro", "Zimbabwe", - "Anonymous Proxy","Satellite Provider","Other", - "Aland Islands","Guernsey","Isle of Man","Jersey","Saint Barthelemy","Saint Martin" - ); - - // storage / caching flags - const STANDARD = 0; - const MEMORY_CACHE = 1; - const SHARED_MEMORY = 2; - - // Database structure constants - const COUNTRY_BEGIN = 16776960; - const STATE_BEGIN_REV0 = 16700000; - const STATE_BEGIN_REV1 = 16000000; - - const STRUCTURE_INFO_MAX_SIZE = 20; - const DATABASE_INFO_MAX_SIZE = 100; - const COUNTRY_EDITION = 106; - const REGION_EDITION_REV0 = 112; - const REGION_EDITION_REV1 = 3; - const CITY_EDITION_REV0 = 111; - const CITY_EDITION_REV1 = 2; - const ORG_EDITION = 110; - const SEGMENT_RECORD_LENGTH = 3; - const STANDARD_RECORD_LENGTH = 3; - const ORG_RECORD_LENGTH = 4; - const MAX_RECORD_LENGTH = 4; - const MAX_ORG_RECORD_LENGTH = 300; - const FULL_RECORD_LENGTH = 50; - - const US_OFFSET = 1; - const CANADA_OFFSET = 677; - const WORLD_OFFSET = 1353; - const FIPS_RANGE = 360; - - // SHMOP memory address - const SHM_KEY = 0x4f415401; - - /** - * @var int - */ - private $flags = 0; - - /** - * @var resource - */ - private $filehandle; - - /** - * @var string - */ - private $memoryBuffer; - - /** - * @var int - */ - private $databaseType; - - /** - * @var int - */ - private $databaseSegments; - - /** - * @var int - */ - private $recordLength; - - /** - * The memory addr "id" for use with SHMOP. - * @var int - */ - private $shmid; - - /** - * Support for singleton pattern. - * @var array - */ - private static $instances = array(); - - /** - * Construct a Net_GeoIP instance. - * You should use the getInstance() method if you plan to use multiple databases or - * the same database from several different places in your script. - * - * @param string $filename Path to binary geoip database. - * @param int $flags Flags - * - * @see getInstance() - */ - public function __construct($filename = null, $flags = null) - { - if ($filename !== null) { - $this->open($filename, $flags); - } - // store the instance, so that it will be returned by a call to - // getInstance() (with the same db filename). - self::$instances[$filename] = $this; - } - - /** - * Calls the close() function to free any resources. - * @see close() - * - * COMMENTED OUT TO ADDRESS BUG IN PHP 5.0.4, 5.0.5dev. THIS RESOURCE - * SHOULD AUTOMATICALLY BE FREED AT SCRIPT CLOSE, SO A DESTRUCTOR - * IS A GOOD IDEA BUT NOT NECESSARILY A NECESSITY. - public function __destruct() - { - $this->close(); - } - */ - - /** - * Singleton method, use this to get an instance and avoid re-parsing the db. - * - * Unique instances are instantiated based on the filename of the db. The flags - * are ignored -- in that requests to for instance with same filename but different - * flags will return the already-instantiated instance. For example: - * - * // create new instance with memory_cache enabled - * $geoip = Net_GeoIP::getInstance('C:\mydb.dat', Net_GeoIP::MEMORY_CACHE); - * .... - * - * // later in code, request instance with no flags specified. - * $geoip = Net_GeoIP::getInstance('C:\mydb.dat'); - * - * // Normally this means no MEMORY_CACHE but since an instance - * // with memory cache enabled has already been created for 'C:\mydb.dat', the - * // existing instance (with memory cache) will be returned. - * - * - * NOTE: You can only use SHARED_MEMORY flag for one instance! Any subsquent instances - * that attempt to use the SHARED_MEMORY will use the *same* shared memory, which will break - * your script. - * - * @param string $filename Filename - * @param int $flags Flags that control class behavior. - * + Net_GeoIp::SHARED_MEMORY - * Use SHMOP to share a db among multiple PHP instances. - * NOTE: ONLY ONE GEOIP INSTANCE CAN USE SHARED MEMORY!!! - * + Net_GeoIp::MEMORY_CACHE - * Store the full contents of the database in memory for current script. - * This is useful if you access the database several times in a script. - * + Net_GeoIp::STANDARD - * [default] standard no-cache version. - * - * @return Net_GeoIP - */ - public static function getInstance($filename = null, $flags = null) - { - if (!isset(self::$instances[$filename])) { - self::$instances[$filename] = new Net_GeoIP($filename, $flags); - } - return self::$instances[$filename]; - } - - /** - * Opens geoip database at filename and with specified flags. - * - * @param string $filename File to open - * @param int $flags Flags - * - * @return void - * - * @throws PEAR_Exception if unable to open specified file or shared memory. - */ - public function open($filename, $flags = null) - { - if ($flags !== null) { - $this->flags = $flags; - } - if ($this->flags & self::SHARED_MEMORY) { - $this->shmid = @shmop_open(self::SHM_KEY, "a", 0, 0); - if ($this->shmid === false) { - $this->loadSharedMemory($filename); - $this->shmid = @shmop_open(self::SHM_KEY, "a", 0, 0); - if ($this->shmid === false) { // should never be false as loadSharedMemory() will throw Exc if cannot create - throw new PEAR_Exception("Unable to open shared memory at key: " . dechex(self::SHM_KEY)); - } - } - } else { - $this->filehandle = fopen($filename, "rb"); - if (!$this->filehandle) { - throw new PEAR_Exception("Unable to open file: $filename"); - } - if ($this->flags & self::MEMORY_CACHE) { - $s_array = fstat($this->filehandle); - $this->memoryBuffer = fread($this->filehandle, $s_array['size']); - } - } - $this->setupSegments(); - } - - /** - * Loads the database file into shared memory. - * - * @param string $filename Path to database file to read into shared memory. - * - * @return void - * - * @throws PEAR_Exception - if unable to read the db file. - */ - protected function loadSharedMemory($filename) - { - $fp = fopen($filename, "rb"); - if (!$fp) { - throw new PEAR_Exception("Unable to open file: $filename"); - } - $s_array = fstat($fp); - $size = $s_array['size']; - - if ($shmid = @shmop_open(self::SHM_KEY, "w", 0, 0)) { - shmop_delete($shmid); - shmop_close($shmid); - } - - if ($shmid = @shmop_open(self::SHM_KEY, "c", 0644, $size)) { - $offset = 0; - while ($offset < $size) { - $buf = fread($fp, 524288); - shmop_write($shmid, $buf, $offset); - $offset += 524288; - } - shmop_close($shmid); - } - - fclose($fp); - } - - /** - * Parses the database file to determine what kind of database is being used and setup - * segment sizes and start points that will be used by the seek*() methods later. - * - * @return void - */ - protected function setupSegments() - { - - $this->databaseType = self::COUNTRY_EDITION; - $this->recordLength = self::STANDARD_RECORD_LENGTH; - - if ($this->flags & self::SHARED_MEMORY) { - - $offset = shmop_size($this->shmid) - 3; - for ($i = 0; $i < self::STRUCTURE_INFO_MAX_SIZE; $i++) { - $delim = shmop_read($this->shmid, $offset, 3); - $offset += 3; - if ($delim == (chr(255).chr(255).chr(255))) { - $this->databaseType = ord(shmop_read($this->shmid, $offset, 1)); - $offset++; - if ($this->databaseType === self::REGION_EDITION_REV0) { - $this->databaseSegments = self::STATE_BEGIN_REV0; - } elseif ($this->databaseType === self::REGION_EDITION_REV1) { - $this->databaseSegments = self::STATE_BEGIN_REV1; - } elseif (($this->databaseType === self::CITY_EDITION_REV0) - || ($this->databaseType === self::CITY_EDITION_REV1) - || ($this->databaseType === self::ORG_EDITION)) { - $this->databaseSegments = 0; - $buf = shmop_read($this->shmid, $offset, self::SEGMENT_RECORD_LENGTH); - for ($j = 0; $j < self::SEGMENT_RECORD_LENGTH; $j++) { - $this->databaseSegments += (ord($buf[$j]) << ($j * 8)); - } - if ($this->databaseType === self::ORG_EDITION) { - $this->recordLength = self::ORG_RECORD_LENGTH; - } - } - break; - } else { - $offset -= 4; - } - } - if ($this->databaseType == self::COUNTRY_EDITION) { - $this->databaseSegments = self::COUNTRY_BEGIN; - } - - } else { - - $filepos = ftell($this->filehandle); - fseek($this->filehandle, -3, SEEK_END); - for ($i = 0; $i < self::STRUCTURE_INFO_MAX_SIZE; $i++) { - $delim = fread($this->filehandle, 3); - if ($delim == (chr(255).chr(255).chr(255))) { - $this->databaseType = ord(fread($this->filehandle, 1)); - if ($this->databaseType === self::REGION_EDITION_REV0) { - $this->databaseSegments = self::STATE_BEGIN_REV0; - } elseif ($this->databaseType === self::REGION_EDITION_REV1) { - $this->databaseSegments = self::STATE_BEGIN_REV1; - } elseif ($this->databaseType === self::CITY_EDITION_REV0 - || $this->databaseType === self::CITY_EDITION_REV1 - || $this->databaseType === self::ORG_EDITION) { - $this->databaseSegments = 0; - $buf = fread($this->filehandle, self::SEGMENT_RECORD_LENGTH); - for ($j = 0; $j < self::SEGMENT_RECORD_LENGTH; $j++) { - $this->databaseSegments += (ord($buf[$j]) << ($j * 8)); - } - if ($this->databaseType === self::ORG_EDITION) { - $this->recordLength = self::ORG_RECORD_LENGTH; - } - } - break; - } else { - fseek($this->filehandle, -4, SEEK_CUR); - } - } - if ($this->databaseType === self::COUNTRY_EDITION) { - $this->databaseSegments = self::COUNTRY_BEGIN; - } - fseek($this->filehandle, $filepos, SEEK_SET); - - } - } - - /** - * Closes the geoip database. - * - * @return int Status of close command. - */ - public function close() - { - if ($this->flags & self::SHARED_MEMORY) { - return shmop_close($this->shmid); - } else { - // right now even if file was cached in RAM the file was not closed - // so it's safe to expect no error w/ fclose() - return fclose($this->filehandle); - } - } - - /** - * Get the country index. - * - * This method is called by the lookupCountryCode() and lookupCountryName() - * methods. It lookups up the index ('id') for the country which is the key - * for the code and name. - * - * @param string $addr IP address (hostname not allowed) - * - * @throws PEAR_Exception - if IP address is invalid. - * - if database type is incorrect - * - * @return string ID for the country - */ - protected function lookupCountryId($addr) - { - $ipnum = ip2long($addr); - if ($ipnum === false) { - throw new PEAR_Exception("Invalid IP address: " . var_export($addr, true), self::ERR_INVALID_IP); - } - if ($this->databaseType !== self::COUNTRY_EDITION) { - throw new PEAR_Exception("Invalid database type; lookupCountry*() methods expect Country database."); - } - return $this->seekCountry($ipnum) - self::COUNTRY_BEGIN; - } - - /** - * Returns 2-letter country code (e.g. 'CA') for specified IP address. - * Use this method if you have a Country database. - * - * @param string $addr IP address (hostname not allowed). - * - * @return string 2-letter country code - * - * @throws PEAR_Exception (see lookupCountryId()) - * @see lookupCountryId() - */ - public function lookupCountryCode($addr) - { - return self::$COUNTRY_CODES[$this->lookupCountryId($addr)]; - } - - /** - * Returns full country name for specified IP address. - * Use this method if you have a Country database. - * - * @param string $addr IP address (hostname not allowed). - * - * @return string Country name - * @throws PEAR_Exception (see lookupCountryId()) - * @see lookupCountryId() - */ - public function lookupCountryName($addr) - { - return self::$COUNTRY_NAMES[$this->lookupCountryId($addr)]; - } - - /** - * Using the record length and appropriate start points, seek to the country that corresponds - * to the converted IP address integer. - * - * @param int $ipnum Result of ip2long() conversion. - * - * @return int Offset of start of record. - * @throws PEAR_Exception - if fseek() fails on the file or no results after traversing the database (indicating corrupt db). - */ - protected function seekCountry($ipnum) - { - $offset = 0; - for ($depth = 31; $depth >= 0; --$depth) { - if ($this->flags & self::MEMORY_CACHE) { - $buf = substr($this->memoryBuffer, 2 * $this->recordLength * $offset, 2 * $this->recordLength); - } elseif ($this->flags & self::SHARED_MEMORY) { - $buf = shmop_read($this->shmid, 2 * $this->recordLength * $offset, 2 * $this->recordLength); - } else { - if (fseek($this->filehandle, 2 * $this->recordLength * $offset, SEEK_SET) !== 0) { - throw new PEAR_Exception("fseek failed"); - } - $buf = fread($this->filehandle, 2 * $this->recordLength); - } - $x = array(0,0); - for ($i = 0; $i < 2; ++$i) { - for ($j = 0; $j < $this->recordLength; ++$j) { - $x[$i] += ord($buf[$this->recordLength * $i + $j]) << ($j * 8); - } - } - if ($ipnum & (1 << $depth)) { - if ($x[1] >= $this->databaseSegments) { - return $x[1]; - } - $offset = $x[1]; - } else { - if ($x[0] >= $this->databaseSegments) { - return $x[0]; - } - $offset = $x[0]; - } - } - throw new PEAR_Exception("Error traversing database - perhaps it is corrupt?"); - } - - /** - * Lookup the organization (or ISP) for given IP address. - * Use this method if you have an Organization/ISP database. - * - * @param string $addr IP address (hostname not allowed). - * - * @throws PEAR_Exception - if IP address is invalid. - * - if database is of wrong type - * - * @return string The organization - */ - public function lookupOrg($addr) - { - $ipnum = ip2long($addr); - if ($ipnum === false) { - throw new PEAR_Exception("Invalid IP address: " . var_export($addr, true), self::ERR_INVALID_IP); - } - if ($this->databaseType !== self::ORG_EDITION) { - throw new PEAR_Exception("Invalid database type; lookupOrg() method expects Org/ISP database.", self::ERR_DB_FORMAT); - } - return $this->getOrg($ipnum); - } - - /** - * Lookup the region for given IP address. - * Use this method if you have a Region database. - * - * @param string $addr IP address (hostname not allowed). - * - * @return array Array containing country code and region: array($country_code, $region) - * - * @throws PEAR_Exception - if IP address is invalid. - */ - public function lookupRegion($addr) - { - $ipnum = ip2long($addr); - if ($ipnum === false) { - throw new PEAR_Exception("Invalid IP address: " . var_export($addr, true), self::ERR_INVALID_IP); - } - if ($this->databaseType !== self::REGION_EDITION_REV0 && $this->databaseType !== self::REGION_EDITION_REV1) { - throw new PEAR_Exception("Invalid database type; lookupRegion() method expects Region database.", self::ERR_DB_FORMAT); - } - return $this->getRegion($ipnum); - } - - /** - * Lookup the location record for given IP address. - * Use this method if you have a City database. - * - * @param string $addr IP address (hostname not allowed). - * - * @return Net_GeoIP_Location The full location record. - * - * @throws PEAR_Exception - if IP address is invalid. - */ - public function lookupLocation($addr) - { - include_once 'Net/GeoIP/Location.php'; - $ipnum = ip2long($addr); - if ($ipnum === false) { - throw new PEAR_Exception("Invalid IP address: " . var_export($addr, true), self::ERR_INVALID_IP); - } - if ($this->databaseType !== self::CITY_EDITION_REV0 && $this->databaseType !== self::CITY_EDITION_REV1) { - throw new PEAR_Exception("Invalid database type; lookupLocation() method expects City database."); - } - return $this->getRecord($ipnum); - } - - /** - * Seek and return organization (or ISP) name for converted IP addr. - * - * @param int $ipnum Converted IP address. - * - * @return string The organization - */ - protected function getOrg($ipnum) - { - $seek_org = $this->seekCountry($ipnum); - if ($seek_org == $this->databaseSegments) { - return null; - } - $record_pointer = $seek_org + (2 * $this->recordLength - 1) * $this->databaseSegments; - if ($this->flags & self::SHARED_MEMORY) { - $org_buf = shmop_read($this->shmid, $record_pointer, self::MAX_ORG_RECORD_LENGTH); - } else { - fseek($this->filehandle, $record_pointer, SEEK_SET); - $org_buf = fread($this->filehandle, self::MAX_ORG_RECORD_LENGTH); - } - $org_buf = substr($org_buf, 0, strpos($org_buf, 0)); - return $org_buf; - } - - /** - * Seek and return the region info (array containing country code and region name) for converted IP addr. - * - * @param int $ipnum Converted IP address. - * - * @return array Array containing country code and region: array($country_code, $region) - */ - protected function getRegion($ipnum) - { - if ($this->databaseType == self::REGION_EDITION_REV0) { - $seek_region = $this->seekCountry($ipnum) - self::STATE_BEGIN_REV0; - if ($seek_region >= 1000) { - $country_code = "US"; - $region = chr(($seek_region - 1000)/26 + 65) . chr(($seek_region - 1000)%26 + 65); - } else { - $country_code = self::$COUNTRY_CODES[$seek_region]; - $region = ""; - } - return array($country_code, $region); - } elseif ($this->databaseType == self::REGION_EDITION_REV1) { - $seek_region = $this->seekCountry($ipnum) - self::STATE_BEGIN_REV1; - //print $seek_region; - if ($seek_region < self::US_OFFSET) { - $country_code = ""; - $region = ""; - } elseif ($seek_region < self::CANADA_OFFSET) { - $country_code = "US"; - $region = chr(($seek_region - self::US_OFFSET)/26 + 65) . chr(($seek_region - self::US_OFFSET)%26 + 65); - } elseif ($seek_region < self::WORLD_OFFSET) { - $country_code = "CA"; - $region = chr(($seek_region - self::CANADA_OFFSET)/26 + 65) . chr(($seek_region - self::CANADA_OFFSET)%26 + 65); - } else { - $country_code = self::$COUNTRY_CODES[($seek_region - self::WORLD_OFFSET) / self::FIPS_RANGE]; - $region = ""; - } - return array ($country_code,$region); - } - } - - /** - * Seek and populate Net_GeoIP_Location object for converted IP addr. - * Note: this - * - * @param int $ipnum Converted IP address. - * - * @return Net_GeoIP_Location - */ - protected function getRecord($ipnum) - { - $seek_country = $this->seekCountry($ipnum); - if ($seek_country == $this->databaseSegments) { - return null; - } - - $record_pointer = $seek_country + (2 * $this->recordLength - 1) * $this->databaseSegments; - - if ($this->flags & self::SHARED_MEMORY) { - $record_buf = shmop_read($this->shmid, $record_pointer, self::FULL_RECORD_LENGTH); - } else { - fseek($this->filehandle, $record_pointer, SEEK_SET); - $record_buf = fread($this->filehandle, self::FULL_RECORD_LENGTH); - } - - $record = new Net_GeoIP_Location(); - - $record_buf_pos = 0; - $char = ord(substr($record_buf, $record_buf_pos, 1)); - - $record->countryCode = self::$COUNTRY_CODES[$char]; - $record->countryCode3 = self::$COUNTRY_CODES3[$char]; - $record->countryName = self::$COUNTRY_NAMES[$char]; - $record_buf_pos++; - $str_length = 0; - - //get region - $char = ord(substr($record_buf, $record_buf_pos+$str_length, 1)); - while ($char != 0) { - $str_length++; - $char = ord(substr($record_buf, $record_buf_pos+$str_length, 1)); - } - if ($str_length > 0) { - $record->region = substr($record_buf, $record_buf_pos, $str_length); - } - $record_buf_pos += $str_length + 1; - $str_length = 0; - - //get city - $char = ord(substr($record_buf, $record_buf_pos+$str_length, 1)); - while ($char != 0) { - $str_length++; - $char = ord(substr($record_buf, $record_buf_pos+$str_length, 1)); - } - if ($str_length > 0) { - $record->city = substr($record_buf, $record_buf_pos, $str_length); - } - $record_buf_pos += $str_length + 1; - $str_length = 0; - - //get postal code - $char = ord(substr($record_buf, $record_buf_pos+$str_length, 1)); - while ($char != 0) { - $str_length++; - $char = ord(substr($record_buf, $record_buf_pos+$str_length, 1)); - } - if ($str_length > 0) { - $record->postalCode = substr($record_buf, $record_buf_pos, $str_length); - } - $record_buf_pos += $str_length + 1; - $str_length = 0; - $latitude = 0; - $longitude = 0; - for ($j = 0;$j < 3; ++$j) { - $char = ord(substr($record_buf, $record_buf_pos++, 1)); - $latitude += ($char << ($j * 8)); - } - $record->latitude = ($latitude/10000) - 180; - - for ($j = 0;$j < 3; ++$j) { - $char = ord(substr($record_buf, $record_buf_pos++, 1)); - $longitude += ($char << ($j * 8)); - } - $record->longitude = ($longitude/10000) - 180; - - if ($this->databaseType === self::CITY_EDITION_REV1) { - $dmaarea_combo = 0; - if ($record->countryCode == "US") { - for ($j = 0;$j < 3;++$j) { - $char = ord(substr($record_buf, $record_buf_pos++, 1)); - $dmaarea_combo += ($char << ($j * 8)); - } - $record->dmaCode = floor($dmaarea_combo/1000); - $record->areaCode = $dmaarea_combo%1000; - } - } - - return $record; - } - -} - --- a/owa/modules/maxmind_geoip/includes/Net_GeoIP-1.0.0RC3/Net/GeoIP/DMA.php +++ /dev/null @@ -1,315 +1,1 @@ - (original Maxmind version) | - * | Hans Lellelid | - * +----------------------------------------------------------------------+ - * - * @category Net - * @package Net_GeoIP - * @author Hans Lellelid - * @license LGPL http://www.gnu.org/licenses/lgpl.txt - * @link http://pear.php.net/package/Net_GeoIp - * $Id: DMA.php 296755 2010-03-24 22:22:06Z clockwerx $ - */ - -/** - * Static class to handle mapping of DMA codes to metro regions. - * - * Use this class with the dmaCode property of the Net_GeoIpLocation object. - * - * - * $region = Net_GeoIPDMA::getMetroRegion($record->dmaCode); - * - * - * @category Net - * @package Net_GeoIP - * @author Hans Lellelid - * @author Dmitri Snytkine - * @license LGPL http://www.gnu.org/licenses/lgpl.txt - * @version $Revision: 296755 $ - * @link http://pear.php.net/package/Net_GeoIp - */ -class Net_GeoIP_DMA -{ - /** - * Holds DMA -> Metro mapping. - * @var array - */ - private static $dmaMap; - - /** - * Initialize - * - * @return void - */ - public static function initialize() - { - self::$dmaMap = array( - 500 => 'Portland-Auburn, ME', - 501 => 'New York, NY', - 502 => 'Binghamton, NY', - 503 => 'Macon, GA', - 504 => 'Philadelphia, PA', - 505 => 'Detroit, MI', - 506 => 'Boston, MA', - 507 => 'Savannah, GA', - 508 => 'Pittsburgh, PA', - 509 => 'Ft Wayne, IN', - 510 => 'Cleveland, OH', - 511 => 'Washington, DC', - 512 => 'Baltimore, MD', - 513 => 'Flint, MI', - 514 => 'Buffalo, NY', - 515 => 'Cincinnati, OH', - 516 => 'Erie, PA', - 517 => 'Charlotte, NC', - 518 => 'Greensboro, NC', - 519 => 'Charleston, SC', - 520 => 'Augusta, GA', - 521 => 'Providence, RI', - 522 => 'Columbus, GA', - 523 => 'Burlington, VT', - 524 => 'Atlanta, GA', - 525 => 'Albany, GA', - 526 => 'Utica-Rome, NY', - 527 => 'Indianapolis, IN', - 528 => 'Miami, FL', - 529 => 'Louisville, KY', - 530 => 'Tallahassee, FL', - 531 => 'Tri-Cities, TN', - 532 => 'Albany-Schenectady-Troy, NY', - 533 => 'Hartford, CT', - 534 => 'Orlando, FL', - 535 => 'Columbus, OH', - 536 => 'Youngstown-Warren, OH', - 537 => 'Bangor, ME', - 538 => 'Rochester, NY', - 539 => 'Tampa, FL', - 540 => 'Traverse City-Cadillac, MI', - 541 => 'Lexington, KY', - 542 => 'Dayton, OH', - 543 => 'Springfield-Holyoke, MA', - 544 => 'Norfolk-Portsmouth, VA', - 545 => 'Greenville-New Bern-Washington, NC', - 546 => 'Columbia, SC', - 547 => 'Toledo, OH', - 548 => 'West Palm Beach, FL', - 549 => 'Watertown, NY', - 550 => 'Wilmington, NC', - 551 => 'Lansing, MI', - 552 => 'Presque Isle, ME', - 553 => 'Marquette, MI', - 554 => 'Wheeling, WV', - 555 => 'Syracuse, NY', - 556 => 'Richmond-Petersburg, VA', - 557 => 'Knoxville, TN', - 558 => 'Lima, OH', - 559 => 'Bluefield-Beckley-Oak Hill, WV', - 560 => 'Raleigh-Durham, NC', - 561 => 'Jacksonville, FL', - 563 => 'Grand Rapids, MI', - 564 => 'Charleston-Huntington, WV', - 565 => 'Elmira, NY', - 566 => 'Harrisburg-Lancaster-Lebanon-York, PA', - 567 => 'Greenville-Spartenburg, SC', - 569 => 'Harrisonburg, VA', - 570 => 'Florence-Myrtle Beach, SC', - 571 => 'Ft Myers, FL', - 573 => 'Roanoke-Lynchburg, VA', - 574 => 'Johnstown-Altoona, PA', - 575 => 'Chattanooga, TN', - 576 => 'Salisbury, MD', - 577 => 'Wilkes Barre-Scranton, PA', - 581 => 'Terre Haute, IN', - 582 => 'Lafayette, IN', - 583 => 'Alpena, MI', - 584 => 'Charlottesville, VA', - 588 => 'South Bend, IN', - 592 => 'Gainesville, FL', - 596 => 'Zanesville, OH', - 597 => 'Parkersburg, WV', - 598 => 'Clarksburg-Weston, WV', - 600 => 'Corpus Christi, TX', - 602 => 'Chicago, IL', - 603 => 'Joplin-Pittsburg, MO', - 604 => 'Columbia-Jefferson City, MO', - 605 => 'Topeka, KS', - 606 => 'Dothan, AL', - 609 => 'St Louis, MO', - 610 => 'Rockford, IL', - 611 => 'Rochester-Mason City-Austin, MN', - 612 => 'Shreveport, LA', - 613 => 'Minneapolis-St Paul, MN', - 616 => 'Kansas City, MO', - 617 => 'Milwaukee, WI', - 618 => 'Houston, TX', - 619 => 'Springfield, MO', - 620 => 'Tuscaloosa, AL', - 622 => 'New Orleans, LA', - 623 => 'Dallas-Fort Worth, TX', - 624 => 'Sioux City, IA', - 625 => 'Waco-Temple-Bryan, TX', - 626 => 'Victoria, TX', - 627 => 'Wichita Falls, TX', - 628 => 'Monroe, LA', - 630 => 'Birmingham, AL', - 631 => 'Ottumwa-Kirksville, IA', - 632 => 'Paducah, KY', - 633 => 'Odessa-Midland, TX', - 634 => 'Amarillo, TX', - 635 => 'Austin, TX', - 636 => 'Harlingen, TX', - 637 => 'Cedar Rapids-Waterloo, IA', - 638 => 'St Joseph, MO', - 639 => 'Jackson, TN', - 640 => 'Memphis, TN', - 641 => 'San Antonio, TX', - 642 => 'Lafayette, LA', - 643 => 'Lake Charles, LA', - 644 => 'Alexandria, LA', - 646 => 'Anniston, AL', - 647 => 'Greenwood-Greenville, MS', - 648 => 'Champaign-Springfield-Decatur, IL', - 649 => 'Evansville, IN', - 650 => 'Oklahoma City, OK', - 651 => 'Lubbock, TX', - 652 => 'Omaha, NE', - 656 => 'Panama City, FL', - 657 => 'Sherman, TX', - 658 => 'Green Bay-Appleton, WI', - 659 => 'Nashville, TN', - 661 => 'San Angelo, TX', - 662 => 'Abilene-Sweetwater, TX', - 669 => 'Madison, WI', - 670 => 'Ft Smith-Fay-Springfield, AR', - 671 => 'Tulsa, OK', - 673 => 'Columbus-Tupelo-West Point, MS', - 675 => 'Peoria-Bloomington, IL', - 676 => 'Duluth, MN', - 678 => 'Wichita, KS', - 679 => 'Des Moines, IA', - 682 => 'Davenport-Rock Island-Moline, IL', - 686 => 'Mobile, AL', - 687 => 'Minot-Bismarck-Dickinson, ND', - 691 => 'Huntsville, AL', - 692 => 'Beaumont-Port Author, TX', - 693 => 'Little Rock-Pine Bluff, AR', - 698 => 'Montgomery, AL', - 702 => 'La Crosse-Eau Claire, WI', - 705 => 'Wausau-Rhinelander, WI', - 709 => 'Tyler-Longview, TX', - 710 => 'Hattiesburg-Laurel, MS', - 711 => 'Meridian, MS', - 716 => 'Baton Rouge, LA', - 717 => 'Quincy, IL', - 718 => 'Jackson, MS', - 722 => 'Lincoln-Hastings, NE', - 724 => 'Fargo-Valley City, ND', - 725 => 'Sioux Falls, SD', - 734 => 'Jonesboro, AR', - 736 => 'Bowling Green, KY', - 737 => 'Mankato, MN', - 740 => 'North Platte, NE', - 743 => 'Anchorage, AK', - 744 => 'Honolulu, HI', - 745 => 'Fairbanks, AK', - 746 => 'Biloxi-Gulfport, MS', - 747 => 'Juneau, AK', - 749 => 'Laredo, TX', - 751 => 'Denver, CO', - 752 => 'Colorado Springs, CO', - 753 => 'Phoenix, AZ', - 754 => 'Butte-Bozeman, MT', - 755 => 'Great Falls, MT', - 756 => 'Billings, MT', - 757 => 'Boise, ID', - 758 => 'Idaho Falls-Pocatello, ID', - 759 => 'Cheyenne, WY', - 760 => 'Twin Falls, ID', - 762 => 'Missoula, MT', - 764 => 'Rapid City, SD', - 765 => 'El Paso, TX', - 766 => 'Helena, MT', - 767 => 'Casper-Riverton, WY', - 770 => 'Salt Lake City, UT', - 771 => 'Yuma, AZ', - 773 => 'Grand Junction, CO', - 789 => 'Tucson, AZ', - 790 => 'Albuquerque, NM', - 798 => 'Glendive, MT', - 800 => 'Bakersfield, CA', - 801 => 'Eugene, OR', - 802 => 'Eureka, CA', - 803 => 'Los Angeles, CA', - 804 => 'Palm Springs, CA', - 807 => 'San Francisco, CA', - 810 => 'Yakima-Pasco, WA', - 811 => 'Reno, NV', - 813 => 'Medford-Klamath Falls, OR', - 819 => 'Seattle-Tacoma, WA', - 820 => 'Portland, OR', - 821 => 'Bend, OR', - 825 => 'San Diego, CA', - 828 => 'Monterey-Salinas, CA', - 839 => 'Las Vegas, NV', - 855 => 'Santa Barbara, CA', - 862 => 'Sacramento, CA', - 866 => 'Fresno, CA', - 868 => 'Chico-Redding, CA', - 881 => 'Spokane, WA'); - } - - /** - * Lookup the metro region based on the provided DMA code. - * - * @param int $dmaCode The DMA code - * - * @return string Metro region name. - */ - public static function getMetroRegion($dmaCode) - { - if ($dmaCode === null) { - return null; - } - if (self::$dmaMap === null) { - self::initialize(); - } - return self::$dmaMap[$dmaCode]; - } - - /** - * Reverse lookup of DMA code if [exact] metro region name is known. - * - * @param string $metro Metro region name. - * - * @return int DMA code, or false if not found. - */ - public static function getDMACode($metro) - { - if (self::$dmaMap === null) { - self::initialize(); - } - return array_search($metro, self::$dmaMap); - } - -} + --- a/owa/modules/maxmind_geoip/includes/Net_GeoIP-1.0.0RC3/Net/GeoIP/Location.php +++ /dev/null @@ -1,202 +1,1 @@ - (original Maxmind version) | - * | Hans Lellelid | - * +----------------------------------------------------------------------+ - * - * @category Net - * @package Net_GeoIP - * @author Hans Lellelid - * @license LGPL http://www.gnu.org/licenses/lgpl.txt - * @link http://pear.php.net/package/Net_GeoIp - * $Id: Location.php 296763 2010-03-25 00:53:44Z clockwerx $ - */ - -/** - * This class represents a location record as returned by Net_GeoIP::lookupLocation(). - * - * This class is primarily a collection of values (the public properties of the class), but - * there is also a distance() method to calculate the km distance between two points. - * - * @category Net - * @package Net_GeoIP - * @author Hans Lellelid - * @author Dmitri Snytkine - * @license LGPL http://www.gnu.org/licenses/lgpl.txt - * @version $Revision: 296763 $ - * @link http://pear.php.net/package/Net_GeoIp - * @see Net_GeoIP::lookupLocation() - */ -class Net_GeoIP_Location implements Serializable -{ - protected $aData = array( - 'countryCode' => null, - 'countryCode3' => null, - 'countryName' => null, - 'region' => null, - 'city' => null, - 'postalCode' => null, - 'latitude' => null, - 'longitude' => null, - 'areaCode' => null, - 'dmaCode' => null - ); - - - /** - * Calculate the distance in km between two points. - * - * @param Net_GeoIP_Location $loc The other point to which distance will be calculated. - * - * @return float The number of km between two points on the globe. - */ - public function distance(Net_GeoIP_Location $loc) - { - // ideally these should be class constants, but class constants - // can't be operations. - $RAD_CONVERT = M_PI / 180; - $EARTH_DIAMETER = 2 * 6378.2; - - $lat1 = $this->latitude; - $lon1 = $this->longitude; - $lat2 = $loc->latitude; - $lon2 = $loc->longitude; - - // convert degrees to radians - $lat1 *= $RAD_CONVERT; - $lat2 *= $RAD_CONVERT; - - // find the deltas - $delta_lat = $lat2 - $lat1; - $delta_lon = ($lon2 - $lon1) * $RAD_CONVERT; - - // Find the great circle distance - $temp = pow(sin($delta_lat/2), 2) + cos($lat1) * cos($lat2) * pow(sin($delta_lon/2), 2); - return $EARTH_DIAMETER * atan2(sqrt($temp), sqrt(1-$temp)); - } - - /** - * magic method to make it possible - * to store this object in cache when - * automatic serialization is on - * Specifically it makes it possible to store - * this object in memcache - * - * @return array - */ - public function serialize() - { - return serialize($this->aData); - } - - /** - * unserialize a representation of the object - * - * @param array $serialized The serialized representation of the location - * - * @return void - */ - public function unserialize($serialized) - { - $this->aData = unserialize($serialized); - } - - - /** - * Setter for elements of $this->aData array - * - * @param string $name The variable to set - * @param string $val The value - * - * @return object $this object - */ - public function set($name, $val) - { - if (array_key_exists($name, $this->aData)) { - $this->aData[$name] = $val; - } - - return $this; - } - - public function __set($name, $val) - { - return $this->set($name, $val); - } - - /** - * Getter for $this->aData array - * - * @return array - */ - public function getData() - { - return $this->aData; - } - - - /** - * Magic method to get value from $this->aData array - * - * @param string $name The var to get - * - * @return mixed string if value exists or null if it is empty of - * just does not exist - */ - public function __get($name) - { - if (array_key_exists($name, $this->aData)) { - return $this->aData[$name]; - } - - return null; - } - - - /** - * String representation of the object - * - * @return string text and result of print_r of $this->aData array - */ - public function __toString() - { - return 'object of type '.__CLASS__.'. data: '.implode(',', $this->aData); - } - - - /** - * Magic method - * makes it possible to check if specific record exists - * and also makes it possible to use empty() on any property - * - * @param strign $name The name of the var to check - * - * @return bool - */ - public function __isset($name) - { - return (null !== $this->__get($name)); - } - -} --- a/owa/modules/maxmind_geoip/includes/PEAR-1.9.1/LICENSE +++ /dev/null @@ -1,28 +1,1 @@ -Copyright (c) 1997-2009, - Stig Bakken , - Gregory Beaver , - Helgi Þormar Þorbjörnsson , - Tomas V.V.Cox , - Martin Jansen . -All rights reserved. -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - * 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. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT OWNER OR CONTRIBUTORS 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. - --- a/owa/modules/maxmind_geoip/includes/PEAR-1.9.1/PEAR/Exception.php +++ /dev/null @@ -1,389 +1,1 @@ - - * @author Hans Lellelid - * @author Bertrand Mansion - * @author Greg Beaver - * @copyright 1997-2009 The Authors - * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version CVS: $Id: Exception.php 296939 2010-03-27 16:24:43Z dufuz $ - * @link http://pear.php.net/package/PEAR - * @since File available since Release 1.3.3 - */ - -/** - * Base PEAR_Exception Class - * - * 1) Features: - * - * - Nestable exceptions (throw new PEAR_Exception($msg, $prev_exception)) - * - Definable triggers, shot when exceptions occur - * - Pretty and informative error messages - * - Added more context info available (like class, method or cause) - * - cause can be a PEAR_Exception or an array of mixed - * PEAR_Exceptions/PEAR_ErrorStack warnings - * - callbacks for specific exception classes and their children - * - * 2) Ideas: - * - * - Maybe a way to define a 'template' for the output - * - * 3) Inherited properties from PHP Exception Class: - * - * protected $message - * protected $code - * protected $line - * protected $file - * private $trace - * - * 4) Inherited methods from PHP Exception Class: - * - * __clone - * __construct - * getMessage - * getCode - * getFile - * getLine - * getTraceSafe - * getTraceSafeAsString - * __toString - * - * 5) Usage example - * - * - * require_once 'PEAR/Exception.php'; - * - * class Test { - * function foo() { - * throw new PEAR_Exception('Error Message', ERROR_CODE); - * } - * } - * - * function myLogger($pear_exception) { - * echo $pear_exception->getMessage(); - * } - * // each time a exception is thrown the 'myLogger' will be called - * // (its use is completely optional) - * PEAR_Exception::addObserver('myLogger'); - * $test = new Test; - * try { - * $test->foo(); - * } catch (PEAR_Exception $e) { - * print $e; - * } - * - * - * @category pear - * @package PEAR - * @author Tomas V.V.Cox - * @author Hans Lellelid - * @author Bertrand Mansion - * @author Greg Beaver - * @copyright 1997-2009 The Authors - * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.9.1 - * @link http://pear.php.net/package/PEAR - * @since Class available since Release 1.3.3 - * - */ -class PEAR_Exception extends Exception -{ - const OBSERVER_PRINT = -2; - const OBSERVER_TRIGGER = -4; - const OBSERVER_DIE = -8; - protected $cause; - private static $_observers = array(); - private static $_uniqueid = 0; - private $_trace; - - /** - * Supported signatures: - * - PEAR_Exception(string $message); - * - PEAR_Exception(string $message, int $code); - * - PEAR_Exception(string $message, Exception $cause); - * - PEAR_Exception(string $message, Exception $cause, int $code); - * - PEAR_Exception(string $message, PEAR_Error $cause); - * - PEAR_Exception(string $message, PEAR_Error $cause, int $code); - * - PEAR_Exception(string $message, array $causes); - * - PEAR_Exception(string $message, array $causes, int $code); - * @param string exception message - * @param int|Exception|PEAR_Error|array|null exception cause - * @param int|null exception code or null - */ - public function __construct($message, $p2 = null, $p3 = null) - { - if (is_int($p2)) { - $code = $p2; - $this->cause = null; - } elseif (is_object($p2) || is_array($p2)) { - // using is_object allows both Exception and PEAR_Error - if (is_object($p2) && !($p2 instanceof Exception)) { - if (!class_exists('PEAR_Error') || !($p2 instanceof PEAR_Error)) { - throw new PEAR_Exception('exception cause must be Exception, ' . - 'array, or PEAR_Error'); - } - } - $code = $p3; - if (is_array($p2) && isset($p2['message'])) { - // fix potential problem of passing in a single warning - $p2 = array($p2); - } - $this->cause = $p2; - } else { - $code = null; - $this->cause = null; - } - parent::__construct($message, $code); - $this->signal(); - } - - /** - * @param mixed $callback - A valid php callback, see php func is_callable() - * - A PEAR_Exception::OBSERVER_* constant - * - An array(const PEAR_Exception::OBSERVER_*, - * mixed $options) - * @param string $label The name of the observer. Use this if you want - * to remove it later with removeObserver() - */ - public static function addObserver($callback, $label = 'default') - { - self::$_observers[$label] = $callback; - } - - public static function removeObserver($label = 'default') - { - unset(self::$_observers[$label]); - } - - /** - * @return int unique identifier for an observer - */ - public static function getUniqueId() - { - return self::$_uniqueid++; - } - - private function signal() - { - foreach (self::$_observers as $func) { - if (is_callable($func)) { - call_user_func($func, $this); - continue; - } - settype($func, 'array'); - switch ($func[0]) { - case self::OBSERVER_PRINT : - $f = (isset($func[1])) ? $func[1] : '%s'; - printf($f, $this->getMessage()); - break; - case self::OBSERVER_TRIGGER : - $f = (isset($func[1])) ? $func[1] : E_USER_NOTICE; - trigger_error($this->getMessage(), $f); - break; - case self::OBSERVER_DIE : - $f = (isset($func[1])) ? $func[1] : '%s'; - die(printf($f, $this->getMessage())); - break; - default: - trigger_error('invalid observer type', E_USER_WARNING); - } - } - } - - /** - * Return specific error information that can be used for more detailed - * error messages or translation. - * - * This method may be overridden in child exception classes in order - * to add functionality not present in PEAR_Exception and is a placeholder - * to define API - * - * The returned array must be an associative array of parameter => value like so: - *
                          -     * array('name' => $name, 'context' => array(...))
                          -     * 
                          - * @return array - */ - public function getErrorData() - { - return array(); - } - - /** - * Returns the exception that caused this exception to be thrown - * @access public - * @return Exception|array The context of the exception - */ - public function getCause() - { - return $this->cause; - } - - /** - * Function must be public to call on caused exceptions - * @param array - */ - public function getCauseMessage(&$causes) - { - $trace = $this->getTraceSafe(); - $cause = array('class' => get_class($this), - 'message' => $this->message, - 'file' => 'unknown', - 'line' => 'unknown'); - if (isset($trace[0])) { - if (isset($trace[0]['file'])) { - $cause['file'] = $trace[0]['file']; - $cause['line'] = $trace[0]['line']; - } - } - $causes[] = $cause; - if ($this->cause instanceof PEAR_Exception) { - $this->cause->getCauseMessage($causes); - } elseif ($this->cause instanceof Exception) { - $causes[] = array('class' => get_class($this->cause), - 'message' => $this->cause->getMessage(), - 'file' => $this->cause->getFile(), - 'line' => $this->cause->getLine()); - } elseif (class_exists('PEAR_Error') && $this->cause instanceof PEAR_Error) { - $causes[] = array('class' => get_class($this->cause), - 'message' => $this->cause->getMessage(), - 'file' => 'unknown', - 'line' => 'unknown'); - } elseif (is_array($this->cause)) { - foreach ($this->cause as $cause) { - if ($cause instanceof PEAR_Exception) { - $cause->getCauseMessage($causes); - } elseif ($cause instanceof Exception) { - $causes[] = array('class' => get_class($cause), - 'message' => $cause->getMessage(), - 'file' => $cause->getFile(), - 'line' => $cause->getLine()); - } elseif (class_exists('PEAR_Error') && $cause instanceof PEAR_Error) { - $causes[] = array('class' => get_class($cause), - 'message' => $cause->getMessage(), - 'file' => 'unknown', - 'line' => 'unknown'); - } elseif (is_array($cause) && isset($cause['message'])) { - // PEAR_ErrorStack warning - $causes[] = array( - 'class' => $cause['package'], - 'message' => $cause['message'], - 'file' => isset($cause['context']['file']) ? - $cause['context']['file'] : - 'unknown', - 'line' => isset($cause['context']['line']) ? - $cause['context']['line'] : - 'unknown', - ); - } - } - } - } - - public function getTraceSafe() - { - if (!isset($this->_trace)) { - $this->_trace = $this->getTrace(); - if (empty($this->_trace)) { - $backtrace = debug_backtrace(); - $this->_trace = array($backtrace[count($backtrace)-1]); - } - } - return $this->_trace; - } - - public function getErrorClass() - { - $trace = $this->getTraceSafe(); - return $trace[0]['class']; - } - - public function getErrorMethod() - { - $trace = $this->getTraceSafe(); - return $trace[0]['function']; - } - - public function __toString() - { - if (isset($_SERVER['REQUEST_URI'])) { - return $this->toHtml(); - } - return $this->toText(); - } - - public function toHtml() - { - $trace = $this->getTraceSafe(); - $causes = array(); - $this->getCauseMessage($causes); - $html = '' . "\n"; - foreach ($causes as $i => $cause) { - $html .= '\n"; - } - $html .= '' . "\n" - . '' - . '' - . '' . "\n"; - - foreach ($trace as $k => $v) { - $html .= '' - . '' - . '' . "\n"; - } - $html .= '' - . '' - . '' . "\n" - . '
                          ' - . str_repeat('-', $i) . ' ' . $cause['class'] . ': ' - . htmlspecialchars($cause['message']) . ' in ' . $cause['file'] . ' ' - . 'on line ' . $cause['line'] . '' - . "
                          Exception trace
                          #FunctionLocation
                          ' . $k . ''; - if (!empty($v['class'])) { - $html .= $v['class'] . $v['type']; - } - $html .= $v['function']; - $args = array(); - if (!empty($v['args'])) { - foreach ($v['args'] as $arg) { - if (is_null($arg)) $args[] = 'null'; - elseif (is_array($arg)) $args[] = 'Array'; - elseif (is_object($arg)) $args[] = 'Object('.get_class($arg).')'; - elseif (is_bool($arg)) $args[] = $arg ? 'true' : 'false'; - elseif (is_int($arg) || is_double($arg)) $args[] = $arg; - else { - $arg = (string)$arg; - $str = htmlspecialchars(substr($arg, 0, 16)); - if (strlen($arg) > 16) $str .= '…'; - $args[] = "'" . $str . "'"; - } - } - } - $html .= '(' . implode(', ',$args) . ')' - . '' . (isset($v['file']) ? $v['file'] : 'unknown') - . ':' . (isset($v['line']) ? $v['line'] : 'unknown') - . '
                          ' . ($k+1) . '{main} 
                          '; - return $html; - } - - public function toText() - { - $causes = array(); - $this->getCauseMessage($causes); - $causeMsg = ''; - foreach ($causes as $i => $cause) { - $causeMsg .= str_repeat(' ', $i) . $cause['class'] . ': ' - . $cause['message'] . ' in ' . $cause['file'] - . ' on line ' . $cause['line'] . "\n"; - } - return $causeMsg . $this->getTraceAsString(); - } -} --- a/owa/modules/maxmind_geoip/includes/maxmind-ws/GeoCityLocateIspOrg.class.php +++ /dev/null @@ -1,224 +1,1 @@ - - * - */ - class GeoCityLocateIspOrg extends MaxMindWebServices { - - /** - * Implements a singleton design pattern - * - * when looking for an instance one can pass an IP address to have data populated - * - * @access public - * @param string - * @return reference to a GeoCityLocateIspOrg object - */ - function &getInstance($ip = "") { - static $instance = null; - - if ($instance === null) { - $instance = new GeoCityLocateIspOrg(); - } - - if(!empty($ip)){ - $instance->setIP($ip); - } - - return $instance; - } - - /** - * An array that holds all returned values from a Maxmind request - * - * @param string - * @access public - */ - function setIP($ip){ - $this->data = array(); - $this->ip = $ip; - $this->_process(); - } - - /** - * Get the IP address that is being processed - * - * @return string - * @access public - */ - function getIP(){ - return $this->ip; - } - - /** - * Get the return Country Code - * - * @return string - * @access public - */ - function getCountryCode(){ - return $this->data[0]; - } - - /** - * Get the return Region Code - * - * @return string - * @access public - */ - function getRegion(){ - return $this->data[1]; - } - - /** - * Get the return Region Code - * - * @return string - * @access public - */ - function getState(){ - return $this->getRegion(); - } - - /** - * Get the return City - * - * @return string - * @access public - */ - function getCity(){ - return $this->data[2]; - } - - /** - * Get the return Postal - * - * @return string - * @access public - */ - function getPostal(){ - return $this->data[3]; - } - - /** - * Get the return Postal - * - * @return string - * @access public - */ - function getZip(){ - return $this->getPostal(); - } - - /** - * Get the return Latitude - * - * @return string - * @access public - */ - function getLatitude(){ - return $this->data[4]; - } - - /** - * Get the return Latitude - * - * @return string - * @access public - */ - function getLat(){ - return $this->getLatitude(); - } - - /** - * Get the return Longitude - * - * @return string - * @access public - */ - function getLongitude(){ - return $this->data[5]; - } - - /** - * Get the return Longitude - * - * @return string - * @access public - */ - function getLong(){ - return $this->getLongitude(); - } - - /** - * Get the return Metro Code - * - * @return string - * @access public - */ - function getMetroCode(){ - return $this->data[6]; - } - - /** - * Get the return Area Code - * - * @return string - * @access public - */ - function getAreaCode(){ - return $this->data[7]; - } - - /** - * Get the return ISP - * - * @return string - * @access public - */ - function getISP(){ - return $this->data[8]; - } - - /** - * Get the return Organization - * - * @return string - * @access public - */ - function getOrganization(){ - return $this->data[9]; - } - - /** - * Get the return Error - * - * @return string - * @access public - */ - function getError(){ - return $this->data[10]; - - } - - /** - * Formats the url to submit to Maxmind and returns data in an array - * - * @access private - */ - function _process(){ - $url = "http://maxmind.com:8010/f?l=" . $this->licenceKey . "&i=" . $this->ip; - $response = $this->_queryMaxMind($url); - $this->data = $this->csv_split( trim($response) ); - } - - - } - -?> + --- a/owa/modules/maxmind_geoip/includes/maxmind-ws/MaxMindWebServices.class.php +++ /dev/null @@ -1,177 +1,1 @@ - - * - */ - -class MaxMindWebServices { - - - /** - * The licence Key for of a Maxmind web services account - * - * @var string - * @access private - */ - var $licenceKey = ""; - - - /** - * An array that holds all returned values from a Maxmind request - * - * @var array - * @access private - */ - var $data = array(); - - /** - * Set the Licence Key - * - * @var string - * @access public - */ - function setLicenceKey($key){ - $this->licenceKey = $key; - } - - /** - * Test to see if the Service produced an Error - * - * @return bool - * @access public - */ - function isError(){ - $error = $this->getError(); - if( isset($error) ) return true; - else return false; - } - - /** - * Get all Results in a single array for fast processing - * - * @return array - * @access public - */ - function getResultArray(){ - return $this->data; - } - - /** - * Returns the City and State from a metro code - * - * @param string - * @return string - * @access public - */ - function lookupMetroCode($code){ - if( !isset($this->_metroCodes) ){ - $this->_metroCodes = parse_ini_file(dirname( __FILE__ ).'/ini/metroCodes.ini'); - } - return $this->_metroCodes[$code]; - } - - /** - * Returns the Country Name from the code - * - * @param string - * @return string - * @access public - */ - function lookupCountryCode($code){ - if( !isset($this->_countryCodes) ){ - $this->_countryCodes = parse_ini_file(dirname( __FILE__ ).'/ini/countryCodes.ini'); - } - return $this->_countryCodes["'".$code."'"]; - } - - /** - * Returns the SubCountry Name from the code ( States, Provinces ) - * - * @param string - * @param string - * @return string - * @access public - */ - function lookupSubCountryCode($code, $countryCode){ - if( !isset($this->_subCountryCodes) ){ - $this->_subCountryCodes = parse_ini_file(dirname( __FILE__ ).'/ini/subCountryCodes.ini', true); - } - if( is_array($this->_subCountryCodes["'".$countryCode."'"]) ){ - return $this->_subCountryCodes["'".$countryCode."'"]["'".$code."'"]; - } - } - /** - * Generic Web Service Request for MaxMind - * - * @access private - */ - function _queryMaxMind($url){ - - $ch = curl_init(); // initialize curl handle - curl_setopt($ch, CURLOPT_URL,$url); // set url to post to - curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); // return into a variable - curl_setopt($ch, CURLOPT_HEADER, 0); - curl_setopt($ch, CURLOPT_TIMEOUT, 4); // times out after 4s - - return curl_exec($ch); - - } - - - /** - * Function to handle parsing the csv string returned from MaxMind - * - * This function was found in the comments section on: - * http://www.php.net/manual/en/function.fgetcsv.php - * - * @var string csv line to parse - * @var string delimiter to use for spliting - * @var bool remove quotes around values - * @return array the parts of the csv line - * @access public - * @author php@dogpoop.cjb.net - */ - - function csv_split($line,$delim=',',$removeQuotes=true) { - - $fields = array(); - $fldCount = 0; - $inQuotes = false; - for ($i = 0; $i < strlen($line); $i++) { - if (!isset($fields[$fldCount])) $fields[$fldCount] = ""; - $tmp = substr($line,$i,strlen($delim)); - - if ($tmp === $delim && !$inQuotes) { - $fldCount++; - $i += strlen($delim)-1; - } - else if ($fields[$fldCount] == "" && $line[$i] == '"' && !$inQuotes) { - if (!$removeQuotes) $fields[$fldCount] .= $line[$i]; - $inQuotes = true; - } - else if ($line[$i] == '"') { - if ($line[$i+1] == '"') { - $i++; - $fields[$fldCount] .= $line[$i]; - } - else { - if (!$removeQuotes) $fields[$fldCount] .= $line[$i]; - $inQuotes = false; - } - } - else { - $fields[$fldCount] .= $line[$i]; - } - } - return $fields; - } - - -} - -?> --- a/owa/modules/maxmind_geoip/includes/maxmind-ws/ini/countryCodes.ini +++ /dev/null @@ -1,245 +1,1 @@ -'A1' = "Anonymous Proxy" -'A2' = "Satellite Provider" -'AD' = "Andorra" -'AE' = "United Arab Emirates" -'AF' = "Afghanistan" -'AG' = "Antigua and Barbuda" -'AI' = "Anguilla" -'AL' = "Albania" -'AM' = "Armenia" -'AN' = "Netherlands Antilles" -'AO' = "Angola" -'AP' = "Asia/Pacific Region" -'AQ' = "Antarctica" -'AR' = "Argentina" -'AS' = "American Samoa" -'AT' = "Austria" -'AU' = "Australia" -'AW' = "Aruba" -'AZ' = "Azerbaijan" -'BA' = "Bosnia and Herzegovina" -'BB' = "Barbados" -'BD' = "Bangladesh" -'BE' = "Belgium" -'BF' = "Burkina Faso" -'BG' = "Bulgaria" -'BH' = "Bahrain" -'BI' = "Burundi" -'BJ' = "Benin" -'BM' = "Bermuda" -'BN' = "Brunei Darussalam" -'BO' = "Bolivia" -'BR' = "Brazil" -'BS' = "Bahamas" -'BT' = "Bhutan" -'BV' = "Bouvet Island" -'BW' = "Botswana" -'BY' = "Belarus" -'BZ' = "Belize" -'CA' = "Canada" -'CC' = "Cocos (Keeling) Islands" -'CD' = "Congo, The Democratic Republic of the" -'CF' = "Central African Republic" -'CG' = "Congo" -'CH' = "Switzerland" -'CI' = "Cote D'Ivoire" -'CK' = "Cook Islands" -'CL' = "Chile" -'CM' = "Cameroon" -'CN' = "China" -'CO' = "Colombia" -'CR' = "Costa Rica" -'CS' = "Serbia and Montenegro" -'CU' = "Cuba" -'CV' = "Cape Verde" -'CX' = "Christmas Island" -'CY' = "Cyprus" -'CZ' = "Czech Republic" -'DE' = "Germany" -'DJ' = "Djibouti" -'DK' = "Denmark" -'DM' = "Dominica" -'DO' = "Dominican Republic" -'DZ' = "Algeria" -'EC' = "Ecuador" -'EE' = "Estonia" -'EG' = "Egypt" -'EH' = "Western Sahara" -'ER' = "Eritrea" -'ES' = "Spain" -'ET' = "Ethiopia" -'EU' = "Europe" -'FI' = "Finland" -'FJ' = "Fiji" -'FK' = "Falkland Islands (Malvinas)" -'FM' = "Micronesia, Federated States of" -'FO' = "Faroe Islands" -'FR' = "France" -'FX' = "France, Metropolitan" -'GA' = "Gabon" -'GB' = "United Kingdom" -'GD' = "Grenada" -'GE' = "Georgia" -'GF' = "French Guiana" -'GH' = "Ghana" -'GI' = "Gibraltar" -'GL' = "Greenland" -'GM' = "Gambia" -'GN' = "Guinea" -'GP' = "Guadeloupe" -'GQ' = "Equatorial Guinea" -'GR' = "Greece" -'GS' = "South Georgia and the South Sandwich Islands" -'GT' = "Guatemala" -'GU' = "Guam" -'GW' = "Guinea-Bissau" -'GY' = "Guyana" -'HK' = "Hong Kong" -'HM' = "Heard Island and McDonald Islands" -'HN' = "Honduras" -'HR' = "Croatia" -'HT' = "Haiti" -'HU' = "Hungary" -'ID' = "Indonesia" -'IE' = "Ireland" -'IL' = "Israel" -'IN' = "India" -'IO' = "British Indian Ocean Territory" -'IQ' = "Iraq" -'IR' = "Iran, Islamic Republic of" -'IS' = "Iceland" -'IT' = "Italy" -'JM' = "Jamaica" -'JO' = "Jordan" -'JP' = "Japan" -'KE' = "Kenya" -'KG' = "Kyrgyzstan" -'KH' = "Cambodia" -'KI' = "Kiribati" -'KM' = "Comoros" -'KN' = "Saint Kitts and Nevis" -'KP' = "Korea, Democratic People's Republic of" -'KR' = "Korea, Republic of" -'KW' = "Kuwait" -'KY' = "Cayman Islands" -'KZ' = "Kazakhstan" -'LA' = "Lao People's Democratic Republic" -'LB' = "Lebanon" -'LC' = "Saint Lucia" -'LI' = "Liechtenstein" -'LK' = "Sri Lanka" -'LR' = "Liberia" -'LS' = "Lesotho" -'LT' = "Lithuania" -'LU' = "Luxembourg" -'LV' = "Latvia" -'LY' = "Libyan Arab Jamahiriya" -'MA' = "Morocco" -'MC' = "Monaco" -'MD' = "Moldova, Republic of" -'MG' = "Madagascar" -'MH' = "Marshall Islands" -'MK' = "Macedonia" -'ML' = "Mali" -'MM' = "Myanmar" -'MN' = "Mongolia" -'MO' = "Macau" -'MP' = "Northern Mariana Islands" -'MQ' = "Martinique" -'MR' = "Mauritania" -'MS' = "Montserrat" -'MT' = "Malta" -'MU' = "Mauritius" -'MV' = "Maldives" -'MW' = "Malawi" -'MX' = "Mexico" -'MY' = "Malaysia" -'MZ' = "Mozambique" -'NA' = "Namibia" -'NC' = "New Caledonia" -'NE' = "Niger" -'NF' = "Norfolk Island" -'NG' = "Nigeria" -'NI' = "Nicaragua" -'NL' = "Netherlands" -'NO' = "Norway" -'NP' = "Nepal" -'NR' = "Nauru" -'NU' = "Niue" -'NZ' = "New Zealand" -'OM' = "Oman" -'PA' = "Panama" -'PE' = "Peru" -'PF' = "French Polynesia" -'PG' = "Papua New Guinea" -'PH' = "Philippines" -'PK' = "Pakistan" -'PL' = "Poland" -'PM' = "Saint Pierre and Miquelon" -'PN' = "Pitcairn" -'PR' = "Puerto Rico" -'PS' = "Palestinian Territory" -'PT' = "Portugal" -'PW' = "Palau" -'PY' = "Paraguay" -'QA' = "Qatar" -'RE' = "Reunion" -'RO' = "Romania" -'RU' = "Russian Federation" -'RW' = "Rwanda" -'SA' = "Saudi Arabia" -'SB' = "Solomon Islands" -'SC' = "Seychelles" -'SD' = "Sudan" -'SE' = "Sweden" -'SG' = "Singapore" -'SH' = "Saint Helena" -'SI' = "Slovenia" -'SJ' = "Svalbard and Jan Mayen" -'SK' = "Slovakia" -'SL' = "Sierra Leone" -'SM' = "San Marino" -'SN' = "Senegal" -'SO' = "Somalia" -'SR' = "Suriname" -'ST' = "Sao Tome and Principe" -'SV' = "El Salvador" -'SY' = "Syrian Arab Republic" -'SZ' = "Swaziland" -'TC' = "Turks and Caicos Islands" -'TD' = "Chad" -'TF' = "French Southern Territories" -'TG' = "Togo" -'TH' = "Thailand" -'TJ' = "Tajikistan" -'TK' = "Tokelau" -'TL' = "East Timor" -'TM' = "Turkmenistan" -'TN' = "Tunisia" -'TO' = "Tonga" -'TR' = "Turkey" -'TT' = "Trinidad and Tobago" -'TV' = "Tuvalu" -'TW' = "Taiwan" -'TZ' = "Tanzania, United Republic of" -'UA' = "Ukraine" -'UG' = "Uganda" -'UM' = "United States Minor Outlying Islands" -'US' = "United States" -'UY' = "Uruguay" -'UZ' = "Uzbekistan" -'VA' = "Holy See (Vatican City State)" -'VC' = "Saint Vincent and the Grenadines" -'VE' = "Venezuela" -'VG' = "Virgin Islands, British" -'VI' = "Virgin Islands, U.S." -'VN' = "Vietnam" -'VU' = "Vanuatu" -'WF' = "Wallis and Futuna" -'WS' = "Samoa" -'YE' = "Yemen" -'YT' = "Mayotte" -'ZA' = "South Africa" -'ZM' = "Zambia" -'ZR' = "Zaire" -'ZW' = "Zimbabwe" + --- a/owa/modules/maxmind_geoip/includes/maxmind-ws/ini/metroCodes.ini +++ /dev/null @@ -1,212 +1,1 @@ -500 = Portland-Auburn, ME -501 = New York, NY -502 = Binghamton, NY -503 = Macon, GA -504 = Philadelphia, PA -505 = Detroit, MI -506 = Boston, MA -507 = Savannah, GA -508 = Pittsburgh, PA -509 = Ft Wayne, IN -510 = Cleveland, OH -511 = Washington, DC -512 = Baltimore, MD -513 = Flint, MI -514 = Buffalo, NY -515 = Cincinnati, OH -516 = Erie, PA -517 = Charlotte, NC -518 = Greensboro, NC -519 = Charleston, SC -520 = Augusta, GA -521 = Providence, RI -522 = Columbus, GA -523 = Burlington, VT -524 = Atlanta, GA -525 = Albany, GA -526 = Utica-Rome, NY -527 = Indianapolis, IN -528 = Miami, FL -529 = Louisville, KY -530 = Tallahassee, FL -531 = Tri-Cities, TN -532 = Albany-Schenectady-Troy, NY -533 = Hartford, CT -534 = Orlando, FL -535 = Columbus, OH -536 = Youngstown-Warren, OH -537 = Bangor, ME -538 = Rochester, NY -539 = Tampa, FL -540 = Traverse City-Cadillac, MI -541 = Lexington, KY -542 = Dayton, OH -543 = Springfield-Holyoke, MA -544 = Norfolk-Portsmouth, VA -545 = Greenville-New Bern-Washington, NC -546 = Columbia, SC -547 = Toledo, OH -548 = West Palm Beach, FL -549 = Watertown, NY -550 = Wilmington, NC -551 = Lansing, MI -552 = Presque Isle, ME -553 = Marquette, MI -554 = Wheeling, WV -555 = Syracuse, NY -556 = Richmond-Petersburg, VA -557 = Knoxville, TN -558 = Lima, OH -559 = Bluefield-Beckley-Oak Hill, WV -560 = Raleigh-Durham, NC -561 = Jacksonville, FL -563 = Grand Rapids, MI -564 = Charleston-Huntington, WV -565 = Elmira, NY -566 = Harrisburg-Lancaster-Lebanon-York, PA -567 = Greenville-Spartenburg, SC -569 = Harrisonburg, VA -570 = Florence-Myrtle Beach, SC -571 = Ft Myers, FL -573 = Roanoke-Lynchburg, VA -574 = Johnstown-Altoona, PA -575 = Chattanooga, TN -576 = Salisbury, MD -577 = Wilkes Barre-Scranton, PA -581 = Terre Haute, IN -582 = Lafayette, IN -583 = Alpena, MI -584 = Charlottesville, VA -588 = South Bend, IN -592 = Gainesville, FL -596 = Zanesville, OH -597 = Parkersburg, WV -598 = Clarksburg-Weston, WV -600 = Corpus Christi, TX -602 = Chicago, IL -603 = Joplin-Pittsburg, MO -604 = Columbia-Jefferson City, MO -605 = Topeka, KS -606 = Dothan, AL -609 = St Louis, MO -610 = Rockford, IL -611 = Rochester-Mason City-Austin, MN -612 = Shreveport, LA -613 = Minneapolis-St Paul, MN -616 = Kansas City, MO -617 = Milwaukee, WI -618 = Houston, TX -619 = Springfield, MO -620 = Tuscaloosa, AL -622 = New Orleans, LA -623 = Dallas-Fort Worth, TX -624 = Sioux City, IA -625 = Waco-Temple-Bryan, TX -626 = Victoria, TX -627 = Wichita Falls, TX -628 = Monroe, LA -630 = Birmingham, AL -631 = Ottumwa-Kirksville, IA -632 = Paducah, KY -633 = Odessa-Midland, TX -634 = Amarillo, TX -635 = Austin, TX -636 = Harlingen, TX -637 = Cedar Rapids-Waterloo, IA -638 = St Joseph, MO -639 = Jackson, TN -640 = Memphis, TN -641 = San Antonio, TX -642 = Lafayette, LA -643 = Lake Charles, LA -644 = Alexandria, LA -646 = Anniston, AL -647 = Greenwood-Greenville, MS -648 = Champaign-Springfield-Decatur, IL -649 = Evansville, IN -650 = Oklahoma City, OK -651 = Lubbock, TX -652 = Omaha, NE -656 = Panama City, FL -657 = Sherman, TX -658 = Green Bay-Appleton, WI -659 = Nashville, TN -661 = San Angelo, TX -662 = Abilene-Sweetwater, TX -669 = Madison, WI -670 = Ft Smith-Fay-Springfield, AR -671 = Tulsa, OK -673 = Columbus-Tupelo-West Point, MS -675 = Peoria-Bloomington, IL -676 = Duluth, MN -678 = Wichita, KS -679 = Des Moines, IA -682 = Davenport-Rock Island-Moline, IL -686 = Mobile, AL -687 = Minot-Bismarck-Dickinson, ND -691 = Huntsville, AL -692 = Beaumont-Port Author, TX -693 = Little Rock-Pine Bluff, AR -698 = Montgomery, AL -702 = La Crosse-Eau Claire, WI -705 = Wausau-Rhinelander, WI -709 = Tyler-Longview, TX -710 = Hattiesburg-Laurel, MS -711 = Meridian, MS -716 = Baton Rouge, LA -717 = Quincy, IL -718 = Jackson, MS -722 = Lincoln-Hastings, NE -724 = Fargo-Valley City, ND -725 = Sioux Falls, SD -734 = Jonesboro, AR -736 = Bowling Green, KY -737 = Mankato, MN -740 = North Platte, NE -743 = Anchorage, AK -744 = Honolulu, HI -745 = Fairbanks, AK -746 = Biloxi-Gulfport, MS -747 = Juneau, AK -749 = Laredo, TX -751 = Denver, CO -752 = Colorado Springs, CO -753 = Phoenix, AZ -754 = Butte-Bozeman, MT -755 = Great Falls, MT -756 = Billings, MT -757 = Boise, ID -758 = Idaho Falls-Pocatello, ID -759 = Cheyenne, WY -760 = Twin Falls, ID -762 = Missoula, MT -764 = Rapid City, SD -765 = El Paso, TX -766 = Helena, MT -767 = Casper-Riverton, WY -770 = Salt Lake City, UT -771 = Yuma, AZ -773 = Grand Junction, CO -789 = Tucson, AZ -790 = Albuquerque, NM -798 = Glendive, MT -800 = Bakersfield, CA -801 = Eugene, OR -802 = Eureka, CA -803 = Los Angeles, CA -804 = Palm Springs, CA -807 = San Francisco, CA -810 = Yakima-Pasco, WA -811 = Reno, NV -813 = Medford-Klamath Falls, OR -819 = Seattle-Tacoma, WA -820 = Portland, OR -821 = Bend, OR -825 = San Diego, CA -828 = Monterey-Salinas, CA -839 = Las Vegas, NV -855 = Santa Barbara, CA -862 = Sacramento, CA -866 = Fresno, CA -868 = Chico-Redding, CA -881 = Spokane, WA + --- a/owa/modules/maxmind_geoip/includes/maxmind-ws/ini/subCountryCodes.ini +++ /dev/null @@ -1,77 +1,1 @@ -['CA'] -'AB' = "Alberta" -'BC' = "British Columbia" -'MB' = "Manitoba" -'NB' = "New Brunswick" -'NF' = "Newfoundland" -'NS' = "Nova Scotia" -'NU' = "Nunavut" -'ON' = "Ontario" -'PE' = "Prince Edward Island" -'QC' = "Quebec" -'SK' = "Saskatchewan" -'NT' = "Northwest Territories" -'YT' = "Yukon Territory" -['US'] -'AA' = "Armed Forces Americas" -'AE' = "Armed Forces Europe, Middle East, & Canada" -'AK' = "Alaska" -'AL' = "Alabama" -'AP' = "Armed Forces Pacific" -'AR' = "Arkansas" -'AS' = "American Samoa" -'AZ' = "Arizona" -'CA' = "California" -'CO' = "Colorado" -'CT' = "Connecticut" -'DC' = "District of Columbia" -'DE' = "Delaware" -'FL' = "Florida" -'FM' = "Federated States of Micronesia" -'GA' = "Georgia" -'GU' = "Guam" -'HI' = "Hawaii" -'IA' = "Iowa" -'ID' = "Idaho" -'IL' = "Illinois" -'IN' = "Indiana" -'KS' = "Kansas" -'KY' = "Kentucky" -'LA' = "Louisiana" -'MA' = "Massachusetts" -'MD' = "Maryland" -'ME' = "Maine" -'MH' = "Marshall Islands" -'MI' = "Michigan" -'MN' = "Minnesota" -'MO' = "Missouri" -'MP' = "Northern Mariana Islands" -'MS' = "Mississippi" -'MT' = "Montana" -'NC' = "North Carolina" -'ND' = "North Dakota" -'NE' = "Nebraska" -'NH' = "New Hampshire" -'NJ' = "New Jersey" -'NM' = "New Mexico" -'NV' = "Nevada" -'NY' = "New York" -'OH' = "Ohio" -'OK' = "Oklahoma" -'OR' = "Oregon" -'PA' = "Pennsylvania" -'PR' = "Puerto Rico" -'PW' = "Palau" -'RI' = "Rhode Island" -'SC' = "South Carolina" -'SD' = "South Dakota" -'TN' = "Tennessee" -'TX' = "Texas" -'UT' = "Utah" -'VA' = "Virginia" -'VI' = "Virgin Islands" -'VT' = "Vermont" -'WA' = "Washington" -'WV' = "West Virginia" -'WI' = "Wisconsin" -'WY' = "Wyoming" + --- a/owa/modules/maxmind_geoip/includes/maxmind-ws/readme.txt +++ /dev/null @@ -1,84 +1,1 @@ - - -MaxMindWebServices Class -======================== - -The MaxMindWebServices class is an abstract class that all MaxMind web services extend from. This class has no public access. - -I have made a few assumptions in terms of the other services since I have yet to use them. - -1. I assume that all services would have a need to look up: - a. Country Codes - b. SubCountry Codes - c. Metro Codes - - As a result of this assumption I have public methods for translation of these codes in the MaxMindWebServices abstraction class. - -2. Since it appears that not all the Web Services have the same interface I have stored the helper functions in the abstraction class anyway. Reason for this is to reduce code between multiple services. - -Methods that all MaxMind Services have: - setLicenceKey($key) - isError() // return bool - getResultArray() // returns all returned values in an array - lookupCountryCode($countryCode); - lookupSubCountryCode($subcountryCode, $countryCode); - lookupMetroCode($metroCode); - -Notes: - - 1. the lookup...Code() methods use lazy load, they don't parse the ini file unless the method is explicitly call. - - 2. It is possible to set your licenceKey inside this class which then applies it as the default key for all MaxMind web services. - - - -GeoCityLocateIspOrg -=================== - -This class Implements the Geo city location with ISP and Organization inforation included. This class is designed to be used as a singleton. - -ex. - Instead of $service = new GeoCityLocateIspOrg(); - - use: $service = GeoCityLocateIspOrg::getInstance(); - -Methods: - setIP($ip) // this is the trigger, all data is cleared and updated with new value - getIP() - getCountry() - getRegion() - getState() // alias of getRegion() - getCity() - getPostal() - getZip() // alias of getPostal() - getLatitude() - getLat() // alias of getLat() - getLongitude() - getLong() // alias of getLong() - getMetroCode() - getAreaCode() - getISP() - getOrganization() - getError() - - And all generic methods listed above. - - -For Developers -============== - -When adding a new Web Service to this library there are a few code interface details to remember. - -1. All new interfaces must extend MaxMindWebServices -2. All services are responsible for building the url with the query string -3. All services must implement a getError() method -4. All methods must implement there own trigger to submit and recieve data -5. All data recieved must be stored in $this->data array, it doesn't matter if its an assoc array or not. - -TODO -========= - -1. change the _queryMaxMind() in the MaxMindWebService class to handle ssl connections as well. - -2. The ini files that provide the lookup for the country, subcountry and metro codes appears to have issues. In order to remedy the issue I enclosed all keys with tick marks. This issue will be explored later. --- a/owa/modules/maxmind_geoip/module.php +++ /dev/null @@ -1,67 +1,1 @@ - - * @copyright Copyright © 2010 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.4.0 - */ - -class owa_maxmind_geoipModule extends owa_module { - - function __construct() { - - $this->name = 'maxmind_geoip'; - $this->display_name = 'Maxmind GeoIP'; - $this->group = 'geoip'; - $this->author = 'Peter Adams'; - $this->version = '1.0'; - $this->description = 'Performs Maxmind Geo-IP lookups.'; - $this->config_required = false; - $this->required_schema_version = 1; - - $mode = owa_coreAPI::getSetting('maxmind_geoip', 'lookup_method'); - - switch ( $mode ) { - - case "geoip_city_isp_org_web_service": - $method = 'getLocationFromWebService'; - break; - - case "city_lite_db": - $method = 'getLocation'; - break; - - default: - $method = 'getLocation'; - } - - - $this->registerFilter('geolocation', 'maxmind', $method, 0, 'classes'); - - return parent::__construct(); - } -} --- a/owa/mw_plugin.php +++ /dev/null @@ -1,544 +1,1 @@ - 'Open Web Analytics for MediaWiki', - 'author' => 'Peter Adams', - 'url' => 'http://www.openwebanalytics.com', - 'description' => 'Open Web Analytics for MedaWiki' -); - -// used to sniff out admin requests -$wgHooks['UnknownAction'][] = 'owa_actions'; -// used to set proper params for logging Article Page Views -$wgHooks['ArticlePageDataAfter'][] = 'owa_logArticle'; -// used to set proper params for logging Special Page Views -$wgHooks['SpecialPageExecuteAfterPage'][] = 'owa_logSpecialPage'; -// used to set proper params for logging Category Page Views -$wgHooks['CategoryPageView'][] = 'owa_logCategoryPage'; -// used to add OWA's javascript tracking tag to all pages -$wgHooks['BeforePageDisplay'][] = 'owa_footer'; -// used to fire Action events when articles are created -$wgHooks['ArticleInsertComplete'][] = 'owa_newArticleAction'; -// used to fire Action events when articles are edited -$wgHooks['ArticleSaveComplete'][] = 'owa_editArticleAction'; -// used to fire Action events when new articles are deleted -$wgHooks['ArticleDeleteComplete'][] = 'owa_deleteArticleAction'; -// used to fire Action events when new user accounts are created -$wgHooks['AddNewAccount'][] = 'owa_addUserAction'; -// used to fire Action events when new uploads occur -$wgHooks['UploadComplete'][] = 'owa_addUploadAction'; -// used to fire Action events when users login -$wgHooks['UserLoginComplete'][] = 'owa_userLoginAction'; -// used to fire Action events when talk pages are edited -$wgHooks['ArticleEditUpdateNewTalk'][] ='owa_editTalkPageAction'; -// used to register OWA's special page -$wgHooks['SpecialPage_initList'][] = 'owa_registerSpecialPage'; - -/** - * Hook Function for Registering OWA's Special Page - */ -function owa_registerSpecialPage( &$aSpecialPages ) { - - global $wgOwaEnableSpecialPage; - - // Enable Special Page - if ( $wgOwaEnableSpecialPage === true ) { - //Load Special Page - $wgAutoloadClasses['SpecialOwa'] = __FILE__; - // Adds OWA's admin interface to special page list - $aSpecialPages['Owa'] = 'SpecialOwa'; - } - // must return true for hook to continue processing. - return true; -} - -/** - * Hook for OWA special actions - * - * This uses mediawiki's 'unknown action' hook to trigger OWA's special action handler. - * This is setup by adding 'action=owa' to the URLs for special actions. There is - * probably a better way to do this so that the OWA namespace is preserved. - * - * @TODO figure out how to register this method to be triggered only when 'action=owa' instead of - * for all unknown mediawiki actions. - * @param object $specialPage - * @url http://www.mediawiki.org/wiki/Manual:MediaWiki_hooks/UnknownAction - * @return false - */ -function owa_actions($action) { - - global $wgOut, $wgUser, $wgRequest; - - $action = $wgRequest->getText( 'action' ); - if ( $action === 'owa' ) { - $wgOut->disable(); - $owa = owa_singleton(); - $owa->handleSpecialActionRequest(); - return false; - } else { - return true; - } -} - -/** - * OWA Singelton - * - * Needed to avoid OWA loading for every mediawiki request - */ -function owa_singleton() { - - static $owa; - - if ( empty( $owa ) ) { - - global $wgUser, - $wgServer, - $wgScriptPath, - $wgScript, - $wgMainCacheType, - $wgMemCachedServers, - $wgOwaSiteId, - $wgOwaMemCachedServers; - - /* OWA CONFIGURATION OVERRIDES */ - $owa_config = array(); - // check for memcache. these need to be passed into OWA to avoid race condition. - if ( $wgMainCacheType === CACHE_MEMCACHED ) { - $owa_config['cacheType'] = 'memcached'; - $owa_config['memcachedServers'] = $wgMemCachedServers; - } - $owa = new owa_mw( $owa_config ); - $owa->setSetting( 'base', 'report_wrapper', 'wrapper_mediawiki.tpl' ); - $owa->setSetting( 'base', 'main_url', $wgScriptPath.'/index.php?title=Special:Owa' ); - $owa->setSetting( 'base', 'main_absolute_url', $wgServer.$owa->getSetting( 'base', 'main_url' ) ); - $owa->setSetting( 'base', 'action_url', $wgServer.$wgScriptPath.'/index.php?action=owa&owa_specialAction' ); - $owa->setSetting( 'base', 'api_url', $wgServer.$wgScriptPath.'/index.php?action=owa&owa_apiAction' ); - $owa->setSetting( 'base', 'link_template', '%s&%s' ); - $owa->setSetting( 'base', 'is_embedded', true ); - $owa->setSetting( 'base', 'query_string_filters', 'returnto' ); - $owa->setSetting( 'base', 'delay_first_hit', false ); - - if ( ! $wgOwaSiteId ) { - $wgOwaSiteId = md5($wgServer.$wgScriptPath); - } - - $owa->setSiteId( $wgOwaSiteId ); - /** - * Populates OWA's current user object with info about the current mediawiki user. - * This info is needed by OWA authentication system as well as to add dimensions - * requests that are logged. - */ - $cu = &owa_coreAPI::getCurrentUser(); - $cu->setUserData( 'user_id', $wgUser->getName() ); - $cu->setUserData( 'email_address', $wgUser->getEmail() ); - $cu->setUserData( 'real_name', $wgUser->getRealName() ); - $cu->setRole( owa_translate_role( $wgUser->getGroups() ) ); - $cu->setAuthStatus(true); - } - - return $owa; -} - -/** - * Transalates MW Roles into OWA Roles - * - * @todo make this configurable with a global property - */ -function owa_translate_role($level = array()) { - - if ( ! empty( $level ) ) { - - if ( in_array( "*", $level ) ) { - $owa_role = 'everyone'; - } elseif ( in_array( "user", $level ) ) { - $owa_role = 'viewer'; - } elseif ( in_array( "autoconfirmed", $level ) ) { - $owa_role = 'viewer'; - } elseif ( in_array( "emailconfirmed", $level ) ) { - $owa_role = 'viewer'; - } elseif ( in_array( "bot", $level ) ) { - $owa_role = 'viewer'; - } elseif ( in_array( "sysop", $level ) ) { - $owa_role = 'admin'; - } elseif ( in_array( "bureaucrat", $level ) ) { - $owa_role = 'admin'; - } elseif ( in_array( "developer", $level ) ) { - $owa_role = 'admin'; - } - - } else { - $owa_role = ''; - } - - return $owa_role; -} - -/** - * Helper function for tracking page views of various types - */ -function owa_trackPageView( $params = array() ) { - - global $wgUser, $wgOut, $wgOwaSiteId; - - $owa = owa_singleton(); - - if ( $owa->getSetting( 'base', 'install_complete' ) ) { - - //$event = $owa->makeEvent(); - //$event->setEventType( 'base.page_request' ); - $owa->setSiteId( $wgOwaSiteId ); - $owa->setProperty( 'user_name', $wgUser->mName ); - $owa->setProperty( 'user_email', $wgUser->mEmail ); - $owa->setProperty( 'language', owa_getLanguage() ); - if ( ! $owa->pageview_event->get( 'page_type') ) { - $owa->setPageType( '(not set)' ); - } - - //foreach ( $params as $k => $v ) { - // $event->set( $k, $v ); - //} - - // if the page title is not set for some reasons, set it - // using $wgOut. - if ( ! $owa->pageview_event->get( 'page_title') ) { - $owa->setPageTitle( 'page_title', $wgOut->getPageTitle() ); - } - - /* - $tag = sprintf( - ' - var owa_params = %s;', - json_encode( $event->getProperties() ) - ); - - $wgOut->addInlineScript( $tag ); - */ - } - - return true; -} - -/** - * Logs Special Page Views - * - * @param object $specialPage - * @return boolean - */ -function owa_logSpecialPage(&$specialPage) { - - $title_obj = $specialPage->getTitle(); - $title = $title_obj->getText(); - $owa = owa_singleton(); - $owa->setPageTitle( $title ); - $owa->setPageType( 'Special Page' ); - return true; -} - -/** - * Logs Category Page Views - * - * @param object $categoryPage - * @return boolean - */ -function owa_logCategoryPage( &$categoryPage ) { - - $title_obj = $categoryPage->getTitle(); - $title = $title_obj->getText(); - $owa = owa_singleton(); - $owa->setPageTitle( $title ); - $owa->setPageType( 'Category' ); - return true; -} - -/** - * Logs Article Page Views - * - * @param object $article - * @return boolean - */ -function owa_logArticle( &$article ) { - - $title_obj = $article->getTitle(); - $title = $title_obj->getText(); - $owa = owa_singleton(); - $owa->setPageTitle( $title ); - $owa->setPageType( 'Article' ); - return true; -} - -/** - * Helper Function for tracking Action Events - * - * This function is a wrapper for the Action Event API in owa_client. - * - * @param $action_name string The name of the action being tracked - * @param $label string The label associated with the action being tracked - * @return boolean true - */ -function owa_trackAction( $action_name, $label ) { - - $owa = owa_singleton(); - - if ( $owa->getSetting( 'base', 'install_complete' ) ) { - $owa->trackAction( 'mediawiki', $action_name, $label ); - owa_coreAPI::debug( "logging action event " . $action_name ); - } - - return true; -} - -/** - * Logs New Articles - * - * @param object $categoryPage - * @return boolean - */ -function owa_newArticleAction(&$article, &$user, $text, $summary, $minoredit, &$watchthis, $sectionanchor, &$flags, $revision) { - - $label = $article->getTitle()->getText(); - return owa_trackAction( 'Article Created', $label ); -} - -function owa_editArticleAction($article, &$user, $text, $summary, - $minoredit, &$watchthis, $sectionanchor, &$flags, $revision, - &$status, $baseRevId, &$redirect = '') { - - if ( $flags & EDIT_UPDATE ) { - - $label = $article->getTitle()->getText(); - return owa_trackAction( 'Article Edit', $label ); - - } else { - - return true; - } -} - -function owa_deleteArticleAction( &$article, &$user, $reason, $id ) { - - $label = $article->getTitle()->getText(); - return owa_trackAction( 'Article Deleted', $label ); -} - -function owa_addUserAction( $user, $byEmail ) { - - $label = ''; - return owa_trackAction( 'User Account Added', $label ); -} - -function owa_addUploadAction( &$image ) { - - $label = $image->getLocalFile()->getMimeType(); - return owa_trackAction( 'File Upload', $label ); -} - -function owa_userLoginAction( &$user, &$inject_html ) { - - $label = ''; - return owa_trackAction( 'Login', $label ); -} - -function editTalkPageAction( $article ) { - - $label = $article->getTitle()->getText(); - return owa_trackAction( 'Talk Page Edit', $label ); -} - -/** - * Adds javascript tracker to pages - * - * @param object $article - * @return boolean - */ -function owa_footer(&$wgOut, $sk) { - - global $wgRequest, $wgOwaThirdPartyCookies; - - if ($wgRequest->getVal('action') != 'edit' && $wgRequest->getVal('title') != 'Special:Owa') { - - $owa = owa_singleton(); - if ($owa->getSetting('base', 'install_complete')) { - - $cmds = ""; - if ( $wgOwaThirdPartyCookies ) { - $cmds .= "owa_cmds.push( ['setOption', 'thirdParty', true] );"; - } - - if ( $wgOwaCookieDomain ) { - $cmds .= "owa_cmds.push( ['setCookieDomain', '$wgOwaCookieDomain'] );"; - } - - $page_properties = $owa->getAllEventProperties($owa->pageview_event); - if ( $page_properties ) { - $page_properties_json = json_encode( $page_properties ); - $cmds .= "owa_cmds.push( ['setPageProperties', $page_properties_json] );"; - } - - //$wgOut->addInlineScript( $cmds ); - - $options = array( 'cmds' => $cmds ); - - $tags = $owa->placeHelperPageTags(false, $options); - $wgOut->addHTML($tags); - - } - } - - return true; -} - -/** - * Gets mediawiki Language variable - */ -function owa_getLanguage() { - - global $wgLang, $wgContLang; - $code = ''; - - $code = $wgLang->getCode(); - if ( ! $code ) { - $code = $wgContLang->getCode(); - } - - return $code; -} - -/** - * OWA Special Page Class - * - * Enables OWA to be accessed through a Mediawiki special page. - */ -class SpecialOwa extends SpecialPage { - - function __construct() { - parent::__construct('Owa'); - self::loadMessages(); - } - - function execute() { - - global $wgRequest, $wgOut, $wgUser, $wgSitename, $wgScriptPath, $wgScript, $wgServer, - $wgDBtype, $wgDBname, $wgDBserver, $wgDBuser, $wgDBpassword; - - $this->setHeaders(); - //must be called after setHeaders for some reason or elsethe wgUser object is not yet populated. - $owa = owa_singleton(); - $params = array(); - - // if no action is found... - $do = owa_coreAPI::getRequestParam('do'); - if (empty($do)) { - // check to see that owa in installed. - if (!$owa->getSetting('base', 'install_complete')) { - - define('OWA_INSTALLING', true); - - $site_url = $wgServer.$wgScriptPath; - - $params = array( - 'site_id' => md5($site_url), - 'name' => $wgSitename, - 'domain' => $site_url, - 'description' => '', - 'do' => 'base.installStartEmbedded'); - - $params['db_type'] = $wgDBtype; - $params['db_name'] = $wgDBname; - $params['db_host'] = $wgDBserver; - $params['db_user'] = $wgDBuser; - $params['db_password'] = $wgDBpassword; - $params['public_url'] = $wgServer.$wgScriptPath.'/extensions/owa/'; - $page = $owa->handleRequest($params); - - // send to daashboard - } else { - $params['do'] = 'base.reportDashboard'; - $page = $owa->handleRequest($params); - } - // do action found on url - } else { - $page = $owa->handleRequestFromURL(); - } - - return $wgOut->addHTML($page); - - } - - function loadMessages() { - static $messagesLoaded = false; - global $wgMessageCache; - - if ( $messagesLoaded ) return; - - $messagesLoaded = true; - - // this should be the only msg defined by mediawiki - $allMessages = array( - 'en' => array( - 'owa' => 'Open Web Analytics' - ) - ); - - - // load msgs in to mediawiki cache - foreach ( $allMessages as $lang => $langMessages ) { - $wgMessageCache->addMessages( $langMessages, $lang ); - } - - return true; - } -} - -?> --- a/owa/owa-config-dist.php +++ /dev/null @@ -1,93 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision: 1183 $ - * @since owa 1.0.0 - */ - -/** - * DATABASE CONFIGURATION - * - * Connection info for databases that will be used by OWA. - * - */ - -define('OWA_DB_TYPE', 'yourdbtypegoeshere'); // options: mysql -define('OWA_DB_NAME', 'yourdbnamegoeshere'); // name of the database -define('OWA_DB_HOST', 'yourdbhostgoeshere'); // host name of the server housing the database -define('OWA_DB_USER', 'yourdbusergoeshere'); // database user -define('OWA_DB_PASSWORD', 'yourdbpasswordgoeshere'); // database user's password - - -/** - * PUBLIC URL - * - * Define the URL of OWA's base directory e.g. http://www.domain.com/path/to/owa/ - * Don't forget the slash at the end. - */ - -define('OWA_PUBLIC_URL', 'http://domain/path/to/owa/'); - -/** - * OWA ERROR HANDLER - * - * Overide OWA error handler. This should be done through the admin GUI, but - * can be handy during install or development. - * - * Choices are: - * - * 'production' - will log only critical errors to a log file. - * 'development' - logs al sorts of useful debug to log file. - */ - -//define('OWA_ERROR_HANDLER', 'development'); - -/** - * LOG PHP ERRORS - * - * Log all php errors to OWA's error log file. Only do this to debug. - */ - -//define('OWA_LOG_PHP_ERRORS', true); - -/** - * OBJECT CACHING - * - * Override setting to cache objects. Caching will increase performance. - */ - -//define('OWA_CACHE_OBJECTS', true); - -/** - * CONFIGURATION ID - * - * Override to load an alternative user configuration - */ - -//define('OWA_CONFIGURATION_ID', '1'); - - -?> + --- a/owa/owa-data/caches/index.php +++ /dev/null @@ -1,3 +1,1 @@ - + --- a/owa/owa-data/index.php +++ /dev/null @@ -1,3 +1,1 @@ - + --- a/owa/owa-data/logs/index.php +++ /dev/null @@ -1,3 +1,1 @@ - + --- a/owa/owa_adminController.php +++ /dev/null @@ -1,52 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - - -class owa_adminController extends owa_controller { - - var $is_admin = true; - - /** - * Constructor - * - * @param array $params - * @return owa_controller - */ - function __construct($params) { - - return parent::__construct($params); - } -} - -?> + --- a/owa/owa_auth.php +++ /dev/null @@ -1,359 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ -class owa_auth extends owa_base { - - /** - * User object - * - * @var unknown_type - */ - var $u; - - /** - * Array of permission roles that users can have - * - * @var array - */ - var $roles; - - var $status_msg; - - /** - * Login credentials - * - * @var array - */ - var $credentials = array(); - - /** - * Status of Authentication - * - * @var boolean - */ - var $auth_status = false; - - var $_is_user = false; - - var $_priviledge_level; - - var $_is_priviledged = false; - - var $params; - - var $check_for_credentials = false; - - /** - * Auth class Singleton - * - * @return object - */ - public static function &get_instance($plugin = '') { - - static $auth; - - if (!$auth) { - - $auth = new owa_auth(); - - } - - return $auth; - } - - - /** - * Class Constructor - * - * @return owa_auth - */ - function __construct() { - - parent::__construct(); - $this->eq = owa_coreAPI::getEventDispatch(); - } - - /** - * Used by controllers to check if the user exists and if they are priviledged. - * - * @param string $necessary_role - */ - function authenticateUser() { - - // check existing auth status first in case someone else took care of this already. - if (owa_coreAPI::getCurrentUser()->isAuthenticated()) { - $ret = true; - } elseif (owa_coreAPI::getRequestParam('apiKey')) { - // auth user by api key - $ret = $this->authByApiKey(owa_coreAPI::getRequestParam('apiKey')); - } elseif (owa_coreAPI::getRequestParam('pk') && owa_coreAPI::getStateParam('u')) { - // auth user by temporary passkey. used in forgot password situations - $ret = $this->authenticateUserByUrlPasskey(owa_coreAPI::getRequestParam('pk')); - } elseif (owa_coreAPI::getRequestParam('user_id') && owa_coreAPI::getRequestParam('password')) { - // auth user by login form input - $ret = $this->authByInput(owa_coreAPI::getRequestParam('user_id'), owa_coreAPI::getRequestParam('password')); - } elseif (owa_coreAPI::getStateParam('u') && owa_coreAPI::getStateParam('p')) { - // auth user by cookies - $ret = $this->authByCookies(owa_coreAPI::getStateParam('u'), owa_coreAPI::getStateParam('p')); - } else { - $ret = false; - owa_coreAPI::debug("Could not find any credentials to authenticate with."); - } - - // filter results for modules can add their own auth logic. - $ret = $this->eq->filter('auth_status', $ret); - - return array('auth_status' => $ret); - - } - - function authByApiKey($key) { - - // fetch user object from the db - $this->u = owa_coreAPI::entityFactory('base.user'); - $this->u->load($key, 'api_key'); - - if ($this->u->get('user_id')) { - // get current user - $cu = &owa_coreAPI::getCurrentUser(); - // set as new current user in service layer - $cu->loadNewUserByObject($this->u); - $cu->setAuthStatus(true); - $this->_is_user = true; - return true; - } else { - return false; - } - - - } - - function authByCookies($user_id, $password) { - - // set credentials - $this->credentials['user_id'] = $user_id; - $this->credentials['password'] = $password; - - // lookup user if not already done. - if ($this->_is_user == false) { - - // check to see if the current user has already been authenticated by something upstream - $cu = &owa_coreAPI::getCurrentUser(); - if (!$cu->isAuthenticated()) { - // check to see if they are a user. - return $this->isUser(); - } - } else { - return true; - } - } - - function authByInput($user_id, $password) { - - // set credentials - $this->credentials['user_id'] = $user_id; - // must encrypt password to see if it matches whats in the db - $this->credentials['password'] = $this->encryptPassword($password); - //owa_coreAPI::debug(print_r($this->credentials, true)); - $ret = $this->isUser(); - - if ($ret === true) { - $this->saveCredentials(); - } - - return $ret; - } - - /** - * Looks up user by temporary Passkey Column in db - * - * @param unknown_type $key - * @return unknown - */ - function authenticateUserTempPasskey($key) { - - $this->u = owa_coreAPI::entityFactory('base.user'); - $this->u->getByColumn('temp_passkey', $key); - - $id = $this->u->get('id'); - if (!empty($id)): - return true; - else: - return false; - endif; - - } - - /** - * Authenticates user by a passkey - * - * @param unknown_type $key - * @return unknown - */ - function authenticateUserByUrlPasskey($user_id, $passkey) { - - // set credentials - $this->credentials['user_id'] = $user_id; - $this->credentials['passkey'] = $passkey; - - // fetch user obj - $this->getUser(); - - // generate a new passkey from its components in the db - $key = $this->generateUrlPasskey($this->u->get('user_id'), $this->u->get('password')); - - // see if it matches the key on the url - if ($key == $passkey): - return true; - else: - return false; - endif; - - } - - /** - * Sets a temporary Passkey for a user - * - * @param string $email_address - * @return boolean - */ - function setTempPasskey($email_address) { - - $this->u = owa_coreAPI::entityFactory('base.user'); - $this->u->getByColumn('email_address', $email_address); - - $id = $u->get('id'); - - if (!empty($id)): - - $this->eq->log(array('email_address' => $this->u->email_address), 'user.set_temp_passkey'); - return true; - else: - return false; - endif; - - } - - function generateTempPasskey($seed) { - - return md5($seed.time().rand()); - } - - function generateUrlPasskey($user_name, $password) { - - return md5($user_name . $password); - - } - - /** - * Sets the initial Passkey for a new user - * - * @param string $user_id - * @return boolean - * @deprecated - */ - function setInitialPasskey($user_id) { - - return $this->eq->log(array('user_id' => $user_id), 'user.set_initial_passkey'); - - } - - /** - * Saves login credentails to persistant browser cookies - * TODO: refactor to use state facility - */ - function saveCredentials() { - - $this->e->debug('saving user credentials to cookies'); - setcookie($this->config['ns'].'u', $this->u->get('user_id'), time()+3600*24*365*10, '/', $this->config['cookie_domain']); - setcookie($this->config['ns'].'p', $this->u->get('password'), time()+3600*24*30, '/', $this->config['cookie_domain']); - } - - /** - * Removes credentials - * @return boolean - */ - function deleteCredentials() { - - return owa_coreAPI::clearState('p'); - } - - /** - * Simple Password Encryption Scheme - * - * @param string $password - * @return string - */ - function encryptPassword($password) { - - return owa_lib::encryptPassword($password); - } - - function getUser() { - - // fetch user object from the db - $this->u = owa_coreAPI::entityFactory('base.user'); - $this->u->getByColumn('user_id', $this->credentials['user_id']); - } - - /** - * Checks to see if the user credentials match a real user object in the DB - * - * @return boolean - */ - function isUser() { - - // get current user - $cu = &owa_coreAPI::getCurrentUser(); - - // fetches user object from DB - $this->getUser(); - if ($this->credentials['user_id'] === $this->u->get('user_id')): - - if ($this->credentials['password'] === $this->u->get('password')): - $this->_is_user = true; - - // set as new current user in service layer - $cu->loadNewUserByObject($this->u); - $cu->setAuthStatus(true); - return true; - else: - $this->_is_user = false; - return false; - endif; - else: - $this->_is_user = false; - return false; - endif; - - } - -} - -?> + --- a/owa/owa_base.php +++ /dev/null @@ -1,168 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_base { - - /** - * Configuration - * - * @var array - */ - var $config; - - /** - * Error Logger - * - * @var object - */ - var $e; - - /** - * Configuration Entity - * - * @var Object global configuration object - */ - var $c; - - /** - * Module that this class belongs to - * - * @var unknown_type - */ - var $module; - - /** - * Request Params - * - * @var array - */ - var $params; - - /** - * Base Constructor - * - * @return owa_base - */ - function owa_base() { - - return owa_base::__construct(); - - } - - function __construct() { - owa_coreAPI::profile($this, __FUNCTION__, __LINE__); - $this->e = &owa_coreAPI::errorSingleton(); - $this->c = &owa_coreAPI::configSingleton(); - $this->config = $this->c->fetch('base'); - } - - /** - * Retrieves string message from mesage file - * - * @param integer $code - * @param string $s1 - * @param string $s2 - * @param string $s3 - * @param string $s4 - * @return string - */ - function getMsg($code, $s1 = null, $s2 = null, $s3 = null, $s4 = null) { - - static $_owa_messages; - - if (empty($_owa_messages)) { - - require_once(OWA_DIR.'conf/messages.php'); - } - - switch ($_owa_messages[$code][1]) { - - case 0: - $msg = $_owa_messages[$code][0]; - break; - case 1: - $msg = sprintf($_owa_messages[$code][0], $s1); - break; - case 2: - $msg = sprintf($_owa_messages[$code][0], $s1, $s2); - break; - case 3: - $msg = sprintf($_owa_messages[$code][0], $s1, $s2, $s3); - break; - case 4: - $msg = sprintf($_owa_messages[$code][0], $s1, $s2, $s3, $s4); - break; - } - - return $msg; - - } - - /** - * Sets object attributes - * - * @param unknown_type $array - */ - function _setObjectValues($array) { - - foreach ($array as $n => $v) { - - $this->$n = $v; - - } - - return; - } - - /** - * Sets array attributes - * - * @param unknown_type $array - */ - function _setArrayValues($array) { - - foreach ($array as $n => $v) { - - $this->params['$n'] = $v; - - } - - return; - } - - function __destruct() { - owa_coreAPI::profile($this, __FUNCTION__, __LINE__); - } - -} - -?> + --- a/owa/owa_caller.php +++ /dev/null @@ -1,314 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ -class owa_caller extends owa_base { - - /** - * Request Params from get or post - * - * @var array - */ - var $params; - - var $start_time; - - var $end_time; - - var $update_required; - - var $service; - - var $site_id; - - /** - * Constructor - * - * @param array $config - * @return owa_caller - */ - function __construct($config = array()) { - - if (empty($config)) { - $config = array(); - } - - // Start time - $this->start_time = owa_lib::microtime_float(); - - /* SETUP CONFIGURATION AND ERROR LOGGER */ - - // Parent Constructor. Sets default config entity and error logger - parent::__construct(); - - // Log version debug - $this->e->debug(sprintf('*** Starting Open Web Analytics v%s. Running under PHP v%s (%s) ***', OWA_VERSION, PHP_VERSION, PHP_OS)); - if ( array_key_exists('REQUEST_URI', $_SERVER ) ) { - owa_coreAPI::debug( 'Request URL: '.$_SERVER['REQUEST_URI'] ); - } - - if ( array_key_exists('HTTP_USER_AGENT', $_SERVER ) ) { - owa_coreAPI::debug( 'User Agent: '.$_SERVER['HTTP_USER_AGENT'] ); - } - - if ( array_key_exists('HTTP_HOST', $_SERVER ) ) { - owa_coreAPI::debug( 'Host: '.$_SERVER['HTTP_HOST'] ); - } - //owa_coreAPI::debug('cookie domain in caller: '. owa_coreAPI::getSetting('base', 'cookie_domain')); - // Backtrace. handy for debugging who called OWA - //$bt = debug_backtrace(); - //$this->e->debug($bt[4]); - - // load config values from DB - // Applies config from db or cache - // check here is needed for installs when the configuration table does not exist. - - if (!defined('OWA_INSTALLING')) { - if ($this->c->get('base', 'do_not_fetch_config_from_db') != true) { - if ($this->c->isConfigFilePresent()) { - $this->c->load($this->c->get('base', 'configuration_id')); - } - } - } - - - /* APPLY CALLER CONFIGURATION OVERRIDES */ - - // overrides all default and user config values except defined in the config file - // must come after user overides are applied - // This will apply configuration overirdes that are specified by the calling application. - // This is usually used by plugins to setup integration specific configuration values. - - $this->c->applyModuleOverrides('base', $config); - - $this->e->debug('Caller configuration overrides applied.'); - - /* SET ERROR HANDLER */ - - // Sets the correct mode of the error logger now that final config values are in place - // This will flush buffered msgs that were thrown up untill this point - $this->e->setHandler($this->c->get('base', 'error_handler')); - - /* PHP ERROR LOGGING */ - - if (defined('OWA_LOG_PHP_ERRORS')) { - $this->e->logPhpErrors(); - } - - /* LOAD SERVICE LAYER */ - $this->service = &owa_coreAPI::serviceSingleton(); - // initialize framework - $this->service->initializeFramework(); - // notify handlers of 'init' action - $dispatch = owa_coreAPI::getEventDispatch(); - $dispatch->notify($dispatch->makeEvent('init')); - - /* SET SITE ID */ - // needed in standalone installs where site_id is not set in config file. - // still needed?????? - if (!empty($this->params['site_id'])) { - $this->c->set('base', 'site_id', $this->params['site_id']); - } - - // re-fetch the array now that overrides have been applied. - // needed for backwards compatability - $this->config = $this->c->fetch('base'); - - /* SETUP REQUEST Params */ - // still needed????? - $this->params = $this->service->request->getAllOwaParams(); - } - - function handleRequestFromUrl() { - - //$this->params = owa_lib::getRequestParams(); - return $this->handleRequest(); - - } - - - /** - * Returns a configured javascript tracker for inclusion in your web page. - * You can pass an options array to control what the tracker will log. - * The options array is a key/value pair format like: - * - * $options = array('do_not_log_pageview' => true); - * - * Option keys include: 'do_not_log_pageview', 'do_not_log_clicks', 'do_not_log_domstream' - * - * @param $echo bool if true the function will echo. if false the tracker is returned asa string. - * @param $options array an key value pair option array - * @return $tag string the tracker javascript. - */ - function placeHelperPageTags($echo = true, $options = array()) { - - if(!owa_coreAPI::getRequestParam('is_robot')) { - - $tag = owa_coreAPI::getJsTrackerTag( $this->getSiteId(), $options ); - - if ($echo == false) { - return $tag; - } else { - echo $tag; - } - } - } - - // needed? - function handleHelperPageTagsRequest() { - - $params = array(); - $params['do'] = 'base.helperPageTags'; - return $this->handleRequest($params); - - } - - /** - * Handles OWA internal page/action requests - * - * @return unknown - */ - function handleRequest($caller_params = null, $action = '') { - - return owa_coreAPI::handleRequest($caller_params, $action); - - } - - function handleSpecialActionRequest() { - - if(isset($_GET['owa_specialAction'])): - $this->e->debug("special action received"); - echo $this->handleRequestFromUrl(); - $this->e->debug("special action complete"); - exit; - elseif(isset($_GET['owa_logAction'])): - $this->e->debug("log action received"); - $this->config['delay_first_hit'] = false; - $this->c->set('base', 'delay_first_hit', false); - echo $this->logEventFromUrl(); - exit; - elseif(isset($_GET['owa_apiAction'])): - $this->e->debug("api action received"); - define('OWA_API', true); - // lookup method class - echo $this->handleRequest('', 'base.apiRequest'); - exit; - else: - owa_coreAPI::debug('hello from special action request method in caller. no action to do.'); - return; - endif; - - } - - function __destruct() { - - $this->end_time = owa_lib::microtime_float(); - $total_time = $this->end_time - $this->start_time; - $this->e->debug(sprintf('Total session time: %s',$total_time)); - $this->e->debug("goodbye from OWA"); - owa_coreAPI::profileDisplay(); - - return; - } - - function setSetting($module, $name, $value) { - - return owa_coreAPI::setSetting($module, $name, $value); - } - - function getSetting($module, $name) { - - return owa_coreAPI::getSetting($module, $name); - } - - function setCurrentUser($role, $login_name = '') { - $cu =&owa_coreAPI::getCurrentUser(); - $cu->setRole($role); - $cu->setAuthStatus(true); - } - - function makeEvent($type = '') { - - $event = owa_coreAPI::supportClassFactory('base', 'event'); - - if ($type) { - $event->setEventType($type); - } - - return $event; - } - - function setSiteId($site_id) { - - $this->site_id = $site_id; - } - - function getSiteId() { - - return $this->site_id; - } - - function setErrorHandler($mode) { - $this->e->setHandler($mode); - } - - function isOwaInstalled() { - - $version = owa_coreAPI::getSetting('base', 'schema_version'); - if ($version > 0) { - return true; - } else { - return false; - } - } - - function isEndpointEnabled($file_name) { - - if ( ! $this->getSetting('base', 'disableAllEndpoints') ) { - $disabled_endpoints = $this->getSetting('base', 'disabledEndpoints'); - - if ( ! in_array( $file_name, $disabled_endpoints ) ) { - return true; - } - } - } - - function restInPeace() { - - echo '...'; - } - -} - -?> + --- a/owa/owa_controller.php +++ /dev/null @@ -1,568 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_controller extends owa_base { - - /** - * Request Parameters passed in from caller - * - * @var array - */ - var $params = array(); - - /** - * Controller Type - * - * @var array - */ - var $type; - - /** - * Is the controller for an admin function - * - * @var boolean - */ - var $is_admin; - - /** - * The priviledge level required to access this controller - * - * @var string - */ - var $priviledge_level; - - /** - * data validation control object - * - * @var Object - */ - var $v; - - /** - * Data container - * - * @var Array - */ - var $data = array(); - - /** - * Capability - * - * @var string - */ - var $capability; - - /** - * Available Views - * - * @var Array - */ - var $available_views = array(); - - /** - * Time period - * - * @var Object - */ - var $period; - - /** - * Dom id - * - * @var String - */ - var $dom_id; - - /** - * Flag for requiring authenciation before performing actions - * - * @var Bool - */ - var $authenticate_user; - - var $state; - - /** - * Flag for requiring nonce before performing write actions - * - * @var Bool - */ - var $is_nonce_required = false; - - /** - * Constructor - * - * @param array $params - */ - function __construct($params) { - - // call parent constructor to setup objects. - parent::__construct(); - - // set request params - $this->params = $params; - - // set the default view method - $this->setViewMethod('delegate'); - } - - /** - * Handles request from caller - * - */ - function doAction() { - - owa_coreAPI::debug('Performing Action: '.get_class($this)); - - // check if the schema needs to be updated and force the update - // not sure this should go here... - if ($this->is_admin === true) { - // do not intercept if its the updatesApply action or a re-install else updates will never apply - $do = $this->getParam('do'); - if ($do != 'base.updatesApply' && !defined('OWA_INSTALLING') && !defined('OWA_UPDATING')) { - - if (owa_coreAPI::isUpdateRequired()) { - $this->e->debug('Updates Required. Redirecting action.'); - $data = array(); - $data['view_method'] = 'redirect'; - $data['action'] = 'base.updates'; - return $data; - } - } - } - - - /* Check validity of nonce */ - - if ($this->is_nonce_required == true) { - $nonce = $this->getParam('nonce'); - - if ($nonce) { - $is_nonce_valid = $this->verifyNonce($nonce); - } - - if (!$nonce || !$is_nonce_valid) { - $this->e->debug('Nonce is not valid.'); - $ret = $this->notAuthenticatedAction(); - if (!empty($ret)) { - $this->post(); - return $ret; - } else { - $this->post(); - return $this->data; - } - } - } - - /* CHECK USER FOR CAPABILITIES */ - if (!owa_coreAPI::isCurrentUserCapable($this->getRequiredCapability())) { - - owa_coreAPI::debug('User does not have capability required by this controller.'); - - // check to see if the user has already been authenticated - if (owa_coreAPI::isCurrentUserAuthenticated()) { - $this->authenticatedButNotCapableAction(); - return $this->data; - } - - /* PERFORM AUTHENTICATION */ - $auth = &owa_auth::get_instance(); - $status = $auth->authenticateUser(); - // if auth was not successful then return login view. - if ($status['auth_status'] != true) { - $this->notAuthenticatedAction(); - return $this->data; - } else { - //check for needed capability again now that they are authenticated - if (!owa_coreAPI::isCurrentUserCapable($this->getRequiredCapability())) { - $this->authenticatedButNotCapableAction(); - //needed? - $this->set('go', urlencode(owa_lib::get_current_url())); - // needed? -- set auth status for downstream views - $this->set('auth_status', true); - return $this->data; - } - } - } - // TODO: These sets need to be removed and added to pre(), action() or post() methods - // in various concrete controller classes as they screw up things when - // redirecting from one controller to another. - - // set auth status for downstream views - //$this->set('auth_status', true); - //set request params - $this->set('params', $this->params); - // set site_id - $this->set('site_id', $this->get('site_id')); - - // set status msg - NEEDED HERE? doesnt owa_ view handle this? - if (array_key_exists('status_code', $this->params)) { - $this->set('status_code', $this->getParam('status_code')); - } - - // get error msg from error code passed on the query string from a redirect. - if (array_key_exists('error_code', $this->params)) { - $this->set('error_code', $this->getParam('error_code')); - } - - // check to see if the controller has created a validator - if (!empty($this->v)) { - // if so do the validations required - $this->v->doValidations(); - //check for errors - if ($this->v->hasErrors === true) { - //print_r($this->v); - // if errors, do the errorAction instead of the normal action - $this->set('validation_errors', $this->getValidationErrorMsgs()); - $ret = $this->errorAction(); - if (!empty($ret)) { - $this->post(); - return $ret; - } else { - $this->post(); - return $this->data; - } - } - } - - - /* PERFORM PRE ACTION */ - // often used by abstract descendant controllers to set various things - $this->pre(); - - /* PERFORM MAIN ACTION */ - // need to check ret for backwards compatability with older - // controllers that donot use $this->data - $ret = $this->action(); - - if (!empty($ret)) { - $this->post(); - return $ret; - } else { - $this->post(); - return $this->data; - } - - } - - function logEvent($event_type, $properties) { - - if (!class_exists('eventQueue')): - require_once(OWA_BASE_DIR.DIRECTORY_SEPARATOR.'eventQueue.php'); - endif; - - $eq = &eventQueue::get_instance(); - - if (!is_a($properties, 'owa_event')) { - - $event = owa_coreAPI::supportClassFactory('base', 'event'); - $event->setProperties($properties); - $event->setEventType($event_type); - } else { - $event = $properties; - } - - return $eq->log($event, $event->getEventType()); - } - - function createValidator() { - - $this->v = owa_coreAPI::supportClassFactory('base', 'validator'); - - return; - - } - - function addValidation($name, $value, $validation, $conf = array()) { - - if (empty($this->v)): - $this->createValidator(); - endif; - - return $this->v->addValidation($name, $value, $validation, $conf); - - } - - function setValidation($name, $obj) { - - if (empty($this->v)): - $this->createValidator(); - endif; - - return $this->v->setValidation($name, $obj); - - } - - function getValidationErrorMsgs() { - - return $this->v->getErrorMsgs(); - - } - - function isAdmin() { - - if ($this->is_admin == true): - return true; - else: - return false; - endif; - - } - - // depricated - function _setCapability($capability) { - - $this->setRequiredCapability($capability); - - return; - } - - function setRequiredCapability($capability) { - - $this->capability = $capability; - return; - } - - function getRequiredCapability() { - - return $this->capability; - } - - function getParam($name) { - - if (array_key_exists($name, $this->params)) { - return $this->params[$name]; - } else { - return false; - } - } - - function setParam($name, $value) { - - $this->params[$name] = $value; - } - - function isParam($name) { - - if (array_key_exists($name, $this->params)) { - return true; - } else { - return false; - } - } - - function get($name) { - - return $this->getParam($name); - } - - function getAllParams() { - - return $this->params; - } - - function pre() { - - return false; - } - - function post() { - return false; - } - - function getPeriod() { - - return $this->period; - } - - function setPeriod() { - - // set period - - $period = $this->makeTimePeriod($this->getParam('period'), $this->params); - - $this->period = $period; - $this->set('period', $this->getPeriod()); - $this->data['params'] = array_merge($this->data['params'], $period->getPeriodProperties()); - return; - } - - function makeTimePeriod($time_period, $params = array()) { - - return owa_coreAPI::makeTimePeriod($time_period, $params); - } - - function setTimePeriod($period) { - - $this->period = $period; - $this->set('period', $this->getPeriod()); - //$this->data['params'] = array_merge($this->data['params'], $period->getPeriodProperties()); - } - - - function setView($view) { - $this->data['view'] = $view; - return; - } - - function setSubview($subview) { - $this->data['subview'] = $subview; - return; - } - - function setViewMethod($method = 'delegate') { - $this->data['view_method'] = $method; - return; - } - - function setRedirectAction($do) { - $this->set('view_method', 'redirect'); - $this->set('do', $do); - - // need to remove these unsets once they are no longer set in the main doAction method - if (array_key_exists('params', $this->data)) { - unset($this->data['params']); - } - if (array_key_exists('site_id', $this->data)) { - // unset($this->data['site_id']); - } - } - - function setPagination($pagination, $name = 'pagination') { - $this->data[$name] = $pagination; - return; - } - - function set($name, $value) { - - $this->data[$name] = $value; - return; - } - - function setControllerType($string) { - - $this->type = $string; - return; - } - - function mergeParams($array) { - - $this->params = array_merge($this->params, $array); - return; - } - - /** - * redirects borwser to a particular view - * - * @param unknown_type $data - */ - function redirectBrowser($action, $pass_params = true) { - - $control_params = array('view_method', 'auth_status'); - - $get = ''; - - $get .= owa_coreAPI::getSetting('base', 'ns').'do'.'='.$action.'&'; - - if ($pass_params === true) { - - foreach ($this->data as $n => $v) { - - if (!in_array($n, $control_params)) { - - $get .= owa_coreAPI::getSetting('base', 'ns').$n.'='.$v.'&'; - - } - } - } - - $new_url = sprintf(owa_coreAPI::getSetting('base', 'link_template'), owa_coreAPI::getSetting('base', 'main_url'), $get); - - return owa_lib::redirectBrowser($new_url); - - } - - function redirectBrowserToUrl($url) { - - return owa_lib::redirectBrowser($url); - } - - function setStatusCode($code) { - - $this->data['status_code'] = $code; - } - - function setStatusMsg($msg) { - - $this->data['status_message'] = $msg; - } - - function authenticatedButNotCapableAction() { - - $this->setView('base.error'); - $this->set('error_msg', $this->getMsg(2003)); - } - - function notAuthenticatedAction() { - - $this->setRedirectAction('base.loginForm'); - $this->set('go', urlencode(owa_lib::get_current_url())); - } - - function verifyNonce($nonce) { - - $action = $this->getParam('do'); - - if (!$action) { - $action = $this->getParam('action'); - } - - $matching_nonce = owa_coreAPI::createNonce($action); - //owa_coreAPI::debug("passed nonce: $nonce | matching nonce: $matching_nonce"); - if ($nonce === $matching_nonce) { - return true; - } - } - - /** - * Sets nonce flag for the controller. - */ - function setNonceRequired() { - - $this->is_nonce_required = true; - } - - function getSetting($module, $name) { - return owa_coreAPI::getSetting($module, $name); - } - -} - -?> + --- a/owa/owa_coreAPI.php +++ /dev/null @@ -1,1344 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_coreAPI { - - public static function &singleton($params = array()) { - - static $api; - - if(!isset($api)): - $api = new owa_coreAPI(); - endif; - - if(!empty($params)): - $api->params = $params; - endif; - - return $api; - } - - public static function setupStorageEngine($type) { - - if (!class_exists('owa_db')) { - require_once(OWA_BASE_CLASSES_DIR.'owa_db.php'); - } - - if ($type) { - - $connection_class = "owa_db_" . $type; - - if (!class_exists($connection_class)) { - $connection_class_path = OWA_PLUGINS_DIR.'/db/' . $connection_class . ".php"; - - if (!require_once($connection_class_path)) { - owa_coreAPI::error(sprintf('Cannot locate proper db class at %s.', $connection_class_path)); - return false; - } - } - - } - - return true; - - } - - public static function &dbSingleton() { - - static $db; - - if (!isset($db)) { - - $db_type = owa_coreAPI::getSetting('base', 'db_type'); - $ret = owa_coreAPI::setupStorageEngine($db_type); - - if (!$ret) { - owa_coreAPI::error(sprintf('Cannot locate proper db class at %s. Exiting.', $connection_class_path)); - return; - } else { - $connection_class = 'owa_db_'.$db_type; - $db = new $connection_class( - owa_coreAPI::getSetting('base','db_host'), - owa_coreAPI::getSetting('base','db_name'), - owa_coreAPI::getSetting('base','db_user'), - owa_coreAPI::getSetting('base','db_password'), - owa_coreAPI::getSetting('base','db_force_new_connections'), - owa_coreAPI::getSetting('base','db_make_persistant_connections') - ); - } - } - - return $db; - } - - public static function &configSingleton($params = array()) { - - static $config; - - if(!isset($config)): - - if (!class_exists('owa_settings')): - require_once(OWA_BASE_CLASS_DIR.'settings.php'); - endif; - - $config = owa_coreAPI::supportClassFactory('base', 'settings'); - - endif; - - return $config; - } - - public static function &errorSingleton() { - - static $e; - - if(!$e) { - - if (!class_exists('owa_error')): - require_once(OWA_BASE_CLASS_DIR.'error.php'); - endif; - - $e = owa_coreAPI::supportClassFactory('base', 'error'); - - } - - return $e; - } - - public static function getSetting($module, $name) { - - $s = &owa_coreAPI::configSingleton(); - return $s->get($module, $name); - } - - public static function setSetting($module, $name, $value, $persist = false) { - - $s = &owa_coreAPI::configSingleton(); - - if ($persist === true) { - $s->persistSetting($module, $name, $value); - } else { - $s->setSetting($module, $name, $value); - } - - } - - public static function persistSetting($module, $name, $value) { - - $s = &owa_coreAPI::configSingleton(); - $s->persistSetting($module, $name, $value); - - } - - public static function getSiteSetting($site_id, $name) { - - $site = owa_coreAPI::entityFactory('base.site'); - $site->load( $site->generateId( $site_id ) ); - if ( $site->wasPersisted() ) { - - $settings = $site->get('settings'); - if (!empty($settings)) { - if ( array_key_exists($name, $settings) ) { - return $settings[$name]; - } - } - } - } - - public static function persistSiteSetting($site_id, $name, $value) { - - $site = owa_coreAPI::entityFactory('base.site'); - $site->load( $site->generateId( $site_id ) ); - if ( $site->wasPersisted() ) { - $settings = $site->get('settings'); - if ( ! $settings ) { - $settings = array(); - } - $settings[$name] = $value; - $site->set('settings', $settings); - $site->update(); - } - } - - public static function getSiteSettings($site_id) { - - $site = owa_coreAPI::entityFactory('base.site'); - $site->load( $site->generateId( $site_id ) ); - if ( $site->wasPersisted() ) { - - $settings = $site->get('settings'); - - if ( $settings ) { - return $settings; - } else { - return array(); - } - } - - } - - public static function getAllRoles() { - - $caps = owa_coreAPI::getSetting('base', 'capabilities'); - return array_keys($caps); - } - - public static function &getCurrentUser() { - - $s = &owa_coreAPI::serviceSingleton(); - return $s->getCurrentUser(); - } - - /** - * check to see if the current user has a capability - * always returns a bool - */ - public static function isCurrentUserCapable($capability) { - - $cu = &owa_coreAPI::getCurrentUser(); - owa_coreAPI::debug("Current User Role: ".$cu->getRole()); - owa_coreAPI::debug("Current User Authentication: ".$cu->isAuthenticated()); - $ret = $cu->isCapable($capability); - owa_coreAPI::debug("Is current User capable: ".$ret); - return $ret; - } - - public static function isCurrentUserAuthenticated() { - - $cu = &owa_coreAPI::getCurrentUser(); - return $cu->isAuthenticated(); - } - - public static function &serviceSingleton() { - - static $s; - - if(empty($s)) { - - if (!class_exists('owa_service')) { - require_once(OWA_BASE_CLASS_DIR.'service.php'); - } - - $s = owa_coreAPI::supportClassFactory('base', 'service'); - - } - - return $s; - } - - public static function &cacheSingleton($params = array()) { - - static $cache; - - if ( !isset ( $cache ) ) { - $cache_type = owa_coreAPI::getSetting('base', 'cacheType'); - - switch ($cache_type) { - - case "memcached": - $implementation = array('owa_memcachedCache', OWA_BASE_CLASS_DIR.'memcachedCache.php'); - break; - default: - $implementation = array('owa_fileCache', OWA_BASE_CLASS_DIR.'fileCache.php'); - - } - - if ( ! class_exists( $implementation[0] ) ) { - require_once( $implementation[1] ); - } - // make this plugable - $cache = new $implementation[0]; - } - - return $cache; - } - - public static function requestContainerSingleton() { - - static $request; - - if(!isset($request)): - - if (!class_exists('owa_requestContainer')): - require_once(OWA_DIR.'owa_requestContainer.php'); - endif; - - $request = owa_lib::factory(OWA_DIR, '', 'owa_requestContainer'); - - endif; - - return $request; - - } - - public static function moduleRequireOnce($module, $class_dir, $file) { - - if (!empty($class_dir)) { - - $class_dir .= DIRECTORY_SEPARATOR; - - } - - $full_file_path = OWA_BASE_DIR.'/modules/'.$module.DIRECTORY_SEPARATOR.$class_dir.$file.'.php'; - - if (file_exists($full_file_path)) { - return require_once($full_file_path); - } else { - owa_coreAPI::debug("moduleRequireOnce says no file found at: $full_file_path"); - return false; - } - } - - public static function moduleFactory($modulefile, $class_suffix = null, $params = '', $class_ns = 'owa_') { - - list($module, $file) = explode(".", $modulefile); - $class = $class_ns.$file.$class_suffix; - //print $class; - // Require class file if class does not already exist - if(!class_exists($class)): - owa_coreAPI::moduleRequireOnce($module, '', $file); - endif; - - $obj = owa_lib::factory(OWA_BASE_DIR.'/modules/'.$module, '', $class, $params); - - //if (isset($obj->module)): - $obj->module = $module; - //endif; - - return $obj; - } - - public static function moduleGenericFactory($module, $sub_directory, $file, $class_suffix = null, $params = '', $class_ns = 'owa_') { - - $class = $class_ns.$file.$class_suffix; - - // Require class file if class does not already exist - if(!class_exists($class)): - owa_coreAPI::moduleRequireOnce($module, $sub_directory, $file); - endif; - - $obj = owa_lib::factory(OWA_DIR.'modules'.DIRECTORY_SEPARATOR.$module.DIRECTORY_SEPARATOR.$sub_directory, '', $class, $params); - - return $obj; - } - - /** - * Produces Module Classes (module.php) - * - * @return Object module class object - */ - public static function moduleClassFactory($module) { - - if (!class_exists('owa_module')): - require_once(OWA_BASE_CLASSES_DIR.'owa_module.php'); - endif; - - require_once(OWA_BASE_DIR.'/modules/'.$module.'/module.php'); - - return owa_lib::factory(OWA_BASE_CLASSES_DIR.$module, 'owa_', $module.'Module'); - - } - - - public static function updateFactory($module, $filename, $class_ns = 'owa_') { - - require_once(OWA_BASE_CLASS_DIR.'update.php'); - - //$obj = owa_coreAPI::moduleGenericFactory($module, 'updates', $filename, '_update'); - $class = $class_ns.$module.'_'.$filename.'_update'; - - // Require class file if class does not already exist - if(!class_exists($class)): - owa_coreAPI::moduleRequireOnce($module, 'updates', $filename); - endif; - - $obj = owa_lib::factory(OWA_DIR.'modules'.DIRECTORY_SEPARATOR.$module.DIRECTORY_SEPARATOR.'updates', '', $class); - - $obj->module_name = $module; - if (!$obj->schema_version) { - $obj->schema_version = $filename; - } - return $obj; - } - - public static function subViewFactory($subview, $params = array()) { - - list($module, $class) = explode(".", $subview); - //print_r($module.' ' . $class); - //owa_lib::moduleRequireOnce($module, $class); - - $subview = owa_lib::moduleFactory($subview, 'View', $params); - $subview->is_subview = true; - - return $subview; - } - - public static function &supportClassFactory($module, $class, $params = array(),$class_ns = 'owa_') { - - $obj = &owa_lib::factory(OWA_BASE_DIR.DIRECTORY_SEPARATOR.'modules'.DIRECTORY_SEPARATOR.$module.DIRECTORY_SEPARATOR.'classes'.DIRECTORY_SEPARATOR, $class_ns, $class, $params); - $obj->module = $module; - - return $obj; - - - } - - /** - * Convienence method for generating entities - * - * @param unknown_type $entity_name - * @return unknown - */ - public static function entityFactory($entity_name) { - - /* SETUP STORAGE ENGINE */ - - // Must be called before any entities are created - - if (!defined('OWA_DTD_INT')) { - if (defined('OWA_DB_TYPE')) { - owa_coreAPI::setupStorageEngine(OWA_DB_TYPE); - } else { - owa_coreAPI::setupStorageEngine('mysql'); - } - - } - - - - if (!class_exists('owa_entity')): - require_once(OWA_BASE_CLASSES_DIR.'owa_entity.php'); - endif; - - $entity = owa_coreAPI::moduleSpecificFactory($entity_name, 'entities', '', '', false); - $entity->name = $entity_name; - return $entity; - //return owa_coreAPI::supportClassFactory('base', 'entityManager', $entity_name); - - } - - /** - * Convienence method for generating entities - * - * @param unknown_type $entity_name - * @return unknown - * @depricated - * @todo REMOVE - */ - public static function rawEntityFactory($entity_name) { - - return owa_coreAPI::entityFactory($entity_name); - - } - - /** - * Factory for generating module specific classes - * - * @param string $modulefile - * @param string $class_dir - * @param string $class_suffix - * @param array $params - * @return unknown - */ - public static function moduleSpecificFactory($modulefile, $class_dir, $class_suffix = null, $params = '', $add_module_name = true, $class_ns = 'owa_') { - - list($module, $file) = explode(".", $modulefile); - $class = $class_ns.$file.$class_suffix; - - // Require class file if class does not already exist - if(!class_exists($class)): - owa_coreAPI::moduleRequireOnce($module, $class_dir, $file); - endif; - - $obj = owa_lib::factory(OWA_BASE_DIR.DIRECTORY_SEPARATOR.'modules'.DIRECTORY_SEPARATOR.$class_dir.DIRECTORY_SEPARATOR.$module, '', $class, $params); - - if ($add_module_name == true): - $obj->module = $module; - endif; - - return $obj; - - - } - - public static function executeApiCommand($map) { - - if (!array_key_exists('do', $map)) { - echo ("API Command missing from request."); - owa_coreAPI::debug('API Command missing from request. Aborting.'); - exit; - } else { - // load service - $s = owa_coreAPI::serviceSingleton(); - // lookup method class - $do = $s->getApiMethodClass($map['do']); - - } - - // if exists, pass to OWA as a request - if ($do) { - - if (array_key_exists('args', $do)) { - - $passed_args = array(); - - foreach ($do['args'] as $arg) { - - if (isset($map[$arg])) { - $passed_args[] = $map[$arg]; - } else { - $passed_args[] = ''; - } - } - - if (!empty($do['file'])) { - - if (!class_exists($do['callback'][0])) { - require_once($file); - } - } - - $something = call_user_func_array($do['callback'], $passed_args); - } - - return $something; - } else { - echo "No API Method Found."; - } - - } - - /** - * Convienence method for generating metrics - * - * @param unknown_type $entity_name - * @return unknown - */ - public static function metricFactory($metric_name, $params = array()) { - - if (!strpos($metric_name, '.')) { - $s = owa_coreAPI::serviceSingleton(); - $metric_name = $s->getMetricClasses($metric_name); - } - - if (!class_exists('owa_metric')) { - require_once(OWA_BASE_CLASSES_DIR.'owa_metric.php'); - } - - return owa_coreAPI::moduleSpecificFactory($metric_name, 'metrics', '', $params, false); - } - - /** - * Returns a consolidated list of admin/options panels from all active modules - * - * @return array - */ - public static function getAdminPanels() { - - $panels = array(); - - $service = owa_coreAPI::serviceSingleton(); - - foreach ($service->modules as $k => $v) { - $v->registerAdminPanels(); - $module_panels = $v->getAdminPanels(); - if ($module_panels) { - foreach ($module_panels as $key => $value) { - - $panels[$value['group']][] = $value; - } - } - } - - return $panels; - } - - /** - * Returns a consolidated list of nav links from all active modules for a particular view - * and named navigation element. - * - * @param string nav_name the name of the navigation element that you want links for - * @param string sortby the array value to sort the navigation array by - * @return array - */ - public static function getNavigation($view, $nav_name, $sortby ='order') { - - $links = array(); - - $service = owa_coreAPI::serviceSingleton(); - - foreach ($service->modules as $k => $v) { - - // If the module does not have nav links, register them. needed in case this function is called twice on - // same view. - if (empty($v->nav_links)): - $v->registerNavigation(); - endif; - - $module_nav = $v->getNavigationLinks(); - - - if (!empty($module_nav)) { - // assemble the navigation for a specific view's named navigation element' - foreach ($module_nav as $key => $value) { - - $links[$value['view']][$value['nav_name']][] = $value; - } - } - - } - - //print_r($links[$view][$nav_name]); - if (!empty($links[$view][$nav_name])): - // anonymous sorting function, takes sort by variable. - $code = "return strnatcmp(\$a['$sortby'], \$b['$sortby']);"; - - // sort the array - $ret = usort($links[$view][$nav_name], create_function('$a,$b', $code)); - - return $links[$view][$nav_name]; - else: - return false; - endif; - - } - - public static function getGroupNavigation($group, $sortby ='order') { - - $links = array(); - - $service = owa_coreAPI::serviceSingleton(); - - foreach ($service->modules as $k => $v) { - - // If the module does not have nav links, register them. needed in case this function is called twice on - // same view. - if (empty($v->nav_links)): - $v->registerNavigation(); - endif; - - $module_nav = $v->getNavigationLinks(); - - if (!empty($module_nav)): - //loop through returned nav array - foreach ($module_nav as $group => $nav_links) { - - foreach ($nav_links as $link) { - - if (array_key_exists($group, $links)): - - // check to see if link is already present in the main array - if (array_key_exists($link['anchortext'], $links[$group])): - // merge various elements?? not now. - //check to see if there is an existing subgroup - - if (array_key_exists('subgroup', $links[$group][$link['anchortext']])): - // if so, merge the subgroups - $links[$group][$link['anchortext']]['subgroup'] = array_merge($links[$group][$link['anchortext']]['subgroup'], $link['subgroup']); - endif; - else: - // else populate the link - $links[$group][$link['anchortext']] = $link; - endif; - - else: - $links[$group][$link['anchortext']] = $link; - endif; - } - - } - endif; - - } - - return $links[$group]; - } - - /** - * @Todo REMOVE - */ - public static function getNavSort($a, $b) { - - return strnatcmp($a['order'], $b['order']); - } - - - public static function getActiveModules() { - - $c = owa_coreAPI::configSingleton(); - $config = $c->config->get('settings'); - - //print_r($config); - $active_modules = array(); - - foreach ($config as $k => $module) { - - if ($module['is_active'] == true): - $active_modules[] = $k; - endif; - } - - return $active_modules; - - } - - public static function getModulesNeedingUpdates() { - - $service = owa_coreAPI::serviceSingleton(); - - return $service->getModulesNeedingUpdates(); - } - - /** - * Invokes controller to perform controller - * - * @param $action string - * - */ - public static function performAction($action, $params = array()) { - - // Load - $controller = owa_coreAPI::moduleFactory($action, 'Controller', $params); - - if (!$controller || !method_exists($controller, 'doAction')) { - owa_coreAPI::debug("No controller is associated with $action."); - return; - } - - $data = $controller->doAction(); - - // Display view if controller calls for one. - if (!empty($data['view']) || !empty($data['action'])): - - // - if ($data['view_method'] == 'delegate'): - return owa_coreAPI::displayView($data); - - // Redirect to a view - elseif ($data['view_method'] == 'redirect'): - owa_lib::redirectToView($data); - return; - - // return an image . Will output headers and binary data. - elseif ($data['view_method'] == 'image'): - return owa_coreAPI::displayImage($data); - - else: - return owa_coreAPI::displayView($data); - - endif; - - elseif(!empty($data['do'])): - //print_r($data); - owa_lib::redirectToView($data); - return; - - endif; - } - - /** - * Logs an event to the event queue - * - * take an owa_event object as a message. - * - * @param string $event_type - * @param object $message - * @return boolean - */ - public static function logEvent($event_type, $message = '') { - - // debug - owa_coreAPI::debug("logging event $event_type"); - - if (owa_coreAPI::getSetting('base', 'error_log_level') > 9) { - owa_coreAPI::debug("PHP Server Global: ".print_r($_SERVER, true)); - } - - // Check to see if named users should be logged - if (owa_coreAPI::getSetting('base', 'log_named_users') != true) { - $cu = owa_coreAPI::getCurrentUser(); - $cu_user_id = $cu->getUserData('user_id'); - - if(!empty($cu_user_id)) { - return false; - } - } - - // do not log if the request is robotic - $service = &owa_coreAPI::serviceSingleton(); - $bcap = $service->getBrowscap(); - owa_coreAPI::profile(__CLASS__, __FUNCTION__, __LINE__); - if (!owa_coreAPI::getSetting('base', 'log_robots')) { - - if ($bcap->robotCheck()) { - owa_coreAPI::debug("ABORTING: request appears to be from a robot"); - owa_coreAPI::setRequestParam('is_robot', true); - return; - } - owa_coreAPI::profile(__CLASS__, __FUNCTION__, __LINE__); - } - - $service->setBrowscap($bcap); - - // form event if one was not passed - $class= 'owa_event'; - if (!($message instanceof $class)) { - $event = owa_coreAPI::supportClassFactory('base', 'event'); - $event->setProperties($message); - $event->setEventType($event_type); - } else { - $event = $message; - } - - // Filter XSS exploits from event properties - $event->cleanProperties(); - - // do not log if the do not log property is set on the event. - if ($event->get('do_not_log')) { - return false; - } - - // lookup which event processor to use to process this event type - $processor_action = owa_coreAPI::getEventProcessor($event->getEventType()); - - return owa_coreAPI::handleRequest(array('event' => $event), $processor_action); - } - - - public static function displayImage($data) { - - header('Content-type: image/gif'); - header('P3P: CP="'.owa_coreAPI::getSetting('base', 'p3p_policy').'"'); - header('Expires: Sat, 22 Apr 1978 02:19:00 GMT'); - header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); - header('Cache-Control: no-store, no-cache, must-revalidate'); - header('Cache-Control: post-check=0, pre-check=0', false); - header('Pragma: no-cache'); - - echo owa_coreAPI::displayView($data); - } - - - /** - * Displays a View without user authentication. Takes array of data as input - * - * @param array $data - * @param string $viewfile a specific view file to use - * @return string - * - */ - public static function displayView($data, $viewfile = '') { - - if (empty($viewfile)): - $viewfile = $data['view']; - endif; - - $view = owa_coreAPI::moduleFactory($viewfile, 'View'); - $view->setData($data); - return $view->assembleView($data); - - } - - public static function displaySubView($data, $viewfile = '') { - - if (empty($viewfile)): - $viewfile = $data['view']; - endif; - - $view = owa_coreAPI::subViewFactory($viewfile); - - return $view->assembleView($data); - - } - - /** - * Strip a URL of certain GET params - * @depricated - * @return string - * @todo REMOVE - */ - function stripDocumentUrl($url) { - - if (owa_coreAPI::getSetting('base', 'clean_query_string')): - - if (owa_coreAPI::getSetting('base', 'query_string_filters')): - $filters = str_replace(' ', '', owa_coreAPI::getSetting('base', 'query_string_filters')); - $filters = explode(',', $filters); - else: - $filters = array(); - endif; - - // OWA specific params to filter - array_push($filters, owa_coreAPI::getSetting('base', 'source_param')); - array_push($filters, owa_coreAPI::getSetting('base', 'ns').owa_coreAPI::getSetting('base', 'feed_subscription_param')); - - //print_r($filters); - - foreach ($filters as $filter => $value) { - - $url = preg_replace( - '#\?' . - $value . - '=.*$|&' . - $value . - '=.*$|' . - $value . - '=.*&#msiU', - '', - $url - ); - - } - - endif; - //print $url; - - return $url; - - } - - public static function getRequestParam($name) { - - $service = &owa_coreAPI::serviceSingleton(); - return $service->request->getParam($name); - - } - - public static function getRequest() { - $service = &owa_coreAPI::serviceSingleton(); - return $service->request; - } - - public static function setRequestParam($name, $value) { - - $service = &owa_coreAPI::serviceSingleton(); - return $service->request->setParam($name, $value); - - } - - public static function makeTimePeriod($time_period, $params = array()) { - - $period = owa_coreAPI::supportClassFactory('base', 'timePeriod'); - $map = array(); - - if (array_key_exists('startDate', $params)) { - $map['startDate'] = $params['startDate']; - } - - if (array_key_exists('endDate', $params)) { - $map['endDate'] = $params['endDate']; - } - - if (array_key_exists('startTime', $params)) { - $map['startTime'] = $params['startTime']; - } - - if (array_key_exists('endTime', $params)) { - $map['endTime'] = $params['endTime']; - } - - $period->set($time_period, $map); - - return $period; - } - - /** - * Factory method for producing validation objects - * - * @return Object - */ - public static function validationFactory($class_file) { - - if (!class_exists('owa_validation')): - require_once(OWA_BASE_CLASS_DIR.'validation.php'); - endif; - - return owa_lib::factory(OWA_PLUGINS_DIR.'/validations', 'owa_', $class_file, array(), 'Validation'); - - } - - public static function debug($msg) { - - $e = owa_coreAPI::errorSingleton(); - $e->debug($msg); - return; - } - - public static function error($msg) { - - $e = owa_coreAPI::errorSingleton(); - $e->err($msg); - return; - } - - public static function notice($msg) { - - $e = owa_coreAPI::errorSingleton(); - $e->notice($msg); - return; - } - - public static function createCookie($cookie_name, $cookie_value, $expires = 0, $path = '/', $domain = '') { - - if ( $domain ) { - // sanitizes the domain - $domain = owa_lib::sanitizeCookieDomain( $domain ); - } else { - $domain = owa_coreAPI::getSetting('base', 'cookie_domain'); - } - if (is_array($cookie_value)) { - - $cookie_value = owa_lib::implode_assoc('=>', '|||', $cookie_value); - } - - // add namespace - $cookie_name = sprintf('%s%s', owa_coreAPI::getSetting('base', 'ns'), $cookie_name); - - // debug - owa_coreAPI::debug(sprintf('Setting cookie %s with values: %s under domain: %s', $cookie_name, $cookie_value, $domain)); - - // set compact privacy header - header(sprintf('P3P: CP="%s"', owa_coreAPI::getSetting('base', 'p3p_policy'))); - //owa_coreAPI::debug('time: '.$expires); - setcookie($cookie_name, $cookie_value, $expires, $path, $domain); - return; - } - - public static function deleteCookie($cookie_name, $path = '/', $domain = '') { - - return owa_coreAPI::createCookie($cookie_name, false, time()-3600*25, $path, $domain); - } - - public static function setState($store, $name = '', $value, $store_type = '', $is_perminent = '') { - - $service = &owa_coreAPI::serviceSingleton(); - return $service->request->state->set($store, $name, $value, $store_type, $is_perminent); - } - - public static function getStateParam($store, $name = '') { - - $service = &owa_coreAPI::serviceSingleton(); - return $service->request->state->get($store, $name); - } - - public static function getServerParam($name = '') { - - $service = &owa_coreAPI::serviceSingleton(); - return $service->request->getServerParam($name); - } - - public static function clearState($store) { - - $service = &owa_coreAPI::serviceSingleton(); - $service->request->state->clear($store); - - } - - public static function getEventProcessor($event_type) { - - $service = &owa_coreAPI::serviceSingleton(); - $processor = $service->getMapValue('event_processors', $event_type); - - if (empty($processor)) { - - $processor = 'base.processEvent'; - } - - return $processor; - } - - /** - * Handles OWA internal page/action requests - * - * @return unknown - */ - public static function handleRequest($caller_params = null, $action = '') { - - static $init; - - $service = &owa_coreAPI::serviceSingleton(); - // Override request parsms with those passed by caller - if (!empty($caller_params)) { - $service->request->mergeParams($caller_params); - }; - - $params = $service->request->getAllOwaParams(); - - if ($init != true) { - owa_coreAPI::debug('Handling request with params: '. print_r($params, true)); - } - - // backwards compatability with old style view/controler scheme - // still needed?? - if (array_key_exists('view', $params)) { - // its a view request so the only data is in whats in the params - $init = true; - return owa_coreAPI::displayView($params); - } - - if (empty($action)) { - $action = owa_coreAPI::getRequestParam('action'); - if (empty($action)) { - $action = owa_coreAPI::getRequestParam('do'); - - if (empty($action)) { - $action = owa_coreAPI::getSetting('base', 'start_page'); - } - } - } - - $init = true; - owa_coreAPI::debug('About to perform action: '.$action); - return owa_coreAPI::performAction($action, $params); - - } - - public static function isUpdateRequired() { - - $service = &owa_coreAPI::serviceSingleton(); - return $service->isUpdateRequired(); - } - - public static function getSitesList() { - - //$s = owa_coreAPI::entityFactory('base.site'); - $db = owa_coreAPI::dbSingleton(); - $db->selectFrom('owa_site'); - $db->selectColumn('*'); - return $db->getAllRows(); - - } - - public static function profile($that = '', $function = '', $line = '', $msg = '') { - - if (defined('OWA_PROFILER')) { - if (OWA_PROFILER === true) { - - static $profiler; - - if (!class_exists('PhpQuickProfiler')) { - require_once(OWA_INCLUDE_DIR.'pqp/classes/PhpQuickProfiler.php'); - } - - if (empty($profiler)) { - $profiler = new PhpQuickProfiler(PhpQuickProfiler::getMicroTime(), OWA_INCLUDE_DIR.'pqp/'); - } - - $class = get_class($that); - Console::logSpeed($class."::$function - Line: $line - Msg: $msg"); - Console::logMemory($that, $class. "::$function - Line: $line"); - - return $profiler; - } - } - } - - public static function profileDisplay() { - $p = owa_coreAPI::profile(); - if ($p) { - $p->display(); - } - - } - - public static function getEventDispatch() { - - if (!class_exists('eventQueue')) { - require_once(OWA_DIR.'/eventQueue.php'); - } - - $eq = &eventQueue::get_instance(); - return $eq; - } - - public static function getCliCommandClass($command) { - - $s = owa_coreAPI::serviceSingleton(); - return $s->getCliCommandClass($command); - } - - public static function getGeolocationFromIpAddress($ip_address) { - - $s = &owa_coreAPI::serviceSingleton(); - $s->geolocation->getGeolocationFromIp($ip_address); - return $s->geolocation; - } - - public static function getNonceTimeInterval() { - - return ceil( time() / owa_coreAPI::getSetting( 'base', 'nonce_expiration_period') ); - } - - public static function createNonce($action) { - - $time = owa_coreAPI::getNonceTimeInterval(); - $cu = owa_coreAPI::getCurrentUser(); - $user_id = $cu->getUserData( 'user_id' ); - $full_nonce = $time . $action . $user_id . 'owa_nonce'; - $nonce = substr(md5($full_nonce), -12, 10); - - return $nonce; - } - - public static function summarize($map) { - - $entity = owa_coreAPI::entityFactory($map['entity']); - $db = owa_coreAPI::dbSingleton(); - $db->selectFrom($entity->getTableName(), $entity->getTableAlias()); - - foreach ($map['columns'] as $col => $action) { - - switch ($action) { - - case 'sum': - $col_def = sprintf("SUM(%s)", $col); - $name = $col.'_sum'; - break; - case 'count': - $col_def = sprintf("COUNT(%s)", $col); - $name = $col.'_count'; - break; - case 'count_distinct': - $col_def = sprintf("COUNT(distinct %s)", $col); - $name = $col.'_dcount'; - break; - } - - $db->selectColumn($col_def, $name); - } - - foreach ($map['constraints'] as $con_col => $con_value) { - - if ( is_array( $con_value ) ) { - $db->where($con_col, $con_value['value'], $con_value['operator']); - } else { - $db->where($con_col, $con_value); - } - } - - $ret = $db->getOneRow(); - return $ret; - } - - public static function getJsTrackerTag( $site_id, $options = array() ) { - - if ( ! class_exists( 'owa_template' ) ) { - require_once(OWA_BASE_CLASSES_DIR.'owa_template.php'); - } - - $t = new owa_template(); - - // check to see if first hit tag is needed - if (owa_coreAPI::getSetting('base', 'delay_first_hit')) { - - $service = &owa_coreAPI::serviceSingleton(); - //check for persistant cookie - $v = $service->request->getOwaCookie('v'); - - if (empty($v)) { - - $options['first_hit_tag'] = true; - } - } - - //check to see if we shuld log clicks. - if ( ! owa_coreAPI::getSetting( 'base', 'log_dom_clicks' ) ) { - $options['do_not_log_clicks'] = true; - } - - if ( ! owa_coreAPI::getSetting( 'base', 'log_dom_streams' ) ) { - $options['do_not_log_domstream'] = true; - } - - if (owa_coreAPI::getSetting('base', 'is_embedded')) { - - // needed to override the endpoint used by the js tracker - $options['apiEndpoint'] = owa_coreAPI::getSetting('base', 'api_url'); - } - - $t->set( 'site_id', $site_id ); - $t->set( 'options', $options); - - $t->set_template('js_helper_tags.tpl'); - return $t->fetch(); - } - - public static function activateModule( $module_name ) { - - if ( $module_name ) { - - $m = owa_coreAPI::moduleClassFactory($module_name); - return $m->activate(); - } - } - - public static function deactivateModule( $module_name ) { - - if ( $module_name ) { - - $s = owa_coreAPI::serviceSingleton(); - $m = $s->getModule($module_name); - return $m->deactivate(); - } - } - - public static function installModule( $module_name ) { - - if ($module_name) { - - $m = owa_coreAPI::moduleClassFactory($module_name); - $status = $m->install(); - return $status; - } - } - - public static function generateInstanceSpecificHash() { - - if ( defined( 'OWA_SECRET' ) ) { - $salt = OWA_SECRET; - } else { - $salt = ''; - } - - if ( defined( 'OWA_DB_USER' ) ) { - $salt .= OWA_DB_USER; - } - - if ( defined( 'OWA_DB_PASSWORD' ) ) { - $salt .= OWA_DB_PASSWORD; - } - - return md5( $salt ); - } -} - -?> + --- a/owa/owa_db.php +++ /dev/null @@ -1,1079 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ -class owa_db extends owa_base { - - /** - * Database Connection - * - * @var object - */ - var $connection; - - var $connectionParams; - - /** - * Number of queries - * - * @var integer - */ - var $num_queries; - - /** - * Raw result object - * - * @var object - */ - var $new_result; - - /** - * Rows - * - * @var array - */ - var $result; - - /** - * Caller Params - * - * @var array - */ - var $params = array(); - - /** - * Status of selecting a databse - * - * @var boolean - */ - var $database_selection; - - /** - * Status of connection - * - * @var boolean - */ - var $connection_status; - - /** - * Number of rows in result set - * - * @var integer - */ - var $num_rows; - - /** - * Number of rows affected by insert/update/delete statements - * - * @var integer - */ - var $rows_affected; - - /** - * Microtime Start of Query - * - * @var unknown_type - */ - var $_start_time; - - /** - * Total Elapsed time of query - * - * @var unknown_type - */ - var $_total_time; - - /** - * Storage Array for components of sql queries - * - * @var array - */ - var $_sqlParams = array(); - - /** - * Sql Statement - * - * @var string - */ - var $_sql_statement; - - /** - * Last Sql Statement - * - * @var string - */ - var $_last_sql_statement; - - function __construct($db_host, $db_name, $db_user, $db_password, $open_new_connection = true, $persistant = false) { - - $this->connectionParams = array('host' => $db_host, - 'user' => $db_user, - 'password' => $db_password, - 'name' => $db_name, - 'open_new_connection' => $open_new_connection, - 'persistant' => $persistant); - - return parent::__construct(); - } - - function __destruct() { - - $this->close(); - } - - function connect() { - - - return false; - } - - function pconnect() { - - return false; - } - - function close() { - - return false; - } - - function getConnectionParam($name) { - - if (array_key_exists($name, $this->connectionParams)) { - return $this->connectionParams[$name]; - } - } - - /** - * Prepare string - * - * @param string $string - * @return string - */ - function prepare_string($string) { - - $chars = array("\t", "\n"); - return str_replace($chars, " ", $string); - } - - /** - * Starts the query microtimer - * - */ - function _timerStart() { - - $mtime = microtime(); - //$mtime = explode(' ', $mtime); - //$this->_start_time = $mtime[1].substr(round($mtime[0], 4), 1); - $this->_start_time = microtime(); - return; - } - - /** - * Ends the query microtimer and populates $this->_total_time - * - */ - function _timerEnd() { - - $mtime = microtime(); - //$mtime = explode(" ", $mtime); - //$endtime = $mtime[1].substr(round($mtime[0], 4), 1); - $endtime = microtime(); - //$this->_total_time = bcsub($endtime, $this->_start_time, 4); - $this->_total_time = number_format(((substr($endtime,0,9)) + (substr($endtime,-10)) - (substr($this->_start_time,0,9)) - (substr($this->_start_time,-10))),6); - - return; - - } - - function selectColumn($name, $as = '') { - - if (is_array($name)) { - $as = $name[1]; - $name = $name[0]; - } - - $this->_sqlParams['select_values'][] = array('name' => $name, 'as' => $as); - - return; - } - - function select($name, $as = '') { - return $this->selectColumn($name, $as = ''); - } - - function where($name, $value, $operator = '') { - - if (empty($operator)): - $operator = '='; - endif; - - if (!empty($value)): - - // hack for intentional empty value - if($value == ' '): - $value = ''; - endif; - - $this->_sqlParams['where'][$name] = array('name' => $name, 'value' => $value, 'operator' => $operator); - endif; - - return; - } - - function multiWhere($where_array = array()) { - - if (!empty($where_array)): - - foreach ($where_array as $k => $v) { - if (!empty($v)): - - if (empty($v['operator'])): - $v['operator'] = '='; - endif; - - $this->_sqlParams['where'][$k] = array('name' => $k, 'value' => $v['value'], 'operator' => $v['operator']); - endif; - } - - endif; - } - - function groupBy($col) { - - $this->_sqlParams['groupby'][] = $col; - return; - } - - function orderBy($col, $flag = '') { - - $this->_sqlParams['orderby'][] = array($col, $flag); - return; - } - - function order($flag) { - - $this->_sqlParams['order'] = $flag; - return; - } - - function limit($value) { - - $this->_sqlParams['limit'] = $value; - return; - } - - function offset($value) { - - $this->_sqlParams['offset'] = $value; - return; - } - - function set($name, $value) { - - $this->_sqlParams['set_values'][] = array('name' => $name, 'value' => $value); - return; - } - - function executeQuery() { - - switch($this->_sqlParams['query_type']) { - - case 'insert': - - return $this->_insertQuery(); - - case 'select': - - return $this->_selectQuery(); - - case 'update': - - return $this->_updateQuery(); - - case 'delete': - - return $this->_deleteQuery(); - - default: - - return $this->_query(); - } - } - - function getAllRows() { - - return $this->_selectQuery(); - } - - function getOneRow() { - - $ret = $this->_selectQuery(); - return $ret[0]; - } - - function _setSql($sql) { - $this->_sql_statement = $sql; - } - - function selectFrom($name, $as = '') { - - if (is_array($name)) { - $as = $name[1]; - $name = $name[0]; - } - - $this->_sqlParams['query_type'] = 'select'; - $this->_sqlParams['from'][$name] = array('name' => $name, 'as' => $as); - } - - function from($name, $as = '') { - return $this->selectFrom($name, $as = ''); - } - - function insertInto($table) { - - $this->_sqlParams['query_type'] = 'insert'; - $this->_sqlParams['table'] = $table; - } - - function deleteFrom($table) { - - $this->_sqlParams['query_type'] = 'delete'; - $this->_sqlParams['table'] = $table; - } - - function updateTable($table) { - - $this->_sqlParams['query_type'] = 'update'; - $this->_sqlParams['table'] = $table; - } - - function _insertQuery() { - owa_coreAPI::profile($this, __FUNCTION__, __LINE__); - $params = $this->_fetchSqlParams('set_values'); - - $count = count($params); - - $i = 0; - - $sql_cols = ''; - $sql_values = ''; - - foreach ($params as $k => $v) { - - $sql_cols .= $v['name']; - $sql_values .= "'".$this->prepare($v['value'])."'"; - - $i++; - - // Add commas - if ($i < $count): - - $sql_cols .= ", "; - $sql_values .= ", "; - - endif; - } - owa_coreAPI::profile($this, __FUNCTION__, __LINE__); - $this->_setSql(sprintf(OWA_SQL_INSERT_ROW, $this->_sqlParams['table'], $sql_cols, $sql_values)); - owa_coreAPI::profile($this, __FUNCTION__, __LINE__); - $ret = $this->_query(); - owa_coreAPI::profile($this, __FUNCTION__, __LINE__); - return $ret; - - } - - function _selectQuery() { - - $cols = ''; - $i = 0; - $params = $this->_fetchSqlParams('select_values'); - $count = count($params); - - foreach ($params as $k => $v) { - - $cols .= $v['name']; - - // Add as - if (!empty($v['as'])): - - $cols .= ' as '.$v['as']; - - endif; - - // Add commas - if ($i < $count - 1): - - $cols .= ', '; - - endif; - - $i++; - - } - - $this->_setSql(sprintf("SELECT %s FROM %s %s %s %s %s", - $cols, - $this->_makeFromClause(), - $this->_makeWhereClause(), - $this->_makeGroupByClause(), - $this->_makeOrderByClause(), - $this->_makeLimitClause() - )); - return $this->_query(); - - } - - - function _updateQuery() { - - $params = $this->_fetchSqlParams('set_values'); - - $count = count($params); - - $i = 0; - - $sql_cols = ''; - $sql_values = ''; - $set = ''; - - foreach ($params as $k => $v) { - - //$sql_cols = $sql_cols.$key; - //$sql_values = $sql_values."'".$this->prepare($value)."'"; - - // Add commas - if ($i != 0): - - $set .= ', '; - - endif; - - $set .= $v['name'] .' = \'' . $this->prepare($v['value']) . '\''; - - $i++; - } - - $this->_setSql(sprintf(OWA_SQL_UPDATE_ROW, $this->_sqlParams['table'], $set, $this->_makeWhereClause())); - - return $this->_query(); - - - - } - - function _deleteQuery() { - - $this->_setSql(sprintf(OWA_SQL_DELETE_ROW, $this->_sqlParams['table'], $this->_makeWhereClause())); - - return $this->_query(); - } - - function rawQuery($sql) { - - $this->_setSql($sql); - - return $this->_query(); - } - - function _fetchSqlParams($sql_params_name) { - - if (array_key_exists($sql_params_name, $this->_sqlParams)): - if (!empty($this->_sqlParams[$sql_params_name])): - return $this->_sqlParams[$sql_params_name]; - else: - return false; - endif; - else: - return false; - endif; - } - - function _makeWhereClause() { - - $params = $this->_fetchSqlParams('where'); - //print_r($params); - if (!empty($params)): - - $count = count($params); - - $i = 0; - - $where = 'WHERE '; - - foreach ($params as $k => $v) { - //print_r($v); - switch (strtolower($v['operator'])) { - - case '==': - $where .= sprintf("%s = '%s'",$v['name'], $v['value']); - break; - - case 'between': - - $where .= sprintf("%s BETWEEN '%s' AND '%s'", $v['name'], $v['value']['start'], $v['value']['end']); - break; - - case '=~': - $where .= sprintf("%s %s '%s'",$v['name'], OWA_SQL_REGEXP, $v['value']); - break; - - case '!~': - $where .= sprintf("%s %s '%s'",$v['name'], OWA_SQL_NOTREGEXP, $v['value']); - break; - - case '=@': - $where .= sprintf("LOCATE('%s', %s) > 0",$v['value'], $v['name']); - break; - - case '!@': - $where .= sprintf("LOCATE('%s', %s) = 0",$v['value'], $v['name']); - break; - - default: - $where .= sprintf("%s %s '%s'",$v['name'], $v['operator'], $v['value']); - break; - } - - - - if ($i < $count - 1): - - $where .= " AND "; - - endif; - - $i++; - - - } - - return $where; - - else: - - return; - - endif; - - } - - function join($type, $table, $as, $foreign_key, $primary_key = '') { - - if (!$primary_key) { - - if (!$as) { - $as = $table; - } - - $primary_key = $as.'.id'; - } - - - - $this->_sqlParams['joins'][$as] = array('type' => $type, - 'table' => $table, - 'as' => $as, - 'foreign_key' => $foreign_key, - 'primary_key' => $primary_key); - - } - - function _makeJoinClause() { - - $params = $this->_fetchSqlParams('joins'); - - if (!empty($params)): - - $join_clause = ''; - - foreach ($params as $k => $v) { - - if (!empty($v['as'])): - $join_clause .= sprintf(" %s %s AS %s ON %s = %s", $v['type'], - $v['table'], - $v['as'], - $v['foreign_key'], - $v['primary_key']); - else: - $join_clause .= sprintf(" %s %s ON %s = %s", $v['type'], - $v['table'], $v['foreign_key'], - $v['primary_key']); - endif; - - - - } - - return $join_clause; - - else: - return; - endif; - - } - - function _makeFromClause() { - - $from = ''; - $i = 0; - $params = $this->_fetchSqlParams('from'); - - if(!empty($params)): - - $count = count($params); - - foreach ($params as $k => $v) { - - $from .= $v['name']; - - // Add as - if (!empty($v['as'])): - - $from .= ' as '.$v['as']; - - endif; - - // Add commas - if ($i < $count - 1): - - $from .= ', '; - - endif; - - $i++; - - } - - $from .= $this->_makeJoinClause(); - - return $from; - else: - $this->e->debug("No SQL FROM params set."); - return false; - endif; - - } - - function _makeGroupByClause() { - - $params = $this->_fetchSqlParams('groupby'); - - if (!empty($params)): - - return sprintf("GROUP BY %s", $this->_makeDelimitedValueList($params)); - - else: - return; - endif; - - - } - - function _makeOrderByClause() { - - $sorts = $this->_fetchSqlParams('orderby'); - //print_r($sorts); - if (!empty($sorts)): - - $order = $this->_fetchSqlParams('order'); - - $i = 1; - $sort_string = ''; - $count = count($sorts); - foreach ($sorts as $sort) { - - // needed for backwards compatability. - if (!isset($sort[1])) { - $sort[1] = $order; - } - - $sort_string .= sprintf("%s %s",$sort[0], $sort[1]); - if ($i < $count) { - $sort_string .= ', '; - } - - $i++; - } - - return sprintf("ORDER BY %s", $sort_string); - - else: - return; - endif; - - - } - - function _makeLimitClause() { - - $param = $this->_fetchSqlParams('limit'); - - if(!empty($param)): - $limit = sprintf("LIMIT %d", $param); - - $offset = $this->_makeOffsetClause(); - - $ret = $limit . ' ' . $offset; - - return $ret; - else: - return; - endif; - - } - - function _makeOffsetClause() { - - $param = $this->_fetchSqlParams('offset'); - - if(!empty($param)): - return sprintf("OFFSET %d", $param); - else: - return; - endif; - - } - - - /** - * Creates a delimited value list from an array or arrays. - * - */ - function _makeDelimitedValueListArray($values, $delimiter = ', ', $inner_delimiter = ' ') { - - $items = ''; - $i = 0; - $count = count($values); - - //print_r($values); - - foreach ($values as $k) { - - $items .= implode($inner_delimiter, $k); - - // Add commas - if ($i < $count - 1): - - $items .= $delimiter; - - endif; - - $i++; - - } - - return $items; - - } - - function _makeDelimitedValueList($values, $delimiter = ', ') { - - $items = ''; - $i = 0; - $count = count($values); - - if (is_array($values)): - - foreach ($values as $k) { - - $items .= $k; - - // Add commas - if ($i < $count - 1): - - $items .= $delimiter; - - endif; - - $i++; - - } - - else: - - $items = $values; - - endif; - - return $items; - - } - - function _query() { - - switch($this->_sqlParams['query_type']) { - - case 'insert': - - $ret = $this->query($this->_sql_statement); - break; - case 'select': - - $ret = $this->get_results($this->_sql_statement); - - if (array_key_exists('result_format', $this->_sqlParams)): - $ret = $this->_formatResults($ret); - endif; - - break; - - case 'update': - - $ret = $this->query($this->_sql_statement); - break; - case 'delete': - - $ret = $this->query($this->_sql_statement); - break; - } - - $this->_last_sql_statement = $this->_sql_statement; - $this->_sql_statement = ''; - $this->_sqlParams = array(); - return $ret; - - } - - function removeNs($string, $ns = '') { - - if (empty($ns)): - $ns = $this->config['ns']; - endif; - - $ns_len = strlen($ns); - return substr($string, $ns_len); - - } - - function setFormat($value) { - - $this->_sqlParams['result_format'] = $value; - return; - } - - function _formatResults($results) { - - switch ($this->_sqlParams['result_format']) { - - case "single_array": - return $results[0]; - break; - case "single_row": - return $results[0]; - break; - case "inverted_array": - return owa_lib::deconstruct_assoc($results); - break; - default: - return $results; - break; - } - - } - - /** - * Drops a table - * - */ - function dropTable($table_name) { - - return $this->query(sprintf(OWA_SQL_DROP_TABLE, $table_name)); - - } - - /** - * Change table type - * - */ - function alterTableType($table_name, $engine) { - - return $this->query(sprintf(OWA_SQL_ALTER_TABLE_TYPE, $table_name, $engine)); - - } - - - /** - * Rename a table - * - */ - function renameTable($table_name, $new_table_name) { - - return $this->query(sprintf(OWA_SQL_RENAME_TABLE, $table_name, $new_table_name)); - } - - /** - * Renames column - * idempotent - */ - function renameColumn($table_name, $old, $new, $defs) { - - return $this->query(sprintf(OWA_SQL_RENAME_COLUMN, $table_name, $old, $new, $defs)); - } - - - /** - * Adds new column to table - * idempotent - */ - function addColumn($table_name, $column_name, $column_definition) { - - return $this->query(sprintf(OWA_SQL_ADD_COLUMN, $table_name, $column_name, $column_definition)); - } - - /** - * Drops a column from a table - * - */ - function dropColumn($table_name, $column_name) { - - return $this->query(sprintf(OWA_SQL_DROP_COLUMN, $table_name, $column_name)); - - } - - /** - * Changes the definition of a column - * - */ - function modifyColumn($table_name, $column_name, $column_definition) { - - return $this->query(sprintf(OWA_SQL_MODIFY_COLUMN, $table_name, $column_name, $column_definition)); - } - - /** - * Adds index to a column - * - */ - function addIndex($table_name, $column_name, $index_definition = '') { - - return $this->query(sprintf(OWA_SQL_ADD_INDEX, $table_name, $column_name, $index_definition)); - } - - /** - * Adds index to a column - * - */ - function dropIndex($table_name, $column_name) { - - return $this->query(sprintf(OWA_SQL_DROP_INDEX, $column_name, $table_name)); - } - - /** - * Creates a new table - * - */ - function createTable($entity) { - - //create column defs - - $all_cols = $entity->getColumns(); - - $columns = ''; - - $table_defs = ''; - - $i = 0; - $count = count($all_cols); - - // Control loop - - foreach ($all_cols as $k => $v){ - - // get column definition - $columns .= $v.' '.$entity->getColumnDefinition($v); - - // Add commas to column statement - if ($i < $count - 1): - - $columns .= ', '; - - endif; - - $i++; - - } - - // make table options - $table_options = ''; - $options = $entity->getTableOptions(); - - // table type - switch ($options['table_type']) { - - case "disk": - $table_type = OWA_DTD_TABLE_TYPE_DISK; - break; - case "memory": - $table_type = OWA_DTD_TABLE_TYPE_MEMORY; - break; - default: - $table_type = OWA_DTD_TABLE_TYPE_DEFAULT; - - } - - $table_options .= sprintf(OWA_DTD_TABLE_TYPE, $table_type); - - // character encoding type - - // just in case the propoerties is not i nthe array, add a default value. - if (!array_key_exists('character_encoding', $options)) { - - $options['character_encoding'] = OWA_DTD_CHARACTER_ENCODING_UTF8; - } - - $table_options .= sprintf(' ' . OWA_DTD_TABLE_CHARACTER_ENCODING, $options['character_encoding']); - - return $this->query(sprintf(OWA_SQL_CREATE_TABLE, $entity->getTableName(), $columns, $table_options)); - } - - - - /** - * Begins a SQL transaction statement - * - */ - function beginTransaction() { - - return $this->query(OWA_SQL_BEGIN_TRANSACTION); - } - - /** - * Ends a SQL transaction statement - * - */ - function endTransaction() { - - return $this->query(OWA_SQL_END_TRANSACTION); - } - -} - -?> + --- a/owa/owa_entity.php +++ /dev/null @@ -1,670 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_entity { - - var $name; - var $properties = array(); - var $_tableProperties = array(); - var $wasPersisted; - var $cache; - - function __construct($cache = '', $db = '') { - - } - - - function _getProperties() { - - $properties = array(); - - if (!empty($this->properties)) { - $vars = $this->properties; - } - - foreach ($vars as $k => $v) { - - $properties[$k] = $v->getValue(); - - } - - return $properties; - } - - function getColumns($return_as_string = false, $as_namespace = '', $table_namespace = false) { - - if (!empty($this->properties)) { - $all_cols = array_keys($this->properties); - $all_cols = array_flip($all_cols); - } - - //print_r($all_cols); - - $table = $this->getTableName(); - $new_cols = array(); - $ns = ''; - $as = ''; - - if (!empty($table_namespace)): - $ns = $table.'.'; - endif; - - foreach ($all_cols as $k => $v) { - - if (!empty($as_namespace)): - $as = ' AS '.$as_namespace.$k; - endif; - - $new_cols[] = $ns.$k.$as; - } - - // add implode as string here - - if ($return_as_string == true): - $new_cols = implode(', ', $new_cols); - endif; - - //print_r($new_cols); - return $new_cols; - - } - - function getColumnsSql($as_namespace = '', $table_namespace = true) { - - return $this->getColumns(true, $as_namespace, $table_namespace); - } - - /** - * Sets object attributes - * - * @param unknown_type $array - */ - function setProperties($array, $apply_filters = false) { - - $properties = $this->getColumns(); - - foreach ($properties as $k => $v) { - - if ( ! empty( $array[$v] ) ) { - if ( ! empty( $this->properties ) ) { - $this->set($v, $array[$v], $apply_filters); - } - } - } - } - - function setGuid($string) { - - return owa_lib::setStringGuid($string); - - } - - function set($name, $value, $filter = true) { - - if ( array_key_exists( $name, $this->properties ) ) { - $method = $name.'SetFilter'; - if ( $filter && method_exists( $this, $method ) ) { - $this->properties[$name]->setValue( $this->$method( $value ) ); - } else { - $this->properties[$name]->setValue( $value ); - } - } - } - - // depricated - function setValues($values) { - - return $this->setProperties($values); - } - - function get($name, $filter = true) { - - if (array_key_exists($name, $this->properties)) { - $method = $name.'GetFilter'; - if ( $filter && method_exists($this, $method) ) { - return $this->$method( $this->properties[$name]->getValue() ); - } else { - return $this->properties[$name]->getValue(); - } - } - } - - function getTableOptions() { - - if ($this->_tableProperties) { - if (array_key_exists('table_type', $this->_tableProperties)) { - return $this->_tableProperties['table_type']; - } - } - - return array('table_type' => 'disk'); - - } - - /** - * Persist new object - * - */ - function create() { - - $db = owa_coreAPI::dbSingleton(); - $all_cols = $this->getColumns(); - - $db->insertInto($this->getTableName()); - - // Control loop - foreach ($all_cols as $k => $v){ - - // drop column is it is marked as auto-incement as DB will take care of that. - if ($this->properties[$v]->auto_increment === true): - ; - else: - $db->set($v, $this->get($v, false)); - endif; - - } - - // Persist object - $status = $db->executeQuery(); - - // Add to Cache - if ($status == true) { - $this->addToCache(); - } - - return $status; - } - - function save() { - - if ( $this->wasPersisted ) { - return $this->update(); - } else { - return $this->create(); - } - } - - function addToCache($col = 'id') { - - if($this->isCachable()) { - $cache = &owa_coreAPI::cacheSingleton(); - $cache->setCollectionExpirationPeriod($this->getTableName(), $this->getCacheExpirationPeriod()); - $cache->set($this->getTableName(), $col.$this->get('id'), $this, $this->getCacheExpirationPeriod()); - } - } - - /** - * Update all properties of an Existing object - * - */ - function update($where = '') { - - $db = owa_coreAPI::dbSingleton(); - $db->updateTable($this->getTableName()); - - // get column list - $all_cols = $this->getColumns(); - - - // Control loop - foreach ($all_cols as $k => $v){ - - // drop column is it is marked as auto-incement as DB will take care of that. - - if ($this->get($v, false)) { - $db->set($v, $this->get($v, false)); - } - } - - if(empty($where)): - $id = $this->get('id'); - $db->where('id', $id); - - else: - $db->where($where, $this->get($where)); - endif; - - // Persist object - $status = $db->executeQuery(); - // Add to Cache - if ($status === true) { - $this->addToCache(); - } - - return $status; - - } - - /** - * Update named list of properties of an existing object - * - * @param array $named_properties - * @param array $where - * @return boolean - */ - function partialUpdate($named_properties, $where) { - - $db = &owa_coreAPI::dbSingleton(); - $db->updateTable($this->getTableName()); - - foreach ($named_properties as $v) { - - if ($this->get($v)){ - $db->set($v, $this->get($v)); - } - } - - if(empty($where)): - $db->where('id', $this->get('id')); - else: - $db->where($where, $this->get($where)); - endif; - - // Persist object - $status = $db->executeQuery(); - // Add to Cache - if ($status == true) { - $this->addToCache(); - } - - return $status; - } - - - /** - * Delete Object - * - */ - function delete($value = '', $col = 'id') { - - $db = owa_coreAPI::dbSingleton(); - $db->deleteFrom($this->getTableName()); - - if (empty($value)) { - $value = $this->get('id'); - } - - $db->where($col, $value); - - $status = $db->executeQuery(); - - // Add to Cache - if ($status == true){ - if ($this->isCachable()) { - $cache = &owa_coreAPI::cacheSingleton(); - $cache->remove($this->getTableName(), 'id'.$this->get('id')); - } - } - - return $status; - - } - - function load($value, $col = 'id') { - - return $this->getByColumn($col, $value); - - } - - function getByPk($col, $value) { - - return $this->getByColumn($col, $value); - - } - - function getByColumn($col, $value) { - - $cache_obj = ''; - - if ($this->isCachable()) { - $cache = &owa_coreAPI::cacheSingleton(); - $cache->setCollectionExpirationPeriod($this->getTableName(), $this->getCacheExpirationPeriod()); - $cache_obj = $cache->get($this->getTableName(), $col.$value); - } - - if (!empty($cache_obj)) { - - $cache_obj_properties = $cache_obj->_getProperties(); - $this->setProperties($cache_obj_properties); - $this->wasPersisted = true; - - } else { - - $db = owa_coreAPI::dbSingleton(); - $db->selectFrom($this->getTableName()); - $db->selectColumn('*'); - $db->where($col, $value); - $properties = $db->getOneRow(); - - if (!empty($properties)) { - - $this->setProperties($properties); - $this->wasPersisted = true; - // add to cache - $this->addToCache($col); - owa_coreAPI::debug('entity loaded from db'); - } - } - } - - function getTableName() { - - if ($this->_tableProperties) { - return $this->_tableProperties['name']; - } else { - return get_class($this); - } - - } - - function getTableAlias() { - - if ($this->_tableProperties) { - return $this->_tableProperties['alias']; - } - } - - function setTableName($name, $namespace = 'owa_') { - - $this->_tableProperties['alias'] = $name; - $this->_tableProperties['name'] = $namespace.$name; - } - - /** - * Sets the entity as cachable for some period of time - * - * @todo make this use the getSetting method but that requires a refactoring of - * the entity abstract class to not use an entity in it's constructor - */ - function setCachable($seconds = '') { - - $this->_tableProperties['cacheable'] = true; - - // set cache expiration period - if (!$seconds) { - // remove hard coded value. fix this see note above. - //$seconds = owa_coreAPI::getSetting('base', 'default_cache_expiration_period'); - $seconds = 604800; - } - - $this->setCacheExpirationPeriod($seconds); - } - - function isCachable() { - - if (owa_coreAPI::getSetting('base', 'cache_objects')) { - if (array_key_exists('cacheable', $this->_tableProperties)) { - return $this->_tableProperties['cacheable']; - } - } else { - return false; - } - - } - - function setPrimaryKey($col) { - //backwards compatability - $this->properties[$col]->setPrimaryKey(); - $this->_tableProperties['primary_key'] = $col; - - } - - function getForeignKeyColumn($entity) { - if (array_key_exists('relatedEntities', $this->_tableProperties)) { - if (array_key_exists($entity, $this->_tableProperties['relatedEntities'])) { - return $this->_tableProperties['relatedEntities'][$entity]; - } - } - } - - function isForeignKeyColumn($col) { - - if (array_key_exists($col, $this->properties)) { - return $this->properties[$col]->isForeignKey(); - } - } - - function getAllForeignKeys() { - - return; - } - - /** - * Create Table - * - * Handled by DB abstraction layer because the SQL associated with this is way too DB specific - */ - function createTable() { - - $db = owa_coreAPI::dbSingleton(); - // Persist table - $status = $db->createTable($this); - - if ($status == true): - owa_coreAPI::notice(sprintf("%s Table Created.", $this->getTableName())); - return true; - else: - owa_coreAPI::notice(sprintf("%s Table Creation Failed.", $this->getTableName())); - return false; - endif; - - } - - /** - * DROP Table - * - * Drops a table. will throw error is table does not exist - */ - function dropTable() { - - $db = owa_coreAPI::dbSingleton(); - // Persist table - $status = $db->dropTable($this->getTableName()); - - if ($status == true): - return true; - else: - return false; - endif; - - } - - function addColumn($column_name) { - - $def = $this->getColumnDefinition($column_name); - // Persist table - $db = owa_coreAPI::dbSingleton(); - $status = $db->addColumn($this->getTableName(), $column_name, $def); - - if ($status == true): - return true; - else: - return false; - endif; - - } - - function dropColumn($column_name) { - - $db = owa_coreAPI::dbSingleton(); - $status = $db->dropColumn($this->getTableName(), $column_name); - - if ($status == true): - return true; - else: - return false; - endif; - - } - - function modifyColumn($column_name) { - - $def = $this->getColumnDefinition($column_name); - $db = owa_coreAPI::dbSingleton(); - $status = $db->modifyColumn($this->getTableName(), $column_name, $def); - - if ($status == true): - return true; - else: - return false; - endif; - - - } - - function renameColumn($old_column_name, $column_name, $use_old_column_for_defs = false) { - - if ($use_old_column_for_defs) { - $def = $this->getColumnDefinition($old_column_name); - } else { - $def = $this->getColumnDefinition($column_name); - } - - $db = owa_coreAPI::dbSingleton(); - $status = $db->renameColumn($this->getTableName(), $old_column_name, $column_name, $def); - - if ($status == true): - return true; - else: - return false; - endif; - - } - - function renameTable($new_table_name) { - - $db = owa_coreAPI::dbSingleton(); - $status = $db->renameTable($this->getTableName(), $new_table_name); - - if ($status == true): - return true; - else: - return false; - endif; - return; - } - - function getColumnDefinition($column_name) { - - if (empty($this->properties)) { - return $this->$column_name->getDefinition(); - } else { - return $this->properties[$column_name]->getDefinition(); - } - } - - function setProperty($obj) { - - $this->properties[$obj->get('name')] = $obj; - - if ($obj->isForeignKey()) { - $fk = $obj->getForeignKey(); - - $this->_tableProperties['relatedEntities'][$fk[0]] = $obj->getName(); - $this->_tableProperties['foreign_keys'][$obj->getName()] = $fk[0]; - } - - } - - function getProperty($name) { - if (array_key_exists($name, $this->properties)) { - return $this->properties[$name]; - } - } - - function generateRandomUid($seed = '') { - - return crc32($_SERVER['SERVER_ADDR'].$_SERVER['SERVER_NAME'].getmypid().$this->getTableName().microtime().$seed.rand()); - } - - /** - * Create guid from string - * - * @param string $string - * @return integer - */ - function generateId($string) { - //require_once(OWA_DIR.'owa_lib.php'); - return owa_lib::setStringGuid($string); - } - - function setCacheExpirationPeriod($seconds) { - - $this->_tableProperties['cache_expiration_period'] = $seconds; - } - - function getCacheExpirationPeriod() { - - if (array_key_exists('cache_expiration_period', $this->_tableProperties)) { - return $this->_tableProperties['cache_expiration_period']; - } else { - // default of thirty days - return (3600); - } - } - - function getName() { - - return $this->name; - } - - function setSummaryLevel($num) { - - $this->_tableProperties['summary_level'] = $num; - } - - function getSummaryLevel() { - - if (array_key_exists('summary_level', $this->_tableProperties)) { - - return $this->_tableProperties['summary_level']; - - } else { - - return 0; - } - } - - function setCharacterEncoding($encoding) { - - $this->_tableProperties['character_encoding'] = $encoding; - } - - function wasPersisted() { - return $this->wasPersisted; - } -} - -?> --- a/owa/owa_env.php +++ /dev/null @@ -1,48 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ -if (!defined('OWA_PATH')) { - define('OWA_PATH', dirname(__FILE__)); -} -define('OWA_DIR', OWA_PATH . '/'); -define('OWA_MODULES_DIR', OWA_DIR.'modules/'); -define('OWA_BASE_DIR', OWA_PATH); // depricated -define('OWA_BASE_CLASSES_DIR', OWA_DIR); //depricated -define('OWA_BASE_MODULE_DIR', OWA_DIR.'modules/base/'); -define('OWA_BASE_CLASS_DIR', OWA_BASE_MODULE_DIR.'classes/'); -define('OWA_INCLUDE_DIR', OWA_DIR.'includes/'); -define('OWA_PEARLOG_DIR', OWA_INCLUDE_DIR.'Log-1.12.2'); -define('OWA_PHPMAILER_DIR', OWA_INCLUDE_DIR.'PHPMailer_v2.0.3/'); -define('OWA_HTTPCLIENT_DIR', OWA_INCLUDE_DIR.'httpclient-2009-09-02/'); -define('OWA_PLUGINS_DIR', OWA_DIR.'plugins'); //depricated -define('OWA_PLUGIN_DIR', OWA_DIR.'plugins/'); -define('OWA_CONF_DIR', OWA_DIR.'conf/'); -define('OWA_THEMES_DIR', OWA_DIR.'themes/'); -define('OWA_VERSION', '1.4.0'); -?> + --- a/owa/owa_httpRequest.php +++ /dev/null @@ -1,337 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_http { - - /** - * Configuration - * - * @var array - */ - var $config; - - /** - * Error handler - * - * @var object - */ - var $e; - - /** - * The length of text contained in the snippet - * - * @var string - */ - var $snip_len = 100; - - /** - * The string that is added to the beginning and - * end of snippet text. - * - * @var string - */ - var $snip_str = '...'; - - /** - * Anchor information for a particular link - * - * @var array - */ - var $anchor_info; - - var $crawler; - - var $testcrawler; - - var $http; - - var $response; - var $response_headers; - var $response_code; - - var $request_headers; - - function __construct() { - - $c = &owa_coreAPI::configSingleton(); - $this->config = $c->fetch('base'); - $this->e = &owa_coreAPI::errorSingleton(); - $this->crawler = new Snoopy; - // do not allow snoopy to follow links - $this->crawler->maxredirs = 5; - $this->crawler->agent = owa_coreAPI::getSetting('base', 'owa_user_agent'); - //$this->crawler->agent = "Firefox"; - //owa_coreAPI::debug('hello from owa_http constructor'); - return; - - } - - function fetch($uri) { - //owa_coreAPI::debug('hello from owa_http fetch'); - return $this->crawler->fetch($uri); - } - - function testFetch($url) { - - $http= new http_class; - owa_coreAPI::debug('hello owa_http testfetch method'); - /* Connection timeout */ - $http->timeout=0; - /* Data transfer timeout */ - $http->data_timeout=0; - /* Output debugging information about the progress of the connection */ - $http->debug=1; - $http->user_agent = owa_coreAPI::getSetting('base', 'owa_user_agent'); - $http->follow_redirect=1; - $http->redirection_limit=5; - $http->exclude_address=""; - $http->prefer_curl=0; - $arguments = array(); - $error=$http->GetRequestArguments($url,$arguments); - $error=$http->Open($arguments); - - //for(;;) - // { - $error=$http->ReadReplyBody($body,50000); - if($error!="" || strlen($body)==0) - owa_coreAPI::debug(HtmlSpecialChars($body)); - // } - - } - - /** - * Searches a fetched html document for the anchor of a specific url - * - * @param string $link - */ - function extract_anchor($link) { - - $matches = ''; - $regex = '/]*href=\"%s\"[^>]*>(.*?)<\/a>/i'; - - //$escaped_link = str_replace(array("/", "?"), array("\/", "\?"), $link); - - $pattern = trim(sprintf($regex, preg_quote($link, '/'))); - $search = preg_match($pattern, $this->response, $matches); - //$this->e->debug('pattern: '.$pattern); - //$this->e->debug('link: '.$link); - - - if (empty($matches)) { - if (substr($link, -1) === '/') { - $link = substr($link, 0, -1); - $pattern = trim(sprintf($regex, preg_quote($link, '/'))); - $search = preg_match($pattern, $this->response, $matches); - //$this->e->debug('pattern: '.$pattern); - //$this->e->debug('link: '.$link); - } - } - - $this->e->debug('ref search: '.$search); - //$this->e->debug('ref matches: '.print_r($this->results, true)); - //$this->e->debug('ref matches: '.print_r($matches, true)); - if (isset($matches[0])) { - $this->anchor_info = array('anchor_tag' => $matches[0], 'anchor_text' => owa_lib::inputFilter($matches[0])); - $this->e->debug('Anchor info: '.print_r($this->anchor_info, true)); - } - } - - /** - * Creates a text snippet of the portion of page where the - * specific link is found. - * - * Takes fully qualified URL for the link to search for. - * - * @param string $link - * @return string - */ - function extract_anchor_snippet($link){ - - // Search the page for a specific anchor - $this->extract_anchor($link); - - if(!empty($this->anchor_info['anchor_tag'])) { - - // drop certain HTML entitities and their content - $nohtml = $this->strip_selected_tags( - $this->response, - array('title', - 'head', - 'script', - 'object', - 'style', - 'meta', - 'link', - 'rdf:'), - true); - - //$this->e->debug('Refering page content after certain html entities were dropped: '.$this->results); - - // calc len of the anchor text - $atext_len = strlen($this->anchor_info['anchor_tag']); - - // find position within document of the anchor text - $start = strpos($nohtml, $this->anchor_info['anchor_tag']); - - if ($start < $this->snip_len) { - $part1_start_pos = 0; - $part1_snip_len = $start; - } else { - $part1_start_pos = $start; - $part1_snip_len = $this->snip_len; - } - - $replace_items = array("\r\n", "\n\n", "\t", "\r", "\n"); - // Create first segment of snippet - $first_part = substr($nohtml, 0, $part1_start_pos); - $first_part = str_replace($replace_items, '', $first_part); - $first_part = strip_tags(owa_lib::inputFilter($first_part)); - //$part1 = trim(substr($nohtml, $part1_start_pos, $part1_snip_len)); - $part1 = substr($first_part,-$part1_snip_len, $part1_snip_len); - - //$part1 = str_replace(array('\r\n', '\n\n', '\t', '\r', '\n'), '', $part1); - //$part1 = owa_lib::inputFilter($part1); - // Create second segment of snippet - $part2 = trim(substr($nohtml, $start + $atext_len, $this->snip_len+300)); - $part2 = str_replace($replace_items, '', $part2); - $part2 = substr(strip_tags(owa_lib::inputFilter($part2)),0, $this->snip_len); - - // Put humpty dumpy back together again and create actual snippet - $snippet = $this->snip_str.$part1.' '.owa_lib::inputFilter($this->anchor_info['anchor_tag']).' '.$part2.$this->snip_str; - - } else { - - $snippet = ''; - - } - - return $snippet; - - } - - function extract_title() { - - preg_match('~(||(\s*(.*?)\s*))~i', $this->response, $m); - - $this->e->debug("referer title extract: ". print_r($m, true)); - - return $m[3]; - } - - function strip_selected_tags($str, $tags = array(), $stripContent = false) { - - foreach ($tags as $k => $tag){ - - if ($stripContent == true) { - $pattern = sprintf('#(<%s.*?>)(.*?)(<\/%s.*?>)#is', preg_quote($tag), preg_quote($tag)); - $str = preg_replace($pattern,"",$str); - } - $str = preg_replace($pattern, ${2},$str); - } - - return $str; - } - - function SetupHTTP() - { - if(!IsSet($this->http)) - { - $this->http = new http_class; - $this->http->follow_redirect = 1; - $this->http->debug = 0; - $this->http->debug_response_body = 0; - $this->http->html_debug = 1; - $this->http->user_agent = owa_coreAPI::getSetting('base', 'owa_user_agent'); - $this->http->timeout = 3; - $this->http->data_timeout = 3; - } - } - - function OpenRequest($arguments, &$headers) - { - if(strlen($this->error=$this->http->Open($arguments))) - return(0); - if(strlen($this->error=$this->http->SendRequest($arguments)) - || strlen($this->error=$this->http->ReadReplyHeaders($headers))) - { - $this->http->Close(); - return(0); - } - if($this->http->response_status!=200) - { - $this->error = 'the HTTP request returned the status '.$this->http->response_status; - $this->http->Close(); - return(0); - } - return(1); - } - - function GetRequestResponse(&$response) - { - for($response = ''; ; ) - { - if(strlen($this->error=$this->http->ReadReplyBody($body, 500000))) - { - $this->http->Close(); - return(0); - } - if(strlen($body)==0) - break; - $response .= $body; - - } - $this->http->Close(); - owa_coreAPI::debug('http response code: '.$this->http->response_status); - return($response); - } - - function getRequest($url, $arguments = '', $response = '') { - - $this->SetupHTTP(); - - $this->http->GetRequestArguments($url, $arguments); - $arguments['RequestMethod']='GET'; - if(!$this->OpenRequest($arguments, $headers)) { - return(0); - } - $this->response = $this->GetRequestResponse($response); - return($this->response); - } - -} - - -?> + --- a/owa/owa_install.php +++ /dev/null @@ -1,113 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ -class owa_install extends owa_base{ - - /** - * Data access object - * - * @var object - */ - var $db; - - /** - * Version of string - * - * @var string - */ - var $version; - - /** - * Params array - * - * @var array - */ - var $params; - - /** - * Module name - * - * @var unknown_type - */ - var $module; - - /** - * Constructor - * - * @return owa_install - */ - - function owa_install() { - - $this->owa_base(); - $this->db = &owa_coreAPI::dbSingleton(); - - return; - } - - /** - * Check to see if schema is installed - * - * @return boolean - */ - function checkForSchema() { - - $table_check = array(); - //$this->e->notice(print_r($this->tables, true)); - // test for existance of tables - foreach ($this->tables as $table) { - $this->e->notice('Testing for existance of table: '. $table); - $check = $this->db->get_results(sprintf("show tables like 'owa_%s'", $table)); - //$this->e->notice(print_r($check, true)); - - // if a table is missing add it to this array - if (empty($check)): - $table_check[] = $table; - $this->e->notice('Did not find table: '. $table); - else: - $this->e->notice('Table '. $table. ' already exists.'); - endif; - } - - if (!empty($table_check)): - //$this->e->notice(sprintf("Schema Check: Tables '%s' are missing.", implode(',', $table_check))); - $this->e->notice(sprintf("Schema Check: Tables to install: %s", print_r($table_check, true))); - - return $table_check; - else: - return false; - endif; - - } - -} - -?> + --- a/owa/owa_lib.php +++ /dev/null @@ -1,1151 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ -class owa_lib { - - /** - * Convert Associative Array to String - * - * @param string $inner_glue - * @param string $outer_glue - * @param array $array - * @return string - */ - public static function implode_assoc($inner_glue, $outer_glue, $array) { - $output = array(); - foreach( $array as $key => $item ) { - $output[] = $key . $inner_glue . $item; - } - - return implode($outer_glue, $output); - } - - /** - * Deconstruct Associative Array - * - * For example this takes array([1] => array(a => dog, b => cat), [2] => array(a => sheep, b => goat)) - * and tunrs it into array([a] => array(dog, sheep), [b] => array(cat, goat)) - * - * @param array $a_array - * @return array $data_arrays - * @access public - */ - public static function deconstruct_assoc($a_array) { - if (!empty($a_array)): - - $data_arrays = array(); - - if(!empty($a_array[1])) : - - foreach ($a_array as $key => $value) { - foreach ($value as $k => $v) { - $data_arrays[$k][] = $v; - - } - } - else: - //print_r($a_array[0]); - foreach ($a_array[0] as $key => $value) { - $data_arrays[$key][] = $value; - } - endif; - - return $data_arrays; - else: - return array(); - endif; - } - - - public static function decon_assoc($a_array) { - - $data_arrays = array(); - - foreach ($a_array as $key => $value) { - //foreach ($value as $k => $v) { - $data_arrays[$key][] = $value; - - //} - } - - return $data_arrays; - } - - // php 4 compatible function - public static function array_intersect_key() { - - $arrs = func_get_args(); - $result = array_shift($arrs); - foreach ($arrs as $array) { - foreach ($result as $key => $v) { - if (!array_key_exists($key, $array)) { - unset($result[$key]); - } - } - } - return $result; - } - - // php4 compatible function - public static function array_walk_recursive(&$input, $funcname, $userdata = "") - { - if (!is_callable($funcname)) - { - return false; - } - - if (!is_array($input)) - { - return false; - } - - if (is_array($funcname)) - { - $funcname = $funcname[0].'::'.$funcname[1]; - } - - - foreach ($input AS $key => $value) - { - if (is_array($input[$key])) - { - array_walk_recursive($input[$key], $funcname, $userdata); - } - else - { - $saved_value = $value; - if (!empty($userdata)) - { - $funcname($value, $key, $userdata); - } - else - { - $funcname($value, $key); - } - - if ($value != $saved_value) - { - $input[$key] = $value; - } - } - } - return true; - } - - /** - * Array of Current Time - * - * @return array - * @access public - */ - public static function time_now() { - - $timestamp = time(); - - return array( - - 'year' => date("Y", $timestamp), - 'month' => date("n", $timestamp), - 'day' => date("d", $timestamp), - 'dayofweek' => date("w", $timestamp), - 'dayofyear' => date("z", $timestamp), - 'weekofyear' => date("W", $timestamp), - 'hour' => date("G", $timestamp), - 'minute' => date("i", $timestamp), - 'second' => date("s", $timestamp), - 'timestamp' => $timestamp - ); - } - - /** - * Error Handler - * - * @param string $msg - * @access public - * @depricated - */ - function errorHandler($msg) { - require_once(OWA_PEARLOG_DIR . '/Log.php'); - $conf = array('mode' => 0755, 'timeFormat' => '%X %x'); - $error_logger = &Log::singleton('file', $this->config['error_log_file'], 'ident', $conf); - $this->error_logger->_lineFormat = '[%3$s]'; - - return; - } - - /** - * Information array for Months in the year. - * - * @return array - */ - public static function months() { - - return array( - - 1 => array('label' => 'January'), - 2 => array('label' => 'February'), - 3 => array('label' => 'March'), - 4 => array('label' => 'April'), - 5 => array('label' => 'May'), - 6 => array('label' => 'June'), - 7 => array('label' => 'July'), - 8 => array('label' => 'August'), - 9 => array('label' => 'September'), - 10 => array('label' => 'October'), - 11 => array('label' => 'November'), - 12 => array('label' => 'December') - ); - - } - - public static function days() { - - return array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31); - } - - public static function years() { - - static $years; - - if (empty($years)): - - $start_year = 2005; - - $years = array($start_year); - - $num_years = date("Y", time()) - $start_year; - - for($i=1; $i<=$num_years; $i++) { - - $years[] = $start_year + $i; - } - - $years = array_reverse($years); - - endif; - - return $years; - } - - - /** - * Returns a label from an array of months - * - * @param int $month - * @return string - */ - public static function get_month_label($month) { - - static $months; - - if (empty($months)): - - $months = owa_lib::months(); - - endif; - - return $months[$month]['label']; - - } - - - /** - * Sets the suffix for Days used in Date labels - * @depricated - * @param string $day - * @return string - */ - public static function setDaySuffix($day) { - - switch ($day) { - - case "1": - $day_suffix = 'st'; - break; - case "2": - $day_suffix = 'nd'; - break; - case "3": - $day_suffix = 'rd'; - break; - default: - $day_suffix = 'th'; - } - - return $day_suffix; - - } - - /** - * Generates the label for a date - * @depricated - * @param array $params - * @return string - */ - public static function getDatelabel($params) { - - switch ($params['period']) { - - case "day": - return sprintf("%s, %d%s %s", - owa_lib::get_month_label($params['month']), - $params['day'], - owa_lib::setDaySuffix($params['day']), - $params['year'] - ); - break; - - case "month": - return sprintf("%s %s", - owa_lib::get_month_label($params['month']), - $params['year'] - ); - break; - - case "year": - return sprintf("%s", - $params['year'] - ); - break; - case "date_range": - return sprintf("%s, %d%s %s - %s, %d%s %s", - owa_lib::get_month_label($params['month']), - $params['day'], - owa_lib::setDaySuffix($params['day']), - $params['year'], - owa_lib::get_month_label($params['month2']), - $params['day2'], - owa_lib::setDaySuffix($params['day2']), - $params['year2'] - ); - break; - } - - return false; - - } - - /** - * Array of Reporting Periods - * @depricated - * @return array - */ - public static function reporting_periods() { - - return array( - - 'today' => array('label' => 'Today'), - 'yesterday' => array('label' => 'Yesterday'), - 'this_week' => array('label' => 'This Week'), - 'this_month' => array('label' => 'This Month'), - 'this_year' => array('label' => 'This Year'), - 'last_week' => array('label' => 'Last Week'), - 'last_month' => array('label' => 'Last Month'), - 'last_year' => array('label' => 'Last Year'), - 'last_half_hour' => array('label' => 'The Last 30 Minutes'), - 'last_hour' => array('label' => 'Last Hour'), - 'last_24_hours' => array('label' => 'The Last 24 Hours'), - 'last_seven_days' => array('label' => 'The Last Seven Days'), - 'last_thirty_days' => array('label' => 'The Last Thirty Days'), - 'same_day_last_week' => array('label' => 'Same Day last Week'), - 'same_week_last_year' => array('label' => 'Same Week Last Year'), - 'same_month_last_year' => array('label' => 'Same Month Last Year'), - 'date_range' => array('label' => 'Date Range') - ); - - } - - /** - * Array of Date specific Reporting Periods - * @depricated - * @return array - */ - public static function date_reporting_periods() { - - return array( - - 'day' => array('label' => 'Day'), - 'month' => array('label' => 'Month'), - 'year' => array('label' => 'Year'), - 'date_range' => array('label' => 'Date Range') - ); - - } - - /** - * Gets label for a particular reporting period - * - * @param unknown_type $period - * @return unknown - */ - public static function get_period_label($period) { - - $periods = owa_lib::reporting_periods(); - - return $periods[$period]['label']; - } - - /** - * Assembles the current URL from request params - * - * @return string - */ - public static function get_current_url() { - - $url = 'http'; - - if(isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on') { - $url.= 's'; - } - - if ( isset( $_SERVER['HTTP_HOST'] ) ) { - // contains port number - $domain = $_SERVER['HTTP_HOST']; - } else { - // does not contain port number. - $domain = $_SERVER['SERVER_NAME']; - if( $_SERVER['SERVER_PORT'] != 80 ) { - $domain .= ':' . $_SERVER['SERVER_PORT']; - } - } - - $url .= '://'.$domain; - - $url .= $_SERVER['REQUEST_URI']; - - return $url; - } - - public static function inputFilter($array) { - - if ( ! class_exists( 'owa_InputFilter' ) ) { - require_once(OWA_INCLUDE_DIR.'/class.inputfilter.php'); - } - - $f = new owa_InputFilter; - return $f->process($array); - - } - - public static function fileInclusionFilter($str) { - - $str = str_replace("http://", "", $str); - $str = str_replace("/", "", $str); - $str = str_replace("\\", "", $str); - $str = str_replace("../", "", $str); - $str = str_replace("..", "", $str); - $str = str_replace("?", "", $str); - $str = str_replace("%00", "", $str); - - if (strpos($str, '%00')) { - $str = ''; - } - - if (strpos($str, null)) { - $str = ''; - } - - return $str; - } - - /** - * Generic Factory method - * - * @param string $class_dir - * @param string $class_prefix - * @param string $class_name - * @param array $conf - * @return object - */ - public static function &factory($class_dir, $class_prefix, $class_name, $conf = array(), $class_suffix = '') { - - //$class_dir = strtolower($class_dir).DIRECTORY_SEPARATOR; - $class_dir = $class_dir.DIRECTORY_SEPARATOR; - $classfile = $class_dir . $class_name . '.php'; - $class = $class_prefix . $class_name . $class_suffix; - - /* - * Attempt to include a version of the named class, but don't treat - * a failure as fatal. The caller may have already included their own - * version of the named class. - */ - if (!class_exists($class)) { - - if (file_exists($classfile)) { - require_once ($classfile); - } - - } - - /* If the class exists, return a new instance of it. */ - if (class_exists($class)) { - $obj = &new $class($conf); - return $obj; - } - - $null = null; - return $null; - } - - /** - * Generic Object Singleton - * - * @param string $class_dir - * @param string $class_prefix - * @param string $class_name - * @param array $conf - * @return object - */ - public static function &singleton($class_dir, $class_prefix, $class_name, $conf = array()) { - - static $instance; - - if (!isset($instance)) { - // below missing a reference becasue the static vriable can not handle a reference - $instance = owa_lib::factory($class_dir, $class_prefix, $class_name, $conf); - } - - return $instance; - } - - /** - * 302 HTTP redirect the user to a new url - * - * @param string $url - */ - public static function redirectBrowser($url) { - - //ob_clean(); - // 302 redirect to URL - header ('Location: '.$url, true); - header ('HTTP/1.0 302 Found', true); - return; - } - - public static function makeLinkQueryString($query_params) { - - $new_query_params = array(); - - //Load params passed by caller - if (!empty($this->caller_params)): - foreach ($this->caller_params as $name => $value) { - if (!empty($value)): - $new_query_params[$name] = $value; - endif; - } - endif; - - // Load overrides - if (!empty($query_params)): - foreach ($query_params as $name => $value) { - if (!empty($value)): - $new_query_params[$name] = $value; - endif; - } - endif; - - // Construct GET request - if (!empty($new_query_params)): - foreach ($new_query_params as $name => $value) { - if (!empty($value)): - $get .= $name . "=" . $value . "&"; - endif; - } - endif; - - return $get; - - } - - public static function getRequestParams() { - - $params = array(); - - if (!empty($_POST)) { - $params = $_POST; - } else { - $params = $_GET; - } - - if (!empty($_COOKIE)) { - - $params = array_merge($params, $_COOKIE); - } - - return $params; - } - - public static function rekeyArray($array, $new_keys) { - - $new_keys = $new_keys; - $new_array = array(); - foreach ($array as $k => $v) { - - if (array_key_exists($k, $new_keys)) { - $k = $new_keys[$k]; - } - - $new_array[$k] = $v; - } - - return $new_array; - } - - - public static function stripParams($params, $ns = '') { - - $striped_params = array(); - - if (!empty($ns)) { - - $len = strlen($ns); - - foreach ($params as $n => $v) { - - // if namespace is present in param - if (strstr($n, $ns)) { - // strip the namespace value - $striped_n = substr($n, $len); - //add to striped array - $striped_params[$striped_n] = $v; - - } - - } - - return $striped_params; - - } else { - - return $params; - } - - } - - /** - * module specific require method - * - * @param unknown_type $module - * @param unknown_type $file - * @return unknown - * @deprecated - */ - public static function moduleRequireOnce($module, $file) { - - return require_once(OWA_BASE_DIR.'/modules/'.$module.'/'.$file.'.php'); - } - - /** - * module specific factory - * - * @param unknown_type $modulefile - * @param unknown_type $class_suffix - * @param unknown_type $params - * @return unknown - * @deprecated - */ - public static function moduleFactory($modulefile, $class_suffix = null, $params = '') { - - list($module, $file) = explode(".", $modulefile); - $class = 'owa_'.$file.$class_suffix; - - // Require class file if class does not already exist - if(!class_exists($class)): - owa_lib::moduleRequireOnce($module, $file); - endif; - - $obj = owa_lib::factory(OWA_BASE_DIR.'/modules/'.$module, '', $class, $params); - $obj->module = $module; - - return $obj; - } - - /** - * redirects borwser to a particular view - * - * @param unknown_type $data - */ - public static function redirectToView($data) { - //print_r($data); - $c = &owa_coreAPI::configSingleton(); - $config = $c->fetch('base'); - - $control_params = array('view_method', 'auth_status'); - - - $get = ''; - - foreach ($data as $n => $v) { - - if (!in_array($n, $control_params)): - - $get .= $config['ns'].$n.'='.$v.'&'; - - endif; - } - $new_url = sprintf($config['link_template'], $config['main_url'], $get); - - owa_lib::redirectBrowser($new_url); - - return; - } - - /** - * Displays a View without user authentication. Takes array of data as input - * - * @param array $data - * @deprecated - */ - public static function displayView($data, $params = array()) { - - $view = owa_lib::moduleFactory($data['view'], 'View', $params); - - return $view->assembleView($data); - - } - - /** - * Create guid from string - * - * @param string $string - * @return integer - * @access private - */ - public static function setStringGuid($string) { - if (!empty($string)): - return crc32(strtolower($string)); - else: - return; - endif; - } - - /** - * Add constraints into SQL where clause - * - * @param array $constraints - * @return string $where - * @access public - * @depricated - * @todo remove - */ - function addConstraints($constraints) { - - if (!empty($constraints)): - - $count = count($constraints); - - $i = 0; - - $where = ''; - - foreach ($constraints as $key => $value) { - - if (empty($value)): - $i++; - else: - - if (!is_array($value)): - $where .= $key . ' = ' . "'$value'"; - else: - - switch ($value['operator']) { - case 'BETWEEN': - $where .= sprintf("%s BETWEEN '%s' AND '%s'", $key, $value['start'], $value['end']); - break; - default: - $where .= sprintf("%s %s '%s'", $key, $value['operator'], $value['value']); - break; - } - - - endif; - - if ($i < $count - 1): - - $where .= " AND "; - - endif; - - $i++; - - endif; - - } - // needed in case all values in the array are empty - if (!empty($where)): - return $where; - else: - return; - endif; - - else: - - return; - - endif; - - - - } - - public static function assocFromString($string_state, $inner = '=>', $outer = '|||') { - - if (!empty($string_state)): - - if (strpos($string_state, $outer) === false): - - return $string_state; - - else: - - $array = explode($outer, $string_state); - - $state = array(); - - foreach ($array as $key => $value) { - - list($realkey, $realvalue) = explode($inner, $value); - $state[$realkey] = $realvalue; - - } - - endif; - - endif; - - return $state; - - - } - - /** - * Simple function to replicate PHP 5 behaviour - */ - - public static function microtime_float() { - list($usec, $sec) = explode(" ", microtime()); - return ((float)$usec + (float)$sec); - } - - /** - * Lists all files in a Directory - * - */ - public static function listDir($start_dir='.', $recursive = true) { - - $files = array(); - - if (is_dir($start_dir)): - - $fh = opendir($start_dir); - - while (($file = readdir($fh)) !== false) { - - // loop through the files, skipping . and .., and recursing if necessary - if (strcmp($file, '.')==0 || strcmp($file, '..')==0) continue; - $filepath = $start_dir . DIRECTORY_SEPARATOR . $file; - - - if (is_dir($filepath)): - if ($recursive === true): - $files = array_merge($files, owa_lib::listDir($filepath)); - endif; - else: - array_push($files, array('name' => $file, 'path' => $filepath)); - endif; - } - - closedir($fh); - - else: - // false if the function was called with an invalid non-directory argument - $files = false; - endif; - - return $files; - - } - - public static function makeDateArray($result, $format) { - - if (!empty($result)) { - - $timestamps = array(); - - foreach ($result as $row) { - - $timestamps[]= mktime(0,0,0,$row['month'],$row['day'],$row['year']); - } - - return owa_lib::makeDates($timestamps, $format); - - } else { - - return array(); - } - - } - - public static function makeDates($timestamps, $format) { - - sort($timestamps); - - $new_dates = array(); - - foreach ($timestamps as $timestamp) { - - $new_dates[] = date($format, $timestamp); - - } - - return $new_dates; - - } - - public static function html2txt($document){ - $search = array('@]*?>.*?@si', // Strip out javascript - '@]*?>.*?@siU', // Strip style tags properly - '@<[\/\!]*?[^<>]*?>@si', // Strip out HTML tags - '@@' // Strip multi-line comments including CDATA - ); - $text = preg_replace($search, '', $document); - return $text; - } - - public static function escapeNonAsciiChars($string) { - - return preg_replace('/[^(\x20-\x7F)]*/','', $string); - } - - /** - * Truncate string - * - * @param string $str - * @param integer $length - * @param string $trailing - * @return string - */ - public static function truncate ($str, $length=10, $trailing='...') { - - // take off chars for the trailing - $length-=strlen($trailing); - if (strlen($str) > $length): - // string exceeded length, truncate and add trailing dots - return substr($str,0,$length).$trailing; - else: - // string was already short enough, return the string - $res = $str; - endif; - - return $res; - } - - /** - * Simple Password Encryption - * - * @param string $password - * @return string - */ - public static function encryptPassword($password) { - - return md5(strtolower($password).strlen($password)); - } - - public static function timestampToYyyymmdd($timestamp = '') { - - if(empty($timestamp)) { - $timestamp = time(); - } - //print "before date"; - $yyyymmdd = date("Ymd", $timestamp); - ///print "after date"; - return $yyyymmdd; - } - - public static function setContentTypeHeader($type = 'html') { - - if (!$type) { - $type = 'html'; - } - - $content_types = array('html' => 'text/html', - 'xml' => 'text/xml', - 'json' => 'application/json', - 'jsonp' => 'application/json', - 'csv' => 'text/csv'); - - if (array_key_exists($type, $content_types)) { - $mime = $content_types[$type]; - header('Content-type: '.$mime); - } - } - - public static function array_values_assoc($assoc) { - - $values = array(); - - foreach ($assoc as $k => $v) { - - if (!empty($v)) { - $values[] = $v; - } - } - - return $values; - } - - public static function prepareCurrencyValue($string) { - - return $string * 100; - } - - public static function utf8Encode($string) { - - if ( owa_lib::checkForUtf8( $string ) ) { - return $string; - } else { - if (function_exists('iconv')) { - return iconv('UTF-8','UTF-8//TRANSLIT', $string); - } else { - // at least worth a try - return utf8_encode($string); - } - } - } - - public static function checkForUtf8($str) { - - if ( function_exists( 'mb_detect_encoding' ) ) { - $cur_encoding = mb_detect_encoding( $str ) ; - if ( $cur_encoding == "UTF-8" && mb_check_encoding( $str,"UTF-8" ) ) { - return true; - } - } else { - - $len = strlen( $str ); - for( $i = 0; $i < $len; $i++ ) { - - $c = ord( $str[$i] ); - if ($c > 128) { - - if ( ( $c > 247 ) ) { - return false; - } elseif ( $c > 239 ) { - $bytes = 4; - } elseif ( $c > 223 ) { - $bytes = 3; - } elseif ( $c > 191 ) { - $bytes = 2; - } else { - return false; - } - - if ( ( $i + $bytes ) > $len ) { - return false; - } - - while ( $bytes > 1 ) { - $i++; - $b = ord( $str[$i] ); - if ( $b < 128 || $b > 191 ) { - return false; - } - $bytes--; - } - } - } - return true; - } - } - - public static function formatCurrency($value, $local) { - - setlocale( LC_MONETARY, $local ); - $value = $value /100; - return money_format( '%.2n',$value ); - } - - public static function crc32AsHex($string) { - $crc = crc32($string); - //$crc += 0x100000000; - if ($crc < 0) { - $crc = 0xFFFFFFFF + $crc + 1; - } - return dechex($crc); - } - - public static function getLocalTimestamp($utc = '') { - - if ( ! $utc ) { - $utc = time(); - } - $local_timezone_offset = date('Z'); - $daylight_savings = date('I') * 3600; - $local_time = $utc - $local_timezone_offset + $daylight_savings; - return $local_time; - } - - public static function sanitizeCookieDomain($domain) { - - $pos = strpos($domain, '.'); - - //check for local host - if ( strpos( $domain, 'localhost' ) ) { - return false; - - // check for local domain - } elseif ( $pos === false) { - - return false; - - // ah-ha a real domain - } else { - // Remove port information. - $port = strpos( $domain, ':' ); - if ( $port ) { - $domain = substr( $domain, 0, $port ); - } - - // check for leading period, add if missing - $period = substr( $domain, 0, 1); - if ( $period != '.' ) { - $domain = '.'.$domain; - } - - return $domain; - } - } -} - -?> + --- a/owa/owa_location.php +++ /dev/null @@ -1,80 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ -class owa_location { - - /** - * City - * - * @var string - */ - var $city; - - /** - * Country - * - * @var string - */ - var $country; - - /** - * Latitude coordinates - * - * @var string - */ - var $latitude; - - /** - * Longitude coordinates - * - * @var string - */ - var $longitude; - - /** - * Location of concrete class plugins - * - * @var unknown_type - */ - var $plugin_dir; - - /** - * Constructor - * - * @return owa_location - */ - function __construct() { - - } -} - -?> + --- a/owa/owa_metric.php +++ /dev/null @@ -1,609 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ -class owa_metric extends owa_base { - - /** - * Current Time - * - * @var array - */ - var $time_now = array(); - - /** - * Data - * - * @var array - */ - var $data; - - /** - * The params of the caller, either a report or graph - * - * @var array - */ - var $params = array(); - - /** - * The lables for calculated measures - * - * @var array - */ - var $labels = array(); - - /** - * Page results - * - * @var boolean - */ - var $page_results = false; - - /** - * Data Access Object - * - * @var object - */ - var $db; - - var $_default_offset = 0; - - var $pagination; - - var $page; - - var $limit; - - var $order; - - var $table; - - var $select = array(); - - var $time_period_constraint_format = 'timestamp'; - - var $column; - - var $is_calculated = false; - - var $data_type; - - var $supported_data_types = array('percentage', 'decimal', 'integer', 'url', 'yyyymmdd', 'timestamp', 'string', 'currency'); - - function __construct($params = array()) { - - if (!empty($params)) { - $this->params = $params; - } - - $this->db = owa_coreAPI::dbSingleton(); - - $this->pagination = new owa_pagination; - - return parent::__construct(); - } - - - /** - * @depricated - * @remove - */ - function applyOptions($params) { - - // apply constraints - if (array_key_exists('constraints', $params)) { - - foreach ($params['constraints'] as $k => $v) { - - if(is_array($v)) { - $this->setConstraint($k, $v[1], $v[0]); - } else { - $this->setConstraint($k, $value); - } - } - } - - // apply limit - if (array_key_exists('limit', $params)) { - $this->setLimit($params['limit']); - } - - // apply order - if (array_key_exists('order', $params)) { - $this->setOrder($params['order']); - } - - // apply page - if (array_key_exists('page', $params)) { - $this->setOrder($params['page']); - } - - // apply offset - if (array_key_exists('offset', $params)) { - $this->setOrder($params['offset']); - } - - // apply format - if (array_key_exists('format', $params)) { - //$this->setFormat($params['format']); - } - - // apply period - if (array_key_exists('period', $params)) { - $this->setFormat($params['period']); - } - - // apply start date - if (array_key_exists('startDate', $params)) { - $this->setFormat($params['startDate']); - } - - // apply end date - if (array_key_exists('endDate', $params)) { - $this->setFormat($params['endDate']); - } - } - - function setConstraint($name, $value, $operator = '') { - - if (empty($operator)): - $operator = '='; - endif; - - if (!empty($value)): - $this->params['constraints'][$name] = array('operator' => $operator, 'value' => $value, 'name' => $name); - endif; - - return; - - } - - function setConstraints($array) { - - if (is_array($array)) { - - if (is_array($this->params['constraints'])) { - $this->params['constraints'] = array_merge($array, $this->params['constraints']); - } else { - $this->params['constraints'] = $array; - } - } - } - - function setLimit($value) { - - if (!empty($value)): - - $this->limit = $value; - - endif; - } - - function setOrder($value) { - - if (!empty($value)): - - $this->params['order'] = $value; - - endif; - } - - function setSort($column, $order) { - - //$this->params['orderby'][] = array($this->getColumnName($column), $order); - } - - function setSorts($array) { - - if (is_array($array)) { - - if (!empty($this->params['orderby'])) { - $this->params['orderby'] = array_merge($array, $this->params['orderby']); - - } else { - $this->params['orderby'] = $array; - } - - } - - } - - function setPage($value) { - - if (!empty($value)): - - $this->page = $value; - - if (!empty($this->pagination)): - $this->pagination->setPage($value); - endif; - - endif; - } - - - function getConstraints() { - - return $this->params['constraints']; - } - - function setOffset($value) { - - if (!empty($value)): - $this->params['offset'] = $value; - endif; - } - - function setFormat($value) { - if (!empty($value)): - $this->params['result_format'] = $value; - endif; - } - - function setPeriod($value) { - if (!empty($value)): - $this->params['period'] = $value; - endif; - } - - function setTimePeriod($period_name = '', $startDate = null, $endDate = null, $startTime = null, $endTime = null) { - - if ($startDate && $endDate) { - $period_name = 'date_range'; - $map = array('startDate' => $startDate, 'endDate' => $endDate); - } elseif ($startTime && $endTime) { - $period_name = 'time_range'; - $map = array('startTime' => $startTime, 'endTime' => $endTime); - } else { - $this->debug('no period params passed to owa_metric::setTimePeriod'); - return false; - } - - $p = owa_coreAPI::supportClassFactory('base', 'timePeriod'); - - $p->set($period_name, $map); - - $this->setPeriod($p); - } - - function makeTimePeriod($period = '') { - - $start = $this->params['period']->startDate->get($this->time_period_constraint_format); - $end = $this->params['period']->endDate->get($this->time_period_constraint_format); - - if (!empty($this->entity)) { - $col = $this->entity->getTableAlias().'.'.$this->time_period_constraint_format; - } else { - // needed for backwards compatability - $col = $this->time_period_constraint_format; - } - - - $this->params['constraints'][$col] = array('operator' => 'BETWEEN', 'value' => array('start' => $start, 'end' => $end)); - - return; - - } - - function setStartDate($date) { - if (!empty($date)): - $this->params['startDate'] = $date; - endif; - } - - function setEndDate($date) { - if (!empty($date)): - $this->params['endDate'] = $date; - endif; - } - - /** - * @depricated - */ - function generate($method = 'calculate') { - - $this->makeTimePeriod(); - - $this->db->multiWhere($this->getConstraints()); - - if (!empty($this->pagination)): - $this->pagination->setLimit($this->limit); - endif; - - // pass limit to db object if one exists - if (!empty($this->limit)): - $this->db->limit($this->limit); - endif; - - // pass order to db object if one exists - - - - // pagination - if (!empty($this->page)): - $this->pagination->setPage($this->page); - $offset = $this->pagination->calculateOffset(); - $this->db->offset($offset); - endif; - - - $results = $this->$method(); - - if (!empty($this->pagination)): - $this->pagination->countResults($results); - endif; - - return $results; - - } - - /** - * @depricated - */ - function generateResults() { - - // set period specific constraints - $this->makeTimePeriod(); - // set constraints - $this->db->multiWhere($this->getConstraints()); - // sets metric specific SQL - $this->calculate(); - // generate paginated result set - $rs = owa_coreAPI::supportClassFactory('base', 'paginatedResultSet'); - // pass limit to db object if one exists - if (!empty($this->limit)) { - $rs->setLimit($this->limit); - } - - // pass limit to db object if one exists - if (!empty($this->page)) { - $rs->setPage($this->page); - } - - // get results - $rs->generate($this->db); - - // add labels - $rs->setLabels($this->getLabels()); - - // add period info - $rs->setPeriodInfo($this->params['period']->getAllInfo()); - - return $rs; - } - - /** - * @depricated - */ - function calculatePaginationCount() { - - if (method_exists($this, 'paginationCount')): - $this->makeTimePeriod(); - - $this->db->multiWhere($this->getConstraints()); - - return $this->paginationCount(); - else: - return false; - endif; - } - - /** - * Set the labels of the measures - * - */ - function setLabels($array) { - - $this->labels = $array; - return; - } - - /** - * Sets an individual label - * return the key so that it can be nested - * @return $key string - */ - function addLabel($key, $label) { - - $this->labels[$key] = $label; - return $key; - } - - function getLabel($key = '') { - - if (!$key) { - $key = $this->getName(); - } - - return $this->labels[$key]; - } - - /** - * Sets an individual label - * return the key so that it can be nested - * @return $key string - */ - function setLabel($label) { - - $this->labels[$this->getName()] = $label; - - } - - /** - * Retrieve the labels of the measures - * - */ - function getLabels() { - - return $this->labels; - - } - - function getPagination() { - - $count = $this->calculatePaginationCount(); - $this->pagination->total_count = $count; - return $this->pagination->getPagination(); - - } - - function zeroFill(&$array) { - - // PHP 5 only function used here - if (function_exists("array_walk_recursive")) { - array_walk_recursive($array, array($this, 'addzero')); - } else { - owa_lib::array_walk_recursive($array, array(get_class($this).'Metric', 'addzero')); - } - - return $array; - - } - - function addzero(&$v, $k) { - - if (empty($v)) { - - $v = 0; - - } - - return; - } - - function getPeriod() { - - return $this->params['period']; - } - - function getOrder() { - - if (array_key_exists('order', $this->params)) { - return $this->params['order']; - } - } - - function getLimit() { - - return $this->limit; - - } - - function setEntity($name) { - - $this->entity = owa_coreAPI::entityFactory($name); - } - - function getTableName() { - - return $this->entity->getTableName(); - } - - function getTableAlias() { - - return $this->entity->getTableAlias(); - } - - function setSelect($column, $as = '') { - - if (!$as) { - - $as = $this->getName(); - } - - $this->select = array($column, $as); - } - - function getSelect() { - - return $this->select; - } - - function setName($name) { - - $this->name = $name; - } - - function getName() { - - return $this->name; - } - - function getFormat() { - - if (array_key_exists('result_format', $this->params)) { - return $this->params['result_format']; - } - } - - /** - * Sets a metric's column - */ - function setColumn($col_name, $name = '') { - - if (!$name) { - $name = $this->getName(); - } - $this->column = $this->entity->getTableAlias().'.'.$col_name; - $this->all_columns[$name] = $this->column; - - } - - /** - * Gets a metric's column name - */ - function getColumn() { - - return $this->column; - } - - function getEntityName() { - return $this->entity->getName(); - } - - function isCalculated() { - return $this->is_calculated; - } - - function setDataType($string) { - - if (in_array($string, $this->supported_data_types)) { - $this->data_type = $string; - } - - } - - function getDataType() { - return $this->data_type; - } -} - -?> + --- a/owa/owa_module.php +++ /dev/null @@ -1,744 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_module extends owa_base { - - /** - * Name of module - * - * @var string - */ - var $name; - - /** - * Description of Module - * - * @var string - */ - var $description; - - /** - * Version of Module - * - * @var string - */ - var $version; - - /** - * Schema Version of Module - * - * @var string - */ - //var $schema_version = 1; - - /** - * Name of author of module - * - * @var string - */ - var $author; - - /** - * URL for author of module - * - * @var unknown_type - */ - var $author_url; - - /** - * Wiki Page title. Used to generate link to OWA wiki for this module. - * - * Must be unique or else it will could clobber another wiki page. - * - * @var string - */ - var $wiki_title; - - /** - * name used in display situations - * - * @var unknown_type - */ - var $display_name; - - /** - * Array of event names that this module has handlers for - * - * @var array - */ - var $subscribed_events; - - /** - * Array of link information for admin panels that this module implements. - * - * @var array - */ - var $admin_panels; - - /** - * Array of navigation links that this module implements - * - * @var unknown_type - */ - var $nav_links; - - /** - * Array of metric names that this module implements - * - * @var unknown_type - */ - var $metrics; - - /** - * Array of graphs that are implemented by this module - * - * @var array - */ - var $graphs; - - /** - * The Module Group that the module belongs to. - * - * This is used often to group a module's features or functions together in the UI - * - * @var string - */ - var $group; - - /** - * Array of Entities that are implmented by the module - * - * @var array - */ - var $entities = array(); - - /** - * Required Schema Version - * - * @var array - */ - var $required_schema_version; - - /** - * Available Updates - * - * @var array - */ - var $updates = array(); - - /** - * Event Processors Map - * - * @var array - */ - var $event_processors = array(); - - /** - * Dimensions - * - * @var array - */ - var $dimensions = array(); - - /** - * Dimensions - * - * @var array - */ - var $denormalizedDimensions = array(); - - /** - * cli_commands - * - * @var array - */ - var $cli_commands = array(); - - /** - * API Methods - * - * @var array - */ - var $api_methods = array(); - - /** - * Background Jobs - * - * @var array - */ - var $background_jobs = array(); - - /** - * Update from CLI Required flag - * - * Used by controllers to see if an update error was becuase it needs - * to be applied from the command line instead of via the browser. - * - * @var boolean - */ - var $update_from_cli_required; - - /** - * Constructor - * - * - */ - function __construct() { - - parent::__construct(); - - $this->_registerEventHandlers(); - $this->_registerEventProcessors(); - $this->_registerEntities(); - } - - /** - * Method for registering event processors - * - */ - function _registerEventProcessors() { - - return false; - } - - /** - * Returns array of admin Links for this module to be used in navigation - * - * @access public - * @return array - */ - function getAdminPanels() { - - return $this->admin_panels; - } - - /** - * Returns array of report links for this module that will be - * used in report navigation - * - * @access public - * @return array - */ - function getNavigationLinks() { - - return $this->nav_links; - } - - /** - * Abstract method for registering event handlers - * - * Must be defined by a concrete module class for any event handlers to be registered - * - * @access public - * @return array - */ - function _registerEventHandlers() { - - return; - } - - /** - * Attaches an event handler to the event queue - * - * @param array $event_name - * @param string $handler_name - * @return boolean - */ - function registerEventHandler($event_name, $handler_name, $method = 'notify', $dir = 'handlers') { - - if (!is_object($handler_name)) { - - //$handler = &owa_lib::factory($handler_dir,'owa_', $handler_name); - $handler_name = owa_coreAPI::moduleGenericFactory($this->name, $dir, $handler_name, $class_suffix = null, $params = '', $class_ns = 'owa_'); - } - - $eq = owa_coreAPI::getEventDispatch(); - $eq->attach($event_name, array($handler_name, $method)); - } - - /** - * Attaches an event handler to the event queue - * - * @param array $event_name - * @param string $handler_name - * @return boolean - */ - function registerFilter($filter_name, $handler_name, $method, $priority = 10, $dir = 'filters') { - - if (!is_object($handler_name)) { - - //$handler = &owa_lib::factory($handler_dir,'owa_', $handler_name); - $handler_name = owa_coreAPI::moduleGenericFactory($this->name, $dir, $handler_name, $class_suffix = null, $params = '', $class_ns = 'owa_'); - } - - $eq = owa_coreAPI::getEventDispatch(); - $eq->attachFilter($filter_name, array($handler_name, $method), $priority); - } - - /** - * Attaches an event handler to the event queue - * - * @param array $event_name - * @param string $handler_name - * @return boolean - * @depricated - */ - function _addHandler($event_name, $handler_name) { - - return $this->registerEventHandler($event_name, $handler_name); - - } - - /** - * Abstract method for registering administration/settings page - * - * @access public - * @return array - */ - function registerAdminPanels() { - - return; - } - - /** - * Registers an admin panel with this module - * - */ - function registerSettingsPanel($panel) { - - $this->admin_panels[] = $panel; - - return true; - } - - /** - * Registers an admin panel with this module - * @depricated - */ - function addAdminPanel($panel) { - - return $this->registerSettingsPanel($panel); - } - - /** - * Registers Group Link with a particular View - * - */ - function addNavigationLink($group, $subgroup = '', $ref, $anchortext, $order = 0, $priviledge = 'viewer') { - - $link = array('ref' => $ref, - 'anchortext' => $anchortext, - 'order' => $order, - 'priviledge' => $priviledge); - - if (!empty($subgroup)): - $this->nav_links[$group][$subgroup]['subgroup'][] = $link; - else: - $this->nav_links[$group][$anchortext] = $link; - endif; - - return; - } - - /** - * Abstract method for registering a module's entities - * - * This method must be defined in concrete module classes in order for entities to be registered. - */ - function _registerEntities() { - - return false; - } - - function registerNavigation() { - - return false; - } - - - /** - * Registers an Entity - * - * Can take an array of entities or just a single entity as a string. - * Will add an enetiy to the module's entity array. Required for entity installation, etc. - * - * @param $entity_name array or string - */ - function registerEntity($entity_name) { - - if (is_array($entity_name)) { - $this->entities = array_merge($this->entities, $entity_name); - } else { - $this->entities[] = $entity_name; - } - } - - /** - * Registers Entity - * - * Depreicated see registerEntity - * - * @depricated - */ - function _addEntity($entity_name) { - - return $this->registerEntity($entity_name); - } - - - function getEntities() { - - return $this->entities; - } - - /** - * Installation method - * - * Creates database tables and sets schema version - * - */ - function install() { - - $this->e->notice('Starting installation of module: '.$this->name); - - $errors = ''; - - // Install schema - if (!empty($this->entities)): - - foreach ($this->entities as $k => $v) { - - $entity = owa_coreAPI::entityFactory($this->name.'.'.$v); - //$this->e->debug("about to execute createtable"); - $status = $entity->createTable(); - - if ($status != true): - $this->e->notice("Entity Installation Failed."); - $errors = true; - //return false; - endif; - - } - - endif; - - // activate module and persist configuration changes - if ($errors != true): - - // run post install hook - $ret = $this->postInstall(); - - if ($ret == true): - $this->e->notice("Post install proceadure was a success.");; - else: - $this->e->notice("Post install proceadure failed."); - endif; - - // save schema version to configuration - $this->c->persistSetting($this->name, 'schema_version', $this->getRequiredSchemaVersion()); - //activate the module and save the configuration - $this->activate(); - $this->e->notice("Installation complete."); - return true; - - else: - $this->e->notice("Installation failed."); - return false; - endif; - - } - - /** - * Post installation hook - * - */ - function postInstall() { - - return true; - } - - function isCliUpdateModeRequired() { - - return $this->update_from_cli_required; - } - - /** - * Checks for and applies schema upgrades for the module - * - */ - function update() { - - // list files in a directory - $files = owa_lib::listDir(OWA_DIR.'modules'.DIRECTORY_SEPARATOR.$this->name.DIRECTORY_SEPARATOR.'updates', false); - //print_r($files); - - $current_schema_version = $this->c->get($this->name, 'schema_version'); - - // extract sequence - foreach ($files as $k => $v) { - // the use of %d casts the sequence number as an int which is critical for maintaining the - // order of the keys in the array that we are going ot create that holds the update objs - //$n = sscanf($v['name'], '%d_%s', $seq, $classname); - $seq = substr($v['name'], 0, -4); - - settype($seq, "integer"); - - if ($seq > $current_schema_version): - - if ($seq <= $this->required_schema_version): - $this->updates[$seq] = owa_coreAPI::updateFactory($this->name, substr($v['name'], 0, -4)); - // if the cli update mode is required and we are not running via cli then return an error. - owa_coreAPI::debug('cli update mode required: '.$this->updates[$seq]->isCliModeRequired()); - if ($this->updates[$seq]->isCliModeRequired() === true && !defined('OWA_CLI')) { - //set flag in module - $this->update_from_cli_required = true; - owa_coreAPI::notice("Aborting update $seq. This update must be applied using the command line interface."); - return false; - } - // set schema version from sequence number in file name. This ensures that only one update - // class can ever be in use for a particular schema version - $this->updates[$seq]->schema_version = $seq; - endif; - endif; - - } - - // sort the array - ksort($this->updates, SORT_NUMERIC); - - //print_r(array_keys($this->updates)); - - foreach ($this->updates as $k => $obj) { - - $this->e->notice(sprintf("Applying Update %d (%s)", $k, get_class($obj))); - - $ret = $obj->apply(); - - if ($ret == true): - $this->e->notice("Update Suceeded"); - else: - $this->e->notice("Update Failed"); - return false; - endif; - } - - return true; - } - - /** - * Deactivates and removes schema for the module - * - */ - function uninstall() { - - return; - } - - /** - * Places the Module into the active module list in the global configuration - * - */ - function activate() { - - //if ($this->name != 'base'): - - $this->c->persistSetting($this->name, 'is_active', true); - $this->c->save(); - $this->e->notice("Module $this->name activated"); - - //endif; - - return; - } - - /** - * Deactivates the module by removing it from - * the active module list in the global configuration - * - */ - function deactivate() { - - if ($this->name != 'base'): - - $this->c->persistSetting($this->name, 'is_active', false); - $this->c->save(); - - endif; - - return; - } - - /** - * Checks to se if the schema is up to date - * - */ - function isSchemaCurrent() { - - $current_schema = $this->getSchemaVersion(); - $required_schema = $this->getRequiredSchemaVersion(); - - owa_coreAPI::debug("$this->name Schema version is $current_schema"); - owa_coreAPI::debug("$this->name Required Schema version is $required_schema"); - - if ($current_schema >= $required_schema): - return true; - else: - return false; - endif; - } - - function getSchemaVersion() { - - $current_schema = owa_coreAPI::getSetting($this->name, 'schema_version'); - - if (empty($current_schema)) { - $current_schema = 1; - - // if this is the base module then we need to let filters know to install the base schema - if ($this->name === 'base') { - // $s = owa_coreAPI::serviceSingleton(); - // $s->setInstallRequired(); - } - } - - return $current_schema; - } - - function getRequiredSchemaVersion() { - - return $this->required_schema_version; - } - - /** - * Registers updates - * - */ - function _registerUpdates() { - - return; - - } - - /** - * Adds an update class into the update array. - * This should be used to within the _registerUpdates method or else - * it will not get called. - * - */ - function _addUpdate($sequence, $class) { - - $this->updates[$sequence] = $class; - - return true; - } - - /** - * Adds an event processor class to the processor array. This is used to determin - * which class to use to process a particular event - */ - function addEventProcessor($event_type, $processor) { - $this->event_processors[$event_type] = $processor; - return; - } - - function registerMetric($metric_name, $class_name, $params = array()) { - - $map = array('class' => $class_name, 'params' => $params); - $this->metrics[$metric_name][] = $map; - } - - /** - * Register a dimension - * - * registers a dimension for use by metrics in producing results sets. - * - * @param $dim_name string - * @param $entity string the entiy housing the dimension. uses module.name format - * @param $column string the name of the column that represents the dimension - * @param $family string the name of the group or family that this dimension belongs to. optional. - * @param $description string a short description of this metric, used in various interfaces. - * @param $label string the lable of the dimension - * @param $foreign_key_name the name of the foreign key column that should - * be used to relate the metric entity to the dimension's entity. - * If one is not specfied, metrics will use any valid foreign key column they can find. - * Specifying this is important when the same column in a table is used by - * two different dimensions but the meaning of the column differs based on the value of the foreign key. - * a good example is the page_title column in the documents table. It is used by three dimensions: - * pageTitle, entryPageTitle, and existPageTitle. - * @param $denormalized boolean flag marks the dimension as being denormalized into a fact table - * as opposed to being housed in a related table. - */ - function registerDimension($dim_name, $entity, $column, $label = '', $family, $description = '', $foreign_key_name = '', $denormalized = false, $data_type = 'string') { - - $dim = array('family' => $family, 'name' => $dim_name, 'entity' => $entity, 'column' => $column, 'label' => $label, 'description' => $description, 'foreign_key_name' => $foreign_key_name, 'data_type' => $data_type, 'denormalized' => $denormalized); - - if ($denormalized) { - $this->denormalizedDimensions[$dim_name][$entity] = $dim; - } else { - $this->dimensions[$dim_name] = $dim; - } - } - - function registerCliCommand($command, $class) { - - $this->cli_commands[$command] = $class; - } - - function registerApiMethod($api_method_name, $user_function, $argument_names, $file = '', $required_capability = '') { - - $map = array('callback' => $user_function, 'args' => $argument_names, 'file' => $file); - - if ($required_capability) { - $map['required_capability'] = $required_capability; - } - - $this->api_methods[$api_method_name] = $map; - } - - function registerImplementation($type, $name, $class_name, $file) { - - $s = owa_coreAPI::serviceSingleton(); - $class_info = array($class_name, $file); - $s->setMapValue($type, $name, $class_info); - } - - function registerBackgroundJob($name, $command, $cron_tab, $max_processes = 1) { - - $job = array('name' => $name, - 'cron_tab' => $cron_tab, - 'command' => $command, - 'max_processes' => $max_processes); - - $s = owa_coreAPI::serviceSingleton(); - $s->setMapValue('background_jobs', $name, $job); - } -} - -?> + --- a/owa/owa_mw.php +++ /dev/null @@ -1,66 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_mw extends owa_client { - - function __construct($config = null) { - - return parent::__construct($config); - } - - function owa_mw($config = null) { - - return owa_mw::__construct($config); - } - - /** - * OWA Singleton Method - * - * Makes a singleton instance of OWA using the config array - */ - function singleton($config = null) { - - static $owa; - - if(!empty($owa)) { - return $owa; - } else { - $owa = new owa_mw($config); - return $owa; - } - } - - -} - -?> + --- a/owa/owa_news.php +++ /dev/null @@ -1,162 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_news extends lastRSS { - - /** - * Configuration - * - * @var array - */ - var $config; - - /** - * Error handler - * - * @var object - */ - var $e; - - var $crawler; - - function owa_news() { - - $c = &owa_coreAPI::configSingleton(); - $this->config = $c->fetch('base'); - $this->e = &owa_coreAPI::errorSingleton(); - $this->crawler = new owa_http; - $this->crawler->read_timeout = 20; - $this->cache_dir = ''; - $this->date_format = "F j, Y"; - $this->CDATA = 'content'; - $this->items_limit = 3; - return; - } - - /** - * This is a redefined Parse function that uses Snoopy to fetch - * the file instead of fopen. - * - * @param unknown_type $rss_url - * @return unknown - */ - function Parse ($rss_url) { - // Open and load RSS file - - $this->crawler->getRequest($rss_url); - $rss_content = $this->crawler->response; - - if (!empty($rss_content)) { - - // Parse document encoding - $result['encoding'] = $this->my_preg_match("'encoding=[\'\"](.*?)[\'\"]'si", $rss_content); - // if document codepage is specified, use it - if ($result['encoding'] != '') - { $this->rsscp = $result['encoding']; } // This is used in my_preg_match() - // otherwise use the default codepage - else - { $this->rsscp = $this->default_cp; } // This is used in my_preg_match() - - // Parse CHANNEL info - preg_match("'(.*?)'si", $rss_content, $out_channel); - foreach($this->channeltags as $channeltag) - { - $temp = $this->my_preg_match("'<$channeltag.*?>(.*?)'si", $out_channel[1]); - if ($temp != '') $result[$channeltag] = $temp; // Set only if not empty - } - // If date_format is specified and lastBuildDate is valid - if ($this->date_format != '' && ($timestamp = strtotime($result['lastBuildDate'])) !==-1) { - // convert lastBuildDate to specified date format - $result['lastBuildDate'] = date($this->date_format, $timestamp); - } - - // Parse TEXTINPUT info - preg_match("']*[^/])>(.*?)'si", $rss_content, $out_textinfo); - // This a little strange regexp means: - // Look for tag with or without any attributes, but skip truncated version (it's not beggining tag) - if (isset($out_textinfo[2])) { - foreach($this->textinputtags as $textinputtag) { - $temp = $this->my_preg_match("'<$textinputtag.*?>(.*?)'si", $out_textinfo[2]); - if ($temp != '') $result['textinput_'.$textinputtag] = $temp; // Set only if not empty - } - } - // Parse IMAGE info - preg_match("'(.*?)'si", $rss_content, $out_imageinfo); - if (isset($out_imageinfo[1])) { - foreach($this->imagetags as $imagetag) { - $temp = $this->my_preg_match("'<$imagetag.*?>(.*?)'si", $out_imageinfo[1]); - if ($temp != '') $result['image_'.$imagetag] = $temp; // Set only if not empty - } - } - // Parse ITEMS - preg_match_all("'(.*?)'si", $rss_content, $items); - $rss_items = $items[2]; - $i = 0; - $result['items'] = array(); // create array even if there are no items - foreach($rss_items as $rss_item) { - // If number of items is lower then limit: Parse one item - if ($i < $this->items_limit || $this->items_limit == 0) { - foreach($this->itemtags as $itemtag) { - $temp = $this->my_preg_match("'<$itemtag.*?>(.*?)'si", $rss_item); - if ($temp != '') $result['items'][$i][$itemtag] = $temp; // Set only if not empty - } - // Strip HTML tags and other bullshit from DESCRIPTION - if ($this->stripHTML && $result['items'][$i]['description']) - $result['items'][$i]['description'] = strip_tags($this->unhtmlentities(strip_tags($result['items'][$i]['description']))); - // Strip HTML tags and other bullshit from TITLE - if ($this->stripHTML && $result['items'][$i]['title']) - $result['items'][$i]['title'] = strip_tags($this->unhtmlentities(strip_tags($result['items'][$i]['title']))); - // If date_format is specified and pubDate is valid - if ($this->date_format != '' && ($timestamp = strtotime($result['items'][$i]['pubDate'])) !==-1) { - // convert pubDate to specified date format - $result['items'][$i]['pubDate'] = date($this->date_format, $timestamp); - } - // Item counter - $i++; - } - } - - $result['items_count'] = $i; - return $result; - } - else // Error in opening return False - { - $this->e->notice('no rss content found at: '.$rss_url); - return False; - } - } - -} - -?> + --- a/owa/owa_observer.php +++ /dev/null @@ -1,78 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_observer extends owa_base { - - /** - * The type of event that an observer would want to hear about. - * - * @var array - * @access private - */ - var $_event_type = array(); - - var $id; - - /** - * Event Message - * - * @var array - */ - var $m; - - /** - * Creates a new basic Log_observer instance. - * - * @param integer $priority The highest priority at which to receive - * log event notifications. - * - * @access public - */ - function __construct() { - $this->id = md5(microtime()); - } - - function handleEvent($action) { - - $data = owa_coreAPI::performAction($action, array('event' => $this->m)); - return owa_coreAPI::debug(sprintf("Handled Event. Action: %s", $action)); - - } - - function sendMail($email_address, $subject, $msg) { - - mail($email_address, $subject, $msg); - owa_coreAPI::debug('Sent e-mail with subject of "'.$subject.'" to: '.$email_address); - return; - } - -} - -?> + --- a/owa/owa_php.php +++ /dev/null @@ -1,61 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_php extends owa_client { - - function __construct($config = null) { - - return parent::__construct($config); - } - - /** - * OWA Singleton Method - * - * Makes a singleton instance of OWA using the config array - */ - function singleton($config = null) { - - static $owa; - - if(!empty($owa)) { - return $owa; - } else { - return new owa_php($config); - } - } -} - -?> + --- a/owa/owa_reportController.php +++ /dev/null @@ -1,163 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - - -class owa_reportController extends owa_adminController { - - /** - * Constructor - * - * @param array $params - * @return - */ - function __construct($params) { - - $this->setControllerType('report'); - $this->_setCapability('view_reports'); - return parent::__construct($params); - - } - - /** - * pre action - * - */ - function pre() { - - // site lists - $sites = owa_coreAPI::getSitesList(); - $this->set('sites', $sites); - // set default siteId if none exists on request - $site_id = $this->getParam('siteId'); - if ( ! $site_id ) { - $site_id = $this->getParam('site_id'); - } - if ( ! $site_id ) { - $site_id = $sites[0]['site_id']; - } - $this->setParam('siteId', $site_id); - - // pass full set of params to view - $this->data['params'] = $this->params; - - // set default period if necessary - if (empty($this->params['period'])) { - $this->params['period'] = 'last_seven_days'; - $this->set('is_default_period', true); - } - - $this->setPeriod($this->getParam('period')); - - $this->setView('base.report'); - $this->setViewMethod('delegate'); - - $this->dom_id = str_replace('.', '-', $this->getParam('do')); - $this->data['dom_id'] = $this->dom_id; - $this->data['do'] = $this->getParam('do'); - - // setup tabs - $siteId = $this->get('siteId'); - $gm = owa_coreAPI::supportClassFactory('base', 'goalManager', $siteId); - - $tabs = array(); - $site_usage = array( - 'tab_label' => 'Site Usage', - 'metrics' => 'visits,pagesPerVisit,visitDuration,bounceRate,uniqueVisitors', - 'sort' => 'visits-' - ); - - $tabs['site_usage'] = $site_usage; - - // ecommerce tab - if ( owa_coreAPI::getSiteSetting( $this->getParam('siteId'), 'enableEcommerceReporting') ) { - - $ecommerce = array( - 'tab_label' => 'e-commerce', - 'metrics' => 'visits,transactions,transactionRevenue,revenuePerVisit,revenuePerTransaction,ecommerceConversionRate', - 'sort' => 'transactionRevenue-' - ); - - $tabs['ecommerce'] = $ecommerce; - } - $goal_groups = $gm->getActiveGoalGroups(); - - if ( $goal_groups ) { - foreach ($goal_groups as $group) { - $goal_metrics = 'visits'; - $active_goals = $gm->getActiveGoalsByGroup($group); - - if ( $active_goals ) { - - foreach ($active_goals as $goal) { - $goal_metrics .= sprintf(',goal%sCompletions', $goal); - } - } - - $goal_metrics .= ',goalValueAll'; - $goal_group = array( - 'tab_label' => $gm->getGoalGroupLabel($group), - 'metrics' => $goal_metrics, - 'sort' => 'goalValueAll-' - ); - $name = 'goal_group_'.$group; - $tabs[$name] = $goal_group; - } - } - - $this->set('tabs', $tabs); - $this->set('tabs_json', json_encode($tabs)); - - - //$this->body->set('sub_nav', owa_coreAPI::getNavigation($this->get('nav_tab'), 'sub_nav')); - $nav = owa_coreAPI::getGroupNavigation('Reports'); - - if ( ! owa_coreAPI::getSiteSetting( $this->getParam( 'siteId' ), 'enableEcommerceReporting' ) ) { - unset($nav['Ecommerce']); - } - - $this->set('top_level_report_nav', $nav); - - } - - function post() { - - return; - } - - function setTitle($title, $suffix = '') { - - $this->set('title', $title); - $this->set('titleSuffix', $suffix); - } -} - -?> + --- a/owa/owa_requestContainer.php +++ /dev/null @@ -1,286 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_requestContainer { - - var $cli_args; - var $is_https; - var $owa_params = array(); - var $cookies = array(); - var $owa_cookies = array(); - var $session = array(); - var $request = array(); - var $server; - var $guid; - var $state; - var $request_type; - - /** - * Singleton returns request params - * - * @return array - * @todo DEPRICATED - */ - function &getInstance() { - - static $params; - - if(empty($params)): - - $params = owa_lib::getRequestParams(); - // Clean Input arrays - $params = owa_lib::inputFilter($params); - //strip all params that do not include the namespace - $params = owa_lib::stripParams($params, owa_coreAPI::getSetting('base', 'ns')); - // translate certain request variables that are reserved in javascript - $params = owa_lib::rekeyArray($params, array_flip(owa_coreAPI::getSetting('base', 'reserved_words'))); - - $params['guid'] = crc32(microtime().getmypid()); - - return $params; - - else: - - return $params; - - endif; - - } - - function __construct() { - - $this->guid = crc32(microtime().getmypid()); - - // CLI args - if (array_key_exists('argv', $_SERVER)) { - - $this->cli_args = $_SERVER['argv']; - } - - // php's server variables - $this->server = $_SERVER; - - // files - if (!empty($_FILES)) { - $this->files = $_FILES; - } - - // cookies - if (!empty($_COOKIE)) { - $this->cookies = $_COOKIE; - $this->owa_cookies = owa_lib::stripParams($_COOKIE, owa_coreAPI::getSetting('base', 'ns')); - // hack against other frameworks sanitizing cookie data and blowing away our '>' delimiter - // this should be removed once all cookies are using json format. - foreach ($this->owa_cookies as $k => $cookie) { - if (strpos($cookie, '>')) { - $this->owa_cookies[$k] = str_replace(">", ">", $cookie); - } - } - } - - // cookies - if (!empty($_SESSION)) { - $this->session = $_SESSION; - } - - /* STATE CONTAINER */ - - // state - $this->state = owa_coreAPI::supportClassFactory('base', 'state'); - // merges session - if (!empty($this->session)) { - $this->state->addStores(owa_lib::stripParams($this->session, owa_coreAPI::getSetting('base', 'ns'))); - } - - // merges cookies - foreach ($this->owa_cookies as $k => $cookie) { - - $this->state->setInitialState($k, $cookie, 'cookie'); - } - - - //print_r($this->state); - // create request params from GET or POST or CLI args - $params = array(); - - if (!empty($_POST)) { - // get params from _POST - $params = $_POST; - $this->request_type = 'post'; - } elseif (!empty($_GET)) { - // get params from _GET - $params = $_GET; - $this->request_type = 'get'; - } elseif (!empty($this->cli_args)) { - // get params from the command line args - // $argv is a php super global variable - - for ($i=1; $icli_args);$i++) { - $it = explode("=",$this->cli_args[$i]); - - if ( isset( $it[1] ) ) { - $params[ $it[0] ] = $it[1]; - } else { - $params[ $it[0] ] = ''; - } - } - - $this->request_type = 'cli'; - } - - // merge in cookies into the request params - if (!empty($_COOKIE)) { - //$params = array_merge($params, $this->owa_cookies); - } - - // Clean Input arrays - $this->request = owa_lib::inputFilter($params); - if (array_key_exists('owa_action', $this->request)) { - - $this->request['owa_action'] = owa_lib::fileInclusionFilter($this->request['owa_action']); - } - - if (array_key_exists('owa_do', $this->request)) { - - $this->request['owa_do'] = owa_lib::fileInclusionFilter($this->request['owa_do']); - } - // strip owa namespace - $this->owa_params = owa_lib::stripParams($this->request, owa_coreAPI::getSetting('base', 'ns')); - // translate certain request variables that are reserved in javascript - $this->owa_params = owa_lib::rekeyArray($this->owa_params, array_flip(owa_coreAPI::getSetting('base', 'reserved_words'))); - - if(isset($_SERVER['HTTPS'])): - $this->is_https = true; - endif; - - return; - - } - - function getParam($name) { - - if (array_key_exists($name, $this->owa_params)) { - return $this->owa_params[$name]; - } else { - return false; - } - - } - - function setParam($name, $value) { - - $this->owa_params[$name] = $value; - return true; - } - - function getCookie($name) { - - if (array_key_exists($name, $this->cookies)) { - return $this->cookies[$name]; - } else { - return false; - } - - } - - function getRequestParam($name) { - - if (array_key_exists($name, $this->request)) { - return $this->request[$name]; - } else { - return false; - } - } - - function getAllRequestParams() { - - return $this->request; - } - - function getAllOwaParams() { - - return $this->owa_params; - } - - function mergeParams($params) { - - $this->owa_params = array_merge($this->owa_params, $params); - return; - } - - function getServerParam($name) { - - if (array_key_exists($name, $this->server)) { - return $this->server[$name]; - } else { - return false; - } - } - - function decodeRequestParams() { - - $params = array(); - // Apply caller specific params - foreach ($this->owa_params as $k => $v) { - if (is_array($v)) { - array_walk_recursive($v, array($this, 'arrayUrlDecode')); - $params[$k] = $v; - } else { - $params[$k] = urldecode($v); - } - } - - // clean params after decode - $params = owa_lib::inputFilter($params); - // replace owa params - $this->owa_params = $params; - //debug - owa_coreAPI::debug('decoded OWA params: '. print_r($this->owa_params, true)); - return; - - } - - function arrayUrlDecode(&$val, $index) { - urldecode($val); - } - - function getOwaCookie($name) { - - if (array_key_exists($name, $this->owa_cookies)) { - return $this->owa_cookies[$name]; - } else { - return false; - } - - } - -} - -?> + --- a/owa/owa_template.php +++ /dev/null @@ -1,1008 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_template extends Template { - - /** - * Configuration - * - * @var array - */ - var $config; - - var $theme_template_dir; - - var $module_local_template_dir; - - var $module_template_dir; - - var $e; - - var $period; - - /** - * Params passed by calling caller - * - * @var array - */ - var $caller_params; - - function owa_template($module = null, $caller_params = array()) { - - $this->caller_params = $caller_params; - - $c = &owa_coreAPI::configSingleton(); - $this->config = $c->fetch('base'); - - $this->e = &owa_coreAPI::errorSingleton(); - - // set template dirs - if(!empty($caller_params['module'])): - $this->_setTemplateDir($module); - else: - $this->_setTemplateDir('base'); - endif; - - $this->time_now = owa_lib::time_now(); - - return; - } - - function _setTemplateDir($module) { - - // set module template dir - $this->module_template_dir = OWA_DIR.'modules'.DIRECTORY_SEPARATOR . $module . DIRECTORY_SEPARATOR.'templates'.DIRECTORY_SEPARATOR; - - // set module local template override dir - $this->module_local_template_dir = $this->module_template_dir.'local'.DIRECTORY_SEPARATOR; - - // set theme template dir - $this->theme_template_dir = OWA_THEMES_DIR.$this->config['theme'].DIRECTORY_SEPARATOR; - - return; - } - - function getTemplatePath($module, $file) { - - $this->_setTemplateDir($module); - - if ($file == null) { - owa_coreAPI::error('No template file was specified.'); - return false; - } else { - // check module's local modification template Directory - if (file_exists($this->module_local_template_dir.$file)) { - $fullfile = $this->module_local_template_dir.$file; - - // check theme's template Directory - } elseif(file_exists($this->theme_template_dir.$file)) { - $fullfile = $this->theme_template_dir.$file; - - // check module's template directory - } elseif(file_exists($this->module_template_dir.$file)) { - $fullfile = $this->module_template_dir.$file; - - // throw error - } else { - $this->e->err(sprintf('%s was not found in any template directory.', $file)); - return false; - } - return $fullfile; - } - - - - } - - /** - * Set the template file - * @depricated - * @param string $file - */ - function set_template($file = null) { - - if (!$file): - owa_coreAPI::error('No template file was specified.'); - return false; - else: - // check module's local modification template Directory - if (file_exists($this->module_local_template_dir.$file)): - $this->file = $this->module_local_template_dir.$file; - - // check theme's template Directory - elseif(file_exists($this->theme_template_dir.$file)): - $this->file = $this->theme_template_dir.$file; - - // check module's template directory - elseif(file_exists($this->module_template_dir.$file)): - $this->file = $this->module_template_dir.$file; - - // throw error - else: - $this->e->err(sprintf('%s was not found in any template directory.', $file)); - return false; - endif; - - return true; - endif; - } - - function setTemplateFile($module, $file) { - - //choose file - $filepath = $this->getTemplatePath($module, $file); - //set template - if ($filepath) { - $this->file = $filepath; - } - } - - /** - * Truncate string - * - * @param string $str - * @param integer $length - * @param string $trailing - * @return string - */ - function truncate ($str, $length=10, $trailing='...') { - - return owa_lib::truncate ($str, $length, $trailing); - } - - function get_month_label($month) { - - return owa_lib::get_month_label($month); - } - - /** - * Chooses the right icon based on browser type - * - * @param unknown_type $browser_type - * @return unknown - */ - function choose_browser_icon($browser_type) { - - switch (strtolower($browser_type)) { - - case "ie": - $file = 'msie.png'; - $name = 'Microsoft Internet Explorer'; - break; - case "internet explorer": - $file = 'msie.png'; - $name = 'Microsoft Internet Explorer'; - break; - case "firefox": - $file = 'firefox.png'; - $name = 'Firefox'; - break; - case "safari": - $file = 'safari.png'; - $name = 'Safari'; - break; - case "opera": - $file = 'opera.png'; - $name = 'Opera'; - break; - case "netscape": - $file = 'netscape.png'; - $name = 'Netscape'; - break; - case "mozilla": - $file = 'mozilla.png'; - $name = 'Mozilla'; - break; - case "konqueror": - $file = 'kon.png'; - $name = 'Konqueror'; - break; - case "camino": - $file = 'camino.png'; - $name = 'Camino'; - break; - case "aol": - $file = 'aol.png'; - $name = 'AOL'; - break; - case "default browser": - $file = 'default_browser.png'; - $name = 'Unknown Browser'; - break; - default: - $name = 'Unknown Browser'; - $file = 'default_browser.png'; - - } - - return sprintf('%s', $name, $this->makeImageLink('base/i/'.$file)); - - } - - function getBrowserIcon($browser_family, $size = '128x128', $module = 'base') { - - if ($browser_family) { - $browser_family = strtolower($browser_family); - } - - - if (file_exists(OWA_MODULES_DIR.$module.'/i/browsers/'.$size.'/'.$browser_family.'.png')) { - return $this->makeImageLink('base/i/browsers/'.$size.'/'.$browser_family.'.png'); - } else { - return $this->makeImageLink('base/i/browsers/'.$size.'/default.png'); - } - } - - - function makeLinkQueryString($query_params) { - - $new_query_params = array(); - - //Load params passed by caller - if (!empty($this->caller_params)): - foreach ($this->caller_params as $name => $value) { - if (!empty($value)): - $new_query_params[$name] = $value; - endif; - } - endif; - - // Load overrides - if (!empty($query_params)): - foreach ($query_params as $name => $value) { - if (!empty($value)): - $new_query_params[$name] = $value; - endif; - } - endif; - - // Construct GET request - if (!empty($new_query_params)): - foreach ($new_query_params as $name => $value) { - if (!empty($value)): - $get .= $name . "=" . $value . "&"; - endif; - } - endif; - - return $get; - - } - - /** - * Makes navigation links by checking whether or not the view - * that is rendering the template is not the view being refered to in the link. - * - * @param array navigation array - */ - function makeNavigation($nav, $id = '', $class = '', $li_template = '
                        • %s
                        • ', $li_class = '') { - - $ul = sprintf('
                            ', $id, $class); - - if (!empty($nav)): - - $navigation = $ul; - - foreach($nav as $k => $v) { - - $navigation .= sprintf($li_template, $li_class, $this->makeLink(array('do' => $v['ref']), true), $v['anchortext']); - - } - - $navigation .= '
                          '; - - return $navigation; - else: - return false; - endif; - - } - - function makeTwoLevelNav($links) { - print_r($links); - $navigation = '
                            '; - - foreach($links as $k => $v) { - - if (!empty($v['subgroup'])): - $sub_nav = $this->makeNavigation($v['subgroup']); - - $navigation .= sprintf('
                          • %s
                          • ', - $this->makeLink(array('do' => $v['ref']), true), - $v['anchortext'], $sub_nav); - else: - - $navigation .= sprintf('
                          • ', - $this->makeLink(array('do' => $v['ref']), true), - $v['anchortext']); - - endif; - - } - - $navigation .= '
                          '; - - return $navigation; - - } - - function daysAgo($time) { - - $now = mktime(23, 59, 59, $this->time_now['month'], $this->time_now['day'], $this->time_now['year']); - - $days = round(($now - $time) / (3600*24)); - - switch ($days) { - - case 1: - return $days . " day ago"; - - default: - return $days . " days ago"; - } - - } - - /** - * @depricated - * @todo remove - */ - function getAuthStatus() { - - if (!class_exists('owa_auth')) { - require_once(OWA_BASE_DIR.'/owa_auth.php'); - } - - $auth = &owa_auth::get_instance(); - return $auth->auth_status; - } - - function makeWikiLink($page) { - - return sprintf($this->config['owa_wiki_link_template'], $page); - } - - /** - * Returns Namespace value to template - * - * @return string - */ - function getNs() { - - return $this->config['ns']; - } - - function makeParamString($params = array(), $add_state = false, $format = 'query', $namespace = true) { - - $all_params = array(); - - // merge in state params - if ($add_state) { - $all_params = array_merge($all_params, $this->getAllStateParams()); - } - //merge in params - $all_params = array_merge($all_params, $params); - - switch($format) { - - case 'query': - - $get = ''; - - $count = count($all_params); - - $i = 0; - - foreach ($all_params as $n => $v) { - - $get .= owa_coreAPI::getSetting('base','ns').$n.'='.$v; - - $i++; - - if ($i < $count): - $get .= "&"; - endif; - } - - $string= $get; - - break; - - case 'cookie': - - $string = owa_lib::implode_assoc('=>', '|||', $all_params); - break; - } - - - return $string; - - } - - function getAllStateParams() { - - $all_params = array(); - - if (!empty($this->caller_params['link_state'])) { - $all_params = array_merge($all_params, $this->caller_params['link_state']); - } - - // add in period properties if available - $period = $this->get('timePeriod'); - - if (!empty($period)) { - $all_params = array_merge($all_params, $period->getPeriodProperties()); - //print_r($all_params); - } - - return $all_params; - } - - - /** - * Makes Links, adds state to links optionaly. - * - * @param array $params - * @param boolean $add_state - * @return string - */ - function makeLink($params = array(), $add_state = false, $url = '', $xml = false, $add_nonce = false) { - - $all_params = array(); - - //Loads link state passed by caller - if ($add_state == true) { - if (!empty($this->caller_params['link_state'])) { - $all_params = array_merge($all_params, $this->caller_params['link_state']); - } - - // add in period properties if available - $period = $this->get('timePeriod'); - - if (!empty($period)) { - $all_params = array_merge($all_params, $period->getPeriodProperties()); - - } - } - - // Load overrides - if (!empty($params)) { - $params = array_filter($params); - $all_params = array_merge($all_params, $params); - } - - // add nonce if called for - if ($add_nonce) { - if ( array_key_exists('do', $all_params) ) { - $action = $all_params['do']; - } elseif ( array_key_exists('action', $all_params) ) { - $action = $all_params['action']; - } - - $all_params['nonce'] = owa_coreAPI::createNonce($action); - } - - $get = ''; - - if (!empty($all_params)): - - $count = count($all_params); - - $i = 0; - - foreach ($all_params as $n => $v) { - - $get .= $this->config['ns'].$n.'='.$v; - - $i++; - - if ($i < $count): - $get .= "&"; - endif; - } - endif; - - if (empty($url)): - $url = $this->config['main_url']; - endif; - - $link = sprintf($this->config['link_template'], $url, $get); - - if ($xml == true): - $link = $this->escapeForXml($link); - endif; - - return $link; - - } - - function escapeForXml($string) { - - $string = str_replace(array('&', '"', "'", '<', '>' ), array('&' , '"', ''' , '<' , '>'), $string); - // removes non-ascii chars - $string = owa_lib::escapeNonAsciiChars($string); - return $string; - } - - function makeAbsoluteLink($params = array(), $add_state = false, $url = '', $xml = false) { - - if (empty($url)): - $url = $this->config['main_absolute_url']; - endif; - - return $this->makeLink($params, $add_state, $url, $xml); - - } - - function makeApiLink($params = array(), $add_state = false) { - - - $url = $this->config['api_url']; - - return $this->makeLink($params, $add_state, $url); - - } - - - function makeImageLink($path, $absolute = false) { - - if ($absolute === true) { - $url = owa_coreAPI::getSetting('base', 'modules_url'); - } else { - $url = owa_coreAPI::getSetting('base', 'modules_url'); - } - - return $url.$path; - - } - - function includeTemplate($file) { - - $this->set_template($file); - include($this->file); - return; - - } - - function setTemplate($file) { - - $this->set_template($file); - return $this->file; - - } - - function getWidget($do, $params = array(), $wrapper = true, $add_state = true) { - - $final_params = array(); - - if (empty($params)): - $params = array(); - endif; - - $params['do'] = $do; - - if ($wrapper === true): - $params['initial_view'] = true; - $params['wrapper'] = true; - elseif ($wrapper === 'inpage'): - $params['initial_view'] = true; - $params['wrapper'] = 'inpage'; - else: - $params['wrapper'] = false; - endif; - - // add state params into request params - if ($add_state === true): - $final_params = array_merge($final_params, $this->caller_params['link_state']); - endif; - - // apply overides made via the template - $final_params = array_merge($final_params, array_filter($params)); - - return owa_coreAPI::performAction($do, $final_params); - } - - function getInpageWidget($do, $params = array()) { - - return owa_template::getWidget($do, $params, 'inpage'); - - } - - function getSparkline($metric, $metric_col, $period = '', $height = 25, $width = 250, $map = array(), $add_state = true) { - - $map['metric'] = $metric; - $map['metric_col'] = $metric_col; - $map['period'] = $period; - $map['height'] = $height; - $map['width'] = $width; - return owa_template::getWidget('base.widgetSparkline', $map, false, $add_state); - - } - - function makeJson($array) { - - $reserved_words = owa_coreAPI::getSetting('base', 'reserved_words'); - - $json = '{'; - - foreach ($array as $k => $v) { - - if (is_object($v)) { - if (method_exists($v, 'toString')) { - $v = $v->toString(); - } else { - $v = ''; - } - - } - - if (in_array($k, array_keys($reserved_words))) { - $k = $reserved_words[$k]; - } - - $json .= sprintf('%s: "%s", ', $k, $v); - - } - - - $json = substr($json, 0, -2); - - $json .= '}'; - - return $json; - - } - - function headerActions() { - - return; - } - - function footerActions() { - - return; - } - - function makePagination($pagination, $map = array(), $add_state = true, $template = '') { - - $pages = ''; - //print_r($pagination); - if ($pagination['max_page_num'] > 1) { - - $pages = '
                            '; - - for ($i = 1; $i <= $pagination['max_page_num'];$i++) { - - if ($pagination['page_num'] != $i) { - $new_map = array(); - $new_map = $map; - $new_map['page'] = $i; - $link = sprintf('
                          • %s
                          • ', - $this->makeLink($new_map, $add_state), - $i); - - } else { - - $link = sprintf('
                          • %s
                          • ', $i); - } - - $pages .= $link; - } - - $pages .= '
                          '; - $pages .= '
                          '; - } - - return $pages; - } - - function makePaginationFromResultSet($pagination, $map = array(), $add_state = true, $template = '') { - - $pages = ''; - //print_r($pagination); - //print $pagination->total_pages; - - if ($pagination->total_pages > 1) { - - $pages = '
                            '; - - for ($i = 1; $i <= $pagination->total_pages;$i++) { - - if ($pagination->page != $i) { - - $new_map = array(); - - if (is_array($map)) { - $new_map = array_merge($map, $new_map); - } - - $new_map['page'] = $i; - - $link = sprintf('
                          • %s
                          • ', - $this->makeLink($new_map, $add_state), - $i); - - } else { - - $link = sprintf('
                          • %s
                          • ', $i); - } - - $pages .= $link; - } - - $pages .= '
                          '; - - - - } - - return $pages; - } - - function get($name) { - - if (array_key_exists($name, $this->vars)) { - return $this->vars[$name]; - } else { - return false; - } - - } - - function getValue( $key, $var) { - - if ( isset( $var ) && is_array( $var ) ) { - if ( array_key_exists( $key, $var) ) { - return $var[$key]; - } - } - } - - function substituteValue($string, $var_name) { - - $value = $this->get($var_name); - - if ($value) { - - return sprintf($string,$value); - } - } - - function makeNavigationMenu($links) { - - if (!empty($links)) { - - $t = new owa_template; - $t->set('links', $links); - $t->caller_params['link_state'] = $this->caller_params['link_state']; - $t->set_template('report_nav.tpl'); - return $t->fetch(); - } else { - - return false; - } - - } - - function displayChart($id, $data, $width = '100%', $height = '200px') { - - if (!empty($data)) { - - $t = new owa_template; - $t->set('dom_id', $id.'Chart'); - $t->set('data', $data); - $t->set('width', $width); - $t->set('height', $height); - $t->set_template('chart_dom.tpl'); - return $t->fetch(); - } else { - - return false; - } - } - - function displaySparkline($id, $data, $width = '100px', $height = '35px') { - - if (!empty($data)) { - - $data_string = implode(',', $data); - - $t = new owa_template; - $t->set('dom_id', $id.'Sparkline'); - $t->set('data', $data_string); - $t->set('width', $width); - $t->set('height', $height); - $t->set_template('sparkline_dom.tpl'); - return $t->fetch(); - - } else { - - return false; - } - } - - function displaySeriesAsSparkline($name, $result_set_obj, $id = '') { - - if (!$id) { - $id = rand(); - } - - $series = $result_set_obj->getSeries($name); - - if ($series) { - echo $this->displaySparkline($id, $series); - } - } - - function makeTable($labels, $data, $table_class = '', $table_id = '', $is_sortable = true) { - - $t = new owa_template; - - if (!empty($table_id)) { - $id = rand(); - } - - $t->set('table_id', $id.'Table'); - $t->set('data', $data); - $t->set('labels', $labels); - $t->set('class', $table_class); - if ($is_sortable === true) { - $t->set('sort_table_class', 'tablesorter'); - } - - $t->set_template('generic_table.tpl'); - - return $t->fetch(); - - } - - function subTemplate($template_name = '', $map = array(), $linkstate = array()) { - - $t = new owa_template; - - $t->set_template($template_name); - - foreach ($map as $k => $v) { - - $t->set($k, $v); - } - - return $t->fetch(); - - } - - function formatNumber($num, $decimal_places) { - - return number_format($num, $decimal_places,'.',','); - } - - function getAvatarImage($email) { - - if (false != $email) { - $url = sprintf("http://www.gravatar.com/avatar/%s?s=30", md5($email)); - } else { - $url = $this->makeImageLink('base/i/default_user_50x50.png'); - } - - return $url; - } - - function displayMetricInfobox($params = array()) { - - $t = new owa_template; - - if (!empty($dom_id)) { - $dom_id = rand(); - } - $params['do'] = 'getResultSet'; - $count = owa_coreAPI::executeApiCommand($params); - $params['period'] = 'last_thirty_days'; - $params['dimensions'] = 'date'; - $trend = owa_coreAPI::executeApiCommand($params); - $t->set('metric_name', $params['metrics']); - $t->set('dom_id', $dom_id); - $t->set('count', $count); - $t->set('trend', $trend); - $t->set_template('metricInfobox.php'); - - return $t->fetch(); - - } - - function renderDimension($template, $properties) { - - $t = new owa_template; - $t->set('properties', $properties); - $t->set_template($template); - return $t->fetch(); - } - - /** - * Creates a hidden nonce form field - * - * @param string $action the action that the nonce should be tied to. - * @return string The html fragment - */ - function createNonceFormField($action) { - - return sprintf( - '', - owa_coreAPI::getSetting('base', 'ns'), - owa_coreAPI::createNonce($action)); - } - - function makeNonceLink() { - - } - - /** - * Outputs data into the template - * - * @param string $output The String to be output into the template - * @param bool $sanitize Flag that will sanitize the output for display - */ - function out($output, $sanitize = true, $decode_special_entities = false) { - - if ( $sanitize ) { - $output = owa_sanitize::escapeForDisplay($output); - - if ( $decode_special_entities ) { - $output = strtr($output, array('&' => '&')); - } - - } - - echo $output; - } - - function formatCurrency($value) { - return owa_lib::formatCurrency( $value, owa_coreAPI::getSetting( 'base', 'currencyLocal' ) ); - } - - function getCurrentUser() { - - return owa_coreAPI::getCurrentUser(); - } -} - - -?> + --- a/owa/owa_view.php +++ /dev/null @@ -1,807 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_view extends owa_base { - - /** - * Main view template object - * - * @var object - */ - var $t; - - /** - * Body content template object - * - * @var object - */ - var $body; - - /** - * Sub View object - * - * @var object - */ - var $subview; - - /** - * Rednered subview - * - * @var string - */ - var $subview_rendered; - - /** - * CSS file for main template - * - * @var unknown_type - */ - var $css_file; - - /** - * The priviledge level required to access this view - * @depricated - * @var string - */ - var $priviledge_level; - - /** - * Type of page - * - * @var unknown_type - */ - var $page_type; - - /** - * Request Params - * - * @var unknown_type - */ - var $params; - - /** - * Authorization object - * - * @var object - */ - var $auth; - - var $module; // set by factory. - - var $data; - - var $default_subview; - - var $is_subview; - - var $js = array(); - - var $css = array(); - - var $postProcessView = false; - - var $renderJsInline; - - /** - * Constructor - * - */ - function __construct($params = null) { - - parent::__construct($params); - - $this->t = new owa_template(); - $this->body = new owa_template($this->module); - $this->setTheme(); - //header('Content-type: text/html; charset=utf-8'); - } - - /** - * Assembles the view using passed model objects - * - * @param unknown_type $data - * @return unknown - */ - function assembleView($data) { - - $this->e->debug('Assembling view: '.get_class($this)); - - // set view name in template class. used for navigation. - if (array_key_exists('view', $this->data)) { - $this->body->caller_params['view'] = $this->data['view']; - } - - if (array_key_exists('params', $this->data)): - $this->body->set('params', $this->data['params']); - endif; - - if (array_key_exists('subview', $this->data)): - $this->body->caller_params['subview'] = $this->data['subview']; - endif; - - // Assign status msg - if (array_key_exists('status_msg', $this->data)): - $this->t->set('status_msg', $this->data['status_msg']); - endif; - - // get status msg from code passed on the query string from a redirect. - if (array_key_exists('status_code', $this->data)): - $this->t->set('status_msg', $this->getMsg($this->data['status_code'])); - endif; - - // set error msg directly if passed from constructor - if (array_key_exists('error_msg', $this->data)): - $this->t->set('error_msg', $this->data['error_msg']); - endif; - - // authentication status - if (array_key_exists('auth_status', $this->data)): - $this->t->set('authStatus', $this->data['auth_status']); - endif; - - // get error msg from error code passed on the query string from a redirect. - if (array_key_exists('error_code', $this->data)): - $this->t->set('error_msg', $this->getMsg($this->data['error_code'])); - endif; - - // load subview - if (!empty($this->data['subview']) || !empty($this->default_subview)): - // Load subview - $this->loadSubView($this->data['subview']); - endif; - - // construct main view. This might set some properties of the subview. - if (method_exists($this, 'render')) { - $this->render($this->data); - } else { - // old style - $this->construct($this->data); - } - //array of errors usually used for field validations - if (array_key_exists('validation_errors', $this->data)): - $this->body->set('validation_errors', $this->data['validation_errors']); - endif; - - // pagination - if (array_key_exists('pagination', $this->data)): - $this->body->set('pagination', $this->data['pagination']); - endif; - - $this->_setLinkState(); - - // assemble subview - if (!empty($this->data['subview'])): - - // set view name in template. used for navigation. - $this->subview->body->caller_params['view'] = $this->data['subview']; - - // Set validation errors - $this->subview->body->set('validation_errors', $this->get('validation_errors')); - - // pagination - if (array_key_exists('pagination', $this->data)): - $this->subview->body->set('pagination', $this->data['pagination']); - endif; - - if (array_key_exists('params', $this->data)): - $this->subview->body->set('params', $this->data['params']); - $this->subview->body->set('do', $this->data['params']['do']); - endif; - - // Load subview - $this->renderSubView($this->data); - - // assign subview to body template - $this->body->set('subview', $this->subview_rendered); - - - endif; - - // assign validation errors - if (!empty($this->data['validation_errors'])) { - $ves = new owa_template('base'); - $ves->set_template('error_validation_summary.tpl'); - $ves->set('validation_errors', $this->data['validation_errors']); - $validation_errors_summary = $ves->fetch(); - $this->t->set('error_msg', $validation_errors_summary); - } - - - // fire post method - $this->post(); - - // assign css and js ellements if the view is not a subview. - // subview css/js have been merged/pulls from subview and assigned here. - if ($this->is_subview != true) { - if (!empty($this->css)) { - $this->t->set('css', $this->css); - } - - if (!empty($this->js)) { - $this->t->set('js', $this->js); - } - } - - //Assign body to main template - $this->t->set('config', $this->config); - - //Assign body to main template - $this->t->set('body', $this->body); - - if ($this->postProcessView === true){ - return $this->postProcess(); - } else { - // Return fully asembled View - return $this->t->fetch(); - } - } - - /** - * Abstract Alternative rendering method reuires the setting of $this->postProcessView to fire - * - */ - function postProcess() { - - return false; - } - - /** - * Post method fired right before view is rendered and returned - * as output - */ - function post() { - - return false; - } - - - /** - * Sets the theme to be used by a view - * - */ - function setTheme() { - - $this->t->set_template($this->config['report_wrapper']); - - return; - } - - /** - * Abstract method for assembling a view - * @depricated - * @param array $data - */ - function construct($data) { - - return; - - } - - /** - * Assembles subview - * - * @param array $data - */ - function loadSubView($subview) { - - if (empty($subview)): - if (!empty($this->default_subview)): - $subview = $this->default_subview; - $this->data['subview'] = $this->default_subview; - else: - return $this->e->debug("No Subview was specified by caller."); - endif; - endif; - - $this->subview = owa_coreAPI::subViewFactory($subview); - //print_r($subview.'///'); - $this->subview->setData($this->data); - - return; - - } - - /** - * Assembles subview - * - * @param array $data - */ - function renderSubView($data) { - - // Stores subview as string into $this->subview - $this->subview_rendered = $this->subview->assembleSubView($data); - - // pull css and jas elements needed by subview - $this->css = array_merge($this->css, $this->subview->css); - $this->js = array_merge($this->js, $this->subview->js); - - return; - - } - - /** - * Assembles the view using passed model objects - * - * @param unknown_type $data - * @return unknown - */ - function assembleSubView($data) { - - // construct main view. This might set some properties of the subview. - if (method_exists($this, 'render')) { - $this->render($data); - } else { - // old style - $this->construct($data); - } - - $this->t->set_template('wrapper_subview.tpl'); - - //Assign body to main template - $this->t->set('body', $this->body); - - // Return fully asembled View - $page = $this->t->fetch(); - - return $page; - - } - - function setCss($path) { - - $url = owa_coreAPI::getSetting('base', 'modules_url').$path; - $this->css[] = $url; - return; - } - - function setJs($name, $path, $version ='', $deps = array(), $ie_only = false) { - - if (empty($version)) { - $version = OWA_VERSION; - } - - $uid = $name.$version; - - $url = sprintf('%s?version=%s', owa_coreAPI::getSetting('base', 'modules_url').$path, $version); - $this->js[$uid]['url'] = $url; - - // build file system path just in case we need to concatenate the JS into a single file. - $fs_path = OWA_MODULES_DIR.$path; - $this->js[$uid]['path'] = $fs_path; - $this->js[$uid]['deps'] = $deps; - $this->js[$uid]['version'] = $version; - $this->js[$uid]['ie_only'] = $ie_only; - - return; - } - - function concatinateJs() { - - $js_libs = ''; - - foreach ($this->js as $lib) { - - $js_libs .= file_get_contents($lib['path']); - $js_libs .= "\n\n"; - } - - $this->body->set('js_includes', $js_libs); - - return; - - } - - /** - * Sets flag to tell view to render the JS inline as -END_OF_SCRIPT; - $this->_opened = true; - } - - return $this->_opened; - } - - /** - * Closes the output stream if it is open. If there are still pending - * lines in the output buffer, the output window will be opened so that - * the buffer can be drained. - * - * @access public - */ - function close() - { - /* - * If there are still lines waiting to be written, open the output - * window so that we can drain the buffer. - */ - if (!$this->_opened && (count($this->_buffer) > 0)) { - $this->open(); - } - - if ($this->_opened) { - $this->_writeln(''); - $this->_writeln(''); - $this->_opened = false; - } - - return ($this->_opened === false); - } - - /** - * Writes a single line of text to the output window. - * - * @param string $line The line of text to write. - * - * @access private - */ - function _writeln($line) - { - /* Add this line to our output buffer. */ - $this->_buffer[] = $line; - - /* Buffer the output until this page's headers have been sent. */ - if (!headers_sent()) { - // return; - } - - /* If we haven't already opened the output window, do so now. */ - if (!$this->_opened && !$this->open()) { - return false; - } - - /* Drain the buffer to the output window. */ - $win = $this->_name; - foreach ($this->_buffer as $line) { - $this->debug .= "\n"; - } - - /* Now that the buffer has been drained, clear it. */ - $this->_buffer = array(); - } - - /** - * Logs $message to the output window. The message is also passed along - * to any Log_observer instances that are observing this Log. - * - * @param mixed $message String or object containing the message to log. - * @param string $priority The priority of the message. Valid - * values are: PEAR_LOG_EMERG, PEAR_LOG_ALERT, - * PEAR_LOG_CRIT, PEAR_LOG_ERR, PEAR_LOG_WARNING, - * PEAR_LOG_NOTICE, PEAR_LOG_INFO, and PEAR_LOG_DEBUG. - * @return boolean True on success or false on failure. - * @access public - */ - function log($message, $priority = null) - { - /* If a priority hasn't been specified, use the default value. */ - if ($priority === null) { - $priority = $this->_priority; - } - - /* Abort early if the priority is above the maximum logging level. */ - if (!$this->_isMasked($priority)) { - return false; - } - - /* Extract the string representation of the message. */ - $message = $this->_extractMessage($message); - - list($usec, $sec) = explode(' ', microtime()); - - /* Build the output line that contains the log entry row. */ - $line = ''; - $line .= sprintf('%s.%s', - strftime('%T', $sec), substr($usec, 2, 2)); - if (!empty($this->_ident)) { - $line .= '' . $this->_ident . ''; - } - $line .= '' . ucfirst($this->priorityToString($priority)) . ''; - $line .= sprintf('%s', - $this->_colors[$priority], - preg_replace('/\r\n|\n|\r/', '
                          ', $message)); - $line .= ''; - - $this->_writeln($line); - - $this->_announce(array('priority' => $priority, 'message' => $message)); - - return true; - } - -} -?> + --- a/owa/plugins/validations/entityDoesNotExist.php +++ /dev/null @@ -1,64 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - - class owa_entityDoesNotExistValidation extends owa_validation { - - function __construct() { - - return parent::__construct(); - } - - - function validate() { - - $entity = owa_coreAPI::entityFactory($this->getConfig('entity')); - $entity->getByColumn($this->getConfig('column'), $this->getValues()); - - $error = $this->getErrorMsg(); - - if (empty($error)) { - $this->setErrorMessage('An entity with that value already exists.'); - } - - $id = $entity->get('id'); - - // validation logic - if (!empty($id)) { - $this->hasError(); - } - - return; - - } - - } - - -?> + --- a/owa/plugins/validations/entityExists.php +++ /dev/null @@ -1,63 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - - class owa_entityExistsValidation extends owa_validation { - - function __construct() { - - return parent::__construct(); - } - - function validate() { - - $entity = owa_coreAPI::entityFactory($this->getConfig('entity')); - $entity->getByColumn($this->getConfig('column'), $this->getValues()); - - $error = $this->getErrorMsg(); - - if (empty($error)) { - $this->setErrorMessage('An entity with that value does not exist.'); - } - - $id = $entity->get('id'); - - // validation logic - if (empty($id)) { - $this->hasError(); - } - - return; - - } - - } - - -?> + --- a/owa/plugins/validations/index.php +++ /dev/null @@ -1,3 +1,1 @@ - + --- a/owa/plugins/validations/required.php +++ /dev/null @@ -1,58 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - - class owa_requiredValidation extends owa_validation { - - function __construct() { - - return parent::__construct(); - } - - function validate() { - - $value = $this->getValues(); - - $error = $this->getErrorMsg(); - - if (empty($error)) { - $this->setErrorMessage('Required field was empty.'); - } - - if (empty($value)): - $this->hasError(); - endif; - - return; - } - - } - - -?> + --- a/owa/plugins/validations/stringLength.php +++ /dev/null @@ -1,86 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - - class owa_stringLengthValidation extends owa_validation { - - function __construct() { - - return parent::__construct(); - } - - function validate() { - - $value = $this->getValues(); - $length = $this->getConfig('length'); - $operator = $this->getConfig('operator'); - - // default error msg - $errorMsg = $this->getErrorMsg(); - if (empty($errorMsg)) { - - $this->setErrorMessage(sprintf("Must be %s %d character in length.", $operator, $length)); - } - - switch ($operator) { - - case '<': - if (strlen($value) >= $length) { - $this->hasError(); - } - break; - - case '>': - if (strlen($value) <= $length) { - $this->hasError(); - } - break; - - case '<=': - if (strlen($value) > $length) { - $this->hasError(); - } - break; - - case '>=': - if (strlen($value) < $length) { - $this->hasError(); - } - break; - - } - - return; - - } - - } - - -?> + --- a/owa/plugins/validations/stringMatch.php +++ /dev/null @@ -1,65 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - - class owa_stringMatchValidation extends owa_validation { - - function __construct() { - - return parent::__construct(); - } - - - function validate() { - - $values_array = $this->getValues(); - $string1 = $values_array[0]; - $string2 = $values_array[1]; - - $error = $this->getErrorMsg(); - - if (empty($error)) { - $this->setErrorMessage('Strings do not match.'); - } - - // validation logic - if ($string1 === $string2) { - ; - } else { - $this->hasError(); - } - - return; - - } - - } - - -?> + --- a/owa/plugins/validations/subStringMatch.php +++ /dev/null @@ -1,74 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - - class owa_subStringMatchValidation extends owa_validation { - - function __construct() { - - return parent::__construct(); - } - - function validate() { - - $value = $this->getValues(); - $length = strlen($this->getConfig('match')); - $str = substr($value, $this->getConfig('position'), $length); - - switch ($this->getConfig('operator')) { - - case "=": - - if ($str != $this->getConfig('match')) { - $this->hasError(); - //print $str; - } - - break; - - case "!=": - - if ($str === $this->getConfig('match')) { - $this->hasError(); - } - - break; - } - - $error = $this->getErrorMsg(); - - if (empty($error)) { - $error = $this->setErrorMessage(sprintf('The string "%s" was found within the value at position %d', $this->getConfig('match'), $this->getConfig('position'))); - } - } - - } - - -?> + --- a/owa/plugins/validations/subStringPosition.php +++ /dev/null @@ -1,83 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - - class owa_subStringPositionValidation extends owa_validation { - - function __construct() { - - return parent::__construct(); - } - - function validate() { - - $value = $this->getValues(); - - $substring = $this->getConfig('subString'); - $pos = strpos($value, $substring); - - $operator = $this->getConfig('operator'); - $position = $this->getConfig('position'); - - switch ($operator) { - - case "=": - - if ($pos === $position) { - ; - } else { - $this->hasError(); - } - - - break; - - case "!=": - - if ($pos === $position) { - $this->hasError(); - } - - break; - } - - $error = $this->getErrorMsg(); - - if (empty($error)) { - $error = $this->setErrorMessage(sprintf('The string "%s" was found within the value at position %d', $subString, $pos)); - } - - - - } - - } - - -?> + --- a/owa/queue.php +++ /dev/null @@ -1,57 +1,1 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.3.0 - */ - -$owa = new owa_php(); -if ( $owa->isEndpointEnabled( basename( __FILE__ ) ) ) { - - $owa->setSetting('base', 'is_remote_event_queue', true); - $owa->e->debug($_POST); - $raw_event = owa_coreAPI::getRequestParam('event'); - - if ( $raw_event ) { - - $dispatch = owa_coreAPI::getEventDispatch(); - $event = unserialize( base64_decode( $raw_event ) ); - $owa->e->debug(print_r($event,true)); - $dispatch->asyncNotify($event); - } - -} else { - // unload owa - $owa->restInPeace(); -} - -?> + --- a/owa/wp_plugin.php +++ /dev/null @@ -1,611 +1,1 @@ -trackAction('wordpress', 'Blog Created', $domain); -} - -/** - * Edit Post Action Tracker - */ -function owa_editPostActionTracker($post_id, $post) { - - // we don't want to track autosaves... - if(wp_is_post_autosave($post)) { - return; - } - - $owa = owa_getInstance(); - $label = $post->post_title; - $owa->trackAction('wordpress', $post->post_type.' edited', $label); -} - -/** - * Post Action Tracker - */ -function owa_postActionTracker($new_status, $old_status, $post) { - - // we don't want to track autosaves... - if(wp_is_post_autosave($post)) { - return; - } - - if ($new_status === 'draft' && $old_status === 'draft') { - return; - } elseif ($new_status === 'publish' && $old_status != 'publish') { - $action_name = $post->post_type.' publish'; - } elseif ($new_status === $old_status) { - $action_name = $post->post_type.' edit'; - } - - if ($action_name) { - $owa = owa_getInstance(); - owa_coreAPI::debug(sprintf("new: %s, old: %s, post: %s", $new_status, $old_status, print_r($post, true))); - $label = $post->post_title; - $owa->trackAction('wordpress', $action_name, $label); - } -} - -/** - * New Attachment Action Tracker - */ -function owa_editAttachmentActionTracker($post_id) { - - $owa = owa_getInstance(); - $post = get_post($post_id); - $label = $post->post_title; - $owa->trackAction('wordpress', 'Attachment Edit', $label); -} - -/** - * New Attachment Action Tracker - */ -function owa_newAttachmentActionTracker($post_id) { - - $owa = owa_getInstance(); - $post = get_post($post_id); - $label = $post->post_title; - $owa->trackAction('wordpress', 'Attachment Created', $label); -} - -/** - * User Registration Action Tracker - */ -function owa_userRegistrationActionTracker($user_id) { - - $owa = owa_getInstance(); - $user = get_userdata($user_id); - if (!empty($user->first_name) && !empty($user->last_name)) { - $label = $user->first_name.' '.$user->last_name; - } else { - $label = $user->display_name; - } - - $owa->trackAction('wordpress', 'User Registration', $label); -} - -/** - * User Login Action Tracker - */ -function owa_userLoginActionTracker($user_id) { - - $owa = owa_getInstance(); - $label = $user_id; - $owa->trackAction('wordpress', 'User Login', $label); -} - -/** - * Profile Update Action Tracker - */ -function owa_userProfileUpdateActionTracker($user_id, $old_user_data = '') { - - $owa = owa_getInstance(); - $user = get_userdata($user_id); - if (!empty($user->first_name) && !empty($user->last_name)) { - $label = $user->first_name.' '.$user->last_name; - } else { - $label = $user->display_name; - } - - $owa->trackAction('wordpress', 'User Profile Update', $label); -} - -/** - * Password Reset Action Tracker - */ -function owa_userPasswordResetActionTracker($user) { - - $owa = owa_getInstance(); - $label = $user->display_name; - $owa->trackAction('wordpress', 'User Password Reset', $label); -} - -/** - * Trackback Action Tracker - */ -function owa_trackbackActionTracker($comment_id) { - - $owa = owa_getInstance(); - $label = $comment_id; - $owa->trackAction('wordpress', 'Trackback', $label); -} - - - - -/** - * Singleton Method - * - * Returns an instance of OWA - * - * @return $owa object - */ -function &owa_getInstance() { - - static $owa; - - if( empty( $owa ) ) { - - require_once(OWA_BASE_CLASSES_DIR.'owa_wp.php'); - - // create owa instance w/ config - $owa = new owa_wp(); - $owa->setSiteId( md5( get_settings( 'siteurl' ) ) ); - $owa->setSetting( 'base', 'report_wrapper', 'wrapper_wordpress.tpl' ); - $owa->setSetting( 'base', 'link_template', '%s&%s' ); - $owa->setSetting( 'base', 'main_url', '../wp-admin/index.php?page=owa' ); - $owa->setSetting( 'base', 'main_absolute_url', get_bloginfo('url').'/wp-admin/index.php?page=owa' ); - $owa->setSetting( 'base', 'action_url', get_bloginfo('url').'/index.php?owa_specialAction' ); - $owa->setSetting( 'base', 'api_url', get_bloginfo('url').'/index.php?owa_apiAction' ); - $owa->setSetting( 'base', 'is_embedded', true ); - // needed as old installs might have this turned on by default... - $owa->setSetting( 'base', 'delay_first_hit', false ); - - // Access WP current user object to check permissions - $current_user = owa_getCurrentWpUser(); - //print_r($current_user); - // Set OWA's current user info and mark as authenticated so that - // downstream controllers don't have to authenticate - $cu =&owa_coreAPI::getCurrentUser(); - - if (isset($current_user->user_login)) { - $cu->setUserData('user_id', $current_user->user_login); - owa_coreAPI::debug("Wordpress User_id: ".$current_user->user_login); - } - - if (isset($current_user->user_email)) { - $cu->setUserData('email_address', $current_user->user_email); - } - - if (isset($current_user->first_name)) { - $cu->setUserData('real_name', $current_user->first_name.' '.$current_user->last_name); - $cu->setRole(owa_translate_role($current_user->roles)); - } - owa_coreAPI::debug("Wordpress User Role: ".print_r($current_user->roles, true)); - owa_coreAPI::debug("Wordpress Translated OWA User Role: ".$cu->getRole()); - $cu->setAuthStatus(true); - } - - return $owa; -} - -function owa_getCurrentWpUser() { - - // Access WP current user object to check permissions - global $current_user; - get_currentuserinfo(); - return $current_user; - -} - -// translates wordpress roles to owa roles -function owa_translate_role($roles) { - - if (!empty($roles)) { - - if (in_array('administrator', $roles)) { - $owa_role = 'admin'; - } elseif (in_array('editor', $roles)) { - $owa_role = 'viewer'; - } elseif (in_array('author', $roles)) { - $owa_role = 'viewer'; - } elseif (in_array('contributor', $roles)) { - $owa_role = 'viewer'; - } elseif (in_array('subscriber', $roles)) { - $owa_role = 'everyone'; - } else { - $owa_role = 'everyone'; - } - - } else { - $owa_role = 'everyone'; - } - - return $owa_role; -} - - -function owa_handleSpecialActionRequest() { - - $owa = owa_getInstance(); - owa_coreAPI::debug("hello from WP special action handler"); - return $owa->handleSpecialActionRequest(); - -} - -function owa_logComment($id, $comment_data = '') { - - if ( $comment_data === 'approved' || $comment_data === 1 ) { - - $owa = owa_getInstance(); - $label = ''; - $owa->trackAction('wordpress', 'comment', $label); - } -} - -function owa_logCommentEdit($new_status, $old_status, $comment) { - - if ($new_status === 'approved') { - if (isset($comment->comment_author)) { - $label = $comment->comment_author; - } else { - $label = ''; - } - - $owa = owa_getInstance(); - $owa->trackAction('wordpress', 'comment', $label); - } -} - -/** - * Prints helper page tags to the of pages. - * - */ -function owa_insertPageTags() { - - // Don't log if the page request is a preview - Wordpress 2.x or greater - if (function_exists('is_preview')) { - if (is_preview()) { - return; - } - } - - $owa = owa_getInstance(); - - $page_properties = $owa->getAllEventProperties($owa->pageview_event); - $cmds = ''; - if ( $page_properties ) { - $page_properties_json = json_encode( $page_properties ); - $cmds .= "owa_cmds.push( ['setPageProperties', $page_properties_json] );"; - } - - //$wgOut->addInlineScript( $cmds ); - - $options = array( 'cmds' => $cmds ); - - - $owa->placeHelperPageTags(true, $options); -} - -/** - * This is the main logging controller that is called on each request. - * - */ -function owa_main() { - - //global $user_level; - - $owa = owa_getInstance(); - owa_coreAPI::debug('wp main request method'); - - //Check to see if this is a Feed Reeder - if( $owa->getSetting('base', 'log_feedreaders') && is_feed() ) { - $event = $owa->makeEvent(); - $event->setEventType('base.feed_request'); - $event->set('feed_format', $_GET['feed']); - // Process the request by calling owa - return $owa->trackEvent($event); - } - - // Set the type and title of the page - $page_type = owa_get_page_type(); - $owa->setPageType( $page_type ); - // Get Title of Page - $owa->setPageTitle( owa_get_title( $page_type ) ); -} - -/** - * Determines the title of the page being requested - * - * @param string $page_type - * @return string $title - */ -function owa_get_title($page_type) { - - if ($page_type == "Home"): - $title = get_bloginfo('name'); - elseif ($page_type == "Search Results"): - $title = "Search Results for \"".$_GET['s']."\""; - elseif ($page_type == "Page" || "Post"): - $title = wp_title($sep = '', $display = 0); - elseif ($page_type == "Author"): - $title = wp_title($sep = '', $display = 0); - elseif ($page_type == "Category"): - $title = wp_title($sep = '', $display = 0); - elseif ($page_type == "Month"): - $title = wp_title($sep = '', $display = 0); - elseif ($page_type == "Day"): - $title = wp_title($sep = '', $display = 0); - elseif ($page_type == "Year"): - $title = wp_title($sep = '', $display = 0); - elseif ($page_type == "Time"): - $title = wp_title($sep = '', $display = 0); - elseif ($page_type == "Feed"): - $title = wp_title($sep = '', $display = 0); - endif; - - return $title; -} - -/** - * Determines the type of page being requested - * - * @return string $type - */ -function owa_get_page_type() { - - if (is_home()): - $type = "Home"; - elseif (is_attachment()): - $type = "Attachment"; - elseif (is_page()): - $type = "Page"; - // general page catch, should be after more specific post types - elseif (is_single()): - $type = "Post"; - elseif (is_feed()): - $type = "Feed"; - elseif (is_author()): - $type = "Author"; - elseif (is_category()): - $type = "Category"; - elseif (is_search()): - $type = "Search Results"; - elseif (is_month()): - $type = "Month"; - elseif (is_day()): - $type = "Day"; - elseif (is_year()): - $type = "Year"; - elseif (is_time()): - $type = "Time"; - elseif (is_tag()): - $type = "Tag"; - elseif (is_tax()): - $type = "Taxonomy"; - // general archive catch, should be after specific archive types - elseif (is_archive()): - $type = "Archive"; - else: - $type = '(not set)'; - endif; - - return $type; -} - -/** - * Wordpress filter function adds a GUID to the feed URL. - * - * @param array $binfo - * @return string $newbinfo - */ -function add_feed_sid($binfo) { - - $owa = owa_getInstance(); - - $test = strpos($binfo, "feed="); - - if ($test == true): - $newbinfo = $owa->add_feed_tracking($binfo); - - else: - - $newbinfo = $binfo; - - endif; - - return $newbinfo; - -} - -/** - * Adds tracking source param to links in feeds - * - * @param string $link - * @return string - */ -function owa_post_link($link) { - - $owa = owa_getInstance(); - - return $owa->add_link_tracking($link); - -} - -/** - * Schema and setting installation - * - */ -function owa_install() { - - define('OWA_INSTALLING', true); - - $params = array(); - //$params['do_not_fetch_config_from_db'] = true; - - $owa = owa_getInstance($params); - $owa->setSetting('base', 'cache_objects', false); - - $public_url = get_bloginfo('wpurl').'/wp-content/plugins/owa/'; - - $install_params = array('site_id' => md5(get_settings('siteurl')), - 'name' => get_bloginfo('name'), - 'domain' => get_settings('siteurl'), - 'description' => get_bloginfo('description'), - 'action' => 'base.installEmbedded', - 'db_type' => 'mysql', - 'db_name' => DB_NAME, - 'db_host' => DB_HOST, - 'db_user' => DB_USER, - 'db_password' => DB_PASSWORD, - 'public_url' => $public_url - ); - - $owa->handleRequest($install_params); -} - -/** - * Adds Analytics sub tab to admin dashboard screens. - * - */ -function owa_dashboard_menu() { - - if (function_exists('add_submenu_page')): - add_submenu_page('index.php', 'OWA Dashboard', 'Analytics', 1, dirname(__FILE__), 'owa_pageController'); - endif; - - return; - -} - -/** - * Produces the analytics dashboard - * - */ -function owa_dashboard_report() { - - $owa = owa_getInstance(); - - $params = array(); - $params['do'] = 'base.reportDashboard'; - echo $owa->handleRequest($params); - - return; - -} - -function owa_pageController() { - - $owa = owa_getInstance(); - - $do = owa_coreAPI::getRequestParam('do'); - $params = array(); - if (empty($do)) { - - $params['do'] = 'base.reportDashboard'; - } - - echo $owa->handleRequest($params); - -} - -/** - * Adds Options page to admin interface - * - */ -function owa_options_menu() { - - if (function_exists('add_options_page')): - add_options_page('Options', 'OWA', 8, basename(__FILE__), 'owa_options_page'); - endif; - - return; -} - -/** - * Generates Options Management Page - * - */ -function owa_options_page() { - - $owa = owa_getInstance(); - - $params = array(); - $params['view'] = 'base.options'; - $params['subview'] = 'base.optionsGeneral'; - echo $owa->handleRequest($params); - - return; -} - -/** - * Parses string to get the major and minor version of the - * instance of wordpress that is running - * - * @param string $version - * @return array - */ -function owa_parse_version($version) { - - $version_array = explode(".", $version); - - return $version_array; - -} - -?> + --- a/readme.txt +++ b/readme.txt @@ -1,30 +1,15 @@ -# input location (via GPS or favourites or search) and destination (via searchable list, optional) -# http://10.0.1.153:8765/json/boundboxstops?n=-35.27568499917103&e=149.1346514225006&s=-35.279495003493516 -&w=149.12622928619385&limit=50 -# http://10.0.1.153:8765/json/stoptrips?stop=43&time=64440 # recursively call to show all services nearby, sort by distance, need to filter by service period -# Hey, can pick destination again from a list filtered to places these stops go if you're curious! -# http://10.0.1.153:8765/json/tripstoptimes?trip=2139 # Can recursively call and parse based on intended destination to show ETA -# http://10.0.1.153:8765/json/triprows?trip=2139 # For pretty maps +Busness Time - An ACT bus timetable webapp +Based on the maxious-canberra-transit-feed @ http://s3-ap-southeast-1.amazonaws.com/busresources/cbrfeed.zip +Source code for the https://github.com/maxious/ACTBus-data transit +feed and https://github.com/maxious/ACTBus-ui this site available from github. +Uses jQuery Mobile, PHP, Ruby, Python, Google Transit Feed Specification +tools, OpenTripPlanner, OpenLayers, OpenStreetMap, Cloudmade Geocoder +and Tile Service -have to do +Must have view.sh running on port 8765 for this webapp to work + +For static maps, may have to do /usr/sbin/setsebool -P httpd_can_network_connect=1 on fedora -might need http://forum.jquery.com/topic/google-maps-inside-jquery-mobile -some extras -/json/routes = all routes -/json/neareststops?lat/lng/number -TODO -Destinations -Favourites -OOP stops/routes -Stop sorting/search-filter - -static maps -https://code.google.com/apis/maps/documentation/staticmaps/ -http://www.multimap.com/openapidocs/1.2/web_service/staticmaps.htm -http://dev.openstreetmap.de/staticmap/ (os @ http://sourceforge.net/projects/staticmaplite/) -(php and open source @ http://trac.openstreetmap.org/browser/sites/other/StaticMap?rev=16348) -http://pafciu17.dev.openstreetmap.org/ - --- a/routeList.php +++ b/routeList.php @@ -1,7 +1,8 @@
                          '; -echo '
                            '; -$url = $APIurl."/json/routes"; -$contents = json_decode(getPage($url)); -debug(print_r($contents,true)); - -function printRoutes($routes){ - foreach($routes as $row) { - echo '
                          • '.$row[1].' '.$row[2]." (".ucwords($row[3]).")
                          • \n"; +} +if ($_REQUEST['bysuburb']) { + include_header("Routes by Suburb", "routeList"); + navbar(); + echo '
                              '; + if (!isset($_REQUEST['firstLetter'])) { + foreach (range('A', 'Z') as $letter) { + echo "
                            • $letter...
                            • \n"; + } + } + else { + foreach ($suburbs as $suburb) { + if (startsWith($suburb, $_REQUEST['firstLetter'])) { + echo '
                            • ' . $suburb . '
                            • '; } + } + } + echo '
                            '; } - -if ($_REQUEST['bynumber']) { +else if ($_REQUEST['nearby'] || $_REQUEST['suburb']) { + if ($_REQUEST['suburb']) { + $suburb = filter_var($_REQUEST['suburb'], FILTER_SANITIZE_STRING); + $url = $APIurl . "/json/stopzonesearch?q=" . $suburb; + include_header("Routes by Suburb", "routeList"); + } + if ($_REQUEST['nearby']) { + $url = $APIurl . "/json/neareststops?lat={$_SESSION['lat']}&lon={$_SESSION['lon']}&limit=15"; + include_header("Routes Nearby", "routeList"); + } + $stops = json_decode(getPage($url)); + $routes = Array(); + foreach ($stops as $stop) { + $url = $APIurl . "/json/stoproutes?stop=" . $stop[0]; + $stoproutes = json_decode(getPage($url)); + foreach ($stoproutes as $route) { + if (!isset($routes[$route[0]])) $routes[$route[0]] = $route; + } + } + navbar(); + echo '
                              '; + sksort($routes, 1, true); + foreach ($routes as $row) { + echo '
                            • ' . $row[1] . ' ' . $row[2] . " (" . ucwords($row[4]) . ")
                            • \n"; + } +} +else if ($_REQUEST['bynumber']) { + include_header("Routes by Number", "routeList"); + navbar(); + echo '
                                '; + $url = $APIurl . "/json/routes"; + $contents = json_decode(getPage($url)); $routeSeries = Array(); $seriesRange = Array(); foreach ($contents as $key => $row) { - foreach (explode(" ",$row[1]) as $routeNumber ) { - $seriesNum = substr($routeNumber, 0, -1)."0"; + foreach (explode(" ", $row[1]) as $routeNumber) { + $seriesNum = substr($routeNumber, 0, -1) . "0"; if ($seriesNum == "0") $seriesNum = $routeNumber; - $finalDigit = substr($routeNumber, sizeof($routeNumber)-1, 1); + $finalDigit = substr($routeNumber, sizeof($routeNumber) - 1, 1); if (isset($seriesRange[$seriesNum])) { - if ($finalDigit < $seriesRange[$seriesNum]['max']) - $seriesRange[$seriesNum]['max'] = $routeNumber; - if ($finalDigit > $seriesRange[$seriesNum]['min']) - $seriesRange[$seriesNum]['min'] = $routeNumber; - } else { + if ($finalDigit < $seriesRange[$seriesNum]['max']) $seriesRange[$seriesNum]['max'] = $routeNumber; + if ($finalDigit > $seriesRange[$seriesNum]['min']) $seriesRange[$seriesNum]['min'] = $routeNumber; + } + else { $seriesRange[$seriesNum]['max'] = $routeNumber; $seriesRange[$seriesNum]['min'] = $routeNumber; } - $routeSeries[$seriesNum][$seriesNum."-".$row[1]."-".$row[0]] = $row; + $routeSeries[$seriesNum][$seriesNum . "-" . $row[1] . "-" . $row[0]] = $row; } } ksort($routeSeries); ksort($seriesRange); - echo '
                                Go to route numbers: '; - foreach ($seriesRange as $series => $range) - { - if ($range['min'] == $range['max']) echo "$series "; - else echo "{$range['min']}-{$range['max']} "; - } - echo "
                                + echo '
                                Go to route numbers: '; + foreach ($seriesRange as $series => $range) { + if ($range['min'] == $range['max']) echo "$series "; + else echo "{$range['min']}-{$range['max']} "; + } + echo "
                                "; - foreach ($routeSeries as $series => $routes) - { - echo ''; - if ($series <= 9) echo '
                              • '.$series."
                                  \n"; + foreach ($routeSeries as $series => $routes) { + echo ''; + if ($series <= 9) echo '
                                • ' . $series . "
                                    \n"; else echo "
                                  • {$seriesRange[$series]['min']}-{$seriesRange[$series]['max']}
                                  • \n"; } -} else { +} +else { + include_header("Routes by Destination", "routeList"); + navbar(); + echo '
                                      '; + $url = $APIurl . "/json/routes"; + $contents = json_decode(getPage($url)); + // by destination! foreach ($contents as $key => $row) { - $routeDestinations[$row[2]][] = $row; + $routeDestinations[$row[2]][] = $row; } echo '
                                      Go to Destination: '; - foreach(ksort($routeDestinations) as $destination => $routes) - { - echo "$destination "; - } - echo "
                                      + foreach (ksort($routeDestinations) as $destination => $routes) { + echo "$destination "; + } + echo "
                          "; - foreach ($routeDestinations as $destination => $routes) - { - echo ''; - echo '
                        • '.$destination."...
                            \n"; - printRoutes($routes); + foreach ($routeDestinations as $destination => $routes) { + echo ''; + echo '
                          • ' . $destination . "...
                          • \n"; } } echo "
                          \n"; - - include_footer(); ?> --- a/schedule_viewer.py +++ b/schedule_viewer.py @@ -32,6 +32,7 @@ import simplejson import socket import time +import datetime import transitfeed from transitfeed import util import urllib @@ -95,6 +96,8 @@ float(stop.stop_lon), stop.location_type, stop.stop_code, stop.zone_id) class ScheduleRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler): + cache = {} + def do_GET(self): scheme, host, path, x, params, fragment = urlparse.urlparse(self.path) parsed_params = {} @@ -114,7 +117,7 @@ handler_name = 'handle_json_GET_%s' % m.group(1) handler = getattr(self, handler_name, None) if callable(handler): - return self.handle_json_wrapper_GET(handler, parsed_params) + return self.handle_json_wrapper_GET(handler, parsed_params, handler_name) # Restrict allowable file names to prevent relative path attacks etc m = re.match(r'/file/([a-z0-9_-]{1,64}\.?[a-z0-9_-]{1,64})$', path) @@ -243,11 +246,22 @@ patterns.sort() return patterns - def handle_json_wrapper_GET(self, handler, parsed_params): + def handle_json_wrapper_GET(self, handler, parsed_params, handler_name): """Call handler and output the return value in JSON.""" schedule = self.server.schedule - result = handler(parsed_params) - content = ResultEncoder().encode(result) + # round times to nearest 100 seconds + if "time" in parsed_params: + parsed_params['time'] = int(round(float(parsed_params['time']),-2)) + paramkey = tuple(sorted(parsed_params.items())) + if handler_name in self.cache and paramkey in self.cache[handler_name] : + print ("Cache hit for ",handler_name," params ",parsed_params) + else: + print ("Cache miss for ",handler_name," params ",parsed_params) + result = handler(parsed_params) + if not handler_name in self.cache: + self.cache[handler_name] = {} + self.cache[handler_name][paramkey] = ResultEncoder().encode(result) + content = self.cache[handler_name][paramkey] self.send_response(200) self.send_header('Content-Type', 'text/plain') self.send_header('Content-Length', str(len(content))) @@ -268,11 +282,28 @@ result.sort(key = lambda x: x[1:3]) return result + def handle_json_GET_routesearch(self, params): + """Return a list of routes with matching short name.""" + schedule = self.server.schedule + routeshortname = params.get('routeshortname', None) + result = [] + for r in schedule.GetRouteList(): + if r.route_short_name == routeshortname: + servicep = None + for t in schedule.GetTripList(): + if t.route_id == r.route_id: + servicep = t.service_period + break + result.append( (r.route_id, r.route_short_name, r.route_long_name, servicep.service_id) ) + result.sort(key = lambda x: x[1:3]) + return result + + def handle_json_GET_routerow(self, params): schedule = self.server.schedule route = schedule.GetRoute(params.get('route', None)) return [transitfeed.Route._FIELD_NAMES, route.GetFieldValuesTuple()] - + def handle_json_GET_routetrips(self, params): """ Get a trip for a route_id (preferablly the next one) """ schedule = self.server.schedule @@ -280,7 +311,12 @@ result = [] for t in schedule.GetTripList(): if t.route_id == query: - result.append ( (t.GetStartTime(), t.trip_id) ) + try: + starttime = t.GetStartTime() + except: + print "Error for GetStartTime of trip #" + t.trip_id + sys.exc_info()[0] + else: + result.append ( (starttime, t.trip_id) ) return sorted(result, key=lambda trip: trip[0]) def handle_json_GET_triprows(self, params): @@ -330,14 +366,56 @@ points.append((stop.stop_lat, stop.stop_lon)) return points +# +# GeoPo Encode in Python +# @author : Shintaro Inagaki +# @param location (Dictionary) [lat (Float), lng (Float), scale(Int)] +# @return geopo (String) +# + def handle_json_GET_neareststops(self, params): """Return a list of the nearest 'limit' stops to 'lat', 'lon'""" schedule = self.server.schedule lat = float(params.get('lat')) lon = float(params.get('lon')) - limit = int(params.get('limit')) - stops = schedule.GetNearestStops(lat=lat, lon=lon, n=limit) - return [StopToTuple(s) for s in stops] + limit = int(params.get('limit',5)) + scale = int(params.get('scale',5)) # 5 = neighbourhood ~ 1km, 4= town 5 by 7km + stops = [] + + # 64characters (number + big and small letter + hyphen + underscore) + chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_" + + geopo = "" + + # Change a degree measure to a decimal number + lat = (lat + 90.0) / 180 * 8 ** 10 # 90.0 is forced FLOAT type when lat is INT + lon = (lon + 180.0) / 360 * 8 ** 10 # 180.0 is same + + # Compute a GeoPo code from head and concatenate + for i in range(scale): + order = int(lat / (8 ** (9 - i)) % 8) + int(lon / (8 ** (9 - i)) % 8) * 8 + geopo = geopo + chars[order] + + + for s in schedule.GetStopList(): + if s.stop_code.find(geopo) != -1: + stops.append(s) + + if scale == 5: + print stops + return [StopToTuple(s) for s in stops] + else: + dist_stop_list = [] + for s in stops: + # TODO: Use util.ApproximateDistanceBetweenStops? + dist = (s.stop_lat - lat)**2 + (s.stop_lon - lon)**2 + if len(dist_stop_list) < limit: + bisect.insort(dist_stop_list, (dist, s)) + elif dist < dist_stop_list[-1][0]: + bisect.insort(dist_stop_list, (dist, s)) + dist_stop_list.pop() # Remove stop with greatest distance + print dist_stop_list + return [StopToTuple(s) for dist, s in dist_stop_list] def handle_json_GET_boundboxstops(self, params): """Return a list of up to 'limit' stops within bounding box with 'n','e' @@ -407,22 +485,73 @@ if s.stop_id.lower() == query: return StopToTuple(s) return [] + def handle_json_GET_stoproutes(self, params): + """Given a stop_id return all routes to visit the stop.""" + schedule = self.server.schedule + stop = schedule.GetStop(params.get('stop', None)) + service_period = params.get('service_period', None) + trips = stop.GetTrips(schedule) + result = {} + for trip in trips: + route = schedule.GetRoute(trip.route_id) + if not route.route_short_name+route.route_long_name+trip.service_id in result: + result[route.route_short_name+route.route_long_name+trip.service_id] = (route.route_id, route.route_short_name, route.route_long_name, trip.trip_id, trip.service_id) + return result + + def handle_json_GET_stopalltrips(self, params): + """Given a stop_id return all trips to visit the stop.""" + schedule = self.server.schedule + stop = schedule.GetStop(params.get('stop', None)) + service_period = params.get('service_period', None) + time_trips = stop.GetStopTimeTrips(schedule) + result = [] + for time, (trip, index), tp in time_trips: + headsign = None + # Find the most recent headsign from the StopTime objects + for stoptime in trip.GetStopTimes()[index::-1]: + if stoptime.stop_headsign: + headsign = stoptime.stop_headsign + break + # If stop_headsign isn't found, look for a trip_headsign + if not headsign: + headsign = trip.trip_headsign + route = schedule.GetRoute(trip.route_id) + trip_name = '' + if route.route_short_name: + trip_name += route.route_short_name + if route.route_long_name: + if len(trip_name): + trip_name += " - " + trip_name += route.route_long_name + if service_period == None or trip.service_id == service_period: + result.append((time, (trip.trip_id, trip_name, trip.service_id), tp)) + return result + + def handle_json_GET_stoptrips(self, params): """Given a stop_id and time in seconds since midnight return the next trips to visit the stop.""" schedule = self.server.schedule stop = schedule.GetStop(params.get('stop', None)) - time = int(params.get('time', 0)) + requested_time = int(params.get('time', 0)) + limit = int(params.get('limit', 15)) service_period = params.get('service_period', None) - time_trips = stop.GetStopTimeTrips(schedule) - time_trips.sort() # OPT: use bisect.insort to make this O(N*ln(N)) -> O(N) - # Keep the first 15 after param 'time'. - # Need make a tuple to find correct bisect point - time_trips = time_trips[bisect.bisect_left(time_trips, (time, 0)):] - time_trips = time_trips[:15] + time_range = int(params.get('time_range', 24*60*60)) + + + filtered_time_trips = [] + for trip, index in stop._GetTripIndex(schedule): + tripstarttime = trip.GetStartTime() + if tripstarttime > requested_time and tripstarttime < (requested_time + time_range): + time, stoptime, tp = trip.GetTimeInterpolatedStops()[index] + if time > requested_time and time < (requested_time + time_range): + bisect.insort(filtered_time_trips, (time, (trip, index), tp)) + result = [] - for time, (trip, index), tp in time_trips: + for time, (trip, index), tp in filtered_time_trips: + if len(result) > limit: + break headsign = None # Find the most recent headsign from the StopTime objects for stoptime in trip.GetStopTimes()[index::-1]: @@ -566,12 +695,13 @@ if options.key and os.path.isfile(options.key): options.key = open(options.key).read().strip() - + schedule = transitfeed.Schedule(problem_reporter=transitfeed.ProblemReporter()) print 'Loading data from feed "%s"...' % options.feed_filename print '(this may take a few minutes for larger cities)' + t0 = datetime.datetime.now() schedule.Load(options.feed_filename) - + print ("Loaded in", (datetime.datetime.now() - t0).seconds , "seconds") server = StoppableHTTPServer(server_address=('', options.port), RequestHandlerClass=RequestHandlerClass) server.key = options.key @@ -579,6 +709,8 @@ server.file_dir = options.file_dir server.host = options.host server.feed_path = options.feed_filename + + print ("To view, point your browser at http://localhost:%d/" % (server.server_port)) --- /dev/null +++ b/ses.php @@ -1,1 +1,704 @@ - +__accessKey; } + public function getSecretKey() { return $this->__secretKey; } + public function getHost() { return $this->__host; } + + protected $__verifyHost = 1; + protected $__verifyPeer = 1; + + // verifyHost and verifyPeer determine whether curl verifies ssl certificates. + // It may be necessary to disable these checks on certain systems. + // These only have an effect if SSL is enabled. + public function verifyHost() { return $this->__verifyHost; } + public function enableVerifyHost($enable = true) { $this->__verifyHost = $enable; } + + public function verifyPeer() { return $this->__verifyPeer; } + public function enableVerifyPeer($enable = true) { $this->__verifyPeer = $enable; } + + /** + * Constructor + * + * @param string $accessKey Access key + * @param string $secretKey Secret key + * @return void + */ + public function __construct($accessKey = null, $secretKey = null, $host = 'email.us-east-1.amazonaws.com') { + if ($accessKey !== null && $secretKey !== null) { + $this->setAuth($accessKey, $secretKey); + } + $this->__host = $host; + } + + /** + * Set AWS access key and secret key + * + * @param string $accessKey Access key + * @param string $secretKey Secret key + * @return void + */ + public function setAuth($accessKey, $secretKey) { + $this->__accessKey = $accessKey; + $this->__secretKey = $secretKey; + } + + /** + * Lists the email addresses that have been verified and can be used as the 'From' address + * + * @return An array containing two items: a list of verified email addresses, and the request id. + */ + public function listVerifiedEmailAddresses() { + $rest = new SimpleEmailServiceRequest($this, 'GET'); + $rest->setParameter('Action', 'ListVerifiedEmailAddresses'); + + $rest = $rest->getResponse(); + if($rest->error === false && $rest->code !== 200) { + $rest->error = array('code' => $rest->code, 'message' => 'Unexpected HTTP status'); + } + if($rest->error !== false) { + $this->__triggerError('listVerifiedEmailAddresses', $rest->error); + return false; + } + + $response = array(); + if(!isset($rest->body)) { + return $response; + } + + $addresses = array(); + foreach($rest->body->ListVerifiedEmailAddressesResult->VerifiedEmailAddresses->member as $address) { + $addresses[] = (string)$address; + } + + $response['Addresses'] = $addresses; + $response['RequestId'] = (string)$rest->body->ResponseMetadata->RequestId; + + return $response; + } + + /** + * Requests verification of the provided email address, so it can be used + * as the 'From' address when sending emails through SimpleEmailService. + * + * After submitting this request, you should receive a verification email + * from Amazon at the specified address containing instructions to follow. + * + * @param string email The email address to get verified + * @return The request id for this request. + */ + public function verifyEmailAddress($email) { + $rest = new SimpleEmailServiceRequest($this, 'POST'); + $rest->setParameter('Action', 'VerifyEmailAddress'); + $rest->setParameter('EmailAddress', $email); + + $rest = $rest->getResponse(); + if($rest->error === false && $rest->code !== 200) { + $rest->error = array('code' => $rest->code, 'message' => 'Unexpected HTTP status'); + } + if($rest->error !== false) { + $this->__triggerError('verifyEmailAddress', $rest->error); + return false; + } + + $response['RequestId'] = (string)$rest->body->ResponseMetadata->RequestId; + return $response; + } + + /** + * Removes the specified email address from the list of verified addresses. + * + * @param string email The email address to remove + * @return The request id for this request. + */ + public function deleteVerifiedEmailAddress($email) { + $rest = new SimpleEmailServiceRequest($this, 'DELETE'); + $rest->setParameter('Action', 'DeleteVerifiedEmailAddress'); + $rest->setParameter('EmailAddress', $email); + + $rest = $rest->getResponse(); + if($rest->error === false && $rest->code !== 200) { + $rest->error = array('code' => $rest->code, 'message' => 'Unexpected HTTP status'); + } + if($rest->error !== false) { + $this->__triggerError('deleteVerifiedEmailAddress', $rest->error); + return false; + } + + $response['RequestId'] = (string)$rest->body->ResponseMetadata->RequestId; + return $response; + } + + /** + * Retrieves information on the current activity limits for this account. + * See http://docs.amazonwebservices.com/ses/latest/APIReference/API_GetSendQuota.html + * + * @return An array containing information on this account's activity limits. + */ + public function getSendQuota() { + $rest = new SimpleEmailServiceRequest($this, 'GET'); + $rest->setParameter('Action', 'GetSendQuota'); + + $rest = $rest->getResponse(); + if($rest->error === false && $rest->code !== 200) { + $rest->error = array('code' => $rest->code, 'message' => 'Unexpected HTTP status'); + } + if($rest->error !== false) { + $this->__triggerError('getSendQuota', $rest->error); + return false; + } + + $response = array(); + if(!isset($rest->body)) { + return $response; + } + + $response['Max24HourSend'] = (string)$rest->body->GetSendQuotaResult->Max24HourSend; + $response['MaxSendRate'] = (string)$rest->body->GetSendQuotaResult->MaxSendRate; + $response['SentLast24Hours'] = (string)$rest->body->GetSendQuotaResult->SentLast24Hours; + $response['RequestId'] = (string)$rest->body->ResponseMetadata->RequestId; + + return $response; + } + + /** + * Retrieves statistics for the last two weeks of activity on this account. + * See http://docs.amazonwebservices.com/ses/latest/APIReference/API_GetSendStatistics.html + * + * @return An array of activity statistics. Each array item covers a 15-minute period. + */ + public function getSendStatistics() { + $rest = new SimpleEmailServiceRequest($this, 'GET'); + $rest->setParameter('Action', 'GetSendStatistics'); + + $rest = $rest->getResponse(); + if($rest->error === false && $rest->code !== 200) { + $rest->error = array('code' => $rest->code, 'message' => 'Unexpected HTTP status'); + } + if($rest->error !== false) { + $this->__triggerError('getSendStatistics', $rest->error); + return false; + } + + $response = array(); + if(!isset($rest->body)) { + return $response; + } + + $datapoints = array(); + foreach($rest->body->GetSendStatisticsResult->SendDataPoints->member as $datapoint) { + $p = array(); + $p['Bounces'] = (string)$datapoint->Bounces; + $p['Complaints'] = (string)$datapoint->Complaints; + $p['DeliveryAttempts'] = (string)$datapoint->DeliveryAttempts; + $p['Rejects'] = (string)$datapoint->Rejects; + $p['Timestamp'] = (string)$datapoint->Timestamp; + + $datapoints[] = $p; + } + + $response['SendDataPoints'] = $datapoints; + $response['RequestId'] = (string)$rest->body->ResponseMetadata->RequestId; + + return $response; + } + + + /** + * Given a SimpleEmailServiceMessage object, submits the message to the service for sending. + * + * @return An array containing the unique identifier for this message and a separate request id. + * Returns false if the provided message is missing any required fields. + */ + public function sendEmail($sesMessage) { + if(!$sesMessage->validate()) { + return false; + } + + $rest = new SimpleEmailServiceRequest($this, 'POST'); + $rest->setParameter('Action', 'SendEmail'); + + $i = 1; + foreach($sesMessage->to as $to) { + $rest->setParameter('Destination.ToAddresses.member.'.$i, $to); + $i++; + } + + if(is_array($sesMessage->cc)) { + $i = 1; + foreach($sesMessage->cc as $cc) { + $rest->setParameter('Destination.CcAddresses.member.'.$i, $cc); + $i++; + } + } + + if(is_array($sesMessage->bcc)) { + $i = 1; + foreach($sesMessage->bcc as $bcc) { + $rest->setParameter('Destination.BccAddresses.member.'.$i, $bcc); + $i++; + } + } + + if(is_array($sesMessage->replyto)) { + $i = 1; + foreach($sesMessage->replyto as $replyto) { + $rest->setParameter('ReplyToAddresses.member.'.$i, $replyto); + $i++; + } + } + + $rest->setParameter('Source', $sesMessage->from); + + if($sesMessage->returnpath != null) { + $rest->setParameter('ReturnPath', $sesMessage->returnpath); + } + + if($sesMessage->subject != null && strlen($sesMessage->subject) > 0) { + $rest->setParameter('Message.Subject.Data', $sesMessage->subject); + if($sesMessage->subjectCharset != null && strlen($sesMessage->subjectCharset) > 0) { + $rest->setParameter('Message.Subject.Charset', $sesMessage->subjectCharset); + } + } + + + if($sesMessage->messagetext != null && strlen($sesMessage->messagetext) > 0) { + $rest->setParameter('Message.Body.Text.Data', $sesMessage->messagetext); + if($sesMessage->messageTextCharset != null && strlen($sesMessage->messageTextCharset) > 0) { + $rest->setParameter('Message.Body.Text.Charset', $sesMessage->messageTextCharset); + } + } + + if($sesMessage->messagehtml != null && strlen($sesMessage->messagehtml) > 0) { + $rest->setParameter('Message.Body.Html.Data', $sesMessage->messagehtml); + if($sesMessage->messageHtmlCharset != null && strlen($sesMessage->messageHtmlCharset) > 0) { + $rest->setParameter('Message.Body.Html.Charset', $sesMessage->messageHtmlCharset); + } + } + + $rest = $rest->getResponse(); + if($rest->error === false && $rest->code !== 200) { + $rest->error = array('code' => $rest->code, 'message' => 'Unexpected HTTP status'); + } + if($rest->error !== false) { + $this->__triggerError('sendEmail', $rest->error); + return false; + } + + $response['MessageId'] = (string)$rest->body->SendEmailResult->MessageId; + $response['RequestId'] = (string)$rest->body->ResponseMetadata->RequestId; + return $response; + } + + /** + * Trigger an error message + * + * @internal Used by member functions to output errors + * @param array $error Array containing error information + * @return string + */ + public function __triggerError($functionname, $error) + { + if($error == false) { + trigger_error(sprintf("SimpleEmailService::%s(): Encountered an error, but no description given", $functionname), E_USER_WARNING); + } + else if(isset($error['curl']) && $error['curl']) + { + trigger_error(sprintf("SimpleEmailService::%s(): %s %s", $functionname, $error['code'], $error['message']), E_USER_WARNING); + } + else if(isset($error['Error'])) + { + $e = $error['Error']; + $message = sprintf("SimpleEmailService::%s(): %s - %s: %s\nRequest Id: %s\n", $functionname, $e['Type'], $e['Code'], $e['Message'], $error['RequestId']); + trigger_error($message, E_USER_WARNING); + } + } + + /** + * Callback handler for 503 retries. + * + * @internal Used by SimpleDBRequest to call the user-specified callback, if set + * @param $attempt The number of failed attempts so far + * @return The retry delay in microseconds, or 0 to stop retrying. + */ + public function __executeServiceTemporarilyUnavailableRetryDelay($attempt) + { + if(is_callable($this->__serviceUnavailableRetryDelayCallback)) { + $callback = $this->__serviceUnavailableRetryDelayCallback; + return $callback($attempt); + } + return 0; + } +} + +final class SimpleEmailServiceRequest +{ + private $ses, $verb, $parameters = array(); + public $response; + + /** + * Constructor + * + * @param string $ses The SimpleEmailService object making this request + * @param string $action action + * @param string $verb HTTP verb + * @return mixed + */ + function __construct($ses, $verb) { + $this->ses = $ses; + $this->verb = $verb; + $this->response = new STDClass; + $this->response->error = false; + } + + /** + * Set request parameter + * + * @param string $key Key + * @param string $value Value + * @param boolean $replace Whether to replace the key if it already exists (default true) + * @return void + */ + public function setParameter($key, $value, $replace = true) { + if(!$replace && isset($this->parameters[$key])) + { + $temp = (array)($this->parameters[$key]); + $temp[] = $value; + $this->parameters[$key] = $temp; + } + else + { + $this->parameters[$key] = $value; + } + } + + /** + * Get the response + * + * @return object | false + */ + public function getResponse() { + + $params = array(); + foreach ($this->parameters as $var => $value) + { + if(is_array($value)) + { + foreach($value as $v) + { + $params[] = $var.'='.$this->__customUrlEncode($v); + } + } + else + { + $params[] = $var.'='.$this->__customUrlEncode($value); + } + } + + sort($params, SORT_STRING); + + // must be in format 'Sun, 06 Nov 1994 08:49:37 GMT' + $date = gmdate('D, d M Y H:i:s e'); + + $query = implode('&', $params); + + $headers = array(); + $headers[] = 'Date: '.$date; + $headers[] = 'Host: '.$this->ses->getHost(); + + $auth = 'AWS3-HTTPS AWSAccessKeyId='.$this->ses->getAccessKey(); + $auth .= ',Algorithm=HmacSHA256,Signature='.$this->__getSignature($date); + $headers[] = 'X-Amzn-Authorization: '.$auth; + + $url = 'https://'.$this->ses->getHost().'/'; + + // Basic setup + $curl = curl_init(); + curl_setopt($curl, CURLOPT_USERAGENT, 'SimpleEmailService/php'); + + curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, ($this->ses->verifyHost() ? 1 : 0)); + curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, ($this->ses->verifyPeer() ? 1 : 0)); + + // Request types + switch ($this->verb) { + case 'GET': + $url .= '?'.$query; + break; + case 'POST': + curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $this->verb); + curl_setopt($curl, CURLOPT_POSTFIELDS, $query); + $headers[] = 'Content-Type: application/x-www-form-urlencoded'; + break; + case 'DELETE': + $url .= '?'.$query; + curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'DELETE'); + break; + default: break; + } + curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); + curl_setopt($curl, CURLOPT_HEADER, false); + + curl_setopt($curl, CURLOPT_URL, $url); + curl_setopt($curl, CURLOPT_RETURNTRANSFER, false); + curl_setopt($curl, CURLOPT_WRITEFUNCTION, array(&$this, '__responseWriteCallback')); + curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); + + // Execute, grab errors + if (curl_exec($curl)) { + $this->response->code = curl_getinfo($curl, CURLINFO_HTTP_CODE); + } else { + $this->response->error = array( + 'curl' => true, + 'code' => curl_errno($curl), + 'message' => curl_error($curl), + 'resource' => $this->resource + ); + } + + @curl_close($curl); + + // Parse body into XML + if ($this->response->error === false && isset($this->response->body)) { + $this->response->body = simplexml_load_string($this->response->body); + + // Grab SES errors + if (!in_array($this->response->code, array(200, 201, 202, 204)) + && isset($this->response->body->Error)) { + $error = $this->response->body->Error; + $output = array(); + $output['curl'] = false; + $output['Error'] = array(); + $output['Error']['Type'] = (string)$error->Type; + $output['Error']['Code'] = (string)$error->Code; + $output['Error']['Message'] = (string)$error->Message; + $output['RequestId'] = (string)$this->response->body->RequestId; + + $this->response->error = $output; + unset($this->response->body); + } + } + + return $this->response; + } + + /** + * CURL write callback + * + * @param resource &$curl CURL resource + * @param string &$data Data + * @return integer + */ + private function __responseWriteCallback(&$curl, &$data) { + $this->response->body .= $data; + return strlen($data); + } + + /** + * Contributed by afx114 + * URL encode the parameters as per http://docs.amazonwebservices.com/AWSECommerceService/latest/DG/index.html?Query_QueryAuth.html + * PHP's rawurlencode() follows RFC 1738, not RFC 3986 as required by Amazon. The only difference is the tilde (~), so convert it back after rawurlencode + * See: http://www.morganney.com/blog/API/AWS-Product-Advertising-API-Requires-a-Signed-Request.php + * + * @param string $var String to encode + * @return string + */ + private function __customUrlEncode($var) { + return str_replace('%7E', '~', rawurlencode($var)); + } + + /** + * Generate the auth string using Hmac-SHA256 + * + * @internal Used by SimpleDBRequest::getResponse() + * @param string $string String to sign + * @return string + */ + private function __getSignature($string) { + return base64_encode(hash_hmac('sha256', $string, $this->ses->getSecretKey(), true)); + } +} + + +final class SimpleEmailServiceMessage { + + // these are public for convenience only + // these are not to be used outside of the SimpleEmailService class! + public $to, $cc, $bcc, $replyto; + public $from, $returnpath; + public $subject, $messagetext, $messagehtml; + public $subjectCharset, $messageTextCharset, $messageHtmlCharset; + + function __construct() { + $to = array(); + $cc = array(); + $bcc = array(); + $replyto = array(); + + $from = null; + $returnpath = null; + + $subject = null; + $messagetext = null; + $messagehtml = null; + + $subjectCharset = null; + $messageTextCharset = null; + $messageHtmlCharset = null; + } + + + /** + * addTo, addCC, addBCC, and addReplyTo have the following behavior: + * If a single address is passed, it is appended to the current list of addresses. + * If an array of addresses is passed, that array is merged into the current list. + */ + function addTo($to) { + if(!is_array($to)) { + $this->to[] = $to; + } + else { + $this->to = array_merge($this->to, $to); + } + } + + function addCC($cc) { + if(!is_array($cc)) { + $this->cc[] = $cc; + } + else { + $this->cc = array_merge($this->cc, $cc); + } + } + + function addBCC($bcc) { + if(!is_array($bcc)) { + $this->bcc[] = $bcc; + } + else { + $this->bcc = array_merge($this->bcc, $bcc); + } + } + + function addReplyTo($replyto) { + if(!is_array($replyto)) { + $this->replyto[] = $replyto; + } + else { + $this->replyto = array_merge($this->replyto, $replyto); + } + } + + function setFrom($from) { + $this->from = $from; + } + + function setReturnPath($returnpath) { + $this->returnpath = $returnpath; + } + + function setSubject($subject) { + $this->subject = $subject; + } + + function setSubjectCharset($charset) { + $this->subjectCharset = $charset; + } + + function setMessageFromString($text, $html = null) { + $this->messagetext = $text; + $this->messagehtml = $html; + } + + function setMessageFromFile($textfile, $htmlfile = null) { + if(file_exists($textfile) && is_file($textfile) && is_readable($textfile)) { + $this->messagetext = file_get_contents($textfile); + } + if(file_exists($htmlfile) && is_file($htmlfile) && is_readable($htmlfile)) { + $this->messagehtml = file_get_contents($htmlfile); + } + } + + function setMessageFromURL($texturl, $htmlurl = null) { + $this->messagetext = file_get_contents($texturl); + if($htmlurl !== null) { + $this->messagehtml = file_get_contents($htmlurl); + } + } + + function setMessageCharset($textCharset, $htmlCharset = null) { + $this->messageTextCharset = $textCharset; + $this->messageHtmlCharset = $htmlCharset; + } + + /** + * Validates whether the message object has sufficient information to submit a request to SES. + * This does not guarantee the message will arrive, nor that the request will succeed; + * instead, it makes sure that no required fields are missing. + * + * This is used internally before attempting a SendEmail or SendRawEmail request, + * but it can be used outside of this file if verification is desired. + * May be useful if e.g. the data is being populated from a form; developers can generally + * use this function to verify completeness instead of writing custom logic. + * + * @return boolean + */ + public function validate() { + if(count($this->to) == 0) + return false; + if($this->from == null || strlen($this->from) == 0) + return false; + if($this->messagetext == null) + return false; + return true; + } +} + --- /dev/null +++ b/simple_html_dom.php @@ -1,1 +1,975 @@ - + +Acknowledge: Jose Solorzano (https://sourceforge.net/projects/php-html/) +Contributions by: + Yousuke Kumakura (Attribute filters) + Vadim Voituk (Negative indexes supports of "find" method) + Antcs (Constructor with automatically load contents either text or file/url) +Licensed under The MIT License +Redistributions of files must retain the above copyright notice. +*******************************************************************************/ + +define('HDOM_TYPE_ELEMENT', 1); +define('HDOM_TYPE_COMMENT', 2); +define('HDOM_TYPE_TEXT', 3); +define('HDOM_TYPE_ENDTAG', 4); +define('HDOM_TYPE_ROOT', 5); +define('HDOM_TYPE_UNKNOWN', 6); +define('HDOM_QUOTE_DOUBLE', 0); +define('HDOM_QUOTE_SINGLE', 1); +define('HDOM_QUOTE_NO', 3); +define('HDOM_INFO_BEGIN', 0); +define('HDOM_INFO_END', 1); +define('HDOM_INFO_QUOTE', 2); +define('HDOM_INFO_SPACE', 3); +define('HDOM_INFO_TEXT', 4); +define('HDOM_INFO_INNER', 5); +define('HDOM_INFO_OUTER', 6); +define('HDOM_INFO_ENDSPACE',7); + +// helper functions +// ----------------------------------------------------------------------------- +// get html dom form file +function file_get_html() { + $dom = new simple_html_dom; + $args = func_get_args(); + $dom->load(call_user_func_array('file_get_contents', $args), true); + return $dom; +} + +// get html dom form string +function str_get_html($str, $lowercase=true) { + $dom = new simple_html_dom; + $dom->load($str, $lowercase); + return $dom; +} + +// dump html dom tree +function dump_html_tree($node, $show_attr=true, $deep=0) { + $lead = str_repeat(' ', $deep); + echo $lead.$node->tag; + if ($show_attr && count($node->attr)>0) { + echo '('; + foreach($node->attr as $k=>$v) + echo "[$k]=>\"".$node->$k.'", '; + echo ')'; + } + echo "\n"; + + foreach($node->nodes as $c) + dump_html_tree($c, $show_attr, $deep+1); +} + +// get dom form file (deprecated) +function file_get_dom() { + $dom = new simple_html_dom; + $args = func_get_args(); + $dom->load(call_user_func_array('file_get_contents', $args), true); + return $dom; +} + +// get dom form string (deprecated) +function str_get_dom($str, $lowercase=true) { + $dom = new simple_html_dom; + $dom->load($str, $lowercase); + return $dom; +} + +// simple html dom node +// ----------------------------------------------------------------------------- +class simple_html_dom_node { + public $nodetype = HDOM_TYPE_TEXT; + public $tag = 'text'; + public $attr = array(); + public $children = array(); + public $nodes = array(); + public $parent = null; + public $_ = array(); + private $dom = null; + + function __construct($dom) { + $this->dom = $dom; + $dom->nodes[] = $this; + } + + function __destruct() { + $this->clear(); + } + + function __toString() { + return $this->outertext(); + } + + // clean up memory due to php5 circular references memory leak... + function clear() { + $this->dom = null; + $this->nodes = null; + $this->parent = null; + $this->children = null; + } + + // dump node's tree + function dump($show_attr=true) { + dump_html_tree($this, $show_attr); + } + + // returns the parent of node + function parent() { + return $this->parent; + } + + // returns children of node + function children($idx=-1) { + if ($idx===-1) return $this->children; + if (isset($this->children[$idx])) return $this->children[$idx]; + return null; + } + + // returns the first child of node + function first_child() { + if (count($this->children)>0) return $this->children[0]; + return null; + } + + // returns the last child of node + function last_child() { + if (($count=count($this->children))>0) return $this->children[$count-1]; + return null; + } + + // returns the next sibling of node + function next_sibling() { + if ($this->parent===null) return null; + $idx = 0; + $count = count($this->parent->children); + while ($idx<$count && $this!==$this->parent->children[$idx]) + ++$idx; + if (++$idx>=$count) return null; + return $this->parent->children[$idx]; + } + + // returns the previous sibling of node + function prev_sibling() { + if ($this->parent===null) return null; + $idx = 0; + $count = count($this->parent->children); + while ($idx<$count && $this!==$this->parent->children[$idx]) + ++$idx; + if (--$idx<0) return null; + return $this->parent->children[$idx]; + } + + // get dom node's inner html + function innertext() { + if (isset($this->_[HDOM_INFO_INNER])) return $this->_[HDOM_INFO_INNER]; + if (isset($this->_[HDOM_INFO_TEXT])) return $this->dom->restore_noise($this->_[HDOM_INFO_TEXT]); + + $ret = ''; + foreach($this->nodes as $n) + $ret .= $n->outertext(); + return $ret; + } + + // get dom node's outer text (with tag) + function outertext() { + if ($this->tag==='root') return $this->innertext(); + + // trigger callback + if ($this->dom->callback!==null) + call_user_func_array($this->dom->callback, array($this)); + + if (isset($this->_[HDOM_INFO_OUTER])) return $this->_[HDOM_INFO_OUTER]; + if (isset($this->_[HDOM_INFO_TEXT])) return $this->dom->restore_noise($this->_[HDOM_INFO_TEXT]); + + // render begin tag + $ret = $this->dom->nodes[$this->_[HDOM_INFO_BEGIN]]->makeup(); + + // render inner text + if (isset($this->_[HDOM_INFO_INNER])) + $ret .= $this->_[HDOM_INFO_INNER]; + else { + foreach($this->nodes as $n) + $ret .= $n->outertext(); + } + + // render end tag + if(isset($this->_[HDOM_INFO_END]) && $this->_[HDOM_INFO_END]!=0) + $ret .= 'tag.'>'; + return $ret; + } + + // get dom node's plain text + function text() { + if (isset($this->_[HDOM_INFO_INNER])) return $this->_[HDOM_INFO_INNER]; + switch ($this->nodetype) { + case HDOM_TYPE_TEXT: return $this->dom->restore_noise($this->_[HDOM_INFO_TEXT]); + case HDOM_TYPE_COMMENT: return ''; + case HDOM_TYPE_UNKNOWN: return ''; + } + if (strcasecmp($this->tag, 'script')===0) return ''; + if (strcasecmp($this->tag, 'style')===0) return ''; + + $ret = ''; + foreach($this->nodes as $n) + $ret .= $n->text(); + return $ret; + } + + function xmltext() { + $ret = $this->innertext(); + $ret = str_ireplace('', '', $ret); + return $ret; + } + + // build node's text with tag + function makeup() { + // text, comment, unknown + if (isset($this->_[HDOM_INFO_TEXT])) return $this->dom->restore_noise($this->_[HDOM_INFO_TEXT]); + + $ret = '<'.$this->tag; + $i = -1; + + foreach($this->attr as $key=>$val) { + ++$i; + + // skip removed attribute + if ($val===null || $val===false) + continue; + + $ret .= $this->_[HDOM_INFO_SPACE][$i][0]; + //no value attr: nowrap, checked selected... + if ($val===true) + $ret .= $key; + else { + switch($this->_[HDOM_INFO_QUOTE][$i]) { + case HDOM_QUOTE_DOUBLE: $quote = '"'; break; + case HDOM_QUOTE_SINGLE: $quote = '\''; break; + default: $quote = ''; + } + $ret .= $key.$this->_[HDOM_INFO_SPACE][$i][1].'='.$this->_[HDOM_INFO_SPACE][$i][2].$quote.$val.$quote; + } + } + $ret = $this->dom->restore_noise($ret); + return $ret . $this->_[HDOM_INFO_ENDSPACE] . '>'; + } + + // find elements by css selector + function find($selector, $idx=null) { + $selectors = $this->parse_selector($selector); + if (($count=count($selectors))===0) return array(); + $found_keys = array(); + + // find each selector + for ($c=0; $c<$count; ++$c) { + if (($levle=count($selectors[0]))===0) return array(); + if (!isset($this->_[HDOM_INFO_BEGIN])) return array(); + + $head = array($this->_[HDOM_INFO_BEGIN]=>1); + + // handle descendant selectors, no recursive! + for ($l=0; $l<$levle; ++$l) { + $ret = array(); + foreach($head as $k=>$v) { + $n = ($k===-1) ? $this->dom->root : $this->dom->nodes[$k]; + $n->seek($selectors[$c][$l], $ret); + } + $head = $ret; + } + + foreach($head as $k=>$v) { + if (!isset($found_keys[$k])) + $found_keys[$k] = 1; + } + } + + // sort keys + ksort($found_keys); + + $found = array(); + foreach($found_keys as $k=>$v) + $found[] = $this->dom->nodes[$k]; + + // return nth-element or array + if (is_null($idx)) return $found; + else if ($idx<0) $idx = count($found) + $idx; + return (isset($found[$idx])) ? $found[$idx] : null; + } + + // seek for given conditions + protected function seek($selector, &$ret) { + list($tag, $key, $val, $exp, $no_key) = $selector; + + // xpath index + if ($tag && $key && is_numeric($key)) { + $count = 0; + foreach ($this->children as $c) { + if ($tag==='*' || $tag===$c->tag) { + if (++$count==$key) { + $ret[$c->_[HDOM_INFO_BEGIN]] = 1; + return; + } + } + } + return; + } + + $end = (!empty($this->_[HDOM_INFO_END])) ? $this->_[HDOM_INFO_END] : 0; + if ($end==0) { + $parent = $this->parent; + while (!isset($parent->_[HDOM_INFO_END]) && $parent!==null) { + $end -= 1; + $parent = $parent->parent; + } + $end += $parent->_[HDOM_INFO_END]; + } + + for($i=$this->_[HDOM_INFO_BEGIN]+1; $i<$end; ++$i) { + $node = $this->dom->nodes[$i]; + $pass = true; + + if ($tag==='*' && !$key) { + if (in_array($node, $this->children, true)) + $ret[$i] = 1; + continue; + } + + // compare tag + if ($tag && $tag!=$node->tag && $tag!=='*') {$pass=false;} + // compare key + if ($pass && $key) { + if ($no_key) { + if (isset($node->attr[$key])) $pass=false; + } + else if (!isset($node->attr[$key])) $pass=false; + } + // compare value + if ($pass && $key && $val && $val!=='*') { + $check = $this->match($exp, $val, $node->attr[$key]); + // handle multiple class + if (!$check && strcasecmp($key, 'class')===0) { + foreach(explode(' ',$node->attr[$key]) as $k) { + $check = $this->match($exp, $val, $k); + if ($check) break; + } + } + if (!$check) $pass = false; + } + if ($pass) $ret[$i] = 1; + unset($node); + } + } + + protected function match($exp, $pattern, $value) { + switch ($exp) { + case '=': + return ($value===$pattern); + case '!=': + return ($value!==$pattern); + case '^=': + return preg_match("/^".preg_quote($pattern,'/')."/", $value); + case '$=': + return preg_match("/".preg_quote($pattern,'/')."$/", $value); + case '*=': + if ($pattern[0]=='/') + return preg_match($pattern, $value); + return preg_match("/".$pattern."/i", $value); + } + return false; + } + + protected function parse_selector($selector_string) { + // pattern of CSS selectors, modified from mootools + $pattern = "/([\w-:\*]*)(?:\#([\w-]+)|\.([\w-]+))?(?:\[@?(!?[\w-]+)(?:([!*^$]?=)[\"']?(.*?)[\"']?)?\])?([\/, ]+)/is"; + preg_match_all($pattern, trim($selector_string).' ', $matches, PREG_SET_ORDER); + $selectors = array(); + $result = array(); + //print_r($matches); + + foreach ($matches as $m) { + $m[0] = trim($m[0]); + if ($m[0]==='' || $m[0]==='/' || $m[0]==='//') continue; + // for borwser grnreated xpath + if ($m[1]==='tbody') continue; + + list($tag, $key, $val, $exp, $no_key) = array($m[1], null, null, '=', false); + if(!empty($m[2])) {$key='id'; $val=$m[2];} + if(!empty($m[3])) {$key='class'; $val=$m[3];} + if(!empty($m[4])) {$key=$m[4];} + if(!empty($m[5])) {$exp=$m[5];} + if(!empty($m[6])) {$val=$m[6];} + + // convert to lowercase + if ($this->dom->lowercase) {$tag=strtolower($tag); $key=strtolower($key);} + //elements that do NOT have the specified attribute + if (isset($key[0]) && $key[0]==='!') {$key=substr($key, 1); $no_key=true;} + + $result[] = array($tag, $key, $val, $exp, $no_key); + if (trim($m[7])===',') { + $selectors[] = $result; + $result = array(); + } + } + if (count($result)>0) + $selectors[] = $result; + return $selectors; + } + + function __get($name) { + if (isset($this->attr[$name])) return $this->attr[$name]; + switch($name) { + case 'outertext': return $this->outertext(); + case 'innertext': return $this->innertext(); + case 'plaintext': return $this->text(); + case 'xmltext': return $this->xmltext(); + default: return array_key_exists($name, $this->attr); + } + } + + function __set($name, $value) { + switch($name) { + case 'outertext': return $this->_[HDOM_INFO_OUTER] = $value; + case 'innertext': + if (isset($this->_[HDOM_INFO_TEXT])) return $this->_[HDOM_INFO_TEXT] = $value; + return $this->_[HDOM_INFO_INNER] = $value; + } + if (!isset($this->attr[$name])) { + $this->_[HDOM_INFO_SPACE][] = array(' ', '', ''); + $this->_[HDOM_INFO_QUOTE][] = HDOM_QUOTE_DOUBLE; + } + $this->attr[$name] = $value; + } + + function __isset($name) { + switch($name) { + case 'outertext': return true; + case 'innertext': return true; + case 'plaintext': return true; + } + //no value attr: nowrap, checked selected... + return (array_key_exists($name, $this->attr)) ? true : isset($this->attr[$name]); + } + + function __unset($name) { + if (isset($this->attr[$name])) + unset($this->attr[$name]); + } + + // camel naming conventions + function getAllAttributes() {return $this->attr;} + function getAttribute($name) {return $this->__get($name);} + function setAttribute($name, $value) {$this->__set($name, $value);} + function hasAttribute($name) {return $this->__isset($name);} + function removeAttribute($name) {$this->__set($name, null);} + function getElementById($id) {return $this->find("#$id", 0);} + function getElementsById($id, $idx=null) {return $this->find("#$id", $idx);} + function getElementByTagName($name) {return $this->find($name, 0);} + function getElementsByTagName($name, $idx=null) {return $this->find($name, $idx);} + function parentNode() {return $this->parent();} + function childNodes($idx=-1) {return $this->children($idx);} + function firstChild() {return $this->first_child();} + function lastChild() {return $this->last_child();} + function nextSibling() {return $this->next_sibling();} + function previousSibling() {return $this->prev_sibling();} +} + +// simple html dom parser +// ----------------------------------------------------------------------------- +class simple_html_dom { + public $root = null; + public $nodes = array(); + public $callback = null; + public $lowercase = false; + protected $pos; + protected $doc; + protected $char; + protected $size; + protected $cursor; + protected $parent; + protected $noise = array(); + protected $token_blank = " \t\r\n"; + protected $token_equal = ' =/>'; + protected $token_slash = " />\r\n\t"; + protected $token_attr = ' >'; + // use isset instead of in_array, performance boost about 30%... + protected $self_closing_tags = array('img'=>1, 'br'=>1, 'input'=>1, 'meta'=>1, 'link'=>1, 'hr'=>1, 'base'=>1, 'embed'=>1, 'spacer'=>1); + protected $block_tags = array('root'=>1, 'body'=>1, 'form'=>1, 'div'=>1, 'span'=>1, 'table'=>1); + protected $optional_closing_tags = array( + 'tr'=>array('tr'=>1, 'td'=>1, 'th'=>1), + 'th'=>array('th'=>1), + 'td'=>array('td'=>1), + 'li'=>array('li'=>1), + 'dt'=>array('dt'=>1, 'dd'=>1), + 'dd'=>array('dd'=>1, 'dt'=>1), + 'dl'=>array('dd'=>1, 'dt'=>1), + 'p'=>array('p'=>1), + 'nobr'=>array('nobr'=>1), + ); + + function __construct($str=null) { + if ($str) { + if (preg_match("/^http:\/\//i",$str) || is_file($str)) + $this->load_file($str); + else + $this->load($str); + } + } + + function __destruct() { + $this->clear(); + } + + // load html from string + function load($str, $lowercase=true) { + // prepare + $this->prepare($str, $lowercase); + // strip out comments + $this->remove_noise("''is"); + // strip out cdata + $this->remove_noise("''is", true); + // strip out + +

                          Example of XHTML + CSS

                          + +

                          Example of paragraph with class selector. Lorem ipsum dolor sit amet, consectetur adipiscing elit. In sed imperdiet lectus. Phasellus quis velit velit, non condimentum quam. Sed neque urna, ultrices ac volutpat vel, laoreet vitae augue. Sed vel velit erat. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Cras eget velit nulla, eu sagittis elit. Nunc ac arcu est, in lobortis tellus. Praesent condimentum rhoncus sodales. In hac habitasse platea dictumst. Proin porta eros pharetra enim tincidunt dignissim nec vel dolor. Cras sapien elit, ornare ac dignissim eu, ultricies ac eros. Maecenas augue magna, ultrices a congue in, mollis eu nulla. Nunc venenatis massa at est eleifend faucibus. Vivamus sed risus lectus, nec interdum nunc.

                          + +

                          Example of paragraph with ID selector. Fusce et felis vitae diam lobortis sollicitudin. Aenean tincidunt accumsan nisi, id vehicula quam laoreet elementum. Phasellus egestas interdum erat, et viverra ipsum ultricies ac. Praesent sagittis augue at augue volutpat eleifend. Cras nec orci neque. Mauris bibendum posuere blandit. Donec feugiat mollis dui sit amet pellentesque. Sed a enim justo. Donec tincidunt, nisl eget elementum aliquam, odio ipsum ultrices quam, eu porttitor ligula urna at lorem. Donec varius, eros et convallis laoreet, ligula tellus consequat felis, ut ornare metus tellus sodales velit. Duis sed diam ante. Ut rutrum malesuada massa, vitae consectetur ipsum rhoncus sed. Suspendisse potenti. Pellentesque a congue massa.

                          + +
                          example of DIV with border and fill.
                          Lorem ipsum dolor sit amet, consectetur adipiscing elit. In sed imperdiet lectus.
                          + +
                          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                          No.XXXXXXXX XXXXXXXXXXXX
                          1.XXXX
                          XXXX
                          XXXX
                          XXXX
                          XXXX
                          XXXX
                          XXXX
                          XXXX
                          XXXX
                          XXXX
                          XXXX
                          XXXX
                          XXXXXXXX
                          XXXX
                          2.XXXX
                          XXXX
                          XXXX
                          XXXX
                          XXXX
                          XXXX
                          XXXX
                          XXXX
                          XXXX
                          XXXX
                          XXXX
                          XXXX
                          XXXX
                          XXXX
                          XXXX
                          XXXX
                          XXXX
                          XXXX
                          XXXX
                          XXXX
                          XXXX
                          XXXX
                          XXXX
                          XXXX
                          XXXX
                          XXXX
                          XXXX
                          XXXX
                          3.XXXX
                          XXXX
                          XXXX
                          XXXX
                          XXXX
                          XXXX
                          4.XXXX
                          XXXX
                          XXXX
                          XXXX
                          XXXX
                          XXXX
                          XXXX
                          XXXX
                          +EOF; + +// output the HTML content +$pdf->writeHTML($html, true, false, true, false, ''); + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +// ******************************************************************* +// HTML TIPS & TRICKS +// ******************************************************************* + +// REMOVE CELL PADDING +// +// $pdf->SetCellPadding(0); +// +// This is used to remove any additional vertical space inside a +// single cell of text. + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +// REMOVE TAG TOP AND BOTTOM MARGINS +// +// $tagvs = array('p' => array(0 => array('h' => 0, 'n' => 0), 1 => array('h' => 0, 'n' => 0))); +// $pdf->setHtmlVSpace($tagvs); +// +// Since the CSS margin command is not yet implemented on TCPDF, you +// need to set the spacing of block tags using the following method. + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +// SET LINE HEIGHT +// +// $pdf->setCellHeightRatio(1.25); +// +// You can use the following method to fine tune the line height +// (the number is a percentage relative to font height). + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +// CHANGE THE PIXEL CONVERSION RATIO +// +// $pdf->setImageScale(0.47); +// +// This is used to adjust the conversion ratio between pixels and +// document units. Increase the value to get smaller objects. +// Since you are using pixel unit, this method is important to set the +// right zoom factor. +// +// Suppose that you want to print a web page larger 1024 pixels to +// fill all the available page width. +// An A4 page is larger 210mm equivalent to 8.268 inches, if you +// subtract 13mm (0.512") of margins for each side, the remaining +// space is 184mm (7.244 inches). +// The default resolution for a PDF document is 300 DPI (dots per +// inch), so you have 7.244 * 300 = 2173.2 dots (this is the maximum +// number of points you can print at 300 DPI for the given width). +// The conversion ratio is approximatively 1024 / 2173.2 = 0.47 px/dots +// If the web page is larger 1280 pixels, on the same A4 page the +// conversion ratio to use is 1280 / 2173.2 = 0.59 pixels/dots + +// ******************************************************************* + +// reset pointer to the last page +$pdf->lastPage(); + +// --------------------------------------------------------- + +//Close and output PDF document +$pdf->Output('example_061.pdf', 'I'); + +//============================================================+ +// END OF FILE +//============================================================+ + --- /dev/null +++ b/tcpdf/examples/example_062.php @@ -1,1 +1,137 @@ +SetCreator(PDF_CREATOR); +$pdf->SetAuthor('Nicola Asuni'); +$pdf->SetTitle('TCPDF Example 062'); +$pdf->SetSubject('TCPDF Tutorial'); +$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + +// set default header data +$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 062', PDF_HEADER_STRING); + +// set header and footer fonts +$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); +$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +//set margins +$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); +$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); +$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + +//set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +//set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +//set some language-dependent strings +$pdf->setLanguageArray($l); + +// --------------------------------------------------------- + +// set font +$pdf->SetFont('helvetica', 'B', 20); + +// add a page +$pdf->AddPage(); + +$pdf->Write(0, 'XObject Templates', '', 0, 'C', 1, 0, false, false, 0); + +/* + * An XObject Template is a PDF block that is a self-contained + * description of any sequence of graphics objects (including path + * objects, text objects, and sampled images). + * An XObject Template may be painted multiple times, either on + * several pages or at several locations on the same page and produces + * the same results each time, subject only to the graphics state at + * the time it is invoked. + */ + +// start a new XObject Template +$template_id = $pdf->startTemplate(60, 60); + + +// create Template content +// ................................................................... +//Start Graphic Transformation +$pdf->StartTransform(); + +// set clipping mask +$pdf->StarPolygon(30, 30, 29, 10, 3, 0, 1, 'CNZ'); + +// draw jpeg image to be clipped +$pdf->Image('../images/image_demo.jpg', 0, 0, 60, 60, '', '', '', true, 72, '', false, false, 0, false, false, false); + +//Stop Graphic Transformation +$pdf->StopTransform(); + +$pdf->SetXY(0, 0); + +$pdf->SetFont('times', '', 40); + +$pdf->SetTextColor(255, 0, 0); + +// print a text +$pdf->Cell(60, 60, 'Template', 0, 0, 'C', false, '', 0, false, 'T', 'M'); +// ................................................................... + + +// end the current Template +$pdf->endTemplate(); + +// print the selected Template various times + +$pdf->printTemplate($template_id, 15, 50, 20, 20, '', '', false); + +$pdf->printTemplate($template_id, 27, 62, 40, 40, '', '', false); + +$pdf->printTemplate($template_id, 55, 85, 60, 60, '', '', false); + +$pdf->printTemplate($template_id, 95, 125, 80, 80, '', '', false); + +// --------------------------------------------------------- + +//Close and output PDF document +$pdf->Output('example_062.pdf', 'I'); + +//============================================================+ +// END OF FILE +//============================================================+ + --- /dev/null +++ b/tcpdf/examples/example_063.php @@ -1,1 +1,132 @@ +SetCreator(PDF_CREATOR); +$pdf->SetAuthor('Nicola Asuni'); +$pdf->SetTitle('TCPDF Example 063'); +$pdf->SetSubject('TCPDF Tutorial'); +$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + +// set default header data +$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 063', PDF_HEADER_STRING); + +// set header and footer fonts +$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); +$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +//set margins +$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); +$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); +$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + +//set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +//set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +//set some language-dependent strings +$pdf->setLanguageArray($l); + +// --------------------------------------------------------- + +// set font +$pdf->SetFont('helvetica', 'B', 16); + +// add a page +$pdf->AddPage(); + +$pdf->Write(0, 'Example of Text Stretching and Spacing (tracking/kerning)', '', 0, 'L', true, 0, false, false, 0); +$pdf->Ln(5); + +// create several cells to display all cases of stretching and kerning combinations. + +$fonts = array('times', 'dejavuserif'); +$alignments = array('L' => 'LEFT', 'C' => 'CENTER', 'R' => 'RIGHT', 'J' => 'JUSTIFY'); + + +// Test all cases using direct stretching/spacing methods +foreach ($fonts as $fkey => $font) { + $pdf->SetFont($font, '', 14); + foreach ($alignments as $align_mode => $align_name) { + for ($stretching = 90; $stretching <= 110; $stretching += 10) { + for ($spacing = -0.254; $spacing <= 0.254; $spacing += 0.254) { + $pdf->setFontStretching($stretching); + $pdf->setFontSpacing($spacing); + $txt = $align_name.' | Stretching = '.$stretching.'% | Spacing = '.sprintf('%+.3F', $spacing).'mm'; + $pdf->Cell(0, 0, $txt, 1, 1, $align_mode); + } + } + } + $pdf->AddPage(); +} + + +// Test all cases using CSS stretching/spacing properties +foreach ($fonts as $fkey => $font) { + $pdf->SetFont($font, '', 11); + foreach ($alignments as $align_mode => $align_name) { + for ($stretching = 90; $stretching <= 110; $stretching += 10) { + for ($spacing = -0.254; $spacing <= 0.254; $spacing += 0.254) { + $html = ''.$align_name.' | Stretching = '.$stretching.'% | Spacing = '.sprintf('%+.3F', $spacing).'mm
                          Lorem ipsum dolor sit amet, consectetur adipiscing elit. In sed imperdiet lectus. Phasellus quis velit velit, non condimentum quam. Sed neque urna, ultrices ac volutpat vel, laoreet vitae augue. Sed vel velit erat. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.
                          '; + $pdf->writeHTMLCell(0, 0, '', '', $html, 1, 1, false, true, $align_mode, false); + } + } + if (!(($fkey == 1) AND ($align_mode == 'J'))) { + $pdf->AddPage(); + } + } +} + + +// reset font stretching +$pdf->setFontStretching(100); + +// reset font spacing +$pdf->setFontSpacing(0); + +// --------------------------------------------------------- + +//Close and output PDF document +$pdf->Output('example_063.pdf', 'I'); + +//============================================================+ +// END OF FILE +//============================================================+ + --- /dev/null +++ b/tcpdf/examples/example_064.php @@ -1,1 +1,177 @@ +SetCreator(PDF_CREATOR); +$pdf->SetAuthor('Nicola Asuni'); +$pdf->SetTitle('TCPDF Example 064'); +$pdf->SetSubject('TCPDF Tutorial'); +$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + +// set default header data +$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 064', PDF_HEADER_STRING); + +// set header and footer fonts +$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); +$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +//set margins +$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); +$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); +$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + +//set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +//set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +//set some language-dependent strings +$pdf->setLanguageArray($l); + +// --------------------------------------------------------- + +// set font +$pdf->SetFont('helvetica', '', 8); + + +// define some html content for testing +$txt = '

                          TEST PAGE REGIONS: A no-write region is a portion of the page with a rectangular or trapezium shape that will not be covered when writing text or html code. A region is always aligned on the left or right side of the page ad is defined using a vertical segment. You can set multiple regions for the same page. You can combine several adjacent regions to aproximate curved shapes. Lorem ipsum dolor sit amet, consectetur adipiscing elit. In sed imperdiet lectus. Phasellus quis velit velit, non condimentum quam. Sed neque urna, ultrices ac volutpat vel, laoreet vitae augue. Sed vel velit erat. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Cras eget velit nulla, eu sagittis elit. Nunc ac arcu est, in lobortis tellus. Praesent condimentum rhoncus sodales. In hac habitasse platea dictumst. Proin porta eros pharetra enim tincidunt dignissim nec vel dolor. Cras sapien elit, ornare ac dignissim eu, ultricies ac eros. Maecenas augue magna, ultrices a congue in, mollis eu nulla. Nunc venenatis massa at est eleifend faucibus. Vivamus sed risus lectus, nec interdum nunc. +Fusce et felis vitae diam lobortis sollicitudin. Aenean tincidunt accumsan nisi, id vehicula quam laoreet elementum. Phasellus egestas interdum erat, et viverra ipsum ultricies ac. Praesent sagittis augue at augue volutpat eleifend. Cras nec orci neque. Mauris bibendum posuere blandit. Donec feugiat mollis dui sit amet pellentesque. Sed a enim justo. Donec tincidunt, nisl eget elementum aliquam, odio ipsum ultrices quam, eu porttitor ligula urna at lorem. Donec varius, eros et convallis laoreet, ligula tellus consequat felis, ut ornare metus tellus sodales velit. Duis sed diam ante. Ut rutrum malesuada massa, vitae consectetur ipsum rhoncus sed. Suspendisse potenti. Pellentesque a congue massa. +Integer non sem eget neque mattis accumsan. Maecenas eu nisl mauris, sit amet interdum ipsum. In pharetra erat vel lectus venenatis elementum. Nulla non elit ligula, sit amet mollis urna. Morbi ut gravida est. Mauris tincidunt sem et turpis molestie malesuada. Curabitur vel nulla risus, sed mollis erat. Suspendisse vehicula accumsan purus nec varius. Donec fermentum lorem id felis sodales dictum. Quisque et dolor ipsum. Nam luctus consectetur dui vitae fermentum. Curabitur sodales consequat augue, id ultricies augue tempor ac. Aliquam ac magna id ipsum vehicula bibendum. Sed elementum congue tristique. Phasellus vel lorem eu lectus porta sodales. Etiam neque tortor, sagittis id pharetra quis, laoreet vel arcu. +Cras quam mi, ornare laoreet laoreet vel, vehicula at lacus. Maecenas a lacus accumsan augue convallis sagittis sed quis odio. Morbi sit amet turpis diam, dictum convallis urna. Cras eget interdum augue. Cras eu nisi sit amet dolor faucibus porttitor. Suspendisse potenti. Nunc vitae dolor risus, at cursus libero. Suspendisse bibendum tellus non nibh hendrerit tristique. Mauris eget orci elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam porta libero non ante laoreet semper. Proin volutpat sodales mi, ac fermentum erat sagittis in. Vivamus at viverra felis. Ut pretium facilisis ante et pharetra. +Nulla facilisi. Cras varius quam eget libero aliquam vitae tincidunt leo rutrum. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Pellentesque a nisl massa, quis pretium urna. Proin vel porttitor tortor. Cras rhoncus congue velit in bibendum. Donec pharetra semper augue id lacinia. Quisque magna quam, hendrerit eu aliquam et, pellentesque ut tellus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Maecenas nulla quam, rutrum eu feugiat at, elementum eu libero. Maecenas ullamcorper leo et turpis rutrum ac laoreet eros faucibus. Phasellus condimentum lorem quis neque imperdiet quis molestie enim iaculis. Phasellus risus est, vestibulum ut convallis ultrices, dignissim nec erat. Etiam congue lobortis laoreet. Nulla ut neque sed velit dapibus semper. Quisque nec dolor id nibh eleifend iaculis. Vivamus vitae fermentum odio. Etiam malesuada quam in nulla aliquam sed convallis dui feugiat.

                          '; + + +// add a page +$pdf->AddPage(); + +// print some graphic content +$pdf->Image('../images/image_demo.jpg', 155, 30, 40, 40, 'JPG', '', '', true); +$pdf->Image('../images/image_demo.jpg', 15, 230, 40, 40, 'JPG', '', '', true); + +// define some graphic styles +$styleA = array('width' => 0.254, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(255, 0, 0)); +$styleB = array('width' => 0.254, 'cap' => 'butt', 'join' => 'miter', 'dash' => 3, 'color' => array(127, 127, 127)); +$pdf->SetFillColor(220, 255, 220); + +// write a trapezoid with some information about no-write page regions +$pdf->Polygon(array(15,90, 57,90, 67,140, 15,140), 'DF', array($styleB, $styleA, $styleB, $styleB)); +$pdf->SetXY(15, 90); +$pdf->Cell(42, 0, 'xt,yt', 0, 0, 'R', false, '', 0, false, 'T', 'T'); +$pdf->SetXY(15, 140); +$pdf->Cell(52, 0, 'xb,yb', 0, 0, 'R', false, '', 0, false, 'B', 'B'); +$pdf->SetXY(15, 115); +$pdf->Cell(40, 0, 'side', 0, 0, 'R', false, '', 0, false, 'B', 'B'); +$pdf->SetLineStyle(array('width' => 0.254, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0))); +$pdf->Arrow(60, 115, 35, 115, 2, 5, 15); + +// write a trapezoid with some information about no-write page regions +$pdf->Polygon(array(145,130, 195,130, 195,180, 155,180), 'DF', array($styleB, $styleB, $styleB, $styleA)); +$pdf->SetXY(145, 130); +$pdf->Cell(42, 0, 'xt,yt', 0, 0, 'L', false, '', 0, false, 'T', 'T'); +$pdf->SetXY(155, 180); +$pdf->Cell(52, 0, 'xb,yb', 0, 0, 'L', false, '', 0, false, 'B', 'B'); +$pdf->SetXY(160, 155); +$pdf->Cell(30, 0, 'side', 0, 0, 'L', false, '', 0, false, 'B', 'B'); +$pdf->SetLineStyle(array('width' => 0.254, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0))); +$pdf->Arrow(155, 155, 180, 155, 2, 5, 15); + +// reset x,y position +$pdf->SetXY(15, 30); + + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + +// define no-write page regions to avoid text overlapping images +/* + 'page' => page number or empy for current page + 'xt' => X top + 'yt' => Y top + 'yb' => Y bottom + 'side' => page side ('L' = left or 'R' = right) +*/ +$regions = array( +array('page' => '', 'xt' => 153, 'yt' => 30, 'xb' => 153, 'yb' => 70, 'side' => 'R'), +array('page' => '', 'xt' => 60, 'yt' => 90, 'xb' => 70, 'yb' => 140, 'side' => 'L'), +array('page' => '', 'xt' => 143, 'yt' => 130, 'xb' => 153, 'yb' => 180, 'side' => 'R'), +array('page' => '', 'xt' => 58, 'yt' => 230, 'xb' => 58, 'yb' => 270, 'side' => 'L') +); + +// set page regions, check also getPageRegions(), addPageRegion() and removePageRegion() +$pdf->setPageRegions($regions); + +// write html text +$pdf->writeHTML($txt, true, false, true, false, ''); + + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +// set a circular no-write region on the second page +$regions = array( +array('page' => 2, 'xt' => 195, 'yt' => 110, 'xb' => 179.693, 'yb' => 113.045, 'side' => 'R'), +array('page' => 2, 'xt' => 179.693, 'yt' => 113.045, 'xb' => 166.716, 'yb' => 121.716, 'side' => 'R'), +array('page' => 2, 'xt' => 166.716, 'yt' => 121.716, 'xb' => 158.045, 'yb' => 134.693, 'side' => 'R'), +array('page' => 2, 'xt' => 158.045, 'yt' => 134.693, 'xb' => 155, 'yb' => 150, 'side' => 'R'), +array('page' => 2, 'xt' => 155, 'yt' => 150, 'xb' => 158.045, 'yb' => 165.307, 'side' => 'R'), +array('page' => 2, 'xt' => 158.045, 'yt' => 165.307, 'xb' => 166.716, 'yb' => 178.284, 'side' => 'R'), +array('page' => 2, 'xt' => 166.716, 'yt' => 178.284, 'xb' => 179.693, 'yb' => 186.955, 'side' => 'R'), +array('page' => 2, 'xt' => 179.693, 'yt' => 186.955, 'xb' => 195, 'yb' => 190, 'side' => 'R') +); +$pdf->setPageRegions($regions); + +$pdf->Polygon(array(195,110, 179.693,113.045, 166.716,121.716, 158.045,134.693, 155,150, 158.045,165.307, 166.716,178.284, 179.693,186.955, 195,190), 'DF'); + +$pdf->Ln(15); + +// define some html content for testing +$txt = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. In sed imperdiet lectus. Phasellus quis velit velit, non condimentum quam. Sed neque urna, ultrices ac volutpat vel, laoreet vitae augue. Sed vel velit erat. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Cras eget velit nulla, eu sagittis elit. Nunc ac arcu est, in lobortis tellus. Praesent condimentum rhoncus sodales. In hac habitasse platea dictumst. Proin porta eros pharetra enim tincidunt dignissim nec vel dolor. Cras sapien elit, ornare ac dignissim eu, ultricies ac eros. Maecenas augue magna, ultrices a congue in, mollis eu nulla. Nunc venenatis massa at est eleifend faucibus. Vivamus sed risus lectus, nec interdum nunc. Fusce et felis vitae diam lobortis sollicitudin. Aenean tincidunt accumsan nisi, id vehicula quam laoreet elementum. Phasellus egestas interdum erat, et viverra ipsum ultricies ac. Praesent sagittis augue at augue volutpat eleifend. Cras nec orci neque. Mauris bibendum posuere blandit. Donec feugiat mollis dui sit amet pellentesque. Sed a enim justo. Donec tincidunt, nisl eget elementum aliquam, odio ipsum ultrices quam, eu porttitor ligula urna at lorem. Donec varius, eros et convallis laoreet, ligula tellus consequat felis, ut ornare metus tellus sodales velit. Duis sed diam ante. Ut rutrum malesuada massa, vitae consectetur ipsum rhoncus sed. Suspendisse potenti. Pellentesque a congue massa. Integer non sem eget neque mattis accumsan. Maecenas eu nisl mauris, sit amet interdum ipsum. In pharetra erat vel lectus venenatis elementum. Nulla non elit ligula, sit amet mollis urna. Morbi ut gravida est. Mauris tincidunt sem et turpis molestie malesuada. Curabitur vel nulla risus, sed mollis erat. Suspendisse vehicula accumsan purus nec varius. Donec fermentum lorem id felis sodales dictum. Quisque et dolor ipsum. Nam luctus consectetur dui vitae fermentum. Curabitur sodales consequat augue, id ultricies augue tempor ac. Aliquam ac magna id ipsum vehicula bibendum. Sed elementum congue tristique. Phasellus vel lorem eu lectus porta sodales. Etiam neque tortor, sagittis id pharetra quis, laoreet vel arcu. Cras quam mi, ornare laoreet laoreet vel, vehicula at lacus. Maecenas a lacus accumsan augue convallis sagittis sed quis odio. Morbi sit amet turpis diam, dictum convallis urna. Cras eget interdum augue. Cras eu nisi sit amet dolor faucibus porttitor. Suspendisse potenti. Nunc vitae dolor risus, at cursus libero. Suspendisse bibendum tellus non nibh hendrerit tristique. Mauris eget orci elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam porta libero non ante laoreet semper. Proin volutpat sodales mi, ac fermentum erat sagittis in. Vivamus at viverra felis. Ut pretium facilisis ante et pharetra. Nulla facilisi. Cras varius quam eget libero aliquam vitae tincidunt leo rutrum. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Pellentesque a nisl massa, quis pretium urna. Proin vel porttitor tortor. Cras rhoncus congue velit in bibendum. Donec pharetra semper augue id lacinia. Quisque magna quam, hendrerit eu aliquam et, pellentesque ut tellus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Maecenas nulla quam, rutrum eu feugiat at, elementum eu libero. Maecenas ullamcorper leo et turpis rutrum ac laoreet eros faucibus. Phasellus condimentum lorem quis neque imperdiet quis molestie enim iaculis. Phasellus risus est, vestibulum ut convallis ultrices, dignissim nec erat. Etiam congue lobortis laoreet. Nulla ut neque sed velit dapibus semper. Quisque nec dolor id nibh eleifend iaculis. Vivamus vitae fermentum odio. Etiam malesuada quam in nulla aliquam sed convallis dui feugiat.'."\n"; + +// write text +$pdf->MultiCell(0, 0, $txt, 0, 'J', false, 1, '', '', true, 0, false, true, 0, 'T', false); + +// --------------------------------------------------------- + +//Close and output PDF document +$pdf->Output('example_064.pdf', 'I'); + +//============================================================+ +// END OF FILE +//============================================================+ + --- /dev/null +++ b/tcpdf/examples/index.php @@ -1,1 +1,89 @@ +'; +?> + + + + +TCPDF Examples + + + + + + + + +

                          TCPDF Examples

                          + +
                            +
                          1. Simple PDF with default Header and Footer: [PDF]
                          2. +
                          3. Simple PDF without Header and Footer: [PDF]
                          4. +
                          5. Custom Header and Footer: [PDF]
                          6. +
                          7. Cell stretching: [PDF]
                          8. +
                          9. Multicell: [PDF]
                          10. +
                          11. WriteHTML and RTL support: [PDF]
                          12. +
                          13. Independent columns with WriteHTMLCell: [PDF]
                          14. +
                          15. External UTF-8 text file: [PDF]
                          16. +
                          17. Image: [PDF]
                          18. +
                          19. Multiple columns: [PDF]
                          20. +
                          21. Colored Tables: [PDF]
                          22. +
                          23. Graphic Functions: [PDF]
                          24. +
                          25. Graphic Transformations: [PDF]
                          26. +
                          27. Javascript and Forms: [PDF]
                          28. +
                          29. Bookmarks (Table of Content): [PDF]
                          30. +
                          31. Document Encryption: [PDF]
                          32. +
                          33. Independent columns with MultiCell: [PDF]
                          34. +
                          35. Persian and Arabic language on RTL document: [PDF]
                          36. +
                          37. Non unicode / Alternative config file: [PDF]
                          38. +
                          39. Multicell complex alignment: [PDF]
                          40. +
                          41. writeHTML alignment: [PDF]
                          42. +
                          43. CMYK colors: [PDF]
                          44. +
                          45. Page Groups: [PDF]
                          46. +
                          47. Object Visibility: [PDF]
                          48. +
                          49. Object Transparency: [PDF]
                          50. +
                          51. Text Rendering Modes and Text Clipping: [PDF]
                          52. +
                          53. Barcodes: [PDF]
                          54. +
                          55. Multiple page formats: [PDF]
                          56. +
                          57. Set PDF viewer display preferences: [PDF]
                          58. +
                          59. Colour gradients: [PDF]
                          60. +
                          61. Pie Chart Graphic: [PDF]
                          62. +
                          63. EPS/AI vectorial image: [PDF]
                          64. +
                          65. Mixed font types (TrueType Unicode, core, CID-0): [PDF]
                          66. +
                          67. Clipping masks: [PDF]
                          68. +
                          69. Line styles with cells and multicells: [PDF]
                          70. +
                          71. Text Annotations: [PDF]
                          72. +
                          73. Spot Colors: [PDF]
                          74. +
                          75. NON-embedded CID-0 CJK font: [PDF]
                          76. +
                          77. HTML Justification: [PDF]
                          78. +
                          79. Booklet (double-sided pages): [PDF]
                          80. +
                          81. File attachment: [PDF]
                          82. +
                          83. Image with Alpha Channel Transparency: [PDF]
                          84. +
                          85. Disk caching: [PDF]
                          86. +
                          87. Move, Copy and Delete page: [PDF]
                          88. +
                          89. Table Of Content with Bookmarks: [PDF]
                          90. +
                          91. Text hyphenation: [PDF]
                          92. +
                          93. Transactions and UNDO: [PDF]
                          94. +
                          95. Table header and rowspan: [PDF]
                          96. +
                          97. TCPDF methods in HTML: [PDF]
                          98. +
                          99. 2D Barcode (QR-Code AND PDF417): [PDF]
                          100. +
                          101. Full page background: [PDF]
                          102. +
                          103. Digital Signature Certification: [PDF]
                          104. +
                          105. Javascript functions: [PDF]
                          106. +
                          107. XHTML Form: [PDF]
                          108. +
                          109. Font Dump: [PDF]
                          110. +
                          111. Crop Marks and Registration Marks: [PDF]
                          112. +
                          113. Cell vertical alignments and borders: [PDF]
                          114. +
                          115. SVG Image: [PDF]
                          116. +
                          117. Table Of Content with HTML templates: [PDF]
                          118. +
                          119. Advanced page settings: [PDF]
                          120. +
                          121. XHTML + CSS: [PDF]
                          122. +
                          123. XObject Templates: [PDF]
                          124. +
                          125. Text stretching and spacing (tracking/kerning): [PDF]
                          126. +
                          127. No-write page regions: [PDF]
                          128. +
                          + + + + --- /dev/null +++ b/tcpdf/fonts/README.TXT @@ -1,1 +1,3 @@ - +This folder contains fonts descriptions for TCPDF. +All fonts names must be in lowercase. +Please read the documentation on subfolders for copyright, license and other information. --- /dev/null +++ b/tcpdf/fonts/almohanad.php @@ -1,1 +1,103 @@ +1093,'Descent'=>-509,'CapHeight'=>1093,'Flags'=>32,'FontBBox'=>'[-278 -507 1124 1093]','ItalicAngle'=>0,'StemV'=>70,'MissingWidth'=>600); +$up=-136; +$ut=64; +$dw=600; +$cw=array( + 0=>0,32=>139,33=>185,34=>308,35=>278,36=>278,37=>556,38=>463,39=>154,40=>185,41=>185,42=>278,43=>317,44=>139,45=>185,46=>139, + 47=>154,48=>278,49=>278,50=>278,51=>278,52=>278,53=>278,54=>278,55=>278,56=>278,57=>278,58=>185,59=>185,60=>317,61=>317,62=>317, + 63=>278,64=>517,65=>401,66=>371,67=>401,68=>402,69=>371,70=>339,71=>432,72=>430,73=>214,74=>278,75=>424,76=>369,77=>524,78=>401, + 79=>432,80=>339,81=>432,82=>396,83=>309,84=>371,85=>401,86=>401,87=>556,88=>401,89=>401,90=>371,91=>185,92=>154,93=>185,94=>323, + 95=>278,96=>185,97=>278,98=>309,99=>247,100=>309,101=>247,102=>185,103=>278,104=>309,105=>154,106=>185,107=>309,108=>154,109=>463,110=>309, + 111=>278,112=>309,113=>309,114=>247,115=>216,116=>185,117=>309,118=>278,119=>401,120=>278,121=>278,122=>247,123=>219,124=>122,125=>219,126=>289, + 8364=>278,1027=>339,8218=>185,1107=>254,8222=>278,8230=>556,8224=>278,8225=>278,710=>185,8240=>556,352=>309,8249=>185,338=>556,1036=>432,381=>371,1039=>432, + 8216=>185,8217=>185,8220=>278,8221=>278,8226=>194,8211=>278,8212=>556,732=>185,8482=>556,353=>216,8250=>185,339=>401,1116=>297,382=>247,376=>401,161=>185, + 162=>278,163=>278,164=>278,165=>278,166=>122,167=>278,168=>185,169=>415,170=>167,171=>278,172=>317,174=>415,175=>185,176=>222,177=>317,178=>167, + 179=>167,180=>185,181=>309,182=>300,183=>139,184=>185,185=>167,186=>183,187=>278,188=>417,189=>417,190=>417,191=>278,192=>401,193=>401,194=>401, + 195=>401,196=>401,197=>401,198=>556,199=>401,200=>371,201=>371,202=>371,203=>371,204=>216,205=>216,206=>216,207=>216,208=>401,209=>401,210=>432, + 211=>432,212=>432,213=>432,214=>432,215=>317,216=>432,217=>401,218=>401,219=>401,220=>401,221=>401,222=>339,223=>309,224=>278,225=>278,226=>278, + 227=>278,228=>278,229=>278,230=>401,231=>247,232=>247,233=>247,234=>247,235=>247,236=>154,237=>154,238=>154,239=>154,240=>278,241=>309,242=>278, + 243=>278,244=>278,245=>278,246=>278,247=>317,248=>278,249=>309,250=>309,251=>309,252=>309,253=>278,254=>309,255=>278,256=>401,257=>278,258=>401, + 259=>278,260=>401,261=>278,262=>401,263=>247,264=>401,265=>247,266=>401,267=>247,268=>401,269=>247,270=>401,271=>309,272=>401,273=>309,274=>371, + 275=>247,276=>371,277=>247,278=>371,279=>247,280=>371,281=>247,282=>371,283=>247,284=>432,285=>278,286=>432,287=>278,288=>432,289=>278,290=>432, + 291=>278,292=>432,293=>309,294=>432,295=>309,296=>216,297=>154,298=>216,299=>154,300=>216,301=>154,302=>216,303=>154,304=>216,305=>154,306=>490, + 307=>270,308=>278,309=>185,310=>432,311=>309,312=>297,313=>371,314=>154,315=>371,316=>154,317=>371,318=>154,319=>371,320=>293,321=>371,322=>154, + 323=>401,324=>309,325=>401,326=>309,327=>401,328=>309,329=>391,330=>401,331=>309,332=>432,333=>278,334=>432,335=>278,336=>432,337=>278,340=>401, + 341=>247,342=>401,343=>247,344=>401,345=>247,346=>309,347=>216,348=>309,349=>216,350=>309,351=>216,354=>371,355=>185,356=>371,357=>185,358=>371, + 359=>185,360=>401,361=>309,362=>401,363=>309,364=>401,365=>309,366=>401,367=>309,368=>401,369=>309,370=>401,371=>309,372=>556,373=>401,374=>401, + 375=>278,377=>371,378=>247,379=>371,380=>247,383=>185,450=>317,477=>247,484=>432,485=>278,536=>309,537=>216,538=>371,539=>185,658=>282,711=>185, + 728=>185,729=>185,730=>185,731=>185,733=>185,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0, + 779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,794=>0, + 795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0, + 811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0, + 827=>0,828=>0,829=>0,830=>0,831=>0,864=>0,865=>0,884=>111,885=>111,890=>0,894=>185,900=>100,901=>183,902=>401,903=>139,904=>451, + 905=>532,906=>316,908=>451,910=>501,911=>451,912=>183,913=>401,914=>371,915=>339,916=>422,917=>371,918=>371,919=>432,920=>432,921=>216,922=>432, + 923=>401,924=>524,925=>401,926=>361,927=>432,928=>451,929=>339,931=>361,932=>371,933=>401,934=>482,935=>401,936=>482,937=>451,938=>0,939=>401, + 940=>336,941=>244,942=>336,943=>183,944=>306,945=>336,946=>306,947=>306,948=>306,949=>244,950=>275,951=>336,952=>306,953=>183,954=>338,955=>275, + 956=>336,957=>275,958=>275,959=>306,960=>336,961=>306,962=>244,963=>306,964=>244,965=>306,966=>367,967=>275,968=>397,969=>397,970=>183,971=>306, + 972=>306,973=>306,974=>397,976=>306,977=>306,978=>401,979=>401,980=>401,981=>367,982=>336,986=>283,987=>237,988=>339,989=>261,1024=>371,1025=>371, + 1026=>371,1028=>401,1029=>309,1030=>216,1031=>216,1032=>278,1033=>573,1034=>573,1035=>449,1037=>432,1038=>401,1040=>401,1041=>371,1042=>371,1043=>328,1044=>432, + 1045=>371,1046=>615,1047=>313,1048=>429,1049=>429,1050=>424,1051=>432,1052=>524,1053=>432,1054=>432,1055=>430,1056=>339,1057=>401,1058=>371,1059=>401,1060=>444, + 1061=>401,1062=>429,1063=>432,1064=>618,1065=>618,1066=>482,1067=>539,1068=>350,1069=>401,1070=>619,1071=>408,1072=>278,1073=>278,1074=>279,1075=>246,1076=>309, + 1077=>247,1078=>417,1079=>227,1080=>319,1081=>319,1082=>297,1083=>302,1084=>376,1085=>309,1086=>278,1087=>309,1088=>309,1089=>247,1090=>274,1091=>278,1092=>458, + 1093=>278,1094=>309,1095=>309,1096=>454,1097=>454,1098=>340,1099=>423,1100=>284,1101=>247,1102=>439,1103=>284,1104=>247,1105=>247,1106=>309,1108=>247,1109=>216, + 1110=>154,1111=>154,1112=>185,1113=>440,1114=>437,1115=>309,1117=>309,1118=>278,1119=>309,1164=>339,1165=>284,1166=>339,1167=>309,1168=>339,1169=>254,1170=>339, + 1171=>254,1172=>339,1173=>254,1174=>615,1175=>417,1176=>322,1177=>216,1178=>432,1179=>297,1180=>432,1181=>297,1182=>432,1183=>297,1184=>537,1185=>352,1186=>432, + 1187=>309,1188=>563,1189=>408,1190=>432,1191=>461,1192=>401,1193=>247,1194=>401,1195=>247,1196=>371,1197=>274,1198=>401,1199=>278,1200=>401,1201=>278,1202=>401, + 1203=>278,1204=>581,1205=>432,1206=>432,1207=>309,1208=>432,1209=>309,1210=>432,1211=>309,1212=>367,1213=>247,1214=>367,1215=>247,1216=>216,1217=>615,1218=>417, + 1219=>432,1220=>297,1223=>432,1224=>309,1227=>432,1228=>309,1232=>401,1233=>278,1234=>401,1235=>278,1236=>556,1237=>401,1238=>371,1239=>247,1240=>367,1241=>247, + 1242=>367,1243=>247,1244=>615,1245=>417,1246=>313,1247=>227,1248=>322,1249=>216,1250=>432,1251=>309,1252=>432,1253=>309,1254=>432,1255=>278,1256=>432,1257=>278, + 1258=>432,1259=>278,1260=>401,1261=>247,1262=>401,1263=>278,1264=>401,1265=>278,1266=>401,1267=>278,1268=>432,1269=>309,1272=>548,1273=>423,1488=>280,1489=>280, + 1490=>174,1491=>280,1492=>280,1493=>158,1494=>158,1495=>280,1496=>280,1497=>158,1498=>287,1499=>280,1500=>280,1501=>280,1502=>280,1503=>156,1504=>158,1505=>280, + 1506=>280,1507=>292,1508=>280,1509=>273,1510=>280,1511=>305,1512=>285,1513=>299,1514=>280,1548=>195,1563=>246,1567=>340,1569=>392,1570=>306,1571=>247,1572=>447, + 1573=>247,1574=>602,1575=>192,1576=>635,1577=>369,1578=>635,1579=>635,1580=>548,1581=>1173,1582=>548,1583=>363,1584=>363,1585=>439,1586=>442,1587=>875,1588=>875, + 1589=>1061,1590=>1061,1591=>811,1592=>811,1593=>549,1594=>547,1600=>389,1601=>755,1602=>574,1603=>717,1604=>555,1605=>423,1606=>532,1607=>371,1608=>454,1609=>633, + 1610=>643,1611=>-19,1612=>-26,1613=>-20,1614=>-19,1615=>-18,1616=>-19,1617=>-19,1618=>-15,1632=>383,1633=>383,1634=>383,1635=>383,1636=>383,1637=>383,1638=>383, + 1639=>383,1640=>383,1641=>383,1642=>383,1645=>398,7936=>336,7937=>336,7938=>336,7939=>336,7940=>336,7941=>336,7942=>336,7943=>336,7944=>401,7945=>401,7946=>401, + 7947=>401,7948=>401,7949=>401,7950=>401,7951=>401,7952=>244,7953=>244,7954=>244,7955=>244,7956=>244,7957=>244,7960=>371,7961=>371,7962=>371,7963=>371,7964=>371, + 7965=>371,7968=>336,7969=>336,7970=>336,7971=>336,7972=>336,7973=>336,7974=>336,7975=>336,7976=>432,7977=>432,7978=>432,7979=>432,7980=>432,7981=>432,7982=>432, + 7983=>432,7984=>183,7985=>183,7986=>183,7987=>183,7988=>183,7989=>183,7990=>183,7991=>183,7992=>216,7993=>216,7994=>216,7995=>216,7996=>216,7997=>216,7998=>216, + 7999=>216,8000=>306,8001=>306,8002=>306,8003=>306,8004=>306,8005=>306,8008=>432,8009=>432,8010=>432,8011=>432,8012=>432,8013=>432,8016=>306,8017=>306,8018=>306, + 8019=>306,8020=>306,8021=>306,8022=>306,8023=>306,8025=>401,8027=>401,8029=>401,8031=>401,8032=>397,8033=>397,8034=>397,8035=>397,8036=>397,8037=>397,8038=>397, + 8039=>397,8040=>451,8041=>451,8042=>451,8043=>451,8044=>451,8045=>451,8046=>451,8047=>451,8048=>336,8049=>336,8050=>244,8051=>244,8052=>336,8053=>336,8054=>183, + 8055=>183,8056=>306,8057=>306,8058=>306,8059=>306,8060=>397,8061=>397,8064=>336,8065=>336,8066=>336,8067=>336,8068=>336,8069=>336,8070=>336,8071=>336,8072=>401, + 8073=>401,8074=>401,8075=>401,8076=>401,8077=>401,8078=>401,8079=>401,8080=>336,8081=>336,8082=>336,8083=>336,8084=>336,8085=>336,8086=>336,8087=>336,8088=>432, + 8089=>432,8090=>432,8091=>432,8092=>432,8093=>432,8094=>432,8095=>432,8096=>397,8097=>397,8098=>397,8099=>397,8100=>397,8101=>397,8102=>397,8103=>397,8104=>451, + 8105=>451,8106=>451,8107=>451,8108=>451,8109=>451,8110=>451,8111=>451,8112=>336,8113=>336,8114=>336,8115=>336,8116=>336,8118=>336,8119=>336,8120=>401,8121=>401, + 8122=>401,8123=>401,8124=>401,8125=>278,8126=>0,8127=>278,8128=>278,8129=>306,8130=>336,8131=>336,8132=>336,8134=>336,8135=>336,8136=>371,8137=>371,8138=>432, + 8139=>432,8140=>432,8141=>278,8142=>278,8143=>278,8144=>183,8145=>183,8146=>183,8147=>183,8150=>183,8151=>183,8152=>216,8153=>216,8154=>216,8155=>216,8157=>278, + 8158=>278,8159=>278,8160=>306,8161=>306,8162=>306,8163=>306,8164=>306,8165=>306,8166=>306,8167=>306,8168=>401,8169=>401,8170=>401,8171=>401,8172=>339,8173=>306, + 8174=>306,8175=>278,8178=>397,8179=>397,8180=>397,8182=>397,8183=>397,8184=>432,8185=>432,8186=>451,8187=>451,8188=>451,8189=>278,8190=>278,8208=>185,8209=>185, + 8219=>185,8223=>278,8227=>311,8241=>1011,8248=>261,8251=>404,8253=>386,8255=>529,8256=>529,8257=>188,8258=>517,8259=>185,8260=>93,8261=>184,8262=>184,8267=>300, + 8308=>167,8309=>556,8321=>167,8322=>167,8323=>167,8324=>167,8352=>394,8353=>401,8354=>435,8355=>339,8356=>278,8357=>463,8358=>401,8359=>389,8361=>556,8470=>530, + 8471=>415,8479=>401,8483=>401,8486=>451,8487=>451,8494=>306,8498=>339,8543=>417,8706=>274,8710=>340,8721=>396,8722=>317,8730=>305,8734=>418,8800=>317,8804=>317, + 8805=>317,9674=>274,12353=>556,12354=>556,12355=>556,12356=>556,12357=>556,12358=>556,12359=>556,12360=>556,12361=>556,12362=>556,12363=>556,12364=>556,12365=>556,12366=>556, + 12367=>556,12368=>556,12369=>556,12370=>556,12371=>556,12372=>556,12373=>556,12374=>556,12375=>556,12376=>556,12377=>556,12378=>556,12379=>556,12380=>556,12381=>556,12382=>556, + 12383=>556,12384=>556,12385=>556,12386=>556,12387=>556,12388=>556,12389=>556,12390=>556,12391=>556,12392=>556,12393=>556,12394=>556,12395=>556,12396=>556,12397=>556,12398=>556, + 12399=>556,12400=>556,12401=>556,12402=>556,12403=>556,12404=>556,12405=>556,12406=>556,12407=>556,12408=>556,12409=>556,12410=>556,12411=>556,12412=>556,12413=>556,12414=>556, + 12415=>556,12416=>556,12417=>556,12418=>556,12419=>556,12420=>556,12421=>556,12422=>556,12423=>556,12424=>556,12425=>556,12426=>556,12427=>556,12428=>556,12429=>556,12430=>556, + 12431=>556,12432=>556,12433=>556,12434=>556,12435=>556,12449=>556,12450=>556,12451=>556,12452=>556,12453=>556,12454=>556,12455=>556,12456=>556,12457=>556,12458=>556,12459=>556, + 12460=>556,12461=>556,12462=>556,12463=>556,12464=>556,12465=>556,12466=>556,12467=>556,12468=>556,12469=>556,12470=>556,12471=>556,12472=>556,12473=>556,12474=>556,12475=>556, + 12476=>556,12477=>556,12478=>556,12479=>556,12480=>556,12481=>556,12482=>556,12483=>556,12484=>556,12485=>556,12486=>556,12487=>556,12488=>556,12489=>556,12490=>556,12491=>556, + 12492=>556,12493=>556,12494=>556,12495=>556,12496=>556,12497=>556,12498=>556,12499=>556,12500=>556,12501=>556,12502=>556,12503=>556,12504=>556,12505=>556,12506=>556,12507=>556, + 12508=>556,12509=>556,12510=>556,12511=>556,12512=>556,12513=>556,12514=>556,12515=>556,12516=>556,12517=>556,12518=>556,12519=>556,12520=>556,12521=>556,12522=>556,12523=>556, + 12524=>556,12525=>556,12526=>556,12527=>556,12528=>556,12529=>556,12530=>556,12531=>556,12532=>556,12533=>556,12534=>556,63033=>278,63034=>278,63035=>278,63036=>278,63037=>278, + 63038=>278,63039=>278,63040=>278,63041=>278,63171=>185,63196=>278,64256=>309,64257=>309,64258=>309,64259=>463,64260=>463,64262=>402,64606=>0,64607=>0,64608=>0,64609=>0, + 64610=>0,64830=>467,64831=>467,65010=>814,65152=>392,65153=>306,65154=>281,65155=>247,65156=>250,65157=>447,65158=>412,65159=>247,65160=>222,65161=>602,65162=>535,65163=>360, + 65164=>329,65165=>192,65166=>220,65167=>635,65168=>644,65169=>338,65170=>321,65171=>369,65172=>419,65173=>635,65174=>644,65175=>345,65176=>336,65177=>635,65178=>644,65179=>393, + 65180=>345,65181=>548,65182=>553,65183=>637,65184=>652,65185=>548,65186=>546,65187=>637,65188=>656,65189=>548,65190=>544,65191=>637,65192=>656,65193=>363,65194=>439,65195=>363, + 65196=>439,65197=>440,65198=>471,65199=>439,65200=>474,65201=>875,65202=>871,65203=>608,65204=>588,65205=>875,65206=>871,65207=>609,65208=>587,65209=>1061,65210=>1033,65211=>794, + 65212=>758,65213=>1061,65214=>1033,65215=>794,65216=>761,65217=>811,65218=>793,65219=>659,65220=>647,65221=>811,65222=>793,65223=>659,65224=>642,65225=>549,65226=>481,65227=>512, + 65228=>409,65229=>547,65230=>476,65231=>512,65232=>409,65233=>755,65234=>748,65235=>416,65236=>442,65237=>574,65238=>550,65239=>416,65240=>442,65241=>717,65242=>687,65243=>883, + 65244=>409,65245=>555,65246=>511,65247=>338,65248=>297,65249=>423,65250=>478,65251=>489,65252=>476,65253=>532,65254=>548,65255=>336,65256=>326,65257=>371,65258=>391,65259=>524, + 65260=>412,65261=>454,65262=>412,65263=>633,65264=>566,65265=>643,65266=>560,65267=>357,65268=>333,65269=>623,65270=>617,65271=>603,65272=>621,65273=>576,65274=>617,65275=>576, + 65276=>625); +$enc=''; +$diff=''; +$file='almohanad.z'; +$ctg='almohanad.ctg.z'; +$originalsize=227760; +// --- EOF --- --- /dev/null +++ b/tcpdf/fonts/arialunicid0.php @@ -1,1 +1,1770 @@ +1069,'Descent'=>-271,'CapHeight'=>1069,'Flags'=>32,'FontBBox'=>'[-1011 -330 2260 1078]','ItalicAngle'=>0,'StemV'=>70,'MissingWidth'=>600); +$up=-100; +$ut=50; +$dw=1000; +$cw=array( + 32=>278,33=>278,34=>355,35=>556,36=>556,37=>889,38=>667,39=>191,40=>333,41=>333,42=>389,43=>584,44=>278,45=>333,46=>278,47=>278, + 48=>556,49=>556,50=>556,51=>556,52=>556,53=>556,54=>556,55=>556,56=>556,57=>556,58=>278,59=>278,60=>584,61=>584,62=>584,63=>556, + 64=>1015,65=>667,66=>667,67=>722,68=>722,69=>667,70=>611,71=>778,72=>722,73=>278,74=>500,75=>667,76=>556,77=>833,78=>722,79=>778, + 80=>667,81=>778,82=>722,83=>667,84=>611,85=>722,86=>667,87=>944,88=>667,89=>667,90=>611,91=>278,92=>278,93=>278,94=>469,95=>500, + 96=>333,97=>556,98=>556,99=>500,100=>556,101=>556,102=>278,103=>556,104=>556,105=>222,106=>222,107=>500,108=>222,109=>833,110=>556,111=>556, + 112=>556,113=>556,114=>333,115=>500,116=>278,117=>556,118=>500,119=>722,120=>500,121=>500,122=>500,123=>334,124=>260,125=>334,126=>584,8364=>556, + 1027=>567,8218=>222,402=>278,8222=>333,8230=>1000,8224=>556,8225=>556,710=>333,8240=>1000,352=>667,8249=>333,338=>1000,1036=>584,381=>611,1039=>723,8216=>222, + 8217=>222,8220=>333,8221=>333,8226=>350,8211=>500,8212=>1000,732=>333,8482=>1000,353=>500,8250=>333,339=>944,1116=>437,382=>500,376=>667,160=>278,161=>333, + 162=>556,163=>556,164=>556,165=>556,166=>260,167=>556,168=>333,169=>737,170=>370,171=>556,172=>584,173=>333,174=>737,175=>500,176=>400,177=>584, + 178=>333,179=>333,180=>333,181=>556,182=>537,183=>278,184=>333,185=>333,186=>365,187=>556,188=>834,189=>834,190=>834,191=>611,192=>667,193=>667, + 194=>667,195=>667,196=>667,197=>667,198=>1000,199=>722,200=>667,201=>667,202=>667,203=>667,204=>278,205=>278,206=>278,207=>278,208=>722,209=>722, + 210=>778,211=>778,212=>778,213=>778,214=>778,215=>584,216=>778,217=>722,218=>722,219=>722,220=>722,221=>667,222=>667,223=>611,224=>556,225=>556, + 226=>556,227=>556,228=>556,229=>556,230=>889,231=>500,232=>556,233=>556,234=>556,235=>556,236=>278,237=>278,238=>278,239=>278,240=>556,241=>556, + 242=>556,243=>556,244=>556,245=>556,246=>556,247=>584,248=>611,249=>556,250=>556,251=>556,252=>556,253=>500,254=>556,255=>500,256=>667,257=>556, + 258=>667,259=>556,260=>667,261=>556,262=>722,263=>500,264=>722,265=>500,266=>722,267=>500,268=>722,269=>500,270=>722,271=>627,272=>722,273=>556, + 274=>667,275=>556,276=>667,277=>556,278=>667,279=>556,280=>667,281=>556,282=>667,283=>556,284=>778,285=>556,286=>778,287=>556,288=>778,289=>556, + 290=>778,291=>556,292=>722,293=>556,294=>722,295=>556,296=>278,297=>222,298=>278,299=>222,300=>278,301=>222,302=>278,303=>222,304=>278,305=>278, + 306=>751,307=>444,308=>500,309=>222,310=>667,311=>500,312=>437,313=>556,314=>222,315=>556,316=>222,317=>556,318=>222,319=>556,320=>318,321=>556, + 322=>222,323=>722,324=>556,325=>722,326=>556,327=>722,328=>556,329=>626,330=>723,331=>556,332=>778,333=>556,334=>778,335=>556,336=>778,337=>556, + 340=>722,341=>333,342=>722,343=>333,344=>722,345=>333,346=>667,347=>500,348=>667,349=>500,350=>667,351=>500,354=>611,355=>278,356=>611,357=>406, + 358=>611,359=>278,360=>722,361=>556,362=>722,363=>556,364=>722,365=>556,366=>722,367=>556,368=>722,369=>556,370=>722,371=>556,372=>944,373=>722, + 374=>667,375=>500,377=>611,378=>500,379=>611,380=>500,383=>222,384=>556,385=>740,386=>655,387=>556,388=>556,389=>556,390=>722,391=>766,392=>579, + 393=>722,394=>789,395=>655,396=>556,397=>557,398=>667,399=>729,400=>604,401=>611,403=>791,404=>649,405=>806,406=>245,407=>322,408=>667,409=>500, + 410=>322,411=>500,412=>833,413=>722,414=>556,415=>778,416=>776,417=>556,418=>1019,419=>782,420=>735,421=>556,422=>722,423=>667,424=>500,425=>602, + 426=>366,427=>278,428=>571,429=>278,430=>611,431=>776,432=>620,433=>748,434=>667,435=>752,436=>615,437=>611,438=>500,439=>628,440=>628,441=>526, + 442=>480,443=>556,444=>556,445=>526,446=>556,447=>556,448=>278,449=>464,450=>474,451=>278,452=>1333,453=>1222,454=>1056,455=>1030,456=>778,457=>444, + 458=>1222,459=>944,460=>778,461=>667,462=>556,463=>278,464=>278,465=>778,466=>556,467=>722,468=>556,469=>722,470=>556,471=>722,472=>556,473=>722, + 474=>556,475=>722,476=>556,477=>556,478=>667,479=>556,480=>667,481=>556,482=>1000,483=>889,484=>778,485=>556,486=>778,487=>556,488=>667,489=>500, + 490=>778,491=>556,492=>778,493=>556,494=>534,495=>534,496=>222,497=>1333,498=>1222,499=>1056,500=>778,501=>556,506=>667,507=>556,508=>1000,509=>889, + 510=>778,511=>611,512=>667,513=>556,514=>667,515=>556,516=>667,517=>556,518=>667,519=>556,520=>278,521=>278,522=>278,523=>278,524=>778,525=>556, + 526=>778,527=>556,528=>722,529=>333,530=>722,531=>333,532=>722,533=>556,534=>722,535=>556,592=>556,593=>556,594=>556,595=>556,596=>500,597=>500, + 598=>556,599=>556,600=>556,601=>556,602=>777,603=>485,604=>485,605=>686,606=>519,607=>260,608=>556,609=>556,610=>557,611=>500,612=>500,613=>556, + 614=>556,615=>556,616=>242,617=>282,618=>356,619=>356,620=>425,621=>222,622=>635,623=>833,624=>833,625=>833,626=>556,627=>556,628=>558,629=>556, + 630=>715,631=>674,632=>558,633=>333,634=>333,635=>333,636=>333,637=>333,638=>312,639=>312,640=>530,641=>530,642=>500,643=>216,644=>276,645=>216, + 646=>222,647=>278,648=>278,649=>596,650=>558,651=>556,652=>500,653=>722,654=>500,655=>500,656=>500,657=>564,658=>530,659=>530,660=>464,661=>464, + 662=>464,663=>500,664=>614,665=>526,666=>519,667=>557,668=>558,669=>222,670=>500,671=>416,672=>556,673=>464,674=>464,675=>966,676=>966,677=>1030, + 678=>689,679=>484,680=>718,688=>326,689=>326,690=>153,691=>201,692=>201,693=>201,694=>304,695=>389,696=>278,697=>222,698=>372,699=>222,700=>222, + 701=>222,702=>222,703=>222,704=>250,705=>250,706=>320,707=>320,708=>320,709=>320,711=>333,712=>192,713=>333,714=>333,715=>333,716=>192,717=>333, + 718=>333,719=>333,720=>300,721=>300,722=>222,723=>222,724=>340,725=>340,726=>280,727=>362,728=>333,729=>333,730=>333,731=>333,733=>333,734=>333, + 736=>278,737=>153,738=>270,739=>274,740=>325,741=>360,742=>360,743=>360,744=>360,745=>360,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0, + 774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0, + 790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0, + 806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0, + 822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,832=>0,833=>0,834=>0,835=>0,836=>0,837=>0, + 864=>0,865=>0,884=>308,885=>308,890=>278,894=>278,900=>278,901=>278,902=>667,903=>278,904=>704,905=>759,906=>315,908=>778,910=>746,911=>758, + 912=>222,913=>667,914=>667,915=>550,916=>682,917=>667,918=>611,919=>722,920=>778,921=>278,922=>667,923=>667,924=>833,925=>722,926=>650,927=>778, + 928=>722,929=>667,931=>602,932=>611,933=>667,934=>808,935=>667,936=>804,937=>758,938=>278,939=>667,940=>576,941=>434,942=>556,943=>222,944=>551, + 945=>576,946=>563,947=>500,948=>557,949=>434,950=>440,951=>556,952=>556,953=>222,954=>498,955=>500,956=>553,957=>500,958=>432,959=>556,960=>678, + 961=>571,962=>472,963=>619,964=>382,965=>551,966=>649,967=>522,968=>729,969=>766,970=>222,971=>551,972=>556,973=>551,974=>766,976=>563,977=>616, + 978=>631,979=>726,980=>631,981=>644,982=>781,986=>722,988=>578,990=>570,992=>692,994=>880,995=>833,996=>684,997=>558,998=>680,999=>529,1000=>557, + 1001=>505,1002=>623,1003=>603,1004=>610,1005=>611,1006=>568,1007=>434,1008=>600,1009=>571,1010=>500,1011=>222,1025=>667,1026=>865,1028=>717,1029=>667,1030=>278, + 1031=>278,1032=>500,1033=>1105,1034=>1009,1035=>867,1038=>635,1040=>667,1041=>655,1042=>667,1043=>567,1044=>677,1045=>667,1046=>923,1047=>604,1048=>722,1049=>722, + 1050=>584,1051=>705,1052=>833,1053=>722,1054=>778,1055=>723,1056=>667,1057=>722,1058=>611,1059=>635,1060=>760,1061=>667,1062=>740,1063=>684,1064=>920,1065=>939, + 1066=>793,1067=>883,1068=>655,1069=>717,1070=>1006,1071=>722,1072=>556,1073=>573,1074=>531,1075=>383,1076=>583,1077=>556,1078=>669,1079=>458,1080=>559,1081=>559, + 1082=>437,1083=>571,1084=>683,1085=>552,1086=>556,1087=>542,1088=>556,1089=>500,1090=>458,1091=>500,1092=>823,1093=>500,1094=>562,1095=>533,1096=>802,1097=>823, + 1098=>620,1099=>717,1100=>523,1101=>510,1102=>744,1103=>542,1105=>556,1106=>556,1107=>383,1108=>510,1109=>500,1110=>222,1111=>278,1112=>222,1113=>873,1114=>811, + 1115=>556,1118=>500,1119=>542,1120=>976,1121=>766,1122=>656,1123=>521,1124=>950,1125=>694,1126=>667,1127=>597,1128=>952,1129=>817,1130=>654,1131=>600,1132=>932, + 1133=>817,1134=>604,1135=>458,1136=>804,1137=>729,1138=>778,1139=>556,1140=>667,1141=>500,1142=>667,1143=>500,1144=>1279,1145=>1060,1146=>778,1147=>556,1148=>976, + 1149=>766,1150=>976,1151=>766,1152=>722,1153=>514,1154=>686,1155=>334,1156=>382,1157=>334,1158=>334,1168=>435,1169=>339,1170=>567,1171=>383,1172=>656,1173=>556, + 1174=>923,1175=>669,1176=>604,1177=>458,1178=>584,1179=>437,1180=>584,1181=>437,1182=>584,1183=>437,1184=>764,1185=>537,1186=>741,1187=>573,1188=>900,1189=>670, + 1190=>736,1191=>560,1192=>778,1193=>560,1194=>722,1195=>500,1196=>611,1197=>458,1198=>667,1199=>500,1200=>667,1201=>500,1202=>667,1203=>500,1204=>916,1205=>661, + 1206=>684,1207=>533,1208=>684,1209=>533,1210=>684,1211=>556,1212=>829,1213=>667,1214=>829,1215=>667,1216=>278,1217=>923,1218=>669,1219=>584,1220=>437,1223=>735, + 1224=>570,1227=>684,1228=>533,1232=>667,1233=>556,1234=>667,1235=>556,1236=>1000,1237=>889,1238=>667,1239=>556,1240=>729,1241=>556,1242=>729,1243=>556,1244=>923, + 1245=>669,1246=>604,1247=>458,1248=>604,1249=>492,1250=>722,1251=>559,1252=>722,1253=>559,1254=>778,1255=>556,1256=>778,1257=>556,1258=>778,1259=>556,1262=>635, + 1263=>500,1264=>635,1265=>500,1266=>635,1267=>500,1268=>684,1269=>533,1272=>883,1273=>717,1329=>635,1330=>531,1331=>583,1332=>583,1333=>531,1334=>531,1335=>427, + 1336=>531,1337=>750,1338=>635,1339=>531,1340=>375,1341=>583,1342=>698,1343=>531,1344=>427,1345=>531,1346=>583,1347=>531,1348=>635,1349=>698,1350=>635,1351=>635, + 1352=>531,1353=>531,1354=>698,1355=>531,1356=>635,1357=>531,1358=>698,1359=>583,1360=>479,1361=>583,1362=>531,1363=>698,1364=>698,1365=>635,1366=>750,1369=>271, + 1370=>271,1371=>150,1372=>300,1373=>271,1374=>271,1375=>420,1377=>583,1378=>427,1379=>427,1380=>427,1381=>427,1382=>427,1383=>427,1384=>427,1385=>459,1386=>427, + 1387=>427,1388=>323,1389=>531,1390=>427,1391=>427,1392=>427,1393=>427,1394=>427,1395=>427,1396=>427,1397=>271,1398=>427,1399=>375,1400=>427,1401=>375,1402=>583, + 1403=>427,1404=>427,1405=>427,1406=>427,1407=>583,1408=>427,1409=>427,1410=>323,1411=>583,1412=>375,1413=>375,1414=>583,1415=>527,1417=>271,1425=>360,1426=>360, + 1427=>360,1428=>360,1429=>360,1430=>360,1431=>360,1432=>360,1433=>360,1434=>360,1435=>360,1436=>360,1437=>360,1438=>360,1439=>360,1440=>360,1441=>360,1443=>360, + 1444=>360,1445=>360,1446=>360,1447=>360,1448=>360,1449=>360,1450=>360,1451=>360,1452=>360,1453=>360,1454=>360,1455=>360,1456=>360,1457=>360,1458=>360,1459=>360, + 1460=>360,1461=>360,1462=>360,1463=>360,1464=>360,1465=>360,1467=>360,1468=>360,1469=>360,1470=>366,1471=>360,1472=>225,1473=>360,1474=>360,1475=>238,1476=>360, + 1488=>577,1489=>563,1490=>411,1491=>512,1492=>594,1493=>316,1494=>326,1495=>594,1496=>594,1497=>316,1498=>507,1499=>527,1500=>484,1501=>594,1502=>594,1503=>316, + 1504=>338,1505=>604,1506=>550,1507=>567,1508=>569,1509=>505,1510=>514,1511=>583,1512=>507,1513=>700,1514=>633,1520=>590,1521=>590,1522=>590,1523=>216,1524=>412, + 1548=>278,1563=>278,1567=>556,1569=>529,1570=>243,1571=>243,1572=>470,1573=>243,1574=>731,1575=>243,1576=>771,1577=>514,1578=>771,1579=>771,1580=>544,1581=>544, + 1582=>544,1583=>430,1584=>430,1585=>421,1586=>421,1587=>1194,1588=>1194,1589=>1291,1590=>1291,1591=>843,1592=>843,1593=>594,1594=>594,1600=>279,1601=>957,1602=>800, + 1603=>757,1604=>662,1605=>589,1606=>692,1607=>514,1608=>470,1609=>731,1610=>731,1611=>0,1612=>0,1613=>0,1614=>0,1615=>0,1616=>0,1617=>0,1618=>0, + 1632=>480,1633=>480,1634=>480,1635=>480,1636=>480,1637=>480,1638=>480,1639=>480,1640=>480,1641=>480,1642=>547,1643=>278,1644=>278,1645=>438,1648=>0,1649=>243, + 1650=>243,1651=>243,1652=>0,1653=>380,1654=>470,1655=>548,1656=>772,1657=>771,1658=>771,1659=>771,1660=>771,1661=>771,1662=>771,1663=>771,1664=>771,1665=>544, + 1666=>544,1667=>544,1668=>544,1669=>544,1670=>544,1671=>544,1672=>430,1673=>430,1674=>430,1675=>430,1676=>430,1677=>430,1678=>430,1679=>430,1680=>430,1681=>421, + 1682=>421,1683=>421,1684=>421,1685=>421,1686=>419,1687=>421,1688=>421,1689=>421,1690=>1194,1691=>1194,1692=>1194,1693=>1291,1694=>1291,1695=>843,1696=>594,1697=>957, + 1698=>957,1699=>957,1700=>957,1701=>957,1702=>957,1703=>800,1704=>800,1705=>828,1706=>1058,1707=>828,1708=>757,1709=>757,1710=>757,1711=>828,1712=>828,1713=>828, + 1714=>828,1715=>828,1716=>828,1717=>662,1718=>662,1719=>662,1722=>692,1723=>692,1724=>692,1725=>692,1726=>706,1728=>514,1729=>509,1730=>509,1731=>509,1732=>470, + 1733=>470,1734=>470,1735=>470,1736=>470,1737=>470,1738=>470,1739=>470,1740=>731,1741=>841,1742=>731,1744=>731,1745=>731,1746=>550,1747=>550,1748=>279,1749=>514, + 1750=>726,1751=>558,1752=>321,1753=>318,1754=>342,1755=>373,1756=>716,1757=>688,1758=>852,1759=>288,1760=>288,1761=>388,1762=>350,1763=>716,1764=>146,1765=>282, + 1766=>339,1767=>339,1768=>415,1769=>514,1770=>220,1771=>220,1772=>220,1773=>350,1776=>480,1777=>480,1778=>480,1779=>480,1780=>480,1781=>480,1782=>480,1783=>480, + 1784=>480,1785=>480,2305=>0,2306=>0,2307=>294,2309=>693,2310=>910,2311=>533,2312=>533,2313=>590,2314=>713,2315=>920,2316=>677,2317=>611,2318=>611,2319=>611, + 2320=>611,2321=>910,2322=>910,2323=>910,2324=>910,2325=>667,2326=>732,2327=>593,2328=>639,2329=>624,2330=>688,2331=>713,2332=>688,2333=>712,2334=>697,2335=>502, + 2336=>533,2337=>583,2338=>523,2339=>693,2340=>585,2341=>638,2342=>533,2343=>640,2344=>585,2345=>585,2346=>565,2347=>699,2348=>592,2349=>689,2350=>633,2351=>600, + 2352=>486,2353=>486,2354=>680,2355=>730,2356=>730,2357=>592,2358=>684,2359=>608,2360=>646,2361=>546,2364=>0,2365=>373,2366=>319,2367=>319,2368=>319,2369=>0, + 2370=>0,2371=>0,2372=>0,2373=>0,2374=>0,2375=>0,2376=>0,2377=>319,2378=>319,2379=>319,2380=>319,2381=>0,2384=>884,2385=>0,2386=>0,2387=>0, + 2388=>0,2392=>667,2393=>732,2394=>593,2395=>688,2396=>583,2397=>523,2398=>699,2399=>600,2400=>920,2401=>677,2402=>0,2403=>0,2404=>331,2405=>513,2406=>639, + 2407=>639,2408=>639,2409=>639,2410=>639,2411=>639,2412=>639,2413=>639,2414=>639,2415=>639,2416=>362,2433=>0,2434=>430,2435=>430,2437=>786,2438=>1030,2439=>582, + 2440=>603,2441=>648,2442=>757,2443=>758,2444=>630,2447=>685,2448=>746,2451=>711,2452=>776,2453=>779,2454=>655,2455=>606,2456=>645,2457=>661,2458=>554,2459=>585, + 2460=>729,2461=>752,2462=>893,2463=>567,2464=>625,2465=>648,2466=>567,2467=>598,2468=>680,2469=>645,2470=>609,2471=>596,2472=>595,2474=>635,2475=>780,2476=>593, + 2477=>677,2478=>621,2479=>601,2480=>593,2482=>640,2486=>598,2487=>596,2488=>637,2489=>582,2492=>0,2494=>245,2495=>245,2496=>245,2497=>0,2498=>0,2499=>0, + 2500=>0,2503=>309,2504=>309,2507=>932,2508=>932,2509=>0,2519=>245,2524=>648,2525=>553,2527=>596,2528=>758,2529=>630,2530=>0,2531=>335,2534=>610,2535=>559, + 2536=>595,2537=>711,2538=>610,2539=>661,2540=>661,2541=>559,2542=>661,2543=>600,2544=>593,2545=>593,2546=>601,2547=>567,2548=>601,2549=>699,2550=>661,2551=>267, + 2552=>610,2553=>424,2554=>548,2562=>0,2565=>691,2566=>936,2567=>803,2568=>803,2569=>678,2570=>678,2575=>557,2576=>691,2579=>678,2580=>691,2581=>602,2582=>567, + 2583=>641,2584=>688,2585=>565,2586=>592,2587=>603,2588=>591,2589=>541,2590=>558,2591=>543,2592=>581,2593=>596,2594=>640,2595=>640,2596=>591,2597=>564,2598=>640, + 2599=>564,2600=>581,2602=>564,2603=>551,2604=>560,2605=>549,2606=>558,2607=>652,2608=>540,2610=>677,2611=>677,2613=>601,2614=>558,2616=>558,2617=>549,2620=>0, + 2622=>246,2623=>246,2624=>246,2625=>0,2626=>0,2631=>0,2632=>0,2635=>0,2636=>0,2637=>0,2649=>567,2650=>690,2651=>591,2652=>591,2654=>581,2662=>591, + 2663=>591,2664=>591,2665=>591,2666=>591,2667=>591,2668=>591,2669=>591,2670=>591,2671=>591,2672=>0,2673=>0,2674=>557,2675=>678,2676=>894,2689=>0,2690=>0, + 2691=>300,2693=>781,2694=>1044,2695=>589,2696=>589,2697=>560,2698=>758,2699=>806,2701=>781,2703=>781,2704=>781,2705=>1044,2707=>1044,2708=>1044,2709=>413,2710=>773, + 2711=>606,2712=>558,2713=>483,2714=>600,2715=>691,2716=>811,2717=>647,2718=>651,2719=>453,2720=>450,2721=>425,2722=>478,2723=>694,2724=>534,2725=>553,2726=>446, + 2727=>541,2728=>582,2730=>572,2731=>437,2732=>663,2733=>756,2734=>594,2735=>493,2736=>392,2738=>613,2739=>656,2741=>538,2742=>611,2743=>507,2744=>663,2745=>587, + 2748=>0,2749=>478,2750=>273,2751=>273,2752=>273,2753=>0,2754=>0,2755=>0,2756=>0,2757=>0,2759=>0,2760=>0,2761=>273,2763=>273,2764=>273,2765=>0, + 2768=>843,2784=>893,2790=>625,2791=>625,2792=>625,2793=>625,2794=>625,2795=>625,2796=>625,2797=>625,2798=>625,2799=>625,2817=>0,2818=>306,2819=>391,2821=>590, + 2822=>808,2823=>658,2824=>658,2825=>633,2826=>654,2827=>636,2828=>540,2831=>560,2832=>938,2835=>600,2836=>973,2837=>603,2838=>620,2839=>620,2840=>605,2841=>712, + 2842=>579,2843=>579,2844=>593,2845=>564,2846=>581,2847=>604,2848=>578,2849=>579,2850=>579,2851=>607,2852=>579,2853=>587,2854=>579,2855=>602,2856=>579,2858=>605, + 2859=>728,2860=>579,2861=>643,2862=>605,2863=>628,2864=>619,2866=>653,2867=>593,2870=>620,2871=>605,2872=>605,2873=>579,2876=>0,2877=>333,2878=>218,2879=>0, + 2880=>294,2881=>0,2882=>0,2883=>0,2887=>479,2888=>479,2891=>1026,2892=>1026,2893=>0,2902=>0,2903=>218,2908=>579,2909=>579,2911=>599,2912=>636,2913=>540, + 2918=>578,2919=>480,2920=>480,2921=>622,2922=>506,2923=>605,2924=>529,2925=>548,2926=>512,2927=>528,2928=>561,2946=>0,2947=>742,2949=>1002,2950=>1118,2951=>994, + 2952=>660,2953=>1012,2954=>1231,2958=>726,2959=>731,2960=>870,2962=>763,2963=>763,2964=>1636,2965=>667,2969=>830,2970=>584,2972=>876,2974=>986,2975=>802,2979=>1295, + 2980=>656,2984=>630,2985=>1012,2986=>694,2990=>727,2991=>790,2992=>545,2993=>718,2994=>821,2995=>871,2996=>724,2997=>873,2999=>1087,3000=>1098,3001=>1274,3006=>547, + 3007=>172,3008=>93,3009=>519,3010=>814,3014=>748,3015=>681,3016=>956,3018=>1666,3019=>1666,3020=>1994,3021=>0,3031=>871,3047=>667,3048=>1012,3049=>751,3050=>740, + 3051=>924,3052=>884,3053=>726,3054=>1002,3055=>825,3056=>717,3057=>719,3058=>774,3073=>365,3074=>601,3075=>346,3077=>720,3078=>786,3079=>567,3080=>1159,3081=>690, + 3082=>1047,3083=>1299,3084=>913,3086=>625,3087=>625,3088=>712,3090=>655,3091=>655,3092=>862,3093=>515,3094=>680,3095=>526,3096=>943,3097=>655,3098=>684,3099=>684, + 3100=>670,3101=>1205,3102=>732,3103=>888,3104=>597,3105=>709,3106=>709,3107=>809,3108=>715,3109=>702,3110=>702,3111=>702,3112=>607,3114=>623,3115=>623,3116=>681, + 3117=>681,3118=>932,3119=>1203,3120=>597,3121=>893,3122=>631,3123=>608,3125=>620,3126=>541,3127=>667,3128=>640,3129=>911,3134=>644,3135=>298,3136=>298,3137=>361, + 3138=>682,3139=>342,3140=>704,3142=>624,3143=>624,3144=>900,3146=>849,3147=>849,3148=>976,3149=>669,3157=>298,3158=>119,3168=>1620,3169=>1281,3174=>840,3175=>840, + 3176=>840,3177=>840,3178=>840,3179=>840,3180=>840,3181=>840,3182=>840,3183=>840,3202=>440,3203=>251,3205=>654,3206=>654,3207=>631,3208=>891,3209=>957,3210=>1293, + 3211=>1044,3212=>744,3214=>650,3215=>650,3216=>659,3218=>667,3219=>667,3220=>667,3221=>462,3222=>749,3223=>543,3224=>779,3225=>674,3226=>682,3227=>660,3228=>667, + 3229=>1171,3230=>926,3231=>671,3232=>557,3233=>669,3234=>669,3235=>728,3236=>544,3237=>672,3238=>672,3239=>672,3240=>560,3242=>668,3243=>668,3244=>681,3245=>687, + 3246=>972,3247=>1101,3248=>556,3249=>677,3250=>661,3251=>545,3253=>666,3254=>553,3255=>670,3256=>549,3257=>716,3262=>425,3263=>341,3264=>680,3265=>354,3266=>714, + 3267=>386,3268=>638,3270=>307,3271=>670,3272=>462,3274=>908,3275=>1251,3276=>434,3277=>336,3285=>344,3286=>404,3294=>673,3296=>1695,3297=>978,3302=>549,3303=>549, + 3304=>549,3305=>549,3306=>549,3307=>549,3308=>549,3309=>549,3310=>549,3311=>549,3330=>368,3331=>305,3333=>1201,3334=>1351,3335=>905,3336=>1459,3337=>635,3338=>1198, + 3339=>861,3340=>957,3342=>1211,3343=>1202,3344=>1839,3346=>642,3347=>1114,3348=>1195,3349=>861,3350=>982,3351=>874,3352=>1354,3353=>957,3354=>1016,3355=>1266,3356=>712, + 3357=>1454,3358=>1215,3359=>563,3360=>565,3361=>1192,3362=>1244,3363=>1268,3364=>878,3365=>966,3366=>545,3367=>879,3368=>879,3370=>1031,3371=>1175,3372=>1334,3373=>546, + 3374=>643,3375=>949,3376=>642,3377=>555,3378=>945,3379=>631,3380=>553,3381=>959,3382=>936,3383=>1122,3384=>1190,3385=>1112,3390=>475,3391=>418,3392=>442,3393=>340, + 3394=>340,3395=>473,3398=>640,3399=>530,3400=>1279,3402=>1368,3403=>1258,3404=>1447,3405=>0,3415=>553,3424=>861,3425=>1100,3430=>1095,3431=>929,3432=>854,3433=>1181, + 3434=>658,3435=>972,3436=>1210,3437=>650,3438=>959,3439=>896,3585=>595,3586=>648,3587=>665,3588=>608,3589=>608,3590=>665,3591=>471,3592=>556,3593=>652,3594=>664, + 3595=>681,3596=>816,3597=>849,3598=>620,3599=>620,3600=>541,3601=>785,3602=>826,3603=>887,3604=>598,3605=>605,3606=>595,3607=>650,3608=>541,3609=>652,3610=>608, + 3611=>608,3612=>630,3613=>630,3614=>695,3615=>695,3616=>620,3617=>581,3618=>588,3619=>501,3620=>595,3621=>569,3622=>620,3623=>519,3624=>592,3625=>659,3626=>574, + 3627=>654,3628=>695,3629=>566,3630=>574,3631=>517,3632=>452,3633=>0,3634=>496,3635=>496,3636=>0,3637=>0,3638=>0,3639=>0,3640=>0,3641=>0,3642=>0, + 3647=>687,3648=>302,3649=>571,3650=>478,3651=>515,3652=>515,3653=>496,3654=>506,3655=>0,3656=>0,3657=>0,3658=>0,3659=>0,3660=>0,3661=>0,3662=>0, + 3663=>555,3664=>598,3665=>640,3666=>688,3667=>690,3668=>657,3669=>657,3670=>635,3671=>839,3672=>693,3673=>769,3674=>673,3675=>994,3713=>775,3714=>707,3716=>724, + 3719=>524,3720=>690,3722=>678,3725=>711,3732=>719,3733=>834,3734=>776,3735=>916,3737=>744,3738=>740,3739=>740,3740=>834,3741=>834,3742=>854,3743=>854,3745=>775, + 3746=>724,3747=>697,3749=>700,3751=>700,3754=>708,3755=>916,3757=>700,3758=>697,3759=>658,3760=>432,3761=>534,3762=>476,3763=>476,3764=>778,3765=>778,3766=>778, + 3767=>778,3768=>778,3769=>778,3771=>778,3772=>778,3773=>670,3776=>420,3777=>806,3778=>430,3779=>446,3780=>346,3782=>571,3784=>778,3785=>778,3786=>778,3787=>778, + 3788=>778,3789=>778,3792=>721,3793=>719,3794=>601,3795=>711,3796=>686,3797=>686,3798=>834,3799=>756,3800=>724,3801=>906,3804=>1272,3805=>1272,3840=>600,3841=>600, + 3842=>600,3843=>600,3844=>600,3845=>600,3846=>600,3847=>600,3848=>600,3849=>600,3850=>600,3851=>600,3852=>600,3853=>600,3854=>600,3855=>600,3856=>600,3857=>600, + 3858=>600,3859=>600,3860=>600,3861=>600,3862=>600,3863=>600,3864=>600,3865=>600,3866=>600,3867=>600,3868=>600,3869=>600,3870=>600,3871=>600,3872=>600,3873=>600, + 3874=>600,3875=>600,3876=>600,3877=>600,3878=>600,3879=>600,3880=>600,3881=>600,3882=>600,3883=>600,3884=>600,3885=>600,3886=>600,3887=>600,3888=>600,3889=>600, + 3890=>600,3891=>600,3892=>600,3893=>600,3894=>600,3895=>600,3896=>600,3897=>600,3898=>600,3899=>600,3900=>600,3901=>600,3902=>600,3903=>600,3904=>600,3905=>600, + 3906=>600,3907=>600,3908=>600,3909=>600,3910=>600,3911=>600,3913=>600,3914=>600,3915=>600,3916=>600,3917=>600,3918=>600,3919=>600,3920=>600,3921=>600,3922=>600, + 3923=>600,3924=>600,3925=>600,3926=>600,3927=>600,3928=>600,3929=>600,3930=>600,3931=>600,3932=>600,3933=>600,3934=>600,3935=>600,3936=>600,3937=>600,3938=>600, + 3939=>600,3940=>600,3941=>600,3942=>600,3943=>600,3944=>600,3945=>600,3953=>600,3954=>600,3955=>600,3956=>600,3957=>600,3958=>600,3959=>600,3960=>600,3961=>600, + 3962=>600,3963=>600,3964=>600,3965=>600,3966=>600,3967=>600,3968=>600,3969=>600,3970=>600,3971=>600,3972=>600,3973=>600,3974=>600,3975=>600,3976=>600,3977=>600, + 3978=>600,3979=>600,3984=>600,3985=>600,3986=>600,3987=>600,3988=>600,3989=>600,3991=>600,3993=>600,3994=>600,3995=>600,3996=>600,3997=>600,3998=>600,3999=>600, + 4000=>600,4001=>600,4002=>600,4003=>600,4004=>600,4005=>600,4006=>600,4007=>600,4008=>600,4009=>600,4010=>600,4011=>600,4012=>600,4013=>600,4017=>600,4018=>600, + 4019=>600,4020=>600,4021=>600,4022=>600,4023=>600,4025=>600,4256=>662,4257=>677,4258=>708,4259=>696,4260=>609,4261=>790,4262=>664,4263=>785,4264=>560,4265=>634, + 4266=>782,4267=>701,4268=>629,4269=>682,4270=>705,4271=>692,4272=>734,4273=>615,4274=>592,4275=>680,4276=>679,4277=>705,4278=>643,4279=>623,4280=>623,4281=>629, + 4282=>633,4283=>770,4284=>592,4285=>662,4286=>629,4287=>672,4288=>735,4289=>576,4290=>606,4291=>605,4292=>676,4293=>792,4304=>435,4305=>556,4306=>565,4307=>872, + 4308=>506,4309=>544,4310=>723,4311=>868,4312=>530,4313=>532,4314=>955,4315=>552,4316=>565,4317=>712,4318=>547,4319=>574,4320=>685,4321=>554,4322=>806,4323=>810, + 4324=>777,4325=>502,4326=>686,4327=>512,4328=>552,4329=>496,4330=>568,4331=>552,4332=>592,4333=>565,4334=>552,4335=>741,4336=>549,4337=>659,4338=>559,4339=>524, + 4340=>482,4341=>565,4342=>822,4347=>506,4352=>1000,4353=>1000,4354=>1000,4355=>1000,4356=>1000,4357=>1000,4358=>1000,4359=>1000,4360=>1000,4361=>1000,4362=>1000,4363=>1000, + 4364=>1000,4365=>1000,4366=>1000,4367=>1000,4368=>1000,4369=>1000,4370=>1000,4371=>1000,4372=>1000,4373=>1000,4374=>1000,4375=>1000,4376=>1000,4377=>1000,4378=>1000,4379=>1000, + 4380=>1000,4381=>1000,4382=>1000,4383=>1000,4384=>1000,4385=>1000,4386=>1000,4387=>1000,4388=>1000,4389=>1000,4390=>1000,4391=>1000,4392=>1000,4393=>1000,4394=>1000,4395=>1000, + 4396=>1000,4397=>1000,4398=>1000,4399=>1000,4400=>1000,4401=>1000,4402=>1000,4403=>1000,4404=>1000,4405=>1000,4406=>1000,4407=>1000,4408=>1000,4409=>1000,4410=>1000,4411=>1000, + 4412=>1000,4413=>1000,4414=>1000,4415=>1000,4416=>1000,4417=>1000,4418=>1000,4419=>1000,4420=>1000,4421=>1000,4422=>1000,4423=>1000,4424=>1000,4425=>1000,4426=>1000,4427=>1000, + 4428=>1000,4429=>1000,4430=>1000,4431=>1000,4432=>1000,4433=>1000,4434=>1000,4435=>1000,4436=>1000,4437=>1000,4438=>1000,4439=>1000,4440=>1000,4441=>1000,4447=>1000,4448=>1000, + 4449=>1000,4450=>1000,4451=>1000,4452=>1000,4453=>1000,4454=>1000,4455=>1000,4456=>1000,4457=>1000,4458=>1000,4459=>1000,4460=>1000,4461=>1000,4462=>1000,4463=>1000,4464=>1000, + 4465=>1000,4466=>1000,4467=>1000,4468=>1000,4469=>1000,4470=>1000,4471=>1000,4472=>1000,4473=>1000,4474=>1000,4475=>1000,4476=>1000,4477=>1000,4478=>1000,4479=>1000,4480=>1000, + 4481=>1000,4482=>1000,4483=>1000,4484=>1000,4485=>1000,4486=>1000,4487=>1000,4488=>1000,4489=>1000,4490=>1000,4491=>1000,4492=>1000,4493=>1000,4494=>1000,4495=>1000,4496=>1000, + 4497=>1000,4498=>1000,4499=>1000,4500=>1000,4501=>1000,4502=>1000,4503=>1000,4504=>1000,4505=>1000,4506=>1000,4507=>1000,4508=>1000,4509=>1000,4510=>1000,4511=>1000,4512=>1000, + 4513=>1000,4514=>1000,4520=>1000,4521=>1000,4522=>1000,4523=>1000,4524=>1000,4525=>1000,4526=>1000,4527=>1000,4528=>1000,4529=>1000,4530=>1000,4531=>1000,4532=>1000,4533=>1000, + 4534=>1000,4535=>1000,4536=>1000,4537=>1000,4538=>1000,4539=>1000,4540=>1000,4541=>1000,4542=>1000,4543=>1000,4544=>1000,4545=>1000,4546=>1000,4547=>1000,4548=>1000,4549=>1000, + 4550=>1000,4551=>1000,4552=>1000,4553=>1000,4554=>1000,4555=>1000,4556=>1000,4557=>1000,4558=>1000,4559=>1000,4560=>1000,4561=>1000,4562=>1000,4563=>1000,4564=>1000,4565=>1000, + 4566=>1000,4567=>1000,4568=>1000,4569=>1000,4570=>1000,4571=>1000,4572=>1000,4573=>1000,4574=>1000,4575=>1000,4576=>1000,4577=>1000,4578=>1000,4579=>1000,4580=>1000,4581=>1000, + 4582=>1000,4583=>1000,4584=>1000,4585=>1000,4586=>1000,4587=>1000,4588=>1000,4589=>1000,4590=>1000,4591=>1000,4592=>1000,4593=>1000,4594=>1000,4595=>1000,4596=>1000,4597=>1000, + 4598=>1000,4599=>1000,4600=>1000,4601=>1000,7680=>667,7681=>556,7682=>667,7683=>556,7684=>667,7685=>556,7686=>667,7687=>556,7688=>722,7689=>500,7690=>722,7691=>556, + 7692=>722,7693=>556,7694=>722,7695=>556,7696=>722,7697=>556,7698=>722,7699=>556,7700=>667,7701=>556,7702=>667,7703=>556,7704=>667,7705=>556,7706=>667,7707=>556, + 7708=>667,7709=>556,7710=>611,7711=>278,7712=>778,7713=>556,7714=>722,7715=>556,7716=>722,7717=>556,7718=>722,7719=>556,7720=>722,7721=>556,7722=>722,7723=>556, + 7724=>278,7725=>222,7726=>278,7727=>278,7728=>667,7729=>500,7730=>667,7731=>500,7732=>667,7733=>500,7734=>556,7735=>222,7736=>556,7737=>222,7738=>556,7739=>222, + 7740=>556,7741=>222,7742=>833,7743=>833,7744=>833,7745=>833,7746=>833,7747=>833,7748=>722,7749=>556,7750=>722,7751=>556,7752=>722,7753=>556,7754=>722,7755=>556, + 7756=>778,7757=>556,7758=>778,7759=>556,7760=>778,7761=>556,7762=>778,7763=>556,7764=>667,7765=>556,7766=>667,7767=>556,7768=>722,7769=>333,7770=>722,7771=>333, + 7772=>722,7773=>333,7774=>722,7775=>333,7776=>667,7777=>500,7778=>667,7779=>500,7780=>667,7781=>500,7782=>667,7783=>500,7784=>667,7785=>500,7786=>611,7787=>278, + 7788=>611,7789=>278,7790=>611,7791=>278,7792=>611,7793=>278,7794=>722,7795=>556,7796=>722,7797=>556,7798=>722,7799=>556,7800=>722,7801=>556,7802=>722,7803=>556, + 7804=>667,7805=>500,7806=>667,7807=>500,7808=>944,7809=>722,7810=>944,7811=>722,7812=>944,7813=>722,7814=>944,7815=>722,7816=>944,7817=>722,7818=>667,7819=>500, + 7820=>667,7821=>500,7822=>667,7823=>500,7824=>611,7825=>500,7826=>611,7827=>500,7828=>611,7829=>500,7830=>556,7831=>278,7832=>722,7833=>500,7834=>556,7835=>278, + 7840=>667,7841=>556,7842=>667,7843=>556,7844=>667,7845=>556,7846=>667,7847=>556,7848=>667,7849=>556,7850=>667,7851=>556,7852=>667,7853=>556,7854=>667,7855=>556, + 7856=>667,7857=>556,7858=>667,7859=>556,7860=>667,7861=>556,7862=>667,7863=>556,7864=>667,7865=>556,7866=>667,7867=>556,7868=>667,7869=>556,7870=>667,7871=>556, + 7872=>667,7873=>556,7874=>667,7875=>556,7876=>667,7877=>556,7878=>667,7879=>556,7880=>278,7881=>278,7882=>278,7883=>222,7884=>778,7885=>556,7886=>778,7887=>556, + 7888=>778,7889=>556,7890=>778,7891=>556,7892=>778,7893=>556,7894=>778,7895=>556,7896=>778,7897=>556,7898=>776,7899=>556,7900=>776,7901=>556,7902=>776,7903=>556, + 7904=>776,7905=>556,7906=>776,7907=>556,7908=>722,7909=>556,7910=>722,7911=>556,7912=>776,7913=>620,7914=>776,7915=>620,7916=>776,7917=>620,7918=>776,7919=>620, + 7920=>776,7921=>620,7922=>667,7923=>500,7924=>667,7925=>500,7926=>667,7927=>500,7928=>667,7929=>500,7936=>576,7937=>576,7938=>576,7939=>576,7940=>576,7941=>576, + 7942=>576,7943=>576,7944=>667,7945=>667,7946=>680,7947=>680,7948=>680,7949=>680,7950=>718,7951=>718,7952=>434,7953=>434,7954=>434,7955=>434,7956=>434,7957=>434, + 7960=>692,7961=>692,7962=>823,7963=>823,7964=>823,7965=>823,7968=>556,7969=>556,7970=>556,7971=>556,7972=>556,7973=>556,7974=>556,7975=>556,7976=>747,7977=>747, + 7978=>878,7979=>878,7980=>878,7981=>878,7982=>923,7983=>923,7984=>222,7985=>222,7986=>222,7987=>222,7988=>222,7989=>222,7990=>222,7991=>222,7992=>303,7993=>303, + 7994=>434,7995=>434,7996=>434,7997=>434,7998=>479,7999=>479,8000=>556,8001=>556,8002=>556,8003=>556,8004=>556,8005=>556,8008=>778,8009=>778,8010=>894,8011=>894, + 8012=>894,8013=>894,8016=>551,8017=>551,8018=>551,8019=>551,8020=>551,8021=>551,8022=>551,8023=>551,8025=>777,8027=>893,8029=>885,8031=>940,8032=>766,8033=>766, + 8034=>766,8035=>766,8036=>766,8037=>766,8038=>766,8039=>766,8040=>758,8041=>758,8042=>874,8043=>874,8044=>868,8045=>867,8046=>911,8047=>911,8048=>576,8049=>576, + 8050=>434,8051=>434,8052=>556,8053=>556,8054=>222,8055=>222,8056=>556,8057=>556,8058=>551,8059=>551,8060=>766,8061=>766,8064=>576,8065=>576,8066=>576,8067=>576, + 8068=>576,8069=>576,8070=>576,8071=>576,8072=>667,8073=>667,8074=>680,8075=>680,8076=>680,8077=>680,8078=>718,8079=>718,8080=>556,8081=>556,8082=>556,8083=>556, + 8084=>556,8085=>556,8086=>556,8087=>556,8088=>747,8089=>747,8090=>878,8091=>878,8092=>878,8093=>878,8094=>923,8095=>923,8096=>766,8097=>766,8098=>766,8099=>766, + 8100=>766,8101=>766,8102=>766,8103=>766,8104=>758,8105=>758,8106=>874,8107=>874,8108=>868,8109=>867,8110=>911,8111=>911,8112=>576,8113=>576,8114=>576,8115=>576, + 8116=>576,8118=>576,8119=>576,8120=>667,8121=>667,8122=>667,8123=>667,8124=>667,8125=>278,8126=>278,8127=>278,8128=>278,8129=>278,8130=>556,8131=>556,8132=>556, + 8134=>556,8135=>556,8136=>693,8137=>704,8138=>748,8139=>759,8140=>722,8141=>278,8142=>278,8143=>278,8144=>222,8145=>222,8146=>222,8147=>222,8150=>222,8151=>222, + 8152=>278,8153=>278,8154=>304,8155=>304,8157=>278,8158=>278,8159=>278,8160=>551,8161=>551,8162=>551,8163=>551,8164=>571,8165=>571,8166=>551,8167=>551,8168=>667, + 8169=>667,8170=>742,8171=>746,8172=>693,8173=>278,8174=>278,8175=>278,8178=>766,8179=>766,8180=>766,8182=>766,8183=>766,8184=>778,8185=>778,8186=>758,8187=>758, + 8188=>758,8189=>278,8190=>278,8192=>500,8193=>1000,8194=>500,8195=>1000,8196=>333,8197=>250,8198=>167,8199=>556,8200=>278,8201=>100,8202=>50,8203=>0,8204=>0, + 8205=>0,8208=>333,8209=>333,8210=>556,8213=>564,8214=>428,8215=>500,8219=>222,8223=>333,8227=>350,8228=>278,8229=>556,8231=>278,8232=>0,8233=>0,8241=>1330, + 8242=>222,8243=>372,8244=>522,8245=>206,8246=>356,8247=>506,8248=>312,8251=>1000,8252=>471,8253=>556,8254=>500,8255=>945,8256=>945,8257=>312,8258=>820,8259=>333, + 8260=>167,8261=>278,8262=>278,8304=>333,8308=>333,8309=>333,8310=>333,8311=>333,8312=>333,8313=>333,8314=>333,8315=>333,8316=>333,8317=>210,8318=>210,8319=>333, + 8320=>333,8321=>333,8322=>333,8323=>333,8324=>333,8325=>333,8326=>333,8327=>333,8328=>333,8329=>333,8330=>333,8331=>333,8332=>333,8333=>210,8334=>210,8352=>556, + 8353=>556,8354=>556,8355=>556,8356=>556,8357=>833,8358=>556,8359=>556,8360=>1024,8361=>940,8362=>784,8363=>556,8400=>600,8401=>600,8402=>600,8403=>600,8404=>700, + 8405=>700,8406=>600,8407=>600,8408=>600,8409=>600,8410=>600,8411=>600,8412=>600,8413=>900,8414=>900,8415=>900,8416=>900,8417=>700,8448=>889,8449=>889,8450=>667, + 8451=>1022,8452=>611,8453=>889,8454=>889,8455=>501,8456=>667,8457=>921,8458=>510,8459=>906,8460=>988,8461=>722,8462=>500,8463=>500,8464=>688,8465=>553,8466=>708, + 8467=>291,8468=>778,8469=>722,8470=>1073,8471=>737,8472=>740,8473=>556,8474=>722,8475=>927,8476=>795,8477=>667,8478=>667,8479=>667,8480=>1000,8481=>1174,8483=>722, + 8484=>611,8485=>542,8486=>768,8487=>768,8488=>698,8489=>321,8490=>667,8491=>667,8492=>927,8493=>646,8494=>556,8495=>385,8496=>615,8497=>688,8498=>611,8499=>1115, + 8500=>406,8501=>688,8502=>688,8503=>344,8504=>688,8531=>834,8532=>834,8533=>834,8534=>834,8535=>834,8536=>834,8537=>834,8538=>834,8539=>834,8540=>834,8541=>834, + 8542=>834,8543=>834,8544=>278,8545=>555,8546=>832,8547=>933,8548=>667,8549=>934,8550=>1031,8551=>1268,8552=>944,8553=>667,8554=>944,8555=>1035,8556=>556,8557=>722, + 8558=>722,8559=>833,8560=>222,8561=>444,8562=>666,8563=>700,8564=>500,8565=>700,8566=>922,8567=>1144,8568=>712,8569=>500,8570=>712,8571=>934,8572=>222,8573=>500, + 8574=>556,8575=>833,8576=>983,8577=>722,8578=>983,8592=>713,8593=>713,8594=>713,8595=>713,8596=>713,8597=>713,8598=>713,8599=>713,8600=>713,8601=>713,8602=>713, + 8603=>713,8604=>713,8605=>713,8606=>713,8607=>713,8608=>713,8609=>713,8610=>713,8611=>713,8612=>713,8613=>713,8614=>713,8615=>713,8616=>713,8617=>713,8618=>713, + 8619=>713,8620=>713,8621=>813,8622=>813,8623=>713,8624=>713,8625=>713,8626=>713,8627=>713,8628=>713,8629=>713,8630=>713,8631=>713,8632=>713,8633=>713,8634=>800, + 8635=>800,8636=>713,8637=>713,8638=>713,8639=>713,8640=>713,8641=>713,8642=>713,8643=>713,8644=>713,8645=>713,8646=>713,8647=>713,8648=>713,8649=>713,8650=>713, + 8651=>713,8652=>713,8653=>713,8654=>950,8655=>713,8656=>713,8657=>713,8658=>713,8659=>713,8660=>863,8661=>713,8662=>713,8663=>713,8664=>713,8665=>713,8666=>713, + 8667=>713,8668=>813,8669=>813,8670=>713,8671=>713,8672=>713,8673=>713,8674=>713,8675=>713,8676=>713,8677=>713,8678=>713,8679=>713,8680=>713,8681=>713,8682=>713, + 8704=>600,8705=>600,8706=>494,8707=>600,8708=>600,8709=>800,8710=>612,8711=>612,8712=>549,8713=>549,8714=>549,8715=>549,8716=>549,8717=>549,8718=>549,8719=>823, + 8720=>823,8721=>713,8722=>584,8723=>584,8724=>584,8725=>167,8726=>278,8727=>389,8728=>400,8729=>400,8730=>600,8731=>600,8732=>600,8733=>549,8734=>549,8735=>584, + 8736=>584,8737=>584,8738=>584,8739=>260,8740=>444,8741=>418,8742=>602,8743=>561,8744=>561,8745=>561,8746=>561,8747=>506,8748=>806,8749=>1106,8750=>506,8751=>806, + 8752=>1106,8753=>506,8754=>506,8755=>506,8756=>561,8757=>561,8758=>422,8759=>561,8760=>584,8761=>584,8762=>584,8763=>584,8764=>584,8765=>584,8766=>584,8767=>584, + 8768=>422,8769=>584,8770=>584,8771=>584,8772=>584,8773=>584,8774=>584,8775=>584,8776=>584,8777=>584,8778=>584,8779=>584,8780=>584,8781=>584,8782=>584,8783=>584, + 8784=>584,8785=>584,8786=>584,8787=>584,8788=>737,8789=>737,8790=>584,8791=>584,8792=>584,8793=>584,8794=>584,8795=>584,8796=>584,8797=>584,8798=>584,8799=>584, + 8800=>584,8801=>584,8802=>584,8803=>584,8804=>584,8805=>584,8806=>584,8807=>584,8808=>584,8809=>584,8810=>969,8811=>969,8812=>584,8813=>584,8814=>584,8815=>584, + 8816=>584,8817=>584,8818=>584,8819=>584,8820=>584,8821=>584,8822=>584,8823=>584,8824=>584,8825=>584,8826=>584,8827=>584,8828=>584,8829=>584,8830=>584,8831=>584, + 8832=>584,8833=>584,8834=>678,8835=>678,8836=>678,8837=>678,8838=>678,8839=>678,8840=>678,8841=>678,8842=>678,8843=>678,8844=>561,8845=>561,8846=>561,8847=>678, + 8848=>678,8849=>673,8850=>673,8851=>561,8852=>561,8853=>800,8854=>800,8855=>800,8856=>800,8857=>800,8858=>800,8859=>800,8860=>800,8861=>800,8862=>800,8863=>800, + 8864=>800,8865=>800,8866=>549,8867=>549,8868=>549,8869=>549,8870=>399,8871=>399,8872=>549,8873=>549,8874=>549,8875=>672,8876=>549,8877=>549,8878=>549,8879=>672, + 8880=>549,8881=>549,8882=>549,8883=>549,8884=>549,8885=>549,8886=>713,8887=>713,8888=>713,8889=>549,8890=>549,8891=>584,8892=>584,8893=>584,8894=>584,8895=>584, + 8896=>561,8897=>561,8898=>561,8899=>561,8900=>549,8901=>250,8902=>549,8903=>649,8904=>630,8905=>630,8906=>630,8907=>630,8908=>630,8909=>584,8910=>561,8911=>561, + 8912=>668,8913=>668,8914=>668,8915=>668,8916=>561,8917=>602,8918=>584,8919=>584,8920=>1354,8921=>1354,8922=>584,8923=>584,8924=>584,8925=>584,8926=>584,8927=>584, + 8928=>584,8929=>584,8930=>673,8931=>673,8932=>673,8933=>673,8934=>584,8935=>584,8936=>584,8937=>584,8938=>584,8939=>584,8940=>584,8941=>584,8942=>278,8943=>1000, + 8944=>1000,8945=>1000,8960=>549,8962=>549,8963=>549,8964=>549,8965=>549,8966=>549,8967=>549,8968=>449,8969=>449,8970=>449,8971=>449,8972=>549,8973=>549,8974=>549, + 8975=>549,8976=>549,8977=>549,8978=>800,8979=>800,8980=>549,8981=>549,8982=>549,8983=>650,8984=>780,8985=>549,8986=>549,8987=>549,8988=>549,8989=>549,8990=>549, + 8991=>549,8992=>506,8993=>506,8994=>713,8995=>713,8996=>1000,8997=>1000,8998=>1000,8999=>1000,9000=>1000,9001=>329,9002=>329,9003=>1000,9004=>549,9005=>549,9006=>549, + 9007=>549,9008=>549,9009=>549,9010=>549,9011=>549,9012=>549,9013=>549,9014=>600,9015=>600,9016=>600,9017=>600,9018=>600,9019=>600,9020=>600,9021=>600,9022=>600, + 9023=>600,9024=>600,9025=>600,9026=>600,9027=>600,9028=>600,9029=>600,9030=>600,9031=>600,9032=>600,9033=>600,9034=>600,9035=>600,9036=>600,9037=>600,9038=>600, + 9039=>600,9040=>600,9041=>600,9042=>600,9043=>600,9044=>600,9045=>600,9046=>600,9047=>600,9048=>600,9049=>600,9050=>600,9051=>600,9052=>600,9053=>600,9054=>600, + 9055=>600,9056=>600,9057=>600,9058=>600,9059=>600,9060=>600,9061=>600,9062=>600,9063=>600,9064=>600,9065=>600,9066=>600,9067=>600,9068=>600,9069=>600,9070=>600, + 9071=>600,9072=>600,9073=>600,9074=>600,9075=>600,9076=>600,9077=>600,9078=>600,9079=>600,9080=>600,9081=>600,9082=>600,9109=>600,9216=>600,9217=>600,9218=>600, + 9219=>600,9220=>600,9221=>600,9222=>600,9223=>600,9224=>600,9225=>600,9226=>600,9227=>600,9228=>600,9229=>600,9230=>600,9231=>600,9232=>600,9233=>600,9234=>600, + 9235=>600,9236=>600,9237=>600,9238=>600,9239=>600,9240=>600,9241=>600,9242=>600,9243=>600,9244=>600,9245=>600,9246=>600,9247=>600,9248=>600,9249=>600,9250=>600, + 9251=>600,9252=>600,9280=>604,9281=>604,9282=>604,9283=>604,9284=>604,9285=>604,9286=>750,9287=>750,9288=>750,9289=>750,9290=>604,9312=>1000,9313=>1000,9314=>1000, + 9315=>1000,9316=>1000,9317=>1000,9318=>1000,9319=>1000,9320=>1000,9321=>1000,9322=>1000,9323=>1000,9324=>1000,9325=>1000,9326=>1000,9327=>1000,9328=>1000,9329=>1000,9330=>1000, + 9331=>1000,9332=>1000,9333=>1000,9334=>1000,9335=>1000,9336=>1000,9337=>1000,9338=>1000,9339=>1000,9340=>1000,9341=>1000,9342=>1000,9343=>1000,9344=>1000,9345=>1000,9346=>1000, + 9347=>1000,9348=>1000,9349=>1000,9350=>1000,9351=>1000,9352=>1000,9353=>1000,9354=>1000,9355=>1000,9356=>1000,9357=>1000,9358=>1000,9359=>1000,9360=>1000,9361=>1000,9362=>1000, + 9363=>1000,9364=>1000,9365=>1000,9366=>1000,9367=>1000,9368=>1000,9369=>1000,9370=>1000,9371=>1000,9372=>1000,9373=>1000,9374=>1000,9375=>1000,9376=>1000,9377=>1000,9378=>1000, + 9379=>1000,9380=>1000,9381=>1000,9382=>1000,9383=>1000,9384=>1000,9385=>1000,9386=>1000,9387=>1000,9388=>1000,9389=>1000,9390=>1000,9391=>1000,9392=>1000,9393=>1000,9394=>1000, + 9395=>1000,9396=>1000,9397=>1000,9398=>1000,9399=>1000,9400=>1000,9401=>1000,9402=>1000,9403=>1000,9404=>1000,9405=>1000,9406=>1000,9407=>1000,9408=>1000,9409=>1000,9410=>1000, + 9411=>1000,9412=>1000,9413=>1000,9414=>1000,9415=>1000,9416=>1000,9417=>1000,9418=>1000,9419=>1000,9420=>1000,9421=>1000,9422=>1000,9423=>1000,9424=>1000,9425=>1000,9426=>1000, + 9427=>1000,9428=>1000,9429=>1000,9430=>1000,9431=>1000,9432=>1000,9433=>1000,9434=>1000,9435=>1000,9436=>1000,9437=>1000,9438=>1000,9439=>1000,9440=>1000,9441=>1000,9442=>1000, + 9443=>1000,9444=>1000,9445=>1000,9446=>1000,9447=>1000,9448=>1000,9449=>1000,9450=>1000,9472=>600,9473=>600,9474=>600,9475=>600,9476=>600,9477=>600,9478=>600,9479=>600, + 9480=>600,9481=>600,9482=>600,9483=>600,9484=>600,9485=>600,9486=>600,9487=>600,9488=>600,9489=>600,9490=>600,9491=>600,9492=>600,9493=>600,9494=>600,9495=>600, + 9496=>600,9497=>600,9498=>600,9499=>600,9500=>600,9501=>600,9502=>600,9503=>600,9504=>600,9505=>600,9506=>600,9507=>600,9508=>600,9509=>600,9510=>600,9511=>600, + 9512=>600,9513=>600,9514=>600,9515=>600,9516=>600,9517=>600,9518=>600,9519=>600,9520=>600,9521=>600,9522=>600,9523=>600,9524=>600,9525=>600,9526=>600,9527=>600, + 9528=>600,9529=>600,9530=>600,9531=>600,9532=>600,9533=>600,9534=>600,9535=>600,9536=>600,9537=>600,9538=>600,9539=>600,9540=>600,9541=>600,9542=>600,9543=>600, + 9544=>600,9545=>600,9546=>600,9547=>600,9548=>600,9549=>600,9550=>600,9551=>600,9552=>600,9553=>600,9554=>600,9555=>600,9556=>600,9557=>600,9558=>600,9559=>600, + 9560=>600,9561=>600,9562=>600,9563=>600,9564=>600,9565=>600,9566=>600,9567=>600,9568=>600,9569=>600,9570=>600,9571=>600,9572=>600,9573=>600,9574=>600,9575=>600, + 9576=>600,9577=>600,9578=>600,9579=>600,9580=>600,9581=>600,9582=>600,9583=>600,9584=>600,9585=>600,9586=>600,9587=>600,9588=>600,9589=>600,9590=>600,9591=>600, + 9592=>600,9593=>600,9594=>600,9595=>600,9596=>600,9597=>600,9598=>600,9599=>600,9600=>600,9601=>600,9602=>600,9603=>600,9604=>600,9605=>600,9606=>600,9607=>600, + 9608=>600,9609=>600,9610=>600,9611=>600,9612=>600,9613=>600,9614=>600,9615=>600,9616=>600,9617=>600,9618=>600,9619=>600,9620=>600,9621=>600,9632=>600,9633=>600, + 9634=>600,9635=>600,9636=>600,9637=>600,9638=>600,9639=>600,9640=>600,9641=>600,9642=>600,9643=>600,9644=>600,9645=>600,9646=>600,9647=>600,9648=>600,9649=>600, + 9650=>600,9651=>600,9652=>600,9653=>600,9654=>600,9655=>600,9656=>600,9657=>600,9658=>600,9659=>600,9660=>600,9661=>600,9662=>600,9663=>600,9664=>600,9665=>600, + 9666=>600,9667=>600,9668=>600,9669=>600,9670=>600,9671=>600,9672=>600,9673=>600,9674=>600,9675=>600,9676=>600,9677=>600,9678=>600,9679=>600,9680=>600,9681=>600, + 9682=>600,9683=>600,9684=>600,9685=>600,9686=>600,9687=>600,9688=>600,9689=>600,9690=>600,9691=>600,9692=>600,9693=>600,9694=>600,9695=>600,9696=>600,9697=>600, + 9698=>600,9699=>600,9700=>600,9701=>600,9702=>600,9703=>600,9704=>600,9705=>600,9706=>600,9707=>600,9708=>600,9709=>600,9710=>600,9711=>600,9728=>750,9729=>1000, + 9730=>750,9731=>750,9732=>1000,9733=>816,9734=>823,9735=>500,9736=>500,9737=>800,9738=>800,9739=>800,9740=>800,9741=>800,9742=>719,9743=>719,9744=>734,9745=>734, + 9746=>734,9747=>762,9754=>960,9755=>960,9756=>939,9757=>939,9758=>939,9759=>939,9760=>750,9761=>600,9762=>750,9763=>750,9764=>580,9765=>460,9766=>444,9767=>650, + 9768=>444,9769=>768,9770=>800,9771=>850,9772=>675,9773=>800,9774=>750,9775=>750,9776=>900,9777=>900,9778=>900,9779=>900,9780=>900,9781=>900,9782=>900,9783=>900, + 9784=>750,9785=>750,9786=>750,9787=>750,9788=>750,9789=>750,9790=>750,9791=>740,9792=>740,9793=>740,9794=>740,9795=>653,9796=>490,9797=>632,9798=>780,9799=>560, + 9800=>838,9801=>780,9802=>734,9803=>887,9804=>780,9805=>1080,9806=>896,9807=>1080,9808=>804,9809=>868,9810=>922,9811=>696,9812=>1000,9813=>1000,9814=>1000,9815=>1000, + 9816=>1000,9817=>1000,9818=>1000,9819=>1000,9820=>1000,9821=>1000,9822=>1000,9823=>1000,9824=>722,9825=>734,9826=>674,9827=>804,9828=>722,9829=>734,9830=>674,9831=>804, + 9832=>860,9833=>423,9834=>592,9835=>750,9836=>750,9837=>439,9838=>439,9839=>439,9985=>974,9986=>961,9987=>974,9988=>980,9990=>789,9991=>790,9992=>791,9993=>690, + 9996=>549,9997=>855,9998=>911,9999=>933,10000=>911,10001=>945,10002=>974,10003=>755,10004=>846,10005=>762,10006=>761,10007=>571,10008=>677,10009=>763,10010=>760,10011=>759, + 10012=>754,10013=>494,10014=>552,10015=>537,10016=>577,10017=>692,10018=>786,10019=>788,10020=>788,10021=>790,10022=>793,10023=>794,10025=>823,10026=>789,10027=>841,10028=>823, + 10029=>833,10030=>816,10031=>831,10032=>923,10033=>744,10034=>723,10035=>749,10036=>790,10037=>792,10038=>695,10039=>776,10040=>768,10041=>792,10042=>759,10043=>707,10044=>708, + 10045=>682,10046=>701,10047=>826,10048=>815,10049=>789,10050=>789,10051=>707,10052=>687,10053=>696,10054=>689,10055=>786,10056=>787,10057=>713,10058=>791,10059=>785,10061=>873, + 10063=>762,10064=>762,10065=>759,10066=>759,10070=>784,10072=>138,10073=>277,10074=>415,10075=>392,10076=>392,10077=>668,10078=>668,10081=>732,10082=>544,10083=>544,10084=>910, + 10085=>667,10086=>760,10087=>760,10102=>788,10103=>788,10104=>788,10105=>788,10106=>788,10107=>788,10108=>788,10109=>788,10110=>788,10111=>788,10112=>788,10113=>788,10114=>788, + 10115=>788,10116=>788,10117=>788,10118=>788,10119=>788,10120=>788,10121=>788,10122=>788,10123=>788,10124=>788,10125=>788,10126=>788,10127=>788,10128=>788,10129=>788,10130=>788, + 10131=>788,10132=>894,10136=>748,10137=>924,10138=>748,10139=>918,10140=>927,10141=>928,10142=>928,10143=>834,10144=>873,10145=>828,10146=>924,10147=>924,10148=>917,10149=>930, + 10150=>931,10151=>463,10152=>883,10153=>836,10154=>836,10155=>867,10156=>867,10157=>696,10158=>696,10159=>874,10161=>874,10162=>760,10163=>946,10164=>771,10165=>865,10166=>771, + 10167=>888,10168=>967,10169=>888,10170=>831,10171=>873,10172=>927,10173=>970,10174=>918,12288=>1000,12289=>1000,12290=>1000,12291=>1000,12292=>1000,12293=>1000,12294=>1000,12295=>1000, + 12296=>1000,12297=>1000,12298=>1000,12299=>1000,12300=>1000,12301=>1000,12302=>1000,12303=>1000,12304=>1000,12305=>1000,12306=>1000,12307=>1000,12308=>1000,12309=>1000,12310=>1000,12311=>1000, + 12312=>1000,12313=>1000,12314=>1000,12315=>1000,12316=>1000,12317=>1000,12318=>1000,12319=>1000,12320=>1000,12321=>1000,12322=>1000,12323=>1000,12324=>1000,12325=>1000,12326=>1000,12327=>1000, + 12328=>1000,12329=>1000,12330=>1000,12331=>1000,12332=>1000,12333=>1000,12334=>1000,12335=>1000,12336=>1000,12337=>1000,12338=>1000,12339=>1000,12340=>1000,12341=>1000,12342=>1000,12343=>1000, + 12351=>1000,12353=>1000,12354=>1000,12355=>1000,12356=>1000,12357=>1000,12358=>1000,12359=>1000,12360=>1000,12361=>1000,12362=>1000,12363=>1000,12364=>1000,12365=>1000,12366=>1000,12367=>1000, + 12368=>1000,12369=>1000,12370=>1000,12371=>1000,12372=>1000,12373=>1000,12374=>1000,12375=>1000,12376=>1000,12377=>1000,12378=>1000,12379=>1000,12380=>1000,12381=>1000,12382=>1000,12383=>1000, + 12384=>1000,12385=>1000,12386=>1000,12387=>1000,12388=>1000,12389=>1000,12390=>1000,12391=>1000,12392=>1000,12393=>1000,12394=>1000,12395=>1000,12396=>1000,12397=>1000,12398=>1000,12399=>1000, + 12400=>1000,12401=>1000,12402=>1000,12403=>1000,12404=>1000,12405=>1000,12406=>1000,12407=>1000,12408=>1000,12409=>1000,12410=>1000,12411=>1000,12412=>1000,12413=>1000,12414=>1000,12415=>1000, + 12416=>1000,12417=>1000,12418=>1000,12419=>1000,12420=>1000,12421=>1000,12422=>1000,12423=>1000,12424=>1000,12425=>1000,12426=>1000,12427=>1000,12428=>1000,12429=>1000,12430=>1000,12431=>1000, + 12432=>1000,12433=>1000,12434=>1000,12435=>1000,12436=>1000,12441=>1000,12442=>1000,12443=>1000,12444=>1000,12445=>1000,12446=>1000,12449=>1000,12450=>1000,12451=>1000,12452=>1000,12453=>1000, + 12454=>1000,12455=>1000,12456=>1000,12457=>1000,12458=>1000,12459=>1000,12460=>1000,12461=>1000,12462=>1000,12463=>1000,12464=>1000,12465=>1000,12466=>1000,12467=>1000,12468=>1000,12469=>1000, + 12470=>1000,12471=>1000,12472=>1000,12473=>1000,12474=>1000,12475=>1000,12476=>1000,12477=>1000,12478=>1000,12479=>1000,12480=>1000,12481=>1000,12482=>1000,12483=>1000,12484=>1000,12485=>1000, + 12486=>1000,12487=>1000,12488=>1000,12489=>1000,12490=>1000,12491=>1000,12492=>1000,12493=>1000,12494=>1000,12495=>1000,12496=>1000,12497=>1000,12498=>1000,12499=>1000,12500=>1000,12501=>1000, + 12502=>1000,12503=>1000,12504=>1000,12505=>1000,12506=>1000,12507=>1000,12508=>1000,12509=>1000,12510=>1000,12511=>1000,12512=>1000,12513=>1000,12514=>1000,12515=>1000,12516=>1000,12517=>1000, + 12518=>1000,12519=>1000,12520=>1000,12521=>1000,12522=>1000,12523=>1000,12524=>1000,12525=>1000,12526=>1000,12527=>1000,12528=>1000,12529=>1000,12530=>1000,12531=>1000,12532=>1000,12533=>1000, + 12534=>1000,12535=>1000,12536=>1000,12537=>1000,12538=>1000,12539=>1000,12540=>1000,12541=>1000,12542=>1000,12549=>1000,12550=>1000,12551=>1000,12552=>1000,12553=>1000,12554=>1000,12555=>1000, + 12556=>1000,12557=>1000,12558=>1000,12559=>1000,12560=>1000,12561=>1000,12562=>1000,12563=>1000,12564=>1000,12565=>1000,12566=>1000,12567=>1000,12568=>1000,12569=>1000,12570=>1000,12571=>1000, + 12572=>1000,12573=>1000,12574=>1000,12575=>1000,12576=>1000,12577=>1000,12578=>1000,12579=>1000,12580=>1000,12581=>1000,12582=>1000,12583=>1000,12584=>1000,12585=>1000,12586=>1000,12587=>1000, + 12588=>1000,12593=>1000,12594=>1000,12595=>1000,12596=>1000,12597=>1000,12598=>1000,12599=>1000,12600=>1000,12601=>1000,12602=>1000,12603=>1000,12604=>1000,12605=>1000,12606=>1000,12607=>1000, + 12608=>1000,12609=>1000,12610=>1000,12611=>1000,12612=>1000,12613=>1000,12614=>1000,12615=>1000,12616=>1000,12617=>1000,12618=>1000,12619=>1000,12620=>1000,12621=>1000,12622=>1000,12623=>1000, + 12624=>1000,12625=>1000,12626=>1000,12627=>1000,12628=>1000,12629=>1000,12630=>1000,12631=>1000,12632=>1000,12633=>1000,12634=>1000,12635=>1000,12636=>1000,12637=>1000,12638=>1000,12639=>1000, + 12640=>1000,12641=>1000,12642=>1000,12643=>1000,12644=>1000,12645=>1000,12646=>1000,12647=>1000,12648=>1000,12649=>1000,12650=>1000,12651=>1000,12652=>1000,12653=>1000,12654=>1000,12655=>1000, + 12656=>1000,12657=>1000,12658=>1000,12659=>1000,12660=>1000,12661=>1000,12662=>1000,12663=>1000,12664=>1000,12665=>1000,12666=>1000,12667=>1000,12668=>1000,12669=>1000,12670=>1000,12671=>1000, + 12672=>1000,12673=>1000,12674=>1000,12675=>1000,12676=>1000,12677=>1000,12678=>1000,12679=>1000,12680=>1000,12681=>1000,12682=>1000,12683=>1000,12684=>1000,12685=>1000,12686=>1000,12688=>1000, + 12689=>1000,12690=>1000,12691=>1000,12692=>1000,12693=>1000,12694=>1000,12695=>1000,12696=>1000,12697=>1000,12698=>1000,12699=>1000,12700=>1000,12701=>1000,12702=>1000,12703=>1000,12800=>1000, + 12801=>1000,12802=>1000,12803=>1000,12804=>1000,12805=>1000,12806=>1000,12807=>1000,12808=>1000,12809=>1000,12810=>1000,12811=>1000,12812=>1000,12813=>1000,12814=>1000,12815=>1000,12816=>1000, + 12817=>1000,12818=>1000,12819=>1000,12820=>1000,12821=>1000,12822=>1000,12823=>1000,12824=>1000,12825=>1000,12826=>1000,12827=>1000,12828=>1000,12832=>1000,12833=>1000,12834=>1000,12835=>1000, + 12836=>1000,12837=>1000,12838=>1000,12839=>1000,12840=>1000,12841=>1000,12842=>1000,12843=>1000,12844=>1000,12845=>1000,12846=>1000,12847=>1000,12848=>1000,12849=>1000,12850=>1000,12851=>1000, + 12852=>1000,12853=>1000,12854=>1000,12855=>1000,12856=>1000,12857=>1000,12858=>1000,12859=>1000,12860=>1000,12861=>1000,12862=>1000,12863=>1000,12864=>1000,12865=>1000,12866=>1000,12867=>1000, + 12896=>1000,12897=>1000,12898=>1000,12899=>1000,12900=>1000,12901=>1000,12902=>1000,12903=>1000,12904=>1000,12905=>1000,12906=>1000,12907=>1000,12908=>1000,12909=>1000,12910=>1000,12911=>1000, + 12912=>1000,12913=>1000,12914=>1000,12915=>1000,12916=>1000,12917=>1000,12918=>1000,12919=>1000,12920=>1000,12921=>1000,12922=>1000,12923=>1000,12927=>1000,12928=>1000,12929=>1000,12930=>1000, + 12931=>1000,12932=>1000,12933=>1000,12934=>1000,12935=>1000,12936=>1000,12937=>1000,12938=>1000,12939=>1000,12940=>1000,12941=>1000,12942=>1000,12943=>1000,12944=>1000,12945=>1000,12946=>1000, + 12947=>1000,12948=>1000,12949=>1000,12950=>1000,12951=>1000,12952=>1000,12953=>1000,12954=>1000,12955=>1000,12956=>1000,12957=>1000,12958=>1000,12959=>1000,12960=>1000,12961=>1000,12962=>1000, + 12963=>1000,12964=>1000,12965=>1000,12966=>1000,12967=>1000,12968=>1000,12969=>1000,12970=>1000,12971=>1000,12972=>1000,12973=>1000,12974=>1000,12975=>1000,12976=>1000,12992=>1000,12993=>1000, + 12994=>1000,12995=>1000,12996=>1000,12997=>1000,12998=>1000,12999=>1000,13000=>1000,13001=>1000,13002=>1000,13003=>1000,13008=>1000,13009=>1000,13010=>1000,13011=>1000,13012=>1000,13013=>1000, + 13014=>1000,13015=>1000,13016=>1000,13017=>1000,13018=>1000,13019=>1000,13020=>1000,13021=>1000,13022=>1000,13023=>1000,13024=>1000,13025=>1000,13026=>1000,13027=>1000,13028=>1000,13029=>1000, + 13030=>1000,13031=>1000,13032=>1000,13033=>1000,13034=>1000,13035=>1000,13036=>1000,13037=>1000,13038=>1000,13039=>1000,13040=>1000,13041=>1000,13042=>1000,13043=>1000,13044=>1000,13045=>1000, + 13046=>1000,13047=>1000,13048=>1000,13049=>1000,13050=>1000,13051=>1000,13052=>1000,13053=>1000,13054=>1000,13056=>1000,13057=>1000,13058=>1000,13059=>1000,13060=>1000,13061=>1000,13062=>1000, + 13063=>1000,13064=>1000,13065=>1000,13066=>1000,13067=>1000,13068=>1000,13069=>1000,13070=>1000,13071=>1000,13072=>1000,13073=>1000,13074=>1000,13075=>1000,13076=>1000,13077=>1000,13078=>1000, + 13079=>1000,13080=>1000,13081=>1000,13082=>1000,13083=>1000,13084=>1000,13085=>1000,13086=>1000,13087=>1000,13088=>1000,13089=>1000,13090=>1000,13091=>1000,13092=>1000,13093=>1000,13094=>1000, + 13095=>1000,13096=>1000,13097=>1000,13098=>1000,13099=>1000,13100=>1000,13101=>1000,13102=>1000,13103=>1000,13104=>1000,13105=>1000,13106=>1000,13107=>1000,13108=>1000,13109=>1000,13110=>1000, + 13111=>1000,13112=>1000,13113=>1000,13114=>1000,13115=>1000,13116=>1000,13117=>1000,13118=>1000,13119=>1000,13120=>1000,13121=>1000,13122=>1000,13123=>1000,13124=>1000,13125=>1000,13126=>1000, + 13127=>1000,13128=>1000,13129=>1000,13130=>1000,13131=>1000,13132=>1000,13133=>1000,13134=>1000,13135=>1000,13136=>1000,13137=>1000,13138=>1000,13139=>1000,13140=>1000,13141=>1000,13142=>1000, + 13143=>1000,13144=>1000,13145=>1000,13146=>1000,13147=>1000,13148=>1000,13149=>1000,13150=>1000,13151=>1000,13152=>1000,13153=>1000,13154=>1000,13155=>1000,13156=>1000,13157=>1000,13158=>1000, + 13159=>1000,13160=>1000,13161=>1000,13162=>1000,13163=>1000,13164=>1000,13165=>1000,13166=>1000,13167=>1000,13168=>1000,13169=>1000,13170=>1000,13171=>1000,13172=>1000,13173=>1000,13174=>1000, + 13179=>1000,13180=>1000,13181=>1000,13182=>1000,13183=>1000,13184=>1000,13185=>1000,13186=>1000,13187=>1000,13188=>1000,13189=>1000,13190=>1000,13191=>1000,13192=>1000,13193=>1000,13194=>1000, + 13195=>1000,13196=>1000,13197=>1000,13198=>1000,13199=>1000,13200=>1000,13201=>1000,13202=>1000,13203=>1000,13204=>1000,13205=>1000,13206=>1000,13207=>1000,13208=>1000,13209=>1000,13210=>1000, + 13211=>1000,13212=>1000,13213=>1000,13214=>1000,13215=>1000,13216=>1000,13217=>1000,13218=>1000,13219=>1000,13220=>1000,13221=>1000,13222=>1000,13223=>1000,13224=>1000,13225=>1000,13226=>1000, + 13227=>1000,13228=>1000,13229=>1000,13230=>1000,13231=>1000,13232=>1000,13233=>1000,13234=>1000,13235=>1000,13236=>1000,13237=>1000,13238=>1000,13239=>1000,13240=>1000,13241=>1000,13242=>1000, + 13243=>1000,13244=>1000,13245=>1000,13246=>1000,13247=>1000,13248=>1000,13249=>1000,13250=>1000,13251=>1000,13252=>1000,13253=>1000,13254=>1000,13255=>1000,13256=>1000,13257=>1000,13258=>1000, + 13259=>1000,13260=>1000,13261=>1000,13262=>1000,13263=>1000,13264=>1000,13265=>1000,13266=>1000,13267=>1000,13268=>1000,13269=>1000,13270=>1000,13271=>1000,13272=>1000,13273=>1000,13274=>1000, + 13275=>1000,13276=>1000,13277=>1000,13280=>1000,13281=>1000,13282=>1000,13283=>1000,13284=>1000,13285=>1000,13286=>1000,13287=>1000,13288=>1000,13289=>1000,13290=>1000,13291=>1000,13292=>1000, + 13293=>1000,13294=>1000,13295=>1000,13296=>1000,13297=>1000,13298=>1000,13299=>1000,13300=>1000,13301=>1000,13302=>1000,13303=>1000,13304=>1000,13305=>1000,13306=>1000,13307=>1000,13308=>1000, + 13309=>1000,13310=>1000,59393=>316,59394=>507,59395=>507,59396=>484,59397=>484,59416=>0,59492=>480,59495=>480,59536=>458,59557=>466,59558=>480,59559=>903,61441=>500,61442=>500, + 63232=>541,63233=>0,63234=>0,63235=>0,63236=>0,63237=>0,63238=>0,63239=>0,63240=>0,63241=>0,63242=>0,63243=>0,63244=>0,63245=>0,63246=>0,63247=>849, + 63248=>0,63249=>0,63250=>0,63251=>0,63252=>0,63253=>0,63254=>0,63255=>0,63256=>0,63257=>0,63258=>0,63260=>333,63261=>287,63744=>1000,63745=>1000,63746=>1000, + 63747=>1000,63748=>1000,63749=>1000,63750=>1000,63751=>1000,63752=>1000,63753=>1000,63754=>1000,63755=>1000,63756=>1000,63757=>1000,63758=>1000,63759=>1000,63760=>1000,63761=>1000,63762=>1000, + 63763=>1000,63764=>1000,63765=>1000,63766=>1000,63767=>1000,63768=>1000,63769=>1000,63770=>1000,63771=>1000,63772=>1000,63773=>1000,63774=>1000,63775=>1000,63776=>1000,63777=>1000,63778=>1000, + 63779=>1000,63780=>1000,63781=>1000,63782=>1000,63783=>1000,63784=>1000,63785=>1000,63786=>1000,63787=>1000,63788=>1000,63789=>1000,63790=>1000,63791=>1000,63792=>1000,63793=>1000,63794=>1000, + 63795=>1000,63796=>1000,63797=>1000,63798=>1000,63799=>1000,63800=>1000,63801=>1000,63802=>1000,63803=>1000,63804=>1000,63805=>1000,63806=>1000,63807=>1000,63808=>1000,63809=>1000,63810=>1000, + 63811=>1000,63812=>1000,63813=>1000,63814=>1000,63815=>1000,63816=>1000,63817=>1000,63818=>1000,63819=>1000,63820=>1000,63821=>1000,63822=>1000,63823=>1000,63824=>1000,63825=>1000,63826=>1000, + 63827=>1000,63828=>1000,63829=>1000,63830=>1000,63831=>1000,63832=>1000,63833=>1000,63834=>1000,63835=>1000,63836=>1000,63837=>1000,63838=>1000,63839=>1000,63840=>1000,63841=>1000,63842=>1000, + 63843=>1000,63844=>1000,63845=>1000,63846=>1000,63847=>1000,63848=>1000,63849=>1000,63850=>1000,63851=>1000,63852=>1000,63853=>1000,63854=>1000,63855=>1000,63856=>1000,63857=>1000,63858=>1000, + 63859=>1000,63860=>1000,63861=>1000,63862=>1000,63863=>1000,63864=>1000,63865=>1000,63866=>1000,63867=>1000,63868=>1000,63869=>1000,63870=>1000,63871=>1000,63872=>1000,63873=>1000,63874=>1000, + 63875=>1000,63876=>1000,63877=>1000,63878=>1000,63879=>1000,63880=>1000,63881=>1000,63882=>1000,63883=>1000,63884=>1000,63885=>1000,63886=>1000,63887=>1000,63888=>1000,63889=>1000,63890=>1000, + 63891=>1000,63892=>1000,63893=>1000,63894=>1000,63895=>1000,63896=>1000,63897=>1000,63898=>1000,63899=>1000,63900=>1000,63901=>1000,63902=>1000,63903=>1000,63904=>1000,63905=>1000,63906=>1000, + 63907=>1000,63908=>1000,63909=>1000,63910=>1000,63911=>1000,63912=>1000,63913=>1000,63914=>1000,63915=>1000,63916=>1000,63917=>1000,63918=>1000,63919=>1000,63920=>1000,63921=>1000,63922=>1000, + 63923=>1000,63924=>1000,63925=>1000,63926=>1000,63927=>1000,63928=>1000,63929=>1000,63930=>1000,63931=>1000,63932=>1000,63933=>1000,63934=>1000,63935=>1000,63936=>1000,63937=>1000,63938=>1000, + 63939=>1000,63940=>1000,63941=>1000,63942=>1000,63943=>1000,63944=>1000,63945=>1000,63946=>1000,63947=>1000,63948=>1000,63949=>1000,63950=>1000,63951=>1000,63952=>1000,63953=>1000,63954=>1000, + 63955=>1000,63956=>1000,63957=>1000,63958=>1000,63959=>1000,63960=>1000,63961=>1000,63962=>1000,63963=>1000,63964=>1000,63965=>1000,63966=>1000,63967=>1000,63968=>1000,63969=>1000,63970=>1000, + 63971=>1000,63972=>1000,63973=>1000,63974=>1000,63975=>1000,63976=>1000,63977=>1000,63978=>1000,63979=>1000,63980=>1000,63981=>1000,63982=>1000,63983=>1000,63984=>1000,63985=>1000,63986=>1000, + 63987=>1000,63988=>1000,63989=>1000,63990=>1000,63991=>1000,63992=>1000,63993=>1000,63994=>1000,63995=>1000,63996=>1000,63997=>1000,63998=>1000,63999=>1000,64000=>1000,64001=>1000,64002=>1000, + 64003=>1000,64004=>1000,64005=>1000,64006=>1000,64007=>1000,64008=>1000,64009=>1000,64010=>1000,64011=>1000,64012=>1000,64013=>1000,64014=>1000,64015=>1000,64016=>1000,64017=>1000,64018=>1000, + 64019=>1000,64020=>1000,64021=>1000,64022=>1000,64023=>1000,64024=>1000,64025=>1000,64026=>1000,64027=>1000,64028=>1000,64029=>1000,64030=>1000,64031=>1000,64032=>1000,64033=>1000,64034=>1000, + 64035=>1000,64036=>1000,64037=>1000,64038=>1000,64039=>1000,64040=>1000,64041=>1000,64042=>1000,64043=>1000,64044=>1000,64045=>1000,64256=>537,64257=>500,64258=>500,64259=>778,64260=>750, + 64261=>532,64262=>758,64275=>784,64276=>784,64277=>784,64278=>784,64279=>893,64286=>333,64287=>590,64288=>550,64289=>709,64290=>649,64291=>730,64292=>656,64293=>605,64294=>730, + 64295=>633,64296=>794,64297=>584,64298=>700,64299=>700,64300=>700,64301=>700,64302=>577,64303=>577,64304=>577,64305=>563,64306=>411,64307=>512,64308=>594,64309=>316,64310=>326, + 64312=>594,64313=>316,64314=>507,64315=>527,64316=>484,64318=>594,64320=>338,64321=>604,64323=>567,64324=>569,64326=>514,64327=>583,64328=>507,64329=>700,64330=>633,64331=>316, + 64332=>563,64333=>527,64334=>569,64335=>577,64336=>243,64337=>273,64338=>771,64339=>788,64340=>276,64341=>243,64342=>771,64343=>788,64344=>276,64345=>243,64346=>771,64347=>788, + 64348=>276,64349=>243,64350=>771,64351=>788,64352=>276,64353=>243,64354=>771,64355=>788,64356=>276,64357=>243,64358=>771,64359=>788,64360=>276,64361=>243,64362=>957,64363=>903, + 64364=>466,64365=>480,64366=>957,64367=>903,64368=>466,64369=>480,64370=>544,64371=>658,64372=>646,64373=>637,64374=>544,64375=>658,64376=>646,64377=>637,64378=>544,64379=>658, + 64380=>646,64381=>637,64382=>544,64383=>658,64384=>646,64385=>637,64386=>430,64387=>458,64388=>430,64389=>458,64390=>430,64391=>458,64392=>430,64393=>458,64394=>421,64395=>436, + 64396=>421,64397=>436,64398=>828,64399=>942,64400=>432,64401=>549,64402=>828,64403=>942,64404=>432,64405=>549,64406=>828,64407=>942,64408=>432,64409=>549,64410=>828,64411=>942, + 64412=>432,64413=>549,64414=>692,64415=>723,64416=>692,64417=>723,64418=>276,64419=>243,64420=>514,64421=>477,64422=>514,64423=>509,64424=>273,64425=>427,64426=>706,64427=>706, + 64428=>686,64429=>686,64430=>550,64431=>461,64432=>550,64433=>461,64467=>757,64468=>733,64469=>432,64470=>549,64471=>470,64472=>466,64473=>470,64474=>466,64475=>470,64476=>466, + 64477=>470,64478=>470,64479=>466,64480=>470,64481=>466,64482=>470,64483=>466,64484=>781,64485=>933,64486=>276,64487=>243,64488=>276,64489=>243,64490=>547,64491=>517,64492=>783, + 64493=>753,64494=>740,64495=>710,64496=>740,64497=>710,64498=>740,64499=>710,64500=>740,64501=>710,64502=>1207,64503=>1177,64504=>517,64505=>1067,64506=>1037,64507=>517,64508=>731, + 64509=>793,64510=>276,64511=>243,64512=>932,64513=>932,64514=>914,64515=>1067,64516=>1077,64517=>935,64518=>935,64519=>935,64520=>917,64521=>1070,64522=>1080,64523=>932,64524=>932, + 64525=>932,64526=>914,64527=>1067,64528=>1077,64529=>932,64530=>914,64531=>1067,64532=>1077,64533=>1305,64534=>1287,64535=>1305,64536=>1287,64537=>1305,64538=>1305,64539=>1287,64540=>1429, + 64541=>1429,64542=>1429,64543=>1411,64544=>1476,64545=>1458,64546=>1476,64547=>1476,64548=>1476,64549=>1458,64550=>1392,64551=>1374,64552=>1374,64553=>1245,64554=>1227,64555=>1245,64556=>1227, + 64557=>1125,64558=>1125,64559=>1125,64560=>1107,64561=>1260,64562=>1270,64563=>1125,64564=>1107,64565=>1260,64566=>1270,64567=>706,64568=>1091,64569=>1091,64570=>1091,64571=>1106,64572=>1073, + 64573=>1226,64574=>1236,64575=>932,64576=>932,64577=>932,64578=>914,64579=>1067,64580=>1077,64581=>1140,64582=>1140,64583=>1140,64584=>1122,64585=>1275,64586=>1285,64587=>932,64588=>932, + 64589=>932,64590=>914,64591=>1067,64592=>1077,64593=>1345,64594=>1327,64595=>1480,64596=>1490,64597=>932,64598=>932,64599=>932,64600=>914,64601=>1067,64602=>1077,64603=>430,64604=>421, + 64605=>731,64606=>296,64607=>300,64608=>300,64609=>300,64610=>300,64611=>300,64612=>680,64613=>680,64614=>884,64615=>967,64616=>1037,64617=>1047,64618=>680,64619=>680,64620=>884, + 64621=>967,64622=>1037,64623=>1047,64624=>680,64625=>680,64626=>884,64627=>967,64628=>1037,64629=>1047,64630=>680,64631=>680,64632=>884,64633=>967,64634=>1037,64635=>1047,64636=>1274, + 64637=>1284,64638=>1274,64639=>1284,64640=>821,64641=>1221,64642=>1188,64643=>1341,64644=>1351,64645=>884,64646=>1037,64647=>1047,64648=>806,64649=>1173,64650=>680,64651=>680,64652=>884, + 64653=>967,64654=>1037,64655=>1047,64656=>793,64657=>680,64658=>680,64659=>884,64660=>967,64661=>1037,64662=>1047,64663=>911,64664=>911,64665=>911,64666=>806,64667=>679,64668=>911, + 64669=>911,64670=>911,64671=>806,64672=>679,64673=>911,64674=>911,64675=>911,64676=>806,64677=>679,64678=>806,64679=>1284,64680=>1179,64681=>1284,64682=>1179,64683=>1284,64684=>1179, + 64685=>1408,64686=>1408,64687=>1408,64688=>1303,64689=>1455,64690=>1455,64691=>1350,64692=>1455,64693=>1455,64694=>1455,64695=>1350,64696=>1371,64697=>1266,64698=>1224,64699=>1119,64700=>1224, + 64701=>1119,64702=>1104,64703=>1104,64704=>1104,64705=>999,64706=>1104,64707=>999,64708=>1070,64709=>1070,64710=>1070,64711=>676,64712=>965,64713=>911,64714=>911,64715=>911,64716=>806, + 64717=>679,64718=>1119,64719=>1119,64720=>1119,64721=>1014,64722=>911,64723=>911,64724=>911,64725=>806,64726=>679,64727=>1324,64728=>1219,64729=>686,64730=>911,64731=>911,64732=>911, + 64733=>806,64734=>679,64735=>776,64736=>649,64737=>776,64738=>649,64739=>776,64740=>649,64741=>776,64742=>649,64743=>1303,64744=>1176,64745=>1303,64746=>1176,64747=>793,64748=>1082, + 64749=>776,64750=>776,64751=>649,64752=>776,64753=>649,64754=>306,64755=>302,64756=>298,64757=>1527,64758=>1537,64759=>1380,64760=>1390,64761=>1380,64762=>1390,64763=>1564,64764=>1574, + 64765=>1564,64766=>1574,64767=>1440,64768=>1450,64769=>1440,64770=>1450,64771=>1440,64772=>1450,64773=>1611,64774=>1621,64775=>1611,64776=>1621,64777=>1429,64778=>1429,64779=>1429,64780=>1411, + 64781=>1207,64782=>1207,64783=>1254,64784=>1254,64785=>1527,64786=>1537,64787=>1348,64788=>1358,64789=>1348,64790=>1358,64791=>1564,64792=>1574,64793=>1564,64794=>1574,64795=>1431,64796=>1441, + 64797=>1431,64798=>1441,64799=>1431,64800=>1441,64801=>1611,64802=>1621,64803=>1611,64804=>1621,64805=>1429,64806=>1429,64807=>1429,64808=>1411,64809=>1207,64810=>1207,64811=>1254,64812=>1254, + 64813=>1408,64814=>1408,64815=>1408,64816=>1303,64817=>1176,64818=>1176,64819=>1266,64820=>1408,64821=>1408,64822=>1408,64823=>1408,64824=>1408,64825=>1408,64826=>1266,64827=>1266,64828=>273, + 64829=>243,64830=>600,64831=>600,64848=>1444,64849=>1541,64850=>1549,64851=>1444,64852=>1444,64853=>1444,64854=>1444,64855=>1444,64856=>1830,64857=>1817,64858=>1975,64859=>1964,64860=>2046, + 64861=>2046,64862=>2202,64863=>1962,64864=>1941,64865=>1941,64866=>1944,64867=>1836,64868=>2114,64869=>2093,64870=>1991,64871=>2049,64872=>1941,64873=>2212,64874=>1962,64875=>1941,64876=>1944, + 64877=>1836,64878=>2249,64879=>2096,64880=>1988,64881=>1925,64882=>1904,64883=>1799,64884=>2070,64885=>1833,64886=>1729,64887=>1652,64888=>1881,64889=>1729,64890=>1892,64891=>1881,64892=>1759, + 64893=>1637,64894=>1670,64895=>1654,64896=>1522,64897=>1686,64898=>1675,64899=>1549,64900=>1541,64901=>1522,64902=>1444,64903=>1436,64904=>1444,64905=>1757,64906=>1652,64907=>1975,64908=>1757, + 64909=>1652,64910=>1757,64911=>1652,64914=>1757,64915=>1857,64916=>1752,64917=>1444,64918=>1675,64919=>1522,64920=>1444,64921=>1675,64922=>1581,64923=>1570,64924=>1417,64925=>1362,64926=>1686, + 64927=>1686,64928=>1675,64929=>1686,64930=>1675,64931=>1581,64932=>1570,64933=>1975,64934=>2069,64935=>1964,64936=>2202,64937=>2259,64938=>2212,64939=>2259,64940=>1686,64941=>1581,64942=>1686, + 64943=>1686,64944=>1581,64945=>1870,64946=>1817,64947=>1686,64948=>1637,64949=>1444,64950=>1892,64951=>1886,64952=>1549,64953=>1975,64954=>1444,64955=>1723,64956=>1522,64957=>1541,64958=>2080, + 64959=>2080,64960=>1975,64961=>1817,64962=>1686,64963=>1499,64964=>1757,64965=>1883,64966=>2212,64967=>1686,65008=>1523,65009=>1172,65010=>1159,65011=>1356,65012=>2111,65013=>2258,65014=>2130, + 65015=>1552,65016=>2046,65017=>1856,65018=>1930,65019=>1070,65056=>450,65057=>450,65058=>450,65059=>450,65072=>1000,65073=>1000,65074=>1000,65075=>1000,65076=>1000,65077=>1000,65078=>1000, + 65079=>1000,65080=>1000,65081=>1000,65082=>1000,65083=>1000,65084=>1000,65085=>1000,65086=>1000,65087=>1000,65088=>1000,65089=>1000,65090=>1000,65091=>1000,65092=>1000,65097=>1000,65098=>1000, + 65099=>1000,65100=>1000,65101=>1000,65102=>1000,65103=>1000,65104=>167,65105=>250,65106=>167,65108=>167,65109=>167,65110=>334,65111=>167,65112=>600,65113=>200,65114=>200,65115=>200, + 65116=>200,65117=>200,65118=>200,65119=>334,65120=>400,65121=>233,65122=>350,65123=>200,65124=>350,65125=>350,65126=>350,65128=>167,65129=>334,65130=>533,65131=>609,65136=>300, + 65137=>298,65138=>296,65140=>298,65142=>300,65143=>298,65144=>300,65145=>302,65146=>298,65147=>296,65148=>306,65149=>306,65150=>154,65151=>154,65152=>529,65153=>243,65154=>273, + 65155=>243,65156=>273,65157=>470,65158=>466,65159=>243,65160=>273,65161=>731,65162=>793,65163=>276,65164=>243,65165=>243,65166=>273,65167=>771,65168=>788,65169=>276,65170=>243, + 65171=>514,65172=>477,65173=>771,65174=>788,65175=>276,65176=>243,65177=>771,65178=>788,65179=>276,65180=>243,65181=>544,65182=>658,65183=>646,65184=>637,65185=>544,65186=>658, + 65187=>646,65188=>637,65189=>544,65190=>658,65191=>646,65192=>637,65193=>430,65194=>458,65195=>430,65196=>458,65197=>421,65198=>436,65199=>421,65200=>436,65201=>1194,65202=>1194, + 65203=>770,65204=>770,65205=>1194,65206=>1194,65207=>770,65208=>770,65209=>1291,65210=>1291,65211=>817,65212=>817,65213=>1291,65214=>1291,65215=>817,65216=>817,65217=>843,65218=>843, + 65219=>733,65220=>733,65221=>843,65222=>843,65223=>733,65224=>733,65225=>594,65226=>556,65227=>586,65228=>554,65229=>594,65230=>556,65231=>586,65232=>554,65233=>957,65234=>903, + 65235=>466,65236=>480,65237=>800,65238=>823,65239=>466,65240=>480,65241=>757,65242=>733,65243=>432,65244=>549,65245=>662,65246=>673,65247=>273,65248=>243,65249=>589,65250=>640, + 65251=>481,65252=>532,65253=>692,65254=>723,65255=>276,65256=>243,65257=>514,65258=>477,65259=>686,65260=>405,65261=>470,65262=>466,65263=>731,65264=>793,65265=>731,65266=>803, + 65267=>276,65268=>243,65269=>551,65270=>603,65271=>551,65272=>603,65273=>551,65274=>603,65275=>551,65276=>603,65281=>1000,65282=>1000,65283=>1000,65284=>1000,65285=>1000,65286=>1000, + 65287=>1000,65288=>1000,65289=>1000,65290=>1000,65291=>1000,65292=>1000,65293=>1000,65294=>1000,65295=>1000,65296=>1000,65297=>1000,65298=>1000,65299=>1000,65300=>1000,65301=>1000,65302=>1000, + 65303=>1000,65304=>1000,65305=>1000,65306=>1000,65307=>1000,65308=>1000,65309=>1000,65310=>1000,65311=>1000,65312=>1000,65313=>1000,65314=>1000,65315=>1000,65316=>1000,65317=>1000,65318=>1000, + 65319=>1000,65320=>1000,65321=>1000,65322=>1000,65323=>1000,65324=>1000,65325=>1000,65326=>1000,65327=>1000,65328=>1000,65329=>1000,65330=>1000,65331=>1000,65332=>1000,65333=>1000,65334=>1000, + 65335=>1000,65336=>1000,65337=>1000,65338=>1000,65339=>1000,65340=>1000,65341=>1000,65342=>1000,65343=>1000,65344=>1000,65345=>1000,65346=>1000,65347=>1000,65348=>1000,65349=>1000,65350=>1000, + 65351=>1000,65352=>1000,65353=>1000,65354=>1000,65355=>1000,65356=>1000,65357=>1000,65358=>1000,65359=>1000,65360=>1000,65361=>1000,65362=>1000,65363=>1000,65364=>1000,65365=>1000,65366=>1000, + 65367=>1000,65368=>1000,65369=>1000,65370=>1000,65371=>1000,65372=>1000,65373=>1000,65374=>1000,65377=>500,65378=>500,65379=>500,65380=>500,65381=>500,65382=>500,65383=>500,65384=>500, + 65385=>500,65386=>500,65387=>500,65388=>500,65389=>500,65390=>500,65391=>500,65392=>500,65393=>500,65394=>500,65395=>500,65396=>500,65397=>500,65398=>500,65399=>500,65400=>500, + 65401=>500,65402=>500,65403=>500,65404=>500,65405=>500,65406=>500,65407=>500,65408=>500,65409=>500,65410=>500,65411=>500,65412=>500,65413=>500,65414=>500,65415=>500,65416=>500, + 65417=>500,65418=>500,65419=>500,65420=>500,65421=>500,65422=>500,65423=>500,65424=>500,65425=>500,65426=>500,65427=>500,65428=>500,65429=>500,65430=>500,65431=>500,65432=>500, + 65433=>500,65434=>500,65435=>500,65436=>500,65437=>500,65438=>500,65439=>500,65440=>500,65441=>500,65442=>500,65443=>500,65444=>500,65445=>500,65446=>500,65447=>500,65448=>500, + 65449=>500,65450=>500,65451=>500,65452=>500,65453=>500,65454=>500,65455=>500,65456=>500,65457=>500,65458=>500,65459=>500,65460=>500,65461=>500,65462=>500,65463=>500,65464=>500, + 65465=>500,65466=>500,65467=>500,65468=>500,65469=>500,65470=>500,65474=>500,65475=>500,65476=>500,65477=>500,65478=>500,65479=>500,65482=>500,65483=>500,65484=>500,65485=>500, + 65486=>500,65487=>500,65490=>500,65491=>500,65492=>500,65493=>500,65494=>500,65495=>500,65498=>500,65499=>500,65500=>500,65504=>1000,65505=>1000,65506=>1000,65507=>1000,65508=>1000, + 65509=>1000,65510=>1000,65512=>500,65513=>500,65514=>500,65515=>500,65516=>500,65517=>500,65518=>500,65532=>1000,65533=>1000,19968=>1000,19969=>1000,19970=>1000,19971=>1000,19972=>1000, + 19973=>1000,19974=>1000,19975=>1000,19976=>1000,19977=>1000,19978=>1000,19979=>1000,19980=>1000,19981=>1000,19982=>1000,19983=>1000,19984=>1000,19985=>1000,19986=>1000,19987=>1000,19988=>1000, + 19989=>1000,19990=>1000,19991=>1000,19992=>1000,19993=>1000,19994=>1000,19995=>1000,19996=>1000,19997=>1000,19998=>1000,19999=>1000,20000=>1000,20001=>1000,20002=>1000,20003=>1000,20004=>1000, + 20005=>1000,20006=>1000,20007=>1000,20008=>1000,20009=>1000,20010=>1000,20011=>1000,20012=>1000,20013=>1000,20014=>1000,20015=>1000,20016=>1000,20017=>1000,20018=>1000,20019=>1000,20020=>1000, + 20021=>1000,20022=>1000,20023=>1000,20024=>1000,20025=>1000,20026=>1000,20027=>1000,20028=>1000,20029=>1000,20030=>1000,20031=>1000,20032=>1000,20033=>1000,20034=>1000,20035=>1000,20036=>1000, + 20037=>1000,20038=>1000,20039=>1000,20040=>1000,20041=>1000,20042=>1000,20043=>1000,20044=>1000,20045=>1000,20046=>1000,20047=>1000,20048=>1000,20049=>1000,20050=>1000,20051=>1000,20052=>1000, + 20053=>1000,20054=>1000,20055=>1000,20056=>1000,20057=>1000,20058=>1000,20059=>1000,20060=>1000,20061=>1000,20062=>1000,20063=>1000,20064=>1000,20065=>1000,20066=>1000,20067=>1000,20068=>1000, + 20069=>1000,20070=>1000,20071=>1000,20072=>1000,20073=>1000,20074=>1000,20075=>1000,20076=>1000,20077=>1000,20078=>1000,20079=>1000,20080=>1000,20081=>1000,20082=>1000,20083=>1000,20084=>1000, + 20085=>1000,20086=>1000,20087=>1000,20088=>1000,20089=>1000,20090=>1000,20091=>1000,20092=>1000,20093=>1000,20094=>1000,20095=>1000,20096=>1000,20097=>1000,20098=>1000,20099=>1000,20100=>1000, + 20101=>1000,20102=>1000,20103=>1000,20104=>1000,20105=>1000,20106=>1000,20107=>1000,20108=>1000,20109=>1000,20110=>1000,20111=>1000,20112=>1000,20113=>1000,20114=>1000,20115=>1000,20116=>1000, + 20117=>1000,20118=>1000,20119=>1000,20120=>1000,20121=>1000,20122=>1000,20123=>1000,20124=>1000,20125=>1000,20126=>1000,20127=>1000,20128=>1000,20129=>1000,20130=>1000,20131=>1000,20132=>1000, + 20133=>1000,20134=>1000,20135=>1000,20136=>1000,20137=>1000,20138=>1000,20139=>1000,20140=>1000,20141=>1000,20142=>1000,20143=>1000,20144=>1000,20145=>1000,20146=>1000,20147=>1000,20148=>1000, + 20149=>1000,20150=>1000,20151=>1000,20152=>1000,20153=>1000,20154=>1000,20155=>1000,20156=>1000,20157=>1000,20158=>1000,20159=>1000,20160=>1000,20161=>1000,20162=>1000,20163=>1000,20164=>1000, + 20165=>1000,20166=>1000,20167=>1000,20168=>1000,20169=>1000,20170=>1000,20171=>1000,20172=>1000,20173=>1000,20174=>1000,20175=>1000,20176=>1000,20177=>1000,20178=>1000,20179=>1000,20180=>1000, + 20181=>1000,20182=>1000,20183=>1000,20184=>1000,20185=>1000,20186=>1000,20187=>1000,20188=>1000,20189=>1000,20190=>1000,20191=>1000,20192=>1000,20193=>1000,20194=>1000,20195=>1000,20196=>1000, + 20197=>1000,20198=>1000,20199=>1000,20200=>1000,20201=>1000,20202=>1000,20203=>1000,20204=>1000,20205=>1000,20206=>1000,20207=>1000,20208=>1000,20209=>1000,20210=>1000,20211=>1000,20212=>1000, + 20213=>1000,20214=>1000,20215=>1000,20216=>1000,20217=>1000,20218=>1000,20219=>1000,20220=>1000,20221=>1000,20222=>1000,20223=>1000,20224=>1000,20225=>1000,20226=>1000,20227=>1000,20228=>1000, + 20229=>1000,20230=>1000,20231=>1000,20232=>1000,20233=>1000,20234=>1000,20235=>1000,20236=>1000,20237=>1000,20238=>1000,20239=>1000,20240=>1000,20241=>1000,20242=>1000,20243=>1000,20244=>1000, + 20245=>1000,20246=>1000,20247=>1000,20248=>1000,20249=>1000,20250=>1000,20251=>1000,20252=>1000,20253=>1000,20254=>1000,20255=>1000,20256=>1000,20257=>1000,20258=>1000,20259=>1000,20260=>1000, + 20261=>1000,20262=>1000,20263=>1000,20264=>1000,20265=>1000,20266=>1000,20267=>1000,20268=>1000,20269=>1000,20270=>1000,20271=>1000,20272=>1000,20273=>1000,20274=>1000,20275=>1000,20276=>1000, + 20277=>1000,20278=>1000,20279=>1000,20280=>1000,20281=>1000,20282=>1000,20283=>1000,20284=>1000,20285=>1000,20286=>1000,20287=>1000,20288=>1000,20289=>1000,20290=>1000,20291=>1000,20292=>1000, + 20293=>1000,20294=>1000,20295=>1000,20296=>1000,20297=>1000,20298=>1000,20299=>1000,20300=>1000,20301=>1000,20302=>1000,20303=>1000,20304=>1000,20305=>1000,20306=>1000,20307=>1000,20308=>1000, + 20309=>1000,20310=>1000,20311=>1000,20312=>1000,20313=>1000,20314=>1000,20315=>1000,20316=>1000,20317=>1000,20318=>1000,20319=>1000,20320=>1000,20321=>1000,20322=>1000,20323=>1000,20324=>1000, + 20325=>1000,20326=>1000,20327=>1000,20328=>1000,20329=>1000,20330=>1000,20331=>1000,20332=>1000,20333=>1000,20334=>1000,20335=>1000,20336=>1000,20337=>1000,20338=>1000,20339=>1000,20340=>1000, + 20341=>1000,20342=>1000,20343=>1000,20344=>1000,20345=>1000,20346=>1000,20347=>1000,20348=>1000,20349=>1000,20350=>1000,20351=>1000,20352=>1000,20353=>1000,20354=>1000,20355=>1000,20356=>1000, + 20357=>1000,20358=>1000,20359=>1000,20360=>1000,20361=>1000,20362=>1000,20363=>1000,20364=>1000,20365=>1000,20366=>1000,20367=>1000,20368=>1000,20369=>1000,20370=>1000,20371=>1000,20372=>1000, + 20373=>1000,20374=>1000,20375=>1000,20376=>1000,20377=>1000,20378=>1000,20379=>1000,20380=>1000,20381=>1000,20382=>1000,20383=>1000,20384=>1000,20385=>1000,20386=>1000,20387=>1000,20388=>1000, + 20389=>1000,20390=>1000,20391=>1000,20392=>1000,20393=>1000,20394=>1000,20395=>1000,20396=>1000,20397=>1000,20398=>1000,20399=>1000,20400=>1000,20401=>1000,20402=>1000,20403=>1000,20404=>1000, + 20405=>1000,20406=>1000,20407=>1000,20408=>1000,20409=>1000,20410=>1000,20411=>1000,20412=>1000,20413=>1000,20414=>1000,20415=>1000,20416=>1000,20417=>1000,20418=>1000,20419=>1000,20420=>1000, + 20421=>1000,20422=>1000,20423=>1000,20424=>1000,20425=>1000,20426=>1000,20427=>1000,20428=>1000,20429=>1000,20430=>1000,20431=>1000,20432=>1000,20433=>1000,20434=>1000,20435=>1000,20436=>1000, + 20437=>1000,20438=>1000,20439=>1000,20440=>1000,20441=>1000,20442=>1000,20443=>1000,20444=>1000,20445=>1000,20446=>1000,20447=>1000,20448=>1000,20449=>1000,20450=>1000,20451=>1000,20452=>1000, + 20453=>1000,20454=>1000,20455=>1000,20456=>1000,20457=>1000,20458=>1000,20459=>1000,20460=>1000,20461=>1000,20462=>1000,20463=>1000,20464=>1000,20465=>1000,20466=>1000,20467=>1000,20468=>1000, + 20469=>1000,20470=>1000,20471=>1000,20472=>1000,20473=>1000,20474=>1000,20475=>1000,20476=>1000,20477=>1000,20478=>1000,20479=>1000,20480=>1000,20481=>1000,20482=>1000,20483=>1000,20484=>1000, + 20485=>1000,20486=>1000,20487=>1000,20488=>1000,20489=>1000,20490=>1000,20491=>1000,20492=>1000,20493=>1000,20494=>1000,20495=>1000,20496=>1000,20497=>1000,20498=>1000,20499=>1000,20500=>1000, + 20501=>1000,20502=>1000,20503=>1000,20504=>1000,20505=>1000,20506=>1000,20507=>1000,20508=>1000,20509=>1000,20510=>1000,20511=>1000,20512=>1000,20513=>1000,20514=>1000,20515=>1000,20516=>1000, + 20517=>1000,20518=>1000,20519=>1000,20520=>1000,20521=>1000,20522=>1000,20523=>1000,20524=>1000,20525=>1000,20526=>1000,20527=>1000,20528=>1000,20529=>1000,20530=>1000,20531=>1000,20532=>1000, + 20533=>1000,20534=>1000,20535=>1000,20536=>1000,20537=>1000,20538=>1000,20539=>1000,20540=>1000,20541=>1000,20542=>1000,20543=>1000,20544=>1000,20545=>1000,20546=>1000,20547=>1000,20548=>1000, + 20549=>1000,20550=>1000,20551=>1000,20552=>1000,20553=>1000,20554=>1000,20555=>1000,20556=>1000,20557=>1000,20558=>1000,20559=>1000,20560=>1000,20561=>1000,20562=>1000,20563=>1000,20564=>1000, + 20565=>1000,20566=>1000,20567=>1000,20568=>1000,20569=>1000,20570=>1000,20571=>1000,20572=>1000,20573=>1000,20574=>1000,20575=>1000,20576=>1000,20577=>1000,20578=>1000,20579=>1000,20580=>1000, + 20581=>1000,20582=>1000,20583=>1000,20584=>1000,20585=>1000,20586=>1000,20587=>1000,20588=>1000,20589=>1000,20590=>1000,20591=>1000,20592=>1000,20593=>1000,20594=>1000,20595=>1000,20596=>1000, + 20597=>1000,20598=>1000,20599=>1000,20600=>1000,20601=>1000,20602=>1000,20603=>1000,20604=>1000,20605=>1000,20606=>1000,20607=>1000,20608=>1000,20609=>1000,20610=>1000,20611=>1000,20612=>1000, + 20613=>1000,20614=>1000,20615=>1000,20616=>1000,20617=>1000,20618=>1000,20619=>1000,20620=>1000,20621=>1000,20622=>1000,20623=>1000,20624=>1000,20625=>1000,20626=>1000,20627=>1000,20628=>1000, + 20629=>1000,20630=>1000,20631=>1000,20632=>1000,20633=>1000,20634=>1000,20635=>1000,20636=>1000,20637=>1000,20638=>1000,20639=>1000,20640=>1000,20641=>1000,20642=>1000,20643=>1000,20644=>1000, + 20645=>1000,20646=>1000,20647=>1000,20648=>1000,20649=>1000,20650=>1000,20651=>1000,20652=>1000,20653=>1000,20654=>1000,20655=>1000,20656=>1000,20657=>1000,20658=>1000,20659=>1000,20660=>1000, + 20661=>1000,20662=>1000,20663=>1000,20664=>1000,20665=>1000,20666=>1000,20667=>1000,20668=>1000,20669=>1000,20670=>1000,20671=>1000,20672=>1000,20673=>1000,20674=>1000,20675=>1000,20676=>1000, + 20677=>1000,20678=>1000,20679=>1000,20680=>1000,20681=>1000,20682=>1000,20683=>1000,20684=>1000,20685=>1000,20686=>1000,20687=>1000,20688=>1000,20689=>1000,20690=>1000,20691=>1000,20692=>1000, + 20693=>1000,20694=>1000,20695=>1000,20696=>1000,20697=>1000,20698=>1000,20699=>1000,20700=>1000,20701=>1000,20702=>1000,20703=>1000,20704=>1000,20705=>1000,20706=>1000,20707=>1000,20708=>1000, + 20709=>1000,20710=>1000,20711=>1000,20712=>1000,20713=>1000,20714=>1000,20715=>1000,20716=>1000,20717=>1000,20718=>1000,20719=>1000,20720=>1000,20721=>1000,20722=>1000,20723=>1000,20724=>1000, + 20725=>1000,20726=>1000,20727=>1000,20728=>1000,20729=>1000,20730=>1000,20731=>1000,20732=>1000,20733=>1000,20734=>1000,20735=>1000,20736=>1000,20737=>1000,20738=>1000,20739=>1000,20740=>1000, + 20741=>1000,20742=>1000,20743=>1000,20744=>1000,20745=>1000,20746=>1000,20747=>1000,20748=>1000,20749=>1000,20750=>1000,20751=>1000,20752=>1000,20753=>1000,20754=>1000,20755=>1000,20756=>1000, + 20757=>1000,20758=>1000,20759=>1000,20760=>1000,20761=>1000,20762=>1000,20763=>1000,20764=>1000,20765=>1000,20766=>1000,20767=>1000,20768=>1000,20769=>1000,20770=>1000,20771=>1000,20772=>1000, + 20773=>1000,20774=>1000,20775=>1000,20776=>1000,20777=>1000,20778=>1000,20779=>1000,20780=>1000,20781=>1000,20782=>1000,20783=>1000,20784=>1000,20785=>1000,20786=>1000,20787=>1000,20788=>1000, + 20789=>1000,20790=>1000,20791=>1000,20792=>1000,20793=>1000,20794=>1000,20795=>1000,20796=>1000,20797=>1000,20798=>1000,20799=>1000,20800=>1000,20801=>1000,20802=>1000,20803=>1000,20804=>1000, + 20805=>1000,20806=>1000,20807=>1000,20808=>1000,20809=>1000,20810=>1000,20811=>1000,20812=>1000,20813=>1000,20814=>1000,20815=>1000,20816=>1000,20817=>1000,20818=>1000,20819=>1000,20820=>1000, + 20821=>1000,20822=>1000,20823=>1000,20824=>1000,20825=>1000,20826=>1000,20827=>1000,20828=>1000,20829=>1000,20830=>1000,20831=>1000,20832=>1000,20833=>1000,20834=>1000,20835=>1000,20836=>1000, + 20837=>1000,20838=>1000,20839=>1000,20840=>1000,20841=>1000,20842=>1000,20843=>1000,20844=>1000,20845=>1000,20846=>1000,20847=>1000,20848=>1000,20849=>1000,20850=>1000,20851=>1000,20852=>1000, + 20853=>1000,20854=>1000,20855=>1000,20856=>1000,20857=>1000,20858=>1000,20859=>1000,20860=>1000,20861=>1000,20862=>1000,20863=>1000,20864=>1000,20865=>1000,20866=>1000,20867=>1000,20868=>1000, + 20869=>1000,20870=>1000,20871=>1000,20872=>1000,20873=>1000,20874=>1000,20875=>1000,20876=>1000,20877=>1000,20878=>1000,20879=>1000,20880=>1000,20881=>1000,20882=>1000,20883=>1000,20884=>1000, + 20885=>1000,20886=>1000,20887=>1000,20888=>1000,20889=>1000,20890=>1000,20891=>1000,20892=>1000,20893=>1000,20894=>1000,20895=>1000,20896=>1000,20897=>1000,20898=>1000,20899=>1000,20900=>1000, + 20901=>1000,20902=>1000,20903=>1000,20904=>1000,20905=>1000,20906=>1000,20907=>1000,20908=>1000,20909=>1000,20910=>1000,20911=>1000,20912=>1000,20913=>1000,20914=>1000,20915=>1000,20916=>1000, + 20917=>1000,20918=>1000,20919=>1000,20920=>1000,20921=>1000,20922=>1000,20923=>1000,20924=>1000,20925=>1000,20926=>1000,20927=>1000,20928=>1000,20929=>1000,20930=>1000,20931=>1000,20932=>1000, + 20933=>1000,20934=>1000,20935=>1000,20936=>1000,20937=>1000,20938=>1000,20939=>1000,20940=>1000,20941=>1000,20942=>1000,20943=>1000,20944=>1000,20945=>1000,20946=>1000,20947=>1000,20948=>1000, + 20949=>1000,20950=>1000,20951=>1000,20952=>1000,20953=>1000,20954=>1000,20955=>1000,20956=>1000,20957=>1000,20958=>1000,20959=>1000,20960=>1000,20961=>1000,20962=>1000,20963=>1000,20964=>1000, + 20965=>1000,20966=>1000,20967=>1000,20968=>1000,20969=>1000,20970=>1000,20971=>1000,20972=>1000,20973=>1000,20974=>1000,20975=>1000,20976=>1000,20977=>1000,20978=>1000,20979=>1000,20980=>1000, + 20981=>1000,20982=>1000,20983=>1000,20984=>1000,20985=>1000,20986=>1000,20987=>1000,20988=>1000,20989=>1000,20990=>1000,20991=>1000,20992=>1000,20993=>1000,20994=>1000,20995=>1000,20996=>1000, + 20997=>1000,20998=>1000,20999=>1000,21000=>1000,21001=>1000,21002=>1000,21003=>1000,21004=>1000,21005=>1000,21006=>1000,21007=>1000,21008=>1000,21009=>1000,21010=>1000,21011=>1000,21012=>1000, + 21013=>1000,21014=>1000,21015=>1000,21016=>1000,21017=>1000,21018=>1000,21019=>1000,21020=>1000,21021=>1000,21022=>1000,21023=>1000,21024=>1000,21025=>1000,21026=>1000,21027=>1000,21028=>1000, + 21029=>1000,21030=>1000,21031=>1000,21032=>1000,21033=>1000,21034=>1000,21035=>1000,21036=>1000,21037=>1000,21038=>1000,21039=>1000,21040=>1000,21041=>1000,21042=>1000,21043=>1000,21044=>1000, + 21045=>1000,21046=>1000,21047=>1000,21048=>1000,21049=>1000,21050=>1000,21051=>1000,21052=>1000,21053=>1000,21054=>1000,21055=>1000,21056=>1000,21057=>1000,21058=>1000,21059=>1000,21060=>1000, + 21061=>1000,21062=>1000,21063=>1000,21064=>1000,21065=>1000,21066=>1000,21067=>1000,21068=>1000,21069=>1000,21070=>1000,21071=>1000,21072=>1000,21073=>1000,21074=>1000,21075=>1000,21076=>1000, + 21077=>1000,21078=>1000,21079=>1000,21080=>1000,21081=>1000,21082=>1000,21083=>1000,21084=>1000,21085=>1000,21086=>1000,21087=>1000,21088=>1000,21089=>1000,21090=>1000,21091=>1000,21092=>1000, + 21093=>1000,21094=>1000,21095=>1000,21096=>1000,21097=>1000,21098=>1000,21099=>1000,21100=>1000,21101=>1000,21102=>1000,21103=>1000,21104=>1000,21105=>1000,21106=>1000,21107=>1000,21108=>1000, + 21109=>1000,21110=>1000,21111=>1000,21112=>1000,21113=>1000,21114=>1000,21115=>1000,21116=>1000,21117=>1000,21118=>1000,21119=>1000,21120=>1000,21121=>1000,21122=>1000,21123=>1000,21124=>1000, + 21125=>1000,21126=>1000,21127=>1000,21128=>1000,21129=>1000,21130=>1000,21131=>1000,21132=>1000,21133=>1000,21134=>1000,21135=>1000,21136=>1000,21137=>1000,21138=>1000,21139=>1000,21140=>1000, + 21141=>1000,21142=>1000,21143=>1000,21144=>1000,21145=>1000,21146=>1000,21147=>1000,21148=>1000,21149=>1000,21150=>1000,21151=>1000,21152=>1000,21153=>1000,21154=>1000,21155=>1000,21156=>1000, + 21157=>1000,21158=>1000,21159=>1000,21160=>1000,21161=>1000,21162=>1000,21163=>1000,21164=>1000,21165=>1000,21166=>1000,21167=>1000,21168=>1000,21169=>1000,21170=>1000,21171=>1000,21172=>1000, + 21173=>1000,21174=>1000,21175=>1000,21176=>1000,21177=>1000,21178=>1000,21179=>1000,21180=>1000,21181=>1000,21182=>1000,21183=>1000,21184=>1000,21185=>1000,21186=>1000,21187=>1000,21188=>1000, + 21189=>1000,21190=>1000,21191=>1000,21192=>1000,21193=>1000,21194=>1000,21195=>1000,21196=>1000,21197=>1000,21198=>1000,21199=>1000,21200=>1000,21201=>1000,21202=>1000,21203=>1000,21204=>1000, + 21205=>1000,21206=>1000,21207=>1000,21208=>1000,21209=>1000,21210=>1000,21211=>1000,21212=>1000,21213=>1000,21214=>1000,21215=>1000,21216=>1000,21217=>1000,21218=>1000,21219=>1000,21220=>1000, + 21221=>1000,21222=>1000,21223=>1000,21224=>1000,21225=>1000,21226=>1000,21227=>1000,21228=>1000,21229=>1000,21230=>1000,21231=>1000,21232=>1000,21233=>1000,21234=>1000,21235=>1000,21236=>1000, + 21237=>1000,21238=>1000,21239=>1000,21240=>1000,21241=>1000,21242=>1000,21243=>1000,21244=>1000,21245=>1000,21246=>1000,21247=>1000,21248=>1000,21249=>1000,21250=>1000,21251=>1000,21252=>1000, + 21253=>1000,21254=>1000,21255=>1000,21256=>1000,21257=>1000,21258=>1000,21259=>1000,21260=>1000,21261=>1000,21262=>1000,21263=>1000,21264=>1000,21265=>1000,21266=>1000,21267=>1000,21268=>1000, + 21269=>1000,21270=>1000,21271=>1000,21272=>1000,21273=>1000,21274=>1000,21275=>1000,21276=>1000,21277=>1000,21278=>1000,21279=>1000,21280=>1000,21281=>1000,21282=>1000,21283=>1000,21284=>1000, + 21285=>1000,21286=>1000,21287=>1000,21288=>1000,21289=>1000,21290=>1000,21291=>1000,21292=>1000,21293=>994,21294=>1000,21295=>1000,21296=>1000,21297=>1000,21298=>1000,21299=>1000,21300=>1000, + 21301=>1000,21302=>1000,21303=>1000,21304=>1000,21305=>1000,21306=>1000,21307=>1000,21308=>1000,21309=>1000,21310=>1000,21311=>1000,21312=>1000,21313=>1000,21314=>1000,21315=>1000,21316=>1000, + 21317=>1000,21318=>1000,21319=>1000,21320=>1000,21321=>1000,21322=>1000,21323=>1000,21324=>1000,21325=>1000,21326=>1000,21327=>1000,21328=>1000,21329=>1000,21330=>1000,21331=>1000,21332=>1000, + 21333=>1000,21334=>1000,21335=>1000,21336=>1000,21337=>1000,21338=>1000,21339=>1000,21340=>1000,21341=>1000,21342=>1000,21343=>1000,21344=>1000,21345=>1000,21346=>1000,21347=>1000,21348=>1000, + 21349=>1000,21350=>1000,21351=>1000,21352=>1000,21353=>1000,21354=>1000,21355=>1000,21356=>1000,21357=>1000,21358=>1000,21359=>1000,21360=>1000,21361=>1000,21362=>1000,21363=>1000,21364=>1000, + 21365=>1000,21366=>1000,21367=>1000,21368=>1000,21369=>1000,21370=>1000,21371=>1000,21372=>1000,21373=>1000,21374=>1000,21375=>1000,21376=>1000,21377=>1000,21378=>1000,21379=>1000,21380=>1000, + 21381=>1000,21382=>1000,21383=>1000,21384=>1000,21385=>1000,21386=>1000,21387=>1000,21388=>1000,21389=>1000,21390=>1000,21391=>1000,21392=>1000,21393=>1000,21394=>1000,21395=>1000,21396=>1000, + 21397=>1000,21398=>1000,21399=>1000,21400=>1000,21401=>1000,21402=>1000,21403=>1000,21404=>1000,21405=>1000,21406=>1000,21407=>1000,21408=>1000,21409=>1000,21410=>1000,21411=>1000,21412=>1000, + 21413=>1000,21414=>1000,21415=>1000,21416=>1000,21417=>1000,21418=>1000,21419=>1000,21420=>1000,21421=>1000,21422=>1000,21423=>1000,21424=>1000,21425=>1000,21426=>1000,21427=>1000,21428=>1000, + 21429=>1000,21430=>1000,21431=>1000,21432=>1000,21433=>1000,21434=>1000,21435=>1000,21436=>1000,21437=>1000,21438=>1000,21439=>1000,21440=>1000,21441=>1000,21442=>1000,21443=>1000,21444=>1000, + 21445=>1000,21446=>1000,21447=>1000,21448=>1000,21449=>1000,21450=>1000,21451=>1000,21452=>1000,21453=>1000,21454=>1000,21455=>1000,21456=>1000,21457=>1000,21458=>1000,21459=>1000,21460=>1000, + 21461=>1000,21462=>1000,21463=>1000,21464=>1000,21465=>1000,21466=>1000,21467=>1000,21468=>1000,21469=>1000,21470=>1000,21471=>1000,21472=>1000,21473=>1000,21474=>1000,21475=>1000,21476=>1000, + 21477=>1000,21478=>1000,21479=>1000,21480=>1000,21481=>1000,21482=>1000,21483=>1000,21484=>1000,21485=>1000,21486=>1000,21487=>1000,21488=>1000,21489=>1000,21490=>1000,21491=>1000,21492=>1000, + 21493=>1000,21494=>1000,21495=>1000,21496=>1000,21497=>1000,21498=>1000,21499=>1000,21500=>1000,21501=>1000,21502=>1000,21503=>1000,21504=>1000,21505=>1000,21506=>1000,21507=>1000,21508=>1000, + 21509=>1000,21510=>1000,21511=>1000,21512=>1000,21513=>1000,21514=>1000,21515=>1000,21516=>1000,21517=>1000,21518=>1000,21519=>1000,21520=>1000,21521=>1000,21522=>1000,21523=>1000,21524=>1000, + 21525=>1000,21526=>1000,21527=>1000,21528=>1000,21529=>1000,21530=>1000,21531=>1000,21532=>1000,21533=>1000,21534=>1000,21535=>1000,21536=>1000,21537=>1000,21538=>1000,21539=>1000,21540=>1000, + 21541=>1000,21542=>1000,21543=>1000,21544=>1000,21545=>1000,21546=>1000,21547=>1000,21548=>1000,21549=>1000,21550=>1000,21551=>1000,21552=>1000,21553=>1000,21554=>1000,21555=>1000,21556=>1000, + 21557=>1000,21558=>1000,21559=>1000,21560=>1000,21561=>1000,21562=>1000,21563=>1000,21564=>1000,21565=>1000,21566=>1000,21567=>1000,21568=>1000,21569=>1000,21570=>1000,21571=>1000,21572=>1000, + 21573=>1000,21574=>1000,21575=>1000,21576=>1000,21577=>1000,21578=>1000,21579=>1000,21580=>1000,21581=>1000,21582=>1000,21583=>1000,21584=>1000,21585=>1000,21586=>1000,21587=>1000,21588=>1000, + 21589=>1000,21590=>1000,21591=>1000,21592=>1000,21593=>1000,21594=>1000,21595=>1000,21596=>1000,21597=>1000,21598=>1000,21599=>1000,21600=>1000,21601=>1000,21602=>1000,21603=>1000,21604=>1000, + 21605=>1000,21606=>1000,21607=>1000,21608=>1000,21609=>1000,21610=>1000,21611=>1000,21612=>1000,21613=>1000,21614=>1000,21615=>1000,21616=>1000,21617=>1000,21618=>1000,21619=>1000,21620=>1000, + 21621=>1000,21622=>1000,21623=>1000,21624=>1000,21625=>1000,21626=>1000,21627=>1000,21628=>1000,21629=>1000,21630=>1000,21631=>1000,21632=>1000,21633=>1000,21634=>1000,21635=>1000,21636=>1000, + 21637=>1000,21638=>1000,21639=>1000,21640=>1000,21641=>1000,21642=>1000,21643=>1000,21644=>1000,21645=>1000,21646=>1000,21647=>1000,21648=>1000,21649=>1000,21650=>1000,21651=>1000,21652=>1000, + 21653=>1000,21654=>1000,21655=>1000,21656=>1000,21657=>1000,21658=>1000,21659=>1000,21660=>1000,21661=>1000,21662=>1000,21663=>1000,21664=>1000,21665=>1000,21666=>1000,21667=>1000,21668=>1000, + 21669=>1000,21670=>1000,21671=>1000,21672=>1000,21673=>1000,21674=>1000,21675=>1000,21676=>1000,21677=>1000,21678=>1000,21679=>1000,21680=>1000,21681=>1000,21682=>1000,21683=>1000,21684=>1000, + 21685=>1000,21686=>1000,21687=>1000,21688=>1000,21689=>1000,21690=>1000,21691=>1000,21692=>1000,21693=>1000,21694=>1000,21695=>1000,21696=>1000,21697=>1000,21698=>1000,21699=>1000,21700=>1000, + 21701=>1000,21702=>1000,21703=>1000,21704=>1000,21705=>1000,21706=>1000,21707=>1000,21708=>1000,21709=>1000,21710=>1000,21711=>1000,21712=>1000,21713=>1000,21714=>1000,21715=>1000,21716=>1000, + 21717=>1000,21718=>1000,21719=>1000,21720=>1000,21721=>1000,21722=>1000,21723=>1000,21724=>1000,21725=>1000,21726=>1000,21727=>1000,21728=>1000,21729=>1000,21730=>1000,21731=>1000,21732=>1000, + 21733=>1000,21734=>1000,21735=>1000,21736=>1000,21737=>1000,21738=>1000,21739=>1000,21740=>1000,21741=>1000,21742=>1000,21743=>1000,21744=>1000,21745=>1000,21746=>1000,21747=>1000,21748=>1000, + 21749=>1000,21750=>1000,21751=>1000,21752=>1000,21753=>1000,21754=>1000,21755=>1000,21756=>1000,21757=>1000,21758=>1000,21759=>1000,21760=>1000,21761=>1000,21762=>1000,21763=>1000,21764=>1000, + 21765=>1000,21766=>1000,21767=>1000,21768=>1000,21769=>1000,21770=>1000,21771=>1000,21772=>1000,21773=>1000,21774=>1000,21775=>1000,21776=>1000,21777=>1000,21778=>1000,21779=>1000,21780=>1000, + 21781=>1000,21782=>1000,21783=>1000,21784=>1000,21785=>1000,21786=>1000,21787=>1000,21788=>1000,21789=>1000,21790=>1000,21791=>1000,21792=>1000,21793=>1000,21794=>1000,21795=>1000,21796=>1000, + 21797=>1000,21798=>1000,21799=>1000,21800=>1000,21801=>1000,21802=>1000,21803=>1000,21804=>1000,21805=>1000,21806=>1000,21807=>1000,21808=>1000,21809=>1000,21810=>1000,21811=>1000,21812=>1000, + 21813=>1000,21814=>1000,21815=>1000,21816=>1000,21817=>1000,21818=>1000,21819=>1000,21820=>1000,21821=>1000,21822=>1000,21823=>1000,21824=>1000,21825=>1000,21826=>1000,21827=>1000,21828=>1000, + 21829=>1000,21830=>1000,21831=>1000,21832=>1000,21833=>1000,21834=>1000,21835=>1000,21836=>1000,21837=>1000,21838=>1000,21839=>1000,21840=>1000,21841=>1000,21842=>1000,21843=>1000,21844=>1000, + 21845=>1000,21846=>1000,21847=>1000,21848=>1000,21849=>1000,21850=>1000,21851=>1000,21852=>1000,21853=>1000,21854=>1000,21855=>1000,21856=>1000,21857=>1000,21858=>1000,21859=>1000,21860=>1000, + 21861=>1000,21862=>1000,21863=>1000,21864=>1000,21865=>1000,21866=>1000,21867=>1000,21868=>1000,21869=>1000,21870=>1000,21871=>1000,21872=>1000,21873=>1000,21874=>1000,21875=>1000,21876=>1000, + 21877=>1000,21878=>1000,21879=>1000,21880=>1000,21881=>1000,21882=>1000,21883=>1000,21884=>1000,21885=>1000,21886=>1000,21887=>1000,21888=>1000,21889=>1000,21890=>1000,21891=>1000,21892=>1000, + 21893=>1000,21894=>1000,21895=>1000,21896=>1000,21897=>1000,21898=>1000,21899=>1000,21900=>1000,21901=>1000,21902=>1000,21903=>1000,21904=>1000,21905=>1000,21906=>1000,21907=>1000,21908=>1000, + 21909=>1000,21910=>1000,21911=>1000,21912=>1000,21913=>1000,21914=>1000,21915=>1000,21916=>1000,21917=>1000,21918=>1000,21919=>1000,21920=>1000,21921=>1000,21922=>1000,21923=>1000,21924=>1000, + 21925=>1000,21926=>1000,21927=>1000,21928=>1000,21929=>1000,21930=>1000,21931=>1000,21932=>1000,21933=>1000,21934=>1000,21935=>1000,21936=>1000,21937=>1000,21938=>1000,21939=>1000,21940=>1000, + 21941=>1000,21942=>1000,21943=>1000,21944=>1000,21945=>1000,21946=>1000,21947=>1000,21948=>1000,21949=>1000,21950=>1000,21951=>1000,21952=>1000,21953=>1000,21954=>1000,21955=>1000,21956=>1000, + 21957=>1000,21958=>1000,21959=>1000,21960=>1000,21961=>1000,21962=>1000,21963=>1000,21964=>1000,21965=>1000,21966=>1000,21967=>1000,21968=>1000,21969=>1000,21970=>1000,21971=>1000,21972=>1000, + 21973=>1000,21974=>1000,21975=>1000,21976=>1000,21977=>1000,21978=>1000,21979=>1000,21980=>1000,21981=>1000,21982=>1000,21983=>1000,21984=>1000,21985=>1000,21986=>1000,21987=>1000,21988=>1000, + 21989=>1000,21990=>1000,21991=>1000,21992=>1000,21993=>1000,21994=>1000,21995=>1000,21996=>1000,21997=>1000,21998=>1000,21999=>1000,22000=>1000,22001=>1000,22002=>1000,22003=>1000,22004=>1000, + 22005=>1000,22006=>1000,22007=>1000,22008=>1000,22009=>1000,22010=>1000,22011=>1000,22012=>1000,22013=>1000,22014=>1000,22015=>1000,22016=>1000,22017=>1000,22018=>1000,22019=>1000,22020=>1000, + 22021=>1000,22022=>1000,22023=>1000,22024=>1000,22025=>1000,22026=>1000,22027=>1000,22028=>1000,22029=>1000,22030=>1000,22031=>1000,22032=>1000,22033=>1000,22034=>1000,22035=>1000,22036=>1000, + 22037=>1000,22038=>1000,22039=>1000,22040=>1000,22041=>1000,22042=>1000,22043=>1000,22044=>1000,22045=>1000,22046=>1000,22047=>1000,22048=>1000,22049=>1000,22050=>1000,22051=>1000,22052=>1000, + 22053=>1000,22054=>1000,22055=>1000,22056=>1000,22057=>1000,22058=>1000,22059=>1000,22060=>1000,22061=>1000,22062=>1000,22063=>1000,22064=>1000,22065=>1000,22066=>1000,22067=>1000,22068=>1000, + 22069=>1000,22070=>1000,22071=>1000,22072=>1000,22073=>1000,22074=>1000,22075=>1000,22076=>1000,22077=>1000,22078=>1000,22079=>1000,22080=>1000,22081=>1000,22082=>1000,22083=>1000,22084=>1000, + 22085=>1000,22086=>1000,22087=>1000,22088=>1000,22089=>1000,22090=>1000,22091=>1000,22092=>1000,22093=>1000,22094=>1000,22095=>1000,22096=>1000,22097=>1000,22098=>1000,22099=>1000,22100=>1000, + 22101=>1000,22102=>1000,22103=>1000,22104=>1000,22105=>1000,22106=>1000,22107=>1000,22108=>1000,22109=>1000,22110=>1000,22111=>1000,22112=>1000,22113=>1000,22114=>1000,22115=>1000,22116=>1000, + 22117=>1000,22118=>1000,22119=>1000,22120=>1000,22121=>1000,22122=>1000,22123=>1000,22124=>1000,22125=>1000,22126=>1000,22127=>1000,22128=>1000,22129=>1000,22130=>1000,22131=>1000,22132=>1000, + 22133=>1000,22134=>1000,22135=>1000,22136=>1000,22137=>1000,22138=>1000,22139=>1000,22140=>1000,22141=>1000,22142=>1000,22143=>1000,22144=>1000,22145=>1000,22146=>1000,22147=>1000,22148=>1000, + 22149=>1000,22150=>1000,22151=>1000,22152=>1000,22153=>1000,22154=>1000,22155=>1000,22156=>1000,22157=>1000,22158=>1000,22159=>1000,22160=>1000,22161=>1000,22162=>1000,22163=>1000,22164=>1000, + 22165=>1000,22166=>1000,22167=>1000,22168=>1000,22169=>1000,22170=>1000,22171=>1000,22172=>1000,22173=>1000,22174=>1000,22175=>1000,22176=>1000,22177=>1000,22178=>1000,22179=>1000,22180=>1000, + 22181=>1000,22182=>1000,22183=>1000,22184=>1000,22185=>1000,22186=>1000,22187=>1000,22188=>1000,22189=>1000,22190=>1000,22191=>1000,22192=>1000,22193=>1000,22194=>1000,22195=>1000,22196=>1000, + 22197=>1000,22198=>1000,22199=>1000,22200=>1000,22201=>1000,22202=>1000,22203=>1000,22204=>1000,22205=>1000,22206=>1000,22207=>1000,22208=>1000,22209=>1000,22210=>1000,22211=>1000,22212=>1000, + 22213=>1000,22214=>1000,22215=>1000,22216=>1000,22217=>1000,22218=>1000,22219=>1000,22220=>1000,22221=>1000,22222=>1000,22223=>1000,22224=>1000,22225=>1000,22226=>1000,22227=>1000,22228=>1000, + 22229=>1000,22230=>1000,22231=>1000,22232=>1000,22233=>1000,22234=>1000,22235=>1000,22236=>1000,22237=>1000,22238=>1000,22239=>1000,22240=>1000,22241=>1000,22242=>1000,22243=>1000,22244=>1000, + 22245=>1000,22246=>1000,22247=>1000,22248=>1000,22249=>1000,22250=>1000,22251=>1000,22252=>1000,22253=>1000,22254=>1000,22255=>1000,22256=>1000,22257=>1000,22258=>1000,22259=>1000,22260=>1000, + 22261=>1000,22262=>1000,22263=>1000,22264=>1000,22265=>1000,22266=>1000,22267=>1000,22268=>1000,22269=>1000,22270=>1000,22271=>1000,22272=>1000,22273=>1000,22274=>1000,22275=>1000,22276=>1000, + 22277=>1000,22278=>1000,22279=>1000,22280=>1000,22281=>1000,22282=>1000,22283=>1000,22284=>1000,22285=>1000,22286=>1000,22287=>1000,22288=>1000,22289=>1000,22290=>1000,22291=>1000,22292=>1000, + 22293=>1000,22294=>1000,22295=>1000,22296=>1000,22297=>1000,22298=>1000,22299=>1000,22300=>1000,22301=>1000,22302=>1000,22303=>1000,22304=>1000,22305=>1000,22306=>1000,22307=>1000,22308=>1000, + 22309=>1000,22310=>1000,22311=>1000,22312=>1000,22313=>1000,22314=>1000,22315=>1000,22316=>1000,22317=>1000,22318=>1000,22319=>1000,22320=>1000,22321=>1000,22322=>1000,22323=>1000,22324=>1000, + 22325=>1000,22326=>1000,22327=>1000,22328=>1000,22329=>1000,22330=>1000,22331=>1000,22332=>1000,22333=>1000,22334=>1000,22335=>1000,22336=>1000,22337=>1000,22338=>1000,22339=>1000,22340=>1000, + 22341=>1000,22342=>1000,22343=>1000,22344=>1000,22345=>1000,22346=>1000,22347=>1000,22348=>1000,22349=>1000,22350=>1000,22351=>1000,22352=>1000,22353=>1000,22354=>1000,22355=>1000,22356=>1000, + 22357=>1000,22358=>1000,22359=>1000,22360=>1000,22361=>1000,22362=>1000,22363=>1000,22364=>1000,22365=>1000,22366=>1000,22367=>1000,22368=>1000,22369=>1000,22370=>1000,22371=>1000,22372=>1000, + 22373=>1000,22374=>1000,22375=>1000,22376=>1000,22377=>1000,22378=>1000,22379=>1000,22380=>1000,22381=>1000,22382=>1000,22383=>1000,22384=>1000,22385=>1000,22386=>1000,22387=>1000,22388=>1000, + 22389=>1000,22390=>1000,22391=>1000,22392=>1000,22393=>1000,22394=>1000,22395=>1000,22396=>1000,22397=>1000,22398=>1000,22399=>1000,22400=>1000,22401=>1000,22402=>1000,22403=>1000,22404=>1000, + 22405=>1000,22406=>1000,22407=>1000,22408=>1000,22409=>1000,22410=>1000,22411=>1000,22412=>1000,22413=>1000,22414=>1000,22415=>1000,22416=>1000,22417=>1000,22418=>1000,22419=>1000,22420=>1000, + 22421=>1000,22422=>1000,22423=>1000,22424=>1000,22425=>1000,22426=>1000,22427=>1000,22428=>1000,22429=>1000,22430=>1000,22431=>1000,22432=>1000,22433=>1000,22434=>1000,22435=>1000,22436=>1000, + 22437=>1000,22438=>1000,22439=>1000,22440=>1000,22441=>1000,22442=>1000,22443=>1000,22444=>1000,22445=>1000,22446=>1000,22447=>1000,22448=>1000,22449=>1000,22450=>1000,22451=>1000,22452=>1000, + 22453=>1000,22454=>1000,22455=>1000,22456=>1000,22457=>1000,22458=>1000,22459=>1000,22460=>1000,22461=>1000,22462=>1000,22463=>1000,22464=>1000,22465=>1000,22466=>1000,22467=>1000,22468=>1000, + 22469=>1000,22470=>1000,22471=>1000,22472=>1000,22473=>1000,22474=>1000,22475=>1000,22476=>1000,22477=>1000,22478=>1000,22479=>1000,22480=>1000,22481=>1000,22482=>1000,22483=>1000,22484=>1000, + 22485=>1000,22486=>1000,22487=>1000,22488=>1000,22489=>1000,22490=>1000,22491=>1000,22492=>1000,22493=>1000,22494=>1000,22495=>1000,22496=>1000,22497=>1000,22498=>1000,22499=>1000,22500=>1000, + 22501=>1000,22502=>1000,22503=>1000,22504=>1000,22505=>1000,22506=>1000,22507=>1000,22508=>1000,22509=>1000,22510=>1000,22511=>1000,22512=>1000,22513=>1000,22514=>1000,22515=>1000,22516=>1000, + 22517=>1000,22518=>1000,22519=>1000,22520=>1000,22521=>1000,22522=>1000,22523=>1000,22524=>1000,22525=>1000,22526=>1000,22527=>1000,22528=>1000,22529=>1000,22530=>1000,22531=>1000,22532=>1000, + 22533=>1000,22534=>1000,22535=>1000,22536=>1000,22537=>1000,22538=>1000,22539=>1000,22540=>1000,22541=>1000,22542=>1000,22543=>1000,22544=>1000,22545=>1000,22546=>1000,22547=>1000,22548=>1000, + 22549=>1000,22550=>1000,22551=>1000,22552=>1000,22553=>1000,22554=>1000,22555=>1000,22556=>1000,22557=>1000,22558=>1000,22559=>1000,22560=>1000,22561=>1000,22562=>1000,22563=>1000,22564=>1000, + 22565=>1000,22566=>1000,22567=>1000,22568=>1000,22569=>1000,22570=>1000,22571=>1000,22572=>1000,22573=>1000,22574=>1000,22575=>1000,22576=>1000,22577=>1000,22578=>1000,22579=>1000,22580=>1000, + 22581=>1000,22582=>1000,22583=>1000,22584=>1000,22585=>1000,22586=>1000,22587=>1000,22588=>1000,22589=>1000,22590=>1000,22591=>1000,22592=>1000,22593=>1000,22594=>1000,22595=>1000,22596=>1000, + 22597=>1000,22598=>1000,22599=>1000,22600=>1000,22601=>1000,22602=>1000,22603=>1000,22604=>1000,22605=>1000,22606=>1000,22607=>1000,22608=>1000,22609=>1000,22610=>1000,22611=>1000,22612=>1000, + 22613=>1000,22614=>1000,22615=>1000,22616=>1000,22617=>1000,22618=>1000,22619=>1000,22620=>1000,22621=>1000,22622=>1000,22623=>1000,22624=>1000,22625=>1000,22626=>1000,22627=>1000,22628=>1000, + 22629=>1000,22630=>1000,22631=>1000,22632=>1000,22633=>1000,22634=>1000,22635=>1000,22636=>1000,22637=>1000,22638=>1000,22639=>1000,22640=>1000,22641=>1000,22642=>1000,22643=>1000,22644=>1000, + 22645=>1000,22646=>1000,22647=>1000,22648=>1000,22649=>1000,22650=>1000,22651=>1000,22652=>1000,22653=>1000,22654=>1000,22655=>1000,22656=>1000,22657=>1000,22658=>1000,22659=>1000,22660=>1000, + 22661=>1000,22662=>1000,22663=>1000,22664=>1000,22665=>1000,22666=>1000,22667=>1000,22668=>1000,22669=>1000,22670=>1000,22671=>1000,22672=>1000,22673=>1000,22674=>1000,22675=>1000,22676=>1000, + 22677=>1000,22678=>1000,22679=>1000,22680=>1000,22681=>1000,22682=>1000,22683=>1000,22684=>1000,22685=>1000,22686=>1000,22687=>1000,22688=>1000,22689=>1000,22690=>1000,22691=>1000,22692=>1000, + 22693=>1000,22694=>1000,22695=>1000,22696=>1000,22697=>1000,22698=>1000,22699=>1000,22700=>1000,22701=>1000,22702=>1000,22703=>1000,22704=>1000,22705=>1000,22706=>1000,22707=>1000,22708=>1000, + 22709=>1000,22710=>1000,22711=>1000,22712=>1000,22713=>1000,22714=>1000,22715=>1000,22716=>1000,22717=>1000,22718=>1000,22719=>1000,22720=>1000,22721=>1000,22722=>1000,22723=>1000,22724=>1000, + 22725=>1000,22726=>1000,22727=>1000,22728=>1000,22729=>1000,22730=>1000,22731=>1000,22732=>1000,22733=>1000,22734=>1000,22735=>1000,22736=>1000,22737=>1000,22738=>1000,22739=>1000,22740=>1000, + 22741=>1000,22742=>1000,22743=>1000,22744=>1000,22745=>1000,22746=>1000,22747=>1000,22748=>1000,22749=>1000,22750=>1000,22751=>1000,22752=>1000,22753=>1000,22754=>1000,22755=>1000,22756=>1000, + 22757=>1000,22758=>1000,22759=>1000,22760=>1000,22761=>1000,22762=>1000,22763=>1000,22764=>1000,22765=>1000,22766=>1000,22767=>1000,22768=>1000,22769=>1000,22770=>1000,22771=>1000,22772=>1000, + 22773=>1000,22774=>1000,22775=>1000,22776=>1000,22777=>1000,22778=>1000,22779=>1000,22780=>1000,22781=>1000,22782=>1000,22783=>1000,22784=>1000,22785=>1000,22786=>1000,22787=>1000,22788=>1000, + 22789=>1000,22790=>1000,22791=>1000,22792=>1000,22793=>1000,22794=>1000,22795=>1000,22796=>1000,22797=>1000,22798=>1000,22799=>1000,22800=>1000,22801=>1000,22802=>1000,22803=>1000,22804=>1000, + 22805=>1000,22806=>1000,22807=>1000,22808=>1000,22809=>1000,22810=>1000,22811=>1000,22812=>1000,22813=>1000,22814=>1000,22815=>1000,22816=>1000,22817=>1000,22818=>1000,22819=>1000,22820=>1000, + 22821=>1000,22822=>1000,22823=>1000,22824=>1000,22825=>1000,22826=>1000,22827=>1000,22828=>1000,22829=>1000,22830=>1000,22831=>1000,22832=>1000,22833=>1000,22834=>1000,22835=>1000,22836=>1000, + 22837=>1000,22838=>1000,22839=>1000,22840=>1000,22841=>1000,22842=>1000,22843=>1000,22844=>1000,22845=>1000,22846=>1000,22847=>1000,22848=>1000,22849=>1000,22850=>1000,22851=>1000,22852=>1000, + 22853=>1000,22854=>1000,22855=>1000,22856=>1000,22857=>1000,22858=>1000,22859=>1000,22860=>1000,22861=>1000,22862=>1000,22863=>1000,22864=>1000,22865=>1000,22866=>1000,22867=>1000,22868=>1000, + 22869=>1000,22870=>1000,22871=>1000,22872=>1000,22873=>1000,22874=>1000,22875=>1000,22876=>1000,22877=>1000,22878=>1000,22879=>1000,22880=>1000,22881=>1000,22882=>1000,22883=>1000,22884=>1000, + 22885=>1000,22886=>1000,22887=>1000,22888=>1000,22889=>1000,22890=>1000,22891=>1000,22892=>1000,22893=>1000,22894=>1000,22895=>1000,22896=>1000,22897=>1000,22898=>1000,22899=>1000,22900=>1000, + 22901=>1000,22902=>1000,22903=>1000,22904=>1000,22905=>1000,22906=>1000,22907=>1000,22908=>1000,22909=>1000,22910=>1000,22911=>1000,22912=>1000,22913=>1000,22914=>1000,22915=>1000,22916=>1000, + 22917=>1000,22918=>1000,22919=>1000,22920=>1000,22921=>1000,22922=>1000,22923=>1000,22924=>1000,22925=>1000,22926=>1000,22927=>1000,22928=>1000,22929=>1000,22930=>1000,22931=>1000,22932=>1000, + 22933=>1000,22934=>1000,22935=>1000,22936=>1000,22937=>1000,22938=>1000,22939=>1000,22940=>1000,22941=>1000,22942=>1000,22943=>1000,22944=>1000,22945=>1000,22946=>1000,22947=>1000,22948=>1000, + 22949=>1000,22950=>1000,22951=>1000,22952=>1000,22953=>1000,22954=>1000,22955=>1000,22956=>1000,22957=>1000,22958=>1000,22959=>1000,22960=>1000,22961=>1000,22962=>1000,22963=>1000,22964=>1000, + 22965=>1000,22966=>1000,22967=>1000,22968=>1000,22969=>1000,22970=>1000,22971=>1000,22972=>1000,22973=>1000,22974=>1000,22975=>1000,22976=>1000,22977=>1000,22978=>1000,22979=>1000,22980=>1000, + 22981=>1000,22982=>1000,22983=>1000,22984=>1000,22985=>1000,22986=>1000,22987=>1000,22988=>1000,22989=>1000,22990=>1000,22991=>1000,22992=>1000,22993=>1000,22994=>1000,22995=>1000,22996=>1000, + 22997=>1000,22998=>1000,22999=>1000,23000=>1000,23001=>1000,23002=>1000,23003=>1000,23004=>1000,23005=>1000,23006=>1000,23007=>1000,23008=>1000,23009=>1000,23010=>1000,23011=>1000,23012=>1000, + 23013=>1000,23014=>1000,23015=>1000,23016=>1000,23017=>1000,23018=>1000,23019=>1000,23020=>1000,23021=>1000,23022=>1000,23023=>1000,23024=>1000,23025=>1000,23026=>1000,23027=>1000,23028=>1000, + 23029=>1000,23030=>1000,23031=>1000,23032=>1000,23033=>1000,23034=>1000,23035=>1000,23036=>1000,23037=>1000,23038=>1000,23039=>1000,23040=>1000,23041=>1000,23042=>1000,23043=>1000,23044=>1000, + 23045=>1000,23046=>1000,23047=>1000,23048=>1000,23049=>1000,23050=>1000,23051=>1000,23052=>1000,23053=>1000,23054=>1000,23055=>1000,23056=>1000,23057=>1000,23058=>1000,23059=>1000,23060=>1000, + 23061=>1000,23062=>1000,23063=>1000,23064=>1000,23065=>1000,23066=>1000,23067=>1000,23068=>1000,23069=>1000,23070=>1000,23071=>1000,23072=>1000,23073=>1000,23074=>1000,23075=>1000,23076=>1000, + 23077=>1000,23078=>1000,23079=>1000,23080=>1000,23081=>1000,23082=>1000,23083=>1000,23084=>1000,23085=>1000,23086=>1000,23087=>1000,23088=>1000,23089=>1000,23090=>1000,23091=>1000,23092=>1000, + 23093=>1000,23094=>1000,23095=>1000,23096=>1000,23097=>1000,23098=>1000,23099=>1000,23100=>1000,23101=>1000,23102=>1000,23103=>1000,23104=>1000,23105=>1000,23106=>1000,23107=>1000,23108=>1000, + 23109=>1000,23110=>1000,23111=>1000,23112=>1000,23113=>1000,23114=>1000,23115=>1000,23116=>1000,23117=>1000,23118=>1000,23119=>1000,23120=>1000,23121=>1000,23122=>1000,23123=>1000,23124=>1000, + 23125=>1000,23126=>1000,23127=>1000,23128=>1000,23129=>1000,23130=>1000,23131=>1000,23132=>1000,23133=>1000,23134=>1000,23135=>1000,23136=>1000,23137=>1000,23138=>1000,23139=>1000,23140=>1000, + 23141=>1000,23142=>1000,23143=>1000,23144=>1000,23145=>1000,23146=>1000,23147=>1000,23148=>1000,23149=>1000,23150=>1000,23151=>1000,23152=>1000,23153=>1000,23154=>1000,23155=>1000,23156=>1000, + 23157=>1000,23158=>1000,23159=>1000,23160=>1000,23161=>1000,23162=>1000,23163=>1000,23164=>1000,23165=>1000,23166=>1000,23167=>1000,23168=>1000,23169=>1000,23170=>1000,23171=>1000,23172=>1000, + 23173=>1000,23174=>1000,23175=>1000,23176=>1000,23177=>1000,23178=>1000,23179=>1000,23180=>1000,23181=>1000,23182=>1000,23183=>1000,23184=>1000,23185=>1000,23186=>1000,23187=>1000,23188=>1000, + 23189=>1000,23190=>1000,23191=>1000,23192=>1000,23193=>1000,23194=>1000,23195=>1000,23196=>1000,23197=>1000,23198=>1000,23199=>1000,23200=>1000,23201=>1000,23202=>1000,23203=>1000,23204=>1000, + 23205=>1000,23206=>1000,23207=>1000,23208=>1000,23209=>1000,23210=>1000,23211=>1000,23212=>1000,23213=>1000,23214=>1000,23215=>1000,23216=>1000,23217=>1000,23218=>1000,23219=>1000,23220=>1000, + 23221=>1000,23222=>1000,23223=>1000,23224=>1000,23225=>1000,23226=>1000,23227=>1000,23228=>1000,23229=>1000,23230=>1000,23231=>1000,23232=>1000,23233=>1000,23234=>1000,23235=>1000,23236=>1000, + 23237=>1000,23238=>1000,23239=>1000,23240=>1000,23241=>1000,23242=>1000,23243=>1000,23244=>1000,23245=>1000,23246=>1000,23247=>1000,23248=>1000,23249=>1000,23250=>1000,23251=>1000,23252=>1000, + 23253=>1000,23254=>1000,23255=>1000,23256=>1000,23257=>1000,23258=>1000,23259=>1000,23260=>1000,23261=>1000,23262=>1000,23263=>1000,23264=>1000,23265=>1000,23266=>1000,23267=>1000,23268=>1000, + 23269=>1000,23270=>1000,23271=>1000,23272=>1000,23273=>1000,23274=>1000,23275=>1000,23276=>1000,23277=>1000,23278=>1000,23279=>1000,23280=>1000,23281=>1000,23282=>1000,23283=>1000,23284=>1000, + 23285=>1000,23286=>1000,23287=>1000,23288=>1000,23289=>1000,23290=>1000,23291=>1000,23292=>1000,23293=>1000,23294=>1000,23295=>1000,23296=>1000,23297=>1000,23298=>1000,23299=>1000,23300=>1000, + 23301=>1000,23302=>1000,23303=>1000,23304=>1000,23305=>1000,23306=>1000,23307=>1000,23308=>1000,23309=>1000,23310=>1000,23311=>1000,23312=>1000,23313=>1000,23314=>1000,23315=>1000,23316=>1000, + 23317=>1000,23318=>1000,23319=>1000,23320=>1000,23321=>1000,23322=>1000,23323=>1000,23324=>1000,23325=>1000,23326=>1000,23327=>1000,23328=>1000,23329=>1000,23330=>1000,23331=>1000,23332=>1000, + 23333=>1000,23334=>1000,23335=>1000,23336=>1000,23337=>1000,23338=>1000,23339=>1000,23340=>1000,23341=>1000,23342=>1000,23343=>1000,23344=>1000,23345=>1000,23346=>1000,23347=>1000,23348=>1000, + 23349=>1000,23350=>1000,23351=>1000,23352=>1000,23353=>1000,23354=>1000,23355=>1000,23356=>1000,23357=>1000,23358=>1000,23359=>1000,23360=>1000,23361=>1000,23362=>1000,23363=>1000,23364=>1000, + 23365=>1000,23366=>1000,23367=>1000,23368=>1000,23369=>1000,23370=>1000,23371=>1000,23372=>1000,23373=>1000,23374=>1000,23375=>1000,23376=>1000,23377=>1000,23378=>1000,23379=>1000,23380=>1000, + 23381=>1000,23382=>1000,23383=>1000,23384=>1000,23385=>1000,23386=>1000,23387=>1000,23388=>1000,23389=>1000,23390=>1000,23391=>1000,23392=>1000,23393=>1000,23394=>1000,23395=>1000,23396=>1000, + 23397=>1000,23398=>1000,23399=>1000,23400=>1000,23401=>1000,23402=>1000,23403=>1000,23404=>1000,23405=>1000,23406=>1000,23407=>1000,23408=>1000,23409=>1000,23410=>1000,23411=>1000,23412=>1000, + 23413=>1000,23414=>1000,23415=>1000,23416=>1000,23417=>1000,23418=>1000,23419=>1000,23420=>1000,23421=>1000,23422=>1000,23423=>1000,23424=>1000,23425=>1000,23426=>1000,23427=>1000,23428=>1000, + 23429=>1000,23430=>1000,23431=>1000,23432=>1000,23433=>1000,23434=>1000,23435=>1000,23436=>1000,23437=>1000,23438=>1000,23439=>1000,23440=>1000,23441=>1000,23442=>1000,23443=>1000,23444=>1000, + 23445=>1000,23446=>1000,23447=>1000,23448=>1000,23449=>1000,23450=>1000,23451=>1000,23452=>1000,23453=>1000,23454=>1000,23455=>1000,23456=>1000,23457=>1000,23458=>1000,23459=>1000,23460=>1000, + 23461=>1000,23462=>1000,23463=>1000,23464=>1000,23465=>1000,23466=>1000,23467=>1000,23468=>1000,23469=>1000,23470=>1000,23471=>1000,23472=>1000,23473=>1000,23474=>1000,23475=>1000,23476=>1000, + 23477=>1000,23478=>1000,23479=>1000,23480=>1000,23481=>1000,23482=>1000,23483=>1000,23484=>1000,23485=>1000,23486=>1000,23487=>1000,23488=>1000,23489=>1000,23490=>1000,23491=>1000,23492=>1000, + 23493=>1000,23494=>1000,23495=>1000,23496=>1000,23497=>1000,23498=>1000,23499=>1000,23500=>1000,23501=>1000,23502=>1000,23503=>1000,23504=>1000,23505=>1000,23506=>1000,23507=>1000,23508=>1000, + 23509=>1000,23510=>1000,23511=>1000,23512=>1000,23513=>1000,23514=>1000,23515=>1000,23516=>1000,23517=>1000,23518=>1000,23519=>1000,23520=>1000,23521=>1000,23522=>1000,23523=>1000,23524=>1000, + 23525=>1000,23526=>1000,23527=>1000,23528=>1000,23529=>1000,23530=>1000,23531=>1000,23532=>1000,23533=>1000,23534=>1000,23535=>1000,23536=>1000,23537=>1000,23538=>1000,23539=>1000,23540=>1000, + 23541=>1000,23542=>1000,23543=>1000,23544=>1000,23545=>1000,23546=>1000,23547=>1000,23548=>1000,23549=>1000,23550=>1000,23551=>1000,23552=>1000,23553=>1000,23554=>1000,23555=>1000,23556=>1000, + 23557=>1000,23558=>1000,23559=>1000,23560=>1000,23561=>1000,23562=>1000,23563=>1000,23564=>1000,23565=>1000,23566=>1000,23567=>1000,23568=>1000,23569=>1000,23570=>1000,23571=>1000,23572=>1000, + 23573=>1000,23574=>1000,23575=>1000,23576=>1000,23577=>1000,23578=>1000,23579=>1000,23580=>1000,23581=>1000,23582=>1000,23583=>1000,23584=>1000,23585=>1000,23586=>1000,23587=>1000,23588=>1000, + 23589=>1000,23590=>1000,23591=>1000,23592=>1000,23593=>1000,23594=>1000,23595=>1000,23596=>1000,23597=>1000,23598=>1000,23599=>1000,23600=>1000,23601=>1000,23602=>1000,23603=>1000,23604=>1000, + 23605=>1000,23606=>1000,23607=>1000,23608=>1000,23609=>1000,23610=>1000,23611=>1000,23612=>1000,23613=>1000,23614=>1000,23615=>1000,23616=>1000,23617=>1000,23618=>1000,23619=>1000,23620=>1000, + 23621=>1000,23622=>1000,23623=>1000,23624=>1000,23625=>1000,23626=>1000,23627=>1000,23628=>1000,23629=>1000,23630=>1000,23631=>1000,23632=>1000,23633=>1000,23634=>1000,23635=>1000,23636=>1000, + 23637=>1000,23638=>1000,23639=>1000,23640=>1000,23641=>1000,23642=>1000,23643=>1000,23644=>1000,23645=>1000,23646=>1000,23647=>1000,23648=>1000,23649=>1000,23650=>1000,23651=>1000,23652=>1000, + 23653=>1000,23654=>1000,23655=>1000,23656=>1000,23657=>1000,23658=>1000,23659=>1000,23660=>1000,23661=>1000,23662=>1000,23663=>1000,23664=>1000,23665=>1000,23666=>1000,23667=>1000,23668=>1000, + 23669=>1000,23670=>1000,23671=>1000,23672=>1000,23673=>1000,23674=>1000,23675=>1000,23676=>1000,23677=>1000,23678=>1000,23679=>1000,23680=>1000,23681=>1000,23682=>1000,23683=>1000,23684=>1000, + 23685=>1000,23686=>1000,23687=>1000,23688=>1000,23689=>1000,23690=>1000,23691=>1000,23692=>1000,23693=>1000,23694=>1000,23695=>1000,23696=>1000,23697=>1000,23698=>1000,23699=>1000,23700=>1000, + 23701=>1000,23702=>1000,23703=>1000,23704=>1000,23705=>1000,23706=>1000,23707=>1000,23708=>1000,23709=>1000,23710=>1000,23711=>1000,23712=>1000,23713=>1000,23714=>1000,23715=>1000,23716=>1000, + 23717=>1000,23718=>1000,23719=>1000,23720=>1000,23721=>1000,23722=>1000,23723=>1000,23724=>1000,23725=>1000,23726=>1000,23727=>1000,23728=>1000,23729=>1000,23730=>1000,23731=>1000,23732=>1000, + 23733=>1000,23734=>1000,23735=>1000,23736=>1000,23737=>1000,23738=>1000,23739=>1000,23740=>1000,23741=>1000,23742=>1000,23743=>1000,23744=>1000,23745=>1000,23746=>1000,23747=>1000,23748=>1000, + 23749=>1000,23750=>1000,23751=>1000,23752=>1000,23753=>1000,23754=>1000,23755=>1000,23756=>1000,23757=>1000,23758=>1000,23759=>1000,23760=>1000,23761=>1000,23762=>1000,23763=>1000,23764=>1000, + 23765=>1000,23766=>1000,23767=>1000,23768=>1000,23769=>1000,23770=>1000,23771=>1000,23772=>1000,23773=>1000,23774=>1000,23775=>1000,23776=>1000,23777=>1000,23778=>1000,23779=>1000,23780=>1000, + 23781=>1000,23782=>1000,23783=>1000,23784=>1000,23785=>1000,23786=>1000,23787=>1000,23788=>1000,23789=>1000,23790=>1000,23791=>1000,23792=>1000,23793=>1000,23794=>1000,23795=>1000,23796=>1000, + 23797=>1000,23798=>1000,23799=>1000,23800=>1000,23801=>1000,23802=>1000,23803=>1000,23804=>1000,23805=>1000,23806=>1000,23807=>1000,23808=>1000,23809=>1000,23810=>1000,23811=>1000,23812=>1000, + 23813=>1000,23814=>1000,23815=>1000,23816=>1000,23817=>1000,23818=>1000,23819=>1000,23820=>1000,23821=>1000,23822=>1000,23823=>1000,23824=>1000,23825=>1000,23826=>1000,23827=>1000,23828=>1000, + 23829=>1000,23830=>1000,23831=>1000,23832=>1000,23833=>1000,23834=>1000,23835=>1000,23836=>1000,23837=>1000,23838=>1000,23839=>1000,23840=>1000,23841=>1000,23842=>1000,23843=>1000,23844=>1000, + 23845=>1000,23846=>1000,23847=>1000,23848=>1000,23849=>1000,23850=>1000,23851=>1000,23852=>1000,23853=>1000,23854=>1000,23855=>1000,23856=>1000,23857=>1000,23858=>1000,23859=>1000,23860=>1000, + 23861=>1000,23862=>1000,23863=>1000,23864=>1000,23865=>1000,23866=>1000,23867=>1000,23868=>1000,23869=>1000,23870=>1000,23871=>1000,23872=>1000,23873=>1000,23874=>1000,23875=>1000,23876=>1000, + 23877=>1000,23878=>1000,23879=>1000,23880=>1000,23881=>1000,23882=>1000,23883=>1000,23884=>1000,23885=>1000,23886=>1000,23887=>1000,23888=>1000,23889=>1000,23890=>1000,23891=>1000,23892=>1000, + 23893=>1000,23894=>1000,23895=>1000,23896=>1000,23897=>1000,23898=>1000,23899=>1000,23900=>1000,23901=>1000,23902=>1000,23903=>1000,23904=>1000,23905=>1000,23906=>1000,23907=>1000,23908=>1000, + 23909=>1000,23910=>1000,23911=>1000,23912=>1000,23913=>1000,23914=>1000,23915=>1000,23916=>1000,23917=>1000,23918=>1000,23919=>1000,23920=>1000,23921=>1000,23922=>1000,23923=>1000,23924=>1000, + 23925=>1000,23926=>1000,23927=>1000,23928=>1000,23929=>1000,23930=>1000,23931=>1000,23932=>1000,23933=>1000,23934=>1000,23935=>1000,23936=>1000,23937=>1000,23938=>1000,23939=>1000,23940=>1000, + 23941=>1000,23942=>1000,23943=>1000,23944=>1000,23945=>1000,23946=>1000,23947=>1000,23948=>1000,23949=>1000,23950=>1000,23951=>1000,23952=>1000,23953=>1000,23954=>1000,23955=>1000,23956=>1000, + 23957=>1000,23958=>1000,23959=>1000,23960=>1000,23961=>1000,23962=>1000,23963=>1000,23964=>1000,23965=>1000,23966=>1000,23967=>1000,23968=>1000,23969=>1000,23970=>1000,23971=>1000,23972=>1000, + 23973=>1000,23974=>1000,23975=>1000,23976=>1000,23977=>1000,23978=>1000,23979=>1000,23980=>1000,23981=>1000,23982=>1000,23983=>1000,23984=>1000,23985=>1000,23986=>1000,23987=>1000,23988=>1000, + 23989=>1000,23990=>1000,23991=>1000,23992=>1000,23993=>1000,23994=>1000,23995=>1000,23996=>1000,23997=>1000,23998=>1000,23999=>1000,24000=>1000,24001=>1000,24002=>1000,24003=>1000,24004=>1000, + 24005=>1000,24006=>1000,24007=>1000,24008=>1000,24009=>1000,24010=>1000,24011=>1000,24012=>1000,24013=>1000,24014=>1000,24015=>1000,24016=>1000,24017=>1000,24018=>1000,24019=>1000,24020=>1000, + 24021=>1000,24022=>1000,24023=>1000,24024=>1000,24025=>1000,24026=>1000,24027=>1000,24028=>1000,24029=>1000,24030=>1000,24031=>1000,24032=>1000,24033=>1000,24034=>1000,24035=>1000,24036=>1000, + 24037=>1000,24038=>1000,24039=>1000,24040=>1000,24041=>1000,24042=>1000,24043=>1000,24044=>1000,24045=>1000,24046=>1000,24047=>1000,24048=>1000,24049=>1000,24050=>1000,24051=>1000,24052=>1000, + 24053=>1000,24054=>1000,24055=>1000,24056=>1000,24057=>1000,24058=>1000,24059=>1000,24060=>1000,24061=>1000,24062=>1000,24063=>1000,24064=>1000,24065=>1000,24066=>1000,24067=>1000,24068=>1000, + 24069=>1000,24070=>1000,24071=>1000,24072=>1000,24073=>1000,24074=>1000,24075=>1000,24076=>1000,24077=>1000,24078=>1000,24079=>1000,24080=>1000,24081=>1000,24082=>1000,24083=>1000,24084=>1000, + 24085=>1000,24086=>1000,24087=>1000,24088=>1000,24089=>1000,24090=>1000,24091=>1000,24092=>1000,24093=>1000,24094=>1000,24095=>1000,24096=>1000,24097=>1000,24098=>1000,24099=>1000,24100=>1000, + 24101=>1000,24102=>1000,24103=>1000,24104=>1000,24105=>1000,24106=>1000,24107=>1000,24108=>1000,24109=>1000,24110=>1000,24111=>1000,24112=>1000,24113=>1000,24114=>1000,24115=>1000,24116=>1000, + 24117=>1000,24118=>1000,24119=>1000,24120=>1000,24121=>1000,24122=>1000,24123=>1000,24124=>1000,24125=>1000,24126=>1000,24127=>1000,24128=>1000,24129=>1000,24130=>1000,24131=>1000,24132=>1000, + 24133=>1000,24134=>1000,24135=>1000,24136=>1000,24137=>1000,24138=>1000,24139=>1000,24140=>1000,24141=>1000,24142=>1000,24143=>1000,24144=>1000,24145=>1000,24146=>1000,24147=>1000,24148=>1000, + 24149=>1000,24150=>1000,24151=>1000,24152=>1000,24153=>1000,24154=>1000,24155=>1000,24156=>1000,24157=>1000,24158=>1000,24159=>1000,24160=>1000,24161=>1000,24162=>1000,24163=>1000,24164=>1000, + 24165=>1000,24166=>1000,24167=>1000,24168=>1000,24169=>1000,24170=>1000,24171=>1000,24172=>1000,24173=>1000,24174=>1000,24175=>1000,24176=>1000,24177=>1000,24178=>1000,24179=>1000,24180=>1000, + 24181=>1000,24182=>1000,24183=>1000,24184=>1000,24185=>1000,24186=>1000,24187=>1000,24188=>1000,24189=>1000,24190=>1000,24191=>1000,24192=>1000,24193=>1000,24194=>1000,24195=>1000,24196=>1000, + 24197=>1000,24198=>1000,24199=>1000,24200=>1000,24201=>1000,24202=>1000,24203=>1000,24204=>1000,24205=>1000,24206=>1000,24207=>1000,24208=>1000,24209=>1000,24210=>1000,24211=>1000,24212=>1000, + 24213=>1000,24214=>1000,24215=>1000,24216=>1000,24217=>1000,24218=>1000,24219=>1000,24220=>1000,24221=>1000,24222=>1000,24223=>1000,24224=>1000,24225=>1000,24226=>1000,24227=>1000,24228=>1000, + 24229=>1000,24230=>1000,24231=>1000,24232=>1000,24233=>1000,24234=>1000,24235=>1000,24236=>1000,24237=>1000,24238=>1000,24239=>1000,24240=>1000,24241=>1000,24242=>1000,24243=>1000,24244=>1000, + 24245=>1000,24246=>1000,24247=>1000,24248=>1000,24249=>1000,24250=>1000,24251=>1000,24252=>1000,24253=>1000,24254=>1000,24255=>1000,24256=>1000,24257=>1000,24258=>1000,24259=>1000,24260=>1000, + 24261=>1000,24262=>1000,24263=>1000,24264=>1000,24265=>1000,24266=>1000,24267=>1000,24268=>1000,24269=>1000,24270=>1000,24271=>1000,24272=>1000,24273=>1000,24274=>1000,24275=>1000,24276=>1000, + 24277=>1000,24278=>1000,24279=>1000,24280=>1000,24281=>1000,24282=>1000,24283=>1000,24284=>1000,24285=>1000,24286=>1000,24287=>1000,24288=>1000,24289=>1000,24290=>1000,24291=>1000,24292=>1000, + 24293=>1000,24294=>1000,24295=>1000,24296=>1000,24297=>1000,24298=>1000,24299=>1000,24300=>1000,24301=>1000,24302=>1000,24303=>1000,24304=>1000,24305=>1000,24306=>1000,24307=>1000,24308=>1000, + 24309=>1000,24310=>1000,24311=>1000,24312=>1000,24313=>1000,24314=>1000,24315=>1000,24316=>1000,24317=>1000,24318=>1000,24319=>1000,24320=>1000,24321=>1000,24322=>1000,24323=>1000,24324=>1000, + 24325=>1000,24326=>1000,24327=>1000,24328=>1000,24329=>1000,24330=>1000,24331=>1000,24332=>1000,24333=>1000,24334=>1000,24335=>1000,24336=>1000,24337=>1000,24338=>1000,24339=>1000,24340=>1000, + 24341=>1000,24342=>1000,24343=>1000,24344=>1000,24345=>1000,24346=>1000,24347=>1000,24348=>1000,24349=>1000,24350=>1000,24351=>1000,24352=>1000,24353=>1000,24354=>1000,24355=>1000,24356=>1000, + 24357=>1000,24358=>1000,24359=>1000,24360=>1000,24361=>1000,24362=>1000,24363=>1000,24364=>1000,24365=>1000,24366=>1000,24367=>1000,24368=>1000,24369=>1000,24370=>1000,24371=>1000,24372=>1000, + 24373=>1000,24374=>1000,24375=>1000,24376=>1000,24377=>1000,24378=>1000,24379=>1000,24380=>1000,24381=>1000,24382=>1000,24383=>1000,24384=>1000,24385=>1000,24386=>1000,24387=>1000,24388=>1000, + 24389=>1000,24390=>1000,24391=>1000,24392=>1000,24393=>1000,24394=>1000,24395=>1000,24396=>1000,24397=>1000,24398=>1000,24399=>1000,24400=>1000,24401=>1000,24402=>1000,24403=>1000,24404=>1000, + 24405=>1000,24406=>1000,24407=>1000,24408=>1000,24409=>1000,24410=>1000,24411=>1000,24412=>1000,24413=>1000,24414=>1000,24415=>1000,24416=>1000,24417=>1000,24418=>1000,24419=>1000,24420=>1000, + 24421=>1000,24422=>1000,24423=>1000,24424=>1000,24425=>1000,24426=>1000,24427=>1000,24428=>1000,24429=>1000,24430=>1000,24431=>1000,24432=>1000,24433=>1000,24434=>1000,24435=>1000,24436=>1000, + 24437=>1000,24438=>1000,24439=>1000,24440=>1000,24441=>1000,24442=>1000,24443=>1000,24444=>1000,24445=>1000,24446=>1000,24447=>1000,24448=>1000,24449=>1000,24450=>1000,24451=>1000,24452=>1000, + 24453=>1000,24454=>1000,24455=>1000,24456=>1000,24457=>1000,24458=>1000,24459=>1000,24460=>1000,24461=>1000,24462=>1000,24463=>1000,24464=>1000,24465=>1000,24466=>1000,24467=>1000,24468=>1000, + 24469=>1000,24470=>1000,24471=>1000,24472=>1000,24473=>1000,24474=>1000,24475=>1000,24476=>1000,24477=>1000,24478=>1000,24479=>1000,24480=>1000,24481=>1000,24482=>1000,24483=>1000,24484=>1000, + 24485=>1000,24486=>1000,24487=>1000,24488=>1000,24489=>1000,24490=>1000,24491=>1000,24492=>1000,24493=>1000,24494=>1000,24495=>1000,24496=>1000,24497=>1000,24498=>1000,24499=>1000,24500=>1000, + 24501=>1000,24502=>1000,24503=>1000,24504=>1000,24505=>1000,24506=>1000,24507=>1000,24508=>1000,24509=>1000,24510=>1000,24511=>1000,24512=>1000,24513=>1000,24514=>1000,24515=>1000,24516=>1000, + 24517=>1000,24518=>1000,24519=>1000,24520=>1000,24521=>1000,24522=>1000,24523=>1000,24524=>1000,24525=>1000,24526=>1000,24527=>1000,24528=>1000,24529=>1000,24530=>1000,24531=>1000,24532=>1000, + 24533=>1000,24534=>1000,24535=>1000,24536=>1000,24537=>1000,24538=>1000,24539=>1000,24540=>1000,24541=>1000,24542=>1000,24543=>1000,24544=>1000,24545=>1000,24546=>1000,24547=>1000,24548=>1000, + 24549=>1000,24550=>1000,24551=>1000,24552=>1000,24553=>1000,24554=>1000,24555=>1000,24556=>1000,24557=>1000,24558=>1000,24559=>1000,24560=>1000,24561=>1000,24562=>1000,24563=>1000,24564=>1000, + 24565=>1000,24566=>1000,24567=>1000,24568=>1000,24569=>1000,24570=>1000,24571=>1000,24572=>1000,24573=>1000,24574=>1000,24575=>1000,24576=>1000,24577=>1000,24578=>1000,24579=>1000,24580=>1000, + 24581=>1000,24582=>1000,24583=>1000,24584=>1000,24585=>1000,24586=>1000,24587=>1000,24588=>1000,24589=>1000,24590=>1000,24591=>1000,24592=>1000,24593=>1000,24594=>1000,24595=>1000,24596=>1000, + 24597=>1000,24598=>1000,24599=>1000,24600=>1000,24601=>1000,24602=>1000,24603=>1000,24604=>1000,24605=>1000,24606=>1000,24607=>1000,24608=>1000,24609=>1000,24610=>1000,24611=>1000,24612=>1000, + 24613=>1000,24614=>1000,24615=>1000,24616=>1000,24617=>1000,24618=>1000,24619=>1000,24620=>1000,24621=>1000,24622=>1000,24623=>1000,24624=>1000,24625=>1000,24626=>1000,24627=>1000,24628=>1000, + 24629=>1000,24630=>1000,24631=>1000,24632=>1000,24633=>1000,24634=>1000,24635=>1000,24636=>1000,24637=>1000,24638=>1000,24639=>1000,24640=>1000,24641=>1000,24642=>1000,24643=>1000,24644=>1000, + 24645=>1000,24646=>1000,24647=>1000,24648=>1000,24649=>1000,24650=>1000,24651=>1000,24652=>1000,24653=>1000,24654=>1000,24655=>1000,24656=>1000,24657=>1000,24658=>1000,24659=>1000,24660=>1000, + 24661=>1000,24662=>1000,24663=>1000,24664=>1000,24665=>1000,24666=>1000,24667=>1000,24668=>1000,24669=>1000,24670=>1000,24671=>1000,24672=>1000,24673=>1000,24674=>1000,24675=>1000,24676=>1000, + 24677=>1000,24678=>1000,24679=>1000,24680=>1000,24681=>1000,24682=>1000,24683=>1000,24684=>1000,24685=>1000,24686=>1000,24687=>1000,24688=>1000,24689=>1000,24690=>1000,24691=>1000,24692=>1000, + 24693=>1000,24694=>1000,24695=>1000,24696=>1000,24697=>1000,24698=>1000,24699=>1000,24700=>1000,24701=>1000,24702=>1000,24703=>1000,24704=>1000,24705=>1000,24706=>1000,24707=>1000,24708=>1000, + + 24709=>1000,24710=>1000,24711=>1000,24712=>1000,24713=>1000,24714=>1000,24715=>1000,24716=>1000,24717=>1000,24718=>1000,24719=>1000,24720=>1000,24721=>1000,24722=>1000,24723=>1000,24724=>1000, + 24725=>1000,24726=>1000,24727=>1000,24728=>1000,24729=>1000,24730=>1000,24731=>1000,24732=>1000,24733=>1000,24734=>1000,24735=>1000,24736=>1000,24737=>1000,24738=>1000,24739=>1000,24740=>1000, + 24741=>1000,24742=>1000,24743=>1000,24744=>1000,24745=>1000,24746=>1000,24747=>1000,24748=>1000,24749=>1000,24750=>1000,24751=>1000,24752=>1000,24753=>1000,24754=>1000,24755=>1000,24756=>1000, + 24757=>1000,24758=>1000,24759=>1000,24760=>1000,24761=>1000,24762=>1000,24763=>1000,24764=>1000,24765=>1000,24766=>1000,24767=>1000,24768=>1000,24769=>1000,24770=>1000,24771=>1000,24772=>1000, + 24773=>1000,24774=>1000,24775=>1000,24776=>1000,24777=>1000,24778=>1000,24779=>1000,24780=>1000,24781=>1000,24782=>1000,24783=>1000,24784=>1000,24785=>1000,24786=>1000,24787=>1000,24788=>1000, + 24789=>1000,24790=>1000,24791=>1000,24792=>1000,24793=>1000,24794=>1000,24795=>1000,24796=>1000,24797=>1000,24798=>1000,24799=>1000,24800=>1000,24801=>1000,24802=>1000,24803=>1000,24804=>1000, + 24805=>1000,24806=>1000,24807=>1000,24808=>1000,24809=>1000,24810=>1000,24811=>1000,24812=>1000,24813=>1000,24814=>1000,24815=>1000,24816=>1000,24817=>1000,24818=>1000,24819=>1000,24820=>1000, + 24821=>1000,24822=>1000,24823=>1000,24824=>1000,24825=>1000,24826=>1000,24827=>1000,24828=>1000,24829=>1000,24830=>1000,24831=>1000,24832=>1000,24833=>1000,24834=>1000,24835=>1000,24836=>1000, + 24837=>1000,24838=>1000,24839=>1000,24840=>1000,24841=>1000,24842=>1000,24843=>1000,24844=>1000,24845=>1000,24846=>1000,24847=>1000,24848=>1000,24849=>1000,24850=>1000,24851=>1000,24852=>1000, + 24853=>1000,24854=>1000,24855=>1000,24856=>1000,24857=>1000,24858=>1000,24859=>1000,24860=>1000,24861=>1000,24862=>1000,24863=>1000,24864=>1000,24865=>1000,24866=>1000,24867=>1000,24868=>1000, + 24869=>1000,24870=>1000,24871=>1000,24872=>1000,24873=>1000,24874=>1000,24875=>1000,24876=>1000,24877=>1000,24878=>1000,24879=>1000,24880=>1000,24881=>1000,24882=>1000,24883=>1000,24884=>1000, + 24885=>1000,24886=>1000,24887=>1000,24888=>1000,24889=>1000,24890=>1000,24891=>1000,24892=>1000,24893=>1000,24894=>1000,24895=>1000,24896=>1000,24897=>1000,24898=>1000,24899=>1000,24900=>1000, + 24901=>1000,24902=>1000,24903=>1000,24904=>1000,24905=>1000,24906=>1000,24907=>1000,24908=>1000,24909=>1000,24910=>1000,24911=>1000,24912=>1000,24913=>1000,24914=>1000,24915=>1000,24916=>1000, + 24917=>1000,24918=>1000,24919=>1000,24920=>1000,24921=>1000,24922=>1000,24923=>1000,24924=>1000,24925=>1000,24926=>1000,24927=>1000,24928=>1000,24929=>1000,24930=>1000,24931=>1000,24932=>1000, + 24933=>1000,24934=>1000,24935=>1000,24936=>1000,24937=>1000,24938=>1000,24939=>1000,24940=>1000,24941=>1000,24942=>1000,24943=>1000,24944=>1000,24945=>1000,24946=>1000,24947=>1000,24948=>1000, + 24949=>1000,24950=>1000,24951=>1000,24952=>1000,24953=>1000,24954=>1000,24955=>1000,24956=>1000,24957=>1000,24958=>1000,24959=>1000,24960=>1000,24961=>1001,24962=>1000,24963=>1000,24964=>1000, + 24965=>1000,24966=>1000,24967=>1000,24968=>1000,24969=>1000,24970=>1000,24971=>1000,24972=>1000,24973=>1000,24974=>1000,24975=>1000,24976=>1000,24977=>1000,24978=>1000,24979=>1000,24980=>1000, + 24981=>1000,24982=>1000,24983=>1000,24984=>1000,24985=>1000,24986=>1000,24987=>1000,24988=>1000,24989=>1000,24990=>1000,24991=>1000,24992=>1000,24993=>1000,24994=>1000,24995=>1000,24996=>1000, + 24997=>1000,24998=>1000,24999=>1000,25000=>1000,25001=>1000,25002=>1000,25003=>1000,25004=>1000,25005=>1000,25006=>1000,25007=>1000,25008=>1000,25009=>1000,25010=>1000,25011=>1000,25012=>1000, + 25013=>1000,25014=>1000,25015=>1000,25016=>1000,25017=>1000,25018=>1000,25019=>1000,25020=>1000,25021=>1000,25022=>1000,25023=>1000,25024=>1000,25025=>1000,25026=>1000,25027=>1000,25028=>1000, + 25029=>1000,25030=>1000,25031=>1000,25032=>1000,25033=>1000,25034=>1000,25035=>1000,25036=>1000,25037=>1000,25038=>1000,25039=>1000,25040=>1000,25041=>1000,25042=>1000,25043=>1000,25044=>1000, + 25045=>1000,25046=>1000,25047=>1000,25048=>1000,25049=>1000,25050=>1000,25051=>1000,25052=>1000,25053=>1000,25054=>1000,25055=>1000,25056=>1000,25057=>1000,25058=>1000,25059=>1000,25060=>1000, + 25061=>1000,25062=>1000,25063=>1000,25064=>1000,25065=>1000,25066=>1000,25067=>1000,25068=>1000,25069=>1000,25070=>1000,25071=>1000,25072=>1000,25073=>1000,25074=>1000,25075=>1000,25076=>1000, + 25077=>1000,25078=>1000,25079=>1000,25080=>1000,25081=>1000,25082=>1000,25083=>1000,25084=>1000,25085=>1000,25086=>1000,25087=>1000,25088=>1000,25089=>1000,25090=>1000,25091=>1000,25092=>1000, + 25093=>1000,25094=>1000,25095=>1000,25096=>1000,25097=>1000,25098=>1000,25099=>1000,25100=>1000,25101=>1000,25102=>1000,25103=>1000,25104=>1000,25105=>1000,25106=>1000,25107=>1000,25108=>1000, + 25109=>1000,25110=>1000,25111=>1000,25112=>1000,25113=>1000,25114=>1000,25115=>1000,25116=>1000,25117=>1000,25118=>1000,25119=>1000,25120=>1000,25121=>1000,25122=>1000,25123=>1000,25124=>1000, + 25125=>1000,25126=>1000,25127=>1000,25128=>1000,25129=>1000,25130=>1000,25131=>1000,25132=>1000,25133=>1000,25134=>1000,25135=>1000,25136=>1000,25137=>1000,25138=>1000,25139=>1000,25140=>1000, + 25141=>1000,25142=>1000,25143=>1000,25144=>1000,25145=>1000,25146=>1000,25147=>1000,25148=>1000,25149=>1000,25150=>1000,25151=>1000,25152=>1000,25153=>1000,25154=>1000,25155=>1000,25156=>1000, + 25157=>1000,25158=>1000,25159=>1000,25160=>1000,25161=>1000,25162=>1000,25163=>1000,25164=>1000,25165=>1000,25166=>1000,25167=>1000,25168=>1000,25169=>1000,25170=>1000,25171=>1000,25172=>1000, + 25173=>1000,25174=>1000,25175=>1000,25176=>1000,25177=>1000,25178=>1000,25179=>1000,25180=>1000,25181=>1000,25182=>1000,25183=>1000,25184=>1000,25185=>1000,25186=>1000,25187=>1000,25188=>1000, + 25189=>1000,25190=>1000,25191=>1000,25192=>1000,25193=>1000,25194=>1000,25195=>1000,25196=>1000,25197=>1000,25198=>1000,25199=>1000,25200=>1000,25201=>1000,25202=>1000,25203=>1000,25204=>1000, + 25205=>1000,25206=>1000,25207=>1000,25208=>1000,25209=>1000,25210=>1000,25211=>1000,25212=>1000,25213=>1000,25214=>1000,25215=>1000,25216=>1000,25217=>1000,25218=>1000,25219=>1000,25220=>1000, + 25221=>1000,25222=>1000,25223=>1000,25224=>1000,25225=>1000,25226=>1000,25227=>1000,25228=>1000,25229=>1000,25230=>1000,25231=>1000,25232=>1000,25233=>1000,25234=>1000,25235=>1000,25236=>1000, + 25237=>1000,25238=>1000,25239=>1000,25240=>1000,25241=>1000,25242=>1000,25243=>1000,25244=>1000,25245=>1000,25246=>1000,25247=>1000,25248=>1000,25249=>1000,25250=>1000,25251=>1000,25252=>1000, + 25253=>1000,25254=>1000,25255=>1000,25256=>1000,25257=>1000,25258=>1000,25259=>1000,25260=>1000,25261=>1000,25262=>1000,25263=>1000,25264=>1000,25265=>1000,25266=>1000,25267=>1000,25268=>1000, + 25269=>1000,25270=>1000,25271=>1000,25272=>1000,25273=>1000,25274=>1000,25275=>1000,25276=>1000,25277=>1000,25278=>1000,25279=>1000,25280=>1000,25281=>1000,25282=>1000,25283=>1000,25284=>1000, + 25285=>1000,25286=>1000,25287=>1000,25288=>1000,25289=>1000,25290=>1000,25291=>1000,25292=>1000,25293=>1000,25294=>1000,25295=>1000,25296=>1000,25297=>1000,25298=>1000,25299=>1000,25300=>1000, + 25301=>1000,25302=>1000,25303=>1000,25304=>1000,25305=>1000,25306=>1000,25307=>1000,25308=>1000,25309=>1000,25310=>1000,25311=>1000,25312=>1000,25313=>1000,25314=>1000,25315=>1000,25316=>1000, + 25317=>1000,25318=>1000,25319=>1000,25320=>1000,25321=>1000,25322=>1000,25323=>1000,25324=>1000,25325=>1000,25326=>1000,25327=>1000,25328=>1000,25329=>1000,25330=>1000,25331=>1000,25332=>1000, + 25333=>1000,25334=>1000,25335=>1000,25336=>1000,25337=>1000,25338=>1000,25339=>1000,25340=>1000,25341=>1000,25342=>1000,25343=>1000,25344=>1000,25345=>1000,25346=>1000,25347=>1000,25348=>1000, + 25349=>1000,25350=>1000,25351=>1000,25352=>1000,25353=>1000,25354=>1000,25355=>1000,25356=>1000,25357=>1000,25358=>1000,25359=>1000,25360=>1000,25361=>1000,25362=>1000,25363=>1000,25364=>1000, + 25365=>1000,25366=>1000,25367=>1000,25368=>1000,25369=>1000,25370=>1000,25371=>1000,25372=>1000,25373=>1000,25374=>1000,25375=>1000,25376=>1000,25377=>1000,25378=>1000,25379=>1000,25380=>1000, + 25381=>1000,25382=>1000,25383=>1000,25384=>1000,25385=>1000,25386=>1000,25387=>1000,25388=>1000,25389=>1000,25390=>1000,25391=>1000,25392=>1000,25393=>1000,25394=>1000,25395=>1000,25396=>1000, + 25397=>1000,25398=>1000,25399=>1000,25400=>1000,25401=>1000,25402=>1000,25403=>1000,25404=>1000,25405=>1000,25406=>1000,25407=>1000,25408=>1000,25409=>1000,25410=>1000,25411=>1000,25412=>1000, + 25413=>1000,25414=>1000,25415=>1000,25416=>1000,25417=>1000,25418=>1000,25419=>1000,25420=>1000,25421=>1000,25422=>1000,25423=>1000,25424=>1000,25425=>1000,25426=>1000,25427=>1000,25428=>1000, + 25429=>1000,25430=>1000,25431=>1000,25432=>1000,25433=>1000,25434=>1000,25435=>1000,25436=>1000,25437=>1000,25438=>1000,25439=>1000,25440=>1000,25441=>1000,25442=>1000,25443=>1000,25444=>1000, + 25445=>1000,25446=>1000,25447=>1000,25448=>1000,25449=>1000,25450=>1000,25451=>1000,25452=>1000,25453=>1000,25454=>1000,25455=>1000,25456=>1000,25457=>1000,25458=>1000,25459=>1000,25460=>1000, + 25461=>1000,25462=>1000,25463=>1000,25464=>1000,25465=>1000,25466=>1000,25467=>1000,25468=>1000,25469=>1000,25470=>1000,25471=>1000,25472=>1000,25473=>1000,25474=>1000,25475=>1000,25476=>1000, + 25477=>1000,25478=>1000,25479=>1000,25480=>1000,25481=>1000,25482=>1000,25483=>1000,25484=>1000,25485=>1000,25486=>1000,25487=>1000,25488=>1000,25489=>1000,25490=>1000,25491=>1000,25492=>1000, + 25493=>1000,25494=>1000,25495=>1000,25496=>1000,25497=>1000,25498=>1000,25499=>1000,25500=>1000,25501=>1000,25502=>1000,25503=>1000,25504=>1000,25505=>1000,25506=>1000,25507=>1000,25508=>1000, + 25509=>1000,25510=>1000,25511=>1000,25512=>1000,25513=>1000,25514=>1000,25515=>1000,25516=>1000,25517=>1000,25518=>1000,25519=>1000,25520=>1000,25521=>1000,25522=>1000,25523=>1000,25524=>1000, + 25525=>1000,25526=>1000,25527=>1000,25528=>1000,25529=>1000,25530=>1000,25531=>1000,25532=>1000,25533=>1000,25534=>1000,25535=>1000,25536=>1000,25537=>1000,25538=>1000,25539=>1000,25540=>1000, + 25541=>1000,25542=>1000,25543=>1000,25544=>1000,25545=>1000,25546=>1000,25547=>1000,25548=>1000,25549=>1000,25550=>1000,25551=>1000,25552=>1000,25553=>1000,25554=>1000,25555=>1000,25556=>1000, + 25557=>1000,25558=>1000,25559=>1000,25560=>1000,25561=>1000,25562=>1000,25563=>1000,25564=>1000,25565=>1000,25566=>1000,25567=>1000,25568=>1000,25569=>1000,25570=>1000,25571=>1000,25572=>1000, + 25573=>1000,25574=>1000,25575=>1000,25576=>1000,25577=>1000,25578=>1000,25579=>1000,25580=>1000,25581=>1000,25582=>1000,25583=>1000,25584=>1000,25585=>1000,25586=>1000,25587=>1000,25588=>1000, + 25589=>1000,25590=>1000,25591=>1000,25592=>1000,25593=>1000,25594=>1000,25595=>1000,25596=>1000,25597=>1000,25598=>1000,25599=>1000,25600=>1000,25601=>1000,25602=>1000,25603=>1000,25604=>1000, + 25605=>1000,25606=>1000,25607=>1000,25608=>1000,25609=>1000,25610=>1000,25611=>1000,25612=>1000,25613=>1000,25614=>1000,25615=>1000,25616=>1000,25617=>1000,25618=>1000,25619=>1000,25620=>1000, + 25621=>1000,25622=>1000,25623=>1000,25624=>1000,25625=>1000,25626=>1000,25627=>1000,25628=>1000,25629=>1000,25630=>1000,25631=>1000,25632=>1000,25633=>1000,25634=>1000,25635=>1000,25636=>1000, + 25637=>1000,25638=>1000,25639=>1000,25640=>1000,25641=>1000,25642=>1000,25643=>1000,25644=>1000,25645=>1000,25646=>1000,25647=>1000,25648=>1000,25649=>1000,25650=>1000,25651=>1000,25652=>1000, + 25653=>1000,25654=>1000,25655=>1000,25656=>1000,25657=>1000,25658=>1000,25659=>1000,25660=>1000,25661=>1000,25662=>1000,25663=>1000,25664=>1000,25665=>1000,25666=>1000,25667=>1000,25668=>1000, + 25669=>1000,25670=>1000,25671=>1000,25672=>1000,25673=>1000,25674=>1000,25675=>1000,25676=>1000,25677=>1000,25678=>1000,25679=>1000,25680=>1000,25681=>1000,25682=>1000,25683=>1000,25684=>1000, + 25685=>1000,25686=>1000,25687=>1000,25688=>1000,25689=>1000,25690=>1000,25691=>1000,25692=>1000,25693=>1000,25694=>1000,25695=>1000,25696=>1000,25697=>1000,25698=>1000,25699=>1000,25700=>1000, + 25701=>1000,25702=>1000,25703=>1000,25704=>1000,25705=>1000,25706=>1000,25707=>1000,25708=>1000,25709=>1000,25710=>1000,25711=>1000,25712=>1000,25713=>1000,25714=>1000,25715=>1000,25716=>1000, + 25717=>1000,25718=>1000,25719=>1000,25720=>1000,25721=>1000,25722=>1000,25723=>1000,25724=>1000,25725=>1000,25726=>1000,25727=>1000,25728=>1000,25729=>1000,25730=>1000,25731=>1000,25732=>1000, + 25733=>1000,25734=>1000,25735=>1000,25736=>1000,25737=>1000,25738=>1000,25739=>1000,25740=>1000,25741=>1000,25742=>1000,25743=>1000,25744=>1000,25745=>1000,25746=>1000,25747=>1000,25748=>1000, + 25749=>1000,25750=>1000,25751=>1000,25752=>1000,25753=>1000,25754=>1000,25755=>1000,25756=>1000,25757=>1000,25758=>1000,25759=>1000,25760=>1000,25761=>1000,25762=>1000,25763=>1000,25764=>1000, + 25765=>1000,25766=>1000,25767=>1000,25768=>1000,25769=>1000,25770=>1000,25771=>1000,25772=>1000,25773=>1000,25774=>1000,25775=>1000,25776=>1000,25777=>1000,25778=>1000,25779=>1000,25780=>1000, + 25781=>1000,25782=>1000,25783=>1000,25784=>1000,25785=>1000,25786=>1000,25787=>1000,25788=>1000,25789=>1000,25790=>1000,25791=>1000,25792=>1000,25793=>1000,25794=>1000,25795=>1000,25796=>1000, + 25797=>1000,25798=>1000,25799=>1000,25800=>1000,25801=>1000,25802=>1000,25803=>1000,25804=>1000,25805=>1000,25806=>1000,25807=>1000,25808=>1000,25809=>1000,25810=>1000,25811=>1000,25812=>1000, + 25813=>1000,25814=>1000,25815=>1000,25816=>1000,25817=>1000,25818=>1000,25819=>1000,25820=>1000,25821=>1000,25822=>1000,25823=>1000,25824=>1000,25825=>1000,25826=>1000,25827=>1000,25828=>1000, + 25829=>1000,25830=>1000,25831=>1000,25832=>1000,25833=>1000,25834=>1000,25835=>1000,25836=>1000,25837=>1000,25838=>1000,25839=>1000,25840=>1000,25841=>1000,25842=>1000,25843=>1000,25844=>1000, + 25845=>1000,25846=>1000,25847=>1000,25848=>1000,25849=>1000,25850=>1000,25851=>1000,25852=>1000,25853=>1000,25854=>1000,25855=>1000,25856=>1000,25857=>1000,25858=>1000,25859=>1000,25860=>1000, + 25861=>1000,25862=>1000,25863=>1000,25864=>1000,25865=>1000,25866=>1000,25867=>1000,25868=>1000,25869=>1000,25870=>1000,25871=>1000,25872=>1000,25873=>1000,25874=>1000,25875=>1000,25876=>1000, + 25877=>1000,25878=>1000,25879=>1000,25880=>1000,25881=>1000,25882=>1000,25883=>1000,25884=>1000,25885=>1000,25886=>1000,25887=>1000,25888=>1000,25889=>1000,25890=>1000,25891=>1000,25892=>1000, + 25893=>1000,25894=>1000,25895=>1000,25896=>1000,25897=>1000,25898=>1000,25899=>1000,25900=>1000,25901=>1000,25902=>1000,25903=>1000,25904=>1000,25905=>1000,25906=>1000,25907=>1000,25908=>1000, + 25909=>1000,25910=>1000,25911=>1000,25912=>1000,25913=>1000,25914=>1000,25915=>1000,25916=>1000,25917=>1000,25918=>1000,25919=>1000,25920=>1000,25921=>1000,25922=>1000,25923=>1000,25924=>1000, + 25925=>1000,25926=>1000,25927=>1000,25928=>1000,25929=>1000,25930=>1000,25931=>1000,25932=>1000,25933=>1000,25934=>1000,25935=>1000,25936=>1000,25937=>1000,25938=>1000,25939=>1000,25940=>1000, + 25941=>1000,25942=>1000,25943=>1000,25944=>1000,25945=>1000,25946=>1000,25947=>1000,25948=>1000,25949=>1000,25950=>1000,25951=>1000,25952=>1000,25953=>1000,25954=>1000,25955=>1000,25956=>1000, + 25957=>1000,25958=>1000,25959=>1000,25960=>1000,25961=>1000,25962=>1000,25963=>1000,25964=>1000,25965=>1000,25966=>1000,25967=>1000,25968=>1000,25969=>1000,25970=>1000,25971=>1000,25972=>1000, + 25973=>1000,25974=>1000,25975=>1000,25976=>1000,25977=>1000,25978=>1000,25979=>1000,25980=>1000,25981=>1000,25982=>1000,25983=>1000,25984=>1000,25985=>1000,25986=>1000,25987=>1000,25988=>1000, + 25989=>1000,25990=>1000,25991=>1000,25992=>1000,25993=>1000,25994=>1000,25995=>1000,25996=>1000,25997=>1000,25998=>1000,25999=>1000,26000=>1000,26001=>1000,26002=>1000,26003=>1000,26004=>1000, + 26005=>1000,26006=>1000,26007=>1000,26008=>1000,26009=>1000,26010=>1000,26011=>1000,26012=>1000,26013=>1000,26014=>1000,26015=>1000,26016=>1000,26017=>1000,26018=>1000,26019=>1000,26020=>1000, + 26021=>1000,26022=>1000,26023=>1000,26024=>1000,26025=>1000,26026=>1000,26027=>1000,26028=>1000,26029=>1000,26030=>1000,26031=>1000,26032=>1000,26033=>1000,26034=>1000,26035=>1000,26036=>1000, + 26037=>1000,26038=>1000,26039=>1000,26040=>1000,26041=>1000,26042=>1000,26043=>1000,26044=>1000,26045=>1000,26046=>1000,26047=>1000,26048=>1000,26049=>1000,26050=>1000,26051=>1000,26052=>1000, + 26053=>1000,26054=>1000,26055=>1000,26056=>1000,26057=>1000,26058=>1000,26059=>1000,26060=>1000,26061=>1000,26062=>1000,26063=>1000,26064=>1000,26065=>1000,26066=>1000,26067=>1000,26068=>1000, + 26069=>1000,26070=>1000,26071=>1000,26072=>1000,26073=>1000,26074=>1000,26075=>1000,26076=>1000,26077=>1000,26078=>1000,26079=>1000,26080=>1000,26081=>1000,26082=>1000,26083=>1000,26084=>1000, + 26085=>1000,26086=>1000,26087=>1000,26088=>1000,26089=>1000,26090=>1000,26091=>1000,26092=>1000,26093=>1000,26094=>1000,26095=>1000,26096=>1000,26097=>1000,26098=>1000,26099=>1000,26100=>1000, + 26101=>1000,26102=>1000,26103=>1000,26104=>1000,26105=>1000,26106=>1000,26107=>1000,26108=>1000,26109=>1000,26110=>1000,26111=>1000,26112=>1000,26113=>1000,26114=>1000,26115=>1000,26116=>1000, + 26117=>1000,26118=>1000,26119=>1000,26120=>1000,26121=>1000,26122=>1000,26123=>1000,26124=>1000,26125=>1000,26126=>1000,26127=>1000,26128=>1000,26129=>1000,26130=>1000,26131=>1000,26132=>1000, + 26133=>1000,26134=>1000,26135=>1000,26136=>1000,26137=>1000,26138=>1000,26139=>1000,26140=>1000,26141=>1000,26142=>1000,26143=>1000,26144=>1000,26145=>1000,26146=>1000,26147=>1000,26148=>1000, + 26149=>1000,26150=>1000,26151=>1000,26152=>1000,26153=>1000,26154=>1000,26155=>1000,26156=>1000,26157=>1000,26158=>1000,26159=>1000,26160=>1000,26161=>1000,26162=>1000,26163=>1000,26164=>1000, + 26165=>1000,26166=>1000,26167=>1000,26168=>1000,26169=>1000,26170=>1000,26171=>1000,26172=>1000,26173=>1000,26174=>1000,26175=>1000,26176=>1000,26177=>1000,26178=>1000,26179=>1000,26180=>1000, + 26181=>1000,26182=>1000,26183=>1000,26184=>1000,26185=>1000,26186=>1000,26187=>1000,26188=>1000,26189=>1000,26190=>1000,26191=>1000,26192=>1000,26193=>1000,26194=>1000,26195=>1000,26196=>1000, + 26197=>1000,26198=>1000,26199=>1000,26200=>1000,26201=>1000,26202=>1000,26203=>1000,26204=>1000,26205=>1000,26206=>1000,26207=>1000,26208=>1000,26209=>1000,26210=>1000,26211=>1000,26212=>1000, + 26213=>1000,26214=>1000,26215=>1000,26216=>1000,26217=>1000,26218=>1000,26219=>1000,26220=>1000,26221=>1000,26222=>1000,26223=>1000,26224=>1000,26225=>1000,26226=>1000,26227=>1000,26228=>1000, + 26229=>1000,26230=>1000,26231=>1000,26232=>1000,26233=>1000,26234=>1000,26235=>1000,26236=>1000,26237=>1000,26238=>1000,26239=>1000,26240=>1000,26241=>1000,26242=>1000,26243=>1000,26244=>1000, + 26245=>1000,26246=>1000,26247=>1000,26248=>1000,26249=>1000,26250=>1000,26251=>1000,26252=>1000,26253=>1000,26254=>1000,26255=>1000,26256=>1000,26257=>1000,26258=>1000,26259=>1000,26260=>1000, + 26261=>1000,26262=>1000,26263=>1000,26264=>1000,26265=>1000,26266=>1000,26267=>1000,26268=>1000,26269=>1000,26270=>1000,26271=>1000,26272=>1000,26273=>1000,26274=>1000,26275=>1000,26276=>1000, + 26277=>1000,26278=>1000,26279=>1000,26280=>1000,26281=>1000,26282=>1000,26283=>1000,26284=>1000,26285=>1000,26286=>1000,26287=>1000,26288=>1000,26289=>1000,26290=>1000,26291=>1000,26292=>1000, + 26293=>1000,26294=>1000,26295=>1000,26296=>1000,26297=>1000,26298=>1000,26299=>1000,26300=>1000,26301=>1000,26302=>1000,26303=>1000,26304=>1000,26305=>1000,26306=>1000,26307=>1000,26308=>1000, + 26309=>1000,26310=>1000,26311=>1000,26312=>1000,26313=>1000,26314=>1000,26315=>1000,26316=>1000,26317=>1000,26318=>1000,26319=>1000,26320=>1000,26321=>1000,26322=>1000,26323=>1000,26324=>1000, + 26325=>1000,26326=>1000,26327=>1000,26328=>1000,26329=>1000,26330=>1000,26331=>1000,26332=>1000,26333=>1000,26334=>1000,26335=>1000,26336=>1000,26337=>1000,26338=>1000,26339=>1000,26340=>1000, + 26341=>1000,26342=>1000,26343=>1000,26344=>1000,26345=>1000,26346=>1000,26347=>1000,26348=>1000,26349=>1000,26350=>1000,26351=>1000,26352=>1000,26353=>1000,26354=>1000,26355=>1000,26356=>1000, + 26357=>1000,26358=>1000,26359=>1000,26360=>1000,26361=>1000,26362=>1000,26363=>1000,26364=>1000,26365=>1000,26366=>1000,26367=>1000,26368=>1000,26369=>1000,26370=>1000,26371=>1000,26372=>1000, + 26373=>1000,26374=>1000,26375=>1000,26376=>1000,26377=>1000,26378=>1000,26379=>1000,26380=>1000,26381=>1000,26382=>1000,26383=>1000,26384=>1000,26385=>1000,26386=>1000,26387=>1000,26388=>1000, + 26389=>1000,26390=>1000,26391=>1000,26392=>1000,26393=>1000,26394=>1000,26395=>1000,26396=>1000,26397=>1000,26398=>1000,26399=>1000,26400=>1000,26401=>1000,26402=>1000,26403=>1000,26404=>1000, + 26405=>1000,26406=>1000,26407=>1000,26408=>1000,26409=>1000,26410=>1000,26411=>1000,26412=>1000,26413=>1000,26414=>1000,26415=>1000,26416=>1000,26417=>1000,26418=>1000,26419=>1000,26420=>1000, + 26421=>1000,26422=>1000,26423=>1000,26424=>1000,26425=>1000,26426=>1000,26427=>1000,26428=>1000,26429=>1000,26430=>1000,26431=>1000,26432=>1000,26433=>1000,26434=>1000,26435=>1000,26436=>1000, + 26437=>1000,26438=>1000,26439=>1000,26440=>1000,26441=>1000,26442=>1000,26443=>1000,26444=>1000,26445=>1000,26446=>1000,26447=>1000,26448=>1000,26449=>1000,26450=>1000,26451=>1000,26452=>1000, + 26453=>1000,26454=>1000,26455=>1000,26456=>1000,26457=>1000,26458=>1000,26459=>1000,26460=>1000,26461=>1000,26462=>1000,26463=>1000,26464=>1000,26465=>1000,26466=>1000,26467=>1000,26468=>1000, + 26469=>1000,26470=>1000,26471=>1000,26472=>1000,26473=>1000,26474=>1000,26475=>1000,26476=>1000,26477=>1000,26478=>1000,26479=>1000,26480=>1000,26481=>1000,26482=>1000,26483=>1000,26484=>1000, + 26485=>1000,26486=>1000,26487=>1000,26488=>1000,26489=>1000,26490=>1000,26491=>1000,26492=>1000,26493=>1000,26494=>1000,26495=>1000,26496=>1000,26497=>1000,26498=>1000,26499=>1000,26500=>1000, + 26501=>1000,26502=>1000,26503=>1000,26504=>1000,26505=>1000,26506=>1000,26507=>1000,26508=>1000,26509=>1000,26510=>1000,26511=>1000,26512=>1000,26513=>1000,26514=>1000,26515=>1000,26516=>1000, + 26517=>1000,26518=>1000,26519=>1000,26520=>1000,26521=>1000,26522=>1000,26523=>1000,26524=>1000,26525=>1000,26526=>1000,26527=>1000,26528=>1000,26529=>1000,26530=>1000,26531=>1000,26532=>1000, + 26533=>1000,26534=>1000,26535=>1000,26536=>1000,26537=>1000,26538=>1000,26539=>1000,26540=>1000,26541=>1000,26542=>1000,26543=>1000,26544=>1000,26545=>1000,26546=>1000,26547=>1000,26548=>1000, + 26549=>1000,26550=>1000,26551=>1000,26552=>1000,26553=>1000,26554=>1000,26555=>1000,26556=>1000,26557=>1000,26558=>1000,26559=>1000,26560=>1000,26561=>1000,26562=>1000,26563=>1000,26564=>1000, + 26565=>1000,26566=>1000,26567=>1000,26568=>1000,26569=>1000,26570=>1000,26571=>1000,26572=>1000,26573=>1000,26574=>1000,26575=>1000,26576=>1000,26577=>1000,26578=>1000,26579=>1000,26580=>1000, + 26581=>1000,26582=>1000,26583=>1000,26584=>1000,26585=>1000,26586=>1000,26587=>1000,26588=>1000,26589=>1000,26590=>1000,26591=>1000,26592=>1000,26593=>1000,26594=>1000,26595=>1000,26596=>1000, + 26597=>1000,26598=>1000,26599=>1000,26600=>1000,26601=>1000,26602=>1000,26603=>1000,26604=>1000,26605=>1000,26606=>1000,26607=>1000,26608=>1000,26609=>1000,26610=>1000,26611=>1000,26612=>1000, + 26613=>1000,26614=>1000,26615=>1000,26616=>1000,26617=>1000,26618=>1000,26619=>1000,26620=>1000,26621=>1000,26622=>1000,26623=>1000,26624=>1000,26625=>1000,26626=>1000,26627=>1000,26628=>1000, + 26629=>1000,26630=>1000,26631=>1000,26632=>1000,26633=>1000,26634=>1000,26635=>1000,26636=>1000,26637=>1000,26638=>1000,26639=>1000,26640=>1000,26641=>1000,26642=>1000,26643=>1000,26644=>1000, + 26645=>1000,26646=>1000,26647=>1000,26648=>1000,26649=>1000,26650=>1000,26651=>1000,26652=>1000,26653=>1000,26654=>1000,26655=>1000,26656=>1000,26657=>1000,26658=>1000,26659=>1000,26660=>1000, + 26661=>1000,26662=>1000,26663=>1000,26664=>1000,26665=>1000,26666=>1000,26667=>1000,26668=>1000,26669=>1000,26670=>1000,26671=>1000,26672=>1000,26673=>1000,26674=>1000,26675=>1000,26676=>1000, + 26677=>1000,26678=>1000,26679=>1000,26680=>1000,26681=>1000,26682=>1000,26683=>1000,26684=>1000,26685=>1000,26686=>1000,26687=>1000,26688=>1000,26689=>1000,26690=>1000,26691=>1000,26692=>1000, + 26693=>1000,26694=>1000,26695=>1000,26696=>1000,26697=>1000,26698=>1000,26699=>1000,26700=>1000,26701=>1000,26702=>1000,26703=>1000,26704=>1000,26705=>1000,26706=>1000,26707=>1000,26708=>1000, + 26709=>1000,26710=>1000,26711=>1000,26712=>1000,26713=>1000,26714=>1000,26715=>1000,26716=>1000,26717=>1000,26718=>1000,26719=>1000,26720=>1000,26721=>1000,26722=>1000,26723=>1000,26724=>1000, + 26725=>1000,26726=>1000,26727=>1000,26728=>1000,26729=>1000,26730=>1000,26731=>1000,26732=>1000,26733=>1000,26734=>1000,26735=>1000,26736=>1000,26737=>1000,26738=>1000,26739=>1000,26740=>1000, + 26741=>1000,26742=>1000,26743=>1000,26744=>1000,26745=>1000,26746=>1000,26747=>1000,26748=>1000,26749=>1000,26750=>1000,26751=>1000,26752=>1000,26753=>1000,26754=>1000,26755=>1000,26756=>1000, + 26757=>1000,26758=>1000,26759=>1000,26760=>1000,26761=>1000,26762=>1000,26763=>1000,26764=>1000,26765=>1000,26766=>1000,26767=>1000,26768=>1000,26769=>1000,26770=>1000,26771=>1000,26772=>1000, + 26773=>1000,26774=>1000,26775=>1000,26776=>1000,26777=>1000,26778=>1000,26779=>1000,26780=>1000,26781=>1000,26782=>1000,26783=>1000,26784=>1000,26785=>1000,26786=>1000,26787=>1000,26788=>1000, + 26789=>1000,26790=>1000,26791=>1000,26792=>1000,26793=>1000,26794=>1000,26795=>1000,26796=>1000,26797=>1000,26798=>1000,26799=>1000,26800=>1000,26801=>1000,26802=>1000,26803=>1000,26804=>1000, + 26805=>1000,26806=>1000,26807=>1000,26808=>1000,26809=>1000,26810=>1000,26811=>1000,26812=>1000,26813=>1000,26814=>1000,26815=>1000,26816=>1000,26817=>1000,26818=>1000,26819=>1000,26820=>1000, + 26821=>1000,26822=>1000,26823=>1000,26824=>1000,26825=>1000,26826=>1000,26827=>1000,26828=>1000,26829=>1000,26830=>1000,26831=>1000,26832=>1000,26833=>1000,26834=>1000,26835=>1000,26836=>1000, + 26837=>1000,26838=>1000,26839=>1000,26840=>1000,26841=>1000,26842=>1000,26843=>1000,26844=>1000,26845=>1000,26846=>1000,26847=>1000,26848=>1000,26849=>1000,26850=>1000,26851=>1000,26852=>1000, + 26853=>1000,26854=>1000,26855=>1000,26856=>1000,26857=>1000,26858=>1000,26859=>1000,26860=>1000,26861=>1000,26862=>1000,26863=>1000,26864=>1000,26865=>1000,26866=>1000,26867=>1000,26868=>1000, + 26869=>1000,26870=>1000,26871=>1000,26872=>1000,26873=>1000,26874=>1000,26875=>1000,26876=>1000,26877=>1000,26878=>1000,26879=>1000,26880=>1000,26881=>1000,26882=>1000,26883=>1000,26884=>1000, + 26885=>1000,26886=>1000,26887=>1000,26888=>1000,26889=>1000,26890=>1000,26891=>1000,26892=>1000,26893=>1000,26894=>1000,26895=>1000,26896=>1000,26897=>1000,26898=>1000,26899=>1000,26900=>1000, + 26901=>1000,26902=>1000,26903=>1000,26904=>1000,26905=>1000,26906=>1000,26907=>1000,26908=>1000,26909=>1000,26910=>1000,26911=>1000,26912=>1000,26913=>1000,26914=>1000,26915=>1000,26916=>1000, + 26917=>1000,26918=>1000,26919=>1000,26920=>1000,26921=>1000,26922=>1000,26923=>1000,26924=>1000,26925=>1000,26926=>1000,26927=>1000,26928=>1000,26929=>1000,26930=>1000,26931=>1000,26932=>1000, + 26933=>1000,26934=>1000,26935=>1000,26936=>1000,26937=>1000,26938=>1000,26939=>1000,26940=>1000,26941=>1000,26942=>1000,26943=>1000,26944=>1000,26945=>1000,26946=>1000,26947=>1000,26948=>1000, + 26949=>1000,26950=>1000,26951=>1000,26952=>1000,26953=>1000,26954=>1000,26955=>1000,26956=>1000,26957=>1000,26958=>1000,26959=>1000,26960=>1000,26961=>1000,26962=>1000,26963=>1000,26964=>1000, + 26965=>1000,26966=>1000,26967=>1000,26968=>1000,26969=>1000,26970=>1000,26971=>1000,26972=>1000,26973=>1000,26974=>1000,26975=>1000,26976=>1000,26977=>1000,26978=>1000,26979=>1000,26980=>1000, + 26981=>1000,26982=>1000,26983=>1000,26984=>1000,26985=>1000,26986=>1000,26987=>1000,26988=>1000,26989=>1000,26990=>1000,26991=>1000,26992=>1000,26993=>1000,26994=>1000,26995=>1000,26996=>1000, + 26997=>1000,26998=>1000,26999=>1000,27000=>1000,27001=>1000,27002=>1000,27003=>1000,27004=>1000,27005=>1000,27006=>1000,27007=>1000,27008=>1000,27009=>1000,27010=>1000,27011=>1000,27012=>1000, + 27013=>1000,27014=>1000,27015=>1000,27016=>1000,27017=>1000,27018=>1000,27019=>1000,27020=>1000,27021=>1000,27022=>1000,27023=>1000,27024=>1000,27025=>1000,27026=>1000,27027=>1000,27028=>1000, + 27029=>1000,27030=>1000,27031=>1000,27032=>1000,27033=>1000,27034=>1000,27035=>1000,27036=>1000,27037=>1000,27038=>1000,27039=>1000,27040=>1000,27041=>1000,27042=>1000,27043=>1000,27044=>1000, + 27045=>1000,27046=>1000,27047=>1000,27048=>1000,27049=>1000,27050=>1000,27051=>1000,27052=>1000,27053=>1000,27054=>1000,27055=>1000,27056=>1000,27057=>1000,27058=>1000,27059=>1000,27060=>1000, + 27061=>1000,27062=>1000,27063=>1000,27064=>1000,27065=>1000,27066=>1000,27067=>1000,27068=>1000,27069=>1000,27070=>1000,27071=>1000,27072=>1000,27073=>1000,27074=>1000,27075=>1000,27076=>1000, + 27077=>1000,27078=>1000,27079=>1000,27080=>1000,27081=>1000,27082=>1000,27083=>1000,27084=>1000,27085=>1000,27086=>1000,27087=>1000,27088=>1000,27089=>1000,27090=>1000,27091=>1000,27092=>1000, + 27093=>1000,27094=>1000,27095=>1000,27096=>1000,27097=>1000,27098=>1000,27099=>1000,27100=>1000,27101=>1000,27102=>1000,27103=>1000,27104=>1000,27105=>1000,27106=>1000,27107=>1000,27108=>1000, + 27109=>1000,27110=>1000,27111=>1000,27112=>1000,27113=>1000,27114=>1000,27115=>1000,27116=>1000,27117=>1000,27118=>1000,27119=>1000,27120=>1000,27121=>1000,27122=>1000,27123=>1000,27124=>1000, + 27125=>1000,27126=>1000,27127=>1000,27128=>1000,27129=>1000,27130=>1000,27131=>1000,27132=>1000,27133=>1000,27134=>1000,27135=>1000,27136=>1000,27137=>1000,27138=>1000,27139=>1000,27140=>1000, + 27141=>1000,27142=>1000,27143=>1000,27144=>1000,27145=>1000,27146=>1000,27147=>1000,27148=>1000,27149=>1000,27150=>1000,27151=>1000,27152=>1000,27153=>1000,27154=>1000,27155=>1000,27156=>1000, + 27157=>1000,27158=>1000,27159=>1000,27160=>1000,27161=>1000,27162=>1000,27163=>1000,27164=>1000,27165=>1000,27166=>1000,27167=>1000,27168=>1000,27169=>1000,27170=>1000,27171=>1000,27172=>1000, + 27173=>1000,27174=>1000,27175=>1000,27176=>1000,27177=>1000,27178=>1000,27179=>1000,27180=>1000,27181=>1000,27182=>1000,27183=>1000,27184=>1000,27185=>1000,27186=>1000,27187=>1000,27188=>1000, + 27189=>1000,27190=>1000,27191=>1000,27192=>1000,27193=>1000,27194=>1000,27195=>1000,27196=>1000,27197=>1000,27198=>1000,27199=>1000,27200=>1000,27201=>1000,27202=>1000,27203=>1000,27204=>1000, + 27205=>1000,27206=>1000,27207=>1000,27208=>1000,27209=>1000,27210=>1000,27211=>1000,27212=>1000,27213=>1000,27214=>1000,27215=>1000,27216=>1000,27217=>1000,27218=>1000,27219=>1000,27220=>1000, + 27221=>1000,27222=>1000,27223=>1000,27224=>1000,27225=>1000,27226=>1000,27227=>1000,27228=>1000,27229=>1000,27230=>1000,27231=>1000,27232=>1000,27233=>1000,27234=>1000,27235=>1000,27236=>1000, + 27237=>1000,27238=>1000,27239=>1000,27240=>1000,27241=>1000,27242=>1000,27243=>1000,27244=>1000,27245=>1000,27246=>1000,27247=>1000,27248=>1000,27249=>1000,27250=>1000,27251=>1000,27252=>1000, + 27253=>1000,27254=>1000,27255=>1000,27256=>1000,27257=>1000,27258=>1000,27259=>1000,27260=>1000,27261=>1000,27262=>1000,27263=>1000,27264=>1000,27265=>1000,27266=>1000,27267=>1000,27268=>1000, + 27269=>1000,27270=>1000,27271=>1000,27272=>1000,27273=>1000,27274=>1000,27275=>1000,27276=>1000,27277=>1000,27278=>1000,27279=>1000,27280=>1000,27281=>1000,27282=>1000,27283=>1000,27284=>1000, + 27285=>1000,27286=>1000,27287=>1000,27288=>1000,27289=>1000,27290=>1000,27291=>1000,27292=>1000,27293=>1000,27294=>1000,27295=>1000,27296=>1000,27297=>1000,27298=>1000,27299=>1000,27300=>1000, + 27301=>1000,27302=>1000,27303=>1000,27304=>1000,27305=>1000,27306=>1000,27307=>1000,27308=>1000,27309=>1000,27310=>1000,27311=>1000,27312=>1000,27313=>1000,27314=>1000,27315=>1000,27316=>1000, + 27317=>1000,27318=>1000,27319=>1000,27320=>1000,27321=>1000,27322=>1000,27323=>1000,27324=>1000,27325=>1000,27326=>1000,27327=>1000,27328=>1000,27329=>1000,27330=>1000,27331=>1000,27332=>1000, + 27333=>1000,27334=>1000,27335=>1000,27336=>1000,27337=>1000,27338=>1000,27339=>1000,27340=>1000,27341=>1000,27342=>1000,27343=>1000,27344=>1000,27345=>1000,27346=>1000,27347=>1000,27348=>1000, + 27349=>1000,27350=>1000,27351=>1000,27352=>1000,27353=>1000,27354=>1000,27355=>1000,27356=>1000,27357=>1000,27358=>1000,27359=>1000,27360=>1000,27361=>1000,27362=>1000,27363=>1000,27364=>1000, + 27365=>1000,27366=>1000,27367=>1000,27368=>1000,27369=>1000,27370=>1000,27371=>1000,27372=>1000,27373=>1000,27374=>1000,27375=>1000,27376=>1000,27377=>1000,27378=>1000,27379=>1000,27380=>1000, + 27381=>1000,27382=>1000,27383=>1000,27384=>1000,27385=>1000,27386=>1000,27387=>1000,27388=>1000,27389=>1000,27390=>1000,27391=>1000,27392=>1000,27393=>1000,27394=>1000,27395=>1000,27396=>1000, + 27397=>1000,27398=>1000,27399=>1000,27400=>1000,27401=>1000,27402=>1000,27403=>1000,27404=>1000,27405=>1000,27406=>1000,27407=>1000,27408=>1000,27409=>1000,27410=>1000,27411=>1000,27412=>1000, + 27413=>1000,27414=>1000,27415=>1000,27416=>1000,27417=>1000,27418=>1000,27419=>1000,27420=>1000,27421=>1000,27422=>1000,27423=>1000,27424=>1000,27425=>1000,27426=>1000,27427=>1000,27428=>1000, + 27429=>1000,27430=>1000,27431=>1000,27432=>1000,27433=>1000,27434=>1000,27435=>1000,27436=>1000,27437=>1000,27438=>1000,27439=>1000,27440=>1000,27441=>1000,27442=>1000,27443=>1000,27444=>1000, + 27445=>1000,27446=>1000,27447=>1000,27448=>1000,27449=>1000,27450=>1000,27451=>1000,27452=>1000,27453=>1000,27454=>1000,27455=>1000,27456=>1000,27457=>1000,27458=>1000,27459=>1000,27460=>1000, + 27461=>1000,27462=>1000,27463=>1000,27464=>1000,27465=>1000,27466=>1000,27467=>1000,27468=>1000,27469=>1000,27470=>1000,27471=>1000,27472=>1000,27473=>1000,27474=>1000,27475=>1000,27476=>1000, + 27477=>1000,27478=>1000,27479=>1000,27480=>1000,27481=>1000,27482=>1000,27483=>1000,27484=>1000,27485=>1000,27486=>1000,27487=>1000,27488=>1000,27489=>1000,27490=>1000,27491=>1000,27492=>1000, + 27493=>1000,27494=>1000,27495=>1000,27496=>1000,27497=>1000,27498=>1000,27499=>1000,27500=>1000,27501=>1000,27502=>1000,27503=>1000,27504=>1000,27505=>1000,27506=>1000,27507=>1000,27508=>1000, + 27509=>1000,27510=>1000,27511=>1000,27512=>1000,27513=>1000,27514=>1000,27515=>1000,27516=>1000,27517=>1000,27518=>1000,27519=>1000,27520=>1000,27521=>1000,27522=>1000,27523=>1000,27524=>1000, + 27525=>1000,27526=>1000,27527=>1000,27528=>1000,27529=>1000,27530=>1000,27531=>1000,27532=>1000,27533=>1000,27534=>1000,27535=>1000,27536=>1000,27537=>1000,27538=>1000,27539=>1000,27540=>1000, + 27541=>1000,27542=>1000,27543=>1000,27544=>1000,27545=>1000,27546=>1000,27547=>1000,27548=>1000,27549=>1000,27550=>1000,27551=>1000,27552=>1000,27553=>1000,27554=>1000,27555=>1000,27556=>1000, + 27557=>1000,27558=>1000,27559=>1000,27560=>1000,27561=>1000,27562=>1000,27563=>1000,27564=>1000,27565=>1000,27566=>1000,27567=>1000,27568=>1000,27569=>1000,27570=>1000,27571=>1000,27572=>1000, + 27573=>1000,27574=>1000,27575=>1000,27576=>1000,27577=>1000,27578=>1000,27579=>1000,27580=>1000,27581=>1000,27582=>1000,27583=>1000,27584=>1000,27585=>1000,27586=>1000,27587=>1000,27588=>1000, + 27589=>1000,27590=>1000,27591=>1000,27592=>1000,27593=>1000,27594=>1000,27595=>1000,27596=>1000,27597=>1000,27598=>1000,27599=>1000,27600=>1000,27601=>1000,27602=>1000,27603=>1000,27604=>1000, + 27605=>1000,27606=>1000,27607=>1000,27608=>1000,27609=>1000,27610=>1000,27611=>1000,27612=>1000,27613=>1000,27614=>1000,27615=>1000,27616=>1000,27617=>1000,27618=>1000,27619=>1000,27620=>1000, + 27621=>1000,27622=>1000,27623=>1000,27624=>1000,27625=>1000,27626=>1000,27627=>1000,27628=>1000,27629=>1000,27630=>1000,27631=>1000,27632=>1000,27633=>1000,27634=>1000,27635=>1000,27636=>1000, + 27637=>1000,27638=>1000,27639=>1000,27640=>1000,27641=>1000,27642=>1000,27643=>1000,27644=>1000,27645=>1000,27646=>1000,27647=>1000,27648=>1000,27649=>1000,27650=>1000,27651=>1000,27652=>1000, + 27653=>1000,27654=>1000,27655=>1000,27656=>1000,27657=>1000,27658=>1000,27659=>1000,27660=>1000,27661=>1000,27662=>1000,27663=>1000,27664=>1000,27665=>1000,27666=>1000,27667=>1000,27668=>1000, + 27669=>1000,27670=>1000,27671=>1000,27672=>1000,27673=>1000,27674=>1000,27675=>1000,27676=>1000,27677=>1000,27678=>1000,27679=>1000,27680=>1000,27681=>1000,27682=>1000,27683=>1000,27684=>1000, + 27685=>1000,27686=>1000,27687=>1000,27688=>1000,27689=>1000,27690=>1000,27691=>1000,27692=>1000,27693=>1000,27694=>1000,27695=>1000,27696=>1000,27697=>1000,27698=>1000,27699=>1000,27700=>1000, + 27701=>1000,27702=>1000,27703=>1000,27704=>1000,27705=>1000,27706=>1000,27707=>1000,27708=>1000,27709=>1000,27710=>1000,27711=>1000,27712=>1000,27713=>1000,27714=>1000,27715=>1000,27716=>1000, + 27717=>1000,27718=>1000,27719=>1000,27720=>1000,27721=>1000,27722=>1000,27723=>1000,27724=>1000,27725=>1000,27726=>1000,27727=>1000,27728=>1000,27729=>1000,27730=>1000,27731=>1000,27732=>1000, + 27733=>1000,27734=>1000,27735=>1000,27736=>1000,27737=>1000,27738=>1000,27739=>1000,27740=>1000,27741=>1000,27742=>1000,27743=>1000,27744=>1000,27745=>1000,27746=>1000,27747=>1000,27748=>1000, + 27749=>1000,27750=>1000,27751=>1000,27752=>1000,27753=>1000,27754=>1000,27755=>1000,27756=>1000,27757=>1000,27758=>1000,27759=>1000,27760=>1000,27761=>1000,27762=>1000,27763=>1000,27764=>1000, + 27765=>1000,27766=>1000,27767=>1000,27768=>1000,27769=>1000,27770=>1000,27771=>1000,27772=>1000,27773=>1000,27774=>1000,27775=>1000,27776=>1000,27777=>1000,27778=>1000,27779=>1000,27780=>1000, + 27781=>1000,27782=>1000,27783=>1000,27784=>1000,27785=>1000,27786=>1000,27787=>1000,27788=>1000,27789=>1000,27790=>1000,27791=>1000,27792=>1000,27793=>1000,27794=>1000,27795=>1000,27796=>1000, + 27797=>1000,27798=>1000,27799=>1000,27800=>1000,27801=>1000,27802=>1000,27803=>1000,27804=>1000,27805=>1000,27806=>1000,27807=>1000,27808=>1000,27809=>1000,27810=>1000,27811=>1000,27812=>1000, + 27813=>1000,27814=>1000,27815=>1000,27816=>1000,27817=>1000,27818=>1000,27819=>1000,27820=>1000,27821=>1000,27822=>1000,27823=>1000,27824=>1000,27825=>1000,27826=>1000,27827=>1000,27828=>1000, + 27829=>1000,27830=>1000,27831=>1000,27832=>1000,27833=>1000,27834=>1000,27835=>1000,27836=>1000,27837=>1000,27838=>1000,27839=>1000,27840=>1000,27841=>1000,27842=>1000,27843=>1000,27844=>1000, + 27845=>1000,27846=>1000,27847=>1000,27848=>1000,27849=>1000,27850=>1000,27851=>1000,27852=>1000,27853=>1000,27854=>1000,27855=>1000,27856=>1000,27857=>1000,27858=>1000,27859=>1000,27860=>1000, + 27861=>1000,27862=>1000,27863=>1000,27864=>1000,27865=>1000,27866=>1000,27867=>1000,27868=>1000,27869=>1000,27870=>1000,27871=>1000,27872=>1000,27873=>1000,27874=>1000,27875=>1000,27876=>1000, + 27877=>1000,27878=>1000,27879=>1000,27880=>1000,27881=>1000,27882=>1000,27883=>1000,27884=>1000,27885=>1000,27886=>1000,27887=>1000,27888=>1000,27889=>1000,27890=>1000,27891=>1000,27892=>1000, + 27893=>1000,27894=>1000,27895=>1000,27896=>1000,27897=>1000,27898=>1000,27899=>1000,27900=>1000,27901=>1000,27902=>1000,27903=>1000,27904=>1000,27905=>1000,27906=>1000,27907=>1000,27908=>1000, + 27909=>1000,27910=>1000,27911=>1000,27912=>1000,27913=>1000,27914=>1000,27915=>1000,27916=>1000,27917=>1000,27918=>1000,27919=>1000,27920=>1000,27921=>1000,27922=>1000,27923=>1000,27924=>1000, + 27925=>1000,27926=>1000,27927=>1000,27928=>1000,27929=>1000,27930=>1000,27931=>1000,27932=>1000,27933=>1000,27934=>1000,27935=>1000,27936=>1000,27937=>1000,27938=>1000,27939=>1000,27940=>1000, + 27941=>1000,27942=>1000,27943=>1000,27944=>1000,27945=>1000,27946=>1000,27947=>1000,27948=>1000,27949=>1000,27950=>1000,27951=>1000,27952=>1000,27953=>1000,27954=>1000,27955=>1000,27956=>1000, + 27957=>1000,27958=>1000,27959=>1000,27960=>1000,27961=>1000,27962=>1000,27963=>1000,27964=>1000,27965=>1000,27966=>1000,27967=>1000,27968=>1000,27969=>1000,27970=>1000,27971=>1000,27972=>1000, + 27973=>1000,27974=>1000,27975=>1000,27976=>1000,27977=>1000,27978=>1000,27979=>1000,27980=>1000,27981=>1000,27982=>1000,27983=>1000,27984=>1000,27985=>1000,27986=>1000,27987=>1000,27988=>1000, + 27989=>1000,27990=>1000,27991=>1000,27992=>1000,27993=>1000,27994=>1000,27995=>1000,27996=>1000,27997=>1000,27998=>1000,27999=>1000,28000=>1000,28001=>1000,28002=>1000,28003=>1000,28004=>1000, + 28005=>1000,28006=>1000,28007=>1000,28008=>1000,28009=>1000,28010=>1000,28011=>1000,28012=>1000,28013=>1000,28014=>1000,28015=>1000,28016=>1000,28017=>1000,28018=>1000,28019=>1000,28020=>1000, + 28021=>1000,28022=>1000,28023=>1000,28024=>1000,28025=>1000,28026=>1000,28027=>1000,28028=>1000,28029=>1000,28030=>1000,28031=>1000,28032=>1000,28033=>1000,28034=>1000,28035=>1000,28036=>1000, + 28037=>1000,28038=>1000,28039=>1000,28040=>1000,28041=>1000,28042=>1000,28043=>1000,28044=>1000,28045=>1000,28046=>1000,28047=>1000,28048=>1000,28049=>1000,28050=>1000,28051=>1000,28052=>1000, + 28053=>1000,28054=>1000,28055=>1000,28056=>1000,28057=>1000,28058=>1000,28059=>1000,28060=>1000,28061=>1000,28062=>1000,28063=>1000,28064=>1000,28065=>1000,28066=>1000,28067=>1000,28068=>1000, + 28069=>1000,28070=>1000,28071=>1000,28072=>1000,28073=>1000,28074=>1000,28075=>1000,28076=>1000,28077=>1000,28078=>1000,28079=>1000,28080=>1000,28081=>1000,28082=>1000,28083=>1000,28084=>1000, + 28085=>1000,28086=>1000,28087=>1000,28088=>1000,28089=>1000,28090=>1000,28091=>1000,28092=>1000,28093=>1000,28094=>1000,28095=>1000,28096=>1000,28097=>1000,28098=>1000,28099=>1000,28100=>1000, + 28101=>1000,28102=>1000,28103=>1000,28104=>1000,28105=>1000,28106=>1000,28107=>1000,28108=>1000,28109=>1000,28110=>1000,28111=>1000,28112=>1000,28113=>1000,28114=>1000,28115=>1000,28116=>1000, + 28117=>1000,28118=>1000,28119=>1000,28120=>1000,28121=>1000,28122=>1000,28123=>1000,28124=>1000,28125=>1000,28126=>1000,28127=>1000,28128=>1000,28129=>1000,28130=>1000,28131=>1000,28132=>1000, + 28133=>1000,28134=>1000,28135=>1000,28136=>1000,28137=>1000,28138=>1000,28139=>1000,28140=>1000,28141=>1000,28142=>1000,28143=>1000,28144=>1000,28145=>1000,28146=>1000,28147=>1000,28148=>1000, + 28149=>1000,28150=>1000,28151=>1000,28152=>1000,28153=>1000,28154=>1000,28155=>1000,28156=>1000,28157=>1000,28158=>1000,28159=>1000,28160=>1000,28161=>1000,28162=>1000,28163=>1000,28164=>1000, + 28165=>1000,28166=>1000,28167=>1000,28168=>1000,28169=>1000,28170=>1000,28171=>1000,28172=>1000,28173=>1000,28174=>1000,28175=>1000,28176=>1000,28177=>1000,28178=>1000,28179=>1000,28180=>1000, + 28181=>1000,28182=>1000,28183=>1000,28184=>1000,28185=>1000,28186=>1000,28187=>1000,28188=>1000,28189=>1000,28190=>1000,28191=>1000,28192=>1000,28193=>1000,28194=>1000,28195=>1000,28196=>1000, + 28197=>1000,28198=>1000,28199=>1000,28200=>1000,28201=>1000,28202=>1000,28203=>1000,28204=>1000,28205=>1000,28206=>1000,28207=>1000,28208=>1000,28209=>1000,28210=>1000,28211=>1000,28212=>1000, + 28213=>1000,28214=>1000,28215=>1000,28216=>1000,28217=>1000,28218=>1000,28219=>1000,28220=>1000,28221=>1000,28222=>1000,28223=>1000,28224=>1000,28225=>1000,28226=>1000,28227=>1000,28228=>1000, + 28229=>1000,28230=>1000,28231=>1000,28232=>1000,28233=>1000,28234=>1000,28235=>1000,28236=>1000,28237=>1000,28238=>1000,28239=>1000,28240=>1000,28241=>1000,28242=>1000,28243=>1000,28244=>1000, + 28245=>1000,28246=>1000,28247=>1000,28248=>1000,28249=>1000,28250=>1000,28251=>1000,28252=>1000,28253=>1000,28254=>1000,28255=>1000,28256=>1000,28257=>1000,28258=>1000,28259=>1000,28260=>1000, + 28261=>1000,28262=>1000,28263=>1000,28264=>1000,28265=>1000,28266=>1000,28267=>1000,28268=>1000,28269=>1000,28270=>1000,28271=>1000,28272=>1000,28273=>1000,28274=>1000,28275=>1000,28276=>1000, + 28277=>1000,28278=>1000,28279=>1000,28280=>1000,28281=>1000,28282=>1000,28283=>1000,28284=>1000,28285=>1000,28286=>1000,28287=>1000,28288=>1000,28289=>1000,28290=>1000,28291=>1000,28292=>1000, + 28293=>1000,28294=>1000,28295=>1000,28296=>1000,28297=>1000,28298=>1000,28299=>1000,28300=>1000,28301=>1000,28302=>1000,28303=>1000,28304=>1000,28305=>1000,28306=>1000,28307=>1000,28308=>1000, + 28309=>1000,28310=>1000,28311=>1000,28312=>1000,28313=>1000,28314=>1000,28315=>1000,28316=>1000,28317=>1000,28318=>1000,28319=>1000,28320=>1000,28321=>1000,28322=>1000,28323=>1000,28324=>1000, + 28325=>1000,28326=>1000,28327=>1000,28328=>1000,28329=>1000,28330=>1000,28331=>1000,28332=>1000,28333=>1000,28334=>1000,28335=>1000,28336=>1000,28337=>1000,28338=>1000,28339=>1000,28340=>1000, + 28341=>1000,28342=>1000,28343=>1000,28344=>1000,28345=>1000,28346=>1000,28347=>1000,28348=>1000,28349=>1000,28350=>1000,28351=>1000,28352=>1000,28353=>1000,28354=>1000,28355=>1000,28356=>1000, + 28357=>1000,28358=>1000,28359=>1000,28360=>1000,28361=>1000,28362=>1000,28363=>1000,28364=>1000,28365=>1000,28366=>1000,28367=>1000,28368=>1000,28369=>1000,28370=>1000,28371=>1000,28372=>1000, + 28373=>1000,28374=>1000,28375=>1000,28376=>1000,28377=>1000,28378=>1000,28379=>1000,28380=>1000,28381=>1000,28382=>1000,28383=>1000,28384=>1000,28385=>1000,28386=>1000,28387=>1000,28388=>1000, + 28389=>1000,28390=>1000,28391=>1000,28392=>1000,28393=>1000,28394=>1000,28395=>1000,28396=>1000,28397=>1000,28398=>1000,28399=>1000,28400=>1000,28401=>1000,28402=>1000,28403=>1000,28404=>1000, + 28405=>1000,28406=>1000,28407=>1000,28408=>1000,28409=>1000,28410=>1000,28411=>1000,28412=>1000,28413=>1000,28414=>1000,28415=>1000,28416=>1000,28417=>1000,28418=>1000,28419=>1000,28420=>1000, + 28421=>1000,28422=>1000,28423=>1000,28424=>1000,28425=>1000,28426=>1000,28427=>1000,28428=>1000,28429=>1000,28430=>1000,28431=>1000,28432=>1000,28433=>1000,28434=>1000,28435=>1000,28436=>1000, + 28437=>1000,28438=>1000,28439=>1000,28440=>1000,28441=>1000,28442=>1000,28443=>1000,28444=>1000,28445=>1000,28446=>1000,28447=>1000,28448=>1000,28449=>1000,28450=>1000,28451=>1000,28452=>1000, + 28453=>1000,28454=>1000,28455=>1000,28456=>1000,28457=>1000,28458=>1000,28459=>1000,28460=>1000,28461=>1000,28462=>1000,28463=>1000,28464=>1000,28465=>1000,28466=>1000,28467=>1000,28468=>1000, + 28469=>1000,28470=>1000,28471=>1000,28472=>1000,28473=>1000,28474=>1000,28475=>1000,28476=>1000,28477=>1000,28478=>1000,28479=>1000,28480=>1000,28481=>1000,28482=>1000,28483=>1000,28484=>1000, + 28485=>1000,28486=>1000,28487=>1000,28488=>1000,28489=>1000,28490=>1000,28491=>1000,28492=>1000,28493=>1000,28494=>1000,28495=>1000,28496=>1000,28497=>1000,28498=>1000,28499=>1000,28500=>1000, + 28501=>1000,28502=>1000,28503=>1000,28504=>1000,28505=>1000,28506=>1000,28507=>1000,28508=>1000,28509=>1000,28510=>1000,28511=>1000,28512=>1000,28513=>1000,28514=>1000,28515=>1000,28516=>1000, + 28517=>1000,28518=>1000,28519=>1000,28520=>1000,28521=>1000,28522=>1000,28523=>1000,28524=>1000,28525=>1000,28526=>1000,28527=>1000,28528=>1000,28529=>1000,28530=>1000,28531=>1000,28532=>1000, + 28533=>1000,28534=>1000,28535=>1000,28536=>1000,28537=>1000,28538=>1000,28539=>1000,28540=>1000,28541=>1000,28542=>1000,28543=>1000,28544=>1000,28545=>1000,28546=>1000,28547=>1000,28548=>1000, + 28549=>1000,28550=>1000,28551=>1000,28552=>1000,28553=>1000,28554=>1000,28555=>1000,28556=>1000,28557=>1000,28558=>1000,28559=>1000,28560=>1000,28561=>1000,28562=>1000,28563=>1000,28564=>1000, + 28565=>1000,28566=>1000,28567=>1000,28568=>1000,28569=>1000,28570=>1000,28571=>1000,28572=>1000,28573=>1000,28574=>1000,28575=>1000,28576=>1000,28577=>1000,28578=>1000,28579=>1000,28580=>1000, + 28581=>1000,28582=>1000,28583=>1000,28584=>1000,28585=>1000,28586=>1000,28587=>1000,28588=>1000,28589=>1000,28590=>1000,28591=>1000,28592=>1000,28593=>1000,28594=>1000,28595=>1000,28596=>1000, + 28597=>1000,28598=>1000,28599=>1000,28600=>1000,28601=>1000,28602=>1000,28603=>1000,28604=>1000,28605=>1000,28606=>1000,28607=>1000,28608=>1000,28609=>1000,28610=>1000,28611=>1000,28612=>1000, + 28613=>1000,28614=>1000,28615=>1000,28616=>1000,28617=>1000,28618=>1000,28619=>1000,28620=>1000,28621=>1000,28622=>1000,28623=>1000,28624=>1000,28625=>1000,28626=>1000,28627=>1000,28628=>1000, + 28629=>1000,28630=>1000,28631=>1000,28632=>1000,28633=>1000,28634=>1000,28635=>1000,28636=>1000,28637=>1000,28638=>1000,28639=>1000,28640=>1000,28641=>1000,28642=>1000,28643=>1000,28644=>1000, + 28645=>1000,28646=>1000,28647=>1000,28648=>1000,28649=>1000,28650=>1000,28651=>1000,28652=>1000,28653=>1000,28654=>1000,28655=>1000,28656=>1000,28657=>1000,28658=>1000,28659=>1000,28660=>1000, + 28661=>1000,28662=>1000,28663=>1000,28664=>1000,28665=>1000,28666=>1000,28667=>1000,28668=>1000,28669=>1000,28670=>1000,28671=>1000,28672=>1000,28673=>1000,28674=>1000,28675=>1000,28676=>1000, + 28677=>1000,28678=>1000,28679=>1000,28680=>1000,28681=>1000,28682=>1000,28683=>1000,28684=>1000,28685=>1000,28686=>1000,28687=>1000,28688=>1000,28689=>1000,28690=>1000,28691=>1000,28692=>1000, + 28693=>1000,28694=>1000,28695=>1000,28696=>1000,28697=>1000,28698=>1000,28699=>1000,28700=>1000,28701=>1000,28702=>1000,28703=>1000,28704=>1000,28705=>1000,28706=>1000,28707=>1000,28708=>1000, + 28709=>1000,28710=>1000,28711=>1000,28712=>1000,28713=>1000,28714=>1000,28715=>1000,28716=>1000,28717=>1000,28718=>1000,28719=>1000,28720=>1000,28721=>1000,28722=>1000,28723=>1000,28724=>1000, + 28725=>1000,28726=>1000,28727=>1000,28728=>1000,28729=>1000,28730=>1000,28731=>1000,28732=>1000,28733=>1000,28734=>1000,28735=>1000,28736=>1000,28737=>1000,28738=>1000,28739=>1000,28740=>1000, + 28741=>1000,28742=>1000,28743=>1000,28744=>1000,28745=>1000,28746=>1000,28747=>1000,28748=>1000,28749=>1000,28750=>1000,28751=>1000,28752=>1000,28753=>1000,28754=>1000,28755=>1000,28756=>1000, + 28757=>1000,28758=>1000,28759=>1000,28760=>1000,28761=>1000,28762=>1000,28763=>1000,28764=>1000,28765=>1000,28766=>1000,28767=>1000,28768=>1000,28769=>1000,28770=>1000,28771=>1000,28772=>1000, + 28773=>1000,28774=>1000,28775=>1000,28776=>1000,28777=>1000,28778=>1000,28779=>1000,28780=>1000,28781=>1000,28782=>1000,28783=>1000,28784=>1000,28785=>1000,28786=>1000,28787=>1000,28788=>1000, + 28789=>1000,28790=>1000,28791=>1000,28792=>1000,28793=>1000,28794=>1000,28795=>1000,28796=>1000,28797=>1000,28798=>1000,28799=>1000,28800=>1000,28801=>1000,28802=>1000,28803=>1000,28804=>1000, + 28805=>1000,28806=>1000,28807=>1000,28808=>1000,28809=>1000,28810=>1000,28811=>1000,28812=>1000,28813=>1000,28814=>1000,28815=>1000,28816=>1000,28817=>1000,28818=>1000,28819=>1000,28820=>1000, + 28821=>1000,28822=>1000,28823=>1000,28824=>1000,28825=>1000,28826=>1000,28827=>1000,28828=>1000,28829=>1000,28830=>1000,28831=>1000,28832=>1000,28833=>1000,28834=>1000,28835=>1000,28836=>1000, + 28837=>1000,28838=>1000,28839=>1000,28840=>1000,28841=>1000,28842=>1000,28843=>1000,28844=>1000,28845=>1000,28846=>1000,28847=>1000,28848=>1000,28849=>1000,28850=>1000,28851=>1000,28852=>1000, + 28853=>1000,28854=>1000,28855=>1000,28856=>1000,28857=>1000,28858=>1000,28859=>1000,28860=>1000,28861=>1000,28862=>1000,28863=>1000,28864=>1000,28865=>1000,28866=>1000,28867=>1000,28868=>1000, + 28869=>1000,28870=>1000,28871=>1000,28872=>1000,28873=>1000,28874=>1000,28875=>1000,28876=>1000,28877=>1000,28878=>1000,28879=>1000,28880=>1000,28881=>1000,28882=>1000,28883=>1000,28884=>1000, + 28885=>1000,28886=>1000,28887=>1000,28888=>1000,28889=>1000,28890=>1000,28891=>1000,28892=>1000,28893=>1000,28894=>1000,28895=>1000,28896=>1000,28897=>1000,28898=>1000,28899=>1000,28900=>1000, + 28901=>1000,28902=>1000,28903=>1000,28904=>1000,28905=>1000,28906=>1000,28907=>1000,28908=>1000,28909=>1000,28910=>1000,28911=>1000,28912=>1000,28913=>1000,28914=>1000,28915=>1000,28916=>1000, + 28917=>1000,28918=>1000,28919=>1000,28920=>1000,28921=>1000,28922=>1000,28923=>1000,28924=>1000,28925=>1000,28926=>1000,28927=>1000,28928=>1000,28929=>1000,28930=>1000,28931=>1000,28932=>1000, + 28933=>1000,28934=>1000,28935=>1000,28936=>1000,28937=>1000,28938=>1000,28939=>1000,28940=>1000,28941=>1000,28942=>1000,28943=>1000,28944=>1000,28945=>1000,28946=>1000,28947=>1000,28948=>1000, + 28949=>1000,28950=>1000,28951=>1000,28952=>1000,28953=>1000,28954=>1000,28955=>1000,28956=>1000,28957=>1000,28958=>1000,28959=>1000,28960=>1000,28961=>1000,28962=>1000,28963=>1000,28964=>1000, + 28965=>1000,28966=>1000,28967=>1000,28968=>1000,28969=>1000,28970=>1000,28971=>1000,28972=>1000,28973=>1000,28974=>1000,28975=>1000,28976=>1000,28977=>1000,28978=>1000,28979=>1000,28980=>1000, + 28981=>1000,28982=>1000,28983=>1000,28984=>1000,28985=>1000,28986=>1000,28987=>1000,28988=>1000,28989=>1000,28990=>1000,28991=>1000,28992=>1000,28993=>1000,28994=>1000,28995=>1000,28996=>1000, + 28997=>1000,28998=>1000,28999=>1000,29000=>1000,29001=>1000,29002=>1000,29003=>1000,29004=>1000,29005=>1000,29006=>1000,29007=>1000,29008=>1000,29009=>1000,29010=>1000,29011=>1000,29012=>1000, + 29013=>1000,29014=>1000,29015=>1000,29016=>1000,29017=>1000,29018=>1000,29019=>1000,29020=>1000,29021=>1000,29022=>1000,29023=>1000,29024=>1000,29025=>1000,29026=>1000,29027=>1000,29028=>1000, + 29029=>1000,29030=>1000,29031=>1000,29032=>1000,29033=>1000,29034=>1000,29035=>1000,29036=>1000,29037=>1000,29038=>1000,29039=>1000,29040=>1000,29041=>1000,29042=>1000,29043=>1000,29044=>1000, + 29045=>1000,29046=>1000,29047=>1000,29048=>1000,29049=>1000,29050=>1000,29051=>1000,29052=>1000,29053=>1000,29054=>1000,29055=>1000,29056=>1000,29057=>1000,29058=>1000,29059=>1000,29060=>1000, + 29061=>1000,29062=>1000,29063=>1000,29064=>1000,29065=>1000,29066=>1000,29067=>1000,29068=>1000,29069=>1000,29070=>1000,29071=>1000,29072=>1000,29073=>1000,29074=>1000,29075=>1000,29076=>1000, + 29077=>1000,29078=>1000,29079=>1000,29080=>1000,29081=>1000,29082=>1000,29083=>1000,29084=>1000,29085=>1000,29086=>1000,29087=>1000,29088=>1000,29089=>1000,29090=>1000,29091=>1000,29092=>1000, + 29093=>1000,29094=>1000,29095=>1000,29096=>1000,29097=>1000,29098=>1000,29099=>1000,29100=>1000,29101=>1000,29102=>1000,29103=>1000,29104=>1000,29105=>1000,29106=>1000,29107=>1000,29108=>1000, + 29109=>1000,29110=>1000,29111=>1000,29112=>1000,29113=>1000,29114=>1000,29115=>1000,29116=>1000,29117=>1000,29118=>1000,29119=>1000,29120=>1000,29121=>1000,29122=>1000,29123=>1000,29124=>1000, + 29125=>1000,29126=>1000,29127=>1000,29128=>1000,29129=>1000,29130=>1000,29131=>1000,29132=>1000,29133=>1000,29134=>1000,29135=>1000,29136=>1000,29137=>1000,29138=>1000,29139=>1000,29140=>1000, + 29141=>1000,29142=>1000,29143=>1000,29144=>1000,29145=>1000,29146=>1000,29147=>1000,29148=>1000,29149=>1000,29150=>1000,29151=>1000,29152=>1000,29153=>1000,29154=>1000,29155=>1000,29156=>1000, + 29157=>1000,29158=>1000,29159=>1000,29160=>1000,29161=>1000,29162=>1000,29163=>1000,29164=>1000,29165=>1000,29166=>1000,29167=>1000,29168=>1000,29169=>1000,29170=>1000,29171=>1000,29172=>1000, + 29173=>1000,29174=>1000,29175=>1000,29176=>1000,29177=>1000,29178=>1000,29179=>1000,29180=>1000,29181=>1000,29182=>1000,29183=>1000,29184=>1000,29185=>1000,29186=>1000,29187=>1000,29188=>1000, + 29189=>1000,29190=>1000,29191=>1000,29192=>1000,29193=>1000,29194=>1000,29195=>1000,29196=>1000,29197=>1000,29198=>1000,29199=>1000,29200=>1000,29201=>1000,29202=>1000,29203=>1000,29204=>1000, + 29205=>1000,29206=>1000,29207=>1000,29208=>1000,29209=>1000,29210=>1000,29211=>1000,29212=>1000,29213=>1000,29214=>1000,29215=>1000,29216=>1000,29217=>1000,29218=>1000,29219=>1000,29220=>1000, + 29221=>1000,29222=>1000,29223=>1000,29224=>1000,29225=>1000,29226=>1000,29227=>1000,29228=>1000,29229=>1000,29230=>1000,29231=>1000,29232=>1000,29233=>1000,29234=>1000,29235=>1000,29236=>1000, + 29237=>1000,29238=>1000,29239=>1000,29240=>1000,29241=>1000,29242=>1000,29243=>1000,29244=>1000,29245=>1000,29246=>1000,29247=>1000,29248=>1000,29249=>1000,29250=>1000,29251=>1000,29252=>1000, + 29253=>1000,29254=>1000,29255=>1000,29256=>1000,29257=>1000,29258=>1000,29259=>1000,29260=>1000,29261=>1000,29262=>1000,29263=>1000,29264=>1000,29265=>1000,29266=>1000,29267=>1000,29268=>1000, + 29269=>1000,29270=>1000,29271=>1000,29272=>1000,29273=>1000,29274=>1000,29275=>1000,29276=>1000,29277=>1000,29278=>1000,29279=>1000,29280=>1000,29281=>1000,29282=>1000,29283=>1000,29284=>1000, + 29285=>1000,29286=>1000,29287=>1000,29288=>1000,29289=>1000,29290=>1000,29291=>1000,29292=>1000,29293=>1000,29294=>1000,29295=>1000,29296=>1000,29297=>1000,29298=>1000,29299=>1000,29300=>1000, + 29301=>1000,29302=>1000,29303=>1000,29304=>1000,29305=>1000,29306=>1000,29307=>1000,29308=>1000,29309=>1000,29310=>1000,29311=>1000,29312=>1000,29313=>1000,29314=>1000,29315=>1000,29316=>1000, + 29317=>1000,29318=>1000,29319=>1000,29320=>1000,29321=>1000,29322=>1000,29323=>1000,29324=>1000,29325=>1000,29326=>1000,29327=>1000,29328=>1000,29329=>1000,29330=>1000,29331=>1000,29332=>1000, + 29333=>1000,29334=>1000,29335=>1000,29336=>1000,29337=>1000,29338=>1000,29339=>1000,29340=>1000,29341=>1000,29342=>1000,29343=>1000,29344=>1000,29345=>1000,29346=>1000,29347=>1000,29348=>1000, + 29349=>1000,29350=>1000,29351=>1000,29352=>1000,29353=>1000,29354=>1000,29355=>1000,29356=>1000,29357=>1000,29358=>1000,29359=>1000,29360=>1000,29361=>1000,29362=>1000,29363=>1000,29364=>1000, + 29365=>1000,29366=>1000,29367=>1000,29368=>1000,29369=>1000,29370=>1000,29371=>1000,29372=>1000,29373=>1000,29374=>1000,29375=>1000,29376=>1000,29377=>1000,29378=>1000,29379=>1000,29380=>1000, + 29381=>1000,29382=>1000,29383=>1000,29384=>1000,29385=>1000,29386=>1000,29387=>1000,29388=>1000,29389=>1000,29390=>1000,29391=>1000,29392=>1000,29393=>1000,29394=>1000,29395=>1000,29396=>1000, + 29397=>1000,29398=>1000,29399=>1000,29400=>1000,29401=>1000,29402=>1000,29403=>1000,29404=>1000,29405=>1000,29406=>1000,29407=>1000,29408=>1000,29409=>1000,29410=>1000,29411=>1000,29412=>1000, + 29413=>1000,29414=>1000,29415=>1000,29416=>1000,29417=>1000,29418=>1000,29419=>1000,29420=>1000,29421=>1000,29422=>1000,29423=>1000,29424=>1000,29425=>1000,29426=>1000,29427=>1000,29428=>1000, + 29429=>1000,29430=>1000,29431=>1000,29432=>1000,29433=>1000,29434=>1000,29435=>1000,29436=>1000,29437=>1000,29438=>1000,29439=>1000,29440=>1000,29441=>1000,29442=>1000,29443=>1000,29444=>1000, + 29445=>1000,29446=>1000,29447=>1000,29448=>1000,29449=>1000,29450=>1000,29451=>1000,29452=>1000,29453=>1000,29454=>1000,29455=>1000,29456=>1000,29457=>1000,29458=>1000,29459=>1000,29460=>1000, + 29461=>1000,29462=>1000,29463=>1000,29464=>1000,29465=>1000,29466=>1000,29467=>1000,29468=>1000,29469=>1000,29470=>1000,29471=>1000,29472=>1000,29473=>1000,29474=>1000,29475=>1000,29476=>1000, + 29477=>1000,29478=>1000,29479=>1000,29480=>1000,29481=>1000,29482=>1000,29483=>1000,29484=>1000,29485=>1000,29486=>1000,29487=>1000,29488=>1000,29489=>1000,29490=>1000,29491=>1000,29492=>1000, + 29493=>1000,29494=>1000,29495=>1000,29496=>1000,29497=>1000,29498=>1000,29499=>1000,29500=>1000,29501=>1000,29502=>1000,29503=>1000,29504=>1000,29505=>1000,29506=>1000,29507=>1000,29508=>1000, + 29509=>1000,29510=>1000,29511=>1000,29512=>1000,29513=>1000,29514=>1000,29515=>1000,29516=>1000,29517=>1000,29518=>1000,29519=>1000,29520=>1000,29521=>1000,29522=>1000,29523=>1000,29524=>1000, + 29525=>1000,29526=>1000,29527=>1000,29528=>1000,29529=>1000,29530=>1000,29531=>1000,29532=>1000,29533=>1000,29534=>1000,29535=>1000,29536=>1000,29537=>1000,29538=>1000,29539=>1000,29540=>1000, + 29541=>1000,29542=>1000,29543=>1000,29544=>1000,29545=>1000,29546=>1000,29547=>1000,29548=>1000,29549=>1000,29550=>1000,29551=>1000,29552=>1000,29553=>1000,29554=>1000,29555=>1000,29556=>1000, + 29557=>1000,29558=>1000,29559=>1000,29560=>1000,29561=>1000,29562=>1000,29563=>1000,29564=>1000,29565=>1000,29566=>1000,29567=>1000,29568=>1000,29569=>1000,29570=>1000,29571=>1000,29572=>1000, + 29573=>1000,29574=>1000,29575=>1000,29576=>1000,29577=>1000,29578=>1000,29579=>1000,29580=>1000,29581=>1000,29582=>1000,29583=>1000,29584=>1000,29585=>1000,29586=>1000,29587=>1000,29588=>1000, + 29589=>1000,29590=>1000,29591=>1000,29592=>1000,29593=>1000,29594=>1000,29595=>1000,29596=>1000,29597=>1000,29598=>1000,29599=>1000,29600=>1000,29601=>1000,29602=>1000,29603=>1000,29604=>1000, + 29605=>1000,29606=>1000,29607=>1000,29608=>1000,29609=>1000,29610=>1000,29611=>1000,29612=>1000,29613=>1000,29614=>1000,29615=>1000,29616=>1000,29617=>1000,29618=>1000,29619=>1000,29620=>1000, + 29621=>1000,29622=>1000,29623=>1000,29624=>1000,29625=>1000,29626=>1000,29627=>1000,29628=>1000,29629=>1000,29630=>1000,29631=>1000,29632=>1000,29633=>1000,29634=>1000,29635=>1000,29636=>1000, + 29637=>1000,29638=>1000,29639=>1000,29640=>1000,29641=>1000,29642=>1000,29643=>1000,29644=>1000,29645=>1000,29646=>1000,29647=>1000,29648=>1000,29649=>1000,29650=>1000,29651=>1000,29652=>1000, + 29653=>1000,29654=>1000,29655=>1000,29656=>1000,29657=>1000,29658=>1000,29659=>1000,29660=>1000,29661=>1000,29662=>1000,29663=>1000,29664=>1000,29665=>1000,29666=>1000,29667=>1000,29668=>1000, + 29669=>1000,29670=>1000,29671=>1000,29672=>1000,29673=>1000,29674=>1000,29675=>1000,29676=>1000,29677=>1000,29678=>1000,29679=>1000,29680=>1000,29681=>1000,29682=>1000,29683=>1000,29684=>1000, + 29685=>1000,29686=>1000,29687=>1000,29688=>1000,29689=>1000,29690=>1000,29691=>1000,29692=>1000,29693=>1000,29694=>1000,29695=>1000,29696=>1000,29697=>1000,29698=>1000,29699=>1000,29700=>1000, + 29701=>1000,29702=>1000,29703=>1000,29704=>1000,29705=>1000,29706=>1000,29707=>1000,29708=>1000,29709=>1000,29710=>1000,29711=>1000,29712=>1000,29713=>1000,29714=>1000,29715=>1000,29716=>1000, + 29717=>1000,29718=>1000,29719=>1000,29720=>1000,29721=>1000,29722=>1000,29723=>1000,29724=>1000,29725=>1000,29726=>1000,29727=>1000,29728=>1000,29729=>1000,29730=>1000,29731=>1000,29732=>1000, + 29733=>1000,29734=>1000,29735=>1000,29736=>1000,29737=>1000,29738=>1000,29739=>1000,29740=>1000,29741=>1000,29742=>1000,29743=>1000,29744=>1000,29745=>1000,29746=>1000,29747=>1000,29748=>1000, + 29749=>1000,29750=>1000,29751=>1000,29752=>1000,29753=>1000,29754=>1000,29755=>1000,29756=>1000,29757=>1000,29758=>1000,29759=>1000,29760=>1000,29761=>1000,29762=>1000,29763=>1000,29764=>1000, + 29765=>1000,29766=>1000,29767=>1000,29768=>1000,29769=>1000,29770=>1000,29771=>1000,29772=>1000,29773=>1000,29774=>1000,29775=>1000,29776=>1000,29777=>1000,29778=>1000,29779=>1000,29780=>1000, + 29781=>1000,29782=>1000,29783=>1000,29784=>1000,29785=>1000,29786=>1000,29787=>1000,29788=>1000,29789=>1000,29790=>1000,29791=>1000,29792=>1000,29793=>1000,29794=>1000,29795=>1000,29796=>1000, + 29797=>1000,29798=>1000,29799=>1000,29800=>1000,29801=>1000,29802=>1000,29803=>1000,29804=>1000,29805=>1000,29806=>1000,29807=>1000,29808=>1000,29809=>1000,29810=>1000,29811=>1000,29812=>1000, + 29813=>1000,29814=>1000,29815=>1000,29816=>1000,29817=>1000,29818=>1000,29819=>1000,29820=>1000,29821=>1000,29822=>1000,29823=>1000,29824=>1000,29825=>1000,29826=>1000,29827=>1000,29828=>1000, + 29829=>1000,29830=>1000,29831=>1000,29832=>1000,29833=>1000,29834=>1000,29835=>1000,29836=>1000,29837=>1000,29838=>1000,29839=>1000,29840=>1000,29841=>1000,29842=>1000,29843=>1000,29844=>1000, + 29845=>1000,29846=>1000,29847=>1000,29848=>1000,29849=>1000,29850=>1000,29851=>1000,29852=>1000,29853=>1000,29854=>1000,29855=>1000,29856=>1000,29857=>1000,29858=>1000,29859=>1000,29860=>1000, + 29861=>1000,29862=>1000,29863=>1000,29864=>1000,29865=>1000,29866=>1000,29867=>1000,29868=>1000,29869=>1000,29870=>1000,29871=>1000,29872=>1000,29873=>1000,29874=>1000,29875=>1000,29876=>1000, + 29877=>1000,29878=>1000,29879=>1000,29880=>1000,29881=>1000,29882=>1000,29883=>1000,29884=>1000,29885=>1000,29886=>1000,29887=>1000,29888=>1000,29889=>1000,29890=>1000,29891=>1000,29892=>1000, + 29893=>1000,29894=>1000,29895=>1000,29896=>1000,29897=>1000,29898=>1000,29899=>1000,29900=>1000,29901=>1000,29902=>1000,29903=>1000,29904=>1000,29905=>1000,29906=>1000,29907=>1000,29908=>1000, + 29909=>1000,29910=>1000,29911=>1000,29912=>1000,29913=>1000,29914=>1000,29915=>1000,29916=>1000,29917=>1000,29918=>1000,29919=>1000,29920=>1000,29921=>1000,29922=>1000,29923=>1000,29924=>1000, + 29925=>1000,29926=>1000,29927=>1000,29928=>1000,29929=>1000,29930=>1000,29931=>1000,29932=>1000,29933=>1000,29934=>1000,29935=>1000,29936=>1000,29937=>1000,29938=>1000,29939=>1000,29940=>1000, + 29941=>1000,29942=>1000,29943=>1000,29944=>1000,29945=>1000,29946=>1000,29947=>1000,29948=>1000,29949=>1000,29950=>1000,29951=>1000,29952=>1000,29953=>1000,29954=>1000,29955=>1000,29956=>1000, + 29957=>1000,29958=>1000,29959=>1000,29960=>1000,29961=>1000,29962=>1000,29963=>1000,29964=>1000,29965=>1000,29966=>1000,29967=>1000,29968=>1000,29969=>1000,29970=>1000,29971=>1000,29972=>1000, + 29973=>1000,29974=>1000,29975=>1000,29976=>1000,29977=>1000,29978=>1000,29979=>1000,29980=>1000,29981=>1000,29982=>1000,29983=>1000,29984=>1000,29985=>1000,29986=>1000,29987=>1000,29988=>1000, + 29989=>1000,29990=>1000,29991=>1000,29992=>1000,29993=>1000,29994=>1000,29995=>1000,29996=>1000,29997=>1000,29998=>1000,29999=>1000,30000=>1000,30001=>1000,30002=>1000,30003=>1000,30004=>1000, + 30005=>1000,30006=>1000,30007=>1000,30008=>1000,30009=>1000,30010=>1000,30011=>1000,30012=>1000,30013=>1000,30014=>1000,30015=>1000,30016=>1000,30017=>1000,30018=>1000,30019=>1000,30020=>1000, + 30021=>1000,30022=>1000,30023=>1000,30024=>1000,30025=>1000,30026=>1000,30027=>1000,30028=>1000,30029=>1000,30030=>1000,30031=>1000,30032=>1000,30033=>1000,30034=>1000,30035=>1000,30036=>1000, + 30037=>1000,30038=>1000,30039=>1000,30040=>1000,30041=>1000,30042=>1000,30043=>1000,30044=>1000,30045=>1000,30046=>1000,30047=>1000,30048=>1000,30049=>1000,30050=>1000,30051=>1000,30052=>1000, + 30053=>1000,30054=>1000,30055=>1000,30056=>1000,30057=>1000,30058=>1000,30059=>1000,30060=>1000,30061=>1000,30062=>1000,30063=>1000,30064=>1000,30065=>1000,30066=>1000,30067=>1000,30068=>1000, + 30069=>1000,30070=>1000,30071=>1000,30072=>1000,30073=>1000,30074=>1000,30075=>1000,30076=>1000,30077=>1000,30078=>1000,30079=>1000,30080=>1000,30081=>1000,30082=>1000,30083=>1000,30084=>1000, + 30085=>1000,30086=>1000,30087=>1000,30088=>1000,30089=>1000,30090=>1000,30091=>1000,30092=>1000,30093=>1000,30094=>1000,30095=>1000,30096=>1000,30097=>1000,30098=>1000,30099=>1000,30100=>1000, + 30101=>1000,30102=>1000,30103=>1000,30104=>1000,30105=>1000,30106=>1000,30107=>1000,30108=>1000,30109=>1000,30110=>1000,30111=>1000,30112=>1000,30113=>1000,30114=>1000,30115=>1000,30116=>1000, + 30117=>1000,30118=>1000,30119=>1000,30120=>1000,30121=>1000,30122=>1000,30123=>1000,30124=>1000,30125=>1000,30126=>1000,30127=>1000,30128=>1000,30129=>1000,30130=>1000,30131=>1000,30132=>1000, + 30133=>1000,30134=>1000,30135=>1000,30136=>1000,30137=>1000,30138=>1000,30139=>1000,30140=>1000,30141=>1000,30142=>1000,30143=>1000,30144=>1000,30145=>1000,30146=>1000,30147=>1000,30148=>1000, + 30149=>1000,30150=>1000,30151=>1000,30152=>1000,30153=>1000,30154=>1000,30155=>1000,30156=>1000,30157=>1000,30158=>1000,30159=>1000,30160=>1000,30161=>1000,30162=>1000,30163=>1000,30164=>1000, + 30165=>1000,30166=>1000,30167=>1000,30168=>1000,30169=>1000,30170=>1000,30171=>1000,30172=>1000,30173=>1000,30174=>1000,30175=>1000,30176=>1000,30177=>1000,30178=>1000,30179=>1000,30180=>1000, + 30181=>1000,30182=>1000,30183=>1000,30184=>1000,30185=>1000,30186=>1000,30187=>1000,30188=>1000,30189=>1000,30190=>1000,30191=>1000,30192=>1000,30193=>1000,30194=>1000,30195=>1000,30196=>1000, + 30197=>1000,30198=>1000,30199=>1000,30200=>1000,30201=>1000,30202=>1000,30203=>1000,30204=>1000,30205=>1000,30206=>1000,30207=>1000,30208=>1000,30209=>1000,30210=>1000,30211=>1000,30212=>1000, + 30213=>1000,30214=>1000,30215=>1000,30216=>1000,30217=>1000,30218=>1000,30219=>1000,30220=>1000,30221=>1000,30222=>1000,30223=>1000,30224=>1000,30225=>1000,30226=>1000,30227=>1000,30228=>1000, + 30229=>1000,30230=>1000,30231=>1000,30232=>1000,30233=>1000,30234=>1000,30235=>1000,30236=>1000,30237=>1000,30238=>1000,30239=>1000,30240=>1000,30241=>1000,30242=>1000,30243=>1000,30244=>1000, + 30245=>1000,30246=>1000,30247=>1000,30248=>1000,30249=>1000,30250=>1000,30251=>1000,30252=>1000,30253=>1000,30254=>1000,30255=>1000,30256=>1000,30257=>1000,30258=>1000,30259=>1000,30260=>1000, + 30261=>1000,30262=>1000,30263=>1000,30264=>1000,30265=>1000,30266=>1000,30267=>1000,30268=>1000,30269=>1000,30270=>1000,30271=>1000,30272=>1000,30273=>1000,30274=>1000,30275=>1000,30276=>1000, + 30277=>1000,30278=>1000,30279=>1000,30280=>1000,30281=>1000,30282=>1000,30283=>1000,30284=>1000,30285=>1000,30286=>1000,30287=>1000,30288=>1000,30289=>1000,30290=>1000,30291=>1000,30292=>1000, + 30293=>1000,30294=>1000,30295=>1000,30296=>1000,30297=>1000,30298=>1000,30299=>1000,30300=>1000,30301=>1000,30302=>1000,30303=>1000,30304=>1000,30305=>1000,30306=>1000,30307=>1000,30308=>1000, + 30309=>1000,30310=>1000,30311=>1000,30312=>1000,30313=>1000,30314=>1000,30315=>1000,30316=>1000,30317=>1000,30318=>1000,30319=>1000,30320=>1000,30321=>1000,30322=>1000,30323=>1000,30324=>1000, + 30325=>1000,30326=>1000,30327=>1000,30328=>1000,30329=>1000,30330=>1000,30331=>1000,30332=>1000,30333=>1000,30334=>1000,30335=>1000,30336=>1000,30337=>1000,30338=>1000,30339=>1000,30340=>1000, + 30341=>1000,30342=>1000,30343=>1000,30344=>1000,30345=>1000,30346=>1000,30347=>1000,30348=>1000,30349=>1000,30350=>1000,30351=>1000,30352=>1000,30353=>1000,30354=>1000,30355=>1000,30356=>1000, + 30357=>1000,30358=>1000,30359=>1000,30360=>1000,30361=>1000,30362=>1000,30363=>1000,30364=>1000,30365=>1000,30366=>1000,30367=>1000,30368=>1000,30369=>1000,30370=>1000,30371=>1000,30372=>1000, + 30373=>1000,30374=>1000,30375=>1000,30376=>1000,30377=>1000,30378=>1000,30379=>1000,30380=>1000,30381=>1000,30382=>1000,30383=>1000,30384=>1000,30385=>1000,30386=>1000,30387=>1000,30388=>1000, + 30389=>1000,30390=>1000,30391=>1000,30392=>1000,30393=>1000,30394=>1000,30395=>1000,30396=>1000,30397=>1000,30398=>1000,30399=>1000,30400=>1000,30401=>1000,30402=>1000,30403=>1000,30404=>1000, + 30405=>1000,30406=>1000,30407=>1000,30408=>1000,30409=>1000,30410=>1000,30411=>1000,30412=>1000,30413=>1000,30414=>1000,30415=>1000,30416=>1000,30417=>1000,30418=>1000,30419=>1000,30420=>1000, + 30421=>1000,30422=>1000,30423=>1000,30424=>1000,30425=>1000,30426=>1000,30427=>1000,30428=>1000,30429=>1000,30430=>1000,30431=>1000,30432=>1000,30433=>1000,30434=>1000,30435=>1000,30436=>1000, + 30437=>1000,30438=>1000,30439=>1000,30440=>1000,30441=>1000,30442=>1000,30443=>1000,30444=>1000,30445=>1000,30446=>1000,30447=>1000,30448=>1000,30449=>1000,30450=>1000,30451=>1000,30452=>1000, + 30453=>1000,30454=>1000,30455=>1000,30456=>1000,30457=>1000,30458=>1000,30459=>1000,30460=>1000,30461=>1000,30462=>1000,30463=>1000,30464=>1000,30465=>1000,30466=>1000,30467=>1000,30468=>1000, + 30469=>1000,30470=>1000,30471=>1000,30472=>1000,30473=>1000,30474=>1000,30475=>1000,30476=>1000,30477=>1000,30478=>1000,30479=>1000,30480=>1000,30481=>1000,30482=>1000,30483=>1000,30484=>1000, + 30485=>1000,30486=>1000,30487=>1000,30488=>1000,30489=>1000,30490=>1000,30491=>1000,30492=>1000,30493=>1000,30494=>1000,30495=>1000,30496=>1000,30497=>1000,30498=>1000,30499=>1000,30500=>1000, + 30501=>1000,30502=>1000,30503=>1000,30504=>1000,30505=>1000,30506=>1000,30507=>1000,30508=>1000,30509=>1000,30510=>1000,30511=>1000,30512=>1000,30513=>1000,30514=>1000,30515=>1000,30516=>1000, + 30517=>1000,30518=>1000,30519=>1000,30520=>1000,30521=>1000,30522=>1000,30523=>1000,30524=>1000,30525=>1000,30526=>1000,30527=>1000,30528=>1000,30529=>1000,30530=>1000,30531=>1000,30532=>1000, + 30533=>1000,30534=>1000,30535=>1000,30536=>1000,30537=>1000,30538=>1000,30539=>1000,30540=>1000,30541=>1000,30542=>1000,30543=>1000,30544=>1000,30545=>1000,30546=>1000,30547=>1000,30548=>1000, + 30549=>1000,30550=>1000,30551=>1000,30552=>1000,30553=>1000,30554=>1000,30555=>1000,30556=>1000,30557=>1000,30558=>1000,30559=>1000,30560=>1000,30561=>1000,30562=>1000,30563=>1000,30564=>1000, + 30565=>1000,30566=>1000,30567=>1000,30568=>1000,30569=>1000,30570=>1000,30571=>1000,30572=>1000,30573=>1000,30574=>1000,30575=>1000,30576=>1000,30577=>1000,30578=>1000,30579=>1000,30580=>1000, + 30581=>1000,30582=>1000,30583=>1000,30584=>1000,30585=>1000,30586=>1000,30587=>1000,30588=>1000,30589=>1000,30590=>1000,30591=>1000,30592=>1000,30593=>1000,30594=>1000,30595=>1000,30596=>1000, + 30597=>1000,30598=>1000,30599=>1000,30600=>1000,30601=>1000,30602=>1000,30603=>1000,30604=>1000,30605=>1000,30606=>1000,30607=>1000,30608=>1000,30609=>1000,30610=>1000,30611=>1000,30612=>1000, + 30613=>1000,30614=>1000,30615=>1000,30616=>1000,30617=>1000,30618=>1000,30619=>1000,30620=>1000,30621=>1000,30622=>1000,30623=>1000,30624=>1000,30625=>1000,30626=>1000,30627=>1000,30628=>1000, + 30629=>1000,30630=>1000,30631=>1000,30632=>1000,30633=>1000,30634=>1000,30635=>1000,30636=>1000,30637=>1000,30638=>1000,30639=>1000,30640=>1000,30641=>1000,30642=>1000,30643=>1000,30644=>1000, + 30645=>1000,30646=>1000,30647=>1000,30648=>1000,30649=>1000,30650=>1000,30651=>1000,30652=>1000,30653=>1000,30654=>1000,30655=>1000,30656=>1000,30657=>1000,30658=>1000,30659=>1000,30660=>1000, + 30661=>1000,30662=>1000,30663=>1000,30664=>1000,30665=>1000,30666=>1000,30667=>1000,30668=>1000,30669=>1000,30670=>1000,30671=>1000,30672=>1000,30673=>1000,30674=>1000,30675=>1000,30676=>1000, + 30677=>1000,30678=>1000,30679=>1000,30680=>1000,30681=>1000,30682=>1000,30683=>1000,30684=>1000,30685=>1000,30686=>1000,30687=>1000,30688=>1000,30689=>1000,30690=>1000,30691=>1000,30692=>1000, + 30693=>1000,30694=>1000,30695=>1000,30696=>1000,30697=>1000,30698=>1000,30699=>1000,30700=>1000,30701=>1000,30702=>1000,30703=>1000,30704=>1000,30705=>1000,30706=>1000,30707=>1000,30708=>1000, + 30709=>1000,30710=>1000,30711=>1000,30712=>1000,30713=>1000,30714=>1000,30715=>1000,30716=>1000,30717=>1000,30718=>1000,30719=>1000,30720=>1000,30721=>1000,30722=>1000,30723=>1000,30724=>1000, + 30725=>1000,30726=>1000,30727=>1000,30728=>1000,30729=>1000,30730=>1000,30731=>1000,30732=>1000,30733=>1000,30734=>1000,30735=>1000,30736=>1000,30737=>1000,30738=>1000,30739=>1000,30740=>1000, + 30741=>1000,30742=>1000,30743=>1000,30744=>1000,30745=>1000,30746=>1000,30747=>1000,30748=>1000,30749=>1000,30750=>1000,30751=>1000,30752=>1000,30753=>1000,30754=>1000,30755=>1000,30756=>1000, + 30757=>1000,30758=>1000,30759=>1000,30760=>1000,30761=>1000,30762=>1000,30763=>1000,30764=>1000,30765=>1000,30766=>1000,30767=>1000,30768=>1000,30769=>1000,30770=>1000,30771=>1000,30772=>1000, + 30773=>1000,30774=>1000,30775=>1000,30776=>1000,30777=>1000,30778=>1000,30779=>1000,30780=>1000,30781=>1000,30782=>1000,30783=>1000,30784=>1000,30785=>1000,30786=>1000,30787=>1000,30788=>1000, + 30789=>1000,30790=>1000,30791=>1000,30792=>1000,30793=>1000,30794=>1000,30795=>1000,30796=>1000,30797=>1000,30798=>1000,30799=>1000,30800=>1000,30801=>1000,30802=>1000,30803=>1000,30804=>1000, + 30805=>1000,30806=>1000,30807=>1000,30808=>1000,30809=>1000,30810=>1000,30811=>1000,30812=>1000,30813=>1000,30814=>1000,30815=>1000,30816=>1000,30817=>1000,30818=>1000,30819=>1000,30820=>1000, + 30821=>1000,30822=>1000,30823=>1000,30824=>1000,30825=>1000,30826=>1000,30827=>1000,30828=>1000,30829=>1000,30830=>1000,30831=>1000,30832=>1000,30833=>1000,30834=>1000,30835=>1000,30836=>1000, + 30837=>1000,30838=>1000,30839=>1000,30840=>1000,30841=>1000,30842=>1000,30843=>1000,30844=>1000,30845=>1000,30846=>1000,30847=>1000,30848=>1000,30849=>1000,30850=>1000,30851=>1000,30852=>1000, + 30853=>1000,30854=>1000,30855=>1000,30856=>1000,30857=>1000,30858=>1000,30859=>1000,30860=>1000,30861=>1000,30862=>1000,30863=>1000,30864=>1000,30865=>1000,30866=>1000,30867=>1000,30868=>1000, + 30869=>1000,30870=>1000,30871=>1000,30872=>1000,30873=>1000,30874=>1000,30875=>1000,30876=>1000,30877=>1000,30878=>1000,30879=>1000,30880=>1000,30881=>1000,30882=>1000,30883=>1000,30884=>1000, + 30885=>1000,30886=>1000,30887=>1000,30888=>1000,30889=>1000,30890=>1000,30891=>1000,30892=>1000,30893=>1000,30894=>1000,30895=>1000,30896=>1000,30897=>1000,30898=>1000,30899=>1000,30900=>1000, + 30901=>1000,30902=>1000,30903=>1000,30904=>1000,30905=>1000,30906=>1000,30907=>1000,30908=>1000,30909=>1000,30910=>1000,30911=>1000,30912=>1000,30913=>1000,30914=>1000,30915=>1000,30916=>1000, + 30917=>1000,30918=>1000,30919=>1000,30920=>1000,30921=>1000,30922=>1000,30923=>1000,30924=>1000,30925=>1000,30926=>1000,30927=>1000,30928=>1000,30929=>1000,30930=>1000,30931=>1000,30932=>1000, + 30933=>1000,30934=>1000,30935=>1000,30936=>1000,30937=>1000,30938=>1000,30939=>1000,30940=>1000,30941=>1000,30942=>1000,30943=>1000,30944=>1000,30945=>1000,30946=>1000,30947=>1000,30948=>1000, + 30949=>1000,30950=>1000,30951=>1000,30952=>1000,30953=>1000,30954=>1000,30955=>1000,30956=>1000,30957=>1000,30958=>1000,30959=>1000,30960=>1000,30961=>1000,30962=>1000,30963=>1000,30964=>1000, + 30965=>1000,30966=>1000,30967=>1000,30968=>1000,30969=>1000,30970=>1000,30971=>1000,30972=>1000,30973=>1000,30974=>1000,30975=>1000,30976=>1000,30977=>1000,30978=>1000,30979=>1000,30980=>1000, + 30981=>1000,30982=>1000,30983=>1000,30984=>1000,30985=>1000,30986=>1000,30987=>1000,30988=>1000,30989=>1000,30990=>1000,30991=>1000,30992=>1000,30993=>1000,30994=>1000,30995=>1000,30996=>1000, + 30997=>1000,30998=>1000,30999=>1000,31000=>1000,31001=>1000,31002=>1000,31003=>1000,31004=>1000,31005=>1000,31006=>1000,31007=>1000,31008=>1000,31009=>1000,31010=>1000,31011=>1000,31012=>1000, + 31013=>1000,31014=>1000,31015=>1000,31016=>1000,31017=>1000,31018=>1000,31019=>1000,31020=>1000,31021=>1000,31022=>1000,31023=>1000,31024=>1000,31025=>1000,31026=>1000,31027=>1000,31028=>1000, + 31029=>1000,31030=>1000,31031=>1000,31032=>1000,31033=>1000,31034=>1000,31035=>1000,31036=>1000,31037=>1000,31038=>1000,31039=>1000,31040=>1000,31041=>1000,31042=>1000,31043=>1000,31044=>1000, + 31045=>1000,31046=>1000,31047=>1000,31048=>1000,31049=>1000,31050=>1000,31051=>1000,31052=>1000,31053=>1000,31054=>1000,31055=>1000,31056=>1000,31057=>1000,31058=>1000,31059=>1000,31060=>1000, + 31061=>1000,31062=>1000,31063=>1000,31064=>1000,31065=>1000,31066=>1000,31067=>1000,31068=>1000,31069=>1000,31070=>1000,31071=>1000,31072=>1000,31073=>1000,31074=>1000,31075=>1000,31076=>1000, + 31077=>1000,31078=>1000,31079=>1000,31080=>1000,31081=>1000,31082=>1000,31083=>1000,31084=>1000,31085=>1000,31086=>1000,31087=>1000,31088=>1000,31089=>1000,31090=>1000,31091=>1000,31092=>1000, + 31093=>1000,31094=>1000,31095=>1000,31096=>1000,31097=>1000,31098=>1000,31099=>1000,31100=>1000,31101=>1000,31102=>1000,31103=>1000,31104=>1000,31105=>1000,31106=>1000,31107=>1000,31108=>1000, + 31109=>1000,31110=>1000,31111=>1000,31112=>1000,31113=>1000,31114=>1000,31115=>1000,31116=>1000,31117=>1000,31118=>1000,31119=>1000,31120=>1000,31121=>1000,31122=>1000,31123=>1000,31124=>1000, + 31125=>1000,31126=>1000,31127=>1000,31128=>1000,31129=>1000,31130=>1000,31131=>1000,31132=>1000,31133=>1000,31134=>1000,31135=>1000,31136=>1000,31137=>1000,31138=>1000,31139=>1000,31140=>1000, + 31141=>1000,31142=>1000,31143=>1000,31144=>1000,31145=>1000,31146=>1000,31147=>1000,31148=>1000,31149=>1000,31150=>1000,31151=>1000,31152=>1000,31153=>1000,31154=>1000,31155=>1000,31156=>1000, + 31157=>1000,31158=>1000,31159=>1000,31160=>1000,31161=>1000,31162=>1000,31163=>1000,31164=>1000,31165=>1000,31166=>1000,31167=>1000,31168=>1000,31169=>1000,31170=>1000,31171=>1000,31172=>1000, + 31173=>1000,31174=>1000,31175=>1000,31176=>1000,31177=>1000,31178=>1000,31179=>1000,31180=>1000,31181=>1000,31182=>1000,31183=>1000,31184=>1000,31185=>1000,31186=>1000,31187=>1000,31188=>1000, + 31189=>1000,31190=>1000,31191=>1000,31192=>1000,31193=>1000,31194=>1000,31195=>1000,31196=>1000,31197=>1000,31198=>1000,31199=>1000,31200=>1000,31201=>1000,31202=>1000,31203=>1000,31204=>1000, + 31205=>1000,31206=>1000,31207=>1000,31208=>1000,31209=>1000,31210=>1000,31211=>1000,31212=>1000,31213=>1000,31214=>1000,31215=>1000,31216=>1000,31217=>1000,31218=>1000,31219=>1000,31220=>1000, + 31221=>1000,31222=>1000,31223=>1000,31224=>1000,31225=>1000,31226=>1000,31227=>1000,31228=>1000,31229=>1000,31230=>1000,31231=>1000,31232=>1000,31233=>1000,31234=>1000,31235=>1000,31236=>1000, + 31237=>1000,31238=>1000,31239=>1000,31240=>1000,31241=>1000,31242=>1000,31243=>1000,31244=>1000,31245=>1000,31246=>1000,31247=>1000,31248=>1000,31249=>1000,31250=>1000,31251=>1000,31252=>1000, + 31253=>1000,31254=>1000,31255=>1000,31256=>1000,31257=>1000,31258=>1000,31259=>1000,31260=>1000,31261=>1000,31262=>1000,31263=>1000,31264=>1000,31265=>1000,31266=>1000,31267=>1000,31268=>1000, + 31269=>1000,31270=>1000,31271=>1000,31272=>1000,31273=>1000,31274=>1000,31275=>1000,31276=>1000,31277=>1000,31278=>1000,31279=>1000,31280=>1000,31281=>1000,31282=>1000,31283=>1000,31284=>1000, + 31285=>1000,31286=>1000,31287=>1000,31288=>1000,31289=>1000,31290=>1000,31291=>1000,31292=>1000,31293=>1000,31294=>1000,31295=>1000,31296=>1000,31297=>1000,31298=>1000,31299=>1000,31300=>1000, + 31301=>1000,31302=>1000,31303=>1000,31304=>1000,31305=>1000,31306=>1000,31307=>1000,31308=>1000,31309=>1000,31310=>1000,31311=>1000,31312=>1000,31313=>1000,31314=>1000,31315=>1000,31316=>1000, + 31317=>1000,31318=>1000,31319=>1000,31320=>1000,31321=>1000,31322=>1000,31323=>1000,31324=>1000,31325=>1000,31326=>1000,31327=>1000,31328=>1000,31329=>1000,31330=>1000,31331=>1000,31332=>1000, + 31333=>1000,31334=>1000,31335=>1000,31336=>1000,31337=>1000,31338=>1000,31339=>1000,31340=>1000,31341=>1000,31342=>1000,31343=>1000,31344=>1000,31345=>1000,31346=>1000,31347=>1000,31348=>1000, + 31349=>1000,31350=>1000,31351=>1000,31352=>1000,31353=>1000,31354=>1000,31355=>1000,31356=>1000,31357=>1000,31358=>1000,31359=>1000,31360=>1000,31361=>1000,31362=>1000,31363=>1000,31364=>1000, + 31365=>1000,31366=>1000,31367=>1000,31368=>1000,31369=>1000,31370=>1000,31371=>1000,31372=>1000,31373=>1000,31374=>1000,31375=>1000,31376=>1000,31377=>1000,31378=>1000,31379=>1000,31380=>1000, + 31381=>1000,31382=>1000,31383=>1000,31384=>1000,31385=>1000,31386=>1000,31387=>1000,31388=>1000,31389=>1000,31390=>1000,31391=>1000,31392=>1000,31393=>1000,31394=>1000,31395=>1000,31396=>1000, + 31397=>1000,31398=>1000,31399=>1000,31400=>1000,31401=>1000,31402=>1000,31403=>1000,31404=>1000,31405=>1000,31406=>1000,31407=>1000,31408=>1000,31409=>1000,31410=>1000,31411=>1000,31412=>1000, + 31413=>1000,31414=>1000,31415=>1000,31416=>1000,31417=>1000,31418=>1000,31419=>1000,31420=>1000,31421=>1000,31422=>1000,31423=>1000,31424=>1000,31425=>1000,31426=>1000,31427=>1000,31428=>1000, + 31429=>1000,31430=>1000,31431=>1000,31432=>1000,31433=>1000,31434=>1000,31435=>1000,31436=>1000,31437=>1000,31438=>1000,31439=>1000,31440=>1000,31441=>1000,31442=>1000,31443=>1000,31444=>1000, + 31445=>1000,31446=>1000,31447=>1000,31448=>1000,31449=>1000,31450=>1000,31451=>1000,31452=>1000,31453=>1000,31454=>1000,31455=>1000,31456=>1000,31457=>1000,31458=>1000,31459=>1000,31460=>1000, + 31461=>1000,31462=>1000,31463=>1000,31464=>1000,31465=>1000,31466=>1000,31467=>1000,31468=>1000,31469=>1000,31470=>1000,31471=>1000,31472=>1000,31473=>1000,31474=>1000,31475=>1000,31476=>1000, + 31477=>1000,31478=>1000,31479=>1000,31480=>1000,31481=>1000,31482=>1000,31483=>1000,31484=>1000,31485=>1000,31486=>1000,31487=>1000,31488=>1000,31489=>1000,31490=>1000,31491=>1000,31492=>1000, + 31493=>1000,31494=>1000,31495=>1000,31496=>1000,31497=>1000,31498=>1000,31499=>1000,31500=>1000,31501=>1000,31502=>1000,31503=>1000,31504=>1000,31505=>1000,31506=>1000,31507=>1000,31508=>1000, + 31509=>1000,31510=>1000,31511=>1000,31512=>1000,31513=>1000,31514=>1000,31515=>1000,31516=>1000,31517=>1000,31518=>1000,31519=>1000,31520=>1000,31521=>1000,31522=>1000,31523=>1000,31524=>1000, + 31525=>1000,31526=>1000,31527=>1000,31528=>1000,31529=>1000,31530=>1000,31531=>1000,31532=>1000,31533=>1000,31534=>1000,31535=>1000,31536=>1000,31537=>1000,31538=>1000,31539=>1000,31540=>1000, + 31541=>1000,31542=>1000,31543=>1000,31544=>1000,31545=>1000,31546=>1000,31547=>1000,31548=>1000,31549=>1000,31550=>1000,31551=>1000,31552=>1000,31553=>1000,31554=>1000,31555=>1000,31556=>1000, + 31557=>1000,31558=>1000,31559=>1000,31560=>1000,31561=>1000,31562=>1000,31563=>1000,31564=>1000,31565=>1000,31566=>1000,31567=>1000,31568=>1000,31569=>1000,31570=>1000,31571=>1000,31572=>1000, + 31573=>1000,31574=>1000,31575=>1000,31576=>1000,31577=>1000,31578=>1000,31579=>1000,31580=>1000,31581=>1000,31582=>1000,31583=>1000,31584=>1000,31585=>1000,31586=>1000,31587=>1000,31588=>1000, + 31589=>1000,31590=>1000,31591=>1000,31592=>1000,31593=>1000,31594=>1000,31595=>1000,31596=>1000,31597=>1000,31598=>1000,31599=>1000,31600=>1000,31601=>1000,31602=>1000,31603=>1000,31604=>1000, + 31605=>1000,31606=>1000,31607=>1000,31608=>1000,31609=>1000,31610=>1000,31611=>1000,31612=>1000,31613=>1000,31614=>1000,31615=>1000,31616=>1000,31617=>1000,31618=>1000,31619=>1000,31620=>1000, + 31621=>1000,31622=>1000,31623=>1000,31624=>1000,31625=>1000,31626=>1000,31627=>1000,31628=>1000,31629=>1000,31630=>1000,31631=>1000,31632=>1000,31633=>1000,31634=>1000,31635=>1000,31636=>1000, + 31637=>1000,31638=>1000,31639=>1000,31640=>1000,31641=>1000,31642=>1000,31643=>1000,31644=>1000,31645=>1000,31646=>1000,31647=>1000,31648=>1000,31649=>1000,31650=>1000,31651=>1000,31652=>1000, + 31653=>1000,31654=>1000,31655=>1000,31656=>1000,31657=>1000,31658=>1000,31659=>1000,31660=>1000,31661=>1000,31662=>1000,31663=>1000,31664=>1000,31665=>1000,31666=>1000,31667=>1000,31668=>1000, + 31669=>1000,31670=>1000,31671=>1000,31672=>1000,31673=>1000,31674=>1000,31675=>1000,31676=>1000,31677=>1000,31678=>1000,31679=>1000,31680=>1000,31681=>1000,31682=>1000,31683=>1000,31684=>1000, + 31685=>1000,31686=>1000,31687=>1000,31688=>1000,31689=>1000,31690=>1000,31691=>1000,31692=>1000,31693=>1000,31694=>1000,31695=>1000,31696=>1000,31697=>1000,31698=>1000,31699=>1000,31700=>1000, + 31701=>1000,31702=>1000,31703=>1000,31704=>1000,31705=>1000,31706=>1000,31707=>1000,31708=>1000,31709=>1000,31710=>1000,31711=>1000,31712=>1000,31713=>1000,31714=>1000,31715=>1000,31716=>1000, + 31717=>1000,31718=>1000,31719=>1000,31720=>1000,31721=>1000,31722=>1000,31723=>1000,31724=>1000,31725=>1000,31726=>1000,31727=>1000,31728=>1000,31729=>1000,31730=>1000,31731=>1000,31732=>1000, + 31733=>1000,31734=>1000,31735=>1000,31736=>1000,31737=>1000,31738=>1000,31739=>1000,31740=>1000,31741=>1000,31742=>1000,31743=>1000,31744=>1000,31745=>1000,31746=>1000,31747=>1000,31748=>1000, + 31749=>1000,31750=>1000,31751=>1000,31752=>1000,31753=>1000,31754=>1000,31755=>1000,31756=>1000,31757=>1000,31758=>1000,31759=>1000,31760=>1000,31761=>1000,31762=>1000,31763=>1000,31764=>1000, + 31765=>1000,31766=>1000,31767=>1000,31768=>1000,31769=>1000,31770=>1000,31771=>1000,31772=>1000,31773=>1000,31774=>1000,31775=>1000,31776=>1000,31777=>1000,31778=>1000,31779=>1000,31780=>1000, + 31781=>1000,31782=>1000,31783=>1000,31784=>1000,31785=>1000,31786=>1000,31787=>1000,31788=>1000,31789=>1000,31790=>1000,31791=>1000,31792=>1000,31793=>1000,31794=>1000,31795=>1000,31796=>1000, + 31797=>1000,31798=>1000,31799=>1000,31800=>1000,31801=>1000,31802=>1000,31803=>1000,31804=>1000,31805=>1000,31806=>1000,31807=>1000,31808=>1000,31809=>1000,31810=>1000,31811=>1000,31812=>1000, + 31813=>1000,31814=>1000,31815=>1000,31816=>1000,31817=>1000,31818=>1000,31819=>1000,31820=>1000,31821=>1000,31822=>1000,31823=>1000,31824=>1000,31825=>1000,31826=>1000,31827=>1000,31828=>1000, + 31829=>1000,31830=>1000,31831=>1000,31832=>1000,31833=>1000,31834=>1000,31835=>1000,31836=>1000,31837=>1000,31838=>1000,31839=>1000,31840=>1000,31841=>1000,31842=>1000,31843=>1000,31844=>1000, + 31845=>1000,31846=>1000,31847=>1000,31848=>1000,31849=>1000,31850=>1000,31851=>1000,31852=>1000,31853=>1000,31854=>1000,31855=>1000,31856=>1000,31857=>1000,31858=>1000,31859=>1000,31860=>1000, + 31861=>1000,31862=>1000,31863=>1000,31864=>1000,31865=>1000,31866=>1000,31867=>1000,31868=>1000,31869=>1000,31870=>1000,31871=>1000,31872=>1000,31873=>1000,31874=>1000,31875=>1000,31876=>1000, + 31877=>1000,31878=>1000,31879=>1000,31880=>1000,31881=>1000,31882=>1000,31883=>1000,31884=>1000,31885=>1000,31886=>1000,31887=>1000,31888=>1000,31889=>1000,31890=>1000,31891=>1000,31892=>1000, + 31893=>1000,31894=>1000,31895=>1000,31896=>1000,31897=>1000,31898=>1000,31899=>1000,31900=>1000,31901=>1000,31902=>1000,31903=>1000,31904=>1000,31905=>1000,31906=>1000,31907=>1000,31908=>1000, + 31909=>1000,31910=>1000,31911=>1000,31912=>1000,31913=>1000,31914=>1000,31915=>1000,31916=>1000,31917=>1000,31918=>1000,31919=>1000,31920=>1000,31921=>1000,31922=>1000,31923=>1000,31924=>1000, + 31925=>1000,31926=>1000,31927=>1000,31928=>1000,31929=>1000,31930=>1000,31931=>1000,31932=>1000,31933=>1000,31934=>1000,31935=>1000,31936=>1000,31937=>1000,31938=>1000,31939=>1000,31940=>1000, + 31941=>1000,31942=>1000,31943=>1000,31944=>1000,31945=>1000,31946=>1000,31947=>1000,31948=>1000,31949=>1000,31950=>1000,31951=>1000,31952=>1000,31953=>1000,31954=>1000,31955=>1000,31956=>1000, + 31957=>1000,31958=>1000,31959=>1000,31960=>1000,31961=>1000,31962=>1000,31963=>1000,31964=>1000,31965=>1000,31966=>1000,31967=>1000,31968=>1000,31969=>1000,31970=>1000,31971=>1000,31972=>1000, + 31973=>1000,31974=>1000,31975=>1000,31976=>1000,31977=>1000,31978=>1000,31979=>1000,31980=>1000,31981=>1000,31982=>1000,31983=>1000,31984=>1000,31985=>1000,31986=>1000,31987=>1000,31988=>1000, + 31989=>1000,31990=>1000,31991=>1000,31992=>1000,31993=>1000,31994=>1000,31995=>1000,31996=>1000,31997=>1000,31998=>1000,31999=>1000,32000=>1000,32001=>1000,32002=>1000,32003=>1000,32004=>1000, + 32005=>1000,32006=>1000,32007=>1000,32008=>1000,32009=>1000,32010=>1000,32011=>1000,32012=>1000,32013=>1000,32014=>1000,32015=>1000,32016=>1000,32017=>1000,32018=>1000,32019=>1000,32020=>1000, + 32021=>1000,32022=>1000,32023=>1000,32024=>1000,32025=>1000,32026=>1000,32027=>1000,32028=>1000,32029=>1000,32030=>1000,32031=>1000,32032=>1000,32033=>1000,32034=>1000,32035=>1000,32036=>1000, + 32037=>1000,32038=>1000,32039=>1000,32040=>1000,32041=>1000,32042=>1000,32043=>1000,32044=>1000,32045=>1000,32046=>1000,32047=>1000,32048=>1000,32049=>1000,32050=>1000,32051=>1000,32052=>1000, + 32053=>1000,32054=>1000,32055=>1000,32056=>1000,32057=>1000,32058=>1000,32059=>1000,32060=>1000,32061=>1000,32062=>1000,32063=>1000,32064=>1000,32065=>1000,32066=>1000,32067=>1000,32068=>1000, + 32069=>1000,32070=>1000,32071=>1000,32072=>1000,32073=>1000,32074=>1000,32075=>1000,32076=>1000,32077=>1000,32078=>1000,32079=>1000,32080=>1000,32081=>1000,32082=>1000,32083=>1000,32084=>1000, + 32085=>1000,32086=>1000,32087=>1000,32088=>1000,32089=>1000,32090=>1000,32091=>1000,32092=>1000,32093=>1000,32094=>1000,32095=>1000,32096=>1000,32097=>1000,32098=>1000,32099=>1000,32100=>1000, + 32101=>1000,32102=>1000,32103=>1000,32104=>1000,32105=>1000,32106=>1000,32107=>1000,32108=>1000,32109=>1000,32110=>1000,32111=>1000,32112=>1000,32113=>1000,32114=>1000,32115=>1000,32116=>1000, + 32117=>1000,32118=>1000,32119=>1000,32120=>1000,32121=>1000,32122=>1000,32123=>1000,32124=>1000,32125=>1000,32126=>1000,32127=>1000,32128=>1000,32129=>1000,32130=>1000,32131=>1000,32132=>1000, + 32133=>1000,32134=>1000,32135=>1000,32136=>1000,32137=>1000,32138=>1000,32139=>1000,32140=>1000,32141=>1000,32142=>1000,32143=>1000,32144=>1000,32145=>1000,32146=>1000,32147=>1000,32148=>1000, + 32149=>1000,32150=>1000,32151=>1000,32152=>1000,32153=>1000,32154=>1000,32155=>1000,32156=>1000,32157=>1000,32158=>1000,32159=>1000,32160=>1000,32161=>1000,32162=>1000,32163=>1000,32164=>1000, + 32165=>1000,32166=>1000,32167=>1000,32168=>1000,32169=>1000,32170=>1000,32171=>1000,32172=>1000,32173=>1000,32174=>1000,32175=>1000,32176=>1000,32177=>1000,32178=>1000,32179=>1000,32180=>1000, + 32181=>1000,32182=>1000,32183=>1000,32184=>1000,32185=>1000,32186=>1000,32187=>1000,32188=>1000,32189=>1000,32190=>1000,32191=>1000,32192=>1000,32193=>1000,32194=>1000,32195=>1000,32196=>1000, + 32197=>1000,32198=>1000,32199=>1000,32200=>1000,32201=>1000,32202=>1000,32203=>1000,32204=>1000,32205=>1000,32206=>1000,32207=>1000,32208=>1000,32209=>1000,32210=>1000,32211=>1000,32212=>1000, + 32213=>1000,32214=>1000,32215=>1000,32216=>1000,32217=>1000,32218=>1000,32219=>1000,32220=>1000,32221=>1000,32222=>1000,32223=>1000,32224=>1000,32225=>1000,32226=>1000,32227=>1000,32228=>1000, + 32229=>1000,32230=>1000,32231=>1000,32232=>1000,32233=>1000,32234=>1000,32235=>1000,32236=>1000,32237=>1000,32238=>1000,32239=>1000,32240=>1000,32241=>1000,32242=>1000,32243=>1000,32244=>1000, + 32245=>1000,32246=>1000,32247=>1000,32248=>1000,32249=>1000,32250=>1000,32251=>1000,32252=>1000,32253=>1000,32254=>1000,32255=>1000,32256=>1000,32257=>1000,32258=>1000,32259=>1000,32260=>1000, + 32261=>1000,32262=>1000,32263=>1000,32264=>1000,32265=>1000,32266=>1000,32267=>1000,32268=>1000,32269=>1000,32270=>1000,32271=>1000,32272=>1000,32273=>1000,32274=>1000,32275=>1000,32276=>1000, + 32277=>1000,32278=>1000,32279=>1000,32280=>1000,32281=>1000,32282=>1000,32283=>1000,32284=>1000,32285=>1000,32286=>1000,32287=>1000,32288=>1000,32289=>1000,32290=>1000,32291=>1000,32292=>1000, + 32293=>1000,32294=>1000,32295=>1000,32296=>1000,32297=>1000,32298=>1000,32299=>1000,32300=>1000,32301=>1000,32302=>1000,32303=>1000,32304=>1000,32305=>1000,32306=>1000,32307=>1000,32308=>1000, + 32309=>1000,32310=>1000,32311=>1000,32312=>1000,32313=>1000,32314=>1000,32315=>1000,32316=>1000,32317=>1000,32318=>1000,32319=>1000,32320=>1000,32321=>1000,32322=>1000,32323=>1000,32324=>1000, + 32325=>1000,32326=>1000,32327=>1000,32328=>1000,32329=>1000,32330=>1000,32331=>1000,32332=>1000,32333=>1000,32334=>1000,32335=>1000,32336=>1000,32337=>1000,32338=>1000,32339=>1000,32340=>1000, + 32341=>1000,32342=>1000,32343=>1000,32344=>1000,32345=>1000,32346=>1000,32347=>1000,32348=>1000,32349=>1000,32350=>1000,32351=>1000,32352=>1000,32353=>1000,32354=>1000,32355=>1000,32356=>1000, + 32357=>1000,32358=>1000,32359=>1000,32360=>1000,32361=>1000,32362=>1000,32363=>1000,32364=>1000,32365=>1000,32366=>1000,32367=>1000,32368=>1000,32369=>1000,32370=>1000,32371=>1000,32372=>1000, + 32373=>1000,32374=>1000,32375=>1000,32376=>1000,32377=>1000,32378=>1000,32379=>1000,32380=>1000,32381=>1000,32382=>1000,32383=>1000,32384=>1000,32385=>1000,32386=>1000,32387=>1000,32388=>1000, + 32389=>1000,32390=>1000,32391=>1000,32392=>1000,32393=>1000,32394=>1000,32395=>1000,32396=>1000,32397=>1000,32398=>1000,32399=>1000,32400=>1000,32401=>1000,32402=>1000,32403=>1000,32404=>1000, + 32405=>1000,32406=>1000,32407=>1000,32408=>1000,32409=>1000,32410=>1000,32411=>1000,32412=>1000,32413=>1000,32414=>1000,32415=>1000,32416=>1000,32417=>1000,32418=>1000,32419=>1000,32420=>1000, + 32421=>1000,32422=>1000,32423=>1000,32424=>1000,32425=>1000,32426=>1000,32427=>1000,32428=>1000,32429=>1000,32430=>1000,32431=>1000,32432=>1000,32433=>1000,32434=>1000,32435=>1000,32436=>1000, + 32437=>1000,32438=>1000,32439=>1000,32440=>1000,32441=>1000,32442=>1000,32443=>1000,32444=>1000,32445=>1000,32446=>1000,32447=>1000,32448=>1000,32449=>1000,32450=>1000,32451=>1000,32452=>1000, + 32453=>1000,32454=>1000,32455=>1000,32456=>1000,32457=>1000,32458=>1000,32459=>1000,32460=>1000,32461=>1000,32462=>1000,32463=>1000,32464=>1000,32465=>1000,32466=>1000,32467=>1000,32468=>1000, + 32469=>1000,32470=>1000,32471=>1000,32472=>1000,32473=>1000,32474=>1000,32475=>1000,32476=>1000,32477=>1000,32478=>1000,32479=>1000,32480=>1000,32481=>1000,32482=>1000,32483=>1000,32484=>1000, + 32485=>1000,32486=>1000,32487=>1000,32488=>1000,32489=>1000,32490=>1000,32491=>1000,32492=>1000,32493=>1000,32494=>1000,32495=>1000,32496=>1000,32497=>1000,32498=>1000,32499=>1000,32500=>1000, + 32501=>1000,32502=>1000,32503=>1000,32504=>1000,32505=>1000,32506=>1000,32507=>1000,32508=>1000,32509=>1000,32510=>1000,32511=>1000,32512=>1000,32513=>1000,32514=>1000,32515=>1000,32516=>1000, + 32517=>1000,32518=>1000,32519=>1000,32520=>1000,32521=>1000,32522=>1000,32523=>1000,32524=>1000,32525=>1000,32526=>1000,32527=>1000,32528=>1000,32529=>1000,32530=>1000,32531=>1000,32532=>1000, + 32533=>1000,32534=>1000,32535=>1000,32536=>1000,32537=>1000,32538=>1000,32539=>1000,32540=>1000,32541=>1000,32542=>1000,32543=>1000,32544=>1000,32545=>1000,32546=>1000,32547=>1000,32548=>1000, + 32549=>1000,32550=>1000,32551=>1000,32552=>1000,32553=>1000,32554=>1000,32555=>1000,32556=>1000,32557=>1000,32558=>1000,32559=>1000,32560=>1000,32561=>1000,32562=>1000,32563=>1000,32564=>1000, + 32565=>1000,32566=>1000,32567=>1000,32568=>1000,32569=>1000,32570=>1000,32571=>1000,32572=>1000,32573=>1000,32574=>1000,32575=>1000,32576=>1000,32577=>1000,32578=>1000,32579=>1000,32580=>1000, + 32581=>1000,32582=>1000,32583=>1000,32584=>1000,32585=>1000,32586=>1000,32587=>1000,32588=>1000,32589=>1000,32590=>1000,32591=>1000,32592=>1000,32593=>1000,32594=>1000,32595=>1000,32596=>1000, + 32597=>1000,32598=>1000,32599=>1000,32600=>1000,32601=>1000,32602=>1000,32603=>1000,32604=>1000,32605=>1000,32606=>1000,32607=>1000,32608=>1000,32609=>1000,32610=>1000,32611=>1000,32612=>1000, + 32613=>1000,32614=>1000,32615=>1000,32616=>1000,32617=>1000,32618=>1000,32619=>1000,32620=>1000,32621=>1000,32622=>1000,32623=>1000,32624=>1000,32625=>1000,32626=>1000,32627=>1000,32628=>1000, + 32629=>1000,32630=>1000,32631=>1000,32632=>1000,32633=>1000,32634=>1000,32635=>1000,32636=>1000,32637=>1000,32638=>1000,32639=>1000,32640=>1000,32641=>1000,32642=>1000,32643=>1000,32644=>1000, + 32645=>1000,32646=>1000,32647=>1000,32648=>1000,32649=>1000,32650=>1000,32651=>1000,32652=>1000,32653=>1000,32654=>1000,32655=>1000,32656=>1000,32657=>1000,32658=>1000,32659=>1000,32660=>1000, + 32661=>1000,32662=>1000,32663=>1000,32664=>1000,32665=>1000,32666=>1000,32667=>1000,32668=>1000,32669=>1000,32670=>1000,32671=>1000,32672=>1000,32673=>1000,32674=>1000,32675=>1000,32676=>1000, + 32677=>1000,32678=>1000,32679=>1000,32680=>1000,32681=>1000,32682=>1000,32683=>1000,32684=>1000,32685=>1000,32686=>1000,32687=>1000,32688=>1000,32689=>1000,32690=>1000,32691=>1000,32692=>1000, + 32693=>1000,32694=>1000,32695=>1000,32696=>1000,32697=>1000,32698=>1000,32699=>1000,32700=>1000,32701=>1000,32702=>1000,32703=>1000,32704=>1000,32705=>1000,32706=>1000,32707=>1000,32708=>1000, + 32709=>1000,32710=>1000,32711=>1000,32712=>1000,32713=>1000,32714=>1000,32715=>1000,32716=>1000,32717=>1000,32718=>1000,32719=>1000,32720=>1000,32721=>1000,32722=>1000,32723=>1000,32724=>1000, + 32725=>1000,32726=>1000,32727=>1000,32728=>1000,32729=>1000,32730=>1000,32731=>1000,32732=>1000,32733=>1000,32734=>1000,32735=>1000,32736=>1000,32737=>1000,32738=>1000,32739=>1000,32740=>1000, + 32741=>1000,32742=>1000,32743=>1000,32744=>1000,32745=>1000,32746=>1000,32747=>1000,32748=>1000,32749=>1000,32750=>1000,32751=>1000,32752=>1000,32753=>1000,32754=>1000,32755=>1000,32756=>1000, + 32757=>1000,32758=>1000,32759=>1000,32760=>1000,32761=>1000,32762=>1000,32763=>1000,32764=>1000,32765=>1000,32766=>1000,32767=>1000,32768=>1000,32769=>1000,32770=>1000,32771=>1000,32772=>1000, + 32773=>1000,32774=>1000,32775=>1000,32776=>1000,32777=>1000,32778=>1000,32779=>1000,32780=>1000,32781=>1000,32782=>1000,32783=>1000,32784=>1000,32785=>1000,32786=>1000,32787=>1000,32788=>1000, + 32789=>1000,32790=>1000,32791=>1000,32792=>1000,32793=>1000,32794=>1000,32795=>1000,32796=>1000,32797=>1000,32798=>1000,32799=>1000,32800=>1000,32801=>1000,32802=>1000,32803=>1000,32804=>1000, + 32805=>1000,32806=>1000,32807=>1000,32808=>1000,32809=>1000,32810=>1000,32811=>1000,32812=>1000,32813=>1000,32814=>1000,32815=>1000,32816=>1000,32817=>1000,32818=>1000,32819=>1000,32820=>1000, + 32821=>1000,32822=>1000,32823=>1000,32824=>1000,32825=>1000,32826=>1000,32827=>1000,32828=>1000,32829=>1000,32830=>1000,32831=>1000,32832=>1000,32833=>1000,32834=>1000,32835=>1000,32836=>1000, + 32837=>1000,32838=>1000,32839=>1000,32840=>1000,32841=>1000,32842=>1000,32843=>1000,32844=>1000,32845=>1000,32846=>1000,32847=>1000,32848=>1000,32849=>1000,32850=>1000,32851=>1000,32852=>1000, + 32853=>1000,32854=>1000,32855=>1000,32856=>1000,32857=>1000,32858=>1000,32859=>1000,32860=>1000,32861=>1000,32862=>1000,32863=>1000,32864=>1000,32865=>1000,32866=>1000,32867=>1000,32868=>1000, + 32869=>1000,32870=>1000,32871=>1000,32872=>1000,32873=>1000,32874=>1000,32875=>1000,32876=>1000,32877=>1000,32878=>1000,32879=>1000,32880=>1000,32881=>1000,32882=>1000,32883=>1000,32884=>1000, + 32885=>1000,32886=>1000,32887=>1000,32888=>1000,32889=>1000,32890=>1000,32891=>1000,32892=>1000,32893=>1000,32894=>1000,32895=>1000,32896=>1000,32897=>1000,32898=>1000,32899=>1000,32900=>1000, + 32901=>1000,32902=>1000,32903=>1000,32904=>1000,32905=>1000,32906=>1000,32907=>1000,32908=>1000,32909=>1000,32910=>1000,32911=>1000,32912=>1000,32913=>1000,32914=>1000,32915=>1000,32916=>1000, + 32917=>1000,32918=>1000,32919=>1000,32920=>1000,32921=>1000,32922=>1000,32923=>1000,32924=>1000,32925=>1000,32926=>1000,32927=>1000,32928=>1000,32929=>1000,32930=>1000,32931=>1000,32932=>1000, + 32933=>1000,32934=>1000,32935=>1000,32936=>1000,32937=>1000,32938=>1000,32939=>1000,32940=>1000,32941=>1000,32942=>1000,32943=>1000,32944=>1000,32945=>1000,32946=>1000,32947=>1000,32948=>1000, + 32949=>1000,32950=>1000,32951=>1000,32952=>1000,32953=>1000,32954=>1000,32955=>1000,32956=>1000,32957=>1000,32958=>1000,32959=>1000,32960=>1000,32961=>1000,32962=>1000,32963=>1000,32964=>1000, + 32965=>1000,32966=>1000,32967=>1000,32968=>1000,32969=>1000,32970=>1000,32971=>1000,32972=>1000,32973=>1000,32974=>1000,32975=>1000,32976=>1000,32977=>1000,32978=>1000,32979=>1000,32980=>1000, + 32981=>1000,32982=>1000,32983=>1000,32984=>1000,32985=>1000,32986=>1000,32987=>1000,32988=>1000,32989=>1000,32990=>1000,32991=>1000,32992=>1000,32993=>1000,32994=>1000,32995=>1000,32996=>1000, + 32997=>1000,32998=>1000,32999=>1000,33000=>1000,33001=>1000,33002=>1000,33003=>1000,33004=>1000,33005=>1000,33006=>1000,33007=>1000,33008=>1000,33009=>1000,33010=>1000,33011=>1000,33012=>1000, + 33013=>1000,33014=>1000,33015=>1000,33016=>1000,33017=>1000,33018=>1000,33019=>1000,33020=>1000,33021=>1000,33022=>1000,33023=>1000,33024=>1000,33025=>1000,33026=>1000,33027=>1000,33028=>1000, + 33029=>1000,33030=>1000,33031=>1000,33032=>1000,33033=>1000,33034=>1000,33035=>1000,33036=>1000,33037=>1000,33038=>1000,33039=>1000,33040=>1000,33041=>1000,33042=>1000,33043=>1000,33044=>1000, + 33045=>1000,33046=>1000,33047=>1000,33048=>1000,33049=>1000,33050=>1000,33051=>1000,33052=>1000,33053=>1000,33054=>1000,33055=>1000,33056=>1000,33057=>1000,33058=>1000,33059=>1000,33060=>1000, + 33061=>1000,33062=>1000,33063=>1000,33064=>1000,33065=>1000,33066=>1000,33067=>1000,33068=>1000,33069=>1000,33070=>1000,33071=>1000,33072=>1000,33073=>1000,33074=>1000,33075=>1000,33076=>1000, + 33077=>1000,33078=>1000,33079=>1000,33080=>1000,33081=>1000,33082=>1000,33083=>1000,33084=>1000,33085=>1000,33086=>1000,33087=>1000,33088=>1000,33089=>1000,33090=>1000,33091=>1000,33092=>1000, + 33093=>1000,33094=>1000,33095=>1000,33096=>1000,33097=>1000,33098=>1000,33099=>1000,33100=>1000,33101=>1000,33102=>1000,33103=>1000,33104=>1000,33105=>1000,33106=>1000,33107=>1000,33108=>1000, + 33109=>1000,33110=>1000,33111=>1000,33112=>1000,33113=>1000,33114=>1000,33115=>1000,33116=>1000,33117=>1000,33118=>1000,33119=>1000,33120=>1000,33121=>1000,33122=>1000,33123=>1000,33124=>1000, + 33125=>1000,33126=>1000,33127=>1000,33128=>1000,33129=>1000,33130=>1000,33131=>1000,33132=>1000,33133=>1000,33134=>1000,33135=>1000,33136=>1000,33137=>1000,33138=>1000,33139=>1000,33140=>1000, + 33141=>1000,33142=>1000,33143=>1000,33144=>1000,33145=>1000,33146=>1000,33147=>1000,33148=>1000,33149=>1000,33150=>1000,33151=>1000,33152=>1000,33153=>1000,33154=>1000,33155=>1000,33156=>1000, + 33157=>1000,33158=>1000,33159=>1000,33160=>1000,33161=>1000,33162=>1000,33163=>1000,33164=>1000,33165=>1000,33166=>1000,33167=>1000,33168=>1000,33169=>1000,33170=>1000,33171=>1000,33172=>1000, + 33173=>1000,33174=>1000,33175=>1000,33176=>1000,33177=>1000,33178=>1000,33179=>1000,33180=>1000,33181=>1000,33182=>1000,33183=>1000,33184=>1000,33185=>1000,33186=>1000,33187=>1000,33188=>1000, + 33189=>1000,33190=>1000,33191=>1000,33192=>1000,33193=>1000,33194=>1000,33195=>1000,33196=>1000,33197=>1000,33198=>1000,33199=>1000,33200=>1000,33201=>1000,33202=>1000,33203=>1000,33204=>1000, + 33205=>1000,33206=>1000,33207=>1000,33208=>1000,33209=>1000,33210=>1000,33211=>1000,33212=>1000,33213=>1000,33214=>1000,33215=>1000,33216=>1000,33217=>1000,33218=>1000,33219=>1000,33220=>1000, + 33221=>1000,33222=>1000,33223=>1000,33224=>1000,33225=>1000,33226=>1000,33227=>1000,33228=>1000,33229=>1000,33230=>1000,33231=>1000,33232=>1000,33233=>1000,33234=>1000,33235=>1000,33236=>1000, + 33237=>1000,33238=>1000,33239=>1000,33240=>1000,33241=>1000,33242=>1000,33243=>1000,33244=>1000,33245=>1000,33246=>1000,33247=>1000,33248=>1000,33249=>1000,33250=>1000,33251=>1000,33252=>1000, + 33253=>1000,33254=>1000,33255=>1000,33256=>1000,33257=>1000,33258=>1000,33259=>1000,33260=>1000,33261=>1000,33262=>1000,33263=>1000,33264=>1000,33265=>1000,33266=>1000,33267=>1000,33268=>1000, + 33269=>1000,33270=>1000,33271=>1000,33272=>1000,33273=>1000,33274=>1000,33275=>1000,33276=>1000,33277=>1000,33278=>1000,33279=>1000,33280=>1000,33281=>1000,33282=>1000,33283=>1000,33284=>1000, + 33285=>1000,33286=>1000,33287=>1000,33288=>1000,33289=>1000,33290=>1000,33291=>1000,33292=>1000,33293=>1000,33294=>1000,33295=>1000,33296=>1000,33297=>1000,33298=>1000,33299=>1000,33300=>1000, + 33301=>1000,33302=>1000,33303=>1000,33304=>1000,33305=>1000,33306=>1000,33307=>1000,33308=>1000,33309=>1000,33310=>1000,33311=>1000,33312=>1000,33313=>1000,33314=>1000,33315=>1000,33316=>1000, + 33317=>1000,33318=>1000,33319=>1000,33320=>1000,33321=>1000,33322=>1000,33323=>1000,33324=>1000,33325=>1000,33326=>1000,33327=>1000,33328=>1000,33329=>1000,33330=>1000,33331=>1000,33332=>1000, + 33333=>1000,33334=>1000,33335=>1000,33336=>1000,33337=>1000,33338=>1000,33339=>1000,33340=>1000,33341=>1000,33342=>1000,33343=>1000,33344=>1000,33345=>1000,33346=>1000,33347=>1000,33348=>1000, + 33349=>1000,33350=>1000,33351=>1000,33352=>1000,33353=>1000,33354=>1000,33355=>1000,33356=>1000,33357=>1000,33358=>1000,33359=>1000,33360=>1000,33361=>1000,33362=>1000,33363=>1000,33364=>1000, + 33365=>1000,33366=>1000,33367=>1000,33368=>1000,33369=>1000,33370=>1000,33371=>1000,33372=>1000,33373=>1000,33374=>1000,33375=>1000,33376=>1000,33377=>1000,33378=>1000,33379=>1000,33380=>1000, + 33381=>1000,33382=>1000,33383=>1000,33384=>1000,33385=>1000,33386=>1000,33387=>1000,33388=>1000,33389=>1000,33390=>1000,33391=>1000,33392=>1000,33393=>1000,33394=>1000,33395=>1000,33396=>1000, + 33397=>1000,33398=>1000,33399=>1000,33400=>1000,33401=>1000,33402=>1000,33403=>1000,33404=>1000,33405=>1000,33406=>1000,33407=>1000,33408=>1000,33409=>1000,33410=>1000,33411=>1000,33412=>1000, + 33413=>1000,33414=>1000,33415=>1000,33416=>1000,33417=>1000,33418=>1000,33419=>1000,33420=>1000,33421=>1000,33422=>1000,33423=>1000,33424=>1000,33425=>1000,33426=>1000,33427=>1000,33428=>1000, + 33429=>1000,33430=>1000,33431=>1000,33432=>1000,33433=>1000,33434=>1000,33435=>1000,33436=>1000,33437=>1000,33438=>1000,33439=>1000,33440=>1000,33441=>1000,33442=>1000,33443=>1000,33444=>1000, + 33445=>1000,33446=>1000,33447=>1000,33448=>1000,33449=>1000,33450=>1000,33451=>1000,33452=>1000,33453=>1000,33454=>1000,33455=>1000,33456=>1000,33457=>1000,33458=>1000,33459=>1000,33460=>1000, + 33461=>1000,33462=>1000,33463=>1000,33464=>1000,33465=>1000,33466=>1000,33467=>1000,33468=>1000,33469=>1000,33470=>1000,33471=>1000,33472=>1000,33473=>1000,33474=>1000,33475=>1000,33476=>1000, + 33477=>1000,33478=>1000,33479=>1000,33480=>1000,33481=>1000,33482=>1000,33483=>1000,33484=>1000,33485=>1000,33486=>1000,33487=>1000,33488=>1000,33489=>1000,33490=>1000,33491=>1000,33492=>1000, + 33493=>1000,33494=>1000,33495=>1000,33496=>1000,33497=>1000,33498=>1000,33499=>1000,33500=>1000,33501=>1000,33502=>1000,33503=>1000,33504=>1000,33505=>1000,33506=>1000,33507=>1000,33508=>1000, + 33509=>1000,33510=>1000,33511=>1000,33512=>1000,33513=>1000,33514=>1000,33515=>1000,33516=>1000,33517=>1000,33518=>1000,33519=>1000,33520=>1000,33521=>1000,33522=>1000,33523=>1000,33524=>1000, + 33525=>1000,33526=>1000,33527=>1000,33528=>1000,33529=>1000,33530=>1000,33531=>1000,33532=>1000,33533=>1000,33534=>1000,33535=>1000,33536=>1000,33537=>1000,33538=>1000,33539=>1000,33540=>1000, + 33541=>1000,33542=>1000,33543=>1000,33544=>1000,33545=>1000,33546=>1000,33547=>1000,33548=>1000,33549=>1000,33550=>1000,33551=>1000,33552=>1000,33553=>1000,33554=>1000,33555=>1000,33556=>1000, + 33557=>1000,33558=>1000,33559=>1000,33560=>1000,33561=>1000,33562=>1000,33563=>1000,33564=>1000,33565=>1000,33566=>1000,33567=>1000,33568=>1000,33569=>1000,33570=>1000,33571=>1000,33572=>1000, + 33573=>1000,33574=>1000,33575=>1000,33576=>1000,33577=>1000,33578=>1000,33579=>1000,33580=>1000,33581=>1000,33582=>1000,33583=>1000,33584=>1000,33585=>1000,33586=>1000,33587=>1000,33588=>1000, + 33589=>1000,33590=>1000,33591=>1000,33592=>1000,33593=>1000,33594=>1000,33595=>1000,33596=>1000,33597=>1000,33598=>1000,33599=>1000,33600=>1000,33601=>1000,33602=>1000,33603=>1000,33604=>1000, + 33605=>1000,33606=>1000,33607=>1000,33608=>1000,33609=>1000,33610=>1000,33611=>1000,33612=>1000,33613=>1000,33614=>1000,33615=>1000,33616=>1000,33617=>1000,33618=>1000,33619=>1000,33620=>1000, + 33621=>1000,33622=>1000,33623=>1000,33624=>1000,33625=>1000,33626=>1000,33627=>1000,33628=>1000,33629=>1000,33630=>1000,33631=>1000,33632=>1000,33633=>1000,33634=>1000,33635=>1000,33636=>1000, + 33637=>1000,33638=>1000,33639=>1000,33640=>1000,33641=>1000,33642=>1000,33643=>1000,33644=>1000,33645=>1000,33646=>1000,33647=>1000,33648=>1000,33649=>1000,33650=>1000,33651=>1000,33652=>1000, + 33653=>1000,33654=>1000,33655=>1000,33656=>1000,33657=>1000,33658=>1000,33659=>1000,33660=>1000,33661=>1000,33662=>1000,33663=>1000,33664=>1000,33665=>1000,33666=>1000,33667=>1000,33668=>1000, + 33669=>1000,33670=>1000,33671=>1000,33672=>1000,33673=>1000,33674=>1000,33675=>1000,33676=>1000,33677=>1000,33678=>1000,33679=>1000,33680=>1000,33681=>1000,33682=>1000,33683=>1000,33684=>1000, + 33685=>1000,33686=>1000,33687=>1000,33688=>1000,33689=>1000,33690=>1000,33691=>1000,33692=>1000,33693=>1000,33694=>1000,33695=>1000,33696=>1000,33697=>1000,33698=>1000,33699=>1000,33700=>1000, + 33701=>1000,33702=>1000,33703=>1000,33704=>1000,33705=>1000,33706=>1000,33707=>1000,33708=>1000,33709=>1000,33710=>1000,33711=>1000,33712=>1000,33713=>1000,33714=>1000,33715=>1000,33716=>1000, + 33717=>1000,33718=>1000,33719=>1000,33720=>1000,33721=>1000,33722=>1000,33723=>1000,33724=>1000,33725=>1000,33726=>1000,33727=>1000,33728=>1000,33729=>1000,33730=>1000,33731=>1000,33732=>1000, + 33733=>1000,33734=>1000,33735=>1000,33736=>1000,33737=>1000,33738=>1000,33739=>1000,33740=>1000,33741=>1000,33742=>1000,33743=>1000,33744=>1000,33745=>1000,33746=>1000,33747=>1000,33748=>1000, + 33749=>1000,33750=>1000,33751=>1000,33752=>1000,33753=>1000,33754=>1000,33755=>1000,33756=>1000,33757=>1000,33758=>1000,33759=>1000,33760=>1000,33761=>1000,33762=>1000,33763=>1000,33764=>1000, + 33765=>1000,33766=>1000,33767=>1000,33768=>1000,33769=>1000,33770=>1000,33771=>1000,33772=>1000,33773=>1000,33774=>1000,33775=>1000,33776=>1000,33777=>1000,33778=>1000,33779=>1000,33780=>1000, + 33781=>1000,33782=>1000,33783=>1000,33784=>1000,33785=>1000,33786=>1000,33787=>1000,33788=>1000,33789=>1000,33790=>1000,33791=>1000,33792=>1000,33793=>1000,33794=>1000,33795=>1000,33796=>1000, + 33797=>1000,33798=>1000,33799=>1000,33800=>1000,33801=>1000,33802=>1000,33803=>1000,33804=>1000,33805=>1000,33806=>1000,33807=>1000,33808=>1000,33809=>1000,33810=>1000,33811=>1000,33812=>1000, + 33813=>1000,33814=>1000,33815=>1000,33816=>1000,33817=>1000,33818=>1000,33819=>1000,33820=>1000,33821=>1000,33822=>1000,33823=>1000,33824=>1000,33825=>1000,33826=>1000,33827=>1000,33828=>1000, + 33829=>1000,33830=>1000,33831=>1000,33832=>1000,33833=>1000,33834=>1000,33835=>1000,33836=>1000,33837=>1000,33838=>1000,33839=>1000,33840=>1000,33841=>1000,33842=>1000,33843=>1000,33844=>1000, + 33845=>1000,33846=>1000,33847=>1000,33848=>1000,33849=>1000,33850=>1000,33851=>1000,33852=>1000,33853=>1000,33854=>1000,33855=>1000,33856=>1000,33857=>1000,33858=>1000,33859=>1000,33860=>1000, + 33861=>1000,33862=>1000,33863=>1000,33864=>1000,33865=>1000,33866=>1000,33867=>1000,33868=>1000,33869=>1000,33870=>1000,33871=>1000,33872=>1000,33873=>1000,33874=>1000,33875=>1000,33876=>1000, + 33877=>1000,33878=>1000,33879=>1000,33880=>1000,33881=>1000,33882=>1000,33883=>1000,33884=>1000,33885=>1000,33886=>1000,33887=>1000,33888=>1000,33889=>1000,33890=>1000,33891=>1000,33892=>1000, + 33893=>1000,33894=>1000,33895=>1000,33896=>1000,33897=>1000,33898=>1000,33899=>1000,33900=>1000,33901=>1000,33902=>1000,33903=>1000,33904=>1000,33905=>1000,33906=>1000,33907=>1000,33908=>1000, + 33909=>1000,33910=>1000,33911=>1000,33912=>1000,33913=>1000,33914=>1000,33915=>1000,33916=>1000,33917=>1000,33918=>1000,33919=>1000,33920=>1000,33921=>1000,33922=>1000,33923=>1000,33924=>1000, + 33925=>1000,33926=>1000,33927=>1000,33928=>1000,33929=>1000,33930=>1000,33931=>1000,33932=>1000,33933=>1000,33934=>1000,33935=>1000,33936=>1000,33937=>1000,33938=>1000,33939=>1000,33940=>1000, + 33941=>1000,33942=>1000,33943=>1000,33944=>1000,33945=>1000,33946=>1000,33947=>1000,33948=>1000,33949=>1000,33950=>1000,33951=>1000,33952=>1000,33953=>1000,33954=>1000,33955=>1000,33956=>1000, + 33957=>1000,33958=>1000,33959=>1000,33960=>1000,33961=>1000,33962=>1000,33963=>1000,33964=>1000,33965=>1000,33966=>1000,33967=>1000,33968=>1000,33969=>1000,33970=>1000,33971=>1000,33972=>1000, + 33973=>1000,33974=>1000,33975=>1000,33976=>1000,33977=>1000,33978=>1000,33979=>1000,33980=>1000,33981=>1000,33982=>1000,33983=>1000,33984=>1000,33985=>1000,33986=>1000,33987=>1000,33988=>1000, + 33989=>1000,33990=>1000,33991=>1000,33992=>1000,33993=>1000,33994=>1000,33995=>1000,33996=>1000,33997=>1000,33998=>1000,33999=>1000,34000=>1000,34001=>1000,34002=>1000,34003=>1000,34004=>1000, + 34005=>1000,34006=>1000,34007=>1000,34008=>1000,34009=>1000,34010=>1000,34011=>1000,34012=>1000,34013=>1000,34014=>1000,34015=>1000,34016=>1000,34017=>1000,34018=>1000,34019=>1000,34020=>1000, + 34021=>1000,34022=>1000,34023=>1000,34024=>1000,34025=>1000,34026=>1000,34027=>1000,34028=>1000,34029=>1000,34030=>1000,34031=>1000,34032=>1000,34033=>1000,34034=>1000,34035=>1000,34036=>1000, + 34037=>1000,34038=>1000,34039=>1000,34040=>1000,34041=>1000,34042=>1000,34043=>1000,34044=>1000,34045=>1000,34046=>1000,34047=>1000,34048=>1000,34049=>1000,34050=>1000,34051=>1000,34052=>1000, + 34053=>1000,34054=>1000,34055=>1000,34056=>1000,34057=>1000,34058=>1000,34059=>1000,34060=>1000,34061=>1000,34062=>1000,34063=>1000,34064=>1000,34065=>1000,34066=>1000,34067=>1000,34068=>1000, + 34069=>1000,34070=>1000,34071=>1000,34072=>1000,34073=>1000,34074=>1000,34075=>1000,34076=>1000,34077=>1000,34078=>1000,34079=>1000,34080=>1000,34081=>1000,34082=>1000,34083=>1000,34084=>1000, + 34085=>1000,34086=>1000,34087=>1000,34088=>1000,34089=>1000,34090=>1000,34091=>1000,34092=>1000,34093=>1000,34094=>1000,34095=>1000,34096=>1000,34097=>1000,34098=>1000,34099=>1000,34100=>1000, + 34101=>1000,34102=>1000,34103=>1000,34104=>1000,34105=>1000,34106=>1000,34107=>1000,34108=>1000,34109=>1000,34110=>1000,34111=>1000,34112=>1000,34113=>1000,34114=>1000,34115=>1000,34116=>1000, + 34117=>1000,34118=>1000,34119=>1000,34120=>1000,34121=>1000,34122=>1000,34123=>1000,34124=>1000,34125=>1000,34126=>1000,34127=>1000,34128=>1000,34129=>1000,34130=>1000,34131=>1000,34132=>1000, + 34133=>1000,34134=>1000,34135=>1000,34136=>1000,34137=>1000,34138=>1000,34139=>1000,34140=>1000,34141=>1000,34142=>1000,34143=>1000,34144=>1000,34145=>1000,34146=>1000,34147=>1000,34148=>1000, + 34149=>1000,34150=>1000,34151=>1000,34152=>1000,34153=>1000,34154=>1000,34155=>1000,34156=>1000,34157=>1000,34158=>1000,34159=>1000,34160=>1000,34161=>1000,34162=>1000,34163=>1000,34164=>1000, + 34165=>1000,34166=>1000,34167=>1000,34168=>1000,34169=>1000,34170=>1000,34171=>1000,34172=>1000,34173=>1000,34174=>1000,34175=>1000,34176=>1000,34177=>1000,34178=>1000,34179=>1000,34180=>1000, + 34181=>1000,34182=>1000,34183=>1000,34184=>1000,34185=>1000,34186=>1000,34187=>1000,34188=>1000,34189=>1000,34190=>1000,34191=>1000,34192=>1000,34193=>1000,34194=>1000,34195=>1000,34196=>1000, + 34197=>1000,34198=>1000,34199=>1000,34200=>1000,34201=>1000,34202=>1000,34203=>1000,34204=>1000,34205=>1000,34206=>1000,34207=>1000,34208=>1000,34209=>1000,34210=>1000,34211=>1000,34212=>1000, + 34213=>1000,34214=>1000,34215=>1000,34216=>1000,34217=>1000,34218=>1000,34219=>1000,34220=>1000,34221=>1000,34222=>1000,34223=>1000,34224=>1000,34225=>1000,34226=>1000,34227=>1000,34228=>1000, + 34229=>1000,34230=>1000,34231=>1000,34232=>1000,34233=>1000,34234=>1000,34235=>1000,34236=>1000,34237=>1000,34238=>1000,34239=>1000,34240=>1000,34241=>1000,34242=>1000,34243=>1000,34244=>1000, + 34245=>1000,34246=>1000,34247=>1000,34248=>1000,34249=>1000,34250=>1000,34251=>1000,34252=>1000,34253=>1000,34254=>1000,34255=>1000,34256=>1000,34257=>1000,34258=>1000,34259=>1000,34260=>1000, + 34261=>1000,34262=>1000,34263=>1000,34264=>1000,34265=>1000,34266=>1000,34267=>1000,34268=>1000,34269=>1000,34270=>1000,34271=>1000,34272=>1000,34273=>1000,34274=>1000,34275=>1000,34276=>1000, + 34277=>1000,34278=>1000,34279=>1000,34280=>1000,34281=>1000,34282=>1000,34283=>1000,34284=>1000,34285=>1000,34286=>1000,34287=>1000,34288=>1000,34289=>1000,34290=>1000,34291=>1000,34292=>1000, + 34293=>1000,34294=>1000,34295=>1000,34296=>1000,34297=>1000,34298=>1000,34299=>1000,34300=>1000,34301=>1000,34302=>1000,34303=>1000,34304=>1000,34305=>1000,34306=>1000,34307=>1000,34308=>1000, + 34309=>1000,34310=>1000,34311=>1000,34312=>1000,34313=>1000,34314=>1000,34315=>1000,34316=>1000,34317=>1000,34318=>1000,34319=>1000,34320=>1000,34321=>1000,34322=>1000,34323=>1000,34324=>1000, + 34325=>1000,34326=>1000,34327=>1000,34328=>1000,34329=>1000,34330=>1000,34331=>1000,34332=>1000,34333=>1000,34334=>1000,34335=>1000,34336=>1000,34337=>1000,34338=>1000,34339=>1000,34340=>1000, + 34341=>1000,34342=>1000,34343=>1000,34344=>1000,34345=>1000,34346=>1000,34347=>1000,34348=>1000,34349=>1000,34350=>1000,34351=>1000,34352=>1000,34353=>1000,34354=>1000,34355=>1000,34356=>1000, + 34357=>1000,34358=>1000,34359=>1000,34360=>1000,34361=>1000,34362=>1000,34363=>1000,34364=>1000,34365=>1000,34366=>1000,34367=>1000,34368=>1000,34369=>1000,34370=>1000,34371=>1000,34372=>1000, + 34373=>1000,34374=>1000,34375=>1000,34376=>1000,34377=>1000,34378=>1000,34379=>1000,34380=>1000,34381=>1000,34382=>1000,34383=>1000,34384=>1000,34385=>1000,34386=>1000,34387=>1000,34388=>1000, + 34389=>1000,34390=>1000,34391=>1000,34392=>1000,34393=>1000,34394=>1000,34395=>1000,34396=>1000,34397=>1000,34398=>1000,34399=>1000,34400=>1000,34401=>1000,34402=>1000,34403=>1000,34404=>1000, + 34405=>1000,34406=>1000,34407=>1000,34408=>1000,34409=>1000,34410=>1000,34411=>1000,34412=>1000,34413=>1000,34414=>1000,34415=>1000,34416=>1000,34417=>1000,34418=>1000,34419=>1000,34420=>1000, + 34421=>1000,34422=>1000,34423=>1000,34424=>1000,34425=>1000,34426=>1000,34427=>1000,34428=>1000,34429=>1000,34430=>1000,34431=>1000,34432=>1000,34433=>1000,34434=>1000,34435=>1000,34436=>1000, + 34437=>1000,34438=>1000,34439=>1000,34440=>1000,34441=>1000,34442=>1000,34443=>1000,34444=>1000,34445=>1000,34446=>1000,34447=>1000,34448=>1000,34449=>1000,34450=>1000,34451=>1000,34452=>1000, + 34453=>1000,34454=>1000,34455=>1000,34456=>1000,34457=>1000,34458=>1000,34459=>1000,34460=>1000,34461=>1000,34462=>1000,34463=>1000,34464=>1000,34465=>1000,34466=>1000,34467=>1000,34468=>1000, + 34469=>1000,34470=>1000,34471=>1000,34472=>1000,34473=>1000,34474=>1000,34475=>1000,34476=>1000,34477=>1000,34478=>1000,34479=>1000,34480=>1000,34481=>1000,34482=>1000,34483=>1000,34484=>1000, + 34485=>1000,34486=>1000,34487=>1000,34488=>1000,34489=>1000,34490=>1000,34491=>1000,34492=>1000,34493=>1000,34494=>1000,34495=>1000,34496=>1000,34497=>1000,34498=>1000,34499=>1000,34500=>1000, + 34501=>1000,34502=>1000,34503=>1000,34504=>1000,34505=>1000,34506=>1000,34507=>1000,34508=>1000,34509=>1000,34510=>1000,34511=>1000,34512=>1000,34513=>1000,34514=>1000,34515=>1000,34516=>1000, + 34517=>1000,34518=>1000,34519=>1000,34520=>1000,34521=>1000,34522=>1000,34523=>1000,34524=>1000,34525=>1000,34526=>1000,34527=>1000,34528=>1000,34529=>1000,34530=>1000,34531=>1000,34532=>1000, + 34533=>1000,34534=>1000,34535=>1000,34536=>1000,34537=>1000,34538=>1000,34539=>1000,34540=>1000,34541=>1000,34542=>1000,34543=>1000,34544=>1000,34545=>1000,34546=>1000,34547=>1000,34548=>1000, + 34549=>1000,34550=>1000,34551=>1000,34552=>1000,34553=>1000,34554=>1000,34555=>1000,34556=>1000,34557=>1000,34558=>1000,34559=>1000,34560=>1000,34561=>1000,34562=>1000,34563=>1000,34564=>1000, + 34565=>1000,34566=>1000,34567=>1000,34568=>1000,34569=>1000,34570=>1000,34571=>1000,34572=>1000,34573=>1000,34574=>1000,34575=>1000,34576=>1000,34577=>1000,34578=>1000,34579=>1000,34580=>1000, + 34581=>1000,34582=>1000,34583=>1000,34584=>1000,34585=>1000,34586=>1000,34587=>1000,34588=>1000,34589=>1000,34590=>1000,34591=>1000,34592=>1000,34593=>1000,34594=>1000,34595=>1000,34596=>1000, + 34597=>1000,34598=>1000,34599=>1000,34600=>1000,34601=>1000,34602=>1000,34603=>1000,34604=>1000,34605=>1000,34606=>1000,34607=>1000,34608=>1000,34609=>1000,34610=>1000,34611=>1000,34612=>1000, + 34613=>1000,34614=>1000,34615=>1000,34616=>1000,34617=>1000,34618=>1000,34619=>1000,34620=>1000,34621=>1000,34622=>1000,34623=>1000,34624=>1000,34625=>1000,34626=>1000,34627=>1000,34628=>1000, + 34629=>1000,34630=>1000,34631=>1000,34632=>1000,34633=>1000,34634=>1000,34635=>1000,34636=>1000,34637=>1000,34638=>1000,34639=>1000,34640=>1000,34641=>1000,34642=>1000,34643=>1000,34644=>1000, + 34645=>1000,34646=>1000,34647=>1000,34648=>1000,34649=>1000,34650=>1000,34651=>1000,34652=>1000,34653=>1000,34654=>1000,34655=>1000,34656=>1000,34657=>1000,34658=>1000,34659=>1000,34660=>1000, + 34661=>1000,34662=>1000,34663=>1000,34664=>1000,34665=>1000,34666=>1000,34667=>1000,34668=>1000,34669=>1000,34670=>1000,34671=>1000,34672=>1000,34673=>1000,34674=>1000,34675=>1000,34676=>1000, + 34677=>1000,34678=>1000,34679=>1000,34680=>1000,34681=>1000,34682=>1000,34683=>1000,34684=>1000,34685=>1000,34686=>1000,34687=>1000,34688=>1000,34689=>1000,34690=>1000,34691=>1000,34692=>1000, + 34693=>1000,34694=>1000,34695=>1000,34696=>1000,34697=>1000,34698=>1000,34699=>1000,34700=>1000,34701=>1000,34702=>1000,34703=>1000,34704=>1000,34705=>1000,34706=>1000,34707=>1000,34708=>1000, + 34709=>1000,34710=>1000,34711=>1000,34712=>1000,34713=>1000,34714=>1000,34715=>1000,34716=>1000,34717=>1000,34718=>1000,34719=>1000,34720=>1000,34721=>1000,34722=>1000,34723=>1000,34724=>1000, + 34725=>1000,34726=>1000,34727=>1000,34728=>1000,34729=>1000,34730=>1000,34731=>1000,34732=>1000,34733=>1000,34734=>1000,34735=>1000,34736=>1000,34737=>1000,34738=>1000,34739=>1000,34740=>1000, + 34741=>1000,34742=>1000,34743=>1000,34744=>1000,34745=>1000,34746=>1000,34747=>1000,34748=>1000,34749=>1000,34750=>1000,34751=>1000,34752=>1000,34753=>1000,34754=>1000,34755=>1000,34756=>1000, + 34757=>1000,34758=>1000,34759=>1000,34760=>1000,34761=>1000,34762=>1000,34763=>1000,34764=>1000,34765=>1000,34766=>1000,34767=>1000,34768=>1000,34769=>1000,34770=>1000,34771=>1000,34772=>1000, + 34773=>1000,34774=>1000,34775=>1000,34776=>1000,34777=>1000,34778=>1000,34779=>1000,34780=>1000,34781=>1000,34782=>1000,34783=>1000,34784=>1000,34785=>1000,34786=>1000,34787=>1000,34788=>1000, + 34789=>1000,34790=>1000,34791=>1000,34792=>1000,34793=>1000,34794=>1000,34795=>1000,34796=>1000,34797=>1000,34798=>1000,34799=>1000,34800=>1000,34801=>1000,34802=>1000,34803=>1000,34804=>1000, + 34805=>1000,34806=>1000,34807=>1000,34808=>1000,34809=>1000,34810=>1000,34811=>1000,34812=>1000,34813=>1000,34814=>1000,34815=>1000,34816=>1000,34817=>1000,34818=>1000,34819=>1000,34820=>1000, + 34821=>1000,34822=>1000,34823=>1000,34824=>1000,34825=>1000,34826=>1000,34827=>1000,34828=>1000,34829=>1000,34830=>1000,34831=>1000,34832=>1000,34833=>1000,34834=>1000,34835=>1000,34836=>1000, + 34837=>1000,34838=>1000,34839=>1000,34840=>1000,34841=>1000,34842=>1000,34843=>1000,34844=>1000,34845=>1000,34846=>1000,34847=>1000,34848=>1000,34849=>1000,34850=>1000,34851=>1000,34852=>1000, + 34853=>1000,34854=>1000,34855=>1000,34856=>1000,34857=>1000,34858=>1000,34859=>1000,34860=>1000,34861=>1000,34862=>1000,34863=>1000,34864=>1000,34865=>1000,34866=>1000,34867=>1000,34868=>1000, + 34869=>1000,34870=>1000,34871=>1000,34872=>1000,34873=>1000,34874=>1000,34875=>1000,34876=>1000,34877=>1000,34878=>1000,34879=>1000,34880=>1000,34881=>1000,34882=>1000,34883=>1000,34884=>1000, + 34885=>1000,34886=>1000,34887=>1000,34888=>1000,34889=>1000,34890=>1000,34891=>1000,34892=>1000,34893=>1000,34894=>1000,34895=>1000,34896=>1000,34897=>1000,34898=>1000,34899=>1000,34900=>1000, + 34901=>1000,34902=>1000,34903=>1000,34904=>1000,34905=>1000,34906=>1000,34907=>1000,34908=>1000,34909=>1000,34910=>1000,34911=>1000,34912=>1000,34913=>1000,34914=>1000,34915=>1000,34916=>1000, + 34917=>1000,34918=>1000,34919=>1000,34920=>1000,34921=>1000,34922=>1000,34923=>1000,34924=>1000,34925=>1000,34926=>1000,34927=>1000,34928=>1000,34929=>1000,34930=>1000,34931=>1000,34932=>1000, + 34933=>1000,34934=>1000,34935=>1000,34936=>1000,34937=>1000,34938=>1000,34939=>1000,34940=>1000,34941=>1000,34942=>1000,34943=>1000,34944=>1000,34945=>1000,34946=>1000,34947=>1000,34948=>1000, + 34949=>1000,34950=>1000,34951=>1000,34952=>1000,34953=>1000,34954=>1000,34955=>1000,34956=>1000,34957=>1000,34958=>1000,34959=>1000,34960=>1000,34961=>1000,34962=>1000,34963=>1000,34964=>1000, + 34965=>1000,34966=>1000,34967=>1000,34968=>1000,34969=>1000,34970=>1000,34971=>1000,34972=>1000,34973=>1000,34974=>1000,34975=>1000,34976=>1000,34977=>1000,34978=>1000,34979=>1000,34980=>1000, + 34981=>1000,34982=>1000,34983=>1000,34984=>1000,34985=>1000,34986=>1000,34987=>1000,34988=>1000,34989=>1000,34990=>1000,34991=>1000,34992=>1000,34993=>1000,34994=>1000,34995=>1000,34996=>1000, + 34997=>1000,34998=>1000,34999=>1000,35000=>1000,35001=>1000,35002=>1000,35003=>1000,35004=>1000,35005=>1000,35006=>1000,35007=>1000,35008=>1000,35009=>1000,35010=>1000,35011=>1000,35012=>1000, + 35013=>1000,35014=>1000,35015=>1000,35016=>1000,35017=>1000,35018=>1000,35019=>1000,35020=>1000,35021=>1000,35022=>1000,35023=>1000,35024=>1000,35025=>1000,35026=>1000,35027=>1000,35028=>1000, + 35029=>1000,35030=>1000,35031=>1000,35032=>1000,35033=>1000,35034=>1000,35035=>1000,35036=>1000,35037=>1000,35038=>1000,35039=>1000,35040=>1000,35041=>1000,35042=>1000,35043=>1000,35044=>1000, + 35045=>1000,35046=>1000,35047=>1000,35048=>1000,35049=>1000,35050=>1000,35051=>1000,35052=>1000,35053=>1000,35054=>1000,35055=>1000,35056=>1000,35057=>1000,35058=>1000,35059=>1000,35060=>1000, + 35061=>1000,35062=>1000,35063=>1000,35064=>1000,35065=>1000,35066=>1000,35067=>1000,35068=>1000,35069=>1000,35070=>1000,35071=>1000,35072=>1000,35073=>1000,35074=>1000,35075=>1000,35076=>1000, + 35077=>1000,35078=>1000,35079=>1000,35080=>1000,35081=>1000,35082=>1000,35083=>1000,35084=>1000,35085=>1000,35086=>1000,35087=>1000,35088=>1000,35089=>1000,35090=>1000,35091=>1000,35092=>1000, + 35093=>1000,35094=>1000,35095=>1000,35096=>1000,35097=>1000,35098=>1000,35099=>1000,35100=>1000,35101=>1000,35102=>1000,35103=>1000,35104=>1000,35105=>1000,35106=>1000,35107=>1000,35108=>1000, + 35109=>1000,35110=>1000,35111=>1000,35112=>1000,35113=>1000,35114=>1000,35115=>1000,35116=>1000,35117=>1000,35118=>1000,35119=>1000,35120=>1000,35121=>1000,35122=>1000,35123=>1000,35124=>1000, + 35125=>1000,35126=>1000,35127=>1000,35128=>1000,35129=>1000,35130=>1000,35131=>1000,35132=>1000,35133=>1000,35134=>1000,35135=>1000,35136=>1000,35137=>1000,35138=>1000,35139=>1000,35140=>1000, + 35141=>1000,35142=>1000,35143=>1000,35144=>1000,35145=>1000,35146=>1000,35147=>1000,35148=>1000,35149=>1000,35150=>1000,35151=>1000,35152=>1000,35153=>1000,35154=>1000,35155=>1000,35156=>1000, + 35157=>1000,35158=>1000,35159=>1000,35160=>1000,35161=>1000,35162=>1000,35163=>1000,35164=>1000,35165=>1000,35166=>1000,35167=>1000,35168=>1000,35169=>1000,35170=>1000,35171=>1000,35172=>1000, + 35173=>1000,35174=>1000,35175=>1000,35176=>1000,35177=>1000,35178=>1000,35179=>1000,35180=>1000,35181=>1000,35182=>1000,35183=>1000,35184=>1000,35185=>1000,35186=>1000,35187=>1000,35188=>1000, + 35189=>1000,35190=>1000,35191=>1000,35192=>1000,35193=>1000,35194=>1000,35195=>1000,35196=>1000,35197=>1000,35198=>1000,35199=>1000,35200=>1000,35201=>1000,35202=>1000,35203=>1000,35204=>1000, + 35205=>1000,35206=>1000,35207=>1000,35208=>1000,35209=>1000,35210=>1000,35211=>1000,35212=>1000,35213=>1000,35214=>1000,35215=>1000,35216=>1000,35217=>1000,35218=>1000,35219=>1000,35220=>1000, + 35221=>1000,35222=>1000,35223=>1000,35224=>1000,35225=>1000,35226=>1000,35227=>1000,35228=>1000,35229=>1000,35230=>1000,35231=>1000,35232=>1000,35233=>1000,35234=>1000,35235=>1000,35236=>1000, + 35237=>1000,35238=>1000,35239=>1000,35240=>1000,35241=>1000,35242=>1000,35243=>1000,35244=>1000,35245=>1000,35246=>1000,35247=>1000,35248=>1000,35249=>1000,35250=>1000,35251=>1000,35252=>1000, + 35253=>1000,35254=>1000,35255=>1000,35256=>1000,35257=>1000,35258=>1000,35259=>1000,35260=>1000,35261=>1000,35262=>1000,35263=>1000,35264=>1000,35265=>1000,35266=>1000,35267=>1000,35268=>1000, + 35269=>1000,35270=>1000,35271=>1000,35272=>1000,35273=>1000,35274=>1000,35275=>1000,35276=>1000,35277=>1000,35278=>1000,35279=>1000,35280=>1000,35281=>1000,35282=>1000,35283=>1000,35284=>1000, + 35285=>1000,35286=>1000,35287=>1000,35288=>1000,35289=>1000,35290=>1000,35291=>1000,35292=>1000,35293=>1000,35294=>1000,35295=>1000,35296=>1000,35297=>1000,35298=>1000,35299=>1000,35300=>1000, + 35301=>1000,35302=>1000,35303=>1000,35304=>1000,35305=>1000,35306=>1000,35307=>1000,35308=>1000,35309=>1000,35310=>1000,35311=>1000,35312=>1000,35313=>1000,35314=>1000,35315=>1000,35316=>1000, + 35317=>1000,35318=>1000,35319=>1000,35320=>1000,35321=>1000,35322=>1000,35323=>1000,35324=>1000,35325=>1000,35326=>1000,35327=>1000,35328=>1000,35329=>1000,35330=>1000,35331=>1000,35332=>1000, + 35333=>1000,35334=>1000,35335=>1000,35336=>1000,35337=>1000,35338=>1000,35339=>1000,35340=>1000,35341=>1000,35342=>1000,35343=>1000,35344=>1000,35345=>1000,35346=>1000,35347=>1000,35348=>1000, + 35349=>1000,35350=>1000,35351=>1000,35352=>1000,35353=>1000,35354=>1000,35355=>1000,35356=>1000,35357=>1000,35358=>1000,35359=>1000,35360=>1000,35361=>1000,35362=>1000,35363=>1000,35364=>1000, + 35365=>1000,35366=>1000,35367=>1000,35368=>1000,35369=>1000,35370=>1000,35371=>1000,35372=>1000,35373=>1000,35374=>1000,35375=>1000,35376=>1000,35377=>1000,35378=>1000,35379=>1000,35380=>1000, + 35381=>1000,35382=>1000,35383=>1000,35384=>1000,35385=>1000,35386=>1000,35387=>1000,35388=>1000,35389=>1000,35390=>1000,35391=>1000,35392=>1000,35393=>1000,35394=>1000,35395=>1000,35396=>1000, + 35397=>1000,35398=>1000,35399=>1000,35400=>1000,35401=>1000,35402=>1000,35403=>1000,35404=>1000,35405=>1000,35406=>1000,35407=>1000,35408=>1000,35409=>1000,35410=>1000,35411=>1000,35412=>1000, + 35413=>1000,35414=>1000,35415=>1000,35416=>1000,35417=>1000,35418=>1000,35419=>1000,35420=>1000,35421=>1000,35422=>1000,35423=>1000,35424=>1000,35425=>1000,35426=>1000,35427=>1000,35428=>1000, + 35429=>1000,35430=>1000,35431=>1000,35432=>1000,35433=>1000,35434=>1000,35435=>1000,35436=>1000,35437=>1000,35438=>1000,35439=>1000,35440=>1000,35441=>1000,35442=>1000,35443=>1000,35444=>1000, + 35445=>1000,35446=>1000,35447=>1000,35448=>1000,35449=>1000,35450=>1000,35451=>1000,35452=>1000,35453=>1000,35454=>1000,35455=>1000,35456=>1000,35457=>1000,35458=>1000,35459=>1000,35460=>1000, + 35461=>1000,35462=>1000,35463=>1000,35464=>1000,35465=>1000,35466=>1000,35467=>1000,35468=>1000,35469=>1000,35470=>1000,35471=>1000,35472=>1000,35473=>1000,35474=>1000,35475=>1000,35476=>1000, + 35477=>1000,35478=>1000,35479=>1000,35480=>1000,35481=>1000,35482=>1000,35483=>1000,35484=>1000,35485=>1000,35486=>1000,35487=>1000,35488=>1000,35489=>1000,35490=>1000,35491=>1000,35492=>1000, + 35493=>1000,35494=>1000,35495=>1000,35496=>1000,35497=>1000,35498=>1000,35499=>1000,35500=>1000,35501=>1000,35502=>1000,35503=>1000,35504=>1000,35505=>1000,35506=>1000,35507=>1000,35508=>1000, + 35509=>1000,35510=>1000,35511=>1000,35512=>1000,35513=>1000,35514=>1000,35515=>1000,35516=>1000,35517=>1000,35518=>1000,35519=>1000,35520=>1000,35521=>1000,35522=>1000,35523=>1000,35524=>1000, + 35525=>1000,35526=>1000,35527=>1000,35528=>1000,35529=>1000,35530=>1000,35531=>1000,35532=>1000,35533=>1000,35534=>1000,35535=>1000,35536=>1000,35537=>1000,35538=>1000,35539=>1000,35540=>1000, + 35541=>1000,35542=>1000,35543=>1000,35544=>1000,35545=>1000,35546=>1000,35547=>1000,35548=>1000,35549=>1000,35550=>1000,35551=>1000,35552=>1000,35553=>1000,35554=>1000,35555=>1000,35556=>1000, + 35557=>1000,35558=>1000,35559=>1000,35560=>1000,35561=>1000,35562=>1000,35563=>1000,35564=>1000,35565=>1000,35566=>1000,35567=>1000,35568=>1000,35569=>1000,35570=>1000,35571=>1000,35572=>1000, + 35573=>1000,35574=>1000,35575=>1000,35576=>1000,35577=>1000,35578=>1000,35579=>1000,35580=>1000,35581=>1000,35582=>1000,35583=>1000,35584=>1000,35585=>1000,35586=>1000,35587=>1000,35588=>1000, + 35589=>1000,35590=>1000,35591=>1000,35592=>1000,35593=>1000,35594=>1000,35595=>1000,35596=>1000,35597=>1000,35598=>1000,35599=>1000,35600=>1000,35601=>1000,35602=>1000,35603=>1000,35604=>1000, + 35605=>1000,35606=>1000,35607=>1000,35608=>1000,35609=>1000,35610=>1000,35611=>1000,35612=>1000,35613=>1000,35614=>1000,35615=>1000,35616=>1000,35617=>1000,35618=>1000,35619=>1000,35620=>1000, + 35621=>1000,35622=>1000,35623=>1000,35624=>1000,35625=>1000,35626=>1000,35627=>1000,35628=>1000,35629=>1000,35630=>1000,35631=>1000,35632=>1000,35633=>1000,35634=>1000,35635=>1000,35636=>1000, + 35637=>1000,35638=>1000,35639=>1000,35640=>1000,35641=>1000,35642=>1000,35643=>1000,35644=>1000,35645=>1000,35646=>1000,35647=>1000,35648=>1000,35649=>1000,35650=>1000,35651=>1000,35652=>1000, + 35653=>1000,35654=>1000,35655=>1000,35656=>1000,35657=>1000,35658=>1000,35659=>1000,35660=>1000,35661=>1000,35662=>1000,35663=>1000,35664=>1000,35665=>1000,35666=>1000,35667=>1000,35668=>1000, + 35669=>1000,35670=>1000,35671=>1000,35672=>1000,35673=>1000,35674=>1000,35675=>1000,35676=>1000,35677=>1000,35678=>1000,35679=>1000,35680=>1000,35681=>1000,35682=>1000,35683=>1000,35684=>1000, + 35685=>1000,35686=>1000,35687=>1000,35688=>1000,35689=>1000,35690=>1000,35691=>1000,35692=>1000,35693=>1000,35694=>1000,35695=>1000,35696=>1000,35697=>1000,35698=>1000,35699=>1000,35700=>1000, + 35701=>1000,35702=>1000,35703=>1000,35704=>1000,35705=>1000,35706=>1000,35707=>1000,35708=>1000,35709=>1000,35710=>1000,35711=>1000,35712=>1000,35713=>1000,35714=>1000,35715=>1000,35716=>1000, + 35717=>1000,35718=>1000,35719=>1000,35720=>1000,35721=>1000,35722=>1000,35723=>1000,35724=>1000,35725=>1000,35726=>1000,35727=>1000,35728=>1000,35729=>1000,35730=>1000,35731=>1000,35732=>1000, + 35733=>1000,35734=>1000,35735=>1000,35736=>1000,35737=>1000,35738=>1000,35739=>1000,35740=>1000,35741=>1000,35742=>1000,35743=>1000,35744=>1000,35745=>1000,35746=>1000,35747=>1000,35748=>1000, + 35749=>1000,35750=>1000,35751=>1000,35752=>1000,35753=>1000,35754=>1000,35755=>1000,35756=>1000,35757=>1000,35758=>1000,35759=>1000,35760=>1000,35761=>1000,35762=>1000,35763=>1000,35764=>1000, + 35765=>1000,35766=>1000,35767=>1000,35768=>1000,35769=>1000,35770=>1000,35771=>1000,35772=>1000,35773=>1000,35774=>1000,35775=>1000,35776=>1000,35777=>1000,35778=>1000,35779=>1000,35780=>1000, + 35781=>1000,35782=>1000,35783=>1000,35784=>1000,35785=>1000,35786=>1000,35787=>1000,35788=>1000,35789=>1000,35790=>1000,35791=>1000,35792=>1000,35793=>1000,35794=>1000,35795=>1000,35796=>1000, + 35797=>1000,35798=>1000,35799=>1000,35800=>1000,35801=>1000,35802=>1000,35803=>1000,35804=>1000,35805=>1000,35806=>1000,35807=>1000,35808=>1000,35809=>1000,35810=>1000,35811=>1000,35812=>1000, + 35813=>1000,35814=>1000,35815=>1000,35816=>1000,35817=>1000,35818=>1000,35819=>1000,35820=>1000,35821=>1000,35822=>1000,35823=>1000,35824=>1000,35825=>1000,35826=>1000,35827=>1000,35828=>1000, + 35829=>1000,35830=>1000,35831=>1000,35832=>1000,35833=>1000,35834=>1000,35835=>1000,35836=>1000,35837=>1000,35838=>1000,35839=>1000,35840=>1000,35841=>1000,35842=>1000,35843=>1000,35844=>1000, + 35845=>1000,35846=>1000,35847=>1000,35848=>1000,35849=>1000,35850=>1000,35851=>1000,35852=>1000,35853=>1000,35854=>1000,35855=>1000,35856=>1000,35857=>1000,35858=>1000,35859=>1000,35860=>1000, + 35861=>1000,35862=>1000,35863=>1000,35864=>1000,35865=>1000,35866=>1000,35867=>1000,35868=>1000,35869=>1000,35870=>1000,35871=>1000,35872=>1000,35873=>1000,35874=>1000,35875=>1000,35876=>1000, + 35877=>1000,35878=>1000,35879=>1000,35880=>1000,35881=>1000,35882=>1000,35883=>1000,35884=>1000,35885=>1000,35886=>1000,35887=>1000,35888=>1000,35889=>1000,35890=>1000,35891=>1000,35892=>1000, + 35893=>1000,35894=>1000,35895=>1000,35896=>1000,35897=>1000,35898=>1000,35899=>1000,35900=>1000,35901=>1000,35902=>1000,35903=>1000,35904=>1000,35905=>1000,35906=>1000,35907=>1000,35908=>1000, + 35909=>1000,35910=>1000,35911=>1000,35912=>1000,35913=>1000,35914=>1000,35915=>1000,35916=>1000,35917=>1000,35918=>1000,35919=>1000,35920=>1000,35921=>1000,35922=>1000,35923=>1000,35924=>1000, + 35925=>1000,35926=>1000,35927=>1000,35928=>1000,35929=>1000,35930=>1000,35931=>1000,35932=>1000,35933=>1000,35934=>1000,35935=>1000,35936=>1000,35937=>1000,35938=>1000,35939=>1000,35940=>1000, + 35941=>1000,35942=>1000,35943=>1000,35944=>1000,35945=>1000,35946=>1000,35947=>1000,35948=>1000,35949=>1000,35950=>1000,35951=>1000,35952=>1000,35953=>1000,35954=>1000,35955=>1000,35956=>1000, + 35957=>1000,35958=>1000,35959=>1000,35960=>1000,35961=>1000,35962=>1000,35963=>1000,35964=>1000,35965=>1000,35966=>1000,35967=>1000,35968=>1000,35969=>1000,35970=>1000,35971=>1000,35972=>1000, + 35973=>1000,35974=>1000,35975=>1000,35976=>1000,35977=>1000,35978=>1000,35979=>1000,35980=>1000,35981=>1000,35982=>1000,35983=>1000,35984=>1000,35985=>1000,35986=>1000,35987=>1000,35988=>1000, + 35989=>1000,35990=>1000,35991=>1000,35992=>1000,35993=>1000,35994=>1000,35995=>1000,35996=>1000,35997=>1000,35998=>1000,35999=>1000,36000=>1000,36001=>1000,36002=>1000,36003=>1000,36004=>1000, + 36005=>1000,36006=>1000,36007=>1000,36008=>1000,36009=>1000,36010=>1000,36011=>1000,36012=>1000,36013=>1000,36014=>1000,36015=>1000,36016=>1000,36017=>1000,36018=>1000,36019=>1000,36020=>1000, + 36021=>1000,36022=>1000,36023=>1000,36024=>1000,36025=>1000,36026=>1000,36027=>1000,36028=>1000,36029=>1000,36030=>1000,36031=>1000,36032=>1000,36033=>1000,36034=>1000,36035=>1000,36036=>1000, + 36037=>1000,36038=>1000,36039=>1000,36040=>1000,36041=>1000,36042=>1000,36043=>1000,36044=>1000,36045=>1000,36046=>1000,36047=>1000,36048=>1000,36049=>1000,36050=>1000,36051=>1000,36052=>1000, + 36053=>1000,36054=>1000,36055=>1000,36056=>1000,36057=>1000,36058=>1000,36059=>1000,36060=>1000,36061=>1000,36062=>1000,36063=>1000,36064=>1000,36065=>1000,36066=>1000,36067=>1000,36068=>1000, + 36069=>1000,36070=>1000,36071=>1000,36072=>1000,36073=>1000,36074=>1000,36075=>1000,36076=>1000,36077=>1000,36078=>1000,36079=>1000,36080=>1000,36081=>1000,36082=>1000,36083=>1000,36084=>1000, + 36085=>1000,36086=>1000,36087=>1000,36088=>1000,36089=>1000,36090=>1000,36091=>1000,36092=>1000,36093=>1000,36094=>1000,36095=>1000,36096=>1000,36097=>1000,36098=>1000,36099=>1000,36100=>1000, + 36101=>1000,36102=>1000,36103=>1000,36104=>1000,36105=>1000,36106=>1000,36107=>1000,36108=>1000,36109=>1000,36110=>1000,36111=>1000,36112=>1000,36113=>1000,36114=>1000,36115=>1000,36116=>1000, + 36117=>1000,36118=>1000,36119=>1000,36120=>1000,36121=>1000,36122=>1000,36123=>1000,36124=>1000,36125=>1000,36126=>1000,36127=>1000,36128=>1000,36129=>1000,36130=>1000,36131=>1000,36132=>1000, + 36133=>1000,36134=>1000,36135=>1000,36136=>1000,36137=>1000,36138=>1000,36139=>1000,36140=>1000,36141=>1000,36142=>1000,36143=>1000,36144=>1000,36145=>1000,36146=>1000,36147=>1000,36148=>1000, + 36149=>1000,36150=>1000,36151=>1000,36152=>1000,36153=>1000,36154=>1000,36155=>1000,36156=>1000,36157=>1000,36158=>1000,36159=>1000,36160=>1000,36161=>1000,36162=>1000,36163=>1000,36164=>1000, + 36165=>1000,36166=>1000,36167=>1000,36168=>1000,36169=>1000,36170=>1000,36171=>1000,36172=>1000,36173=>1000,36174=>1000,36175=>1000,36176=>1000,36177=>1000,36178=>1000,36179=>1000,36180=>1000, + 36181=>1000,36182=>1000,36183=>1000,36184=>1000,36185=>1000,36186=>1000,36187=>1000,36188=>1000,36189=>1000,36190=>1000,36191=>1000,36192=>1000,36193=>1000,36194=>1000,36195=>1000,36196=>1000, + 36197=>1000,36198=>1000,36199=>1000,36200=>1000,36201=>1000,36202=>1000,36203=>1000,36204=>1000,36205=>1000,36206=>1000,36207=>1000,36208=>1000,36209=>1000,36210=>1000,36211=>1000,36212=>1000, + 36213=>1000,36214=>1000,36215=>1000,36216=>1000,36217=>1000,36218=>1000,36219=>1000,36220=>1000,36221=>1000,36222=>1000,36223=>1000,36224=>1000,36225=>1000,36226=>1000,36227=>1000,36228=>1000, + 36229=>1000,36230=>1000,36231=>1000,36232=>1000,36233=>1000,36234=>1000,36235=>1000,36236=>1000,36237=>1000,36238=>1000,36239=>1000,36240=>1000,36241=>1000,36242=>1000,36243=>1000,36244=>1000, + 36245=>1000,36246=>1000,36247=>1000,36248=>1000,36249=>1000,36250=>1000,36251=>1000,36252=>1000,36253=>1000,36254=>1000,36255=>1000,36256=>1000,36257=>1000,36258=>1000,36259=>1000,36260=>1000, + 36261=>1000,36262=>1000,36263=>1000,36264=>1000,36265=>1000,36266=>1000,36267=>1000,36268=>1000,36269=>1000,36270=>1000,36271=>1000,36272=>1000,36273=>1000,36274=>1000,36275=>1000,36276=>1000, + 36277=>1000,36278=>1000,36279=>1000,36280=>1000,36281=>1000,36282=>1000,36283=>1000,36284=>1000,36285=>1000,36286=>1000,36287=>1000,36288=>1000,36289=>1000,36290=>1000,36291=>1000,36292=>1000, + 36293=>1000,36294=>1000,36295=>1000,36296=>1000,36297=>1000,36298=>1000,36299=>1000,36300=>1000,36301=>1000,36302=>1000,36303=>1000,36304=>1000,36305=>1000,36306=>1000,36307=>1000,36308=>1000, + 36309=>1000,36310=>1000,36311=>1000,36312=>1000,36313=>1000,36314=>1000,36315=>1000,36316=>1000,36317=>1000,36318=>1000,36319=>1000,36320=>1000,36321=>1000,36322=>1000,36323=>1000,36324=>1000, + 36325=>1000,36326=>1000,36327=>1000,36328=>1000,36329=>1000,36330=>1000,36331=>1000,36332=>1000,36333=>1000,36334=>1000,36335=>1000,36336=>1000,36337=>1000,36338=>1000,36339=>1000,36340=>1000, + 36341=>1000,36342=>1000,36343=>1000,36344=>1000,36345=>1000,36346=>1000,36347=>1000,36348=>1000,36349=>1000,36350=>1000,36351=>1000,36352=>1000,36353=>1000,36354=>1000,36355=>1000,36356=>1000, + 36357=>1000,36358=>1000,36359=>1000,36360=>1000,36361=>1000,36362=>1000,36363=>1000,36364=>1000,36365=>1000,36366=>1000,36367=>1000,36368=>1000,36369=>1000,36370=>1000,36371=>1000,36372=>1000, + 36373=>1000,36374=>1000,36375=>1000,36376=>1000,36377=>1000,36378=>1000,36379=>1000,36380=>1000,36381=>1000,36382=>1000,36383=>1000,36384=>1000,36385=>1000,36386=>1000,36387=>1000,36388=>1000, + 36389=>1000,36390=>1000,36391=>1000,36392=>1000,36393=>1000,36394=>1000,36395=>1000,36396=>1000,36397=>1000,36398=>1000,36399=>1000,36400=>1000,36401=>1000,36402=>1000,36403=>1000,36404=>1000, + 36405=>1000,36406=>1000,36407=>1000,36408=>1000,36409=>1000,36410=>1000,36411=>1000,36412=>1000,36413=>1000,36414=>1000,36415=>1000,36416=>1000,36417=>1000,36418=>1000,36419=>1000,36420=>1000, + 36421=>1000,36422=>1000,36423=>1000,36424=>1000,36425=>1000,36426=>1000,36427=>1000,36428=>1000,36429=>1000,36430=>1000,36431=>1000,36432=>1000,36433=>1000,36434=>1000,36435=>1000,36436=>1000, + 36437=>1000,36438=>1000,36439=>1000,36440=>1000,36441=>1000,36442=>1000,36443=>1000,36444=>1000,36445=>1000,36446=>1000,36447=>1000,36448=>1000,36449=>1000,36450=>1000,36451=>1000,36452=>1000, + 36453=>1000,36454=>1000,36455=>1000,36456=>1000,36457=>1000,36458=>1000,36459=>1000,36460=>1000,36461=>1000,36462=>1000,36463=>1000,36464=>1000,36465=>1000,36466=>1000,36467=>1000,36468=>1000, + 36469=>1000,36470=>1000,36471=>1000,36472=>1000,36473=>1000,36474=>1000,36475=>1000,36476=>1000,36477=>1000,36478=>1000,36479=>1000,36480=>1000,36481=>1000,36482=>1000,36483=>1000,36484=>1000, + 36485=>1000,36486=>1000,36487=>1000,36488=>1000,36489=>1000,36490=>1000,36491=>1000,36492=>1000,36493=>1000,36494=>1000,36495=>1000,36496=>1000,36497=>1000,36498=>1000,36499=>1000,36500=>1000, + 36501=>1000,36502=>1000,36503=>1000,36504=>1000,36505=>1000,36506=>1000,36507=>1000,36508=>1000,36509=>1000,36510=>1000,36511=>1000,36512=>1000,36513=>1000,36514=>1000,36515=>1000,36516=>1000, + 36517=>1000,36518=>1000,36519=>1000,36520=>1000,36521=>1000,36522=>1000,36523=>1000,36524=>1000,36525=>1000,36526=>1000,36527=>1000,36528=>1000,36529=>1000,36530=>1000,36531=>1000,36532=>1000, + 36533=>1000,36534=>1000,36535=>1000,36536=>1000,36537=>1000,36538=>1000,36539=>1000,36540=>1000,36541=>1000,36542=>1000,36543=>1000,36544=>1000,36545=>1000,36546=>1000,36547=>1000,36548=>1000, + 36549=>1000,36550=>1000,36551=>1000,36552=>1000,36553=>1000,36554=>1000,36555=>1000,36556=>1000,36557=>1000,36558=>1000,36559=>1000,36560=>1000,36561=>1000,36562=>1000,36563=>1000,36564=>1000, + 36565=>1000,36566=>1000,36567=>1000,36568=>1000,36569=>1000,36570=>1000,36571=>1000,36572=>1000,36573=>1000,36574=>1000,36575=>1000,36576=>1000,36577=>1000,36578=>1000,36579=>1000,36580=>1000, + 36581=>1000,36582=>1000,36583=>1000,36584=>1000,36585=>1000,36586=>1000,36587=>1000,36588=>1000,36589=>1000,36590=>1000,36591=>1000,36592=>1000,36593=>1000,36594=>1000,36595=>1000,36596=>1000, + 36597=>1000,36598=>1000,36599=>1000,36600=>1000,36601=>1000,36602=>1000,36603=>1000,36604=>1000,36605=>1000,36606=>1000,36607=>1000,36608=>1000,36609=>1000,36610=>1000,36611=>1000,36612=>1000, + 36613=>1000,36614=>1000,36615=>1000,36616=>1000,36617=>1000,36618=>1000,36619=>1000,36620=>1000,36621=>1000,36622=>1000,36623=>1000,36624=>1000,36625=>1000,36626=>1000,36627=>1000,36628=>1000, + 36629=>1000,36630=>1000,36631=>1000,36632=>1000,36633=>1000,36634=>1000,36635=>1000,36636=>1000,36637=>1000,36638=>1000,36639=>1000,36640=>1000,36641=>1000,36642=>1000,36643=>1000,36644=>1000, + 36645=>1000,36646=>1000,36647=>1000,36648=>1000,36649=>1000,36650=>1000,36651=>1000,36652=>1000,36653=>1000,36654=>1000,36655=>1000,36656=>1000,36657=>1000,36658=>1000,36659=>1000,36660=>1000, + 36661=>1000,36662=>1000,36663=>1000,36664=>1000,36665=>1000,36666=>1000,36667=>1000,36668=>1000,36669=>1000,36670=>1000,36671=>1000,36672=>1000,36673=>1000,36674=>1000,36675=>1000,36676=>1000, + 36677=>1000,36678=>1000,36679=>1000,36680=>1000,36681=>1000,36682=>1000,36683=>1000,36684=>1000,36685=>1000,36686=>1000,36687=>1000,36688=>1000,36689=>1000,36690=>1000,36691=>1000,36692=>1000, + 36693=>1000,36694=>1000,36695=>1000,36696=>1000,36697=>1000,36698=>1000,36699=>1000,36700=>1000,36701=>1000,36702=>1000,36703=>1000,36704=>1000,36705=>1000,36706=>1000,36707=>1000,36708=>1000, + 36709=>1000,36710=>1000,36711=>1000,36712=>1000,36713=>1000,36714=>1000,36715=>1000,36716=>1000,36717=>1000,36718=>1000,36719=>1000,36720=>1000,36721=>1000,36722=>1000,36723=>1000,36724=>1000, + 36725=>1000,36726=>1000,36727=>1000,36728=>1000,36729=>1000,36730=>1000,36731=>1000,36732=>1000,36733=>1000,36734=>1000,36735=>1000,36736=>1000,36737=>1000,36738=>1000,36739=>1000,36740=>1000, + 36741=>1000,36742=>1000,36743=>1000,36744=>1000,36745=>1000,36746=>1000,36747=>1000,36748=>1000,36749=>1000,36750=>1000,36751=>1000,36752=>1000,36753=>1000,36754=>1000,36755=>1000,36756=>1000, + 36757=>1000,36758=>1000,36759=>1000,36760=>1000,36761=>1000,36762=>1000,36763=>1000,36764=>1000,36765=>1000,36766=>1000,36767=>1000,36768=>1000,36769=>1000,36770=>1000,36771=>1000,36772=>1000, + 36773=>1000,36774=>1000,36775=>1000,36776=>1000,36777=>1000,36778=>1000,36779=>1000,36780=>1000,36781=>1000,36782=>1000,36783=>1000,36784=>1000,36785=>1000,36786=>1000,36787=>1000,36788=>1000, + 36789=>1000,36790=>1000,36791=>1000,36792=>1000,36793=>1000,36794=>1000,36795=>1000,36796=>1000,36797=>1000,36798=>1000,36799=>1000,36800=>1000,36801=>1000,36802=>1000,36803=>1000,36804=>1000, + 36805=>1000,36806=>1000,36807=>1000,36808=>1000,36809=>1000,36810=>1000,36811=>1000,36812=>1000,36813=>1000,36814=>1000,36815=>1000,36816=>1000,36817=>1000,36818=>1000,36819=>1000,36820=>1000, + 36821=>1000,36822=>1000,36823=>1000,36824=>1000,36825=>1000,36826=>1000,36827=>1000,36828=>1000,36829=>1000,36830=>1000,36831=>1000,36832=>1000,36833=>1000,36834=>1000,36835=>1000,36836=>1000, + 36837=>1000,36838=>1000,36839=>1000,36840=>1000,36841=>1000,36842=>1000,36843=>1000,36844=>1000,36845=>1000,36846=>1000,36847=>1000,36848=>1000,36849=>1000,36850=>1000,36851=>1000,36852=>1000, + 36853=>1000,36854=>1000,36855=>1000,36856=>1000,36857=>1000,36858=>1000,36859=>1000,36860=>1000,36861=>1000,36862=>1000,36863=>1000,36864=>1000,36865=>1000,36866=>1000,36867=>1000,36868=>1000, + 36869=>1000,36870=>1000,36871=>1000,36872=>1000,36873=>1000,36874=>1000,36875=>1000,36876=>1000,36877=>1000,36878=>1000,36879=>1000,36880=>1000,36881=>1000,36882=>1000,36883=>1000,36884=>1000, + 36885=>1000,36886=>1000,36887=>1000,36888=>1000,36889=>1000,36890=>1000,36891=>1000,36892=>1000,36893=>1000,36894=>1000,36895=>1000,36896=>1000,36897=>1000,36898=>1000,36899=>1000,36900=>1000, + 36901=>1000,36902=>1000,36903=>1000,36904=>1000,36905=>1000,36906=>1000,36907=>1000,36908=>1000,36909=>1000,36910=>1000,36911=>1000,36912=>1000,36913=>1000,36914=>1000,36915=>1000,36916=>1000, + 36917=>1000,36918=>1000,36919=>1000,36920=>1000,36921=>1000,36922=>1000,36923=>1000,36924=>1000,36925=>1000,36926=>1000,36927=>1000,36928=>1000,36929=>1000,36930=>1000,36931=>1000,36932=>1000, + 36933=>1000,36934=>1000,36935=>1000,36936=>1000,36937=>1000,36938=>1000,36939=>1000,36940=>1000,36941=>1000,36942=>1000,36943=>1000,36944=>1000,36945=>1000,36946=>1000,36947=>1000,36948=>1000, + 36949=>1000,36950=>1000,36951=>1000,36952=>1000,36953=>1000,36954=>1000,36955=>1000,36956=>1000,36957=>1000,36958=>1000,36959=>1000,36960=>1000,36961=>1000,36962=>1000,36963=>1000,36964=>1000, + 36965=>1000,36966=>1000,36967=>1000,36968=>1000,36969=>1000,36970=>1000,36971=>1000,36972=>1000,36973=>1000,36974=>1000,36975=>1000,36976=>1000,36977=>1000,36978=>1000,36979=>1000,36980=>1000, + 36981=>1000,36982=>1000,36983=>1000,36984=>1000,36985=>1000,36986=>1000,36987=>1000,36988=>1000,36989=>1000,36990=>1000,36991=>1000,36992=>1000,36993=>1000,36994=>1000,36995=>1000,36996=>1000, + 36997=>1000,36998=>1000,36999=>1000,37000=>1000,37001=>1000,37002=>1000,37003=>1000,37004=>1000,37005=>1000,37006=>1000,37007=>1000,37008=>1000,37009=>1000,37010=>1000,37011=>1000,37012=>1000, + 37013=>1000,37014=>1000,37015=>1000,37016=>1000,37017=>1000,37018=>1000,37019=>1000,37020=>1000,37021=>1000,37022=>1000,37023=>1000,37024=>1000,37025=>1000,37026=>1000,37027=>1000,37028=>1000, + 37029=>1000,37030=>1000,37031=>1000,37032=>1000,37033=>1000,37034=>1000,37035=>1000,37036=>1000,37037=>1000,37038=>1000,37039=>1000,37040=>1000,37041=>1000,37042=>1000,37043=>1000,37044=>1000, + 37045=>1000,37046=>1000,37047=>1000,37048=>1000,37049=>1000,37050=>1000,37051=>1000,37052=>1000,37053=>1000,37054=>1000,37055=>1000,37056=>1000,37057=>1000,37058=>1000,37059=>1000,37060=>1000, + 37061=>1000,37062=>1000,37063=>1000,37064=>1000,37065=>1000,37066=>1000,37067=>1000,37068=>1000,37069=>1000,37070=>1000,37071=>1000,37072=>1000,37073=>1000,37074=>1000,37075=>1000,37076=>1000, + 37077=>1000,37078=>1000,37079=>1000,37080=>1000,37081=>1000,37082=>1000,37083=>1000,37084=>1000,37085=>1000,37086=>1000,37087=>1000,37088=>1000,37089=>1000,37090=>1000,37091=>1000,37092=>1000, + 37093=>1000,37094=>1000,37095=>1000,37096=>1000,37097=>1000,37098=>1000,37099=>1000,37100=>1000,37101=>1000,37102=>1000,37103=>1000,37104=>1000,37105=>1000,37106=>1000,37107=>1000,37108=>1000, + 37109=>1000,37110=>1000,37111=>1000,37112=>1000,37113=>1000,37114=>1000,37115=>1000,37116=>1000,37117=>1000,37118=>1000,37119=>1000,37120=>1000,37121=>1000,37122=>1000,37123=>1000,37124=>1000, + 37125=>1000,37126=>1000,37127=>1000,37128=>1000,37129=>1000,37130=>1000,37131=>1000,37132=>1000,37133=>1000,37134=>1000,37135=>1000,37136=>1000,37137=>1000,37138=>1000,37139=>1000,37140=>1000, + 37141=>1000,37142=>1000,37143=>1000,37144=>1000,37145=>1000,37146=>1000,37147=>1000,37148=>1000,37149=>1000,37150=>1000,37151=>1000,37152=>1000,37153=>1000,37154=>1000,37155=>1000,37156=>1000, + 37157=>1000,37158=>1000,37159=>1000,37160=>1000,37161=>1000,37162=>1000,37163=>1000,37164=>1000,37165=>1000,37166=>1000,37167=>1000,37168=>1000,37169=>1000,37170=>1000,37171=>1000,37172=>1000, + 37173=>1000,37174=>1000,37175=>1000,37176=>1000,37177=>1000,37178=>1000,37179=>1000,37180=>1000,37181=>1000,37182=>1000,37183=>1000,37184=>1000,37185=>1000,37186=>1000,37187=>1000,37188=>1000, + 37189=>1000,37190=>1000,37191=>1000,37192=>1000,37193=>1000,37194=>1000,37195=>1000,37196=>1000,37197=>1000,37198=>1000,37199=>1000,37200=>1000,37201=>1000,37202=>1000,37203=>1000,37204=>1000, + 37205=>1000,37206=>1000,37207=>1000,37208=>1000,37209=>1000,37210=>1000,37211=>1000,37212=>1000,37213=>1000,37214=>1000,37215=>1000,37216=>1000,37217=>1000,37218=>1000,37219=>1000,37220=>1000, + 37221=>1000,37222=>1000,37223=>1000,37224=>1000,37225=>1000,37226=>1000,37227=>1000,37228=>1000,37229=>1000,37230=>1000,37231=>1000,37232=>1000,37233=>1000,37234=>1000,37235=>1000,37236=>1000, + 37237=>1000,37238=>1000,37239=>1000,37240=>1000,37241=>1000,37242=>1000,37243=>1000,37244=>1000,37245=>1000,37246=>1000,37247=>1000,37248=>1000,37249=>1000,37250=>1000,37251=>1000,37252=>1000, + 37253=>1000,37254=>1000,37255=>1000,37256=>1000,37257=>1000,37258=>1000,37259=>1000,37260=>1000,37261=>1000,37262=>1000,37263=>1000,37264=>1000,37265=>1000,37266=>1000,37267=>1000,37268=>1000, + 37269=>1000,37270=>1000,37271=>1000,37272=>1000,37273=>1000,37274=>1000,37275=>1000,37276=>1000,37277=>1000,37278=>1000,37279=>1000,37280=>1000,37281=>1000,37282=>1000,37283=>1000,37284=>1000, + 37285=>1000,37286=>1000,37287=>1000,37288=>1000,37289=>1000,37290=>1000,37291=>1000,37292=>1000,37293=>1000,37294=>1000,37295=>1000,37296=>1000,37297=>1000,37298=>1000,37299=>1000,37300=>1000, + 37301=>1000,37302=>1000,37303=>1000,37304=>1000,37305=>1000,37306=>1000,37307=>1000,37308=>1000,37309=>1000,37310=>1000,37311=>1000,37312=>1000,37313=>1000,37314=>1000,37315=>1000,37316=>1000, + 37317=>1000,37318=>1000,37319=>1000,37320=>1000,37321=>1000,37322=>1000,37323=>1000,37324=>1000,37325=>1000,37326=>1000,37327=>1000,37328=>1000,37329=>1000,37330=>1000,37331=>1000,37332=>1000, + 37333=>1000,37334=>1000,37335=>1000,37336=>1000,37337=>1000,37338=>1000,37339=>1000,37340=>1000,37341=>1000,37342=>1000,37343=>1000,37344=>1000,37345=>1000,37346=>1000,37347=>1000,37348=>1000, + 37349=>1000,37350=>1000,37351=>1000,37352=>1000,37353=>1000,37354=>1000,37355=>1000,37356=>1000,37357=>1000,37358=>1000,37359=>1000,37360=>1000,37361=>1000,37362=>1000,37363=>1000,37364=>1000, + 37365=>1000,37366=>1000,37367=>1000,37368=>1000,37369=>1000,37370=>1000,37371=>1000,37372=>1000,37373=>1000,37374=>1000,37375=>1000,37376=>1000,37377=>1000,37378=>1000,37379=>1000,37380=>1000, + 37381=>1000,37382=>1000,37383=>1000,37384=>1000,37385=>1000,37386=>1000,37387=>1000,37388=>1000,37389=>1000,37390=>1000,37391=>1000,37392=>1000,37393=>1000,37394=>1000,37395=>1000,37396=>1000, + 37397=>1000,37398=>1000,37399=>1000,37400=>1000,37401=>1000,37402=>1000,37403=>1000,37404=>1000,37405=>1000,37406=>1000,37407=>1000,37408=>1000,37409=>1000,37410=>1000,37411=>1000,37412=>1000, + 37413=>1000,37414=>1000,37415=>1000,37416=>1000,37417=>1000,37418=>1000,37419=>1000,37420=>1000,37421=>1000,37422=>1000,37423=>1000,37424=>1000,37425=>1000,37426=>1000,37427=>1000,37428=>1000, + 37429=>1000,37430=>1000,37431=>1000,37432=>1000,37433=>1000,37434=>1000,37435=>1000,37436=>1000,37437=>1000,37438=>1000,37439=>1000,37440=>1000,37441=>1000,37442=>1000,37443=>1000,37444=>1000, + 37445=>1000,37446=>1000,37447=>1000,37448=>1000,37449=>1000,37450=>1000,37451=>1000,37452=>1000,37453=>1000,37454=>1000,37455=>1000,37456=>1000,37457=>1000,37458=>1000,37459=>1000,37460=>1000, + 37461=>1000,37462=>1000,37463=>1000,37464=>1000,37465=>1000,37466=>1000,37467=>1000,37468=>1000,37469=>1000,37470=>1000,37471=>1000,37472=>1000,37473=>1000,37474=>1000,37475=>1000,37476=>1000, + 37477=>1000,37478=>1000,37479=>1000,37480=>1000,37481=>1000,37482=>1000,37483=>1000,37484=>1000,37485=>1000,37486=>1000,37487=>1000,37488=>1000,37489=>1000,37490=>1000,37491=>1000,37492=>1000, + 37493=>1000,37494=>1000,37495=>1000,37496=>1000,37497=>1000,37498=>1000,37499=>1000,37500=>1000,37501=>1000,37502=>1000,37503=>1000,37504=>1000,37505=>1000,37506=>1000,37507=>1000,37508=>1000, + 37509=>1000,37510=>1000,37511=>1000,37512=>1000,37513=>1000,37514=>1000,37515=>1000,37516=>1000,37517=>1000,37518=>1000,37519=>1000,37520=>1000,37521=>1000,37522=>1000,37523=>1000,37524=>1000, + 37525=>1000,37526=>1000,37527=>1000,37528=>1000,37529=>1000,37530=>1000,37531=>1000,37532=>1000,37533=>1000,37534=>1000,37535=>1000,37536=>1000,37537=>1000,37538=>1000,37539=>1000,37540=>1000, + 37541=>1000,37542=>1000,37543=>1000,37544=>1000,37545=>1000,37546=>1000,37547=>1000,37548=>1000,37549=>1000,37550=>1000,37551=>1000,37552=>1000,37553=>1000,37554=>1000,37555=>1000,37556=>1000, + 37557=>1000,37558=>1000,37559=>1000,37560=>1000,37561=>1000,37562=>1000,37563=>1000,37564=>1000,37565=>1000,37566=>1000,37567=>1000,37568=>1000,37569=>1000,37570=>1000,37571=>1000,37572=>1000, + 37573=>1000,37574=>1000,37575=>1000,37576=>1000,37577=>1000,37578=>1000,37579=>1000,37580=>1000,37581=>1000,37582=>1000,37583=>1000,37584=>1000,37585=>1000,37586=>1000,37587=>1000,37588=>1000, + 37589=>1000,37590=>1000,37591=>1000,37592=>1000,37593=>1000,37594=>1000,37595=>1000,37596=>1000,37597=>1000,37598=>1000,37599=>1000,37600=>1000,37601=>1000,37602=>1000,37603=>1000,37604=>1000, + 37605=>1000,37606=>1000,37607=>1000,37608=>1000,37609=>1000,37610=>1000,37611=>1000,37612=>1000,37613=>1000,37614=>1000,37615=>1000,37616=>1000,37617=>1000,37618=>1000,37619=>1000,37620=>1000, + 37621=>1000,37622=>1000,37623=>1000,37624=>1000,37625=>1000,37626=>1000,37627=>1000,37628=>1000,37629=>1000,37630=>1000,37631=>1000,37632=>1000,37633=>1000,37634=>1000,37635=>1000,37636=>1000, + 37637=>1000,37638=>1000,37639=>1000,37640=>1000,37641=>1000,37642=>1000,37643=>1000,37644=>1000,37645=>1000,37646=>1000,37647=>1000,37648=>1000,37649=>1000,37650=>1000,37651=>1000,37652=>1000, + 37653=>1000,37654=>1000,37655=>1000,37656=>1000,37657=>1000,37658=>1000,37659=>1000,37660=>1000,37661=>1000,37662=>1000,37663=>1000,37664=>1000,37665=>1000,37666=>1000,37667=>1000,37668=>1000, + 37669=>1000,37670=>1000,37671=>1000,37672=>1000,37673=>1000,37674=>1000,37675=>1000,37676=>1000,37677=>1000,37678=>1000,37679=>1000,37680=>1000,37681=>1000,37682=>1000,37683=>1000,37684=>1000, + 37685=>1000,37686=>1000,37687=>1000,37688=>1000,37689=>1000,37690=>1000,37691=>1000,37692=>1000,37693=>1000,37694=>1000,37695=>1000,37696=>1000,37697=>1000,37698=>1000,37699=>1000,37700=>1000, + 37701=>1000,37702=>1000,37703=>1000,37704=>1000,37705=>1000,37706=>1000,37707=>1000,37708=>1000,37709=>1000,37710=>1000,37711=>1000,37712=>1000,37713=>1000,37714=>1000,37715=>1000,37716=>1000, + 37717=>1000,37718=>1000,37719=>1000,37720=>1000,37721=>1000,37722=>1000,37723=>1000,37724=>1000,37725=>1000,37726=>1000,37727=>1000,37728=>1000,37729=>1000,37730=>1000,37731=>1000,37732=>1000, + 37733=>1000,37734=>1000,37735=>1000,37736=>1000,37737=>1000,37738=>1000,37739=>1000,37740=>1000,37741=>1000,37742=>1000,37743=>1000,37744=>1000,37745=>1000,37746=>1000,37747=>1000,37748=>1000, + 37749=>1000,37750=>1000,37751=>1000,37752=>1000,37753=>1000,37754=>1000,37755=>1000,37756=>1000,37757=>1000,37758=>1000,37759=>1000,37760=>1000,37761=>1000,37762=>1000,37763=>1000,37764=>1000, + 37765=>1000,37766=>1000,37767=>1000,37768=>1000,37769=>1000,37770=>1000,37771=>1000,37772=>1000,37773=>1000,37774=>1000,37775=>1000,37776=>1000,37777=>1000,37778=>1000,37779=>1000,37780=>1000, + 37781=>1000,37782=>1000,37783=>1000,37784=>1000,37785=>1000,37786=>1000,37787=>1000,37788=>1000,37789=>1000,37790=>1000,37791=>1000,37792=>1000,37793=>1000,37794=>1000,37795=>1000,37796=>1000, + 37797=>1000,37798=>1000,37799=>1000,37800=>1000,37801=>1000,37802=>1000,37803=>1000,37804=>1000,37805=>1000,37806=>1000,37807=>1000,37808=>1000,37809=>1000,37810=>1000,37811=>1000,37812=>1000, + 37813=>1000,37814=>1000,37815=>1000,37816=>1000,37817=>1000,37818=>1000,37819=>1000,37820=>1000,37821=>1000,37822=>1000,37823=>1000,37824=>1000,37825=>1000,37826=>1000,37827=>1000,37828=>1000, + 37829=>1000,37830=>1000,37831=>1000,37832=>1000,37833=>1000,37834=>1000,37835=>1000,37836=>1000,37837=>1000,37838=>1000,37839=>1000,37840=>1000,37841=>1000,37842=>1000,37843=>1000,37844=>1000, + 37845=>1000,37846=>1000,37847=>1000,37848=>1000,37849=>1000,37850=>1000,37851=>1000,37852=>1000,37853=>1000,37854=>1000,37855=>1000,37856=>1000,37857=>1000,37858=>1000,37859=>1000,37860=>1000, + 37861=>1000,37862=>1000,37863=>1000,37864=>1000,37865=>1000,37866=>1000,37867=>1000,37868=>1000,37869=>1000,37870=>1000,37871=>1000,37872=>1000,37873=>1000,37874=>1000,37875=>1000,37876=>1000, + 37877=>1000,37878=>1000,37879=>1000,37880=>1000,37881=>1000,37882=>1000,37883=>1000,37884=>1000,37885=>1000,37886=>1000,37887=>1000,37888=>1000,37889=>1000,37890=>1000,37891=>1000,37892=>1000, + 37893=>1000,37894=>1000,37895=>1000,37896=>1000,37897=>1000,37898=>1000,37899=>1000,37900=>1000,37901=>1000,37902=>1000,37903=>1000,37904=>1000,37905=>1000,37906=>1000,37907=>1000,37908=>1000, + 37909=>1000,37910=>1000,37911=>1000,37912=>1000,37913=>1000,37914=>1000,37915=>1000,37916=>1000,37917=>1000,37918=>1000,37919=>1000,37920=>1000,37921=>1000,37922=>1000,37923=>1000,37924=>1000, + 37925=>1000,37926=>1000,37927=>998,37928=>1000,37929=>1000,37930=>1000,37931=>1000,37932=>1000,37933=>1000,37934=>1000,37935=>1000,37936=>1000,37937=>1000,37938=>1000,37939=>1000,37940=>1000, + 37941=>1000,37942=>1000,37943=>1000,37944=>1000,37945=>1000,37946=>1000,37947=>1000,37948=>1000,37949=>1000,37950=>1000,37951=>1000,37952=>1000,37953=>1000,37954=>1000,37955=>1000,37956=>1000, + 37957=>1000,37958=>1000,37959=>1000,37960=>1000,37961=>1000,37962=>1000,37963=>1000,37964=>1000,37965=>1000,37966=>1000,37967=>1000,37968=>1000,37969=>1000,37970=>1000,37971=>1000,37972=>1000, + 37973=>1000,37974=>1000,37975=>1000,37976=>1000,37977=>1000,37978=>1000,37979=>1000,37980=>1000,37981=>1000,37982=>1000,37983=>1000,37984=>1000,37985=>1000,37986=>1000,37987=>1000,37988=>1000, + 37989=>1000,37990=>1000,37991=>1000,37992=>1000,37993=>1000,37994=>1000,37995=>1000,37996=>1000,37997=>1000,37998=>1000,37999=>1000,38000=>1000,38001=>1000,38002=>1000,38003=>1000,38004=>1000, + 38005=>1000,38006=>1000,38007=>1000,38008=>1000,38009=>1000,38010=>1000,38011=>1000,38012=>1000,38013=>1000,38014=>1000,38015=>1000,38016=>1000,38017=>1000,38018=>1000,38019=>1000,38020=>1000, + 38021=>1000,38022=>1000,38023=>1000,38024=>1000,38025=>1000,38026=>1000,38027=>1000,38028=>1000,38029=>1000,38030=>1000,38031=>1000,38032=>1000,38033=>1000,38034=>1000,38035=>1000,38036=>1000, + 38037=>1000,38038=>1000,38039=>1000,38040=>1000,38041=>1000,38042=>1000,38043=>1000,38044=>1000,38045=>1000,38046=>1000,38047=>1000,38048=>1000,38049=>1000,38050=>1000,38051=>1000,38052=>1000, + 38053=>1000,38054=>1000,38055=>1000,38056=>1000,38057=>1000,38058=>1000,38059=>1000,38060=>1000,38061=>1000,38062=>1000,38063=>1000,38064=>1000,38065=>1000,38066=>1000,38067=>1000,38068=>1000, + 38069=>1000,38070=>1000,38071=>1000,38072=>1000,38073=>1000,38074=>1000,38075=>1000,38076=>1000,38077=>1000,38078=>1000,38079=>1000,38080=>1000,38081=>1000,38082=>1000,38083=>1000,38084=>1000, + 38085=>1000,38086=>1000,38087=>1000,38088=>1000,38089=>1000,38090=>1000,38091=>1000,38092=>1000,38093=>1000,38094=>1000,38095=>1000,38096=>1000,38097=>1000,38098=>1000,38099=>1000,38100=>1000, + 38101=>1000,38102=>1000,38103=>1000,38104=>1000,38105=>1000,38106=>1000,38107=>1000,38108=>1000,38109=>1000,38110=>1000,38111=>1000,38112=>1000,38113=>1000,38114=>1000,38115=>1000,38116=>1000, + 38117=>1000,38118=>1000,38119=>1000,38120=>1000,38121=>1000,38122=>1000,38123=>1000,38124=>1000,38125=>1000,38126=>1000,38127=>1000,38128=>1000,38129=>1000,38130=>1000,38131=>1000,38132=>1000, + 38133=>1000,38134=>1000,38135=>1000,38136=>1000,38137=>1000,38138=>1000,38139=>1000,38140=>1000,38141=>1000,38142=>1000,38143=>1000,38144=>1000,38145=>1000,38146=>1000,38147=>1000,38148=>1000, + 38149=>1000,38150=>1000,38151=>1000,38152=>1000,38153=>1000,38154=>1000,38155=>1000,38156=>1000,38157=>1000,38158=>1000,38159=>1000,38160=>1000,38161=>1000,38162=>1000,38163=>1000,38164=>1000, + 38165=>1000,38166=>1000,38167=>1000,38168=>1000,38169=>1000,38170=>1000,38171=>1000,38172=>1000,38173=>1000,38174=>1000,38175=>1000,38176=>1000,38177=>1000,38178=>1000,38179=>1000,38180=>1000, + 38181=>1000,38182=>1000,38183=>1000,38184=>1000,38185=>1000,38186=>1000,38187=>1000,38188=>1000,38189=>1000,38190=>1000,38191=>1000,38192=>1000,38193=>1000,38194=>1000,38195=>1000,38196=>1000, + 38197=>1000,38198=>1000,38199=>1000,38200=>1000,38201=>1000,38202=>1000,38203=>1000,38204=>1000,38205=>1000,38206=>1000,38207=>1000,38208=>1000,38209=>1000,38210=>1000,38211=>1000,38212=>1000, + 38213=>1000,38214=>1000,38215=>1000,38216=>1000,38217=>1000,38218=>1000,38219=>1000,38220=>1000,38221=>1000,38222=>1000,38223=>1000,38224=>1000,38225=>1000,38226=>1000,38227=>1000,38228=>1000, + 38229=>1000,38230=>1000,38231=>1000,38232=>1000,38233=>1000,38234=>1000,38235=>1000,38236=>1000,38237=>1000,38238=>1000,38239=>1000,38240=>1000,38241=>1000,38242=>1000,38243=>1000,38244=>1000, + 38245=>1000,38246=>1000,38247=>1000,38248=>1000,38249=>1000,38250=>1000,38251=>1000,38252=>1000,38253=>1000,38254=>1000,38255=>1000,38256=>1000,38257=>1000,38258=>1000,38259=>1000,38260=>1000, + 38261=>1000,38262=>1000,38263=>1000,38264=>1000,38265=>1000,38266=>1000,38267=>1000,38268=>1000,38269=>1000,38270=>1000,38271=>1000,38272=>1000,38273=>1000,38274=>1000,38275=>1000,38276=>1000, + 38277=>1000,38278=>1000,38279=>1000,38280=>1000,38281=>1000,38282=>1000,38283=>1000,38284=>1000,38285=>1000,38286=>1000,38287=>1000,38288=>1000,38289=>1000,38290=>1000,38291=>1000,38292=>1000, + 38293=>1000,38294=>1000,38295=>1000,38296=>1000,38297=>1000,38298=>1000,38299=>1000,38300=>1000,38301=>1000,38302=>1000,38303=>1000,38304=>1000,38305=>1000,38306=>1000,38307=>1000,38308=>1000, + 38309=>1000,38310=>1000,38311=>1000,38312=>1000,38313=>1000,38314=>1000,38315=>1000,38316=>1000,38317=>1000,38318=>1000,38319=>1000,38320=>1000,38321=>1000,38322=>1000,38323=>1000,38324=>1000, + 38325=>1000,38326=>1000,38327=>1000,38328=>1000,38329=>1000,38330=>1000,38331=>1000,38332=>1000,38333=>1000,38334=>1000,38335=>1000,38336=>1000,38337=>1000,38338=>1000,38339=>1000,38340=>1000, + 38341=>1000,38342=>1000,38343=>1000,38344=>1000,38345=>1000,38346=>1000,38347=>1000,38348=>1000,38349=>1000,38350=>1000,38351=>1000,38352=>1000,38353=>1000,38354=>1000,38355=>1000,38356=>1000, + 38357=>1000,38358=>1000,38359=>1000,38360=>1000,38361=>1000,38362=>1000,38363=>1000,38364=>1000,38365=>1000,38366=>1000,38367=>1000,38368=>1000,38369=>1000,38370=>1000,38371=>1000,38372=>1000, + 38373=>1000,38374=>1000,38375=>1000,38376=>1000,38377=>1000,38378=>1000,38379=>1000,38380=>1000,38381=>1000,38382=>1000,38383=>1000,38384=>1000,38385=>1000,38386=>1000,38387=>1000,38388=>1000, + 38389=>1000,38390=>1000,38391=>1000,38392=>1000,38393=>1000,38394=>1000,38395=>1000,38396=>1000,38397=>1000,38398=>1000,38399=>1000,38400=>1000,38401=>1000,38402=>1000,38403=>1000,38404=>1000, + 38405=>1000,38406=>1000,38407=>1000,38408=>1000,38409=>1000,38410=>1000,38411=>1000,38412=>1000,38413=>1000,38414=>1000,38415=>1000,38416=>1000,38417=>1000,38418=>1000,38419=>1000,38420=>1000, + 38421=>1000,38422=>1000,38423=>1000,38424=>1000,38425=>1000,38426=>1000,38427=>1000,38428=>1000,38429=>1000,38430=>1000,38431=>1000,38432=>1000,38433=>1000,38434=>1000,38435=>1000,38436=>1000, + 38437=>1000,38438=>1000,38439=>1000,38440=>1000,38441=>1000,38442=>1000,38443=>1000,38444=>1000,38445=>1000,38446=>1000,38447=>1000,38448=>1000,38449=>1000,38450=>1000,38451=>1000,38452=>1000, + 38453=>1000,38454=>1000,38455=>1000,38456=>1000,38457=>1000,38458=>1000,38459=>1000,38460=>1000,38461=>1000,38462=>1000,38463=>1000,38464=>1000,38465=>1000,38466=>1000,38467=>1000,38468=>1000, + 38469=>1000,38470=>1000,38471=>1000,38472=>1000,38473=>1000,38474=>1000,38475=>1000,38476=>1000,38477=>1000,38478=>1000,38479=>1000,38480=>1000,38481=>1000,38482=>1000,38483=>1000,38484=>1000, + 38485=>1000,38486=>1000,38487=>1000,38488=>1000,38489=>1000,38490=>1000,38491=>1000,38492=>1000,38493=>1000,38494=>1000,38495=>1000,38496=>1000,38497=>1000,38498=>1000,38499=>1000,38500=>1000, + 38501=>1000,38502=>1000,38503=>1000,38504=>1000,38505=>1000,38506=>1000,38507=>1000,38508=>1000,38509=>1000,38510=>1000,38511=>1000,38512=>1000,38513=>1000,38514=>1000,38515=>1000,38516=>1000, + 38517=>1000,38518=>1000,38519=>1000,38520=>1000,38521=>1000,38522=>1000,38523=>1000,38524=>1000,38525=>1000,38526=>1000,38527=>1000,38528=>1000,38529=>1000,38530=>1000,38531=>1000,38532=>1000, + 38533=>1000,38534=>1000,38535=>1000,38536=>1000,38537=>1000,38538=>1000,38539=>1000,38540=>1000,38541=>1000,38542=>1000,38543=>1000,38544=>1000,38545=>1000,38546=>1000,38547=>1000,38548=>1000, + 38549=>1000,38550=>1000,38551=>1000,38552=>1000,38553=>1000,38554=>1000,38555=>1000,38556=>1000,38557=>1000,38558=>1000,38559=>1000,38560=>1000,38561=>1000,38562=>1000,38563=>1000,38564=>1000, + 38565=>1000,38566=>1000,38567=>1000,38568=>1000,38569=>1000,38570=>1000,38571=>1000,38572=>1000,38573=>1000,38574=>1000,38575=>1000,38576=>1000,38577=>1000,38578=>1000,38579=>1000,38580=>1000, + 38581=>1000,38582=>1000,38583=>1000,38584=>1000,38585=>1000,38586=>1000,38587=>1000,38588=>1000,38589=>1000,38590=>1000,38591=>1000,38592=>1000,38593=>1000,38594=>1000,38595=>1000,38596=>1000, + 38597=>1000,38598=>1000,38599=>1000,38600=>1000,38601=>1000,38602=>1000,38603=>1000,38604=>1000,38605=>1000,38606=>1000,38607=>1000,38608=>1000,38609=>1000,38610=>1000,38611=>1000,38612=>1000, + 38613=>1000,38614=>1000,38615=>1000,38616=>1000,38617=>1000,38618=>1000,38619=>1000,38620=>1000,38621=>1000,38622=>1000,38623=>1000,38624=>1000,38625=>1000,38626=>1000,38627=>1000,38628=>1000, + 38629=>1000,38630=>1000,38631=>1000,38632=>1000,38633=>1000,38634=>1000,38635=>1000,38636=>1000,38637=>1000,38638=>1000,38639=>1000,38640=>1000,38641=>1000,38642=>1000,38643=>1000,38644=>1000, + 38645=>1000,38646=>1000,38647=>1000,38648=>1000,38649=>1000,38650=>1000,38651=>1000,38652=>1000,38653=>1000,38654=>1000,38655=>1000,38656=>1000,38657=>1000,38658=>1000,38659=>1000,38660=>1000, + 38661=>1000,38662=>1000,38663=>1000,38664=>1000,38665=>1000,38666=>1000,38667=>1000,38668=>1000,38669=>1000,38670=>1000,38671=>1000,38672=>1000,38673=>1000,38674=>1000,38675=>1000,38676=>1000, + 38677=>1000,38678=>1000,38679=>1000,38680=>1000,38681=>1000,38682=>1000,38683=>1000,38684=>1000,38685=>1000,38686=>1000,38687=>1000,38688=>1000,38689=>1000,38690=>1000,38691=>1000,38692=>1000, + 38693=>1000,38694=>1000,38695=>1000,38696=>1000,38697=>1000,38698=>1000,38699=>1000,38700=>1000,38701=>1000,38702=>1000,38703=>1000,38704=>1000,38705=>1000,38706=>1000,38707=>1000,38708=>1000, + 38709=>1000,38710=>1000,38711=>1000,38712=>1000,38713=>1000,38714=>1000,38715=>1000,38716=>1000,38717=>1000,38718=>1000,38719=>1000,38720=>1000,38721=>1000,38722=>1000,38723=>1000,38724=>1000, + 38725=>1000,38726=>1000,38727=>1000,38728=>1000,38729=>1000,38730=>1000,38731=>1000,38732=>1000,38733=>1000,38734=>1000,38735=>1000,38736=>1000,38737=>1000,38738=>1000,38739=>1000,38740=>1000, + 38741=>1000,38742=>1000,38743=>1000,38744=>1000,38745=>1000,38746=>1000,38747=>1000,38748=>1000,38749=>1000,38750=>1000,38751=>1000,38752=>1000,38753=>1000,38754=>1000,38755=>1000,38756=>1000, + 38757=>1000,38758=>1000,38759=>1000,38760=>1000,38761=>1000,38762=>1000,38763=>1000,38764=>1000,38765=>1000,38766=>1000,38767=>1000,38768=>1000,38769=>1000,38770=>1000,38771=>1000,38772=>1000, + 38773=>1000,38774=>1000,38775=>1000,38776=>1000,38777=>1000,38778=>1000,38779=>1000,38780=>1000,38781=>1000,38782=>1000,38783=>1000,38784=>1000,38785=>1000,38786=>1000,38787=>1000,38788=>1000, + 38789=>1000,38790=>1000,38791=>1000,38792=>1000,38793=>1000,38794=>1000,38795=>1000,38796=>1000,38797=>1000,38798=>1000,38799=>1000,38800=>1000,38801=>1000,38802=>1000,38803=>1000,38804=>1000, + 38805=>1000,38806=>1000,38807=>1000,38808=>1000,38809=>1000,38810=>1000,38811=>1000,38812=>1000,38813=>1000,38814=>1000,38815=>1000,38816=>1000,38817=>1000,38818=>1000,38819=>1000,38820=>1000, + 38821=>1000,38822=>1000,38823=>1000,38824=>1000,38825=>1000,38826=>1000,38827=>1000,38828=>1000,38829=>1000,38830=>1000,38831=>1000,38832=>1000,38833=>1000,38834=>1000,38835=>1000,38836=>1000, + 38837=>1000,38838=>1000,38839=>1000,38840=>1000,38841=>1000,38842=>1000,38843=>1000,38844=>1000,38845=>1000,38846=>1000,38847=>1000,38848=>1000,38849=>1000,38850=>1000,38851=>1000,38852=>1000, + 38853=>1000,38854=>1000,38855=>1000,38856=>1000,38857=>1000,38858=>1000,38859=>1000,38860=>1000,38861=>1000,38862=>1000,38863=>1000,38864=>1000,38865=>1000,38866=>1000,38867=>1000,38868=>1000, + 38869=>1000,38870=>1000,38871=>1000,38872=>1000,38873=>1000,38874=>1000,38875=>1000,38876=>1000,38877=>1000,38878=>1000,38879=>1000,38880=>1000,38881=>1000,38882=>1000,38883=>1000,38884=>1000, + 38885=>1000,38886=>1000,38887=>1000,38888=>1000,38889=>1000,38890=>1000,38891=>1000,38892=>1000,38893=>1000,38894=>1000,38895=>1000,38896=>1000,38897=>1000,38898=>1000,38899=>1000,38900=>1000, + 38901=>1000,38902=>1000,38903=>1000,38904=>1000,38905=>1000,38906=>1000,38907=>1000,38908=>1000,38909=>1000,38910=>1000,38911=>1000,38912=>1000,38913=>1000,38914=>1000,38915=>1000,38916=>1000, + 38917=>1000,38918=>1000,38919=>1000,38920=>1000,38921=>1000,38922=>1000,38923=>1000,38924=>1000,38925=>1000,38926=>1000,38927=>1000,38928=>1000,38929=>1000,38930=>1000,38931=>1000,38932=>1000, + 38933=>1000,38934=>1000,38935=>1000,38936=>1000,38937=>1000,38938=>1000,38939=>1000,38940=>1000,38941=>1000,38942=>1000,38943=>1000,38944=>1000,38945=>1000,38946=>1000,38947=>1000,38948=>1000, + 38949=>1000,38950=>1000,38951=>1000,38952=>1000,38953=>1000,38954=>1000,38955=>1000,38956=>1000,38957=>1000,38958=>1000,38959=>1000,38960=>1000,38961=>1000,38962=>1000,38963=>1000,38964=>1000, + 38965=>1000,38966=>1000,38967=>1000,38968=>1000,38969=>1000,38970=>1000,38971=>1000,38972=>1000,38973=>1000,38974=>1000,38975=>1000,38976=>1000,38977=>1000,38978=>1000,38979=>1000,38980=>1000, + 38981=>1000,38982=>1000,38983=>1000,38984=>1000,38985=>1000,38986=>1000,38987=>1000,38988=>1000,38989=>1000,38990=>1000,38991=>1000,38992=>1000,38993=>1000,38994=>1000,38995=>1000,38996=>1000, + 38997=>1000,38998=>1000,38999=>1000,39000=>1000,39001=>1000,39002=>1000,39003=>1000,39004=>1000,39005=>1000,39006=>1000,39007=>1000,39008=>1000,39009=>1000,39010=>1000,39011=>1000,39012=>1000, + 39013=>1000,39014=>1000,39015=>1000,39016=>1000,39017=>1000,39018=>1000,39019=>1000,39020=>1000,39021=>1000,39022=>1000,39023=>1000,39024=>1000,39025=>1000,39026=>1000,39027=>1000,39028=>1000, + 39029=>1000,39030=>1000,39031=>1000,39032=>1000,39033=>1000,39034=>1000,39035=>1000,39036=>1000,39037=>1000,39038=>1000,39039=>1000,39040=>1000,39041=>1000,39042=>1000,39043=>1000,39044=>1000, + 39045=>1000,39046=>1000,39047=>1000,39048=>1000,39049=>1000,39050=>1000,39051=>1000,39052=>1000,39053=>1000,39054=>1000,39055=>1000,39056=>1000,39057=>1000,39058=>1000,39059=>1000,39060=>1000, + 39061=>1000,39062=>1000,39063=>1000,39064=>1000,39065=>1000,39066=>1000,39067=>1000,39068=>1000,39069=>1000,39070=>1000,39071=>1000,39072=>1000,39073=>1000,39074=>1000,39075=>1000,39076=>1000, + 39077=>1000,39078=>1000,39079=>1000,39080=>1000,39081=>1000,39082=>1000,39083=>1000,39084=>1000,39085=>1000,39086=>1000,39087=>1000,39088=>1000,39089=>1000,39090=>1000,39091=>1000,39092=>1000, + 39093=>1000,39094=>1000,39095=>1000,39096=>1000,39097=>1000,39098=>1000,39099=>1000,39100=>1000,39101=>1000,39102=>1000,39103=>1000,39104=>1000,39105=>1000,39106=>1000,39107=>1000,39108=>1000, + 39109=>1000,39110=>1000,39111=>1000,39112=>1000,39113=>1000,39114=>1000,39115=>1000,39116=>1000,39117=>1000,39118=>1000,39119=>1000,39120=>1000,39121=>1000,39122=>1000,39123=>1000,39124=>1000, + 39125=>1000,39126=>1000,39127=>1000,39128=>1000,39129=>1000,39130=>1000,39131=>1000,39132=>1000,39133=>1000,39134=>1000,39135=>1000,39136=>1000,39137=>1000,39138=>1000,39139=>1000,39140=>1000, + 39141=>1000,39142=>1000,39143=>1000,39144=>1000,39145=>1000,39146=>1000,39147=>1000,39148=>1000,39149=>1000,39150=>1000,39151=>1000,39152=>1000,39153=>1000,39154=>1000,39155=>1000,39156=>1000, + 39157=>1000,39158=>1000,39159=>1000,39160=>1000,39161=>1000,39162=>1000,39163=>1000,39164=>1000,39165=>1000,39166=>1000,39167=>1000,39168=>1000,39169=>1000,39170=>1000,39171=>1000,39172=>1000, + 39173=>1000,39174=>1000,39175=>1000,39176=>1000,39177=>1000,39178=>1000,39179=>1000,39180=>1000,39181=>1000,39182=>1000,39183=>1000,39184=>1000,39185=>1000,39186=>1000,39187=>1000,39188=>1000, + 39189=>1000,39190=>1000,39191=>1000,39192=>1000,39193=>1000,39194=>1000,39195=>1000,39196=>1000,39197=>1000,39198=>1000,39199=>1000,39200=>1000,39201=>1000,39202=>1000,39203=>1000,39204=>1000, + 39205=>1000,39206=>1000,39207=>1000,39208=>1000,39209=>1000,39210=>1000,39211=>1000,39212=>1000,39213=>1000,39214=>1000,39215=>1000,39216=>1000,39217=>1000,39218=>1000,39219=>1000,39220=>1000, + 39221=>1000,39222=>1000,39223=>1000,39224=>1000,39225=>1000,39226=>1000,39227=>1000,39228=>1000,39229=>1000,39230=>1000,39231=>1000,39232=>1000,39233=>1000,39234=>1000,39235=>1000,39236=>1000, + 39237=>1000,39238=>1000,39239=>1000,39240=>1000,39241=>1000,39242=>1000,39243=>1000,39244=>1000,39245=>1000,39246=>1000,39247=>1000,39248=>1000,39249=>1000,39250=>1000,39251=>1000,39252=>1000, + 39253=>1000,39254=>1000,39255=>1000,39256=>1000,39257=>1000,39258=>1000,39259=>1000,39260=>1000,39261=>1000,39262=>1000,39263=>1000,39264=>1000,39265=>1000,39266=>1000,39267=>1000,39268=>1000, + 39269=>1000,39270=>1000,39271=>1000,39272=>1000,39273=>1000,39274=>1000,39275=>1000,39276=>1000,39277=>1000,39278=>1000,39279=>1000,39280=>1000,39281=>1000,39282=>1000,39283=>1000,39284=>1000, + 39285=>1000,39286=>1000,39287=>1000,39288=>1000,39289=>1000,39290=>1000,39291=>1000,39292=>1000,39293=>1000,39294=>1000,39295=>1000,39296=>1000,39297=>1000,39298=>1000,39299=>1000,39300=>1000, + 39301=>1000,39302=>1000,39303=>1000,39304=>1000,39305=>1000,39306=>1000,39307=>1000,39308=>1000,39309=>1000,39310=>1000,39311=>1000,39312=>1000,39313=>1000,39314=>1000,39315=>1000,39316=>1000, + 39317=>1000,39318=>1000,39319=>1000,39320=>1000,39321=>1000,39322=>1000,39323=>1000,39324=>1000,39325=>1000,39326=>1000,39327=>1000,39328=>1000,39329=>1000,39330=>1000,39331=>1000,39332=>1000, + 39333=>1000,39334=>1000,39335=>1000,39336=>1000,39337=>1000,39338=>1000,39339=>1000,39340=>1000,39341=>1000,39342=>1000,39343=>1000,39344=>1000,39345=>1000,39346=>1000,39347=>1000,39348=>1000, + 39349=>1000,39350=>1000,39351=>1000,39352=>1000,39353=>1000,39354=>1000,39355=>1000,39356=>1000,39357=>1000,39358=>1000,39359=>1000,39360=>1000,39361=>1000,39362=>1000,39363=>1000,39364=>1000, + 39365=>1000,39366=>1000,39367=>1000,39368=>1000,39369=>1000,39370=>1000,39371=>1000,39372=>1000,39373=>1000,39374=>1000,39375=>1000,39376=>1000,39377=>1000,39378=>1000,39379=>1000,39380=>1000, + 39381=>1000,39382=>1000,39383=>1000,39384=>1000,39385=>1000,39386=>1000,39387=>1000,39388=>1000,39389=>1000,39390=>1000,39391=>1000,39392=>1000,39393=>1000,39394=>1000,39395=>1000,39396=>1000, + 39397=>1000,39398=>1000,39399=>1000,39400=>1000,39401=>1000,39402=>1000,39403=>1000,39404=>1000,39405=>1000,39406=>1000,39407=>1000,39408=>1000,39409=>1000,39410=>1000,39411=>1000,39412=>1000, + 39413=>1000,39414=>1000,39415=>1000,39416=>1000,39417=>1000,39418=>1000,39419=>1000,39420=>1000,39421=>1000,39422=>1000,39423=>1000,39424=>1000,39425=>1000,39426=>1000,39427=>1000,39428=>1000, + 39429=>1000,39430=>1000,39431=>1000,39432=>1000,39433=>1000,39434=>1000,39435=>1000,39436=>1000,39437=>1000,39438=>1000,39439=>1000,39440=>1000,39441=>1000,39442=>1000,39443=>1000,39444=>1000, + 39445=>1000,39446=>1000,39447=>1000,39448=>1000,39449=>1000,39450=>1000,39451=>1000,39452=>1000,39453=>1000,39454=>1000,39455=>1000,39456=>1000,39457=>1000,39458=>1000,39459=>1000,39460=>1000, + 39461=>1000,39462=>1000,39463=>1000,39464=>1000,39465=>1000,39466=>1000,39467=>1000,39468=>1000,39469=>1000,39470=>1000,39471=>1000,39472=>1000,39473=>1000,39474=>1000,39475=>1000,39476=>1000, + 39477=>1000,39478=>1000,39479=>1000,39480=>1000,39481=>1000,39482=>1000,39483=>1000,39484=>1000,39485=>1000,39486=>1000,39487=>1000,39488=>1000,39489=>1000,39490=>1000,39491=>1000,39492=>1000, + 39493=>1000,39494=>1000,39495=>1000,39496=>1000,39497=>1000,39498=>1000,39499=>1000,39500=>1000,39501=>1000,39502=>1000,39503=>1000,39504=>1000,39505=>1000,39506=>1000,39507=>1000,39508=>1000, + 39509=>1000,39510=>1000,39511=>1000,39512=>1000,39513=>1000,39514=>1000,39515=>1000,39516=>1000,39517=>1000,39518=>1000,39519=>1000,39520=>1000,39521=>1000,39522=>1000,39523=>1000,39524=>1000, + 39525=>1000,39526=>1000,39527=>1000,39528=>1000,39529=>1000,39530=>1000,39531=>1000,39532=>1000,39533=>1000,39534=>1000,39535=>1000,39536=>1000,39537=>1000,39538=>1000,39539=>1000,39540=>1000, + 39541=>1000,39542=>1000,39543=>1000,39544=>1000,39545=>1000,39546=>1000,39547=>1000,39548=>1000,39549=>1000,39550=>1000,39551=>1000,39552=>1000,39553=>1000,39554=>1000,39555=>1000,39556=>1000, + 39557=>1000,39558=>1000,39559=>1000,39560=>1000,39561=>1000,39562=>1000,39563=>1000,39564=>1000,39565=>1000,39566=>1000,39567=>1000,39568=>1000,39569=>1000,39570=>1000,39571=>1000,39572=>1000, + 39573=>1000,39574=>1000,39575=>1000,39576=>1000,39577=>1000,39578=>1000,39579=>1000,39580=>1000,39581=>1000,39582=>1000,39583=>1000,39584=>1000,39585=>1000,39586=>1000,39587=>1000,39588=>1000, + 39589=>1000,39590=>1000,39591=>1000,39592=>1000,39593=>1000,39594=>1000,39595=>1000,39596=>1000,39597=>1000,39598=>1000,39599=>1000,39600=>1000,39601=>1000,39602=>1000,39603=>1000,39604=>1000, + 39605=>1000,39606=>1000,39607=>1000,39608=>1000,39609=>1000,39610=>1000,39611=>1000,39612=>1000,39613=>1000,39614=>1000,39615=>1000,39616=>1000,39617=>1000,39618=>1000,39619=>1000,39620=>1000, + 39621=>1000,39622=>1000,39623=>1000,39624=>1000,39625=>1000,39626=>1000,39627=>1000,39628=>1000,39629=>1000,39630=>1000,39631=>1000,39632=>1000,39633=>1000,39634=>1000,39635=>1000,39636=>1000, + 39637=>1000,39638=>1000,39639=>1000,39640=>1000,39641=>1000,39642=>1000,39643=>1000,39644=>1000,39645=>1000,39646=>1000,39647=>1000,39648=>1000,39649=>1000,39650=>1000,39651=>1000,39652=>1000, + 39653=>1000,39654=>1000,39655=>1000,39656=>1000,39657=>1000,39658=>1000,39659=>1000,39660=>1000,39661=>1000,39662=>1000,39663=>1000,39664=>1000,39665=>1000,39666=>1000,39667=>1000,39668=>1000, + 39669=>1000,39670=>1000,39671=>1000,39672=>1000,39673=>1000,39674=>1000,39675=>1000,39676=>1000,39677=>1000,39678=>1000,39679=>1000,39680=>1000,39681=>1000,39682=>1000,39683=>1000,39684=>1000, + 39685=>1000,39686=>1000,39687=>1000,39688=>1000,39689=>1000,39690=>1000,39691=>1000,39692=>1000,39693=>1000,39694=>1000,39695=>1000,39696=>1000,39697=>1000,39698=>1000,39699=>1000,39700=>1000, + 39701=>1000,39702=>1000,39703=>1000,39704=>1000,39705=>1000,39706=>1000,39707=>1000,39708=>1000,39709=>1000,39710=>1000,39711=>1000,39712=>1000,39713=>1000,39714=>1000,39715=>1000,39716=>1000, + 39717=>1000,39718=>1000,39719=>1000,39720=>1000,39721=>1000,39722=>1000,39723=>1000,39724=>1000,39725=>1000,39726=>1000,39727=>1000,39728=>1000,39729=>1000,39730=>1000,39731=>1000,39732=>1000, + 39733=>1000,39734=>1000,39735=>1000,39736=>1000,39737=>1000,39738=>1000,39739=>1000,39740=>1000,39741=>1000,39742=>1000,39743=>1000,39744=>1000,39745=>1000,39746=>1000,39747=>1000,39748=>1000, + 39749=>1000,39750=>1000,39751=>1000,39752=>1000,39753=>1000,39754=>1000,39755=>1000,39756=>1000,39757=>1000,39758=>1000,39759=>1000,39760=>1000,39761=>1000,39762=>1000,39763=>1000,39764=>1000, + 39765=>1000,39766=>1000,39767=>1000,39768=>1000,39769=>1000,39770=>1000,39771=>1000,39772=>1000,39773=>1000,39774=>1000,39775=>1000,39776=>1000,39777=>1000,39778=>1000,39779=>1000,39780=>1000, + 39781=>1000,39782=>1000,39783=>1000,39784=>1000,39785=>1000,39786=>1000,39787=>1000,39788=>1000,39789=>1000,39790=>1000,39791=>1000,39792=>1000,39793=>1000,39794=>1000,39795=>1000,39796=>1000, + 39797=>1000,39798=>1000,39799=>1000,39800=>1000,39801=>1000,39802=>1000,39803=>1000,39804=>1000,39805=>1000,39806=>1000,39807=>1000,39808=>1000,39809=>1000,39810=>1000,39811=>1000,39812=>1000, + 39813=>1000,39814=>1000,39815=>1000,39816=>1000,39817=>1000,39818=>1000,39819=>1000,39820=>1000,39821=>1000,39822=>1000,39823=>1000,39824=>1000,39825=>1000,39826=>1000,39827=>1000,39828=>1000, + 39829=>1000,39830=>1000,39831=>1000,39832=>1000,39833=>1000,39834=>1000,39835=>1000,39836=>1000,39837=>1000,39838=>1000,39839=>1000,39840=>1000,39841=>1000,39842=>1000,39843=>1000,39844=>1000, + 39845=>1000,39846=>1000,39847=>1000,39848=>1000,39849=>1000,39850=>1000,39851=>1000,39852=>1000,39853=>1000,39854=>1000,39855=>1000,39856=>1000,39857=>1000,39858=>1000,39859=>1000,39860=>1000, + 39861=>1000,39862=>1000,39863=>1000,39864=>1000,39865=>1000,39866=>1000,39867=>1000,39868=>1000,39869=>1000,39870=>1000,39871=>1000,39872=>1000,39873=>1000,39874=>1000,39875=>1000,39876=>1000, + 39877=>1000,39878=>1000,39879=>1000,39880=>1000,39881=>1000,39882=>1000,39883=>1000,39884=>1000,39885=>1000,39886=>1000,39887=>1000,39888=>1000,39889=>1000,39890=>1000,39891=>1000,39892=>1000, + 39893=>1000,39894=>1000,39895=>1000,39896=>1000,39897=>1000,39898=>1000,39899=>1000,39900=>1000,39901=>1000,39902=>1000,39903=>1000,39904=>1000,39905=>1000,39906=>1000,39907=>1000,39908=>1000, + 39909=>1000,39910=>1000,39911=>1000,39912=>1000,39913=>1000,39914=>1000,39915=>1000,39916=>1000,39917=>1000,39918=>1000,39919=>1000,39920=>1000,39921=>1000,39922=>1000,39923=>1000,39924=>1000, + 39925=>1000,39926=>1000,39927=>1000,39928=>1000,39929=>1000,39930=>1000,39931=>1000,39932=>1000,39933=>1000,39934=>1000,39935=>1000,39936=>1000,39937=>1000,39938=>1000,39939=>1000,39940=>1000, + 39941=>1000,39942=>1000,39943=>1000,39944=>1000,39945=>1000,39946=>1000,39947=>1000,39948=>1000,39949=>1000,39950=>1000,39951=>1000,39952=>1000,39953=>1000,39954=>1000,39955=>1000,39956=>1000, + 39957=>1000,39958=>1000,39959=>1000,39960=>1000,39961=>1000,39962=>1000,39963=>1000,39964=>1000,39965=>1000,39966=>1000,39967=>1000,39968=>1000,39969=>1000,39970=>1000,39971=>1000,39972=>1000, + 39973=>1000,39974=>1000,39975=>1000,39976=>1000,39977=>1000,39978=>1000,39979=>1000,39980=>1000,39981=>1000,39982=>1000,39983=>1000,39984=>1000,39985=>1000,39986=>1000,39987=>1000,39988=>1000, + 39989=>1000,39990=>1000,39991=>1000,39992=>1000,39993=>1000,39994=>1000,39995=>1000,39996=>1000,39997=>1000,39998=>1000,39999=>1000,40000=>1000,40001=>1000,40002=>1000,40003=>1000,40004=>1000, + 40005=>1000,40006=>1000,40007=>1000,40008=>1000,40009=>1000,40010=>1000,40011=>1000,40012=>1000,40013=>1000,40014=>1000,40015=>1000,40016=>1000,40017=>1000,40018=>1000,40019=>1000,40020=>1000, + 40021=>1000,40022=>1000,40023=>1000,40024=>1000,40025=>1000,40026=>1000,40027=>1000,40028=>1000,40029=>1000,40030=>1000,40031=>1000,40032=>1000,40033=>1000,40034=>1000,40035=>1000,40036=>1000, + 40037=>1000,40038=>1000,40039=>1000,40040=>1000,40041=>1000,40042=>1000,40043=>1000,40044=>1000,40045=>1000,40046=>1000,40047=>1000,40048=>1000,40049=>1000,40050=>1000,40051=>1000,40052=>1000, + 40053=>1000,40054=>1000,40055=>1000,40056=>1000,40057=>1000,40058=>1000,40059=>1000,40060=>1000,40061=>1000,40062=>1000,40063=>1000,40064=>1000,40065=>1000,40066=>1000,40067=>1000,40068=>1000, + 40069=>1000,40070=>1000,40071=>1000,40072=>1000,40073=>1000,40074=>1000,40075=>1000,40076=>1000,40077=>1000,40078=>1000,40079=>1000,40080=>1000,40081=>1000,40082=>1000,40083=>1000,40084=>1000, + 40085=>1000,40086=>1000,40087=>1000,40088=>1000,40089=>1000,40090=>1000,40091=>1000,40092=>1000,40093=>1000,40094=>1000,40095=>1000,40096=>1000,40097=>1000,40098=>1000,40099=>1000,40100=>1000, + 40101=>1000,40102=>1000,40103=>1000,40104=>1000,40105=>1000,40106=>1000,40107=>1000,40108=>1000,40109=>1000,40110=>1000,40111=>1000,40112=>1000,40113=>1000,40114=>1000,40115=>1000,40116=>1000, + 40117=>1000,40118=>1000,40119=>1000,40120=>1000,40121=>1000,40122=>1000,40123=>1000,40124=>1000,40125=>1000,40126=>1000,40127=>1000,40128=>1000,40129=>1000,40130=>1000,40131=>1000,40132=>1000, + 40133=>1000,40134=>1000,40135=>1000,40136=>1000,40137=>1000,40138=>1000,40139=>1000,40140=>1000,40141=>1000,40142=>1000,40143=>1000,40144=>1000,40145=>1000,40146=>1000,40147=>1000,40148=>1000, + 40149=>1000,40150=>1000,40151=>1000,40152=>1000,40153=>1000,40154=>1000,40155=>1000,40156=>1000,40157=>1000,40158=>1000,40159=>1000,40160=>1000,40161=>1000,40162=>1000,40163=>1000,40164=>1000, + 40165=>1000,40166=>1000,40167=>1000,40168=>1000,40169=>1000,40170=>1000,40171=>1000,40172=>1000,40173=>1000,40174=>1000,40175=>1000,40176=>1000,40177=>1000,40178=>1000,40179=>1000,40180=>1000, + 40181=>1000,40182=>1000,40183=>1000,40184=>1000,40185=>1000,40186=>1000,40187=>1000,40188=>1000,40189=>1000,40190=>1000,40191=>1000,40192=>1000,40193=>1000,40194=>1000,40195=>1000,40196=>1000, + 40197=>1000,40198=>1000,40199=>1000,40200=>1000,40201=>1000,40202=>1000,40203=>1000,40204=>1000,40205=>1000,40206=>1000,40207=>1000,40208=>1000,40209=>1000,40210=>1000,40211=>1000,40212=>1000, + 40213=>1000,40214=>1000,40215=>1000,40216=>1000,40217=>1000,40218=>1000,40219=>1000,40220=>1000,40221=>1000,40222=>1000,40223=>1000,40224=>1000,40225=>1000,40226=>1000,40227=>1000,40228=>1000, + 40229=>1000,40230=>1000,40231=>1000,40232=>1000,40233=>1000,40234=>1000,40235=>1000,40236=>1000,40237=>1000,40238=>1000,40239=>1000,40240=>1000,40241=>1000,40242=>1000,40243=>1000,40244=>1000, + 40245=>1000,40246=>1000,40247=>1000,40248=>1000,40249=>1000,40250=>1000,40251=>1000,40252=>1000,40253=>1000,40254=>1000,40255=>1000,40256=>1000,40257=>1000,40258=>1000,40259=>1000,40260=>1000, + 40261=>1000,40262=>1000,40263=>1000,40264=>1000,40265=>1000,40266=>1000,40267=>1000,40268=>1000,40269=>1000,40270=>1000,40271=>1000,40272=>1000,40273=>1000,40274=>1000,40275=>1000,40276=>1000, + 40277=>1000,40278=>1000,40279=>1000,40280=>1000,40281=>1000,40282=>1000,40283=>1000,40284=>1000,40285=>1000,40286=>1000,40287=>1000,40288=>1000,40289=>1000,40290=>1000,40291=>1000,40292=>1000, + 40293=>1000,40294=>1000,40295=>1000,40296=>1000,40297=>1000,40298=>1000,40299=>1000,40300=>1000,40301=>1000,40302=>1000,40303=>1000,40304=>1000,40305=>1000,40306=>1000,40307=>1000,40308=>1000, + 40309=>1000,40310=>1000,40311=>1000,40312=>1000,40313=>1000,40314=>1000,40315=>1000,40316=>1000,40317=>1000,40318=>1000,40319=>1000,40320=>1000,40321=>1000,40322=>1000,40323=>1000,40324=>1000, + 40325=>1000,40326=>1000,40327=>1000,40328=>1000,40329=>1000,40330=>1000,40331=>1000,40332=>1000,40333=>1000,40334=>1000,40335=>1000,40336=>1000,40337=>1000,40338=>1000,40339=>1000,40340=>1000, + 40341=>1000,40342=>1000,40343=>1000,40344=>1000,40345=>1000,40346=>1000,40347=>1000,40348=>1000,40349=>1000,40350=>1000,40351=>1000,40352=>1000,40353=>1000,40354=>1000,40355=>1000,40356=>1000, + 40357=>1000,40358=>1000,40359=>1000,40360=>1000,40361=>1000,40362=>1000,40363=>1000,40364=>1000,40365=>1000,40366=>1000,40367=>1000,40368=>1000,40369=>1000,40370=>1000,40371=>1000,40372=>1000, + 40373=>1000,40374=>1000,40375=>1000,40376=>1000,40377=>1000,40378=>1000,40379=>1000,40380=>1000,40381=>1000,40382=>1000,40383=>1000,40384=>1000,40385=>1000,40386=>1000,40387=>1000,40388=>1000, + 40389=>1000,40390=>1000,40391=>1000,40392=>1000,40393=>1000,40394=>1000,40395=>1000,40396=>1000,40397=>1000,40398=>1000,40399=>1000,40400=>1000,40401=>1000,40402=>1000,40403=>1000,40404=>1000, + 40405=>1000,40406=>1000,40407=>1000,40408=>1000,40409=>1000,40410=>1000,40411=>1000,40412=>1000,40413=>1000,40414=>1000,40415=>1000,40416=>1000,40417=>1000,40418=>1000,40419=>1000,40420=>1000, + 40421=>1000,40422=>1000,40423=>1000,40424=>1000,40425=>1000,40426=>1000,40427=>1000,40428=>1000,40429=>1000,40430=>1000,40431=>1000,40432=>1000,40433=>1000,40434=>1000,40435=>1000,40436=>1000, + 40437=>1000,40438=>1000,40439=>1000,40440=>1000,40441=>1000,40442=>1000,40443=>1000,40444=>1000,40445=>1000,40446=>1000,40447=>1000,40448=>1000,40449=>1000,40450=>1000,40451=>1000,40452=>1000, + 40453=>1000,40454=>1000,40455=>1000,40456=>1000,40457=>1000,40458=>1000,40459=>1000,40460=>1000,40461=>1000,40462=>1000,40463=>1000,40464=>1000,40465=>1000,40466=>1000,40467=>1000,40468=>1000, + 40469=>1000,40470=>1000,40471=>1000,40472=>1000,40473=>1000,40474=>1000,40475=>1000,40476=>1000,40477=>1000,40478=>1000,40479=>1000,40480=>1000,40481=>1000,40482=>1000,40483=>1000,40484=>1000, + 40485=>1000,40486=>1000,40487=>1000,40488=>1000,40489=>1000,40490=>1000,40491=>1000,40492=>1000,40493=>1000,40494=>1000,40495=>1000,40496=>1000,40497=>1000,40498=>1000,40499=>1000,40500=>1000, + 40501=>1000,40502=>1000,40503=>1000,40504=>1000,40505=>1000,40506=>1000,40507=>1000,40508=>1000,40509=>1000,40510=>1000,40511=>1000,40512=>1000,40513=>1000,40514=>1000,40515=>1000,40516=>1000, + 40517=>1000,40518=>1000,40519=>1000,40520=>1000,40521=>1000,40522=>1000,40523=>1000,40524=>1000,40525=>1000,40526=>1000,40527=>1000,40528=>1000,40529=>1000,40530=>1000,40531=>1000,40532=>1000, + 40533=>1000,40534=>1000,40535=>1000,40536=>1000,40537=>1000,40538=>1000,40539=>1000,40540=>1000,40541=>1000,40542=>1000,40543=>1000,40544=>1000,40545=>1000,40546=>1000,40547=>1000,40548=>1000, + 40549=>1000,40550=>1000,40551=>1000,40552=>1000,40553=>1000,40554=>1000,40555=>1000,40556=>1000,40557=>1000,40558=>1000,40559=>1000,40560=>1000,40561=>1000,40562=>1000,40563=>1000,40564=>1000, + 40565=>1000,40566=>1000,40567=>1000,40568=>1000,40569=>1000,40570=>1000,40571=>1000,40572=>1000,40573=>1000,40574=>1000,40575=>1000,40576=>1000,40577=>1000,40578=>1000,40579=>1000,40580=>1000, + 40581=>1000,40582=>1000,40583=>1000,40584=>1000,40585=>1000,40586=>1000,40587=>1000,40588=>1000,40589=>1000,40590=>1000,40591=>1000,40592=>1000,40593=>1000,40594=>1000,40595=>1000,40596=>1000, + 40597=>1000,40598=>1000,40599=>1000,40600=>1000,40601=>1000,40602=>1000,40603=>1000,40604=>1000,40605=>1000,40606=>1000,40607=>1000,40608=>1000,40609=>1000,40610=>1000,40611=>1000,40612=>1000, + 40613=>1000,40614=>1000,40615=>1000,40616=>1000,40617=>1000,40618=>1000,40619=>1000,40620=>1000,40621=>1000,40622=>1000,40623=>1000,40624=>1000,40625=>1000,40626=>1000,40627=>1000,40628=>1000, + 40629=>1000,40630=>1000,40631=>1000,40632=>1000,40633=>1000,40634=>1000,40635=>1000,40636=>1000,40637=>1000,40638=>1000,40639=>1000,40640=>1000,40641=>1000,40642=>1000,40643=>1000,40644=>1000, + 40645=>1000,40646=>1000,40647=>1000,40648=>1000,40649=>1000,40650=>1000,40651=>1000,40652=>1000,40653=>1000,40654=>1000,40655=>1000,40656=>1000,40657=>1000,40658=>1000,40659=>1000,40660=>1000, + 40661=>1000,40662=>1000,40663=>1000,40664=>1000,40665=>1000,40666=>1000,40667=>1000,40668=>1000,40669=>1000,40670=>1000,40671=>1000,40672=>1000,40673=>1000,40674=>1000,40675=>1000,40676=>1000, + 40677=>1000,40678=>1000,40679=>1000,40680=>1000,40681=>1000,40682=>1000,40683=>1000,40684=>1000,40685=>1000,40686=>1000,40687=>1000,40688=>1000,40689=>1000,40690=>1000,40691=>1000,40692=>1000, + 40693=>1000,40694=>1000,40695=>1000,40696=>1000,40697=>1000,40698=>1000,40699=>1000,40700=>1000,40701=>1000,40702=>1000,40703=>1000,40704=>1000,40705=>1000,40706=>1000,40707=>1000,40708=>1000, + 40709=>1000,40710=>1000,40711=>1000,40712=>1000,40713=>1000,40714=>1000,40715=>1000,40716=>1000,40717=>1000,40718=>1000,40719=>1000,40720=>1000,40721=>1000,40722=>1000,40723=>1000,40724=>1000, + 40725=>1000,40726=>1000,40727=>1000,40728=>1000,40729=>1000,40730=>1000,40731=>1000,40732=>1000,40733=>1000,40734=>1000,40735=>1000,40736=>1000,40737=>1000,40738=>1000,40739=>1000,40740=>1000, + 40741=>1000,40742=>1000,40743=>1000,40744=>1000,40745=>1000,40746=>1000,40747=>1000,40748=>1000,40749=>1000,40750=>1000,40751=>1000,40752=>1000,40753=>1000,40754=>1000,40755=>1000,40756=>1000, + 40757=>1000,40758=>1000,40759=>1000,40760=>1000,40761=>1000,40762=>1000,40763=>1000,40764=>1000,40765=>1000,40766=>1000,40767=>1000,40768=>1000,40769=>1000,40770=>1000,40771=>1000,40772=>1000, + 40773=>1000,40774=>1000,40775=>1000,40776=>1000,40777=>1000,40778=>1000,40779=>1000,40780=>1000,40781=>1000,40782=>1000,40783=>1000,40784=>1000,40785=>1000,40786=>1000,40787=>1000,40788=>1000, + 40789=>1000,40790=>1000,40791=>1000,40792=>1000,40793=>1000,40794=>1000,40795=>1000,40796=>1000,40797=>1000,40798=>1000,40799=>1000,40800=>1000,40801=>1000,40802=>1000,40803=>1000,40804=>1000, + 40805=>1000,40806=>1000,40807=>1000,40808=>1000,40809=>1000,40810=>1000,40811=>1000,40812=>1000,40813=>1000,40814=>1000,40815=>1000,40816=>1000,40817=>1000,40818=>1000,40819=>1000,40820=>1000, + 40821=>1000,40822=>1000,40823=>1000,40824=>1000,40825=>1000,40826=>1000,40827=>1000,40828=>1000,40829=>1000,40830=>1000,40831=>1000,40832=>1000,40833=>1000,40834=>1000,40835=>1000,40836=>1000, + 40837=>1000,40838=>1000,40839=>1000,40840=>1000,40841=>1000,40842=>1000,40843=>1000,40844=>1000,40845=>1000,40846=>1000,40847=>1000,40848=>1000,40849=>1000,40850=>1000,40851=>1000,40852=>1000, + 40853=>1000,40854=>1000,40855=>1000,40856=>1000,40857=>1000,40858=>1000,40859=>1000,40860=>1000,40861=>1000,40862=>1000,40863=>1000,40864=>1000,40865=>1000,40866=>1000,40867=>1000,40868=>1000, + 40869=>1000); +$diff=''; +$originalsize=23275812; + +// CID Information +// Select your language +// unicode to cid conversion table is from +// ftp://ftp.oreilly.com/pub/examples/nutshell/cjkv/adobe/ +// cid2code.txt in ac16.tar.Z,ag15.tar.Z,ak12.tar.Z and aj16.tar.Z. + +//$enc='UniCNS-UTF16-H'; +//$cidinfo=array('Registry'=>'Adobe','Ordering'=>'CNS1','Supplement'=>0); +//include(dirname(__FILE__).'/uni2cid_ac15.php'); + +//$enc='UniGB-UTF16-H'; +//$cidinfo=array('Registry'=>'Adobe','Ordering'=>'GB1','Supplement'=>2); +//include(dirname(__FILE__).'/uni2cid_ag15.php'); + +//$enc='UniKS-UTF16-H'; +//$cidinfo=array('Registry'=>'Adobe','Ordering'=>'Korea1','Supplement'=>0); +//include(dirname(__FILE__).'/uni2cid_ak12.php'); + +$enc='UniJIS-UTF16-H'; +$cidinfo=array('Registry'=>'Adobe','Ordering'=>'Japan1','Supplement'=>5); +include(dirname(__FILE__).'/uni2cid_aj16.php'); +// --- EOF --- --- /dev/null +++ b/tcpdf/fonts/chinese.php @@ -1,1 +1,16 @@ +801,'Descent'=>-199,'CapHeight'=>27,'Flags'=>33,'FontBBox'=>'[0 -199 949 801]','ItalicAngle'=>0,'StemV'=>70,'MissingWidth'=>600); +$up=-107; +$ut=49; +$cw=array(1=>500,2=>500,3=>500,4=>500,5=>500,6=>500,7=>500,8=>500,9=>500,10=>500,11=>500,12=>500,13=>500,14=>500,15=>500,16=>500,17=>500,18=>500,19=>500,20=>500,21=>500,22=>500,23=>500,24=>500,25=>500,26=>500,27=>500,28=>500,29=>500,30=>500,31=>500,32=>500,33=>500,34=>500,35=>500,36=>500,37=>500,38=>500,39=>500,40=>500,41=>500,42=>500,43=>500,44=>500,45=>500,46=>500,47=>500,48=>500,49=>500,50=>500,51=>500,52=>500,53=>500,54=>500,55=>500,56=>500,57=>500,58=>500,59=>500,60=>500,61=>500,62=>500,63=>500,64=>500,65=>500,66=>500,67=>500,68=>500,69=>500,70=>500,71=>500,72=>500,73=>500,74=>500,75=>500,76=>500,77=>500,78=>500,79=>500,80=>500,81=>500,82=>500,83=>500,84=>500,85=>500,86=>500,87=>500,88=>500,89=>500,90=>500,91=>500,92=>500,93=>500,94=>500,95=>500,96=>500,97=>500,98=>500,99=>500,100=>500,101=>500,102=>500,103=>500,104=>500,105=>500,106=>500,107=>500,108=>500,109=>500,110=>500,111=>500,112=>500,113=>500,114=>500,115=>500,116=>500,117=>500,118=>500,119=>500,120=>500,121=>500,122=>500,123=>500,124=>500,125=>500,126=>500,127=>500,8364=>1000,129=>500,130=>500,131=>500,132=>500,8230=>1000,134=>500,135=>500,136=>500,137=>500,138=>500,139=>500,140=>500,141=>500,142=>500,143=>500,144=>500,8216=>1000,8217=>1000,8220=>1000,8221=>1000,8226=>1000,8211=>1000,8212=>1000,152=>500,153=>500,154=>500,155=>500,156=>500,157=>500,158=>500,159=>500,160=>500,161=>500,162=>500,163=>500,164=>500,165=>500,166=>500,167=>500,168=>500,169=>500,170=>500,171=>500,172=>500,173=>500,174=>500,175=>500,176=>500,177=>500,178=>500,179=>500,180=>500,181=>500,182=>500,183=>500,184=>500,185=>500,186=>500,187=>500,188=>500,189=>500,190=>500,191=>500,192=>500,193=>500,194=>500,195=>500,196=>500,197=>500,198=>500,199=>500,200=>500,201=>500,202=>500,203=>500,204=>500,205=>500,206=>500,207=>500,208=>500,209=>500,210=>500,211=>500,212=>500,213=>500,214=>500,215=>500,216=>500,217=>500,218=>500,219=>500,220=>500,221=>500,222=>500,223=>500,224=>500,225=>500,226=>500,227=>500,228=>500,229=>500,230=>500,231=>500,232=>500,233=>500,234=>500,235=>500,236=>500,237=>500,238=>500,239=>500,240=>500,241=>500,242=>500,243=>500,244=>500,245=>500,246=>500,247=>500,248=>500,249=>500,250=>500,251=>500,252=>500,253=>500,254=>500,255=>500); +$diff=''; +$originalsize=5172084; +$enc='UniGB-UTF16-H'; +$cidinfo=array('Registry'=>'Adobe', 'Ordering'=>'GB1','Supplement'=>2); +include(dirname(__FILE__).'/uni2cid_ag15.php'); +// --- EOF --- --- /dev/null +++ b/tcpdf/fonts/courier.php @@ -1,1 +1,34 @@ +600,1=>600,2=>600,3=>600,4=>600,5=>600,6=>600,7=>600,8=>600,9=>600, +10=>600,11=>600,12=>600,13=>600,14=>600,15=>600,16=>600,17=>600,18=>600,19=>600, +20=>600,21=>600,22=>600,23=>600,24=>600,25=>600,26=>600,27=>600,28=>600,29=>600, +30=>600,31=>600,32=>600,33=>600,34=>600,35=>600,36=>600,37=>600,38=>600,39=>600, +40=>600,41=>600,42=>600,43=>600,44=>600,45=>600,46=>600,47=>600,48=>600,49=>600, +50=>600,51=>600,52=>600,53=>600,54=>600,55=>600,56=>600,57=>600,58=>600,59=>600, +60=>600,61=>600,62=>600,63=>600,64=>600,65=>600,66=>600,67=>600,68=>600,69=>600, +70=>600,71=>600,72=>600,73=>600,74=>600,75=>600,76=>600,77=>600,78=>600,79=>600, +80=>600,81=>600,82=>600,83=>600,84=>600,85=>600,86=>600,87=>600,88=>600,89=>600, +90=>600,91=>600,92=>600,93=>600,94=>600,95=>600,96=>600,97=>600,98=>600,99=>600, +100=>600,101=>600,102=>600,103=>600,104=>600,105=>600,106=>600,107=>600,108=>600, +109=>600,110=>600,111=>600,112=>600,113=>600,114=>600,115=>600,116=>600,117=>600, +118=>600,119=>600,120=>600,121=>600,122=>600,123=>600,124=>600,125=>600,126=>600, +127=>600,128=>600,129=>600,130=>600,131=>600,132=>600,133=>600,134=>600,135=>600, +136=>600,137=>600,138=>600,139=>600,140=>600,141=>600,142=>600,143=>600,144=>600, +145=>600,146=>600,147=>600,148=>600,149=>600,150=>600,151=>600,152=>600,153=>600, +154=>600,155=>600,156=>600,157=>600,158=>600,159=>600,160=>600,161=>600,162=>600, +163=>600,164=>600,165=>600,166=>600,167=>600,168=>600,169=>600,170=>600,171=>600, +172=>600,173=>600,174=>600,175=>600,176=>600,177=>600,178=>600,179=>600,180=>600, +181=>600,182=>600,183=>600,184=>600,185=>600,186=>600,187=>600,188=>600,189=>600, +190=>600,191=>600,192=>600,193=>600,194=>600,195=>600,196=>600,197=>600,198=>600, +199=>600,200=>600,201=>600,202=>600,203=>600,204=>600,205=>600,206=>600,207=>600, +208=>600,209=>600,210=>600,211=>600,212=>600,213=>600,214=>600,215=>600,216=>600, +217=>600,218=>600,219=>600,220=>600,221=>600,222=>600,223=>600,224=>600,225=>600, +226=>600,227=>600,228=>600,229=>600,230=>600,231=>600,232=>600,233=>600,234=>600, +235=>600,236=>600,237=>600,238=>600,239=>600,240=>600,241=>600,242=>600,243=>600, +244=>600,245=>600,246=>600,247=>600,248=>600,249=>600,250=>600,251=>600,252=>600, +253=>600,254=>600,255=>600); +// --- EOF --- --- /dev/null +++ b/tcpdf/fonts/dejavu-fonts-ttf-2.32/AUTHORS @@ -1,1 +1,49 @@ +abysta at yandex.ru +Adrian Schroeter +Andrey Valentinovich Panov +Ben Laenen +Besarion Gugushvili +Bhikkhu Pesala +Clayborne Arevalo +Dafydd Harries +Danilo Segan +Davide Viti +David Jez +David Lawrence Ramsey +Denis Jacquerye +Dwayne Bailey +Eugeniy Meshcheryakov +Gee Fung Sit +Heikki Lindroos +James Cloos +James Crippen +John Karp +Keenan Pepper +Lars Naesbye Christensen +Mashrab Kuvatov +Max Berger +Mederic Boquien +Michael Everson +MihailJP +Misu Moldovan +Nguyen Thai Ngoc Duy +Nicolas Mailhot +Ognyan Kulev +Ondrej Koala Vacha +Peter Cernak +Remy Oudompheng +Roozbeh Pournader +Sahak Petrosyan +Sander Vesik +Stepan Roh +Stephen Hartke +Steve Tinney +Tavmjong Bah +Thomas Henlich +Tim May +Valentin Stoykov +Vasek Stodulka +Wesley Transue +$Id: AUTHORS 2404 2010-07-30 17:13:05Z noct_dreamer $ + --- /dev/null +++ b/tcpdf/fonts/dejavu-fonts-ttf-2.32/BUGS @@ -1,1 +1,4 @@ +See http://dejavu.sourceforge.net/wiki/index.php/Bugs +$Id: BUGS 80 2004-11-13 13:12:02Z src $ + --- /dev/null +++ b/tcpdf/fonts/dejavu-fonts-ttf-2.32/LICENSE @@ -1,1 +1,100 @@ +Fonts are (c) Bitstream (see below). DejaVu changes are in public domain. +Glyphs imported from Arev fonts are (c) Tavmjong Bah (see below) +Bitstream Vera Fonts Copyright +------------------------------ + +Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is +a trademark of Bitstream, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of the fonts accompanying this license ("Fonts") and associated +documentation files (the "Font Software"), to reproduce and distribute the +Font Software, including without limitation the rights to use, copy, merge, +publish, distribute, and/or sell copies of the Font Software, and to permit +persons to whom the Font Software is furnished to do so, subject to the +following conditions: + +The above copyright and trademark notices and this permission notice shall +be included in all copies of one or more of the Font Software typefaces. + +The Font Software may be modified, altered, or added to, and in particular +the designs of glyphs or characters in the Fonts may be modified and +additional glyphs or characters may be added to the Fonts, only if the fonts +are renamed to names not containing either the words "Bitstream" or the word +"Vera". + +This License becomes null and void to the extent applicable to Fonts or Font +Software that has been modified and is distributed under the "Bitstream +Vera" names. + +The Font Software may be sold as part of a larger software package but no +copy of one or more of the Font Software typefaces may be sold by itself. + +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, +TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME +FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING +ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF +THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE +FONT SOFTWARE. + +Except as contained in this notice, the names of Gnome, the Gnome +Foundation, and Bitstream Inc., shall not be used in advertising or +otherwise to promote the sale, use or other dealings in this Font Software +without prior written authorization from the Gnome Foundation or Bitstream +Inc., respectively. For further information, contact: fonts at gnome dot +org. + +Arev Fonts Copyright +------------------------------ + +Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the fonts accompanying this license ("Fonts") and +associated documentation files (the "Font Software"), to reproduce +and distribute the modifications to the Bitstream Vera Font Software, +including without limitation the rights to use, copy, merge, publish, +distribute, and/or sell copies of the Font Software, and to permit +persons to whom the Font Software is furnished to do so, subject to +the following conditions: + +The above copyright and trademark notices and this permission notice +shall be included in all copies of one or more of the Font Software +typefaces. + +The Font Software may be modified, altered, or added to, and in +particular the designs of glyphs or characters in the Fonts may be +modified and additional glyphs or characters may be added to the +Fonts, only if the fonts are renamed to names not containing either +the words "Tavmjong Bah" or the word "Arev". + +This License becomes null and void to the extent applicable to Fonts +or Font Software that has been modified and is distributed under the +"Tavmjong Bah Arev" names. + +The Font Software may be sold as part of a larger software package but +no copy of one or more of the Font Software typefaces may be sold by +itself. + +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL +TAVMJONG BAH BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. + +Except as contained in this notice, the name of Tavmjong Bah shall not +be used in advertising or otherwise to promote the sale, use or other +dealings in this Font Software without prior written authorization +from Tavmjong Bah. For further information, contact: tavmjong @ free +. fr. + +$Id: LICENSE 2133 2007-11-28 02:46:28Z lechimp $ + --- /dev/null +++ b/tcpdf/fonts/dejavu-fonts-ttf-2.32/NEWS @@ -1,1 +1,1251 @@ - +Changes from 2.31 to 2.32 + +* added to Sans: Latin small letter p with stroke (U+1D7D), Latin capital letter p with stroke through descender (U+A750), Latin small letter p with stroke through descender (U+A751), Latin capital letter thorn with stroke (U+A764), Latin small letter thorn with stroke (U+A765), Latin capital letter thorn with stroke through descender (U+A766), Latin small letter thorn with stroke through descender (U+A767), Latin capital letter q with stroke through descender (U+A756), Latin small letter q with stroke through descender (U+A757), Latin capital letter p with flourish (U+A752), Latin small letter p with flourish (U+A753) (by Ben Laenen) +* add new Indian rupee symbol (U+20B9) to Sans, Serif and Mono (although standardization in Unicode not complete yet, UTC did assign this code point) (by Ben Laenen) +* Sans: adjusted U+0E3F, U+20AB, U+20AD-U+20AE, U+20B1, U+20B5, U+20B8 to have them take up the same width as digits (by Gee Fung Sit 薛至峰) +* added U+23E8 to Sans (by Thomas Henlich) +* fixed numerous bugs (#22579, #28189, #28977, N'Ko in Windows, fixed U+FB4F, anchors for U+0332-U+0333, made extensions in Misc. Technical connect, and other small fixes) (by Gee Fung Sit 薛至峰) +* added looptail g as stylistic variant to Serif (by Gee Fung Sit 薛至峰) +* added the remaining precomposed characters in Latin Extended Additional in Serif (by Gee Fung Sit 薛至峰) +* added Georgian Mkhedruli (U+10D0-U+10FC) to Sans ExtraLight (by Besarion Gugushvili) +* fix spacing in hinting of U+042E (Ю) in Mono (by Ben Laenen) +* replaced U+2650 and minor changes to U+2640-U+2642, U+2699, U+26A2-U+26A5, U+26B2-U+26B5, U+26B8 in Sans (by Gee Fung Sit 薛至峰) +* added U+1E9C-U+1E9D, U+1EFA-U+1EFB, U+2028-U+2029, U+20B8, U+2150-U+2152, U+2189, U+26C0-U+26C3, U+A722-U+A725, U+1F030-U+1F093 to Sans (by Gee Fung Sit 薛至峰) +* added U+1E9C-U+1E9E, U+1EFA-U+1EFB, U+2028-U+2029, U+20B8, U+2181-U+2182, U+2185 U+A722-U+A725, to Sans ExtraLight (by Gee Fung Sit 薛至峰) +* added U+20B8, U+22A2-U+22A5, U+A722-U+A725 to Mono (by Gee Fung Sit 薛至峰) +* added U+02CD, U+01BF, U+01F7, U+0222-U+0223, U+0243-U+0244, U+0246-U+024F, U+2150-U+2152, U+2189, U+239B-U+23AD and U+A73D to Serif (by Gee Fung Sit 薛至峰) + +Changes from 2.30 to 2.31 + +* fixed bug where Serif Condensed Italic wouldn't get proper subfamily tags (by + Ben Laenen) +* added math operators U+2234-U+2237 to Mono (by Ben Laenen) +* removed buggy instructions of U+032D (by Eugeniy Meshcheryakov) +* added U+2C70, U+2C7E, U+2C7F to Sans and Sans Mono (by Denis Jacquerye) +* added U+2C7D to Sans Mono (by Denis Jacquerye) +* added U+2C6D, U+2C70-2C73, U+2C7E-2C7F to Serif (by Denis Jacquerye) +* added extremas to alpha U+03B1 in Serif-Italic (by Denis Jacquerye) +* added U+4A4, U+4A5 to Mono (by Andrey V. Panov) +* added Arabic letters U+0657, U+0670, U+0688-U+0690, U+0693-U+0694, + U+0696-U+0697, U+0699-U+06A0, U+06A2-U+06A3, U+06A5, U+06A7-U+06A8, + U+06AA-U+06AE, U+06B0-U+06B4, U+06B6-U+06B9, U+06BB-U+06BE and their + contextual forms to Sans (by MihailJP) +* added U+A78D LATIN CAPITAL LETTER TURNED H for coming Unicode 6.0 (by Denis + Jacquerye) + +Changes from 2.29 to 2.30 + +* added U+0462-U+0463 to Mono (by Denis Jacquerye) +* corrected U+1E53 in Serif (by Gee Fung Sit) +* added U+1E4C-U+1E4D to Mono and Serif (by Gee Fung Sit) +* added U+1E78-U+1E79 to Mono (by Gee Fung Sit) +* fixed missing diacritics in Latin Extended Additional in Sans ExtraLight + (moved stacked diacritics out of PUA in the process) (by Gee Fung Sit) +* fixed anchors on U+1E78 in Serif (by Gee Fung Sit) +* added U+1DC4-U+1DC9 to Serif (by Denis Jacquerye) +* renamed above-mark to above-mark in Serif-Italic (by Denis Jacquerye) +* added U+1DC4-U+1DC9 to context class for dotless substitution (by Denis + Jacquerye) +* changed Doubleacute to Doublegrave in Sans ExtraLight (by Gee Fung Sit) +* removed redundant reference in U+01FB in Sans Oblique (by Gee Fung Sit) +* added U+A726-U+A727 to Mono (Denis Jacquerye) +* changed U+04BE and U+04BF according to recommedations of Sasha Ankwab in Sans + (by Andrey V. Panov) +* remove "Symbol Charset" from set of codepages in Sans (by Eugeniy + Meshcheryakov) + +Changes from 2.28 to 2.29 + +* modified U+10FB in Sans to be a mirror image of U+2056, since U+10FB is not + Georgian-specific (by Roozbeh Pournader) +* added U+2B1F, U+2B24, U+2B53, U+2B54 in Sans (by Roozbeh Pournader) +* fixed TUR opentype language tag to TRK in Serif (bug 19825) (by Ben Laenen) +* early implementation of Abkhaz letter U+0524-U+0525 in Sans + (by Michael Everson and abysta) +* flipped U+1D538 in Sans (by Gee Fung Sit) +* added U+26B3-U+26B8, U+1D7D8-U+1D7E1 in Sans (by Gee Fung Sit) +* corrected U+1D7A9 in Sans Bold Oblique (by Gee Fung Sit) +* Fixed U+0649 to be dual-joining in Sans Mono (by Roozbeh Pournader) +* Remove unnecessary 'isol' feature from Sans Mono (by Roozbeh Pournader) +* Remove 'cmap' mappings for U+066E, U+066F, U+067C, U+067D, U+0681, U+0682, + U+0685, U+0692, U+06A1, U+06B5, U+06BA, U+06C6, U+06CE, and U+06D5 + in Sans Mono (bug 20323) (by Roozbeh Pournader) +* add half brackets (U+2E22 - U+2E25, by Steve Tinney) + +Changes from 2.27 to 2.28 + +* added U+A789, U+A78A in Sans and Sans Mono (by Denis Jacquerye) +* modified U+02D6, U+02D7, U+02EE in Sans and Sans Mono (by Denis Jacquerye) +* added U+1E9E (German capital ß) to Sans and Serif (by Denis Jacquerye) +* adjusted width of U+01B7-U+01B9 in Serif Italic (by Denis Jacquerye) +* modified U+021C, U+021D in Sans (by Denis Jacquerye) +* added U+021C, U+021D in Mono (by Denis Jacquerye) +* added U+F428 (Georgian Nuskhuri "f") in private use area (by Besarion + Gugushvili) +* updated Georgian mkhedruli (U+10D0-U+10FA) with new version (by Besarion + Gugushvili) +* updated Georgian asomtavruli (U+10A0-U+10C5) with new version (by Besarion + Gugushvili) +* added Georgian nuskhuri (U+2D00-U+2D25) (by Besarion Gugushvili) +* added Georgian mtavruli in private use area (U+F400-U+F426) (by Besarion + Gugushvili) +* added mark anchors above to Cyrillic U+0430-U+0438, U+043A-U+044F, + U+0454-U+0455 in Mono (by Ben Laenen) +* modified/moved up U+0318-U+0319, U+031C-U+031F, U+0329-U+032A, U+032C-U+032D, + U+0339-U+033B, U+0348 and U+0353 in Sans to prevent cut-off (by Gee Fung Sit) +* added U+035A to Sans (by Gee Fung Sit) +* updated fontconfig files (by Nicolas Mailhot) +* added U+2032-2037 to Mono (by Denis Jacquerye) +* added Ogham to Sans ExtraLight (by Gee Fung Sit) +* added U+2C6F, U+2C79, U+2C7C-2C7D to Mono (by Gee Fung Sit) +* added U+210F to Serif and Sans ExtraLight (by Gee Fung Sit) +* changed U+210F to a more common glyph in Sans and Mono (by Gee Fung Sit) + +Changes from 2.26 to 2.27 + +* added some of Michael Everson's new Cyrillic glyphs to Sans (by Wesley + Transue) +* removed blank glyph at U+05EF from Sans Bold Oblique (by Gee Fung Sit) +* small adjustments to existing tone bars in Sans and Mono (by Gee Fung Sit) +* added U+0372-U+0373, U+0376-U+0377, U+03CF, U+A668-U+A66E, U+A708-U+A711, + U+A71B-U+A71F to Sans (by Gee Fung Sit) +* copied U+02E5-U+02E9 over from Sans to fix inconsistencies in Serif (by Gee + Fung Sit) +* added U+021C-U+021D, U+0370-U+0371, U+037B-U+037D, U+0470-U+0471, + U+0510-U+0515, U+051A-U+051D, U+1E9F, U+2C64, U+2C6E-U+2C6F, U+2C79, + U+2C7C-U+2C7D, U+A644-U+A647, U+A650-U+A651, U+A654-U+A657, U+A708-U+A716, + U+A71B-U+A71F to Serif (by Gee Fung Sit) +* added U+A708-U+A716, U+A71B-U+A71F to Mono (by Gee Fung Sit) +* added anchors to U+017F (Å¿) and fixed U+1E9B (ẛ) in Serif (by Gee Fung Sit) +* made U+0325 smaller in Sans Bold and Serif to match Sans Book (by Gee Fung + Sit) +* fixes to U+02F3 (moved up), U+228F-U+2294 (more square-like) and + U+22CE-U+22CF (stroke width) in Sans (by Gee Fung Sit) +* replaced U+2202 ∂ (Sans and Mono) and U+221D âˆ, U+221E ∞ (Sans) with glyphs + from Arev (with small changes) (by Gee Fung Sit) +* added U+22B0-U+22B1, U+22C7, U+22D0-U+22D5 from Arev to Sans to complete the + block (by Gee Fung Sit) +* added U+0514-U+0515 to Sans ExtraLight (by Gee Fung Sit) +* skewed U+A78C in all Oblique/Italic fonts (by Gee Fung Sit) +* moved U+2215 to U+2044 in Sans and Serif and replaced U+2215 with reference + to U+002F in all fonts (by Gee Fung Sit) +* added U+2C6E to Mono (by Denis Jacquerye) +* added U+A782 and U+A783 in Sans (by Wesley Transue) +* added U+0244, U+024C-024D, U+2C64 in Sans Mono (by Denis Jacquerye) +* modified U+01AE in Sans Mono (by Denis Jacquerye) +* added U+2C7A to all fonts (by Gee Fung Sit) +* italicized/small changes to U+2C76 in Serif (Bold) Italic (by Gee Fung Sit) +* improved outlines of U+2C68, U+2C6A, U+2C6C in Serif (Bold) Italic (by Gee + Fung Sit) +* rounded U+2C77 at the bottom in Serif (by Gee Fung Sit) +* added joining behavior for tone letters (U+02E5-U+02E9) in Sans (bug #15669) + (by Gee Fung Sit) +* fixed outline of y.alt in Sans Regular (by Denis Jacquerye) +* changed references of U+1D5A8, U+1D5C5, U+1D5DC, U+1D5F9, U+1D610, U+1D62D, + U+1D644 and U+1D661 to stylistic alternates to have a better distinction (by + Gee Fung Sit) +* hinted I.alt in Sans Regular (by Gee Fung Sit) +* added U+0487, completing Cyrillic block (by Gee Fung Sit) +* extended the bar of U+0463 to the right and moved the anchor (by Gee Fung + Sit) +* added anchors to glyphs in Cyrillic block (by Gee Fung Sit) +* added (preliminary) hints to tone letter forms (U+02E5.5, U+02E9.1, stem) in + Sans Book (by Gee Fung Sit) + +Changes from 2.25 to 2.26 + +- added glyphs for Cyrillic-B to Sans (by Wesley Transue) +- added U+0370-U+0371 to Sans (by Wesley Transue) +- added U+019C, U+01A2-U+01A3, U+01A6, U+01E4-U+01E5, U+024C-U+024D, U+0285, + U+0290, U+02A0, U+0370-U+0371, U+03F1, U+03FC to Sans ExtraLight (by Wesley + Transue) +- added U+20A0-U+20A5, U+20A7-U+20B3, U+2105, U+210D, U+210F, U+2115, U+2117, + U+2119-U+211A, U+211D, U+2124, U+212E, U+2200-U+2204 to Mono (by Heikki + Lindroos) +- added U+01BA and U+01BF to Mono (by Heikki Lindroos) +- merged OpenType "aalt" feature in Latin in Sans (by Denis Jacquerye) +- added alternative shape for y in Sans (by Denis Jacquerye) +- added saltillo (U+A78B-U+A78C) to all faces (by James Cloos) +- changed U+047C-U+047D to references instead of outlines in Sans (by Wesley + Transue) +- added Latin letter tresillo U+A72A-U+A72B to Sans (by Wesley Transue) +- added U+A734-U+A737 to Sans (by Wesley Transue) +- added U+2053 to Serif and fixed it bug:9425 in Sans (by Gee Fung Sit) +- removed problematic hints for U+0423 bug:10025 (by Gee Fung Sit) +- added U+27C5-U+27C6 bug:10255 to all faces (by Gee Fung Sit) +- fixed width of U+2016 in Sans Oblique (by Gee Fung Sit) +- added U+2016, U+2032-U+2038, U+2042, U+2045-U+2046, U+204B-U+204F, + U+2051-U+2052, U+2057 to Serif (by Gee Fung Sit) +- made U+2140 bigger to match other n-ary operators (by Gee Fung Sit) +- added U+0606-U+0607, U+0609-U+060A to Sans (by Gee Fung Sit) +- added U+221B-U+221C to Mono (by Gee Fung Sit) +- small adjustments to U+221B-U+221C in Sans and Serif (by Gee Fung Sit) +- update U+04B4-U+04B5 in Serif (by Andrey V. Panov) +- increased max-storage value from maxp table to 153 (by Andrey V. Panov) +- added U+0472-U+0473, U+0510-U+0511, U+051A-U+051D, U+0606-U+0607, + U+0609-U+060A, U+1E26-U+1E27, U+1E54-U+1E55, U+1E7C-U+1E7D, U+1E8C-U+1E8D, + U+1E90-U+1E91, U+1E97-U+1E99, U+1E9F, U+1EAC-U+1EAD, U+1EB6-U+1EB7, + U+1EC6-U+1EC7, U+1ED8-U+1EDD, U+1EE0-U+1EE3, U+1EE8-U+1EEB, U+1EEE-U+1EF1 to + Mono (by Gee Fung Sit) +- added locl rules for S/T cedilla for Romanian and Moldavian so they get + rendered as S/T with comma accent (see Redhat bug #455981) (by Ben Laenen) +- removed ligature rule from Armenian U+0587 bug:16113 (by Gee Fung Sit) + +Changes from 2.24 to 2.25 + +- moved/added U+2E18 (by Gee Fung Sit) +- added empty glyph for U+2064 in Sans and Serif (by Gee Fung Sit) +- added U+22CE-U+22CF to Sans (by Gee Fung Sit) +- Sans Oblique and Bold Oblique, Serif: reverted digits hinting instructions back to before revision 1590, which fixed mistaken debian bug #471024. This fixes Debian bug #411308. The original bug was in freetype not in the fonts (by Denis Jacquerye) +- added U+A726-U+A729, U+A730-U+A733, U+A738-U+A73F, U+A746-U+A74B, U+A74E-U+A74F, U+A780-U+A781, U+A7FB-U+A7FF to Sans (by Gee Fung Sit) +- added Macedonian italic glyph shape for U+0453 in Serif (by Ben Laenen) +- changed descenders in U+0446, U+0449, U+0497, U+04A3, U+04AD (by Andrey V. Panov) +- updated main SFD files to SplineFontDB 3.0 (Denis Jacquerye and Gee Fung Sit) +- moved U+0561 2 up since it wasn't aligned with the baseline well (by Ben Laenen) +- added U+2E2E to Sans (by Gee Fung Sit) +- replaced U+2699 with simpler version in Sans (by Gee Fung Sit) +- added a lot of hinting instructions to Latin Extended B, Greek and Coptic glyphs Sans Book (by Wesley Transue) +- differentiated U+2219 from U+22C5 and adjusted affected references in Sans and Mono (by Gee Fung Sit) +- made Hebrew narrower in Sans Bold and Sans Bold Oblique (by Denis Jacquerye) +- added Kurdish and Chuvash letters from Unicode 5.1 Cyrillic Extended block (by Wesley Transue) +- added U+1E9F, U+A644-U+A647, U+A64C-U+A64D, U+A650-U+A651, U+A654-U+A655, U+A712U+A716 to Sans (by Gee Fung Sit) +- added several glyphs to Sans ExtraLight (by Gee Fung Sit) +- added hinting instructions to U+046A-U+046B, U+0508-U+0509, U+050B, U+0512-U+0513 in Sans Book (by Wesley Transue) +- corrected width of U+027E in Sans Book (by Gee Fung Sit) +- added U+2C79, U+2C7B-U+2C7D to Sans (by Gee Fung Sit) +- added a bunch of glyphs+small corrections to Sans Light (by Gee Fung Sit) +- added U+0496, U+0497, U+04B0, U+04B1 (by Andrey V. Panov) +- updated U+0493, U+049B, U+04B3, U+04B7, U+04F7 (by Andrey V. Panov) +- further improvements in extended Cyrillic (by Andrey V. Panov) + +Changes from 2.23 to 2.24 + +- instructions for U+05C0 ×€, U+05C3 ׃, U+05F3 ׳, and U+05F4 ×´ in DejaVu + Sans. (by Wesley Transue) +- instructions for U+2116 in Sans (by Andrey V. Panov) +- Unicode 5.1 update: moved U+F208 to U+2C6D, U+F25F to U+2C71, added + U+2C6E-U+2C6F, U+2C72-U+2C73, updated outline of U+2C71 in Sans. (by + Denis Jacquerye) +- updated and instructed U+0401 in Sans (by Andrey V. Panov) +- fixed the bug in Sans faces where U+02EC ˬ faced the wrong direction. + Also, added a few more glyph instructions. (by Wesley Transue) +- removed OS2Sub and OS2Strike that weren't intentional in Sans + ExtraLight. (by Denis Jacquerye) +- updated instructions for U+401, U+44F in Serif Book. (by Andrey V. + Panov) +- instructions for U+02C4 Ë„, U+02C5 Ë…, U+03D8 Ϙ, U+03D9 Ï™, U+0494 Ò”, and + U+0495 Ò• in Sans Book. (by Wesley Transue) +- instructions for U+01A6 Ʀ, U+0238 ȸ, U+0239 ȹ, U+02EC ˬ, and U+05C6 ׆ + in Sans Book. (by Wesley Transue) +- DejaVuSans.sfd DejaVuSerif.sfd: updated instructions for U+447 and + U+451 using code generated with xgridfit (by Andrey V. Panov) +- instructions for a few glyphs in the Latin Extended-B Block, Greek + Block, Cyrillic Block, and N'Ko block. (by Wesley Transue) +- updated sfdnormalize.pl, and SFD files to new SFD format with empty + lines. (by Denis Jacquerye) + +Changes from 2.22 to 2.23 + +- fixed bug which made Condensed fonts appear instead of normal width ones +- added U+20DB, U+20DC, and U+20E1 to Sans (by Roozbeh Pournader) +- added hinting instructions to U+01A7, U+01AA-U+01AC, U+01AE-U+01AF, + U+01BC-U+01BD, U+01BF, U+01F7, U+0277, U+027F, U+0285-U+0286, U+0297, U+02AF, + U+02B4-U+02B5, U+02BD, U+030D, U+0311, U+0329, U+04A0-U+04A1 in Sans Book (by + Wesley Transue) +- modified hinting instructions of U+04A2 in Sans Book (by Wesley Transue) +- added hinting instructions to U+237D, U+2423 in Mono Book and Mono Bold (by + Wesley Transue) +- added mathematical alphanumeric symbols to all styles (by Max Berger) +- added Unicode 5.1 U+2E18 as U+2E18.u51 (not yet usable) to Sans (by Roozbeh + Pournader) +- dereferenced all glyphs with mixed references and outlines (by Denis + Jacquerye) +- removed non-zero width from U+0344 in Sans (by Denis Jacquerye) + +Changes from 2.21 to 2.22 + +- directory structure has changed, we now use the Makefile +- modified Armenian U+0565 in Sans (by ÕÕ¡Õ°Õ¡Õ¯ ÕŠÕ¥Õ¿Ö€Õ¸Õ½ÕµÕ¡Õ¶) +- added double struck letters and numbers U+2102, U+210D, U+2115, + U+2119-U+211A, U+211D, U+2124, U+213C-U+2140, U+2145-U+2149, U+1D538-U+1D539, + U+1D53B-U+1D53E, U+1D540-U+1D544, U+1D546, U+1D54A-U+1D550, U+1D552-U+1D56B, + U+1D7D8-U+1D7E1 to Serif (by Stephen Hartke) +- added letterlike symbols U+2103, U+2109, U+2127, U+214B, U+2141-U+2144 to + Serif (by Ben Laenen) +- fixed outline direction of U+2143 in Sans Bold/Bold Oblique (by Ben Laenen) +- added arrow set in Serif: arrows: U+2194-U+21FF; dingbats: U+27A1; + supplemental arrows A: U+27F0-U+27FF; supplemental arrows B: U+2900-U+2975, + U+297A; miscellaneous symbols and arrows: U+2B00-U+2B11 (by Ben Laenen) +- added U+0180, U+01DE, U+01E0-01E1, U+022A, U+022C, U+0230, U+1E08-U+1E09, + U+1E10-U+1E11, U+1EB0-U+1EB1 to Mono (by Denis Jacquerye) +- adjusted U+01D5, U+01D7, U+01D9, U+1DB in Mono (by Denis Jacquerye) +- added Ogham in Sans (by Wesley Transue) +- added Yijing Hexagram Symbols in Sans (by Wesley Transue) +- hinting instructions added to Cyrillic U+0460, U+04A6-U+04A7, U+04AC-U+04AD, + U+04C7-U+04C8, U+04F6-U+04F7, U+04FA-U+04FB, U+050C-U+050D in Sans Book (by + Wesley Transue) +- adjusted Cyrillic letters U+042A, U+044A, U+044C, U+0459-U+045B, U+0462, + U+048C-U+048D in Serif (by Andrey V. Panov) +- hinting instructions added to Lao U+0EB7 in Sans (by Wesley Transue) +- added Roman numerals and Claudian letter U+2160-U+2184 in Serif (by Ben + Laenen) +- added U+FFF9-U+FFFD to Sans, Serif and Mono (by Lars Næsbye Christensen) +- added mathematical symbols to Serif: U+2200, U+2203-U+2204, U+2213-U+2214, + U+2217-U+2218, U+2223-U+2226, U+2250-U+2255, U+2295-U+22AF, U+22C5 (by Ben + Laenen) +- modified bullet symbol U+2219 in Serif (by Ben Laenen) + +Changes from 2.20 to 2.21 + +- added U+FE20-U+FE23 (half diacritics) to Sans (by Denis Jacquerye) +- added anchor "half" to position right half of double marks, U+FE21 or U+FE23 + to Sans (by Denis Jacquerye) +- shifted U+0360 up to avoid collision with some outlines in Sans (by Denis + Jacquerye) +- added anchor above-mark anchor to U+035D, U+035E, U+0360, U+0361 in Sans (by + Denis Jacquerye) +- added instructions for ff, ffi, ffl ligatures in Serif Bold (by Eugeniy + Meshcheryakov) +- added instructions to some N'Ko glyphs (by Wesley Transue) +- added instructions to some Lao glyphs (by Wesley Transue) +- cleaning up 'liga' Standard Ligature in Latin, in Sans and Sans Mono (by + Denis Jacquerye) +- added U+046A, U+046B (big yus) in Serif (by Andrey V. Panov) +- added box drawing symbols to Sans and Serif (by Lars Næsbye Christensen) +- added Makefile to improve font and packages generating (by Nicolas Mailhot) + +Changes from 2.19 to 2.20 + +- removed TeX and TeXData tags from all sfd files (by Eugeniy Meshcheryakov) +- removed all 'frac' lookups (by Eugeniy Meshcheryakov) +- fixed duplicate glyph names (by Eugeniy Meshcheryakov) +- removed standard ligatures with U+00B7 in Mono (by Eugeniy Meshcheryakov) +- use reference to U+002D in U+00AD in Sans Oblique, and adjust instructions + (by Eugeniy Meshcheryakov) +- updated Cyrillic in Sans Extra Light (by Andrey V. Panov) +- added instructions to N'Ko U+07C1-U+07C6, U+07CA, U+07CE-U+07CF, U+07D1, + U+07D3-U+07D4, U+07D8, U+07DB and U+07EB in Sans (by Wesley Transue) +- added instructions to Lao U+0E8A, U+0E95, U+0E97, U+EA5, U+0EB4 and U+0EB5 + (by Wesley Transue) +- adjusted instructions for Hebrew glyphs (by Denis Jacquerye) +- added instructions for U+0265 in Sans Bold (by Denis Jacquerye) +- fix U+1D68 in Sans: it had the shape of delta, where it should be a rho (by + Ben Laenen) +- remove U+1D5C glyph in Sans Oblique (it was empty) (by Ben Laenen) +- fix instructions of U+01AD in Sans Bold (by Ben Laenen) +- fix instructions of U+042D in Serif (by Ben Laenen) +- remove buggy instructions of U+2328 in Serif (by Ben Laenen) +- corrected width of U+2C75-U+2C76 in Sans Bold and Serif Bold (by Gee Fung Sit) +- added U+2C75-U+2C77 to Mono (by Gee Fung Sit) + +Changes from 2.18 to 2.19 + +- fixed misplaced symbols (U+2325,2326) in Sans Oblique (by John Karp) +- added Mark to Base anchors: 'cedilla' for combining cedilla and + 'above-legacy' for stacking above precomposed glyphs (just a,e,i,o,u with + macron for now) in Sans (by Denis Jacquerye). +- added contextual substitution for Case and Dotless forms in all Sans variants + (by Denis Jacquerye). +- renamed 'ccmp' lookups for RTL and Basic (LGC, etc.) (by Denis Jacquerye) +- added anchor 'cedilla' for vowels in Sans. (by Denis Jacquerye) +- extended contextual dotless and case substitutions to handle both below and + above diacritics (by Denis Jacquerye) +- renamed Dotless and Case Form GSUB lookups in Sans with meaningful names (by + Denis Jacquerye) + +Changes from 2.17 to 2.18 + +- Re-encoded the source files for Full Unicode (by Ben Laenen) +- Re-enabled the "ff", "fl", "fi", "ffl", "ffi" ligatures by default in Serif + (by Ben Laenen) +- Disabled the "fi", "ffi" ligatures for languages with dotless i in Serif (by + Ben Laenen) +- added Tifinagh to Sans Book and Bold, U+2D30-U+2D65, U+2D6F, partially hinted + in Sans Book. (by Denis Jacquerye) +- added Tai Xuan Jing Symbols (U+1D300-1D356) to Sans (by Remy Oudompheng) +- added double-struck letters (U+1D538-U+1D56B minus reserved code points) to + Sans (by Gee Fung Sit) +- added U+22EE-U+22F1 to Sans (by Gee Fung Sit) +- added U+2C67-U+2C6C, U+2C75-U+2C77 to Serif (by Gee Fung Sit) +- italicized various glyphs in Latin Extended-B, IPA Extensions, Spacing + Modifier Letters, Phonetic Extension (Supplement) and Super- and Subscripts + in Serif Oblique fonts (by Gee Fung Sit) +- modified outlines, bearings of Hebrew U+05D6, U+05D8, U+05DB, U+05DE, U+05E0, + U+05E1, U+05E2, U+05EA in Sans Book and Oblique, adjusted hinting in Book + based on Yotam Benshalom's comments. (by Denis Jacquerye) +- added Braille Patterns (U+2800-U+28FF) to Serif fonts (by Gee Fung Sit) +- added N'Ko to Sans Book and Bold: U+07C0-U+07E7, U+07EB-U+07F5, U+07F8-U+07FA + (by Eugeniy Meshcheryakov) +- added U+0ED8 (Lao digit 8) to Sans (by Remy Oudompheng) +- added Lao diacritics U+0EB0-0EB9, U+0EBB-0EBC, U+0EC8-0ECD to Mono (by Remy + Oudompheng) +- renamed Serif [Bold] Oblique, make it Italic (by Eugeniy Meshcheryakov) +- added U+29FA-U+29FB to Sans and Sans Mono (by Gee Fung Sit) +- swapped glyphs for Eng U+014A from Sami Eng to African Eng, the latter being + more common (by Denis Jacquerye) +- swapped ae U+00E6 and ae.alt in Serif Italics fonts, thus fixing #8213 (by + Denis Jacquerye) +- minor improvements to Misc. Symbols in Sans (by Gee Fung Sit) +- minor improvements and additions to Sans ExtraLight (by Gee Fung Sit) +- improved instructions for various Cyrillic letters (by Eugeniy Meshcheryakov) +- fixed hinting of theta and chi in Sans Book (by Ben Laenen) +- added Georgian Mkhedruli to Sans, Serif and Mono, ASumtavruli to Sans and + Serif (by Besarion Gugushvili) + +Changes from 2.16 to 2.17 + +- Sans fonts: fix position for certain combinations of Arabic fatha, kasra, + shadda, damma, kasratan, dammatan, fathatan and hamza (by Ben Laenen) +- added 'ae.alt' to Serif Oblique fonts, with design matching shape of italic + 'a' instead of slanted 'a', see bug #8213 (by Denis Jacquerye) +- added super- and subscripts to Serif and Mono: U+1D2C-U+1D2E, U+1D30-U+1D3C, + U+1D3E-U+1D42, U+1D62-U+1D65, U+1D78, U+2071, U+207A-U+207E, U+208A-U+208E, + U+2090-U+2094 (by Gee Fung Sit) + +Changes from 2.15 to 2.16 + +- fixed hinting instructions for digits in DejaVu Sans Oblique, Bold Oblique, + and Serif Book to not change glyph width (by Eugeniy Meshcheryakov) +- added instructions for U+0404, U+0411, U+0413, U+0414, U+0417-U+041B, U+041F, + U+0423, U+0424, U+0426-U+0429, U+042C, U+042E, U+042F, U+0490 in Serif Bold + (by Eugeniy Meshcheryakov) +- added U+0220 and Eng.alt to Serif fonts (by Denis Jacquerye) +- added U+232C, U+2394, U+23E3 to Sans fonts (by John Karp) +- added U+230C-U+230F, U+231C-U+231F to Sans fonts, fixing bug:9547 + (by John Karp) +- adjusted dot below, dot above, dieresis above, dieresis below in Sans fonts + (by Denis Jacquerye) +- added U+2300, U+2301, U+2303, U+2304, U+2305, U+2307, U+2326, U+2327, U+232B, + arrow.base to Sans fonts (by John Karp) +- adjusted dot and dieresis below and above in Serif fonts (by Denis Jacquerye) +- added U+1E1C-U+1E1D to Serif fonts (by Denis Jacquerye) +- added U+22BE, U+22BF (by Wesley Transue) +- added U+2324; modified U+2325: more standard proportions, and matches U+2324 + and U+2387; added U+2387 : flipped U+2325 with standard arrowhead + (by John Karp) +- added Lao digits U+0ED0-0ED7, U+0ED9 (by Remy Oudompheng) +- added to Mono in Arabic block : U+060C, U+0615, U+061B, U+061F, + U+0621-U+063A, U+0640-0655, U+065A, U+0660-066F, U+0674, U+0679-0687, U+0691, + U+0692, U+0698, U+06A1, U+06A4, U+06A9, U+06AF, U+06B5, U+06BA, U+06BE, + U+06C6, U+06CC, U+06CE, U+06D5, U+06F0-06F9 (by Remy Oudompheng) +- added to Mono in Arabic Presentations Forms-A : U+FB52-FB81, U+FB8A-FB95, + U+FB9E, U+FB9F, U+FBAA-FBAD, U+FBE8, U+FBE9, U+FBFC-FBFF (by Remy Oudompheng) +- added to Mono in Arabic Presentations Forms-B : U+FE70-FE74, U+FE76-FEFC, + U+FEFF (by Remy Oudompheng) +- added U+05BA, U+05BE, U+05F3, U+05F4, U+FB1E, U+FB21-U+FB28, U+FB4F to Sans + (by Eugeniy Meshcheryakov) +- added U+2102 to Mono (by Eugeniy Meshcheryakov) +- added U+2983-U+2984 to Sans (by Gee Fung Sit) +- added U+2A2F to Sans, Serif and Mono (by Gee Fung Sit) +- added U+2373-2375, U+237A to Sans (by John Karp) +- converted kern pairs to kern classes with Tavmjong Bah's scripts + (by Denis Jacquerye) +- set ScriptLang of kerning classes to just latn because of Pango bug + (by Denis Jacquerye) +- added DNK to ScriptLang latn otherwise it is excluded, and SRB and MDK to + cyrl (by Denis Jacquerye) +- removed flag 0x80 in generate.pe, otherwise it generates kerning tables some + systems don't like; thus loosing Apple tables (by Denis Jacquerye) +- removed ligature for precomposed legacy characters of Sans Oblique fonts + (by Denis Jacquerye) +- added bearings to en dash U+2013, em dash U+2014 and figure dash U+2012 + by making dashes shorter, preserving character width (by Denis Jacquerye) +- reduced U+031C, U+0325 (ring below), U+0339 to be entirely visible; + added instructions in Sans Book; changed U+1e00-U+1e01 to use new ring below + (by Denis Jacquerye) +- adjusted circumflex below on U+1E12-U+1E13, U+1E18-U+1E19, U+1E3C-U+1E3D, + U+1E4A-U+1E4B, U+1E70-U+1E71, U+1E76-U+1E77 in Sans fonts (by Denis Jacquerye) +- Added U+0ED4, U+0ED5 to DejaVu Sans (by Remy Oudompheng) +- Lao-specific anchors (by Remy Oudompheng) +- added alternate I to match the small capital in Sans (by Gee Fung Sit) + +Changes from 2.14 to 2.15 + +- improved hinting in Sans Oblique to deal with some spacing and inconsistency + issues (by Ben Laenen) +- added anchors to Mono Book, and added GPOS rules for combining diacritics to + show up as zero width glyphs (by Ben Laenen) +- removed U+F21C (PUA), it was copy of U+2C64 from Latin Extended C (by Eugeniy + Meshcheryakov) +- added U+27E6-U+27E7 to Sans (by Gee Fung Sit) +- added U+1407, U+1409, U+140C-U+141B, U+141D-U+1425, U+1427-U+142E, + U+1435-U+1438, U+143A-U+1449, U+1452, U+1454, U+1457-U+1465, U+1467-U+146A, + U+1471, U+1474-U+1482, U+1484-U+1488, U+148F, U+1492, U+14A0, U+14A2, U+14A9, + U+14AC-U+14BA, U+14BC, U+14BD, U+14C6, U+14C9-U+14CF, U+14D1, U+14D2, U+14D9, + U+14DC-U+14E9, U+14EC, U+14F3, U+14F6-U+1504, U+1506, U+1507, U+1510-U+1525, + U+152C, U+152F-U+153D, U+1540, U+1541, U+154E, U+154F, U+1552, U+155B, U+155C, + U+1568, U+1569, U+1574-U+157B, U+157D, U+15A7-U+15AE, U+1646, U+1647 (by + Eugeniy Meshcheryakov) +- fixed several contours to not intersect, use horizontal or vertical tangents, + use integer coordinates, etc in Sans Book (by Denis Jacquerye) +- added U+0496-U+0497 in Serif (by Andrey V. Panov) + +Changes from 2.13 to 2.14 + +- added Philippine peso glyph U+20B1 (by Clayborne Arevalo) +- made U+2012 have the same width as digits, according to Unicode 5.0, + page 206 (by Roozbeh Pournader) +- made all of the "above" combining characters remove the dot of "i", + "j", etc (Soft_Dotted characters), according to Unicode 5.0, + page 228 (by Roozbeh Pournader) +- made U+012F, U+03F3, U+0456, U+0458, U+1E2D, and U+1ECB (all fonts + except Mono), U+0249, U+2148, and U+2149 (Sans and Sans Condensed), + U+0268 (Sans ExtraLight, Serif and Serif Condensed), and U+029D (Serif + and Serif Condensed) respect the Soft_Dotted property (by Roozbeh + Pournader) +- added U+223E, U+223F, U+2240, U+22C2, U+22C3 to Sans (by Remy Oudompheng) +- added U+203D to Serif (by Gee Fung Sit) +- added zero-width glyphs for U+2061-U+2063 to Sans and Serif (by Gee + Fung Sit) +- changed isolated forms of Arabic waw (U+0648, U+0624 and U+06C6) (bug #9432) + (by Ben Laenen) +- added Lao consonants U+0E81, U+0E82, U+0E84, U+0E87, U+0E88, U+0E8A, + U+0E8D, U+0E94-0E97, U+0E99-0E9F, U+0EA1-0EA3, U+0EA5, U+0EA7, U+0EAA, + U+0EAB, U+0EAD-0EAF to Sans Mono (by Remy Oudompheng) +- added U+0200-U+0217, U+0226-U+0229, U+02F3, U+1E00-U+1E07, + U+1E0A-U+1E0B, U+1E18-U+1E1F, U+1E22-U+1E23, U+1E28-U+1E2D, + U+1E3A-U+1E3B, U+1E40, U+1E48-U+1E49, U+1E56, U+1E58-U+1E59, + U+1E5E-U+1E5F, U+1E60, U+1E68-U+1E6B, U+1E6E-U+1E6F, U+1E72-U+1E77, + U+1E86-U+1E8B, U+1E92-U+1E96, U+1EA0-U+1EA1, U+1EF4-U+1EF5 to Mono + (by Ben Laenen) +- renamed uppercase variants of diacritics (macron, breve, double grave, + double acute, inverted breve, dot above) to "uni03XX.case" in Mono + (by Ben Laenen) +- moved uppercase variants of diacritics up in Mono so they properly + vertically align on capitals (by Ben Laenen) +- precomposed glyphs with macron, breve, double grave, double acute, + inverted breve, dot above, macron below, breve below, inverted breve + below, dot below, cedilla, caron below, circumflex below, diaeresis + below, tilde below now reference to combining diacritics instead of + space modifiers in Mono (by Ben Laenen) +- made ring below (U+0325), and half rings below (U+031C and U+0339) + smaller in Mono (by Ben Laenen) +- added U+205F to all fonts (by Roozbeh Pournader) +- added U+035E-U+035F to Sans (by Roozbeh Pournader) +- added empty glyphs for U+034F, U+202A-U+202E, U+2060, U+206A-206F, + U+FE00-U+FE0F to non-Mono fonts (by Roozbeh Pournader) +- added U+2101, U+2107-U+2108, U+210B, U+210C, U+2110, U+2112, U+211B, + U+211F, U+2123, U+2125, U+2128-U+2129, U+212C-U+212D, U+212F, + U+2130-U+2131, U+2133, U+2136-U+213A, U+2141-U+2144, U+2B00-U+2B11, + U+2B20-U+2B23 to Sans (by John Karp) +- reshaped omega (U+03C9) in Mono (by Ben Laenen) +- added U+2205, U+22C6, U+2300-U+2301, U+2303-U+2306, U+230C-U+230F, + U+2312-U+2315, U+231C-U+231F, U+2335, U+2337-U+233E, U+2341-U+2344, + U+2347-U+2348, U+234B-U+234D, U+2349-U+2350, U+2352-U+2354, + U+2357-U+2359, U+235A-U+235C, U+235E-U+2360, U+2363-U+2365, + U+2368-U+2369, U+236B-U+2370, U+2373-U+237A, U+2380-U+2383, + U+2388-U+238B, U+2395 in Mono (by Ben Laenen) + +Changes from 2.12 to 2.13 + +- adjusted U+0198B, U+01B3-U+01B4 in Sans, hinted U+01B4 in Sans Book + (by Denis Jacquerye) +- added U+27F0-U+27FF, U+2906-U+2907, U+290A-U+290B, U+2940-U+2941 to Sans + (by Denis Jacquerye) +- added U+01E6-U+01E9, U+01EE-U+01EF, U+01F4-U+01F5, U+01FC-U+01FF, + U+021E-U+021F, U+0245, U+02BD, U+02C9, U+1E9B, U+2045-U+2046, U+2213, U+22C5, + U+22EF to Sans Mono (by Roozbeh Pournader) +- added U+04FA-U+04FD to Sans (by Michael Everson) +- removed U+2329 and U+232A because of their CJK properties, added U+27E8 + and U+27E9 in their stead, fixing part of bug #9038 (by Roozbeh Pournader) +- corrected and improvised U+0466-U+0469, U+046E-U+0471, U+047C-U+047D, U+0482, + U+0484-U+0486, U+0492-U+0493, U+04B0-U+04B1, U+050C-U+050D, and U+204A + in Sans (by Michael Everson) +- added instructions for U+0402, U+0409, U+040A, U+040B, U+044D, U+040F, + U+0452, U+0459-U+045B, U+045F to Sans Book (by Eugeniy Meshcheryakov) +- made italic shape for U+431, U+432, U+437, U+43B, U+43C, U+43D, U+444, U+447, + U+44D, U+44F, U+459, U+45A in SerifOblique and SerifBoldOblique + (by Andrey V. Panov) +- modified U+024C to match glyph in Unicode chart, fixing bug #9039 + (by Denis Jacquerye) +- made some canonically equivalent characters share the same glyph: + U+02B9 = U+0374, U+0343 = U+0313, and U+0387 = U+00B7 also adjusting U+02BA + to look like double U+02B9, fixing parts of bug #9038 (by Roozbeh Pournader) +- changed shapes for U+0478 and U+0479 in Sans to those in the Unicode charts, + based on a recent decision by Unicode Technical Committee to only use + the digraph form (by Michael Everson) +- adjusted width of NBSP U+00A0 and NNBSP U+202F, fixing bug #8401 + (by Denis Jacquerye) +- fixed several contours to not intersect, use horizontal or vertical tangents, + use integer coordinates, etc (by Roozbeh Pournader and Denis Jacquerye) +- added U+1402, U+1430, U+144D, U+146C, U+148A, U+14A4, U+14C1, U+14D4, U+14EE, + U+1527, U+1545, U+157E, U+158E, U+15AF to Sans (by Eugeniy Meshcheryakov) +- enlarged width of U+459 and U+45A in Serif (by Andrey V. Panov) +- made traditional shape for U+452, U+45B (by Andrey V. Panov) +- added euro sign U+20AC to Sans ExtraLight, making fontconfig recognize + the font as supporting English (by Denis Jacquerye) + +Changes from 2.11 to 2.12 + +- added U+0180 to Serif (by Denis Jacquerye) +- improved and/or hinted Armenian letters U+0542, U+0546, U+0562, + U+0563, U+0564, U+0577, U+0582 in Sans (by Ben Laenen) +- added U+4FE-U+4FF, U+512-U+513, U+2114, U+214E, U+26B2 to Sans + (by Gee Fung Sit) +- adjusted U+0496-U+0497, U+049A-U+04A1 in Sans to match U+0416, + U+041A, U+0436 and U+043A (by Gee Fung Sit) +- Mathematical Operators in Sans: changed U+22C0-U+22C1 to match + other n-ary operators, adjusted U+2203-U+2204, changed U+2220 in + Sans to match the style of U+2221 (by Gee Fung Sit) +- added U+1401, U+1403-U+1406, U+140A, U+140B, U+1426, U+142F, + U+1431-U+1434, U+1438, U+1439, U+1449, U+144A, U+144C, + U+144E-U+1451, U+1455, U+1456, U+1466, U+146B, U+146D-U+1470, + U+1472, U+1473, U+1483, U+1489, U+148B-U+148E, U+1490, U+1491, + U+14A1, U+14A3, U+14A5-U+14A8, U+14AA, U+14AB, U+14BB, U+14C0, + U+14C2-U+14C5, U+14C7, U+14C8, U+14D0, U+14D3, U+14D5-U+14D8, + U+14DA, U+14DB, U+14EA, U+14ED, U+14EF-U+14F2, U+14F4, U+14F5, + U+1405, U+1526, U+1528-U+152B, U+152D, U+152E, U+153E, + U+1542-U+1544, U+1546-U+154D, U+1550, U+1553, U+1555-U+155A, + U+1567, U+156A, U+157C, U+157F-U+1585, U+158A-U+158D, + U+158F-U+1596, U+15A0-U+15A6, U+15DE, U+15E1, U+166E-U+1676 to + Sans (by Eugeniy Meshcheryakov) +- re-enabled Latin ligatures fi, ffi, fl, ffl and ff in Sans + (by Ben Laenen) +- made italic shape for U+436, U+44A, U+44B, U+44C, U+44E, U+45F, + U+463 in SerifOblique and SerifBoldOblique (by Andrey V. Panov) +- fixed sub- and superscript metrics in Condensed Sans (bug #8848) + (by Ben Laenen) +- added U+474, U+475 in Serif (by Andrey V. Panov) +- hinted Greek glyphs U+03B7, U+30B8, U+03B9, U+03C1, U+03C3, + U+03C6 in Mono Book (by Ben Laenen) + +Changes from 2.10 to 2.11 + +- added instructions for Hebrew glyphs (Sans Book, by Eugeniy + Meshcheryakov) +- changed U+01A6 (Latin Yr) after bug #8212, in Sans, Serif and + Sans Mono fonts (by Denis Jacquerye). +- removed instruction for U+2600-U+26A1 (by Mederic Boquien) +- added U+202F and set width of U+00A0 (nobreakingspace) to the + same as U+0020, space (by Denis Jacquerye). +- added and improved instructions for various Cyrillic letters + (by Eugeniy Meshcheryakov) +- Changed U+416, U+42F, U+427 (non-Bold), U+436, U+447 (non-Bold), + U+44F, U+437 (Bold), corrected U+40F, U+414, U+424, U+426, U+429, + U+434, U+438 (Bold), U+446, U+449, U+44D (non-Bold), U+45F in + Sans Mono (by Andrey V. Panov) +- made small corrections to Cyrillic, most appreciable to U+409, + U+413, U+41B, U+427 and U+433, U+434, U+43B, U+447, U+459 + (upright fonts) to Serif (by Andrey V. Panov) +- adjusted bearings of U+410, U+416, U+41A, U+42F, U+436, U+43A, + U+443, U+44F in Serif (by Andrey V. Panov) +- enlarged width of U+44A, U+44B, U+44C, U+463 in Serif + (by Andrey V. Panov) +- added ligature "iacute" as "afii10103" (U+456) "acutecomb" in + Serif (by Andrey V. Panov) +- made italic shape to U+446, U+448, U+449 in Serif (by Andrey V. + Panov) +- added "afii10831" (U+F6C7), "afii10832" (U+F6C8) in Serif (by + Andrey V. Panov) +- new minimum version of fontforge is 20061014 (by Ben Laenen) + +Changes from 2.9 to 2.10: + +- added U+0242, U+024A-U+024B, U+024E-U+024F, U+037C-U+037D, U+0E3F, + U+1D2C-U+1D2E, U+1D30-U+1D42, U+1D5D-U+1D6A, U+1D78, U+1DB8, + U+2090-U+2094, U+20D0-U+20D1, U+2C60-U+2C66, U+2C6B-U+2C6C, U+2C74 and + U+FB29 to Sans (by Gee Fung Sit) +- added Lao glyphs : U+0E81-0E82, U+E084, U+0E87-0E88, U+0E8A, U+0E8D, + U+0E94-0E97, U+0E99-0E9F, U+0EA1-0EA3, U+0EA5, U+0EA7, U+0EAA-0EAB, + U+0EAD-0EB9, U+0EBB-0EBD, U+0EC0-0EC4, U+0EC6, U+0EC8-0ECD, U+0EDC-0EDD + (by Remy Oudompheng) +- fixed U+0193 not showing in Windows (bug #7897) (by Ben Laenen) +- changes to U+222B-222D in Sans Mono (by Remy Oudompheng) +- ported the three remaining currency symbols from Arev (U+20B0, + U+20B2-U+20B3), and replaced one (U+20AF) in Sans (by Lars Naesbye + Christensen) +- corrected U+20A5 in Sans (by Gee Fung Sit) +- merged Double-Struck Letters from Arev: U+2102, U+210D, U+2115, + U+2119-U+211A, U+2124, U+213C-U+2140 (by Gee Fung Sit) +- added U+2308-U+230B and U+2329-U+232A to Sans Mono and Serif faces, + fixed incorrect direction of U+2329 in Sans faces, and improved + U+2308-U+230B in Sans faces per Ben Laenen's suggestions (by David + Lawrence Ramsey) +- added U+06D5 and final form of it (needed for Kurdish) (by Ben Laenen) +- added two special glyphs U+F000 and U+F001 in Sans Book that show the + current ppem size (horizontal and vertical) (by Ben Laenen) +- added U+2318 and U+2325 to Sans Mono faces, based on the Sans versions + (by David Lawrence Ramsey) +- added U+2B14-U+2B1A to all faces except Sans ExtraLight (by David + Lawrence Ramsey) +- respaced all Geometric Shapes characters in Serif faces to match those + in Sans faces again, respaced U+23CF in Sans, Sans ExtraLight, and + Serif faces to match U+25A0 (or Sans in Sans ExtraLight's case) again, + and respaced U+2B12-U+2B13 in Sans and Serif faces to match U+25A1 + again (by David Lawrence Ramsey) +- corrected width of Modifier Small Letters U+1D43-1D5B in Sans Oblique + and U+1D9B-U+1DBF in Sans Oblique and Sans Bold Oblique (by Gee Fung Sit) +- added a bunch of glyphs to Sans ExtraLight (see SVN for details) (by + Gee Fung Sit) +- adjusted Cyrillic descenders in Sans ExtraLight to sync with Sans (by + Gee Fung Sit) +- added U+0242, U+0245 to Serif (by Gee Fung Sit) +- replaced the SHPIX routines which gave them bad spacing at certain + sizes in FreeType for A, V, Z, v and z in Sans Bold (by Ben Laenen) + +Changes from 2.8 to 2.9: + +- DejaVuSansExtraLight.sfd: changed family name from "DejaVu Sans" to + "DejaVu Sans Light" (in case we add a Light weight variant), so legacy + apps that understand only 4 styles are happy. (by Denis Jacquerye) +- added Name ID 16, aka preferred family name, and Name ID 17, aka + preferred style name, so contemporary apps that understand more that 4 + styles can use big fonts families "DejaVu Sans" and "DejaVu Serif". For + those, Extralight and Condensed are just styles not different families. + (by Denis Jacquerye) +- added U+22B6-22BD, U+22C0-22C1, U+22D6-22D7 to Sans. (by Remy Oudompheng) +- added U+037B, U+2184, U+2C67-U+2C6A and U+2C75-U+2C77 to Sans (by Gee + Fung Sit) +- adjusted asteriskmath (U+2217) for consistency with other mathematical + operators in Sans (by Ben Laenen) +- hinted some Armenian capitals in Sans Book (by Ben Laenen) +- added U+0246 - U+0249 (by Ben Laenen) +- BUGFIX : swapped U+224E and U+224F, in Sans, Sans Condensed and Sans Mono + (by Remy Oudompheng) +- adjusted U+20B5 (by Mederic Boquien) +- swapped U+21DA and U+21DB which were in wrong order (by Heikki Lindroos) +- added U+222E-2233, U+239B-23AD, U+2A00-2A02, U+2A0F-2A1C to Sans (by Remy + Oudompheng) +- added U+239B-23AD to Mono (by Remy Oudompheng) +- added U+2024-2025 to Serif (by Mederic Boquien) +- added U+222C-222D, U+2A0C-2A0E to Serif (by Remy Oudompheng) +- added U+2190-21FF to Mono (by Heikki Lindroos) +- added Hebrew glyphs - U+05B0-U+05BD, U+05BF-U+05C3, U+05C6, U+05C7, + U+05D0-U+05EA, U+05F0-U+05F2, U+FB1F, U+FB20, U+FB2A-U+FB36, + U+FB38-U+FB3C, U+FB3E, U+FB40, U+FB41, U+FB43, U+FB44, U+FB46-U+FB4E (by + Gee Fung Sit and Eugeniy Meshcheryakov) +- adjustments for Cyrillic in Sans (by Andrey V. Panov) +- made italic shape for U+0434, U+0456, U+0457 in SerifOblique and Serif + Bold Oblique (by Andrey V. Panov) + +Changes from 2.7 to 2.8: + +- fixed instructions for U+0423, U+0427, U+0447, U+0448 in Serif, so they + look good at large sizes too (by Eugeniy Meshcheryakov) +- added U+FB00 and U+FB03 to U+FB06 to Serif typefaces (by Heikki Lindroos) +- added U+26B0-U+26B1, U+2701-U+2704, U+2706-U+2709, U+270C-U+2727, U+2729 + to U+274B, U+274D, U+274F to U+2752, U+2756, U+2758-U+275E, U+2761 to + U+2775 (by Heikki Lindroos) +- added and improved instructions for Cyrillic letters in Mono and Serif + (Book, by Eugeniy Meshcheryakov) +- rotated U+26B0 (was too small in mono) (by Gee Fung Sit) +- adjusted U+1EDA-U+1EDD, U+1EE8-U+1EEB, capitals using capital specific + accent and moved diacritics to match position on U+00F2 (ograve), etc. + (by Denis Jacquerye) +- added U+20D6, U+20D7 to Sans (by Gee Fung Sit) +- made Armenian ligatures discretionary since the Firefox ligature problem + still isn't fixed (by Ben Laenen) +- moved Armenian hyphen U+058A to a higher position (bug #7436) (by Ben + Laenen) +- hinted Greek glyphs in Sans Bold (by Ben Laenen) +- enabled Arabic lam-alif ligatures when diacritics are used (by Ben Laenen) + +Changes from 2.6 to 2.7: + +- added glyphs needed for Kurdish: U+0695, U+06B5, U+06C6, U+06CE and their + init/medi/fina forms in Sans (by Ben Laenen) +- added U+02CD, U+01F8 - U+01F9, U+1E3E - U+1E3F, U+1E30 - U+1E35, U+1EBC - + U+1EBD, U+1EF8 - U+1EF9 (includes glyphs needed for Yoruba, Maori, Guarani + and Twi) (by Ben Laenen) +- added U+22C8-22CC, U+29CE-29D5, U+2A7D-2AA0, U+2AAE-2ABA, U+2AF9-2AFA to + Sans (by Remy Oudompheng) +- adjusted diacritics on Vietnamese, Pinyin and other characters: + U+01A0-U+01A1, U+01AF-U+01B0, U+01D5-U+01DC, U+01DE-01E1, U+01FA-U+01FB + U+022A-U+022D, U+0230-U+0231, U+1E14-U+1E17, U+1E4C-U+1E53, U+1E78-U+1E7B, + U+1EA4-U+1EF1 in Sans (Book, Bold and Oblique) (by Denis Jacquerye) +- added basic arrows U+2190-U+2193 in Serif, which completes MES-1 compliance + for Serif (by Ben Laenen) +- added U+01E4, U+01E5, U+01FA, U+01FB, U+02BD, U+02C9 and U+02EE to Serif + (by Ben Laenen) +- fixed U+0209 in Serif Bold Oblique (by Ben Laenen) +- adjusted Box Drawing block characters U+2500-257F in Mono to fit character + cell, shifting them up by 416 (Denis Jacquerye) +- redid U+0194 in Sans (by Ben Laenen) +- added U+2217-2218, U+2295-22A1 to Mono (by Remy Oudompheng) +- added U+0462 to Serif (by Andrey V. Panov) +- added U+226C, U+228C-228E, U+2293-2294, U+22F2-22FF to Sans (by Remy + Oudompheng) +- adjusted U+2208-220D in Sans (by Remy Oudompheng) +- improved some Cyrillic glyphs in Mono (by Andrey V. Panov), rewritten + instructions for changed glyphs (by Eugeniy Meshcheryakov) +- added U+1E0E-1E0F, U+1E8E-1E8F to Mono fonts (by Denis Jacquerye). (bug + #7166) +- renamed 'Dotabove' to 'Dotaccent' in Mono Sans Oblique to match other fonts + (by Denis Jacquerye). +- added U+200B-U+200F in Sans faces and Serif faces, U+200B and U+200C were + in Sans already (by Lars Naesbye Christensen) +- added U+2601-U+262F, U+263D, U+263E, U+2648-U+265F, U+2668, U+2670-U+268B, + U+2690-U+269C, U+26A0, U+26A1, U+2794, U+2798-U+27AF, U+27B1-U+27BE to Mono + (by Heikki Lindroos) +- replaced the references with unshifted ones for both κ U+03BA and к U+043A + in Mono Book (by Denis Jacquerye) +- fixing glyph for U+04ED in Mono Book, consisted only of dieresis (by Andrey + V. Panov). + +Changes from 2.5 to 2.6: + +- redid U+2032 - U+2037, U+2057 based on Arev in Sans (by Gee Fung Sit) +- added U+0195, corrected U+039E, U+204B in Sans ExtraLight (by Gee Fung Sit) +- added instructions for some Cyrillic letters in Sans Bold (by Eugeniy + Meshcheryakov) +- added vulgar fractions U+2153-U+215F for Serif, made with references (by + Lars Naesbye Christensen) +- added U+228F-2292, U+2299-22AF, U+22B2-22B5, U+22CD, U+22D8-22ED to Sans + (by Remy Oudompheng) +- added U+2208-220D, U+2238-223D, U+2278-2281, U+228A-228B, U+228F-2292, + U+22CD, U+22DA-22E9 to Mono (by Remy Oudompheng) +- fixed misplaced dot in U+2250 in Mono (by Remy Oudompheng) +- added instructions for some Cyrillic letters in Mono Book and Bold(by + Eugeniy Meshcheryakov) +- minor changes to U+2241, U+2261-2263, U+22A4, U+22A5 in Sans (by Remy + Oudompheng) +- added hinting instructions to lowercase Armenian glyphs in Sans Book (by + Ben Laenen) +- changed U+2208, U+220B to match U+2209 and U+220C in Sans Bold (by Remy + Oudompheng) +- added Braille patterns U+2800-U+28FF to Sans (by Mederic Boquien) +- added instructions for some Cyrillic letters in Serif Book (by Eugeniy + Meshcheryakov) +- renamed BoldOblique fonts to Bold Oblique in TTF Name as originally in + Bitstream Vera fonts (by Denis Jacquerye) +- added hinting instructions to some Latin-B Extended and IPA characters in + Sans Book (by Denis Jacquerye and Ben Laenen) +- adjusted bearings, replaced diacritics, hinted hook and horn for + Vietnamese in Sans Book (by Denis Jacquerye) +- made FAX, TM, TEL, etc. discritionary ligatures in Sans and Serif fonts + (by Denis Jacquerye) +- removed ligatures of precomposed characters in Sans and Serif fonts (by + Denis Jacquerye) +- added U+F208, U+F20A, U+F215-F217, U+F21A-F21B, U+F25F in PUA (from SIL's + PUA, probably in Unicode 5.0): U+0243, U+0244, U+0245, U+024C, U+024D, + U+2C64, (U+2C6D), (U+2C71) +- modified some glyphs in Serif Oblique to make them more italic (by Denis + Jacquerye) + +Changes from 2.4 to 2.5: + +- fixed excessive kerning bug that occurs with Pango (by Denis Jacquerye) +- added U+20AF to Sans and Serif (by Lars Naesbye Christensen) +- regenerated Condensed faces (by Ben Laenen) +- added U+035C-U+035D to Sans, fixed U+0361 (by Denis Jacquerye) +- integrated 255 characters from Arev fonts: Latin Extended-B, Spacing + Modifiers, Combining Diacritical Marks, Cyrillic, Cyrillic supplement, + General Punctuation, Letterlike Symbols, Arrows, Mathematical Operators, + Miscellaneous Technical, Dingbats, Alphabetic Presentation Forms (by Denis + Jacquerye) +- added basic Cyrillic and basic Greek to Sans ExtraLight (by Denis Jacquerye) +- added U+0498, U+049A, U+04AA, U+04AB, U+04AF to Serif (by Eugeniy + Meshcheryakov) +- added U+0494, U+0495, U+0498, U+0499, U+04AA, U+04AB, U+04C3, U+04C4, + U+04C7, U+04C8 to Mono (by Eugeniy Meshcheryakov) +- adjusted weight of U+0256, U+0257, U+0260, U+0272, U+0273, U+0277, U+029B, + U+02A0 and modifed U+028B and U+027A in Mono (by Denis Jacquerye) +- added U+2000-200A to Mono (by Denis Jacquerye) +- added vulgar fractions U+2153 - U+215F to Mono (by Gee Fung Sit) +- adapted metrics of Arabic glyphs so they stay above cut-off height in Sans + (by Ben Laenen) +- fixed mkmk anchors for Arabic diacritics so they stack properly in Sans (by + Ben Laenen) +- fixed weight of lowercase upsilon in Sans Bold, make small adjustment to + lowercase omega in Sans (by Ben Laenen) +- added U+210E (by Mederic Boquien) +- unslanted U+2201, U+221B and U+221C in Sans Oblique (by Mederic Boquien) +- added several mathematical relation symbols to Sans and Mono (U+2241-224C, + U+2250-2255, U+2260-2269, U+226E-2277, U+2282-2287) modified U+223C to match + other tildes, and U+2282-2284 to have the same shape. (by Remy Oudompheng) +- made U+2234-U+2237 refer to U+2219 instead of U+00B7 in Sans (by Mederic + Boquien) +- added U+2238-223B, U+226A-226B, U+2278-2281, U+2288-228B to Sans (by Remy + Oudompheng) +- unslanted and changed reference of U+22C5 from U+00B7 to U+2219 in Sans (by + Mederic Boquien) +- added U+224D-225F, U+226D, U+22C6 to Sans and unslanted U+2219 in Sans + Oblique. (by Remy Oudompheng) +- added U+224D-225F, U+226D to Mono, shifted U+2266-2269 higher upwards and + unslanted U+2219 in Oblique. (by Remy Oudompheng) +- merged Coptic glyphs from Arev 0.2 (by Lars Naesbye Christensen) +- fixed and adjusted various Cyrillic glyphs in Serif (by Andrey V. Panov) +- made fi, fl... ligatures discretionary ligatures (by Ben Laenen) + +Changes from 2.3 to 2.4: + +- added U+04A2, U+04A3, U+04AC - U+04AF, U+04BA, U+04BB, U+04C0 - + U+04C2, U+04CB, U+04CD, U+04D8 - U+04DF, U+04E2 - U+04E5, U+04E8 - U+04F5, + U+04F6 - U+04F9 to Mono (by Eugeniy Meshcheryakov) +- added U+048C, U+048D, U+0494, U+0495, U+049E - U+04A7, U+04AC - + U+04AE, U+04B4- U+04B7, U+04BA, U+04BB, U+04C0 - U+04C4, U+04C7, U+04C8, + U+04CB, U+04CC, U+04D8 - U+04DF, U+04E2 - U+04E5, U+04EC - U+04F9 to Serif + (by Eugeniy Meshcheryakov) +- added U+2134 to Sans (by Gee Fung Sit) +- added U+2080 - U+2089 to all faces (by Gee Fung Sit) +- several minor corrections to Sans (by Gee Fung Sit) +- major corrections to Sans Condensed (by Gee Fung Sit) +- corrected Superscripts and Subscripts in Sans (by Gee Fung Sit) +- corrected anchors of U+0316-U+0319 (by Denis Jacquerye) +- Verajja integrated (by Stepan Roh) +- copied U+2328, U+2600, U+2639-U+263C, U+263F-U+2647, U+2660-U+2667, + and U+2669-U+266F from Sans to Serif, and copied scaled-down versions of + them to Sans Mono (by David Lawrence Ramsey) +- added U+20B4 to all faces (by Eugeniy Meshcheryakov) +- added more minor positional adjustments to U+2638 in all faces to + match the other miscellaneous symbols in Verajja, and rescale it in Sans + Mono so that it looks better (by David Lawrence Ramsey) +- added U+2242, U+2243 and U+22A4 (by Mederic Boquien) +- corrected U+2245 in Sans (by Mederic Boquien) +- added U+0221, U+0234-0236 (by Denis Jacquerye) +- added in Arabic block to Sans: U+060C, U+0615, U+061B, U+061F, U+0621 +- U+063A, U+0640 - U+0655, U+0660 - U+066F, U+0679 - U+0687, U+0698, U+06A1, + U+06A9, U+06AF, U+06BA, U+06BF, U+06CC, U+06F0 - U+06F9 (by Ben Laenen) +- added in Arabic Presentation Forms A to Sans: U+FB52 - U+FB81, U+FB8A +- U+FB95, U+FB9E - U+FB9F, U+FBE8 - U+FBE9, U+FBFC - U+FBFF (by Ben Laenen) +- added complete Arabic Presentation Forms B to Sans: U+FE70 - U+FE74, + U+FE76 - U+FEFC, U+FEFF (by Ben Laenen) +- added complete Greek Extended block to Mono (by Ben Laenen) +- modified Greek capitals with tonos in Mono (by Ben Laenen) +- added U+01C4-01CC, U+01D5, U+01DE, U+01E0-U+01E1, U+01E6-U+01E9, + U+01EE-U+01F5, U+01F8-U+0217, U+021E-U+021F, U+0226-U+022A, U+022C to Serif + (by Denis Jacquerye) +- adjusted U+043B and U+044F in Serif (by Denis Jacquerye) +- added U+2000-U+200A (by Denis Jacquerye) +- added U+1E00-U+1E0B, U+1E0E-U+1E11, U+1E14-U+1E1C, U+1E1E-U+1E23, + U+1E26-U+1E2D, U+1E30-U+1E35, U+1E3A-U+1E3B, U+1E3E-U+1E40, U+1E48-U+1E49, + U+1E50-U+1E56, U+1E58-U+1E59, U+1E5E-U+1E60, U+1E68-U+1E6B, U+1E6E-U+1E6F, + U+1E72-U+1E7D, U+1E86-U+1E9B, U+1EA0-U+1EA3, U+1EAC-U+1EB7, U+1EBA-U+1EBD, + U+1EC6-U+1ECF, U+1ED8-U+1ED9, U+1EE6-U+1EE7, U+1EF4-U+1EF9 to Serif (by + Denis Jacquerye) +- added U+048E, U+048F, U+049C-U+049F, U+04B8, U+04B9, U+04BC-U+04BF, + U+04C3, U+04C4 to Sans (by Eugeniy Meshcheryakov) +- added DejaVu Sans Extra Light (by Denis Jacquerye) +- Adjusted underline position for (hopefully) improved legibility in + Sans, Serif, Mono (Tim May) +- added auto-generated DejaVu LGC (by Stepan Roh) + +Changes from 2.2 to 2.3: + +- fixed bug U+042B and U+044B behave badly in Sans Bold or Oblique (by + Keenan Pepper) +- added and improved TrueType instructions and related settings (by + Keenan Pepper) +- added U+04D0-U+04D7, U+04E6, U+04E7 to Mono (by Eugeniy Meshcheryakov) +- added U+048A - U+048D, U+0498, U+0499, U+04AA, U+04AB, U+04B0, U+04B1, + U+04C0, U+04C9, U+04CA, U+04CE, U+04CD, U+04DA, U+04DB, U+04DE, U+04DF, + U+04E2 - U+04E5, U+04EC - U+04F8, U+04F9 to Sans (by Eugeniy Meshcheryakov) +- added U+04E0, U+04E1 to all faces (by Eugeniy Meshcheryakov) +- added Greek Extended to Sans and Serif: U+1F00-U+1F15, U+1F18-U+1F1D, + U+1F20-U+1F45, U+1F48-U+1F4D, U+1F50-U+1F57, U+1F59, U+1F5B, U+1F5D, + U+1F5F-U+1F7D, U+1F80-U+1FB4, U+1FB6-U+1FC4, U+1FC6-U+1FD3, U+1FD6-U+1FDB, + U+1FDD-U+1FEF, U+1FF2-U+1FF4, U+1FF6-U+1FFE (by Ben Laenen) +- added Greek variant letterforms, archaic letters and symbols to Mono: + U+03D0-U+03E1, U+03F0-U+03FF (by Ben Laenen) +- added Armenian block and Armenian ligatures to Sans (U+0531 - U+0556, + U+0559 - U+055F, U+0561 - U+0587, U+0589 - U+058A, U+FB13 - U+FB17) (by Ben + Laenen) +- redid some Greek characters in Sans and Mono to make them look better + and to correct some errors (by Ben Laenen) +- added U+27E0 to all faces (by David Lawrence Ramsey) +- added underscore (U+005F) consistency fixes: extended the Sans Mono + and Sans Mono Oblique underscores to touch both horizontal edges, and + reduced the height of the Sans Bold Oblique underscore to match the Sans + Bold underscore (by David Lawrence Ramsey) +- added underscore (U+005F) derivatives and consistency fixes for them: + made U+0332 a reference to underscore at Denis Jacquerye's suggestion; made + U+0333 two references to underscore; made U+033F two references to U+203E; + added U+2017 as two references to underscore, and made U+0333 a reference to + it; and added U+203E as a reference to underscore, and made U+0305 a + reference to it (by David Lawrence Ramsey) +- added U+201B, U+2220, U+2320-U+2321, U+23AE, U+23CF, all remaining + Geometric Shapes glyphs (U+25A0-U+25C9, U+25CB-U+25D7, U+25D9-U+25E5, + U+25E7-U+25FF), and U+2B12-U+2B13 to all faces (by David Lawrence Ramsey) +- added minor positional adjustments to U+2638 in all faces (by David + Lawrence Ramsey) +- added U+201F to Sans Mono and Serif faces (by David Lawrence Ramsey) +- added U+01B7, U+01F6, U+0464 - U+0465, U+2160 - U+2180, U+2183, + U+220A, U+220D, U+2329, U+232A, U+2422, U+27E8 - U+27EB, U+2680 - U+2685 to + Sans (by Gee Fung Sit ???) +- added U+2116 to Sans and Serif (by Gee Fung Sit) +- changed florin sign U+0192 in Sans (by Gee Fung Sit) +- added anchor points to some glyphs (by Denis Jacquerye) +- adjusted height of IPA superscripts U+02B0-02B8, U+02C0-02C1, + U+02E0-02E4, U+207F to match with height of U+00B2 (by Denis Jacquerye) +- added U+0184-U+0185, U+019C, U+019F, U+01A0-U+01A3, U+01A6, U+01AA, + U+01AF-U+01B0, U+01B2-U+01B4, U+01B7-U+01B8, U+01BC-U+01BC, U+0224-U+0225, + U+023A-U+0240, U+1D16-U+1D17, U+1D1D-U+1D1E, U+1D43-U+1D5B, U+1D7B, + U+1D85,U+1D9B-1DB7, U+1DB9-U+1DBF, U+20A6 to all fonts (by Denis Jacquerye) +- added added U+0182, U+018B, U+018E, U+01A0-U+01A1, U+01B1, U+01B9, + U+01C0-U+01C3, U+0238-U+0239, U+1D02, U+1D08-U+1D09, U+1D14, U+1D1F, U+1D77 + to Serif and Mono (by Denis Jacquerye) +- added U+0181, U+0183, U+0187-U+0188, U+018A-U+018F, U+0191, U+0193, + U+0195-U+019B, U+019D-U+019E, U+01A4-U+01A5, U+01AC-U+01AE, U+01B5-U+01B6, + U+01B9, U+01BB, U+01F6 to Serif (by Denis Jacquerye) +- added U+0181, U+0187-U+0188, U+018A, U+018D, U+018F, U+0191, U+0193, + U+0195-U+019F, U+01A4-01A5, U+01AC-01AD, U+01B5-U+01B6, U+1BB, U+01F6, + U+01D7-U+01DC, U+0238-U+0239, U+0241 to Mono (by Denis Jacquerye) +- added to Mono and Serif (by Denis Jacquerye) + +Changes from 2.1 to 2.2: + +- reworked the vertical orientation of the Blocks Elements characters + in all faces to remove their overly large descenders, in order to fix + problems with e.g. terminal emulators (by David Lawrence Ramsey) +- copied bullet in Sans faces to Serif faces for consistency (by David + Lawrence Ramsey) +- added U+2023, U+25D8, U+25E6, and U+29EB to all faces (by David + Lawrence Ramsey) +- added U+1EB8, U+1EB9, U+1ECA - U+1ECD, U+1EE4, U+1EE5 (by Tim May) +- added U+01DD, U+02BE, U+02BF, U+02D3 to all, changed U+02D2 in + non-Condensed and U+1EE5 in Serif (by Tim May) +- fixed U+01CE, replacing wrong circumflex by caron (by Denis Jacquerye) +- added anchor points to some glyphs (by Denis Jacquerye) +- added U+20B5 (by Denis Jacquerye) +- added U+0181 - U+0183, U+0187, U+0188, U+018A - U+018D, U+0191, + U+0193, U+0195 - U+019B, U+019D, U+019E, U+01A4, U+01A7 - U+01A9, U+01AB - + U+01AE, U+01B1, U+01B5, U+01B6, U+01BB, U+01C0 - U+01C3, U+01F1 - U+01F3, + U+0238, U+0239, U+1D02, U+1D08, U+1D09, U+1D14, U+1D1F, U+1D77, U+2103, + U+2126, U+2127, U+212A, U+212B, U+2132, U+214B, U+2210, U+2217, U+2218, + U+2A0C - U+2A0E, U+FB00, U+FB03 and U+FB04 to Sans (by Gee Fung Sit) +- added U+01A9, U+01C3 and U+2126 to Mono and Serif (by Gee Fung Sit) +- adjusted bearings of U+028B in Sans (by Gee Fung Sit) +- added U+018F, U+0494-U+0497, U+04A0-U+04A7, U+04AC-U+04AF, + U+04B4-U+04B7, U+04BA-U+04BB, U+04C1-U+04C2, U+04C5-U+04C8, U+04CB-U+04CC, + U+04D0-U+04D9, U+04DC-U+04DD, U+04E6-U+04EB to Sans (by Eugeniy + Meshcheryakov) +- replaced with references U+0391-U+0393, U+0395-U+0397, U+0399, U+039A, + U+039C, U+039D, U+039F-U+03A1, U+03A4, U+03A5, U+03A7, U+03BF, U+03DC, + U+0405, U+0406, U+0408, U+0410, U+0412, U+0415, U+0417, U+041A, + U+041C-U+041E, U+0420-U+0422, U+0425, U+0430, U+0435, U+043E, U+0440, + U+0441, U+0443, U+0445, U+0455-U+0458 in Serif and Mono (by Eugeniy + Meshcheryakov) +- added U+04D0-U+04D7, U+04E6-U+04EB to Serif (by Eugeniy Meshcheryakov) +- added U+212A and U+212B to the rest of the faces (by Lars Naesbye + Christensen) +- added U+2318 and U+2325 to Sans and Serif (by Lars Naesbye Christensen) +- added and improved TrueType instructions and related settings (by + Keenan Pepper) +- completed basic Greek alphabet: added U+0374-U+0375, U+037A, U+037E, + U+0384-U+038A, U+038C, U+038E-U+0390, U+03AC-U+03BF, U+03C1-U+03CE (by Ben + Laenen) +- added U+2070 and U+2074-U+2079 (by Mederic Boquien) + +Changes from 2.0 to 2.1: + +*** Be aware that names of some TTF files changed since version 2.0. *** + +- added U+0323, U+1E0C, U+1E0D, U+1E24, U+1E25, U+1E36 - U+1E39, U+1E42, + U+1E43, U+1E46, U+1E47, U+1E5A - U+1E5D, U+1E62, U+1E63, U+1E6C, U+1E6D, + U+1E7E, U+1E7F (by Tim May) +- fixed bug where GNOME applications used Mono Bold Oblique instead of + Mono Oblique (by Keenan Pepper) +- added and improved TrueType instructions and related settings (by + Keenan Pepper) +- added U+1E41, U+1E57, U+1E61 (by Sander Vesik) +- added U+0189, U+0309, U+0313, U+0314, U+031A, U+031B, U+0327, U+0328, + U+032B, U+0333, U+033C (by Denis Jacquerye) +- adjusted and fixed U+0186, U+0254, U+0291, U+0316 - U+0319, U+031C - + U+0320, U+0323 - U+0326, U+0329 - U+032A, U+032C - U+0332, U+0339 - U+033B, + U+033E, U+033F (by Denis Jacquerye) +- fixed U+1E12, U+1E3C, U+1E4A, U+1E70 to have normal below diacritics + (by Denis Jacquerye) +- fixed U+1E82, U+1E84 and U+1EF2 to have uppercase above diacritics (by + Denis Jacquerye) +- added anchor points to some glyphs (by Denis Jacquerye) +- dropped "-Roman" from font names - affects both internal TTF names and + names of generated files (by Stepan Roh) +- attempt to fix bug Vertical spacing too big for Mono by exchanging + LineGap and OS2TypoLinegap values (proofed by Stefan Rank) +- added Greek capitals U+0391 - U+03A1, U+03A3 - U+03A9, U+03AA, U+03AB + in Mono (by Ben Laenen) +- added the per ten thousand sign U+2031 (by Mederic Boquien) +- added U+2207, U+221D, U+221F, U+2227 - U+222A, and U+2261 (by David + Lawrence Ramsey) +- new logo (by Gee Fung Sit) +- added U+0180, U+018E, U+201F, U+2024, U+2025, U+203D, U+2200, U+2203, + U+2213, U+222C, U+222D, U+2263 to Sans (by Gee Fung Sit) + +Changes from 1.15 to 2.0: + +- "Italized" basic glyphs in all Serif Oblique and their Condensed faces + (by David Jez) +- added and improved TrueType instructions and related settings (by Keenan + Pepper) +- added anchor points to some glyphs (by Denis Jacquerye) +- many new spacing and combining accents (by Denis Jacquerye) +- smart substitutions for transforming i and j to dottless form and for + using uppercase diacritics (by Denis Jacquerye) +- fixed remaining erroneously slanted characters in Serif Oblique faces (by + David Lawrence Ramsey) +- copied bullet in Sans faces to Sans Oblique faces for consistency (by + David Lawrence Ramsey) +- added U+203C and U+2047-U+2049 (by David Lawrence Ramsey) +- added Greek glyphs to Serif (by Ben Laenen, Condensed merge by David Jez) +- fixed bug LTR glyphs behaving like RTL (by Ben Laenen) +- fixed wrong glyph directions (by David Jez) +- fixed repositioned accents in Condensed faces (by David Jez) + +Changes from 1.14 to 1.15: + +- added and improved TrueType instructions and related settings (by Keenan + Pepper) +- fixed U+2302, U+2319 (by David Lawrence Ramsey) +- fixed yet another monospace bug (by Stepan Roh) +- fixed potential "too big ascender/descender" bug (by Stepan Roh) +- fixed U+026E and U+028E (by Denis Jacquerye) +- added U+0186, U+0190, U+0300 - U+0304, U+0306 - U+0308, U+030A - U+030C, + U+0321, U+0322 (by Denis Jacquerye) +- added rest of Block Elements: U+2591 - U+2593 (by David Lawrence Ramsey) +- added U+2311, U+237D and U+2638 (by David Lawrence Ramsey) +- added U+01CD - U+01D4 (by Denis Jacquerye) +- fixed accents of U+00F2 - U+00F6 by replacing them with references in Mono + Bold (by David Jez) +- added U+0490, U+0491 (by Eugeniy Meshcheryakov) +- added hints to U+0404 and U+0454 in Sans (by Eugeniy Meshcheryakov) +- completed Greek glyphs from U+0370 to U+03CF in Serif (by Ben Laenen) +- fixed shape of U+0255 in Sans Bold and Sans Bold Oblique (by Denis + Jacquerye) + +Changes from 1.13 to 1.14: + +- fixed bug where Mono faces were not recognized as fixed pitch in Windows + by correcting Venda glyphs (by David Jez) +- added and improved TrueType instructions (by Keenan Pepper) +- added 6 Uzbekian glyphs (by Mashrab Kuvatov) +- added Greek glyphs to Sans and Serif, changed pi and omega to fit in (by + Ben Laenen) +- added IPA and related superscript glyphs (by Denis Jacquerye) +- fixed buggy Venda glyphs (by David Lawrence Ramsey and Stepan Roh) +- added U+2302, U+2310, U+2319 (by David Lawrence Ramsey) +- fixed slanted U+00AC in Serif Oblique faces (by David Lawrence Ramsey) +- added 29 glyphs from Block Elements (by David Lawrence Ramsey) + +Changes from 1.12 to 1.13: + +- removed all stems (PS hints) (requested by David Jez) +- added U+01D6, U+01DF, U+022B, U+022D and U+0231 (by Sander Vesik) +- added 10 Venda glyphs (by Dwayne Bailey) +- fixed bug when fonts had no name on Microsoft Windows (by Stepan Roh) +- updated 'missing' glyph U+FFFD (by David Jez) +- set TTF flag fsType to 'Installable Embedding' (= unrestricted usage) + (idea by C. Tiffany) + +Changes from 1.11 to 1.12: + +- added long s (by James Cloos) +- prettier comma accent in gcommaaccent (by David Jez) +- added Hbar, hbar, kgreenlandic, napostrophe, Eng, eng, Tbar, tbar, + afii57929 (by David Jez) +- changed Iogonek, iogonek, IJ, ij to look better (by David Jez) +- glyph uni0237 renamed to dotlessj (requested by David Jez) +- fixed accents for dcaron, lcaron, tcaron, Uogonek, uogonek in Serif (by + David Jez) +- added U+2500 - U+257F box drawing glyphs to Sans Mono (by David Jez) +- fixed accents in Wcircumflex, Ycircumflex and Zdotaccent (by David Jez) +- extra kerning for F (by Sander Vesik) +- added 'missing' glyph U+FFFD (by David Jez) + +Changes from 1.10 to 1.11: + +- kerning updates (by Sander Vesik) +- added Iogonek, iogonek, IJ, ij, Uogonek, uogonek (from SuSE standard fonts + by Adrian Schroeter, SuSE AG) +- added Gcommaaccent, gcommaaccent, Kcommaaccent, kcommaaccent, + Lcommaaccent, lcommaaccent, Ncommaaccent, ncommaaccent, Rcommaaccent, + rcommaaccent (by Stepan Roh) + +Changes from 1.9 to 1.10: + +- added U+022E, U+022F (by Sander Vesik) +- kerning updates for DejaVu Sans (by Sander Vesik) +- fixed too wide cyrillic glyphs in DejaVu Sans Mono (by Valentin Stoykov) +- fixed ligatures bug in Mono (by Stepan Roh) + +Changes from 1.8 to 1.9: + +- integrated Arev Cyrillics (by Danilo Segan) +- added U+01EA, U+01EB, U+01EC, U+01ED (by Sander Vesik) + +Changes from 1.7 to 1.8: + +- fixed accents in Serif Oblique and Serif Bold Oblique (by Stepan Roh) + +Changes from 1.6 to 1.7: + +- added automatically generated Condensed typefaces (by Stepan Roh) + +Changes from 1.5 to 1.6: + +- monospace bug fixed (by Stepan Roh) +- incorrect Bitstream foundry assigned by fontconfig and KDE Font Installer +fixed (by Stepan Roh) +- added automatically generated Oblique version of Serif typefaces (by +Stepan Roh) +- corrected cyrillic D and d (by Danilo Segan and David Jez) +- fixed accents position in Oblique version of Serif typefaces (by Danilo +Segan and Sander Vesik) +- fixed incorrect computation of OS2Win* fields (by Stepan Roh) +- added visiblespace U+2423 (by David Jez) +- fixed 'line height' bug by fixing ascender and descender values (by David +Jez and Stepan Roh) +- fixed part of 'worse than Vera' bug (by Peter Cernak) +- smaller comma accent U+0326 (by David Jez) + +Changes from 1.4 to 1.5: + +- added Cyrillics (96 characters) and Dcroat to the rest of typefaces (by +Danilo Segan) +- fixed bugs in some Cyrillic characters, some of them reported by Sander +Vesik (by Danilo Segan) +- added U+0100, U+0101, U+0112, U+0113, U+012A, U+012B, U+014C, U+014D, +U+016A, U+016B, U+01E2, U+01E3, U+0232 and U+0233 (by Sander Vesik) +- added Romanian characters (by Misu Moldovan) +- added U+0108, U+0109, U+010A, U+010B, U+0114, U+0115, U+0116, U+0117, +U+011C, U+011D, U+0120, U+0121, U+0124, U+0125, U+0128, U+0129, U+012C, +U+012D, U+0134, U+0135, U+014E, U+014F, U+0150, U+0151, U+015C, U+015D, +U+0168, U+0169, U+016C, U+016D, U+0170, U+0171 and U+0237 (by James +Crippen) +- added U+02BB, U+2010, U+2011, U+2012 and U+2015 (by Stepan Roh) + +Changes from 1.3 to 1.4: + +- added Polish characters (Aogonek, aogonek, Eogonek, eogonek, Nacute, +nacute, Sacute, sacute, Zacute, zacute, Zdotaccent, zdotaccent) (by Stepan +Roh) + +Changes from 1.2 to 1.3: + +- added Cyrillics (96 characters) and Dcroat to Sans typefaces (by Danilo +Segan from his BePa fonts) + +Changes from 1.1 to 1.2: + +- added Ldot, ldot, Wcircumflex, wcircumflex, Ycircumflex, ycircumflex, + Wgrave, wgrave, Wacute, wacute, Wdieresis, wdieresis, Ygrave and ygrave + (from The Olwen Font Family 0.2 by Dafydd Harries) + +Changes from 1.0 to 1.1: + +- added Lacute, lacute, Lcaron, lcaron, Racute and racute (by Peter Cernak) + +Changes from 0.9.4 to 1.0: + +- none, just changed version and updated README + +Changes from 0.9.3 to 0.9.4: + +- fixed TTF generation (kerning tables were missing) + +Changes from 0.9.2 to 0.9.3: + +- kerning of added characters +- proper caron shape for dcaron in Mono (by Ondrej Koala Vacha) +- minor visual changes + +Changes from 0.9.1 to 0.9.2: + +- internal bugged version + +Changes from 0.9 to 0.9.1: + +- proper caron shape for dcaron and tcaron +- minor visual changes + +$Id: NEWS 2423 2010-08-22 15:48:31Z moyogo $ + --- /dev/null +++ b/tcpdf/fonts/dejavu-fonts-ttf-2.32/README @@ -1,1 +1,60 @@ +DejaVu fonts 2.32 (c)2004-2010 DejaVu fonts team +------------------------------------------------ +The DejaVu fonts are a font family based on the Bitstream Vera Fonts +(http://gnome.org/fonts/). Its purpose is to provide a wider range of +characters (see status.txt for more information) while maintaining the +original look and feel. + +DejaVu fonts are based on Bitstream Vera fonts version 1.10. + +Available fonts (Sans = sans serif, Mono = monospaced): + +DejaVu Sans Mono +DejaVu Sans Mono Bold +DejaVu Sans Mono Bold Oblique +DejaVu Sans Mono Oblique +DejaVu Sans +DejaVu Sans Bold +DejaVu Sans Bold Oblique +DejaVu Sans Oblique +DejaVu Sans ExtraLight (experimental) +DejaVu Serif +DejaVu Serif Bold +DejaVu Serif Bold Italic (experimental) +DejaVu Serif Italic (experimental) +DejaVu Sans Condensed (experimental) +DejaVu Sans Condensed Bold (experimental) +DejaVu Sans Condensed Bold Oblique (experimental) +DejaVu Sans Condensed Oblique (experimental) +DejaVu Serif Condensed (experimental) +DejaVu Serif Condensed Bold (experimental) +DejaVu Serif Condensed Bold Italic (experimental) +DejaVu Serif Condensed Italic (experimental) + +All fonts are also available as derivative called DejaVu LGC with support +only for Latin, Greek and Cyrillic scripts. + +For license information see LICENSE. What's new is described in NEWS. Known +bugs are in BUGS. All authors are mentioned in AUTHORS. + +Fonts are published in source form as SFD files (Spline Font Database from +FontForge - http://fontforge.sf.net/) and in compiled form as TTF files +(TrueType fonts). + +For more information go to http://dejavu.sourceforge.net/. + +Characters from Arev fonts, Copyright (c) 2006 by Tavmjong Bah: +--------------------------- +U+01BA, U+01BF, U+01F7, U+021C-U+021D, U+0220, U+0222-U+0223, +U+02B9, U+02BA, U+02BD, U+02C2-U+02C5, U+02d4-U+02D5, +U+02D7, U+02EC-U+02EE, U+0346-U+034E, U+0360, U+0362, +U+03E2-03EF, U+0460-0463, U+0466-U+0486, U+0488-U+0489, U+04A8-U+04A9, +U+0500-U+050F, U+2055-205E, U+20B0, U+20B2-U+20B3, U+2102, U+210D, U+210F, +U+2111, U+2113, U+2115, U+2118-U+211A, U+211C-U+211D, U+2124, U+2135, +U+213C-U+2140, U+2295-U+2298, U+2308-U+230B, U+26A2-U+26B1, U+2701-U+2704, +U+2706-U+2709, U+270C-U+274B, U+2758-U+275A, U+2761-U+2775, U+2780-U+2794, +U+2798-U+27AF, U+27B1-U+27BE, U+FB05-U+FB06 + +$Id: README 2423 2010-08-22 15:48:31Z moyogo $ + --- /dev/null +++ b/tcpdf/fonts/dejavu-fonts-ttf-2.32/langcover.txt @@ -1,1 +1,245 @@ +This is the language coverage file for DejaVu fonts +($Id$) + Sans Serif Sans Mono +aa Afar 100% (62/62) 100% (62/62) 100% (62/62) +ab Abkhazia 100% (90/90) 93% (84/90) 84% (76/90) +af Afrikaans 100% (69/69) 100% (69/69) 100% (69/69) +ak Akan 100% (73/73) 100% (73/73) 100% (73/73) +am Amharic (0/264) (0/264) (0/264) +an Aragonese 100% (66/66) 100% (66/66) 100% (66/66) +ar Arabic 100% (36/36) (0/36) 100% (36/36) +as Assamese (0/64) (0/64) (0/64) +ast Asturian/Bable/Leonese/Asturleonese 100% (66/66) 100% (66/66) 100% (66/66) +av Avaric 100% (67/67) 100% (67/67) 100% (67/67) +ay Aymara 100% (60/60) 100% (60/60) 100% (60/60) +az-az Azerbaijani in Azerbaijan 100% (66/66) 100% (66/66) 100% (66/66) +az-ir Azerbaijani in Iran 100% (40/40) (0/40) 100% (40/40) +ba Bashkir 100% (82/82) 100% (82/82) 97% (80/82) +be Byelorussian 100% (68/68) 100% (68/68) 100% (68/68) +ber-dz Berber in Algeria 100% (70/70) 100% (70/70) 100% (70/70) +ber-ma Berber in Morocco 100% (32/32) (0/32) (0/32) +bg Bulgarian 100% (60/60) 100% (60/60) 100% (60/60) +bh Bihari (Devanagari script) (0/68) (0/68) (0/68) +bho Bhojpuri (Devanagari script) (0/68) (0/68) (0/68) +bi Bislama 100% (58/58) 100% (58/58) 100% (58/58) +bin Edo or Bini 100% (78/78) 100% (78/78) 100% (78/78) +bm Bambara 100% (60/60) 100% (60/60) 100% (60/60) +bn Bengali (0/63) (0/63) (0/63) +bo Tibetan (0/95) (0/95) (0/95) +br Breton 100% (64/64) 100% (64/64) 100% (64/64) +bs Bosnian 100% (62/62) 100% (62/62) 100% (62/62) +bua Buriat (Buryat) 100% (70/70) 100% (70/70) 100% (70/70) +byn Blin/Bilin (0/255) (0/255) (0/255) +ca Catalan 100% (74/74) 100% (74/74) 100% (74/74) +ce Chechen 100% (67/67) 100% (67/67) 100% (67/67) +ch Chamorro 100% (58/58) 100% (58/58) 100% (58/58) +chm Mari (Lower Cheremis / Upper Cheremis) 100% (76/76) 100% (76/76) 100% (76/76) +chr Cherokee (0/85) (0/85) (0/85) +co Corsican 100% (84/84) 100% (84/84) 100% (84/84) +crh Crimean Tatar/Crimean Turkish 100% (68/68) 100% (68/68) 100% (68/68) +cs Czech 100% (82/82) 100% (82/82) 100% (82/82) +csb Kashubian 100% (74/74) 100% (74/74) 100% (74/74) +cu Old Church Slavonic 100% (103/103) 86% (89/103) 78% (81/103) +cv Chuvash 100% (74/74) 100% (74/74) 100% (74/74) +cy Welsh 100% (78/78) 100% (78/78) 100% (78/78) +da Danish 100% (70/70) 100% (70/70) 100% (70/70) +de German 100% (59/59) 100% (59/59) 100% (59/59) +dv Divehi/Dhivehi/Maldivian (0/49) (0/49) (0/49) +dz Dzongkha (0/95) (0/95) (0/95) +ee Ewe 100% (99/99) 100% (99/99) 100% (99/99) +el Greek 100% (69/69) 100% (69/69) 100% (69/69) +en English 100% (72/72) 100% (72/72) 100% (72/72) +eo Esperanto 100% (64/64) 100% (64/64) 100% (64/64) +es Spanish 100% (66/66) 100% (66/66) 100% (66/66) +et Estonian 100% (64/64) 100% (64/64) 100% (64/64) +eu Basque 100% (56/56) 100% (56/56) 100% (56/56) +fa Persian 100% (40/40) (0/40) 100% (40/40) +fat Fanti 100% (73/73) 100% (73/73) 100% (73/73) +ff Fulah (Fula) 100% (62/62) 100% (62/62) 100% (62/62) +fi Finnish 100% (62/62) 100% (62/62) 100% (62/62) +fil Filipino 100% (84/84) 100% (84/84) 100% (84/84) +fj Fijian 100% (52/52) 100% (52/52) 100% (52/52) +fo Faroese 100% (68/68) 100% (68/68) 100% (68/68) +fr French 100% (84/84) 100% (84/84) 100% (84/84) +fur Friulian 100% (66/66) 100% (66/66) 100% (66/66) +fy Frisian 100% (75/75) 100% (75/75) 100% (75/75) +ga Irish 100% (80/80) 100% (80/80) 100% (80/80) +gd Scots Gaelic 100% (70/70) 100% (70/70) 100% (70/70) +gez Ethiopic (Geez) (0/218) (0/218) (0/218) +gl Galician 100% (66/66) 100% (66/66) 100% (66/66) +gn Guarani 100% (70/70) 100% (70/70) 100% (70/70) +gu Gujarati (0/68) (0/68) (0/68) +gv Manx Gaelic 100% (54/54) 100% (54/54) 100% (54/54) +ha Hausa 100% (60/60) 100% (60/60) 100% (60/60) +haw Hawaiian 100% (63/63) 100% (63/63) 100% (63/63) +he Hebrew 100% (27/27) (0/27) (0/27) +hi Hindi (Devanagari script) (0/68) (0/68) (0/68) +hne Chhattisgarhi (0/68) (0/68) (0/68) +ho Hiri Motu 100% (52/52) 100% (52/52) 100% (52/52) +hr Croatian 100% (62/62) 100% (62/62) 100% (62/62) +hsb Upper Sorbian 100% (72/72) 100% (72/72) 100% (72/72) +ht Haitian/Haitian Creole 100% (56/56) 100% (56/56) 100% (56/56) +hu Hungarian 100% (70/70) 100% (70/70) 100% (70/70) +hy Armenian 100% (77/77) (0/77) (0/77) +hz Herero 100% (57/57) 100% (57/57) 100% (57/57) +ia Interlingua 100% (52/52) 100% (52/52) 100% (52/52) +id Indonesian 100% (54/54) 100% (54/54) 100% (54/54) +ie Interlingue 100% (52/52) 100% (52/52) 100% (52/52) +ig Igbo 100% (58/58) 100% (58/58) 100% (58/58) +ii Sichuan Yi/Nuosu (0/1165) (0/1165) (0/1165) +ik Inupiaq (Inupiak, Eskimo) 100% (68/68) 100% (68/68) 100% (68/68) +io Ido 100% (52/52) 100% (52/52) 100% (52/52) +is Icelandic 100% (70/70) 100% (70/70) 100% (70/70) +it Italian 100% (72/72) 100% (72/72) 100% (72/72) +iu Inuktitut 100% (161/161) (0/161) (0/161) +ja Japanese (0/6537) (0/6537) (0/6537) +jv Javanese 100% (56/56) 100% (56/56) 100% (56/56) +ka Georgian 100% (33/33) 100% (33/33) 100% (33/33) +kaa Kara-Kalpak (Karakalpak) 100% (78/78) 100% (78/78) 100% (78/78) +kab Kabyle 100% (70/70) 100% (70/70) 100% (70/70) +ki Kikuyu 100% (56/56) 100% (56/56) 100% (56/56) +kj Kuanyama/Kwanyama 100% (52/52) 100% (52/52) 100% (52/52) +kk Kazakh 100% (77/77) 100% (77/77) 100% (77/77) +kl Greenlandic 100% (81/81) 100% (81/81) 100% (81/81) +km Central Khmer (0/63) (0/63) (0/63) +kn Kannada (0/70) (0/70) (0/70) +ko Korean (0/2443) (0/2443) (0/2443) +kok Kokani (Devanagari script) (0/68) (0/68) (0/68) +kr Kanuri 100% (56/56) 100% (56/56) 100% (56/56) +ks Kashmiri 97% (43/44) (0/44) 93% (41/44) +ku-am Kurdish in Armenia 100% (64/64) 100% (64/64) 100% (64/64) +ku-iq Kurdish in Iraq 100% (32/32) (0/32) 87% (28/32) +ku-ir Kurdish in Iran 100% (32/32) (0/32) 87% (28/32) +ku-tr Kurdish in Turkey 100% (62/62) 100% (62/62) 100% (62/62) +kum Kumyk 100% (66/66) 100% (66/66) 100% (66/66) +kv Komi (Komi-Permyak/Komi-Siryan) 100% (70/70) 100% (70/70) 100% (70/70) +kw Cornish 100% (64/64) 100% (64/64) 100% (64/64) +kwm Kwambi 100% (52/52) 100% (52/52) 100% (52/52) +ky Kirgiz 100% (70/70) 100% (70/70) 100% (70/70) +la Latin 100% (68/68) 100% (68/68) 100% (68/68) +lah Lahnda 97% (43/44) (0/44) 93% (41/44) +lb Luxembourgish (Letzeburgesch) 100% (75/75) 100% (75/75) 100% (75/75) +lez Lezghian (Lezgian) 100% (67/67) 100% (67/67) 100% (67/67) +lg Ganda 100% (54/54) 100% (54/54) 100% (54/54) +li Limburgan/Limburger/Limburgish 100% (62/62) 100% (62/62) 100% (62/62) +ln Lingala 100% (81/81) 100% (81/81) 100% (81/81) +lo Lao 100% (55/55) (0/55) 83% (46/55) +lt Lithuanian 100% (70/70) 100% (70/70) 100% (70/70) +lv Latvian 100% (78/78) 100% (78/78) 100% (78/78) +mai Maithili (Devanagari script) (0/68) (0/68) (0/68) +mg Malagasy 100% (56/56) 100% (56/56) 100% (56/56) +mh Marshallese 100% (62/62) 100% (62/62) 100% (62/62) +mi Maori 100% (64/64) 100% (64/64) 100% (64/64) +mk Macedonian 100% (42/42) 100% (42/42) 100% (42/42) +ml Malayalam (0/68) (0/68) (0/68) +mn-cn Mongolian in China (0/130) (0/130) (0/130) +mn-mn Mongolian in Mongolia 100% (70/70) 100% (70/70) 100% (70/70) +mo Moldavian 100% (128/128) 100% (128/128) 100% (128/128) +mr Marathi (Devanagari script) (0/68) (0/68) (0/68) +ms Malay 100% (52/52) 100% (52/52) 100% (52/52) +mt Maltese 100% (72/72) 100% (72/72) 100% (72/72) +my Burmese (Myanmar) (0/48) (0/48) (0/48) +na Nauru 100% (60/60) 100% (60/60) 100% (60/60) +nb Norwegian Bokmal 100% (70/70) 100% (70/70) 100% (70/70) +nds Low Saxon 100% (59/59) 100% (59/59) 100% (59/59) +ne Nepali (Devanagari script) (0/68) (0/68) (0/68) +ng Ndonga 100% (52/52) 100% (52/52) 100% (52/52) +nl Dutch 100% (82/82) 100% (82/82) 100% (82/82) +nn Norwegian Nynorsk 100% (76/76) 100% (76/76) 100% (76/76) +no Norwegian (Bokmal) 100% (70/70) 100% (70/70) 100% (70/70) +nr Ndebele, South 100% (52/52) 100% (52/52) 100% (52/52) +nso Northern Sotho 100% (58/58) 100% (58/58) 100% (58/58) +nv Navajo/Navaho 100% (72/72) 100% (72/72) 100% (72/72) +ny Chichewa 100% (54/54) 100% (54/54) 100% (54/54) +oc Occitan 100% (70/70) 100% (70/70) 100% (70/70) +om Oromo or Galla 100% (52/52) 100% (52/52) 100% (52/52) +or Oriya (0/68) (0/68) (0/68) +os Ossetic 100% (66/66) 100% (66/66) 100% (66/66) +ota Ottoman Turkish 100% (37/37) (0/37) 97% (36/37) +pa Panjabi/Punjabi (0/63) (0/63) (0/63) +pa-pk Panjabi/Punjabi in Pakistan 97% (43/44) (0/44) 93% (41/44) +pap-an Papiamento in Netherlands Antilles 100% (72/72) 100% (72/72) 100% (72/72) +pap-aw Papiamento in Aruba 100% (54/54) 100% (54/54) 100% (54/54) +pes Western Farsi 100% (40/40) (0/40) 100% (40/40) +pl Polish 100% (70/70) 100% (70/70) 100% (70/70) +prs Dari/Eastern Farsi 100% (40/40) (0/40) 100% (40/40) +ps-af Pashto in Afghanistan 95% (47/49) (0/49) 77% (38/49) +ps-pk Pashto in Pakistan 93% (46/49) (0/49) 75% (37/49) +pt Portuguese 100% (82/82) 100% (82/82) 100% (82/82) +qu Quechua 100% (55/55) 100% (55/55) 100% (55/55) +rm Rhaeto-Romance (Romansch) 100% (66/66) 100% (66/66) 100% (66/66) +rn Rundi 100% (52/52) 100% (52/52) 100% (52/52) +ro Romanian 100% (62/62) 100% (62/62) 100% (62/62) +ru Russian 100% (66/66) 100% (66/66) 100% (66/66) +rw Kinyarwanda 100% (52/52) 100% (52/52) 100% (52/52) +sa Sanskrit (Devanagari script) (0/68) (0/68) (0/68) +sah Yakut 100% (76/76) 100% (76/76) 100% (76/76) +sc Sardinian 100% (62/62) 100% (62/62) 100% (62/62) +sco Scots 100% (56/56) 100% (56/56) 100% (56/56) +sd Sindhi 100% (54/54) (0/54) 79% (43/54) +se North Sami 100% (66/66) 100% (66/66) 100% (66/66) +sel Selkup (Ostyak-Samoyed) 100% (66/66) 100% (66/66) 100% (66/66) +sg Sango 100% (72/72) 100% (72/72) 100% (72/72) +sh Serbo-Croatian 100% (156/156) 100% (156/156) 98% (154/156) +shs Secwepemctsin 100% (48/48) 100% (48/48) 100% (48/48) +si Sinhala/Sinhalese (0/73) (0/73) (0/73) +sid Sidamo (0/281) (0/281) (0/281) +sk Slovak 100% (86/86) 100% (86/86) 100% (86/86) +sl Slovenian 100% (62/62) 100% (62/62) 100% (62/62) +sm Samoan 100% (53/53) 100% (53/53) 100% (53/53) +sma South Sami 100% (60/60) 100% (60/60) 100% (60/60) +smj Lule Sami 100% (60/60) 100% (60/60) 100% (60/60) +smn Inari Sami 100% (68/68) 100% (68/68) 100% (68/68) +sms Skolt Sami 100% (80/80) 100% (80/80) 97% (78/80) +sn Shona 100% (52/52) 100% (52/52) 100% (52/52) +so Somali 100% (52/52) 100% (52/52) 100% (52/52) +sq Albanian 100% (56/56) 100% (56/56) 100% (56/56) +sr Serbian 100% (60/60) 100% (60/60) 100% (60/60) +ss Swati 100% (52/52) 100% (52/52) 100% (52/52) +st Sotho, Southern 100% (52/52) 100% (52/52) 100% (52/52) +su Sundanese 100% (54/54) 100% (54/54) 100% (54/54) +sv Swedish 100% (68/68) 100% (68/68) 100% (68/68) +sw Swahili 100% (52/52) 100% (52/52) 100% (52/52) +syr Syriac (0/45) (0/45) (0/45) +ta Tamil (0/48) (0/48) (0/48) +te Telugu (0/70) (0/70) (0/70) +tg Tajik 100% (78/78) 100% (78/78) 97% (76/78) +th Thai 1% (1/74) (0/74) (0/74) +ti-er Eritrean Tigrinya (0/255) (0/255) (0/255) +ti-et Ethiopian Tigrinya (0/281) (0/281) (0/281) +tig Tigre (0/221) (0/221) (0/221) +tk Turkmen 100% (68/68) 100% (68/68) 100% (68/68) +tl Tagalog 100% (84/84) 100% (84/84) 100% (84/84) +tn Tswana 100% (58/58) 100% (58/58) 100% (58/58) +to Tonga 100% (53/53) 100% (53/53) 100% (53/53) +tr Turkish 100% (70/70) 100% (70/70) 100% (70/70) +ts Tsonga 100% (52/52) 100% (52/52) 100% (52/52) +tt Tatar 100% (76/76) 100% (76/76) 100% (76/76) +tw Twi 100% (73/73) 100% (73/73) 100% (73/73) +ty Tahitian 100% (65/65) 100% (65/65) 100% (65/65) +tyv Tuvinian 100% (70/70) 100% (70/70) 100% (70/70) +ug Uighur 100% (36/36) (0/36) 100% (36/36) +uk Ukrainian 100% (72/72) 100% (72/72) 100% (72/72) +ur Urdu 97% (43/44) (0/44) 93% (41/44) +uz Uzbek 100% (52/52) 100% (52/52) 100% (52/52) +ve Venda 100% (62/62) 100% (62/62) 100% (62/62) +vi Vietnamese 100% (194/194) 100% (194/194) 76% (148/194) +vo Volapuk 100% (54/54) 100% (54/54) 100% (54/54) +vot Votic 100% (62/62) 100% (62/62) 100% (62/62) +wa Walloon 100% (70/70) 100% (70/70) 100% (70/70) +wal Wolaitta/Wolaytta (0/281) (0/281) (0/281) +wen Sorbian languages (lower and upper) 100% (76/76) 100% (76/76) 100% (76/76) +wo Wolof 100% (66/66) 100% (66/66) 100% (66/66) +xh Xhosa 100% (52/52) 100% (52/52) 100% (52/52) +yap Yapese 100% (58/58) 100% (58/58) 100% (58/58) +yi Yiddish 100% (27/27) (0/27) (0/27) +yo Yoruba 100% (119/119) 100% (119/119) 100% (119/119) +za Zhuang/Chuang 100% (52/52) 100% (52/52) 100% (52/52) +zh-cn Chinese (simplified) 0% (2/6765) 0% (2/6765) 0% (2/6765) +zh-hk Chinese Hong Kong Supplementary Character Set (0/2213) (0/2213) (0/2213) +zh-mo Chinese in Macau (0/2213) (0/2213) (0/2213) +zh-sg Chinese in Singapore 0% (2/6765) 0% (2/6765) 0% (2/6765) +zh-tw Chinese (traditional) (0/13063) (0/13063) (0/13063) +zu Zulu 100% (52/52) 100% (52/52) 100% (52/52) + --- /dev/null +++ b/tcpdf/fonts/dejavu-fonts-ttf-2.32/status.txt @@ -1,1 +1,6470 @@ +This is the status file for DejaVu fonts +($Id: status.txt 2383 2010-05-27 09:23:21Z ben_laenen $) +original = present in original Bitstream Vera 1.10 + = added in DejaVu fonts + +U+0020 space original +U+0021 exclam original +U+0022 quotedbl original +U+0023 numbersign original +U+0024 dollar original +U+0025 percent original +U+0026 ampersand original +U+0027 quotesingle original +U+0028 parenleft original +U+0029 parenright original +U+002a asterisk original +U+002b plus original +U+002c comma original +U+002d hyphen original +U+002e period original +U+002f slash original +U+0030 zero original +U+0031 one original +U+0032 two original +U+0033 three original +U+0034 four original +U+0035 five original +U+0036 six original +U+0037 seven original +U+0038 eight original +U+0039 nine original +U+003a colon original +U+003b semicolon original +U+003c less original +U+003d equal original +U+003e greater original +U+003f question original +U+0040 at original +U+0041 A original +U+0042 B original +U+0043 C original +U+0044 D original +U+0045 E original +U+0046 F original +U+0047 G original +U+0048 H original +U+0049 I original +U+004a J original +U+004b K original +U+004c L original +U+004d M original +U+004e N original +U+004f O original +U+0050 P original +U+0051 Q original +U+0052 R original +U+0053 S original +U+0054 T original +U+0055 U original +U+0056 V original +U+0057 W original +U+0058 X original +U+0059 Y original +U+005a Z original +U+005b bracketleft original +U+005c backslash original +U+005d bracketright original +U+005e asciicircum original +U+005f underscore original +U+0060 grave original +U+0061 a original +U+0062 b original +U+0063 c original +U+0064 d original +U+0065 e original +U+0066 f original +U+0067 g original +U+0068 h original +U+0069 i original +U+006a j original +U+006b k original +U+006c l original +U+006d m original +U+006e n original +U+006f o original +U+0070 p original +U+0071 q original +U+0072 r original +U+0073 s original +U+0074 t original +U+0075 u original +U+0076 v original +U+0077 w original +U+0078 x original +U+0079 y original +U+007a z original +U+007b braceleft original +U+007c bar original +U+007d braceright original +U+007e asciitilde original +U+00a0 nonbreakingspace original +U+00a1 exclamdown original +U+00a2 cent original +U+00a3 sterling original +U+00a4 currency original +U+00a5 yen original +U+00a6 brokenbar original +U+00a7 section original +U+00a8 dieresis original +U+00a9 copyright original +U+00aa ordfeminine original +U+00ab guillemotleft original +U+00ac logicalnot original +U+00ad sfthyphen original +U+00ae registered original +U+00af macron original +U+00b0 degree original +U+00b1 plusminus original +U+00b2 twosuperior original +U+00b3 threesuperior original +U+00b4 acute original +U+00b5 mu original +U+00b6 paragraph original +U+00b7 periodcentered original +U+00b8 cedilla original +U+00b9 onesuperior original +U+00ba ordmasculine original +U+00bb guillemotright original +U+00bc onequarter original +U+00bd onehalf original +U+00be threequarters original +U+00bf questiondown original +U+00c0 Agrave original +U+00c1 Aacute original +U+00c2 Acircumflex original +U+00c3 Atilde original +U+00c4 Adieresis original +U+00c5 Aring original +U+00c6 AE original +U+00c7 Ccedilla original +U+00c8 Egrave original +U+00c9 Eacute original +U+00ca Ecircumflex original +U+00cb Edieresis original +U+00cc Igrave original +U+00cd Iacute original +U+00ce Icircumflex original +U+00cf Idieresis original +U+00d0 Eth original +U+00d1 Ntilde original +U+00d2 Ograve original +U+00d3 Oacute original +U+00d4 Ocircumflex original +U+00d5 Otilde original +U+00d6 Odieresis original +U+00d7 multiply original +U+00d8 Oslash original +U+00d9 Ugrave original +U+00da Uacute original +U+00db Ucircumflex original +U+00dc Udieresis original +U+00dd Yacute original +U+00de Thorn original +U+00df germandbls original +U+00e0 agrave original +U+00e1 aacute original +U+00e2 acircumflex original +U+00e3 atilde original +U+00e4 adieresis original +U+00e5 aring original +U+00e6 ae original +U+00e7 ccedilla original +U+00e8 egrave original +U+00e9 eacute original +U+00ea ecircumflex original +U+00eb edieresis original +U+00ec igrave original +U+00ed iacute original +U+00ee icircumflex original +U+00ef idieresis original +U+00f0 eth original +U+00f1 ntilde original +U+00f2 ograve original +U+00f3 oacute original +U+00f4 ocircumflex original +U+00f5 otilde original +U+00f6 odieresis original +U+00f7 divide original +U+00f8 oslash original +U+00f9 ugrave original +U+00fa uacute original +U+00fb ucircumflex original +U+00fc udieresis original +U+00fd yacute original +U+00fe thorn original +U+00ff ydieresis original +U+0100 Amacron 1.5 +U+0101 amacron 1.5 +U+0102 Abreve 1.5 +U+0103 abreve 1.5 +U+0104 Aogonek 1.4 +U+0105 aogonek 1.4 +U+0106 Cacute original +U+0107 cacute original +U+0108 Ccircumflex 1.5 +U+0109 ccircumflex 1.5 +U+010a Cdotaccent 1.5 +U+010b cdotaccent 1.5 +U+010c Ccaron original +U+010d ccaron original +U+010e Dcaron 1.0 +U+010f dcaron 1.0 +U+0110 Dcroat 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0111 dcroat original +U+0112 Emacron 1.5 +U+0113 emacron 1.5 +U+0114 Ebreve 1.5 +U+0115 ebreve 1.5 +U+0116 Edotaccent 1.5 +U+0117 edotaccent 1.5 +U+0118 Eogonek 1.4 +U+0119 eogonek 1.4 +U+011a Ecaron 1.0 +U+011b ecaron 1.0 +U+011c Gcircumflex 1.5 +U+011d gcircumflex 1.5 +U+011e Gbreve original +U+011f gbreve original +U+0120 Gdotaccent 1.5 +U+0121 gdotaccent 1.5 +U+0122 Gcommaaccent 1.11 +U+0123 gcommaaccent 1.11 +U+0124 Hcircumflex 1.5 +U+0125 hcircumflex 1.5 +U+0126 Hbar 1.12 +U+0127 hbar 1.12 +U+0128 Itilde 1.5 +U+0129 itilde 1.5 +U+012a Imacron 1.5 +U+012b imacron 1.5 +U+012c Ibreve 1.5 +U+012d ibreve 1.5 +U+012e Iogonek 1.11 +U+012f iogonek 1.11 +U+0130 Idotaccent original +U+0131 dotlessi original +U+0132 IJ 1.11 +U+0133 ij 1.11 +U+0134 Jcircumflex 1.5 +U+0135 jcircumflex 1.5 +U+0136 Kcommaaccent 1.11 +U+0137 kcommaaccent 1.11 +U+0138 kgreenlandic 1.12 +U+0139 Lacute 1.1 +U+013a lacute 1.1 +U+013b Lcommaaccent 1.11 +U+013c lcommaaccent 1.11 +U+013d Lcaron 1.1 +U+013e lcaron 1.1 +U+013f Ldot 1.2 +U+0140 ldot 1.2 +U+0141 Lslash original +U+0142 lslash original +U+0143 Nacute 1.4 +U+0144 nacute 1.4 +U+0145 Ncommaaccent 1.11 +U+0146 ncommaaccent 1.11 +U+0147 Ncaron 1.0 +U+0148 ncaron 1.0 +U+0149 napostrophe 1.12 +U+014a Eng 1.12 +U+014b eng 1.12 +U+014c Omacron 1.5 +U+014d omacron 1.5 +U+014e Obreve 1.5 +U+014f obreve 1.5 +U+0150 Ohungarumlaut 1.5 +U+0151 ohungarumlaut 1.5 +U+0152 OE original +U+0153 oe original +U+0154 Racute 1.1 +U+0155 racute 1.1 +U+0156 Rcommaaccent 1.11 +U+0157 rcommaaccent 1.11 +U+0158 Rcaron 1.0 +U+0159 rcaron 1.0 +U+015a Sacute 1.4 +U+015b sacute 1.4 +U+015c Scircumflex 1.5 +U+015d scircumflex 1.5 +U+015e Scedilla original +U+015f scedilla original +U+0160 Scaron original +U+0161 scaron original +U+0162 Tcommaaccent 1.5 +U+0163 tcommaaccent 1.5 +U+0164 Tcaron 1.0 +U+0165 tcaron 1.0 +U+0166 Tbar 1.12 +U+0167 tbar 1.12 +U+0168 Utilde 1.5 +U+0169 utilde 1.5 +U+016a Umacron 1.5 +U+016b umacron 1.5 +U+016c Ubreve 1.5 +U+016d ubreve 1.5 +U+016e Uring 1.0 +U+016f uring 1.0 +U+0170 Uhungarumlaut 1.5 +U+0171 uhungarumlaut 1.5 +U+0172 Uogonek 1.11 +U+0173 uogonek 1.11 +U+0174 Wcircumflex 1.2 +U+0175 wcircumflex 1.2 +U+0176 Ycircumflex 1.2 +U+0177 ycircumflex 1.2 +U+0178 Ydieresis original +U+0179 Zacute 1.4 +U+017a zacute 1.4 +U+017b Zdotaccent 1.4 +U+017c zdotaccent 1.4 +U+017d Zcaron original +U+017e zcaron original +U+017f longs 1.12 +U+0180 uni0180 2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.12 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.22 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0181 uni0181 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0182 uni0182 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0183 uni0183 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0184 uni0184 2.3 +U+0185 uni0185 2.3 +U+0186 uni0186 1.15 +U+0187 uni0187 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0188 uni0188 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0189 uni0189 2.1 +U+018a uni018A 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+018b uni018B 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+018c uni018C 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+018d uni018D 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+018e uni018E 2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+018f uni018F 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0190 uni0190 1.15 +U+0191 uni0191 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0192 florin original +U+0193 uni0193 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0194 uni0194 1.14 +U+0195 uni0195 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.6 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0196 uni0196 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0197 uni0197 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0198 uni0198 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0199 uni0199 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+019a uni019A 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+019b uni019B 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+019c uni019C 2.3 +U+019d uni019D 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+019e uni019E 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+019f uni019F 2.3 +U+01a0 Ohorn 2.3 +U+01a1 ohorn 2.3 +U+01a2 uni01A2 2.3 +U+01a3 uni01A3 2.3 +U+01a4 uni01A4 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+01a5 uni01A5 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+01a6 uni01A6 2.3 +U+01a7 uni01A7 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+01a8 uni01A8 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+01a9 uni01A9 2.2 +U+01aa uni01AA 2.3 +U+01ab uni01AB 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+01ac uni01AC 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+01ad uni01AD 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+01ae uni01AE 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+01af Uhorn 2.3 +U+01b0 uhorn 2.3 +U+01b1 uni01B1 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+01b2 uni01B2 2.3 +U+01b3 uni01B3 2.3 +U+01b4 uni01B4 2.3 +U+01b5 uni01B5 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+01b6 uni01B6 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+01b7 uni01B7 2.3 +U+01b8 uni01B8 2.3 +U+01b9 uni01B9 2.3 +U+01ba uni01BA 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+01bb uni01BB 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+01bc uni01BC 2.3 +U+01bd uni01BD 2.3 +U+01be uni01BE 2.3 +U+01bf uni01BF 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+01c0 uni01C0 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+01c1 uni01C1 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+01c2 uni01C2 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+01c3 uni01C3 2.2 +U+01c4 uni01C4 1.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+01c5 uni01C5 1.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+01c6 uni01C6 1.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+01c7 uni01C7 1.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+01c8 uni01C8 1.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+01c9 uni01C9 1.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+01ca uni01CA 1.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+01cb uni01CB 1.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+01cc uni01CC 1.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+01cd uni01CD 1.15 +U+01ce uni01CE 1.15 +U+01cf uni01CF 1.15 +U+01d0 uni01D0 1.15 +U+01d1 uni01D1 1.15 +U+01d2 uni01D2 1.15 +U+01d3 uni01D3 1.15 +U+01d4 uni01D4 1.15 +U+01d5 uni01D5 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.22 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+01d6 uni01D6 1.13 +U+01d7 uni01D7 2.3 +U+01d8 uni01D8 2.3 +U+01d9 uni01D9 2.3 +U+01da uni01DA 2.3 +U+01db uni01DB 2.3 +U+01dc uni01DC 2.3 +U+01dd uni01DD 2.2 +U+01de uni01DE 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.22 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique) 2.23 (Serif Italic Condensed) +U+01df uni01DF 1.13 +U+01e0 uni01E0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.22 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+01e1 uni01E1 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.22 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+01e2 uni01E2 1.5 +U+01e3 uni01E3 1.5 +U+01e4 uni01E4 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans ExtraLight) +U+01e5 uni01E5 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans ExtraLight) +U+01e6 Gcaron 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+01e7 gcaron 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+01e8 uni01E8 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+01e9 uni01E9 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+01ea uni01EA 1.9 +U+01eb uni01EB 1.9 +U+01ec uni01EC 1.9 +U+01ed uni01ED 1.9 +U+01ee uni01EE 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+01ef uni01EF 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+01f0 uni01F0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.13 (Sans Mono) 2.22 (Sans Mono Bold) 2.23 (Serif Italic Condensed) +U+01f1 uni01F1 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+01f2 uni01F2 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+01f3 uni01F3 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+01f4 uni01F4 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+01f5 uni01F5 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+01f6 uni01F6 2.3 +U+01f7 uni01F7 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+01f8 uni01F8 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+01f9 uni01F9 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+01fa Aringacute 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+01fb aringacute 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+01fc AEacute 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+01fd aeacute 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+01fe Oslashacute 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+01ff oslashacute 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0200 uni0200 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0201 uni0201 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0202 uni0202 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0203 uni0203 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0204 uni0204 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0205 uni0205 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0206 uni0206 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0207 uni0207 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0208 uni0208 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0209 uni0209 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+020a uni020A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+020b uni020B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+020c uni020C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+020d uni020D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+020e uni020E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+020f uni020F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0210 uni0210 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0211 uni0211 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0212 uni0212 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0213 uni0213 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0214 uni0214 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0215 uni0215 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0216 uni0216 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0217 uni0217 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0218 Scommaaccent 1.5 +U+0219 scommaaccent 1.5 +U+021a uni021A 1.5 +U+021b uni021B 1.5 +U+021c uni021C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.28 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.31 (Serif Condensed Italic) +U+021d uni021D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.28 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.31 (Serif Condensed Italic) +U+021e uni021E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+021f uni021F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0220 uni0220 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.16 (Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.17 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.18 (Sans Mono, Sans Mono Bold) 2.23 (Serif Italic Condensed) +U+0221 uni0221 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+0222 uni0222 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0223 uni0223 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0224 uni0224 2.3 +U+0225 uni0225 2.3 +U+0226 uni0226 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0227 uni0227 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0228 uni0228 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0229 uni0229 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+022a uni022A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.22 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+022b uni022B 1.13 +U+022c uni022C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.22 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+022d uni022D 1.13 +U+022e uni022E 1.10 +U+022f uni022F 1.10 +U+0230 uni0230 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.22 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0231 uni0231 1.13 +U+0232 uni0232 1.5 +U+0233 uni0233 1.5 +U+0234 uni0234 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+0235 uni0235 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+0236 uni0236 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+0237 dotlessj 1.5 +U+0238 uni0238 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.10 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0239 uni0239 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.10 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+023a uni023A 2.3 +U+023b uni023B 2.3 +U+023c uni023C 2.3 +U+023d uni023D 2.3 +U+023e uni023E 2.3 +U+023f uni023F 2.3 +U+0240 uni0240 2.3 +U+0241 uni0241 2.3 +U+0242 uni0242 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+0243 uni0243 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0244 uni0244 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.27 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0245 uni0245 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.11 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0246 uni0246 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0247 uni0247 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0248 uni0248 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0249 uni0249 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+024a uni024A 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+024b uni024B 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.26 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+024c uni024C 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) 2.27 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+024d uni024D 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) 2.27 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+024e uni024E 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+024f uni024F 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0250 uni0250 1.14 +U+0251 uni0251 1.14 +U+0252 uni0252 1.14 +U+0253 uni0253 1.14 +U+0254 uni0254 1.14 +U+0255 uni0255 1.14 +U+0256 uni0256 1.14 +U+0257 uni0257 1.14 +U+0258 uni0258 1.14 +U+0259 uni0259 1.14 +U+025a uni025A 1.14 +U+025b uni025B 1.14 +U+025c uni025C 1.14 +U+025d uni025D 1.14 +U+025e uni025E 1.14 +U+025f uni025F 1.14 +U+0260 uni0260 1.14 +U+0261 uni0261 1.14 +U+0262 uni0262 1.14 +U+0263 uni0263 1.14 +U+0264 uni0264 1.14 +U+0265 uni0265 1.14 +U+0266 uni0266 1.14 +U+0267 uni0267 1.14 +U+0268 uni0268 1.14 +U+0269 uni0269 1.14 +U+026a uni026A 1.14 +U+026b uni026B 1.14 +U+026c uni026C 1.14 +U+026d uni026D 1.14 +U+026e uni026E 1.14 +U+026f uni026F 1.14 +U+0270 uni0270 1.14 +U+0271 uni0271 1.14 +U+0272 uni0272 1.14 +U+0273 uni0273 1.14 +U+0274 uni0274 1.14 +U+0275 uni0275 1.14 +U+0276 uni0276 1.14 +U+0277 uni0277 1.14 +U+0278 uni0278 1.14 +U+0279 uni0279 1.14 +U+027a uni027A 1.14 +U+027b uni027B 1.14 +U+027c uni027C 1.14 +U+027d uni027D 1.14 +U+027e uni027E 1.14 +U+027f uni027F 1.14 +U+0280 uni0280 1.14 +U+0281 uni0281 1.14 +U+0282 uni0282 1.14 +U+0283 uni0283 1.14 +U+0284 uni0284 1.14 +U+0285 uni0285 1.14 +U+0286 uni0286 1.14 +U+0287 uni0287 1.14 +U+0288 uni0288 1.14 +U+0289 uni0289 1.14 +U+028a uni028A 1.14 +U+028b uni028B 1.14 +U+028c uni028C 1.14 +U+028d uni028D 1.14 +U+028e uni028E 1.14 +U+028f uni028F 1.14 +U+0290 uni0290 1.14 +U+0291 uni0291 1.14 +U+0292 uni0292 1.14 +U+0293 uni0293 1.14 +U+0294 uni0294 1.14 +U+0295 uni0295 1.14 +U+0296 uni0296 1.14 +U+0297 uni0297 1.14 +U+0298 uni0298 1.14 +U+0299 uni0299 1.14 +U+029a uni029A 1.14 +U+029b uni029B 1.14 +U+029c uni029C 1.14 +U+029d uni029D 1.14 +U+029e uni029E 1.14 +U+029f uni029F 1.14 +U+02a0 uni02A0 1.14 +U+02a1 uni02A1 1.14 +U+02a2 uni02A2 1.14 +U+02a3 uni02A3 1.14 +U+02a4 uni02A4 1.14 +U+02a5 uni02A5 1.14 +U+02a6 uni02A6 1.14 +U+02a7 uni02A7 1.14 +U+02a8 uni02A8 1.14 +U+02a9 uni02A9 1.14 +U+02aa uni02AA 1.14 +U+02ab uni02AB 1.14 +U+02ac uni02AC 1.14 +U+02ad uni02AD 1.14 +U+02ae uni02AE 1.14 +U+02af uni02AF 1.14 +U+02b0 uni02B0 1.14 +U+02b1 uni02B1 1.14 +U+02b2 uni02B2 1.14 +U+02b3 uni02B3 1.14 +U+02b4 uni02B4 1.14 +U+02b5 uni02B5 1.14 +U+02b6 uni02B6 1.14 +U+02b7 uni02B7 1.14 +U+02b8 uni02B8 1.14 +U+02b9 uni02B9 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+02ba uni02BA 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+02bb uni02BB 1.5 +U+02bc uni02BC 1.12 +U+02bd uni02BD 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+02be uni02BE 2.2 +U+02bf uni02BF 2.2 +U+02c0 uni02C0 1.14 +U+02c1 uni02C1 1.14 +U+02c2 uni02C2 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+02c3 uni02C3 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+02c4 uni02C4 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+02c5 uni02C5 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+02c6 circumflex original +U+02c7 caron original +U+02c8 uni02C8 2.0 +U+02c9 uni02C9 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+02ca uni02CA 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+02cb uni02CB 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+02cc uni02CC 2.0 +U+02cd uni02CD 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+02ce uni02CE 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+02cf uni02CF 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+02d0 uni02D0 1.14 +U+02d1 uni02D1 1.14 +U+02d2 uni02D2 2.0 +U+02d3 uni02D3 2.2 +U+02d4 uni02D4 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+02d5 uni02D5 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+02d6 uni02D6 2.0 +U+02d7 uni02D7 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.28 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+02d8 breve original +U+02d9 dotaccent original +U+02da ring original +U+02db ogonek original +U+02dc tilde original +U+02dd hungarumlaut original +U+02de uni02DE 2.0 +U+02df uni02DF 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+02e0 uni02E0 1.14 +U+02e1 uni02E1 1.14 +U+02e2 uni02E2 1.14 +U+02e3 uni02E3 1.14 +U+02e4 uni02E4 1.14 +U+02e5 uni02E5 2.0 +U+02e6 uni02E6 2.0 +U+02e7 uni02E7 2.0 +U+02e8 uni02E8 2.0 +U+02e9 uni02E9 2.0 +U+02ec uni02EC 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+02ed uni02ED 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+02ee uni02EE 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.28 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+02f3 uni02F3 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+02f7 uni02F7 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+0300 gravecomb 1.15 +U+0301 acutecomb 1.15 +U+0302 uni0302 1.15 +U+0303 tildecomb 1.15 +U+0304 uni0304 1.15 +U+0305 uni0305 2.0 +U+0306 uni0306 1.15 +U+0307 uni0307 1.15 +U+0308 uni0308 1.15 +U+0309 hookabovecomb 2.1 +U+030a uni030A 1.15 +U+030b uni030B 1.15 +U+030c uni030C 1.15 +U+030d uni030D 2.0 +U+030e uni030E 2.0 +U+030f uni030F 2.0 +U+0310 uni0310 2.0 +U+0311 uni0311 2.0 +U+0312 uni0312 1.11 +U+0313 uni0313 2.1 +U+0314 uni0314 2.1 +U+0315 uni0315 2.0 +U+0316 uni0316 2.0 +U+0317 uni0317 2.0 +U+0318 uni0318 2.0 +U+0319 uni0319 2.0 +U+031a uni031A 2.1 +U+031b uni031B 2.1 +U+031c uni031C 2.0 +U+031d uni031D 2.0 +U+031e uni031E 2.0 +U+031f uni031F 2.0 +U+0320 uni0320 2.0 +U+0321 uni0321 1.15 +U+0322 uni0322 1.15 +U+0323 dotbelowcomb 2.1 +U+0324 uni0324 2.0 +U+0325 uni0325 2.0 +U+0326 uni0326 1.5 +U+0327 uni0327 2.1 +U+0328 uni0328 2.1 +U+0329 uni0329 2.0 +U+032a uni032A 2.0 +U+032b uni032B 2.1 +U+032c uni032C 2.0 +U+032d uni032D 2.0 +U+032e uni032E 2.0 +U+032f uni032F 2.0 +U+0330 uni0330 2.0 +U+0331 uni0331 2.0 +U+0332 uni0332 2.0 +U+0333 uni0333 2.1 +U+0334 uni0334 2.3 +U+0335 uni0335 2.3 +U+0336 uni0336 2.3 +U+0337 uni0337 2.3 +U+0338 uni0338 2.3 +U+0339 uni0339 2.0 +U+033a uni033A 2.0 +U+033b uni033B 2.0 +U+033c uni033C 2.1 +U+033d uni033D 2.0 +U+033e uni033E 2.1 +U+033f uni033F 2.1 +U+0340 uni0340 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0341 uni0341 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0342 uni0342 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0343 uni0343 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+0344 uni0344 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0345 uni0345 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0346 uni0346 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0347 uni0347 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0348 uni0348 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0349 uni0349 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+034a uni034A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+034b uni034B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+034c uni034C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+034d uni034D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+034e uni034E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+034f uni034F 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+0351 uni0351 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0352 uni0352 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique) 2.28 (Sans Condensed Oblique, Sans Oblique) +U+0353 uni0353 2.5 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0357 uni0357 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0358 uni0358 2.3 +U+035a uni035A 2.28 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+035c uni035C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+035d uni035D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+035e uni035E 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+035f uni035F 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0360 uni0360 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0361 uni0361 2.0 +U+0362 uni0362 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0370 uni0370 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+0371 uni0371 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+0372 uni0372 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+0373 uni0373 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+0374 uni0374 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0375 uni0375 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0376 uni0376 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+0377 uni0377 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+037a uni037A 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+037b uni037B 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+037c uni037C 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans ExtraLight, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+037d uni037D 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans ExtraLight, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+037e uni037E 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0384 tonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0385 dieresistonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0386 Alphatonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0387 anoteleia 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0388 Epsilontonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0389 Etatonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+038a Iotatonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+038c Omicrontonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+038e Upsilontonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+038f Omegatonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0390 iotadieresistonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0391 Alpha 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0392 Beta 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0393 Gamma 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0394 uni0394 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0395 Epsilon 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0396 Zeta 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0397 Eta 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0398 Theta 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0399 Iota 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+039a Kappa 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+039b Lambda 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+039c Mu 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+039d Nu 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+039e Xi 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+039f Omicron 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03a0 Pi 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03a1 Rho 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03a3 Sigma 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03a4 Tau 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03a5 Upsilon 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03a6 Phi 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03a7 Chi 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03a8 Psi 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03a9 Omega original +U+03aa Iotadieresis 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03ab Upsilondieresis 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03ac alphatonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03ad epsilontonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03ae etatonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03af iotatonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03b0 upsilondieresistonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03b1 alpha 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03b2 beta 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03b3 gamma 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03b4 delta 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03b5 epsilon 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03b6 zeta 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03b7 eta 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03b8 theta 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03b9 iota 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03ba kappa 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03bb lambda 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03bc uni03BC 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03bd nu 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03be xi 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03bf omicron 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03c0 pi original +U+03c1 rho 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03c2 sigma1 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03c3 sigma 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03c4 tau 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03c5 upsilon 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03c6 phi 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03c7 chi 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03c8 psi 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03c9 omega 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03ca iotadieresis 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03cb upsilondieresis 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03cc omicrontonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03cd upsilontonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03ce omegatonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03cf uni03CF 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+03d0 uni03D0 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+03d1 theta1 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+03d2 Upsilon1 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+03d3 uni03D3 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+03d4 uni03D4 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+03d5 phi1 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.18 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03d6 omega1 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) 2.26 (Sans ExtraLight) +U+03d7 uni03D7 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+03d8 uni03D8 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) 2.26 (Sans ExtraLight) +U+03d9 uni03D9 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) 2.26 (Sans ExtraLight) +U+03da uni03DA 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+03db uni03DB 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+03dc uni03DC 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03dd uni03DD 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+03de uni03DE 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+03df uni03DF 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+03e0 uni03E0 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+03e1 uni03E1 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+03e2 uni03E2 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03e3 uni03E3 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03e4 uni03E4 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03e5 uni03E5 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03e6 uni03E6 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03e7 uni03E7 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03e8 uni03E8 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03e9 uni03E9 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03ea uni03EA 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03eb uni03EB 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03ec uni03EC 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03ed uni03ED 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03ee uni03EE 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03ef uni03EF 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03f0 uni03F0 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+03f1 uni03F1 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) 2.26 (Sans ExtraLight) +U+03f2 uni03F2 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03f3 uni03F3 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03f4 uni03F4 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03f5 uni03F5 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03f6 uni03F6 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03f7 uni03F7 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03f8 uni03F8 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03f9 uni03F9 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03fa uni03FA 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+03fb uni03FB 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+03fc uni03FC 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) 2.26 (Sans ExtraLight) +U+03fd uni03FD 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03fe uni03FE 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03ff uni03FF 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0400 uni0400 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0401 uni0401 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0402 uni0402 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0403 uni0403 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0404 uni0404 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0405 uni0405 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0406 uni0406 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0407 uni0407 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0408 uni0408 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0409 uni0409 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+040a uni040A 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+040b uni040B 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+040c uni040C 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+040d uni040D 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+040e uni040E 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+040f uni040F 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0410 uni0410 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0411 uni0411 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0412 uni0412 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0413 uni0413 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0414 uni0414 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0415 uni0415 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0416 uni0416 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0417 uni0417 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0418 uni0418 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0419 uni0419 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+041a uni041A 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+041b uni041B 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+041c uni041C 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+041d uni041D 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+041e uni041E 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+041f uni041F 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0420 uni0420 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0421 uni0421 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0422 uni0422 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0423 uni0423 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0424 uni0424 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0425 uni0425 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0426 uni0426 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0427 uni0427 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0428 uni0428 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0429 uni0429 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+042a uni042A 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+042b uni042B 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+042c uni042C 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+042d uni042D 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+042e uni042E 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+042f uni042F 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0430 uni0430 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0431 uni0431 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0432 uni0432 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0433 uni0433 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0434 uni0434 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0435 uni0435 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0436 uni0436 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0437 uni0437 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0438 uni0438 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0439 uni0439 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+043a uni043A 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+043b uni043B 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+043c uni043C 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+043d uni043D 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+043e uni043E 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+043f uni043F 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0440 uni0440 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0441 uni0441 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0442 uni0442 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0443 uni0443 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0444 uni0444 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0445 uni0445 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0446 uni0446 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0447 uni0447 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0448 uni0448 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0449 uni0449 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+044a uni044A 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+044b uni044B 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+044c uni044C 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+044d uni044D 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+044e uni044E 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+044f uni044F 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0450 uni0450 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0451 uni0451 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0452 uni0452 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0453 uni0453 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0454 uni0454 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0455 uni0455 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0456 uni0456 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0457 uni0457 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0458 uni0458 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0459 uni0459 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+045a uni045A 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+045b uni045B 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+045c uni045C 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+045d uni045D 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+045e uni045E 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+045f uni045F 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0460 uni0460 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0461 uni0461 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+0462 uni0462 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.20 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.30 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0463 uni0463 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.20 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.30 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0464 uni0464 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+0465 uni0465 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+0466 uni0466 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0467 uni0467 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0468 uni0468 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0469 uni0469 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+046a uni046A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.21 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+046b uni046B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.21 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+046c uni046C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+046d uni046D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+046e uni046E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+046f uni046F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0470 uni0470 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+0471 uni0471 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+0472 uni0472 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.10 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0473 uni0473 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0474 uni0474 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.12 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+0475 uni0475 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.12 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+0476 uni0476 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0477 uni0477 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0478 uni0478 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0479 uni0479 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+047a uni047A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+047b uni047B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+047c uni047C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+047d uni047D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+047e uni047E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+047f uni047F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0480 uni0480 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0481 uni0481 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0482 uni0482 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0483 uni0483 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0484 uni0484 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0485 uni0485 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0486 uni0486 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0487 uni0487 2.9 (Sans, Sans Condensed) 2.27 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0488 uni0488 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0489 uni0489 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+048a uni048A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+048b uni048B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+048c uni048C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+048d uni048D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+048e uni048E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+048f uni048F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0490 uni0490 1.15 +U+0491 uni0491 1.15 +U+0492 uni0492 1.14 +U+0493 uni0493 1.14 +U+0494 uni0494 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0495 uni0495 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0496 uni0496 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0497 uni0497 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0498 uni0498 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+0499 uni0499 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+049a uni049A 1.14 +U+049b uni049B 1.14 +U+049c uni049C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+049d uni049D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+049e uni049E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+049f uni049F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04a0 uni04A0 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans ExtraLight) +U+04a1 uni04A1 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans ExtraLight) +U+04a2 uni04A2 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04a3 uni04A3 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04a4 uni04A4 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.10 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.31 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+04a5 uni04A5 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.10 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.31 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+04a6 uni04A6 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04a7 uni04A7 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04a8 uni04A8 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04a9 uni04A9 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04aa uni04AA 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04ab uni04AB 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04ac uni04AC 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04ad uni04AD 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04ae uni04AE 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04af uni04AF 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04b0 uni04B0 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+04b1 uni04B1 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+04b2 uni04B2 1.14 +U+04b3 uni04B3 1.14 +U+04b4 uni04B4 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.10 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04b5 uni04B5 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.10 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04b6 uni04B6 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04b7 uni04B7 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04b8 uni04B8 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04b9 uni04B9 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04ba uni04BA 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04bb uni04BB 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04bc uni04BC 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04bd uni04BD 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04be uni04BE 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04bf uni04BF 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04c0 uni04C0 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04c1 uni04C1 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04c2 uni04C2 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04c3 uni04C3 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+04c4 uni04C4 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+04c5 uni04C5 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04c6 uni04C6 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04c7 uni04C7 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) 2.26 (Sans ExtraLight) +U+04c8 uni04C8 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) 2.26 (Sans ExtraLight) +U+04c9 uni04C9 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04ca uni04CA 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04cb uni04CB 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04cc uni04CC 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04cd uni04CD 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04ce uni04CE 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04cf uni04CF 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04d0 uni04D0 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04d1 uni04D1 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04d2 uni04D2 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04d3 uni04D3 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04d4 uni04D4 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04d5 uni04D5 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04d6 uni04D6 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04d7 uni04D7 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04d8 uni04D8 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04d9 uni04D9 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04da uni04DA 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04db uni04DB 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04dc uni04DC 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04dd uni04DD 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04de uni04DE 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04df uni04DF 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04e0 uni04E0 2.3 +U+04e1 uni04E1 2.3 +U+04e2 uni04E2 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04e3 uni04E3 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04e4 uni04E4 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04e5 uni04E5 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04e6 uni04E6 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04e7 uni04E7 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04e8 uni04E8 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+04e9 uni04E9 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+04ea uni04EA 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+04eb uni04EB 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+04ec uni04EC 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04ed uni04ED 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04ee uni04EE 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04ef uni04EF 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04f0 uni04F0 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04f1 uni04F1 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04f2 uni04F2 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04f3 uni04F3 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04f4 uni04F4 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04f5 uni04F5 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04f6 uni04F6 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04f7 uni04F7 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04f8 uni04F8 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04f9 uni04F9 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04fa uni04FA 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04fb uni04FB 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04fc uni04FC 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04fd uni04FD 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04fe uni04FE 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) +U+04ff uni04FF 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) +U+0500 uni0500 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) +U+0501 uni0501 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) +U+0502 uni0502 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0503 uni0503 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0504 uni0504 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0505 uni0505 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0506 uni0506 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0507 uni0507 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0508 uni0508 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0509 uni0509 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+050a uni050A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+050b uni050B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+050c uni050C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+050d uni050D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+050e uni050E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+050f uni050F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0510 uni0510 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+0511 uni0511 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+0512 uni0512 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+0513 uni0513 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+0514 uni0514 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+0515 uni0515 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+0516 uni0516 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0517 uni0517 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0518 uni0518 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0519 uni0519 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+051a uni051A 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+051b uni051B 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+051c uni051C 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+051d uni051D 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+0520 uni0520 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0521 uni0521 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0522 uni0522 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0523 uni0523 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0524 uni0524 2.29 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0525 uni0525 2.29 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0531 uni0531 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0532 uni0532 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0533 uni0533 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0534 uni0534 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0535 uni0535 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0536 uni0536 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0537 uni0537 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0538 uni0538 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0539 uni0539 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+053a uni053A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+053b uni053B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+053c uni053C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+053d uni053D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+053e uni053E 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+053f uni053F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0540 uni0540 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0541 uni0541 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0542 uni0542 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0543 uni0543 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0544 uni0544 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0545 uni0545 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0546 uni0546 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0547 uni0547 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0548 uni0548 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+0549 uni0549 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+054a uni054A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+054b uni054B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+054c uni054C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+054d uni054D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+054e uni054E 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+054f uni054F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+0550 uni0550 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) +U+0551 uni0551 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0552 uni0552 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0553 uni0553 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+0554 uni0554 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0555 uni0555 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+0556 uni0556 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0559 uni0559 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+055a uni055A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+055b uni055B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+055c uni055C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+055d uni055D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+055e uni055E 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+055f uni055F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0561 uni0561 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+0562 uni0562 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) +U+0563 uni0563 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) +U+0564 uni0564 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) +U+0565 uni0565 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) +U+0566 uni0566 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) +U+0567 uni0567 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0568 uni0568 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) +U+0569 uni0569 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+056a uni056A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+056b uni056B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+056c uni056C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) +U+056d uni056D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+056e uni056E 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+056f uni056F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+0570 uni0570 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+0571 uni0571 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0572 uni0572 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) +U+0573 uni0573 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0574 uni0574 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0575 uni0575 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+0576 uni0576 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0577 uni0577 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0578 uni0578 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+0579 uni0579 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+057a uni057A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+057b uni057B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+057c uni057C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) +U+057d uni057D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+057e uni057E 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) +U+057f uni057F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+0580 uni0580 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+0581 uni0581 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+0582 uni0582 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) +U+0583 uni0583 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+0584 uni0584 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0585 uni0585 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+0586 uni0586 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0587 uni0587 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) +U+0589 uni0589 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+058a uni058A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05b0 uni05B0 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05b1 uni05B1 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05b2 uni05B2 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05b3 uni05B3 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05b4 uni05B4 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05b5 uni05B5 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05b6 uni05B6 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05b7 uni05B7 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05b8 uni05B8 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05b9 uni05B9 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05ba uni05BA 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+05bb uni05BB 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05bc uni05BC 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05bd uni05BD 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05be uni05BE 2.9 (Sans Condensed Oblique, Sans Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique) +U+05bf uni05BF 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05c0 uni05C0 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05c1 uni05C1 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05c2 uni05C2 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05c3 uni05C3 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05c6 uni05C6 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05c7 uni05C7 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05d0 uni05D0 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05d1 uni05D1 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05d2 uni05D2 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05d3 uni05D3 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05d4 uni05D4 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05d5 uni05D5 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05d6 uni05D6 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05d7 uni05D7 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05d8 uni05D8 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05d9 uni05D9 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05da uni05DA 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05db uni05DB 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05dc uni05DC 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05dd uni05DD 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05de uni05DE 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05df uni05DF 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05e0 uni05E0 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05e1 uni05E1 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05e2 uni05E2 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05e3 uni05E3 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05e4 uni05E4 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05e5 uni05E5 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05e6 uni05E6 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05e7 uni05E7 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05e8 uni05E8 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05e9 uni05E9 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05ea uni05EA 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05f0 uni05F0 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05f1 uni05F1 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05f2 uni05F2 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05f3 uni05F3 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+05f4 uni05F4 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0606 uni0606 2.26 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold) +U+0607 uni0607 2.26 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold) +U+0609 uni0609 2.26 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold) +U+060a uni060A 2.26 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold) +U+060c uni060C 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0615 uni0615 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+061b uni061B 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+061f uni061F 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0621 uni0621 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0622 uni0622 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0623 uni0623 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0624 uni0624 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0625 uni0625 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0626 uni0626 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0627 uni0627 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0628 uni0628 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0629 uni0629 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+062a uni062A 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+062b uni062B 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+062c uni062C 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+062d uni062D 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+062e uni062E 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+062f uni062F 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0630 uni0630 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0631 uni0631 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0632 uni0632 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0633 uni0633 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0634 uni0634 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0635 uni0635 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0636 uni0636 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0637 uni0637 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0638 uni0638 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0639 uni0639 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+063a uni063A 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0640 uni0640 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0641 uni0641 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0642 uni0642 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0643 uni0643 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0644 uni0644 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0645 uni0645 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0646 uni0646 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0647 uni0647 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0648 uni0648 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0649 uni0649 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+064a uni064A 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+064b uni064B 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+064c uni064C 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+064d uni064D 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+064e uni064E 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+064f uni064F 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0650 uni0650 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0651 uni0651 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0652 uni0652 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0653 uni0653 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0654 uni0654 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0655 uni0655 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0657 uni0657 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+065a uni065A 2.7 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0660 uni0660 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0661 uni0661 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0662 uni0662 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0663 uni0663 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0664 uni0664 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0665 uni0665 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0666 uni0666 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0667 uni0667 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0668 uni0668 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0669 uni0669 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+066a uni066A 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+066b uni066B 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+066c uni066C 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+066d uni066D 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+066e uni066E 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+066f uni066F 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0670 uni0670 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0674 uni0674 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans ExtraLight) 2.16 (Sans Mono, Sans Mono Bold) +U+0679 uni0679 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+067a uni067A 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+067b uni067B 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+067c uni067C 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+067d uni067D 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+067e uni067E 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+067f uni067F 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0680 uni0680 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0681 uni0681 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0682 uni0682 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0683 uni0683 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0684 uni0684 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0685 uni0685 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0686 uni0686 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0687 uni0687 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0688 uni0688 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0689 uni0689 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+068a uni068A 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+068b uni068B 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+068c uni068C 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+068d uni068D 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+068e uni068E 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+068f uni068F 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0690 uni0690 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0691 uni0691 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0692 uni0692 2.7 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0693 uni0693 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0694 uni0694 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0695 uni0695 2.7 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0696 uni0696 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0697 uni0697 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0698 uni0698 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0699 uni0699 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+069a uni069A 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+069b uni069B 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+069c uni069C 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+069d uni069D 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+069e uni069E 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+069f uni069F 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06a0 uni06A0 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06a1 uni06A1 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06a2 uni06A2 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06a3 uni06A3 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06a4 uni06A4 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06a5 uni06A5 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06a6 uni06A6 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06a7 uni06A7 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06a8 uni06A8 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06a9 uni06A9 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06aa uni06AA 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06ab uni06AB 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06ac uni06AC 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06ad uni06AD 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06ae uni06AE 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06af uni06AF 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06b0 uni06B0 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06b1 uni06B1 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06b2 uni06B2 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06b3 uni06B3 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06b4 uni06B4 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06b5 uni06B5 2.7 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06b6 uni06B6 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06b7 uni06B7 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06b8 uni06B8 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06b9 uni06B9 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06ba uni06BA 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06bb uni06BB 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06bc uni06BC 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06bd uni06BD 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06be uni06BE 2.16 (Sans Mono, Sans Mono Bold) 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06bf uni06BF 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06c6 uni06C6 2.7 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06cc uni06CC 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06ce uni06CE 2.7 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06d5 uni06D5 2.10 (Sans, Sans Bold) 2.11 (Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06f0 uni06F0 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06f1 uni06F1 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06f2 uni06F2 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06f3 uni06F3 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06f4 uni06F4 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06f5 uni06F5 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06f6 uni06F6 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06f7 uni06F7 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06f8 uni06F8 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06f9 uni06F9 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+07c0 uni07C0 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07c1 uni07C1 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07c2 uni07C2 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07c3 uni07C3 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07c4 uni07C4 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07c5 uni07C5 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07c6 uni07C6 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07c7 uni07C7 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07c8 uni07C8 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07c9 uni07C9 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07ca uni07CA 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07cb uni07CB 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07cc uni07CC 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07cd uni07CD 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07ce uni07CE 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07cf uni07CF 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07d0 uni07D0 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07d1 uni07D1 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07d2 uni07D2 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07d3 uni07D3 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07d4 uni07D4 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07d5 uni07D5 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07d6 uni07D6 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07d7 uni07D7 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07d8 uni07D8 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07d9 uni07D9 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07da uni07DA 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07db uni07DB 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07dc uni07DC 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07dd uni07DD 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07de uni07DE 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07df uni07DF 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07e0 uni07E0 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07e1 uni07E1 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07e2 uni07E2 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07e3 uni07E3 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07e4 uni07E4 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07e5 uni07E5 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07e6 uni07E6 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07e7 uni07E7 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07eb uni07EB 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07ec uni07EC 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07ed uni07ED 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07ee uni07EE 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07ef uni07EF 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07f0 uni07F0 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07f1 uni07F1 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07f2 uni07F2 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07f3 uni07F3 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07f4 uni07F4 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07f5 uni07F5 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07f8 uni07F8 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07f9 uni07F9 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07fa uni07FA 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0e3f uni0E3F 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0e81 uni0E81 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e82 uni0E82 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e84 uni0E84 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e87 uni0E87 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e88 uni0E88 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e8a uni0E8A 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e8d uni0E8D 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e94 uni0E94 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e95 uni0E95 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e96 uni0E96 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e97 uni0E97 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e99 uni0E99 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e9a uni0E9A 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e9b uni0E9B 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e9c uni0E9C 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e9d uni0E9D 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e9e uni0E9E 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e9f uni0E9F 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0ea1 uni0EA1 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0ea2 uni0EA2 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0ea3 uni0EA3 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0ea5 uni0EA5 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0ea7 uni0EA7 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0eaa uni0EAA 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0eab uni0EAB 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0ead uni0EAD 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0eae uni0EAE 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0eaf uni0EAF 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0eb0 uni0EB0 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0eb1 uni0EB1 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0eb2 uni0EB2 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0eb3 uni0EB3 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0eb4 uni0EB4 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0eb5 uni0EB5 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0eb6 uni0EB6 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0eb7 uni0EB7 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0eb8 uni0EB8 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0eb9 uni0EB9 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0ebb uni0EBB 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0ebc uni0EBC 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0ebd uni0EBD 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ec0 uni0EC0 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ec1 uni0EC1 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ec2 uni0EC2 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ec3 uni0EC3 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ec4 uni0EC4 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ec6 uni0EC6 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ec8 uni0EC8 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0ec9 uni0EC9 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0eca uni0ECA 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0ecb uni0ECB 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0ecc uni0ECC 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0ecd uni0ECD 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0ed0 uni0ED0 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ed1 uni0ED1 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ed2 uni0ED2 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ed3 uni0ED3 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ed4 uni0ED4 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ed5 uni0ED5 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ed6 uni0ED6 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ed7 uni0ED7 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ed8 uni0ED8 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0ed9 uni0ED9 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0edc uni0EDC 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0edd uni0EDD 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+10a0 uni10A0 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10a1 uni10A1 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10a2 uni10A2 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10a3 uni10A3 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10a4 uni10A4 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10a5 uni10A5 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10a6 uni10A6 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10a7 uni10A7 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10a8 uni10A8 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10a9 uni10A9 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10aa uni10AA 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10ab uni10AB 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10ac uni10AC 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10ad uni10AD 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10ae uni10AE 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10af uni10AF 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10b0 uni10B0 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10b1 uni10B1 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10b2 uni10B2 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10b3 uni10B3 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10b4 uni10B4 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10b5 uni10B5 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10b6 uni10B6 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10b7 uni10B7 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10b8 uni10B8 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10b9 uni10B9 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10ba uni10BA 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10bb uni10BB 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10bc uni10BC 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10bd uni10BD 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10be uni10BE 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10bf uni10BF 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10c0 uni10C0 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10c1 uni10C1 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10c2 uni10C2 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10c3 uni10C3 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10c4 uni10C4 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10c5 uni10C5 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10d0 uni10D0 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10d1 uni10D1 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10d2 uni10D2 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10d3 uni10D3 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10d4 uni10D4 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10d5 uni10D5 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10d6 uni10D6 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10d7 uni10D7 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10d8 uni10D8 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10d9 uni10D9 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10da uni10DA 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10db uni10DB 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10dc uni10DC 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10dd uni10DD 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10de uni10DE 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10df uni10DF 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10e0 uni10E0 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10e1 uni10E1 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10e2 uni10E2 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10e3 uni10E3 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10e4 uni10E4 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10e5 uni10E5 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10e6 uni10E6 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10e7 uni10E7 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10e8 uni10E8 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10e9 uni10E9 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10ea uni10EA 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10eb uni10EB 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10ec uni10EC 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10ed uni10ED 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10ee uni10EE 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10ef uni10EF 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10f0 uni10F0 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10f1 uni10F1 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10f2 uni10F2 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10f3 uni10F3 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10f4 uni10F4 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10f5 uni10F5 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10f6 uni10F6 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10f7 uni10F7 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10f8 uni10F8 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10f9 uni10F9 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10fa uni10FA 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10fb uni10FB 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10fc uni10FC 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+1401 uni1401 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1402 uni1402 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1403 uni1403 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1404 uni1404 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1405 uni1405 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1406 uni1406 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1407 uni1407 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1409 uni1409 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+140a uni140A 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+140b uni140B 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+140c uni140C 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+140d uni140D 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+140e uni140E 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+140f uni140F 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1410 uni1410 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1411 uni1411 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1412 uni1412 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1413 uni1413 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1414 uni1414 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1415 uni1415 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1416 uni1416 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1417 uni1417 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1418 uni1418 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1419 uni1419 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+141a uni141A 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+141b uni141B 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+141d uni141D 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+141e uni141E 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+141f uni141F 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1420 uni1420 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1421 uni1421 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1422 uni1422 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1423 uni1423 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1424 uni1424 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1425 uni1425 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1426 uni1426 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1427 uni1427 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1428 uni1428 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1429 uni1429 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+142a uni142A 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+142b uni142B 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+142c uni142C 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+142d uni142D 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+142e uni142E 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+142f uni142F 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1430 uni1430 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1431 uni1431 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1432 uni1432 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1433 uni1433 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1434 uni1434 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1435 uni1435 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1437 uni1437 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1438 uni1438 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1439 uni1439 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+143a uni143A 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+143b uni143B 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+143c uni143C 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+143d uni143D 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+143e uni143E 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+143f uni143F 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1440 uni1440 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1441 uni1441 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1442 uni1442 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1443 uni1443 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1444 uni1444 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1445 uni1445 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1446 uni1446 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1447 uni1447 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1448 uni1448 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1449 uni1449 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+144a uni144A 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+144c uni144C 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+144d uni144D 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+144e uni144E 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+144f uni144F 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1450 uni1450 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1451 uni1451 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1452 uni1452 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1454 uni1454 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1455 uni1455 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1456 uni1456 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1457 uni1457 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1458 uni1458 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1459 uni1459 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+145a uni145A 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+145b uni145B 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+145c uni145C 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+145d uni145D 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+145e uni145E 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+145f uni145F 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1460 uni1460 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1461 uni1461 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1462 uni1462 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1463 uni1463 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1464 uni1464 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1465 uni1465 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1466 uni1466 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1467 uni1467 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1468 uni1468 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1469 uni1469 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+146a uni146A 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+146b uni146B 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+146c uni146C 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+146d uni146D 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+146e uni146E 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+146f uni146F 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1470 uni1470 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1471 uni1471 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1472 uni1472 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1473 uni1473 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1474 uni1474 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1475 uni1475 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1476 uni1476 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1477 uni1477 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1478 uni1478 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1479 uni1479 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+147a uni147A 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+147b uni147B 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+147c uni147C 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+147d uni147D 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+147e uni147E 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+147f uni147F 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1480 uni1480 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1481 uni1481 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1482 uni1482 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1483 uni1483 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1484 uni1484 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1485 uni1485 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1486 uni1486 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1487 uni1487 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1488 uni1488 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1489 uni1489 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+148a uni148A 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+148b uni148B 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+148c uni148C 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+148d uni148D 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+148e uni148E 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+148f uni148F 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1490 uni1490 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1491 uni1491 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1492 uni1492 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1493 uni1493 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1494 uni1494 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1495 uni1495 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1496 uni1496 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1497 uni1497 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1498 uni1498 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1499 uni1499 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+149a uni149A 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+149b uni149B 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+149c uni149C 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+149d uni149D 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+149e uni149E 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+149f uni149F 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14a0 uni14A0 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14a1 uni14A1 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14a2 uni14A2 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14a3 uni14A3 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14a4 uni14A4 2.13 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Condensed Oblique, Sans Oblique) 2.15 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+14a5 uni14A5 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14a6 uni14A6 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14a7 uni14A7 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14a8 uni14A8 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14a9 uni14A9 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14aa uni14AA 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14ab uni14AB 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14ac uni14AC 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14ad uni14AD 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14ae uni14AE 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14af uni14AF 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14b0 uni14B0 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14b1 uni14B1 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14b2 uni14B2 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14b3 uni14B3 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14b4 uni14B4 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14b5 uni14B5 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14b6 uni14B6 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14b7 uni14B7 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14b8 uni14B8 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14b9 uni14B9 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14ba uni14BA 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14bb uni14BB 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14bc uni14BC 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14bd uni14BD 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14c0 uni14C0 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14c1 uni14C1 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14c2 uni14C2 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14c3 uni14C3 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14c4 uni14C4 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14c5 uni14C5 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14c6 uni14C6 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14c7 uni14C7 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14c8 uni14C8 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14c9 uni14C9 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14ca uni14CA 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14cb uni14CB 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14cc uni14CC 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14cd uni14CD 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14ce uni14CE 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14cf uni14CF 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14d0 uni14D0 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14d1 uni14D1 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14d2 uni14D2 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14d3 uni14D3 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14d4 uni14D4 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14d5 uni14D5 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14d6 uni14D6 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14d7 uni14D7 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14d8 uni14D8 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14d9 uni14D9 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14da uni14DA 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14db uni14DB 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14dc uni14DC 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14dd uni14DD 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14de uni14DE 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14df uni14DF 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14e0 uni14E0 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14e1 uni14E1 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14e2 uni14E2 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14e3 uni14E3 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14e4 uni14E4 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14e5 uni14E5 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14e6 uni14E6 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14e7 uni14E7 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14e8 uni14E8 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14e9 uni14E9 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14ea uni14EA 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14ec uni14EC 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14ed uni14ED 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14ee uni14EE 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14ef uni14EF 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14f0 uni14F0 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14f1 uni14F1 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14f2 uni14F2 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14f3 uni14F3 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14f4 uni14F4 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14f5 uni14F5 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14f6 uni14F6 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14f7 uni14F7 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14f8 uni14F8 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14f9 uni14F9 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14fa uni14FA 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14fb uni14FB 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14fc uni14FC 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14fd uni14FD 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14fe uni14FE 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14ff uni14FF 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1500 uni1500 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1501 uni1501 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1502 uni1502 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1503 uni1503 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1504 uni1504 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1505 uni1505 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1506 uni1506 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1507 uni1507 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1510 uni1510 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1511 uni1511 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1512 uni1512 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1513 uni1513 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1514 uni1514 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1515 uni1515 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1516 uni1516 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1517 uni1517 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1518 uni1518 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1519 uni1519 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+151a uni151A 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+151b uni151B 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+151c uni151C 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+151d uni151D 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+151e uni151E 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+151f uni151F 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1520 uni1520 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1521 uni1521 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1522 uni1522 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1523 uni1523 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1524 uni1524 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1525 uni1525 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1526 uni1526 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1527 uni1527 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1528 uni1528 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1529 uni1529 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+152a uni152A 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+152b uni152B 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+152c uni152C 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+152d uni152D 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+152e uni152E 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+152f uni152F 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1530 uni1530 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1531 uni1531 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1532 uni1532 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1533 uni1533 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1534 uni1534 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1535 uni1535 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1536 uni1536 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1537 uni1537 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1538 uni1538 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1539 uni1539 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+153a uni153A 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+153b uni153B 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+153c uni153C 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+153d uni153D 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+153e uni153E 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1540 uni1540 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1541 uni1541 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1542 uni1542 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1543 uni1543 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1544 uni1544 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1545 uni1545 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1546 uni1546 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1547 uni1547 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1548 uni1548 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1549 uni1549 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+154a uni154A 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+154b uni154B 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+154c uni154C 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+154d uni154D 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+154e uni154E 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+154f uni154F 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1550 uni1550 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1552 uni1552 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1553 uni1553 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1554 uni1554 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1555 uni1555 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1556 uni1556 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1557 uni1557 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1558 uni1558 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1559 uni1559 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+155a uni155A 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+155b uni155B 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+155c uni155C 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+155d uni155D 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+155e uni155E 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+155f uni155F 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1560 uni1560 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1561 uni1561 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1562 uni1562 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1563 uni1563 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1564 uni1564 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1565 uni1565 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1566 uni1566 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1567 uni1567 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1568 uni1568 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1569 uni1569 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+156a uni156A 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1574 uni1574 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1575 uni1575 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1576 uni1576 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1577 uni1577 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1578 uni1578 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1579 uni1579 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+157a uni157A 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+157b uni157B 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+157c uni157C 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+157d uni157D 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+157e uni157E 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+157f uni157F 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1580 uni1580 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1581 uni1581 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1582 uni1582 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1583 uni1583 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1584 uni1584 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1585 uni1585 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+158a uni158A 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+158b uni158B 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+158c uni158C 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+158d uni158D 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+158e uni158E 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+158f uni158F 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1590 uni1590 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1591 uni1591 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1592 uni1592 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1593 uni1593 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1594 uni1594 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1595 uni1595 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1596 uni1596 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15a0 uni15A0 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15a1 uni15A1 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15a2 uni15A2 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15a3 uni15A3 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15a4 uni15A4 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15a5 uni15A5 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15a6 uni15A6 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15a7 uni15A7 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15a8 uni15A8 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15a9 uni15A9 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15aa uni15AA 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15ab uni15AB 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15ac uni15AC 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15ad uni15AD 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15ae uni15AE 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15af uni15AF 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15de uni15DE 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15e1 uni15E1 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1646 uni1646 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1647 uni1647 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+166e uni166E 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+166f uni166F 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1670 uni1670 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1671 uni1671 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1672 uni1672 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1673 uni1673 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1674 uni1674 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1675 uni1675 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1676 uni1676 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1680 uni1680 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1681 uni1681 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1682 uni1682 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1683 uni1683 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1684 uni1684 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1685 uni1685 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1686 uni1686 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1687 uni1687 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1688 uni1688 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1689 uni1689 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+168a uni168A 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+168b uni168B 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+168c uni168C 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+168d uni168D 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+168e uni168E 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+168f uni168F 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1690 uni1690 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1691 uni1691 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1692 uni1692 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1693 uni1693 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1694 uni1694 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1695 uni1695 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1696 uni1696 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1697 uni1697 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1698 uni1698 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1699 uni1699 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+169a uni169A 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+169b uni169B 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+169c uni169C 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1d00 uni1D00 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d01 uni1D01 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d02 uni1D02 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1d03 uni1D03 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d04 uni1D04 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+1d05 uni1D05 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d06 uni1D06 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d07 uni1D07 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d08 uni1D08 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+1d09 uni1D09 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1d0a uni1D0A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d0b uni1D0B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+1d0c uni1D0C 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d0d uni1D0D 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+1d0e uni1D0E 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+1d0f uni1D0F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+1d10 uni1D10 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+1d11 uni1D11 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+1d12 uni1D12 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+1d13 uni1D13 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+1d14 uni1D14 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1d16 uni1D16 2.3 +U+1d17 uni1D17 2.3 +U+1d18 uni1D18 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d19 uni1D19 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) +U+1d1a uni1D1A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) +U+1d1b uni1D1B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d1c uni1D1C 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d1d uni1D1D 2.3 +U+1d1e uni1D1E 2.3 +U+1d1f uni1D1F 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+1d20 uni1D20 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+1d21 uni1D21 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+1d22 uni1D22 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+1d23 uni1D23 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d26 uni1D26 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+1d27 uni1D27 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+1d28 uni1D28 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+1d29 uni1D29 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d2a uni1D2A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d2b uni1D2B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) +U+1d2c uni1D2C 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d2d uni1D2D 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d2e uni1D2E 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d30 uni1D30 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d31 uni1D31 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d32 uni1D32 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d33 uni1D33 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d34 uni1D34 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d35 uni1D35 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d36 uni1D36 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d37 uni1D37 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d38 uni1D38 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d39 uni1D39 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d3a uni1D3A 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d3b uni1D3B 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d3c uni1D3C 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d3d uni1D3D 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono Oblique) +U+1d3e uni1D3E 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d3f uni1D3F 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d40 uni1D40 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d41 uni1D41 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d42 uni1D42 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d43 uni1D43 2.3 +U+1d44 uni1D44 2.3 +U+1d45 uni1D45 2.3 +U+1d46 uni1D46 2.3 +U+1d47 uni1D47 2.3 +U+1d48 uni1D48 2.3 +U+1d49 uni1D49 2.3 +U+1d4a uni1D4A 2.3 +U+1d4b uni1D4B 2.3 +U+1d4c uni1D4C 2.3 +U+1d4d uni1D4D 2.3 +U+1d4e uni1D4E 2.3 +U+1d4f uni1D4F 2.3 +U+1d50 uni1D50 2.3 +U+1d51 uni1D51 2.3 +U+1d52 uni1D52 2.3 +U+1d53 uni1D53 2.3 +U+1d54 uni1D54 2.3 +U+1d55 uni1D55 2.3 +U+1d56 uni1D56 2.3 +U+1d57 uni1D57 2.3 +U+1d58 uni1D58 2.3 +U+1d59 uni1D59 2.3 +U+1d5a uni1D5A 2.3 +U+1d5b uni1D5B 2.3 +U+1d5d uni1D5D 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+1d5e uni1D5E 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+1d5f uni1D5F 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+1d60 uni1D60 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+1d61 uni1D61 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+1d62 uni1D62 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d63 uni1D63 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d64 uni1D64 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d65 uni1D65 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d66 uni1D66 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+1d67 uni1D67 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+1d68 uni1D68 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+1d69 uni1D69 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+1d6a uni1D6A 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+1d77 uni1D77 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1d78 uni1D78 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d7b uni1D7B 2.3 +U+1d7d uni1D7D 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d85 uni1D85 2.3 +U+1d9b uni1D9B 2.3 +U+1d9c uni1D9C 2.3 +U+1d9d uni1D9D 2.3 +U+1d9e uni1D9E 2.3 +U+1d9f uni1D9F 2.3 +U+1da0 uni1DA0 2.3 +U+1da1 uni1DA1 2.3 +U+1da2 uni1DA2 2.3 +U+1da3 uni1DA3 2.3 +U+1da4 uni1DA4 2.3 +U+1da5 uni1DA5 2.3 +U+1da6 uni1DA6 2.3 +U+1da7 uni1DA7 2.3 +U+1da8 uni1DA8 2.3 +U+1da9 uni1DA9 2.3 +U+1daa uni1DAA 2.3 +U+1dab uni1DAB 2.3 +U+1dac uni1DAC 2.3 +U+1dad uni1DAD 2.3 +U+1dae uni1DAE 2.3 +U+1daf uni1DAF 2.3 +U+1db0 uni1DB0 2.3 +U+1db1 uni1DB1 2.3 +U+1db2 uni1DB2 2.3 +U+1db3 uni1DB3 2.3 +U+1db4 uni1DB4 2.3 +U+1db5 uni1DB5 2.3 +U+1db6 uni1DB6 2.3 +U+1db7 uni1DB7 2.3 +U+1db8 uni1DB8 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+1db9 uni1DB9 2.3 +U+1dba uni1DBA 2.3 +U+1dbb uni1DBB 2.3 +U+1dbc uni1DBC 2.3 +U+1dbd uni1DBD 2.3 +U+1dbe uni1DBE 2.3 +U+1dbf uni1DBF 2.3 +U+1dc4 uni1DC4 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1dc5 uni1DC5 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1dc6 uni1DC6 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1dc7 uni1DC7 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1dc8 uni1DC8 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1dc9 uni1DC9 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1e00 uni1E00 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e01 uni1E01 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e02 uni1E02 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e03 uni1E03 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e04 uni1E04 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e05 uni1E05 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e06 uni1E06 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e07 uni1E07 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e08 uni1E08 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.22 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e09 uni1E09 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.22 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e0a uni1E0A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e0b uni1E0B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e0c uni1E0C 2.1 +U+1e0d uni1E0D 2.1 +U+1e0e uni1E0E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e0f uni1E0F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e10 uni1E10 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.22 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e11 uni1E11 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.22 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e12 uni1E12 1.13 +U+1e13 uni1E13 1.13 +U+1e14 uni1E14 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1e15 uni1E15 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1e16 uni1E16 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1e17 uni1E17 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1e18 uni1E18 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e19 uni1E19 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e1a uni1E1A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e1b uni1E1B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e1c uni1E1C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.17 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1e1d uni1E1D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.17 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1e1e uni1E1E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e1f uni1E1F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e20 uni1E20 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e21 uni1E21 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e22 uni1E22 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e23 uni1E23 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e24 uni1E24 2.1 +U+1e25 uni1E25 2.1 +U+1e26 uni1E26 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e27 uni1E27 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e28 uni1E28 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e29 uni1E29 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e2a uni1E2A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e2b uni1E2B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e2c uni1E2C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e2d uni1E2D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e2e uni1E2E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1e2f uni1E2F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1e30 uni1E30 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e31 uni1E31 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e32 uni1E32 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e33 uni1E33 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e34 uni1E34 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e35 uni1E35 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e36 uni1E36 2.1 +U+1e37 uni1E37 2.1 +U+1e38 uni1E38 2.1 +U+1e39 uni1E39 2.1 +U+1e3a uni1E3A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e3b uni1E3B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e3c uni1E3C 1.13 +U+1e3d uni1E3D 1.13 +U+1e3e uni1E3E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e3f uni1E3F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e40 uni1E40 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e41 uni1E41 2.1 +U+1e42 uni1E42 2.1 +U+1e43 uni1E43 2.1 +U+1e44 uni1E44 1.13 +U+1e45 uni1E45 1.13 +U+1e46 uni1E46 2.1 +U+1e47 uni1E47 2.1 +U+1e48 uni1E48 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e49 uni1E49 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e4a uni1E4A 1.13 +U+1e4b uni1E4B 1.13 +U+1e4c uni1E4C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.30 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1e4d uni1E4D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.30 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1e4e uni1E4E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1e4f uni1E4F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1e50 uni1E50 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1e51 uni1E51 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1e52 uni1E52 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1e53 uni1E53 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1e54 uni1E54 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e55 uni1E55 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e56 uni1E56 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e57 uni1E57 2.1 +U+1e58 uni1E58 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e59 uni1E59 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e5a uni1E5A 2.1 +U+1e5b uni1E5B 2.1 +U+1e5c uni1E5C 2.1 +U+1e5d uni1E5D 2.1 +U+1e5e uni1E5E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e5f uni1E5F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e60 uni1E60 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e61 uni1E61 2.1 +U+1e62 uni1E62 2.1 +U+1e63 uni1E63 2.1 +U+1e64 uni1E64 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1e65 uni1E65 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1e66 uni1E66 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1e67 uni1E67 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1e68 uni1E68 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e69 uni1E69 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e6a uni1E6A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e6b uni1E6B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e6c uni1E6C 2.1 +U+1e6d uni1E6D 2.1 +U+1e6e uni1E6E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e6f uni1E6F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e70 uni1E70 1.13 +U+1e71 uni1E71 1.13 +U+1e72 uni1E72 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e73 uni1E73 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e74 uni1E74 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e75 uni1E75 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e76 uni1E76 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e77 uni1E77 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e78 uni1E78 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.30 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e79 uni1E79 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.30 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e7a uni1E7A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1e7b uni1E7B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1e7c uni1E7C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e7d uni1E7D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e7e uni1E7E 2.1 +U+1e7f uni1E7F 2.1 +U+1e80 Wgrave 1.2 +U+1e81 wgrave 1.2 +U+1e82 Wacute 1.2 +U+1e83 wacute 1.2 +U+1e84 Wdieresis 1.2 +U+1e85 wdieresis 1.2 +U+1e86 uni1E86 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e87 uni1E87 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e88 uni1E88 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e89 uni1E89 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e8a uni1E8A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e8b uni1E8B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e8c uni1E8C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e8d uni1E8D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e8e uni1E8E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e8f uni1E8F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e90 uni1E90 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e91 uni1E91 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e92 uni1E92 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e93 uni1E93 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e94 uni1E94 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e95 uni1E95 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e96 uni1E96 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e97 uni1E97 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e98 uni1E98 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e99 uni1E99 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e9a uni1E9A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.10 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1e9b uni1E9B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e9c uni1E9C 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+1e9d uni1E9D 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+1e9e uni1E9E 2.28 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.32 (Sans ExtraLight) +U+1e9f uni1E9F 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1ea0 uni1EA0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1ea1 uni1EA1 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1ea2 uni1EA2 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1ea3 uni1EA3 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1ea4 uni1EA4 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1ea5 uni1EA5 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1ea6 uni1EA6 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1ea7 uni1EA7 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1ea8 uni1EA8 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1ea9 uni1EA9 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1eaa uni1EAA 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1eab uni1EAB 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1eac uni1EAC 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1ead uni1EAD 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1eae uni1EAE 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1eaf uni1EAF 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1eb0 uni1EB0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.22 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1eb1 uni1EB1 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.22 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1eb2 uni1EB2 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1eb3 uni1EB3 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1eb4 uni1EB4 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1eb5 uni1EB5 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1eb6 uni1EB6 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1eb7 uni1EB7 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1eb8 uni1EB8 2.2 +U+1eb9 uni1EB9 2.2 +U+1eba uni1EBA 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1ebb uni1EBB 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1ebc uni1EBC 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1ebd uni1EBD 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1ebe uni1ebe 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1ebf uni1ebF 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1ec0 uni1EC0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1ec1 uni1EC1 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1ec2 uni1EC2 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1ec3 uni1EC3 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1ec4 uni1EC4 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1ec5 uni1EC5 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1ec6 uni1EC6 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1ec7 uni1EC7 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1ec8 uni1EC8 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1ec9 uni1EC9 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1eca uni1ECA 2.2 +U+1ecb uni1ECB 2.2 +U+1ecc uni1ECC 2.2 +U+1ecd uni1ECD 2.2 +U+1ece uni1ECE 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1ecf uni1ECF 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1ed0 uni1ED0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1ed1 uni1ED1 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1ed2 uni1ED2 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1ed3 uni1ED3 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1ed4 uni1ED4 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1ed5 uni1ED5 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1ed6 uni1ED6 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1ed7 uni1ED7 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1ed8 uni1ED8 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1ed9 uni1ED9 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1eda uni1EDA 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1edb uni1EDB 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1edc uni1EDC 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1edd uni1EDD 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1ede uni1EDE 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1edf uni1EDF 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1ee0 uni1EE0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1ee1 uni1EE1 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1ee2 uni1EE2 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1ee3 uni1EE3 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1ee4 uni1EE4 2.2 +U+1ee5 uni1EE5 2.2 +U+1ee6 uni1EE6 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1ee7 uni1EE7 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1ee8 uni1EE8 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1ee9 uni1EE9 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1eea uni1EEA 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1eeb uni1EEB 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1eec uni1EEC 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1eed uni1EED 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1eee uni1EEE 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1eef uni1EEF 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1ef0 uni1EF0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1ef1 uni1EF1 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1ef2 Ygrave 1.2 +U+1ef3 ygrave 1.2 +U+1ef4 uni1EF4 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1ef5 uni1EF5 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1ef6 uni1EF6 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1ef7 uni1EF7 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1ef8 uni1EF8 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1ef9 uni1EF9 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1efa uni1EFA 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+1efb uni1EFB 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+1f00 uni1F00 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f01 uni1F01 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f02 uni1F02 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f03 uni1F03 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f04 uni1F04 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f05 uni1F05 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f06 uni1F06 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f07 uni1F07 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f08 uni1F08 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f09 uni1F09 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f0a uni1F0A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f0b uni1F0B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f0c uni1F0C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f0d uni1F0D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f0e uni1F0E 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f0f uni1F0F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f10 uni1F10 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f11 uni1F11 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f12 uni1F12 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f13 uni1F13 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f14 uni1F14 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f15 uni1F15 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f18 uni1F18 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f19 uni1F19 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f1a uni1F1A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f1b uni1F1B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f1c uni1F1C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f1d uni1F1D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f20 uni1F20 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f21 uni1F21 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f22 uni1F22 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f23 uni1F23 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f24 uni1F24 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f25 uni1F25 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f26 uni1F26 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f27 uni1F27 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f28 uni1F28 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f29 uni1F29 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f2a uni1F2A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f2b uni1F2B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f2c uni1F2C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f2d uni1F2D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f2e uni1F2E 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f2f uni1F2F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f30 uni1F30 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f31 uni1F31 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f32 uni1F32 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f33 uni1F33 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f34 uni1F34 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f35 uni1F35 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f36 uni1F36 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f37 uni1F37 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f38 uni1F38 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f39 uni1F39 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f3a uni1F3A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f3b uni1F3B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f3c uni1F3C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f3d uni1F3D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f3e uni1F3E 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f3f uni1F3F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f40 uni1F40 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f41 uni1F41 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f42 uni1F42 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f43 uni1F43 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f44 uni1F44 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f45 uni1F45 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f48 uni1F48 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f49 uni1F49 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f4a uni1F4A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f4b uni1F4B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f4c uni1F4C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f4d uni1F4D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f50 uni1F50 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f51 uni1F51 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f52 uni1F52 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f53 uni1F53 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f54 uni1F54 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f55 uni1F55 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f56 uni1F56 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f57 uni1F57 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f59 uni1F59 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f5b uni1F5B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f5d uni1F5D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f5f uni1F5F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f60 uni1F60 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f61 uni1F61 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f62 uni1F62 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f63 uni1F63 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f64 uni1F64 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f65 uni1F65 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f66 uni1F66 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f67 uni1F67 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f68 uni1F68 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f69 uni1F69 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f6a uni1F6A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f6b uni1F6B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f6c uni1F6C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f6d uni1F6D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f6e uni1F6E 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f6f uni1F6F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f70 uni1F70 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1f71 uni1F71 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1f72 uni1F72 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1f73 uni1F73 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1f74 uni1F74 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1f75 uni1F75 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1f76 uni1F76 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f77 uni1F77 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f78 uni1F78 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1f79 uni1F79 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1f7a uni1F7A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f7b uni1F7B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f7c uni1F7C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f7d uni1F7D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f80 uni1F80 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f81 uni1F81 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f82 uni1F82 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f83 uni1F83 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f84 uni1F84 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f85 uni1F85 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f86 uni1F86 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f87 uni1F87 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f88 uni1F88 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f89 uni1F89 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f8a uni1F8A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f8b uni1F8B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f8c uni1F8C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f8d uni1F8D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f8e uni1F8E 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f8f uni1F8F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f90 uni1F90 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f91 uni1F91 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f92 uni1F92 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f93 uni1F93 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f94 uni1F94 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f95 uni1F95 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f96 uni1F96 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f97 uni1F97 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f98 uni1F98 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f99 uni1F99 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f9a uni1F9A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f9b uni1F9B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f9c uni1F9C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f9d uni1F9D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f9e uni1F9E 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f9f uni1F9F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fa0 uni1FA0 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fa1 uni1FA1 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fa2 uni1FA2 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fa3 uni1FA3 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fa4 uni1FA4 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fa5 uni1FA5 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fa6 uni1FA6 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fa7 uni1FA7 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fa8 uni1FA8 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fa9 uni1FA9 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1faa uni1FAA 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fab uni1FAB 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fac uni1FAC 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fad uni1FAD 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fae uni1FAE 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1faf uni1FAF 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fb0 uni1FB0 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fb1 uni1FB1 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fb2 uni1FB2 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fb3 uni1FB3 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fb4 uni1FB4 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fb6 uni1FB6 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fb7 uni1FB7 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fb8 uni1FB8 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fb9 uni1FB9 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fba uni1FBA 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fbb uni1FBB 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fbc uni1FBC 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fbd uni1FBD 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fbe uni1FBE 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fbf uni1FBF 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fc0 uni1FC0 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fc1 uni1FC1 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fc2 uni1FC2 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fc3 uni1FC3 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fc4 uni1FC4 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fc6 uni1FC6 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fc7 uni1FC7 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fc8 uni1FC8 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fc9 uni1FC9 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fca uni1FCA 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fcb uni1FCB 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fcc uni1FCC 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.10 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fcd uni1FCD 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fce uni1FCE 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fcf uni1FCF 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fd0 uni1FD0 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fd1 uni1FD1 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fd2 uni1FD2 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fd3 uni1FD3 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fd6 uni1FD6 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fd7 uni1FD7 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fd8 uni1FD8 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fd9 uni1FD9 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fda uni1FDA 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fdb uni1FDB 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fdd uni1FDD 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fde uni1FDE 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fdf uni1FDF 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fe0 uni1FE0 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fe1 uni1FE1 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fe2 uni1FE2 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fe3 uni1FE3 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fe4 uni1FE4 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fe5 uni1FE5 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fe6 uni1FE6 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fe7 uni1FE7 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fe8 uni1FE8 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fe9 uni1FE9 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fea uni1FEA 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1feb uni1FEB 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fec uni1FEC 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fed uni1FED 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fee uni1FEE 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fef uni1FEF 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1ff2 uni1FF2 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1ff3 uni1FF3 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1ff4 uni1FF4 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1ff6 uni1FF6 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1ff7 uni1FF7 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1ff8 uni1FF8 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1ff9 uni1FF9 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1ffa uni1FFA 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1ffb uni1FFB 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.10 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1ffc uni1FFC 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1ffd uni1FFD 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1ffe uni1FFE 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+2000 uni2000 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+2001 uni2001 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+2002 uni2002 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+2003 uni2003 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+2004 uni2004 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+2005 uni2005 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+2006 uni2006 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+2007 uni2007 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+2008 uni2008 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+2009 uni2009 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+200a uni200A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+200b uni200B 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.8 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+200c uni200C 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.8 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+200d uni200D 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.8 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+200e uni200E 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.8 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+200f uni200F 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.8 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+2010 uni2010 1.5 +U+2011 uni2011 1.5 +U+2012 figuredash 1.5 +U+2013 endash original +U+2014 emdash original +U+2015 uni2015 1.5 +U+2016 uni2016 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2017 underscoredbl 2.3 +U+2018 quoteleft original +U+2019 quoteright original +U+201a quotesinglbase original +U+201b quotereversed 2.3 +U+201c quotedblleft original +U+201d quotedblright original +U+201e quotedblbase original +U+201f uni201F 2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+2020 dagger original +U+2021 daggerdbl original +U+2022 bullet original +U+2023 uni2023 2.2 +U+2024 onedotenleader 2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.9 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2025 twodotenleader 2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.9 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2026 ellipsis original +U+2027 uni2027 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2028 uni2028 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2029 uni2029 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+202a uni202A 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+202b uni202B 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+202c uni202C 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+202d uni202D 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+202e uni202E 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+202f uni202F 2.11 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.23 (Serif Italic Condensed) +U+2030 perthousand original +U+2031 uni2031 2.1 +U+2032 minute 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.28 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.31 (Serif Condensed Italic) +U+2033 second 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.28 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.31 (Serif Condensed Italic) +U+2034 uni2034 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.28 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.31 (Serif Condensed Italic) +U+2035 uni2035 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.28 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.31 (Serif Condensed Italic) +U+2036 uni2036 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.28 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.31 (Serif Condensed Italic) +U+2037 uni2037 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.28 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.31 (Serif Condensed Italic) +U+2038 uni2038 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2039 guilsinglleft original +U+203a guilsinglright original +U+203b uni203B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+203c exclamdbl 2.0 +U+203d uni203D 2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.11 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.14 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+203e uni203E 2.3 +U+203f uni203F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2040 uni2040 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2041 uni2041 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2042 uni2042 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2043 uni2043 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2044 fraction 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2045 uni2045 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2046 uni2046 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2047 uni2047 2.0 +U+2048 uni2048 2.0 +U+2049 uni2049 2.0 +U+204a uni204A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+204b uni204B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+204c uni204C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+204d uni204D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+204e uni204E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+204f uni204F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2050 uni2050 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2051 uni2051 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2052 uni2052 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2053 uni2053 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2054 uni2054 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2055 uni2055 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2056 uni2056 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2057 uni2057 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2058 uni2058 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2059 uni2059 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+205a uni205A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+205b uni205B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+205c uni205C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+205d uni205D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+205e uni205E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+205f uni205F 2.14 +U+2060 uni2060 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2061 uni2061 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2062 uni2062 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2063 uni2063 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2064 uni2064 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+206a uni206A 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+206b uni206B 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+206c uni206C 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+206d uni206D 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+206e uni206E 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+206f uni206F 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2070 uni2070 2.2 +U+2071 uni2071 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+2074 uni2074 2.2 +U+2075 uni2075 2.2 +U+2076 uni2076 2.2 +U+2077 uni2077 2.2 +U+2078 uni2078 2.2 +U+2079 uni2079 2.2 +U+207a uni207A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+207b uni207B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+207c uni207C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+207d uni207D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+207e uni207E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+207f uni207F 1.14 +U+2080 uni2080 2.4 +U+2081 uni2081 2.4 +U+2082 uni2082 2.4 +U+2083 uni2083 2.4 +U+2084 uni2084 2.4 +U+2085 uni2085 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2086 uni2086 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2087 uni2087 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2088 uni2088 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2089 uni2089 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+208a uni208A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+208b uni208B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+208c uni208C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+208d uni208D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+208e uni208E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+2090 uni2090 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+2091 uni2091 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+2092 uni2092 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+2093 uni2093 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+2094 uni2094 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+20a0 uni20A0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+20a1 colonmonetary 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+20a2 uni20A2 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+20a3 franc 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+20a4 lira 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+20a5 uni20A5 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+20a6 uni20A6 2.3 +U+20a7 peseta 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+20a8 uni20A8 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+20a9 uni20A9 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+20aa uni20AA 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+20ab dong 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+20ac Euro original +U+20ad uni20AD 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+20ae uni20AE 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+20af uni20AF 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+20b0 uni20B0 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+20b1 uni20B1 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.14 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+20b2 uni20B2 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+20b3 uni20B3 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+20b4 uni20B4 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+20b5 uni20B5 2.2 +U+20b8 uni20B8 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+20b9 uni20B9 2.32 +U+20d0 uni20D0 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+20d1 uni20D1 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+20d6 uni20D6 2.8 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+20d7 uni20D7 2.8 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+20db uni20DB 2.23 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+20dc uni20DC 2.23 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+20e1 uni20E1 2.23 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2100 uni2100 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2101 uni2101 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2102 uni2102 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.16 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Condensed) +U+2103 uni2103 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2104 uni2104 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2105 uni2105 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2106 uni2106 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2107 uni2107 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2108 uni2108 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2109 uni2109 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+210b uni210B 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+210c uni210C 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+210d uni210D 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.22 (Serif, Serif Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+210e uni210E 2.5 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.23 (Serif Italic Condensed) 2.26 (Sans ExtraLight) +U+210f uni210F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.28 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2110 uni2110 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2111 Ifraktur 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2112 uni2112 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2113 uni2113 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2114 uni2114 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2115 uni2115 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.22 (Serif, Serif Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2116 uni2116 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+2117 uni2117 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2118 weierstrass 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2119 uni2119 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.22 (Serif, Serif Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+211a uni211A 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.22 (Serif, Serif Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+211b uni211B 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+211c Rfraktur 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+211d uni211D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+211e prescription 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+211f uni211F 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2120 uni2120 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2121 uni2121 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2122 trademark original +U+2123 uni2123 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2124 uni2124 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.22 (Serif, Serif Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2125 uni2125 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2126 uni2126 2.2 +U+2127 uni2127 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2128 uni2128 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2129 uni2129 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+212a uni212A 2.2 +U+212b uni212B 2.2 +U+212c uni212C 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+212d uni212D 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+212e estimated 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+212f uni212F 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2130 uni2130 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2131 uni2131 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2132 uni2132 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+2133 uni2133 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2134 uni2134 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2135 aleph 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2136 uni2136 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2137 uni2137 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2138 uni2138 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2139 uni2139 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+213a uni213A 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+213b uni213B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+213c uni213C 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.22 (Serif, Serif Condensed) +U+213d uni213D 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.22 (Serif, Serif Condensed) +U+213e uni213E 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.22 (Serif, Serif Condensed) +U+213f uni213F 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.22 (Serif, Serif Condensed) +U+2140 uni2140 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.22 (Serif, Serif Condensed) +U+2141 uni2141 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2142 uni2142 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2143 uni2143 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2144 uni2144 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2145 uni2145 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.22 (Serif, Serif Condensed) +U+2146 uni2146 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.22 (Serif, Serif Condensed) +U+2147 uni2147 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.22 (Serif, Serif Condensed) +U+2148 uni2148 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.22 (Serif, Serif Condensed) +U+2149 uni2149 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.22 (Serif, Serif Condensed) +U+214b uni214B 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+214e uni214E 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2150 uni2150 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+2151 uni2151 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+2152 uni2152 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+2153 onethird 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2154 twothirds 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2155 uni2155 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2156 uni2156 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2157 uni2157 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2158 uni2158 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2159 uni2159 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+215a uni215A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+215b oneeighth 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+215c threeeighths 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+215d fiveeighths 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+215e seveneighths 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+215f uni215F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2160 uni2160 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2161 uni2161 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2162 uni2162 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2163 uni2163 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2164 uni2164 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2165 uni2165 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2166 uni2166 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2167 uni2167 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2168 uni2168 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2169 uni2169 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+216a uni216A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+216b uni216B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+216c uni216C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+216d uni216D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+216e uni216E 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+216f uni216F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2170 uni2170 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2171 uni2171 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2172 uni2172 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2173 uni2173 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2174 uni2174 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2175 uni2175 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2176 uni2176 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2177 uni2177 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2178 uni2178 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2179 uni2179 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+217a uni217A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+217b uni217B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+217c uni217C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+217d uni217D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+217e uni217E 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+217f uni217F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2180 uni2180 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2181 uni2181 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+2182 uni2182 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+2183 uni2183 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2184 uni2184 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2185 uni2185 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+2189 uni2189 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+2190 arrowleft 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+2191 arrowup 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+2192 arrowright 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+2193 arrowdown 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+2194 arrowboth 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2195 arrowupdn 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2196 uni2196 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2197 uni2197 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2198 uni2198 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2199 uni2199 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+219a uni219A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+219b uni219B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+219c uni219C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+219d uni219D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+219e uni219E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+219f uni219F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21a0 uni21A0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21a1 uni21A1 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21a2 uni21A2 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21a3 uni21A3 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21a4 uni21A4 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21a5 uni21A5 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21a6 uni21A6 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21a7 uni21A7 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21a8 arrowupdnbse 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21a9 uni21A9 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21aa uni21AA 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21ab uni21AB 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21ac uni21AC 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21ad uni21AD 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21ae uni21AE 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21af uni21AF 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21b0 uni21B0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21b1 uni21B1 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21b2 uni21B2 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21b3 uni21B3 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21b4 uni21B4 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21b5 carriagereturn 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21b6 uni21B6 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21b7 uni21B7 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21b8 uni21B8 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21b9 uni21B9 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21ba uni21BA 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21bb uni21BB 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21bc uni21BC 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21bd uni21BD 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21be uni21BE 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21bf uni21BF 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21c0 uni21C0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21c1 uni21C1 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21c2 uni21C2 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21c3 uni21C3 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21c4 uni21C4 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21c5 uni21C5 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21c6 uni21C6 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21c7 uni21C7 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21c8 uni21C8 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21c9 uni21C9 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21ca uni21CA 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21cb uni21CB 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21cc uni21CC 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21cd uni21CD 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21ce uni21CE 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21cf uni21CF 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21d0 arrowdblleft 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21d1 arrowdblup 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21d2 arrowdblright 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21d3 arrowdbldown 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21d4 arrowdblboth 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21d5 uni21D5 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21d6 uni21D6 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21d7 uni21D7 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21d8 uni21D8 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21d9 uni21D9 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21da uni21DA 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21db uni21DB 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21dc uni21DC 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21dd uni21DD 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21de uni21DE 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21df uni21DF 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21e0 uni21E0 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21e1 uni21E1 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21e2 uni21E2 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21e3 uni21E3 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21e4 uni21E4 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21e5 uni21E5 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21e6 uni21E6 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21e7 uni21E7 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21e8 uni21E8 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21e9 uni21E9 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21ea uni21EA 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21eb uni21EB 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21ec uni21EC 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21ed uni21ED 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21ee uni21EE 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21ef uni21EF 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21f0 uni21F0 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21f1 uni21F1 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21f2 uni21F2 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21f3 uni21F3 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21f4 uni21F4 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21f5 uni21F5 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21f6 uni21F6 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21f7 uni21F7 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21f8 uni21F8 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21f9 uni21F9 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21fa uni21FA 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21fb uni21FB 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21fc uni21FC 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21fd uni21FD 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21fe uni21FE 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21ff uni21FF 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2200 universal 2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2201 uni2201 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2202 partialdiff original +U+2203 existential 2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2204 uni2204 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2205 emptyset 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2206 Delta original +U+2207 gradient 2.1 +U+2208 element 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2209 notelement 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+220a uni220A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+220b suchthat 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+220c uni220C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+220d uni220D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+220e uni220E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+220f product original +U+2210 uni2210 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2211 summation original +U+2212 minus original +U+2213 uni2213 2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2214 uni2214 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2215 uni2215 original +U+2216 uni2216 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2217 asteriskmath 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2218 uni2218 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2219 uni2219 original +U+221a radical original +U+221b uni221B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+221c uni221C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+221d proportional 2.1 +U+221e infinity original +U+221f orthogonal 2.1 +U+2220 angle 2.3 +U+2221 uni2221 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2222 uni2222 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2223 uni2223 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2224 uni2224 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2225 uni2225 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2226 uni2226 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2227 logicaland 2.1 +U+2228 logicalor 2.1 +U+2229 intersection 2.1 +U+222a union 2.1 +U+222b integral original +U+222c uni222C 2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.10 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+222d uni222D 2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.10 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+222e uni222E 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+222f uni222F 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2230 uni2230 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2231 uni2231 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2232 uni2232 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2233 uni2233 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2234 therefore 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.31 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2235 uni2235 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.31 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2236 uni2236 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.31 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2237 uni2237 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.31 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2238 uni2238 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2239 uni2239 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+223a uni223A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+223b uni223B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+223c similar 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+223d uni223D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+223e uni223E 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+223f uni223F 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2240 uni2240 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2241 uni2241 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2242 uni2242 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2243 uni2243 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2244 uni2244 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2245 congruent 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2246 uni2246 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2247 uni2247 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2248 approxequal original +U+2249 uni2249 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+224a uni224A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+224b uni224B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+224c uni224C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+224d uni224D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+224e uni224E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+224f uni224F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2250 uni2250 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2251 uni2251 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2252 uni2252 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2253 uni2253 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2254 uni2254 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2255 uni2255 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2256 uni2256 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2257 uni2257 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2258 uni2258 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2259 uni2259 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+225a uni225A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+225b uni225B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+225c uni225C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+225d uni225D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+225e uni225E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+225f uni225F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2260 notequal original +U+2261 equivalence 2.1 +U+2262 uni2262 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2263 uni2263 2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2264 lessequal original +U+2265 greaterequal original +U+2266 uni2266 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2267 uni2267 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2268 uni2268 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2269 uni2269 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+226a uni226A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+226b uni226B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+226c uni226C 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+226d uni226D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+226e uni226E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+226f uni226F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2270 uni2270 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2271 uni2271 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2272 uni2272 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2273 uni2273 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2274 uni2274 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2275 uni2275 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2276 uni2276 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2277 uni2277 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2278 uni2278 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2279 uni2279 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+227a uni227A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+227b uni227B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+227c uni227C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+227d uni227D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+227e uni227E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+227f uni227F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2280 uni2280 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2281 uni2281 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2282 propersubset 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2283 propersuperset 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2284 notsubset 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2285 uni2285 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2286 reflexsubset 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2287 reflexsuperset 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2288 uni2288 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2289 uni2289 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+228a uni228A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+228b uni228B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+228c uni228C 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+228d uni228D 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+228e uni228E 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+228f uni228F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2290 uni2290 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2291 uni2291 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2292 uni2292 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2293 uni2293 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2294 uni2294 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2295 circleplus 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2296 uni2296 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2297 circlemultiply 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2298 uni2298 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2299 uni2299 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+229a uni229A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+229b uni229B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+229c uni229C 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+229d uni229D 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+229e uni229E 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+229f uni229F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+22a0 uni22A0 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+22a1 uni22A1 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+22a2 uni22A2 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+22a3 uni22A3 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+22a4 uni22A4 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+22a5 perpendicular 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+22a6 uni22A6 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+22a7 uni22A7 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+22a8 uni22A8 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+22a9 uni22A9 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+22aa uni22AA 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+22ab uni22AB 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+22ac uni22AC 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+22ad uni22AD 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+22ae uni22AE 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+22af uni22AF 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+22b0 uni22B0 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22b1 uni22B1 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22b2 uni22B2 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22b3 uni22B3 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22b4 uni22B4 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22b5 uni22B5 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22b6 uni22B6 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22b7 uni22B7 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22b8 uni22B8 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22b9 uni22B9 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22ba uni22BA 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22bb uni22BB 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22bc uni22BC 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22bd uni22BD 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22be uni22BE 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+22bf uni22BF 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+22c0 uni22C0 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22c1 uni22C1 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22c2 uni22C2 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22c3 uni22C3 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22c4 uni22C4 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22c5 dotmath 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+22c6 uni22C6 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+22c7 uni22C7 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22c8 uni22C8 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22c9 uni22C9 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22ca uni22CA 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22cb uni22CB 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22cc uni22CC 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22cd uni22CD 2.6 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.7 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+22ce uni22CE 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22cf uni22CF 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22d0 uni22D0 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22d1 uni22D1 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22d2 uni22D2 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22d3 uni22D3 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22d4 uni22D4 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22d5 uni22D5 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22d6 uni22D6 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22d7 uni22D7 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22d8 uni22D8 2.6 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+22d9 uni22D9 2.6 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+22da uni22DA 2.6 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.7 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+22db uni22DB 2.6 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.7 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+22dc uni22DC 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+22dd uni22DD 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+22de uni22DE 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+22df uni22DF 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+22e0 uni22E0 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+22e1 uni22E1 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+22e2 uni22E2 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+22e3 uni22E3 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+22e4 uni22E4 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+22e5 uni22E5 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+22e6 uni22E6 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+22e7 uni22E7 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+22e8 uni22E8 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+22e9 uni22E9 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+22ea uni22EA 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22eb uni22EB 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22ec uni22EC 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22ed uni22ED 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22ee uni22EE 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22ef uni22EF 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22f0 uni22F0 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22f1 uni22F1 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22f2 uni22F2 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22f3 uni22F3 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22f4 uni22F4 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22f5 uni22F5 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22f6 uni22F6 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22f7 uni22F7 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22f8 uni22F8 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22f9 uni22F9 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22fa uni22FA 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22fb uni22FB 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22fc uni22FC 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22fd uni22FD 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22fe uni22FE 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22ff uni22FF 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2300 uni2300 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2301 uni2301 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2302 house 1.14 +U+2303 uni2303 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2304 uni2304 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2305 uni2305 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2306 uni2306 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2307 uni2307 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2308 uni2308 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.11 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+2309 uni2309 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.11 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+230a uni230A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.11 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+230b uni230B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.11 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+230c uni230C 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+230d uni230D 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+230e uni230E 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+230f uni230F 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2310 revlogicalnot 1.14 +U+2311 uni2311 1.15 +U+2312 uni2312 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2313 uni2313 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2314 uni2314 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2315 uni2315 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2318 uni2318 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.10 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+2319 uni2319 1.14 +U+231c uni231C 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+231d uni231D 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+231e uni231E 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+231f uni231F 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2320 integraltp 2.3 +U+2321 integralbt 2.3 +U+2324 uni2324 2.16 (Sans, Sans Bold, Sans Bold Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique) 2.19 (Sans Condensed Oblique, Sans Oblique) +U+2325 uni2325 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.10 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+2326 uni2326 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2327 uni2327 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2328 uni2328 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2329 angleleft 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.11 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) +U+232a angleright 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.11 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) +U+232b uni232B 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+232c uni232C 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2335 uni2335 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2337 uni2337 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2338 uni2338 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2339 uni2339 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+233a uni233A 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+233b uni233B 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+233c uni233C 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+233d uni233D 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+233e uni233E 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2341 uni2341 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2342 uni2342 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2343 uni2343 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2344 uni2344 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2347 uni2347 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2348 uni2348 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2349 uni2349 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+234b uni234B 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+234c uni234C 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+234d uni234D 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2350 uni2350 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2352 uni2352 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2353 uni2353 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2354 uni2354 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2357 uni2357 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2358 uni2358 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2359 uni2359 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+235a uni235A 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+235b uni235B 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+235c uni235C 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+235e uni235E 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+235f uni235F 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2360 uni2360 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2363 uni2363 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2364 uni2364 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2365 uni2365 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2368 uni2368 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2369 uni2369 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+236b uni236B 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+236c uni236C 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+236d uni236D 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+236e uni236E 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+236f uni236F 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2370 uni2370 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2373 uni2373 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2374 uni2374 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2375 uni2375 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2376 uni2376 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2377 uni2377 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2378 uni2378 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2379 uni2379 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+237a uni237A 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+237d uni237D 1.15 +U+2380 uni2380 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2381 uni2381 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2382 uni2382 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2383 uni2383 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2387 uni2387 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2388 uni2388 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2389 uni2389 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+238a uni238A 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+238b uni238B 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2394 uni2394 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2395 uni2395 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+239b uni239B 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+239c uni239C 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+239d uni239D 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+239e uni239E 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+239f uni239F 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+23a0 uni23A0 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+23a1 uni23A1 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+23a2 uni23A2 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+23a3 uni23A3 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+23a4 uni23A4 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+23a5 uni23A5 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+23a6 uni23A6 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+23a7 uni23A7 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+23a8 uni23A8 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+23a9 uni23A9 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+23aa uni23AA 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+23ab uni23AB 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+23ac uni23AC 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+23ad uni23AD 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+23ae uni23AE 2.3 +U+23ce uni23CE 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+23cf uni23CF 2.3 +U+23e3 uni23E3 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+23e5 uni23E5 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+23e8 uni23E8 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2422 uni2422 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2423 uni2423 1.6 +U+2460 uni2460 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2461 uni2461 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2462 uni2462 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2463 uni2463 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2464 uni2464 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2465 uni2465 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2466 uni2466 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2467 uni2467 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2468 uni2468 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2469 uni2469 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2500 SF100000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2501 uni2501 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2502 SF110000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2503 uni2503 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2504 uni2504 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2505 uni2505 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2506 uni2506 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2507 uni2507 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2508 uni2508 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2509 uni2509 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+250a uni250A 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+250b uni250B 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+250c SF010000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+250d uni250D 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+250e uni250E 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+250f uni250F 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2510 SF030000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2511 uni2511 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2512 uni2512 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2513 uni2513 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2514 SF020000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2515 uni2515 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2516 uni2516 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2517 uni2517 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2518 SF040000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2519 uni2519 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+251a uni251A 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+251b uni251B 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+251c SF080000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+251d uni251D 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+251e uni251E 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+251f uni251F 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2520 uni2520 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2521 uni2521 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2522 uni2522 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2523 uni2523 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2524 SF090000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2525 uni2525 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2526 uni2526 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2527 uni2527 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2528 uni2528 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2529 uni2529 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+252a uni252A 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+252b uni252B 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+252c SF060000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+252d uni252D 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+252e uni252E 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+252f uni252F 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2530 uni2530 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2531 uni2531 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2532 uni2532 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2533 uni2533 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2534 SF070000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2535 uni2535 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2536 uni2536 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2537 uni2537 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2538 uni2538 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2539 uni2539 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+253a uni253A 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+253b uni253B 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+253c SF050000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+253d uni253D 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+253e uni253E 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+253f uni253F 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2540 uni2540 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2541 uni2541 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2542 uni2542 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2543 uni2543 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2544 uni2544 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2545 uni2545 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2546 uni2546 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2547 uni2547 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2548 uni2548 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2549 uni2549 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+254a uni254A 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+254b uni254B 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+254c uni254C 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+254d uni254D 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+254e uni254E 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+254f uni254F 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2550 SF430000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2551 SF240000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2552 SF510000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2553 SF520000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2554 SF390000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2555 SF220000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2556 SF210000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2557 SF250000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2558 SF500000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2559 SF490000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+255a SF380000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+255b SF280000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+255c SF270000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+255d SF260000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+255e SF360000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+255f SF370000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2560 SF420000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2561 SF190000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2562 SF200000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2563 SF230000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2564 SF470000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2565 SF480000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2566 SF410000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2567 SF450000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2568 SF460000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2569 SF400000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+256a SF540000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+256b SF530000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+256c SF440000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+256d uni256D 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+256e uni256E 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+256f uni256F 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2570 uni2570 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2571 uni2571 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2572 uni2572 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2573 uni2573 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2574 uni2574 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2575 uni2575 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2576 uni2576 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2577 uni2577 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2578 uni2578 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2579 uni2579 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+257a uni257A 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+257b uni257B 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+257c uni257C 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+257d uni257D 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+257e uni257E 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+257f uni257F 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2580 upblock 1.14 +U+2581 uni2581 1.14 +U+2582 uni2582 1.14 +U+2583 uni2583 1.14 +U+2584 dnblock 1.14 +U+2585 uni2585 1.14 +U+2586 uni2586 1.14 +U+2587 uni2587 1.14 +U+2588 block 1.14 +U+2589 uni2589 1.14 +U+258a uni258A 1.14 +U+258b uni258B 1.14 +U+258c lfblock 1.14 +U+258d uni258D 1.14 +U+258e uni258E 1.14 +U+258f uni258F 1.14 +U+2590 rtblock 1.14 +U+2591 ltshade 1.15 +U+2592 shade 1.15 +U+2593 dkshade 1.15 +U+2594 uni2594 1.14 +U+2595 uni2595 1.14 +U+2596 uni2596 1.14 +U+2597 uni2597 1.14 +U+2598 uni2598 1.14 +U+2599 uni2599 1.14 +U+259a uni259A 1.14 +U+259b uni259B 1.14 +U+259c uni259C 1.14 +U+259d uni259D 1.14 +U+259e uni259E 1.14 +U+259f uni259F 1.14 +U+25a0 filledbox 2.3 +U+25a1 H22073 2.3 +U+25a2 uni25A2 2.3 +U+25a3 uni25A3 2.3 +U+25a4 uni25A4 2.3 +U+25a5 uni25A5 2.3 +U+25a6 uni25A6 2.3 +U+25a7 uni25A7 2.3 +U+25a8 uni25A8 2.3 +U+25a9 uni25A9 2.3 +U+25aa H18543 2.3 +U+25ab H18551 2.3 +U+25ac filledrect 2.3 +U+25ad uni25AD 2.3 +U+25ae uni25AE 2.3 +U+25af uni25AF 2.3 +U+25b0 uni25B0 2.3 +U+25b1 uni25B1 2.3 +U+25b2 triagup 2.3 +U+25b3 uni25B3 2.3 +U+25b4 uni25B4 2.3 +U+25b5 uni25B5 2.3 +U+25b6 uni25B6 2.3 +U+25b7 uni25B7 2.3 +U+25b8 uni25B8 2.3 +U+25b9 uni25B9 2.3 +U+25ba triagrt 2.3 +U+25bb uni25BB 2.3 +U+25bc triagdn 2.3 +U+25bd uni25BD 2.3 +U+25be uni25BE 2.3 +U+25bf uni25BF 2.3 +U+25c0 uni25C0 2.3 +U+25c1 uni25C1 2.3 +U+25c2 uni25C2 2.3 +U+25c3 uni25C3 2.3 +U+25c4 triaglf 2.3 +U+25c5 uni25C5 2.3 +U+25c6 uni25C6 2.3 +U+25c7 uni25C7 2.3 +U+25c8 uni25C8 2.3 +U+25c9 uni25C9 2.3 +U+25ca lozenge original +U+25cb circle 2.3 +U+25cc uni25CC 2.3 +U+25cd uni25CD 2.3 +U+25ce uni25CE 2.3 +U+25cf H18533 2.3 +U+25d0 uni25D0 2.3 +U+25d1 uni25D1 2.3 +U+25d2 uni25D2 2.3 +U+25d3 uni25D3 2.3 +U+25d4 uni25D4 2.3 +U+25d5 uni25D5 2.3 +U+25d6 uni25D6 2.3 +U+25d7 uni25D7 2.3 +U+25d8 invbullet 2.2 +U+25d9 invcircle 2.3 +U+25da uni25DA 2.3 +U+25db uni25DB 2.3 +U+25dc uni25DC 2.3 +U+25dd uni25DD 2.3 +U+25de uni25DE 2.3 +U+25df uni25DF 2.3 +U+25e0 uni25E0 2.3 +U+25e1 uni25E1 2.3 +U+25e2 uni25E2 2.3 +U+25e3 uni25E3 2.3 +U+25e4 uni25E4 2.3 +U+25e5 uni25E5 2.3 +U+25e6 openbullet 2.2 +U+25e7 uni25E7 2.3 +U+25e8 uni25E8 2.3 +U+25e9 uni25E9 2.3 +U+25ea uni25EA 2.3 +U+25eb uni25EB 2.3 +U+25ec uni25EC 2.3 +U+25ed uni25ED 2.3 +U+25ee uni25EE 2.3 +U+25ef uni25EF 2.3 +U+25f0 uni25F0 2.3 +U+25f1 uni25F1 2.3 +U+25f2 uni25F2 2.3 +U+25f3 uni25F3 2.3 +U+25f4 uni25F4 2.3 +U+25f5 uni25F5 2.3 +U+25f6 uni25F6 2.3 +U+25f7 uni25F7 2.3 +U+25f8 uni25F8 2.3 +U+25f9 uni25F9 2.3 +U+25fa uni25FA 2.3 +U+25fb uni25FB 2.3 +U+25fc uni25FC 2.3 +U+25fd uni25FD 2.3 +U+25fe uni25FE 2.3 +U+25ff uni25FF 2.3 +U+2600 uni2600 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2601 uni2601 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2602 uni2602 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2603 uni2603 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2604 uni2604 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2605 uni2605 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2606 uni2606 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2607 uni2607 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2608 uni2608 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2609 uni2609 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+260a uni260A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+260b uni260B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+260c uni260C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+260d uni260D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+260e uni260E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+260f uni260F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2610 uni2610 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2611 uni2611 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2612 uni2612 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2613 uni2613 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2614 uni2614 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2615 uni2615 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2616 uni2616 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2617 uni2617 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2618 uni2618 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2619 uni2619 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+261a uni261A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+261b uni261B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+261c uni261C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+261d uni261D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+261e uni261E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+261f uni261F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2620 uni2620 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2621 uni2621 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2622 uni2622 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2623 uni2623 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2624 uni2624 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2625 uni2625 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2626 uni2626 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2627 uni2627 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2628 uni2628 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2629 uni2629 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+262a uni262A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+262b uni262B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+262c uni262C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+262d uni262D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+262e uni262E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+262f uni262F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2630 uni2630 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2631 uni2631 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2632 uni2632 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2633 uni2633 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2634 uni2634 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2635 uni2635 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2636 uni2636 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2637 uni2637 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2638 uni2638 1.15 +U+2639 uni2639 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+263a smileface 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+263b invsmileface 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+263c sun 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+263d uni263D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+263e uni263E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+263f uni263F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2640 female 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2641 uni2641 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2642 male 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2643 uni2643 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2644 uni2644 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2645 uni2645 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2646 uni2646 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2647 uni2647 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2648 uni2648 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2649 uni2649 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+264a uni264A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+264b uni264B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+264c uni264C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+264d uni264D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+264e uni264E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+264f uni264F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2650 uni2650 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2651 uni2651 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2652 uni2652 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2653 uni2653 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2654 uni2654 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2655 uni2655 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2656 uni2656 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2657 uni2657 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2658 uni2658 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2659 uni2659 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+265a uni265A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+265b uni265B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+265c uni265C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+265d uni265D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+265e uni265E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+265f uni265F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2660 spade 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2661 uni2661 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2662 uni2662 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2663 club 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2664 uni2664 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2665 heart 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2666 diamond 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2667 uni2667 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2668 uni2668 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2669 uni2669 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+266a musicalnote 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+266b musicalnotedbl 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+266c uni266C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+266d uni266D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+266e uni266E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+266f uni266F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2670 uni2670 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2671 uni2671 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2672 uni2672 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2673 uni2673 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2674 uni2674 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2675 uni2675 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2676 uni2676 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2677 uni2677 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2678 uni2678 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2679 uni2679 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+267a uni267A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+267b uni267B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+267c uni267C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+267d uni267D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+267e uni267E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+267f uni267F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2680 uni2680 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.7 (Sans Mono, Sans Mono Bold) +U+2681 uni2681 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.7 (Sans Mono, Sans Mono Bold) +U+2682 uni2682 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.7 (Sans Mono, Sans Mono Bold) +U+2683 uni2683 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.7 (Sans Mono, Sans Mono Bold) +U+2684 uni2684 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.7 (Sans Mono, Sans Mono Bold) +U+2685 uni2685 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.7 (Sans Mono, Sans Mono Bold) +U+2686 uni2686 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2687 uni2687 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2688 uni2688 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2689 uni2689 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+268a uni268A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+268b uni268B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+268c uni268C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+268d uni268D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+268e uni268E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+268f uni268F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2690 uni2690 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2691 uni2691 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2692 uni2692 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2693 uni2693 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2694 uni2694 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2695 uni2695 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2696 uni2696 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2697 uni2697 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2698 uni2698 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2699 uni2699 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+269a uni269A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+269b uni269B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+269c uni269C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+26a0 uni26A0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+26a1 uni26A1 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+26a2 uni26A2 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+26a3 uni26A3 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+26a4 uni26A4 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+26a5 uni26A5 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+26a6 uni26A6 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+26a7 uni26A7 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+26a8 uni26A8 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+26a9 uni26A9 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+26aa uni26AA 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+26ab uni26AB 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+26ac uni26AC 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+26ad uni26AD 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+26ae uni26AE 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+26af uni26AF 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+26b0 uni26B0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+26b1 uni26B1 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+26b2 uni26B2 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+26b3 uni26B3 2.29 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+26b4 uni26B4 2.29 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+26b5 uni26B5 2.29 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+26b6 uni26B6 2.29 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+26b7 uni26B7 2.29 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+26b8 uni26B8 2.29 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+26c0 uni26C0 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+26c1 uni26C1 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+26c2 uni26C2 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+26c3 uni26C3 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2701 uni2701 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2702 uni2702 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2703 uni2703 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2704 uni2704 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2706 uni2706 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2707 uni2707 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2708 uni2708 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2709 uni2709 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+270c uni270C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+270d uni270D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+270e uni270E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+270f uni270F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2710 uni2710 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2711 uni2711 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2712 uni2712 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2713 uni2713 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2714 uni2714 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2715 uni2715 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2716 uni2716 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2717 uni2717 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2718 uni2718 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2719 uni2719 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+271a uni271A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+271b uni271B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+271c uni271C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+271d uni271D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+271e uni271E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+271f uni271F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2720 uni2720 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2721 uni2721 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2722 uni2722 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2723 uni2723 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2724 uni2724 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2725 uni2725 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2726 uni2726 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2727 uni2727 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2729 uni2729 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+272a uni272A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+272b uni272B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+272c uni272C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+272d uni272D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+272e uni272E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+272f uni272F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2730 uni2730 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2731 uni2731 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2732 uni2732 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2733 uni2733 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2734 uni2734 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2735 uni2735 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2736 uni2736 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2737 uni2737 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2738 uni2738 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2739 uni2739 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+273a uni273A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+273b uni273B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+273c uni273C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+273d uni273D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+273e uni273E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+273f uni273F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2740 uni2740 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2741 uni2741 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2742 uni2742 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2743 uni2743 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2744 uni2744 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2745 uni2745 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2746 uni2746 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2747 uni2747 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2748 uni2748 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2749 uni2749 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+274a uni274A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+274b uni274B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+274d uni274D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+274f uni274F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2750 uni2750 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2751 uni2751 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2752 uni2752 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2756 uni2756 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2758 uni2758 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2759 uni2759 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+275a uni275A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+275b uni275B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+275c uni275C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+275d uni275D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+275e uni275E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2761 uni2761 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2762 uni2762 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2763 uni2763 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2764 uni2764 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2765 uni2765 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2766 uni2766 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2767 uni2767 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2768 uni2768 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2769 uni2769 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+276a uni276A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+276b uni276B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+276c uni276C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+276d uni276D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+276e uni276E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+276f uni276F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2770 uni2770 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2771 uni2771 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2772 uni2772 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2773 uni2773 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2774 uni2774 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2775 uni2775 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2776 uni2776 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2777 uni2777 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2778 uni2778 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2779 uni2779 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+277a uni277A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+277b uni277B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+277c uni277C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+277d uni277D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+277e uni277E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+277f uni277F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2780 uni2780 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2781 uni2781 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2782 uni2782 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2783 uni2783 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2784 uni2784 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2785 uni2785 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2786 uni2786 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2787 uni2787 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2788 uni2788 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2789 uni2789 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+278a uni278A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+278b uni278B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+278c uni278C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+278d uni278D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+278e uni278E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+278f uni278F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2790 uni2790 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2791 uni2791 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2792 uni2792 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2793 uni2793 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2794 uni2794 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2798 uni2798 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2799 uni2799 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+279a uni279A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+279b uni279B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+279c uni279C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+279d uni279D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+279e uni279E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+279f uni279F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27a0 uni27A0 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27a1 uni27A1 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+27a2 uni27A2 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27a3 uni27A3 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27a4 uni27A4 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27a5 uni27A5 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27a6 uni27A6 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27a7 uni27A7 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27a8 uni27A8 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27a9 uni27A9 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27aa uni27AA 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27ab uni27AB 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27ac uni27AC 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27ad uni27AD 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27ae uni27AE 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27af uni27AF 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27b1 uni27B1 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27b2 uni27B2 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27b3 uni27B3 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27b4 uni27B4 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27b5 uni27B5 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27b6 uni27B6 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27b7 uni27B7 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27b8 uni27B8 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27b9 uni27B9 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27ba uni27BA 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27bb uni27BB 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27bc uni27BC 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27bd uni27BD 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27be uni27BE 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27bf uni27BF 2.7 (Sans Mono Bold) +U+27c5 uni27C5 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+27c6 uni27C6 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+27e0 uni27E0 2.3 +U+27e6 uni27E6 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+27e7 uni27E7 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+27e8 uni27E8 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+27e9 uni27E9 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+27ea uni27EA 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+27eb uni27EB 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+27f0 uni27F0 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+27f1 uni27F1 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+27f2 uni27F2 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+27f3 uni27F3 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+27f4 uni27F4 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+27f5 uni27F5 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+27f6 uni27F6 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+27f7 uni27F7 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+27f8 uni27F8 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+27f9 uni27F9 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+27fa uni27FA 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+27fb uni27FB 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+27fc uni27FC 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+27fd uni27FD 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+27fe uni27FE 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+27ff uni27FF 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2800 uni2800 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2801 uni2801 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2802 uni2802 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2803 uni2803 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2804 uni2804 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2805 uni2805 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2806 uni2806 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2807 uni2807 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2808 uni2808 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2809 uni2809 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+280a uni280A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+280b uni280B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+280c uni280C 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+280d uni280D 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+280e uni280E 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+280f uni280F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2810 uni2810 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2811 uni2811 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2812 uni2812 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2813 uni2813 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2814 uni2814 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2815 uni2815 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2816 uni2816 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2817 uni2817 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2818 uni2818 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2819 uni2819 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+281a uni281A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+281b uni281B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+281c uni281C 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+281d uni281D 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+281e uni281E 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+281f uni281F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2820 uni2820 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2821 uni2821 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2822 uni2822 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2823 uni2823 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2824 uni2824 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2825 uni2825 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2826 uni2826 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2827 uni2827 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2828 uni2828 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2829 uni2829 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+282a uni282A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+282b uni282B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+282c uni282C 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+282d uni282D 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+282e uni282E 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+282f uni282F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2830 uni2830 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2831 uni2831 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2832 uni2832 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2833 uni2833 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2834 uni2834 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2835 uni2835 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2836 uni2836 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2837 uni2837 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2838 uni2838 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2839 uni2839 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+283a uni283A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+283b uni283B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+283c uni283C 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+283d uni283D 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+283e uni283E 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+283f uni283F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2840 uni2840 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2841 uni2841 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2842 uni2842 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2843 uni2843 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2844 uni2844 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2845 uni2845 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2846 uni2846 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2847 uni2847 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2848 uni2848 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2849 uni2849 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+284a uni284A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+284b uni284B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+284c uni284C 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+284d uni284D 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+284e uni284E 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+284f uni284F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2850 uni2850 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2851 uni2851 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2852 uni2852 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2853 uni2853 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2854 uni2854 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2855 uni2855 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2856 uni2856 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2857 uni2857 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2858 uni2858 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2859 uni2859 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+285a uni285A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+285b uni285B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+285c uni285C 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+285d uni285D 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+285e uni285E 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+285f uni285F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2860 uni2860 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2861 uni2861 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2862 uni2862 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2863 uni2863 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2864 uni2864 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2865 uni2865 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2866 uni2866 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2867 uni2867 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2868 uni2868 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2869 uni2869 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+286a uni286A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+286b uni286B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+286c uni286C 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+286d uni286D 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+286e uni286E 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+286f uni286F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2870 uni2870 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2871 uni2871 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2872 uni2872 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2873 uni2873 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2874 uni2874 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2875 uni2875 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2876 uni2876 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2877 uni2877 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2878 uni2878 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2879 uni2879 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+287a uni287A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+287b uni287B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+287c uni287C 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+287d uni287D 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+287e uni287E 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+287f uni287F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2880 uni2880 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2881 uni2881 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2882 uni2882 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2883 uni2883 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2884 uni2884 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2885 uni2885 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2886 uni2886 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2887 uni2887 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2888 uni2888 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2889 uni2889 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+288a uni288A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+288b uni288B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+288c uni288C 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+288d uni288D 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+288e uni288E 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+288f uni288F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2890 uni2890 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2891 uni2891 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2892 uni2892 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2893 uni2893 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2894 uni2894 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2895 uni2895 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2896 uni2896 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2897 uni2897 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2898 uni2898 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2899 uni2899 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+289a uni289A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+289b uni289B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+289c uni289C 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+289d uni289D 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+289e uni289E 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+289f uni289F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28a0 uni28A0 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28a1 uni28A1 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28a2 uni28A2 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28a3 uni28A3 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28a4 uni28A4 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28a5 uni28A5 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28a6 uni28A6 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28a7 uni28A7 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28a8 uni28A8 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28a9 uni28A9 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28aa uni28AA 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28ab uni28AB 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28ac uni28AC 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28ad uni28AD 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28ae uni28AE 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28af uni28AF 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28b0 uni28B0 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28b1 uni28B1 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28b2 uni28B2 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28b3 uni28B3 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28b4 uni28B4 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28b5 uni28B5 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28b6 uni28B6 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28b7 uni28B7 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28b8 uni28B8 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28b9 uni28B9 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28ba uni28BA 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28bb uni28BB 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28bc uni28BC 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28bd uni28BD 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28be uni28BE 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28bf uni28BF 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28c0 uni28C0 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28c1 uni28C1 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28c2 uni28C2 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28c3 uni28C3 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28c4 uni28C4 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28c5 uni28C5 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28c6 uni28C6 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28c7 uni28C7 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28c8 uni28C8 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28c9 uni28C9 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28ca uni28CA 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28cb uni28CB 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28cc uni28CC 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28cd uni28CD 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28ce uni28CE 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28cf uni28CF 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28d0 uni28D0 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28d1 uni28D1 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28d2 uni28D2 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28d3 uni28D3 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28d4 uni28D4 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28d5 uni28D5 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28d6 uni28D6 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28d7 uni28D7 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28d8 uni28D8 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28d9 uni28D9 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28da uni28DA 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28db uni28DB 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28dc uni28DC 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28dd uni28DD 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28de uni28DE 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28df uni28DF 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28e0 uni28E0 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28e1 uni28E1 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28e2 uni28E2 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28e3 uni28E3 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28e4 uni28E4 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28e5 uni28E5 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28e6 uni28E6 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28e7 uni28E7 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28e8 uni28E8 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28e9 uni28E9 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28ea uni28EA 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28eb uni28EB 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28ec uni28EC 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28ed uni28ED 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28ee uni28EE 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28ef uni28EF 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28f0 uni28F0 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28f1 uni28F1 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28f2 uni28F2 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28f3 uni28F3 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28f4 uni28F4 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28f5 uni28F5 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28f6 uni28F6 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28f7 uni28F7 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28f8 uni28F8 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28f9 uni28F9 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28fa uni28FA 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28fb uni28FB 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28fc uni28FC 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28fd uni28FD 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28fe uni28FE 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28ff uni28FF 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2900 uni2900 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2901 uni2901 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2902 uni2902 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2903 uni2903 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2904 uni2904 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2905 uni2905 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2906 uni2906 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2907 uni2907 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2908 uni2908 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2909 uni2909 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+290a uni290A 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+290b uni290B 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+290c uni290C 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+290d uni290D 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+290e uni290E 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+290f uni290F 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2910 uni2910 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2911 uni2911 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2912 uni2912 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2913 uni2913 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2914 uni2914 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2915 uni2915 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2916 uni2916 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2917 uni2917 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2918 uni2918 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2919 uni2919 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+291a uni291A 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+291b uni291B 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+291c uni291C 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+291d uni291D 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+291e uni291E 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+291f uni291F 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2920 uni2920 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2921 uni2921 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2922 uni2922 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2923 uni2923 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2924 uni2924 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2925 uni2925 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2926 uni2926 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2927 uni2927 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2928 uni2928 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2929 uni2929 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+292a uni292A 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+292b uni292B 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+292c uni292C 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+292d uni292D 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+292e uni292E 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+292f uni292F 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2930 uni2930 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2931 uni2931 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2932 uni2932 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2933 uni2933 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2934 uni2934 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2935 uni2935 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2936 uni2936 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2937 uni2937 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2938 uni2938 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2939 uni2939 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+293a uni293A 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+293b uni293B 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+293c uni293C 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+293d uni293D 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+293e uni293E 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+293f uni293F 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2940 uni2940 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2941 uni2941 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2942 uni2942 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2943 uni2943 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2944 uni2944 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2945 uni2945 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2946 uni2946 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2947 uni2947 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2948 uni2948 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2949 uni2949 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+294a uni294A 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+294b uni294B 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+294c uni294C 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+294d uni294D 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+294e uni294E 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+294f uni294F 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2950 uni2950 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2951 uni2951 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2952 uni2952 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2953 uni2953 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2954 uni2954 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2955 uni2955 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2956 uni2956 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2957 uni2957 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2958 uni2958 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2959 uni2959 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+295a uni295A 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+295b uni295B 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+295c uni295C 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+295d uni295D 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+295e uni295E 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+295f uni295F 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2960 uni2960 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2961 uni2961 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2962 uni2962 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2963 uni2963 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2964 uni2964 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2965 uni2965 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2966 uni2966 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2967 uni2967 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2968 uni2968 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2969 uni2969 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+296a uni296A 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+296b uni296B 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+296c uni296C 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+296d uni296D 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+296e uni296E 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+296f uni296F 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2970 uni2970 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2971 uni2971 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2972 uni2972 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2973 uni2973 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2974 uni2974 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2975 uni2975 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2976 uni2976 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2977 uni2977 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2978 uni2978 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2979 uni2979 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+297a uni297A 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+297b uni297B 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+297c uni297C 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+297d uni297D 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+297e uni297E 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+297f uni297F 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2983 uni2983 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2984 uni2984 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+29ce uni29CE 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+29cf uni29CF 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+29d0 uni29D0 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+29d1 uni29D1 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+29d2 uni29D2 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+29d3 uni29D3 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+29d4 uni29D4 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+29d5 uni29D5 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+29eb uni29EB 2.2 +U+29fa uni29FA 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+29fb uni29FB 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2a00 uni2A00 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a01 uni2A01 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a02 uni2A02 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a0c uni2A0C 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2a0d uni2A0D 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2a0e uni2A0E 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2a0f uni2A0F 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a10 uni2A10 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a11 uni2A11 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a12 uni2A12 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a13 uni2A13 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a14 uni2A14 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a15 uni2A15 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a16 uni2A16 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a17 uni2A17 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a18 uni2A18 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a19 uni2A19 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a1a uni2A1A 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a1b uni2A1B 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a1c uni2A1C 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a2f uni2A2F 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+2a7d uni2A7D 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a7e uni2A7E 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a7f uni2A7F 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a80 uni2A80 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a81 uni2A81 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a82 uni2A82 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a83 uni2A83 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a84 uni2A84 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a85 uni2A85 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a86 uni2A86 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a87 uni2A87 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a88 uni2A88 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a89 uni2A89 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a8a uni2A8A 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a8b uni2A8B 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a8c uni2A8C 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a8d uni2A8D 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a8e uni2A8E 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a8f uni2A8F 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a90 uni2A90 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a91 uni2A91 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a92 uni2A92 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a93 uni2A93 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a94 uni2A94 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a95 uni2A95 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a96 uni2A96 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a97 uni2A97 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a98 uni2A98 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a99 uni2A99 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a9a uni2A9A 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a9b uni2A9B 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a9c uni2A9C 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a9d uni2A9D 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a9e uni2A9E 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a9f uni2A9F 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2aa0 uni2AA0 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2aae uni2AAE 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2aaf uni2AAF 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2ab0 uni2AB0 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2ab1 uni2AB1 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2ab2 uni2AB2 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2ab3 uni2AB3 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2ab4 uni2AB4 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2ab5 uni2AB5 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2ab6 uni2AB6 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2ab7 uni2AB7 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2ab8 uni2AB8 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2ab9 uni2AB9 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2aba uni2ABA 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2af9 uni2AF9 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2afa uni2AFA 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2b00 uni2B00 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2b01 uni2B01 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2b02 uni2B02 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2b03 uni2B03 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2b04 uni2B04 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2b05 uni2B05 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2b06 uni2B06 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2b07 uni2B07 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2b08 uni2B08 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2b09 uni2B09 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2b0a uni2B0A 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2b0b uni2B0B 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2b0c uni2B0C 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2b0d uni2B0D 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2b0e uni2B0E 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2b0f uni2B0F 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2b10 uni2B10 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2b11 uni2B11 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2b12 uni2B12 2.3 +U+2b13 uni2B13 2.3 +U+2b14 uni2B14 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+2b15 uni2B15 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+2b16 uni2B16 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+2b17 uni2B17 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+2b18 uni2B18 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+2b19 uni2B19 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+2b1a uni2B1A 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+2b1f uni2B1F 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Sans Bold) +U+2b20 uni2B20 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2b21 uni2B21 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2b22 uni2B22 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2b23 uni2B23 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2b24 uni2B24 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Sans Bold) +U+2b53 uni2B53 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Sans Bold) +U+2b54 uni2B54 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Sans Bold) +U+2c60 uni2C60 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2c61 uni2C61 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2c62 uni2C62 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2c63 uni2C63 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2c64 uni2C64 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.27 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2c65 uni2C65 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2c66 uni2C66 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2c67 uni2C67 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2c68 uni2C68 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2c69 uni2C69 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2c6a uni2C6A 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2c6b uni2C6B 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2c6c uni2C6C 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2c6d uni2C6D 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.31 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+2c6e uni2C6E 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2c6f uni2C6F 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.28 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.31 (Serif Condensed Italic) +U+2c70 uni2C70 2.31 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+2c71 uni2C71 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.31 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+2c72 uni2C72 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.31 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+2c73 uni2C73 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.31 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+2c74 uni2C74 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2c75 uni2C75 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.20 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+2c76 uni2C76 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.20 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+2c77 uni2C77 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.20 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+2c79 uni2C79 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.28 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.31 (Serif Condensed Italic) +U+2c7a uni2C7A 2.27 +U+2c7b uni2C7B 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2c7c uni2C7C 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.28 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.31 (Serif Condensed Italic) +U+2c7d uni2C7D 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.28 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.31 (Serif Condensed Italic) +U+2c7e uni2C7E 2.31 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+2c7f uni2C7F 2.31 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+2d00 uni2D00 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2d01 uni2D01 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2d02 uni2D02 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2d03 uni2D03 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2d04 uni2D04 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2d05 uni2D05 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2d06 uni2D06 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2d07 uni2D07 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2d08 uni2D08 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2d09 uni2D09 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2d0a uni2D0A 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2d0b uni2D0B 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2d0c uni2D0C 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2d0d uni2D0D 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2d0e uni2D0E 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2d0f uni2D0F 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2d10 uni2D10 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2d11 uni2D11 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2d12 uni2D12 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2d13 uni2D13 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2d14 uni2D14 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2d15 uni2D15 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2d16 uni2D16 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2d17 uni2D17 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2d18 uni2D18 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2d19 uni2D19 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2d1a uni2D1A 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2d1b uni2D1B 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2d1c uni2D1C 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2d1d uni2D1D 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2d1e uni2D1E 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2d1f uni2D1F 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2d20 uni2D20 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2d21 uni2D21 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2d22 uni2D22 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2d23 uni2D23 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2d24 uni2D24 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2d25 uni2D25 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2d30 uni2D30 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d31 uni2D31 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d32 uni2D32 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d33 uni2D33 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d34 uni2D34 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d35 uni2D35 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d36 uni2D36 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d37 uni2D37 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d38 uni2D38 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d39 uni2D39 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d3a uni2D3A 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d3b uni2D3B 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d3c uni2D3C 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d3d uni2D3D 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d3e uni2D3E 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d3f uni2D3F 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d40 uni2D40 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d41 uni2D41 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d42 uni2D42 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d43 uni2D43 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d44 uni2D44 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d45 uni2D45 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d46 uni2D46 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d47 uni2D47 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d48 uni2D48 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d49 uni2D49 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d4a uni2D4A 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d4b uni2D4B 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d4c uni2D4C 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d4d uni2D4D 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d4e uni2D4E 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d4f uni2D4F 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d50 uni2D50 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d51 uni2D51 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d52 uni2D52 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d53 uni2D53 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d54 uni2D54 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d55 uni2D55 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d56 uni2D56 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d57 uni2D57 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d58 uni2D58 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d59 uni2D59 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d5a uni2D5A 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d5b uni2D5B 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d5c uni2D5C 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d5d uni2D5D 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d5e uni2D5E 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d5f uni2D5F 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d60 uni2D60 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d61 uni2D61 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d62 uni2D62 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d63 uni2D63 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d64 uni2D64 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d65 uni2D65 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d6f uni2D6F 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2e18 uni2E18 2.26 +U+2e22 uni2E22 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.30 (Sans Bold) 2.31 (Serif Condensed Italic) +U+2e23 uni2E23 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.30 (Sans Bold) 2.31 (Serif Condensed Italic) +U+2e24 uni2E24 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.30 (Sans Bold) 2.31 (Serif Condensed Italic) +U+2e25 uni2E25 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.30 (Sans Bold) 2.31 (Serif Condensed Italic) +U+2e2e uni2E2E 2.26 +U+4dc0 uni4DC0 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dc1 uni4DC1 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dc2 uni4DC2 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dc3 uni4DC3 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dc4 uni4DC4 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dc5 uni4DC5 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dc6 uni4DC6 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dc7 uni4DC7 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dc8 uni4DC8 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dc9 uni4DC9 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dca uni4DCA 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dcb uni4DCB 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dcc uni4DCC 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dcd uni4DCD 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dce uni4DCE 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dcf uni4DCF 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dd0 uni4DD0 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dd1 uni4DD1 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dd2 uni4DD2 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dd3 uni4DD3 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dd4 uni4DD4 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dd5 uni4DD5 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dd6 uni4DD6 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dd7 uni4DD7 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dd8 uni4DD8 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dd9 uni4DD9 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dda uni4DDA 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4ddb uni4DDB 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4ddc uni4DDC 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4ddd uni4DDD 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dde uni4DDE 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4ddf uni4DDF 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4de0 uni4DE0 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4de1 uni4DE1 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4de2 uni4DE2 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4de3 uni4DE3 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4de4 uni4DE4 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4de5 uni4DE5 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4de6 uni4DE6 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4de7 uni4DE7 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4de8 uni4DE8 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4de9 uni4DE9 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dea uni4DEA 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4deb uni4DEB 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dec uni4DEC 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4ded uni4DED 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dee uni4DEE 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4def uni4DEF 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4df0 uni4DF0 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4df1 uni4DF1 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4df2 uni4DF2 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4df3 uni4DF3 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4df4 uni4DF4 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4df5 uni4DF5 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4df6 uni4DF6 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4df7 uni4DF7 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4df8 uni4DF8 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4df9 uni4DF9 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dfa uni4DFA 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dfb uni4DFB 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dfc uni4DFC 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dfd uni4DFD 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dfe uni4DFE 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dff uni4DFF 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a644 uniA644 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+a645 uniA645 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+a646 uniA646 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+a647 uniA647 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+a64c uniA64C 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a64d uniA64D 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a650 uniA650 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+a651 uniA651 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+a654 uniA654 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+a655 uniA655 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+a656 uniA656 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+a657 uniA657 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+a662 uniA662 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a663 uniA663 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a664 uniA664 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a665 uniA665 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a666 uniA666 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a667 uniA667 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a668 uniA668 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a669 uniA669 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a66a uniA66A 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a66b uniA66B 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a66c uniA66C 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a66d uniA66D 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a66e uniA66E 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a68a uniA68A 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a68b uniA68B 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a68c uniA68C 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a68d uniA68D 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a694 uniA694 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a695 uniA695 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a708 uniA708 2.27 +U+a709 uniA709 2.27 +U+a70a uniA70A 2.27 +U+a70b uniA70B 2.27 +U+a70c uniA70C 2.27 +U+a70d uniA70D 2.27 +U+a70e uniA70E 2.27 +U+a70f uniA70F 2.27 +U+a710 uniA710 2.27 +U+a711 uniA711 2.27 +U+a712 uniA712 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+a713 uniA713 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+a714 uniA714 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+a715 uniA715 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+a716 uniA716 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+a71b uniA71B 2.27 +U+a71c uniA71C 2.27 +U+a71d uniA71D 2.27 +U+a71e uniA71E 2.27 +U+a71f uniA71F 2.27 +U+a722 uniA722 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+a723 uniA723 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+a724 uniA724 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+a725 uniA725 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+a726 uniA726 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.30 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+a727 uniA727 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.30 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+a728 uniA728 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a729 uniA729 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a72a uniA72A 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a72b uniA72B 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a730 uniA730 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a731 uniA731 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a732 uniA732 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a733 uniA733 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a734 uniA734 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a735 uniA735 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a736 uniA736 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a737 uniA737 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a738 uniA738 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a739 uniA739 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a73a uniA73A 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a73b uniA73B 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a73c uniA73C 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a73d uniA73D 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a73e uniA73E 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a73f uniA73F 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a746 uniA746 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a747 uniA747 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a748 uniA748 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a749 uniA749 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a74a uniA74A 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a74b uniA74B 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a74e uniA74E 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a74f uniA74F 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a750 uniA750 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a751 uniA751 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a752 uniA752 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a753 uniA753 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a756 uniA756 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a757 uniA757 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a764 uniA764 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a765 uniA765 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a766 uniA766 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a767 uniA767 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a780 uniA780 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a781 uniA781 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a782 uniA782 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a783 uniA783 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a789 uniA789 2.28 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+a78a uniA78A 2.28 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+a78b uniA78B 2.26 +U+a78c uniA78C 2.26 +U+a78d uniA78D 2.31 +U+a7fb uniA7FB 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a7fc uniA7FC 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a7fd uniA7FD 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a7fe uniA7FE 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a7ff uniA7FF 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+e000 uniE000 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+e001 uniE001 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+e002 uniE002 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+e003 uniE003 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+e004 uniE004 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+e005 uniE005 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+e006 uniE006 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+e007 uniE007 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+e008 uniE008 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+e009 uniE009 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+e00a uniE00A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+e00b uniE00B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+e00c uniE00C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+e00d uniE00D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+e00e uniE00E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+e00f uniE00F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+e010 uniE010 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+e011 uniE011 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+e012 uniE012 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+e013 uniE013 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+e014 uniE014 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+e015 uniE015 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+e016 uniE016 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+e017 uniE017 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+e018 uniE018 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+e019 uniE019 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+e01a uniE01A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+e01b uniE01B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+e01c uniE01C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+e01d uniE01D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef00 uni02E5.5 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef01 uni02E6.5 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef02 uni02E7.5 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef03 uni02E8.5 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef04 uni02E9.5 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef05 uni02E5.4 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef06 uni02E6.4 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef07 uni02E7.4 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef08 uni02E8.4 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef09 uni02E9.4 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef0a uni02E5.3 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef0b uni02E6.3 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef0c uni02E7.3 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef0d uni02E8.3 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef0e uni02E9.3 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef0f uni02E5.2 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef10 uni02E6.2 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef11 uni02E7.2 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef12 uni02E8.2 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef13 uni02E9.2 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef14 uni02E5.1 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef15 uni02E6.1 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef16 uni02E7.1 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef17 uni02E8.1 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef18 uni02E9.1 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef19 stem 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f000 uniF000 2.10 (Sans) 2.11 (Sans Condensed) +U+f001 uniF001 2.10 (Sans) 2.11 (Sans Condensed) +U+f208 uniF208 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f20a uniF20A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f215 uniF215 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f216 uniF216 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f217 uniF217 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f21a uniF21A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f21b uniF21B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f25f uniF25F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f400 uniF400 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+f401 uniF401 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+f402 uniF402 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+f403 uniF403 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+f404 uniF404 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+f405 uniF405 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+f406 uniF406 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+f407 uniF407 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+f408 uniF408 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+f409 uniF409 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+f40a uniF40A 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+f40b uniF40B 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+f40c uniF40C 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+f40d uniF40D 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+f40e uniF40E 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+f40f uniF40F 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+f410 uniF410 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+f411 uniF411 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+f412 uniF412 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+f413 uniF413 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+f414 uniF414 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+f415 uniF415 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+f416 uniF416 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+f417 uniF417 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+f418 uniF418 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+f419 uniF419 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+f41a uniF41A 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+f41b uniF41B 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+f41c uniF41C 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+f41d uniF41D 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+f41e uniF41E 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+f41f uniF41F 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+f420 uniF420 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+f421 uniF421 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+f422 uniF422 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+f423 uniF423 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+f424 uniF424 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+f425 uniF425 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+f426 uniF426 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+f428 uniF428 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+f5c5 uniF5C5 2.9 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+f6c4 uniF6C4 2.10 (Serif Bold Italic, Serif Italic) 2.11 (Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+f6c5 uniF6C5 2.5 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.9 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Condensed Oblique, Sans Oblique) 2.18 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+f6c6 uniF6C6 2.5 (Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+f6c7 uniF6C7 2.11 (Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+f6c8 uniF6C8 2.11 (Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+f6d1 cyrBreve 2.5 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+f6d4 cyrbreve 2.5 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fb00 uniFB00 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.8 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fb01 fi original +U+fb02 fl original +U+fb03 uniFB03 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.8 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fb04 uniFB04 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.8 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fb05 uniFB05 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fb06 uniFB06 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fb13 uniFB13 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb14 uniFB14 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb15 uniFB15 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb16 uniFB16 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb17 uniFB17 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb1d uniFB1D 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb1e uniFB1E 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+fb1f uniFB1F 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb20 uniFB20 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb21 uniFB21 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+fb22 uniFB22 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+fb23 uniFB23 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+fb24 uniFB24 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+fb25 uniFB25 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+fb26 uniFB26 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+fb27 uniFB27 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+fb28 uniFB28 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+fb29 uniFB29 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans ExtraLight, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+fb2a uniFB2A 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb2b uniFB2B 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb2c uniFB2C 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb2d uniFB2D 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb2e uniFB2E 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb2f uniFB2F 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb30 uniFB30 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb31 uniFB31 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb32 uniFB32 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb33 uniFB33 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb34 uniFB34 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb35 uniFB35 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb36 uniFB36 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb37 uniFB37 2.11 (Sans Condensed Oblique, Sans Oblique) +U+fb38 uniFB38 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb39 uniFB39 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb3a uniFB3A 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb3b uniFB3B 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb3c uniFB3C 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb3e uniFB3E 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb40 uniFB40 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb41 uniFB41 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb43 uniFB43 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb44 uniFB44 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb46 uniFB46 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb47 uniFB47 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb48 uniFB48 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb49 uniFB49 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb4a uniFB4A 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb4b uniFB4B 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb4c uniFB4C 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb4d uniFB4D 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb4e uniFB4E 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb4f uniFB4F 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+fb52 uniFB52 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb53 uniFB53 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb54 uniFB54 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb55 uniFB55 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb56 uniFB56 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb57 uniFB57 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb58 uniFB58 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb59 uniFB59 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb5a uniFB5A 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb5b uniFB5B 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb5c uniFB5C 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb5d uniFB5D 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb5e uniFB5E 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb5f uniFB5F 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb60 uniFB60 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb61 uniFB61 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb62 uniFB62 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb63 uniFB63 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb64 uniFB64 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb65 uniFB65 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb66 uniFB66 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb67 uniFB67 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb68 uniFB68 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb69 uniFB69 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb6a uniFB6A 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb6b uniFB6B 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb6c uniFB6C 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb6d uniFB6D 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb6e uniFB6E 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb6f uniFB6F 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb70 uniFB70 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb71 uniFB71 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb72 uniFB72 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb73 uniFB73 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb74 uniFB74 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb75 uniFB75 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb76 uniFB76 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb77 uniFB77 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb78 uniFB78 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb79 uniFB79 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb7a uniFB7A 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb7b uniFB7B 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb7c uniFB7C 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb7d uniFB7D 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb7e uniFB7E 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb7f uniFB7F 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb80 uniFB80 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb81 uniFB81 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb82 uniFB82 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb83 uniFB83 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb84 uniFB84 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb85 uniFB85 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb86 uniFB86 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb87 uniFB87 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb88 uniFB88 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb89 uniFB89 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb8a uniFB8A 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb8b uniFB8B 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb8c uniFB8C 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb8d uniFB8D 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb8e uniFB8E 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb8f uniFB8F 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb90 uniFB90 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb91 uniFB91 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb92 uniFB92 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb93 uniFB93 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb94 uniFB94 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb95 uniFB95 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb96 uniFB96 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb97 uniFB97 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb98 uniFB98 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb99 uniFB99 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb9a uniFB9A 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb9b uniFB9B 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb9c uniFB9C 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb9d uniFB9D 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb9e uniFB9E 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb9f uniFB9F 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fba0 uniFBA0 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fba1 uniFBA1 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fba2 uniFBA2 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fba3 uniFBA3 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fbaa uniFBAA 2.16 (Sans Mono, Sans Mono Bold) 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fbab uniFBAB 2.16 (Sans Mono, Sans Mono Bold) 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fbac uniFBAC 2.16 (Sans Mono, Sans Mono Bold) 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fbad uniFBAD 2.16 (Sans Mono, Sans Mono Bold) 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fbd3 uniFBD3 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fbd4 uniFBD4 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fbd5 uniFBD5 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fbd6 uniFBD6 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fbd9 uniFBD9 2.7 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fbda uniFBDA 2.7 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fbe8 uniFBE8 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fbe9 uniFBE9 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fbfc uniFBFC 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fbfd uniFBFD 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fbfe uniFBFE 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fbff uniFBFF 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe00 uniFE00 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fe01 uniFE01 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fe02 uniFE02 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fe03 uniFE03 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fe04 uniFE04 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fe05 uniFE05 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fe06 uniFE06 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fe07 uniFE07 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fe08 uniFE08 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fe09 uniFE09 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fe0a uniFE0A 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fe0b uniFE0B 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fe0c uniFE0C 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fe0d uniFE0D 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fe0e uniFE0E 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fe0f uniFE0F 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fe20 uniFE20 2.21 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fe21 uniFE21 2.21 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fe22 uniFE22 2.21 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fe23 uniFE23 2.21 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fe70 uniFE70 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe71 uniFE71 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe72 uniFE72 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe73 uniFE73 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe74 uniFE74 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe76 uniFE76 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe77 uniFE77 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe78 uniFE78 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe79 uniFE79 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe7a uniFE7A 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe7b uniFE7B 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe7c uniFE7C 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe7d uniFE7D 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe7e uniFE7E 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe7f uniFE7F 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe80 uniFE80 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe81 uniFE81 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe82 uniFE82 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe83 uniFE83 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe84 uniFE84 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe85 uniFE85 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe86 uniFE86 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe87 uniFE87 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe88 uniFE88 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe89 uniFE89 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe8a uniFE8A 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe8b uniFE8B 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe8c uniFE8C 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe8d uniFE8D 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe8e uniFE8E 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe8f uniFE8F 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe90 uniFE90 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe91 uniFE91 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe92 uniFE92 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe93 uniFE93 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe94 uniFE94 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe95 uniFE95 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe96 uniFE96 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe97 uniFE97 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe98 uniFE98 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe99 uniFE99 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe9a uniFE9A 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe9b uniFE9B 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe9c uniFE9C 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe9d uniFE9D 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe9e uniFE9E 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe9f uniFE9F 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fea0 uniFEA0 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fea1 uniFEA1 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fea2 uniFEA2 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fea3 uniFEA3 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fea4 uniFEA4 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fea5 uniFEA5 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fea6 uniFEA6 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fea7 uniFEA7 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fea8 uniFEA8 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fea9 uniFEA9 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feaa uniFEAA 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feab uniFEAB 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feac uniFEAC 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fead uniFEAD 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feae uniFEAE 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feaf uniFEAF 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feb0 uniFEB0 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feb1 uniFEB1 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feb2 uniFEB2 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feb3 uniFEB3 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feb4 uniFEB4 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feb5 uniFEB5 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feb6 uniFEB6 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feb7 uniFEB7 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feb8 uniFEB8 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feb9 uniFEB9 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feba uniFEBA 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+febb uniFEBB 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+febc uniFEBC 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+febd uniFEBD 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+febe uniFEBE 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+febf uniFEBF 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fec0 uniFEC0 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fec1 uniFEC1 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fec2 uniFEC2 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fec3 uniFEC3 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fec4 uniFEC4 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fec5 uniFEC5 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fec6 uniFEC6 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fec7 uniFEC7 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fec8 uniFEC8 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fec9 uniFEC9 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feca uniFECA 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fecb uniFECB 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fecc uniFECC 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fecd uniFECD 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fece uniFECE 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fecf uniFECF 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fed0 uniFED0 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fed1 uniFED1 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fed2 uniFED2 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fed3 uniFED3 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fed4 uniFED4 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fed5 uniFED5 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fed6 uniFED6 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fed7 uniFED7 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fed8 uniFED8 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fed9 uniFED9 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feda uniFEDA 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fedb uniFEDB 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fedc uniFEDC 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fedd uniFEDD 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fede uniFEDE 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fedf uniFEDF 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fee0 uniFEE0 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fee1 uniFEE1 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fee2 uniFEE2 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fee3 uniFEE3 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fee4 uniFEE4 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fee5 uniFEE5 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fee6 uniFEE6 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fee7 uniFEE7 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fee8 uniFEE8 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fee9 uniFEE9 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feea uniFEEA 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feeb uniFEEB 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feec uniFEEC 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feed uniFEED 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feee uniFEEE 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feef uniFEEF 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fef0 uniFEF0 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fef1 uniFEF1 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fef2 uniFEF2 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fef3 uniFEF3 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fef4 uniFEF4 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fef5 uniFEF5 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fef6 uniFEF6 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fef7 uniFEF7 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fef8 uniFEF8 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fef9 uniFEF9 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fefa uniFEFA 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fefb uniFEFB 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fefc uniFEFC 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feff uniFEFF 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fff9 uniFFF9 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fffa uniFFFA 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fffb uniFFFB 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fffc uniFFFC 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fffd uniFFFD 1.12 +U+1d300 u1D300 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d301 u1D301 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d302 u1D302 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d303 u1D303 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d304 u1D304 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d305 u1D305 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d306 u1D306 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d307 u1D307 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d308 u1D308 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d309 u1D309 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d30a u1D30A 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d30b u1D30B 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d30c u1D30C 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d30d u1D30D 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d30e u1D30E 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d30f u1D30F 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d310 u1D310 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d311 u1D311 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d312 u1D312 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d313 u1D313 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d314 u1D314 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d315 u1D315 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d316 u1D316 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d317 u1D317 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d318 u1D318 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d319 u1D319 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d31a u1D31A 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d31b u1D31B 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d31c u1D31C 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d31d u1D31D 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d31e u1D31E 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d31f u1D31F 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d320 u1D320 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d321 u1D321 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d322 u1D322 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d323 u1D323 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d324 u1D324 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d325 u1D325 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d326 u1D326 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d327 u1D327 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d328 u1D328 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d329 u1D329 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d32a u1D32A 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d32b u1D32B 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d32c u1D32C 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d32d u1D32D 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d32e u1D32E 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d32f u1D32F 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d330 u1D330 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d331 u1D331 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d332 u1D332 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d333 u1D333 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d334 u1D334 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d335 u1D335 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d336 u1D336 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d337 u1D337 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d338 u1D338 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d339 u1D339 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d33a u1D33A 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d33b u1D33B 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d33c u1D33C 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d33d u1D33D 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d33e u1D33E 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d33f u1D33F 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d340 u1D340 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d341 u1D341 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d342 u1D342 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d343 u1D343 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d344 u1D344 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d345 u1D345 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d346 u1D346 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d347 u1D347 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d348 u1D348 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d349 u1D349 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d34a u1D34A 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d34b u1D34B 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d34c u1D34C 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d34d u1D34D 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d34e u1D34E 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d34f u1D34F 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d350 u1D350 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d351 u1D351 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d352 u1D352 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d353 u1D353 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d354 u1D354 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d355 u1D355 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d356 u1D356 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d400 u1D400 2.23 (Serif Bold, Serif Condensed Bold) +U+1d401 u1D401 2.23 (Serif Bold, Serif Condensed Bold) +U+1d402 u1D402 2.23 (Serif Bold, Serif Condensed Bold) +U+1d403 u1D403 2.23 (Serif Bold, Serif Condensed Bold) +U+1d404 u1D404 2.23 (Serif Bold, Serif Condensed Bold) +U+1d405 u1D405 2.23 (Serif Bold, Serif Condensed Bold) +U+1d406 u1D406 2.23 (Serif Bold, Serif Condensed Bold) +U+1d407 u1D407 2.23 (Serif Bold, Serif Condensed Bold) +U+1d408 u1D408 2.23 (Serif Bold, Serif Condensed Bold) +U+1d409 u1D409 2.23 (Serif Bold, Serif Condensed Bold) +U+1d40a u1D40A 2.23 (Serif Bold, Serif Condensed Bold) +U+1d40b u1D40B 2.23 (Serif Bold, Serif Condensed Bold) +U+1d40c u1D40C 2.23 (Serif Bold, Serif Condensed Bold) +U+1d40d u1D40D 2.23 (Serif Bold, Serif Condensed Bold) +U+1d40e u1D40E 2.23 (Serif Bold, Serif Condensed Bold) +U+1d40f u1D40F 2.23 (Serif Bold, Serif Condensed Bold) +U+1d410 u1D410 2.23 (Serif Bold, Serif Condensed Bold) +U+1d411 u1D411 2.23 (Serif Bold, Serif Condensed Bold) +U+1d412 u1D412 2.23 (Serif Bold, Serif Condensed Bold) +U+1d413 u1D413 2.23 (Serif Bold, Serif Condensed Bold) +U+1d414 u1D414 2.23 (Serif Bold, Serif Condensed Bold) +U+1d415 u1D415 2.23 (Serif Bold, Serif Condensed Bold) +U+1d416 u1D416 2.23 (Serif Bold, Serif Condensed Bold) +U+1d417 u1D417 2.23 (Serif Bold, Serif Condensed Bold) +U+1d418 u1D418 2.23 (Serif Bold, Serif Condensed Bold) +U+1d419 u1D419 2.23 (Serif Bold, Serif Condensed Bold) +U+1d41a u1D41A 2.23 (Serif Bold, Serif Condensed Bold) +U+1d41b u1D41B 2.23 (Serif Bold, Serif Condensed Bold) +U+1d41c u1D41C 2.23 (Serif Bold, Serif Condensed Bold) +U+1d41d u1D41D 2.23 (Serif Bold, Serif Condensed Bold) +U+1d41e u1D41E 2.23 (Serif Bold, Serif Condensed Bold) +U+1d41f u1D41F 2.23 (Serif Bold, Serif Condensed Bold) +U+1d420 u1D420 2.23 (Serif Bold, Serif Condensed Bold) +U+1d421 u1D421 2.23 (Serif Bold, Serif Condensed Bold) +U+1d422 u1D422 2.23 (Serif Bold, Serif Condensed Bold) +U+1d423 u1D423 2.23 (Serif Bold, Serif Condensed Bold) +U+1d424 u1D424 2.23 (Serif Bold, Serif Condensed Bold) +U+1d425 u1D425 2.23 (Serif Bold, Serif Condensed Bold) +U+1d426 u1D426 2.23 (Serif Bold, Serif Condensed Bold) +U+1d427 u1D427 2.23 (Serif Bold, Serif Condensed Bold) +U+1d428 u1D428 2.23 (Serif Bold, Serif Condensed Bold) +U+1d429 u1D429 2.23 (Serif Bold, Serif Condensed Bold) +U+1d42a u1D42A 2.23 (Serif Bold, Serif Condensed Bold) +U+1d42b u1D42B 2.23 (Serif Bold, Serif Condensed Bold) +U+1d42c u1D42C 2.23 (Serif Bold, Serif Condensed Bold) +U+1d42d u1D42D 2.23 (Serif Bold, Serif Condensed Bold) +U+1d42e u1D42E 2.23 (Serif Bold, Serif Condensed Bold) +U+1d42f u1D42F 2.23 (Serif Bold, Serif Condensed Bold) +U+1d430 u1D430 2.23 (Serif Bold, Serif Condensed Bold) +U+1d431 u1D431 2.23 (Serif Bold, Serif Condensed Bold) +U+1d432 u1D432 2.23 (Serif Bold, Serif Condensed Bold) +U+1d433 u1D433 2.23 (Serif Bold, Serif Condensed Bold) +U+1d434 u1D434 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d435 u1D435 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d436 u1D436 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d437 u1D437 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d438 u1D438 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d439 u1D439 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d43a u1D43A 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d43b u1D43B 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d43c u1D43C 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d43d u1D43D 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d43e u1D43E 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d43f u1D43F 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d440 u1D440 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d441 u1D441 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d442 u1D442 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d443 u1D443 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d444 u1D444 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d445 u1D445 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d446 u1D446 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d447 u1D447 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d448 u1D448 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d449 u1D449 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d44a u1D44A 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d44b u1D44B 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d44c u1D44C 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d44d u1D44D 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d44e u1D44E 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d44f u1D44F 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d450 u1D450 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d451 u1D451 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d452 u1D452 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d453 u1D453 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d454 u1D454 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d456 u1D456 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d457 u1D457 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d458 u1D458 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d459 u1D459 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d45a u1D45A 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d45b u1D45B 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d45c u1D45C 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d45d u1D45D 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d45e u1D45E 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d45f u1D45F 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d460 u1D460 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d461 u1D461 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d462 u1D462 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d463 u1D463 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d464 u1D464 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d465 u1D465 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d466 u1D466 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d467 u1D467 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d468 u1D468 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d469 u1D469 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d46a u1D46A 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d46b u1D46B 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d46c u1D46C 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d46d u1D46D 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d46e u1D46E 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d46f u1D46F 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d470 u1D470 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d471 u1D471 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d472 u1D472 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d473 u1D473 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d474 u1D474 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d475 u1D475 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d476 u1D476 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d477 u1D477 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d478 u1D478 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d479 u1D479 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d47a u1D47A 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d47b u1D47B 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d47c u1D47C 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d47d u1D47D 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d47e u1D47E 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d47f u1D47F 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d480 u1D480 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d481 u1D481 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d482 u1D482 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d483 u1D483 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d484 u1D484 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d485 u1D485 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d486 u1D486 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d487 u1D487 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d488 u1D488 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d489 u1D489 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d48a u1D48A 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d48b u1D48B 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d48c u1D48C 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d48d u1D48D 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d48e u1D48E 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d48f u1D48F 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d490 u1D490 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d491 u1D491 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d492 u1D492 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d493 u1D493 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d494 u1D494 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d495 u1D495 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d496 u1D496 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d497 u1D497 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d498 u1D498 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d499 u1D499 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d49a u1D49A 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d49b u1D49B 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d538 u1D538 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d539 u1D539 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d53b u1D53B 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d53c u1D53C 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d53d u1D53D 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d53e u1D53E 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d540 u1D540 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d541 u1D541 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d542 u1D542 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d543 u1D543 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d544 u1D544 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d546 u1D546 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d54a u1D54A 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d54b u1D54B 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d54c u1D54C 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d54d u1D54D 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d54e u1D54E 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d54f u1D54F 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d550 u1D550 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d552 u1D552 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d553 u1D553 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d554 u1D554 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d555 u1D555 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d556 u1D556 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d557 u1D557 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d558 u1D558 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d559 u1D559 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d55a u1D55A 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d55b u1D55B 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d55c u1D55C 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d55d u1D55D 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d55e u1D55E 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d55f u1D55F 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d560 u1D560 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d561 u1D561 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d562 u1D562 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d563 u1D563 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d564 u1D564 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d565 u1D565 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d566 u1D566 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d567 u1D567 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d568 u1D568 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d569 u1D569 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d56a u1D56A 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d56b u1D56B 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d5a0 u1D5A0 2.23 (Sans, Sans Condensed) +U+1d5a1 u1D5A1 2.23 (Sans, Sans Condensed) +U+1d5a2 u1D5A2 2.23 (Sans, Sans Condensed) +U+1d5a3 u1D5A3 2.23 (Sans, Sans Condensed) +U+1d5a4 u1D5A4 2.23 (Sans, Sans Condensed) +U+1d5a5 u1D5A5 2.23 (Sans, Sans Condensed) +U+1d5a6 u1D5A6 2.23 (Sans, Sans Condensed) +U+1d5a7 u1D5A7 2.23 (Sans, Sans Condensed) +U+1d5a8 u1D5A8 2.23 (Sans, Sans Condensed) +U+1d5a9 u1D5A9 2.23 (Sans, Sans Condensed) +U+1d5aa u1D5AA 2.23 (Sans, Sans Condensed) +U+1d5ab u1D5AB 2.23 (Sans, Sans Condensed) +U+1d5ac u1D5AC 2.23 (Sans, Sans Condensed) +U+1d5ad u1D5AD 2.23 (Sans, Sans Condensed) +U+1d5ae u1D5AE 2.23 (Sans, Sans Condensed) +U+1d5af u1D5AF 2.23 (Sans, Sans Condensed) +U+1d5b0 u1D5B0 2.23 (Sans, Sans Condensed) +U+1d5b1 u1D5B1 2.23 (Sans, Sans Condensed) +U+1d5b2 u1D5B2 2.23 (Sans, Sans Condensed) +U+1d5b3 u1D5B3 2.23 (Sans, Sans Condensed) +U+1d5b4 u1D5B4 2.23 (Sans, Sans Condensed) +U+1d5b5 u1D5B5 2.23 (Sans, Sans Condensed) +U+1d5b6 u1D5B6 2.23 (Sans, Sans Condensed) +U+1d5b7 u1D5B7 2.23 (Sans, Sans Condensed) +U+1d5b8 u1D5B8 2.23 (Sans, Sans Condensed) +U+1d5b9 u1D5B9 2.23 (Sans, Sans Condensed) +U+1d5ba u1D5BA 2.23 (Sans, Sans Condensed) +U+1d5bb u1D5BB 2.23 (Sans, Sans Condensed) +U+1d5bc u1D5BC 2.23 (Sans, Sans Condensed) +U+1d5bd u1D5BD 2.23 (Sans, Sans Condensed) +U+1d5be u1D5BE 2.23 (Sans, Sans Condensed) +U+1d5bf u1D5BF 2.23 (Sans, Sans Condensed) +U+1d5c0 u1D5C0 2.23 (Sans, Sans Condensed) +U+1d5c1 u1D5C1 2.23 (Sans, Sans Condensed) +U+1d5c2 u1D5C2 2.23 (Sans, Sans Condensed) +U+1d5c3 u1D5C3 2.23 (Sans, Sans Condensed) +U+1d5c4 u1D5C4 2.23 (Sans, Sans Condensed) +U+1d5c5 u1D5C5 2.23 (Sans, Sans Condensed) +U+1d5c6 u1D5C6 2.23 (Sans, Sans Condensed) +U+1d5c7 u1D5C7 2.23 (Sans, Sans Condensed) +U+1d5c8 u1D5C8 2.23 (Sans, Sans Condensed) +U+1d5c9 u1D5C9 2.23 (Sans, Sans Condensed) +U+1d5ca u1D5CA 2.23 (Sans, Sans Condensed) +U+1d5cb u1D5CB 2.23 (Sans, Sans Condensed) +U+1d5cc u1D5CC 2.23 (Sans, Sans Condensed) +U+1d5cd u1D5CD 2.23 (Sans, Sans Condensed) +U+1d5ce u1D5CE 2.23 (Sans, Sans Condensed) +U+1d5cf u1D5CF 2.23 (Sans, Sans Condensed) +U+1d5d0 u1D5D0 2.23 (Sans, Sans Condensed) +U+1d5d1 u1D5D1 2.23 (Sans, Sans Condensed) +U+1d5d2 u1D5D2 2.23 (Sans, Sans Condensed) +U+1d5d3 u1D5D3 2.23 (Sans, Sans Condensed) +U+1d5d4 u1D5D4 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5d5 u1D5D5 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5d6 u1D5D6 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5d7 u1D5D7 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5d8 u1D5D8 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5d9 u1D5D9 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5da u1D5DA 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5db u1D5DB 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5dc u1D5DC 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5dd u1D5DD 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5de u1D5DE 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5df u1D5DF 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5e0 u1D5E0 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5e1 u1D5E1 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5e2 u1D5E2 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5e3 u1D5E3 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5e4 u1D5E4 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5e5 u1D5E5 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5e6 u1D5E6 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5e7 u1D5E7 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5e8 u1D5E8 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5e9 u1D5E9 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5ea u1D5EA 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5eb u1D5EB 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5ec u1D5EC 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5ed u1D5ED 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5ee u1D5EE 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5ef u1D5EF 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5f0 u1D5F0 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5f1 u1D5F1 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5f2 u1D5F2 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5f3 u1D5F3 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5f4 u1D5F4 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5f5 u1D5F5 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5f6 u1D5F6 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5f7 u1D5F7 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5f8 u1D5F8 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5f9 u1D5F9 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5fa u1D5FA 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5fb u1D5FB 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5fc u1D5FC 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5fd u1D5FD 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5fe u1D5FE 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5ff u1D5FF 2.23 (Sans Bold, Sans Condensed Bold) +U+1d600 u1D600 2.23 (Sans Bold, Sans Condensed Bold) +U+1d601 u1D601 2.23 (Sans Bold, Sans Condensed Bold) +U+1d602 u1D602 2.23 (Sans Bold, Sans Condensed Bold) +U+1d603 u1D603 2.23 (Sans Bold, Sans Condensed Bold) +U+1d604 u1D604 2.23 (Sans Bold, Sans Condensed Bold) +U+1d605 u1D605 2.23 (Sans Bold, Sans Condensed Bold) +U+1d606 u1D606 2.23 (Sans Bold, Sans Condensed Bold) +U+1d607 u1D607 2.23 (Sans Bold, Sans Condensed Bold) +U+1d608 u1D608 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d609 u1D609 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d60a u1D60A 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d60b u1D60B 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d60c u1D60C 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d60d u1D60D 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d60e u1D60E 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d60f u1D60F 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d610 u1D610 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d611 u1D611 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d612 u1D612 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d613 u1D613 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d614 u1D614 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d615 u1D615 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d616 u1D616 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d617 u1D617 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d618 u1D618 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d619 u1D619 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d61a u1D61A 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d61b u1D61B 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d61c u1D61C 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d61d u1D61D 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d61e u1D61E 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d61f u1D61F 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d620 u1D620 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d621 u1D621 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d622 u1D622 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d623 u1D623 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d624 u1D624 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d625 u1D625 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d626 u1D626 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d627 u1D627 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d628 u1D628 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d629 u1D629 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d62a u1D62A 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d62b u1D62B 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d62c u1D62C 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d62d u1D62D 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d62e u1D62E 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d62f u1D62F 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d630 u1D630 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d631 u1D631 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d632 u1D632 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d633 u1D633 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d634 u1D634 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d635 u1D635 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d636 u1D636 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d637 u1D637 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d638 u1D638 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d639 u1D639 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d63a u1D63A 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d63b u1D63B 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d63c u1D63C 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d63d u1D63D 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d63e u1D63E 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d63f u1D63F 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d640 u1D640 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d641 u1D641 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d642 u1D642 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d643 u1D643 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d644 u1D644 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d645 u1D645 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d646 u1D646 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d647 u1D647 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d648 u1D648 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d649 u1D649 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d64a u1D64A 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d64b u1D64B 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d64c u1D64C 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d64d u1D64D 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d64e u1D64E 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d64f u1D64F 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d650 u1D650 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d651 u1D651 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d652 u1D652 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d653 u1D653 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d654 u1D654 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d655 u1D655 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d656 u1D656 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d657 u1D657 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d658 u1D658 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d659 u1D659 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d65a u1D65A 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d65b u1D65B 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d65c u1D65C 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d65d u1D65D 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d65e u1D65E 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d65f u1D65F 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d660 u1D660 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d661 u1D661 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d662 u1D662 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d663 u1D663 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d664 u1D664 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d665 u1D665 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d666 u1D666 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d667 u1D667 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d668 u1D668 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d669 u1D669 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d66a u1D66A 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d66b u1D66B 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d66c u1D66C 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d66d u1D66D 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d66e u1D66E 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d66f u1D66F 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d670 u1D670 2.23 (Sans Mono) +U+1d671 u1D671 2.23 (Sans Mono) +U+1d672 u1D672 2.23 (Sans Mono) +U+1d673 u1D673 2.23 (Sans Mono) +U+1d674 u1D674 2.23 (Sans Mono) +U+1d675 u1D675 2.23 (Sans Mono) +U+1d676 u1D676 2.23 (Sans Mono) +U+1d677 u1D677 2.23 (Sans Mono) +U+1d678 u1D678 2.23 (Sans Mono) +U+1d679 u1D679 2.23 (Sans Mono) +U+1d67a u1D67A 2.23 (Sans Mono) +U+1d67b u1D67B 2.23 (Sans Mono) +U+1d67c u1D67C 2.23 (Sans Mono) +U+1d67d u1D67D 2.23 (Sans Mono) +U+1d67e u1D67E 2.23 (Sans Mono) +U+1d67f u1D67F 2.23 (Sans Mono) +U+1d680 u1D680 2.23 (Sans Mono) +U+1d681 u1D681 2.23 (Sans Mono) +U+1d682 u1D682 2.23 (Sans Mono) +U+1d683 u1D683 2.23 (Sans Mono) +U+1d684 u1D684 2.23 (Sans Mono) +U+1d685 u1D685 2.23 (Sans Mono) +U+1d686 u1D686 2.23 (Sans Mono) +U+1d687 u1D687 2.23 (Sans Mono) +U+1d688 u1D688 2.23 (Sans Mono) +U+1d689 u1D689 2.23 (Sans Mono) +U+1d68a u1D68A 2.23 (Sans Mono) +U+1d68b u1D68B 2.23 (Sans Mono) +U+1d68c u1D68C 2.23 (Sans Mono) +U+1d68d u1D68D 2.23 (Sans Mono) +U+1d68e u1D68E 2.23 (Sans Mono) +U+1d68f u1D68F 2.23 (Sans Mono) +U+1d690 u1D690 2.23 (Sans Mono) +U+1d691 u1D691 2.23 (Sans Mono) +U+1d692 u1D692 2.23 (Sans Mono) +U+1d693 u1D693 2.23 (Sans Mono) +U+1d694 u1D694 2.23 (Sans Mono) +U+1d695 u1D695 2.23 (Sans Mono) +U+1d696 u1D696 2.23 (Sans Mono) +U+1d697 u1D697 2.23 (Sans Mono) +U+1d698 u1D698 2.23 (Sans Mono) +U+1d699 u1D699 2.23 (Sans Mono) +U+1d69a u1D69A 2.23 (Sans Mono) +U+1d69b u1D69B 2.23 (Sans Mono) +U+1d69c u1D69C 2.23 (Sans Mono) +U+1d69d u1D69D 2.23 (Sans Mono) +U+1d69e u1D69E 2.23 (Sans Mono) +U+1d69f u1D69F 2.23 (Sans Mono) +U+1d6a0 u1D6A0 2.23 (Sans Mono) +U+1d6a1 u1D6A1 2.23 (Sans Mono) +U+1d6a2 u1D6A2 2.23 (Sans Mono) +U+1d6a3 u1D6A3 2.23 (Sans Mono) +U+1d6a4 u1D6A4 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d6a5 u1D6A5 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d6a8 u1D6A8 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6a9 u1D6A9 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6aa u1D6AA 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6ab u1D6AB 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6ac u1D6AC 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6ad u1D6AD 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6ae u1D6AE 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6af u1D6AF 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6b0 u1D6B0 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6b1 u1D6B1 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6b2 u1D6B2 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6b3 u1D6B3 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6b4 u1D6B4 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6b5 u1D6B5 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6b6 u1D6B6 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6b7 u1D6B7 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6b8 u1D6B8 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6b9 u1D6B9 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6ba u1D6BA 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6bb u1D6BB 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6bc u1D6BC 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6bd u1D6BD 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6be u1D6BE 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6bf u1D6BF 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6c0 u1D6C0 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6c1 u1D6C1 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6c2 u1D6C2 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6c3 u1D6C3 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6c4 u1D6C4 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6c5 u1D6C5 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6c6 u1D6C6 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6c7 u1D6C7 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6c8 u1D6C8 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6c9 u1D6C9 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6ca u1D6CA 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6cb u1D6CB 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6cc u1D6CC 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6cd u1D6CD 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6ce u1D6CE 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6cf u1D6CF 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6d0 u1D6D0 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6d1 u1D6D1 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6d2 u1D6D2 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6d3 u1D6D3 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6d4 u1D6D4 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6d5 u1D6D5 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6d6 u1D6D6 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6d7 u1D6D7 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6d8 u1D6D8 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6d9 u1D6D9 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6da u1D6DA 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6db u1D6DB 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6dc u1D6DC 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6dd u1D6DD 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6de u1D6DE 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6df u1D6DF 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6e0 u1D6E0 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6e1 u1D6E1 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6e2 u1D6E2 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d6e3 u1D6E3 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d6e4 u1D6E4 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d6e5 u1D6E5 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d6e6 u1D6E6 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d6e7 u1D6E7 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d6e8 u1D6E8 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d6e9 u1D6E9 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d6ea u1D6EA 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d6eb u1D6EB 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d6ec u1D6EC 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d6ed u1D6ED 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d6ee u1D6EE 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d6ef u1D6EF 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d6f0 u1D6F0 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d6f1 u1D6F1 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d6f2 u1D6F2 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d6f3 u1D6F3 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d6f4 u1D6F4 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d6f5 u1D6F5 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d6f6 u1D6F6 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d6f7 u1D6F7 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d6f8 u1D6F8 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d6f9 u1D6F9 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d6fa u1D6FA 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d6fb u1D6FB 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d6fc u1D6FC 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d6fd u1D6FD 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d6fe u1D6FE 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d6ff u1D6FF 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d700 u1D700 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d701 u1D701 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d702 u1D702 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d703 u1D703 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d704 u1D704 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d705 u1D705 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d706 u1D706 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d707 u1D707 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d708 u1D708 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d709 u1D709 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d70a u1D70A 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d70b u1D70B 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d70c u1D70C 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d70d u1D70D 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d70e u1D70E 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d70f u1D70F 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d710 u1D710 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d711 u1D711 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d712 u1D712 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d713 u1D713 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d714 u1D714 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d715 u1D715 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d716 u1D716 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d717 u1D717 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d718 u1D718 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d719 u1D719 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d71a u1D71A 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d71b u1D71B 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d71c u1D71C 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d71d u1D71D 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d71e u1D71E 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d71f u1D71F 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d720 u1D720 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d721 u1D721 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d722 u1D722 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d723 u1D723 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d724 u1D724 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d725 u1D725 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d726 u1D726 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d727 u1D727 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d728 u1D728 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d729 u1D729 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d72a u1D72A 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d72b u1D72B 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d72c u1D72C 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d72d u1D72D 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d72e u1D72E 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d72f u1D72F 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d730 u1D730 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d731 u1D731 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d732 u1D732 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d733 u1D733 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d734 u1D734 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d735 u1D735 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d736 u1D736 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d737 u1D737 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d738 u1D738 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d739 u1D739 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d73a u1D73A 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d73b u1D73B 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d73c u1D73C 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d73d u1D73D 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d73e u1D73E 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d73f u1D73F 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d740 u1D740 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d741 u1D741 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d742 u1D742 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d743 u1D743 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d744 u1D744 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d745 u1D745 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d746 u1D746 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d747 u1D747 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d748 u1D748 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d749 u1D749 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d74a u1D74A 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d74b u1D74B 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d74c u1D74C 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d74d u1D74D 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d74e u1D74E 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d74f u1D74F 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d750 u1D750 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d751 u1D751 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d752 u1D752 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d753 u1D753 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d754 u1D754 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d755 u1D755 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d756 u1D756 2.23 (Sans Bold, Sans Condensed Bold) +U+1d757 u1D757 2.23 (Sans Bold, Sans Condensed Bold) +U+1d758 u1D758 2.23 (Sans Bold, Sans Condensed Bold) +U+1d759 u1D759 2.23 (Sans Bold, Sans Condensed Bold) +U+1d75a u1D75A 2.23 (Sans Bold, Sans Condensed Bold) +U+1d75b u1D75B 2.23 (Sans Bold, Sans Condensed Bold) +U+1d75c u1D75C 2.23 (Sans Bold, Sans Condensed Bold) +U+1d75d u1D75D 2.23 (Sans Bold, Sans Condensed Bold) +U+1d75e u1D75E 2.23 (Sans Bold, Sans Condensed Bold) +U+1d75f u1D75F 2.23 (Sans Bold, Sans Condensed Bold) +U+1d760 u1D760 2.23 (Sans Bold, Sans Condensed Bold) +U+1d761 u1D761 2.23 (Sans Bold, Sans Condensed Bold) +U+1d762 u1D762 2.23 (Sans Bold, Sans Condensed Bold) +U+1d763 u1D763 2.23 (Sans Bold, Sans Condensed Bold) +U+1d764 u1D764 2.23 (Sans Bold, Sans Condensed Bold) +U+1d765 u1D765 2.23 (Sans Bold, Sans Condensed Bold) +U+1d766 u1D766 2.23 (Sans Bold, Sans Condensed Bold) +U+1d767 u1D767 2.23 (Sans Bold, Sans Condensed Bold) +U+1d768 u1D768 2.23 (Sans Bold, Sans Condensed Bold) +U+1d769 u1D769 2.23 (Sans Bold, Sans Condensed Bold) +U+1d76a u1D76A 2.23 (Sans Bold, Sans Condensed Bold) +U+1d76b u1D76B 2.23 (Sans Bold, Sans Condensed Bold) +U+1d76c u1D76C 2.23 (Sans Bold, Sans Condensed Bold) +U+1d76d u1D76D 2.23 (Sans Bold, Sans Condensed Bold) +U+1d76e u1D76E 2.23 (Sans Bold, Sans Condensed Bold) +U+1d76f u1D76F 2.23 (Sans Bold, Sans Condensed Bold) +U+1d770 u1D770 2.23 (Sans Bold, Sans Condensed Bold) +U+1d771 u1D771 2.23 (Sans Bold, Sans Condensed Bold) +U+1d772 u1D772 2.23 (Sans Bold, Sans Condensed Bold) +U+1d773 u1D773 2.23 (Sans Bold, Sans Condensed Bold) +U+1d774 u1D774 2.23 (Sans Bold, Sans Condensed Bold) +U+1d775 u1D775 2.23 (Sans Bold, Sans Condensed Bold) +U+1d776 u1D776 2.23 (Sans Bold, Sans Condensed Bold) +U+1d777 u1D777 2.23 (Sans Bold, Sans Condensed Bold) +U+1d778 u1D778 2.23 (Sans Bold, Sans Condensed Bold) +U+1d779 u1D779 2.23 (Sans Bold, Sans Condensed Bold) +U+1d77a u1D77A 2.23 (Sans Bold, Sans Condensed Bold) +U+1d77b u1D77B 2.23 (Sans Bold, Sans Condensed Bold) +U+1d77c u1D77C 2.23 (Sans Bold, Sans Condensed Bold) +U+1d77d u1D77D 2.23 (Sans Bold, Sans Condensed Bold) +U+1d77e u1D77E 2.23 (Sans Bold, Sans Condensed Bold) +U+1d77f u1D77F 2.23 (Sans Bold, Sans Condensed Bold) +U+1d780 u1D780 2.23 (Sans Bold, Sans Condensed Bold) +U+1d781 u1D781 2.23 (Sans Bold, Sans Condensed Bold) +U+1d782 u1D782 2.23 (Sans Bold, Sans Condensed Bold) +U+1d783 u1D783 2.23 (Sans Bold, Sans Condensed Bold) +U+1d784 u1D784 2.23 (Sans Bold, Sans Condensed Bold) +U+1d785 u1D785 2.23 (Sans Bold, Sans Condensed Bold) +U+1d786 u1D786 2.23 (Sans Bold, Sans Condensed Bold) +U+1d787 u1D787 2.23 (Sans Bold, Sans Condensed Bold) +U+1d788 u1D788 2.23 (Sans Bold, Sans Condensed Bold) +U+1d789 u1D789 2.23 (Sans Bold, Sans Condensed Bold) +U+1d78a u1D78A 2.23 (Sans Bold, Sans Condensed Bold) +U+1d78b u1D78B 2.23 (Sans Bold, Sans Condensed Bold) +U+1d78c u1D78C 2.23 (Sans Bold, Sans Condensed Bold) +U+1d78d u1D78D 2.23 (Sans Bold, Sans Condensed Bold) +U+1d78e u1D78E 2.23 (Sans Bold, Sans Condensed Bold) +U+1d78f u1D78F 2.23 (Sans Bold, Sans Condensed Bold) +U+1d790 u1D790 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d791 u1D791 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d792 u1D792 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d793 u1D793 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d794 u1D794 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d795 u1D795 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d796 u1D796 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d797 u1D797 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d798 u1D798 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d799 u1D799 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d79a u1D79A 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d79b u1D79B 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d79c u1D79C 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d79d u1D79D 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d79e u1D79E 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d79f u1D79F 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7a0 u1D7A0 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7a1 u1D7A1 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7a2 u1D7A2 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7a3 u1D7A3 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7a4 u1D7A4 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7a5 u1D7A5 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7a6 u1D7A6 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7a7 u1D7A7 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7a8 u1D7A8 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7a9 u1D7A9 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7aa u1D7AA 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7ab u1D7AB 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7ac u1D7AC 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7ad u1D7AD 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7ae u1D7AE 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7af u1D7AF 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7b0 u1D7B0 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7b1 u1D7B1 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7b2 u1D7B2 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7b3 u1D7B3 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7b4 u1D7B4 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7b5 u1D7B5 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7b6 u1D7B6 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7b7 u1D7B7 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7b8 u1D7B8 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7b9 u1D7B9 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7ba u1D7BA 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7bb u1D7BB 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7bc u1D7BC 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7bd u1D7BD 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7be u1D7BE 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7bf u1D7BF 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7c0 u1D7C0 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7c1 u1D7C1 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7c2 u1D7C2 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7c3 u1D7C3 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7c4 u1D7C4 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7c5 u1D7C5 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7c6 u1D7C6 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7c7 u1D7C7 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7c8 u1D7C8 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7c9 u1D7C9 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7ca u1D7CA 2.23 (Serif Bold, Serif Condensed Bold) +U+1d7cb u1D7CB 2.23 (Serif Bold, Serif Condensed Bold) +U+1d7ce u1D7CE 2.23 (Serif Bold, Serif Condensed Bold) +U+1d7cf u1D7CF 2.23 (Serif Bold, Serif Condensed Bold) +U+1d7d0 u1D7D0 2.23 (Serif Bold, Serif Condensed Bold) +U+1d7d1 u1D7D1 2.23 (Serif Bold, Serif Condensed Bold) +U+1d7d2 u1D7D2 2.23 (Serif Bold, Serif Condensed Bold) +U+1d7d3 u1D7D3 2.23 (Serif Bold, Serif Condensed Bold) +U+1d7d4 u1D7D4 2.23 (Serif Bold, Serif Condensed Bold) +U+1d7d5 u1D7D5 2.23 (Serif Bold, Serif Condensed Bold) +U+1d7d6 u1D7D6 2.23 (Serif Bold, Serif Condensed Bold) +U+1d7d7 u1D7D7 2.23 (Serif Bold, Serif Condensed Bold) +U+1d7d8 u1D7D8 2.22 (Serif, Serif Condensed) 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Sans Bold) +U+1d7d9 u1D7D9 2.22 (Serif, Serif Condensed) 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Sans Bold) +U+1d7da u1D7DA 2.22 (Serif, Serif Condensed) 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Sans Bold) +U+1d7db u1D7DB 2.22 (Serif, Serif Condensed) 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Sans Bold) +U+1d7dc u1D7DC 2.22 (Serif, Serif Condensed) 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Sans Bold) +U+1d7dd u1D7DD 2.22 (Serif, Serif Condensed) 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Sans Bold) +U+1d7de u1D7DE 2.22 (Serif, Serif Condensed) 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Sans Bold) +U+1d7df u1D7DF 2.22 (Serif, Serif Condensed) 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Sans Bold) +U+1d7e0 u1D7E0 2.22 (Serif, Serif Condensed) 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Sans Bold) +U+1d7e1 u1D7E1 2.22 (Serif, Serif Condensed) 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Sans Bold) +U+1d7e2 u1D7E2 2.23 (Sans, Sans Condensed) +U+1d7e3 u1D7E3 2.23 (Sans, Sans Condensed) +U+1d7e4 u1D7E4 2.23 (Sans, Sans Condensed) +U+1d7e5 u1D7E5 2.23 (Sans, Sans Condensed) +U+1d7e6 u1D7E6 2.23 (Sans, Sans Condensed) +U+1d7e7 u1D7E7 2.23 (Sans, Sans Condensed) +U+1d7e8 u1D7E8 2.23 (Sans, Sans Condensed) +U+1d7e9 u1D7E9 2.23 (Sans, Sans Condensed) +U+1d7ea u1D7EA 2.23 (Sans, Sans Condensed) +U+1d7eb u1D7EB 2.23 (Sans, Sans Condensed) +U+1d7ec u1D7EC 2.23 (Sans Bold, Sans Condensed Bold) +U+1d7ed u1D7ED 2.23 (Sans Bold, Sans Condensed Bold) +U+1d7ee u1D7EE 2.23 (Sans Bold, Sans Condensed Bold) +U+1d7ef u1D7EF 2.23 (Sans Bold, Sans Condensed Bold) +U+1d7f0 u1D7F0 2.23 (Sans Bold, Sans Condensed Bold) +U+1d7f1 u1D7F1 2.23 (Sans Bold, Sans Condensed Bold) +U+1d7f2 u1D7F2 2.23 (Sans Bold, Sans Condensed Bold) +U+1d7f3 u1D7F3 2.23 (Sans Bold, Sans Condensed Bold) +U+1d7f4 u1D7F4 2.23 (Sans Bold, Sans Condensed Bold) +U+1d7f5 u1D7F5 2.23 (Sans Bold, Sans Condensed Bold) +U+1d7f6 u1D7F6 2.23 (Sans Mono) +U+1d7f7 u1D7F7 2.23 (Sans Mono) +U+1d7f8 u1D7F8 2.23 (Sans Mono) +U+1d7f9 u1D7F9 2.23 (Sans Mono) +U+1d7fa u1D7FA 2.23 (Sans Mono) +U+1d7fb u1D7FB 2.23 (Sans Mono) +U+1d7fc u1D7FC 2.23 (Sans Mono) +U+1d7fd u1D7FD 2.23 (Sans Mono) +U+1d7fe u1D7FE 2.23 (Sans Mono) +U+1d7ff u1D7FF 2.23 (Sans Mono) +U+1f030 u1F030 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f031 u1F031 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f032 u1F032 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f033 u1F033 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f034 u1F034 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f035 u1F035 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f036 u1F036 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f037 u1F037 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f038 u1F038 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f039 u1F039 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f03a u1F03A 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f03b u1F03B 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f03c u1F03C 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f03d u1F03D 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f03e u1F03E 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f03f u1F03F 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f040 u1F040 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f041 u1F041 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f042 u1F042 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f043 u1F043 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f044 u1F044 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f045 u1F045 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f046 u1F046 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f047 u1F047 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f048 u1F048 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f049 u1F049 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f04a u1F04A 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f04b u1F04B 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f04c u1F04C 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f04d u1F04D 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f04e u1F04E 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f04f u1F04F 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f050 u1F050 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f051 u1F051 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f052 u1F052 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f053 u1F053 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f054 u1F054 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f055 u1F055 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f056 u1F056 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f057 u1F057 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f058 u1F058 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f059 u1F059 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f05a u1F05A 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f05b u1F05B 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f05c u1F05C 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f05d u1F05D 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f05e u1F05E 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f05f u1F05F 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f060 u1F060 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f061 u1F061 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f062 u1F062 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f063 u1F063 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f064 u1F064 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f065 u1F065 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f066 u1F066 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f067 u1F067 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f068 u1F068 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f069 u1F069 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f06a u1F06A 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f06b u1F06B 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f06c u1F06C 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f06d u1F06D 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f06e u1F06E 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f06f u1F06F 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f070 u1F070 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f071 u1F071 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f072 u1F072 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f073 u1F073 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f074 u1F074 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f075 u1F075 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f076 u1F076 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f077 u1F077 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f078 u1F078 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f079 u1F079 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f07a u1F07A 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f07b u1F07B 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f07c u1F07C 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f07d u1F07D 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f07e u1F07E 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f07f u1F07F 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f080 u1F080 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f081 u1F081 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f082 u1F082 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f083 u1F083 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f084 u1F084 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f085 u1F085 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f086 u1F086 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f087 u1F087 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f088 u1F088 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f089 u1F089 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f08a u1F08A 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f08b u1F08B 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f08c u1F08C 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f08d u1F08D 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f08e u1F08E 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f08f u1F08F 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f090 u1F090 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f091 u1F091 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f092 u1F092 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f093 u1F093 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) + --- /dev/null +++ b/tcpdf/fonts/dejavu-fonts-ttf-2.32/unicover.txt @@ -1,1 +1,204 @@ +This is the Unicode coverage file for DejaVu fonts +($Id$) +Control and similar characters are discounted from totals. + + Sans Serif Sans Mono +U+0000 Basic Latin 100% (95/95) 100% (95/95) 100% (95/95) +U+0080 Latin-1 Supplement 100% (96/96) 100% (96/96) 100% (96/96) +U+0100 Latin Extended-A 100% (128/128) 100% (128/128) 100% (128/128) +U+0180 Latin Extended-B 100% (208/208) 99% (207/208) 86% (179/208) +U+0250 IPA Extensions 100% (96/96) 100% (96/96) 100% (96/96) +U+02b0 Spacing Modifier Letters 78% (63/80) 57% (46/80) 60% (48/80) +U+0300 Combining Diacritical Marks 83% (93/112) 60% (68/112) 59% (67/112) +U+0370 Greek and Coptic 100% (134/134) 85% (115/134) 82% (110/134) +U+0400 Cyrillic 100% (256/256) 78% (200/256) 70% (180/256) +U+0500 Cyrillic Supplement 94% (36/38) 26% (10/38) 15% (6/38) +U+0530 Armenian 100% (86/86) (0/86) (0/86) +U+0590 Hebrew 62% (54/87) (0/87) (0/87) +U+0600 Arabic 64% (161/250) (0/250) 39% (99/250) +U+0700 Syriac (0/77) (0/77) (0/77) +U+0750 Arabic Supplement (0/48) (0/48) (0/48) +U+0780 Thaana (0/50) (0/50) (0/50) +U+07c0 NKo 91% (54/59) (0/59) (0/59) +U+0800 Samaritan (0/61) (0/61) (0/61) +U+0900 Devanagari (0/117) (0/117) (0/117) +U+0980 Bengali (0/92) (0/92) (0/92) +U+0a00 Gurmukhi (0/79) (0/79) (0/79) +U+0a80 Gujarati (0/83) (0/83) (0/83) +U+0b00 Oriya (0/84) (0/84) (0/84) +U+0b80 Tamil (0/72) (0/72) (0/72) +U+0c00 Telugu (0/93) (0/93) (0/93) +U+0c80 Kannada (0/86) (0/86) (0/86) +U+0d00 Malayalam (0/95) (0/95) (0/95) +U+0d80 Sinhala (0/80) (0/80) (0/80) +U+0e00 Thai 1% (1/87) (0/87) (0/87) +U+0e80 Lao 100% (65/65) (0/65) 70% (46/65) +U+0f00 Tibetan (0/205) (0/205) (0/205) +U+1000 Myanmar (0/160) (0/160) (0/160) +U+10a0 Georgian 100% (83/83) 100% (83/83) 54% (45/83) +U+1100 Hangul Jamo (0/256) (0/256) (0/256) +U+1200 Ethiopic (0/356) (0/356) (0/356) +U+1380 Ethiopic Supplement (0/26) (0/26) (0/26) +U+13a0 Cherokee (0/85) (0/85) (0/85) +U+1400 Unified Canadian Aboriginal Syllabics 63% (404/640) (0/640) (0/640) +U+1680 Ogham 100% (29/29) (0/29) (0/29) +U+16a0 Runic (0/81) (0/81) (0/81) +U+1700 Tagalog (0/20) (0/20) (0/20) +U+1720 Hanunoo (0/23) (0/23) (0/23) +U+1740 Buhid (0/20) (0/20) (0/20) +U+1760 Tagbanwa (0/18) (0/18) (0/18) +U+1780 Khmer (0/114) (0/114) (0/114) +U+1800 Mongolian (0/156) (0/156) (0/156) +U+18b0 Unified Canadian Aboriginal Syllabics Extended (0/70) (0/70) (0/70) +U+1900 Limbu (0/66) (0/66) (0/66) +U+1950 Tai Le (0/35) (0/35) (0/35) +U+1980 New Tai Lue (0/83) (0/83) (0/83) +U+19e0 Khmer Symbols (0/32) (0/32) (0/32) +U+1a00 Buginese (0/30) (0/30) (0/30) +U+1a20 Tai Tham (0/127) (0/127) (0/127) +U+1b00 Balinese (0/121) (0/121) (0/121) +U+1b80 Sundanese (0/55) (0/55) (0/55) +U+1c00 Lepcha (0/74) (0/74) (0/74) +U+1c50 Ol Chiki (0/48) (0/48) (0/48) +U+1cd0 Vedic Extensions (0/35) (0/35) (0/35) +U+1d00 Phonetic Extensions 82% (106/128) 48% (62/128) 48% (62/128) +U+1d80 Phonetic Extensions Supplement 59% (38/64) 57% (37/64) 57% (37/64) +U+1dc0 Combining Diacritical Marks Supplement 14% (6/42) 14% (6/42) (0/42) +U+1e00 Latin Extended Additional 98% (252/256) 96% (248/256) 71% (182/256) +U+1f00 Greek Extended 100% (233/233) 100% (233/233) 100% (233/233) +U+2000 General Punctuation 100% (107/107) 81% (87/107) 47% (51/107) +U+2070 Superscripts and Subscripts 100% (34/34) 100% (34/34) 100% (34/34) +U+20a0 Currency Symbols 92% (23/25) 24% (6/25) 92% (23/25) +U+20d0 Combining Diacritical Marks for Symbols 21% (7/33) (0/33) (0/33) +U+2100 Letterlike Symbols 93% (75/80) 40% (32/80) 21% (17/80) +U+2150 Number Forms 94% (55/58) 94% (55/58) 22% (13/58) +U+2190 Arrows 100% (112/112) 100% (112/112) 100% (112/112) +U+2200 Mathematical Operators 100% (256/256) 39% (100/256) 62% (159/256) +U+2300 Miscellaneous Technical 27% (65/233) 15% (35/233) 50% (117/233) +U+2400 Control Pictures 5% (2/39) 2% (1/39) 2% (1/39) +U+2440 Optical Character Recognition (0/11) (0/11) (0/11) +U+2460 Enclosed Alphanumerics 6% (10/160) (0/160) (0/160) +U+2500 Box Drawing 100% (128/128) 100% (128/128) 100% (128/128) +U+2580 Block Elements 100% (32/32) 100% (32/32) 100% (32/32) +U+25a0 Geometric Shapes 100% (96/96) 100% (96/96) 100% (96/96) +U+2600 Miscellaneous Symbols 74% (186/250) 12% (30/250) 59% (149/250) +U+2700 Dingbats 99% (174/175) 0% (1/175) 82% (144/175) +U+27c0 Miscellaneous Mathematical Symbols-A 20% (9/44) 11% (5/44) 11% (5/44) +U+27f0 Supplemental Arrows-A 100% (16/16) 100% (16/16) (0/16) +U+2800 Braille Patterns 100% (256/256) 100% (256/256) (0/256) +U+2900 Supplemental Arrows-B 4% (6/128) 100% (128/128) (0/128) +U+2980 Miscellaneous Mathematical Symbols-B 10% (13/128) 0% (1/128) 2% (3/128) +U+2a00 Supplemental Mathematical Operators 28% (72/256) 1% (4/256) 0% (1/256) +U+2b00 Miscellaneous Symbols and Arrows 40% (35/87) 31% (27/87) 10% (9/87) +U+2c00 Glagolitic (0/94) (0/94) (0/94) +U+2c60 Latin Extended-C 96% (31/32) 71% (23/32) 43% (14/32) +U+2c80 Coptic (0/121) (0/121) (0/121) +U+2d00 Georgian Supplement (0/38) 100% (38/38) (0/38) +U+2d30 Tifinagh 100% (55/55) (0/55) (0/55) +U+2d80 Ethiopic Extended (0/79) (0/79) (0/79) +U+2de0 Cyrillic Extended-A (0/32) (0/32) (0/32) +U+2e00 Supplemental Punctuation 12% (6/50) 12% (6/50) 12% (6/50) +U+2e80 CJK Radicals Supplement (0/115) (0/115) (0/115) +U+2f00 Kangxi Radicals (0/214) (0/214) (0/214) +U+2ff0 Ideographic Description Characters (0/12) (0/12) (0/12) +U+3000 CJK Symbols and Punctuation (0/64) (0/64) (0/64) +U+3040 Hiragana (0/93) (0/93) (0/93) +U+30a0 Katakana (0/96) (0/96) (0/96) +U+3100 Bopomofo (0/41) (0/41) (0/41) +U+3130 Hangul Compatibility Jamo (0/94) (0/94) (0/94) +U+3190 Kanbun (0/16) (0/16) (0/16) +U+31a0 Bopomofo Extended (0/24) (0/24) (0/24) +U+31c0 CJK Strokes (0/36) (0/36) (0/36) +U+31f0 Katakana Phonetic Extensions (0/16) (0/16) (0/16) +U+3200 Enclosed CJK Letters and Months (0/254) (0/254) (0/254) +U+3300 CJK Compatibility (0/256) (0/256) (0/256) +U+3400 CJK Unified Ideographs Extension A (0/0) (0/0) (0/0) +U+4dc0 Yijing Hexagram Symbols 100% (64/64) (0/64) (0/64) +U+4e00 CJK Unified Ideographs (0/0) (0/0) (0/0) +U+a000 Yi Syllables (0/1165) (0/1165) (0/1165) +U+a490 Yi Radicals (0/55) (0/55) (0/55) +U+a4d0 Lisu (0/48) (0/48) (0/48) +U+a500 Vai (0/300) (0/300) (0/300) +U+a640 Cyrillic Extended-B 39% (31/78) 12% (10/78) (0/78) +U+a6a0 Bamum (0/88) (0/88) (0/88) +U+a700 Modifier Tone Letters 62% (20/32) 62% (20/32) 62% (20/32) +U+a720 Latin Extended-D 50% (57/114) 2% (3/114) 8% (10/114) +U+a800 Syloti Nagri (0/44) (0/44) (0/44) +U+a830 Common Indic Number Forms (0/10) (0/10) (0/10) +U+a840 Phags-pa (0/56) (0/56) (0/56) +U+a880 Saurashtra (0/81) (0/81) (0/81) +U+a8e0 Devanagari Extended (0/28) (0/28) (0/28) +U+a900 Kayah Li (0/48) (0/48) (0/48) +U+a930 Rejang (0/37) (0/37) (0/37) +U+a960 Hangul Jamo Extended-A (0/29) (0/29) (0/29) +U+a980 Javanese (0/91) (0/91) (0/91) +U+aa00 Cham (0/83) (0/83) (0/83) +U+aa60 Myanmar Extended-A (0/28) (0/28) (0/28) +U+aa80 Tai Viet (0/72) (0/72) (0/72) +U+abc0 Meetei Mayek (0/56) (0/56) (0/56) +U+ac00 Hangul Syllables (0/0) (0/0) (0/0) +U+d7b0 Hangul Jamo Extended-B (0/72) (0/72) (0/72) +U+d800 High Surrogates (0/0) (0/0) (0/0) +U+db80 High Private Use Surrogates (0/0) (0/0) (0/0) +U+dc00 Low Surrogates (0/0) (0/0) (0/0) +U+e000 Private Use Area (0/0) (0/0) (0/0) +U+f900 CJK Compatibility Ideographs (0/470) (0/470) (0/470) +U+fb00 Alphabetic Presentation Forms 100% (58/58) 12% (7/58) 3% (2/58) +U+fb50 Arabic Presentation Forms-A 16% (98/595) (0/595) 12% (72/595) +U+fe00 Variation Selectors 100% (16/16) 100% (16/16) (0/16) +U+fe10 Vertical Forms (0/10) (0/10) (0/10) +U+fe20 Combining Half Marks 57% (4/7) (0/7) (0/7) +U+fe30 CJK Compatibility Forms (0/32) (0/32) (0/32) +U+fe50 Small Form Variants (0/26) (0/26) (0/26) +U+fe70 Arabic Presentation Forms-B 100% (141/141) (0/141) 100% (141/141) +U+ff00 Halfwidth and Fullwidth Forms (0/225) (0/225) (0/225) +U+fff0 Specials 100% (5/5) 100% (5/5) 100% (5/5) +U+10000 Linear B Syllabary (0/88) (0/88) (0/88) +U+10080 Linear B Ideograms (0/123) (0/123) (0/123) +U+10100 Aegean Numbers (0/57) (0/57) (0/57) +U+10140 Ancient Greek Numbers (0/75) (0/75) (0/75) +U+10190 Ancient Symbols (0/12) (0/12) (0/12) +U+101d0 Phaistos Disc (0/46) (0/46) (0/46) +U+10280 Lycian (0/29) (0/29) (0/29) +U+102a0 Carian (0/49) (0/49) (0/49) +U+10300 Old Italic (0/35) (0/35) (0/35) +U+10330 Gothic (0/27) (0/27) (0/27) +U+10380 Ugaritic (0/31) (0/31) (0/31) +U+103a0 Old Persian (0/50) (0/50) (0/50) +U+10400 Deseret (0/80) (0/80) (0/80) +U+10450 Shavian (0/48) (0/48) (0/48) +U+10480 Osmanya (0/40) (0/40) (0/40) +U+10800 Cypriot Syllabary (0/55) (0/55) (0/55) +U+10840 Imperial Aramaic (0/31) (0/31) (0/31) +U+10900 Phoenician (0/29) (0/29) (0/29) +U+10920 Lydian (0/27) (0/27) (0/27) +U+10a00 Kharoshthi (0/65) (0/65) (0/65) +U+10a60 Old South Arabian (0/32) (0/32) (0/32) +U+10b00 Avestan (0/61) (0/61) (0/61) +U+10b40 Inscriptional Parthian (0/30) (0/30) (0/30) +U+10b60 Inscriptional Pahlavi (0/27) (0/27) (0/27) +U+10c00 Old Turkic (0/73) (0/73) (0/73) +U+10e60 Rumi Numeral Symbols (0/31) (0/31) (0/31) +U+11080 Kaithi (0/66) (0/66) (0/66) +U+12000 Cuneiform (0/879) (0/879) (0/879) +U+12400 Cuneiform Numbers and Punctuation (0/103) (0/103) (0/103) +U+13000 Egyptian Hieroglyphs (0/1071) (0/1071) (0/1071) +U+1d000 Byzantine Musical Symbols (0/246) (0/246) (0/246) +U+1d100 Musical Symbols (0/220) (0/220) (0/220) +U+1d200 Ancient Greek Musical Notation (0/70) (0/70) (0/70) +U+1d300 Tai Xuan Jing Symbols 100% (87/87) (0/87) (0/87) +U+1d360 Counting Rod Numerals (0/18) (0/18) (0/18) +U+1d400 Mathematical Alphanumeric Symbols 11% (117/996) 5% (55/996) 6% (62/996) +U+1f000 Mahjong Tiles (0/44) (0/44) (0/44) +U+1f030 Domino Tiles 100% (100/100) (0/100) (0/100) +U+1f100 Enclosed Alphanumeric Supplement (0/63) (0/63) (0/63) +U+1f200 Enclosed Ideographic Supplement (0/44) (0/44) (0/44) +U+20000 CJK Unified Ideographs Extension B (0/0) (0/0) (0/0) +U+2a700 CJK Unified Ideographs Extension C (0/0) (0/0) (0/0) +U+2f800 CJK Compatibility Ideographs Supplement (0/542) (0/542) (0/542) +U+e0000 Tags (0/98) (0/98) (0/98) +U+e0100 Variation Selectors Supplement (0/240) (0/240) (0/240) +U+f0000 Supplementary Private Use Area-A (0/0) (0/0) (0/0) +U+100000 Supplementary Private Use Area-B (0/0) (0/0) (0/0) + --- /dev/null +++ b/tcpdf/fonts/dejavusans.php @@ -1,1 +1,531 @@ - +928,'Descent'=>-236,'CapHeight'=>30,'Flags'=>96,'FontBBox'=>'[-1021 -415 1681 1167]','ItalicAngle'=>20.8,'StemV'=>70,'MissingWidth'=>600); +$up=-63; +$ut=44; +$dw=600; +$cw=array( +0=>600,32=>318,33=>401,34=>460,35=>838,36=>636,37=>950,38=>780,39=>275,40=>390, +41=>390,42=>500,43=>838,44=>318,45=>361,46=>318,47=>337,48=>636,49=>636,50=>636, +51=>636,52=>636,53=>636,54=>636,55=>636,56=>636,57=>636,58=>337,59=>337,60=>838, +61=>838,62=>838,63=>531,64=>1000,65=>684,66=>686,67=>698,68=>770,69=>632,70=>575, +71=>775,72=>752,73=>295,74=>295,75=>656,76=>557,77=>863,78=>748,79=>787,80=>603, +81=>787,82=>695,83=>635,84=>611,85=>732,86=>684,87=>989,88=>685,89=>611,90=>685, +91=>390,92=>337,93=>390,94=>838,95=>500,96=>500,97=>613,98=>635,99=>550,100=>635, +101=>615,102=>352,103=>635,104=>634,105=>278,106=>278,107=>579,108=>278,109=>974,110=>634, +111=>612,112=>635,113=>635,114=>411,115=>521,116=>392,117=>634,118=>592,119=>818,120=>592, +121=>592,122=>525,123=>636,124=>337,125=>636,126=>838,8364=>636,8218=>318,402=>352,8222=>518, +8230=>1000,8224=>500,8225=>500,710=>500,8240=>1342,352=>635,8249=>400,338=>1070,381=>685,8216=>318, +8217=>318,8220=>518,8221=>518,8226=>590,8211=>500,8212=>1000,732=>500,8482=>1000,353=>521,8250=>400, +339=>1023,382=>525,376=>611,160=>318,161=>401,162=>636,163=>636,164=>636,165=>636,166=>337, +167=>500,168=>500,169=>1000,170=>471,171=>612,172=>838,173=>361,174=>1000,175=>500,176=>500, +177=>838,178=>401,179=>401,180=>500,181=>636,182=>636,183=>318,184=>500,185=>401,186=>471, +187=>612,188=>969,189=>969,190=>969,191=>531,192=>684,193=>684,194=>684,195=>684,196=>684, +197=>684,198=>974,199=>698,200=>632,201=>632,202=>632,203=>632,204=>295,205=>295,206=>295, +207=>295,208=>775,209=>748,210=>787,211=>787,212=>787,213=>787,214=>787,215=>838,216=>787, +217=>732,218=>732,219=>732,220=>732,221=>611,222=>605,223=>630,224=>613,225=>613,226=>613, +227=>613,228=>613,229=>613,230=>982,231=>550,232=>615,233=>615,234=>615,235=>615,236=>278, +237=>278,238=>278,239=>278,240=>612,241=>634,242=>612,243=>612,244=>612,245=>612,246=>612, +247=>838,248=>612,249=>634,250=>634,251=>634,252=>634,253=>592,254=>635,255=>592,256=>684, +257=>613,258=>684,259=>613,260=>684,261=>613,262=>698,263=>550,264=>698,265=>550,266=>698, +267=>550,268=>698,269=>550,270=>770,271=>635,272=>775,273=>635,274=>632,275=>615,276=>632, +277=>615,278=>632,279=>615,280=>632,281=>615,282=>632,283=>615,284=>775,285=>635,286=>775, +287=>635,288=>775,289=>635,290=>775,291=>635,292=>752,293=>634,294=>916,295=>695,296=>295, +297=>278,298=>295,299=>278,300=>295,301=>278,302=>295,303=>278,304=>295,305=>278,306=>590, +307=>556,308=>295,309=>278,310=>656,311=>579,312=>579,313=>557,314=>278,315=>557,316=>278, +317=>557,318=>375,319=>557,320=>342,321=>562,322=>284,323=>748,324=>634,325=>748,326=>634, +327=>748,328=>634,329=>813,330=>748,331=>634,332=>787,333=>612,334=>787,335=>612,336=>787, +337=>612,340=>695,341=>411,342=>695,343=>411,344=>695,345=>411,346=>635,347=>521,348=>635, +349=>521,350=>635,351=>521,354=>611,355=>392,356=>611,357=>392,358=>611,359=>392,360=>732, +361=>634,362=>732,363=>634,364=>732,365=>634,366=>732,367=>634,368=>732,369=>634,370=>732, +371=>634,372=>989,373=>818,374=>611,375=>592,377=>685,378=>525,379=>685,380=>525,383=>352, +384=>635,385=>735,386=>686,387=>635,388=>686,389=>635,390=>703,391=>698,392=>550,393=>775, +394=>819,395=>686,396=>635,397=>612,398=>632,399=>787,400=>614,401=>575,403=>775,404=>687, +405=>984,406=>354,407=>295,408=>746,409=>579,410=>278,411=>592,412=>974,413=>748,414=>634, +415=>787,416=>913,417=>612,418=>949,419=>759,420=>652,421=>635,422=>695,423=>635,424=>521, +425=>632,426=>336,427=>392,428=>611,429=>392,430=>611,431=>858,432=>634,433=>764,434=>721, +435=>744,436=>730,437=>685,438=>525,439=>666,440=>666,441=>578,442=>525,443=>636,444=>666, +445=>578,446=>510,447=>635,448=>295,449=>492,450=>459,451=>295,452=>1422,453=>1299,454=>1154, +455=>835,456=>787,457=>457,458=>931,459=>924,460=>797,461=>684,462=>613,463=>295,464=>278, +465=>787,466=>612,467=>732,468=>634,469=>732,470=>634,471=>732,472=>634,473=>732,474=>634, +475=>732,476=>634,477=>615,478=>684,479=>613,480=>684,481=>613,482=>974,483=>982,484=>775, +485=>635,486=>775,487=>635,488=>656,489=>579,490=>787,491=>612,492=>787,493=>612,494=>666, +495=>578,496=>278,497=>1422,498=>1299,499=>1154,500=>775,501=>635,502=>1113,503=>682,504=>748, +505=>634,506=>684,507=>613,508=>974,509=>982,510=>787,511=>612,512=>684,513=>613,514=>684, +515=>613,516=>632,517=>615,518=>632,519=>615,520=>295,521=>278,522=>295,523=>278,524=>787, +525=>612,526=>787,527=>612,528=>695,529=>411,530=>695,531=>411,532=>732,533=>634,534=>732, +535=>634,536=>635,537=>521,538=>611,539=>392,540=>627,541=>521,542=>752,543=>634,544=>735, +545=>838,546=>698,547=>610,548=>685,549=>525,550=>684,551=>613,552=>632,553=>615,554=>787, +555=>612,556=>787,557=>612,558=>787,559=>612,560=>787,561=>612,562=>611,563=>592,564=>475, +565=>843,566=>477,567=>278,568=>998,569=>998,570=>684,571=>698,572=>550,573=>557,574=>611, +575=>521,576=>525,577=>603,578=>479,579=>686,580=>732,581=>684,582=>632,583=>615,584=>295, +585=>278,586=>781,587=>635,588=>695,589=>411,590=>611,591=>592,592=>600,593=>635,594=>635, +595=>635,596=>549,597=>550,598=>635,599=>696,600=>615,601=>615,602=>819,603=>541,604=>532, +605=>775,606=>664,607=>278,608=>696,609=>635,610=>629,611=>596,612=>596,613=>634,614=>634, +615=>634,616=>278,617=>338,618=>372,619=>396,620=>487,621=>278,622=>706,623=>974,624=>974, +625=>974,626=>646,627=>642,628=>634,629=>612,630=>858,631=>728,632=>660,633=>414,634=>414, +635=>414,636=>411,637=>411,638=>530,639=>530,640=>604,641=>604,642=>521,643=>336,644=>336, +645=>461,646=>336,647=>392,648=>392,649=>634,650=>618,651=>598,652=>592,653=>818,654=>592, +655=>611,656=>525,657=>525,658=>578,659=>578,660=>510,661=>510,662=>510,663=>510,664=>787, +665=>580,666=>664,667=>708,668=>654,669=>292,670=>667,671=>507,672=>727,673=>510,674=>510, +675=>1014,676=>1058,677=>1013,678=>824,679=>610,680=>778,681=>848,682=>641,683=>654,684=>515, +685=>515,686=>661,687=>664,688=>404,689=>399,690=>175,691=>259,692=>295,693=>296,694=>379, +695=>515,696=>373,697=>278,698=>460,699=>318,700=>318,701=>318,702=>307,703=>307,704=>370, +705=>370,706=>500,707=>500,708=>500,709=>500,711=>500,712=>275,713=>500,714=>500,715=>500, +716=>275,717=>500,718=>500,719=>500,720=>337,721=>337,722=>307,723=>307,724=>500,725=>500, +726=>390,727=>317,728=>500,729=>500,730=>500,731=>500,733=>500,734=>315,735=>500,736=>426, +737=>166,738=>373,739=>444,740=>370,741=>493,742=>493,743=>493,744=>493,745=>493,748=>500, +749=>500,750=>518,755=>500,759=>500,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0, +774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0, +784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0, +794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0, +804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0, +814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0, +824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,832=>0,833=>0, +834=>0,835=>0,836=>0,837=>0,838=>0,839=>0,840=>0,841=>0,842=>0,843=>0, +844=>0,845=>0,846=>0,847=>0,849=>0,850=>0,851=>0,855=>0,856=>0,858=>0, +860=>0,861=>0,862=>0,863=>0,864=>0,865=>0,866=>0,880=>654,881=>568,882=>862, +883=>647,884=>278,885=>278,886=>748,887=>650,890=>500,891=>549,892=>550,893=>549,894=>337, +900=>500,901=>500,902=>692,903=>318,904=>746,905=>871,906=>408,908=>813,910=>825,911=>826, +912=>338,913=>684,914=>686,915=>557,916=>684,917=>632,918=>685,919=>752,920=>787,921=>295, +922=>656,923=>684,924=>863,925=>748,926=>632,927=>787,928=>752,929=>603,931=>632,932=>611, +933=>611,934=>787,935=>685,936=>787,937=>764,938=>295,939=>611,940=>659,941=>541,942=>634, +943=>338,944=>579,945=>659,946=>638,947=>592,948=>612,949=>541,950=>544,951=>634,952=>612, +953=>338,954=>589,955=>592,956=>636,957=>559,958=>558,959=>612,960=>602,961=>635,962=>587, +963=>634,964=>602,965=>579,966=>660,967=>578,968=>660,969=>837,970=>338,971=>579,972=>612, +973=>579,974=>837,975=>656,976=>614,977=>619,978=>699,979=>842,980=>699,981=>660,982=>837, +983=>664,984=>787,985=>612,986=>648,987=>587,988=>575,989=>458,990=>660,991=>660,992=>865, +993=>627,994=>934,995=>837,996=>758,997=>659,998=>792,999=>615,1000=>687,1001=>607,1002=>768, +1003=>625,1004=>699,1005=>612,1006=>611,1007=>536,1008=>664,1009=>635,1010=>550,1011=>278,1012=>787, +1013=>615,1014=>615,1015=>605,1016=>635,1017=>698,1018=>863,1019=>651,1020=>635,1021=>703,1022=>698, +1023=>703,1024=>632,1025=>632,1026=>786,1027=>610,1028=>698,1029=>635,1030=>295,1031=>295,1032=>295, +1033=>1094,1034=>1045,1035=>786,1036=>710,1037=>748,1038=>609,1039=>752,1040=>684,1041=>686,1042=>686, +1043=>610,1044=>781,1045=>632,1046=>1077,1047=>641,1048=>748,1049=>748,1050=>710,1051=>752,1052=>863, +1053=>752,1054=>787,1055=>752,1056=>603,1057=>698,1058=>611,1059=>609,1060=>861,1061=>685,1062=>776, +1063=>686,1064=>1069,1065=>1094,1066=>833,1067=>882,1068=>686,1069=>698,1070=>1080,1071=>695,1072=>613, +1073=>617,1074=>589,1075=>525,1076=>691,1077=>615,1078=>901,1079=>532,1080=>650,1081=>650,1082=>604, +1083=>639,1084=>754,1085=>654,1086=>612,1087=>654,1088=>635,1089=>550,1090=>583,1091=>592,1092=>855, +1093=>592,1094=>681,1095=>591,1096=>915,1097=>942,1098=>707,1099=>790,1100=>589,1101=>549,1102=>842, +1103=>602,1104=>615,1105=>615,1106=>625,1107=>525,1108=>549,1109=>521,1110=>278,1111=>278,1112=>278, +1113=>902,1114=>898,1115=>652,1116=>604,1117=>650,1118=>592,1119=>654,1120=>934,1121=>837,1122=>771, +1123=>672,1124=>942,1125=>749,1126=>879,1127=>783,1128=>1160,1129=>1001,1130=>787,1131=>612,1132=>1027, +1133=>824,1134=>636,1135=>541,1136=>856,1137=>876,1138=>787,1139=>612,1140=>781,1141=>665,1142=>781, +1143=>665,1144=>992,1145=>904,1146=>953,1147=>758,1148=>1180,1149=>1028,1150=>934,1151=>837,1152=>698, +1153=>550,1154=>502,1155=>0,1156=>0,1157=>0,1158=>0,1159=>0,1160=>418,1161=>418,1162=>772, +1163=>677,1164=>686,1165=>589,1166=>603,1167=>635,1168=>610,1169=>525,1170=>675,1171=>590,1172=>624, +1173=>530,1174=>1077,1175=>901,1176=>641,1177=>532,1178=>710,1179=>604,1180=>710,1181=>604,1182=>710, +1183=>604,1184=>856,1185=>832,1186=>752,1187=>661,1188=>1014,1189=>877,1190=>1081,1191=>916,1192=>878, +1193=>693,1194=>698,1195=>550,1196=>611,1197=>583,1198=>611,1199=>592,1200=>611,1201=>592,1202=>685, +1203=>592,1204=>934,1205=>807,1206=>686,1207=>591,1208=>686,1209=>591,1210=>686,1211=>634,1212=>941, +1213=>728,1214=>941,1215=>728,1216=>295,1217=>1077,1218=>901,1219=>656,1220=>604,1221=>776,1222=>670, +1223=>752,1224=>661,1225=>776,1226=>681,1227=>686,1228=>591,1229=>888,1230=>774,1231=>278,1232=>684, +1233=>613,1234=>684,1235=>613,1236=>974,1237=>982,1238=>632,1239=>615,1240=>787,1241=>615,1242=>787, +1243=>615,1244=>1077,1245=>901,1246=>641,1247=>532,1248=>666,1249=>578,1250=>748,1251=>650,1252=>748, +1253=>650,1254=>787,1255=>612,1256=>787,1257=>612,1258=>787,1259=>612,1260=>698,1261=>549,1262=>609, +1263=>592,1264=>609,1265=>592,1266=>609,1267=>592,1268=>686,1269=>591,1270=>610,1271=>525,1272=>882, +1273=>790,1274=>675,1275=>590,1276=>685,1277=>592,1278=>685,1279=>592,1280=>686,1281=>589,1282=>1006, +1283=>897,1284=>975,1285=>869,1286=>679,1287=>588,1288=>1072,1289=>957,1290=>1113,1291=>967,1292=>775, +1293=>660,1294=>773,1295=>711,1296=>614,1297=>541,1298=>752,1299=>639,1300=>1169,1301=>994,1302=>894, +1303=>864,1304=>1032,1305=>986,1306=>787,1307=>635,1308=>989,1309=>818,1312=>1081,1313=>905,1314=>1081, +1315=>912,1316=>793,1317=>683,1329=>867,1330=>732,1331=>882,1332=>882,1333=>732,1334=>644,1335=>682, +1336=>732,1337=>851,1338=>882,1339=>732,1340=>557,1341=>824,1342=>986,1343=>732,1344=>707,1345=>644, +1346=>882,1347=>777,1348=>882,1349=>732,1350=>840,1351=>732,1352=>732,1353=>732,1354=>791,1355=>644, +1356=>882,1357=>732,1358=>882,1359=>635,1360=>732,1361=>732,1362=>799,1363=>787,1364=>790,1365=>787, +1366=>635,1369=>307,1370=>318,1371=>500,1372=>500,1373=>392,1374=>526,1375=>500,1377=>974,1378=>634, +1379=>762,1380=>767,1381=>634,1382=>697,1383=>533,1384=>634,1385=>700,1386=>697,1387=>634,1388=>404, +1389=>894,1390=>641,1391=>634,1392=>634,1393=>635,1394=>702,1395=>634,1396=>659,1397=>278,1398=>760, +1399=>516,1400=>634,1401=>453,1402=>974,1403=>516,1404=>769,1405=>634,1406=>696,1407=>974,1408=>634, +1409=>635,1410=>501,1411=>974,1412=>648,1413=>612,1414=>629,1415=>763,1417=>337,1418=>433,1456=>0, +1457=>0,1458=>0,1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1466=>0, +1467=>0,1468=>0,1469=>0,1470=>361,1471=>0,1472=>295,1473=>0,1474=>0,1475=>295,1478=>441, +1479=>0,1488=>629,1489=>608,1490=>448,1491=>594,1492=>640,1493=>272,1494=>374,1495=>640,1496=>648, +1497=>272,1498=>592,1499=>556,1500=>599,1501=>640,1502=>659,1503=>272,1504=>441,1505=>700,1506=>563, +1507=>640,1508=>604,1509=>521,1510=>581,1511=>663,1512=>592,1513=>808,1514=>657,1520=>471,1521=>454, +1522=>471,1523=>416,1524=>645,1542=>637,1543=>637,1545=>757,1546=>977,1548=>323,1557=>0,1563=>318, +1567=>531,1569=>470,1570=>278,1571=>278,1572=>483,1573=>278,1574=>783,1575=>278,1576=>941,1577=>524, +1578=>941,1579=>941,1580=>646,1581=>646,1582=>646,1583=>445,1584=>445,1585=>483,1586=>483,1587=>1221, +1588=>1221,1589=>1209,1590=>1209,1591=>925,1592=>925,1593=>597,1594=>597,1600=>293,1601=>1037,1602=>776, +1603=>824,1604=>727,1605=>619,1606=>734,1607=>524,1608=>483,1609=>783,1610=>783,1611=>0,1612=>0, +1613=>0,1614=>0,1615=>0,1616=>0,1617=>0,1618=>0,1619=>0,1620=>0,1621=>0,1623=>0, +1626=>500,1632=>537,1633=>537,1634=>537,1635=>537,1636=>537,1637=>537,1638=>537,1639=>537,1640=>537, +1641=>537,1642=>537,1643=>325,1644=>318,1645=>545,1646=>941,1647=>776,1648=>0,1652=>292,1657=>941, +1658=>941,1659=>941,1660=>941,1661=>941,1662=>941,1663=>941,1664=>941,1665=>646,1666=>646,1667=>646, +1668=>646,1669=>646,1670=>646,1671=>646,1672=>445,1673=>445,1674=>445,1675=>445,1676=>445,1677=>445, +1678=>445,1679=>445,1680=>445,1681=>483,1682=>483,1683=>498,1684=>530,1685=>610,1686=>530,1687=>483, +1688=>483,1689=>483,1690=>1221,1691=>1221,1692=>1221,1693=>1209,1694=>1209,1695=>925,1696=>597,1697=>1037, +1698=>1037,1699=>1037,1700=>1037,1701=>1037,1702=>1037,1703=>776,1704=>776,1705=>895,1706=>1054,1707=>895, +1708=>824,1709=>824,1710=>824,1711=>895,1712=>895,1713=>895,1714=>895,1715=>895,1716=>895,1717=>727, +1718=>727,1719=>727,1720=>727,1721=>734,1722=>734,1723=>734,1724=>734,1725=>734,1726=>698,1727=>646, +1734=>483,1740=>783,1742=>783,1749=>524,1776=>537,1777=>537,1778=>537,1779=>537,1780=>537,1781=>537, +1782=>537,1783=>537,1784=>537,1785=>537,1984=>636,1985=>636,1986=>636,1987=>636,1988=>636,1989=>636, +1990=>636,1991=>636,1992=>636,1993=>636,1994=>278,1995=>571,1996=>424,1997=>592,1998=>654,1999=>654, +2000=>594,2001=>654,2002=>829,2003=>438,2004=>438,2005=>559,2006=>612,2007=>350,2008=>959,2009=>473, +2010=>783,2011=>654,2012=>625,2013=>734,2014=>530,2015=>724,2016=>473,2017=>625,2018=>594,2019=>530, +2020=>530,2021=>522,2022=>594,2023=>594,2027=>0,2028=>0,2029=>0,2030=>0,2031=>0,2032=>0, +2033=>0,2034=>0,2035=>0,2036=>313,2037=>313,2040=>560,2041=>560,2042=>361,3647=>636,3713=>670, +3714=>684,3716=>688,3719=>482,3720=>628,3722=>684,3725=>688,3732=>669,3733=>642,3734=>645,3735=>655, +3737=>659,3738=>625,3739=>625,3740=>745,3741=>767,3742=>687,3743=>687,3745=>702,3746=>688,3747=>684, +3749=>649,3751=>632,3754=>703,3755=>819,3757=>633,3758=>684,3759=>788,3760=>632,3761=>0,3762=>539, +3763=>539,3764=>0,3765=>0,3766=>0,3767=>0,3768=>0,3769=>0,3771=>0,3772=>0,3773=>663, +3776=>375,3777=>657,3778=>460,3779=>547,3780=>491,3782=>674,3784=>0,3785=>0,3786=>0,3787=>0, +3788=>0,3789=>0,3792=>636,3793=>641,3794=>641,3795=>670,3796=>625,3797=>625,3798=>703,3799=>670, +3800=>674,3801=>677,3804=>1028,3805=>1028,4256=>840,4257=>690,4258=>642,4259=>759,4260=>591,4261=>686, +4262=>789,4263=>811,4264=>467,4265=>565,4266=>789,4267=>793,4268=>584,4269=>837,4270=>750,4271=>688, +4272=>811,4273=>584,4274=>584,4275=>837,4276=>837,4277=>646,4278=>604,4279=>584,4280=>596,4281=>584, +4282=>721,4283=>795,4284=>584,4285=>566,4286=>584,4287=>669,4288=>799,4289=>542,4290=>664,4291=>542, +4292=>565,4293=>674,4304=>508,4305=>508,4306=>533,4307=>785,4308=>522,4309=>517,4310=>508,4311=>797, +4312=>507,4313=>518,4314=>1058,4315=>522,4316=>523,4317=>783,4318=>518,4319=>523,4320=>792,4321=>523, +4322=>656,4323=>524,4324=>788,4325=>523,4326=>782,4327=>523,4328=>522,4329=>522,4330=>566,4331=>523, +4332=>523,4333=>489,4334=>522,4335=>498,4336=>517,4337=>560,4338=>508,4339=>508,4340=>508,4341=>563, +4342=>824,4343=>595,4344=>522,4345=>554,4346=>553,4347=>586,4348=>304,5121=>684,5122=>684,5123=>684, +5124=>684,5125=>769,5126=>769,5127=>769,5129=>769,5130=>769,5131=>769,5132=>835,5133=>834,5134=>835, +5135=>834,5136=>835,5137=>834,5138=>967,5139=>1007,5140=>967,5141=>1007,5142=>769,5143=>967,5144=>1007, +5145=>967,5146=>1007,5147=>769,5149=>256,5150=>543,5151=>423,5152=>423,5153=>389,5154=>389,5155=>393, +5156=>389,5157=>466,5158=>385,5159=>256,5160=>389,5161=>389,5162=>389,5163=>1090,5164=>909,5165=>953, +5166=>1117,5167=>684,5168=>684,5169=>684,5170=>684,5171=>729,5172=>729,5173=>729,5175=>729,5176=>729, +5177=>729,5178=>835,5179=>684,5180=>835,5181=>834,5182=>835,5183=>834,5184=>967,5185=>1007,5186=>967, +5187=>1007,5188=>967,5189=>1007,5190=>967,5191=>1007,5192=>729,5193=>508,5194=>192,5196=>732,5197=>732, +5198=>732,5199=>732,5200=>730,5201=>730,5202=>730,5204=>730,5205=>730,5206=>730,5207=>921,5208=>889, +5209=>921,5210=>889,5211=>921,5212=>889,5213=>928,5214=>900,5215=>928,5216=>900,5217=>947,5218=>900, +5219=>947,5220=>900,5221=>947,5222=>434,5223=>877,5224=>877,5225=>866,5226=>890,5227=>628,5228=>628, +5229=>628,5230=>628,5231=>628,5232=>628,5233=>628,5234=>628,5235=>628,5236=>860,5237=>771,5238=>815, +5239=>816,5240=>815,5241=>816,5242=>860,5243=>771,5244=>860,5245=>771,5246=>815,5247=>816,5248=>815, +5249=>816,5250=>815,5251=>407,5252=>407,5253=>750,5254=>775,5255=>750,5256=>775,5257=>628,5258=>628, +5259=>628,5260=>628,5261=>628,5262=>628,5263=>628,5264=>628,5265=>628,5266=>860,5267=>771,5268=>815, +5269=>816,5270=>815,5271=>816,5272=>860,5273=>771,5274=>860,5275=>771,5276=>815,5277=>816,5278=>815, +5279=>816,5280=>815,5281=>435,5282=>435,5283=>610,5284=>557,5285=>557,5286=>557,5287=>610,5288=>610, +5289=>610,5290=>557,5291=>557,5292=>749,5293=>769,5294=>746,5295=>764,5296=>746,5297=>764,5298=>749, +5299=>769,5300=>749,5301=>769,5302=>746,5303=>764,5304=>746,5305=>764,5306=>746,5307=>386,5308=>508, +5309=>386,5312=>852,5313=>852,5314=>852,5315=>852,5316=>852,5317=>852,5318=>852,5319=>852,5320=>852, +5321=>1069,5322=>1035,5323=>1059,5324=>852,5325=>1059,5326=>852,5327=>852,5328=>600,5329=>453,5330=>600, +5331=>852,5332=>852,5333=>852,5334=>852,5335=>852,5336=>852,5337=>852,5338=>852,5339=>852,5340=>1069, +5341=>1035,5342=>1059,5343=>1030,5344=>1059,5345=>1030,5346=>1069,5347=>1035,5348=>1069,5349=>1035,5350=>1083, +5351=>1030,5352=>1083,5353=>1030,5354=>600,5356=>729,5357=>603,5358=>603,5359=>603,5360=>603,5361=>603, +5362=>603,5363=>603,5364=>603,5365=>603,5366=>834,5367=>754,5368=>792,5369=>771,5370=>792,5371=>771, +5372=>834,5373=>754,5374=>834,5375=>754,5376=>792,5377=>771,5378=>792,5379=>771,5380=>792,5381=>418, +5382=>420,5383=>418,5392=>712,5393=>712,5394=>712,5395=>892,5396=>892,5397=>892,5398=>892,5399=>910, +5400=>872,5401=>910,5402=>872,5403=>910,5404=>872,5405=>1140,5406=>1100,5407=>1140,5408=>1100,5409=>1140, +5410=>1100,5411=>1140,5412=>1100,5413=>641,5414=>627,5415=>627,5416=>627,5417=>627,5418=>627,5419=>627, +5420=>627,5421=>627,5422=>627,5423=>844,5424=>781,5425=>816,5426=>818,5427=>816,5428=>818,5429=>844, +5430=>781,5431=>844,5432=>781,5433=>816,5434=>818,5435=>816,5436=>818,5437=>816,5438=>418,5440=>389, +5441=>484,5442=>916,5443=>916,5444=>916,5445=>916,5446=>916,5447=>916,5448=>603,5449=>603,5450=>603, +5451=>603,5452=>603,5453=>603,5454=>834,5455=>754,5456=>418,5458=>729,5459=>684,5460=>684,5461=>684, +5462=>684,5463=>726,5464=>726,5465=>726,5466=>726,5467=>924,5468=>1007,5469=>508,5470=>732,5471=>732, +5472=>732,5473=>732,5474=>732,5475=>732,5476=>730,5477=>730,5478=>730,5479=>730,5480=>947,5481=>900, +5482=>508,5492=>831,5493=>831,5494=>831,5495=>831,5496=>831,5497=>831,5498=>831,5499=>563,5500=>752, +5501=>484,5502=>1047,5503=>1047,5504=>1047,5505=>1047,5506=>1047,5507=>1047,5508=>1047,5509=>825,5514=>831, +5515=>831,5516=>831,5517=>831,5518=>1259,5519=>1259,5520=>1259,5521=>1002,5522=>1002,5523=>1259,5524=>1259, +5525=>700,5526=>1073,5536=>852,5537=>852,5538=>852,5539=>852,5540=>852,5541=>852,5542=>600,5543=>643, +5544=>643,5545=>643,5546=>643,5547=>643,5548=>643,5549=>643,5550=>418,5551=>628,5598=>770,5601=>767, +5702=>468,5703=>468,5742=>444,5743=>1047,5744=>1310,5745=>1632,5746=>1632,5747=>1375,5748=>1375,5749=>1632, +5750=>1632,5760=>477,5761=>493,5762=>712,5763=>931,5764=>1150,5765=>1370,5766=>493,5767=>712,5768=>931, +5769=>1150,5770=>1370,5771=>498,5772=>718,5773=>938,5774=>1159,5775=>1379,5776=>493,5777=>712,5778=>930, +5779=>1149,5780=>1370,5781=>498,5782=>752,5783=>789,5784=>1205,5785=>1150,5786=>683,5787=>507,5788=>507, +7424=>592,7425=>717,7426=>982,7427=>586,7428=>550,7429=>605,7430=>605,7431=>491,7432=>541,7433=>278, +7434=>395,7435=>579,7436=>583,7437=>754,7438=>650,7439=>612,7440=>550,7441=>684,7442=>684,7443=>684, +7444=>1023,7446=>612,7447=>612,7448=>524,7449=>602,7450=>602,7451=>583,7452=>574,7453=>737,7454=>948, +7455=>638,7456=>592,7457=>818,7458=>525,7459=>526,7462=>583,7463=>592,7464=>564,7465=>524,7466=>590, +7467=>639,7468=>431,7469=>613,7470=>432,7472=>485,7473=>398,7474=>398,7475=>488,7476=>474,7477=>186, +7478=>186,7479=>413,7480=>351,7481=>543,7482=>471,7483=>471,7484=>496,7485=>439,7486=>380,7487=>438, +7488=>385,7489=>461,7490=>623,7491=>392,7492=>392,7493=>405,7494=>648,7495=>428,7496=>405,7497=>417, +7498=>417,7499=>360,7500=>359,7501=>405,7502=>179,7503=>426,7504=>623,7505=>409,7506=>414,7507=>370, +7508=>414,7509=>414,7510=>428,7511=>295,7512=>405,7513=>470,7514=>623,7515=>417,7517=>402,7518=>373, +7519=>385,7520=>416,7521=>364,7522=>179,7523=>259,7524=>405,7525=>417,7526=>402,7527=>373,7528=>412, +7529=>416,7530=>364,7543=>635,7544=>474,7547=>372,7549=>667,7557=>278,7579=>405,7580=>370,7581=>370, +7582=>414,7583=>360,7584=>296,7585=>233,7586=>405,7587=>405,7588=>261,7589=>250,7590=>261,7591=>261, +7592=>234,7593=>250,7594=>235,7595=>376,7596=>623,7597=>623,7598=>411,7599=>479,7600=>409,7601=>414, +7602=>414,7603=>360,7604=>287,7605=>295,7606=>508,7607=>418,7608=>361,7609=>406,7610=>417,7611=>366, +7612=>437,7613=>366,7614=>392,7615=>414,7620=>0,7621=>0,7622=>0,7623=>0,7624=>0,7625=>0, +7680=>684,7681=>613,7682=>686,7683=>635,7684=>686,7685=>635,7686=>686,7687=>635,7688=>698,7689=>550, +7690=>770,7691=>635,7692=>770,7693=>635,7694=>770,7695=>635,7696=>770,7697=>635,7698=>770,7699=>635, +7700=>632,7701=>615,7702=>632,7703=>615,7704=>632,7705=>615,7706=>632,7707=>615,7708=>632,7709=>615, +7710=>575,7711=>352,7712=>775,7713=>635,7714=>752,7715=>634,7716=>752,7717=>634,7718=>752,7719=>634, +7720=>752,7721=>634,7722=>752,7723=>634,7724=>295,7725=>278,7726=>295,7727=>278,7728=>656,7729=>579, +7730=>656,7731=>579,7732=>656,7733=>579,7734=>557,7735=>288,7736=>557,7737=>288,7738=>557,7739=>278, +7740=>557,7741=>278,7742=>863,7743=>974,7744=>863,7745=>974,7746=>863,7747=>974,7748=>748,7749=>634, +7750=>748,7751=>634,7752=>748,7753=>634,7754=>748,7755=>634,7756=>787,7757=>612,7758=>787,7759=>612, +7760=>787,7761=>612,7762=>787,7763=>612,7764=>603,7765=>635,7766=>603,7767=>635,7768=>695,7769=>411, +7770=>695,7771=>411,7772=>695,7773=>411,7774=>695,7775=>411,7776=>635,7777=>521,7778=>635,7779=>521, +7780=>635,7781=>521,7782=>635,7783=>521,7784=>635,7785=>521,7786=>611,7787=>392,7788=>611,7789=>392, +7790=>611,7791=>392,7792=>611,7793=>392,7794=>732,7795=>634,7796=>732,7797=>634,7798=>732,7799=>634, +7800=>732,7801=>634,7802=>732,7803=>634,7804=>684,7805=>592,7806=>684,7807=>592,7808=>989,7809=>818, +7810=>989,7811=>818,7812=>989,7813=>818,7814=>989,7815=>818,7816=>989,7817=>818,7818=>685,7819=>592, +7820=>685,7821=>592,7822=>611,7823=>592,7824=>685,7825=>525,7826=>685,7827=>525,7828=>685,7829=>525, +7830=>634,7831=>392,7832=>818,7833=>592,7834=>613,7835=>352,7836=>352,7837=>352,7838=>769,7839=>612, +7840=>684,7841=>613,7842=>684,7843=>613,7844=>684,7845=>613,7846=>684,7847=>613,7848=>684,7849=>613, +7850=>684,7851=>613,7852=>684,7853=>613,7854=>684,7855=>613,7856=>684,7857=>613,7858=>684,7859=>613, +7860=>684,7861=>613,7862=>684,7863=>613,7864=>632,7865=>615,7866=>632,7867=>615,7868=>632,7869=>615, +7870=>632,7871=>615,7872=>632,7873=>615,7874=>632,7875=>615,7876=>632,7877=>615,7878=>632,7879=>615, +7880=>295,7881=>278,7882=>295,7883=>278,7884=>787,7885=>612,7886=>787,7887=>612,7888=>787,7889=>612, +7890=>787,7891=>612,7892=>787,7893=>612,7894=>787,7895=>612,7896=>787,7897=>612,7898=>913,7899=>612, +7900=>913,7901=>612,7902=>913,7903=>612,7904=>913,7905=>612,7906=>913,7907=>612,7908=>732,7909=>634, +7910=>732,7911=>634,7912=>858,7913=>634,7914=>858,7915=>634,7916=>858,7917=>634,7918=>858,7919=>634, +7920=>858,7921=>634,7922=>611,7923=>592,7924=>611,7925=>592,7926=>611,7927=>592,7928=>611,7929=>592, +7930=>769,7931=>477,7936=>659,7937=>659,7938=>659,7939=>659,7940=>659,7941=>659,7942=>659,7943=>659, +7944=>684,7945=>684,7946=>877,7947=>877,7948=>769,7949=>801,7950=>708,7951=>743,7952=>541,7953=>541, +7954=>541,7955=>541,7956=>541,7957=>541,7960=>711,7961=>711,7962=>966,7963=>975,7964=>898,7965=>928, +7968=>634,7969=>634,7970=>634,7971=>634,7972=>634,7973=>634,7974=>634,7975=>634,7976=>837,7977=>835, +7978=>1086,7979=>1089,7980=>1027,7981=>1051,7982=>934,7983=>947,7984=>338,7985=>338,7986=>338,7987=>338, +7988=>338,7989=>338,7990=>338,7991=>338,7992=>380,7993=>374,7994=>635,7995=>635,7996=>570,7997=>600, +7998=>489,7999=>493,8000=>612,8001=>612,8002=>612,8003=>612,8004=>612,8005=>612,8008=>804,8009=>848, +8010=>1095,8011=>1100,8012=>938,8013=>970,8016=>579,8017=>579,8018=>579,8019=>579,8020=>579,8021=>579, +8022=>579,8023=>579,8025=>784,8027=>998,8029=>1012,8031=>897,8032=>837,8033=>837,8034=>837,8035=>837, +8036=>837,8037=>837,8038=>837,8039=>837,8040=>802,8041=>843,8042=>1089,8043=>1095,8044=>946,8045=>972, +8046=>921,8047=>952,8048=>659,8049=>659,8050=>541,8051=>548,8052=>634,8053=>654,8054=>338,8055=>338, +8056=>612,8057=>612,8058=>579,8059=>579,8060=>837,8061=>837,8064=>659,8065=>659,8066=>659,8067=>659, +8068=>659,8069=>659,8070=>659,8071=>659,8072=>684,8073=>684,8074=>877,8075=>877,8076=>769,8077=>801, +8078=>708,8079=>743,8080=>634,8081=>634,8082=>634,8083=>634,8084=>634,8085=>634,8086=>634,8087=>634, +8088=>837,8089=>835,8090=>1086,8091=>1089,8092=>1027,8093=>1051,8094=>934,8095=>947,8096=>837,8097=>837, +8098=>837,8099=>837,8100=>837,8101=>837,8102=>837,8103=>837,8104=>802,8105=>843,8106=>1089,8107=>1095, +8108=>946,8109=>972,8110=>921,8111=>952,8112=>659,8113=>659,8114=>659,8115=>659,8116=>659,8118=>659, +8119=>659,8120=>684,8121=>684,8122=>716,8123=>692,8124=>684,8125=>500,8126=>500,8127=>500,8128=>500, +8129=>500,8130=>634,8131=>634,8132=>654,8134=>634,8135=>634,8136=>805,8137=>746,8138=>931,8139=>871, +8140=>752,8141=>500,8142=>500,8143=>500,8144=>338,8145=>338,8146=>338,8147=>338,8150=>338,8151=>338, +8152=>295,8153=>295,8154=>475,8155=>408,8157=>500,8158=>500,8159=>500,8160=>579,8161=>579,8162=>579, +8163=>579,8164=>635,8165=>635,8166=>579,8167=>579,8168=>611,8169=>611,8170=>845,8171=>825,8172=>685, +8173=>500,8174=>500,8175=>500,8178=>837,8179=>837,8180=>837,8182=>837,8183=>837,8184=>941,8185=>813, +8186=>922,8187=>826,8188=>764,8189=>500,8190=>500,8192=>500,8193=>1000,8194=>500,8195=>1000,8196=>330, +8197=>250,8198=>167,8199=>636,8200=>318,8201=>200,8202=>100,8203=>0,8204=>0,8205=>0,8206=>0, +8207=>0,8208=>361,8209=>361,8210=>636,8213=>1000,8214=>500,8215=>500,8219=>318,8223=>518,8227=>590, +8228=>334,8229=>667,8231=>318,8232=>0,8233=>0,8234=>0,8235=>0,8236=>0,8237=>0,8238=>0, +8239=>200,8241=>1735,8242=>227,8243=>374,8244=>520,8245=>227,8246=>374,8247=>520,8248=>339,8251=>838, +8252=>485,8253=>531,8254=>500,8255=>804,8256=>804,8257=>250,8258=>1000,8259=>500,8260=>167,8261=>390, +8262=>390,8263=>922,8264=>733,8265=>733,8266=>497,8267=>636,8268=>500,8269=>500,8270=>500,8271=>337, +8272=>804,8273=>500,8274=>450,8275=>1000,8276=>804,8277=>838,8278=>586,8279=>663,8280=>838,8281=>838, +8282=>318,8283=>797,8284=>838,8285=>318,8286=>318,8287=>222,8288=>0,8289=>0,8290=>0,8291=>0, +8292=>0,8298=>0,8299=>0,8300=>0,8301=>0,8302=>0,8303=>0,8304=>401,8305=>179,8308=>401, +8309=>401,8310=>401,8311=>401,8312=>401,8313=>401,8314=>528,8315=>528,8316=>528,8317=>246,8318=>246, +8319=>398,8320=>401,8321=>401,8322=>401,8323=>401,8324=>401,8325=>401,8326=>401,8327=>401,8328=>401, +8329=>401,8330=>528,8331=>528,8332=>528,8333=>246,8334=>246,8336=>392,8337=>417,8338=>414,8339=>444, +8340=>417,8352=>877,8353=>636,8354=>636,8355=>636,8356=>636,8357=>974,8358=>748,8359=>1272,8360=>1074, +8361=>989,8362=>784,8363=>636,8365=>636,8366=>636,8367=>1272,8368=>636,8369=>636,8370=>636,8371=>636, +8372=>774,8373=>636,8376=>636,8377=>636,8400=>0,8401=>0,8406=>0,8407=>0,8411=>0,8412=>0, +8417=>0,8448=>1019,8449=>1019,8450=>698,8451=>1123,8452=>642,8453=>1019,8454=>1067,8455=>614,8456=>698, +8457=>952,8459=>988,8460=>754,8461=>850,8462=>634,8463=>634,8464=>470,8465=>697,8466=>720,8467=>413, +8468=>818,8469=>801,8470=>1040,8471=>1000,8472=>697,8473=>701,8474=>787,8475=>798,8476=>814,8477=>792, +8478=>896,8479=>684,8480=>1020,8481=>1074,8483=>684,8484=>745,8485=>578,8486=>764,8487=>764,8488=>616, +8489=>338,8490=>656,8491=>684,8492=>786,8493=>703,8494=>854,8495=>592,8496=>605,8497=>786,8498=>575, +8499=>1069,8500=>462,8501=>745,8502=>674,8503=>466,8504=>645,8505=>380,8506=>926,8507=>1194,8508=>702, +8509=>728,8510=>654,8511=>849,8512=>811,8513=>775,8514=>557,8515=>557,8516=>611,8517=>819,8518=>708, +8519=>615,8520=>351,8521=>351,8523=>780,8526=>526,8528=>969,8529=>969,8530=>1370,8531=>969,8532=>969, +8533=>969,8534=>969,8535=>969,8536=>969,8537=>969,8538=>969,8539=>969,8540=>969,8541=>969,8542=>969, +8543=>568,8544=>295,8545=>492,8546=>689,8547=>923,8548=>684,8549=>922,8550=>1120,8551=>1317,8552=>917, +8553=>685,8554=>933,8555=>1131,8556=>557,8557=>698,8558=>770,8559=>863,8560=>278,8561=>458,8562=>637, +8563=>812,8564=>592,8565=>811,8566=>991,8567=>1170,8568=>819,8569=>592,8570=>822,8571=>1002,8572=>278, +8573=>550,8574=>635,8575=>974,8576=>1245,8577=>770,8578=>1245,8579=>703,8580=>549,8581=>698,8585=>969, +8592=>838,8593=>838,8594=>838,8595=>838,8596=>838,8597=>838,8598=>838,8599=>838,8600=>838,8601=>838, +8602=>838,8603=>838,8604=>838,8605=>838,8606=>838,8607=>838,8608=>838,8609=>838,8610=>838,8611=>838, +8612=>838,8613=>838,8614=>838,8615=>838,8616=>838,8617=>838,8618=>838,8619=>838,8620=>838,8621=>838, +8622=>838,8623=>838,8624=>838,8625=>838,8626=>838,8627=>838,8628=>838,8629=>838,8630=>838,8631=>838, +8632=>838,8633=>838,8634=>838,8635=>838,8636=>838,8637=>838,8638=>838,8639=>838,8640=>838,8641=>838, +8642=>838,8643=>838,8644=>838,8645=>838,8646=>838,8647=>838,8648=>838,8649=>838,8650=>838,8651=>838, +8652=>838,8653=>838,8654=>838,8655=>838,8656=>838,8657=>838,8658=>838,8659=>838,8660=>838,8661=>838, +8662=>838,8663=>838,8664=>838,8665=>838,8666=>838,8667=>838,8668=>838,8669=>838,8670=>838,8671=>838, +8672=>838,8673=>838,8674=>838,8675=>838,8676=>838,8677=>838,8678=>838,8679=>838,8680=>838,8681=>838, +8682=>838,8683=>838,8684=>838,8685=>838,8686=>838,8687=>838,8688=>838,8689=>838,8690=>838,8691=>838, +8692=>838,8693=>838,8694=>838,8695=>838,8696=>838,8697=>838,8698=>838,8699=>838,8700=>838,8701=>838, +8702=>838,8703=>838,8704=>684,8705=>636,8706=>517,8707=>632,8708=>632,8709=>871,8710=>669,8711=>669, +8712=>871,8713=>871,8714=>718,8715=>871,8716=>871,8717=>718,8718=>636,8719=>757,8720=>757,8721=>674, +8722=>838,8723=>838,8724=>838,8725=>337,8726=>637,8727=>838,8728=>626,8729=>626,8730=>637,8731=>637, +8732=>637,8733=>714,8734=>833,8735=>838,8736=>896,8737=>896,8738=>838,8739=>500,8740=>500,8741=>500, +8742=>500,8743=>732,8744=>732,8745=>732,8746=>732,8747=>521,8748=>789,8749=>1057,8750=>521,8751=>789, +8752=>1057,8753=>521,8754=>521,8755=>521,8756=>636,8757=>636,8758=>260,8759=>636,8760=>838,8761=>838, +8762=>838,8763=>838,8764=>838,8765=>838,8766=>838,8767=>838,8768=>375,8769=>838,8770=>838,8771=>838, +8772=>838,8773=>838,8774=>838,8775=>838,8776=>838,8777=>838,8778=>838,8779=>838,8780=>838,8781=>838, +8782=>838,8783=>838,8784=>838,8785=>838,8786=>839,8787=>839,8788=>1000,8789=>1000,8790=>838,8791=>838, +8792=>838,8793=>838,8794=>838,8795=>838,8796=>838,8797=>838,8798=>838,8799=>838,8800=>838,8801=>838, +8802=>838,8803=>838,8804=>838,8805=>838,8806=>838,8807=>838,8808=>838,8809=>838,8810=>1047,8811=>1047, +8812=>464,8813=>838,8814=>838,8815=>838,8816=>838,8817=>838,8818=>838,8819=>838,8820=>838,8821=>838, +8822=>838,8823=>838,8824=>838,8825=>838,8826=>838,8827=>838,8828=>838,8829=>838,8830=>838,8831=>838, +8832=>838,8833=>838,8834=>838,8835=>838,8836=>838,8837=>838,8838=>838,8839=>838,8840=>838,8841=>838, +8842=>838,8843=>838,8844=>732,8845=>732,8846=>732,8847=>838,8848=>838,8849=>838,8850=>838,8851=>780, +8852=>780,8853=>838,8854=>838,8855=>838,8856=>838,8857=>838,8858=>838,8859=>838,8860=>838,8861=>838, +8862=>838,8863=>838,8864=>838,8865=>838,8866=>871,8867=>871,8868=>871,8869=>871,8870=>521,8871=>521, +8872=>871,8873=>871,8874=>871,8875=>871,8876=>871,8877=>871,8878=>871,8879=>871,8880=>838,8881=>838, +8882=>838,8883=>838,8884=>838,8885=>838,8886=>1000,8887=>1000,8888=>838,8889=>838,8890=>521,8891=>732, +8892=>732,8893=>732,8894=>838,8895=>838,8896=>820,8897=>820,8898=>820,8899=>820,8900=>494,8901=>318, +8902=>626,8903=>838,8904=>1000,8905=>1000,8906=>1000,8907=>1000,8908=>1000,8909=>838,8910=>732,8911=>732, +8912=>838,8913=>838,8914=>838,8915=>838,8916=>838,8917=>838,8918=>838,8919=>838,8920=>1422,8921=>1422, +8922=>838,8923=>838,8924=>838,8925=>838,8926=>838,8927=>838,8928=>838,8929=>838,8930=>838,8931=>838, +8932=>838,8933=>838,8934=>838,8935=>838,8936=>838,8937=>838,8938=>838,8939=>838,8940=>838,8941=>838, +8942=>1000,8943=>1000,8944=>1000,8945=>1000,8946=>1000,8947=>871,8948=>718,8949=>871,8950=>871,8951=>718, +8952=>871,8953=>871,8954=>1000,8955=>871,8956=>718,8957=>871,8958=>718,8959=>871,8960=>602,8961=>602, +8962=>635,8963=>838,8964=>838,8965=>838,8966=>838,8967=>488,8968=>390,8969=>390,8970=>390,8971=>390, +8972=>809,8973=>809,8974=>809,8975=>809,8976=>838,8977=>513,8984=>1000,8985=>838,8988=>469,8989=>469, +8990=>469,8991=>469,8992=>521,8993=>521,8996=>1152,8997=>1152,8998=>1414,8999=>1152,9000=>1443,9003=>1414, +9004=>873,9075=>338,9076=>635,9077=>837,9082=>659,9085=>757,9095=>1152,9108=>873,9115=>500,9116=>500, +9117=>500,9118=>500,9119=>500,9120=>500,9121=>500,9122=>500,9123=>500,9124=>500,9125=>500,9126=>500, +9127=>750,9128=>750,9129=>750,9130=>750,9131=>750,9132=>750,9133=>750,9134=>521,9166=>838,9167=>945, +9187=>873,9189=>769,9192=>636,9250=>635,9251=>635,9312=>896,9313=>896,9314=>896,9315=>896,9316=>896, +9317=>896,9318=>896,9319=>896,9320=>896,9321=>896,9472=>602,9473=>602,9474=>602,9475=>602,9476=>602, +9477=>602,9478=>602,9479=>602,9480=>602,9481=>602,9482=>602,9483=>602,9484=>602,9485=>602,9486=>602, +9487=>602,9488=>602,9489=>602,9490=>602,9491=>602,9492=>602,9493=>602,9494=>602,9495=>602,9496=>602, +9497=>602,9498=>602,9499=>602,9500=>602,9501=>602,9502=>602,9503=>602,9504=>602,9505=>602,9506=>602, +9507=>602,9508=>602,9509=>602,9510=>602,9511=>602,9512=>602,9513=>602,9514=>602,9515=>602,9516=>602, +9517=>602,9518=>602,9519=>602,9520=>602,9521=>602,9522=>602,9523=>602,9524=>602,9525=>602,9526=>602, +9527=>602,9528=>602,9529=>602,9530=>602,9531=>602,9532=>602,9533=>602,9534=>602,9535=>602,9536=>602, +9537=>602,9538=>602,9539=>602,9540=>602,9541=>602,9542=>602,9543=>602,9544=>602,9545=>602,9546=>602, +9547=>602,9548=>602,9549=>602,9550=>602,9551=>602,9552=>602,9553=>602,9554=>602,9555=>602,9556=>602, +9557=>602,9558=>602,9559=>602,9560=>602,9561=>602,9562=>602,9563=>602,9564=>602,9565=>602,9566=>602, +9567=>602,9568=>602,9569=>602,9570=>602,9571=>602,9572=>602,9573=>602,9574=>602,9575=>602,9576=>602, +9577=>602,9578=>602,9579=>602,9580=>602,9581=>602,9582=>602,9583=>602,9584=>602,9585=>602,9586=>602, +9587=>602,9588=>602,9589=>602,9590=>602,9591=>602,9592=>602,9593=>602,9594=>602,9595=>602,9596=>602, +9597=>602,9598=>602,9599=>602,9600=>769,9601=>769,9602=>769,9603=>769,9604=>769,9605=>769,9606=>769, +9607=>769,9608=>769,9609=>769,9610=>769,9611=>769,9612=>769,9613=>769,9614=>769,9615=>769,9616=>769, +9617=>769,9618=>769,9619=>769,9620=>769,9621=>769,9622=>769,9623=>769,9624=>769,9625=>769,9626=>769, +9627=>769,9628=>769,9629=>769,9630=>769,9631=>769,9632=>945,9633=>945,9634=>945,9635=>945,9636=>945, +9637=>945,9638=>945,9639=>945,9640=>945,9641=>945,9642=>678,9643=>678,9644=>945,9645=>945,9646=>550, +9647=>550,9648=>769,9649=>769,9650=>769,9651=>769,9652=>502,9653=>502,9654=>769,9655=>769,9656=>502, +9657=>502,9658=>769,9659=>769,9660=>769,9661=>769,9662=>502,9663=>502,9664=>769,9665=>769,9666=>502, +9667=>502,9668=>769,9669=>769,9670=>769,9671=>769,9672=>769,9673=>873,9674=>494,9675=>873,9676=>873, +9677=>873,9678=>873,9679=>873,9680=>873,9681=>873,9682=>873,9683=>873,9684=>873,9685=>873,9686=>527, +9687=>527,9688=>791,9689=>970,9690=>970,9691=>970,9692=>387,9693=>387,9694=>387,9695=>387,9696=>873, +9697=>873,9698=>769,9699=>769,9700=>769,9701=>769,9702=>590,9703=>945,9704=>945,9705=>945,9706=>945, +9707=>945,9708=>769,9709=>769,9710=>769,9711=>1119,9712=>945,9713=>945,9714=>945,9715=>945,9716=>873, +9717=>873,9718=>873,9719=>873,9720=>769,9721=>769,9722=>769,9723=>830,9724=>830,9725=>732,9726=>732, +9727=>769,9728=>896,9729=>1000,9730=>896,9731=>896,9732=>896,9733=>896,9734=>896,9735=>573,9736=>896, +9737=>896,9738=>888,9739=>888,9740=>671,9741=>1013,9742=>1246,9743=>1250,9744=>896,9745=>896,9746=>896, +9747=>532,9748=>896,9749=>896,9750=>896,9751=>896,9752=>896,9753=>896,9754=>896,9755=>896,9756=>896, +9757=>609,9758=>896,9759=>609,9760=>896,9761=>896,9762=>896,9763=>896,9764=>669,9765=>746,9766=>649, +9767=>784,9768=>545,9769=>896,9770=>896,9771=>896,9772=>710,9773=>896,9774=>896,9775=>896,9776=>896, +9777=>896,9778=>896,9779=>896,9780=>896,9781=>896,9782=>896,9783=>896,9784=>896,9785=>896,9786=>896, +9787=>896,9788=>896,9789=>896,9790=>896,9791=>614,9792=>732,9793=>732,9794=>896,9795=>896,9796=>896, +9797=>896,9798=>896,9799=>896,9800=>896,9801=>896,9802=>896,9803=>896,9804=>896,9805=>896,9806=>896, +9807=>896,9808=>896,9809=>896,9810=>896,9811=>896,9812=>896,9813=>896,9814=>896,9815=>896,9816=>896, +9817=>896,9818=>896,9819=>896,9820=>896,9821=>896,9822=>896,9823=>896,9824=>896,9825=>896,9826=>896, +9827=>896,9828=>896,9829=>896,9830=>896,9831=>896,9832=>896,9833=>472,9834=>638,9835=>896,9836=>896, +9837=>472,9838=>357,9839=>484,9840=>748,9841=>766,9842=>896,9843=>896,9844=>896,9845=>896,9846=>896, +9847=>896,9848=>896,9849=>896,9850=>896,9851=>896,9852=>896,9853=>896,9854=>896,9855=>896,9856=>869, +9857=>869,9858=>869,9859=>869,9860=>869,9861=>869,9862=>896,9863=>896,9864=>896,9865=>896,9866=>896, +9867=>896,9868=>896,9869=>896,9870=>896,9871=>896,9872=>896,9873=>896,9874=>896,9875=>896,9876=>896, +9877=>541,9878=>896,9879=>896,9880=>896,9881=>896,9882=>896,9883=>896,9884=>896,9888=>896,9889=>702, +9890=>1004,9891=>1089,9892=>1175,9893=>903,9894=>838,9895=>838,9896=>838,9897=>838,9898=>838,9899=>838, +9900=>838,9901=>838,9902=>838,9903=>838,9904=>844,9905=>838,9906=>732,9907=>732,9908=>732,9909=>732, +9910=>850,9911=>732,9912=>732,9920=>838,9921=>838,9922=>838,9923=>838,9985=>838,9986=>838,9987=>838, +9988=>838,9990=>838,9991=>838,9992=>838,9993=>838,9996=>838,9997=>838,9998=>838,9999=>838,10000=>838, +10001=>838,10002=>838,10003=>838,10004=>838,10005=>838,10006=>838,10007=>838,10008=>838,10009=>838,10010=>838, +10011=>838,10012=>838,10013=>838,10014=>838,10015=>838,10016=>838,10017=>838,10018=>838,10019=>838,10020=>838, +10021=>838,10022=>838,10023=>838,10025=>838,10026=>838,10027=>838,10028=>838,10029=>838,10030=>838,10031=>838, +10032=>838,10033=>838,10034=>838,10035=>838,10036=>838,10037=>838,10038=>838,10039=>838,10040=>838,10041=>838, +10042=>838,10043=>838,10044=>838,10045=>838,10046=>838,10047=>838,10048=>838,10049=>838,10050=>838,10051=>838, +10052=>838,10053=>838,10054=>838,10055=>838,10056=>838,10057=>838,10058=>838,10059=>838,10061=>896,10063=>896, +10064=>896,10065=>896,10066=>896,10070=>896,10072=>838,10073=>838,10074=>838,10075=>322,10076=>322,10077=>538, +10078=>538,10081=>838,10082=>838,10083=>838,10084=>838,10085=>838,10086=>838,10087=>838,10088=>838,10089=>838, +10090=>838,10091=>838,10092=>838,10093=>838,10094=>838,10095=>838,10096=>838,10097=>838,10098=>838,10099=>838, +10100=>838,10101=>838,10102=>896,10103=>896,10104=>896,10105=>896,10106=>896,10107=>896,10108=>896,10109=>896, +10110=>896,10111=>896,10112=>838,10113=>838,10114=>838,10115=>838,10116=>838,10117=>838,10118=>838,10119=>838, +10120=>838,10121=>838,10122=>838,10123=>838,10124=>838,10125=>838,10126=>838,10127=>838,10128=>838,10129=>838, +10130=>838,10131=>838,10132=>838,10136=>838,10137=>838,10138=>838,10139=>838,10140=>838,10141=>838,10142=>838, +10143=>838,10144=>838,10145=>838,10146=>838,10147=>838,10148=>838,10149=>838,10150=>838,10151=>838,10152=>838, +10153=>838,10154=>838,10155=>838,10156=>838,10157=>838,10158=>838,10159=>838,10161=>838,10162=>838,10163=>838, +10164=>838,10165=>838,10166=>838,10167=>838,10168=>838,10169=>838,10170=>838,10171=>838,10172=>838,10173=>838, +10174=>838,10181=>390,10182=>390,10208=>494,10214=>495,10215=>495,10216=>390,10217=>390,10218=>556,10219=>556, +10224=>838,10225=>838,10226=>838,10227=>838,10228=>1157,10229=>1434,10230=>1434,10231=>1434,10232=>1434,10233=>1434, +10234=>1434,10235=>1434,10236=>1434,10237=>1434,10238=>1434,10239=>1434,10240=>732,10241=>732,10242=>732,10243=>732, +10244=>732,10245=>732,10246=>732,10247=>732,10248=>732,10249=>732,10250=>732,10251=>732,10252=>732,10253=>732, +10254=>732,10255=>732,10256=>732,10257=>732,10258=>732,10259=>732,10260=>732,10261=>732,10262=>732,10263=>732, +10264=>732,10265=>732,10266=>732,10267=>732,10268=>732,10269=>732,10270=>732,10271=>732,10272=>732,10273=>732, +10274=>732,10275=>732,10276=>732,10277=>732,10278=>732,10279=>732,10280=>732,10281=>732,10282=>732,10283=>732, +10284=>732,10285=>732,10286=>732,10287=>732,10288=>732,10289=>732,10290=>732,10291=>732,10292=>732,10293=>732, +10294=>732,10295=>732,10296=>732,10297=>732,10298=>732,10299=>732,10300=>732,10301=>732,10302=>732,10303=>732, +10304=>732,10305=>732,10306=>732,10307=>732,10308=>732,10309=>732,10310=>732,10311=>732,10312=>732,10313=>732, +10314=>732,10315=>732,10316=>732,10317=>732,10318=>732,10319=>732,10320=>732,10321=>732,10322=>732,10323=>732, +10324=>732,10325=>732,10326=>732,10327=>732,10328=>732,10329=>732,10330=>732,10331=>732,10332=>732,10333=>732, +10334=>732,10335=>732,10336=>732,10337=>732,10338=>732,10339=>732,10340=>732,10341=>732,10342=>732,10343=>732, +10344=>732,10345=>732,10346=>732,10347=>732,10348=>732,10349=>732,10350=>732,10351=>732,10352=>732,10353=>732, +10354=>732,10355=>732,10356=>732,10357=>732,10358=>732,10359=>732,10360=>732,10361=>732,10362=>732,10363=>732, +10364=>732,10365=>732,10366=>732,10367=>732,10368=>732,10369=>732,10370=>732,10371=>732,10372=>732,10373=>732, +10374=>732,10375=>732,10376=>732,10377=>732,10378=>732,10379=>732,10380=>732,10381=>732,10382=>732,10383=>732, +10384=>732,10385=>732,10386=>732,10387=>732,10388=>732,10389=>732,10390=>732,10391=>732,10392=>732,10393=>732, +10394=>732,10395=>732,10396=>732,10397=>732,10398=>732,10399=>732,10400=>732,10401=>732,10402=>732,10403=>732, +10404=>732,10405=>732,10406=>732,10407=>732,10408=>732,10409=>732,10410=>732,10411=>732,10412=>732,10413=>732, +10414=>732,10415=>732,10416=>732,10417=>732,10418=>732,10419=>732,10420=>732,10421=>732,10422=>732,10423=>732, +10424=>732,10425=>732,10426=>732,10427=>732,10428=>732,10429=>732,10430=>732,10431=>732,10432=>732,10433=>732, +10434=>732,10435=>732,10436=>732,10437=>732,10438=>732,10439=>732,10440=>732,10441=>732,10442=>732,10443=>732, +10444=>732,10445=>732,10446=>732,10447=>732,10448=>732,10449=>732,10450=>732,10451=>732,10452=>732,10453=>732, +10454=>732,10455=>732,10456=>732,10457=>732,10458=>732,10459=>732,10460=>732,10461=>732,10462=>732,10463=>732, +10464=>732,10465=>732,10466=>732,10467=>732,10468=>732,10469=>732,10470=>732,10471=>732,10472=>732,10473=>732, +10474=>732,10475=>732,10476=>732,10477=>732,10478=>732,10479=>732,10480=>732,10481=>732,10482=>732,10483=>732, +10484=>732,10485=>732,10486=>732,10487=>732,10488=>732,10489=>732,10490=>732,10491=>732,10492=>732,10493=>732, +10494=>732,10495=>732,10502=>838,10503=>838,10506=>838,10507=>838,10560=>683,10561=>683,10627=>734,10628=>734, +10702=>838,10703=>1000,10704=>1000,10705=>1000,10706=>1000,10707=>1000,10708=>1000,10709=>1000,10731=>494,10746=>838, +10747=>838,10752=>1000,10753=>1000,10754=>1000,10764=>1325,10765=>521,10766=>521,10767=>521,10768=>521,10769=>521, +10770=>521,10771=>521,10772=>521,10773=>521,10774=>521,10775=>521,10776=>521,10777=>521,10778=>521,10779=>521, +10780=>521,10799=>838,10877=>838,10878=>838,10879=>838,10880=>838,10881=>838,10882=>838,10883=>838,10884=>838, +10885=>838,10886=>838,10887=>838,10888=>838,10889=>838,10890=>838,10891=>838,10892=>838,10893=>838,10894=>838, +10895=>838,10896=>838,10897=>838,10898=>838,10899=>838,10900=>838,10901=>838,10902=>838,10903=>838,10904=>838, +10905=>838,10906=>838,10907=>838,10908=>838,10909=>838,10910=>838,10911=>838,10912=>838,10926=>838,10927=>838, +10928=>838,10929=>838,10930=>838,10931=>838,10932=>838,10933=>838,10934=>838,10935=>838,10936=>838,10937=>838, +10938=>838,11001=>838,11002=>838,11008=>838,11009=>838,11010=>838,11011=>838,11012=>838,11013=>838,11014=>838, +11015=>838,11016=>838,11017=>838,11018=>838,11019=>838,11020=>838,11021=>838,11022=>836,11023=>836,11024=>836, +11025=>836,11026=>945,11027=>945,11028=>945,11029=>945,11030=>769,11031=>769,11032=>769,11033=>769,11034=>945, +11039=>869,11040=>869,11041=>873,11042=>873,11043=>873,11044=>1119,11091=>869,11092=>869,11360=>557,11361=>278, +11362=>557,11363=>603,11364=>695,11365=>613,11366=>392,11367=>752,11368=>634,11369=>656,11370=>579,11371=>685, +11372=>525,11373=>781,11374=>863,11375=>684,11376=>781,11377=>734,11378=>1128,11379=>961,11380=>592,11381=>654, +11382=>568,11383=>660,11385=>414,11386=>612,11387=>491,11388=>175,11389=>431,11390=>635,11391=>685,11568=>646, +11569=>888,11570=>888,11571=>682,11572=>684,11573=>635,11574=>562,11575=>684,11576=>684,11577=>632,11578=>632, +11579=>683,11580=>875,11581=>685,11582=>491,11583=>685,11584=>888,11585=>888,11586=>300,11587=>627,11588=>752, +11589=>656,11590=>527,11591=>685,11592=>645,11593=>632,11594=>502,11595=>953,11596=>778,11597=>748,11598=>621, +11599=>295,11600=>778,11601=>295,11602=>752,11603=>633,11604=>888,11605=>888,11606=>752,11607=>320,11608=>749, +11609=>888,11610=>888,11611=>698,11612=>768,11613=>685,11614=>698,11615=>622,11616=>684,11617=>752,11618=>632, +11619=>788,11620=>567,11621=>788,11631=>515,11800=>531,11810=>390,11811=>390,11812=>390,11813=>390,11822=>531, +19904=>896,19905=>896,19906=>896,19907=>896,19908=>896,19909=>896,19910=>896,19911=>896,19912=>896,19913=>896, +19914=>896,19915=>896,19916=>896,19917=>896,19918=>896,19919=>896,19920=>896,19921=>896,19922=>896,19923=>896, +19924=>896,19925=>896,19926=>896,19927=>896,19928=>896,19929=>896,19930=>896,19931=>896,19932=>896,19933=>896, +19934=>896,19935=>896,19936=>896,19937=>896,19938=>896,19939=>896,19940=>896,19941=>896,19942=>896,19943=>896, +19944=>896,19945=>896,19946=>896,19947=>896,19948=>896,19949=>896,19950=>896,19951=>896,19952=>896,19953=>896, +19954=>896,19955=>896,19956=>896,19957=>896,19958=>896,19959=>896,19960=>896,19961=>896,19962=>896,19963=>896, +19964=>896,19965=>896,19966=>896,19967=>896,42564=>635,42565=>521,42566=>354,42567=>338,42572=>1180,42573=>1028, +42576=>1029,42577=>906,42580=>1080,42581=>842,42582=>977,42583=>843,42594=>1062,42595=>912,42596=>1066,42597=>901, +42598=>1178,42599=>1008,42600=>787,42601=>612,42602=>855,42603=>712,42604=>1358,42605=>1019,42606=>879,42634=>782, +42635=>685,42636=>611,42637=>583,42644=>686,42645=>634,42760=>493,42761=>493,42762=>493,42763=>493,42764=>493, +42765=>493,42766=>493,42767=>493,42768=>493,42769=>493,42770=>493,42771=>493,42772=>493,42773=>493,42774=>493, +42779=>369,42780=>369,42781=>252,42782=>252,42783=>252,42786=>385,42787=>356,42788=>472,42789=>472,42790=>752, +42791=>634,42792=>878,42793=>709,42794=>614,42795=>541,42800=>491,42801=>521,42802=>1250,42803=>985,42804=>1203, +42805=>990,42806=>1142,42807=>981,42808=>971,42809=>818,42810=>971,42811=>818,42812=>959,42813=>818,42814=>703, +42815=>549,42822=>680,42823=>392,42824=>582,42825=>427,42826=>807,42827=>704,42830=>1358,42831=>1019,42832=>603, +42833=>635,42834=>734,42835=>774,42838=>787,42839=>635,42852=>605,42853=>635,42854=>605,42855=>635,42880=>557, +42881=>278,42882=>735,42883=>634,42889=>337,42890=>376,42891=>401,42892=>275,42893=>686,43003=>575,43004=>603, +43005=>863,43006=>295,43007=>1199,61184=>213,61185=>238,61186=>257,61187=>264,61188=>267,61189=>238,61190=>213, +61191=>238,61192=>257,61193=>264,61194=>257,61195=>238,61196=>213,61197=>238,61198=>257,61199=>264,61200=>257, +61201=>238,61202=>213,61203=>238,61204=>267,61205=>264,61206=>257,61207=>238,61208=>213,61209=>275,61440=>977, +61441=>977,63173=>612,64256=>689,64257=>630,64258=>630,64259=>967,64260=>967,64261=>686,64262=>861,64275=>1202, +64276=>1202,64277=>1196,64278=>1186,64279=>1529,64285=>272,64286=>0,64287=>471,64288=>636,64289=>856,64290=>774, +64291=>906,64292=>771,64293=>843,64294=>855,64295=>807,64296=>875,64297=>838,64298=>808,64299=>808,64300=>808, +64301=>808,64302=>629,64303=>629,64304=>629,64305=>608,64306=>448,64307=>594,64308=>640,64309=>272,64310=>374, +64312=>648,64313=>336,64314=>592,64315=>556,64316=>599,64318=>659,64320=>441,64321=>700,64323=>640,64324=>604, +64326=>581,64327=>663,64328=>592,64329=>808,64330=>657,64331=>272,64332=>608,64333=>556,64334=>604,64335=>540, +64338=>941,64339=>982,64340=>278,64341=>302,64342=>941,64343=>982,64344=>278,64345=>302,64346=>941,64347=>982, +64348=>278,64349=>302,64350=>941,64351=>982,64352=>278,64353=>302,64354=>941,64355=>982,64356=>278,64357=>302, +64358=>941,64359=>982,64360=>278,64361=>302,64362=>1037,64363=>1035,64364=>478,64365=>506,64366=>1037,64367=>1035, +64368=>478,64369=>506,64370=>646,64371=>646,64372=>618,64373=>646,64374=>646,64375=>646,64376=>618,64377=>646, +64378=>646,64379=>646,64380=>618,64381=>646,64382=>646,64383=>646,64384=>618,64385=>646,64386=>445,64387=>525, +64388=>445,64389=>525,64390=>445,64391=>525,64392=>445,64393=>525,64394=>483,64395=>552,64396=>483,64397=>552, +64398=>895,64399=>895,64400=>476,64401=>552,64402=>895,64403=>895,64404=>476,64405=>552,64406=>895,64407=>895, +64408=>476,64409=>552,64410=>895,64411=>895,64412=>476,64413=>552,64414=>734,64415=>761,64416=>734,64417=>761, +64418=>278,64419=>302,64426=>698,64427=>632,64428=>527,64429=>461,64467=>824,64468=>843,64469=>476,64470=>552, +64473=>483,64474=>517,64488=>278,64489=>302,64508=>783,64509=>833,64510=>278,64511=>302,65024=>0,65025=>0, +65026=>0,65027=>0,65028=>0,65029=>0,65030=>0,65031=>0,65032=>0,65033=>0,65034=>0,65035=>0, +65036=>0,65037=>0,65038=>0,65039=>0,65056=>0,65057=>0,65058=>0,65059=>0,65136=>293,65137=>293, +65138=>293,65139=>262,65140=>293,65142=>293,65143=>293,65144=>293,65145=>293,65146=>293,65147=>293,65148=>293, +65149=>293,65150=>293,65151=>293,65152=>470,65153=>278,65154=>305,65155=>278,65156=>305,65157=>483,65158=>517, +65159=>278,65160=>305,65161=>783,65162=>833,65163=>278,65164=>302,65165=>278,65166=>305,65167=>941,65168=>982, +65169=>278,65170=>302,65171=>524,65172=>536,65173=>941,65174=>982,65175=>278,65176=>302,65177=>941,65178=>982, +65179=>278,65180=>302,65181=>646,65182=>646,65183=>618,65184=>646,65185=>646,65186=>646,65187=>618,65188=>646, +65189=>646,65190=>646,65191=>618,65192=>646,65193=>445,65194=>525,65195=>445,65196=>525,65197=>483,65198=>552, +65199=>483,65200=>552,65201=>1221,65202=>1275,65203=>838,65204=>892,65205=>1221,65206=>1275,65207=>838,65208=>892, +65209=>1209,65210=>1225,65211=>849,65212=>867,65213=>1209,65214=>1225,65215=>849,65216=>867,65217=>925,65218=>949, +65219=>796,65220=>820,65221=>925,65222=>949,65223=>796,65224=>820,65225=>597,65226=>532,65227=>597,65228=>482, +65229=>597,65230=>532,65231=>523,65232=>482,65233=>1037,65234=>1035,65235=>478,65236=>506,65237=>776,65238=>834, +65239=>478,65240=>506,65241=>824,65242=>843,65243=>476,65244=>552,65245=>727,65246=>757,65247=>305,65248=>331, +65249=>619,65250=>666,65251=>536,65252=>578,65253=>734,65254=>761,65255=>278,65256=>302,65257=>524,65258=>536, +65259=>527,65260=>461,65261=>483,65262=>517,65263=>783,65264=>833,65265=>783,65266=>833,65267=>278,65268=>302, +65269=>570,65270=>597,65271=>570,65272=>597,65273=>570,65274=>597,65275=>570,65276=>597,65279=>0,65529=>0, +65530=>0,65531=>0,65532=>0,65533=>1025); +$enc=''; +$diff=''; +$file='dejavusans.z'; +$ctg='dejavusans.ctg.z'; +$originalsize=683528; +// --- EOF --- --- /dev/null +++ b/tcpdf/fonts/dejavusansb.php @@ -1,1 +1,518 @@ - +928,'Descent'=>-236,'CapHeight'=>19,'Flags'=>96,'FontBBox'=>'[-1069 -415 1975 1174]','ItalicAngle'=>-20.3,'StemV'=>120,'MissingWidth'=>600); +$up=-63; +$ut=44; +$dw=600; +$cw=array( +0=>600,32=>348,33=>456,34=>521,35=>838,36=>696,37=>1002,38=>872,39=>306,40=>457, +41=>457,42=>523,43=>838,44=>380,45=>415,46=>380,47=>365,48=>696,49=>696,50=>696, +51=>696,52=>696,53=>696,54=>696,55=>696,56=>696,57=>696,58=>400,59=>400,60=>838, +61=>838,62=>838,63=>580,64=>1000,65=>774,66=>762,67=>734,68=>830,69=>683,70=>683, +71=>821,72=>837,73=>372,74=>372,75=>775,76=>637,77=>995,78=>837,79=>850,80=>733, +81=>850,82=>770,83=>720,84=>682,85=>812,86=>774,87=>1103,88=>771,89=>724,90=>725, +91=>457,92=>365,93=>457,94=>838,95=>500,96=>500,97=>675,98=>716,99=>593,100=>716, +101=>678,102=>435,103=>716,104=>712,105=>343,106=>343,107=>665,108=>343,109=>1042,110=>712, +111=>687,112=>716,113=>716,114=>493,115=>595,116=>478,117=>712,118=>652,119=>924,120=>645, +121=>652,122=>582,123=>712,124=>365,125=>712,126=>838,8364=>696,8218=>380,402=>435,8222=>657, +8230=>1000,8224=>500,8225=>500,710=>500,8240=>1440,352=>720,8249=>412,338=>1167,381=>725,8216=>380, +8217=>380,8220=>657,8221=>657,8226=>639,8211=>500,8212=>1000,732=>500,8482=>1000,353=>595,8250=>412, +339=>1094,382=>582,376=>724,160=>348,161=>456,162=>696,163=>696,164=>636,165=>696,166=>365, +167=>500,168=>500,169=>1000,170=>564,171=>646,172=>838,173=>415,174=>1000,175=>500,176=>500, +177=>838,178=>438,179=>438,180=>500,181=>736,182=>636,183=>380,184=>500,185=>438,186=>564, +187=>646,188=>1035,189=>1035,190=>1035,191=>580,192=>774,193=>774,194=>774,195=>774,196=>774, +197=>774,198=>1085,199=>734,200=>683,201=>683,202=>683,203=>683,204=>372,205=>372,206=>372, +207=>372,208=>838,209=>837,210=>850,211=>850,212=>850,213=>850,214=>850,215=>838,216=>850, +217=>812,218=>812,219=>812,220=>812,221=>724,222=>738,223=>719,224=>675,225=>675,226=>675, +227=>675,228=>675,229=>675,230=>1048,231=>593,232=>678,233=>678,234=>678,235=>678,236=>343, +237=>343,238=>343,239=>343,240=>687,241=>712,242=>687,243=>687,244=>687,245=>687,246=>687, +247=>838,248=>687,249=>712,250=>712,251=>712,252=>712,253=>652,254=>716,255=>652,256=>774, +257=>675,258=>774,259=>675,260=>774,261=>675,262=>734,263=>593,264=>734,265=>593,266=>734, +267=>593,268=>734,269=>593,270=>830,271=>716,272=>838,273=>716,274=>683,275=>678,276=>683, +277=>678,278=>683,279=>678,280=>683,281=>678,282=>683,283=>678,284=>821,285=>716,286=>821, +287=>716,288=>821,289=>716,290=>821,291=>716,292=>837,293=>712,294=>974,295=>790,296=>372, +297=>343,298=>372,299=>343,300=>372,301=>343,302=>372,303=>343,304=>372,305=>343,306=>744, +307=>686,308=>372,309=>343,310=>775,311=>665,312=>665,313=>637,314=>343,315=>637,316=>343, +317=>637,318=>479,319=>637,320=>557,321=>642,322=>371,323=>837,324=>712,325=>837,326=>712, +327=>837,328=>712,329=>983,330=>837,331=>712,332=>850,333=>687,334=>850,335=>687,336=>850, +337=>687,340=>770,341=>493,342=>770,343=>493,344=>770,345=>493,346=>720,347=>595,348=>720, +349=>595,350=>720,351=>595,354=>682,355=>478,356=>682,357=>478,358=>682,359=>478,360=>812, +361=>712,362=>812,363=>712,364=>812,365=>712,366=>812,367=>712,368=>812,369=>712,370=>812, +371=>712,372=>1103,373=>924,374=>724,375=>652,377=>725,378=>582,379=>725,380=>582,383=>435, +384=>716,385=>811,386=>762,387=>716,388=>762,389=>716,390=>734,391=>734,392=>593,393=>838, +394=>879,395=>757,396=>716,397=>688,398=>683,399=>849,400=>696,401=>683,403=>821,404=>793, +405=>1045,406=>436,407=>389,408=>775,409=>665,410=>360,411=>592,412=>1042,413=>837,414=>712, +415=>850,416=>874,417=>687,418=>1083,419=>912,420=>782,421=>716,422=>770,423=>720,424=>595, +425=>683,426=>552,427=>478,428=>707,429=>478,430=>682,431=>835,432=>712,433=>850,434=>813, +435=>797,436=>778,437=>725,438=>582,439=>772,440=>772,441=>641,442=>582,443=>696,444=>772, +445=>641,446=>573,447=>716,448=>372,449=>659,450=>544,451=>372,452=>1555,453=>1412,454=>1298, +455=>1009,456=>980,457=>686,458=>1209,459=>1180,460=>1055,461=>774,462=>675,463=>372,464=>343, +465=>850,466=>687,467=>812,468=>712,469=>812,470=>712,471=>812,472=>712,473=>812,474=>712, +475=>812,476=>712,477=>678,478=>774,479=>675,480=>774,481=>675,482=>1085,483=>1048,484=>821, +485=>716,486=>821,487=>716,488=>775,489=>665,490=>850,491=>687,492=>850,493=>687,494=>772, +495=>582,496=>343,497=>1555,498=>1412,499=>1298,500=>821,501=>716,502=>1289,503=>787,504=>837, +505=>712,506=>774,507=>675,508=>1085,509=>1048,510=>850,511=>687,512=>774,513=>675,514=>774, +515=>675,516=>683,517=>678,518=>683,519=>678,520=>372,521=>343,522=>372,523=>343,524=>850, +525=>687,526=>850,527=>687,528=>770,529=>493,530=>770,531=>493,532=>812,533=>712,534=>812, +535=>712,536=>720,537=>595,538=>682,539=>478,540=>690,541=>607,542=>837,543=>712,544=>837, +545=>865,546=>809,547=>659,548=>725,549=>582,550=>774,551=>675,552=>683,553=>678,554=>850, +555=>687,556=>850,557=>687,558=>850,559=>687,560=>850,561=>687,562=>724,563=>652,564=>492, +565=>867,566=>512,567=>343,568=>1088,569=>1088,570=>774,571=>734,572=>593,573=>637,574=>682, +575=>595,576=>582,577=>782,578=>614,579=>762,580=>812,581=>774,582=>683,583=>678,584=>372, +585=>343,586=>860,587=>791,588=>770,589=>493,590=>724,591=>652,592=>675,593=>716,594=>716, +595=>716,596=>593,597=>593,598=>717,599=>792,600=>678,601=>678,602=>876,603=>557,604=>545, +605=>815,606=>731,607=>343,608=>792,609=>716,610=>627,611=>644,612=>635,613=>712,614=>712, +615=>712,616=>545,617=>440,618=>545,619=>559,620=>693,621=>343,622=>841,623=>1042,624=>1042, +625=>1042,626=>712,627=>793,628=>707,629=>687,630=>909,631=>681,632=>796,633=>538,634=>538, +635=>650,636=>493,637=>493,638=>596,639=>596,640=>642,641=>642,642=>595,643=>415,644=>435, +645=>605,646=>552,647=>478,648=>478,649=>920,650=>772,651=>670,652=>652,653=>924,654=>652, +655=>724,656=>694,657=>684,658=>641,659=>641,660=>573,661=>573,662=>573,663=>573,664=>850, +665=>633,666=>731,667=>685,668=>691,669=>343,670=>732,671=>539,672=>792,673=>573,674=>573, +675=>1156,676=>1214,677=>1155,678=>974,679=>769,680=>929,681=>1026,682=>792,683=>780,684=>591, +685=>415,686=>677,687=>789,688=>456,689=>456,690=>219,691=>315,692=>315,693=>315,694=>411, +695=>591,696=>417,697=>302,698=>521,699=>380,700=>380,701=>380,702=>366,703=>366,704=>326, +705=>326,706=>500,707=>500,708=>500,709=>500,711=>500,712=>306,713=>500,714=>500,715=>500, +716=>306,717=>500,718=>500,719=>500,720=>337,721=>337,722=>366,723=>366,724=>500,725=>500, +726=>416,727=>328,728=>500,729=>500,730=>500,731=>500,733=>500,734=>351,735=>500,736=>412, +737=>219,738=>381,739=>413,740=>326,741=>500,742=>500,743=>500,744=>500,745=>500,748=>500, +749=>500,750=>657,755=>500,759=>500,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0, +774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0, +784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0, +794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0, +804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0, +814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0, +824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,832=>0,833=>0, +834=>0,835=>0,836=>0,837=>0,838=>0,839=>0,840=>0,841=>0,842=>0,843=>0, +844=>0,845=>0,846=>0,847=>0,849=>0,850=>0,851=>0,855=>0,856=>0,858=>0, +860=>0,861=>0,862=>0,863=>0,864=>0,865=>0,866=>0,880=>698,881=>565,882=>1022, +883=>836,884=>302,885=>302,886=>837,887=>701,890=>500,891=>593,892=>550,893=>549,894=>400, +900=>441,901=>500,902=>797,903=>380,904=>846,905=>1009,906=>563,908=>891,910=>980,911=>894, +912=>390,913=>774,914=>762,915=>637,916=>774,917=>683,918=>725,919=>837,920=>850,921=>372, +922=>775,923=>774,924=>995,925=>837,926=>632,927=>850,928=>837,929=>733,931=>683,932=>682, +933=>724,934=>850,935=>771,936=>850,937=>850,938=>372,939=>724,940=>687,941=>557,942=>712, +943=>390,944=>675,945=>687,946=>716,947=>681,948=>687,949=>557,950=>591,951=>712,952=>687, +953=>390,954=>710,955=>633,956=>736,957=>681,958=>591,959=>687,960=>791,961=>716,962=>593, +963=>779,964=>638,965=>675,966=>782,967=>645,968=>794,969=>869,970=>390,971=>675,972=>687, +973=>675,974=>869,975=>775,976=>651,977=>661,978=>746,979=>981,980=>746,981=>796,982=>869, +983=>744,984=>850,985=>687,986=>734,987=>593,988=>683,989=>494,990=>702,991=>660,992=>919, +993=>627,994=>1093,995=>837,996=>832,997=>716,998=>928,999=>744,1000=>733,1001=>650,1002=>789, +1003=>671,1004=>752,1005=>716,1006=>682,1007=>590,1008=>744,1009=>716,1010=>593,1011=>343,1012=>850, +1013=>645,1014=>644,1015=>738,1016=>716,1017=>734,1018=>995,1019=>732,1020=>716,1021=>698,1022=>734, +1023=>698,1024=>683,1025=>683,1026=>878,1027=>637,1028=>734,1029=>720,1030=>372,1031=>372,1032=>372, +1033=>1154,1034=>1130,1035=>878,1036=>817,1037=>837,1038=>771,1039=>837,1040=>774,1041=>762,1042=>762, +1043=>637,1044=>891,1045=>683,1046=>1224,1047=>710,1048=>837,1049=>837,1050=>817,1051=>831,1052=>995, +1053=>837,1054=>850,1055=>837,1056=>733,1057=>734,1058=>682,1059=>771,1060=>992,1061=>771,1062=>928, +1063=>808,1064=>1235,1065=>1326,1066=>939,1067=>1036,1068=>762,1069=>734,1070=>1174,1071=>770,1072=>675, +1073=>698,1074=>633,1075=>522,1076=>808,1077=>678,1078=>995,1079=>581,1080=>701,1081=>701,1082=>679, +1083=>732,1084=>817,1085=>691,1086=>687,1087=>691,1088=>716,1089=>593,1090=>580,1091=>652,1092=>992, +1093=>645,1094=>741,1095=>687,1096=>1062,1097=>1105,1098=>751,1099=>904,1100=>632,1101=>593,1102=>972, +1103=>642,1104=>678,1105=>678,1106=>714,1107=>522,1108=>593,1109=>595,1110=>343,1111=>343,1112=>343, +1113=>991,1114=>956,1115=>734,1116=>679,1117=>701,1118=>652,1119=>691,1120=>1093,1121=>869,1122=>840, +1123=>736,1124=>1012,1125=>839,1126=>992,1127=>832,1128=>1358,1129=>1121,1130=>850,1131=>687,1132=>1236, +1133=>1007,1134=>696,1135=>557,1136=>1075,1137=>1061,1138=>850,1139=>687,1140=>850,1141=>695,1142=>850, +1143=>695,1144=>1148,1145=>1043,1146=>1074,1147=>863,1148=>1405,1149=>1173,1150=>1093,1151=>869,1152=>734, +1153=>593,1154=>652,1155=>0,1156=>0,1157=>0,1158=>0,1159=>0,1160=>418,1161=>418,1162=>957, +1163=>807,1164=>762,1165=>611,1166=>733,1167=>716,1168=>637,1169=>522,1170=>666,1171=>543,1172=>808, +1173=>669,1174=>1224,1175=>995,1176=>710,1177=>581,1178=>775,1179=>679,1180=>817,1181=>679,1182=>817, +1183=>679,1184=>1015,1185=>826,1186=>956,1187=>808,1188=>1103,1189=>874,1190=>1273,1191=>1017,1192=>952, +1193=>858,1194=>734,1195=>593,1196=>682,1197=>580,1198=>724,1199=>652,1200=>724,1201=>652,1202=>771, +1203=>645,1204=>1112,1205=>1000,1206=>808,1207=>687,1208=>808,1209=>687,1210=>808,1211=>712,1212=>1026, +1213=>810,1214=>1026,1215=>810,1216=>372,1217=>1224,1218=>995,1219=>775,1220=>630,1221=>951,1222=>805, +1223=>837,1224=>691,1225=>957,1226=>807,1227=>808,1228=>687,1229=>1115,1230=>933,1231=>343,1232=>774, +1233=>675,1234=>774,1235=>675,1236=>1085,1237=>1048,1238=>683,1239=>678,1240=>849,1241=>678,1242=>849, +1243=>678,1244=>1224,1245=>995,1246=>710,1247=>581,1248=>772,1249=>641,1250=>837,1251=>701,1252=>837, +1253=>701,1254=>850,1255=>687,1256=>850,1257=>687,1258=>850,1259=>687,1260=>734,1261=>593,1262=>771, +1263=>652,1264=>771,1265=>652,1266=>771,1267=>652,1268=>808,1269=>687,1270=>637,1271=>522,1272=>1036, +1273=>904,1274=>666,1275=>543,1276=>771,1277=>645,1278=>771,1279=>645,1280=>762,1281=>608,1282=>1159, +1283=>893,1284=>1119,1285=>920,1286=>828,1287=>693,1288=>1242,1289=>1017,1290=>1289,1291=>1013,1292=>839, +1293=>638,1294=>938,1295=>803,1296=>696,1297=>557,1298=>831,1299=>732,1300=>1286,1301=>1068,1302=>1065, +1303=>979,1304=>1082,1305=>1013,1306=>850,1307=>716,1308=>1103,1309=>924,1312=>1267,1313=>1059,1314=>1273, +1315=>1017,1316=>957,1317=>807,1329=>984,1330=>812,1331=>984,1332=>984,1333=>812,1334=>777,1335=>812, +1336=>812,1337=>975,1338=>984,1339=>812,1340=>710,1341=>1078,1342=>1136,1343=>812,1344=>710,1345=>757, +1346=>984,1347=>876,1348=>984,1349=>793,1350=>984,1351=>812,1352=>812,1353=>812,1354=>958,1355=>777, +1356=>984,1357=>812,1358=>984,1359=>720,1360=>812,1361=>793,1362=>895,1363=>850,1364=>936,1365=>850, +1366=>720,1369=>366,1370=>380,1371=>550,1372=>550,1373=>380,1374=>546,1375=>521,1377=>1042,1378=>712, +1379=>866,1380=>868,1381=>712,1382=>817,1383=>653,1384=>712,1385=>811,1386=>817,1387=>712,1388=>498, +1389=>1018,1390=>716,1391=>712,1392=>712,1393=>716,1394=>819,1395=>712,1396=>751,1397=>343,1398=>882, +1399=>559,1400=>712,1401=>559,1402=>1042,1403=>559,1404=>863,1405=>712,1406=>813,1407=>1042,1408=>712, +1409=>716,1410=>571,1411=>1042,1412=>778,1413=>687,1414=>720,1415=>862,1417=>400,1418=>487,1456=>0, +1457=>0,1458=>0,1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1466=>0, +1467=>0,1468=>0,1469=>0,1470=>415,1471=>0,1472=>372,1473=>0,1474=>0,1475=>372,1478=>497, +1479=>0,1488=>751,1489=>673,1490=>537,1491=>654,1492=>712,1493=>343,1494=>491,1495=>712,1496=>724, +1497=>343,1498=>649,1499=>650,1500=>679,1501=>712,1502=>775,1503=>343,1504=>497,1505=>773,1506=>678, +1507=>718,1508=>687,1509=>628,1510=>751,1511=>729,1512=>649,1513=>949,1514=>751,1520=>664,1521=>664, +1522=>663,1523=>444,1524=>710,1542=>667,1543=>667,1545=>884,1546=>1157,1548=>380,1557=>0,1563=>400, +1567=>580,1569=>511,1570=>343,1571=>343,1572=>622,1573=>343,1574=>917,1575=>343,1576=>1005,1577=>590, +1578=>1005,1579=>1005,1580=>721,1581=>721,1582=>721,1583=>513,1584=>513,1585=>576,1586=>576,1587=>1380, +1588=>1380,1589=>1345,1590=>1345,1591=>1039,1592=>1039,1593=>683,1594=>683,1600=>342,1601=>1162,1602=>894, +1603=>917,1604=>868,1605=>733,1606=>854,1607=>590,1608=>622,1609=>917,1610=>917,1611=>0,1612=>0, +1613=>0,1614=>0,1615=>0,1616=>0,1617=>0,1618=>0,1619=>0,1620=>0,1621=>0,1623=>0, +1626=>500,1632=>610,1633=>610,1634=>610,1635=>610,1636=>610,1637=>610,1638=>610,1639=>610,1640=>610, +1641=>610,1642=>610,1643=>374,1644=>380,1645=>545,1646=>1005,1647=>894,1648=>0,1652=>292,1657=>1005, +1658=>1005,1659=>1005,1660=>1005,1661=>1005,1662=>1005,1663=>1005,1664=>1005,1665=>721,1666=>721,1667=>721, +1668=>721,1669=>721,1670=>721,1671=>721,1672=>445,1673=>445,1674=>445,1675=>445,1676=>445,1677=>445, +1678=>445,1679=>445,1680=>445,1681=>576,1682=>576,1683=>576,1684=>576,1685=>681,1686=>576,1687=>576, +1688=>576,1689=>576,1690=>1380,1691=>1380,1692=>1380,1693=>1345,1694=>1345,1695=>1039,1696=>683,1697=>1162, +1698=>1162,1699=>1162,1700=>1162,1701=>1162,1702=>1162,1703=>894,1704=>894,1705=>1024,1706=>1271,1707=>1024, +1708=>917,1709=>917,1710=>917,1711=>1024,1712=>1024,1713=>1024,1714=>1024,1715=>1024,1716=>1024,1717=>868, +1718=>868,1719=>868,1720=>868,1721=>854,1722=>854,1723=>854,1724=>854,1725=>854,1726=>938,1727=>721, +1734=>622,1740=>917,1742=>917,1749=>590,1776=>610,1777=>610,1778=>610,1779=>610,1780=>610,1781=>610, +1782=>610,1783=>610,1784=>610,1785=>610,1984=>696,1985=>696,1986=>696,1987=>696,1988=>696,1989=>696, +1990=>696,1991=>696,1992=>696,1993=>696,1994=>343,1995=>547,1996=>543,1997=>652,1998=>691,1999=>691, +2000=>594,2001=>691,2002=>904,2003=>551,2004=>551,2005=>627,2006=>688,2007=>444,2008=>1022,2009=>506, +2010=>826,2011=>691,2012=>652,2013=>912,2014=>627,2015=>707,2016=>506,2017=>652,2018=>574,2019=>627, +2020=>627,2021=>627,2022=>574,2023=>574,2027=>0,2028=>0,2029=>0,2030=>0,2031=>0,2032=>0, +2033=>0,2034=>0,2035=>0,2036=>380,2037=>380,2040=>691,2041=>691,2042=>415,3647=>696,3713=>790, +3714=>748,3716=>749,3719=>569,3720=>742,3722=>744,3725=>761,3732=>706,3733=>704,3734=>747,3735=>819, +3737=>730,3738=>727,3739=>727,3740=>922,3741=>827,3742=>866,3743=>866,3745=>836,3746=>761,3747=>770, +3749=>769,3751=>713,3754=>827,3755=>1031,3757=>724,3758=>784,3759=>934,3760=>688,3761=>0,3762=>610, +3763=>610,3764=>0,3765=>0,3766=>0,3767=>0,3768=>0,3769=>0,3771=>0,3772=>0,3773=>670, +3776=>516,3777=>860,3778=>516,3779=>650,3780=>632,3782=>759,3784=>0,3785=>0,3786=>0,3787=>0, +3788=>0,3789=>0,3792=>771,3793=>771,3794=>693,3795=>836,3796=>729,3797=>729,3798=>849,3799=>790, +3800=>759,3801=>910,3804=>1363,3805=>1363,4256=>918,4257=>744,4258=>739,4259=>837,4260=>649,4261=>773, +4262=>857,4263=>889,4264=>530,4265=>633,4266=>857,4267=>900,4268=>643,4269=>903,4270=>814,4271=>752, +4272=>869,4273=>643,4274=>643,4275=>886,4276=>886,4277=>733,4278=>653,4279=>643,4280=>646,4281=>643, +4282=>790,4283=>902,4284=>633,4285=>619,4286=>643,4287=>778,4288=>892,4289=>601,4290=>742,4291=>616, +4292=>633,4293=>742,4304=>553,4305=>552,4306=>596,4307=>815,4308=>562,4309=>563,4310=>553,4311=>827, +4312=>553,4313=>543,4314=>1074,4315=>563,4316=>563,4317=>812,4318=>552,4319=>591,4320=>822,4321=>563, +4322=>690,4323=>583,4324=>813,4325=>562,4326=>813,4327=>563,4328=>563,4329=>563,4330=>632,4331=>563, +4332=>563,4333=>552,4334=>563,4335=>563,4336=>558,4337=>604,4338=>552,4339=>552,4340=>553,4341=>605, +4342=>852,4343=>635,4344=>563,4345=>596,4346=>542,4347=>684,4348=>368,5121=>774,5122=>774,5123=>774, +5124=>774,5125=>905,5126=>905,5127=>905,5129=>905,5130=>905,5131=>905,5132=>1018,5133=>1009,5134=>1018, +5135=>1009,5136=>1018,5137=>1009,5138=>1149,5139=>1140,5140=>1149,5141=>1140,5142=>905,5143=>1149,5144=>1142, +5145=>1149,5146=>1142,5147=>905,5149=>310,5150=>529,5151=>425,5152=>425,5153=>395,5154=>395,5155=>395, +5156=>395,5157=>564,5158=>470,5159=>310,5160=>395,5161=>395,5162=>395,5163=>1213,5164=>986,5165=>1216, +5166=>1297,5167=>774,5168=>774,5169=>774,5170=>774,5171=>886,5172=>886,5173=>886,5175=>886,5176=>886, +5177=>886,5178=>1018,5179=>1009,5180=>1018,5181=>1009,5182=>1018,5183=>1009,5184=>1149,5185=>1140,5186=>1149, +5187=>1140,5188=>1149,5189=>1142,5190=>1149,5191=>1142,5192=>886,5193=>576,5194=>229,5196=>812,5197=>812, +5198=>812,5199=>812,5200=>815,5201=>815,5202=>815,5204=>815,5205=>815,5206=>815,5207=>1056,5208=>1048, +5209=>1056,5210=>1048,5211=>1056,5212=>1048,5213=>1060,5214=>1054,5215=>1060,5216=>1054,5217=>1060,5218=>1052, +5219=>1060,5220=>1052,5221=>1060,5222=>483,5223=>1005,5224=>1005,5225=>1023,5226=>1017,5227=>743,5228=>743, +5229=>743,5230=>743,5231=>743,5232=>743,5233=>743,5234=>743,5235=>743,5236=>1029,5237=>975,5238=>980, +5239=>975,5240=>980,5241=>975,5242=>1029,5243=>975,5244=>1029,5245=>975,5246=>980,5247=>975,5248=>980, +5249=>975,5250=>980,5251=>501,5252=>501,5253=>938,5254=>938,5255=>938,5256=>938,5257=>743,5258=>743, +5259=>743,5260=>743,5261=>743,5262=>743,5263=>743,5264=>743,5265=>743,5266=>1029,5267=>975,5268=>1029, +5269=>975,5270=>1029,5271=>975,5272=>1029,5273=>975,5274=>1029,5275=>975,5276=>1029,5277=>975,5278=>1029, +5279=>975,5280=>1029,5281=>501,5282=>501,5283=>626,5284=>626,5285=>626,5286=>626,5287=>626,5288=>626, +5289=>626,5290=>626,5291=>626,5292=>881,5293=>854,5294=>863,5295=>874,5296=>863,5297=>874,5298=>881, +5299=>874,5300=>881,5301=>874,5302=>863,5303=>874,5304=>863,5305=>874,5306=>863,5307=>436,5308=>548, +5309=>436,5312=>988,5313=>988,5314=>988,5315=>988,5316=>931,5317=>931,5318=>931,5319=>931,5320=>931, +5321=>1238,5322=>1247,5323=>1200,5324=>1228,5325=>1200,5326=>1228,5327=>931,5328=>660,5329=>497,5330=>660, +5331=>988,5332=>988,5333=>988,5334=>988,5335=>931,5336=>931,5337=>931,5338=>931,5339=>931,5340=>1231, +5341=>1247,5342=>1283,5343=>1228,5344=>1283,5345=>1228,5346=>1228,5347=>1214,5348=>1228,5349=>1214,5350=>1283, +5351=>1228,5352=>1283,5353=>1228,5354=>660,5356=>886,5357=>730,5358=>730,5359=>730,5360=>730,5361=>730, +5362=>730,5363=>730,5364=>730,5365=>730,5366=>998,5367=>958,5368=>967,5369=>989,5370=>967,5371=>989, +5372=>998,5373=>958,5374=>998,5375=>958,5376=>967,5377=>989,5378=>967,5379=>989,5380=>967,5381=>493, +5382=>460,5383=>493,5392=>923,5393=>923,5394=>923,5395=>1136,5396=>1136,5397=>1136,5398=>1136,5399=>1209, +5400=>1202,5401=>1209,5402=>1202,5403=>1209,5404=>1202,5405=>1431,5406=>1420,5407=>1431,5408=>1420,5409=>1431, +5410=>1420,5411=>1431,5412=>1420,5413=>746,5414=>776,5415=>776,5416=>776,5417=>776,5418=>776,5419=>776, +5420=>776,5421=>776,5422=>776,5423=>1003,5424=>1003,5425=>1013,5426=>996,5427=>1013,5428=>996,5429=>1003, +5430=>1003,5431=>1003,5432=>1003,5433=>1013,5434=>996,5435=>1013,5436=>996,5437=>1013,5438=>495,5440=>395, +5441=>510,5442=>1033,5443=>1033,5444=>976,5445=>976,5446=>976,5447=>976,5448=>733,5449=>733,5450=>733, +5451=>733,5452=>733,5453=>733,5454=>1003,5455=>959,5456=>495,5458=>886,5459=>774,5460=>774,5461=>774, +5462=>774,5463=>928,5464=>928,5465=>928,5466=>928,5467=>1172,5468=>1142,5469=>602,5470=>812,5471=>812, +5472=>812,5473=>812,5474=>812,5475=>812,5476=>815,5477=>815,5478=>815,5479=>815,5480=>1060,5481=>1052, +5482=>548,5492=>977,5493=>977,5494=>977,5495=>977,5496=>977,5497=>977,5498=>977,5499=>618,5500=>837, +5501=>510,5502=>1238,5503=>1238,5504=>1238,5505=>1238,5506=>1238,5507=>1238,5508=>1238,5509=>989,5514=>977, +5515=>977,5516=>977,5517=>977,5518=>1591,5519=>1591,5520=>1591,5521=>1295,5522=>1295,5523=>1591,5524=>1591, +5525=>848,5526=>1273,5536=>988,5537=>988,5538=>931,5539=>931,5540=>931,5541=>931,5542=>660,5543=>776, +5544=>776,5545=>776,5546=>776,5547=>776,5548=>776,5549=>776,5550=>495,5551=>743,5598=>830,5601=>830, +5702=>496,5703=>496,5742=>413,5743=>1238,5744=>1591,5745=>2016,5746=>2016,5747=>1720,5748=>1678,5749=>2016, +5750=>2016,5760=>543,5761=>637,5762=>945,5763=>1254,5764=>1563,5765=>1871,5766=>627,5767=>936,5768=>1254, +5769=>1559,5770=>1871,5771=>569,5772=>877,5773=>1187,5774=>1497,5775=>1807,5776=>637,5777=>945,5778=>1240, +5779=>1555,5780=>1871,5781=>569,5782=>569,5783=>789,5784=>1234,5785=>1559,5786=>740,5787=>638,5788=>638, +7424=>652,7425=>833,7426=>1048,7427=>608,7428=>593,7429=>676,7430=>676,7431=>559,7432=>557,7433=>343, +7434=>494,7435=>665,7436=>539,7437=>817,7438=>701,7439=>687,7440=>593,7441=>660,7442=>660,7443=>660, +7444=>1094,7446=>687,7447=>687,7448=>556,7449=>642,7450=>642,7451=>580,7452=>634,7453=>737,7454=>948, +7455=>695,7456=>652,7457=>924,7458=>582,7459=>646,7462=>539,7463=>652,7464=>691,7465=>556,7466=>781, +7467=>732,7468=>487,7469=>683,7470=>480,7472=>523,7473=>430,7474=>430,7475=>517,7476=>527,7477=>234, +7478=>234,7479=>488,7480=>401,7481=>626,7482=>527,7483=>527,7484=>535,7485=>509,7486=>461,7487=>485, +7488=>430,7489=>511,7490=>695,7491=>458,7492=>458,7493=>479,7494=>712,7495=>479,7496=>479,7497=>479, +7498=>479,7499=>386,7500=>386,7501=>479,7502=>219,7503=>487,7504=>664,7505=>456,7506=>488,7507=>414, +7508=>488,7509=>488,7510=>479,7511=>388,7512=>456,7513=>462,7514=>664,7515=>501,7517=>451,7518=>429, +7519=>433,7520=>493,7521=>406,7522=>219,7523=>315,7524=>456,7525=>501,7526=>451,7527=>429,7528=>451, +7529=>493,7530=>406,7543=>716,7544=>527,7547=>545,7549=>747,7557=>514,7579=>479,7580=>414,7581=>414, +7582=>488,7583=>386,7584=>377,7585=>348,7586=>479,7587=>456,7588=>347,7589=>281,7590=>347,7591=>347, +7592=>431,7593=>326,7594=>330,7595=>370,7596=>664,7597=>664,7598=>562,7599=>562,7600=>448,7601=>488, +7602=>542,7603=>422,7604=>396,7605=>388,7606=>583,7607=>494,7608=>399,7609=>451,7610=>501,7611=>417, +7612=>523,7613=>470,7614=>455,7615=>425,7620=>0,7621=>0,7622=>0,7623=>0,7624=>0,7625=>0, +7680=>774,7681=>675,7682=>762,7683=>716,7684=>762,7685=>716,7686=>762,7687=>716,7688=>734,7689=>593, +7690=>830,7691=>716,7692=>830,7693=>716,7694=>830,7695=>716,7696=>830,7697=>716,7698=>830,7699=>716, +7700=>683,7701=>678,7702=>683,7703=>678,7704=>683,7705=>678,7706=>683,7707=>678,7708=>683,7709=>678, +7710=>683,7711=>435,7712=>821,7713=>716,7714=>837,7715=>712,7716=>837,7717=>712,7718=>837,7719=>712, +7720=>837,7721=>712,7722=>837,7723=>712,7724=>372,7725=>343,7726=>372,7727=>343,7728=>775,7729=>665, +7730=>775,7731=>665,7732=>775,7733=>665,7734=>637,7735=>343,7736=>637,7737=>343,7738=>637,7739=>343, +7740=>637,7741=>343,7742=>995,7743=>1042,7744=>995,7745=>1042,7746=>995,7747=>1042,7748=>837,7749=>712, +7750=>837,7751=>712,7752=>837,7753=>712,7754=>837,7755=>712,7756=>850,7757=>687,7758=>850,7759=>687, +7760=>850,7761=>687,7762=>850,7763=>687,7764=>733,7765=>716,7766=>733,7767=>716,7768=>770,7769=>493, +7770=>770,7771=>493,7772=>770,7773=>493,7774=>770,7775=>493,7776=>720,7777=>595,7778=>720,7779=>595, +7780=>720,7781=>595,7782=>720,7783=>595,7784=>720,7785=>595,7786=>682,7787=>478,7788=>682,7789=>478, +7790=>682,7791=>478,7792=>682,7793=>478,7794=>812,7795=>712,7796=>812,7797=>712,7798=>812,7799=>712, +7800=>812,7801=>712,7802=>812,7803=>712,7804=>774,7805=>652,7806=>774,7807=>652,7808=>1103,7809=>924, +7810=>1103,7811=>924,7812=>1103,7813=>924,7814=>1103,7815=>924,7816=>1103,7817=>924,7818=>771,7819=>645, +7820=>771,7821=>645,7822=>724,7823=>652,7824=>725,7825=>582,7826=>725,7827=>582,7828=>725,7829=>582, +7830=>712,7831=>478,7832=>924,7833=>652,7834=>675,7835=>435,7836=>435,7837=>435,7838=>896,7839=>687, +7840=>774,7841=>675,7842=>774,7843=>675,7844=>774,7845=>675,7846=>774,7847=>675,7848=>774,7849=>675, +7850=>774,7851=>675,7852=>774,7853=>675,7854=>774,7855=>675,7856=>774,7857=>675,7858=>774,7859=>675, +7860=>774,7861=>675,7862=>774,7863=>675,7864=>683,7865=>678,7866=>683,7867=>678,7868=>683,7869=>678, +7870=>683,7871=>678,7872=>683,7873=>678,7874=>683,7875=>678,7876=>683,7877=>678,7878=>683,7879=>678, +7880=>372,7881=>343,7882=>372,7883=>343,7884=>850,7885=>687,7886=>850,7887=>687,7888=>850,7889=>687, +7890=>850,7891=>687,7892=>850,7893=>687,7894=>850,7895=>687,7896=>850,7897=>687,7898=>874,7899=>687, +7900=>874,7901=>687,7902=>874,7903=>687,7904=>874,7905=>687,7906=>874,7907=>687,7908=>812,7909=>712, +7910=>812,7911=>712,7912=>835,7913=>712,7914=>835,7915=>712,7916=>835,7917=>712,7918=>835,7919=>712, +7920=>835,7921=>712,7922=>724,7923=>652,7924=>724,7925=>652,7926=>724,7927=>652,7928=>724,7929=>652, +7930=>953,7931=>644,7936=>687,7937=>687,7938=>687,7939=>687,7940=>687,7941=>687,7942=>687,7943=>687, +7944=>774,7945=>774,7946=>1041,7947=>1043,7948=>935,7949=>963,7950=>835,7951=>859,7952=>557,7953=>557, +7954=>557,7955=>557,7956=>557,7957=>557,7960=>792,7961=>794,7962=>1100,7963=>1096,7964=>1023,7965=>1052, +7968=>712,7969=>712,7970=>712,7971=>712,7972=>712,7973=>712,7974=>712,7975=>712,7976=>945,7977=>951, +7978=>1250,7979=>1250,7980=>1180,7981=>1206,7982=>1054,7983=>1063,7984=>390,7985=>390,7986=>390,7987=>390, +7988=>390,7989=>390,7990=>390,7991=>390,7992=>483,7993=>489,7994=>777,7995=>785,7996=>712,7997=>738, +7998=>604,7999=>604,8000=>687,8001=>687,8002=>687,8003=>687,8004=>687,8005=>687,8008=>892,8009=>933, +8010=>1221,8011=>1224,8012=>1053,8013=>1082,8016=>675,8017=>675,8018=>675,8019=>675,8020=>675,8021=>675, +8022=>675,8023=>675,8025=>930,8027=>1184,8029=>1199,8031=>1049,8032=>869,8033=>869,8034=>869,8035=>869, +8036=>869,8037=>869,8038=>869,8039=>869,8040=>909,8041=>958,8042=>1246,8043=>1251,8044=>1076,8045=>1105, +8046=>1028,8047=>1076,8048=>687,8049=>687,8050=>557,8051=>557,8052=>712,8053=>712,8054=>390,8055=>390, +8056=>687,8057=>687,8058=>675,8059=>675,8060=>869,8061=>869,8064=>687,8065=>687,8066=>687,8067=>687, +8068=>687,8069=>687,8070=>687,8071=>687,8072=>774,8073=>774,8074=>1041,8075=>1043,8076=>935,8077=>963, +8078=>835,8079=>859,8080=>712,8081=>712,8082=>712,8083=>712,8084=>712,8085=>712,8086=>712,8087=>712, +8088=>945,8089=>951,8090=>1250,8091=>1250,8092=>1180,8093=>1206,8094=>1054,8095=>1063,8096=>869,8097=>869, +8098=>869,8099=>869,8100=>869,8101=>869,8102=>869,8103=>869,8104=>909,8105=>958,8106=>1246,8107=>1251, +8108=>1076,8109=>1105,8110=>1028,8111=>1076,8112=>687,8113=>687,8114=>687,8115=>687,8116=>687,8118=>687, +8119=>687,8120=>774,8121=>774,8122=>876,8123=>797,8124=>774,8125=>500,8126=>500,8127=>500,8128=>500, +8129=>500,8130=>712,8131=>712,8132=>712,8134=>712,8135=>712,8136=>929,8137=>846,8138=>1080,8139=>1009, +8140=>837,8141=>500,8142=>500,8143=>500,8144=>390,8145=>390,8146=>390,8147=>390,8150=>390,8151=>390, +8152=>372,8153=>372,8154=>621,8155=>563,8157=>500,8158=>500,8159=>500,8160=>675,8161=>675,8162=>675, +8163=>675,8164=>716,8165=>716,8166=>675,8167=>675,8168=>724,8169=>724,8170=>1020,8171=>980,8172=>838, +8173=>500,8174=>500,8175=>500,8178=>869,8179=>869,8180=>869,8182=>869,8183=>869,8184=>1065,8185=>891, +8186=>1084,8187=>894,8188=>850,8189=>500,8190=>500,8192=>500,8193=>1000,8194=>500,8195=>1000,8196=>330, +8197=>250,8198=>167,8199=>696,8200=>380,8201=>200,8202=>100,8203=>0,8204=>0,8205=>0,8206=>0, +8207=>0,8208=>415,8209=>415,8210=>696,8213=>1000,8214=>500,8215=>500,8219=>380,8223=>657,8227=>639, +8228=>333,8229=>667,8231=>348,8232=>0,8233=>0,8234=>0,8235=>0,8236=>0,8237=>0,8238=>0, +8239=>200,8241=>1887,8242=>264,8243=>447,8244=>630,8245=>264,8246=>447,8247=>630,8248=>733,8251=>972, +8252=>627,8253=>580,8254=>500,8255=>828,8256=>828,8257=>329,8258=>1023,8259=>500,8260=>167,8261=>457, +8262=>457,8263=>1030,8264=>829,8265=>829,8266=>513,8267=>636,8268=>500,8269=>500,8270=>523,8271=>400, +8272=>828,8273=>523,8274=>556,8275=>1000,8276=>828,8277=>838,8278=>684,8279=>813,8280=>838,8281=>838, +8282=>380,8283=>872,8284=>838,8285=>380,8286=>380,8287=>222,8288=>0,8289=>0,8290=>0,8291=>0, +8292=>0,8298=>0,8299=>0,8300=>0,8301=>0,8302=>0,8303=>0,8304=>438,8305=>219,8308=>438, +8309=>438,8310=>438,8311=>438,8312=>438,8313=>438,8314=>528,8315=>528,8316=>528,8317=>288,8318=>288, +8319=>456,8320=>438,8321=>438,8322=>438,8323=>438,8324=>438,8325=>438,8326=>438,8327=>438,8328=>438, +8329=>438,8330=>528,8331=>528,8332=>528,8333=>288,8334=>288,8336=>458,8337=>479,8338=>488,8339=>413, +8340=>479,8352=>929,8353=>696,8354=>696,8355=>696,8356=>696,8357=>1042,8358=>837,8359=>1518,8360=>1205, +8361=>1103,8362=>904,8363=>696,8365=>696,8366=>696,8367=>1392,8368=>696,8369=>696,8370=>696,8371=>696, +8372=>859,8373=>696,8376=>696,8377=>696,8400=>0,8401=>0,8406=>0,8407=>0,8411=>0,8412=>0, +8417=>0,8448=>1120,8449=>1170,8450=>734,8451=>1211,8452=>896,8453=>1091,8454=>1144,8455=>614,8456=>698, +8457=>1086,8459=>1073,8460=>913,8461=>888,8462=>712,8463=>712,8464=>597,8465=>697,8466=>856,8467=>472, +8468=>974,8469=>837,8470=>1203,8471=>1000,8472=>697,8473=>750,8474=>850,8475=>938,8476=>814,8477=>801, +8478=>896,8479=>710,8480=>1020,8481=>1281,8483=>755,8484=>754,8485=>578,8486=>850,8487=>850,8488=>763, +8489=>338,8490=>775,8491=>774,8492=>928,8493=>818,8494=>854,8495=>636,8496=>729,8497=>808,8498=>683, +8499=>1184,8500=>465,8501=>794,8502=>731,8503=>494,8504=>684,8505=>380,8506=>945,8507=>1348,8508=>790, +8509=>737,8510=>654,8511=>863,8512=>840,8513=>775,8514=>557,8515=>637,8516=>760,8517=>830,8518=>716, +8519=>678,8520=>343,8521=>343,8523=>872,8526=>547,8528=>1035,8529=>1035,8530=>1483,8531=>1035,8532=>1035, +8533=>1035,8534=>1035,8535=>1035,8536=>1035,8537=>1035,8538=>1035,8539=>1035,8540=>1035,8541=>1035,8542=>1035, +8543=>615,8544=>372,8545=>659,8546=>945,8547=>1099,8548=>774,8549=>1099,8550=>1386,8551=>1672,8552=>1121, +8553=>771,8554=>1120,8555=>1407,8556=>637,8557=>734,8558=>830,8559=>995,8560=>343,8561=>607,8562=>872, +8563=>984,8564=>652,8565=>962,8566=>1227,8567=>1491,8568=>969,8569=>645,8570=>969,8571=>1233,8572=>343, +8573=>593,8574=>716,8575=>1042,8576=>1289,8577=>830,8578=>1289,8579=>734,8580=>593,8581=>734,8585=>1035, +8592=>838,8593=>838,8594=>838,8595=>838,8596=>838,8597=>838,8598=>838,8599=>838,8600=>838,8601=>838, +8602=>838,8603=>838,8604=>838,8605=>838,8606=>838,8607=>838,8608=>838,8609=>838,8610=>838,8611=>838, +8612=>838,8613=>838,8614=>838,8615=>838,8616=>838,8617=>838,8618=>838,8619=>838,8620=>838,8621=>838, +8622=>838,8623=>838,8624=>838,8625=>838,8626=>838,8627=>838,8628=>838,8629=>838,8630=>838,8631=>838, +8632=>838,8633=>838,8634=>838,8635=>838,8636=>838,8637=>838,8638=>838,8639=>838,8640=>838,8641=>838, +8642=>838,8643=>838,8644=>838,8645=>838,8646=>838,8647=>838,8648=>838,8649=>838,8650=>838,8651=>838, +8652=>838,8653=>838,8654=>838,8655=>838,8656=>838,8657=>838,8658=>838,8659=>838,8660=>838,8661=>838, +8662=>838,8663=>838,8664=>838,8665=>838,8666=>838,8667=>838,8668=>838,8669=>838,8670=>838,8671=>838, +8672=>838,8673=>838,8674=>838,8675=>838,8676=>838,8677=>838,8678=>838,8679=>838,8680=>838,8681=>838, +8682=>838,8683=>838,8684=>838,8685=>838,8686=>838,8687=>838,8688=>838,8689=>838,8690=>838,8691=>838, +8692=>838,8693=>838,8694=>838,8695=>838,8696=>838,8697=>838,8698=>838,8699=>838,8700=>838,8701=>838, +8702=>838,8703=>838,8704=>774,8705=>696,8706=>544,8707=>683,8708=>683,8709=>856,8710=>697,8711=>697, +8712=>896,8713=>896,8714=>750,8715=>896,8716=>896,8717=>750,8718=>636,8719=>787,8720=>787,8721=>718, +8722=>838,8723=>838,8724=>696,8725=>365,8726=>696,8727=>838,8728=>626,8729=>380,8730=>667,8731=>667, +8732=>667,8733=>712,8734=>833,8735=>838,8736=>896,8737=>896,8738=>838,8739=>500,8740=>500,8741=>500, +8742=>500,8743=>812,8744=>812,8745=>812,8746=>812,8747=>610,8748=>929,8749=>1295,8750=>563,8751=>977, +8752=>1313,8753=>563,8754=>563,8755=>563,8756=>696,8757=>696,8758=>294,8759=>696,8760=>838,8761=>838, +8762=>838,8763=>838,8764=>838,8765=>838,8766=>838,8767=>838,8768=>375,8769=>838,8770=>838,8771=>838, +8772=>838,8773=>838,8774=>838,8775=>838,8776=>838,8777=>838,8778=>838,8779=>838,8780=>838,8781=>838, +8782=>838,8783=>838,8784=>838,8785=>838,8786=>838,8787=>838,8788=>1063,8789=>1063,8790=>838,8791=>838, +8792=>838,8793=>838,8794=>838,8795=>838,8796=>838,8797=>838,8798=>838,8799=>838,8800=>838,8801=>838, +8802=>838,8803=>838,8804=>838,8805=>838,8806=>838,8807=>838,8808=>841,8809=>841,8810=>1047,8811=>1047, +8812=>500,8813=>838,8814=>838,8815=>838,8816=>838,8817=>838,8818=>838,8819=>838,8820=>838,8821=>838, +8822=>838,8823=>838,8824=>838,8825=>838,8826=>838,8827=>838,8828=>838,8829=>838,8830=>838,8831=>838, +8832=>838,8833=>838,8834=>838,8835=>838,8836=>838,8837=>838,8838=>838,8839=>838,8840=>838,8841=>838, +8842=>838,8843=>838,8844=>812,8845=>812,8846=>812,8847=>838,8848=>838,8849=>838,8850=>838,8851=>796, +8852=>796,8853=>838,8854=>838,8855=>838,8856=>838,8857=>838,8858=>838,8859=>838,8860=>838,8861=>838, +8862=>838,8863=>838,8864=>838,8865=>838,8866=>914,8867=>914,8868=>914,8869=>914,8870=>542,8871=>542, +8872=>914,8873=>914,8874=>914,8875=>914,8876=>914,8877=>914,8878=>914,8879=>914,8880=>838,8881=>838, +8882=>838,8883=>838,8884=>838,8885=>838,8886=>1000,8887=>1000,8888=>838,8889=>838,8890=>542,8891=>812, +8892=>812,8893=>812,8894=>838,8895=>838,8896=>843,8897=>843,8898=>843,8899=>843,8900=>494,8901=>380, +8902=>626,8903=>838,8904=>1000,8905=>1000,8906=>1000,8907=>1000,8908=>1000,8909=>838,8910=>812,8911=>812, +8912=>838,8913=>838,8914=>838,8915=>838,8916=>838,8917=>838,8918=>838,8919=>838,8920=>1422,8921=>1422, +8922=>838,8923=>838,8924=>838,8925=>838,8926=>838,8927=>838,8928=>838,8929=>838,8930=>838,8931=>838, +8932=>838,8933=>838,8934=>838,8935=>838,8936=>838,8937=>838,8938=>838,8939=>838,8940=>838,8941=>838, +8942=>1000,8943=>1000,8944=>1000,8945=>1000,8946=>1158,8947=>896,8948=>750,8949=>896,8950=>896,8951=>750, +8952=>896,8953=>896,8954=>1158,8955=>896,8956=>750,8957=>896,8958=>750,8959=>896,8960=>602,8961=>602, +8962=>716,8963=>838,8964=>838,8965=>838,8966=>838,8967=>488,8968=>457,8969=>457,8970=>457,8971=>457, +8972=>809,8973=>809,8974=>809,8975=>809,8976=>838,8977=>539,8984=>928,8985=>838,8988=>469,8989=>469, +8990=>469,8991=>469,8992=>610,8993=>610,8996=>1152,8997=>1152,8998=>1414,8999=>1152,9000=>1443,9003=>1414, +9004=>873,9075=>390,9076=>716,9077=>869,9082=>687,9085=>863,9095=>1152,9108=>873,9115=>500,9116=>500, +9117=>500,9118=>500,9119=>500,9120=>500,9121=>500,9122=>500,9123=>500,9124=>500,9125=>500,9126=>500, +9127=>750,9128=>750,9129=>750,9130=>750,9131=>750,9132=>750,9133=>750,9134=>610,9166=>838,9167=>945, +9187=>873,9189=>769,9192=>696,9250=>716,9251=>716,9312=>847,9313=>847,9314=>847,9315=>847,9316=>847, +9317=>847,9318=>847,9319=>847,9320=>847,9321=>847,9600=>769,9601=>769,9602=>769,9603=>769,9604=>769, +9605=>769,9606=>769,9607=>769,9608=>769,9609=>769,9610=>769,9611=>769,9612=>769,9613=>769,9614=>769, +9615=>769,9616=>769,9617=>769,9618=>769,9619=>769,9620=>769,9621=>769,9622=>769,9623=>769,9624=>769, +9625=>769,9626=>769,9627=>769,9628=>769,9629=>769,9630=>769,9631=>769,9632=>945,9633=>945,9634=>945, +9635=>945,9636=>945,9637=>945,9638=>945,9639=>945,9640=>945,9641=>945,9642=>678,9643=>678,9644=>945, +9645=>945,9646=>550,9647=>550,9648=>769,9649=>769,9650=>769,9651=>769,9652=>502,9653=>502,9654=>769, +9655=>769,9656=>502,9657=>502,9658=>769,9659=>769,9660=>769,9661=>769,9662=>502,9663=>502,9664=>769, +9665=>769,9666=>502,9667=>502,9668=>769,9669=>769,9670=>769,9671=>769,9672=>769,9673=>873,9674=>494, +9675=>873,9676=>873,9677=>873,9678=>873,9679=>873,9680=>873,9681=>873,9682=>873,9683=>873,9684=>873, +9685=>873,9686=>527,9687=>527,9688=>840,9689=>970,9690=>970,9691=>970,9692=>387,9693=>387,9694=>387, +9695=>387,9696=>769,9697=>769,9698=>769,9699=>769,9700=>769,9701=>769,9702=>639,9703=>945,9704=>945, +9705=>945,9706=>945,9707=>945,9708=>769,9709=>769,9710=>769,9711=>1119,9712=>945,9713=>945,9714=>945, +9715=>945,9716=>873,9717=>873,9718=>873,9719=>873,9720=>769,9721=>769,9722=>769,9723=>830,9724=>830, +9725=>732,9726=>732,9727=>769,9728=>896,9729=>1000,9730=>896,9731=>896,9732=>896,9733=>896,9734=>896, +9735=>573,9736=>896,9737=>896,9738=>888,9739=>888,9740=>671,9741=>1013,9742=>1246,9743=>1250,9744=>896, +9745=>896,9746=>896,9747=>532,9748=>896,9749=>896,9750=>896,9751=>896,9752=>896,9753=>896,9754=>896, +9755=>896,9756=>896,9757=>609,9758=>896,9759=>609,9760=>896,9761=>896,9762=>896,9763=>896,9764=>669, +9765=>746,9766=>649,9767=>784,9768=>545,9769=>896,9770=>896,9771=>896,9772=>710,9773=>896,9774=>896, +9775=>896,9776=>896,9777=>896,9778=>896,9779=>896,9780=>896,9781=>896,9782=>896,9783=>896,9784=>896, +9785=>896,9786=>896,9787=>896,9788=>896,9789=>896,9790=>896,9791=>614,9792=>732,9793=>732,9794=>896, +9795=>896,9796=>896,9797=>896,9798=>896,9799=>896,9800=>896,9801=>896,9802=>896,9803=>896,9804=>896, +9805=>896,9806=>896,9807=>896,9808=>896,9809=>896,9810=>896,9811=>896,9812=>896,9813=>896,9814=>896, +9815=>896,9816=>896,9817=>896,9818=>896,9819=>896,9820=>896,9821=>896,9822=>896,9823=>896,9824=>896, +9825=>896,9826=>896,9827=>896,9828=>896,9829=>896,9830=>896,9831=>896,9832=>896,9833=>472,9834=>638, +9835=>896,9836=>896,9837=>472,9838=>357,9839=>484,9840=>748,9841=>766,9842=>896,9843=>896,9844=>896, +9845=>896,9846=>896,9847=>896,9848=>896,9849=>896,9850=>896,9851=>896,9852=>896,9853=>896,9854=>896, +9855=>896,9856=>869,9857=>869,9858=>869,9859=>869,9860=>869,9861=>869,9862=>896,9863=>896,9864=>896, +9865=>896,9866=>896,9867=>896,9868=>896,9869=>896,9870=>896,9871=>896,9872=>896,9873=>896,9874=>896, +9875=>896,9876=>896,9877=>541,9878=>896,9879=>896,9880=>896,9881=>896,9882=>896,9883=>896,9884=>896, +9888=>896,9889=>702,9890=>1004,9891=>1089,9892=>1175,9893=>903,9894=>838,9895=>838,9896=>838,9897=>838, +9898=>838,9899=>838,9900=>838,9901=>838,9902=>838,9903=>838,9904=>844,9905=>838,9906=>732,9907=>732, +9908=>732,9909=>732,9910=>850,9911=>732,9912=>732,9920=>838,9921=>838,9922=>838,9923=>838,9985=>838, +9986=>838,9987=>838,9988=>838,9990=>838,9991=>838,9992=>838,9993=>838,9996=>838,9997=>838,9998=>838, +9999=>838,10000=>838,10001=>838,10002=>838,10003=>838,10004=>838,10005=>838,10006=>838,10007=>838,10008=>838, +10009=>838,10010=>838,10011=>838,10012=>838,10013=>838,10014=>838,10015=>838,10016=>838,10017=>838,10018=>838, +10019=>838,10020=>838,10021=>838,10022=>838,10023=>838,10025=>838,10026=>838,10027=>838,10028=>838,10029=>838, +10030=>838,10031=>838,10032=>838,10033=>838,10034=>838,10035=>838,10036=>838,10037=>838,10038=>838,10039=>838, +10040=>838,10041=>838,10042=>838,10043=>838,10044=>838,10045=>838,10046=>838,10047=>838,10048=>838,10049=>838, +10050=>838,10051=>838,10052=>838,10053=>838,10054=>838,10055=>838,10056=>838,10057=>838,10058=>838,10059=>838, +10061=>896,10063=>896,10064=>896,10065=>896,10066=>896,10070=>896,10072=>838,10073=>838,10074=>838,10075=>347, +10076=>347,10077=>587,10078=>587,10081=>838,10082=>838,10083=>838,10084=>838,10085=>838,10086=>838,10087=>838, +10088=>838,10089=>838,10090=>838,10091=>838,10092=>838,10093=>838,10094=>838,10095=>838,10096=>838,10097=>838, +10098=>838,10099=>838,10100=>838,10101=>838,10102=>847,10103=>847,10104=>847,10105=>847,10106=>847,10107=>847, +10108=>847,10109=>847,10110=>847,10111=>847,10112=>838,10113=>838,10114=>838,10115=>838,10116=>838,10117=>838, +10118=>838,10119=>838,10120=>838,10121=>838,10122=>838,10123=>838,10124=>838,10125=>838,10126=>838,10127=>838, +10128=>838,10129=>838,10130=>838,10131=>838,10132=>838,10136=>838,10137=>838,10138=>838,10139=>838,10140=>838, +10141=>838,10142=>838,10143=>838,10144=>838,10145=>838,10146=>838,10147=>838,10148=>838,10149=>838,10150=>838, +10151=>838,10152=>838,10153=>838,10154=>838,10155=>838,10156=>838,10157=>838,10158=>838,10159=>838,10161=>838, +10162=>838,10163=>838,10164=>838,10165=>838,10166=>838,10167=>838,10168=>838,10169=>838,10170=>838,10171=>838, +10172=>838,10173=>838,10174=>838,10181=>457,10182=>457,10208=>494,10214=>487,10215=>487,10216=>457,10217=>457, +10218=>721,10219=>721,10224=>838,10225=>838,10226=>838,10227=>838,10228=>1157,10229=>1434,10230=>1434,10231=>1434, +10232=>1434,10233=>1434,10234=>1434,10235=>1434,10236=>1434,10237=>1434,10238=>1434,10239=>1434,10240=>781,10241=>781, +10242=>781,10243=>781,10244=>781,10245=>781,10246=>781,10247=>781,10248=>781,10249=>781,10250=>781,10251=>781, +10252=>781,10253=>781,10254=>781,10255=>781,10256=>781,10257=>781,10258=>781,10259=>781,10260=>781,10261=>781, +10262=>781,10263=>781,10264=>781,10265=>781,10266=>781,10267=>781,10268=>781,10269=>781,10270=>781,10271=>781, +10272=>781,10273=>781,10274=>781,10275=>781,10276=>781,10277=>781,10278=>781,10279=>781,10280=>781,10281=>781, +10282=>781,10283=>781,10284=>781,10285=>781,10286=>781,10287=>781,10288=>781,10289=>781,10290=>781,10291=>781, +10292=>781,10293=>781,10294=>781,10295=>781,10296=>781,10297=>781,10298=>781,10299=>781,10300=>781,10301=>781, +10302=>781,10303=>781,10304=>781,10305=>781,10306=>781,10307=>781,10308=>781,10309=>781,10310=>781,10311=>781, +10312=>781,10313=>781,10314=>781,10315=>781,10316=>781,10317=>781,10318=>781,10319=>781,10320=>781,10321=>781, +10322=>781,10323=>781,10324=>781,10325=>781,10326=>781,10327=>781,10328=>781,10329=>781,10330=>781,10331=>781, +10332=>781,10333=>781,10334=>781,10335=>781,10336=>781,10337=>781,10338=>781,10339=>781,10340=>781,10341=>781, +10342=>781,10343=>781,10344=>781,10345=>781,10346=>781,10347=>781,10348=>781,10349=>781,10350=>781,10351=>781, +10352=>781,10353=>781,10354=>781,10355=>781,10356=>781,10357=>781,10358=>781,10359=>781,10360=>781,10361=>781, +10362=>781,10363=>781,10364=>781,10365=>781,10366=>781,10367=>781,10368=>781,10369=>781,10370=>781,10371=>781, +10372=>781,10373=>781,10374=>781,10375=>781,10376=>781,10377=>781,10378=>781,10379=>781,10380=>781,10381=>781, +10382=>781,10383=>781,10384=>781,10385=>781,10386=>781,10387=>781,10388=>781,10389=>781,10390=>781,10391=>781, +10392=>781,10393=>781,10394=>781,10395=>781,10396=>781,10397=>781,10398=>781,10399=>781,10400=>781,10401=>781, +10402=>781,10403=>781,10404=>781,10405=>781,10406=>781,10407=>781,10408=>781,10409=>781,10410=>781,10411=>781, +10412=>781,10413=>781,10414=>781,10415=>781,10416=>781,10417=>781,10418=>781,10419=>781,10420=>781,10421=>781, +10422=>781,10423=>781,10424=>781,10425=>781,10426=>781,10427=>781,10428=>781,10429=>781,10430=>781,10431=>781, +10432=>781,10433=>781,10434=>781,10435=>781,10436=>781,10437=>781,10438=>781,10439=>781,10440=>781,10441=>781, +10442=>781,10443=>781,10444=>781,10445=>781,10446=>781,10447=>781,10448=>781,10449=>781,10450=>781,10451=>781, +10452=>781,10453=>781,10454=>781,10455=>781,10456=>781,10457=>781,10458=>781,10459=>781,10460=>781,10461=>781, +10462=>781,10463=>781,10464=>781,10465=>781,10466=>781,10467=>781,10468=>781,10469=>781,10470=>781,10471=>781, +10472=>781,10473=>781,10474=>781,10475=>781,10476=>781,10477=>781,10478=>781,10479=>781,10480=>781,10481=>781, +10482=>781,10483=>781,10484=>781,10485=>781,10486=>781,10487=>781,10488=>781,10489=>781,10490=>781,10491=>781, +10492=>781,10493=>781,10494=>781,10495=>781,10502=>838,10503=>838,10506=>838,10507=>838,10560=>838,10561=>838, +10627=>753,10628=>753,10702=>838,10703=>1046,10704=>1046,10705=>1000,10706=>1000,10707=>1000,10708=>1000,10709=>1000, +10731=>494,10746=>838,10747=>838,10752=>1000,10753=>1000,10754=>1000,10764=>1661,10765=>563,10766=>563,10767=>563, +10768=>563,10769=>563,10770=>563,10771=>563,10772=>563,10773=>563,10774=>563,10775=>563,10776=>563,10777=>563, +10778=>563,10779=>563,10780=>563,10799=>838,10877=>838,10878=>838,10879=>838,10880=>838,10881=>838,10882=>838, +10883=>838,10884=>838,10885=>838,10886=>838,10887=>838,10888=>838,10889=>838,10890=>838,10891=>838,10892=>838, +10893=>838,10894=>838,10895=>838,10896=>838,10897=>838,10898=>838,10899=>838,10900=>838,10901=>838,10902=>838, +10903=>838,10904=>838,10905=>838,10906=>838,10907=>838,10908=>838,10909=>838,10910=>838,10911=>838,10912=>838, +10926=>838,10927=>838,10928=>838,10929=>838,10930=>838,10931=>838,10932=>838,10933=>838,10934=>838,10935=>838, +10936=>838,10937=>838,10938=>838,11001=>838,11002=>838,11008=>838,11009=>838,11010=>838,11011=>838,11012=>838, +11013=>838,11014=>838,11015=>838,11016=>838,11017=>838,11018=>838,11019=>838,11020=>838,11021=>838,11022=>838, +11023=>838,11024=>838,11025=>838,11026=>945,11027=>945,11028=>945,11029=>945,11030=>769,11031=>769,11032=>769, +11033=>769,11034=>945,11039=>869,11040=>869,11041=>873,11042=>873,11043=>873,11044=>1119,11091=>869,11092=>869, +11360=>637,11361=>360,11362=>637,11363=>733,11364=>770,11365=>675,11366=>478,11367=>956,11368=>712,11369=>775, +11370=>665,11371=>725,11372=>582,11373=>860,11374=>995,11375=>774,11376=>860,11377=>778,11378=>1221,11379=>1056, +11380=>652,11381=>698,11382=>565,11383=>782,11385=>538,11386=>687,11387=>559,11388=>219,11389=>487,11390=>720, +11391=>725,11568=>691,11569=>941,11570=>941,11571=>725,11572=>725,11573=>725,11574=>676,11575=>774,11576=>774, +11577=>683,11578=>683,11579=>802,11580=>989,11581=>761,11582=>623,11583=>761,11584=>941,11585=>941,11586=>373, +11587=>740,11588=>837,11589=>914,11590=>672,11591=>737,11592=>680,11593=>683,11594=>602,11595=>1039,11596=>778, +11597=>837,11598=>683,11599=>372,11600=>778,11601=>373,11602=>725,11603=>691,11604=>941,11605=>941,11606=>837, +11607=>373,11608=>836,11609=>941,11610=>941,11611=>734,11612=>876,11613=>771,11614=>734,11615=>683,11616=>774, +11617=>837,11618=>683,11619=>850,11620=>697,11621=>850,11631=>716,11800=>580,11810=>457,11811=>457,11812=>457, +11813=>457,11822=>580,19904=>896,19905=>896,19906=>896,19907=>896,19908=>896,19909=>896,19910=>896,19911=>896, +19912=>896,19913=>896,19914=>896,19915=>896,19916=>896,19917=>896,19918=>896,19919=>896,19920=>896,19921=>896, +19922=>896,19923=>896,19924=>896,19925=>896,19926=>896,19927=>896,19928=>896,19929=>896,19930=>896,19931=>896, +19932=>896,19933=>896,19934=>896,19935=>896,19936=>896,19937=>896,19938=>896,19939=>896,19940=>896,19941=>896, +19942=>896,19943=>896,19944=>896,19945=>896,19946=>896,19947=>896,19948=>896,19949=>896,19950=>896,19951=>896, +19952=>896,19953=>896,19954=>896,19955=>896,19956=>896,19957=>896,19958=>896,19959=>896,19960=>896,19961=>896, +19962=>896,19963=>896,19964=>896,19965=>896,19966=>896,19967=>896,42564=>720,42565=>595,42566=>436,42567=>440, +42572=>1405,42573=>1173,42576=>1234,42577=>1027,42580=>1174,42581=>972,42582=>1093,42583=>958,42594=>1085,42595=>924, +42596=>1096,42597=>912,42598=>1260,42599=>997,42600=>850,42601=>687,42602=>1037,42603=>868,42604=>1406,42605=>1106, +42606=>961,42634=>963,42635=>787,42636=>682,42637=>580,42644=>808,42645=>712,42760=>500,42761=>500,42762=>500, +42763=>500,42764=>500,42765=>500,42766=>500,42767=>500,42768=>500,42769=>500,42770=>500,42771=>500,42772=>500, +42773=>500,42774=>500,42779=>400,42780=>400,42781=>287,42782=>287,42783=>287,42786=>444,42787=>390,42788=>540, +42789=>540,42790=>837,42791=>712,42792=>1031,42793=>857,42794=>696,42795=>557,42800=>559,42801=>595,42802=>1349, +42803=>1052,42804=>1284,42805=>1064,42806=>1216,42807=>1054,42808=>1079,42809=>922,42810=>1079,42811=>922,42812=>1035, +42813=>922,42814=>698,42815=>549,42822=>850,42823=>542,42824=>683,42825=>531,42826=>918,42827=>814,42830=>1406, +42831=>1106,42832=>733,42833=>716,42834=>948,42835=>937,42838=>850,42839=>716,42852=>738,42853=>716,42854=>738, +42855=>716,42880=>637,42881=>343,42882=>837,42883=>712,42889=>400,42890=>386,42891=>456,42892=>306,42893=>808, +43003=>683,43004=>733,43005=>995,43006=>372,43007=>1325,61184=>216,61185=>242,61186=>267,61187=>277,61188=>282, +61189=>242,61190=>216,61191=>242,61192=>267,61193=>277,61194=>267,61195=>242,61196=>216,61197=>242,61198=>267, +61199=>277,61200=>267,61201=>242,61202=>216,61203=>242,61204=>282,61205=>277,61206=>267,61207=>242,61208=>216, +61209=>282,63173=>687,64256=>810,64257=>741,64258=>741,64259=>1115,64260=>1116,64261=>808,64262=>1020,64275=>1388, +64276=>1384,64277=>1378,64278=>1384,64279=>1713,64285=>343,64286=>0,64287=>663,64288=>720,64289=>963,64290=>890, +64291=>988,64292=>963,64293=>938,64294=>988,64295=>988,64296=>976,64297=>838,64298=>949,64299=>949,64300=>949, +64301=>949,64302=>751,64303=>751,64304=>751,64305=>673,64306=>537,64307=>654,64308=>712,64309=>438,64310=>491, +64312=>724,64313=>438,64314=>649,64315=>650,64316=>679,64318=>775,64320=>497,64321=>773,64323=>718,64324=>687, +64326=>751,64327=>729,64328=>649,64329=>949,64330=>751,64331=>343,64332=>673,64333=>650,64334=>687,64335=>651, +64338=>1005,64339=>1059,64340=>375,64341=>408,64342=>1005,64343=>1059,64344=>375,64345=>408,64346=>1005,64347=>1059, +64348=>375,64349=>408,64350=>1005,64351=>1059,64352=>375,64353=>408,64354=>1005,64355=>1059,64356=>375,64357=>408, +64358=>1005,64359=>1059,64360=>375,64361=>408,64362=>1162,64363=>1191,64364=>655,64365=>720,64366=>1162,64367=>1191, +64368=>655,64369=>720,64370=>721,64371=>721,64372=>721,64373=>721,64374=>721,64375=>721,64376=>721,64377=>721, +64378=>721,64379=>721,64380=>721,64381=>721,64382=>721,64383=>721,64384=>721,64385=>721,64386=>513,64387=>578, +64388=>513,64389=>578,64390=>513,64391=>578,64392=>513,64393=>578,64394=>576,64395=>622,64396=>576,64397=>622, +64398=>1024,64399=>1024,64400=>582,64401=>582,64402=>1024,64403=>1024,64404=>582,64405=>582,64406=>1024,64407=>1024, +64408=>582,64409=>582,64410=>1024,64411=>1024,64412=>582,64413=>582,64414=>854,64415=>900,64416=>854,64417=>900, +64418=>375,64419=>408,64426=>938,64427=>880,64428=>693,64429=>660,64467=>824,64468=>843,64469=>476,64470=>552, +64473=>622,64474=>627,64488=>375,64489=>408,64508=>917,64509=>1012,64510=>375,64511=>408,65024=>0,65025=>0, +65026=>0,65027=>0,65028=>0,65029=>0,65030=>0,65031=>0,65032=>0,65033=>0,65034=>0,65035=>0, +65036=>0,65037=>0,65038=>0,65039=>0,65056=>0,65057=>0,65058=>0,65059=>0,65136=>342,65137=>342, +65138=>342,65139=>346,65140=>342,65142=>342,65143=>342,65144=>342,65145=>342,65146=>342,65147=>342,65148=>342, +65149=>342,65150=>342,65151=>342,65152=>511,65153=>343,65154=>375,65155=>343,65156=>375,65157=>622,65158=>627, +65159=>343,65160=>375,65161=>917,65162=>917,65163=>375,65164=>408,65165=>343,65166=>375,65167=>1005,65168=>1059, +65169=>375,65170=>408,65171=>590,65172=>606,65173=>1005,65174=>1059,65175=>375,65176=>408,65177=>1005,65178=>1059, +65179=>375,65180=>408,65181=>721,65182=>721,65183=>721,65184=>721,65185=>721,65186=>721,65187=>721,65188=>721, +65189=>721,65190=>721,65191=>721,65192=>721,65193=>513,65194=>578,65195=>513,65196=>578,65197=>576,65198=>622, +65199=>576,65200=>622,65201=>1380,65202=>1414,65203=>983,65204=>1018,65205=>1380,65206=>1414,65207=>983,65208=>1018, +65209=>1345,65210=>1364,65211=>966,65212=>985,65213=>1345,65214=>1364,65215=>966,65216=>985,65217=>1039,65218=>1071, +65219=>942,65220=>974,65221=>1039,65222=>1071,65223=>942,65224=>974,65225=>683,65226=>683,65227=>683,65228=>564, +65229=>683,65230=>683,65231=>683,65232=>564,65233=>1162,65234=>1191,65235=>655,65236=>720,65237=>894,65238=>901, +65239=>655,65240=>720,65241=>917,65242=>931,65243=>582,65244=>582,65245=>868,65246=>893,65247=>375,65248=>408, +65249=>733,65250=>784,65251=>619,65252=>670,65253=>854,65254=>900,65255=>375,65256=>408,65257=>590,65258=>606, +65259=>693,65260=>660,65261=>622,65262=>627,65263=>917,65264=>1012,65265=>917,65266=>1012,65267=>375,65268=>408, +65269=>745,65270=>759,65271=>745,65272=>759,65273=>745,65274=>759,65275=>745,65276=>759,65279=>0,65529=>0, +65530=>0,65531=>0,65532=>0,65533=>1113); +$enc=''; +$diff=''; +$file='dejavusansb.z'; +$ctg='dejavusansb.ctg.z'; +$originalsize=634184; +// --- EOF --- --- /dev/null +++ b/tcpdf/fonts/dejavusansbi.php @@ -1,1 +1,464 @@ - +928,'Descent'=>-236,'CapHeight'=>-51,'Flags'=>96,'FontBBox'=>'[-1067 -385 2005 1121]','ItalicAngle'=>-11,'StemV'=>120,'MissingWidth'=>600); +$up=-63; +$ut=44; +$dw=600; +$cw=array( +0=>600,32=>348,33=>456,34=>521,35=>696,36=>696,37=>1002,38=>872,39=>306,40=>457, +41=>457,42=>523,43=>838,44=>380,45=>415,46=>380,47=>365,48=>696,49=>696,50=>696, +51=>696,52=>696,53=>696,54=>696,55=>696,56=>696,57=>696,58=>400,59=>400,60=>838, +61=>838,62=>838,63=>580,64=>1000,65=>774,66=>762,67=>734,68=>830,69=>683,70=>683, +71=>821,72=>837,73=>372,74=>372,75=>775,76=>637,77=>995,78=>837,79=>850,80=>733, +81=>850,82=>770,83=>720,84=>682,85=>812,86=>774,87=>1103,88=>771,89=>724,90=>725, +91=>457,92=>365,93=>457,94=>838,95=>500,96=>500,97=>675,98=>716,99=>593,100=>716, +101=>678,102=>435,103=>716,104=>712,105=>343,106=>343,107=>665,108=>343,109=>1042,110=>712, +111=>687,112=>716,113=>716,114=>493,115=>595,116=>478,117=>712,118=>652,119=>924,120=>645, +121=>652,122=>582,123=>712,124=>365,125=>712,126=>838,8364=>696,8218=>380,402=>435,8222=>644, +8230=>1000,8224=>500,8225=>500,710=>500,8240=>1454,352=>720,8249=>412,338=>1167,381=>725,8216=>380, +8217=>380,8220=>644,8221=>644,8226=>639,8211=>500,8212=>1000,732=>500,8482=>1000,353=>595,8250=>412, +339=>1094,382=>582,376=>724,160=>348,161=>456,162=>696,163=>696,164=>636,165=>696,166=>365, +167=>500,168=>500,169=>1000,170=>564,171=>650,172=>838,173=>415,174=>1000,175=>500,176=>500, +177=>838,178=>438,179=>438,180=>500,181=>736,182=>636,183=>380,184=>500,185=>438,186=>564, +187=>650,188=>1035,189=>1035,190=>1035,191=>580,192=>774,193=>774,194=>774,195=>774,196=>774, +197=>774,198=>1085,199=>734,200=>683,201=>683,202=>683,203=>683,204=>372,205=>372,206=>372, +207=>372,208=>845,209=>837,210=>850,211=>850,212=>850,213=>850,214=>850,215=>838,216=>850, +217=>812,218=>812,219=>812,220=>812,221=>724,222=>742,223=>719,224=>675,225=>675,226=>675, +227=>675,228=>675,229=>675,230=>1048,231=>593,232=>678,233=>678,234=>678,235=>678,236=>343, +237=>343,238=>343,239=>343,240=>687,241=>712,242=>687,243=>687,244=>687,245=>687,246=>687, +247=>838,248=>687,249=>712,250=>712,251=>712,252=>712,253=>652,254=>716,255=>652,256=>774, +257=>675,258=>774,259=>675,260=>774,261=>675,262=>734,263=>593,264=>734,265=>593,266=>734, +267=>593,268=>734,269=>593,270=>830,271=>716,272=>845,273=>716,274=>683,275=>678,276=>683, +277=>678,278=>683,279=>678,280=>683,281=>678,282=>683,283=>678,284=>821,285=>716,286=>821, +287=>716,288=>821,289=>716,290=>821,291=>716,292=>837,293=>712,294=>974,295=>790,296=>372, +297=>343,298=>372,299=>343,300=>372,301=>343,302=>372,303=>343,304=>372,305=>343,306=>744, +307=>686,308=>372,309=>343,310=>775,311=>665,312=>665,313=>637,314=>343,315=>637,316=>343, +317=>637,318=>343,319=>637,320=>343,321=>660,322=>375,323=>837,324=>712,325=>837,326=>712, +327=>837,328=>712,329=>983,330=>837,331=>712,332=>850,333=>687,334=>850,335=>687,336=>850, +337=>687,340=>770,341=>493,342=>770,343=>493,344=>770,345=>493,346=>720,347=>595,348=>720, +349=>595,350=>720,351=>595,354=>682,355=>478,356=>682,357=>478,358=>682,359=>478,360=>812, +361=>712,362=>812,363=>712,364=>812,365=>712,366=>812,367=>712,368=>812,369=>712,370=>812, +371=>712,372=>1103,373=>924,374=>724,375=>652,377=>725,378=>582,379=>725,380=>582,383=>435, +384=>716,385=>811,386=>762,387=>716,388=>762,389=>716,390=>734,391=>734,392=>593,393=>845, +394=>879,395=>762,396=>716,397=>687,398=>683,399=>850,400=>696,401=>683,403=>821,404=>793, +405=>1045,406=>436,407=>389,408=>775,409=>665,410=>360,411=>592,412=>1042,413=>837,414=>712, +415=>850,416=>850,417=>687,418=>1114,419=>962,420=>782,421=>716,422=>770,423=>720,424=>595, +425=>683,426=>552,427=>478,428=>707,429=>478,430=>682,431=>812,432=>712,433=>769,434=>813, +435=>797,436=>778,437=>725,438=>582,439=>772,440=>772,441=>641,442=>582,443=>696,444=>772, +445=>641,446=>573,447=>716,448=>372,449=>659,450=>544,451=>372,452=>1548,453=>1450,454=>1307, +455=>977,456=>979,457=>670,458=>1193,459=>1213,460=>1063,461=>774,462=>675,463=>372,464=>343, +465=>850,466=>687,467=>812,468=>712,469=>812,470=>712,471=>812,472=>712,473=>812,474=>712, +475=>812,476=>712,477=>678,478=>774,479=>675,480=>774,481=>675,482=>1085,483=>1048,484=>821, +485=>716,486=>821,487=>716,488=>775,489=>665,490=>850,491=>687,492=>850,493=>687,494=>772, +495=>582,496=>343,497=>1548,498=>1450,499=>1307,500=>821,501=>716,502=>1289,503=>787,504=>837, +505=>712,506=>774,507=>675,508=>1085,509=>1048,510=>850,511=>687,512=>774,513=>675,514=>774, +515=>675,516=>683,517=>678,518=>683,519=>678,520=>372,521=>343,522=>372,523=>343,524=>850, +525=>687,526=>850,527=>687,528=>770,529=>493,530=>770,531=>493,532=>812,533=>712,534=>812, +535=>712,536=>720,537=>595,538=>682,539=>478,540=>690,541=>607,542=>837,543=>712,544=>837, +545=>865,546=>809,547=>659,548=>725,549=>582,550=>774,551=>675,552=>683,553=>678,554=>850, +555=>687,556=>850,557=>687,558=>850,559=>687,560=>850,561=>687,562=>724,563=>652,564=>492, +565=>867,566=>512,567=>343,568=>1088,569=>1088,570=>774,571=>734,572=>593,573=>637,574=>682, +575=>595,576=>582,577=>782,578=>614,579=>762,580=>812,581=>774,582=>683,583=>678,584=>372, +585=>343,586=>860,587=>791,588=>770,589=>493,590=>724,591=>652,592=>675,593=>716,594=>716, +595=>716,596=>593,597=>593,598=>791,599=>792,600=>678,601=>678,602=>876,603=>557,604=>545, +605=>774,606=>731,607=>343,608=>792,609=>716,610=>627,611=>735,612=>635,613=>712,614=>712, +615=>712,616=>545,617=>440,618=>545,619=>559,620=>693,621=>343,622=>841,623=>1042,624=>1042, +625=>1042,626=>712,627=>793,628=>642,629=>687,630=>909,631=>682,632=>796,633=>538,634=>538, +635=>650,636=>493,637=>493,638=>596,639=>596,640=>642,641=>642,642=>595,643=>415,644=>435, +645=>605,646=>552,647=>478,648=>478,649=>920,650=>769,651=>670,652=>652,653=>924,654=>652, +655=>724,656=>694,657=>684,658=>641,659=>641,660=>573,661=>573,662=>573,663=>573,664=>850, +665=>633,666=>731,667=>685,668=>691,669=>343,670=>732,671=>539,672=>792,673=>573,674=>573, +675=>1156,676=>1214,677=>1155,678=>974,679=>769,680=>929,681=>1026,682=>792,683=>780,684=>591, +685=>415,686=>677,687=>789,688=>456,689=>456,690=>219,691=>315,692=>315,693=>315,694=>411, +695=>591,696=>417,697=>302,698=>521,699=>380,700=>380,701=>380,702=>366,703=>366,704=>326, +705=>326,706=>500,707=>500,708=>500,709=>500,711=>500,712=>306,713=>500,714=>500,715=>500, +716=>306,717=>500,718=>500,719=>500,720=>337,721=>337,722=>366,723=>366,724=>500,725=>500, +726=>416,727=>328,728=>500,729=>500,730=>500,731=>500,733=>500,734=>351,735=>500,736=>412, +737=>219,738=>381,739=>413,740=>326,741=>500,742=>500,743=>500,744=>500,745=>500,748=>500, +749=>500,750=>644,755=>500,759=>500,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0, +774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0, +784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0, +794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0, +804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0, +814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0, +824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,832=>0,833=>0, +834=>0,835=>0,836=>0,837=>0,838=>0,839=>0,840=>0,841=>0,842=>0,843=>0, +844=>0,845=>0,846=>0,847=>0,849=>0,850=>0,851=>0,855=>0,856=>0,858=>0, +860=>0,861=>0,862=>0,863=>0,864=>0,865=>0,866=>0,880=>698,881=>565,882=>1022, +883=>836,884=>302,885=>302,886=>837,887=>701,890=>500,891=>593,892=>550,893=>549,894=>400, +900=>441,901=>500,902=>797,903=>380,904=>846,905=>1009,906=>563,908=>891,910=>980,911=>894, +912=>390,913=>774,914=>762,915=>637,916=>774,917=>683,918=>725,919=>837,920=>850,921=>372, +922=>775,923=>774,924=>995,925=>837,926=>632,927=>850,928=>837,929=>733,931=>683,932=>682, +933=>724,934=>850,935=>771,936=>850,937=>850,938=>372,939=>724,940=>687,941=>557,942=>712, +943=>390,944=>675,945=>687,946=>716,947=>681,948=>687,949=>557,950=>591,951=>712,952=>687, +953=>390,954=>710,955=>633,956=>736,957=>681,958=>591,959=>687,960=>791,961=>716,962=>593, +963=>779,964=>638,965=>675,966=>782,967=>645,968=>794,969=>869,970=>390,971=>675,972=>687, +973=>675,974=>869,975=>775,976=>651,977=>661,978=>746,979=>981,980=>746,981=>796,982=>869, +983=>744,984=>850,985=>687,986=>734,987=>593,988=>683,989=>494,990=>702,991=>660,992=>919, +993=>627,994=>1093,995=>837,996=>832,997=>716,998=>928,999=>744,1000=>733,1001=>650,1002=>789, +1003=>671,1004=>752,1005=>716,1006=>682,1007=>590,1008=>744,1009=>716,1010=>593,1011=>343,1012=>850, +1013=>645,1014=>645,1015=>742,1016=>716,1017=>734,1018=>995,1019=>732,1020=>716,1021=>734,1022=>734, +1023=>698,1024=>683,1025=>683,1026=>878,1027=>637,1028=>734,1029=>720,1030=>372,1031=>372,1032=>372, +1033=>1154,1034=>1130,1035=>878,1036=>817,1037=>837,1038=>771,1039=>837,1040=>774,1041=>762,1042=>762, +1043=>637,1044=>891,1045=>683,1046=>1224,1047=>710,1048=>837,1049=>837,1050=>817,1051=>831,1052=>995, +1053=>837,1054=>850,1055=>837,1056=>733,1057=>734,1058=>682,1059=>771,1060=>992,1061=>771,1062=>928, +1063=>808,1064=>1235,1065=>1326,1066=>939,1067=>1036,1068=>762,1069=>734,1070=>1174,1071=>770,1072=>675, +1073=>698,1074=>633,1075=>522,1076=>808,1077=>678,1078=>995,1079=>581,1080=>701,1081=>701,1082=>679, +1083=>732,1084=>817,1085=>691,1086=>687,1087=>691,1088=>716,1089=>593,1090=>580,1091=>652,1092=>992, +1093=>645,1094=>741,1095=>687,1096=>1062,1097=>1105,1098=>751,1099=>904,1100=>632,1101=>593,1102=>972, +1103=>642,1104=>678,1105=>678,1106=>714,1107=>522,1108=>593,1109=>595,1110=>343,1111=>343,1112=>343, +1113=>991,1114=>956,1115=>734,1116=>679,1117=>701,1118=>652,1119=>691,1120=>1093,1121=>869,1122=>840, +1123=>736,1124=>1012,1125=>839,1126=>992,1127=>832,1128=>1358,1129=>1121,1130=>850,1131=>687,1132=>1236, +1133=>1007,1134=>696,1135=>557,1136=>1075,1137=>1061,1138=>850,1139=>687,1140=>850,1141=>695,1142=>850, +1143=>695,1144=>1148,1145=>1043,1146=>1074,1147=>863,1148=>1405,1149=>1173,1150=>1093,1151=>869,1152=>734, +1153=>593,1154=>652,1155=>0,1156=>0,1157=>0,1158=>0,1159=>0,1160=>418,1161=>418,1162=>938, +1163=>806,1164=>762,1165=>611,1166=>736,1167=>718,1168=>637,1169=>522,1170=>666,1171=>543,1172=>789, +1173=>522,1174=>1224,1175=>995,1176=>710,1177=>581,1178=>775,1179=>679,1180=>817,1181=>679,1182=>817, +1183=>679,1184=>1015,1185=>826,1186=>837,1187=>691,1188=>1103,1189=>871,1190=>1254,1191=>979,1192=>946, +1193=>859,1194=>734,1195=>593,1196=>682,1197=>580,1198=>724,1199=>652,1200=>724,1201=>652,1202=>771, +1203=>645,1204=>1104,1205=>1001,1206=>808,1207=>687,1208=>808,1209=>687,1210=>808,1211=>712,1212=>1026, +1213=>810,1214=>1026,1215=>810,1216=>372,1217=>1224,1218=>995,1219=>778,1220=>629,1221=>933,1222=>804, +1223=>837,1224=>691,1225=>938,1226=>806,1227=>808,1228=>687,1229=>1096,1230=>932,1231=>343,1232=>774, +1233=>675,1234=>774,1235=>675,1236=>1085,1237=>1048,1238=>683,1239=>678,1240=>850,1241=>678,1242=>850, +1243=>678,1244=>1224,1245=>995,1246=>710,1247=>581,1248=>772,1249=>641,1250=>837,1251=>701,1252=>837, +1253=>701,1254=>850,1255=>687,1256=>850,1257=>687,1258=>850,1259=>687,1260=>734,1261=>593,1262=>771, +1263=>652,1264=>771,1265=>652,1266=>771,1267=>652,1268=>808,1269=>687,1270=>637,1271=>522,1272=>1036, +1273=>904,1274=>666,1275=>543,1276=>771,1277=>645,1278=>771,1279=>645,1280=>762,1281=>608,1282=>1159, +1283=>893,1284=>1119,1285=>920,1286=>828,1287=>693,1288=>1242,1289=>1017,1290=>1289,1291=>1013,1292=>839, +1293=>638,1294=>938,1295=>803,1296=>696,1297=>557,1298=>831,1299=>732,1300=>1286,1301=>1070,1302=>1065, +1303=>982,1304=>1082,1305=>960,1306=>850,1307=>716,1308=>1103,1309=>924,1312=>1248,1313=>1022,1314=>1254, +1315=>979,1316=>957,1317=>807,1329=>984,1330=>812,1331=>984,1332=>984,1333=>812,1334=>777,1335=>812, +1336=>812,1337=>975,1338=>984,1339=>812,1340=>710,1341=>1078,1342=>1136,1343=>812,1344=>710,1345=>757, +1346=>984,1347=>876,1348=>984,1349=>793,1350=>984,1351=>812,1352=>812,1353=>812,1354=>958,1355=>777, +1356=>984,1357=>812,1358=>984,1359=>720,1360=>812,1361=>793,1362=>895,1363=>850,1364=>936,1365=>850, +1366=>720,1369=>366,1370=>380,1371=>550,1372=>550,1373=>380,1374=>546,1375=>521,1377=>1042,1378=>712, +1379=>866,1380=>868,1381=>712,1382=>817,1383=>653,1384=>712,1385=>811,1386=>817,1387=>712,1388=>498, +1389=>1018,1390=>716,1391=>712,1392=>712,1393=>716,1394=>819,1395=>712,1396=>751,1397=>343,1398=>882, +1399=>559,1400=>712,1401=>559,1402=>1042,1403=>559,1404=>863,1405=>712,1406=>813,1407=>1042,1408=>712, +1409=>716,1410=>571,1411=>1042,1412=>778,1413=>687,1414=>720,1415=>862,1417=>400,1418=>487,1456=>0, +1457=>0,1458=>0,1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1466=>0, +1467=>0,1468=>0,1469=>0,1470=>415,1471=>0,1472=>372,1473=>0,1474=>0,1475=>372,1478=>497, +1479=>0,1488=>751,1489=>673,1490=>537,1491=>654,1492=>712,1493=>343,1494=>491,1495=>712,1496=>724, +1497=>343,1498=>649,1499=>650,1500=>679,1501=>712,1502=>775,1503=>343,1504=>497,1505=>773,1506=>678, +1507=>718,1508=>687,1509=>628,1510=>751,1511=>729,1512=>649,1513=>949,1514=>751,1520=>664,1521=>664, +1522=>663,1523=>444,1524=>710,3647=>696,3713=>815,3714=>748,3716=>749,3719=>569,3720=>742,3722=>744, +3725=>761,3732=>706,3733=>704,3734=>747,3735=>819,3737=>730,3738=>727,3739=>727,3740=>922,3741=>827, +3742=>866,3743=>866,3745=>836,3746=>761,3747=>770,3749=>769,3751=>713,3754=>827,3755=>1031,3757=>724, +3758=>784,3759=>934,3760=>688,3761=>0,3762=>610,3763=>610,3764=>0,3765=>0,3766=>0,3767=>0, +3768=>0,3769=>0,3771=>0,3772=>0,3773=>670,3776=>516,3777=>860,3778=>516,3779=>650,3780=>632, +3782=>759,3784=>0,3785=>0,3786=>0,3787=>0,3788=>0,3789=>0,3792=>771,3793=>771,3794=>693, +3795=>836,3796=>729,3797=>729,3798=>849,3799=>790,3800=>759,3801=>910,3804=>1363,3805=>1363,4256=>918, +4257=>744,4258=>739,4259=>837,4260=>649,4261=>773,4262=>857,4263=>889,4264=>530,4265=>633,4266=>857, +4267=>900,4268=>643,4269=>903,4270=>814,4271=>752,4272=>869,4273=>643,4274=>643,4275=>886,4276=>886, +4277=>733,4278=>653,4279=>643,4280=>646,4281=>643,4282=>790,4283=>902,4284=>633,4285=>619,4286=>643, +4287=>778,4288=>892,4289=>601,4290=>742,4291=>616,4292=>633,4293=>742,4304=>553,4305=>552,4306=>596, +4307=>815,4308=>562,4309=>563,4310=>553,4311=>827,4312=>553,4313=>543,4314=>1074,4315=>563,4316=>563, +4317=>812,4318=>552,4319=>591,4320=>822,4321=>563,4322=>690,4323=>583,4324=>813,4325=>562,4326=>813, +4327=>563,4328=>563,4329=>563,4330=>632,4331=>563,4332=>563,4333=>552,4334=>563,4335=>563,4336=>558, +4337=>604,4338=>552,4339=>552,4340=>553,4341=>605,4342=>852,4343=>635,4344=>563,4345=>596,4346=>542, +4347=>684,4348=>368,5121=>774,5122=>774,5123=>774,5124=>774,5125=>905,5126=>905,5127=>905,5129=>905, +5130=>905,5131=>905,5132=>1018,5133=>1009,5134=>1018,5135=>1009,5136=>1018,5137=>1009,5138=>1149,5139=>1140, +5140=>1149,5141=>1140,5142=>905,5143=>1149,5144=>1142,5145=>1149,5146=>1142,5147=>905,5149=>310,5150=>529, +5151=>425,5152=>425,5153=>395,5154=>395,5155=>395,5156=>395,5157=>564,5158=>470,5159=>310,5160=>395, +5161=>395,5162=>395,5163=>1213,5164=>986,5165=>1216,5166=>1297,5167=>774,5168=>774,5169=>774,5170=>774, +5171=>886,5172=>886,5173=>886,5175=>886,5176=>886,5177=>886,5178=>1018,5179=>1009,5180=>1018,5181=>1009, +5182=>1018,5183=>1009,5184=>1149,5185=>1140,5186=>1149,5187=>1140,5188=>1149,5189=>1142,5190=>1149,5191=>1142, +5192=>886,5193=>576,5194=>229,5196=>812,5197=>812,5198=>812,5199=>812,5200=>815,5201=>815,5202=>815, +5204=>815,5205=>815,5206=>815,5207=>1056,5208=>1048,5209=>1056,5210=>1048,5211=>1056,5212=>1048,5213=>1060, +5214=>1054,5215=>1060,5216=>1054,5217=>1060,5218=>1052,5219=>1060,5220=>1052,5221=>1060,5222=>483,5223=>1005, +5224=>1005,5225=>1023,5226=>1017,5227=>743,5228=>743,5229=>743,5230=>743,5231=>743,5232=>743,5233=>743, +5234=>743,5235=>743,5236=>1029,5237=>975,5238=>980,5239=>975,5240=>980,5241=>975,5242=>1029,5243=>975, +5244=>1029,5245=>975,5246=>980,5247=>975,5248=>980,5249=>975,5250=>980,5251=>501,5252=>501,5253=>938, +5254=>938,5255=>938,5256=>938,5257=>743,5258=>743,5259=>743,5260=>743,5261=>743,5262=>743,5263=>743, +5264=>743,5265=>743,5266=>1029,5267=>975,5268=>1029,5269=>975,5270=>1029,5271=>975,5272=>1029,5273=>975, +5274=>1029,5275=>975,5276=>1029,5277=>975,5278=>1029,5279=>975,5280=>1029,5281=>501,5282=>501,5283=>626, +5284=>626,5285=>626,5286=>626,5287=>626,5288=>626,5289=>626,5290=>626,5291=>626,5292=>881,5293=>854, +5294=>863,5295=>874,5296=>863,5297=>874,5298=>881,5299=>874,5300=>881,5301=>874,5302=>863,5303=>874, +5304=>863,5305=>874,5306=>863,5307=>436,5308=>548,5309=>436,5312=>988,5313=>988,5314=>988,5315=>988, +5316=>931,5317=>931,5318=>931,5319=>931,5320=>931,5321=>1238,5322=>1247,5323=>1200,5324=>1228,5325=>1200, +5326=>1228,5327=>931,5328=>660,5329=>497,5330=>660,5331=>988,5332=>988,5333=>988,5334=>988,5335=>931, +5336=>931,5337=>931,5338=>931,5339=>931,5340=>1231,5341=>1247,5342=>1283,5343=>1228,5344=>1283,5345=>1228, +5346=>1228,5347=>1214,5348=>1228,5349=>1214,5350=>1283,5351=>1228,5352=>1283,5353=>1228,5354=>660,5356=>886, +5357=>730,5358=>730,5359=>730,5360=>730,5361=>730,5362=>730,5363=>730,5364=>730,5365=>730,5366=>998, +5367=>958,5368=>967,5369=>989,5370=>967,5371=>989,5372=>998,5373=>958,5374=>998,5375=>958,5376=>967, +5377=>989,5378=>967,5379=>989,5380=>967,5381=>493,5382=>460,5383=>493,5392=>923,5393=>923,5394=>923, +5395=>1136,5396=>1136,5397=>1136,5398=>1136,5399=>1209,5400=>1202,5401=>1209,5402=>1202,5403=>1209,5404=>1202, +5405=>1431,5406=>1420,5407=>1431,5408=>1420,5409=>1431,5410=>1420,5411=>1431,5412=>1420,5413=>746,5414=>776, +5415=>776,5416=>776,5417=>776,5418=>776,5419=>776,5420=>776,5421=>776,5422=>776,5423=>1003,5424=>1003, +5425=>1013,5426=>996,5427=>1013,5428=>996,5429=>1003,5430=>1003,5431=>1003,5432=>1003,5433=>1013,5434=>996, +5435=>1013,5436=>996,5437=>1013,5438=>495,5440=>395,5441=>510,5442=>1033,5443=>1033,5444=>976,5445=>976, +5446=>976,5447=>976,5448=>733,5449=>733,5450=>733,5451=>733,5452=>733,5453=>733,5454=>1003,5455=>959, +5456=>495,5458=>886,5459=>774,5460=>774,5461=>774,5462=>774,5463=>928,5464=>928,5465=>928,5466=>928, +5467=>1172,5468=>1142,5469=>602,5470=>812,5471=>812,5472=>812,5473=>812,5474=>812,5475=>812,5476=>815, +5477=>815,5478=>815,5479=>815,5480=>1060,5481=>1052,5482=>548,5492=>977,5493=>977,5494=>977,5495=>977, +5496=>977,5497=>977,5498=>977,5499=>618,5500=>837,5501=>510,5502=>1238,5503=>1238,5504=>1238,5505=>1238, +5506=>1238,5507=>1238,5508=>1238,5509=>989,5514=>977,5515=>977,5516=>977,5517=>977,5518=>1591,5519=>1591, +5520=>1591,5521=>1295,5522=>1295,5523=>1591,5524=>1591,5525=>848,5526=>1273,5536=>988,5537=>988,5538=>931, +5539=>931,5540=>931,5541=>931,5542=>660,5543=>776,5544=>776,5545=>776,5546=>776,5547=>776,5548=>776, +5549=>776,5550=>495,5551=>743,5598=>830,5601=>830,5702=>496,5703=>496,5742=>413,5743=>1238,5744=>1591, +5745=>2016,5746=>2016,5747=>1720,5748=>1678,5749=>2016,5750=>2016,7424=>652,7425=>833,7426=>1048,7427=>608, +7428=>593,7429=>676,7430=>676,7431=>559,7432=>557,7433=>343,7434=>494,7435=>665,7436=>539,7437=>817, +7438=>701,7439=>687,7440=>593,7441=>660,7442=>660,7443=>660,7444=>1094,7446=>687,7447=>687,7448=>556, +7449=>642,7450=>642,7451=>580,7452=>634,7453=>737,7454=>948,7455=>695,7456=>652,7457=>924,7458=>582, +7459=>646,7462=>539,7463=>652,7464=>691,7465=>556,7466=>781,7467=>732,7468=>487,7469=>683,7470=>480, +7472=>523,7473=>430,7474=>430,7475=>517,7476=>527,7477=>234,7478=>234,7479=>488,7480=>401,7481=>626, +7482=>527,7483=>527,7484=>535,7485=>509,7486=>461,7487=>485,7488=>430,7489=>511,7490=>695,7491=>458, +7492=>458,7493=>479,7494=>712,7495=>479,7496=>479,7497=>479,7498=>479,7499=>386,7500=>386,7501=>479, +7502=>219,7503=>487,7504=>664,7505=>456,7506=>488,7507=>414,7508=>488,7509=>488,7510=>479,7511=>388, +7512=>456,7513=>462,7514=>664,7515=>501,7517=>451,7518=>429,7519=>433,7520=>493,7521=>406,7522=>219, +7523=>315,7524=>456,7525=>501,7526=>451,7527=>429,7528=>451,7529=>493,7530=>406,7543=>716,7544=>527, +7547=>545,7549=>747,7557=>514,7579=>479,7580=>414,7581=>414,7582=>488,7583=>386,7584=>377,7585=>348, +7586=>479,7587=>456,7588=>347,7589=>281,7590=>347,7591=>347,7592=>431,7593=>326,7594=>330,7595=>370, +7596=>664,7597=>664,7598=>562,7599=>562,7600=>448,7601=>488,7602=>542,7603=>422,7604=>396,7605=>388, +7606=>583,7607=>494,7608=>399,7609=>451,7610=>501,7611=>417,7612=>523,7613=>470,7614=>455,7615=>425, +7620=>0,7621=>0,7622=>0,7623=>0,7624=>0,7625=>0,7680=>774,7681=>675,7682=>762,7683=>716, +7684=>762,7685=>716,7686=>762,7687=>716,7688=>734,7689=>593,7690=>830,7691=>716,7692=>830,7693=>716, +7694=>830,7695=>716,7696=>830,7697=>716,7698=>830,7699=>716,7700=>683,7701=>678,7702=>683,7703=>678, +7704=>683,7705=>678,7706=>683,7707=>678,7708=>683,7709=>678,7710=>683,7711=>435,7712=>821,7713=>716, +7714=>837,7715=>712,7716=>837,7717=>712,7718=>837,7719=>712,7720=>837,7721=>712,7722=>837,7723=>712, +7724=>372,7725=>343,7726=>372,7727=>343,7728=>775,7729=>665,7730=>775,7731=>665,7732=>775,7733=>665, +7734=>637,7735=>343,7736=>637,7737=>343,7738=>637,7739=>343,7740=>637,7741=>343,7742=>995,7743=>1042, +7744=>995,7745=>1042,7746=>995,7747=>1042,7748=>837,7749=>712,7750=>837,7751=>712,7752=>837,7753=>712, +7754=>837,7755=>712,7756=>850,7757=>687,7758=>850,7759=>687,7760=>850,7761=>687,7762=>850,7763=>687, +7764=>733,7765=>716,7766=>733,7767=>716,7768=>770,7769=>493,7770=>770,7771=>493,7772=>770,7773=>493, +7774=>770,7775=>493,7776=>720,7777=>595,7778=>720,7779=>595,7780=>720,7781=>595,7782=>720,7783=>595, +7784=>720,7785=>595,7786=>682,7787=>478,7788=>682,7789=>478,7790=>682,7791=>478,7792=>682,7793=>478, +7794=>812,7795=>712,7796=>812,7797=>712,7798=>812,7799=>712,7800=>812,7801=>712,7802=>812,7803=>712, +7804=>774,7805=>652,7806=>774,7807=>652,7808=>1103,7809=>924,7810=>1103,7811=>924,7812=>1103,7813=>924, +7814=>1103,7815=>924,7816=>1103,7817=>924,7818=>771,7819=>645,7820=>771,7821=>645,7822=>724,7823=>652, +7824=>725,7825=>582,7826=>725,7827=>582,7828=>725,7829=>582,7830=>712,7831=>478,7832=>924,7833=>652, +7834=>675,7835=>435,7836=>435,7837=>435,7838=>896,7839=>687,7840=>774,7841=>675,7842=>774,7843=>675, +7844=>774,7845=>675,7846=>774,7847=>675,7848=>774,7849=>675,7850=>774,7851=>675,7852=>774,7853=>675, +7854=>774,7855=>675,7856=>774,7857=>675,7858=>774,7859=>675,7860=>774,7861=>675,7862=>774,7863=>675, +7864=>683,7865=>678,7866=>683,7867=>678,7868=>683,7869=>678,7870=>683,7871=>678,7872=>683,7873=>678, +7874=>683,7875=>678,7876=>683,7877=>678,7878=>683,7879=>678,7880=>372,7881=>343,7882=>372,7883=>343, +7884=>850,7885=>687,7886=>850,7887=>687,7888=>850,7889=>687,7890=>850,7891=>687,7892=>850,7893=>687, +7894=>850,7895=>687,7896=>850,7897=>687,7898=>850,7899=>687,7900=>850,7901=>687,7902=>850,7903=>687, +7904=>850,7905=>687,7906=>850,7907=>687,7908=>812,7909=>712,7910=>812,7911=>712,7912=>812,7913=>712, +7914=>812,7915=>712,7916=>812,7917=>712,7918=>812,7919=>712,7920=>812,7921=>712,7922=>724,7923=>652, +7924=>724,7925=>652,7926=>724,7927=>652,7928=>724,7929=>652,7930=>953,7931=>644,7936=>687,7937=>687, +7938=>687,7939=>687,7940=>687,7941=>687,7942=>687,7943=>687,7944=>774,7945=>774,7946=>1041,7947=>1043, +7948=>935,7949=>963,7950=>835,7951=>859,7952=>557,7953=>557,7954=>557,7955=>557,7956=>557,7957=>557, +7960=>792,7961=>794,7962=>1100,7963=>1096,7964=>1023,7965=>1052,7968=>712,7969=>712,7970=>712,7971=>712, +7972=>712,7973=>712,7974=>712,7975=>712,7976=>945,7977=>951,7978=>1250,7979=>1250,7980=>1180,7981=>1206, +7982=>1054,7983=>1063,7984=>390,7985=>390,7986=>390,7987=>390,7988=>390,7989=>390,7990=>390,7991=>390, +7992=>483,7993=>489,7994=>777,7995=>785,7996=>712,7997=>738,7998=>604,7999=>604,8000=>687,8001=>687, +8002=>687,8003=>687,8004=>687,8005=>687,8008=>892,8009=>933,8010=>1221,8011=>1224,8012=>1053,8013=>1082, +8016=>675,8017=>675,8018=>675,8019=>675,8020=>675,8021=>675,8022=>675,8023=>675,8025=>930,8027=>1184, +8029=>1199,8031=>1049,8032=>869,8033=>869,8034=>869,8035=>869,8036=>869,8037=>869,8038=>869,8039=>869, +8040=>909,8041=>958,8042=>1246,8043=>1251,8044=>1076,8045=>1105,8046=>1028,8047=>1076,8048=>687,8049=>687, +8050=>557,8051=>557,8052=>712,8053=>712,8054=>390,8055=>390,8056=>687,8057=>687,8058=>675,8059=>675, +8060=>869,8061=>869,8064=>687,8065=>687,8066=>687,8067=>687,8068=>687,8069=>687,8070=>687,8071=>687, +8072=>774,8073=>774,8074=>1041,8075=>1043,8076=>935,8077=>963,8078=>835,8079=>859,8080=>712,8081=>712, +8082=>712,8083=>712,8084=>712,8085=>712,8086=>712,8087=>712,8088=>945,8089=>951,8090=>1250,8091=>1250, +8092=>1180,8093=>1206,8094=>1054,8095=>1063,8096=>869,8097=>869,8098=>869,8099=>869,8100=>869,8101=>869, +8102=>869,8103=>869,8104=>909,8105=>958,8106=>1246,8107=>1251,8108=>1076,8109=>1105,8110=>1028,8111=>1076, +8112=>687,8113=>687,8114=>687,8115=>687,8116=>687,8118=>687,8119=>687,8120=>774,8121=>774,8122=>876, +8123=>797,8124=>774,8125=>500,8126=>500,8127=>500,8128=>500,8129=>500,8130=>712,8131=>712,8132=>712, +8134=>712,8135=>712,8136=>929,8137=>846,8138=>1080,8139=>1009,8140=>837,8141=>500,8142=>500,8143=>500, +8144=>390,8145=>390,8146=>390,8147=>390,8150=>390,8151=>390,8152=>372,8153=>372,8154=>621,8155=>563, +8157=>500,8158=>500,8159=>500,8160=>675,8161=>675,8162=>675,8163=>675,8164=>716,8165=>716,8166=>675, +8167=>675,8168=>724,8169=>724,8170=>1020,8171=>980,8172=>838,8173=>500,8174=>500,8175=>500,8178=>869, +8179=>869,8180=>869,8182=>869,8183=>869,8184=>1065,8185=>891,8186=>1084,8187=>894,8188=>850,8189=>500, +8190=>500,8192=>500,8193=>1000,8194=>500,8195=>1000,8196=>330,8197=>250,8198=>167,8199=>696,8200=>380, +8201=>200,8202=>100,8203=>0,8204=>0,8205=>0,8206=>0,8207=>0,8208=>415,8209=>415,8210=>696, +8213=>1000,8214=>500,8215=>500,8219=>380,8223=>657,8227=>639,8228=>380,8229=>685,8231=>348,8232=>0, +8233=>0,8234=>0,8235=>0,8236=>0,8237=>0,8238=>0,8239=>200,8241=>1908,8242=>264,8243=>447, +8244=>630,8245=>264,8246=>447,8247=>630,8248=>733,8251=>972,8252=>627,8253=>580,8254=>500,8255=>828, +8256=>828,8257=>329,8258=>1023,8259=>500,8260=>167,8261=>457,8262=>457,8263=>1030,8264=>829,8265=>829, +8266=>513,8267=>687,8268=>500,8269=>500,8270=>523,8271=>400,8272=>828,8273=>523,8274=>556,8275=>838, +8276=>828,8277=>838,8278=>684,8279=>813,8280=>838,8281=>838,8282=>380,8283=>872,8284=>838,8285=>380, +8286=>380,8287=>222,8288=>0,8289=>0,8290=>0,8291=>0,8292=>0,8298=>0,8299=>0,8300=>0, +8301=>0,8302=>0,8303=>0,8304=>438,8305=>219,8308=>438,8309=>438,8310=>438,8311=>438,8312=>438, +8313=>438,8314=>528,8315=>528,8316=>528,8317=>288,8318=>288,8319=>456,8320=>438,8321=>438,8322=>438, +8323=>438,8324=>438,8325=>438,8326=>438,8327=>438,8328=>438,8329=>438,8330=>528,8331=>528,8332=>528, +8333=>288,8334=>288,8336=>458,8337=>479,8338=>488,8339=>413,8340=>479,8352=>929,8353=>696,8354=>696, +8355=>696,8356=>696,8357=>1042,8358=>837,8359=>1488,8360=>1205,8361=>1103,8362=>854,8363=>696,8365=>696, +8366=>696,8367=>1392,8368=>696,8369=>696,8370=>696,8371=>696,8372=>859,8373=>696,8376=>696,8377=>696, +8400=>0,8401=>0,8406=>0,8407=>0,8411=>0,8412=>0,8417=>0,8448=>1106,8449=>1106,8450=>734, +8451=>1211,8452=>896,8453=>1114,8454=>1148,8455=>696,8456=>698,8457=>952,8459=>1073,8460=>913,8461=>888, +8462=>712,8463=>712,8464=>597,8465=>697,8466=>856,8467=>472,8468=>974,8469=>837,8470=>1203,8471=>1000, +8472=>697,8473=>750,8474=>850,8475=>938,8476=>814,8477=>801,8478=>896,8479=>710,8480=>1020,8481=>1239, +8483=>834,8484=>754,8485=>622,8486=>850,8487=>769,8488=>763,8489=>303,8490=>775,8491=>774,8492=>928, +8493=>818,8494=>854,8495=>636,8496=>729,8497=>808,8498=>683,8499=>1184,8500=>465,8501=>794,8502=>731, +8503=>494,8504=>684,8505=>380,8506=>945,8507=>1370,8508=>790,8509=>737,8510=>654,8511=>863,8512=>840, +8513=>786,8514=>576,8515=>637,8516=>760,8517=>830,8518=>716,8519=>678,8520=>343,8521=>343,8523=>872, +8526=>547,8528=>1035,8529=>1035,8530=>1483,8531=>1035,8532=>1035,8533=>1035,8534=>1035,8535=>1035,8536=>1035, +8537=>1035,8538=>1035,8539=>1035,8540=>1035,8541=>1035,8542=>1035,8543=>615,8544=>372,8545=>659,8546=>945, +8547=>1099,8548=>774,8549=>1099,8550=>1386,8551=>1672,8552=>1121,8553=>771,8554=>1120,8555=>1407,8556=>637, +8557=>734,8558=>830,8559=>995,8560=>343,8561=>607,8562=>872,8563=>984,8564=>652,8565=>962,8566=>1227, +8567=>1491,8568=>969,8569=>645,8570=>969,8571=>1233,8572=>343,8573=>593,8574=>716,8575=>1042,8576=>1289, +8577=>830,8578=>1289,8579=>734,8580=>593,8581=>734,8585=>1035,8592=>838,8593=>838,8594=>838,8595=>838, +8596=>838,8597=>838,8598=>838,8599=>838,8600=>838,8601=>838,8602=>838,8603=>838,8604=>838,8605=>838, +8606=>838,8607=>838,8608=>838,8609=>838,8610=>838,8611=>838,8612=>838,8613=>838,8614=>838,8615=>838, +8616=>838,8617=>838,8618=>838,8619=>838,8620=>838,8621=>838,8622=>838,8623=>838,8624=>838,8625=>838, +8626=>838,8627=>838,8628=>838,8629=>838,8630=>838,8631=>838,8632=>838,8633=>838,8634=>838,8635=>838, +8636=>838,8637=>838,8638=>838,8639=>838,8640=>838,8641=>838,8642=>838,8643=>838,8644=>838,8645=>838, +8646=>838,8647=>838,8648=>838,8649=>838,8650=>838,8651=>838,8652=>838,8653=>838,8654=>838,8655=>838, +8656=>838,8657=>838,8658=>838,8659=>838,8660=>838,8661=>838,8662=>838,8663=>838,8664=>838,8665=>838, +8666=>838,8667=>838,8668=>838,8669=>838,8670=>838,8671=>838,8672=>838,8673=>838,8674=>838,8675=>838, +8676=>838,8677=>838,8678=>838,8679=>838,8680=>838,8681=>838,8682=>838,8683=>838,8684=>838,8685=>838, +8686=>838,8687=>838,8688=>838,8689=>838,8690=>838,8691=>838,8692=>838,8693=>838,8694=>838,8695=>838, +8696=>838,8697=>838,8698=>838,8699=>838,8700=>838,8701=>838,8702=>838,8703=>838,8704=>774,8705=>696, +8706=>544,8707=>683,8708=>683,8709=>856,8710=>697,8711=>697,8712=>896,8713=>896,8714=>750,8715=>896, +8716=>896,8717=>750,8718=>636,8719=>787,8720=>787,8721=>718,8722=>838,8723=>838,8724=>696,8725=>365, +8726=>696,8727=>838,8728=>626,8729=>380,8730=>667,8731=>667,8732=>667,8733=>712,8734=>833,8735=>838, +8736=>896,8737=>896,8738=>838,8739=>500,8740=>500,8741=>500,8742=>500,8743=>812,8744=>812,8745=>812, +8746=>812,8747=>610,8748=>929,8749=>1295,8750=>563,8751=>977,8752=>1313,8753=>563,8754=>563,8755=>563, +8756=>696,8757=>696,8758=>294,8759=>696,8760=>838,8761=>838,8762=>838,8763=>838,8764=>838,8765=>838, +8766=>838,8767=>838,8768=>375,8769=>838,8770=>838,8771=>838,8772=>838,8773=>838,8774=>838,8775=>838, +8776=>838,8777=>838,8778=>838,8779=>838,8780=>838,8781=>838,8782=>838,8783=>838,8784=>838,8785=>838, +8786=>838,8787=>838,8788=>1063,8789=>1063,8790=>838,8791=>838,8792=>838,8793=>838,8794=>838,8795=>838, +8796=>838,8797=>838,8798=>838,8799=>838,8800=>838,8801=>838,8802=>838,8803=>838,8804=>838,8805=>838, +8806=>838,8807=>838,8808=>841,8809=>841,8810=>1047,8811=>1047,8812=>500,8813=>838,8814=>838,8815=>838, +8816=>838,8817=>838,8818=>838,8819=>838,8820=>838,8821=>838,8822=>838,8823=>838,8824=>838,8825=>838, +8826=>838,8827=>838,8828=>838,8829=>838,8830=>838,8831=>838,8832=>838,8833=>838,8834=>838,8835=>838, +8836=>838,8837=>838,8838=>838,8839=>838,8840=>838,8841=>838,8842=>838,8843=>838,8844=>812,8845=>812, +8846=>812,8847=>838,8848=>838,8849=>838,8850=>838,8851=>796,8852=>796,8853=>838,8854=>838,8855=>838, +8856=>838,8857=>838,8858=>838,8859=>838,8860=>838,8861=>838,8862=>838,8863=>838,8864=>838,8865=>838, +8866=>914,8867=>914,8868=>914,8869=>914,8870=>542,8871=>542,8872=>914,8873=>914,8874=>914,8875=>914, +8876=>914,8877=>914,8878=>914,8879=>914,8880=>838,8881=>838,8882=>838,8883=>838,8884=>838,8885=>838, +8886=>1000,8887=>1000,8888=>838,8889=>838,8890=>542,8891=>812,8892=>812,8893=>812,8894=>838,8895=>838, +8896=>843,8897=>843,8898=>843,8899=>843,8900=>494,8901=>380,8902=>626,8903=>838,8904=>1000,8905=>1000, +8906=>1000,8907=>1000,8908=>1000,8909=>838,8910=>812,8911=>812,8912=>838,8913=>838,8914=>838,8915=>838, +8916=>838,8917=>838,8918=>838,8919=>838,8920=>1422,8921=>1422,8922=>838,8923=>838,8924=>838,8925=>838, +8926=>838,8927=>838,8928=>838,8929=>838,8930=>838,8931=>838,8932=>838,8933=>838,8934=>838,8935=>838, +8936=>838,8937=>838,8938=>838,8939=>838,8940=>838,8941=>838,8942=>1000,8943=>1000,8944=>1000,8945=>1000, +8946=>1158,8947=>896,8948=>750,8949=>896,8950=>896,8951=>750,8952=>896,8953=>896,8954=>1158,8955=>896, +8956=>750,8957=>896,8958=>750,8959=>896,8960=>602,8961=>602,8962=>716,8963=>838,8964=>838,8965=>838, +8966=>838,8967=>488,8968=>457,8969=>457,8970=>457,8971=>457,8972=>809,8973=>809,8974=>809,8975=>809, +8976=>838,8977=>539,8984=>928,8985=>838,8988=>469,8989=>469,8990=>469,8991=>469,8992=>610,8993=>610, +8996=>1152,8997=>1152,8998=>1414,8999=>1152,9000=>1443,9003=>1414,9004=>873,9075=>390,9076=>716,9077=>869, +9082=>687,9085=>863,9095=>1152,9108=>873,9115=>500,9116=>500,9117=>500,9118=>500,9119=>500,9120=>500, +9121=>500,9122=>500,9123=>500,9124=>500,9125=>500,9126=>500,9127=>750,9128=>750,9129=>750,9130=>750, +9131=>750,9132=>750,9133=>750,9134=>610,9166=>838,9167=>945,9187=>873,9189=>769,9192=>696,9250=>716, +9251=>716,9312=>847,9313=>847,9314=>847,9315=>847,9316=>847,9317=>847,9318=>847,9319=>847,9320=>847, +9321=>847,9600=>769,9601=>769,9602=>769,9603=>769,9604=>769,9605=>769,9606=>769,9607=>769,9608=>769, +9609=>769,9610=>769,9611=>769,9612=>769,9613=>769,9614=>769,9615=>769,9616=>769,9617=>769,9618=>769, +9619=>769,9620=>769,9621=>769,9622=>769,9623=>769,9624=>769,9625=>769,9626=>769,9627=>769,9628=>769, +9629=>769,9630=>769,9631=>769,9632=>945,9633=>945,9634=>945,9635=>945,9636=>945,9637=>945,9638=>945, +9639=>945,9640=>945,9641=>945,9642=>678,9643=>678,9644=>945,9645=>945,9646=>550,9647=>550,9648=>769, +9649=>769,9650=>769,9651=>769,9652=>502,9653=>502,9654=>769,9655=>769,9656=>502,9657=>502,9658=>769, +9659=>769,9660=>769,9661=>769,9662=>502,9663=>502,9664=>769,9665=>769,9666=>502,9667=>502,9668=>769, +9669=>769,9670=>769,9671=>769,9672=>769,9673=>873,9674=>494,9675=>873,9676=>873,9677=>873,9678=>873, +9679=>873,9680=>873,9681=>873,9682=>873,9683=>873,9684=>873,9685=>873,9686=>527,9687=>527,9688=>840, +9689=>970,9690=>970,9691=>970,9692=>387,9693=>387,9694=>387,9695=>387,9696=>769,9697=>769,9698=>769, +9699=>769,9700=>769,9701=>769,9702=>639,9703=>945,9704=>945,9705=>945,9706=>945,9707=>945,9708=>769, +9709=>769,9710=>769,9711=>1119,9712=>945,9713=>945,9714=>945,9715=>945,9716=>873,9717=>873,9718=>873, +9719=>873,9720=>769,9721=>769,9722=>769,9723=>830,9724=>830,9725=>732,9726=>732,9727=>769,9728=>896, +9729=>1000,9730=>896,9731=>896,9732=>896,9733=>896,9734=>896,9735=>573,9736=>896,9737=>896,9738=>888, +9739=>888,9740=>671,9741=>1013,9742=>1246,9743=>1250,9744=>896,9745=>896,9746=>896,9747=>532,9748=>896, +9749=>896,9750=>896,9751=>896,9752=>896,9753=>896,9754=>896,9755=>896,9756=>896,9757=>609,9758=>896, +9759=>609,9760=>896,9761=>896,9762=>896,9763=>896,9764=>669,9765=>746,9766=>649,9767=>784,9768=>545, +9769=>896,9770=>896,9771=>896,9772=>710,9773=>896,9774=>896,9775=>896,9776=>896,9777=>896,9778=>896, +9779=>896,9780=>896,9781=>896,9782=>896,9783=>896,9784=>896,9785=>896,9786=>896,9787=>896,9788=>896, +9789=>896,9790=>896,9791=>614,9792=>732,9793=>732,9794=>896,9795=>896,9796=>896,9797=>896,9798=>896, +9799=>896,9800=>896,9801=>896,9802=>896,9803=>896,9804=>896,9805=>896,9806=>896,9807=>896,9808=>896, +9809=>896,9810=>896,9811=>896,9812=>896,9813=>896,9814=>896,9815=>896,9816=>896,9817=>896,9818=>896, +9819=>896,9820=>896,9821=>896,9822=>896,9823=>896,9824=>896,9825=>896,9826=>896,9827=>896,9828=>896, +9829=>896,9830=>896,9831=>896,9832=>896,9833=>472,9834=>638,9835=>896,9836=>896,9837=>472,9838=>357, +9839=>484,9840=>748,9841=>766,9842=>896,9843=>896,9844=>896,9845=>896,9846=>896,9847=>896,9848=>896, +9849=>896,9850=>896,9851=>896,9852=>896,9853=>896,9854=>896,9855=>896,9856=>869,9857=>869,9858=>869, +9859=>869,9860=>869,9861=>869,9862=>896,9863=>896,9864=>896,9865=>896,9866=>896,9867=>896,9868=>896, +9869=>896,9870=>896,9871=>896,9872=>896,9873=>896,9874=>896,9875=>896,9876=>896,9877=>541,9878=>896, +9879=>896,9880=>896,9881=>896,9882=>896,9883=>896,9884=>896,9888=>896,9889=>702,9890=>1004,9891=>1089, +9892=>1175,9893=>903,9894=>838,9895=>838,9896=>838,9897=>838,9898=>838,9899=>838,9900=>838,9901=>838, +9902=>838,9903=>838,9904=>844,9905=>838,9906=>732,9907=>732,9908=>732,9909=>732,9910=>850,9911=>732, +9912=>732,9920=>838,9921=>838,9922=>838,9923=>838,9985=>838,9986=>838,9987=>838,9988=>838,9990=>838, +9991=>838,9992=>838,9993=>838,9996=>838,9997=>838,9998=>838,9999=>838,10000=>838,10001=>838,10002=>838, +10003=>838,10004=>838,10005=>838,10006=>838,10007=>838,10008=>838,10009=>838,10010=>838,10011=>838,10012=>838, +10013=>838,10014=>838,10015=>838,10016=>838,10017=>838,10018=>838,10019=>838,10020=>838,10021=>838,10022=>838, +10023=>838,10025=>838,10026=>838,10027=>838,10028=>838,10029=>838,10030=>838,10031=>838,10032=>838,10033=>838, +10034=>838,10035=>838,10036=>838,10037=>838,10038=>838,10039=>838,10040=>838,10041=>838,10042=>838,10043=>838, +10044=>838,10045=>838,10046=>838,10047=>838,10048=>838,10049=>838,10050=>838,10051=>838,10052=>838,10053=>838, +10054=>838,10055=>838,10056=>838,10057=>838,10058=>838,10059=>838,10061=>896,10063=>896,10064=>896,10065=>896, +10066=>896,10070=>896,10072=>838,10073=>838,10074=>838,10075=>322,10076=>322,10077=>538,10078=>538,10081=>838, +10082=>838,10083=>838,10084=>838,10085=>838,10086=>838,10087=>838,10088=>838,10089=>838,10090=>838,10091=>838, +10092=>838,10093=>838,10094=>838,10095=>838,10096=>838,10097=>838,10098=>838,10099=>838,10100=>838,10101=>838, +10102=>847,10103=>847,10104=>847,10105=>847,10106=>847,10107=>847,10108=>847,10109=>847,10110=>847,10111=>847, +10112=>838,10113=>838,10114=>838,10115=>838,10116=>838,10117=>838,10118=>838,10119=>838,10120=>838,10121=>838, +10122=>838,10123=>838,10124=>838,10125=>838,10126=>838,10127=>838,10128=>838,10129=>838,10130=>838,10131=>838, +10132=>838,10136=>838,10137=>838,10138=>838,10139=>838,10140=>838,10141=>838,10142=>838,10143=>838,10144=>838, +10145=>838,10146=>838,10147=>838,10148=>838,10149=>838,10150=>838,10151=>838,10152=>838,10153=>838,10154=>838, +10155=>838,10156=>838,10157=>838,10158=>838,10159=>838,10161=>838,10162=>838,10163=>838,10164=>838,10165=>838, +10166=>838,10167=>838,10168=>838,10169=>838,10170=>838,10171=>838,10172=>838,10173=>838,10174=>838,10181=>457, +10182=>457,10208=>494,10214=>487,10215=>487,10216=>457,10217=>457,10218=>721,10219=>721,10224=>838,10225=>838, +10226=>838,10227=>838,10228=>1157,10229=>1434,10230=>1434,10231=>1434,10232=>1434,10233=>1434,10234=>1434,10235=>1434, +10236=>1434,10237=>1434,10238=>1434,10239=>1434,10240=>781,10241=>781,10242=>781,10243=>781,10244=>781,10245=>781, +10246=>781,10247=>781,10248=>781,10249=>781,10250=>781,10251=>781,10252=>781,10253=>781,10254=>781,10255=>781, +10256=>781,10257=>781,10258=>781,10259=>781,10260=>781,10261=>781,10262=>781,10263=>781,10264=>781,10265=>781, +10266=>781,10267=>781,10268=>781,10269=>781,10270=>781,10271=>781,10272=>781,10273=>781,10274=>781,10275=>781, +10276=>781,10277=>781,10278=>781,10279=>781,10280=>781,10281=>781,10282=>781,10283=>781,10284=>781,10285=>781, +10286=>781,10287=>781,10288=>781,10289=>781,10290=>781,10291=>781,10292=>781,10293=>781,10294=>781,10295=>781, +10296=>781,10297=>781,10298=>781,10299=>781,10300=>781,10301=>781,10302=>781,10303=>781,10304=>781,10305=>781, +10306=>781,10307=>781,10308=>781,10309=>781,10310=>781,10311=>781,10312=>781,10313=>781,10314=>781,10315=>781, +10316=>781,10317=>781,10318=>781,10319=>781,10320=>781,10321=>781,10322=>781,10323=>781,10324=>781,10325=>781, +10326=>781,10327=>781,10328=>781,10329=>781,10330=>781,10331=>781,10332=>781,10333=>781,10334=>781,10335=>781, +10336=>781,10337=>781,10338=>781,10339=>781,10340=>781,10341=>781,10342=>781,10343=>781,10344=>781,10345=>781, +10346=>781,10347=>781,10348=>781,10349=>781,10350=>781,10351=>781,10352=>781,10353=>781,10354=>781,10355=>781, +10356=>781,10357=>781,10358=>781,10359=>781,10360=>781,10361=>781,10362=>781,10363=>781,10364=>781,10365=>781, +10366=>781,10367=>781,10368=>781,10369=>781,10370=>781,10371=>781,10372=>781,10373=>781,10374=>781,10375=>781, +10376=>781,10377=>781,10378=>781,10379=>781,10380=>781,10381=>781,10382=>781,10383=>781,10384=>781,10385=>781, +10386=>781,10387=>781,10388=>781,10389=>781,10390=>781,10391=>781,10392=>781,10393=>781,10394=>781,10395=>781, +10396=>781,10397=>781,10398=>781,10399=>781,10400=>781,10401=>781,10402=>781,10403=>781,10404=>781,10405=>781, +10406=>781,10407=>781,10408=>781,10409=>781,10410=>781,10411=>781,10412=>781,10413=>781,10414=>781,10415=>781, +10416=>781,10417=>781,10418=>781,10419=>781,10420=>781,10421=>781,10422=>781,10423=>781,10424=>781,10425=>781, +10426=>781,10427=>781,10428=>781,10429=>781,10430=>781,10431=>781,10432=>781,10433=>781,10434=>781,10435=>781, +10436=>781,10437=>781,10438=>781,10439=>781,10440=>781,10441=>781,10442=>781,10443=>781,10444=>781,10445=>781, +10446=>781,10447=>781,10448=>781,10449=>781,10450=>781,10451=>781,10452=>781,10453=>781,10454=>781,10455=>781, +10456=>781,10457=>781,10458=>781,10459=>781,10460=>781,10461=>781,10462=>781,10463=>781,10464=>781,10465=>781, +10466=>781,10467=>781,10468=>781,10469=>781,10470=>781,10471=>781,10472=>781,10473=>781,10474=>781,10475=>781, +10476=>781,10477=>781,10478=>781,10479=>781,10480=>781,10481=>781,10482=>781,10483=>781,10484=>781,10485=>781, +10486=>781,10487=>781,10488=>781,10489=>781,10490=>781,10491=>781,10492=>781,10493=>781,10494=>781,10495=>781, +10502=>838,10503=>838,10506=>838,10507=>838,10560=>838,10561=>838,10627=>753,10628=>753,10702=>838,10703=>1046, +10704=>1046,10705=>1000,10706=>1000,10707=>1000,10708=>1000,10709=>1000,10731=>494,10746=>838,10747=>838,10752=>1000, +10753=>1000,10754=>1000,10764=>1661,10765=>563,10766=>563,10767=>563,10768=>563,10769=>563,10770=>563,10771=>563, +10772=>563,10773=>563,10774=>563,10775=>563,10776=>563,10777=>563,10778=>563,10779=>563,10780=>563,10799=>838, +10877=>838,10878=>838,10879=>838,10880=>838,10881=>838,10882=>838,10883=>838,10884=>838,10885=>838,10886=>838, +10887=>838,10888=>838,10889=>838,10890=>838,10891=>838,10892=>838,10893=>838,10894=>838,10895=>838,10896=>838, +10897=>838,10898=>838,10899=>838,10900=>838,10901=>838,10902=>838,10903=>838,10904=>838,10905=>838,10906=>838, +10907=>838,10908=>838,10909=>838,10910=>838,10911=>838,10912=>838,10926=>838,10927=>838,10928=>838,10929=>838, +10930=>838,10931=>838,10932=>838,10933=>838,10934=>838,10935=>838,10936=>838,10937=>838,10938=>838,11001=>838, +11002=>838,11008=>838,11009=>838,11010=>838,11011=>838,11012=>838,11013=>838,11014=>838,11015=>838,11016=>838, +11017=>838,11018=>838,11019=>838,11020=>838,11021=>838,11022=>838,11023=>838,11024=>838,11025=>838,11026=>945, +11027=>945,11028=>945,11029=>945,11030=>769,11031=>769,11032=>769,11033=>769,11034=>945,11039=>869,11040=>869, +11041=>873,11042=>873,11043=>873,11044=>1119,11091=>869,11092=>869,11360=>637,11361=>360,11362=>637,11363=>733, +11364=>770,11365=>675,11366=>478,11367=>956,11368=>712,11369=>775,11370=>665,11371=>725,11372=>582,11373=>860, +11374=>995,11375=>774,11376=>860,11377=>778,11378=>1221,11379=>1056,11380=>652,11381=>698,11382=>565,11383=>782, +11385=>538,11386=>687,11387=>559,11388=>219,11389=>487,11390=>720,11391=>725,11800=>586,11810=>457,11811=>457, +11812=>457,11813=>457,11822=>580,19904=>896,19905=>896,19906=>896,19907=>896,19908=>896,19909=>896,19910=>896, +19911=>896,19912=>896,19913=>896,19914=>896,19915=>896,19916=>896,19917=>896,19918=>896,19919=>896,19920=>896, +19921=>896,19922=>896,19923=>896,19924=>896,19925=>896,19926=>896,19927=>896,19928=>896,19929=>896,19930=>896, +19931=>896,19932=>896,19933=>896,19934=>896,19935=>896,19936=>896,19937=>896,19938=>896,19939=>896,19940=>896, +19941=>896,19942=>896,19943=>896,19944=>896,19945=>896,19946=>896,19947=>896,19948=>896,19949=>896,19950=>896, +19951=>896,19952=>896,19953=>896,19954=>896,19955=>896,19956=>896,19957=>896,19958=>896,19959=>896,19960=>896, +19961=>896,19962=>896,19963=>896,19964=>896,19965=>896,19966=>896,19967=>896,42564=>720,42565=>595,42566=>436, +42567=>440,42572=>1405,42573=>1173,42576=>1234,42577=>1027,42580=>1174,42581=>972,42582=>1100,42583=>969,42594=>1100, +42595=>940,42596=>1096,42597=>915,42598=>1260,42599=>997,42600=>850,42601=>687,42602=>1037,42603=>868,42604=>1406, +42605=>1106,42606=>961,42634=>944,42635=>749,42636=>682,42637=>580,42644=>808,42645=>712,42760=>500,42761=>500, +42762=>500,42763=>500,42764=>500,42765=>500,42766=>500,42767=>500,42768=>500,42769=>500,42770=>500,42771=>500, +42772=>500,42773=>500,42774=>500,42779=>400,42780=>400,42781=>287,42782=>287,42783=>287,42786=>444,42787=>390, +42788=>540,42789=>540,42790=>837,42791=>712,42792=>1031,42793=>857,42794=>696,42795=>557,42800=>559,42801=>595, +42802=>1349,42803=>1052,42804=>1285,42805=>1065,42806=>1245,42807=>1052,42808=>1079,42809=>922,42810=>1079,42811=>922, +42812=>1035,42813=>922,42814=>698,42815=>549,42822=>850,42823=>542,42824=>683,42825=>531,42826=>918,42827=>814, +42830=>1406,42831=>1106,42832=>733,42833=>716,42834=>948,42835=>937,42838=>850,42839=>716,42852=>738,42853=>716, +42854=>738,42855=>716,42880=>637,42881=>343,42882=>837,42883=>712,42889=>400,42890=>396,42891=>456,42892=>306, +42893=>808,43003=>683,43004=>733,43005=>995,43006=>372,43007=>1325,61184=>216,61185=>242,61186=>267,61187=>277, +61188=>282,61189=>242,61190=>216,61191=>242,61192=>267,61193=>277,61194=>267,61195=>242,61196=>216,61197=>242, +61198=>267,61199=>277,61200=>267,61201=>242,61202=>216,61203=>242,61204=>282,61205=>277,61206=>267,61207=>242, +61208=>216,61209=>282,62917=>687,64256=>833,64257=>787,64258=>787,64259=>1138,64260=>1139,64261=>808,64262=>1020, +64275=>1388,64276=>1384,64277=>1378,64278=>1384,64279=>1713,64285=>343,64286=>0,64287=>663,64288=>720,64289=>963, +64290=>890,64291=>988,64292=>963,64293=>938,64294=>988,64295=>988,64296=>976,64297=>838,64298=>949,64299=>949, +64300=>949,64301=>949,64302=>751,64303=>751,64304=>751,64305=>673,64306=>537,64307=>654,64308=>712,64309=>343, +64310=>491,64312=>724,64313=>467,64314=>649,64315=>650,64316=>679,64318=>775,64320=>497,64321=>773,64323=>718, +64324=>687,64326=>751,64327=>729,64328=>649,64329=>949,64330=>751,64331=>343,64332=>673,64333=>650,64334=>687, +64335=>651,65024=>0,65025=>0,65026=>0,65027=>0,65028=>0,65029=>0,65030=>0,65031=>0,65032=>0, +65033=>0,65034=>0,65035=>0,65036=>0,65037=>0,65038=>0,65039=>0,65056=>0,65057=>0,65058=>0, +65059=>0,65529=>0,65530=>0,65531=>0,65532=>0,65533=>1113); +$enc=''; +$diff=''; +$file='dejavusansbi.z'; +$ctg='dejavusansbi.ctg.z'; +$originalsize=574636; +// --- EOF --- --- /dev/null +++ b/tcpdf/fonts/dejavusanscondensed.php @@ -1,1 +1,531 @@ - +928,'Descent'=>-236,'CapHeight'=>26,'Flags'=>96,'FontBBox'=>'[-918 -415 1513 1167]','ItalicAngle'=>-18.9,'StemV'=>70,'MissingWidth'=>540); +$up=-63; +$ut=44; +$dw=540; +$cw=array( +0=>540,32=>286,33=>360,34=>414,35=>754,36=>572,37=>855,38=>702,39=>247,40=>351, +41=>351,42=>450,43=>754,44=>286,45=>325,46=>286,47=>303,48=>572,49=>572,50=>572, +51=>572,52=>572,53=>572,54=>572,55=>572,56=>572,57=>572,58=>303,59=>303,60=>754, +61=>754,62=>754,63=>478,64=>900,65=>615,66=>617,67=>628,68=>693,69=>568,70=>518, +71=>697,72=>677,73=>265,74=>265,75=>590,76=>501,77=>776,78=>673,79=>708,80=>542, +81=>708,82=>625,83=>571,84=>549,85=>659,86=>615,87=>890,88=>616,89=>549,90=>616, +91=>351,92=>303,93=>351,94=>754,95=>450,96=>450,97=>551,98=>571,99=>495,100=>571, +101=>554,102=>316,103=>571,104=>570,105=>250,106=>250,107=>521,108=>250,109=>876,110=>570, +111=>550,112=>571,113=>571,114=>370,115=>469,116=>353,117=>570,118=>532,119=>736,120=>532, +121=>532,122=>472,123=>572,124=>303,125=>572,126=>754,8364=>572,8218=>286,402=>316,8222=>466, +8230=>900,8224=>450,8225=>450,710=>450,8240=>1208,352=>571,8249=>360,338=>962,381=>616,8216=>286, +8217=>286,8220=>466,8221=>466,8226=>531,8211=>450,8212=>900,732=>450,8482=>900,353=>469,8250=>360, +339=>920,382=>472,376=>549,160=>286,161=>360,162=>572,163=>572,164=>572,165=>572,166=>303, +167=>450,168=>450,169=>900,170=>424,171=>550,172=>754,173=>325,174=>900,175=>450,176=>450, +177=>754,178=>360,179=>360,180=>450,181=>572,182=>572,183=>286,184=>450,185=>360,186=>424, +187=>550,188=>872,189=>872,190=>872,191=>478,192=>615,193=>615,194=>615,195=>615,196=>615, +197=>615,198=>876,199=>628,200=>568,201=>568,202=>568,203=>568,204=>265,205=>265,206=>265, +207=>265,208=>697,209=>673,210=>708,211=>708,212=>708,213=>708,214=>708,215=>754,216=>708, +217=>659,218=>659,219=>659,220=>659,221=>549,222=>544,223=>567,224=>551,225=>551,226=>551, +227=>551,228=>551,229=>551,230=>883,231=>495,232=>554,233=>554,234=>554,235=>554,236=>250, +237=>250,238=>250,239=>250,240=>550,241=>570,242=>550,243=>550,244=>550,245=>550,246=>550, +247=>754,248=>550,249=>570,250=>570,251=>570,252=>570,253=>532,254=>571,255=>532,256=>615, +257=>551,258=>615,259=>551,260=>615,261=>551,262=>628,263=>495,264=>628,265=>495,266=>628, +267=>495,268=>628,269=>495,270=>693,271=>571,272=>697,273=>571,274=>568,275=>554,276=>568, +277=>554,278=>568,279=>554,280=>568,281=>554,282=>568,283=>554,284=>697,285=>571,286=>697, +287=>571,288=>697,289=>571,290=>697,291=>571,292=>677,293=>570,294=>824,295=>625,296=>265, +297=>250,298=>265,299=>250,300=>265,301=>250,302=>265,303=>250,304=>265,305=>250,306=>531, +307=>500,308=>265,309=>250,310=>590,311=>521,312=>521,313=>501,314=>250,315=>501,316=>250, +317=>501,318=>337,319=>501,320=>308,321=>505,322=>255,323=>673,324=>570,325=>673,326=>570, +327=>673,328=>570,329=>732,330=>673,331=>570,332=>708,333=>550,334=>708,335=>550,336=>708, +337=>550,340=>625,341=>370,342=>625,343=>370,344=>625,345=>370,346=>571,347=>469,348=>571, +349=>469,350=>571,351=>469,354=>549,355=>353,356=>549,357=>353,358=>549,359=>353,360=>659, +361=>570,362=>659,363=>570,364=>659,365=>570,366=>659,367=>570,368=>659,369=>570,370=>659, +371=>570,372=>890,373=>736,374=>549,375=>532,377=>616,378=>472,379=>616,380=>472,383=>316, +384=>571,385=>661,386=>617,387=>571,388=>617,389=>571,390=>633,391=>628,392=>495,393=>697, +394=>737,395=>617,396=>571,397=>550,398=>568,399=>708,400=>553,401=>518,403=>697,404=>618, +405=>885,406=>318,407=>265,408=>671,409=>521,410=>250,411=>532,412=>876,413=>673,414=>570, +415=>708,416=>822,417=>550,418=>854,419=>683,420=>586,421=>571,422=>625,423=>571,424=>469, +425=>568,426=>302,427=>353,428=>549,429=>353,430=>549,431=>772,432=>570,433=>688,434=>648, +435=>669,436=>657,437=>616,438=>472,439=>599,440=>599,441=>520,442=>472,443=>572,444=>599, +445=>520,446=>459,447=>571,448=>265,449=>443,450=>413,451=>266,452=>1279,453=>1169,454=>1039, +455=>751,456=>708,457=>411,458=>838,459=>831,460=>717,461=>615,462=>551,463=>265,464=>250, +465=>708,466=>550,467=>659,468=>570,469=>659,470=>570,471=>659,472=>570,473=>659,474=>570, +475=>659,476=>570,477=>554,478=>615,479=>551,480=>615,481=>551,482=>876,483=>883,484=>697, +485=>571,486=>697,487=>571,488=>590,489=>521,490=>708,491=>550,492=>708,493=>550,494=>599, +495=>520,496=>250,497=>1279,498=>1169,499=>1039,500=>697,501=>571,502=>1001,503=>614,504=>673, +505=>570,506=>615,507=>551,508=>876,509=>883,510=>708,511=>550,512=>615,513=>551,514=>615, +515=>551,516=>568,517=>554,518=>568,519=>554,520=>265,521=>250,522=>265,523=>250,524=>708, +525=>550,526=>708,527=>550,528=>625,529=>370,530=>625,531=>370,532=>659,533=>570,534=>659, +535=>570,536=>571,537=>469,538=>549,539=>353,540=>564,541=>469,542=>677,543=>570,544=>662, +545=>754,546=>628,547=>549,548=>616,549=>472,550=>615,551=>551,552=>568,553=>554,554=>708, +555=>550,556=>708,557=>550,558=>708,559=>550,560=>708,561=>550,562=>549,563=>532,564=>427, +565=>758,566=>429,567=>250,568=>898,569=>898,570=>615,571=>628,572=>495,573=>501,574=>549, +575=>469,576=>472,577=>542,578=>431,579=>617,580=>659,581=>615,582=>568,583=>554,584=>265, +585=>250,586=>703,587=>571,588=>625,589=>370,590=>549,591=>532,592=>540,593=>571,594=>571, +595=>571,596=>494,597=>495,598=>571,599=>626,600=>554,601=>554,602=>737,603=>486,604=>479, +605=>698,606=>598,607=>250,608=>626,609=>571,610=>566,611=>536,612=>536,613=>570,614=>570, +615=>570,616=>250,617=>304,618=>334,619=>356,620=>438,621=>250,622=>635,623=>876,624=>876, +625=>876,626=>581,627=>578,628=>570,629=>550,630=>772,631=>655,632=>593,633=>373,634=>373, +635=>372,636=>370,637=>369,638=>477,639=>477,640=>543,641=>543,642=>469,643=>302,644=>302, +645=>415,646=>302,647=>353,648=>353,649=>570,650=>556,651=>538,652=>532,653=>736,654=>532, +655=>549,656=>472,657=>472,658=>520,659=>520,660=>459,661=>459,662=>459,663=>459,664=>708, +665=>521,666=>598,667=>637,668=>588,669=>263,670=>600,671=>456,672=>654,673=>459,674=>459, +675=>913,676=>952,677=>911,678=>742,679=>549,680=>700,681=>763,682=>576,683=>589,684=>463, +685=>463,686=>595,687=>597,688=>364,689=>359,690=>157,691=>233,692=>266,693=>266,694=>341, +695=>463,696=>335,697=>250,698=>414,699=>286,700=>286,701=>286,702=>276,703=>276,704=>333, +705=>333,706=>450,707=>450,708=>450,709=>450,711=>450,712=>247,713=>450,714=>450,715=>450, +716=>247,717=>450,718=>450,719=>450,720=>303,721=>303,722=>276,723=>276,724=>450,725=>450, +726=>351,727=>286,728=>450,729=>450,730=>450,731=>450,733=>450,734=>284,735=>450,736=>383, +737=>149,738=>335,739=>399,740=>333,741=>444,742=>444,743=>444,744=>444,745=>444,748=>450, +749=>450,750=>466,755=>450,759=>450,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0, +774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0, +784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0, +794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0, +804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0, +814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0, +824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,832=>0,833=>0, +834=>0,835=>0,836=>0,837=>0,838=>0,839=>0,840=>0,841=>0,842=>0,843=>0, +844=>0,845=>0,846=>0,847=>0,849=>0,850=>0,851=>0,855=>0,856=>0,858=>0, +860=>0,861=>0,862=>0,863=>0,864=>0,865=>0,866=>0,880=>589,881=>511,882=>775, +883=>583,884=>250,885=>250,886=>673,887=>584,890=>450,891=>494,892=>495,893=>494,894=>303, +900=>450,901=>450,902=>623,903=>286,904=>671,905=>784,906=>367,908=>731,910=>742,911=>743, +912=>304,913=>615,914=>617,915=>501,916=>615,917=>568,918=>616,919=>677,920=>708,921=>265, +922=>590,923=>615,924=>776,925=>673,926=>568,927=>708,928=>677,929=>542,931=>568,932=>549, +933=>549,934=>708,935=>616,936=>708,937=>688,938=>265,939=>549,940=>593,941=>486,942=>570, +943=>304,944=>521,945=>593,946=>574,947=>532,948=>550,949=>486,950=>489,951=>570,952=>550, +953=>304,954=>530,955=>532,956=>572,957=>502,958=>501,959=>550,960=>542,961=>571,962=>528, +963=>570,964=>542,965=>521,966=>593,967=>520,968=>593,969=>753,970=>304,971=>521,972=>550, +973=>521,974=>753,975=>590,976=>553,977=>557,978=>628,979=>758,980=>628,981=>593,982=>753, +983=>597,984=>708,985=>550,986=>583,987=>528,988=>518,989=>413,990=>593,991=>593,992=>778, +993=>564,994=>840,995=>753,996=>682,997=>593,998=>712,999=>553,1000=>618,1001=>546,1002=>690, +1003=>563,1004=>629,1005=>550,1006=>549,1007=>482,1008=>597,1009=>571,1010=>495,1011=>250,1012=>708, +1013=>554,1014=>554,1015=>544,1016=>571,1017=>628,1018=>776,1019=>585,1020=>571,1021=>633,1022=>628, +1023=>633,1024=>568,1025=>568,1026=>708,1027=>549,1028=>628,1029=>571,1030=>265,1031=>265,1032=>265, +1033=>984,1034=>940,1035=>708,1036=>639,1037=>673,1038=>548,1039=>677,1040=>615,1041=>617,1042=>617, +1043=>549,1044=>703,1045=>568,1046=>969,1047=>577,1048=>673,1049=>673,1050=>639,1051=>677,1052=>776, +1053=>677,1054=>708,1055=>677,1056=>542,1057=>628,1058=>549,1059=>548,1060=>774,1061=>616,1062=>699, +1063=>617,1064=>962,1065=>984,1066=>749,1067=>794,1068=>617,1069=>628,1070=>971,1071=>625,1072=>551, +1073=>555,1074=>530,1075=>473,1076=>622,1077=>554,1078=>811,1079=>479,1080=>584,1081=>584,1082=>543, +1083=>575,1084=>679,1085=>588,1086=>550,1087=>588,1088=>571,1089=>495,1090=>524,1091=>532,1092=>769, +1093=>532,1094=>612,1095=>532,1096=>823,1097=>848,1098=>636,1099=>710,1100=>530,1101=>494,1102=>757, +1103=>541,1104=>554,1105=>554,1106=>563,1107=>473,1108=>494,1109=>469,1110=>250,1111=>250,1112=>250, +1113=>812,1114=>809,1115=>586,1116=>543,1117=>584,1118=>532,1119=>588,1120=>840,1121=>753,1122=>693, +1123=>604,1124=>848,1125=>674,1126=>791,1127=>705,1128=>1043,1129=>901,1130=>708,1131=>550,1132=>924, +1133=>742,1134=>572,1135=>486,1136=>771,1137=>789,1138=>708,1139=>550,1140=>703,1141=>598,1142=>703, +1143=>598,1144=>893,1145=>813,1146=>857,1147=>682,1148=>1062,1149=>925,1150=>840,1151=>753,1152=>628, +1153=>495,1154=>452,1155=>0,1156=>0,1157=>0,1158=>0,1159=>0,1160=>376,1161=>376,1162=>695, +1163=>609,1164=>617,1165=>530,1166=>542,1167=>571,1168=>549,1169=>473,1170=>607,1171=>531,1172=>562, +1173=>477,1174=>969,1175=>811,1176=>577,1177=>479,1178=>639,1179=>543,1180=>639,1181=>543,1182=>639, +1183=>543,1184=>771,1185=>748,1186=>677,1187=>594,1188=>913,1189=>789,1190=>973,1191=>824,1192=>790, +1193=>624,1194=>628,1195=>495,1196=>549,1197=>524,1198=>549,1199=>532,1200=>549,1201=>532,1202=>616, +1203=>532,1204=>840,1205=>726,1206=>617,1207=>532,1208=>617,1209=>532,1210=>617,1211=>570,1212=>847, +1213=>655,1214=>847,1215=>655,1216=>265,1217=>969,1218=>811,1219=>590,1220=>543,1221=>698,1222=>603, +1223=>677,1224=>594,1225=>699,1226=>612,1227=>617,1228=>532,1229=>799,1230=>697,1231=>250,1232=>615, +1233=>551,1234=>615,1235=>551,1236=>876,1237=>883,1238=>568,1239=>554,1240=>708,1241=>554,1242=>708, +1243=>554,1244=>969,1245=>811,1246=>577,1247=>479,1248=>599,1249=>520,1250=>673,1251=>584,1252=>673, +1253=>584,1254=>708,1255=>550,1256=>708,1257=>550,1258=>708,1259=>550,1260=>628,1261=>494,1262=>548, +1263=>532,1264=>548,1265=>532,1266=>548,1267=>532,1268=>617,1269=>532,1270=>549,1271=>473,1272=>794, +1273=>710,1274=>607,1275=>531,1276=>616,1277=>532,1278=>616,1279=>532,1280=>617,1281=>530,1282=>905, +1283=>807,1284=>877,1285=>782,1286=>611,1287=>529,1288=>964,1289=>861,1290=>1001,1291=>870,1292=>697, +1293=>593,1294=>695,1295=>640,1296=>553,1297=>486,1298=>677,1299=>575,1300=>1052,1301=>894,1302=>804, +1303=>778,1304=>928,1305=>887,1306=>708,1307=>571,1308=>890,1309=>736,1312=>972,1313=>814,1314=>973, +1315=>821,1316=>713,1317=>614,1329=>780,1330=>659,1331=>794,1332=>794,1333=>659,1334=>579,1335=>613, +1336=>659,1337=>765,1338=>794,1339=>659,1340=>501,1341=>741,1342=>888,1343=>659,1344=>636,1345=>579, +1346=>794,1347=>699,1348=>794,1349=>659,1350=>756,1351=>659,1352=>659,1353=>659,1354=>711,1355=>579, +1356=>794,1357=>659,1358=>794,1359=>571,1360=>659,1361=>659,1362=>719,1363=>708,1364=>711,1365=>708, +1366=>571,1369=>276,1370=>286,1371=>450,1372=>450,1373=>352,1374=>474,1375=>450,1377=>876,1378=>570, +1379=>686,1380=>690,1381=>570,1382=>627,1383=>479,1384=>570,1385=>630,1386=>627,1387=>570,1388=>363, +1389=>804,1390=>576,1391=>570,1392=>570,1393=>571,1394=>631,1395=>570,1396=>593,1397=>250,1398=>684, +1399=>464,1400=>570,1401=>407,1402=>876,1403=>464,1404=>691,1405=>570,1406=>626,1407=>876,1408=>570, +1409=>571,1410=>451,1411=>876,1412=>583,1413=>550,1414=>566,1415=>686,1417=>303,1418=>390,1456=>0, +1457=>0,1458=>0,1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1466=>0, +1467=>0,1468=>0,1469=>0,1470=>325,1471=>0,1472=>265,1473=>0,1474=>0,1475=>265,1478=>397, +1479=>0,1488=>566,1489=>547,1490=>403,1491=>534,1492=>576,1493=>245,1494=>336,1495=>576,1496=>583, +1497=>245,1498=>532,1499=>500,1500=>539,1501=>576,1502=>593,1503=>245,1504=>397,1505=>629,1506=>506, +1507=>576,1508=>543,1509=>468,1510=>523,1511=>596,1512=>532,1513=>727,1514=>591,1520=>423,1521=>409, +1522=>423,1523=>374,1524=>580,1542=>573,1543=>573,1545=>681,1546=>879,1548=>290,1557=>0,1563=>286, +1567=>478,1569=>423,1570=>250,1571=>250,1572=>435,1573=>250,1574=>704,1575=>250,1576=>847,1577=>471, +1578=>847,1579=>847,1580=>581,1581=>581,1582=>581,1583=>400,1584=>400,1585=>435,1586=>435,1587=>1099, +1588=>1099,1589=>1088,1590=>1088,1591=>832,1592=>832,1593=>537,1594=>537,1600=>264,1601=>933,1602=>698, +1603=>742,1604=>654,1605=>557,1606=>661,1607=>471,1608=>435,1609=>704,1610=>704,1611=>0,1612=>0, +1613=>0,1614=>0,1615=>0,1616=>0,1617=>0,1618=>0,1619=>0,1620=>0,1621=>0,1623=>0, +1626=>450,1632=>483,1633=>483,1634=>483,1635=>483,1636=>483,1637=>483,1638=>483,1639=>483,1640=>483, +1641=>483,1642=>483,1643=>292,1644=>286,1645=>490,1646=>847,1647=>698,1648=>0,1652=>263,1657=>847, +1658=>847,1659=>847,1660=>847,1661=>847,1662=>847,1663=>847,1664=>847,1665=>581,1666=>581,1667=>581, +1668=>581,1669=>581,1670=>581,1671=>581,1672=>400,1673=>400,1674=>400,1675=>400,1676=>400,1677=>400, +1678=>400,1679=>400,1680=>400,1681=>435,1682=>435,1683=>448,1684=>477,1685=>549,1686=>477,1687=>435, +1688=>435,1689=>435,1690=>1099,1691=>1099,1692=>1099,1693=>1088,1694=>1088,1695=>832,1696=>537,1697=>933, +1698=>933,1699=>933,1700=>933,1701=>933,1702=>933,1703=>698,1704=>698,1705=>805,1706=>948,1707=>805, +1708=>742,1709=>742,1710=>742,1711=>805,1712=>805,1713=>805,1714=>805,1715=>805,1716=>805,1717=>654, +1718=>654,1719=>654,1720=>654,1721=>661,1722=>661,1723=>661,1724=>661,1725=>661,1726=>628,1727=>581, +1734=>435,1740=>704,1742=>704,1749=>471,1776=>483,1777=>483,1778=>483,1779=>483,1780=>483,1781=>483, +1782=>483,1783=>483,1784=>483,1785=>483,1984=>572,1985=>572,1986=>572,1987=>572,1988=>572,1989=>572, +1990=>572,1991=>572,1992=>572,1993=>572,1994=>250,1995=>514,1996=>381,1997=>532,1998=>588,1999=>588, +2000=>534,2001=>588,2002=>746,2003=>394,2004=>394,2005=>502,2006=>550,2007=>315,2008=>863,2009=>425, +2010=>705,2011=>588,2012=>563,2013=>660,2014=>477,2015=>651,2016=>425,2017=>563,2018=>534,2019=>477, +2020=>477,2021=>470,2022=>534,2023=>534,2027=>0,2028=>0,2029=>0,2030=>0,2031=>0,2032=>0, +2033=>0,2034=>0,2035=>0,2036=>282,2037=>282,2040=>504,2041=>504,2042=>325,3647=>572,3713=>603, +3714=>615,3716=>619,3719=>434,3720=>565,3722=>615,3725=>619,3732=>602,3733=>577,3734=>580,3735=>589, +3737=>593,3738=>563,3739=>563,3740=>670,3741=>690,3742=>618,3743=>618,3745=>631,3746=>619,3747=>615, +3749=>584,3751=>569,3754=>633,3755=>737,3757=>569,3758=>615,3759=>708,3760=>569,3761=>0,3762=>485, +3763=>485,3764=>0,3765=>0,3766=>0,3767=>0,3768=>0,3769=>0,3771=>0,3772=>0,3773=>597, +3776=>337,3777=>591,3778=>414,3779=>492,3780=>442,3782=>606,3784=>0,3785=>0,3786=>0,3787=>0, +3788=>0,3789=>0,3792=>572,3793=>576,3794=>576,3795=>603,3796=>563,3797=>563,3798=>633,3799=>603, +3800=>606,3801=>609,3804=>925,3805=>925,4256=>756,4257=>621,4258=>577,4259=>683,4260=>532,4261=>617, +4262=>710,4263=>729,4264=>420,4265=>508,4266=>710,4267=>713,4268=>526,4269=>753,4270=>675,4271=>620, +4272=>729,4273=>526,4274=>526,4275=>753,4276=>753,4277=>581,4278=>543,4279=>526,4280=>536,4281=>526, +4282=>649,4283=>715,4284=>526,4285=>510,4286=>526,4287=>602,4288=>719,4289=>488,4290=>598,4291=>488, +4292=>508,4293=>606,4304=>457,4305=>457,4306=>479,4307=>706,4308=>470,4309=>465,4310=>457,4311=>717, +4312=>457,4313=>466,4314=>952,4315=>470,4316=>470,4317=>704,4318=>466,4319=>470,4320=>713,4321=>470, +4322=>590,4323=>471,4324=>709,4325=>470,4326=>704,4327=>470,4328=>470,4329=>470,4330=>510,4331=>470, +4332=>470,4333=>439,4334=>470,4335=>448,4336=>465,4337=>504,4338=>457,4339=>457,4340=>457,4341=>507, +4342=>741,4343=>536,4344=>470,4345=>498,4346=>498,4347=>527,4348=>273,5121=>615,5122=>615,5123=>615, +5124=>615,5125=>692,5126=>692,5127=>692,5129=>692,5130=>692,5131=>692,5132=>751,5133=>751,5134=>751, +5135=>751,5136=>751,5137=>751,5138=>870,5139=>906,5140=>870,5141=>906,5142=>692,5143=>870,5144=>906, +5145=>870,5146=>906,5147=>692,5149=>230,5150=>488,5151=>381,5152=>381,5153=>350,5154=>350,5155=>354, +5156=>350,5157=>419,5158=>347,5159=>230,5160=>350,5161=>350,5162=>350,5163=>980,5164=>817,5165=>857, +5166=>1005,5167=>615,5168=>615,5169=>615,5170=>615,5171=>656,5172=>656,5173=>656,5175=>656,5176=>656, +5177=>656,5178=>751,5179=>615,5180=>751,5181=>751,5182=>751,5183=>751,5184=>870,5185=>906,5186=>870, +5187=>906,5188=>870,5189=>906,5190=>870,5191=>906,5192=>656,5193=>457,5194=>172,5196=>659,5197=>659, +5198=>659,5199=>659,5200=>657,5201=>657,5202=>657,5204=>657,5205=>657,5206=>657,5207=>829,5208=>800, +5209=>829,5210=>800,5211=>829,5212=>800,5213=>835,5214=>810,5215=>835,5216=>810,5217=>853,5218=>810, +5219=>853,5220=>810,5221=>853,5222=>391,5223=>790,5224=>790,5225=>779,5226=>801,5227=>565,5228=>565, +5229=>565,5230=>565,5231=>565,5232=>565,5233=>565,5234=>565,5235=>565,5236=>773,5237=>693,5238=>733, +5239=>734,5240=>733,5241=>734,5242=>773,5243=>693,5244=>773,5245=>693,5246=>733,5247=>734,5248=>733, +5249=>734,5250=>733,5251=>366,5252=>366,5253=>675,5254=>697,5255=>675,5256=>697,5257=>565,5258=>565, +5259=>565,5260=>565,5261=>565,5262=>565,5263=>565,5264=>565,5265=>565,5266=>773,5267=>693,5268=>733, +5269=>734,5270=>733,5271=>734,5272=>773,5273=>693,5274=>773,5275=>693,5276=>733,5277=>734,5278=>733, +5279=>734,5280=>733,5281=>391,5282=>391,5283=>549,5284=>501,5285=>501,5286=>501,5287=>549,5288=>549, +5289=>549,5290=>501,5291=>501,5292=>674,5293=>691,5294=>671,5295=>687,5296=>671,5297=>687,5298=>674, +5299=>691,5300=>674,5301=>691,5302=>671,5303=>687,5304=>671,5305=>687,5306=>671,5307=>347,5308=>457, +5309=>347,5312=>766,5313=>766,5314=>766,5315=>766,5316=>766,5317=>766,5318=>766,5319=>766,5320=>766, +5321=>962,5322=>931,5323=>953,5324=>766,5325=>953,5326=>766,5327=>766,5328=>540,5329=>407,5330=>540, +5331=>766,5332=>766,5333=>766,5334=>766,5335=>766,5336=>766,5337=>766,5338=>766,5339=>766,5340=>962, +5341=>931,5342=>953,5343=>927,5344=>953,5345=>927,5346=>962,5347=>931,5348=>962,5349=>931,5350=>975, +5351=>927,5352=>975,5353=>927,5354=>540,5356=>656,5357=>542,5358=>542,5359=>542,5360=>542,5361=>542, +5362=>542,5363=>542,5364=>542,5365=>542,5366=>751,5367=>678,5368=>712,5369=>694,5370=>712,5371=>694, +5372=>751,5373=>678,5374=>751,5375=>678,5376=>712,5377=>694,5378=>712,5379=>694,5380=>712,5381=>376, +5382=>378,5383=>376,5392=>641,5393=>641,5394=>641,5395=>802,5396=>802,5397=>802,5398=>802,5399=>818, +5400=>785,5401=>818,5402=>785,5403=>818,5404=>785,5405=>1026,5406=>989,5407=>1026,5408=>989,5409=>1026, +5410=>989,5411=>1026,5412=>989,5413=>576,5414=>564,5415=>564,5416=>564,5417=>564,5418=>564,5419=>564, +5420=>564,5421=>564,5422=>564,5423=>760,5424=>703,5425=>734,5426=>736,5427=>734,5428=>736,5429=>760, +5430=>703,5431=>760,5432=>703,5433=>734,5434=>736,5435=>734,5436=>736,5437=>734,5438=>376,5440=>350, +5441=>436,5442=>824,5443=>824,5444=>824,5445=>824,5446=>824,5447=>824,5448=>542,5449=>542,5450=>542, +5451=>542,5452=>542,5453=>542,5454=>751,5455=>678,5456=>376,5458=>656,5459=>615,5460=>615,5461=>615, +5462=>615,5463=>653,5464=>653,5465=>653,5466=>653,5467=>831,5468=>906,5469=>457,5470=>659,5471=>659, +5472=>659,5473=>659,5474=>659,5475=>659,5476=>657,5477=>657,5478=>657,5479=>657,5480=>853,5481=>810, +5482=>457,5492=>747,5493=>747,5494=>747,5495=>747,5496=>747,5497=>747,5498=>747,5499=>507,5500=>677, +5501=>436,5502=>942,5503=>942,5504=>942,5505=>942,5506=>942,5507=>942,5508=>942,5509=>743,5514=>747, +5515=>747,5516=>747,5517=>747,5518=>1133,5519=>1133,5520=>1133,5521=>901,5522=>901,5523=>1133,5524=>1133, +5525=>629,5526=>965,5536=>766,5537=>766,5538=>766,5539=>766,5540=>766,5541=>766,5542=>540,5543=>579, +5544=>579,5545=>579,5546=>579,5547=>579,5548=>579,5549=>579,5550=>376,5551=>565,5598=>693,5601=>690, +5702=>421,5703=>421,5742=>399,5743=>942,5744=>1178,5745=>1469,5746=>1469,5747=>1237,5748=>1237,5749=>1469, +5750=>1469,5760=>429,5761=>443,5762=>641,5763=>838,5764=>1035,5765=>1232,5766=>443,5767=>641,5768=>838, +5769=>1035,5770=>1232,5771=>448,5772=>646,5773=>844,5774=>1042,5775=>1241,5776=>443,5777=>641,5778=>836, +5779=>1034,5780=>1232,5781=>448,5782=>677,5783=>709,5784=>1084,5785=>1035,5786=>615,5787=>457,5788=>456, +7424=>532,7425=>646,7426=>883,7427=>527,7428=>495,7429=>544,7430=>544,7431=>441,7432=>486,7433=>250, +7434=>355,7435=>521,7436=>524,7437=>679,7438=>584,7439=>550,7440=>495,7441=>615,7442=>615,7443=>615, +7444=>920,7446=>550,7447=>550,7448=>472,7449=>541,7450=>541,7451=>524,7452=>517,7453=>663,7454=>853, +7455=>574,7456=>532,7457=>736,7458=>472,7459=>473,7462=>524,7463=>532,7464=>507,7465=>472,7466=>531, +7467=>575,7468=>387,7469=>552,7470=>389,7472=>436,7473=>358,7474=>358,7475=>439,7476=>426,7477=>167, +7478=>167,7479=>372,7480=>315,7481=>489,7482=>424,7483=>424,7484=>446,7485=>396,7486=>342,7487=>394, +7488=>346,7489=>415,7490=>560,7491=>352,7492=>352,7493=>365,7494=>583,7495=>385,7496=>365,7497=>375, +7498=>375,7499=>324,7500=>323,7501=>365,7502=>161,7503=>383,7504=>561,7505=>368,7506=>372,7507=>333, +7508=>372,7509=>372,7510=>385,7511=>265,7512=>364,7513=>422,7514=>561,7515=>375,7517=>361,7518=>335, +7519=>347,7520=>374,7521=>327,7522=>161,7523=>233,7524=>364,7525=>375,7526=>361,7527=>335,7528=>370, +7529=>374,7530=>327,7543=>571,7544=>426,7547=>334,7549=>600,7557=>250,7579=>365,7580=>333,7581=>333, +7582=>372,7583=>324,7584=>267,7585=>209,7586=>365,7587=>364,7588=>235,7589=>224,7590=>234,7591=>235, +7592=>211,7593=>224,7594=>211,7595=>338,7596=>561,7597=>561,7598=>369,7599=>431,7600=>368,7601=>372, +7602=>372,7603=>324,7604=>258,7605=>265,7606=>457,7607=>376,7608=>325,7609=>365,7610=>375,7611=>330, +7612=>393,7613=>330,7614=>353,7615=>372,7620=>0,7621=>0,7622=>0,7623=>0,7624=>0,7625=>0, +7680=>615,7681=>551,7682=>617,7683=>571,7684=>617,7685=>571,7686=>617,7687=>571,7688=>628,7689=>495, +7690=>693,7691=>571,7692=>693,7693=>571,7694=>693,7695=>571,7696=>693,7697=>571,7698=>693,7699=>571, +7700=>568,7701=>554,7702=>568,7703=>554,7704=>568,7705=>554,7706=>568,7707=>554,7708=>568,7709=>554, +7710=>518,7711=>316,7712=>697,7713=>571,7714=>677,7715=>570,7716=>677,7717=>570,7718=>677,7719=>570, +7720=>677,7721=>570,7722=>677,7723=>570,7724=>265,7725=>250,7726=>265,7727=>250,7728=>590,7729=>521, +7730=>590,7731=>521,7732=>590,7733=>521,7734=>501,7735=>259,7736=>501,7737=>259,7738=>501,7739=>250, +7740=>501,7741=>250,7742=>776,7743=>876,7744=>776,7745=>876,7746=>776,7747=>876,7748=>673,7749=>570, +7750=>673,7751=>570,7752=>673,7753=>570,7754=>673,7755=>570,7756=>708,7757=>550,7758=>708,7759=>550, +7760=>708,7761=>550,7762=>708,7763=>550,7764=>542,7765=>571,7766=>542,7767=>571,7768=>625,7769=>370, +7770=>625,7771=>370,7772=>625,7773=>370,7774=>625,7775=>370,7776=>571,7777=>469,7778=>571,7779=>469, +7780=>571,7781=>469,7782=>571,7783=>469,7784=>571,7785=>469,7786=>549,7787=>353,7788=>549,7789=>353, +7790=>549,7791=>353,7792=>549,7793=>353,7794=>659,7795=>570,7796=>659,7797=>570,7798=>659,7799=>570, +7800=>659,7801=>570,7802=>659,7803=>570,7804=>615,7805=>532,7806=>615,7807=>532,7808=>890,7809=>736, +7810=>890,7811=>736,7812=>890,7813=>736,7814=>890,7815=>736,7816=>890,7817=>736,7818=>616,7819=>532, +7820=>616,7821=>532,7822=>549,7823=>532,7824=>616,7825=>472,7826=>616,7827=>472,7828=>616,7829=>472, +7830=>570,7831=>353,7832=>736,7833=>532,7834=>551,7835=>316,7836=>316,7837=>316,7838=>691,7839=>550, +7840=>615,7841=>551,7842=>615,7843=>551,7844=>615,7845=>551,7846=>615,7847=>551,7848=>615,7849=>551, +7850=>615,7851=>551,7852=>615,7853=>551,7854=>615,7855=>551,7856=>615,7857=>551,7858=>615,7859=>551, +7860=>615,7861=>551,7862=>615,7863=>551,7864=>568,7865=>554,7866=>568,7867=>554,7868=>568,7869=>554, +7870=>568,7871=>554,7872=>568,7873=>554,7874=>568,7875=>554,7876=>568,7877=>554,7878=>568,7879=>554, +7880=>265,7881=>250,7882=>265,7883=>250,7884=>708,7885=>550,7886=>708,7887=>550,7888=>708,7889=>550, +7890=>708,7891=>550,7892=>708,7893=>550,7894=>708,7895=>550,7896=>708,7897=>550,7898=>822,7899=>550, +7900=>822,7901=>550,7902=>822,7903=>550,7904=>822,7905=>550,7906=>822,7907=>550,7908=>659,7909=>570, +7910=>659,7911=>570,7912=>772,7913=>570,7914=>772,7915=>570,7916=>772,7917=>570,7918=>772,7919=>570, +7920=>772,7921=>570,7922=>549,7923=>532,7924=>549,7925=>532,7926=>549,7927=>532,7928=>549,7929=>532, +7930=>692,7931=>429,7936=>593,7937=>593,7938=>593,7939=>593,7940=>593,7941=>593,7942=>593,7943=>593, +7944=>615,7945=>615,7946=>790,7947=>790,7948=>692,7949=>721,7950=>637,7951=>668,7952=>486,7953=>486, +7954=>486,7955=>486,7956=>486,7957=>486,7960=>640,7961=>640,7962=>869,7963=>877,7964=>809,7965=>835, +7968=>570,7969=>570,7970=>570,7971=>570,7972=>570,7973=>570,7974=>570,7975=>570,7976=>753,7977=>751, +7978=>977,7979=>980,7980=>924,7981=>945,7982=>840,7983=>852,7984=>304,7985=>304,7986=>304,7987=>304, +7988=>304,7989=>304,7990=>304,7991=>304,7992=>342,7993=>336,7994=>571,7995=>571,7996=>513,7997=>540, +7998=>440,7999=>443,8000=>550,8001=>550,8002=>550,8003=>550,8004=>550,8005=>550,8008=>724,8009=>763, +8010=>985,8011=>989,8012=>844,8013=>873,8016=>521,8017=>521,8018=>521,8019=>521,8020=>521,8021=>521, +8022=>521,8023=>521,8025=>705,8027=>897,8029=>911,8031=>808,8032=>753,8033=>753,8034=>753,8035=>753, +8036=>753,8037=>753,8038=>753,8039=>753,8040=>722,8041=>759,8042=>980,8043=>985,8044=>851,8045=>875, +8046=>829,8047=>857,8048=>593,8049=>593,8050=>486,8051=>493,8052=>570,8053=>589,8054=>304,8055=>304, +8056=>550,8057=>550,8058=>521,8059=>521,8060=>753,8061=>753,8064=>593,8065=>593,8066=>593,8067=>593, +8068=>593,8069=>593,8070=>593,8071=>593,8072=>615,8073=>615,8074=>790,8075=>790,8076=>692,8077=>721, +8078=>637,8079=>668,8080=>570,8081=>570,8082=>570,8083=>570,8084=>570,8085=>570,8086=>570,8087=>570, +8088=>753,8089=>751,8090=>977,8091=>980,8092=>924,8093=>945,8094=>840,8095=>852,8096=>753,8097=>753, +8098=>753,8099=>753,8100=>753,8101=>753,8102=>753,8103=>753,8104=>722,8105=>759,8106=>980,8107=>985, +8108=>851,8109=>875,8110=>829,8111=>857,8112=>593,8113=>593,8114=>593,8115=>593,8116=>593,8118=>593, +8119=>593,8120=>615,8121=>615,8122=>645,8123=>623,8124=>615,8125=>450,8126=>450,8127=>450,8128=>450, +8129=>450,8130=>570,8131=>570,8132=>589,8134=>570,8135=>570,8136=>724,8137=>671,8138=>837,8139=>784, +8140=>677,8141=>450,8142=>450,8143=>450,8144=>304,8145=>304,8146=>304,8147=>304,8150=>304,8151=>304, +8152=>265,8153=>265,8154=>427,8155=>367,8157=>450,8158=>450,8159=>450,8160=>521,8161=>521,8162=>521, +8163=>521,8164=>571,8165=>571,8166=>521,8167=>521,8168=>549,8169=>549,8170=>760,8171=>742,8172=>616, +8173=>450,8174=>450,8175=>450,8178=>753,8179=>753,8180=>753,8182=>753,8183=>753,8184=>847,8185=>731, +8186=>830,8187=>743,8188=>688,8189=>450,8190=>450,8192=>450,8193=>900,8194=>450,8195=>900,8196=>296, +8197=>225,8198=>150,8199=>572,8200=>286,8201=>180,8202=>89,8203=>0,8204=>0,8205=>0,8206=>0, +8207=>0,8208=>325,8209=>325,8210=>572,8213=>900,8214=>450,8215=>450,8219=>286,8223=>466,8227=>531, +8228=>301,8229=>601,8231=>286,8232=>0,8233=>0,8234=>0,8235=>0,8236=>0,8237=>0,8238=>0, +8239=>180,8241=>1562,8242=>204,8243=>336,8244=>468,8245=>204,8246=>336,8247=>468,8248=>305,8251=>754, +8252=>437,8253=>478,8254=>450,8255=>723,8256=>723,8257=>225,8258=>900,8259=>450,8260=>150,8261=>351, +8262=>351,8263=>830,8264=>659,8265=>659,8266=>447,8267=>572,8268=>450,8269=>450,8270=>450,8271=>303, +8272=>723,8273=>450,8274=>404,8275=>900,8276=>723,8277=>754,8278=>527,8279=>597,8280=>754,8281=>754, +8282=>286,8283=>717,8284=>754,8285=>286,8286=>286,8287=>200,8288=>0,8289=>0,8290=>0,8291=>0, +8292=>0,8298=>0,8299=>0,8300=>0,8301=>0,8302=>0,8303=>0,8304=>360,8305=>161,8308=>360, +8309=>360,8310=>360,8311=>360,8312=>360,8313=>360,8314=>475,8315=>475,8316=>475,8317=>221,8318=>221, +8319=>358,8320=>360,8321=>360,8322=>360,8323=>360,8324=>360,8325=>360,8326=>360,8327=>360,8328=>360, +8329=>360,8330=>475,8331=>475,8332=>475,8333=>221,8334=>221,8336=>352,8337=>375,8338=>372,8339=>399, +8340=>375,8352=>789,8353=>572,8354=>572,8355=>572,8356=>572,8357=>876,8358=>673,8359=>1145,8360=>966, +8361=>890,8362=>706,8363=>572,8365=>572,8366=>572,8367=>1145,8368=>572,8369=>572,8370=>572,8371=>572, +8372=>696,8373=>572,8376=>572,8377=>572,8400=>0,8401=>0,8406=>0,8407=>0,8411=>0,8412=>0, +8417=>0,8448=>917,8449=>917,8450=>628,8451=>1011,8452=>578,8453=>917,8454=>960,8455=>553,8456=>628, +8457=>856,8459=>889,8460=>679,8461=>765,8462=>570,8463=>570,8464=>422,8465=>627,8466=>648,8467=>372, +8468=>736,8469=>721,8470=>936,8471=>900,8472=>627,8473=>631,8474=>708,8475=>718,8476=>732,8477=>712, +8478=>807,8479=>615,8480=>917,8481=>967,8483=>615,8484=>670,8485=>520,8486=>688,8487=>688,8488=>554, +8489=>304,8490=>590,8491=>615,8492=>708,8493=>633,8494=>769,8495=>532,8496=>545,8497=>708,8498=>518, +8499=>962,8500=>416,8501=>670,8502=>606,8503=>419,8504=>580,8505=>342,8506=>833,8507=>1074,8508=>632, +8509=>655,8510=>589,8511=>764,8512=>729,8513=>697,8514=>501,8515=>501,8516=>549,8517=>737,8518=>637, +8519=>554,8520=>316,8521=>316,8523=>702,8526=>474,8528=>872,8529=>872,8530=>1233,8531=>872,8532=>872, +8533=>872,8534=>872,8535=>872,8536=>872,8537=>872,8538=>872,8539=>872,8540=>872,8541=>872,8542=>872, +8543=>511,8544=>265,8545=>443,8546=>620,8547=>831,8548=>615,8549=>830,8550=>1007,8551=>1185,8552=>826, +8553=>616,8554=>839,8555=>1018,8556=>501,8557=>628,8558=>693,8559=>776,8560=>250,8561=>412,8562=>573, +8563=>730,8564=>532,8565=>729,8566=>892,8567=>1053,8568=>737,8569=>532,8570=>740,8571=>901,8572=>250, +8573=>495,8574=>571,8575=>876,8576=>1121,8577=>693,8578=>1121,8579=>633,8580=>494,8581=>628,8585=>872, +8592=>754,8593=>754,8594=>754,8595=>754,8596=>754,8597=>754,8598=>754,8599=>754,8600=>754,8601=>754, +8602=>754,8603=>754,8604=>754,8605=>754,8606=>754,8607=>754,8608=>754,8609=>754,8610=>754,8611=>754, +8612=>754,8613=>754,8614=>754,8615=>754,8616=>754,8617=>754,8618=>754,8619=>754,8620=>754,8621=>754, +8622=>754,8623=>754,8624=>754,8625=>754,8626=>754,8627=>754,8628=>754,8629=>754,8630=>754,8631=>754, +8632=>754,8633=>754,8634=>754,8635=>754,8636=>754,8637=>754,8638=>754,8639=>754,8640=>754,8641=>754, +8642=>754,8643=>754,8644=>754,8645=>754,8646=>754,8647=>754,8648=>754,8649=>754,8650=>754,8651=>754, +8652=>754,8653=>754,8654=>754,8655=>754,8656=>754,8657=>754,8658=>754,8659=>754,8660=>754,8661=>754, +8662=>754,8663=>754,8664=>754,8665=>754,8666=>754,8667=>754,8668=>754,8669=>754,8670=>754,8671=>754, +8672=>754,8673=>754,8674=>754,8675=>754,8676=>754,8677=>754,8678=>754,8679=>754,8680=>754,8681=>754, +8682=>754,8683=>754,8684=>754,8685=>754,8686=>754,8687=>754,8688=>754,8689=>754,8690=>754,8691=>754, +8692=>754,8693=>754,8694=>754,8695=>754,8696=>754,8697=>754,8698=>754,8699=>754,8700=>754,8701=>754, +8702=>754,8703=>754,8704=>615,8705=>572,8706=>465,8707=>568,8708=>568,8709=>784,8710=>602,8711=>602, +8712=>784,8713=>784,8714=>646,8715=>784,8716=>784,8717=>646,8718=>572,8719=>681,8720=>681,8721=>606, +8722=>754,8723=>754,8724=>754,8725=>303,8726=>573,8727=>754,8728=>563,8729=>563,8730=>573,8731=>573, +8732=>573,8733=>643,8734=>750,8735=>754,8736=>807,8737=>807,8738=>754,8739=>450,8740=>450,8741=>450, +8742=>450,8743=>659,8744=>659,8745=>659,8746=>659,8747=>469,8748=>710,8749=>951,8750=>469,8751=>710, +8752=>951,8753=>469,8754=>469,8755=>469,8756=>572,8757=>572,8758=>234,8759=>572,8760=>754,8761=>754, +8762=>754,8763=>754,8764=>754,8765=>754,8766=>754,8767=>754,8768=>337,8769=>754,8770=>754,8771=>754, +8772=>754,8773=>754,8774=>754,8775=>754,8776=>754,8777=>754,8778=>754,8779=>754,8780=>754,8781=>754, +8782=>754,8783=>754,8784=>754,8785=>754,8786=>755,8787=>755,8788=>900,8789=>900,8790=>754,8791=>754, +8792=>754,8793=>754,8794=>754,8795=>754,8796=>754,8797=>754,8798=>754,8799=>754,8800=>754,8801=>754, +8802=>754,8803=>754,8804=>754,8805=>754,8806=>754,8807=>754,8808=>754,8809=>754,8810=>942,8811=>942, +8812=>417,8813=>754,8814=>754,8815=>754,8816=>754,8817=>754,8818=>754,8819=>754,8820=>754,8821=>754, +8822=>754,8823=>754,8824=>754,8825=>754,8826=>754,8827=>754,8828=>754,8829=>754,8830=>754,8831=>754, +8832=>754,8833=>754,8834=>754,8835=>754,8836=>754,8837=>754,8838=>754,8839=>754,8840=>754,8841=>754, +8842=>754,8843=>754,8844=>659,8845=>659,8846=>659,8847=>754,8848=>754,8849=>754,8850=>754,8851=>702, +8852=>702,8853=>754,8854=>754,8855=>754,8856=>754,8857=>754,8858=>754,8859=>754,8860=>754,8861=>754, +8862=>754,8863=>754,8864=>754,8865=>754,8866=>784,8867=>784,8868=>784,8869=>784,8870=>468,8871=>468, +8872=>784,8873=>784,8874=>784,8875=>784,8876=>784,8877=>784,8878=>784,8879=>784,8880=>754,8881=>754, +8882=>754,8883=>754,8884=>754,8885=>754,8886=>900,8887=>900,8888=>754,8889=>754,8890=>468,8891=>659, +8892=>659,8893=>659,8894=>754,8895=>754,8896=>738,8897=>738,8898=>738,8899=>738,8900=>444,8901=>286, +8902=>563,8903=>754,8904=>900,8905=>900,8906=>900,8907=>900,8908=>900,8909=>754,8910=>659,8911=>659, +8912=>754,8913=>754,8914=>754,8915=>754,8916=>754,8917=>754,8918=>754,8919=>754,8920=>1280,8921=>1280, +8922=>754,8923=>754,8924=>754,8925=>754,8926=>754,8927=>754,8928=>754,8929=>754,8930=>754,8931=>754, +8932=>754,8933=>754,8934=>754,8935=>754,8936=>754,8937=>754,8938=>754,8939=>754,8940=>754,8941=>754, +8942=>900,8943=>900,8944=>900,8945=>900,8946=>900,8947=>784,8948=>646,8949=>784,8950=>784,8951=>646, +8952=>784,8953=>784,8954=>900,8955=>784,8956=>646,8957=>784,8958=>646,8959=>784,8960=>542,8961=>542, +8962=>571,8963=>754,8964=>754,8965=>754,8966=>754,8967=>439,8968=>351,8969=>351,8970=>351,8971=>351, +8972=>728,8973=>728,8974=>728,8975=>728,8976=>754,8977=>461,8984=>900,8985=>754,8988=>422,8989=>422, +8990=>422,8991=>422,8992=>469,8993=>469,8996=>1037,8997=>1037,8998=>1272,8999=>1037,9000=>1299,9003=>1272, +9004=>786,9075=>304,9076=>571,9077=>753,9082=>593,9085=>681,9095=>1037,9108=>786,9115=>450,9116=>450, +9117=>450,9118=>450,9119=>450,9120=>450,9121=>450,9122=>450,9123=>450,9124=>450,9125=>450,9126=>450, +9127=>675,9128=>675,9129=>675,9130=>675,9131=>675,9132=>675,9133=>675,9134=>469,9166=>754,9167=>850, +9187=>786,9189=>692,9192=>572,9250=>571,9251=>571,9312=>807,9313=>807,9314=>807,9315=>807,9316=>807, +9317=>807,9318=>807,9319=>807,9320=>807,9321=>807,9472=>542,9473=>542,9474=>542,9475=>542,9476=>542, +9477=>542,9478=>542,9479=>542,9480=>542,9481=>542,9482=>542,9483=>542,9484=>542,9485=>542,9486=>542, +9487=>542,9488=>542,9489=>542,9490=>542,9491=>542,9492=>542,9493=>542,9494=>542,9495=>542,9496=>542, +9497=>542,9498=>542,9499=>542,9500=>542,9501=>542,9502=>542,9503=>542,9504=>542,9505=>542,9506=>542, +9507=>542,9508=>542,9509=>542,9510=>542,9511=>542,9512=>542,9513=>542,9514=>542,9515=>542,9516=>542, +9517=>542,9518=>542,9519=>542,9520=>542,9521=>542,9522=>542,9523=>542,9524=>542,9525=>542,9526=>542, +9527=>542,9528=>542,9529=>542,9530=>542,9531=>542,9532=>542,9533=>542,9534=>542,9535=>542,9536=>542, +9537=>542,9538=>542,9539=>542,9540=>542,9541=>542,9542=>542,9543=>542,9544=>542,9545=>542,9546=>542, +9547=>542,9548=>542,9549=>542,9550=>542,9551=>542,9552=>542,9553=>542,9554=>542,9555=>542,9556=>542, +9557=>542,9558=>542,9559=>542,9560=>542,9561=>542,9562=>542,9563=>542,9564=>542,9565=>542,9566=>542, +9567=>542,9568=>542,9569=>542,9570=>542,9571=>542,9572=>542,9573=>542,9574=>542,9575=>542,9576=>542, +9577=>542,9578=>542,9579=>542,9580=>542,9581=>542,9582=>542,9583=>542,9584=>542,9585=>542,9586=>542, +9587=>542,9588=>542,9589=>542,9590=>542,9591=>542,9592=>542,9593=>542,9594=>542,9595=>542,9596=>542, +9597=>542,9598=>542,9599=>542,9600=>692,9601=>692,9602=>692,9603=>692,9604=>692,9605=>692,9606=>692, +9607=>692,9608=>692,9609=>692,9610=>692,9611=>692,9612=>692,9613=>692,9614=>692,9615=>692,9616=>692, +9617=>692,9618=>692,9619=>692,9620=>692,9621=>692,9622=>692,9623=>692,9624=>692,9625=>692,9626=>692, +9627=>692,9628=>692,9629=>692,9630=>692,9631=>692,9632=>850,9633=>850,9634=>850,9635=>850,9636=>850, +9637=>850,9638=>850,9639=>850,9640=>850,9641=>850,9642=>610,9643=>610,9644=>850,9645=>850,9646=>495, +9647=>495,9648=>692,9649=>692,9650=>692,9651=>692,9652=>452,9653=>452,9654=>692,9655=>692,9656=>452, +9657=>452,9658=>692,9659=>692,9660=>692,9661=>692,9662=>452,9663=>452,9664=>692,9665=>692,9666=>452, +9667=>452,9668=>692,9669=>692,9670=>692,9671=>692,9672=>692,9673=>785,9674=>444,9675=>785,9676=>785, +9677=>785,9678=>785,9679=>785,9680=>785,9681=>785,9682=>785,9683=>785,9684=>785,9685=>785,9686=>474, +9687=>474,9688=>712,9689=>873,9690=>873,9691=>873,9692=>348,9693=>348,9694=>348,9695=>348,9696=>785, +9697=>785,9698=>692,9699=>692,9700=>692,9701=>692,9702=>531,9703=>850,9704=>850,9705=>850,9706=>850, +9707=>850,9708=>692,9709=>692,9710=>692,9711=>1007,9712=>850,9713=>850,9714=>850,9715=>850,9716=>785, +9717=>785,9718=>785,9719=>785,9720=>692,9721=>692,9722=>692,9723=>747,9724=>747,9725=>659,9726=>659, +9727=>692,9728=>807,9729=>900,9730=>807,9731=>807,9732=>807,9733=>807,9734=>807,9735=>515,9736=>806, +9737=>807,9738=>799,9739=>799,9740=>604,9741=>911,9742=>1121,9743=>1125,9744=>807,9745=>807,9746=>807, +9747=>479,9748=>807,9749=>807,9750=>807,9751=>807,9752=>807,9753=>807,9754=>807,9755=>807,9756=>807, +9757=>548,9758=>807,9759=>548,9760=>807,9761=>807,9762=>807,9763=>807,9764=>602,9765=>671,9766=>584, +9767=>705,9768=>490,9769=>807,9770=>807,9771=>807,9772=>639,9773=>807,9774=>807,9775=>807,9776=>807, +9777=>807,9778=>807,9779=>807,9780=>807,9781=>807,9782=>807,9783=>807,9784=>807,9785=>807,9786=>807, +9787=>807,9788=>807,9789=>807,9790=>807,9791=>552,9792=>659,9793=>659,9794=>807,9795=>807,9796=>807, +9797=>807,9798=>807,9799=>807,9800=>807,9801=>807,9802=>807,9803=>807,9804=>807,9805=>807,9806=>807, +9807=>807,9808=>807,9809=>807,9810=>807,9811=>807,9812=>807,9813=>807,9814=>807,9815=>807,9816=>807, +9817=>807,9818=>807,9819=>807,9820=>807,9821=>807,9822=>807,9823=>807,9824=>807,9825=>807,9826=>807, +9827=>807,9828=>807,9829=>807,9830=>807,9831=>807,9832=>807,9833=>424,9834=>574,9835=>807,9836=>807, +9837=>424,9838=>321,9839=>435,9840=>673,9841=>689,9842=>807,9843=>807,9844=>807,9845=>807,9846=>807, +9847=>807,9848=>807,9849=>807,9850=>807,9851=>807,9852=>807,9853=>807,9854=>807,9855=>807,9856=>782, +9857=>782,9858=>782,9859=>782,9860=>782,9861=>782,9862=>807,9863=>807,9864=>807,9865=>807,9866=>807, +9867=>807,9868=>807,9869=>807,9870=>807,9871=>807,9872=>807,9873=>807,9874=>807,9875=>807,9876=>807, +9877=>487,9878=>807,9879=>807,9880=>807,9881=>807,9882=>807,9883=>807,9884=>807,9888=>807,9889=>632, +9890=>904,9891=>980,9892=>1057,9893=>813,9894=>754,9895=>754,9896=>754,9897=>754,9898=>754,9899=>754, +9900=>754,9901=>754,9902=>754,9903=>754,9904=>759,9905=>754,9906=>659,9907=>659,9908=>659,9909=>659, +9910=>765,9911=>659,9912=>659,9920=>754,9921=>754,9922=>754,9923=>754,9985=>754,9986=>754,9987=>754, +9988=>754,9990=>754,9991=>754,9992=>754,9993=>754,9996=>754,9997=>754,9998=>754,9999=>754,10000=>754, +10001=>754,10002=>754,10003=>754,10004=>754,10005=>754,10006=>754,10007=>754,10008=>754,10009=>754,10010=>754, +10011=>754,10012=>754,10013=>754,10014=>754,10015=>754,10016=>754,10017=>754,10018=>754,10019=>754,10020=>754, +10021=>754,10022=>754,10023=>754,10025=>754,10026=>754,10027=>754,10028=>754,10029=>754,10030=>754,10031=>754, +10032=>754,10033=>754,10034=>754,10035=>754,10036=>754,10037=>754,10038=>754,10039=>754,10040=>754,10041=>754, +10042=>754,10043=>754,10044=>754,10045=>754,10046=>754,10047=>754,10048=>754,10049=>754,10050=>754,10051=>754, +10052=>754,10053=>754,10054=>754,10055=>754,10056=>754,10057=>754,10058=>754,10059=>754,10061=>807,10063=>807, +10064=>807,10065=>807,10066=>807,10070=>807,10072=>754,10073=>754,10074=>754,10075=>290,10076=>290,10077=>484, +10078=>484,10081=>754,10082=>754,10083=>754,10084=>754,10085=>754,10086=>754,10087=>754,10088=>754,10089=>754, +10090=>754,10091=>754,10092=>754,10093=>754,10094=>754,10095=>754,10096=>754,10097=>754,10098=>754,10099=>754, +10100=>754,10101=>754,10102=>807,10103=>807,10104=>807,10105=>807,10106=>807,10107=>807,10108=>807,10109=>807, +10110=>807,10111=>807,10112=>754,10113=>754,10114=>754,10115=>754,10116=>754,10117=>754,10118=>754,10119=>754, +10120=>754,10121=>754,10122=>754,10123=>754,10124=>754,10125=>754,10126=>754,10127=>754,10128=>754,10129=>754, +10130=>754,10131=>754,10132=>754,10136=>754,10137=>754,10138=>754,10139=>754,10140=>754,10141=>754,10142=>754, +10143=>754,10144=>754,10145=>754,10146=>754,10147=>754,10148=>754,10149=>754,10150=>754,10151=>754,10152=>754, +10153=>754,10154=>754,10155=>754,10156=>754,10157=>754,10158=>754,10159=>754,10161=>754,10162=>754,10163=>754, +10164=>754,10165=>754,10166=>754,10167=>754,10168=>754,10169=>754,10170=>754,10171=>754,10172=>754,10173=>754, +10174=>754,10181=>351,10182=>351,10208=>444,10214=>445,10215=>445,10216=>351,10217=>351,10218=>500,10219=>500, +10224=>754,10225=>754,10226=>754,10227=>754,10228=>1042,10229=>1290,10230=>1290,10231=>1290,10232=>1290,10233=>1290, +10234=>1290,10235=>1290,10236=>1290,10237=>1290,10238=>1290,10239=>1290,10240=>659,10241=>659,10242=>659,10243=>659, +10244=>659,10245=>659,10246=>659,10247=>659,10248=>659,10249=>659,10250=>659,10251=>659,10252=>659,10253=>659, +10254=>659,10255=>659,10256=>659,10257=>659,10258=>659,10259=>659,10260=>659,10261=>659,10262=>659,10263=>659, +10264=>659,10265=>659,10266=>659,10267=>659,10268=>659,10269=>659,10270=>659,10271=>659,10272=>659,10273=>659, +10274=>659,10275=>659,10276=>659,10277=>659,10278=>659,10279=>659,10280=>659,10281=>659,10282=>659,10283=>659, +10284=>659,10285=>659,10286=>659,10287=>659,10288=>659,10289=>659,10290=>659,10291=>659,10292=>659,10293=>659, +10294=>659,10295=>659,10296=>659,10297=>659,10298=>659,10299=>659,10300=>659,10301=>659,10302=>659,10303=>659, +10304=>659,10305=>659,10306=>659,10307=>659,10308=>659,10309=>659,10310=>659,10311=>659,10312=>659,10313=>659, +10314=>659,10315=>659,10316=>659,10317=>659,10318=>659,10319=>659,10320=>659,10321=>659,10322=>659,10323=>659, +10324=>659,10325=>659,10326=>659,10327=>659,10328=>659,10329=>659,10330=>659,10331=>659,10332=>659,10333=>659, +10334=>659,10335=>659,10336=>659,10337=>659,10338=>659,10339=>659,10340=>659,10341=>659,10342=>659,10343=>659, +10344=>659,10345=>659,10346=>659,10347=>659,10348=>659,10349=>659,10350=>659,10351=>659,10352=>659,10353=>659, +10354=>659,10355=>659,10356=>659,10357=>659,10358=>659,10359=>659,10360=>659,10361=>659,10362=>659,10363=>659, +10364=>659,10365=>659,10366=>659,10367=>659,10368=>659,10369=>659,10370=>659,10371=>659,10372=>659,10373=>659, +10374=>659,10375=>659,10376=>659,10377=>659,10378=>659,10379=>659,10380=>659,10381=>659,10382=>659,10383=>659, +10384=>659,10385=>659,10386=>659,10387=>659,10388=>659,10389=>659,10390=>659,10391=>659,10392=>659,10393=>659, +10394=>659,10395=>659,10396=>659,10397=>659,10398=>659,10399=>659,10400=>659,10401=>659,10402=>659,10403=>659, +10404=>659,10405=>659,10406=>659,10407=>659,10408=>659,10409=>659,10410=>659,10411=>659,10412=>659,10413=>659, +10414=>659,10415=>659,10416=>659,10417=>659,10418=>659,10419=>659,10420=>659,10421=>659,10422=>659,10423=>659, +10424=>659,10425=>659,10426=>659,10427=>659,10428=>659,10429=>659,10430=>659,10431=>659,10432=>659,10433=>659, +10434=>659,10435=>659,10436=>659,10437=>659,10438=>659,10439=>659,10440=>659,10441=>659,10442=>659,10443=>659, +10444=>659,10445=>659,10446=>659,10447=>659,10448=>659,10449=>659,10450=>659,10451=>659,10452=>659,10453=>659, +10454=>659,10455=>659,10456=>659,10457=>659,10458=>659,10459=>659,10460=>659,10461=>659,10462=>659,10463=>659, +10464=>659,10465=>659,10466=>659,10467=>659,10468=>659,10469=>659,10470=>659,10471=>659,10472=>659,10473=>659, +10474=>659,10475=>659,10476=>659,10477=>659,10478=>659,10479=>659,10480=>659,10481=>659,10482=>659,10483=>659, +10484=>659,10485=>659,10486=>659,10487=>659,10488=>659,10489=>659,10490=>659,10491=>659,10492=>659,10493=>659, +10494=>659,10495=>659,10502=>754,10503=>754,10506=>754,10507=>754,10560=>615,10561=>615,10627=>660,10628=>660, +10702=>754,10703=>900,10704=>900,10705=>900,10706=>900,10707=>900,10708=>900,10709=>900,10731=>444,10746=>754, +10747=>754,10752=>900,10753=>900,10754=>900,10764=>1192,10765=>469,10766=>469,10767=>469,10768=>469,10769=>469, +10770=>469,10771=>469,10772=>469,10773=>469,10774=>469,10775=>469,10776=>469,10777=>469,10778=>469,10779=>469, +10780=>469,10799=>754,10877=>754,10878=>754,10879=>754,10880=>754,10881=>754,10882=>754,10883=>754,10884=>754, +10885=>754,10886=>754,10887=>754,10888=>754,10889=>754,10890=>754,10891=>754,10892=>754,10893=>754,10894=>754, +10895=>754,10896=>754,10897=>754,10898=>754,10899=>754,10900=>754,10901=>754,10902=>754,10903=>754,10904=>754, +10905=>754,10906=>754,10907=>754,10908=>754,10909=>754,10910=>754,10911=>754,10912=>754,10926=>754,10927=>754, +10928=>754,10929=>754,10930=>754,10931=>754,10932=>754,10933=>754,10934=>754,10935=>754,10936=>754,10937=>754, +10938=>754,11001=>754,11002=>754,11008=>754,11009=>754,11010=>754,11011=>754,11012=>754,11013=>754,11014=>754, +11015=>754,11016=>754,11017=>754,11018=>754,11019=>754,11020=>754,11021=>754,11022=>752,11023=>752,11024=>752, +11025=>752,11026=>850,11027=>850,11028=>850,11029=>850,11030=>692,11031=>692,11032=>692,11033=>692,11034=>850, +11039=>782,11040=>782,11041=>786,11042=>786,11043=>786,11044=>1007,11091=>782,11092=>782,11360=>501,11361=>250, +11362=>501,11363=>542,11364=>625,11365=>551,11366=>353,11367=>677,11368=>570,11369=>590,11370=>521,11371=>616, +11372=>472,11373=>703,11374=>776,11375=>615,11376=>703,11377=>661,11378=>1015,11379=>865,11380=>532,11381=>589, +11382=>511,11383=>593,11385=>373,11386=>550,11387=>441,11388=>157,11389=>387,11390=>571,11391=>616,11568=>582, +11569=>799,11570=>799,11571=>614,11572=>615,11573=>571,11574=>505,11575=>615,11576=>615,11577=>568,11578=>568, +11579=>614,11580=>787,11581=>616,11582=>441,11583=>616,11584=>799,11585=>799,11586=>270,11587=>564,11588=>677, +11589=>590,11590=>475,11591=>616,11592=>580,11593=>568,11594=>452,11595=>857,11596=>700,11597=>673,11598=>558, +11599=>265,11600=>700,11601=>265,11602=>677,11603=>569,11604=>799,11605=>799,11606=>677,11607=>288,11608=>674, +11609=>799,11610=>799,11611=>628,11612=>690,11613=>616,11614=>628,11615=>560,11616=>615,11617=>677,11618=>568, +11619=>709,11620=>510,11621=>709,11631=>463,11800=>478,11810=>351,11811=>351,11812=>351,11813=>351,11822=>478, +19904=>807,19905=>807,19906=>807,19907=>807,19908=>807,19909=>807,19910=>807,19911=>807,19912=>807,19913=>807, +19914=>807,19915=>807,19916=>807,19917=>807,19918=>807,19919=>807,19920=>807,19921=>807,19922=>807,19923=>807, +19924=>807,19925=>807,19926=>807,19927=>807,19928=>807,19929=>807,19930=>807,19931=>807,19932=>807,19933=>807, +19934=>807,19935=>807,19936=>807,19937=>807,19938=>807,19939=>807,19940=>807,19941=>807,19942=>807,19943=>807, +19944=>807,19945=>807,19946=>807,19947=>807,19948=>807,19949=>807,19950=>807,19951=>807,19952=>807,19953=>807, +19954=>807,19955=>807,19956=>807,19957=>807,19958=>807,19959=>807,19960=>807,19961=>807,19962=>807,19963=>807, +19964=>807,19965=>807,19966=>807,19967=>807,42564=>571,42565=>469,42566=>318,42567=>304,42572=>1062,42573=>925, +42576=>926,42577=>815,42580=>971,42581=>757,42582=>879,42583=>758,42594=>956,42595=>820,42596=>959,42597=>811, +42598=>1060,42599=>907,42600=>708,42601=>550,42602=>770,42603=>641,42604=>1222,42605=>917,42606=>791,42634=>704, +42635=>616,42636=>549,42637=>524,42644=>617,42645=>570,42760=>444,42761=>444,42762=>444,42763=>444,42764=>444, +42765=>444,42766=>444,42767=>444,42768=>444,42769=>444,42770=>444,42771=>444,42772=>444,42773=>444,42774=>444, +42779=>332,42780=>332,42781=>227,42782=>227,42783=>227,42786=>347,42787=>320,42788=>424,42789=>424,42790=>677, +42791=>570,42792=>790,42793=>638,42794=>553,42795=>486,42800=>441,42801=>469,42802=>1125,42803=>886,42804=>1083, +42805=>891,42806=>1028,42807=>883,42808=>874,42809=>736,42810=>874,42811=>736,42812=>863,42813=>736,42814=>633, +42815=>494,42822=>612,42823=>353,42824=>523,42825=>384,42826=>726,42827=>633,42830=>1222,42831=>917,42832=>542, +42833=>571,42834=>660,42835=>697,42838=>708,42839=>571,42852=>544,42853=>571,42854=>544,42855=>571,42880=>501, +42881=>250,42882=>662,42883=>570,42889=>303,42890=>338,42891=>360,42892=>247,42893=>617,43003=>518,43004=>542, +43005=>776,43006=>265,43007=>1079,61184=>192,61185=>214,61186=>231,61187=>237,61188=>240,61189=>214,61190=>192, +61191=>214,61192=>231,61193=>237,61194=>231,61195=>214,61196=>192,61197=>214,61198=>231,61199=>237,61200=>231, +61201=>214,61202=>192,61203=>214,61204=>240,61205=>237,61206=>231,61207=>214,61208=>192,61209=>247,61440=>879, +61441=>879,63173=>550,64256=>620,64257=>567,64258=>567,64259=>870,64260=>870,64261=>617,64262=>774,64275=>1081, +64276=>1081,64277=>1076,64278=>1067,64279=>1376,64285=>245,64286=>0,64287=>423,64288=>572,64289=>770,64290=>696, +64291=>815,64292=>694,64293=>759,64294=>769,64295=>726,64296=>788,64297=>754,64298=>727,64299=>727,64300=>727, +64301=>727,64302=>566,64303=>566,64304=>566,64305=>547,64306=>403,64307=>534,64308=>576,64309=>245,64310=>336, +64312=>583,64313=>302,64314=>532,64315=>500,64316=>539,64318=>593,64320=>397,64321=>629,64323=>576,64324=>543, +64326=>523,64327=>596,64328=>532,64329=>727,64330=>591,64331=>245,64332=>547,64333=>500,64334=>543,64335=>485, +64338=>847,64339=>883,64340=>250,64341=>271,64342=>847,64343=>883,64344=>250,64345=>271,64346=>847,64347=>883, +64348=>250,64349=>271,64350=>847,64351=>883,64352=>250,64353=>271,64354=>847,64355=>883,64356=>250,64357=>271, +64358=>847,64359=>883,64360=>250,64361=>271,64362=>933,64363=>932,64364=>430,64365=>455,64366=>933,64367=>932, +64368=>430,64369=>455,64370=>581,64371=>581,64372=>556,64373=>581,64374=>581,64375=>581,64376=>556,64377=>581, +64378=>581,64379=>581,64380=>556,64381=>581,64382=>581,64383=>581,64384=>556,64385=>581,64386=>400,64387=>472, +64388=>400,64389=>472,64390=>400,64391=>472,64392=>400,64393=>472,64394=>435,64395=>497,64396=>435,64397=>497, +64398=>805,64399=>805,64400=>428,64401=>497,64402=>805,64403=>805,64404=>428,64405=>497,64406=>805,64407=>805, +64408=>428,64409=>497,64410=>805,64411=>805,64412=>428,64413=>497,64414=>661,64415=>685,64416=>661,64417=>685, +64418=>250,64419=>271,64426=>628,64427=>568,64428=>475,64429=>415,64467=>742,64468=>758,64469=>428,64470=>497, +64473=>435,64474=>465,64488=>250,64489=>271,64508=>704,64509=>750,64510=>250,64511=>271,65024=>0,65025=>0, +65026=>0,65027=>0,65028=>0,65029=>0,65030=>0,65031=>0,65032=>0,65033=>0,65034=>0,65035=>0, +65036=>0,65037=>0,65038=>0,65039=>0,65056=>0,65057=>0,65058=>0,65059=>0,65136=>264,65137=>264, +65138=>264,65139=>235,65140=>264,65142=>264,65143=>264,65144=>264,65145=>264,65146=>264,65147=>264,65148=>264, +65149=>264,65150=>264,65151=>264,65152=>423,65153=>250,65154=>274,65155=>250,65156=>274,65157=>435,65158=>465, +65159=>250,65160=>274,65161=>704,65162=>750,65163=>250,65164=>271,65165=>250,65166=>274,65167=>847,65168=>883, +65169=>250,65170=>271,65171=>471,65172=>482,65173=>847,65174=>883,65175=>250,65176=>271,65177=>847,65178=>883, +65179=>250,65180=>271,65181=>581,65182=>581,65183=>556,65184=>581,65185=>581,65186=>581,65187=>556,65188=>581, +65189=>581,65190=>581,65191=>556,65192=>581,65193=>400,65194=>472,65195=>400,65196=>472,65197=>435,65198=>497, +65199=>435,65200=>497,65201=>1099,65202=>1147,65203=>754,65204=>803,65205=>1099,65206=>1147,65207=>754,65208=>803, +65209=>1088,65210=>1103,65211=>764,65212=>780,65213=>1088,65214=>1103,65215=>764,65216=>780,65217=>832,65218=>854, +65219=>716,65220=>738,65221=>832,65222=>854,65223=>716,65224=>738,65225=>537,65226=>479,65227=>537,65228=>434, +65229=>537,65230=>479,65231=>470,65232=>434,65233=>933,65234=>932,65235=>430,65236=>455,65237=>698,65238=>750, +65239=>430,65240=>455,65241=>742,65242=>758,65243=>428,65244=>497,65245=>654,65246=>681,65247=>274,65248=>298, +65249=>557,65250=>599,65251=>482,65252=>520,65253=>661,65254=>685,65255=>250,65256=>271,65257=>471,65258=>482, +65259=>475,65260=>415,65261=>435,65262=>465,65263=>704,65264=>750,65265=>704,65266=>750,65267=>250,65268=>271, +65269=>513,65270=>537,65271=>513,65272=>537,65273=>513,65274=>537,65275=>513,65276=>537,65279=>0,65529=>0, +65530=>0,65531=>0,65532=>0,65533=>923); +$enc=''; +$diff=''; +$file='dejavusanscondensed.z'; +$ctg='dejavusanscondensed.ctg.z'; +$originalsize=605792; +// --- EOF --- --- /dev/null +++ b/tcpdf/fonts/dejavusanscondensedb.php @@ -1,1 +1,518 @@ - +928,'Descent'=>-236,'CapHeight'=>17,'Flags'=>96,'FontBBox'=>'[-962 -415 1777 1174]','ItalicAngle'=>18.4,'StemV'=>120,'MissingWidth'=>540); +$up=-63; +$ut=44; +$dw=540; +$cw=array( +0=>540,32=>313,33=>410,34=>469,35=>754,36=>626,37=>901,38=>785,39=>275,40=>411, +41=>411,42=>470,43=>754,44=>342,45=>374,46=>342,47=>329,48=>626,49=>626,50=>626, +51=>626,52=>626,53=>626,54=>626,55=>626,56=>626,57=>626,58=>360,59=>360,60=>754, +61=>754,62=>754,63=>522,64=>900,65=>696,66=>686,67=>660,68=>747,69=>615,70=>615, +71=>738,72=>753,73=>334,74=>334,75=>697,76=>573,77=>896,78=>753,79=>765,80=>659, +81=>765,82=>693,83=>648,84=>614,85=>730,86=>696,87=>993,88=>694,89=>651,90=>652, +91=>411,92=>329,93=>411,94=>754,95=>450,96=>450,97=>607,98=>644,99=>533,100=>644, +101=>610,102=>391,103=>644,104=>641,105=>308,106=>308,107=>598,108=>308,109=>938,110=>641, +111=>618,112=>644,113=>644,114=>444,115=>536,116=>430,117=>641,118=>586,119=>831,120=>580, +121=>586,122=>523,123=>641,124=>329,125=>641,126=>754,8364=>626,8218=>342,402=>391,8222=>591, +8230=>900,8224=>450,8225=>450,710=>450,8240=>1296,352=>648,8249=>371,338=>1050,381=>652,8216=>342, +8217=>342,8220=>591,8221=>591,8226=>575,8211=>450,8212=>900,732=>450,8482=>900,353=>536,8250=>371, +339=>984,382=>523,376=>651,160=>313,161=>410,162=>626,163=>626,164=>572,165=>626,166=>329, +167=>450,168=>450,169=>900,170=>507,171=>581,172=>754,173=>374,174=>900,175=>450,176=>450, +177=>754,178=>394,179=>394,180=>450,181=>662,182=>572,183=>342,184=>450,185=>394,186=>507, +187=>581,188=>932,189=>932,190=>932,191=>522,192=>696,193=>696,194=>696,195=>696,196=>696, +197=>696,198=>976,199=>660,200=>615,201=>615,202=>615,203=>615,204=>334,205=>334,206=>334, +207=>334,208=>754,209=>753,210=>765,211=>765,212=>765,213=>765,214=>765,215=>754,216=>765, +217=>730,218=>730,219=>730,220=>730,221=>651,222=>664,223=>647,224=>607,225=>607,226=>607, +227=>607,228=>607,229=>607,230=>943,231=>533,232=>610,233=>610,234=>610,235=>610,236=>308, +237=>308,238=>308,239=>308,240=>618,241=>641,242=>618,243=>618,244=>618,245=>618,246=>618, +247=>754,248=>618,249=>641,250=>641,251=>641,252=>641,253=>586,254=>644,255=>586,256=>696, +257=>607,258=>696,259=>607,260=>696,261=>607,262=>660,263=>533,264=>660,265=>533,266=>660, +267=>533,268=>660,269=>533,270=>747,271=>644,272=>754,273=>644,274=>615,275=>610,276=>615, +277=>610,278=>615,279=>610,280=>615,281=>610,282=>615,283=>610,284=>738,285=>644,286=>738, +287=>644,288=>738,289=>644,290=>738,291=>644,292=>753,293=>641,294=>876,295=>711,296=>334, +297=>308,298=>334,299=>308,300=>334,301=>308,302=>334,303=>308,304=>334,305=>308,306=>669, +307=>617,308=>334,309=>308,310=>697,311=>598,312=>598,313=>573,314=>308,315=>573,316=>308, +317=>573,318=>431,319=>573,320=>501,321=>578,322=>334,323=>753,324=>641,325=>753,326=>641, +327=>753,328=>641,329=>884,330=>753,331=>641,332=>765,333=>618,334=>765,335=>618,336=>765, +337=>618,340=>693,341=>444,342=>693,343=>444,344=>693,345=>444,346=>648,347=>536,348=>648, +349=>536,350=>648,351=>536,354=>614,355=>430,356=>614,357=>430,358=>614,359=>430,360=>730, +361=>641,362=>730,363=>641,364=>730,365=>641,366=>730,367=>641,368=>730,369=>641,370=>730, +371=>641,372=>993,373=>831,374=>651,375=>586,377=>652,378=>523,379=>652,380=>523,383=>391, +384=>644,385=>729,386=>686,387=>644,388=>686,389=>644,390=>660,391=>660,392=>533,393=>754, +394=>791,395=>681,396=>644,397=>619,398=>615,399=>764,400=>626,401=>615,403=>738,404=>713, +405=>940,406=>392,407=>350,408=>697,409=>598,410=>324,411=>532,412=>938,413=>753,414=>641, +415=>765,416=>786,417=>618,418=>974,419=>821,420=>703,421=>644,422=>693,423=>648,424=>536, +425=>615,426=>497,427=>430,428=>636,429=>430,430=>614,431=>751,432=>641,433=>765,434=>732, +435=>717,436=>700,437=>652,438=>523,439=>695,440=>695,441=>576,442=>523,443=>626,444=>695, +445=>576,446=>515,447=>644,448=>334,449=>593,450=>489,451=>334,452=>1399,453=>1271,454=>1168, +455=>908,456=>882,457=>617,458=>1088,459=>1062,460=>949,461=>696,462=>607,463=>334,464=>308, +465=>765,466=>618,467=>730,468=>641,469=>730,470=>641,471=>730,472=>641,473=>730,474=>641, +475=>730,476=>641,477=>610,478=>696,479=>607,480=>696,481=>607,482=>976,483=>943,484=>738, +485=>644,486=>738,487=>644,488=>697,489=>598,490=>765,491=>618,492=>765,493=>618,494=>695, +495=>523,496=>308,497=>1399,498=>1271,499=>1168,500=>738,501=>644,502=>1160,503=>708,504=>753, +505=>641,506=>696,507=>607,508=>976,509=>943,510=>765,511=>618,512=>696,513=>607,514=>696, +515=>607,516=>615,517=>610,518=>615,519=>610,520=>334,521=>308,522=>334,523=>308,524=>765, +525=>618,526=>765,527=>618,528=>693,529=>444,530=>693,531=>444,532=>730,533=>641,534=>730, +535=>641,536=>648,537=>536,538=>614,539=>430,540=>621,541=>546,542=>753,543=>641,544=>753, +545=>778,546=>728,547=>593,548=>652,549=>523,550=>696,551=>607,552=>615,553=>610,554=>765, +555=>618,556=>765,557=>618,558=>765,559=>618,560=>765,561=>618,562=>651,563=>586,564=>442, +565=>780,566=>460,567=>308,568=>979,569=>979,570=>696,571=>660,572=>533,573=>573,574=>614, +575=>536,576=>523,577=>703,578=>553,579=>686,580=>730,581=>696,582=>615,583=>610,584=>334, +585=>308,586=>774,587=>712,588=>693,589=>444,590=>651,591=>586,592=>607,593=>644,594=>644, +595=>644,596=>533,597=>533,598=>645,599=>712,600=>610,601=>610,602=>788,603=>501,604=>490, +605=>733,606=>658,607=>308,608=>712,609=>644,610=>564,611=>579,612=>571,613=>641,614=>641, +615=>641,616=>491,617=>396,618=>491,619=>502,620=>624,621=>308,622=>757,623=>938,624=>938, +625=>938,626=>641,627=>713,628=>636,629=>618,630=>817,631=>613,632=>716,633=>484,634=>484, +635=>584,636=>444,637=>444,638=>536,639=>536,640=>578,641=>578,642=>536,643=>374,644=>391, +645=>544,646=>497,647=>430,648=>430,649=>828,650=>695,651=>603,652=>586,653=>831,654=>586, +655=>651,656=>624,657=>615,658=>576,659=>576,660=>515,661=>515,662=>515,663=>515,664=>765, +665=>569,666=>658,667=>616,668=>622,669=>308,670=>659,671=>485,672=>712,673=>515,674=>515, +675=>1040,676=>1093,677=>1039,678=>876,679=>691,680=>836,681=>923,682=>712,683=>702,684=>532, +685=>374,686=>609,687=>710,688=>410,689=>410,690=>197,691=>284,692=>284,693=>284,694=>369, +695=>532,696=>375,697=>271,698=>469,699=>342,700=>342,701=>342,702=>330,703=>330,704=>293, +705=>293,706=>450,707=>450,708=>450,709=>450,711=>450,712=>275,713=>450,714=>450,715=>450, +716=>275,717=>450,718=>450,719=>450,720=>303,721=>303,722=>330,723=>330,724=>450,725=>450, +726=>374,727=>295,728=>450,729=>450,730=>450,731=>450,733=>450,734=>315,735=>450,736=>370, +737=>197,738=>343,739=>371,740=>293,741=>450,742=>450,743=>450,744=>450,745=>450,748=>450, +749=>450,750=>591,755=>450,759=>450,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0, +774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0, +784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0, +794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0, +804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0, +814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0, +824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,832=>0,833=>0, +834=>0,835=>0,836=>0,837=>0,838=>0,839=>0,840=>0,841=>0,842=>0,843=>0, +844=>0,845=>0,846=>0,847=>0,849=>0,850=>0,851=>0,855=>0,856=>0,858=>0, +860=>0,861=>0,862=>0,863=>0,864=>0,865=>0,866=>0,880=>628,881=>508,882=>919, +883=>752,884=>271,885=>271,886=>753,887=>630,890=>450,891=>533,892=>495,893=>494,894=>360, +900=>397,901=>450,902=>717,903=>342,904=>761,905=>908,906=>507,908=>801,910=>882,911=>804, +912=>351,913=>696,914=>686,915=>573,916=>696,917=>615,918=>652,919=>753,920=>765,921=>334, +922=>697,923=>696,924=>896,925=>753,926=>568,927=>765,928=>753,929=>659,931=>615,932=>614, +933=>651,934=>765,935=>694,936=>765,937=>765,938=>334,939=>651,940=>618,941=>501,942=>641, +943=>351,944=>607,945=>618,946=>644,947=>613,948=>618,949=>501,950=>532,951=>641,952=>618, +953=>351,954=>639,955=>569,956=>662,957=>613,958=>532,959=>618,960=>712,961=>644,962=>533, +963=>701,964=>574,965=>607,966=>704,967=>580,968=>714,969=>782,970=>351,971=>607,972=>618, +973=>607,974=>782,975=>697,976=>585,977=>594,978=>671,979=>883,980=>671,981=>716,982=>782, +983=>669,984=>765,985=>618,986=>660,987=>533,988=>615,989=>444,990=>632,991=>593,992=>827, +993=>564,994=>983,995=>753,996=>749,997=>644,998=>835,999=>669,1000=>660,1001=>585,1002=>709, +1003=>604,1004=>677,1005=>644,1006=>614,1007=>531,1008=>669,1009=>644,1010=>533,1011=>308,1012=>765, +1013=>580,1014=>580,1015=>664,1016=>644,1017=>660,1018=>896,1019=>659,1020=>644,1021=>628,1022=>660, +1023=>628,1024=>615,1025=>615,1026=>791,1027=>573,1028=>660,1029=>648,1030=>334,1031=>334,1032=>334, +1033=>1039,1034=>1017,1035=>791,1036=>735,1037=>753,1038=>694,1039=>753,1040=>696,1041=>686,1042=>686, +1043=>573,1044=>801,1045=>615,1046=>1102,1047=>639,1048=>753,1049=>753,1050=>735,1051=>747,1052=>896, +1053=>753,1054=>765,1055=>753,1056=>659,1057=>660,1058=>614,1059=>694,1060=>892,1061=>694,1062=>835, +1063=>727,1064=>1112,1065=>1193,1066=>845,1067=>932,1068=>686,1069=>660,1070=>1056,1071=>693,1072=>607, +1073=>628,1074=>569,1075=>470,1076=>727,1077=>610,1078=>896,1079=>523,1080=>630,1081=>630,1082=>611, +1083=>659,1084=>735,1085=>622,1086=>618,1087=>622,1088=>644,1089=>533,1090=>521,1091=>586,1092=>893, +1093=>580,1094=>667,1095=>618,1096=>956,1097=>995,1098=>676,1099=>813,1100=>569,1101=>533,1102=>875, +1103=>578,1104=>610,1105=>610,1106=>642,1107=>470,1108=>533,1109=>536,1110=>308,1111=>308,1112=>308, +1113=>892,1114=>860,1115=>661,1116=>611,1117=>630,1118=>586,1119=>622,1120=>983,1121=>782,1122=>756, +1123=>662,1124=>911,1125=>755,1126=>893,1127=>749,1128=>1222,1129=>1009,1130=>765,1131=>618,1132=>1112, +1133=>906,1134=>626,1135=>501,1136=>967,1137=>955,1138=>765,1139=>618,1140=>765,1141=>625,1142=>765, +1143=>625,1144=>1033,1145=>939,1146=>967,1147=>776,1148=>1265,1149=>1055,1150=>983,1151=>782,1152=>660, +1153=>533,1154=>587,1155=>0,1156=>0,1157=>0,1158=>0,1159=>0,1160=>376,1161=>376,1162=>861, +1163=>726,1164=>686,1165=>550,1166=>659,1167=>644,1168=>573,1169=>470,1170=>599,1171=>488,1172=>727, +1173=>602,1174=>1102,1175=>896,1176=>639,1177=>523,1178=>697,1179=>611,1180=>735,1181=>611,1182=>735, +1183=>611,1184=>914,1185=>743,1186=>860,1187=>727,1188=>992,1189=>787,1190=>1146,1191=>915,1192=>856, +1193=>772,1194=>660,1195=>533,1196=>614,1197=>521,1198=>651,1199=>586,1200=>651,1201=>586,1202=>694, +1203=>580,1204=>1001,1205=>900,1206=>727,1207=>618,1208=>727,1209=>618,1210=>727,1211=>641,1212=>923, +1213=>729,1214=>923,1215=>729,1216=>334,1217=>1102,1218=>896,1219=>697,1220=>567,1221=>855,1222=>725, +1223=>753,1224=>622,1225=>861,1226=>726,1227=>727,1228=>618,1229=>1003,1230=>839,1231=>308,1232=>696, +1233=>607,1234=>696,1235=>607,1236=>976,1237=>943,1238=>615,1239=>610,1240=>764,1241=>610,1242=>764, +1243=>610,1244=>1102,1245=>896,1246=>639,1247=>523,1248=>695,1249=>576,1250=>753,1251=>630,1252=>753, +1253=>630,1254=>765,1255=>618,1256=>765,1257=>618,1258=>765,1259=>618,1260=>660,1261=>533,1262=>694, +1263=>586,1264=>694,1265=>586,1266=>694,1267=>586,1268=>727,1269=>618,1270=>573,1271=>470,1272=>932, +1273=>813,1274=>599,1275=>488,1276=>694,1277=>580,1278=>694,1279=>580,1280=>686,1281=>547,1282=>1043, +1283=>804,1284=>1007,1285=>828,1286=>745,1287=>624,1288=>1117,1289=>915,1290=>1160,1291=>912,1292=>755, +1293=>574,1294=>844,1295=>722,1296=>626,1297=>501,1298=>747,1299=>659,1300=>1157,1301=>961,1302=>958, +1303=>881,1304=>973,1305=>912,1306=>765,1307=>644,1308=>993,1309=>831,1312=>1140,1313=>953,1314=>1146, +1315=>915,1316=>861,1317=>726,1329=>886,1330=>730,1331=>886,1332=>886,1333=>730,1334=>699,1335=>730, +1336=>730,1337=>877,1338=>886,1339=>730,1340=>639,1341=>970,1342=>1022,1343=>730,1344=>639,1345=>681, +1346=>886,1347=>789,1348=>886,1349=>714,1350=>886,1351=>730,1352=>730,1353=>730,1354=>862,1355=>699, +1356=>886,1357=>730,1358=>886,1359=>648,1360=>730,1361=>714,1362=>805,1363=>765,1364=>842,1365=>765, +1366=>648,1369=>330,1370=>342,1371=>495,1372=>495,1373=>342,1374=>491,1375=>468,1377=>938,1378=>641, +1379=>779,1380=>781,1381=>641,1382=>735,1383=>588,1384=>641,1385=>729,1386=>735,1387=>641,1388=>448, +1389=>916,1390=>644,1391=>641,1392=>641,1393=>644,1394=>737,1395=>641,1396=>676,1397=>308,1398=>794, +1399=>502,1400=>641,1401=>502,1402=>938,1403=>502,1404=>777,1405=>641,1406=>732,1407=>938,1408=>641, +1409=>644,1410=>514,1411=>938,1412=>700,1413=>618,1414=>648,1415=>776,1417=>360,1418=>438,1456=>0, +1457=>0,1458=>0,1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1466=>0, +1467=>0,1468=>0,1469=>0,1470=>374,1471=>0,1472=>334,1473=>0,1474=>0,1475=>334,1478=>447, +1479=>0,1488=>676,1489=>605,1490=>483,1491=>589,1492=>641,1493=>308,1494=>442,1495=>641,1496=>651, +1497=>308,1498=>584,1499=>584,1500=>611,1501=>641,1502=>698,1503=>308,1504=>447,1505=>696,1506=>610, +1507=>646,1508=>618,1509=>565,1510=>676,1511=>656,1512=>584,1513=>854,1514=>676,1520=>598,1521=>598, +1522=>597,1523=>399,1524=>639,1542=>600,1543=>600,1545=>795,1546=>1042,1548=>342,1557=>0,1563=>360, +1567=>522,1569=>460,1570=>308,1571=>308,1572=>559,1573=>308,1574=>825,1575=>308,1576=>904,1577=>531, +1578=>904,1579=>904,1580=>648,1581=>648,1582=>648,1583=>461,1584=>461,1585=>518,1586=>518,1587=>1242, +1588=>1242,1589=>1210,1590=>1210,1591=>935,1592=>935,1593=>615,1594=>615,1600=>308,1601=>1045,1602=>804, +1603=>825,1604=>781,1605=>659,1606=>768,1607=>531,1608=>559,1609=>825,1610=>825,1611=>0,1612=>0, +1613=>0,1614=>0,1615=>0,1616=>0,1617=>0,1618=>0,1619=>0,1620=>0,1621=>0,1623=>0, +1626=>450,1632=>549,1633=>549,1634=>549,1635=>549,1636=>549,1637=>549,1638=>549,1639=>549,1640=>549, +1641=>549,1642=>549,1643=>336,1644=>342,1645=>490,1646=>904,1647=>804,1648=>0,1652=>263,1657=>904, +1658=>904,1659=>904,1660=>904,1661=>904,1662=>904,1663=>904,1664=>904,1665=>648,1666=>648,1667=>648, +1668=>648,1669=>648,1670=>648,1671=>648,1672=>400,1673=>400,1674=>400,1675=>400,1676=>400,1677=>400, +1678=>400,1679=>400,1680=>400,1681=>518,1682=>518,1683=>518,1684=>518,1685=>613,1686=>518,1687=>518, +1688=>518,1689=>518,1690=>1242,1691=>1242,1692=>1242,1693=>1210,1694=>1210,1695=>935,1696=>615,1697=>1045, +1698=>1045,1699=>1045,1700=>1045,1701=>1045,1702=>1045,1703=>804,1704=>804,1705=>921,1706=>1144,1707=>921, +1708=>825,1709=>825,1710=>825,1711=>921,1712=>921,1713=>921,1714=>921,1715=>921,1716=>921,1717=>781, +1718=>781,1719=>781,1720=>781,1721=>768,1722=>768,1723=>768,1724=>768,1725=>768,1726=>844,1727=>648, +1734=>559,1740=>825,1742=>825,1749=>531,1776=>549,1777=>549,1778=>549,1779=>549,1780=>549,1781=>549, +1782=>549,1783=>549,1784=>549,1785=>549,1984=>626,1985=>626,1986=>626,1987=>626,1988=>626,1989=>626, +1990=>626,1991=>626,1992=>626,1993=>626,1994=>308,1995=>492,1996=>489,1997=>586,1998=>622,1999=>622, +2000=>534,2001=>622,2002=>813,2003=>496,2004=>496,2005=>564,2006=>619,2007=>399,2008=>920,2009=>456, +2010=>743,2011=>622,2012=>586,2013=>821,2014=>564,2015=>636,2016=>456,2017=>586,2018=>517,2019=>564, +2020=>564,2021=>564,2022=>517,2023=>517,2027=>0,2028=>0,2029=>0,2030=>0,2031=>0,2032=>0, +2033=>0,2034=>0,2035=>0,2036=>342,2037=>342,2040=>622,2041=>622,2042=>374,3647=>626,3713=>710, +3714=>673,3716=>674,3719=>512,3720=>668,3722=>669,3725=>685,3732=>635,3733=>633,3734=>672,3735=>737, +3737=>657,3738=>654,3739=>654,3740=>830,3741=>744,3742=>779,3743=>779,3745=>752,3746=>685,3747=>692, +3749=>691,3751=>642,3754=>744,3755=>928,3757=>651,3758=>705,3759=>840,3760=>620,3761=>0,3762=>549, +3763=>549,3764=>0,3765=>0,3766=>0,3767=>0,3768=>0,3769=>0,3771=>0,3772=>0,3773=>603, +3776=>464,3777=>774,3778=>464,3779=>584,3780=>569,3782=>683,3784=>0,3785=>0,3786=>0,3787=>0, +3788=>0,3789=>0,3792=>694,3793=>694,3794=>624,3795=>752,3796=>655,3797=>655,3798=>764,3799=>710, +3800=>683,3801=>818,3804=>1227,3805=>1227,4256=>826,4257=>669,4258=>665,4259=>753,4260=>584,4261=>696, +4262=>771,4263=>800,4264=>477,4265=>570,4266=>771,4267=>810,4268=>579,4269=>813,4270=>732,4271=>677, +4272=>782,4273=>579,4274=>579,4275=>797,4276=>797,4277=>660,4278=>587,4279=>579,4280=>582,4281=>579, +4282=>710,4283=>812,4284=>570,4285=>557,4286=>579,4287=>700,4288=>802,4289=>541,4290=>668,4291=>554, +4292=>570,4293=>668,4304=>497,4305=>497,4306=>536,4307=>734,4308=>505,4309=>506,4310=>497,4311=>744, +4312=>497,4313=>488,4314=>967,4315=>506,4316=>507,4317=>730,4318=>497,4319=>532,4320=>740,4321=>506, +4322=>621,4323=>525,4324=>732,4325=>505,4326=>731,4327=>506,4328=>506,4329=>507,4330=>568,4331=>506, +4332=>506,4333=>497,4334=>506,4335=>506,4336=>501,4337=>543,4338=>497,4339=>497,4340=>497,4341=>544, +4342=>767,4343=>571,4344=>506,4345=>536,4346=>487,4347=>615,4348=>331,5121=>696,5122=>696,5123=>696, +5124=>696,5125=>814,5126=>814,5127=>814,5129=>814,5130=>814,5131=>814,5132=>916,5133=>908,5134=>916, +5135=>908,5136=>916,5137=>908,5138=>1034,5139=>1025,5140=>1034,5141=>1025,5142=>814,5143=>1034,5144=>1028, +5145=>1034,5146=>1028,5147=>814,5149=>278,5150=>476,5151=>382,5152=>382,5153=>355,5154=>355,5155=>355, +5156=>355,5157=>507,5158=>423,5159=>278,5160=>355,5161=>355,5162=>355,5163=>1092,5164=>888,5165=>1094, +5166=>1167,5167=>696,5168=>696,5169=>696,5170=>696,5171=>797,5172=>797,5173=>797,5175=>797,5176=>797, +5177=>797,5178=>916,5179=>908,5180=>916,5181=>908,5182=>916,5183=>908,5184=>1034,5185=>1025,5186=>1034, +5187=>1025,5188=>1034,5189=>1028,5190=>1034,5191=>1028,5192=>797,5193=>518,5194=>206,5196=>730,5197=>730, +5198=>730,5199=>730,5200=>734,5201=>734,5202=>734,5204=>734,5205=>734,5206=>734,5207=>950,5208=>943, +5209=>950,5210=>943,5211=>950,5212=>943,5213=>954,5214=>949,5215=>954,5216=>949,5217=>954,5218=>946, +5219=>954,5220=>946,5221=>954,5222=>435,5223=>904,5224=>904,5225=>921,5226=>915,5227=>668,5228=>668, +5229=>668,5230=>668,5231=>668,5232=>668,5233=>668,5234=>668,5235=>668,5236=>926,5237=>877,5238=>882, +5239=>877,5240=>882,5241=>877,5242=>926,5243=>877,5244=>926,5245=>877,5246=>882,5247=>877,5248=>882, +5249=>877,5250=>882,5251=>451,5252=>451,5253=>844,5254=>844,5255=>844,5256=>844,5257=>668,5258=>668, +5259=>668,5260=>668,5261=>668,5262=>668,5263=>668,5264=>668,5265=>668,5266=>926,5267=>877,5268=>926, +5269=>877,5270=>926,5271=>877,5272=>926,5273=>877,5274=>926,5275=>877,5276=>926,5277=>877,5278=>926, +5279=>877,5280=>926,5281=>451,5282=>451,5283=>563,5284=>563,5285=>563,5286=>563,5287=>563,5288=>563, +5289=>563,5290=>563,5291=>563,5292=>793,5293=>769,5294=>777,5295=>786,5296=>777,5297=>786,5298=>793, +5299=>786,5300=>793,5301=>786,5302=>777,5303=>786,5304=>777,5305=>786,5306=>777,5307=>392,5308=>493, +5309=>392,5312=>889,5313=>889,5314=>889,5315=>889,5316=>838,5317=>838,5318=>838,5319=>838,5320=>838, +5321=>1114,5322=>1122,5323=>1080,5324=>1105,5325=>1080,5326=>1105,5327=>838,5328=>593,5329=>447,5330=>593, +5331=>889,5332=>889,5333=>889,5334=>889,5335=>838,5336=>838,5337=>838,5338=>838,5339=>838,5340=>1107, +5341=>1122,5342=>1155,5343=>1105,5344=>1155,5345=>1105,5346=>1105,5347=>1093,5348=>1105,5349=>1093,5350=>1155, +5351=>1105,5352=>1155,5353=>1105,5354=>593,5356=>797,5357=>657,5358=>657,5359=>657,5360=>657,5361=>657, +5362=>657,5363=>657,5364=>657,5365=>657,5366=>897,5367=>862,5368=>870,5369=>890,5370=>870,5371=>890, +5372=>897,5373=>862,5374=>897,5375=>862,5376=>870,5377=>890,5378=>870,5379=>890,5380=>870,5381=>443, +5382=>414,5383=>443,5392=>831,5393=>831,5394=>831,5395=>1022,5396=>1022,5397=>1022,5398=>1022,5399=>1088, +5400=>1081,5401=>1088,5402=>1081,5403=>1088,5404=>1081,5405=>1288,5406=>1278,5407=>1288,5408=>1278,5409=>1288, +5410=>1278,5411=>1288,5412=>1278,5413=>671,5414=>698,5415=>698,5416=>698,5417=>698,5418=>698,5419=>698, +5420=>698,5421=>698,5422=>698,5423=>902,5424=>903,5425=>911,5426=>896,5427=>911,5428=>896,5429=>902, +5430=>903,5431=>902,5432=>903,5433=>911,5434=>896,5435=>911,5436=>896,5437=>911,5438=>445,5440=>355, +5441=>458,5442=>929,5443=>929,5444=>878,5445=>878,5446=>878,5447=>878,5448=>659,5449=>659,5450=>659, +5451=>659,5452=>659,5453=>659,5454=>902,5455=>863,5456=>445,5458=>797,5459=>696,5460=>696,5461=>696, +5462=>696,5463=>835,5464=>835,5465=>835,5466=>835,5467=>1055,5468=>1028,5469=>542,5470=>730,5471=>730, +5472=>730,5473=>730,5474=>730,5475=>730,5476=>734,5477=>734,5478=>734,5479=>734,5480=>954,5481=>946, +5482=>493,5492=>879,5493=>879,5494=>879,5495=>879,5496=>879,5497=>879,5498=>879,5499=>556,5500=>753, +5501=>458,5502=>1114,5503=>1114,5504=>1114,5505=>1114,5506=>1114,5507=>1114,5508=>1114,5509=>890,5514=>879, +5515=>879,5516=>879,5517=>879,5518=>1432,5519=>1432,5520=>1432,5521=>1165,5522=>1165,5523=>1432,5524=>1432, +5525=>763,5526=>1146,5536=>889,5537=>889,5538=>838,5539=>838,5540=>838,5541=>838,5542=>593,5543=>698, +5544=>698,5545=>698,5546=>698,5547=>698,5548=>698,5549=>698,5550=>445,5551=>668,5598=>747,5601=>747, +5702=>446,5703=>446,5742=>371,5743=>1114,5744=>1432,5745=>1814,5746=>1814,5747=>1548,5748=>1510,5749=>1814, +5750=>1814,5760=>489,5761=>573,5762=>851,5763=>1128,5764=>1406,5765=>1684,5766=>564,5767=>842,5768=>1128, +5769=>1403,5770=>1684,5771=>512,5772=>789,5773=>1068,5774=>1347,5775=>1626,5776=>573,5777=>851,5778=>1116, +5779=>1399,5780=>1684,5781=>512,5782=>512,5783=>709,5784=>1110,5785=>1403,5786=>666,5787=>574,5788=>574, +7424=>586,7425=>750,7426=>943,7427=>547,7428=>533,7429=>608,7430=>608,7431=>502,7432=>501,7433=>308, +7434=>444,7435=>598,7436=>485,7437=>735,7438=>630,7439=>618,7440=>533,7441=>594,7442=>594,7443=>594, +7444=>984,7446=>618,7447=>618,7448=>500,7449=>578,7450=>578,7451=>521,7452=>571,7453=>663,7454=>853, +7455=>625,7456=>586,7457=>831,7458=>523,7459=>581,7462=>485,7463=>586,7464=>622,7465=>500,7466=>703, +7467=>659,7468=>438,7469=>615,7470=>432,7472=>470,7473=>387,7474=>387,7475=>465,7476=>474,7477=>211, +7478=>211,7479=>439,7480=>361,7481=>563,7482=>474,7483=>474,7484=>481,7485=>458,7486=>415,7487=>436, +7488=>387,7489=>460,7490=>625,7491=>412,7492=>412,7493=>431,7494=>641,7495=>431,7496=>431,7497=>431, +7498=>431,7499=>347,7500=>347,7501=>431,7502=>197,7503=>438,7504=>597,7505=>410,7506=>439,7507=>372, +7508=>439,7509=>439,7510=>431,7511=>349,7512=>410,7513=>416,7514=>597,7515=>451,7517=>405,7518=>386, +7519=>389,7520=>443,7521=>365,7522=>197,7523=>284,7524=>410,7525=>451,7526=>405,7527=>386,7528=>405, +7529=>443,7530=>365,7543=>644,7544=>474,7547=>491,7549=>672,7557=>462,7579=>431,7580=>372,7581=>372, +7582=>439,7583=>347,7584=>339,7585=>313,7586=>431,7587=>410,7588=>312,7589=>253,7590=>312,7591=>312, +7592=>388,7593=>293,7594=>296,7595=>333,7596=>598,7597=>597,7598=>505,7599=>505,7600=>403,7601=>439, +7602=>488,7603=>379,7604=>356,7605=>349,7606=>524,7607=>444,7608=>359,7609=>405,7610=>451,7611=>375, +7612=>471,7613=>422,7614=>409,7615=>382,7620=>0,7621=>0,7622=>0,7623=>0,7624=>0,7625=>0, +7680=>696,7681=>607,7682=>686,7683=>644,7684=>686,7685=>644,7686=>686,7687=>644,7688=>660,7689=>533, +7690=>747,7691=>644,7692=>747,7693=>644,7694=>747,7695=>644,7696=>747,7697=>644,7698=>747,7699=>644, +7700=>615,7701=>610,7702=>615,7703=>610,7704=>615,7705=>610,7706=>615,7707=>610,7708=>615,7709=>610, +7710=>615,7711=>391,7712=>738,7713=>644,7714=>753,7715=>641,7716=>753,7717=>641,7718=>753,7719=>641, +7720=>753,7721=>641,7722=>753,7723=>641,7724=>334,7725=>308,7726=>334,7727=>308,7728=>697,7729=>598, +7730=>697,7731=>598,7732=>697,7733=>598,7734=>573,7735=>308,7736=>573,7737=>308,7738=>573,7739=>308, +7740=>573,7741=>308,7742=>896,7743=>938,7744=>896,7745=>938,7746=>896,7747=>938,7748=>753,7749=>641, +7750=>753,7751=>641,7752=>753,7753=>641,7754=>753,7755=>641,7756=>765,7757=>618,7758=>765,7759=>618, +7760=>765,7761=>618,7762=>765,7763=>618,7764=>659,7765=>644,7766=>659,7767=>644,7768=>693,7769=>444, +7770=>693,7771=>444,7772=>693,7773=>444,7774=>693,7775=>444,7776=>648,7777=>536,7778=>648,7779=>536, +7780=>648,7781=>536,7782=>648,7783=>536,7784=>648,7785=>536,7786=>614,7787=>430,7788=>614,7789=>430, +7790=>614,7791=>430,7792=>614,7793=>430,7794=>730,7795=>641,7796=>730,7797=>641,7798=>730,7799=>641, +7800=>730,7801=>641,7802=>730,7803=>641,7804=>696,7805=>586,7806=>696,7807=>586,7808=>993,7809=>831, +7810=>993,7811=>831,7812=>993,7813=>831,7814=>993,7815=>831,7816=>993,7817=>831,7818=>694,7819=>580, +7820=>694,7821=>580,7822=>651,7823=>586,7824=>652,7825=>523,7826=>652,7827=>523,7828=>652,7829=>523, +7830=>641,7831=>430,7832=>831,7833=>586,7834=>607,7835=>391,7836=>391,7837=>391,7838=>806,7839=>618, +7840=>696,7841=>607,7842=>696,7843=>607,7844=>696,7845=>607,7846=>696,7847=>607,7848=>696,7849=>607, +7850=>696,7851=>607,7852=>696,7853=>607,7854=>696,7855=>607,7856=>696,7857=>607,7858=>696,7859=>607, +7860=>696,7861=>607,7862=>696,7863=>607,7864=>615,7865=>610,7866=>615,7867=>610,7868=>615,7869=>610, +7870=>615,7871=>610,7872=>615,7873=>610,7874=>615,7875=>610,7876=>615,7877=>610,7878=>615,7879=>610, +7880=>334,7881=>308,7882=>334,7883=>308,7884=>765,7885=>618,7886=>765,7887=>618,7888=>765,7889=>618, +7890=>765,7891=>618,7892=>765,7893=>618,7894=>765,7895=>618,7896=>765,7897=>618,7898=>786,7899=>618, +7900=>786,7901=>618,7902=>786,7903=>618,7904=>786,7905=>618,7906=>786,7907=>618,7908=>730,7909=>641, +7910=>730,7911=>641,7912=>751,7913=>641,7914=>751,7915=>641,7916=>751,7917=>641,7918=>751,7919=>641, +7920=>751,7921=>641,7922=>651,7923=>586,7924=>651,7925=>586,7926=>651,7927=>586,7928=>651,7929=>586, +7930=>857,7931=>579,7936=>618,7937=>618,7938=>618,7939=>618,7940=>618,7941=>618,7942=>618,7943=>618, +7944=>696,7945=>696,7946=>937,7947=>939,7948=>841,7949=>866,7950=>751,7951=>773,7952=>501,7953=>501, +7954=>501,7955=>501,7956=>501,7957=>501,7960=>712,7961=>715,7962=>989,7963=>986,7964=>920,7965=>947, +7968=>641,7969=>641,7970=>641,7971=>641,7972=>641,7973=>641,7974=>641,7975=>641,7976=>851,7977=>856, +7978=>1125,7979=>1125,7980=>1062,7981=>1085,7982=>948,7983=>956,7984=>351,7985=>351,7986=>351,7987=>351, +7988=>351,7989=>351,7990=>351,7991=>351,7992=>435,7993=>440,7994=>699,7995=>707,7996=>641,7997=>664, +7998=>544,7999=>544,8000=>618,8001=>618,8002=>618,8003=>618,8004=>618,8005=>618,8008=>802,8009=>839, +8010=>1099,8011=>1101,8012=>947,8013=>974,8016=>607,8017=>607,8018=>607,8019=>607,8020=>607,8021=>607, +8022=>607,8023=>607,8025=>837,8027=>1065,8029=>1079,8031=>944,8032=>782,8033=>782,8034=>782,8035=>782, +8036=>782,8037=>782,8038=>782,8039=>782,8040=>817,8041=>862,8042=>1121,8043=>1126,8044=>968,8045=>994, +8046=>925,8047=>968,8048=>618,8049=>618,8050=>501,8051=>501,8052=>641,8053=>641,8054=>351,8055=>351, +8056=>618,8057=>618,8058=>607,8059=>607,8060=>782,8061=>782,8064=>618,8065=>618,8066=>618,8067=>618, +8068=>618,8069=>618,8070=>618,8071=>618,8072=>696,8073=>696,8074=>937,8075=>939,8076=>841,8077=>866, +8078=>751,8079=>773,8080=>641,8081=>641,8082=>641,8083=>641,8084=>641,8085=>641,8086=>641,8087=>641, +8088=>851,8089=>856,8090=>1125,8091=>1125,8092=>1062,8093=>1085,8094=>948,8095=>956,8096=>782,8097=>782, +8098=>782,8099=>782,8100=>782,8101=>782,8102=>782,8103=>782,8104=>817,8105=>862,8106=>1121,8107=>1126, +8108=>968,8109=>994,8110=>925,8111=>968,8112=>618,8113=>618,8114=>618,8115=>618,8116=>618,8118=>618, +8119=>618,8120=>696,8121=>696,8122=>789,8123=>717,8124=>696,8125=>450,8126=>450,8127=>450,8128=>450, +8129=>450,8130=>641,8131=>641,8132=>641,8134=>641,8135=>641,8136=>836,8137=>761,8138=>972,8139=>908, +8140=>753,8141=>450,8142=>450,8143=>450,8144=>351,8145=>351,8146=>351,8147=>351,8150=>351,8151=>351, +8152=>334,8153=>334,8154=>559,8155=>507,8157=>450,8158=>450,8159=>450,8160=>607,8161=>607,8162=>607, +8163=>607,8164=>644,8165=>644,8166=>607,8167=>607,8168=>651,8169=>651,8170=>918,8171=>882,8172=>754, +8173=>450,8174=>450,8175=>450,8178=>782,8179=>782,8180=>782,8182=>782,8183=>782,8184=>958,8185=>801, +8186=>976,8187=>804,8188=>765,8189=>450,8190=>450,8192=>450,8193=>900,8194=>450,8195=>900,8196=>296, +8197=>225,8198=>150,8199=>626,8200=>342,8201=>180,8202=>89,8203=>0,8204=>0,8205=>0,8206=>0, +8207=>0,8208=>374,8209=>374,8210=>626,8213=>900,8214=>450,8215=>450,8219=>342,8223=>591,8227=>575, +8228=>299,8229=>600,8231=>313,8232=>0,8233=>0,8234=>0,8235=>0,8236=>0,8237=>0,8238=>0, +8239=>180,8241=>1698,8242=>237,8243=>402,8244=>567,8245=>237,8246=>402,8247=>567,8248=>659,8251=>875, +8252=>564,8253=>522,8254=>450,8255=>745,8256=>745,8257=>296,8258=>920,8259=>450,8260=>150,8261=>411, +8262=>411,8263=>927,8264=>746,8265=>746,8266=>461,8267=>572,8268=>450,8269=>450,8270=>470,8271=>360, +8272=>745,8273=>470,8274=>500,8275=>900,8276=>745,8277=>754,8278=>615,8279=>731,8280=>754,8281=>754, +8282=>342,8283=>784,8284=>754,8285=>342,8286=>342,8287=>200,8288=>0,8289=>0,8290=>0,8291=>0, +8292=>0,8298=>0,8299=>0,8300=>0,8301=>0,8302=>0,8303=>0,8304=>394,8305=>197,8308=>394, +8309=>394,8310=>394,8311=>394,8312=>394,8313=>394,8314=>475,8315=>475,8316=>475,8317=>259,8318=>259, +8319=>410,8320=>394,8321=>394,8322=>394,8323=>394,8324=>394,8325=>394,8326=>394,8327=>394,8328=>394, +8329=>394,8330=>475,8331=>475,8332=>475,8333=>259,8334=>259,8336=>412,8337=>431,8338=>439,8339=>371, +8340=>431,8352=>836,8353=>626,8354=>626,8355=>626,8356=>626,8357=>938,8358=>753,8359=>1366,8360=>1084, +8361=>993,8362=>813,8363=>626,8365=>626,8366=>626,8367=>1252,8368=>626,8369=>626,8370=>626,8371=>626, +8372=>773,8373=>626,8376=>626,8377=>626,8400=>0,8401=>0,8406=>0,8407=>0,8411=>0,8412=>0, +8417=>0,8448=>1007,8449=>1053,8450=>660,8451=>1090,8452=>806,8453=>982,8454=>1029,8455=>553,8456=>628, +8457=>978,8459=>965,8460=>822,8461=>799,8462=>641,8463=>641,8464=>537,8465=>627,8466=>771,8467=>424, +8468=>876,8469=>753,8470=>1083,8471=>900,8472=>627,8473=>675,8474=>765,8475=>844,8476=>732,8477=>721, +8478=>807,8479=>639,8480=>917,8481=>1152,8483=>679,8484=>679,8485=>520,8486=>765,8487=>765,8488=>686, +8489=>304,8490=>697,8491=>696,8492=>835,8493=>736,8494=>769,8495=>572,8496=>656,8497=>727,8498=>615, +8499=>1065,8500=>418,8501=>714,8502=>658,8503=>444,8504=>615,8505=>342,8506=>851,8507=>1213,8508=>710, +8509=>663,8510=>589,8511=>776,8512=>756,8513=>697,8514=>501,8515=>573,8516=>684,8517=>747,8518=>644, +8519=>610,8520=>308,8521=>308,8523=>785,8526=>492,8528=>932,8529=>932,8530=>1334,8531=>932,8532=>932, +8533=>932,8534=>932,8535=>932,8536=>932,8537=>932,8538=>932,8539=>932,8540=>932,8541=>932,8542=>932, +8543=>554,8544=>334,8545=>593,8546=>851,8547=>989,8548=>696,8549=>989,8550=>1247,8551=>1505,8552=>1008, +8553=>694,8554=>1008,8555=>1266,8556=>573,8557=>660,8558=>747,8559=>896,8560=>308,8561=>546,8562=>785, +8563=>885,8564=>586,8565=>866,8566=>1104,8567=>1342,8568=>872,8569=>580,8570=>872,8571=>1110,8572=>308, +8573=>533,8574=>644,8575=>938,8576=>1160,8577=>747,8578=>1160,8579=>660,8580=>533,8581=>660,8585=>932, +8592=>754,8593=>754,8594=>754,8595=>754,8596=>754,8597=>754,8598=>754,8599=>754,8600=>754,8601=>754, +8602=>754,8603=>754,8604=>754,8605=>754,8606=>754,8607=>754,8608=>754,8609=>754,8610=>754,8611=>754, +8612=>754,8613=>754,8614=>754,8615=>754,8616=>754,8617=>754,8618=>754,8619=>754,8620=>754,8621=>754, +8622=>754,8623=>754,8624=>754,8625=>754,8626=>754,8627=>754,8628=>754,8629=>754,8630=>754,8631=>754, +8632=>754,8633=>754,8634=>754,8635=>754,8636=>754,8637=>754,8638=>754,8639=>754,8640=>754,8641=>754, +8642=>754,8643=>754,8644=>754,8645=>754,8646=>754,8647=>754,8648=>754,8649=>754,8650=>754,8651=>754, +8652=>754,8653=>754,8654=>754,8655=>754,8656=>754,8657=>754,8658=>754,8659=>754,8660=>754,8661=>754, +8662=>754,8663=>754,8664=>754,8665=>754,8666=>754,8667=>754,8668=>754,8669=>754,8670=>754,8671=>754, +8672=>754,8673=>754,8674=>754,8675=>754,8676=>754,8677=>754,8678=>754,8679=>754,8680=>754,8681=>754, +8682=>754,8683=>754,8684=>754,8685=>754,8686=>754,8687=>754,8688=>754,8689=>754,8690=>754,8691=>754, +8692=>754,8693=>754,8694=>754,8695=>754,8696=>754,8697=>754,8698=>754,8699=>754,8700=>754,8701=>754, +8702=>754,8703=>754,8704=>696,8705=>626,8706=>489,8707=>615,8708=>615,8709=>771,8710=>627,8711=>627, +8712=>807,8713=>807,8714=>675,8715=>807,8716=>807,8717=>675,8718=>572,8719=>708,8720=>708,8721=>646, +8722=>754,8723=>754,8724=>626,8725=>329,8726=>626,8727=>754,8728=>563,8729=>342,8730=>600,8731=>600, +8732=>600,8733=>641,8734=>750,8735=>754,8736=>807,8737=>807,8738=>754,8739=>450,8740=>450,8741=>450, +8742=>450,8743=>730,8744=>730,8745=>730,8746=>730,8747=>549,8748=>835,8749=>1165,8750=>506,8751=>879, +8752=>1181,8753=>506,8754=>506,8755=>506,8756=>626,8757=>626,8758=>264,8759=>626,8760=>754,8761=>754, +8762=>754,8763=>754,8764=>754,8765=>754,8766=>754,8767=>754,8768=>337,8769=>754,8770=>754,8771=>754, +8772=>754,8773=>754,8774=>754,8775=>754,8776=>754,8777=>754,8778=>754,8779=>754,8780=>754,8781=>754, +8782=>754,8783=>754,8784=>754,8785=>754,8786=>754,8787=>754,8788=>956,8789=>956,8790=>754,8791=>754, +8792=>754,8793=>754,8794=>754,8795=>754,8796=>754,8797=>754,8798=>754,8799=>754,8800=>754,8801=>754, +8802=>754,8803=>754,8804=>754,8805=>754,8806=>754,8807=>754,8808=>756,8809=>756,8810=>942,8811=>942, +8812=>450,8813=>754,8814=>754,8815=>754,8816=>754,8817=>754,8818=>754,8819=>754,8820=>754,8821=>754, +8822=>754,8823=>754,8824=>754,8825=>754,8826=>754,8827=>754,8828=>754,8829=>754,8830=>754,8831=>754, +8832=>754,8833=>754,8834=>754,8835=>754,8836=>754,8837=>754,8838=>754,8839=>754,8840=>754,8841=>754, +8842=>754,8843=>754,8844=>730,8845=>730,8846=>730,8847=>754,8848=>754,8849=>754,8850=>754,8851=>716, +8852=>716,8853=>754,8854=>754,8855=>754,8856=>754,8857=>754,8858=>754,8859=>754,8860=>754,8861=>754, +8862=>754,8863=>754,8864=>754,8865=>754,8866=>822,8867=>822,8868=>822,8869=>822,8870=>488,8871=>488, +8872=>822,8873=>822,8874=>822,8875=>822,8876=>822,8877=>822,8878=>822,8879=>822,8880=>754,8881=>754, +8882=>754,8883=>754,8884=>754,8885=>754,8886=>900,8887=>900,8888=>754,8889=>754,8890=>488,8891=>730, +8892=>730,8893=>730,8894=>754,8895=>754,8896=>758,8897=>758,8898=>758,8899=>758,8900=>444,8901=>342, +8902=>563,8903=>754,8904=>900,8905=>900,8906=>900,8907=>900,8908=>900,8909=>754,8910=>730,8911=>730, +8912=>754,8913=>754,8914=>754,8915=>754,8916=>754,8917=>754,8918=>754,8919=>754,8920=>1280,8921=>1280, +8922=>754,8923=>754,8924=>754,8925=>754,8926=>754,8927=>754,8928=>754,8929=>754,8930=>754,8931=>754, +8932=>754,8933=>754,8934=>754,8935=>754,8936=>754,8937=>754,8938=>754,8939=>754,8940=>754,8941=>754, +8942=>900,8943=>900,8944=>900,8945=>900,8946=>1042,8947=>807,8948=>675,8949=>807,8950=>807,8951=>675, +8952=>807,8953=>807,8954=>1042,8955=>807,8956=>675,8957=>807,8958=>675,8959=>807,8960=>542,8961=>542, +8962=>644,8963=>754,8964=>754,8965=>754,8966=>754,8967=>439,8968=>411,8969=>411,8970=>411,8971=>411, +8972=>728,8973=>728,8974=>728,8975=>728,8976=>754,8977=>484,8984=>835,8985=>754,8988=>422,8989=>422, +8990=>422,8991=>422,8992=>549,8993=>549,8996=>1037,8997=>1037,8998=>1272,8999=>1037,9000=>1299,9003=>1272, +9004=>786,9075=>351,9076=>644,9077=>782,9082=>618,9085=>776,9095=>1037,9108=>786,9115=>450,9116=>450, +9117=>450,9118=>450,9119=>450,9120=>450,9121=>450,9122=>450,9123=>450,9124=>450,9125=>450,9126=>450, +9127=>675,9128=>675,9129=>675,9130=>675,9131=>675,9132=>675,9133=>675,9134=>549,9166=>754,9167=>850, +9187=>786,9189=>692,9192=>626,9250=>644,9251=>644,9312=>762,9313=>762,9314=>762,9315=>762,9316=>762, +9317=>762,9318=>762,9319=>762,9320=>762,9321=>762,9600=>692,9601=>692,9602=>692,9603=>692,9604=>692, +9605=>692,9606=>692,9607=>692,9608=>692,9609=>692,9610=>692,9611=>692,9612=>692,9613=>692,9614=>692, +9615=>692,9616=>692,9617=>692,9618=>692,9619=>692,9620=>692,9621=>692,9622=>692,9623=>692,9624=>692, +9625=>692,9626=>692,9627=>692,9628=>692,9629=>692,9630=>692,9631=>692,9632=>850,9633=>850,9634=>850, +9635=>850,9636=>850,9637=>850,9638=>850,9639=>850,9640=>850,9641=>850,9642=>610,9643=>610,9644=>850, +9645=>850,9646=>495,9647=>495,9648=>692,9649=>692,9650=>692,9651=>692,9652=>452,9653=>452,9654=>692, +9655=>692,9656=>452,9657=>452,9658=>692,9659=>692,9660=>692,9661=>692,9662=>452,9663=>452,9664=>692, +9665=>692,9666=>452,9667=>452,9668=>692,9669=>692,9670=>692,9671=>692,9672=>692,9673=>785,9674=>444, +9675=>785,9676=>785,9677=>785,9678=>785,9679=>785,9680=>785,9681=>785,9682=>785,9683=>785,9684=>785, +9685=>785,9686=>474,9687=>474,9688=>756,9689=>873,9690=>873,9691=>873,9692=>348,9693=>348,9694=>348, +9695=>348,9696=>692,9697=>692,9698=>692,9699=>692,9700=>692,9701=>692,9702=>575,9703=>850,9704=>850, +9705=>850,9706=>850,9707=>850,9708=>692,9709=>692,9710=>692,9711=>1007,9712=>850,9713=>850,9714=>850, +9715=>850,9716=>785,9717=>785,9718=>785,9719=>785,9720=>692,9721=>692,9722=>692,9723=>747,9724=>747, +9725=>659,9726=>659,9727=>692,9728=>807,9729=>900,9730=>807,9731=>807,9732=>807,9733=>807,9734=>807, +9735=>515,9736=>806,9737=>807,9738=>799,9739=>799,9740=>604,9741=>911,9742=>1121,9743=>1125,9744=>807, +9745=>807,9746=>807,9747=>479,9748=>807,9749=>807,9750=>807,9751=>807,9752=>807,9753=>807,9754=>807, +9755=>807,9756=>807,9757=>548,9758=>807,9759=>548,9760=>807,9761=>807,9762=>807,9763=>807,9764=>602, +9765=>671,9766=>584,9767=>705,9768=>490,9769=>807,9770=>807,9771=>807,9772=>639,9773=>807,9774=>807, +9775=>807,9776=>807,9777=>807,9778=>807,9779=>807,9780=>807,9781=>807,9782=>807,9783=>807,9784=>807, +9785=>807,9786=>807,9787=>807,9788=>807,9789=>807,9790=>807,9791=>552,9792=>659,9793=>659,9794=>807, +9795=>807,9796=>807,9797=>807,9798=>807,9799=>807,9800=>807,9801=>807,9802=>807,9803=>807,9804=>807, +9805=>807,9806=>807,9807=>807,9808=>807,9809=>807,9810=>807,9811=>807,9812=>807,9813=>807,9814=>807, +9815=>807,9816=>807,9817=>807,9818=>807,9819=>807,9820=>807,9821=>807,9822=>807,9823=>807,9824=>807, +9825=>807,9826=>807,9827=>807,9828=>807,9829=>807,9830=>807,9831=>807,9832=>807,9833=>424,9834=>574, +9835=>807,9836=>807,9837=>424,9838=>321,9839=>435,9840=>673,9841=>689,9842=>807,9843=>807,9844=>807, +9845=>807,9846=>807,9847=>807,9848=>807,9849=>807,9850=>807,9851=>807,9852=>807,9853=>807,9854=>807, +9855=>807,9856=>782,9857=>782,9858=>782,9859=>782,9860=>782,9861=>782,9862=>807,9863=>807,9864=>807, +9865=>807,9866=>807,9867=>807,9868=>807,9869=>807,9870=>807,9871=>807,9872=>807,9873=>807,9874=>807, +9875=>807,9876=>807,9877=>487,9878=>807,9879=>807,9880=>807,9881=>807,9882=>807,9883=>807,9884=>807, +9888=>807,9889=>632,9890=>904,9891=>980,9892=>1057,9893=>813,9894=>754,9895=>754,9896=>754,9897=>754, +9898=>754,9899=>754,9900=>754,9901=>754,9902=>754,9903=>754,9904=>759,9905=>754,9906=>659,9907=>659, +9908=>659,9909=>659,9910=>765,9911=>659,9912=>659,9920=>754,9921=>754,9922=>754,9923=>754,9985=>754, +9986=>754,9987=>754,9988=>754,9990=>754,9991=>754,9992=>754,9993=>754,9996=>754,9997=>754,9998=>754, +9999=>754,10000=>754,10001=>754,10002=>754,10003=>754,10004=>754,10005=>754,10006=>754,10007=>754,10008=>754, +10009=>754,10010=>754,10011=>754,10012=>754,10013=>754,10014=>754,10015=>754,10016=>754,10017=>754,10018=>754, +10019=>754,10020=>754,10021=>754,10022=>754,10023=>754,10025=>754,10026=>754,10027=>754,10028=>754,10029=>754, +10030=>754,10031=>754,10032=>754,10033=>754,10034=>754,10035=>754,10036=>754,10037=>754,10038=>754,10039=>754, +10040=>754,10041=>754,10042=>754,10043=>754,10044=>754,10045=>754,10046=>754,10047=>754,10048=>754,10049=>754, +10050=>754,10051=>754,10052=>754,10053=>754,10054=>754,10055=>754,10056=>754,10057=>754,10058=>754,10059=>754, +10061=>807,10063=>807,10064=>807,10065=>807,10066=>807,10070=>807,10072=>754,10073=>754,10074=>754,10075=>312, +10076=>312,10077=>528,10078=>528,10081=>754,10082=>754,10083=>754,10084=>754,10085=>754,10086=>754,10087=>754, +10088=>754,10089=>754,10090=>754,10091=>754,10092=>754,10093=>754,10094=>754,10095=>754,10096=>754,10097=>754, +10098=>754,10099=>754,10100=>754,10101=>754,10102=>762,10103=>762,10104=>762,10105=>762,10106=>762,10107=>762, +10108=>762,10109=>762,10110=>762,10111=>762,10112=>754,10113=>754,10114=>754,10115=>754,10116=>754,10117=>754, +10118=>754,10119=>754,10120=>754,10121=>754,10122=>754,10123=>754,10124=>754,10125=>754,10126=>754,10127=>754, +10128=>754,10129=>754,10130=>754,10131=>754,10132=>754,10136=>754,10137=>754,10138=>754,10139=>754,10140=>754, +10141=>754,10142=>754,10143=>754,10144=>754,10145=>754,10146=>754,10147=>754,10148=>754,10149=>754,10150=>754, +10151=>754,10152=>754,10153=>754,10154=>754,10155=>754,10156=>754,10157=>754,10158=>754,10159=>754,10161=>754, +10162=>754,10163=>754,10164=>754,10165=>754,10166=>754,10167=>754,10168=>754,10169=>754,10170=>754,10171=>754, +10172=>754,10173=>754,10174=>754,10181=>411,10182=>411,10208=>444,10214=>438,10215=>438,10216=>411,10217=>411, +10218=>648,10219=>648,10224=>754,10225=>754,10226=>754,10227=>754,10228=>1042,10229=>1290,10230=>1290,10231=>1290, +10232=>1290,10233=>1290,10234=>1290,10235=>1290,10236=>1290,10237=>1290,10238=>1290,10239=>1290,10240=>703,10241=>703, +10242=>703,10243=>703,10244=>703,10245=>703,10246=>703,10247=>703,10248=>703,10249=>703,10250=>703,10251=>703, +10252=>703,10253=>703,10254=>703,10255=>703,10256=>703,10257=>703,10258=>703,10259=>703,10260=>703,10261=>703, +10262=>703,10263=>703,10264=>703,10265=>703,10266=>703,10267=>703,10268=>703,10269=>703,10270=>703,10271=>703, +10272=>703,10273=>703,10274=>703,10275=>703,10276=>703,10277=>703,10278=>703,10279=>703,10280=>703,10281=>703, +10282=>703,10283=>703,10284=>703,10285=>703,10286=>703,10287=>703,10288=>703,10289=>703,10290=>703,10291=>703, +10292=>703,10293=>703,10294=>703,10295=>703,10296=>703,10297=>703,10298=>703,10299=>703,10300=>703,10301=>703, +10302=>703,10303=>703,10304=>703,10305=>703,10306=>703,10307=>703,10308=>703,10309=>703,10310=>703,10311=>703, +10312=>703,10313=>703,10314=>703,10315=>703,10316=>703,10317=>703,10318=>703,10319=>703,10320=>703,10321=>703, +10322=>703,10323=>703,10324=>703,10325=>703,10326=>703,10327=>703,10328=>703,10329=>703,10330=>703,10331=>703, +10332=>703,10333=>703,10334=>703,10335=>703,10336=>703,10337=>703,10338=>703,10339=>703,10340=>703,10341=>703, +10342=>703,10343=>703,10344=>703,10345=>703,10346=>703,10347=>703,10348=>703,10349=>703,10350=>703,10351=>703, +10352=>703,10353=>703,10354=>703,10355=>703,10356=>703,10357=>703,10358=>703,10359=>703,10360=>703,10361=>703, +10362=>703,10363=>703,10364=>703,10365=>703,10366=>703,10367=>703,10368=>703,10369=>703,10370=>703,10371=>703, +10372=>703,10373=>703,10374=>703,10375=>703,10376=>703,10377=>703,10378=>703,10379=>703,10380=>703,10381=>703, +10382=>703,10383=>703,10384=>703,10385=>703,10386=>703,10387=>703,10388=>703,10389=>703,10390=>703,10391=>703, +10392=>703,10393=>703,10394=>703,10395=>703,10396=>703,10397=>703,10398=>703,10399=>703,10400=>703,10401=>703, +10402=>703,10403=>703,10404=>703,10405=>703,10406=>703,10407=>703,10408=>703,10409=>703,10410=>703,10411=>703, +10412=>703,10413=>703,10414=>703,10415=>703,10416=>703,10417=>703,10418=>703,10419=>703,10420=>703,10421=>703, +10422=>703,10423=>703,10424=>703,10425=>703,10426=>703,10427=>703,10428=>703,10429=>703,10430=>703,10431=>703, +10432=>703,10433=>703,10434=>703,10435=>703,10436=>703,10437=>703,10438=>703,10439=>703,10440=>703,10441=>703, +10442=>703,10443=>703,10444=>703,10445=>703,10446=>703,10447=>703,10448=>703,10449=>703,10450=>703,10451=>703, +10452=>703,10453=>703,10454=>703,10455=>703,10456=>703,10457=>703,10458=>703,10459=>703,10460=>703,10461=>703, +10462=>703,10463=>703,10464=>703,10465=>703,10466=>703,10467=>703,10468=>703,10469=>703,10470=>703,10471=>703, +10472=>703,10473=>703,10474=>703,10475=>703,10476=>703,10477=>703,10478=>703,10479=>703,10480=>703,10481=>703, +10482=>703,10483=>703,10484=>703,10485=>703,10486=>703,10487=>703,10488=>703,10489=>703,10490=>703,10491=>703, +10492=>703,10493=>703,10494=>703,10495=>703,10502=>754,10503=>754,10506=>754,10507=>754,10560=>754,10561=>754, +10627=>678,10628=>678,10702=>754,10703=>941,10704=>941,10705=>900,10706=>900,10707=>900,10708=>900,10709=>900, +10731=>444,10746=>754,10747=>754,10752=>900,10753=>900,10754=>900,10764=>1495,10765=>506,10766=>506,10767=>506, +10768=>506,10769=>506,10770=>506,10771=>506,10772=>506,10773=>506,10774=>506,10775=>506,10776=>506,10777=>506, +10778=>506,10779=>506,10780=>506,10799=>754,10877=>754,10878=>754,10879=>754,10880=>754,10881=>754,10882=>754, +10883=>754,10884=>754,10885=>754,10886=>754,10887=>754,10888=>754,10889=>754,10890=>754,10891=>754,10892=>754, +10893=>754,10894=>754,10895=>754,10896=>754,10897=>754,10898=>754,10899=>754,10900=>754,10901=>754,10902=>754, +10903=>754,10904=>754,10905=>754,10906=>754,10907=>754,10908=>754,10909=>754,10910=>754,10911=>754,10912=>754, +10926=>754,10927=>754,10928=>754,10929=>754,10930=>754,10931=>754,10932=>754,10933=>754,10934=>754,10935=>754, +10936=>754,10937=>754,10938=>754,11001=>754,11002=>754,11008=>754,11009=>754,11010=>754,11011=>754,11012=>754, +11013=>754,11014=>754,11015=>754,11016=>754,11017=>754,11018=>754,11019=>754,11020=>754,11021=>754,11022=>754, +11023=>754,11024=>754,11025=>754,11026=>850,11027=>850,11028=>850,11029=>850,11030=>692,11031=>692,11032=>692, +11033=>692,11034=>850,11039=>782,11040=>782,11041=>786,11042=>786,11043=>786,11044=>1007,11091=>782,11092=>782, +11360=>573,11361=>324,11362=>573,11363=>659,11364=>693,11365=>607,11366=>430,11367=>860,11368=>641,11369=>697, +11370=>598,11371=>652,11372=>523,11373=>774,11374=>896,11375=>696,11376=>774,11377=>700,11378=>1099,11379=>950, +11380=>586,11381=>628,11382=>508,11383=>704,11385=>484,11386=>618,11387=>502,11388=>197,11389=>438,11390=>648, +11391=>652,11568=>622,11569=>847,11570=>847,11571=>652,11572=>652,11573=>652,11574=>608,11575=>696,11576=>696, +11577=>615,11578=>615,11579=>721,11580=>890,11581=>685,11582=>561,11583=>685,11584=>847,11585=>847,11586=>335, +11587=>666,11588=>753,11589=>822,11590=>604,11591=>663,11592=>612,11593=>615,11594=>542,11595=>935,11596=>700, +11597=>753,11598=>615,11599=>334,11600=>700,11601=>335,11602=>652,11603=>622,11604=>847,11605=>847,11606=>753, +11607=>335,11608=>752,11609=>847,11610=>847,11611=>660,11612=>789,11613=>694,11614=>660,11615=>615,11616=>696, +11617=>753,11618=>615,11619=>765,11620=>627,11621=>765,11631=>644,11800=>522,11810=>411,11811=>411,11812=>411, +11813=>411,11822=>522,19904=>807,19905=>807,19906=>807,19907=>807,19908=>807,19909=>807,19910=>807,19911=>807, +19912=>807,19913=>807,19914=>807,19915=>807,19916=>807,19917=>807,19918=>807,19919=>807,19920=>807,19921=>807, +19922=>807,19923=>807,19924=>807,19925=>807,19926=>807,19927=>807,19928=>807,19929=>807,19930=>807,19931=>807, +19932=>807,19933=>807,19934=>807,19935=>807,19936=>807,19937=>807,19938=>807,19939=>807,19940=>807,19941=>807, +19942=>807,19943=>807,19944=>807,19945=>807,19946=>807,19947=>807,19948=>807,19949=>807,19950=>807,19951=>807, +19952=>807,19953=>807,19954=>807,19955=>807,19956=>807,19957=>807,19958=>807,19959=>807,19960=>807,19961=>807, +19962=>807,19963=>807,19964=>807,19965=>807,19966=>807,19967=>807,42564=>648,42565=>536,42566=>392,42567=>396, +42572=>1265,42573=>1055,42576=>1110,42577=>924,42580=>1056,42581=>875,42582=>983,42583=>862,42594=>976,42595=>832, +42596=>986,42597=>821,42598=>1134,42599=>897,42600=>765,42601=>618,42602=>933,42603=>781,42604=>1266,42605=>995, +42606=>865,42634=>867,42635=>708,42636=>614,42637=>521,42644=>727,42645=>641,42760=>450,42761=>450,42762=>450, +42763=>450,42764=>450,42765=>450,42766=>450,42767=>450,42768=>450,42769=>450,42770=>450,42771=>450,42772=>450, +42773=>450,42774=>450,42779=>360,42780=>360,42781=>258,42782=>258,42783=>258,42786=>399,42787=>351,42788=>486, +42789=>486,42790=>753,42791=>641,42792=>928,42793=>771,42794=>626,42795=>501,42800=>502,42801=>536,42802=>1214, +42803=>946,42804=>1156,42805=>958,42806=>1094,42807=>949,42808=>971,42809=>830,42810=>971,42811=>830,42812=>932, +42813=>830,42814=>628,42815=>494,42822=>765,42823=>488,42824=>614,42825=>478,42826=>826,42827=>732,42830=>1266, +42831=>995,42832=>659,42833=>644,42834=>853,42835=>843,42838=>765,42839=>644,42852=>664,42853=>644,42854=>664, +42855=>644,42880=>573,42881=>308,42882=>753,42883=>641,42889=>360,42890=>347,42891=>410,42892=>275,42893=>727, +43003=>615,43004=>659,43005=>896,43006=>334,43007=>1192,61184=>194,61185=>218,61186=>240,61187=>249,61188=>254, +61189=>218,61190=>194,61191=>218,61192=>240,61193=>249,61194=>240,61195=>218,61196=>194,61197=>218,61198=>240, +61199=>249,61200=>240,61201=>218,61202=>194,61203=>218,61204=>254,61205=>249,61206=>240,61207=>218,61208=>194, +61209=>254,63173=>618,64256=>729,64257=>667,64258=>667,64259=>1003,64260=>1004,64261=>727,64262=>917,64275=>1249, +64276=>1245,64277=>1240,64278=>1245,64279=>1542,64285=>308,64286=>0,64287=>597,64288=>647,64289=>867,64290=>801, +64291=>889,64292=>867,64293=>844,64294=>889,64295=>889,64296=>878,64297=>754,64298=>854,64299=>854,64300=>854, +64301=>854,64302=>676,64303=>676,64304=>676,64305=>605,64306=>483,64307=>589,64308=>641,64309=>394,64310=>442, +64312=>651,64313=>394,64314=>584,64315=>584,64316=>611,64318=>698,64320=>447,64321=>696,64323=>646,64324=>618, +64326=>676,64327=>656,64328=>584,64329=>854,64330=>676,64331=>308,64332=>605,64333=>584,64334=>618,64335=>585, +64338=>904,64339=>953,64340=>338,64341=>367,64342=>904,64343=>953,64344=>338,64345=>367,64346=>904,64347=>953, +64348=>338,64349=>367,64350=>904,64351=>953,64352=>338,64353=>367,64354=>904,64355=>953,64356=>338,64357=>367, +64358=>904,64359=>953,64360=>338,64361=>367,64362=>1045,64363=>1072,64364=>589,64365=>647,64366=>1045,64367=>1072, +64368=>589,64369=>647,64370=>648,64371=>648,64372=>648,64373=>648,64374=>648,64375=>648,64376=>648,64377=>648, +64378=>648,64379=>648,64380=>648,64381=>648,64382=>648,64383=>648,64384=>648,64385=>648,64386=>461,64387=>520, +64388=>461,64389=>520,64390=>461,64391=>520,64392=>461,64393=>520,64394=>518,64395=>560,64396=>518,64397=>560, +64398=>921,64399=>921,64400=>523,64401=>523,64402=>921,64403=>921,64404=>523,64405=>523,64406=>921,64407=>921, +64408=>523,64409=>523,64410=>921,64411=>921,64412=>523,64413=>523,64414=>768,64415=>810,64416=>768,64417=>810, +64418=>338,64419=>367,64426=>844,64427=>792,64428=>624,64429=>594,64467=>742,64468=>758,64469=>428,64470=>497, +64473=>559,64474=>564,64488=>338,64489=>367,64508=>825,64509=>910,64510=>338,64511=>367,65024=>0,65025=>0, +65026=>0,65027=>0,65028=>0,65029=>0,65030=>0,65031=>0,65032=>0,65033=>0,65034=>0,65035=>0, +65036=>0,65037=>0,65038=>0,65039=>0,65056=>0,65057=>0,65058=>0,65059=>0,65136=>308,65137=>308, +65138=>308,65139=>311,65140=>308,65142=>308,65143=>308,65144=>308,65145=>308,65146=>308,65147=>308,65148=>308, +65149=>308,65150=>308,65151=>308,65152=>460,65153=>308,65154=>338,65155=>308,65156=>338,65157=>559,65158=>564, +65159=>308,65160=>338,65161=>825,65162=>825,65163=>338,65164=>367,65165=>308,65166=>338,65167=>904,65168=>953, +65169=>338,65170=>367,65171=>531,65172=>545,65173=>904,65174=>953,65175=>338,65176=>367,65177=>904,65178=>953, +65179=>338,65180=>367,65181=>648,65182=>648,65183=>648,65184=>648,65185=>648,65186=>648,65187=>648,65188=>648, +65189=>648,65190=>648,65191=>648,65192=>648,65193=>461,65194=>520,65195=>461,65196=>520,65197=>518,65198=>560, +65199=>518,65200=>560,65201=>1242,65202=>1272,65203=>885,65204=>916,65205=>1242,65206=>1272,65207=>885,65208=>916, +65209=>1210,65210=>1228,65211=>870,65212=>887,65213=>1210,65214=>1228,65215=>870,65216=>887,65217=>935,65218=>963, +65219=>848,65220=>876,65221=>935,65222=>963,65223=>848,65224=>876,65225=>615,65226=>615,65227=>615,65228=>508, +65229=>615,65230=>615,65231=>615,65232=>508,65233=>1045,65234=>1072,65235=>589,65236=>647,65237=>804,65238=>811, +65239=>589,65240=>647,65241=>825,65242=>838,65243=>523,65244=>523,65245=>781,65246=>803,65247=>338,65248=>367, +65249=>659,65250=>706,65251=>557,65252=>603,65253=>768,65254=>810,65255=>338,65256=>367,65257=>531,65258=>545, +65259=>624,65260=>594,65261=>559,65262=>564,65263=>825,65264=>910,65265=>825,65266=>910,65267=>338,65268=>367, +65269=>670,65270=>683,65271=>670,65272=>683,65273=>670,65274=>683,65275=>670,65276=>683,65279=>0,65529=>0, +65530=>0,65531=>0,65532=>0,65533=>1002); +$enc=''; +$diff=''; +$file='dejavusanscondensedb.z'; +$ctg='dejavusanscondensedb.ctg.z'; +$originalsize=595416; +// --- EOF --- --- /dev/null +++ b/tcpdf/fonts/dejavusanscondensedbi.php @@ -1,1 +1,464 @@ - +928,'Descent'=>-236,'CapHeight'=>-46,'Flags'=>96,'FontBBox'=>'[-960 -385 1804 1121]','ItalicAngle'=>-11,'StemV'=>120,'MissingWidth'=>540); +$up=-63; +$ut=44; +$dw=540; +$cw=array( +0=>540,32=>313,33=>410,34=>469,35=>626,36=>626,37=>901,38=>785,39=>275,40=>411, +41=>411,42=>470,43=>754,44=>342,45=>374,46=>342,47=>329,48=>626,49=>626,50=>626, +51=>626,52=>626,53=>626,54=>626,55=>626,56=>626,57=>626,58=>360,59=>360,60=>754, +61=>754,62=>754,63=>522,64=>900,65=>696,66=>686,67=>660,68=>747,69=>615,70=>615, +71=>738,72=>753,73=>334,74=>334,75=>697,76=>573,77=>896,78=>753,79=>765,80=>659, +81=>765,82=>693,83=>648,84=>614,85=>730,86=>696,87=>993,88=>694,89=>651,90=>652, +91=>411,92=>329,93=>411,94=>754,95=>450,96=>450,97=>607,98=>644,99=>533,100=>644, +101=>610,102=>391,103=>644,104=>641,105=>308,106=>308,107=>598,108=>308,109=>938,110=>641, +111=>618,112=>644,113=>644,114=>444,115=>536,116=>430,117=>641,118=>586,119=>831,120=>580, +121=>586,122=>523,123=>641,124=>329,125=>641,126=>754,8364=>626,8218=>342,402=>391,8222=>580, +8230=>900,8224=>450,8225=>450,710=>450,8240=>1309,352=>648,8249=>371,338=>1050,381=>652,8216=>342, +8217=>342,8220=>580,8221=>580,8226=>575,8211=>450,8212=>900,732=>450,8482=>900,353=>536,8250=>371, +339=>984,382=>523,376=>651,160=>313,161=>410,162=>626,163=>626,164=>572,165=>626,166=>329, +167=>450,168=>450,169=>900,170=>507,171=>584,172=>754,173=>374,174=>900,175=>450,176=>450, +177=>754,178=>394,179=>394,180=>450,181=>662,182=>572,183=>342,184=>450,185=>394,186=>507, +187=>584,188=>932,189=>932,190=>932,191=>522,192=>696,193=>696,194=>696,195=>696,196=>696, +197=>696,198=>976,199=>660,200=>615,201=>615,202=>615,203=>615,204=>334,205=>334,206=>334, +207=>334,208=>760,209=>753,210=>765,211=>765,212=>765,213=>765,214=>765,215=>754,216=>765, +217=>730,218=>730,219=>730,220=>730,221=>651,222=>668,223=>647,224=>607,225=>607,226=>607, +227=>607,228=>607,229=>607,230=>943,231=>533,232=>610,233=>610,234=>610,235=>610,236=>308, +237=>308,238=>308,239=>308,240=>618,241=>641,242=>618,243=>618,244=>618,245=>618,246=>618, +247=>754,248=>618,249=>641,250=>641,251=>641,252=>641,253=>586,254=>644,255=>586,256=>696, +257=>607,258=>696,259=>607,260=>696,261=>607,262=>660,263=>533,264=>660,265=>533,266=>660, +267=>533,268=>660,269=>533,270=>747,271=>644,272=>760,273=>644,274=>615,275=>610,276=>615, +277=>610,278=>615,279=>610,280=>615,281=>610,282=>615,283=>610,284=>738,285=>644,286=>738, +287=>644,288=>738,289=>644,290=>738,291=>644,292=>753,293=>641,294=>876,295=>711,296=>334, +297=>308,298=>334,299=>308,300=>334,301=>308,302=>334,303=>308,304=>334,305=>308,306=>669, +307=>617,308=>334,309=>308,310=>697,311=>598,312=>598,313=>573,314=>308,315=>573,316=>308, +317=>573,318=>308,319=>573,320=>308,321=>594,322=>337,323=>753,324=>641,325=>753,326=>641, +327=>753,328=>641,329=>884,330=>753,331=>641,332=>765,333=>618,334=>765,335=>618,336=>765, +337=>618,340=>693,341=>444,342=>693,343=>444,344=>693,345=>444,346=>648,347=>536,348=>648, +349=>536,350=>648,351=>536,354=>614,355=>430,356=>614,357=>430,358=>614,359=>430,360=>730, +361=>641,362=>730,363=>641,364=>730,365=>641,366=>730,367=>641,368=>730,369=>641,370=>730, +371=>641,372=>993,373=>831,374=>651,375=>586,377=>652,378=>523,379=>652,380=>523,383=>391, +384=>644,385=>729,386=>686,387=>644,388=>686,389=>644,390=>660,391=>660,392=>533,393=>760, +394=>791,395=>686,396=>644,397=>618,398=>615,399=>765,400=>626,401=>615,403=>738,404=>713, +405=>940,406=>392,407=>350,408=>697,409=>598,410=>324,411=>532,412=>938,413=>753,414=>641, +415=>765,416=>765,417=>618,418=>1002,419=>866,420=>703,421=>644,422=>693,423=>648,424=>536, +425=>615,426=>497,427=>430,428=>636,429=>430,430=>614,431=>730,432=>641,433=>692,434=>732, +435=>717,436=>700,437=>652,438=>523,439=>695,440=>695,441=>576,442=>523,443=>626,444=>695, +445=>576,446=>515,447=>644,448=>334,449=>593,450=>489,451=>334,452=>1393,453=>1305,454=>1176, +455=>879,456=>881,457=>603,458=>1074,459=>1091,460=>957,461=>696,462=>607,463=>334,464=>308, +465=>765,466=>618,467=>730,468=>641,469=>730,470=>641,471=>730,472=>641,473=>730,474=>641, +475=>730,476=>641,477=>610,478=>696,479=>607,480=>696,481=>607,482=>976,483=>943,484=>738, +485=>644,486=>738,487=>644,488=>697,489=>598,490=>765,491=>618,492=>765,493=>618,494=>695, +495=>523,496=>308,497=>1393,498=>1305,499=>1176,500=>738,501=>644,502=>1160,503=>708,504=>753, +505=>641,506=>696,507=>607,508=>976,509=>943,510=>765,511=>618,512=>696,513=>607,514=>696, +515=>607,516=>615,517=>610,518=>615,519=>610,520=>334,521=>308,522=>334,523=>308,524=>765, +525=>618,526=>765,527=>618,528=>693,529=>444,530=>693,531=>444,532=>730,533=>641,534=>730, +535=>641,536=>648,537=>536,538=>614,539=>430,540=>621,541=>546,542=>753,543=>641,544=>753, +545=>778,546=>728,547=>593,548=>652,549=>523,550=>696,551=>607,552=>615,553=>610,554=>765, +555=>618,556=>765,557=>618,558=>765,559=>618,560=>765,561=>618,562=>651,563=>586,564=>442, +565=>780,566=>460,567=>308,568=>979,569=>979,570=>696,571=>660,572=>533,573=>573,574=>614, +575=>536,576=>523,577=>703,578=>553,579=>686,580=>730,581=>696,582=>615,583=>610,584=>334, +585=>308,586=>774,587=>712,588=>693,589=>444,590=>651,591=>586,592=>607,593=>644,594=>644, +595=>644,596=>533,597=>533,598=>712,599=>712,600=>610,601=>610,602=>788,603=>501,604=>490, +605=>696,606=>658,607=>308,608=>712,609=>644,610=>564,611=>661,612=>571,613=>641,614=>641, +615=>641,616=>491,617=>396,618=>491,619=>502,620=>624,621=>308,622=>757,623=>938,624=>938, +625=>938,626=>641,627=>713,628=>578,629=>618,630=>817,631=>613,632=>716,633=>484,634=>484, +635=>584,636=>444,637=>444,638=>536,639=>536,640=>578,641=>578,642=>536,643=>374,644=>391, +645=>544,646=>497,647=>430,648=>430,649=>828,650=>692,651=>603,652=>586,653=>831,654=>586, +655=>651,656=>624,657=>615,658=>576,659=>576,660=>515,661=>515,662=>515,663=>515,664=>765, +665=>569,666=>658,667=>616,668=>622,669=>308,670=>659,671=>485,672=>712,673=>515,674=>515, +675=>1040,676=>1093,677=>1039,678=>876,679=>691,680=>836,681=>923,682=>712,683=>702,684=>532, +685=>374,686=>609,687=>710,688=>410,689=>410,690=>197,691=>284,692=>284,693=>284,694=>369, +695=>532,696=>375,697=>271,698=>469,699=>342,700=>342,701=>342,702=>330,703=>330,704=>293, +705=>293,706=>450,707=>450,708=>450,709=>450,711=>450,712=>275,713=>450,714=>450,715=>450, +716=>275,717=>450,718=>450,719=>450,720=>303,721=>303,722=>330,723=>330,724=>450,725=>450, +726=>374,727=>295,728=>450,729=>450,730=>450,731=>450,733=>450,734=>315,735=>450,736=>370, +737=>197,738=>343,739=>371,740=>293,741=>450,742=>450,743=>450,744=>450,745=>450,748=>450, +749=>450,750=>580,755=>450,759=>450,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0, +774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0, +784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0, +794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0, +804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0, +814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0, +824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,832=>0,833=>0, +834=>0,835=>0,836=>0,837=>0,838=>0,839=>0,840=>0,841=>0,842=>0,843=>0, +844=>0,845=>0,846=>0,847=>0,849=>0,850=>0,851=>0,855=>0,856=>0,858=>0, +860=>0,861=>0,862=>0,863=>0,864=>0,865=>0,866=>0,880=>628,881=>508,882=>919, +883=>752,884=>271,885=>271,886=>753,887=>630,890=>450,891=>533,892=>495,893=>494,894=>360, +900=>397,901=>450,902=>717,903=>342,904=>761,905=>908,906=>507,908=>801,910=>882,911=>804, +912=>351,913=>696,914=>686,915=>573,916=>696,917=>615,918=>652,919=>753,920=>765,921=>334, +922=>697,923=>696,924=>896,925=>753,926=>568,927=>765,928=>753,929=>659,931=>615,932=>614, +933=>651,934=>765,935=>694,936=>765,937=>765,938=>334,939=>651,940=>618,941=>501,942=>641, +943=>351,944=>607,945=>618,946=>644,947=>613,948=>618,949=>501,950=>532,951=>641,952=>618, +953=>351,954=>639,955=>569,956=>662,957=>613,958=>532,959=>618,960=>712,961=>644,962=>533, +963=>701,964=>574,965=>607,966=>704,967=>580,968=>714,969=>782,970=>351,971=>607,972=>618, +973=>607,974=>782,975=>697,976=>585,977=>594,978=>671,979=>883,980=>671,981=>716,982=>782, +983=>669,984=>765,985=>618,986=>660,987=>533,988=>615,989=>444,990=>632,991=>593,992=>827, +993=>564,994=>983,995=>753,996=>749,997=>644,998=>835,999=>669,1000=>660,1001=>585,1002=>709, +1003=>604,1004=>677,1005=>644,1006=>614,1007=>531,1008=>669,1009=>644,1010=>533,1011=>308,1012=>765, +1013=>580,1014=>580,1015=>668,1016=>644,1017=>660,1018=>896,1019=>659,1020=>644,1021=>660,1022=>660, +1023=>628,1024=>615,1025=>615,1026=>791,1027=>573,1028=>660,1029=>648,1030=>334,1031=>334,1032=>334, +1033=>1039,1034=>1017,1035=>791,1036=>735,1037=>753,1038=>694,1039=>753,1040=>696,1041=>686,1042=>686, +1043=>573,1044=>801,1045=>615,1046=>1102,1047=>639,1048=>753,1049=>753,1050=>735,1051=>747,1052=>896, +1053=>753,1054=>765,1055=>753,1056=>659,1057=>660,1058=>614,1059=>694,1060=>892,1061=>694,1062=>835, +1063=>727,1064=>1112,1065=>1193,1066=>845,1067=>932,1068=>686,1069=>660,1070=>1056,1071=>693,1072=>607, +1073=>628,1074=>569,1075=>470,1076=>727,1077=>610,1078=>896,1079=>523,1080=>630,1081=>630,1082=>611, +1083=>659,1084=>735,1085=>622,1086=>618,1087=>622,1088=>644,1089=>533,1090=>521,1091=>586,1092=>893, +1093=>580,1094=>667,1095=>618,1096=>956,1097=>995,1098=>676,1099=>813,1100=>569,1101=>533,1102=>875, +1103=>578,1104=>610,1105=>610,1106=>642,1107=>470,1108=>533,1109=>536,1110=>308,1111=>308,1112=>308, +1113=>892,1114=>860,1115=>661,1116=>611,1117=>630,1118=>586,1119=>622,1120=>983,1121=>782,1122=>756, +1123=>662,1124=>911,1125=>755,1126=>893,1127=>749,1128=>1222,1129=>1009,1130=>765,1131=>618,1132=>1112, +1133=>906,1134=>626,1135=>501,1136=>967,1137=>955,1138=>765,1139=>618,1140=>765,1141=>625,1142=>765, +1143=>625,1144=>1033,1145=>939,1146=>967,1147=>776,1148=>1265,1149=>1055,1150=>983,1151=>782,1152=>660, +1153=>533,1154=>587,1155=>0,1156=>0,1157=>0,1158=>0,1159=>0,1160=>376,1161=>376,1162=>844, +1163=>725,1164=>686,1165=>550,1166=>662,1167=>646,1168=>573,1169=>470,1170=>599,1171=>488,1172=>709, +1173=>470,1174=>1102,1175=>896,1176=>639,1177=>523,1178=>697,1179=>611,1180=>735,1181=>611,1182=>735, +1183=>611,1184=>914,1185=>743,1186=>753,1187=>622,1188=>992,1189=>783,1190=>1129,1191=>880,1192=>851, +1193=>773,1194=>660,1195=>533,1196=>614,1197=>521,1198=>651,1199=>586,1200=>651,1201=>586,1202=>694, +1203=>580,1204=>993,1205=>901,1206=>727,1207=>618,1208=>727,1209=>618,1210=>727,1211=>641,1212=>923, +1213=>729,1214=>923,1215=>729,1216=>334,1217=>1102,1218=>896,1219=>700,1220=>566,1221=>839,1222=>724, +1223=>753,1224=>622,1225=>844,1226=>725,1227=>727,1228=>618,1229=>986,1230=>838,1231=>308,1232=>696, +1233=>607,1234=>696,1235=>607,1236=>976,1237=>943,1238=>615,1239=>610,1240=>765,1241=>610,1242=>765, +1243=>610,1244=>1102,1245=>896,1246=>639,1247=>523,1248=>695,1249=>576,1250=>753,1251=>630,1252=>753, +1253=>630,1254=>765,1255=>618,1256=>765,1257=>618,1258=>765,1259=>618,1260=>660,1261=>533,1262=>694, +1263=>586,1264=>694,1265=>586,1266=>694,1267=>586,1268=>727,1269=>618,1270=>573,1271=>470,1272=>932, +1273=>813,1274=>599,1275=>488,1276=>694,1277=>580,1278=>694,1279=>580,1280=>686,1281=>547,1282=>1043, +1283=>804,1284=>1007,1285=>828,1286=>745,1287=>624,1288=>1117,1289=>915,1290=>1160,1291=>912,1292=>755, +1293=>574,1294=>844,1295=>722,1296=>626,1297=>501,1298=>747,1299=>659,1300=>1157,1301=>963,1302=>958, +1303=>883,1304=>973,1305=>864,1306=>765,1307=>644,1308=>993,1309=>831,1312=>1123,1313=>920,1314=>1128, +1315=>880,1316=>861,1317=>726,1329=>886,1330=>730,1331=>886,1332=>886,1333=>730,1334=>699,1335=>730, +1336=>730,1337=>877,1338=>886,1339=>730,1340=>639,1341=>970,1342=>1022,1343=>730,1344=>639,1345=>681, +1346=>886,1347=>789,1348=>886,1349=>714,1350=>886,1351=>730,1352=>730,1353=>730,1354=>862,1355=>699, +1356=>886,1357=>730,1358=>886,1359=>648,1360=>730,1361=>714,1362=>805,1363=>765,1364=>842,1365=>765, +1366=>648,1369=>330,1370=>342,1371=>495,1372=>495,1373=>342,1374=>491,1375=>468,1377=>938,1378=>641, +1379=>779,1380=>781,1381=>641,1382=>735,1383=>588,1384=>641,1385=>729,1386=>735,1387=>641,1388=>448, +1389=>916,1390=>644,1391=>641,1392=>641,1393=>644,1394=>737,1395=>641,1396=>676,1397=>308,1398=>794, +1399=>502,1400=>641,1401=>502,1402=>938,1403=>502,1404=>777,1405=>641,1406=>732,1407=>938,1408=>641, +1409=>644,1410=>514,1411=>938,1412=>700,1413=>618,1414=>648,1415=>776,1417=>360,1418=>438,1456=>0, +1457=>0,1458=>0,1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1466=>0, +1467=>0,1468=>0,1469=>0,1470=>374,1471=>0,1472=>334,1473=>0,1474=>0,1475=>334,1478=>447, +1479=>0,1488=>676,1489=>605,1490=>483,1491=>589,1492=>641,1493=>308,1494=>442,1495=>641,1496=>651, +1497=>308,1498=>584,1499=>584,1500=>611,1501=>641,1502=>698,1503=>308,1504=>447,1505=>696,1506=>610, +1507=>646,1508=>618,1509=>565,1510=>676,1511=>656,1512=>584,1513=>854,1514=>676,1520=>598,1521=>598, +1522=>597,1523=>399,1524=>639,3647=>626,3713=>734,3714=>673,3716=>674,3719=>512,3720=>668,3722=>669, +3725=>685,3732=>635,3733=>633,3734=>672,3735=>737,3737=>657,3738=>654,3739=>654,3740=>830,3741=>744, +3742=>779,3743=>779,3745=>752,3746=>685,3747=>692,3749=>691,3751=>642,3754=>744,3755=>928,3757=>651, +3758=>705,3759=>840,3760=>620,3761=>0,3762=>549,3763=>549,3764=>0,3765=>0,3766=>0,3767=>0, +3768=>0,3769=>0,3771=>0,3772=>0,3773=>603,3776=>464,3777=>774,3778=>464,3779=>584,3780=>569, +3782=>683,3784=>0,3785=>0,3786=>0,3787=>0,3788=>0,3789=>0,3792=>694,3793=>694,3794=>624, +3795=>752,3796=>655,3797=>655,3798=>764,3799=>710,3800=>683,3801=>818,3804=>1227,3805=>1227,4256=>826, +4257=>669,4258=>665,4259=>753,4260=>584,4261=>696,4262=>771,4263=>800,4264=>477,4265=>570,4266=>771, +4267=>810,4268=>579,4269=>813,4270=>732,4271=>677,4272=>782,4273=>579,4274=>579,4275=>797,4276=>797, +4277=>660,4278=>587,4279=>579,4280=>582,4281=>579,4282=>710,4283=>812,4284=>570,4285=>557,4286=>579, +4287=>700,4288=>802,4289=>541,4290=>668,4291=>554,4292=>570,4293=>668,4304=>497,4305=>497,4306=>536, +4307=>734,4308=>505,4309=>506,4310=>497,4311=>744,4312=>497,4313=>488,4314=>967,4315=>506,4316=>507, +4317=>730,4318=>497,4319=>532,4320=>740,4321=>506,4322=>621,4323=>525,4324=>732,4325=>505,4326=>731, +4327=>506,4328=>506,4329=>507,4330=>568,4331=>506,4332=>506,4333=>497,4334=>506,4335=>506,4336=>501, +4337=>543,4338=>497,4339=>497,4340=>497,4341=>544,4342=>767,4343=>571,4344=>506,4345=>536,4346=>487, +4347=>615,4348=>331,5121=>696,5122=>696,5123=>696,5124=>696,5125=>814,5126=>814,5127=>814,5129=>814, +5130=>814,5131=>814,5132=>916,5133=>908,5134=>916,5135=>908,5136=>916,5137=>908,5138=>1034,5139=>1025, +5140=>1034,5141=>1025,5142=>814,5143=>1034,5144=>1028,5145=>1034,5146=>1028,5147=>814,5149=>278,5150=>476, +5151=>382,5152=>382,5153=>355,5154=>355,5155=>355,5156=>355,5157=>507,5158=>423,5159=>278,5160=>355, +5161=>355,5162=>355,5163=>1092,5164=>888,5165=>1094,5166=>1167,5167=>696,5168=>696,5169=>696,5170=>696, +5171=>797,5172=>797,5173=>797,5175=>797,5176=>797,5177=>797,5178=>916,5179=>908,5180=>916,5181=>908, +5182=>916,5183=>908,5184=>1034,5185=>1025,5186=>1034,5187=>1025,5188=>1034,5189=>1028,5190=>1034,5191=>1028, +5192=>797,5193=>518,5194=>206,5196=>730,5197=>730,5198=>730,5199=>730,5200=>734,5201=>734,5202=>734, +5204=>734,5205=>734,5206=>734,5207=>950,5208=>943,5209=>950,5210=>943,5211=>950,5212=>943,5213=>954, +5214=>949,5215=>954,5216=>949,5217=>954,5218=>946,5219=>954,5220=>946,5221=>954,5222=>435,5223=>904, +5224=>904,5225=>921,5226=>915,5227=>668,5228=>668,5229=>668,5230=>668,5231=>668,5232=>668,5233=>668, +5234=>668,5235=>668,5236=>926,5237=>877,5238=>882,5239=>877,5240=>882,5241=>877,5242=>926,5243=>877, +5244=>926,5245=>877,5246=>882,5247=>877,5248=>882,5249=>877,5250=>882,5251=>451,5252=>451,5253=>844, +5254=>844,5255=>844,5256=>844,5257=>668,5258=>668,5259=>668,5260=>668,5261=>668,5262=>668,5263=>668, +5264=>668,5265=>668,5266=>926,5267=>877,5268=>926,5269=>877,5270=>926,5271=>877,5272=>926,5273=>877, +5274=>926,5275=>877,5276=>926,5277=>877,5278=>926,5279=>877,5280=>926,5281=>451,5282=>451,5283=>563, +5284=>563,5285=>563,5286=>563,5287=>563,5288=>563,5289=>563,5290=>563,5291=>563,5292=>793,5293=>769, +5294=>777,5295=>786,5296=>777,5297=>786,5298=>793,5299=>786,5300=>793,5301=>786,5302=>777,5303=>786, +5304=>777,5305=>786,5306=>777,5307=>392,5308=>493,5309=>392,5312=>889,5313=>889,5314=>889,5315=>889, +5316=>838,5317=>838,5318=>838,5319=>838,5320=>838,5321=>1114,5322=>1122,5323=>1080,5324=>1105,5325=>1080, +5326=>1105,5327=>838,5328=>593,5329=>447,5330=>593,5331=>889,5332=>889,5333=>889,5334=>889,5335=>838, +5336=>838,5337=>838,5338=>838,5339=>838,5340=>1107,5341=>1122,5342=>1155,5343=>1105,5344=>1155,5345=>1105, +5346=>1105,5347=>1093,5348=>1105,5349=>1093,5350=>1155,5351=>1105,5352=>1155,5353=>1105,5354=>593,5356=>797, +5357=>657,5358=>657,5359=>657,5360=>657,5361=>657,5362=>657,5363=>657,5364=>657,5365=>657,5366=>897, +5367=>862,5368=>870,5369=>890,5370=>870,5371=>890,5372=>897,5373=>862,5374=>897,5375=>862,5376=>870, +5377=>890,5378=>870,5379=>890,5380=>870,5381=>443,5382=>414,5383=>443,5392=>831,5393=>831,5394=>831, +5395=>1022,5396=>1022,5397=>1022,5398=>1022,5399=>1088,5400=>1081,5401=>1088,5402=>1081,5403=>1088,5404=>1081, +5405=>1288,5406=>1278,5407=>1288,5408=>1278,5409=>1288,5410=>1278,5411=>1288,5412=>1278,5413=>671,5414=>698, +5415=>698,5416=>698,5417=>698,5418=>698,5419=>698,5420=>698,5421=>698,5422=>698,5423=>902,5424=>903, +5425=>911,5426=>896,5427=>911,5428=>896,5429=>902,5430=>903,5431=>902,5432=>903,5433=>911,5434=>896, +5435=>911,5436=>896,5437=>911,5438=>445,5440=>355,5441=>458,5442=>929,5443=>929,5444=>878,5445=>878, +5446=>878,5447=>878,5448=>659,5449=>659,5450=>659,5451=>659,5452=>659,5453=>659,5454=>902,5455=>863, +5456=>445,5458=>797,5459=>696,5460=>696,5461=>696,5462=>696,5463=>835,5464=>835,5465=>835,5466=>835, +5467=>1055,5468=>1028,5469=>542,5470=>730,5471=>730,5472=>730,5473=>730,5474=>730,5475=>730,5476=>734, +5477=>734,5478=>734,5479=>734,5480=>954,5481=>946,5482=>493,5492=>879,5493=>879,5494=>879,5495=>879, +5496=>879,5497=>879,5498=>879,5499=>556,5500=>753,5501=>458,5502=>1114,5503=>1114,5504=>1114,5505=>1114, +5506=>1114,5507=>1114,5508=>1114,5509=>890,5514=>879,5515=>879,5516=>879,5517=>879,5518=>1432,5519=>1432, +5520=>1432,5521=>1165,5522=>1165,5523=>1432,5524=>1432,5525=>763,5526=>1146,5536=>889,5537=>889,5538=>838, +5539=>838,5540=>838,5541=>838,5542=>593,5543=>698,5544=>698,5545=>698,5546=>698,5547=>698,5548=>698, +5549=>698,5550=>445,5551=>668,5598=>747,5601=>747,5702=>446,5703=>446,5742=>371,5743=>1114,5744=>1432, +5745=>1814,5746=>1814,5747=>1548,5748=>1510,5749=>1814,5750=>1814,7424=>586,7425=>750,7426=>943,7427=>547, +7428=>533,7429=>608,7430=>608,7431=>502,7432=>501,7433=>308,7434=>444,7435=>598,7436=>485,7437=>735, +7438=>630,7439=>618,7440=>533,7441=>594,7442=>594,7443=>594,7444=>984,7446=>618,7447=>618,7448=>500, +7449=>578,7450=>578,7451=>521,7452=>571,7453=>663,7454=>853,7455=>625,7456=>586,7457=>831,7458=>523, +7459=>581,7462=>485,7463=>586,7464=>622,7465=>500,7466=>703,7467=>659,7468=>438,7469=>615,7470=>432, +7472=>470,7473=>387,7474=>387,7475=>465,7476=>474,7477=>211,7478=>211,7479=>439,7480=>361,7481=>563, +7482=>474,7483=>474,7484=>481,7485=>458,7486=>415,7487=>436,7488=>387,7489=>460,7490=>625,7491=>412, +7492=>412,7493=>431,7494=>641,7495=>431,7496=>431,7497=>431,7498=>431,7499=>347,7500=>347,7501=>431, +7502=>197,7503=>438,7504=>597,7505=>410,7506=>439,7507=>372,7508=>439,7509=>439,7510=>431,7511=>349, +7512=>410,7513=>416,7514=>597,7515=>451,7517=>405,7518=>386,7519=>389,7520=>443,7521=>365,7522=>197, +7523=>284,7524=>410,7525=>451,7526=>405,7527=>386,7528=>405,7529=>443,7530=>365,7543=>644,7544=>474, +7547=>491,7549=>672,7557=>462,7579=>431,7580=>372,7581=>372,7582=>439,7583=>347,7584=>339,7585=>313, +7586=>431,7587=>410,7588=>312,7589=>253,7590=>312,7591=>312,7592=>388,7593=>293,7594=>296,7595=>333, +7596=>598,7597=>597,7598=>505,7599=>505,7600=>403,7601=>439,7602=>488,7603=>379,7604=>356,7605=>349, +7606=>524,7607=>444,7608=>359,7609=>405,7610=>451,7611=>375,7612=>471,7613=>422,7614=>409,7615=>382, +7620=>0,7621=>0,7622=>0,7623=>0,7624=>0,7625=>0,7680=>696,7681=>607,7682=>686,7683=>644, +7684=>686,7685=>644,7686=>686,7687=>644,7688=>660,7689=>533,7690=>747,7691=>644,7692=>747,7693=>644, +7694=>747,7695=>644,7696=>747,7697=>644,7698=>747,7699=>644,7700=>615,7701=>610,7702=>615,7703=>610, +7704=>615,7705=>610,7706=>615,7707=>610,7708=>615,7709=>610,7710=>615,7711=>391,7712=>738,7713=>644, +7714=>753,7715=>641,7716=>753,7717=>641,7718=>753,7719=>641,7720=>753,7721=>641,7722=>753,7723=>641, +7724=>334,7725=>308,7726=>334,7727=>308,7728=>697,7729=>598,7730=>697,7731=>598,7732=>697,7733=>598, +7734=>573,7735=>308,7736=>573,7737=>308,7738=>573,7739=>308,7740=>573,7741=>308,7742=>896,7743=>938, +7744=>896,7745=>938,7746=>896,7747=>938,7748=>753,7749=>641,7750=>753,7751=>641,7752=>753,7753=>641, +7754=>753,7755=>641,7756=>765,7757=>618,7758=>765,7759=>618,7760=>765,7761=>618,7762=>765,7763=>618, +7764=>659,7765=>644,7766=>659,7767=>644,7768=>693,7769=>444,7770=>693,7771=>444,7772=>693,7773=>444, +7774=>693,7775=>444,7776=>648,7777=>536,7778=>648,7779=>536,7780=>648,7781=>536,7782=>648,7783=>536, +7784=>648,7785=>536,7786=>614,7787=>430,7788=>614,7789=>430,7790=>614,7791=>430,7792=>614,7793=>430, +7794=>730,7795=>641,7796=>730,7797=>641,7798=>730,7799=>641,7800=>730,7801=>641,7802=>730,7803=>641, +7804=>696,7805=>586,7806=>696,7807=>586,7808=>993,7809=>831,7810=>993,7811=>831,7812=>993,7813=>831, +7814=>993,7815=>831,7816=>993,7817=>831,7818=>694,7819=>580,7820=>694,7821=>580,7822=>651,7823=>586, +7824=>652,7825=>523,7826=>652,7827=>523,7828=>652,7829=>523,7830=>641,7831=>430,7832=>831,7833=>586, +7834=>607,7835=>391,7836=>391,7837=>391,7838=>806,7839=>618,7840=>696,7841=>607,7842=>696,7843=>607, +7844=>696,7845=>607,7846=>696,7847=>607,7848=>696,7849=>607,7850=>696,7851=>607,7852=>696,7853=>607, +7854=>696,7855=>607,7856=>696,7857=>607,7858=>696,7859=>607,7860=>696,7861=>607,7862=>696,7863=>607, +7864=>615,7865=>610,7866=>615,7867=>610,7868=>615,7869=>610,7870=>615,7871=>610,7872=>615,7873=>610, +7874=>615,7875=>610,7876=>615,7877=>610,7878=>615,7879=>610,7880=>334,7881=>308,7882=>334,7883=>308, +7884=>765,7885=>618,7886=>765,7887=>618,7888=>765,7889=>618,7890=>765,7891=>618,7892=>765,7893=>618, +7894=>765,7895=>618,7896=>765,7897=>618,7898=>765,7899=>618,7900=>765,7901=>618,7902=>765,7903=>618, +7904=>765,7905=>618,7906=>765,7907=>618,7908=>730,7909=>641,7910=>730,7911=>641,7912=>730,7913=>641, +7914=>730,7915=>641,7916=>730,7917=>641,7918=>730,7919=>641,7920=>730,7921=>641,7922=>651,7923=>586, +7924=>651,7925=>586,7926=>651,7927=>586,7928=>651,7929=>586,7930=>857,7931=>579,7936=>618,7937=>618, +7938=>618,7939=>618,7940=>618,7941=>618,7942=>618,7943=>618,7944=>696,7945=>696,7946=>937,7947=>939, +7948=>841,7949=>866,7950=>751,7951=>773,7952=>501,7953=>501,7954=>501,7955=>501,7956=>501,7957=>501, +7960=>712,7961=>715,7962=>989,7963=>986,7964=>920,7965=>947,7968=>641,7969=>641,7970=>641,7971=>641, +7972=>641,7973=>641,7974=>641,7975=>641,7976=>851,7977=>856,7978=>1125,7979=>1125,7980=>1062,7981=>1085, +7982=>948,7983=>956,7984=>351,7985=>351,7986=>351,7987=>351,7988=>351,7989=>351,7990=>351,7991=>351, +7992=>435,7993=>440,7994=>699,7995=>707,7996=>641,7997=>664,7998=>544,7999=>544,8000=>618,8001=>618, +8002=>618,8003=>618,8004=>618,8005=>618,8008=>802,8009=>839,8010=>1099,8011=>1101,8012=>947,8013=>974, +8016=>607,8017=>607,8018=>607,8019=>607,8020=>607,8021=>607,8022=>607,8023=>607,8025=>837,8027=>1065, +8029=>1079,8031=>944,8032=>782,8033=>782,8034=>782,8035=>782,8036=>782,8037=>782,8038=>782,8039=>782, +8040=>817,8041=>862,8042=>1121,8043=>1126,8044=>968,8045=>994,8046=>925,8047=>968,8048=>618,8049=>618, +8050=>501,8051=>501,8052=>641,8053=>641,8054=>351,8055=>351,8056=>618,8057=>618,8058=>607,8059=>607, +8060=>782,8061=>782,8064=>618,8065=>618,8066=>618,8067=>618,8068=>618,8069=>618,8070=>618,8071=>618, +8072=>696,8073=>696,8074=>937,8075=>939,8076=>841,8077=>866,8078=>751,8079=>773,8080=>641,8081=>641, +8082=>641,8083=>641,8084=>641,8085=>641,8086=>641,8087=>641,8088=>851,8089=>856,8090=>1125,8091=>1125, +8092=>1062,8093=>1085,8094=>948,8095=>956,8096=>782,8097=>782,8098=>782,8099=>782,8100=>782,8101=>782, +8102=>782,8103=>782,8104=>817,8105=>862,8106=>1121,8107=>1126,8108=>968,8109=>994,8110=>925,8111=>968, +8112=>618,8113=>618,8114=>618,8115=>618,8116=>618,8118=>618,8119=>618,8120=>696,8121=>696,8122=>789, +8123=>717,8124=>696,8125=>450,8126=>450,8127=>450,8128=>450,8129=>450,8130=>641,8131=>641,8132=>641, +8134=>641,8135=>641,8136=>836,8137=>761,8138=>972,8139=>908,8140=>753,8141=>450,8142=>450,8143=>450, +8144=>351,8145=>351,8146=>351,8147=>351,8150=>351,8151=>351,8152=>334,8153=>334,8154=>559,8155=>507, +8157=>450,8158=>450,8159=>450,8160=>607,8161=>607,8162=>607,8163=>607,8164=>644,8165=>644,8166=>607, +8167=>607,8168=>651,8169=>651,8170=>918,8171=>882,8172=>754,8173=>450,8174=>450,8175=>450,8178=>782, +8179=>782,8180=>782,8182=>782,8183=>782,8184=>958,8185=>801,8186=>976,8187=>804,8188=>765,8189=>450, +8190=>450,8192=>450,8193=>900,8194=>450,8195=>900,8196=>296,8197=>225,8198=>150,8199=>626,8200=>342, +8201=>180,8202=>89,8203=>0,8204=>0,8205=>0,8206=>0,8207=>0,8208=>374,8209=>374,8210=>626, +8213=>900,8214=>450,8215=>450,8219=>342,8223=>591,8227=>575,8228=>342,8229=>616,8231=>313,8232=>0, +8233=>0,8234=>0,8235=>0,8236=>0,8237=>0,8238=>0,8239=>180,8241=>1717,8242=>237,8243=>402, +8244=>567,8245=>237,8246=>402,8247=>567,8248=>659,8251=>875,8252=>564,8253=>522,8254=>450,8255=>745, +8256=>745,8257=>296,8258=>920,8259=>450,8260=>150,8261=>411,8262=>411,8263=>927,8264=>746,8265=>746, +8266=>461,8267=>618,8268=>450,8269=>450,8270=>470,8271=>360,8272=>745,8273=>470,8274=>500,8275=>754, +8276=>745,8277=>754,8278=>615,8279=>731,8280=>754,8281=>754,8282=>342,8283=>784,8284=>754,8285=>342, +8286=>342,8287=>200,8288=>0,8289=>0,8290=>0,8291=>0,8292=>0,8298=>0,8299=>0,8300=>0, +8301=>0,8302=>0,8303=>0,8304=>394,8305=>197,8308=>394,8309=>394,8310=>394,8311=>394,8312=>394, +8313=>394,8314=>475,8315=>475,8316=>475,8317=>259,8318=>259,8319=>410,8320=>394,8321=>394,8322=>394, +8323=>394,8324=>394,8325=>394,8326=>394,8327=>394,8328=>394,8329=>394,8330=>475,8331=>475,8332=>475, +8333=>259,8334=>259,8336=>412,8337=>431,8338=>439,8339=>371,8340=>431,8352=>836,8353=>626,8354=>626, +8355=>626,8356=>626,8357=>938,8358=>753,8359=>1339,8360=>1084,8361=>993,8362=>768,8363=>626,8365=>626, +8366=>626,8367=>1252,8368=>626,8369=>626,8370=>626,8371=>626,8372=>773,8373=>626,8376=>626,8377=>626, +8400=>0,8401=>0,8406=>0,8407=>0,8411=>0,8412=>0,8417=>0,8448=>995,8449=>995,8450=>660, +8451=>1090,8452=>807,8453=>1002,8454=>1033,8455=>626,8456=>628,8457=>856,8459=>965,8460=>822,8461=>799, +8462=>641,8463=>641,8464=>537,8465=>627,8466=>771,8467=>424,8468=>876,8469=>753,8470=>1083,8471=>900, +8472=>627,8473=>675,8474=>765,8475=>844,8476=>732,8477=>721,8478=>807,8479=>639,8480=>917,8481=>1115, +8483=>751,8484=>679,8485=>560,8486=>765,8487=>692,8488=>686,8489=>272,8490=>697,8491=>696,8492=>835, +8493=>736,8494=>769,8495=>572,8496=>656,8497=>727,8498=>615,8499=>1065,8500=>418,8501=>714,8502=>658, +8503=>444,8504=>615,8505=>342,8506=>851,8507=>1232,8508=>710,8509=>663,8510=>589,8511=>776,8512=>756, +8513=>707,8514=>518,8515=>573,8516=>684,8517=>747,8518=>644,8519=>610,8520=>308,8521=>308,8523=>785, +8526=>492,8528=>932,8529=>932,8530=>1334,8531=>932,8532=>932,8533=>932,8534=>932,8535=>932,8536=>932, +8537=>932,8538=>932,8539=>932,8540=>932,8541=>932,8542=>932,8543=>554,8544=>334,8545=>593,8546=>851, +8547=>989,8548=>696,8549=>989,8550=>1247,8551=>1505,8552=>1008,8553=>694,8554=>1008,8555=>1266,8556=>573, +8557=>660,8558=>747,8559=>896,8560=>308,8561=>546,8562=>785,8563=>885,8564=>586,8565=>866,8566=>1104, +8567=>1342,8568=>872,8569=>580,8570=>872,8571=>1110,8572=>308,8573=>533,8574=>644,8575=>938,8576=>1160, +8577=>747,8578=>1160,8579=>660,8580=>533,8581=>660,8585=>932,8592=>754,8593=>754,8594=>754,8595=>754, +8596=>754,8597=>754,8598=>754,8599=>754,8600=>754,8601=>754,8602=>754,8603=>754,8604=>754,8605=>754, +8606=>754,8607=>754,8608=>754,8609=>754,8610=>754,8611=>754,8612=>754,8613=>754,8614=>754,8615=>754, +8616=>754,8617=>754,8618=>754,8619=>754,8620=>754,8621=>754,8622=>754,8623=>754,8624=>754,8625=>754, +8626=>754,8627=>754,8628=>754,8629=>754,8630=>754,8631=>754,8632=>754,8633=>754,8634=>754,8635=>754, +8636=>754,8637=>754,8638=>754,8639=>754,8640=>754,8641=>754,8642=>754,8643=>754,8644=>754,8645=>754, +8646=>754,8647=>754,8648=>754,8649=>754,8650=>754,8651=>754,8652=>754,8653=>754,8654=>754,8655=>754, +8656=>754,8657=>754,8658=>754,8659=>754,8660=>754,8661=>754,8662=>754,8663=>754,8664=>754,8665=>754, +8666=>754,8667=>754,8668=>754,8669=>754,8670=>754,8671=>754,8672=>754,8673=>754,8674=>754,8675=>754, +8676=>754,8677=>754,8678=>754,8679=>754,8680=>754,8681=>754,8682=>754,8683=>754,8684=>754,8685=>754, +8686=>754,8687=>754,8688=>754,8689=>754,8690=>754,8691=>754,8692=>754,8693=>754,8694=>754,8695=>754, +8696=>754,8697=>754,8698=>754,8699=>754,8700=>754,8701=>754,8702=>754,8703=>754,8704=>696,8705=>626, +8706=>489,8707=>615,8708=>615,8709=>771,8710=>627,8711=>627,8712=>807,8713=>807,8714=>675,8715=>807, +8716=>807,8717=>675,8718=>572,8719=>708,8720=>708,8721=>646,8722=>754,8723=>754,8724=>626,8725=>329, +8726=>626,8727=>754,8728=>563,8729=>342,8730=>600,8731=>600,8732=>600,8733=>641,8734=>750,8735=>754, +8736=>807,8737=>807,8738=>754,8739=>450,8740=>450,8741=>450,8742=>450,8743=>730,8744=>730,8745=>730, +8746=>730,8747=>549,8748=>835,8749=>1165,8750=>506,8751=>879,8752=>1181,8753=>506,8754=>506,8755=>506, +8756=>626,8757=>626,8758=>264,8759=>626,8760=>754,8761=>754,8762=>754,8763=>754,8764=>754,8765=>754, +8766=>754,8767=>754,8768=>337,8769=>754,8770=>754,8771=>754,8772=>754,8773=>754,8774=>754,8775=>754, +8776=>754,8777=>754,8778=>754,8779=>754,8780=>754,8781=>754,8782=>754,8783=>754,8784=>754,8785=>754, +8786=>754,8787=>754,8788=>956,8789=>956,8790=>754,8791=>754,8792=>754,8793=>754,8794=>754,8795=>754, +8796=>754,8797=>754,8798=>754,8799=>754,8800=>754,8801=>754,8802=>754,8803=>754,8804=>754,8805=>754, +8806=>754,8807=>754,8808=>756,8809=>756,8810=>942,8811=>942,8812=>450,8813=>754,8814=>754,8815=>754, +8816=>754,8817=>754,8818=>754,8819=>754,8820=>754,8821=>754,8822=>754,8823=>754,8824=>754,8825=>754, +8826=>754,8827=>754,8828=>754,8829=>754,8830=>754,8831=>754,8832=>754,8833=>754,8834=>754,8835=>754, +8836=>754,8837=>754,8838=>754,8839=>754,8840=>754,8841=>754,8842=>754,8843=>754,8844=>730,8845=>730, +8846=>730,8847=>754,8848=>754,8849=>754,8850=>754,8851=>716,8852=>716,8853=>754,8854=>754,8855=>754, +8856=>754,8857=>754,8858=>754,8859=>754,8860=>754,8861=>754,8862=>754,8863=>754,8864=>754,8865=>754, +8866=>822,8867=>822,8868=>822,8869=>822,8870=>488,8871=>488,8872=>822,8873=>822,8874=>822,8875=>822, +8876=>822,8877=>822,8878=>822,8879=>822,8880=>754,8881=>754,8882=>754,8883=>754,8884=>754,8885=>754, +8886=>900,8887=>900,8888=>754,8889=>754,8890=>488,8891=>730,8892=>730,8893=>730,8894=>754,8895=>754, +8896=>758,8897=>758,8898=>758,8899=>758,8900=>444,8901=>342,8902=>563,8903=>754,8904=>900,8905=>900, +8906=>900,8907=>900,8908=>900,8909=>754,8910=>730,8911=>730,8912=>754,8913=>754,8914=>754,8915=>754, +8916=>754,8917=>754,8918=>754,8919=>754,8920=>1280,8921=>1280,8922=>754,8923=>754,8924=>754,8925=>754, +8926=>754,8927=>754,8928=>754,8929=>754,8930=>754,8931=>754,8932=>754,8933=>754,8934=>754,8935=>754, +8936=>754,8937=>754,8938=>754,8939=>754,8940=>754,8941=>754,8942=>900,8943=>900,8944=>900,8945=>900, +8946=>1042,8947=>807,8948=>675,8949=>807,8950=>807,8951=>675,8952=>807,8953=>807,8954=>1042,8955=>807, +8956=>675,8957=>807,8958=>675,8959=>807,8960=>542,8961=>542,8962=>644,8963=>754,8964=>754,8965=>754, +8966=>754,8967=>439,8968=>411,8969=>411,8970=>411,8971=>411,8972=>728,8973=>728,8974=>728,8975=>728, +8976=>754,8977=>484,8984=>835,8985=>754,8988=>422,8989=>422,8990=>422,8991=>422,8992=>549,8993=>549, +8996=>1037,8997=>1037,8998=>1272,8999=>1037,9000=>1299,9003=>1272,9004=>786,9075=>351,9076=>644,9077=>782, +9082=>618,9085=>776,9095=>1037,9108=>786,9115=>450,9116=>450,9117=>450,9118=>450,9119=>450,9120=>450, +9121=>450,9122=>450,9123=>450,9124=>450,9125=>450,9126=>450,9127=>675,9128=>675,9129=>675,9130=>675, +9131=>675,9132=>675,9133=>675,9134=>549,9166=>754,9167=>850,9187=>786,9189=>692,9192=>626,9250=>644, +9251=>644,9312=>762,9313=>762,9314=>762,9315=>762,9316=>762,9317=>762,9318=>762,9319=>762,9320=>762, +9321=>762,9600=>692,9601=>692,9602=>692,9603=>692,9604=>692,9605=>692,9606=>692,9607=>692,9608=>692, +9609=>692,9610=>692,9611=>692,9612=>692,9613=>692,9614=>692,9615=>692,9616=>692,9617=>692,9618=>692, +9619=>692,9620=>692,9621=>692,9622=>692,9623=>692,9624=>692,9625=>692,9626=>692,9627=>692,9628=>692, +9629=>692,9630=>692,9631=>692,9632=>850,9633=>850,9634=>850,9635=>850,9636=>850,9637=>850,9638=>850, +9639=>850,9640=>850,9641=>850,9642=>610,9643=>610,9644=>850,9645=>850,9646=>495,9647=>495,9648=>692, +9649=>692,9650=>692,9651=>692,9652=>452,9653=>452,9654=>692,9655=>692,9656=>452,9657=>452,9658=>692, +9659=>692,9660=>692,9661=>692,9662=>452,9663=>452,9664=>692,9665=>692,9666=>452,9667=>452,9668=>692, +9669=>692,9670=>692,9671=>692,9672=>692,9673=>785,9674=>444,9675=>785,9676=>785,9677=>785,9678=>785, +9679=>785,9680=>785,9681=>785,9682=>785,9683=>785,9684=>785,9685=>785,9686=>474,9687=>474,9688=>756, +9689=>873,9690=>873,9691=>873,9692=>348,9693=>348,9694=>348,9695=>348,9696=>692,9697=>692,9698=>692, +9699=>692,9700=>692,9701=>692,9702=>575,9703=>850,9704=>850,9705=>850,9706=>850,9707=>850,9708=>692, +9709=>692,9710=>692,9711=>1007,9712=>850,9713=>850,9714=>850,9715=>850,9716=>785,9717=>785,9718=>785, +9719=>785,9720=>692,9721=>692,9722=>692,9723=>747,9724=>747,9725=>659,9726=>659,9727=>692,9728=>807, +9729=>900,9730=>807,9731=>807,9732=>807,9733=>807,9734=>807,9735=>515,9736=>806,9737=>807,9738=>799, +9739=>799,9740=>604,9741=>911,9742=>1121,9743=>1125,9744=>807,9745=>807,9746=>807,9747=>479,9748=>807, +9749=>807,9750=>807,9751=>807,9752=>807,9753=>807,9754=>807,9755=>807,9756=>807,9757=>548,9758=>807, +9759=>548,9760=>807,9761=>807,9762=>807,9763=>807,9764=>602,9765=>671,9766=>584,9767=>705,9768=>490, +9769=>807,9770=>807,9771=>807,9772=>639,9773=>807,9774=>807,9775=>807,9776=>807,9777=>807,9778=>807, +9779=>807,9780=>807,9781=>807,9782=>807,9783=>807,9784=>807,9785=>807,9786=>807,9787=>807,9788=>807, +9789=>807,9790=>807,9791=>552,9792=>659,9793=>659,9794=>807,9795=>807,9796=>807,9797=>807,9798=>807, +9799=>807,9800=>807,9801=>807,9802=>807,9803=>807,9804=>807,9805=>807,9806=>807,9807=>807,9808=>807, +9809=>807,9810=>807,9811=>807,9812=>807,9813=>807,9814=>807,9815=>807,9816=>807,9817=>807,9818=>807, +9819=>807,9820=>807,9821=>807,9822=>807,9823=>807,9824=>807,9825=>807,9826=>807,9827=>807,9828=>807, +9829=>807,9830=>807,9831=>807,9832=>807,9833=>424,9834=>574,9835=>807,9836=>807,9837=>424,9838=>321, +9839=>435,9840=>673,9841=>689,9842=>807,9843=>807,9844=>807,9845=>807,9846=>807,9847=>807,9848=>807, +9849=>807,9850=>807,9851=>807,9852=>807,9853=>807,9854=>807,9855=>807,9856=>782,9857=>782,9858=>782, +9859=>782,9860=>782,9861=>782,9862=>807,9863=>807,9864=>807,9865=>807,9866=>807,9867=>807,9868=>807, +9869=>807,9870=>807,9871=>807,9872=>807,9873=>807,9874=>807,9875=>807,9876=>807,9877=>487,9878=>807, +9879=>807,9880=>807,9881=>807,9882=>807,9883=>807,9884=>807,9888=>807,9889=>632,9890=>904,9891=>980, +9892=>1057,9893=>813,9894=>754,9895=>754,9896=>754,9897=>754,9898=>754,9899=>754,9900=>754,9901=>754, +9902=>754,9903=>754,9904=>759,9905=>754,9906=>659,9907=>659,9908=>659,9909=>659,9910=>765,9911=>659, +9912=>659,9920=>754,9921=>754,9922=>754,9923=>754,9985=>754,9986=>754,9987=>754,9988=>754,9990=>754, +9991=>754,9992=>754,9993=>754,9996=>754,9997=>754,9998=>754,9999=>754,10000=>754,10001=>754,10002=>754, +10003=>754,10004=>754,10005=>754,10006=>754,10007=>754,10008=>754,10009=>754,10010=>754,10011=>754,10012=>754, +10013=>754,10014=>754,10015=>754,10016=>754,10017=>754,10018=>754,10019=>754,10020=>754,10021=>754,10022=>754, +10023=>754,10025=>754,10026=>754,10027=>754,10028=>754,10029=>754,10030=>754,10031=>754,10032=>754,10033=>754, +10034=>754,10035=>754,10036=>754,10037=>754,10038=>754,10039=>754,10040=>754,10041=>754,10042=>754,10043=>754, +10044=>754,10045=>754,10046=>754,10047=>754,10048=>754,10049=>754,10050=>754,10051=>754,10052=>754,10053=>754, +10054=>754,10055=>754,10056=>754,10057=>754,10058=>754,10059=>754,10061=>807,10063=>807,10064=>807,10065=>807, +10066=>807,10070=>807,10072=>754,10073=>754,10074=>754,10075=>290,10076=>290,10077=>484,10078=>484,10081=>754, +10082=>754,10083=>754,10084=>754,10085=>754,10086=>754,10087=>754,10088=>754,10089=>754,10090=>754,10091=>754, +10092=>754,10093=>754,10094=>754,10095=>754,10096=>754,10097=>754,10098=>754,10099=>754,10100=>754,10101=>754, +10102=>762,10103=>762,10104=>762,10105=>762,10106=>762,10107=>762,10108=>762,10109=>762,10110=>762,10111=>762, +10112=>754,10113=>754,10114=>754,10115=>754,10116=>754,10117=>754,10118=>754,10119=>754,10120=>754,10121=>754, +10122=>754,10123=>754,10124=>754,10125=>754,10126=>754,10127=>754,10128=>754,10129=>754,10130=>754,10131=>754, +10132=>754,10136=>754,10137=>754,10138=>754,10139=>754,10140=>754,10141=>754,10142=>754,10143=>754,10144=>754, +10145=>754,10146=>754,10147=>754,10148=>754,10149=>754,10150=>754,10151=>754,10152=>754,10153=>754,10154=>754, +10155=>754,10156=>754,10157=>754,10158=>754,10159=>754,10161=>754,10162=>754,10163=>754,10164=>754,10165=>754, +10166=>754,10167=>754,10168=>754,10169=>754,10170=>754,10171=>754,10172=>754,10173=>754,10174=>754,10181=>411, +10182=>411,10208=>444,10214=>438,10215=>438,10216=>411,10217=>411,10218=>648,10219=>648,10224=>754,10225=>754, +10226=>754,10227=>754,10228=>1042,10229=>1290,10230=>1290,10231=>1290,10232=>1290,10233=>1290,10234=>1290,10235=>1290, +10236=>1290,10237=>1290,10238=>1290,10239=>1290,10240=>703,10241=>703,10242=>703,10243=>703,10244=>703,10245=>703, +10246=>703,10247=>703,10248=>703,10249=>703,10250=>703,10251=>703,10252=>703,10253=>703,10254=>703,10255=>703, +10256=>703,10257=>703,10258=>703,10259=>703,10260=>703,10261=>703,10262=>703,10263=>703,10264=>703,10265=>703, +10266=>703,10267=>703,10268=>703,10269=>703,10270=>703,10271=>703,10272=>703,10273=>703,10274=>703,10275=>703, +10276=>703,10277=>703,10278=>703,10279=>703,10280=>703,10281=>703,10282=>703,10283=>703,10284=>703,10285=>703, +10286=>703,10287=>703,10288=>703,10289=>703,10290=>703,10291=>703,10292=>703,10293=>703,10294=>703,10295=>703, +10296=>703,10297=>703,10298=>703,10299=>703,10300=>703,10301=>703,10302=>703,10303=>703,10304=>703,10305=>703, +10306=>703,10307=>703,10308=>703,10309=>703,10310=>703,10311=>703,10312=>703,10313=>703,10314=>703,10315=>703, +10316=>703,10317=>703,10318=>703,10319=>703,10320=>703,10321=>703,10322=>703,10323=>703,10324=>703,10325=>703, +10326=>703,10327=>703,10328=>703,10329=>703,10330=>703,10331=>703,10332=>703,10333=>703,10334=>703,10335=>703, +10336=>703,10337=>703,10338=>703,10339=>703,10340=>703,10341=>703,10342=>703,10343=>703,10344=>703,10345=>703, +10346=>703,10347=>703,10348=>703,10349=>703,10350=>703,10351=>703,10352=>703,10353=>703,10354=>703,10355=>703, +10356=>703,10357=>703,10358=>703,10359=>703,10360=>703,10361=>703,10362=>703,10363=>703,10364=>703,10365=>703, +10366=>703,10367=>703,10368=>703,10369=>703,10370=>703,10371=>703,10372=>703,10373=>703,10374=>703,10375=>703, +10376=>703,10377=>703,10378=>703,10379=>703,10380=>703,10381=>703,10382=>703,10383=>703,10384=>703,10385=>703, +10386=>703,10387=>703,10388=>703,10389=>703,10390=>703,10391=>703,10392=>703,10393=>703,10394=>703,10395=>703, +10396=>703,10397=>703,10398=>703,10399=>703,10400=>703,10401=>703,10402=>703,10403=>703,10404=>703,10405=>703, +10406=>703,10407=>703,10408=>703,10409=>703,10410=>703,10411=>703,10412=>703,10413=>703,10414=>703,10415=>703, +10416=>703,10417=>703,10418=>703,10419=>703,10420=>703,10421=>703,10422=>703,10423=>703,10424=>703,10425=>703, +10426=>703,10427=>703,10428=>703,10429=>703,10430=>703,10431=>703,10432=>703,10433=>703,10434=>703,10435=>703, +10436=>703,10437=>703,10438=>703,10439=>703,10440=>703,10441=>703,10442=>703,10443=>703,10444=>703,10445=>703, +10446=>703,10447=>703,10448=>703,10449=>703,10450=>703,10451=>703,10452=>703,10453=>703,10454=>703,10455=>703, +10456=>703,10457=>703,10458=>703,10459=>703,10460=>703,10461=>703,10462=>703,10463=>703,10464=>703,10465=>703, +10466=>703,10467=>703,10468=>703,10469=>703,10470=>703,10471=>703,10472=>703,10473=>703,10474=>703,10475=>703, +10476=>703,10477=>703,10478=>703,10479=>703,10480=>703,10481=>703,10482=>703,10483=>703,10484=>703,10485=>703, +10486=>703,10487=>703,10488=>703,10489=>703,10490=>703,10491=>703,10492=>703,10493=>703,10494=>703,10495=>703, +10502=>754,10503=>754,10506=>754,10507=>754,10560=>754,10561=>754,10627=>678,10628=>678,10702=>754,10703=>941, +10704=>941,10705=>900,10706=>900,10707=>900,10708=>900,10709=>900,10731=>444,10746=>754,10747=>754,10752=>900, +10753=>900,10754=>900,10764=>1495,10765=>506,10766=>506,10767=>506,10768=>506,10769=>506,10770=>506,10771=>506, +10772=>506,10773=>506,10774=>506,10775=>506,10776=>506,10777=>506,10778=>506,10779=>506,10780=>506,10799=>754, +10877=>754,10878=>754,10879=>754,10880=>754,10881=>754,10882=>754,10883=>754,10884=>754,10885=>754,10886=>754, +10887=>754,10888=>754,10889=>754,10890=>754,10891=>754,10892=>754,10893=>754,10894=>754,10895=>754,10896=>754, +10897=>754,10898=>754,10899=>754,10900=>754,10901=>754,10902=>754,10903=>754,10904=>754,10905=>754,10906=>754, +10907=>754,10908=>754,10909=>754,10910=>754,10911=>754,10912=>754,10926=>754,10927=>754,10928=>754,10929=>754, +10930=>754,10931=>754,10932=>754,10933=>754,10934=>754,10935=>754,10936=>754,10937=>754,10938=>754,11001=>754, +11002=>754,11008=>754,11009=>754,11010=>754,11011=>754,11012=>754,11013=>754,11014=>754,11015=>754,11016=>754, +11017=>754,11018=>754,11019=>754,11020=>754,11021=>754,11022=>754,11023=>754,11024=>754,11025=>754,11026=>850, +11027=>850,11028=>850,11029=>850,11030=>692,11031=>692,11032=>692,11033=>692,11034=>850,11039=>782,11040=>782, +11041=>786,11042=>786,11043=>786,11044=>1007,11091=>782,11092=>782,11360=>573,11361=>324,11362=>573,11363=>659, +11364=>693,11365=>607,11366=>430,11367=>860,11368=>641,11369=>697,11370=>598,11371=>652,11372=>523,11373=>774, +11374=>896,11375=>696,11376=>774,11377=>700,11378=>1099,11379=>950,11380=>586,11381=>628,11382=>508,11383=>704, +11385=>484,11386=>618,11387=>502,11388=>197,11389=>438,11390=>648,11391=>652,11800=>527,11810=>411,11811=>411, +11812=>411,11813=>411,11822=>522,19904=>807,19905=>807,19906=>807,19907=>807,19908=>807,19909=>807,19910=>807, +19911=>807,19912=>807,19913=>807,19914=>807,19915=>807,19916=>807,19917=>807,19918=>807,19919=>807,19920=>807, +19921=>807,19922=>807,19923=>807,19924=>807,19925=>807,19926=>807,19927=>807,19928=>807,19929=>807,19930=>807, +19931=>807,19932=>807,19933=>807,19934=>807,19935=>807,19936=>807,19937=>807,19938=>807,19939=>807,19940=>807, +19941=>807,19942=>807,19943=>807,19944=>807,19945=>807,19946=>807,19947=>807,19948=>807,19949=>807,19950=>807, +19951=>807,19952=>807,19953=>807,19954=>807,19955=>807,19956=>807,19957=>807,19958=>807,19959=>807,19960=>807, +19961=>807,19962=>807,19963=>807,19964=>807,19965=>807,19966=>807,19967=>807,42564=>648,42565=>536,42566=>392, +42567=>396,42572=>1265,42573=>1055,42576=>1110,42577=>924,42580=>1056,42581=>875,42582=>990,42583=>872,42594=>990, +42595=>846,42596=>986,42597=>823,42598=>1134,42599=>896,42600=>765,42601=>618,42602=>933,42603=>781,42604=>1266, +42605=>995,42606=>865,42634=>849,42635=>673,42636=>614,42637=>521,42644=>727,42645=>641,42760=>450,42761=>450, +42762=>450,42763=>450,42764=>450,42765=>450,42766=>450,42767=>450,42768=>450,42769=>450,42770=>450,42771=>450, +42772=>450,42773=>450,42774=>450,42779=>360,42780=>360,42781=>258,42782=>258,42783=>258,42786=>399,42787=>351, +42788=>486,42789=>486,42790=>753,42791=>641,42792=>928,42793=>771,42794=>626,42795=>501,42800=>502,42801=>536, +42802=>1214,42803=>946,42804=>1156,42805=>958,42806=>1120,42807=>947,42808=>971,42809=>830,42810=>971,42811=>830, +42812=>932,42813=>830,42814=>628,42815=>494,42822=>765,42823=>488,42824=>614,42825=>478,42826=>826,42827=>732, +42830=>1266,42831=>995,42832=>659,42833=>644,42834=>853,42835=>843,42838=>765,42839=>644,42852=>664,42853=>644, +42854=>664,42855=>644,42880=>573,42881=>308,42882=>753,42883=>641,42889=>360,42890=>356,42891=>410,42892=>275, +42893=>727,43003=>615,43004=>659,43005=>896,43006=>334,43007=>1192,61184=>194,61185=>218,61186=>240,61187=>249, +61188=>254,61189=>218,61190=>194,61191=>218,61192=>240,61193=>249,61194=>240,61195=>218,61196=>194,61197=>218, +61198=>240,61199=>249,61200=>240,61201=>218,61202=>194,61203=>218,61204=>254,61205=>249,61206=>240,61207=>218, +61208=>194,61209=>254,62917=>618,64256=>749,64257=>708,64258=>708,64259=>1024,64260=>1024,64261=>727,64262=>917, +64275=>1249,64276=>1245,64277=>1240,64278=>1245,64279=>1542,64285=>308,64286=>0,64287=>597,64288=>647,64289=>867, +64290=>801,64291=>889,64292=>867,64293=>844,64294=>889,64295=>889,64296=>878,64297=>754,64298=>854,64299=>854, +64300=>854,64301=>854,64302=>676,64303=>676,64304=>676,64305=>605,64306=>483,64307=>589,64308=>641,64309=>308, +64310=>442,64312=>651,64313=>420,64314=>584,64315=>584,64316=>611,64318=>698,64320=>447,64321=>696,64323=>646, +64324=>618,64326=>676,64327=>656,64328=>584,64329=>854,64330=>676,64331=>308,64332=>605,64333=>584,64334=>618, +64335=>585,65024=>0,65025=>0,65026=>0,65027=>0,65028=>0,65029=>0,65030=>0,65031=>0,65032=>0, +65033=>0,65034=>0,65035=>0,65036=>0,65037=>0,65038=>0,65039=>0,65056=>0,65057=>0,65058=>0, +65059=>0,65529=>0,65530=>0,65531=>0,65532=>0,65533=>1002); +$enc=''; +$diff=''; +$file='dejavusanscondensedbi.z'; +$ctg='dejavusanscondensedbi.ctg.z'; +$originalsize=543704; +// --- EOF --- --- /dev/null +++ b/tcpdf/fonts/dejavusanscondensedi.php @@ -1,1 +1,477 @@ - +928,'Descent'=>-236,'CapHeight'=>-39,'Flags'=>96,'FontBBox'=>'[-914 -350 1493 1068]','ItalicAngle'=>-11,'StemV'=>70,'MissingWidth'=>540); +$up=-63; +$ut=44; +$dw=540; +$cw=array( +0=>540,32=>286,33=>360,34=>414,35=>754,36=>572,37=>855,38=>702,39=>247,40=>351, +41=>351,42=>450,43=>754,44=>286,45=>325,46=>286,47=>303,48=>572,49=>572,50=>572, +51=>572,52=>572,53=>572,54=>572,55=>572,56=>572,57=>572,58=>303,59=>303,60=>754, +61=>754,62=>754,63=>478,64=>900,65=>615,66=>617,67=>628,68=>693,69=>568,70=>518, +71=>697,72=>677,73=>265,74=>265,75=>590,76=>501,77=>776,78=>673,79=>708,80=>542, +81=>708,82=>625,83=>571,84=>549,85=>659,86=>615,87=>890,88=>616,89=>549,90=>616, +91=>351,92=>303,93=>351,94=>754,95=>450,96=>450,97=>551,98=>571,99=>495,100=>571, +101=>554,102=>316,103=>571,104=>570,105=>250,106=>250,107=>521,108=>250,109=>876,110=>570, +111=>550,112=>571,113=>571,114=>370,115=>469,116=>353,117=>570,118=>532,119=>736,120=>532, +121=>532,122=>472,123=>572,124=>303,125=>572,126=>754,8364=>572,8218=>286,402=>316,8222=>466, +8230=>900,8224=>450,8225=>450,710=>450,8240=>1215,352=>571,8249=>360,338=>962,381=>616,8216=>286, +8217=>286,8220=>466,8221=>466,8226=>531,8211=>450,8212=>900,732=>450,8482=>900,353=>469,8250=>360, +339=>925,382=>472,376=>549,160=>286,161=>360,162=>572,163=>572,164=>572,165=>572,166=>303, +167=>450,168=>450,169=>900,170=>424,171=>555,172=>754,173=>325,174=>900,175=>450,176=>450, +177=>754,178=>360,179=>360,180=>450,181=>572,182=>572,183=>286,184=>450,185=>360,186=>424, +187=>555,188=>872,189=>872,190=>872,191=>478,192=>615,193=>615,194=>615,195=>615,196=>615, +197=>615,198=>876,199=>628,200=>568,201=>568,202=>568,203=>568,204=>265,205=>265,206=>265, +207=>265,208=>697,209=>673,210=>708,211=>708,212=>708,213=>708,214=>708,215=>754,216=>708, +217=>659,218=>659,219=>659,220=>659,221=>549,222=>547,223=>567,224=>551,225=>551,226=>551, +227=>551,228=>551,229=>551,230=>896,231=>495,232=>554,233=>554,234=>554,235=>554,236=>250, +237=>250,238=>250,239=>250,240=>550,241=>570,242=>550,243=>550,244=>550,245=>550,246=>550, +247=>754,248=>550,249=>570,250=>570,251=>570,252=>570,253=>532,254=>571,255=>532,256=>615, +257=>551,258=>615,259=>551,260=>615,261=>551,262=>628,263=>495,264=>628,265=>495,266=>628, +267=>495,268=>628,269=>495,270=>693,271=>571,272=>697,273=>571,274=>568,275=>554,276=>568, +277=>554,278=>568,279=>554,280=>568,281=>554,282=>568,283=>554,284=>697,285=>571,286=>697, +287=>571,288=>697,289=>571,290=>697,291=>571,292=>677,293=>570,294=>824,295=>625,296=>265, +297=>250,298=>265,299=>250,300=>265,301=>250,302=>265,303=>250,304=>265,305=>250,306=>531, +307=>500,308=>265,309=>250,310=>590,311=>521,312=>521,313=>501,314=>250,315=>501,316=>250, +317=>501,318=>250,319=>501,320=>250,321=>505,322=>258,323=>673,324=>570,325=>673,326=>570, +327=>673,328=>570,329=>732,330=>673,331=>570,332=>708,333=>550,334=>708,335=>550,336=>708, +337=>550,340=>625,341=>370,342=>625,343=>370,344=>625,345=>370,346=>571,347=>469,348=>571, +349=>469,350=>571,351=>469,354=>549,355=>353,356=>549,357=>353,358=>549,359=>353,360=>659, +361=>570,362=>659,363=>570,364=>659,365=>570,366=>659,367=>570,368=>659,369=>570,370=>659, +371=>570,372=>890,373=>736,374=>549,375=>532,377=>616,378=>472,379=>616,380=>472,383=>316, +384=>571,385=>661,386=>617,387=>571,388=>617,389=>571,390=>633,391=>628,392=>495,393=>697, +394=>737,395=>617,396=>571,397=>550,398=>568,399=>708,400=>553,401=>518,403=>697,404=>618, +405=>885,406=>318,407=>265,408=>671,409=>521,410=>250,411=>532,412=>876,413=>673,414=>570, +415=>708,416=>822,417=>550,418=>844,419=>663,420=>586,421=>571,422=>625,423=>571,424=>469, +425=>568,426=>302,427=>353,428=>549,429=>353,430=>549,431=>754,432=>570,433=>688,434=>648, +435=>669,436=>657,437=>616,438=>472,439=>599,440=>599,441=>520,442=>472,443=>572,444=>599, +445=>520,446=>459,447=>571,448=>265,449=>443,450=>413,451=>266,452=>1310,453=>1165,454=>1043, +455=>767,456=>751,457=>500,458=>938,459=>923,460=>820,461=>615,462=>551,463=>265,464=>250, +465=>708,466=>550,467=>659,468=>570,469=>659,470=>570,471=>659,472=>570,473=>659,474=>570, +475=>659,476=>570,477=>554,478=>615,479=>551,480=>615,481=>551,482=>876,483=>896,484=>697, +485=>571,486=>697,487=>571,488=>590,489=>521,490=>708,491=>550,492=>708,493=>550,494=>599, +495=>472,496=>250,497=>1310,498=>1165,499=>1043,500=>697,501=>571,502=>1001,503=>614,504=>673, +505=>570,506=>615,507=>551,508=>876,509=>896,510=>708,511=>550,512=>615,513=>551,514=>615, +515=>551,516=>568,517=>554,518=>568,519=>554,520=>265,521=>250,522=>265,523=>250,524=>708, +525=>550,526=>708,527=>550,528=>625,529=>370,530=>625,531=>370,532=>659,533=>570,534=>659, +535=>570,536=>571,537=>469,538=>549,539=>353,540=>564,541=>469,542=>677,543=>570,544=>662, +545=>754,546=>628,547=>549,548=>616,549=>472,550=>615,551=>551,552=>568,553=>554,554=>708, +555=>550,556=>708,557=>550,558=>708,559=>550,560=>708,561=>550,562=>549,563=>532,564=>427, +565=>758,566=>429,567=>250,568=>898,569=>898,570=>615,571=>628,572=>495,573=>501,574=>549, +575=>469,576=>472,577=>542,578=>431,579=>617,580=>659,581=>615,582=>568,583=>554,584=>265, +585=>250,586=>703,587=>571,588=>625,589=>370,590=>549,591=>532,592=>551,593=>571,594=>571, +595=>571,596=>495,597=>495,598=>571,599=>654,600=>554,601=>554,602=>759,603=>490,604=>490, +605=>698,606=>598,607=>293,608=>626,609=>571,610=>566,611=>536,612=>536,613=>570,614=>570, +615=>570,616=>334,617=>348,618=>334,619=>356,620=>438,621=>250,622=>635,623=>876,624=>876, +625=>876,626=>581,627=>578,628=>570,629=>550,630=>772,631=>655,632=>593,633=>422,634=>422, +635=>422,636=>422,637=>422,638=>477,639=>477,640=>541,641=>541,642=>469,643=>302,644=>302, +645=>415,646=>302,647=>353,648=>353,649=>570,650=>556,651=>538,652=>532,653=>736,654=>532, +655=>549,656=>472,657=>472,658=>520,659=>520,660=>459,661=>459,662=>459,663=>459,664=>708, +665=>521,666=>598,667=>637,668=>588,669=>263,670=>600,671=>456,672=>654,673=>459,674=>459, +675=>913,676=>952,677=>911,678=>742,679=>549,680=>700,681=>763,682=>576,683=>589,684=>463, +685=>463,686=>513,687=>597,688=>359,689=>359,690=>157,691=>233,692=>266,693=>266,694=>341, +695=>463,696=>335,697=>250,698=>414,699=>286,700=>286,701=>286,702=>276,703=>276,704=>333, +705=>333,706=>450,707=>450,708=>450,709=>450,711=>450,712=>247,713=>450,714=>450,715=>450, +716=>247,717=>450,718=>450,719=>450,720=>303,721=>303,722=>276,723=>276,724=>450,725=>450, +726=>351,727=>286,728=>450,729=>450,730=>450,731=>450,733=>450,734=>284,735=>450,736=>383, +737=>149,738=>335,739=>399,740=>333,741=>444,742=>444,743=>444,744=>444,745=>444,748=>450, +749=>450,750=>466,755=>450,759=>450,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0, +774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0, +784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0, +794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0, +804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0, +814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0, +824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,832=>0,833=>0, +834=>0,835=>0,836=>0,837=>0,838=>0,839=>0,840=>0,841=>0,842=>0,843=>0, +844=>0,845=>0,846=>0,847=>0,849=>0,850=>0,851=>0,855=>0,856=>0,858=>0, +860=>0,861=>0,862=>0,863=>0,864=>0,865=>0,866=>0,880=>589,881=>511,882=>775, +883=>583,884=>250,885=>250,886=>673,887=>584,890=>450,891=>494,892=>495,893=>494,894=>303, +900=>450,901=>450,902=>615,903=>286,904=>690,905=>813,906=>391,908=>755,910=>773,911=>814, +912=>304,913=>615,914=>617,915=>501,916=>615,917=>568,918=>616,919=>677,920=>708,921=>265, +922=>590,923=>615,924=>776,925=>673,926=>568,927=>708,928=>677,929=>542,931=>568,932=>549, +933=>549,934=>708,935=>616,936=>708,937=>688,938=>265,939=>549,940=>593,941=>486,942=>570, +943=>304,944=>521,945=>593,946=>574,947=>532,948=>550,949=>486,950=>489,951=>570,952=>550, +953=>304,954=>530,955=>532,956=>572,957=>502,958=>501,959=>550,960=>542,961=>571,962=>528, +963=>570,964=>542,965=>521,966=>593,967=>532,968=>593,969=>753,970=>304,971=>521,972=>550, +973=>521,974=>753,975=>590,976=>553,977=>557,978=>628,979=>758,980=>628,981=>593,982=>753, +983=>597,984=>708,985=>550,986=>583,987=>528,988=>518,989=>413,990=>593,991=>593,992=>778, +993=>564,994=>840,995=>753,996=>682,997=>593,998=>712,999=>553,1000=>618,1001=>546,1002=>690, +1003=>563,1004=>629,1005=>550,1006=>549,1007=>482,1008=>597,1009=>571,1010=>495,1011=>250,1012=>708, +1013=>554,1014=>554,1015=>547,1016=>571,1017=>628,1018=>776,1019=>585,1020=>571,1021=>633,1022=>628, +1023=>633,1024=>568,1025=>568,1026=>708,1027=>501,1028=>628,1029=>571,1030=>265,1031=>265,1032=>265, +1033=>984,1034=>940,1035=>708,1036=>639,1037=>673,1038=>548,1039=>677,1040=>615,1041=>617,1042=>617, +1043=>501,1044=>703,1045=>568,1046=>969,1047=>577,1048=>673,1049=>673,1050=>639,1051=>677,1052=>776, +1053=>677,1054=>708,1055=>677,1056=>542,1057=>628,1058=>549,1059=>548,1060=>774,1061=>616,1062=>699, +1063=>617,1064=>962,1065=>984,1066=>749,1067=>736,1068=>617,1069=>628,1070=>971,1071=>625,1072=>551, +1073=>555,1074=>530,1075=>473,1076=>622,1077=>554,1078=>811,1079=>479,1080=>584,1081=>584,1082=>543, +1083=>575,1084=>679,1085=>588,1086=>550,1087=>588,1088=>571,1089=>495,1090=>524,1091=>532,1092=>769, +1093=>532,1094=>612,1095=>532,1096=>823,1097=>848,1098=>636,1099=>710,1100=>530,1101=>494,1102=>757, +1103=>541,1104=>554,1105=>554,1106=>563,1107=>473,1108=>494,1109=>469,1110=>250,1111=>250,1112=>250, +1113=>812,1114=>809,1115=>586,1116=>543,1117=>584,1118=>532,1119=>588,1120=>840,1121=>753,1122=>693, +1123=>604,1124=>848,1125=>674,1126=>791,1127=>705,1128=>1043,1129=>901,1130=>708,1131=>550,1132=>924, +1133=>742,1134=>572,1135=>486,1136=>771,1137=>789,1138=>708,1139=>550,1140=>703,1141=>598,1142=>703, +1143=>598,1144=>893,1145=>813,1146=>857,1147=>682,1148=>1062,1149=>925,1150=>840,1151=>753,1152=>628, +1153=>495,1154=>452,1155=>0,1156=>0,1157=>0,1158=>0,1159=>0,1160=>376,1161=>376,1162=>673, +1163=>591,1164=>617,1165=>530,1166=>542,1167=>571,1168=>549,1169=>473,1170=>607,1171=>500,1172=>501, +1173=>441,1174=>969,1175=>811,1176=>577,1177=>479,1178=>639,1179=>543,1180=>639,1181=>543,1182=>639, +1183=>543,1184=>771,1185=>748,1186=>677,1187=>594,1188=>913,1189=>789,1190=>1002,1191=>855,1192=>801, +1193=>636,1194=>628,1195=>495,1196=>549,1197=>476,1198=>549,1199=>532,1200=>549,1201=>532,1202=>616, +1203=>532,1204=>840,1205=>726,1206=>617,1207=>532,1208=>617,1209=>532,1210=>617,1211=>570,1212=>836, +1213=>658,1214=>836,1215=>658,1216=>265,1217=>969,1218=>811,1219=>589,1220=>543,1221=>677,1222=>575, +1223=>677,1224=>594,1225=>677,1226=>594,1227=>617,1228=>532,1229=>776,1230=>679,1231=>250,1232=>615, +1233=>551,1234=>615,1235=>551,1236=>876,1237=>896,1238=>568,1239=>554,1240=>708,1241=>554,1242=>708, +1243=>554,1244=>969,1245=>811,1246=>577,1247=>479,1248=>599,1249=>520,1250=>673,1251=>584,1252=>673, +1253=>584,1254=>708,1255=>550,1256=>708,1257=>550,1258=>708,1259=>550,1260=>628,1261=>494,1262=>548, +1263=>532,1264=>548,1265=>532,1266=>548,1267=>532,1268=>617,1269=>532,1270=>501,1271=>442,1272=>736, +1273=>710,1274=>607,1275=>500,1276=>616,1277=>532,1278=>616,1279=>532,1280=>617,1281=>530,1282=>905, +1283=>807,1284=>877,1285=>782,1286=>611,1287=>529,1288=>964,1289=>861,1290=>1001,1291=>870,1292=>697, +1293=>593,1294=>695,1295=>640,1296=>553,1297=>486,1298=>677,1299=>575,1300=>1076,1301=>896,1302=>810, +1303=>780,1304=>927,1305=>890,1306=>708,1307=>571,1308=>890,1309=>736,1312=>1002,1313=>848,1314=>1002, +1315=>854,1316=>713,1317=>614,1329=>780,1330=>659,1331=>794,1332=>794,1333=>659,1334=>579,1335=>613, +1336=>659,1337=>765,1338=>794,1339=>659,1340=>501,1341=>741,1342=>888,1343=>659,1344=>636,1345=>579, +1346=>794,1347=>699,1348=>794,1349=>659,1350=>756,1351=>659,1352=>659,1353=>659,1354=>711,1355=>579, +1356=>794,1357=>659,1358=>794,1359=>571,1360=>659,1361=>659,1362=>719,1363=>774,1364=>711,1365=>708, +1366=>571,1369=>276,1370=>286,1371=>450,1372=>450,1373=>352,1374=>474,1375=>450,1377=>876,1378=>570, +1379=>686,1380=>690,1381=>570,1382=>627,1383=>479,1384=>570,1385=>630,1386=>627,1387=>570,1388=>363, +1389=>804,1390=>576,1391=>570,1392=>570,1393=>571,1394=>631,1395=>570,1396=>593,1397=>250,1398=>684, +1399=>464,1400=>570,1401=>407,1402=>876,1403=>464,1404=>691,1405=>570,1406=>626,1407=>876,1408=>570, +1409=>571,1410=>451,1411=>876,1412=>583,1413=>550,1414=>566,1415=>686,1417=>303,1418=>390,1456=>0, +1457=>0,1458=>0,1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1466=>0, +1467=>0,1468=>0,1469=>0,1470=>325,1471=>0,1472=>265,1473=>0,1474=>0,1475=>265,1478=>410, +1479=>0,1488=>566,1489=>547,1490=>403,1491=>534,1492=>576,1493=>245,1494=>336,1495=>576,1496=>583, +1497=>245,1498=>532,1499=>500,1500=>539,1501=>576,1502=>593,1503=>245,1504=>397,1505=>629,1506=>506, +1507=>576,1508=>543,1509=>468,1510=>523,1511=>596,1512=>532,1513=>727,1514=>591,1520=>423,1521=>409, +1522=>423,1523=>374,1524=>580,3647=>572,3713=>603,3714=>615,3716=>619,3719=>434,3720=>565,3722=>615, +3725=>619,3732=>577,3733=>577,3734=>605,3735=>589,3737=>576,3738=>533,3739=>533,3740=>670,3741=>690, +3742=>618,3743=>618,3745=>631,3746=>619,3747=>615,3749=>584,3751=>569,3754=>633,3755=>737,3757=>569, +3758=>615,3759=>708,3760=>569,3761=>0,3762=>485,3763=>485,3764=>0,3765=>0,3766=>0,3767=>0, +3768=>0,3769=>0,3771=>0,3772=>0,3773=>597,3776=>324,3777=>611,3778=>414,3779=>492,3780=>442, +3782=>606,3784=>0,3785=>0,3786=>0,3787=>0,3788=>0,3789=>0,3792=>572,3793=>576,3794=>576, +3795=>603,3796=>563,3797=>563,3798=>633,3799=>603,3800=>606,3801=>609,3804=>925,3805=>925,4256=>756, +4257=>621,4258=>577,4259=>683,4260=>532,4261=>617,4262=>710,4263=>729,4264=>420,4265=>508,4266=>710, +4267=>713,4268=>526,4269=>753,4270=>675,4271=>620,4272=>729,4273=>526,4274=>526,4275=>753,4276=>753, +4277=>581,4278=>543,4279=>526,4280=>536,4281=>526,4282=>649,4283=>715,4284=>526,4285=>510,4286=>526, +4287=>602,4288=>719,4289=>488,4290=>598,4291=>488,4292=>508,4293=>606,4304=>457,4305=>457,4306=>479, +4307=>706,4308=>470,4309=>465,4310=>457,4311=>717,4312=>457,4313=>466,4314=>952,4315=>470,4316=>470, +4317=>704,4318=>466,4319=>470,4320=>713,4321=>470,4322=>590,4323=>471,4324=>709,4325=>470,4326=>704, +4327=>470,4328=>470,4329=>470,4330=>510,4331=>470,4332=>470,4333=>439,4334=>470,4335=>448,4336=>465, +4337=>504,4338=>457,4339=>457,4340=>457,4341=>507,4342=>741,4343=>536,4344=>470,4345=>498,4346=>498, +4347=>527,4348=>273,5121=>615,5122=>615,5123=>615,5124=>615,5125=>692,5126=>692,5127=>692,5129=>692, +5130=>692,5131=>692,5132=>751,5133=>751,5134=>751,5135=>751,5136=>751,5137=>751,5138=>870,5139=>906, +5140=>870,5141=>906,5142=>692,5143=>870,5144=>906,5145=>870,5146=>906,5147=>692,5149=>230,5150=>488, +5151=>381,5152=>381,5153=>350,5154=>350,5155=>354,5156=>350,5157=>419,5158=>347,5159=>230,5160=>350, +5161=>350,5162=>350,5163=>980,5164=>817,5165=>857,5166=>1005,5167=>615,5168=>615,5169=>615,5170=>615, +5171=>656,5172=>656,5173=>656,5175=>656,5176=>656,5177=>656,5178=>751,5179=>615,5180=>751,5181=>751, +5182=>751,5183=>751,5184=>870,5185=>906,5186=>870,5187=>906,5188=>870,5189=>906,5190=>870,5191=>906, +5192=>656,5193=>457,5194=>172,5196=>659,5197=>659,5198=>659,5199=>659,5200=>657,5201=>657,5202=>657, +5204=>657,5205=>657,5206=>657,5207=>829,5208=>800,5209=>829,5210=>800,5211=>829,5212=>800,5213=>835, +5214=>810,5215=>835,5216=>810,5217=>853,5218=>810,5219=>853,5220=>810,5221=>853,5222=>391,5223=>790, +5224=>790,5225=>779,5226=>801,5227=>565,5228=>565,5229=>565,5230=>565,5231=>565,5232=>565,5233=>565, +5234=>565,5235=>565,5236=>773,5237=>693,5238=>733,5239=>734,5240=>733,5241=>734,5242=>773,5243=>693, +5244=>773,5245=>693,5246=>733,5247=>734,5248=>733,5249=>734,5250=>733,5251=>366,5252=>366,5253=>675, +5254=>697,5255=>675,5256=>697,5257=>565,5258=>565,5259=>565,5260=>565,5261=>565,5262=>565,5263=>565, +5264=>565,5265=>565,5266=>773,5267=>693,5268=>733,5269=>734,5270=>733,5271=>734,5272=>773,5273=>693, +5274=>773,5275=>693,5276=>733,5277=>734,5278=>733,5279=>734,5280=>733,5281=>391,5282=>391,5283=>549, +5284=>501,5285=>501,5286=>501,5287=>549,5288=>549,5289=>549,5290=>501,5291=>501,5292=>674,5293=>691, +5294=>671,5295=>687,5296=>671,5297=>687,5298=>674,5299=>691,5300=>674,5301=>691,5302=>671,5303=>687, +5304=>671,5305=>687,5306=>671,5307=>347,5308=>457,5309=>347,5312=>766,5313=>766,5314=>766,5315=>766, +5316=>766,5317=>766,5318=>766,5319=>766,5320=>766,5321=>962,5322=>931,5323=>953,5324=>766,5325=>953, +5326=>766,5327=>766,5328=>540,5329=>407,5330=>540,5331=>766,5332=>766,5333=>766,5334=>766,5335=>766, +5336=>766,5337=>766,5338=>766,5339=>766,5340=>962,5341=>931,5342=>953,5343=>927,5344=>953,5345=>927, +5346=>962,5347=>931,5348=>962,5349=>931,5350=>975,5351=>927,5352=>975,5353=>927,5354=>540,5356=>656, +5357=>542,5358=>542,5359=>542,5360=>542,5361=>542,5362=>542,5363=>542,5364=>542,5365=>542,5366=>751, +5367=>678,5368=>712,5369=>694,5370=>712,5371=>694,5372=>751,5373=>678,5374=>751,5375=>678,5376=>712, +5377=>694,5378=>712,5379=>694,5380=>712,5381=>376,5382=>378,5383=>376,5392=>641,5393=>641,5394=>641, +5395=>802,5396=>802,5397=>802,5398=>802,5399=>818,5400=>785,5401=>818,5402=>785,5403=>818,5404=>785, +5405=>1026,5406=>989,5407=>1026,5408=>989,5409=>1026,5410=>989,5411=>1026,5412=>989,5413=>576,5414=>564, +5415=>564,5416=>564,5417=>564,5418=>564,5419=>564,5420=>564,5421=>564,5422=>564,5423=>760,5424=>703, +5425=>734,5426=>736,5427=>734,5428=>736,5429=>760,5430=>703,5431=>760,5432=>703,5433=>734,5434=>736, +5435=>734,5436=>736,5437=>734,5438=>376,5440=>350,5441=>436,5442=>824,5443=>824,5444=>776,5445=>824, +5446=>776,5447=>776,5448=>542,5449=>542,5450=>542,5451=>542,5452=>542,5453=>542,5454=>751,5455=>678, +5456=>376,5458=>656,5459=>615,5460=>615,5461=>615,5462=>615,5463=>653,5464=>653,5465=>653,5466=>653, +5467=>831,5468=>906,5469=>457,5470=>659,5471=>659,5472=>659,5473=>659,5474=>659,5475=>659,5476=>657, +5477=>657,5478=>657,5479=>657,5480=>853,5481=>810,5482=>457,5492=>747,5493=>747,5494=>747,5495=>747, +5496=>747,5497=>747,5498=>747,5499=>507,5500=>677,5501=>436,5502=>942,5503=>942,5504=>942,5505=>942, +5506=>942,5507=>942,5508=>942,5509=>743,5514=>747,5515=>747,5516=>747,5517=>747,5518=>1133,5519=>1133, +5520=>1133,5521=>901,5522=>901,5523=>1133,5524=>1133,5525=>629,5526=>965,5536=>766,5537=>766,5538=>719, +5539=>719,5540=>719,5541=>719,5542=>540,5543=>579,5544=>579,5545=>579,5546=>579,5547=>579,5548=>579, +5549=>579,5550=>376,5551=>565,5598=>693,5601=>693,5702=>421,5703=>421,5742=>399,5743=>942,5744=>1178, +5745=>1469,5746=>1469,5747=>1237,5748=>1237,5749=>1469,5750=>1469,7424=>532,7425=>646,7426=>883,7427=>527, +7428=>495,7429=>544,7430=>544,7431=>441,7432=>486,7433=>250,7434=>355,7435=>521,7436=>524,7437=>679, +7438=>584,7439=>550,7440=>495,7441=>615,7442=>615,7443=>615,7444=>920,7446=>550,7447=>550,7448=>472, +7449=>541,7450=>541,7451=>524,7452=>517,7453=>663,7454=>853,7455=>574,7456=>532,7457=>736,7458=>472, +7459=>473,7462=>524,7463=>532,7464=>507,7465=>472,7466=>531,7467=>575,7468=>387,7469=>552,7470=>389, +7472=>436,7473=>358,7474=>358,7475=>439,7476=>426,7477=>167,7478=>167,7479=>372,7480=>315,7481=>489, +7482=>424,7483=>424,7484=>446,7485=>396,7486=>342,7487=>394,7488=>346,7489=>415,7490=>560,7491=>352, +7492=>352,7493=>365,7494=>583,7495=>385,7496=>365,7497=>375,7498=>375,7499=>324,7500=>323,7501=>365, +7502=>161,7503=>383,7504=>561,7505=>368,7506=>372,7507=>333,7508=>372,7509=>372,7510=>385,7511=>265, +7512=>364,7513=>422,7514=>561,7515=>375,7517=>361,7518=>335,7519=>347,7520=>374,7521=>327,7522=>161, +7523=>233,7524=>364,7525=>375,7526=>361,7527=>335,7528=>370,7529=>374,7530=>327,7543=>571,7544=>426, +7547=>334,7549=>600,7557=>250,7579=>365,7580=>333,7581=>333,7582=>372,7583=>324,7584=>267,7585=>209, +7586=>365,7587=>364,7588=>235,7589=>224,7590=>234,7591=>235,7592=>211,7593=>224,7594=>211,7595=>338, +7596=>561,7597=>561,7598=>369,7599=>431,7600=>368,7601=>372,7602=>372,7603=>324,7604=>258,7605=>265, +7606=>457,7607=>376,7608=>325,7609=>365,7610=>375,7611=>330,7612=>393,7613=>330,7614=>353,7615=>372, +7620=>0,7621=>0,7622=>0,7623=>0,7624=>0,7625=>0,7680=>615,7681=>551,7682=>617,7683=>571, +7684=>617,7685=>571,7686=>617,7687=>571,7688=>628,7689=>495,7690=>693,7691=>571,7692=>693,7693=>571, +7694=>693,7695=>571,7696=>693,7697=>571,7698=>693,7699=>571,7700=>568,7701=>554,7702=>568,7703=>554, +7704=>568,7705=>554,7706=>568,7707=>554,7708=>568,7709=>554,7710=>518,7711=>316,7712=>697,7713=>571, +7714=>677,7715=>570,7716=>677,7717=>570,7718=>677,7719=>570,7720=>677,7721=>570,7722=>677,7723=>570, +7724=>265,7725=>250,7726=>265,7727=>250,7728=>590,7729=>521,7730=>590,7731=>521,7732=>590,7733=>521, +7734=>501,7735=>250,7736=>501,7737=>250,7738=>501,7739=>250,7740=>501,7741=>250,7742=>776,7743=>876, +7744=>776,7745=>876,7746=>776,7747=>876,7748=>673,7749=>570,7750=>673,7751=>570,7752=>673,7753=>570, +7754=>673,7755=>570,7756=>708,7757=>550,7758=>708,7759=>550,7760=>708,7761=>550,7762=>708,7763=>550, +7764=>542,7765=>571,7766=>542,7767=>571,7768=>625,7769=>370,7770=>625,7771=>370,7772=>625,7773=>370, +7774=>625,7775=>370,7776=>571,7777=>469,7778=>571,7779=>469,7780=>571,7781=>469,7782=>571,7783=>469, +7784=>571,7785=>469,7786=>549,7787=>353,7788=>549,7789=>353,7790=>549,7791=>353,7792=>549,7793=>353, +7794=>659,7795=>570,7796=>659,7797=>570,7798=>659,7799=>570,7800=>659,7801=>570,7802=>659,7803=>570, +7804=>615,7805=>532,7806=>615,7807=>532,7808=>890,7809=>736,7810=>890,7811=>736,7812=>890,7813=>736, +7814=>890,7815=>736,7816=>890,7817=>736,7818=>616,7819=>532,7820=>616,7821=>532,7822=>549,7823=>532, +7824=>616,7825=>472,7826=>616,7827=>472,7828=>616,7829=>472,7830=>570,7831=>353,7832=>736,7833=>532, +7834=>551,7835=>316,7836=>316,7837=>316,7838=>691,7839=>550,7840=>615,7841=>551,7842=>615,7843=>551, +7844=>615,7845=>551,7846=>615,7847=>551,7848=>615,7849=>551,7850=>615,7851=>551,7852=>615,7853=>551, +7854=>615,7855=>551,7856=>615,7857=>551,7858=>615,7859=>551,7860=>615,7861=>551,7862=>615,7863=>551, +7864=>568,7865=>554,7866=>568,7867=>554,7868=>568,7869=>554,7870=>568,7871=>554,7872=>568,7873=>554, +7874=>568,7875=>554,7876=>568,7877=>554,7878=>568,7879=>554,7880=>265,7881=>250,7882=>265,7883=>250, +7884=>708,7885=>550,7886=>708,7887=>550,7888=>708,7889=>550,7890=>708,7891=>550,7892=>708,7893=>550, +7894=>708,7895=>550,7896=>708,7897=>550,7898=>822,7899=>550,7900=>822,7901=>550,7902=>822,7903=>550, +7904=>822,7905=>550,7906=>822,7907=>550,7908=>659,7909=>570,7910=>659,7911=>570,7912=>754,7913=>570, +7914=>754,7915=>570,7916=>754,7917=>570,7918=>754,7919=>570,7920=>754,7921=>570,7922=>549,7923=>532, +7924=>549,7925=>532,7926=>549,7927=>532,7928=>549,7929=>532,7930=>692,7931=>429,7936=>593,7937=>593, +7938=>593,7939=>593,7940=>593,7941=>593,7942=>593,7943=>593,7944=>615,7945=>615,7946=>790,7947=>790, +7948=>692,7949=>721,7950=>637,7951=>668,7952=>486,7953=>486,7954=>486,7955=>486,7956=>486,7957=>486, +7960=>640,7961=>640,7962=>869,7963=>877,7964=>809,7965=>835,7968=>570,7969=>570,7970=>570,7971=>570, +7972=>570,7973=>570,7974=>570,7975=>570,7976=>753,7977=>751,7978=>977,7979=>980,7980=>924,7981=>945, +7982=>840,7983=>852,7984=>304,7985=>304,7986=>304,7987=>304,7988=>304,7989=>304,7990=>304,7991=>304, +7992=>342,7993=>336,7994=>571,7995=>571,7996=>513,7997=>540,7998=>440,7999=>443,8000=>550,8001=>550, +8002=>550,8003=>550,8004=>550,8005=>550,8008=>724,8009=>763,8010=>985,8011=>989,8012=>844,8013=>873, +8016=>521,8017=>521,8018=>521,8019=>521,8020=>521,8021=>521,8022=>521,8023=>521,8025=>705,8027=>897, +8029=>911,8031=>808,8032=>753,8033=>753,8034=>753,8035=>753,8036=>753,8037=>753,8038=>753,8039=>753, +8040=>722,8041=>759,8042=>980,8043=>985,8044=>851,8045=>875,8046=>829,8047=>857,8048=>593,8049=>593, +8050=>486,8051=>493,8052=>570,8053=>589,8054=>304,8055=>304,8056=>550,8057=>550,8058=>521,8059=>521, +8060=>753,8061=>753,8064=>593,8065=>593,8066=>593,8067=>593,8068=>593,8069=>593,8070=>593,8071=>593, +8072=>615,8073=>615,8074=>790,8075=>790,8076=>692,8077=>721,8078=>637,8079=>668,8080=>570,8081=>570, +8082=>570,8083=>570,8084=>570,8085=>570,8086=>570,8087=>570,8088=>753,8089=>751,8090=>977,8091=>980, +8092=>924,8093=>945,8094=>840,8095=>852,8096=>753,8097=>753,8098=>753,8099=>753,8100=>753,8101=>753, +8102=>753,8103=>753,8104=>722,8105=>759,8106=>980,8107=>985,8108=>851,8109=>875,8110=>829,8111=>857, +8112=>593,8113=>593,8114=>593,8115=>593,8116=>593,8118=>593,8119=>593,8120=>615,8121=>615,8122=>645, +8123=>623,8124=>615,8125=>450,8126=>450,8127=>450,8128=>450,8129=>450,8130=>570,8131=>570,8132=>589, +8134=>570,8135=>570,8136=>724,8137=>671,8138=>837,8139=>784,8140=>677,8141=>450,8142=>450,8143=>450, +8144=>304,8145=>304,8146=>304,8147=>304,8150=>304,8151=>304,8152=>265,8153=>265,8154=>427,8155=>367, +8157=>450,8158=>450,8159=>450,8160=>521,8161=>521,8162=>521,8163=>521,8164=>571,8165=>571,8166=>521, +8167=>521,8168=>549,8169=>549,8170=>760,8171=>742,8172=>616,8173=>450,8174=>450,8175=>450,8178=>753, +8179=>753,8180=>753,8182=>753,8183=>753,8184=>847,8185=>731,8186=>830,8187=>743,8188=>688,8189=>450, +8190=>450,8192=>450,8193=>900,8194=>450,8195=>900,8196=>296,8197=>225,8198=>150,8199=>572,8200=>286, +8201=>180,8202=>89,8203=>0,8204=>0,8205=>0,8206=>0,8207=>0,8208=>325,8209=>325,8210=>572, +8213=>900,8214=>450,8215=>450,8219=>286,8223=>466,8227=>531,8228=>299,8229=>600,8231=>286,8232=>0, +8233=>0,8234=>0,8235=>0,8236=>0,8237=>0,8238=>0,8239=>180,8241=>1521,8242=>204,8243=>336, +8244=>468,8245=>204,8246=>336,8247=>468,8248=>305,8251=>754,8252=>437,8253=>478,8254=>450,8255=>723, +8256=>723,8257=>225,8258=>900,8259=>450,8260=>150,8261=>351,8262=>351,8263=>830,8264=>659,8265=>659, +8266=>447,8267=>572,8268=>450,8269=>450,8270=>450,8271=>303,8272=>723,8273=>450,8274=>404,8275=>900, +8276=>723,8277=>754,8278=>527,8279=>597,8280=>754,8281=>754,8282=>286,8283=>717,8284=>754,8285=>286, +8286=>286,8287=>200,8288=>0,8289=>0,8290=>0,8291=>0,8292=>0,8298=>0,8299=>0,8300=>0, +8301=>0,8302=>0,8303=>0,8304=>360,8305=>161,8308=>360,8309=>360,8310=>360,8311=>360,8312=>360, +8313=>360,8314=>475,8315=>475,8316=>475,8317=>221,8318=>221,8319=>359,8320=>360,8321=>360,8322=>360, +8323=>360,8324=>360,8325=>360,8326=>360,8327=>360,8328=>360,8329=>360,8330=>475,8331=>475,8332=>475, +8333=>221,8334=>221,8336=>352,8337=>375,8338=>372,8339=>399,8340=>375,8352=>789,8353=>572,8354=>572, +8355=>572,8356=>572,8357=>876,8358=>673,8359=>1143,8360=>966,8361=>890,8362=>754,8363=>572,8365=>572, +8366=>572,8367=>1145,8368=>572,8369=>572,8370=>572,8371=>572,8372=>696,8373=>572,8376=>572,8377=>572, +8400=>0,8401=>0,8406=>0,8407=>0,8411=>0,8412=>0,8417=>0,8448=>873,8449=>873,8450=>628, +8451=>1011,8452=>807,8453=>872,8454=>929,8455=>553,8456=>628,8457=>856,8459=>889,8460=>679,8461=>765, +8462=>570,8463=>570,8464=>422,8465=>627,8466=>648,8467=>372,8468=>736,8469=>721,8470=>936,8471=>900, +8472=>627,8473=>631,8474=>708,8475=>718,8476=>732,8477=>712,8478=>807,8479=>615,8480=>917,8481=>912, +8483=>615,8484=>670,8485=>520,8486=>688,8487=>688,8488=>554,8489=>304,8490=>590,8491=>615,8492=>708, +8493=>633,8494=>769,8495=>532,8496=>545,8497=>708,8498=>518,8499=>962,8500=>416,8501=>670,8502=>606, +8503=>419,8504=>580,8505=>342,8506=>833,8507=>1041,8508=>632,8509=>655,8510=>589,8511=>764,8512=>729, +8513=>697,8514=>501,8515=>501,8516=>549,8517=>737,8518=>637,8519=>554,8520=>316,8521=>316,8523=>702, +8526=>474,8528=>872,8529=>872,8530=>1233,8531=>872,8532=>872,8533=>872,8534=>872,8535=>872,8536=>872, +8537=>872,8538=>872,8539=>872,8540=>872,8541=>872,8542=>872,8543=>511,8544=>265,8545=>443,8546=>620, +8547=>831,8548=>615,8549=>830,8550=>1007,8551=>1185,8552=>826,8553=>616,8554=>839,8555=>1018,8556=>501, +8557=>628,8558=>693,8559=>776,8560=>250,8561=>412,8562=>573,8563=>730,8564=>532,8565=>729,8566=>892, +8567=>1053,8568=>737,8569=>532,8570=>740,8571=>901,8572=>250,8573=>495,8574=>571,8575=>876,8576=>1121, +8577=>693,8578=>1121,8579=>633,8580=>494,8581=>628,8585=>872,8592=>754,8593=>754,8594=>754,8595=>754, +8596=>754,8597=>754,8598=>754,8599=>754,8600=>754,8601=>754,8602=>754,8603=>754,8604=>754,8605=>754, +8606=>754,8607=>754,8608=>754,8609=>754,8610=>754,8611=>754,8612=>754,8613=>754,8614=>754,8615=>754, +8616=>754,8617=>754,8618=>754,8619=>754,8620=>754,8621=>754,8622=>754,8623=>754,8624=>754,8625=>754, +8626=>754,8627=>754,8628=>754,8629=>754,8630=>754,8631=>754,8632=>754,8633=>754,8634=>754,8635=>754, +8636=>754,8637=>754,8638=>754,8639=>754,8640=>754,8641=>754,8642=>754,8643=>754,8644=>754,8645=>754, +8646=>754,8647=>754,8648=>754,8649=>754,8650=>754,8651=>754,8652=>754,8653=>754,8654=>754,8655=>754, +8656=>754,8657=>754,8658=>754,8659=>754,8660=>754,8661=>754,8662=>754,8663=>754,8664=>754,8665=>754, +8666=>754,8667=>754,8668=>754,8669=>754,8670=>754,8671=>754,8672=>754,8673=>754,8674=>754,8675=>754, +8676=>754,8677=>754,8678=>754,8679=>754,8680=>754,8681=>754,8682=>754,8683=>754,8684=>754,8685=>754, +8686=>754,8687=>754,8688=>754,8689=>754,8690=>754,8691=>754,8692=>754,8693=>754,8694=>754,8695=>754, +8696=>754,8697=>754,8698=>754,8699=>754,8700=>754,8701=>754,8702=>754,8703=>754,8704=>615,8705=>572, +8706=>465,8707=>568,8708=>568,8709=>784,8710=>602,8711=>602,8712=>784,8713=>784,8714=>646,8715=>784, +8716=>784,8717=>646,8718=>572,8719=>681,8720=>681,8721=>606,8722=>754,8723=>754,8724=>754,8725=>303, +8726=>573,8727=>754,8728=>563,8729=>563,8730=>573,8731=>573,8732=>573,8733=>643,8734=>750,8735=>754, +8736=>807,8737=>807,8738=>754,8739=>450,8740=>450,8741=>450,8742=>450,8743=>659,8744=>659,8745=>659, +8746=>659,8747=>469,8748=>710,8749=>951,8750=>469,8751=>710,8752=>951,8753=>469,8754=>469,8755=>469, +8756=>572,8757=>572,8758=>234,8759=>572,8760=>754,8761=>754,8762=>754,8763=>754,8764=>754,8765=>754, +8766=>754,8767=>754,8768=>337,8769=>754,8770=>754,8771=>754,8772=>754,8773=>754,8774=>754,8775=>754, +8776=>754,8777=>754,8778=>754,8779=>754,8780=>754,8781=>754,8782=>754,8783=>754,8784=>754,8785=>754, +8786=>754,8787=>754,8788=>900,8789=>900,8790=>754,8791=>754,8792=>754,8793=>754,8794=>754,8795=>754, +8796=>754,8797=>754,8798=>754,8799=>754,8800=>754,8801=>754,8802=>754,8803=>754,8804=>754,8805=>754, +8806=>754,8807=>754,8808=>754,8809=>754,8810=>942,8811=>942,8812=>417,8813=>754,8814=>754,8815=>754, +8816=>754,8817=>754,8818=>754,8819=>754,8820=>754,8821=>754,8822=>754,8823=>754,8824=>754,8825=>754, +8826=>754,8827=>754,8828=>754,8829=>754,8830=>754,8831=>754,8832=>754,8833=>754,8834=>754,8835=>754, +8836=>754,8837=>754,8838=>754,8839=>754,8840=>754,8841=>754,8842=>754,8843=>754,8844=>659,8845=>659, +8846=>659,8847=>754,8848=>754,8849=>754,8850=>754,8851=>702,8852=>702,8853=>754,8854=>754,8855=>754, +8856=>754,8857=>754,8858=>754,8859=>754,8860=>754,8861=>754,8862=>754,8863=>754,8864=>754,8865=>754, +8866=>784,8867=>784,8868=>784,8869=>784,8870=>468,8871=>468,8872=>784,8873=>784,8874=>784,8875=>784, +8876=>784,8877=>784,8878=>784,8879=>784,8880=>754,8881=>754,8882=>754,8883=>754,8884=>754,8885=>754, +8886=>900,8887=>900,8888=>754,8889=>754,8890=>468,8891=>659,8892=>659,8893=>659,8894=>754,8895=>754, +8896=>738,8897=>738,8898=>738,8899=>738,8900=>444,8901=>286,8902=>563,8903=>754,8904=>900,8905=>900, +8906=>900,8907=>900,8908=>900,8909=>754,8910=>659,8911=>659,8912=>754,8913=>754,8914=>754,8915=>754, +8916=>754,8917=>754,8918=>754,8919=>754,8920=>1280,8921=>1280,8922=>754,8923=>754,8924=>754,8925=>754, +8926=>754,8927=>754,8928=>754,8929=>754,8930=>754,8931=>754,8932=>754,8933=>754,8934=>754,8935=>754, +8936=>754,8937=>754,8938=>754,8939=>754,8940=>754,8941=>754,8942=>900,8943=>900,8944=>900,8945=>900, +8946=>900,8947=>784,8948=>646,8949=>784,8950=>784,8951=>646,8952=>784,8953=>784,8954=>900,8955=>784, +8956=>646,8957=>784,8958=>646,8959=>784,8960=>542,8961=>542,8962=>571,8963=>754,8964=>754,8965=>754, +8966=>754,8967=>439,8968=>351,8969=>351,8970=>351,8971=>351,8972=>728,8973=>728,8974=>728,8975=>728, +8976=>754,8977=>461,8984=>900,8985=>754,8988=>422,8989=>422,8990=>422,8991=>422,8992=>469,8993=>469, +8996=>1037,8997=>1037,8998=>1272,8999=>1037,9000=>1299,9003=>1272,9004=>786,9075=>304,9076=>571,9077=>753, +9082=>593,9085=>681,9095=>1037,9108=>786,9115=>450,9116=>450,9117=>450,9118=>450,9119=>450,9120=>450, +9121=>450,9122=>450,9123=>450,9124=>450,9125=>450,9126=>450,9127=>675,9128=>675,9129=>675,9130=>675, +9131=>675,9132=>675,9133=>675,9134=>469,9166=>754,9167=>850,9187=>786,9189=>692,9192=>572,9250=>571, +9251=>571,9312=>807,9313=>807,9314=>807,9315=>807,9316=>807,9317=>807,9318=>807,9319=>807,9320=>807, +9321=>807,9472=>542,9473=>542,9474=>542,9475=>542,9476=>542,9477=>542,9478=>542,9479=>542,9480=>542, +9481=>542,9482=>542,9483=>542,9484=>542,9485=>542,9486=>542,9487=>542,9488=>542,9489=>542,9490=>542, +9491=>542,9492=>542,9493=>542,9494=>542,9495=>542,9496=>542,9497=>542,9498=>542,9499=>542,9500=>542, +9501=>542,9502=>542,9503=>542,9504=>542,9505=>542,9506=>542,9507=>542,9508=>542,9509=>542,9510=>542, +9511=>542,9512=>542,9513=>542,9514=>542,9515=>542,9516=>542,9517=>542,9518=>542,9519=>542,9520=>542, +9521=>542,9522=>542,9523=>542,9524=>542,9525=>542,9526=>542,9527=>542,9528=>542,9529=>542,9530=>542, +9531=>542,9532=>542,9533=>542,9534=>542,9535=>542,9536=>542,9537=>542,9538=>542,9539=>542,9540=>542, +9541=>542,9542=>542,9543=>542,9544=>542,9545=>542,9546=>542,9547=>542,9548=>542,9549=>542,9550=>542, +9551=>542,9552=>542,9553=>542,9554=>542,9555=>542,9556=>542,9557=>542,9558=>542,9559=>542,9560=>542, +9561=>542,9562=>542,9563=>542,9564=>542,9565=>542,9566=>542,9567=>542,9568=>542,9569=>542,9570=>542, +9571=>542,9572=>542,9573=>542,9574=>542,9575=>542,9576=>542,9577=>542,9578=>542,9579=>542,9580=>542, +9581=>542,9582=>542,9583=>542,9584=>542,9585=>542,9586=>542,9587=>542,9588=>542,9589=>542,9590=>542, +9591=>542,9592=>542,9593=>542,9594=>542,9595=>542,9596=>542,9597=>542,9598=>542,9599=>542,9600=>692, +9601=>692,9602=>692,9603=>692,9604=>692,9605=>692,9606=>692,9607=>692,9608=>692,9609=>692,9610=>692, +9611=>692,9612=>692,9613=>692,9614=>692,9615=>692,9616=>692,9617=>692,9618=>692,9619=>692,9620=>692, +9621=>692,9622=>692,9623=>692,9624=>692,9625=>692,9626=>692,9627=>692,9628=>692,9629=>692,9630=>692, +9631=>692,9632=>850,9633=>850,9634=>850,9635=>850,9636=>850,9637=>850,9638=>850,9639=>850,9640=>850, +9641=>850,9642=>610,9643=>610,9644=>850,9645=>850,9646=>495,9647=>495,9648=>692,9649=>692,9650=>692, +9651=>692,9652=>452,9653=>452,9654=>692,9655=>692,9656=>452,9657=>452,9658=>692,9659=>692,9660=>692, +9661=>692,9662=>452,9663=>452,9664=>692,9665=>692,9666=>452,9667=>452,9668=>692,9669=>692,9670=>692, +9671=>692,9672=>692,9673=>785,9674=>444,9675=>785,9676=>785,9677=>785,9678=>785,9679=>785,9680=>785, +9681=>785,9682=>785,9683=>785,9684=>785,9685=>785,9686=>474,9687=>474,9688=>712,9689=>873,9690=>873, +9691=>873,9692=>348,9693=>348,9694=>348,9695=>348,9696=>692,9697=>692,9698=>692,9699=>692,9700=>692, +9701=>692,9702=>531,9703=>850,9704=>850,9705=>850,9706=>850,9707=>850,9708=>692,9709=>692,9710=>692, +9711=>1007,9712=>850,9713=>850,9714=>850,9715=>850,9716=>785,9717=>785,9718=>785,9719=>785,9720=>692, +9721=>692,9722=>692,9723=>747,9724=>747,9725=>659,9726=>659,9727=>692,9728=>807,9729=>900,9730=>807, +9731=>807,9732=>807,9733=>807,9734=>807,9735=>515,9736=>806,9737=>807,9738=>799,9739=>799,9740=>604, +9741=>911,9742=>1121,9743=>1125,9744=>807,9745=>807,9746=>807,9747=>479,9748=>807,9749=>807,9750=>807, +9751=>807,9752=>807,9753=>807,9754=>807,9755=>807,9756=>807,9757=>548,9758=>807,9759=>548,9760=>807, +9761=>807,9762=>807,9763=>807,9764=>602,9765=>671,9766=>584,9767=>705,9768=>490,9769=>807,9770=>807, +9771=>807,9772=>639,9773=>807,9774=>807,9775=>807,9776=>800,9777=>800,9778=>800,9779=>800,9780=>800, +9781=>800,9782=>800,9783=>800,9784=>807,9785=>807,9786=>807,9787=>807,9788=>807,9789=>807,9790=>807, +9791=>552,9792=>659,9793=>659,9794=>807,9795=>807,9796=>807,9797=>807,9798=>807,9799=>807,9800=>807, +9801=>807,9802=>807,9803=>807,9804=>807,9805=>807,9806=>807,9807=>807,9808=>807,9809=>807,9810=>807, +9811=>807,9812=>807,9813=>807,9814=>807,9815=>807,9816=>807,9817=>807,9818=>807,9819=>807,9820=>807, +9821=>807,9822=>807,9823=>807,9824=>807,9825=>807,9826=>807,9827=>807,9828=>807,9829=>807,9830=>807, +9831=>807,9832=>807,9833=>424,9834=>574,9835=>807,9836=>807,9837=>424,9838=>321,9839=>435,9840=>673, +9841=>689,9842=>807,9843=>807,9844=>807,9845=>807,9846=>807,9847=>807,9848=>807,9849=>807,9850=>807, +9851=>807,9852=>807,9853=>807,9854=>807,9855=>807,9856=>782,9857=>782,9858=>782,9859=>782,9860=>782, +9861=>782,9862=>800,9863=>800,9864=>800,9865=>800,9866=>800,9867=>800,9868=>800,9869=>800,9870=>800, +9871=>800,9872=>675,9873=>675,9874=>800,9875=>734,9876=>644,9877=>483,9878=>766,9879=>800,9880=>615, +9881=>807,9882=>637,9883=>800,9884=>800,9888=>800,9889=>632,9890=>904,9891=>980,9892=>1057,9893=>813, +9894=>754,9895=>754,9896=>754,9897=>754,9898=>754,9899=>754,9900=>754,9901=>754,9902=>754,9903=>754, +9904=>759,9905=>754,9906=>659,9907=>659,9908=>659,9909=>659,9910=>765,9911=>659,9912=>659,9920=>754, +9921=>754,9922=>754,9923=>754,9985=>754,9986=>754,9987=>754,9988=>754,9990=>754,9991=>754,9992=>754, +9993=>754,9996=>754,9997=>754,9998=>754,9999=>754,10000=>754,10001=>754,10002=>754,10003=>754,10004=>754, +10005=>754,10006=>754,10007=>754,10008=>754,10009=>754,10010=>754,10011=>754,10012=>754,10013=>754,10014=>754, +10015=>754,10016=>754,10017=>754,10018=>754,10019=>754,10020=>754,10021=>754,10022=>754,10023=>754,10025=>754, +10026=>754,10027=>754,10028=>754,10029=>754,10030=>754,10031=>754,10032=>754,10033=>754,10034=>754,10035=>754, +10036=>754,10037=>754,10038=>754,10039=>754,10040=>754,10041=>754,10042=>754,10043=>754,10044=>754,10045=>754, +10046=>754,10047=>754,10048=>754,10049=>754,10050=>754,10051=>754,10052=>754,10053=>754,10054=>754,10055=>754, +10056=>754,10057=>754,10058=>754,10059=>754,10061=>807,10063=>807,10064=>807,10065=>807,10066=>807,10070=>807, +10072=>754,10073=>754,10074=>754,10075=>290,10076=>290,10077=>484,10078=>484,10081=>754,10082=>754,10083=>754, +10084=>754,10085=>754,10086=>754,10087=>754,10088=>754,10089=>754,10090=>754,10091=>754,10092=>754,10093=>754, +10094=>754,10095=>754,10096=>754,10097=>754,10098=>754,10099=>754,10100=>754,10101=>754,10102=>807,10103=>807, +10104=>807,10105=>807,10106=>807,10107=>807,10108=>807,10109=>807,10110=>807,10111=>807,10112=>754,10113=>754, +10114=>754,10115=>754,10116=>754,10117=>754,10118=>754,10119=>754,10120=>754,10121=>754,10122=>754,10123=>754, +10124=>754,10125=>754,10126=>754,10127=>754,10128=>754,10129=>754,10130=>754,10131=>754,10132=>754,10136=>754, +10137=>754,10138=>754,10139=>754,10140=>754,10141=>754,10142=>754,10143=>754,10144=>754,10145=>754,10146=>754, +10147=>754,10148=>754,10149=>754,10150=>754,10151=>754,10152=>754,10153=>754,10154=>754,10155=>754,10156=>754, +10157=>754,10158=>754,10159=>754,10161=>754,10162=>754,10163=>754,10164=>754,10165=>754,10166=>754,10167=>754, +10168=>754,10169=>754,10170=>754,10171=>754,10172=>754,10173=>754,10174=>754,10181=>351,10182=>351,10208=>444, +10214=>445,10215=>445,10216=>351,10217=>351,10218=>500,10219=>500,10224=>754,10225=>754,10226=>754,10227=>754, +10228=>1042,10229=>1290,10230=>1290,10231=>1290,10232=>1290,10233=>1290,10234=>1290,10235=>1290,10236=>1290,10237=>1290, +10238=>1290,10239=>1290,10240=>659,10241=>659,10242=>659,10243=>659,10244=>659,10245=>659,10246=>659,10247=>659, +10248=>659,10249=>659,10250=>659,10251=>659,10252=>659,10253=>659,10254=>659,10255=>659,10256=>659,10257=>659, +10258=>659,10259=>659,10260=>659,10261=>659,10262=>659,10263=>659,10264=>659,10265=>659,10266=>659,10267=>659, +10268=>659,10269=>659,10270=>659,10271=>659,10272=>659,10273=>659,10274=>659,10275=>659,10276=>659,10277=>659, +10278=>659,10279=>659,10280=>659,10281=>659,10282=>659,10283=>659,10284=>659,10285=>659,10286=>659,10287=>659, +10288=>659,10289=>659,10290=>659,10291=>659,10292=>659,10293=>659,10294=>659,10295=>659,10296=>659,10297=>659, +10298=>659,10299=>659,10300=>659,10301=>659,10302=>659,10303=>659,10304=>659,10305=>659,10306=>659,10307=>659, +10308=>659,10309=>659,10310=>659,10311=>659,10312=>659,10313=>659,10314=>659,10315=>659,10316=>659,10317=>659, +10318=>659,10319=>659,10320=>659,10321=>659,10322=>659,10323=>659,10324=>659,10325=>659,10326=>659,10327=>659, +10328=>659,10329=>659,10330=>659,10331=>659,10332=>659,10333=>659,10334=>659,10335=>659,10336=>659,10337=>659, +10338=>659,10339=>659,10340=>659,10341=>659,10342=>659,10343=>659,10344=>659,10345=>659,10346=>659,10347=>659, +10348=>659,10349=>659,10350=>659,10351=>659,10352=>659,10353=>659,10354=>659,10355=>659,10356=>659,10357=>659, +10358=>659,10359=>659,10360=>659,10361=>659,10362=>659,10363=>659,10364=>659,10365=>659,10366=>659,10367=>659, +10368=>659,10369=>659,10370=>659,10371=>659,10372=>659,10373=>659,10374=>659,10375=>659,10376=>659,10377=>659, +10378=>659,10379=>659,10380=>659,10381=>659,10382=>659,10383=>659,10384=>659,10385=>659,10386=>659,10387=>659, +10388=>659,10389=>659,10390=>659,10391=>659,10392=>659,10393=>659,10394=>659,10395=>659,10396=>659,10397=>659, +10398=>659,10399=>659,10400=>659,10401=>659,10402=>659,10403=>659,10404=>659,10405=>659,10406=>659,10407=>659, +10408=>659,10409=>659,10410=>659,10411=>659,10412=>659,10413=>659,10414=>659,10415=>659,10416=>659,10417=>659, +10418=>659,10419=>659,10420=>659,10421=>659,10422=>659,10423=>659,10424=>659,10425=>659,10426=>659,10427=>659, +10428=>659,10429=>659,10430=>659,10431=>659,10432=>659,10433=>659,10434=>659,10435=>659,10436=>659,10437=>659, +10438=>659,10439=>659,10440=>659,10441=>659,10442=>659,10443=>659,10444=>659,10445=>659,10446=>659,10447=>659, +10448=>659,10449=>659,10450=>659,10451=>659,10452=>659,10453=>659,10454=>659,10455=>659,10456=>659,10457=>659, +10458=>659,10459=>659,10460=>659,10461=>659,10462=>659,10463=>659,10464=>659,10465=>659,10466=>659,10467=>659, +10468=>659,10469=>659,10470=>659,10471=>659,10472=>659,10473=>659,10474=>659,10475=>659,10476=>659,10477=>659, +10478=>659,10479=>659,10480=>659,10481=>659,10482=>659,10483=>659,10484=>659,10485=>659,10486=>659,10487=>659, +10488=>659,10489=>659,10490=>659,10491=>659,10492=>659,10493=>659,10494=>659,10495=>659,10502=>754,10503=>754, +10506=>754,10507=>754,10560=>615,10561=>615,10627=>660,10628=>660,10702=>754,10703=>900,10704=>900,10705=>900, +10706=>900,10707=>900,10708=>900,10709=>900,10731=>444,10746=>754,10747=>754,10752=>900,10753=>900,10754=>900, +10764=>1192,10765=>469,10766=>469,10767=>469,10768=>469,10769=>469,10770=>469,10771=>469,10772=>469,10773=>469, +10774=>469,10775=>469,10776=>469,10777=>469,10778=>469,10779=>469,10780=>469,10799=>754,10877=>754,10878=>754, +10879=>754,10880=>754,10881=>754,10882=>754,10883=>754,10884=>754,10885=>754,10886=>754,10887=>754,10888=>754, +10889=>754,10890=>754,10891=>754,10892=>754,10893=>754,10894=>754,10895=>754,10896=>754,10897=>754,10898=>754, +10899=>754,10900=>754,10901=>754,10902=>754,10903=>754,10904=>754,10905=>754,10906=>754,10907=>754,10908=>754, +10909=>754,10910=>754,10911=>754,10912=>754,10926=>754,10927=>754,10928=>754,10929=>754,10930=>754,10931=>754, +10932=>754,10933=>754,10934=>754,10935=>754,10936=>754,10937=>754,10938=>754,11001=>754,11002=>754,11008=>754, +11009=>754,11010=>754,11011=>754,11012=>754,11013=>754,11014=>754,11015=>754,11016=>754,11017=>754,11018=>754, +11019=>754,11020=>754,11021=>754,11022=>752,11023=>752,11024=>752,11025=>752,11026=>850,11027=>850,11028=>850, +11029=>850,11030=>692,11031=>692,11032=>692,11033=>692,11034=>850,11039=>782,11040=>782,11041=>786,11042=>786, +11043=>786,11044=>1007,11091=>782,11092=>782,11360=>501,11361=>250,11362=>501,11363=>542,11364=>625,11365=>551, +11366=>353,11367=>677,11368=>570,11369=>590,11370=>521,11371=>616,11372=>472,11373=>703,11374=>776,11375=>615, +11376=>703,11377=>661,11378=>1015,11379=>865,11380=>532,11381=>589,11382=>511,11383=>593,11385=>373,11386=>550, +11387=>441,11388=>157,11389=>387,11390=>571,11391=>616,11800=>478,11810=>351,11811=>351,11812=>351,11813=>351, +11822=>478,19904=>807,19905=>807,19906=>807,19907=>807,19908=>807,19909=>807,19910=>807,19911=>807,19912=>807, +19913=>807,19914=>807,19915=>807,19916=>807,19917=>807,19918=>807,19919=>807,19920=>807,19921=>807,19922=>807, +19923=>807,19924=>807,19925=>807,19926=>807,19927=>807,19928=>807,19929=>807,19930=>807,19931=>807,19932=>807, +19933=>807,19934=>807,19935=>807,19936=>807,19937=>807,19938=>807,19939=>807,19940=>807,19941=>807,19942=>807, +19943=>807,19944=>807,19945=>807,19946=>807,19947=>807,19948=>807,19949=>807,19950=>807,19951=>807,19952=>807, +19953=>807,19954=>807,19955=>807,19956=>807,19957=>807,19958=>807,19959=>807,19960=>807,19961=>807,19962=>807, +19963=>807,19964=>807,19965=>807,19966=>807,19967=>807,42564=>571,42565=>469,42566=>318,42567=>304,42572=>1062, +42573=>925,42576=>926,42577=>815,42580=>971,42581=>757,42582=>886,42583=>762,42594=>922,42595=>833,42596=>912, +42597=>810,42598=>776,42599=>907,42600=>708,42601=>550,42602=>770,42603=>641,42604=>1222,42605=>917,42606=>791, +42634=>725,42635=>649,42636=>549,42637=>524,42644=>617,42645=>570,42760=>444,42761=>444,42762=>444,42763=>444, +42764=>444,42765=>444,42766=>444,42767=>444,42768=>444,42769=>444,42770=>444,42771=>444,42772=>444,42773=>444, +42774=>444,42779=>332,42780=>332,42781=>227,42782=>227,42783=>227,42786=>347,42787=>320,42788=>424,42789=>424, +42790=>677,42791=>570,42792=>790,42793=>638,42794=>553,42795=>486,42800=>441,42801=>469,42802=>1125,42803=>886, +42804=>1097,42805=>900,42806=>1039,42807=>896,42808=>874,42809=>736,42810=>874,42811=>736,42812=>863,42813=>736, +42814=>628,42815=>494,42822=>612,42823=>353,42824=>523,42825=>384,42826=>726,42827=>633,42830=>1222,42831=>917, +42832=>542,42833=>571,42834=>660,42835=>697,42838=>708,42839=>571,42852=>544,42853=>571,42854=>544,42855=>571, +42880=>501,42881=>250,42882=>662,42883=>570,42889=>303,42890=>338,42891=>360,42892=>247,42893=>617,43003=>518, +43004=>542,43005=>776,43006=>265,43007=>1079,61184=>192,61185=>214,61186=>231,61187=>237,61188=>240,61189=>214, +61190=>192,61191=>214,61192=>231,61193=>237,61194=>231,61195=>214,61196=>192,61197=>214,61198=>231,61199=>237, +61200=>231,61201=>214,61202=>192,61203=>214,61204=>240,61205=>237,61206=>231,61207=>214,61208=>192,61209=>247, +63173=>550,64256=>649,64257=>581,64258=>581,64259=>899,64260=>899,64261=>617,64262=>774,64275=>1081,64276=>1081, +64277=>1076,64278=>1067,64279=>1376,64285=>245,64286=>0,64287=>423,64288=>572,64289=>770,64290=>696,64291=>815, +64292=>694,64293=>759,64294=>769,64295=>726,64296=>788,64297=>754,64298=>727,64299=>727,64300=>727,64301=>727, +64302=>566,64303=>566,64304=>566,64305=>547,64306=>403,64307=>534,64308=>576,64309=>245,64310=>336,64311=>900, +64312=>583,64313=>302,64314=>532,64315=>500,64316=>539,64318=>593,64320=>397,64321=>629,64323=>576,64324=>543, +64326=>523,64327=>596,64328=>532,64329=>727,64330=>591,64331=>245,64332=>547,64333=>500,64334=>543,64335=>485, +65024=>0,65025=>0,65026=>0,65027=>0,65028=>0,65029=>0,65030=>0,65031=>0,65032=>0,65033=>0, +65034=>0,65035=>0,65036=>0,65037=>0,65038=>0,65039=>0,65056=>0,65057=>0,65058=>0,65059=>0, +65529=>0,65530=>0,65531=>0,65532=>0,65533=>923); +$enc=''; +$diff=''; +$file='dejavusanscondensedi.z'; +$ctg='dejavusanscondensedi.ctg.z'; +$originalsize=539024; +// --- EOF --- --- /dev/null +++ b/tcpdf/fonts/dejavusansextralight.php @@ -1,1 +1,197 @@ - +928,'Descent'=>-236,'CapHeight'=>59,'Flags'=>32,'FontBBox'=>'[-733 -269 1659 1104]','ItalicAngle'=>0,'StemV'=>70,'MissingWidth'=>600); +$up=-63; +$ut=44; +$dw=600; +$cw=array( +0=>600,32=>318,33=>401,34=>460,35=>838,36=>636,37=>950,38=>780,39=>275,40=>390, +41=>390,42=>500,43=>838,44=>318,45=>361,46=>318,47=>337,48=>636,49=>636,50=>636, +51=>636,52=>636,53=>636,54=>636,55=>636,56=>636,57=>636,58=>337,59=>337,60=>838, +61=>838,62=>838,63=>531,64=>1000,65=>684,66=>655,67=>698,68=>770,69=>632,70=>575, +71=>775,72=>752,73=>295,74=>295,75=>656,76=>557,77=>863,78=>748,79=>787,80=>603, +81=>787,82=>695,83=>635,84=>611,85=>732,86=>684,87=>989,88=>685,89=>611,90=>685, +91=>390,92=>337,93=>390,94=>838,95=>500,96=>500,97=>613,98=>635,99=>550,100=>635, +101=>615,102=>352,103=>600,104=>634,105=>278,106=>278,107=>579,108=>278,109=>974,110=>634, +111=>612,112=>635,113=>635,114=>411,115=>521,116=>392,117=>634,118=>592,119=>818,120=>592, +121=>592,122=>525,123=>636,124=>337,125=>636,126=>838,8364=>636,8218=>318,402=>352,8222=>518, +8230=>1000,8224=>500,8225=>500,710=>500,8240=>1342,352=>635,8249=>400,338=>1070,381=>685,8216=>318, +8217=>318,8220=>518,8221=>518,8211=>500,8212=>1000,732=>500,353=>521,8250=>400,339=>1023,382=>525, +376=>611,160=>318,161=>401,162=>636,163=>636,164=>636,165=>636,166=>337,167=>500,168=>500, +169=>1000,170=>471,171=>612,172=>838,173=>361,174=>1000,175=>500,176=>500,177=>838,178=>401, +179=>401,180=>483,181=>636,182=>636,183=>318,184=>500,185=>401,186=>471,187=>612,188=>969, +189=>969,190=>969,191=>536,192=>684,193=>684,194=>684,195=>684,196=>684,197=>684,198=>974, +199=>698,200=>632,201=>632,202=>632,203=>632,204=>295,205=>295,206=>295,207=>295,208=>775, +209=>748,210=>787,211=>787,212=>787,213=>787,214=>787,215=>838,216=>787,217=>732,218=>732, +219=>732,220=>732,221=>611,222=>605,223=>676,224=>613,225=>613,226=>613,227=>613,228=>613, +229=>613,230=>982,231=>550,232=>615,233=>615,234=>615,235=>615,236=>278,237=>278,238=>278, +239=>278,240=>612,241=>634,242=>612,243=>612,244=>612,245=>612,246=>612,247=>838,248=>612, +249=>634,250=>634,251=>634,252=>634,253=>592,254=>635,255=>592,256=>684,257=>613,258=>684, +259=>613,260=>684,261=>613,262=>698,263=>550,264=>698,265=>550,266=>698,267=>550,268=>698, +269=>550,270=>770,271=>635,272=>775,273=>635,274=>632,275=>615,276=>632,277=>615,278=>632, +279=>615,280=>632,281=>615,282=>632,283=>615,284=>775,285=>600,286=>775,287=>600,288=>775, +289=>600,290=>775,291=>600,292=>752,293=>634,294=>916,295=>695,296=>295,297=>278,298=>295, +299=>278,300=>295,301=>278,302=>295,303=>278,304=>295,305=>278,306=>590,307=>556,308=>295, +309=>278,310=>656,311=>579,312=>579,313=>557,314=>278,315=>557,316=>278,317=>557,318=>375, +319=>557,320=>342,321=>562,322=>284,323=>748,324=>634,325=>748,326=>634,327=>748,328=>634, +329=>813,330=>757,331=>634,332=>787,333=>612,334=>787,335=>612,336=>787,337=>612,340=>695, +341=>411,342=>695,343=>411,344=>695,345=>411,346=>635,347=>521,348=>635,349=>521,350=>635, +351=>521,354=>611,355=>392,356=>611,357=>392,358=>611,359=>392,360=>732,361=>634,362=>732, +363=>634,364=>732,365=>634,366=>732,367=>634,368=>732,369=>634,370=>732,371=>634,372=>989, +373=>818,374=>611,375=>592,377=>685,378=>525,379=>685,380=>525,383=>352,384=>635,385=>735, +386=>686,387=>635,390=>698,391=>698,392=>550,393=>775,394=>824,395=>686,396=>635,397=>612, +398=>632,399=>787,400=>585,401=>575,403=>775,404=>685,405=>965,406=>354,407=>295,408=>690, +409=>526,410=>278,412=>974,413=>748,414=>634,415=>787,416=>934,417=>757,418=>949,419=>759, +420=>652,421=>635,422=>695,423=>635,424=>521,425=>632,427=>392,428=>611,429=>392,430=>611, +431=>879,432=>779,433=>764,434=>721,435=>696,436=>805,437=>685,438=>525,448=>295,449=>492, +450=>459,451=>295,452=>1422,453=>1299,454=>1154,455=>835,456=>787,457=>457,458=>931,459=>924, +460=>797,461=>684,462=>613,463=>295,464=>278,465=>787,466=>612,467=>732,468=>634,469=>732, +470=>634,471=>732,472=>634,473=>732,474=>634,475=>732,476=>634,477=>615,478=>684,479=>613, +480=>684,481=>613,482=>974,483=>982,484=>775,485=>600,486=>775,487=>600,488=>656,489=>579, +490=>787,491=>612,492=>787,493=>612,496=>278,497=>1422,498=>1299,499=>1154,500=>775,501=>600, +504=>748,505=>634,506=>684,507=>613,508=>974,509=>982,510=>787,511=>612,512=>684,513=>613, +514=>684,515=>613,516=>632,517=>615,518=>632,519=>615,520=>295,521=>278,522=>295,523=>278, +524=>787,525=>612,526=>787,527=>612,528=>695,529=>411,530=>695,531=>411,532=>732,533=>634, +534=>732,535=>634,536=>635,537=>521,538=>611,539=>392,542=>752,543=>634,548=>685,549=>525, +550=>684,551=>613,552=>632,553=>615,554=>787,555=>612,556=>787,557=>612,558=>787,559=>612, +560=>787,561=>612,562=>611,563=>592,567=>278,568=>1032,569=>1032,581=>684,584=>295,585=>278, +587=>635,588=>695,589=>411,592=>614,593=>635,594=>635,595=>635,596=>550,598=>635,599=>727, +600=>615,601=>615,603=>541,604=>541,607=>326,608=>637,609=>635,611=>685,613=>634,614=>634, +615=>634,616=>278,617=>387,618=>372,621=>387,623=>974,624=>974,625=>974,626=>634,627=>634, +628=>634,629=>612,632=>660,633=>411,634=>411,635=>411,636=>411,637=>411,638=>530,639=>530, +640=>602,641=>602,642=>521,643=>336,645=>461,647=>392,648=>392,649=>634,650=>618,651=>598, +652=>592,653=>818,654=>592,656=>525,665=>580,668=>654,670=>667,671=>583,672=>712,675=>1014, +678=>824,679=>610,681=>848,682=>641,683=>654,686=>661,687=>664,699=>318,700=>318,702=>307, +711=>500,713=>500,714=>483,715=>500,717=>500,718=>500,719=>483,728=>500,729=>500,730=>500, +731=>500,733=>500,741=>493,742=>493,743=>493,744=>493,745=>493,755=>500,759=>500,768=>0, +769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0, +779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0, +789=>0,790=>0,791=>0,795=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0, +812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0, +822=>0,823=>0,824=>0,831=>0,847=>0,856=>0,860=>0,861=>0,865=>0,880=>654, +881=>568,882=>862,883=>647,884=>278,885=>278,886=>748,887=>650,890=>361,891=>549,892=>550, +893=>549,894=>337,900=>483,901=>500,902=>692,903=>318,904=>746,905=>871,906=>408,908=>813, +910=>825,911=>826,912=>387,913=>684,914=>655,915=>557,916=>684,917=>632,918=>685,919=>752, +920=>787,921=>295,922=>656,923=>684,924=>863,925=>748,926=>632,927=>787,928=>752,929=>603, +931=>632,932=>611,933=>611,934=>860,935=>685,936=>787,937=>764,938=>295,939=>611,940=>659, +941=>541,942=>634,943=>387,944=>579,945=>659,946=>638,947=>592,948=>612,949=>541,950=>544, +951=>634,952=>612,953=>387,954=>594,955=>592,956=>636,957=>559,958=>558,959=>612,960=>602, +961=>635,962=>587,963=>634,964=>602,965=>579,966=>660,967=>592,968=>660,969=>837,970=>387, +971=>579,972=>612,973=>579,974=>837,975=>656,981=>660,982=>837,984=>787,985=>612,988=>575, +1009=>635,1010=>550,1011=>278,1012=>787,1013=>615,1014=>615,1015=>605,1016=>635,1017=>698,1020=>635, +1021=>698,1022=>698,1023=>698,1024=>632,1025=>632,1026=>786,1027=>557,1028=>698,1029=>635,1030=>295, +1031=>295,1032=>295,1033=>1094,1034=>1045,1035=>786,1036=>674,1037=>755,1038=>609,1039=>752,1040=>684, +1041=>686,1042=>655,1043=>557,1044=>776,1045=>632,1046=>1040,1047=>636,1048=>755,1049=>755,1050=>674, +1051=>752,1052=>863,1053=>752,1054=>787,1055=>752,1056=>603,1057=>698,1058=>611,1059=>609,1060=>860, +1061=>685,1062=>776,1063=>686,1064=>1068,1065=>1094,1066=>833,1067=>882,1068=>686,1069=>698,1070=>1031, +1071=>695,1072=>613,1073=>612,1074=>586,1075=>491,1076=>677,1077=>615,1078=>908,1079=>541,1080=>659, +1081=>659,1082=>594,1083=>639,1084=>754,1085=>654,1086=>612,1087=>654,1088=>635,1089=>550,1090=>549, +1091=>592,1092=>854,1093=>592,1094=>681,1095=>591,1096=>917,1097=>938,1098=>727,1099=>765,1100=>589, +1101=>549,1102=>813,1103=>592,1104=>615,1105=>615,1106=>625,1107=>491,1108=>549,1109=>521,1110=>278, +1111=>278,1112=>278,1113=>898,1114=>892,1115=>652,1116=>594,1117=>659,1118=>592,1119=>662,1121=>837, +1122=>769,1123=>667,1124=>942,1125=>749,1136=>787,1137=>660,1138=>787,1168=>557,1169=>491,1176=>636, +1177=>541,1184=>856,1185=>832,1188=>1014,1189=>868,1194=>698,1195=>550,1198=>611,1199=>592,1204=>934, +1205=>809,1210=>686,1211=>634,1216=>278,1217=>1040,1218=>908,1223=>752,1224=>654,1232=>684,1233=>613, +1234=>684,1235=>613,1236=>974,1237=>982,1238=>632,1239=>615,1240=>787,1241=>615,1242=>787,1243=>615, +1244=>1040,1245=>908,1246=>636,1247=>541,1250=>755,1251=>659,1252=>755,1253=>659,1254=>787,1255=>612, +1256=>787,1257=>612,1258=>787,1259=>612,1260=>698,1261=>549,1262=>609,1263=>592,1264=>609,1265=>592, +1266=>609,1267=>592,1268=>686,1269=>591,1272=>882,1273=>765,1278=>685,1279=>592,1280=>686,1281=>589, +1296=>585,1297=>541,1298=>752,1299=>639,1300=>1169,1301=>994,1306=>787,1307=>635,1308=>989,1309=>818, +1352=>732,1357=>732,1359=>635,1360=>732,1363=>860,1365=>787,1370=>318,1373=>392,1377=>974,1378=>634, +1379=>762,1380=>767,1381=>634,1382=>697,1384=>634,1387=>634,1388=>404,1389=>894,1391=>634,1392=>634, +1394=>702,1397=>278,1400=>634,1402=>974,1404=>769,1405=>634,1406=>696,1407=>1002,1408=>634,1409=>600, +1410=>501,1411=>1002,1413=>612,1415=>763,1417=>337,1652=>292,4304=>469,4305=>469,4306=>519,4307=>741, +4308=>479,4309=>478,4310=>468,4311=>749,4312=>469,4313=>479,4314=>1058,4315=>479,4316=>479,4317=>744, +4318=>469,4319=>479,4320=>753,4321=>479,4322=>578,4323=>468,4324=>729,4325=>478,4326=>743,4327=>479, +4328=>479,4329=>479,4330=>532,4331=>479,4332=>478,4333=>469,4334=>479,4335=>469,4336=>468,4337=>506, +4338=>469,4339=>469,4340=>469,4341=>524,4342=>755,4343=>517,4344=>469,4345=>519,4346=>524,4347=>416, +4348=>304,5760=>477,5761=>493,5762=>712,5763=>931,5764=>1150,5765=>1370,5766=>493,5767=>712,5768=>931, +5769=>1150,5770=>1370,5771=>498,5772=>718,5773=>938,5774=>1159,5775=>1379,5776=>493,5777=>712,5778=>930, +5779=>1149,5780=>1370,5781=>498,5782=>752,5783=>789,5784=>1205,5785=>1150,5786=>683,5787=>507,5788=>507, +7426=>982,7428=>550,7433=>278,7435=>604,7437=>754,7438=>650,7439=>612,7440=>550,7441=>684,7442=>684, +7443=>684,7444=>1023,7446=>612,7447=>612,7449=>592,7450=>592,7456=>592,7457=>818,7458=>525,7462=>525, +7463=>592,7464=>654,7467=>639,7543=>635,7680=>684,7681=>613,7682=>655,7683=>635,7684=>655,7685=>635, +7686=>655,7687=>635,7688=>698,7689=>550,7690=>770,7691=>635,7692=>770,7693=>635,7694=>770,7695=>635, +7696=>770,7697=>635,7698=>770,7699=>635,7700=>632,7701=>615,7702=>632,7703=>615,7704=>632,7705=>615, +7706=>632,7707=>615,7708=>632,7709=>615,7710=>575,7711=>352,7712=>775,7713=>600,7714=>752,7715=>634, +7716=>752,7717=>634,7718=>752,7719=>634,7720=>752,7721=>634,7722=>752,7723=>634,7724=>295,7725=>278, +7726=>295,7727=>278,7728=>656,7729=>579,7730=>656,7731=>579,7732=>656,7733=>579,7734=>557,7735=>288, +7736=>557,7737=>288,7738=>557,7739=>278,7740=>557,7741=>278,7742=>863,7743=>974,7744=>863,7745=>974, +7746=>863,7747=>974,7748=>748,7749=>634,7750=>748,7751=>634,7752=>748,7753=>634,7754=>748,7755=>634, +7756=>787,7757=>612,7758=>787,7759=>612,7760=>787,7761=>612,7762=>787,7763=>612,7764=>603,7765=>635, +7766=>603,7767=>635,7768=>695,7769=>411,7770=>695,7771=>411,7772=>695,7773=>411,7774=>695,7775=>411, +7776=>635,7777=>521,7778=>635,7779=>521,7780=>635,7781=>521,7782=>635,7783=>521,7784=>635,7785=>521, +7786=>611,7787=>392,7788=>611,7789=>392,7790=>611,7791=>392,7792=>611,7793=>392,7794=>732,7795=>634, +7796=>732,7797=>634,7798=>732,7799=>634,7800=>732,7801=>634,7802=>732,7803=>634,7804=>684,7805=>592, +7806=>684,7807=>592,7808=>989,7809=>818,7810=>989,7811=>818,7812=>989,7813=>818,7814=>989,7815=>818, +7816=>989,7817=>818,7818=>685,7819=>592,7820=>685,7821=>592,7822=>611,7823=>592,7824=>685,7825=>525, +7826=>685,7827=>525,7828=>685,7829=>525,7830=>634,7831=>392,7832=>818,7833=>592,7834=>613,7835=>352, +7836=>352,7837=>352,7838=>769,7839=>612,7840=>684,7841=>613,7842=>684,7843=>613,7844=>684,7845=>613, +7846=>684,7847=>613,7848=>684,7849=>613,7850=>684,7851=>613,7852=>684,7853=>613,7854=>684,7855=>613, +7856=>684,7857=>613,7858=>684,7859=>613,7860=>684,7861=>613,7862=>684,7863=>613,7864=>632,7865=>615, +7866=>632,7867=>615,7868=>632,7869=>615,7870=>632,7871=>615,7872=>632,7873=>615,7874=>632,7875=>615, +7876=>632,7877=>615,7878=>632,7879=>615,7880=>295,7881=>278,7882=>295,7883=>278,7884=>787,7885=>612, +7886=>787,7887=>612,7888=>787,7889=>612,7890=>787,7891=>612,7892=>787,7893=>612,7894=>787,7895=>612, +7896=>787,7897=>612,7898=>934,7899=>757,7900=>934,7901=>757,7902=>934,7903=>757,7904=>934,7905=>757, +7906=>934,7907=>757,7908=>732,7909=>634,7910=>732,7911=>634,7912=>879,7913=>779,7914=>879,7915=>779, +7916=>879,7917=>779,7918=>879,7919=>779,7920=>879,7921=>779,7922=>611,7923=>592,7924=>611,7925=>592, +7926=>611,7927=>592,7928=>611,7929=>592,7930=>769,7931=>477,7936=>659,7937=>659,7938=>659,7939=>659, +7940=>659,7941=>659,7942=>659,7943=>659,7944=>684,7945=>684,7946=>877,7947=>877,7948=>769,7949=>801, +7950=>708,7951=>743,7952=>541,7953=>541,7954=>541,7955=>541,7956=>541,7957=>541,7960=>711,7961=>711, +7962=>966,7963=>975,7964=>898,7965=>928,7968=>634,7969=>634,7970=>634,7971=>634,7972=>634,7973=>634, +7974=>634,7975=>634,7976=>837,7977=>835,7978=>1086,7979=>1089,7980=>1027,7981=>1051,7982=>934,7983=>947, +7984=>338,7985=>338,7986=>338,7987=>338,7988=>338,7989=>338,7990=>338,7991=>338,7992=>380,7993=>374, +7994=>635,7995=>635,7996=>570,7997=>600,7998=>489,7999=>493,8000=>612,8001=>612,8002=>612,8003=>612, +8004=>612,8005=>612,8008=>804,8009=>848,8010=>1095,8011=>1100,8012=>938,8013=>970,8016=>579,8017=>579, +8018=>579,8019=>579,8020=>579,8021=>579,8022=>579,8023=>579,8025=>784,8027=>998,8029=>1012,8031=>897, +8032=>837,8033=>837,8034=>837,8035=>837,8036=>837,8037=>837,8038=>837,8039=>837,8040=>802,8041=>843, +8042=>1089,8043=>1095,8044=>946,8045=>972,8046=>921,8047=>952,8048=>659,8049=>659,8050=>541,8051=>548, +8052=>634,8053=>654,8054=>338,8055=>338,8056=>612,8057=>612,8058=>579,8059=>579,8060=>837,8061=>837, +8064=>659,8065=>659,8066=>659,8067=>659,8068=>659,8069=>659,8070=>659,8071=>659,8072=>684,8073=>684, +8074=>877,8075=>877,8076=>769,8077=>801,8078=>708,8079=>743,8080=>634,8081=>634,8082=>634,8083=>634, +8084=>634,8085=>634,8086=>634,8087=>634,8088=>837,8089=>835,8090=>1086,8091=>1089,8092=>1027,8093=>1051, +8094=>934,8095=>947,8096=>837,8097=>837,8098=>837,8099=>837,8100=>837,8101=>837,8102=>837,8103=>837, +8104=>802,8105=>843,8106=>1089,8107=>1095,8108=>946,8109=>972,8110=>921,8111=>952,8112=>659,8113=>659, +8114=>659,8115=>659,8116=>659,8118=>659,8119=>659,8120=>684,8121=>684,8122=>716,8123=>692,8124=>684, +8125=>500,8126=>500,8127=>500,8128=>500,8129=>500,8130=>634,8131=>634,8132=>654,8134=>634,8135=>634, +8136=>805,8137=>746,8138=>931,8139=>871,8140=>752,8141=>500,8142=>500,8143=>500,8144=>338,8145=>338, +8146=>338,8147=>338,8150=>338,8151=>338,8152=>295,8153=>295,8154=>475,8155=>408,8157=>500,8158=>500, +8159=>500,8160=>579,8161=>579,8162=>579,8163=>579,8164=>635,8165=>635,8166=>579,8167=>579,8168=>611, +8169=>611,8170=>845,8171=>825,8172=>685,8173=>500,8174=>500,8175=>500,8178=>837,8179=>837,8180=>837, +8182=>837,8183=>837,8184=>941,8185=>813,8186=>922,8187=>826,8188=>764,8189=>500,8190=>500,8192=>500, +8193=>1000,8194=>500,8195=>1000,8196=>330,8197=>250,8198=>167,8199=>636,8200=>318,8201=>200,8202=>100, +8203=>0,8204=>0,8205=>0,8206=>0,8207=>0,8208=>361,8209=>361,8210=>636,8213=>1000,8214=>500, +8215=>500,8219=>318,8223=>518,8228=>334,8229=>667,8232=>0,8233=>0,8234=>0,8235=>0,8236=>0, +8237=>0,8238=>0,8239=>200,8241=>1735,8251=>838,8252=>485,8253=>531,8254=>500,8255=>804,8256=>804, +8258=>1000,8259=>500,8260=>167,8261=>390,8262=>390,8263=>922,8264=>733,8265=>733,8267=>636,8268=>500, +8269=>500,8270=>500,8271=>337,8272=>804,8273=>500,8274=>450,8275=>1000,8276=>804,8287=>222,8288=>0, +8289=>0,8290=>0,8291=>0,8292=>0,8298=>0,8299=>0,8300=>0,8301=>0,8302=>0,8303=>0, +8304=>401,8305=>179,8308=>401,8320=>401,8321=>401,8322=>401,8323=>401,8324=>401,8363=>636,8369=>636, +8376=>636,8377=>636,8451=>1123,8457=>952,8462=>634,8463=>634,8470=>1165,8471=>1000,8486=>764,8487=>764, +8490=>656,8491=>684,8494=>854,8498=>575,8500=>462,8523=>780,8530=>1370,8531=>969,8532=>969,8543=>568, +8544=>295,8545=>492,8546=>689,8547=>923,8548=>684,8549=>922,8550=>1120,8551=>1317,8552=>917,8553=>685, +8554=>933,8555=>1131,8556=>557,8557=>698,8558=>770,8559=>863,8560=>278,8561=>458,8562=>637,8563=>812, +8564=>592,8565=>811,8566=>991,8567=>1170,8568=>819,8569=>592,8570=>822,8571=>1002,8572=>278,8573=>550, +8574=>635,8575=>974,8576=>1285,8577=>770,8578=>1285,8579=>698,8580=>549,8581=>698,8585=>969,8592=>838, +8593=>838,8594=>838,8595=>838,8596=>838,8597=>838,8598=>838,8599=>838,8600=>838,8601=>838,8644=>838, +8645=>838,8646=>838,8647=>838,8648=>838,8649=>838,8650=>838,8704=>684,8707=>632,8710=>684,8711=>684, +8722=>838,8725=>337,8726=>637,8727=>626,8728=>626,8756=>636,8757=>636,8758=>260,8759=>636,8764=>636, +9134=>521,9167=>945,10731=>494,10799=>838,11374=>863,11375=>684,11381=>654,11382=>568,11383=>660,11386=>612, +11800=>536,11810=>390,11811=>390,11812=>390,11813=>390,11822=>531,42564=>635,42565=>521,42566=>354,42567=>387, +42576=>1029,42577=>906,42580=>1031,42581=>813,42582=>927,42583=>814,42594=>1014,42595=>866,42596=>1015,42597=>864, +42598=>1088,42599=>944,42600=>787,42601=>612,42602=>855,42603=>712,42604=>1358,42605=>1019,42606=>879,42636=>611, +42637=>549,42644=>686,42645=>634,42760=>493,42761=>493,42762=>493,42763=>493,42764=>493,42765=>493,42766=>493, +42767=>493,42768=>493,42769=>493,42770=>493,42771=>493,42772=>493,42773=>493,42774=>493,42779=>369,42780=>369, +42781=>252,42782=>252,42783=>252,42786=>385,42787=>356,42788=>472,42789=>472,42790=>752,42791=>634,42800=>491, +42801=>521,42802=>1250,42803=>985,42814=>703,42815=>549,42822=>680,42823=>392,42830=>1358,42831=>1019,42880=>557, +42881=>278,42891=>401,42892=>275,42893=>686,43003=>575,43004=>603,43005=>863,43006=>295,43007=>1199,63173=>612, +64256=>689,64257=>630,64258=>630,64259=>967,64260=>967,64297=>838,65024=>0,65025=>0,65026=>0,65027=>0, +65028=>0,65029=>0,65030=>0,65031=>0,65032=>0,65033=>0,65034=>0,65035=>0,65036=>0,65037=>0, +65038=>0,65039=>0,65533=>1025); +$enc=''; +$diff=''; +$file='dejavusansextralight.z'; +$ctg='dejavusansextralight.ctg.z'; +$originalsize=338436; +// --- EOF --- --- /dev/null +++ b/tcpdf/fonts/dejavusansi.php @@ -1,1 +1,477 @@ - +928,'Descent'=>-236,'CapHeight'=>-43,'Flags'=>96,'FontBBox'=>'[-1016 -350 1659 1068]','ItalicAngle'=>-11,'StemV'=>70,'MissingWidth'=>600); +$up=-63; +$ut=44; +$dw=600; +$cw=array( +0=>600,32=>318,33=>401,34=>460,35=>838,36=>636,37=>950,38=>780,39=>275,40=>390, +41=>390,42=>500,43=>838,44=>318,45=>361,46=>318,47=>337,48=>636,49=>636,50=>636, +51=>636,52=>636,53=>636,54=>636,55=>636,56=>636,57=>636,58=>337,59=>337,60=>838, +61=>838,62=>838,63=>531,64=>1000,65=>684,66=>686,67=>698,68=>770,69=>632,70=>575, +71=>775,72=>752,73=>295,74=>295,75=>656,76=>557,77=>863,78=>748,79=>787,80=>603, +81=>787,82=>695,83=>635,84=>611,85=>732,86=>684,87=>989,88=>685,89=>611,90=>685, +91=>390,92=>337,93=>390,94=>838,95=>500,96=>500,97=>613,98=>635,99=>550,100=>635, +101=>615,102=>352,103=>635,104=>634,105=>278,106=>278,107=>579,108=>278,109=>974,110=>634, +111=>612,112=>635,113=>635,114=>411,115=>521,116=>392,117=>634,118=>592,119=>818,120=>592, +121=>592,122=>525,123=>636,124=>337,125=>636,126=>838,8364=>636,8218=>318,402=>352,8222=>518, +8230=>1000,8224=>500,8225=>500,710=>500,8240=>1350,352=>635,8249=>400,338=>1070,381=>685,8216=>318, +8217=>318,8220=>518,8221=>518,8226=>590,8211=>500,8212=>1000,732=>500,8482=>1000,353=>521,8250=>400, +339=>1028,382=>525,376=>611,160=>318,161=>401,162=>636,163=>636,164=>636,165=>636,166=>337, +167=>500,168=>500,169=>1000,170=>471,171=>617,172=>838,173=>361,174=>1000,175=>500,176=>500, +177=>838,178=>401,179=>401,180=>500,181=>636,182=>636,183=>318,184=>500,185=>401,186=>471, +187=>617,188=>969,189=>969,190=>969,191=>531,192=>684,193=>684,194=>684,195=>684,196=>684, +197=>684,198=>974,199=>698,200=>632,201=>632,202=>632,203=>632,204=>295,205=>295,206=>295, +207=>295,208=>775,209=>748,210=>787,211=>787,212=>787,213=>787,214=>787,215=>838,216=>787, +217=>732,218=>732,219=>732,220=>732,221=>611,222=>608,223=>630,224=>613,225=>613,226=>613, +227=>613,228=>613,229=>613,230=>995,231=>550,232=>615,233=>615,234=>615,235=>615,236=>278, +237=>278,238=>278,239=>278,240=>612,241=>634,242=>612,243=>612,244=>612,245=>612,246=>612, +247=>838,248=>612,249=>634,250=>634,251=>634,252=>634,253=>592,254=>635,255=>592,256=>684, +257=>613,258=>684,259=>613,260=>684,261=>613,262=>698,263=>550,264=>698,265=>550,266=>698, +267=>550,268=>698,269=>550,270=>770,271=>635,272=>775,273=>635,274=>632,275=>615,276=>632, +277=>615,278=>632,279=>615,280=>632,281=>615,282=>632,283=>615,284=>775,285=>635,286=>775, +287=>635,288=>775,289=>635,290=>775,291=>635,292=>752,293=>634,294=>916,295=>695,296=>295, +297=>278,298=>295,299=>278,300=>295,301=>278,302=>295,303=>278,304=>295,305=>278,306=>590, +307=>556,308=>295,309=>278,310=>656,311=>579,312=>579,313=>557,314=>278,315=>557,316=>278, +317=>557,318=>278,319=>557,320=>278,321=>562,322=>287,323=>748,324=>634,325=>748,326=>634, +327=>748,328=>634,329=>813,330=>748,331=>634,332=>787,333=>612,334=>787,335=>612,336=>787, +337=>612,340=>695,341=>411,342=>695,343=>411,344=>695,345=>411,346=>635,347=>521,348=>635, +349=>521,350=>635,351=>521,354=>611,355=>392,356=>611,357=>392,358=>611,359=>392,360=>732, +361=>634,362=>732,363=>634,364=>732,365=>634,366=>732,367=>634,368=>732,369=>634,370=>732, +371=>634,372=>989,373=>818,374=>611,375=>592,377=>685,378=>525,379=>685,380=>525,383=>352, +384=>635,385=>735,386=>686,387=>635,388=>686,389=>635,390=>703,391=>698,392=>550,393=>775, +394=>819,395=>686,396=>635,397=>612,398=>632,399=>787,400=>614,401=>575,403=>775,404=>687, +405=>984,406=>354,407=>295,408=>746,409=>579,410=>278,411=>592,412=>974,413=>748,414=>634, +415=>787,416=>913,417=>612,418=>938,419=>737,420=>652,421=>635,422=>695,423=>635,424=>521, +425=>632,426=>336,427=>392,428=>611,429=>392,430=>611,431=>838,432=>634,433=>764,434=>721, +435=>744,436=>730,437=>685,438=>525,439=>666,440=>666,441=>578,442=>525,443=>636,444=>666, +445=>578,446=>510,447=>635,448=>295,449=>492,450=>459,451=>295,452=>1455,453=>1295,454=>1160, +455=>852,456=>835,457=>556,458=>1043,459=>1026,460=>912,461=>684,462=>613,463=>295,464=>278, +465=>787,466=>612,467=>732,468=>634,469=>732,470=>634,471=>732,472=>634,473=>732,474=>634, +475=>732,476=>634,477=>615,478=>684,479=>613,480=>684,481=>613,482=>974,483=>995,484=>775, +485=>635,486=>775,487=>635,488=>656,489=>579,490=>787,491=>612,492=>787,493=>612,494=>666, +495=>525,496=>278,497=>1455,498=>1295,499=>1160,500=>775,501=>635,502=>1113,503=>682,504=>748, +505=>634,506=>684,507=>613,508=>974,509=>995,510=>787,511=>612,512=>684,513=>613,514=>684, +515=>613,516=>632,517=>615,518=>632,519=>615,520=>295,521=>278,522=>295,523=>278,524=>787, +525=>612,526=>787,527=>612,528=>695,529=>411,530=>695,531=>411,532=>732,533=>634,534=>732, +535=>634,536=>635,537=>521,538=>611,539=>392,540=>627,541=>521,542=>752,543=>634,544=>735, +545=>838,546=>698,547=>610,548=>685,549=>525,550=>684,551=>613,552=>632,553=>615,554=>787, +555=>612,556=>787,557=>612,558=>787,559=>612,560=>787,561=>612,562=>611,563=>592,564=>475, +565=>843,566=>477,567=>278,568=>998,569=>998,570=>684,571=>698,572=>550,573=>557,574=>611, +575=>521,576=>525,577=>603,578=>479,579=>686,580=>732,581=>684,582=>632,583=>615,584=>295, +585=>278,586=>781,587=>635,588=>695,589=>411,590=>611,591=>592,592=>613,593=>635,594=>635, +595=>635,596=>550,597=>550,598=>635,599=>727,600=>615,601=>615,602=>844,603=>545,604=>545, +605=>775,606=>664,607=>326,608=>696,609=>635,610=>629,611=>596,612=>596,613=>634,614=>634, +615=>634,616=>372,617=>387,618=>372,619=>396,620=>487,621=>278,622=>706,623=>974,624=>974, +625=>974,626=>646,627=>642,628=>634,629=>612,630=>858,631=>728,632=>660,633=>469,634=>469, +635=>469,636=>469,637=>469,638=>530,639=>530,640=>602,641=>602,642=>521,643=>336,644=>336, +645=>461,646=>336,647=>392,648=>392,649=>634,650=>618,651=>598,652=>592,653=>818,654=>592, +655=>611,656=>525,657=>525,658=>578,659=>578,660=>510,661=>510,662=>510,663=>510,664=>787, +665=>580,666=>664,667=>708,668=>654,669=>292,670=>667,671=>507,672=>727,673=>510,674=>510, +675=>1014,676=>1058,677=>1013,678=>824,679=>610,680=>778,681=>848,682=>641,683=>654,684=>515, +685=>515,686=>570,687=>664,688=>399,689=>399,690=>175,691=>259,692=>295,693=>296,694=>379, +695=>515,696=>373,697=>278,698=>460,699=>318,700=>318,701=>318,702=>307,703=>307,704=>370, +705=>370,706=>500,707=>500,708=>500,709=>500,711=>500,712=>275,713=>500,714=>500,715=>500, +716=>275,717=>500,718=>500,719=>500,720=>337,721=>337,722=>307,723=>307,724=>500,725=>500, +726=>390,727=>317,728=>500,729=>500,730=>500,731=>500,733=>500,734=>315,735=>500,736=>426, +737=>166,738=>373,739=>444,740=>370,741=>493,742=>493,743=>493,744=>493,745=>493,748=>500, +749=>500,750=>518,755=>500,759=>500,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0, +774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0, +784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0, +794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0, +804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0, +814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0, +824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,832=>0,833=>0, +834=>0,835=>0,836=>0,837=>0,838=>0,839=>0,840=>0,841=>0,842=>0,843=>0, +844=>0,845=>0,846=>0,847=>0,849=>0,850=>0,851=>0,855=>0,856=>0,858=>0, +860=>0,861=>0,862=>0,863=>0,864=>0,865=>0,866=>0,880=>654,881=>568,882=>862, +883=>647,884=>278,885=>278,886=>748,887=>650,890=>500,891=>549,892=>550,893=>549,894=>337, +900=>500,901=>500,902=>684,903=>318,904=>767,905=>903,906=>435,908=>839,910=>860,911=>905, +912=>338,913=>684,914=>686,915=>557,916=>684,917=>632,918=>685,919=>752,920=>787,921=>295, +922=>656,923=>684,924=>863,925=>748,926=>632,927=>787,928=>752,929=>603,931=>632,932=>611, +933=>611,934=>787,935=>685,936=>787,937=>764,938=>295,939=>611,940=>659,941=>541,942=>634, +943=>338,944=>579,945=>659,946=>638,947=>592,948=>612,949=>541,950=>544,951=>634,952=>612, +953=>338,954=>589,955=>592,956=>636,957=>559,958=>558,959=>612,960=>602,961=>635,962=>587, +963=>634,964=>602,965=>579,966=>660,967=>592,968=>660,969=>837,970=>338,971=>579,972=>612, +973=>579,974=>837,975=>656,976=>614,977=>619,978=>699,979=>842,980=>699,981=>660,982=>837, +983=>664,984=>787,985=>612,986=>648,987=>587,988=>575,989=>458,990=>660,991=>660,992=>865, +993=>627,994=>934,995=>837,996=>758,997=>659,998=>792,999=>615,1000=>687,1001=>607,1002=>768, +1003=>625,1004=>699,1005=>612,1006=>611,1007=>536,1008=>664,1009=>635,1010=>550,1011=>278,1012=>787, +1013=>615,1014=>615,1015=>608,1016=>635,1017=>698,1018=>863,1019=>651,1020=>635,1021=>703,1022=>698, +1023=>703,1024=>632,1025=>632,1026=>786,1027=>557,1028=>698,1029=>635,1030=>295,1031=>295,1032=>295, +1033=>1094,1034=>1045,1035=>786,1036=>710,1037=>748,1038=>609,1039=>752,1040=>684,1041=>686,1042=>686, +1043=>557,1044=>781,1045=>632,1046=>1077,1047=>641,1048=>748,1049=>748,1050=>710,1051=>752,1052=>863, +1053=>752,1054=>787,1055=>752,1056=>603,1057=>698,1058=>611,1059=>609,1060=>861,1061=>685,1062=>776, +1063=>686,1064=>1069,1065=>1094,1066=>833,1067=>818,1068=>686,1069=>698,1070=>1080,1071=>695,1072=>613, +1073=>617,1074=>589,1075=>525,1076=>691,1077=>615,1078=>901,1079=>532,1080=>650,1081=>650,1082=>604, +1083=>639,1084=>754,1085=>654,1086=>612,1087=>654,1088=>635,1089=>550,1090=>583,1091=>592,1092=>855, +1093=>592,1094=>681,1095=>591,1096=>915,1097=>942,1098=>707,1099=>790,1100=>589,1101=>549,1102=>842, +1103=>602,1104=>615,1105=>615,1106=>625,1107=>525,1108=>549,1109=>521,1110=>278,1111=>278,1112=>278, +1113=>902,1114=>898,1115=>652,1116=>604,1117=>650,1118=>592,1119=>654,1120=>934,1121=>837,1122=>771, +1123=>672,1124=>942,1125=>749,1126=>879,1127=>783,1128=>1160,1129=>1001,1130=>787,1131=>612,1132=>1027, +1133=>824,1134=>636,1135=>541,1136=>856,1137=>876,1138=>787,1139=>612,1140=>781,1141=>665,1142=>781, +1143=>665,1144=>992,1145=>904,1146=>953,1147=>758,1148=>1180,1149=>1028,1150=>934,1151=>837,1152=>698, +1153=>550,1154=>502,1155=>0,1156=>0,1157=>0,1158=>0,1159=>0,1160=>418,1161=>418,1162=>748, +1163=>657,1164=>686,1165=>589,1166=>603,1167=>635,1168=>610,1169=>525,1170=>675,1171=>556,1172=>557, +1173=>491,1174=>1077,1175=>901,1176=>641,1177=>532,1178=>710,1179=>604,1180=>710,1181=>604,1182=>710, +1183=>604,1184=>856,1185=>832,1186=>752,1187=>661,1188=>1014,1189=>877,1190=>1113,1191=>950,1192=>890, +1193=>707,1194=>698,1195=>550,1196=>611,1197=>529,1198=>611,1199=>592,1200=>611,1201=>592,1202=>685, +1203=>592,1204=>934,1205=>807,1206=>686,1207=>591,1208=>686,1209=>591,1210=>686,1211=>634,1212=>929, +1213=>731,1214=>929,1215=>731,1216=>295,1217=>1077,1218=>901,1219=>655,1220=>604,1221=>752,1222=>639, +1223=>752,1224=>661,1225=>752,1226=>661,1227=>686,1228=>591,1229=>863,1230=>754,1231=>278,1232=>684, +1233=>613,1234=>684,1235=>613,1236=>974,1237=>995,1238=>632,1239=>615,1240=>787,1241=>615,1242=>787, +1243=>615,1244=>1077,1245=>901,1246=>641,1247=>532,1248=>666,1249=>578,1250=>748,1251=>650,1252=>748, +1253=>650,1254=>787,1255=>612,1256=>787,1257=>612,1258=>787,1259=>612,1260=>698,1261=>549,1262=>609, +1263=>592,1264=>609,1265=>592,1266=>609,1267=>592,1268=>686,1269=>591,1270=>557,1271=>491,1272=>818, +1273=>790,1274=>675,1275=>556,1276=>685,1277=>592,1278=>685,1279=>592,1280=>686,1281=>589,1282=>1006, +1283=>897,1284=>975,1285=>869,1286=>679,1287=>588,1288=>1072,1289=>957,1290=>1113,1291=>967,1292=>775, +1293=>660,1294=>773,1295=>711,1296=>614,1297=>541,1298=>752,1299=>639,1300=>1195,1301=>997,1302=>900, +1303=>867,1304=>1031,1305=>989,1306=>787,1307=>635,1308=>989,1309=>818,1312=>1113,1313=>942,1314=>1113, +1315=>949,1316=>793,1317=>683,1329=>867,1330=>732,1331=>882,1332=>882,1333=>732,1334=>644,1335=>682, +1336=>732,1337=>851,1338=>882,1339=>732,1340=>557,1341=>824,1342=>986,1343=>732,1344=>707,1345=>644, +1346=>882,1347=>777,1348=>882,1349=>732,1350=>840,1351=>732,1352=>732,1353=>732,1354=>791,1355=>644, +1356=>882,1357=>732,1358=>882,1359=>635,1360=>732,1361=>732,1362=>799,1363=>861,1364=>790,1365=>787, +1366=>635,1369=>307,1370=>318,1371=>500,1372=>500,1373=>392,1374=>526,1375=>500,1377=>974,1378=>634, +1379=>762,1380=>767,1381=>634,1382=>697,1383=>533,1384=>634,1385=>700,1386=>697,1387=>634,1388=>404, +1389=>894,1390=>641,1391=>634,1392=>634,1393=>635,1394=>702,1395=>634,1396=>659,1397=>278,1398=>760, +1399=>516,1400=>634,1401=>453,1402=>974,1403=>516,1404=>769,1405=>634,1406=>696,1407=>974,1408=>634, +1409=>635,1410=>501,1411=>974,1412=>648,1413=>612,1414=>629,1415=>763,1417=>337,1418=>433,1456=>0, +1457=>0,1458=>0,1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1466=>0, +1467=>0,1468=>0,1469=>0,1470=>361,1471=>0,1472=>295,1473=>0,1474=>0,1475=>295,1478=>456, +1479=>0,1488=>629,1489=>608,1490=>448,1491=>594,1492=>640,1493=>272,1494=>374,1495=>640,1496=>648, +1497=>272,1498=>592,1499=>556,1500=>599,1501=>640,1502=>659,1503=>272,1504=>441,1505=>700,1506=>563, +1507=>640,1508=>604,1509=>521,1510=>581,1511=>663,1512=>592,1513=>808,1514=>657,1520=>471,1521=>454, +1522=>471,1523=>416,1524=>645,3647=>636,3713=>670,3714=>684,3716=>688,3719=>482,3720=>628,3722=>684, +3725=>688,3732=>642,3733=>642,3734=>672,3735=>655,3737=>641,3738=>592,3739=>592,3740=>745,3741=>767, +3742=>687,3743=>687,3745=>702,3746=>688,3747=>684,3749=>649,3751=>632,3754=>703,3755=>819,3757=>633, +3758=>684,3759=>788,3760=>632,3761=>0,3762=>539,3763=>539,3764=>0,3765=>0,3766=>0,3767=>0, +3768=>0,3769=>0,3771=>0,3772=>0,3773=>663,3776=>360,3777=>679,3778=>460,3779=>547,3780=>491, +3782=>674,3784=>0,3785=>0,3786=>0,3787=>0,3788=>0,3789=>0,3792=>636,3793=>641,3794=>641, +3795=>670,3796=>625,3797=>625,3798=>703,3799=>670,3800=>674,3801=>677,3804=>1028,3805=>1028,4256=>840, +4257=>690,4258=>642,4259=>759,4260=>591,4261=>686,4262=>789,4263=>811,4264=>467,4265=>565,4266=>789, +4267=>793,4268=>584,4269=>837,4270=>750,4271=>688,4272=>811,4273=>584,4274=>584,4275=>837,4276=>837, +4277=>646,4278=>604,4279=>584,4280=>596,4281=>584,4282=>721,4283=>795,4284=>584,4285=>566,4286=>584, +4287=>669,4288=>799,4289=>542,4290=>664,4291=>542,4292=>565,4293=>674,4304=>508,4305=>508,4306=>533, +4307=>785,4308=>522,4309=>517,4310=>508,4311=>797,4312=>507,4313=>518,4314=>1058,4315=>522,4316=>523, +4317=>783,4318=>518,4319=>523,4320=>792,4321=>523,4322=>656,4323=>524,4324=>788,4325=>523,4326=>782, +4327=>523,4328=>522,4329=>522,4330=>566,4331=>523,4332=>523,4333=>489,4334=>522,4335=>498,4336=>517, +4337=>560,4338=>508,4339=>508,4340=>508,4341=>563,4342=>824,4343=>595,4344=>522,4345=>554,4346=>553, +4347=>586,4348=>304,5121=>684,5122=>684,5123=>684,5124=>684,5125=>769,5126=>769,5127=>769,5129=>769, +5130=>769,5131=>769,5132=>835,5133=>834,5134=>835,5135=>834,5136=>835,5137=>834,5138=>967,5139=>1007, +5140=>967,5141=>1007,5142=>769,5143=>967,5144=>1007,5145=>967,5146=>1007,5147=>769,5149=>256,5150=>543, +5151=>423,5152=>423,5153=>389,5154=>389,5155=>393,5156=>389,5157=>466,5158=>385,5159=>256,5160=>389, +5161=>389,5162=>389,5163=>1090,5164=>909,5165=>953,5166=>1117,5167=>684,5168=>684,5169=>684,5170=>684, +5171=>729,5172=>729,5173=>729,5175=>729,5176=>729,5177=>729,5178=>835,5179=>684,5180=>835,5181=>834, +5182=>835,5183=>834,5184=>967,5185=>1007,5186=>967,5187=>1007,5188=>967,5189=>1007,5190=>967,5191=>1007, +5192=>729,5193=>508,5194=>192,5196=>732,5197=>732,5198=>732,5199=>732,5200=>730,5201=>730,5202=>730, +5204=>730,5205=>730,5206=>730,5207=>921,5208=>889,5209=>921,5210=>889,5211=>921,5212=>889,5213=>928, +5214=>900,5215=>928,5216=>900,5217=>947,5218=>900,5219=>947,5220=>900,5221=>947,5222=>434,5223=>877, +5224=>877,5225=>866,5226=>890,5227=>628,5228=>628,5229=>628,5230=>628,5231=>628,5232=>628,5233=>628, +5234=>628,5235=>628,5236=>860,5237=>771,5238=>815,5239=>816,5240=>815,5241=>816,5242=>860,5243=>771, +5244=>860,5245=>771,5246=>815,5247=>816,5248=>815,5249=>816,5250=>815,5251=>407,5252=>407,5253=>750, +5254=>775,5255=>750,5256=>775,5257=>628,5258=>628,5259=>628,5260=>628,5261=>628,5262=>628,5263=>628, +5264=>628,5265=>628,5266=>860,5267=>771,5268=>815,5269=>816,5270=>815,5271=>816,5272=>860,5273=>771, +5274=>860,5275=>771,5276=>815,5277=>816,5278=>815,5279=>816,5280=>815,5281=>435,5282=>435,5283=>610, +5284=>557,5285=>557,5286=>557,5287=>610,5288=>610,5289=>610,5290=>557,5291=>557,5292=>749,5293=>769, +5294=>746,5295=>764,5296=>746,5297=>764,5298=>749,5299=>769,5300=>749,5301=>769,5302=>746,5303=>764, +5304=>746,5305=>764,5306=>746,5307=>386,5308=>508,5309=>386,5312=>852,5313=>852,5314=>852,5315=>852, +5316=>852,5317=>852,5318=>852,5319=>852,5320=>852,5321=>1069,5322=>1035,5323=>1059,5324=>852,5325=>1059, +5326=>852,5327=>852,5328=>600,5329=>453,5330=>600,5331=>852,5332=>852,5333=>852,5334=>852,5335=>852, +5336=>852,5337=>852,5338=>852,5339=>852,5340=>1069,5341=>1035,5342=>1059,5343=>1030,5344=>1059,5345=>1030, +5346=>1069,5347=>1035,5348=>1069,5349=>1035,5350=>1083,5351=>1030,5352=>1083,5353=>1030,5354=>600,5356=>729, +5357=>603,5358=>603,5359=>603,5360=>603,5361=>603,5362=>603,5363=>603,5364=>603,5365=>603,5366=>834, +5367=>754,5368=>792,5369=>771,5370=>792,5371=>771,5372=>834,5373=>754,5374=>834,5375=>754,5376=>792, +5377=>771,5378=>792,5379=>771,5380=>792,5381=>418,5382=>420,5383=>418,5392=>712,5393=>712,5394=>712, +5395=>892,5396=>892,5397=>892,5398=>892,5399=>910,5400=>872,5401=>910,5402=>872,5403=>910,5404=>872, +5405=>1140,5406=>1100,5407=>1140,5408=>1100,5409=>1140,5410=>1100,5411=>1140,5412=>1100,5413=>641,5414=>627, +5415=>627,5416=>627,5417=>627,5418=>627,5419=>627,5420=>627,5421=>627,5422=>627,5423=>844,5424=>781, +5425=>816,5426=>818,5427=>816,5428=>818,5429=>844,5430=>781,5431=>844,5432=>781,5433=>816,5434=>818, +5435=>816,5436=>818,5437=>816,5438=>418,5440=>389,5441=>484,5442=>916,5443=>916,5444=>863,5445=>916, +5446=>863,5447=>863,5448=>603,5449=>603,5450=>603,5451=>603,5452=>603,5453=>603,5454=>834,5455=>754, +5456=>418,5458=>729,5459=>684,5460=>684,5461=>684,5462=>684,5463=>726,5464=>726,5465=>726,5466=>726, +5467=>924,5468=>1007,5469=>508,5470=>732,5471=>732,5472=>732,5473=>732,5474=>732,5475=>732,5476=>730, +5477=>730,5478=>730,5479=>730,5480=>947,5481=>900,5482=>508,5492=>831,5493=>831,5494=>831,5495=>831, +5496=>831,5497=>831,5498=>831,5499=>563,5500=>752,5501=>484,5502=>1047,5503=>1047,5504=>1047,5505=>1047, +5506=>1047,5507=>1047,5508=>1047,5509=>825,5514=>831,5515=>831,5516=>831,5517=>831,5518=>1259,5519=>1259, +5520=>1259,5521=>1002,5522=>1002,5523=>1259,5524=>1259,5525=>700,5526=>1073,5536=>852,5537=>852,5538=>799, +5539=>799,5540=>799,5541=>799,5542=>600,5543=>643,5544=>643,5545=>643,5546=>643,5547=>643,5548=>643, +5549=>643,5550=>418,5551=>628,5598=>770,5601=>770,5702=>468,5703=>468,5742=>444,5743=>1047,5744=>1310, +5745=>1632,5746=>1632,5747=>1375,5748=>1375,5749=>1632,5750=>1632,7424=>592,7425=>717,7426=>982,7427=>586, +7428=>550,7429=>605,7430=>605,7431=>491,7432=>541,7433=>278,7434=>395,7435=>579,7436=>583,7437=>754, +7438=>650,7439=>612,7440=>550,7441=>684,7442=>684,7443=>684,7444=>1023,7446=>612,7447=>612,7448=>524, +7449=>602,7450=>602,7451=>583,7452=>574,7453=>737,7454=>948,7455=>638,7456=>592,7457=>818,7458=>525, +7459=>526,7462=>583,7463=>592,7464=>564,7465=>524,7466=>590,7467=>639,7468=>431,7469=>613,7470=>432, +7472=>485,7473=>398,7474=>398,7475=>488,7476=>474,7477=>186,7478=>186,7479=>413,7480=>351,7481=>543, +7482=>471,7483=>471,7484=>496,7485=>439,7486=>380,7487=>438,7488=>385,7489=>461,7490=>623,7491=>392, +7492=>392,7493=>405,7494=>648,7495=>428,7496=>405,7497=>417,7498=>417,7499=>360,7500=>359,7501=>405, +7502=>179,7503=>426,7504=>623,7505=>409,7506=>414,7507=>370,7508=>414,7509=>414,7510=>428,7511=>295, +7512=>405,7513=>470,7514=>623,7515=>417,7517=>402,7518=>373,7519=>385,7520=>416,7521=>364,7522=>179, +7523=>259,7524=>405,7525=>417,7526=>402,7527=>373,7528=>412,7529=>416,7530=>364,7543=>635,7544=>474, +7547=>372,7549=>667,7557=>278,7579=>405,7580=>370,7581=>370,7582=>414,7583=>360,7584=>296,7585=>233, +7586=>405,7587=>405,7588=>261,7589=>250,7590=>261,7591=>261,7592=>234,7593=>250,7594=>235,7595=>376, +7596=>623,7597=>623,7598=>411,7599=>479,7600=>409,7601=>414,7602=>414,7603=>360,7604=>287,7605=>295, +7606=>508,7607=>418,7608=>361,7609=>406,7610=>417,7611=>366,7612=>437,7613=>366,7614=>392,7615=>414, +7620=>0,7621=>0,7622=>0,7623=>0,7624=>0,7625=>0,7680=>684,7681=>613,7682=>686,7683=>635, +7684=>686,7685=>635,7686=>686,7687=>635,7688=>698,7689=>550,7690=>770,7691=>635,7692=>770,7693=>635, +7694=>770,7695=>635,7696=>770,7697=>635,7698=>770,7699=>635,7700=>632,7701=>615,7702=>632,7703=>615, +7704=>632,7705=>615,7706=>632,7707=>615,7708=>632,7709=>615,7710=>575,7711=>352,7712=>775,7713=>635, +7714=>752,7715=>634,7716=>752,7717=>634,7718=>752,7719=>634,7720=>752,7721=>634,7722=>752,7723=>634, +7724=>295,7725=>278,7726=>295,7727=>278,7728=>656,7729=>579,7730=>656,7731=>579,7732=>656,7733=>579, +7734=>557,7735=>278,7736=>557,7737=>278,7738=>557,7739=>278,7740=>557,7741=>278,7742=>863,7743=>974, +7744=>863,7745=>974,7746=>863,7747=>974,7748=>748,7749=>634,7750=>748,7751=>634,7752=>748,7753=>634, +7754=>748,7755=>634,7756=>787,7757=>612,7758=>787,7759=>612,7760=>787,7761=>612,7762=>787,7763=>612, +7764=>603,7765=>635,7766=>603,7767=>635,7768=>695,7769=>411,7770=>695,7771=>411,7772=>695,7773=>411, +7774=>695,7775=>411,7776=>635,7777=>521,7778=>635,7779=>521,7780=>635,7781=>521,7782=>635,7783=>521, +7784=>635,7785=>521,7786=>611,7787=>392,7788=>611,7789=>392,7790=>611,7791=>392,7792=>611,7793=>392, +7794=>732,7795=>634,7796=>732,7797=>634,7798=>732,7799=>634,7800=>732,7801=>634,7802=>732,7803=>634, +7804=>684,7805=>592,7806=>684,7807=>592,7808=>989,7809=>818,7810=>989,7811=>818,7812=>989,7813=>818, +7814=>989,7815=>818,7816=>989,7817=>818,7818=>685,7819=>592,7820=>685,7821=>592,7822=>611,7823=>592, +7824=>685,7825=>525,7826=>685,7827=>525,7828=>685,7829=>525,7830=>634,7831=>392,7832=>818,7833=>592, +7834=>613,7835=>352,7836=>352,7837=>352,7838=>769,7839=>612,7840=>684,7841=>613,7842=>684,7843=>613, +7844=>684,7845=>613,7846=>684,7847=>613,7848=>684,7849=>613,7850=>684,7851=>613,7852=>684,7853=>613, +7854=>684,7855=>613,7856=>684,7857=>613,7858=>684,7859=>613,7860=>684,7861=>613,7862=>684,7863=>613, +7864=>632,7865=>615,7866=>632,7867=>615,7868=>632,7869=>615,7870=>632,7871=>615,7872=>632,7873=>615, +7874=>632,7875=>615,7876=>632,7877=>615,7878=>632,7879=>615,7880=>295,7881=>278,7882=>295,7883=>278, +7884=>787,7885=>612,7886=>787,7887=>612,7888=>787,7889=>612,7890=>787,7891=>612,7892=>787,7893=>612, +7894=>787,7895=>612,7896=>787,7897=>612,7898=>913,7899=>612,7900=>913,7901=>612,7902=>913,7903=>612, +7904=>913,7905=>612,7906=>913,7907=>612,7908=>732,7909=>634,7910=>732,7911=>634,7912=>838,7913=>634, +7914=>838,7915=>634,7916=>838,7917=>634,7918=>838,7919=>634,7920=>838,7921=>634,7922=>611,7923=>592, +7924=>611,7925=>592,7926=>611,7927=>592,7928=>611,7929=>592,7930=>769,7931=>477,7936=>659,7937=>659, +7938=>659,7939=>659,7940=>659,7941=>659,7942=>659,7943=>659,7944=>684,7945=>684,7946=>877,7947=>877, +7948=>769,7949=>801,7950=>708,7951=>743,7952=>541,7953=>541,7954=>541,7955=>541,7956=>541,7957=>541, +7960=>711,7961=>711,7962=>966,7963=>975,7964=>898,7965=>928,7968=>634,7969=>634,7970=>634,7971=>634, +7972=>634,7973=>634,7974=>634,7975=>634,7976=>837,7977=>835,7978=>1086,7979=>1089,7980=>1027,7981=>1051, +7982=>934,7983=>947,7984=>338,7985=>338,7986=>338,7987=>338,7988=>338,7989=>338,7990=>338,7991=>338, +7992=>380,7993=>374,7994=>635,7995=>635,7996=>570,7997=>600,7998=>489,7999=>493,8000=>612,8001=>612, +8002=>612,8003=>612,8004=>612,8005=>612,8008=>804,8009=>848,8010=>1095,8011=>1100,8012=>938,8013=>970, +8016=>579,8017=>579,8018=>579,8019=>579,8020=>579,8021=>579,8022=>579,8023=>579,8025=>784,8027=>998, +8029=>1012,8031=>897,8032=>837,8033=>837,8034=>837,8035=>837,8036=>837,8037=>837,8038=>837,8039=>837, +8040=>802,8041=>843,8042=>1089,8043=>1095,8044=>946,8045=>972,8046=>921,8047=>952,8048=>659,8049=>659, +8050=>541,8051=>548,8052=>634,8053=>654,8054=>338,8055=>338,8056=>612,8057=>612,8058=>579,8059=>579, +8060=>837,8061=>837,8064=>659,8065=>659,8066=>659,8067=>659,8068=>659,8069=>659,8070=>659,8071=>659, +8072=>684,8073=>684,8074=>877,8075=>877,8076=>769,8077=>801,8078=>708,8079=>743,8080=>634,8081=>634, +8082=>634,8083=>634,8084=>634,8085=>634,8086=>634,8087=>634,8088=>837,8089=>835,8090=>1086,8091=>1089, +8092=>1027,8093=>1051,8094=>934,8095=>947,8096=>837,8097=>837,8098=>837,8099=>837,8100=>837,8101=>837, +8102=>837,8103=>837,8104=>802,8105=>843,8106=>1089,8107=>1095,8108=>946,8109=>972,8110=>921,8111=>952, +8112=>659,8113=>659,8114=>659,8115=>659,8116=>659,8118=>659,8119=>659,8120=>684,8121=>684,8122=>716, +8123=>692,8124=>684,8125=>500,8126=>500,8127=>500,8128=>500,8129=>500,8130=>634,8131=>634,8132=>654, +8134=>634,8135=>634,8136=>805,8137=>746,8138=>931,8139=>871,8140=>752,8141=>500,8142=>500,8143=>500, +8144=>338,8145=>338,8146=>338,8147=>338,8150=>338,8151=>338,8152=>295,8153=>295,8154=>475,8155=>408, +8157=>500,8158=>500,8159=>500,8160=>579,8161=>579,8162=>579,8163=>579,8164=>635,8165=>635,8166=>579, +8167=>579,8168=>611,8169=>611,8170=>845,8171=>825,8172=>685,8173=>500,8174=>500,8175=>500,8178=>837, +8179=>837,8180=>837,8182=>837,8183=>837,8184=>941,8185=>813,8186=>922,8187=>826,8188=>764,8189=>500, +8190=>500,8192=>500,8193=>1000,8194=>500,8195=>1000,8196=>330,8197=>250,8198=>167,8199=>636,8200=>318, +8201=>200,8202=>100,8203=>0,8204=>0,8205=>0,8206=>0,8207=>0,8208=>361,8209=>361,8210=>636, +8213=>1000,8214=>500,8215=>500,8219=>318,8223=>518,8227=>590,8228=>333,8229=>667,8231=>318,8232=>0, +8233=>0,8234=>0,8235=>0,8236=>0,8237=>0,8238=>0,8239=>200,8241=>1690,8242=>227,8243=>374, +8244=>520,8245=>227,8246=>374,8247=>520,8248=>339,8251=>838,8252=>485,8253=>531,8254=>500,8255=>804, +8256=>804,8257=>250,8258=>1000,8259=>500,8260=>167,8261=>390,8262=>390,8263=>922,8264=>733,8265=>733, +8266=>497,8267=>636,8268=>500,8269=>500,8270=>500,8271=>337,8272=>804,8273=>500,8274=>450,8275=>1000, +8276=>804,8277=>838,8278=>586,8279=>663,8280=>838,8281=>838,8282=>318,8283=>797,8284=>838,8285=>318, +8286=>318,8287=>222,8288=>0,8289=>0,8290=>0,8291=>0,8292=>0,8298=>0,8299=>0,8300=>0, +8301=>0,8302=>0,8303=>0,8304=>401,8305=>179,8308=>401,8309=>401,8310=>401,8311=>401,8312=>401, +8313=>401,8314=>528,8315=>528,8316=>528,8317=>246,8318=>246,8319=>399,8320=>401,8321=>401,8322=>401, +8323=>401,8324=>401,8325=>401,8326=>401,8327=>401,8328=>401,8329=>401,8330=>528,8331=>528,8332=>528, +8333=>246,8334=>246,8336=>392,8337=>417,8338=>414,8339=>444,8340=>417,8352=>877,8353=>636,8354=>636, +8355=>636,8356=>636,8357=>974,8358=>748,8359=>1271,8360=>1074,8361=>989,8362=>838,8363=>636,8365=>636, +8366=>636,8367=>1272,8368=>636,8369=>636,8370=>636,8371=>636,8372=>774,8373=>636,8376=>636,8377=>636, +8400=>0,8401=>0,8406=>0,8407=>0,8411=>0,8412=>0,8417=>0,8448=>970,8449=>970,8450=>698, +8451=>1123,8452=>896,8453=>969,8454=>1032,8455=>614,8456=>698,8457=>952,8459=>988,8460=>754,8461=>850, +8462=>634,8463=>634,8464=>470,8465=>697,8466=>720,8467=>413,8468=>818,8469=>801,8470=>1040,8471=>1000, +8472=>697,8473=>701,8474=>787,8475=>798,8476=>814,8477=>792,8478=>896,8479=>684,8480=>1020,8481=>1014, +8483=>684,8484=>745,8485=>578,8486=>764,8487=>764,8488=>616,8489=>338,8490=>656,8491=>684,8492=>786, +8493=>703,8494=>854,8495=>592,8496=>605,8497=>786,8498=>575,8499=>1069,8500=>462,8501=>745,8502=>674, +8503=>466,8504=>645,8505=>380,8506=>926,8507=>1157,8508=>702,8509=>728,8510=>654,8511=>849,8512=>811, +8513=>775,8514=>557,8515=>557,8516=>611,8517=>819,8518=>708,8519=>615,8520=>351,8521=>351,8523=>780, +8526=>526,8528=>969,8529=>969,8530=>1370,8531=>969,8532=>969,8533=>969,8534=>969,8535=>969,8536=>969, +8537=>969,8538=>969,8539=>969,8540=>969,8541=>969,8542=>969,8543=>568,8544=>295,8545=>492,8546=>689, +8547=>923,8548=>684,8549=>922,8550=>1120,8551=>1317,8552=>917,8553=>685,8554=>933,8555=>1131,8556=>557, +8557=>698,8558=>770,8559=>863,8560=>278,8561=>458,8562=>637,8563=>812,8564=>592,8565=>811,8566=>991, +8567=>1170,8568=>819,8569=>592,8570=>822,8571=>1002,8572=>278,8573=>550,8574=>635,8575=>974,8576=>1245, +8577=>770,8578=>1245,8579=>703,8580=>549,8581=>698,8585=>969,8592=>838,8593=>838,8594=>838,8595=>838, +8596=>838,8597=>838,8598=>838,8599=>838,8600=>838,8601=>838,8602=>838,8603=>838,8604=>838,8605=>838, +8606=>838,8607=>838,8608=>838,8609=>838,8610=>838,8611=>838,8612=>838,8613=>838,8614=>838,8615=>838, +8616=>838,8617=>838,8618=>838,8619=>838,8620=>838,8621=>838,8622=>838,8623=>838,8624=>838,8625=>838, +8626=>838,8627=>838,8628=>838,8629=>838,8630=>838,8631=>838,8632=>838,8633=>838,8634=>838,8635=>838, +8636=>838,8637=>838,8638=>838,8639=>838,8640=>838,8641=>838,8642=>838,8643=>838,8644=>838,8645=>838, +8646=>838,8647=>838,8648=>838,8649=>838,8650=>838,8651=>838,8652=>838,8653=>838,8654=>838,8655=>838, +8656=>838,8657=>838,8658=>838,8659=>838,8660=>838,8661=>838,8662=>838,8663=>838,8664=>838,8665=>838, +8666=>838,8667=>838,8668=>838,8669=>838,8670=>838,8671=>838,8672=>838,8673=>838,8674=>838,8675=>838, +8676=>838,8677=>838,8678=>838,8679=>838,8680=>838,8681=>838,8682=>838,8683=>838,8684=>838,8685=>838, +8686=>838,8687=>838,8688=>838,8689=>838,8690=>838,8691=>838,8692=>838,8693=>838,8694=>838,8695=>838, +8696=>838,8697=>838,8698=>838,8699=>838,8700=>838,8701=>838,8702=>838,8703=>838,8704=>684,8705=>636, +8706=>517,8707=>632,8708=>632,8709=>871,8710=>669,8711=>669,8712=>871,8713=>871,8714=>718,8715=>871, +8716=>871,8717=>718,8718=>636,8719=>757,8720=>757,8721=>674,8722=>838,8723=>838,8724=>838,8725=>337, +8726=>637,8727=>838,8728=>626,8729=>626,8730=>637,8731=>637,8732=>637,8733=>714,8734=>833,8735=>838, +8736=>896,8737=>896,8738=>838,8739=>500,8740=>500,8741=>500,8742=>500,8743=>732,8744=>732,8745=>732, +8746=>732,8747=>521,8748=>789,8749=>1057,8750=>521,8751=>789,8752=>1057,8753=>521,8754=>521,8755=>521, +8756=>636,8757=>636,8758=>260,8759=>636,8760=>838,8761=>838,8762=>838,8763=>838,8764=>838,8765=>838, +8766=>838,8767=>838,8768=>375,8769=>838,8770=>838,8771=>838,8772=>838,8773=>838,8774=>838,8775=>838, +8776=>838,8777=>838,8778=>838,8779=>838,8780=>838,8781=>838,8782=>838,8783=>838,8784=>838,8785=>838, +8786=>838,8787=>838,8788=>1000,8789=>1000,8790=>838,8791=>838,8792=>838,8793=>838,8794=>838,8795=>838, +8796=>838,8797=>838,8798=>838,8799=>838,8800=>838,8801=>838,8802=>838,8803=>838,8804=>838,8805=>838, +8806=>838,8807=>838,8808=>838,8809=>838,8810=>1047,8811=>1047,8812=>464,8813=>838,8814=>838,8815=>838, +8816=>838,8817=>838,8818=>838,8819=>838,8820=>838,8821=>838,8822=>838,8823=>838,8824=>838,8825=>838, +8826=>838,8827=>838,8828=>838,8829=>838,8830=>838,8831=>838,8832=>838,8833=>838,8834=>838,8835=>838, +8836=>838,8837=>838,8838=>838,8839=>838,8840=>838,8841=>838,8842=>838,8843=>838,8844=>732,8845=>732, +8846=>732,8847=>838,8848=>838,8849=>838,8850=>838,8851=>780,8852=>780,8853=>838,8854=>838,8855=>838, +8856=>838,8857=>838,8858=>838,8859=>838,8860=>838,8861=>838,8862=>838,8863=>838,8864=>838,8865=>838, +8866=>871,8867=>871,8868=>871,8869=>871,8870=>521,8871=>521,8872=>871,8873=>871,8874=>871,8875=>871, +8876=>871,8877=>871,8878=>871,8879=>871,8880=>838,8881=>838,8882=>838,8883=>838,8884=>838,8885=>838, +8886=>1000,8887=>1000,8888=>838,8889=>838,8890=>521,8891=>732,8892=>732,8893=>732,8894=>838,8895=>838, +8896=>820,8897=>820,8898=>820,8899=>820,8900=>494,8901=>318,8902=>626,8903=>838,8904=>1000,8905=>1000, +8906=>1000,8907=>1000,8908=>1000,8909=>838,8910=>732,8911=>732,8912=>838,8913=>838,8914=>838,8915=>838, +8916=>838,8917=>838,8918=>838,8919=>838,8920=>1422,8921=>1422,8922=>838,8923=>838,8924=>838,8925=>838, +8926=>838,8927=>838,8928=>838,8929=>838,8930=>838,8931=>838,8932=>838,8933=>838,8934=>838,8935=>838, +8936=>838,8937=>838,8938=>838,8939=>838,8940=>838,8941=>838,8942=>1000,8943=>1000,8944=>1000,8945=>1000, +8946=>1000,8947=>871,8948=>718,8949=>871,8950=>871,8951=>718,8952=>871,8953=>871,8954=>1000,8955=>871, +8956=>718,8957=>871,8958=>718,8959=>871,8960=>602,8961=>602,8962=>635,8963=>838,8964=>838,8965=>838, +8966=>838,8967=>488,8968=>390,8969=>390,8970=>390,8971=>390,8972=>809,8973=>809,8974=>809,8975=>809, +8976=>838,8977=>513,8984=>1000,8985=>838,8988=>469,8989=>469,8990=>469,8991=>469,8992=>521,8993=>521, +8996=>1152,8997=>1152,8998=>1414,8999=>1152,9000=>1443,9003=>1414,9004=>873,9075=>338,9076=>635,9077=>837, +9082=>659,9085=>757,9095=>1152,9108=>873,9115=>500,9116=>500,9117=>500,9118=>500,9119=>500,9120=>500, +9121=>500,9122=>500,9123=>500,9124=>500,9125=>500,9126=>500,9127=>750,9128=>750,9129=>750,9130=>750, +9131=>750,9132=>750,9133=>750,9134=>521,9166=>838,9167=>945,9187=>873,9189=>769,9192=>636,9250=>635, +9251=>635,9312=>896,9313=>896,9314=>896,9315=>896,9316=>896,9317=>896,9318=>896,9319=>896,9320=>896, +9321=>896,9472=>602,9473=>602,9474=>602,9475=>602,9476=>602,9477=>602,9478=>602,9479=>602,9480=>602, +9481=>602,9482=>602,9483=>602,9484=>602,9485=>602,9486=>602,9487=>602,9488=>602,9489=>602,9490=>602, +9491=>602,9492=>602,9493=>602,9494=>602,9495=>602,9496=>602,9497=>602,9498=>602,9499=>602,9500=>602, +9501=>602,9502=>602,9503=>602,9504=>602,9505=>602,9506=>602,9507=>602,9508=>602,9509=>602,9510=>602, +9511=>602,9512=>602,9513=>602,9514=>602,9515=>602,9516=>602,9517=>602,9518=>602,9519=>602,9520=>602, +9521=>602,9522=>602,9523=>602,9524=>602,9525=>602,9526=>602,9527=>602,9528=>602,9529=>602,9530=>602, +9531=>602,9532=>602,9533=>602,9534=>602,9535=>602,9536=>602,9537=>602,9538=>602,9539=>602,9540=>602, +9541=>602,9542=>602,9543=>602,9544=>602,9545=>602,9546=>602,9547=>602,9548=>602,9549=>602,9550=>602, +9551=>602,9552=>602,9553=>602,9554=>602,9555=>602,9556=>602,9557=>602,9558=>602,9559=>602,9560=>602, +9561=>602,9562=>602,9563=>602,9564=>602,9565=>602,9566=>602,9567=>602,9568=>602,9569=>602,9570=>602, +9571=>602,9572=>602,9573=>602,9574=>602,9575=>602,9576=>602,9577=>602,9578=>602,9579=>602,9580=>602, +9581=>602,9582=>602,9583=>602,9584=>602,9585=>602,9586=>602,9587=>602,9588=>602,9589=>602,9590=>602, +9591=>602,9592=>602,9593=>602,9594=>602,9595=>602,9596=>602,9597=>602,9598=>602,9599=>602,9600=>769, +9601=>769,9602=>769,9603=>769,9604=>769,9605=>769,9606=>769,9607=>769,9608=>769,9609=>769,9610=>769, +9611=>769,9612=>769,9613=>769,9614=>769,9615=>769,9616=>769,9617=>769,9618=>769,9619=>769,9620=>769, +9621=>769,9622=>769,9623=>769,9624=>769,9625=>769,9626=>769,9627=>769,9628=>769,9629=>769,9630=>769, +9631=>769,9632=>945,9633=>945,9634=>945,9635=>945,9636=>945,9637=>945,9638=>945,9639=>945,9640=>945, +9641=>945,9642=>678,9643=>678,9644=>945,9645=>945,9646=>550,9647=>550,9648=>769,9649=>769,9650=>769, +9651=>769,9652=>502,9653=>502,9654=>769,9655=>769,9656=>502,9657=>502,9658=>769,9659=>769,9660=>769, +9661=>769,9662=>502,9663=>502,9664=>769,9665=>769,9666=>502,9667=>502,9668=>769,9669=>769,9670=>769, +9671=>769,9672=>769,9673=>873,9674=>494,9675=>873,9676=>873,9677=>873,9678=>873,9679=>873,9680=>873, +9681=>873,9682=>873,9683=>873,9684=>873,9685=>873,9686=>527,9687=>527,9688=>791,9689=>970,9690=>970, +9691=>970,9692=>387,9693=>387,9694=>387,9695=>387,9696=>769,9697=>769,9698=>769,9699=>769,9700=>769, +9701=>769,9702=>590,9703=>945,9704=>945,9705=>945,9706=>945,9707=>945,9708=>769,9709=>769,9710=>769, +9711=>1119,9712=>945,9713=>945,9714=>945,9715=>945,9716=>873,9717=>873,9718=>873,9719=>873,9720=>769, +9721=>769,9722=>769,9723=>830,9724=>830,9725=>732,9726=>732,9727=>769,9728=>896,9729=>1000,9730=>896, +9731=>896,9732=>896,9733=>896,9734=>896,9735=>573,9736=>896,9737=>896,9738=>888,9739=>888,9740=>671, +9741=>1013,9742=>1246,9743=>1250,9744=>896,9745=>896,9746=>896,9747=>532,9748=>896,9749=>896,9750=>896, +9751=>896,9752=>896,9753=>896,9754=>896,9755=>896,9756=>896,9757=>609,9758=>896,9759=>609,9760=>896, +9761=>896,9762=>896,9763=>896,9764=>669,9765=>746,9766=>649,9767=>784,9768=>545,9769=>896,9770=>896, +9771=>896,9772=>710,9773=>896,9774=>896,9775=>896,9776=>890,9777=>890,9778=>890,9779=>890,9780=>890, +9781=>890,9782=>890,9783=>890,9784=>896,9785=>896,9786=>896,9787=>896,9788=>896,9789=>896,9790=>896, +9791=>614,9792=>732,9793=>732,9794=>896,9795=>896,9796=>896,9797=>896,9798=>896,9799=>896,9800=>896, +9801=>896,9802=>896,9803=>896,9804=>896,9805=>896,9806=>896,9807=>896,9808=>896,9809=>896,9810=>896, +9811=>896,9812=>896,9813=>896,9814=>896,9815=>896,9816=>896,9817=>896,9818=>896,9819=>896,9820=>896, +9821=>896,9822=>896,9823=>896,9824=>896,9825=>896,9826=>896,9827=>896,9828=>896,9829=>896,9830=>896, +9831=>896,9832=>896,9833=>472,9834=>638,9835=>896,9836=>896,9837=>472,9838=>357,9839=>484,9840=>748, +9841=>766,9842=>896,9843=>896,9844=>896,9845=>896,9846=>896,9847=>896,9848=>896,9849=>896,9850=>896, +9851=>896,9852=>896,9853=>896,9854=>896,9855=>896,9856=>869,9857=>869,9858=>869,9859=>869,9860=>869, +9861=>869,9862=>890,9863=>890,9864=>890,9865=>890,9866=>890,9867=>890,9868=>890,9869=>890,9870=>890, +9871=>890,9872=>750,9873=>750,9874=>890,9875=>816,9876=>716,9877=>537,9878=>852,9879=>890,9880=>684, +9881=>896,9882=>708,9883=>890,9884=>890,9888=>890,9889=>702,9890=>1004,9891=>1089,9892=>1175,9893=>903, +9894=>838,9895=>838,9896=>838,9897=>838,9898=>838,9899=>838,9900=>838,9901=>838,9902=>838,9903=>838, +9904=>844,9905=>838,9906=>732,9907=>732,9908=>732,9909=>732,9910=>850,9911=>732,9912=>732,9920=>838, +9921=>838,9922=>838,9923=>838,9985=>838,9986=>838,9987=>838,9988=>838,9990=>838,9991=>838,9992=>838, +9993=>838,9996=>838,9997=>838,9998=>838,9999=>838,10000=>838,10001=>838,10002=>838,10003=>838,10004=>838, +10005=>838,10006=>838,10007=>838,10008=>838,10009=>838,10010=>838,10011=>838,10012=>838,10013=>838,10014=>838, +10015=>838,10016=>838,10017=>838,10018=>838,10019=>838,10020=>838,10021=>838,10022=>838,10023=>838,10025=>838, +10026=>838,10027=>838,10028=>838,10029=>838,10030=>838,10031=>838,10032=>838,10033=>838,10034=>838,10035=>838, +10036=>838,10037=>838,10038=>838,10039=>838,10040=>838,10041=>838,10042=>838,10043=>838,10044=>838,10045=>838, +10046=>838,10047=>838,10048=>838,10049=>838,10050=>838,10051=>838,10052=>838,10053=>838,10054=>838,10055=>838, +10056=>838,10057=>838,10058=>838,10059=>838,10061=>896,10063=>896,10064=>896,10065=>896,10066=>896,10070=>896, +10072=>838,10073=>838,10074=>838,10075=>322,10076=>322,10077=>538,10078=>538,10081=>838,10082=>838,10083=>838, +10084=>838,10085=>838,10086=>838,10087=>838,10088=>838,10089=>838,10090=>838,10091=>838,10092=>838,10093=>838, +10094=>838,10095=>838,10096=>838,10097=>838,10098=>838,10099=>838,10100=>838,10101=>838,10102=>896,10103=>896, +10104=>896,10105=>896,10106=>896,10107=>896,10108=>896,10109=>896,10110=>896,10111=>896,10112=>838,10113=>838, +10114=>838,10115=>838,10116=>838,10117=>838,10118=>838,10119=>838,10120=>838,10121=>838,10122=>838,10123=>838, +10124=>838,10125=>838,10126=>838,10127=>838,10128=>838,10129=>838,10130=>838,10131=>838,10132=>838,10136=>838, +10137=>838,10138=>838,10139=>838,10140=>838,10141=>838,10142=>838,10143=>838,10144=>838,10145=>838,10146=>838, +10147=>838,10148=>838,10149=>838,10150=>838,10151=>838,10152=>838,10153=>838,10154=>838,10155=>838,10156=>838, +10157=>838,10158=>838,10159=>838,10161=>838,10162=>838,10163=>838,10164=>838,10165=>838,10166=>838,10167=>838, +10168=>838,10169=>838,10170=>838,10171=>838,10172=>838,10173=>838,10174=>838,10181=>390,10182=>390,10208=>494, +10214=>495,10215=>495,10216=>390,10217=>390,10218=>556,10219=>556,10224=>838,10225=>838,10226=>838,10227=>838, +10228=>1157,10229=>1434,10230=>1434,10231=>1434,10232=>1434,10233=>1434,10234=>1434,10235=>1434,10236=>1434,10237=>1434, +10238=>1434,10239=>1434,10240=>732,10241=>732,10242=>732,10243=>732,10244=>732,10245=>732,10246=>732,10247=>732, +10248=>732,10249=>732,10250=>732,10251=>732,10252=>732,10253=>732,10254=>732,10255=>732,10256=>732,10257=>732, +10258=>732,10259=>732,10260=>732,10261=>732,10262=>732,10263=>732,10264=>732,10265=>732,10266=>732,10267=>732, +10268=>732,10269=>732,10270=>732,10271=>732,10272=>732,10273=>732,10274=>732,10275=>732,10276=>732,10277=>732, +10278=>732,10279=>732,10280=>732,10281=>732,10282=>732,10283=>732,10284=>732,10285=>732,10286=>732,10287=>732, +10288=>732,10289=>732,10290=>732,10291=>732,10292=>732,10293=>732,10294=>732,10295=>732,10296=>732,10297=>732, +10298=>732,10299=>732,10300=>732,10301=>732,10302=>732,10303=>732,10304=>732,10305=>732,10306=>732,10307=>732, +10308=>732,10309=>732,10310=>732,10311=>732,10312=>732,10313=>732,10314=>732,10315=>732,10316=>732,10317=>732, +10318=>732,10319=>732,10320=>732,10321=>732,10322=>732,10323=>732,10324=>732,10325=>732,10326=>732,10327=>732, +10328=>732,10329=>732,10330=>732,10331=>732,10332=>732,10333=>732,10334=>732,10335=>732,10336=>732,10337=>732, +10338=>732,10339=>732,10340=>732,10341=>732,10342=>732,10343=>732,10344=>732,10345=>732,10346=>732,10347=>732, +10348=>732,10349=>732,10350=>732,10351=>732,10352=>732,10353=>732,10354=>732,10355=>732,10356=>732,10357=>732, +10358=>732,10359=>732,10360=>732,10361=>732,10362=>732,10363=>732,10364=>732,10365=>732,10366=>732,10367=>732, +10368=>732,10369=>732,10370=>732,10371=>732,10372=>732,10373=>732,10374=>732,10375=>732,10376=>732,10377=>732, +10378=>732,10379=>732,10380=>732,10381=>732,10382=>732,10383=>732,10384=>732,10385=>732,10386=>732,10387=>732, +10388=>732,10389=>732,10390=>732,10391=>732,10392=>732,10393=>732,10394=>732,10395=>732,10396=>732,10397=>732, +10398=>732,10399=>732,10400=>732,10401=>732,10402=>732,10403=>732,10404=>732,10405=>732,10406=>732,10407=>732, +10408=>732,10409=>732,10410=>732,10411=>732,10412=>732,10413=>732,10414=>732,10415=>732,10416=>732,10417=>732, +10418=>732,10419=>732,10420=>732,10421=>732,10422=>732,10423=>732,10424=>732,10425=>732,10426=>732,10427=>732, +10428=>732,10429=>732,10430=>732,10431=>732,10432=>732,10433=>732,10434=>732,10435=>732,10436=>732,10437=>732, +10438=>732,10439=>732,10440=>732,10441=>732,10442=>732,10443=>732,10444=>732,10445=>732,10446=>732,10447=>732, +10448=>732,10449=>732,10450=>732,10451=>732,10452=>732,10453=>732,10454=>732,10455=>732,10456=>732,10457=>732, +10458=>732,10459=>732,10460=>732,10461=>732,10462=>732,10463=>732,10464=>732,10465=>732,10466=>732,10467=>732, +10468=>732,10469=>732,10470=>732,10471=>732,10472=>732,10473=>732,10474=>732,10475=>732,10476=>732,10477=>732, +10478=>732,10479=>732,10480=>732,10481=>732,10482=>732,10483=>732,10484=>732,10485=>732,10486=>732,10487=>732, +10488=>732,10489=>732,10490=>732,10491=>732,10492=>732,10493=>732,10494=>732,10495=>732,10502=>838,10503=>838, +10506=>838,10507=>838,10560=>683,10561=>683,10627=>734,10628=>734,10702=>838,10703=>1000,10704=>1000,10705=>1000, +10706=>1000,10707=>1000,10708=>1000,10709=>1000,10731=>494,10746=>838,10747=>838,10752=>1000,10753=>1000,10754=>1000, +10764=>1325,10765=>521,10766=>521,10767=>521,10768=>521,10769=>521,10770=>521,10771=>521,10772=>521,10773=>521, +10774=>521,10775=>521,10776=>521,10777=>521,10778=>521,10779=>521,10780=>521,10799=>838,10877=>838,10878=>838, +10879=>838,10880=>838,10881=>838,10882=>838,10883=>838,10884=>838,10885=>838,10886=>838,10887=>838,10888=>838, +10889=>838,10890=>838,10891=>838,10892=>838,10893=>838,10894=>838,10895=>838,10896=>838,10897=>838,10898=>838, +10899=>838,10900=>838,10901=>838,10902=>838,10903=>838,10904=>838,10905=>838,10906=>838,10907=>838,10908=>838, +10909=>838,10910=>838,10911=>838,10912=>838,10926=>838,10927=>838,10928=>838,10929=>838,10930=>838,10931=>838, +10932=>838,10933=>838,10934=>838,10935=>838,10936=>838,10937=>838,10938=>838,11001=>838,11002=>838,11008=>838, +11009=>838,11010=>838,11011=>838,11012=>838,11013=>838,11014=>838,11015=>838,11016=>838,11017=>838,11018=>838, +11019=>838,11020=>838,11021=>838,11022=>836,11023=>836,11024=>836,11025=>836,11026=>945,11027=>945,11028=>945, +11029=>945,11030=>769,11031=>769,11032=>769,11033=>769,11034=>945,11039=>869,11040=>869,11041=>873,11042=>873, +11043=>873,11044=>1119,11091=>869,11092=>869,11360=>557,11361=>278,11362=>557,11363=>603,11364=>695,11365=>613, +11366=>392,11367=>752,11368=>634,11369=>656,11370=>579,11371=>685,11372=>525,11373=>781,11374=>863,11375=>684, +11376=>781,11377=>734,11378=>1128,11379=>961,11380=>592,11381=>654,11382=>568,11383=>660,11385=>414,11386=>612, +11387=>491,11388=>175,11389=>431,11390=>635,11391=>685,11800=>531,11810=>390,11811=>390,11812=>390,11813=>390, +11822=>531,19904=>896,19905=>896,19906=>896,19907=>896,19908=>896,19909=>896,19910=>896,19911=>896,19912=>896, +19913=>896,19914=>896,19915=>896,19916=>896,19917=>896,19918=>896,19919=>896,19920=>896,19921=>896,19922=>896, +19923=>896,19924=>896,19925=>896,19926=>896,19927=>896,19928=>896,19929=>896,19930=>896,19931=>896,19932=>896, +19933=>896,19934=>896,19935=>896,19936=>896,19937=>896,19938=>896,19939=>896,19940=>896,19941=>896,19942=>896, +19943=>896,19944=>896,19945=>896,19946=>896,19947=>896,19948=>896,19949=>896,19950=>896,19951=>896,19952=>896, +19953=>896,19954=>896,19955=>896,19956=>896,19957=>896,19958=>896,19959=>896,19960=>896,19961=>896,19962=>896, +19963=>896,19964=>896,19965=>896,19966=>896,19967=>896,42564=>635,42565=>521,42566=>354,42567=>338,42572=>1180, +42573=>1028,42576=>1029,42577=>906,42580=>1080,42581=>842,42582=>985,42583=>847,42594=>1024,42595=>925,42596=>1014, +42597=>900,42598=>863,42599=>1008,42600=>787,42601=>612,42602=>855,42603=>712,42604=>1358,42605=>1019,42606=>879, +42634=>805,42635=>722,42636=>611,42637=>583,42644=>686,42645=>634,42760=>493,42761=>493,42762=>493,42763=>493, +42764=>493,42765=>493,42766=>493,42767=>493,42768=>493,42769=>493,42770=>493,42771=>493,42772=>493,42773=>493, +42774=>493,42779=>369,42780=>369,42781=>252,42782=>252,42783=>252,42786=>385,42787=>356,42788=>472,42789=>472, +42790=>752,42791=>634,42792=>878,42793=>709,42794=>614,42795=>541,42800=>491,42801=>521,42802=>1250,42803=>985, +42804=>1219,42805=>1000,42806=>1155,42807=>996,42808=>971,42809=>818,42810=>971,42811=>818,42812=>959,42813=>818, +42814=>698,42815=>549,42822=>680,42823=>392,42824=>582,42825=>427,42826=>807,42827=>704,42830=>1358,42831=>1019, +42832=>603,42833=>635,42834=>734,42835=>774,42838=>787,42839=>635,42852=>605,42853=>635,42854=>605,42855=>635, +42880=>557,42881=>278,42882=>735,42883=>634,42889=>337,42890=>376,42891=>401,42892=>275,42893=>686,43003=>575, +43004=>603,43005=>863,43006=>295,43007=>1199,61184=>213,61185=>238,61186=>257,61187=>264,61188=>267,61189=>238, +61190=>213,61191=>238,61192=>257,61193=>264,61194=>257,61195=>238,61196=>213,61197=>238,61198=>257,61199=>264, +61200=>257,61201=>238,61202=>213,61203=>238,61204=>267,61205=>264,61206=>257,61207=>238,61208=>213,61209=>275, +63173=>612,64256=>722,64257=>646,64258=>646,64259=>1000,64260=>1000,64261=>686,64262=>861,64275=>1202,64276=>1202, +64277=>1196,64278=>1186,64279=>1529,64285=>272,64286=>0,64287=>471,64288=>636,64289=>856,64290=>774,64291=>906, +64292=>771,64293=>843,64294=>855,64295=>807,64296=>875,64297=>838,64298=>808,64299=>808,64300=>808,64301=>808, +64302=>629,64303=>629,64304=>629,64305=>608,64306=>448,64307=>594,64308=>640,64309=>272,64310=>374,64311=>1000, +64312=>648,64313=>336,64314=>592,64315=>556,64316=>599,64318=>659,64320=>441,64321=>700,64323=>640,64324=>604, +64326=>581,64327=>663,64328=>592,64329=>808,64330=>657,64331=>272,64332=>608,64333=>556,64334=>604,64335=>540, +65024=>0,65025=>0,65026=>0,65027=>0,65028=>0,65029=>0,65030=>0,65031=>0,65032=>0,65033=>0, +65034=>0,65035=>0,65036=>0,65037=>0,65038=>0,65039=>0,65056=>0,65057=>0,65058=>0,65059=>0, +65529=>0,65530=>0,65531=>0,65532=>0,65533=>1025); +$enc=''; +$diff=''; +$file='dejavusansi.z'; +$ctg='dejavusansi.ctg.z'; +$originalsize=574456; +// --- EOF --- --- /dev/null +++ b/tcpdf/fonts/dejavusansmono.php @@ -1,1 +1,322 @@ - +928,'Descent'=>-236,'CapHeight'=>9,'Flags'=>33,'FontBBox'=>'[-558 -375 718 1042]','ItalicAngle'=>0,'StemV'=>70,'MissingWidth'=>602); +$up=-63; +$ut=44; +$dw=602; +$cw=array( +0=>602,32=>602,33=>602,34=>602,35=>602,36=>602,37=>602,38=>602,39=>602,40=>602, +41=>602,42=>602,43=>602,44=>602,45=>602,46=>602,47=>602,48=>602,49=>602,50=>602, +51=>602,52=>602,53=>602,54=>602,55=>602,56=>602,57=>602,58=>602,59=>602,60=>602, +61=>602,62=>602,63=>602,64=>602,65=>602,66=>602,67=>602,68=>602,69=>602,70=>602, +71=>602,72=>602,73=>602,74=>602,75=>602,76=>602,77=>602,78=>602,79=>602,80=>602, +81=>602,82=>602,83=>602,84=>602,85=>602,86=>602,87=>602,88=>602,89=>602,90=>602, +91=>602,92=>602,93=>602,94=>602,95=>602,96=>602,97=>602,98=>602,99=>602,100=>602, +101=>602,102=>602,103=>602,104=>602,105=>602,106=>602,107=>602,108=>602,109=>602,110=>602, +111=>602,112=>602,113=>602,114=>602,115=>602,116=>602,117=>602,118=>602,119=>602,120=>602, +121=>602,122=>602,123=>602,124=>602,125=>602,126=>602,8364=>602,8218=>602,402=>602,8222=>602, +8230=>602,8224=>602,8225=>602,710=>602,8240=>602,352=>602,8249=>602,338=>602,381=>602,8216=>602, +8217=>602,8220=>602,8221=>602,8226=>602,8211=>602,8212=>602,732=>602,8482=>602,353=>602,8250=>602, +339=>602,382=>602,376=>602,160=>602,161=>602,162=>602,163=>602,164=>602,165=>602,166=>602, +167=>602,168=>602,169=>602,170=>602,171=>602,172=>602,173=>602,174=>602,175=>602,176=>602, +177=>602,178=>602,179=>602,180=>602,181=>602,182=>602,183=>602,184=>602,185=>602,186=>602, +187=>602,188=>602,189=>602,190=>602,191=>602,192=>602,193=>602,194=>602,195=>602,196=>602, +197=>602,198=>602,199=>602,200=>602,201=>602,202=>602,203=>602,204=>602,205=>602,206=>602, +207=>602,208=>602,209=>602,210=>602,211=>602,212=>602,213=>602,214=>602,215=>602,216=>602, +217=>602,218=>602,219=>602,220=>602,221=>602,222=>602,223=>602,224=>602,225=>602,226=>602, +227=>602,228=>602,229=>602,230=>602,231=>602,232=>602,233=>602,234=>602,235=>602,236=>602, +237=>602,238=>602,239=>602,240=>602,241=>602,242=>602,243=>602,244=>602,245=>602,246=>602, +247=>602,248=>602,249=>602,250=>602,251=>602,252=>602,253=>602,254=>602,255=>602,256=>602, +257=>602,258=>602,259=>602,260=>602,261=>602,262=>602,263=>602,264=>602,265=>602,266=>602, +267=>602,268=>602,269=>602,270=>602,271=>602,272=>602,273=>602,274=>602,275=>602,276=>602, +277=>602,278=>602,279=>602,280=>602,281=>602,282=>602,283=>602,284=>602,285=>602,286=>602, +287=>602,288=>602,289=>602,290=>602,291=>602,292=>602,293=>602,294=>602,295=>602,296=>602, +297=>602,298=>602,299=>602,300=>602,301=>602,302=>602,303=>602,304=>602,305=>602,306=>602, +307=>602,308=>602,309=>602,310=>602,311=>602,312=>602,313=>602,314=>602,315=>602,316=>602, +317=>602,318=>602,319=>602,320=>602,321=>602,322=>602,323=>602,324=>602,325=>602,326=>602, +327=>602,328=>602,329=>602,330=>602,331=>602,332=>602,333=>602,334=>602,335=>602,336=>602, +337=>602,340=>602,341=>602,342=>602,343=>602,344=>602,345=>602,346=>602,347=>602,348=>602, +349=>602,350=>602,351=>602,354=>602,355=>602,356=>602,357=>602,358=>602,359=>602,360=>602, +361=>602,362=>602,363=>602,364=>602,365=>602,366=>602,367=>602,368=>602,369=>602,370=>602, +371=>602,372=>602,373=>602,374=>602,375=>602,377=>602,378=>602,379=>602,380=>602,383=>602, +384=>602,385=>602,386=>602,387=>602,388=>602,389=>602,390=>602,391=>602,392=>602,393=>602, +394=>602,395=>602,396=>602,397=>602,398=>602,399=>602,400=>602,401=>602,403=>602,404=>602, +405=>602,406=>602,407=>602,408=>602,409=>602,410=>602,411=>602,412=>602,413=>602,414=>602, +415=>602,416=>602,417=>602,418=>602,419=>602,420=>602,421=>602,422=>602,423=>602,424=>602, +425=>602,426=>602,427=>602,428=>602,429=>602,430=>602,431=>602,432=>602,433=>602,434=>602, +435=>602,436=>602,437=>602,438=>602,439=>602,440=>602,441=>602,442=>602,443=>602,444=>602, +445=>602,446=>602,447=>602,448=>602,449=>602,450=>602,451=>602,461=>602,462=>602,463=>602, +464=>602,465=>602,466=>602,467=>602,468=>602,469=>602,470=>602,471=>602,472=>602,473=>602, +474=>602,475=>602,476=>602,477=>602,478=>602,479=>602,480=>602,481=>602,482=>602,483=>602, +486=>602,487=>602,488=>602,489=>602,490=>602,491=>602,492=>602,493=>602,494=>602,495=>602, +496=>602,500=>602,501=>602,502=>602,504=>602,505=>602,508=>602,509=>602,510=>602,511=>602, +512=>602,513=>602,514=>602,515=>602,516=>602,517=>602,518=>602,519=>602,520=>602,521=>602, +522=>602,523=>602,524=>602,525=>602,526=>602,527=>602,528=>602,529=>602,530=>602,531=>602, +532=>602,533=>602,534=>602,535=>602,536=>602,537=>602,538=>602,539=>602,540=>602,541=>602, +542=>602,543=>602,544=>602,545=>602,548=>602,549=>602,550=>602,551=>602,552=>602,553=>602, +554=>602,555=>602,556=>602,557=>602,558=>602,559=>602,560=>602,561=>602,562=>602,563=>602, +564=>602,565=>602,566=>602,567=>602,568=>602,569=>602,570=>602,571=>602,572=>602,573=>602, +574=>602,575=>602,576=>602,577=>602,580=>602,581=>602,588=>602,589=>602,592=>602,593=>602, +594=>602,595=>602,596=>602,597=>602,598=>602,599=>602,600=>602,601=>602,602=>602,603=>602, +604=>602,605=>602,606=>602,607=>602,608=>602,609=>602,610=>602,611=>602,612=>602,613=>602, +614=>602,615=>602,616=>602,617=>602,618=>602,619=>602,620=>602,621=>602,622=>602,623=>602, +624=>602,625=>602,626=>602,627=>602,628=>602,629=>602,630=>602,631=>602,632=>602,633=>602, +634=>602,635=>602,636=>602,637=>602,638=>602,639=>602,640=>602,641=>602,642=>602,643=>602, +644=>602,645=>602,646=>602,647=>602,648=>602,649=>602,650=>602,651=>602,652=>602,653=>602, +654=>602,655=>602,656=>602,657=>602,658=>602,659=>602,660=>602,661=>602,662=>602,663=>602, +664=>602,665=>602,666=>602,667=>602,668=>602,669=>602,670=>602,671=>602,672=>602,673=>602, +674=>602,675=>602,676=>602,677=>602,678=>602,679=>602,680=>602,681=>602,682=>602,683=>602, +684=>602,685=>602,686=>602,687=>602,688=>602,689=>602,690=>602,691=>602,692=>602,693=>602, +694=>602,695=>602,696=>602,697=>602,699=>602,700=>602,701=>602,702=>602,703=>602,704=>602, +705=>602,711=>602,712=>602,713=>602,716=>602,717=>602,720=>602,721=>602,722=>602,723=>602, +726=>602,727=>602,728=>602,729=>602,730=>602,731=>602,733=>602,734=>602,736=>602,737=>602, +738=>602,739=>602,740=>602,741=>602,742=>602,743=>602,744=>602,745=>602,750=>602,755=>602, +768=>602,769=>602,770=>602,771=>602,772=>602,773=>602,774=>602,775=>602,776=>602,777=>602, +778=>602,779=>602,780=>602,781=>602,782=>602,783=>602,784=>602,785=>602,786=>602,787=>602, +788=>602,789=>602,790=>602,791=>602,792=>602,793=>602,794=>602,795=>602,796=>602,797=>602, +798=>602,799=>602,800=>602,801=>602,802=>602,803=>602,804=>602,805=>602,806=>602,807=>602, +808=>602,809=>602,810=>602,811=>602,812=>602,813=>602,814=>602,815=>602,816=>602,817=>602, +818=>602,819=>602,820=>602,821=>602,822=>602,823=>602,824=>602,825=>602,826=>602,827=>602, +828=>602,829=>602,830=>602,831=>602,835=>602,856=>602,865=>602,884=>602,885=>602,890=>602, +894=>602,900=>602,901=>602,902=>602,903=>602,904=>602,905=>602,906=>602,908=>602,910=>602, +911=>602,912=>602,913=>602,914=>602,915=>602,916=>602,917=>602,918=>602,919=>602,920=>602, +921=>602,922=>602,923=>602,924=>602,925=>602,926=>602,927=>602,928=>602,929=>602,931=>602, +932=>602,933=>602,934=>602,935=>602,936=>602,937=>602,938=>602,939=>602,940=>602,941=>602, +942=>602,943=>602,944=>602,945=>602,946=>602,947=>602,948=>602,949=>602,950=>602,951=>602, +952=>602,953=>602,954=>602,955=>602,956=>602,957=>602,958=>602,959=>602,960=>602,961=>602, +962=>602,963=>602,964=>602,965=>602,966=>602,967=>602,968=>602,969=>602,970=>602,971=>602, +972=>602,973=>602,974=>602,976=>602,977=>602,978=>602,979=>602,980=>602,981=>602,982=>602, +983=>602,984=>602,985=>602,986=>602,987=>602,988=>602,989=>602,990=>602,991=>602,992=>602, +993=>602,1008=>602,1009=>602,1010=>602,1011=>602,1012=>602,1013=>602,1014=>602,1015=>602,1016=>602, +1017=>602,1018=>602,1019=>602,1020=>602,1021=>602,1022=>602,1023=>602,1024=>602,1025=>602,1026=>602, +1027=>602,1028=>602,1029=>602,1030=>602,1031=>602,1032=>602,1033=>602,1034=>602,1035=>602,1036=>602, +1037=>602,1038=>602,1039=>602,1040=>602,1041=>602,1042=>602,1043=>602,1044=>602,1045=>602,1046=>602, +1047=>602,1048=>602,1049=>602,1050=>602,1051=>602,1052=>602,1053=>602,1054=>602,1055=>602,1056=>602, +1057=>602,1058=>602,1059=>602,1060=>602,1061=>602,1062=>602,1063=>602,1064=>602,1065=>602,1066=>602, +1067=>602,1068=>602,1069=>602,1070=>602,1071=>602,1072=>602,1073=>602,1074=>602,1075=>602,1076=>602, +1077=>602,1078=>602,1079=>602,1080=>602,1081=>602,1082=>602,1083=>602,1084=>602,1085=>602,1086=>602, +1087=>602,1088=>602,1089=>602,1090=>602,1091=>602,1092=>602,1093=>602,1094=>602,1095=>602,1096=>602, +1097=>602,1098=>602,1099=>602,1100=>602,1101=>602,1102=>602,1103=>602,1104=>602,1105=>602,1106=>602, +1107=>602,1108=>602,1109=>602,1110=>602,1111=>602,1112=>602,1113=>602,1114=>602,1115=>602,1116=>602, +1117=>602,1118=>602,1119=>602,1122=>602,1123=>602,1138=>602,1139=>602,1168=>602,1169=>602,1170=>602, +1171=>602,1172=>602,1173=>602,1174=>602,1175=>602,1176=>602,1177=>602,1178=>602,1179=>602,1186=>602, +1187=>602,1188=>602,1189=>602,1194=>602,1195=>602,1196=>602,1197=>602,1198=>602,1199=>602,1200=>602, +1201=>602,1202=>602,1203=>602,1210=>602,1211=>602,1216=>602,1217=>602,1218=>602,1219=>602,1220=>602, +1223=>602,1224=>602,1227=>602,1228=>602,1231=>602,1232=>602,1233=>602,1234=>602,1235=>602,1236=>602, +1237=>602,1238=>602,1239=>602,1240=>602,1241=>602,1242=>602,1243=>602,1244=>602,1245=>602,1246=>602, +1247=>602,1248=>602,1249=>602,1250=>602,1251=>602,1252=>602,1253=>602,1254=>602,1255=>602,1256=>602, +1257=>602,1258=>602,1259=>602,1260=>602,1261=>602,1262=>602,1263=>602,1264=>602,1265=>602,1266=>602, +1267=>602,1268=>602,1269=>602,1270=>602,1271=>602,1272=>602,1273=>602,1296=>602,1297=>602,1306=>602, +1307=>602,1308=>602,1309=>602,1542=>602,1543=>602,1545=>602,1546=>602,1548=>602,1557=>602,1563=>602, +1567=>602,1569=>602,1570=>602,1571=>602,1572=>602,1573=>602,1574=>602,1575=>602,1576=>602,1577=>602, +1578=>602,1579=>602,1580=>602,1581=>602,1582=>602,1583=>602,1584=>602,1585=>602,1586=>602,1587=>602, +1588=>602,1589=>602,1590=>602,1591=>602,1592=>602,1593=>602,1594=>602,1600=>602,1601=>602,1602=>602, +1603=>602,1604=>602,1605=>602,1606=>602,1607=>602,1608=>602,1609=>602,1610=>602,1611=>602,1612=>602, +1613=>602,1614=>602,1615=>602,1616=>602,1617=>602,1618=>602,1619=>602,1620=>602,1621=>602,1626=>602, +1632=>602,1633=>602,1634=>602,1635=>602,1636=>602,1637=>602,1638=>602,1639=>602,1640=>602,1641=>602, +1642=>602,1643=>602,1644=>602,1645=>602,1652=>602,1657=>602,1658=>602,1659=>602,1662=>602,1663=>602, +1664=>602,1667=>602,1668=>602,1670=>602,1671=>602,1681=>602,1688=>602,1700=>602,1705=>602,1711=>602, +1726=>602,1740=>602,1776=>602,1777=>602,1778=>602,1779=>602,1780=>602,1781=>602,1782=>602,1783=>602, +1784=>602,1785=>602,3713=>602,3714=>602,3716=>602,3719=>602,3720=>602,3722=>602,3725=>602,3732=>602, +3733=>602,3734=>602,3735=>602,3737=>602,3738=>602,3739=>602,3740=>602,3741=>602,3742=>602,3743=>602, +3745=>602,3746=>602,3747=>602,3749=>602,3751=>602,3754=>602,3755=>602,3757=>602,3758=>602,3759=>602, +3760=>602,3761=>602,3762=>602,3763=>602,3764=>602,3765=>602,3766=>602,3767=>602,3768=>602,3769=>602, +3771=>602,3772=>602,3784=>602,3785=>602,3786=>602,3787=>602,3788=>602,3789=>602,4304=>602,4305=>602, +4306=>602,4307=>602,4308=>602,4309=>602,4310=>602,4311=>602,4312=>602,4313=>602,4314=>602,4315=>602, +4316=>602,4317=>602,4318=>602,4319=>602,4320=>602,4321=>602,4322=>602,4323=>602,4324=>602,4325=>602, +4326=>602,4327=>602,4328=>602,4329=>602,4330=>602,4331=>602,4332=>602,4333=>602,4334=>602,4335=>602, +4336=>602,4337=>602,4338=>602,4339=>602,4340=>602,4341=>602,4342=>602,4343=>602,4344=>602,4345=>602, +4346=>602,4347=>602,4348=>602,7426=>602,7432=>602,7433=>602,7444=>602,7446=>602,7447=>602,7453=>602, +7454=>602,7455=>602,7468=>602,7469=>602,7470=>602,7472=>602,7473=>602,7474=>602,7475=>602,7476=>602, +7477=>602,7478=>602,7479=>602,7480=>602,7481=>602,7482=>602,7483=>602,7484=>602,7486=>602,7487=>602, +7488=>602,7489=>602,7490=>602,7491=>602,7492=>602,7493=>602,7494=>602,7495=>602,7496=>602,7497=>602, +7498=>602,7499=>602,7500=>602,7501=>602,7502=>602,7503=>602,7504=>602,7505=>602,7506=>602,7507=>602, +7508=>602,7509=>602,7510=>602,7511=>602,7512=>602,7513=>602,7514=>602,7515=>602,7522=>602,7523=>602, +7524=>602,7525=>602,7543=>602,7544=>602,7547=>602,7557=>602,7579=>602,7580=>602,7581=>602,7582=>602, +7583=>602,7584=>602,7585=>602,7586=>602,7587=>602,7588=>602,7589=>602,7590=>602,7591=>602,7592=>602, +7593=>602,7594=>602,7595=>602,7596=>602,7597=>602,7598=>602,7599=>602,7600=>602,7601=>602,7602=>602, +7603=>602,7604=>602,7605=>602,7606=>602,7607=>602,7609=>602,7610=>602,7611=>602,7612=>602,7613=>602, +7614=>602,7615=>602,7680=>602,7681=>602,7682=>602,7683=>602,7684=>602,7685=>602,7686=>602,7687=>602, +7688=>602,7689=>602,7690=>602,7691=>602,7692=>602,7693=>602,7694=>602,7695=>602,7696=>602,7697=>602, +7698=>602,7699=>602,7704=>602,7705=>602,7706=>602,7707=>602,7708=>602,7709=>602,7710=>602,7711=>602, +7712=>602,7713=>602,7714=>602,7715=>602,7716=>602,7717=>602,7718=>602,7719=>602,7720=>602,7721=>602, +7722=>602,7723=>602,7724=>602,7725=>602,7728=>602,7729=>602,7730=>602,7731=>602,7732=>602,7733=>602, +7734=>602,7735=>602,7736=>602,7737=>602,7738=>602,7739=>602,7740=>602,7741=>602,7742=>602,7743=>602, +7744=>602,7745=>602,7746=>602,7747=>602,7748=>602,7749=>602,7750=>602,7751=>602,7752=>602,7753=>602, +7754=>602,7755=>602,7756=>602,7757=>602,7764=>602,7765=>602,7766=>602,7767=>602,7768=>602,7769=>602, +7770=>602,7771=>602,7772=>602,7773=>602,7774=>602,7775=>602,7776=>602,7777=>602,7778=>602,7779=>602, +7784=>602,7785=>602,7786=>602,7787=>602,7788=>602,7789=>602,7790=>602,7791=>602,7792=>602,7793=>602, +7794=>602,7795=>602,7796=>602,7797=>602,7798=>602,7799=>602,7800=>602,7801=>602,7804=>602,7805=>602, +7806=>602,7807=>602,7808=>602,7809=>602,7810=>602,7811=>602,7812=>602,7813=>602,7814=>602,7815=>602, +7816=>602,7817=>602,7818=>602,7819=>602,7820=>602,7821=>602,7822=>602,7823=>602,7824=>602,7825=>602, +7826=>602,7827=>602,7828=>602,7829=>602,7830=>602,7831=>602,7832=>602,7833=>602,7835=>602,7839=>602, +7840=>602,7841=>602,7852=>602,7853=>602,7856=>602,7857=>602,7862=>602,7863=>602,7864=>602,7865=>602, +7868=>602,7869=>602,7878=>602,7879=>602,7882=>602,7883=>602,7884=>602,7885=>602,7896=>602,7897=>602, +7898=>602,7899=>602,7900=>602,7901=>602,7904=>602,7905=>602,7906=>602,7907=>602,7908=>602,7909=>602, +7912=>602,7913=>602,7914=>602,7915=>602,7918=>602,7919=>602,7920=>602,7921=>602,7922=>602,7923=>602, +7924=>602,7925=>602,7928=>602,7929=>602,7936=>602,7937=>602,7938=>602,7939=>602,7940=>602,7941=>602, +7942=>602,7943=>602,7944=>602,7945=>602,7946=>602,7947=>602,7948=>602,7949=>602,7950=>602,7951=>602, +7952=>602,7953=>602,7954=>602,7955=>602,7956=>602,7957=>602,7960=>602,7961=>602,7962=>602,7963=>602, +7964=>602,7965=>602,7968=>602,7969=>602,7970=>602,7971=>602,7972=>602,7973=>602,7974=>602,7975=>602, +7976=>602,7977=>602,7978=>602,7979=>602,7980=>602,7981=>602,7982=>602,7983=>602,7984=>602,7985=>602, +7986=>602,7987=>602,7988=>602,7989=>602,7990=>602,7991=>602,7992=>602,7993=>602,7994=>602,7995=>602, +7996=>602,7997=>602,7998=>602,7999=>602,8000=>602,8001=>602,8002=>602,8003=>602,8004=>602,8005=>602, +8008=>602,8009=>602,8010=>602,8011=>602,8012=>602,8013=>602,8016=>602,8017=>602,8018=>602,8019=>602, +8020=>602,8021=>602,8022=>602,8023=>602,8025=>602,8027=>602,8029=>602,8031=>602,8032=>602,8033=>602, +8034=>602,8035=>602,8036=>602,8037=>602,8038=>602,8039=>602,8040=>602,8041=>602,8042=>602,8043=>602, +8044=>602,8045=>602,8046=>602,8047=>602,8048=>602,8049=>602,8050=>602,8051=>602,8052=>602,8053=>602, +8054=>602,8055=>602,8056=>602,8057=>602,8058=>602,8059=>602,8060=>602,8061=>602,8064=>602,8065=>602, +8066=>602,8067=>602,8068=>602,8069=>602,8070=>602,8071=>602,8072=>602,8073=>602,8074=>602,8075=>602, +8076=>602,8077=>602,8078=>602,8079=>602,8080=>602,8081=>602,8082=>602,8083=>602,8084=>602,8085=>602, +8086=>602,8087=>602,8088=>602,8089=>602,8090=>602,8091=>602,8092=>602,8093=>602,8094=>602,8095=>602, +8096=>602,8097=>602,8098=>602,8099=>602,8100=>602,8101=>602,8102=>602,8103=>602,8104=>602,8105=>602, +8106=>602,8107=>602,8108=>602,8109=>602,8110=>602,8111=>602,8112=>602,8113=>602,8114=>602,8115=>602, +8116=>602,8118=>602,8119=>602,8120=>602,8121=>602,8122=>602,8123=>602,8124=>602,8125=>602,8126=>602, +8127=>602,8128=>602,8129=>602,8130=>602,8131=>602,8132=>602,8134=>602,8135=>602,8136=>602,8137=>602, +8138=>602,8139=>602,8140=>602,8141=>602,8142=>602,8143=>602,8144=>602,8145=>602,8146=>602,8147=>602, +8150=>602,8151=>602,8152=>602,8153=>602,8154=>602,8155=>602,8157=>602,8158=>602,8159=>602,8160=>602, +8161=>602,8162=>602,8163=>602,8164=>602,8165=>602,8166=>602,8167=>602,8168=>602,8169=>602,8170=>602, +8171=>602,8172=>602,8173=>602,8174=>602,8175=>602,8178=>602,8179=>602,8180=>602,8182=>602,8183=>602, +8184=>602,8185=>602,8186=>602,8187=>602,8188=>602,8189=>602,8190=>602,8192=>602,8193=>602,8194=>602, +8195=>602,8196=>602,8197=>602,8198=>602,8199=>602,8200=>602,8201=>602,8202=>602,8208=>602,8209=>602, +8210=>602,8213=>602,8215=>602,8219=>602,8223=>602,8227=>602,8239=>602,8241=>602,8242=>602,8243=>602, +8244=>602,8245=>602,8246=>602,8247=>602,8252=>602,8253=>602,8254=>602,8261=>602,8262=>602,8263=>602, +8264=>602,8265=>602,8287=>602,8304=>602,8305=>602,8308=>602,8309=>602,8310=>602,8311=>602,8312=>602, +8313=>602,8314=>602,8315=>602,8316=>602,8317=>602,8318=>602,8319=>602,8320=>602,8321=>602,8322=>602, +8323=>602,8324=>602,8325=>602,8326=>602,8327=>602,8328=>602,8329=>602,8330=>602,8331=>602,8332=>602, +8333=>602,8334=>602,8336=>602,8337=>602,8338=>602,8339=>602,8340=>602,8352=>602,8353=>602,8354=>602, +8355=>602,8356=>602,8357=>602,8358=>602,8359=>602,8360=>602,8361=>602,8362=>602,8363=>602,8365=>602, +8366=>602,8367=>602,8368=>602,8369=>602,8370=>602,8371=>602,8372=>602,8373=>602,8376=>602,8377=>602, +8450=>602,8453=>602,8461=>602,8462=>602,8463=>602,8469=>602,8470=>602,8471=>602,8473=>602,8474=>602, +8477=>602,8484=>602,8486=>602,8490=>602,8491=>602,8494=>602,8531=>602,8532=>602,8533=>602,8534=>602, +8535=>602,8536=>602,8537=>602,8538=>602,8539=>602,8540=>602,8541=>602,8542=>602,8543=>602,8592=>602, +8593=>602,8594=>602,8595=>602,8596=>602,8597=>602,8598=>602,8599=>602,8600=>602,8601=>602,8602=>602, +8603=>602,8604=>602,8605=>602,8606=>602,8607=>602,8608=>602,8609=>602,8610=>602,8611=>602,8612=>602, +8613=>602,8614=>602,8615=>602,8616=>602,8617=>602,8618=>602,8619=>602,8620=>602,8621=>602,8622=>602, +8623=>602,8624=>602,8625=>602,8626=>602,8627=>602,8628=>602,8629=>602,8630=>602,8631=>602,8632=>602, +8633=>602,8634=>602,8635=>602,8636=>602,8637=>602,8638=>602,8639=>602,8640=>602,8641=>602,8642=>602, +8643=>602,8644=>602,8645=>602,8646=>602,8647=>602,8648=>602,8649=>602,8650=>602,8651=>602,8652=>602, +8653=>602,8654=>602,8655=>602,8656=>602,8657=>602,8658=>602,8659=>602,8660=>602,8661=>602,8662=>602, +8663=>602,8664=>602,8665=>602,8666=>602,8667=>602,8668=>602,8669=>602,8670=>602,8671=>602,8672=>602, +8673=>602,8674=>602,8675=>602,8676=>602,8677=>602,8678=>602,8679=>602,8680=>602,8681=>602,8682=>602, +8683=>602,8684=>602,8685=>602,8686=>602,8687=>602,8688=>602,8689=>602,8690=>602,8691=>602,8692=>602, +8693=>602,8694=>602,8695=>602,8696=>602,8697=>602,8698=>602,8699=>602,8700=>602,8701=>602,8702=>602, +8703=>602,8704=>602,8705=>602,8706=>602,8707=>602,8708=>602,8709=>602,8710=>602,8711=>602,8712=>602, +8713=>602,8714=>602,8715=>602,8716=>602,8717=>602,8719=>602,8721=>602,8722=>602,8723=>602,8725=>602, +8727=>602,8728=>602,8729=>602,8730=>602,8731=>602,8732=>602,8733=>602,8734=>602,8735=>602,8736=>602, +8743=>602,8744=>602,8745=>602,8746=>602,8747=>602,8748=>602,8749=>602,8756=>602,8757=>602,8758=>602, +8759=>602,8760=>602,8761=>602,8762=>602,8763=>602,8764=>602,8765=>602,8769=>602,8770=>602,8771=>602, +8772=>602,8773=>602,8774=>602,8775=>602,8776=>602,8777=>602,8778=>602,8779=>602,8780=>602,8781=>602, +8782=>602,8783=>602,8784=>602,8785=>602,8786=>602,8787=>602,8788=>602,8789=>602,8790=>602,8791=>602, +8792=>602,8793=>602,8794=>602,8795=>602,8796=>602,8797=>602,8798=>602,8799=>602,8800=>602,8801=>602, +8802=>602,8803=>602,8804=>602,8805=>602,8806=>602,8807=>602,8808=>602,8809=>602,8813=>602,8814=>602, +8815=>602,8816=>602,8817=>602,8818=>602,8819=>602,8820=>602,8821=>602,8822=>602,8823=>602,8824=>602, +8825=>602,8826=>602,8827=>602,8828=>602,8829=>602,8830=>602,8831=>602,8832=>602,8833=>602,8834=>602, +8835=>602,8836=>602,8837=>602,8838=>602,8839=>602,8840=>602,8841=>602,8842=>602,8843=>602,8847=>602, +8848=>602,8849=>602,8850=>602,8853=>602,8854=>602,8855=>602,8856=>602,8857=>602,8858=>602,8859=>602, +8860=>602,8861=>602,8862=>602,8863=>602,8864=>602,8865=>602,8866=>602,8867=>602,8868=>602,8869=>602, +8901=>602,8902=>602,8909=>602,8922=>602,8923=>602,8924=>602,8925=>602,8926=>602,8927=>602,8928=>602, +8929=>602,8930=>602,8931=>602,8932=>602,8933=>602,8934=>602,8935=>602,8936=>602,8937=>602,8943=>602, +8960=>602,8961=>602,8962=>602,8963=>602,8964=>602,8965=>602,8966=>602,8968=>602,8969=>602,8970=>602, +8971=>602,8972=>602,8973=>602,8974=>602,8975=>602,8976=>602,8977=>602,8978=>602,8979=>602,8980=>602, +8981=>602,8984=>602,8985=>602,8988=>602,8989=>602,8990=>602,8991=>602,8992=>602,8993=>602,8997=>602, +8998=>602,8999=>602,9000=>602,9003=>602,9013=>602,9015=>602,9016=>602,9017=>602,9018=>602,9019=>602, +9020=>602,9021=>602,9022=>602,9025=>602,9026=>602,9027=>602,9028=>602,9031=>602,9032=>602,9033=>602, +9035=>602,9036=>602,9037=>602,9040=>602,9042=>602,9043=>602,9044=>602,9047=>602,9048=>602,9049=>602, +9050=>602,9051=>602,9052=>602,9054=>602,9055=>602,9056=>602,9059=>602,9060=>602,9061=>602,9064=>602, +9065=>602,9067=>602,9068=>602,9069=>602,9070=>602,9071=>602,9072=>602,9075=>602,9076=>602,9077=>602, +9078=>602,9079=>602,9080=>602,9081=>602,9082=>602,9085=>602,9088=>602,9089=>602,9090=>602,9091=>602, +9096=>602,9097=>602,9098=>602,9099=>602,9109=>602,9115=>602,9116=>602,9117=>602,9118=>602,9119=>602, +9120=>602,9121=>602,9122=>602,9123=>602,9124=>602,9125=>602,9126=>602,9127=>602,9128=>602,9129=>602, +9130=>602,9131=>602,9132=>602,9133=>602,9134=>602,9166=>602,9167=>602,9251=>602,9472=>602,9473=>602, +9474=>602,9475=>602,9476=>602,9477=>602,9478=>602,9479=>602,9480=>602,9481=>602,9482=>602,9483=>602, +9484=>602,9485=>602,9486=>602,9487=>602,9488=>602,9489=>602,9490=>602,9491=>602,9492=>602,9493=>602, +9494=>602,9495=>602,9496=>602,9497=>602,9498=>602,9499=>602,9500=>602,9501=>602,9502=>602,9503=>602, +9504=>602,9505=>602,9506=>602,9507=>602,9508=>602,9509=>602,9510=>602,9511=>602,9512=>602,9513=>602, +9514=>602,9515=>602,9516=>602,9517=>602,9518=>602,9519=>602,9520=>602,9521=>602,9522=>602,9523=>602, +9524=>602,9525=>602,9526=>602,9527=>602,9528=>602,9529=>602,9530=>602,9531=>602,9532=>602,9533=>602, +9534=>602,9535=>602,9536=>602,9537=>602,9538=>602,9539=>602,9540=>602,9541=>602,9542=>602,9543=>602, +9544=>602,9545=>602,9546=>602,9547=>602,9548=>602,9549=>602,9550=>602,9551=>602,9552=>602,9553=>602, +9554=>602,9555=>602,9556=>602,9557=>602,9558=>602,9559=>602,9560=>602,9561=>602,9562=>602,9563=>602, +9564=>602,9565=>602,9566=>602,9567=>602,9568=>602,9569=>602,9570=>602,9571=>602,9572=>602,9573=>602, +9574=>602,9575=>602,9576=>602,9577=>602,9578=>602,9579=>602,9580=>602,9581=>602,9582=>602,9583=>602, +9584=>602,9585=>602,9586=>602,9587=>602,9588=>602,9589=>602,9590=>602,9591=>602,9592=>602,9593=>602, +9594=>602,9595=>602,9596=>602,9597=>602,9598=>602,9599=>602,9600=>602,9601=>602,9602=>602,9603=>602, +9604=>602,9605=>602,9606=>602,9607=>602,9608=>602,9609=>602,9610=>602,9611=>602,9612=>602,9613=>602, +9614=>602,9615=>602,9616=>602,9617=>602,9618=>602,9619=>602,9620=>602,9621=>602,9622=>602,9623=>602, +9624=>602,9625=>602,9626=>602,9627=>602,9628=>602,9629=>602,9630=>602,9631=>602,9632=>602,9633=>602, +9634=>602,9635=>602,9636=>602,9637=>602,9638=>602,9639=>602,9640=>602,9641=>602,9642=>602,9643=>602, +9644=>602,9645=>602,9646=>602,9647=>602,9648=>602,9649=>602,9650=>602,9651=>602,9652=>602,9653=>602, +9654=>602,9655=>602,9656=>602,9657=>602,9658=>602,9659=>602,9660=>602,9661=>602,9662=>602,9663=>602, +9664=>602,9665=>602,9666=>602,9667=>602,9668=>602,9669=>602,9670=>602,9671=>602,9672=>602,9673=>602, +9674=>602,9675=>602,9676=>602,9677=>602,9678=>602,9679=>602,9680=>602,9681=>602,9682=>602,9683=>602, +9684=>602,9685=>602,9686=>602,9687=>602,9688=>602,9689=>602,9690=>602,9691=>602,9692=>602,9693=>602, +9694=>602,9695=>602,9696=>602,9697=>602,9698=>602,9699=>602,9700=>602,9701=>602,9702=>602,9703=>602, +9704=>602,9705=>602,9706=>602,9707=>602,9708=>602,9709=>602,9710=>602,9711=>602,9712=>602,9713=>602, +9714=>602,9715=>602,9716=>602,9717=>602,9718=>602,9719=>602,9720=>602,9721=>602,9722=>602,9723=>602, +9724=>602,9725=>602,9726=>602,9727=>602,9728=>602,9729=>602,9730=>602,9731=>602,9732=>602,9733=>602, +9734=>602,9735=>602,9736=>602,9737=>602,9738=>602,9739=>602,9740=>602,9741=>602,9742=>602,9743=>602, +9744=>602,9745=>602,9746=>602,9747=>602,9748=>602,9749=>602,9750=>602,9751=>602,9752=>602,9753=>602, +9754=>602,9755=>602,9756=>602,9757=>602,9758=>602,9759=>602,9760=>602,9761=>602,9762=>602,9763=>602, +9764=>602,9765=>602,9766=>602,9767=>602,9768=>602,9769=>602,9770=>602,9771=>602,9772=>602,9773=>602, +9774=>602,9775=>602,9784=>602,9785=>602,9786=>602,9787=>602,9788=>602,9789=>602,9790=>602,9791=>602, +9792=>602,9793=>602,9794=>602,9795=>602,9796=>602,9797=>602,9798=>602,9799=>602,9800=>602,9801=>602, +9802=>602,9803=>602,9804=>602,9805=>602,9806=>602,9807=>602,9808=>602,9809=>602,9810=>602,9811=>602, +9812=>602,9813=>602,9814=>602,9815=>602,9816=>602,9817=>602,9818=>602,9819=>602,9820=>602,9821=>602, +9822=>602,9823=>602,9824=>602,9825=>602,9826=>602,9827=>602,9828=>602,9829=>602,9830=>602,9831=>602, +9832=>602,9833=>602,9834=>602,9835=>602,9836=>602,9837=>602,9838=>602,9839=>602,9840=>602,9841=>602, +9842=>602,9843=>602,9844=>602,9845=>602,9846=>602,9847=>602,9848=>602,9849=>602,9850=>602,9851=>602, +9852=>602,9853=>602,9854=>602,9855=>602,9856=>602,9857=>602,9858=>602,9859=>602,9860=>602,9861=>602, +9862=>602,9863=>602,9864=>602,9865=>602,9866=>602,9867=>602,9872=>602,9873=>602,9874=>602,9875=>602, +9876=>602,9877=>602,9878=>602,9879=>602,9880=>602,9881=>602,9882=>602,9883=>602,9884=>602,9888=>602, +9889=>602,9904=>602,9905=>602,9985=>602,9986=>602,9987=>602,9988=>602,9990=>602,9991=>602,9992=>602, +9993=>602,9996=>602,9997=>602,9998=>602,9999=>602,10000=>602,10001=>602,10002=>602,10003=>602,10004=>602, +10005=>602,10006=>602,10007=>602,10008=>602,10009=>602,10010=>602,10011=>602,10012=>602,10013=>602,10014=>602, +10015=>602,10016=>602,10017=>602,10018=>602,10019=>602,10020=>602,10021=>602,10022=>602,10023=>602,10025=>602, +10026=>602,10027=>602,10028=>602,10029=>602,10030=>602,10031=>602,10032=>602,10033=>602,10034=>602,10035=>602, +10036=>602,10037=>602,10038=>602,10039=>602,10040=>602,10041=>602,10042=>602,10043=>602,10044=>602,10045=>602, +10046=>602,10047=>602,10048=>602,10049=>602,10050=>602,10051=>602,10052=>602,10053=>602,10054=>602,10055=>602, +10056=>602,10057=>602,10058=>602,10059=>602,10061=>602,10063=>602,10064=>602,10065=>602,10066=>602,10070=>602, +10072=>602,10073=>602,10074=>602,10075=>602,10076=>602,10077=>602,10078=>602,10081=>602,10082=>602,10083=>602, +10084=>602,10085=>602,10086=>602,10087=>602,10088=>602,10089=>602,10090=>602,10091=>602,10092=>602,10093=>602, +10094=>602,10095=>602,10096=>602,10097=>602,10098=>602,10099=>602,10100=>602,10101=>602,10132=>602,10136=>602, +10137=>602,10138=>602,10139=>602,10140=>602,10141=>602,10142=>602,10143=>602,10144=>602,10145=>602,10146=>602, +10147=>602,10148=>602,10149=>602,10150=>602,10151=>602,10152=>602,10153=>602,10154=>602,10155=>602,10156=>602, +10157=>602,10158=>602,10159=>602,10161=>602,10162=>602,10163=>602,10164=>602,10165=>602,10166=>602,10167=>602, +10168=>602,10169=>602,10170=>602,10171=>602,10172=>602,10173=>602,10174=>602,10181=>602,10182=>602,10208=>602, +10216=>602,10217=>602,10731=>602,10746=>602,10747=>602,10799=>602,11026=>602,11027=>602,11028=>602,11029=>602, +11030=>602,11031=>602,11032=>602,11033=>602,11034=>602,11364=>602,11373=>602,11374=>602,11375=>602,11376=>602, +11381=>602,11382=>602,11383=>602,11385=>602,11386=>602,11388=>602,11389=>602,11390=>602,11391=>602,11800=>602, +11810=>602,11811=>602,11812=>602,11813=>602,11822=>602,42760=>602,42761=>602,42762=>602,42763=>602,42764=>602, +42765=>602,42766=>602,42767=>602,42768=>602,42769=>602,42770=>602,42771=>602,42772=>602,42773=>602,42774=>602, +42779=>602,42780=>602,42781=>602,42782=>602,42783=>602,42786=>602,42787=>602,42788=>602,42789=>602,42790=>602, +42791=>602,42889=>602,42890=>602,42891=>602,42892=>602,42893=>602,63173=>602,64257=>602,64258=>602,64338=>602, +64339=>602,64340=>602,64341=>602,64342=>602,64343=>602,64344=>602,64345=>602,64346=>602,64347=>602,64348=>602, +64349=>602,64350=>602,64351=>602,64352=>602,64353=>602,64354=>602,64355=>602,64356=>602,64357=>602,64358=>602, +64359=>602,64360=>602,64361=>602,64362=>602,64363=>602,64364=>602,64365=>602,64366=>602,64367=>602,64368=>602, +64369=>602,64370=>602,64371=>602,64372=>602,64373=>602,64374=>602,64375=>602,64376=>602,64377=>602,64378=>602, +64379=>602,64380=>602,64381=>602,64382=>602,64383=>602,64384=>602,64385=>602,64394=>602,64395=>602,64396=>602, +64397=>602,64398=>602,64399=>602,64400=>602,64401=>602,64402=>602,64403=>602,64404=>602,64405=>602,64414=>602, +64415=>602,64426=>602,64427=>602,64428=>602,64429=>602,64488=>602,64489=>602,64508=>602,64509=>602,64510=>602, +64511=>602,65136=>602,65137=>602,65138=>602,65139=>602,65140=>602,65142=>602,65143=>602,65144=>602,65145=>602, +65146=>602,65147=>602,65148=>602,65149=>602,65150=>602,65151=>602,65152=>602,65153=>602,65154=>602,65155=>602, +65156=>602,65157=>602,65158=>602,65159=>602,65160=>602,65161=>602,65162=>602,65163=>602,65164=>602,65165=>602, +65166=>602,65167=>602,65168=>602,65169=>602,65170=>602,65171=>602,65172=>602,65173=>602,65174=>602,65175=>602, +65176=>602,65177=>602,65178=>602,65179=>602,65180=>602,65181=>602,65182=>602,65183=>602,65184=>602,65185=>602, +65186=>602,65187=>602,65188=>602,65189=>602,65190=>602,65191=>602,65192=>602,65193=>602,65194=>602,65195=>602, +65196=>602,65197=>602,65198=>602,65199=>602,65200=>602,65201=>602,65202=>602,65203=>602,65204=>602,65205=>602, +65206=>602,65207=>602,65208=>602,65209=>602,65210=>602,65211=>602,65212=>602,65213=>602,65214=>602,65215=>602, +65216=>602,65217=>602,65218=>602,65219=>602,65220=>602,65221=>602,65222=>602,65223=>602,65224=>602,65225=>602, +65226=>602,65227=>602,65228=>602,65229=>602,65230=>602,65231=>602,65232=>602,65233=>602,65234=>602,65235=>602, +65236=>602,65237=>602,65238=>602,65239=>602,65240=>602,65241=>602,65242=>602,65243=>602,65244=>602,65245=>602, +65246=>602,65247=>602,65248=>602,65249=>602,65250=>602,65251=>602,65252=>602,65253=>602,65254=>602,65255=>602, +65256=>602,65257=>602,65258=>602,65259=>602,65260=>602,65261=>602,65262=>602,65263=>602,65264=>602,65265=>602, +65266=>602,65267=>602,65268=>602,65269=>602,65270=>602,65271=>602,65272=>602,65273=>602,65274=>602,65275=>602, +65276=>602,65279=>602,65529=>602,65530=>602,65531=>602,65532=>602,65533=>602); +$enc=''; +$diff=''; +$file='dejavusansmono.z'; +$ctg='dejavusansmono.ctg.z'; +$originalsize=323288; +// --- EOF --- --- /dev/null +++ b/tcpdf/fonts/dejavusansmonob.php @@ -1,1 +1,309 @@ - +928,'Descent'=>-236,'CapHeight'=>13,'Flags'=>33,'FontBBox'=>'[-446 -394 731 1052]','ItalicAngle'=>0,'StemV'=>120,'MissingWidth'=>602); +$up=-63; +$ut=44; +$dw=602; +$cw=array( +0=>602,32=>602,33=>602,34=>602,35=>602,36=>602,37=>602,38=>602,39=>602,40=>602, +41=>602,42=>602,43=>602,44=>602,45=>602,46=>602,47=>602,48=>602,49=>602,50=>602, +51=>602,52=>602,53=>602,54=>602,55=>602,56=>602,57=>602,58=>602,59=>602,60=>602, +61=>602,62=>602,63=>602,64=>602,65=>602,66=>602,67=>602,68=>602,69=>602,70=>602, +71=>602,72=>602,73=>602,74=>602,75=>602,76=>602,77=>602,78=>602,79=>602,80=>602, +81=>602,82=>602,83=>602,84=>602,85=>602,86=>602,87=>602,88=>602,89=>602,90=>602, +91=>602,92=>602,93=>602,94=>602,95=>602,96=>602,97=>602,98=>602,99=>602,100=>602, +101=>602,102=>602,103=>602,104=>602,105=>602,106=>602,107=>602,108=>602,109=>602,110=>602, +111=>602,112=>602,113=>602,114=>602,115=>602,116=>602,117=>602,118=>602,119=>602,120=>602, +121=>602,122=>602,123=>602,124=>602,125=>602,126=>602,8364=>602,8218=>602,402=>602,8222=>602, +8230=>602,8224=>602,8225=>602,710=>602,8240=>602,352=>602,8249=>602,338=>602,381=>602,8216=>602, +8217=>602,8220=>602,8221=>602,8226=>602,8211=>602,8212=>602,732=>602,8482=>602,353=>602,8250=>602, +339=>602,382=>602,376=>602,160=>602,161=>602,162=>602,163=>602,164=>602,165=>602,166=>602, +167=>602,168=>602,169=>602,170=>602,171=>602,172=>602,173=>602,174=>602,175=>602,176=>602, +177=>602,178=>602,179=>602,180=>602,181=>602,182=>602,183=>602,184=>602,185=>602,186=>602, +187=>602,188=>602,189=>602,190=>602,191=>602,192=>602,193=>602,194=>602,195=>602,196=>602, +197=>602,198=>602,199=>602,200=>602,201=>602,202=>602,203=>602,204=>602,205=>602,206=>602, +207=>602,208=>602,209=>602,210=>602,211=>602,212=>602,213=>602,214=>602,215=>602,216=>602, +217=>602,218=>602,219=>602,220=>602,221=>602,222=>602,223=>602,224=>602,225=>602,226=>602, +227=>602,228=>602,229=>602,230=>602,231=>602,232=>602,233=>602,234=>602,235=>602,236=>602, +237=>602,238=>602,239=>602,240=>602,241=>602,242=>602,243=>602,244=>602,245=>602,246=>602, +247=>602,248=>602,249=>602,250=>602,251=>602,252=>602,253=>602,254=>602,255=>602,256=>602, +257=>602,258=>602,259=>602,260=>602,261=>602,262=>602,263=>602,264=>602,265=>602,266=>602, +267=>602,268=>602,269=>602,270=>602,271=>602,272=>602,273=>602,274=>602,275=>602,276=>602, +277=>602,278=>602,279=>602,280=>602,281=>602,282=>602,283=>602,284=>602,285=>602,286=>602, +287=>602,288=>602,289=>602,290=>602,291=>602,292=>602,293=>602,294=>602,295=>602,296=>602, +297=>602,298=>602,299=>602,300=>602,301=>602,302=>602,303=>602,304=>602,305=>602,306=>602, +307=>602,308=>602,309=>602,310=>602,311=>602,312=>602,313=>602,314=>602,315=>602,316=>602, +317=>602,318=>602,319=>602,320=>602,321=>602,322=>602,323=>602,324=>602,325=>602,326=>602, +327=>602,328=>602,329=>602,330=>602,331=>602,332=>602,333=>602,334=>602,335=>602,336=>602, +337=>602,340=>602,341=>602,342=>602,343=>602,344=>602,345=>602,346=>602,347=>602,348=>602, +349=>602,350=>602,351=>602,354=>602,355=>602,356=>602,357=>602,358=>602,359=>602,360=>602, +361=>602,362=>602,363=>602,364=>602,365=>602,366=>602,367=>602,368=>602,369=>602,370=>602, +371=>602,372=>602,373=>602,374=>602,375=>602,377=>602,378=>602,379=>602,380=>602,383=>602, +384=>602,385=>602,386=>602,387=>602,388=>602,389=>602,390=>602,391=>602,392=>602,393=>602, +394=>602,395=>602,396=>602,397=>602,398=>602,399=>602,400=>602,401=>602,403=>602,404=>602, +405=>602,406=>602,407=>602,408=>602,409=>602,410=>602,411=>602,412=>602,413=>602,414=>602, +415=>602,416=>602,417=>602,418=>602,419=>602,420=>602,421=>602,422=>602,423=>602,424=>602, +425=>602,426=>602,427=>602,428=>602,429=>602,430=>602,431=>602,432=>602,433=>602,434=>602, +435=>602,436=>602,437=>602,438=>602,439=>602,440=>602,441=>602,442=>602,443=>602,444=>602, +445=>602,446=>602,447=>602,448=>602,449=>602,450=>602,451=>602,461=>602,462=>602,463=>602, +464=>602,465=>602,466=>602,467=>602,468=>602,469=>602,470=>602,471=>602,472=>602,473=>602, +474=>602,475=>602,476=>602,477=>602,478=>602,479=>602,480=>602,481=>602,482=>602,483=>602, +486=>602,487=>602,488=>602,489=>602,490=>602,491=>602,492=>602,493=>602,494=>602,495=>602, +496=>602,500=>602,501=>602,502=>602,504=>602,505=>602,508=>602,509=>602,510=>602,511=>602, +512=>602,513=>602,514=>602,515=>602,516=>602,517=>602,518=>602,519=>602,520=>602,521=>602, +522=>602,523=>602,524=>602,525=>602,526=>602,527=>602,528=>602,529=>602,530=>602,531=>602, +532=>602,533=>602,534=>602,535=>602,536=>602,537=>602,538=>602,539=>602,540=>602,541=>602, +542=>602,543=>602,544=>602,545=>602,548=>602,549=>602,550=>602,551=>602,552=>602,553=>602, +554=>602,555=>602,556=>602,557=>602,558=>602,559=>602,560=>602,561=>602,562=>602,563=>602, +564=>602,565=>602,566=>602,567=>602,568=>602,569=>602,570=>602,571=>602,572=>602,573=>602, +574=>602,575=>602,576=>602,577=>602,580=>602,581=>602,588=>602,589=>602,592=>602,593=>602, +594=>602,595=>602,596=>602,597=>602,598=>602,599=>602,600=>602,601=>602,602=>602,603=>602, +604=>602,605=>602,606=>602,607=>602,608=>602,609=>602,610=>602,611=>602,612=>602,613=>602, +614=>602,615=>602,616=>602,617=>602,618=>602,619=>602,620=>602,621=>602,622=>602,623=>602, +624=>602,625=>602,626=>602,627=>602,628=>602,629=>602,630=>602,631=>602,632=>602,633=>602, +634=>602,635=>602,636=>602,637=>602,638=>602,639=>602,640=>602,641=>602,642=>602,643=>602, +644=>602,645=>602,646=>602,647=>602,648=>602,649=>602,650=>602,651=>602,652=>602,653=>602, +654=>602,655=>602,656=>602,657=>602,658=>602,659=>602,660=>602,661=>602,662=>602,663=>602, +664=>602,665=>602,666=>602,667=>602,668=>602,669=>602,670=>602,671=>602,672=>602,673=>602, +674=>602,675=>602,676=>602,677=>602,678=>602,679=>602,680=>602,681=>602,682=>602,683=>602, +684=>602,685=>602,686=>602,687=>602,688=>602,689=>602,690=>602,691=>602,692=>602,693=>602, +694=>602,695=>602,696=>602,697=>602,699=>602,700=>602,701=>602,702=>602,703=>602,704=>602, +705=>602,711=>602,712=>602,713=>602,716=>602,717=>602,720=>602,721=>602,722=>602,723=>602, +726=>602,727=>602,728=>602,729=>602,730=>602,731=>602,733=>602,734=>602,736=>602,737=>602, +738=>602,739=>602,740=>602,741=>602,742=>602,743=>602,744=>602,745=>602,750=>602,755=>602, +768=>602,769=>602,770=>602,771=>602,772=>602,773=>602,774=>602,775=>602,776=>602,777=>602, +778=>602,779=>602,780=>602,781=>602,782=>602,783=>602,784=>602,785=>602,786=>602,787=>602, +788=>602,789=>602,790=>602,791=>602,792=>602,793=>602,794=>602,795=>602,796=>602,797=>602, +798=>602,799=>602,800=>602,801=>602,802=>602,803=>602,804=>602,805=>602,806=>602,807=>602, +808=>602,809=>602,810=>602,811=>602,812=>602,813=>602,814=>602,815=>602,816=>602,817=>602, +818=>602,819=>602,820=>602,821=>602,822=>602,823=>602,824=>602,825=>602,826=>602,827=>602, +828=>602,829=>602,830=>602,831=>602,835=>602,856=>602,865=>602,884=>602,885=>602,890=>602, +894=>602,900=>602,901=>602,902=>602,903=>602,904=>602,905=>602,906=>602,908=>602,910=>602, +911=>602,912=>602,913=>602,914=>602,915=>602,916=>602,917=>602,918=>602,919=>602,920=>602, +921=>602,922=>602,923=>602,924=>602,925=>602,926=>602,927=>602,928=>602,929=>602,931=>602, +932=>602,933=>602,934=>602,935=>602,936=>602,937=>602,938=>602,939=>602,940=>602,941=>602, +942=>602,943=>602,944=>602,945=>602,946=>602,947=>602,948=>602,949=>602,950=>602,951=>602, +952=>602,953=>602,954=>602,955=>602,956=>602,957=>602,958=>602,959=>602,960=>602,961=>602, +962=>602,963=>602,964=>602,965=>602,966=>602,967=>602,968=>602,969=>602,970=>602,971=>602, +972=>602,973=>602,974=>602,976=>602,977=>602,978=>602,979=>602,980=>602,981=>602,982=>602, +983=>602,984=>602,985=>602,986=>602,987=>602,988=>602,989=>602,990=>602,991=>602,992=>602, +993=>602,1008=>602,1009=>602,1010=>602,1011=>602,1012=>602,1013=>602,1014=>602,1015=>602,1016=>602, +1017=>602,1018=>602,1019=>602,1020=>602,1021=>602,1022=>602,1023=>602,1024=>602,1025=>602,1026=>602, +1027=>602,1028=>602,1029=>602,1030=>602,1031=>602,1032=>602,1033=>602,1034=>602,1035=>602,1036=>602, +1037=>602,1038=>602,1039=>602,1040=>602,1041=>602,1042=>602,1043=>602,1044=>602,1045=>602,1046=>602, +1047=>602,1048=>602,1049=>602,1050=>602,1051=>602,1052=>602,1053=>602,1054=>602,1055=>602,1056=>602, +1057=>602,1058=>602,1059=>602,1060=>602,1061=>602,1062=>602,1063=>602,1064=>602,1065=>602,1066=>602, +1067=>602,1068=>602,1069=>602,1070=>602,1071=>602,1072=>602,1073=>602,1074=>602,1075=>602,1076=>602, +1077=>602,1078=>602,1079=>602,1080=>602,1081=>602,1082=>602,1083=>602,1084=>602,1085=>602,1086=>602, +1087=>602,1088=>602,1089=>602,1090=>602,1091=>602,1092=>602,1093=>602,1094=>602,1095=>602,1096=>602, +1097=>602,1098=>602,1099=>602,1100=>602,1101=>602,1102=>602,1103=>602,1104=>602,1105=>602,1106=>602, +1107=>602,1108=>602,1109=>602,1110=>602,1111=>602,1112=>602,1113=>602,1114=>602,1115=>602,1116=>602, +1117=>602,1118=>602,1119=>602,1122=>602,1123=>602,1138=>602,1139=>602,1168=>602,1169=>602,1170=>602, +1171=>602,1172=>602,1173=>602,1174=>602,1175=>602,1176=>602,1177=>602,1178=>602,1179=>602,1186=>602, +1187=>602,1188=>602,1189=>602,1194=>602,1195=>602,1196=>602,1197=>602,1198=>602,1199=>602,1200=>602, +1201=>602,1202=>602,1203=>602,1210=>602,1211=>602,1216=>602,1217=>602,1218=>602,1219=>602,1220=>602, +1223=>602,1224=>602,1227=>602,1228=>602,1231=>602,1232=>602,1233=>602,1234=>602,1235=>602,1236=>602, +1237=>602,1238=>602,1239=>602,1240=>602,1241=>602,1242=>602,1243=>602,1244=>602,1245=>602,1246=>602, +1247=>602,1248=>602,1249=>602,1250=>602,1251=>602,1252=>602,1253=>602,1254=>602,1255=>602,1256=>602, +1257=>602,1258=>602,1259=>602,1260=>602,1261=>602,1262=>602,1263=>602,1264=>602,1265=>602,1266=>602, +1267=>602,1268=>602,1269=>602,1270=>602,1271=>602,1272=>602,1273=>602,1296=>602,1297=>602,1306=>602, +1307=>602,1308=>602,1309=>602,1542=>602,1543=>602,1545=>602,1546=>602,1548=>602,1557=>602,1563=>602, +1567=>602,1569=>602,1570=>602,1571=>602,1572=>602,1573=>602,1574=>602,1575=>602,1576=>602,1577=>602, +1578=>602,1579=>602,1580=>602,1581=>602,1582=>602,1583=>602,1584=>602,1585=>602,1586=>602,1587=>602, +1588=>602,1589=>602,1590=>602,1591=>602,1592=>602,1593=>602,1594=>602,1600=>602,1601=>602,1602=>602, +1603=>602,1604=>602,1605=>602,1606=>602,1607=>602,1608=>602,1609=>602,1610=>602,1611=>602,1612=>602, +1613=>602,1614=>602,1615=>602,1616=>602,1617=>602,1618=>602,1619=>602,1620=>602,1621=>602,1626=>602, +1632=>602,1633=>602,1634=>602,1635=>602,1636=>602,1637=>602,1638=>602,1639=>602,1640=>602,1641=>602, +1642=>602,1643=>602,1644=>602,1645=>602,1652=>602,1657=>602,1658=>602,1659=>602,1662=>602,1663=>602, +1664=>602,1667=>602,1668=>602,1670=>602,1671=>602,1681=>602,1688=>602,1700=>602,1705=>602,1711=>602, +1726=>602,1740=>602,1776=>602,1777=>602,1778=>602,1779=>602,1780=>602,1781=>602,1782=>602,1783=>602, +1784=>602,1785=>602,3713=>602,3714=>602,3716=>602,3719=>602,3720=>602,3722=>602,3725=>602,3732=>602, +3733=>602,3734=>602,3735=>602,3737=>602,3738=>602,3739=>602,3740=>602,3741=>602,3742=>602,3743=>602, +3745=>602,3746=>602,3747=>602,3749=>602,3751=>602,3754=>602,3755=>602,3757=>602,3758=>602,3759=>602, +3760=>602,3761=>602,3762=>602,3763=>602,3764=>602,3765=>602,3766=>602,3767=>602,3768=>602,3769=>602, +3771=>602,3772=>602,3784=>602,3785=>602,3786=>602,3787=>602,3788=>602,3789=>602,4304=>602,4305=>602, +4306=>602,4307=>602,4308=>602,4309=>602,4310=>602,4311=>602,4312=>602,4313=>602,4314=>602,4315=>602, +4316=>602,4317=>602,4318=>602,4319=>602,4320=>602,4321=>602,4322=>602,4323=>602,4324=>602,4325=>602, +4326=>602,4327=>602,4328=>602,4329=>602,4330=>602,4331=>602,4332=>602,4333=>602,4334=>602,4335=>602, +4336=>602,4337=>602,4338=>602,4339=>602,4340=>602,4341=>602,4342=>602,4343=>602,4344=>602,4345=>602, +4346=>602,4347=>602,4348=>602,7426=>602,7432=>602,7433=>602,7444=>602,7446=>602,7447=>602,7453=>602, +7454=>602,7455=>602,7468=>602,7469=>602,7470=>602,7472=>602,7473=>602,7474=>602,7475=>602,7476=>602, +7477=>602,7478=>602,7479=>602,7480=>602,7481=>602,7482=>602,7483=>602,7484=>602,7486=>602,7487=>602, +7488=>602,7489=>602,7490=>602,7491=>602,7492=>602,7493=>602,7494=>602,7495=>602,7496=>602,7497=>602, +7498=>602,7499=>602,7500=>602,7501=>602,7502=>602,7503=>602,7504=>602,7505=>602,7506=>602,7507=>602, +7508=>602,7509=>602,7510=>602,7511=>602,7512=>602,7513=>602,7514=>602,7515=>602,7522=>602,7523=>602, +7524=>602,7525=>602,7543=>602,7544=>602,7547=>602,7557=>602,7579=>602,7580=>602,7581=>602,7582=>602, +7583=>602,7584=>602,7585=>602,7586=>602,7587=>602,7588=>602,7589=>602,7590=>602,7591=>602,7592=>602, +7593=>602,7594=>602,7595=>602,7596=>602,7597=>602,7598=>602,7599=>602,7600=>602,7601=>602,7602=>602, +7603=>602,7604=>602,7605=>602,7606=>602,7607=>602,7609=>602,7610=>602,7611=>602,7612=>602,7613=>602, +7614=>602,7615=>602,7680=>602,7681=>602,7682=>602,7683=>602,7684=>602,7685=>602,7686=>602,7687=>602, +7688=>602,7689=>602,7690=>602,7691=>602,7692=>602,7693=>602,7694=>602,7695=>602,7696=>602,7697=>602, +7698=>602,7699=>602,7704=>602,7705=>602,7706=>602,7707=>602,7708=>602,7709=>602,7710=>602,7711=>602, +7712=>602,7713=>602,7714=>602,7715=>602,7716=>602,7717=>602,7718=>602,7719=>602,7720=>602,7721=>602, +7722=>602,7723=>602,7724=>602,7725=>602,7728=>602,7729=>602,7730=>602,7731=>602,7732=>602,7733=>602, +7734=>602,7735=>602,7736=>602,7737=>602,7738=>602,7739=>602,7740=>602,7741=>602,7742=>602,7743=>602, +7744=>602,7745=>602,7746=>602,7747=>602,7748=>602,7749=>602,7750=>602,7751=>602,7752=>602,7753=>602, +7754=>602,7755=>602,7756=>602,7757=>602,7764=>602,7765=>602,7766=>602,7767=>602,7768=>602,7769=>602, +7770=>602,7771=>602,7772=>602,7773=>602,7774=>602,7775=>602,7776=>602,7777=>602,7778=>602,7779=>602, +7784=>602,7785=>602,7786=>602,7787=>602,7788=>602,7789=>602,7790=>602,7791=>602,7792=>602,7793=>602, +7794=>602,7795=>602,7796=>602,7797=>602,7798=>602,7799=>602,7800=>602,7801=>602,7804=>602,7805=>602, +7806=>602,7807=>602,7808=>602,7809=>602,7810=>602,7811=>602,7812=>602,7813=>602,7814=>602,7815=>602, +7816=>602,7817=>602,7818=>602,7819=>602,7820=>602,7821=>602,7822=>602,7823=>602,7824=>602,7825=>602, +7826=>602,7827=>602,7828=>602,7829=>602,7830=>602,7831=>602,7832=>602,7833=>602,7835=>602,7839=>602, +7840=>602,7841=>602,7852=>602,7853=>602,7856=>602,7857=>602,7862=>602,7863=>602,7864=>602,7865=>602, +7868=>602,7869=>602,7878=>602,7879=>602,7882=>602,7883=>602,7884=>602,7885=>602,7896=>602,7897=>602, +7898=>602,7899=>602,7900=>602,7901=>602,7904=>602,7905=>602,7906=>602,7907=>602,7908=>602,7909=>602, +7912=>602,7913=>602,7914=>602,7915=>602,7918=>602,7919=>602,7920=>602,7921=>602,7922=>602,7923=>602, +7924=>602,7925=>602,7928=>602,7929=>602,7936=>602,7937=>602,7938=>602,7939=>602,7940=>602,7941=>602, +7942=>602,7943=>602,7944=>602,7945=>602,7946=>602,7947=>602,7948=>602,7949=>602,7950=>602,7951=>602, +7952=>602,7953=>602,7954=>602,7955=>602,7956=>602,7957=>602,7960=>602,7961=>602,7962=>602,7963=>602, +7964=>602,7965=>602,7968=>602,7969=>602,7970=>602,7971=>602,7972=>602,7973=>602,7974=>602,7975=>602, +7976=>602,7977=>602,7978=>602,7979=>602,7980=>602,7981=>602,7982=>602,7983=>602,7984=>602,7985=>602, +7986=>602,7987=>602,7988=>602,7989=>602,7990=>602,7991=>602,7992=>602,7993=>602,7994=>602,7995=>602, +7996=>602,7997=>602,7998=>602,7999=>602,8000=>602,8001=>602,8002=>602,8003=>602,8004=>602,8005=>602, +8008=>602,8009=>602,8010=>602,8011=>602,8012=>602,8013=>602,8016=>602,8017=>602,8018=>602,8019=>602, +8020=>602,8021=>602,8022=>602,8023=>602,8025=>602,8027=>602,8029=>602,8031=>602,8032=>602,8033=>602, +8034=>602,8035=>602,8036=>602,8037=>602,8038=>602,8039=>602,8040=>602,8041=>602,8042=>602,8043=>602, +8044=>602,8045=>602,8046=>602,8047=>602,8048=>602,8049=>602,8050=>602,8051=>602,8052=>602,8053=>602, +8054=>602,8055=>602,8056=>602,8057=>602,8058=>602,8059=>602,8060=>602,8061=>602,8064=>602,8065=>602, +8066=>602,8067=>602,8068=>602,8069=>602,8070=>602,8071=>602,8072=>602,8073=>602,8074=>602,8075=>602, +8076=>602,8077=>602,8078=>602,8079=>602,8080=>602,8081=>602,8082=>602,8083=>602,8084=>602,8085=>602, +8086=>602,8087=>602,8088=>602,8089=>602,8090=>602,8091=>602,8092=>602,8093=>602,8094=>602,8095=>602, +8096=>602,8097=>602,8098=>602,8099=>602,8100=>602,8101=>602,8102=>602,8103=>602,8104=>602,8105=>602, +8106=>602,8107=>602,8108=>602,8109=>602,8110=>602,8111=>602,8112=>602,8113=>602,8114=>602,8115=>602, +8116=>602,8118=>602,8119=>602,8120=>602,8121=>602,8122=>602,8123=>602,8124=>602,8125=>602,8126=>602, +8127=>602,8128=>602,8129=>602,8130=>602,8131=>602,8132=>602,8134=>602,8135=>602,8136=>602,8137=>602, +8138=>602,8139=>602,8140=>602,8141=>602,8142=>602,8143=>602,8144=>602,8145=>602,8146=>602,8147=>602, +8150=>602,8151=>602,8152=>602,8153=>602,8154=>602,8155=>602,8157=>602,8158=>602,8159=>602,8160=>602, +8161=>602,8162=>602,8163=>602,8164=>602,8165=>602,8166=>602,8167=>602,8168=>602,8169=>602,8170=>602, +8171=>602,8172=>602,8173=>602,8174=>602,8175=>602,8178=>602,8179=>602,8180=>602,8182=>602,8183=>602, +8184=>602,8185=>602,8186=>602,8187=>602,8188=>602,8189=>602,8190=>602,8192=>602,8193=>602,8194=>602, +8195=>602,8196=>602,8197=>602,8198=>602,8199=>602,8200=>602,8201=>602,8202=>602,8208=>602,8209=>602, +8210=>602,8213=>602,8215=>602,8219=>602,8223=>602,8227=>602,8239=>602,8241=>602,8242=>602,8243=>602, +8244=>602,8245=>602,8246=>602,8247=>602,8252=>602,8253=>602,8254=>602,8261=>602,8262=>602,8263=>602, +8264=>602,8265=>602,8287=>602,8304=>602,8305=>602,8308=>602,8309=>602,8310=>602,8311=>602,8312=>602, +8313=>602,8314=>602,8315=>602,8316=>602,8317=>602,8318=>602,8319=>602,8320=>602,8321=>602,8322=>602, +8323=>602,8324=>602,8325=>602,8326=>602,8327=>602,8328=>602,8329=>602,8330=>602,8331=>602,8332=>602, +8333=>602,8334=>602,8336=>602,8337=>602,8338=>602,8339=>602,8340=>602,8352=>602,8353=>602,8354=>602, +8355=>602,8356=>602,8357=>602,8358=>602,8359=>602,8360=>602,8361=>602,8362=>602,8363=>602,8365=>602, +8366=>602,8367=>602,8368=>602,8369=>602,8370=>602,8371=>602,8372=>602,8373=>602,8376=>602,8377=>602, +8450=>602,8453=>602,8461=>602,8462=>602,8463=>602,8469=>602,8470=>602,8471=>602,8473=>602,8474=>602, +8477=>602,8484=>602,8486=>602,8490=>602,8491=>602,8494=>602,8531=>602,8532=>602,8533=>602,8534=>602, +8535=>602,8536=>602,8537=>602,8538=>602,8539=>602,8540=>602,8541=>602,8542=>602,8543=>602,8592=>602, +8593=>602,8594=>602,8595=>602,8596=>602,8597=>602,8598=>602,8599=>602,8600=>602,8601=>602,8602=>602, +8603=>602,8604=>602,8605=>602,8606=>602,8607=>602,8608=>602,8609=>602,8610=>602,8611=>602,8612=>602, +8613=>602,8614=>602,8615=>602,8616=>602,8617=>602,8618=>602,8619=>602,8620=>602,8621=>602,8622=>602, +8623=>602,8624=>602,8625=>602,8626=>602,8627=>602,8628=>602,8629=>602,8630=>602,8631=>602,8632=>602, +8633=>602,8634=>602,8635=>602,8636=>602,8637=>602,8638=>602,8639=>602,8640=>602,8641=>602,8642=>602, +8643=>602,8644=>602,8645=>602,8646=>602,8647=>602,8648=>602,8649=>602,8650=>602,8651=>602,8652=>602, +8653=>602,8654=>602,8655=>602,8656=>602,8657=>602,8658=>602,8659=>602,8660=>602,8661=>602,8662=>602, +8663=>602,8664=>602,8665=>602,8666=>602,8667=>602,8668=>602,8669=>602,8670=>602,8671=>602,8672=>602, +8673=>602,8674=>602,8675=>602,8676=>602,8677=>602,8678=>602,8679=>602,8680=>602,8681=>602,8682=>602, +8683=>602,8684=>602,8685=>602,8686=>602,8687=>602,8688=>602,8689=>602,8690=>602,8691=>602,8692=>602, +8693=>602,8694=>602,8695=>602,8696=>602,8697=>602,8698=>602,8699=>602,8700=>602,8701=>602,8702=>602, +8703=>602,8704=>602,8705=>602,8706=>602,8707=>602,8708=>602,8709=>602,8710=>602,8711=>602,8712=>602, +8713=>602,8714=>602,8715=>602,8716=>602,8717=>602,8719=>602,8721=>602,8722=>602,8723=>602,8725=>602, +8727=>602,8728=>602,8729=>602,8730=>602,8731=>602,8732=>602,8733=>602,8734=>602,8735=>602,8736=>602, +8743=>602,8744=>602,8745=>602,8746=>602,8747=>602,8748=>602,8749=>602,8756=>602,8757=>602,8758=>602, +8759=>602,8760=>602,8761=>602,8762=>602,8763=>602,8764=>602,8765=>602,8769=>602,8770=>602,8771=>602, +8772=>602,8773=>602,8774=>602,8775=>602,8776=>602,8777=>602,8778=>602,8779=>602,8780=>602,8781=>602, +8782=>602,8783=>602,8784=>602,8785=>602,8786=>602,8787=>602,8788=>602,8789=>602,8790=>602,8791=>602, +8792=>602,8793=>602,8794=>602,8795=>602,8796=>602,8797=>602,8798=>602,8799=>602,8800=>602,8801=>602, +8802=>602,8803=>602,8804=>602,8805=>602,8806=>602,8807=>602,8808=>602,8809=>602,8813=>602,8814=>602, +8815=>602,8816=>602,8817=>602,8818=>602,8819=>602,8820=>602,8821=>602,8822=>602,8823=>602,8824=>602, +8825=>602,8826=>602,8827=>602,8828=>602,8829=>602,8830=>602,8831=>602,8832=>602,8833=>602,8834=>602, +8835=>602,8836=>602,8837=>602,8838=>602,8839=>602,8840=>602,8841=>602,8842=>602,8843=>602,8847=>602, +8848=>602,8849=>602,8850=>602,8853=>602,8854=>602,8855=>602,8856=>602,8857=>602,8858=>602,8859=>602, +8860=>602,8861=>602,8862=>602,8863=>602,8864=>602,8865=>602,8866=>602,8867=>602,8868=>602,8869=>602, +8901=>602,8902=>602,8909=>602,8922=>602,8923=>602,8924=>602,8925=>602,8926=>602,8927=>602,8928=>602, +8929=>602,8930=>602,8931=>602,8932=>602,8933=>602,8934=>602,8935=>602,8936=>602,8937=>602,8943=>602, +8960=>602,8961=>602,8962=>602,8963=>602,8964=>602,8965=>602,8966=>602,8968=>602,8969=>602,8970=>602, +8971=>602,8972=>602,8973=>602,8974=>602,8975=>602,8976=>602,8977=>602,8978=>602,8979=>602,8980=>602, +8981=>602,8984=>602,8985=>602,8988=>602,8989=>602,8990=>602,8991=>602,8992=>602,8993=>602,8997=>602, +8998=>602,8999=>602,9000=>602,9003=>602,9013=>602,9015=>602,9016=>602,9017=>602,9018=>602,9019=>602, +9020=>602,9021=>602,9022=>602,9025=>602,9026=>602,9027=>602,9028=>602,9031=>602,9032=>602,9033=>602, +9035=>602,9036=>602,9037=>602,9040=>602,9042=>602,9043=>602,9044=>602,9047=>602,9048=>602,9049=>602, +9050=>602,9051=>602,9052=>602,9054=>602,9055=>602,9056=>602,9059=>602,9060=>602,9061=>602,9064=>602, +9065=>602,9067=>602,9068=>602,9069=>602,9070=>602,9071=>602,9072=>602,9075=>602,9076=>602,9077=>602, +9078=>602,9079=>602,9080=>602,9081=>602,9082=>602,9085=>602,9088=>602,9089=>602,9090=>602,9091=>602, +9096=>602,9097=>602,9098=>602,9099=>602,9109=>602,9115=>602,9116=>602,9117=>602,9118=>602,9119=>602, +9120=>602,9121=>602,9122=>602,9123=>602,9124=>602,9125=>602,9126=>602,9127=>602,9128=>602,9129=>602, +9130=>602,9131=>602,9132=>602,9133=>602,9134=>602,9166=>602,9167=>602,9251=>602,9600=>602,9601=>602, +9602=>602,9603=>602,9604=>602,9605=>602,9606=>602,9607=>602,9608=>602,9609=>602,9610=>602,9611=>602, +9612=>602,9613=>602,9614=>602,9615=>602,9616=>602,9617=>602,9618=>602,9619=>602,9620=>602,9621=>602, +9622=>602,9623=>602,9624=>602,9625=>602,9626=>602,9627=>602,9628=>602,9629=>602,9630=>602,9631=>602, +9632=>602,9633=>602,9634=>602,9635=>602,9636=>602,9637=>602,9638=>602,9639=>602,9640=>602,9641=>602, +9642=>602,9643=>602,9644=>602,9645=>602,9646=>602,9647=>602,9648=>602,9649=>602,9650=>602,9651=>602, +9652=>602,9653=>602,9654=>602,9655=>602,9656=>602,9657=>602,9658=>602,9659=>602,9660=>602,9661=>602, +9662=>602,9663=>602,9664=>602,9665=>602,9666=>602,9667=>602,9668=>602,9669=>602,9670=>602,9671=>602, +9672=>602,9673=>602,9674=>602,9675=>602,9676=>602,9677=>602,9678=>602,9679=>602,9680=>602,9681=>602, +9682=>602,9683=>602,9684=>602,9685=>602,9686=>602,9687=>602,9688=>602,9689=>602,9690=>602,9691=>602, +9692=>602,9693=>602,9694=>602,9695=>602,9696=>602,9697=>602,9698=>602,9699=>602,9700=>602,9701=>602, +9702=>602,9703=>602,9704=>602,9705=>602,9706=>602,9707=>602,9708=>602,9709=>602,9710=>602,9711=>602, +9712=>602,9713=>602,9714=>602,9715=>602,9716=>602,9717=>602,9718=>602,9719=>602,9720=>602,9721=>602, +9722=>602,9723=>602,9724=>602,9725=>602,9726=>602,9727=>602,9728=>602,9729=>602,9730=>602,9731=>602, +9732=>602,9733=>602,9734=>602,9735=>602,9736=>602,9737=>602,9738=>602,9739=>602,9740=>602,9741=>602, +9742=>602,9743=>602,9744=>602,9745=>602,9746=>602,9747=>602,9748=>602,9749=>602,9750=>602,9751=>602, +9752=>602,9753=>602,9754=>602,9755=>602,9756=>602,9757=>602,9758=>602,9759=>602,9760=>602,9761=>602, +9762=>602,9763=>602,9764=>602,9765=>602,9766=>602,9767=>602,9768=>602,9769=>602,9770=>602,9771=>602, +9772=>602,9773=>602,9774=>602,9775=>602,9784=>602,9785=>602,9786=>602,9787=>602,9788=>602,9789=>602, +9790=>602,9791=>602,9792=>602,9793=>602,9794=>602,9795=>602,9796=>602,9797=>602,9798=>602,9799=>602, +9800=>602,9801=>602,9802=>602,9803=>602,9804=>602,9805=>602,9806=>602,9807=>602,9808=>602,9809=>602, +9810=>602,9811=>602,9812=>602,9813=>602,9814=>602,9815=>602,9816=>602,9817=>602,9818=>602,9819=>602, +9820=>602,9821=>602,9822=>602,9823=>602,9824=>602,9825=>602,9826=>602,9827=>602,9828=>602,9829=>602, +9830=>602,9831=>602,9832=>602,9833=>602,9834=>602,9835=>602,9836=>602,9837=>602,9838=>602,9839=>602, +9840=>602,9841=>602,9842=>602,9843=>602,9844=>602,9845=>602,9846=>602,9847=>602,9848=>602,9849=>602, +9850=>602,9851=>602,9852=>602,9853=>602,9854=>602,9855=>602,9856=>602,9857=>602,9858=>602,9859=>602, +9860=>602,9861=>602,9862=>602,9863=>602,9864=>602,9865=>602,9866=>602,9867=>602,9872=>602,9873=>602, +9874=>602,9875=>602,9876=>602,9877=>602,9878=>602,9879=>602,9880=>602,9881=>602,9882=>602,9883=>602, +9884=>602,9888=>602,9889=>602,9904=>602,9905=>602,9985=>602,9986=>602,9987=>602,9988=>602,9990=>602, +9991=>602,9992=>602,9993=>602,9996=>602,9997=>602,9998=>602,9999=>602,10000=>602,10001=>602,10002=>602, +10003=>602,10004=>602,10005=>602,10006=>602,10007=>602,10008=>602,10009=>602,10010=>602,10011=>602,10012=>602, +10013=>602,10014=>602,10015=>602,10016=>602,10017=>602,10018=>602,10019=>602,10020=>602,10021=>602,10022=>602, +10023=>602,10025=>602,10026=>602,10027=>602,10028=>602,10029=>602,10030=>602,10031=>602,10032=>602,10033=>602, +10034=>602,10035=>602,10036=>602,10037=>602,10038=>602,10039=>602,10040=>602,10041=>602,10042=>602,10043=>602, +10044=>602,10045=>602,10046=>602,10047=>602,10048=>602,10049=>602,10050=>602,10051=>602,10052=>602,10053=>602, +10054=>602,10055=>602,10056=>602,10057=>602,10058=>602,10059=>602,10061=>602,10063=>602,10064=>602,10065=>602, +10066=>602,10070=>602,10072=>602,10073=>602,10074=>602,10075=>602,10076=>602,10077=>602,10078=>602,10081=>602, +10082=>602,10083=>602,10084=>602,10085=>602,10086=>602,10087=>602,10088=>602,10089=>602,10090=>602,10091=>602, +10092=>602,10093=>602,10094=>602,10095=>602,10096=>602,10097=>602,10098=>602,10099=>602,10100=>602,10101=>602, +10132=>602,10136=>602,10137=>602,10138=>602,10139=>602,10140=>602,10141=>602,10142=>602,10143=>602,10144=>602, +10145=>602,10146=>602,10147=>602,10148=>602,10149=>602,10150=>602,10151=>602,10152=>602,10153=>602,10154=>602, +10155=>602,10156=>602,10157=>602,10158=>602,10159=>602,10161=>602,10162=>602,10163=>602,10164=>602,10165=>602, +10166=>602,10167=>602,10168=>602,10169=>602,10170=>602,10171=>602,10172=>602,10173=>602,10174=>602,10175=>602, +10181=>602,10182=>602,10208=>602,10216=>602,10217=>602,10731=>602,10746=>602,10747=>602,10799=>602,11026=>602, +11027=>602,11028=>602,11029=>602,11030=>602,11031=>602,11032=>602,11033=>602,11034=>602,11364=>602,11373=>602, +11374=>602,11375=>602,11376=>602,11381=>602,11382=>602,11383=>602,11385=>602,11386=>602,11388=>602,11389=>602, +11390=>602,11391=>602,11800=>602,11810=>602,11811=>602,11812=>602,11813=>602,11822=>602,42760=>602,42761=>602, +42762=>602,42763=>602,42764=>602,42765=>602,42766=>602,42767=>602,42768=>602,42769=>602,42770=>602,42771=>602, +42772=>602,42773=>602,42774=>602,42779=>602,42780=>602,42781=>602,42782=>602,42783=>602,42786=>602,42787=>602, +42788=>602,42789=>602,42790=>602,42791=>602,42889=>602,42890=>602,42891=>602,42892=>602,42893=>602,63173=>602, +64257=>602,64258=>602,64338=>602,64339=>602,64340=>602,64341=>602,64342=>602,64343=>602,64344=>602,64345=>602, +64346=>602,64347=>602,64348=>602,64349=>602,64350=>602,64351=>602,64352=>602,64353=>602,64354=>602,64355=>602, +64356=>602,64357=>602,64358=>602,64359=>602,64360=>602,64361=>602,64362=>602,64363=>602,64364=>602,64365=>602, +64366=>602,64367=>602,64368=>602,64369=>602,64370=>602,64371=>602,64372=>602,64373=>602,64374=>602,64375=>602, +64376=>602,64377=>602,64378=>602,64379=>602,64380=>602,64381=>602,64382=>602,64383=>602,64384=>602,64385=>602, +64394=>602,64395=>602,64396=>602,64397=>602,64398=>602,64399=>602,64400=>602,64401=>602,64402=>602,64403=>602, +64404=>602,64405=>602,64414=>602,64415=>602,64426=>602,64427=>602,64428=>602,64429=>602,64488=>602,64489=>602, +64508=>602,64509=>602,64510=>602,64511=>602,65136=>602,65137=>602,65138=>602,65139=>602,65140=>602,65142=>602, +65143=>602,65144=>602,65145=>602,65146=>602,65147=>602,65148=>602,65149=>602,65150=>602,65151=>602,65152=>602, +65153=>602,65154=>602,65155=>602,65156=>602,65157=>602,65158=>602,65159=>602,65160=>602,65161=>602,65162=>602, +65163=>602,65164=>602,65165=>602,65166=>602,65167=>602,65168=>602,65169=>602,65170=>602,65171=>602,65172=>602, +65173=>602,65174=>602,65175=>602,65176=>602,65177=>602,65178=>602,65179=>602,65180=>602,65181=>602,65182=>602, +65183=>602,65184=>602,65185=>602,65186=>602,65187=>602,65188=>602,65189=>602,65190=>602,65191=>602,65192=>602, +65193=>602,65194=>602,65195=>602,65196=>602,65197=>602,65198=>602,65199=>602,65200=>602,65201=>602,65202=>602, +65203=>602,65204=>602,65205=>602,65206=>602,65207=>602,65208=>602,65209=>602,65210=>602,65211=>602,65212=>602, +65213=>602,65214=>602,65215=>602,65216=>602,65217=>602,65218=>602,65219=>602,65220=>602,65221=>602,65222=>602, +65223=>602,65224=>602,65225=>602,65226=>602,65227=>602,65228=>602,65229=>602,65230=>602,65231=>602,65232=>602, +65233=>602,65234=>602,65235=>602,65236=>602,65237=>602,65238=>602,65239=>602,65240=>602,65241=>602,65242=>602, +65243=>602,65244=>602,65245=>602,65246=>602,65247=>602,65248=>602,65249=>602,65250=>602,65251=>602,65252=>602, +65253=>602,65254=>602,65255=>602,65256=>602,65257=>602,65258=>602,65259=>602,65260=>602,65261=>602,65262=>602, +65263=>602,65264=>602,65265=>602,65266=>602,65267=>602,65268=>602,65269=>602,65270=>602,65271=>602,65272=>602, +65273=>602,65274=>602,65275=>602,65276=>602,65279=>602,65529=>602,65530=>602,65531=>602,65532=>602,65533=>602); +$enc=''; +$diff=''; +$file='dejavusansmonob.z'; +$ctg='dejavusansmonob.ctg.z'; +$originalsize=303644; +// --- EOF --- --- /dev/null +++ b/tcpdf/fonts/dejavusansmonobi.php @@ -1,1 +1,252 @@ - +928,'Descent'=>-236,'CapHeight'=>-70,'Flags'=>97,'FontBBox'=>'[-428 -394 808 1053]','ItalicAngle'=>-11,'StemV'=>120,'MissingWidth'=>602); +$up=-63; +$ut=44; +$dw=602; +$cw=array( +0=>602,32=>602,33=>602,34=>602,35=>602,36=>602,37=>602,38=>602,39=>602,40=>602, +41=>602,42=>602,43=>602,44=>602,45=>602,46=>602,47=>602,48=>602,49=>602,50=>602, +51=>602,52=>602,53=>602,54=>602,55=>602,56=>602,57=>602,58=>602,59=>602,60=>602, +61=>602,62=>602,63=>602,64=>602,65=>602,66=>602,67=>602,68=>602,69=>602,70=>602, +71=>602,72=>602,73=>602,74=>602,75=>602,76=>602,77=>602,78=>602,79=>602,80=>602, +81=>602,82=>602,83=>602,84=>602,85=>602,86=>602,87=>602,88=>602,89=>602,90=>602, +91=>602,92=>602,93=>602,94=>602,95=>602,96=>602,97=>602,98=>602,99=>602,100=>602, +101=>602,102=>602,103=>602,104=>602,105=>602,106=>602,107=>602,108=>602,109=>602,110=>602, +111=>602,112=>602,113=>602,114=>602,115=>602,116=>602,117=>602,118=>602,119=>602,120=>602, +121=>602,122=>602,123=>602,124=>602,125=>602,126=>602,8364=>602,8218=>602,402=>602,8222=>602, +8230=>602,8224=>602,8225=>602,710=>602,8240=>602,352=>602,8249=>602,338=>602,381=>602,8216=>602, +8217=>602,8220=>602,8221=>602,8226=>602,8211=>602,8212=>602,732=>602,8482=>602,353=>602,8250=>602, +339=>602,382=>602,376=>602,160=>602,161=>602,162=>602,163=>602,164=>602,165=>602,166=>602, +167=>602,168=>602,169=>602,170=>602,171=>602,172=>602,173=>602,174=>602,175=>602,176=>602, +177=>602,178=>602,179=>602,180=>602,181=>602,182=>602,183=>602,184=>602,185=>602,186=>602, +187=>602,188=>602,189=>602,190=>602,191=>602,192=>602,193=>602,194=>602,195=>602,196=>602, +197=>602,198=>602,199=>602,200=>602,201=>602,202=>602,203=>602,204=>602,205=>602,206=>602, +207=>602,208=>602,209=>602,210=>602,211=>602,212=>602,213=>602,214=>602,215=>602,216=>602, +217=>602,218=>602,219=>602,220=>602,221=>602,222=>602,223=>602,224=>602,225=>602,226=>602, +227=>602,228=>602,229=>602,230=>602,231=>602,232=>602,233=>602,234=>602,235=>602,236=>602, +237=>602,238=>602,239=>602,240=>602,241=>602,242=>602,243=>602,244=>602,245=>602,246=>602, +247=>602,248=>602,249=>602,250=>602,251=>602,252=>602,253=>602,254=>602,255=>602,256=>602, +257=>602,258=>602,259=>602,260=>602,261=>602,262=>602,263=>602,264=>602,265=>602,266=>602, +267=>602,268=>602,269=>602,270=>602,271=>602,272=>602,273=>602,274=>602,275=>602,276=>602, +277=>602,278=>602,279=>602,280=>602,281=>602,282=>602,283=>602,284=>602,285=>602,286=>602, +287=>602,288=>602,289=>602,290=>602,291=>602,292=>602,293=>602,294=>602,295=>602,296=>602, +297=>602,298=>602,299=>602,300=>602,301=>602,302=>602,303=>602,304=>602,305=>602,306=>602, +307=>602,308=>602,309=>602,310=>602,311=>602,312=>602,313=>602,314=>602,315=>602,316=>602, +317=>602,318=>602,319=>602,320=>602,321=>602,322=>602,323=>602,324=>602,325=>602,326=>602, +327=>602,328=>602,329=>602,330=>602,331=>602,332=>602,333=>602,334=>602,335=>602,336=>602, +337=>602,340=>602,341=>602,342=>602,343=>602,344=>602,345=>602,346=>602,347=>602,348=>602, +349=>602,350=>602,351=>602,354=>602,355=>602,356=>602,357=>602,358=>602,359=>602,360=>602, +361=>602,362=>602,363=>602,364=>602,365=>602,366=>602,367=>602,368=>602,369=>602,370=>602, +371=>602,372=>602,373=>602,374=>602,375=>602,377=>602,378=>602,379=>602,380=>602,383=>602, +384=>602,385=>602,386=>602,387=>602,388=>602,389=>602,390=>602,391=>602,392=>602,393=>602, +394=>602,395=>602,396=>602,397=>602,398=>602,399=>602,400=>602,401=>602,403=>602,404=>602, +405=>602,406=>602,407=>602,408=>602,409=>602,410=>602,411=>602,412=>602,413=>602,414=>602, +415=>602,416=>602,417=>602,418=>602,419=>602,420=>602,421=>602,422=>602,423=>602,424=>602, +425=>602,426=>602,427=>602,428=>602,429=>602,430=>602,431=>602,432=>602,433=>602,434=>602, +435=>602,436=>602,437=>602,438=>602,439=>602,440=>602,441=>602,442=>602,443=>602,444=>602, +445=>602,446=>602,447=>602,448=>602,449=>602,450=>602,451=>602,461=>602,462=>602,463=>602, +464=>602,465=>602,466=>602,467=>602,468=>602,469=>602,470=>602,471=>602,472=>602,473=>602, +474=>602,475=>602,476=>602,477=>602,478=>602,479=>602,480=>602,481=>602,482=>602,483=>602, +486=>602,487=>602,488=>602,489=>602,490=>602,491=>602,492=>602,493=>602,494=>602,495=>602, +500=>602,501=>602,502=>602,504=>602,505=>602,508=>602,509=>602,510=>602,511=>602,512=>602, +513=>602,514=>602,515=>602,516=>602,517=>602,518=>602,519=>602,520=>602,521=>602,522=>602, +523=>602,524=>602,525=>602,526=>602,527=>602,528=>602,529=>602,530=>602,531=>602,532=>602, +533=>602,534=>602,535=>602,536=>602,537=>602,538=>602,539=>602,540=>602,541=>602,542=>602, +543=>602,545=>602,548=>602,549=>602,550=>602,551=>602,552=>602,553=>602,554=>602,555=>602, +556=>602,557=>602,558=>602,559=>602,560=>602,561=>602,562=>602,563=>602,564=>602,565=>602, +566=>602,567=>602,568=>602,569=>602,570=>602,571=>602,572=>602,573=>602,574=>602,575=>602, +576=>602,577=>602,580=>602,581=>602,588=>602,589=>602,592=>602,593=>602,594=>602,595=>602, +596=>602,597=>602,598=>602,599=>602,600=>602,601=>602,602=>602,603=>602,604=>602,605=>602, +606=>602,607=>602,608=>602,609=>602,610=>602,611=>602,612=>602,613=>602,614=>602,615=>602, +616=>602,617=>602,618=>602,619=>602,620=>602,621=>602,622=>602,623=>602,624=>602,625=>602, +626=>602,627=>602,628=>602,629=>602,630=>602,631=>602,632=>602,633=>602,634=>602,635=>602, +636=>602,637=>602,638=>602,639=>602,640=>602,641=>602,642=>602,643=>602,644=>602,645=>602, +646=>602,647=>602,648=>602,649=>602,650=>602,651=>602,652=>602,653=>602,654=>602,655=>602, +656=>602,657=>602,658=>602,659=>602,660=>602,661=>602,662=>602,663=>602,664=>602,665=>602, +666=>602,667=>602,668=>602,669=>602,670=>602,671=>602,672=>602,673=>602,674=>602,675=>602, +676=>602,677=>602,678=>602,679=>602,680=>602,681=>602,682=>602,683=>602,684=>602,685=>602, +686=>602,687=>602,688=>602,689=>602,690=>602,691=>602,692=>602,693=>602,694=>602,695=>602, +696=>602,697=>602,699=>602,700=>602,701=>602,702=>602,703=>602,704=>602,705=>602,711=>602, +712=>602,713=>602,716=>602,717=>602,720=>602,721=>602,722=>602,723=>602,726=>602,727=>602, +728=>602,729=>602,730=>602,731=>602,733=>602,734=>602,736=>602,737=>602,738=>602,739=>602, +740=>602,741=>602,742=>602,743=>602,744=>602,745=>602,750=>602,755=>602,768=>602,769=>602, +770=>602,771=>602,772=>602,773=>602,774=>602,775=>602,776=>602,777=>602,778=>602,779=>602, +780=>602,781=>602,782=>602,783=>602,784=>602,785=>602,786=>602,787=>602,788=>602,789=>602, +790=>602,791=>602,792=>602,793=>602,794=>602,795=>602,796=>602,797=>602,798=>602,799=>602, +800=>602,801=>602,802=>602,803=>602,804=>602,805=>602,806=>602,807=>602,808=>602,809=>602, +810=>602,811=>602,812=>602,813=>602,814=>602,815=>602,816=>602,817=>602,818=>602,819=>602, +820=>602,821=>602,822=>602,823=>602,824=>602,825=>602,826=>602,827=>602,828=>602,829=>602, +830=>602,831=>602,835=>602,856=>602,865=>602,884=>602,885=>602,890=>602,894=>602,900=>602, +901=>602,902=>602,903=>602,904=>602,905=>602,906=>602,908=>602,910=>602,911=>602,912=>602, +913=>602,914=>602,915=>602,916=>602,917=>602,918=>602,919=>602,920=>602,921=>602,922=>602, +923=>602,924=>602,925=>602,926=>602,927=>602,928=>602,929=>602,931=>602,932=>602,933=>602, +934=>602,935=>602,936=>602,937=>602,938=>602,939=>602,940=>602,941=>602,942=>602,943=>602, +944=>602,945=>602,946=>602,947=>602,948=>602,949=>602,950=>602,951=>602,952=>602,953=>602, +954=>602,955=>602,956=>602,957=>602,958=>602,959=>602,960=>602,961=>602,962=>602,963=>602, +964=>602,965=>602,966=>602,967=>602,968=>602,969=>602,970=>602,971=>602,972=>602,973=>602, +974=>602,976=>602,977=>602,978=>602,979=>602,980=>602,981=>602,982=>602,983=>602,984=>602, +985=>602,986=>602,987=>602,988=>602,989=>602,990=>602,991=>602,992=>602,993=>602,1008=>602, +1009=>602,1010=>602,1011=>602,1012=>602,1013=>602,1014=>602,1015=>602,1016=>602,1017=>602,1018=>602, +1019=>602,1020=>602,1021=>602,1022=>602,1023=>602,1024=>602,1025=>602,1026=>602,1027=>602,1028=>602, +1029=>602,1030=>602,1031=>602,1032=>602,1033=>602,1034=>602,1035=>602,1036=>602,1037=>602,1038=>602, +1039=>602,1040=>602,1041=>602,1042=>602,1043=>602,1044=>602,1045=>602,1046=>602,1047=>602,1048=>602, +1049=>602,1050=>602,1051=>602,1052=>602,1053=>602,1054=>602,1055=>602,1056=>602,1057=>602,1058=>602, +1059=>602,1060=>602,1061=>602,1062=>602,1063=>602,1064=>602,1065=>602,1066=>602,1067=>602,1068=>602, +1069=>602,1070=>602,1071=>602,1072=>602,1073=>602,1074=>602,1075=>602,1076=>602,1077=>602,1078=>602, +1079=>602,1080=>602,1081=>602,1082=>602,1083=>602,1084=>602,1085=>602,1086=>602,1087=>602,1088=>602, +1089=>602,1090=>602,1091=>602,1092=>602,1093=>602,1094=>602,1095=>602,1096=>602,1097=>602,1098=>602, +1099=>602,1100=>602,1101=>602,1102=>602,1103=>602,1104=>602,1105=>602,1106=>602,1107=>602,1108=>602, +1109=>602,1110=>602,1111=>602,1112=>602,1113=>602,1114=>602,1115=>602,1116=>602,1117=>602,1118=>602, +1119=>602,1122=>602,1123=>602,1138=>602,1139=>602,1168=>602,1169=>602,1170=>602,1171=>602,1172=>602, +1173=>602,1174=>602,1175=>602,1176=>602,1177=>602,1178=>602,1179=>602,1186=>602,1187=>602,1188=>602, +1189=>602,1194=>602,1195=>602,1196=>602,1197=>602,1198=>602,1199=>602,1200=>602,1201=>602,1202=>602, +1203=>602,1210=>602,1211=>602,1216=>602,1217=>602,1218=>602,1219=>602,1220=>602,1223=>602,1224=>602, +1227=>602,1228=>602,1231=>602,1232=>602,1233=>602,1234=>602,1235=>602,1236=>602,1237=>602,1238=>602, +1239=>602,1240=>602,1241=>602,1242=>602,1243=>602,1244=>602,1245=>602,1246=>602,1247=>602,1248=>602, +1249=>602,1250=>602,1251=>602,1252=>602,1253=>602,1254=>602,1255=>602,1256=>602,1257=>602,1258=>602, +1259=>602,1260=>602,1261=>602,1262=>602,1263=>602,1264=>602,1265=>602,1266=>602,1267=>602,1268=>602, +1269=>602,1270=>602,1271=>602,1272=>602,1273=>602,1296=>602,1297=>602,1306=>602,1307=>602,1308=>602, +1309=>602,3713=>602,3714=>602,3716=>602,3719=>602,3720=>602,3722=>602,3725=>602,3732=>602,3733=>602, +3734=>602,3735=>602,3737=>602,3738=>602,3739=>602,3740=>602,3741=>602,3742=>602,3743=>602,3745=>602, +3746=>602,3747=>602,3749=>602,3751=>602,3754=>602,3755=>602,3757=>602,3758=>602,3759=>602,3760=>602, +3761=>602,3762=>602,3763=>602,3764=>602,3765=>602,3766=>602,3767=>602,3768=>602,3769=>602,3771=>602, +3772=>602,3784=>602,3785=>602,3786=>602,3787=>602,3788=>602,3789=>602,4304=>602,4305=>602,4306=>602, +4307=>602,4308=>602,4309=>602,4310=>602,4311=>602,4312=>602,4313=>602,4314=>602,4315=>602,4316=>602, +4317=>602,4318=>602,4319=>602,4320=>602,4321=>602,4322=>602,4323=>602,4324=>602,4325=>602,4326=>602, +4327=>602,4328=>602,4329=>602,4330=>602,4331=>602,4332=>602,4333=>602,4334=>602,4335=>602,4336=>602, +4337=>602,4338=>602,4339=>602,4340=>602,4341=>602,4342=>602,4343=>602,4344=>602,4345=>602,4346=>602, +4347=>602,4348=>602,7426=>602,7432=>602,7433=>602,7444=>602,7446=>602,7447=>602,7453=>602,7454=>602, +7455=>602,7468=>602,7469=>602,7470=>602,7472=>602,7473=>602,7474=>602,7475=>602,7476=>602,7477=>602, +7478=>602,7479=>602,7480=>602,7481=>602,7482=>602,7483=>602,7484=>602,7486=>602,7487=>602,7488=>602, +7489=>602,7490=>602,7491=>602,7492=>602,7493=>602,7494=>602,7495=>602,7496=>602,7497=>602,7498=>602, +7499=>602,7500=>602,7501=>602,7502=>602,7503=>602,7504=>602,7505=>602,7506=>602,7507=>602,7508=>602, +7509=>602,7510=>602,7511=>602,7512=>602,7513=>602,7514=>602,7515=>602,7522=>602,7523=>602,7524=>602, +7525=>602,7543=>602,7544=>602,7547=>602,7557=>602,7579=>602,7580=>602,7581=>602,7582=>602,7583=>602, +7584=>602,7585=>602,7586=>602,7587=>602,7588=>602,7589=>602,7590=>602,7591=>602,7592=>602,7593=>602, +7594=>602,7595=>602,7596=>602,7597=>602,7598=>602,7599=>602,7600=>602,7601=>602,7602=>602,7603=>602, +7604=>602,7605=>602,7606=>602,7607=>602,7609=>602,7610=>602,7611=>602,7612=>602,7613=>602,7614=>602, +7615=>602,7680=>602,7681=>602,7682=>602,7683=>602,7684=>602,7685=>602,7686=>602,7687=>602,7688=>602, +7689=>602,7690=>602,7691=>602,7692=>602,7693=>602,7694=>602,7695=>602,7696=>602,7697=>602,7698=>602, +7699=>602,7704=>602,7705=>602,7706=>602,7707=>602,7708=>602,7709=>602,7710=>602,7711=>602,7712=>602, +7713=>602,7714=>602,7715=>602,7716=>602,7717=>602,7718=>602,7719=>602,7720=>602,7721=>602,7722=>602, +7723=>602,7724=>602,7725=>602,7728=>602,7729=>602,7730=>602,7731=>602,7732=>602,7733=>602,7734=>602, +7735=>602,7736=>602,7737=>602,7738=>602,7739=>602,7740=>602,7741=>602,7742=>602,7743=>602,7744=>602, +7745=>602,7746=>602,7747=>602,7748=>602,7749=>602,7750=>602,7751=>602,7752=>602,7753=>602,7754=>602, +7755=>602,7756=>602,7757=>602,7764=>602,7765=>602,7766=>602,7767=>602,7768=>602,7769=>602,7770=>602, +7771=>602,7772=>602,7773=>602,7774=>602,7775=>602,7776=>602,7777=>602,7778=>602,7779=>602,7784=>602, +7785=>602,7786=>602,7787=>602,7788=>602,7789=>602,7790=>602,7791=>602,7792=>602,7793=>602,7794=>602, +7795=>602,7796=>602,7797=>602,7798=>602,7799=>602,7800=>602,7801=>602,7804=>602,7805=>602,7806=>602, +7807=>602,7808=>602,7809=>602,7810=>602,7811=>602,7812=>602,7813=>602,7814=>602,7815=>602,7816=>602, +7817=>602,7818=>602,7819=>602,7820=>602,7821=>602,7822=>602,7823=>602,7824=>602,7825=>602,7826=>602, +7827=>602,7828=>602,7829=>602,7830=>602,7831=>602,7832=>602,7833=>602,7835=>602,7839=>602,7840=>602, +7841=>602,7852=>602,7853=>602,7856=>602,7857=>602,7862=>602,7863=>602,7864=>602,7865=>602,7868=>602, +7869=>602,7878=>602,7879=>602,7882=>602,7883=>602,7884=>602,7885=>602,7896=>602,7897=>602,7898=>602, +7899=>602,7900=>602,7901=>602,7904=>602,7905=>602,7906=>602,7907=>602,7908=>602,7909=>602,7912=>602, +7913=>602,7914=>602,7915=>602,7918=>602,7919=>602,7920=>602,7921=>602,7922=>602,7923=>602,7924=>602, +7925=>602,7928=>602,7929=>602,7936=>602,7937=>602,7938=>602,7939=>602,7940=>602,7941=>602,7942=>602, +7943=>602,7944=>602,7945=>602,7946=>602,7947=>602,7948=>602,7949=>602,7950=>602,7951=>602,7952=>602, +7953=>602,7954=>602,7955=>602,7956=>602,7957=>602,7960=>602,7961=>602,7962=>602,7963=>602,7964=>602, +7965=>602,7968=>602,7969=>602,7970=>602,7971=>602,7972=>602,7973=>602,7974=>602,7975=>602,7976=>602, +7977=>602,7978=>602,7979=>602,7980=>602,7981=>602,7982=>602,7983=>602,7984=>602,7985=>602,7986=>602, +7987=>602,7988=>602,7989=>602,7990=>602,7991=>602,7992=>602,7993=>602,7994=>602,7995=>602,7996=>602, +7997=>602,7998=>602,7999=>602,8000=>602,8001=>602,8002=>602,8003=>602,8004=>602,8005=>602,8008=>602, +8009=>602,8010=>602,8011=>602,8012=>602,8013=>602,8016=>602,8017=>602,8018=>602,8019=>602,8020=>602, +8021=>602,8022=>602,8023=>602,8025=>602,8027=>602,8029=>602,8031=>602,8032=>602,8033=>602,8034=>602, +8035=>602,8036=>602,8037=>602,8038=>602,8039=>602,8040=>602,8041=>602,8042=>602,8043=>602,8044=>602, +8045=>602,8046=>602,8047=>602,8048=>602,8049=>602,8050=>602,8051=>602,8052=>602,8053=>602,8054=>602, +8055=>602,8056=>602,8057=>602,8058=>602,8059=>602,8060=>602,8061=>602,8064=>602,8065=>602,8066=>602, +8067=>602,8068=>602,8069=>602,8070=>602,8071=>602,8072=>602,8073=>602,8074=>602,8075=>602,8076=>602, +8077=>602,8078=>602,8079=>602,8080=>602,8081=>602,8082=>602,8083=>602,8084=>602,8085=>602,8086=>602, +8087=>602,8088=>602,8089=>602,8090=>602,8091=>602,8092=>602,8093=>602,8094=>602,8095=>602,8096=>602, +8097=>602,8098=>602,8099=>602,8100=>602,8101=>602,8102=>602,8103=>602,8104=>602,8105=>602,8106=>602, +8107=>602,8108=>602,8109=>602,8110=>602,8111=>602,8112=>602,8113=>602,8114=>602,8115=>602,8116=>602, +8118=>602,8119=>602,8120=>602,8121=>602,8122=>602,8123=>602,8124=>602,8125=>602,8126=>602,8127=>602, +8128=>602,8129=>602,8130=>602,8131=>602,8132=>602,8134=>602,8135=>602,8136=>602,8137=>602,8138=>602, +8139=>602,8140=>602,8141=>602,8142=>602,8143=>602,8144=>602,8145=>602,8146=>602,8147=>602,8150=>602, +8151=>602,8152=>602,8153=>602,8154=>602,8155=>602,8157=>602,8158=>602,8159=>602,8160=>602,8161=>602, +8162=>602,8163=>602,8164=>602,8165=>602,8166=>602,8167=>602,8168=>602,8169=>602,8170=>602,8171=>602, +8172=>602,8173=>602,8174=>602,8175=>602,8178=>602,8179=>602,8180=>602,8182=>602,8183=>602,8184=>602, +8185=>602,8186=>602,8187=>602,8188=>602,8189=>602,8190=>602,8192=>602,8193=>602,8194=>602,8195=>602, +8196=>602,8197=>602,8198=>602,8199=>602,8200=>602,8201=>602,8202=>602,8208=>602,8209=>602,8210=>602, +8213=>602,8215=>602,8219=>602,8223=>602,8227=>602,8239=>602,8241=>602,8242=>602,8243=>602,8244=>602, +8245=>602,8246=>602,8247=>602,8252=>602,8253=>602,8254=>602,8261=>602,8262=>602,8263=>602,8264=>602, +8265=>602,8287=>602,8304=>602,8305=>602,8308=>602,8309=>602,8310=>602,8311=>602,8312=>602,8313=>602, +8314=>602,8315=>602,8316=>602,8317=>602,8318=>602,8319=>602,8320=>602,8321=>602,8322=>602,8323=>602, +8324=>602,8325=>602,8326=>602,8327=>602,8328=>602,8329=>602,8330=>602,8331=>602,8332=>602,8333=>602, +8334=>602,8336=>602,8337=>602,8338=>602,8339=>602,8340=>602,8352=>602,8353=>602,8354=>602,8355=>602, +8356=>602,8357=>602,8358=>602,8359=>602,8360=>602,8361=>602,8362=>602,8363=>602,8365=>602,8366=>602, +8367=>602,8368=>602,8369=>602,8370=>602,8371=>602,8372=>602,8373=>602,8376=>602,8377=>602,8450=>602, +8453=>602,8461=>602,8462=>602,8463=>602,8469=>602,8470=>602,8471=>602,8473=>602,8474=>602,8477=>602, +8484=>602,8486=>602,8490=>602,8491=>602,8494=>602,8531=>602,8532=>602,8533=>602,8534=>602,8535=>602, +8536=>602,8537=>602,8538=>602,8539=>602,8540=>602,8541=>602,8542=>602,8543=>602,8592=>602,8593=>602, +8594=>602,8595=>602,8596=>602,8597=>602,8598=>602,8599=>602,8600=>602,8601=>602,8602=>602,8603=>602, +8604=>602,8605=>602,8606=>602,8607=>602,8608=>602,8609=>602,8610=>602,8611=>602,8612=>602,8613=>602, +8614=>602,8615=>602,8616=>602,8617=>602,8618=>602,8619=>602,8620=>602,8621=>602,8622=>602,8623=>602, +8624=>602,8625=>602,8626=>602,8627=>602,8628=>602,8629=>602,8630=>602,8631=>602,8632=>602,8633=>602, +8634=>602,8635=>602,8636=>602,8637=>602,8638=>602,8639=>602,8640=>602,8641=>602,8642=>602,8643=>602, +8644=>602,8645=>602,8646=>602,8647=>602,8648=>602,8649=>602,8650=>602,8651=>602,8652=>602,8653=>602, +8654=>602,8655=>602,8656=>602,8657=>602,8658=>602,8659=>602,8660=>602,8661=>602,8662=>602,8663=>602, +8664=>602,8665=>602,8666=>602,8667=>602,8668=>602,8669=>602,8670=>602,8671=>602,8672=>602,8673=>602, +8674=>602,8675=>602,8676=>602,8677=>602,8678=>602,8679=>602,8680=>602,8681=>602,8682=>602,8683=>602, +8684=>602,8685=>602,8686=>602,8687=>602,8688=>602,8689=>602,8690=>602,8691=>602,8692=>602,8693=>602, +8694=>602,8695=>602,8696=>602,8697=>602,8698=>602,8699=>602,8700=>602,8701=>602,8702=>602,8703=>602, +8704=>602,8705=>602,8706=>602,8707=>602,8708=>602,8709=>602,8710=>602,8711=>602,8712=>602,8713=>602, +8714=>602,8715=>602,8716=>602,8717=>602,8719=>602,8721=>602,8722=>602,8723=>602,8725=>602,8727=>602, +8728=>602,8729=>602,8730=>602,8731=>602,8732=>602,8733=>602,8734=>602,8735=>602,8736=>602,8743=>602, +8744=>602,8745=>602,8746=>602,8747=>602,8748=>602,8749=>602,8756=>602,8757=>602,8758=>602,8759=>602, +8760=>602,8761=>602,8762=>602,8763=>602,8764=>602,8765=>602,8769=>602,8770=>602,8771=>602,8772=>602, +8773=>602,8774=>602,8775=>602,8776=>602,8777=>602,8778=>602,8779=>602,8780=>602,8781=>602,8782=>602, +8783=>602,8784=>602,8785=>602,8786=>602,8787=>602,8788=>602,8789=>602,8790=>602,8791=>602,8792=>602, +8793=>602,8794=>602,8795=>602,8796=>602,8797=>602,8798=>602,8799=>602,8800=>602,8801=>602,8802=>602, +8803=>602,8804=>602,8805=>602,8806=>602,8807=>602,8808=>602,8809=>602,8813=>602,8814=>602,8815=>602, +8816=>602,8817=>602,8818=>602,8819=>602,8820=>602,8821=>602,8822=>602,8823=>602,8824=>602,8825=>602, +8826=>602,8827=>602,8828=>602,8829=>602,8830=>602,8831=>602,8832=>602,8833=>602,8834=>602,8835=>602, +8836=>602,8837=>602,8838=>602,8839=>602,8840=>602,8841=>602,8842=>602,8843=>602,8847=>602,8848=>602, +8849=>602,8850=>602,8853=>602,8854=>602,8855=>602,8856=>602,8857=>602,8858=>602,8859=>602,8860=>602, +8861=>602,8862=>602,8863=>602,8864=>602,8865=>602,8866=>602,8867=>602,8868=>602,8869=>602,8901=>602, +8902=>602,8909=>602,8922=>602,8923=>602,8924=>602,8925=>602,8926=>602,8927=>602,8928=>602,8929=>602, +8930=>602,8931=>602,8932=>602,8933=>602,8934=>602,8935=>602,8936=>602,8937=>602,8943=>602,8960=>602, +8961=>602,8962=>602,8963=>602,8964=>602,8965=>602,8966=>602,8968=>602,8969=>602,8970=>602,8971=>602, +8972=>602,8973=>602,8974=>602,8975=>602,8976=>602,8977=>602,8978=>602,8979=>602,8980=>602,8981=>602, +8984=>602,8985=>602,8988=>602,8989=>602,8990=>602,8991=>602,8992=>602,8993=>602,8997=>602,8998=>602, +8999=>602,9000=>602,9003=>602,9013=>602,9015=>602,9016=>602,9017=>602,9018=>602,9019=>602,9020=>602, +9021=>602,9022=>602,9025=>602,9026=>602,9027=>602,9028=>602,9031=>602,9032=>602,9033=>602,9035=>602, +9036=>602,9037=>602,9040=>602,9042=>602,9043=>602,9044=>602,9047=>602,9048=>602,9049=>602,9050=>602, +9051=>602,9052=>602,9054=>602,9055=>602,9056=>602,9059=>602,9060=>602,9061=>602,9064=>602,9065=>602, +9067=>602,9068=>602,9069=>602,9070=>602,9071=>602,9072=>602,9075=>602,9076=>602,9077=>602,9078=>602, +9079=>602,9080=>602,9081=>602,9082=>602,9085=>602,9088=>602,9089=>602,9090=>602,9091=>602,9096=>602, +9097=>602,9098=>602,9099=>602,9109=>602,9115=>602,9116=>602,9117=>602,9118=>602,9119=>602,9120=>602, +9121=>602,9122=>602,9123=>602,9124=>602,9125=>602,9126=>602,9127=>602,9128=>602,9129=>602,9130=>602, +9131=>602,9132=>602,9133=>602,9134=>602,9166=>602,9167=>602,9251=>602,9600=>602,9601=>602,9602=>602, +9603=>602,9604=>602,9605=>602,9606=>602,9607=>602,9608=>602,9609=>602,9610=>602,9611=>602,9612=>602, +9613=>602,9614=>602,9615=>602,9616=>602,9617=>602,9618=>602,9619=>602,9620=>602,9621=>602,9622=>602, +9623=>602,9624=>602,9625=>602,9626=>602,9627=>602,9628=>602,9629=>602,9630=>602,9631=>602,9632=>602, +9633=>602,9634=>602,9635=>602,9636=>602,9637=>602,9638=>602,9639=>602,9640=>602,9641=>602,9642=>602, +9643=>602,9644=>602,9645=>602,9646=>602,9647=>602,9648=>602,9649=>602,9650=>602,9651=>602,9652=>602, +9653=>602,9654=>602,9655=>602,9656=>602,9657=>602,9658=>602,9659=>602,9660=>602,9661=>602,9662=>602, +9663=>602,9664=>602,9665=>602,9666=>602,9667=>602,9668=>602,9669=>602,9670=>602,9671=>602,9672=>602, +9673=>602,9674=>602,9675=>602,9676=>602,9677=>602,9678=>602,9679=>602,9680=>602,9681=>602,9682=>602, +9683=>602,9684=>602,9685=>602,9686=>602,9687=>602,9688=>602,9689=>602,9690=>602,9691=>602,9692=>602, +9693=>602,9694=>602,9695=>602,9696=>602,9697=>602,9698=>602,9699=>602,9700=>602,9701=>602,9702=>602, +9703=>602,9704=>602,9705=>602,9706=>602,9707=>602,9708=>602,9709=>602,9710=>602,9711=>602,9712=>602, +9713=>602,9714=>602,9715=>602,9716=>602,9717=>602,9718=>602,9719=>602,9720=>602,9721=>602,9722=>602, +9723=>602,9724=>602,9725=>602,9726=>602,9727=>602,9728=>602,9784=>602,9785=>602,9786=>602,9787=>602, +9788=>602,9791=>602,9792=>602,9793=>602,9794=>602,9795=>602,9796=>602,9797=>602,9798=>602,9799=>602, +9824=>602,9825=>602,9826=>602,9827=>602,9828=>602,9829=>602,9830=>602,9831=>602,9833=>602,9834=>602, +9835=>602,9836=>602,9837=>602,9838=>602,9839=>602,10181=>602,10182=>602,10208=>602,10216=>602,10217=>602, +10731=>602,10746=>602,10747=>602,10799=>602,11026=>602,11027=>602,11028=>602,11029=>602,11030=>602,11031=>602, +11032=>602,11033=>602,11034=>602,11364=>602,11373=>602,11374=>602,11375=>602,11376=>602,11381=>602,11382=>602, +11383=>602,11385=>602,11386=>602,11388=>602,11389=>602,11390=>602,11391=>602,11800=>602,11810=>602,11811=>602, +11812=>602,11813=>602,11822=>602,42760=>602,42761=>602,42762=>602,42763=>602,42764=>602,42765=>602,42766=>602, +42767=>602,42768=>602,42769=>602,42770=>602,42771=>602,42772=>602,42773=>602,42774=>602,42779=>602,42780=>602, +42781=>602,42782=>602,42783=>602,42786=>602,42787=>602,42788=>602,42789=>602,42790=>602,42791=>602,42889=>602, +42890=>602,42891=>602,42892=>602,42893=>602,63173=>602,64257=>602,64258=>602,65529=>602,65530=>602,65531=>602, +65532=>602,65533=>602); +$enc=''; +$diff=''; +$file='dejavusansmonobi.z'; +$ctg='dejavusansmonobi.ctg.z'; +$originalsize=224936; +// --- EOF --- --- /dev/null +++ b/tcpdf/fonts/dejavusansmonoi.php @@ -1,1 +1,264 @@ - +928,'Descent'=>-236,'CapHeight'=>-62,'Flags'=>97,'FontBBox'=>'[-406 -375 746 1028]','ItalicAngle'=>-11,'StemV'=>70,'MissingWidth'=>602); +$up=-63; +$ut=44; +$dw=602; +$cw=array( +0=>602,32=>602,33=>602,34=>602,35=>602,36=>602,37=>602,38=>602,39=>602,40=>602, +41=>602,42=>602,43=>602,44=>602,45=>602,46=>602,47=>602,48=>602,49=>602,50=>602, +51=>602,52=>602,53=>602,54=>602,55=>602,56=>602,57=>602,58=>602,59=>602,60=>602, +61=>602,62=>602,63=>602,64=>602,65=>602,66=>602,67=>602,68=>602,69=>602,70=>602, +71=>602,72=>602,73=>602,74=>602,75=>602,76=>602,77=>602,78=>602,79=>602,80=>602, +81=>602,82=>602,83=>602,84=>602,85=>602,86=>602,87=>602,88=>602,89=>602,90=>602, +91=>602,92=>602,93=>602,94=>602,95=>602,96=>602,97=>602,98=>602,99=>602,100=>602, +101=>602,102=>602,103=>602,104=>602,105=>602,106=>602,107=>602,108=>602,109=>602,110=>602, +111=>602,112=>602,113=>602,114=>602,115=>602,116=>602,117=>602,118=>602,119=>602,120=>602, +121=>602,122=>602,123=>602,124=>602,125=>602,126=>602,8364=>602,8218=>602,402=>602,8222=>602, +8230=>602,8224=>602,8225=>602,710=>602,8240=>602,352=>602,8249=>602,338=>602,381=>602,8216=>602, +8217=>602,8220=>602,8221=>602,8226=>602,8211=>602,8212=>602,732=>602,8482=>602,353=>602,8250=>602, +339=>602,382=>602,376=>602,160=>602,161=>602,162=>602,163=>602,164=>602,165=>602,166=>602, +167=>602,168=>602,169=>602,170=>602,171=>602,172=>602,173=>602,174=>602,175=>602,176=>602, +177=>602,178=>602,179=>602,180=>602,181=>602,182=>602,183=>602,184=>602,185=>602,186=>602, +187=>602,188=>602,189=>602,190=>602,191=>602,192=>602,193=>602,194=>602,195=>602,196=>602, +197=>602,198=>602,199=>602,200=>602,201=>602,202=>602,203=>602,204=>602,205=>602,206=>602, +207=>602,208=>602,209=>602,210=>602,211=>602,212=>602,213=>602,214=>602,215=>602,216=>602, +217=>602,218=>602,219=>602,220=>602,221=>602,222=>602,223=>602,224=>602,225=>602,226=>602, +227=>602,228=>602,229=>602,230=>602,231=>602,232=>602,233=>602,234=>602,235=>602,236=>602, +237=>602,238=>602,239=>602,240=>602,241=>602,242=>602,243=>602,244=>602,245=>602,246=>602, +247=>602,248=>602,249=>602,250=>602,251=>602,252=>602,253=>602,254=>602,255=>602,256=>602, +257=>602,258=>602,259=>602,260=>602,261=>602,262=>602,263=>602,264=>602,265=>602,266=>602, +267=>602,268=>602,269=>602,270=>602,271=>602,272=>602,273=>602,274=>602,275=>602,276=>602, +277=>602,278=>602,279=>602,280=>602,281=>602,282=>602,283=>602,284=>602,285=>602,286=>602, +287=>602,288=>602,289=>602,290=>602,291=>602,292=>602,293=>602,294=>602,295=>602,296=>602, +297=>602,298=>602,299=>602,300=>602,301=>602,302=>602,303=>602,304=>602,305=>602,306=>602, +307=>602,308=>602,309=>602,310=>602,311=>602,312=>602,313=>602,314=>602,315=>602,316=>602, +317=>602,318=>602,319=>602,320=>602,321=>602,322=>602,323=>602,324=>602,325=>602,326=>602, +327=>602,328=>602,329=>602,330=>602,331=>602,332=>602,333=>602,334=>602,335=>602,336=>602, +337=>602,340=>602,341=>602,342=>602,343=>602,344=>602,345=>602,346=>602,347=>602,348=>602, +349=>602,350=>602,351=>602,354=>602,355=>602,356=>602,357=>602,358=>602,359=>602,360=>602, +361=>602,362=>602,363=>602,364=>602,365=>602,366=>602,367=>602,368=>602,369=>602,370=>602, +371=>602,372=>602,373=>602,374=>602,375=>602,377=>602,378=>602,379=>602,380=>602,383=>602, +384=>602,385=>602,386=>602,387=>602,388=>602,389=>602,390=>602,391=>602,392=>602,393=>602, +394=>602,395=>602,396=>602,397=>602,398=>602,399=>602,400=>602,401=>602,403=>602,404=>602, +405=>602,406=>602,407=>602,408=>602,409=>602,410=>602,411=>602,412=>602,413=>602,414=>602, +415=>602,416=>602,417=>602,418=>602,419=>602,420=>602,421=>602,422=>602,423=>602,424=>602, +425=>602,426=>602,427=>602,428=>602,429=>602,430=>602,431=>602,432=>602,433=>602,434=>602, +435=>602,436=>602,437=>602,438=>602,439=>602,440=>602,441=>602,442=>602,443=>602,444=>602, +445=>602,446=>602,447=>602,448=>602,449=>602,450=>602,451=>602,461=>602,462=>602,463=>602, +464=>602,465=>602,466=>602,467=>602,468=>602,469=>602,470=>602,471=>602,472=>602,473=>602, +474=>602,475=>602,476=>602,477=>602,479=>602,480=>602,481=>602,482=>602,483=>602,486=>602, +487=>602,488=>602,489=>602,490=>602,491=>602,492=>602,493=>602,494=>602,495=>602,500=>602, +501=>602,502=>602,504=>602,505=>602,508=>602,509=>602,510=>602,511=>602,512=>602,513=>602, +514=>602,515=>602,516=>602,517=>602,518=>602,519=>602,520=>602,521=>602,522=>602,523=>602, +524=>602,525=>602,526=>602,527=>602,528=>602,529=>602,530=>602,531=>602,532=>602,533=>602, +534=>602,535=>602,536=>602,537=>602,538=>602,539=>602,540=>602,541=>602,542=>602,543=>602, +545=>602,548=>602,549=>602,550=>602,551=>602,552=>602,553=>602,554=>602,555=>602,556=>602, +557=>602,558=>602,559=>602,560=>602,561=>602,562=>602,563=>602,564=>602,565=>602,566=>602, +567=>602,568=>602,569=>602,570=>602,571=>602,572=>602,573=>602,574=>602,575=>602,576=>602, +577=>602,580=>602,581=>602,588=>602,589=>602,592=>602,593=>602,594=>602,595=>602,596=>602, +597=>602,598=>602,599=>602,600=>602,601=>602,602=>602,603=>602,604=>602,605=>602,606=>602, +607=>602,608=>602,609=>602,610=>602,611=>602,612=>602,613=>602,614=>602,615=>602,616=>602, +617=>602,618=>602,619=>602,620=>602,621=>602,622=>602,623=>602,624=>602,625=>602,626=>602, +627=>602,628=>602,629=>602,630=>602,631=>602,632=>602,633=>602,634=>602,635=>602,636=>602, +637=>602,638=>602,639=>602,640=>602,641=>602,642=>602,643=>602,644=>602,645=>602,646=>602, +647=>602,648=>602,649=>602,650=>602,651=>602,652=>602,653=>602,654=>602,655=>602,656=>602, +657=>602,658=>602,659=>602,660=>602,661=>602,662=>602,663=>602,664=>602,665=>602,666=>602, +667=>602,668=>602,669=>602,670=>602,671=>602,672=>602,673=>602,674=>602,675=>602,676=>602, +677=>602,678=>602,679=>602,680=>602,681=>602,682=>602,683=>602,684=>602,685=>602,686=>602, +687=>602,688=>602,689=>602,690=>602,691=>602,692=>602,693=>602,694=>602,695=>602,696=>602, +697=>602,699=>602,700=>602,701=>602,702=>602,703=>602,704=>602,705=>602,711=>602,712=>602, +713=>602,716=>602,717=>602,720=>602,721=>602,722=>602,723=>602,726=>602,727=>602,728=>602, +729=>602,730=>602,731=>602,733=>602,734=>602,736=>602,737=>602,738=>602,739=>602,740=>602, +741=>602,742=>602,743=>602,744=>602,745=>602,750=>602,755=>602,768=>602,769=>602,770=>602, +771=>602,772=>602,773=>602,774=>602,775=>602,776=>602,777=>602,778=>602,779=>602,780=>602, +781=>602,782=>602,783=>602,784=>602,785=>602,786=>602,787=>602,788=>602,789=>602,790=>602, +791=>602,792=>602,793=>602,794=>602,795=>602,796=>602,797=>602,798=>602,799=>602,800=>602, +801=>602,802=>602,803=>602,804=>602,805=>602,806=>602,807=>602,808=>602,809=>602,810=>602, +811=>602,812=>602,813=>602,814=>602,815=>602,816=>602,817=>602,818=>602,819=>602,820=>602, +821=>602,822=>602,823=>602,824=>602,825=>602,826=>602,827=>602,828=>602,829=>602,830=>602, +831=>602,835=>602,856=>602,865=>602,884=>602,885=>602,890=>602,894=>602,900=>602,901=>602, +902=>602,903=>602,904=>602,905=>602,906=>602,908=>602,910=>602,911=>602,912=>602,913=>602, +914=>602,915=>602,916=>602,917=>602,918=>602,919=>602,920=>602,921=>602,922=>602,923=>602, +924=>602,925=>602,926=>602,927=>602,928=>602,929=>602,931=>602,932=>602,933=>602,934=>602, +935=>602,936=>602,937=>602,938=>602,939=>602,940=>602,941=>602,942=>602,943=>602,944=>602, +945=>602,946=>602,947=>602,948=>602,949=>602,950=>602,951=>602,952=>602,953=>602,954=>602, +955=>602,956=>602,957=>602,958=>602,959=>602,960=>602,961=>602,962=>602,963=>602,964=>602, +965=>602,966=>602,967=>602,968=>602,969=>602,970=>602,971=>602,972=>602,973=>602,974=>602, +976=>602,977=>602,978=>602,979=>602,980=>602,981=>602,982=>602,983=>602,984=>602,985=>602, +986=>602,987=>602,988=>602,989=>602,990=>602,991=>602,992=>602,993=>602,1008=>602,1009=>602, +1010=>602,1011=>602,1012=>602,1013=>602,1014=>602,1015=>602,1016=>602,1017=>602,1018=>602,1019=>602, +1020=>602,1021=>602,1022=>602,1023=>602,1024=>602,1025=>602,1026=>602,1027=>602,1028=>602,1029=>602, +1030=>602,1031=>602,1032=>602,1033=>602,1034=>602,1035=>602,1036=>602,1037=>602,1038=>602,1039=>602, +1040=>602,1041=>602,1042=>602,1043=>602,1044=>602,1045=>602,1046=>602,1047=>602,1048=>602,1049=>602, +1050=>602,1051=>602,1052=>602,1053=>602,1054=>602,1055=>602,1056=>602,1057=>602,1058=>602,1059=>602, +1060=>602,1061=>602,1062=>602,1063=>602,1064=>602,1065=>602,1066=>602,1067=>602,1068=>602,1069=>602, +1070=>602,1071=>602,1072=>602,1073=>602,1074=>602,1075=>602,1076=>602,1077=>602,1078=>602,1079=>602, +1080=>602,1081=>602,1082=>602,1083=>602,1084=>602,1085=>602,1086=>602,1087=>602,1088=>602,1089=>602, +1090=>602,1091=>602,1092=>602,1093=>602,1094=>602,1095=>602,1096=>602,1097=>602,1098=>602,1099=>602, +1100=>602,1101=>602,1102=>602,1103=>602,1104=>602,1105=>602,1106=>602,1107=>602,1108=>602,1109=>602, +1110=>602,1111=>602,1112=>602,1113=>602,1114=>602,1115=>602,1116=>602,1117=>602,1118=>602,1119=>602, +1122=>602,1123=>602,1138=>602,1139=>602,1168=>602,1169=>602,1170=>602,1171=>602,1172=>602,1173=>602, +1174=>602,1175=>602,1176=>602,1177=>602,1178=>602,1179=>602,1186=>602,1187=>602,1188=>602,1189=>602, +1194=>602,1195=>602,1196=>602,1197=>602,1198=>602,1199=>602,1200=>602,1201=>602,1202=>602,1203=>602, +1210=>602,1211=>602,1216=>602,1217=>602,1218=>602,1219=>602,1220=>602,1223=>602,1224=>602,1227=>602, +1228=>602,1231=>602,1232=>602,1233=>602,1234=>602,1235=>602,1236=>602,1237=>602,1238=>602,1239=>602, +1240=>602,1241=>602,1242=>602,1243=>602,1244=>602,1245=>602,1246=>602,1247=>602,1248=>602,1249=>602, +1250=>602,1251=>602,1252=>602,1253=>602,1254=>602,1255=>602,1256=>602,1257=>602,1258=>602,1259=>602, +1260=>602,1261=>602,1262=>602,1263=>602,1264=>602,1265=>602,1266=>602,1267=>602,1268=>602,1269=>602, +1270=>602,1271=>602,1272=>602,1273=>602,1296=>602,1297=>602,1306=>602,1307=>602,1308=>602,1309=>602, +3713=>602,3714=>602,3716=>602,3719=>602,3720=>602,3722=>602,3725=>602,3732=>602,3733=>602,3734=>602, +3735=>602,3737=>602,3738=>602,3739=>602,3740=>602,3741=>602,3742=>602,3743=>602,3745=>602,3746=>602, +3747=>602,3749=>602,3751=>602,3754=>602,3755=>602,3757=>602,3758=>602,3759=>602,3760=>602,3761=>602, +3762=>602,3763=>602,3764=>602,3765=>602,3766=>602,3767=>602,3768=>602,3769=>602,3771=>602,3772=>602, +3784=>602,3785=>602,3786=>602,3787=>602,3788=>602,3789=>602,4304=>602,4305=>602,4306=>602,4307=>602, +4308=>602,4309=>602,4310=>602,4311=>602,4312=>602,4313=>602,4314=>602,4315=>602,4316=>602,4317=>602, +4318=>602,4319=>602,4320=>602,4321=>602,4322=>602,4323=>602,4324=>602,4325=>602,4326=>602,4327=>602, +4328=>602,4329=>602,4330=>602,4331=>602,4332=>602,4333=>602,4334=>602,4335=>602,4336=>602,4337=>602, +4338=>602,4339=>602,4340=>602,4341=>602,4342=>602,4343=>602,4344=>602,4345=>602,4346=>602,4347=>602, +4348=>602,7426=>602,7432=>602,7433=>602,7444=>602,7446=>602,7447=>602,7453=>602,7454=>602,7455=>602, +7468=>602,7469=>602,7470=>602,7472=>602,7473=>602,7474=>602,7475=>602,7476=>602,7477=>602,7478=>602, +7479=>602,7480=>602,7481=>602,7482=>602,7483=>602,7484=>602,7485=>602,7486=>602,7487=>602,7488=>602, +7489=>602,7490=>602,7491=>602,7492=>602,7493=>602,7494=>602,7495=>602,7496=>602,7497=>602,7498=>602, +7499=>602,7500=>602,7501=>602,7502=>602,7503=>602,7504=>602,7505=>602,7506=>602,7507=>602,7508=>602, +7509=>602,7510=>602,7511=>602,7512=>602,7513=>602,7514=>602,7515=>602,7522=>602,7523=>602,7524=>602, +7525=>602,7543=>602,7544=>602,7547=>602,7557=>602,7579=>602,7580=>602,7581=>602,7582=>602,7583=>602, +7584=>602,7585=>602,7586=>602,7587=>602,7588=>602,7589=>602,7590=>602,7591=>602,7592=>602,7593=>602, +7594=>602,7595=>602,7596=>602,7597=>602,7598=>602,7599=>602,7600=>602,7601=>602,7602=>602,7603=>602, +7604=>602,7605=>602,7606=>602,7607=>602,7609=>602,7610=>602,7611=>602,7612=>602,7613=>602,7614=>602, +7615=>602,7680=>602,7681=>602,7682=>602,7683=>602,7684=>602,7685=>602,7686=>602,7687=>602,7688=>602, +7689=>602,7690=>602,7691=>602,7692=>602,7693=>602,7694=>602,7695=>602,7696=>602,7697=>602,7698=>602, +7699=>602,7704=>602,7705=>602,7706=>602,7707=>602,7708=>602,7709=>602,7710=>602,7711=>602,7712=>602, +7713=>602,7714=>602,7715=>602,7716=>602,7717=>602,7718=>602,7719=>602,7720=>602,7721=>602,7722=>602, +7723=>602,7724=>602,7725=>602,7728=>602,7729=>602,7730=>602,7731=>602,7732=>602,7733=>602,7734=>602, +7735=>602,7736=>602,7737=>602,7738=>602,7739=>602,7740=>602,7741=>602,7742=>602,7743=>602,7744=>602, +7745=>602,7746=>602,7747=>602,7748=>602,7749=>602,7750=>602,7751=>602,7752=>602,7753=>602,7754=>602, +7755=>602,7756=>602,7757=>602,7764=>602,7765=>602,7766=>602,7767=>602,7768=>602,7769=>602,7770=>602, +7771=>602,7772=>602,7773=>602,7774=>602,7775=>602,7776=>602,7777=>602,7778=>602,7779=>602,7784=>602, +7785=>602,7786=>602,7787=>602,7788=>602,7789=>602,7790=>602,7791=>602,7792=>602,7793=>602,7794=>602, +7795=>602,7796=>602,7797=>602,7798=>602,7799=>602,7800=>602,7801=>602,7804=>602,7805=>602,7806=>602, +7807=>602,7808=>602,7809=>602,7810=>602,7811=>602,7812=>602,7813=>602,7814=>602,7815=>602,7816=>602, +7817=>602,7818=>602,7819=>602,7820=>602,7821=>602,7822=>602,7823=>602,7824=>602,7825=>602,7826=>602, +7827=>602,7828=>602,7829=>602,7830=>602,7831=>602,7832=>602,7833=>602,7835=>602,7839=>602,7840=>602, +7841=>602,7852=>602,7853=>602,7856=>602,7857=>602,7862=>602,7863=>602,7864=>602,7865=>602,7868=>602, +7869=>602,7878=>602,7879=>602,7882=>602,7883=>602,7884=>602,7885=>602,7896=>602,7897=>602,7898=>602, +7899=>602,7900=>602,7901=>602,7904=>602,7905=>602,7906=>602,7907=>602,7908=>602,7909=>602,7912=>602, +7913=>602,7914=>602,7915=>602,7918=>602,7919=>602,7920=>602,7921=>602,7922=>602,7923=>602,7924=>602, +7925=>602,7928=>602,7929=>602,7936=>602,7937=>602,7938=>602,7939=>602,7940=>602,7941=>602,7942=>602, +7943=>602,7944=>602,7945=>602,7946=>602,7947=>602,7948=>602,7949=>602,7950=>602,7951=>602,7952=>602, +7953=>602,7954=>602,7955=>602,7956=>602,7957=>602,7960=>602,7961=>602,7962=>602,7963=>602,7964=>602, +7965=>602,7968=>602,7969=>602,7970=>602,7971=>602,7972=>602,7973=>602,7974=>602,7975=>602,7976=>602, +7977=>602,7978=>602,7979=>602,7980=>602,7981=>602,7982=>602,7983=>602,7984=>602,7985=>602,7986=>602, +7987=>602,7988=>602,7989=>602,7990=>602,7991=>602,7992=>602,7993=>602,7994=>602,7995=>602,7996=>602, +7997=>602,7998=>602,7999=>602,8000=>602,8001=>602,8002=>602,8003=>602,8004=>602,8005=>602,8008=>602, +8009=>602,8010=>602,8011=>602,8012=>602,8013=>602,8016=>602,8017=>602,8018=>602,8019=>602,8020=>602, +8021=>602,8022=>602,8023=>602,8025=>602,8027=>602,8029=>602,8031=>602,8032=>602,8033=>602,8034=>602, +8035=>602,8036=>602,8037=>602,8038=>602,8039=>602,8040=>602,8041=>602,8042=>602,8043=>602,8044=>602, +8045=>602,8046=>602,8047=>602,8048=>602,8049=>602,8050=>602,8051=>602,8052=>602,8053=>602,8054=>602, +8055=>602,8056=>602,8057=>602,8058=>602,8059=>602,8060=>602,8061=>602,8064=>602,8065=>602,8066=>602, +8067=>602,8068=>602,8069=>602,8070=>602,8071=>602,8072=>602,8073=>602,8074=>602,8075=>602,8076=>602, +8077=>602,8078=>602,8079=>602,8080=>602,8081=>602,8082=>602,8083=>602,8084=>602,8085=>602,8086=>602, +8087=>602,8088=>602,8089=>602,8090=>602,8091=>602,8092=>602,8093=>602,8094=>602,8095=>602,8096=>602, +8097=>602,8098=>602,8099=>602,8100=>602,8101=>602,8102=>602,8103=>602,8104=>602,8105=>602,8106=>602, +8107=>602,8108=>602,8109=>602,8110=>602,8111=>602,8112=>602,8113=>602,8114=>602,8115=>602,8116=>602, +8118=>602,8119=>602,8120=>602,8121=>602,8122=>602,8123=>602,8124=>602,8125=>602,8126=>602,8127=>602, +8128=>602,8129=>602,8130=>602,8131=>602,8132=>602,8134=>602,8135=>602,8136=>602,8137=>602,8138=>602, +8139=>602,8140=>602,8141=>602,8142=>602,8143=>602,8144=>602,8145=>602,8146=>602,8147=>602,8150=>602, +8151=>602,8152=>602,8153=>602,8154=>602,8155=>602,8157=>602,8158=>602,8159=>602,8160=>602,8161=>602, +8162=>602,8163=>602,8164=>602,8165=>602,8166=>602,8167=>602,8168=>602,8169=>602,8170=>602,8171=>602, +8172=>602,8173=>602,8174=>602,8175=>602,8178=>602,8179=>602,8180=>602,8182=>602,8183=>602,8184=>602, +8185=>602,8186=>602,8187=>602,8188=>602,8189=>602,8190=>602,8192=>602,8193=>602,8194=>602,8195=>602, +8196=>602,8197=>602,8198=>602,8199=>602,8200=>602,8201=>602,8202=>602,8208=>602,8209=>602,8210=>602, +8213=>602,8215=>602,8219=>602,8223=>602,8227=>602,8239=>602,8241=>602,8242=>602,8243=>602,8244=>602, +8245=>602,8246=>602,8247=>602,8252=>602,8253=>602,8254=>602,8261=>602,8262=>602,8263=>602,8264=>602, +8265=>602,8287=>602,8304=>602,8305=>602,8308=>602,8309=>602,8310=>602,8311=>602,8312=>602,8313=>602, +8314=>602,8315=>602,8316=>602,8317=>602,8318=>602,8319=>602,8320=>602,8321=>602,8322=>602,8323=>602, +8324=>602,8325=>602,8326=>602,8327=>602,8328=>602,8329=>602,8330=>602,8331=>602,8332=>602,8333=>602, +8334=>602,8336=>602,8337=>602,8338=>602,8339=>602,8340=>602,8352=>602,8353=>602,8354=>602,8355=>602, +8356=>602,8357=>602,8358=>602,8359=>602,8360=>602,8361=>602,8362=>602,8363=>602,8365=>602,8366=>602, +8367=>602,8368=>602,8369=>602,8370=>602,8371=>602,8372=>602,8373=>602,8376=>602,8377=>602,8450=>602, +8453=>602,8461=>602,8462=>602,8463=>602,8469=>602,8470=>602,8471=>602,8473=>602,8474=>602,8477=>602, +8484=>602,8486=>602,8490=>602,8491=>602,8494=>602,8531=>602,8532=>602,8533=>602,8534=>602,8535=>602, +8536=>602,8537=>602,8538=>602,8539=>602,8540=>602,8541=>602,8542=>602,8543=>602,8592=>602,8593=>602, +8594=>602,8595=>602,8596=>602,8597=>602,8598=>602,8599=>602,8600=>602,8601=>602,8602=>602,8603=>602, +8604=>602,8605=>602,8606=>602,8607=>602,8608=>602,8609=>602,8610=>602,8611=>602,8612=>602,8613=>602, +8614=>602,8615=>602,8616=>602,8617=>602,8618=>602,8619=>602,8620=>602,8621=>602,8622=>602,8623=>602, +8624=>602,8625=>602,8626=>602,8627=>602,8628=>602,8629=>602,8630=>602,8631=>602,8632=>602,8633=>602, +8634=>602,8635=>602,8636=>602,8637=>602,8638=>602,8639=>602,8640=>602,8641=>602,8642=>602,8643=>602, +8644=>602,8645=>602,8646=>602,8647=>602,8648=>602,8649=>602,8650=>602,8651=>602,8652=>602,8653=>602, +8654=>602,8655=>602,8656=>602,8657=>602,8658=>602,8659=>602,8660=>602,8661=>602,8662=>602,8663=>602, +8664=>602,8665=>602,8666=>602,8667=>602,8668=>602,8669=>602,8670=>602,8671=>602,8672=>602,8673=>602, +8674=>602,8675=>602,8676=>602,8677=>602,8678=>602,8679=>602,8680=>602,8681=>602,8682=>602,8683=>602, +8684=>602,8685=>602,8686=>602,8687=>602,8688=>602,8689=>602,8690=>602,8691=>602,8692=>602,8693=>602, +8694=>602,8695=>602,8696=>602,8697=>602,8698=>602,8699=>602,8700=>602,8701=>602,8702=>602,8703=>602, +8704=>602,8705=>602,8706=>602,8707=>602,8708=>602,8709=>602,8710=>602,8711=>602,8712=>602,8713=>602, +8714=>602,8715=>602,8716=>602,8717=>602,8719=>602,8721=>602,8722=>602,8723=>602,8725=>602,8727=>602, +8728=>602,8729=>602,8730=>602,8731=>602,8732=>602,8733=>602,8734=>602,8735=>602,8736=>602,8743=>602, +8744=>602,8745=>602,8746=>602,8747=>602,8748=>602,8749=>602,8756=>602,8757=>602,8758=>602,8759=>602, +8760=>602,8761=>602,8762=>602,8763=>602,8764=>602,8765=>602,8769=>602,8770=>602,8771=>602,8772=>602, +8773=>602,8774=>602,8775=>602,8776=>602,8777=>602,8778=>602,8779=>602,8780=>602,8781=>602,8782=>602, +8783=>602,8784=>602,8785=>602,8786=>602,8787=>602,8788=>602,8789=>602,8790=>602,8791=>602,8792=>602, +8793=>602,8794=>602,8795=>602,8796=>602,8797=>602,8798=>602,8799=>602,8800=>602,8801=>602,8802=>602, +8803=>602,8804=>602,8805=>602,8806=>602,8807=>602,8808=>602,8809=>602,8813=>602,8814=>602,8815=>602, +8816=>602,8817=>602,8818=>602,8819=>602,8820=>602,8821=>602,8822=>602,8823=>602,8824=>602,8825=>602, +8826=>602,8827=>602,8828=>602,8829=>602,8830=>602,8831=>602,8832=>602,8833=>602,8834=>602,8835=>602, +8836=>602,8837=>602,8838=>602,8839=>602,8840=>602,8841=>602,8842=>602,8843=>602,8847=>602,8848=>602, +8849=>602,8850=>602,8853=>602,8854=>602,8855=>602,8856=>602,8857=>602,8858=>602,8859=>602,8860=>602, +8861=>602,8862=>602,8863=>602,8864=>602,8865=>602,8866=>602,8867=>602,8868=>602,8869=>602,8901=>602, +8902=>602,8909=>602,8922=>602,8923=>602,8924=>602,8925=>602,8926=>602,8927=>602,8928=>602,8929=>602, +8930=>602,8931=>602,8932=>602,8933=>602,8934=>602,8935=>602,8936=>602,8937=>602,8943=>602,8960=>602, +8961=>602,8962=>602,8963=>602,8964=>602,8965=>602,8966=>602,8968=>602,8969=>602,8970=>602,8971=>602, +8972=>602,8973=>602,8974=>602,8975=>602,8976=>602,8977=>602,8978=>602,8979=>602,8980=>602,8981=>602, +8984=>602,8985=>602,8988=>602,8989=>602,8990=>602,8991=>602,8992=>602,8993=>602,8997=>602,8998=>602, +8999=>602,9000=>602,9003=>602,9013=>602,9015=>602,9016=>602,9017=>602,9018=>602,9019=>602,9020=>602, +9021=>602,9022=>602,9025=>602,9026=>602,9027=>602,9028=>602,9031=>602,9032=>602,9033=>602,9035=>602, +9036=>602,9037=>602,9040=>602,9042=>602,9043=>602,9044=>602,9047=>602,9048=>602,9049=>602,9050=>602, +9051=>602,9052=>602,9054=>602,9055=>602,9056=>602,9059=>602,9060=>602,9061=>602,9064=>602,9065=>602, +9067=>602,9068=>602,9069=>602,9070=>602,9071=>602,9072=>602,9075=>602,9076=>602,9077=>602,9078=>602, +9079=>602,9080=>602,9081=>602,9082=>602,9085=>602,9088=>602,9089=>602,9090=>602,9091=>602,9096=>602, +9097=>602,9098=>602,9099=>602,9109=>602,9115=>602,9116=>602,9117=>602,9118=>602,9119=>602,9120=>602, +9121=>602,9122=>602,9123=>602,9124=>602,9125=>602,9126=>602,9127=>602,9128=>602,9129=>602,9130=>602, +9131=>602,9132=>602,9133=>602,9134=>602,9166=>602,9167=>602,9251=>602,9472=>602,9473=>602,9474=>602, +9475=>602,9476=>602,9477=>602,9478=>602,9479=>602,9480=>602,9481=>602,9482=>602,9483=>602,9484=>602, +9485=>602,9486=>602,9487=>602,9488=>602,9489=>602,9490=>602,9491=>602,9492=>602,9493=>602,9494=>602, +9495=>602,9496=>602,9497=>602,9498=>602,9499=>602,9500=>602,9501=>602,9502=>602,9503=>602,9504=>602, +9505=>602,9506=>602,9507=>602,9508=>602,9509=>602,9510=>602,9511=>602,9512=>602,9513=>602,9514=>602, +9515=>602,9516=>602,9517=>602,9518=>602,9519=>602,9520=>602,9521=>602,9522=>602,9523=>602,9524=>602, +9525=>602,9526=>602,9527=>602,9528=>602,9529=>602,9530=>602,9531=>602,9532=>602,9533=>602,9534=>602, +9535=>602,9536=>602,9537=>602,9538=>602,9539=>602,9540=>602,9541=>602,9542=>602,9543=>602,9544=>602, +9545=>602,9546=>602,9547=>602,9548=>602,9549=>602,9550=>602,9551=>602,9552=>602,9553=>602,9554=>602, +9555=>602,9556=>602,9557=>602,9558=>602,9559=>602,9560=>602,9561=>602,9562=>602,9563=>602,9564=>602, +9565=>602,9566=>602,9567=>602,9568=>602,9569=>602,9570=>602,9571=>602,9572=>602,9573=>602,9574=>602, +9575=>602,9576=>602,9577=>602,9578=>602,9579=>602,9580=>602,9581=>602,9582=>602,9583=>602,9584=>602, +9585=>602,9586=>602,9587=>602,9588=>602,9589=>602,9590=>602,9591=>602,9592=>602,9593=>602,9594=>602, +9595=>602,9596=>602,9597=>602,9598=>602,9599=>602,9600=>602,9601=>602,9602=>602,9603=>602,9604=>602, +9605=>602,9606=>602,9607=>602,9608=>602,9609=>602,9610=>602,9611=>602,9612=>602,9613=>602,9614=>602, +9615=>602,9616=>602,9617=>602,9618=>602,9619=>602,9620=>602,9621=>602,9622=>602,9623=>602,9624=>602, +9625=>602,9626=>602,9627=>602,9628=>602,9629=>602,9630=>602,9631=>602,9632=>602,9633=>602,9634=>602, +9635=>602,9636=>602,9637=>602,9638=>602,9639=>602,9640=>602,9641=>602,9642=>602,9643=>602,9644=>602, +9645=>602,9646=>602,9647=>602,9648=>602,9649=>602,9650=>602,9651=>602,9652=>602,9653=>602,9654=>602, +9655=>602,9656=>602,9657=>602,9658=>602,9659=>602,9660=>602,9661=>602,9662=>602,9663=>602,9664=>602, +9665=>602,9666=>602,9667=>602,9668=>602,9669=>602,9670=>602,9671=>602,9672=>602,9673=>602,9674=>602, +9675=>602,9676=>602,9677=>602,9678=>602,9679=>602,9680=>602,9681=>602,9682=>602,9683=>602,9684=>602, +9685=>602,9686=>602,9687=>602,9688=>602,9689=>602,9690=>602,9691=>602,9692=>602,9693=>602,9694=>602, +9695=>602,9696=>602,9697=>602,9698=>602,9699=>602,9700=>602,9701=>602,9702=>602,9703=>602,9704=>602, +9705=>602,9706=>602,9707=>602,9708=>602,9709=>602,9710=>602,9711=>602,9712=>602,9713=>602,9714=>602, +9715=>602,9716=>602,9717=>602,9718=>602,9719=>602,9720=>602,9721=>602,9722=>602,9723=>602,9724=>602, +9725=>602,9726=>602,9727=>602,9728=>602,9784=>602,9785=>602,9786=>602,9787=>602,9788=>602,9791=>602, +9792=>602,9793=>602,9794=>602,9795=>602,9796=>602,9797=>602,9798=>602,9799=>602,9824=>602,9825=>602, +9826=>602,9827=>602,9828=>602,9829=>602,9830=>602,9831=>602,9833=>602,9834=>602,9835=>602,9836=>602, +9837=>602,9838=>602,9839=>602,10181=>602,10182=>602,10208=>602,10216=>602,10217=>602,10731=>602,10746=>602, +10747=>602,10799=>602,11026=>602,11027=>602,11028=>602,11029=>602,11030=>602,11031=>602,11032=>602,11033=>602, +11034=>602,11364=>602,11373=>602,11374=>602,11375=>602,11376=>602,11381=>602,11382=>602,11383=>602,11385=>602, +11386=>602,11388=>602,11389=>602,11390=>602,11391=>602,11800=>602,11810=>602,11811=>602,11812=>602,11813=>602, +11822=>602,42760=>602,42761=>602,42762=>602,42763=>602,42764=>602,42765=>602,42766=>602,42767=>602,42768=>602, +42769=>602,42770=>602,42771=>602,42772=>602,42773=>602,42774=>602,42779=>602,42780=>602,42781=>602,42782=>602, +42783=>602,42786=>602,42787=>602,42788=>602,42789=>602,42790=>602,42791=>602,42889=>602,42890=>602,42891=>602, +42892=>602,42893=>602,63173=>602,64257=>602,64258=>602,65529=>602,65530=>602,65531=>602,65532=>602,65533=>602); +$enc=''; +$diff=''; +$file='dejavusansmonoi.z'; +$ctg='dejavusansmonoi.ctg.z'; +$originalsize=231000; +// --- EOF --- --- /dev/null +++ b/tcpdf/fonts/dejavuserif.php @@ -1,1 +1,323 @@ - +928,'Descent'=>-236,'CapHeight'=>6,'Flags'=>32,'FontBBox'=>'[-770 -347 1679 1109]','ItalicAngle'=>0,'StemV'=>70,'MissingWidth'=>600); +$up=-63; +$ut=44; +$dw=600; +$cw=array( +0=>600,32=>318,33=>402,34=>460,35=>838,36=>636,37=>950,38=>890,39=>275,40=>390, +41=>390,42=>500,43=>838,44=>318,45=>338,46=>318,47=>337,48=>636,49=>636,50=>636, +51=>636,52=>636,53=>636,54=>636,55=>636,56=>636,57=>636,58=>337,59=>337,60=>838, +61=>838,62=>838,63=>536,64=>1000,65=>722,66=>735,67=>765,68=>802,69=>730,70=>694, +71=>799,72=>872,73=>395,74=>401,75=>747,76=>664,77=>1024,78=>875,79=>820,80=>673, +81=>820,82=>753,83=>685,84=>667,85=>843,86=>722,87=>1028,88=>712,89=>660,90=>695, +91=>390,92=>337,93=>390,94=>838,95=>500,96=>500,97=>596,98=>640,99=>560,100=>640, +101=>592,102=>370,103=>640,104=>644,105=>320,106=>310,107=>606,108=>320,109=>948,110=>644, +111=>602,112=>640,113=>640,114=>478,115=>513,116=>402,117=>644,118=>565,119=>856,120=>564, +121=>565,122=>527,123=>636,124=>337,125=>636,126=>838,8364=>636,8218=>318,402=>370,8222=>518, +8230=>1000,8224=>500,8225=>500,710=>500,8240=>1342,352=>685,8249=>400,338=>1137,381=>695,8216=>318, +8217=>318,8220=>511,8221=>511,8226=>590,8211=>500,8212=>1000,732=>500,8482=>1000,353=>513,8250=>400, +339=>989,382=>527,376=>660,160=>318,161=>402,162=>636,163=>636,164=>636,165=>636,166=>337, +167=>500,168=>500,169=>1000,170=>475,171=>612,172=>838,173=>338,174=>1000,175=>500,176=>500, +177=>838,178=>401,179=>401,180=>500,181=>650,182=>636,183=>318,184=>500,185=>401,186=>470, +187=>612,188=>969,189=>969,190=>969,191=>536,192=>722,193=>722,194=>722,195=>722,196=>722, +197=>722,198=>1001,199=>765,200=>730,201=>730,202=>730,203=>730,204=>395,205=>395,206=>395, +207=>395,208=>807,209=>875,210=>820,211=>820,212=>820,213=>820,214=>820,215=>838,216=>820, +217=>843,218=>843,219=>843,220=>843,221=>660,222=>676,223=>668,224=>596,225=>596,226=>596, +227=>596,228=>596,229=>596,230=>940,231=>560,232=>592,233=>592,234=>592,235=>592,236=>320, +237=>320,238=>320,239=>320,240=>602,241=>644,242=>602,243=>602,244=>602,245=>602,246=>602, +247=>838,248=>602,249=>644,250=>644,251=>644,252=>644,253=>565,254=>640,255=>565,256=>722, +257=>596,258=>722,259=>596,260=>722,261=>596,262=>765,263=>560,264=>765,265=>560,266=>765, +267=>560,268=>765,269=>560,270=>802,271=>640,272=>807,273=>640,274=>730,275=>592,276=>730, +277=>592,278=>730,279=>592,280=>730,281=>592,282=>730,283=>592,284=>799,285=>640,286=>799, +287=>640,288=>799,289=>640,290=>799,291=>640,292=>872,293=>644,294=>872,295=>644,296=>395, +297=>320,298=>395,299=>320,300=>395,301=>320,302=>395,303=>320,304=>395,305=>320,306=>801, +307=>533,308=>401,309=>310,310=>747,311=>606,312=>606,313=>664,314=>320,315=>664,316=>320, +317=>664,318=>320,319=>664,320=>320,321=>669,322=>324,323=>875,324=>644,325=>875,326=>644, +327=>875,328=>644,329=>866,330=>843,331=>644,332=>820,333=>602,334=>820,335=>602,336=>820, +337=>602,340=>753,341=>478,342=>753,343=>478,344=>753,345=>478,346=>685,347=>513,348=>685, +349=>513,350=>685,351=>513,354=>667,355=>402,356=>667,357=>402,358=>667,359=>402,360=>843, +361=>644,362=>843,363=>644,364=>843,365=>644,366=>843,367=>644,368=>843,369=>644,370=>843, +371=>644,372=>1028,373=>856,374=>660,375=>565,377=>695,378=>527,379=>695,380=>527,383=>370, +384=>640,385=>735,386=>735,387=>640,388=>735,389=>640,390=>765,391=>765,392=>560,393=>807, +394=>802,395=>735,396=>640,397=>602,398=>730,399=>820,400=>623,401=>694,403=>799,404=>712, +405=>932,406=>395,407=>395,408=>747,409=>606,410=>320,411=>634,412=>948,413=>875,414=>644, +415=>820,416=>820,417=>602,418=>1040,419=>807,420=>673,421=>640,422=>753,423=>685,424=>513, +425=>707,426=>324,427=>402,428=>667,429=>402,430=>667,431=>843,432=>644,433=>829,434=>760, +435=>738,436=>663,437=>695,438=>527,439=>564,440=>564,441=>564,443=>636,444=>687,445=>564, +446=>536,447=>635,448=>295,449=>492,450=>459,451=>295,452=>1497,453=>1329,454=>1167,455=>1065, +456=>974,457=>630,458=>1276,459=>1185,460=>954,461=>722,462=>596,463=>395,464=>320,465=>820, +466=>602,467=>843,468=>644,469=>843,470=>644,471=>843,472=>644,473=>843,474=>644,475=>843, +476=>644,477=>592,478=>722,479=>596,480=>722,481=>596,482=>1001,483=>940,484=>848,485=>640, +486=>799,487=>640,488=>747,489=>606,490=>820,491=>602,492=>820,493=>602,494=>564,495=>564, +496=>320,497=>1497,498=>1329,499=>1167,500=>799,501=>640,502=>1154,503=>707,504=>875,505=>644, +506=>722,507=>596,508=>1001,509=>940,510=>820,511=>602,512=>722,513=>596,514=>722,515=>596, +516=>730,517=>592,518=>730,519=>592,520=>395,521=>320,522=>395,523=>320,524=>820,525=>602, +526=>820,527=>602,528=>753,529=>478,530=>753,531=>478,532=>843,533=>644,534=>843,535=>644, +536=>685,537=>513,538=>667,539=>402,540=>627,541=>521,542=>872,543=>644,544=>843,545=>814, +546=>586,547=>552,548=>695,549=>527,550=>722,551=>596,552=>730,553=>592,554=>820,555=>602, +556=>820,557=>602,558=>820,559=>602,560=>820,561=>602,562=>660,563=>565,564=>500,565=>832, +566=>494,567=>310,568=>960,569=>960,570=>722,571=>765,572=>560,573=>664,574=>667,575=>513, +576=>527,577=>583,578=>464,579=>735,580=>843,581=>722,582=>730,583=>592,584=>401,585=>315, +586=>782,587=>640,588=>753,589=>478,590=>660,591=>565,592=>596,593=>640,594=>640,595=>640, +596=>560,597=>560,598=>647,599=>683,600=>592,601=>592,602=>843,603=>518,604=>509,605=>773, +606=>613,607=>315,608=>683,609=>640,610=>544,611=>712,612=>564,613=>644,614=>644,615=>644, +616=>320,617=>392,618=>320,619=>380,620=>454,621=>363,622=>704,623=>948,624=>948,625=>948, +626=>644,627=>694,628=>646,629=>602,630=>790,631=>647,632=>602,633=>501,634=>501,635=>551, +636=>478,637=>478,638=>453,639=>453,640=>594,641=>594,642=>513,643=>271,644=>370,645=>487, +646=>324,647=>402,648=>402,649=>644,650=>620,651=>608,652=>565,653=>856,654=>565,655=>655, +656=>597,657=>560,658=>564,659=>560,660=>536,661=>536,662=>536,663=>513,664=>820,665=>563, +666=>613,667=>654,668=>667,669=>366,670=>606,671=>646,672=>683,673=>536,674=>536,675=>996, +676=>1033,677=>998,678=>809,679=>598,680=>782,681=>894,682=>646,683=>676,684=>598,685=>443, +686=>781,687=>767,688=>433,689=>430,690=>264,691=>347,692=>347,693=>430,694=>392,695=>585, +696=>423,697=>278,699=>318,700=>318,701=>318,702=>307,703=>307,704=>280,705=>281,711=>500, +712=>275,713=>500,716=>275,717=>500,720=>337,721=>337,722=>307,723=>307,726=>329,728=>500, +729=>500,730=>500,731=>500,733=>500,734=>417,736=>447,737=>243,738=>337,739=>424,740=>281, +741=>493,742=>493,743=>493,744=>493,745=>493,750=>484,768=>0,769=>0,770=>0,771=>0, +772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0, +782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0, +792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0, +802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0, +812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0, +822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0, +835=>0,847=>0,856=>0,865=>0,880=>740,881=>531,884=>278,885=>278,890=>500,891=>560, +892=>560,893=>560,894=>337,900=>500,901=>500,902=>722,903=>318,904=>900,905=>1039,906=>562, +908=>835,910=>897,911=>853,912=>392,913=>722,914=>735,915=>694,916=>722,917=>730,918=>695, +919=>872,920=>820,921=>395,922=>747,923=>722,924=>1024,925=>875,926=>704,927=>820,928=>872, +929=>673,931=>707,932=>667,933=>660,934=>820,935=>712,936=>877,937=>829,938=>395,939=>660, +940=>675,941=>518,942=>599,943=>392,944=>608,945=>675,946=>578,947=>598,948=>602,949=>518, +950=>542,951=>599,952=>602,953=>392,954=>625,955=>634,956=>650,957=>608,958=>551,959=>602, +960=>657,961=>588,962=>560,963=>683,964=>553,965=>608,966=>700,967=>606,968=>784,969=>815, +970=>392,971=>608,972=>602,973=>608,974=>815,976=>583,977=>715,978=>687,979=>874,980=>687, +981=>682,982=>815,983=>624,984=>820,985=>602,986=>765,987=>560,988=>694,989=>463,990=>590, +991=>660,992=>782,993=>577,1008=>624,1009=>588,1010=>560,1011=>310,1012=>820,1013=>560,1014=>560, +1015=>676,1016=>640,1017=>765,1018=>1024,1019=>708,1020=>588,1021=>765,1022=>765,1023=>765,1024=>730, +1025=>730,1026=>799,1027=>662,1028=>765,1029=>685,1030=>395,1031=>395,1032=>401,1033=>1084,1034=>1118, +1035=>872,1036=>774,1037=>872,1038=>723,1039=>872,1040=>757,1041=>735,1042=>735,1043=>662,1044=>813, +1045=>730,1046=>1124,1047=>623,1048=>872,1049=>872,1050=>774,1051=>834,1052=>1024,1053=>872,1054=>820, +1055=>872,1056=>673,1057=>765,1058=>667,1059=>723,1060=>830,1061=>712,1062=>872,1063=>773,1064=>1141, +1065=>1141,1066=>794,1067=>984,1068=>674,1069=>765,1070=>1193,1071=>808,1072=>596,1073=>602,1074=>563, +1075=>524,1076=>616,1077=>592,1078=>920,1079=>545,1080=>667,1081=>667,1082=>625,1083=>635,1084=>778, +1085=>667,1086=>602,1087=>667,1088=>640,1089=>560,1090=>553,1091=>588,1092=>783,1093=>564,1094=>643, +1095=>661,1096=>930,1097=>930,1098=>636,1099=>796,1100=>544,1101=>560,1102=>871,1103=>631,1104=>592, +1105=>592,1106=>624,1107=>524,1108=>560,1109=>513,1110=>320,1111=>320,1112=>310,1113=>843,1114=>860, +1115=>644,1116=>625,1117=>667,1118=>588,1119=>656,1122=>762,1123=>603,1124=>1129,1125=>834,1130=>1124, +1131=>920,1136=>944,1137=>902,1138=>820,1139=>552,1140=>859,1141=>678,1164=>707,1165=>544,1168=>672, +1169=>529,1170=>662,1171=>523,1172=>728,1173=>614,1174=>1124,1175=>920,1176=>636,1177=>537,1178=>774, +1179=>606,1182=>774,1183=>625,1184=>891,1185=>717,1186=>872,1187=>641,1188=>1139,1189=>852,1190=>1205, +1191=>941,1194=>765,1195=>560,1196=>667,1197=>553,1198=>660,1199=>565,1200=>660,1201=>565,1202=>712, +1203=>564,1204=>952,1205=>732,1206=>749,1207=>690,1210=>749,1211=>644,1216=>395,1217=>1124,1218=>920, +1219=>747,1220=>606,1223=>872,1224=>667,1227=>749,1228=>667,1231=>320,1232=>757,1233=>596,1234=>757, +1235=>596,1236=>1001,1237=>940,1238=>730,1239=>592,1240=>820,1241=>592,1242=>820,1243=>592,1244=>1124, +1245=>920,1246=>623,1247=>545,1248=>564,1249=>564,1250=>872,1251=>667,1252=>872,1253=>667,1254=>820, +1255=>602,1256=>820,1257=>602,1258=>820,1259=>602,1260=>765,1261=>560,1262=>723,1263=>588,1264=>723, +1265=>588,1266=>723,1267=>588,1268=>773,1269=>661,1270=>662,1271=>524,1272=>984,1273=>796,1296=>623, +1297=>545,1298=>834,1299=>635,1300=>1198,1301=>919,1306=>820,1307=>640,1308=>1028,1309=>856,4256=>723, +4257=>850,4258=>828,4259=>859,4260=>733,4261=>981,4262=>916,4263=>1101,4264=>566,4265=>750,4266=>962, +4267=>941,4268=>743,4269=>1075,4270=>896,4271=>829,4272=>1040,4273=>733,4274=>669,4275=>1015,4276=>937, +4277=>1020,4278=>731,4279=>733,4280=>732,4281=>733,4282=>879,4283=>937,4284=>714,4285=>755,4286=>733, +4287=>958,4288=>1000,4289=>702,4290=>864,4291=>734,4292=>837,4293=>951,4304=>541,4305=>571,4306=>589, +4307=>833,4308=>561,4309=>557,4310=>618,4311=>861,4312=>560,4313=>546,4314=>1066,4315=>586,4316=>586, +4317=>825,4318=>570,4319=>581,4320=>824,4321=>607,4322=>748,4323=>698,4324=>815,4325=>585,4326=>858, +4327=>568,4328=>594,4329=>586,4330=>675,4331=>587,4332=>582,4333=>576,4334=>612,4335=>683,4336=>572, +4337=>603,4338=>571,4339=>572,4340=>570,4341=>649,4342=>886,4343=>626,4344=>582,4345=>619,4346=>571, +4347=>437,4348=>354,7426=>940,7432=>509,7433=>320,7444=>989,7446=>602,7447=>602,7453=>737,7454=>948, +7455=>948,7468=>455,7469=>630,7470=>463,7472=>505,7473=>459,7474=>459,7475=>503,7476=>549,7477=>249, +7478=>252,7479=>470,7480=>418,7481=>645,7482=>551,7483=>551,7484=>516,7486=>424,7487=>474,7488=>420, +7489=>531,7490=>647,7491=>386,7492=>386,7493=>400,7494=>618,7495=>400,7496=>400,7497=>387,7498=>387, +7499=>340,7500=>340,7501=>400,7502=>175,7503=>365,7504=>613,7505=>399,7506=>385,7507=>346,7508=>385, +7509=>385,7510=>400,7511=>247,7512=>399,7513=>464,7514=>613,7515=>373,7522=>201,7523=>347,7524=>399, +7525=>373,7543=>640,7544=>549,7547=>372,7557=>320,7579=>400,7580=>346,7581=>346,7582=>385,7583=>340, +7584=>222,7585=>229,7586=>400,7587=>399,7588=>234,7589=>244,7590=>234,7591=>234,7592=>230,7593=>175, +7594=>175,7595=>367,7596=>613,7597=>613,7598=>407,7599=>404,7600=>399,7601=>385,7602=>385,7603=>328, +7604=>211,7605=>247,7606=>399,7607=>389,7609=>376,7610=>373,7611=>331,7612=>331,7613=>331,7614=>364, +7615=>385,7620=>0,7621=>0,7622=>0,7623=>0,7624=>0,7625=>0,7680=>722,7681=>596,7682=>735, +7683=>640,7684=>735,7685=>640,7686=>735,7687=>640,7688=>765,7689=>560,7690=>802,7691=>640,7692=>802, +7693=>640,7694=>802,7695=>640,7696=>802,7697=>640,7698=>802,7699=>640,7700=>730,7701=>592,7702=>730, +7703=>592,7704=>730,7705=>592,7706=>730,7707=>592,7708=>730,7709=>592,7710=>694,7711=>370,7712=>799, +7713=>640,7714=>872,7715=>644,7716=>872,7717=>644,7718=>872,7719=>644,7720=>872,7721=>644,7722=>872, +7723=>644,7724=>395,7725=>320,7726=>395,7727=>320,7728=>747,7729=>606,7730=>747,7731=>606,7732=>747, +7733=>606,7734=>664,7735=>320,7736=>664,7737=>320,7738=>664,7739=>320,7740=>664,7741=>320,7742=>1024, +7743=>948,7744=>1024,7745=>948,7746=>1024,7747=>948,7748=>875,7749=>644,7750=>875,7751=>644,7752=>875, +7753=>644,7754=>875,7755=>644,7756=>820,7757=>602,7758=>820,7759=>602,7760=>820,7761=>602,7762=>820, +7763=>602,7764=>673,7765=>640,7766=>673,7767=>640,7768=>753,7769=>478,7770=>753,7771=>478,7772=>753, +7773=>478,7774=>753,7775=>478,7776=>685,7777=>513,7778=>685,7779=>513,7780=>685,7781=>513,7782=>685, +7783=>521,7784=>685,7785=>513,7786=>667,7787=>402,7788=>667,7789=>402,7790=>667,7791=>402,7792=>667, +7793=>402,7794=>843,7795=>644,7796=>843,7797=>644,7798=>843,7799=>644,7800=>843,7801=>644,7802=>843, +7803=>644,7804=>722,7805=>565,7806=>722,7807=>565,7808=>1028,7809=>856,7810=>1028,7811=>856,7812=>1028, +7813=>856,7814=>1028,7815=>856,7816=>1028,7817=>856,7818=>712,7819=>564,7820=>712,7821=>564,7822=>660, +7823=>565,7824=>695,7825=>527,7826=>695,7827=>527,7828=>695,7829=>527,7830=>644,7831=>402,7832=>856, +7833=>565,7834=>903,7835=>370,7838=>829,7839=>602,7840=>722,7841=>596,7842=>722,7843=>596,7844=>722, +7845=>613,7846=>722,7847=>613,7848=>722,7849=>613,7850=>722,7851=>613,7852=>722,7853=>596,7854=>722, +7855=>596,7856=>722,7857=>596,7858=>722,7859=>596,7860=>722,7861=>596,7862=>722,7863=>596,7864=>730, +7865=>592,7866=>730,7867=>592,7868=>730,7869=>592,7870=>730,7871=>615,7872=>730,7873=>615,7874=>730, +7875=>615,7876=>730,7877=>615,7878=>730,7879=>592,7880=>395,7881=>320,7882=>395,7883=>320,7884=>820, +7885=>602,7886=>820,7887=>602,7888=>820,7889=>612,7890=>820,7891=>612,7892=>820,7893=>612,7894=>820, +7895=>612,7896=>820,7897=>602,7898=>820,7899=>602,7900=>820,7901=>602,7902=>820,7903=>602,7904=>820, +7905=>602,7906=>820,7907=>602,7908=>843,7909=>644,7910=>843,7911=>644,7912=>843,7913=>644,7914=>843, +7915=>644,7916=>843,7917=>644,7918=>843,7919=>644,7920=>843,7921=>644,7922=>660,7923=>565,7924=>660, +7925=>565,7926=>660,7927=>565,7928=>660,7929=>565,7936=>675,7937=>675,7938=>675,7939=>675,7940=>675, +7941=>675,7942=>675,7943=>675,7944=>722,7945=>722,7946=>869,7947=>869,7948=>734,7949=>763,7950=>722, +7951=>722,7952=>537,7953=>537,7954=>537,7955=>537,7956=>537,7957=>537,7960=>853,7961=>841,7962=>1067, +7963=>1077,7964=>1008,7965=>1035,7968=>599,7969=>599,7970=>599,7971=>599,7972=>599,7973=>599,7974=>599, +7975=>599,7976=>998,7977=>992,7978=>1212,7979=>1224,7980=>1159,7981=>1183,7982=>1098,7983=>1095,7984=>392, +7985=>392,7986=>392,7987=>392,7988=>392,7989=>392,7990=>392,7991=>392,7992=>521,7993=>512,7994=>735, +7995=>738,7996=>679,7997=>706,7998=>624,7999=>615,8000=>602,8001=>602,8002=>602,8003=>602,8004=>602, +8005=>602,8008=>820,8009=>859,8010=>1120,8011=>1127,8012=>937,8013=>964,8016=>608,8017=>608,8018=>608, +8019=>608,8020=>608,8021=>608,8022=>608,8023=>608,8025=>851,8027=>1079,8029=>1044,8031=>953,8032=>815, +8033=>815,8034=>815,8035=>815,8036=>815,8037=>815,8038=>815,8039=>815,8040=>829,8041=>870,8042=>1131, +8043=>1137,8044=>946,8045=>976,8046=>938,8047=>970,8048=>675,8049=>675,8050=>537,8051=>537,8052=>599, +8053=>599,8054=>392,8055=>392,8056=>602,8057=>602,8058=>608,8059=>608,8060=>815,8061=>815,8064=>675, +8065=>675,8066=>675,8067=>675,8068=>675,8069=>675,8070=>675,8071=>675,8072=>722,8073=>722,8074=>869, +8075=>869,8076=>734,8077=>763,8078=>722,8079=>722,8080=>599,8081=>599,8082=>599,8083=>599,8084=>599, +8085=>599,8086=>599,8087=>599,8088=>998,8089=>992,8090=>1212,8091=>1224,8092=>1159,8093=>1183,8094=>1098, +8095=>1095,8096=>815,8097=>815,8098=>815,8099=>815,8100=>815,8101=>815,8102=>815,8103=>815,8104=>829, +8105=>870,8106=>1131,8107=>1137,8108=>946,8109=>976,8110=>938,8111=>970,8112=>675,8113=>675,8114=>675, +8115=>675,8116=>675,8118=>675,8119=>675,8120=>722,8121=>722,8122=>722,8123=>722,8124=>722,8125=>500, +8126=>500,8127=>500,8128=>500,8129=>500,8130=>599,8131=>599,8132=>599,8134=>599,8135=>599,8136=>912, +8137=>900,8138=>1063,8139=>1039,8140=>872,8141=>500,8142=>500,8143=>500,8144=>392,8145=>392,8146=>392, +8147=>392,8150=>392,8151=>392,8152=>395,8153=>395,8154=>588,8155=>562,8157=>500,8158=>500,8159=>500, +8160=>608,8161=>608,8162=>608,8163=>608,8164=>588,8165=>588,8166=>608,8167=>608,8168=>660,8169=>660, +8170=>921,8171=>897,8172=>790,8173=>500,8174=>500,8175=>500,8178=>815,8179=>815,8180=>815,8182=>815, +8183=>815,8184=>961,8185=>835,8186=>984,8187=>853,8188=>829,8189=>500,8190=>500,8192=>500,8193=>1000, +8194=>500,8195=>1000,8196=>330,8197=>250,8198=>167,8199=>636,8200=>318,8201=>200,8202=>100,8203=>0, +8204=>0,8205=>0,8206=>0,8207=>0,8208=>338,8209=>338,8210=>636,8213=>1000,8214=>500,8215=>500, +8219=>318,8223=>511,8227=>590,8228=>334,8229=>667,8234=>0,8235=>0,8236=>0,8237=>0,8238=>0, +8239=>200,8241=>1734,8242=>227,8243=>374,8244=>520,8245=>227,8246=>374,8247=>520,8248=>339,8252=>527, +8253=>536,8254=>500,8258=>1000,8260=>167,8261=>390,8262=>390,8263=>976,8264=>753,8265=>753,8267=>636, +8268=>500,8269=>500,8270=>500,8271=>337,8273=>500,8274=>450,8275=>1000,8279=>663,8287=>222,8288=>0, +8289=>0,8290=>0,8291=>0,8292=>0,8298=>0,8299=>0,8300=>0,8301=>0,8302=>0,8303=>0, +8304=>401,8305=>201,8308=>401,8309=>401,8310=>401,8311=>401,8312=>401,8313=>401,8314=>528,8315=>528, +8316=>528,8317=>246,8318=>246,8319=>433,8320=>401,8321=>401,8322=>401,8323=>401,8324=>401,8325=>401, +8326=>401,8327=>401,8328=>401,8329=>401,8330=>528,8331=>528,8332=>528,8333=>246,8334=>246,8336=>386, +8337=>387,8338=>385,8339=>424,8340=>387,8358=>660,8367=>1057,8369=>706,8372=>780,8373=>636,8377=>636, +8450=>796,8451=>1119,8457=>1047,8461=>945,8462=>644,8463=>644,8469=>914,8470=>946,8473=>752,8474=>871, +8477=>831,8484=>730,8486=>829,8487=>829,8490=>747,8491=>722,8508=>732,8509=>660,8510=>710,8511=>944, +8512=>714,8513=>775,8514=>557,8515=>557,8516=>611,8517=>867,8518=>699,8519=>636,8520=>380,8521=>362, +8523=>890,8528=>969,8529=>969,8530=>1370,8531=>969,8532=>969,8533=>969,8534=>969,8535=>969,8536=>969, +8537=>969,8538=>969,8539=>969,8540=>969,8541=>969,8542=>969,8543=>568,8544=>395,8545=>590,8546=>786, +8547=>966,8548=>722,8549=>981,8550=>1176,8551=>1372,8552=>932,8553=>712,8554=>932,8555=>1127,8556=>664, +8557=>765,8558=>802,8559=>1024,8560=>320,8561=>640,8562=>959,8563=>885,8564=>565,8565=>885,8566=>1205, +8567=>1524,8568=>884,8569=>564,8570=>884,8571=>1204,8572=>320,8573=>560,8574=>640,8575=>948,8576=>1206, +8577=>802,8578=>1206,8579=>765,8580=>560,8581=>765,8585=>969,8592=>838,8593=>838,8594=>838,8595=>838, +8596=>838,8597=>838,8598=>838,8599=>838,8600=>838,8601=>838,8602=>838,8603=>838,8604=>838,8605=>838, +8606=>838,8607=>838,8608=>838,8609=>838,8610=>838,8611=>838,8612=>838,8613=>838,8614=>838,8615=>838, +8616=>838,8617=>838,8618=>838,8619=>838,8620=>838,8621=>838,8622=>838,8623=>838,8624=>838,8625=>838, +8626=>838,8627=>838,8628=>838,8629=>838,8630=>838,8631=>838,8632=>838,8633=>838,8634=>838,8635=>838, +8636=>838,8637=>838,8638=>838,8639=>838,8640=>838,8641=>838,8642=>838,8643=>838,8644=>838,8645=>838, +8646=>838,8647=>838,8648=>838,8649=>838,8650=>838,8651=>838,8652=>838,8653=>838,8654=>838,8655=>838, +8656=>838,8657=>838,8658=>838,8659=>838,8660=>838,8661=>838,8662=>838,8663=>838,8664=>838,8665=>838, +8666=>838,8667=>838,8668=>838,8669=>838,8670=>838,8671=>838,8672=>838,8673=>838,8674=>838,8675=>838, +8676=>838,8677=>838,8678=>838,8679=>838,8680=>838,8681=>838,8682=>838,8683=>838,8684=>838,8685=>838, +8686=>838,8687=>838,8688=>838,8689=>838,8690=>838,8691=>838,8692=>838,8693=>838,8694=>838,8695=>838, +8696=>838,8697=>838,8698=>838,8699=>838,8700=>838,8701=>838,8702=>838,8703=>838,8704=>604,8706=>517, +8707=>542,8708=>542,8710=>698,8711=>698,8712=>740,8713=>740,8715=>740,8716=>740,8719=>796,8720=>796, +8721=>714,8722=>838,8723=>838,8724=>838,8725=>337,8727=>680,8728=>490,8729=>490,8730=>637,8731=>637, +8732=>637,8733=>677,8734=>833,8735=>838,8736=>838,8739=>291,8740=>479,8741=>462,8742=>634,8743=>732, +8744=>732,8745=>838,8746=>838,8747=>521,8748=>852,8749=>1182,8760=>838,8761=>838,8762=>838,8763=>838, +8764=>838,8765=>838,8770=>838,8771=>838,8776=>838,8784=>838,8785=>838,8786=>838,8787=>838,8788=>1033, +8789=>1033,8800=>838,8801=>838,8804=>838,8805=>838,8834=>838,8835=>838,8836=>838,8837=>838,8838=>838, +8839=>838,8844=>838,8845=>838,8846=>838,8847=>846,8848=>846,8849=>846,8850=>846,8851=>838,8852=>838, +8853=>838,8854=>838,8855=>838,8856=>838,8857=>838,8858=>838,8859=>838,8860=>838,8861=>838,8862=>838, +8863=>838,8864=>838,8865=>838,8866=>860,8867=>860,8868=>940,8869=>940,8870=>567,8871=>567,8872=>860, +8873=>860,8874=>860,8875=>1031,8876=>860,8877=>860,8878=>860,8879=>1031,8901=>342,8962=>764,8968=>390, +8969=>390,8970=>390,8971=>390,8976=>838,8977=>513,8984=>1000,8985=>838,8992=>521,8993=>521,8997=>1000, +9000=>1443,9085=>919,9115=>500,9116=>500,9117=>500,9118=>500,9119=>500,9120=>500,9121=>500,9122=>500, +9123=>500,9124=>500,9125=>500,9126=>500,9127=>750,9128=>750,9129=>750,9130=>750,9131=>750,9132=>750, +9133=>750,9134=>521,9167=>945,9251=>764,9472=>602,9473=>602,9474=>602,9475=>602,9476=>602,9477=>602, +9478=>602,9479=>602,9480=>602,9481=>602,9482=>602,9483=>602,9484=>602,9485=>602,9486=>602,9487=>602, +9488=>602,9489=>602,9490=>602,9491=>602,9492=>602,9493=>602,9494=>602,9495=>602,9496=>602,9497=>602, +9498=>602,9499=>602,9500=>602,9501=>602,9502=>602,9503=>602,9504=>602,9505=>602,9506=>602,9507=>602, +9508=>602,9509=>602,9510=>602,9511=>602,9512=>602,9513=>602,9514=>602,9515=>602,9516=>602,9517=>602, +9518=>602,9519=>602,9520=>602,9521=>602,9522=>602,9523=>602,9524=>602,9525=>602,9526=>602,9527=>602, +9528=>602,9529=>602,9530=>602,9531=>602,9532=>602,9533=>602,9534=>602,9535=>602,9536=>602,9537=>602, +9538=>602,9539=>602,9540=>602,9541=>602,9542=>602,9543=>602,9544=>602,9545=>602,9546=>602,9547=>602, +9548=>602,9549=>602,9550=>602,9551=>602,9552=>602,9553=>602,9554=>602,9555=>602,9556=>602,9557=>602, +9558=>602,9559=>602,9560=>602,9561=>602,9562=>602,9563=>602,9564=>602,9565=>602,9566=>602,9567=>602, +9568=>602,9569=>602,9570=>602,9571=>602,9572=>602,9573=>602,9574=>602,9575=>602,9576=>602,9577=>602, +9578=>602,9579=>602,9580=>602,9581=>602,9582=>602,9583=>602,9584=>602,9585=>602,9586=>602,9587=>602, +9588=>602,9589=>602,9590=>602,9591=>602,9592=>602,9593=>602,9594=>602,9595=>602,9596=>602,9597=>602, +9598=>602,9599=>602,9600=>769,9601=>769,9602=>769,9603=>769,9604=>769,9605=>769,9606=>769,9607=>769, +9608=>769,9609=>769,9610=>769,9611=>769,9612=>769,9613=>769,9614=>769,9615=>769,9616=>769,9617=>769, +9618=>769,9619=>769,9620=>769,9621=>769,9622=>769,9623=>769,9624=>769,9625=>769,9626=>769,9627=>769, +9628=>769,9629=>769,9630=>769,9631=>769,9632=>945,9633=>945,9634=>945,9635=>945,9636=>945,9637=>945, +9638=>945,9639=>945,9640=>945,9641=>945,9642=>678,9643=>678,9644=>945,9645=>945,9646=>550,9647=>550, +9648=>769,9649=>769,9650=>769,9651=>769,9652=>502,9653=>502,9654=>769,9655=>769,9656=>502,9657=>502, +9658=>769,9659=>769,9660=>769,9661=>769,9662=>502,9663=>502,9664=>769,9665=>769,9666=>502,9667=>502, +9668=>769,9669=>769,9670=>769,9671=>769,9672=>769,9673=>873,9674=>494,9675=>873,9676=>873,9677=>873, +9678=>873,9679=>873,9680=>873,9681=>873,9682=>873,9683=>873,9684=>873,9685=>873,9686=>527,9687=>527, +9688=>791,9689=>970,9690=>970,9691=>970,9692=>387,9693=>387,9694=>387,9695=>387,9696=>873,9697=>873, +9698=>769,9699=>769,9700=>769,9701=>769,9702=>590,9703=>945,9704=>945,9705=>945,9706=>945,9707=>945, +9708=>769,9709=>769,9710=>769,9711=>1119,9712=>945,9713=>945,9714=>945,9715=>945,9716=>873,9717=>873, +9718=>873,9719=>873,9720=>769,9721=>769,9722=>769,9723=>830,9724=>830,9725=>732,9726=>732,9727=>769, +9728=>896,9784=>896,9785=>896,9786=>896,9787=>896,9788=>896,9791=>614,9792=>731,9793=>731,9794=>896, +9795=>896,9796=>896,9797=>896,9798=>896,9799=>896,9824=>896,9825=>896,9826=>896,9827=>896,9828=>896, +9829=>896,9830=>896,9831=>896,9833=>472,9834=>638,9835=>896,9836=>896,9837=>472,9838=>357,9839=>484, +10145=>838,10181=>390,10182=>390,10208=>494,10216=>390,10217=>390,10224=>838,10225=>838,10226=>838,10227=>838, +10228=>1033,10229=>1434,10230=>1434,10231=>1434,10232=>1434,10233=>1434,10234=>1434,10235=>1434,10236=>1434,10237=>1434, +10238=>1434,10239=>1434,10240=>732,10241=>732,10242=>732,10243=>732,10244=>732,10245=>732,10246=>732,10247=>732, +10248=>732,10249=>732,10250=>732,10251=>732,10252=>732,10253=>732,10254=>732,10255=>732,10256=>732,10257=>732, +10258=>732,10259=>732,10260=>732,10261=>732,10262=>732,10263=>732,10264=>732,10265=>732,10266=>732,10267=>732, +10268=>732,10269=>732,10270=>732,10271=>732,10272=>732,10273=>732,10274=>732,10275=>732,10276=>732,10277=>732, +10278=>732,10279=>732,10280=>732,10281=>732,10282=>732,10283=>732,10284=>732,10285=>732,10286=>732,10287=>732, +10288=>732,10289=>732,10290=>732,10291=>732,10292=>732,10293=>732,10294=>732,10295=>732,10296=>732,10297=>732, +10298=>732,10299=>732,10300=>732,10301=>732,10302=>732,10303=>732,10304=>732,10305=>732,10306=>732,10307=>732, +10308=>732,10309=>732,10310=>732,10311=>732,10312=>732,10313=>732,10314=>732,10315=>732,10316=>732,10317=>732, +10318=>732,10319=>732,10320=>732,10321=>732,10322=>732,10323=>732,10324=>732,10325=>732,10326=>732,10327=>732, +10328=>732,10329=>732,10330=>732,10331=>732,10332=>732,10333=>732,10334=>732,10335=>732,10336=>732,10337=>732, +10338=>732,10339=>732,10340=>732,10341=>732,10342=>732,10343=>732,10344=>732,10345=>732,10346=>732,10347=>732, +10348=>732,10349=>732,10350=>732,10351=>732,10352=>732,10353=>732,10354=>732,10355=>732,10356=>732,10357=>732, +10358=>732,10359=>732,10360=>732,10361=>732,10362=>732,10363=>732,10364=>732,10365=>732,10366=>732,10367=>732, +10368=>732,10369=>732,10370=>732,10371=>732,10372=>732,10373=>732,10374=>732,10375=>732,10376=>732,10377=>732, +10378=>732,10379=>732,10380=>732,10381=>732,10382=>732,10383=>732,10384=>732,10385=>732,10386=>732,10387=>732, +10388=>732,10389=>732,10390=>732,10391=>732,10392=>732,10393=>732,10394=>732,10395=>732,10396=>732,10397=>732, +10398=>732,10399=>732,10400=>732,10401=>732,10402=>732,10403=>732,10404=>732,10405=>732,10406=>732,10407=>732, +10408=>732,10409=>732,10410=>732,10411=>732,10412=>732,10413=>732,10414=>732,10415=>732,10416=>732,10417=>732, +10418=>732,10419=>732,10420=>732,10421=>732,10422=>732,10423=>732,10424=>732,10425=>732,10426=>732,10427=>732, +10428=>732,10429=>732,10430=>732,10431=>732,10432=>732,10433=>732,10434=>732,10435=>732,10436=>732,10437=>732, +10438=>732,10439=>732,10440=>732,10441=>732,10442=>732,10443=>732,10444=>732,10445=>732,10446=>732,10447=>732, +10448=>732,10449=>732,10450=>732,10451=>732,10452=>732,10453=>732,10454=>732,10455=>732,10456=>732,10457=>732, +10458=>732,10459=>732,10460=>732,10461=>732,10462=>732,10463=>732,10464=>732,10465=>732,10466=>732,10467=>732, +10468=>732,10469=>732,10470=>732,10471=>732,10472=>732,10473=>732,10474=>732,10475=>732,10476=>732,10477=>732, +10478=>732,10479=>732,10480=>732,10481=>732,10482=>732,10483=>732,10484=>732,10485=>732,10486=>732,10487=>732, +10488=>732,10489=>732,10490=>732,10491=>732,10492=>732,10493=>732,10494=>732,10495=>732,10496=>838,10497=>838, +10498=>838,10499=>838,10500=>838,10501=>838,10502=>838,10503=>838,10504=>838,10505=>838,10506=>838,10507=>838, +10508=>838,10509=>838,10510=>838,10511=>838,10512=>838,10513=>838,10514=>838,10515=>838,10516=>838,10517=>838, +10518=>838,10519=>838,10520=>838,10521=>838,10522=>838,10523=>838,10524=>838,10525=>838,10526=>838,10527=>838, +10528=>838,10529=>838,10530=>838,10531=>838,10532=>838,10533=>838,10534=>838,10535=>838,10536=>838,10537=>838, +10538=>838,10539=>838,10540=>838,10541=>838,10542=>838,10543=>838,10544=>838,10545=>838,10546=>838,10547=>838, +10548=>838,10549=>838,10550=>838,10551=>838,10552=>838,10553=>838,10554=>838,10555=>838,10556=>838,10557=>838, +10558=>838,10559=>838,10560=>838,10561=>838,10562=>838,10563=>838,10564=>838,10565=>838,10566=>838,10567=>838, +10568=>838,10569=>838,10570=>838,10571=>838,10572=>838,10573=>838,10574=>838,10575=>838,10576=>838,10577=>838, +10578=>838,10579=>838,10580=>838,10581=>838,10582=>838,10583=>838,10584=>838,10585=>838,10586=>838,10587=>838, +10588=>838,10589=>838,10590=>838,10591=>838,10592=>838,10593=>838,10594=>838,10595=>838,10596=>838,10597=>838, +10598=>838,10599=>838,10600=>838,10601=>838,10602=>838,10603=>838,10604=>838,10605=>838,10606=>838,10607=>838, +10608=>838,10609=>838,10610=>838,10611=>838,10612=>838,10613=>838,10614=>838,10615=>981,10616=>838,10617=>838, +10618=>984,10619=>838,10620=>838,10621=>838,10622=>838,10623=>838,10731=>494,10764=>1513,10765=>521,10766=>521, +10799=>838,11008=>838,11009=>838,11010=>838,11011=>838,11012=>838,11013=>838,11014=>838,11015=>838,11016=>838, +11017=>838,11018=>838,11019=>838,11020=>838,11021=>838,11022=>838,11023=>838,11024=>838,11025=>838,11026=>945, +11027=>945,11028=>945,11029=>945,11030=>769,11031=>769,11032=>769,11033=>769,11034=>945,11364=>753,11367=>872, +11368=>644,11369=>747,11370=>606,11371=>695,11372=>527,11373=>782,11374=>1024,11375=>722,11376=>782,11377=>663, +11378=>1130,11379=>939,11381=>740,11382=>556,11383=>700,11385=>501,11386=>602,11388=>264,11389=>455,11390=>685, +11391=>695,11520=>773,11521=>635,11522=>633,11523=>658,11524=>631,11525=>962,11526=>756,11527=>960,11528=>617, +11529=>646,11530=>962,11531=>632,11532=>646,11533=>962,11534=>645,11535=>866,11536=>961,11537=>645,11538=>645, +11539=>959,11540=>945,11541=>863,11542=>644,11543=>646,11544=>645,11545=>649,11546=>688,11547=>634,11548=>982, +11549=>681,11550=>676,11551=>852,11552=>957,11553=>632,11554=>645,11555=>646,11556=>749,11557=>914,11800=>536, +11810=>390,11811=>390,11812=>390,11813=>390,11822=>536,42564=>685,42565=>513,42566=>395,42567=>392,42576=>1104, +42577=>888,42580=>1193,42581=>871,42582=>1140,42583=>899,42760=>493,42761=>493,42762=>493,42763=>493,42764=>493, +42765=>493,42766=>493,42767=>493,42768=>493,42769=>493,42770=>493,42771=>493,42772=>493,42773=>493,42774=>493, +42779=>369,42780=>369,42781=>253,42782=>253,42783=>253,42813=>819,42891=>402,42892=>275,42893=>773,62464=>654, +62465=>665,62466=>714,62467=>947,62468=>665,62469=>659,62470=>725,62471=>986,62472=>665,62473=>665,62474=>1257, +62475=>683,62476=>682,62477=>953,62478=>665,62479=>682,62480=>999,62481=>746,62482=>798,62483=>748,62484=>944, +62485=>681,62486=>936,62487=>680,62488=>688,62489=>682,62490=>729,62491=>682,62492=>688,62493=>666,62494=>729, +62495=>884,62496=>665,62497=>706,62498=>666,62499=>665,62500=>665,62501=>722,62502=>961,62504=>904,63173=>602, +63185=>500,63188=>500,64256=>710,64257=>667,64258=>667,64259=>1028,64260=>1030,64261=>771,64262=>933,65024=>0, +65025=>0,65026=>0,65027=>0,65028=>0,65029=>0,65030=>0,65031=>0,65032=>0,65033=>0,65034=>0, +65035=>0,65036=>0,65037=>0,65038=>0,65039=>0,65529=>0,65530=>0,65531=>0,65532=>0,65533=>1025); +$enc=''; +$diff=''; +$file='dejavuserif.z'; +$ctg='dejavuserif.ctg.z'; +$originalsize=337444; +// --- EOF --- --- /dev/null +++ b/tcpdf/fonts/dejavuserifb.php @@ -1,1 +1,309 @@ - +939,'Descent'=>-236,'CapHeight'=>5,'Flags'=>32,'FontBBox'=>'[-836 -389 1796 1145]','ItalicAngle'=>0,'StemV'=>120,'MissingWidth'=>600); +$up=-63; +$ut=44; +$dw=600; +$cw=array( +0=>600,32=>348,33=>439,34=>521,35=>838,36=>696,37=>950,38=>903,39=>306,40=>473, +41=>473,42=>523,43=>838,44=>348,45=>415,46=>348,47=>365,48=>696,49=>696,50=>696, +51=>696,52=>696,53=>696,54=>696,55=>696,56=>696,57=>696,58=>369,59=>369,60=>838, +61=>838,62=>838,63=>586,64=>1000,65=>776,66=>845,67=>796,68=>867,69=>762,70=>710, +71=>854,72=>945,73=>468,74=>473,75=>869,76=>703,77=>1107,78=>914,79=>871,80=>752, +81=>871,82=>831,83=>722,84=>744,85=>872,86=>776,87=>1123,88=>776,89=>714,90=>730, +91=>473,92=>365,93=>473,94=>838,95=>500,96=>500,97=>648,98=>699,99=>609,100=>699, +101=>636,102=>430,103=>699,104=>727,105=>380,106=>362,107=>693,108=>380,109=>1058,110=>727, +111=>667,112=>699,113=>699,114=>527,115=>563,116=>462,117=>727,118=>581,119=>861,120=>596, +121=>581,122=>568,123=>643,124=>364,125=>643,126=>838,8364=>696,8218=>348,402=>430,8222=>575, +8230=>1000,8224=>523,8225=>523,710=>500,8240=>1385,352=>722,8249=>400,338=>1180,381=>730,8216=>348, +8217=>348,8220=>575,8221=>575,8226=>639,8211=>500,8212=>1000,732=>500,8482=>1000,353=>563,8250=>400, +339=>1028,382=>568,376=>714,160=>348,161=>439,162=>696,163=>696,164=>636,165=>696,166=>364, +167=>523,168=>500,169=>1000,170=>487,171=>625,172=>838,173=>415,174=>1000,175=>500,176=>500, +177=>838,178=>438,179=>438,180=>500,181=>732,182=>636,183=>348,184=>500,185=>438,186=>500, +187=>625,188=>1043,189=>1043,190=>1043,191=>586,192=>776,193=>776,194=>776,195=>776,196=>776, +197=>776,198=>1034,199=>796,200=>762,201=>762,202=>762,203=>762,204=>468,205=>468,206=>468, +207=>468,208=>874,209=>914,210=>871,211=>871,212=>871,213=>871,214=>871,215=>838,216=>871, +217=>872,218=>872,219=>872,220=>872,221=>714,222=>757,223=>760,224=>648,225=>648,226=>648, +227=>648,228=>648,229=>648,230=>975,231=>609,232=>636,233=>636,234=>636,235=>636,236=>380, +237=>380,238=>380,239=>380,240=>667,241=>727,242=>667,243=>667,244=>667,245=>667,246=>667, +247=>838,248=>667,249=>727,250=>727,251=>727,252=>727,253=>581,254=>699,255=>581,256=>776, +257=>648,258=>776,259=>648,260=>776,261=>648,262=>796,263=>609,264=>796,265=>609,266=>796, +267=>609,268=>796,269=>609,270=>867,271=>699,272=>874,273=>699,274=>762,275=>636,276=>762, +277=>636,278=>762,279=>636,280=>762,281=>636,282=>762,283=>636,284=>854,285=>699,286=>854, +287=>699,288=>854,289=>699,290=>854,291=>699,292=>945,293=>727,294=>945,295=>727,296=>468, +297=>380,298=>468,299=>380,300=>468,301=>380,302=>468,303=>380,304=>468,305=>380,306=>942, +307=>751,308=>473,309=>362,310=>869,311=>693,312=>693,313=>703,314=>380,315=>703,316=>380, +317=>703,318=>380,319=>703,320=>380,321=>710,322=>385,323=>914,324=>727,325=>914,326=>727, +327=>914,328=>727,329=>1008,330=>872,331=>727,332=>871,333=>667,334=>871,335=>667,336=>871, +337=>667,340=>831,341=>527,342=>831,343=>527,344=>831,345=>527,346=>722,347=>563,348=>722, +349=>563,350=>722,351=>563,354=>744,355=>462,356=>744,357=>462,358=>744,359=>462,360=>872, +361=>727,362=>872,363=>727,364=>872,365=>727,366=>872,367=>727,368=>872,369=>727,370=>872, +371=>727,372=>1123,373=>861,374=>714,375=>581,377=>730,378=>568,379=>730,380=>568,383=>430, +384=>699,385=>845,386=>854,387=>699,388=>854,389=>699,390=>796,391=>796,392=>609,393=>874, +394=>867,395=>854,396=>699,397=>667,398=>762,399=>871,400=>721,401=>710,403=>854,404=>771, +405=>1043,406=>468,407=>468,408=>869,409=>693,410=>380,411=>701,412=>1058,413=>914,414=>727, +415=>871,416=>871,417=>667,418=>1200,419=>943,420=>752,421=>699,422=>831,423=>722,424=>563, +425=>707,426=>331,427=>462,428=>744,429=>462,430=>744,431=>872,432=>727,433=>890,434=>890, +435=>714,436=>708,437=>730,438=>568,439=>657,440=>657,441=>657,443=>696,444=>754,445=>568, +446=>536,447=>716,448=>295,449=>492,450=>459,451=>295,452=>1597,453=>1435,454=>1267,455=>1176, +456=>1065,457=>742,458=>1387,459=>1276,460=>1089,461=>776,462=>648,463=>468,464=>380,465=>871, +466=>667,467=>872,468=>727,469=>872,470=>727,471=>872,472=>727,473=>872,474=>727,475=>872, +476=>727,477=>636,478=>776,479=>648,480=>776,481=>648,482=>1034,483=>975,484=>896,485=>699, +486=>854,487=>699,488=>869,489=>693,490=>871,491=>667,492=>871,493=>667,494=>657,495=>568, +496=>380,497=>1597,498=>1435,499=>1267,500=>854,501=>699,502=>1221,503=>787,504=>914,505=>727, +506=>776,507=>648,508=>1034,509=>975,510=>871,511=>667,512=>776,513=>648,514=>776,515=>648, +516=>762,517=>636,518=>762,519=>636,520=>468,521=>380,522=>468,523=>380,524=>871,525=>667, +526=>871,527=>667,528=>831,529=>527,530=>831,531=>527,532=>872,533=>727,534=>872,535=>727, +536=>722,537=>563,538=>744,539=>462,540=>690,541=>607,542=>945,543=>727,544=>872,545=>791, +546=>703,547=>586,548=>730,549=>568,550=>776,551=>648,552=>762,553=>636,554=>871,555=>667, +556=>871,557=>667,558=>871,559=>667,560=>871,561=>667,562=>714,563=>581,564=>573,565=>922, +566=>564,567=>362,568=>1031,569=>1031,570=>776,571=>796,572=>609,573=>703,574=>744,575=>563, +576=>568,577=>660,578=>547,579=>845,580=>872,581=>776,582=>762,583=>636,584=>473,585=>387, +586=>848,587=>699,588=>831,589=>527,590=>714,591=>581,592=>648,593=>699,594=>699,595=>699, +596=>609,597=>609,598=>699,599=>730,600=>636,601=>636,602=>907,603=>608,604=>562,605=>907, +606=>720,607=>387,608=>699,609=>699,610=>626,611=>712,612=>627,613=>727,614=>727,615=>727, +616=>380,617=>380,618=>380,619=>409,620=>514,621=>380,622=>795,623=>1058,624=>1058,625=>1058, +626=>727,627=>727,628=>712,629=>667,630=>1061,631=>749,632=>667,633=>571,634=>571,635=>571, +636=>527,637=>527,638=>452,639=>487,640=>801,641=>801,642=>563,643=>331,644=>430,645=>540, +646=>331,647=>492,648=>462,649=>727,650=>679,651=>694,652=>641,653=>907,654=>635,655=>727, +656=>568,657=>568,658=>568,659=>568,660=>536,661=>536,662=>536,663=>545,664=>871,665=>695, +666=>720,667=>626,668=>732,669=>384,670=>740,671=>646,672=>699,673=>536,674=>536,675=>1117, +676=>1179,677=>1117,678=>911,679=>715,680=>909,681=>1039,682=>790,683=>795,684=>662,685=>443, +686=>613,687=>717,688=>521,689=>519,690=>313,691=>414,692=>414,693=>480,694=>527,695=>662, +696=>485,697=>302,699=>348,700=>348,701=>348,702=>366,703=>366,704=>313,705=>313,711=>500, +712=>282,713=>500,716=>282,717=>500,720=>369,721=>369,722=>366,723=>366,726=>392,728=>500, +729=>500,730=>500,731=>500,733=>500,734=>417,736=>458,737=>292,738=>395,739=>475,740=>313, +741=>500,742=>500,743=>500,744=>500,745=>500,750=>553,768=>0,769=>0,770=>0,771=>0, +772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0, +782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0, +792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0, +802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0, +812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0, +822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0, +835=>0,847=>0,856=>0,865=>0,880=>779,881=>576,884=>302,885=>302,890=>500,891=>609, +892=>609,893=>609,894=>369,900=>500,901=>500,902=>776,903=>348,904=>947,905=>1118,906=>662, +908=>887,910=>953,911=>911,912=>484,913=>776,914=>845,915=>710,916=>776,917=>762,918=>730, +919=>945,920=>871,921=>468,922=>869,923=>776,924=>1107,925=>914,926=>704,927=>871,928=>944, +929=>752,931=>707,932=>744,933=>714,934=>871,935=>776,936=>913,937=>890,938=>468,939=>714, +940=>770,941=>608,942=>727,943=>484,944=>694,945=>770,946=>664,947=>660,948=>667,949=>608, +950=>592,951=>727,952=>667,953=>484,954=>750,955=>701,956=>732,957=>694,958=>592,959=>667, +960=>732,961=>665,962=>609,963=>737,964=>673,965=>694,966=>905,967=>658,968=>941,969=>952, +970=>484,971=>694,972=>667,973=>694,974=>952,976=>667,977=>849,978=>764,979=>969,980=>764, +981=>941,982=>952,983=>655,984=>871,985=>667,986=>796,987=>609,988=>710,989=>527,990=>590, +991=>660,992=>796,993=>667,1008=>655,1009=>665,1010=>609,1011=>362,1012=>871,1013=>609,1014=>609, +1015=>757,1016=>699,1017=>796,1018=>1107,1019=>860,1020=>692,1021=>796,1022=>796,1023=>796,1024=>762, +1025=>762,1026=>901,1027=>690,1028=>795,1029=>722,1030=>468,1031=>468,1032=>473,1033=>1202,1034=>1262, +1035=>963,1036=>910,1037=>945,1038=>812,1039=>945,1040=>814,1041=>854,1042=>845,1043=>690,1044=>889, +1045=>762,1046=>1312,1047=>721,1048=>945,1049=>945,1050=>910,1051=>884,1052=>1107,1053=>945,1054=>871, +1055=>944,1056=>752,1057=>796,1058=>744,1059=>812,1060=>949,1061=>776,1062=>966,1063=>913,1064=>1268, +1065=>1293,1066=>957,1067=>1202,1068=>825,1069=>795,1070=>1287,1071=>882,1072=>648,1073=>667,1074=>695, +1075=>613,1076=>667,1077=>636,1078=>1010,1079=>638,1080=>742,1081=>742,1082=>722,1083=>705,1084=>869, +1085=>732,1086=>667,1087=>732,1088=>699,1089=>609,1090=>620,1091=>640,1092=>902,1093=>596,1094=>739, +1095=>732,1096=>1075,1097=>1082,1098=>767,1099=>1002,1100=>679,1101=>609,1102=>1025,1103=>739,1104=>636, +1105=>636,1106=>719,1107=>613,1108=>609,1109=>563,1110=>380,1111=>380,1112=>362,1113=>988,1114=>1015, +1115=>727,1116=>722,1117=>742,1118=>640,1119=>732,1122=>880,1123=>703,1124=>1195,1125=>963,1130=>1312, +1131=>1010,1136=>1096,1137=>1105,1138=>871,1139=>652,1140=>916,1141=>749,1164=>846,1165=>673,1168=>700, +1169=>618,1170=>690,1171=>613,1172=>868,1173=>716,1174=>1312,1175=>1010,1176=>721,1177=>638,1178=>947, +1179=>744,1182=>910,1183=>722,1184=>1041,1185=>827,1186=>966,1187=>739,1188=>1167,1189=>956,1190=>1345, +1191=>1059,1194=>796,1195=>609,1196=>744,1197=>620,1198=>714,1199=>581,1200=>714,1201=>581,1202=>866, +1203=>649,1204=>1022,1205=>807,1206=>928,1207=>739,1210=>910,1211=>727,1216=>468,1217=>1312,1218=>1010, +1219=>869,1220=>693,1223=>945,1224=>732,1227=>913,1228=>732,1231=>380,1232=>814,1233=>648,1234=>814, +1235=>648,1236=>1034,1237=>975,1238=>762,1239=>636,1240=>871,1241=>636,1242=>871,1243=>636,1244=>1312, +1245=>1010,1246=>721,1247=>638,1248=>657,1249=>568,1250=>945,1251=>742,1252=>945,1253=>742,1254=>871, +1255=>667,1256=>871,1257=>667,1258=>871,1259=>667,1260=>795,1261=>609,1262=>812,1263=>640,1264=>812, +1265=>640,1266=>812,1267=>640,1268=>913,1269=>732,1270=>690,1271=>613,1272=>1202,1273=>1002,1296=>721, +1297=>638,1298=>884,1299=>705,1300=>1248,1301=>945,1306=>820,1307=>640,1308=>1028,1309=>856,4256=>755, +4257=>936,4258=>866,4259=>874,4260=>781,4261=>1078,4262=>1014,4263=>1213,4264=>643,4265=>818,4266=>1051, +4267=>1051,4268=>796,4269=>1135,4270=>969,4271=>902,4272=>1109,4273=>792,4274=>756,4275=>1076,4276=>976, +4277=>1066,4278=>811,4279=>833,4280=>821,4281=>833,4282=>908,4283=>1077,4284=>769,4285=>822,4286=>813, +4287=>1111,4288=>1123,4289=>802,4290=>892,4291=>802,4292=>880,4293=>1063,4304=>594,4305=>625,4306=>643, +4307=>887,4308=>615,4309=>611,4310=>667,4311=>915,4312=>613,4313=>600,4314=>1120,4315=>640,4316=>640, +4317=>879,4318=>624,4319=>634,4320=>877,4321=>666,4322=>780,4323=>751,4324=>869,4325=>639,4326=>912, +4327=>622,4328=>647,4329=>640,4330=>729,4331=>641,4332=>630,4333=>629,4334=>670,4335=>753,4336=>625, +4337=>657,4338=>625,4339=>625,4340=>624,4341=>670,4342=>940,4343=>680,4344=>636,4345=>672,4346=>625, +4347=>588,4348=>354,7426=>940,7432=>509,7433=>320,7444=>989,7446=>667,7447=>667,7453=>737,7454=>948, +7455=>948,7468=>489,7469=>651,7470=>532,7472=>546,7473=>480,7474=>480,7475=>538,7476=>595,7477=>294, +7478=>298,7479=>547,7480=>443,7481=>697,7482=>576,7483=>576,7484=>548,7486=>474,7487=>523,7488=>455, +7489=>469,7490=>549,7491=>466,7492=>466,7493=>498,7494=>657,7495=>499,7496=>498,7497=>444,7498=>444, +7499=>412,7500=>412,7501=>498,7502=>300,7503=>523,7504=>729,7505=>473,7506=>467,7507=>427,7508=>467, +7509=>467,7510=>499,7511=>371,7512=>520,7513=>434,7514=>729,7515=>491,7522=>239,7523=>414,7524=>520, +7525=>491,7543=>640,7544=>595,7547=>380,7557=>380,7579=>498,7580=>427,7581=>427,7582=>467,7583=>412, +7584=>383,7585=>373,7586=>498,7587=>522,7588=>300,7589=>307,7590=>300,7591=>300,7592=>370,7593=>368, +7594=>321,7595=>430,7596=>682,7597=>729,7598=>588,7599=>587,7600=>472,7601=>467,7602=>522,7603=>400, +7604=>387,7605=>371,7606=>520,7607=>475,7609=>489,7610=>491,7611=>412,7612=>527,7613=>412,7614=>452, +7615=>467,7620=>0,7621=>0,7622=>0,7623=>0,7624=>0,7625=>0,7680=>776,7681=>648,7682=>845, +7683=>699,7684=>845,7685=>699,7686=>845,7687=>699,7688=>796,7689=>609,7690=>867,7691=>699,7692=>867, +7693=>699,7694=>867,7695=>699,7696=>867,7697=>699,7698=>867,7699=>699,7700=>762,7701=>636,7702=>762, +7703=>636,7704=>762,7705=>636,7706=>762,7707=>636,7708=>762,7709=>636,7710=>710,7711=>430,7712=>854, +7713=>699,7714=>945,7715=>727,7716=>945,7717=>727,7718=>945,7719=>727,7720=>945,7721=>727,7722=>945, +7723=>727,7724=>468,7725=>380,7726=>468,7727=>380,7728=>869,7729=>693,7730=>869,7731=>693,7732=>869, +7733=>693,7734=>703,7735=>380,7736=>703,7737=>380,7738=>703,7739=>380,7740=>703,7741=>380,7742=>1107, +7743=>1058,7744=>1107,7745=>1058,7746=>1107,7747=>1058,7748=>914,7749=>727,7750=>914,7751=>727,7752=>914, +7753=>727,7754=>914,7755=>727,7756=>871,7757=>667,7758=>871,7759=>667,7760=>871,7761=>667,7762=>871, +7763=>667,7764=>752,7765=>699,7766=>752,7767=>699,7768=>831,7769=>527,7770=>831,7771=>527,7772=>831, +7773=>527,7774=>831,7775=>527,7776=>722,7777=>563,7778=>722,7779=>563,7780=>722,7781=>563,7782=>722, +7783=>563,7784=>722,7785=>563,7786=>744,7787=>462,7788=>744,7789=>462,7790=>744,7791=>462,7792=>744, +7793=>462,7794=>872,7795=>727,7796=>872,7797=>727,7798=>872,7799=>727,7800=>872,7801=>727,7802=>872, +7803=>727,7804=>776,7805=>581,7806=>776,7807=>581,7808=>1123,7809=>861,7810=>1123,7811=>861,7812=>1123, +7813=>861,7814=>1123,7815=>861,7816=>1123,7817=>861,7818=>776,7819=>596,7820=>776,7821=>596,7822=>714, +7823=>581,7824=>730,7825=>568,7826=>730,7827=>568,7828=>730,7829=>568,7830=>727,7831=>462,7832=>861, +7833=>581,7834=>1014,7835=>430,7838=>947,7839=>667,7840=>776,7841=>648,7842=>776,7843=>648,7844=>776, +7845=>648,7846=>776,7847=>648,7848=>776,7849=>648,7850=>776,7851=>648,7852=>776,7853=>648,7854=>776, +7855=>648,7856=>776,7857=>648,7858=>776,7859=>648,7860=>776,7861=>648,7862=>776,7863=>648,7864=>762, +7865=>636,7866=>762,7867=>636,7868=>762,7869=>636,7870=>762,7871=>636,7872=>762,7873=>636,7874=>762, +7875=>636,7876=>762,7877=>636,7878=>762,7879=>636,7880=>468,7881=>380,7882=>468,7883=>380,7884=>871, +7885=>667,7886=>871,7887=>667,7888=>871,7889=>667,7890=>871,7891=>667,7892=>871,7893=>667,7894=>871, +7895=>667,7896=>871,7897=>667,7898=>871,7899=>667,7900=>871,7901=>667,7902=>871,7903=>667,7904=>871, +7905=>667,7906=>871,7907=>667,7908=>872,7909=>727,7910=>872,7911=>727,7912=>872,7913=>727,7914=>872, +7915=>727,7916=>872,7917=>727,7918=>872,7919=>727,7920=>872,7921=>727,7922=>714,7923=>581,7924=>714, +7925=>581,7926=>714,7927=>581,7928=>714,7929=>581,7936=>770,7937=>770,7938=>770,7939=>770,7940=>770, +7941=>770,7942=>770,7943=>770,7944=>776,7945=>776,7946=>978,7947=>978,7948=>832,7949=>849,7950=>776, +7951=>776,7952=>608,7953=>608,7954=>608,7955=>608,7956=>608,7957=>608,7960=>917,7961=>909,7962=>1169, +7963=>1169,7964=>1093,7965=>1120,7968=>727,7969=>727,7970=>727,7971=>727,7972=>727,7973=>727,7974=>727, +7975=>727,7976=>1100,7977=>1094,7978=>1358,7979=>1361,7980=>1279,7981=>1308,7982=>1197,7983=>1194,7984=>484, +7985=>484,7986=>484,7987=>484,7988=>484,7989=>484,7990=>484,7991=>484,7992=>629,7993=>617,7994=>878, +7995=>881,7996=>799,7997=>831,7998=>723,7999=>714,8000=>667,8001=>667,8002=>667,8003=>667,8004=>667, +8005=>667,8008=>900,8009=>935,8010=>1240,8011=>1237,8012=>1035,8013=>1066,8016=>694,8017=>694,8018=>694, +8019=>694,8020=>694,8021=>694,8022=>694,8023=>694,8025=>922,8027=>1186,8029=>1133,8031=>1019,8032=>952, +8033=>952,8034=>952,8035=>952,8036=>952,8037=>952,8038=>952,8039=>952,8040=>931,8041=>963,8042=>1268, +8043=>1274,8044=>1054,8045=>1088,8046=>1023,8047=>1060,8048=>770,8049=>770,8050=>608,8051=>608,8052=>727, +8053=>727,8054=>484,8055=>484,8056=>667,8057=>667,8058=>694,8059=>694,8060=>952,8061=>952,8064=>770, +8065=>770,8066=>770,8067=>770,8068=>770,8069=>770,8070=>770,8071=>770,8072=>776,8073=>776,8074=>978, +8075=>978,8076=>832,8077=>849,8078=>776,8079=>776,8080=>727,8081=>727,8082=>727,8083=>727,8084=>727, +8085=>727,8086=>727,8087=>727,8088=>1100,8089=>1094,8090=>1358,8091=>1361,8092=>1279,8093=>1308,8094=>1197, +8095=>1194,8096=>952,8097=>952,8098=>952,8099=>952,8100=>952,8101=>952,8102=>952,8103=>952,8104=>931, +8105=>963,8106=>1268,8107=>1274,8108=>1054,8109=>1088,8110=>1023,8111=>1060,8112=>770,8113=>770,8114=>770, +8115=>770,8116=>770,8118=>770,8119=>770,8120=>776,8121=>776,8122=>811,8123=>776,8124=>776,8125=>500, +8126=>500,8127=>500,8128=>500,8129=>500,8130=>727,8131=>727,8132=>727,8134=>727,8135=>727,8136=>1000, +8137=>947,8138=>1191,8139=>1118,8140=>945,8141=>500,8142=>500,8143=>500,8144=>484,8145=>484,8146=>484, +8147=>484,8150=>484,8151=>484,8152=>468,8153=>468,8154=>714,8155=>662,8157=>500,8158=>500,8159=>500, +8160=>694,8161=>694,8162=>694,8163=>694,8164=>665,8165=>665,8166=>694,8167=>694,8168=>714,8169=>714, +8170=>1019,8171=>953,8172=>910,8173=>500,8174=>500,8175=>500,8178=>952,8179=>952,8180=>952,8182=>952, +8183=>952,8184=>1069,8185=>887,8186=>1101,8187=>911,8188=>890,8189=>500,8190=>500,8192=>500,8193=>1000, +8194=>500,8195=>1000,8196=>330,8197=>250,8198=>167,8199=>696,8200=>348,8201=>200,8202=>100,8203=>0, +8204=>0,8205=>0,8206=>0,8207=>0,8208=>415,8209=>415,8210=>696,8213=>1000,8214=>500,8215=>500, +8219=>348,8223=>575,8227=>639,8228=>348,8229=>674,8234=>0,8235=>0,8236=>0,8237=>0,8238=>0, +8239=>200,8241=>1820,8242=>264,8243=>447,8244=>630,8245=>264,8246=>447,8247=>630,8248=>733,8252=>629, +8253=>586,8254=>500,8258=>1023,8260=>167,8261=>473,8262=>473,8263=>1082,8264=>856,8265=>856,8267=>636, +8268=>500,8269=>500,8270=>523,8271=>369,8273=>523,8274=>556,8275=>1000,8279=>813,8287=>222,8288=>0, +8289=>0,8290=>0,8291=>0,8292=>0,8298=>0,8299=>0,8300=>0,8301=>0,8302=>0,8303=>0, +8304=>438,8305=>239,8308=>438,8309=>438,8310=>438,8311=>438,8312=>438,8313=>438,8314=>528,8315=>528, +8316=>528,8317=>298,8318=>298,8319=>519,8320=>438,8321=>438,8322=>438,8323=>438,8324=>438,8325=>438, +8326=>438,8327=>438,8328=>438,8329=>438,8330=>528,8331=>528,8332=>528,8333=>298,8334=>298,8336=>466, +8337=>444,8338=>467,8339=>475,8340=>444,8358=>696,8367=>1155,8369=>790,8372=>876,8373=>696,8377=>696, +8451=>1198,8457=>1112,8462=>727,8463=>727,8470=>1087,8486=>890,8487=>890,8490=>869,8491=>776,8513=>775, +8514=>557,8515=>637,8516=>760,8523=>903,8528=>1035,8529=>1035,8530=>1473,8531=>1035,8532=>1035,8533=>1035, +8534=>1035,8535=>1035,8536=>1035,8537=>1035,8538=>1035,8539=>1035,8540=>1035,8541=>1035,8542=>1035,8543=>615, +8544=>468,8545=>736,8546=>1005,8547=>1093,8548=>776,8549=>1127,8550=>1396,8551=>1664,8552=>1069,8553=>776, +8554=>1078,8555=>1347,8556=>703,8557=>796,8558=>867,8559=>1107,8560=>380,8561=>760,8562=>1140,8563=>961, +8564=>581,8565=>961,8566=>1341,8567=>1721,8568=>976,8569=>596,8570=>976,8571=>1356,8572=>380,8573=>609, +8574=>699,8575=>1058,8576=>1255,8577=>867,8578=>1268,8579=>796,8580=>609,8581=>796,8585=>1035,8592=>838, +8593=>838,8594=>838,8595=>838,8596=>838,8597=>838,8598=>838,8599=>838,8600=>838,8601=>838,8602=>838, +8603=>838,8604=>838,8605=>838,8606=>838,8607=>838,8608=>838,8609=>838,8610=>838,8611=>838,8612=>838, +8613=>838,8614=>838,8615=>838,8616=>838,8617=>838,8618=>838,8619=>838,8620=>838,8621=>838,8622=>838, +8623=>850,8624=>838,8625=>838,8626=>838,8627=>838,8628=>838,8629=>838,8630=>838,8631=>838,8632=>838, +8633=>838,8634=>838,8635=>838,8636=>838,8637=>838,8638=>838,8639=>838,8640=>838,8641=>838,8642=>838, +8643=>838,8644=>838,8645=>838,8646=>838,8647=>838,8648=>838,8649=>838,8650=>838,8651=>838,8652=>838, +8653=>838,8654=>838,8655=>838,8656=>838,8657=>838,8658=>838,8659=>838,8660=>838,8661=>838,8662=>838, +8663=>838,8664=>838,8665=>838,8666=>838,8667=>838,8668=>838,8669=>838,8670=>838,8671=>838,8672=>838, +8673=>838,8674=>838,8675=>838,8676=>838,8677=>838,8678=>838,8679=>838,8680=>838,8681=>838,8682=>838, +8683=>838,8684=>838,8685=>838,8686=>838,8687=>838,8688=>838,8689=>838,8690=>838,8691=>838,8692=>838, +8693=>838,8694=>838,8695=>838,8696=>838,8697=>838,8698=>838,8699=>838,8700=>838,8701=>838,8702=>838, +8703=>838,8704=>641,8706=>534,8707=>620,8708=>620,8710=>753,8711=>753,8712=>740,8713=>740,8715=>740, +8716=>740,8719=>842,8720=>842,8721=>753,8722=>838,8723=>838,8724=>838,8725=>365,8727=>691,8728=>519, +8729=>519,8730=>657,8731=>657,8732=>657,8733=>672,8734=>833,8735=>838,8736=>838,8739=>324,8740=>607, +8741=>529,8742=>773,8743=>812,8744=>812,8745=>838,8746=>838,8747=>579,8748=>1000,8749=>1391,8760=>838, +8761=>838,8762=>838,8763=>838,8764=>838,8765=>838,8770=>838,8771=>838,8776=>838,8784=>838,8785=>838, +8786=>838,8787=>838,8788=>1082,8789=>1082,8800=>838,8801=>838,8804=>838,8805=>838,8834=>838,8835=>838, +8836=>838,8837=>838,8838=>838,8839=>838,8844=>838,8845=>838,8846=>838,8847=>838,8848=>838,8849=>838, +8850=>838,8851=>838,8852=>838,8853=>838,8854=>838,8855=>838,8856=>838,8857=>838,8858=>838,8859=>838, +8860=>838,8861=>838,8862=>838,8863=>838,8864=>838,8865=>838,8866=>884,8867=>884,8868=>960,8869=>960, +8870=>616,8871=>616,8872=>884,8873=>884,8874=>884,8875=>1080,8876=>884,8877=>884,8878=>884,8879=>1080, +8901=>398,8962=>834,8968=>473,8969=>473,8970=>473,8971=>473,8976=>838,8977=>539,8984=>928,8985=>838, +8992=>579,8993=>579,8997=>1000,9000=>1443,9085=>1008,9115=>500,9116=>500,9117=>500,9118=>500,9119=>500, +9120=>500,9121=>500,9122=>500,9123=>500,9124=>500,9125=>500,9126=>500,9127=>750,9128=>750,9129=>750, +9130=>750,9131=>750,9132=>750,9133=>750,9134=>579,9167=>945,9251=>834,9600=>769,9601=>769,9602=>769, +9603=>769,9604=>769,9605=>769,9606=>769,9607=>769,9608=>769,9609=>769,9610=>769,9611=>769,9612=>769, +9613=>769,9614=>769,9615=>769,9616=>769,9617=>769,9618=>769,9619=>769,9620=>769,9621=>769,9622=>769, +9623=>769,9624=>769,9625=>769,9626=>769,9627=>769,9628=>769,9629=>769,9630=>769,9631=>769,9632=>945, +9633=>945,9634=>945,9635=>945,9636=>945,9637=>945,9638=>945,9639=>945,9640=>945,9641=>945,9642=>678, +9643=>678,9644=>945,9645=>945,9646=>550,9647=>550,9648=>769,9649=>769,9650=>769,9651=>769,9652=>502, +9653=>502,9654=>769,9655=>769,9656=>502,9657=>502,9658=>769,9659=>769,9660=>769,9661=>769,9662=>502, +9663=>502,9664=>769,9665=>769,9666=>502,9667=>502,9668=>769,9669=>769,9670=>769,9671=>769,9672=>769, +9673=>873,9674=>494,9675=>873,9676=>873,9677=>873,9678=>873,9679=>873,9680=>873,9681=>873,9682=>873, +9683=>873,9684=>873,9685=>873,9686=>527,9687=>527,9688=>791,9689=>970,9690=>970,9691=>970,9692=>387, +9693=>387,9694=>387,9695=>387,9696=>873,9697=>873,9698=>769,9699=>769,9700=>769,9701=>769,9702=>590, +9703=>945,9704=>945,9705=>945,9706=>945,9707=>945,9708=>769,9709=>769,9710=>769,9711=>1119,9712=>945, +9713=>945,9714=>945,9715=>945,9716=>873,9717=>873,9718=>873,9719=>873,9720=>769,9721=>769,9722=>769, +9723=>830,9724=>830,9725=>732,9726=>732,9727=>769,9728=>896,9784=>896,9785=>896,9786=>896,9787=>896, +9788=>896,9791=>614,9792=>731,9793=>731,9794=>896,9795=>896,9796=>896,9797=>896,9798=>896,9799=>896, +9824=>896,9825=>896,9826=>896,9827=>896,9828=>896,9829=>896,9830=>896,9831=>896,9833=>472,9834=>638, +9835=>896,9836=>896,9837=>472,9838=>357,9839=>484,10145=>838,10181=>457,10182=>457,10208=>494,10216=>457, +10217=>457,10224=>838,10225=>838,10226=>838,10227=>838,10228=>1033,10229=>1434,10230=>1434,10231=>1434,10232=>1434, +10233=>1434,10234=>1434,10235=>1434,10236=>1434,10237=>1434,10238=>1434,10239=>1434,10240=>781,10241=>781,10242=>781, +10243=>781,10244=>781,10245=>781,10246=>781,10247=>781,10248=>781,10249=>781,10250=>781,10251=>781,10252=>781, +10253=>781,10254=>781,10255=>781,10256=>781,10257=>781,10258=>781,10259=>781,10260=>781,10261=>781,10262=>781, +10263=>781,10264=>781,10265=>781,10266=>781,10267=>781,10268=>781,10269=>781,10270=>781,10271=>781,10272=>781, +10273=>781,10274=>781,10275=>781,10276=>781,10277=>781,10278=>781,10279=>781,10280=>781,10281=>781,10282=>781, +10283=>781,10284=>781,10285=>781,10286=>781,10287=>781,10288=>781,10289=>781,10290=>781,10291=>781,10292=>781, +10293=>781,10294=>781,10295=>781,10296=>781,10297=>781,10298=>781,10299=>781,10300=>781,10301=>781,10302=>781, +10303=>781,10304=>781,10305=>781,10306=>781,10307=>781,10308=>781,10309=>781,10310=>781,10311=>781,10312=>781, +10313=>781,10314=>781,10315=>781,10316=>781,10317=>781,10318=>781,10319=>781,10320=>781,10321=>781,10322=>781, +10323=>781,10324=>781,10325=>781,10326=>781,10327=>781,10328=>781,10329=>781,10330=>781,10331=>781,10332=>781, +10333=>781,10334=>781,10335=>781,10336=>781,10337=>781,10338=>781,10339=>781,10340=>781,10341=>781,10342=>781, +10343=>781,10344=>781,10345=>781,10346=>781,10347=>781,10348=>781,10349=>781,10350=>781,10351=>781,10352=>781, +10353=>781,10354=>781,10355=>781,10356=>781,10357=>781,10358=>781,10359=>781,10360=>781,10361=>781,10362=>781, +10363=>781,10364=>781,10365=>781,10366=>781,10367=>781,10368=>781,10369=>781,10370=>781,10371=>781,10372=>781, +10373=>781,10374=>781,10375=>781,10376=>781,10377=>781,10378=>781,10379=>781,10380=>781,10381=>781,10382=>781, +10383=>781,10384=>781,10385=>781,10386=>781,10387=>781,10388=>781,10389=>781,10390=>781,10391=>781,10392=>781, +10393=>781,10394=>781,10395=>781,10396=>781,10397=>781,10398=>781,10399=>781,10400=>781,10401=>781,10402=>781, +10403=>781,10404=>781,10405=>781,10406=>781,10407=>781,10408=>781,10409=>781,10410=>781,10411=>781,10412=>781, +10413=>781,10414=>781,10415=>781,10416=>781,10417=>781,10418=>781,10419=>781,10420=>781,10421=>781,10422=>781, +10423=>781,10424=>781,10425=>781,10426=>781,10427=>781,10428=>781,10429=>781,10430=>781,10431=>781,10432=>781, +10433=>781,10434=>781,10435=>781,10436=>781,10437=>781,10438=>781,10439=>781,10440=>781,10441=>781,10442=>781, +10443=>781,10444=>781,10445=>781,10446=>781,10447=>781,10448=>781,10449=>781,10450=>781,10451=>781,10452=>781, +10453=>781,10454=>781,10455=>781,10456=>781,10457=>781,10458=>781,10459=>781,10460=>781,10461=>781,10462=>781, +10463=>781,10464=>781,10465=>781,10466=>781,10467=>781,10468=>781,10469=>781,10470=>781,10471=>781,10472=>781, +10473=>781,10474=>781,10475=>781,10476=>781,10477=>781,10478=>781,10479=>781,10480=>781,10481=>781,10482=>781, +10483=>781,10484=>781,10485=>781,10486=>781,10487=>781,10488=>781,10489=>781,10490=>781,10491=>781,10492=>781, +10493=>781,10494=>781,10495=>781,10496=>838,10497=>838,10498=>838,10499=>838,10500=>838,10501=>838,10502=>838, +10503=>838,10504=>838,10505=>838,10506=>838,10507=>838,10508=>838,10509=>838,10510=>838,10511=>838,10512=>838, +10513=>838,10514=>838,10515=>838,10516=>838,10517=>838,10518=>838,10519=>838,10520=>838,10521=>838,10522=>838, +10523=>838,10524=>838,10525=>838,10526=>838,10527=>838,10528=>838,10529=>838,10530=>838,10531=>838,10532=>838, +10533=>838,10534=>838,10535=>838,10536=>838,10537=>838,10538=>838,10539=>838,10540=>838,10541=>838,10542=>838, +10543=>838,10544=>838,10545=>838,10546=>838,10547=>838,10548=>838,10549=>838,10550=>838,10551=>838,10552=>838, +10553=>838,10554=>838,10555=>838,10556=>838,10557=>838,10558=>838,10559=>838,10560=>838,10561=>838,10562=>838, +10563=>838,10564=>838,10565=>838,10566=>838,10567=>838,10568=>838,10569=>838,10570=>838,10571=>838,10572=>838, +10573=>838,10574=>838,10575=>838,10576=>838,10577=>838,10578=>838,10579=>838,10580=>838,10581=>838,10582=>838, +10583=>838,10584=>838,10585=>838,10586=>838,10587=>838,10588=>838,10589=>838,10590=>838,10591=>838,10592=>838, +10593=>838,10594=>838,10595=>838,10596=>838,10597=>838,10598=>838,10599=>838,10600=>838,10601=>838,10602=>838, +10603=>838,10604=>838,10605=>838,10606=>838,10607=>838,10608=>838,10609=>838,10610=>838,10611=>838,10612=>838, +10613=>838,10614=>838,10615=>1032,10616=>838,10617=>838,10618=>960,10619=>838,10620=>838,10621=>838,10622=>838, +10623=>838,10731=>494,10764=>1782,10765=>610,10766=>610,10799=>838,11008=>838,11009=>838,11010=>838,11011=>838, +11012=>838,11013=>838,11014=>838,11015=>838,11016=>838,11017=>838,11018=>838,11019=>838,11020=>838,11021=>838, +11022=>838,11023=>838,11024=>838,11025=>838,11026=>945,11027=>945,11028=>945,11029=>945,11030=>769,11031=>769, +11032=>769,11033=>769,11034=>945,11364=>831,11367=>945,11368=>727,11369=>869,11370=>693,11371=>730,11372=>568, +11373=>848,11374=>1107,11375=>776,11376=>848,11377=>709,11378=>1221,11379=>984,11381=>779,11382=>601,11383=>905, +11385=>571,11386=>667,11388=>313,11389=>489,11390=>722,11391=>730,11520=>773,11521=>635,11522=>804,11523=>658, +11524=>788,11525=>962,11526=>756,11527=>960,11528=>617,11529=>646,11530=>962,11531=>631,11532=>646,11533=>962, +11534=>846,11535=>866,11536=>961,11537=>645,11538=>645,11539=>959,11540=>945,11541=>863,11542=>644,11543=>646, +11544=>645,11545=>649,11546=>688,11547=>936,11548=>982,11549=>681,11550=>676,11551=>852,11552=>1113,11553=>632, +11554=>645,11555=>646,11556=>749,11557=>914,11800=>586,11810=>473,11811=>473,11812=>473,11813=>473,11822=>586, +42564=>722,42565=>563,42566=>468,42567=>380,42576=>1333,42577=>1092,42580=>1287,42581=>1025,42582=>1287,42583=>1039, +42760=>500,42761=>500,42762=>500,42763=>500,42764=>500,42765=>500,42766=>500,42767=>500,42768=>500,42769=>500, +42770=>500,42771=>500,42772=>500,42773=>500,42774=>500,42779=>384,42780=>384,42781=>276,42782=>276,42783=>276, +42813=>848,42891=>439,42892=>306,42893=>913,62464=>705,62465=>716,62466=>765,62467=>999,62468=>716,62469=>710, +62470=>776,62471=>1038,62472=>716,62473=>716,62474=>1309,62475=>734,62476=>733,62477=>1004,62478=>716,62479=>733, +62480=>1050,62481=>797,62482=>850,62483=>799,62484=>996,62485=>732,62486=>987,62487=>731,62488=>739,62489=>733, +62490=>780,62491=>733,62492=>739,62493=>717,62494=>780,62495=>936,62496=>716,62497=>826,62498=>717,62499=>716, +62500=>716,62501=>773,62502=>1013,62504=>904,63173=>667,63185=>500,63188=>500,64256=>821,64257=>727,64258=>727, +64259=>1120,64260=>1117,64261=>871,64262=>971,65024=>0,65025=>0,65026=>0,65027=>0,65028=>0,65029=>0, +65030=>0,65031=>0,65032=>0,65033=>0,65034=>0,65035=>0,65036=>0,65037=>0,65038=>0,65039=>0, +65529=>0,65530=>0,65531=>0,65532=>0,65533=>1113); +$enc=''; +$diff=''; +$file='dejavuserifb.z'; +$ctg='dejavuserifb.ctg.z'; +$originalsize=315052; +// --- EOF --- --- /dev/null +++ b/tcpdf/fonts/dejavuserifbi.php @@ -1,1 +1,309 @@ - +939,'Descent'=>-236,'CapHeight'=>-53,'Flags'=>96,'FontBBox'=>'[-906 -389 1760 1145]','ItalicAngle'=>-11,'StemV'=>120,'MissingWidth'=>600); +$up=-63; +$ut=44; +$dw=600; +$cw=array( +0=>600,32=>348,33=>439,34=>521,35=>838,36=>696,37=>950,38=>903,39=>306,40=>473, +41=>473,42=>523,43=>838,44=>348,45=>415,46=>348,47=>365,48=>696,49=>696,50=>696, +51=>696,52=>696,53=>696,54=>696,55=>696,56=>696,57=>696,58=>369,59=>369,60=>838, +61=>838,62=>838,63=>586,64=>1000,65=>776,66=>845,67=>796,68=>867,69=>762,70=>710, +71=>854,72=>945,73=>468,74=>473,75=>869,76=>703,77=>1107,78=>914,79=>871,80=>752, +81=>871,82=>831,83=>722,84=>744,85=>872,86=>776,87=>1123,88=>776,89=>714,90=>730, +91=>473,92=>365,93=>473,94=>838,95=>500,96=>500,97=>648,98=>699,99=>609,100=>699, +101=>636,102=>430,103=>699,104=>727,105=>380,106=>362,107=>693,108=>380,109=>1058,110=>727, +111=>667,112=>699,113=>699,114=>527,115=>563,116=>462,117=>727,118=>581,119=>861,120=>596, +121=>581,122=>568,123=>643,124=>364,125=>643,126=>838,8364=>696,8218=>348,402=>430,8222=>575, +8230=>1000,8224=>523,8225=>523,710=>500,8240=>1385,352=>722,8249=>400,338=>1180,381=>730,8216=>348, +8217=>348,8220=>575,8221=>575,8226=>639,8211=>500,8212=>1000,732=>500,8482=>1000,353=>563,8250=>400, +339=>1028,382=>568,376=>714,160=>348,161=>439,162=>696,163=>696,164=>636,165=>696,166=>364, +167=>523,168=>500,169=>1000,170=>487,171=>625,172=>838,173=>415,174=>1000,175=>500,176=>500, +177=>838,178=>438,179=>438,180=>500,181=>732,182=>636,183=>348,184=>500,185=>438,186=>500, +187=>625,188=>1043,189=>1043,190=>1043,191=>586,192=>776,193=>776,194=>776,195=>776,196=>776, +197=>776,198=>1034,199=>796,200=>762,201=>762,202=>762,203=>762,204=>468,205=>468,206=>468, +207=>468,208=>874,209=>914,210=>871,211=>871,212=>871,213=>871,214=>871,215=>838,216=>871, +217=>872,218=>872,219=>872,220=>872,221=>714,222=>757,223=>760,224=>648,225=>648,226=>648, +227=>648,228=>648,229=>648,230=>932,231=>609,232=>636,233=>636,234=>636,235=>636,236=>380, +237=>380,238=>380,239=>380,240=>667,241=>727,242=>667,243=>667,244=>667,245=>667,246=>667, +247=>838,248=>667,249=>727,250=>727,251=>727,252=>727,253=>581,254=>699,255=>581,256=>776, +257=>648,258=>776,259=>648,260=>776,261=>648,262=>796,263=>609,264=>796,265=>609,266=>796, +267=>609,268=>796,269=>609,270=>867,271=>699,272=>874,273=>699,274=>762,275=>636,276=>762, +277=>636,278=>762,279=>636,280=>762,281=>636,282=>762,283=>636,284=>854,285=>699,286=>854, +287=>699,288=>854,289=>699,290=>854,291=>699,292=>945,293=>727,294=>945,295=>727,296=>468, +297=>380,298=>468,299=>380,300=>468,301=>380,302=>468,303=>380,304=>468,305=>380,306=>942, +307=>751,308=>473,309=>362,310=>869,311=>693,312=>693,313=>703,314=>380,315=>703,316=>380, +317=>703,318=>508,319=>703,320=>557,321=>710,322=>385,323=>914,324=>727,325=>914,326=>727, +327=>914,328=>727,329=>1008,330=>872,331=>727,332=>871,333=>667,334=>871,335=>667,336=>871, +337=>667,340=>831,341=>527,342=>831,343=>527,344=>831,345=>527,346=>722,347=>563,348=>722, +349=>563,350=>722,351=>563,354=>744,355=>462,356=>744,357=>462,358=>744,359=>462,360=>872, +361=>727,362=>872,363=>727,364=>872,365=>727,366=>872,367=>727,368=>872,369=>727,370=>872, +371=>727,372=>1123,373=>861,374=>714,375=>581,377=>730,378=>568,379=>730,380=>568,383=>430, +384=>699,385=>845,386=>854,387=>699,388=>854,389=>699,390=>796,391=>796,392=>609,393=>874, +394=>867,395=>854,396=>699,397=>667,398=>762,399=>871,400=>721,401=>710,403=>854,404=>771, +405=>1043,406=>468,407=>468,408=>869,409=>693,410=>380,411=>701,412=>1058,413=>914,414=>727, +415=>871,416=>871,417=>667,418=>1200,419=>943,420=>752,421=>699,422=>831,423=>722,424=>563, +425=>707,426=>331,427=>462,428=>744,429=>462,430=>744,431=>872,432=>727,433=>890,434=>890, +435=>714,436=>699,437=>730,438=>568,439=>657,440=>657,441=>657,443=>696,444=>754,445=>568, +446=>536,447=>716,448=>295,449=>492,450=>459,451=>295,452=>1597,453=>1435,454=>1267,455=>1176, +456=>1065,457=>742,458=>1387,459=>1276,460=>1089,461=>776,462=>648,463=>468,464=>380,465=>871, +466=>667,467=>872,468=>727,469=>872,470=>727,471=>872,472=>727,473=>872,474=>727,475=>872, +476=>727,477=>636,478=>776,479=>648,480=>776,481=>648,482=>1034,483=>975,484=>896,485=>699, +486=>854,487=>699,488=>869,489=>693,490=>871,491=>667,492=>871,493=>667,494=>657,495=>568, +496=>362,497=>1597,498=>1435,499=>1267,500=>854,501=>699,502=>1221,503=>787,504=>914,505=>727, +506=>776,507=>648,508=>1034,509=>932,510=>871,511=>667,512=>776,513=>648,514=>776,515=>648, +516=>762,517=>636,518=>762,519=>636,520=>468,521=>380,522=>468,523=>380,524=>871,525=>667, +526=>871,527=>667,528=>831,529=>527,530=>831,531=>527,532=>872,533=>727,534=>872,535=>727, +536=>722,537=>563,538=>744,539=>462,540=>690,541=>607,542=>945,543=>727,544=>872,545=>791, +546=>703,547=>586,548=>730,549=>568,550=>776,551=>648,552=>762,553=>636,554=>871,555=>667, +556=>871,557=>667,558=>871,559=>667,560=>871,561=>667,562=>714,563=>581,564=>573,565=>922, +566=>564,567=>362,568=>1031,569=>1031,570=>776,571=>796,572=>609,573=>703,574=>744,575=>563, +576=>568,577=>660,578=>547,579=>845,580=>872,581=>776,582=>762,583=>636,584=>473,585=>387, +586=>848,587=>699,588=>831,589=>527,590=>714,591=>581,592=>648,593=>699,594=>699,595=>699, +596=>609,597=>609,598=>699,599=>730,600=>636,601=>636,602=>907,603=>608,604=>562,605=>907, +606=>720,607=>387,608=>699,609=>699,610=>626,611=>712,612=>627,613=>727,614=>727,615=>727, +616=>380,617=>380,618=>380,619=>409,620=>514,621=>380,622=>795,623=>1058,624=>1058,625=>1058, +626=>727,627=>727,628=>712,629=>667,630=>1061,631=>749,632=>667,633=>571,634=>571,635=>571, +636=>527,637=>527,638=>452,639=>487,640=>801,641=>801,642=>563,643=>331,644=>430,645=>540, +646=>331,647=>492,648=>462,649=>727,650=>679,651=>694,652=>581,653=>861,654=>635,655=>727, +656=>568,657=>568,658=>568,659=>568,660=>536,661=>536,662=>536,663=>545,664=>871,665=>695, +666=>720,667=>626,668=>732,669=>384,670=>740,671=>646,672=>699,673=>536,674=>536,675=>1117, +676=>1179,677=>1117,678=>911,679=>715,680=>909,681=>1039,682=>790,683=>795,684=>662,685=>443, +686=>613,687=>717,688=>521,689=>519,690=>313,691=>414,692=>414,693=>480,694=>527,695=>542, +696=>366,697=>302,699=>348,700=>348,701=>348,702=>366,703=>366,704=>313,705=>313,711=>500, +712=>282,713=>500,716=>282,717=>500,720=>369,721=>369,722=>366,723=>366,726=>392,728=>500, +729=>500,730=>500,731=>500,733=>500,734=>417,736=>448,737=>292,738=>395,739=>375,740=>313, +741=>500,742=>500,743=>500,744=>500,745=>500,750=>553,768=>0,769=>0,770=>0,771=>0, +772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0, +782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0, +792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0, +802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0, +812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0, +822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0, +835=>0,847=>0,856=>0,865=>0,880=>779,881=>576,884=>302,885=>302,890=>500,891=>609, +892=>609,893=>609,894=>369,900=>500,901=>500,902=>776,903=>348,904=>947,905=>1136,906=>662, +908=>887,910=>953,911=>911,912=>484,913=>776,914=>845,915=>710,916=>776,917=>762,918=>730, +919=>945,920=>871,921=>468,922=>869,923=>776,924=>1107,925=>914,926=>704,927=>871,928=>945, +929=>752,931=>707,932=>744,933=>714,934=>871,935=>776,936=>913,937=>890,938=>468,939=>714, +940=>770,941=>608,942=>727,943=>484,944=>694,945=>770,946=>664,947=>660,948=>667,949=>608, +950=>592,951=>727,952=>667,953=>484,954=>750,955=>701,956=>732,957=>694,958=>592,959=>667, +960=>732,961=>665,962=>609,963=>737,964=>673,965=>694,966=>905,967=>658,968=>941,969=>952, +970=>484,971=>694,972=>667,973=>694,974=>952,976=>667,977=>849,978=>764,979=>969,980=>764, +981=>941,982=>952,983=>655,984=>871,985=>667,986=>796,987=>609,988=>710,989=>527,990=>590, +991=>660,992=>796,993=>667,1008=>655,1009=>665,1010=>609,1011=>362,1012=>871,1013=>609,1014=>609, +1015=>757,1016=>699,1017=>796,1018=>1107,1019=>860,1020=>692,1021=>796,1022=>796,1023=>796,1024=>762, +1025=>762,1026=>901,1027=>690,1028=>795,1029=>722,1030=>468,1031=>468,1032=>473,1033=>1202,1034=>1262, +1035=>963,1036=>910,1037=>945,1038=>812,1039=>945,1040=>814,1041=>854,1042=>845,1043=>690,1044=>889, +1045=>762,1046=>1312,1047=>721,1048=>945,1049=>945,1050=>910,1051=>884,1052=>1107,1053=>945,1054=>871, +1055=>945,1056=>752,1057=>796,1058=>744,1059=>812,1060=>949,1061=>776,1062=>966,1063=>913,1064=>1268, +1065=>1293,1066=>957,1067=>1202,1068=>825,1069=>795,1070=>1287,1071=>882,1072=>648,1073=>722,1074=>657, +1075=>563,1076=>695,1077=>636,1078=>1306,1079=>638,1080=>727,1081=>727,1082=>677,1083=>732,1084=>951, +1085=>729,1086=>667,1087=>727,1088=>699,1089=>609,1090=>1058,1091=>598,1092=>902,1093=>596,1094=>803, +1095=>715,1096=>1058,1097=>1134,1098=>727,1099=>1018,1100=>660,1101=>645,1102=>1001,1103=>796,1104=>636, +1105=>636,1106=>719,1107=>563,1108=>609,1109=>563,1110=>380,1111=>380,1112=>362,1113=>1014,1114=>1011, +1115=>727,1116=>677,1117=>727,1118=>598,1119=>727,1122=>880,1123=>1050,1124=>1195,1125=>963,1130=>1312, +1131=>1010,1136=>1096,1137=>1105,1138=>871,1139=>652,1140=>916,1141=>749,1164=>846,1165=>673,1168=>700, +1169=>618,1170=>690,1171=>563,1172=>854,1173=>705,1174=>1312,1175=>1306,1176=>721,1177=>638,1178=>902, +1179=>703,1182=>910,1183=>677,1184=>1041,1185=>760,1186=>952,1187=>805,1188=>1167,1189=>955,1190=>1324, +1191=>1013,1194=>796,1195=>609,1196=>744,1197=>1142,1198=>714,1199=>572,1200=>713,1201=>572,1202=>789, +1203=>596,1204=>1010,1205=>833,1206=>913,1207=>792,1210=>910,1211=>727,1216=>468,1217=>1312,1218=>1306, +1219=>869,1220=>693,1223=>945,1224=>732,1227=>984,1228=>732,1231=>380,1232=>814,1233=>648,1234=>814, +1235=>648,1236=>1034,1237=>975,1238=>762,1239=>636,1240=>871,1241=>636,1242=>871,1243=>636,1244=>1312, +1245=>1306,1246=>721,1247=>638,1248=>657,1249=>568,1250=>945,1251=>727,1252=>945,1253=>727,1254=>871, +1255=>667,1256=>871,1257=>667,1258=>871,1259=>667,1260=>795,1261=>645,1262=>812,1263=>598,1264=>812, +1265=>598,1266=>812,1267=>598,1268=>913,1269=>715,1270=>690,1271=>563,1272=>1202,1273=>1018,1296=>721, +1297=>638,1298=>884,1299=>732,1300=>1248,1301=>1005,1306=>820,1307=>640,1308=>1028,1309=>856,4256=>765, +4257=>945,4258=>876,4259=>884,4260=>791,4261=>1087,4262=>1024,4263=>1223,4264=>653,4265=>828,4266=>1061, +4267=>1061,4268=>806,4269=>1145,4270=>979,4271=>912,4272=>1119,4273=>802,4274=>766,4275=>1085,4276=>986, +4277=>1076,4278=>820,4279=>843,4280=>831,4281=>843,4282=>918,4283=>1086,4284=>779,4285=>832,4286=>822, +4287=>1121,4288=>1132,4289=>812,4290=>902,4291=>812,4292=>890,4293=>1073,4304=>594,4305=>625,4306=>643, +4307=>887,4308=>615,4309=>611,4310=>666,4311=>915,4312=>613,4313=>600,4314=>1120,4315=>654,4316=>640, +4317=>879,4318=>624,4319=>634,4320=>877,4321=>657,4322=>802,4323=>751,4324=>869,4325=>639,4326=>912, +4327=>622,4328=>647,4329=>640,4330=>729,4331=>641,4332=>639,4333=>629,4334=>674,4335=>737,4336=>625, +4337=>657,4338=>625,4339=>625,4340=>624,4341=>670,4342=>940,4343=>680,4344=>636,4345=>672,4346=>625, +4347=>446,4348=>363,7426=>940,7432=>509,7433=>320,7444=>989,7446=>667,7447=>667,7453=>737,7454=>948, +7455=>948,7468=>489,7469=>651,7470=>532,7472=>546,7473=>480,7474=>480,7475=>538,7476=>595,7477=>294, +7478=>298,7479=>547,7480=>443,7481=>697,7482=>576,7483=>576,7484=>548,7486=>474,7487=>523,7488=>469, +7489=>549,7490=>708,7491=>466,7492=>466,7493=>498,7494=>657,7495=>499,7496=>498,7497=>444,7498=>444, +7499=>412,7500=>412,7501=>498,7502=>300,7503=>523,7504=>729,7505=>473,7506=>467,7507=>427,7508=>467, +7509=>467,7510=>499,7511=>371,7512=>520,7513=>434,7514=>729,7515=>491,7522=>239,7523=>414,7524=>520, +7525=>491,7543=>640,7544=>595,7547=>380,7557=>380,7579=>498,7580=>427,7581=>427,7582=>467,7583=>412, +7584=>271,7585=>373,7586=>498,7587=>522,7588=>300,7589=>307,7590=>300,7591=>300,7592=>370,7593=>368, +7594=>321,7595=>430,7596=>682,7597=>729,7598=>588,7599=>587,7600=>472,7601=>467,7602=>522,7603=>400, +7604=>387,7605=>371,7606=>520,7607=>475,7609=>489,7610=>366,7611=>357,7612=>527,7613=>412,7614=>452, +7615=>467,7620=>0,7621=>0,7622=>0,7623=>0,7624=>0,7625=>0,7680=>776,7681=>648,7682=>845, +7683=>699,7684=>845,7685=>699,7686=>845,7687=>699,7688=>796,7689=>609,7690=>867,7691=>699,7692=>867, +7693=>699,7694=>867,7695=>699,7696=>867,7697=>699,7698=>867,7699=>699,7700=>762,7701=>636,7702=>762, +7703=>636,7704=>762,7705=>636,7706=>762,7707=>636,7708=>762,7709=>636,7710=>710,7711=>430,7712=>854, +7713=>699,7714=>945,7715=>727,7716=>945,7717=>727,7718=>945,7719=>727,7720=>945,7721=>727,7722=>945, +7723=>727,7724=>468,7725=>380,7726=>468,7727=>380,7728=>869,7729=>693,7730=>869,7731=>693,7732=>869, +7733=>693,7734=>703,7735=>380,7736=>703,7737=>380,7738=>703,7739=>380,7740=>703,7741=>380,7742=>1107, +7743=>1058,7744=>1107,7745=>1058,7746=>1107,7747=>1058,7748=>914,7749=>727,7750=>914,7751=>727,7752=>914, +7753=>727,7754=>914,7755=>727,7756=>871,7757=>667,7758=>871,7759=>667,7760=>871,7761=>667,7762=>871, +7763=>667,7764=>752,7765=>699,7766=>752,7767=>699,7768=>831,7769=>527,7770=>831,7771=>527,7772=>831, +7773=>527,7774=>831,7775=>527,7776=>722,7777=>563,7778=>722,7779=>563,7780=>722,7781=>563,7782=>722, +7783=>563,7784=>722,7785=>563,7786=>744,7787=>462,7788=>744,7789=>462,7790=>744,7791=>462,7792=>744, +7793=>462,7794=>872,7795=>727,7796=>872,7797=>727,7798=>872,7799=>727,7800=>872,7801=>727,7802=>872, +7803=>727,7804=>776,7805=>581,7806=>776,7807=>581,7808=>1123,7809=>861,7810=>1123,7811=>861,7812=>1123, +7813=>861,7814=>1123,7815=>861,7816=>1123,7817=>861,7818=>776,7819=>596,7820=>776,7821=>596,7822=>714, +7823=>581,7824=>730,7825=>568,7826=>730,7827=>568,7828=>730,7829=>568,7830=>727,7831=>462,7832=>861, +7833=>581,7834=>1014,7835=>430,7838=>947,7839=>667,7840=>776,7841=>648,7842=>776,7843=>648,7844=>776, +7845=>648,7846=>776,7847=>648,7848=>776,7849=>648,7850=>776,7851=>648,7852=>776,7853=>648,7854=>776, +7855=>648,7856=>776,7857=>648,7858=>776,7859=>648,7860=>776,7861=>648,7862=>776,7863=>648,7864=>762, +7865=>636,7866=>762,7867=>636,7868=>762,7869=>636,7870=>762,7871=>636,7872=>762,7873=>636,7874=>762, +7875=>636,7876=>762,7877=>636,7878=>762,7879=>636,7880=>468,7881=>380,7882=>468,7883=>380,7884=>871, +7885=>667,7886=>871,7887=>667,7888=>871,7889=>667,7890=>871,7891=>667,7892=>871,7893=>667,7894=>871, +7895=>667,7896=>871,7897=>667,7898=>871,7899=>667,7900=>871,7901=>667,7902=>871,7903=>667,7904=>871, +7905=>667,7906=>871,7907=>667,7908=>872,7909=>727,7910=>872,7911=>727,7912=>872,7913=>727,7914=>872, +7915=>727,7916=>872,7917=>727,7918=>872,7919=>727,7920=>872,7921=>727,7922=>714,7923=>581,7924=>714, +7925=>581,7926=>714,7927=>581,7928=>714,7929=>581,7936=>770,7937=>770,7938=>770,7939=>770,7940=>770, +7941=>770,7942=>770,7943=>770,7944=>776,7945=>776,7946=>978,7947=>978,7948=>832,7949=>849,7950=>776, +7951=>776,7952=>608,7953=>608,7954=>608,7955=>608,7956=>608,7957=>608,7960=>917,7961=>909,7962=>1169, +7963=>1169,7964=>1093,7965=>1120,7968=>727,7969=>727,7970=>727,7971=>727,7972=>727,7973=>727,7974=>727, +7975=>727,7976=>1100,7977=>1094,7978=>1358,7979=>1361,7980=>1279,7981=>1308,7982=>1197,7983=>1194,7984=>484, +7985=>484,7986=>484,7987=>484,7988=>484,7989=>484,7990=>484,7991=>484,7992=>629,7993=>617,7994=>878, +7995=>881,7996=>799,7997=>831,7998=>723,7999=>714,8000=>667,8001=>667,8002=>667,8003=>667,8004=>667, +8005=>667,8008=>900,8009=>935,8010=>1240,8011=>1237,8012=>1035,8013=>1066,8016=>694,8017=>694,8018=>694, +8019=>694,8020=>694,8021=>694,8022=>694,8023=>694,8025=>922,8027=>1186,8029=>1133,8031=>1019,8032=>952, +8033=>952,8034=>952,8035=>952,8036=>952,8037=>952,8038=>952,8039=>952,8040=>931,8041=>963,8042=>1268, +8043=>1274,8044=>1054,8045=>1088,8046=>1023,8047=>1060,8048=>770,8049=>770,8050=>608,8051=>608,8052=>727, +8053=>727,8054=>484,8055=>484,8056=>667,8057=>667,8058=>694,8059=>694,8060=>952,8061=>952,8064=>770, +8065=>770,8066=>770,8067=>770,8068=>770,8069=>770,8070=>770,8071=>770,8072=>776,8073=>776,8074=>978, +8075=>978,8076=>832,8077=>849,8078=>776,8079=>776,8080=>727,8081=>727,8082=>727,8083=>727,8084=>727, +8085=>727,8086=>727,8087=>727,8088=>1100,8089=>1094,8090=>1358,8091=>1361,8092=>1279,8093=>1308,8094=>1197, +8095=>1194,8096=>952,8097=>952,8098=>952,8099=>952,8100=>952,8101=>952,8102=>952,8103=>952,8104=>931, +8105=>963,8106=>1268,8107=>1274,8108=>1054,8109=>1088,8110=>1023,8111=>1060,8112=>770,8113=>770,8114=>770, +8115=>770,8116=>770,8118=>770,8119=>770,8120=>776,8121=>776,8122=>811,8123=>776,8124=>776,8125=>500, +8126=>500,8127=>500,8128=>500,8129=>500,8130=>727,8131=>727,8132=>727,8134=>727,8135=>727,8136=>1000, +8137=>947,8138=>1191,8139=>1118,8140=>945,8141=>500,8142=>500,8143=>500,8144=>484,8145=>484,8146=>484, +8147=>484,8150=>484,8151=>484,8152=>468,8153=>468,8154=>714,8155=>662,8157=>500,8158=>500,8159=>500, +8160=>694,8161=>694,8162=>694,8163=>694,8164=>665,8165=>665,8166=>694,8167=>694,8168=>714,8169=>714, +8170=>1019,8171=>953,8172=>910,8173=>500,8174=>500,8175=>500,8178=>952,8179=>952,8180=>952,8182=>952, +8183=>952,8184=>1069,8185=>887,8186=>1101,8187=>911,8188=>890,8189=>500,8190=>500,8192=>500,8193=>1000, +8194=>500,8195=>1000,8196=>330,8197=>250,8198=>167,8199=>696,8200=>348,8201=>200,8202=>100,8203=>0, +8204=>0,8205=>0,8206=>0,8207=>0,8208=>415,8209=>415,8210=>696,8213=>1000,8214=>500,8215=>500, +8219=>348,8223=>575,8227=>639,8228=>348,8229=>674,8234=>0,8235=>0,8236=>0,8237=>0,8238=>0, +8239=>200,8241=>1813,8242=>264,8243=>447,8244=>630,8245=>264,8246=>447,8247=>630,8248=>733,8252=>629, +8253=>586,8254=>500,8258=>1023,8260=>167,8261=>473,8262=>473,8263=>1082,8264=>856,8265=>856,8267=>636, +8268=>500,8269=>500,8270=>523,8271=>369,8273=>523,8274=>556,8275=>1000,8279=>813,8287=>222,8288=>0, +8289=>0,8290=>0,8291=>0,8292=>0,8298=>0,8299=>0,8300=>0,8301=>0,8302=>0,8303=>0, +8304=>438,8305=>239,8308=>438,8309=>438,8310=>438,8311=>438,8312=>438,8313=>438,8314=>528,8315=>528, +8316=>528,8317=>298,8318=>298,8319=>458,8320=>438,8321=>438,8322=>438,8323=>438,8324=>438,8325=>438, +8326=>438,8327=>438,8328=>438,8329=>438,8330=>528,8331=>528,8332=>528,8333=>298,8334=>298,8336=>466, +8337=>444,8338=>467,8339=>375,8340=>444,8358=>696,8367=>1155,8369=>790,8372=>876,8373=>696,8377=>696, +8451=>1198,8457=>1112,8462=>727,8463=>727,8470=>1087,8486=>890,8487=>890,8490=>869,8491=>776,8513=>786, +8514=>576,8515=>637,8516=>760,8523=>903,8528=>1035,8529=>1035,8530=>1473,8531=>1035,8532=>1035,8533=>1035, +8534=>1035,8535=>1035,8536=>1035,8537=>1035,8538=>1035,8539=>1035,8540=>1035,8541=>1035,8542=>1035,8543=>615, +8544=>468,8545=>736,8546=>1005,8547=>1093,8548=>776,8549=>1127,8550=>1396,8551=>1664,8552=>1069,8553=>776, +8554=>1078,8555=>1347,8556=>703,8557=>796,8558=>867,8559=>1107,8560=>380,8561=>760,8562=>1140,8563=>961, +8564=>581,8565=>961,8566=>1341,8567=>1721,8568=>976,8569=>596,8570=>976,8571=>1356,8572=>380,8573=>609, +8574=>699,8575=>1058,8576=>1255,8577=>867,8578=>1268,8579=>796,8580=>609,8581=>796,8585=>1035,8592=>838, +8593=>838,8594=>838,8595=>838,8596=>838,8597=>838,8598=>838,8599=>838,8600=>838,8601=>838,8602=>838, +8603=>838,8604=>838,8605=>838,8606=>838,8607=>838,8608=>838,8609=>838,8610=>838,8611=>838,8612=>838, +8613=>838,8614=>838,8615=>838,8616=>838,8617=>838,8618=>838,8619=>838,8620=>838,8621=>838,8622=>838, +8623=>850,8624=>838,8625=>838,8626=>838,8627=>838,8628=>838,8629=>838,8630=>838,8631=>838,8632=>838, +8633=>838,8634=>838,8635=>838,8636=>838,8637=>838,8638=>838,8639=>838,8640=>838,8641=>838,8642=>838, +8643=>838,8644=>838,8645=>838,8646=>838,8647=>838,8648=>838,8649=>838,8650=>838,8651=>838,8652=>838, +8653=>838,8654=>838,8655=>838,8656=>838,8657=>838,8658=>838,8659=>838,8660=>838,8661=>838,8662=>838, +8663=>838,8664=>838,8665=>838,8666=>838,8667=>838,8668=>838,8669=>838,8670=>838,8671=>838,8672=>838, +8673=>838,8674=>838,8675=>838,8676=>838,8677=>838,8678=>838,8679=>838,8680=>838,8681=>838,8682=>838, +8683=>838,8684=>838,8685=>838,8686=>838,8687=>838,8688=>838,8689=>838,8690=>838,8691=>838,8692=>838, +8693=>838,8694=>838,8695=>838,8696=>838,8697=>838,8698=>838,8699=>838,8700=>838,8701=>838,8702=>838, +8703=>838,8704=>641,8706=>534,8707=>620,8708=>620,8710=>753,8711=>753,8712=>740,8713=>740,8715=>740, +8716=>740,8719=>842,8720=>842,8721=>753,8722=>838,8723=>838,8724=>838,8725=>365,8727=>691,8728=>519, +8729=>519,8730=>657,8731=>657,8732=>657,8733=>672,8734=>833,8735=>838,8736=>838,8739=>324,8740=>607, +8741=>529,8742=>773,8743=>812,8744=>812,8745=>838,8746=>838,8747=>579,8748=>1000,8749=>1391,8760=>838, +8761=>838,8762=>838,8763=>838,8764=>838,8765=>838,8770=>838,8771=>838,8776=>838,8784=>838,8785=>838, +8786=>838,8787=>838,8788=>1082,8789=>1082,8800=>838,8801=>838,8804=>838,8805=>838,8834=>838,8835=>838, +8836=>838,8837=>838,8838=>838,8839=>838,8844=>838,8845=>838,8846=>838,8847=>838,8848=>838,8849=>838, +8850=>838,8851=>838,8852=>838,8853=>838,8854=>838,8855=>838,8856=>838,8857=>838,8858=>838,8859=>838, +8860=>838,8861=>838,8862=>838,8863=>838,8864=>838,8865=>838,8866=>884,8867=>884,8868=>960,8869=>960, +8870=>616,8871=>616,8872=>884,8873=>884,8874=>884,8875=>1080,8876=>884,8877=>884,8878=>884,8879=>1080, +8901=>398,8962=>834,8968=>473,8969=>473,8970=>473,8971=>473,8976=>838,8977=>539,8984=>928,8985=>838, +8992=>579,8993=>579,8997=>1000,9000=>1443,9085=>1008,9115=>500,9116=>500,9117=>500,9118=>500,9119=>500, +9120=>500,9121=>500,9122=>500,9123=>500,9124=>500,9125=>500,9126=>500,9127=>750,9128=>750,9129=>750, +9130=>750,9131=>750,9132=>750,9133=>750,9134=>579,9167=>945,9251=>834,9600=>769,9601=>769,9602=>769, +9603=>769,9604=>769,9605=>769,9606=>769,9607=>769,9608=>769,9609=>769,9610=>769,9611=>769,9612=>769, +9613=>769,9614=>769,9615=>769,9616=>769,9617=>769,9618=>769,9619=>769,9620=>769,9621=>769,9622=>769, +9623=>769,9624=>769,9625=>769,9626=>769,9627=>769,9628=>769,9629=>769,9630=>769,9631=>769,9632=>945, +9633=>945,9634=>945,9635=>945,9636=>945,9637=>945,9638=>945,9639=>945,9640=>945,9641=>945,9642=>678, +9643=>678,9644=>945,9645=>945,9646=>550,9647=>550,9648=>769,9649=>769,9650=>769,9651=>769,9652=>502, +9653=>502,9654=>769,9655=>769,9656=>502,9657=>502,9658=>769,9659=>769,9660=>769,9661=>769,9662=>502, +9663=>502,9664=>769,9665=>769,9666=>502,9667=>502,9668=>769,9669=>769,9670=>769,9671=>769,9672=>769, +9673=>873,9674=>494,9675=>873,9676=>873,9677=>873,9678=>873,9679=>873,9680=>873,9681=>873,9682=>873, +9683=>873,9684=>873,9685=>873,9686=>527,9687=>527,9688=>791,9689=>970,9690=>970,9691=>970,9692=>387, +9693=>387,9694=>387,9695=>387,9696=>873,9697=>873,9698=>769,9699=>769,9700=>769,9701=>769,9702=>590, +9703=>945,9704=>945,9705=>945,9706=>945,9707=>945,9708=>769,9709=>769,9710=>769,9711=>1119,9712=>945, +9713=>945,9714=>945,9715=>945,9716=>873,9717=>873,9718=>873,9719=>873,9720=>769,9721=>769,9722=>769, +9723=>830,9724=>830,9725=>732,9726=>732,9727=>769,9728=>896,9784=>896,9785=>896,9786=>896,9787=>896, +9788=>896,9791=>614,9792=>731,9793=>731,9794=>896,9795=>896,9796=>896,9797=>896,9798=>896,9799=>896, +9824=>896,9825=>896,9826=>896,9827=>896,9828=>896,9829=>896,9830=>896,9831=>896,9833=>472,9834=>638, +9835=>896,9836=>896,9837=>472,9838=>357,9839=>484,10145=>838,10181=>457,10182=>457,10208=>494,10216=>457, +10217=>457,10224=>838,10225=>838,10226=>838,10227=>838,10228=>1033,10229=>1434,10230=>1434,10231=>1434,10232=>1434, +10233=>1434,10234=>1434,10235=>1434,10236=>1434,10237=>1434,10238=>1434,10239=>1434,10240=>781,10241=>781,10242=>781, +10243=>781,10244=>781,10245=>781,10246=>781,10247=>781,10248=>781,10249=>781,10250=>781,10251=>781,10252=>781, +10253=>781,10254=>781,10255=>781,10256=>781,10257=>781,10258=>781,10259=>781,10260=>781,10261=>781,10262=>781, +10263=>781,10264=>781,10265=>781,10266=>781,10267=>781,10268=>781,10269=>781,10270=>781,10271=>781,10272=>781, +10273=>781,10274=>781,10275=>781,10276=>781,10277=>781,10278=>781,10279=>781,10280=>781,10281=>781,10282=>781, +10283=>781,10284=>781,10285=>781,10286=>781,10287=>781,10288=>781,10289=>781,10290=>781,10291=>781,10292=>781, +10293=>781,10294=>781,10295=>781,10296=>781,10297=>781,10298=>781,10299=>781,10300=>781,10301=>781,10302=>781, +10303=>781,10304=>781,10305=>781,10306=>781,10307=>781,10308=>781,10309=>781,10310=>781,10311=>781,10312=>781, +10313=>781,10314=>781,10315=>781,10316=>781,10317=>781,10318=>781,10319=>781,10320=>781,10321=>781,10322=>781, +10323=>781,10324=>781,10325=>781,10326=>781,10327=>781,10328=>781,10329=>781,10330=>781,10331=>781,10332=>781, +10333=>781,10334=>781,10335=>781,10336=>781,10337=>781,10338=>781,10339=>781,10340=>781,10341=>781,10342=>781, +10343=>781,10344=>781,10345=>781,10346=>781,10347=>781,10348=>781,10349=>781,10350=>781,10351=>781,10352=>781, +10353=>781,10354=>781,10355=>781,10356=>781,10357=>781,10358=>781,10359=>781,10360=>781,10361=>781,10362=>781, +10363=>781,10364=>781,10365=>781,10366=>781,10367=>781,10368=>781,10369=>781,10370=>781,10371=>781,10372=>781, +10373=>781,10374=>781,10375=>781,10376=>781,10377=>781,10378=>781,10379=>781,10380=>781,10381=>781,10382=>781, +10383=>781,10384=>781,10385=>781,10386=>781,10387=>781,10388=>781,10389=>781,10390=>781,10391=>781,10392=>781, +10393=>781,10394=>781,10395=>781,10396=>781,10397=>781,10398=>781,10399=>781,10400=>781,10401=>781,10402=>781, +10403=>781,10404=>781,10405=>781,10406=>781,10407=>781,10408=>781,10409=>781,10410=>781,10411=>781,10412=>781, +10413=>781,10414=>781,10415=>781,10416=>781,10417=>781,10418=>781,10419=>781,10420=>781,10421=>781,10422=>781, +10423=>781,10424=>781,10425=>781,10426=>781,10427=>781,10428=>781,10429=>781,10430=>781,10431=>781,10432=>781, +10433=>781,10434=>781,10435=>781,10436=>781,10437=>781,10438=>781,10439=>781,10440=>781,10441=>781,10442=>781, +10443=>781,10444=>781,10445=>781,10446=>781,10447=>781,10448=>781,10449=>781,10450=>781,10451=>781,10452=>781, +10453=>781,10454=>781,10455=>781,10456=>781,10457=>781,10458=>781,10459=>781,10460=>781,10461=>781,10462=>781, +10463=>781,10464=>781,10465=>781,10466=>781,10467=>781,10468=>781,10469=>781,10470=>781,10471=>781,10472=>781, +10473=>781,10474=>781,10475=>781,10476=>781,10477=>781,10478=>781,10479=>781,10480=>781,10481=>781,10482=>781, +10483=>781,10484=>781,10485=>781,10486=>781,10487=>781,10488=>781,10489=>781,10490=>781,10491=>781,10492=>781, +10493=>781,10494=>781,10495=>781,10496=>838,10497=>838,10498=>838,10499=>838,10500=>838,10501=>838,10502=>838, +10503=>838,10504=>838,10505=>838,10506=>838,10507=>838,10508=>838,10509=>838,10510=>838,10511=>838,10512=>838, +10513=>838,10514=>838,10515=>838,10516=>838,10517=>838,10518=>838,10519=>838,10520=>838,10521=>838,10522=>838, +10523=>838,10524=>838,10525=>838,10526=>838,10527=>838,10528=>838,10529=>838,10530=>838,10531=>838,10532=>838, +10533=>838,10534=>838,10535=>838,10536=>838,10537=>838,10538=>838,10539=>838,10540=>838,10541=>838,10542=>838, +10543=>838,10544=>838,10545=>838,10546=>838,10547=>838,10548=>838,10549=>838,10550=>838,10551=>838,10552=>838, +10553=>838,10554=>838,10555=>838,10556=>838,10557=>838,10558=>838,10559=>838,10560=>838,10561=>838,10562=>838, +10563=>838,10564=>838,10565=>838,10566=>838,10567=>838,10568=>838,10569=>838,10570=>838,10571=>838,10572=>838, +10573=>838,10574=>838,10575=>838,10576=>838,10577=>838,10578=>838,10579=>838,10580=>838,10581=>838,10582=>838, +10583=>838,10584=>838,10585=>838,10586=>838,10587=>838,10588=>838,10589=>838,10590=>838,10591=>838,10592=>838, +10593=>838,10594=>838,10595=>838,10596=>838,10597=>838,10598=>838,10599=>838,10600=>838,10601=>838,10602=>838, +10603=>838,10604=>838,10605=>838,10606=>838,10607=>838,10608=>838,10609=>838,10610=>838,10611=>838,10612=>838, +10613=>838,10614=>838,10615=>1032,10616=>838,10617=>838,10618=>960,10619=>838,10620=>838,10621=>838,10622=>838, +10623=>838,10731=>494,10764=>1782,10765=>610,10766=>610,10799=>838,11008=>838,11009=>838,11010=>838,11011=>838, +11012=>838,11013=>838,11014=>838,11015=>838,11016=>838,11017=>838,11018=>838,11019=>838,11020=>838,11021=>838, +11022=>838,11023=>838,11024=>838,11025=>838,11026=>945,11027=>945,11028=>945,11029=>945,11030=>769,11031=>769, +11032=>769,11033=>769,11034=>945,11364=>831,11367=>945,11368=>727,11369=>869,11370=>693,11371=>730,11372=>568, +11373=>848,11374=>1107,11375=>776,11376=>848,11377=>709,11378=>1221,11379=>984,11381=>779,11382=>576,11383=>905, +11385=>571,11386=>667,11388=>313,11389=>489,11390=>722,11391=>730,11520=>773,11521=>635,11522=>804,11523=>658, +11524=>788,11525=>962,11526=>756,11527=>960,11528=>617,11529=>646,11530=>962,11531=>631,11532=>646,11533=>962, +11534=>846,11535=>866,11536=>961,11537=>645,11538=>645,11539=>959,11540=>945,11541=>863,11542=>644,11543=>646, +11544=>645,11545=>649,11546=>688,11547=>936,11548=>982,11549=>681,11550=>676,11551=>852,11552=>1113,11553=>632, +11554=>645,11555=>646,11556=>749,11557=>914,11800=>586,11810=>473,11811=>473,11812=>473,11813=>473,11822=>586, +42564=>722,42565=>563,42566=>468,42567=>380,42576=>1333,42577=>1085,42580=>1287,42581=>1025,42582=>1287,42583=>1029, +42760=>500,42761=>500,42762=>500,42763=>500,42764=>500,42765=>500,42766=>500,42767=>500,42768=>500,42769=>500, +42770=>500,42771=>500,42772=>500,42773=>500,42774=>500,42779=>384,42780=>384,42781=>276,42782=>276,42783=>276, +42813=>722,42891=>439,42892=>306,42893=>913,62464=>726,62465=>737,62466=>786,62467=>1019,62468=>737,62469=>731, +62470=>796,62471=>1058,62472=>737,62473=>737,62474=>1329,62475=>754,62476=>753,62477=>1024,62478=>737,62479=>753, +62480=>1070,62481=>818,62482=>870,62483=>819,62484=>1016,62485=>753,62486=>1008,62487=>752,62488=>760,62489=>753, +62490=>800,62491=>753,62492=>760,62493=>738,62494=>801,62495=>956,62496=>736,62497=>847,62498=>737,62499=>737, +62500=>737,62501=>793,62502=>1033,62504=>904,63172=>563,63173=>667,63174=>699,63175=>727,63176=>1058,63185=>500, +63188=>500,64256=>827,64257=>727,64258=>727,64259=>1108,64260=>1146,64261=>879,64262=>971,65024=>0,65025=>0, +65026=>0,65027=>0,65028=>0,65029=>0,65030=>0,65031=>0,65032=>0,65033=>0,65034=>0,65035=>0, +65036=>0,65037=>0,65038=>0,65039=>0,65529=>0,65530=>0,65531=>0,65532=>0,65533=>1113); +$enc=''; +$diff=''; +$file='dejavuserifbitalic.z'; +$ctg='dejavuserifbitalic.ctg.z'; +$originalsize=302940; +// --- EOF --- --- /dev/null +++ b/tcpdf/fonts/dejavuserifcondensed.php @@ -1,1 +1,323 @@ - +928,'Descent'=>-236,'CapHeight'=>5,'Flags'=>32,'FontBBox'=>'[-692 -347 1511 1109]','ItalicAngle'=>0,'StemV'=>70,'MissingWidth'=>540); +$up=-63; +$ut=44; +$dw=540; +$cw=array( +0=>540,32=>286,33=>361,34=>414,35=>754,36=>572,37=>855,38=>801,39=>247,40=>351, +41=>351,42=>450,43=>754,44=>286,45=>304,46=>286,47=>303,48=>572,49=>572,50=>572, +51=>572,52=>572,53=>572,54=>572,55=>572,56=>572,57=>572,58=>303,59=>303,60=>754, +61=>754,62=>754,63=>482,64=>900,65=>650,66=>661,67=>688,68=>721,69=>657,70=>624, +71=>719,72=>785,73=>355,74=>360,75=>672,76=>598,77=>921,78=>787,79=>738,80=>605, +81=>738,82=>677,83=>616,84=>600,85=>758,86=>650,87=>925,88=>641,89=>594,90=>625, +91=>351,92=>303,93=>351,94=>754,95=>450,96=>450,97=>536,98=>576,99=>504,100=>576, +101=>532,102=>333,103=>576,104=>580,105=>288,106=>279,107=>545,108=>288,109=>853,110=>580, +111=>542,112=>576,113=>576,114=>430,115=>461,116=>361,117=>580,118=>508,119=>770,120=>507, +121=>508,122=>474,123=>572,124=>303,125=>572,126=>754,8364=>572,8218=>286,402=>333,8222=>466, +8230=>900,8224=>450,8225=>450,710=>450,8240=>1208,352=>616,8249=>360,338=>1023,381=>625,8216=>286, +8217=>286,8220=>460,8221=>460,8226=>531,8211=>450,8212=>900,732=>450,8482=>900,353=>461,8250=>360, +339=>890,382=>474,376=>594,160=>286,161=>361,162=>572,163=>572,164=>572,165=>572,166=>303, +167=>450,168=>450,169=>900,170=>427,171=>550,172=>754,173=>304,174=>900,175=>450,176=>450, +177=>754,178=>360,179=>360,180=>450,181=>584,182=>572,183=>286,184=>450,185=>360,186=>423, +187=>550,188=>872,189=>872,190=>872,191=>482,192=>650,193=>650,194=>650,195=>650,196=>650, +197=>650,198=>901,199=>688,200=>657,201=>657,202=>657,203=>657,204=>355,205=>355,206=>355, +207=>355,208=>726,209=>787,210=>738,211=>738,212=>738,213=>738,214=>738,215=>754,216=>738, +217=>758,218=>758,219=>758,220=>758,221=>594,222=>608,223=>601,224=>536,225=>536,226=>536, +227=>536,228=>536,229=>536,230=>846,231=>504,232=>532,233=>532,234=>532,235=>532,236=>288, +237=>288,238=>288,239=>288,240=>542,241=>580,242=>542,243=>542,244=>542,245=>542,246=>542, +247=>754,248=>542,249=>580,250=>580,251=>580,252=>580,253=>508,254=>576,255=>508,256=>650, +257=>536,258=>650,259=>536,260=>650,261=>536,262=>688,263=>504,264=>688,265=>504,266=>688, +267=>504,268=>688,269=>504,270=>721,271=>576,272=>726,273=>576,274=>657,275=>532,276=>657, +277=>532,278=>657,279=>532,280=>657,281=>532,282=>657,283=>532,284=>719,285=>576,286=>719, +287=>576,288=>719,289=>576,290=>719,291=>576,292=>785,293=>580,294=>785,295=>580,296=>355, +297=>288,298=>355,299=>288,300=>355,301=>288,302=>355,303=>288,304=>355,305=>288,306=>721, +307=>479,308=>360,309=>279,310=>672,311=>545,312=>545,313=>598,314=>288,315=>598,316=>288, +317=>598,318=>288,319=>598,320=>288,321=>602,322=>292,323=>787,324=>580,325=>787,326=>580, +327=>787,328=>580,329=>779,330=>758,331=>580,332=>738,333=>542,334=>738,335=>542,336=>738, +337=>542,340=>677,341=>430,342=>677,343=>430,344=>677,345=>430,346=>616,347=>461,348=>616, +349=>461,350=>616,351=>461,354=>600,355=>361,356=>600,357=>361,358=>600,359=>361,360=>758, +361=>580,362=>758,363=>580,364=>758,365=>580,366=>758,367=>580,368=>758,369=>580,370=>758, +371=>580,372=>925,373=>770,374=>594,375=>508,377=>625,378=>474,379=>625,380=>474,383=>333, +384=>576,385=>661,386=>661,387=>576,388=>661,389=>576,390=>688,391=>688,392=>504,393=>726, +394=>721,395=>661,396=>576,397=>542,398=>657,399=>738,400=>561,401=>624,403=>719,404=>641, +405=>839,406=>355,407=>355,408=>672,409=>545,410=>288,411=>570,412=>853,413=>787,414=>580, +415=>738,416=>738,417=>542,418=>936,419=>726,420=>605,421=>576,422=>677,423=>616,424=>461, +425=>636,426=>292,427=>361,428=>600,429=>361,430=>600,431=>758,432=>580,433=>746,434=>684, +435=>664,436=>596,437=>625,438=>474,439=>508,440=>508,441=>508,443=>572,444=>618,445=>508, +446=>482,447=>571,448=>265,449=>443,450=>413,451=>265,452=>1347,453=>1195,454=>1050,455=>958, +456=>876,457=>567,458=>1148,459=>1066,460=>858,461=>650,462=>536,463=>355,464=>288,465=>738, +466=>542,467=>758,468=>580,469=>758,470=>580,471=>758,472=>580,473=>758,474=>580,475=>758, +476=>580,477=>532,478=>650,479=>536,480=>650,481=>536,482=>901,483=>846,484=>763,485=>576, +486=>719,487=>576,488=>672,489=>545,490=>738,491=>542,492=>738,493=>542,494=>508,495=>508, +496=>288,497=>1347,498=>1195,499=>1050,500=>719,501=>576,502=>1038,503=>636,504=>787,505=>580, +506=>650,507=>536,508=>901,509=>846,510=>738,511=>542,512=>650,513=>536,514=>650,515=>536, +516=>657,517=>532,518=>657,519=>532,520=>355,521=>288,522=>355,523=>288,524=>738,525=>542, +526=>738,527=>542,528=>677,529=>430,530=>677,531=>430,532=>758,533=>580,534=>758,535=>580, +536=>616,537=>461,538=>600,539=>361,540=>564,541=>469,542=>785,543=>580,544=>758,545=>732, +546=>527,547=>497,548=>625,549=>474,550=>650,551=>536,552=>657,553=>532,554=>738,555=>542, +556=>738,557=>542,558=>738,559=>542,560=>738,561=>542,562=>594,563=>508,564=>450,565=>748, +566=>444,567=>279,568=>864,569=>864,570=>650,571=>688,572=>504,573=>598,574=>600,575=>461, +576=>474,577=>525,578=>417,579=>661,580=>758,581=>650,582=>657,583=>532,584=>360,585=>283, +586=>704,587=>576,588=>677,589=>430,590=>594,591=>508,592=>536,593=>576,594=>576,595=>576, +596=>504,597=>504,598=>582,599=>614,600=>532,601=>532,602=>759,603=>466,604=>458,605=>695, +606=>552,607=>283,608=>615,609=>576,610=>489,611=>641,612=>507,613=>580,614=>580,615=>580, +616=>288,617=>353,618=>288,619=>342,620=>409,621=>326,622=>633,623=>853,624=>853,625=>853, +626=>579,627=>624,628=>581,629=>542,630=>711,631=>583,632=>542,633=>451,634=>451,635=>496, +636=>430,637=>430,638=>407,639=>407,640=>534,641=>534,642=>461,643=>244,644=>333,645=>438, +646=>292,647=>361,648=>361,649=>580,650=>558,651=>547,652=>508,653=>770,654=>508,655=>589, +656=>537,657=>504,658=>508,659=>504,660=>482,661=>482,662=>482,663=>461,664=>738,665=>506, +666=>552,667=>588,668=>600,669=>329,670=>545,671=>581,672=>615,673=>482,674=>482,675=>896, +676=>930,677=>898,678=>728,679=>538,680=>704,681=>804,682=>582,683=>608,684=>538,685=>398, +686=>703,687=>690,688=>389,689=>387,690=>237,691=>312,692=>312,693=>387,694=>352,695=>527, +696=>381,697=>250,699=>286,700=>286,701=>286,702=>276,703=>276,704=>252,705=>252,711=>450, +712=>247,713=>450,716=>247,717=>450,720=>303,721=>303,722=>276,723=>276,726=>295,728=>450, +729=>450,730=>450,731=>450,733=>450,734=>375,736=>402,737=>218,738=>303,739=>381,740=>252, +741=>444,742=>444,743=>444,744=>444,745=>444,750=>435,768=>0,769=>0,770=>0,771=>0, +772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0, +782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0, +792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0, +802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0, +812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0, +822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0, +835=>0,847=>0,856=>0,865=>0,880=>666,881=>478,884=>250,885=>250,890=>450,891=>504, +892=>504,893=>504,894=>303,900=>450,901=>450,902=>650,903=>286,904=>810,905=>935,906=>505, +908=>751,910=>808,911=>767,912=>353,913=>650,914=>661,915=>624,916=>650,917=>657,918=>625, +919=>785,920=>738,921=>355,922=>672,923=>650,924=>921,925=>787,926=>633,927=>738,928=>785, +929=>605,931=>636,932=>600,933=>594,934=>738,935=>641,936=>789,937=>746,938=>355,939=>594, +940=>607,941=>466,942=>539,943=>353,944=>547,945=>607,946=>520,947=>538,948=>542,949=>466, +950=>488,951=>539,952=>542,953=>353,954=>563,955=>570,956=>584,957=>547,958=>496,959=>542, +960=>591,961=>529,962=>504,963=>614,964=>498,965=>547,966=>630,967=>545,968=>706,969=>734, +970=>353,971=>547,972=>542,973=>547,974=>734,976=>524,977=>643,978=>618,979=>787,980=>618, +981=>613,982=>734,983=>561,984=>738,985=>542,986=>688,987=>504,988=>624,989=>417,990=>531, +991=>593,992=>704,993=>519,1008=>561,1009=>529,1010=>504,1011=>279,1012=>738,1013=>504,1014=>504, +1015=>608,1016=>576,1017=>688,1018=>921,1019=>637,1020=>529,1021=>688,1022=>688,1023=>688,1024=>657, +1025=>657,1026=>719,1027=>596,1028=>688,1029=>616,1030=>355,1031=>355,1032=>360,1033=>976,1034=>1006, +1035=>785,1036=>696,1037=>785,1038=>650,1039=>785,1040=>681,1041=>661,1042=>661,1043=>596,1044=>731, +1045=>657,1046=>1011,1047=>561,1048=>785,1049=>785,1050=>696,1051=>751,1052=>921,1053=>785,1054=>738, +1055=>785,1056=>605,1057=>688,1058=>600,1059=>650,1060=>747,1061=>641,1062=>785,1063=>695,1064=>1027, +1065=>1027,1066=>715,1067=>885,1068=>606,1069=>688,1070=>1074,1071=>727,1072=>536,1073=>542,1074=>506, +1075=>471,1076=>554,1077=>532,1078=>828,1079=>491,1080=>600,1081=>600,1082=>563,1083=>571,1084=>700, +1085=>600,1086=>542,1087=>600,1088=>576,1089=>504,1090=>498,1091=>529,1092=>704,1093=>507,1094=>579, +1095=>595,1096=>836,1097=>836,1098=>572,1099=>716,1100=>490,1101=>504,1102=>783,1103=>567,1104=>532, +1105=>532,1106=>561,1107=>471,1108=>504,1109=>461,1110=>288,1111=>288,1112=>279,1113=>759,1114=>774, +1115=>580,1116=>563,1117=>600,1118=>529,1119=>590,1122=>686,1123=>542,1124=>1016,1125=>750,1130=>1011, +1131=>828,1136=>849,1137=>812,1138=>738,1139=>497,1140=>773,1141=>610,1164=>636,1165=>490,1168=>604, +1169=>476,1170=>596,1171=>471,1172=>655,1173=>552,1174=>1011,1175=>828,1176=>572,1177=>483,1178=>696, +1179=>545,1182=>696,1183=>563,1184=>801,1185=>645,1186=>785,1187=>577,1188=>1025,1189=>767,1190=>1084, +1191=>847,1194=>688,1195=>504,1196=>600,1197=>498,1198=>594,1199=>508,1200=>594,1201=>508,1202=>641, +1203=>507,1204=>856,1205=>659,1206=>674,1207=>621,1210=>674,1211=>580,1216=>355,1217=>1011,1218=>828, +1219=>672,1220=>545,1223=>785,1224=>600,1227=>674,1228=>600,1231=>288,1232=>681,1233=>536,1234=>681, +1235=>536,1236=>901,1237=>846,1238=>657,1239=>532,1240=>738,1241=>532,1242=>738,1243=>532,1244=>1011, +1245=>828,1246=>561,1247=>491,1248=>508,1249=>508,1250=>785,1251=>600,1252=>785,1253=>600,1254=>738, +1255=>542,1256=>738,1257=>542,1258=>738,1259=>542,1260=>688,1261=>504,1262=>650,1263=>529,1264=>650, +1265=>529,1266=>650,1267=>529,1268=>695,1269=>595,1270=>596,1271=>471,1272=>885,1273=>716,1296=>561, +1297=>491,1298=>751,1299=>571,1300=>1078,1301=>827,1306=>738,1307=>576,1308=>925,1309=>770,4256=>650, +4257=>765,4258=>745,4259=>773,4260=>659,4261=>883,4262=>824,4263=>991,4264=>510,4265=>675,4266=>866, +4267=>847,4268=>668,4269=>967,4270=>807,4271=>746,4272=>936,4273=>660,4274=>602,4275=>914,4276=>843, +4277=>917,4278=>658,4279=>659,4280=>659,4281=>660,4282=>791,4283=>843,4284=>642,4285=>679,4286=>660, +4287=>862,4288=>900,4289=>632,4290=>777,4291=>660,4292=>753,4293=>855,4304=>486,4305=>514,4306=>530, +4307=>750,4308=>505,4309=>501,4310=>556,4311=>774,4312=>503,4313=>491,4314=>959,4315=>527,4316=>527, +4317=>743,4318=>513,4319=>522,4320=>741,4321=>546,4322=>673,4323=>628,4324=>733,4325=>526,4326=>772, +4327=>511,4328=>534,4329=>527,4330=>607,4331=>528,4332=>523,4333=>518,4334=>550,4335=>615,4336=>514, +4337=>542,4338=>514,4339=>514,4340=>513,4341=>584,4342=>797,4343=>563,4344=>523,4345=>557,4346=>514, +4347=>393,4348=>318,7426=>846,7432=>458,7433=>288,7444=>890,7446=>542,7447=>542,7453=>663,7454=>853, +7455=>853,7468=>409,7469=>567,7470=>417,7472=>454,7473=>413,7474=>413,7475=>453,7476=>494,7477=>224, +7478=>227,7479=>423,7480=>376,7481=>580,7482=>496,7483=>496,7484=>464,7486=>381,7487=>426,7488=>378, +7489=>478,7490=>583,7491=>347,7492=>347,7493=>360,7494=>556,7495=>360,7496=>360,7497=>348,7498=>348, +7499=>306,7500=>306,7501=>360,7502=>157,7503=>328,7504=>552,7505=>359,7506=>347,7507=>312,7508=>347, +7509=>347,7510=>360,7511=>222,7512=>359,7513=>417,7514=>552,7515=>335,7522=>181,7523=>312,7524=>359, +7525=>335,7543=>576,7544=>494,7547=>334,7557=>288,7579=>360,7580=>312,7581=>312,7582=>347,7583=>306, +7584=>199,7585=>206,7586=>360,7587=>359,7588=>210,7589=>219,7590=>210,7591=>210,7592=>207,7593=>158, +7594=>157,7595=>330,7596=>552,7597=>552,7598=>366,7599=>364,7600=>359,7601=>347,7602=>347,7603=>295, +7604=>190,7605=>222,7606=>359,7607=>350,7609=>338,7610=>335,7611=>297,7612=>297,7613=>297,7614=>327, +7615=>347,7620=>0,7621=>0,7622=>0,7623=>0,7624=>0,7625=>0,7680=>650,7681=>536,7682=>661, +7683=>576,7684=>661,7685=>576,7686=>661,7687=>576,7688=>688,7689=>504,7690=>721,7691=>576,7692=>721, +7693=>576,7694=>721,7695=>576,7696=>721,7697=>576,7698=>721,7699=>576,7700=>657,7701=>532,7702=>657, +7703=>532,7704=>657,7705=>532,7706=>657,7707=>532,7708=>657,7709=>532,7710=>624,7711=>333,7712=>719, +7713=>576,7714=>785,7715=>580,7716=>785,7717=>580,7718=>785,7719=>580,7720=>785,7721=>580,7722=>785, +7723=>580,7724=>355,7725=>288,7726=>355,7727=>288,7728=>672,7729=>545,7730=>672,7731=>545,7732=>672, +7733=>545,7734=>598,7735=>288,7736=>598,7737=>288,7738=>598,7739=>288,7740=>598,7741=>288,7742=>921, +7743=>853,7744=>921,7745=>853,7746=>921,7747=>853,7748=>787,7749=>580,7750=>787,7751=>580,7752=>787, +7753=>580,7754=>787,7755=>580,7756=>738,7757=>542,7758=>738,7759=>542,7760=>738,7761=>542,7762=>738, +7763=>542,7764=>605,7765=>576,7766=>605,7767=>576,7768=>677,7769=>430,7770=>677,7771=>430,7772=>677, +7773=>430,7774=>677,7775=>430,7776=>616,7777=>461,7778=>616,7779=>461,7780=>616,7781=>461,7782=>616, +7783=>469,7784=>616,7785=>461,7786=>600,7787=>361,7788=>600,7789=>361,7790=>600,7791=>361,7792=>600, +7793=>361,7794=>758,7795=>580,7796=>758,7797=>580,7798=>758,7799=>580,7800=>758,7801=>580,7802=>758, +7803=>580,7804=>650,7805=>508,7806=>650,7807=>508,7808=>925,7809=>770,7810=>925,7811=>770,7812=>925, +7813=>770,7814=>925,7815=>770,7816=>925,7817=>770,7818=>641,7819=>507,7820=>641,7821=>507,7822=>594, +7823=>508,7824=>625,7825=>474,7826=>625,7827=>474,7828=>625,7829=>474,7830=>580,7831=>361,7832=>770, +7833=>508,7834=>813,7835=>333,7838=>746,7839=>542,7840=>650,7841=>536,7842=>650,7843=>536,7844=>650, +7845=>551,7846=>650,7847=>551,7848=>650,7849=>551,7850=>650,7851=>551,7852=>650,7853=>536,7854=>650, +7855=>536,7856=>650,7857=>536,7858=>650,7859=>536,7860=>650,7861=>536,7862=>650,7863=>536,7864=>657, +7865=>532,7866=>657,7867=>532,7868=>657,7869=>532,7870=>657,7871=>554,7872=>657,7873=>554,7874=>657, +7875=>554,7876=>657,7877=>554,7878=>657,7879=>532,7880=>355,7881=>288,7882=>355,7883=>288,7884=>738, +7885=>542,7886=>738,7887=>542,7888=>738,7889=>550,7890=>738,7891=>550,7892=>738,7893=>550,7894=>738, +7895=>550,7896=>738,7897=>542,7898=>738,7899=>542,7900=>738,7901=>542,7902=>738,7903=>542,7904=>738, +7905=>542,7906=>738,7907=>542,7908=>758,7909=>580,7910=>758,7911=>580,7912=>758,7913=>580,7914=>758, +7915=>580,7916=>758,7917=>580,7918=>758,7919=>580,7920=>758,7921=>580,7922=>594,7923=>508,7924=>594, +7925=>508,7926=>594,7927=>508,7928=>594,7929=>508,7936=>607,7937=>607,7938=>607,7939=>607,7940=>607, +7941=>607,7942=>607,7943=>607,7944=>650,7945=>650,7946=>782,7947=>782,7948=>660,7949=>687,7950=>650, +7951=>650,7952=>483,7953=>483,7954=>483,7955=>483,7956=>483,7957=>483,7960=>768,7961=>757,7962=>960, +7963=>969,7964=>907,7965=>931,7968=>539,7969=>539,7970=>539,7971=>539,7972=>539,7973=>539,7974=>539, +7975=>539,7976=>898,7977=>893,7978=>1090,7979=>1101,7980=>1043,7981=>1064,7982=>988,7983=>985,7984=>353, +7985=>353,7986=>353,7987=>353,7988=>353,7989=>353,7990=>353,7991=>353,7992=>469,7993=>461,7994=>661, +7995=>664,7996=>611,7997=>635,7998=>561,7999=>553,8000=>542,8001=>542,8002=>542,8003=>542,8004=>542, +8005=>542,8008=>738,8009=>773,8010=>1008,8011=>1015,8012=>843,8013=>867,8016=>547,8017=>547,8018=>547, +8019=>547,8020=>547,8021=>547,8022=>547,8023=>547,8025=>765,8027=>971,8029=>939,8031=>857,8032=>734, +8033=>734,8034=>734,8035=>734,8036=>734,8037=>734,8038=>734,8039=>734,8040=>746,8041=>783,8042=>1018, +8043=>1023,8044=>852,8045=>878,8046=>844,8047=>873,8048=>607,8049=>607,8050=>483,8051=>483,8052=>539, +8053=>539,8054=>353,8055=>353,8056=>542,8057=>542,8058=>547,8059=>547,8060=>734,8061=>734,8064=>607, +8065=>607,8066=>607,8067=>607,8068=>607,8069=>607,8070=>607,8071=>607,8072=>650,8073=>650,8074=>782, +8075=>782,8076=>660,8077=>687,8078=>650,8079=>650,8080=>539,8081=>539,8082=>539,8083=>539,8084=>539, +8085=>539,8086=>539,8087=>539,8088=>898,8089=>893,8090=>1090,8091=>1101,8092=>1043,8093=>1064,8094=>988, +8095=>985,8096=>734,8097=>734,8098=>734,8099=>734,8100=>734,8101=>734,8102=>734,8103=>734,8104=>746, +8105=>783,8106=>1018,8107=>1023,8108=>852,8109=>878,8110=>844,8111=>873,8112=>607,8113=>607,8114=>607, +8115=>607,8116=>607,8118=>607,8119=>607,8120=>650,8121=>650,8122=>650,8123=>650,8124=>650,8125=>450, +8126=>450,8127=>450,8128=>450,8129=>450,8130=>539,8131=>539,8132=>539,8134=>539,8135=>539,8136=>820, +8137=>810,8138=>956,8139=>935,8140=>785,8141=>450,8142=>450,8143=>450,8144=>353,8145=>353,8146=>353, +8147=>353,8150=>353,8151=>353,8152=>355,8153=>355,8154=>529,8155=>505,8157=>450,8158=>450,8159=>450, +8160=>547,8161=>547,8162=>547,8163=>547,8164=>529,8165=>529,8166=>547,8167=>547,8168=>594,8169=>594, +8170=>829,8171=>808,8172=>711,8173=>450,8174=>450,8175=>450,8178=>734,8179=>734,8180=>734,8182=>734, +8183=>734,8184=>865,8185=>751,8186=>886,8187=>767,8188=>746,8189=>450,8190=>450,8192=>450,8193=>900, +8194=>450,8195=>900,8196=>296,8197=>225,8198=>150,8199=>572,8200=>286,8201=>180,8202=>89,8203=>0, +8204=>0,8205=>0,8206=>0,8207=>0,8208=>304,8209=>304,8210=>572,8213=>900,8214=>450,8215=>450, +8219=>286,8223=>460,8227=>531,8228=>300,8229=>600,8234=>0,8235=>0,8236=>0,8237=>0,8238=>0, +8239=>180,8241=>1560,8242=>204,8243=>336,8244=>468,8245=>204,8246=>336,8247=>468,8248=>305,8252=>475, +8253=>482,8254=>450,8258=>900,8260=>150,8261=>351,8262=>351,8263=>878,8264=>678,8265=>678,8267=>572, +8268=>450,8269=>450,8270=>450,8271=>303,8273=>450,8274=>404,8275=>900,8279=>597,8287=>200,8288=>0, +8289=>0,8290=>0,8291=>0,8292=>0,8298=>0,8299=>0,8300=>0,8301=>0,8302=>0,8303=>0, +8304=>360,8305=>181,8308=>360,8309=>360,8310=>360,8311=>360,8312=>360,8313=>360,8314=>475,8315=>475, +8316=>475,8317=>221,8318=>221,8319=>389,8320=>360,8321=>360,8322=>360,8323=>360,8324=>360,8325=>360, +8326=>360,8327=>360,8328=>360,8329=>360,8330=>475,8331=>475,8332=>475,8333=>221,8334=>221,8336=>347, +8337=>348,8338=>347,8339=>381,8340=>348,8358=>594,8367=>951,8369=>635,8372=>702,8373=>572,8377=>572, +8450=>716,8451=>1006,8457=>942,8461=>850,8462=>580,8463=>580,8469=>822,8470=>852,8473=>677,8474=>784, +8477=>748,8484=>657,8486=>746,8487=>746,8490=>672,8491=>650,8508=>659,8509=>594,8510=>639,8511=>850, +8512=>642,8513=>697,8514=>501,8515=>501,8516=>549,8517=>780,8518=>629,8519=>572,8520=>342,8521=>325, +8523=>801,8528=>872,8529=>872,8530=>1233,8531=>872,8532=>872,8533=>872,8534=>872,8535=>872,8536=>872, +8537=>872,8538=>872,8539=>872,8540=>872,8541=>872,8542=>872,8543=>511,8544=>355,8545=>531,8546=>707, +8547=>870,8548=>650,8549=>883,8550=>1059,8551=>1234,8552=>838,8553=>641,8554=>839,8555=>1015,8556=>598, +8557=>688,8558=>721,8559=>921,8560=>288,8561=>576,8562=>863,8563=>796,8564=>508,8565=>796,8566=>1084, +8567=>1372,8568=>795,8569=>507,8570=>795,8571=>1083,8572=>288,8573=>504,8574=>576,8575=>853,8576=>1085, +8577=>721,8578=>1085,8579=>688,8580=>504,8581=>688,8585=>872,8592=>754,8593=>754,8594=>754,8595=>754, +8596=>754,8597=>754,8598=>754,8599=>754,8600=>754,8601=>754,8602=>754,8603=>754,8604=>754,8605=>754, +8606=>754,8607=>754,8608=>754,8609=>754,8610=>754,8611=>754,8612=>754,8613=>754,8614=>754,8615=>754, +8616=>754,8617=>754,8618=>754,8619=>754,8620=>754,8621=>754,8622=>754,8623=>754,8624=>754,8625=>754, +8626=>754,8627=>754,8628=>754,8629=>754,8630=>754,8631=>754,8632=>754,8633=>754,8634=>754,8635=>754, +8636=>754,8637=>754,8638=>754,8639=>754,8640=>754,8641=>754,8642=>754,8643=>754,8644=>754,8645=>754, +8646=>754,8647=>754,8648=>754,8649=>754,8650=>754,8651=>754,8652=>754,8653=>754,8654=>754,8655=>754, +8656=>754,8657=>754,8658=>754,8659=>754,8660=>754,8661=>754,8662=>754,8663=>754,8664=>754,8665=>754, +8666=>754,8667=>754,8668=>754,8669=>754,8670=>754,8671=>754,8672=>754,8673=>754,8674=>754,8675=>754, +8676=>754,8677=>754,8678=>754,8679=>754,8680=>754,8681=>754,8682=>754,8683=>754,8684=>754,8685=>754, +8686=>754,8687=>754,8688=>754,8689=>754,8690=>754,8691=>754,8692=>754,8693=>754,8694=>754,8695=>754, +8696=>754,8697=>754,8698=>754,8699=>754,8700=>754,8701=>754,8702=>754,8703=>754,8704=>543,8706=>465, +8707=>488,8708=>488,8710=>628,8711=>628,8712=>666,8713=>666,8715=>666,8716=>666,8719=>716,8720=>716, +8721=>642,8722=>754,8723=>754,8724=>754,8725=>303,8727=>611,8728=>441,8729=>441,8730=>573,8731=>573, +8732=>573,8733=>609,8734=>750,8735=>754,8736=>754,8739=>262,8740=>431,8741=>416,8742=>570,8743=>659, +8744=>659,8745=>754,8746=>754,8747=>469,8748=>766,8749=>1063,8760=>754,8761=>754,8762=>754,8763=>754, +8764=>754,8765=>754,8770=>754,8771=>754,8776=>754,8784=>754,8785=>754,8786=>754,8787=>754,8788=>930, +8789=>930,8800=>754,8801=>754,8804=>754,8805=>754,8834=>754,8835=>754,8836=>754,8837=>754,8838=>754, +8839=>754,8844=>754,8845=>754,8846=>754,8847=>761,8848=>761,8849=>761,8850=>761,8851=>754,8852=>754, +8853=>754,8854=>754,8855=>754,8856=>754,8857=>754,8858=>754,8859=>754,8860=>754,8861=>754,8862=>754, +8863=>754,8864=>754,8865=>754,8866=>773,8867=>773,8868=>846,8869=>846,8870=>510,8871=>510,8872=>773, +8873=>773,8874=>773,8875=>927,8876=>773,8877=>773,8878=>773,8879=>927,8901=>308,8962=>687,8968=>351, +8969=>351,8970=>351,8971=>351,8976=>754,8977=>461,8984=>900,8985=>754,8992=>469,8993=>469,8997=>900, +9000=>1299,9085=>827,9115=>450,9116=>450,9117=>450,9118=>450,9119=>450,9120=>450,9121=>450,9122=>450, +9123=>450,9124=>450,9125=>450,9126=>450,9127=>675,9128=>675,9129=>675,9130=>675,9131=>675,9132=>675, +9133=>675,9134=>469,9167=>850,9251=>687,9472=>542,9473=>542,9474=>542,9475=>542,9476=>542,9477=>542, +9478=>542,9479=>542,9480=>542,9481=>542,9482=>542,9483=>542,9484=>542,9485=>542,9486=>542,9487=>542, +9488=>542,9489=>542,9490=>542,9491=>542,9492=>542,9493=>542,9494=>542,9495=>542,9496=>542,9497=>542, +9498=>542,9499=>542,9500=>542,9501=>542,9502=>542,9503=>542,9504=>542,9505=>542,9506=>542,9507=>542, +9508=>542,9509=>542,9510=>542,9511=>542,9512=>542,9513=>542,9514=>542,9515=>542,9516=>542,9517=>542, +9518=>542,9519=>542,9520=>542,9521=>542,9522=>542,9523=>542,9524=>542,9525=>542,9526=>542,9527=>542, +9528=>542,9529=>542,9530=>542,9531=>542,9532=>542,9533=>542,9534=>542,9535=>542,9536=>542,9537=>542, +9538=>542,9539=>542,9540=>542,9541=>542,9542=>542,9543=>542,9544=>542,9545=>542,9546=>542,9547=>542, +9548=>542,9549=>542,9550=>542,9551=>542,9552=>542,9553=>542,9554=>542,9555=>542,9556=>542,9557=>542, +9558=>542,9559=>542,9560=>542,9561=>542,9562=>542,9563=>542,9564=>542,9565=>542,9566=>542,9567=>542, +9568=>542,9569=>542,9570=>542,9571=>542,9572=>542,9573=>542,9574=>542,9575=>542,9576=>542,9577=>542, +9578=>542,9579=>542,9580=>542,9581=>542,9582=>542,9583=>542,9584=>542,9585=>542,9586=>542,9587=>542, +9588=>542,9589=>542,9590=>542,9591=>542,9592=>542,9593=>542,9594=>542,9595=>542,9596=>542,9597=>542, +9598=>542,9599=>542,9600=>692,9601=>692,9602=>692,9603=>692,9604=>692,9605=>692,9606=>692,9607=>692, +9608=>692,9609=>692,9610=>692,9611=>692,9612=>692,9613=>692,9614=>692,9615=>692,9616=>692,9617=>692, +9618=>692,9619=>692,9620=>692,9621=>692,9622=>692,9623=>692,9624=>692,9625=>692,9626=>692,9627=>692, +9628=>692,9629=>692,9630=>692,9631=>692,9632=>850,9633=>850,9634=>850,9635=>850,9636=>850,9637=>850, +9638=>850,9639=>850,9640=>850,9641=>850,9642=>610,9643=>610,9644=>850,9645=>850,9646=>495,9647=>495, +9648=>692,9649=>692,9650=>692,9651=>692,9652=>452,9653=>452,9654=>692,9655=>692,9656=>452,9657=>452, +9658=>692,9659=>692,9660=>692,9661=>692,9662=>452,9663=>452,9664=>692,9665=>692,9666=>452,9667=>452, +9668=>692,9669=>692,9670=>692,9671=>692,9672=>692,9673=>785,9674=>444,9675=>785,9676=>785,9677=>785, +9678=>785,9679=>785,9680=>785,9681=>785,9682=>785,9683=>785,9684=>785,9685=>785,9686=>474,9687=>474, +9688=>712,9689=>873,9690=>873,9691=>873,9692=>348,9693=>348,9694=>348,9695=>348,9696=>785,9697=>785, +9698=>692,9699=>692,9700=>692,9701=>692,9702=>531,9703=>850,9704=>850,9705=>850,9706=>850,9707=>850, +9708=>692,9709=>692,9710=>692,9711=>1007,9712=>850,9713=>850,9714=>850,9715=>850,9716=>785,9717=>785, +9718=>785,9719=>785,9720=>692,9721=>692,9722=>692,9723=>747,9724=>747,9725=>659,9726=>659,9727=>692, +9728=>807,9784=>807,9785=>807,9786=>807,9787=>807,9788=>807,9791=>552,9792=>658,9793=>658,9794=>807, +9795=>807,9796=>807,9797=>807,9798=>807,9799=>807,9824=>807,9825=>807,9826=>807,9827=>807,9828=>807, +9829=>807,9830=>807,9831=>807,9833=>424,9834=>574,9835=>807,9836=>807,9837=>424,9838=>321,9839=>435, +10145=>754,10181=>351,10182=>351,10208=>444,10216=>351,10217=>351,10224=>754,10225=>754,10226=>754,10227=>754, +10228=>930,10229=>1290,10230=>1290,10231=>1290,10232=>1290,10233=>1290,10234=>1290,10235=>1290,10236=>1290,10237=>1290, +10238=>1290,10239=>1290,10240=>659,10241=>659,10242=>659,10243=>659,10244=>659,10245=>659,10246=>659,10247=>659, +10248=>659,10249=>659,10250=>659,10251=>659,10252=>659,10253=>659,10254=>659,10255=>659,10256=>659,10257=>659, +10258=>659,10259=>659,10260=>659,10261=>659,10262=>659,10263=>659,10264=>659,10265=>659,10266=>659,10267=>659, +10268=>659,10269=>659,10270=>659,10271=>659,10272=>659,10273=>659,10274=>659,10275=>659,10276=>659,10277=>659, +10278=>659,10279=>659,10280=>659,10281=>659,10282=>659,10283=>659,10284=>659,10285=>659,10286=>659,10287=>659, +10288=>659,10289=>659,10290=>659,10291=>659,10292=>659,10293=>659,10294=>659,10295=>659,10296=>659,10297=>659, +10298=>659,10299=>659,10300=>659,10301=>659,10302=>659,10303=>659,10304=>659,10305=>659,10306=>659,10307=>659, +10308=>659,10309=>659,10310=>659,10311=>659,10312=>659,10313=>659,10314=>659,10315=>659,10316=>659,10317=>659, +10318=>659,10319=>659,10320=>659,10321=>659,10322=>659,10323=>659,10324=>659,10325=>659,10326=>659,10327=>659, +10328=>659,10329=>659,10330=>659,10331=>659,10332=>659,10333=>659,10334=>659,10335=>659,10336=>659,10337=>659, +10338=>659,10339=>659,10340=>659,10341=>659,10342=>659,10343=>659,10344=>659,10345=>659,10346=>659,10347=>659, +10348=>659,10349=>659,10350=>659,10351=>659,10352=>659,10353=>659,10354=>659,10355=>659,10356=>659,10357=>659, +10358=>659,10359=>659,10360=>659,10361=>659,10362=>659,10363=>659,10364=>659,10365=>659,10366=>659,10367=>659, +10368=>659,10369=>659,10370=>659,10371=>659,10372=>659,10373=>659,10374=>659,10375=>659,10376=>659,10377=>659, +10378=>659,10379=>659,10380=>659,10381=>659,10382=>659,10383=>659,10384=>659,10385=>659,10386=>659,10387=>659, +10388=>659,10389=>659,10390=>659,10391=>659,10392=>659,10393=>659,10394=>659,10395=>659,10396=>659,10397=>659, +10398=>659,10399=>659,10400=>659,10401=>659,10402=>659,10403=>659,10404=>659,10405=>659,10406=>659,10407=>659, +10408=>659,10409=>659,10410=>659,10411=>659,10412=>659,10413=>659,10414=>659,10415=>659,10416=>659,10417=>659, +10418=>659,10419=>659,10420=>659,10421=>659,10422=>659,10423=>659,10424=>659,10425=>659,10426=>659,10427=>659, +10428=>659,10429=>659,10430=>659,10431=>659,10432=>659,10433=>659,10434=>659,10435=>659,10436=>659,10437=>659, +10438=>659,10439=>659,10440=>659,10441=>659,10442=>659,10443=>659,10444=>659,10445=>659,10446=>659,10447=>659, +10448=>659,10449=>659,10450=>659,10451=>659,10452=>659,10453=>659,10454=>659,10455=>659,10456=>659,10457=>659, +10458=>659,10459=>659,10460=>659,10461=>659,10462=>659,10463=>659,10464=>659,10465=>659,10466=>659,10467=>659, +10468=>659,10469=>659,10470=>659,10471=>659,10472=>659,10473=>659,10474=>659,10475=>659,10476=>659,10477=>659, +10478=>659,10479=>659,10480=>659,10481=>659,10482=>659,10483=>659,10484=>659,10485=>659,10486=>659,10487=>659, +10488=>659,10489=>659,10490=>659,10491=>659,10492=>659,10493=>659,10494=>659,10495=>659,10496=>754,10497=>754, +10498=>754,10499=>754,10500=>754,10501=>754,10502=>754,10503=>754,10504=>754,10505=>754,10506=>754,10507=>754, +10508=>754,10509=>754,10510=>754,10511=>754,10512=>754,10513=>754,10514=>754,10515=>754,10516=>754,10517=>754, +10518=>754,10519=>754,10520=>754,10521=>754,10522=>754,10523=>754,10524=>754,10525=>754,10526=>754,10527=>754, +10528=>754,10529=>754,10530=>754,10531=>754,10532=>754,10533=>754,10534=>754,10535=>754,10536=>754,10537=>754, +10538=>754,10539=>754,10540=>754,10541=>754,10542=>754,10543=>754,10544=>754,10545=>754,10546=>754,10547=>754, +10548=>754,10549=>754,10550=>754,10551=>754,10552=>754,10553=>754,10554=>754,10555=>754,10556=>754,10557=>754, +10558=>754,10559=>754,10560=>754,10561=>754,10562=>754,10563=>754,10564=>754,10565=>754,10566=>754,10567=>754, +10568=>754,10569=>754,10570=>754,10571=>754,10572=>754,10573=>754,10574=>754,10575=>754,10576=>754,10577=>754, +10578=>754,10579=>754,10580=>754,10581=>754,10582=>754,10583=>754,10584=>754,10585=>754,10586=>754,10587=>754, +10588=>754,10589=>754,10590=>754,10591=>754,10592=>754,10593=>754,10594=>754,10595=>754,10596=>754,10597=>754, +10598=>754,10599=>754,10600=>754,10601=>754,10602=>754,10603=>754,10604=>754,10605=>754,10606=>754,10607=>754, +10608=>754,10609=>754,10610=>754,10611=>754,10612=>754,10613=>754,10614=>754,10615=>883,10616=>754,10617=>754, +10618=>886,10619=>754,10620=>754,10621=>754,10622=>754,10623=>754,10731=>444,10764=>1361,10765=>469,10766=>469, +10799=>754,11008=>754,11009=>754,11010=>754,11011=>754,11012=>754,11013=>754,11014=>754,11015=>754,11016=>754, +11017=>754,11018=>754,11019=>754,11020=>754,11021=>754,11022=>754,11023=>754,11024=>754,11025=>754,11026=>850, +11027=>850,11028=>850,11029=>850,11030=>692,11031=>692,11032=>692,11033=>692,11034=>850,11364=>677,11367=>785, +11368=>580,11369=>672,11370=>545,11371=>625,11372=>474,11373=>704,11374=>921,11375=>650,11376=>704,11377=>596, +11378=>1017,11379=>845,11381=>666,11382=>500,11383=>630,11385=>451,11386=>542,11388=>237,11389=>409,11390=>616, +11391=>625,11520=>695,11521=>571,11522=>569,11523=>592,11524=>568,11525=>866,11526=>680,11527=>864,11528=>555, +11529=>581,11530=>866,11531=>568,11532=>581,11533=>866,11534=>580,11535=>779,11536=>865,11537=>580,11538=>580, +11539=>863,11540=>851,11541=>777,11542=>580,11543=>581,11544=>580,11545=>584,11546=>619,11547=>571,11548=>883, +11549=>613,11550=>608,11551=>766,11552=>861,11553=>569,11554=>580,11555=>582,11556=>674,11557=>822,11800=>482, +11810=>351,11811=>351,11812=>351,11813=>351,11822=>482,42564=>616,42565=>461,42566=>355,42567=>353,42576=>994, +42577=>799,42580=>1074,42581=>783,42582=>1025,42583=>809,42760=>444,42761=>444,42762=>444,42763=>444,42764=>444, +42765=>444,42766=>444,42767=>444,42768=>444,42769=>444,42770=>444,42771=>444,42772=>444,42773=>444,42774=>444, +42779=>332,42780=>332,42781=>228,42782=>228,42783=>228,42813=>737,42891=>361,42892=>247,42893=>695,62464=>588, +62465=>598,62466=>642,62467=>853,62468=>598,62469=>593,62470=>652,62471=>888,62472=>598,62473=>598,62474=>1131, +62475=>614,62476=>613,62477=>857,62478=>598,62479=>613,62480=>898,62481=>671,62482=>718,62483=>672,62484=>850, +62485=>613,62486=>842,62487=>612,62488=>619,62489=>613,62490=>655,62491=>613,62492=>619,62493=>599,62494=>656, +62495=>795,62496=>598,62497=>635,62498=>599,62499=>598,62500=>598,62501=>649,62502=>865,62504=>813,63173=>542, +63185=>450,63188=>450,64256=>639,64257=>600,64258=>600,64259=>925,64260=>927,64261=>694,64262=>839,65024=>0, +65025=>0,65026=>0,65027=>0,65028=>0,65029=>0,65030=>0,65031=>0,65032=>0,65033=>0,65034=>0, +65035=>0,65036=>0,65037=>0,65038=>0,65039=>0,65529=>0,65530=>0,65531=>0,65532=>0,65533=>923); +$enc=''; +$diff=''; +$file='dejavuserifcondensed.z'; +$ctg='dejavuserifcondensed.ctg.z'; +$originalsize=304328; +// --- EOF --- --- /dev/null +++ b/tcpdf/fonts/dejavuserifcondensedb.php @@ -1,1 +1,309 @@ - +939,'Descent'=>-236,'CapHeight'=>4,'Flags'=>32,'FontBBox'=>'[-752 -389 1616 1145]','ItalicAngle'=>0,'StemV'=>120,'MissingWidth'=>540); +$up=-63; +$ut=44; +$dw=540; +$cw=array( +0=>540,32=>313,33=>395,34=>469,35=>754,36=>626,37=>855,38=>813,39=>275,40=>426, +41=>426,42=>470,43=>754,44=>313,45=>374,46=>313,47=>329,48=>626,49=>626,50=>626, +51=>626,52=>626,53=>626,54=>626,55=>626,56=>626,57=>626,58=>332,59=>332,60=>754, +61=>754,62=>754,63=>527,64=>900,65=>698,66=>760,67=>716,68=>780,69=>686,70=>639, +71=>769,72=>850,73=>421,74=>426,75=>782,76=>633,77=>996,78=>822,79=>784,80=>677, +81=>784,82=>748,83=>650,84=>669,85=>785,86=>698,87=>1011,88=>698,89=>642,90=>657, +91=>426,92=>329,93=>426,94=>754,95=>450,96=>450,97=>583,98=>629,99=>548,100=>629, +101=>572,102=>387,103=>629,104=>654,105=>342,106=>325,107=>624,108=>342,109=>952,110=>654, +111=>600,112=>629,113=>629,114=>474,115=>506,116=>416,117=>654,118=>523,119=>774,120=>536, +121=>523,122=>511,123=>579,124=>327,125=>579,126=>754,8364=>626,8218=>313,402=>387,8222=>518, +8230=>900,8224=>470,8225=>470,710=>450,8240=>1246,352=>650,8249=>360,338=>1062,381=>657,8216=>313, +8217=>313,8220=>518,8221=>518,8226=>575,8211=>450,8212=>900,732=>450,8482=>900,353=>506,8250=>360, +339=>925,382=>511,376=>642,160=>313,161=>395,162=>626,163=>626,164=>572,165=>626,166=>327, +167=>470,168=>450,169=>900,170=>438,171=>563,172=>754,173=>374,174=>900,175=>450,176=>450, +177=>754,178=>394,179=>394,180=>450,181=>659,182=>572,183=>313,184=>450,185=>394,186=>450, +187=>563,188=>938,189=>938,190=>938,191=>527,192=>698,193=>698,194=>698,195=>698,196=>698, +197=>698,198=>931,199=>716,200=>686,201=>686,202=>686,203=>686,204=>421,205=>421,206=>421, +207=>421,208=>787,209=>822,210=>784,211=>784,212=>784,213=>784,214=>784,215=>754,216=>784, +217=>785,218=>785,219=>785,220=>785,221=>642,222=>681,223=>684,224=>583,225=>583,226=>583, +227=>583,228=>583,229=>583,230=>877,231=>548,232=>572,233=>572,234=>572,235=>572,236=>342, +237=>342,238=>342,239=>342,240=>600,241=>654,242=>600,243=>600,244=>600,245=>600,246=>600, +247=>754,248=>600,249=>654,250=>654,251=>654,252=>654,253=>523,254=>629,255=>523,256=>698, +257=>583,258=>698,259=>583,260=>698,261=>583,262=>716,263=>548,264=>716,265=>548,266=>716, +267=>548,268=>716,269=>548,270=>780,271=>629,272=>787,273=>629,274=>686,275=>572,276=>686, +277=>572,278=>686,279=>572,280=>686,281=>572,282=>686,283=>572,284=>769,285=>629,286=>769, +287=>629,288=>769,289=>629,290=>769,291=>629,292=>850,293=>654,294=>850,295=>654,296=>421, +297=>342,298=>421,299=>342,300=>421,301=>342,302=>421,303=>342,304=>421,305=>342,306=>848, +307=>676,308=>426,309=>325,310=>782,311=>624,312=>624,313=>633,314=>342,315=>633,316=>342, +317=>633,318=>342,319=>633,320=>342,321=>639,322=>346,323=>822,324=>654,325=>822,326=>654, +327=>822,328=>654,329=>907,330=>785,331=>654,332=>784,333=>600,334=>784,335=>600,336=>784, +337=>600,340=>748,341=>474,342=>748,343=>474,344=>748,345=>474,346=>650,347=>506,348=>650, +349=>506,350=>650,351=>506,354=>669,355=>416,356=>669,357=>416,358=>669,359=>416,360=>785, +361=>654,362=>785,363=>654,364=>785,365=>654,366=>785,367=>654,368=>785,369=>654,370=>785, +371=>654,372=>1011,373=>774,374=>642,375=>523,377=>657,378=>511,379=>657,380=>511,383=>387, +384=>629,385=>760,386=>769,387=>629,388=>769,389=>629,390=>716,391=>716,392=>548,393=>787, +394=>780,395=>769,396=>629,397=>600,398=>686,399=>784,400=>649,401=>639,403=>769,404=>693, +405=>938,406=>421,407=>421,408=>782,409=>624,410=>342,411=>631,412=>952,413=>822,414=>654, +415=>784,416=>784,417=>600,418=>1080,419=>849,420=>677,421=>629,422=>748,423=>650,424=>506, +425=>636,426=>298,427=>416,428=>669,429=>416,430=>669,431=>785,432=>654,433=>801,434=>801, +435=>642,436=>637,437=>657,438=>511,439=>591,440=>591,441=>591,443=>626,444=>678,445=>511, +446=>482,447=>644,448=>265,449=>443,450=>413,451=>265,452=>1437,453=>1292,454=>1140,455=>1059, +456=>958,457=>667,458=>1248,459=>1148,460=>980,461=>698,462=>583,463=>421,464=>342,465=>784, +466=>600,467=>785,468=>654,469=>785,470=>654,471=>785,472=>654,473=>785,474=>654,475=>785, +476=>654,477=>572,478=>698,479=>583,480=>698,481=>583,482=>931,483=>877,484=>806,485=>629, +486=>769,487=>629,488=>782,489=>624,490=>784,491=>600,492=>784,493=>600,494=>591,495=>511, +496=>342,497=>1437,498=>1292,499=>1140,500=>769,501=>629,502=>1099,503=>708,504=>822,505=>654, +506=>698,507=>583,508=>931,509=>877,510=>784,511=>600,512=>698,513=>583,514=>698,515=>583, +516=>686,517=>572,518=>686,519=>572,520=>421,521=>342,522=>421,523=>342,524=>784,525=>600, +526=>784,527=>600,528=>748,529=>474,530=>748,531=>474,532=>785,533=>654,534=>785,535=>654, +536=>650,537=>506,538=>669,539=>416,540=>621,541=>546,542=>850,543=>654,544=>785,545=>711, +546=>632,547=>527,548=>657,549=>511,550=>698,551=>583,552=>686,553=>572,554=>784,555=>600, +556=>784,557=>600,558=>784,559=>600,560=>784,561=>600,562=>642,563=>523,564=>516,565=>830, +566=>508,567=>325,568=>928,569=>928,570=>698,571=>716,572=>548,573=>633,574=>669,575=>506, +576=>511,577=>594,578=>492,579=>760,580=>785,581=>698,582=>686,583=>572,584=>426,585=>348, +586=>763,587=>629,588=>748,589=>474,590=>642,591=>523,592=>583,593=>629,594=>629,595=>629, +596=>548,597=>548,598=>629,599=>657,600=>572,601=>572,602=>816,603=>547,604=>505,605=>816, +606=>647,607=>348,608=>629,609=>629,610=>563,611=>641,612=>564,613=>654,614=>654,615=>654, +616=>342,617=>342,618=>342,619=>368,620=>462,621=>342,622=>716,623=>952,624=>952,625=>952, +626=>654,627=>654,628=>641,629=>600,630=>955,631=>674,632=>600,633=>514,634=>514,635=>514, +636=>474,637=>474,638=>406,639=>438,640=>721,641=>721,642=>506,643=>298,644=>387,645=>486, +646=>298,647=>443,648=>416,649=>654,650=>611,651=>624,652=>577,653=>816,654=>571,655=>654, +656=>511,657=>511,658=>511,659=>511,660=>482,661=>482,662=>482,663=>490,664=>784,665=>625, +666=>647,667=>563,668=>659,669=>345,670=>666,671=>581,672=>629,673=>482,674=>482,675=>1005, +676=>1061,677=>1005,678=>819,679=>643,680=>817,681=>935,682=>711,683=>716,684=>596,685=>398, +686=>552,687=>646,688=>469,689=>466,690=>282,691=>372,692=>372,693=>432,694=>474,695=>595, +696=>436,697=>271,699=>313,700=>313,701=>313,702=>330,703=>330,704=>282,705=>282,711=>450, +712=>254,713=>450,716=>254,717=>450,720=>332,721=>332,722=>330,723=>330,726=>353,728=>450, +729=>450,730=>450,731=>450,733=>450,734=>375,736=>412,737=>263,738=>355,739=>427,740=>282, +741=>450,742=>450,743=>450,744=>450,745=>450,750=>498,768=>0,769=>0,770=>0,771=>0, +772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0, +782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0, +792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0, +802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0, +812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0, +822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0, +835=>0,847=>0,856=>0,865=>0,880=>701,881=>519,884=>271,885=>271,890=>450,891=>548, +892=>548,893=>548,894=>332,900=>450,901=>450,902=>698,903=>313,904=>852,905=>1006,906=>595, +908=>798,910=>857,911=>820,912=>435,913=>698,914=>760,915=>639,916=>698,917=>686,918=>657, +919=>850,920=>784,921=>421,922=>782,923=>698,924=>996,925=>822,926=>633,927=>784,928=>850, +929=>677,931=>636,932=>669,933=>642,934=>784,935=>698,936=>822,937=>801,938=>421,939=>642, +940=>692,941=>547,942=>654,943=>435,944=>624,945=>692,946=>598,947=>594,948=>600,949=>547, +950=>533,951=>654,952=>600,953=>435,954=>674,955=>631,956=>659,957=>624,958=>533,959=>600, +960=>659,961=>598,962=>548,963=>664,964=>605,965=>624,966=>814,967=>592,968=>847,969=>857, +970=>435,971=>624,972=>600,973=>624,974=>857,976=>600,977=>764,978=>687,979=>872,980=>687, +981=>847,982=>857,983=>589,984=>784,985=>600,986=>716,987=>548,988=>639,989=>475,990=>531, +991=>593,992=>716,993=>600,1008=>589,1009=>598,1010=>548,1011=>325,1012=>784,1013=>548,1014=>548, +1015=>681,1016=>629,1017=>716,1018=>996,1019=>774,1020=>623,1021=>716,1022=>716,1023=>716,1024=>686, +1025=>686,1026=>811,1027=>621,1028=>716,1029=>650,1030=>421,1031=>421,1032=>426,1033=>1081,1034=>1135, +1035=>866,1036=>818,1037=>850,1038=>730,1039=>850,1040=>733,1041=>769,1042=>760,1043=>621,1044=>800, +1045=>686,1046=>1181,1047=>649,1048=>850,1049=>850,1050=>818,1051=>795,1052=>996,1053=>850,1054=>784, +1055=>850,1056=>677,1057=>716,1058=>669,1059=>730,1060=>854,1061=>698,1062=>870,1063=>822,1064=>1141, +1065=>1164,1066=>861,1067=>1081,1068=>743,1069=>716,1070=>1158,1071=>793,1072=>583,1073=>600,1074=>625, +1075=>551,1076=>600,1077=>572,1078=>909,1079=>574,1080=>667,1081=>667,1082=>650,1083=>634,1084=>782, +1085=>659,1086=>600,1087=>659,1088=>629,1089=>548,1090=>558,1091=>576,1092=>812,1093=>536,1094=>665, +1095=>659,1096=>967,1097=>974,1098=>690,1099=>902,1100=>611,1101=>548,1102=>923,1103=>665,1104=>572, +1105=>572,1106=>646,1107=>551,1108=>548,1109=>506,1110=>342,1111=>342,1112=>325,1113=>889,1114=>913, +1115=>654,1116=>650,1117=>667,1118=>576,1119=>659,1122=>792,1123=>633,1124=>1076,1125=>867,1130=>1181, +1131=>909,1136=>986,1137=>995,1138=>784,1139=>587,1140=>824,1141=>673,1164=>761,1165=>606,1168=>630, +1169=>556,1170=>621,1171=>551,1172=>781,1173=>645,1174=>1181,1175=>909,1176=>649,1177=>574,1178=>852, +1179=>669,1182=>818,1183=>650,1184=>937,1185=>744,1186=>870,1187=>665,1188=>1050,1189=>860,1190=>1210, +1191=>953,1194=>716,1195=>548,1196=>669,1197=>558,1198=>642,1199=>523,1200=>642,1201=>523,1202=>779, +1203=>584,1204=>919,1205=>726,1206=>835,1207=>665,1210=>819,1211=>654,1216=>421,1217=>1181,1218=>909, +1219=>782,1220=>624,1223=>850,1224=>659,1227=>822,1228=>659,1231=>342,1232=>733,1233=>583,1234=>733, +1235=>583,1236=>931,1237=>877,1238=>686,1239=>572,1240=>784,1241=>572,1242=>784,1243=>572,1244=>1181, +1245=>909,1246=>649,1247=>574,1248=>591,1249=>511,1250=>850,1251=>667,1252=>850,1253=>667,1254=>784, +1255=>600,1256=>784,1257=>600,1258=>784,1259=>600,1260=>716,1261=>548,1262=>730,1263=>576,1264=>730, +1265=>576,1266=>730,1267=>576,1268=>822,1269=>659,1270=>621,1271=>551,1272=>1081,1273=>902,1296=>649, +1297=>574,1298=>795,1299=>634,1300=>1123,1301=>851,1306=>738,1307=>576,1308=>925,1309=>770,4256=>680, +4257=>842,4258=>779,4259=>787,4260=>703,4261=>970,4262=>913,4263=>1091,4264=>579,4265=>736,4266=>946, +4267=>945,4268=>716,4269=>1021,4270=>872,4271=>812,4272=>998,4273=>712,4274=>680,4275=>968,4276=>878, +4277=>959,4278=>729,4279=>750,4280=>739,4281=>750,4282=>817,4283=>969,4284=>692,4285=>739,4286=>731, +4287=>1000,4288=>1010,4289=>721,4290=>803,4291=>722,4292=>792,4293=>957,4304=>535,4305=>563,4306=>579, +4307=>798,4308=>553,4309=>549,4310=>600,4311=>823,4312=>552,4313=>540,4314=>1008,4315=>576,4316=>576, +4317=>791,4318=>561,4319=>571,4320=>790,4321=>599,4322=>702,4323=>676,4324=>782,4325=>575,4326=>820, +4327=>559,4328=>583,4329=>576,4330=>656,4331=>577,4332=>567,4333=>566,4334=>603,4335=>678,4336=>563, +4337=>591,4338=>563,4339=>563,4340=>562,4341=>603,4342=>846,4343=>612,4344=>572,4345=>605,4346=>562, +4347=>529,4348=>318,7426=>846,7432=>458,7433=>288,7444=>890,7446=>600,7447=>600,7453=>663,7454=>853, +7455=>853,7468=>439,7469=>586,7470=>479,7472=>491,7473=>432,7474=>432,7475=>483,7476=>536,7477=>265, +7478=>268,7479=>492,7480=>398,7481=>627,7482=>518,7483=>518,7484=>493,7486=>426,7487=>471,7488=>409, +7489=>422,7490=>494,7491=>419,7492=>419,7493=>448,7494=>591,7495=>448,7496=>448,7497=>400,7498=>400, +7499=>370,7500=>370,7501=>448,7502=>270,7503=>471,7504=>655,7505=>426,7506=>420,7507=>384,7508=>420, +7509=>420,7510=>448,7511=>333,7512=>468,7513=>390,7514=>655,7515=>442,7522=>215,7523=>372,7524=>468, +7525=>442,7543=>576,7544=>536,7547=>342,7557=>342,7579=>448,7580=>384,7581=>384,7582=>420,7583=>370, +7584=>345,7585=>335,7586=>448,7587=>470,7588=>270,7589=>276,7590=>270,7591=>270,7592=>333,7593=>331, +7594=>289,7595=>387,7596=>613,7597=>655,7598=>529,7599=>528,7600=>425,7601=>420,7602=>470,7603=>360, +7604=>348,7605=>333,7606=>468,7607=>427,7609=>439,7610=>442,7611=>371,7612=>474,7613=>371,7614=>407, +7615=>420,7620=>0,7621=>0,7622=>0,7623=>0,7624=>0,7625=>0,7680=>698,7681=>583,7682=>760, +7683=>629,7684=>760,7685=>629,7686=>760,7687=>629,7688=>716,7689=>548,7690=>780,7691=>629,7692=>780, +7693=>629,7694=>780,7695=>629,7696=>780,7697=>629,7698=>780,7699=>629,7700=>686,7701=>572,7702=>686, +7703=>572,7704=>686,7705=>572,7706=>686,7707=>572,7708=>686,7709=>572,7710=>639,7711=>387,7712=>769, +7713=>629,7714=>850,7715=>654,7716=>850,7717=>654,7718=>850,7719=>654,7720=>850,7721=>654,7722=>850, +7723=>654,7724=>421,7725=>342,7726=>421,7727=>342,7728=>782,7729=>624,7730=>782,7731=>624,7732=>782, +7733=>624,7734=>633,7735=>342,7736=>633,7737=>342,7738=>633,7739=>342,7740=>633,7741=>342,7742=>996, +7743=>952,7744=>996,7745=>952,7746=>996,7747=>952,7748=>822,7749=>654,7750=>822,7751=>654,7752=>822, +7753=>654,7754=>822,7755=>654,7756=>784,7757=>600,7758=>784,7759=>600,7760=>784,7761=>600,7762=>784, +7763=>600,7764=>677,7765=>629,7766=>677,7767=>629,7768=>748,7769=>474,7770=>748,7771=>474,7772=>748, +7773=>474,7774=>748,7775=>474,7776=>650,7777=>506,7778=>650,7779=>506,7780=>650,7781=>506,7782=>650, +7783=>506,7784=>650,7785=>506,7786=>669,7787=>416,7788=>669,7789=>416,7790=>669,7791=>416,7792=>669, +7793=>416,7794=>785,7795=>654,7796=>785,7797=>654,7798=>785,7799=>654,7800=>785,7801=>654,7802=>785, +7803=>654,7804=>698,7805=>523,7806=>698,7807=>523,7808=>1011,7809=>774,7810=>1011,7811=>774,7812=>1011, +7813=>774,7814=>1011,7815=>774,7816=>1011,7817=>774,7818=>698,7819=>536,7820=>698,7821=>536,7822=>642, +7823=>523,7824=>657,7825=>511,7826=>657,7827=>511,7828=>657,7829=>511,7830=>654,7831=>416,7832=>774, +7833=>523,7834=>913,7835=>387,7838=>852,7839=>600,7840=>698,7841=>583,7842=>698,7843=>583,7844=>698, +7845=>583,7846=>698,7847=>583,7848=>698,7849=>583,7850=>698,7851=>583,7852=>698,7853=>583,7854=>698, +7855=>583,7856=>698,7857=>583,7858=>698,7859=>583,7860=>698,7861=>583,7862=>698,7863=>583,7864=>686, +7865=>572,7866=>686,7867=>572,7868=>686,7869=>572,7870=>686,7871=>572,7872=>686,7873=>572,7874=>686, +7875=>572,7876=>686,7877=>572,7878=>686,7879=>572,7880=>421,7881=>342,7882=>421,7883=>342,7884=>784, +7885=>600,7886=>784,7887=>600,7888=>784,7889=>600,7890=>784,7891=>600,7892=>784,7893=>600,7894=>784, +7895=>600,7896=>784,7897=>600,7898=>784,7899=>600,7900=>784,7901=>600,7902=>784,7903=>600,7904=>784, +7905=>600,7906=>784,7907=>600,7908=>785,7909=>654,7910=>785,7911=>654,7912=>785,7913=>654,7914=>785, +7915=>654,7916=>785,7917=>654,7918=>785,7919=>654,7920=>785,7921=>654,7922=>642,7923=>523,7924=>642, +7925=>523,7926=>642,7927=>523,7928=>642,7929=>523,7936=>692,7937=>692,7938=>692,7939=>692,7940=>692, +7941=>692,7942=>692,7943=>692,7944=>698,7945=>698,7946=>880,7947=>880,7948=>748,7949=>764,7950=>698, +7951=>698,7952=>547,7953=>547,7954=>547,7955=>547,7956=>547,7957=>547,7960=>826,7961=>817,7962=>1052, +7963=>1052,7964=>984,7965=>1007,7968=>654,7969=>654,7970=>654,7971=>654,7972=>654,7973=>654,7974=>654, +7975=>654,7976=>990,7977=>984,7978=>1222,7979=>1225,7980=>1151,7981=>1177,7982=>1077,7983=>1074,7984=>435, +7985=>435,7986=>435,7987=>435,7988=>435,7989=>435,7990=>435,7991=>435,7992=>566,7993=>555,7994=>790, +7995=>792,7996=>719,7997=>748,7998=>650,7999=>642,8000=>600,8001=>600,8002=>600,8003=>600,8004=>600, +8005=>600,8008=>810,8009=>841,8010=>1116,8011=>1113,8012=>931,8013=>959,8016=>624,8017=>624,8018=>624, +8019=>624,8020=>624,8021=>624,8022=>624,8023=>624,8025=>830,8027=>1067,8029=>1020,8031=>917,8032=>857, +8033=>857,8034=>857,8035=>857,8036=>857,8037=>857,8038=>857,8039=>857,8040=>838,8041=>867,8042=>1141, +8043=>1146,8044=>949,8045=>979,8046=>920,8047=>954,8048=>692,8049=>692,8050=>547,8051=>547,8052=>654, +8053=>654,8054=>435,8055=>435,8056=>600,8057=>600,8058=>624,8059=>624,8060=>857,8061=>857,8064=>692, +8065=>692,8066=>692,8067=>692,8068=>692,8069=>692,8070=>692,8071=>692,8072=>698,8073=>698,8074=>880, +8075=>880,8076=>748,8077=>764,8078=>698,8079=>698,8080=>654,8081=>654,8082=>654,8083=>654,8084=>654, +8085=>654,8086=>654,8087=>654,8088=>990,8089=>984,8090=>1222,8091=>1225,8092=>1151,8093=>1177,8094=>1077, +8095=>1074,8096=>857,8097=>857,8098=>857,8099=>857,8100=>857,8101=>857,8102=>857,8103=>857,8104=>838, +8105=>867,8106=>1141,8107=>1146,8108=>949,8109=>979,8110=>920,8111=>954,8112=>692,8113=>692,8114=>692, +8115=>692,8116=>692,8118=>692,8119=>692,8120=>698,8121=>698,8122=>729,8123=>698,8124=>698,8125=>450, +8126=>450,8127=>450,8128=>450,8129=>450,8130=>654,8131=>654,8132=>654,8134=>654,8135=>654,8136=>899, +8137=>852,8138=>1072,8139=>1006,8140=>850,8141=>450,8142=>450,8143=>450,8144=>435,8145=>435,8146=>435, +8147=>435,8150=>435,8151=>435,8152=>421,8153=>421,8154=>642,8155=>595,8157=>450,8158=>450,8159=>450, +8160=>624,8161=>624,8162=>624,8163=>624,8164=>598,8165=>598,8166=>624,8167=>624,8168=>642,8169=>642, +8170=>917,8171=>857,8172=>819,8173=>450,8174=>450,8175=>450,8178=>857,8179=>857,8180=>857,8182=>857, +8183=>857,8184=>962,8185=>798,8186=>991,8187=>820,8188=>801,8189=>450,8190=>450,8192=>450,8193=>900, +8194=>450,8195=>900,8196=>296,8197=>225,8198=>150,8199=>626,8200=>313,8201=>180,8202=>89,8203=>0, +8204=>0,8205=>0,8206=>0,8207=>0,8208=>374,8209=>374,8210=>626,8213=>900,8214=>450,8215=>450, +8219=>313,8223=>518,8227=>575,8228=>313,8229=>606,8234=>0,8235=>0,8236=>0,8237=>0,8238=>0, +8239=>180,8241=>1638,8242=>237,8243=>402,8244=>567,8245=>237,8246=>402,8247=>567,8248=>659,8252=>566, +8253=>527,8254=>450,8258=>920,8260=>150,8261=>426,8262=>426,8263=>974,8264=>770,8265=>770,8267=>572, +8268=>450,8269=>450,8270=>470,8271=>332,8273=>470,8274=>500,8275=>900,8279=>731,8287=>200,8288=>0, +8289=>0,8290=>0,8291=>0,8292=>0,8298=>0,8299=>0,8300=>0,8301=>0,8302=>0,8303=>0, +8304=>394,8305=>215,8308=>394,8309=>394,8310=>394,8311=>394,8312=>394,8313=>394,8314=>475,8315=>475, +8316=>475,8317=>268,8318=>268,8319=>467,8320=>394,8321=>394,8322=>394,8323=>394,8324=>394,8325=>394, +8326=>394,8327=>394,8328=>394,8329=>394,8330=>475,8331=>475,8332=>475,8333=>268,8334=>268,8336=>419, +8337=>400,8338=>420,8339=>427,8340=>400,8358=>626,8367=>1039,8369=>710,8372=>788,8373=>626,8377=>626, +8451=>1078,8457=>1001,8462=>654,8463=>654,8470=>978,8486=>801,8487=>801,8490=>782,8491=>698,8513=>697, +8514=>501,8515=>573,8516=>684,8523=>813,8528=>932,8529=>932,8530=>1326,8531=>932,8532=>932,8533=>932, +8534=>932,8535=>932,8536=>932,8537=>932,8538=>932,8539=>932,8540=>932,8541=>932,8542=>932,8543=>554, +8544=>421,8545=>663,8546=>904,8547=>984,8548=>698,8549=>1014,8550=>1256,8551=>1498,8552=>962,8553=>698, +8554=>970,8555=>1212,8556=>633,8557=>716,8558=>780,8559=>996,8560=>342,8561=>684,8562=>1025,8563=>865, +8564=>523,8565=>865,8566=>1207,8567=>1548,8568=>878,8569=>536,8570=>878,8571=>1220,8572=>342,8573=>548, +8574=>629,8575=>952,8576=>1129,8577=>780,8578=>1141,8579=>716,8580=>548,8581=>716,8585=>932,8592=>754, +8593=>754,8594=>754,8595=>754,8596=>754,8597=>754,8598=>754,8599=>754,8600=>754,8601=>754,8602=>754, +8603=>754,8604=>754,8605=>754,8606=>754,8607=>754,8608=>754,8609=>754,8610=>754,8611=>754,8612=>754, +8613=>754,8614=>754,8615=>754,8616=>754,8617=>754,8618=>754,8619=>754,8620=>754,8621=>754,8622=>754, +8623=>765,8624=>754,8625=>754,8626=>754,8627=>754,8628=>754,8629=>754,8630=>754,8631=>754,8632=>754, +8633=>754,8634=>754,8635=>754,8636=>754,8637=>754,8638=>754,8639=>754,8640=>754,8641=>754,8642=>754, +8643=>754,8644=>754,8645=>754,8646=>754,8647=>754,8648=>754,8649=>754,8650=>754,8651=>754,8652=>754, +8653=>754,8654=>754,8655=>754,8656=>754,8657=>754,8658=>754,8659=>754,8660=>754,8661=>754,8662=>754, +8663=>754,8664=>754,8665=>754,8666=>754,8667=>754,8668=>754,8669=>754,8670=>754,8671=>754,8672=>754, +8673=>754,8674=>754,8675=>754,8676=>754,8677=>754,8678=>754,8679=>754,8680=>754,8681=>754,8682=>754, +8683=>754,8684=>754,8685=>754,8686=>754,8687=>754,8688=>754,8689=>754,8690=>754,8691=>754,8692=>754, +8693=>754,8694=>754,8695=>754,8696=>754,8697=>754,8698=>754,8699=>754,8700=>754,8701=>754,8702=>754, +8703=>754,8704=>577,8706=>480,8707=>558,8708=>558,8710=>677,8711=>677,8712=>666,8713=>666,8715=>666, +8716=>666,8719=>757,8720=>757,8721=>677,8722=>754,8723=>754,8724=>754,8725=>329,8727=>622,8728=>466, +8729=>466,8730=>591,8731=>591,8732=>591,8733=>604,8734=>750,8735=>754,8736=>754,8739=>292,8740=>546, +8741=>476,8742=>696,8743=>730,8744=>730,8745=>754,8746=>754,8747=>521,8748=>900,8749=>1252,8760=>754, +8761=>754,8762=>754,8763=>754,8764=>754,8765=>754,8770=>754,8771=>754,8776=>754,8784=>754,8785=>754, +8786=>754,8787=>754,8788=>974,8789=>974,8800=>754,8801=>754,8804=>754,8805=>754,8834=>754,8835=>754, +8836=>754,8837=>754,8838=>754,8839=>754,8844=>754,8845=>754,8846=>754,8847=>754,8848=>754,8849=>754, +8850=>754,8851=>754,8852=>754,8853=>754,8854=>754,8855=>754,8856=>754,8857=>754,8858=>754,8859=>754, +8860=>754,8861=>754,8862=>754,8863=>754,8864=>754,8865=>754,8866=>795,8867=>795,8868=>864,8869=>864, +8870=>554,8871=>554,8872=>795,8873=>795,8874=>795,8875=>971,8876=>795,8877=>795,8878=>795,8879=>971, +8901=>358,8962=>751,8968=>426,8969=>426,8970=>426,8971=>426,8976=>754,8977=>484,8984=>835,8985=>754, +8992=>521,8993=>521,8997=>900,9000=>1299,9085=>907,9115=>450,9116=>450,9117=>450,9118=>450,9119=>450, +9120=>450,9121=>450,9122=>450,9123=>450,9124=>450,9125=>450,9126=>450,9127=>675,9128=>675,9129=>675, +9130=>675,9131=>675,9132=>675,9133=>675,9134=>521,9167=>850,9251=>751,9600=>692,9601=>692,9602=>692, +9603=>692,9604=>692,9605=>692,9606=>692,9607=>692,9608=>692,9609=>692,9610=>692,9611=>692,9612=>692, +9613=>692,9614=>692,9615=>692,9616=>692,9617=>692,9618=>692,9619=>692,9620=>692,9621=>692,9622=>692, +9623=>692,9624=>692,9625=>692,9626=>692,9627=>692,9628=>692,9629=>692,9630=>692,9631=>692,9632=>850, +9633=>850,9634=>850,9635=>850,9636=>850,9637=>850,9638=>850,9639=>850,9640=>850,9641=>850,9642=>610, +9643=>610,9644=>850,9645=>850,9646=>495,9647=>495,9648=>692,9649=>692,9650=>692,9651=>692,9652=>452, +9653=>452,9654=>692,9655=>692,9656=>452,9657=>452,9658=>692,9659=>692,9660=>692,9661=>692,9662=>452, +9663=>452,9664=>692,9665=>692,9666=>452,9667=>452,9668=>692,9669=>692,9670=>692,9671=>692,9672=>692, +9673=>785,9674=>444,9675=>785,9676=>785,9677=>785,9678=>785,9679=>785,9680=>785,9681=>785,9682=>785, +9683=>785,9684=>785,9685=>785,9686=>474,9687=>474,9688=>712,9689=>873,9690=>873,9691=>873,9692=>348, +9693=>348,9694=>348,9695=>348,9696=>785,9697=>785,9698=>692,9699=>692,9700=>692,9701=>692,9702=>531, +9703=>850,9704=>850,9705=>850,9706=>850,9707=>850,9708=>692,9709=>692,9710=>692,9711=>1007,9712=>850, +9713=>850,9714=>850,9715=>850,9716=>785,9717=>785,9718=>785,9719=>785,9720=>692,9721=>692,9722=>692, +9723=>747,9724=>747,9725=>659,9726=>659,9727=>692,9728=>807,9784=>807,9785=>807,9786=>807,9787=>807, +9788=>807,9791=>552,9792=>658,9793=>658,9794=>807,9795=>807,9796=>807,9797=>807,9798=>807,9799=>807, +9824=>807,9825=>807,9826=>807,9827=>807,9828=>807,9829=>807,9830=>807,9831=>807,9833=>424,9834=>574, +9835=>807,9836=>807,9837=>424,9838=>321,9839=>435,10145=>754,10181=>411,10182=>411,10208=>444,10216=>411, +10217=>411,10224=>754,10225=>754,10226=>754,10227=>754,10228=>930,10229=>1290,10230=>1290,10231=>1290,10232=>1290, +10233=>1290,10234=>1290,10235=>1290,10236=>1290,10237=>1290,10238=>1290,10239=>1290,10240=>703,10241=>703,10242=>703, +10243=>703,10244=>703,10245=>703,10246=>703,10247=>703,10248=>703,10249=>703,10250=>703,10251=>703,10252=>703, +10253=>703,10254=>703,10255=>703,10256=>703,10257=>703,10258=>703,10259=>703,10260=>703,10261=>703,10262=>703, +10263=>703,10264=>703,10265=>703,10266=>703,10267=>703,10268=>703,10269=>703,10270=>703,10271=>703,10272=>703, +10273=>703,10274=>703,10275=>703,10276=>703,10277=>703,10278=>703,10279=>703,10280=>703,10281=>703,10282=>703, +10283=>703,10284=>703,10285=>703,10286=>703,10287=>703,10288=>703,10289=>703,10290=>703,10291=>703,10292=>703, +10293=>703,10294=>703,10295=>703,10296=>703,10297=>703,10298=>703,10299=>703,10300=>703,10301=>703,10302=>703, +10303=>703,10304=>703,10305=>703,10306=>703,10307=>703,10308=>703,10309=>703,10310=>703,10311=>703,10312=>703, +10313=>703,10314=>703,10315=>703,10316=>703,10317=>703,10318=>703,10319=>703,10320=>703,10321=>703,10322=>703, +10323=>703,10324=>703,10325=>703,10326=>703,10327=>703,10328=>703,10329=>703,10330=>703,10331=>703,10332=>703, +10333=>703,10334=>703,10335=>703,10336=>703,10337=>703,10338=>703,10339=>703,10340=>703,10341=>703,10342=>703, +10343=>703,10344=>703,10345=>703,10346=>703,10347=>703,10348=>703,10349=>703,10350=>703,10351=>703,10352=>703, +10353=>703,10354=>703,10355=>703,10356=>703,10357=>703,10358=>703,10359=>703,10360=>703,10361=>703,10362=>703, +10363=>703,10364=>703,10365=>703,10366=>703,10367=>703,10368=>703,10369=>703,10370=>703,10371=>703,10372=>703, +10373=>703,10374=>703,10375=>703,10376=>703,10377=>703,10378=>703,10379=>703,10380=>703,10381=>703,10382=>703, +10383=>703,10384=>703,10385=>703,10386=>703,10387=>703,10388=>703,10389=>703,10390=>703,10391=>703,10392=>703, +10393=>703,10394=>703,10395=>703,10396=>703,10397=>703,10398=>703,10399=>703,10400=>703,10401=>703,10402=>703, +10403=>703,10404=>703,10405=>703,10406=>703,10407=>703,10408=>703,10409=>703,10410=>703,10411=>703,10412=>703, +10413=>703,10414=>703,10415=>703,10416=>703,10417=>703,10418=>703,10419=>703,10420=>703,10421=>703,10422=>703, +10423=>703,10424=>703,10425=>703,10426=>703,10427=>703,10428=>703,10429=>703,10430=>703,10431=>703,10432=>703, +10433=>703,10434=>703,10435=>703,10436=>703,10437=>703,10438=>703,10439=>703,10440=>703,10441=>703,10442=>703, +10443=>703,10444=>703,10445=>703,10446=>703,10447=>703,10448=>703,10449=>703,10450=>703,10451=>703,10452=>703, +10453=>703,10454=>703,10455=>703,10456=>703,10457=>703,10458=>703,10459=>703,10460=>703,10461=>703,10462=>703, +10463=>703,10464=>703,10465=>703,10466=>703,10467=>703,10468=>703,10469=>703,10470=>703,10471=>703,10472=>703, +10473=>703,10474=>703,10475=>703,10476=>703,10477=>703,10478=>703,10479=>703,10480=>703,10481=>703,10482=>703, +10483=>703,10484=>703,10485=>703,10486=>703,10487=>703,10488=>703,10489=>703,10490=>703,10491=>703,10492=>703, +10493=>703,10494=>703,10495=>703,10496=>754,10497=>754,10498=>754,10499=>754,10500=>754,10501=>754,10502=>754, +10503=>754,10504=>754,10505=>754,10506=>754,10507=>754,10508=>754,10509=>754,10510=>754,10511=>754,10512=>754, +10513=>754,10514=>754,10515=>754,10516=>754,10517=>754,10518=>754,10519=>754,10520=>754,10521=>754,10522=>754, +10523=>754,10524=>754,10525=>754,10526=>754,10527=>754,10528=>754,10529=>754,10530=>754,10531=>754,10532=>754, +10533=>754,10534=>754,10535=>754,10536=>754,10537=>754,10538=>754,10539=>754,10540=>754,10541=>754,10542=>754, +10543=>754,10544=>754,10545=>754,10546=>754,10547=>754,10548=>754,10549=>754,10550=>754,10551=>754,10552=>754, +10553=>754,10554=>754,10555=>754,10556=>754,10557=>754,10558=>754,10559=>754,10560=>754,10561=>754,10562=>754, +10563=>754,10564=>754,10565=>754,10566=>754,10567=>754,10568=>754,10569=>754,10570=>754,10571=>754,10572=>754, +10573=>754,10574=>754,10575=>754,10576=>754,10577=>754,10578=>754,10579=>754,10580=>754,10581=>754,10582=>754, +10583=>754,10584=>754,10585=>754,10586=>754,10587=>754,10588=>754,10589=>754,10590=>754,10591=>754,10592=>754, +10593=>754,10594=>754,10595=>754,10596=>754,10597=>754,10598=>754,10599=>754,10600=>754,10601=>754,10602=>754, +10603=>754,10604=>754,10605=>754,10606=>754,10607=>754,10608=>754,10609=>754,10610=>754,10611=>754,10612=>754, +10613=>754,10614=>754,10615=>929,10616=>754,10617=>754,10618=>864,10619=>754,10620=>754,10621=>754,10622=>754, +10623=>754,10731=>444,10764=>1604,10765=>549,10766=>549,10799=>754,11008=>754,11009=>754,11010=>754,11011=>754, +11012=>754,11013=>754,11014=>754,11015=>754,11016=>754,11017=>754,11018=>754,11019=>754,11020=>754,11021=>754, +11022=>754,11023=>754,11024=>754,11025=>754,11026=>850,11027=>850,11028=>850,11029=>850,11030=>692,11031=>692, +11032=>692,11033=>692,11034=>850,11364=>748,11367=>850,11368=>654,11369=>782,11370=>624,11371=>657,11372=>511, +11373=>763,11374=>996,11375=>698,11376=>763,11377=>638,11378=>1099,11379=>886,11381=>701,11382=>541,11383=>814, +11385=>514,11386=>600,11388=>282,11389=>439,11390=>650,11391=>657,11520=>695,11521=>571,11522=>723,11523=>592, +11524=>708,11525=>866,11526=>680,11527=>864,11528=>555,11529=>581,11530=>866,11531=>567,11532=>581,11533=>866, +11534=>761,11535=>779,11536=>865,11537=>580,11538=>580,11539=>863,11540=>851,11541=>777,11542=>580,11543=>581, +11544=>580,11545=>584,11546=>619,11547=>842,11548=>883,11549=>613,11550=>608,11551=>766,11552=>1002,11553=>569, +11554=>580,11555=>582,11556=>674,11557=>822,11800=>527,11810=>426,11811=>426,11812=>426,11813=>426,11822=>527, +42564=>650,42565=>506,42566=>421,42567=>342,42576=>1200,42577=>982,42580=>1158,42581=>923,42582=>1158,42583=>935, +42760=>450,42761=>450,42762=>450,42763=>450,42764=>450,42765=>450,42766=>450,42767=>450,42768=>450,42769=>450, +42770=>450,42771=>450,42772=>450,42773=>450,42774=>450,42779=>346,42780=>346,42781=>249,42782=>249,42783=>249, +42813=>763,42891=>395,42892=>275,42893=>822,62464=>634,62465=>645,62466=>688,62467=>898,62468=>645,62469=>639, +62470=>698,62471=>934,62472=>645,62473=>645,62474=>1178,62475=>660,62476=>659,62477=>903,62478=>645,62479=>659, +62480=>945,62481=>717,62482=>765,62483=>719,62484=>896,62485=>659,62486=>888,62487=>658,62488=>665,62489=>659, +62490=>702,62491=>659,62492=>665,62493=>646,62494=>702,62495=>842,62496=>644,62497=>743,62498=>645,62499=>645, +62500=>645,62501=>695,62502=>911,62504=>813,63173=>600,63185=>450,63188=>450,64256=>738,64257=>654,64258=>654, +64259=>1007,64260=>1005,64261=>784,64262=>874,65024=>0,65025=>0,65026=>0,65027=>0,65028=>0,65029=>0, +65030=>0,65031=>0,65032=>0,65033=>0,65034=>0,65035=>0,65036=>0,65037=>0,65038=>0,65039=>0, +65529=>0,65530=>0,65531=>0,65532=>0,65533=>1002); +$enc=''; +$diff=''; +$file='dejavuserifcondensedb.z'; +$ctg='dejavuserifcondensedb.ctg.z'; +$originalsize=290556; +// --- EOF --- --- /dev/null +++ b/tcpdf/fonts/dejavuserifcondensedbi.php @@ -1,1 +1,309 @@ - +939,'Descent'=>-236,'CapHeight'=>-48,'Flags'=>96,'FontBBox'=>'[-815 -389 1584 1145]','ItalicAngle'=>-11,'StemV'=>120,'MissingWidth'=>540); +$up=-63; +$ut=44; +$dw=540; +$cw=array( +0=>540,32=>313,33=>395,34=>469,35=>754,36=>626,37=>855,38=>813,39=>275,40=>426, +41=>426,42=>470,43=>754,44=>313,45=>374,46=>313,47=>329,48=>626,49=>626,50=>626, +51=>626,52=>626,53=>626,54=>626,55=>626,56=>626,57=>626,58=>332,59=>332,60=>754, +61=>754,62=>754,63=>527,64=>900,65=>698,66=>760,67=>716,68=>780,69=>686,70=>639, +71=>769,72=>850,73=>421,74=>426,75=>782,76=>633,77=>996,78=>822,79=>784,80=>677, +81=>784,82=>748,83=>650,84=>669,85=>785,86=>698,87=>1011,88=>698,89=>642,90=>657, +91=>426,92=>329,93=>426,94=>754,95=>450,96=>450,97=>583,98=>629,99=>548,100=>629, +101=>572,102=>387,103=>629,104=>654,105=>342,106=>325,107=>624,108=>342,109=>952,110=>654, +111=>600,112=>629,113=>629,114=>474,115=>506,116=>416,117=>654,118=>523,119=>774,120=>536, +121=>523,122=>511,123=>579,124=>327,125=>579,126=>754,8364=>626,8218=>313,402=>387,8222=>518, +8230=>900,8224=>470,8225=>470,710=>450,8240=>1246,352=>650,8249=>360,338=>1062,381=>657,8216=>313, +8217=>313,8220=>518,8221=>518,8226=>575,8211=>450,8212=>900,732=>450,8482=>900,353=>506,8250=>360, +339=>925,382=>511,376=>642,160=>313,161=>395,162=>626,163=>626,164=>572,165=>626,166=>327, +167=>470,168=>450,169=>900,170=>438,171=>563,172=>754,173=>374,174=>900,175=>450,176=>450, +177=>754,178=>394,179=>394,180=>450,181=>659,182=>572,183=>313,184=>450,185=>394,186=>450, +187=>563,188=>938,189=>938,190=>938,191=>527,192=>698,193=>698,194=>698,195=>698,196=>698, +197=>698,198=>931,199=>716,200=>686,201=>686,202=>686,203=>686,204=>421,205=>421,206=>421, +207=>421,208=>787,209=>822,210=>784,211=>784,212=>784,213=>784,214=>784,215=>754,216=>784, +217=>785,218=>785,219=>785,220=>785,221=>642,222=>681,223=>684,224=>583,225=>583,226=>583, +227=>583,228=>583,229=>583,230=>838,231=>548,232=>572,233=>572,234=>572,235=>572,236=>342, +237=>342,238=>342,239=>342,240=>600,241=>654,242=>600,243=>600,244=>600,245=>600,246=>600, +247=>754,248=>600,249=>654,250=>654,251=>654,252=>654,253=>523,254=>629,255=>523,256=>698, +257=>583,258=>698,259=>583,260=>698,261=>583,262=>716,263=>548,264=>716,265=>548,266=>716, +267=>548,268=>716,269=>548,270=>780,271=>629,272=>787,273=>629,274=>686,275=>572,276=>686, +277=>572,278=>686,279=>572,280=>686,281=>572,282=>686,283=>572,284=>769,285=>629,286=>769, +287=>629,288=>769,289=>629,290=>769,291=>629,292=>850,293=>654,294=>850,295=>654,296=>421, +297=>342,298=>421,299=>342,300=>421,301=>342,302=>421,303=>342,304=>421,305=>342,306=>848, +307=>676,308=>426,309=>325,310=>782,311=>624,312=>624,313=>633,314=>342,315=>633,316=>342, +317=>633,318=>457,319=>633,320=>501,321=>639,322=>346,323=>822,324=>654,325=>822,326=>654, +327=>822,328=>654,329=>907,330=>785,331=>654,332=>784,333=>600,334=>784,335=>600,336=>784, +337=>600,340=>748,341=>474,342=>748,343=>474,344=>748,345=>474,346=>650,347=>506,348=>650, +349=>506,350=>650,351=>506,354=>669,355=>416,356=>669,357=>416,358=>669,359=>416,360=>785, +361=>654,362=>785,363=>654,364=>785,365=>654,366=>785,367=>654,368=>785,369=>654,370=>785, +371=>654,372=>1011,373=>774,374=>642,375=>523,377=>657,378=>511,379=>657,380=>511,383=>387, +384=>629,385=>760,386=>769,387=>629,388=>769,389=>629,390=>716,391=>716,392=>548,393=>787, +394=>780,395=>769,396=>629,397=>600,398=>686,399=>784,400=>649,401=>639,403=>769,404=>693, +405=>938,406=>421,407=>421,408=>782,409=>624,410=>342,411=>631,412=>952,413=>822,414=>654, +415=>784,416=>784,417=>600,418=>1080,419=>849,420=>677,421=>629,422=>748,423=>650,424=>506, +425=>636,426=>298,427=>416,428=>669,429=>416,430=>669,431=>785,432=>654,433=>801,434=>801, +435=>642,436=>628,437=>657,438=>511,439=>591,440=>591,441=>591,443=>626,444=>678,445=>511, +446=>482,447=>644,448=>265,449=>443,450=>413,451=>265,452=>1437,453=>1292,454=>1140,455=>1059, +456=>958,457=>667,458=>1248,459=>1148,460=>980,461=>698,462=>583,463=>421,464=>342,465=>784, +466=>600,467=>785,468=>654,469=>785,470=>654,471=>785,472=>654,473=>785,474=>654,475=>785, +476=>654,477=>572,478=>698,479=>583,480=>698,481=>583,482=>931,483=>877,484=>806,485=>629, +486=>769,487=>629,488=>782,489=>624,490=>784,491=>600,492=>784,493=>600,494=>591,495=>511, +496=>325,497=>1437,498=>1292,499=>1140,500=>769,501=>629,502=>1099,503=>708,504=>822,505=>654, +506=>698,507=>583,508=>931,509=>838,510=>784,511=>600,512=>698,513=>583,514=>698,515=>583, +516=>686,517=>572,518=>686,519=>572,520=>421,521=>342,522=>421,523=>342,524=>784,525=>600, +526=>784,527=>600,528=>748,529=>474,530=>748,531=>474,532=>785,533=>654,534=>785,535=>654, +536=>650,537=>506,538=>669,539=>416,540=>621,541=>546,542=>850,543=>654,544=>785,545=>711, +546=>632,547=>527,548=>657,549=>511,550=>698,551=>583,552=>686,553=>572,554=>784,555=>600, +556=>784,557=>600,558=>784,559=>600,560=>784,561=>600,562=>642,563=>523,564=>516,565=>830, +566=>508,567=>325,568=>928,569=>928,570=>698,571=>716,572=>548,573=>633,574=>669,575=>506, +576=>511,577=>594,578=>492,579=>760,580=>785,581=>698,582=>686,583=>572,584=>426,585=>348, +586=>763,587=>629,588=>748,589=>474,590=>642,591=>523,592=>583,593=>629,594=>629,595=>629, +596=>548,597=>548,598=>629,599=>657,600=>572,601=>572,602=>816,603=>547,604=>505,605=>816, +606=>647,607=>348,608=>629,609=>629,610=>563,611=>641,612=>564,613=>654,614=>654,615=>654, +616=>342,617=>342,618=>342,619=>368,620=>462,621=>342,622=>716,623=>952,624=>952,625=>952, +626=>654,627=>654,628=>641,629=>600,630=>955,631=>674,632=>600,633=>514,634=>514,635=>514, +636=>474,637=>474,638=>406,639=>438,640=>721,641=>721,642=>506,643=>298,644=>387,645=>486, +646=>298,647=>443,648=>416,649=>654,650=>611,651=>624,652=>523,653=>774,654=>571,655=>654, +656=>511,657=>511,658=>511,659=>511,660=>482,661=>482,662=>482,663=>490,664=>784,665=>625, +666=>647,667=>563,668=>659,669=>345,670=>666,671=>581,672=>629,673=>482,674=>482,675=>1005, +676=>1061,677=>1005,678=>819,679=>643,680=>817,681=>935,682=>711,683=>716,684=>596,685=>398, +686=>552,687=>646,688=>469,689=>466,690=>282,691=>372,692=>372,693=>432,694=>474,695=>488, +696=>329,697=>271,699=>313,700=>313,701=>313,702=>330,703=>330,704=>282,705=>282,711=>450, +712=>254,713=>450,716=>254,717=>450,720=>332,721=>332,722=>330,723=>330,726=>353,728=>450, +729=>450,730=>450,731=>450,733=>450,734=>375,736=>403,737=>263,738=>355,739=>338,740=>282, +741=>450,742=>450,743=>450,744=>450,745=>450,750=>498,768=>0,769=>0,770=>0,771=>0, +772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0, +782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0, +792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0, +802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0, +812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0, +822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0, +835=>0,847=>0,856=>0,865=>0,880=>701,881=>519,884=>271,885=>271,890=>450,891=>548, +892=>548,893=>548,894=>332,900=>450,901=>450,902=>698,903=>313,904=>852,905=>1022,906=>595, +908=>798,910=>857,911=>820,912=>435,913=>698,914=>760,915=>639,916=>698,917=>686,918=>657, +919=>850,920=>784,921=>421,922=>782,923=>698,924=>996,925=>822,926=>633,927=>784,928=>850, +929=>677,931=>636,932=>669,933=>642,934=>784,935=>698,936=>822,937=>801,938=>421,939=>642, +940=>692,941=>547,942=>654,943=>435,944=>624,945=>692,946=>598,947=>594,948=>600,949=>547, +950=>533,951=>654,952=>600,953=>435,954=>674,955=>631,956=>659,957=>624,958=>533,959=>600, +960=>659,961=>598,962=>548,963=>664,964=>605,965=>624,966=>814,967=>592,968=>847,969=>857, +970=>435,971=>624,972=>600,973=>624,974=>857,976=>600,977=>764,978=>687,979=>872,980=>687, +981=>847,982=>857,983=>589,984=>784,985=>600,986=>716,987=>548,988=>639,989=>475,990=>531, +991=>593,992=>716,993=>600,1008=>589,1009=>598,1010=>548,1011=>325,1012=>784,1013=>548,1014=>548, +1015=>681,1016=>629,1017=>716,1018=>996,1019=>774,1020=>623,1021=>716,1022=>716,1023=>716,1024=>686, +1025=>686,1026=>811,1027=>621,1028=>716,1029=>650,1030=>421,1031=>421,1032=>426,1033=>1081,1034=>1135, +1035=>866,1036=>818,1037=>850,1038=>730,1039=>850,1040=>733,1041=>769,1042=>760,1043=>621,1044=>800, +1045=>686,1046=>1181,1047=>649,1048=>850,1049=>850,1050=>818,1051=>795,1052=>996,1053=>850,1054=>784, +1055=>850,1056=>677,1057=>716,1058=>669,1059=>730,1060=>854,1061=>698,1062=>870,1063=>822,1064=>1141, +1065=>1164,1066=>861,1067=>1081,1068=>743,1069=>716,1070=>1158,1071=>793,1072=>583,1073=>650,1074=>591, +1075=>506,1076=>625,1077=>572,1078=>1175,1079=>574,1080=>654,1081=>654,1082=>609,1083=>659,1084=>855, +1085=>656,1086=>600,1087=>654,1088=>629,1089=>548,1090=>952,1091=>538,1092=>812,1093=>536,1094=>723, +1095=>643,1096=>952,1097=>1021,1098=>654,1099=>916,1100=>593,1101=>580,1102=>901,1103=>716,1104=>572, +1105=>572,1106=>646,1107=>506,1108=>548,1109=>506,1110=>342,1111=>342,1112=>325,1113=>913,1114=>910, +1115=>654,1116=>609,1117=>654,1118=>538,1119=>654,1122=>792,1123=>945,1124=>1076,1125=>867,1130=>1181, +1131=>909,1136=>986,1137=>995,1138=>784,1139=>587,1140=>824,1141=>673,1164=>761,1165=>606,1168=>630, +1169=>556,1170=>621,1171=>506,1172=>768,1173=>634,1174=>1181,1175=>1175,1176=>649,1177=>574,1178=>812, +1179=>633,1182=>818,1183=>609,1184=>937,1185=>684,1186=>856,1187=>725,1188=>1050,1189=>859,1190=>1191, +1191=>911,1194=>716,1195=>548,1196=>669,1197=>1028,1198=>642,1199=>515,1200=>642,1201=>515,1202=>709, +1203=>536,1204=>909,1205=>749,1206=>822,1207=>712,1210=>819,1211=>654,1216=>421,1217=>1181,1218=>1175, +1219=>782,1220=>624,1223=>850,1224=>659,1227=>885,1228=>659,1231=>342,1232=>733,1233=>583,1234=>733, +1235=>583,1236=>931,1237=>877,1238=>686,1239=>572,1240=>784,1241=>572,1242=>784,1243=>572,1244=>1181, +1245=>1175,1246=>649,1247=>574,1248=>591,1249=>511,1250=>850,1251=>654,1252=>850,1253=>654,1254=>784, +1255=>600,1256=>784,1257=>600,1258=>784,1259=>600,1260=>716,1261=>580,1262=>730,1263=>538,1264=>730, +1265=>538,1266=>730,1267=>538,1268=>822,1269=>643,1270=>621,1271=>506,1272=>1081,1273=>916,1296=>649, +1297=>574,1298=>795,1299=>659,1300=>1123,1301=>904,1306=>738,1307=>576,1308=>925,1309=>770,4256=>688, +4257=>851,4258=>788,4259=>795,4260=>712,4261=>979,4262=>921,4263=>1100,4264=>587,4265=>745,4266=>955, +4267=>954,4268=>725,4269=>1030,4270=>880,4271=>820,4272=>1007,4273=>721,4274=>689,4275=>977,4276=>887, +4277=>968,4278=>738,4279=>758,4280=>748,4281=>759,4282=>826,4283=>978,4284=>701,4285=>748,4286=>740, +4287=>1008,4288=>1019,4289=>730,4290=>812,4291=>730,4292=>801,4293=>965,4304=>535,4305=>563,4306=>579, +4307=>798,4308=>553,4309=>549,4310=>599,4311=>823,4312=>552,4313=>540,4314=>1008,4315=>589,4316=>576, +4317=>791,4318=>561,4319=>571,4320=>790,4321=>591,4322=>721,4323=>676,4324=>782,4325=>575,4326=>820, +4327=>559,4328=>583,4329=>576,4330=>656,4331=>577,4332=>575,4333=>566,4334=>606,4335=>663,4336=>563, +4337=>591,4338=>563,4339=>563,4340=>562,4341=>603,4342=>846,4343=>612,4344=>572,4345=>605,4346=>562, +4347=>401,4348=>327,7426=>846,7432=>458,7433=>288,7444=>890,7446=>600,7447=>600,7453=>663,7454=>853, +7455=>853,7468=>439,7469=>586,7470=>479,7472=>491,7473=>432,7474=>432,7475=>483,7476=>536,7477=>265, +7478=>268,7479=>492,7480=>398,7481=>627,7482=>518,7483=>518,7484=>493,7486=>426,7487=>471,7488=>422, +7489=>494,7490=>637,7491=>419,7492=>419,7493=>448,7494=>591,7495=>448,7496=>448,7497=>400,7498=>400, +7499=>370,7500=>370,7501=>448,7502=>270,7503=>471,7504=>655,7505=>426,7506=>420,7507=>384,7508=>420, +7509=>420,7510=>448,7511=>333,7512=>468,7513=>390,7514=>655,7515=>442,7522=>215,7523=>372,7524=>468, +7525=>442,7543=>576,7544=>536,7547=>342,7557=>342,7579=>448,7580=>384,7581=>384,7582=>420,7583=>370, +7584=>244,7585=>335,7586=>448,7587=>470,7588=>270,7589=>276,7590=>270,7591=>270,7592=>333,7593=>331, +7594=>289,7595=>387,7596=>613,7597=>655,7598=>529,7599=>528,7600=>425,7601=>420,7602=>470,7603=>360, +7604=>348,7605=>333,7606=>468,7607=>427,7609=>439,7610=>329,7611=>321,7612=>474,7613=>371,7614=>407, +7615=>420,7620=>0,7621=>0,7622=>0,7623=>0,7624=>0,7625=>0,7680=>698,7681=>583,7682=>760, +7683=>629,7684=>760,7685=>629,7686=>760,7687=>629,7688=>716,7689=>548,7690=>780,7691=>629,7692=>780, +7693=>629,7694=>780,7695=>629,7696=>780,7697=>629,7698=>780,7699=>629,7700=>686,7701=>572,7702=>686, +7703=>572,7704=>686,7705=>572,7706=>686,7707=>572,7708=>686,7709=>572,7710=>639,7711=>387,7712=>769, +7713=>629,7714=>850,7715=>654,7716=>850,7717=>654,7718=>850,7719=>654,7720=>850,7721=>654,7722=>850, +7723=>654,7724=>421,7725=>342,7726=>421,7727=>342,7728=>782,7729=>624,7730=>782,7731=>624,7732=>782, +7733=>624,7734=>633,7735=>342,7736=>633,7737=>342,7738=>633,7739=>342,7740=>633,7741=>342,7742=>996, +7743=>952,7744=>996,7745=>952,7746=>996,7747=>952,7748=>822,7749=>654,7750=>822,7751=>654,7752=>822, +7753=>654,7754=>822,7755=>654,7756=>784,7757=>600,7758=>784,7759=>600,7760=>784,7761=>600,7762=>784, +7763=>600,7764=>677,7765=>629,7766=>677,7767=>629,7768=>748,7769=>474,7770=>748,7771=>474,7772=>748, +7773=>474,7774=>748,7775=>474,7776=>650,7777=>506,7778=>650,7779=>506,7780=>650,7781=>506,7782=>650, +7783=>506,7784=>650,7785=>506,7786=>669,7787=>416,7788=>669,7789=>416,7790=>669,7791=>416,7792=>669, +7793=>416,7794=>785,7795=>654,7796=>785,7797=>654,7798=>785,7799=>654,7800=>785,7801=>654,7802=>785, +7803=>654,7804=>698,7805=>523,7806=>698,7807=>523,7808=>1011,7809=>774,7810=>1011,7811=>774,7812=>1011, +7813=>774,7814=>1011,7815=>774,7816=>1011,7817=>774,7818=>698,7819=>536,7820=>698,7821=>536,7822=>642, +7823=>523,7824=>657,7825=>511,7826=>657,7827=>511,7828=>657,7829=>511,7830=>654,7831=>416,7832=>774, +7833=>523,7834=>913,7835=>387,7838=>852,7839=>600,7840=>698,7841=>583,7842=>698,7843=>583,7844=>698, +7845=>583,7846=>698,7847=>583,7848=>698,7849=>583,7850=>698,7851=>583,7852=>698,7853=>583,7854=>698, +7855=>583,7856=>698,7857=>583,7858=>698,7859=>583,7860=>698,7861=>583,7862=>698,7863=>583,7864=>686, +7865=>572,7866=>686,7867=>572,7868=>686,7869=>572,7870=>686,7871=>572,7872=>686,7873=>572,7874=>686, +7875=>572,7876=>686,7877=>572,7878=>686,7879=>572,7880=>421,7881=>342,7882=>421,7883=>342,7884=>784, +7885=>600,7886=>784,7887=>600,7888=>784,7889=>600,7890=>784,7891=>600,7892=>784,7893=>600,7894=>784, +7895=>600,7896=>784,7897=>600,7898=>784,7899=>600,7900=>784,7901=>600,7902=>784,7903=>600,7904=>784, +7905=>600,7906=>784,7907=>600,7908=>785,7909=>654,7910=>785,7911=>654,7912=>785,7913=>654,7914=>785, +7915=>654,7916=>785,7917=>654,7918=>785,7919=>654,7920=>785,7921=>654,7922=>642,7923=>523,7924=>642, +7925=>523,7926=>642,7927=>523,7928=>642,7929=>523,7936=>692,7937=>692,7938=>692,7939=>692,7940=>692, +7941=>692,7942=>692,7943=>692,7944=>698,7945=>698,7946=>880,7947=>880,7948=>748,7949=>764,7950=>698, +7951=>698,7952=>547,7953=>547,7954=>547,7955=>547,7956=>547,7957=>547,7960=>826,7961=>817,7962=>1052, +7963=>1052,7964=>984,7965=>1007,7968=>654,7969=>654,7970=>654,7971=>654,7972=>654,7973=>654,7974=>654, +7975=>654,7976=>990,7977=>984,7978=>1222,7979=>1225,7980=>1151,7981=>1177,7982=>1077,7983=>1074,7984=>435, +7985=>435,7986=>435,7987=>435,7988=>435,7989=>435,7990=>435,7991=>435,7992=>566,7993=>555,7994=>790, +7995=>792,7996=>719,7997=>748,7998=>650,7999=>642,8000=>600,8001=>600,8002=>600,8003=>600,8004=>600, +8005=>600,8008=>810,8009=>841,8010=>1116,8011=>1113,8012=>931,8013=>959,8016=>624,8017=>624,8018=>624, +8019=>624,8020=>624,8021=>624,8022=>624,8023=>624,8025=>830,8027=>1067,8029=>1020,8031=>917,8032=>857, +8033=>857,8034=>857,8035=>857,8036=>857,8037=>857,8038=>857,8039=>857,8040=>838,8041=>867,8042=>1141, +8043=>1146,8044=>949,8045=>979,8046=>920,8047=>954,8048=>692,8049=>692,8050=>547,8051=>547,8052=>654, +8053=>654,8054=>435,8055=>435,8056=>600,8057=>600,8058=>624,8059=>624,8060=>857,8061=>857,8064=>692, +8065=>692,8066=>692,8067=>692,8068=>692,8069=>692,8070=>692,8071=>692,8072=>698,8073=>698,8074=>880, +8075=>880,8076=>748,8077=>764,8078=>698,8079=>698,8080=>654,8081=>654,8082=>654,8083=>654,8084=>654, +8085=>654,8086=>654,8087=>654,8088=>990,8089=>984,8090=>1222,8091=>1225,8092=>1151,8093=>1177,8094=>1077, +8095=>1074,8096=>857,8097=>857,8098=>857,8099=>857,8100=>857,8101=>857,8102=>857,8103=>857,8104=>838, +8105=>867,8106=>1141,8107=>1146,8108=>949,8109=>979,8110=>920,8111=>954,8112=>692,8113=>692,8114=>692, +8115=>692,8116=>692,8118=>692,8119=>692,8120=>698,8121=>698,8122=>729,8123=>698,8124=>698,8125=>450, +8126=>450,8127=>450,8128=>450,8129=>450,8130=>654,8131=>654,8132=>654,8134=>654,8135=>654,8136=>899, +8137=>852,8138=>1072,8139=>1006,8140=>850,8141=>450,8142=>450,8143=>450,8144=>435,8145=>435,8146=>435, +8147=>435,8150=>435,8151=>435,8152=>421,8153=>421,8154=>642,8155=>595,8157=>450,8158=>450,8159=>450, +8160=>624,8161=>624,8162=>624,8163=>624,8164=>598,8165=>598,8166=>624,8167=>624,8168=>642,8169=>642, +8170=>917,8171=>857,8172=>819,8173=>450,8174=>450,8175=>450,8178=>857,8179=>857,8180=>857,8182=>857, +8183=>857,8184=>962,8185=>798,8186=>991,8187=>820,8188=>801,8189=>450,8190=>450,8192=>450,8193=>900, +8194=>450,8195=>900,8196=>296,8197=>225,8198=>150,8199=>626,8200=>313,8201=>180,8202=>89,8203=>0, +8204=>0,8205=>0,8206=>0,8207=>0,8208=>374,8209=>374,8210=>626,8213=>900,8214=>450,8215=>450, +8219=>313,8223=>518,8227=>575,8228=>313,8229=>606,8234=>0,8235=>0,8236=>0,8237=>0,8238=>0, +8239=>180,8241=>1631,8242=>237,8243=>402,8244=>567,8245=>237,8246=>402,8247=>567,8248=>659,8252=>566, +8253=>527,8254=>450,8258=>920,8260=>150,8261=>426,8262=>426,8263=>974,8264=>770,8265=>770,8267=>572, +8268=>450,8269=>450,8270=>470,8271=>332,8273=>470,8274=>500,8275=>900,8279=>731,8287=>200,8288=>0, +8289=>0,8290=>0,8291=>0,8292=>0,8298=>0,8299=>0,8300=>0,8301=>0,8302=>0,8303=>0, +8304=>394,8305=>215,8308=>394,8309=>394,8310=>394,8311=>394,8312=>394,8313=>394,8314=>475,8315=>475, +8316=>475,8317=>268,8318=>268,8319=>412,8320=>394,8321=>394,8322=>394,8323=>394,8324=>394,8325=>394, +8326=>394,8327=>394,8328=>394,8329=>394,8330=>475,8331=>475,8332=>475,8333=>268,8334=>268,8336=>419, +8337=>400,8338=>420,8339=>338,8340=>400,8358=>626,8367=>1039,8369=>710,8372=>788,8373=>626,8377=>626, +8451=>1078,8457=>1001,8462=>654,8463=>654,8470=>978,8486=>801,8487=>801,8490=>782,8491=>698,8513=>707, +8514=>518,8515=>573,8516=>684,8523=>813,8528=>932,8529=>932,8530=>1326,8531=>932,8532=>932,8533=>932, +8534=>932,8535=>932,8536=>932,8537=>932,8538=>932,8539=>932,8540=>932,8541=>932,8542=>932,8543=>554, +8544=>421,8545=>663,8546=>904,8547=>984,8548=>698,8549=>1014,8550=>1256,8551=>1498,8552=>962,8553=>698, +8554=>970,8555=>1212,8556=>633,8557=>716,8558=>780,8559=>996,8560=>342,8561=>684,8562=>1025,8563=>865, +8564=>523,8565=>865,8566=>1207,8567=>1548,8568=>878,8569=>536,8570=>878,8571=>1220,8572=>342,8573=>548, +8574=>629,8575=>952,8576=>1129,8577=>780,8578=>1141,8579=>716,8580=>548,8581=>716,8585=>932,8592=>754, +8593=>754,8594=>754,8595=>754,8596=>754,8597=>754,8598=>754,8599=>754,8600=>754,8601=>754,8602=>754, +8603=>754,8604=>754,8605=>754,8606=>754,8607=>754,8608=>754,8609=>754,8610=>754,8611=>754,8612=>754, +8613=>754,8614=>754,8615=>754,8616=>754,8617=>754,8618=>754,8619=>754,8620=>754,8621=>754,8622=>754, +8623=>765,8624=>754,8625=>754,8626=>754,8627=>754,8628=>754,8629=>754,8630=>754,8631=>754,8632=>754, +8633=>754,8634=>754,8635=>754,8636=>754,8637=>754,8638=>754,8639=>754,8640=>754,8641=>754,8642=>754, +8643=>754,8644=>754,8645=>754,8646=>754,8647=>754,8648=>754,8649=>754,8650=>754,8651=>754,8652=>754, +8653=>754,8654=>754,8655=>754,8656=>754,8657=>754,8658=>754,8659=>754,8660=>754,8661=>754,8662=>754, +8663=>754,8664=>754,8665=>754,8666=>754,8667=>754,8668=>754,8669=>754,8670=>754,8671=>754,8672=>754, +8673=>754,8674=>754,8675=>754,8676=>754,8677=>754,8678=>754,8679=>754,8680=>754,8681=>754,8682=>754, +8683=>754,8684=>754,8685=>754,8686=>754,8687=>754,8688=>754,8689=>754,8690=>754,8691=>754,8692=>754, +8693=>754,8694=>754,8695=>754,8696=>754,8697=>754,8698=>754,8699=>754,8700=>754,8701=>754,8702=>754, +8703=>754,8704=>577,8706=>480,8707=>558,8708=>558,8710=>677,8711=>677,8712=>666,8713=>666,8715=>666, +8716=>666,8719=>757,8720=>757,8721=>677,8722=>754,8723=>754,8724=>754,8725=>329,8727=>622,8728=>466, +8729=>466,8730=>591,8731=>591,8732=>591,8733=>604,8734=>750,8735=>754,8736=>754,8739=>292,8740=>546, +8741=>476,8742=>696,8743=>730,8744=>730,8745=>754,8746=>754,8747=>521,8748=>900,8749=>1252,8760=>754, +8761=>754,8762=>754,8763=>754,8764=>754,8765=>754,8770=>754,8771=>754,8776=>754,8784=>754,8785=>754, +8786=>754,8787=>754,8788=>974,8789=>974,8800=>754,8801=>754,8804=>754,8805=>754,8834=>754,8835=>754, +8836=>754,8837=>754,8838=>754,8839=>754,8844=>754,8845=>754,8846=>754,8847=>754,8848=>754,8849=>754, +8850=>754,8851=>754,8852=>754,8853=>754,8854=>754,8855=>754,8856=>754,8857=>754,8858=>754,8859=>754, +8860=>754,8861=>754,8862=>754,8863=>754,8864=>754,8865=>754,8866=>795,8867=>795,8868=>864,8869=>864, +8870=>554,8871=>554,8872=>795,8873=>795,8874=>795,8875=>971,8876=>795,8877=>795,8878=>795,8879=>971, +8901=>358,8962=>751,8968=>426,8969=>426,8970=>426,8971=>426,8976=>754,8977=>484,8984=>835,8985=>754, +8992=>521,8993=>521,8997=>900,9000=>1299,9085=>907,9115=>450,9116=>450,9117=>450,9118=>450,9119=>450, +9120=>450,9121=>450,9122=>450,9123=>450,9124=>450,9125=>450,9126=>450,9127=>675,9128=>675,9129=>675, +9130=>675,9131=>675,9132=>675,9133=>675,9134=>521,9167=>850,9251=>751,9600=>692,9601=>692,9602=>692, +9603=>692,9604=>692,9605=>692,9606=>692,9607=>692,9608=>692,9609=>692,9610=>692,9611=>692,9612=>692, +9613=>692,9614=>692,9615=>692,9616=>692,9617=>692,9618=>692,9619=>692,9620=>692,9621=>692,9622=>692, +9623=>692,9624=>692,9625=>692,9626=>692,9627=>692,9628=>692,9629=>692,9630=>692,9631=>692,9632=>850, +9633=>850,9634=>850,9635=>850,9636=>850,9637=>850,9638=>850,9639=>850,9640=>850,9641=>850,9642=>610, +9643=>610,9644=>850,9645=>850,9646=>495,9647=>495,9648=>692,9649=>692,9650=>692,9651=>692,9652=>452, +9653=>452,9654=>692,9655=>692,9656=>452,9657=>452,9658=>692,9659=>692,9660=>692,9661=>692,9662=>452, +9663=>452,9664=>692,9665=>692,9666=>452,9667=>452,9668=>692,9669=>692,9670=>692,9671=>692,9672=>692, +9673=>785,9674=>444,9675=>785,9676=>785,9677=>785,9678=>785,9679=>785,9680=>785,9681=>785,9682=>785, +9683=>785,9684=>785,9685=>785,9686=>474,9687=>474,9688=>712,9689=>873,9690=>873,9691=>873,9692=>348, +9693=>348,9694=>348,9695=>348,9696=>785,9697=>785,9698=>692,9699=>692,9700=>692,9701=>692,9702=>531, +9703=>850,9704=>850,9705=>850,9706=>850,9707=>850,9708=>692,9709=>692,9710=>692,9711=>1007,9712=>850, +9713=>850,9714=>850,9715=>850,9716=>785,9717=>785,9718=>785,9719=>785,9720=>692,9721=>692,9722=>692, +9723=>747,9724=>747,9725=>659,9726=>659,9727=>692,9728=>807,9784=>807,9785=>807,9786=>807,9787=>807, +9788=>807,9791=>552,9792=>658,9793=>658,9794=>807,9795=>807,9796=>807,9797=>807,9798=>807,9799=>807, +9824=>807,9825=>807,9826=>807,9827=>807,9828=>807,9829=>807,9830=>807,9831=>807,9833=>424,9834=>574, +9835=>807,9836=>807,9837=>424,9838=>321,9839=>435,10145=>754,10181=>411,10182=>411,10208=>444,10216=>411, +10217=>411,10224=>754,10225=>754,10226=>754,10227=>754,10228=>930,10229=>1290,10230=>1290,10231=>1290,10232=>1290, +10233=>1290,10234=>1290,10235=>1290,10236=>1290,10237=>1290,10238=>1290,10239=>1290,10240=>703,10241=>703,10242=>703, +10243=>703,10244=>703,10245=>703,10246=>703,10247=>703,10248=>703,10249=>703,10250=>703,10251=>703,10252=>703, +10253=>703,10254=>703,10255=>703,10256=>703,10257=>703,10258=>703,10259=>703,10260=>703,10261=>703,10262=>703, +10263=>703,10264=>703,10265=>703,10266=>703,10267=>703,10268=>703,10269=>703,10270=>703,10271=>703,10272=>703, +10273=>703,10274=>703,10275=>703,10276=>703,10277=>703,10278=>703,10279=>703,10280=>703,10281=>703,10282=>703, +10283=>703,10284=>703,10285=>703,10286=>703,10287=>703,10288=>703,10289=>703,10290=>703,10291=>703,10292=>703, +10293=>703,10294=>703,10295=>703,10296=>703,10297=>703,10298=>703,10299=>703,10300=>703,10301=>703,10302=>703, +10303=>703,10304=>703,10305=>703,10306=>703,10307=>703,10308=>703,10309=>703,10310=>703,10311=>703,10312=>703, +10313=>703,10314=>703,10315=>703,10316=>703,10317=>703,10318=>703,10319=>703,10320=>703,10321=>703,10322=>703, +10323=>703,10324=>703,10325=>703,10326=>703,10327=>703,10328=>703,10329=>703,10330=>703,10331=>703,10332=>703, +10333=>703,10334=>703,10335=>703,10336=>703,10337=>703,10338=>703,10339=>703,10340=>703,10341=>703,10342=>703, +10343=>703,10344=>703,10345=>703,10346=>703,10347=>703,10348=>703,10349=>703,10350=>703,10351=>703,10352=>703, +10353=>703,10354=>703,10355=>703,10356=>703,10357=>703,10358=>703,10359=>703,10360=>703,10361=>703,10362=>703, +10363=>703,10364=>703,10365=>703,10366=>703,10367=>703,10368=>703,10369=>703,10370=>703,10371=>703,10372=>703, +10373=>703,10374=>703,10375=>703,10376=>703,10377=>703,10378=>703,10379=>703,10380=>703,10381=>703,10382=>703, +10383=>703,10384=>703,10385=>703,10386=>703,10387=>703,10388=>703,10389=>703,10390=>703,10391=>703,10392=>703, +10393=>703,10394=>703,10395=>703,10396=>703,10397=>703,10398=>703,10399=>703,10400=>703,10401=>703,10402=>703, +10403=>703,10404=>703,10405=>703,10406=>703,10407=>703,10408=>703,10409=>703,10410=>703,10411=>703,10412=>703, +10413=>703,10414=>703,10415=>703,10416=>703,10417=>703,10418=>703,10419=>703,10420=>703,10421=>703,10422=>703, +10423=>703,10424=>703,10425=>703,10426=>703,10427=>703,10428=>703,10429=>703,10430=>703,10431=>703,10432=>703, +10433=>703,10434=>703,10435=>703,10436=>703,10437=>703,10438=>703,10439=>703,10440=>703,10441=>703,10442=>703, +10443=>703,10444=>703,10445=>703,10446=>703,10447=>703,10448=>703,10449=>703,10450=>703,10451=>703,10452=>703, +10453=>703,10454=>703,10455=>703,10456=>703,10457=>703,10458=>703,10459=>703,10460=>703,10461=>703,10462=>703, +10463=>703,10464=>703,10465=>703,10466=>703,10467=>703,10468=>703,10469=>703,10470=>703,10471=>703,10472=>703, +10473=>703,10474=>703,10475=>703,10476=>703,10477=>703,10478=>703,10479=>703,10480=>703,10481=>703,10482=>703, +10483=>703,10484=>703,10485=>703,10486=>703,10487=>703,10488=>703,10489=>703,10490=>703,10491=>703,10492=>703, +10493=>703,10494=>703,10495=>703,10496=>754,10497=>754,10498=>754,10499=>754,10500=>754,10501=>754,10502=>754, +10503=>754,10504=>754,10505=>754,10506=>754,10507=>754,10508=>754,10509=>754,10510=>754,10511=>754,10512=>754, +10513=>754,10514=>754,10515=>754,10516=>754,10517=>754,10518=>754,10519=>754,10520=>754,10521=>754,10522=>754, +10523=>754,10524=>754,10525=>754,10526=>754,10527=>754,10528=>754,10529=>754,10530=>754,10531=>754,10532=>754, +10533=>754,10534=>754,10535=>754,10536=>754,10537=>754,10538=>754,10539=>754,10540=>754,10541=>754,10542=>754, +10543=>754,10544=>754,10545=>754,10546=>754,10547=>754,10548=>754,10549=>754,10550=>754,10551=>754,10552=>754, +10553=>754,10554=>754,10555=>754,10556=>754,10557=>754,10558=>754,10559=>754,10560=>754,10561=>754,10562=>754, +10563=>754,10564=>754,10565=>754,10566=>754,10567=>754,10568=>754,10569=>754,10570=>754,10571=>754,10572=>754, +10573=>754,10574=>754,10575=>754,10576=>754,10577=>754,10578=>754,10579=>754,10580=>754,10581=>754,10582=>754, +10583=>754,10584=>754,10585=>754,10586=>754,10587=>754,10588=>754,10589=>754,10590=>754,10591=>754,10592=>754, +10593=>754,10594=>754,10595=>754,10596=>754,10597=>754,10598=>754,10599=>754,10600=>754,10601=>754,10602=>754, +10603=>754,10604=>754,10605=>754,10606=>754,10607=>754,10608=>754,10609=>754,10610=>754,10611=>754,10612=>754, +10613=>754,10614=>754,10615=>929,10616=>754,10617=>754,10618=>864,10619=>754,10620=>754,10621=>754,10622=>754, +10623=>754,10731=>444,10764=>1604,10765=>549,10766=>549,10799=>754,11008=>754,11009=>754,11010=>754,11011=>754, +11012=>754,11013=>754,11014=>754,11015=>754,11016=>754,11017=>754,11018=>754,11019=>754,11020=>754,11021=>754, +11022=>754,11023=>754,11024=>754,11025=>754,11026=>850,11027=>850,11028=>850,11029=>850,11030=>692,11031=>692, +11032=>692,11033=>692,11034=>850,11364=>748,11367=>850,11368=>654,11369=>782,11370=>624,11371=>657,11372=>511, +11373=>763,11374=>996,11375=>698,11376=>763,11377=>638,11378=>1099,11379=>886,11381=>701,11382=>519,11383=>814, +11385=>514,11386=>600,11388=>282,11389=>439,11390=>650,11391=>657,11520=>695,11521=>571,11522=>723,11523=>592, +11524=>708,11525=>866,11526=>680,11527=>864,11528=>555,11529=>581,11530=>866,11531=>567,11532=>581,11533=>866, +11534=>761,11535=>779,11536=>865,11537=>580,11538=>580,11539=>863,11540=>851,11541=>777,11542=>580,11543=>581, +11544=>580,11545=>584,11546=>619,11547=>842,11548=>883,11549=>613,11550=>608,11551=>766,11552=>1002,11553=>569, +11554=>580,11555=>582,11556=>674,11557=>822,11800=>527,11810=>426,11811=>426,11812=>426,11813=>426,11822=>527, +42564=>650,42565=>506,42566=>421,42567=>342,42576=>1200,42577=>976,42580=>1158,42581=>923,42582=>1158,42583=>926, +42760=>450,42761=>450,42762=>450,42763=>450,42764=>450,42765=>450,42766=>450,42767=>450,42768=>450,42769=>450, +42770=>450,42771=>450,42772=>450,42773=>450,42774=>450,42779=>346,42780=>346,42781=>249,42782=>249,42783=>249, +42813=>649,42891=>395,42892=>275,42893=>822,62464=>653,62465=>663,62466=>707,62467=>917,62468=>663,62469=>658, +62470=>716,62471=>952,62472=>663,62473=>663,62474=>1196,62475=>679,62476=>678,62477=>922,62478=>663,62479=>678, +62480=>963,62481=>736,62482=>783,62483=>737,62484=>914,62485=>677,62486=>907,62487=>677,62488=>684,62489=>678, +62490=>720,62491=>678,62492=>684,62493=>664,62494=>721,62495=>860,62496=>663,62497=>762,62498=>664,62499=>663, +62500=>663,62501=>714,62502=>930,62504=>813,63172=>506,63173=>600,63174=>629,63175=>654,63176=>952,63185=>450, +63188=>450,64256=>744,64257=>654,64258=>654,64259=>998,64260=>1031,64261=>791,64262=>874,65024=>0,65025=>0, +65026=>0,65027=>0,65028=>0,65029=>0,65030=>0,65031=>0,65032=>0,65033=>0,65034=>0,65035=>0, +65036=>0,65037=>0,65038=>0,65039=>0,65529=>0,65530=>0,65531=>0,65532=>0,65533=>1002); +$enc=''; +$diff=''; +$file='dejavuserifcondensedbi.z'; +$ctg='dejavuserifcondensedbi.ctg.z'; +$originalsize=302120; +// --- EOF --- --- /dev/null +++ b/tcpdf/fonts/dejavuserifcondensedi.php @@ -1,1 +1,322 @@ - +928,'Descent'=>-236,'CapHeight'=>-59,'Flags'=>96,'FontBBox'=>'[-755 -347 1485 1109]','ItalicAngle'=>-11,'StemV'=>70,'MissingWidth'=>540); +$up=-63; +$ut=44; +$dw=540; +$cw=array( +0=>540,32=>286,33=>361,34=>414,35=>754,36=>572,37=>855,38=>801,39=>247,40=>351, +41=>351,42=>450,43=>754,44=>286,45=>304,46=>286,47=>303,48=>572,49=>572,50=>572, +51=>572,52=>572,53=>572,54=>572,55=>572,56=>572,57=>572,58=>303,59=>303,60=>754, +61=>754,62=>754,63=>482,64=>900,65=>650,66=>661,67=>688,68=>721,69=>657,70=>624, +71=>719,72=>785,73=>355,74=>360,75=>672,76=>598,77=>921,78=>787,79=>738,80=>605, +81=>738,82=>677,83=>616,84=>600,85=>758,86=>650,87=>925,88=>641,89=>594,90=>625, +91=>351,92=>303,93=>351,94=>754,95=>450,96=>450,97=>536,98=>576,99=>504,100=>576, +101=>532,102=>333,103=>576,104=>580,105=>288,106=>279,107=>545,108=>288,109=>853,110=>580, +111=>542,112=>576,113=>576,114=>430,115=>461,116=>361,117=>580,118=>508,119=>770,120=>507, +121=>508,122=>474,123=>572,124=>303,125=>572,126=>754,8364=>572,8218=>286,402=>333,8222=>466, +8230=>900,8224=>450,8225=>450,710=>450,8240=>1208,352=>616,8249=>360,338=>1023,381=>625,8216=>286, +8217=>286,8220=>460,8221=>460,8226=>531,8211=>450,8212=>900,732=>450,8482=>900,353=>461,8250=>360, +339=>890,382=>474,376=>594,160=>286,161=>361,162=>572,163=>572,164=>572,165=>572,166=>303, +167=>450,168=>450,169=>900,170=>427,171=>550,172=>754,173=>304,174=>900,175=>450,176=>450, +177=>754,178=>360,179=>360,180=>450,181=>584,182=>572,183=>286,184=>450,185=>360,186=>423, +187=>550,188=>872,189=>872,190=>872,191=>482,192=>650,193=>650,194=>650,195=>650,196=>650, +197=>650,198=>901,199=>688,200=>657,201=>657,202=>657,203=>657,204=>355,205=>355,206=>355, +207=>355,208=>726,209=>787,210=>738,211=>738,212=>738,213=>738,214=>738,215=>754,216=>738, +217=>758,218=>758,219=>758,220=>758,221=>594,222=>608,223=>601,224=>536,225=>536,226=>536, +227=>536,228=>536,229=>536,230=>846,231=>504,232=>532,233=>532,234=>532,235=>532,236=>288, +237=>288,238=>288,239=>288,240=>542,241=>580,242=>542,243=>542,244=>542,245=>542,246=>542, +247=>754,248=>542,249=>580,250=>580,251=>580,252=>580,253=>508,254=>576,255=>508,256=>650, +257=>536,258=>650,259=>536,260=>650,261=>536,262=>688,263=>504,264=>688,265=>504,266=>688, +267=>504,268=>688,269=>504,270=>721,271=>576,272=>726,273=>576,274=>657,275=>532,276=>657, +277=>532,278=>657,279=>532,280=>657,281=>532,282=>657,283=>532,284=>719,285=>576,286=>719, +287=>576,288=>719,289=>576,290=>719,291=>576,292=>785,293=>580,294=>785,295=>580,296=>355, +297=>288,298=>355,299=>288,300=>355,301=>288,302=>355,303=>288,304=>355,305=>288,306=>721, +307=>479,308=>360,309=>279,310=>672,311=>545,312=>545,313=>598,314=>288,315=>598,316=>288, +317=>598,318=>360,319=>604,320=>418,321=>602,322=>292,323=>787,324=>580,325=>787,326=>580, +327=>787,328=>580,329=>779,330=>758,331=>580,332=>738,333=>542,334=>738,335=>542,336=>738, +337=>542,340=>677,341=>430,342=>677,343=>430,344=>677,345=>430,346=>616,347=>461,348=>616, +349=>461,350=>616,351=>461,354=>600,355=>361,356=>600,357=>361,358=>600,359=>361,360=>758, +361=>580,362=>758,363=>580,364=>758,365=>580,366=>758,367=>580,368=>758,369=>580,370=>758, +371=>580,372=>925,373=>770,374=>594,375=>508,377=>625,378=>474,379=>625,380=>474,383=>333, +384=>576,385=>661,386=>661,387=>576,388=>661,389=>576,390=>688,391=>688,392=>504,393=>726, +394=>721,395=>661,396=>576,397=>542,398=>657,399=>738,400=>561,401=>624,403=>719,404=>641, +405=>839,406=>355,407=>355,408=>672,409=>545,410=>288,411=>570,412=>853,413=>787,414=>580, +415=>738,416=>738,417=>542,418=>936,419=>726,420=>605,421=>576,422=>677,423=>616,424=>461, +425=>636,426=>292,427=>361,428=>600,429=>361,430=>600,431=>758,432=>580,433=>746,434=>684, +435=>664,436=>670,437=>625,438=>474,439=>508,440=>508,441=>508,443=>572,444=>618,445=>508, +446=>482,447=>571,448=>265,449=>443,450=>413,451=>265,452=>1347,453=>1195,454=>1050,455=>958, +456=>876,457=>567,458=>1148,459=>1066,460=>858,461=>650,462=>536,463=>355,464=>288,465=>738, +466=>542,467=>758,468=>580,469=>758,470=>580,471=>758,472=>580,473=>758,474=>580,475=>758, +476=>580,477=>532,478=>650,479=>536,480=>650,481=>536,482=>901,483=>846,484=>763,485=>576, +486=>719,487=>576,488=>672,489=>545,490=>738,491=>542,492=>738,493=>542,494=>508,495=>508, +496=>288,497=>1347,498=>1195,499=>1050,500=>719,501=>576,502=>1038,503=>636,504=>787,505=>580, +506=>650,507=>536,508=>901,509=>846,510=>738,511=>542,512=>650,513=>536,514=>650,515=>536, +516=>657,517=>532,518=>657,519=>532,520=>355,521=>288,522=>355,523=>288,524=>738,525=>542, +526=>738,527=>542,528=>677,529=>430,530=>677,531=>430,532=>758,533=>580,534=>758,535=>580, +536=>616,537=>461,538=>600,539=>361,540=>564,541=>469,542=>785,543=>580,544=>758,545=>732, +546=>527,547=>497,548=>625,549=>474,550=>650,551=>536,552=>657,553=>532,554=>738,555=>542, +556=>738,557=>542,558=>738,559=>542,560=>738,561=>542,562=>594,563=>508,564=>450,565=>748, +566=>444,567=>279,568=>864,569=>864,570=>650,571=>688,572=>504,573=>598,574=>600,575=>461, +576=>474,577=>525,578=>417,579=>661,580=>758,581=>650,582=>657,583=>532,584=>360,585=>283, +586=>704,587=>576,588=>677,589=>430,590=>594,591=>508,592=>536,593=>576,594=>607,595=>576, +596=>504,597=>504,598=>582,599=>614,600=>532,601=>532,602=>759,603=>483,604=>458,605=>695, +606=>552,607=>283,608=>615,609=>576,610=>489,611=>641,612=>507,613=>580,614=>580,615=>580, +616=>288,617=>353,618=>288,619=>342,620=>409,621=>326,622=>633,623=>853,624=>853,625=>853, +626=>579,627=>624,628=>581,629=>542,630=>711,631=>583,632=>542,633=>451,634=>451,635=>496, +636=>430,637=>430,638=>407,639=>407,640=>534,641=>534,642=>461,643=>244,644=>333,645=>438, +646=>292,647=>361,648=>361,649=>580,650=>558,651=>547,652=>508,653=>770,654=>508,655=>589, +656=>537,657=>504,658=>508,659=>504,660=>482,661=>482,662=>482,663=>461,664=>738,665=>506, +666=>552,667=>588,668=>600,669=>329,670=>545,671=>581,672=>615,673=>482,674=>482,675=>896, +676=>930,677=>898,678=>728,679=>538,680=>704,681=>804,682=>582,683=>608,684=>538,685=>398, +686=>703,687=>690,688=>389,689=>387,690=>237,691=>312,692=>312,693=>387,694=>352,695=>485, +696=>320,697=>250,699=>286,700=>286,701=>286,702=>276,703=>276,704=>252,705=>252,711=>450, +712=>254,713=>450,716=>254,717=>450,720=>303,721=>303,722=>276,723=>276,726=>353,728=>450, +729=>450,730=>450,731=>450,733=>450,734=>375,736=>403,737=>218,738=>303,739=>319,740=>252, +741=>444,742=>444,743=>444,744=>444,745=>444,750=>435,768=>0,769=>0,770=>0,771=>0, +772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0, +782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0, +792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0, +802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0, +812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0, +822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0, +835=>0,847=>0,856=>0,865=>0,880=>666,881=>478,884=>250,885=>250,890=>450,891=>504, +892=>504,893=>504,894=>303,900=>450,901=>450,902=>650,903=>286,904=>810,905=>935,906=>505, +908=>751,910=>808,911=>767,912=>353,913=>650,914=>661,915=>624,916=>650,917=>657,918=>625, +919=>785,920=>738,921=>355,922=>672,923=>650,924=>921,925=>787,926=>633,927=>738,928=>785, +929=>605,931=>636,932=>600,933=>594,934=>738,935=>641,936=>789,937=>746,938=>355,939=>594, +940=>607,941=>483,942=>539,943=>353,944=>547,945=>607,946=>520,947=>538,948=>542,949=>483, +950=>488,951=>539,952=>542,953=>353,954=>590,955=>570,956=>584,957=>547,958=>496,959=>542, +960=>591,961=>529,962=>504,963=>614,964=>498,965=>547,966=>630,967=>545,968=>706,969=>734, +970=>353,971=>547,972=>542,973=>547,974=>734,976=>524,977=>643,978=>618,979=>787,980=>618, +981=>613,982=>734,983=>561,984=>738,985=>542,986=>688,987=>504,988=>624,989=>417,990=>531, +991=>593,992=>704,993=>519,1008=>561,1009=>529,1010=>504,1011=>279,1012=>738,1013=>504,1014=>504, +1015=>608,1016=>576,1017=>688,1018=>921,1019=>637,1020=>529,1021=>688,1022=>688,1023=>688,1024=>657, +1025=>657,1026=>719,1027=>596,1028=>688,1029=>616,1030=>355,1031=>355,1032=>360,1033=>976,1034=>1006, +1035=>785,1036=>696,1037=>785,1038=>650,1039=>785,1040=>681,1041=>661,1042=>661,1043=>596,1044=>731, +1045=>657,1046=>1011,1047=>561,1048=>785,1049=>785,1050=>696,1051=>751,1052=>921,1053=>785,1054=>738, +1055=>785,1056=>605,1057=>688,1058=>600,1059=>650,1060=>747,1061=>641,1062=>785,1063=>695,1064=>1027, +1065=>1027,1066=>715,1067=>885,1068=>606,1069=>688,1070=>1074,1071=>727,1072=>536,1073=>549,1074=>523, +1075=>455,1076=>570,1077=>532,1078=>1023,1079=>491,1080=>580,1081=>580,1082=>537,1083=>573,1084=>746, +1085=>593,1086=>542,1087=>580,1088=>576,1089=>504,1090=>853,1091=>522,1092=>704,1093=>507,1094=>628, +1095=>560,1096=>853,1097=>901,1098=>600,1099=>733,1100=>490,1101=>504,1102=>792,1103=>596,1104=>532, +1105=>532,1106=>561,1107=>455,1108=>504,1109=>461,1110=>288,1111=>288,1112=>279,1113=>773,1114=>790, +1115=>580,1116=>537,1117=>580,1118=>522,1119=>580,1122=>686,1123=>794,1124=>1016,1125=>750,1130=>1011, +1131=>828,1136=>849,1137=>812,1138=>738,1139=>497,1140=>773,1141=>610,1164=>636,1165=>490,1168=>604, +1169=>476,1170=>596,1171=>455,1172=>657,1173=>552,1174=>1011,1175=>1023,1176=>561,1177=>491,1178=>696, +1179=>544,1182=>696,1183=>537,1184=>803,1185=>602,1186=>785,1187=>641,1188=>1025,1189=>771,1190=>1085, +1191=>848,1194=>688,1195=>504,1196=>600,1197=>911,1198=>594,1199=>514,1200=>594,1201=>514,1202=>641, +1203=>566,1204=>842,1205=>659,1206=>674,1207=>609,1210=>674,1211=>580,1216=>355,1217=>1011,1218=>1023, +1219=>672,1220=>545,1223=>785,1224=>600,1227=>674,1228=>600,1231=>288,1232=>681,1233=>536,1234=>681, +1235=>536,1236=>901,1237=>846,1238=>657,1239=>532,1240=>738,1241=>532,1242=>738,1243=>532,1244=>1011, +1245=>1023,1246=>561,1247=>491,1248=>508,1249=>508,1250=>785,1251=>580,1252=>785,1253=>580,1254=>738, +1255=>542,1256=>738,1257=>542,1258=>738,1259=>542,1260=>688,1261=>504,1262=>650,1263=>522,1264=>650, +1265=>522,1266=>650,1267=>522,1268=>695,1269=>560,1270=>596,1271=>455,1272=>885,1273=>733,1296=>561, +1297=>491,1298=>751,1299=>573,1300=>1079,1301=>845,1306=>738,1307=>576,1308=>925,1309=>770,4256=>659, +4257=>773,4258=>753,4259=>782,4260=>668,4261=>892,4262=>833,4263=>1000,4264=>519,4265=>684,4266=>875, +4267=>856,4268=>677,4269=>976,4270=>815,4271=>754,4272=>944,4273=>668,4274=>611,4275=>922,4276=>852, +4277=>926,4278=>667,4279=>668,4280=>668,4281=>668,4282=>800,4283=>852,4284=>651,4285=>688,4286=>668, +4287=>871,4288=>909,4289=>641,4290=>786,4291=>669,4292=>762,4293=>864,4304=>495,4305=>523,4306=>539, +4307=>759,4308=>514,4309=>510,4310=>558,4311=>783,4312=>512,4313=>500,4314=>968,4315=>536,4316=>536, +4317=>751,4318=>521,4319=>531,4320=>750,4321=>546,4322=>682,4323=>631,4324=>742,4325=>535,4326=>781, +4327=>520,4328=>543,4329=>536,4330=>616,4331=>537,4332=>501,4333=>527,4334=>562,4335=>624,4336=>523, +4337=>551,4338=>523,4339=>523,4340=>522,4341=>593,4342=>806,4343=>572,4344=>532,4345=>565,4346=>522, +4347=>410,4348=>335,7426=>846,7432=>458,7433=>288,7444=>890,7446=>542,7447=>542,7453=>663,7454=>853, +7455=>853,7468=>409,7469=>567,7470=>417,7472=>454,7473=>413,7474=>413,7475=>453,7476=>494,7477=>224, +7478=>227,7479=>423,7480=>376,7481=>580,7482=>496,7483=>496,7484=>464,7486=>381,7487=>426,7488=>378, +7489=>478,7490=>583,7491=>347,7492=>347,7493=>360,7494=>556,7495=>360,7496=>360,7497=>348,7498=>348, +7499=>385,7500=>306,7501=>360,7502=>157,7503=>328,7504=>552,7505=>359,7506=>347,7507=>312,7508=>347, +7509=>347,7510=>360,7511=>222,7512=>359,7513=>417,7514=>552,7515=>335,7522=>181,7523=>312,7524=>359, +7525=>335,7543=>576,7544=>494,7547=>334,7557=>288,7579=>439,7580=>317,7581=>317,7582=>426,7583=>385, +7584=>209,7585=>285,7586=>439,7587=>359,7588=>181,7589=>181,7590=>181,7591=>181,7592=>286,7593=>237, +7594=>236,7595=>409,7596=>552,7597=>552,7598=>445,7599=>443,7600=>438,7601=>347,7602=>426,7603=>374, +7604=>269,7605=>301,7606=>359,7607=>429,7609=>417,7610=>320,7611=>298,7612=>376,7613=>376,7614=>406, +7615=>426,7620=>0,7621=>0,7622=>0,7623=>0,7624=>0,7625=>0,7680=>650,7681=>536,7682=>661, +7683=>576,7684=>661,7685=>576,7686=>661,7687=>576,7688=>688,7689=>504,7690=>721,7691=>576,7692=>721, +7693=>576,7694=>721,7695=>576,7696=>721,7697=>576,7698=>721,7699=>576,7700=>657,7701=>532,7702=>657, +7703=>532,7704=>657,7705=>532,7706=>657,7707=>532,7708=>657,7709=>532,7710=>624,7711=>333,7712=>719, +7713=>576,7714=>785,7715=>580,7716=>785,7717=>580,7718=>785,7719=>580,7720=>785,7721=>580,7722=>785, +7723=>580,7724=>355,7725=>288,7726=>355,7727=>288,7728=>672,7729=>545,7730=>672,7731=>545,7732=>672, +7733=>545,7734=>598,7735=>288,7736=>598,7737=>288,7738=>598,7739=>288,7740=>598,7741=>288,7742=>921, +7743=>853,7744=>921,7745=>853,7746=>921,7747=>857,7748=>787,7749=>580,7750=>787,7751=>580,7752=>787, +7753=>580,7754=>787,7755=>580,7756=>738,7757=>542,7758=>738,7759=>542,7760=>738,7761=>542,7762=>738, +7763=>542,7764=>605,7765=>576,7766=>605,7767=>576,7768=>677,7769=>430,7770=>677,7771=>430,7772=>677, +7773=>430,7774=>677,7775=>430,7776=>616,7777=>461,7778=>616,7779=>461,7780=>616,7781=>461,7782=>616, +7783=>469,7784=>616,7785=>461,7786=>600,7787=>361,7788=>600,7789=>361,7790=>600,7791=>361,7792=>600, +7793=>361,7794=>758,7795=>580,7796=>758,7797=>580,7798=>758,7799=>580,7800=>758,7801=>580,7802=>758, +7803=>580,7804=>650,7805=>508,7806=>650,7807=>508,7808=>925,7809=>770,7810=>925,7811=>770,7812=>925, +7813=>770,7814=>925,7815=>770,7816=>925,7817=>770,7818=>641,7819=>507,7820=>641,7821=>507,7822=>594, +7823=>508,7824=>625,7825=>474,7826=>625,7827=>474,7828=>625,7829=>474,7830=>580,7831=>361,7832=>770, +7833=>508,7834=>813,7835=>333,7838=>746,7839=>542,7840=>650,7841=>536,7842=>650,7843=>536,7844=>650, +7845=>551,7846=>650,7847=>551,7848=>650,7849=>551,7850=>650,7851=>551,7852=>650,7853=>536,7854=>650, +7855=>536,7856=>650,7857=>536,7858=>650,7859=>536,7860=>650,7861=>536,7862=>650,7863=>536,7864=>657, +7865=>532,7866=>657,7867=>532,7868=>657,7869=>532,7870=>657,7871=>554,7872=>657,7873=>554,7874=>657, +7875=>554,7876=>657,7877=>554,7878=>657,7879=>532,7880=>355,7881=>288,7882=>355,7883=>288,7884=>738, +7885=>542,7886=>738,7887=>542,7888=>738,7889=>550,7890=>738,7891=>550,7892=>738,7893=>550,7894=>738, +7895=>550,7896=>738,7897=>542,7898=>738,7899=>542,7900=>738,7901=>542,7902=>738,7903=>542,7904=>738, +7905=>542,7906=>738,7907=>542,7908=>758,7909=>580,7910=>758,7911=>580,7912=>758,7913=>580,7914=>758, +7915=>580,7916=>758,7917=>580,7918=>758,7919=>580,7920=>758,7921=>580,7922=>594,7923=>508,7924=>594, +7925=>508,7926=>594,7927=>508,7928=>594,7929=>508,7936=>607,7937=>607,7938=>607,7939=>607,7940=>607, +7941=>607,7942=>607,7943=>607,7944=>650,7945=>650,7946=>782,7947=>782,7948=>660,7949=>687,7950=>650, +7951=>650,7952=>483,7953=>483,7954=>483,7955=>483,7956=>483,7957=>483,7960=>768,7961=>757,7962=>960, +7963=>969,7964=>907,7965=>931,7968=>539,7969=>539,7970=>539,7971=>539,7972=>539,7973=>539,7974=>539, +7975=>539,7976=>898,7977=>893,7978=>1090,7979=>1101,7980=>1043,7981=>1064,7982=>988,7983=>985,7984=>353, +7985=>353,7986=>353,7987=>353,7988=>353,7989=>353,7990=>353,7991=>353,7992=>469,7993=>461,7994=>661, +7995=>664,7996=>611,7997=>635,7998=>561,7999=>553,8000=>542,8001=>542,8002=>542,8003=>542,8004=>542, +8005=>542,8008=>738,8009=>773,8010=>1008,8011=>1015,8012=>843,8013=>867,8016=>547,8017=>547,8018=>547, +8019=>547,8020=>547,8021=>547,8022=>547,8023=>547,8025=>765,8027=>971,8029=>939,8031=>857,8032=>734, +8033=>734,8034=>734,8035=>734,8036=>734,8037=>734,8038=>734,8039=>734,8040=>746,8041=>783,8042=>1018, +8043=>1023,8044=>852,8045=>878,8046=>844,8047=>873,8048=>607,8049=>607,8050=>483,8051=>483,8052=>539, +8053=>539,8054=>353,8055=>353,8056=>542,8057=>542,8058=>547,8059=>547,8060=>734,8061=>734,8064=>607, +8065=>607,8066=>607,8067=>607,8068=>607,8069=>607,8070=>607,8071=>607,8072=>650,8073=>650,8074=>782, +8075=>782,8076=>660,8077=>687,8078=>650,8079=>650,8080=>539,8081=>539,8082=>539,8083=>539,8084=>539, +8085=>539,8086=>539,8087=>539,8088=>898,8089=>893,8090=>1090,8091=>1101,8092=>1043,8093=>1064,8094=>988, +8095=>985,8096=>734,8097=>734,8098=>734,8099=>734,8100=>734,8101=>734,8102=>734,8103=>734,8104=>746, +8105=>783,8106=>1018,8107=>1023,8108=>852,8109=>878,8110=>844,8111=>873,8112=>607,8113=>607,8114=>607, +8115=>607,8116=>607,8118=>607,8119=>607,8120=>650,8121=>650,8122=>650,8123=>650,8124=>650,8125=>450, +8126=>450,8127=>450,8128=>450,8129=>450,8130=>539,8131=>539,8132=>539,8134=>539,8135=>539,8136=>820, +8137=>810,8138=>956,8139=>935,8140=>785,8141=>450,8142=>450,8143=>450,8144=>353,8145=>353,8146=>353, +8147=>353,8150=>353,8151=>353,8152=>355,8153=>355,8154=>529,8155=>505,8157=>450,8158=>450,8159=>450, +8160=>547,8161=>547,8162=>547,8163=>547,8164=>529,8165=>529,8166=>547,8167=>547,8168=>594,8169=>594, +8170=>829,8171=>808,8172=>711,8173=>450,8174=>450,8175=>450,8178=>734,8179=>734,8180=>734,8182=>734, +8183=>734,8184=>865,8185=>751,8186=>886,8187=>767,8188=>746,8189=>450,8190=>450,8192=>450,8193=>900, +8194=>450,8195=>900,8196=>296,8197=>225,8198=>150,8199=>572,8200=>286,8201=>180,8202=>89,8203=>0, +8204=>0,8205=>0,8206=>0,8207=>0,8208=>304,8209=>304,8210=>572,8213=>900,8214=>450,8215=>450, +8219=>286,8223=>460,8227=>531,8228=>301,8229=>600,8234=>0,8235=>0,8236=>0,8237=>0,8238=>0, +8239=>180,8241=>1560,8242=>204,8243=>336,8244=>468,8245=>204,8246=>336,8247=>468,8248=>305,8252=>475, +8253=>482,8254=>450,8258=>900,8260=>150,8261=>351,8262=>351,8263=>878,8264=>678,8265=>678,8267=>572, +8268=>450,8269=>450,8270=>450,8271=>303,8273=>450,8274=>404,8275=>900,8279=>597,8287=>200,8288=>0, +8289=>0,8290=>0,8291=>0,8292=>0,8298=>0,8299=>0,8300=>0,8301=>0,8302=>0,8303=>0, +8304=>360,8305=>181,8308=>360,8309=>360,8310=>360,8311=>360,8312=>360,8313=>360,8314=>475,8315=>475, +8316=>475,8317=>221,8318=>221,8319=>365,8320=>360,8321=>360,8322=>360,8323=>360,8324=>360,8325=>360, +8326=>360,8327=>360,8328=>360,8329=>360,8330=>475,8331=>475,8332=>475,8333=>221,8334=>221,8336=>347, +8337=>348,8338=>347,8339=>319,8340=>348,8358=>594,8367=>951,8369=>635,8372=>702,8373=>572,8377=>572, +8451=>1006,8457=>942,8462=>580,8463=>580,8470=>852,8486=>746,8487=>746,8490=>672,8491=>650,8513=>697, +8514=>501,8515=>501,8516=>549,8523=>801,8528=>872,8529=>872,8530=>1233,8531=>872,8532=>872,8533=>872, +8534=>872,8535=>872,8536=>872,8537=>872,8538=>872,8539=>872,8540=>872,8541=>872,8542=>872,8543=>511, +8544=>355,8545=>531,8546=>707,8547=>870,8548=>650,8549=>883,8550=>1059,8551=>1234,8552=>838,8553=>641, +8554=>839,8555=>1015,8556=>598,8557=>688,8558=>721,8559=>921,8560=>288,8561=>576,8562=>863,8563=>796, +8564=>508,8565=>796,8566=>1084,8567=>1372,8568=>795,8569=>507,8570=>795,8571=>1083,8572=>288,8573=>504, +8574=>576,8575=>853,8576=>1085,8577=>721,8578=>1085,8579=>688,8580=>504,8581=>688,8585=>872,8592=>754, +8593=>754,8594=>754,8595=>754,8596=>754,8597=>754,8598=>754,8599=>754,8600=>754,8601=>754,8602=>754, +8603=>754,8604=>754,8605=>754,8606=>754,8607=>754,8608=>754,8609=>754,8610=>754,8611=>754,8612=>754, +8613=>754,8614=>754,8615=>754,8616=>754,8617=>754,8618=>754,8619=>754,8620=>754,8621=>754,8622=>754, +8623=>754,8624=>754,8625=>754,8626=>754,8627=>754,8628=>754,8629=>754,8630=>754,8631=>754,8632=>754, +8633=>754,8634=>754,8635=>754,8636=>754,8637=>754,8638=>754,8639=>754,8640=>754,8641=>754,8642=>754, +8643=>754,8644=>754,8645=>754,8646=>754,8647=>754,8648=>754,8649=>754,8650=>754,8651=>754,8652=>754, +8653=>754,8654=>754,8655=>754,8656=>754,8657=>754,8658=>754,8659=>754,8660=>754,8661=>754,8662=>754, +8663=>754,8664=>754,8665=>754,8666=>754,8667=>754,8668=>754,8669=>754,8670=>754,8671=>754,8672=>754, +8673=>754,8674=>754,8675=>754,8676=>754,8677=>754,8678=>754,8679=>754,8680=>754,8681=>754,8682=>754, +8683=>754,8684=>754,8685=>754,8686=>754,8687=>754,8688=>754,8689=>754,8690=>754,8691=>754,8692=>754, +8693=>754,8694=>754,8695=>754,8696=>754,8697=>754,8698=>754,8699=>754,8700=>754,8701=>754,8702=>754, +8703=>754,8704=>543,8706=>465,8707=>488,8708=>488,8710=>628,8711=>628,8712=>666,8713=>666,8715=>666, +8716=>666,8719=>716,8720=>716,8721=>642,8722=>754,8723=>754,8724=>754,8725=>303,8727=>611,8728=>441, +8729=>441,8730=>573,8731=>573,8732=>573,8733=>609,8734=>750,8735=>754,8736=>754,8739=>262,8740=>431, +8741=>416,8742=>570,8743=>659,8744=>659,8745=>754,8746=>754,8747=>469,8748=>766,8749=>1063,8760=>754, +8761=>754,8762=>754,8763=>754,8764=>754,8765=>754,8770=>754,8771=>754,8776=>754,8784=>754,8785=>754, +8786=>754,8787=>754,8788=>930,8789=>930,8800=>754,8801=>754,8804=>754,8805=>754,8834=>754,8835=>754, +8836=>754,8837=>754,8838=>754,8839=>754,8844=>754,8845=>754,8846=>754,8847=>761,8848=>761,8849=>761, +8850=>761,8851=>754,8852=>754,8853=>754,8854=>754,8855=>754,8856=>754,8857=>754,8858=>754,8859=>754, +8860=>754,8861=>754,8862=>754,8863=>754,8864=>754,8865=>754,8866=>773,8867=>773,8868=>846,8869=>846, +8870=>510,8871=>510,8872=>773,8873=>773,8874=>773,8875=>927,8876=>773,8877=>773,8878=>773,8879=>927, +8901=>308,8962=>687,8968=>351,8969=>351,8970=>351,8971=>351,8976=>754,8977=>461,8984=>900,8985=>754, +8992=>469,8993=>469,8997=>900,9000=>1299,9085=>827,9115=>450,9116=>450,9117=>450,9118=>450,9119=>450, +9120=>450,9121=>450,9122=>450,9123=>450,9124=>450,9125=>450,9126=>450,9127=>675,9128=>675,9129=>675, +9130=>675,9131=>675,9132=>675,9133=>675,9134=>469,9167=>850,9251=>687,9472=>542,9473=>542,9474=>542, +9475=>542,9476=>542,9477=>542,9478=>542,9479=>542,9480=>542,9481=>542,9482=>542,9483=>542,9484=>542, +9485=>542,9486=>542,9487=>542,9488=>542,9489=>542,9490=>542,9491=>542,9492=>542,9493=>542,9494=>542, +9495=>542,9496=>542,9497=>542,9498=>542,9499=>542,9500=>542,9501=>542,9502=>542,9503=>542,9504=>542, +9505=>542,9506=>542,9507=>542,9508=>542,9509=>542,9510=>542,9511=>542,9512=>542,9513=>542,9514=>542, +9515=>542,9516=>542,9517=>542,9518=>542,9519=>542,9520=>542,9521=>542,9522=>542,9523=>542,9524=>542, +9525=>542,9526=>542,9527=>542,9528=>542,9529=>542,9530=>542,9531=>542,9532=>542,9533=>542,9534=>542, +9535=>542,9536=>542,9537=>542,9538=>542,9539=>542,9540=>542,9541=>542,9542=>542,9543=>542,9544=>542, +9545=>542,9546=>542,9547=>542,9548=>542,9549=>542,9550=>542,9551=>542,9552=>542,9553=>542,9554=>542, +9555=>542,9556=>542,9557=>542,9558=>542,9559=>542,9560=>542,9561=>542,9562=>542,9563=>542,9564=>542, +9565=>542,9566=>542,9567=>542,9568=>542,9569=>542,9570=>542,9571=>542,9572=>542,9573=>542,9574=>542, +9575=>542,9576=>542,9577=>542,9578=>542,9579=>542,9580=>542,9581=>542,9582=>542,9583=>542,9584=>542, +9585=>542,9586=>542,9587=>542,9588=>542,9589=>542,9590=>542,9591=>542,9592=>542,9593=>542,9594=>542, +9595=>542,9596=>542,9597=>542,9598=>542,9599=>542,9600=>692,9601=>692,9602=>692,9603=>692,9604=>692, +9605=>692,9606=>692,9607=>692,9608=>692,9609=>692,9610=>692,9611=>692,9612=>692,9613=>692,9614=>692, +9615=>692,9616=>692,9617=>692,9618=>692,9619=>692,9620=>692,9621=>692,9622=>692,9623=>692,9624=>692, +9625=>692,9626=>692,9627=>692,9628=>692,9629=>692,9630=>692,9631=>692,9632=>850,9633=>850,9634=>850, +9635=>850,9636=>850,9637=>850,9638=>850,9639=>850,9640=>850,9641=>850,9642=>610,9643=>610,9644=>850, +9645=>850,9646=>495,9647=>495,9648=>692,9649=>692,9650=>692,9651=>692,9652=>452,9653=>452,9654=>692, +9655=>692,9656=>452,9657=>452,9658=>692,9659=>692,9660=>692,9661=>692,9662=>452,9663=>452,9664=>692, +9665=>692,9666=>452,9667=>452,9668=>692,9669=>692,9670=>692,9671=>692,9672=>692,9673=>785,9674=>444, +9675=>785,9676=>785,9677=>785,9678=>785,9679=>785,9680=>785,9681=>785,9682=>785,9683=>785,9684=>785, +9685=>785,9686=>474,9687=>474,9688=>712,9689=>873,9690=>873,9691=>873,9692=>348,9693=>348,9694=>348, +9695=>348,9696=>785,9697=>785,9698=>692,9699=>692,9700=>692,9701=>692,9702=>531,9703=>850,9704=>850, +9705=>850,9706=>850,9707=>850,9708=>692,9709=>692,9710=>692,9711=>1007,9712=>850,9713=>850,9714=>850, +9715=>850,9716=>785,9717=>785,9718=>785,9719=>785,9720=>692,9721=>692,9722=>692,9723=>747,9724=>747, +9725=>659,9726=>659,9727=>692,9728=>807,9784=>807,9785=>807,9786=>807,9787=>807,9788=>807,9791=>552, +9792=>658,9793=>658,9794=>807,9795=>807,9796=>807,9797=>807,9798=>807,9799=>807,9824=>807,9825=>807, +9826=>807,9827=>807,9828=>807,9829=>807,9830=>807,9831=>807,9833=>424,9834=>574,9835=>807,9836=>807, +9837=>424,9838=>321,9839=>435,10145=>754,10181=>351,10182=>351,10208=>444,10216=>351,10217=>351,10224=>754, +10225=>754,10226=>754,10227=>754,10228=>930,10229=>1290,10230=>1290,10231=>1290,10232=>1290,10233=>1290,10234=>1290, +10235=>1290,10236=>1290,10237=>1290,10238=>1290,10239=>1290,10240=>659,10241=>659,10242=>659,10243=>659,10244=>659, +10245=>659,10246=>659,10247=>659,10248=>659,10249=>659,10250=>659,10251=>659,10252=>659,10253=>659,10254=>659, +10255=>659,10256=>659,10257=>659,10258=>659,10259=>659,10260=>659,10261=>659,10262=>659,10263=>659,10264=>659, +10265=>659,10266=>659,10267=>659,10268=>659,10269=>659,10270=>659,10271=>659,10272=>659,10273=>659,10274=>659, +10275=>659,10276=>659,10277=>659,10278=>659,10279=>659,10280=>659,10281=>659,10282=>659,10283=>659,10284=>659, +10285=>659,10286=>659,10287=>659,10288=>659,10289=>659,10290=>659,10291=>659,10292=>659,10293=>659,10294=>659, +10295=>659,10296=>659,10297=>659,10298=>659,10299=>659,10300=>659,10301=>659,10302=>659,10303=>659,10304=>659, +10305=>659,10306=>659,10307=>659,10308=>659,10309=>659,10310=>659,10311=>659,10312=>659,10313=>659,10314=>659, +10315=>659,10316=>659,10317=>659,10318=>659,10319=>659,10320=>659,10321=>659,10322=>659,10323=>659,10324=>659, +10325=>659,10326=>659,10327=>659,10328=>659,10329=>659,10330=>659,10331=>659,10332=>659,10333=>659,10334=>659, +10335=>659,10336=>659,10337=>659,10338=>659,10339=>659,10340=>659,10341=>659,10342=>659,10343=>659,10344=>659, +10345=>659,10346=>659,10347=>659,10348=>659,10349=>659,10350=>659,10351=>659,10352=>659,10353=>659,10354=>659, +10355=>659,10356=>659,10357=>659,10358=>659,10359=>659,10360=>659,10361=>659,10362=>659,10363=>659,10364=>659, +10365=>659,10366=>659,10367=>659,10368=>659,10369=>659,10370=>659,10371=>659,10372=>659,10373=>659,10374=>659, +10375=>659,10376=>659,10377=>659,10378=>659,10379=>659,10380=>659,10381=>659,10382=>659,10383=>659,10384=>659, +10385=>659,10386=>659,10387=>659,10388=>659,10389=>659,10390=>659,10391=>659,10392=>659,10393=>659,10394=>659, +10395=>659,10396=>659,10397=>659,10398=>659,10399=>659,10400=>659,10401=>659,10402=>659,10403=>659,10404=>659, +10405=>659,10406=>659,10407=>659,10408=>659,10409=>659,10410=>659,10411=>659,10412=>659,10413=>659,10414=>659, +10415=>659,10416=>659,10417=>659,10418=>659,10419=>659,10420=>659,10421=>659,10422=>659,10423=>659,10424=>659, +10425=>659,10426=>659,10427=>659,10428=>659,10429=>659,10430=>659,10431=>659,10432=>659,10433=>659,10434=>659, +10435=>659,10436=>659,10437=>659,10438=>659,10439=>659,10440=>659,10441=>659,10442=>659,10443=>659,10444=>659, +10445=>659,10446=>659,10447=>659,10448=>659,10449=>659,10450=>659,10451=>659,10452=>659,10453=>659,10454=>659, +10455=>659,10456=>659,10457=>659,10458=>659,10459=>659,10460=>659,10461=>659,10462=>659,10463=>659,10464=>659, +10465=>659,10466=>659,10467=>659,10468=>659,10469=>659,10470=>659,10471=>659,10472=>659,10473=>659,10474=>659, +10475=>659,10476=>659,10477=>659,10478=>659,10479=>659,10480=>659,10481=>659,10482=>659,10483=>659,10484=>659, +10485=>659,10486=>659,10487=>659,10488=>659,10489=>659,10490=>659,10491=>659,10492=>659,10493=>659,10494=>659, +10495=>659,10496=>754,10497=>754,10498=>754,10499=>754,10500=>754,10501=>754,10502=>754,10503=>754,10504=>754, +10505=>754,10506=>754,10507=>754,10508=>754,10509=>754,10510=>754,10511=>754,10512=>754,10513=>754,10514=>754, +10515=>754,10516=>754,10517=>754,10518=>754,10519=>754,10520=>754,10521=>754,10522=>754,10523=>754,10524=>754, +10525=>754,10526=>754,10527=>754,10528=>754,10529=>754,10530=>754,10531=>754,10532=>754,10533=>754,10534=>754, +10535=>754,10536=>754,10537=>754,10538=>754,10539=>754,10540=>754,10541=>754,10542=>754,10543=>754,10544=>754, +10545=>754,10546=>754,10547=>754,10548=>754,10549=>754,10550=>754,10551=>754,10552=>754,10553=>754,10554=>754, +10555=>754,10556=>754,10557=>754,10558=>754,10559=>754,10560=>754,10561=>754,10562=>754,10563=>754,10564=>754, +10565=>754,10566=>754,10567=>754,10568=>754,10569=>754,10570=>754,10571=>754,10572=>754,10573=>754,10574=>754, +10575=>754,10576=>754,10577=>754,10578=>754,10579=>754,10580=>754,10581=>754,10582=>754,10583=>754,10584=>754, +10585=>754,10586=>754,10587=>754,10588=>754,10589=>754,10590=>754,10591=>754,10592=>754,10593=>754,10594=>754, +10595=>754,10596=>754,10597=>754,10598=>754,10599=>754,10600=>754,10601=>754,10602=>754,10603=>754,10604=>754, +10605=>754,10606=>754,10607=>754,10608=>754,10609=>754,10610=>754,10611=>754,10612=>754,10613=>754,10614=>754, +10615=>883,10616=>754,10617=>754,10618=>886,10619=>754,10620=>754,10621=>754,10622=>754,10623=>754,10731=>444, +10764=>1361,10765=>469,10766=>469,10799=>754,11008=>754,11009=>754,11010=>754,11011=>754,11012=>754,11013=>754, +11014=>754,11015=>754,11016=>754,11017=>754,11018=>754,11019=>754,11020=>754,11021=>754,11022=>754,11023=>754, +11024=>754,11025=>754,11026=>850,11027=>850,11028=>850,11029=>850,11030=>692,11031=>692,11032=>692,11033=>692, +11034=>850,11364=>677,11367=>785,11368=>580,11369=>672,11370=>545,11371=>625,11372=>474,11373=>704,11374=>921, +11375=>650,11376=>704,11377=>596,11378=>1017,11379=>845,11381=>666,11382=>478,11383=>630,11385=>451,11386=>542, +11388=>237,11389=>409,11390=>616,11391=>625,11520=>695,11521=>571,11522=>569,11523=>592,11524=>568,11525=>866, +11526=>680,11527=>864,11528=>555,11529=>581,11530=>866,11531=>568,11532=>581,11533=>866,11534=>580,11535=>779, +11536=>865,11537=>580,11538=>580,11539=>863,11540=>851,11541=>777,11542=>580,11543=>581,11544=>580,11545=>584, +11546=>619,11547=>571,11548=>883,11549=>613,11550=>608,11551=>766,11552=>861,11553=>569,11554=>580,11555=>582, +11556=>674,11557=>822,11800=>482,11810=>351,11811=>351,11812=>351,11813=>351,11822=>482,42564=>616,42565=>461, +42566=>355,42567=>353,42576=>994,42577=>845,42580=>1074,42581=>783,42582=>1025,42583=>787,42760=>444,42761=>444, +42762=>444,42763=>444,42764=>444,42765=>444,42766=>444,42767=>444,42768=>444,42769=>444,42770=>444,42771=>444, +42772=>444,42773=>444,42774=>444,42779=>332,42780=>332,42781=>228,42782=>228,42783=>228,42813=>657,42891=>361, +42892=>247,42893=>695,62464=>598,62465=>607,62466=>651,62467=>861,62468=>607,62469=>602,62470=>661,62471=>896, +62472=>607,62473=>607,62474=>1141,62475=>624,62476=>623,62477=>866,62478=>607,62479=>623,62480=>908,62481=>681, +62482=>728,62483=>682,62484=>859,62485=>622,62486=>852,62487=>621,62488=>628,62489=>623,62490=>665,62491=>623, +62492=>628,62493=>608,62494=>665,62495=>805,62496=>607,62497=>707,62498=>608,62499=>607,62500=>607,62501=>659, +62502=>875,62504=>813,63172=>455,63173=>542,63174=>576,63175=>580,63176=>853,63185=>450,63188=>450,64256=>637, +64257=>600,64258=>600,64259=>847,64260=>887,64261=>669,64262=>824,65024=>0,65025=>0,65026=>0,65027=>0, +65028=>0,65029=>0,65030=>0,65031=>0,65032=>0,65033=>0,65034=>0,65035=>0,65036=>0,65037=>0, +65038=>0,65039=>0,65529=>0,65530=>0,65531=>0,65532=>0,65533=>923); +$enc=''; +$diff=''; +$file='dejavuserifcondensedi.z'; +$ctg='dejavuserifcondensedi.ctg.z'; +$originalsize=310024; +// --- EOF --- --- /dev/null +++ b/tcpdf/fonts/dejavuserifi.php @@ -1,1 +1,322 @@ - +928,'Descent'=>-236,'CapHeight'=>-65,'Flags'=>96,'FontBBox'=>'[-839 -347 1650 1109]','ItalicAngle'=>-11,'StemV'=>70,'MissingWidth'=>600); +$up=-63; +$ut=44; +$dw=600; +$cw=array( +0=>600,32=>318,33=>402,34=>460,35=>838,36=>636,37=>950,38=>890,39=>275,40=>390, +41=>390,42=>500,43=>838,44=>318,45=>338,46=>318,47=>337,48=>636,49=>636,50=>636, +51=>636,52=>636,53=>636,54=>636,55=>636,56=>636,57=>636,58=>337,59=>337,60=>838, +61=>838,62=>838,63=>536,64=>1000,65=>722,66=>735,67=>765,68=>802,69=>730,70=>694, +71=>799,72=>872,73=>395,74=>401,75=>747,76=>664,77=>1024,78=>875,79=>820,80=>673, +81=>820,82=>753,83=>685,84=>667,85=>843,86=>722,87=>1028,88=>712,89=>660,90=>695, +91=>390,92=>337,93=>390,94=>838,95=>500,96=>500,97=>596,98=>640,99=>560,100=>640, +101=>592,102=>370,103=>640,104=>644,105=>320,106=>310,107=>606,108=>320,109=>948,110=>644, +111=>602,112=>640,113=>640,114=>478,115=>513,116=>402,117=>644,118=>565,119=>856,120=>564, +121=>565,122=>527,123=>636,124=>337,125=>636,126=>838,8364=>636,8218=>318,402=>370,8222=>518, +8230=>1000,8224=>500,8225=>500,710=>500,8240=>1342,352=>685,8249=>400,338=>1137,381=>695,8216=>318, +8217=>318,8220=>511,8221=>511,8226=>590,8211=>500,8212=>1000,732=>500,8482=>1000,353=>513,8250=>400, +339=>989,382=>527,376=>660,160=>318,161=>402,162=>636,163=>636,164=>636,165=>636,166=>337, +167=>500,168=>500,169=>1000,170=>475,171=>612,172=>838,173=>338,174=>1000,175=>500,176=>500, +177=>838,178=>401,179=>401,180=>500,181=>650,182=>636,183=>318,184=>500,185=>401,186=>470, +187=>612,188=>969,189=>969,190=>969,191=>536,192=>722,193=>722,194=>722,195=>722,196=>722, +197=>722,198=>1001,199=>765,200=>730,201=>730,202=>730,203=>730,204=>395,205=>395,206=>395, +207=>395,208=>807,209=>875,210=>820,211=>820,212=>820,213=>820,214=>820,215=>838,216=>820, +217=>843,218=>843,219=>843,220=>843,221=>660,222=>676,223=>668,224=>596,225=>596,226=>596, +227=>596,228=>596,229=>596,230=>940,231=>560,232=>592,233=>592,234=>592,235=>592,236=>320, +237=>320,238=>320,239=>320,240=>602,241=>644,242=>602,243=>602,244=>602,245=>602,246=>602, +247=>838,248=>602,249=>644,250=>644,251=>644,252=>644,253=>565,254=>640,255=>565,256=>722, +257=>596,258=>722,259=>596,260=>722,261=>596,262=>765,263=>560,264=>765,265=>560,266=>765, +267=>560,268=>765,269=>560,270=>802,271=>640,272=>807,273=>640,274=>730,275=>592,276=>730, +277=>592,278=>730,279=>592,280=>730,281=>592,282=>730,283=>592,284=>799,285=>640,286=>799, +287=>640,288=>799,289=>640,290=>799,291=>640,292=>872,293=>644,294=>872,295=>644,296=>395, +297=>320,298=>395,299=>320,300=>395,301=>320,302=>395,303=>320,304=>395,305=>320,306=>801, +307=>533,308=>401,309=>310,310=>747,311=>606,312=>606,313=>664,314=>320,315=>664,316=>320, +317=>664,318=>400,319=>671,320=>465,321=>669,322=>324,323=>875,324=>644,325=>875,326=>644, +327=>875,328=>644,329=>866,330=>843,331=>644,332=>820,333=>602,334=>820,335=>602,336=>820, +337=>602,340=>753,341=>478,342=>753,343=>478,344=>753,345=>478,346=>685,347=>513,348=>685, +349=>513,350=>685,351=>513,354=>667,355=>402,356=>667,357=>402,358=>667,359=>402,360=>843, +361=>644,362=>843,363=>644,364=>843,365=>644,366=>843,367=>644,368=>843,369=>644,370=>843, +371=>644,372=>1028,373=>856,374=>660,375=>565,377=>695,378=>527,379=>695,380=>527,383=>370, +384=>640,385=>735,386=>735,387=>640,388=>735,389=>640,390=>765,391=>765,392=>560,393=>807, +394=>802,395=>735,396=>640,397=>602,398=>730,399=>820,400=>623,401=>694,403=>799,404=>712, +405=>932,406=>395,407=>395,408=>747,409=>606,410=>320,411=>634,412=>948,413=>875,414=>644, +415=>820,416=>820,417=>602,418=>1040,419=>807,420=>673,421=>640,422=>753,423=>685,424=>513, +425=>707,426=>324,427=>402,428=>667,429=>402,430=>667,431=>843,432=>644,433=>829,434=>760, +435=>738,436=>745,437=>695,438=>527,439=>564,440=>564,441=>564,443=>636,444=>687,445=>564, +446=>536,447=>635,448=>295,449=>492,450=>459,451=>295,452=>1497,453=>1329,454=>1167,455=>1065, +456=>974,457=>630,458=>1276,459=>1185,460=>954,461=>722,462=>596,463=>395,464=>320,465=>820, +466=>602,467=>843,468=>644,469=>843,470=>644,471=>843,472=>644,473=>843,474=>644,475=>843, +476=>644,477=>592,478=>722,479=>596,480=>722,481=>596,482=>1001,483=>940,484=>848,485=>640, +486=>799,487=>640,488=>747,489=>606,490=>820,491=>602,492=>820,493=>602,494=>564,495=>564, +496=>320,497=>1497,498=>1329,499=>1167,500=>799,501=>640,502=>1154,503=>707,504=>875,505=>644, +506=>722,507=>596,508=>1001,509=>940,510=>820,511=>602,512=>722,513=>596,514=>722,515=>596, +516=>730,517=>592,518=>730,519=>592,520=>395,521=>320,522=>395,523=>320,524=>820,525=>602, +526=>820,527=>602,528=>753,529=>478,530=>753,531=>478,532=>843,533=>644,534=>843,535=>644, +536=>685,537=>513,538=>667,539=>402,540=>627,541=>521,542=>872,543=>644,544=>843,545=>814, +546=>586,547=>552,548=>695,549=>527,550=>722,551=>596,552=>730,553=>592,554=>820,555=>602, +556=>820,557=>602,558=>820,559=>602,560=>820,561=>602,562=>660,563=>565,564=>500,565=>832, +566=>494,567=>310,568=>960,569=>960,570=>722,571=>765,572=>560,573=>664,574=>667,575=>513, +576=>527,577=>583,578=>464,579=>735,580=>843,581=>722,582=>730,583=>592,584=>401,585=>315, +586=>782,587=>640,588=>753,589=>478,590=>660,591=>565,592=>596,593=>640,594=>675,595=>640, +596=>560,597=>560,598=>647,599=>683,600=>592,601=>592,602=>843,603=>537,604=>509,605=>773, +606=>613,607=>315,608=>683,609=>640,610=>544,611=>712,612=>564,613=>644,614=>644,615=>644, +616=>320,617=>392,618=>320,619=>380,620=>454,621=>363,622=>704,623=>948,624=>948,625=>948, +626=>644,627=>694,628=>646,629=>602,630=>790,631=>647,632=>602,633=>501,634=>501,635=>551, +636=>478,637=>478,638=>453,639=>453,640=>594,641=>594,642=>513,643=>271,644=>370,645=>487, +646=>324,647=>402,648=>402,649=>644,650=>620,651=>608,652=>565,653=>856,654=>565,655=>655, +656=>597,657=>560,658=>564,659=>560,660=>536,661=>536,662=>536,663=>513,664=>820,665=>563, +666=>613,667=>654,668=>667,669=>366,670=>606,671=>646,672=>683,673=>536,674=>536,675=>996, +676=>1033,677=>998,678=>809,679=>598,680=>782,681=>894,682=>646,683=>676,684=>598,685=>443, +686=>781,687=>767,688=>433,689=>430,690=>264,691=>347,692=>347,693=>430,694=>392,695=>539, +696=>355,697=>278,699=>318,700=>318,701=>318,702=>307,703=>307,704=>280,705=>281,711=>500, +712=>282,713=>500,716=>282,717=>500,720=>337,721=>337,722=>307,723=>307,726=>392,728=>500, +729=>500,730=>500,731=>500,733=>500,734=>417,736=>448,737=>243,738=>337,739=>355,740=>281, +741=>493,742=>493,743=>493,744=>493,745=>493,750=>484,768=>0,769=>0,770=>0,771=>0, +772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0, +782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0, +792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0, +802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0, +812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0, +822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0, +835=>0,847=>0,856=>0,865=>0,880=>740,881=>531,884=>278,885=>278,890=>500,891=>560, +892=>560,893=>560,894=>337,900=>500,901=>500,902=>722,903=>318,904=>900,905=>1039,906=>562, +908=>835,910=>897,911=>853,912=>392,913=>722,914=>735,915=>694,916=>722,917=>730,918=>695, +919=>872,920=>820,921=>395,922=>747,923=>722,924=>1024,925=>875,926=>704,927=>820,928=>872, +929=>673,931=>707,932=>667,933=>660,934=>820,935=>712,936=>877,937=>829,938=>395,939=>660, +940=>675,941=>537,942=>599,943=>392,944=>608,945=>675,946=>578,947=>598,948=>602,949=>537, +950=>542,951=>599,952=>602,953=>392,954=>656,955=>634,956=>650,957=>608,958=>551,959=>602, +960=>657,961=>588,962=>560,963=>683,964=>553,965=>608,966=>700,967=>606,968=>784,969=>815, +970=>392,971=>608,972=>602,973=>608,974=>815,976=>583,977=>715,978=>687,979=>874,980=>687, +981=>682,982=>815,983=>624,984=>820,985=>602,986=>765,987=>560,988=>694,989=>463,990=>590, +991=>660,992=>782,993=>577,1008=>624,1009=>588,1010=>560,1011=>310,1012=>820,1013=>560,1014=>560, +1015=>676,1016=>640,1017=>765,1018=>1024,1019=>708,1020=>588,1021=>765,1022=>765,1023=>765,1024=>730, +1025=>730,1026=>799,1027=>662,1028=>765,1029=>685,1030=>395,1031=>395,1032=>401,1033=>1084,1034=>1118, +1035=>872,1036=>774,1037=>872,1038=>723,1039=>872,1040=>757,1041=>735,1042=>735,1043=>662,1044=>813, +1045=>730,1046=>1124,1047=>623,1048=>872,1049=>872,1050=>774,1051=>834,1052=>1024,1053=>872,1054=>820, +1055=>872,1056=>673,1057=>765,1058=>667,1059=>723,1060=>830,1061=>712,1062=>872,1063=>773,1064=>1141, +1065=>1141,1066=>794,1067=>984,1068=>674,1069=>765,1070=>1193,1071=>808,1072=>596,1073=>610,1074=>582, +1075=>505,1076=>634,1077=>592,1078=>1137,1079=>545,1080=>644,1081=>644,1082=>597,1083=>637,1084=>829, +1085=>659,1086=>602,1087=>644,1088=>640,1089=>560,1090=>948,1091=>580,1092=>783,1093=>564,1094=>698, +1095=>622,1096=>947,1097=>1001,1098=>667,1099=>814,1100=>544,1101=>560,1102=>880,1103=>662,1104=>592, +1105=>592,1106=>624,1107=>505,1108=>560,1109=>513,1110=>320,1111=>320,1112=>310,1113=>859,1114=>878, +1115=>644,1116=>597,1117=>644,1118=>580,1119=>644,1122=>762,1123=>882,1124=>1129,1125=>834,1130=>1124, +1131=>920,1136=>944,1137=>902,1138=>820,1139=>552,1140=>859,1141=>678,1164=>707,1165=>544,1168=>672, +1169=>529,1170=>662,1171=>505,1172=>730,1173=>614,1174=>1124,1175=>1137,1176=>623,1177=>545,1178=>774, +1179=>604,1182=>774,1183=>597,1184=>892,1185=>669,1186=>872,1187=>712,1188=>1139,1189=>857,1190=>1206, +1191=>943,1194=>765,1195=>560,1196=>667,1197=>1013,1198=>660,1199=>571,1200=>660,1201=>571,1202=>712, +1203=>629,1204=>936,1205=>732,1206=>749,1207=>677,1210=>749,1211=>644,1216=>395,1217=>1124,1218=>1137, +1219=>747,1220=>606,1223=>872,1224=>667,1227=>749,1228=>667,1231=>320,1232=>757,1233=>596,1234=>757, +1235=>596,1236=>1001,1237=>940,1238=>730,1239=>592,1240=>820,1241=>592,1242=>820,1243=>592,1244=>1124, +1245=>1137,1246=>623,1247=>545,1248=>564,1249=>564,1250=>872,1251=>644,1252=>872,1253=>644,1254=>820, +1255=>602,1256=>820,1257=>602,1258=>820,1259=>602,1260=>765,1261=>560,1262=>723,1263=>580,1264=>723, +1265=>580,1266=>723,1267=>580,1268=>773,1269=>622,1270=>662,1271=>505,1272=>984,1273=>814,1296=>623, +1297=>545,1298=>834,1299=>637,1300=>1199,1301=>939,1306=>820,1307=>640,1308=>1028,1309=>856,4256=>732, +4257=>860,4258=>837,4259=>869,4260=>743,4261=>991,4262=>925,4263=>1111,4264=>576,4265=>760,4266=>972, +4267=>951,4268=>753,4269=>1084,4270=>906,4271=>838,4272=>1049,4273=>743,4274=>679,4275=>1025,4276=>946, +4277=>1029,4278=>741,4279=>743,4280=>742,4281=>743,4282=>889,4283=>946,4284=>724,4285=>765,4286=>743, +4287=>968,4288=>1010,4289=>712,4290=>874,4291=>744,4292=>847,4293=>960,4304=>550,4305=>581,4306=>599, +4307=>843,4308=>571,4309=>567,4310=>620,4311=>871,4312=>569,4313=>556,4314=>1076,4315=>596,4316=>596, +4317=>835,4318=>580,4319=>590,4320=>833,4321=>607,4322=>758,4323=>701,4324=>825,4325=>595,4326=>868, +4327=>578,4328=>604,4329=>596,4330=>685,4331=>597,4332=>557,4333=>585,4334=>625,4335=>693,4336=>582, +4337=>613,4338=>581,4339=>582,4340=>580,4341=>659,4342=>896,4343=>636,4344=>592,4345=>628,4346=>581, +4347=>456,4348=>373,7426=>940,7432=>509,7433=>320,7444=>989,7446=>602,7447=>602,7453=>737,7454=>948, +7455=>948,7468=>455,7469=>630,7470=>463,7472=>505,7473=>459,7474=>459,7475=>503,7476=>549,7477=>249, +7478=>252,7479=>470,7480=>418,7481=>645,7482=>551,7483=>551,7484=>516,7486=>424,7487=>474,7488=>420, +7489=>531,7490=>647,7491=>386,7492=>386,7493=>400,7494=>618,7495=>400,7496=>400,7497=>387,7498=>387, +7499=>428,7500=>340,7501=>400,7502=>175,7503=>365,7504=>613,7505=>399,7506=>385,7507=>346,7508=>385, +7509=>385,7510=>400,7511=>247,7512=>399,7513=>464,7514=>613,7515=>373,7522=>201,7523=>347,7524=>399, +7525=>373,7543=>640,7544=>549,7547=>372,7557=>320,7579=>488,7580=>353,7581=>353,7582=>473,7583=>428, +7584=>233,7585=>316,7586=>488,7587=>399,7588=>201,7589=>201,7590=>201,7591=>201,7592=>318,7593=>263, +7594=>263,7595=>455,7596=>613,7597=>613,7598=>495,7599=>492,7600=>487,7601=>385,7602=>473,7603=>416, +7604=>299,7605=>334,7606=>399,7607=>477,7609=>464,7610=>355,7611=>332,7612=>418,7613=>418,7614=>452, +7615=>473,7620=>0,7621=>0,7622=>0,7623=>0,7624=>0,7625=>0,7680=>722,7681=>596,7682=>735, +7683=>640,7684=>735,7685=>640,7686=>735,7687=>640,7688=>765,7689=>560,7690=>802,7691=>640,7692=>802, +7693=>640,7694=>802,7695=>640,7696=>802,7697=>640,7698=>802,7699=>640,7700=>730,7701=>592,7702=>730, +7703=>592,7704=>730,7705=>592,7706=>730,7707=>592,7708=>730,7709=>592,7710=>694,7711=>370,7712=>799, +7713=>640,7714=>872,7715=>644,7716=>872,7717=>644,7718=>872,7719=>644,7720=>872,7721=>644,7722=>872, +7723=>644,7724=>395,7725=>320,7726=>395,7727=>320,7728=>747,7729=>606,7730=>747,7731=>606,7732=>747, +7733=>606,7734=>664,7735=>320,7736=>664,7737=>320,7738=>664,7739=>320,7740=>664,7741=>320,7742=>1024, +7743=>948,7744=>1024,7745=>948,7746=>1024,7747=>953,7748=>875,7749=>644,7750=>875,7751=>644,7752=>875, +7753=>644,7754=>875,7755=>644,7756=>820,7757=>602,7758=>820,7759=>602,7760=>820,7761=>602,7762=>820, +7763=>602,7764=>673,7765=>640,7766=>673,7767=>640,7768=>753,7769=>478,7770=>753,7771=>478,7772=>753, +7773=>478,7774=>753,7775=>478,7776=>685,7777=>513,7778=>685,7779=>513,7780=>685,7781=>513,7782=>685, +7783=>521,7784=>685,7785=>513,7786=>667,7787=>402,7788=>667,7789=>402,7790=>667,7791=>402,7792=>667, +7793=>402,7794=>843,7795=>644,7796=>843,7797=>644,7798=>843,7799=>644,7800=>843,7801=>644,7802=>843, +7803=>644,7804=>722,7805=>565,7806=>722,7807=>565,7808=>1028,7809=>856,7810=>1028,7811=>856,7812=>1028, +7813=>856,7814=>1028,7815=>856,7816=>1028,7817=>856,7818=>712,7819=>564,7820=>712,7821=>564,7822=>660, +7823=>565,7824=>695,7825=>527,7826=>695,7827=>527,7828=>695,7829=>527,7830=>644,7831=>402,7832=>856, +7833=>565,7834=>903,7835=>370,7838=>829,7839=>602,7840=>722,7841=>596,7842=>722,7843=>596,7844=>722, +7845=>613,7846=>722,7847=>613,7848=>722,7849=>613,7850=>722,7851=>613,7852=>722,7853=>596,7854=>722, +7855=>596,7856=>722,7857=>596,7858=>722,7859=>596,7860=>722,7861=>596,7862=>722,7863=>596,7864=>730, +7865=>592,7866=>730,7867=>592,7868=>730,7869=>592,7870=>730,7871=>615,7872=>730,7873=>615,7874=>730, +7875=>615,7876=>730,7877=>615,7878=>730,7879=>592,7880=>395,7881=>320,7882=>395,7883=>320,7884=>820, +7885=>602,7886=>820,7887=>602,7888=>820,7889=>612,7890=>820,7891=>612,7892=>820,7893=>612,7894=>820, +7895=>612,7896=>820,7897=>602,7898=>820,7899=>602,7900=>820,7901=>602,7902=>820,7903=>602,7904=>820, +7905=>602,7906=>820,7907=>602,7908=>843,7909=>644,7910=>843,7911=>644,7912=>843,7913=>644,7914=>843, +7915=>644,7916=>843,7917=>644,7918=>843,7919=>644,7920=>843,7921=>644,7922=>660,7923=>565,7924=>660, +7925=>565,7926=>660,7927=>565,7928=>660,7929=>565,7936=>675,7937=>675,7938=>675,7939=>675,7940=>675, +7941=>675,7942=>675,7943=>675,7944=>722,7945=>722,7946=>869,7947=>869,7948=>734,7949=>763,7950=>722, +7951=>722,7952=>537,7953=>537,7954=>537,7955=>537,7956=>537,7957=>537,7960=>853,7961=>841,7962=>1067, +7963=>1077,7964=>1008,7965=>1035,7968=>599,7969=>599,7970=>599,7971=>599,7972=>599,7973=>599,7974=>599, +7975=>599,7976=>998,7977=>992,7978=>1212,7979=>1224,7980=>1159,7981=>1183,7982=>1098,7983=>1095,7984=>392, +7985=>392,7986=>392,7987=>392,7988=>392,7989=>392,7990=>392,7991=>392,7992=>521,7993=>512,7994=>735, +7995=>738,7996=>679,7997=>706,7998=>624,7999=>615,8000=>602,8001=>602,8002=>602,8003=>602,8004=>602, +8005=>602,8008=>820,8009=>859,8010=>1120,8011=>1127,8012=>937,8013=>964,8016=>608,8017=>608,8018=>608, +8019=>608,8020=>608,8021=>608,8022=>608,8023=>608,8025=>851,8027=>1079,8029=>1044,8031=>953,8032=>815, +8033=>815,8034=>815,8035=>815,8036=>815,8037=>815,8038=>815,8039=>815,8040=>829,8041=>870,8042=>1131, +8043=>1137,8044=>946,8045=>976,8046=>938,8047=>970,8048=>675,8049=>675,8050=>537,8051=>537,8052=>599, +8053=>599,8054=>392,8055=>392,8056=>602,8057=>602,8058=>608,8059=>608,8060=>815,8061=>815,8064=>675, +8065=>675,8066=>675,8067=>675,8068=>675,8069=>675,8070=>675,8071=>675,8072=>722,8073=>722,8074=>869, +8075=>869,8076=>734,8077=>763,8078=>722,8079=>722,8080=>599,8081=>599,8082=>599,8083=>599,8084=>599, +8085=>599,8086=>599,8087=>599,8088=>998,8089=>992,8090=>1212,8091=>1224,8092=>1159,8093=>1183,8094=>1098, +8095=>1095,8096=>815,8097=>815,8098=>815,8099=>815,8100=>815,8101=>815,8102=>815,8103=>815,8104=>829, +8105=>870,8106=>1131,8107=>1137,8108=>946,8109=>976,8110=>938,8111=>970,8112=>675,8113=>675,8114=>675, +8115=>675,8116=>675,8118=>675,8119=>675,8120=>722,8121=>722,8122=>722,8123=>722,8124=>722,8125=>500, +8126=>500,8127=>500,8128=>500,8129=>500,8130=>599,8131=>599,8132=>599,8134=>599,8135=>599,8136=>912, +8137=>900,8138=>1063,8139=>1039,8140=>872,8141=>500,8142=>500,8143=>500,8144=>392,8145=>392,8146=>392, +8147=>392,8150=>392,8151=>392,8152=>395,8153=>395,8154=>588,8155=>562,8157=>500,8158=>500,8159=>500, +8160=>608,8161=>608,8162=>608,8163=>608,8164=>588,8165=>588,8166=>608,8167=>608,8168=>660,8169=>660, +8170=>921,8171=>897,8172=>790,8173=>500,8174=>500,8175=>500,8178=>815,8179=>815,8180=>815,8182=>815, +8183=>815,8184=>961,8185=>835,8186=>984,8187=>853,8188=>829,8189=>500,8190=>500,8192=>500,8193=>1000, +8194=>500,8195=>1000,8196=>330,8197=>250,8198=>167,8199=>636,8200=>318,8201=>200,8202=>100,8203=>0, +8204=>0,8205=>0,8206=>0,8207=>0,8208=>338,8209=>338,8210=>636,8213=>1000,8214=>500,8215=>500, +8219=>318,8223=>511,8227=>590,8228=>334,8229=>667,8234=>0,8235=>0,8236=>0,8237=>0,8238=>0, +8239=>200,8241=>1734,8242=>227,8243=>374,8244=>520,8245=>227,8246=>374,8247=>520,8248=>339,8252=>527, +8253=>536,8254=>500,8258=>1000,8260=>167,8261=>390,8262=>390,8263=>976,8264=>753,8265=>753,8267=>636, +8268=>500,8269=>500,8270=>500,8271=>337,8273=>500,8274=>450,8275=>1000,8279=>663,8287=>222,8288=>0, +8289=>0,8290=>0,8291=>0,8292=>0,8298=>0,8299=>0,8300=>0,8301=>0,8302=>0,8303=>0, +8304=>401,8305=>201,8308=>401,8309=>401,8310=>401,8311=>401,8312=>401,8313=>401,8314=>528,8315=>528, +8316=>528,8317=>246,8318=>246,8319=>405,8320=>401,8321=>401,8322=>401,8323=>401,8324=>401,8325=>401, +8326=>401,8327=>401,8328=>401,8329=>401,8330=>528,8331=>528,8332=>528,8333=>246,8334=>246,8336=>386, +8337=>387,8338=>385,8339=>355,8340=>387,8358=>660,8367=>1057,8369=>706,8372=>780,8373=>636,8377=>636, +8451=>1119,8457=>1047,8462=>644,8463=>644,8470=>946,8486=>829,8487=>829,8490=>747,8491=>722,8513=>775, +8514=>557,8515=>557,8516=>611,8523=>890,8528=>969,8529=>969,8530=>1370,8531=>969,8532=>969,8533=>969, +8534=>969,8535=>969,8536=>969,8537=>969,8538=>969,8539=>969,8540=>969,8541=>969,8542=>969,8543=>568, +8544=>395,8545=>590,8546=>786,8547=>966,8548=>722,8549=>981,8550=>1176,8551=>1372,8552=>932,8553=>712, +8554=>932,8555=>1127,8556=>664,8557=>765,8558=>802,8559=>1024,8560=>320,8561=>640,8562=>959,8563=>885, +8564=>565,8565=>885,8566=>1205,8567=>1524,8568=>884,8569=>564,8570=>884,8571=>1204,8572=>320,8573=>560, +8574=>640,8575=>948,8576=>1206,8577=>802,8578=>1206,8579=>765,8580=>560,8581=>765,8585=>969,8592=>838, +8593=>838,8594=>838,8595=>838,8596=>838,8597=>838,8598=>838,8599=>838,8600=>838,8601=>838,8602=>838, +8603=>838,8604=>838,8605=>838,8606=>838,8607=>838,8608=>838,8609=>838,8610=>838,8611=>838,8612=>838, +8613=>838,8614=>838,8615=>838,8616=>838,8617=>838,8618=>838,8619=>838,8620=>838,8621=>838,8622=>838, +8623=>838,8624=>838,8625=>838,8626=>838,8627=>838,8628=>838,8629=>838,8630=>838,8631=>838,8632=>838, +8633=>838,8634=>838,8635=>838,8636=>838,8637=>838,8638=>838,8639=>838,8640=>838,8641=>838,8642=>838, +8643=>838,8644=>838,8645=>838,8646=>838,8647=>838,8648=>838,8649=>838,8650=>838,8651=>838,8652=>838, +8653=>838,8654=>838,8655=>838,8656=>838,8657=>838,8658=>838,8659=>838,8660=>838,8661=>838,8662=>838, +8663=>838,8664=>838,8665=>838,8666=>838,8667=>838,8668=>838,8669=>838,8670=>838,8671=>838,8672=>838, +8673=>838,8674=>838,8675=>838,8676=>838,8677=>838,8678=>838,8679=>838,8680=>838,8681=>838,8682=>838, +8683=>838,8684=>838,8685=>838,8686=>838,8687=>838,8688=>838,8689=>838,8690=>838,8691=>838,8692=>838, +8693=>838,8694=>838,8695=>838,8696=>838,8697=>838,8698=>838,8699=>838,8700=>838,8701=>838,8702=>838, +8703=>838,8704=>604,8706=>517,8707=>542,8708=>542,8710=>698,8711=>698,8712=>740,8713=>740,8715=>740, +8716=>740,8719=>796,8720=>796,8721=>714,8722=>838,8723=>838,8724=>838,8725=>337,8727=>680,8728=>490, +8729=>490,8730=>637,8731=>637,8732=>637,8733=>677,8734=>833,8735=>838,8736=>838,8739=>291,8740=>479, +8741=>462,8742=>634,8743=>732,8744=>732,8745=>838,8746=>838,8747=>521,8748=>852,8749=>1182,8760=>838, +8761=>838,8762=>838,8763=>838,8764=>838,8765=>838,8770=>838,8771=>838,8776=>838,8784=>838,8785=>838, +8786=>838,8787=>838,8788=>1033,8789=>1033,8800=>838,8801=>838,8804=>838,8805=>838,8834=>838,8835=>838, +8836=>838,8837=>838,8838=>838,8839=>838,8844=>838,8845=>838,8846=>838,8847=>846,8848=>846,8849=>846, +8850=>846,8851=>838,8852=>838,8853=>838,8854=>838,8855=>838,8856=>838,8857=>838,8858=>838,8859=>838, +8860=>838,8861=>838,8862=>838,8863=>838,8864=>838,8865=>838,8866=>860,8867=>860,8868=>940,8869=>940, +8870=>567,8871=>567,8872=>860,8873=>860,8874=>860,8875=>1031,8876=>860,8877=>860,8878=>860,8879=>1031, +8901=>342,8962=>764,8968=>390,8969=>390,8970=>390,8971=>390,8976=>838,8977=>513,8984=>1000,8985=>838, +8992=>521,8993=>521,8997=>1000,9000=>1443,9085=>919,9115=>500,9116=>500,9117=>500,9118=>500,9119=>500, +9120=>500,9121=>500,9122=>500,9123=>500,9124=>500,9125=>500,9126=>500,9127=>750,9128=>750,9129=>750, +9130=>750,9131=>750,9132=>750,9133=>750,9134=>521,9167=>945,9251=>764,9472=>602,9473=>602,9474=>602, +9475=>602,9476=>602,9477=>602,9478=>602,9479=>602,9480=>602,9481=>602,9482=>602,9483=>602,9484=>602, +9485=>602,9486=>602,9487=>602,9488=>602,9489=>602,9490=>602,9491=>602,9492=>602,9493=>602,9494=>602, +9495=>602,9496=>602,9497=>602,9498=>602,9499=>602,9500=>602,9501=>602,9502=>602,9503=>602,9504=>602, +9505=>602,9506=>602,9507=>602,9508=>602,9509=>602,9510=>602,9511=>602,9512=>602,9513=>602,9514=>602, +9515=>602,9516=>602,9517=>602,9518=>602,9519=>602,9520=>602,9521=>602,9522=>602,9523=>602,9524=>602, +9525=>602,9526=>602,9527=>602,9528=>602,9529=>602,9530=>602,9531=>602,9532=>602,9533=>602,9534=>602, +9535=>602,9536=>602,9537=>602,9538=>602,9539=>602,9540=>602,9541=>602,9542=>602,9543=>602,9544=>602, +9545=>602,9546=>602,9547=>602,9548=>602,9549=>602,9550=>602,9551=>602,9552=>602,9553=>602,9554=>602, +9555=>602,9556=>602,9557=>602,9558=>602,9559=>602,9560=>602,9561=>602,9562=>602,9563=>602,9564=>602, +9565=>602,9566=>602,9567=>602,9568=>602,9569=>602,9570=>602,9571=>602,9572=>602,9573=>602,9574=>602, +9575=>602,9576=>602,9577=>602,9578=>602,9579=>602,9580=>602,9581=>602,9582=>602,9583=>602,9584=>602, +9585=>602,9586=>602,9587=>602,9588=>602,9589=>602,9590=>602,9591=>602,9592=>602,9593=>602,9594=>602, +9595=>602,9596=>602,9597=>602,9598=>602,9599=>602,9600=>769,9601=>769,9602=>769,9603=>769,9604=>769, +9605=>769,9606=>769,9607=>769,9608=>769,9609=>769,9610=>769,9611=>769,9612=>769,9613=>769,9614=>769, +9615=>769,9616=>769,9617=>769,9618=>769,9619=>769,9620=>769,9621=>769,9622=>769,9623=>769,9624=>769, +9625=>769,9626=>769,9627=>769,9628=>769,9629=>769,9630=>769,9631=>769,9632=>945,9633=>945,9634=>945, +9635=>945,9636=>945,9637=>945,9638=>945,9639=>945,9640=>945,9641=>945,9642=>678,9643=>678,9644=>945, +9645=>945,9646=>550,9647=>550,9648=>769,9649=>769,9650=>769,9651=>769,9652=>502,9653=>502,9654=>769, +9655=>769,9656=>502,9657=>502,9658=>769,9659=>769,9660=>769,9661=>769,9662=>502,9663=>502,9664=>769, +9665=>769,9666=>502,9667=>502,9668=>769,9669=>769,9670=>769,9671=>769,9672=>769,9673=>873,9674=>494, +9675=>873,9676=>873,9677=>873,9678=>873,9679=>873,9680=>873,9681=>873,9682=>873,9683=>873,9684=>873, +9685=>873,9686=>527,9687=>527,9688=>791,9689=>970,9690=>970,9691=>970,9692=>387,9693=>387,9694=>387, +9695=>387,9696=>873,9697=>873,9698=>769,9699=>769,9700=>769,9701=>769,9702=>590,9703=>945,9704=>945, +9705=>945,9706=>945,9707=>945,9708=>769,9709=>769,9710=>769,9711=>1119,9712=>945,9713=>945,9714=>945, +9715=>945,9716=>873,9717=>873,9718=>873,9719=>873,9720=>769,9721=>769,9722=>769,9723=>830,9724=>830, +9725=>732,9726=>732,9727=>769,9728=>896,9784=>896,9785=>896,9786=>896,9787=>896,9788=>896,9791=>614, +9792=>731,9793=>731,9794=>896,9795=>896,9796=>896,9797=>896,9798=>896,9799=>896,9824=>896,9825=>896, +9826=>896,9827=>896,9828=>896,9829=>896,9830=>896,9831=>896,9833=>472,9834=>638,9835=>896,9836=>896, +9837=>472,9838=>357,9839=>484,10145=>838,10181=>390,10182=>390,10208=>494,10216=>390,10217=>390,10224=>838, +10225=>838,10226=>838,10227=>838,10228=>1033,10229=>1434,10230=>1434,10231=>1434,10232=>1434,10233=>1434,10234=>1434, +10235=>1434,10236=>1434,10237=>1434,10238=>1434,10239=>1434,10240=>732,10241=>732,10242=>732,10243=>732,10244=>732, +10245=>732,10246=>732,10247=>732,10248=>732,10249=>732,10250=>732,10251=>732,10252=>732,10253=>732,10254=>732, +10255=>732,10256=>732,10257=>732,10258=>732,10259=>732,10260=>732,10261=>732,10262=>732,10263=>732,10264=>732, +10265=>732,10266=>732,10267=>732,10268=>732,10269=>732,10270=>732,10271=>732,10272=>732,10273=>732,10274=>732, +10275=>732,10276=>732,10277=>732,10278=>732,10279=>732,10280=>732,10281=>732,10282=>732,10283=>732,10284=>732, +10285=>732,10286=>732,10287=>732,10288=>732,10289=>732,10290=>732,10291=>732,10292=>732,10293=>732,10294=>732, +10295=>732,10296=>732,10297=>732,10298=>732,10299=>732,10300=>732,10301=>732,10302=>732,10303=>732,10304=>732, +10305=>732,10306=>732,10307=>732,10308=>732,10309=>732,10310=>732,10311=>732,10312=>732,10313=>732,10314=>732, +10315=>732,10316=>732,10317=>732,10318=>732,10319=>732,10320=>732,10321=>732,10322=>732,10323=>732,10324=>732, +10325=>732,10326=>732,10327=>732,10328=>732,10329=>732,10330=>732,10331=>732,10332=>732,10333=>732,10334=>732, +10335=>732,10336=>732,10337=>732,10338=>732,10339=>732,10340=>732,10341=>732,10342=>732,10343=>732,10344=>732, +10345=>732,10346=>732,10347=>732,10348=>732,10349=>732,10350=>732,10351=>732,10352=>732,10353=>732,10354=>732, +10355=>732,10356=>732,10357=>732,10358=>732,10359=>732,10360=>732,10361=>732,10362=>732,10363=>732,10364=>732, +10365=>732,10366=>732,10367=>732,10368=>732,10369=>732,10370=>732,10371=>732,10372=>732,10373=>732,10374=>732, +10375=>732,10376=>732,10377=>732,10378=>732,10379=>732,10380=>732,10381=>732,10382=>732,10383=>732,10384=>732, +10385=>732,10386=>732,10387=>732,10388=>732,10389=>732,10390=>732,10391=>732,10392=>732,10393=>732,10394=>732, +10395=>732,10396=>732,10397=>732,10398=>732,10399=>732,10400=>732,10401=>732,10402=>732,10403=>732,10404=>732, +10405=>732,10406=>732,10407=>732,10408=>732,10409=>732,10410=>732,10411=>732,10412=>732,10413=>732,10414=>732, +10415=>732,10416=>732,10417=>732,10418=>732,10419=>732,10420=>732,10421=>732,10422=>732,10423=>732,10424=>732, +10425=>732,10426=>732,10427=>732,10428=>732,10429=>732,10430=>732,10431=>732,10432=>732,10433=>732,10434=>732, +10435=>732,10436=>732,10437=>732,10438=>732,10439=>732,10440=>732,10441=>732,10442=>732,10443=>732,10444=>732, +10445=>732,10446=>732,10447=>732,10448=>732,10449=>732,10450=>732,10451=>732,10452=>732,10453=>732,10454=>732, +10455=>732,10456=>732,10457=>732,10458=>732,10459=>732,10460=>732,10461=>732,10462=>732,10463=>732,10464=>732, +10465=>732,10466=>732,10467=>732,10468=>732,10469=>732,10470=>732,10471=>732,10472=>732,10473=>732,10474=>732, +10475=>732,10476=>732,10477=>732,10478=>732,10479=>732,10480=>732,10481=>732,10482=>732,10483=>732,10484=>732, +10485=>732,10486=>732,10487=>732,10488=>732,10489=>732,10490=>732,10491=>732,10492=>732,10493=>732,10494=>732, +10495=>732,10496=>838,10497=>838,10498=>838,10499=>838,10500=>838,10501=>838,10502=>838,10503=>838,10504=>838, +10505=>838,10506=>838,10507=>838,10508=>838,10509=>838,10510=>838,10511=>838,10512=>838,10513=>838,10514=>838, +10515=>838,10516=>838,10517=>838,10518=>838,10519=>838,10520=>838,10521=>838,10522=>838,10523=>838,10524=>838, +10525=>838,10526=>838,10527=>838,10528=>838,10529=>838,10530=>838,10531=>838,10532=>838,10533=>838,10534=>838, +10535=>838,10536=>838,10537=>838,10538=>838,10539=>838,10540=>838,10541=>838,10542=>838,10543=>838,10544=>838, +10545=>838,10546=>838,10547=>838,10548=>838,10549=>838,10550=>838,10551=>838,10552=>838,10553=>838,10554=>838, +10555=>838,10556=>838,10557=>838,10558=>838,10559=>838,10560=>838,10561=>838,10562=>838,10563=>838,10564=>838, +10565=>838,10566=>838,10567=>838,10568=>838,10569=>838,10570=>838,10571=>838,10572=>838,10573=>838,10574=>838, +10575=>838,10576=>838,10577=>838,10578=>838,10579=>838,10580=>838,10581=>838,10582=>838,10583=>838,10584=>838, +10585=>838,10586=>838,10587=>838,10588=>838,10589=>838,10590=>838,10591=>838,10592=>838,10593=>838,10594=>838, +10595=>838,10596=>838,10597=>838,10598=>838,10599=>838,10600=>838,10601=>838,10602=>838,10603=>838,10604=>838, +10605=>838,10606=>838,10607=>838,10608=>838,10609=>838,10610=>838,10611=>838,10612=>838,10613=>838,10614=>838, +10615=>981,10616=>838,10617=>838,10618=>984,10619=>838,10620=>838,10621=>838,10622=>838,10623=>838,10731=>494, +10764=>1513,10765=>521,10766=>521,10799=>838,11008=>838,11009=>838,11010=>838,11011=>838,11012=>838,11013=>838, +11014=>838,11015=>838,11016=>838,11017=>838,11018=>838,11019=>838,11020=>838,11021=>838,11022=>838,11023=>838, +11024=>838,11025=>838,11026=>945,11027=>945,11028=>945,11029=>945,11030=>769,11031=>769,11032=>769,11033=>769, +11034=>945,11364=>753,11367=>872,11368=>644,11369=>747,11370=>606,11371=>695,11372=>527,11373=>782,11374=>1024, +11375=>722,11376=>782,11377=>663,11378=>1130,11379=>939,11381=>740,11382=>531,11383=>700,11385=>501,11386=>602, +11388=>264,11389=>455,11390=>685,11391=>695,11520=>773,11521=>635,11522=>633,11523=>658,11524=>631,11525=>962, +11526=>756,11527=>960,11528=>617,11529=>646,11530=>962,11531=>632,11532=>646,11533=>962,11534=>645,11535=>866, +11536=>961,11537=>645,11538=>645,11539=>959,11540=>945,11541=>863,11542=>644,11543=>646,11544=>645,11545=>649, +11546=>688,11547=>634,11548=>982,11549=>681,11550=>676,11551=>852,11552=>957,11553=>632,11554=>645,11555=>646, +11556=>749,11557=>914,11800=>536,11810=>390,11811=>390,11812=>390,11813=>390,11822=>536,42564=>685,42565=>513, +42566=>395,42567=>392,42576=>1104,42577=>939,42580=>1193,42581=>871,42582=>1140,42583=>875,42760=>493,42761=>493, +42762=>493,42763=>493,42764=>493,42765=>493,42766=>493,42767=>493,42768=>493,42769=>493,42770=>493,42771=>493, +42772=>493,42773=>493,42774=>493,42779=>369,42780=>369,42781=>253,42782=>253,42783=>253,42813=>730,42891=>402, +42892=>275,42893=>773,62464=>664,62465=>675,62466=>724,62467=>958,62468=>675,62469=>669,62470=>735,62471=>997, +62472=>675,62473=>675,62474=>1268,62475=>693,62476=>692,62477=>963,62478=>675,62479=>692,62480=>1009,62481=>756, +62482=>809,62483=>758,62484=>955,62485=>691,62486=>946,62487=>690,62488=>698,62489=>692,62490=>739,62491=>692, +62492=>698,62493=>676,62494=>739,62495=>895,62496=>675,62497=>785,62498=>676,62499=>675,62500=>675,62501=>732, +62502=>972,62504=>904,63172=>505,63173=>602,63174=>640,63175=>644,63176=>947,63185=>500,63188=>500,64256=>708, +64257=>667,64258=>667,64259=>941,64260=>986,64261=>744,64262=>916,65024=>0,65025=>0,65026=>0,65027=>0, +65028=>0,65029=>0,65030=>0,65031=>0,65032=>0,65033=>0,65034=>0,65035=>0,65036=>0,65037=>0, +65038=>0,65039=>0,65529=>0,65530=>0,65531=>0,65532=>0,65533=>1025); +$enc=''; +$diff=''; +$file='dejavuserifi.z'; +$ctg='dejavuserifi.ctg.z'; +$originalsize=310604; +// --- EOF --- --- /dev/null +++ b/tcpdf/fonts/freefont-20100919/AUTHORS @@ -1,1 +1,236 @@ - +-*- mode:text; coding:utf-8; -*- + GNU FreeFont Authors + ==================== + +The FreeFont collection is being maintained by + Steve White +The folowing list cites the other contributors that contributed to +particular ISO 10646 blocks. + +* URW++ Design & Development GmbH + + Basic Latin (U+0041-U+007A) + Latin-1 Supplement (U+00C0-U+00FF) (most) + Latin Extended-A (U+0100-U+017F) + Spacing Modifier Letters (U+02B0-U+02FF) + Mathematical Operators (U+2200-U+22FF) (parts) + Block Elements (U+2580-U+259F) + Dingbats (U+2700-U+27BF) + +* Yannis Haralambous and John + Plaice + + Latin Extended-B (U+0180-U+024F) + IPA Extensions (U+0250-U+02AF) + Greek (U+0370-U+03FF) + Armenian (U+0530-U+058F) + Hebrew (U+0590-U+05FF) + Arabic (U+0600-U+06FF) + Currency Symbols (U+20A0-U+20CF) + Arabic Presentation Forms-A (U+FB50-U+FDFF) + Arabic Presentation Forms-B (U+FE70-U+FEFF) + +* Yannis Haralambous and Wellcome Institute + + Sinhala (U+0D80-U+0DFF) + +* Young U. Ryu + + Arrows (U+2190-U+21FF) + Mathematical Symbols (U+2200-U+22FF) + Mathematical Alphanumeric Symbols (U+1D400-U+1D7FF) + +* Valek Filippov + + Cyrillic (U+0400-U+04FF) + +* Wadalab Kanji Comittee + + Hiragana (U+3040-U+309F) + Katakana (U+30A0-U+30FF) + +* Angelo Haritsis + + Greek (U+0370-U+03FF) + +* Yannis Haralambous and Virach Sornlertlamvanich + + Thai (U+0E00-U+0E7F) + +* Shaheed R. Haque + + Bengali (U+0980-U+09FF) + +* Sam Stepanyan + + Armenian (U+0530-U+058F) + +* Mohamed Ishan + + Thaana (U+0780-U+07BF) + +* Sushant Kumar Dash + + Oriya (U+0B00-U+0B7F) + +* Harsh Kumar + + Devanagari (U+0900-U+097F) + Bengali (U+0980-U+09FF) + Gurmukhi (U+0A00-U+0A7F) + Gujarati (U+0A80-U+0AFF) + +* Prasad A. Chodavarapu + + Telugu (U+0C00-U+0C7F) + +* Frans Velthuis and Anshuman Pandey + + + Devanagari (U+0900-U+097F) + +* Hardip Singh Pannu + + Gurmukhi (U+0A00-U+0A7F) + +* Jeroen Hellingman + + Oriya (U+0B00-U+0B7F) + Malayalam (U+0D00-U+0D7F) + +* Thomas Ridgeway + + Tamil (U+0B80-U+0BFF) + +* Berhanu Beyene <1beyene AT informatik.uni-hamburg.de>, + Prof. Dr. Manfred Kudlek , Olaf + Kummer , and Jochen Metzinger + + Ethiopic (U+1200-U+137F) + +* Maxim Iorsh + + Hebrew (U+0590-U+05FF) + +* Vyacheslav Dikonov + + Syriac (U+0700-U+074A) + Braille (U+2800-U+28FF) + +* Panayotis Katsaloulis + + Greek Extended (U+1F00-U+1FFF) + +* M.S. Sridhar + + Devanagari (U+0900-U+097F) + Bengali (U+0980-U+09FF) + Gurmukhi (U+0A00-U+0A7F) + Gujarati (U+0A80-U+0AFF) + Oriya (U+0B00-U+0B7F) + Tamil (U+0B80-U+0BFF) + Telugu (U+0C00-U+0C7F) + Kannada (U+0C80-U+0CFF) + Malayalam (U+0D00-U+0D7F) + +* DMS Electronics, The Sri Lanka Tipitaka Project, and Noah Levitt + + + Sinhala (U+0D80-U+0DFF) + +* Dan Shurovich Chirkov + + Cyrillic (U+0400-U+04FF) + +* Abbas Izad + + Arabic (U+0600-U+06FF) + Arabic Presentation Forms-A (U+FB50-U+FDFF) + Arabic Presentation Forms-B (U+FE70-U+FEFF) + +* Denis Jacquerye + + Latin Extended-B (U+0180-U+024F) + IPA Extensions (U+0250-U+02AF) + +* K.H. Hussain and R. Chitrajan + + Malayalam (U+0D00-U+0D7F) + +* Solaiman Karim and Omi Azad + + Bengali (U+0980-U+09FF) + +* Sonali Sonania and Monika Shah + + + Devanagari (U+0900-U+097F) + Gujarati (U+0A80-U+0AFF) + +* Pravin Satpute , Bageshri Salvi + , Rahul Bhalerao and Sandeep Shedmake + + Devanagari (U+0900-U+097F) + Gujarati (U+0A80-U+0AFF) + Oriya (U+0B00-U+0B7F) + Malayalam (U+0D00-U+0D7F) + Tamil (U+0B80-U+0BFF) + +* Kulbir Singh Thind + + Gurmukhi (U+0A00-U+0A7F) + +* Gia Shervashidze + + Georgian (U+10A0-U+10FF) + +* Daniel Johnson + + Armenian (serif) (U+0530-U+058F) + Cherokee (U+13A0-U+13FF) + Unified Canadian Aboriginal Syllabics (U+1400-U+167F) + UCAS Extended (U+18B0-U+18F5) + Tifinagh (U+2D30-U+2D7F) + Vai (U+A500-U+A62B) + Latin Extended-D (Mayanist letters) (U+A720-U+A7FF) + Kayah Li (U+A900-U+A92F) + Osmanya (U+10480-U+104a7) + +* George Douros + + Gothic (U+10330-U+1034F) + Phoenecian (U+10900-U+1091F) + Byzantine Musical Symbols (U+1D000-U+1D0FF) + Western Musical Symbols (U+1D100-U+1D1DF) + Mathematical Alphanumeric Symbols (U+1D400-U+1D7FF) + Mah Jong Tiles (U+1F000-U+1F02B) + Dominoes (U+1F030-U+1F093) + +* Steve White + Glagolitic (U+2C00-U+2C5F) + Coptic (U+2C80-U+2CFF) + +* Pavel Skrylev is responsible for + Cyrillic Extended-A (U+2DEO-U+2DFF) + as well as many of the additions to + Cyrillic Extended-B (U+A640-U+A65F) + +* Mark Williamson + Made the MPH 2 Damase font, from which + Hanunóo (U+1720-U+173F) + Buginese (U+1A00-U+1A1F) + Tai Le (U+1950-U+197F) + Ugaritic (U+10380-U+1039F) + Old Persian (U+103A0-U+103DF) + + +* Primož Peterlin + maintained FreeFont for several years, and is thanked for all his work. + +Please see the CREDITS file for details on who contributed particular +subsets of the glyphs in font files. + +-------------------------------------------------------------------------- +$Id: AUTHORS,v 1.23 2010/09/11 13:24:11 Stevan_White Exp $ + --- /dev/null +++ b/tcpdf/fonts/freefont-20100919/COPYING @@ -1,1 +1,675 @@ - + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. + --- /dev/null +++ b/tcpdf/fonts/freefont-20100919/CREDITS @@ -1,1 +1,582 @@ - +-*- mode:text; coding:utf-8; -*- + GNU FreeFont Credits + ==================== + +This file lists contributors and contributions to the GNU FreeFont project. + + +* URW++ Design & Development GmbH + +URW++ donated a set of 35 core PostScript Type 1 fonts to the +Ghostscript project , to be available +under the terms of GNU General Public License (GPL). + + Basic Latin (U+0041-U+007A) + Latin-1 Supplement (U+00C0-U+00FF) + Latin Extended-A (U+0100-U+017F) + Spacing Modifier Letters (U+02B0-U+02FF) + Mathematical Operators (U+2200-U+22FF) + Block Elements (U+2580-U+259F) + Dingbats (U+2700-U+27BF) + + +* Yannis Haralambous and John + Plaice + +Yannis Haralambous and John Plaice are the authors of Omega typesetting +system, . Omega is an extension of TeX. +Its first release, aims primarily at improving TeX's multilingual abilities. +In Omega all characters and pointers into data-structures are 16-bit wide, +instead of 8-bit, thereby eliminating many of the trivial limitations of TeX. +Omega also allows multiple input and output character sets, and uses +programmable filters to translate from one encoding to another, to perform +contextual analysis, etc. Internally, Omega uses the universal 16-bit Unicode +standard character set, based on ISO-10646. These improvements not only make +it a lot easier for TeX users to cope with multiple or complex languages, +like Arabic, Indic, Khmer, Chinese, Japanese or Korean, in one document, but +will also form the basis for future developments in other areas, such as +native color support and hypertext features. ... Fonts for UT1 (omlgc family) +and UT2 (omah family) are under development: these fonts are in PostScript +format and visually close to Times and Helvetica font families. +Omega fonts are available subject to GPL + + Latin Extended-B (U+0180-U+024F) + IPA Extensions (U+0250-U+02AF) + Greek (U+0370-U+03FF) + Armenian (U+0530-U+058F) + Hebrew (U+0590-U+05FF) + Arabic (U+0600-U+06FF) + Currency Symbols (U+20A0-U+20CF) + Arabic Presentation Forms-A (U+FB50-U+FDFF) + Arabic Presentation Forms-B (U+FE70-U+FEFF) + +Current info: + +* Valek Filippov + +Valek Filippov added Cyrillic glyphs and composite Latin Extended A to +the whole set of the abovementioned URW set of 35 PostScript core fonts, +. The fonts are available under GPL. + + Latin Extended-A (U+0100-U+017F) + Cyrillic (U+0400-U+04FF) + + +* Wadalab Kanji Comittee + +Between April 1990 and March 1992, Wadalab Kanji Comittee put together +a series of scalable font files with Japanese scripts, in four forms: +Sai Micho, Chu Mincho, Cho Kaku and Saimaru. The font files are +written in custom file format, while tools for conversion into +Metafont and PostScript Type 1 are also supplied. The Wadalab Kanji +Comittee has later been dismissed, and the resulting files can be now +found on the FTP server of the Depertment of Mathematical Engineering +and Information Physics, Faculty of Engineering, University of Tokyo +. + + Hiragana (U+3040-U+309F) + Katakana (U+30A0-U+30FF) + + +* Young U. Ryu + +Young Ryu is the author of Txfonts, a set of mathematical symbols +designed to accompany text typeset in Times or its variants. In the +documentation, Young adresses the design of mathematical symbols: "The +Adobe Times fonts are thicker than the CM fonts. Designing math fonts +for Times based on the rule thickness of Times = , , + , / , < , +etc. would result in too thick math symbols, in my opinion. In the TX +fonts, these glyphs are thinner than those of original Times +fonts. That is, the rule thickness of these glyphs is around 85% of +that of the Times fonts, but still thicker than that of the CM fonts." +TX fonts are are distributed under the GNU public license (GPL). +. + + Arrows (U+2190-U+21FF) + Mathematical Symbols (U+2200-U+22FF) + + +* Angelo Haritsis + +Angelo Haritsis has compiled a set of Greek Type 1 fonts, available on +. +The glyphs from this source has been used to compose Greek glyphs in +FreeSans and FreeMono. + +Angelo's licence says: "You can enjoy free use of these fonts for +educational or commercial purposes. All derived works should include +this paragraph. If you want to change something please let me have +your changes (via email) so that they can go into the next +version. You can also send comments etc to the above address." + + Greek (U+0370-U+03FF) + + +* Yannis Haralambous and Virach Sornlertlamvanich + +In 1999, Yannis Haralambous and Virach Sornlertlamvanich made a set of +glyphs covering the Thai national standard Nf3, in both upright and +slanted shape. The collection of glyphs have been made part of GNU +intlfonts 1.2 package and is available under the GPL at +. + + Thai (U+0E00-U+0E7F) + +* Shaheed R. Haque + +Shaheed Haque has developed a basic set of basic Bengali glyphs +(without ligatures), using ISO10646 encoding. They are available under +the XFree86 license at . + +Copyright (C) 2001 S.R.Haque . All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL S.R.HAQUE BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of S.R.Haque shall not be +used in advertising or otherwise to promote the sale, use or other +dealings in this Software without prior written authorization from +S.R.Haque. + + Bengali (U+0980-U+09FF) + + +* Sam Stepanyan + +Sam Stepanyan created a set of Armenian sans serif glyphs visually +compatible with Helvetica or Arial. Available on +. On +2002-01-24, Sam writes: "Arial Armenian font is free for +non-commercial use, so it is OK to use under GPL license." + + Armenian (U+0530-U+058F) + + +* Mohamed Ishan + +Mohamed Ishan has started a Thaana Unicode Project + and among other things created a +couple of Thaana fonts, available under FDL or BDF license. + + Thaana (U+0780-U+07BF) + + +* Sushant Kumar Dash (*) + +Sushant Dash has created a font in his mother tongue, Oriya. As he +states on his web page : +"Please feel free to foreword this mail to your Oriya friends. No +copyright law is applied for this font. It is totally free!!! Feel +free to modify this using any font editing tools. This is designed for +people like me, who are away from Orissa and want to write letters +home using Computers, but suffer due to unavailability of Oriya +fonts.(Or the cost of the available packages are too much)." + + Oriya (U+0B00-U+0B7F) + + +* Harsh Kumar + +Harsh Kumar has started BharatBhasha - +an effort to provide "FREE software, Tutorial, Source Codes +etc. available for working in Hindi, Marathi, Gujarati, Gurmukhi and +Bangla. You can type text, write Web pages or develop Indian Languages +Applications on Windows and on Linux. We also offer FREE help to +users, enthusiasts and software developers for their work in Indian +languages." + + Devanagari (U+0900-U+097F) + Bengali (U+0980-U+09FF) + Gurmukhi (U+0A00-U+0A7F) + Gujarati (U+0A80-U+0AFF) + + +* Prasad A. Chodavarapu + +Prasad A. Chodavarapu created Tikkana, a Telugu font available in Type +1 and TrueType format on . +Tikkana exceeds the Unicode Telugu range with some composite glyphs. +Available under the GNU General Public License. + + Telugu (U+0C00-U+0C7F) + + +* Frans Velthuis and Anshuman Pandey + + +In 1991, Frans Velthuis from the Groningen University, The +Netherlands, released a Devanagari font as Metafont source, available +under the terms of GNU GPL. Later, Anshuman Pandey from the Washington +University, Seattle, USA, took over the maintenance of font. Fonts can +be found on CTAN, . I +converted the font to Type 1 format using Péter Szabó's TeXtrace +program and removed some +redundant control points with PfaEdit. + + Devanagari (U+0900-U+097F) + + +* Hardip Singh Pannu + +In 1991, Hardip Singh Pannu has created a free Gurmukhi TrueType font, +available as regular, bold, oblique and bold oblique form. Its license +says "Please remember that these fonts are copyrighted (by me) and are +for non-profit use only." + + Gurmukhi (U+0A00-U+0A7F) + + +* Jeroen Hellingman + +Jeroen Hellingman created a set of Malayalam metafonts in 1994, and a +set of Oriya metafonts in 1996. Malayalam fonts were created as +uniform stroke only, while Oriya metafonts exist in both uniform and +modulated stroke. From private communication: "It is my intention to +release the fonts under GPL, but not all copies around have this +notice on them." Metafonts can be found on CTAN, + and +. + + Oriya (U+0B00-U+0B7F) + Malayalam (U+0D00-U+0D7F) + + +* Thomas Ridgeway <> (*) + +Thomas Ridgeway, then at the Humanities And Arts Computing Center, +Washington University, Seattle, USA, (now defunct), created a Tamil +metafont in 1990. Anshuman Pandey from the same university took over +the maintenance of font. Fonts can be found at CTAN, +. + + Tamil (U+0B80-U+0BFF) + + +* Berhanu Beyene <1beyene AT informatik.uni-hamburg.de>, + Prof. Dr. Manfred Kudlek , Olaf + Kummer , and Jochen Metzinger + +Beyene, Kudlek, Kummer and Metzinger from the Theoretical Foundations +of Computer Science, University of Hamburg, prepared a set of Ethiopic +metafonts, found on +. They also +maintain home page on the Ethiopic font project, +, +and can be reached at . The current +version of fonts is 0.7 (1998), and they are released under GNU GPL. I +converted the fonts to Type 1 format using Péter Szabó's TeXtrace-A +program and removed some +redundant control points with PfaEdit. + + Ethiopic (U+1200-U+137F) + + +* Maxim Iorsh + +In 2002, Maxim Iorsh started the Culmus project, aiming at providing +Hebrew-speaking Linux and Unix community with a basic collection of +Hebrew fonts for X Windows. The fonts are visually compatible with +URW++ Century Schoolbook L, URW++ Nimbus Sans L and URW++ Nimbus Mono +L families, respectively, and are released under GNU GPL license. See +also . + + Hebrew (U+0590-U+05FF) + + +* Panayotis Katsaloulis + +Panayotis Katsaloulis helped fixing Greek accents in the Greek +Extended area. + + Greek Extended (U+1F00-U+1FFF) + + +* Vyacheslav Dikonov + +Vyacheslav Dikonov made a Braille unicode font that could be merged +with the UCS fonts to fill the 2800-28FF range completely. (uniform +scaling is possible to adapt it to any cell size). He also contributed +a free syriac font, whose glyphs (about half of them) are borrowed +from the "Carlo Ator" font freely downloadable from +. Vyacheslav also filled in a few missing +spots in the U+2000-U+27FF area, e.g. the box drawing section, sets of +subscript and superscript digits and capital Roman numbers. + + Syriac (U+0700-U+074A) + Box Drawing (U+2500-U+257F) + Braille (U+2800-U+28FF) + + +* M.S. Sridhar + +M/S Cyberscape Multimedia Limited, Mumbai, developers of Akruti +Software for Indian Languages (http://www.akruti.com/), have released +a set of TTF fonts for nine Indian scripts (Devanagari, Gujarati, +Telugu, Tamil, Malayalam, Kannada, Bengali, Oriya, and Gurumukhi) +under the GNU General Public License (GPL). You can download the fonts +from the Free Software Foundation of India WWW site +(http://www.gnu.org.in/akruti-fonts/) or from the Akruti website. + +For any further information or assistance regarding these fonts, +please contact mssridhar AT vsnl.com. + + Devanagari (U+0900-U+097F) + Bengali (U+0980-U+09FF) + Gurmukhi (U+0A00-U+0A7F) + Gujarati (U+0A80-U+0AFF) + Oriya (U+0B00-U+0B7F) + Tamil (U+0B80-U+0BFF) + Telugu (U+0C00-U+0C7F) + Kannada (U+0C80-U+0CFF) + Malayalam (U+0D00-U+0D7F) + + +* DMS Electronics, The Sri Lanka Tipitaka Project, and Noah Levitt + + +Noah Levitt found out that the Sinhalese fonts available on the site + are released under GNU GPL, or, +precisely, "Public Domain under GNU Licence Produced by DMS +Electronics for The Sri Lanka Tipitaka Project" (taken from the font +comment), and took the effort of recoding the font to Unicode. + +These glyphs were later replaced by those from the LKLUG font + + +Finally the range was completely replaced by glyphs from the sinh TeX +font, with much help and advice from Harshula Jayasuriya. + + Sinhala (U+0D80-U+0DFF) + + +* Daniel Shurovich Chirkov + +Dan Chirkov updated the FreeSerif font with the missing Cyrillic +glyphs needed for conformance to Unicode 3.2. The effort is part of +the Slavjanskij package for Mac OS X, +. + + Cyrillic (U+0400-U+04FF) + + +* Denis Jacquerye + +Denis Jacquerye added new glyphs and corrected existing ones in the +Latin Extended-B and IPA Extensions ranges. + + Latin Extended-B (U+0180-U+024F) + IPA Extensions (U+0250-U+02AF) + + +* K.H. Hussain and R. Chitrajan + +`Rachana' in Malayalam means `to write', `to create'. Rachana Akshara Vedi, +a team of socially committed information technology professionals and +philologists, has applied developments in computer technology and desktop +publishing to resurrect the Malayalam language from the disorder, +fragmentation and degeneration it had suffered since the attempt to adapt +the Malayalam script for using with a regular mechanical typewriter, which +took place in 1967-69. K.H. Hussein at the Kerala Forest Research Institute +has released "Rachana Normal" fonts with approximately 900 glyphs required +to typeset traditional Malayalam. R. Chitrajan apparently encoded the +glyphs in the OpenType table. + +In 2008, the Malayalam ranges in FreeSerif were updated under the advise +and supervision of Hiran Venugopalan of Swathanthra Malayalam Computing, +to reflect the revised edition Rachana_04. + + Malayalam (U+0D00-U+0D7F) + + +* Solaiman Karim + + Bengali (U+0980-U+09FF) + +Solaiman Karim has developed several OpenType Bangla fonts and +released them under GNU GPL on . + + +* Sonali Sonania and Monika Shah + + + Devanagari (U+0900-U+097F) + Gujarati (U+0A80-U+0AFF) + +Glyphs were drawn by Cyberscape Multimedia Ltd., #101,Mahalakshmi +Mansion 21st Main 22nd "A" Cross Banashankari 2nd stage Banglore +560070, India. Converted to OTF by IndicTrans Team, Powai, Mumbai, +lead by Prof. Jitendra Shah. Maintained by Monika Shah and Sonali +Sonania of janabhaaratii Team, C-DAC, Mumbai. This font is released +under GPL by Dr. Alka Irani and Prof Jitendra Shah, janabhaaratii +Team, C-DAC, Mumabi. janabhaaratii is localisation project at C-DAC +Mumbai (formerly National Centre for Software Technology); funded by +TDIL, Govt. of India. Contact:monika_shah AT lycos.com, +sonalisonania AT yahoo.com, jitendras AT vsnl.com, alka AT ncst.ernet.in. +website: www.janabhaaratii.org.in. + + +* Pravin Satpute , Bageshri Salvi + , Rahul Bhalerao and Sandeep Shedmake + + Devanagari (U+0900-U+097F) + Gujarati (U+0A80-U+0AFF) + Oriya (U+0B00-U+0B7F) + Malayalam (U+0D00-U+0D7F) + Tamil (U+0B80-U+0BFF) + +In December 2005 the team at www.gnowledge.org released a set of two +Unicode pan-Indic fonts: "Samyak" and "Samyak Sans". "Samyak" font +belongs to serif style and is an original work of the team; "Samyak +Sans" font belongs to sans serif style and is actually a compilation +of already released Indic fonts (Gargi, Padma, Mukti, Utkal, Akruti +and ThendralUni). Both fonts are based on Unicode standard. You can +download the font files (released under GNU/GPL License) from +http://www.gnowledge.org/Gnoware/localization/font.htm + + +* Kulbir Singh Thind + + Gurmukhi (U+0A00-U+0A7F) + +Dr. Kulbir Singh Thind designed a set of Gurmukhi Unicode fonts, +AnmolUni and AnmolUni-Bold, which are available under the terms of GNU +Generel Public Licens from the Punjabu Computing Resource Center, +http://guca.sourceforge.net/typography/fonts/anmoluni/. + + +* Gia Shervashidze + + Georgian (U+10A0-U+10FF) + +Starting in mid-1990s, Gia Shervashidze designed many +Unicode-compliant Georgian fonts: Times New Roman Georgian, Arial +Georgian, Courier New Georgian. His work on Georgian localization can +be reached at http://www.gia.ge/. + + +* Primož Peterlin + +Primož Peterlin filled in missing glyphs here and there (e.g. Latin +Extended-B and IPA Extensions ranges in the FreeMono familiy), and +created the following UCS blocks: + + Latin Extended-B (U+0180-U+024F) + IPA Extensions (U+0250-U+02AF) + Arrows (U+2190-U+21FF) + Box Drawing (U+2500-U+257F) + Block Elements (U+2580-U+259F) + Geometrical Shapes (U+25A0-U+25FF) + +* Mark Williamson + +Made the MPH 2 Damase font, from which + Hanunóo (U+1720-U+173F) + Buginese (U+1A00-U+1A1F) + Tai Le (U+1950-U+197F) + Ugaritic (U+10380-U+1039F) + Old Persian (U+103A0-U+103DF) + +* Jacob Poon + +Submitted a very thorough survey of glyph problems and other suggestions. + +* Alexey Kryukov + +Made the TemporaLCGUni fonts, based on the URW++ fonts, from which at one +point FreeSerif Cyrillic, and some of the Greek, was drawn. He also provided +valuable direction about Cyrillic and Greek typesetting. + +* George Douros + +The creator of several fonts focusing on ancient scripts and symbols. +Many of the glyphs are created by making outlines from scanned images +of ancient sources. + + Aegean: Phoenecian + Analecta: Gothic (U+10330-U+1034F) + Musical: Byzantine & Western + Unicode: many Miscellaneous Symbols, Miscellaneous Technical, + supplemental Symbols, and Mathematical Alphanumeric symbols, + Mah Jong, and the outline of the Domino. + +* Daniel Johnson + +Created by hand a Cherokee range specially for FreeFont to be "in line with +the classic Cherokee typefaces used in 19th century printing", but also to +fit well with ranges previously in FreeFont. Then he made Unified Canadian +Syllabics in Sans, and a Cherokee and Kayah Li in Mono! And never to be +outdone by himself, then did UCAS Extended and Osmanya.... What next? + + Armenian (serif) (U+0530-U+058F) + Cherokee (U+13A0-U+13FF) + Unified Canadian Aboriginal Syllabics (U+1400-U+167F) + UCAS Extended (U+18B0-U+18F5) + Kayah Li (U+A900-U+A92F) + Tifinagh (U+2D30-U+2D7F) + Vai (U+A500-U+A62B) + Latin Extended-D (Mayanist letters) (U+A720-U+A7FF) + Osmanya (U+10480-U+104a7) + +* Yannis Haralambous and Wellcome Institute + +In 1994, The Wellcome Library + The Wellcome Institute for the History of Medicine + 183 Euston Road, London NW1 2BE, England. +commissioned Mr. Haralambous to produce a Sinhalese font for them. + +We have received 03/09 official notice from Robert Kiley, Head of e-Strategy +for the Wellcome Library, that Yannis' font could be included in GNU +FreeFont under its GNU license. + +Thanks to Dominik Wujastyk, for providing us with feedback and contacts +to repsonsible people at the Trust. + + Sinhala (U+0D80-U+0DFF) + +* The Sinhala font project http://sinhala.sourceforge.net/ + +The Sinhala font project has taken the glyphs from Yannis Haralambous' +Sinhala font, to produce a Unicode TrueType font, LKLUG. These glyphs +were for a while included in FreeFont. + + Sinhala (U+0D80-U+0DFF) + +* Steve White + +Filled in a lot of missing characters, got some font features working, +left fingerprints almost everywhere, and is responsible for these blocks: + + Glagolitic (U+2C00-U+2C5F) + Coptic (U+2C80-U+2CFF) + +* Pavel Skrylev is responsible for + Cyrillic Extended-A (U+2DEO-U+2DFF) + as well as many of the additions to + Cyrillic Extended-B (U+A640-U+A65F) + +Notes: + +*: The glyph collection looks license-compatible, but its author has + not yet replied and agreed on their work being used in part of + this glyph collection. + +-------------------------------------------------------------------------- +$Id: CREDITS,v 1.28 2010/09/11 13:24:11 Stevan_White Exp $ + --- /dev/null +++ b/tcpdf/fonts/freefont-20100919/ChangeLog @@ -1,1 +1,6326 @@ - +$Id: ChangeLog,v 1.257 2010/09/19 13:15:07 Stevan_White Exp $ +2010-09-19 Stevan_White + * FreeSerif.sfd: + + Sinhala: Fixed one lookup table mistake, and a couple of glpyh + omissions, that Harshula pointed out. + + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Sans: Applied Daniel Johnsons improvement to capital Eng to Sans, as + described in previous commits. + + * FreeSerif.sfd, FreeSerifBold.sfd: + + Coptic: added alphabet to bold. Accent marks not working -- a mystery. + Some tweeks in medium face as well. + + glyph cleanup -- points too close, some glyphs outside bounding boxes. + +2010-09-17 Stevan_White + * FreeSerif.sfd: + + Sinhala: tightened up left side of na and derivatives. + tighened up left sides of u, lla, na, dha, ndha, nya, jnya + tightened up some of the vowel conjuncts, and left side of nna. + +2010-09-16 Stevan_White + * FreeSerif.sfd: + + Coptic: fiddled about with letter forms, striving for a kind of + consistency. + + Sinhala: Harshula noticed four incorrect combined forms. Fixed these. + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + Latin Extended-A: Applied Daniel Johnson's patch that made two versions + of capital Eng. His explanation: + ' + http://en.wikipedia.org/wiki/%C5%8A + + The form of capital Eng currently in all three FreeFont faces + is that used by the Sami people, resembling a capital N with a + hooked right descender. + However, the form preferred for African and Amerindian + languages resembles a tall lowercase n with a hook that almost + meets the left vertical. (See wikipedia link above for a + visual.) + + Recommend moving the existing Sami-style Eng to a PUA or + non-Unicode slot, creating African-style Eng at U+014A, and + adding a LOCL table with substitution rules for + Inari Sami (ISM), Lule Sami (LSM), + Northern Sami (NSM) and Skolt Sami (SKS). + ' + Latin Extended-B: Also in his patch: + added U+0220 (Latin Capital Letter N with long leg) + +2010-09-15 Stevan_White + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Latin for Sami: Daniel Johnson's patch added alternative form of Eng for + African languages and a 'local' table for the Sami form. + + * FreeSerif.sfd: + + Sinhala: regularized kundaliya a bit. + re-named a few more ligature glyphs, for consistency + + * FreeSans.sfd: + + Put stray lookup into its proper subtable. + + Gurmukhi: improved some names of ligature glyphs, and found one + apparently doubled table entry (kagurmukhi_nuktagurmukhi.nukt now + gur_ka.nukt) + + * FreeSans.sfd, FreeSerif.sfd, FreeSerifItalic.sfd: + + Various measures to fix problems FontForge Find Problems reports under + ATT, including a mass glyph rename of Sinhala ligatures. + +2010-09-15 Stevan_White + * to0ls/GenerateTrueType: + + prev. commit had one space too many + +2010-09-14 Stevan_White + * tools-- GenerateMacTT, GenerateOpenType, GenerateTrueType, checkGlyphNumbers.py, findBackLayers.py, hex_range.py, isMonoMono.py, ligatureLookups.py, nameBySlot.py, range_report.py, ranges.py, validate.py, OpenType.py: + + Added license and other tags to python files. + +2010-09-13 Stevan_White + * tools/OpenType.py: + + updated some Web links. + + * FreeMono.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Cyrillic: A few more old letters. + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + Supplemental Punctuation: One character for consistency with other faces. + +2010-09-12 Stevan_White + * FreeMono.sfd, FreeSans.sfd: + + Control Pictures: Added because it was easy. + + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Alphabetic Presentation Forms: filled out range in sans faces. + + * FreeMono.sfd, FreeMonoBoldOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerifBoldItalic.sfd: + + Cleared hints. + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBoldOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Dozens of measures to pass general validation tests, including + . cleanup of many glyphs for extrema and self-intersection problmes + . re-naming glyphs whose PS names are too long. + . removing blank glyphs + . giving Unicode points to glyphs missing them. + + There are still a few lookup table issues in FreeSerif and FreeSans though. + + * FreeSerif.sfd: + + Re-named some of the Sinhala lookups in somewhat better way. + Control Pictures: added a bunch (but... is it worth it?) + + * tools/nameBySlot.py: + + Corrected output for high Unicode. + + * tools/checkGlyphNumbers.py: + + Made aware of special TrueType slots. + + * tools/range_report.py: + + Added a Private Use total and better explanation of totals generally. + Some code clean-up. + +2010-09-11 Stevan_White + * tools/OpenType.py: + + made not to complain about extra TrueType characters. + + * FreeSerif.sfd: + + Coptic: Widened bowl of Khei. + Deepened descenders of small letters to same depth as in Latin + Expanded bowl of Fei and fei to resemble other samples. + +2010-09-10 Stevan_White + * FreeSerif.sfd: + + Cyrillic: mostly positioning of marks for old Cyrillic alphabets + + Coptic: Replaced acoptic with something more dramatic, fiddled with + kerning, tidied some other letters + +2010-09-09 Stevan_White + * FreeSerifBold.sfd, FreeSans.sfd, FreeSerif.sfd: + + Block Elements: replaced long-missing shade blocks + +2010-09-08 Stevan_White + * tools/range_report.py: + + More explanation in output. + + * tools/range_report.py, OpenType.py: + + another consistency check + added UCAS Extended range + +2010-09-07 Stevan_White + * FreeSerif.sfd: + + Buginese: lookup tables and glyphs to re-order vowels, courtesy of + Mohammad Anwari. + + Sinhala: complete replacement of range with glyphs extracted more + directly from Yannis Haralambous' sinha TeX font (last version was + also derived from this font, but had undergone detrimental processing). + Implements "rak" glyphs using three GSUB lookup steps. + + * FreeSans.sfd: + + Osmanya: courtesy of Daniel Johnson. + + Note this script is slanted in every sample I've seen. That is + justification enough that the glyphs in this range look slated, + although the face isn't oblique. + + UCAS Extended: by Daniel Johnson + +2010-09-05 Stevan_White + * FreeSerif.sfd: + + Fix for FontForge warning (v 20090923) + + "On Windows many apps will have problems with this font's kerning, + because because 58 of its glyph kern pairs cannot be mapped to + unicode-BMP kern pairs" + + This was due to kern tables for the Musical Symbols range, which isn't + in the Unicode Basic Multilingual Plane. + + Removed this lookup. Might consider another way to position these + symbols. + +2010-08-30 Stevan_White + * FreeSerif.sfd: + + Sinhala: patch by Harshula Jayasuriya to correct the writing system + direction in some lookups. + + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Currency Symbols: additions and tweeking + +2010-08-24 Stevan_White + * FreeSerif.sfd: + + Sinhala: added one ligature glyph, from Harshula Jayasuriya + +2010-08-20 Stevan_White + * FreeSerif.sfd: + + Resolves class of validation problems in Sinhala: Bad Glyph Name. + + This is a FontForge bug, that appears when certain types of problems + occur in the glyph contours. Probably an arithmetic error causes some + corruption. + + Corrected missing extrema in recent Latin Extended-D range + + Sinhala: re-did previous patch using a more recent one. + Un-did some other glyph changes that didn't help much anyway. + + * FreeMono.sfd: + + Named letters in several ranges... should write a script for this... + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Added full GNU copyright announcement to TT Names. + Updated Copyright date. + + * FreeSerif.sfd: + + Sinhala: Applied a patch from Harshula Jayasuriya, improving glyph + names. + I tried to tidy up some of the glyphs, but it's a big job... + + Latin Extended B: fixed one case of missing extrema + +2010-08-18 Stevan_White + * FreeSerif.sfd: + + Latin Extended-D: yet a few more easily made letters + + Latin Extended-D: made a few more letters + +2010-08-09 Stevan_White + * FreeSerif.sfd: + + Supplemental Arrows-A: completed + + Arrows: completed + +2010-08-04 Stevan_White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd: + + Combining Diacritics: some additions in BoldOblique, corrections in + other faces. + Several improvements to Greek letter forms in BoldOblique + +2010-08-03 Stevan_White + * FreeMonoBold.sfd: + + Arrows, a few math operators, and one more combining diacritical + + * FreeMono.sfd, FreeMonoBold.sfd: + + Added some combining diacriticals to bold, touched up some spacing + modifiers. + Minor corrections to roman. + + * FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + Marks, spacing modifier letters: corrected placement of marks, + added some spacing modifier letters and combining marks. + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + Better Vietnamese support, using 'ccmp' and 'mark' lookup tables. + MonoBoldOblique: added Extended Latin ranges + + * FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: + + Vietnamese: Much adjustment of horn letters, + also general adjustement of marks + +2010-08-02 Stevan_White + * FreeSerif.sfd: + + Vietnamese: inadvertently broke the main face. This fixes it. + + * FreeMono.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Vietamese: In roman and sans, lookups are basically functional now. + Used 'ccmp' Ligature Substitution to form stacked marks (inasmuch as + glyphs for the stacked Unicode codepoints are available) + Adjusted positioning of some marks. + Named many letters and combining marks. + + roman italic. Re-designed horn of O and U. Other roman faces could also + benefit from a horn job. + + * FreeMono.sfd, FreeSerif.sfd: + + roman: correction to one math operator + mono: Mathematical Operators complete (up to some pre-5.2 Unicode version) + + * FreeMono.sfd: + + Mathematical Symbols: range nearly finished + + * tools/OpenType.py: + + Correction regarding NKo range. + + * tools/range_report.py: + + made not to complain about special TrueType slots 0x00, 0x01, 0x0D + +2010-08-01 Stevan_White + * FreeMono.sfd, FreeSerif.sfd: + + roman: corrected direction of 2 math operators + mono: added several math operators + + Worked on mark positioning for Vietnamese, Cyrillic + +2010-07-30 Stevan_White + * FreeMono.sfd: + + Reduced height of two-part Summation symbols + https://savannah.gnu.org/bugs/?23064 + + Corrected U+2626 Orthodox Cross + https://savannah.gnu.org/bugs/?27579#discussion + + * FreeSerif.sfd: + + Added some Miscellaneous Technical Symbols + +2010-07-29 Stevan_White + * FreeSerif.sfd: + + Put in some scan lines 23BA-23BD, based on 2500, as discussed in + https://savannah.gnu.org/bugs/?23064 + I still have no idea what the application for these glyphs would be... + +2010-07-17 Stevan_White + * FreeSerif.sfd: + + added mark anchors for acute, grave in cyrillic (other faces already + had them) + +2010-07-13 Stevan_White + * FreeMono.sfd: + + Made germandbls (ess-zet) a bit wider, moved a bit to left + +2010-07-10 Stevan_White + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifItalic.sfd: + + Resolves bug 30344: "Greek Final Sigma could be shortened" + https://savannah.gnu.org/bugs/index.php?30344 + Problem only affected roman, but touched up other faces anyway. + +2010-05-30 Stevan_White + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Latin-extended-B: fiddled with some of the horizontal strokes + +2010-05-29 Stevan_White + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Latin: accents on ogonek letters (for Navaho) + a little adjustment of apostrophe (Navaho, Hawaiian) + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Latin mark problems + * low dots in bold uneven + * ring in bold smaller than in roman, and not heavier + * apostrophe in italic too far to right (Navaho, Hawaiian) + + * FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Latin: fixed problems with various marks: ogonek, hook, comma below, + some kerning, esp. of non-ascii characters + + * FreeSans.sfd, FreeSerif.sfd: + + Sans: made dot accents same height as i-dot, kerned y with comma + Both: made low comma accent lower, smaller (esp. for Romanian) + +2010-05-27 Stevan_White + * FreeSans.sfd: + + Latin: make caron of more uniform height + + Latin: i was somehow displaced, dotlessi was much too wide for Turkish + + * FreeSans.sfd, FreeSansOblique.sfd: + + Latin: made ring accent heavier, esp. for Swedish + + +2010-05-10 Stevan_White + * FreeSans.sfd, FreeSerif.sfd: + + Latin: kerning tweeks + +2010-05-09 Stevan_White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + As discussed in freefont-bugs mailing list, Thu, May 6, 2010 + "FreeMono affected by OS X 10.6 nested character references bug" + reduced reference nesting in multiple quote characters, as a courtesy + to Mac OS 10.6 users, who suffer from a bug. + +2010-05-04 Stevan_White + * FreeSerif.sfd: + + Latin: kerning tweeks + +2010-05-03 Stevan_White + * FreeSerifBold.sfd: + + Latin: spacing of round small letters, kerning tweeks, fiddled with + ligatures + +2010-04-17 Stevan_White + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Daniel Johnson improved Cherokee Da + +2010-04-10 Stevan_White + * FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: + + Emboldened underscore and related glyphs. Resolves issue 22999 + https://savannah.gnu.org/bugs/index.php?22999 + Low line (005F) in bold fonts do not have heavier weight + +2010-04-09 Stevan_White + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Serif: Added Thai TTF names + +2010-04-08 Stevan_White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSerif.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Corrected some language names + A bit o kerning + + * FreeSerifBold.sfd: + + Fixed problem with name. This should be the same as before the revision + except for the fix. + The KDE font installer was saying this face was incorrectly named + Free Serif Bold Italic, but this wasn't quite correct. One of the other + language names said it was named Free Serif Halvfett Kursiv, which + conflicted with that language name for the real Free Serif Bold Italic. + + Regression: for some unknown reason, previous release gets built so + that my system thinks it is Free Serif Bold Italic. + This is a mystery. There is nothing about Italic in the file. + +2010-04-06 Stevan_White + * Makefile: + + Made graceful in absence of Fontforge + +2010-03-29 Stevan_White + * FreeSerifBold.sfd: + + Adjusted some accent marks, named a few characters + +2010-03-25 Stevan_White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + added Ukrainian TTF names + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + added bahasa indonesian TTF names + +2010-03-21 Stevan_White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Added several TTF Names. (Need to check with native speakers.) + +2010-03-20 Stevan_White + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Fill out TTF Names tables regarding font names + +2010-03-19 Stevan_White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Removed TTF Names for 'sample text' and all 'license URL' except English, + 1) in response to FontForge complain that large names tables conflict + with recent Windows patches + 2) because they are redundant and inappropriate + (Hope to post the list of sample texts elsewhere, because I like the idea.) + +2010-03-02 Stevan_White + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Latin standard ligatures: in non-bold, promoted dlig to liga. + Put standard Dutch IJ in all; Adjusted spacing a bit + +2010-02-28 Stevan_White + * FreeSerifBold.sfd, FreeSerifItalic.sfd: + + Cyrillic: further revision of spacing, in direction of loosening. + bold ze was strangely thin; made bolder. + +2010-02-27 Stevan_White + * FreeSerif.sfd: + + Cyrillic: reviewed spacing of whole range, generally loosened slightly + tidied a couple of ugly glyphs + +2010-02-09 Stevan_White + * FreeSerifBoldItalic.sfd: + + tweeks to kerning in Latin + + * FreeSerifBold.sfd: + + Tweeks to kerning in Latin + +2010-01-28 Stevan_White + * tools/isMonoMono.py: + + Implement FontForge handling of magic characters + .notdef, .null, nonmarkingreturn + at + 0x0000 0x0001 0x000D + +2010-01-27 Stevan_White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Improved magic characters for FreeMono, inserted them for other faces + https://savannah.gnu.org/bugs/index.php?28742 + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + Added at 0x0000 0x0001 0x000D characters + .notdef .null nonmarkingreturn + These are NOT UNICODE they are to satisfy an essentially undocumented + "feature" of FontForge, ( in source tottf.c, AssignNotdefNull() ) + And a funny strong suggestion of TrueType fonts, that they begin with + three special characters (evidently different from encoding slots) + http://www.microsoft.com/typography/otspec/recom.htm + + FontForge looks for these glyphs in certain places and copies them. + Otherwise, apparently, it will find a glyph elsewhere (unclear how) and + copy it there, possibly resulting in something quite wrong + (such as a non-monospace font). + + The three are copied to the end of TTF fonts (only one to the end of OTF + fonts) + +2009-12-31 Stevan_White + * FreeSans.sfd: + + Tamil: deletd Unicode range due to absence of necessary ligatures + + * FreeSerifBold.sfd: + + Cyrillic tweek to spacing + +2009-12-29 Stevan_White + * FreeSans.sfd, FreeSansBold.sfd: + + Gurmukhi: added 2 characters to complete range + + * FreeSans.sfd, FreeSerif.sfd: + + Devanagari: filled out sans, some corrections in serif + + * FreeSerif.sfd: + + Devanagari: Drew and constructed glyphs to complete range. + +2009-12-28 Stevan_White + * OpenType.py: + + Added/corrected some ranges + +2009-12-27 Stevan_White + * tools -- CheckConformance.pl, GenerateTrueType, MES-1.lst, MES-1.txt, MES-2.lst, MES-2.txt, MES-3B.lst, MES-3B.txt, WGL4.lst, mes-list-expand.pl: + + disabled build of Mac TT + + * tools/ligatureLookups.py: + + better sanity check + + * tools/range_report.py: + + more generic title + + * tools/OpenType.py: + + correction to Tamil + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Resolves bug #23049 + Replacement character (U+FFFD) not properly styled + https://savannah.gnu.org/bugs/index.php?23049 + + * FreeSerif.sfd: + + Devanagari: added letters, completing Unicode range + + * FreeSerif.sfd: + + Tamil: added 2 monster glyphs, completing range + (0bc1-2 still questionable) + +2009-12-26 Stevan_White + * FreeSerif.sfd: + + Indic ranges: named lots of characters + Tamil: corrected and added a few letters + + Tamil: added digits + + Tamil: a few more symbols. Only a couple of monster signs still + missing, and a couple of marks seem just wrong... + + Malayalam: completed Unicode range, also moving some Chillu letters from + Private Use area to Unicode, and re-establishing ligatures + + * FreeSans.sfd: + + Tamil: completed digits, added some other chars + +2009-12-25 Stevan_White + * FreeSans.sfd: + + Indic ranges, esp. + Devanagari: added several new Unicode (not yet complete) + tidied letters + Bengali: tidying, made some refs + +2009-12-24 Stevan_White + * FreeSans.sfd: + + Indic ranges: named most of the Unicode characters + Tried to improve a few bad names for ligatures + in Private Use Area + Made a few references: not clearly an improvement. + This stuff is still a mess... + + Devanagari: added an obviously missing nukta ligature + + Gujarati: added some subvocalic letters for Sanskrit. Quality is low. + + Filled out Geometric Shapes. + + * tools/ligatureLookups.py: + + fixed syntax error + + * tools/LigatureList.pl: + + no longer relevant. + +2009-12-23 Stevan_White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + cosmetic re-name and re-order of lookups + + * tools/OpenType.py: + + removed links to disappeared web pages + +2009-12-22 Stevan_White + * FreeMonoOblique.sfd: + + Diagonal Fractions lookup didn't make much sense in mono anyway, + much less in just one style. + +2009-12-20 Stevan_White + * FreeSerif.sfd: + + split Diagonal Fractions lookup into two tables + + re-encoded some characters + adjusted some marks + corrected two wrongly-placed glyphs in Phonetic Extensions Supplement + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + General Punctuation: Got rid of deprecated subrange 0x206A-0x206F + + * tools/range_report.py: + + corrected script name + + * tools/OpenType.py: + + numerous changes, some reflecting changes to Unicode standard + +2009-12-14 Stevan_White + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Unicode 5.2 corrections of Abkhasian letters from Daniel Johnson. + Got rid of some old glyph names. + +2009-12-06 Stevan_White + * FreeSans.sfd, FreeSansOblique.sfd: + + Cherokee: fixed previous commit of a partial, and old range in + medium weight + + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Cherokee, courtesy of Daniel Johnson. + +2009-11-20 Stevan_White + * FreeSans.sfd: + + New glyphs for Unified Canadian Aboriginal Syllabics as defined in Unicode 5.2 + by Daniel Johnson + +2009-11-14 Stevan_White + * FreeSerif.sfd: + + Resolves bug #27842: FreeSerif U+1F016 (Mahjong Tile Seven of Bamboos) Wrong + https://savannah.gnu.org/bugs/?27842 + has one extra bamboo in it for a total of eight. + The bamboo on the top left needs to be removed + + Resolves bug #27579: Orthodox cross has wrong glyph + http://savannah.gnu.org/bugs/?27579 + U+2626 Orthodox Cross should slope downwards from left to right. + +2009-11-13 Stevan_White + * FreeSerifBold.sfd, FreeSerifItalic.sfd: + + Cyrillic: corrections to Abkhazian letters by Daniel Johnson + +2009-11-05 Stevan_White + * FreeSerif.sfd: + + Cyrillic: corrections to Abkhazian letters by Daniel Johnson + +2009-10-16 Stevan_White + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Cyrillic: tweeks to brev, based on Unicode 5.2 samples + +2009-10-08 Stevan_White + * FreeSerif.sfd: + + Currency Symbols: tidied + + Number Forms: three new vulgar fractions + + Currency Symbols: added "Tenga" of Kazakhstan + + Latin Extended: corrected a couple of wrong bearings + some fiddling with Vienamese letters with hook + +2009-10-01 Stevan_White + * FreeSerif.sfd: + + added missing accent + +2009-09-17 Stevan_White + * FreeSerif.sfd: + + Latin kerning: gave qj positive kerning (it must happen sometimes) + + Latin kerning: differentiated grave and dieresis vowels in some combos. + (also, adieresis hadn't been kerned at all...) + + Made ref of one Sinhala letter + +2009-07-30 Stevan_White + * FreeSans.sfd, FreeSansBold.sfd, FreeSerif.sfd: + + kerning + +2009-07-26 Stevan_White + * FreeSansBold.sfd: + + kerning + + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + added some space in diaeresis + did some kerning + + * FreeSansBold.sfd: + + Revert serious mistake with previous commit: had somehow set splines + quadratic. + Here, the GaspTable from that commit is preserved, + However there were evidently numerous other changes that weren't + documented, and these are lost. + +2009-07-12 Stevan_White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Added GASP tables for control of hinting/smoothing (anti-alising) of + TrueType. + Now the values are better suited to the EM size of the fonts. + Further adjustment (based say on stem width) might still be profitable. + + * FreeSans.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + More tweeks on accents, especially Maltese letters. + +2009-07-11 Stevan_White + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Maltese Hbar, hbar, Improved, made more consistent. + + * FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Latin: various corrections and tweeks for consistency in accented letters. + + * FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + more space to accent on lcaron + tightened DZ etc ligatures + in SerifItalic faces made references etc in Spacing Modifiers and Combining + further kerning + + * FreeSans.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + kerning + Sans: decided dots and some other marks needed more room. + +2009-07-10 Stevan_White + * FreeSerif.sfd, FreeSerifItalic.sfd: + + IPA. Phonetics: tweeks + + * FreeSerif.sfd: + + Tweeked some math symbols + + * FreeSans.sfd, FreeSansOblique.sfd: + + Letterlike: additions + + * FreeMonoOblique.sfd: + + IPA + + * FreeSerifBoldItalic.sfd: + + Another IPA symbol + + * FreeSerifBoldItalic.sfd: + + IPA and Spacing Modifier Letters: added a few + +2009-07-09 Stevan_White + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifItalic.sfd: + + Latin: various horizontal spacing and positioning issues + Replaced Tz and tz ligatures with the originals of Danial Johnson. + (range is "Mayanist" and despite Unicode samples, current usage + uses normal z in glyph) + Put stylized Tz tz in a discretionary ligature lookup. + +2009-07-08 Stevan_White + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Cyrillic yi_yi Ukrainian ligature + Latin various pointwise cleanup, made some references, horizontal adjustments + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Cyrillic: Special ligature for Ukrainian yi_yi, also some kerning + +2009-07-07 Stevan_White + * FreeSerif.sfd: + + Latin: kerning; made accents on i tighter to avoid collisions + +2009-07-05 Stevan_White + * FreeSansBold.sfd, FreeSansBoldOblique.sfd: + + Made lookup tables for Dutch IJ + + Re-did Dutch digraph IJ in bold faces as "broken-U", because I + thought it was cool and nobody was there to stop me. + + * FreeSerif.sfd: + + Corrected ligatures Tz tz; put them in special lookup + Latin Extended Additional: added medevalist letters, completing range + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Cyrillic: added yi_yi ligature for Ukrainian in roman. Not sure + if it's right. + Latin: kerning. Added longs_t ligature, and historic ligature tables + IPA: in bolditalic, added a letter or two + + * FreeSerif.sfd: + + Kerning for hbar + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: + + Kerning for Western Slavic languages + Added a couple of IPA to BI + +2009-07-04 Stevan_White + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Combined letters ae, oe, ij had incorrect horizontal spacing + + * FreeMono.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Combining Diacritical Marks for Symbols: additions and fiddling. + Also related circles, arrows. + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Letterlike Symbols: various additions and adjustments + Number Forms: Completed range in serif roman. Adjusted spacing + of Latin numerals in serif faces. + Diacritics for Symbols: various additions + Geometric shapes: thought it best for circle to be round even in + oblique faces. It's a choice of course. + Added to several faces. + Made all to pass tests (except Sinhala) + +2009-07-02 Stevan_White + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Letterlike Symbols: more additions, adjustments + Also fiddled with some math symbols in Sans faces + + * FreeSans.sfd, FreeSansOblique.sfd: + + Letterlike Symbols; additions and adjustments + Note: Pango is rendering very strangely: many glyphs in the font are + being stolen from some other fonts instead: All the script in + blackletter, and some others as well. Is there a cache in the system + somewhere? Or what? + +2009-06-28 Stevan_White + * FreeSerif.sfd: + + Modified glyph. From patch by Pavel Skrylev. + + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Superscritps and Subscripts: made glyphs to complete range in all faces + + * FreeSans.sfd, FreeSansOblique.sfd: + + Added some combining marks for symbols and Blackboard Bold letters to + letterlike symbols + + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Various adjustments regarding superscript and subscript characters in + several ranges. + +2009-06-27 Stevan_White + * FreeSerif.sfd, FreeSerifItalic.sfd: + + More fiddling with super/subscripts + Tidied points in Serif to make fontforge "wrong direction" complaint + in scaled reference go away. + Made some other references in basic latin ranges. + + * FreeSerif.sfd: + + Superscripts and subscripts (in various ranges): tried to systematize + sizing and vertical placement. Note: most letters are still simply + scaled. + This is practical maintenance-wise, but isn't typographically optimal. + + * FreeSerif.sfd: + + Cyrillic Extended A: altered mark positions + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Phonetic Extensions: various corrections and fiddling + Changed Blues values in FreeSerifBoldItalic + +2009-06-25 Stevan_White + * FreeSansBold.sfd, FreeSansBoldOblique.sfd: + + Combining Diacritical Marks for Symbols: added to bold oblique + added placement mark to many + + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + IPA Extensions: completed in bold and boldoblique, completing range for face. + + All faces: deleted 'cvt', 'prep', 'fpgm' TrueType tables, because + FontForge was complaining about them (legacy hinting that could + interfere, possibly lower quality code, etc) + + * FreeSansBold.sfd, FreeSansBoldOblique.sfd: + + IPA Extensions: made several characters + + * FreeSerif.sfd, FreeSerifBold.sfd: + + IPA Extensions: completed range in bold + +2009-06-23 Stevan_White + * FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: + + Spacing Modifiers: added a couple + Combining Diacriticals: brought range to par with FreeSans + + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Same correction as for FreeSerif + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Corrected descender of 027f + + * FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: + + IPA and related: made lots of additional glyphs + +2009-06-22 Stevan_White + * FreeSerif.sfd: + + Latin: further clean-up + +2009-06-21 Stevan_White + * FreeSerif.sfd: + + General pointwise clean-up of Latin and Latin Extended. + No visible changes were intended besides changed policy on + horizontal placement of some horned letters + + * FreeSerif.sfd: + + Latin Extended-C: constructed glyphs to complete range. + Latin Extended-D: constructed a bunch of glyphs; some related changes elsewhere. + +2009-06-20 Stevan_White + * FreeSerif.sfd: + + Latin Extended-C: added most of range + + Modifier Tone Letters: added glyphs to complete range. + This should also complete all the IPA/Phonetic extenseions ranges. + + Phonetic Extensions Supplement: added letters completing range + Note the superscript ones are simply scaled, so stem width is + not quite right... + +2009-06-19 Stevan_White + * FreeSerif.sfd: + + Phonetic Extensions: made letters to complete range + +2009-06-18 Stevan_White + * FreeSans.sfd: + + IPA Extensions: clean-up, fix some horizontal spacing issues + + * FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Some glyph problems clean-up, made to pass validate (BlueValues) + +2009-06-17 Stevan_White + * FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + IPA Extensions: Improved spacing and horizontal positioning + + * FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Georgian: added missing letter + + * FreeSansBold.sfd, FreeSansBoldOblique.sfd: + + IPA: made curls on some glyphs more distinct. + note horizontal placement in BO is chaotic--needs work + +2009-06-14 Stevan_White + * FreeSerif.sfd: + + Musical Symbols: various experiments with lookups. + calt: should have allowed isolatef forms of combining marks, + (but can't see application support...) + aalt, hist: for alterntative characters + Added some historical glyphs + Math Alphanumeric: some clean-up. + +2009-06-11 Stevan_White + * FreeSerif.sfd: + + Musical Symbols: various tweeks. Failed attempt to use 'isol' + lookup to put isolated combining marks above the baseline. + + More fiddling with mark placement, strengthened ornamental endings + + mkmk positioning of augmentation dot + +2009-06-10 Stevan_White + * FreeSerif.sfd: + + Musical Symbols: combining marks above and below notes now working + somewhat + +2009-06-08 Stevan_White + * FreeSerif.sfd: + + Musical Symbols: more adjustments of size and placement + +2009-06-07 Stevan_White + * FreeSerif.sfd: + + Musical Symbols: mostly work on lookups. Made tablature symbols + thinner. + +2009-06-06 Stevan_White + * FreeSerif.sfd: + + Musical Symbols: more fiddling with sizes and positions + + Byzantine Musical Symbols: minor clean-ups + + Fixed some ATT problems with 'kern' lookups for Cyrillic + +2009-06-05 Stevan_White + * FreeSerif.sfd: + + Musical Symbols: many changes to glyph positions and shapes + +2009-05-28 Stevan_White + * FreeSerif.sfd: + + Cyrillic: additions and re-naming by Pavel Skrylev. + * Added Cyrillic-B Ext glyphs, and Cyrillic-A Ext glyphs. + * Added cyr_above anchor to all cyrillic glyphs, some glyphs + was changed + * To all Cyrillic letters I've given proper names based on old + Slavic language which is source of all modern slavic languages. + + (the naming is contentious, and there are a couple of technical + problems...under consideration) + +2009-05-27 Stevan_White + * FreeSerif.sfd: + + Musical Symbols: + Scaled up accidentals a bit. + Reduced width of repeated figure marks + Reduced width of caesura even more + Tried to implement mark positioning...not working everywhere + made references + +2009-05-26 Stevan_White + * FreeSerif.sfd: + + Made all letterlike glyph parts more like those from Serif and + Serif Italic. + (Except for Ped. U+1d1ae) + +2009-05-20 Stevan_White + * FreeSerif.sfd: + + Corrected DPOS lookup for Music range to be in script 'musi' + + Western Musical Symbols: fiddling + Miscellaneous Symbols: re-design of musical flat symbol. + +2009-05-19 Stevan_White + * FreeSerif.sfd: + + Western Musical Symbols: Revised horizontal placement of notes. + Altered many combining symbols to be more like Unicode sample. + Corrected many symbols that should be spacing but had 0 width. + Raised many symbols that were far lower than in Unicode + samples. + +2009-05-18 Stevan_White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + U+0354 and U+0355 (combining left/right arrowhead below) were switched + +2009-05-11 Stevan_White + * FreeSans.sfd, FreeSerif.sfd: + + Hebrew: Moved vowel below mark for esh (05e8) and dalet (05d3) as + recommended in bug report #25887 + "FreeSans Hebrew most nonspacing marks are spacing" + https://savannah.gnu.org/bugs/?25887 + + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Put PS Private BlueScale back to default. (Was really experiment to + alleviate excessive overshoot. Didn't work and FontForge complained.) + + * FreeSerif.sfd: + + Geometric Shapes: made two 'bullet' shapes to be consistent with 'bullet' + Blues values: put Std VH W into Stem Snap values + + * FreeSans.sfd: + + More Geometric Shapes. also worked on character widths. + +2009-05-09 Stevan_White + * FreeSans.sfd: + + More Geometric Shapes + +2009-05-02 Stevan_White + * FreeSansOblique.sfd: + + Had misplaced Tifinagh range. + + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + The rest of Tifinagh, courtesy of Daniel Johnson. + + a few adjustments. + +2009-05-01 Stevan_White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Explicitly disabled PS Private dictionary entry BlueFuzz + as recommended in Adobe Type 1 Font Format, sect. 5.8. + + * FreeSans.sfd: + + Tifinagh range, courtesy of Daniel Johnson. + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Adjusted PS Private values according to understanding of + Adobe Type 1 Font Format (Ch. 5, Private Dictionary) + + Not completely clear on BlueScale, and StemSnap values are still a + mystery. (FontForge 'guess' seems to do little or nothing, and I + don't know where these values came from) + + Original hope was to improve appearance of overshoot in Sans, but it + seems that my renderers ignore this information. + + * tools/ranges.py: + + Corrections for Georgian and Tifinagh ranges + +2009-04-28 Stevan_White + * FreeSans.sfd: + + More Geometric Shapes + +2009-04-27 Stevan_White + * FreeSans.sfd: + + Added U+25D0-3 (half-black circles) + Note the Geometric Shapes range is still in poor shape in Sans. + +2009-04-25 Stevan_White + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Serif: fiddled with mark positioning in Cyrillic and Glagolitic + Non-roman faces: Added 'mark' positioning for Cyrillic + +2009-04-14 Stevan_White + * FreeSerif.sfd: + + Cyrillic Extended-B more additions. Now has all except payerok + punctuation and Old Abkhasian letters. + +2009-04-13 Stevan_White + * FreeSerif.sfd: + + Cyrillic Extended-B a few more letters + + * FreeSans.sfd, FreeSerif.sfd: + + kerning: tweeks + +2009-04-11 Stevan_White + * FreeMono.sfd, FreeSans.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Georgian: additions and improvements. + Serif now has full compliment. + Note uppercase is questionable, being a simple scaling... + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Latin Extended-D added u+a788-c + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Latin Extended-D + corrected slots for Mayanist letters in roman + added modifier letters u+a788-c + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Latin Extended-D Mayanist letters by Daniel Johnson + + * tools/ranges.py: + + Corrected Vai range + +2009-04-10 Stevan_White + * FreeSerif.sfd, FreeSerifItalic.sfd: + + Letterlike Symbols: additions and improvements + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + Letterlike Symbols: additions, improvements + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + Reconsidered numeral 1. Made angle more like other angles in font. + +2009-04-09 Stevan_White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + Increased angle of hook on numeral 'one', to improve distinction from + letter 'l' at small point sizes. (Noticed that on some systems, even + at 12 point the distinction had not been obvious.) + +2009-03-29 Stevan_White + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + General Punctuation: Adjust position, shape of quotes, fiddle with + others. + + * FreeSans.sfd: + + Kerning: Had grouped letters with round bowls on left (e,c,0,d,q) + together, but now see the original Nimbus fonts had left bounds that + vary by 10 EM or more, which is quite visible. I am correcting a + flaw in the original font in a very difficult and complex way. + It would be much better to make the bounds of these similar letters + to be equal. + To do: same for punctuation, copy to other styles of Sans. + + * FreeSerif.sfd: + + Kerning tweeks. + +2009-03-22 Stevan_White + * FreeMono.sfd: + + clean-up of some of the basic Nimbus glyphs + + * FreeSans.sfd, FreeSerif.sfd: + + Hebrew: more work on lookups regarding vowel marks + + * FreeSans.sfd: + + Hebrew: vowel mark positioning + +2009-03-16 Stevan_White + * FreeSerif.sfd, FreeSerifItalic.sfd: + + re-named some lookup tables (Sinhala, Hebrew) + +2009-03-15 Stevan_White + * FreeSerif.sfd: + + Georgian: point-wise cleanup + note: doubts about spacing and glyph bounds in capitals + + * FreeSerif.sfd: + + Greek Extended: corrected u+1fd3 + +2009-03-13 Stevan_White + * FreeSerif.sfd: + + Cyrillic (and extensions) various tweeks to old Cyrillic letters, + spacing. + +2009-03-07 Stevan_White + * FreeMonoBoldOblique.sfd: + + correct direction braceleft + + * FreeSerif.sfd: + + Glagolitic: tweeks + + * FreeMonoBold.sfd: + + correct direction of braceleft + +2009-03-05 Stevan_White + * FreeSerif.sfd: + + Glagolitic: more fiddling. Raised small letters so their tops are + even with the tops of the big letters, which is more in line with + their "hanging" nature, and with most manuscripts. + +2009-03-04 Stevan_White + * tools/ranges.py: + + ranges for Sinhala + +2009-03-03 Stevan_White + * FreeSerif.sfd: + + Glagolitic: More tweeks. Added Djervi (I think) + +2009-03-02 Stevan_White + * FreeSerif.sfd: + + Glagolitic: tweeks + +2009-02-28 Stevan_White + * FreeSerif.sfd: + + Sinhala: replaced U+0DD0-1 with ones from sinha font + + Glagolitic: Additions, improvements (Note: the characters still missing + I simply haven't yet recognized in a manuscript or found in an on-line + HTML encoded text. I would like to see real ones rather than copying + out of the Unicode samples.) + + Cyrillic Extended-B: Assembled Monograph Uk, uk. See discussion + http://en.wikipedia.org/wiki/Uk_(Cyrillic) + +2009-02-27 Stevan_White + * FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + Made braces more distinctive. + +2009-02-26 Stevan_White + * FreeMono.sfd: + + ASCII: Accentuated braces (for better readability in terminals) + +2009-02-24 Stevan_White + * FreeSerif.sfd: + + Cherokee: Daniel improved U+13d2 + + Sinhala: Copied most Unicode glyphs directly from Yannis Haralambous + sinhala MetaFont files. These are: all but 0dd0 0dd1 0df4. + Gave Unicode characters names, based on a transliteration scheme from + Harshula. + The auxiliary Sinhala are all from the LKLUG font. + +2009-02-23 Stevan_White + * FreeSerif.sfd: + + Copied glyphs from LKLUG font, as discussed with Harshula Jayasuriya. + http://sinhala.cvs.sourceforge.net/viewvc/sinhala/sinhala/fonts/ + + This font is derived from a Metafont font: This package was + originally developed by Yannis Haralambous (Yannis.Haralambous at + univ-lille1 fr), with funding from the Wellcome Institute for the + History of Medicine, 183 Euston Road, London NW1 2BE, England (Contact + person: Dominik Wujastyk (D.Wujastyk at ucl ac uk)), which is using + the font in its Catalogue of Sinhala Manuscript. The original package + was available by ftp at ftp.bcc.ac.uk in: + /pub/users/ucgadkw/indology/software/sinhala1-TeX.zip + + The hope is to eventually pull glyphs directly from the original MF + files. + +2009-02-21 Stevan_White + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: + + tidying previous commits + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Serif: Revised letter spacing in Armenian. + Serif roman: Added initial version of Glagolitic (by me) + +2009-02-18 Stevan_White + * FreeSerif.sfd: + + Armenian: spacing changes + Sinhala: deleted range, for usual reasons: + It doesn't even contain the full set of Unicode letters, and Sinhala + requires auxiliary characters and lookup tables for proper + representation. + (Found what I think are the originals at + http://www.mettanet.org/fonts/ ) + +2009-02-12 Stevan_White + * FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + SerifBoldItalic - Armenian oblique from Daniel Johnson's bold version + Added ligatures (by Daniel) and lookup tables. + + * FreeSerifItalic.sfd: + + Armenian: Made oblique version of Daniel Johnson's range + + * FreeSerifBold.sfd: + + Armenian by Daniel Johnson + + * FreeSerif.sfd: + + Improvements of a couple of Armenian characters, from Daniel Johnson. + + * tools-- GenerateOpenType, GenerateTrueType, checkGlyphNumbers.py, findBackLayers.py, isMonoMono.py, range_report.py, ranges.py, validate.py: + + Changed /usr/local/bin/fontforge to /usr/bin/fontforge + (to work with the update-alternatives mechanism, whereby a link is made + /usr/bin/fontforge -> /etc/alternatives/fontforge -> preferred binary ) + +2009-02-07 Stevan_White + * FreeSerifItalic.sfd: + + Latin: Kerning. Fixed some missing extrema + Made some more delicate italic IPA letters + +2009-02-06 Stevan_White + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: + + Latin: kerning + + * FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: + + Adjusted ff etc ligatures in Italic + +2009-02-05 Stevan_White + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Thai sample text (means something like + Mr Sangkapan who sells bottles was picked up by the police because he + stole the wash of ms. .....) + +2009-02-04 Stevan_White + * FreeSans.sfd: + + Vai range, by Daniel Johnson + + * FreeSerifBoldItalic.sfd: + + Latin: kerning + +2009-02-03 Stevan_White + * FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: + + Latin: kerning + +2009-01-26 Stevan_White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + Made nu distinct from v. + Remedies bug #25376: https://savannah.gnu.org/bugs/?25376 + greek letter 'nu' [U+03bd] same as latin 'v' [U+0076] in FreeMono + +2009-01-22 Stevan_White + * FreeSans.sfd: + + Kerning. Need to copy to other faces + + Arabic ligatures: turned on "ignore combining marks" on advice of + Khaled Hosny. + +2009-01-20 Stevan_White + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Drew U+1e9C-F in Latin Extended Additional (including capital ess-zet) + +2009-01-19 Stevan_White + * FreeMono.sfd: + + Update of Kayah Li from Daniel Johnson + +2009-01-18 Stevan_White + * FreeSerif.sfd: + + Latin: kerning + + Coptic: Laula to be same height as Phi Psi (higher than other letters). + Dei and dei also to be higher letters, adjusted widths too. + + Unified Canadian Aboriginal Syllabics: moved the non-Unicode letter + part glyphs ucas.ring ucas.horizline ucas.shortvert ucas.righttack + ucas.lefttack to the Private Use area + 59664-59668 + Technique was to edit the SFD file directly: It seems the encoding + slot for the glyph is the first field of the "Encoding:" line for + the character. + + * FreeMono.sfd: + + Cherokee: improvements from D. Johnson. + +2009-01-17 Stevan_White + * FreeSerif.sfd: + + Cyrillic: Kerning. + + Re-linked Ezh/Yogh and re-made reversed Ezh. + +2009-01-16 Stevan_White + * FreeSerif.sfd: + + Fiddled with Coptic glyphs: Longer tail on Shei, less droopy Alfa. + Made Armenian Aiw to be a link to Phi (on Daniel Johnson's advice ) + + * FreeMono.sfd: + + Kayah Li by Daniel Johnson + + Cherokee, by Daniel Johnson + + Made references of some Armenian punctuation, + Made primereversed to be really the reverse of prime. + + Removed hints + + * tools/ranges.py: + + corrected Unified Canadian Aboriginal Syllabics + +2009-01-13 Stevan_White + * FreeSans.sfd: + + named some Armenian letters + + * FreeSerif.sfd: + + Armenian range by Daniel Johnson, with ligatures. + +2009-01-12 Stevan_White + * FreeSerif.sfd: + + Coptic: Raised top of laula above common top, as it appears in most + other fonts. Makes it easier to distinguish from alfa. + A little more space around Iauda and iauda. + Kerned Dei. + +2009-01-11 Stevan_White + * FreeSerif.sfd: + + Coptic: Made capital Alpha is distinct in printed form. + Made more angular vida with flattened top and bottom. + Made small hori more curvy. + More fiddling with Hori, made Kapa much wider. + + Reduced width of small letter straight stems to match small letters + in Latin. + Kerning for capitals. + + Revised: + Added a few dialectic letters and kai symbol + Removed many "ear" serifs, preferring a slashing continuation of + long decenders and diagonals as in some manuscripts + Made Kai and kai not to go below baseline + Made Psi a little broader + Made small khei distinct from cap, + Revised Hori and hori. + Some of this toward https://savannah.gnu.org/bugs/?25289 + + Greek: Made archaic letters u+0370-3 (understand are used for + old numbering) + +2009-01-08 Stevan_White + * FreeSerif.sfd: + + Various alterations to Coptic: Re-worked K and M, added kern table. + +2009-01-07 Stevan_White + * FreeSans.sfd: + + Daniel Johnson's fix of TT reference transformation bug in + Unified Canadian Aboriginal Syllabics, + +2009-01-06 Stevan_White + * FreeSans.sfd: + + Unified Canadian Aboriginal Syllabics range, courtesy of Daniel Johnson. + +2009-01-04 Stevan_White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Added 2009 to copyright dates + + * FreeSans.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Added some TrueType names + +2009-01-04 Stevan_White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Added 2009 to copyright dates + + * AUTHORS, CREDITS: + + Removed Glagolitic range author + + * FreeSans.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Added some TrueType names + +2009-01-01 Stevan_White + * FreeSerif.sfd: + + Removed Glagolitic range, since have not (yet) received OK from author. + + Added some TrueType Names + +2008-12-31 Stevan_White + * COPYING: + + Updated license to GPL v3 + +2008-12-30 Stevan_White + * FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Oblique versions of Daniel Johnson's Cherokee. + + * FreeSerifBold.sfd: + + Cherokee Bold range from Daniel Johnson. + +2008-12-27 Stevan_White + * isMonoMono.py: + + 900 EM -> 800 + + * FreeMonoBold.sfd, FreeMonoBoldOblique.sfd: + + Made glyphs to lie between -200 and 800 EM + + * isMonoMono.py: + + check that glyphs lie in vertical bounding boxes + + * FreeMono.sfd, FreeSerif.sfd: + + Extensible bracket characters didn't exactly line up. Fixed. + Mono: a couple of glyphs had gotten out of their bounding boxes again. + + * tools/isMonoMono.py: + + 900 EM -> 800 + + check that glyphs lie in vertical bounding boxes + +2008-12-26 Stevan_White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Final pre-release cleanup + + * FreeSerif.sfd: + + Buginese vowel u was misnamed + + * FreeMono.sfd: + + Yatcyrillic somehow was a mark character ... fixed + + * FreeSans.sfd, FreeSansOblique.sfd: + + Had to un-link references in + Sans: uni02B2, uni02B5 + SansOblique: uni0363 + because validation of the TTF file said the glyph + "is drawn in wrong direction" + I would have preferred to have understand this... + + * Makefile: + + Added quick test for FontForge version. + + * FreeMonoBold.sfd, FreeMonoBoldOblique.sfd: + + Removed kerning tables (?? what were they doing here anyway??) + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Kerning tables for Thai. + Handles one common case: short letter followed by a tall one with + an overhang to the left. + + * tools/ranges.py: + + some changes to explanatory text + +2008-12-25 Stevan_White + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifItalic.sfd: + + More putzing with kerning tables + + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Copied kerning classes + Serif -> SerifBold + SerifItalic -> SerifBoldItalic + Sans -> SansOblique SansBold SansBoldOblique + Some associated naming of characters, etc + + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Additions and correction in Spacing Modifier letters and IPA Extensions + +2008-12-23 Stevan_White + * FreeSerif.sfd: + + Applied patch to Cherokee range + +2008-12-20 Stevan_White + * FreeSerif.sfd, FreeSerifItalic.sfd: + + Fixed kern classes that end in space (crashes FontForge) + + * FreeSerifItalic.sfd, FreeSerif.sfd: + + kerning + +2008-12-19 Stevan_White + * FreeSerifItalic.sfd: + + kerning + + * FreeSerif.sfd: + + kerning + Some adjustments to Glagolitc spacing, mark positioning + +2008-12-18 Stevan_White + * FreeSerif.sfd, FreeSerifItalic.sfd: + + kerning + +2008-12-17 Stevan_White + * FreeSerif.sfd, FreeSerifItalic.sfd: + + kerning + +2008-12-11 Stevan_White + * FreeSans.sfd, FreeSerif.sfd: + + kerning + +2008-12-10 Stevan_White + * FreeSans.sfd, FreeSansBold.sfd: + + kerning + + * FreeSans.sfd, FreeSansBold.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd: + + kerning + +2008-12-09 Stevan_White + * FreeSerif.sfd, FreeSerifItalic.sfd: + + kerning + +2008-12-08 Stevan_White + * FreeSansOblique.sfd: + + Slanted small final sigma. Remedies + bug #24993: U+03C2 "Greek small letter final sigma" not slanted in + Free Sans Oblique + https://savannah.gnu.org/bugs/index.php?24993 + +2008-12-07 Stevan_White + * FreeSans.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + kerning, etc + +2008-12-06 Stevan_White + * FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifItalic.sfd: + + kerning + Tweek in Sans having to do with addition of Latin Extended + +2008-12-05 Stevan_White + * FreeSansBold.sfd, FreeSansBoldOblique.sfd: + + Tweeks to Latin Extended Additional + + * FreeSansBoldOblique.sfd: + + Added Latin Extended Additional range + + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Extra space at end of kern class names has bad effect on FornForge + script that try to run through kern classes. Some FontForge call + corrupts memory. + Got rid of extra space. + +2008-12-02 Stevan_White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Replaced U+0387 GREEK ANO TELEIA with top dot of colon. + See bug #24987: U+0387 GREEK ANO TELEIA too low + https://savannah.gnu.org/bugs/index.php?24987 + + * FreeSerif.sfd: + + more kerning in Cyrillic (broke into two tables of classes) + +2008-12-01 Stevan_White + * FreeSerif.sfd: + + tweeks to kernin + + * FreeSerifBoldItalic.sfd: + + kerning + +2008-11-30 Stevan_White + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Kerning for Latin and Cyrillic fairly complete in Serif faces. + Complete in sense that it looks pretty good under Pango for + English French German Spanish Polish Czech Latvian + But have not done Vietnamese (will require many more entries). + I adjust roman and italic, then copy tables by hand to bold and + bolditalic. + Misgiving: bolditalic is much too crammed + Overall, I may have over-kerned. (A difficult temptation to master.) + + * FreeSerif.sfd, FreeSerifItalic.sfd: + + kerning + + * FreeSans.sfd, FreeSerif.sfd, FreeSerifItalic.sfd: + + kerning + In Serif, modified widths of some extended latin glyphs + +2008-11-29 Stevan_White + * FreeSerif.sfd: + + Broke Latin kerning subtable into four, hoping it will be easier to + understand and maintain. + + * FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSerif.sfd, + FreeSerifItalic.sfd, FreeSerifBold.sfd, FreeSansOblique.sfd, + FreeSans.sfd: + + kerninig + +2008-11-28 Stevan_White + * FreeSans.sfd, FreeSerif.sfd: + + more kerning; + made guillemot narrower + + * FreeSansOblique.sfd, FreeSerif.sfd: + + previous commit was incomplete + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Adjusted width of single quotes (and apostrophe) to be "punctuation width" + More fiddling with kerning. + +2008-11-27 Stevan_White + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifItalic.sfd: + + much fiddling with kerning + +2008-11-26 Stevan_White + * FreeSerifBold.sfd: + + Basic kerning, named main Cyrillic letters + + * FreeSerifItalic.sfd: + + Basic Cyrillic kerning + + * FreeSerif.sfd: + + Tweeks to Cyrillic kerning + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifItalic.sfd, Makefile: + + Much fiddling with kerning, tables, and generating fonts whose kerning + tables work with OpenOffice. + + * tools/GenerateTrueType: + + Made to include old-style kerning + Converted to Python + +2008-11-24 Stevan_White + * FreeSerif.sfd: + + regularized padding in Miscellaneous symbols. + At least within related ranges tried to make similar. + Made to validate + +2008-11-23 Stevan_White + * FreeSerif.sfd: + + Filled out Miscellaneous Symbols. Used George Douros' Unicode font. + Completed Miscellaneous Symbols, with some drawings from George Douros' + Unicode Symbols, and some of mine. + + * FreeMono.sfd, FreeMonoOblique.sfd: + + Replaced Greek Exteded psili and dasia with scaled versions of the + "bent quote" mark. I think it's distinctive enough, but not so silly. + + Remedies bug #22997: Mono: Greek Extended psili is ugly + https://savannah.gnu.org/bugs/?22997 + + * FreeSerif.sfd: + + Made some recycling symbols + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: + + Finished with Hebrew Pointed letters in all faces. + + * tools/range_report: + + preferred to keep the file ending + +2008-11-22 Stevan_White + * FreeSans.sfd: + + Fiddled with Hebrew Pointed letters + + * FreeSerifItalic.sfd: + + Marks for Vietnamese + + * FreeSerif.sfd, FreeSerifItalic.sfd: + + Letter pe had strange thick middle ear that looked awful. lamed had ben + bumped at some point. Fixed. Adjusted some of the points. + +2008-11-21 Stevan_White + * FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + repairs to Pointed Hebrew + + * FreeSerif.sfd: + + Numeral line positioning marks for Gothic + + * FreeSerifItalic.sfd: + + Added Combining Marks for Symbols (some question about obliqueness of + some symbols) + Cleaned up some empty glyphs in Pointed Hebrew. + +2008-11-20 Stevan_White + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Provided Hebrew pointed letters, with lookups, for all Serif faces. + +2008-11-19 Stevan_White + * FreeSerifBoldItalic.sfd: + + renamed Hebrew lookups + + * FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Completed Hebrew in Bold faces. + + * FreeSans.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifItalic.sfd: + + More tweeks to Hebrew points + + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSerif.sfd, FreeSerifItalic.sfd: + + Adjustments corrections and additions to Hebrew points + +2008-11-18 Stevan_White + * FreeSansBold.sfd: + + Cleaned out a lot of ridiculous kernings + +2008-11-17 Stevan_White + * FreeSansBoldOblique.sfd: + + fiddled with Armenian ligatures + + * FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Added Armenian (with ligatures) to BoldOblique + Fiddled with character spacing + +2008-11-16 Stevan_White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Added U+01f9 and paragraph end marker to Georgian + Fiddled with Armenian ligatures + +2008-11-15 Stevan_White + + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Another pass at letter spacing in Cyrillic. + Also went through ancient letters. + + Added Georgian paragraph separator 10FB + Added Georgian turned gan 10F9 (because it was easy) + + Re-worked letter spacing through modern Cyrillic range. + + * FreeSans.sfd, FreeSansBold.sfd, FreeSerif.sfd: + + Letter spacing + +2008-11-14 Stevan_White + * FreeSerif.sfd: + + Added several characters to Cyrillic Extended-B + + * FreeSansBold.sfd, FreeSansBoldOblique.sfd: + + Made Cyrillic hooked e U+04BC-F to look less goofy. + + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Based on assertion on Pechatnyj Dvor's web site, Cyrillic Fita + U+0472-3 and "Barred O" U+04E8-9 are different styles the same letter, + and the fact that the tilde in the O never looked good in Sans, I + made them all barred O's. + + * FreeSerif.sfd: + + Added Cyrillic Yn, yn (U+a65e-f) + + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: + + Synced up Cyrillic and Combining Diacritics ranges, + Couple of tweeks in Gujarati to make TT validate + + * FreeSans.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Changes to older Cyrillic letters, in response to further information. + Made omegas, omegas with titlo, and OT to all be of the same size and + shape in Serif. + Un-linked Cyrillic Psi and psi from Greek, made squarer versions. + + Some more Cyrillic diacritical marks in Sans. Re-worked U+04bc-f . + Experimenting with mark positioning for Cyrillic + +2008-11-12 Stevan_White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Strove to make Euro look more like the EC logo design, while making + glyph fit better with the design of its face. Bug #3576: Euro design + https://savannah.gnu.org/bugs/?23576 + + * FreeSans.sfd, FreeSerif.sfd: + + Adjustments mostly to GPOS tables having to do with Vietnamese marks. + The WAZU Vietnamese test page looks pretty good in Sans now. + Still not thrilled with below-dot when it appears with a mark over + e.g. U+0102. Pango positions one or the other but not both. + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Extensive modification of GPOS lookup tables for mark positioning. + I think they're now all functional (except styled Mono faces have none). + Also added lots of marks to faces that didn't have them, and also + fiddled with Combining Diacritical Marks. + +2008-11-10 Stevan_White + * FreeSerif.sfd: + + Made one combining mark really combining + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + Made a few combining characters to be zero-width in Mono, + Added them to other styles. + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Figured out why below marks in Thai weren't working in the lowest + letters. I think Pango and other font renderers ignore 'blwm'. + However, 'mark' works. + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Tweeks to Thai marks + +2008-11-09 Stevan_White + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Several bugfixes in Thai, mostly having to do with mark placement and + ligatures. Implemented ru-saraaa and lu-saraaa with ligatures. + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + added and named dottedcircle (used by Pango to render + combining mark base) + + * FreeSerif.sfd: + + Tweeks to Coptic, after viewing more papyrus samples and web pages. + + * FreeSerif.sfd: + + Weight of Coptic small letters made to match that of Latin and Greek ones. + +2008-11-08 Stevan_White + * FreeSerif.sfd: + + Made Coptic to comply better with + http://www.wazu.jp/gallery/Test_Coptic.html + Made a flourish at foot of letters with long diagonal. + + More tweeks to Coptic; put in a mark lookup table. + + Note: for small letters I made scaled references to captials. + Results in those letters looking quite light next to the capitals and + next to small Latin letters. Also, there are a few variant forms for + capitals (Unicode samples don't show this). It would be good to + re-work + + Added Coptic alphabet in u+2C80-2CB1 and u+03E2-u+03EF, drawn/built by + me, based on Unicode samples, TeX font copte, and scans at WikiPedia. + +2008-11-07 Stevan_White + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Further tweeks to dieresis in Greek and Cyrillic + + * FreeSerif.sfd: + + replaced Greek I dieresis with references, tweeked height of dieresis. + +2008-11-04 Stevan_White + * FreeSerif.sfd: + + Added a few Cyrillic Extended-B letters seen in web pages while looking + for Glagolitic text. + + * FreeMono.sfd, FreeMonoOblique.sfd: + + Added a few old Cyrillic characters. + + * FreeSerif.sfd: + + Several corrections and tweeks to Glagolitic. + Still missing six slots from Unicode, but don't see them in the TeX + fonts. + On the other hand, several on-line Glagolitic pages (bibles etc) don't + seem to use these. Maybe it's OK as-is. + +2008-11-03 Stevan_White + * FreeSerif.sfd: + + Added lowercase range to Glagolitic, as a facile scaling of the + uppercase. + + Added letter to Glagolitic, scaled range. + +2008-11-02 Stevan_White + * FreeSerif.sfd: + + Replaced fraktur bold from Mathematical Alphanumeric Symbols with that + from TX Fonts by Young Ryu. + One concern: letter k is damaged (in both medium and bold). I just + hacked something up. + + Added Glagolitic "round type" font (Croation capitols only) from the + collection of Croatian fonts for LaTeX by Darko Zubrinić + ftp://ftp.dante.de/tex-archive/languages/croatian/ + http://www.tug.org/TUGboat/Articles/tb17-1/tb50zubr.pdf + + Several letters are missing besides the small letters. + + * FreeSerifBoldItalic.sfd: + + A couple of Thai references got obliqued twice. + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + By popular demand, removed 'ears' from Greek Upsilon and Psi. + Copied resulting glyphs to Serif Mathematical Alphanumeric Symbols. + + * FreeSerif.sfd: + + Some pointwise cleanup of main Tamil range + + Tried some things with lookups. Didn't make much headway. + +2008-11-01 Stevan_White + * FreeMono.sfd: + + somehow made a letter with wrong width + + * FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Added similar lookups and ligatures to Thai ranges. + + * FreeSerif.sfd: + + Lookups now work no worse than those for other Thai fonts, at least + in Pango. Still perplexed by behaviour of "Required" lookups. + + For Thai, made ligatures and lookups for yoying and thothan combined + with a lower vowel. These work well. + Attempted looksups for saraaa with ru and lu, and for saraam. + Not working. + + Cleaned up a few of the Bengali ligatures + + * FreeSerifBold.sfd: + + Tweek Thai + +2008-10-31 Stevan_White + * FreeSerif.sfd: + + Fixed ligatures and mark positioning for Hanunóo. + Problem with ligatures: Gnome pango doesn't do 'rlig', only 'liga' + + * FreeSerifItalic.sfd: + + Changed lookup table scripts for Devanagari and Bengali. + Find Problems -> ATT found several problems showing lookups acting on + glyphs that weren't listed in the script ranges, including dev2, bng2 + (why not deva and beng, I don't know). + + danda and doubledanda of Devanagari I understand are to be shared among + Indic scripts. So included bng2 and dev2 in the 'aalt' table for those. + + The 'init' and 'half' tables for Bengali made active for bng2. + + The 'locl' table for Bengali didn't do anything I could see: It mapped + the Devanagari danda to itself, and the doubledanda to itself. Deleted. + + Cleaned up some kern tables. + adjustments of under 5 EM are invisible. Some others I just didn't like. + Some were putting a letter beneath another, with is wrong. + + * FreeSerifBoldItalic.sfd: + + Added Thai + + * FreeSerifBold.sfd, FreeSerifItalic.sfd: + + Changes to mark positioning lookups, esp. in Italic. + Widened numerals in Bold + +2008-10-27 Stevan_White + * FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Tweeks regarding Armenian and lookups + + * FreeSansBold.sfd: + + Added Armenian ligatures FB13-FB17 with lookups + Also made a historical ligature ('hlig') table for u+0587. + + Toward bug #15183: missing characters from Armenian range + https://savannah.gnu.org/bugs/index.php?15183 + + * FreeSansOblique.sfd: + + Added Armenian ligatures, lookups. Cleaned up contours. + + * FreeSans.sfd: + + Added 5 Armenian ligatures to U+FB13 – FB17, and made corresponding + 'liga' lookup. Found there one ligature u+0587 that according to + http://en.wikipedia.org/wiki/Armenian_alphabet + + "in new orthography the և character is not a typographical ligature anymore, and must never be treated as such. It is a distinct letter and has its place in the new alphabetic sequence." + So moved this out of the 'liga' lookup and into a new 'hlig' lookup. + +2008-10-26 Stevan_White + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifItalic.sfd: + + Lots of improvements to Thai. + Completely revised letter spacing in Italic, and fiddled with combining + marks in all. + Still aren't working quite right, especially in Italic. + Still need to work over digits (in Bold they aren't even bold yet) + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifItalic.sfd: + + Bold Thai : added (painstakingly) constructed glyphs, lookups + roman Thai: tweeks + Italic Thai: tweeks (Note this still has multiple problems) + +2008-10-25 Stevan_White + * FreeSerif.sfd: + + WAZU says + http://www.wazu.jp/gallery/Fonts_Hanunoo.html + + MPH 2B Damase doesn't support the consonant-vowel ligatures necessary + to render Buhid writing. + + OK, so I made 'mark' lookups for combining marks and a bunch of + ligatures in an 'rlig' lookup. The latter still not working: + don't know why. + + Made page to match the example of the combining forms at + http://www.omniglot.com/writing/hanunoo.htm + +2008-10-24 Stevan_White + * FreeSerif.sfd: + + Removed some marks from Mathematical Alphanumeric Symbols + + * FreeSerif.sfd: + + Tweeked combining marks for Vietnamese. Made to satisfy + WAZU JAPAN Comprehensive Unicode Test Page for Vietnamese + http://www.wazu.jp/gallery/Test_Vietnamese.html + Could still use some tweeking... + + * FreeSerif.sfd: + + Added marks for composition of Vietnamese + + * FreeMono.sfd, FreeSerif.sfd: + + Put "below" combining mark on lots of vowels and derivatives, + for Vietnamese. + Named a bunch of composit Latin, expecting to make substitutions. + +2008-10-23 Stevan_White + * FreeSerif.sfd: + + Thai spacing alterations based on advice of a native speaker. + +2008-10-22 Stevan_White + * FreeSerif.sfd: + + re-named Thai lookups according to order + +2008-10-21 Stevan_White + * FreeSans.sfd: + + Cleanup of glyphs in Gujarati, Devanagari. + + Note: Serious problem with Sans GPOS abvm in Devanagari + "'abvm' Above Base Mark in Devanagari subtable" "gujr-0" + But all the characters that list gujr-0 are in Gujarati. + Not sure how this got broken or how to fix it. + + * FreeSerif.sfd: + + Fiddled with Thai mark positioning: passes my tests now OK. + Made a few more references in Math Symbols; more regularization of + stroke. + + * FreeSerif.sfd: + + Added mark class for Vietnamese "horn" + Several references made in General Punctuation, Arrows + + * FreeMono.sfd: + + added some Combining Diacritical Marks + +2008-10-20 Stevan_White + * FreeSerif.sfd: + + Made some references from serifed Latin capitals to Greek counterparts. + + * FreeSerif.sfd: + + Made a few repeated glyphs into references in Musical Symbols + + * tools/ranges.py, tools/validate.py: + + tweeked some ranges, format of output + +2008-10-19 Stevan_White + * FreeSerif.sfd: + + Moved several glypns from Mathematical Alphanumeric Symbols to + Letterlike Symbols. + Couple tweeks in Mathematical Symbols. + + * FreeMono.sfd, FreeSerif.sfd: + + Fiddling with Mathematical Symbols. + In Serif, trying to make stroke width more consistent. + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd: + + Added some Greek symbols in Mono and Sans to make a little more regular + and correspond better with TeX. + Tweek of serif. + + * FreeSansBold.sfd: + + a few more improvements. + + One problem with the Mathematical Alphanumeric area is, one must + remember to change it any time another face is altered... + + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSerifBold.sfd: + + Several improvements and additions to Sans faces (mostly in Greek) from + experience of pasting into FreeSerif Mathematical Alphanumeric Symbols. + + * FreeSerif.sfd: + + Replaced most of Mathematical Alphanumeric Symbols + roman italic bold (latin and greek) + gothic italic bold (latin and greek) + typewriter + and numerals + with glyphs from FreeFont. These were scaled to uniform height. + + Remains: Blackboard Bold, Fraktur, Calligraphic, Script + + * FreeSerif.sfd: + + Tidied lookup table names for Malayalam + + * FreeSerif.sfd: + + Applied Malayalam patch from Hiran Venugopalan + + * FreeMono.sfd: + + Added/corrected many Mathematical Symbols + + * FreeSansOblique.sfd: + + more IPA + +2008-10-18 Stevan_White + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Made lots more IPA and Phonetic Extensions + Note: fontforge is reporting an error in a few glyphs made by scaling + another, that the glyphs are drawn in the wrong direction--only in + TrueType though. Suspect a FontForge bug. + + Added several Combining Diacritical Marks + +2008-10-17 Stevan_White + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Made several Spacing Modifier Letters, Combining Diacritical Marks, + and IPA and Phonetic Extensions + +2008-10-16 Stevan_White + * tools/ranges.py: + + un-grayed totals rows + + Fiddled Cyrillic + made output prettier + + * FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Added some Superscripts and Subscripts + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + Finished off Superscripts and subscripts + + Completed General Punctuation for Mono faces + + Added some General Punctuation + +2008-10-15 Stevan_White + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + more Letterlike Symbols, Currency Symbols + + * FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Made some Combining Diacritical Marks for Symbols, Letterlike Symbols + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + Added some General Punctuation + +2008-10-14 Stevan_White + * FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Added double slanted hyphen, made General Punctuaton Supplement like + Serif's + + * FreeSansBoldOblique.sfd: + + Filled out Greek Extended + + * FreeMono.sfd, FreeSerifItalic.sfd: + + fixes to last 2 commits + + * FreeSerifItalic.sfd: + + Last character to General Punctuation + + * FreeMono.sfd: + + Built some Enclosed Alphanumerics (1-10) + + * FreeSerif.sfd: + + Copied in Daniel Johnson's changes to Cherokee. + +2008-10-12 Stevan_White + * FreeSerif.sfd: + + Included Daniel Johnson's Cherokee glyphs. + +2008-10-05 Stevan_White + * FreeMono.sfd: + + Further corrections to diaresis in Cyrillic -- legibility in small sizes + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoOblique.sfd, FreeSerif.sfd: + + Regularized placement of diaresis in Cyrillic + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Added same set of glyphs to Cyrillic Supplement + + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Added some of the easier letters from Cyrillic Supplement + +2008-10-04 Stevan_White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeSerifItalic.sfd: + + Finished high Cyrillic range for MonoBold and MonoBoldOblique. + (Remaining: historic ranges, Cyrillic extensions) + Tweeked others. + + * FreeMonoBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Serif*Italic: Added last Abkhazian letters to Cyrillic + MonoBold: tweek + +2008-10-03 Stevan_White + * FreeMono.sfd, FreeMonoOblique.sfd, FreeSerif.sfd, FreeSerifBoldItalic.sfd: + + Mono: Some additions to historic letters + + * FreeSerif.sfd: + + Added some punctuation and combining numeric marks from + Cyrillic Extended B + + * FreeMono.sfd, FreeMonoBold.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Various technical tweeks, mostly concerning recent additions. + Also did a bit more "Points too close" and "irrelevant control points". + Cyrillic millions redesign meant could not maintain use of refrences + for it. + + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + More high Cyrillic + Included old Cyrillic millions combining mark in Sans, changed design + in Serif + +2008-10-02 Stevan_White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + More high Cyrillic + + * FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerifBoldItalic.sfd: + + More high Cyrillic glyphs + + * FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + More glyphs in high Cyrillic. Remains only some whose form I'm unsure + of in italic. + + * FreeSerifBoldItalic.sfd: + + More glyphs in higher Cyrillic range + + * FreeSerifItalic.sfd: + + Same process of tightening el, em, ge (but a P.S. to previous commit: + also did ya, ze for SerifBold.) + + * FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + BoldItalic: Tightened up spacing on left of el, em, ge (could go + farther, but it is partly a problem with glyph design... + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + More additions to Cyrillic. Finished SerifBold except for Nivkh + additions. + Used references on number combining forms. + +2008-09-30 Stevan_White + * FreeSerif.sfd: + + Added four (obsolete) Chuvash letters to Cyrillic Supplement + - completing it. + +2008-09-29 Stevan_White + * FreeSerif.sfd: + + Greek adjustments + Adjusted spacing of kappa slightly + Got rid of ears on Psi, following similar request for Upsilon. + +2008-09-28 Stevan_White + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: + + Adding and fiddling with Spacing Modifiers and Combining Diacriticals + + * FreeSans.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Revisions of several Combining Diacritical marks + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + A few Combining Diacriticals and Spacing Modifiers + + MonoBoldOblique: Primarily filling out Spacing Modifier Letters + others: little fixes found along the way + +2008-09-27 Stevan_White + * FreeSerif.sfd: + + Replaced Malayalam range with that from Rachana_04 found on + Swathanthra Malayalam Computing project page + http://savannah.nongnu.org/projects/smc/ + Besides scaling and converting to cubic, performed much clean-up of + glyphs, added an r2 character, and re-named a bunch of characters. + +2008-09-23 Stevan_White + * tools/ranges.py: + + Corrections and additions to several ranges, + put extra row in table with character totals + +2008-09-22 Stevan_White + * FreeSerif.sfd: + + Filled in as much of Phonetic Extensions as I could without artistic + abilities. + Note 1D48-9 are not references due to apparent FontForge bug, that says + scaled references go in wrong direction. + + * FreeSerif.sfd: + + Cleaup of some Bengali glyphs. + Note many of the ligatures remain very very messy. + + * Makefile: + + added more validations + made to work with GenerateOpenType + + * FreeSerif.sfd: + + Built two more easy Phonetic Extensions + + * FreeSerif.sfd: + + Built some Phonetic Extensions letters, those with middle tilde + + * tools/GenerateOpenType: + + Replaced bash version with Python + +2008-09-21 Stevan_White + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Added lots of Spacing Modifier Letters and Combining Diacritical Marks. + + * FreeMono.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSerif.sfd: + + Wrote script to check if glyph encodings were in stated ranges, fixed + most discrepancies. + + There were a bunch of incompletely deleted characters in several faces. + + Sans: found several other problems in the process + # Tamil + Four slots labelled 0BDA-D have glyphs, not in Unicode. also 0BE1 + I think they are misplaced; added 0010 to each of them + + # Devanagari + Slot labelled U+093B is not in Unicode--can't find glyph: deleted + likewise 094F (may have been meant to be 0954) + 0955, 0973-0976 + + 0954 should be a combining mark, but it appears on the wrong side of 0. + 0971 was just wrong--made into simple dot. + 0972 is also wrong--made my own Candra A. + + # Gujarati + Slots labelled 0AE4-5 are not in Unicode; seem not to belong at all. + Deleted. 2800 is a dup of 2790. Deleted + + Serif: phillipine_double u1736 was misplaced + + A bunch of the Math Alphanumeric symbols are empty in the standard, + because they're represented elsewhere. These should be deleted + First need to make style consistent with existing symbols. + + * FreeSerif.sfd: + + Applied patch from Daniel J + Remedies bug + FreeSerif: Missing glyphs with palatal hook + https://savannah.gnu.org/bugs/index.php?24298 + Adding several letters to Phoenetic Extensions range U+1D80-BF + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + Made four characters U+200C-F to be zero-width + Remedy to bug #23593: Mono 0-width chars: zero-width or space? + https://savannah.gnu.org/bugs/index.php?23593 + + * FreeSerif.sfd: + + Made Mahjong tiles to take up less space using references + Cleaned up several validation problems + +2008-09-20 Stevan_White + * tools/checkGlyphNumbers.py: + + included other Private Use Ranges + +2008-09-19 Stevan_White + * FreeSerif.sfd: + + Added several Hebrew Alphabetic Presentation Forms (some easy ones), to + make its coverage the same as Serif Bold. + + * FreeSerifBold.sfd: + + Re-encoded. + Deleted several glyphs in Hebrew Alphabetic Presentation Forms that + didn't correspond valid Unicode + + * FreeMonoBold.sfd, FreeSans.sfd, FreeSerifItalic.sfd: + + Ran script to find mis-numbered glyphs. Several were simply typos, + some offset by one. + + * FreeSansOblique.sfd: + + Numerous cases of glyphs in Private Use area incorrectly assigned + Unicode numbers and names. Gave all -1 for Unicode and named like + "slot.XXXX". + + * FreeSerif.sfd: + + Adapted Mahjong Tiles from George Douros' Unicode Symbols font. + + * FreeSerif.sfd: + + Added Domino Tiles. Domino outline is copied from George Douros' + Unicode Symbols, but the rest I preferred to do with references. + +2008-09-19 Stevan_White + * tools/ranges.py: + + corrected and simplified calculation of whether OS/2 bit is set. + Now works mostly perfectly, except for some high Unicode ranges... + + * tools/GenerateOpenType: + + Made to output old-style kerning tables for Windows + (FontForge complains though) + + * tools/GenerateTrueType: + + Made to hint before instructing: FontForge bases TT instructions on hints + although hints are not put into TrueType fonts. + + * tools/hex_range.py: + + cosmetic tweek + + * tools/isMonoMono.py: + + re-worked to take a list of files as input + + * tools/ranges.py: + + re-structured code and corrected a few ranges + +2008-09-18 Stevan_White + * FreeSerif.sfd: + + Adapted Mathematical Alphanumeric Symbols from George Douros' Unicode + Symbols font. + + * FreeMonoBoldOblique.sfd: + + This one got away from me--I don't know what I did. + Looks like some small contour edits. + + * FreeSansBoldOblique.sfd: + + Fixed one mis-numberd character in Latin Extended-B + + * FreeSerifBold.sfd, FreeSerifItalic.sfd: + + Fixed several mis-numbered characters. + + * FreeSansBold.sfd: + + SansBold: one Georgian letter with no name, one Zapf Dingbat was + unnumbered + ATT test shows a bunch of problems with Gurmukhi and 'blwf' table + indeed shows those letters at 0x10000+ + Sans names them like uni0A30_uni0A4D.blwf: they are in range + ECC6 to ED06 + + I meant to move this range into Private Use in last release, and + missed it. So now it is moved, into same range as Sans. + + Both Sans and SansBold in nukt table for Gurmukhi have duplicate + entries for uni0A15 uni0A3C. Deleted dups. + + * FreeMonoOblique.sfd: + + fixed a number of Unassigned Code Points in Greek Extended + + * FreeSansOblique.sfd: + + mis-numbered Combining Diacritics + + * FreeSansOblique.sfd: + + Several chars in Latin Extended hadn't been named. + One spurious letter in Letterlike Symbols + +2008-09-16 Stevan_White + * FreeMono.sfd, FreeSans.sfd, FreeSerif.sfd: + + Lots of additions: unless otherwise noted, they are from George Duros' + fonts Analecta, Music, and Unicode (haven't got final confirmation of + the eligibility of these glyphs, so this is just for testing.) + + Added some combining marks, fiddled a bit. In both Serif & Mono, tried + to get a key symbol characters to fit inside the key combining mark + + Serif + Got rid of ears on Upsilon + Added: + # Gothic + # Western & Byzantine Musical Symbols + + # Misc Symbols, Misc Technical Symbols (drew many myself) + # Supplemental Symbols and Arrows + + Mono + Added: + # lotsa Misc Technical Symbols + # OCR Symbols + # drew many Supplemental Symbols and Arrows, Misc Technical + + Sans + Added # Phoenecian + Made a few Letterlike Symbols; Made Re and Im to be sans-serif. + +2008-09-11 Stevan_White + * FreeSerif.sfd: + + Removed pointless entries from Latin kern table + + Tidied points in Sinhala + +2008-09-07 Stevan_White + * FreeSerif.sfd: + + Tidied up Tamil ligatures EEA8-EEAB to fix TT build warning + "MonotonicFindAlong: Never found our spline." + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeSans.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, Makefile: + + + Added APL characters to FreeMono (why?...) + + Fixed several last-minute problems, including + + Serif: Tweeked GPOS mark table for Cyrillic + Sans: Added a GPOS table for Cyrillic (but several diacritics missing) + + Serif, Mono: tweeked some bugs in extensible brackets & integrals + + Serif: Vietnamese o circumflex: accent was a bit high. fixed. + + MonoBoldOblique OTF build + uni213b intersects self + + Generation of TT fonts complains about several things to stderr, + including: + + SerifBold: "There exists a 'fpgm' code that seems incompatible with FontForge's. Instructions generated will be of lower quality. If legacy hinting is to be scrapped, it is suggested to clear the `fpgm` and repeat autoinstructing. It will be then possible to append user's code to FontForge's 'fpgm', but due to possible future updates, it is extremely advised to use high numbers for user's functions." + Probably has been there since I first copied the TT instructions in. + Just repeated the copying process carefully, and the warning went away. + + Serif: "FindMatchingHVEdge fell into an impossible position" + fixed a bunch of point too close + + REMAINING PROBLEM in Serif TT build + "MonotonicFindAlong: Never found our spline." + fixed several bad TT matrices-- there are several more + fixed many "control points too close" no luck + +2008-09-03 Stevan_White + * FreeSans.sfd, FreeSansOblique.sfd: + + Added/corrected some Misc. Symbols by copying from Serif. + Note this is only a stopgap solution. Want real sans-serif symbols. + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Added minimal Miscellaneous Symbols: card suites and some musical notes. + Note not happy with shapes...some I just drew. Sans isn't really sans. + + Fixed one APL symbol in Mono so it verified in OTF version + +2008-08-31 Stevan_White + * FreeMono.sfd: + + Built set of APL symbols. + +2008-08-30 Stevan_White + * FreeSans.sfd: + + Un-linked references in uni02B2 and uni02B5, because when validating the + TrueType version, FontForge gave an error "is drawn in wrong direction". + I suspect a bug in FontForge. Other similar glyphs make no errors. + + Fixed missing extrema in TrueType. + These were the last cases being reported by validate in all the faces. + + * FreeSerifItalic.sfd: + + fixed last missing extrema in TrueType + + * Makefile: + + restructured validation to look in a directory + + * FreeSans.sfd, FreeSansOblique.sfd, FreeSerif.sfd: + + Fixed missing extrema in TrueType versions + + * isMonoMono.py, validate.py: + + restructured validation to look in a directory + +2008-08-15 Stevan_White + * FreeSans.sfd: + + Same problem with uni0A83 as with bn_llikaar. Just made zero-width. + +2008-08-14 Stevan_White + * FreeSans.sfd, FreeSansOblique.sfd: + + Glyph bn_llikaar, U+09E3 BENGALI VOWEL SIGN VOCALIC LL, + has right bound positioned far into the negative. Causes a warning in + FontForge when opening OTF version. + Comparing with other fonts supporting Bengali, found no others that + do this. + Serif makes glyph width 0 (which sounds right according to Unicode) + and puts glyph wholly to left of 0. But, I haven't found this letter + in text anywhere. I wonder if it is really used in writing. + + * FreeSans.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifItalic.sfd: + + Further TrueType validation fixes. + Sans still has two glyps in wrong direction. + + * FreeSans.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Fixed more TrueType problems...all missing extrema in TTF validation + +2008-08-13 Stevan_White + * FreeSans.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + fixed all the TrueType validation problems of type "intersects itself" + and all but two of the "wrong directions", as well as a lot of + "missing extrema". But there remain hundreds of missing extrema in the + TrueType version. + Also, bn_llikaar in Sans and Oblique still has a problem in OTF version. + + * FreeMono.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd: + + Made .ttf files to validate. Other faces have many more problems still. + +2008-08-12 Stevan_White + * FreeMonoOblique.sfd, FreeSerif.sfd, FreeSerifItalic.sfd: + + Continuing to make OTF versions validate. + + * FreeMonoOblique.sfd: + lots of missing points at extrema + * FreeSerif.sfd: + 12 wrong directions, 1 missing extrema + * FreeSerifItalic.sfd: + many missing points at extrema, 1 self-intersecting + + What was wrong: in several oblique cases, an already-italic glyph was + made more italic, thereby fouling up extrema (although why it passed + validation in the SFD I don't know). Some glyphs were + overly-complicated with many near points. Cleaned up, rounded to int. + + Remaining problem: OTF FreeSansOblique FreeSans. one Bengali glyph in + each whose advance width and htmx don't match. + + Moral of story: validate the OTF and TTF versions too before a release. + + * FreeSansOblique.sfd: + + Reverse a mistake from last commit: somehow this file was converted to + quadratic, or something. + + * tools/GenerateTrueType: + + For TrueType, one puts in Instructions, not Hints. + This vastly improves look of TrueType fonts in Windows. + +2008-08-11 Stevan_White + * FreeMonoBoldOblique.sfd, FreeSans.sfd, FreeSansOblique.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: + + Found that SFD files that validated produced OpenType files that don't. + These represent the easy fixes. Some were result of conversion to + quadratic; some shouldn't have validated in the SFD... + + * MonoBoldOblique: uni0250 missing pts at extrema [reference glyph rotated...] + * Sans: uni0AC4 wrong direction [simplified, rounded to int] + * SansOblique: uni01EA wrong direction [rounded to int] + * SerifBold: uni023f wrong direction [round to int] + * SerifBoldItalic: uni0245 missing pts at extrema [ungrouped ref, added extrema] + +2008-08-06 Stevan_White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoOblique.sfd: + + Re-set font metrics, which were somehow making uneven vertical spacing. + +2008-06-22 Steve White + * FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: + + Made to validate + + * ranges.py: + + Brought more into line with OpenType + Added some ranges + Fixed bug with ranges outside of font + + * CREDITS: + + 3 new ranges + + * FreeSerif.sfd, FreeSerifItalic.sfd: + + Cyrillic: tweeked accents for consistency, and for readability in small + sizes. + + * FreeSerif.sfd: + + Thanna range: tweeking + + Thaana range: Scaled up by about 15%, raised by 100EM, tightened + some of the diacritics to get inside 900 to -300 EM limits. + + * FreeSans.sfd: + + Added Old Persian and Ugaritic from MPH2BDamase font. + +2008-06-21 Steve White + * FreeSerif.sfd: + + Added Tai Le range adapted from MPH2BDamase font. + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: + + Added some ancient Greek numerals from Tempora to high Unicode area, + (partly just to show it can now be done.) + + * FreeSerifItalic.sfd: + + Couple of tweeks putting glyphs above -300EM. + + * FreeSerif.sfd, FreeSerifItalic.sfd: + + Surgery to Thai letter 'tho than', u+0e10, to push it above -300 EM. + This makes Thai range completely between 900 and -300 EM. + + * FreeSans.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifItalic.sfd: + + Many auxilary characters (esp. for Malayalam, Bengla, and Tamil) + representing ligatures and alternative forms without their own Unicode, + were moved from + ranges above 0xFFFF (which ought to have been slots for other defined + Unicode ranges) into the Private Use area. + + In Serif, I segregated the scripts, in Sans it was hard to see where one + began and another ended, so I moved them en masse. + + Note several problems with wrongly-named characters: + I already re-named glyph570 and glyph582. + But there are others with names starting with A... + + * FreeSansBold.sfd, FreeSansOblique.sfd: + + Fixed (I hope the last) problem with scripts in lookups + Find Problems -> ATT (all selected) finds multiple issues, + + * FreeSansBold.sfd: + In addition to script 'guru', added 'gur2' to the scripts for these + lookups + 'nukt' Nukta forms in Gurmukhi + 'blwf' Below Base Forms in Gurmukhi + 'pstf' Post Base Forms in Gurmukhi + 'blws' Below Base Substitutions in Gurmukhi + 'abvs' Above Base Substitutions in Gurmukhi + 'psts' Post Base Substitutions in Gurmukhi + + * FreeSansOblique.sfd: + In addition to script 'beng', added 'bng2' to the scripts for the lookup + 'half' Half Forms in Bengali + + Moreover, the lookup + 'aalt' Access All Alternates in Latin + contains only Bengali letters. + Re-named as Bengali, made to work on beng, bng2 scripts + +2008-06-20 Steve White + * FreeSerif.sfd: + + Scaled Sinhala range. + Remedies bug #23656: Sinhala letters over-sized + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Mostly messing with Greek Extended accents again. + re-positioned ypogegrammani on advice of Alexey Kryukov + Put prosgegrammani beneath main letters in Mono, to make narrower glyphs + Implemented more distinction between tonos and acute. + +2008-06-19 Steve White + * FreeMonoBoldOblique.sfd: + + Completed fit of Mono to 800 to -200 EM. + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoOblique.sfd: + + Set Metrics to recommended values + + * FreeMonoOblique.sfd: + + Now Mono Oblique, as well as roman and Bold, are within 800 to -200 EM. + Just BoldOblique to go. + + * FreeMono.sfd, FreeMonoBold.sfd: + + More toward fitting to 800 to -200 EM. + Basically, reduced Georgian by 92%. + Also made an over-all offset, so Georgian is somehow centered (Bold...I + guess I already did this in roman). + Want to also do an emboldening to make stroke like rest of font, but + current FontForge has a nasty crash that loses data on this function. + + * FreeMono.sfd: + + In effort to make fit in 800 to -200 EM, + Scaled Georgian by 92%, centered on 600 wide box. + Next: Embolden a bit. + +2008-06-18 Steve White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + Toward making all glyphs lie between -200 and 800 EM. + Numerous small changes, especially raising descenders of some Hebrew + letters. + Georgian remains a problem + +2008-06-13 Steve White + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Moved prosgegrammeni up to baseline, + (and then moved all references down to baseline) + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Added Control Picture "blank" to all faces. + Switched U+0222-3 from TemporaLGCUni + +2008-06-11 Steve White + * FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + More fiddling with Greek Extended accents + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Tweeks to accents etc in Greek Extended and Cyrillic + +2008-06-10 Steve White + * FreeSerifBold.sfd, FreeSerifItalic.sfd: + + Fixed a few big horizontal spacing problems + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Implemented TemporaLCGUni glyphs in Cyrillic ranges. + Added a breve_cyrillic for the moustache breve mark. + +2008-06-08 Steve White + * FreeSerif.sfd: + + Replaced most of Cyrillic range with TemporaLGCUni. + Remodelled many of the derived Cyrillic characters after these. + Fiddled globally with spacing of small letters. + Unclear on diacritics 485-6, unhappy with breve. + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Started implementing TemporaLCGUni in Greek ranges. + + Replaced 3DC-3E1 from Tempora, because I thought they looked nicer and + more like the other existing FreeFont glyphs. + Replaced 3DA-B from Tempora, because they look more like Unicode + samples, and nicer. + Added 03f3-4, 03F7-F. + Prefer my own lunate epsilon. + Replaced Phi and Omega from Tempora. + These plainly fit the other FreeFont glyphs better than the origninals. + (How did this happen?) + + In bold, replaced U+03D7 + + Copied lbbar u+2114 + + Small italic greek--replaced most except phi, psi, omega + + Based on new information, broke the identification of oxia with Latin + acute. + +2008-06-07 Steve White + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Efforts to control heights of characters + +2008-06-06 Steve White + * FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + Made to validate + +2008-06-05 Steve White + * FreeSans.sfd: + + Fixed undefined character in kerning classes + +2008-06-04 Steve White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + tweeks and additions to General Punctuation + +2008-06-03 Steve White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSansOblique.sfd: + + Completed/tweeked Number Forms + + * FreeMono.sfd, FreeSerif.sfd: + + Added some Miscellaneous Technical symbols + +2008-06-02 Steve White + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: + + Tweeks...mostly Letterlike + +2008-06-01 Steve White + * FreeMono.sfd, FreeSerif.sfd: + + Added Box Drawing characters to Serif. + Tweeked a glyph in Mono + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Added several glyphs to Letterlike Characters + +2008-05-31 Steve White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Validation pass + + SansOblique and SansBoldOblique had validation problem with BlueValues + Private Dictionary + Elements in BlueValues/OtherBlues array are disordered + Elements in BlueValues/OtherBlues array are too close + (Change BlueFuzz) + StemSnapV does not contain StdVW value. + So I ordered the array, and based on other slanted fonts, + removed StemSnapV. + + Note however, I still think the two top Blues lines are too close + But I don't even know what the second-to-top line is meant to do. + + * FreeSerif.sfd: + + Added to Block Elements, Geometric Shapes + Made to validate + +2008-05-29 Steve White + * FreeMono.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Looking at special symbols. + Drew several Miscellaneous Symbols in Mono and Serif + > Completed/corrected planetary symbols, added Dice, + some other easy ones + > Completed Dingbats in Serif (using URW Dingbats) + Added some Block Elements to Serif + +2008-05-26 Steve White + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + More changes stemming from J. Poon's report. + +2008-05-25 Steve White + * FreeSerif.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Height surgery on SerifBoldItalic. + More fiddling with accents in others. + + * FreeSerifItalic.sfd: + + More height surgery. Only a few left in Benglai and Thai + + * FreeSerifBold.sfd: + + Re-applied surgery to make glyphs between 900 and -300EM + + *** Regression + Inadvertently un-linked all references in SerifBold in r1.83. + This reverses that error (but also un-does the surgery mentioned there) + + * FreeSerifBold.sfd, FreeSerifItalic.sfd: + + Applied surgery to make Latin letters go under 900EM. + One exception yet... + +2008-05-24 Steve White + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Serif: much fiddling with accents in Latin ranges. + Re-thought some glyphs (there are still a few messy ones, especially + in bold) + Checked horizontal spacing...fixed a number of problems. + +2008-05-23 Steve White + * FreeSansBold.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: + + Made Latin Extended-B coverage consistent across Serif; cleaned up some + glyphs + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: + + Filled more of General Punctuation in Sans and Serif + Made all agree on coverage of Latin Extended Additional + +2008-05-22 Steve White + * FreeSans.sfd, FreeSansBold.sfd, FreeSansOblique.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: + + Added Latin Extended Additional to SansOblique. + Made Latin Extended Additional coverage consistent across Sans, B, I + Made Latin Extended-B coverage same in SerifBold. + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeSansBold.sfd: + + Mono* made Latin-B coverage consistent across faces + + * FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Made set of Latin Extended-B consistent across Sans faces + + * FreeSans.sfd, FreeSansBold.sfd: + + More filling in General Punctuation + + * FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Another bunch of J. Poon's reports + also, filling in some Combining Diacriticals, Spacing Modifiers, and + General Punctuation in bold faces + +2008-05-21 Steve White + * FreeMono.sfd, FreeMonoBold.sfd, FreeSans.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Mucking about with mark tables in Thai (Serif) + Other faces: Making changes from J. Poon's report + +2008-05-20 Steve White + * CREDITS: + + Mark Williamson + Jacob Poon + + * Makefile: + + added tests target + +2008-05-18 Steve White + * ranges.py: + + Put table explanation back in + + Improved behaviour for high Unicode + + * FreeSans.sfd: + + Revision of kerning + + * FreeSerif.sfd: + + Made Latin kerning a little more reasonable: + reduced many excessive kerns (some had letters apparently + overlapping, which shouldn't happen) + made kerns increment by 5EM for ease of reading + got rid of kerns too small to be seen + + * FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSerifBold.sfd: + + Made to verify + +2008-05-13 Steve White + * FreeSerif.sfd: + + Made to validate + + * FreeSerif.sfd: + + Gurmukhi: filled range in Serif, taking glyphs from the original + Punjabi font by Hardip Singh Pannu + http://members.aol.com/hspannu/punjabi.html (file pb_win95.exe) + +2008-05-12 Steve White + * FreeSans.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: + + Hebrew, basic. Some faces missing punctuation marks, added. + + * FreeMono.sfd, FreeSans.sfd: + + Armenian: Sans tried to make verticals and horizontals of more uniform + width both, finddled with punctuation + + * FreeMonoOblique.sfd: + + made to validate + + * FreeMonoBold.sfd: + + made to validate + + * FreeSans.sfd, FreeSansBold.sfd: + + Armenian in Sans: regularized letter spacing + + * FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd: + + Armenian: fill out ranges and clean up + SansBold especially had a lot of incorrect references. + Now all the ranges with Armenian at least share the same set of + characters. + + * FreeMono.sfd: + + Fixed glyph with wrong width. + +2008-05-11 Steve White + * FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerifItalic.sfd: + + 1) made to validate + 2) Mono: copied in Spacing Modifier Letters (glyphs not yet named) + 3) SerifItalic: Filled in General Punctuation + + * FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + Made to validate, and pass all other FontForge tests. + Expedient: rounded everything to int + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Made to have the same Greek Symbols, + Made to validate + + * FreeSans.sfd, FreeSansBold.sfd: + + Made Greek Symbols as full as rest of Sans. Changed a name in Sans. + + * FreeMonoOblique.sfd: + + Made Greek as full as other faces + Made to validate + + * FreeSansBold.sfd: + + Deleted seven orphaned Arabic characters; looks like somebody started, + didn't get very far, putting Arabic in bold. + + Deleted orphaned Arabic glyph from Arabic Presentation forms-B + + * FreeSerifBold.sfd: + + Deleted the single Arabic character: it was clearly there by mistake. + + * FreeSansOblique.sfd: + + Made Greek Symbols as full as rest of Sans + + Tweeks to Armenian + + Comment from previous commit of FreeSans was meant for FreeSansOblique. + In FreeSans, only tweeked a few letters during putting more characters + in this face. + + Filled in Spacing Modifier Letters, increased General Punctuation. + + * FreeSans.sfd: + + Filled in Spacing Modifier Letters, increased General Punctuation + + * FreeMono.sfd: + + Made Armenian as full as other roman faces. + + Completed Spacing Modifier Letters + Added a couple of Greek Punctuation + + added more Spacing Modifier Letters + +2008-05-10 Steve White + * FreeSerif.sfd, FreeSerifItalic.sfd: + + Did same process of scaling and sizing for Thai in Sans as in Serif. + Added mark tables to Sans. Improvement, but there are questions... + + * FreeSans.sfd: + + Tidied some Gurmukhi glyphs, validated. + + Deleted ranges for Oriya, Kannada, on account of + 1) they only contained a subset of the consonant glyphs of the scripts, + few if any vowels, and had no ligature lookups as required + 2) Kannada was based on the Akurti fonts, which have copyright issues. + + See + bug #23225: Oriya range only partial + bug #23224: Kannada range only partial + + * FreeMonoBoldOblique.sfd: + + Made metrics like rest of Mono + +2008-05-09 Steve White + * ranges.py: + + More info on range intervals + + * FreeSerif.sfd: + + Deleted Telugu range. + It didn't represent a complete writing system for the language. + + See notes at https://savannah.gnu.org/bugs/index.php?23202 + Serif: Telugu range missing many characters; many wrong + + Got a copy of the original Tikkana font, + Copied in remaining consonants and vowels that I could find there. + I think one vowel 0C55 is missing according to unicode). + Strangely, the Telugu digits are alo missing. + In Tikkana, the default "checkmark" structural mark is missing from many + consonants, according to Unicode, but is a separate glyph. I put + the checkmark on. + This, and scaled up by 150% and cleaned up intersecting glyphs and + many unnecessary points. + +2008-05-08 Steve White + * FreeSerif.sfd: + + Filled out Telugu consonants. + Vowels still need to be done + +2008-05-07 Steve White + * FreeSerif.sfd: + + Operated on Latin glyphs with stacked accents to make them fit under + 900EM. + Scaled Telugu bu 150%. + +2008-05-06 Steve White + * FreeMono.sfd, FreeMonoBold.sfd, FreeSansBold.sfd, FreeSerif.sfd: + + Corrected further fontforge "find problems" + Added some math characters to FreeSerif + +2008-05-05 Steve White + * FreeSansBold.sfd: + + Made to validate, and fixed bad TT transformations + +2008-05-04 Steve White + * FreeMono.sfd, FreeSerif.sfd: + + Mainly TeX additions trying to satisfy Markus Kuhn's TeX-as-Unicode page + + * FreeMono.sfd: + + Adjusted heights of extensible brackets + + Fixed problems with extensible brackets, thanks to Markus Kuhn's page + http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-demo.txt + + * ranges.py: + + fiddled with ranges, doc + + made some ranges more correct? + + fixed some bugs in ranges + better error reporting + + Got rid of Unicode 1.1 references + + made to use OpenType table + + * FreeMono.sfd, FreeSans.sfd, FreeSerif.sfd: + + made to validate + +2008-05-03 Steve White + * FreeMono.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Removed digits from Private Use Area. + See bug 23050. + + * FreeMono.sfd, FreeSans.sfd: + + Completed General Punctuation + + * FreeSans.sfd: + + Completed IPA Extensions + + * FreeMono.sfd, FreeSans.sfd, FreeSerif.sfd: + + More work on Superscripts and Subscripts, Spacing Modifiers. + Sans is now complete in both. + Added Pfennig to Sans and Mono. + + * ranges.py: + + Restructure text output + Rearrangement and cosmetic ...except I had broken it. now fixed + Seems to be in a useful form at this point. + More docs, date + + * FreeSerif.sfd: + + Added a hand-drawn old German Pfennig to Currency Symbols + + * FreeMono.sfd, FreeSans.sfd, FreeSerif.sfd, FreeSerifItalic.sfd: + + Further additions to General Punctuation, Super and Sub Scripts, + Spacing Modifiers, etc. + +2008-05-02 Steve White + * FreeSans.sfd: + + additions to Spacing Modifiers, IPA + + * FreeSerifItalic.sfd: + + Shortening stacked accents to maintain readability when clipped + +2008-05-01 Steve White + * FreeSans.sfd: + + Additions to Spacing Modifiers and changes to Combining Diacritics + + * FreeSerif.sfd: + + Made sure all the half rings in Combining Diacriticals and Spacing + Modifiers were really half rings (J. Poon had complained about this) + + Filled out General Punctuation + Some work on Spacing Modifiers + + Filled out Mathematical Operators + still needs lots of work + Made to validate + + Filled out Latin Extended B + Added some letters with curls to Latin Extended B + More fiddling with Latin Extended B accents + +2008-04-30 Steve White + * FreeSerif.sfd: + + Added Hanunóo script, with characters based on those in + font MPH2BDamase, on request from the maintainer of that font, + http://packages.debian.org/sid/ttf-mph-2b-damase + + Glyphs are simple vector strokes. Could be a little more uniform. + + Added Buginese script "Lontara", with characters based on those in + font MPH2BDamase, on request from the maintainer of that font, + http://packages.debian.org/sid/ttf-mph-2b-damase + + Note the glyphs are pretty rough, clearly a digitization of handwriting. + I just cleaned them up, and corrected discrepancies with Unicode, + and compared with some pictorial samples of the script I could find. + +2008-04-29 Steve White + * ranges.py: + + Improved look a lot--still unhappy with some ranges + OS/2 seems sometimes bang-on, sometimes unrelated to anything (including + fontforge's OS/2 listing) + + * FreeSerif.sfd: + + Much fiddling with Tamil range. + First scaled to 78% (avoiding the references) + This gets it in the ballpark height-wise. [A bit taller than the Latin + letters, but the stroke is narrower, but then the glyphs are busier.] + Then had to re-align combined references, the trickiest being the + halants. + Checked with other fonts with Tamil text. + +2008-04-28 Steve White + * FreeSans.sfd, FreeSerif.sfd: + + Cleanup of control points in Arabic and Thaana + + * FreeSerif.sfd: + + Cleanup of missing extrema in Arabic and Thaana + + Many changes to Thai, trying to make the script fit between some lines, + so accents won't get clipped, etc. + Also, stroke weight was heavier than that of Latin. + + Scaled whole thing by 93%. + Shrank the tallest letters 0E42-4 to get them under 900EM. + Shaved off top of maiek. + Fiddled with positioning of all accents. + Made positioning tables for accents. + Note: unclear these are working correctly + + Fixed a bug having to do with character replacements for characters + named 'ng' and 'nj'; these names had been taken on by other characters. + + Made to validate + + Unicode positions of two Cyrillic Extended characters were switched. + Fiddled with a couple of Cyrillic combining diacritics + +2008-04-27 Steve White + * FreeSans.sfd: + + bugfix: a left harpoon mysteriously appeared to the left of letter p! + +2008-04-26 Steve White + * FreeMono.sfd: + + Made to validate + + * FreeSans.sfd: + + Made to validate + + Toward J. Poons report + Made 032B more like proper double-arches (and distinct fro 033C seagull) + Made 032b more like a seagull + + * FreeSans.sfd, FreeSansBold.sfd: + + Sans: fiddling with widths and terminators of math symbols, + toward J. Poon's report + R & B: removed u+2741 because it didn't match the Unicode description + + * FreeMono.sfd: + + Extensible parenthesis symbols weight/terminators + Toward bug # 23064: https://savannah.gnu.org/bugs/index.php?23064 + Rounded a bunch of terminators + +2008-04-22 Steve White + * FreeSerif.sfd: + + Small alignment problem in Greek Extended + + One more tweek to spacing in Cyrillic Extended + + Corrected spacing in Cyrillic Supplement + + Added Cyrillic Supplement letters for + Enets, Khanty, Chukchi, Itelmen, Mordvin, Kurdish, Aleut + + Added Cyrillic letters for Nivkh (completing Cyrillic range) + More tightening of accents in Latin Extended. + + * FreeSans.sfd: + + Fiddled with math--consequences of changing the "similar" operator + + More tightening of accents + + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Adjustments to h and k with caron and cedilla in Latin A and B + + * FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd: + + FreeSerifBold: deleted 3 dotted Hebrew letters in Private/Corporate use + (E801-3). They weren't ligatures or in any other lookup, and they + weren't present in FreeSerif. + + * FreeSansBold: + Unlinked and deleted F6C3, which called itself commaaccent. + Made some new spacing and non-spacing accents to make up for it. + + * FreeSansBoldOblique: + Made references of many Latin Extended. + Also corrected several wrong ones. + + * Freeserif: + Re-named commaaccent + +2008-04-21 Steve White + * FreeMono.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSerif.sfd, FreeSerifBold.sfd: + + Deleted Hiragana and Katakana ranges, as discussed on bugs list. + Cleaned up some encoding issues, unnamed glyphs + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Roman: added 'sine' -- not beautiful, but I liked drawing it + All: Made special lookup for Dutch ligatures 'IJ' and 'ij' + + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Roman: ffi etc Latin ligatures from 'liga' to 'dlig' (these weren't + really ligatures anyway, and only looked very bad when used. + Retain for condensed type. + Others: deleted Latin 'liga' table altogether + BoldOblique : added j to ij ligature + + Toward J. Poon's Report: + Except for issues of terminators not always vertical or horizontal, + and a few things that were too hard or I was unsure of. + +2008-04-20 Steve White + * FreeSerif.sfd: + + Futzing with accents in Latin Extended Additional and Latin Extended-B + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + Added primemod character, referenced by Greek number sign + + * FreeMono.sfd, FreeMonoOblique.sfd: + + Following J. Poon's report, disconnected NJ (01CA) + +2008-04-19 Steve White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + First pass throught J. Poon's bug list. + See bug reports for details. + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + Made underscore slanted in Oblique faces, made all to be width of + space character. + Towards J. Poon's report. + Disturbed that xterm and some other apps put small space between + characters when none was called for. + + * FreeMono.sfd, FreeMonoBold.sfd, FreeSans.sfd, FreeSansOblique.sfd: + + Corrections on Currency Symbols + + * FreeMono.sfd, FreeSans.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + More corrections, additions to Currency Symbols + + * FreeSans.sfd, FreeSerif.sfd: + + Filled out and corrected Currency Symbols + +2008-04-18 Steve White + * FreeSans.sfd, FreeSerif.sfd: + + Adjustments to Combining Marks for Symbols + Additions to range in Sans, and re-structured its marks table so that + "middle" can apply to any range + + * FreeSerif.sfd, FreeSerifItalic.sfd: + + Made reference between combining koronis and lenis of Greek Extended. + In Serif, re-worked combining marks lookup tables, added anchors in + Latin, moved so without marks they work in kedit (but now I'm doubting + kedit does a reasonable thing...what is a better application for + testing this?) + +2008-04-16 Steve White + * FreeSerifItalic.sfd: + + Adjusting of spacing and accents in Greek + + * FreeMono.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansOblique.sfd, FreeSerif.sfd: + + Much futzing with Greek letter spacing and accents. + Added lenis to FreeMono. + + * FreeMono.sfd, FreeSerif.sfd: + + Adjusted spacing of dots of Greek dieresistonons in Serif + Whipped up something for Greek kappascript in Mono (could use revision) + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Raised dots on double-dotted Cyrillic i, to match that of i and j. + +2008-04-14 Steve White + * FreeMono.sfd: + + Corrected 27e6-7 "white bracket" + Note it is probably a FontForge bug these symbols aren't showing up. + FontForge thinks they are in Supplemental Arrows, but they should be + in Supplemental Math-A + + Named some Greek characters + + * FreeSans.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: + + Spacing of some Cyrillic characters + +2008-04-13 Steve White + * FreeSerif.sfd: + + Some fiddling with accents + 'yogh' was too wide + + * FreeSansBold.sfd, FreeSansOblique.sfd: + + Character spacing was chaos--tried to improve. BoldOblique also needs + it. + + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Completed the fix of bug #12798, Greek glyphs with accents to side + Much mucking with accents here, and fixed a few things that were just + wrong. + +2008-04-12 Steve White + * FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + Made Mono curly quotes "bent" + + * FreeMono.sfd: + + More fiddling with Greek accents + Made quotes "bent" + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Adjustments on Greek diaresistonos etc. + Adjustments in Serif on combining marks for symbols + + * FreeSerif.sfd: + + More additions to Combining marks for Symbols + + Additions to Combining marks for Symbols -- now mostly full. + Lots of adjustments to middle anchor point in Latin to make big circle + (nearly) encircle preceding latter + +2008-04-11 Steve White + * FreeMono.sfd: + + Bugfix: + Had indroduce a glyph of width other than 600, making kterminal not + recognize it as a monospace font. + +2008-04-10 Steve White + * FreeSans.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + More messing with accents. + Further to bug #12798, Greek glyphs with accents to side + Much messing with glyphs in Greek Extended range + +2008-04-09 Steve White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSerif.sfd: + + Revisited Latin-1 and Latin-A accents. + Glyph B7 was called "periodcentered", but Unicode callse it Mid Dot, + and the description doesn't refer to the period. I made it like the + dot accent. throughout, and referred L-dot to it. + + Also double-checked "commaaccent" characters (some in Unicode called + cedilla, but the Unicode example shows a comma...mystery) + + Also the funny IPA upside-down f often had two bars, incorrectly. + + To do: go through rest of Serif, and Sans + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + Completed re-structuring of stacked Latin accents in Mono. + Also: lots of associated adjustments of Greek Extended accents. + (Trying to at least center extremely wide characters on their box) + Repaired some victems of "find overlaps" sweeps + Worked on glyphs with apostrope/comma parts + Corrected a few wrong glyphs. + + Trying out a "bent quotes" solution to making primes distinct from + quotes. + +2008-04-08 Steve White + * FreeMonoOblique.sfd: + + Toward reducing overall height + Did similar process as for Mono, fixing a few errors along the way. + Also the Greek Extended range was very messed up vertical and + horizontally. + Horizonal spacing of the heavily accented Greek is a real problem in + Mono... + To do: + revisit "commaaccent" characters in all faces: do some have + edillas? + some Hebrew glyphs are a little low + Georgian generally is way out of bounds + +2008-04-07 Steve White + * INSTALL: + + Various updates and corrections, tweeked formatting + + * FreeMonoBold.sfd: + + Tweeking of accents + +2008-04-06 Steve White + * FreeMono.sfd, FreeMonoBold.sfd: + + Re-worked accents in FreeMonoBold.sfd to make Latin ranges lie between + 800 and -200 EM, as with FreeMono. + + * FreeMono.sfd: + + Latin Extended ranges: Implemented new policy of shortening the letters + of the characters with the highest-stacked accents. + + At this point all the Latin glyphs lie betweeen 800 and -200 EM. + + Also checked for readability of all the Latin extended letters in xterm. + (Issue: it chops letters outside their bounding boxes; many accents had + been a bit outside. Made sure that if they were chopped, they were at + least still recognizable.) + +2008-04-05 Steve White + * FreeMono.sfd: + + Following exchange about Mono on freefont-bugs with Joe Wells, who + > doesn't like the curly quote marks + > wants combining diacritics to work + > wants tight line spacing + + Trying to reduce font height: + > exclamdown was below -200 + > Throughout Extended Greek, ypogegrammeni were too low. Shortened + glyph, and raised all references. + > Lots of messing with Latin Extended ranges to make glyphs mostly + fit into 800 height. Mostly succeeded. A couple will get chopped. + > Messed with "commaaccent" glyphs, which were very low + > Cyrillic 04B1 had a tail that was incorrectly low + > Much mucking with Georgian range. Moved up by 95 (read that Georgian + is written as though centered between two horizontal lines, rather than + as sitting on a baseline) There are still a few very high glyphs. + + FontForge U+0122 called Gcommaaccent, glyph looks like that, but + Unicode says it's Gcedilla. Made the ones called cedilla by Unicode + to be cedillas + + Note bug in Unicode: standard for 0122, 0123, 0136, 0137, 013B, 013C, + 0145, 0146, 0156, 0157 all talk about cedilla, say to make it with + cedilla, but example shows comma. + + By the way: + > Got rid of commaaccent and dotlessj in Corporate Use + > Replaced shadedark, with little squares now not overlapping. + > Corrected IPA symbol 'ts' 02A6, added 02a8, 02a9, 02aa, 02ab, 02ac, + 02ad, 02ae, 02af + + (so many changes...the CVS server was down...) + + * FreeSerif.sfd: + + Re-named arabic and hebrew characters + Big adjustment to comma-accents. Mostly effects Greek Extended. + Made such accents to be like comma, rather than like Russian apostrophe + (and de-referenced that symbol) + +2008-04-04 Steve White + * FreeMono.sfd, FreeSerif.sfd: + + Raised dot on superscript i (2071) -- more distinct at small sizes + + * FreeMono.sfd: + + added two IPA symbols + +2008-04-02 Steve White + * FreeSerif.sfd: + + fixed a few more control points too close + + Fixed names of languages in ligature table for latn "w/i". + This fixes a crash when FontForge opened the ttf table + + Motivated by bug crashing FontForge when opening ttf file, + started cleanup of useless control points. Not finished. + Got partway through Sinhala + +2008-03-31 Steve White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Fixed various "Find Problems", including glyphs with mixed-up names, + and bad TT matrices. (lots more bad TT matrices remain) + + * FreeSerif.sfd: + + Re-named a bunch of Cyrillic letters + + * FreeSerif.sfd: + + Put above mark on Cyrillic i and double-dot i for Slavonic number forms + +2008-03-30 Steve White + * FreeSans.sfd: + + Tightened spacing on glyphs of last commit + + * FreeSans.sfd, FreeSerif.sfd: + + Concerning bug #16120, Include upper case Wynn and upper case Yogh + Adapted Herman Miller's Thyromanes letters 01F7 021C 021D for Serif + Drew my own versions for Sans. + + * FreeSerif.sfd: + + Added 04F6,7 + + * FreeSerif.sfd, FreeSerifItalic.sfd: + + Made more Cyrillic diacritics really combine. + Made a mark lookup just for Cyrillic diacritics, + Marked most of the unadorned Cyrillic alphabet. + + Still not clear on correct shapes for some of the marks. + + * FreeMono.sfd, FreeMonoOblique.sfd: + + Tweeks to accents + +2008-03-29 Steve White + * FreeSans.sfd, FreeSerifItalic.sfd: + + Small adjustments in Cyrillic + + * FreeSerif.sfd: + + Corrected small palochka + Made Cyrillic combining hundred-thousands and millions really combine + Named some combining diacriticals + + * FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + Mostly adjusted horizontal spacing of mono oblique faces + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + More cleanup of Cyrillic ranges + + Completely re-did horizontal spacing of SerifItalic and SerifBoldItalic. + See bug #17912, poor kerning in Cyrillic oblique... + https://savannah.gnu.org/bugs/index.php?17912 + It looked like chaos to me. + Only so much can be done: the font is flawed. + But I think the changes make text readable in these faces. + + There were dozens of incorrect glyphs in higher-numbered characters. + I deleted all those I found. No glyph is better than a wrong glyph. + + Futzt with accents, shooting for consistency and readability. + + A maintenance thing: making correct references (acyrillic vs a, + although they may be the same glyph) I made a lot of headway, but + it isn't finished. + + Likewise, a large fraction of these are compound characters, which can + be made with references, resulting in easier maintenance, reduced + likelihood of errors, and smaller files. I replaced many. + + * FreeSerif.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Cyrillic italic + Added italic, bolditalic + 0493, 04a7, 04AD + because their form clearly varies in italic. But was just guessing... + + * FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Cyrillic italic + + Added italic, bolditalic + 0493, 04AD + because their form clearly varies in italic. + But was just guessing as to exact form. + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Overhaul of Cyrillic + + Italic, BoldItalic + added small yat for bug #22588 (note Times New Roman doesn't use + alternate form in Italic) + + All forms of Serif have big problems in Cyrillic. + + The ugliest is in roman. The letters, even of the Russian alphabet, are + of inconsistent height (awfully, small 0438 (ii) 0446 (tse)) + and they vary from the height of Latin + and they vary from the height of italic and bold. + They are a mish-mash of letters from several fonts, of similar (but not + quite identical) weight, and similar, (but not quite identical) size. + + I think the best solution would be to identify the face that best + matches Latin, and fill the range with that. I think this is possible + because the rarer letters seem to be better: the common letters are the + ones that are wrong. + + For now, I just increased the sized of 0438 and 0446, and 048a, 048b, + also 0459 (lje) 045A (nje) 0464 (dje) + + Other issues + +2008-03-27 Steve White + * FreeSerifBoldItalic.sfd: + + Moving all Greek capitals with accent so they don't cover previous + letter. Remedies bug #12798 + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Various tweeks to accented Latin letters. + Connected O-ogonek correctly + + * FreeSerifItalic.sfd: + + Accents of numerous accented Latin letters got shifted in a previous + commit. This fixes it. + + * FreeSerif.sfd: + + Adjusted combining tack left and right (0318-0319) to be above -300 EM. + + * FreeSans.sfd, FreeSerif.sfd: + + Added some "middle" marks for positioning of diacritics + + * FreeSans.sfd: + + Copied 4 enclosing combining diacriticals from Serif 20DD - 20E0 + + * FreeSerif.sfd: + + Adjusted and added some enclosing diacritics 20DD - 20E0 + In response to Debian bug #472566 + ttf-freefont: U+20DD COMBINING ENCOLSING CIRCLE doesn't combine + http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=472566 + +2008-03-26 Steve White + * FreeSerif.sfd: + + Lowered a few over-high Latin accents + + * FreeSansBold: + + Devangari--only digits 1 and 2, and nothing else. Deleted + + * FreeMonoBold, FreeMonoOblique, + FreeSerifBold, FreeSeriftalic, FreeSerifBoldItalic, + FreeSansOblique, FreeSansBold, FreeSansBoldOblique: + + Got rid of dotlessj, comma in Corporate Use + Single Substitution lookup, ccmp table + Made proper dotlessj, re-linked j-circumflex + + Note: + FreeSansBold has a commaaccent in Corporate Use, used by several other + characers. Haven't done anything about this. + +2008-03-25 Steve White + * FreeSerif.sfd: + + Added/corrected glyphs for yeh hamza in Arabic, + Added init and medi lookups for yeh hamza. + +2008-03-24 Steve White + * FreeSerif.sfd: + + Added isolated and final forms for + 0629 teh marbuta + 0624 waw hamza + 0626 yeh hamza + 0649 alef maksura + A previous commit had added lookups that referred to these, + + More fiddling with super/subscripts + + * Makefile, Makefile, GenerateTrueType: + + Scripts and Make targets to generate OpenType fonts and zip file + + * maintenance.txt: + + Added gnupload and info about tagging + +2008-03-23 Steve White + * FreeSerif.sfd: + + Last of Find Problems -> ATT + 'mark' Latin lookup: afii10026 is in 'cyrl', also afii10074 + Upper and lower Cyrillic i. Just removed mark from both letters. + + 'half' Bengali lookup Khanda_Ta is in 'bng2'. Added bng2 to lookup + Added TtTable etc + + Clean-up of Points too Close through to end of font. + This episode completes the paths/points clean-up of Serif. + But note: many ranges, esp. Ethiopic, Japanese, and Indic, have way + too many points, resulting in lumpiness. + + At this point, FontForge can convert splines to quadratic, auto-hint, + and auto-instrument without segfault. + + * Makefile, sfd/Makefile, tools/GenerateTrueType: + + Alterations to build process: added a Makefile, and made to work + on my system. Now auto-hints before generating TrueType. + +2008-03-22 Steve White + * sfd/FreeSans.sfd: + Lots of additions of math characters. Should complete for + LaTeX 2e, except for extensible brackets. + +2008-03-21 Steve White + * *.sfd: + + Regularized stacking of accents in Latin Extended Additional + Changed name of 00B5 from 'mu' to 'micro', + 2206 from 'Delta' to 'Delta.math', + 0308 from 'diaerisis' to 'diaerisiscomb' + + * FreeMono.sfd: + + additions to IPA + + * FreeMonoBoldOblique.sfd: + + Moved dotlessj from Corporate Use, + Deleted commaaccent there + Fixed mis-named glyphs tcommaaccent, Tcommaaccent + Changed name of 030A from 'dieresis' to 'ringcomb' + + * FreeSans.sfd: + + Added some arrows, and a couple of blackboard bold characters + + Several characters in U+F600 Corporate Use range + dotlessj, onefitted, commaaccent + + dotlessj referred to by: jcircumflex, uni01F0: + renamed it to uFFFF, re-linked others by hand + + commaaccent + http://diacritics.typo.cz/index.php?id=9 + should be u+0326 but wasn't linked to anything + + * FreeSansBold.sfd: + + U+0617 etc: read glyphs "4GWglm". It should be Arabic. Deleted + + * FreeSansBold.sfd, FreeSansOblique.sfd, FreeSansBoldOblique.sfd: + + Removed bogus glyphs for 200C 200D, ZWJ and ZWNJ + + * FreeSerif.sfd: + + Split lookup for ligatures in latin into two classes; + ff, ffl, fl which are appropriate for all languages, + and fi, ffi, which are not appropriate in Turkish (due to distinction + between short and long i) + Needs to be done for other faces. + + Filled set of extensible brackets in Miscellaneous Technical + + Think IPA is now complete. + +2008-03-18 Steve White + * FreeSans.sfd: + + clean-up of all path issues and points too close + +2008-03-18 Steve White + * FreeSans.sfd: + + Something was causing crashing effects in Windows. Cleanup of + problems eventually made it go away. Now works well. + + Cleaned up many "points too close" + + Cleaned up all ATT problems, of which there were many and various. + + # Incorrectly labelled zero-width joiner used in a ligature + + # Incorrect substitution of dotlessi and dotlessj with i and j was + somehow connected with FontForge crash. Attemts to remove the + substitution would damage a 'ccmp' table; subsequent changes would + result in FontForge crashing on save, and truncating the sfd file. + Surgically removed with vi. + + # A couple of Indic lookups had incorrect script DFLT; one had 'latn'. + + # Don't understand why there are scripts named + dev2 bng2 grj2 gur2 when there are already deva beng gurj guru + But anyway, lots of 'vatu' 'pres' 'haln' and 'liga' lookups contained + characters in the '2' scripts but were lablled only for the 'non-2' + ones. Added the '2' scripts to all these lookups. Suspect a mistake. + + Note: several of these problems are repeated in other Sans faces. + +2008-03-16 Steve White + * FreeMono.sfd: + + Cleanup of many path problems "points too close" + + Strove to make accents Latin Extended range legible at small sizes + + Named some unnamed characters; removed a duplicate + + At this point, all fonts are passing FontForge Validate. + +2008-03-15 Steve White + * FreeSerif.sfd: + + CJK punctuation: made some of the very high glyphs smaller (under 900EM) + The brackets in Sans were very ugly, and not even Sans-serif. + Serif: added extensible square brackets, diddled with integral + corrected direction of some added glyphs + + Several bugs having to do with missing glyphs in Tamil range. + Also a buggy ligature in Devangari. + + Shortened names of many lookup tables + + Futzt with some combining diacriticals + + Added extensible square brackets. + + * FreeSans.sfd: + + Changed names of a bunch of glyphs with invalid + TrueType names, in range 0x1025f+ (not real Unicode). + Took pains to retain information contained in the names. + Wonder if these glyphs have ever been of any use. + + CJK Punctuation: brackets were hand-drawn and very ugly. Improved. + + * *.sfd: + + Set OS/2 Metrics back to absolute 900/300. Offsets are not + interpreted uniformly. + + Cleanup of many path problems up to extrema and self-intersecting + + Ordered PS Blue values. + +2008-03-14 Steve White + * FreeSerif.sfd: + + Got rid of mixed references and contours + Cleanup of many path problems "points too close" + + Started clean-up to satisfy FontForge Validate + + Changed names of three glyphs in the + Tamil ligatures range...all clearly bugs. + + * FreeSans.sfd: + + Added slanted-hyphen + + * *.sfd: + + Unified OS/2 Metrics + Added Grid Fit + +2008-03-13 Steve White + * FreeSans.sfd: + + Rearranged PS BluesValues so they were in increasing order, + Made all 20 in width. + +2008-03-12 Steve White + * FreeSans.sfd, FreeMono.sfd: + + Added TrueType hinting tables. + Fixed glyphs that didn't convert well to quadratics + Got rid of mixed contours and refs + + * FreeSerifBold.sfd: + + Cleanup of path problems + +2008-03-11 Steve White + * FreeMonoOblique.sfd: + + Cleanup of path problems + +2008-03-09 Steve White + * FreeSerif.sfd: + + Corrected L-dot + Further cleanup of path/ref problems + + Found several ligatures that referred to a missing glyph "ZWJ". + Took this to mean the "zero width joiner" u+200D + + * *.sfd: + + Changed OS/2 metrics to be absolute 900/300 + + * FreeSerifItalic.sfd: + + Added Greek lunate epsilon + + * FreeMono.sfd: + + Many additions in math range + Reduced size of binary union, intersection, vee, wedge + Corrected empty set + Corrected logical 'assert' relations, etc. 22a2-22af + Efforts to make Math glyphs legible at small point sizes + + * FreeSans.sfd: + + Added Greek lunate epsilon and rho symbol + Unstacked more stacked diacriticals + + Further cleanup of path/reference problems + +2008-03-08 Steve White + * FreeSans.sfd, FreeSerif.sfd: + + Added some "n-ary" Math operators + + * FreeSerif.sfd: + + Further clean-up of path problems...up to Ethiopic + > Started adding and correcting Math operators for LaTeX 2e + > Corrected n-ary union, intersection, and spikes to be larger + than the binary operators + > Made (many of) the operators based on + - = to use those + symbols directly (by reference or copying). + > Added lunate epsilon + > Corrected empty set + > Tightened up spacing of some other technical characters + > Worked on some more math operators involving = + > triangle + > Several arrows + > Supplemental Arrows-A + + * FreeSans.sfd: + + Clean-up of font paths + Open self-intersecting outermost-clockwise missing-extrema + also flipped references (unlinked) + + Added Greek lunate epsilon and rho symbol + +2008-03-06 Steve White + * sfd/FreeSerif.sfd: Shortened and thickened the combining hook mark, + U+0309, to make more like Unicode samples. + Also see (bug #22499) un-stacked incorrectly stacked accents + +2008-03-05 Steve White + * sfd/FreeSerif.sfd: vertical lines: combining diacritical marks + corrected 0300 030D 0329 0348 (were rendered as straight apostrophes) + Spacing Modifier letters added 02C8 02CC + 02B9 02Ba prime and double-prime + Fixed positioning U+1EC8, 9, I with hook above + +2008-03-03 Steve White + * sfd/FreeSerif.sfd: TT strings updates. + updated Copyright to 2008 + Added Vendor URL as the Savannah freefont site + * sfd/FreeMono.sfd: A standard pangram as the Sample Text for Russian + It reads: In the thickets of the South once there was a citrus + ...--yes, but a fake specimen! + * sfd/*.sfd: Set the OS/2 Sup/Sub settings, which by default looked + like random trash. + +2008-03-02 Steve White + * sfd/FreeSerif.sfd: began cleanup of problems given by FontForge + "Find Problems" feature. (bug #22454) + +2008-03-01 Steve White + * sfd/FreeSerif.sfd: made Arabic work for text display (bug #22329) + Added required contextual replacement tables, + Made a few missing characters, + * sfd/*.sfd: Removde all back layers from glyphs that had them. + +2008-02-27 Steve White + * sfd/FreeSans.sfd: filled in Combining Diacriticals + * sfd/FreeSerif.sfd: shifted whole Arabic range down by 200EM. + +2008-02-26 Steve White + * sfd/FreeSerif.sfd: enabled DPOS table. + +2008-02-24 Steve White + * sfd/*.sfd: Much fiddling with the "combining diacriticals" + range 0300-036F. Made to align with medium-size lowercase + preceding character if not using DPOS table. + +2008-02-23 Steve White + * sfd/FreeSerif.sfd, FreeSans.sfd, FreeMono.sfd: (bug #21784) Filled + in set of HTML 4 Character Entities. + + * sfd/FreeSerif.sfd, FreeSans.sfd, FreeMono.sfd: (bug #18413) + undertie too low -- went on to tidy other similar characters in + Combining Diacriticals range. + +2008-02-21 Steve White + * sfd/*.sfd: Moved capital Greek letters with tonos so tonos doesn't + cover preceding letter (bug #12798) + + * sfd/FreeSerif.sfd, FreeSans.sfd: (bug #13370) made extended + integrals to line up. + +2008-02-20 Steve White + * sfd/*.sfd: started removing glyphs with back layers (printing bug) + * sfd/*.sfd: adjusted vulgar fractions (bug #17756) + * sfd/*.sfd: adjusted numerical superscripts (bug #20278) + +2008-02-18 Steve White + * sfd/FreeSerif.sfd: Offset Hiragana and Katakana ranges (bug #22326) + * sfd/FreeSerif.sfd: U+30FB, KATAKANA MIDDLE DOT to be full width + (bug #18326) + + * sfd/FreeSerif.sfd: Re-promoted + ff ffi ffl fi fl + as standard ligatures in Latin. + +2008-02-17 Steve White + * sfd/*.sfd: committed to FontForge Spline Font Database (SFD) 2 + format. + +2008-02-10 Steve White + * sfd/*.sfd: brought into line with Debian ttf-freefont + Deleted a couple of patches, and applied those applied to Debian. + +2006-09-20 Primoz Peterlin + + * INSTALL: added installation procedure for MacOS X, courtesy + Philipp Kempgen. + +2006-05-04 Primoz Peterlin + + * sfd/FreeMono.sfd: deleted Russian sample text, which did not + conform to UTF-7. + +2006-04-15 Primoz Peterlin + + * sfd/FreeSerif.sfd: corrected U+10D3. + + * sfd/FreeSans.sfd: ligature U+FB06 (LATIN SMALL LIGATURE S T) + changed from mandatory ("liga") to discretionary ("dlig") (bug + #16253). + + * sfd/FreeMono.sfd: deleted incomplete glyph U+FB06 (LATIN SMALL + LIGATURE S T); deleted U+FB00, U+FB01, U+FB02, U+FB05 as + ligatures (bug #16253). + + * sfd/FreeMonoOblique.sfd, sfd/FreeMonoBoldOblique.sfd: added + U+FB00; deleted U+FB01, U+FB02 as ligatures (bug #16253). + + * sfd/FreeMonoBold.sfd: deleted U+FB00, U+FB01, U+FB02 as + ligatures (bug #16253). + + * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, + sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd, + sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, + sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd, + sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd, + sfd/FreeSerifBoldItalic.sfd: added Georgian letters, donated by + Gia Shervashidze + +2006-02-22 Primoz Peterlin + + * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd: ligature U+FB4F + changed from mandatory ("liga") to discretionary ("dlig"). This is + respons to Bug#349657: [bug #15792] Freefont Alef and Lamed + combine + +2006-02-21 Primoz Peterlin + + * sfd/FreeSerifBold.sfd, sfd/FreeSans.sfd, + sfd/FreeSansOblique.sfd, sfd/FreeSansBoldOblique.sfd, + sfd/FreeSansBold.sfd: ligature U+FB4F changed from mandatory + ("liga") to discretionary ("dlig"). This is respons to Bug#349657: + [bug #15792] Freefont Alef and Lamed combine + + * sfd/FreeSerif.sfd: corrected bug#275759: [bug #15790] FreeSerif + glyphs for U+2198/U+2199 were reversed. + +2006-02-15 Denis Jacquerye + * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, + sfd/FreeMonoBoldOblique.sfd, sfd/FreeMonoBold.sfd: removed ij + and IJ ligatures. + +2006-02-10 Primoz Peterlin + + * sfd/FreeSerif.sfd: added small Georgian letters (mkhedruli), + donated by Gia Shervashidze + + * AUTHORS: Added Gia Shervashidze + + * CREDITS: Added Gia Shervashidze + +2006-01-26 Primoz Peterlin + + * notes/maintenance.txt: Added information on the Makefile now + used; username for FTP login is anonymous. + + * sfd/FreeSansBold.sfd: added U+0569, U+0571, U+0579, U+057B, + U+0586. Armenian small letters completed. + + * sfd/FreeSerif.sfd: added U+0297, U+02AD-02AF. IPA Extensions + section is now complete. Copied a dozen of glyphs from Omega IPA + to Phonetic Extension section. + +2006-01-25 Primoz Peterlin + + * sfd/FreeSans.sfd: added U+01A, U+01A3, U+01A6, U+01B2, U+01BA, + U+01BB, U+01BE, U+01BF. + + * sfd/FreeSans.sfd: aligned small Armenian letters to x-height in + response to bug #15480. Armenian in Free Sans needs a major + cleanup. + +2006-01-24 Primoz Peterlin + + * sfd/FreeSerif.sfd: changed U+0452, U+045B. Cleanup: U+0460, + U+0461, U+04Bc, U+04BD, U+0508. + + * sfd/FreeSansOblique.sfd: replaced accented chars in Latin-1 and + Latin Extended-B sections with references, where possible. + + * sfd/FreeSerif.sfd: changed U+0285. + +2006-01-23 Primoz Peterlin + + * sfd/FreeSans.sfd: added U+0195, U+01AA, U+0297, U+03D7, + U+03F0. Several flipped references replaced by outlines. + + * sfd/FreeSansOblique.sfd: Latin Extended-B section more or less + brought in sync with FreeSans. + + * sfd/FreeMonoBoldOblique.sfd: added glyphs from FreeMonoBold in + the Latin Extended-B and IPA Extensions sections. + + * sfd/FreeSerifBold.sfd: Added U+0224, U+0225. Changed U+01B7, + U+01B8, U+04E0, U+0452, U+045B. Replaced accented characters in + the Cyrillic region with references. + +2006-01-21 Primoz Peterlin + + * sfd/FreeSans.sfd: added U+0255, U+0264, U+0277, U+0286, + U+029D. Changed U+0261. Deleted spurious glyphs in the control + code area. + +2006-01-19 Primoz Peterlin + + * sfd/FreeSans.sfd: replaced Hardip Pannu Singh's Gurmukhi with + AnmolUni by Kulbir Singh Thind. + +2006-01-17 Primoz Peterlin + + * sfd/FreeSansBold.sfd: Added U+018D, U+0194, U+01B5, U+01B6, + U+01BE, U+0262, U+02A2. + + * sfd/FreeSansBold.sfd: Changed U+0261 in order to distinguish it + from U+0067. Changed U+0251, U+0252. + + * sfd/FreeSerifBold.sfd: Small changes in the Cyrillic + section. Added U+0183, U+018C. + + * sfd/FreeSans.sfd: Added U+2045, U+2046. + + * sfd/FreeSansBold.sfd: Filled in the Gurkmukhi part with the + AnmolUni-Bold by Kulbir Singh Thind. Also some minor corrections + in the Cyrillic part. + + * CREDITS: Added Kulbir Singh Thind. + + * AUTHORS: Added Kulbir Singh Thind. + +2006-01-14 Primoz Peterlin + + * sfd/FreeSerif.sfd: Thomas Ridgeway's Tamil characters replaced + by the ones released by the Samyak font project. + + * CREDITS: Added Pravin Satpute, Bageshri Salvi, Rahul Bhalerao + and Sandeep Shedmake + + * AUTHORS: Added Pravin Satpute, Bageshri Salvi, Rahul Bhalerao + and Sandeep Shedmake + +2006-01-08 Primoz Peterlin + + * sfd/FreeSansBold.sfd, sfd/FreeMonoBoldOblique.sfd: minor changes. + +2006-01-05 Denis Jacquerye + + * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, + sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd, + sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, + sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd, + sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd, + sfd/FreeSerifBoldItalic.sfd: added cedi sign U+20B5, Ghanaian + currency + +2005-12-29 Primoz Peterlin + + * sfd/FreeSans.sfd: minor cleanup in the Gujarati part. + +2005-12-22 Primoz Peterlin + + * sfd/FreeSans.sfd: Devanagari and Gujarati parts cleared; once + again merged with Gargi 1.9 and Padmaa 0.6, this time correctly so + that the anchor points survived the merger. + +2005-12-16 Primoz Peterlin + + * sfd/FreeSans.sfd: added U+0577. + +2005-12-15 Primoz Peterlin + + * sfd/FreeSans.sfd: added U+0559, U+055F, U+2024. + + * sfd/FreeSansBold.sfd: added U+056E, U+0573. + +2005-12-14 Primoz Peterlin + + * sfd/FreeSans.sfd: Merged with Gargi 1.9 and Padmaa 0.6, + courtesy Monika Shah and Sonali Sonania from C-DAC, Mumbai. + + * CREDITS: Added Monika Shah and Sonali Sonania. + + * AUTHORS: Added Monika Shah and Sonali Sonania. + +2005-12-13 Primoz Peterlin + + * sfd/FreeSans.sfd - Removed Sinhala glyphs. + + * sfd/FreeSerif.sfd - Added Sinhala glyphs, formerly in FreeSans. + +2005-12-09 Primoz Peterlin + + * sfd/FreeSerif.sfd: added U+20AF, U+211E. Changed U+20AC (EURO + SIGN). + + * tools/freefont-ttf.spec: Added specification file for building + RPM package, courtesy Rok Papez. + + * sfd/FreeSerifBold.sfd: added more glyphs from Txfonts to the + Arrows and Mathematical Symbols ranges. + + * sfd/FreeSerifBoldItalic.sfd: added U+03F5 from Txfonts. + +2005-12-08 Primoz Peterlin + + * sfd/FreeSans.sfd: added U+0567, U+056A, U+056C, U+0582. + + * sfd/FreeSerifBold.sfd: copied Box Drawing range from FreeSans. + + * sfd/FreeSerifBold.sfd: added glyphs from Txfonts to the Arrows + and Mathematical Symbols ranges. + + * sfd/FreeSerif.sfd: added U+2259-225A, U+22BA, U+2308-230B, + U+2322-2323. Cyrillic composite characters replaced with + references. + +2005-12-07 Primoz Peterlin + + * sfd/FreeSerifBold.sfd: added U+025A, U+025D, U+026B, U+029B, + U+02AE, U+02AF, U+02DE. + + * sfd/FreeSerifBold.sfd: updated Hebrew part with Drugulin font + from the Culmus project. + + * sfd/FreeSerif.sfd: added U+207A-207C, U+208A-208C, U+2215-2216. + + * sfd/FreeSans.sfd: added U+2320 TOP HALF INTEGRAL, U+23AE + INTEGRAL EXTENSION, U+2321 BOTTOM HALF INTEGRAL (bug #13370). + +2005-12-07 Primoz Peterlin + + * sfd/FreeSerifBold.sfd: added U+0294-0296, U+02A1-02A2. Started + adding "below" anchors. Performed hinting on characters that were + not hinted "en masse". + +2005-12-06 Primoz Peterlin + + * sfd/FreeSans.sfd: fixed some more metrics problems in the + Extended Greek area; performed hinting on characters that were not + hinted "en masse". + + * Makefile: clean also signature files. + + * sfd/FreeMonoBoldOblique.sfd, sfd/FreeMonoBold.sfd: cosmetic + changes; cleaning background of referenced composed characters. + +2005-12-05 Panayotis Katsaloulis + + * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, + sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd, + sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, + sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd, + sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd, + sfd/FreeSerifBoldItalic.sfd: Some changes to the greek glyphs, + mostly having to do with "tonos" (accent) + +2005-12-05 Primoz Peterlin + + * sfd/FreeSans.sfd: minor cosmetic changes. + + * sfd/FreeSans.sfd: adjusted widths of characters in the Extended + Greek range; accents are not any more considerably overhanging on + the left side. Added U+1EDA-1EE3, U+1EE8-1EF1. + + * sfd/FreeSans.sfd: continued working on Extended Greek range; + metrics still not finished. + +2005-12-03 Primoz Peterlin + + * sfd/FreeSans.sfd: fixed combined Greek accents (bug + #12800). Width of characters still need to be adjusted as in + FreeSerif. + + * sfd/FreeSerif.sfd: fixed positions of Greek accents (bug #12798). + + * CREDITS: Added Panayotis Katsaloulis. + + * AUTHORS: Added Panayotis Katsaloulis. + + * Makefile: minor changes; now creating also a tarfile with sfds. + +2005-12-01 Primoz Peterlin + + * sfd/FreeSerifItalic.sfd: added U+0183, U+018C, U+01C0, U+01C1, + U+01C3, U+01E0, U+01E1, U+01F8, U+01F9. + + * Makefile: created a Makefile to assist building. + + * README: an update. + + * COPYING: added GNU General Public License, version 2. + + * tools/GenerateTrueType: wrote a FontForge script for conversion + to TrueType. + + * sfd/FreeSerif.sfd: merged with SolaimanLipi Bangla OpenType font + from www.ekushey.org, courtesy Solaiman Karim. + + * sfd/FreeSerifItalic.sfd: merged with SolaimanLipi Bangla + OpenType font from www.ekushey.org, slanted by 15.5 degrees. + + * sfd/FreeSans.sfd: merged with Rupali Bangla OpenType font from + www.ekushey.org + + * sfd/FreeSansOblique.sfd: merged with Rupali Bangla OpenType font from + www.ekushey.org, slanted by 12 degrees. + + * CREDITS: added Solaiman Karim + + * AUTHORS: added Solaiman Karim + +2005-11-30 Primoz Peterlin + + * sfd/FreeSerif.sfd: merged with the Rachana Normal. + + * AUTHORS: added K.H. Hussain and R. Chitrajan + + * CREDITS: added K.H. Hussain and R. Chitrajan + +2005-11-23 Primoz Peterlin + + * sfd/FreeSans.sfd - cleaned some background images. + + * sfd/FreeSans.sfd - added U+01A0-01A1, U+01AF-01B0, U+026E, + U+028F, U+0291, U+02A3-02A5, U+031B. Modified U+0198. + +2005-11-22 Primoz Peterlin + + * sfd/FreeSans.sfd - added U+2504-250B. + + * sfd/FreeSans.sfd - added U+2591-25A1, U+25A3-25A5, U+25AA, U+25AC. + + * sfd/FreeSans.sfd, sfd/FreeSansBold.sfd - added U+0263. + +2005-11-21 Primoz Peterlin + + * sfd/FreeMono.sfd - corrected positions of some Greek diacritics + on page 0x1F. + + * sfd/FreeMonoOblique.sfd - working on bringing it in sync with + FreeMono.sfd. + + * sfd/FreeSerifBoldItalic.sfd - applied the sequence suggested by + Werner Lemberg for reducing redundant points. Added a couple of + glyphs in the IPA Extensions region. + + * sfd/FreeSansBold.sfd - added U+0574, U+0576. Removed overlaps. + +2005-11-20 Primoz Peterlin + + * sfd/FreeSerif.sfd - added U+02AA-02AC, U+02B0-02B2. + +2005-11-19 Primoz Peterlin + + * sfd/FreeSans.sfd - added U+01B7-01B9, U+0196, U+019A, U+01C3, + U+0224-0225, U+025E, U+029A, U+2422. Changed U+0184-0185, U+0192, + U+01B4, U+0282, U+0284. + +2005-11-18 Primoz Peterlin + + * sfd/FreeSerif.sfd - added U+02EE, U+207F. + + * sfd/FreeSans.sfd - started Box Drawing area. + +2005-11-17 Primoz Peterlin + + * sfd/FreeSerifBold.sfd - added glyphs from the Omega project to + Latin Extended-B, IPA Extensions and Greek ranges. + + * sfd/FreeSerifBoldItalic.sfd - added glyphs from the Omega + project to Latin Extended-B, IPA Extensions and Greek ranges. + + * sfd/FreeSerifItalic.sfd - added glyphs from the Omega + project to Latin Extended-B, IPA Extensions and Greek ranges. + + * sfd/FreeSerifItalic.sfd - added U+018B, U+025C, U+0265, U+026F, + U+0279, U+0287, U+028C-028E, U+029E. + + * sfd/FreeSerifBoldItalic.sfd - added U+1EDA-1EE3, U+1EE8-1EF1, + U+2190-219B, U+219E-21A8, U+21B9-21BA, U+21C4-21CA, U+21E4-21E5, + U+2669-266F. MES-1 compliant. + + * sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, + sfd/FreeMonoBoldOblique.sfd, sfd/FreeSansOblique.sfd, + sfd/FreeSansBold.sfd, sfd/FreeSansBoldOblique.sfd, + sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd, + sfd/FreeSerifBoldItalic.sfd - added U+FFFD. + + * sfd/FreeSerif.sfd - removed overlaps in Latin Extended-B and IPA + Extensions ranges. + +2005-11-16 Primoz Peterlin + + * sfd/FreeSerifItalic.sfd - applied the sequence suggested by + Werner Lemberg for reducing redundant points. + + * sfd/papers/eurotex2003/freefont.tex, + sfd/papers/eurotex2003/freefont.bib - Revised version, sent back + by Karl Berry on 20050110, that should match the one published in + TUGboat. + + * sfd/FreeSerifItalic.sfd - started added accent anchors. Added a + handful of Greek letters from Omega font collection. + + * sfd/FreeSerif.sfd - added a handful of letters in the Latin + Extended-B and IPA Extension ranges from the Omega font collection. + +2005-11-16 Denis Jacquerye + + * sfd/FreeSerif.sfd - moved U+0263 to U+0264; added U+0263 + + * sfd/FreeSerifItalic.sfd - fixe U+01EE; added U+01B7-U+01B9 + +2005-11-16 Primoz Peterlin + + * sfd/FreeSans.sfd - Made small Greek letters the same height as + Latin and Cyrillic ones and replaced them with references, where + applicable. + + * sfd/FreeSerif.sfd - replaced Greek letters with references, + where applicable. Added U+03D7, U+03F0-03F2. + + * sfd/FreeSerif.sfd - added U+0255, U+025A, U+025D, U+025F, + U+0262-0263, U+026B-026C, U+0274, U+0276-0277, U+028F, U+0291, + U+029D. + + * sfd/FreeMonoOblique.sfd - applied the sequence suggested by + Werner Lemberg for reducing redundant points. Added U+F6BE. + + * sfd/FreeSansOblique.sfd - applied the sequence suggested by + Werner Lemberg for reducing redundant points. + + * sfd/FreeSans.sfd - changed U+01A5. + +2005-11-16 Primoz Peterlin + + * sfd/FreeSans.sfd - applied the sequence suggested by Werner + Lemberg for reducing redundant points. Replaced accented glyphs in + the Latin-1 and Latin Extended-A areas with references. Made + capital Greek letters the same height as Latin and Cyrillic ones + and replaced them with references, where applicable. + +2005-11-15 Denis Jacquerye + + * sfd/FreeSans.sfd, sfd/FreeSansBold.sfd, + sfd/FreeSansBoldOblique.sfd, sfd/FreeSansOblique.sfd - fixed + U+026A, it was a dotlessi and therefore like U+0069 when + accented. + +2005-11-15 Primoz Peterlin + + * sfd/FreeMonoBold.sfd - corrected Greek tonos (slanted instead of + a vertical line). + + * sfd/FreeMonoBoldOblique.sfd - applied the sequence suggested by + Werner Lemberg for reducing redundant points. Replaced accented + glyphs in the Latin-1 and Latin Extended-A areas with references. + +2005-11-14 Primoz Peterlin + + * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, + sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd, + sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, + sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd, + sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd, + sfd/FreeSerifBoldItalic.sfd - Added 2005 in copyright info. + + * sfd/FreeSansBoldOblique.sfd - applied the sequence suggested by + Werner Lemberg for reducing redundant points. Replaced accented + glyphs in the Latin-1 area with references. + + * sfd/FreeSansBoldOblique.sfd - added U+0180, U+0184, U+0185, + U+0195, U+01A0-01A2, U+01AF-01B0, U+025E, U+026E, U+0292, + U+0294-0296, U+029A, U+02A1, U+2126-2127, U+2190-219B, + U+219E-21A8, U+21C4-21CA, U+2669-266F. MES-1 compliant. + + * sfd/FreeMono.sfd - Replaced accented glyphs in the Greek and + Cyrillic areas with references. + + * sfd/FreeMonoBold.sfd - applied the sequence suggested by Werner + Lemberg for reducing redundant points. Replaced accented glyphs in + the Latin-1 and Latin Extended-A areas with references. + +2005-11-14 Primoz Peterlin + + * sfd/FreeSerif.sfd - applied the sequence suggested by Werner + Lemberg for reducing redundant points. + + * sfd/FreeSansBold.sfd - added U+219A, U+219B, U+2669-266F. + + * sfd/FreeSerifBold.sfd - added U+2669-266F. + +2005-11-12 Primoz Peterlin + + * sfd/FreeSansBold.sfd - added U+0180, U+0181, U+0183, U+0187, + U+0188, U+018A, U+018C, U+018D, U+0193, U+019C, U+01A0, U+01A1, + U+01AC, U+01AF, U+01B0, U+025C, U+0260, U+026E, U+0277, U+0281, + U+0284. + +2005-11-11 Primoz Peterlin + + * sfd/FreeSansBold.sfd - added U+195, U+1A6, U+025E, U+026E, + U+029A, U+0313, U+0314, U+0342, U+0344, U+0345. Started adding + accent anchors. + + * sfd/FreeMono.sfd - applied the sequence for reducing redundant + points, suggested by Werner Lemberg. + + * sfd/FreeMono.sfd - corrected Greek letters (using tonos instead + of a vertical line). Added U+026E, U+F6BE. Accented characters in + Latin 1, Latin Extended A and partly Latin Extended B replaced by + references. + + * sfd/FreeSerifBold.sfd - applied the sequence for reducing + redundant points, suggested by Werner Lemberg. Added U+01A5, + U+02A0, U+2190-219B, U+219E-21A8, U+21B8, U+21B9, U+21C4-21CA, + U+21E4, U+21E5. + +2005-11-10 Primoz Peterlin + + * sfd/FreeSansOblique - changed U+0192, U+01A5; added U+01C0-01C3. + + * sfd/FreeSansBold.sfd - replaced glyphs with references in the + Cyrillic area. Removed U+04A8, U+04A9. Added U+04C5, U+04C6, + U+04C9, U+04CA, U+04CD, U+04CE, U+0535, U+053F, U+0546, U+0565, + U+0584, U+0587, U+0589. + +2005-11-10 Denis Jacquerye + + * sfd/FreeSans.sfd - added U+028A-U+028B + + * sfd/FreeSansOblique - added U+028A-U+028B, U+0276, + U+0292, U+0294-U+0296, U+0298-U+0299 and U+029B; fixed some + other glyphs + +2005-11-10 Primoz Peterlin + + * sfd/FreeSerif.sfd - added U+01A6. Simplified outlines in the + ASCII range. + + * sfd/FreeSansBold.sfd - added U+00A0, U+00AD, U+0531, U+2126, + U+2190-2199, U+219E-21A8, U+21C4-21CA. + + * sfd/FreeSansBold.sfd - applied the sequence for reducing + redundant points, suggested by Werner Lemberg. Added automatically + constructed accented characters in page 0x1E. + +2005-11-09 Primoz Peterlin + + * sfd/FreeSerif.sfd - added U+0183, U+018C. + + * sfd/FreeSans.sfd - added U+1EA2, U+1EA3, U+1EA8, U+1EA9, U+1EB2, + U+1EB3, U+1EBA, U+1EBB, U+1EC2, U+1EC3, U+1EC8, U+1EC9, U+1ECE, + U+1ECF, U+1ED4, U+1ED5, U+1EE6, U+1EE7, U+1EF6, U+1EF7, U+220A, + U+220B, U+220D, U+2272, U+2273, U+2282, U+2283. + + * sfd/FreeSerifItalic.sfd - changed U+03D5. + + * sfd/FreeSerifBoldItalic.sfd - changed U+03C6; added U+2070, + U+2075-2079, U+207F, U+2080, U+2085-2089, U+2155-217F. + + * sfd/FreeSerif.sfd - added U+0184, U+0185, U+018D, U+0195, + U+0197, U+019A, U+019B, U+01A0, U+01A1, U+01AC, U+01B5, U+01B6, + U+01C0, U+01C1, U+01C3, U+01F6, U+0294-0296, U+1E9A, U+1EDA-1EE3, + U+1EE8-1EF1. + +2005-11-07 Primoz Peterlin + + * sfd/FreeSansBold.sfd - added U+0562, U+056D. U+0575. + + * sfd/FreeMono.sfd - added U+0589. + +2005-11-06 Primoz Peterlin + + * sfd/FreeSans.sfd - added U+0278, U+03D5, U+2248. Corrected + U+2071, U+222E, U+2242, U+2243 in response to bug reports + http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=276118 + http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=276120 + + * sfd/FreeMono.sfd - added U+2227, U+2228, U+2262. Corrected + U+2299-229D in response to bug report + http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=276121 + + * sfd/FreeMonoBold.sfd - added U+2010, U+2012 in response to bug + report http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=289032 + Swapped U+03C6 (Greek small letter phi) and U+03D5 (Greek phi + symbol) in order to conform to Unicode standard. Simplified glyph + shapes in ASCII range. Started adding "above" and "below" anchors. + +2005-11-05 Primoz Peterlin + + * sfd/FreeSerif.sfd - accented letters in Latin Extended-A + replaced by references wherever possible. + + * sfd/FreeSerif.sfd - added U+0180, U+0181, U+0187, U+0188, + U+018A, U+0193, U+019C, U+01A4, U+01A5, U+01A7, U+01A8, U+01AF, + U+01B0, U+026E, U+0270, U+0278, U+0280, U+0281, U+028B, U+0299, + U+029C, U+029F. + +2005-11-03 Primoz Peterlin + + * sfd/FreeSansBold.sfd - added U+0180, U+0184, U+0185, U+0192, + U+019B, U+01A0-01A2, U+01AF, U+01B0, U+01EE, U+01EF, U+0292, + U+0294-0296, U+02A1, U+0532, U+054C, U+057C, U+222B. Changed + U+014B, U+01A5, U+01B4, U+03BB. + + * sfd/FreeSans.sfd - added U+04C5, U+04C6, U+04C9, U+04CA, U+04D, + U+04CE. + + * sfd/FreeSansBold.sfd - cleaner Arabic outlines. Added U+01E4, + U+01E5. + +2005-11-02 Primoz Peterlin + + * sfd/FreeSansBold.sfd - started Armenian; added U+0538, U+0542, + U+0544, U+0548, U+054D, U+054F, U+0550, U+0553, U+0555, U+0561, + U+0563, U+0564, U+0566, U+0568 U+056B, U+056F, U+0570, U+0572, + U+0578, U+057A, U+057D-057F, U+0580, U+0581, U+0583, U+0585. + + * sfd/FreeMono.sfd - swapped U+03C6 (Greek small letter phi) and + U+03D5 (Greek phi symbol) in order to conform to Unicode standard. + Added U+04C5, U+04C6, U+04C9, U+04CA, U+04D, U+04CE. + +2005-11-01 Primoz Peterlin + + * sfd/FreeSansBold.sfd - modified U+019C. + + * sfd/FreeSansBoldOblique.sfd - added U+00A0, U+00AD, U+019C, + U+01B7, U+01B8, U+0275, U+0278, U+0298, U+2012, U+2015, + U+2070-207F, U+2080-208E, U+2153-217F, U+2213, U+2215. + +2005-10-31 Primoz Peterlin + + * sfd/FreeSerif.sfd - added U+0199, U+01AB, U+0265, U+0282, + U+0288, U+028C-028E, U+0290, U+029E, U+02A0. + +2005-10-28 Primoz Peterlin + + * sfd/FreeSerifBold.sfd - added U+019E, U+01AB, U+01AD, U+01B1, + U+0256, U+025F, U+0265, U+0269, U+026F, U+0270, U+0279-027F, + U+0282, U+0287, U+0288, U+028C-028E, U+0290. + + * sfd/FreeSerifBold.sfd - added U+2070, U+2075-2079, U+2080, + U+2085-2089, U+2153-215E, U+2113-2115, U+2119. + + * sfd/FreeSerifBold.sfd - added U+0199, U+019B, U+01B8, U+01B9, + U+01BE, U+01C0, U+0262, U+0274, U+0278, U+0280, U+028F, U+0298, + U+0299, U+029C, U+029E, U+029F, U+2012, U+2015, U+2016, U+2129, + U+2217. + +2005-10-27 Primoz Peterlin + + * sfd/FreeSans.sfd - added U+018D, U+0194, U+019B, U+019C, U+01B5, + U+01B6, U+0295, U+0296, U+029B, U+02A2, U+0472, U+0473, U+2114, + U+2119. + + * sfd/FreeSerifItalic.sfd - minor cleanup in the superscript range + (U+2070-2079). + + * sfd/FreeSansBold.sfd - added subscripts and superscripts + (U+2070-208F), completed fractions (U+2152-215F) and Roman + numerals (U+2160-217F). + + * sfd/FreeSerifBold.sfd - added U+018B, U+018E, U+018F, U+0191, + U+019D, U+01A7, U+01A8, U+01AE, U+0253, U+0266, U+0267, U+026A, + U+0271-0273, U+0283, U+0285. + +2005-10-26 Primoz Peterlin + + * sfd/FreeSans.sfd - added "above" anchors to selected Cyrillic + characters. Added U+0294, U+02A1. + + * sfd/FreeMono.sfd - added U+2011, U+2012, U+203B, U+204A, U+2071, + U+2129, U+2232, U+2233. Changed and/or corrected U+2106, U+211E, + U+2126, U+2127, U+2153-215F, U+2202. + + * sfd/FreeMono.sfd - a try to imitate Denis' work on adding + anchors by adding "above" anchor to a couple of basic Latin + characters. + + * sfd/FreeSansBold.sfd - added U+0278, U+0298. Cleaned up outlines + of most Greek letters. + + * sfd/FreeSansBold.sfd - Added U+2010-2012, U+2015, U+2032, + U+203C, U+2047-2049. + + * sfd/FreeSans.sfd - Added U+01C0-01C2, U+0276, U+0292, + U+0298. Changed U+0251, U+0294, U+02A1. + +2005-10-25 Primoz Peterlin + + * sfd/FreeSerifItalic.sfd - added U+00A0, U+00AD, U+2010-2012, + U+2015, U+2126, U+2127, U+2153-215E, U+2160-217F, U+2190-2193, + U+2669-266F. FreeSerifItalic is now MES-1 compliant. + + * sfd/FreeSerif.sfd - added U+0191, U+019D, U+01AE, U+027E, + U+027F, U+0283, U+0285. + + * sfd/FreeSerif.sfd - added U+019E, U+01AD, U+01B8, U+01B9, + U+0253, U+0256, U+0257, U+025C, U+0260, U+0266, U+0267, U+0269, + U+026D, U+0271-0273, U+0279-027D. + + * sfd/FreeSerifBoldItalic.sfd - added U+00A0, U+00AD, U+2010-2012, + U+2015, U+2032-2034, U+203C, U+2047-204A, U+2074, U+2081-2084, + U+2126, U+2153, U+2154, U+215F, U+2215. Corrected positions of + diacritics on U+0200-0217. + + * sfd/FreeSansOblique.sfd, sfd/FreeSans.sfd, sfd/FreeSansBold.sfd, + sfd/FreeSansBoldOblique.sfd, sfd/FreeMonoBoldOblique.sfd, + sfd/FreeMonoBold.sfd, sfd/FreeSerifItalic.sfd, + sfd/FreeSerifBold.sfd sfd/FreeSerifBoldItalic.sfd - brought in + sync with Valek Filipov's urw-fonts-1.0.7pre41. + + * sfd/FreeSansOblique.sfd - added U+00A0, U+2011-2012, U+2015, + U+2070, U+2071, U+2074-2079, U+2080-2089, U+2126, U+2153-215F, + U+2190-2195, U+2215, U+266A. FreeSansOblique is now MES-1 + compliant. + +2005-10-24 Denis Jacquerye + + * sfd/FreeSans.sfd, sfd/FreeSansBold.sfd, + sfd/FreeSansOblique.sfd, sfd/FreeSansBoldOblique.sfd - added + ccmp for i and j to be substituted with dotless i or j when + followed by above diacritic + +2005-10-24 Primoz Peterlin + + * sfd/FreeSans.sfd - added U+2011, U+2012, U+2015. FreeSans is now + MES-1 conformant. + +2005-10-23 Denis Jacquerye + + * sfd/FreeSans.sfd - added above, below, abovemk and belowmk + anchors for diacritics placement to many Basic Latin characters, + some Latin Extented A and B, and some IPA characters; fixed a + couple of precomposed characters to have diacritics at the same + height as similar characters. + +2005-10-21 Primoz Peterlin + + * sfd/FreeSerif.sfd - added U+02B9, U+02BA, U+02CD, U+2017, + U+2036, U+2037, U+203C, U+203E, U+2047-204A. + +2005-10-20 Primoz Peterlin + + * sfd/FreeSerifBold.sfd - added U+0182, U+0189, U+0192, U+019F, + U+01A9, U+01B7, U+01C4-01CC, U+01E0-1E2, U+01F0-01F3, U+F6BE. + Corrected position of diacritics on U+0200-0217. + + * sfd/FreeSerif.sfd - added U+00A0, U+00AD, U+0182, U+0189, + U+018B, U+018E, U+018F, U+0192, U+019F, U+01A9, U+01B1, U+01B7, + U+01DD, U+2010-2013, U+2015. FreeSerif is now MES-1 conformant. + +2005-10-19 Denis Jacquerye + + * sfd/FreeSerif.sfd - added U+0268, U+026A, U+0289, U+0292; and + anchor "above" to more base glyphs. + + * sfd/FreeSerifBold.sfd, sfd/FreeSerifItalic.sfd, + sfd/FreeSerifBoldItalic.sfd - added U+0250-0252, U+0258-0259, + U+0261, U+0268, U+026A, U+0279, U+0289 + + * sfd/FreeSerifBold.sfd - added anchor "above" to marks + U+0300-0314, and to base glyphs (vowels). + +2005-10-18 Denis Jacquerye + + * sfd/FreeSerif.sfd - added anchor "above" to marks U+0300-0314, + and bases vowel of the U+0041-007A range, U+00E6, U+0186, U+0190, + U+0254 and U+025B; fixed Latin-1 Supplement block accented glyphs + to use references. + +2005-10-17 Primoz Peterlin + + * sfd/FreeSansBold.sfd - added U+01B7, U+01B8, U+0275. + +2005-10-16 Denis Jacquerye + * sfd/FreeSans.sfd, sfd/FreeSansOblique.sfd - added some Latin + Extended-B African letters: U+0181, U+018A, U+0197-0198, U+01A4, + U+01AC, U+01B1, U+01B3-01B4; + + * sfd/FreeSansBold.sfd, sfd/FreeSansBoldOblique.sfd - added Latin + Extended-B U+0187, 018E-018F, U+0191, U+0193, U+0197-0199, + U+019D-019F, U+01AB-01AE; correcting width of non-space + Combining Diacrtical Marks; added more glyphs to IPA Extensions + to match non Bold + + * sfd/FreeSansBoldOblique.sfd - added many accented glyphs to + Latin Extended-B + +2005-10-15 Denis Jacquerye + * sfd/FreeSans.sfd, sfd/FreeSansOblique.sfd - added IPA Extensions + U+0262,U+0274,U+0280-0281, U+0299, U+029F, and Spacing Modifier + Letters U+02C9-02CB; fixed U+0287,029E height to baseline; added + stroke to U+0268 + + * sfd/FreeSansOblique.sfd - fixed skew on U+027F + + * sfd/FreeSansBold.sfd, sfd/FreeSansBoldOblique.sfd - added to Latin + Extended-B U+01A7-01A8, IPA Extensions U+0251-0253, U+0256-0257, + U+0261, U+0265-026A, U+026F-0273, U+0289, U+028C-028E + + * sfd/FreeSansBoldOblique.sfd - added to Latin extended-B U+0189, + U+01A8, U+01B1, U+0283, U+02C9 and Spacing Modifiers U+02C9-02CB + +2005-10-14 Primoz Peterlin + + * sfd/FreeSansBold.sfd - Added a couple of composite glyphs, + mostly in the IPA and Latin Extended B ranges. + +2005-10-13 Denis Jacquerye + + * FreeSans.sfd - removed overlap and simplified U+0187, 0191, + 0193, 01A5, 01AE, 0260, 0271, 0272, 0273, 027B; fixed diacritics + placement on U+0200-0217; fixed glyph for U+0283 to correct esh + without stroke; added U+025F and fixed U+025F from it; fixed + height of glyph at U+0285; arranged U+027E,027F to make more + distinguishable from U+0072. + + * FreeSansOblique.sfd - added the corrected or new glyphs from + FreeSans; diacritics on U+200-0217 will need height readjustements. + + * FreeSansBold.sfd, FreeSansBoldOblique.sfd - added U+0186, 0190, + 0250, 0254, 0258, 0259, 025B, 025C + +2005-10-13 Primoz Peterlin + + * sfd/FreeSerif.sfd - Minor changes: U+22A2, U+22A3, U+22A6, U+23AE. + Added U+0250, U+0251, U+0258, U+0259, U+0275. + + * sfd/FreeSerifItalic.sfd - Added glyphs U+222B-U+222F, U+2320, + U+2321. Fixed diacritics on U+0200-U+0217. + +2005-10-12 Denis Jacquerye + + * sfd/FreeSerif.sfd - Corrected diacritics position on + U+01D5-01D9,01DB,01EA-01ED,0200-0217 and U+022A. + + * sfd/FreeSerif.sfd, sfd/FreeSerifBold.sfd, sfd/FreeSerifItalic.sfd, + sfd/FreeSerifBoldItalic.sfd - added U+0186,0190,0254 and U+025B. + +2005-10-11 Primoz Peterlin + + * sfd/FreeSerif.sfd - Fixed bug #13399 (glyphs for U+0360 and + U+0361 were swapped). + + * sfd/FreeSerif.sfd - Attempt to correct bug #13370: INTEGRAL + EXTENSION does not align with TOP/BOTTOM HALF INTEGRAL; added + glyph U+23AE. + +2005-05-16 Primoz Peterlin + + * sfd/FreeMono.sfd - Corrected shapes for Cross of Lorraine and + Cross of Jerusalem. + +2005-04-07 Primoz Peterlin + + * sfd/FreeSansBold.sfd - Added some combining accents, just to + test the a version of FontForge. + +2003-12-05 Primoz Peterlin + + * sfd/FreeMono.sfd - Some composite Latin characters rebuilt, as + they had accents 600 points to the left due to changes on October + 2. Some other minor changes in the mathematics area. + +2003-10-08 Primoz Peterlin + + * sfd/FreeMonoOblique.sfd, sfd/FreeSerifBoldItalic.sfd, + FreeSerifItalic.sfd - applied Josef Segur's corrections from + Oct. 5. + +2003-10-02 Primoz Peterlin + + * sfd/FreeSerif.sfd - Abbas Izad's contributed Arabic/Farsi + characters added. + + * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, + sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd, + sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, + sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd, + sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd, + sfd/FreeSerifBoldItalic.sfd - Combining characters (U+0300 - + U+036F) moved left, so that they have negative horizontal values + and zero advance width. + +2003-09-15 Primoz Peterlin + + * sfd/FreeSerifBold.sfd, sfd/FreeSerifItalic.sfd - Started working + on super- and subscripts. + +2003-09-12 Primoz Peterlin + + * sfd/FreeSans.sfd, sfd/FreeSerif.sfd - Added some missing + Hiragana and Katakana characters. + + * sfd/FreeSansBold.sfd - Cleared background characters in Latin + Extended-A. Added some automatically constructed characters in + Latin Extended-B. Started with superscripts and subscripts. + + * sfd/FreeSans.sfd - Subscript numerals (U+2080-U+2089) completed. + +2003-05-19 Primoz Peterlin + + * sfd/FreeSerif.sfd - Thai characters po pla and bo baimai + swapped; Thai character fongman corrected; all courtesy Theppitak + Karoonboonyanan. + +2003-05-17 Panayotis Katsaloulis + + * sfd/FreeSerif.sfd, sfd/FreeSerifItalic.sfd, + sfd/FreeSerifBold.sfd, sfd/FreeSerifBoldItalic.sfd - Full support + of all ancient greek glyphs + +2003-05-15 Primoz Peterlin + + * tools/KerningNumerals.pl - A Perl script for moving kerning + information from ASCII numerals (U+0030...) to characters in the + Adobe corporate use area (U+F6xx). + + * sfd/FreeSansBold.sfd, sfd/FreeSansOblique.sfd, + sfd/FreeSansBoldOblique.sfd - Created kerned numerals in the Adobe + corporate use area (U+F6xx) and moved kerning information from + ASCII numerals to the kerned numerals. + +2003-05-14 Primoz Peterlin + + * sfd/FreeSans.sfd - First approximation of super- and subscript + numerals and vulgar fractions. + + * sfd/FreeSerif.sfd - Super- and subscript numerals complete, + vulgar fractions completed and redone as references rather than + outlines. + +2003-05-12 Primoz Peterlin + + * sfd/FreeSerif.sfd - Clean-up of the Cyrillic letters added on + March 27; super- and subscripts, vulgar fractions. + +2003-05-09 Primoz Peterlin + + * sfd/FreeMonoBold.sfd - Added a couple of characters to + the Latin Extended-B area and the IPA extensions area. + +2003-05-08 Primoz Peterlin + + * sfd/FreeSerifBoldItalic.sfd - Added a couple of characters to + the Latin Extended-B area. + + * sfd/FreeSerif.sfd, sfd/FreeSerifItalic.sfd, + sfd/FreeSerifBold.sfd, sfd/FreeSerifBoldItalic.sfd - ASCII + numerals now monospaced; kerned numerals moved to Adobe corporate + use area + (U+F6xx). + +2003-05-07 Primoz Peterlin + + * sfd/FreeSerif.sfd - Roman numerals now more complete. + + * sfd/FreeSansOblique.sfd, sfd/FreeSansBoldOblique.sfd - Accented + characters added in the Latin Extended-B area. + + * sfd/FreeSans.sfd - Greek accents added in the Greek Extended + area, characters added in the Latin Extended-B area, Roman + numerals added. + + * sfd/FreeMonoOblique.sfd - Kerning pairs removed (what were they + doing in a monospaced font, anyway?). + + * sfd/FreeMonoBoldOblique.sfd - Additions in Latin Extended-B and + Basic Greek. + + * sfd/FreeMono.sfd, sfd/FreeMonoBold.sfd, sfd/FreeMonoOblique.sfd, + sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd, + sfd/FreeSansBold.sfd, sfd/FreeSansOblique.sfd, + sfd/FreeSansBoldOblique.sfd - Major cleanup (fixed widths, open + paths, path directions (clockwise/counter-clockwise), points + rounded to integer values; outlines simplified etc.) + +2003-05-06 Primoz Peterlin + + * tools/OS2UnicodeRange - A simple script to display OS/2 Unicode + range table in TrueType fonts. + + * sfd/FreeSans.sfd, sfd/FreeSansBold.sfd - ASCII numerals now + monospaced; kerned numerals moved to Adobe corporate use area + (U+F6xx). FreeSans is done, FreeSansBold half-way. + + * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, + sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd, + sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, + sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd, + sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd, + sfd/FreeSerifBoldItalic.sfd - Added 2003 in copyright info. + +2003-03-27 Primoz Peterlin + + * sfd/FreeSerif.sfd - Cyrillic and Cyrillic Supplement blocks + brought to conformance with Unicode 3.2, courtesy Daniel Shurovich + Chirkov. + +2003-03-19 Primoz Peterlin + + * sfd/FreeSans.sfd, sfd/FreeSansOblique.sfd - somewhat wider + germandbls (U+00DF), due to complaints by Walter Schmidt. + +2003-03-18 Primoz Peterlin + + * sfd/FreeSans.sfd - Added Sinhala glyphs from the Tipitaka + project , recoded to Unicode by Noah Levitt. + +2003-02-19 Primoz Peterlin + + * sfd/FreeSans.sfd - Minor changes on mathematical operators. + +2003-02-18 Primoz Peterlin + + * sfd/FreeMono.sfd - minor cleanup of glyph backgrounds; changed + integral signs (U+222B - U+2230) + +2003-02-05 Primoz Peterlin + + * sfd/FreeSans.sfd - added a couple of glyphs in the IPA and + African Latin ranges. + +2003-01-30 Primoz Peterlin + + * sfd/FreeSans.sfd, sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, + sfd/FreeSansBoldOblique.sfd, sfd/FreeMonoBold.sfd, + sfd/FreeMonoBoldOblique.sfd - Corrected Maltese Hbar (U+0126) + and/or hbar (U+0127). + +2003-01-28 Primoz Peterlin + + * sfd/FreeSerifItalic.sfd - Corrected Maltese hbar (U+0127). + +2002-12-18 Primoz Peterlin + + * tools/ConvertFont - PfaEdit script for converting SFD files to + TrueType fonts. + + * sfd/FreeSans.sfd - Added Tamil and Kannada glyphs from the + Akruti Indic fonts. + +2002-12-17 Primoz Peterlin + + * sfd/FreeSans.sfd - Added Devanagari and Gujarati glyphs from the + Akruti Indic fonts. + + * www/index.html - Added information on Rogier van Dalen's tools. + + * AUTHORS - Added M.S. Sridhar. + + * CREDITS - Correct spelling of Culmus project. Added M.S. Sridhar. + +2002-12-06 Primoz Peterlin + + * sfd/FreeMono.sfd - Added Braille glyphs, courtesy Vyacheslav + Dikonov. + + * sfd/FreeSans.sfd - Added Unicode Syriac glyphs, courtesy + Vyacheslav Dikonov. + +2002-10-11 Primoz Peterlin + + * www/index.html - Added information on the availability of the + Debian GNU/Linux package. + + * sfd/FreeSerif.sfd, sfd/FreeSans.sfd - added some kern pairs + beyond Latin-1 area. + + * sfd/FreeSerif.sfd, sfd/FreeSerifItalic.sfd, + sfd/FreeSerifBold.sfd, sfd/FreeSerifBoldItalic.sfd - re-introduced + all the emtpy glyph slots (changes from Sep 23 made PfaEdit + crash). + +2002-09-23 Primoz Peterlin + + * sfd/FreeSerif.sfd, sfd/FreeSerifItalic.sfd, + sfd/FreeSerifBold.sfd, sfd/FreeSerifBoldItalic.sfd - imported + kerning information from the URW++ AFM files + +2002-09-11 Primoz Peterlin + + * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, + sfd/FreeMonoOblique.sfd - updated Hebrew parts to comply with + Culmus v0.6. + + * sfd/FreeSans.sfd, sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, + sfd/FreeSansOblique.sfd - Added Danilo Segan's Serbian Cyrillic + glyphs; updated Hebrew parts to comply with Culmus v0.6. + +2002-09-09 Primoz Peterlin + + * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, + sfd/FreeMonoOblique.sfd, sfd/FreeSans.sfd, + sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, + sfd/FreeSansOblique.sfd - Updated Cyrillic part to match + Filippov's 1.0.7pre14 + + * sfd/FreeSansOblique.sfd - added Sam Stepanyan's Armenian glyphs + from FreeSans (skewed for 12 degrees). + +2002-09-06 Primoz Peterlin + + * sfd/FreeSans.sfd, sfd/FreeSansOblique.sfd, + sfd/FreeSansBold.sfd, sfd/FreeSansOblique.sfd - Added Maxim + Iorsh's Hebrew characters. + +2002-08-29 Primoz Peterlin + + * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, + sfd/FreeMonoBold.sfd, sfd/FreeMonoOblique.sfd - Added Maxim + Iorsh's Hebrew characters. + + * AUTHORS, CREDITS - Added Maxim Iorsh as author. + +2002-08-28 Primoz Peterlin + + * www/index.html - Added information of Microsoft's withdrawal of + freely available Unicode TrueType fonts + + * www/resources.html - Added link to Maxim Iorsh's Culmus project. + +2002-07-26 Primoz Peterlin + + * sfd/FreeMono.sfd - Added a couple of characters (Arrows area). + +2002-06-11 Primoz Peterlin + + * sfd/FreeMono.sfd - Applied Michalis Kabrianis's patch concerning + perispomeni in Greek politoniko. + +2002-05-23 Primoz Peterlin + + * sfd/FreeMono.sfd - Applied Michalis Kabrianis's patch concerning + psili in Greek politoniko. Also added two working variants of + chars in the IPA range. + +2002-05-15 Primoz Peterlin + + * sfd/FreeSans.sfd, sfd/FreeSansBold.sfd, sfd/FreeSerif.sfd, + sfd/FreeSerifBold.sfd - Deleted explicit ".notdef" character with + no contours. + +2002-05-14 Primoz Peterlin + + * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, + sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd, + sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, + sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd, + sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd, + sfd/FreeSerifBoldItalic.sfd - The new version of PfaEdit saves + correctly formed Panose and LineGap lines. + + * sfd/FreeSansBoldOblique.sfd - Filled-in the missing TTFWidth and + TTFWeight values. + +2002-05-09 Primoz Peterlin + + * sfd/FreeSans.sfd - Added diacritics to the Spacing Modifier + Letters and Combining Diacritical Marks areas. Added composed + glyphs to the Latin Extended-B area. + +2002-05-07 Primoz Peterlin + + * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, + sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd, + sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, + sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd, + sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd, + sfd/FreeSerifBoldItalic.sfd - Updated Panose information with data + provided by Josef W. Segur. Updated TTF headers with English and + Slovenian text. + +2002-04-30 Primoz Peterlin + + * sfd/FreeMonoBold.sfd - Working on Greek small letters. Several + minor changes (lower carons etc.) + +2002-04-29 Primoz Peterlin + + * FreeMonoBoldOblique.sfd - Started adding Greek. + + * sfd/FreeMonoBold.sfd - Added glyphs in the Geometrical Shapes + and Miscellaneous Symbols area. Harmonizing Greek with Latin. Done + with capitals. + + * sfd/FreeMono.sfd - Deleted the explicit .notdef character. Added + one glyph to the Geometrical Shapes area, which is now completed; + added three glyphs to the Miscellaneous Symbols area. Harmonizing + Greek with Latin. Done with the capitals. + +2002-04-26 Primoz Peterlin + + * sfd/FreeSans.sfd - Adjusted accent positions on several glyphs + in the Latin Extended-A area. + +2002-04-25 Primoz Peterlin + + * sfd/FreeMonoBold.sfd - Box Drawing area completed. Added a + couple of glyphs in the Geometrical Shapes area. + + * sfd/FreeMono.sfd - Small corrections in the Box Drawing area. + +2002-04-24 Primoz Peterlin + + * sfd/FreeMono.sfd - Box Drawing area completed. + +2002-04-23 Primoz Peterlin + + * tools/WGL4.lst - corrected. + + * sfd/FreeMono.sfd, sfd/FreeMonoBold.sfd - Working on Box Drawing + area. + +2002-04-22 Primoz Peterlin + + * sfd/FreeMono.sfd, sfd/FreeMonoBold.sfd - Working on Latin + Extended-B and Greek. + +2002-04-19 Primoz Peterlin + + * sfd/FreeSerif.sfd - Somewhat cleaner chess figures. + + * tools/MES-2.txt, tools/MES-2.lst - Corrected list (it is not + 203C-203E, it is 203C and 203E). + + * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, + sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd, + sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, + sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd, + sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd, + sfd/FreeSerifBoldItalic.sfd - Changed "Family Name" from Free to + FreeSerif, FreeSans and FreeMono, as appropriate. Changed Font + Modifiers from MonoBold etc. to Bold, Italic, Oblique, BoldOblique + and BoldItalic. + +2002-04-18 Primoz Peterlin + + * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, + sfd/FreeMonoBoldOblique.sfd - Corrected metrics; now all character + widths are set to 600. + +2002-04-17 Primoz Peterlin + + * sfd/FreeSerif.sfd - Corrected glyphs in the Box Drawing area and + Block Elements area, which should extend through the ascender *and + descender* height. + + * sfd/FreeMonoBold.sfd - Continued working on harmonizing Greek + letters with Latin and Cyrillic. + + * sfd/FreeMonoBold.sfd - Added some box drawing characters. + +2002-04-16 Primoz Peterlin + + * www/design-notes.html - Updated notes on stroke width for + symbols in Free Mono Bold. + + * sfd/FreeMono.sfd - Added a handful of characters in the + Miscellaneous Symbols area. + + * sfd/FreeMonoBoldOblique.sfd - Added subscripts, superscripts and + vulgar fractions. + + * sfd/FreeMonoBold.sfd - Started harmonizing Greek letters with + Latin and Cyrillic. + + * sfd/FreeMonoBold.sfd - Added subscripts, superscripts and vulgar + fractions. + +2002-04-15 Primoz Peterlin + + * www/design-notes.html - Updated notes on super-/subscripts in + Free Mono Bold. Separate subsections for Free Mono regular and + Free Mono Bold. + +2002-04-12 Primoz Peterlin + + * sfd/FreeSerif.sfd - Added Ethiopian glyphs, converted from the + Metafont sources from TGI, Universität Hamburg (authors Berhanu + Beyene, Prof. Dr. Manfred Kudlek, Olaf Kummer, and Jochen + Metzinger) using Szabo's TeXtrace and retouched using + PfaEdit. Ethiopian metafonts are released under GNU GPL, + . + + * sfd/FreeMonoBold.sfd - Added 40 characters, mostly in the Latin + Extended-B and IPA Extensions areas. + +2002-04-11 Primoz Peterlin + + * sfd/FreeMono.sfd - Added a handful of characters in the Latin + Extended-B, IPA Extensions, Currency Symbols and Miscellaneous + Symbols areas. + +2002-04-09 Primoz Peterlin + + * sfd/FreeMono.sfd - Correcting accent positioning in the Extended + Greek area; adding a couple of characters here and there. Still 20 + characters short of MES-2 conformance. + +2002-04-08 Primoz Peterlin + + * sfd/FreeMono.sfd - Added some characters in the Arrows area; + more or less completed Extended Greek area (accents still need to + be fine-tuned). + +2002-04-05 Primoz Peterlin + + * sfd/FreeMono.sfd - Modern non-Russian Cyrilic mostly completed. + + * sfd/FreeMonoOblique.sfd - Synchronized with FreeMono. + + * sfd/FreeSerif.sfd - Added Thomas Ridgeway's Tamil characters + (converted from Metafont and edited somehwat). + +2002-04-04 Primoz Peterlin + + * sfd/FreeMonoOblique.sfd - Armenian letters added. + + * sfd/FreeMonoBold.sfd - Serbian Cyrillic letters dje, tshe, lje + and nje corrected. + + * sfd/FreeMono.sfd - Serbian Cyrillic letters dje and tshe + corrected. Some other non-Russian Cyrillic letters modified and + "welded together". + +2002-04-03 Primoz Peterlin + + * sfd/FreeMono.sfd - Added more or less complete Armenian + area. The glyphs are a tidied-up version based on the Armenian + Courier on the . Now we have + 1673 characters. + +2002-03-28 Primoz Peterlin + + * sfd/FreeMono.sfd - Added some mathematical symbols. + +2002-03-26 Primoz Peterlin + + * sfd/FreeSans.sfd - took H.S. Pannu's Gurmukhi from FreeSerif. It + actually fits to FreeSans much better. It seems I'll have to look + for another Gurmukhi font with modulated stroke for FreeSerif. + + * sfd/FreeSerifItalic.sfd - replaced existing Hebrew glyphs by + those from FreeSerif (slanted for 15.5 degrees). + + * sfd/FreeSerif.sfd - Added dotted Hebrew letters. Changed barred H. + + * sfd/FreeMono.sfd - Completed vulgar fractions; minor changes in + Greek; added some mathematical operators. + + * sfd/FreeMonoBold.sfd - added 12 characters to Latin Extended-B + and IPA Extensions areas (total 984). + +2002-03-25 Primoz Peterlin + + * sfd/FreeMonoBold.sfd - started adding Latin Extended-B and IPA + Extensions. + + * sfd/FreeMono.sfd - Minor cosmetic changes; cleaning up Greek + (removing redundant control points), added some non-European + Cyrillic glyphs as a test. + +2002-03-22 Primoz Peterlin + + * sfd/FreeMono.sfd - Some minor modifications; letters in Latin + Extended-B area "welded" together. + +2002-03-20 Primoz Peterlin + + * www/index.html - finally linked the resources and design notes + pages. + + * www/design-notes.html - added scaling information for super- and + subscript numerals in FreeMono. + +2002-03-19 Primoz Peterlin + + * sfd/FreeMono.sfd - the Latin Extended-B and IPA Extension area + characters moved from FreeMono and skewed for 12 degrees. + +2002-03-18 Primoz Peterlin + + * sfd/FreeMono.sfd - added a dozen or two of new characters, in + particular in the Latin Extended-B and IPA Extension area. + +2002-03-15 Primoz Peterlin + + * sfd/FreeMono.sfd - added a dozen of two of new characters, in + particular in the IPA Extension area. + + * www/design-notes.html - Corrected data for x-height in FreeMono; + information on constructing small caps. + +2002-03-14 Primoz Peterlin + + * sfd/FreeMono.sfd - added three smiley characters to the + Miscallaneous Symbols area. + +2002-03-10 Primoz Peterlin + + * sfd/FreeSerif.sfd - Anshuman Pandey has only converted Gurmukhi + from TrueType to Metafont; the original author of Gurkmukhi font + is Hardip Singh Pannu . + Got the permission from him to include the Gurmukhi glyph set. + +2002-03-08 Primoz Peterlin + + * sfd/FreeSerif.sfd - Added some more glyphs in the Mathematical + Symbols area to a total number of 3374. + +2002-03-06 Primoz Peterlin + + * sfd/FreeSerif.sfd - Added a basic Gurmukhi set. + + * www/design-notes.html - started a page on design notes + + * sfd/FreeMono.sfd - realized that glyphs in the Box Drawing area + and Block Elements area should extend through the ascender *and + descender* height, and corrected it. + + * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd - added some musical + glyphs, linking "no-break space" to space, "soft hyphen" to + hyphen-minus etc. + +2002-03-05 Primoz Peterlin + + * tools/WGL4.lst - Added Windows Glyph List 4.0 + + * tools/LigatureList.pl - Wrote a Perl script, which lists the + GSUB list (ligature list) of a OpenType font. + + * sfd/FreeSerifBold.sfd, sfd/FreeSerifBoldItalic.sfd, + sfd/FreeSerifItalic.sfd - auxilliary Hebrew glyphs added. They are + too light compared with Latin and will be substituted with better + ones. + +2002-03-04 Primoz Peterlin + + * sfd/FreeSerif.sfd - Added some more glyphs to the Mathematical + Operators area (page 0x22). + + * sfd/FreeSerif.sfd - Incomplete and fragmentary support for + Devanagari, originating from Harsh Kumar's Shusha fonts was + replaced by Frans Velthuis' Devanagari metafont, now maintained by + Anshuman Pandey and available under + GPL. Until I figure out how to provide glyph substitution table in + OpenType, only the Unicode part is there. + +2002-02-28 Primoz Peterlin + + * ChangeLog file created + + * sfd/FreeSerif.sfd - Added some Telugu glyphs to page 0x0C, + courtesy Prasad A. Chodavarapu + + * sfd/FreeSerif.sfd - Added some glyphs to the Miscellaneous + Symbols page (0x26). + +2002-02-26 Primoz Peterlin + + * mailing lists freefont-announce and freefont-bugs created + +2002-02-25 Primoz Peterlin + + * sfd/FreeSerif.sfd - Added a couple of glyphs in Mathematics + Operators area. + + * sfd/FreeMono.sfd + - Added some more glyphs, in particular in the Mathematical + Operators section. + - Changed FamilyName to Free, FontName to FreeMono, and Full name + to "Free Monospaced". + +2002-02-20 Primoz Peterlin + + * sfd/ directory added containing FreeSerif, FreeSans and FreeMono + families. + + * tools/ directory added containing lists with characters required + for MES (Multilinguag European Subset) compliance. + + * tools/mes-list-expand.pl created - a Perl script for expanding MES + ranges into simple one-char-per-line format + + * tools/CheckConformance.pl created - a Perl script for checking + conformance of a font file with a given coded character set + + * homepage created + +2002-02-19 Primoz Peterlin + + * freefont (Free UCS Scalable Fonts) project approved on + savannah.gnu.org: + --- /dev/null +++ b/tcpdf/fonts/freefont-20100919/INSTALL @@ -1,1 +1,87 @@ + Installing GNU FreeFont + ======================= +GNU FreeFont can be used in any modern operating system. + +This document explains how to install FreeFont on some common systems. + +UNIX/GNU/Linux/BSD Systems +-------------------------- + +FreeFont works with any system using the free font rasterizer FreeType +. + +* Debian GNU/Linux + +Users of Debian GNU/Linux system will probably want to use the Debian package, +available from the Debian site, + + , + +or any of its mirrors. + +Install them by issuing the command + apt-get install ttf-freefont + + +* KDE local installation + +Users of KDE can install .ttf files on a per-user basis using the KDE +Control Center module "kcmfontinst", which may appear in the menu as + + Settings -> System Administration -> Font Installer + +This is especially helpful for developers and testers. + + +* Generic X-windows + + 1) Fetch the freefont-ttf.tar.gz package with Free UCS outline fonts + in the TrueType format. + + 2) Unpack TrueType fonts into a suitable directory, + e.g. /usr/local/share/fonts/default/TrueType/ + + 3) If you have chosen any other directory, make sure the directory you + used to install the fonts is listed in the path searched by the X + Font Server by editing the config file in /etc/X11/. + + In some systems, you list the directory in the item "catalogue=" + in the file /etc/X11/fs/config. + + 4) Run ttmkfdir in the directory where you unpacked the fonts. + + +Windows 95/98/NT/2000/XP; Vista +------------------------------- + +Note that in at least Vista, XP and 2000, the OpenType versions perform much +better than, and are recommended over, the TrueType ones. + +* Vista: + 1) From the Start menu, open Control Panels + 2) Drag-n-drop font files onto Fonts control panel + You may get a dialog saying + "Windows needs your permission to continue" + a) Click Continue + +* 95/98/NT: + The font installation is similar to Vista. + + In order to use OpenType, users of Windows 95, 98 and NT 4.0 can + install Adobe's 'Type Manager Light'. It is available for download + without cost from Adobe's web site. + + Otherwise, use the TrueType versions. + +Mac OS X +-------- + +Installing on Mac OS X consists of moving the .ttf files to either + /Library/Fonts/ or ~/Library/Fonts/ +depending on whether they should be available to all users on your system +or just to yourself. + +-------------------------------------------------------------------------- +$Id: INSTALL,v 1.7 2008/12/26 12:33:31 Stevan_White Exp $ + --- /dev/null +++ b/tcpdf/fonts/freefont-20100919/README @@ -1,1 +1,109 @@ +-*-text-*- + GNU FreeFont +The GNU FreeFont project aims to provide a useful set of free scalable +(i.e., OpenType) fonts covering as much as possible of the ISO 10646/Unicode +UCS (Universal Character Set). + +Statement of Purpose +-------------------- + +The practical reason for putting glyphs together in a single font face is +to conveniently mix symbols and characters from different writing systems, +without having to switch fonts. + +Coverage +-------- + +FreeFont covers the following character sets + +* ISO 8859 parts 1-15 +* CEN MES-3 European Unicode Subset + http://www.evertype.com/standards/iso10646/pdf/cwa13873.pdf +* IBM/Microsoft code pages 437, 850, 852, 1250, 1252 and more +* Microsoft/Adobe Windows Glyph List 4 (WGL4) + http://www.microsoft.com/typography/otspec/WGL4.htm +* KOI8-R and KOI8-RU +* DEC VT100 graphics symbols +* International Phonetic Alphabet +* Arabic, Hebrew, Armenian, Georgian, Ethiopian and Thai alphabets, + including Arabic presentation forms A/B +* mathematical symbols, including the whole TeX repertoire of symbols +* APL symbols + etc. + +Editing +------- + +The free outline font editor, George Williams's FontForge + is used for editing the fonts. + +Design Issues +------------- + +Which font shapes should be made? Historical style terms like Renaissance +or Baroque letterforms cannot be applied beyond Latin/Cyrillic/Greek +scripts to any greater extent than Kufi or Nashki can be applied beyond +Arabic script; "italic" is really only meaningful for Latin letters. + +However, most modern writing systems have typographic formulations for +contrasting uniform and modulated character stroke widths, and have some +history with "oblique", faces. Since the advent of the typewriter, most +have developed a typographic style with uniform-width characters. + +Accordingly, the FreeFont family has one monospaced - FreeMono - and two +proportional faces (one with uniform stroke - FreeSans - and one with +modulated stroke - FreeSerif). + +To make text from different writing systems look good side-by-side, each +FreeFont face is meant to contain characters of similar style and weight. + +Licensing +--------- + +Free UCS scalable fonts is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License as published +by the Free Software Foundation; either version 3 of the License, or +(at your option) any later version. + +The fonts are distributed in the hope that they will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +As a special exception, if you create a document which uses this font, and +embed this font or unaltered portions of this font into the document, this +font does not by itself cause the resulting document to be covered by the +GNU General Public License. This exception does not however invalidate any +other reasons why the document might be covered by the GNU General Public +License. If you modify this font, you may extend this exception to your +version of the font, but you are not obligated to do so. If you do not +wish to do so, delete this exception statement from your version. + + +Files and their suffixes +------------------------ + +The files with .sfd (Spline Font Database) are in FontForge's native format. +Please use these if you plan to modify the font files. + +TrueType fonts for immediate consumption are the files with the .ttf +(TrueType Font) suffix. These are ready to use in Xwindows based +systems using FreeType, on Mac OS, and on older Windows systems. + +OpenType fonts (with suffix .otf) are for use in Windows Vista. +Note that although they can be installed on Linux, but many applications +in Linux still don't support them. + + +-------------------------------------------------------------------------- +Primoz Peterlin, +Steve White + +Free UCS scalable fonts: http://savannah.gnu.org/projects/freefont/ +$Id: README,v 1.7 2009/01/13 08:43:23 Stevan_White Exp $ + --- /dev/null +++ b/tcpdf/fonts/freemono.php @@ -1,1 +1,370 @@ - +800,'Descent'=>-200,'CapHeight'=>40,'Flags'=>32,'FontBBox'=>'[-793 -200 699 800]','ItalicAngle'=>0,'StemV'=>70,'MissingWidth'=>600); +$up=-125; +$ut=50; +$dw=600; +$cw=array( +32=>600,33=>600,34=>600,35=>600,36=>600,37=>600,38=>600,39=>600,40=>600,41=>600, +42=>600,43=>600,44=>600,45=>600,46=>600,47=>600,48=>600,49=>600,50=>600,51=>600, +52=>600,53=>600,54=>600,55=>600,56=>600,57=>600,58=>600,59=>600,60=>600,61=>600, +62=>600,63=>600,64=>600,65=>600,66=>600,67=>600,68=>600,69=>600,70=>600,71=>600, +72=>600,73=>600,74=>600,75=>600,76=>600,77=>600,78=>600,79=>600,80=>600,81=>600, +82=>600,83=>600,84=>600,85=>600,86=>600,87=>600,88=>600,89=>600,90=>600,91=>600, +92=>600,93=>600,94=>600,95=>600,96=>600,97=>600,98=>600,99=>600,100=>600,101=>600, +102=>600,103=>600,104=>600,105=>600,106=>600,107=>600,108=>600,109=>600,110=>600,111=>600, +112=>600,113=>600,114=>600,115=>600,116=>600,117=>600,118=>600,119=>600,120=>600,121=>600, +122=>600,123=>600,124=>600,125=>600,126=>600,8364=>600,8218=>600,402=>600,8222=>600,8230=>600, +8224=>600,8225=>600,710=>600,8240=>600,352=>600,8249=>600,338=>600,381=>600,8216=>600,8217=>600, +8220=>600,8221=>600,8226=>600,8211=>600,8212=>600,732=>600,8482=>600,353=>600,8250=>600,339=>600, +382=>600,376=>600,160=>600,161=>600,162=>600,163=>600,164=>600,165=>600,166=>600,167=>600, +168=>600,169=>600,170=>600,171=>600,172=>600,173=>600,174=>600,175=>600,176=>600,177=>600, +178=>600,179=>600,180=>600,181=>600,182=>600,183=>600,184=>600,185=>600,186=>600,187=>600, +188=>600,189=>600,190=>600,191=>600,192=>600,193=>600,194=>600,195=>600,196=>600,197=>600, +198=>600,199=>600,200=>600,201=>600,202=>600,203=>600,204=>600,205=>600,206=>600,207=>600, +208=>600,209=>600,210=>600,211=>600,212=>600,213=>600,214=>600,215=>600,216=>600,217=>600, +218=>600,219=>600,220=>600,221=>600,222=>600,223=>600,224=>600,225=>600,226=>600,227=>600, +228=>600,229=>600,230=>600,231=>600,232=>600,233=>600,234=>600,235=>600,236=>600,237=>600, +238=>600,239=>600,240=>600,241=>600,242=>600,243=>600,244=>600,245=>600,246=>600,247=>600, +248=>600,249=>600,250=>600,251=>600,252=>600,253=>600,254=>600,255=>600,256=>600,257=>600, +258=>600,259=>600,260=>600,261=>600,262=>600,263=>600,264=>600,265=>600,266=>600,267=>600, +268=>600,269=>600,270=>600,271=>600,272=>600,273=>600,274=>600,275=>600,276=>600,277=>600, +278=>600,279=>600,280=>600,281=>600,282=>600,283=>600,284=>600,285=>600,286=>600,287=>600, +288=>600,289=>600,290=>600,291=>600,292=>600,293=>600,294=>600,295=>600,296=>600,297=>600, +298=>600,299=>600,300=>600,301=>600,302=>600,303=>600,304=>600,305=>600,306=>600,307=>600, +308=>600,309=>600,310=>600,311=>600,312=>600,313=>600,314=>600,315=>600,316=>600,317=>600, +318=>600,319=>600,320=>600,321=>600,322=>600,323=>600,324=>600,325=>600,326=>600,327=>600, +328=>600,329=>600,330=>600,331=>600,332=>600,333=>600,334=>600,335=>600,336=>600,337=>600, +340=>600,341=>600,342=>600,343=>600,344=>600,345=>600,346=>600,347=>600,348=>600,349=>600, +350=>600,351=>600,354=>600,355=>600,356=>600,357=>600,358=>600,359=>600,360=>600,361=>600, +362=>600,363=>600,364=>600,365=>600,366=>600,367=>600,368=>600,369=>600,370=>600,371=>600, +372=>600,373=>600,374=>600,375=>600,377=>600,378=>600,379=>600,380=>600,383=>600,384=>600, +385=>600,386=>600,387=>600,388=>600,389=>600,390=>600,391=>600,392=>600,393=>600,394=>600, +395=>600,396=>600,397=>600,398=>600,399=>600,400=>600,401=>600,403=>600,404=>600,405=>600, +406=>600,407=>600,408=>600,409=>600,410=>600,411=>600,412=>600,413=>600,414=>600,415=>600, +416=>600,417=>600,418=>600,419=>600,420=>600,421=>600,422=>600,423=>600,424=>600,425=>600, +426=>600,427=>600,428=>600,429=>600,430=>600,431=>600,432=>600,433=>600,434=>600,435=>600, +436=>600,437=>600,438=>600,439=>600,440=>600,441=>600,442=>600,443=>600,444=>600,445=>600, +446=>600,447=>600,448=>600,449=>600,450=>600,451=>600,452=>600,453=>600,454=>600,455=>600, +456=>600,457=>600,458=>600,459=>600,460=>600,461=>600,462=>600,463=>600,464=>600,465=>600, +466=>600,467=>600,468=>600,469=>600,470=>600,471=>600,472=>600,473=>600,474=>600,475=>600, +476=>600,477=>600,478=>600,479=>600,480=>600,481=>600,482=>600,483=>600,484=>600,485=>600, +486=>600,487=>600,488=>600,489=>600,490=>600,491=>600,492=>600,493=>600,494=>600,495=>600, +496=>600,497=>600,498=>600,499=>600,500=>600,501=>600,502=>600,503=>600,504=>600,505=>600, +506=>600,507=>600,508=>600,509=>600,510=>600,511=>600,512=>600,513=>600,514=>600,515=>600, +516=>600,517=>600,518=>600,519=>600,520=>600,521=>600,522=>600,523=>600,524=>600,525=>600, +526=>600,527=>600,528=>600,529=>600,530=>600,531=>600,532=>600,533=>600,534=>600,535=>600, +536=>600,537=>600,538=>600,539=>600,540=>600,541=>600,542=>600,543=>600,544=>600,548=>600, +549=>600,550=>600,551=>600,552=>600,553=>600,554=>600,555=>600,556=>600,557=>600,558=>600, +559=>600,560=>600,561=>600,562=>600,563=>600,567=>600,592=>600,593=>600,594=>600,595=>600, +596=>600,597=>600,598=>600,599=>600,600=>600,601=>600,602=>600,603=>600,604=>600,605=>600, +606=>600,607=>600,608=>600,609=>600,610=>600,611=>600,612=>600,613=>600,614=>600,615=>600, +616=>600,617=>600,618=>600,619=>600,620=>600,621=>600,622=>600,623=>600,624=>600,625=>600, +626=>600,627=>600,628=>600,629=>600,630=>600,631=>600,632=>600,633=>600,634=>600,635=>600, +636=>600,637=>600,638=>600,639=>600,640=>600,641=>600,642=>600,643=>600,644=>600,645=>600, +646=>600,647=>600,648=>600,649=>600,650=>600,651=>600,652=>600,653=>600,654=>600,655=>600, +656=>600,657=>600,658=>600,659=>600,660=>600,661=>600,662=>600,663=>600,664=>600,665=>600, +666=>600,667=>600,668=>600,669=>600,670=>600,671=>600,672=>600,673=>600,674=>600,675=>600, +676=>600,677=>600,678=>600,679=>600,680=>600,681=>600,682=>600,683=>600,684=>600,685=>600, +686=>600,687=>600,688=>600,689=>600,690=>600,691=>600,692=>600,693=>600,694=>600,695=>600, +696=>600,697=>600,698=>600,699=>600,700=>600,701=>600,702=>600,703=>600,704=>600,705=>600, +706=>600,707=>600,708=>600,709=>600,711=>600,712=>600,713=>600,714=>600,715=>600,716=>600, +717=>600,718=>600,719=>600,720=>600,721=>600,722=>600,723=>600,724=>600,725=>600,726=>600, +727=>600,728=>600,729=>600,730=>600,731=>600,733=>600,734=>600,735=>600,736=>600,737=>600, +738=>600,739=>600,740=>600,741=>600,742=>600,743=>600,744=>600,745=>600,746=>600,747=>600, +748=>600,749=>600,750=>600,751=>600,752=>600,753=>600,754=>600,755=>600,756=>600,757=>600, +758=>600,759=>600,760=>600,761=>600,762=>600,763=>600,764=>600,765=>600,766=>600,767=>600, +768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0, +778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0, +788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0,797=>0, +798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,807=>0, +808=>0,809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0, +818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0,827=>0, +828=>0,829=>0,830=>0,831=>0,832=>0,833=>0,834=>0,835=>0,836=>0,837=>0, +838=>0,839=>0,840=>0,841=>0,843=>0,844=>0,845=>0,848=>0,849=>0,850=>0, +851=>0,852=>0,853=>0,854=>0,855=>0,856=>0,857=>0,858=>0,884=>600,885=>600, +890=>600,894=>600,900=>600,901=>600,902=>600,903=>600,904=>600,905=>600,906=>600,908=>600, +910=>600,911=>600,912=>600,913=>600,914=>600,915=>600,916=>600,917=>600,918=>600,919=>600, +920=>600,921=>600,922=>600,923=>600,924=>600,925=>600,926=>600,927=>600,928=>600,929=>600, +931=>600,932=>600,933=>600,934=>600,935=>600,936=>600,937=>600,938=>600,939=>600,940=>600, +941=>600,942=>600,943=>600,944=>600,945=>600,946=>600,947=>600,948=>600,949=>600,950=>600, +951=>600,952=>600,953=>600,954=>600,955=>600,956=>600,957=>600,958=>600,959=>600,960=>600, +961=>600,962=>600,963=>600,964=>600,965=>600,966=>600,967=>600,968=>600,969=>600,970=>600, +971=>600,972=>600,973=>600,974=>600,976=>600,977=>600,978=>600,979=>600,980=>600,981=>600, +982=>600,986=>600,987=>600,988=>600,1008=>600,1009=>600,1012=>600,1013=>600,1024=>600,1025=>600, +1026=>600,1027=>600,1028=>600,1029=>600,1030=>600,1031=>600,1032=>600,1033=>600,1034=>600,1035=>600, +1036=>600,1037=>600,1038=>600,1039=>600,1040=>600,1041=>600,1042=>600,1043=>600,1044=>600,1045=>600, +1046=>600,1047=>600,1048=>600,1049=>600,1050=>600,1051=>600,1052=>600,1053=>600,1054=>600,1055=>600, +1056=>600,1057=>600,1058=>600,1059=>600,1060=>600,1061=>600,1062=>600,1063=>600,1064=>600,1065=>600, +1066=>600,1067=>600,1068=>600,1069=>600,1070=>600,1071=>600,1072=>600,1073=>600,1074=>600,1075=>600, +1076=>600,1077=>600,1078=>600,1079=>600,1080=>600,1081=>600,1082=>600,1083=>600,1084=>600,1085=>600, +1086=>600,1087=>600,1088=>600,1089=>600,1090=>600,1091=>600,1092=>600,1093=>600,1094=>600,1095=>600, +1096=>600,1097=>600,1098=>600,1099=>600,1100=>600,1101=>600,1102=>600,1103=>600,1104=>600,1105=>600, +1106=>600,1107=>600,1108=>600,1109=>600,1110=>600,1111=>600,1112=>600,1113=>600,1114=>600,1115=>600, +1116=>600,1117=>600,1118=>600,1119=>600,1120=>600,1121=>600,1122=>600,1123=>600,1124=>600,1126=>600, +1127=>600,1128=>600,1130=>600,1131=>600,1132=>600,1133=>600,1136=>600,1137=>600,1138=>600,1140=>600, +1141=>600,1142=>600,1143=>600,1148=>600,1149=>600,1155=>0,1156=>0,1157=>0,1158=>0,1159=>0, +1162=>600,1163=>600,1164=>600,1165=>600,1166=>600,1167=>600,1168=>600,1169=>600,1170=>600,1171=>600, +1172=>600,1173=>600,1174=>600,1175=>600,1176=>600,1177=>600,1178=>600,1179=>600,1180=>600,1181=>600, +1182=>600,1183=>600,1184=>600,1185=>600,1186=>600,1187=>600,1188=>600,1189=>600,1190=>600,1191=>600, +1192=>600,1193=>600,1194=>600,1195=>600,1196=>600,1197=>600,1198=>600,1199=>600,1200=>600,1201=>600, +1202=>600,1203=>600,1204=>600,1205=>600,1206=>600,1207=>600,1208=>600,1209=>600,1210=>600,1211=>600, +1212=>600,1213=>600,1214=>600,1215=>600,1216=>600,1217=>600,1218=>600,1219=>600,1220=>600,1221=>600, +1222=>600,1223=>600,1224=>600,1225=>600,1226=>600,1227=>600,1228=>600,1229=>600,1230=>600,1231=>600, +1232=>600,1233=>600,1234=>600,1235=>600,1236=>600,1237=>600,1238=>600,1239=>600,1240=>600,1241=>600, +1242=>600,1243=>600,1244=>600,1245=>600,1246=>600,1247=>600,1248=>600,1249=>600,1250=>600,1251=>600, +1252=>600,1253=>600,1254=>600,1255=>600,1256=>600,1257=>600,1258=>600,1259=>600,1260=>600,1261=>600, +1262=>600,1263=>600,1264=>600,1265=>600,1266=>600,1267=>600,1268=>600,1269=>600,1270=>600,1271=>600, +1272=>600,1273=>600,1296=>600,1297=>600,1298=>600,1299=>600,1306=>600,1307=>600,1308=>600,1309=>600, +1310=>600,1311=>600,1329=>600,1330=>600,1331=>600,1332=>600,1333=>600,1334=>600,1335=>600,1336=>600, +1337=>600,1338=>600,1339=>600,1340=>600,1341=>600,1342=>600,1343=>600,1344=>600,1345=>600,1346=>600, +1347=>600,1348=>600,1349=>600,1350=>600,1351=>600,1352=>600,1353=>600,1354=>600,1355=>600,1356=>600, +1357=>600,1358=>600,1359=>600,1360=>600,1361=>600,1362=>600,1363=>600,1364=>600,1365=>600,1366=>600, +1369=>600,1370=>600,1371=>600,1372=>600,1373=>600,1374=>600,1375=>600,1377=>600,1378=>600,1379=>600, +1380=>600,1381=>600,1382=>600,1383=>600,1384=>600,1385=>600,1386=>600,1387=>600,1388=>600,1389=>600, +1390=>600,1391=>600,1392=>600,1393=>600,1394=>600,1395=>600,1396=>600,1397=>600,1398=>600,1399=>600, +1400=>600,1401=>600,1402=>600,1403=>600,1404=>600,1405=>600,1406=>600,1407=>600,1408=>600,1409=>600, +1410=>600,1411=>600,1412=>600,1413=>600,1414=>600,1415=>600,1417=>600,1418=>600,1456=>0,1457=>0, +1458=>0,1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1467=>0,1468=>0, +1469=>0,1470=>600,1471=>0,1472=>600,1473=>0,1474=>0,1475=>600,1476=>0,1488=>600,1489=>600, +1490=>600,1491=>600,1492=>600,1493=>600,1494=>600,1495=>600,1496=>600,1497=>600,1498=>600,1499=>600, +1500=>600,1501=>600,1502=>600,1503=>600,1504=>600,1505=>600,1506=>600,1507=>600,1508=>600,1509=>600, +1510=>600,1511=>600,1512=>600,1513=>600,1514=>600,1520=>600,1521=>600,1522=>600,1523=>600,1524=>600, +4304=>600,4305=>600,4306=>600,4307=>600,4308=>600,4309=>600,4310=>600,4311=>600,4312=>600,4313=>600, +4314=>600,4315=>600,4316=>600,4317=>600,4318=>600,4319=>600,4320=>600,4321=>600,4322=>600,4323=>600, +4324=>600,4325=>600,4326=>600,4327=>600,4328=>600,4329=>600,4330=>600,4331=>600,4332=>600,4333=>600, +4334=>600,4335=>600,4336=>600,4337=>600,4338=>600,4339=>600,4340=>600,4341=>600,4345=>600,4347=>600, +4348=>600,5024=>600,5025=>600,5026=>600,5027=>600,5028=>600,5029=>600,5030=>600,5031=>600,5032=>600, +5033=>600,5034=>600,5035=>600,5036=>600,5037=>600,5038=>600,5039=>600,5040=>600,5041=>600,5042=>600, +5043=>600,5044=>600,5045=>600,5046=>600,5047=>600,5048=>600,5049=>600,5050=>600,5051=>600,5052=>600, +5053=>600,5054=>600,5055=>600,5056=>600,5057=>600,5058=>600,5059=>600,5060=>600,5061=>600,5062=>600, +5063=>600,5064=>600,5065=>600,5066=>600,5067=>600,5068=>600,5069=>600,5070=>600,5071=>600,5072=>600, +5073=>600,5074=>600,5075=>600,5076=>600,5077=>600,5078=>600,5079=>600,5080=>600,5081=>600,5082=>600, +5083=>600,5084=>600,5085=>600,5086=>600,5087=>600,5088=>600,5089=>600,5090=>600,5091=>600,5092=>600, +5093=>600,5094=>600,5095=>600,5096=>600,5097=>600,5098=>600,5099=>600,5100=>600,5101=>600,5102=>600, +5103=>600,5104=>600,5105=>600,5106=>600,5107=>600,5108=>600,5792=>600,5793=>600,5794=>600,5795=>600, +5796=>600,5797=>600,5798=>600,5799=>600,5800=>600,5801=>600,5802=>600,5803=>600,5804=>600,5805=>600, +5806=>600,5807=>600,5808=>600,5809=>600,5810=>600,5811=>600,5812=>600,5813=>600,5814=>600,5815=>600, +5816=>600,5817=>600,5818=>600,5819=>600,5820=>600,5821=>600,5822=>600,5823=>600,5824=>600,5825=>600, +5826=>600,5827=>600,5828=>600,5829=>600,5830=>600,5831=>600,5832=>600,5833=>600,5834=>600,5835=>600, +5836=>600,5837=>600,5838=>600,5839=>600,5840=>600,5841=>600,5842=>600,5843=>600,5844=>600,5845=>600, +5846=>600,5847=>600,5848=>600,5849=>600,5850=>600,5851=>600,5852=>600,5853=>600,5854=>600,5855=>600, +5856=>600,5857=>600,5858=>600,5859=>600,5860=>600,5861=>600,5862=>600,5863=>600,5864=>600,5865=>600, +5866=>600,5867=>600,5868=>600,5869=>600,5870=>600,5871=>600,5872=>600,7680=>600,7681=>600,7682=>600, +7683=>600,7684=>600,7685=>600,7686=>600,7687=>600,7688=>600,7689=>600,7690=>600,7691=>600,7692=>600, +7693=>600,7694=>600,7695=>600,7696=>600,7697=>600,7698=>600,7699=>600,7700=>600,7701=>600,7702=>600, +7703=>600,7704=>600,7705=>600,7706=>600,7707=>600,7708=>600,7709=>600,7710=>600,7711=>600,7712=>600, +7713=>600,7714=>600,7715=>600,7716=>600,7717=>600,7718=>600,7719=>600,7720=>600,7721=>600,7722=>600, +7723=>600,7724=>600,7725=>600,7726=>600,7727=>600,7728=>600,7729=>600,7730=>600,7731=>600,7732=>600, +7733=>600,7734=>600,7735=>600,7736=>600,7737=>600,7738=>600,7739=>600,7740=>600,7741=>600,7742=>600, +7743=>600,7744=>600,7745=>600,7746=>600,7747=>600,7748=>600,7749=>600,7750=>600,7751=>600,7752=>600, +7753=>600,7754=>600,7755=>600,7756=>600,7757=>600,7758=>600,7759=>600,7760=>600,7761=>600,7762=>600, +7763=>600,7764=>600,7765=>600,7766=>600,7767=>600,7768=>600,7769=>600,7770=>600,7771=>600,7772=>600, +7773=>600,7774=>600,7775=>600,7776=>600,7777=>600,7778=>600,7779=>600,7780=>600,7781=>600,7782=>600, +7783=>600,7784=>600,7785=>600,7786=>600,7787=>600,7788=>600,7789=>600,7790=>600,7791=>600,7792=>600, +7793=>600,7794=>600,7795=>600,7796=>600,7797=>600,7798=>600,7799=>600,7800=>600,7801=>600,7802=>600, +7803=>600,7804=>600,7805=>600,7806=>600,7807=>600,7808=>600,7809=>600,7810=>600,7811=>600,7812=>600, +7813=>600,7814=>600,7815=>600,7816=>600,7817=>600,7818=>600,7819=>600,7820=>600,7821=>600,7822=>600, +7823=>600,7824=>600,7825=>600,7826=>600,7827=>600,7828=>600,7829=>600,7830=>600,7831=>600,7832=>600, +7833=>600,7834=>600,7835=>600,7840=>600,7841=>600,7842=>600,7843=>600,7844=>600,7845=>600,7846=>600, +7847=>600,7848=>600,7849=>600,7850=>600,7851=>600,7852=>600,7853=>600,7854=>600,7855=>600,7856=>600, +7857=>600,7858=>600,7859=>600,7860=>600,7861=>600,7862=>600,7863=>600,7864=>600,7865=>600,7866=>600, +7867=>600,7868=>600,7869=>600,7870=>600,7871=>600,7872=>600,7873=>600,7874=>600,7875=>600,7876=>600, +7877=>600,7878=>600,7879=>600,7880=>600,7881=>600,7882=>600,7883=>600,7884=>600,7885=>600,7886=>600, +7887=>600,7888=>600,7889=>600,7890=>600,7891=>600,7892=>600,7893=>600,7894=>600,7895=>600,7896=>600, +7897=>600,7898=>600,7899=>600,7900=>600,7901=>600,7902=>600,7903=>600,7904=>600,7905=>600,7906=>600, +7907=>600,7908=>600,7909=>600,7910=>600,7911=>600,7912=>600,7913=>600,7914=>600,7915=>600,7916=>600, +7917=>600,7918=>600,7919=>600,7920=>600,7921=>600,7922=>600,7923=>600,7924=>600,7925=>600,7926=>600, +7927=>600,7928=>600,7929=>600,7936=>600,7937=>600,7938=>600,7939=>600,7940=>600,7941=>600,7942=>600, +7943=>600,7944=>600,7945=>600,7946=>600,7947=>600,7948=>600,7949=>600,7950=>600,7951=>600,7952=>600, +7953=>600,7954=>600,7955=>600,7956=>600,7957=>600,7960=>600,7961=>600,7962=>600,7963=>600,7964=>600, +7965=>600,7968=>600,7969=>600,7970=>600,7971=>600,7972=>600,7973=>600,7974=>600,7975=>600,7976=>600, +7977=>600,7978=>600,7979=>600,7980=>600,7981=>600,7982=>600,7983=>600,7984=>600,7985=>600,7986=>600, +7987=>600,7988=>600,7989=>600,7990=>600,7991=>600,7992=>600,7993=>600,7994=>600,7995=>600,7996=>600, +7997=>600,7998=>600,7999=>600,8000=>600,8001=>600,8002=>600,8003=>600,8004=>600,8005=>600,8008=>600, +8009=>600,8010=>600,8011=>600,8012=>600,8013=>600,8016=>600,8017=>600,8018=>600,8019=>600,8020=>600, +8021=>600,8022=>600,8023=>600,8025=>600,8027=>600,8029=>600,8031=>600,8032=>600,8033=>600,8034=>600, +8035=>600,8036=>600,8037=>600,8038=>600,8039=>600,8040=>600,8041=>600,8042=>600,8043=>600,8044=>600, +8045=>600,8046=>600,8047=>600,8048=>600,8049=>600,8050=>600,8051=>600,8052=>600,8053=>600,8054=>600, +8055=>600,8056=>600,8057=>600,8058=>600,8059=>600,8060=>600,8061=>600,8064=>600,8065=>600,8066=>600, +8067=>600,8068=>600,8069=>600,8070=>600,8071=>600,8072=>600,8073=>600,8074=>600,8075=>600,8076=>600, +8077=>600,8078=>600,8079=>600,8080=>600,8081=>600,8082=>600,8083=>600,8084=>600,8085=>600,8086=>600, +8087=>600,8088=>600,8089=>600,8090=>600,8091=>600,8092=>600,8093=>600,8094=>600,8095=>600,8096=>600, +8097=>600,8098=>600,8099=>600,8100=>600,8101=>600,8102=>600,8103=>600,8104=>600,8105=>600,8106=>600, +8107=>600,8108=>600,8109=>600,8110=>600,8111=>600,8112=>600,8113=>600,8114=>600,8115=>600,8116=>600, +8118=>600,8119=>600,8120=>600,8121=>600,8122=>600,8123=>600,8124=>600,8125=>600,8126=>600,8127=>600, +8128=>600,8129=>600,8130=>600,8131=>600,8132=>600,8134=>600,8135=>600,8136=>600,8137=>600,8138=>600, +8139=>600,8140=>600,8141=>600,8142=>600,8143=>600,8144=>600,8145=>600,8146=>600,8147=>600,8150=>600, +8151=>600,8152=>600,8153=>600,8154=>600,8155=>600,8157=>600,8158=>600,8159=>600,8160=>600,8161=>600, +8162=>600,8163=>600,8164=>600,8165=>600,8166=>600,8167=>600,8168=>600,8169=>600,8170=>600,8171=>600, +8172=>600,8173=>600,8174=>600,8175=>600,8178=>600,8179=>600,8180=>600,8182=>600,8183=>600,8184=>600, +8185=>600,8186=>600,8187=>600,8188=>600,8189=>600,8190=>600,8192=>600,8193=>600,8194=>600,8195=>600, +8196=>600,8197=>600,8198=>600,8199=>600,8200=>600,8201=>600,8202=>600,8203=>600,8204=>0,8205=>0, +8206=>0,8207=>0,8208=>600,8209=>600,8210=>600,8213=>600,8214=>600,8215=>600,8219=>600,8223=>600, +8227=>600,8228=>600,8229=>600,8231=>600,8232=>600,8233=>600,8234=>600,8235=>600,8236=>600,8237=>600, +8238=>600,8239=>600,8241=>600,8242=>600,8243=>600,8244=>600,8245=>600,8246=>600,8247=>600,8248=>600, +8251=>600,8252=>600,8253=>600,8254=>600,8255=>600,8256=>600,8257=>600,8258=>600,8259=>600,8260=>600, +8261=>600,8262=>600,8263=>600,8264=>600,8265=>600,8266=>600,8267=>600,8268=>600,8269=>600,8270=>600, +8271=>600,8272=>600,8273=>600,8274=>600,8275=>600,8276=>600,8277=>600,8278=>600,8279=>600,8280=>600, +8281=>600,8282=>600,8283=>600,8284=>600,8285=>600,8286=>600,8287=>600,8288=>600,8289=>600,8290=>600, +8291=>600,8292=>600,8304=>600,8305=>600,8308=>600,8309=>600,8310=>600,8311=>600,8312=>600,8313=>600, +8314=>600,8315=>600,8316=>600,8317=>600,8318=>600,8319=>600,8320=>600,8321=>600,8322=>600,8323=>600, +8324=>600,8325=>600,8326=>600,8327=>600,8328=>600,8329=>600,8330=>600,8331=>600,8332=>600,8333=>600, +8334=>600,8336=>600,8337=>600,8338=>600,8339=>600,8340=>600,8353=>600,8354=>600,8355=>600,8356=>600, +8357=>600,8358=>600,8359=>600,8360=>600,8361=>600,8362=>600,8363=>600,8365=>600,8366=>600,8368=>600, +8369=>600,8370=>600,8371=>600,8372=>600,8373=>600,8400=>0,8401=>0,8402=>0,8406=>0,8407=>0, +8411=>0,8412=>0,8413=>0,8414=>0,8415=>0,8416=>0,8417=>0,8418=>0,8419=>0,8421=>0, +8422=>0,8424=>0,8426=>0,8427=>0,8428=>0,8429=>0,8430=>0,8431=>0,8448=>600,8449=>600, +8450=>600,8451=>600,8452=>600,8453=>600,8454=>600,8455=>600,8456=>600,8457=>600,8461=>600,8462=>600, +8463=>600,8464=>600,8465=>600,8466=>600,8467=>600,8468=>600,8469=>600,8470=>600,8471=>600,8472=>600, +8473=>600,8474=>600,8476=>600,8477=>600,8478=>600,8480=>600,8481=>600,8484=>600,8486=>600,8487=>600, +8489=>600,8490=>600,8491=>600,8494=>600,8498=>600,8501=>600,8502=>600,8503=>600,8504=>600,8505=>600, +8506=>600,8507=>600,8513=>600,8514=>600,8515=>600,8516=>600,8523=>600,8525=>600,8526=>600,8531=>600, +8532=>600,8533=>600,8534=>600,8535=>600,8536=>600,8537=>600,8538=>600,8539=>600,8540=>600,8541=>600, +8542=>600,8543=>600,8544=>600,8545=>600,8546=>600,8547=>600,8548=>600,8549=>600,8550=>600,8551=>600, +8552=>600,8553=>600,8554=>600,8555=>600,8556=>600,8557=>600,8558=>600,8559=>600,8560=>600,8561=>600, +8562=>600,8563=>600,8564=>600,8565=>600,8566=>600,8567=>600,8568=>600,8569=>600,8570=>600,8571=>600, +8572=>600,8573=>600,8574=>600,8575=>600,8592=>600,8593=>600,8594=>600,8595=>600,8596=>600,8597=>600, +8598=>600,8599=>600,8600=>600,8601=>600,8602=>600,8603=>600,8604=>600,8605=>600,8606=>600,8607=>600, +8608=>600,8609=>600,8610=>600,8611=>600,8612=>600,8613=>600,8614=>600,8615=>600,8616=>600,8617=>600, +8618=>600,8619=>600,8620=>600,8621=>600,8622=>600,8623=>600,8624=>600,8625=>600,8626=>600,8627=>600, +8628=>600,8629=>600,8630=>600,8631=>600,8632=>600,8633=>600,8634=>600,8635=>600,8636=>600,8637=>600, +8638=>600,8639=>600,8640=>600,8641=>600,8642=>600,8643=>600,8644=>600,8645=>600,8646=>600,8647=>600, +8648=>600,8649=>600,8650=>600,8651=>600,8652=>600,8653=>600,8654=>600,8655=>600,8656=>600,8657=>600, +8658=>600,8659=>600,8660=>600,8661=>600,8669=>600,8678=>600,8679=>600,8680=>600,8681=>600,8691=>600, +8704=>600,8705=>600,8706=>600,8707=>600,8708=>600,8709=>600,8710=>600,8711=>600,8712=>600,8713=>600, +8714=>600,8715=>600,8716=>600,8717=>600,8718=>600,8719=>600,8720=>600,8721=>600,8722=>600,8723=>600, +8724=>600,8725=>600,8726=>600,8727=>600,8728=>600,8729=>600,8730=>600,8731=>600,8732=>600,8733=>600, +8734=>600,8735=>600,8736=>600,8737=>600,8738=>600,8739=>600,8740=>600,8741=>600,8742=>600,8743=>600, +8744=>600,8745=>600,8746=>600,8747=>600,8748=>600,8749=>600,8750=>600,8751=>600,8752=>600,8753=>600, +8754=>600,8755=>600,8756=>600,8757=>600,8758=>600,8759=>600,8760=>600,8761=>600,8762=>600,8763=>600, +8764=>600,8765=>600,8766=>600,8767=>600,8768=>600,8769=>600,8770=>600,8771=>600,8772=>600,8773=>600, +8774=>600,8775=>600,8776=>600,8777=>600,8778=>600,8779=>600,8780=>600,8781=>600,8782=>600,8783=>600, +8784=>600,8785=>600,8786=>600,8787=>600,8788=>600,8789=>600,8790=>600,8791=>600,8792=>600,8793=>600, +8794=>600,8795=>600,8796=>600,8797=>600,8798=>600,8799=>600,8800=>600,8801=>600,8802=>600,8803=>600, +8804=>600,8805=>600,8806=>600,8807=>600,8808=>600,8809=>600,8810=>600,8811=>600,8812=>600,8813=>600, +8814=>600,8815=>600,8816=>600,8817=>600,8818=>600,8819=>600,8820=>600,8821=>600,8822=>600,8823=>600, +8824=>600,8825=>600,8826=>600,8827=>600,8828=>600,8829=>600,8830=>600,8831=>600,8832=>600,8833=>600, +8834=>600,8835=>600,8836=>600,8837=>600,8838=>600,8839=>600,8840=>600,8841=>600,8842=>600,8843=>600, +8844=>600,8845=>600,8846=>600,8847=>600,8848=>600,8849=>600,8850=>600,8851=>600,8852=>600,8853=>600, +8854=>600,8855=>600,8856=>600,8857=>600,8858=>600,8859=>600,8860=>600,8861=>600,8862=>600,8863=>600, +8864=>600,8865=>600,8866=>600,8867=>600,8868=>600,8869=>600,8870=>600,8871=>600,8872=>600,8873=>600, +8874=>600,8875=>600,8876=>600,8877=>600,8878=>600,8879=>600,8880=>600,8881=>600,8882=>600,8883=>600, +8884=>600,8885=>600,8886=>600,8887=>600,8888=>600,8889=>600,8890=>600,8891=>600,8892=>600,8893=>600, +8894=>600,8895=>600,8896=>600,8897=>600,8898=>600,8899=>600,8900=>600,8901=>600,8902=>600,8903=>600, +8904=>600,8905=>600,8906=>600,8907=>600,8908=>600,8909=>600,8910=>600,8911=>600,8912=>600,8913=>600, +8914=>600,8915=>600,8916=>600,8917=>600,8918=>600,8919=>600,8920=>600,8921=>600,8922=>600,8923=>600, +8924=>600,8925=>600,8926=>600,8927=>600,8928=>600,8929=>600,8930=>600,8931=>600,8932=>600,8933=>600, +8934=>600,8935=>600,8936=>600,8937=>600,8938=>600,8939=>600,8940=>600,8941=>600,8942=>600,8943=>600, +8944=>600,8945=>600,8960=>600,8962=>600,8963=>600,8964=>600,8965=>600,8966=>600,8968=>600,8969=>600, +8970=>600,8971=>600,8972=>600,8973=>600,8974=>600,8975=>600,8976=>600,8978=>600,8980=>600,8981=>600, +8984=>600,8985=>600,8988=>600,8989=>600,8990=>600,8991=>600,8992=>600,8993=>600,8994=>600,8995=>600, +8996=>600,8997=>600,8998=>600,8999=>600,9001=>600,9002=>600,9003=>600,9004=>600,9014=>600,9015=>600, +9016=>600,9017=>600,9018=>600,9019=>600,9020=>600,9021=>600,9022=>600,9023=>600,9024=>600,9025=>600, +9026=>600,9027=>600,9028=>600,9029=>600,9030=>600,9031=>600,9032=>600,9033=>600,9034=>600,9035=>600, +9036=>600,9037=>600,9038=>600,9039=>600,9040=>600,9041=>600,9042=>600,9043=>600,9044=>600,9045=>600, +9046=>600,9047=>600,9048=>600,9049=>600,9050=>600,9051=>600,9052=>600,9053=>600,9054=>600,9055=>600, +9056=>600,9057=>600,9058=>600,9059=>600,9060=>600,9061=>600,9062=>600,9063=>600,9064=>600,9065=>600, +9066=>600,9067=>600,9068=>600,9069=>600,9070=>600,9071=>600,9072=>600,9073=>600,9074=>600,9075=>600, +9076=>600,9077=>600,9078=>600,9079=>600,9080=>600,9081=>600,9082=>600,9084=>600,9085=>600,9086=>600, +9087=>600,9088=>600,9089=>600,9090=>600,9091=>600,9092=>600,9093=>600,9094=>600,9095=>600,9096=>600, +9097=>600,9098=>600,9099=>600,9100=>600,9101=>600,9102=>600,9103=>600,9104=>600,9105=>600,9106=>600, +9107=>600,9108=>600,9109=>600,9110=>600,9111=>600,9112=>600,9113=>600,9114=>600,9115=>600,9116=>600, +9117=>600,9118=>600,9119=>600,9120=>600,9121=>600,9122=>600,9123=>600,9124=>600,9125=>600,9126=>600, +9127=>600,9128=>600,9129=>600,9130=>600,9131=>600,9132=>600,9133=>600,9134=>600,9135=>600,9136=>600, +9137=>600,9138=>600,9139=>600,9140=>600,9141=>600,9142=>600,9143=>600,9146=>600,9147=>600,9148=>600, +9149=>600,9150=>600,9151=>600,9152=>600,9153=>600,9154=>600,9155=>600,9156=>600,9157=>600,9158=>600, +9159=>600,9160=>600,9161=>600,9162=>600,9163=>600,9164=>600,9165=>600,9166=>600,9167=>600,9178=>600, +9179=>600,9182=>600,9183=>600,9186=>600,9187=>600,9188=>600,9189=>600,9190=>600,9216=>600,9217=>600, +9218=>600,9219=>600,9220=>600,9221=>600,9222=>600,9223=>600,9224=>600,9225=>600,9226=>600,9227=>600, +9228=>600,9229=>600,9230=>600,9231=>600,9232=>600,9233=>600,9234=>600,9235=>600,9236=>600,9237=>600, +9238=>600,9239=>600,9240=>600,9241=>600,9242=>600,9243=>600,9244=>600,9245=>600,9246=>600,9247=>600, +9248=>600,9249=>600,9251=>600,9252=>600,9280=>600,9281=>600,9282=>600,9283=>600,9284=>600,9285=>600, +9286=>600,9287=>600,9288=>600,9289=>600,9290=>600,9312=>600,9313=>600,9314=>600,9315=>600,9316=>600, +9317=>600,9318=>600,9319=>600,9320=>600,9321=>600,9472=>600,9473=>600,9474=>600,9475=>600,9476=>600, +9477=>600,9478=>600,9479=>600,9480=>600,9481=>600,9482=>600,9483=>600,9484=>600,9485=>600,9486=>600, +9487=>600,9488=>600,9489=>600,9490=>600,9491=>600,9492=>600,9493=>600,9494=>600,9495=>600,9496=>600, +9497=>600,9498=>600,9499=>600,9500=>600,9501=>600,9502=>600,9503=>600,9504=>600,9505=>600,9506=>600, +9507=>600,9508=>600,9509=>600,9510=>600,9511=>600,9512=>600,9513=>600,9514=>600,9515=>600,9516=>600, +9517=>600,9518=>600,9519=>600,9520=>600,9521=>600,9522=>600,9523=>600,9524=>600,9525=>600,9526=>600, +9527=>600,9528=>600,9529=>600,9530=>600,9531=>600,9532=>600,9533=>600,9534=>600,9535=>600,9536=>600, +9537=>600,9538=>600,9539=>600,9540=>600,9541=>600,9542=>600,9543=>600,9544=>600,9545=>600,9546=>600, +9547=>600,9548=>600,9549=>600,9550=>600,9551=>600,9552=>600,9553=>600,9554=>600,9555=>600,9556=>600, +9557=>600,9558=>600,9559=>600,9560=>600,9561=>600,9562=>600,9563=>600,9564=>600,9565=>600,9566=>600, +9567=>600,9568=>600,9569=>600,9570=>600,9571=>600,9572=>600,9573=>600,9574=>600,9575=>600,9576=>600, +9577=>600,9578=>600,9579=>600,9580=>600,9581=>600,9582=>600,9583=>600,9584=>600,9585=>600,9586=>600, +9587=>600,9588=>600,9589=>600,9590=>600,9591=>600,9592=>600,9593=>600,9594=>600,9595=>600,9596=>600, +9597=>600,9598=>600,9599=>600,9600=>600,9601=>600,9602=>600,9603=>600,9604=>600,9605=>600,9606=>600, +9607=>600,9608=>600,9609=>600,9610=>600,9611=>600,9612=>600,9613=>600,9614=>600,9615=>600,9616=>600, +9617=>600,9618=>600,9619=>600,9620=>600,9621=>600,9622=>600,9623=>600,9624=>600,9625=>600,9626=>600, +9627=>600,9628=>600,9629=>600,9630=>600,9631=>600,9632=>600,9633=>600,9634=>600,9635=>600,9636=>600, +9637=>600,9638=>600,9639=>600,9640=>600,9641=>600,9642=>600,9643=>600,9644=>600,9645=>600,9646=>600, +9647=>600,9648=>600,9649=>600,9650=>600,9651=>600,9652=>600,9653=>600,9654=>600,9655=>600,9656=>600, +9657=>600,9658=>600,9659=>600,9660=>600,9661=>600,9662=>600,9663=>600,9664=>600,9665=>600,9666=>600, +9667=>600,9668=>600,9669=>600,9670=>600,9671=>600,9672=>600,9673=>600,9674=>600,9675=>600,9676=>600, +9677=>600,9678=>600,9679=>600,9680=>600,9681=>600,9682=>600,9683=>600,9684=>600,9685=>600,9686=>600, +9687=>600,9688=>600,9689=>600,9690=>600,9691=>600,9692=>600,9693=>600,9694=>600,9695=>600,9696=>600, +9697=>600,9698=>600,9699=>600,9700=>600,9701=>600,9702=>600,9703=>600,9704=>600,9705=>600,9706=>600, +9707=>600,9708=>600,9709=>600,9710=>600,9711=>600,9712=>600,9713=>600,9714=>600,9715=>600,9716=>600, +9717=>600,9718=>600,9719=>600,9720=>600,9721=>600,9722=>600,9723=>600,9724=>600,9725=>600,9726=>600, +9727=>600,9728=>600,9729=>600,9730=>600,9731=>600,9733=>600,9734=>600,9735=>600,9736=>600,9737=>600, +9744=>600,9745=>600,9746=>600,9754=>600,9755=>600,9756=>600,9757=>600,9758=>600,9759=>600,9766=>600, +9768=>600,9769=>600,9774=>600,9775=>600,9776=>600,9777=>600,9778=>600,9779=>600,9780=>600,9781=>600, +9782=>600,9783=>600,9785=>600,9786=>600,9787=>600,9788=>600,9789=>600,9790=>600,9791=>600,9792=>600, +9793=>600,9794=>600,9795=>600,9796=>600,9797=>600,9798=>600,9799=>600,9800=>600,9801=>600,9802=>600, +9803=>600,9804=>600,9805=>600,9806=>600,9807=>600,9808=>600,9809=>600,9810=>600,9811=>600,9824=>600, +9825=>600,9826=>600,9827=>600,9828=>600,9829=>600,9830=>600,9831=>600,9833=>600,9834=>600,9835=>600, +9836=>600,9837=>600,9838=>600,9839=>600,9856=>600,9857=>600,9858=>600,9859=>600,9860=>600,9861=>600, +10176=>600,10177=>600,10178=>600,10179=>600,10180=>600,10181=>600,10182=>600,10183=>600,10184=>600,10185=>600, +10186=>600,10188=>600,10192=>600,10193=>600,10194=>600,10195=>600,10196=>600,10197=>600,10198=>600,10199=>600, +10212=>600,10213=>600,10214=>600,10215=>600,10216=>600,10217=>600,10218=>600,10219=>600,10226=>600,10227=>600, +10229=>600,10230=>600,10231=>600,10232=>600,10233=>600,10234=>600,10235=>600,10236=>600,10240=>600,10241=>600, +10242=>600,10243=>600,10244=>600,10245=>600,10246=>600,10247=>600,10248=>600,10249=>600,10250=>600,10251=>600, +10252=>600,10253=>600,10254=>600,10255=>600,10256=>600,10257=>600,10258=>600,10259=>600,10260=>600,10261=>600, +10262=>600,10263=>600,10264=>600,10265=>600,10266=>600,10267=>600,10268=>600,10269=>600,10270=>600,10271=>600, +10272=>600,10273=>600,10274=>600,10275=>600,10276=>600,10277=>600,10278=>600,10279=>600,10280=>600,10281=>600, +10282=>600,10283=>600,10284=>600,10285=>600,10286=>600,10287=>600,10288=>600,10289=>600,10290=>600,10291=>600, +10292=>600,10293=>600,10294=>600,10295=>600,10296=>600,10297=>600,10298=>600,10299=>600,10300=>600,10301=>600, +10302=>600,10303=>600,10304=>600,10305=>600,10306=>600,10307=>600,10308=>600,10309=>600,10310=>600,10311=>600, +10312=>600,10313=>600,10314=>600,10315=>600,10316=>600,10317=>600,10318=>600,10319=>600,10320=>600,10321=>600, +10322=>600,10323=>600,10324=>600,10325=>600,10326=>600,10327=>600,10328=>600,10329=>600,10330=>600,10331=>600, +10332=>600,10333=>600,10334=>600,10335=>600,10336=>600,10337=>600,10338=>600,10339=>600,10340=>600,10341=>600, +10342=>600,10343=>600,10344=>600,10345=>600,10346=>600,10347=>600,10348=>600,10349=>600,10350=>600,10351=>600, +10352=>600,10353=>600,10354=>600,10355=>600,10356=>600,10357=>600,10358=>600,10359=>600,10360=>600,10361=>600, +10362=>600,10363=>600,10364=>600,10365=>600,10366=>600,10367=>600,10368=>600,10369=>600,10370=>600,10371=>600, +10372=>600,10373=>600,10374=>600,10375=>600,10376=>600,10377=>600,10378=>600,10379=>600,10380=>600,10381=>600, +10382=>600,10383=>600,10384=>600,10385=>600,10386=>600,10387=>600,10388=>600,10389=>600,10390=>600,10391=>600, +10392=>600,10393=>600,10394=>600,10395=>600,10396=>600,10397=>600,10398=>600,10399=>600,10400=>600,10401=>600, +10402=>600,10403=>600,10404=>600,10405=>600,10406=>600,10407=>600,10408=>600,10409=>600,10410=>600,10411=>600, +10412=>600,10413=>600,10414=>600,10415=>600,10416=>600,10417=>600,10418=>600,10419=>600,10420=>600,10421=>600, +10422=>600,10423=>600,10424=>600,10425=>600,10426=>600,10427=>600,10428=>600,10429=>600,10430=>600,10431=>600, +10432=>600,10433=>600,10434=>600,10435=>600,10436=>600,10437=>600,10438=>600,10439=>600,10440=>600,10441=>600, +10442=>600,10443=>600,10444=>600,10445=>600,10446=>600,10447=>600,10448=>600,10449=>600,10450=>600,10451=>600, +10452=>600,10453=>600,10454=>600,10455=>600,10456=>600,10457=>600,10458=>600,10459=>600,10460=>600,10461=>600, +10462=>600,10463=>600,10464=>600,10465=>600,10466=>600,10467=>600,10468=>600,10469=>600,10470=>600,10471=>600, +10472=>600,10473=>600,10474=>600,10475=>600,10476=>600,10477=>600,10478=>600,10479=>600,10480=>600,10481=>600, +10482=>600,10483=>600,10484=>600,10485=>600,10486=>600,10487=>600,10488=>600,10489=>600,10490=>600,10491=>600, +10492=>600,10493=>600,10494=>600,10495=>600,10752=>600,10753=>600,10754=>600,10755=>600,10756=>600,10757=>600, +10758=>600,10781=>600,10815=>600,11008=>600,11009=>600,11010=>600,11011=>600,11012=>600,11013=>600,11014=>600, +11015=>600,11016=>600,11017=>600,11018=>600,11019=>600,11020=>600,11021=>600,11026=>600,11027=>600,11028=>600, +11029=>600,11030=>600,11031=>600,11032=>600,11033=>600,11035=>600,11036=>600,11037=>600,11038=>600,11039=>600, +11040=>600,11041=>600,11042=>600,11043=>600,11044=>600,11045=>600,11046=>600,11047=>600,11048=>600,11049=>600, +11050=>600,11051=>600,11091=>600,11092=>600,11799=>600,42888=>600,42889=>600,42890=>600,42891=>600,42892=>600, +43264=>600,43265=>600,43266=>600,43267=>600,43268=>600,43269=>600,43270=>600,43271=>600,43272=>600,43273=>600, +43274=>600,43275=>600,43276=>600,43277=>600,43278=>600,43279=>600,43280=>600,43281=>600,43282=>600,43283=>600, +43284=>600,43285=>600,43286=>600,43287=>600,43288=>600,43289=>600,43290=>600,43291=>600,43292=>600,43293=>600, +43294=>600,43295=>600,43296=>600,43297=>600,43298=>600,43299=>600,43300=>600,43301=>600,43302=>0,43303=>0, +43304=>0,43305=>0,43306=>0,43307=>0,43308=>0,43309=>0,43310=>600,43311=>600,64256=>600,64257=>600, +64258=>600,64259=>600,64260=>600,64261=>600,64285=>600,64286=>600,64287=>600,64288=>600,64289=>600,64290=>600, +64291=>600,64292=>600,64293=>600,64294=>600,64295=>600,64296=>600,64297=>600,64298=>600,64299=>600,64300=>600, +64301=>600,64302=>600,64303=>600,64304=>600,64305=>600,64306=>600,64307=>600,64308=>600,64309=>600,64310=>600, +64312=>600,64313=>600,64314=>600,64315=>600,64316=>600,64318=>600,64320=>600,64321=>600,64323=>600,64324=>600, +64326=>600,64327=>600,64328=>600,64329=>600,64330=>600,64331=>600,64332=>600,64333=>600,64334=>600,64335=>600, +65533=>600); +$enc=''; +$diff=''; +$file='freemono.z'; +$ctg='freemono.ctg.z'; +$originalsize=343980; +// --- EOF --- --- /dev/null +++ b/tcpdf/fonts/freemonob.php @@ -1,1 +1,211 @@ - +800,'Descent'=>-200,'CapHeight'=>10,'Flags'=>32,'FontBBox'=>'[-600 -580 1154 1161]','ItalicAngle'=>0,'StemV'=>120,'MissingWidth'=>600); +$up=-125; +$ut=50; +$dw=600; +$cw=array( +32=>600,33=>600,34=>600,35=>600,36=>600,37=>600,38=>600,39=>600,40=>600,41=>600, +42=>600,43=>600,44=>600,45=>600,46=>600,47=>600,48=>600,49=>600,50=>600,51=>600, +52=>600,53=>600,54=>600,55=>600,56=>600,57=>600,58=>600,59=>600,60=>600,61=>600, +62=>600,63=>600,64=>600,65=>600,66=>600,67=>600,68=>600,69=>600,70=>600,71=>600, +72=>600,73=>600,74=>600,75=>600,76=>600,77=>600,78=>600,79=>600,80=>600,81=>600, +82=>600,83=>600,84=>600,85=>600,86=>600,87=>600,88=>600,89=>600,90=>600,91=>600, +92=>600,93=>600,94=>600,95=>600,96=>600,97=>600,98=>600,99=>600,100=>600,101=>600, +102=>600,103=>600,104=>600,105=>600,106=>600,107=>600,108=>600,109=>600,110=>600,111=>600, +112=>600,113=>600,114=>600,115=>600,116=>600,117=>600,118=>600,119=>600,120=>600,121=>600, +122=>600,123=>600,124=>600,125=>600,126=>600,8364=>600,8218=>600,402=>600,8222=>600,8230=>600, +8224=>600,8225=>600,710=>600,8240=>600,352=>600,8249=>600,338=>600,381=>600,8216=>600,8217=>600, +8220=>600,8221=>600,8226=>600,8211=>600,8212=>600,732=>600,8482=>600,353=>600,8250=>600,339=>600, +382=>600,376=>600,160=>600,161=>600,162=>600,163=>600,164=>600,165=>600,166=>600,167=>600, +168=>600,169=>600,170=>600,171=>600,172=>600,173=>600,174=>600,175=>600,176=>600,177=>600, +178=>600,179=>600,180=>600,181=>600,182=>600,183=>600,184=>600,185=>600,186=>600,187=>600, +188=>600,189=>600,190=>600,191=>600,192=>600,193=>600,194=>600,195=>600,196=>600,197=>600, +198=>600,199=>600,200=>600,201=>600,202=>600,203=>600,204=>600,205=>600,206=>600,207=>600, +208=>600,209=>600,210=>600,211=>600,212=>600,213=>600,214=>600,215=>600,216=>600,217=>600, +218=>600,219=>600,220=>600,221=>600,222=>600,223=>600,224=>600,225=>600,226=>600,227=>600, +228=>600,229=>600,230=>600,231=>600,232=>600,233=>600,234=>600,235=>600,236=>600,237=>600, +238=>600,239=>600,240=>600,241=>600,242=>600,243=>600,244=>600,245=>600,246=>600,247=>600, +248=>600,249=>600,250=>600,251=>600,252=>600,253=>600,254=>600,255=>600,256=>600,257=>600, +258=>600,259=>600,260=>600,261=>600,262=>600,263=>600,264=>600,265=>600,266=>600,267=>600, +268=>600,269=>600,270=>600,271=>600,272=>600,273=>600,274=>600,275=>600,276=>600,277=>600, +278=>600,279=>600,280=>600,281=>600,282=>600,283=>600,284=>600,285=>600,286=>600,287=>600, +288=>600,289=>600,290=>600,291=>600,292=>600,293=>600,294=>600,295=>600,296=>600,297=>600, +298=>600,299=>600,300=>600,301=>600,302=>600,303=>600,304=>600,305=>600,306=>600,307=>600, +308=>600,309=>600,310=>600,311=>600,312=>600,313=>600,314=>600,315=>600,316=>600,317=>600, +318=>600,319=>600,320=>600,321=>600,322=>600,323=>600,324=>600,325=>600,326=>600,327=>600, +328=>600,329=>600,330=>600,331=>600,332=>600,333=>600,334=>600,335=>600,336=>600,337=>600, +340=>600,341=>600,342=>600,343=>600,344=>600,345=>600,346=>600,347=>600,348=>600,349=>600, +350=>600,351=>600,354=>600,355=>600,356=>600,357=>600,358=>600,359=>600,360=>600,361=>600, +362=>600,363=>600,364=>600,365=>600,366=>600,367=>600,368=>600,369=>600,370=>600,371=>600, +372=>600,373=>600,374=>600,375=>600,377=>600,378=>600,379=>600,380=>600,383=>600,384=>600, +385=>600,386=>600,387=>600,388=>600,389=>600,390=>600,391=>600,392=>600,393=>600,394=>600, +395=>600,396=>600,397=>600,398=>600,399=>600,400=>600,401=>600,403=>600,404=>600,405=>600, +406=>600,407=>600,408=>600,409=>600,410=>600,411=>600,412=>600,413=>600,414=>600,415=>600, +416=>600,417=>600,418=>600,419=>600,420=>600,421=>600,422=>600,423=>600,424=>600,425=>600, +426=>600,427=>600,428=>600,429=>600,430=>600,431=>600,432=>600,433=>600,434=>600,435=>600, +436=>600,437=>600,438=>600,439=>600,440=>600,441=>600,442=>600,443=>600,444=>600,445=>600, +446=>600,447=>600,448=>600,449=>600,450=>600,451=>600,452=>600,453=>600,454=>600,455=>600, +456=>600,457=>600,458=>600,459=>600,460=>600,461=>600,462=>600,463=>600,464=>600,465=>600, +466=>600,467=>600,468=>600,469=>600,470=>600,471=>600,472=>600,473=>600,474=>600,475=>600, +476=>600,477=>600,478=>600,479=>600,480=>600,481=>600,482=>600,483=>600,484=>600,485=>600, +486=>600,487=>600,488=>600,489=>600,490=>600,491=>600,492=>600,493=>600,494=>600,495=>600, +496=>600,497=>600,498=>600,499=>600,500=>600,501=>600,502=>600,503=>600,504=>600,505=>600, +506=>600,507=>600,508=>600,509=>600,510=>600,511=>600,512=>600,513=>600,514=>600,515=>600, +516=>600,517=>600,518=>600,519=>600,520=>600,521=>600,522=>600,523=>600,524=>600,525=>600, +526=>600,527=>600,528=>600,529=>600,530=>600,531=>600,532=>600,533=>600,534=>600,535=>600, +536=>600,537=>600,538=>600,539=>600,540=>600,541=>600,542=>600,543=>600,544=>600,548=>600, +549=>600,550=>600,551=>600,552=>600,553=>600,554=>600,555=>600,556=>600,557=>600,558=>600, +559=>600,560=>600,561=>600,562=>600,563=>600,567=>600,592=>600,593=>600,594=>600,595=>600, +596=>600,598=>600,599=>600,600=>600,601=>600,603=>600,604=>600,607=>600,608=>600,609=>600, +613=>600,614=>600,615=>600,616=>600,617=>600,618=>600,619=>600,621=>600,623=>600,624=>600, +625=>600,626=>600,627=>600,628=>600,629=>600,633=>600,634=>600,635=>600,636=>600,637=>600, +638=>600,639=>600,640=>600,641=>600,642=>600,643=>600,644=>600,645=>600,647=>600,648=>600, +649=>600,652=>600,653=>600,654=>600,656=>600,657=>600,658=>600,659=>600,660=>600,661=>600, +662=>600,663=>600,664=>600,665=>600,666=>600,667=>600,668=>600,669=>600,670=>600,671=>600, +672=>600,673=>600,674=>600,688=>600,689=>600,690=>600,691=>600,692=>600,693=>600,694=>600, +695=>600,696=>600,697=>600,698=>600,699=>600,700=>600,701=>600,702=>600,703=>600,704=>600, +705=>600,706=>600,707=>600,708=>600,709=>600,711=>600,712=>600,713=>600,714=>600,715=>600, +716=>600,717=>600,718=>600,719=>600,720=>600,721=>600,722=>600,723=>600,724=>600,725=>600, +726=>600,727=>600,728=>600,729=>600,730=>600,731=>600,733=>600,734=>600,735=>600,736=>600, +737=>600,738=>600,739=>600,740=>600,741=>600,742=>600,743=>600,744=>600,745=>600,746=>600, +747=>600,748=>600,749=>600,750=>600,751=>600,752=>600,753=>600,754=>600,755=>600,756=>600, +757=>600,758=>600,759=>600,760=>600,761=>600,762=>600,763=>600,764=>600,765=>600,766=>600, +767=>600,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0, +777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0, +787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0, +797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0, +807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0, +817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0, +827=>0,828=>0,829=>0,830=>0,831=>0,832=>0,833=>0,834=>0,835=>0,836=>0, +837=>0,838=>0,839=>0,840=>0,841=>0,843=>0,844=>0,845=>0,848=>0,849=>0, +850=>0,851=>0,852=>0,853=>0,854=>0,855=>0,856=>0,857=>0,858=>0,884=>600, +885=>600,890=>600,894=>600,900=>600,901=>600,902=>600,903=>600,904=>600,905=>600,906=>600, +908=>600,910=>600,911=>600,912=>600,913=>600,914=>600,915=>600,916=>600,917=>600,918=>600, +919=>600,920=>600,921=>600,922=>600,923=>600,924=>600,925=>600,926=>600,927=>600,928=>600, +929=>600,931=>600,932=>600,933=>600,934=>600,935=>600,936=>600,937=>600,938=>600,939=>600, +940=>600,941=>600,942=>600,943=>600,944=>600,945=>600,946=>600,947=>600,948=>600,949=>600, +950=>600,951=>600,952=>600,953=>600,954=>600,955=>600,956=>600,957=>600,958=>600,959=>600, +960=>600,961=>600,962=>600,963=>600,964=>600,965=>600,966=>600,967=>600,968=>600,969=>600, +970=>600,971=>600,972=>600,973=>600,974=>600,976=>600,977=>600,978=>600,979=>600,980=>600, +981=>600,982=>600,986=>600,987=>600,988=>600,1008=>600,1009=>600,1012=>600,1013=>600,1024=>600, +1025=>600,1026=>600,1027=>600,1028=>600,1029=>600,1030=>600,1031=>600,1032=>600,1033=>600,1034=>600, +1035=>600,1036=>600,1037=>600,1038=>600,1039=>600,1040=>600,1041=>600,1042=>600,1043=>600,1044=>600, +1045=>600,1046=>600,1047=>600,1048=>600,1049=>600,1050=>600,1051=>600,1052=>600,1053=>600,1054=>600, +1055=>600,1056=>600,1057=>600,1058=>600,1059=>600,1060=>600,1061=>600,1062=>600,1063=>600,1064=>600, +1065=>600,1066=>600,1067=>600,1068=>600,1069=>600,1070=>600,1071=>600,1072=>600,1073=>600,1074=>600, +1075=>600,1076=>600,1077=>600,1078=>600,1079=>600,1080=>600,1081=>600,1082=>600,1083=>600,1084=>600, +1085=>600,1086=>600,1087=>600,1088=>600,1089=>600,1090=>600,1091=>600,1092=>600,1093=>600,1094=>600, +1095=>600,1096=>600,1097=>600,1098=>600,1099=>600,1100=>600,1101=>600,1102=>600,1103=>600,1104=>600, +1105=>600,1106=>600,1107=>600,1108=>600,1109=>600,1110=>600,1111=>600,1112=>600,1113=>600,1114=>600, +1115=>600,1116=>600,1117=>600,1118=>600,1119=>600,1136=>600,1137=>600,1138=>600,1156=>0,1157=>0, +1158=>0,1162=>600,1163=>600,1164=>600,1165=>600,1166=>600,1167=>600,1168=>600,1169=>600,1170=>600, +1171=>600,1172=>600,1173=>600,1174=>600,1175=>600,1176=>600,1177=>600,1178=>600,1179=>600,1180=>600, +1181=>600,1182=>600,1183=>600,1184=>600,1185=>600,1186=>600,1187=>600,1188=>600,1189=>600,1190=>600, +1191=>600,1192=>600,1193=>600,1194=>600,1195=>600,1196=>600,1197=>600,1198=>600,1199=>600,1200=>600, +1201=>600,1202=>600,1203=>600,1204=>600,1205=>600,1206=>600,1207=>600,1208=>600,1209=>600,1210=>600, +1211=>600,1212=>600,1213=>600,1214=>600,1215=>600,1216=>600,1217=>600,1218=>600,1219=>600,1220=>600, +1221=>600,1222=>600,1223=>600,1224=>600,1225=>600,1226=>600,1227=>600,1228=>600,1229=>600,1230=>600, +1231=>600,1232=>600,1233=>600,1234=>600,1235=>600,1236=>600,1237=>600,1238=>600,1239=>600,1240=>600, +1241=>600,1242=>600,1243=>600,1244=>600,1245=>600,1246=>600,1247=>600,1248=>600,1249=>600,1250=>600, +1251=>600,1252=>600,1253=>600,1254=>600,1255=>600,1256=>600,1257=>600,1258=>600,1259=>600,1260=>600, +1261=>600,1262=>600,1263=>600,1264=>600,1265=>600,1266=>600,1267=>600,1268=>600,1269=>600,1270=>600, +1271=>600,1272=>600,1273=>600,1296=>600,1297=>600,1298=>600,1299=>600,1306=>600,1307=>600,1308=>600, +1309=>600,1310=>600,1311=>600,1456=>0,1457=>0,1458=>0,1459=>0,1460=>0,1461=>0,1462=>0, +1463=>0,1464=>0,1465=>0,1467=>0,1468=>0,1469=>0,1470=>600,1471=>0,1472=>600,1473=>0, +1474=>0,1475=>600,1476=>0,1488=>600,1489=>600,1490=>600,1491=>600,1492=>600,1493=>600,1494=>600, +1495=>600,1496=>600,1497=>600,1498=>600,1499=>600,1500=>600,1501=>600,1502=>600,1503=>600,1504=>600, +1505=>600,1506=>600,1507=>600,1508=>600,1509=>600,1510=>600,1511=>600,1512=>600,1513=>600,1514=>600, +1520=>600,1521=>600,1522=>600,1523=>600,1524=>600,4304=>600,4305=>600,4306=>600,4307=>600,4308=>600, +4309=>600,4310=>600,4311=>600,4312=>600,4313=>600,4314=>600,4315=>600,4316=>600,4317=>600,4318=>600, +4319=>600,4320=>600,4321=>600,4322=>600,4323=>600,4324=>600,4325=>600,4326=>600,4327=>600,4328=>600, +4329=>600,4330=>600,4331=>600,4332=>600,4333=>600,4334=>600,4335=>600,4336=>600,4337=>600,4338=>600, +4339=>600,4340=>600,4341=>600,4345=>600,4347=>600,4348=>600,7680=>600,7681=>600,7682=>600,7683=>600, +7684=>600,7685=>600,7686=>600,7687=>600,7688=>600,7689=>600,7690=>600,7691=>600,7692=>600,7693=>600, +7694=>600,7695=>600,7696=>600,7697=>600,7698=>600,7699=>600,7700=>600,7701=>600,7702=>600,7703=>600, +7704=>600,7705=>600,7706=>600,7707=>600,7708=>600,7709=>600,7710=>600,7711=>600,7712=>600,7713=>600, +7714=>600,7715=>600,7716=>600,7717=>600,7718=>600,7719=>600,7720=>600,7721=>600,7722=>600,7723=>600, +7724=>600,7725=>600,7726=>600,7727=>600,7728=>600,7729=>600,7730=>600,7731=>600,7732=>600,7733=>600, +7734=>600,7735=>600,7736=>600,7737=>600,7738=>600,7739=>600,7740=>600,7741=>600,7742=>600,7743=>600, +7744=>600,7745=>600,7746=>600,7747=>600,7748=>600,7749=>600,7750=>600,7751=>600,7752=>600,7753=>600, +7754=>600,7755=>600,7756=>600,7757=>600,7758=>600,7759=>600,7760=>600,7761=>600,7762=>600,7763=>600, +7764=>600,7765=>600,7766=>600,7767=>600,7768=>600,7769=>600,7770=>600,7771=>600,7772=>600,7773=>600, +7774=>600,7775=>600,7776=>600,7777=>600,7778=>600,7779=>600,7780=>600,7781=>600,7782=>600,7783=>600, +7784=>600,7785=>600,7786=>600,7787=>600,7788=>600,7789=>600,7790=>600,7791=>600,7792=>600,7793=>600, +7794=>600,7795=>600,7796=>600,7797=>600,7798=>600,7799=>600,7800=>600,7801=>600,7802=>600,7803=>600, +7804=>600,7805=>600,7806=>600,7807=>600,7808=>600,7809=>600,7810=>600,7811=>600,7812=>600,7813=>600, +7814=>600,7815=>600,7816=>600,7817=>600,7818=>600,7819=>600,7820=>600,7821=>600,7822=>600,7823=>600, +7824=>600,7825=>600,7826=>600,7827=>600,7828=>600,7829=>600,7830=>600,7831=>600,7832=>600,7833=>600, +7834=>600,7835=>600,7840=>600,7841=>600,7842=>600,7843=>600,7844=>600,7845=>600,7846=>600,7847=>600, +7848=>600,7849=>600,7850=>600,7851=>600,7852=>600,7853=>600,7854=>600,7855=>600,7856=>600,7857=>600, +7858=>600,7859=>600,7860=>600,7861=>600,7862=>600,7863=>600,7864=>600,7865=>600,7866=>600,7867=>600, +7868=>600,7869=>600,7870=>600,7871=>600,7872=>600,7873=>600,7874=>600,7875=>600,7876=>600,7877=>600, +7878=>600,7879=>600,7880=>600,7881=>600,7882=>600,7883=>600,7884=>600,7885=>600,7886=>600,7887=>600, +7888=>600,7889=>600,7890=>600,7891=>600,7892=>600,7893=>600,7894=>600,7895=>600,7896=>600,7897=>600, +7898=>600,7899=>600,7900=>600,7901=>600,7902=>600,7903=>600,7904=>600,7905=>600,7906=>600,7907=>600, +7908=>600,7909=>600,7910=>600,7911=>600,7912=>600,7913=>600,7914=>600,7915=>600,7916=>600,7917=>600, +7918=>600,7919=>600,7920=>600,7921=>600,7922=>600,7923=>600,7924=>600,7925=>600,7926=>600,7927=>600, +7928=>600,7929=>600,8192=>600,8193=>600,8194=>600,8195=>600,8196=>600,8197=>600,8198=>600,8199=>600, +8200=>600,8201=>600,8202=>600,8203=>600,8204=>0,8205=>0,8206=>0,8207=>0,8208=>600,8209=>600, +8210=>600,8213=>600,8214=>600,8215=>600,8219=>600,8223=>600,8227=>600,8228=>600,8229=>600,8231=>600, +8232=>600,8233=>600,8234=>600,8235=>600,8236=>600,8237=>600,8238=>600,8239=>600,8241=>600,8242=>600, +8243=>600,8244=>600,8245=>600,8246=>600,8247=>600,8248=>600,8251=>600,8252=>600,8253=>600,8254=>600, +8255=>600,8256=>600,8257=>600,8258=>600,8259=>600,8260=>600,8261=>600,8262=>600,8263=>600,8264=>600, +8265=>600,8266=>600,8267=>600,8268=>600,8269=>600,8270=>600,8271=>600,8272=>600,8273=>600,8274=>600, +8275=>600,8276=>600,8277=>600,8278=>600,8279=>600,8280=>600,8281=>600,8282=>600,8283=>600,8284=>600, +8285=>600,8286=>600,8287=>600,8288=>600,8289=>600,8290=>600,8291=>600,8292=>600,8304=>600,8305=>600, +8308=>600,8309=>600,8310=>600,8311=>600,8312=>600,8313=>600,8314=>600,8315=>600,8316=>600,8317=>600, +8318=>600,8319=>600,8320=>600,8321=>600,8322=>600,8323=>600,8324=>600,8325=>600,8326=>600,8327=>600, +8328=>600,8329=>600,8330=>600,8331=>600,8332=>600,8333=>600,8334=>600,8336=>600,8337=>600,8338=>600, +8339=>600,8340=>600,8355=>600,8356=>600,8362=>600,8373=>600,8448=>600,8449=>600,8451=>600,8453=>600, +8454=>600,8455=>600,8457=>600,8462=>600,8465=>600,8466=>600,8467=>600,8470=>600,8472=>600,8476=>600, +8480=>600,8481=>600,8486=>600,8487=>600,8489=>600,8490=>600,8491=>600,8494=>600,8498=>600,8501=>600, +8502=>600,8503=>600,8504=>600,8506=>600,8507=>600,8513=>600,8514=>600,8515=>600,8516=>600,8523=>600, +8525=>600,8526=>600,8531=>600,8532=>600,8533=>600,8534=>600,8535=>600,8536=>600,8537=>600,8538=>600, +8539=>600,8540=>600,8541=>600,8542=>600,8543=>600,8544=>600,8545=>600,8546=>600,8547=>600,8548=>600, +8549=>600,8550=>600,8553=>600,8556=>600,8557=>600,8558=>600,8559=>600,8560=>600,8564=>600,8569=>600, +8572=>600,8573=>600,8574=>600,8575=>600,8592=>600,8593=>600,8594=>600,8595=>600,8596=>600,8597=>600, +8598=>600,8599=>600,8600=>600,8601=>600,8612=>600,8613=>600,8614=>600,8615=>600,8633=>600,8636=>600, +8637=>600,8638=>600,8639=>600,8640=>600,8641=>600,8642=>600,8643=>600,8644=>600,8645=>600,8646=>600, +8647=>600,8648=>600,8649=>600,8650=>600,8651=>600,8652=>600,8704=>600,8706=>600,8707=>600,8709=>600, +8710=>600,8711=>600,8712=>600,8713=>600,8714=>600,8715=>600,8716=>600,8717=>600,8719=>600,8720=>600, +8721=>600,8722=>600,8723=>600,8725=>600,8727=>600,8729=>600,8730=>600,8731=>600,8732=>600,8733=>600, +8734=>600,8735=>600,8756=>600,8800=>600,8801=>600,8804=>600,8805=>600,8834=>600,8835=>600,8836=>600, +8837=>600,8838=>600,8839=>600,8869=>600,8976=>600,9001=>600,9002=>600,9251=>600,9472=>600,9473=>600, +9474=>600,9475=>600,9476=>600,9477=>600,9478=>600,9479=>600,9480=>600,9481=>600,9482=>600,9483=>600, +9484=>600,9485=>600,9486=>600,9487=>600,9488=>600,9489=>600,9490=>600,9491=>600,9492=>600,9493=>600, +9494=>600,9495=>600,9496=>600,9497=>600,9498=>600,9499=>600,9500=>600,9501=>600,9502=>600,9503=>600, +9504=>600,9505=>600,9506=>600,9507=>600,9508=>600,9509=>600,9510=>600,9511=>600,9512=>600,9513=>600, +9514=>600,9515=>600,9516=>600,9517=>600,9518=>600,9519=>600,9520=>600,9521=>600,9522=>600,9523=>600, +9524=>600,9525=>600,9526=>600,9527=>600,9528=>600,9529=>600,9530=>600,9531=>600,9532=>600,9533=>600, +9534=>600,9535=>600,9536=>600,9537=>600,9538=>600,9539=>600,9540=>600,9541=>600,9542=>600,9543=>600, +9544=>600,9545=>600,9546=>600,9547=>600,9548=>600,9549=>600,9550=>600,9551=>600,9552=>600,9553=>600, +9554=>600,9555=>600,9556=>600,9557=>600,9558=>600,9559=>600,9560=>600,9561=>600,9562=>600,9563=>600, +9564=>600,9565=>600,9566=>600,9567=>600,9568=>600,9569=>600,9570=>600,9571=>600,9572=>600,9573=>600, +9574=>600,9575=>600,9576=>600,9577=>600,9578=>600,9579=>600,9580=>600,9581=>600,9582=>600,9583=>600, +9584=>600,9585=>600,9586=>600,9587=>600,9588=>600,9589=>600,9590=>600,9591=>600,9592=>600,9593=>600, +9594=>600,9595=>600,9596=>600,9597=>600,9598=>600,9599=>600,9600=>600,9601=>600,9602=>600,9603=>600, +9604=>600,9605=>600,9606=>600,9607=>600,9608=>600,9609=>600,9610=>600,9611=>600,9612=>600,9613=>600, +9614=>600,9615=>600,9616=>600,9617=>600,9618=>600,9619=>600,9620=>600,9621=>600,9632=>600,9633=>600, +9635=>600,9636=>600,9637=>600,9638=>600,9639=>600,9640=>600,9641=>600,9642=>600,9643=>600,9644=>600, +9645=>600,9646=>600,9647=>600,9648=>600,9649=>600,9650=>600,9651=>600,9652=>600,9653=>600,9654=>600, +9655=>600,9656=>600,9657=>600,9658=>600,9660=>600,9661=>600,9662=>600,9663=>600,9664=>600,9665=>600, +9666=>600,9667=>600,9668=>600,9669=>600,9670=>600,9671=>600,9673=>600,9674=>600,9675=>600,9677=>600, +9679=>600,9680=>600,9681=>600,9682=>600,9683=>600,9684=>600,9685=>600,9686=>600,9687=>600,9688=>600, +9689=>600,9698=>600,9699=>600,9700=>600,9701=>600,9702=>600,9703=>600,9704=>600,9705=>600,9706=>600, +9707=>600,9708=>600,9709=>600,9710=>600,9712=>600,9713=>600,9714=>600,9715=>600,9716=>600,9717=>600, +9718=>600,9719=>600,9735=>600,9736=>600,9737=>600,9776=>600,9777=>600,9778=>600,9779=>600,9780=>600, +9781=>600,9782=>600,9783=>600,9785=>600,9786=>600,9787=>600,9824=>600,9825=>600,9826=>600,9827=>600, +9828=>600,9829=>600,9830=>600,9831=>600,9833=>600,9834=>600,9835=>600,9836=>600,9837=>600,9838=>600, +9839=>600,11799=>600,42888=>600,42889=>600,42890=>600,42891=>600,42892=>600,64256=>600,64257=>600,64258=>600, +64285=>600,64287=>600,64288=>600,64298=>600,64299=>600,64300=>600,64301=>600,64302=>600,64303=>600,64304=>600, +64305=>600,64306=>600,64307=>600,64308=>600,64309=>600,64310=>600,64312=>600,64313=>600,64314=>600,64315=>600, +64316=>600,64318=>600,64320=>600,64321=>600,64323=>600,64324=>600,64326=>600,64327=>600,64328=>600,64329=>600, +64330=>600,64331=>600,64332=>600,64333=>600,64334=>600,64335=>600,65533=>600); +$enc=''; +$diff=''; +$file='freemonob.z'; +$ctg='freemonob.ctg.z'; +$originalsize=173608; +// --- EOF --- --- /dev/null +++ b/tcpdf/fonts/freemonobi.php @@ -1,1 +1,183 @@ - +800,'Descent'=>-200,'CapHeight'=>19,'Flags'=>96,'FontBBox'=>'[-642 -200 833 800]','ItalicAngle'=>-12,'StemV'=>120,'MissingWidth'=>600); +$up=-125; +$ut=50; +$dw=600; +$cw=array( +32=>600,33=>600,34=>600,35=>600,36=>600,37=>600,38=>600,39=>600,40=>600,41=>600, +42=>600,43=>600,44=>600,45=>600,46=>600,47=>600,48=>600,49=>600,50=>600,51=>600, +52=>600,53=>600,54=>600,55=>600,56=>600,57=>600,58=>600,59=>600,60=>600,61=>600, +62=>600,63=>600,64=>600,65=>600,66=>600,67=>600,68=>600,69=>600,70=>600,71=>600, +72=>600,73=>600,74=>600,75=>600,76=>600,77=>600,78=>600,79=>600,80=>600,81=>600, +82=>600,83=>600,84=>600,85=>600,86=>600,87=>600,88=>600,89=>600,90=>600,91=>600, +92=>600,93=>600,94=>600,95=>600,96=>600,97=>600,98=>600,99=>600,100=>600,101=>600, +102=>600,103=>600,104=>600,105=>600,106=>600,107=>600,108=>600,109=>600,110=>600,111=>600, +112=>600,113=>600,114=>600,115=>600,116=>600,117=>600,118=>600,119=>600,120=>600,121=>600, +122=>600,123=>600,124=>600,125=>600,126=>600,8364=>600,8218=>600,402=>600,8222=>600,8230=>600, +8224=>600,8225=>600,710=>600,8240=>600,352=>600,8249=>600,338=>600,381=>600,8216=>600,8217=>600, +8220=>600,8221=>600,8226=>600,8211=>600,8212=>600,732=>600,8482=>600,353=>600,8250=>600,339=>600, +382=>600,376=>600,160=>600,161=>600,162=>600,163=>600,164=>600,165=>600,166=>600,167=>600, +168=>600,169=>600,170=>600,171=>600,172=>600,173=>600,174=>600,175=>600,176=>600,177=>600, +178=>600,179=>600,180=>600,181=>600,182=>600,183=>600,184=>600,185=>600,186=>600,187=>600, +188=>600,189=>600,190=>600,191=>600,192=>600,193=>600,194=>600,195=>600,196=>600,197=>600, +198=>600,199=>600,200=>600,201=>600,202=>600,203=>600,204=>600,205=>600,206=>600,207=>600, +208=>600,209=>600,210=>600,211=>600,212=>600,213=>600,214=>600,215=>600,216=>600,217=>600, +218=>600,219=>600,220=>600,221=>600,222=>600,223=>600,224=>600,225=>600,226=>600,227=>600, +228=>600,229=>600,230=>600,231=>600,232=>600,233=>600,234=>600,235=>600,236=>600,237=>600, +238=>600,239=>600,240=>600,241=>600,242=>600,243=>600,244=>600,245=>600,246=>600,247=>600, +248=>600,249=>600,250=>600,251=>600,252=>600,253=>600,254=>600,255=>600,256=>600,257=>600, +258=>600,259=>600,260=>600,261=>600,262=>600,263=>600,264=>600,265=>600,266=>600,267=>600, +268=>600,269=>600,270=>600,271=>600,272=>600,273=>600,274=>600,275=>600,276=>600,277=>600, +278=>600,279=>600,280=>600,281=>600,282=>600,283=>600,284=>600,285=>600,286=>600,287=>600, +288=>600,289=>600,290=>600,291=>600,292=>600,293=>600,294=>600,295=>600,296=>600,297=>600, +298=>600,299=>600,300=>600,301=>600,302=>600,303=>600,304=>600,305=>600,306=>600,307=>600, +308=>600,309=>600,310=>600,311=>600,312=>600,313=>600,314=>600,315=>600,316=>600,317=>600, +318=>600,319=>600,320=>600,321=>600,322=>600,323=>600,324=>600,325=>600,326=>600,327=>600, +328=>600,329=>600,330=>600,331=>600,332=>600,333=>600,334=>600,335=>600,336=>600,337=>600, +340=>600,341=>600,342=>600,343=>600,344=>600,345=>600,346=>600,347=>600,348=>600,349=>600, +350=>600,351=>600,354=>600,355=>600,356=>600,357=>600,358=>600,359=>600,360=>600,361=>600, +362=>600,363=>600,364=>600,365=>600,366=>600,367=>600,368=>600,369=>600,370=>600,371=>600, +372=>600,373=>600,374=>600,375=>600,377=>600,378=>600,379=>600,380=>600,383=>600,384=>600, +385=>600,386=>600,387=>600,388=>600,389=>600,390=>600,391=>600,392=>600,393=>600,394=>600, +395=>600,396=>600,397=>600,398=>600,399=>600,400=>600,401=>600,403=>600,404=>600,405=>600, +406=>600,407=>600,408=>600,409=>600,410=>600,411=>600,412=>600,413=>600,414=>600,415=>600, +416=>600,417=>600,418=>600,419=>600,420=>600,421=>600,422=>600,423=>600,424=>600,425=>600, +426=>600,427=>600,428=>600,429=>600,430=>600,431=>600,432=>600,433=>600,434=>600,435=>600, +436=>600,437=>600,438=>600,439=>600,440=>600,441=>600,442=>600,443=>600,444=>600,445=>600, +446=>600,447=>600,448=>600,449=>600,450=>600,451=>600,452=>600,453=>600,454=>600,455=>600, +456=>600,457=>600,458=>600,459=>600,460=>600,461=>600,462=>600,463=>600,464=>600,465=>600, +466=>600,467=>600,468=>600,469=>600,470=>600,471=>600,472=>600,473=>600,474=>600,475=>600, +476=>600,477=>600,478=>600,479=>600,480=>600,481=>600,482=>600,483=>600,484=>600,485=>600, +486=>600,487=>600,488=>600,489=>600,490=>600,491=>600,492=>600,493=>600,494=>600,495=>600, +496=>600,497=>600,498=>600,499=>600,500=>600,501=>600,502=>600,503=>600,504=>600,505=>600, +506=>600,507=>600,508=>600,509=>600,510=>600,511=>600,512=>600,513=>600,514=>600,515=>600, +516=>600,517=>600,518=>600,519=>600,520=>600,521=>600,522=>600,523=>600,524=>600,525=>600, +526=>600,527=>600,528=>600,529=>600,530=>600,531=>600,532=>600,533=>600,534=>600,535=>600, +536=>600,537=>600,538=>600,539=>600,540=>600,541=>600,542=>600,543=>600,544=>600,548=>600, +549=>600,550=>600,551=>600,552=>600,553=>600,554=>600,555=>600,556=>600,557=>600,558=>600, +559=>600,560=>600,561=>600,562=>600,563=>600,567=>600,592=>600,593=>600,594=>600,595=>600, +596=>600,598=>600,599=>600,600=>600,601=>600,603=>600,604=>600,607=>600,608=>600,609=>600, +613=>600,614=>600,615=>600,616=>600,617=>600,618=>600,619=>600,621=>600,623=>600,624=>600, +625=>600,626=>600,627=>600,628=>600,629=>600,633=>600,634=>600,635=>600,636=>600,637=>600, +638=>600,639=>600,640=>600,641=>600,642=>600,643=>600,644=>600,645=>600,647=>600,648=>600, +649=>600,652=>600,653=>600,654=>600,656=>600,657=>600,658=>600,659=>600,660=>600,661=>600, +662=>600,663=>600,664=>600,665=>600,666=>600,667=>600,668=>600,669=>600,670=>600,671=>600, +672=>600,673=>600,674=>600,688=>600,689=>600,690=>600,691=>600,692=>600,693=>600,694=>600, +695=>600,696=>600,697=>600,698=>600,699=>600,700=>600,701=>600,702=>600,703=>600,704=>600, +705=>600,706=>600,707=>600,708=>600,709=>600,711=>600,712=>600,713=>600,714=>600,715=>600, +716=>600,717=>600,718=>600,719=>600,720=>600,721=>600,722=>600,723=>600,724=>600,725=>600, +726=>600,727=>600,728=>600,729=>600,730=>600,731=>600,733=>600,734=>600,735=>600,736=>600, +737=>600,738=>600,739=>600,740=>600,741=>600,742=>600,743=>600,744=>600,745=>600,746=>600, +747=>600,748=>600,749=>600,750=>600,751=>600,752=>600,753=>600,754=>600,755=>600,756=>600, +757=>600,758=>600,759=>600,760=>600,761=>600,762=>600,763=>600,764=>600,765=>600,766=>600, +767=>600,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0, +777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0, +787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0, +797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0, +807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0, +817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0, +827=>0,828=>0,829=>0,830=>0,831=>0,832=>0,833=>0,834=>0,835=>0,836=>0, +837=>0,838=>0,839=>0,840=>0,841=>0,843=>0,844=>0,845=>0,848=>0,849=>0, +850=>0,851=>0,852=>0,853=>0,854=>0,855=>0,856=>0,857=>0,858=>0,884=>600, +885=>600,890=>600,894=>600,900=>600,901=>600,902=>600,903=>600,904=>600,905=>600,906=>600, +908=>600,910=>600,911=>600,912=>600,913=>600,914=>600,915=>600,916=>600,917=>600,918=>600, +919=>600,920=>600,921=>600,922=>600,923=>600,924=>600,925=>600,926=>600,927=>600,928=>600, +929=>600,931=>600,932=>600,933=>600,934=>600,935=>600,936=>600,937=>600,938=>600,939=>600, +940=>600,941=>600,942=>600,943=>600,944=>600,945=>600,946=>600,947=>600,948=>600,949=>600, +950=>600,951=>600,952=>600,953=>600,954=>600,955=>600,956=>600,957=>600,958=>600,959=>600, +960=>600,961=>600,962=>600,963=>600,964=>600,965=>600,966=>600,967=>600,968=>600,969=>600, +970=>600,971=>600,972=>600,973=>600,974=>600,976=>600,977=>600,978=>600,979=>600,980=>600, +981=>600,982=>600,986=>600,987=>600,988=>600,1008=>600,1009=>600,1012=>600,1013=>600,1024=>600, +1025=>600,1026=>600,1027=>600,1028=>600,1029=>600,1030=>600,1031=>600,1032=>600,1033=>600,1034=>600, +1035=>600,1036=>600,1037=>600,1038=>600,1039=>600,1040=>600,1041=>600,1042=>600,1043=>600,1044=>600, +1045=>600,1046=>600,1047=>600,1048=>600,1049=>600,1050=>600,1051=>600,1052=>600,1053=>600,1054=>600, +1055=>600,1056=>600,1057=>600,1058=>600,1059=>600,1060=>600,1061=>600,1062=>600,1063=>600,1064=>600, +1065=>600,1066=>600,1067=>600,1068=>600,1069=>600,1070=>600,1071=>600,1072=>600,1073=>600,1074=>600, +1075=>600,1076=>600,1077=>600,1078=>600,1079=>600,1080=>600,1081=>600,1082=>600,1083=>600,1084=>600, +1085=>600,1086=>600,1087=>600,1088=>600,1089=>600,1090=>600,1091=>600,1092=>600,1093=>600,1094=>600, +1095=>600,1096=>600,1097=>600,1098=>600,1099=>600,1100=>600,1101=>600,1102=>600,1103=>600,1104=>600, +1105=>600,1106=>600,1107=>600,1108=>600,1109=>600,1110=>600,1111=>600,1112=>600,1113=>600,1114=>600, +1115=>600,1116=>600,1117=>600,1118=>600,1119=>600,1136=>600,1137=>600,1138=>600,1156=>0,1157=>0, +1158=>0,1162=>600,1163=>600,1164=>600,1165=>600,1166=>600,1167=>600,1168=>600,1169=>600,1170=>600, +1171=>600,1172=>600,1173=>600,1174=>600,1175=>600,1176=>600,1177=>600,1178=>600,1179=>600,1180=>600, +1181=>600,1182=>600,1183=>600,1184=>600,1185=>600,1186=>600,1187=>600,1188=>600,1189=>600,1190=>600, +1191=>600,1192=>600,1193=>600,1194=>600,1195=>600,1196=>600,1197=>600,1198=>600,1199=>600,1200=>600, +1201=>600,1202=>600,1203=>600,1204=>600,1205=>600,1206=>600,1207=>600,1208=>600,1209=>600,1210=>600, +1211=>600,1212=>600,1213=>600,1214=>600,1215=>600,1216=>600,1217=>600,1218=>600,1219=>600,1220=>600, +1221=>600,1222=>600,1223=>600,1224=>600,1225=>600,1226=>600,1227=>600,1228=>600,1229=>600,1230=>600, +1231=>600,1232=>600,1233=>600,1234=>600,1235=>600,1236=>600,1237=>600,1238=>600,1239=>600,1240=>600, +1241=>600,1242=>600,1243=>600,1244=>600,1245=>600,1246=>600,1247=>600,1248=>600,1249=>600,1250=>600, +1251=>600,1252=>600,1253=>600,1254=>600,1255=>600,1256=>600,1257=>600,1258=>600,1259=>600,1260=>600, +1261=>600,1262=>600,1263=>600,1264=>600,1265=>600,1266=>600,1267=>600,1268=>600,1269=>600,1270=>600, +1271=>600,1272=>600,1273=>600,1296=>600,1297=>600,1298=>600,1299=>600,1306=>600,1307=>600,1308=>600, +1309=>600,1310=>600,1311=>600,1456=>0,1457=>0,1458=>0,1459=>0,1460=>0,1461=>0,1462=>0, +1463=>0,1464=>0,1465=>0,1467=>0,1468=>0,1469=>0,1470=>0,1471=>0,1472=>600,1473=>0, +1474=>0,1475=>600,1476=>0,1488=>600,1489=>600,1490=>600,1491=>600,1492=>600,1493=>600,1494=>600, +1495=>600,1496=>600,1497=>600,1498=>600,1499=>600,1500=>600,1501=>600,1502=>600,1503=>600,1504=>600, +1505=>600,1506=>600,1507=>600,1508=>600,1509=>600,1510=>600,1511=>600,1512=>600,1513=>600,1514=>600, +1520=>600,1521=>600,1522=>600,1523=>600,1524=>600,4304=>600,4305=>600,4306=>600,4307=>600,4308=>600, +4309=>600,4310=>600,4311=>600,4312=>600,4313=>600,4314=>600,4315=>600,4316=>600,4317=>600,4318=>600, +4319=>600,4320=>600,4321=>600,4322=>600,4323=>600,4324=>600,4325=>600,4326=>600,4327=>600,4328=>600, +4329=>600,4330=>600,4331=>600,4332=>600,4333=>600,4334=>600,4335=>600,4336=>600,4337=>600,4338=>600, +4339=>600,4340=>600,4341=>600,4345=>600,4347=>600,4348=>600,7680=>600,7681=>600,7682=>600,7683=>600, +7684=>600,7685=>600,7686=>600,7687=>600,7688=>600,7689=>600,7690=>600,7691=>600,7692=>600,7693=>600, +7694=>600,7695=>600,7696=>600,7697=>600,7698=>600,7699=>600,7700=>600,7701=>600,7702=>600,7703=>600, +7704=>600,7705=>600,7706=>600,7707=>600,7708=>600,7709=>600,7710=>600,7711=>600,7712=>600,7713=>600, +7714=>600,7715=>600,7716=>600,7717=>600,7718=>600,7719=>600,7720=>600,7721=>600,7722=>600,7723=>600, +7724=>600,7725=>600,7726=>600,7727=>600,7728=>600,7729=>600,7730=>600,7731=>600,7732=>600,7733=>600, +7734=>600,7735=>600,7736=>600,7737=>600,7738=>600,7739=>600,7740=>600,7741=>600,7742=>600,7743=>600, +7744=>600,7745=>600,7746=>600,7747=>600,7748=>600,7749=>600,7750=>600,7751=>600,7752=>600,7753=>600, +7754=>600,7755=>600,7756=>600,7757=>600,7758=>600,7759=>600,7760=>600,7761=>600,7762=>600,7763=>600, +7764=>600,7765=>600,7766=>600,7767=>600,7768=>600,7769=>600,7770=>600,7771=>600,7772=>600,7773=>600, +7774=>600,7775=>600,7776=>600,7777=>600,7778=>600,7779=>600,7780=>600,7781=>600,7782=>600,7783=>600, +7784=>600,7785=>600,7786=>600,7787=>600,7788=>600,7789=>600,7790=>600,7791=>600,7792=>600,7793=>600, +7794=>600,7795=>600,7796=>600,7797=>600,7798=>600,7799=>600,7800=>600,7801=>600,7802=>600,7803=>600, +7804=>600,7805=>600,7806=>600,7807=>600,7808=>600,7809=>600,7810=>600,7811=>600,7812=>600,7813=>600, +7814=>600,7815=>600,7816=>600,7817=>600,7818=>600,7819=>600,7820=>600,7821=>600,7822=>600,7823=>600, +7824=>600,7825=>600,7826=>600,7827=>600,7828=>600,7829=>600,7830=>600,7831=>600,7832=>600,7833=>600, +7834=>600,7835=>600,7840=>600,7841=>600,7842=>600,7843=>600,7844=>600,7845=>600,7846=>600,7847=>600, +7848=>600,7849=>600,7850=>600,7851=>600,7852=>600,7853=>600,7854=>600,7855=>600,7856=>600,7857=>600, +7858=>600,7859=>600,7860=>600,7861=>600,7862=>600,7863=>600,7864=>600,7865=>600,7866=>600,7867=>600, +7868=>600,7869=>600,7870=>600,7871=>600,7872=>600,7873=>600,7874=>600,7875=>600,7876=>600,7877=>600, +7878=>600,7879=>600,7880=>600,7881=>600,7882=>600,7883=>600,7884=>600,7885=>600,7886=>600,7887=>600, +7888=>600,7889=>600,7890=>600,7891=>600,7892=>600,7893=>600,7894=>600,7895=>600,7896=>600,7897=>600, +7898=>600,7899=>600,7900=>600,7901=>600,7902=>600,7903=>600,7904=>600,7905=>600,7906=>600,7907=>600, +7908=>600,7909=>600,7910=>600,7911=>600,7912=>600,7913=>600,7914=>600,7915=>600,7916=>600,7917=>600, +7918=>600,7919=>600,7920=>600,7921=>600,7922=>600,7923=>600,7924=>600,7925=>600,7926=>600,7927=>600, +7928=>600,7929=>600,8192=>600,8193=>600,8194=>600,8195=>600,8196=>600,8197=>600,8198=>600,8199=>600, +8200=>600,8201=>600,8202=>600,8203=>600,8204=>0,8205=>0,8206=>0,8207=>0,8208=>600,8209=>600, +8210=>600,8213=>600,8214=>600,8215=>600,8219=>600,8223=>600,8227=>600,8228=>600,8229=>600,8231=>600, +8232=>600,8233=>600,8234=>600,8235=>600,8236=>600,8237=>600,8238=>600,8239=>600,8241=>600,8242=>600, +8243=>600,8244=>600,8245=>600,8246=>600,8247=>600,8248=>600,8251=>600,8252=>600,8253=>600,8254=>600, +8255=>600,8256=>600,8257=>600,8258=>600,8259=>600,8260=>600,8261=>600,8262=>600,8263=>600,8264=>600, +8265=>600,8266=>600,8267=>600,8268=>600,8269=>600,8270=>600,8271=>600,8272=>600,8273=>600,8274=>600, +8275=>600,8276=>600,8277=>600,8278=>600,8279=>600,8280=>600,8281=>600,8282=>600,8283=>600,8284=>600, +8285=>600,8286=>600,8287=>600,8288=>600,8289=>600,8290=>600,8291=>600,8292=>600,8304=>600,8305=>600, +8308=>600,8309=>600,8310=>600,8311=>600,8312=>600,8313=>600,8314=>600,8315=>600,8316=>600,8317=>600, +8318=>600,8319=>600,8320=>600,8321=>600,8322=>600,8323=>600,8324=>600,8325=>600,8326=>600,8327=>600, +8328=>600,8329=>600,8330=>600,8331=>600,8332=>600,8333=>600,8334=>600,8336=>600,8337=>600,8338=>600, +8339=>600,8340=>600,8362=>600,8373=>600,8448=>600,8449=>600,8451=>600,8453=>600,8454=>600,8455=>600, +8457=>600,8462=>600,8465=>600,8466=>600,8467=>600,8470=>600,8472=>600,8476=>600,8480=>600,8481=>600, +8486=>600,8487=>600,8489=>600,8490=>600,8491=>600,8494=>600,8498=>600,8501=>600,8502=>600,8503=>600, +8504=>600,8506=>600,8507=>600,8513=>600,8514=>600,8515=>600,8516=>600,8523=>600,8525=>600,8526=>600, +8531=>600,8532=>600,8533=>600,8534=>600,8535=>600,8536=>600,8537=>600,8538=>600,8539=>600,8540=>600, +8541=>600,8542=>600,8543=>600,8544=>600,8545=>600,8546=>600,8547=>600,8548=>600,8549=>600,8550=>600, +8553=>600,8556=>600,8557=>600,8558=>600,8559=>600,8560=>600,8564=>600,8569=>600,8572=>600,8573=>600, +8574=>600,8575=>600,8592=>600,8593=>600,8594=>600,8595=>600,8596=>600,8704=>600,8706=>600,8707=>600, +8709=>600,8710=>600,8711=>600,8712=>600,8713=>600,8714=>600,8715=>600,8716=>600,8717=>600,8719=>600, +8720=>600,8721=>600,8722=>600,8723=>600,8725=>600,8727=>600,8729=>600,8730=>600,8731=>600,8732=>600, +8733=>600,8734=>600,8756=>600,8800=>600,8801=>600,8804=>600,8805=>600,9251=>600,9674=>600,9824=>600, +9825=>600,9826=>600,9827=>600,9828=>600,9829=>600,9830=>600,9831=>600,9833=>600,9834=>600,9835=>600, +9836=>600,9837=>600,9838=>600,9839=>600,11799=>600,42888=>600,42889=>600,42890=>600,42891=>600,42892=>600, +64256=>600,64257=>600,64258=>600,64285=>600,64287=>600,64288=>600,64298=>600,64299=>600,64300=>600,64301=>600, +64302=>600,64303=>600,64304=>600,64305=>600,64306=>600,64307=>600,64308=>600,64309=>600,64310=>600,64312=>600, +64313=>600,64314=>600,64315=>600,64316=>600,64318=>600,64320=>600,64321=>600,64323=>600,64324=>600,64326=>600, +64327=>600,64328=>600,64329=>600,64330=>600,64331=>600,64332=>600,64333=>600,64334=>600,64335=>600,65533=>600); +$enc=''; +$diff=''; +$file='freemonobi.z'; +$ctg='freemonobi.ctg.z'; +$originalsize=169936; +// --- EOF --- --- /dev/null +++ b/tcpdf/fonts/freemonoi.php @@ -1,1 +1,226 @@ - +800,'Descent'=>-200,'CapHeight'=>44,'Flags'=>96,'FontBBox'=>'[-644 -200 816 800]','ItalicAngle'=>-12,'StemV'=>70,'MissingWidth'=>600); +$up=-125; +$ut=50; +$dw=600; +$cw=array( +32=>600,33=>600,34=>600,35=>600,36=>600,37=>600,38=>600,39=>600,40=>600,41=>600, +42=>600,43=>600,44=>600,45=>600,46=>600,47=>600,48=>600,49=>600,50=>600,51=>600, +52=>600,53=>600,54=>600,55=>600,56=>600,57=>600,58=>600,59=>600,60=>600,61=>600, +62=>600,63=>600,64=>600,65=>600,66=>600,67=>600,68=>600,69=>600,70=>600,71=>600, +72=>600,73=>600,74=>600,75=>600,76=>600,77=>600,78=>600,79=>600,80=>600,81=>600, +82=>600,83=>600,84=>600,85=>600,86=>600,87=>600,88=>600,89=>600,90=>600,91=>600, +92=>600,93=>600,94=>600,95=>600,96=>600,97=>600,98=>600,99=>600,100=>600,101=>600, +102=>600,103=>600,104=>600,105=>600,106=>600,107=>600,108=>600,109=>600,110=>600,111=>600, +112=>600,113=>600,114=>600,115=>600,116=>600,117=>600,118=>600,119=>600,120=>600,121=>600, +122=>600,123=>600,124=>600,125=>600,126=>600,8364=>600,8218=>600,402=>600,8222=>600,8230=>600, +8224=>600,8225=>600,710=>600,8240=>600,352=>600,8249=>600,338=>600,381=>600,8216=>600,8217=>600, +8220=>600,8221=>600,8226=>600,8211=>600,8212=>600,732=>600,8482=>600,353=>600,8250=>600,339=>600, +382=>600,376=>600,160=>600,161=>600,162=>600,163=>600,164=>600,165=>600,166=>600,167=>600, +168=>600,169=>600,170=>600,171=>600,172=>600,173=>600,174=>600,175=>600,176=>600,177=>600, +178=>600,179=>600,180=>600,181=>600,182=>600,183=>600,184=>600,185=>600,186=>600,187=>600, +188=>600,189=>600,190=>600,191=>600,192=>600,193=>600,194=>600,195=>600,196=>600,197=>600, +198=>600,199=>600,200=>600,201=>600,202=>600,203=>600,204=>600,205=>600,206=>600,207=>600, +208=>600,209=>600,210=>600,211=>600,212=>600,213=>600,214=>600,215=>600,216=>600,217=>600, +218=>600,219=>600,220=>600,221=>600,222=>600,223=>600,224=>600,225=>600,226=>600,227=>600, +228=>600,229=>600,230=>600,231=>600,232=>600,233=>600,234=>600,235=>600,236=>600,237=>600, +238=>600,239=>600,240=>600,241=>600,242=>600,243=>600,244=>600,245=>600,246=>600,247=>600, +248=>600,249=>600,250=>600,251=>600,252=>600,253=>600,254=>600,255=>600,256=>600,257=>600, +258=>600,259=>600,260=>600,261=>600,262=>600,263=>600,264=>600,265=>600,266=>600,267=>600, +268=>600,269=>600,270=>600,271=>600,272=>600,273=>600,274=>600,275=>600,276=>600,277=>600, +278=>600,279=>600,280=>600,281=>600,282=>600,283=>600,284=>600,285=>600,286=>600,287=>600, +288=>600,289=>600,290=>600,291=>600,292=>600,293=>600,294=>600,295=>600,296=>600,297=>600, +298=>600,299=>600,300=>600,301=>600,302=>600,303=>600,304=>600,305=>600,306=>600,307=>600, +308=>600,309=>600,310=>600,311=>600,312=>600,313=>600,314=>600,315=>600,316=>600,317=>600, +318=>600,319=>600,320=>600,321=>600,322=>600,323=>600,324=>600,325=>600,326=>600,327=>600, +328=>600,329=>600,330=>600,331=>600,332=>600,333=>600,334=>600,335=>600,336=>600,337=>600, +340=>600,341=>600,342=>600,343=>600,344=>600,345=>600,346=>600,347=>600,348=>600,349=>600, +350=>600,351=>600,354=>600,355=>600,356=>600,357=>600,358=>600,359=>600,360=>600,361=>600, +362=>600,363=>600,364=>600,365=>600,366=>600,367=>600,368=>600,369=>600,370=>600,371=>600, +372=>600,373=>600,374=>600,375=>600,377=>600,378=>600,379=>600,380=>600,383=>600,384=>600, +385=>600,386=>600,387=>600,388=>600,389=>600,390=>600,391=>600,392=>600,393=>600,394=>600, +395=>600,396=>600,397=>600,398=>600,399=>600,400=>600,401=>600,403=>600,404=>600,405=>600, +406=>600,407=>600,408=>600,409=>600,410=>600,411=>600,412=>600,413=>600,414=>600,415=>600, +416=>600,417=>600,418=>600,419=>600,420=>600,421=>600,422=>600,423=>600,424=>600,425=>600, +426=>600,427=>600,428=>600,429=>600,430=>600,431=>600,432=>600,433=>600,434=>600,435=>600, +436=>600,437=>600,438=>600,439=>600,440=>600,441=>600,442=>600,443=>600,444=>600,445=>600, +446=>600,447=>600,448=>600,449=>600,450=>600,451=>600,452=>600,453=>600,454=>600,455=>600, +456=>600,457=>600,458=>600,459=>600,460=>600,461=>600,462=>600,463=>600,464=>600,465=>600, +466=>600,467=>600,468=>600,469=>600,470=>600,471=>600,472=>600,473=>600,474=>600,475=>600, +476=>600,477=>600,478=>600,479=>600,480=>600,481=>600,482=>600,483=>600,484=>600,485=>600, +486=>600,487=>600,488=>600,489=>600,490=>600,491=>600,492=>600,493=>600,494=>600,495=>600, +496=>600,497=>600,498=>600,499=>600,500=>600,501=>600,502=>600,503=>600,504=>600,505=>600, +506=>600,507=>600,508=>600,509=>600,510=>600,511=>600,512=>600,513=>600,514=>600,515=>600, +516=>600,517=>600,518=>600,519=>600,520=>600,521=>600,522=>600,523=>600,524=>600,525=>600, +526=>600,527=>600,528=>600,529=>600,530=>600,531=>600,532=>600,533=>600,534=>600,535=>600, +536=>600,537=>600,538=>600,539=>600,540=>600,541=>600,542=>600,543=>600,544=>600,548=>600, +549=>600,550=>600,551=>600,552=>600,553=>600,554=>600,555=>600,556=>600,557=>600,558=>600, +559=>600,560=>600,561=>600,562=>600,563=>600,567=>600,592=>600,593=>600,594=>600,595=>600, +596=>600,597=>600,598=>600,599=>600,600=>600,601=>600,602=>600,603=>600,604=>600,605=>600, +606=>600,607=>600,608=>600,609=>600,610=>600,611=>600,612=>600,613=>600,614=>600,615=>600, +616=>600,617=>600,618=>600,619=>600,620=>600,621=>600,622=>600,623=>600,624=>600,625=>600, +626=>600,627=>600,628=>600,629=>600,630=>600,631=>600,632=>600,633=>600,634=>600,635=>600, +636=>600,637=>600,638=>600,639=>600,640=>600,641=>600,642=>600,643=>600,644=>600,645=>600, +646=>600,647=>600,648=>600,649=>600,650=>600,651=>600,652=>600,653=>600,654=>600,655=>600, +656=>600,657=>600,658=>600,659=>600,660=>600,661=>600,662=>600,663=>600,664=>600,665=>600, +666=>600,667=>600,668=>600,669=>600,670=>600,671=>600,672=>600,673=>600,674=>600,675=>600, +676=>600,677=>600,678=>600,679=>600,680=>600,681=>600,682=>600,683=>600,684=>600,685=>600, +686=>600,687=>600,688=>600,689=>600,690=>600,691=>600,692=>600,693=>600,694=>600,695=>600, +696=>600,697=>600,698=>600,699=>600,700=>600,701=>600,702=>600,703=>600,704=>600,705=>600, +706=>600,707=>600,708=>600,709=>600,711=>600,712=>600,713=>600,714=>600,715=>600,716=>600, +717=>600,718=>600,719=>600,720=>600,721=>600,722=>600,723=>600,724=>600,725=>600,726=>600, +727=>600,728=>600,729=>600,730=>600,731=>600,733=>600,734=>600,735=>600,736=>600,737=>600, +738=>600,739=>600,740=>600,741=>600,742=>600,743=>600,744=>600,745=>600,746=>600,747=>600, +748=>600,749=>600,750=>600,751=>600,752=>600,753=>600,754=>600,755=>600,756=>600,757=>600, +758=>600,759=>600,760=>600,761=>600,762=>600,763=>600,764=>600,765=>600,766=>600,767=>600, +768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0, +778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0, +788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0,797=>0, +798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,807=>0, +808=>0,809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0, +818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0,827=>0, +828=>0,829=>0,830=>0,831=>0,832=>0,833=>0,834=>0,835=>0,836=>0,837=>0, +838=>0,839=>0,840=>0,841=>0,843=>0,844=>0,845=>0,848=>0,849=>0,850=>0, +851=>0,852=>0,853=>0,854=>0,855=>0,856=>0,857=>0,858=>0,884=>600,885=>600, +890=>600,894=>600,900=>600,901=>600,902=>600,903=>600,904=>600,905=>600,906=>600,908=>600, +910=>600,911=>600,912=>600,913=>600,914=>600,915=>600,916=>600,917=>600,918=>600,919=>600, +920=>600,921=>600,922=>600,923=>600,924=>600,925=>600,926=>600,927=>600,928=>600,929=>600, +931=>600,932=>600,933=>600,934=>600,935=>600,936=>600,937=>600,938=>600,939=>600,940=>600, +941=>600,942=>600,943=>600,944=>600,945=>600,946=>600,947=>600,948=>600,949=>600,950=>600, +951=>600,952=>600,953=>600,954=>600,955=>600,956=>600,957=>600,958=>600,959=>600,960=>600, +961=>600,962=>600,963=>600,964=>600,965=>600,966=>600,967=>600,968=>600,969=>600,970=>600, +971=>600,972=>600,973=>600,974=>600,976=>600,977=>600,978=>600,979=>600,980=>600,981=>600, +982=>600,986=>600,987=>600,988=>600,1008=>600,1009=>600,1012=>600,1013=>600,1024=>600,1025=>600, +1026=>600,1027=>600,1028=>600,1029=>600,1030=>600,1031=>600,1032=>600,1033=>600,1034=>600,1035=>600, +1036=>600,1037=>600,1038=>600,1039=>600,1040=>600,1041=>600,1042=>600,1043=>600,1044=>600,1045=>600, +1046=>600,1047=>600,1048=>600,1049=>600,1050=>600,1051=>600,1052=>600,1053=>600,1054=>600,1055=>600, +1056=>600,1057=>600,1058=>600,1059=>600,1060=>600,1061=>600,1062=>600,1063=>600,1064=>600,1065=>600, +1066=>600,1067=>600,1068=>600,1069=>600,1070=>600,1071=>600,1072=>600,1073=>600,1074=>600,1075=>600, +1076=>600,1077=>600,1078=>600,1079=>600,1080=>600,1081=>600,1082=>600,1083=>600,1084=>600,1085=>600, +1086=>600,1087=>600,1088=>600,1089=>600,1090=>600,1091=>600,1092=>600,1093=>600,1094=>600,1095=>600, +1096=>600,1097=>600,1098=>600,1099=>600,1100=>600,1101=>600,1102=>600,1103=>600,1104=>600,1105=>600, +1106=>600,1107=>600,1108=>600,1109=>600,1110=>600,1111=>600,1112=>600,1113=>600,1114=>600,1115=>600, +1116=>600,1117=>600,1118=>600,1119=>600,1120=>600,1121=>600,1122=>600,1123=>600,1124=>600,1126=>600, +1127=>600,1128=>600,1130=>600,1131=>600,1132=>600,1133=>600,1136=>600,1137=>600,1138=>600,1140=>600, +1141=>600,1142=>600,1143=>600,1148=>600,1149=>600,1155=>0,1156=>0,1157=>0,1158=>0,1159=>0, +1162=>600,1163=>600,1164=>600,1165=>600,1166=>600,1167=>600,1168=>600,1169=>600,1170=>600,1171=>600, +1172=>600,1173=>600,1174=>600,1175=>600,1176=>600,1177=>600,1178=>600,1179=>600,1180=>600,1181=>600, +1182=>600,1183=>600,1184=>600,1185=>600,1186=>600,1187=>600,1188=>600,1189=>600,1190=>600,1191=>600, +1192=>600,1193=>600,1194=>600,1195=>600,1196=>600,1197=>600,1198=>600,1199=>600,1200=>600,1201=>600, +1202=>600,1203=>600,1204=>600,1205=>600,1206=>600,1207=>600,1208=>600,1209=>600,1210=>600,1211=>600, +1212=>600,1213=>600,1214=>600,1215=>600,1216=>600,1217=>600,1218=>600,1219=>600,1220=>600,1221=>600, +1222=>600,1223=>600,1224=>600,1225=>600,1226=>600,1227=>600,1228=>600,1229=>600,1230=>600,1231=>600, +1232=>600,1233=>600,1234=>600,1235=>600,1236=>600,1237=>600,1238=>600,1239=>600,1240=>600,1241=>600, +1242=>600,1243=>600,1244=>600,1245=>600,1246=>600,1247=>600,1248=>600,1249=>600,1250=>600,1251=>600, +1252=>600,1253=>600,1254=>600,1255=>600,1256=>600,1257=>600,1258=>600,1259=>600,1260=>600,1261=>600, +1262=>600,1263=>600,1264=>600,1265=>600,1266=>600,1267=>600,1268=>600,1269=>600,1270=>600,1271=>600, +1272=>600,1273=>600,1296=>600,1297=>600,1298=>600,1299=>600,1306=>600,1307=>600,1308=>600,1309=>600, +1310=>600,1311=>600,1329=>600,1330=>600,1331=>600,1332=>600,1333=>600,1334=>600,1335=>600,1336=>600, +1337=>600,1338=>600,1339=>600,1340=>600,1341=>600,1342=>600,1343=>600,1344=>600,1345=>600,1346=>600, +1347=>600,1348=>600,1349=>600,1350=>600,1351=>600,1352=>600,1353=>600,1354=>600,1355=>600,1356=>600, +1357=>600,1358=>600,1359=>600,1360=>600,1361=>600,1362=>600,1363=>600,1364=>600,1365=>600,1366=>600, +1369=>600,1370=>600,1371=>600,1372=>600,1373=>600,1374=>600,1375=>600,1377=>600,1378=>600,1379=>600, +1380=>600,1381=>600,1382=>600,1383=>600,1384=>600,1385=>600,1386=>600,1387=>600,1388=>600,1389=>600, +1390=>600,1391=>600,1392=>600,1393=>600,1394=>600,1395=>600,1396=>600,1397=>600,1398=>600,1399=>600, +1400=>600,1401=>600,1402=>600,1403=>600,1404=>600,1405=>600,1406=>600,1407=>600,1408=>600,1409=>600, +1410=>600,1411=>600,1412=>600,1413=>600,1414=>600,1415=>600,1417=>600,1418=>600,1456=>0,1457=>0, +1458=>0,1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1467=>0,1468=>0, +1469=>0,1470=>600,1471=>0,1472=>600,1473=>0,1474=>0,1475=>600,1476=>0,1488=>600,1489=>600, +1490=>600,1491=>600,1492=>600,1493=>600,1494=>600,1495=>600,1496=>600,1497=>600,1498=>600,1499=>600, +1500=>600,1501=>600,1502=>600,1503=>600,1504=>600,1505=>600,1506=>600,1507=>600,1508=>600,1509=>600, +1510=>600,1511=>600,1512=>600,1513=>600,1514=>600,1520=>600,1521=>600,1522=>600,1523=>600,1524=>600, +4304=>600,4305=>600,4306=>600,4307=>600,4308=>600,4309=>600,4310=>600,4311=>600,4312=>600,4313=>600, +4314=>600,4315=>600,4316=>600,4317=>600,4318=>600,4319=>600,4320=>600,4321=>600,4322=>600,4323=>600, +4324=>600,4325=>600,4326=>600,4327=>600,4328=>600,4329=>600,4330=>600,4331=>600,4332=>600,4333=>600, +4334=>600,4335=>600,4336=>600,4337=>600,4338=>600,4339=>600,4340=>600,4341=>600,4345=>600,4347=>600, +4348=>600,7680=>600,7681=>600,7682=>600,7683=>600,7684=>600,7685=>600,7686=>600,7687=>600,7688=>600, +7689=>600,7690=>600,7691=>600,7692=>600,7693=>600,7694=>600,7695=>600,7696=>600,7697=>600,7698=>600, +7699=>600,7700=>600,7701=>600,7702=>600,7703=>600,7704=>600,7705=>600,7706=>600,7707=>600,7708=>600, +7709=>600,7710=>600,7711=>600,7712=>600,7713=>600,7714=>600,7715=>600,7716=>600,7717=>600,7718=>600, +7719=>600,7720=>600,7721=>600,7722=>600,7723=>600,7724=>600,7725=>600,7726=>600,7727=>600,7728=>600, +7729=>600,7730=>600,7731=>600,7732=>600,7733=>600,7734=>600,7735=>600,7736=>600,7737=>600,7738=>600, +7739=>600,7740=>600,7741=>600,7742=>600,7743=>600,7744=>600,7745=>600,7746=>600,7747=>600,7748=>600, +7749=>600,7750=>600,7751=>600,7752=>600,7753=>600,7754=>600,7755=>600,7756=>600,7757=>600,7758=>600, +7759=>600,7760=>600,7761=>600,7762=>600,7763=>600,7764=>600,7765=>600,7766=>600,7767=>600,7768=>600, +7769=>600,7770=>600,7771=>600,7772=>600,7773=>600,7774=>600,7775=>600,7776=>600,7777=>600,7778=>600, +7779=>600,7780=>600,7781=>600,7782=>600,7783=>600,7784=>600,7785=>600,7786=>600,7787=>600,7788=>600, +7789=>600,7790=>600,7791=>600,7792=>600,7793=>600,7794=>600,7795=>600,7796=>600,7797=>600,7798=>600, +7799=>600,7800=>600,7801=>600,7802=>600,7803=>600,7804=>600,7805=>600,7806=>600,7807=>600,7808=>600, +7809=>600,7810=>600,7811=>600,7812=>600,7813=>600,7814=>600,7815=>600,7816=>600,7817=>600,7818=>600, +7819=>600,7820=>600,7821=>600,7822=>600,7823=>600,7824=>600,7825=>600,7826=>600,7827=>600,7828=>600, +7829=>600,7830=>600,7831=>600,7832=>600,7833=>600,7834=>600,7835=>600,7840=>600,7841=>600,7842=>600, +7843=>600,7844=>600,7845=>600,7846=>600,7847=>600,7848=>600,7849=>600,7850=>600,7851=>600,7852=>600, +7853=>600,7854=>600,7855=>600,7856=>600,7857=>600,7858=>600,7859=>600,7860=>600,7861=>600,7862=>600, +7863=>600,7864=>600,7865=>600,7866=>600,7867=>600,7868=>600,7869=>600,7870=>600,7871=>600,7872=>600, +7873=>600,7874=>600,7875=>600,7876=>600,7877=>600,7878=>600,7879=>600,7880=>600,7881=>600,7882=>600, +7883=>600,7884=>600,7885=>600,7886=>600,7887=>600,7888=>600,7889=>600,7890=>600,7891=>600,7892=>600, +7893=>600,7894=>600,7895=>600,7896=>600,7897=>600,7898=>600,7899=>600,7900=>600,7901=>600,7902=>600, +7903=>600,7904=>600,7905=>600,7906=>600,7907=>600,7908=>600,7909=>600,7910=>600,7911=>600,7912=>600, +7913=>600,7914=>600,7915=>600,7916=>600,7917=>600,7918=>600,7919=>600,7920=>600,7921=>600,7922=>600, +7923=>600,7924=>600,7925=>600,7926=>600,7927=>600,7928=>600,7929=>600,7936=>600,7937=>600,7938=>600, +7939=>600,7940=>600,7941=>600,7942=>600,7943=>600,7944=>600,7945=>600,7946=>600,7947=>600,7948=>600, +7949=>600,7950=>600,7951=>600,7952=>600,7953=>600,7954=>600,7955=>600,7956=>600,7957=>600,7960=>600, +7961=>600,7962=>600,7963=>600,7964=>600,7965=>600,7968=>600,7969=>600,7970=>600,7971=>600,7972=>600, +7973=>600,7974=>600,7975=>600,7976=>600,7977=>600,7978=>600,7979=>600,7980=>600,7981=>600,7982=>600, +7983=>600,7984=>600,7985=>600,7986=>600,7987=>600,7988=>600,7989=>600,7990=>600,7991=>600,7992=>600, +7993=>600,7994=>600,7995=>600,7996=>600,7997=>600,7998=>600,7999=>600,8000=>600,8001=>600,8002=>600, +8003=>600,8004=>600,8005=>600,8008=>600,8009=>600,8010=>600,8011=>600,8012=>600,8013=>600,8016=>600, +8017=>600,8018=>600,8019=>600,8020=>600,8021=>600,8022=>600,8023=>600,8025=>600,8027=>600,8029=>600, +8031=>600,8032=>600,8033=>600,8034=>600,8035=>600,8036=>600,8037=>600,8038=>600,8039=>600,8040=>600, +8041=>600,8042=>600,8043=>600,8044=>600,8045=>600,8046=>600,8047=>600,8048=>600,8049=>600,8050=>600, +8051=>600,8052=>600,8053=>600,8054=>600,8055=>600,8056=>600,8057=>600,8058=>600,8059=>600,8060=>600, +8061=>600,8064=>600,8065=>600,8066=>600,8067=>600,8068=>600,8069=>600,8070=>600,8071=>600,8072=>600, +8073=>600,8074=>600,8075=>600,8076=>600,8077=>600,8078=>600,8079=>600,8080=>600,8081=>600,8082=>600, +8083=>600,8084=>600,8085=>600,8086=>600,8087=>600,8088=>600,8089=>600,8090=>600,8091=>600,8092=>600, +8093=>600,8094=>600,8095=>600,8096=>600,8097=>600,8098=>600,8099=>600,8100=>600,8101=>600,8102=>600, +8103=>600,8104=>600,8105=>600,8106=>600,8107=>600,8108=>600,8109=>600,8110=>600,8111=>600,8112=>600, +8113=>600,8114=>600,8115=>600,8116=>600,8118=>600,8119=>600,8120=>600,8121=>600,8122=>600,8123=>600, +8124=>600,8125=>600,8126=>600,8127=>600,8128=>600,8129=>600,8130=>600,8131=>600,8132=>600,8134=>600, +8135=>600,8136=>600,8137=>600,8138=>600,8139=>600,8140=>600,8141=>600,8142=>600,8143=>600,8144=>600, +8145=>600,8146=>600,8147=>600,8150=>600,8151=>600,8152=>600,8153=>600,8154=>600,8155=>600,8157=>600, +8158=>600,8159=>600,8160=>600,8161=>600,8162=>600,8163=>600,8164=>600,8165=>600,8166=>600,8167=>600, +8168=>600,8169=>600,8170=>600,8171=>600,8172=>600,8173=>600,8174=>600,8175=>600,8178=>600,8179=>600, +8180=>600,8182=>600,8183=>600,8184=>600,8185=>600,8186=>600,8187=>600,8188=>600,8189=>600,8190=>600, +8192=>600,8193=>600,8194=>600,8195=>600,8196=>600,8197=>600,8198=>600,8199=>600,8200=>600,8201=>600, +8202=>600,8203=>600,8204=>0,8205=>0,8206=>0,8207=>0,8208=>600,8209=>600,8210=>600,8213=>600, +8214=>600,8215=>600,8219=>600,8223=>600,8227=>600,8228=>600,8229=>600,8231=>600,8232=>600,8233=>600, +8234=>600,8235=>600,8236=>600,8237=>600,8238=>600,8239=>600,8241=>600,8242=>600,8243=>600,8244=>600, +8245=>600,8246=>600,8247=>600,8248=>600,8251=>600,8252=>600,8253=>600,8254=>600,8255=>600,8256=>600, +8257=>600,8258=>600,8259=>600,8260=>600,8261=>600,8262=>600,8263=>600,8264=>600,8265=>600,8266=>600, +8267=>600,8268=>600,8269=>600,8270=>600,8271=>600,8272=>600,8273=>600,8274=>600,8275=>600,8276=>600, +8277=>600,8278=>600,8279=>600,8280=>600,8281=>600,8282=>600,8283=>600,8284=>600,8285=>600,8286=>600, +8287=>600,8288=>600,8289=>600,8290=>600,8291=>600,8292=>600,8304=>600,8305=>600,8308=>600,8309=>600, +8310=>600,8311=>600,8312=>600,8313=>600,8314=>600,8315=>600,8316=>600,8317=>600,8318=>600,8319=>600, +8320=>600,8321=>600,8322=>600,8323=>600,8324=>600,8325=>600,8326=>600,8327=>600,8328=>600,8329=>600, +8330=>600,8331=>600,8332=>600,8333=>600,8334=>600,8336=>600,8337=>600,8338=>600,8339=>600,8340=>600, +8355=>600,8356=>600,8359=>600,8362=>600,8373=>600,8448=>600,8449=>600,8450=>600,8451=>600,8452=>600, +8453=>600,8454=>600,8455=>600,8456=>600,8457=>600,8461=>600,8462=>600,8463=>600,8464=>600,8465=>600, +8466=>600,8467=>600,8468=>600,8469=>600,8470=>600,8471=>600,8472=>600,8473=>600,8474=>600,8476=>600, +8477=>600,8478=>600,8480=>600,8481=>600,8484=>600,8486=>600,8487=>600,8489=>600,8490=>600,8491=>600, +8494=>600,8498=>600,8501=>600,8502=>600,8503=>600,8504=>600,8505=>600,8506=>600,8507=>600,8513=>600, +8514=>600,8515=>600,8516=>600,8523=>600,8525=>600,8526=>600,8531=>600,8532=>600,8533=>600,8534=>600, +8535=>600,8536=>600,8537=>600,8538=>600,8539=>600,8540=>600,8541=>600,8542=>600,8543=>600,8544=>600, +8545=>600,8546=>600,8547=>600,8548=>600,8549=>600,8550=>600,8551=>600,8552=>600,8553=>600,8554=>600, +8555=>600,8556=>600,8557=>600,8558=>600,8559=>600,8560=>600,8561=>600,8562=>600,8563=>600,8564=>600, +8565=>600,8566=>600,8567=>600,8568=>600,8569=>600,8570=>600,8571=>600,8572=>600,8573=>600,8574=>600, +8575=>600,8592=>600,8593=>600,8594=>600,8595=>600,8596=>600,8597=>600,8598=>600,8599=>600,8600=>600, +8601=>600,8616=>600,8704=>600,8706=>600,8707=>600,8709=>600,8710=>600,8711=>600,8712=>600,8713=>600, +8715=>600,8716=>600,8721=>600,8722=>600,8723=>600,8725=>600,8729=>600,8730=>600,8733=>600,8734=>600, +8745=>600,8746=>600,8747=>600,8756=>600,8764=>600,8769=>600,8770=>600,8773=>600,8776=>600,8800=>600, +8801=>600,8804=>600,8805=>600,8834=>600,8835=>600,8836=>600,8837=>600,8838=>600,8839=>600,9001=>600, +9002=>600,9251=>600,9674=>600,9675=>600,9711=>600,9824=>600,9825=>600,9826=>600,9827=>600,9828=>600, +9829=>600,9830=>600,9831=>600,9833=>600,9834=>600,9835=>600,9836=>600,9837=>600,9838=>600,9839=>600, +11799=>600,42888=>600,42889=>600,42890=>600,42891=>600,42892=>600,64256=>600,64257=>600,64258=>600,64285=>600, +64286=>600,64287=>600,64288=>600,64289=>600,64290=>600,64291=>600,64292=>600,64293=>600,64294=>600,64295=>600, +64296=>600,64297=>600,64298=>600,64299=>600,64300=>600,64301=>600,64302=>600,64303=>600,64304=>600,64305=>600, +64306=>600,64307=>600,64308=>600,64309=>600,64310=>600,64312=>600,64313=>600,64314=>600,64315=>600,64316=>600, +64318=>600,64320=>600,64321=>600,64323=>600,64324=>600,64326=>600,64327=>600,64328=>600,64329=>600,64330=>600, +64331=>600,64332=>600,64333=>600,64334=>600,64335=>600,65533=>600); +$enc=''; +$diff=''; +$file='freemonoi.z'; +$ctg='freemonoi.ctg.z'; +$originalsize=208128; +// --- EOF --- --- /dev/null +++ b/tcpdf/fonts/freesans.php @@ -1,1 +1,437 @@ - +1000,'Descent'=>-300,'CapHeight'=>22,'Flags'=>96,'FontBBox'=>'[-1166 -550 1518 1050]','ItalicAngle'=>19.3,'StemV'=>70,'MissingWidth'=>600); +$up=-176; +$ut=50; +$dw=600; +$cw=array( +32=>278,33=>278,34=>355,35=>556,36=>556,37=>889,38=>667,39=>191,40=>333,41=>333, +42=>389,43=>584,44=>278,45=>333,46=>278,47=>278,48=>556,49=>556,50=>556,51=>556, +52=>556,53=>556,54=>556,55=>556,56=>556,57=>556,58=>278,59=>278,60=>584,61=>584, +62=>584,63=>556,64=>1015,65=>667,66=>667,67=>722,68=>722,69=>667,70=>611,71=>778, +72=>722,73=>278,74=>500,75=>667,76=>556,77=>833,78=>722,79=>778,80=>667,81=>778, +82=>722,83=>667,84=>611,85=>722,86=>667,87=>944,88=>667,89=>667,90=>611,91=>278, +92=>278,93=>277,94=>469,95=>556,96=>333,97=>556,98=>556,99=>500,100=>556,101=>556, +102=>278,103=>556,104=>556,105=>222,106=>222,107=>500,108=>222,109=>833,110=>556,111=>556, +112=>556,113=>556,114=>333,115=>500,116=>278,117=>556,118=>500,119=>722,120=>500,121=>500, +122=>500,123=>334,124=>260,125=>334,126=>584,8364=>655,8218=>222,402=>278,8222=>333,8230=>1000, +8224=>556,8225=>556,710=>333,8240=>1000,352=>667,8249=>250,338=>1000,381=>611,8216=>222,8217=>221, +8220=>333,8221=>333,8226=>350,8211=>556,8212=>1000,732=>333,8482=>1000,353=>500,8250=>250,339=>938, +382=>500,376=>667,160=>278,161=>278,162=>556,163=>556,164=>556,165=>556,166=>260,167=>556, +168=>333,169=>737,170=>370,171=>448,172=>584,173=>333,174=>737,175=>333,176=>606,177=>584, +178=>350,179=>350,180=>333,181=>556,182=>537,183=>278,184=>333,185=>350,186=>365,187=>448, +188=>869,189=>869,190=>879,191=>556,192=>667,193=>667,194=>667,195=>667,196=>667,197=>667, +198=>1000,199=>722,200=>667,201=>667,202=>667,203=>667,204=>278,205=>278,206=>278,207=>278, +208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>584,216=>778,217=>722, +218=>722,219=>722,220=>722,221=>667,222=>666,223=>611,224=>556,225=>556,226=>556,227=>556, +228=>556,229=>556,230=>896,231=>500,232=>556,233=>556,234=>556,235=>556,236=>251,237=>251, +238=>251,239=>251,240=>556,241=>556,242=>556,243=>556,244=>556,245=>556,246=>556,247=>584, +248=>611,249=>556,250=>556,251=>556,252=>556,253=>500,254=>555,255=>500,256=>667,257=>556, +258=>667,259=>556,260=>667,261=>556,262=>722,263=>500,264=>722,265=>500,266=>722,267=>500, +268=>722,269=>500,270=>722,271=>722,272=>722,273=>556,274=>667,275=>556,276=>667,277=>556, +278=>667,279=>556,280=>667,281=>556,282=>667,283=>556,284=>778,285=>556,286=>778,287=>556, +288=>778,289=>556,290=>778,291=>556,292=>722,293=>556,294=>722,295=>556,296=>278,297=>251, +298=>278,299=>251,300=>278,301=>251,302=>278,303=>222,304=>278,305=>251,306=>740,307=>384, +308=>500,309=>222,310=>667,311=>500,312=>500,313=>556,314=>222,315=>556,316=>222,317=>556, +318=>367,319=>556,320=>500,321=>556,322=>222,323=>722,324=>556,325=>722,326=>556,327=>722, +328=>556,329=>702,330=>710,331=>556,332=>778,333=>556,334=>778,335=>556,336=>778,337=>556, +340=>722,341=>333,342=>722,343=>333,344=>722,345=>333,346=>667,347=>500,348=>667,349=>500, +350=>667,351=>500,354=>611,355=>278,356=>611,357=>443,358=>611,359=>278,360=>722,361=>556, +362=>722,363=>556,364=>722,365=>556,366=>722,367=>556,368=>722,369=>556,370=>722,371=>556, +372=>944,373=>722,374=>667,375=>500,377=>611,378=>500,379=>611,380=>500,383=>278,384=>556, +385=>854,386=>668,387=>556,388=>717,389=>596,390=>722,391=>767,392=>575,393=>722,394=>899, +395=>667,396=>556,397=>564,398=>667,399=>722,400=>667,401=>611,403=>802,404=>667,405=>889, +406=>278,407=>345,408=>667,409=>500,410=>345,411=>560,412=>833,413=>722,414=>556,415=>778, +416=>788,417=>565,418=>944,419=>722,420=>842,421=>556,422=>666,423=>667,424=>500,425=>611, +426=>333,427=>278,428=>611,429=>278,430=>611,431=>776,432=>624,433=>778,434=>722,435=>722, +436=>556,437=>611,438=>500,439=>611,440=>611,441=>500,442=>500,443=>556,446=>556,447=>556, +448=>260,449=>370,450=>584,451=>278,452=>1311,453=>1208,454=>1056,455=>1056,456=>778,457=>444, +458=>1158,459=>944,460=>778,461=>667,462=>556,463=>278,464=>251,465=>778,466=>556,467=>722, +468=>556,469=>722,470=>556,471=>722,472=>556,473=>722,474=>556,475=>722,476=>556,477=>556, +478=>667,479=>556,480=>667,481=>556,482=>1000,483=>896,484=>778,485=>556,486=>778,487=>556, +488=>667,489=>500,490=>778,491=>556,492=>778,493=>556,494=>611,495=>526,496=>222,497=>1333, +498=>1222,499=>1056,500=>778,501=>556,503=>630,504=>722,505=>556,506=>667,507=>556,508=>1000, +509=>896,510=>778,511=>611,512=>667,513=>556,514=>667,515=>556,516=>667,517=>556,518=>667, +519=>556,520=>278,521=>251,522=>278,523=>251,524=>778,525=>556,526=>778,527=>556,528=>722, +529=>333,530=>722,531=>333,532=>722,533=>556,534=>722,535=>556,536=>667,537=>500,538=>611, +539=>278,540=>521,541=>393,542=>722,543=>556,548=>611,549=>500,550=>667,551=>556,552=>667, +553=>556,554=>778,555=>556,556=>778,557=>556,558=>778,559=>556,560=>778,561=>556,562=>667, +563=>500,567=>222,592=>556,593=>562,594=>571,595=>556,596=>500,597=>500,598=>608,599=>602, +600=>556,601=>556,602=>804,603=>500,604=>499,605=>742,606=>510,607=>283,608=>596,609=>556, +610=>556,611=>500,612=>556,613=>556,614=>556,615=>556,616=>268,617=>255,618=>278,619=>473, +620=>427,621=>260,622=>618,623=>833,624=>833,625=>833,626=>594,627=>596,628=>567,629=>556, +630=>778,631=>722,632=>730,633=>333,634=>333,635=>372,636=>333,637=>333,638=>386,639=>371, +640=>546,641=>546,642=>500,643=>299,644=>298,645=>309,646=>463,647=>278,648=>278,649=>596, +650=>626,651=>539,652=>500,653=>722,654=>500,655=>556,656=>565,657=>508,658=>526,659=>552, +660=>556,661=>556,662=>556,663=>722,664=>778,665=>506,666=>520,667=>623,668=>558,669=>469, +670=>550,671=>430,672=>602,673=>556,674=>556,675=>940,676=>956,677=>944,678=>689,679=>515, +680=>764,681=>786,682=>660,683=>597,684=>530,685=>486,686=>570,687=>631,688=>333,689=>333, +690=>167,691=>236,692=>236,693=>276,694=>359,695=>500,696=>330,697=>278,698=>454,699=>278, +700=>278,701=>278,702=>333,703=>333,704=>333,705=>333,706=>333,707=>333,708=>333,709=>333, +711=>333,712=>333,713=>333,714=>333,715=>333,716=>272,717=>333,718=>333,719=>333,720=>333, +721=>333,722=>333,723=>333,724=>333,725=>333,726=>333,727=>333,728=>333,729=>333,730=>333, +731=>333,733=>333,734=>333,735=>510,736=>333,737=>186,738=>333,739=>333,740=>334,741=>526, +742=>526,743=>526,744=>526,745=>526,746=>519,747=>519,748=>333,749=>333,750=>333,751=>333, +752=>333,753=>333,754=>333,755=>327,756=>261,757=>437,758=>437,759=>333,760=>278,761=>200, +762=>200,763=>200,764=>200,765=>333,766=>333,767=>333,768=>0,769=>0,770=>0,771=>0, +772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0, +782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0, +792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0, +802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0, +812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0, +822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0, +832=>0,833=>0,834=>0,835=>0,836=>0,837=>0,838=>0,839=>0,840=>0,841=>0, +842=>0,843=>0,844=>0,845=>0,846=>0,847=>0,848=>0,849=>0,850=>0,851=>0, +852=>0,853=>0,854=>0,855=>0,856=>0,857=>0,858=>0,859=>0,860=>0,861=>0, +862=>0,863=>0,864=>0,865=>0,866=>0,867=>0,868=>0,869=>0,870=>0,871=>0, +872=>0,873=>0,874=>0,875=>0,876=>0,877=>0,878=>0,879=>0,884=>278,885=>199, +890=>332,894=>278,900=>333,901=>333,902=>667,903=>275,904=>786,905=>828,906=>369,908=>833, +910=>845,911=>778,912=>286,913=>667,914=>667,915=>582,916=>778,917=>667,918=>628,919=>722, +920=>778,921=>278,922=>667,923=>667,924=>833,925=>722,926=>630,927=>778,928=>722,929=>667, +931=>628,932=>611,933=>667,934=>717,935=>667,936=>745,937=>778,938=>278,939=>667,940=>596, +941=>528,942=>548,943=>307,944=>538,945=>596,946=>542,947=>531,948=>564,949=>512,950=>455, +951=>548,952=>525,953=>286,954=>510,955=>551,956=>540,957=>500,958=>470,959=>546,960=>619, +961=>569,962=>547,963=>620,964=>492,965=>538,966=>741,967=>571,968=>662,969=>740,970=>286, +971=>538,972=>546,973=>538,974=>740,977=>580,978=>742,979=>845,980=>620,981=>741,982=>740, +983=>556,1008=>556,1009=>566,1012=>778,1013=>328,1024=>667,1025=>657,1026=>766,1027=>582,1028=>722, +1029=>667,1030=>278,1031=>278,1032=>500,1033=>1080,1034=>1014,1035=>766,1036=>628,1037=>730,1038=>613, +1039=>722,1040=>666,1041=>668,1042=>668,1043=>582,1044=>812,1045=>657,1046=>905,1047=>667,1048=>730, +1049=>730,1050=>632,1051=>674,1052=>846,1053=>721,1054=>796,1055=>721,1056=>654,1057=>722,1058=>611, +1059=>613,1060=>861,1061=>657,1062=>742,1063=>626,1064=>830,1065=>851,1066=>841,1067=>874,1068=>670, +1069=>717,1070=>1001,1071=>686,1072=>552,1073=>550,1074=>506,1075=>404,1076=>602,1077=>547,1078=>755, +1079=>499,1080=>567,1081=>567,1082=>489,1083=>517,1084=>618,1085=>558,1086=>550,1087=>557,1088=>577, +1089=>520,1090=>444,1091=>468,1092=>865,1093=>466,1094=>578,1095=>498,1096=>692,1097=>712,1098=>664, +1099=>690,1100=>521,1101=>520,1102=>759,1103=>543,1104=>549,1105=>549,1106=>577,1107=>404,1108=>519, +1109=>502,1110=>224,1111=>251,1112=>223,1113=>813,1114=>853,1115=>577,1116=>489,1117=>567,1118=>468, +1119=>558,1120=>942,1121=>693,1136=>762,1137=>662,1138=>800,1139=>550,1148=>942,1149=>693,1150=>942, +1151=>693,1154=>468,1155=>0,1156=>0,1157=>0,1158=>0,1159=>0,1160=>0,1161=>0,1162=>763, +1163=>583,1164=>689,1165=>526,1166=>652,1167=>572,1168=>601,1169=>397,1170=>589,1171=>392,1172=>591, +1173=>475,1174=>927,1175=>830,1176=>661,1177=>493,1178=>658,1179=>510,1180=>675,1181=>519,1182=>684, +1183=>514,1184=>839,1185=>653,1186=>740,1187=>570,1188=>987,1189=>714,1190=>1058,1191=>808,1192=>810, +1193=>645,1194=>722,1195=>516,1196=>611,1197=>402,1198=>668,1199=>578,1200=>668,1201=>588,1202=>664, +1203=>488,1204=>936,1205=>679,1206=>638,1207=>521,1208=>630,1209=>498,1210=>630,1211=>498,1212=>927, +1213=>699,1214=>927,1215=>699,1216=>254,1217=>905,1218=>755,1219=>668,1220=>512,1221=>696,1222=>524, +1223=>721,1224=>558,1225=>744,1226=>571,1227=>630,1228=>498,1229=>869,1230=>631,1231=>254,1232=>666, +1233=>552,1234=>666,1235=>552,1236=>1000,1237=>879,1238=>657,1239=>547,1240=>722,1241=>543,1242=>722, +1243=>543,1244=>905,1245=>755,1246=>667,1247=>499,1248=>611,1249=>540,1250=>730,1251=>567,1252=>730, +1253=>567,1254=>796,1255=>550,1256=>800,1257=>550,1258=>800,1259=>550,1260=>717,1261=>520,1262=>613, +1263=>468,1264=>613,1265=>468,1266=>613,1267=>468,1268=>626,1269=>498,1270=>582,1271=>395,1272=>874, +1273=>690,1296=>667,1297=>491,1298=>665,1299=>509,1306=>778,1307=>575,1308=>934,1309=>712,1310=>627, +1311=>489,1329=>720,1330=>696,1331=>750,1332=>725,1333=>699,1334=>751,1335=>446,1336=>703,1337=>790, +1338=>656,1339=>697,1340=>390,1341=>852,1342=>791,1343=>698,1344=>585,1345=>656,1346=>651,1347=>658, +1348=>759,1349=>595,1350=>772,1351=>603,1352=>703,1353=>648,1354=>698,1355=>744,1356=>738,1357=>703, +1358=>739,1359=>660,1360=>693,1361=>623,1362=>385,1363=>788,1364=>632,1365=>775,1366=>714,1369=>333, +1370=>222,1371=>200,1372=>333,1373=>333,1374=>333,1375=>333,1377=>833,1378=>551,1379=>572,1380=>569, +1381=>546,1382=>581,1383=>353,1384=>551,1385=>568,1386=>569,1387=>552,1388=>276,1389=>795,1390=>535, +1391=>553,1392=>537,1393=>512,1394=>568,1395=>552,1396=>531,1397=>249,1398=>527,1399=>405,1400=>551, +1401=>390,1402=>833,1403=>509,1404=>523,1405=>545,1406=>584,1407=>879,1408=>552,1409=>552,1410=>301, +1411=>884,1412=>578,1413=>556,1414=>668,1415=>544,1417=>278,1418=>333,1456=>0,1457=>0,1458=>0, +1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1467=>0,1468=>0,1469=>0, +1470=>488,1471=>0,1472=>212,1473=>0,1474=>0,1475=>278,1476=>0,1488=>640,1489=>591,1490=>466, +1491=>598,1492=>622,1493=>212,1494=>351,1495=>623,1496=>608,1497=>200,1498=>526,1499=>550,1500=>600, +1501=>623,1502=>621,1503=>212,1504=>378,1505=>607,1506=>587,1507=>575,1508=>568,1509=>540,1510=>590, +1511=>606,1512=>547,1513=>776,1514=>687,1520=>424,1521=>412,1522=>400,1523=>184,1524=>344,1792=>600, +1793=>201,1794=>201,1795=>201,1796=>201,1797=>500,1798=>500,1799=>500,1800=>370,1801=>370,1802=>574, +1803=>574,1804=>645,1805=>574,1807=>0,1808=>452,1809=>452,1810=>574,1811=>645,1812=>645,1813=>509, +1814=>509,1815=>682,1816=>585,1817=>404,1818=>627,1819=>718,1820=>718,1821=>484,1822=>682,1823=>600, +1824=>660,1825=>682,1826=>538,1827=>718,1828=>718,1829=>718,1830=>574,1831=>574,1832=>638,1833=>585, +1834=>509,1835=>682,1836=>682,1840=>0,1841=>0,1842=>0,1843=>0,1844=>0,1845=>0,1846=>0, +1847=>0,1848=>0,1849=>0,1850=>0,1851=>0,1852=>0,1853=>0,1854=>0,1855=>0,1856=>0, +1857=>0,1858=>0,1859=>0,1860=>0,1861=>0,1862=>0,1863=>0,1864=>0,1865=>0,1866=>0, +2304=>0,2305=>0,2306=>0,2307=>305,2308=>702,2309=>717,2310=>828,2311=>464,2312=>464,2313=>582, +2314=>804,2315=>921,2316=>641,2317=>433,2318=>433,2319=>433,2320=>433,2321=>856,2322=>827,2323=>837, +2324=>856,2325=>749,2326=>780,2327=>522,2328=>590,2329=>650,2330=>620,2331=>644,2332=>703,2333=>692, +2334=>680,2335=>568,2336=>531,2337=>611,2338=>538,2339=>608,2340=>564,2341=>660,2342=>500,2343=>593, +2344=>568,2345=>568,2346=>479,2347=>733,2348=>492,2349=>578,2350=>518,2351=>556,2352=>435,2353=>435, +2354=>656,2355=>661,2356=>661,2357=>492,2358=>646,2359=>479,2360=>667,2361=>486,2364=>6,2365=>442, +2366=>211,2367=>226,2368=>225,2369=>0,2370=>0,2371=>0,2372=>0,2373=>0,2374=>84,2375=>0, +2376=>0,2377=>226,2378=>225,2379=>226,2380=>226,2381=>0,2382=>0,2384=>839,2385=>0,2386=>0, +2387=>0,2388=>0,2389=>0,2392=>749,2393=>780,2394=>522,2395=>703,2396=>611,2397=>538,2398=>733, +2399=>556,2400=>900,2401=>626,2402=>625,2403=>625,2404=>674,2405=>674,2406=>575,2407=>575,2408=>575, +2409=>575,2410=>575,2411=>575,2412=>575,2413=>575,2414=>575,2415=>575,2416=>365,2417=>387,2418=>717, +2425=>814,2426=>556,2427=>568,2428=>703,2429=>575,2430=>611,2431=>492,2433=>0,2434=>300,2435=>264, +2437=>656,2438=>829,2439=>507,2440=>564,2441=>539,2442=>559,2443=>600,2444=>481,2447=>580,2448=>627, +2451=>540,2452=>613,2453=>570,2454=>467,2455=>481,2456=>438,2457=>483,2458=>408,2459=>509,2460=>601, +2461=>563,2462=>771,2463=>401,2464=>404,2465=>540,2466=>408,2467=>460,2468=>543,2469=>477,2470=>418, +2471=>433,2472=>445,2474=>499,2475=>594,2476=>397,2477=>565,2478=>458,2479=>433,2480=>410,2482=>508, +2486=>518,2487=>445,2488=>508,2489=>460,2492=>0,2493=>440,2494=>193,2495=>189,2496=>180,2497=>0, +2498=>0,2499=>0,2500=>0,2503=>295,2504=>303,2507=>0,2508=>0,2509=>0,2510=>356,2519=>219, +2524=>553,2525=>408,2527=>439,2528=>594,2529=>481,2530=>0,2531=>0,2534=>500,2535=>437,2536=>479, +2537=>530,2538=>497,2539=>500,2540=>482,2541=>503,2542=>517,2543=>481,2544=>377,2545=>377,2546=>429, +2547=>383,2548=>429,2549=>478,2550=>545,2551=>158,2552=>365,2553=>280,2554=>357,2561=>0,2562=>0, +2563=>351,2565=>860,2566=>1088,2567=>869,2568=>928,2569=>723,2570=>723,2575=>665,2576=>857,2579=>716, +2580=>858,2581=>682,2582=>634,2583=>696,2584=>744,2585=>649,2586=>674,2587=>656,2588=>653,2589=>629, +2590=>639,2591=>641,2592=>657,2593=>650,2594=>653,2595=>651,2596=>640,2597=>634,2598=>662,2599=>630, +2600=>625,2602=>645,2603=>653,2604=>624,2605=>613,2606=>658,2607=>734,2608=>620,2610=>676,2611=>719, +2613=>626,2614=>666,2616=>666,2617=>614,2620=>0,2622=>286,2623=>322,2624=>301,2625=>0,2626=>0, +2631=>0,2632=>0,2635=>0,2636=>0,2637=>0,2641=>0,2649=>636,2650=>762,2651=>652,2652=>653, +2654=>656,2662=>672,2663=>543,2664=>622,2665=>622,2666=>576,2667=>589,2668=>509,2669=>645,2670=>661, +2671=>655,2672=>0,2673=>0,2674=>666,2675=>726,2676=>1217,2677=>0,2689=>22,2690=>23,2691=>0, +2693=>775,2694=>979,2695=>594,2696=>568,2697=>525,2698=>724,2699=>942,2700=>558,2701=>775,2703=>775, +2704=>775,2705=>979,2707=>979,2708=>979,2709=>610,2710=>706,2711=>623,2712=>610,2713=>601,2714=>614, +2715=>642,2716=>684,2717=>634,2718=>644,2719=>509,2720=>541,2721=>539,2722=>524,2723=>657,2724=>547, +2725=>616,2726=>494,2727=>601,2728=>627,2730=>524,2731=>620,2732=>691,2733=>687,2734=>468,2735=>590, +2736=>509,2738=>571,2739=>687,2741=>526,2742=>620,2743=>575,2744=>620,2745=>549,2748=>53,2749=>415, +2750=>241,2751=>186,2752=>217,2753=>32,2754=>21,2755=>38,2756=>27,2757=>45,2759=>41,2760=>46, +2761=>207,2763=>190,2764=>182,2765=>16,2768=>962,2784=>949,2785=>609,2786=>0,2787=>0,2790=>479, +2791=>502,2792=>484,2793=>471,2794=>501,2795=>527,2796=>462,2797=>524,2798=>454,2799=>495,2801=>752, +4256=>587,4257=>620,4258=>642,4259=>815,4260=>600,4261=>595,4262=>799,4263=>893,4264=>622,4265=>597, +4266=>939,4267=>602,4268=>603,4269=>790,4270=>587,4271=>623,4272=>799,4273=>601,4274=>792,4275=>724, +4276=>847,4277=>599,4278=>812,4279=>603,4280=>653,4281=>590,4282=>754,4283=>596,4284=>653,4285=>651, +4286=>596,4287=>888,4288=>593,4304=>436,4305=>491,4306=>528,4307=>692,4308=>447,4309=>447,4310=>628, +4311=>734,4312=>449,4313=>445,4314=>843,4315=>449,4316=>449,4317=>682,4318=>449,4319=>480,4320=>682, +4321=>468,4322=>710,4323=>623,4324=>697,4325=>447,4326=>702,4327=>447,4328=>470,4329=>440,4330=>632, +4331=>449,4332=>470,4333=>536,4334=>449,4335=>656,4336=>474,4337=>630,4338=>394,4339=>419,4340=>422, +4341=>436,4345=>528,4347=>515,4348=>449,5024=>678,5025=>756,5026=>604,5027=>770,5028=>969,5029=>207, +5030=>633,5031=>800,5032=>474,5033=>689,5034=>672,5035=>446,5036=>637,5037=>776,5038=>511,5039=>723, +5040=>528,5041=>591,5042=>839,5043=>963,5044=>615,5045=>563,5046=>705,5047=>800,5048=>558,5049=>880, +5050=>966,5051=>675,5052=>527,5053=>733,5054=>779,5055=>547,5056=>756,5057=>834,5058=>604,5059=>632, +5060=>605,5061=>1051,5062=>657,5063=>842,5064=>748,5065=>1192,5066=>842,5067=>632,5068=>668,5069=>928, +5070=>626,5071=>655,5072=>502,5073=>696,5074=>642,5075=>518,5076=>952,5077=>622,5078=>710,5079=>521, +5080=>556,5081=>656,5082=>622,5083=>881,5084=>760,5085=>564,5086=>567,5087=>712,5088=>717,5089=>838, +5090=>617,5091=>689,5092=>767,5093=>728,5094=>690,5095=>551,5096=>859,5097=>957,5098=>900,5099=>779, +5100=>805,5101=>621,5102=>604,5103=>842,5104=>653,5105=>737,5106=>601,5107=>901,5108=>655,5121=>941, +5122=>941,5123=>941,5124=>941,5125=>726,5126=>726,5127=>726,5128=>726,5129=>726,5130=>726,5131=>726, +5132=>941,5133=>941,5134=>941,5135=>941,5136=>941,5137=>941,5138=>882,5139=>882,5140=>882,5141=>882, +5142=>726,5143=>882,5144=>882,5145=>882,5146=>882,5147=>726,5148=>494,5149=>347,5150=>447,5151=>329, +5152=>329,5153=>452,5154=>452,5155=>276,5156=>451,5157=>463,5158=>289,5159=>216,5160=>400,5161=>400, +5162=>400,5163=>1169,5164=>941,5165=>810,5166=>1012,5167=>941,5168=>941,5169=>941,5170=>941,5171=>726, +5172=>726,5173=>726,5174=>726,5175=>726,5176=>726,5177=>726,5178=>941,5179=>941,5180=>941,5181=>941, +5182=>941,5183=>941,5184=>726,5185=>882,5186=>726,5187=>882,5188=>882,5189=>726,5190=>882,5191=>726, +5192=>726,5193=>390,5194=>159,5195=>332,5196=>742,5197=>742,5198=>742,5199=>742,5200=>744,5201=>744, +5202=>744,5203=>744,5204=>744,5205=>744,5206=>744,5207=>914,5208=>912,5209=>912,5210=>914,5211=>912, +5212=>914,5213=>744,5214=>916,5215=>744,5216=>916,5217=>916,5218=>744,5219=>916,5220=>744,5221=>915, +5222=>477,5223=>855,5224=>855,5225=>855,5226=>855,5227=>592,5228=>592,5229=>592,5230=>592,5231=>592, +5232=>610,5233=>713,5234=>592,5235=>608,5236=>718,5237=>764,5238=>764,5239=>718,5240=>764,5241=>718, +5242=>718,5243=>763,5244=>735,5245=>763,5246=>764,5247=>718,5248=>764,5249=>734,5250=>763,5251=>361, +5252=>361,5253=>708,5254=>708,5255=>708,5256=>651,5257=>592,5258=>592,5259=>592,5260=>592,5261=>592, +5262=>610,5263=>713,5264=>592,5265=>608,5266=>608,5267=>763,5268=>763,5269=>608,5270=>763,5271=>608, +5272=>609,5273=>763,5274=>627,5275=>763,5276=>763,5277=>609,5278=>763,5279=>625,5280=>763,5281=>361, +5282=>361,5283=>592,5284=>592,5285=>592,5286=>592,5287=>592,5288=>610,5289=>713,5290=>592,5291=>608, +5292=>592,5293=>763,5294=>763,5295=>592,5296=>763,5297=>592,5298=>592,5299=>763,5300=>610,5301=>763, +5302=>763,5303=>592,5304=>763,5305=>608,5306=>763,5307=>346,5308=>276,5309=>346,5310=>331,5311=>562, +5312=>712,5313=>712,5314=>712,5315=>712,5316=>712,5317=>712,5318=>712,5319=>712,5320=>712,5321=>868, +5322=>828,5323=>828,5324=>712,5325=>828,5326=>712,5327=>712,5328=>466,5329=>452,5330=>466,5331=>712, +5332=>712,5333=>712,5334=>712,5335=>712,5336=>712,5337=>712,5338=>712,5339=>712,5340=>868,5341=>828, +5342=>828,5343=>868,5344=>828,5345=>868,5346=>712,5347=>828,5348=>712,5349=>828,5350=>828,5351=>712, +5352=>828,5353=>712,5354=>466,5355=>262,5356=>624,5357=>504,5358=>524,5359=>504,5360=>521,5361=>504, +5362=>520,5363=>624,5364=>504,5365=>520,5366=>620,5367=>660,5368=>659,5369=>620,5370=>676,5371=>620, +5372=>620,5373=>660,5374=>637,5375=>676,5376=>659,5377=>620,5378=>659,5379=>636,5380=>659,5381=>309, +5382=>365,5383=>309,5384=>458,5385=>315,5386=>315,5387=>347,5388=>1010,5389=>1020,5390=>872,5391=>872, +5392=>830,5393=>830,5394=>830,5395=>854,5396=>854,5397=>854,5398=>854,5399=>1001,5400=>1002,5401=>1001, +5402=>1002,5403=>1001,5404=>1002,5405=>998,5406=>998,5407=>998,5408=>998,5409=>998,5410=>998,5411=>998, +5412=>998,5413=>594,5414=>516,5415=>516,5416=>516,5417=>516,5418=>516,5419=>532,5420=>636,5421=>516, +5422=>532,5423=>671,5424=>672,5425=>671,5426=>672,5427=>671,5428=>672,5429=>671,5430=>672,5431=>687, +5432=>672,5433=>671,5434=>672,5435=>671,5436=>688,5437=>671,5438=>372,5439=>505,5440=>464,5441=>460, +5442=>830,5443=>830,5444=>830,5445=>830,5446=>830,5447=>830,5448=>556,5449=>556,5450=>556,5451=>556, +5452=>556,5453=>556,5454=>691,5455=>712,5456=>343,5457=>362,5458=>624,5459=>817,5460=>817,5461=>817, +5462=>817,5463=>824,5464=>824,5465=>824,5466=>824,5467=>980,5468=>972,5469=>465,5470=>742,5471=>742, +5472=>742,5473=>742,5474=>742,5475=>742,5476=>742,5477=>742,5478=>742,5479=>742,5480=>898,5481=>848, +5482=>410,5483=>742,5484=>742,5485=>744,5486=>744,5487=>825,5488=>742,5489=>742,5490=>744,5491=>744, +5492=>800,5493=>800,5494=>800,5495=>800,5496=>800,5497=>800,5498=>800,5499=>493,5500=>592,5501=>460, +5502=>875,5503=>875,5504=>875,5505=>777,5506=>795,5507=>875,5508=>875,5509=>644,5510=>592,5511=>592, +5512=>592,5513=>592,5514=>782,5515=>782,5516=>782,5517=>782,5518=>1056,5519=>1056,5520=>1056,5521=>687, +5522=>705,5523=>1056,5524=>1056,5525=>524,5526=>782,5527=>646,5528=>646,5529=>646,5530=>646,5531=>712, +5532=>712,5533=>712,5534=>712,5535=>466,5536=>772,5537=>772,5538=>772,5539=>772,5540=>772,5541=>772, +5542=>466,5543=>638,5544=>638,5545=>638,5546=>638,5547=>638,5548=>638,5549=>638,5550=>388,5551=>488, +5552=>515,5553=>515,5554=>515,5555=>515,5556=>592,5557=>592,5558=>592,5559=>592,5560=>542,5561=>542, +5562=>542,5563=>542,5564=>561,5565=>561,5566=>561,5567=>561,5568=>630,5569=>630,5570=>630,5571=>630, +5572=>941,5573=>941,5574=>726,5575=>726,5576=>726,5577=>726,5578=>941,5579=>941,5580=>726,5581=>726, +5582=>726,5583=>726,5584=>941,5585=>941,5586=>726,5587=>726,5588=>730,5589=>726,5590=>941,5591=>941, +5592=>726,5593=>726,5594=>730,5595=>726,5596=>830,5597=>830,5598=>830,5599=>830,5600=>830,5601=>830, +5602=>830,5603=>830,5604=>830,5605=>830,5606=>830,5607=>830,5608=>830,5609=>830,5610=>830,5611=>830, +5612=>830,5613=>830,5614=>400,5615=>722,5616=>722,5617=>722,5618=>722,5619=>722,5620=>722,5621=>722, +5622=>722,5623=>722,5624=>722,5625=>722,5626=>722,5627=>722,5628=>722,5629=>722,5630=>722,5631=>722, +5632=>722,5633=>522,5634=>592,5635=>592,5636=>712,5637=>712,5638=>712,5639=>712,5640=>722,5641=>722, +5642=>722,5643=>722,5644=>722,5645=>722,5646=>830,5647=>830,5648=>704,5649=>704,5650=>704,5651=>704, +5652=>647,5653=>647,5654=>647,5655=>830,5656=>830,5657=>830,5658=>830,5659=>830,5660=>647,5661=>647, +5662=>830,5663=>830,5664=>830,5665=>830,5666=>830,5667=>830,5668=>465,5669=>465,5670=>465,5671=>465, +5672=>830,5673=>830,5674=>574,5675=>574,5676=>574,5677=>574,5678=>609,5679=>609,5680=>647,5681=>647, +5682=>647,5683=>647,5684=>739,5685=>739,5686=>754,5687=>754,5688=>754,5689=>754,5690=>830,5691=>830, +5692=>755,5693=>755,5694=>755,5695=>755,5696=>830,5697=>830,5698=>830,5699=>830,5700=>830,5701=>830, +5702=>427,5703=>427,5704=>830,5705=>830,5706=>830,5707=>830,5708=>830,5709=>830,5710=>830,5711=>830, +5712=>718,5713=>718,5714=>718,5715=>718,5716=>830,5717=>830,5718=>718,5719=>718,5720=>718,5721=>718, +5722=>525,5723=>830,5724=>830,5725=>718,5726=>718,5727=>718,5728=>718,5729=>830,5730=>830,5731=>718, +5732=>718,5733=>718,5734=>718,5735=>722,5736=>722,5737=>722,5738=>722,5739=>722,5740=>722,5741=>822, +5742=>370,5743=>875,5744=>1056,5745=>1316,5746=>1314,5747=>963,5748=>981,5749=>1314,5750=>1330,5751=>668, +5752=>778,5753=>778,5754=>698,5755=>698,5756=>778,5757=>778,5758=>400,5759=>400,6320=>726,6321=>726, +6322=>726,6323=>882,6324=>726,6325=>726,6326=>786,6327=>744,6328=>592,6329=>764,6330=>592,6331=>712, +6332=>712,6333=>712,6334=>504,6335=>504,6336=>830,6337=>830,6338=>1001,6339=>516,6340=>516,6341=>556, +6342=>824,6343=>892,6344=>824,6345=>892,6346=>712,6347=>824,6348=>712,6349=>824,6350=>996,6351=>964, +6352=>964,6353=>726,6354=>726,6355=>686,6356=>525,6357=>452,6358=>361,6359=>361,6360=>346,6361=>466, +6362=>310,6363=>486,6364=>575,6365=>575,6366=>223,6367=>216,6368=>984,6369=>556,6370=>556,6371=>906, +6372=>858,6373=>906,6374=>744,6375=>744,6376=>758,6377=>592,6378=>808,6379=>646,6380=>630,6381=>906, +6382=>722,6383=>722,6384=>906,6385=>647,6386=>984,6387=>280,6388=>319,6389=>355,7680=>667,7681=>556, +7682=>667,7683=>556,7684=>667,7685=>556,7686=>667,7687=>556,7688=>722,7689=>500,7690=>722,7691=>556, +7692=>722,7693=>556,7694=>722,7695=>556,7696=>722,7697=>556,7698=>722,7699=>556,7700=>667,7701=>556, +7702=>667,7703=>556,7704=>667,7705=>556,7706=>667,7707=>556,7708=>667,7709=>556,7710=>611,7711=>278, +7712=>778,7713=>556,7714=>722,7715=>556,7716=>722,7717=>556,7718=>722,7719=>556,7720=>722,7721=>556, +7722=>722,7723=>556,7724=>278,7725=>222,7726=>278,7727=>251,7728=>667,7729=>500,7730=>667,7731=>500, +7732=>667,7733=>500,7734=>556,7735=>222,7736=>556,7737=>222,7738=>556,7739=>222,7740=>556,7741=>222, +7742=>833,7743=>833,7744=>833,7745=>833,7746=>833,7747=>833,7748=>722,7749=>556,7750=>722,7751=>556, +7752=>722,7753=>556,7754=>722,7755=>556,7756=>778,7757=>556,7758=>778,7759=>556,7760=>778,7761=>556, +7762=>778,7763=>556,7764=>667,7765=>556,7766=>667,7767=>556,7768=>722,7769=>333,7770=>722,7771=>333, +7772=>722,7773=>333,7774=>722,7775=>333,7776=>667,7777=>500,7778=>667,7779=>500,7780=>667,7781=>500, +7782=>667,7783=>500,7784=>667,7785=>500,7786=>611,7787=>278,7788=>611,7789=>278,7790=>611,7791=>278, +7792=>611,7793=>278,7794=>722,7795=>556,7796=>722,7797=>556,7798=>722,7799=>556,7800=>722,7801=>556, +7802=>722,7803=>556,7804=>667,7805=>500,7806=>667,7807=>500,7808=>944,7809=>722,7810=>944,7811=>722, +7812=>944,7813=>722,7814=>944,7815=>722,7816=>944,7817=>722,7818=>667,7819=>500,7820=>667,7821=>500, +7822=>667,7823=>500,7824=>611,7825=>500,7826=>611,7827=>500,7828=>611,7829=>500,7830=>556,7831=>278, +7832=>722,7833=>500,7834=>555,7835=>278,7840=>667,7841=>556,7842=>667,7843=>556,7844=>667,7845=>556, +7846=>667,7847=>556,7848=>667,7849=>556,7850=>667,7851=>556,7852=>667,7853=>556,7854=>667,7855=>556, +7856=>667,7857=>556,7858=>667,7859=>556,7860=>667,7861=>556,7862=>667,7863=>556,7864=>667,7865=>556, +7866=>667,7867=>556,7868=>667,7869=>556,7870=>667,7871=>556,7872=>667,7873=>556,7874=>667,7875=>556, +7876=>667,7877=>556,7878=>667,7879=>556,7880=>278,7881=>251,7882=>278,7883=>222,7884=>778,7885=>556, +7886=>778,7887=>556,7888=>778,7889=>556,7890=>778,7891=>556,7892=>778,7893=>556,7894=>778,7895=>556, +7896=>778,7897=>556,7898=>788,7899=>565,7900=>788,7901=>565,7902=>788,7903=>565,7904=>788,7905=>565, +7906=>788,7907=>565,7908=>722,7909=>556,7910=>722,7911=>556,7912=>776,7913=>624,7914=>776,7915=>624, +7916=>776,7917=>624,7918=>776,7919=>624,7920=>776,7921=>624,7922=>667,7923=>500,7924=>667,7925=>500, +7926=>667,7927=>500,7928=>667,7929=>500,7936=>596,7937=>596,7938=>596,7939=>596,7940=>596,7941=>596, +7942=>596,7943=>596,7944=>667,7945=>667,7946=>742,7947=>756,7948=>692,7949=>699,7950=>673,7951=>667, +7952=>512,7953=>512,7954=>512,7955=>512,7956=>512,7957=>512,7960=>730,7961=>714,7962=>900,7963=>882, +7964=>867,7965=>879,7968=>548,7969=>548,7970=>548,7971=>548,7972=>548,7973=>548,7974=>548,7975=>548, +7976=>772,7977=>778,7978=>945,7979=>947,7980=>943,7981=>946,7982=>853,7983=>853,7984=>286,7985=>286, +7986=>286,7987=>286,7988=>286,7989=>286,7990=>286,7991=>286,7992=>322,7993=>321,7994=>482,7995=>485, +7996=>477,7997=>484,7998=>394,7999=>390,8000=>546,8001=>546,8002=>546,8003=>546,8004=>546,8005=>546, +8008=>775,8009=>784,8010=>990,8011=>987,8012=>887,8013=>897,8016=>538,8017=>538,8018=>538,8019=>538, +8020=>538,8021=>538,8022=>538,8023=>538,8025=>747,8027=>915,8029=>971,8031=>863,8032=>740,8033=>740, +8034=>740,8035=>740,8036=>740,8037=>740,8038=>740,8039=>740,8040=>769,8041=>774,8042=>972,8043=>970, +8044=>879,8045=>918,8046=>901,8047=>901,8048=>596,8049=>596,8050=>512,8051=>512,8052=>548,8053=>548, +8054=>286,8055=>286,8056=>546,8057=>546,8058=>538,8059=>538,8060=>740,8061=>740,8064=>596,8065=>596, +8066=>596,8067=>596,8068=>596,8069=>596,8070=>596,8071=>596,8072=>830,8073=>828,8074=>916,8075=>916, +8076=>853,8077=>860,8078=>835,8079=>827,8080=>548,8081=>548,8082=>548,8083=>548,8084=>548,8085=>548, +8086=>548,8087=>548,8088=>928,8089=>931,8090=>1104,8091=>1109,8092=>1099,8093=>1102,8094=>1009,8095=>1012, +8096=>740,8097=>740,8098=>740,8099=>740,8100=>740,8101=>740,8102=>740,8103=>740,8104=>934,8105=>934, +8106=>1130,8107=>1128,8108=>1045,8109=>1077,8110=>1062,8111=>1065,8112=>596,8113=>596,8114=>596,8115=>596, +8116=>596,8118=>596,8119=>596,8120=>667,8121=>667,8122=>667,8123=>667,8124=>832,8125=>333,8126=>200, +8127=>333,8128=>333,8129=>333,8130=>548,8131=>548,8132=>548,8134=>548,8135=>548,8136=>833,8137=>776, +8138=>944,8139=>896,8140=>875,8141=>400,8142=>400,8143=>333,8144=>286,8145=>286,8146=>286,8147=>286, +8150=>286,8151=>286,8152=>278,8153=>278,8154=>385,8155=>376,8157=>400,8158=>400,8159=>333,8160=>538, +8161=>538,8162=>538,8163=>538,8164=>569,8165=>569,8166=>538,8167=>514,8168=>667,8169=>667,8170=>817, +8171=>827,8172=>741,8173=>393,8174=>393,8175=>333,8178=>740,8179=>740,8180=>740,8182=>740,8183=>740, +8184=>833,8185=>833,8186=>848,8187=>814,8188=>939,8189=>333,8190=>333,8192=>500,8193=>1000,8194=>500, +8195=>1000,8196=>333,8197=>250,8198=>167,8199=>556,8200=>278,8201=>200,8202=>100,8203=>0,8204=>0, +8205=>0,8206=>0,8207=>0,8208=>333,8209=>333,8210=>556,8213=>1000,8214=>312,8215=>566,8219=>221, +8223=>333,8227=>350,8228=>278,8229=>666,8231=>278,8232=>0,8233=>0,8234=>0,8235=>0,8236=>0, +8237=>0,8238=>0,8239=>500,8241=>1360,8242=>278,8243=>469,8244=>680,8245=>278,8246=>469,8247=>680, +8248=>376,8251=>622,8252=>556,8253=>556,8254=>556,8255=>658,8256=>658,8257=>438,8258=>840,8259=>400, +8260=>167,8261=>334,8262=>334,8263=>1112,8264=>834,8265=>834,8266=>556,8267=>537,8268=>537,8269=>537, +8270=>389,8271=>278,8272=>658,8273=>389,8274=>634,8275=>500,8276=>658,8277=>787,8278=>515,8279=>855, +8280=>722,8281=>725,8282=>224,8283=>722,8284=>604,8285=>224,8286=>224,8287=>0,8288=>0,8289=>0, +8290=>0,8291=>0,8292=>0,8304=>350,8305=>140,8308=>350,8309=>350,8310=>350,8311=>350,8312=>350, +8313=>350,8314=>350,8315=>350,8316=>350,8317=>350,8318=>350,8319=>360,8320=>350,8321=>350,8322=>350, +8323=>350,8324=>350,8325=>350,8326=>350,8327=>350,8328=>350,8329=>350,8330=>350,8331=>350,8332=>350, +8333=>350,8334=>350,8336=>363,8337=>366,8338=>360,8339=>325,8340=>350,8353=>615,8354=>601,8355=>611, +8356=>556,8357=>833,8358=>682,8359=>1317,8360=>1202,8361=>879,8362=>869,8363=>538,8365=>667,8366=>611, +8368=>570,8369=>684,8370=>717,8371=>667,8372=>667,8373=>640,8376=>516,8400=>0,8401=>0,8402=>0, +8403=>0,8404=>0,8405=>0,8406=>0,8407=>0,8408=>0,8409=>0,8410=>0,8411=>0,8412=>0, +8413=>0,8414=>0,8415=>0,8416=>0,8417=>0,8420=>0,8421=>0,8422=>0,8423=>0,8424=>0, +8425=>0,8426=>0,8427=>0,8428=>0,8429=>0,8430=>0,8431=>0,8432=>0,8448=>870,8449=>859, +8450=>722,8451=>1017,8452=>556,8453=>796,8454=>832,8455=>667,8456=>722,8457=>919,8459=>969,8460=>615, +8461=>647,8462=>556,8463=>572,8464=>809,8465=>606,8466=>900,8467=>481,8468=>747,8469=>722,8470=>934, +8471=>882,8472=>600,8473=>667,8474=>778,8475=>850,8476=>699,8477=>722,8478=>834,8479=>722,8480=>1043, +8481=>1261,8483=>667,8484=>611,8486=>778,8487=>778,8488=>512,8489=>286,8490=>667,8491=>667,8492=>908, +8493=>623,8494=>556,8495=>469,8496=>562,8497=>895,8498=>588,8499=>1080,8501=>640,8502=>592,8503=>466, +8504=>598,8505=>278,8506=>868,8507=>1338,8508=>619,8510=>582,8511=>722,8513=>778,8514=>556,8515=>556, +8516=>667,8522=>516,8523=>655,8525=>1200,8526=>435,8531=>869,8532=>869,8533=>869,8534=>869,8535=>869, +8536=>869,8537=>869,8538=>869,8539=>869,8540=>869,8541=>869,8542=>869,8543=>869,8544=>278,8545=>556, +8546=>834,8547=>945,8548=>667,8549=>945,8550=>1223,8551=>1501,8552=>945,8553=>667,8554=>945,8555=>1223, +8556=>556,8557=>722,8558=>722,8559=>833,8560=>222,8561=>444,8562=>666,8563=>722,8564=>500,8565=>722, +8566=>944,8567=>1166,8568=>722,8569=>500,8570=>722,8571=>944,8572=>222,8573=>500,8574=>556,8575=>833, +8592=>987,8593=>603,8594=>987,8595=>603,8596=>1042,8597=>1042,8598=>800,8599=>800,8600=>800,8601=>800, +8614=>987,8617=>987,8618=>987,8629=>658,8636=>987,8637=>987,8638=>380,8639=>393,8640=>987,8641=>987, +8642=>380,8643=>379,8652=>987,8656=>987,8657=>603,8658=>987,8659=>603,8660=>1042,8661=>603,8669=>1092, +8704=>667,8706=>556,8707=>667,8709=>823,8710=>711,8711=>711,8712=>584,8713=>584,8714=>584,8715=>584, +8716=>584,8717=>713,8719=>823,8720=>823,8721=>804,8722=>584,8723=>584,8724=>584,8725=>510,8726=>392, +8727=>584,8729=>584,8730=>542,8733=>713,8734=>713,8736=>768,8739=>200,8740=>288,8741=>312,8742=>340, +8743=>603,8744=>603,8745=>768,8746=>768,8747=>556,8748=>796,8749=>956,8750=>556,8756=>863,8764=>584, +8765=>584,8766=>573,8768=>244,8769=>584,8770=>584,8771=>584,8772=>584,8773=>584,8774=>584,8775=>584, +8776=>584,8777=>584,8781=>554,8784=>584,8800=>584,8801=>584,8802=>584,8804=>584,8805=>584,8810=>955, +8811=>955,8813=>554,8814=>584,8815=>584,8816=>584,8817=>584,8818=>584,8819=>584,8826=>584,8827=>584, +8828=>584,8829=>584,8832=>584,8833=>584,8834=>584,8835=>584,8836=>584,8837=>584,8838=>584,8839=>584, +8840=>584,8841=>584,8844=>768,8847=>636,8848=>636,8849=>636,8850=>636,8851=>636,8852=>636,8853=>768, +8854=>768,8855=>768,8856=>768,8857=>768,8866=>658,8867=>658,8868=>658,8869=>658,8870=>600,8871=>608, +8882=>636,8883=>636,8884=>636,8885=>636,8896=>744,8897=>744,8898=>764,8899=>764,8901=>278,8902=>471, +8904=>710,8928=>584,8929=>584,8930=>636,8931=>636,8960=>823,8968=>456,8969=>455,8970=>455,8971=>456, +8992=>556,8993=>556,8994=>658,8995=>658,9001=>329,9002=>329,9115=>384,9116=>384,9117=>384,9118=>384, +9119=>384,9120=>384,9121=>388,9122=>388,9123=>388,9124=>388,9125=>388,9126=>388,9134=>556,9216=>800, +9217=>800,9218=>800,9219=>800,9220=>800,9221=>800,9222=>800,9223=>800,9224=>800,9225=>800,9226=>800, +9227=>800,9228=>800,9229=>800,9230=>800,9231=>800,9232=>800,9233=>800,9234=>800,9235=>800,9236=>800, +9237=>800,9238=>800,9239=>800,9240=>800,9241=>800,9242=>800,9243=>800,9244=>800,9245=>800,9246=>800, +9247=>800,9248=>800,9249=>800,9250=>556,9251=>500,9252=>800,9312=>788,9313=>788,9314=>788,9315=>788, +9316=>788,9317=>788,9318=>788,9319=>788,9320=>788,9321=>788,9472=>1000,9473=>1000,9474=>1000,9475=>1000, +9476=>1000,9477=>1000,9478=>1000,9479=>1000,9480=>1000,9481=>1000,9482=>1000,9483=>1000,9484=>1000,9485=>1000, +9486=>1000,9487=>1000,9488=>1000,9489=>1000,9490=>1000,9491=>1000,9492=>1000,9493=>1000,9494=>1000,9495=>1000, +9496=>1000,9497=>1000,9498=>1000,9499=>1000,9500=>1000,9501=>1000,9502=>1000,9503=>1000,9504=>1000,9505=>1000, +9506=>1000,9507=>1000,9508=>1000,9509=>1000,9510=>1000,9511=>1000,9512=>1000,9513=>1000,9514=>1000,9515=>1000, +9516=>1000,9517=>1000,9518=>1000,9519=>1000,9520=>1000,9521=>1000,9522=>1000,9523=>1000,9524=>1000,9525=>1000, +9526=>1000,9527=>1000,9528=>1000,9529=>1000,9530=>1000,9531=>1000,9532=>1000,9533=>1000,9534=>1000,9535=>1000, +9536=>1000,9537=>1000,9538=>1000,9539=>1000,9540=>1000,9541=>1000,9542=>1000,9543=>1000,9544=>1000,9545=>1000, +9546=>1000,9547=>1000,9552=>1000,9553=>1000,9554=>1000,9555=>1000,9556=>1000,9557=>1000,9558=>1000,9559=>1000, +9560=>1000,9561=>1000,9562=>1000,9563=>1000,9564=>1000,9565=>1000,9566=>1000,9567=>1000,9568=>1000,9569=>1000, +9570=>1000,9571=>1000,9572=>1000,9573=>1000,9574=>1000,9575=>1000,9576=>1000,9577=>1000,9578=>1000,9579=>1000, +9580=>1000,9600=>1000,9601=>1000,9602=>1000,9603=>1000,9604=>1000,9605=>1000,9606=>1000,9607=>1000,9608=>1000, +9609=>1000,9610=>1000,9611=>1000,9612=>1000,9613=>1000,9614=>1000,9615=>1000,9616=>1000,9617=>1000,9618=>1000, +9619=>1000,9620=>1000,9621=>1000,9622=>1000,9623=>1000,9624=>1000,9625=>1000,9626=>1000,9627=>1000,9628=>1000, +9629=>1000,9630=>1000,9631=>1000,9632=>800,9633=>800,9634=>800,9635=>800,9636=>800,9637=>800,9638=>800, +9639=>800,9640=>800,9641=>800,9642=>625,9643=>625,9644=>800,9645=>800,9646=>800,9647=>800,9648=>1000, +9649=>1000,9650=>892,9651=>892,9652=>669,9653=>669,9654=>892,9655=>892,9656=>669,9657=>669,9658=>891, +9659=>891,9660=>892,9661=>892,9662=>669,9663=>669,9664=>892,9665=>892,9666=>669,9667=>669,9668=>891, +9669=>891,9670=>788,9671=>788,9672=>788,9673=>800,9674=>489,9675=>800,9676=>800,9677=>800,9678=>800, +9679=>800,9680=>800,9681=>800,9682=>800,9683=>800,9684=>800,9685=>800,9686=>800,9687=>800,9688=>350, +9689=>800,9690=>800,9691=>800,9692=>800,9693=>800,9694=>800,9695=>799,9696=>800,9697=>800,9698=>1000, +9699=>1000,9700=>1000,9701=>1000,9702=>350,9703=>800,9704=>800,9705=>800,9706=>800,9707=>800,9708=>892, +9709=>892,9710=>892,9711=>882,9712=>800,9713=>800,9714=>800,9715=>800,9716=>800,9717=>800,9718=>800, +9719=>800,9720=>800,9721=>800,9722=>800,9723=>800,9724=>800,9725=>800,9726=>800,9727=>800,9772=>929, +9824=>626,9825=>694,9826=>595,9827=>776,9828=>626,9829=>694,9830=>595,9831=>776,9833=>333,9834=>555, +9835=>722,9836=>722,9837=>415,9838=>377,9839=>402,10048=>1161,10752=>791,10753=>791,10754=>791,10755=>764, +10756=>764,10761=>584,11568=>352,11569=>872,11570=>872,11571=>720,11572=>720,11573=>720,11574=>544,11575=>709, +11576=>709,11577=>720,11578=>720,11579=>596,11580=>698,11581=>742,11582=>574,11583=>742,11584=>872,11585=>872, +11586=>292,11587=>696,11588=>696,11589=>720,11590=>544,11591=>724,11592=>756,11593=>600,11594=>672,11595=>888, +11596=>836,11597=>524,11598=>720,11599=>260,11600=>836,11601=>224,11602=>678,11603=>380,11604=>872,11605=>872, +11606=>720,11607=>268,11608=>640,11609=>872,11610=>872,11611=>770,11612=>424,11613=>720,11614=>770,11615=>720, +11616=>709,11617=>720,11618=>541,11619=>828,11620=>454,11621=>828,11631=>442,11799=>333,42240=>698,42241=>698, +42242=>676,42243=>800,42244=>800,42245=>850,42246=>930,42247=>720,42248=>756,42249=>750,42250=>750,42251=>750, +42252=>540,42253=>540,42254=>780,42255=>780,42256=>1082,42257=>1082,42258=>780,42259=>780,42260=>720,42261=>774, +42262=>600,42263=>600,42264=>600,42265=>600,42266=>983,42267=>983,42268=>749,42269=>749,42270=>1080,42271=>890, +42272=>869,42273=>720,42274=>739,42275=>983,42276=>780,42277=>840,42278=>780,42279=>424,42280=>840,42281=>967, +42282=>462,42283=>952,42284=>735,42285=>735,42286=>780,42287=>750,42288=>869,42289=>772,42290=>772,42291=>676, +42292=>762,42293=>674,42294=>674,42295=>488,42296=>604,42297=>822,42298=>1059,42299=>851,42300=>851,42301=>689, +42302=>844,42303=>708,42304=>907,42305=>907,42306=>907,42307=>612,42308=>612,42309=>840,42310=>775,42311=>544, +42312=>774,42313=>540,42314=>704,42315=>723,42316=>887,42317=>887,42318=>676,42319=>817,42320=>762,42321=>887, +42322=>824,42323=>890,42324=>705,42325=>780,42326=>705,42327=>533,42328=>523,42329=>694,42330=>772,42331=>772, +42332=>772,42333=>892,42334=>711,42335=>711,42336=>832,42337=>832,42338=>944,42339=>944,42340=>832,42341=>928, +42342=>743,42343=>735,42344=>731,42345=>782,42346=>595,42347=>890,42348=>680,42349=>887,42350=>815,42351=>510, +42352=>848,42353=>700,42354=>700,42355=>700,42356=>724,42357=>724,42358=>633,42359=>633,42360=>813,42361=>834, +42362=>625,42363=>887,42364=>592,42365=>772,42366=>772,42367=>639,42368=>639,42369=>887,42370=>887,42371=>717, +42372=>717,42373=>786,42374=>891,42375=>780,42376=>841,42377=>500,42378=>792,42379=>522,42380=>522,42381=>647, +42382=>361,42383=>815,42384=>850,42385=>683,42386=>834,42387=>898,42388=>522,42389=>820,42390=>820,42391=>808, +42392=>864,42393=>772,42394=>808,42395=>869,42396=>900,42397=>844,42398=>844,42399=>812,42400=>812,42401=>812, +42402=>930,42403=>990,42404=>540,42405=>608,42406=>630,42407=>910,42408=>687,42409=>687,42410=>744,42411=>687, +42412=>724,42413=>742,42414=>724,42415=>742,42416=>744,42417=>744,42418=>744,42419=>744,42420=>780,42421=>540, +42422=>540,42423=>595,42424=>740,42425=>620,42426=>772,42427=>914,42428=>914,42429=>857,42430=>800,42431=>772, +42432=>887,42433=>990,42434=>1005,42435=>799,42436=>799,42437=>948,42438=>948,42439=>906,42440=>1044,42441=>600, +42442=>600,42443=>574,42444=>742,42445=>574,42446=>742,42447=>500,42448=>604,42449=>704,42450=>704,42451=>746, +42452=>820,42453=>731,42454=>805,42455=>606,42456=>726,42457=>726,42458=>500,42459=>813,42460=>939,42461=>898, +42462=>660,42463=>633,42464=>914,42465=>689,42466=>1231,42467=>784,42468=>710,42469=>982,42470=>704,42471=>782, +42472=>591,42473=>770,42474=>620,42475=>620,42476=>930,42477=>930,42478=>930,42479=>785,42480=>785,42481=>813, +42482=>813,42483=>971,42484=>971,42485=>721,42486=>801,42487=>582,42488=>604,42489=>618,42490=>582,42491=>1059, +42492=>1059,42493=>1059,42494=>1059,42495=>720,42496=>789,42497=>723,42498=>721,42499=>772,42500=>772,42501=>772, +42502=>772,42503=>772,42504=>620,42505=>634,42506=>806,42507=>825,42508=>670,42509=>521,42510=>512,42511=>1134, +42512=>1324,42513=>772,42514=>1091,42515=>445,42516=>811,42517=>776,42518=>614,42519=>720,42520=>902,42521=>765, +42522=>920,42523=>1024,42524=>735,42525=>742,42526=>816,42527=>715,42528=>692,42529=>200,42530=>677,42531=>770, +42532=>640,42533=>595,42534=>526,42535=>677,42536=>500,42537=>715,42538=>1143,42539=>560,42888=>333,42889=>276, +42890=>342,42891=>194,42892=>194,64256=>495,64257=>460,64258=>465,64259=>652,64260=>645,64261=>520,64275=>1004, +64276=>1044,64277=>1042,64278=>1037,64279=>1256,64285=>200,64286=>305,64287=>400,64288=>587,64289=>890,64290=>848, +64291=>872,64292=>800,64293=>850,64294=>873,64295=>797,64296=>937,64297=>584,64298=>776,64299=>776,64300=>776, +64301=>776,64302=>640,64303=>640,64304=>640,64305=>591,64306=>466,64307=>598,64308=>622,64309=>262,64310=>351, +64312=>608,64313=>270,64314=>526,64315=>550,64316=>600,64318=>621,64320=>378,64321=>607,64323=>575,64324=>568, +64326=>590,64327=>606,64328=>547,64329=>776,64330=>687,64331=>212,64332=>591,64333=>550,64334=>568,64335=>640, +65533=>900); +$enc=''; +$diff=''; +$file='freesans.z'; +$ctg='freesans.ctg.z'; +$originalsize=714456; +// --- EOF --- --- /dev/null +++ b/tcpdf/fonts/freesansb.php @@ -1,1 +1,254 @@ - +1000,'Descent'=>-300,'CapHeight'=>22,'Flags'=>32,'FontBBox'=>'[-1542 -1175 1908 1639]','ItalicAngle'=>0,'StemV'=>120,'MissingWidth'=>600); +$up=-189; +$ut=69; +$dw=600; +$cw=array( +32=>278,33=>333,34=>474,35=>556,36=>556,37=>889,38=>722,39=>238,40=>333,41=>333, +42=>389,43=>584,44=>278,45=>333,46=>278,47=>278,48=>556,49=>556,50=>556,51=>556, +52=>556,53=>556,54=>556,55=>556,56=>556,57=>556,58=>333,59=>333,60=>584,61=>584, +62=>584,63=>611,64=>975,65=>722,66=>722,67=>722,68=>722,69=>667,70=>611,71=>778, +72=>722,73=>278,74=>556,75=>722,76=>611,77=>833,78=>722,79=>778,80=>667,81=>778, +82=>722,83=>667,84=>611,85=>722,86=>667,87=>944,88=>667,89=>667,90=>611,91=>333, +92=>278,93=>333,94=>584,95=>556,96=>333,97=>556,98=>611,99=>556,100=>611,101=>556, +102=>333,103=>611,104=>611,105=>278,106=>278,107=>556,108=>278,109=>889,110=>611,111=>611, +112=>611,113=>611,114=>389,115=>556,116=>333,117=>611,118=>556,119=>778,120=>556,121=>556, +122=>500,123=>389,124=>280,125=>389,126=>584,8364=>640,8218=>278,402=>333,8222=>500,8230=>1000, +8224=>556,8225=>556,710=>333,8240=>1000,352=>667,8249=>333,338=>1000,381=>611,8216=>278,8217=>278, +8220=>500,8221=>500,8226=>350,8211=>556,8212=>1000,732=>333,8482=>1000,353=>556,8250=>333,339=>953, +382=>500,376=>667,160=>278,161=>333,162=>556,163=>556,164=>556,165=>556,166=>280,167=>556, +168=>333,169=>737,170=>370,171=>556,172=>584,173=>333,174=>737,175=>333,176=>606,177=>584, +178=>351,179=>351,180=>333,181=>611,182=>556,183=>278,184=>333,185=>300,186=>365,187=>556, +188=>869,189=>869,190=>869,191=>611,192=>722,193=>722,194=>722,195=>722,196=>722,197=>722, +198=>1000,199=>722,200=>667,201=>667,202=>667,203=>667,204=>278,205=>278,206=>278,207=>278, +208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>584,216=>778,217=>722, +218=>722,219=>722,220=>722,221=>667,222=>667,223=>611,224=>556,225=>556,226=>556,227=>556, +228=>556,229=>556,230=>889,231=>556,232=>556,233=>556,234=>556,235=>556,236=>278,237=>278, +238=>278,239=>278,240=>611,241=>611,242=>611,243=>611,244=>611,245=>611,246=>611,247=>584, +248=>611,249=>611,250=>611,251=>611,252=>611,253=>556,254=>611,255=>556,256=>722,257=>556, +258=>722,259=>556,260=>722,261=>556,262=>722,263=>556,264=>722,265=>556,266=>722,267=>556, +268=>722,269=>556,270=>722,271=>723,272=>722,273=>611,274=>667,275=>556,276=>667,277=>556, +278=>667,279=>556,280=>667,281=>556,282=>667,283=>556,284=>778,285=>611,286=>778,287=>611, +288=>778,289=>611,290=>778,291=>611,292=>722,293=>611,294=>722,295=>611,296=>278,297=>278, +298=>278,299=>278,300=>278,301=>278,302=>278,303=>278,304=>278,305=>278,306=>593,307=>486, +308=>556,309=>278,310=>722,311=>556,312=>559,313=>611,314=>278,315=>611,316=>278,317=>611, +318=>422,319=>611,320=>556,321=>611,322=>278,323=>722,324=>611,325=>722,326=>611,327=>722, +328=>611,329=>701,330=>720,331=>611,332=>778,333=>611,334=>778,335=>611,336=>778,337=>611, +340=>722,341=>389,342=>722,343=>389,344=>722,345=>389,346=>667,347=>556,348=>667,349=>556, +350=>667,351=>556,354=>611,355=>333,356=>611,357=>414,358=>611,359=>333,360=>722,361=>611, +362=>722,363=>611,364=>722,365=>611,366=>722,367=>611,368=>722,369=>611,370=>722,371=>611, +372=>944,373=>778,374=>667,375=>556,377=>611,378=>500,379=>611,380=>500,383=>333,384=>611, +385=>963,386=>704,387=>611,388=>687,389=>611,390=>722,391=>752,392=>562,393=>722,394=>968, +395=>722,396=>611,397=>609,398=>667,399=>778,400=>672,401=>611,403=>778,404=>667,405=>940, +406=>278,407=>395,408=>778,409=>556,410=>333,411=>620,412=>944,413=>722,414=>611,415=>778, +416=>811,417=>673,418=>1111,419=>722,420=>914,421=>611,422=>647,423=>667,424=>556,425=>673, +426=>441,427=>333,428=>742,429=>333,430=>611,431=>789,432=>676,433=>766,434=>722,435=>839, +436=>620,437=>611,438=>500,439=>556,440=>556,441=>645,442=>569,443=>579,446=>611,447=>608, +448=>260,449=>370,450=>584,451=>278,452=>1333,453=>1222,454=>1111,455=>1167,456=>889,457=>556, +458=>1278,459=>1000,460=>889,461=>722,462=>556,463=>278,464=>278,465=>778,466=>611,467=>722, +468=>611,469=>722,470=>611,471=>722,472=>611,473=>722,474=>611,475=>722,476=>611,477=>556, +478=>722,479=>556,480=>722,481=>556,482=>1000,483=>889,484=>778,485=>611,486=>778,487=>611, +488=>722,489=>556,490=>778,491=>611,492=>778,493=>611,494=>556,495=>556,496=>278,497=>1333, +498=>1222,499=>1111,500=>778,501=>611,503=>630,504=>722,505=>611,506=>722,507=>556,508=>1000, +509=>889,510=>778,511=>611,512=>722,513=>556,514=>722,515=>556,516=>667,517=>556,518=>667, +519=>556,520=>278,521=>278,522=>278,523=>278,524=>778,525=>611,526=>778,527=>611,528=>722, +529=>389,530=>722,531=>389,532=>722,533=>611,534=>722,535=>611,536=>667,537=>556,538=>611, +539=>333,540=>569,541=>486,542=>722,543=>611,548=>645,549=>500,550=>722,551=>556,552=>667, +553=>556,554=>778,555=>611,556=>778,557=>611,558=>778,559=>611,560=>778,561=>611,562=>667, +563=>556,567=>278,592=>556,593=>677,594=>678,595=>611,596=>556,597=>600,598=>625,599=>625, +600=>556,601=>556,602=>834,603=>571,604=>557,605=>820,606=>570,607=>316,608=>619,609=>611, +610=>566,611=>556,612=>656,613=>619,614=>611,615=>611,616=>300,617=>344,618=>300,619=>473, +620=>527,621=>298,622=>778,623=>893,624=>889,625=>889,626=>628,627=>626,628=>615,629=>606, +630=>878,631=>839,632=>738,633=>411,634=>406,635=>426,636=>396,637=>396,638=>455,639=>475, +640=>620,641=>620,642=>610,643=>333,644=>331,645=>333,646=>553,647=>328,648=>333,649=>643, +650=>726,651=>639,652=>556,653=>778,654=>556,655=>556,656=>551,657=>591,658=>556,659=>642, +660=>611,661=>611,662=>611,663=>556,664=>611,665=>554,666=>590,667=>616,668=>603,669=>552, +670=>588,671=>454,672=>626,673=>611,674=>611,675=>1004,676=>1018,677=>1097,678=>804,679=>593, +680=>840,681=>866,682=>752,683=>668,684=>525,685=>486,686=>659,687=>679,688=>377,689=>377, +690=>202,691=>272,692=>272,693=>299,694=>395,695=>534,696=>364,697=>278,698=>454,699=>278, +700=>278,701=>278,702=>333,703=>333,704=>333,705=>333,706=>333,707=>333,708=>333,709=>333, +711=>333,712=>333,713=>333,714=>333,715=>333,716=>272,717=>333,718=>333,719=>333,720=>333, +721=>333,722=>333,723=>333,724=>333,725=>333,726=>333,727=>333,728=>333,729=>333,730=>333, +731=>333,733=>333,734=>333,735=>510,736=>372,737=>210,738=>363,739=>373,740=>334,741=>526, +742=>526,743=>526,744=>526,745=>526,746=>519,747=>519,748=>333,749=>333,750=>333,751=>333, +752=>333,753=>333,754=>333,755=>333,756=>333,757=>437,758=>437,759=>400,760=>333,761=>200, +762=>200,763=>200,764=>200,765=>333,766=>333,767=>333,768=>0,769=>0,770=>0,771=>0, +772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0, +782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0, +792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0, +802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0, +812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0, +822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0, +832=>0,833=>0,834=>0,835=>0,836=>0,837=>0,838=>0,839=>0,840=>0,841=>0, +842=>0,843=>0,844=>0,845=>0,846=>0,847=>0,848=>0,849=>0,850=>0,851=>0, +852=>0,853=>0,854=>0,855=>0,856=>0,857=>0,858=>0,859=>0,860=>0,861=>0, +862=>0,863=>0,864=>0,865=>0,866=>0,867=>0,868=>0,869=>0,870=>0,871=>0, +872=>0,873=>0,874=>0,875=>0,876=>0,877=>0,878=>0,879=>0,884=>379,885=>379, +890=>333,894=>333,900=>363,901=>333,902=>761,903=>333,904=>864,905=>903,906=>454,908=>796, +910=>991,911=>867,912=>315,913=>696,914=>640,915=>585,916=>726,917=>589,918=>581,919=>654, +920=>783,921=>215,922=>648,923=>710,924=>829,925=>683,926=>645,927=>738,928=>726,929=>645, +931=>673,932=>674,933=>771,934=>773,935=>780,936=>778,937=>766,938=>263,939=>771,940=>660, +941=>541,942=>560,943=>356,944=>568,945=>632,946=>560,947=>591,948=>609,949=>541,950=>488, +951=>608,952=>562,953=>315,954=>533,955=>603,956=>582,957=>586,958=>513,959=>611,960=>658, +961=>595,962=>590,963=>657,964=>557,965=>568,966=>768,967=>632,968=>708,969=>778,970=>315, +971=>568,972=>599,973=>568,974=>778,977=>580,978=>742,979=>857,980=>620,981=>706,982=>740, +983=>556,1008=>556,1009=>566,1012=>778,1013=>328,1024=>670,1025=>670,1026=>800,1027=>611,1028=>714, +1029=>667,1030=>314,1031=>300,1032=>576,1033=>1100,1034=>1114,1035=>806,1036=>740,1037=>757,1038=>711, +1039=>754,1040=>707,1041=>704,1042=>704,1043=>611,1044=>900,1045=>670,1046=>1076,1047=>667,1048=>757, +1049=>757,1050=>740,1051=>729,1052=>874,1053=>753,1054=>774,1055=>753,1056=>675,1057=>711,1058=>611, +1059=>711,1060=>904,1061=>666,1062=>816,1063=>698,1064=>1057,1065=>1157,1066=>837,1067=>980,1068=>675, +1069=>711,1070=>1093,1071=>708,1072=>552,1073=>593,1074=>554,1075=>423,1076=>685,1077=>573,1078=>782, +1079=>557,1080=>615,1081=>615,1082=>559,1083=>568,1084=>666,1085=>603,1086=>606,1087=>603,1088=>612, +1089=>556,1090=>440,1091=>549,1092=>964,1093=>539,1094=>652,1095=>554,1096=>886,1097=>968,1098=>699, +1099=>778,1100=>568,1101=>556,1102=>848,1103=>586,1104=>573,1105=>573,1106=>606,1107=>423,1108=>556, +1109=>555,1110=>260,1111=>278,1112=>270,1113=>898,1114=>898,1115=>626,1116=>559,1117=>615,1118=>549, +1119=>604,1120=>986,1121=>736,1136=>832,1137=>748,1138=>774,1139=>606,1148=>942,1149=>736,1150=>986, +1151=>736,1154=>449,1155=>0,1156=>0,1157=>0,1158=>0,1159=>0,1160=>0,1161=>0,1162=>832, +1163=>675,1164=>678,1165=>611,1166=>675,1167=>612,1168=>636,1169=>440,1170=>622,1171=>449,1172=>647, +1173=>574,1174=>1096,1175=>803,1176=>683,1177=>555,1178=>759,1179=>573,1180=>730,1181=>554,1182=>737, +1183=>555,1184=>892,1185=>680,1186=>825,1187=>653,1188=>999,1189=>763,1190=>1105,1191=>925,1192=>963, +1193=>766,1194=>722,1195=>558,1196=>614,1197=>438,1198=>643,1199=>573,1200=>643,1201=>603,1202=>670, +1203=>548,1204=>952,1205=>738,1206=>781,1207=>615,1208=>698,1209=>588,1210=>687,1211=>588,1212=>993, +1213=>761,1214=>993,1215=>761,1216=>314,1217=>1076,1218=>809,1219=>700,1220=>543,1221=>793,1222=>634, +1223=>753,1224=>603,1225=>819,1226=>663,1227=>706,1228=>588,1229=>935,1230=>720,1231=>314,1232=>707, +1233=>564,1234=>707,1235=>566,1236=>1004,1237=>898,1238=>670,1239=>573,1240=>722,1241=>573,1242=>722, +1243=>573,1244=>1076,1245=>782,1246=>667,1247=>557,1248=>556,1249=>552,1250=>757,1251=>615,1252=>757, +1253=>615,1254=>778,1255=>611,1256=>774,1257=>606,1258=>774,1259=>606,1260=>711,1261=>556,1262=>700, +1263=>544,1264=>701,1265=>539,1266=>700,1267=>537,1268=>698,1269=>554,1270=>611,1271=>432,1272=>980, +1273=>778,1296=>672,1297=>546,1298=>729,1299=>577,1306=>778,1307=>612,1308=>944,1309=>776,1310=>730, +1311=>554,1329=>730,1330=>713,1331=>765,1332=>752,1333=>708,1334=>801,1335=>496,1336=>713,1337=>855, +1338=>686,1339=>727,1340=>420,1341=>897,1342=>841,1343=>708,1344=>660,1345=>666,1346=>747,1347=>698, +1348=>757,1349=>630,1350=>747,1351=>651,1352=>743,1353=>657,1354=>728,1355=>799,1356=>752,1357=>743, +1358=>768,1359=>691,1360=>713,1361=>640,1362=>425,1363=>818,1364=>672,1365=>805,1366=>754,1369=>333, +1370=>222,1371=>250,1372=>333,1373=>333,1374=>352,1375=>362,1377=>873,1378=>613,1379=>634,1380=>636, +1381=>593,1382=>639,1383=>417,1384=>613,1385=>658,1386=>711,1387=>609,1388=>318,1389=>836,1390=>670, +1391=>613,1392=>607,1393=>611,1394=>626,1395=>619,1396=>618,1397=>324,1398=>613,1399=>540,1400=>591, +1401=>392,1402=>873,1403=>577,1404=>603,1405=>600,1406=>626,1407=>951,1408=>613,1409=>612,1410=>348, +1411=>951,1412=>616,1413=>606,1414=>763,1415=>626,1417=>333,1418=>398,1456=>0,1457=>0,1458=>0, +1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1467=>0,1468=>0,1469=>0, +1470=>516,1471=>0,1472=>297,1473=>0,1474=>0,1475=>333,1476=>0,1488=>714,1489=>651,1490=>557, +1491=>638,1492=>682,1493=>297,1494=>443,1495=>682,1496=>670,1497=>284,1498=>590,1499=>595,1500=>667, +1501=>683,1502=>704,1503=>297,1504=>429,1505=>670,1506=>653,1507=>661,1508=>660,1509=>616,1510=>671, +1511=>672,1512=>600,1513=>840,1514=>756,1520=>554,1521=>550,1522=>542,1523=>238,1524=>474,2561=>0, +2562=>122,2563=>313,2565=>897,2566=>1157,2567=>930,2568=>966,2569=>762,2570=>762,2575=>729,2576=>904, +2579=>773,2580=>903,2581=>726,2582=>672,2583=>741,2584=>790,2585=>702,2586=>723,2587=>693,2588=>688, +2589=>673,2590=>683,2591=>686,2592=>711,2593=>680,2594=>693,2595=>729,2596=>691,2597=>694,2598=>699, +2599=>666,2600=>669,2602=>683,2603=>690,2604=>660,2605=>659,2606=>692,2607=>772,2608=>673,2610=>731, +2611=>814,2613=>663,2614=>704,2616=>702,2617=>650,2620=>0,2622=>307,2623=>304,2624=>306,2625=>7, +2626=>7,2631=>7,2632=>8,2635=>6,2636=>5,2637=>0,2641=>0,2649=>684,2650=>813,2651=>715, +2652=>695,2654=>709,2662=>697,2663=>630,2664=>696,2665=>690,2666=>646,2667=>636,2668=>571,2669=>682, +2670=>718,2671=>730,2672=>9,2673=>162,2674=>722,2675=>760,2676=>1110,2677=>0,4256=>616,4257=>645, +4258=>664,4259=>839,4260=>627,4261=>630,4262=>827,4263=>928,4264=>639,4265=>630,4266=>951,4267=>606, +4268=>608,4269=>835,4270=>630,4271=>610,4272=>804,4273=>615,4274=>823,4275=>747,4276=>870,4277=>627, +4278=>840,4279=>627,4280=>665,4281=>610,4282=>799,4283=>598,4284=>665,4285=>664,4286=>608,4287=>886, +4288=>629,4304=>463,4305=>516,4306=>564,4307=>706,4308=>459,4309=>476,4310=>623,4311=>711,4312=>494, +4313=>476,4314=>894,4315=>500,4316=>500,4317=>712,4318=>493,4319=>503,4320=>712,4321=>503,4322=>710, +4323=>670,4324=>707,4325=>459,4326=>691,4327=>465,4328=>492,4329=>480,4330=>656,4331=>500,4332=>492, +4333=>524,4334=>500,4335=>688,4336=>510,4337=>739,4338=>450,4339=>479,4340=>502,4341=>501,4345=>564, +4347=>515,4348=>449,5024=>714,5025=>731,5026=>624,5027=>908,5028=>1040,5029=>271,5030=>654,5031=>863, +5032=>604,5033=>791,5034=>714,5035=>522,5036=>661,5037=>926,5038=>615,5039=>811,5040=>538,5041=>633, +5042=>979,5043=>964,5044=>635,5045=>607,5046=>753,5047=>831,5048=>566,5049=>977,5050=>958,5051=>710, +5052=>616,5053=>834,5054=>790,5055=>612,5056=>766,5057=>857,5058=>627,5059=>649,5060=>607,5061=>1127, +5062=>680,5063=>920,5064=>928,5065=>1333,5066=>920,5067=>705,5068=>695,5069=>1074,5070=>672,5071=>672, +5072=>667,5073=>819,5074=>679,5075=>575,5076=>903,5077=>652,5078=>776,5079=>643,5080=>670,5081=>660, +5082=>648,5083=>934,5084=>909,5085=>613,5086=>615,5087=>735,5088=>900,5089=>1024,5090=>647,5091=>760, +5092=>829,5093=>824,5094=>756,5095=>625,5096=>981,5097=>1014,5098=>1040,5099=>790,5100=>926,5101=>686, +5102=>656,5103=>920,5104=>741,5105=>890,5106=>626,5107=>974,5108=>699,7680=>722,7681=>556,7682=>722, +7683=>611,7684=>722,7685=>611,7686=>722,7687=>611,7688=>722,7689=>556,7690=>722,7691=>611,7692=>722, +7693=>611,7694=>722,7695=>611,7696=>722,7697=>611,7698=>722,7699=>611,7700=>667,7701=>556,7702=>667, +7703=>556,7704=>667,7705=>556,7706=>667,7707=>556,7708=>667,7709=>556,7710=>611,7711=>333,7712=>778, +7713=>611,7714=>722,7715=>611,7716=>722,7717=>611,7718=>722,7719=>611,7720=>722,7721=>611,7722=>722, +7723=>611,7724=>278,7725=>278,7726=>278,7727=>278,7728=>722,7729=>556,7730=>722,7731=>556,7732=>722, +7733=>556,7734=>611,7735=>278,7736=>611,7737=>278,7738=>611,7739=>278,7740=>611,7741=>278,7742=>833, +7743=>889,7744=>833,7745=>889,7746=>833,7747=>889,7748=>722,7749=>611,7750=>722,7751=>611,7752=>722, +7753=>611,7754=>722,7755=>611,7756=>778,7757=>611,7758=>778,7759=>611,7760=>778,7761=>611,7762=>778, +7763=>611,7764=>667,7765=>611,7766=>667,7767=>611,7768=>722,7769=>389,7770=>722,7771=>389,7772=>722, +7773=>389,7774=>722,7775=>389,7776=>667,7777=>556,7778=>667,7779=>556,7780=>667,7781=>556,7782=>667, +7783=>556,7784=>667,7785=>556,7786=>611,7787=>333,7788=>611,7789=>333,7790=>611,7791=>333,7792=>611, +7793=>333,7794=>722,7795=>611,7796=>722,7797=>611,7798=>722,7799=>611,7800=>722,7801=>611,7802=>722, +7803=>611,7804=>667,7805=>556,7806=>667,7807=>556,7808=>944,7809=>778,7810=>944,7811=>778,7812=>944, +7813=>778,7814=>944,7815=>778,7816=>944,7817=>778,7818=>667,7819=>556,7820=>667,7821=>556,7822=>667, +7823=>556,7824=>611,7825=>500,7826=>611,7827=>500,7828=>611,7829=>500,7830=>611,7831=>333,7832=>778, +7833=>556,7834=>555,7835=>333,7840=>722,7841=>556,7842=>722,7843=>556,7844=>722,7845=>556,7846=>722, +7847=>556,7848=>667,7849=>556,7850=>722,7851=>556,7852=>722,7853=>556,7854=>722,7855=>556,7856=>722, +7857=>556,7858=>722,7859=>556,7860=>722,7861=>556,7862=>722,7863=>556,7864=>667,7865=>556,7866=>667, +7867=>556,7868=>667,7869=>556,7870=>667,7871=>556,7872=>667,7873=>556,7874=>667,7875=>556,7876=>667, +7877=>556,7878=>667,7879=>556,7880=>278,7881=>278,7882=>278,7883=>278,7884=>778,7885=>611,7886=>778, +7887=>611,7888=>778,7889=>611,7890=>778,7891=>611,7892=>778,7893=>611,7894=>778,7895=>611,7896=>778, +7897=>611,7898=>811,7899=>673,7900=>811,7901=>673,7902=>811,7903=>673,7904=>811,7905=>673,7906=>811, +7907=>673,7908=>722,7909=>611,7910=>722,7911=>611,7912=>789,7913=>676,7914=>789,7915=>676,7916=>789, +7917=>676,7918=>789,7919=>676,7920=>789,7921=>676,7922=>667,7923=>556,7924=>667,7925=>556,7926=>667, +7927=>556,7928=>667,7929=>556,7936=>632,7937=>632,7938=>632,7939=>632,7940=>632,7941=>632,7942=>632, +7943=>632,7944=>696,7945=>696,7946=>865,7947=>849,7948=>796,7949=>807,7950=>730,7951=>750,7952=>541, +7953=>541,7954=>541,7955=>541,7956=>541,7957=>541,7960=>758,7961=>760,7962=>957,7963=>943,7964=>939, +7965=>945,7968=>608,7969=>608,7970=>608,7971=>608,7972=>608,7973=>608,7974=>608,7975=>608,7976=>823, +7977=>831,7978=>1026,7979=>1017,7980=>1002,7981=>1024,7982=>908,7983=>909,7984=>315,7985=>315,7986=>373, +7987=>375,7988=>378,7989=>374,7990=>370,7991=>384,7992=>378,7993=>383,7994=>596,7995=>579,7996=>572, +7997=>576,7998=>474,7999=>459,8000=>610,8001=>610,8002=>610,8003=>610,8004=>610,8005=>610,8008=>800, +8009=>871,8010=>1084,8011=>1079,8012=>975,8013=>973,8016=>568,8017=>568,8018=>568,8019=>568,8020=>568, +8021=>568,8022=>568,8023=>568,8025=>906,8027=>1080,8029=>1115,8031=>977,8032=>778,8033=>778,8034=>778, +8035=>778,8036=>778,8037=>778,8038=>778,8039=>778,8040=>837,8041=>860,8042=>1062,8043=>1072,8044=>962, +8045=>985,8046=>922,8047=>959,8048=>632,8049=>632,8050=>541,8051=>541,8052=>608,8053=>608,8054=>315, +8055=>315,8056=>610,8057=>610,8058=>568,8059=>568,8060=>778,8061=>778,8064=>632,8065=>632,8066=>632, +8067=>632,8068=>632,8069=>632,8070=>632,8071=>632,8072=>909,8073=>906,8074=>1061,8075=>1035,8076=>984, +8077=>994,8078=>910,8079=>916,8080=>608,8081=>608,8082=>608,8083=>608,8084=>608,8085=>608,8086=>608, +8087=>608,8088=>1006,8089=>1015,8090=>1204,8091=>1207,8092=>1188,8093=>1209,8094=>1096,8095=>1105,8096=>778, +8097=>778,8098=>778,8099=>778,8100=>778,8101=>778,8102=>778,8103=>778,8104=>1026,8105=>1048,8106=>1251, +8107=>1260,8108=>1150,8109=>1177,8110=>1106,8111=>1142,8112=>632,8113=>632,8114=>632,8115=>632,8116=>660, +8118=>632,8119=>632,8120=>696,8121=>696,8122=>696,8123=>696,8124=>907,8125=>278,8126=>346,8127=>278, +8128=>278,8129=>333,8130=>608,8131=>608,8132=>560,8134=>608,8135=>608,8136=>776,8137=>793,8138=>847, +8139=>854,8140=>848,8141=>492,8142=>489,8143=>394,8144=>335,8145=>354,8146=>367,8147=>368,8150=>353, +8151=>366,8152=>240,8153=>259,8154=>418,8155=>416,8157=>481,8158=>589,8159=>333,8160=>568,8161=>568, +8162=>568,8163=>568,8164=>595,8165=>595,8166=>568,8167=>568,8168=>771,8169=>771,8170=>951,8171=>982, +8172=>806,8173=>333,8174=>333,8175=>333,8178=>778,8179=>778,8180=>778,8182=>778,8183=>778,8184=>909, +8185=>809,8186=>897,8187=>825,8188=>978,8189=>333,8190=>278,8192=>500,8193=>1000,8194=>500,8195=>1000, +8196=>333,8197=>250,8198=>167,8199=>556,8200=>278,8201=>200,8202=>100,8203=>0,8204=>0,8205=>0, +8206=>0,8207=>0,8208=>333,8209=>333,8210=>556,8213=>1000,8214=>437,8215=>556,8219=>278,8223=>500, +8227=>350,8228=>278,8229=>666,8231=>278,8232=>0,8233=>0,8234=>0,8235=>0,8236=>0,8237=>0, +8238=>0,8239=>500,8241=>1367,8242=>238,8243=>426,8244=>614,8245=>238,8246=>379,8247=>571,8248=>450, +8251=>622,8252=>666,8253=>614,8254=>556,8255=>658,8256=>658,8257=>438,8258=>840,8259=>400,8260=>167, +8261=>334,8262=>334,8263=>1222,8264=>944,8265=>944,8266=>556,8267=>537,8268=>537,8269=>537,8270=>389, +8271=>333,8272=>658,8273=>389,8274=>634,8275=>568,8276=>658,8277=>793,8278=>515,8279=>855,8280=>722, +8281=>725,8282=>224,8283=>722,8284=>604,8285=>224,8286=>224,8287=>0,8288=>0,8289=>0,8290=>0, +8291=>0,8292=>0,8304=>351,8305=>200,8308=>351,8309=>351,8310=>351,8311=>351,8312=>351,8313=>351, +8314=>351,8315=>351,8316=>351,8317=>216,8318=>218,8319=>391,8320=>351,8321=>301,8322=>351,8323=>351, +8324=>351,8325=>351,8326=>351,8327=>351,8328=>351,8329=>351,8330=>350,8331=>350,8332=>350,8333=>216, +8334=>216,8336=>363,8337=>366,8338=>394,8339=>360,8340=>355,8355=>611,8356=>591,8357=>889,8358=>727, +8360=>1265,8362=>1049,8363=>580,8368=>605,8373=>591,8376=>612,8400=>0,8401=>0,8402=>0,8403=>0, +8406=>0,8407=>0,8411=>0,8412=>0,8413=>0,8414=>0,8415=>0,8416=>0,8417=>0,8421=>0, +8422=>0,8423=>0,8424=>0,8425=>0,8426=>0,8427=>0,8428=>0,8429=>0,8430=>0,8431=>0, +8432=>0,8448=>945,8449=>968,8451=>1034,8453=>981,8454=>1002,8455=>667,8456=>722,8457=>919,8462=>611, +8465=>606,8467=>608,8468=>881,8470=>999,8471=>860,8476=>699,8480=>1000,8481=>1370,8486=>766,8487=>778, +8489=>315,8490=>741,8491=>729,8494=>556,8498=>588,8501=>714,8502=>651,8503=>557,8504=>638,8506=>871, +8507=>1431,8513=>778,8514=>611,8515=>611,8516=>667,8523=>669,8525=>1242,8526=>482,8531=>869,8532=>869, +8533=>869,8534=>869,8535=>869,8536=>869,8537=>869,8538=>869,8539=>869,8540=>869,8541=>869,8542=>869, +8543=>869,8544=>278,8545=>556,8546=>834,8547=>945,8548=>667,8549=>945,8550=>1223,8551=>1501,8552=>945, +8553=>667,8554=>945,8555=>1223,8556=>611,8557=>722,8558=>722,8559=>833,8560=>278,8561=>556,8562=>834, +8563=>834,8564=>556,8565=>834,8566=>1112,8567=>1390,8568=>834,8569=>556,8570=>834,8571=>1112,8572=>278, +8573=>556,8574=>611,8575=>889,8592=>964,8593=>964,8594=>964,8595=>964,8596=>964,8597=>964,8598=>964, +8599=>964,8600=>964,8601=>964,8602=>964,8603=>964,8606=>964,8607=>964,8608=>964,8609=>964,8610=>964, +8611=>964,8612=>964,8613=>964,8614=>964,8615=>964,8616=>964,8644=>964,8645=>964,8646=>964,8647=>964, +8648=>964,8649=>964,8650=>964,8704=>722,8706=>556,8707=>667,8710=>729,8711=>729,8721=>856,8722=>584, +8725=>869,8730=>594,8747=>608,8800=>548,8804=>584,8805=>584,9251=>500,9674=>541,9675=>860,9711=>1020, +9772=>923,9824=>626,9825=>694,9826=>595,9827=>776,9828=>626,9829=>694,9830=>595,9831=>776,9833=>333, +9834=>556,9835=>778,9836=>778,9837=>556,9838=>556,9839=>556,10048=>1453,11568=>352,11569=>872,11570=>872, +11571=>720,11572=>720,11573=>720,11574=>664,11575=>752,11576=>752,11577=>720,11578=>720,11579=>596,11580=>698, +11581=>742,11582=>574,11583=>742,11584=>872,11585=>872,11586=>312,11587=>720,11588=>696,11589=>720,11590=>584, +11591=>742,11592=>796,11593=>613,11594=>672,11595=>888,11596=>836,11597=>524,11598=>720,11599=>300,11600=>836, +11601=>300,11602=>718,11603=>388,11604=>872,11605=>872,11606=>696,11607=>308,11608=>640,11609=>872,11610=>872, +11611=>762,11612=>424,11613=>720,11614=>762,11615=>720,11616=>709,11617=>720,11618=>541,11619=>828,11620=>454, +11621=>828,11631=>482,11799=>333,42888=>333,42889=>276,42890=>342,42891=>258,42892=>258,64256=>607,64257=>576, +64258=>603,64259=>849,64260=>849,64261=>627,64275=>1243,64276=>1226,64277=>1233,64278=>1238,64279=>1448,64285=>284, +64286=>305,64287=>542,64288=>653,64289=>964,64290=>888,64291=>932,64292=>845,64293=>917,64294=>933,64295=>850, +64296=>1006,64297=>584,64298=>840,64299=>840,64300=>840,64301=>840,64302=>714,64303=>714,64304=>714,64305=>651, +64306=>557,64307=>638,64308=>682,64309=>348,64310=>443,64312=>670,64313=>354,64314=>590,64315=>595,64316=>667, +64318=>704,64320=>429,64321=>670,64323=>661,64324=>660,64326=>671,64327=>672,64328=>600,64329=>840,64330=>756, +64331=>212,64332=>591,64333=>550,64334=>568,64335=>714,65533=>900); +$enc=''; +$diff=''; +$file='freesansb.z'; +$ctg='freesansb.ctg.z'; +$originalsize=359272; +// --- EOF --- --- /dev/null +++ b/tcpdf/fonts/freesansbi.php @@ -1,1 +1,246 @@ - +1000,'Descent'=>-300,'CapHeight'=>22,'Flags'=>96,'FontBBox'=>'[-907 -1175 1591 1639]','ItalicAngle'=>-12,'StemV'=>120,'MissingWidth'=>600); +$up=-145; +$ut=69; +$dw=600; +$cw=array( +32=>278,33=>333,34=>474,35=>556,36=>556,37=>889,38=>722,39=>238,40=>333,41=>333, +42=>389,43=>584,44=>278,45=>333,46=>278,47=>278,48=>556,49=>556,50=>556,51=>556, +52=>556,53=>556,54=>556,55=>556,56=>556,57=>556,58=>333,59=>333,60=>584,61=>584, +62=>584,63=>611,64=>975,65=>722,66=>722,67=>722,68=>722,69=>667,70=>611,71=>778, +72=>722,73=>278,74=>556,75=>722,76=>611,77=>833,78=>722,79=>778,80=>667,81=>778, +82=>722,83=>667,84=>611,85=>722,86=>667,87=>944,88=>667,89=>667,90=>611,91=>333, +92=>278,93=>333,94=>584,95=>556,96=>333,97=>556,98=>611,99=>556,100=>611,101=>556, +102=>333,103=>611,104=>611,105=>278,106=>278,107=>556,108=>278,109=>889,110=>611,111=>611, +112=>611,113=>611,114=>389,115=>556,116=>333,117=>611,118=>556,119=>778,120=>556,121=>556, +122=>500,123=>389,124=>280,125=>389,126=>584,8364=>640,8218=>278,402=>333,8222=>500,8230=>1000, +8224=>556,8225=>556,710=>333,8240=>1000,352=>667,8249=>333,338=>1000,381=>611,8216=>278,8217=>278, +8220=>500,8221=>500,8226=>350,8211=>556,8212=>1000,732=>333,8482=>1000,353=>556,8250=>333,339=>962, +382=>500,376=>667,160=>278,161=>333,162=>556,163=>556,164=>556,165=>556,166=>280,167=>556, +168=>333,169=>737,170=>370,171=>556,172=>584,173=>333,174=>737,175=>333,176=>606,177=>584, +178=>350,179=>350,180=>333,181=>667,182=>556,183=>278,184=>333,185=>248,186=>365,187=>556, +188=>869,189=>869,190=>869,191=>611,192=>722,193=>722,194=>722,195=>722,196=>722,197=>722, +198=>1000,199=>722,200=>667,201=>667,202=>667,203=>667,204=>278,205=>278,206=>278,207=>278, +208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>584,216=>778,217=>722, +218=>722,219=>722,220=>722,221=>667,222=>667,223=>611,224=>556,225=>556,226=>556,227=>556, +228=>556,229=>556,230=>892,231=>556,232=>556,233=>556,234=>556,235=>556,236=>278,237=>278, +238=>278,239=>278,240=>611,241=>611,242=>611,243=>611,244=>611,245=>611,246=>611,247=>584, +248=>611,249=>611,250=>611,251=>611,252=>611,253=>556,254=>611,255=>556,256=>722,257=>556, +258=>722,259=>556,260=>722,261=>556,262=>722,263=>556,264=>722,265=>556,266=>722,267=>556, +268=>722,269=>556,270=>722,271=>722,272=>722,273=>611,274=>667,275=>556,276=>667,277=>556, +278=>667,279=>556,280=>667,281=>556,282=>667,283=>556,284=>778,285=>611,286=>778,287=>611, +288=>778,289=>611,290=>778,291=>611,292=>722,293=>611,294=>722,295=>611,296=>278,297=>278, +298=>278,299=>278,300=>278,301=>278,302=>278,303=>268,304=>278,305=>278,306=>595,307=>488, +308=>556,309=>278,310=>722,311=>556,312=>529,313=>611,314=>278,315=>611,316=>278,317=>611, +318=>444,319=>611,320=>556,321=>611,322=>278,323=>722,324=>611,325=>722,326=>611,327=>722, +328=>611,329=>656,330=>720,331=>611,332=>778,333=>611,334=>778,335=>611,336=>778,337=>611, +340=>722,341=>389,342=>722,343=>389,344=>722,345=>389,346=>667,347=>556,348=>667,349=>556, +350=>667,351=>556,354=>611,355=>333,356=>611,357=>444,358=>611,359=>404,360=>722,361=>611, +362=>722,363=>611,364=>722,365=>611,366=>722,367=>611,368=>722,369=>611,370=>722,371=>611, +372=>944,373=>778,374=>667,375=>556,377=>611,378=>500,379=>611,380=>500,383=>333,384=>611, +385=>963,386=>722,387=>611,388=>687,389=>611,390=>722,391=>752,392=>562,393=>722,394=>968, +395=>722,396=>611,397=>609,398=>667,399=>778,400=>672,401=>611,403=>778,404=>667,405=>940, +406=>278,407=>395,408=>778,409=>556,410=>333,411=>620,412=>889,413=>722,414=>611,415=>778, +416=>808,417=>673,418=>1111,419=>722,420=>914,421=>611,422=>647,423=>667,424=>556,425=>688, +426=>441,427=>333,428=>742,429=>333,430=>611,431=>789,432=>684,433=>780,434=>722,435=>762, +436=>706,437=>611,438=>500,439=>556,440=>556,441=>645,442=>569,443=>579,446=>611,447=>608, +448=>258,449=>443,450=>584,451=>278,452=>1333,453=>1222,454=>1111,455=>1167,456=>889,457=>556, +458=>1278,459=>1000,460=>889,461=>722,462=>556,463=>278,464=>278,465=>778,466=>611,467=>722, +468=>611,469=>722,470=>611,471=>722,472=>611,473=>722,474=>611,475=>722,476=>611,477=>556, +478=>722,479=>556,480=>722,481=>556,482=>1000,483=>892,484=>811,485=>641,486=>778,487=>611, +488=>722,489=>556,490=>778,491=>611,492=>778,493=>611,494=>556,495=>556,496=>278,497=>1333, +498=>1222,499=>1111,500=>778,501=>611,503=>630,504=>722,505=>611,506=>722,507=>556,508=>1000, +509=>892,510=>778,511=>611,512=>722,513=>556,514=>722,515=>556,516=>667,517=>556,518=>667, +519=>556,520=>278,521=>278,522=>278,523=>278,524=>778,525=>611,526=>778,527=>611,528=>722, +529=>389,530=>722,531=>389,532=>722,533=>611,534=>722,535=>611,536=>667,537=>556,538=>611, +539=>333,540=>569,541=>486,542=>722,543=>611,548=>645,549=>500,550=>722,551=>556,552=>667, +553=>556,554=>778,555=>611,556=>778,557=>611,558=>778,559=>611,560=>778,561=>611,562=>667, +563=>556,567=>278,592=>556,593=>611,594=>671,595=>611,596=>556,597=>600,598=>595,599=>611, +600=>556,601=>556,602=>834,603=>570,604=>546,605=>820,606=>570,607=>278,608=>611,609=>611, +610=>556,611=>556,612=>646,613=>619,614=>611,615=>611,616=>278,617=>326,618=>278,619=>473, +620=>527,621=>298,622=>778,623=>889,624=>889,625=>889,626=>611,627=>611,628=>615,629=>590, +630=>878,631=>822,632=>778,633=>389,634=>389,635=>406,636=>419,637=>389,638=>455,639=>455, +640=>620,641=>586,642=>606,643=>333,644=>302,645=>333,646=>556,647=>328,648=>333,649=>623, +650=>686,651=>630,652=>556,653=>778,654=>556,655=>556,656=>519,657=>571,658=>556,659=>632, +660=>611,661=>611,662=>611,663=>556,664=>579,665=>572,666=>570,667=>616,668=>603,669=>552, +670=>556,671=>454,672=>611,673=>611,674=>611,675=>1004,676=>1018,677=>1097,678=>804,679=>593, +680=>840,681=>866,682=>752,683=>668,684=>536,685=>486,686=>659,687=>679,688=>377,689=>377, +690=>202,691=>272,692=>272,693=>299,694=>395,695=>534,696=>364,697=>278,698=>454,699=>278, +700=>333,701=>278,702=>333,703=>333,704=>333,705=>333,706=>333,707=>333,708=>333,709=>333, +711=>333,712=>333,713=>333,714=>333,715=>333,716=>272,717=>333,718=>333,719=>333,720=>333, +721=>333,722=>333,723=>333,724=>333,725=>333,726=>333,727=>333,728=>333,729=>333,730=>333, +731=>333,733=>333,734=>333,735=>510,736=>372,737=>210,738=>363,739=>373,740=>334,741=>526, +742=>526,743=>526,744=>526,745=>526,746=>519,747=>519,748=>333,749=>333,750=>333,751=>333, +752=>333,753=>333,754=>333,755=>333,756=>333,757=>437,758=>437,759=>400,760=>333,761=>200, +762=>200,763=>200,764=>200,765=>332,766=>333,767=>333,768=>0,769=>0,770=>0,771=>0, +772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0, +782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0, +792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0, +802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0, +812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0, +822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0, +832=>0,833=>0,834=>0,835=>0,836=>0,837=>0,838=>0,839=>0,840=>0,841=>0, +842=>0,843=>0,844=>0,845=>0,846=>0,847=>0,848=>0,849=>0,850=>0,851=>0, +852=>0,853=>0,854=>0,855=>0,856=>0,857=>0,858=>0,859=>0,860=>0,861=>0, +862=>0,863=>0,864=>0,865=>0,866=>0,867=>0,868=>0,869=>0,870=>0,871=>0, +872=>0,873=>0,874=>0,875=>0,876=>0,877=>0,878=>0,879=>0,884=>208,885=>247, +890=>364,894=>333,900=>239,901=>446,902=>688,903=>333,904=>903,905=>962,906=>448,908=>904, +910=>991,911=>932,912=>346,913=>764,914=>688,915=>642,916=>744,917=>710,918=>688,919=>743, +920=>810,921=>296,922=>744,923=>744,924=>860,925=>714,926=>690,927=>822,928=>781,929=>698, +931=>688,932=>688,933=>744,934=>777,935=>783,936=>805,937=>780,938=>296,939=>744,940=>640, +941=>530,942=>597,943=>339,944=>575,945=>656,946=>576,947=>591,948=>620,949=>570,950=>522, +951=>586,952=>586,953=>346,954=>576,955=>620,956=>667,957=>564,958=>530,959=>610,960=>721, +961=>626,962=>595,963=>676,964=>592,965=>575,966=>801,967=>632,968=>722,969=>800,970=>346, +971=>575,972=>609,973=>604,974=>769,977=>580,978=>742,979=>857,980=>620,981=>778,982=>740, +983=>601,1008=>556,1009=>566,1012=>778,1013=>328,1024=>667,1025=>667,1026=>790,1027=>617,1028=>731, +1029=>667,1030=>278,1031=>278,1032=>556,1033=>1110,1034=>1088,1035=>790,1036=>722,1037=>757,1038=>698, +1039=>722,1040=>722,1041=>722,1042=>722,1043=>617,1044=>876,1045=>667,1046=>1100,1047=>670,1048=>757, +1049=>757,1050=>722,1051=>715,1052=>874,1053=>753,1054=>778,1055=>753,1056=>680,1057=>722,1058=>611, +1059=>698,1060=>909,1061=>657,1062=>845,1063=>688,1064=>1132,1065=>1217,1066=>835,1067=>980,1068=>678, +1069=>735,1070=>1142,1071=>708,1072=>553,1073=>591,1074=>574,1075=>429,1076=>745,1077=>572,1078=>792, +1079=>554,1080=>603,1081=>603,1082=>559,1083=>583,1084=>664,1085=>603,1086=>588,1087=>603,1088=>605, +1089=>549,1090=>440,1091=>541,1092=>948,1093=>539,1094=>690,1095=>564,1096=>901,1097=>987,1098=>692, +1099=>806,1100=>572,1101=>546,1102=>893,1103=>586,1104=>572,1105=>572,1106=>616,1107=>429,1108=>549, +1109=>562,1110=>281,1111=>281,1112=>282,1113=>888,1114=>897,1115=>606,1116=>559,1117=>603,1118=>541, +1119=>603,1120=>986,1121=>736,1136=>830,1137=>761,1138=>778,1139=>590,1148=>942,1149=>736,1150=>986, +1151=>736,1154=>456,1155=>0,1156=>0,1157=>0,1158=>0,1159=>0,1160=>0,1161=>0,1162=>791, +1163=>662,1164=>639,1165=>581,1166=>670,1167=>649,1168=>623,1169=>450,1170=>623,1171=>472,1172=>674, +1173=>528,1174=>1091,1175=>803,1176=>659,1177=>548,1178=>739,1179=>569,1180=>742,1181=>560,1182=>737, +1183=>559,1184=>900,1185=>679,1186=>808,1187=>673,1188=>1004,1189=>761,1190=>1114,1191=>876,1192=>963, +1193=>766,1194=>724,1195=>554,1196=>611,1197=>454,1198=>667,1199=>584,1200=>652,1201=>632,1202=>667, +1203=>550,1204=>951,1205=>748,1206=>759,1207=>630,1208=>669,1209=>580,1210=>672,1211=>576,1212=>977, +1213=>752,1214=>993,1215=>761,1216=>318,1217=>1087,1218=>792,1219=>726,1220=>530,1221=>782,1222=>674, +1223=>749,1224=>603,1225=>823,1226=>682,1227=>675,1228=>573,1229=>941,1230=>754,1231=>310,1232=>704, +1233=>553,1234=>711,1235=>553,1236=>1000,1237=>892,1238=>667,1239=>569,1240=>738,1241=>561,1242=>738, +1243=>561,1244=>1086,1245=>792,1246=>670,1247=>554,1248=>558,1249=>546,1250=>753,1251=>603,1252=>753, +1253=>603,1254=>778,1255=>588,1256=>778,1257=>590,1258=>778,1259=>590,1260=>735,1261=>546,1262=>698, +1263=>541,1264=>698,1265=>541,1266=>698,1267=>541,1268=>686,1269=>564,1270=>617,1271=>475,1272=>976, +1273=>806,1296=>672,1297=>546,1298=>729,1299=>577,1306=>778,1307=>611,1308=>944,1309=>776,1310=>750, +1311=>573,1329=>730,1330=>713,1331=>765,1332=>752,1333=>708,1334=>801,1335=>496,1336=>713,1337=>855, +1338=>686,1339=>727,1340=>420,1341=>897,1342=>841,1343=>708,1344=>660,1345=>666,1346=>747,1347=>698, +1348=>757,1349=>630,1350=>747,1351=>651,1352=>743,1353=>657,1354=>728,1355=>799,1356=>752,1357=>743, +1358=>768,1359=>691,1360=>713,1361=>640,1362=>425,1363=>818,1364=>672,1365=>805,1366=>754,1369=>333, +1370=>222,1371=>250,1372=>333,1373=>333,1374=>352,1375=>362,1377=>873,1378=>613,1379=>634,1380=>636, +1381=>593,1382=>639,1383=>417,1384=>613,1385=>658,1386=>711,1387=>609,1388=>318,1389=>836,1390=>670, +1391=>613,1392=>607,1393=>611,1394=>626,1395=>619,1396=>618,1397=>324,1398=>613,1399=>540,1400=>591, +1401=>392,1402=>873,1403=>577,1404=>603,1405=>600,1406=>626,1407=>951,1408=>613,1409=>612,1410=>348, +1411=>951,1412=>616,1413=>606,1414=>763,1415=>626,1417=>333,1418=>398,1456=>0,1457=>0,1458=>0, +1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1467=>0,1468=>0,1469=>0, +1470=>516,1471=>0,1472=>297,1473=>0,1474=>0,1475=>333,1476=>0,1488=>714,1489=>651,1490=>557, +1491=>638,1492=>682,1493=>297,1494=>443,1495=>682,1496=>670,1497=>284,1498=>590,1499=>595,1500=>667, +1501=>683,1502=>704,1503=>297,1504=>429,1505=>670,1506=>653,1507=>661,1508=>660,1509=>616,1510=>671, +1511=>672,1512=>600,1513=>840,1514=>756,1520=>554,1521=>550,1522=>542,1523=>238,1524=>474,4256=>616, +4257=>645,4258=>664,4259=>839,4260=>627,4261=>630,4262=>827,4263=>928,4264=>639,4265=>630,4266=>951, +4267=>606,4268=>608,4269=>835,4270=>630,4271=>610,4272=>804,4273=>615,4274=>823,4275=>747,4276=>870, +4277=>627,4278=>840,4279=>627,4280=>665,4281=>610,4282=>799,4283=>598,4284=>665,4285=>664,4286=>608, +4287=>886,4288=>629,4304=>463,4305=>516,4306=>564,4307=>706,4308=>459,4309=>476,4310=>623,4311=>711, +4312=>494,4313=>476,4314=>894,4315=>500,4316=>500,4317=>712,4318=>493,4319=>503,4320=>712,4321=>503, +4322=>710,4323=>670,4324=>707,4325=>459,4326=>691,4327=>465,4328=>492,4329=>480,4330=>656,4331=>500, +4332=>492,4333=>524,4334=>500,4335=>688,4336=>510,4337=>739,4338=>450,4339=>479,4340=>502,4341=>501, +4345=>564,4347=>515,4348=>449,5024=>714,5025=>731,5026=>624,5027=>908,5028=>1040,5029=>271,5030=>654, +5031=>863,5032=>604,5033=>791,5034=>714,5035=>522,5036=>661,5037=>926,5038=>615,5039=>811,5040=>538, +5041=>633,5042=>979,5043=>964,5044=>635,5045=>607,5046=>753,5047=>831,5048=>566,5049=>977,5050=>958, +5051=>710,5052=>616,5053=>834,5054=>790,5055=>612,5056=>766,5057=>857,5058=>627,5059=>649,5060=>607, +5061=>1127,5062=>680,5063=>920,5064=>928,5065=>1333,5066=>920,5067=>705,5068=>695,5069=>1074,5070=>672, +5071=>672,5072=>667,5073=>819,5074=>679,5075=>575,5076=>903,5077=>652,5078=>776,5079=>643,5080=>670, +5081=>660,5082=>648,5083=>934,5084=>909,5085=>613,5086=>615,5087=>735,5088=>900,5089=>1024,5090=>647, +5091=>760,5092=>829,5093=>824,5094=>756,5095=>625,5096=>981,5097=>1014,5098=>1040,5099=>790,5100=>926, +5101=>686,5102=>656,5103=>920,5104=>741,5105=>890,5106=>626,5107=>974,5108=>699,7680=>722,7681=>556, +7682=>722,7683=>611,7684=>722,7685=>611,7686=>722,7687=>611,7688=>722,7689=>556,7690=>722,7691=>611, +7692=>722,7693=>611,7694=>722,7695=>611,7696=>722,7697=>611,7698=>722,7699=>611,7700=>667,7701=>556, +7702=>667,7703=>556,7704=>667,7705=>556,7706=>667,7707=>556,7708=>667,7709=>556,7710=>611,7711=>333, +7712=>778,7713=>611,7714=>722,7715=>611,7716=>722,7717=>611,7718=>722,7719=>611,7720=>722,7721=>611, +7722=>722,7723=>611,7724=>278,7725=>278,7726=>278,7727=>278,7728=>722,7729=>556,7730=>722,7731=>556, +7732=>722,7733=>556,7734=>611,7735=>278,7736=>611,7737=>278,7738=>611,7739=>278,7740=>611,7741=>278, +7742=>833,7743=>889,7744=>833,7745=>889,7746=>833,7747=>889,7748=>722,7749=>611,7750=>722,7751=>611, +7752=>722,7753=>611,7754=>722,7755=>611,7756=>778,7757=>611,7758=>778,7759=>611,7760=>778,7761=>611, +7762=>778,7763=>611,7764=>667,7765=>611,7766=>667,7767=>611,7768=>722,7769=>389,7770=>722,7771=>389, +7772=>722,7773=>389,7774=>722,7775=>389,7776=>667,7777=>556,7778=>667,7779=>556,7780=>667,7781=>556, +7782=>667,7783=>556,7784=>667,7785=>556,7786=>611,7787=>333,7788=>611,7789=>333,7790=>611,7791=>333, +7792=>611,7793=>333,7794=>722,7795=>611,7796=>722,7797=>611,7798=>722,7799=>611,7800=>722,7801=>611, +7802=>722,7803=>611,7804=>667,7805=>556,7806=>667,7807=>556,7808=>944,7809=>778,7810=>944,7811=>778, +7812=>944,7813=>778,7814=>944,7815=>778,7816=>944,7817=>778,7818=>667,7819=>556,7820=>667,7821=>556, +7822=>667,7823=>556,7824=>611,7825=>500,7826=>611,7827=>500,7828=>611,7829=>500,7830=>611,7831=>333, +7832=>778,7833=>556,7834=>555,7835=>333,7840=>722,7841=>556,7842=>722,7843=>556,7844=>722,7845=>556, +7846=>722,7847=>556,7848=>722,7849=>556,7850=>722,7851=>556,7852=>722,7853=>556,7854=>722,7855=>556, +7856=>722,7857=>556,7858=>722,7859=>556,7860=>722,7861=>556,7862=>722,7863=>556,7864=>667,7865=>556, +7866=>667,7867=>556,7868=>667,7869=>556,7870=>667,7871=>556,7872=>667,7873=>556,7874=>667,7875=>556, +7876=>667,7877=>556,7878=>667,7879=>556,7880=>278,7881=>278,7882=>278,7883=>278,7884=>778,7885=>611, +7886=>778,7887=>611,7888=>778,7889=>611,7890=>778,7891=>611,7892=>778,7893=>611,7894=>778,7895=>611, +7896=>778,7897=>611,7898=>808,7899=>673,7900=>808,7901=>673,7902=>808,7903=>673,7904=>808,7905=>673, +7906=>808,7907=>673,7908=>722,7909=>611,7910=>722,7911=>611,7912=>789,7913=>684,7914=>789,7915=>684, +7916=>789,7917=>684,7918=>789,7919=>684,7920=>789,7921=>684,7922=>667,7923=>556,7924=>667,7925=>556, +7926=>667,7927=>556,7928=>667,7929=>556,7936=>656,7937=>656,7938=>656,7939=>656,7940=>656,7941=>656, +7942=>656,7943=>656,7944=>764,7945=>764,7946=>916,7947=>940,7948=>908,7949=>891,7950=>844,7951=>869, +7952=>570,7953=>570,7954=>570,7955=>570,7956=>570,7957=>570,7960=>842,7961=>836,7962=>1025,7963=>1051, +7964=>1035,7965=>1049,7968=>586,7969=>586,7970=>586,7971=>586,7972=>586,7973=>586,7974=>586,7975=>586, +7976=>891,7977=>886,7978=>1081,7979=>1108,7980=>1085,7981=>1096,7982=>1009,7983=>1023,7984=>346,7985=>346, +7986=>346,7987=>346,7988=>346,7989=>346,7990=>346,7991=>346,7992=>467,7993=>476,7994=>631,7995=>661, +7996=>631,7997=>633,7998=>568,7999=>571,8000=>610,8001=>610,8002=>610,8003=>610,8004=>610,8005=>610, +8008=>945,8009=>905,8010=>1118,8011=>1121,8012=>1064,8013=>1062,8016=>575,8017=>575,8018=>575,8019=>575, +8020=>575,8021=>575,8022=>575,8023=>575,8025=>964,8027=>1148,8029=>1162,8031=>1081,8032=>800,8033=>800, +8034=>800,8035=>800,8036=>800,8037=>800,8038=>800,8039=>800,8040=>904,8041=>875,8042=>1092,8043=>1087, +8044=>1003,8045=>1002,8046=>1001,8047=>1025,8048=>656,8049=>656,8050=>570,8051=>570,8052=>586,8053=>586, +8054=>346,8055=>346,8056=>610,8057=>610,8058=>575,8059=>575,8060=>800,8061=>800,8064=>656,8065=>656, +8066=>656,8067=>656,8068=>656,8069=>656,8070=>656,8071=>656,8072=>854,8073=>855,8074=>1006,8075=>1030, +8076=>996,8077=>977,8078=>938,8079=>959,8080=>586,8081=>586,8082=>586,8083=>586,8084=>586,8085=>586, +8086=>586,8087=>586,8088=>960,8089=>960,8090=>1155,8091=>1186,8092=>1161,8093=>1171,8094=>1087,8095=>1102, +8096=>800,8097=>800,8098=>800,8099=>800,8100=>800,8101=>800,8102=>800,8103=>800,8104=>1005,8105=>980, +8106=>1201,8107=>1192,8108=>1109,8109=>1108,8110=>1106,8111=>1130,8112=>656,8113=>656,8114=>656,8115=>656, +8116=>640,8118=>656,8119=>656,8120=>764,8121=>764,8122=>764,8123=>764,8124=>854,8125=>278,8126=>201, +8127=>147,8128=>278,8129=>333,8130=>586,8131=>586,8132=>597,8134=>586,8135=>586,8136=>911,8137=>925, +8138=>941,8139=>948,8140=>826,8141=>402,8142=>403,8143=>147,8144=>346,8145=>346,8146=>346,8147=>346, +8150=>346,8151=>346,8152=>296,8153=>296,8154=>511,8155=>521,8157=>434,8158=>433,8159=>333,8160=>575, +8161=>575,8162=>575,8163=>575,8164=>626,8165=>626,8166=>575,8167=>575,8168=>744,8169=>744,8170=>901, +8171=>975,8172=>837,8173=>353,8174=>351,8175=>303,8178=>800,8179=>800,8180=>800,8182=>800,8183=>800, +8184=>979,8185=>918,8186=>936,8187=>877,8188=>895,8189=>333,8190=>159,8192=>500,8193=>1000,8194=>500, +8195=>1000,8196=>333,8197=>250,8198=>167,8199=>556,8200=>278,8201=>200,8202=>100,8203=>0,8204=>0, +8205=>0,8206=>0,8207=>0,8208=>333,8209=>333,8210=>556,8213=>1000,8214=>437,8215=>556,8219=>278, +8223=>503,8227=>350,8228=>278,8229=>666,8231=>278,8232=>0,8233=>0,8234=>0,8235=>0,8236=>0, +8237=>0,8238=>0,8239=>500,8241=>1372,8242=>238,8243=>426,8244=>614,8245=>238,8246=>379,8247=>571, +8248=>450,8251=>622,8252=>666,8253=>617,8254=>556,8255=>658,8256=>658,8257=>438,8258=>840,8259=>400, +8260=>167,8261=>334,8262=>334,8263=>1222,8264=>944,8265=>944,8266=>556,8267=>556,8268=>537,8269=>537, +8270=>389,8271=>333,8272=>658,8273=>389,8274=>634,8275=>568,8276=>658,8277=>793,8278=>515,8279=>855, +8280=>722,8281=>725,8282=>224,8283=>722,8284=>604,8285=>224,8286=>224,8287=>0,8288=>0,8289=>0, +8290=>0,8291=>0,8292=>0,8304=>351,8305=>200,8308=>351,8309=>351,8310=>351,8311=>351,8312=>351, +8313=>351,8314=>351,8315=>351,8316=>351,8317=>270,8318=>270,8319=>391,8320=>351,8321=>251,8322=>351, +8323=>351,8324=>351,8325=>351,8326=>351,8327=>351,8328=>351,8329=>351,8330=>350,8331=>350,8332=>350, +8333=>270,8334=>270,8336=>363,8337=>366,8338=>394,8339=>360,8340=>355,8355=>611,8356=>576,8357=>833, +8358=>724,8360=>1286,8362=>1049,8363=>571,8368=>594,8373=>591,8376=>612,8400=>0,8401=>0,8402=>0, +8403=>0,8406=>0,8407=>0,8411=>0,8412=>0,8413=>0,8414=>0,8415=>0,8416=>0,8417=>0, +8421=>0,8422=>0,8423=>0,8424=>0,8425=>0,8426=>0,8427=>0,8428=>0,8429=>0,8430=>0, +8431=>0,8432=>0,8448=>945,8449=>1007,8451=>1020,8453=>981,8454=>1002,8455=>667,8456=>722,8457=>930, +8462=>611,8465=>606,8467=>608,8468=>883,8470=>1006,8471=>860,8476=>699,8480=>1000,8481=>1330,8486=>780, +8487=>780,8489=>286,8490=>722,8491=>722,8494=>556,8498=>626,8501=>714,8502=>651,8503=>557,8504=>638, +8506=>906,8507=>1425,8513=>778,8514=>611,8515=>611,8516=>667,8523=>710,8525=>1242,8526=>460,8531=>869, +8532=>869,8533=>869,8534=>869,8535=>869,8536=>869,8537=>869,8538=>869,8539=>869,8540=>869,8541=>869, +8542=>869,8543=>869,8544=>278,8545=>556,8546=>834,8547=>945,8548=>667,8549=>945,8550=>1223,8551=>1501, +8552=>945,8553=>667,8554=>945,8555=>1223,8556=>611,8557=>722,8558=>722,8559=>833,8560=>278,8561=>556, +8562=>834,8563=>834,8564=>556,8565=>834,8566=>1112,8567=>1390,8568=>834,8569=>556,8570=>834,8571=>1112, +8572=>278,8573=>556,8574=>611,8575=>889,8592=>964,8593=>964,8594=>964,8595=>964,8596=>964,8597=>964, +8598=>964,8599=>964,8600=>964,8601=>964,8602=>964,8603=>964,8606=>964,8607=>964,8608=>964,8609=>964, +8610=>964,8611=>964,8612=>964,8613=>964,8614=>964,8615=>964,8616=>964,8644=>964,8645=>964,8646=>964, +8647=>964,8648=>964,8649=>964,8650=>964,8706=>608,8710=>729,8721=>856,8722=>584,8723=>584,8725=>1107, +8730=>597,8800=>584,8804=>584,8805=>584,9251=>500,9674=>541,9675=>860,9711=>1020,9824=>626,9825=>694, +9826=>595,9827=>776,9828=>626,9829=>694,9830=>595,9831=>776,9833=>333,9834=>556,9835=>778,9836=>778, +9837=>556,9838=>556,9839=>556,11568=>352,11569=>872,11570=>872,11571=>720,11572=>720,11573=>720,11574=>664, +11575=>752,11576=>752,11577=>720,11578=>720,11579=>596,11580=>698,11581=>742,11582=>574,11583=>742,11584=>872, +11585=>872,11586=>312,11587=>720,11588=>696,11589=>720,11590=>584,11591=>742,11592=>796,11593=>613,11594=>672, +11595=>888,11596=>836,11597=>524,11598=>720,11599=>300,11600=>836,11601=>300,11602=>718,11603=>388,11604=>872, +11605=>872,11606=>696,11607=>308,11608=>640,11609=>872,11610=>872,11611=>762,11612=>424,11613=>720,11614=>762, +11615=>720,11616=>709,11617=>720,11618=>541,11619=>828,11620=>454,11621=>828,11631=>482,11799=>333,42888=>333, +42889=>276,42890=>342,42891=>258,42892=>258,64256=>607,64257=>576,64258=>603,64259=>849,64260=>849,64261=>627, +64275=>1243,64276=>1226,64277=>1233,64278=>1238,64279=>1448,64285=>284,64286=>305,64287=>542,64288=>653,64289=>964, +64290=>888,64291=>932,64292=>845,64293=>917,64294=>933,64295=>850,64296=>1006,64297=>584,64298=>840,64299=>840, +64300=>840,64301=>840,64302=>714,64303=>714,64304=>714,64305=>651,64306=>557,64307=>638,64308=>682,64309=>348, +64310=>443,64312=>670,64313=>354,64314=>590,64315=>595,64316=>667,64318=>704,64320=>429,64321=>670,64323=>661, +64324=>660,64326=>671,64327=>672,64328=>600,64329=>840,64330=>756,64331=>212,64332=>591,64333=>550,64334=>568, +64335=>714,65533=>900); +$enc=''; +$diff=''; +$file='freesansbi.z'; +$ctg='freesansbi.ctg.z'; +$originalsize=301188; +// --- EOF --- --- /dev/null +++ b/tcpdf/fonts/freesansi.php @@ -1,1 +1,257 @@ - +1000,'Descent'=>-300,'CapHeight'=>22,'Flags'=>96,'FontBBox'=>'[-1166 -431 1572 1072]','ItalicAngle'=>-12,'StemV'=>70,'MissingWidth'=>600); +$up=-176; +$ut=50; +$dw=600; +$cw=array( +32=>278,33=>278,34=>355,35=>556,36=>556,37=>889,38=>667,39=>191,40=>333,41=>333, +42=>389,43=>584,44=>278,45=>333,46=>278,47=>278,48=>556,49=>556,50=>556,51=>556, +52=>556,53=>556,54=>556,55=>556,56=>556,57=>556,58=>278,59=>278,60=>584,61=>584, +62=>584,63=>556,64=>1015,65=>667,66=>667,67=>722,68=>722,69=>667,70=>611,71=>778, +72=>722,73=>278,74=>500,75=>667,76=>556,77=>833,78=>722,79=>778,80=>667,81=>778, +82=>722,83=>667,84=>611,85=>722,86=>667,87=>944,88=>667,89=>667,90=>611,91=>278, +92=>278,93=>278,94=>469,95=>556,96=>333,97=>556,98=>556,99=>500,100=>556,101=>556, +102=>278,103=>556,104=>556,105=>222,106=>222,107=>500,108=>222,109=>833,110=>556,111=>556, +112=>556,113=>556,114=>333,115=>500,116=>278,117=>556,118=>500,119=>722,120=>500,121=>500, +122=>500,123=>334,124=>260,125=>334,126=>584,8364=>655,8218=>222,402=>278,8222=>333,8230=>1000, +8224=>556,8225=>556,710=>333,8240=>1000,352=>667,8249=>250,338=>1000,381=>611,8216=>222,8217=>222, +8220=>333,8221=>333,8226=>350,8211=>556,8212=>1000,732=>333,8482=>1000,353=>500,8250=>250,339=>937, +382=>500,376=>667,160=>278,161=>333,162=>556,163=>556,164=>556,165=>556,166=>260,167=>556, +168=>333,169=>737,170=>370,171=>444,172=>584,173=>333,174=>737,175=>333,176=>606,177=>584, +178=>352,179=>352,180=>333,181=>556,182=>537,183=>278,184=>333,185=>250,186=>365,187=>444, +188=>947,189=>947,190=>947,191=>611,192=>667,193=>667,194=>667,195=>667,196=>667,197=>667, +198=>1000,199=>722,200=>667,201=>667,202=>667,203=>667,204=>278,205=>278,206=>278,207=>278, +208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>584,216=>778,217=>722, +218=>722,219=>722,220=>722,221=>667,222=>667,223=>611,224=>556,225=>556,226=>556,227=>556, +228=>556,229=>556,230=>897,231=>500,232=>556,233=>556,234=>556,235=>556,236=>278,237=>278, +238=>278,239=>278,240=>556,241=>556,242=>556,243=>556,244=>556,245=>556,246=>556,247=>584, +248=>611,249=>556,250=>556,251=>556,252=>556,253=>500,254=>556,255=>500,256=>667,257=>556, +258=>667,259=>556,260=>667,261=>556,262=>722,263=>500,264=>722,265=>500,266=>722,267=>500, +268=>722,269=>500,270=>722,271=>722,272=>722,273=>556,274=>667,275=>556,276=>667,277=>556, +278=>667,279=>556,280=>667,281=>556,282=>667,283=>556,284=>778,285=>556,286=>778,287=>556, +288=>778,289=>556,290=>778,291=>556,292=>722,293=>556,294=>722,295=>556,296=>278,297=>278, +298=>278,299=>278,300=>278,301=>278,302=>278,303=>222,304=>278,305=>278,306=>742,307=>387, +308=>500,309=>222,310=>667,311=>500,312=>510,313=>556,314=>222,315=>556,316=>222,317=>556, +318=>377,319=>556,320=>409,321=>556,322=>222,323=>722,324=>556,325=>722,326=>556,327=>722, +328=>556,329=>692,330=>670,331=>556,332=>778,333=>556,334=>778,335=>556,336=>778,337=>556, +340=>722,341=>333,342=>722,343=>333,344=>722,345=>333,346=>667,347=>500,348=>667,349=>500, +350=>667,351=>500,354=>611,355=>278,356=>611,357=>443,358=>611,359=>278,360=>722,361=>556, +362=>722,363=>556,364=>722,365=>556,366=>722,367=>556,368=>722,369=>556,370=>722,371=>556, +372=>944,373=>722,374=>667,375=>500,377=>611,378=>500,379=>611,380=>500,383=>278,384=>556, +385=>854,386=>667,387=>556,388=>667,389=>556,390=>722,391=>722,392=>530,393=>722,394=>869, +395=>667,396=>556,397=>566,398=>667,399=>778,400=>667,401=>611,403=>778,404=>667,405=>889, +406=>278,407=>333,408=>741,409=>500,410=>333,411=>560,412=>833,413=>722,414=>556,415=>778, +416=>778,417=>556,418=>944,419=>722,420=>842,421=>556,422=>666,423=>667,424=>500,425=>611, +426=>333,427=>278,428=>611,429=>278,430=>611,431=>773,432=>623,433=>768,434=>722,435=>793, +436=>616,437=>611,438=>500,439=>611,440=>611,441=>500,442=>500,443=>556,446=>556,447=>556, +448=>260,449=>520,450=>584,451=>278,452=>1311,453=>1208,454=>1056,455=>1056,456=>778,457=>444, +458=>1158,459=>944,460=>778,461=>667,462=>556,463=>278,464=>278,465=>778,466=>556,467=>722, +468=>556,469=>722,470=>556,471=>722,472=>556,473=>722,474=>556,475=>722,476=>556,477=>556, +478=>667,479=>556,480=>667,481=>556,482=>1000,483=>897,484=>778,485=>556,486=>778,487=>556, +488=>667,489=>500,490=>778,491=>556,492=>778,493=>556,494=>611,495=>560,496=>222,497=>1333, +498=>1222,499=>1056,500=>778,501=>556,503=>630,504=>722,505=>556,506=>667,507=>556,508=>1000, +509=>897,510=>778,511=>611,512=>667,513=>556,514=>667,515=>556,516=>667,517=>556,518=>667, +519=>556,520=>278,521=>278,522=>278,523=>278,524=>778,525=>556,526=>778,527=>556,528=>722, +529=>333,530=>722,531=>333,532=>722,533=>556,534=>722,535=>556,536=>667,537=>500,538=>611, +539=>278,540=>521,541=>393,542=>722,543=>556,548=>611,549=>500,550=>667,551=>556,552=>667, +553=>556,554=>778,555=>556,556=>778,557=>556,558=>778,559=>556,560=>778,561=>556,562=>667, +563=>500,567=>222,592=>556,593=>556,594=>589,595=>556,596=>500,597=>500,598=>581,599=>564, +600=>556,601=>556,602=>773,603=>500,604=>500,605=>742,606=>500,607=>246,608=>556,609=>556, +610=>546,611=>551,612=>556,613=>556,614=>556,615=>556,616=>245,617=>222,618=>278,619=>473, +620=>427,621=>229,622=>611,623=>833,624=>803,625=>833,626=>566,627=>576,628=>560,629=>556, +630=>778,631=>722,632=>728,633=>333,634=>333,635=>393,636=>333,637=>333,638=>384,639=>369, +640=>546,641=>546,642=>550,643=>328,644=>298,645=>298,646=>444,647=>278,648=>278,649=>579, +650=>626,651=>539,652=>500,653=>722,654=>500,655=>538,656=>510,657=>520,658=>560,659=>552, +660=>556,661=>556,662=>556,663=>1000,664=>526,665=>501,666=>520,667=>575,668=>520,669=>444, +670=>500,671=>430,672=>556,673=>521,674=>516,675=>934,676=>944,677=>944,678=>689,679=>506, +680=>764,681=>766,682=>660,683=>577,684=>475,685=>486,686=>565,687=>621,688=>333,689=>333, +690=>167,691=>236,692=>236,693=>276,694=>359,695=>500,696=>330,697=>278,698=>454,699=>278, +700=>278,701=>278,702=>333,703=>333,704=>333,705=>333,706=>333,707=>333,708=>333,709=>333, +711=>333,712=>333,713=>333,714=>333,715=>333,716=>333,717=>333,718=>333,719=>333,720=>333, +721=>333,722=>333,723=>333,724=>333,725=>333,726=>333,727=>333,728=>333,729=>333,730=>333, +731=>333,733=>333,734=>333,735=>510,736=>333,737=>186,738=>333,739=>333,740=>334,741=>526, +742=>526,743=>526,744=>526,745=>526,746=>519,747=>519,748=>333,749=>333,750=>333,751=>333, +752=>383,753=>294,754=>294,755=>327,756=>261,757=>437,758=>437,759=>333,760=>278,761=>200, +762=>200,763=>200,764=>200,765=>333,766=>333,767=>333,768=>0,769=>0,770=>0,771=>0, +772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0, +782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0, +792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0, +802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0, +812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0, +822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0, +832=>0,833=>0,834=>0,835=>0,836=>0,837=>0,838=>0,839=>0,840=>0,841=>0, +842=>0,843=>0,844=>0,845=>0,846=>0,847=>0,848=>0,849=>0,850=>0,851=>0, +852=>0,853=>0,854=>0,855=>0,856=>0,857=>0,858=>0,859=>0,860=>0,861=>0, +862=>0,863=>0,864=>0,865=>0,866=>0,867=>0,868=>0,869=>0,870=>0,871=>0, +872=>0,873=>0,874=>0,875=>0,876=>0,877=>0,878=>0,879=>0,884=>199,885=>199, +890=>332,894=>278,900=>291,901=>624,902=>659,903=>278,904=>870,905=>870,906=>315,908=>876, +910=>903,911=>882,912=>333,913=>765,914=>643,915=>589,916=>760,917=>659,918=>682,919=>707, +920=>769,921=>256,922=>689,923=>765,924=>825,925=>687,926=>649,927=>766,928=>730,929=>649, +931=>678,932=>655,933=>733,934=>753,935=>783,936=>773,937=>768,938=>285,939=>733,940=>593, +941=>523,942=>595,943=>271,944=>549,945=>596,946=>534,947=>531,948=>566,949=>523,950=>470, +951=>557,952=>547,953=>293,954=>516,955=>579,956=>571,957=>518,958=>499,959=>561,960=>636, +961=>551,962=>564,963=>627,964=>505,965=>549,966=>715,967=>579,968=>662,969=>746,970=>335, +971=>549,972=>535,973=>503,974=>725,977=>580,978=>742,979=>809,980=>620,981=>728,982=>740, +983=>556,1008=>556,1009=>566,1012=>778,1013=>328,1024=>657,1025=>657,1026=>781,1027=>590,1028=>709, +1029=>655,1030=>254,1031=>254,1032=>532,1033=>1002,1034=>1166,1035=>772,1036=>674,1037=>730,1038=>605, +1039=>721,1040=>667,1041=>665,1042=>665,1043=>590,1044=>807,1045=>657,1046=>914,1047=>653,1048=>730, +1049=>730,1050=>674,1051=>656,1052=>846,1053=>721,1054=>778,1055=>720,1056=>649,1057=>709,1058=>606, +1059=>605,1060=>875,1061=>660,1062=>754,1063=>612,1064=>830,1065=>872,1066=>839,1067=>885,1068=>668, +1069=>708,1070=>1099,1071=>676,1072=>556,1073=>545,1074=>521,1075=>375,1076=>572,1077=>538,1078=>815, +1079=>488,1080=>557,1081=>557,1082=>519,1083=>508,1084=>618,1085=>558,1086=>533,1087=>557,1088=>569, +1089=>511,1090=>392,1091=>469,1092=>922,1093=>475,1094=>588,1095=>482,1096=>693,1097=>722,1098=>644, +1099=>731,1100=>521,1101=>509,1102=>790,1103=>550,1104=>538,1105=>538,1106=>566,1107=>375,1108=>506, +1109=>488,1110=>224,1111=>272,1112=>226,1113=>793,1114=>849,1115=>576,1116=>519,1117=>557,1118=>469, +1119=>557,1120=>942,1121=>693,1136=>749,1137=>666,1138=>785,1139=>528,1148=>942,1149=>736,1150=>947, +1151=>686,1154=>456,1155=>0,1156=>0,1157=>0,1158=>0,1159=>0,1160=>0,1161=>0,1162=>751, +1163=>588,1164=>685,1165=>554,1166=>656,1167=>606,1168=>598,1169=>396,1170=>611,1171=>409,1172=>592, +1173=>448,1174=>921,1175=>826,1176=>657,1177=>493,1178=>680,1179=>529,1180=>678,1181=>524,1182=>695, +1183=>528,1184=>846,1185=>650,1186=>741,1187=>578,1188=>992,1189=>700,1190=>1047,1191=>778,1192=>810, +1193=>645,1194=>709,1195=>509,1196=>611,1197=>393,1198=>664,1199=>580,1200=>668,1201=>617,1202=>664, +1203=>489,1204=>905,1205=>662,1206=>631,1207=>498,1208=>597,1209=>472,1210=>597,1211=>471,1212=>927, +1213=>716,1214=>927,1215=>699,1216=>254,1217=>915,1218=>815,1219=>665,1220=>510,1221=>678,1222=>533, +1223=>721,1224=>558,1225=>751,1226=>589,1227=>599,1228=>472,1229=>876,1230=>649,1231=>254,1232=>667, +1233=>552,1234=>667,1235=>552,1236=>1000,1237=>897,1238=>657,1239=>538,1240=>722,1241=>511,1242=>722, +1243=>511,1244=>914,1245=>815,1246=>653,1247=>488,1248=>611,1249=>546,1250=>730,1251=>557,1252=>730, +1253=>557,1254=>774,1255=>529,1256=>785,1257=>528,1258=>785,1259=>528,1260=>708,1261=>509,1262=>605, +1263=>469,1264=>605,1265=>469,1266=>605,1267=>469,1268=>612,1269=>482,1270=>601,1271=>430,1272=>885, +1273=>731,1296=>667,1297=>500,1298=>673,1299=>557,1306=>778,1307=>556,1308=>944,1309=>722,1310=>667, +1311=>510,1329=>722,1330=>705,1331=>774,1332=>754,1333=>722,1334=>751,1335=>485,1336=>722,1337=>782, +1338=>655,1339=>699,1340=>417,1341=>853,1342=>791,1343=>711,1344=>588,1345=>663,1346=>665,1347=>665, +1348=>756,1349=>623,1350=>773,1351=>603,1352=>722,1353=>648,1354=>722,1355=>751,1356=>750,1357=>722, +1358=>748,1359=>667,1360=>699,1361=>623,1362=>417,1363=>785,1364=>638,1365=>778,1366=>716,1369=>333, +1370=>222,1371=>133,1372=>325,1373=>333,1374=>333,1375=>333,1377=>833,1378=>556,1379=>572,1380=>581, +1381=>546,1382=>588,1383=>448,1384=>556,1385=>568,1386=>582,1387=>552,1388=>301,1389=>799,1390=>556, +1391=>554,1392=>533,1393=>548,1394=>552,1395=>552,1396=>544,1397=>222,1398=>544,1399=>456,1400=>556, +1401=>390,1402=>833,1403=>509,1404=>547,1405=>533,1406=>610,1407=>887,1408=>556,1409=>545,1410=>301, +1411=>853,1412=>632,1413=>579,1414=>690,1415=>545,1417=>278,1418=>367,1456=>0,1457=>0,1458=>0, +1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1467=>0,1468=>0,1469=>0, +1470=>488,1471=>0,1472=>212,1473=>0,1474=>0,1475=>278,1476=>0,1488=>640,1489=>591,1490=>466, +1491=>598,1492=>622,1493=>212,1494=>351,1495=>623,1496=>608,1497=>200,1498=>526,1499=>550,1500=>600, +1501=>623,1502=>621,1503=>212,1504=>378,1505=>607,1506=>587,1507=>575,1508=>568,1509=>540,1510=>590, +1511=>606,1512=>547,1513=>776,1514=>687,1520=>424,1521=>412,1522=>400,1523=>184,1524=>344,2433=>0, +2434=>300,2435=>264,2437=>594,2438=>790,2439=>469,2440=>513,2441=>520,2442=>549,2443=>594,2444=>481, +2447=>580,2448=>627,2451=>540,2452=>613,2453=>570,2454=>467,2455=>471,2456=>428,2457=>483,2458=>408, +2459=>509,2460=>591,2461=>563,2462=>771,2463=>381,2464=>404,2465=>522,2466=>408,2467=>450,2468=>543, +2469=>477,2470=>418,2471=>433,2472=>445,2474=>499,2475=>584,2476=>377,2477=>555,2478=>448,2479=>423, +2480=>390,2482=>498,2486=>498,2487=>425,2488=>495,2489=>440,2492=>22,2493=>440,2494=>193,2495=>189, +2496=>180,2497=>0,2498=>0,2499=>0,2500=>0,2503=>252,2504=>243,2507=>889,2508=>865,2509=>0, +2510=>356,2519=>219,2524=>523,2525=>408,2527=>428,2528=>594,2529=>481,2530=>0,2531=>0,2534=>500, +2535=>437,2536=>479,2537=>530,2538=>497,2539=>500,2540=>482,2541=>503,2542=>517,2543=>481,2544=>377, +2545=>377,2546=>429,2547=>383,2548=>429,2549=>478,2550=>545,2551=>158,2552=>365,2553=>280,2554=>357, +4256=>587,4257=>620,4258=>642,4259=>815,4260=>600,4261=>595,4262=>799,4263=>893,4264=>622,4265=>597, +4266=>939,4267=>602,4268=>603,4269=>790,4270=>587,4271=>623,4272=>799,4273=>601,4274=>792,4275=>724, +4276=>847,4277=>599,4278=>812,4279=>603,4280=>653,4281=>590,4282=>754,4283=>596,4284=>653,4285=>651, +4286=>596,4287=>888,4288=>593,4304=>436,4305=>491,4306=>528,4307=>692,4308=>447,4309=>447,4310=>628, +4311=>734,4312=>449,4313=>445,4314=>843,4315=>449,4316=>449,4317=>682,4318=>449,4319=>480,4320=>682, +4321=>468,4322=>710,4323=>623,4324=>697,4325=>447,4326=>702,4327=>447,4328=>470,4329=>440,4330=>632, +4331=>449,4332=>470,4333=>536,4334=>449,4335=>656,4336=>474,4337=>630,4338=>394,4339=>419,4340=>422, +4341=>436,4345=>528,4347=>515,4348=>449,5024=>678,5025=>756,5026=>604,5027=>770,5028=>969,5029=>207, +5030=>633,5031=>800,5032=>474,5033=>689,5034=>672,5035=>446,5036=>637,5037=>776,5038=>511,5039=>723, +5040=>528,5041=>591,5042=>839,5043=>963,5044=>615,5045=>563,5046=>705,5047=>800,5048=>558,5049=>880, +5050=>966,5051=>675,5052=>527,5053=>733,5054=>779,5055=>547,5056=>756,5057=>834,5058=>604,5059=>632, +5060=>605,5061=>1051,5062=>657,5063=>842,5064=>748,5065=>1192,5066=>842,5067=>632,5068=>668,5069=>928, +5070=>626,5071=>655,5072=>502,5073=>696,5074=>642,5075=>518,5076=>952,5077=>622,5078=>710,5079=>521, +5080=>556,5081=>656,5082=>622,5083=>881,5084=>760,5085=>564,5086=>567,5087=>712,5088=>717,5089=>838, +5090=>617,5091=>689,5092=>767,5093=>728,5094=>690,5095=>551,5096=>859,5097=>957,5098=>900,5099=>779, +5100=>805,5101=>621,5102=>604,5103=>842,5104=>653,5105=>737,5106=>601,5107=>901,5108=>655,7680=>667, +7681=>556,7682=>667,7683=>556,7684=>667,7685=>556,7686=>667,7687=>556,7688=>722,7689=>500,7690=>722, +7691=>556,7692=>722,7693=>556,7694=>722,7695=>556,7696=>722,7697=>556,7698=>722,7699=>556,7700=>667, +7701=>556,7702=>667,7703=>556,7704=>667,7705=>556,7706=>667,7707=>556,7708=>667,7709=>556,7710=>611, +7711=>278,7712=>778,7713=>556,7714=>722,7715=>556,7716=>722,7717=>556,7718=>722,7719=>556,7720=>722, +7721=>556,7722=>722,7723=>556,7724=>278,7725=>222,7726=>278,7727=>278,7728=>667,7729=>500,7730=>667, +7731=>500,7732=>667,7733=>500,7734=>556,7735=>222,7736=>556,7737=>222,7738=>556,7739=>222,7740=>556, +7741=>222,7742=>833,7743=>833,7744=>833,7745=>833,7746=>833,7747=>833,7748=>722,7749=>556,7750=>722, +7751=>556,7752=>722,7753=>556,7754=>722,7755=>556,7756=>778,7757=>556,7758=>778,7759=>556,7760=>778, +7761=>556,7762=>778,7763=>556,7764=>667,7765=>556,7766=>667,7767=>556,7768=>722,7769=>333,7770=>722, +7771=>333,7772=>722,7773=>333,7774=>722,7775=>333,7776=>667,7777=>500,7778=>667,7779=>500,7780=>667, +7781=>500,7782=>667,7783=>500,7784=>667,7785=>500,7786=>611,7787=>278,7788=>611,7789=>278,7790=>611, +7791=>278,7792=>611,7793=>278,7794=>722,7795=>556,7796=>722,7797=>556,7798=>722,7799=>556,7800=>722, +7801=>556,7802=>722,7803=>556,7804=>667,7805=>500,7806=>667,7807=>500,7808=>944,7809=>722,7810=>944, +7811=>722,7812=>944,7813=>722,7814=>944,7815=>722,7816=>944,7817=>722,7818=>667,7819=>500,7820=>667, +7821=>500,7822=>667,7823=>500,7824=>611,7825=>500,7826=>611,7827=>500,7828=>611,7829=>500,7830=>556, +7831=>278,7832=>722,7833=>500,7834=>555,7835=>278,7840=>667,7841=>556,7842=>667,7843=>556,7844=>667, +7845=>556,7846=>667,7847=>556,7848=>667,7849=>556,7850=>667,7851=>556,7852=>667,7853=>556,7854=>667, +7855=>556,7856=>667,7857=>556,7858=>667,7859=>556,7860=>667,7861=>556,7862=>667,7863=>556,7864=>667, +7865=>556,7866=>667,7867=>556,7868=>667,7869=>556,7870=>667,7871=>556,7872=>667,7873=>556,7874=>667, +7875=>556,7876=>667,7877=>556,7878=>667,7879=>556,7880=>278,7881=>278,7882=>278,7883=>222,7884=>778, +7885=>556,7886=>778,7887=>556,7888=>778,7889=>556,7890=>778,7891=>556,7892=>778,7893=>556,7894=>778, +7895=>556,7896=>778,7897=>556,7898=>778,7899=>556,7900=>778,7901=>556,7902=>778,7903=>556,7904=>778, +7905=>556,7906=>778,7907=>556,7908=>722,7909=>556,7910=>722,7911=>556,7912=>773,7913=>623,7914=>773, +7915=>623,7916=>773,7917=>623,7918=>773,7919=>623,7920=>773,7921=>623,7922=>667,7923=>500,7924=>667, +7925=>500,7926=>667,7927=>500,7928=>667,7929=>500,7936=>596,7937=>596,7938=>596,7939=>596,7940=>596, +7941=>596,7942=>596,7943=>596,7944=>718,7945=>718,7946=>796,7947=>780,7948=>746,7949=>744,7950=>718, +7951=>718,7952=>523,7953=>523,7954=>523,7955=>523,7956=>523,7957=>523,7960=>759,7961=>751,7962=>962, +7963=>957,7964=>958,7965=>947,7968=>557,7969=>557,7970=>557,7971=>557,7972=>557,7973=>557,7974=>557, +7975=>557,7976=>807,7977=>796,7978=>1013,7979=>1002,7980=>1009,7981=>1000,7982=>882,7983=>919,7984=>293, +7985=>293,7986=>361,7987=>382,7988=>347,7989=>329,7990=>352,7991=>347,7992=>353,7993=>348,7994=>555, +7995=>557,7996=>557,7997=>545,7998=>435,7999=>448,8000=>561,8001=>561,8002=>561,8003=>561,8004=>561, +8005=>561,8008=>792,8009=>801,8010=>1031,8011=>1029,8012=>931,8013=>931,8016=>549,8017=>549,8018=>549, +8019=>549,8020=>549,8021=>549,8022=>549,8023=>549,8025=>838,8027=>1004,8029=>1036,8031=>936,8032=>746, +8033=>746,8034=>746,8035=>746,8036=>746,8037=>746,8038=>746,8039=>746,8040=>768,8041=>794,8042=>1003, +8043=>1002,8044=>922,8045=>918,8046=>871,8047=>893,8048=>596,8049=>596,8050=>523,8051=>523,8052=>557, +8053=>557,8054=>293,8055=>293,8056=>561,8057=>561,8058=>549,8059=>549,8060=>746,8061=>746,8064=>596, +8065=>596,8066=>596,8067=>596,8068=>596,8069=>596,8070=>596,8071=>596,8072=>859,8073=>861,8074=>948, +8075=>928,8076=>886,8077=>895,8078=>865,8079=>864,8080=>557,8081=>557,8082=>557,8083=>557,8084=>557, +8085=>557,8086=>557,8087=>557,8088=>890,8089=>894,8090=>1092,8091=>1084,8092=>1095,8093=>1080,8094=>953, +8095=>986,8096=>746,8097=>746,8098=>746,8099=>746,8100=>746,8101=>746,8102=>746,8103=>746,8104=>892, +8105=>907,8106=>1113,8107=>1095,8108=>1034,8109=>1030,8110=>983,8111=>1002,8112=>596,8113=>596,8114=>596, +8115=>596,8116=>593,8118=>596,8119=>596,8120=>765,8121=>765,8122=>765,8123=>765,8124=>861,8125=>147, +8126=>201,8127=>147,8128=>278,8129=>333,8130=>557,8131=>557,8132=>595,8134=>557,8135=>557,8136=>835, +8137=>849,8138=>895,8139=>861,8140=>786,8141=>602,8142=>601,8143=>333,8144=>335,8145=>322,8146=>357, +8147=>336,8150=>340,8151=>320,8152=>300,8153=>298,8154=>439,8155=>408,8157=>434,8158=>433,8159=>333, +8160=>549,8161=>549,8162=>549,8163=>549,8164=>551,8165=>551,8166=>549,8167=>549,8168=>733,8169=>733, +8170=>794,8171=>832,8172=>739,8173=>333,8174=>624,8175=>303,8178=>746,8179=>746,8180=>725,8182=>746, +8183=>746,8184=>889,8185=>828,8186=>836,8187=>811,8188=>867,8189=>333,8190=>159,8192=>500,8193=>1000, +8194=>500,8195=>1000,8196=>333,8197=>250,8198=>167,8199=>556,8200=>278,8201=>200,8202=>100,8203=>0, +8204=>0,8205=>0,8206=>0,8207=>0,8208=>333,8209=>333,8210=>556,8213=>1000,8214=>312,8215=>567, +8219=>221,8223=>333,8227=>350,8228=>278,8229=>666,8231=>278,8232=>0,8233=>0,8234=>0,8235=>0, +8236=>0,8237=>0,8238=>0,8239=>500,8241=>1360,8242=>278,8243=>469,8244=>680,8245=>278,8246=>469, +8247=>680,8248=>376,8251=>622,8252=>556,8253=>556,8254=>556,8255=>658,8256=>658,8257=>438,8258=>840, +8259=>400,8260=>167,8261=>334,8262=>334,8263=>1112,8264=>834,8265=>834,8266=>556,8267=>537,8268=>537, +8269=>537,8270=>389,8271=>278,8272=>658,8273=>389,8274=>634,8275=>500,8276=>658,8277=>1000,8278=>515, +8279=>855,8280=>722,8281=>725,8282=>224,8283=>722,8284=>604,8285=>224,8286=>224,8287=>0,8288=>0, +8289=>0,8290=>0,8291=>0,8292=>0,8304=>351,8305=>140,8308=>351,8309=>351,8310=>351,8311=>351, +8312=>351,8313=>351,8314=>350,8315=>350,8316=>350,8317=>350,8318=>350,8319=>360,8320=>351,8321=>251, +8322=>351,8323=>351,8324=>351,8325=>353,8326=>351,8327=>351,8328=>351,8329=>351,8330=>350,8331=>350, +8332=>350,8333=>350,8334=>350,8336=>363,8337=>366,8338=>360,8339=>325,8340=>350,8353=>615,8354=>601, +8355=>611,8356=>556,8357=>833,8358=>682,8359=>1205,8360=>1222,8361=>879,8362=>869,8363=>538,8365=>667, +8366=>611,8368=>570,8369=>684,8370=>717,8371=>667,8372=>667,8373=>640,8376=>516,8400=>0,8401=>0, +8402=>0,8403=>0,8404=>0,8405=>0,8406=>0,8407=>0,8408=>0,8409=>0,8410=>0,8411=>0, +8412=>0,8413=>0,8414=>0,8415=>0,8416=>0,8417=>0,8420=>0,8421=>0,8422=>0,8423=>0, +8424=>0,8425=>0,8426=>0,8427=>0,8428=>0,8429=>0,8430=>0,8431=>0,8432=>0,8448=>900, +8449=>889,8450=>722,8451=>1019,8452=>556,8453=>836,8454=>862,8455=>667,8456=>722,8457=>867,8459=>969, +8460=>615,8461=>647,8462=>556,8463=>572,8464=>809,8465=>606,8466=>900,8467=>481,8468=>747,8469=>722, +8470=>934,8471=>882,8472=>600,8473=>667,8474=>778,8475=>850,8476=>699,8477=>722,8478=>834,8479=>722, +8480=>1043,8481=>1261,8483=>667,8484=>611,8486=>768,8487=>744,8488=>512,8489=>286,8490=>722,8491=>722, +8492=>908,8493=>623,8494=>556,8495=>469,8496=>562,8497=>895,8498=>556,8499=>1080,8501=>520,8502=>591, +8503=>456,8504=>598,8505=>278,8506=>848,8507=>1338,8508=>619,8510=>582,8511=>722,8513=>778,8514=>556, +8515=>556,8516=>667,8522=>516,8523=>640,8525=>1160,8526=>435,8531=>869,8532=>869,8533=>869,8534=>869, +8535=>869,8536=>869,8537=>869,8538=>869,8539=>869,8540=>869,8541=>869,8542=>869,8543=>869,8544=>278, +8545=>556,8546=>834,8547=>945,8548=>667,8549=>945,8550=>1223,8551=>1501,8552=>945,8553=>667,8554=>945, +8555=>1223,8556=>556,8557=>722,8558=>722,8559=>833,8560=>222,8561=>444,8562=>666,8563=>722,8564=>500, +8565=>722,8566=>944,8567=>1166,8568=>722,8569=>500,8570=>722,8571=>944,8572=>222,8573=>500,8574=>556, +8575=>833,8592=>987,8593=>603,8594=>987,8595=>603,8596=>1042,8597=>1042,8706=>556,8710=>712,8721=>804, +8722=>584,8725=>947,8730=>542,8739=>200,8741=>312,8800=>584,8804=>584,8805=>584,9251=>500,9674=>489, +9675=>800,9711=>882,9824=>626,9825=>694,9826=>595,9827=>776,9828=>626,9829=>694,9830=>595,9831=>776, +9833=>333,9834=>556,9835=>722,9836=>722,9837=>415,9838=>377,9839=>402,11568=>352,11569=>872,11570=>872, +11571=>720,11572=>720,11573=>720,11574=>544,11575=>709,11576=>709,11577=>720,11578=>720,11579=>596,11580=>698, +11581=>742,11582=>574,11583=>742,11584=>872,11585=>872,11586=>292,11587=>696,11588=>696,11589=>720,11590=>544, +11591=>724,11592=>756,11593=>600,11594=>672,11595=>888,11596=>836,11597=>524,11598=>720,11599=>260,11600=>836, +11601=>224,11602=>678,11603=>380,11604=>872,11605=>872,11606=>720,11607=>268,11608=>640,11609=>872,11610=>872, +11611=>770,11612=>424,11613=>720,11614=>770,11615=>720,11616=>709,11617=>720,11618=>541,11619=>828,11620=>454, +11621=>828,11631=>442,11799=>333,42888=>333,42889=>276,42890=>342,42891=>194,42892=>194,64256=>494,64257=>471, +64258=>474,64259=>659,64260=>654,64261=>530,64275=>1027,64276=>1056,64277=>1058,64278=>1073,64279=>1301,64285=>200, +64286=>305,64287=>400,64288=>587,64289=>890,64290=>848,64291=>872,64292=>800,64293=>850,64294=>873,64295=>797, +64296=>937,64297=>584,64298=>776,64299=>776,64300=>776,64301=>776,64302=>640,64303=>640,64304=>640,64305=>591, +64306=>466,64307=>598,64308=>622,64309=>262,64310=>351,64312=>608,64313=>270,64314=>526,64315=>550,64316=>600, +64318=>621,64320=>378,64321=>607,64323=>575,64324=>568,64326=>590,64327=>606,64328=>547,64329=>776,64330=>687, +64331=>212,64332=>591,64333=>550,64334=>568,64335=>640,65533=>788); +$enc=''; +$diff=''; +$file='freesansi.z'; +$ctg='freesansi.ctg.z'; +$originalsize=441432; +// --- EOF --- --- /dev/null +++ b/tcpdf/fonts/freeserif.php @@ -1,1 +1,571 @@ - +900,'Descent'=>-300,'CapHeight'=>10,'Flags'=>96,'FontBBox'=>'[-879 -2090 1824 2606]','ItalicAngle'=>-33.2,'StemV'=>70,'MissingWidth'=>600); +$up=-125; +$ut=50; +$dw=600; +$cw=array( +32=>250,33=>333,34=>408,35=>500,36=>500,37=>833,38=>778,39=>180,40=>333,41=>333, +42=>500,43=>564,44=>250,45=>333,46=>250,47=>278,48=>500,49=>500,50=>500,51=>500, +52=>500,53=>500,54=>500,55=>500,56=>500,57=>500,58=>278,59=>278,60=>564,61=>564, +62=>564,63=>444,64=>921,65=>722,66=>667,67=>667,68=>722,69=>611,70=>556,71=>722, +72=>722,73=>333,74=>389,75=>722,76=>611,77=>889,78=>722,79=>722,80=>556,81=>722, +82=>667,83=>556,84=>611,85=>722,86=>722,87=>944,88=>722,89=>722,90=>611,91=>333, +92=>296,93=>333,94=>469,95=>500,96=>333,97=>444,98=>500,99=>444,100=>500,101=>444, +102=>333,103=>500,104=>500,105=>278,106=>278,107=>500,108=>278,109=>778,110=>500,111=>500, +112=>500,113=>500,114=>333,115=>389,116=>278,117=>500,118=>500,119=>722,120=>500,121=>500, +122=>444,123=>480,124=>200,125=>480,126=>541,8364=>741,8218=>250,402=>358,8222=>444,8230=>1000, +8224=>500,8225=>500,710=>333,8240=>1000,352=>556,8249=>250,338=>889,381=>611,8216=>250,8217=>250, +8220=>444,8221=>444,8226=>350,8211=>500,8212=>1000,732=>333,8482=>1008,353=>389,8250=>250,339=>709, +382=>444,376=>722,160=>250,161=>333,162=>500,163=>500,164=>500,165=>500,166=>200,167=>500, +168=>333,169=>793,170=>276,171=>444,172=>564,173=>333,174=>792,175=>333,176=>400,177=>564, +178=>320,179=>320,180=>333,181=>500,182=>483,183=>250,184=>333,185=>320,186=>310,187=>441, +188=>750,189=>750,190=>750,191=>444,192=>722,193=>722,194=>722,195=>722,196=>722,197=>722, +198=>889,199=>667,200=>611,201=>611,202=>611,203=>611,204=>333,205=>333,206=>333,207=>333, +208=>722,209=>722,210=>722,211=>722,212=>722,213=>722,214=>722,215=>564,216=>722,217=>722, +218=>722,219=>722,220=>722,221=>722,222=>576,223=>500,224=>444,225=>444,226=>444,227=>444, +228=>444,229=>444,230=>651,231=>444,232=>444,233=>444,234=>444,235=>444,236=>278,237=>278, +238=>278,239=>278,240=>501,241=>500,242=>500,243=>500,244=>500,245=>500,246=>500,247=>564, +248=>500,249=>500,250=>500,251=>500,252=>500,253=>500,254=>496,255=>500,256=>722,257=>444, +258=>722,259=>444,260=>722,261=>444,262=>667,263=>444,264=>667,265=>444,266=>667,267=>444, +268=>667,269=>444,270=>722,271=>630,272=>722,273=>500,274=>611,275=>444,276=>611,277=>444, +278=>611,279=>444,280=>611,281=>444,282=>611,283=>444,284=>722,285=>500,286=>722,287=>500, +288=>722,289=>500,290=>722,291=>500,292=>722,293=>500,294=>722,295=>500,296=>333,297=>278, +298=>333,299=>278,300=>333,301=>278,302=>333,303=>278,304=>333,305=>278,306=>703,307=>529, +308=>389,309=>278,310=>722,311=>500,312=>500,313=>611,314=>278,315=>611,316=>278,317=>611, +318=>396,319=>611,320=>444,321=>611,322=>278,323=>722,324=>500,325=>722,326=>500,327=>722, +328=>500,329=>556,330=>721,331=>500,332=>722,333=>500,334=>722,335=>500,336=>722,337=>500, +340=>667,341=>333,342=>667,343=>333,344=>667,345=>333,346=>556,347=>389,348=>556,349=>389, +350=>556,351=>389,354=>611,355=>278,356=>611,357=>415,358=>611,359=>278,360=>722,361=>500, +362=>722,363=>500,364=>722,365=>500,366=>722,367=>500,368=>722,369=>500,370=>722,371=>500, +372=>944,373=>722,374=>722,375=>500,377=>611,378=>444,379=>611,380=>444,383=>333,384=>500, +385=>777,386=>576,387=>520,388=>646,389=>520,390=>667,391=>811,392=>558,393=>722,394=>830, +395=>646,396=>500,397=>534,398=>611,399=>710,400=>518,401=>629,403=>824,404=>665,405=>729, +406=>333,407=>336,408=>810,409=>500,410=>286,411=>480,412=>944,413=>798,414=>500,415=>726, +416=>722,417=>540,418=>1043,419=>778,420=>667,421=>500,422=>667,423=>556,424=>389,425=>627, +426=>592,427=>285,428=>626,429=>376,430=>611,431=>782,432=>544,433=>743,434=>722,435=>813, +436=>657,437=>611,438=>444,439=>530,440=>556,441=>389,442=>394,443=>500,444=>615,445=>439, +446=>421,447=>500,448=>190,449=>350,450=>600,451=>333,452=>1333,453=>1166,454=>944,455=>1000, +456=>889,457=>556,458=>1111,459=>1000,460=>778,461=>722,462=>444,463=>333,464=>278,465=>722, +466=>500,467=>722,468=>500,469=>722,470=>500,471=>722,472=>500,473=>722,474=>500,475=>722, +476=>500,477=>444,478=>722,479=>444,480=>722,481=>444,482=>889,483=>651,484=>722,485=>500, +486=>722,487=>500,488=>722,489=>500,490=>722,491=>500,492=>722,493=>500,494=>530,495=>389, +496=>278,497=>1333,498=>1166,499=>944,500=>722,501=>500,502=>944,503=>522,504=>722,505=>500, +506=>722,507=>444,508=>889,509=>651,510=>722,511=>500,512=>722,513=>444,514=>722,515=>444, +516=>611,517=>444,518=>611,519=>444,520=>333,521=>278,522=>333,523=>278,524=>722,525=>500, +526=>722,527=>500,528=>667,529=>333,530=>667,531=>333,532=>722,533=>500,534=>722,535=>500, +536=>556,537=>389,538=>611,539=>279,540=>424,541=>455,542=>722,543=>500,544=>715,545=>588, +546=>565,547=>468,548=>611,549=>444,550=>722,551=>444,552=>611,553=>444,554=>722,555=>500, +556=>722,557=>500,558=>722,559=>500,560=>722,561=>500,562=>722,563=>500,564=>407,565=>597, +566=>379,567=>278,568=>771,569=>760,570=>722,571=>667,572=>444,573=>611,574=>611,575=>389, +576=>444,577=>444,578=>444,579=>667,580=>722,581=>722,582=>611,583=>444,584=>389,585=>278, +586=>810,587=>601,588=>667,589=>333,590=>722,591=>500,592=>444,593=>500,594=>507,595=>500, +596=>444,597=>444,598=>606,599=>624,600=>444,601=>444,602=>703,603=>426,604=>426,605=>662, +606=>454,607=>353,608=>624,609=>500,610=>484,611=>500,612=>582,613=>500,614=>500,615=>500, +616=>278,617=>306,618=>278,619=>340,620=>294,621=>364,622=>556,623=>778,624=>778,625=>778, +626=>596,627=>599,628=>500,629=>491,630=>668,631=>693,632=>640,633=>336,634=>339,635=>444, +636=>338,637=>339,638=>372,639=>372,640=>457,641=>456,642=>389,643=>466,644=>483,645=>466, +646=>506,647=>278,648=>336,649=>512,650=>517,651=>514,652=>500,653=>722,654=>500,655=>510, +656=>600,657=>444,658=>389,659=>456,660=>444,661=>444,662=>444,663=>444,664=>722,665=>468, +666=>454,667=>623,668=>524,669=>354,670=>505,671=>443,672=>625,673=>444,674=>444,675=>798, +676=>795,677=>805,678=>539,679=>549,680=>678,681=>722,682=>533,683=>554,684=>500,685=>500, +686=>611,687=>716,688=>332,689=>333,690=>240,691=>228,692=>228,693=>299,694=>300,695=>477, +696=>328,697=>250,698=>408,699=>333,700=>333,701=>333,702=>333,703=>333,704=>258,705=>258, +706=>374,707=>374,708=>383,709=>383,711=>333,712=>250,713=>333,714=>333,715=>333,716=>250, +717=>333,718=>333,719=>333,720=>278,721=>278,722=>333,723=>333,724=>333,725=>333,726=>333, +727=>333,728=>333,729=>333,730=>333,731=>333,733=>382,734=>336,735=>352,736=>331,737=>187, +738=>263,739=>332,740=>300,741=>460,742=>460,743=>460,744=>460,745=>460,746=>477,747=>475, +748=>339,749=>333,750=>444,751=>383,752=>383,753=>294,754=>294,755=>327,756=>261,757=>437, +758=>437,759=>333,760=>278,761=>175,762=>175,763=>175,764=>175,765=>337,766=>337,767=>326, +768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0, +778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0, +788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0,797=>0, +798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,807=>0, +808=>0,809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0, +818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0,827=>0, +828=>0,829=>0,830=>0,831=>0,832=>0,833=>0,834=>0,835=>0,836=>0,837=>0, +838=>0,839=>0,840=>0,841=>0,842=>0,843=>0,844=>0,845=>0,846=>0,847=>0, +848=>0,849=>0,850=>0,851=>0,852=>0,853=>0,854=>0,855=>0,856=>0,857=>0, +858=>0,859=>0,860=>0,861=>0,862=>0,863=>0,864=>0,865=>0,866=>0,867=>0, +868=>0,869=>0,870=>0,871=>0,872=>0,873=>0,874=>0,875=>0,876=>0,877=>0, +878=>0,879=>0,880=>535,881=>433,882=>537,883=>497,884=>199,885=>199,890=>332,894=>278, +900=>267,901=>333,902=>722,903=>250,904=>800,905=>902,906=>507,908=>818,910=>861,911=>871, +912=>286,913=>722,914=>667,915=>586,916=>660,917=>611,918=>611,919=>722,920=>726,921=>333, +922=>722,923=>722,924=>889,925=>722,926=>628,927=>722,928=>722,929=>556,931=>627,932=>611, +933=>696,934=>742,935=>722,936=>808,937=>743,938=>333,939=>718,940=>583,941=>426,942=>536, +943=>286,944=>514,945=>583,946=>527,947=>480,948=>534,949=>426,950=>466,951=>536,952=>534, +953=>286,954=>544,955=>476,956=>536,957=>480,958=>514,959=>500,960=>587,961=>528,962=>452, +963=>537,964=>420,965=>514,966=>643,967=>480,968=>693,969=>693,970=>286,971=>514,972=>500, +973=>514,974=>693,976=>534,977=>587,978=>620,979=>809,980=>620,981=>640,982=>684,983=>534, +984=>556,985=>500,986=>594,987=>426,988=>556,989=>445,990=>656,991=>400,992=>722,993=>570, +994=>960,995=>673,996=>592,997=>522,998=>580,999=>460,1000=>500,1001=>338,1002=>842,1003=>593, +1004=>564,1005=>412,1006=>634,1007=>447,1008=>534,1009=>534,1010=>485,1011=>278,1012=>726,1013=>361, +1014=>361,1015=>576,1016=>542,1017=>667,1018=>889,1019=>709,1020=>534,1021=>667,1022=>1000,1023=>1000, +1024=>613,1025=>613,1026=>748,1027=>570,1028=>659,1029=>487,1030=>337,1031=>337,1032=>385,1033=>943, +1034=>985,1035=>827,1036=>669,1037=>723,1038=>709,1039=>723,1040=>711,1041=>576,1042=>626,1043=>570, +1044=>639,1045=>613,1046=>937,1047=>580,1048=>723,1049=>723,1050=>669,1051=>684,1052=>891,1053=>723, +1054=>722,1055=>723,1056=>576,1057=>659,1058=>608,1059=>709,1060=>750,1061=>714,1062=>728,1063=>682, +1064=>984,1065=>988,1066=>725,1067=>863,1068=>576,1069=>659,1070=>966,1071=>648,1072=>434,1073=>495, +1074=>468,1075=>388,1076=>490,1077=>436,1078=>662,1079=>406,1080=>524,1081=>524,1082=>498,1083=>490, +1084=>632,1085=>524,1086=>491,1087=>524,1088=>500,1089=>424,1090=>422,1091=>471,1092=>694,1093=>482, +1094=>524,1095=>506,1096=>756,1097=>756,1098=>505,1099=>626,1100=>431,1101=>432,1102=>664,1103=>492, +1104=>434,1105=>434,1106=>479,1107=>388,1108=>432,1109=>347,1110=>269,1111=>278,1112=>278,1113=>677, +1114=>711,1115=>514,1116=>498,1117=>524,1118=>471,1119=>524,1120=>978,1121=>664,1122=>718,1123=>506, +1124=>947,1125=>647,1126=>901,1127=>635,1128=>1248,1129=>894,1130=>937,1131=>654,1132=>1278,1133=>907, +1134=>516,1135=>391,1136=>870,1137=>694,1138=>726,1139=>491,1140=>780,1141=>550,1142=>780,1143=>550, +1144=>1207,1145=>946,1146=>877,1147=>611,1148=>978,1149=>664,1150=>978,1151=>664,1152=>594,1153=>428, +1154=>232,1155=>0,1156=>0,1157=>0,1158=>0,1159=>0,1160=>0,1161=>0,1162=>715,1163=>522, +1164=>562,1165=>430,1166=>556,1167=>511,1168=>564,1169=>398,1170=>586,1171=>392,1172=>623,1173=>463, +1174=>1001,1175=>688,1176=>580,1177=>401,1178=>696,1179=>517,1180=>713,1181=>532,1182=>669,1183=>498, +1184=>813,1185=>572,1186=>730,1187=>524,1188=>934,1189=>652,1190=>1030,1191=>722,1192=>750,1193=>516, +1194=>659,1195=>424,1196=>608,1197=>452,1198=>722,1199=>563,1200=>722,1201=>562,1202=>773,1203=>518, +1204=>972,1205=>693,1206=>681,1207=>506,1208=>726,1209=>540,1210=>682,1211=>510,1212=>866,1213=>553, +1214=>866,1215=>553,1216=>333,1217=>937,1218=>662,1219=>618,1220=>448,1221=>702,1222=>490,1223=>723, +1224=>499,1225=>723,1226=>547,1227=>682,1228=>506,1229=>891,1230=>632,1231=>337,1232=>711,1233=>434, +1234=>711,1235=>434,1236=>891,1237=>630,1238=>623,1239=>436,1240=>710,1241=>436,1242=>710,1243=>436, +1244=>937,1245=>662,1246=>580,1247=>406,1248=>530,1249=>366,1250=>723,1251=>524,1252=>723,1253=>524, +1254=>722,1255=>491,1256=>722,1257=>491,1258=>722,1259=>491,1260=>659,1261=>432,1262=>709,1263=>471, +1264=>709,1265=>471,1266=>709,1267=>471,1268=>682,1269=>506,1270=>572,1271=>388,1272=>863,1273=>626, +1274=>572,1275=>388,1276=>720,1277=>445,1278=>722,1279=>495,1280=>556,1281=>504,1282=>900,1283=>634, +1284=>803,1285=>518,1286=>553,1287=>471,1288=>964,1289=>637,1290=>968,1291=>682,1292=>722,1293=>433, +1294=>714,1295=>504,1296=>532,1297=>407,1298=>702,1299=>489,1300=>960,1301=>644,1302=>823,1303=>698, +1304=>961,1305=>748,1306=>722,1307=>505,1308=>947,1309=>693,1310=>669,1311=>498,1312=>992,1313=>710, +1314=>1029,1315=>742,1329=>794,1330=>712,1331=>782,1332=>854,1333=>711,1334=>702,1335=>707,1336=>655, +1337=>777,1338=>782,1339=>710,1340=>663,1341=>830,1342=>917,1343=>672,1344=>469,1345=>666,1346=>858, +1347=>685,1348=>856,1349=>618,1350=>858,1351=>709,1352=>719,1353=>714,1354=>731,1355=>702,1356=>874, +1357=>719,1358=>844,1359=>519,1360=>703,1361=>608,1362=>586,1363=>750,1364=>780,1365=>714,1366=>684, +1369=>120,1370=>120,1371=>269,1372=>307,1373=>241,1374=>312,1375=>300,1377=>786,1378=>506,1379=>542, +1380=>541,1381=>506,1382=>503,1383=>478,1384=>499,1385=>541,1386=>539,1387=>508,1388=>289,1389=>750, +1390=>540,1391=>513,1392=>508,1393=>503,1394=>531,1395=>518,1396=>500,1397=>243,1398=>473,1399=>406, +1400=>499,1401=>407,1402=>793,1403=>414,1404=>463,1405=>500,1406=>516,1407=>758,1408=>504,1409=>466, +1410=>288,1411=>758,1412=>510,1413=>501,1414=>562,1415=>543,1417=>278,1418=>280,1425=>0,1426=>0, +1427=>0,1428=>0,1429=>0,1430=>0,1431=>418,1432=>0,1433=>0,1434=>0,1435=>0,1436=>0, +1437=>0,1438=>0,1439=>0,1440=>0,1441=>0,1442=>0,1443=>0,1444=>0,1445=>0,1446=>0, +1447=>0,1448=>0,1449=>0,1450=>0,1451=>0,1452=>0,1453=>0,1454=>0,1455=>0,1456=>0, +1457=>0,1458=>0,1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1466=>0, +1467=>0,1468=>0,1469=>0,1470=>440,1471=>0,1472=>126,1473=>0,1474=>0,1475=>418,1476=>0, +1477=>0,1478=>350,1479=>0,1488=>537,1489=>537,1490=>350,1491=>537,1492=>537,1493=>350,1494=>350, +1495=>537,1496=>537,1497=>350,1498=>537,1499=>537,1500=>537,1501=>537,1502=>537,1503=>350,1504=>350, +1505=>537,1506=>537,1507=>537,1508=>537,1509=>537,1510=>537,1511=>537,1512=>537,1513=>537,1514=>537, +1520=>537,1521=>537,1522=>537,1523=>396,1524=>396,1548=>226,1563=>250,1567=>473,1569=>350,1570=>321, +1571=>249,1572=>399,1573=>249,1574=>776,1575=>249,1576=>950,1577=>424,1578=>925,1579=>924,1580=>738, +1581=>748,1582=>701,1583=>397,1584=>399,1585=>328,1586=>331,1587=>951,1588=>949,1589=>949,1590=>949, +1591=>557,1592=>550,1593=>625,1594=>602,1601=>801,1602=>696,1603=>757,1604=>655,1605=>549,1606=>651, +1607=>424,1608=>399,1609=>776,1610=>776,1611=>0,1613=>0,1614=>0,1615=>0,1616=>0,1617=>0, +1618=>0,1619=>0,1620=>0,1621=>0,1632=>297,1633=>254,1634=>427,1635=>497,1636=>440,1637=>465, +1638=>466,1639=>421,1640=>459,1641=>424,1643=>212,1652=>300,1662=>926,1670=>750,1688=>338,1711=>874, +1740=>776,1748=>176,1920=>450,1921=>501,1922=>582,1923=>544,1924=>482,1925=>433,1926=>448,1927=>462, +1928=>474,1929=>471,1930=>469,1931=>537,1932=>499,1933=>514,1934=>471,1935=>572,1936=>880,1937=>440, +1938=>476,1939=>594,1940=>469,1941=>448,1942=>441,1943=>519,1944=>573,1945=>459,1946=>447,1947=>496, +1948=>541,1949=>887,1950=>883,1951=>964,1952=>558,1953=>505,1954=>471,1955=>554,1956=>459,1957=>486, +1958=>36,1959=>36,1960=>43,1961=>45,1962=>43,1963=>45,1964=>45,1965=>45,1966=>45,1967=>45, +1968=>0,2304=>0,2305=>0,2306=>398,2307=>398,2308=>862,2309=>862,2310=>1042,2311=>553,2312=>553, +2313=>597,2314=>848,2315=>967,2316=>828,2317=>654,2318=>654,2319=>654,2320=>654,2321=>1042,2322=>1042, +2323=>1042,2324=>1042,2325=>743,2326=>798,2327=>694,2328=>694,2329=>730,2330=>734,2331=>888,2332=>814, +2333=>834,2334=>734,2335=>629,2336=>629,2337=>653,2338=>609,2339=>694,2340=>654,2341=>694,2342=>588, +2343=>694,2344=>654,2345=>654,2346=>615,2347=>788,2348=>621,2349=>694,2350=>694,2351=>694,2352=>575, +2353=>575,2354=>787,2355=>848,2356=>848,2357=>621,2358=>654,2359=>615,2360=>734,2361=>609,2364=>398, +2365=>569,2366=>341,2367=>341,2368=>341,2369=>0,2370=>0,2371=>0,2372=>0,2373=>0,2374=>0, +2375=>615,2376=>615,2377=>341,2378=>341,2379=>341,2380=>341,2381=>0,2382=>0,2384=>1047,2385=>0, +2386=>0,2387=>0,2388=>0,2389=>0,2392=>743,2393=>798,2394=>694,2395=>814,2396=>653,2397=>609, +2398=>788,2399=>694,2400=>967,2401=>828,2402=>0,2403=>0,2404=>398,2405=>478,2406=>455,2407=>420, +2408=>569,2409=>509,2410=>702,2411=>629,2412=>569,2413=>702,2414=>609,2415=>609,2416=>626,2417=>398, +2418=>862,2425=>814,2426=>694,2427=>654,2428=>814,2429=>569,2430=>730,2431=>621,2433=>0,2434=>300, +2435=>312,2437=>594,2438=>776,2439=>469,2440=>513,2441=>535,2442=>561,2443=>604,2444=>481,2447=>580, +2448=>604,2451=>540,2452=>620,2453=>570,2454=>485,2455=>484,2456=>471,2457=>457,2458=>408,2459=>452, +2460=>591,2461=>551,2462=>771,2463=>414,2464=>404,2465=>522,2466=>415,2467=>450,2468=>551,2469=>477, +2470=>478,2471=>449,2472=>448,2474=>535,2475=>611,2476=>443,2477=>534,2478=>492,2479=>474,2480=>442, +2482=>542,2486=>507,2487=>467,2488=>523,2489=>419,2492=>0,2493=>419,2494=>202,2495=>189,2496=>202, +2497=>0,2498=>0,2499=>0,2500=>0,2503=>294,2504=>289,2507=>774,2508=>825,2509=>0,2510=>356, +2519=>219,2524=>523,2525=>420,2527=>469,2528=>604,2529=>481,2530=>0,2531=>0,2534=>500,2535=>437, +2536=>479,2537=>507,2538=>497,2539=>500,2540=>482,2541=>503,2542=>517,2543=>481,2544=>443,2545=>443, +2546=>429,2547=>383,2548=>432,2549=>478,2550=>539,2551=>158,2552=>365,2553=>280,2554=>357,2561=>0, +2562=>0,2563=>385,2565=>728,2566=>884,2567=>656,2568=>656,2569=>580,2570=>580,2575=>482,2576=>728, +2579=>580,2580=>728,2581=>534,2582=>518,2583=>602,2584=>674,2585=>530,2586=>502,2587=>576,2588=>476, +2589=>558,2590=>501,2591=>510,2592=>540,2593=>508,2594=>512,2595=>558,2596=>468,2597=>518,2598=>488, +2599=>518,2600=>522,2602=>518,2603=>490,2604=>546,2605=>500,2606=>530,2607=>654,2608=>522,2610=>710, +2611=>710,2613=>498,2614=>530,2616=>530,2617=>501,2620=>286,2622=>156,2623=>174,2624=>174,2625=>0, +2626=>0,2631=>0,2632=>0,2635=>0,2636=>0,2637=>0,2641=>0,2649=>534,2650=>618,2651=>492, +2652=>484,2654=>506,2662=>616,2663=>480,2664=>560,2665=>480,2666=>468,2667=>492,2668=>514,2669=>538, +2670=>572,2671=>560,2672=>0,2673=>0,2674=>498,2675=>596,2676=>900,2677=>0,2946=>0,2947=>616, +2949=>910,2950=>1072,2951=>848,2952=>591,2953=>492,2954=>1123,2958=>602,2959=>602,2960=>691,2962=>753, +2963=>753,2964=>1597,2965=>677,2969=>697,2970=>607,2972=>691,2974=>871,2975=>589,2979=>1230,2980=>688, +2984=>560,2985=>911,2986=>477,2990=>625,2991=>672,2992=>452,2993=>553,2994=>651,2995=>804,2996=>645, +2997=>740,2998=>767,2999=>865,3000=>870,3001=>1067,3006=>452,3007=>176,3008=>0,3009=>404,3010=>601, +3014=>690,3015=>500,3016=>840,3018=>1150,3019=>1000,3020=>1488,3021=>0,3024=>753,3031=>844,3046=>500, +3047=>677,3048=>829,3049=>673,3050=>793,3051=>845,3052=>861,3053=>602,3054=>910,3055=>807,3056=>553, +3057=>697,3058=>906,3059=>609,3060=>853,3061=>1585,3062=>664,3063=>978,3064=>1325,3065=>845,3066=>731, +3330=>417,3331=>221,3333=>1055,3334=>1195,3335=>792,3336=>1469,3337=>570,3338=>1244,3339=>676,3340=>897, +3342=>1008,3343=>1008,3344=>1538,3346=>586,3347=>981,3348=>1254,3349=>776,3350=>798,3351=>691,3352=>1095, +3353=>811,3354=>728,3355=>963,3356=>704,3357=>1245,3358=>1106,3359=>466,3360=>531,3361=>984,3362=>1028, +3363=>1102,3364=>780,3365=>732,3366=>485,3367=>737,3368=>747,3370=>780,3371=>962,3372=>1023,3373=>500, +3374=>511,3375=>792,3376=>530,3377=>512,3378=>712,3379=>556,3380=>519,3381=>716,3382=>786,3383=>921, +3384=>977,3385=>978,3389=>375,3390=>403,3391=>283,3392=>323,3393=>275,3394=>258,3395=>378,3396=>378, +3398=>542,3399=>478,3400=>1070,3402=>0,3403=>0,3404=>0,3405=>89,3415=>677,3424=>676,3425=>1006, +3426=>0,3427=>0,3430=>559,3431=>660,3432=>674,3433=>933,3434=>671,3435=>699,3436=>704,3437=>694, +3438=>678,3439=>684,3440=>981,3441=>742,3442=>1056,3443=>660,3444=>664,3445=>870,3449=>864,3450=>1137, +3451=>776,3452=>534,3453=>860,3454=>780,3455=>866,3458=>254,3459=>254,3461=>616,3462=>922,3463=>908, +3464=>907,3465=>626,3466=>615,3467=>763,3468=>1109,3469=>1019,3470=>1311,3471=>1050,3472=>1477,3473=>677, +3474=>746,3475=>1314,3476=>741,3477=>741,3478=>1170,3482=>894,3483=>715,3484=>715,3485=>719,3486=>741, +3487=>834,3488=>719,3489=>677,3490=>677,3491=>1302,3492=>1005,3493=>919,3494=>677,3495=>719,3496=>677, +3497=>741,3498=>677,3499=>1123,3500=>743,3501=>779,3502=>677,3503=>444,3504=>741,3505=>921,3507=>444, +3508=>677,3509=>677,3510=>715,3511=>787,3512=>719,3513=>741,3514=>719,3515=>604,3517=>763,3520=>719, +3521=>715,3522=>677,3523=>719,3524=>787,3525=>763,3526=>677,3530=>0,3535=>329,3536=>319,3537=>319, +3538=>0,3539=>0,3540=>0,3542=>0,3544=>329,3545=>691,3546=>1062,3547=>1333,3548=>1278,3549=>1235, +3550=>1292,3551=>461,3570=>680,3571=>481,3572=>948,3585=>532,3586=>472,3587=>534,3588=>532,3589=>544, +3590=>583,3591=>417,3592=>488,3593=>604,3594=>472,3595=>534,3596=>716,3597=>717,3598=>568,3599=>568, +3600=>457,3601=>637,3602=>731,3603=>790,3604=>531,3605=>542,3606=>522,3607=>577,3608=>468,3609=>603, +3610=>554,3611=>554,3612=>556,3613=>556,3614=>604,3615=>604,3616=>568,3617=>542,3618=>496,3619=>442, +3620=>530,3621=>512,3622=>568,3623=>478,3624=>543,3625=>614,3626=>525,3627=>578,3628=>659,3629=>514, +3630=>514,3631=>450,3632=>402,3633=>0,3634=>378,3635=>415,3636=>0,3637=>0,3638=>0,3639=>0, +3640=>0,3641=>0,3642=>0,3647=>620,3648=>286,3649=>521,3650=>447,3651=>426,3652=>424,3653=>333, +3654=>453,3655=>0,3656=>0,3657=>0,3658=>0,3659=>0,3660=>0,3661=>0,3662=>0,3663=>657, +3664=>528,3665=>528,3666=>571,3667=>594,3668=>631,3669=>632,3670=>478,3671=>713,3672=>597,3673=>565, +3674=>615,3675=>1381,4256=>453,4257=>448,4258=>546,4259=>619,4260=>478,4261=>481,4262=>459,4263=>707, +4264=>467,4265=>471,4266=>842,4267=>464,4268=>443,4269=>707,4270=>460,4271=>465,4272=>686,4273=>440, +4274=>550,4275=>561,4276=>580,4277=>467,4278=>630,4279=>466,4280=>517,4281=>456,4282=>502,4283=>464, +4284=>534,4285=>440,4286=>443,4287=>522,4288=>460,4289=>463,4290=>536,4291=>455,4292=>468,4293=>449, +4304=>454,4305=>452,4306=>544,4307=>629,4308=>451,4309=>452,4310=>452,4311=>702,4312=>451,4313=>452, +4314=>820,4315=>451,4316=>453,4317=>695,4318=>449,4319=>448,4320=>694,4321=>501,4322=>544,4323=>518, +4324=>560,4325=>450,4326=>627,4327=>452,4328=>490,4329=>452,4330=>485,4331=>452,4332=>485,4333=>443, +4334=>500,4335=>582,4336=>455,4337=>451,4338=>482,4339=>414,4340=>453,4341=>418,4342=>741,4343=>452, +4344=>452,4345=>544,4346=>454,4347=>410,4348=>339,4608=>583,4609=>770,4610=>560,4611=>525,4612=>525, +4613=>583,4614=>758,4616=>598,4617=>787,4618=>817,4619=>583,4620=>758,4621=>612,4622=>875,4623=>817, +4624=>817,4625=>1050,4626=>1050,4627=>817,4628=>1050,4629=>817,4630=>787,4631=>1021,4632=>933,4633=>1137, +4634=>1067,4635=>980,4636=>1065,4637=>962,4638=>962,4639=>1097,4640=>831,4641=>1021,4642=>851,4643=>735, +4644=>875,4645=>968,4646=>817,4647=>881,4648=>583,4649=>642,4650=>583,4651=>758,4652=>700,4653=>583, +4654=>700,4655=>758,4656=>583,4657=>787,4658=>787,4659=>583,4660=>729,4661=>583,4662=>583,4663=>817, +4664=>642,4665=>817,4666=>846,4667=>642,4668=>758,4669=>744,4670=>642,4671=>817,4672=>700,4673=>700, +4674=>700,4675=>758,4676=>700,4677=>700,4678=>729,4680=>846,4682=>1079,4683=>700,4684=>700,4685=>1021, +4688=>700,4689=>700,4690=>700,4691=>758,4692=>700,4693=>758,4694=>729,4696=>846,4698=>1079,4699=>700, +4700=>700,4701=>1021,4704=>525,4705=>758,4706=>758,4707=>525,4708=>700,4709=>773,4710=>525,4711=>787, +4712=>525,4713=>758,4714=>758,4715=>525,4716=>700,4717=>773,4718=>525,4719=>525,4720=>729,4721=>729, +4722=>729,4723=>802,4724=>729,4725=>729,4726=>758,4727=>729,4728=>758,4729=>758,4730=>758,4731=>817, +4732=>758,4733=>817,4734=>758,4735=>758,4736=>612,4737=>817,4738=>817,4739=>612,4740=>787,4741=>583, +4742=>875,4744=>962,4746=>992,4747=>700,4748=>758,4749=>904,4752=>408,4753=>583,4754=>525,4755=>554, +4756=>481,4757=>554,4758=>642,4759=>671,4760=>700,4761=>758,4762=>729,4763=>700,4764=>671,4765=>700, +4766=>758,4767=>700,4768=>583,4769=>735,4770=>822,4771=>583,4772=>793,4773=>583,4774=>583,4775=>694, +4776=>554,4777=>729,4778=>773,4779=>554,4780=>700,4781=>554,4782=>554,4784=>992,4786=>1021,4787=>671, +4788=>787,4789=>904,4792=>729,4793=>904,4794=>948,4795=>729,4796=>875,4797=>729,4798=>729,4800=>1137, +4802=>1167,4803=>758,4804=>875,4805=>1108,4808=>758,4809=>875,4810=>700,4811=>700,4812=>700,4813=>992, +4814=>758,4816=>554,4817=>787,4818=>758,4819=>583,4820=>758,4821=>496,4822=>612,4824=>525,4825=>700, +4826=>700,4827=>525,4828=>685,4829=>729,4830=>510,4831=>729,4832=>962,4833=>962,4834=>962,4835=>962, +4836=>962,4837=>1021,4838=>962,4839=>962,4840=>467,4841=>525,4842=>671,4843=>612,4844=>612,4845=>671, +4846=>671,4848=>612,4849=>875,4850=>817,4851=>642,4852=>729,4853=>729,4854=>758,4855=>817,4856=>700, +4857=>758,4858=>715,4859=>700,4860=>700,4861=>787,4862=>758,4863=>700,4864=>700,4865=>758,4866=>715, +4867=>700,4868=>700,4869=>787,4870=>758,4871=>700,4872=>467,4873=>671,4874=>671,4875=>612,4876=>612, +4877=>583,4878=>525,4880=>846,4882=>904,4883=>554,4884=>700,4885=>817,4888=>525,4889=>729,4890=>729, +4891=>612,4892=>671,4893=>583,4894=>525,4896=>817,4897=>1021,4898=>1021,4899=>817,4900=>992,4901=>758, +4902=>817,4903=>1021,4904=>1079,4905=>1137,4906=>1137,4907=>1050,4908=>1312,4909=>1050,4910=>1050,4911=>1123, +4912=>647,4913=>793,4914=>822,4915=>647,4916=>793,4917=>764,4918=>583,4919=>647,4920=>583,4921=>793, +4922=>822,4923=>583,4924=>793,4925=>764,4926=>583,4927=>793,4928=>540,4929=>758,4930=>583,4931=>467, +4932=>583,4933=>481,4934=>612,4936=>758,4937=>700,4938=>758,4939=>700,4940=>831,4941=>671,4942=>758, +4943=>700,4944=>758,4945=>758,4946=>758,4947=>817,4948=>758,4949=>758,4950=>817,4951=>758,4952=>642, +4953=>980,4954=>758,4961=>233,4962=>583,4963=>408,4964=>408,4965=>525,4966=>525,4967=>233,4968=>700, +4969=>671,4970=>612,4971=>642,4972=>642,4973=>642,4974=>583,4975=>700,4976=>758,4977=>642,4978=>583, +4979=>700,4980=>729,4981=>720,4982=>583,4983=>758,4984=>700,4985=>904,4986=>612,4987=>583,4988=>875, +5024=>711,5025=>678,5026=>604,5027=>667,5028=>796,5029=>301,5030=>516,5031=>544,5032=>457,5033=>716, +5034=>703,5035=>383,5036=>628,5037=>709,5038=>455,5039=>601,5040=>472,5041=>574,5042=>730,5043=>939, +5044=>498,5045=>528,5046=>667,5047=>891,5048=>505,5049=>792,5050=>957,5051=>725,5052=>595,5053=>733, +5054=>698,5055=>638,5056=>720,5057=>732,5058=>624,5059=>638,5060=>565,5061=>903,5062=>655,5063=>681, +5064=>675,5065=>949,5066=>683,5067=>547,5068=>693,5069=>732,5070=>529,5071=>569,5072=>536,5073=>677, +5074=>631,5075=>542,5076=>973,5077=>543,5078=>607,5079=>652,5080=>652,5081=>693,5082=>514,5083=>803, +5084=>658,5085=>597,5086=>627,5087=>659,5088=>679,5089=>706,5090=>563,5091=>618,5092=>767,5093=>776, +5094=>731,5095=>492,5096=>808,5097=>823,5098=>796,5099=>689,5100=>716,5101=>518,5102=>521,5103=>719, +5104=>563,5105=>776,5106=>634,5107=>822,5108=>621,5920=>502,5921=>502,5922=>500,5923=>498,5924=>500, +5925=>502,5926=>502,5927=>502,5928=>500,5929=>503,5930=>502,5931=>502,5932=>500,5933=>500,5934=>500, +5935=>796,5936=>500,5937=>502,5938=>0,5939=>0,5940=>0,5941=>230,5942=>397,6480=>537,6481=>537, +6482=>531,6483=>678,6484=>682,6485=>628,6486=>732,6487=>721,6488=>598,6489=>583,6490=>702,6491=>554, +6492=>683,6493=>554,6494=>710,6495=>695,6496=>523,6497=>678,6498=>589,6499=>272,6500=>506,6501=>515, +6502=>515,6503=>210,6504=>210,6505=>515,6506=>515,6507=>515,6508=>229,6509=>705,6512=>649,6513=>538, +6514=>568,6515=>520,6516=>544,6656=>820,6657=>958,6658=>758,6659=>859,6660=>958,6661=>727,6662=>904, +6663=>940,6664=>850,6665=>905,6666=>838,6667=>961,6668=>1000,6669=>880,6670=>1189,6671=>1246,6672=>1177, +6673=>757,6674=>1246,6675=>1192,6676=>709,6677=>1192,6678=>1075,6679=>0,6680=>0,6681=>534,6682=>690, +6683=>0,6686=>697,6687=>500,7424=>484,7425=>595,7426=>651,7427=>446,7428=>446,7429=>483,7430=>483, +7431=>409,7432=>426,7433=>278,7434=>260,7435=>483,7436=>409,7437=>595,7438=>483,7439=>483,7440=>435, +7441=>507,7442=>507,7443=>673,7444=>709,7445=>378,7446=>483,7447=>483,7448=>372,7449=>456,7450=>446, +7451=>409,7452=>483,7453=>488,7454=>660,7455=>500,7456=>483,7457=>632,7458=>409,7459=>355,7460=>444, +7461=>681,7462=>392,7463=>483,7464=>483,7465=>372,7466=>541,7467=>470,7468=>484,7469=>595,7470=>446, +7471=>446,7472=>483,7473=>409,7474=>409,7475=>483,7476=>483,7477=>223,7478=>260,7479=>483,7480=>409, +7481=>595,7482=>483,7483=>483,7484=>483,7485=>378,7486=>372,7487=>446,7488=>409,7489=>483,7490=>632, +7491=>297,7492=>297,7493=>335,7494=>440,7495=>335,7496=>335,7497=>297,7498=>297,7499=>285,7500=>285, +7501=>335,7502=>186,7503=>335,7504=>521,7505=>335,7506=>335,7507=>297,7508=>483,7509=>483,7510=>335, +7511=>186,7512=>335,7513=>326,7514=>521,7515=>335,7516=>442,7517=>353,7518=>321,7519=>357,7520=>430, +7521=>321,7522=>186,7523=>223,7524=>335,7525=>335,7526=>353,7527=>321,7528=>353,7529=>430,7530=>321, +7531=>754,7532=>500,7533=>500,7534=>333,7535=>778,7536=>500,7537=>500,7538=>333,7539=>333,7540=>389, +7541=>278,7542=>444,7543=>500,7544=>483,7545=>447,7546=>774,7547=>280,7548=>278,7549=>500,7550=>483, +7551=>514,7552=>500,7553=>500,7554=>333,7555=>676,7556=>525,7557=>278,7558=>802,7559=>507,7560=>500, +7561=>333,7562=>389,7563=>384,7564=>500,7565=>500,7566=>444,7567=>602,7568=>637,7569=>648,7570=>590, +7571=>559,7572=>426,7573=>590,7574=>413,7575=>444,7576=>360,7577=>638,7578=>389,7579=>335,7580=>293, +7581=>283,7582=>337,7583=>299,7584=>229,7585=>251,7586=>335,7587=>322,7588=>188,7589=>212,7590=>278, +7591=>182,7592=>240,7593=>233,7594=>208,7595=>287,7596=>499,7597=>533,7598=>401,7599=>374,7600=>330, +7601=>329,7602=>426,7603=>262,7604=>312,7605=>197,7606=>344,7607=>336,7608=>323,7609=>334,7610=>325, +7611=>293,7612=>403,7613=>288,7614=>257,7615=>354,7680=>722,7681=>444,7682=>667,7683=>500,7684=>667, +7685=>500,7686=>667,7687=>500,7688=>667,7689=>444,7690=>722,7691=>500,7692=>722,7693=>500,7694=>722, +7695=>500,7696=>720,7697=>500,7698=>722,7699=>500,7700=>611,7701=>444,7702=>611,7703=>444,7704=>611, +7705=>444,7706=>611,7707=>444,7708=>611,7709=>444,7710=>556,7711=>333,7712=>722,7713=>500,7714=>722, +7715=>500,7716=>722,7717=>500,7718=>722,7719=>500,7720=>722,7721=>500,7722=>722,7723=>500,7724=>333, +7725=>278,7726=>333,7727=>278,7728=>722,7729=>500,7730=>722,7731=>500,7732=>722,7733=>500,7734=>611, +7735=>278,7736=>611,7737=>278,7738=>611,7739=>278,7740=>611,7741=>278,7742=>889,7743=>778,7744=>889, +7745=>778,7746=>889,7747=>778,7748=>722,7749=>500,7750=>722,7751=>500,7752=>722,7753=>500,7754=>722, +7755=>500,7756=>722,7757=>500,7758=>722,7759=>500,7760=>722,7761=>500,7762=>722,7763=>500,7764=>556, +7765=>500,7766=>556,7767=>500,7768=>667,7769=>333,7770=>667,7771=>333,7772=>667,7773=>333,7774=>667, +7775=>333,7776=>556,7777=>389,7778=>556,7779=>389,7780=>556,7781=>389,7782=>556,7783=>389,7784=>556, +7785=>389,7786=>611,7787=>278,7788=>611,7789=>278,7790=>611,7791=>278,7792=>611,7793=>278,7794=>722, +7795=>500,7796=>722,7797=>500,7798=>722,7799=>500,7800=>722,7801=>500,7802=>722,7803=>500,7804=>722, +7805=>500,7806=>722,7807=>500,7808=>944,7809=>722,7810=>944,7811=>722,7812=>944,7813=>722,7814=>944, +7815=>722,7816=>944,7817=>722,7818=>722,7819=>500,7820=>722,7821=>500,7822=>722,7823=>500,7824=>611, +7825=>444,7826=>611,7827=>444,7828=>611,7829=>444,7830=>500,7831=>278,7832=>722,7833=>500,7834=>444, +7835=>333,7836=>333,7837=>333,7838=>659,7839=>534,7840=>722,7841=>444,7842=>722,7843=>444,7844=>722, +7845=>444,7846=>722,7847=>444,7848=>722,7849=>454,7850=>722,7851=>444,7852=>722,7853=>444,7854=>722, +7855=>444,7856=>722,7857=>444,7858=>722,7859=>454,7860=>722,7861=>444,7862=>722,7863=>444,7864=>611, +7865=>444,7866=>611,7867=>444,7868=>611,7869=>444,7870=>611,7871=>444,7872=>611,7873=>444,7874=>613, +7875=>444,7876=>611,7877=>444,7878=>611,7879=>444,7880=>333,7881=>278,7882=>333,7883=>278,7884=>722, +7885=>500,7886=>722,7887=>500,7888=>722,7889=>500,7890=>722,7891=>500,7892=>722,7893=>500,7894=>722, +7895=>500,7896=>722,7897=>500,7898=>722,7899=>540,7900=>722,7901=>540,7902=>720,7903=>540,7904=>722, +7905=>540,7906=>722,7907=>540,7908=>722,7909=>500,7910=>717,7911=>500,7912=>782,7913=>544,7914=>782, +7915=>544,7916=>782,7917=>544,7918=>782,7919=>544,7920=>782,7921=>544,7922=>722,7923=>500,7924=>722, +7925=>500,7926=>722,7927=>501,7928=>722,7929=>500,7930=>914,7931=>514,7932=>500,7933=>342,7934=>722, +7935=>530,7936=>583,7937=>583,7938=>583,7939=>583,7940=>583,7941=>583,7942=>583,7943=>583,7944=>722, +7945=>722,7946=>813,7947=>817,7948=>763,7949=>765,7950=>720,7951=>722,7952=>426,7953=>426,7954=>426, +7955=>426,7956=>426,7957=>426,7960=>770,7961=>770,7962=>902,7963=>919,7964=>940,7965=>936,7968=>536, +7969=>536,7970=>536,7971=>536,7972=>536,7973=>536,7974=>536,7975=>536,7976=>847,7977=>859,7978=>986, +7979=>1010,7980=>1026,7981=>1029,7982=>918,7983=>921,7984=>286,7985=>286,7986=>302,7987=>320,7988=>300, +7989=>306,7990=>312,7991=>303,7992=>475,7993=>507,7994=>617,7995=>654,7996=>655,7997=>660,7998=>551, +7999=>566,8000=>500,8001=>500,8002=>500,8003=>500,8004=>500,8005=>500,8008=>816,8009=>825,8010=>969, +8011=>995,8012=>938,8013=>955,8016=>514,8017=>514,8018=>514,8019=>514,8020=>514,8021=>514,8022=>514, +8023=>514,8025=>818,8027=>988,8029=>989,8031=>893,8032=>693,8033=>693,8034=>693,8035=>693,8036=>693, +8037=>693,8038=>693,8039=>693,8040=>836,8041=>843,8042=>1006,8043=>1024,8044=>974,8045=>986,8046=>905, +8047=>896,8048=>583,8049=>583,8050=>426,8051=>426,8052=>536,8053=>536,8054=>286,8055=>286,8056=>500, +8057=>500,8058=>514,8059=>514,8060=>693,8061=>693,8064=>583,8065=>583,8066=>583,8067=>583,8068=>583, +8069=>583,8070=>583,8071=>583,8072=>888,8073=>889,8074=>984,8075=>991,8076=>943,8077=>948,8078=>884, +8079=>886,8080=>536,8081=>536,8082=>536,8083=>536,8084=>536,8085=>536,8086=>536,8087=>536,8088=>1017, +8089=>1026,8090=>1153,8091=>1179,8092=>1195,8093=>1199,8094=>1088,8095=>1088,8096=>693,8097=>693,8098=>693, +8099=>693,8100=>693,8101=>693,8102=>693,8103=>693,8104=>1034,8105=>1040,8106=>1210,8107=>1229,8108=>1176, +8109=>1186,8110=>1098,8111=>1090,8112=>583,8113=>583,8114=>583,8115=>583,8116=>583,8118=>583,8119=>583, +8120=>722,8121=>722,8122=>722,8123=>722,8124=>889,8125=>250,8126=>332,8127=>500,8128=>500,8129=>534, +8130=>536,8131=>536,8132=>536,8134=>536,8135=>536,8136=>761,8137=>800,8138=>829,8139=>893,8140=>883, +8141=>500,8142=>500,8143=>500,8144=>286,8145=>286,8146=>286,8147=>286,8150=>286,8151=>286,8152=>333, +8153=>333,8154=>447,8155=>537,8157=>500,8158=>500,8159=>500,8160=>514,8161=>514,8162=>514,8163=>514, +8164=>528,8165=>528,8166=>514,8167=>514,8168=>696,8169=>696,8170=>816,8171=>828,8172=>721,8173=>333, +8174=>333,8175=>500,8178=>693,8179=>693,8180=>693,8182=>693,8183=>693,8184=>832,8185=>899,8186=>847, +8187=>852,8188=>928,8189=>500,8190=>500,8192=>500,8193=>1000,8194=>500,8195=>1000,8196=>333,8197=>250, +8198=>167,8199=>500,8200=>250,8201=>200,8202=>100,8203=>0,8204=>0,8205=>0,8206=>0,8207=>0, +8208=>333,8209=>333,8210=>500,8213=>1000,8214=>293,8215=>478,8219=>250,8223=>444,8227=>350,8228=>620, +8229=>620,8231=>250,8232=>0,8233=>0,8234=>0,8235=>0,8236=>0,8237=>0,8238=>0,8239=>250, +8241=>1363,8242=>247,8243=>411,8244=>611,8245=>247,8246=>411,8247=>611,8248=>469,8251=>629,8252=>666, +8253=>444,8254=>500,8255=>953,8256=>953,8257=>314,8258=>931,8259=>333,8260=>167,8261=>383,8262=>383, +8263=>888,8264=>777,8265=>777,8266=>500,8267=>453,8268=>453,8269=>450,8270=>500,8271=>278,8272=>882, +8273=>500,8274=>497,8275=>500,8276=>953,8277=>512,8278=>410,8279=>855,8280=>620,8281=>620,8282=>179, +8283=>621,8284=>564,8285=>179,8286=>179,8287=>111,8288=>0,8289=>0,8290=>0,8291=>0,8292=>0, +8304=>320,8305=>180,8308=>320,8309=>320,8310=>320,8311=>320,8312=>320,8313=>320,8314=>300,8315=>300, +8316=>300,8317=>216,8318=>216,8319=>335,8320=>320,8321=>320,8322=>320,8323=>320,8324=>320,8325=>320, +8326=>320,8327=>320,8328=>320,8329=>320,8330=>300,8331=>300,8332=>300,8333=>216,8334=>216,8336=>320, +8337=>304,8338=>340,8339=>337,8340=>298,8352=>698,8353=>667,8354=>667,8355=>556,8356=>500,8357=>778, +8358=>722,8359=>940,8360=>1026,8361=>813,8362=>869,8363=>512,8365=>722,8366=>611,8367=>1340,8368=>489, +8369=>601,8370=>619,8371=>722,8372=>556,8373=>611,8374=>498,8376=>524,8400=>0,8401=>0,8402=>0, +8403=>0,8404=>0,8405=>0,8406=>0,8407=>0,8408=>0,8409=>0,8410=>0,8411=>0,8412=>0, +8413=>0,8414=>0,8415=>0,8416=>0,8417=>0,8418=>0,8419=>0,8420=>0,8421=>0,8422=>0, +8423=>0,8424=>0,8425=>0,8426=>0,8427=>0,8428=>0,8429=>0,8430=>0,8431=>0,8432=>0, +8448=>751,8449=>723,8450=>674,8451=>954,8452=>556,8453=>781,8454=>806,8455=>518,8456=>667,8457=>822, +8458=>490,8459=>824,8460=>663,8461=>818,8462=>500,8463=>500,8464=>578,8465=>613,8466=>715,8467=>417, +8468=>778,8469=>751,8470=>880,8471=>792,8472=>832,8473=>589,8474=>729,8475=>892,8476=>711,8477=>755, +8478=>667,8479=>667,8480=>939,8481=>1156,8483=>722,8484=>659,8485=>389,8486=>743,8487=>757,8488=>663, +8489=>286,8490=>722,8491=>722,8492=>846,8493=>613,8494=>533,8495=>363,8496=>587,8497=>690,8498=>556, +8499=>1021,8500=>387,8501=>537,8502=>537,8503=>350,8504=>537,8505=>417,8506=>906,8507=>1155,8508=>655, +8510=>586,8511=>722,8513=>663,8514=>485,8515=>485,8516=>637,8522=>516,8523=>778,8525=>899,8526=>386, +8528=>780,8529=>770,8530=>980,8531=>750,8532=>750,8533=>750,8534=>750,8535=>750,8536=>750,8537=>750, +8538=>750,8539=>750,8540=>750,8541=>750,8542=>750,8543=>750,8544=>333,8545=>658,8546=>977,8547=>1041, +8548=>722,8549=>1040,8550=>1363,8551=>1679,8552=>1051,8553=>722,8554=>1046,8555=>1366,8556=>611,8557=>667, +8558=>722,8559=>889,8560=>278,8561=>536,8562=>794,8563=>734,8564=>500,8565=>758,8566=>1016,8567=>1274, +8568=>754,8569=>500,8570=>764,8571=>1022,8572=>278,8573=>444,8574=>500,8575=>778,8576=>1082,8577=>722, +8578=>1090,8579=>667,8580=>444,8581=>667,8582=>528,8583=>722,8584=>1093,8585=>771,8592=>964,8593=>472, +8594=>964,8595=>500,8596=>964,8597=>499,8598=>964,8599=>964,8600=>964,8601=>964,8602=>964,8603=>964, +8604=>1009,8605=>1009,8606=>964,8607=>500,8608=>964,8609=>499,8610=>1093,8611=>1093,8612=>1093,8613=>500, +8614=>1093,8615=>500,8616=>500,8617=>964,8618=>964,8619=>964,8620=>964,8621=>1151,8622=>964,8623=>592, +8624=>482,8625=>482,8626=>482,8627=>482,8628=>658,8629=>658,8630=>1069,8631=>1069,8632=>836,8633=>964, +8634=>939,8635=>939,8636=>964,8637=>964,8638=>499,8639=>499,8640=>964,8641=>964,8642=>499,8643=>499, +8644=>964,8645=>840,8646=>964,8647=>964,8648=>840,8649=>964,8650=>840,8651=>964,8652=>964,8653=>964, +8654=>964,8655=>964,8656=>964,8657=>550,8658=>964,8659=>550,8660=>964,8661=>550,8662=>1047,8663=>1047, +8664=>1047,8665=>1047,8666=>964,8667=>964,8668=>1092,8669=>1092,8670=>500,8671=>500,8672=>964,8673=>500, +8674=>964,8675=>500,8676=>964,8677=>964,8678=>964,8679=>596,8680=>964,8681=>596,8682=>594,8683=>594, +8684=>594,8685=>595,8686=>596,8687=>596,8688=>966,8689=>926,8690=>926,8691=>596,8692=>964,8693=>842, +8694=>964,8695=>964,8696=>964,8697=>964,8698=>964,8699=>964,8700=>964,8701=>964,8702=>964,8703=>964, +8704=>587,8705=>716,8706=>494,8707=>587,8708=>587,8709=>746,8710=>612,8711=>612,8712=>536,8713=>536, +8714=>439,8715=>536,8716=>536,8717=>439,8718=>506,8719=>823,8720=>823,8721=>713,8722=>564,8723=>564, +8724=>564,8725=>636,8726=>636,8727=>471,8728=>497,8729=>497,8730=>549,8731=>549,8732=>549,8733=>636, +8734=>853,8735=>509,8736=>575,8737=>559,8738=>509,8739=>200,8740=>250,8741=>320,8742=>320,8743=>564, +8744=>564,8745=>654,8746=>654,8747=>416,8748=>750,8749=>1083,8750=>722,8751=>750,8752=>1083,8753=>697, +8754=>722,8755=>722,8756=>565,8757=>568,8758=>250,8759=>629,8760=>564,8761=>758,8762=>564,8763=>636, +8764=>636,8765=>636,8766=>503,8767=>614,8768=>636,8769=>636,8770=>636,8771=>636,8772=>636,8773=>636, +8774=>636,8775=>636,8776=>636,8777=>636,8778=>636,8779=>636,8780=>636,8781=>636,8782=>636,8783=>636, +8784=>564,8785=>564,8786=>564,8787=>564,8788=>735,8789=>755,8790=>564,8791=>564,8792=>564,8793=>564, +8794=>564,8795=>564,8796=>600,8797=>564,8798=>564,8799=>564,8800=>564,8801=>636,8802=>636,8803=>636, +8804=>636,8805=>636,8806=>636,8807=>636,8808=>636,8809=>636,8810=>900,8811=>899,8812=>410,8813=>636, +8814=>636,8815=>636,8816=>636,8817=>636,8818=>636,8819=>636,8820=>636,8821=>636,8822=>636,8823=>636, +8824=>636,8825=>636,8826=>636,8827=>636,8828=>636,8829=>636,8830=>636,8831=>636,8832=>636,8833=>636, +8834=>636,8835=>636,8836=>636,8837=>636,8838=>636,8839=>636,8840=>636,8841=>636,8842=>636,8843=>636, +8844=>654,8845=>654,8846=>654,8847=>636,8848=>636,8849=>636,8850=>636,8851=>636,8852=>636,8853=>636, +8854=>636,8855=>636,8856=>636,8857=>636,8858=>636,8859=>636,8860=>636,8861=>636,8862=>636,8863=>636, +8864=>636,8865=>636,8866=>600,8867=>600,8868=>712,8869=>712,8870=>466,8871=>466,8872=>595,8873=>588, +8874=>710,8875=>706,8876=>595,8877=>596,8878=>588,8879=>706,8880=>636,8881=>636,8882=>636,8883=>636, +8884=>636,8885=>636,8886=>1296,8887=>1296,8888=>966,8889=>564,8890=>626,8891=>564,8892=>564,8893=>566, +8894=>570,8895=>582,8896=>744,8897=>744,8898=>764,8899=>764,8900=>512,8901=>250,8902=>471,8903=>629, +8904=>636,8905=>636,8906=>636,8907=>816,8908=>816,8909=>636,8910=>636,8911=>636,8912=>636,8913=>636, +8914=>654,8915=>654,8916=>654,8917=>564,8918=>564,8919=>564,8920=>1215,8921=>1215,8922=>636,8923=>636, +8924=>636,8925=>636,8926=>636,8927=>636,8928=>636,8929=>636,8930=>636,8931=>636,8932=>636,8933=>636, +8934=>636,8935=>636,8936=>636,8937=>636,8938=>636,8939=>636,8940=>636,8941=>636,8942=>250,8943=>1000, +8944=>1000,8945=>1000,8946=>601,8947=>536,8948=>464,8949=>536,8950=>536,8951=>464,8952=>536,8953=>536, +8954=>601,8955=>536,8956=>464,8957=>536,8958=>464,8959=>600,8960=>780,8961=>442,8962=>794,8968=>474, +8969=>474,8970=>474,8971=>474,8976=>564,8977=>503,8978=>791,8979=>791,8980=>593,8981=>560,8982=>563, +8983=>563,8984=>800,8985=>564,8986=>800,8987=>632,8988=>474,8989=>474,8990=>474,8991=>474,8992=>686, +8993=>686,8994=>658,8995=>658,8996=>800,8997=>800,8998=>800,8999=>800,9000=>800,9001=>329,9002=>329, +9003=>800,9004=>800,9031=>777,9032=>777,9040=>777,9047=>777,9054=>777,9088=>800,9089=>800,9090=>800, +9091=>800,9094=>800,9095=>800,9096=>800,9097=>800,9098=>800,9100=>800,9103=>788,9104=>788,9105=>788, +9106=>788,9108=>800,9109=>800,9110=>800,9111=>800,9112=>800,9113=>800,9114=>800,9115=>384,9116=>384, +9117=>384,9118=>384,9119=>384,9120=>384,9121=>388,9122=>388,9123=>388,9124=>388,9125=>388,9126=>388, +9127=>494,9128=>494,9129=>494,9130=>494,9131=>494,9132=>494,9133=>494,9134=>686,9138=>1287,9139=>1287, +9140=>860,9141=>861,9142=>861,9144=>889,9145=>889,9146=>889,9147=>889,9148=>889,9149=>889,9166=>800, +9167=>800,9180=>896,9181=>896,9182=>903,9183=>904,9184=>910,9185=>910,9186=>761,9187=>910,9189=>942, +9190=>817,9216=>800,9217=>800,9218=>800,9219=>800,9220=>800,9221=>800,9222=>800,9223=>800,9224=>800, +9225=>800,9226=>800,9227=>800,9228=>800,9229=>800,9230=>800,9231=>800,9232=>800,9233=>800,9234=>800, +9235=>800,9236=>800,9237=>800,9238=>800,9239=>800,9240=>800,9241=>800,9242=>800,9243=>800,9244=>800, +9245=>800,9246=>800,9247=>800,9248=>800,9249=>800,9251=>500,9252=>800,9312=>788,9313=>788,9314=>788, +9315=>788,9316=>788,9317=>788,9318=>788,9319=>788,9320=>788,9321=>788,9472=>889,9473=>889,9474=>889, +9475=>889,9484=>889,9485=>889,9486=>889,9487=>889,9488=>889,9489=>889,9490=>889,9491=>889,9492=>889, +9493=>889,9494=>889,9495=>889,9496=>889,9497=>889,9498=>889,9499=>889,9500=>889,9501=>889,9502=>889, +9503=>889,9504=>889,9505=>889,9506=>889,9507=>889,9508=>889,9509=>889,9510=>889,9511=>889,9512=>889, +9513=>889,9514=>889,9515=>889,9516=>889,9517=>889,9518=>889,9519=>889,9520=>889,9521=>889,9522=>889, +9523=>889,9524=>889,9525=>889,9526=>889,9527=>889,9528=>889,9529=>889,9530=>889,9531=>889,9532=>889, +9533=>889,9534=>889,9535=>889,9536=>889,9537=>889,9538=>889,9539=>889,9540=>889,9541=>889,9542=>889, +9543=>889,9544=>889,9545=>889,9546=>889,9547=>889,9552=>889,9553=>889,9554=>889,9555=>889,9556=>889, +9557=>889,9558=>889,9559=>889,9560=>889,9561=>889,9562=>889,9563=>889,9564=>889,9565=>889,9566=>889, +9567=>889,9568=>889,9569=>889,9570=>889,9571=>889,9572=>889,9573=>889,9574=>889,9575=>889,9576=>889, +9577=>889,9578=>889,9579=>889,9580=>889,9581=>889,9582=>889,9583=>889,9584=>889,9585=>889,9586=>889, +9587=>889,9588=>889,9589=>889,9590=>889,9591=>889,9592=>889,9593=>889,9594=>889,9595=>889,9596=>600, +9597=>889,9598=>600,9599=>889,9600=>761,9601=>761,9602=>761,9603=>761,9604=>761,9605=>761,9606=>761, +9607=>761,9608=>761,9609=>761,9610=>761,9611=>761,9612=>761,9613=>761,9614=>761,9615=>761,9616=>761, +9617=>1000,9618=>1000,9619=>1000,9620=>761,9621=>761,9622=>761,9623=>761,9624=>761,9625=>761,9626=>761, +9627=>761,9628=>761,9629=>761,9630=>761,9631=>761,9632=>761,9633=>761,9634=>761,9635=>761,9636=>761, +9637=>761,9638=>761,9639=>761,9640=>761,9641=>761,9642=>532,9643=>532,9644=>761,9645=>761,9646=>761, +9647=>761,9648=>761,9649=>761,9650=>892,9651=>892,9652=>446,9653=>446,9654=>892,9655=>892,9656=>446, +9657=>446,9658=>892,9659=>892,9660=>892,9661=>892,9662=>446,9663=>446,9664=>892,9665=>892,9666=>446, +9667=>446,9668=>892,9669=>892,9670=>788,9671=>788,9672=>788,9673=>791,9674=>494,9675=>791,9676=>791, +9677=>785,9678=>791,9679=>791,9680=>791,9681=>791,9682=>791,9683=>791,9684=>791,9685=>791,9686=>791, +9687=>791,9688=>350,9689=>761,9690=>761,9691=>761,9692=>791,9693=>791,9694=>791,9695=>791,9696=>791, +9697=>791,9698=>761,9699=>761,9700=>761,9701=>761,9702=>350,9703=>761,9704=>761,9705=>761,9706=>761, +9707=>761,9708=>892,9709=>892,9710=>892,9711=>885,9712=>761,9713=>761,9714=>761,9715=>761,9716=>791, +9717=>791,9718=>791,9719=>791,9720=>761,9721=>761,9722=>761,9723=>761,9724=>761,9725=>570,9726=>570, +9727=>761,9728=>800,9729=>800,9730=>748,9731=>800,9732=>800,9733=>811,9734=>816,9735=>468,9736=>677, +9737=>724,9738=>944,9739=>944,9740=>686,9741=>944,9742=>715,9743=>715,9744=>757,9745=>755,9746=>755, +9747=>756,9748=>800,9749=>837,9750=>719,9751=>719,9752=>782,9753=>822,9754=>954,9755=>954,9756=>933, +9757=>489,9758=>933,9759=>489,9760=>517,9761=>660,9762=>724,9763=>732,9764=>886,9765=>577,9766=>489, +9767=>563,9768=>490,9769=>770,9770=>725,9771=>860,9772=>668,9773=>753,9774=>724,9775=>730,9776=>600, +9777=>600,9778=>600,9779=>600,9780=>600,9781=>600,9782=>600,9783=>600,9784=>730,9785=>724,9786=>724, +9787=>724,9788=>799,9789=>659,9790=>659,9791=>495,9792=>495,9793=>495,9794=>686,9795=>661,9796=>544, +9797=>608,9798=>605,9799=>545,9800=>804,9801=>583,9802=>796,9803=>1006,9804=>825,9805=>1189,9806=>1144, +9807=>1189,9808=>683,9809=>808,9810=>1146,9811=>797,9812=>758,9813=>757,9814=>758,9815=>758,9816=>758, +9817=>758,9818=>758,9819=>758,9820=>758,9821=>758,9822=>758,9823=>758,9824=>770,9825=>770,9826=>770, +9827=>770,9828=>770,9829=>770,9830=>770,9831=>770,9832=>895,9833=>333,9834=>513,9835=>722,9836=>722, +9837=>371,9838=>377,9839=>402,9840=>642,9841=>655,9842=>869,9843=>905,9844=>905,9845=>905,9846=>905, +9847=>905,9848=>905,9849=>905,9850=>905,9851=>1016,9852=>1064,9853=>1064,9854=>954,9855=>606,9856=>522, +9857=>522,9858=>522,9859=>522,9860=>522,9861=>522,9862=>845,9863=>844,9864=>844,9865=>844,9866=>748, +9867=>748,9868=>748,9869=>748,9870=>748,9871=>748,9872=>726,9873=>726,9874=>963,9875=>770,9876=>1038, +9877=>388,9878=>997,9879=>787,9880=>508,9881=>809,9882=>1014,9883=>859,9884=>818,9885=>972,9888=>1000, +9889=>546,9890=>784,9891=>786,9892=>738,9893=>542,9894=>601,9895=>700,9896=>511,9897=>861,9898=>611, +9899=>611,9900=>544,9901=>782,9902=>1025,9903=>1141,9904=>1000,9905=>513,9906=>510,9907=>642,9908=>722, +9909=>719,9910=>777,9911=>495,9912=>602,9913=>836,9914=>666,9915=>666,9916=>691,9920=>689,9921=>689, +9922=>689,9923=>689,9985=>974,9986=>961,9987=>974,9988=>980,9990=>789,9991=>790,9992=>791,9993=>690, +9996=>549,9997=>855,9998=>911,9999=>933,10000=>911,10001=>945,10002=>974,10003=>755,10004=>846,10005=>762, +10006=>761,10007=>571,10008=>677,10009=>763,10010=>760,10011=>759,10012=>754,10013=>494,10014=>552,10015=>537, +10016=>577,10017=>692,10018=>786,10019=>788,10020=>788,10021=>790,10022=>793,10023=>794,10025=>823,10026=>789, +10027=>841,10028=>823,10029=>833,10030=>816,10031=>831,10032=>923,10033=>744,10034=>723,10035=>749,10036=>790, +10037=>792,10038=>695,10039=>776,10040=>768,10041=>792,10042=>759,10043=>707,10044=>708,10045=>682,10046=>701, +10047=>826,10048=>815,10049=>789,10050=>789,10051=>707,10052=>687,10053=>696,10054=>689,10055=>786,10056=>787, +10057=>713,10058=>791,10059=>785,10061=>873,10063=>762,10064=>762,10065=>759,10066=>759,10070=>784,10072=>138, +10073=>277,10074=>415,10075=>392,10076=>392,10077=>668,10078=>668,10081=>732,10082=>544,10083=>544,10084=>910, +10085=>667,10086=>760,10087=>760,10088=>390,10089=>390,10090=>317,10091=>317,10092=>276,10093=>276,10094=>509, +10095=>509,10096=>410,10097=>410,10098=>234,10099=>234,10100=>334,10101=>334,10102=>788,10103=>788,10104=>788, +10105=>788,10106=>788,10107=>788,10108=>788,10109=>788,10110=>788,10111=>788,10112=>788,10113=>788,10114=>788, +10115=>788,10116=>788,10117=>788,10118=>788,10119=>788,10120=>788,10121=>788,10122=>788,10123=>788,10124=>788, +10125=>788,10126=>788,10127=>788,10128=>788,10129=>788,10130=>788,10131=>788,10132=>894,10136=>748,10137=>924, +10138=>748,10139=>918,10140=>927,10141=>928,10142=>928,10143=>834,10144=>873,10145=>828,10146=>924,10147=>924, +10148=>917,10149=>930,10150=>931,10151=>463,10152=>883,10153=>836,10154=>836,10155=>867,10156=>867,10157=>696, +10158=>696,10159=>874,10161=>874,10162=>760,10163=>946,10164=>771,10165=>865,10166=>771,10167=>888,10168=>967, +10169=>888,10170=>831,10171=>873,10172=>927,10173=>970,10174=>918,10214=>545,10215=>545,10216=>329,10217=>329, +10218=>496,10219=>496,10224=>1000,10225=>1000,10226=>1104,10227=>1102,10228=>964,10229=>1000,10230=>1000,10231=>1000, +10232=>1000,10233=>1000,10234=>1000,10235=>1000,10236=>1000,10237=>1000,10238=>1000,10239=>1392,10752=>860,10753=>860, +10754=>860,10755=>766,10756=>766,10757=>756,10758=>756,10761=>745,10781=>702,10815=>722,11008=>1000,11009=>1000, +11010=>1000,11011=>1000,11012=>1222,11013=>1000,11014=>1000,11015=>1000,11016=>1000,11017=>1000,11018=>1000,11019=>1000, +11020=>1244,11021=>1000,11026=>770,11027=>770,11028=>770,11029=>770,11030=>770,11031=>770,11032=>770,11033=>770, +11034=>770,11035=>1000,11036=>1000,11037=>283,11038=>283,11039=>846,11040=>846,11041=>799,11042=>799,11043=>807, +11044=>1000,11045=>461,11046=>461,11047=>461,11048=>461,11049=>360,11050=>360,11051=>283,11052=>854,11053=>854, +11054=>628,11055=>628,11088=>589,11089=>443,11090=>443,11091=>802,11092=>803,11264=>645,11265=>793,11266=>851, +11267=>700,11268=>851,11269=>640,11270=>774,11271=>665,11272=>733,11273=>834,11274=>834,11275=>734,11276=>790, +11277=>580,11278=>834,11279=>979,11280=>738,11281=>410,11282=>775,11283=>471,11284=>734,11285=>851,11286=>895, +11287=>722,11288=>638,11289=>620,11290=>721,11291=>793,11292=>821,11293=>699,11294=>793,11295=>682,11296=>569, +11297=>791,11299=>751,11300=>705,11301=>874,11302=>665,11303=>1139,11304=>1023,11305=>1238,11306=>762,11310=>759, +11312=>484,11313=>595,11314=>638,11315=>525,11316=>638,11317=>480,11318=>580,11319=>499,11320=>550,11321=>625, +11322=>626,11323=>550,11324=>592,11325=>435,11326=>626,11327=>734,11328=>553,11329=>308,11330=>581,11331=>353, +11332=>550,11333=>638,11334=>671,11335=>542,11336=>478,11337=>465,11338=>540,11339=>594,11340=>616,11341=>524, +11342=>594,11343=>512,11344=>427,11345=>589,11347=>564,11348=>529,11349=>655,11350=>499,11351=>854,11352=>767, +11353=>929,11354=>571,11358=>569,11360=>611,11361=>289,11362=>627,11363=>556,11364=>667,11365=>447,11366=>303, +11367=>728,11368=>500,11369=>734,11370=>511,11371=>611,11372=>444,11373=>680,11374=>889,11375=>722,11377=>651, +11378=>1075,11379=>881,11380=>500,11381=>557,11382=>383,11383=>643,11384=>559,11385=>339,11386=>722,11387=>397, +11388=>180,11389=>469,11392=>719,11393=>499,11394=>532,11395=>381,11396=>615,11397=>433,11398=>969,11399=>680, +11400=>647,11401=>443,11402=>593,11403=>402,11404=>573,11405=>405,11406=>698,11407=>509,11408=>726,11409=>493, +11410=>283,11411=>238,11412=>628,11413=>455,11414=>653,11415=>471,11416=>819,11417=>589,11418=>698,11419=>507, +11420=>546,11421=>378,11422=>722,11423=>489,11424=>724,11425=>524,11426=>526,11427=>375,11428=>647,11429=>438, +11430=>615,11431=>433,11432=>719,11433=>519,11434=>762,11435=>538,11436=>649,11437=>461,11438=>721,11439=>519, +11440=>964,11441=>681,11456=>689,11457=>464,11464=>579,11465=>391,11466=>493,11467=>355,11492=>408,11493=>499, +11494=>496,11495=>986,11496=>466,11497=>461,11498=>934,11517=>256,11518=>617,11519=>266,11744=>0,11745=>0, +11746=>0,11747=>0,11748=>0,11749=>0,11750=>0,11751=>0,11752=>0,11753=>0,11754=>0,11755=>0, +11756=>0,11757=>0,11758=>0,11759=>0,11760=>0,11761=>0,11762=>0,11763=>0,11764=>0,11765=>0, +11766=>0,11767=>0,11768=>0,11769=>0,11770=>0,11771=>0,11772=>0,11773=>0,11774=>0,11775=>0, +11799=>333,42560=>607,42561=>411,42562=>611,42563=>410,42564=>487,42565=>347,42566=>368,42567=>286,42568=>722, +42569=>519,42570=>550,42571=>468,42572=>1145,42573=>775,42574=>665,42575=>548,42576=>1014,42577=>736,42578=>910, +42579=>675,42580=>966,42581=>677,42582=>1042,42583=>648,42584=>722,42585=>513,42586=>932,42587=>700,42588=>1042, +42589=>749,42590=>780,42591=>550,42594=>896,42595=>635,42596=>933,42597=>635,42598=>1139,42599=>777,42600=>722, +42601=>500,42602=>790,42603=>560,42604=>1262,42605=>850,42606=>734,42607=>0,42608=>0,42609=>0,42610=>0, +42611=>519,42620=>0,42621=>0,42622=>510,42623=>201,42624=>639,42625=>488,42626=>475,42627=>347,42628=>1160, +42629=>842,42630=>1000,42631=>768,42632=>737,42633=>531,42634=>827,42635=>530,42636=>608,42637=>438,42638=>742, +42639=>545,42640=>608,42641=>480,42642=>926,42643=>654,42644=>671,42645=>518,42646=>992,42647=>780,42752=>318, +42753=>318,42754=>318,42755=>318,42756=>318,42757=>318,42758=>318,42759=>318,42760=>307,42761=>307,42762=>307, +42763=>307,42764=>307,42765=>307,42766=>307,42767=>307,42768=>307,42769=>307,42770=>460,42771=>460,42772=>460, +42773=>460,42774=>460,42775=>374,42776=>445,42777=>564,42778=>564,42779=>354,42780=>354,42781=>243,42782=>243, +42783=>243,42784=>564,42785=>564,42786=>276,42787=>242,42788=>386,42789=>276,42790=>722,42791=>500,42792=>895, +42793=>703,42794=>532,42795=>409,42796=>437,42797=>389,42798=>592,42799=>600,42800=>378,42801=>378,42802=>1183, +42803=>708,42804=>1154,42805=>758,42806=>1089,42807=>716,42808=>902,42809=>586,42810=>902,42811=>586,42812=>912, +42813=>572,42814=>667,42815=>444,42816=>722,42817=>500,42818=>722,42819=>500,42820=>722,42821=>500,42822=>713, +42823=>361,42824=>611,42825=>289,42826=>750,42827=>544,42828=>918,42829=>658,42830=>1262,42831=>848,42832=>556, +42833=>500,42838=>722,42839=>500,42852=>576,42853=>496,42854=>576,42855=>496,42873=>722,42874=>500,42875=>483, +42876=>341,42877=>611,42878=>611,42879=>447,42880=>611,42881=>278,42882=>689,42883=>500,42884=>483,42885=>341, +42886=>667,42887=>444,42888=>333,42889=>278,42890=>282,42891=>286,42892=>278,43003=>556,43004=>556,43005=>889, +43006=>333,43007=>1298,64256=>589,64257=>534,64258=>530,64259=>805,64260=>799,64261=>586,64262=>677,64275=>971, +64276=>969,64277=>978,64278=>971,64279=>1219,64285=>350,64286=>0,64287=>537,64288=>537,64297=>564,64298=>537, +64299=>537,64300=>537,64301=>537,64302=>537,64303=>537,64304=>537,64305=>537,64306=>350,64307=>537,64308=>537, +64309=>350,64310=>350,64312=>537,64313=>350,64314=>537,64315=>537,64316=>537,64318=>537,64320=>350,64321=>537, +64323=>537,64324=>537,64326=>537,64327=>537,64328=>537,64329=>537,64330=>537,64331=>350,64332=>537,64333=>537, +64334=>537,64335=>537,64342=>926,64343=>926,64344=>308,64345=>308,64378=>750,64379=>750,64380=>580,64381=>580, +64394=>338,64395=>338,64402=>874,64403=>874,64404=>329,64405=>329,64508=>776,64509=>700,64510=>304,64511=>304, +65010=>640,65020=>837,65136=>300,65140=>300,65142=>300,65144=>300,65146=>300,65148=>300,65152=>724,65153=>321, +65154=>275,65155=>249,65156=>275,65157=>399,65158=>399,65159=>249,65160=>275,65161=>776,65162=>776,65163=>301, +65164=>264,65165=>249,65166=>275,65167=>950,65168=>950,65169=>293,65170=>293,65171=>424,65172=>622,65173=>925, +65174=>925,65175=>308,65176=>308,65177=>924,65178=>924,65179=>298,65180=>298,65181=>738,65182=>738,65183=>574, +65184=>574,65185=>748,65186=>750,65187=>600,65188=>600,65189=>701,65190=>775,65191=>596,65192=>596,65193=>397, +65194=>397,65195=>399,65196=>399,65197=>328,65198=>328,65199=>331,65200=>331,65201=>951,65202=>951,65203=>600, +65204=>600,65205=>949,65206=>949,65207=>649,65208=>649,65209=>949,65210=>949,65211=>823,65212=>823,65213=>949, +65214=>949,65215=>805,65216=>805,65217=>557,65218=>557,65219=>460,65220=>460,65221=>550,65222=>550,65223=>455, +65224=>550,65225=>625,65226=>575,65227=>674,65228=>550,65229=>602,65230=>577,65231=>578,65232=>577,65233=>801, +65234=>801,65235=>300,65236=>300,65237=>696,65238=>696,65239=>650,65240=>650,65241=>757,65242=>757,65243=>318, +65244=>318,65245=>655,65246=>655,65247=>206,65248=>206,65249=>549,65250=>549,65251=>403,65252=>403,65253=>651, +65254=>651,65255=>323,65256=>323,65257=>424,65258=>622,65259=>525,65260=>476,65261=>399,65262=>399,65263=>776, +65264=>776,65265=>776,65266=>776,65267=>296,65268=>264,65269=>676,65270=>724,65271=>676,65272=>724,65273=>676, +65274=>724,65275=>676,65276=>724,65279=>0,65533=>900); +$enc=''; +$diff=''; +$file='freeserif.z'; +$ctg='freeserif.ctg.z'; +$originalsize=1687516; +// --- EOF --- --- /dev/null +++ b/tcpdf/fonts/freeserifb.php @@ -1,1 +1,308 @@ - +900,'Descent'=>-300,'CapHeight'=>16,'Flags'=>32,'FontBBox'=>'[-796 -433 1830 1053]','ItalicAngle'=>0,'StemV'=>120,'MissingWidth'=>600); +$up=-125; +$ut=50; +$dw=600; +$cw=array( +32=>250,33=>333,34=>555,35=>500,36=>500,37=>1000,38=>833,39=>278,40=>333,41=>333, +42=>507,43=>676,44=>250,45=>333,46=>250,47=>278,48=>500,49=>500,50=>500,51=>500, +52=>500,53=>500,54=>500,55=>500,56=>500,57=>500,58=>333,59=>333,60=>676,61=>676, +62=>676,63=>500,64=>930,65=>722,66=>667,67=>722,68=>724,69=>667,70=>611,71=>778, +72=>774,73=>386,74=>500,75=>764,76=>664,77=>943,78=>722,79=>778,80=>611,81=>778, +82=>712,83=>556,84=>667,85=>722,86=>722,87=>1000,88=>722,89=>722,90=>667,91=>333, +92=>278,93=>333,94=>581,95=>500,96=>333,97=>500,98=>546,99=>444,100=>556,101=>444, +102=>333,103=>500,104=>556,105=>278,106=>333,107=>556,108=>278,109=>833,110=>556,111=>500, +112=>549,113=>547,114=>444,115=>389,116=>333,117=>556,118=>500,119=>722,120=>500,121=>500, +122=>444,123=>394,124=>220,125=>394,126=>520,8364=>761,8218=>250,402=>333,8222=>500,8230=>1000, +8224=>500,8225=>500,710=>333,8240=>1000,352=>556,8249=>333,338=>1000,381=>667,8216=>250,8217=>250, +8220=>500,8221=>500,8226=>524,8211=>500,8212=>1000,732=>333,8482=>1086,353=>389,8250=>333,339=>717, +382=>444,376=>722,160=>250,161=>333,162=>500,163=>500,164=>500,165=>500,166=>220,167=>500, +168=>333,169=>747,170=>300,171=>500,172=>680,173=>333,174=>747,175=>333,176=>400,177=>676, +178=>300,179=>300,180=>333,181=>556,182=>540,183=>250,184=>333,185=>270,186=>330,187=>500, +188=>750,189=>750,190=>750,191=>500,192=>722,193=>722,194=>722,195=>722,196=>722,197=>722, +198=>1000,199=>722,200=>667,201=>667,202=>667,203=>667,204=>389,205=>389,206=>389,207=>389, +208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>676,216=>778,217=>722, +218=>722,219=>722,220=>722,221=>722,222=>632,223=>556,224=>500,225=>500,226=>500,227=>500, +228=>500,229=>500,230=>703,231=>444,232=>444,233=>444,234=>444,235=>444,236=>278,237=>278, +238=>278,239=>278,240=>500,241=>556,242=>500,243=>500,244=>500,245=>500,246=>500,247=>676, +248=>500,249=>556,250=>556,251=>556,252=>556,253=>500,254=>556,255=>500,256=>722,257=>500, +258=>722,259=>500,260=>722,261=>500,262=>722,263=>444,264=>722,265=>444,266=>722,267=>444, +268=>722,269=>444,270=>722,271=>692,272=>722,273=>556,274=>667,275=>444,276=>667,277=>444, +278=>667,279=>444,280=>667,281=>444,282=>667,283=>444,284=>778,285=>500,286=>778,287=>500, +288=>778,289=>500,290=>778,291=>500,292=>778,293=>556,294=>778,295=>556,296=>389,297=>278, +298=>389,299=>278,300=>389,301=>278,302=>389,303=>278,304=>389,305=>278,306=>882,307=>533, +308=>500,309=>338,310=>778,311=>556,312=>534,313=>667,314=>278,315=>667,316=>278,317=>667, +318=>433,319=>667,320=>528,321=>667,322=>278,323=>722,324=>556,325=>722,326=>556,327=>722, +328=>556,329=>666,330=>829,331=>556,332=>778,333=>500,334=>778,335=>500,336=>778,337=>500, +340=>722,341=>444,342=>722,343=>444,344=>722,345=>444,346=>556,347=>389,348=>556,349=>389, +350=>556,351=>389,354=>667,355=>333,356=>667,357=>488,358=>667,359=>333,360=>722,361=>556, +362=>722,363=>556,364=>722,365=>556,366=>722,367=>556,368=>722,369=>556,370=>722,371=>556, +372=>1000,373=>722,374=>722,375=>500,377=>667,378=>444,379=>667,380=>444,383=>333,384=>556, +385=>805,386=>659,387=>556,388=>667,389=>556,390=>722,391=>915,392=>605,393=>722,394=>862, +395=>667,396=>556,397=>550,398=>667,399=>818,400=>631,401=>611,403=>903,404=>776,405=>807, +406=>327,407=>389,408=>887,409=>556,410=>278,411=>495,412=>1000,413=>864,414=>556,415=>828, +416=>793,417=>584,418=>1192,419=>795,420=>749,421=>556,422=>748,423=>556,424=>389,425=>650, +426=>465,427=>333,428=>667,429=>333,430=>667,431=>768,432=>620,433=>811,434=>685,435=>853, +436=>705,437=>667,438=>444,439=>593,440=>654,441=>508,442=>500,443=>500,444=>654,445=>520, +446=>444,447=>611,448=>220,449=>418,450=>570,451=>333,452=>1331,453=>1158,454=>990,455=>1134, +456=>977,457=>611,458=>1200,459=>1015,460=>879,461=>722,462=>500,463=>386,464=>278,465=>778, +466=>500,467=>722,468=>556,469=>722,470=>556,471=>722,472=>556,473=>722,474=>556,475=>722, +476=>556,477=>444,478=>722,479=>500,480=>722,481=>500,482=>1000,483=>703,484=>778,485=>500, +486=>778,487=>500,488=>764,489=>556,490=>778,491=>500,492=>778,493=>500,494=>593,495=>502, +496=>338,497=>1331,498=>1158,499=>990,500=>778,501=>500,502=>995,503=>603,504=>722,505=>556, +506=>722,507=>500,508=>1000,509=>703,510=>778,511=>500,512=>722,513=>500,514=>722,515=>500, +516=>667,517=>444,518=>667,519=>444,520=>386,521=>278,522=>386,523=>278,524=>778,525=>500, +526=>778,527=>500,528=>712,529=>444,530=>712,531=>444,532=>722,533=>556,534=>722,535=>556, +536=>556,537=>389,538=>667,539=>333,540=>464,541=>455,542=>774,543=>556,544=>731,545=>649, +546=>568,547=>494,548=>667,549=>444,550=>722,551=>500,552=>667,553=>444,554=>778,555=>500, +556=>778,557=>500,558=>778,559=>500,560=>778,561=>500,562=>722,563=>500,564=>437,565=>636, +566=>415,567=>338,568=>776,569=>760,570=>722,571=>722,572=>444,573=>664,574=>667,575=>389, +576=>451,577=>505,578=>479,579=>686,580=>750,581=>722,582=>667,583=>478,584=>500,585=>333, +586=>808,587=>608,588=>712,589=>444,590=>722,591=>500,592=>500,593=>523,594=>523,595=>556, +596=>444,597=>468,598=>658,599=>659,600=>444,601=>444,602=>611,603=>440,604=>440,605=>611, +606=>459,607=>333,608=>665,609=>500,610=>556,611=>550,612=>582,613=>556,614=>556,615=>556, +616=>293,617=>333,618=>278,619=>369,620=>397,621=>389,622=>667,623=>833,624=>833,625=>833, +626=>556,627=>673,628=>589,629=>500,630=>744,631=>715,632=>667,633=>444,634=>444,635=>564, +636=>444,637=>444,638=>394,639=>394,640=>556,641=>556,642=>389,643=>503,644=>507,645=>507, +646=>560,647=>333,648=>394,649=>500,650=>557,651=>529,652=>500,653=>722,654=>500,655=>500, +656=>672,657=>492,658=>502,659=>502,660=>500,661=>500,662=>500,663=>444,664=>778,665=>545, +666=>460,667=>722,668=>556,669=>438,670=>556,671=>444,672=>666,673=>500,674=>500,675=>872, +676=>878,677=>926,678=>645,679=>634,680=>724,681=>825,682=>636,683=>604,684=>490,685=>500, +686=>611,687=>722,688=>378,689=>378,690=>226,691=>301,692=>301,693=>301,694=>378,695=>490, +696=>340,697=>250,698=>408,699=>250,700=>250,701=>250,702=>300,703=>300,704=>340,705=>340, +706=>333,707=>333,708=>333,709=>333,711=>333,712=>333,713=>333,714=>333,715=>333,716=>300, +717=>333,718=>333,719=>333,720=>278,721=>278,722=>300,723=>300,724=>333,725=>333,726=>333, +727=>333,728=>333,729=>333,730=>333,731=>333,733=>400,734=>333,735=>352,736=>374,737=>189, +738=>264,739=>340,740=>340,741=>526,742=>526,743=>526,744=>526,745=>526,746=>519,747=>519, +748=>333,749=>333,750=>480,751=>333,752=>333,753=>333,754=>333,755=>327,756=>261,757=>437, +758=>437,759=>400,760=>278,761=>175,762=>175,763=>175,764=>175,765=>333,766=>337,767=>432, +768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0, +778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0, +788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0,797=>0, +798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,807=>0, +808=>0,809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0, +818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0,827=>0, +828=>0,829=>0,830=>0,831=>0,832=>0,833=>0,834=>0,835=>0,836=>0,837=>0, +838=>0,839=>0,840=>0,841=>0,842=>0,843=>0,844=>0,845=>0,846=>0,847=>0, +848=>0,849=>0,850=>0,851=>0,852=>0,853=>0,854=>0,855=>0,856=>0,857=>0, +858=>0,859=>0,860=>0,861=>0,862=>0,863=>0,864=>0,865=>0,884=>199,885=>199, +890=>0,894=>333,900=>330,901=>415,902=>722,903=>250,904=>811,905=>938,906=>556,908=>840, +910=>886,911=>879,912=>330,913=>722,914=>667,915=>611,916=>759,917=>667,918=>667,919=>774, +920=>778,921=>386,922=>777,923=>722,924=>943,925=>722,926=>650,927=>778,928=>812,929=>611, +931=>650,932=>667,933=>738,934=>868,935=>722,936=>924,937=>811,938=>386,939=>738,940=>605, +941=>440,942=>605,943=>330,944=>550,945=>605,946=>550,947=>550,948=>550,949=>440,950=>495, +951=>605,952=>550,953=>330,954=>608,955=>495,956=>605,957=>495,958=>495,959=>550,960=>605, +961=>550,962=>440,963=>550,964=>440,965=>550,966=>660,967=>495,968=>715,969=>715,970=>330, +971=>550,972=>550,973=>550,974=>715,976=>550,977=>605,978=>722,979=>871,980=>722,981=>660, +982=>715,983=>550,984=>611,985=>550,986=>650,987=>514,988=>611,989=>513,990=>715,991=>439, +992=>722,993=>605,994=>1022,995=>715,996=>626,997=>576,998=>616,999=>544,1000=>539,1001=>441, +1002=>932,1003=>653,1004=>593,1005=>513,1006=>654,1007=>517,1008=>550,1009=>550,1010=>477,1011=>333, +1012=>828,1013=>424,1014=>424,1015=>632,1016=>575,1017=>722,1018=>943,1019=>809,1020=>550,1021=>722, +1022=>722,1023=>722,1024=>666,1025=>666,1026=>852,1027=>617,1028=>733,1029=>568,1030=>400,1031=>400, +1032=>513,1033=>1062,1034=>1057,1035=>899,1036=>769,1037=>788,1038=>731,1039=>788,1040=>704,1041=>659, +1042=>678,1043=>617,1044=>718,1045=>666,1046=>1104,1047=>654,1048=>788,1049=>788,1050=>769,1051=>793, +1052=>957,1053=>788,1054=>828,1055=>814,1056=>659,1057=>733,1058=>649,1059=>731,1060=>864,1061=>715, +1062=>788,1063=>768,1064=>1129,1065=>1129,1066=>794,1067=>984,1068=>659,1069=>747,1070=>1136,1071=>734, +1072=>528,1073=>567,1074=>545,1075=>439,1076=>565,1077=>511,1078=>805,1079=>495,1080=>572,1081=>572, +1082=>566,1083=>551,1084=>682,1085=>572,1086=>571,1087=>572,1088=>591,1089=>495,1090=>501,1091=>496, +1092=>879,1093=>502,1094=>566,1095=>564,1096=>833,1097=>827,1098=>647,1099=>764,1100=>545,1101=>539, +1102=>800,1103=>563,1104=>511,1105=>511,1106=>592,1107=>439,1108=>539,1109=>436,1110=>291,1111=>291, +1112=>333,1113=>812,1114=>824,1115=>570,1116=>566,1117=>572,1118=>496,1119=>572,1120=>1066,1121=>769, +1122=>796,1123=>648,1124=>1033,1125=>778,1126=>977,1127=>685,1128=>1363,1129=>971,1130=>1086,1131=>778, +1132=>1466,1133=>1062,1134=>650,1135=>462,1136=>974,1137=>771,1138=>828,1139=>661,1140=>808,1141=>578, +1142=>808,1143=>590,1144=>1318,1145=>1014,1146=>992,1147=>744,1148=>1066,1149=>769,1150=>1066,1151=>769, +1152=>694,1153=>483,1154=>258,1155=>0,1156=>0,1157=>0,1158=>0,1159=>0,1160=>0,1161=>0, +1162=>788,1163=>569,1164=>659,1165=>548,1166=>659,1167=>594,1168=>618,1169=>459,1170=>618,1171=>439, +1172=>666,1173=>585,1174=>1155,1175=>843,1176=>670,1177=>495,1178=>833,1179=>610,1180=>815,1181=>597, +1182=>901,1183=>676,1184=>874,1185=>636,1186=>788,1187=>572,1188=>986,1189=>693,1190=>1086,1191=>864, +1192=>913,1193=>666,1194=>733,1195=>495,1196=>649,1197=>501,1198=>712,1199=>609,1200=>712,1201=>609, +1202=>790,1203=>567,1204=>1043,1205=>785,1206=>768,1207=>562,1208=>824,1209=>598,1210=>768,1211=>570, +1212=>960,1213=>637,1214=>960,1215=>637,1216=>400,1217=>1104,1218=>805,1219=>742,1220=>557,1221=>793, +1222=>551,1223=>788,1224=>570,1225=>788,1226=>572,1227=>768,1228=>564,1229=>957,1230=>682,1231=>400, +1232=>704,1233=>528,1234=>704,1235=>528,1236=>989,1237=>725,1238=>667,1239=>511,1240=>818,1241=>511, +1242=>818,1243=>511,1244=>1104,1245=>805,1246=>654,1247=>495,1248=>644,1249=>472,1250=>788,1251=>572, +1252=>788,1253=>572,1254=>828,1255=>571,1256=>828,1257=>571,1258=>828,1259=>571,1260=>747,1261=>539, +1262=>731,1263=>496,1264=>731,1265=>496,1266=>731,1267=>500,1268=>768,1269=>564,1270=>627,1271=>435, +1272=>984,1273=>764,1296=>660,1297=>495,1298=>793,1299=>551,1306=>818,1307=>588,1308=>994,1309=>716, +1310=>769,1311=>566,1329=>889,1330=>787,1331=>858,1332=>941,1333=>775,1334=>765,1335=>805,1336=>762, +1337=>938,1338=>869,1339=>765,1340=>756,1341=>966,1342=>992,1343=>748,1344=>469,1345=>731,1346=>941, +1347=>745,1348=>966,1349=>641,1350=>929,1351=>774,1352=>779,1353=>784,1354=>841,1355=>775,1356=>955, +1357=>779,1358=>927,1359=>555,1360=>763,1361=>641,1362=>656,1363=>824,1364=>869,1365=>768,1366=>754, +1369=>300,1370=>300,1371=>270,1372=>307,1373=>270,1374=>324,1375=>322,1377=>818,1378=>548,1379=>601, +1380=>608,1381=>551,1382=>547,1383=>496,1384=>548,1385=>586,1386=>585,1387=>548,1388=>269,1389=>798, +1390=>594,1391=>544,1392=>548,1393=>513,1394=>583,1395=>560,1396=>551,1397=>397,1398=>567,1399=>447, +1400=>548,1401=>411,1402=>810,1403=>464,1404=>548,1405=>551,1406=>595,1407=>821,1408=>548,1409=>557, +1410=>312,1411=>821,1412=>550,1413=>511,1414=>668,1415=>602,1417=>333,1418=>349,1425=>0,1426=>0, +1427=>0,1428=>0,1429=>0,1430=>0,1431=>0,1432=>0,1433=>0,1434=>0,1435=>0,1436=>0, +1437=>0,1438=>0,1439=>0,1440=>0,1441=>0,1442=>0,1443=>0,1444=>0,1445=>0,1446=>0, +1447=>0,1448=>0,1449=>0,1450=>0,1451=>0,1452=>0,1453=>0,1454=>0,1455=>0,1456=>0, +1457=>0,1458=>0,1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1466=>0, +1467=>0,1468=>0,1469=>0,1470=>433,1471=>0,1472=>155,1473=>0,1474=>0,1475=>400,1476=>0, +1477=>0,1478=>347,1479=>0,1488=>593,1489=>498,1490=>339,1491=>523,1492=>561,1493=>266,1494=>291, +1495=>559,1496=>576,1497=>266,1498=>496,1499=>501,1500=>510,1501=>542,1502=>581,1503=>273,1504=>347, +1505=>512,1506=>552,1507=>493,1508=>491,1509=>537,1510=>561,1511=>544,1512=>502,1513=>716,1514=>571, +1520=>532,1521=>532,1522=>532,1523=>396,1524=>432,3585=>590,3586=>578,3587=>661,3588=>592,3589=>592, +3590=>699,3591=>447,3592=>534,3593=>692,3594=>578,3595=>659,3596=>899,3597=>804,3598=>633,3599=>637, +3600=>484,3601=>730,3602=>876,3603=>915,3604=>592,3605=>592,3606=>578,3607=>670,3608=>542,3609=>671, +3610=>621,3611=>618,3612=>621,3613=>617,3614=>708,3615=>708,3616=>637,3617=>589,3618=>552,3619=>484, +3620=>590,3621=>569,3622=>637,3623=>526,3624=>599,3625=>802,3626=>579,3627=>668,3628=>778,3629=>560, +3630=>514,3631=>510,3632=>412,3633=>0,3634=>423,3635=>452,3636=>0,3637=>0,3638=>0,3639=>0, +3640=>0,3641=>0,3642=>0,3647=>665,3648=>357,3649=>624,3650=>529,3651=>486,3652=>475,3653=>423, +3654=>500,3655=>0,3656=>0,3657=>0,3658=>0,3659=>0,3660=>0,3661=>0,3662=>0,3663=>657, +3664=>548,3665=>548,3666=>592,3667=>614,3668=>631,3669=>643,3670=>508,3671=>744,3672=>622,3673=>585, +3674=>721,3675=>1381,4256=>540,4257=>544,4258=>639,4259=>718,4260=>553,4261=>545,4262=>541,4263=>810, +4264=>540,4265=>541,4266=>921,4267=>540,4268=>529,4269=>810,4270=>540,4271=>540,4272=>810,4273=>545, +4274=>642,4275=>643,4276=>659,4277=>538,4278=>718,4279=>541,4280=>592,4281=>535,4282=>586,4283=>540, +4284=>628,4285=>521,4286=>548,4287=>630,4288=>541,4289=>541,4290=>660,4291=>544,4292=>542,4293=>498, +4304=>522,4305=>518,4306=>621,4307=>716,4308=>517,4309=>519,4310=>518,4311=>796,4312=>518,4313=>518, +4314=>934,4315=>517,4316=>519,4317=>787,4318=>515,4319=>514,4320=>788,4321=>573,4322=>620,4323=>593, +4324=>639,4325=>516,4326=>714,4327=>518,4328=>572,4329=>518,4330=>555,4331=>518,4332=>559,4333=>509, +4334=>572,4335=>677,4336=>523,4337=>517,4338=>595,4339=>480,4340=>519,4341=>484,4342=>838,4343=>517, +4344=>516,4345=>621,4346=>522,4347=>450,4348=>389,5024=>718,5025=>768,5026=>633,5027=>878,5028=>1001, +5029=>371,5030=>576,5031=>754,5032=>531,5033=>774,5034=>692,5035=>499,5036=>668,5037=>829,5038=>575, +5039=>681,5040=>485,5041=>607,5042=>885,5043=>974,5044=>588,5045=>583,5046=>726,5047=>947,5048=>558, +5049=>832,5050=>1096,5051=>780,5052=>595,5053=>869,5054=>752,5055=>710,5056=>761,5057=>802,5058=>760, +5059=>656,5060=>655,5061=>982,5062=>684,5063=>801,5064=>805,5065=>1042,5066=>755,5067=>612,5068=>707, +5069=>889,5070=>584,5071=>623,5072=>536,5073=>763,5074=>763,5075=>581,5076=>1052,5077=>600,5078=>730, +5079=>714,5080=>714,5081=>697,5082=>543,5083=>943,5084=>718,5085=>630,5086=>660,5087=>692,5088=>841, +5089=>861,5090=>617,5091=>733,5092=>898,5093=>896,5094=>781,5095=>612,5096=>830,5097=>948,5098=>886, +5099=>757,5100=>796,5101=>578,5102=>601,5103=>797,5104=>623,5105=>886,5106=>730,5107=>827,5108=>648, +7680=>722,7681=>500,7682=>667,7683=>546,7684=>667,7685=>546,7686=>667,7687=>546,7688=>722,7689=>444, +7690=>724,7691=>556,7692=>724,7693=>556,7694=>724,7695=>556,7696=>724,7697=>556,7698=>724,7699=>556, +7700=>667,7701=>444,7702=>667,7703=>444,7704=>667,7705=>444,7706=>667,7707=>444,7708=>667,7709=>444, +7710=>611,7711=>333,7712=>778,7713=>500,7714=>774,7715=>556,7716=>774,7717=>556,7718=>774,7719=>556, +7720=>774,7721=>556,7722=>774,7723=>556,7724=>386,7725=>278,7726=>389,7727=>278,7728=>764,7729=>556, +7730=>764,7731=>556,7732=>764,7733=>556,7734=>664,7735=>278,7736=>664,7737=>278,7738=>664,7739=>278, +7740=>664,7741=>278,7742=>943,7743=>833,7744=>943,7745=>833,7746=>943,7747=>833,7748=>722,7749=>556, +7750=>722,7751=>556,7752=>722,7753=>556,7754=>722,7755=>556,7756=>778,7757=>500,7758=>778,7759=>500, +7760=>778,7761=>500,7762=>778,7763=>500,7764=>611,7765=>549,7766=>611,7767=>549,7768=>712,7769=>444, +7770=>712,7771=>444,7772=>712,7773=>444,7774=>712,7775=>444,7776=>556,7777=>389,7778=>556,7779=>389, +7780=>556,7781=>389,7782=>556,7783=>389,7784=>556,7785=>389,7786=>667,7787=>333,7788=>667,7789=>333, +7790=>667,7791=>333,7792=>667,7793=>333,7794=>722,7795=>556,7796=>722,7797=>556,7798=>722,7799=>556, +7800=>722,7801=>556,7802=>722,7803=>556,7804=>722,7805=>500,7806=>722,7807=>500,7808=>1000,7809=>722, +7810=>1000,7811=>722,7812=>1000,7813=>722,7814=>1000,7815=>722,7816=>1000,7817=>722,7818=>722,7819=>500, +7820=>722,7821=>500,7822=>722,7823=>500,7824=>667,7825=>444,7826=>667,7827=>444,7828=>667,7829=>444, +7830=>556,7831=>333,7832=>722,7833=>500,7834=>507,7835=>333,7836=>333,7837=>333,7838=>792,7839=>534, +7840=>722,7841=>500,7842=>722,7843=>500,7844=>722,7845=>500,7846=>722,7847=>500,7848=>722,7849=>500, +7850=>722,7851=>500,7852=>722,7853=>500,7854=>722,7855=>500,7856=>722,7857=>500,7858=>722,7859=>603, +7860=>722,7861=>500,7862=>722,7863=>500,7864=>667,7865=>444,7866=>667,7867=>444,7868=>667,7869=>444, +7870=>667,7871=>444,7872=>667,7873=>444,7874=>667,7875=>444,7876=>667,7877=>444,7878=>667,7879=>444, +7880=>386,7881=>278,7882=>386,7883=>278,7884=>778,7885=>500,7886=>778,7887=>500,7888=>778,7889=>500, +7890=>778,7891=>500,7892=>778,7893=>500,7894=>778,7895=>500,7896=>778,7897=>500,7898=>774,7899=>584, +7900=>774,7901=>584,7902=>774,7903=>549,7904=>793,7905=>584,7906=>793,7907=>584,7908=>722,7909=>556, +7910=>722,7911=>556,7912=>838,7913=>672,7914=>838,7915=>672,7916=>825,7917=>659,7918=>768,7919=>620, +7920=>768,7921=>620,7922=>722,7923=>500,7924=>722,7925=>500,7926=>722,7927=>500,7928=>722,7929=>500, +7936=>605,7937=>605,7938=>605,7939=>605,7940=>605,7941=>605,7942=>605,7943=>605,7944=>722,7945=>722, +7946=>830,7947=>833,7948=>761,7949=>798,7950=>721,7951=>722,7952=>440,7953=>440,7954=>440,7955=>440, +7956=>440,7957=>440,7960=>817,7961=>826,7962=>944,7963=>970,7964=>964,7965=>1009,7968=>605,7969=>605, +7970=>605,7971=>605,7972=>605,7973=>605,7974=>605,7975=>605,7976=>926,7977=>921,7978=>1038,7979=>1064, +7980=>1092,7981=>1102,7982=>1005,7983=>991,7984=>330,7985=>330,7986=>330,7987=>330,7988=>330,7989=>330, +7990=>330,7991=>330,7992=>534,7993=>541,7994=>653,7995=>659,7996=>705,7997=>714,7998=>612,7999=>614, +8000=>550,8001=>550,8002=>550,8003=>550,8004=>550,8005=>550,8008=>885,8009=>886,8010=>1038,8011=>1052, +8012=>997,8013=>1021,8016=>550,8017=>550,8018=>550,8019=>550,8020=>550,8021=>550,8022=>550,8023=>550, +8025=>870,8027=>1014,8029=>1043,8031=>944,8032=>715,8033=>715,8034=>715,8035=>715,8036=>715,8037=>715, +8038=>715,8039=>715,8040=>905,8041=>913,8042=>1066,8043=>1085,8044=>1034,8045=>1044,8046=>980,8047=>961, +8048=>605,8049=>605,8050=>440,8051=>440,8052=>605,8053=>605,8054=>330,8055=>330,8056=>550,8057=>550, +8058=>550,8059=>550,8060=>715,8061=>715,8064=>605,8065=>605,8066=>605,8067=>605,8068=>605,8069=>605, +8070=>605,8071=>605,8072=>886,8073=>887,8074=>985,8075=>993,8076=>937,8077=>956,8078=>874,8079=>878, +8080=>605,8081=>605,8082=>605,8083=>605,8084=>605,8085=>605,8086=>605,8087=>605,8088=>1096,8089=>1092, +8090=>1223,8091=>1250,8092=>1270,8093=>1283,8094=>1174,8095=>1162,8096=>715,8097=>715,8098=>715,8099=>715, +8100=>715,8101=>715,8102=>715,8103=>715,8104=>1057,8105=>1073,8106=>1228,8107=>1251,8108=>1202,8109=>1210, +8110=>1151,8111=>1131,8112=>605,8113=>605,8114=>605,8115=>605,8116=>605,8118=>605,8119=>605,8120=>722, +8121=>722,8122=>722,8123=>722,8124=>883,8125=>500,8126=>0,8127=>500,8128=>500,8129=>550,8130=>605, +8131=>605,8132=>605,8134=>605,8135=>605,8136=>790,8137=>830,8138=>909,8139=>931,8140=>950,8141=>500, +8142=>500,8143=>500,8144=>330,8145=>330,8146=>330,8147=>330,8150=>330,8151=>330,8152=>386,8153=>386, +8154=>506,8155=>550,8157=>500,8158=>500,8159=>500,8160=>550,8161=>550,8162=>550,8163=>550,8164=>550, +8165=>550,8166=>550,8167=>550,8168=>738,8169=>738,8170=>858,8171=>880,8172=>764,8173=>550,8174=>550, +8175=>500,8178=>715,8179=>715,8180=>715,8182=>715,8183=>715,8184=>884,8185=>857,8186=>927,8187=>892, +8188=>988,8189=>500,8190=>500,8192=>500,8193=>1000,8194=>500,8195=>1000,8196=>333,8197=>250,8198=>167, +8199=>500,8200=>250,8201=>200,8202=>100,8203=>0,8204=>0,8205=>0,8206=>0,8207=>0,8208=>333, +8209=>333,8210=>500,8213=>1000,8214=>333,8215=>478,8219=>250,8223=>500,8227=>560,8228=>250,8229=>500, +8231=>250,8232=>0,8233=>0,8234=>0,8235=>0,8236=>0,8237=>0,8238=>0,8239=>250,8241=>1588, +8242=>270,8243=>492,8244=>714,8245=>270,8246=>484,8247=>693,8248=>469,8251=>727,8252=>666,8253=>695, +8254=>500,8255=>953,8256=>953,8257=>338,8258=>931,8259=>333,8260=>167,8261=>332,8262=>332,8263=>1000, +8264=>833,8265=>833,8266=>500,8267=>540,8268=>528,8269=>523,8270=>500,8271=>333,8272=>953,8273=>500, +8274=>497,8275=>576,8276=>953,8277=>785,8278=>450,8279=>881,8280=>620,8281=>620,8282=>179,8283=>621, +8284=>569,8285=>179,8286=>179,8287=>111,8288=>0,8289=>0,8290=>0,8291=>0,8292=>0,8304=>300, +8305=>185,8308=>300,8309=>300,8310=>300,8311=>300,8312=>300,8313=>300,8314=>300,8315=>300,8316=>300, +8317=>216,8318=>216,8319=>325,8320=>300,8321=>274,8322=>300,8323=>300,8324=>300,8325=>300,8326=>300, +8327=>300,8328=>300,8329=>300,8330=>300,8331=>300,8332=>300,8333=>216,8334=>216,8336=>344,8337=>304, +8338=>340,8339=>337,8340=>308,8352=>710,8353=>722,8354=>783,8355=>611,8356=>500,8357=>833,8358=>722, +8359=>960,8360=>1101,8361=>1000,8362=>889,8363=>532,8365=>742,8366=>631,8367=>1435,8368=>579,8369=>609, +8370=>639,8371=>660,8372=>556,8373=>500,8376=>524,8400=>0,8401=>0,8406=>0,8407=>0,8411=>0, +8412=>0,8413=>0,8414=>0,8415=>0,8416=>0,8417=>0,8421=>0,8423=>0,8424=>0,8426=>0, +8427=>0,8428=>0,8429=>0,8430=>0,8431=>0,8448=>624,8449=>625,8451=>1009,8453=>623,8454=>737, +8455=>631,8456=>709,8457=>923,8458=>500,8459=>1035,8462=>556,8463=>556,8464=>792,8465=>737,8466=>800, +8467=>427,8468=>835,8470=>896,8471=>855,8472=>666,8475=>747,8476=>955,8478=>722,8479=>722,8480=>991, +8481=>1186,8483=>722,8486=>811,8487=>811,8489=>333,8490=>764,8491=>722,8492=>806,8494=>551,8495=>444, +8497=>723,8498=>611,8499=>1203,8501=>593,8502=>498,8503=>339,8504=>523,8506=>906,8507=>1181,8523=>778, +8525=>1028,8526=>408,8531=>750,8532=>750,8533=>750,8534=>750,8535=>750,8536=>750,8537=>750,8538=>750, +8539=>750,8540=>750,8541=>750,8542=>750,8543=>750,8544=>386,8545=>760,8546=>1138,8547=>1098,8548=>722, +8549=>1098,8550=>1474,8551=>1850,8552=>1096,8553=>722,8554=>1095,8555=>1472,8556=>664,8557=>722,8558=>724, +8559=>943,8560=>278,8561=>545,8562=>812,8563=>758,8564=>500,8565=>769,8566=>1036,8567=>1298,8568=>768, +8569=>500,8570=>768,8571=>1034,8572=>278,8573=>444,8574=>556,8575=>833,8592=>964,8593=>523,8594=>964, +8595=>523,8596=>964,8597=>964,8598=>964,8599=>964,8600=>964,8601=>964,8602=>964,8603=>964,8604=>1152, +8605=>1152,8606=>964,8607=>964,8608=>964,8609=>964,8610=>1078,8611=>1078,8612=>964,8613=>964,8614=>964, +8615=>964,8616=>964,8617=>964,8618=>964,8619=>964,8620=>964,8621=>1168,8622=>964,8624=>622,8625=>622, +8630=>1069,8631=>1069,8632=>964,8633=>964,8634=>980,8635=>980,8636=>964,8637=>964,8638=>557,8639=>556, +8640=>964,8641=>964,8642=>557,8643=>556,8644=>964,8645=>964,8646=>964,8647=>964,8648=>964,8649=>964, +8650=>964,8651=>964,8652=>964,8653=>964,8654=>964,8655=>964,8656=>964,8657=>630,8658=>964,8659=>630, +8660=>964,8661=>630,8662=>1063,8663=>1063,8664=>1063,8665=>1063,8666=>964,8667=>964,8668=>1100,8669=>1100, +8672=>964,8674=>964,8676=>964,8677=>964,8704=>627,8705=>716,8706=>558,8707=>627,8708=>627,8709=>746, +8710=>612,8711=>719,8713=>576,8714=>576,8716=>576,8717=>576,8720=>733,8721=>713,8722=>676,8723=>676, +8724=>676,8725=>750,8727=>570,8729=>570,8730=>549,8733=>676,8734=>752,8736=>555,8737=>555,8738=>555, +8739=>240,8740=>531,8741=>478,8742=>705,8743=>694,8744=>694,8745=>694,8746=>694,8747=>323,8756=>629, +8757=>629,8761=>947,8764=>676,8765=>676,8766=>763,8768=>305,8769=>676,8770=>676,8771=>676,8773=>676, +8776=>676,8777=>676,8778=>676,8781=>676,8782=>676,8783=>676,8784=>676,8785=>676,8786=>676,8787=>676, +8788=>947,8789=>947,8790=>676,8791=>676,8796=>676,8800=>570,8801=>676,8802=>676,8804=>570,8805=>570, +8806=>676,8807=>676,8808=>676,8809=>676,8810=>1047,8811=>1047,8812=>450,8813=>676,8814=>676,8815=>676, +8816=>676,8817=>676,8818=>676,8819=>676,8820=>676,8821=>676,8822=>676,8823=>676,8824=>676,8825=>676, +8826=>676,8827=>676,8828=>676,8829=>676,8830=>676,8831=>676,8832=>676,8833=>676,8834=>676,8835=>676, +8836=>676,8837=>676,8838=>676,8839=>676,8840=>676,8841=>676,8842=>676,8843=>676,8846=>694,8847=>676, +8848=>676,8849=>676,8850=>676,8851=>694,8852=>694,8853=>738,8854=>738,8855=>738,8856=>738,8857=>738, +8858=>738,8859=>738,8861=>738,8862=>678,8863=>678,8864=>678,8865=>678,8866=>487,8867=>487,8868=>752, +8869=>752,8871=>487,8873=>659,8874=>831,8876=>487,8877=>487,8878=>659,8879=>659,8882=>676,8883=>676, +8884=>676,8885=>676,8886=>1380,8887=>1380,8888=>1027,8890=>626,8891=>694,8892=>694,8893=>694,8900=>512, +8903=>676,8904=>759,8905=>632,8906=>632,8907=>1000,8908=>1000,8909=>676,8910=>694,8911=>694,8912=>676, +8913=>676,8914=>694,8915=>694,8916=>694,8918=>676,8919=>676,8920=>1441,8921=>1441,8922=>676,8923=>676, +8924=>676,8925=>676,8926=>676,8927=>676,8928=>676,8929=>676,8930=>676,8931=>676,8934=>676,8935=>676, +8936=>676,8937=>676,8938=>676,8939=>676,8940=>676,8941=>676,8960=>737,8968=>411,8969=>411,8970=>411, +8971=>411,8976=>680,8994=>951,8995=>951,9001=>398,9002=>398,9251=>500,9472=>1000,9473=>1000,9474=>1000, +9475=>1000,9476=>1000,9477=>1000,9478=>1000,9479=>1000,9480=>1000,9481=>1000,9482=>1000,9483=>1000,9484=>1000, +9485=>1000,9486=>1000,9487=>1000,9488=>1000,9489=>1000,9490=>1000,9491=>1000,9492=>1000,9493=>1000,9494=>1000, +9495=>1000,9496=>1000,9497=>1000,9498=>1000,9499=>1000,9500=>1000,9501=>1000,9502=>1000,9503=>1000,9504=>1000, +9505=>1000,9506=>1000,9507=>1000,9508=>1000,9509=>1000,9510=>1000,9511=>1000,9512=>1000,9513=>1000,9514=>1000, +9515=>1000,9516=>1000,9517=>1000,9518=>1000,9519=>1000,9520=>1000,9521=>1000,9522=>1000,9523=>1000,9524=>1000, +9525=>1000,9526=>1000,9527=>1000,9528=>1000,9529=>1000,9530=>1000,9531=>1000,9532=>1000,9533=>1000,9534=>1000, +9535=>1000,9536=>1000,9537=>1000,9538=>1000,9539=>1000,9540=>1000,9541=>1000,9542=>1000,9543=>1000,9544=>1000, +9545=>1000,9546=>1000,9547=>1000,9552=>1000,9553=>1000,9554=>1000,9555=>1000,9556=>1000,9557=>1000,9558=>1000, +9559=>1000,9560=>1000,9561=>1000,9562=>1000,9563=>1000,9564=>1000,9565=>1000,9566=>1000,9567=>1000,9568=>1000, +9569=>1000,9570=>1000,9571=>1000,9572=>1000,9573=>1000,9574=>1000,9575=>1000,9576=>1000,9577=>1000,9578=>1000, +9579=>1000,9580=>1000,9600=>1000,9601=>1000,9602=>1000,9603=>1000,9604=>1000,9605=>1000,9606=>1000,9607=>1000, +9608=>1000,9609=>1000,9610=>1000,9611=>1000,9612=>1000,9613=>1000,9614=>1000,9615=>1000,9616=>1000,9617=>1000, +9618=>1000,9619=>1000,9620=>1000,9621=>1000,9622=>1000,9623=>1000,9624=>1000,9625=>1000,9626=>1000,9627=>1000, +9628=>1000,9629=>1000,9630=>1000,9631=>1000,9632=>678,9633=>678,9642=>309,9650=>681,9651=>681,9654=>681, +9655=>681,9660=>681,9661=>681,9664=>681,9665=>681,9670=>580,9671=>580,9674=>494,9675=>738,9676=>732, +9679=>738,9702=>524,9711=>855,9733=>1003,9734=>1003,9824=>618,9825=>645,9826=>587,9827=>582,9828=>582, +9829=>645,9830=>587,9831=>618,9833=>333,9834=>556,9835=>778,9836=>778,9837=>556,9838=>556,9839=>556, +10214=>561,10215=>561,11392=>760,11393=>568,11394=>545,11395=>444,11396=>598,11397=>433,11398=>1039,11399=>760, +11400=>681,11401=>502,11402=>572,11403=>405,11404=>583,11405=>463,11406=>698,11407=>529,11408=>754,11409=>555, +11410=>338,11411=>258,11412=>688,11413=>524,11414=>700,11415=>521,11416=>799,11417=>609,11418=>708,11419=>537, +11420=>546,11421=>411,11422=>778,11423=>541,11424=>724,11425=>524,11426=>545,11427=>446,11428=>676,11429=>498, +11430=>615,11431=>433,11432=>759,11433=>589,11434=>800,11435=>670,11436=>669,11437=>512,11438=>801,11439=>609, +11440=>1003,11441=>743,11517=>266,11518=>617,11519=>307,11799=>333,42790=>774,42791=>551,42792=>964,42793=>754, +42794=>652,42795=>452,42796=>478,42797=>422,42798=>662,42799=>612,42888=>333,42889=>278,42890=>282,42891=>349, +42892=>278,64256=>613,64257=>559,64258=>559,64259=>846,64260=>836,64261=>603,64262=>723,64275=>1105,64276=>1105, +64277=>1099,64278=>1105,64279=>1361,64285=>266,64286=>0,64287=>532,64288=>552,64297=>570,64298=>716,64299=>716, +64300=>716,64301=>716,64302=>593,64303=>593,64304=>593,64305=>498,64306=>339,64307=>523,64308=>561,64309=>266, +64310=>291,64312=>576,64313=>266,64314=>496,64315=>501,64316=>510,64318=>581,64320=>347,64321=>512,64323=>493, +64324=>491,64326=>561,64327=>544,64328=>502,64329=>716,64330=>571,64331=>266,64332=>498,64333=>501,64334=>491, +64335=>593,65533=>900); +$enc=''; +$diff=''; +$file='freeserifb.z'; +$ctg='freeserifb.ctg.z'; +$originalsize=615292; +// --- EOF --- --- /dev/null +++ b/tcpdf/fonts/freeserifbi.php @@ -1,1 +1,262 @@ - +900,'Descent'=>-300,'CapHeight'=>-24,'Flags'=>96,'FontBBox'=>'[-831 -1120 1678 1571]','ItalicAngle'=>-16.3,'StemV'=>120,'MissingWidth'=>600); +$up=-125; +$ut=50; +$dw=600; +$cw=array( +32=>250,33=>389,34=>555,35=>500,36=>500,37=>833,38=>778,39=>278,40=>333,41=>333, +42=>500,43=>570,44=>250,45=>333,46=>250,47=>278,48=>500,49=>500,50=>500,51=>500, +52=>500,53=>500,54=>500,55=>500,56=>500,57=>500,58=>333,59=>333,60=>570,61=>570, +62=>570,63=>500,64=>832,65=>667,66=>667,67=>667,68=>744,69=>670,70=>656,71=>722, +72=>778,73=>393,74=>500,75=>664,76=>609,77=>896,78=>722,79=>722,80=>614,81=>722, +82=>672,83=>556,84=>611,85=>722,86=>667,87=>889,88=>667,89=>611,90=>611,91=>333, +92=>278,93=>333,94=>570,95=>500,96=>333,97=>500,98=>500,99=>444,100=>500,101=>444, +102=>333,103=>500,104=>556,105=>278,106=>278,107=>500,108=>278,109=>778,110=>556,111=>500, +112=>500,113=>500,114=>389,115=>389,116=>278,117=>556,118=>444,119=>667,120=>500,121=>444, +122=>389,123=>348,124=>220,125=>348,126=>570,8364=>761,8218=>250,402=>333,8222=>500,8230=>1000, +8224=>500,8225=>500,710=>333,8240=>1000,352=>556,8249=>333,338=>944,381=>611,8216=>250,8217=>250, +8220=>500,8221=>500,8226=>350,8211=>500,8212=>1000,732=>333,8482=>1086,353=>389,8250=>333,339=>711, +382=>389,376=>611,160=>250,161=>389,162=>500,163=>500,164=>500,165=>500,166=>220,167=>500, +168=>333,169=>747,170=>266,171=>500,172=>606,173=>333,174=>747,175=>333,176=>400,177=>570, +178=>300,179=>300,180=>333,181=>576,182=>500,183=>250,184=>333,185=>272,186=>300,187=>500, +188=>750,189=>750,190=>750,191=>500,192=>667,193=>667,194=>667,195=>667,196=>667,197=>667, +198=>944,199=>667,200=>667,201=>667,202=>667,203=>667,204=>389,205=>389,206=>389,207=>389, +208=>722,209=>722,210=>722,211=>722,212=>722,213=>722,214=>722,215=>570,216=>722,217=>722, +218=>722,219=>722,220=>722,221=>611,222=>609,223=>500,224=>500,225=>500,226=>500,227=>500, +228=>500,229=>500,230=>703,231=>444,232=>444,233=>444,234=>444,235=>444,236=>278,237=>278, +238=>278,239=>278,240=>500,241=>556,242=>500,243=>500,244=>500,245=>500,246=>500,247=>570, +248=>500,249=>556,250=>556,251=>556,252=>556,253=>444,254=>500,255=>444,256=>667,257=>500, +258=>667,259=>500,260=>667,261=>500,262=>667,263=>444,264=>667,265=>444,266=>667,267=>444, +268=>667,269=>444,270=>722,271=>609,272=>722,273=>500,274=>667,275=>444,276=>667,277=>444, +278=>667,279=>444,280=>667,281=>444,282=>667,283=>444,284=>722,285=>500,286=>722,287=>500, +288=>722,289=>500,290=>722,291=>500,292=>778,293=>556,294=>778,295=>556,296=>389,297=>278, +298=>389,299=>278,300=>389,301=>278,302=>389,303=>278,304=>389,305=>278,306=>834,307=>545, +308=>500,309=>278,310=>667,311=>500,312=>534,313=>611,314=>278,315=>611,316=>278,317=>638, +318=>382,319=>611,320=>424,321=>611,322=>278,323=>722,324=>556,325=>722,326=>556,327=>722, +328=>556,329=>646,330=>829,331=>547,332=>722,333=>500,334=>722,335=>500,336=>722,337=>500, +340=>667,341=>389,342=>667,343=>389,344=>667,345=>389,346=>556,347=>389,348=>556,349=>389, +350=>556,351=>389,354=>611,355=>278,356=>611,357=>426,358=>611,359=>278,360=>722,361=>556, +362=>722,363=>556,364=>722,365=>556,366=>722,367=>556,368=>722,369=>556,370=>722,371=>556, +372=>889,373=>667,374=>611,375=>444,377=>611,378=>389,379=>611,380=>389,383=>333,384=>500, +385=>850,386=>667,387=>575,388=>630,389=>500,390=>722,391=>929,392=>654,393=>722,394=>864, +395=>684,396=>500,397=>546,398=>670,399=>722,400=>631,401=>769,403=>929,404=>716,405=>745, +406=>278,407=>389,408=>829,409=>500,410=>278,411=>495,412=>853,413=>919,414=>556,415=>722, +416=>868,417=>603,418=>1014,419=>778,420=>757,421=>500,422=>611,423=>556,424=>389,425=>730, +426=>455,427=>349,428=>611,429=>298,430=>611,431=>879,432=>704,433=>811,434=>678,435=>611, +436=>581,437=>611,438=>389,439=>619,440=>614,441=>461,442=>445,443=>500,444=>614,445=>500, +446=>389,447=>504,448=>220,449=>418,450=>570,451=>333,452=>1355,453=>1133,454=>889,455=>1109, +456=>887,457=>556,458=>1152,459=>1000,460=>834,461=>667,462=>500,463=>393,464=>278,465=>722, +466=>500,467=>722,468=>556,469=>722,470=>556,471=>722,472=>556,473=>722,474=>556,475=>722, +476=>556,477=>444,478=>667,479=>500,480=>667,481=>500,482=>944,483=>703,484=>722,485=>500, +486=>722,487=>500,488=>664,489=>500,490=>722,491=>500,492=>722,493=>500,494=>619,495=>513, +496=>278,497=>1355,498=>1133,499=>889,500=>722,501=>500,502=>944,503=>660,504=>722,505=>556, +506=>667,507=>500,508=>944,509=>703,510=>722,511=>500,512=>667,513=>500,514=>667,515=>500, +516=>670,517=>444,518=>670,519=>444,520=>393,521=>278,522=>393,523=>278,524=>722,525=>500, +526=>722,527=>500,528=>672,529=>389,530=>672,531=>389,532=>722,533=>556,534=>722,535=>556, +536=>556,537=>389,538=>611,539=>278,540=>424,541=>455,542=>778,543=>556,544=>731,545=>618, +546=>568,547=>500,548=>667,549=>444,550=>667,551=>500,552=>670,553=>444,554=>722,555=>500, +556=>722,557=>500,558=>722,559=>500,560=>722,561=>500,562=>611,563=>444,564=>422,565=>621, +566=>413,567=>278,568=>800,569=>784,570=>644,571=>667,572=>444,573=>664,574=>611,575=>389, +576=>451,577=>444,578=>444,579=>667,580=>722,581=>722,582=>670,583=>444,584=>500,585=>278, +586=>808,587=>608,588=>672,589=>389,590=>611,591=>444,592=>500,593=>590,594=>590,595=>510, +596=>444,598=>516,599=>552,600=>444,601=>444,603=>430,604=>440,606=>440,607=>278,608=>569, +609=>500,610=>504,612=>582,613=>556,614=>556,615=>556,616=>288,617=>320,618=>278,619=>278, +621=>516,622=>559,623=>778,624=>778,625=>778,626=>556,627=>556,628=>500,629=>500,630=>732, +631=>715,632=>667,633=>389,634=>389,635=>495,636=>389,637=>389,638=>394,639=>394,640=>556, +641=>556,642=>389,643=>333,644=>333,645=>433,647=>333,648=>278,649=>500,650=>557,651=>492, +652=>444,653=>667,654=>444,655=>406,656=>604,658=>513,660=>500,661=>500,662=>500,663=>444, +664=>778,665=>445,667=>700,668=>542,670=>500,671=>429,672=>560,673=>500,675=>752,676=>807, +678=>609,679=>510,681=>815,682=>606,683=>525,684=>490,686=>556,687=>556,688=>396,689=>397, +690=>172,691=>243,692=>267,693=>341,694=>368,695=>440,696=>300,697=>250,698=>408,699=>250, +700=>250,701=>250,702=>300,703=>300,704=>340,705=>340,706=>333,707=>333,708=>333,709=>333, +711=>333,712=>333,713=>333,714=>333,715=>333,716=>300,717=>333,718=>333,719=>333,720=>278, +721=>278,722=>300,723=>300,724=>333,725=>333,726=>333,727=>333,728=>333,729=>333,730=>333, +731=>333,733=>333,734=>333,735=>352,736=>374,737=>227,738=>264,739=>340,740=>340,741=>526, +742=>526,743=>526,744=>526,745=>526,746=>519,747=>519,748=>333,749=>333,750=>480,751=>333, +752=>333,753=>333,754=>333,755=>327,756=>261,757=>437,758=>437,759=>400,760=>278,761=>175, +762=>175,763=>175,764=>175,765=>0,766=>337,767=>432,768=>0,769=>0,770=>0,771=>0, +772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0, +782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0, +792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0, +802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0, +812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0, +822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0, +832=>0,833=>0,834=>0,835=>0,836=>0,837=>0,838=>0,839=>0,840=>0,841=>0, +842=>0,843=>0,844=>0,845=>0,846=>0,847=>0,848=>0,849=>0,850=>0,851=>0, +852=>0,853=>0,854=>0,855=>0,856=>0,857=>0,858=>0,859=>0,860=>0,861=>0, +862=>0,863=>0,864=>0,865=>0,884=>199,885=>199,890=>0,894=>333,900=>330,901=>333, +902=>667,903=>250,904=>819,905=>955,906=>539,908=>835,910=>961,911=>889,912=>320,913=>667, +914=>667,915=>637,916=>740,917=>667,918=>611,919=>778,920=>722,921=>389,922=>677,923=>667, +924=>889,925=>722,926=>650,927=>722,928=>778,929=>611,931=>730,932=>621,933=>722,934=>748, +935=>667,936=>858,937=>741,938=>389,939=>722,940=>590,941=>430,942=>548,943=>320,944=>536, +945=>590,946=>536,947=>548,948=>550,949=>430,950=>482,951=>548,952=>525,953=>320,954=>564, +955=>510,956=>589,957=>522,958=>482,959=>536,960=>629,961=>536,962=>470,963=>536,964=>464, +965=>536,966=>643,967=>482,968=>715,969=>715,970=>320,971=>536,972=>536,973=>536,974=>715, +976=>508,977=>589,978=>722,979=>931,980=>722,981=>660,982=>715,983=>536,984=>611,985=>536, +986=>620,987=>524,988=>667,989=>535,990=>708,991=>428,992=>671,993=>633,1008=>550,1009=>550, +1010=>477,1011=>278,1012=>722,1013=>411,1014=>411,1015=>609,1016=>500,1017=>667,1018=>896,1019=>769, +1020=>536,1021=>667,1022=>667,1023=>667,1024=>670,1025=>670,1026=>762,1027=>637,1028=>667,1029=>556, +1030=>393,1031=>393,1032=>500,1033=>1085,1034=>1049,1035=>747,1036=>736,1037=>778,1038=>746,1039=>778, +1040=>667,1041=>667,1042=>667,1043=>637,1044=>778,1045=>670,1046=>1044,1047=>650,1048=>778,1049=>778, +1050=>736,1051=>814,1052=>896,1053=>778,1054=>722,1055=>778,1056=>614,1057=>667,1058=>611,1059=>746, +1060=>748,1061=>667,1062=>778,1063=>742,1064=>1136,1065=>1135,1066=>779,1067=>984,1068=>664,1069=>732, +1070=>1069,1071=>779,1072=>500,1073=>508,1074=>486,1075=>414,1076=>486,1077=>444,1078=>982,1079=>476, +1080=>556,1081=>556,1082=>564,1083=>585,1084=>757,1085=>552,1086=>500,1087=>556,1088=>500,1089=>444, +1090=>778,1091=>532,1092=>764,1093=>500,1094=>556,1095=>556,1096=>806,1097=>806,1098=>644,1099=>744, +1100=>470,1101=>488,1102=>757,1103=>586,1104=>444,1105=>444,1106=>524,1107=>414,1108=>488,1109=>389, +1110=>278,1111=>278,1112=>278,1113=>772,1114=>745,1115=>556,1116=>564,1117=>556,1118=>532,1119=>556, +1120=>990,1121=>690,1122=>804,1123=>751,1124=>1017,1125=>752,1126=>900,1127=>728,1128=>1236,1129=>927, +1130=>1044,1131=>826,1132=>1401,1133=>1016,1134=>620,1135=>476,1136=>858,1137=>769,1138=>722,1139=>544, +1140=>796,1141=>584,1142=>796,1143=>584,1144=>1268,1145=>1023,1146=>895,1147=>612,1148=>990,1149=>690, +1150=>990,1151=>635,1152=>620,1153=>444,1154=>372,1155=>0,1156=>0,1157=>0,1158=>0,1159=>0, +1160=>0,1161=>0,1162=>778,1163=>556,1164=>664,1165=>470,1166=>614,1167=>473,1168=>624,1169=>448, +1170=>624,1171=>448,1172=>733,1173=>485,1174=>1080,1175=>982,1176=>650,1177=>476,1178=>772,1179=>564, +1180=>772,1181=>590,1182=>738,1183=>499,1184=>862,1185=>718,1186=>778,1187=>552,1188=>976,1189=>682, +1190=>1085,1191=>787,1192=>667,1193=>480,1194=>667,1195=>444,1196=>534,1197=>778,1198=>611,1199=>640, +1200=>611,1201=>640,1202=>694,1203=>500,1204=>1004,1205=>518,1206=>742,1207=>556,1208=>742,1209=>556, +1210=>716,1211=>556,1212=>844,1213=>530,1214=>844,1215=>530,1216=>393,1217=>1044,1218=>982,1219=>736, +1220=>534,1221=>814,1222=>585,1223=>778,1224=>552,1225=>778,1226=>552,1227=>742,1228=>556,1229=>896, +1230=>757,1231=>393,1232=>667,1233=>500,1234=>667,1235=>500,1236=>891,1237=>646,1238=>670,1239=>444, +1240=>659,1241=>372,1242=>619,1243=>372,1244=>1044,1245=>994,1246=>650,1247=>476,1248=>604,1249=>459, +1250=>778,1251=>539,1252=>778,1253=>539,1254=>722,1255=>500,1256=>722,1257=>500,1258=>722,1259=>500, +1260=>732,1261=>488,1262=>746,1263=>532,1264=>746,1265=>532,1266=>746,1267=>532,1268=>742,1269=>556, +1270=>637,1271=>448,1272=>984,1273=>744,1296=>652,1297=>452,1298=>814,1299=>585,1306=>722,1307=>500, +1308=>889,1309=>656,1310=>736,1311=>564,1329=>889,1330=>787,1331=>858,1332=>941,1333=>775,1334=>765, +1335=>805,1336=>762,1337=>938,1338=>869,1339=>765,1340=>756,1341=>966,1342=>992,1343=>748,1344=>469, +1345=>731,1346=>941,1347=>745,1348=>966,1349=>641,1350=>929,1351=>774,1352=>779,1353=>784,1354=>841, +1355=>775,1356=>955,1357=>779,1358=>927,1359=>555,1360=>763,1361=>641,1362=>656,1363=>824,1364=>869, +1365=>768,1366=>754,1369=>300,1370=>300,1371=>270,1372=>307,1373=>270,1374=>324,1375=>322,1377=>818, +1378=>548,1379=>601,1380=>608,1381=>551,1382=>547,1383=>496,1384=>548,1385=>586,1386=>585,1387=>548, +1388=>269,1389=>798,1390=>594,1391=>544,1392=>548,1393=>513,1394=>583,1395=>560,1396=>551,1397=>397, +1398=>567,1399=>447,1400=>548,1401=>411,1402=>810,1403=>464,1404=>548,1405=>551,1406=>595,1407=>821, +1408=>548,1409=>557,1410=>312,1411=>821,1412=>550,1413=>511,1414=>668,1415=>602,1417=>333,1418=>349, +1425=>0,1426=>0,1427=>0,1428=>0,1429=>0,1430=>0,1431=>0,1432=>0,1433=>0,1434=>0, +1435=>0,1436=>0,1437=>0,1438=>0,1439=>0,1440=>0,1441=>0,1442=>0,1443=>0,1444=>0, +1445=>0,1446=>0,1447=>0,1448=>0,1449=>0,1450=>0,1451=>0,1452=>0,1453=>0,1454=>0, +1455=>0,1456=>0,1457=>0,1458=>0,1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0, +1465=>0,1466=>0,1467=>0,1468=>0,1469=>0,1470=>433,1471=>0,1472=>155,1473=>0,1474=>0, +1475=>400,1476=>0,1477=>0,1478=>347,1479=>0,1488=>593,1489=>498,1490=>339,1491=>523,1492=>561, +1493=>266,1494=>291,1495=>559,1496=>576,1497=>266,1498=>496,1499=>501,1500=>510,1501=>542,1502=>581, +1503=>273,1504=>347,1505=>512,1506=>552,1507=>493,1508=>491,1509=>537,1510=>561,1511=>544,1512=>502, +1513=>716,1514=>571,1520=>532,1521=>532,1522=>532,1523=>396,1524=>432,3585=>590,3586=>578,3587=>661, +3588=>592,3589=>592,3590=>699,3591=>447,3592=>534,3593=>692,3594=>578,3595=>659,3596=>899,3597=>804, +3598=>633,3599=>637,3600=>484,3601=>730,3602=>876,3603=>915,3604=>592,3605=>592,3606=>578,3607=>670, +3608=>542,3609=>671,3610=>621,3611=>618,3612=>621,3613=>617,3614=>708,3615=>708,3616=>637,3617=>589, +3618=>552,3619=>484,3620=>590,3621=>569,3622=>637,3623=>526,3624=>599,3625=>802,3626=>579,3627=>668, +3628=>778,3629=>560,3630=>514,3631=>510,3632=>442,3633=>0,3634=>423,3635=>452,3636=>0,3637=>0, +3638=>0,3639=>0,3640=>0,3641=>0,3642=>0,3647=>665,3648=>357,3649=>624,3650=>529,3651=>486, +3652=>475,3653=>423,3654=>500,3655=>0,3656=>0,3657=>0,3658=>0,3659=>0,3660=>0,3661=>0, +3662=>0,3663=>657,3664=>548,3665=>548,3666=>592,3667=>614,3668=>631,3669=>643,3670=>508,3671=>744, +3672=>622,3673=>585,3674=>721,3675=>1381,4256=>475,4257=>469,4258=>573,4259=>650,4260=>502,4261=>506, +4262=>481,4263=>746,4264=>491,4265=>495,4266=>888,4267=>488,4268=>464,4269=>745,4270=>483,4271=>489, +4272=>721,4273=>464,4274=>578,4275=>590,4276=>611,4277=>491,4278=>663,4279=>489,4280=>544,4281=>479, +4282=>527,4283=>488,4284=>560,4285=>461,4286=>467,4287=>546,4288=>483,4289=>487,4290=>562,4291=>477, +4292=>491,4293=>471,4304=>522,4305=>518,4306=>621,4307=>716,4308=>517,4309=>519,4310=>518,4311=>796, +4312=>518,4313=>518,4314=>934,4315=>517,4316=>519,4317=>787,4318=>515,4319=>514,4320=>788,4321=>573, +4322=>620,4323=>593,4324=>639,4325=>516,4326=>714,4327=>518,4328=>572,4329=>518,4330=>555,4331=>518, +4332=>562,4333=>509,4334=>572,4335=>677,4336=>523,4337=>517,4338=>595,4339=>480,4340=>519,4341=>484, +4342=>838,4343=>517,4344=>516,4345=>621,4346=>522,4347=>410,4348=>389,5024=>718,5025=>768,5026=>633, +5027=>878,5028=>1001,5029=>371,5030=>576,5031=>754,5032=>531,5033=>774,5034=>692,5035=>499,5036=>668, +5037=>829,5038=>575,5039=>681,5040=>485,5041=>607,5042=>885,5043=>974,5044=>588,5045=>583,5046=>726, +5047=>947,5048=>558,5049=>832,5050=>1096,5051=>780,5052=>595,5053=>869,5054=>752,5055=>710,5056=>761, +5057=>802,5058=>760,5059=>656,5060=>655,5061=>982,5062=>684,5063=>801,5064=>805,5065=>1042,5066=>755, +5067=>612,5068=>707,5069=>889,5070=>584,5071=>623,5072=>536,5073=>763,5074=>763,5075=>549,5076=>1052, +5077=>600,5078=>730,5079=>714,5080=>714,5081=>697,5082=>543,5083=>943,5084=>718,5085=>630,5086=>660, +5087=>692,5088=>841,5089=>861,5090=>617,5091=>733,5092=>898,5093=>896,5094=>781,5095=>612,5096=>830, +5097=>948,5098=>886,5099=>757,5100=>796,5101=>578,5102=>601,5103=>797,5104=>623,5105=>886,5106=>730, +5107=>827,5108=>648,7680=>667,7681=>500,7682=>667,7683=>500,7684=>667,7685=>500,7686=>667,7687=>500, +7688=>667,7689=>444,7690=>744,7691=>500,7692=>744,7693=>500,7694=>744,7695=>500,7696=>744,7697=>500, +7698=>744,7699=>500,7700=>667,7701=>444,7702=>667,7703=>444,7704=>670,7705=>444,7706=>670,7707=>444, +7708=>670,7709=>444,7710=>656,7711=>333,7712=>722,7713=>500,7714=>778,7715=>556,7716=>778,7717=>556, +7718=>778,7719=>556,7720=>778,7721=>556,7722=>778,7723=>556,7724=>393,7725=>278,7726=>389,7727=>278, +7728=>664,7729=>500,7730=>664,7731=>500,7732=>664,7733=>500,7734=>609,7735=>278,7736=>609,7737=>278, +7738=>609,7739=>278,7740=>609,7741=>278,7742=>896,7743=>778,7744=>896,7745=>778,7746=>896,7747=>778, +7748=>722,7749=>556,7750=>722,7751=>556,7752=>722,7753=>556,7754=>722,7755=>556,7756=>722,7757=>500, +7758=>722,7759=>500,7760=>722,7761=>500,7762=>722,7763=>500,7764=>614,7765=>500,7766=>614,7767=>500, +7768=>672,7769=>389,7770=>672,7771=>389,7772=>672,7773=>389,7774=>672,7775=>389,7776=>556,7777=>389, +7778=>556,7779=>389,7780=>556,7781=>389,7782=>556,7783=>389,7784=>556,7785=>389,7786=>611,7787=>278, +7788=>611,7789=>278,7790=>611,7791=>278,7792=>611,7793=>278,7794=>722,7795=>556,7796=>722,7797=>556, +7798=>722,7799=>556,7800=>722,7801=>556,7802=>722,7803=>556,7804=>667,7805=>444,7806=>667,7807=>444, +7808=>889,7809=>667,7810=>889,7811=>667,7812=>889,7813=>667,7814=>889,7815=>667,7816=>889,7817=>667, +7818=>667,7819=>500,7820=>667,7821=>500,7822=>611,7823=>444,7824=>611,7825=>389,7826=>611,7827=>389, +7828=>611,7829=>389,7830=>556,7831=>278,7832=>667,7833=>444,7834=>507,7835=>333,7836=>333,7837=>333, +7838=>792,7839=>534,7840=>667,7841=>500,7842=>667,7843=>500,7844=>667,7845=>500,7846=>667,7847=>500, +7848=>667,7849=>500,7850=>667,7851=>500,7852=>667,7853=>500,7854=>667,7855=>500,7856=>667,7857=>500, +7858=>667,7859=>500,7860=>667,7861=>500,7862=>667,7863=>500,7864=>670,7865=>444,7866=>670,7867=>444, +7868=>670,7869=>444,7870=>667,7871=>444,7872=>667,7873=>444,7874=>667,7875=>444,7876=>667,7877=>444, +7878=>670,7879=>444,7880=>393,7881=>278,7882=>393,7883=>278,7884=>722,7885=>500,7886=>722,7887=>500, +7888=>722,7889=>500,7890=>722,7891=>500,7892=>722,7893=>500,7894=>722,7895=>500,7896=>722,7897=>500, +7898=>868,7899=>603,7900=>868,7901=>603,7902=>868,7903=>603,7904=>868,7905=>603,7906=>868,7907=>603, +7908=>722,7909=>556,7910=>722,7911=>556,7912=>879,7913=>704,7914=>879,7915=>704,7916=>879,7917=>704, +7918=>879,7919=>704,7920=>879,7921=>704,7922=>611,7923=>444,7924=>611,7925=>444,7926=>611,7927=>444, +7928=>611,7929=>444,7936=>590,7937=>590,7938=>590,7939=>590,7940=>590,7941=>590,7942=>590,7943=>590, +7944=>724,7945=>753,7946=>891,7947=>912,7948=>822,7949=>853,7950=>796,7951=>787,7952=>430,7953=>430, +7954=>430,7955=>430,7956=>430,7957=>430,7960=>864,7961=>905,7962=>1034,7963=>1038,7964=>1031,7965=>1045, +7968=>548,7969=>548,7970=>548,7971=>548,7972=>548,7973=>548,7974=>548,7975=>548,7976=>976,7977=>1009, +7978=>1132,7979=>1141,7980=>1138,7981=>1154,7982=>1079,7983=>1071,7984=>320,7985=>320,7986=>320,7987=>320, +7988=>320,7989=>320,7990=>320,7991=>320,7992=>593,7993=>620,7994=>746,7995=>762,7996=>742,7997=>773, +7998=>691,7999=>683,8000=>536,8001=>536,8002=>536,8003=>536,8004=>536,8005=>536,8008=>899,8009=>928, +8010=>1086,8011=>1118,8012=>1020,8013=>1028,8016=>536,8017=>536,8018=>536,8019=>536,8020=>536,8021=>536, +8022=>536,8023=>536,8025=>959,8027=>1085,8029=>1108,8031=>1027,8032=>715,8033=>715,8034=>715,8035=>715, +8036=>715,8037=>715,8038=>715,8039=>715,8040=>946,8041=>960,8042=>1133,8043=>1148,8044=>1059,8045=>1081, +8046=>1020,8047=>1016,8048=>590,8049=>590,8050=>430,8051=>430,8052=>548,8053=>548,8054=>320,8055=>320, +8056=>536,8057=>536,8058=>536,8059=>536,8060=>715,8061=>715,8064=>590,8065=>590,8066=>590,8067=>590, +8068=>590,8069=>590,8070=>590,8071=>590,8072=>842,8073=>877,8074=>1011,8075=>1031,8076=>947,8077=>975, +8078=>907,8079=>893,8080=>548,8081=>548,8082=>548,8083=>548,8084=>548,8085=>548,8086=>548,8087=>548, +8088=>1030,8089=>1066,8090=>1188,8091=>1199,8092=>1196,8093=>1211,8094=>1134,8095=>1129,8096=>715,8097=>715, +8098=>715,8099=>715,8100=>715,8101=>715,8102=>715,8103=>715,8104=>1060,8105=>1076,8106=>1264,8107=>1287, +8108=>1179,8109=>1204,8110=>1137,8111=>1135,8112=>590,8113=>590,8114=>590,8115=>590,8116=>590,8118=>590, +8119=>590,8120=>667,8121=>667,8122=>752,8123=>728,8124=>775,8125=>250,8126=>0,8127=>500,8128=>500, +8129=>550,8130=>548,8131=>548,8132=>548,8134=>548,8135=>548,8136=>884,8137=>859,8138=>982,8139=>968, +8140=>839,8141=>500,8142=>500,8143=>500,8144=>320,8145=>320,8146=>320,8147=>320,8150=>320,8151=>320, +8152=>389,8153=>389,8154=>599,8155=>592,8157=>500,8158=>500,8159=>500,8160=>536,8161=>536,8162=>536, +8163=>536,8164=>536,8165=>536,8166=>536,8167=>536,8168=>722,8169=>722,8170=>1007,8171=>932,8172=>842, +8173=>550,8174=>550,8175=>500,8178=>715,8179=>715,8180=>715,8182=>715,8183=>715,8184=>971,8185=>853, +8186=>1004,8187=>875,8188=>862,8189=>500,8190=>500,8192=>500,8193=>1000,8194=>500,8195=>1000,8196=>333, +8197=>250,8198=>167,8199=>500,8200=>250,8201=>200,8202=>100,8203=>0,8204=>0,8205=>0,8206=>0, +8207=>0,8208=>333,8209=>333,8210=>500,8213=>1000,8214=>333,8215=>478,8219=>250,8223=>500,8227=>560, +8228=>250,8229=>478,8231=>0,8232=>0,8233=>0,8234=>0,8235=>0,8236=>0,8237=>0,8238=>250, +8239=>0,8241=>1618,8242=>278,8243=>556,8244=>834,8245=>270,8246=>468,8247=>630,8248=>469,8251=>727, +8252=>778,8253=>733,8254=>500,8255=>953,8256=>953,8257=>338,8258=>931,8259=>333,8260=>167,8261=>332, +8262=>332,8263=>1000,8264=>889,8265=>889,8266=>500,8267=>453,8268=>479,8269=>492,8270=>500,8271=>333, +8272=>953,8273=>500,8274=>521,8275=>576,8276=>953,8277=>785,8278=>410,8279=>881,8280=>620,8281=>620, +8282=>179,8283=>621,8284=>569,8285=>179,8286=>179,8287=>111,8288=>0,8289=>0,8290=>0,8291=>0, +8292=>0,8304=>300,8305=>219,8308=>300,8309=>300,8310=>300,8311=>300,8312=>300,8313=>300,8314=>300, +8315=>300,8316=>300,8317=>216,8318=>216,8319=>362,8320=>300,8321=>274,8322=>300,8323=>300,8324=>300, +8325=>300,8326=>300,8327=>300,8328=>300,8329=>300,8330=>300,8331=>300,8332=>300,8333=>216,8334=>216, +8336=>350,8337=>296,8338=>320,8339=>337,8340=>298,8352=>667,8353=>667,8354=>667,8355=>667,8356=>500, +8357=>742,8358=>722,8359=>1008,8360=>953,8361=>889,8362=>889,8363=>532,8365=>742,8366=>631,8367=>1435, +8368=>579,8369=>609,8370=>639,8371=>742,8372=>576,8373=>500,8376=>524,8400=>0,8401=>0,8406=>0, +8407=>0,8411=>0,8412=>0,8413=>0,8414=>0,8415=>0,8416=>0,8417=>0,8421=>0,8423=>0, +8424=>0,8426=>0,8427=>0,8428=>0,8429=>0,8430=>0,8431=>0,8448=>624,8449=>625,8451=>925, +8453=>623,8454=>737,8455=>631,8456=>709,8457=>867,8458=>500,8459=>1035,8462=>556,8463=>556,8464=>792, +8465=>737,8466=>800,8467=>427,8468=>835,8470=>806,8471=>855,8472=>666,8475=>747,8476=>955,8478=>722, +8479=>722,8480=>991,8481=>1050,8483=>667,8486=>741,8487=>741,8489=>320,8490=>664,8491=>667,8492=>806, +8494=>551,8495=>444,8497=>723,8498=>595,8499=>1203,8501=>537,8502=>537,8503=>350,8504=>537,8506=>942, +8507=>1050,8523=>698,8525=>1028,8526=>396,8531=>750,8532=>750,8533=>750,8534=>750,8535=>750,8536=>750, +8537=>750,8538=>750,8539=>750,8540=>750,8541=>750,8542=>750,8543=>750,8544=>393,8545=>716,8546=>1039, +8547=>1040,8548=>667,8549=>1016,8550=>1334,8551=>1657,8552=>1005,8553=>667,8554=>1024,8555=>1353,8556=>609, +8557=>667,8558=>744,8559=>896,8560=>278,8561=>556,8562=>834,8563=>722,8564=>444,8565=>722,8566=>1000, +8567=>1278,8568=>778,8569=>500,8570=>778,8571=>1056,8572=>278,8573=>444,8574=>500,8575=>778,8592=>964, +8593=>964,8594=>964,8595=>964,8596=>964,8597=>964,8598=>964,8599=>964,8600=>964,8601=>964,8602=>964, +8603=>964,8606=>964,8607=>964,8608=>964,8609=>964,8610=>964,8611=>964,8612=>964,8613=>964,8614=>964, +8615=>964,8616=>964,8632=>964,8633=>964,8636=>964,8637=>964,8638=>964,8639=>964,8640=>964,8641=>964, +8642=>964,8643=>964,8644=>964,8645=>964,8646=>964,8647=>964,8648=>964,8649=>964,8650=>964,8676=>964, +8677=>964,8706=>494,8710=>612,8721=>713,8722=>606,8725=>750,8730=>549,8734=>752,8800=>570,8804=>570, +8805=>570,9251=>500,9674=>494,9675=>738,9676=>732,9711=>855,9824=>618,9825=>645,9826=>587,9827=>582, +9828=>582,9829=>645,9830=>587,9831=>618,9833=>333,9834=>556,9835=>778,9836=>778,9837=>556,9838=>556, +9839=>556,11799=>333,42790=>778,42791=>548,42792=>839,42793=>615,42794=>652,42795=>452,42796=>478,42797=>422, +42798=>675,42799=>627,42888=>333,42889=>278,42890=>282,42891=>349,42892=>278,64256=>602,64257=>572,64258=>569, +64259=>842,64260=>838,64261=>577,64262=>662,64275=>1105,64276=>1105,64277=>1099,64278=>1105,64279=>1361,64285=>266, +64286=>0,64287=>532,64288=>552,64297=>570,64298=>716,64299=>716,64300=>716,64301=>716,64302=>593,64303=>593, +64304=>593,64305=>498,64306=>339,64307=>523,64308=>561,64309=>266,64310=>291,64312=>576,64313=>266,64314=>496, +64315=>501,64316=>510,64318=>581,64320=>347,64321=>512,64323=>493,64324=>491,64326=>561,64327=>544,64328=>502, +64329=>716,64330=>571,64331=>266,64332=>498,64333=>501,64334=>491,64335=>593,65533=>900); +$enc=''; +$diff=''; +$file='freeserifbi.z'; +$ctg='freeserifbi.ctg.z'; +$originalsize=508412; +// --- EOF --- --- /dev/null +++ b/tcpdf/fonts/freeserifi.php @@ -1,1 +1,275 @@ - +900,'Descent'=>-300,'CapHeight'=>-29,'Flags'=>96,'FontBBox'=>'[-879 -434 1558 900]','ItalicAngle'=>-16.5,'StemV'=>70,'MissingWidth'=>600); +$up=-125; +$ut=50; +$dw=600; +$cw=array( +32=>250,33=>333,34=>420,35=>500,36=>500,37=>833,38=>778,39=>214,40=>333,41=>333, +42=>500,43=>675,44=>250,45=>333,46=>250,47=>278,48=>500,49=>500,50=>500,51=>500, +52=>500,53=>500,54=>500,55=>500,56=>500,57=>500,58=>333,59=>333,60=>675,61=>675, +62=>675,63=>500,64=>920,65=>611,66=>611,67=>667,68=>722,69=>604,70=>611,71=>722, +72=>722,73=>339,74=>444,75=>652,76=>556,77=>828,78=>657,79=>722,80=>603,81=>722, +82=>616,83=>500,84=>556,85=>722,86=>611,87=>833,88=>611,89=>556,90=>556,91=>389, +92=>278,93=>389,94=>422,95=>500,96=>333,97=>500,98=>500,99=>444,100=>500,101=>444, +102=>278,103=>500,104=>500,105=>278,106=>278,107=>444,108=>278,109=>722,110=>500,111=>500, +112=>500,113=>500,114=>389,115=>389,116=>278,117=>500,118=>444,119=>667,120=>444,121=>444, +122=>389,123=>400,124=>275,125=>400,126=>541,8364=>741,8218=>250,402=>278,8222=>444,8230=>889, +8224=>500,8225=>500,710=>333,8240=>1000,352=>500,8249=>250,338=>944,381=>556,8216=>250,8217=>250, +8220=>444,8221=>444,8226=>350,8211=>500,8212=>1000,732=>333,8482=>920,353=>389,8250=>250,339=>694, +382=>389,376=>556,160=>250,161=>389,162=>500,163=>500,164=>500,165=>500,166=>275,167=>500, +168=>333,169=>760,170=>276,171=>444,172=>675,173=>333,174=>760,175=>333,176=>400,177=>675, +178=>300,179=>300,180=>333,181=>500,182=>523,183=>250,184=>333,185=>250,186=>310,187=>444, +188=>750,189=>750,190=>750,191=>500,192=>611,193=>611,194=>611,195=>611,196=>611,197=>611, +198=>889,199=>667,200=>611,201=>611,202=>611,203=>611,204=>333,205=>333,206=>333,207=>333, +208=>722,209=>667,210=>722,211=>722,212=>722,213=>722,214=>722,215=>675,216=>722,217=>722, +218=>722,219=>722,220=>722,221=>556,222=>611,223=>500,224=>500,225=>500,226=>500,227=>500, +228=>500,229=>500,230=>673,231=>444,232=>444,233=>444,234=>444,235=>444,236=>278,237=>278, +238=>278,239=>278,240=>500,241=>500,242=>500,243=>500,244=>500,245=>500,246=>500,247=>675, +248=>500,249=>500,250=>500,251=>500,252=>500,253=>444,254=>500,255=>444,256=>611,257=>500, +258=>611,259=>500,260=>611,261=>500,262=>667,263=>444,264=>667,265=>444,266=>667,267=>444, +268=>667,269=>444,270=>722,271=>611,272=>722,273=>500,274=>611,275=>444,276=>611,277=>444, +278=>611,279=>444,280=>611,281=>444,282=>611,283=>444,284=>722,285=>500,286=>722,287=>500, +288=>722,289=>500,290=>722,291=>500,292=>722,293=>500,294=>722,295=>500,296=>333,297=>278, +298=>333,299=>278,300=>333,301=>278,302=>333,303=>278,304=>333,305=>278,306=>707,307=>506, +308=>444,309=>278,310=>667,311=>444,312=>444,313=>556,314=>278,315=>556,316=>278,317=>556, +318=>361,319=>556,320=>278,321=>556,322=>278,323=>667,324=>500,325=>667,326=>500,327=>667, +328=>500,329=>550,330=>721,331=>500,332=>722,333=>500,334=>722,335=>500,336=>722,337=>500, +340=>611,341=>389,342=>611,343=>389,344=>611,345=>389,346=>500,347=>389,348=>500,349=>389, +350=>500,351=>389,354=>556,355=>278,356=>556,357=>447,358=>556,359=>278,360=>722,361=>500, +362=>722,363=>500,364=>722,365=>500,366=>722,367=>500,368=>722,369=>500,370=>722,371=>500, +372=>833,373=>667,374=>556,375=>444,377=>556,378=>389,379=>556,380=>389,383=>278,384=>500, +385=>781,386=>610,387=>551,388=>611,389=>549,390=>667,391=>866,392=>703,393=>722,394=>892, +395=>682,396=>500,397=>520,398=>611,399=>722,400=>518,401=>611,403=>863,404=>611,405=>728, +406=>278,407=>333,408=>792,409=>444,410=>278,411=>480,412=>900,413=>779,414=>500,415=>722, +416=>759,417=>546,418=>908,419=>722,420=>772,421=>500,422=>611,423=>500,424=>389,425=>657, +426=>461,427=>313,428=>556,429=>335,430=>556,431=>778,432=>584,433=>747,434=>755,435=>636, +436=>549,437=>556,438=>389,439=>525,440=>558,441=>424,442=>416,443=>500,444=>615,445=>439, +446=>389,447=>500,448=>275,449=>500,450=>600,451=>333,452=>1268,453=>1091,454=>869,455=>1000, +456=>824,457=>506,458=>1101,459=>895,460=>748,461=>611,462=>500,463=>339,464=>278,465=>722, +466=>500,467=>722,468=>500,469=>722,470=>500,471=>722,472=>500,473=>722,474=>500,475=>722, +476=>500,477=>444,478=>611,479=>500,480=>611,481=>500,482=>889,483=>673,484=>722,485=>500, +486=>722,487=>500,488=>652,489=>444,490=>730,491=>500,492=>730,493=>500,494=>525,495=>446, +496=>278,497=>1258,498=>1091,499=>859,500=>817,501=>595,502=>1024,503=>607,504=>657,505=>500, +506=>611,507=>500,508=>889,509=>673,510=>722,511=>500,512=>611,513=>500,514=>611,515=>500, +516=>604,517=>444,518=>604,519=>444,520=>339,521=>278,522=>339,523=>278,524=>722,525=>500, +526=>722,527=>500,528=>616,529=>389,530=>616,531=>389,532=>722,533=>500,534=>722,535=>500, +536=>500,537=>389,538=>556,539=>278,540=>424,541=>465,542=>722,543=>500,544=>781,545=>588, +546=>568,547=>468,548=>611,549=>444,550=>611,551=>500,552=>604,553=>444,554=>722,555=>500, +556=>722,557=>500,558=>722,559=>500,560=>722,561=>500,562=>556,563=>444,564=>405,565=>597, +566=>377,567=>278,568=>775,569=>767,570=>722,571=>667,572=>444,573=>611,574=>611,575=>389, +576=>444,577=>444,578=>444,579=>667,580=>750,581=>697,582=>611,583=>444,584=>389,585=>278, +586=>796,587=>590,588=>667,589=>333,590=>722,591=>500,592=>500,593=>564,594=>564,595=>500, +596=>444,597=>444,598=>524,599=>559,600=>444,601=>444,602=>722,603=>416,604=>426,605=>674, +606=>454,607=>353,608=>624,609=>500,610=>452,611=>500,612=>582,613=>500,614=>500,615=>500, +616=>278,617=>306,618=>278,619=>278,620=>278,621=>364,622=>556,623=>722,624=>778,625=>778, +626=>614,627=>599,628=>500,629=>500,630=>668,631=>693,632=>640,633=>389,634=>389,635=>444, +636=>389,637=>333,638=>333,639=>333,640=>434,641=>456,642=>389,643=>278,644=>500,645=>466, +646=>500,647=>278,648=>278,649=>500,650=>517,651=>500,652=>444,653=>667,654=>444,655=>510, +656=>510,657=>432,658=>446,659=>439,660=>444,661=>444,662=>444,663=>444,664=>722,665=>402, +666=>454,667=>665,668=>476,669=>347,670=>444,671=>363,672=>590,673=>444,674=>444,675=>798, +676=>795,677=>805,678=>554,679=>561,680=>678,681=>614,682=>554,683=>554,684=>500,685=>500, +686=>611,687=>716,688=>300,689=>300,690=>258,691=>278,692=>278,693=>309,694=>306,695=>432, +696=>310,697=>250,698=>408,699=>333,700=>333,701=>333,702=>333,703=>333,704=>258,705=>258, +706=>374,707=>374,708=>383,709=>383,711=>333,712=>250,713=>333,714=>333,715=>333,716=>250, +717=>333,718=>333,719=>333,720=>278,721=>278,722=>333,723=>333,724=>333,725=>333,726=>333, +727=>333,728=>333,729=>333,730=>333,731=>333,733=>333,734=>336,735=>352,736=>311,737=>200, +738=>243,739=>328,740=>300,741=>460,742=>460,743=>460,744=>460,745=>460,746=>477,747=>475, +748=>339,749=>330,750=>444,751=>383,752=>383,753=>294,754=>294,755=>327,756=>261,757=>437, +758=>437,759=>333,760=>278,761=>175,762=>175,763=>175,764=>175,765=>337,766=>337,767=>326, +768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0, +778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0, +788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0,797=>0, +798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,807=>0, +808=>0,809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0, +818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0,827=>0, +828=>0,829=>0,830=>0,831=>0,832=>0,833=>0,834=>0,835=>0,836=>0,837=>0, +838=>0,839=>0,840=>0,841=>0,842=>0,843=>0,844=>0,845=>0,846=>0,847=>0, +848=>0,849=>0,850=>0,851=>0,852=>0,853=>0,854=>0,855=>0,856=>0,857=>0, +858=>0,859=>0,860=>0,861=>0,862=>0,863=>0,864=>0,865=>0,866=>0,867=>0, +868=>0,869=>0,870=>0,871=>0,872=>0,873=>0,874=>0,875=>0,876=>0,877=>0, +878=>0,879=>0,884=>199,885=>199,890=>332,894=>333,900=>257,901=>333,902=>661,903=>250, +904=>841,905=>950,906=>559,908=>815,910=>877,911=>899,912=>270,913=>661,914=>581,915=>611, +916=>660,917=>611,918=>606,919=>742,920=>672,921=>333,922=>667,923=>641,924=>833,925=>657, +926=>678,927=>682,928=>749,929=>611,931=>657,932=>596,933=>676,934=>722,935=>611,936=>812, +937=>743,938=>333,939=>696,940=>564,941=>416,942=>506,943=>270,944=>504,945=>564,946=>509, +947=>496,948=>520,949=>416,950=>398,951=>506,952=>533,953=>270,954=>491,955=>488,956=>501, +957=>486,958=>430,959=>510,960=>608,961=>506,962=>423,963=>524,964=>425,965=>504,966=>618, +967=>459,968=>693,969=>693,970=>270,971=>504,972=>510,973=>504,974=>693,976=>534,977=>587, +978=>620,979=>820,980=>620,981=>640,982=>684,983=>504,984=>555,985=>534,986=>548,987=>496, +988=>610,989=>470,990=>633,991=>410,992=>687,993=>544,1008=>534,1009=>534,1010=>485,1011=>278, +1012=>722,1013=>280,1014=>280,1015=>610,1016=>500,1017=>704,1018=>832,1019=>703,1020=>533,1021=>704, +1022=>704,1023=>704,1024=>604,1025=>604,1026=>668,1027=>611,1028=>666,1029=>500,1030=>339,1031=>339, +1032=>444,1033=>972,1034=>977,1035=>703,1036=>664,1037=>720,1038=>728,1039=>728,1040=>611,1041=>610, +1042=>611,1043=>611,1044=>682,1045=>604,1046=>976,1047=>592,1048=>720,1049=>720,1050=>664,1051=>719, +1052=>828,1053=>722,1054=>722,1055=>749,1056=>603,1057=>667,1058=>556,1059=>728,1060=>722,1061=>611, +1062=>728,1063=>666,1064=>997,1065=>1005,1066=>710,1067=>891,1068=>594,1069=>632,1070=>1024,1071=>696, +1072=>500,1073=>500,1074=>442,1075=>344,1076=>503,1077=>440,1078=>932,1079=>402,1080=>500,1081=>500, +1082=>491,1083=>487,1084=>624,1085=>500,1086=>500,1087=>500,1088=>500,1089=>441,1090=>722,1091=>500, +1092=>741,1093=>444,1094=>500,1095=>500,1096=>750,1097=>750,1098=>545,1099=>683,1100=>433,1101=>432, +1102=>700,1103=>503,1104=>440,1105=>440,1106=>500,1107=>344,1108=>442,1109=>389,1110=>278,1111=>278, +1112=>278,1113=>686,1114=>696,1115=>500,1116=>491,1117=>500,1118=>500,1119=>500,1120=>964,1121=>684, +1122=>708,1123=>690,1124=>975,1125=>646,1126=>800,1127=>628,1128=>1096,1129=>795,1130=>952,1131=>730, +1132=>1260,1133=>892,1134=>574,1135=>400,1136=>812,1137=>694,1138=>721,1139=>500,1140=>745,1141=>533, +1142=>745,1143=>533,1144=>1193,1145=>967,1146=>868,1147=>602,1148=>964,1149=>684,1150=>964,1151=>684, +1152=>548,1153=>443,1154=>320,1155=>0,1156=>0,1157=>0,1158=>0,1159=>0,1160=>0,1161=>0, +1162=>720,1163=>500,1164=>602,1165=>433,1166=>611,1167=>500,1168=>552,1169=>424,1170=>593,1171=>424, +1172=>611,1173=>432,1174=>992,1175=>932,1176=>592,1177=>396,1178=>681,1179=>491,1180=>700,1181=>532, +1182=>664,1183=>491,1184=>776,1185=>690,1186=>729,1187=>500,1188=>908,1189=>660,1190=>1034,1191=>694, +1192=>730,1193=>543,1194=>666,1195=>443,1196=>556,1197=>775,1198=>556,1199=>574,1200=>555,1201=>574, +1202=>660,1203=>443,1204=>798,1205=>581,1206=>674,1207=>500,1208=>690,1209=>516,1210=>640,1211=>500, +1212=>785,1213=>558,1214=>785,1215=>558,1216=>339,1217=>976,1218=>932,1219=>664,1220=>491,1221=>719, +1222=>487,1223=>722,1224=>500,1225=>722,1226=>500,1227=>666,1228=>500,1229=>828,1230=>624,1231=>339, +1232=>611,1233=>500,1234=>611,1235=>500,1236=>889,1237=>673,1238=>604,1239=>444,1240=>722,1241=>444, +1242=>722,1243=>444,1244=>976,1245=>932,1246=>592,1247=>402,1248=>525,1249=>446,1250=>720,1251=>500, +1252=>720,1253=>500,1254=>722,1255=>500,1256=>722,1257=>500,1258=>722,1259=>500,1260=>632,1261=>432, +1262=>728,1263=>500,1264=>728,1265=>500,1266=>728,1267=>500,1268=>666,1269=>500,1270=>611,1271=>424, +1272=>891,1273=>683,1296=>532,1297=>409,1298=>719,1299=>487,1306=>722,1307=>500,1308=>833,1309=>656, +1310=>664,1311=>491,1329=>794,1330=>712,1331=>782,1332=>854,1333=>711,1334=>702,1335=>707,1336=>655, +1337=>777,1338=>782,1339=>710,1340=>663,1341=>830,1342=>917,1343=>672,1344=>469,1345=>666,1346=>858, +1347=>685,1348=>856,1349=>618,1350=>858,1351=>709,1352=>719,1353=>714,1354=>731,1355=>702,1356=>874, +1357=>719,1358=>844,1359=>519,1360=>703,1361=>608,1362=>586,1363=>750,1364=>780,1365=>714,1366=>684, +1369=>120,1370=>120,1371=>269,1372=>307,1373=>241,1374=>312,1375=>300,1377=>786,1378=>506,1379=>542, +1380=>541,1381=>506,1382=>503,1383=>478,1384=>499,1385=>541,1386=>539,1387=>508,1388=>289,1389=>750, +1390=>540,1391=>513,1392=>508,1393=>503,1394=>531,1395=>518,1396=>500,1397=>243,1398=>473,1399=>406, +1400=>499,1401=>407,1402=>793,1403=>414,1404=>463,1405=>500,1406=>516,1407=>758,1408=>504,1409=>466, +1410=>288,1411=>758,1412=>510,1413=>501,1414=>562,1415=>543,1417=>278,1418=>280,1425=>0,1426=>0, +1427=>0,1428=>0,1429=>0,1430=>0,1431=>418,1432=>0,1433=>0,1434=>0,1435=>0,1436=>0, +1437=>0,1438=>0,1439=>0,1440=>0,1441=>0,1442=>0,1443=>0,1444=>0,1445=>0,1446=>0, +1447=>0,1448=>0,1449=>0,1450=>0,1451=>0,1452=>0,1453=>0,1454=>0,1455=>0,1456=>0, +1457=>0,1458=>0,1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1466=>0, +1467=>0,1468=>0,1469=>0,1470=>440,1471=>0,1472=>126,1473=>0,1474=>0,1475=>418,1476=>0, +1477=>0,1478=>350,1479=>0,1488=>537,1489=>537,1490=>350,1491=>537,1492=>537,1493=>350,1494=>350, +1495=>537,1496=>537,1497=>350,1498=>537,1499=>537,1500=>537,1501=>537,1502=>537,1503=>350,1504=>350, +1505=>537,1506=>537,1507=>537,1508=>537,1509=>537,1510=>537,1511=>537,1512=>537,1513=>537,1514=>537, +1520=>537,1521=>537,1522=>537,1523=>396,1524=>396,2404=>318,2405=>446,2433=>0,2434=>300,2435=>312, +2437=>594,2438=>776,2439=>469,2440=>513,2441=>535,2442=>561,2443=>604,2444=>481,2447=>580,2448=>604, +2451=>540,2452=>620,2453=>570,2454=>485,2455=>484,2456=>471,2457=>457,2458=>408,2459=>452,2460=>591, +2461=>551,2462=>771,2463=>414,2464=>404,2465=>522,2466=>415,2467=>450,2468=>551,2469=>477,2470=>478, +2471=>449,2472=>448,2474=>535,2475=>611,2476=>443,2477=>534,2478=>492,2479=>474,2480=>442,2482=>542, +2486=>507,2487=>467,2488=>523,2489=>419,2492=>0,2493=>419,2494=>202,2495=>189,2496=>202,2497=>0, +2498=>0,2499=>0,2500=>0,2503=>294,2504=>289,2507=>774,2508=>825,2509=>0,2510=>356,2519=>219, +2524=>523,2525=>420,2527=>469,2528=>604,2529=>481,2530=>0,2531=>0,2534=>500,2535=>437,2536=>479, +2537=>507,2538=>497,2539=>500,2540=>482,2541=>503,2542=>517,2543=>481,2544=>443,2545=>443,2546=>429, +2547=>383,2548=>432,2549=>478,2550=>539,2551=>158,2552=>365,2553=>280,2554=>357,3585=>512,3586=>453, +3587=>512,3588=>519,3589=>529,3590=>561,3591=>411,3592=>437,3593=>552,3594=>452,3595=>509,3596=>707, +3597=>707,3598=>574,3599=>570,3600=>406,3601=>607,3602=>686,3603=>749,3604=>494,3605=>497,3606=>509, +3607=>552,3608=>461,3609=>565,3610=>527,3611=>523,3612=>556,3613=>551,3614=>570,3615=>570,3616=>571, +3617=>531,3618=>493,3619=>433,3620=>513,3621=>491,3622=>571,3623=>439,3624=>510,3625=>594,3626=>484, +3627=>554,3628=>616,3629=>493,3630=>496,3631=>417,3632=>392,3633=>0,3634=>366,3635=>366,3636=>0, +3637=>0,3638=>0,3639=>0,3640=>0,3641=>0,3642=>0,3647=>662,3648=>297,3649=>544,3650=>298, +3651=>329,3652=>328,3653=>326,3654=>488,3655=>0,3656=>0,3657=>0,3658=>0,3659=>0,3660=>0, +3661=>0,3662=>0,3663=>725,3664=>624,3665=>624,3666=>624,3667=>624,3668=>624,3669=>624,3670=>624, +3671=>624,3672=>624,3673=>624,3674=>645,3675=>872,4256=>453,4257=>448,4258=>546,4259=>619,4260=>478, +4261=>481,4262=>459,4263=>707,4264=>467,4265=>471,4266=>842,4267=>464,4268=>443,4269=>707,4270=>460, +4271=>465,4272=>686,4273=>440,4274=>550,4275=>561,4276=>580,4277=>467,4278=>630,4279=>466,4280=>517, +4281=>456,4282=>502,4283=>464,4284=>534,4285=>440,4286=>443,4287=>522,4288=>460,4289=>463,4290=>536, +4291=>455,4292=>468,4293=>449,4304=>454,4305=>452,4306=>544,4307=>629,4308=>451,4309=>452,4310=>452, +4311=>702,4312=>451,4313=>452,4314=>820,4315=>451,4316=>453,4317=>695,4318=>449,4319=>448,4320=>694, +4321=>501,4322=>544,4323=>517,4324=>560,4325=>450,4326=>627,4327=>452,4328=>491,4329=>452,4330=>485, +4331=>452,4332=>485,4333=>443,4334=>500,4335=>582,4336=>455,4337=>451,4338=>480,4339=>414,4340=>453, +4341=>418,4342=>741,4343=>452,4344=>452,4345=>544,4346=>454,4347=>410,4348=>339,5024=>711,5025=>678, +5026=>604,5027=>667,5028=>796,5029=>301,5030=>516,5031=>544,5032=>457,5033=>716,5034=>703,5035=>383, +5036=>628,5037=>709,5038=>455,5039=>601,5040=>472,5041=>574,5042=>730,5043=>939,5044=>498,5045=>528, +5046=>667,5047=>891,5048=>505,5049=>792,5050=>957,5051=>725,5052=>595,5053=>733,5054=>698,5055=>638, +5056=>720,5057=>732,5058=>624,5059=>638,5060=>565,5061=>903,5062=>655,5063=>681,5064=>675,5065=>949, +5066=>683,5067=>547,5068=>693,5069=>732,5070=>529,5071=>569,5072=>536,5073=>677,5074=>631,5075=>495, +5076=>973,5077=>543,5078=>607,5079=>652,5080=>652,5081=>693,5082=>514,5083=>803,5084=>658,5085=>597, +5086=>627,5087=>659,5088=>679,5089=>706,5090=>563,5091=>618,5092=>767,5093=>776,5094=>731,5095=>492, +5096=>808,5097=>823,5098=>796,5099=>689,5100=>716,5101=>518,5102=>521,5103=>719,5104=>563,5105=>776, +5106=>634,5107=>822,5108=>621,7680=>611,7681=>500,7682=>611,7683=>500,7684=>611,7685=>500,7686=>611, +7687=>500,7688=>667,7689=>444,7690=>722,7691=>500,7692=>722,7693=>500,7694=>722,7695=>500,7696=>722, +7697=>500,7698=>722,7699=>500,7700=>611,7701=>444,7702=>611,7703=>444,7704=>604,7705=>444,7706=>604, +7707=>444,7708=>604,7709=>444,7710=>611,7711=>278,7712=>722,7713=>500,7714=>722,7715=>500,7716=>722, +7717=>500,7718=>722,7719=>500,7720=>722,7721=>500,7722=>722,7723=>500,7724=>339,7725=>278,7726=>333, +7727=>278,7728=>652,7729=>444,7730=>652,7731=>444,7732=>652,7733=>444,7734=>556,7735=>278,7736=>556, +7737=>278,7738=>556,7739=>278,7740=>556,7741=>278,7742=>828,7743=>722,7744=>828,7745=>722,7746=>828, +7747=>722,7748=>657,7749=>500,7750=>657,7751=>500,7752=>657,7753=>500,7754=>657,7755=>500,7756=>722, +7757=>500,7758=>722,7759=>500,7760=>722,7761=>500,7762=>722,7763=>500,7764=>603,7765=>500,7766=>603, +7767=>500,7768=>616,7769=>389,7770=>616,7771=>389,7772=>616,7773=>389,7774=>616,7775=>389,7776=>500, +7777=>389,7778=>500,7779=>389,7780=>500,7781=>389,7782=>500,7783=>389,7784=>500,7785=>389,7786=>556, +7787=>278,7788=>556,7789=>278,7790=>556,7791=>278,7792=>556,7793=>278,7794=>722,7795=>500,7796=>722, +7797=>500,7798=>722,7799=>500,7800=>722,7801=>500,7802=>722,7803=>500,7804=>611,7805=>444,7806=>611, +7807=>444,7808=>833,7809=>667,7810=>833,7811=>667,7812=>833,7813=>667,7814=>833,7815=>667,7816=>833, +7817=>667,7818=>611,7819=>444,7820=>611,7821=>444,7822=>556,7823=>444,7824=>556,7825=>389,7826=>556, +7827=>389,7828=>556,7829=>389,7830=>500,7831=>278,7832=>667,7833=>444,7834=>444,7835=>278,7836=>333, +7837=>278,7838=>659,7839=>534,7840=>611,7841=>500,7842=>611,7843=>500,7844=>611,7845=>500,7846=>611, +7847=>500,7848=>611,7849=>500,7850=>611,7851=>500,7852=>611,7853=>500,7854=>611,7855=>500,7856=>611, +7857=>500,7858=>611,7859=>500,7860=>611,7861=>500,7862=>611,7863=>500,7864=>604,7865=>444,7866=>604, +7867=>444,7868=>604,7869=>444,7870=>611,7871=>444,7872=>611,7873=>444,7874=>611,7875=>444,7876=>611, +7877=>444,7878=>604,7879=>444,7880=>339,7881=>278,7882=>339,7883=>278,7884=>722,7885=>500,7886=>722, +7887=>500,7888=>722,7889=>500,7890=>722,7891=>500,7892=>722,7893=>500,7894=>722,7895=>500,7896=>722, +7897=>500,7898=>759,7899=>546,7900=>759,7901=>546,7902=>807,7903=>585,7904=>759,7905=>546,7906=>759, +7907=>546,7908=>722,7909=>500,7910=>722,7911=>500,7912=>778,7913=>584,7914=>778,7915=>584,7916=>807, +7917=>585,7918=>778,7919=>584,7920=>778,7921=>584,7922=>556,7923=>444,7924=>556,7925=>444,7926=>556, +7927=>444,7928=>556,7929=>444,7936=>564,7937=>564,7938=>564,7939=>564,7940=>564,7941=>564,7942=>564, +7943=>564,7944=>661,7945=>661,7946=>794,7947=>811,7948=>792,7949=>803,7950=>661,7951=>648,7952=>416, +7953=>416,7954=>416,7955=>416,7956=>416,7957=>416,7960=>740,7961=>795,7962=>923,7963=>940,7964=>996, +7965=>986,7968=>506,7969=>506,7970=>506,7971=>506,7972=>506,7973=>506,7974=>506,7975=>506,7976=>879, +7977=>901,7978=>1036,7979=>1035,7980=>1099,7981=>1100,7982=>954,7983=>959,7984=>270,7985=>270,7986=>267, +7987=>267,7988=>267,7989=>267,7990=>267,7991=>267,7992=>490,7993=>529,7994=>655,7995=>654,7996=>705, +7997=>713,7998=>570,7999=>573,8000=>558,8001=>510,8002=>510,8003=>510,8004=>510,8005=>510,8008=>797, +8009=>867,8010=>1026,8011=>1022,8012=>993,8013=>1017,8016=>504,8017=>504,8018=>504,8019=>504,8020=>504, +8021=>504,8022=>504,8023=>504,8025=>916,8027=>1062,8029=>1100,8031=>933,8032=>693,8033=>693,8034=>693, +8035=>693,8036=>693,8037=>693,8038=>693,8039=>693,8040=>852,8041=>909,8042=>1072,8043=>1072,8044=>1032, +8045=>1047,8046=>930,8047=>946,8048=>564,8049=>564,8050=>416,8051=>416,8052=>506,8053=>506,8054=>270, +8055=>270,8056=>510,8057=>510,8058=>504,8059=>504,8060=>693,8061=>693,8064=>564,8065=>564,8066=>564, +8067=>564,8068=>564,8069=>564,8070=>564,8071=>564,8072=>821,8073=>854,8074=>998,8075=>1011,8076=>992, +8077=>1001,8078=>866,8079=>858,8080=>506,8081=>506,8082=>506,8083=>506,8084=>506,8085=>506,8086=>506, +8087=>506,8088=>999,8089=>1044,8090=>1179,8091=>1165,8092=>1227,8093=>1229,8094=>1080,8095=>1085,8096=>693, +8097=>693,8098=>693,8099=>693,8100=>693,8101=>693,8102=>693,8103=>693,8104=>1037,8105=>1113,8106=>1264, +8107=>1264,8108=>1219,8109=>1241,8110=>1120,8111=>1132,8112=>564,8113=>564,8114=>564,8115=>564,8116=>564, +8118=>564,8119=>564,8120=>661,8121=>661,8122=>661,8123=>661,8124=>831,8125=>192,8126=>332,8127=>500, +8128=>500,8129=>534,8130=>506,8131=>506,8132=>506,8134=>506,8135=>506,8136=>611,8137=>816,8138=>889, +8139=>908,8140=>881,8141=>500,8142=>500,8143=>500,8144=>270,8145=>270,8146=>270,8147=>270,8150=>270, +8151=>270,8152=>333,8153=>333,8154=>497,8155=>521,8157=>500,8158=>500,8159=>500,8160=>504,8161=>504, +8162=>504,8163=>504,8164=>506,8165=>506,8166=>504,8167=>504,8168=>676,8169=>676,8170=>905,8171=>901, +8172=>783,8173=>333,8174=>333,8175=>500,8178=>693,8179=>693,8180=>693,8182=>693,8183=>693,8184=>907, +8185=>833,8186=>963,8187=>875,8188=>952,8189=>500,8190=>500,8192=>500,8193=>1000,8194=>500,8195=>1000, +8196=>333,8197=>250,8198=>167,8199=>500,8200=>250,8201=>200,8202=>100,8203=>0,8204=>0,8205=>0, +8206=>0,8207=>0,8208=>333,8209=>333,8210=>500,8213=>1000,8214=>293,8215=>465,8219=>250,8223=>444, +8227=>350,8228=>250,8229=>500,8231=>250,8232=>0,8233=>0,8234=>0,8235=>0,8236=>0,8237=>0, +8238=>0,8239=>250,8241=>1601,8242=>247,8243=>411,8244=>611,8245=>220,8246=>440,8247=>660,8248=>469, +8251=>629,8252=>666,8253=>500,8254=>500,8255=>953,8256=>1000,8257=>314,8258=>931,8259=>333,8260=>167, +8261=>480,8262=>480,8263=>1000,8264=>833,8265=>833,8266=>500,8267=>453,8268=>453,8269=>450,8270=>500, +8271=>278,8272=>882,8273=>500,8274=>497,8275=>500,8276=>953,8277=>512,8278=>410,8279=>855,8280=>620, +8281=>620,8282=>179,8283=>621,8284=>564,8285=>179,8286=>179,8287=>111,8288=>0,8289=>0,8290=>0, +8291=>0,8292=>0,8304=>300,8305=>235,8308=>300,8309=>300,8310=>300,8311=>300,8312=>300,8313=>300, +8314=>300,8315=>300,8316=>300,8317=>216,8318=>216,8319=>318,8320=>300,8321=>250,8322=>300,8323=>300, +8324=>300,8325=>300,8326=>300,8327=>300,8328=>300,8329=>300,8330=>300,8331=>300,8332=>300,8333=>216, +8334=>216,8336=>350,8337=>304,8338=>340,8339=>317,8340=>278,8352=>698,8353=>667,8354=>667,8355=>611, +8356=>500,8357=>722,8358=>667,8359=>988,8360=>953,8361=>833,8362=>869,8363=>512,8365=>722,8366=>611, +8367=>1340,8368=>489,8369=>589,8370=>619,8371=>722,8372=>556,8373=>611,8374=>408,8376=>524,8400=>0, +8401=>0,8402=>0,8403=>0,8404=>0,8405=>0,8406=>0,8407=>0,8408=>0,8409=>0,8410=>0, +8411=>0,8412=>0,8413=>0,8414=>0,8415=>0,8416=>0,8417=>0,8418=>0,8419=>0,8420=>0, +8421=>0,8422=>0,8423=>0,8424=>0,8425=>0,8426=>0,8427=>0,8428=>0,8429=>0,8430=>0, +8431=>0,8432=>0,8448=>604,8449=>605,8450=>674,8451=>954,8452=>556,8453=>573,8454=>667,8455=>518, +8456=>667,8457=>822,8458=>490,8459=>824,8460=>663,8461=>818,8462=>500,8463=>500,8464=>578,8465=>613, +8466=>715,8467=>417,8468=>777,8469=>751,8470=>783,8471=>792,8472=>832,8473=>589,8474=>729,8475=>892, +8476=>711,8477=>755,8478=>616,8479=>610,8480=>879,8481=>1156,8483=>611,8484=>659,8485=>389,8486=>743, +8487=>743,8488=>663,8489=>286,8490=>722,8491=>722,8492=>846,8493=>613,8494=>533,8495=>363,8496=>587, +8497=>690,8498=>556,8499=>1021,8500=>387,8501=>537,8502=>537,8503=>350,8504=>537,8505=>417,8506=>906, +8507=>1155,8508=>655,8510=>586,8511=>722,8513=>663,8514=>485,8515=>485,8516=>637,8522=>516,8523=>778, +8525=>906,8526=>378,8531=>750,8532=>750,8533=>750,8534=>750,8535=>750,8536=>750,8537=>750,8538=>750, +8539=>750,8540=>750,8541=>750,8542=>750,8543=>750,8544=>339,8545=>608,8546=>877,8547=>940,8548=>611, +8549=>910,8550=>1176,8551=>1439,8552=>940,8553=>611,8554=>936,8555=>1204,8556=>556,8557=>667,8558=>722, +8559=>828,8560=>278,8561=>526,8562=>774,8563=>712,8564=>444,8565=>702,8566=>950,8567=>1198,8568=>712, +8569=>444,8570=>692,8571=>970,8572=>278,8573=>444,8574=>500,8575=>722,8592=>964,8593=>499,8594=>964, +8595=>499,8706=>494,8710=>612,8721=>713,8722=>675,8723=>675,8725=>750,8730=>549,8734=>677,8747=>416, +8748=>750,8749=>1083,8750=>722,8751=>750,8800=>564,8804=>675,8805=>675,8992=>686,8993=>686,9251=>500, +9674=>494,9675=>791,9676=>791,9824=>626,9825=>694,9826=>595,9827=>776,9828=>626,9829=>694,9830=>595, +9831=>776,9833=>333,9834=>555,9835=>722,9836=>722,9837=>415,9838=>377,9839=>402,11799=>333,42790=>722, +42791=>491,42792=>770,42793=>586,42794=>532,42795=>409,42796=>437,42797=>389,42798=>578,42799=>580,42888=>333, +42889=>278,42890=>282,42891=>286,42892=>278,64256=>526,64257=>500,64258=>500,64259=>747,64260=>748,64261=>518, +64262=>665,64275=>971,64276=>969,64277=>978,64278=>971,64279=>1219,64285=>350,64286=>0,64287=>537,64288=>537, +64297=>564,64298=>537,64299=>537,64300=>537,64301=>537,64302=>537,64303=>537,64304=>537,64305=>537,64306=>350, +64307=>537,64308=>537,64309=>350,64310=>350,64312=>537,64313=>350,64314=>537,64315=>537,64316=>537,64318=>537, +64320=>350,64321=>537,64323=>537,64324=>537,64326=>537,64327=>537,64328=>537,64329=>537,64330=>537,64331=>350, +64332=>537,64333=>537,64334=>537,64335=>537,65533=>900); +$enc=''; +$diff=''; +$file='freeserifi.z'; +$ctg='freeserifi.ctg.z'; +$originalsize=691448; +// --- EOF --- --- /dev/null +++ b/tcpdf/fonts/helvetica.php @@ -1,1 +1,34 @@ +278,1=>278,2=>278,3=>278,4=>278,5=>278,6=>278,7=>278,8=>278,9=>278, +10=>278,11=>278,12=>278,13=>278,14=>278,15=>278,16=>278,17=>278,18=>278,19=>278, +20=>278,21=>278,22=>278,23=>278,24=>278,25=>278,26=>278,27=>278,28=>278,29=>278, +30=>278,31=>278,32=>278,33=>278,34=>355,35=>556,36=>556,37=>889,38=>667,39=>191, +40=>333,41=>333,42=>389,43=>584,44=>278,45=>333,46=>278,47=>278,48=>556,49=>556, +50=>556,51=>556,52=>556,53=>556,54=>556,55=>556,56=>556,57=>556,58=>278,59=>278, +60=>584,61=>584,62=>584,63=>556,64=>1015,65=>667,66=>667,67=>722,68=>722,69=>667, +70=>611,71=>778,72=>722,73=>278,74=>500,75=>667,76=>556,77=>833,78=>722,79=>778, +80=>667,81=>778,82=>722,83=>667,84=>611,85=>722,86=>667,87=>944,88=>667,89=>667, +90=>611,91=>278,92=>278,93=>278,94=>469,95=>556,96=>333,97=>556,98=>556,99=>500, +100=>556,101=>556,102=>278,103=>556,104=>556,105=>222,106=>222,107=>500,108=>222, +109=>833,110=>556,111=>556,112=>556,113=>556,114=>333,115=>500,116=>278,117=>556, +118=>500,119=>722,120=>500,121=>500,122=>500,123=>334,124=>260,125=>334,126=>584, +127=>350,128=>556,129=>350,130=>222,131=>556,132=>333,133=>1000,134=>556,135=>556, +136=>333,137=>1000,138=>667,139=>333,140=>1000,141=>350,142=>611,143=>350,144=>350, +145=>222,146=>222,147=>333,148=>333,149=>350,150=>556,151=>1000,152=>333,153=>1000, +154=>500,155=>333,156=>944,157=>350,158=>500,159=>667,160=>278,161=>333,162=>556, +163=>556,164=>556,165=>556,166=>260,167=>556,168=>333,169=>737,170=>370,171=>556, +172=>584,173=>333,174=>737,175=>333,176=>400,177=>584,178=>333,179=>333,180=>333, +181=>556,182=>537,183=>278,184=>333,185=>333,186=>365,187=>556,188=>834,189=>834, +190=>834,191=>611,192=>667,193=>667,194=>667,195=>667,196=>667,197=>667,198=>1000, +199=>722,200=>667,201=>667,202=>667,203=>667,204=>278,205=>278,206=>278,207=>278, +208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>584,216=>778, +217=>722,218=>722,219=>722,220=>722,221=>667,222=>667,223=>611,224=>556,225=>556, +226=>556,227=>556,228=>556,229=>556,230=>889,231=>500,232=>556,233=>556,234=>556, +235=>556,236=>278,237=>278,238=>278,239=>278,240=>556,241=>556,242=>556,243=>556, +244=>556,245=>556,246=>556,247=>584,248=>611,249=>556,250=>556,251=>556,252=>556, +253=>500,254=>556,255=>500); +// --- EOF --- --- /dev/null +++ b/tcpdf/fonts/helveticab.php @@ -1,1 +1,34 @@ +278,1=>278,2=>278,3=>278,4=>278,5=>278,6=>278,7=>278,8=>278,9=>278, +10=>278,11=>278,12=>278,13=>278,14=>278,15=>278,16=>278,17=>278,18=>278,19=>278, +20=>278,21=>278,22=>278,23=>278,24=>278,25=>278,26=>278,27=>278,28=>278,29=>278, +30=>278,31=>278,32=>278,33=>333,34=>474,35=>556,36=>556,37=>889,38=>722,39=>238, +40=>333,41=>333,42=>389,43=>584,44=>278,45=>333,46=>278,47=>278,48=>556,49=>556, +50=>556,51=>556,52=>556,53=>556,54=>556,55=>556,56=>556,57=>556,58=>333,59=>333, +60=>584,61=>584,62=>584,63=>611,64=>975,65=>722,66=>722,67=>722,68=>722,69=>667, +70=>611,71=>778,72=>722,73=>278,74=>556,75=>722,76=>611,77=>833,78=>722,79=>778, +80=>667,81=>778,82=>722,83=>667,84=>611,85=>722,86=>667,87=>944,88=>667,89=>667, +90=>611,91=>333,92=>278,93=>333,94=>584,95=>556,96=>333,97=>556,98=>611,99=>556, +100=>611,101=>556,102=>333,103=>611,104=>611,105=>278,106=>278,107=>556,108=>278, +109=>889,110=>611,111=>611,112=>611,113=>611,114=>389,115=>556,116=>333,117=>611, +118=>556,119=>778,120=>556,121=>556,122=>500,123=>389,124=>280,125=>389,126=>584, +127=>350,128=>556,129=>350,130=>278,131=>556,132=>500,133=>1000,134=>556,135=>556, +136=>333,137=>1000,138=>667,139=>333,140=>1000,141=>350,142=>611,143=>350,144=>350, +145=>278,146=>278,147=>500,148=>500,149=>350,150=>556,151=>1000,152=>333,153=>1000, +154=>556,155=>333,156=>944,157=>350,158=>500,159=>667,160=>278,161=>333,162=>556, +163=>556,164=>556,165=>556,166=>280,167=>556,168=>333,169=>737,170=>370,171=>556, +172=>584,173=>333,174=>737,175=>333,176=>400,177=>584,178=>333,179=>333,180=>333, +181=>611,182=>556,183=>278,184=>333,185=>333,186=>365,187=>556,188=>834,189=>834, +190=>834,191=>611,192=>722,193=>722,194=>722,195=>722,196=>722,197=>722,198=>1000, +199=>722,200=>667,201=>667,202=>667,203=>667,204=>278,205=>278,206=>278,207=>278, +208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>584,216=>778, +217=>722,218=>722,219=>722,220=>722,221=>667,222=>667,223=>611,224=>556,225=>556, +226=>556,227=>556,228=>556,229=>556,230=>889,231=>556,232=>556,233=>556,234=>556, +235=>556,236=>278,237=>278,238=>278,239=>278,240=>611,241=>611,242=>611,243=>611, +244=>611,245=>611,246=>611,247=>584,248=>611,249=>611,250=>611,251=>611,252=>611, +253=>556,254=>611,255=>556); +// --- EOF --- --- /dev/null +++ b/tcpdf/fonts/helveticabi.php @@ -1,1 +1,34 @@ +278,1=>278,2=>278,3=>278,4=>278,5=>278,6=>278,7=>278,8=>278,9=>278, +10=>278,11=>278,12=>278,13=>278,14=>278,15=>278,16=>278,17=>278,18=>278,19=>278, +20=>278,21=>278,22=>278,23=>278,24=>278,25=>278,26=>278,27=>278,28=>278,29=>278, +30=>278,31=>278,32=>278,33=>333,34=>474,35=>556,36=>556,37=>889,38=>722,39=>238, +40=>333,41=>333,42=>389,43=>584,44=>278,45=>333,46=>278,47=>278,48=>556,49=>556, +50=>556,51=>556,52=>556,53=>556,54=>556,55=>556,56=>556,57=>556,58=>333,59=>333, +60=>584,61=>584,62=>584,63=>611,64=>975,65=>722,66=>722,67=>722,68=>722,69=>667, +70=>611,71=>778,72=>722,73=>278,74=>556,75=>722,76=>611,77=>833,78=>722,79=>778, +80=>667,81=>778,82=>722,83=>667,84=>611,85=>722,86=>667,87=>944,88=>667,89=>667, +90=>611,91=>333,92=>278,93=>333,94=>584,95=>556,96=>333,97=>556,98=>611,99=>556, +100=>611,101=>556,102=>333,103=>611,104=>611,105=>278,106=>278,107=>556,108=>278, +109=>889,110=>611,111=>611,112=>611,113=>611,114=>389,115=>556,116=>333,117=>611, +118=>556,119=>778,120=>556,121=>556,122=>500,123=>389,124=>280,125=>389,126=>584, +127=>350,128=>556,129=>350,130=>278,131=>556,132=>500,133=>1000,134=>556,135=>556, +136=>333,137=>1000,138=>667,139=>333,140=>1000,141=>350,142=>611,143=>350,144=>350, +145=>278,146=>278,147=>500,148=>500,149=>350,150=>556,151=>1000,152=>333,153=>1000, +154=>556,155=>333,156=>944,157=>350,158=>500,159=>667,160=>278,161=>333,162=>556, +163=>556,164=>556,165=>556,166=>280,167=>556,168=>333,169=>737,170=>370,171=>556, +172=>584,173=>333,174=>737,175=>333,176=>400,177=>584,178=>333,179=>333,180=>333, +181=>611,182=>556,183=>278,184=>333,185=>333,186=>365,187=>556,188=>834,189=>834, +190=>834,191=>611,192=>722,193=>722,194=>722,195=>722,196=>722,197=>722,198=>1000, +199=>722,200=>667,201=>667,202=>667,203=>667,204=>278,205=>278,206=>278,207=>278, +208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>584,216=>778, +217=>722,218=>722,219=>722,220=>722,221=>667,222=>667,223=>611,224=>556,225=>556, +226=>556,227=>556,228=>556,229=>556,230=>889,231=>556,232=>556,233=>556,234=>556, +235=>556,236=>278,237=>278,238=>278,239=>278,240=>611,241=>611,242=>611,243=>611, +244=>611,245=>611,246=>611,247=>584,248=>611,249=>611,250=>611,251=>611,252=>611, +253=>556,254=>611,255=>556); +// --- EOF --- --- /dev/null +++ b/tcpdf/fonts/helveticai.php @@ -1,1 +1,34 @@ +278,1=>278,2=>278,3=>278,4=>278,5=>278,6=>278,7=>278,8=>278,9=>278, +10=>278,11=>278,12=>278,13=>278,14=>278,15=>278,16=>278,17=>278,18=>278,19=>278, +20=>278,21=>278,22=>278,23=>278,24=>278,25=>278,26=>278,27=>278,28=>278,29=>278, +30=>278,31=>278,32=>278,33=>278,34=>355,35=>556,36=>556,37=>889,38=>667,39=>191, +40=>333,41=>333,42=>389,43=>584,44=>278,45=>333,46=>278,47=>278,48=>556,49=>556, +50=>556,51=>556,52=>556,53=>556,54=>556,55=>556,56=>556,57=>556,58=>278,59=>278, +60=>584,61=>584,62=>584,63=>556,64=>1015,65=>667,66=>667,67=>722,68=>722,69=>667, +70=>611,71=>778,72=>722,73=>278,74=>500,75=>667,76=>556,77=>833,78=>722,79=>778, +80=>667,81=>778,82=>722,83=>667,84=>611,85=>722,86=>667,87=>944,88=>667,89=>667, +90=>611,91=>278,92=>278,93=>278,94=>469,95=>556,96=>333,97=>556,98=>556,99=>500, +100=>556,101=>556,102=>278,103=>556,104=>556,105=>222,106=>222,107=>500,108=>222, +109=>833,110=>556,111=>556,112=>556,113=>556,114=>333,115=>500,116=>278,117=>556, +118=>500,119=>722,120=>500,121=>500,122=>500,123=>334,124=>260,125=>334,126=>584, +127=>350,128=>556,129=>350,130=>222,131=>556,132=>333,133=>1000,134=>556,135=>556, +136=>333,137=>1000,138=>667,139=>333,140=>1000,141=>350,142=>611,143=>350,144=>350, +145=>222,146=>222,147=>333,148=>333,149=>350,150=>556,151=>1000,152=>333,153=>1000, +154=>500,155=>333,156=>944,157=>350,158=>500,159=>667,160=>278,161=>333,162=>556, +163=>556,164=>556,165=>556,166=>260,167=>556,168=>333,169=>737,170=>370,171=>556, +172=>584,173=>333,174=>737,175=>333,176=>400,177=>584,178=>333,179=>333,180=>333, +181=>556,182=>537,183=>278,184=>333,185=>333,186=>365,187=>556,188=>834,189=>834, +190=>834,191=>611,192=>667,193=>667,194=>667,195=>667,196=>667,197=>667,198=>1000, +199=>722,200=>667,201=>667,202=>667,203=>667,204=>278,205=>278,206=>278,207=>278, +208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>584,216=>778, +217=>722,218=>722,219=>722,220=>722,221=>667,222=>667,223=>611,224=>556,225=>556, +226=>556,227=>556,228=>556,229=>556,230=>889,231=>500,232=>556,233=>556,234=>556, +235=>556,236=>278,237=>278,238=>278,239=>278,240=>556,241=>556,242=>556,243=>556, +244=>556,245=>556,246=>556,247=>584,248=>611,249=>556,250=>556,251=>556,252=>556, +253=>500,254=>556,255=>500); +// --- EOF --- --- /dev/null +++ b/tcpdf/fonts/hysmyeongjostdmedium.php @@ -1,1 +1,49 @@ + 880, + 'Descent' => -120, + 'CapHeight' => 720, + 'Flags' => 6, + 'FontBBox' => '[-28 -148 1001 880]', + 'ItalicAngle' => 0, + 'StemV' => 60, + 'Style' => '<< /Panose <000000000600000000000000> >>', +); +$cidinfo = array( + 'Registry' => 'Adobe', + 'Ordering' => 'Korea1', + 'Supplement' => '1', +); +$enc = 'UniKS-UCS2-H'; +// underline position, needs checking: +$up = -130; +$ut = 40; + +$dw = 1000; +$cw = array( + 32 => 333, 33 => 416, 34 => 416, 35 => 833, 36 => 625, 37 => 916, 38 => 833, 39 => 250, 40 => 500, 41 => 500, + 42 => 500, 43 => 833, 44 => 291, 45 => 450, 46 => 291, 47 => 375, 48 => 625, 49 => 625, 50 => 625, 51 => 625, + 52 => 625, 53 => 625, 54 => 625, 55 => 625, 56 => 625, 57 => 625, 58 => 333, 59 => 333, 60 => 833, 61 => 833, + 62 => 916, 63 => 500, 64 => 1000, 65 => 791, 66 => 708, 67 => 708, 68 => 750, 69 => 708, 70 => 666, 71 => 750, + 72 => 791, 73 => 375, 74 => 500, 75 => 791, 76 => 666, 77 => 916, 78 => 791, 79 => 750, 80 => 666, 81 => 750, + 82 => 708, 83 => 666, 84 => 791, 85 => 791, 86 => 750, 87 => 1000, 88 => 708, 89 => 708, 90 => 666, 91 => 500, + 92 => 375, 93 => 500, 94 => 500, 95 => 500, 96 => 333, 97 => 541, 98 => 583, 99 => 541, 100 => 583, 101 => 583, + 102 => 375, 103 => 583, 104 => 583, 105 => 291, 106 => 333, 107 => 583, 108 => 291, 109 => 875, 110 => 583, 111 => 583, + 112 => 583, 113 => 583, 114 => 458, 115 => 541, 116 => 375, 117 => 583, 118 => 583, 119 => 833, 120 => 625, 121 => 625, + 122 => 500, 123 => 583, 124 => 583, 125 => 583, 126 => 750, +); +$_cr = array( + //array(97, 97, 500), + array(8094, 8190, 500) +); +foreach($_cr as $_r) { + for($i = $_r[0]; $i <= $_r[1]; $i++) { + $cw[$i+31] = $_r[2]; + } +} +// --- EOF --- + --- /dev/null +++ b/tcpdf/fonts/kozgopromedium.php @@ -1,1 +1,66 @@ + 880, + 'Descent' => -120, + 'CapHeight' => 763, + 'Flags' => 4, + 'FontBBox' => '[-149 -374 1254 1008]', + 'ItalicAngle' => 0, + 'StemV' => 99, + 'Style' => '<< /Panose <0000020b0700000000000000> >>', + 'XHeight' => 549, +); +$cidinfo = array( + 'Registry' => 'Adobe', + 'Ordering' => 'Japan1', + 'Supplement' => '4', +); +$enc = 'UniJIS-UCS2-H'; +// underline position, needs checking: +$up = -75; +$ut = 50; + +$dw = 1000; +$cw = array( + 32 => 224, 33 => 266, 34 => 392, 35 => 551, 36 => 562, 37 => 883, 38 => 677, 39 => 213, 40 => 322, 41 => 322, + 42 => 470, 43 => 677, 44 => 247, 45 => 343, 46 => 245, 47 => 370, 48 => 562, 49 => 562, 50 => 562, 51 => 562, + 52 => 562, 53 => 562, 54 => 562, 55 => 562, 56 => 562, 57 => 562, 58 => 245, 59 => 247, 60 => 677, 61 => 677, + 62 => 677, 63 => 447, 64 => 808, 65 => 661, 66 => 602, 67 => 610, 68 => 708, 69 => 535, 70 => 528, 71 => 689, + 72 => 703, 73 => 275, 74 => 404, 75 => 602, 76 => 514, 77 => 871, 78 => 708, 79 => 727, 80 => 585, 81 => 727, + 82 => 595, 83 => 539, 84 => 541, 85 => 696, 86 => 619, 87 => 922, 88 => 612, 89 => 591, 90 => 584, 91 => 322, + 92 => 562, 93 => 322, 94 => 677, 95 => 568, 96 => 340, 97 => 532, 98 => 612, 99 => 475, 100 => 608, 101 => 543, + 102 => 332, 103 => 603, 104 => 601, 105 => 265, 106 => 276, 107 => 524, 108 => 264, 109 => 901, 110 => 601, 111 => 590, + 112 => 612, 113 => 607, 114 => 367, 115 => 433, 116 => 369, 117 => 597, 118 => 527, 119 => 800, 120 => 511, 121 => 518, + 122 => 468, 123 => 321, 124 => 273, 125 => 321, 126 => 341, 127 => 241, 128 => 362, 129 => 241, 130 => 273, 131 => 677, + 132 => 266, 133 => 562, 134 => 562, 135 => 456, 136 => 562, 137 => 571, 138 => 562, 139 => 416, 140 => 472, 141 => 283, + 142 => 283, 143 => 587, 144 => 588, 145 => 568, 146 => 545, 147 => 545, 148 => 247, 149 => 561, 150 => 330, 151 => 239, + 152 => 418, 153 => 416, 154 => 472, 155 => 1136, 156 => 1288, 157 => 447, 158 => 340, 159 => 340, 160 => 340, 161 => 340, + 162 => 340, 163 => 340, 164 => 455, 165 => 340, 166 => 340, 167 => 340, 168 => 340, 169 => 1136, 170 => 857, 171 => 384, + 172 => 519, 173 => 727, 174 => 952, 175 => 398, 176 => 834, 177 => 264, 178 => 275, 179 => 590, 180 => 918, 181 => 605, + 182 => 677, 183 => 769, 184 => 677, 185 => 473, 186 => 361, 187 => 677, 188 => 347, 189 => 340, 190 => 599, 191 => 284, + 192 => 845, 193 => 845, 194 => 845, 195 => 661, 196 => 661, 197 => 661, 198 => 661, 199 => 661, 200 => 661, 201 => 610, + 202 => 535, 203 => 535, 204 => 535, 205 => 535, 206 => 275, 207 => 275, 208 => 275, 209 => 275, 210 => 715, 211 => 708, + 212 => 727, 213 => 727, 214 => 727, 215 => 727, 216 => 727, 217 => 677, 218 => 696, 219 => 696, 220 => 696, 221 => 696, + 222 => 591, 223 => 584, 224 => 532, 225 => 532, 226 => 532, 227 => 532, 228 => 532, 229 => 532, 230 => 475, 231 => 543, + 232 => 543, 233 => 543, 234 => 543, 235 => 264, 236 => 264, 237 => 264, 238 => 264, 239 => 584, 240 => 601, 241 => 590, + 242 => 590, 243 => 590, 244 => 590, 245 => 590, 246 => 677, 247 => 597, 248 => 597, 249 => 597, 250 => 597, 251 => 518, + 252 => 612, 253 => 518, 254 => 539, 255 => 591, 256 => 584, 257 => 446, 258 => 433, 259 => 683, 260 => 468, 261 => 562, +); +$_cr = array( + array(231, 632, 500), // half-width + array(8718, 8718, 500), + array(9738, 9757, 250), // quarter-width + array(9758, 9778, 333), // third-width + array(12063, 12087, 500) +); +foreach($_cr as $_r) { + for($i = $_r[0]; $i <= $_r[1]; $i++) { + $cw[$i+31] = $_r[2]; + } +} +// --- EOF --- + --- /dev/null +++ b/tcpdf/fonts/kozminproregular.php @@ -1,1 +1,64 @@ + 880, + 'Descent' => -120, + 'CapHeight' => 740, + 'Flags' => 6, + 'FontBBox' => '[-195 -272 1110 1075]', + 'ItalicAngle' => 0, + 'StemV' => 86, + 'XHeight' => 502, +); +$cidinfo = array( + 'Registry' => 'Adobe', + 'Ordering' => 'Japan1', + 'Supplement' => '4', +); +$enc = 'UniJIS-UCS2-H'; +$up = -75; +$ut = 50; + +$dw = 1000; +$cw = array( + 32 => 278, 33 => 299, 34 => 353, 35 => 614, 36 => 614, 37 => 721, 38 => 735, 39 => 216, 40 => 323, 41 => 323, + 42 => 449, 43 => 529, 44 => 219, 45 => 306, 46 => 219, 47 => 453, 48 => 614, 49 => 614, 50 => 614, 51 => 614, + 52 => 614, 53 => 614, 54 => 614, 55 => 614, 56 => 614, 57 => 614, 58 => 219, 59 => 219, 60 => 529, 61 => 529, + 62 => 529, 63 => 486, 64 => 744, 65 => 646, 66 => 604, 67 => 617, 68 => 681, 69 => 567, 70 => 537, 71 => 647, + 72 => 738, 73 => 320, 74 => 433, 75 => 637, 76 => 566, 77 => 904, 78 => 710, 79 => 716, 80 => 605, 81 => 716, + 82 => 623, 83 => 517, 84 => 601, 85 => 690, 86 => 668, 87 => 990, 88 => 681, 89 => 634, 90 => 578, 91 => 316, + 92 => 614, 93 => 316, 94 => 529, 95 => 500, 96 => 387, 97 => 509, 98 => 566, 99 => 478, 100 => 565, 101 => 503, + 102 => 337, 103 => 549, 104 => 580, 105 => 275, 106 => 266, 107 => 544, 108 => 276, 109 => 854, 110 => 579, 111 => 550, + 112 => 578, 113 => 566, 114 => 410, 115 => 444, 116 => 340, 117 => 575, 118 => 512, 119 => 760, 120 => 503, 121 => 529, + 122 => 453, 123 => 326, 124 => 380, 125 => 326, 126 => 387, 127 => 216, 128 => 453, 129 => 216, 130 => 380, 131 => 529, + 132 => 299, 133 => 614, 134 => 614, 135 => 265, 136 => 614, 137 => 475, 138 => 614, 139 => 353, 140 => 451, 141 => 291, + 142 => 291, 143 => 588, 144 => 589, 145 => 500, 146 => 476, 147 => 476, 148 => 219, 149 => 494, 150 => 452, 151 => 216, + 152 => 353, 153 => 353, 154 => 451, 156 => 1075, 157 => 486, 158 => 387, 159 => 387, 160 => 387, 161 => 387, + 162 => 387, 163 => 387, 164 => 387, 165 => 387, 166 => 387, 167 => 387, 168 => 387, 170 => 880, 171 => 448, + 172 => 566, 173 => 716, 174 => 903, 175 => 460, 176 => 805, 177 => 275, 178 => 276, 179 => 550, 180 => 886, 181 => 582, + 182 => 529, 183 => 738, 184 => 529, 185 => 738, 186 => 357, 187 => 529, 188 => 406, 189 => 406, 190 => 575, 191 => 406, + 192 => 934, 193 => 934, 194 => 934, 195 => 646, 196 => 646, 197 => 646, 198 => 646, 199 => 646, 200 => 646, 201 => 617, + 202 => 567, 203 => 567, 204 => 567, 205 => 567, 206 => 320, 207 => 320, 208 => 320, 209 => 320, 210 => 681, 211 => 710, + 212 => 716, 213 => 716, 214 => 716, 215 => 716, 216 => 716, 217 => 529, 218 => 690, 219 => 690, 220 => 690, 221 => 690, + 222 => 634, 223 => 605, 224 => 509, 225 => 509, 226 => 509, 227 => 509, 228 => 509, 229 => 509, 230 => 478, 231 => 503, + 232 => 503, 233 => 503, 234 => 503, 235 => 275, 236 => 275, 237 => 275, 238 => 275, 239 => 550, 240 => 579, 241 => 550, + 242 => 550, 243 => 550, 244 => 550, 245 => 550, 246 => 529, 247 => 575, 248 => 575, 249 => 575, 250 => 575, 251 => 529, + 252 => 578, 253 => 529, 254 => 517, 255 => 634, 256 => 578, 257 => 445, 258 => 444, 259 => 842, 260 => 453, 261 => 614, +); +$_cr = array( + array(231, 632, 500), // half-width + array(8718, 8718, 500), + array(9738, 9757, 250), // quarter-width + array(9758, 9778, 333), // third-width + array(12063, 12087, 500), +); +foreach($_cr as $_r) { + for($i = $_r[0]; $i <= $_r[1]; $i++) { + $cw[$i+31] = $_r[2]; + } +} +// --- EOF --- + --- /dev/null +++ b/tcpdf/fonts/msungstdlight.php @@ -1,1 +1,39 @@ + 880, + 'Descent' => -120, + 'CapHeight' => 880, + 'Flags' => 6, + 'FontBBox' => '[-160 -249 1015 1071]', + 'ItalicAngle' => 0, + 'StemV' => 93, +); +$cidinfo = array( + 'Registry' => 'Adobe', + 'Ordering' => 'CNS1', + 'Supplement' => '3', +); +$enc = 'UniCNS-UCS2-H'; +$up = -130; +$ut = 40; + +$dw = 1000; +$cw = array( + 32 => 250, 33 => 250, 34 => 408, 35 => 668, 36 => 490, 37 => 875, 38 => 698, 39 => 250, 40 => 240, 41 => 240, + 42 => 417, 43 => 667, 44 => 250, 45 => 313, 46 => 250, 47 => 520, 48 => 500, 49 => 500, 50 => 500, 51 => 500, + 52 => 500, 53 => 500, 54 => 500, 55 => 500, 56 => 500, 57 => 500, 58 => 250, 59 => 250, 60 => 667, 61 => 667, + 62 => 667, 63 => 396, 64 => 921, 65 => 677, 66 => 615, 67 => 719, 68 => 760, 69 => 625, 70 => 552, 71 => 771, + 72 => 802, 73 => 354, 74 => 354, 75 => 781, 76 => 604, 77 => 927, 78 => 750, 79 => 823, 80 => 563, 81 => 823, + 82 => 729, 83 => 542, 84 => 698, 85 => 771, 86 => 729, 87 => 948, 88 => 771, 89 => 677, 90 => 635, 91 => 344, + 92 => 520, 93 => 344, 94 => 469, 95 => 500, 96 => 250, 97 => 469, 98 => 521, 99 => 427, 100 => 521, 101 => 438, + 102 => 271, 103 => 469, 104 => 531, 105 => 250, 106 => 250, 107 => 458, 108 => 240, 109 => 802, 110 => 531, 111 => 500, + 112 => 521, 113 => 521, 114 => 365, 115 => 333, 116 => 292, 117 => 521, 118 => 458, 119 => 677, 120 => 479, 121 => 458, + 122 => 427, 123 => 480, 124 => 496, 125 => 480, 126 => 667, + 17601 => 500, +); +// --- EOF --- + --- /dev/null +++ b/tcpdf/fonts/stsongstdlight.php @@ -1,1 +1,40 @@ + 752, + 'Descent' => -271, + 'CapHeight' => 737, + 'Flags' => 6, + 'FontBBox' => '[-25 -254 1000 880]', + 'ItalicAngle' => 0, + 'StemV' => 58, + 'Style' => '<< /Panose <000000000400000000000000> >>', +); +$cidinfo = array( + 'Registry' => 'Adobe', + 'Ordering' => 'GB1', + 'Supplement' => '2', +); +$enc = 'UniGB-UCS2-H'; +// underline position, needs checking: +$up = -130; +$ut = 40; + +$dw = 1000; +$cw = array( + 32 => 207, 33 => 270, 34 => 342, 35 => 467, 36 => 462, 37 => 797, 38 => 710, 39 => 239, 40 => 374, 41 => 374, + 42 => 423, 43 => 605, 44 => 238, 45 => 375, 46 => 238, 47 => 334, 48 => 462, 49 => 462, 50 => 462, 51 => 462, + 52 => 462, 53 => 462, 54 => 462, 55 => 462, 56 => 462, 57 => 462, 58 => 238, 59 => 238, 60 => 605, 61 => 605, + 62 => 605, 63 => 344, 64 => 748, 65 => 684, 66 => 560, 67 => 695, 68 => 739, 69 => 563, 70 => 511, 71 => 729, + 72 => 793, 73 => 318, 74 => 312, 75 => 666, 76 => 526, 77 => 896, 78 => 758, 79 => 772, 80 => 544, 81 => 772, + 82 => 628, 83 => 465, 84 => 607, 85 => 753, 86 => 711, 87 => 972, 88 => 647, 89 => 620, 90 => 607, 91 => 374, + 92 => 333, 93 => 374, 94 => 606, 95 => 500, 96 => 239, 97 => 417, 98 => 503, 99 => 427, 100 => 529, 101 => 415, + 102 => 264, 103 => 444, 104 => 518, 105 => 241, 106 => 230, 107 => 495, 108 => 228, 109 => 793, 110 => 527, 111 => 524, + 112 => 524, 113 => 504, 114 => 338, 115 => 336, 116 => 277, 117 => 517, 118 => 450, 119 => 652, 120 => 466, 121 => 452, + 122 => 407, 123 => 370, 124 => 258, 125 => 370, 126 => 605 +); +// --- EOF --- + --- /dev/null +++ b/tcpdf/fonts/symbol.php @@ -1,1 +1,33 @@ +250,1=>250,2=>250,3=>250,4=>250,5=>250,6=>250,7=>250,8=>250,9=>250, +10=>250,11=>250,12=>250,13=>250,14=>250,15=>250,16=>250,17=>250,18=>250,19=>250, +20=>250,21=>250,22=>250,23=>250,24=>250,25=>250,26=>250,27=>250,28=>250,29=>250, +30=>250,31=>250,32=>250,33=>333,34=>713,35=>500,36=>549,37=>833,38=>778,39=>439, +40=>333,41=>333,42=>500,43=>549,44=>250,45=>549,46=>250,47=>278,48=>500,49=>500, +50=>500,51=>500,52=>500,53=>500,54=>500,55=>500,56=>500,57=>500,58=>278,59=>278, +60=>549,61=>549,62=>549,63=>444,64=>549,65=>722,66=>667,67=>722,68=>612,69=>611, +70=>763,71=>603,72=>722,73=>333,74=>631,75=>722,76=>686,77=>889,78=>722,79=>722, +80=>768,81=>741,82=>556,83=>592,84=>611,85=>690,86=>439,87=>768,88=>645,89=>795, +90=>611,91=>333,92=>863,93=>333,94=>658,95=>500,96=>500,97=>631,98=>549,99=>549, +100=>494,101=>439,102=>521,103=>411,104=>603,105=>329,106=>603,107=>549,108=>549, +109=>576,110=>521,111=>549,112=>549,113=>521,114=>549,115=>603,116=>439,117=>576, +118=>713,119=>686,120=>493,121=>686,122=>494,123=>480,124=>200,125=>480,126=>549, +127=>0,128=>0,129=>0,130=>0,131=>0,132=>0,133=>0,134=>0,135=>0,136=>0,137=>0, +138=>0,139=>0,140=>0,141=>0,142=>0,143=>0,144=>0,145=>0,146=>0,147=>0,148=>0, +149=>0,150=>0,151=>0,152=>0,153=>0,154=>0,155=>0,156=>0,157=>0,158=>0,159=>0, +160=>750,161=>620,162=>247,163=>549,164=>167,165=>713,166=>500,167=>753,168=>753, +169=>753,170=>753,171=>1042,172=>987,173=>603,174=>987,175=>603,176=>400,177=>549, +178=>411,179=>549,180=>549,181=>713,182=>494,183=>460,184=>549,185=>549,186=>549, +187=>549,188=>1000,189=>603,190=>1000,191=>658,192=>823,193=>686,194=>795,195=>987, +196=>768,197=>768,198=>823,199=>768,200=>768,201=>713,202=>713,203=>713,204=>713, +205=>713,206=>713,207=>713,208=>768,209=>713,210=>790,211=>790,212=>890,213=>823, +214=>549,215=>250,216=>713,217=>603,218=>603,219=>1042,220=>987,221=>603,222=>987, +223=>603,224=>494,225=>329,226=>790,227=>790,228=>786,229=>713,230=>384,231=>384, +232=>384,233=>384,234=>384,235=>384,236=>494,237=>494,238=>494,239=>494,240=>0, +241=>329,242=>274,243=>686,244=>686,245=>686,246=>384,247=>384,248=>384,249=>384, +250=>384,251=>384,252=>494,253=>494,254=>494,255=>0); +// --- EOF --- --- /dev/null +++ b/tcpdf/fonts/times.php @@ -1,1 +1,34 @@ +250,1=>250,2=>250,3=>250,4=>250,5=>250,6=>250,7=>250,8=>250,9=>250, +10=>250,11=>250,12=>250,13=>250,14=>250,15=>250,16=>250,17=>250,18=>250,19=>250, +20=>250,21=>250,22=>250,23=>250,24=>250,25=>250,26=>250,27=>250,28=>250,29=>250, +30=>250,31=>250,32=>250,33=>333,34=>408,35=>500,36=>500,37=>833,38=>778,39=>180, +40=>333,41=>333,42=>500,43=>564,44=>250,45=>333,46=>250,47=>278,48=>500,49=>500, +50=>500,51=>500,52=>500,53=>500,54=>500,55=>500,56=>500,57=>500,58=>278,59=>278, +60=>564,61=>564,62=>564,63=>444,64=>921,65=>722,66=>667,67=>667,68=>722,69=>611, +70=>556,71=>722,72=>722,73=>333,74=>389,75=>722,76=>611,77=>889,78=>722,79=>722, +80=>556,81=>722,82=>667,83=>556,84=>611,85=>722,86=>722,87=>944,88=>722,89=>722, +90=>611,91=>333,92=>278,93=>333,94=>469,95=>500,96=>333,97=>444,98=>500,99=>444, +100=>500,101=>444,102=>333,103=>500,104=>500,105=>278,106=>278,107=>500,108=>278, +109=>778,110=>500,111=>500,112=>500,113=>500,114=>333,115=>389,116=>278,117=>500, +118=>500,119=>722,120=>500,121=>500,122=>444,123=>480,124=>200,125=>480,126=>541, +127=>350,128=>500,129=>350,130=>333,131=>500,132=>444,133=>1000,134=>500,135=>500, +136=>333,137=>1000,138=>556,139=>333,140=>889,141=>350,142=>611,143=>350,144=>350, +145=>333,146=>333,147=>444,148=>444,149=>350,150=>500,151=>1000,152=>333,153=>980, +154=>389,155=>333,156=>722,157=>350,158=>444,159=>722,160=>250,161=>333,162=>500, +163=>500,164=>500,165=>500,166=>200,167=>500,168=>333,169=>760,170=>276,171=>500, +172=>564,173=>333,174=>760,175=>333,176=>400,177=>564,178=>300,179=>300,180=>333, +181=>500,182=>453,183=>250,184=>333,185=>300,186=>310,187=>500,188=>750,189=>750, +190=>750,191=>444,192=>722,193=>722,194=>722,195=>722,196=>722,197=>722,198=>889, +199=>667,200=>611,201=>611,202=>611,203=>611,204=>333,205=>333,206=>333,207=>333, +208=>722,209=>722,210=>722,211=>722,212=>722,213=>722,214=>722,215=>564,216=>722, +217=>722,218=>722,219=>722,220=>722,221=>722,222=>556,223=>500,224=>444,225=>444, +226=>444,227=>444,228=>444,229=>444,230=>667,231=>444,232=>444,233=>444,234=>444, +235=>444,236=>278,237=>278,238=>278,239=>278,240=>500,241=>500,242=>500,243=>500, +244=>500,245=>500,246=>500,247=>564,248=>500,249=>500,250=>500,251=>500,252=>500, +253=>500,254=>500,255=>500); +// --- EOF --- --- /dev/null +++ b/tcpdf/fonts/timesb.php @@ -1,1 +1,34 @@ +250,1=>250,2=>250,3=>250,4=>250,5=>250,6=>250,7=>250,8=>250,9=>250, +10=>250,11=>250,12=>250,13=>250,14=>250,15=>250,16=>250,17=>250,18=>250,19=>250, +20=>250,21=>250,22=>250,23=>250,24=>250,25=>250,26=>250,27=>250,28=>250,29=>250, +30=>250,31=>250,32=>250,33=>333,34=>555,35=>500,36=>500,37=>1000,38=>833,39=>278, +40=>333,41=>333,42=>500,43=>570,44=>250,45=>333,46=>250,47=>278,48=>500,49=>500, +50=>500,51=>500,52=>500,53=>500,54=>500,55=>500,56=>500,57=>500,58=>333,59=>333, +60=>570,61=>570,62=>570,63=>500,64=>930,65=>722,66=>667,67=>722,68=>722,69=>667, +70=>611,71=>778,72=>778,73=>389,74=>500,75=>778,76=>667,77=>944,78=>722,79=>778, +80=>611,81=>778,82=>722,83=>556,84=>667,85=>722,86=>722,87=>1000,88=>722,89=>722, +90=>667,91=>333,92=>278,93=>333,94=>581,95=>500,96=>333,97=>500,98=>556,99=>444, +100=>556,101=>444,102=>333,103=>500,104=>556,105=>278,106=>333,107=>556,108=>278, +109=>833,110=>556,111=>500,112=>556,113=>556,114=>444,115=>389,116=>333,117=>556, +118=>500,119=>722,120=>500,121=>500,122=>444,123=>394,124=>220,125=>394,126=>520, +127=>350,128=>500,129=>350,130=>333,131=>500,132=>500,133=>1000,134=>500,135=>500, +136=>333,137=>1000,138=>556,139=>333,140=>1000,141=>350,142=>667,143=>350,144=>350, +145=>333,146=>333,147=>500,148=>500,149=>350,150=>500,151=>1000,152=>333,153=>1000, +154=>389,155=>333,156=>722,157=>350,158=>444,159=>722,160=>250,161=>333,162=>500, +163=>500,164=>500,165=>500,166=>220,167=>500,168=>333,169=>747,170=>300,171=>500, +172=>570,173=>333,174=>747,175=>333,176=>400,177=>570,178=>300,179=>300,180=>333, +181=>556,182=>540,183=>250,184=>333,185=>300,186=>330,187=>500,188=>750,189=>750, +190=>750,191=>500,192=>722,193=>722,194=>722,195=>722,196=>722,197=>722,198=>1000, +199=>722,200=>667,201=>667,202=>667,203=>667,204=>389,205=>389,206=>389,207=>389, +208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>570,216=>778, +217=>722,218=>722,219=>722,220=>722,221=>722,222=>611,223=>556,224=>500,225=>500, +226=>500,227=>500,228=>500,229=>500,230=>722,231=>444,232=>444,233=>444,234=>444, +235=>444,236=>278,237=>278,238=>278,239=>278,240=>500,241=>556,242=>500,243=>500, +244=>500,245=>500,246=>500,247=>570,248=>500,249=>556,250=>556,251=>556,252=>556, +253=>500,254=>556,255=>500); +// --- EOF --- --- /dev/null +++ b/tcpdf/fonts/timesbi.php @@ -1,1 +1,34 @@ +250,1=>250,2=>250,3=>250,4=>250,5=>250,6=>250,7=>250,8=>250,9=>250, +10=>250,11=>250,12=>250,13=>250,14=>250,15=>250,16=>250,17=>250,18=>250,19=>250, +20=>250,21=>250,22=>250,23=>250,24=>250,25=>250,26=>250,27=>250,28=>250,29=>250, +30=>250,31=>250,32=>250,33=>389,34=>555,35=>500,36=>500,37=>833,38=>778,39=>278, +40=>333,41=>333,42=>500,43=>570,44=>250,45=>333,46=>250,47=>278,48=>500,49=>500, +50=>500,51=>500,52=>500,53=>500,54=>500,55=>500,56=>500,57=>500,58=>333,59=>333, +60=>570,61=>570,62=>570,63=>500,64=>832,65=>667,66=>667,67=>667,68=>722,69=>667, +70=>667,71=>722,72=>778,73=>389,74=>500,75=>667,76=>611,77=>889,78=>722,79=>722, +80=>611,81=>722,82=>667,83=>556,84=>611,85=>722,86=>667,87=>889,88=>667,89=>611, +90=>611,91=>333,92=>278,93=>333,94=>570,95=>500,96=>333,97=>500,98=>500,99=>444, +100=>500,101=>444,102=>333,103=>500,104=>556,105=>278,106=>278,107=>500,108=>278, +109=>778,110=>556,111=>500,112=>500,113=>500,114=>389,115=>389,116=>278,117=>556, +118=>444,119=>667,120=>500,121=>444,122=>389,123=>348,124=>220,125=>348,126=>570, +127=>350,128=>500,129=>350,130=>333,131=>500,132=>500,133=>1000,134=>500,135=>500, +136=>333,137=>1000,138=>556,139=>333,140=>944,141=>350,142=>611,143=>350,144=>350, +145=>333,146=>333,147=>500,148=>500,149=>350,150=>500,151=>1000,152=>333,153=>1000, +154=>389,155=>333,156=>722,157=>350,158=>389,159=>611,160=>250,161=>389,162=>500, +163=>500,164=>500,165=>500,166=>220,167=>500,168=>333,169=>747,170=>266,171=>500, +172=>606,173=>333,174=>747,175=>333,176=>400,177=>570,178=>300,179=>300,180=>333, +181=>576,182=>500,183=>250,184=>333,185=>300,186=>300,187=>500,188=>750,189=>750, +190=>750,191=>500,192=>667,193=>667,194=>667,195=>667,196=>667,197=>667,198=>944, +199=>667,200=>667,201=>667,202=>667,203=>667,204=>389,205=>389,206=>389,207=>389, +208=>722,209=>722,210=>722,211=>722,212=>722,213=>722,214=>722,215=>570,216=>722, +217=>722,218=>722,219=>722,220=>722,221=>611,222=>611,223=>500,224=>500,225=>500, +226=>500,227=>500,228=>500,229=>500,230=>722,231=>444,232=>444,233=>444,234=>444, +235=>444,236=>278,237=>278,238=>278,239=>278,240=>500,241=>556,242=>500,243=>500, +244=>500,245=>500,246=>500,247=>570,248=>500,249=>556,250=>556,251=>556,252=>556, +253=>444,254=>500,255=>444); +// --- EOF --- --- /dev/null +++ b/tcpdf/fonts/timesi.php @@ -1,1 +1,34 @@ +250,1=>250,2=>250,3=>250,4=>250,5=>250,6=>250,7=>250,8=>250,9=>250, +10=>250,11=>250,12=>250,13=>250,14=>250,15=>250,16=>250,17=>250,18=>250,19=>250, +20=>250,21=>250,22=>250,23=>250,24=>250,25=>250,26=>250,27=>250,28=>250,29=>250, +30=>250,31=>250,32=>250,33=>333,34=>420,35=>500,36=>500,37=>833,38=>778,39=>214, +40=>333,41=>333,42=>500,43=>675,44=>250,45=>333,46=>250,47=>278,48=>500,49=>500, +50=>500,51=>500,52=>500,53=>500,54=>500,55=>500,56=>500,57=>500,58=>333,59=>333, +60=>675,61=>675,62=>675,63=>500,64=>920,65=>611,66=>611,67=>667,68=>722,69=>611, +70=>611,71=>722,72=>722,73=>333,74=>444,75=>667,76=>556,77=>833,78=>667,79=>722, +80=>611,81=>722,82=>611,83=>500,84=>556,85=>722,86=>611,87=>833,88=>611,89=>556, +90=>556,91=>389,92=>278,93=>389,94=>422,95=>500,96=>333,97=>500,98=>500,99=>444, +100=>500,101=>444,102=>278,103=>500,104=>500,105=>278,106=>278,107=>444,108=>278, +109=>722,110=>500,111=>500,112=>500,113=>500,114=>389,115=>389,116=>278,117=>500, +118=>444,119=>667,120=>444,121=>444,122=>389,123=>400,124=>275,125=>400,126=>541, +127=>350,128=>500,129=>350,130=>333,131=>500,132=>556,133=>889,134=>500,135=>500, +136=>333,137=>1000,138=>500,139=>333,140=>944,141=>350,142=>556,143=>350,144=>350, +145=>333,146=>333,147=>556,148=>556,149=>350,150=>500,151=>889,152=>333,153=>980, +154=>389,155=>333,156=>667,157=>350,158=>389,159=>556,160=>250,161=>389,162=>500, +163=>500,164=>500,165=>500,166=>275,167=>500,168=>333,169=>760,170=>276,171=>500, +172=>675,173=>333,174=>760,175=>333,176=>400,177=>675,178=>300,179=>300,180=>333, +181=>500,182=>523,183=>250,184=>333,185=>300,186=>310,187=>500,188=>750,189=>750, +190=>750,191=>500,192=>611,193=>611,194=>611,195=>611,196=>611,197=>611,198=>889, +199=>667,200=>611,201=>611,202=>611,203=>611,204=>333,205=>333,206=>333,207=>333, +208=>722,209=>667,210=>722,211=>722,212=>722,213=>722,214=>722,215=>675,216=>722, +217=>722,218=>722,219=>722,220=>722,221=>556,222=>611,223=>500,224=>500,225=>500, +226=>500,227=>500,228=>500,229=>500,230=>667,231=>444,232=>444,233=>444,234=>444, +235=>444,236=>278,237=>278,238=>278,239=>278,240=>500,241=>500,242=>500,243=>500, +244=>500,245=>500,246=>500,247=>675,248=>500,249=>500,250=>500,251=>500,252=>500, +253=>444,254=>500,255=>444); +// --- EOF --- --- /dev/null +++ b/tcpdf/fonts/uni2cid_ac15.php @@ -1,1 +1,23614 @@ +1, +33=>2, +34=>3, +35=>4, +36=>5, +37=>6, +38=>7, +39=>8, +40=>9, +41=>10, +42=>11, +43=>12, +44=>13, +45=>14, +46=>15, +47=>16, +48=>17, +49=>18, +50=>19, +51=>20, +52=>21, +53=>22, +54=>23, +55=>24, +56=>25, +57=>26, +58=>27, +59=>28, +60=>29, +61=>30, +62=>31, +63=>32, +64=>33, +65=>34, +66=>35, +67=>36, +68=>37, +69=>38, +70=>39, +71=>40, +72=>41, +73=>42, +74=>43, +75=>44, +76=>45, +77=>46, +78=>47, +79=>48, +80=>49, +81=>50, +82=>51, +83=>52, +84=>53, +85=>54, +86=>55, +87=>56, +88=>57, +89=>58, +90=>59, +91=>60, +92=>61, +93=>62, +94=>63, +95=>64, +96=>65, +97=>66, +98=>67, +99=>68, +100=>69, +101=>70, +102=>71, +103=>72, +104=>73, +105=>74, +106=>75, +107=>76, +108=>77, +109=>78, +110=>79, +111=>80, +112=>81, +113=>82, +114=>83, +115=>84, +116=>85, +117=>86, +118=>87, +119=>88, +120=>89, +121=>90, +122=>91, +123=>92, +124=>93, +125=>94, +126=>95, +12288=>99, +65292=>100, +12289=>101, +12290=>102, +65294=>103, +8226=>104, +8231=>104, +65307=>105, +65306=>106, +65311=>107, +65281=>108, +65072=>109, +8230=>110, +8943=>110, +8229=>111, +65104=>112, +65380=>113, +65105=>113, +65106=>114, +183=>115, +65108=>116, +65109=>117, +65110=>118, +65111=>119, +65372=>120, +8211=>121, +65073=>122, +8212=>123, +65288=>128, +65289=>129, +65077=>130, +65078=>131, +65371=>132, +65373=>133, +65079=>134, +65080=>135, +12308=>136, +12309=>137, +65081=>138, +65082=>139, +12304=>140, +12305=>141, +65083=>142, +65084=>143, +12298=>144, +12299=>145, +65085=>146, +65086=>147, +12296=>148, +12297=>149, +65087=>150, +65088=>151, +12300=>152, +12301=>153, +65089=>154, +65090=>155, +12302=>156, +12303=>157, +65091=>158, +65092=>159, +65113=>160, +65114=>161, +65115=>162, +65116=>163, +65117=>164, +65118=>165, +8216=>166, +8217=>167, +8220=>168, +8221=>169, +12317=>170, +12318=>171, +8245=>172, +8242=>173, +65283=>174, +65286=>175, +65290=>176, +8251=>177, +167=>178, +12291=>179, +9675=>180, +9679=>181, +9651=>182, +9650=>183, +9678=>184, +9734=>185, +9733=>186, +9671=>187, +9670=>188, +9633=>189, +9632=>190, +9661=>191, +9660=>192, +12963=>193, +8453=>194, +175=>195, +772=>195, +8254=>195, +65507=>196, +65343=>197, +717=>198, +65097=>199, +65098=>200, +65101=>201, +65102=>202, +65099=>203, +65100=>204, +65119=>205, +65120=>206, +65121=>207, +65291=>208, +65293=>209, +215=>210, +247=>211, +177=>212, +8730=>213, +65308=>214, +65310=>215, +65309=>216, +8806=>217, +8807=>218, +8800=>219, +8734=>220, +8786=>221, +8801=>222, +65122=>223, +65123=>224, +65124=>225, +65125=>226, +65126=>227, +8764=>228, +65374=>228, +8745=>229, +8746=>230, +8869=>231, +8736=>232, +8735=>233, +8895=>234, +13266=>235, +13265=>236, +8747=>237, +8750=>238, +8757=>239, +8756=>240, +9792=>241, +9794=>242, +8853=>243, +9793=>243, +8857=>244, +9737=>244, +8593=>245, +8595=>246, +8594=>247, +8592=>248, +8598=>249, +8599=>250, +8601=>251, +8600=>252, +8741=>253, +8739=>254, +8725=>257, +65295=>257, +65128=>258, +65340=>258, +65284=>259, +165=>260, +65509=>260, +12306=>261, +162=>262, +65504=>262, +163=>263, +65505=>263, +65285=>264, +65312=>265, +8451=>266, +8457=>267, +65129=>268, +65130=>269, +65131=>270, +13269=>271, +13212=>272, +13213=>273, +13214=>274, +13262=>275, +13217=>276, +13198=>277, +13199=>278, +13252=>279, +176=>280, +20825=>281, +58834=>281, +20827=>282, +58835=>282, +20830=>283, +58837=>283, +20829=>284, +58836=>284, +20833=>285, +20835=>286, +21991=>287, +29929=>288, +58044=>288, +31950=>289, +58191=>289, +9601=>290, +9602=>291, +9603=>292, +9604=>293, +9605=>294, +9606=>295, +9607=>296, +9608=>297, +9615=>298, +9614=>299, +9613=>300, +9612=>301, +9611=>302, +9610=>303, +9609=>304, +9532=>305, +9524=>306, +9516=>307, +9508=>308, +9500=>309, +9620=>310, +9472=>311, +9474=>312, +9621=>313, +9484=>314, +9488=>315, +9492=>316, +9496=>317, +9581=>318, +9582=>319, +9584=>320, +9583=>321, +9552=>322, +9566=>323, +9578=>324, +9569=>325, +9698=>326, +9699=>327, +9701=>328, +9700=>329, +9585=>330, +9586=>331, +9587=>332, +65296=>333, +65297=>334, +65298=>335, +65299=>336, +65300=>337, +65301=>338, +65302=>339, +65303=>340, +65304=>341, +65305=>342, +8544=>343, +8545=>344, +8546=>345, +8547=>346, +8548=>347, +8549=>348, +8550=>349, +8551=>350, +8552=>351, +8553=>352, +12321=>353, +12322=>354, +12323=>355, +12324=>356, +12325=>357, +12326=>358, +12327=>359, +12328=>360, +12329=>361, +12344=>362, +21316=>363, +57443=>363, +12345=>363, +12346=>364, +65313=>365, +65314=>366, +65315=>367, +65316=>368, +65317=>369, +65318=>370, +65319=>371, +65320=>372, +65321=>373, +65322=>374, +65323=>375, +65324=>376, +65325=>377, +65326=>378, +65327=>379, +65328=>380, +65329=>381, +65330=>382, +65331=>383, +65332=>384, +65333=>385, +65334=>386, +65335=>387, +65336=>388, +65337=>389, +65338=>390, +65345=>391, +65346=>392, +65347=>393, +65348=>394, +65349=>395, +65350=>396, +65351=>397, +65352=>398, +65353=>399, +65354=>400, +65355=>401, +65356=>402, +65357=>403, +65358=>404, +65359=>405, +65360=>406, +65361=>407, +65362=>408, +65363=>409, +65364=>410, +65365=>411, +65366=>412, +65367=>413, +65368=>414, +65369=>415, +65370=>416, +913=>417, +914=>418, +915=>419, +916=>420, +917=>421, +918=>422, +919=>423, +920=>424, +921=>425, +922=>426, +923=>427, +924=>428, +925=>429, +926=>430, +927=>431, +928=>432, +929=>433, +931=>434, +932=>435, +933=>436, +934=>437, +935=>438, +936=>439, +937=>440, +945=>441, +946=>442, +947=>443, +948=>444, +949=>445, +950=>446, +951=>447, +952=>448, +953=>449, +954=>450, +955=>451, +956=>452, +957=>453, +958=>454, +959=>455, +960=>456, +961=>457, +963=>458, +964=>459, +965=>460, +966=>461, +967=>462, +968=>463, +969=>464, +12549=>465, +12550=>466, +12551=>467, +12552=>468, +12553=>469, +12554=>470, +12555=>471, +12556=>472, +12557=>473, +12558=>474, +12559=>475, +12560=>476, +12561=>477, +12562=>478, +12563=>479, +12564=>480, +12565=>481, +12566=>482, +12567=>483, +12568=>484, +12569=>485, +12570=>486, +12571=>487, +12572=>488, +12573=>489, +12574=>490, +12575=>491, +12576=>492, +12577=>493, +12578=>494, +12579=>495, +12580=>496, +12581=>497, +12582=>498, +12583=>499, +12584=>500, +12585=>501, +729=>502, +714=>503, +711=>504, +780=>504, +715=>505, +9312=>506, +63153=>506, +9313=>507, +63154=>507, +9314=>508, +63155=>508, +9315=>509, +63156=>509, +9316=>510, +63157=>510, +9317=>511, +63158=>511, +9318=>512, +63159=>512, +9319=>513, +63160=>513, +9320=>514, +63161=>514, +9321=>515, +63162=>515, +9332=>516, +63163=>516, +9333=>517, +63164=>517, +9334=>518, +63165=>518, +9335=>519, +63166=>519, +9336=>520, +63167=>520, +9337=>521, +63168=>521, +9338=>522, +63169=>522, +9339=>523, +63170=>523, +9340=>524, +63171=>524, +9341=>525, +63172=>525, +8560=>526, +63173=>526, +8561=>527, +63174=>527, +8562=>528, +63175=>528, +8563=>529, +63176=>529, +8564=>530, +63177=>530, +8565=>531, +63178=>531, +8566=>532, +63179=>532, +8567=>533, +63180=>533, +8568=>534, +63181=>534, +8569=>535, +63182=>535, +20008=>536, +12033=>536, +20022=>537, +12034=>537, +63183=>537, +20031=>538, +12035=>538, +63184=>538, +12037=>539, +20101=>539, +63185=>539, +12039=>540, +20128=>540, +63186=>540, +20866=>541, +12044=>541, +63187=>541, +20886=>542, +12045=>542, +63188=>542, +20907=>543, +12046=>543, +63189=>543, +12051=>544, +21241=>544, +63190=>544, +12054=>545, +21304=>545, +63191=>545, +12057=>546, +21353=>546, +63192=>546, +12059=>547, +21430=>547, +63193=>547, +12065=>548, +12066=>548, +22786=>548, +22794=>548, +63194=>548, +12071=>549, +23424=>549, +63195=>549, +12078=>550, +24027=>550, +63196=>550, +24186=>551, +12083=>551, +63197=>551, +24191=>552, +12084=>552, +63198=>552, +24308=>553, +12085=>553, +24400=>554, +12089=>554, +63200=>554, +24417=>555, +12090=>555, +63201=>555, +12097=>556, +25908=>556, +63202=>556, +12102=>557, +26080=>557, +30098=>558, +63204=>558, +12135=>558, +30326=>559, +12136=>559, +12193=>560, +36789=>560, +63206=>560, +12202=>561, +38582=>561, +9216=>562, +9217=>563, +9218=>564, +9219=>565, +9220=>566, +9221=>567, +9222=>568, +9223=>569, +9224=>570, +9225=>571, +9226=>572, +9227=>573, +9228=>574, +9229=>575, +9230=>576, +9231=>577, +9232=>578, +9233=>579, +9234=>580, +9235=>581, +9236=>582, +9237=>583, +9238=>584, +9239=>585, +9240=>586, +9241=>587, +9242=>588, +9243=>589, +9244=>590, +9245=>591, +9246=>592, +9247=>593, +9249=>594, +12032=>595, +19968=>595, +12036=>596, +20057=>596, +19969=>597, +19971=>598, +20035=>599, +20061=>600, +20102=>601, +12038=>602, +20108=>602, +20154=>603, +12040=>603, +20799=>604, +12041=>604, +20837=>605, +12042=>605, +20843=>606, +12043=>606, +12047=>607, +20960=>607, +12049=>608, +20992=>608, +20993=>609, +12050=>610, +21147=>610, +12052=>611, +21269=>611, +21313=>612, +12055=>612, +21340=>613, +12056=>613, +12060=>614, +21448=>614, +19977=>615, +19979=>616, +19976=>617, +19978=>618, +20011=>619, +20024=>620, +20961=>621, +20037=>622, +20040=>623, +20063=>624, +20062=>625, +20110=>626, +20129=>627, +20800=>628, +64012=>628, +20995=>629, +21242=>630, +21315=>631, +21449=>632, +12061=>633, +21475=>633, +22303=>634, +12063=>634, +22763=>635, +12064=>635, +22805=>636, +12067=>636, +22823=>637, +12068=>637, +22899=>638, +12069=>638, +12070=>639, +23376=>639, +23377=>640, +23379=>641, +23544=>642, +12072=>642, +23567=>643, +12073=>643, +23586=>644, +12074=>644, +23608=>645, +12075=>645, +12077=>646, +23665=>646, +24029=>647, +24037=>648, +12079=>648, +12080=>649, +24049=>649, +24050=>650, +24051=>651, +24062=>652, +12081=>652, +24178=>653, +12082=>653, +24318=>654, +12086=>654, +24331=>655, +12087=>655, +24339=>656, +12088=>656, +25165=>657, +19985=>658, +19984=>659, +19981=>660, +20013=>661, +20016=>662, +20025=>663, +20043=>664, +23609=>665, +20104=>666, +20113=>667, +20117=>668, +20114=>669, +20116=>670, +20130=>671, +20161=>672, +20160=>673, +20163=>674, +20166=>675, +20167=>676, +20173=>677, +20170=>678, +20171=>679, +20164=>680, +20803=>681, +20801=>682, +20839=>683, +20845=>684, +20846=>685, +20844=>686, +20887=>687, +20982=>688, +20998=>689, +20999=>690, +21000=>691, +21243=>692, +21246=>693, +21247=>694, +21270=>695, +21305=>696, +21320=>697, +21319=>698, +21317=>699, +21342=>700, +21380=>701, +21451=>702, +21450=>703, +21453=>704, +22764=>705, +22825=>706, +22827=>707, +22826=>708, +22829=>709, +23380=>710, +23569=>711, +23588=>712, +23610=>713, +23663=>714, +24052=>715, +24187=>716, +24319=>717, +24340=>718, +24341=>719, +24515=>720, +12092=>720, +25096=>721, +12093=>721, +25142=>722, +12094=>722, +25163=>723, +12095=>723, +25166=>724, +12096=>725, +25903=>725, +25991=>726, +12098=>726, +26007=>727, +12099=>727, +26020=>728, +12100=>728, +26041=>729, +12101=>729, +26085=>730, +12103=>730, +26352=>731, +12104=>731, +26376=>732, +12105=>732, +26408=>733, +12106=>733, +27424=>734, +12107=>734, +27490=>735, +12108=>735, +27513=>736, +12109=>736, +27595=>737, +12111=>737, +27604=>738, +12112=>738, +27611=>739, +12113=>739, +27663=>740, +12114=>740, +27700=>741, +12116=>741, +28779=>742, +12117=>742, +29226=>743, +12118=>743, +29238=>744, +12119=>744, +29243=>745, +12120=>745, +29255=>746, +12122=>746, +29273=>747, +12123=>747, +29275=>748, +12124=>748, +29356=>749, +12125=>749, +29579=>750, +19993=>751, +19990=>752, +19989=>753, +19988=>754, +19992=>755, +20027=>756, +20045=>757, +20047=>758, +20046=>759, +20197=>760, +20184=>761, +20180=>762, +20181=>763, +20182=>764, +20183=>765, +20195=>766, +20196=>767, +20185=>768, +20190=>769, +20805=>770, +20804=>771, +20873=>772, +20874=>773, +20908=>774, +20985=>775, +20986=>776, +20984=>777, +21002=>778, +21152=>779, +21151=>780, +57435=>781, +21253=>781, +21254=>782, +21271=>783, +21277=>784, +20191=>785, +21322=>786, +21321=>787, +21345=>788, +21344=>789, +21359=>790, +21358=>791, +21435=>792, +21487=>793, +21476=>794, +21491=>795, +21484=>796, +21486=>797, +21481=>798, +21480=>799, +21500=>800, +21496=>801, +21493=>802, +21483=>803, +21478=>804, +21482=>805, +21490=>806, +21489=>807, +21488=>808, +21477=>809, +21485=>810, +21499=>811, +22235=>812, +22234=>813, +22806=>814, +22830=>815, +22833=>816, +22900=>817, +22902=>818, +23381=>819, +23427=>820, +23612=>821, +24040=>822, +24039=>823, +24038=>824, +24066=>825, +24067=>826, +24179=>827, +24188=>828, +24321=>829, +24344=>830, +24343=>831, +24517=>832, +25098=>833, +25171=>834, +25172=>835, +25170=>836, +25169=>837, +26021=>838, +26086=>839, +26414=>840, +26412=>841, +26410=>842, +26411=>843, +26413=>844, +27491=>845, +27597=>846, +27665=>847, +27664=>848, +27704=>849, +27713=>850, +27712=>851, +27710=>852, +29359=>853, +29572=>854, +12126=>854, +29577=>855, +12127=>855, +29916=>856, +12128=>856, +29926=>857, +12129=>857, +29976=>858, +12130=>858, +29983=>859, +12131=>859, +12132=>860, +29992=>860, +29993=>861, +12133=>862, +30000=>862, +30001=>863, +30002=>864, +30003=>865, +12134=>866, +30091=>866, +30333=>867, +12137=>867, +30382=>868, +12138=>868, +30399=>869, +12139=>869, +30446=>870, +12140=>870, +30683=>871, +12141=>871, +30690=>872, +12142=>872, +30707=>873, +12143=>873, +31034=>874, +12144=>874, +31166=>875, +12146=>875, +31348=>876, +12147=>876, +31435=>877, +12148=>877, +19998=>878, +19999=>879, +20050=>880, +20051=>881, +20073=>882, +20121=>883, +20132=>884, +20134=>885, +20133=>886, +20223=>887, +20233=>888, +20249=>889, +20234=>890, +20245=>891, +20237=>892, +20240=>893, +20241=>894, +20239=>895, +20210=>896, +20214=>897, +20219=>898, +20208=>899, +20211=>900, +20221=>901, +20225=>902, +20235=>903, +20809=>904, +20807=>905, +20806=>906, +20808=>907, +20840=>908, +20849=>909, +20877=>910, +20912=>911, +21015=>912, +21009=>913, +21010=>914, +21006=>915, +21014=>916, +21155=>917, +21256=>918, +21281=>919, +21280=>920, +21360=>921, +21361=>922, +21513=>923, +21519=>924, +21516=>925, +21514=>926, +21520=>927, +21505=>928, +21515=>929, +21508=>930, +21521=>931, +21517=>932, +21512=>933, +21507=>934, +21518=>935, +21510=>936, +21522=>937, +22240=>938, +22238=>939, +22237=>940, +22323=>941, +22320=>942, +22312=>943, +22317=>944, +22316=>945, +22319=>946, +22313=>947, +22809=>948, +22810=>949, +22839=>950, +22840=>951, +22916=>952, +22904=>953, +22915=>954, +22909=>955, +22905=>956, +22914=>957, +22913=>958, +23383=>959, +23384=>960, +23431=>961, +23432=>962, +23429=>963, +23433=>964, +23546=>965, +23574=>966, +23673=>967, +24030=>968, +24070=>969, +24182=>970, +24180=>971, +24335=>972, +24347=>973, +24537=>974, +24534=>975, +25102=>976, +25100=>977, +25101=>978, +25104=>979, +25187=>980, +25179=>981, +25176=>982, +25910=>983, +26089=>984, +26088=>985, +26092=>986, +26093=>987, +26354=>988, +26355=>989, +26377=>990, +26429=>991, +26420=>992, +26417=>993, +26421=>994, +27425=>995, +27492=>996, +27515=>997, +27670=>998, +27741=>999, +27735=>1000, +27737=>1001, +27743=>1002, +27744=>1003, +27728=>1004, +27733=>1005, +27745=>1006, +27739=>1007, +27725=>1008, +27726=>1009, +28784=>1010, +29279=>1011, +29277=>1012, +30334=>1013, +31481=>1014, +12149=>1014, +31859=>1015, +12150=>1015, +31992=>1016, +12151=>1016, +32566=>1017, +12152=>1017, +32650=>1018, +12154=>1018, +32701=>1019, +12155=>1019, +32769=>1020, +12156=>1020, +32771=>1021, +32780=>1022, +12157=>1022, +32786=>1023, +12158=>1023, +32819=>1024, +12159=>1024, +32895=>1025, +12160=>1025, +32905=>1026, +12161=>1026, +32907=>1027, +32908=>1028, +33251=>1029, +12162=>1029, +33258=>1030, +12163=>1030, +33267=>1031, +12164=>1031, +33276=>1032, +12165=>1032, +33292=>1033, +12166=>1033, +33307=>1034, +12167=>1034, +33311=>1035, +12168=>1035, +33390=>1036, +12169=>1036, +33394=>1037, +12170=>1037, +33406=>1038, +34411=>1039, +12173=>1039, +34880=>1040, +12174=>1040, +34892=>1041, +12175=>1041, +34915=>1042, +12176=>1042, +35199=>1043, +38433=>1044, +20018=>1045, +20136=>1046, +20301=>1047, +20303=>1048, +20295=>1049, +20311=>1050, +20318=>1051, +20276=>1052, +20315=>1053, +20309=>1054, +20272=>1055, +20304=>1056, +20305=>1057, +20285=>1058, +20282=>1059, +20280=>1060, +20291=>1061, +20308=>1062, +20284=>1063, +20294=>1064, +20323=>1065, +20316=>1066, +20320=>1067, +20271=>1068, +20302=>1069, +20278=>1070, +20313=>1071, +20317=>1072, +20296=>1073, +20314=>1074, +20812=>1075, +20811=>1076, +20813=>1077, +20853=>1078, +20918=>1079, +20919=>1080, +21029=>1081, +21028=>1082, +21033=>1083, +21034=>1084, +21032=>1085, +21163=>1086, +21161=>1087, +21162=>1088, +21164=>1089, +21283=>1090, +21363=>1091, +21365=>1092, +21533=>1093, +21549=>1094, +21534=>1095, +21566=>1096, +21542=>1097, +21582=>1098, +21543=>1099, +21574=>1100, +21571=>1101, +21555=>1102, +21576=>1103, +21570=>1104, +21531=>1105, +21545=>1106, +21578=>1107, +21561=>1108, +21563=>1109, +21560=>1110, +21550=>1111, +21557=>1112, +21558=>1113, +21536=>1114, +21564=>1115, +21568=>1116, +21553=>1117, +21547=>1118, +21535=>1119, +21548=>1120, +22250=>1121, +22256=>1122, +22244=>1123, +22251=>1124, +22346=>1125, +22353=>1126, +22336=>1127, +22349=>1128, +22343=>1129, +22350=>1130, +22334=>1131, +22352=>1132, +22351=>1133, +22331=>1134, +22767=>1135, +22846=>1136, +22941=>1137, +22930=>1138, +22952=>1139, +22942=>1140, +22947=>1141, +22937=>1142, +22934=>1143, +22925=>1144, +22948=>1145, +22931=>1146, +22922=>1147, +22949=>1148, +23389=>1149, +23388=>1150, +23386=>1151, +23387=>1152, +23436=>1153, +23435=>1154, +23439=>1155, +23596=>1156, +23616=>1157, +23617=>1158, +23615=>1159, +23614=>1160, +23696=>1161, +23697=>1162, +23700=>1163, +23692=>1164, +24043=>1165, +24076=>1166, +24207=>1167, +24199=>1168, +24202=>1169, +24311=>1170, +24324=>1171, +24351=>1172, +24420=>1173, +24418=>1174, +24439=>1175, +24441=>1176, +24536=>1177, +24524=>1178, +24535=>1179, +24525=>1180, +24561=>1181, +24555=>1182, +24568=>1183, +24554=>1184, +25106=>1185, +25105=>1186, +25220=>1187, +25239=>1188, +25238=>1189, +25216=>1190, +25206=>1191, +25225=>1192, +25197=>1193, +25226=>1194, +25212=>1195, +25214=>1196, +25209=>1197, +25203=>1198, +25234=>1199, +25199=>1200, +25240=>1201, +25198=>1202, +25237=>1203, +25235=>1204, +25233=>1205, +25222=>1206, +25913=>1207, +25915=>1208, +25912=>1209, +26097=>1210, +26356=>1211, +26463=>1212, +26446=>1213, +26447=>1214, +26448=>1215, +26449=>1216, +26460=>1217, +26454=>1218, +26462=>1219, +57801=>1219, +26441=>1220, +26438=>1221, +26464=>1222, +26451=>1223, +26455=>1224, +27493=>1225, +27599=>1226, +27714=>1227, +27742=>1228, +27801=>1229, +27777=>1230, +27784=>1231, +27785=>1232, +27781=>1233, +27803=>1234, +27754=>1235, +27770=>1236, +27792=>1237, +27760=>1238, +27788=>1239, +27752=>1240, +27798=>1241, +27794=>1242, +27773=>1243, +27779=>1244, +27762=>1245, +27774=>1246, +27764=>1247, +27782=>1248, +27766=>1249, +27789=>1250, +27796=>1251, +27800=>1252, +27778=>1253, +28790=>1254, +28796=>1255, +28797=>1256, +28792=>1257, +29282=>1258, +29281=>1259, +29280=>1260, +29380=>1261, +29378=>1262, +29590=>1263, +29996=>1264, +29995=>1265, +30007=>1266, +30008=>1267, +30338=>1268, +30447=>1269, +30691=>1270, +31169=>1271, +31168=>1272, +31167=>1273, +31350=>1274, +31995=>1275, +32597=>1276, +32918=>1277, +32915=>1278, +32925=>1279, +32920=>1280, +32923=>1281, +32922=>1282, +32946=>1283, +33391=>1284, +33426=>1285, +33419=>1286, +33421=>1287, +35211=>1288, +12178=>1288, +35282=>1289, +12179=>1289, +35328=>1290, +12180=>1290, +35895=>1291, +12181=>1291, +35910=>1292, +12182=>1292, +35925=>1293, +12183=>1293, +35997=>1294, +12185=>1294, +36196=>1295, +12186=>1295, +36208=>1296, +12187=>1296, +36275=>1297, +12188=>1297, +36523=>1298, +12189=>1298, +36554=>1299, +12190=>1299, +36763=>1300, +12191=>1300, +36784=>1301, +12192=>1301, +36802=>1302, +36806=>1303, +36805=>1304, +36804=>1305, +24033=>1306, +12194=>1307, +37009=>1307, +37026=>1308, +37034=>1309, +37030=>1310, +37027=>1311, +37193=>1312, +12195=>1312, +37318=>1313, +12196=>1313, +37324=>1314, +12197=>1314, +38450=>1315, +38446=>1316, +38449=>1317, +38442=>1318, +38444=>1319, +20006=>1320, +20054=>1321, +20083=>1322, +20107=>1323, +20123=>1324, +20126=>1325, +20139=>1326, +20140=>1327, +20335=>1328, +20381=>1329, +20365=>1330, +20339=>1331, +20351=>1332, +20332=>1333, +20379=>1334, +20363=>1335, +20358=>1336, +20355=>1337, +20336=>1338, +20341=>1339, +20360=>1340, +20329=>1341, +20347=>1342, +20374=>1343, +20350=>1344, +20367=>1345, +20369=>1346, +20346=>1347, +20820=>1348, +20818=>1349, +20821=>1350, +20841=>1351, +20855=>1352, +20854=>1353, +20856=>1354, +20925=>1355, +20989=>1356, +21051=>1357, +21048=>1358, +21047=>1359, +21050=>1360, +21040=>1361, +21038=>1362, +21046=>1363, +21057=>1364, +21182=>1365, +21179=>1366, +21330=>1367, +21332=>1368, +21331=>1369, +21329=>1370, +21350=>1371, +21367=>1372, +21368=>1373, +21369=>1374, +21462=>1375, +21460=>1376, +21463=>1377, +21619=>1378, +21621=>1379, +21654=>1380, +21624=>1381, +21653=>1382, +21632=>1383, +21627=>1384, +21623=>1385, +21636=>1386, +21650=>1387, +21638=>1388, +21628=>1389, +21648=>1390, +21617=>1391, +21622=>1392, +21644=>1393, +21658=>1394, +21602=>1395, +21608=>1396, +21643=>1397, +21629=>1398, +21646=>1399, +22266=>1400, +22403=>1401, +22391=>1402, +22378=>1403, +22377=>1404, +22369=>1405, +22374=>1406, +22372=>1407, +22396=>1408, +22812=>1409, +22857=>1410, +22855=>1411, +22856=>1412, +22852=>1413, +22868=>1414, +22974=>1415, +22971=>1416, +22996=>1417, +22969=>1418, +22958=>1419, +22993=>1420, +22982=>1421, +22992=>1422, +22989=>1423, +22987=>1424, +22995=>1425, +22986=>1426, +22959=>1427, +22963=>1428, +22994=>1429, +22981=>1430, +23391=>1431, +23396=>1432, +23395=>1433, +23447=>1434, +23450=>1435, +23448=>1436, +23452=>1437, +23449=>1438, +23451=>1439, +23578=>1440, +23624=>1441, +23621=>1442, +23622=>1443, +23735=>1444, +23713=>1445, +23736=>1446, +23721=>1447, +23723=>1448, +23729=>1449, +23731=>1450, +24088=>1451, +24090=>1452, +24086=>1453, +24085=>1454, +24091=>1455, +24081=>1456, +24184=>1457, +24218=>1458, +24215=>1459, +24220=>1460, +24213=>1461, +24214=>1462, +24310=>1463, +24358=>1464, +24359=>1465, +24361=>1466, +24448=>1467, +24449=>1468, +24447=>1469, +24444=>1470, +24541=>1471, +24544=>1472, +24573=>1473, +24565=>1474, +24575=>1475, +24591=>1476, +24596=>1477, +24623=>1478, +24629=>1479, +24598=>1480, +24618=>1481, +24597=>1482, +24609=>1483, +24615=>1484, +24617=>1485, +24619=>1486, +24603=>1487, +25110=>1488, +25109=>1489, +25151=>1490, +25150=>1491, +25152=>1492, +25215=>1493, +25289=>1494, +25292=>1495, +25284=>1496, +25279=>1497, +25282=>1498, +25273=>1499, +25298=>1500, +25307=>1501, +25259=>1502, +25299=>1503, +25300=>1504, +25291=>1505, +25288=>1506, +25256=>1507, +25277=>1508, +25276=>1509, +25296=>1510, +60582=>1510, +25305=>1511, +25287=>1512, +25293=>1513, +25269=>1514, +25306=>1515, +25265=>1516, +25304=>1517, +25302=>1518, +25303=>1519, +25286=>1520, +25260=>1521, +25294=>1522, +61010=>1522, +25918=>1523, +26023=>1524, +26044=>1525, +26106=>1526, +26132=>1527, +26131=>1528, +26124=>1529, +26118=>1530, +26114=>1531, +26126=>1532, +26112=>1533, +26127=>1534, +26133=>1535, +26122=>1536, +26119=>1537, +26381=>1538, +26379=>1539, +26477=>1540, +26507=>1541, +26517=>1542, +26481=>1543, +26524=>1544, +26483=>1545, +26487=>1546, +26503=>1547, +26525=>1548, +26519=>1549, +26479=>1550, +26480=>1551, +26495=>1552, +26505=>1553, +26494=>1554, +26512=>1555, +26485=>1556, +26522=>1557, +26515=>1558, +26492=>1559, +26474=>1560, +26482=>1561, +27427=>1562, +27494=>1563, +27495=>1564, +27519=>1565, +27667=>1566, +27675=>1567, +27875=>1568, +27880=>1569, +27891=>1570, +27825=>1571, +27852=>1572, +27877=>1573, +27827=>1574, +27837=>1575, +27838=>1576, +27836=>1577, +27874=>1578, +27819=>1579, +27861=>1580, +27859=>1581, +27832=>1582, +27844=>1583, +27833=>1584, +27841=>1585, +27822=>1586, +27863=>1587, +27845=>1588, +27889=>1589, +27839=>1590, +27835=>1591, +27873=>1592, +27867=>1593, +27850=>1594, +27820=>1595, +27887=>1596, +27868=>1597, +27862=>1598, +27872=>1599, +28821=>1600, +28814=>1601, +28818=>1602, +28810=>1603, +28825=>1604, +29228=>1605, +29229=>1606, +29240=>1607, +29256=>1608, +29287=>1609, +29289=>1610, +29376=>1611, +29390=>1612, +29401=>1613, +29399=>1614, +29392=>1615, +29609=>1616, +29608=>1617, +29599=>1618, +29611=>1619, +29605=>1620, +30013=>1621, +30109=>1622, +30105=>1623, +30106=>1624, +30340=>1625, +30402=>1626, +30450=>1627, +30452=>1628, +30693=>1629, +30717=>1630, +31038=>1631, +31040=>1632, +31041=>1633, +31177=>1634, +31176=>1635, +31354=>1636, +31353=>1637, +31482=>1638, +31998=>1639, +32596=>1640, +32652=>1641, +32651=>1642, +32773=>1643, +58236=>1643, +32954=>1644, +32933=>1645, +32930=>1646, +32945=>1647, +32929=>1648, +32939=>1649, +32937=>1650, +32948=>1651, +32938=>1652, +32943=>1653, +33253=>1654, +33278=>1655, +33293=>1656, +33459=>1657, +33437=>1658, +33433=>1659, +33453=>1660, +33469=>1661, +33439=>1662, +33465=>1663, +33457=>1664, +33452=>1665, +33445=>1666, +33455=>1667, +33464=>1668, +33443=>1669, +33456=>1670, +33470=>1671, +33463=>1672, +34382=>1673, +34417=>1674, +21021=>1675, +34920=>1676, +36555=>1677, +36814=>1678, +36820=>1679, +36817=>1680, +37045=>1681, +37048=>1682, +37041=>1683, +37046=>1684, +37319=>1685, +37329=>1686, +12198=>1686, +38263=>1687, +12199=>1687, +38272=>1688, +12200=>1688, +38428=>1689, +12201=>1689, +38464=>1690, +38463=>1691, +38459=>1692, +38468=>1693, +38466=>1694, +38585=>1695, +12203=>1695, +38632=>1696, +12204=>1696, +38738=>1697, +12206=>1698, +38750=>1698, +20127=>1699, +20141=>1700, +20142=>1701, +20449=>1702, +20405=>1703, +20399=>1704, +20415=>1705, +20448=>1706, +20433=>1707, +20431=>1708, +20445=>1709, +20419=>1710, +20406=>1711, +20440=>1712, +20447=>1713, +20426=>1714, +20439=>1715, +20398=>1716, +20432=>1717, +20420=>1718, +20418=>1719, +20442=>1720, +20430=>1721, +20446=>1722, +20407=>1723, +20823=>1724, +20882=>1725, +20881=>1726, +20896=>1727, +21070=>1728, +21059=>1729, +21066=>1730, +21069=>1731, +21068=>1732, +21067=>1733, +21063=>1734, +21191=>1735, +21193=>1736, +21187=>1737, +21185=>1738, +21261=>1739, +21335=>1740, +21371=>1741, +21402=>1742, +21467=>1743, +21676=>1744, +21696=>1745, +21672=>1746, +21710=>1747, +21705=>1748, +21688=>1749, +21670=>1750, +21683=>1751, +21703=>1752, +21698=>1753, +21693=>1754, +21674=>1755, +21697=>1756, +21700=>1757, +21704=>1758, +21679=>1759, +21675=>1760, +21681=>1761, +21691=>1762, +21673=>1763, +21671=>1764, +21695=>1765, +22271=>1766, +22402=>1767, +22411=>1768, +22432=>1769, +22435=>1770, +22434=>1771, +22478=>1772, +22446=>1773, +22419=>1774, +22869=>1775, +22865=>1776, +22863=>1777, +22862=>1778, +22864=>1779, +23004=>1780, +23000=>1781, +23039=>1782, +23011=>1783, +23016=>1784, +23043=>1785, +23013=>1786, +23018=>1787, +23002=>1788, +23014=>1789, +23041=>1790, +23035=>1791, +23401=>1792, +23459=>1793, +23462=>1794, +23460=>1795, +23458=>1796, +23461=>1797, +23553=>1798, +23630=>1799, +23631=>1800, +23629=>1801, +23627=>1802, +23769=>1803, +23762=>1804, +24055=>1805, +24093=>1806, +24101=>1807, +24095=>1808, +24189=>1809, +24224=>1810, +24230=>1811, +24314=>1812, +24328=>1813, +24365=>1814, +24421=>1815, +24456=>1816, +24453=>1817, +24458=>1818, +24459=>1819, +24455=>1820, +24460=>1821, +24457=>1822, +24594=>1823, +24605=>1824, +24608=>1825, +24613=>1826, +24590=>1827, +24616=>1828, +24653=>1829, +24688=>1830, +24680=>1831, +24674=>1832, +60712=>1832, +24646=>1833, +24643=>1834, +24684=>1835, +24683=>1836, +24682=>1837, +24676=>1838, +25153=>1839, +25308=>1840, +25366=>1841, +25353=>1842, +25340=>1843, +25325=>1844, +25345=>1845, +25326=>1846, +25341=>1847, +25351=>1848, +25329=>1849, +25335=>1850, +25327=>1851, +25324=>1852, +25342=>1853, +25332=>1854, +25361=>1855, +25346=>1856, +25919=>1857, +25925=>1858, +26027=>1859, +26045=>1860, +26082=>1861, +26149=>1862, +26157=>1863, +26144=>1864, +26151=>1865, +26159=>1866, +26143=>1867, +26152=>1868, +26161=>1869, +26148=>1870, +26359=>1871, +26623=>1872, +26579=>1873, +26609=>1874, +26580=>1875, +26576=>1876, +26604=>1877, +26550=>1878, +26543=>1879, +26613=>1880, +26601=>1881, +26607=>1882, +26564=>1883, +26577=>1884, +26548=>1885, +26586=>1886, +26597=>1887, +26552=>1888, +26575=>1889, +26590=>1890, +26611=>1891, +26544=>1892, +26585=>1893, +26594=>1894, +26589=>1895, +26578=>1896, +27498=>1897, +27523=>1898, +27526=>1899, +27573=>1900, +27602=>1901, +27607=>1902, +27679=>1903, +27849=>1904, +27915=>1905, +27954=>1906, +27946=>1907, +27969=>1908, +27941=>1909, +27916=>1910, +27953=>1911, +27934=>1912, +27927=>1913, +27963=>1914, +27965=>1915, +27966=>1916, +27958=>1917, +27931=>1918, +27893=>1919, +27961=>1920, +27943=>1921, +27960=>1922, +27945=>1923, +27950=>1924, +27957=>1925, +27918=>1926, +27947=>1927, +28843=>1928, +28858=>1929, +28851=>1930, +28844=>1931, +28847=>1932, +28845=>1933, +28856=>1934, +28846=>1935, +28836=>1936, +29232=>1937, +29298=>1938, +29295=>1939, +29300=>1940, +29417=>1941, +29408=>1942, +29409=>1943, +29623=>1944, +29642=>1945, +29627=>1946, +29618=>1947, +29645=>1948, +29632=>1949, +29619=>1950, +29978=>1951, +29997=>1952, +30031=>1953, +30028=>1954, +30030=>1955, +30027=>1956, +30123=>1957, +30116=>1958, +30117=>1959, +30114=>1960, +30115=>1961, +30328=>1962, +30342=>1963, +30343=>1964, +30344=>1965, +30408=>1966, +30406=>1967, +30403=>1968, +30405=>1969, +30465=>1970, +30457=>1971, +30456=>1972, +30473=>1973, +30475=>1974, +30462=>1975, +30460=>1976, +30471=>1977, +30684=>1978, +30722=>1979, +30740=>1980, +30732=>1981, +30733=>1982, +31046=>1983, +31049=>1984, +31048=>1985, +31047=>1986, +31161=>1987, +31162=>1988, +31185=>1989, +31186=>1990, +31179=>1991, +31359=>1992, +31361=>1993, +31487=>1994, +31485=>1995, +31869=>1996, +32002=>1997, +32005=>1998, +32000=>1999, +32009=>2000, +32007=>2001, +32004=>2002, +32006=>2003, +32568=>2004, +32654=>2005, +32703=>2006, +32784=>2007, +32781=>2008, +32785=>2009, +32822=>2010, +32982=>2011, +32997=>2012, +32986=>2013, +32963=>2014, +32964=>2015, +32972=>2016, +32993=>2017, +32987=>2018, +32974=>2019, +32990=>2020, +32996=>2021, +32989=>2022, +33268=>2023, +33314=>2024, +33511=>2025, +33539=>2026, +33541=>2027, +33507=>2028, +33499=>2029, +33510=>2030, +33540=>2031, +33509=>2032, +33538=>2033, +33545=>2034, +33490=>2035, +33495=>2036, +33521=>2037, +33537=>2038, +33500=>2039, +33492=>2040, +33489=>2041, +33502=>2042, +33491=>2043, +33503=>2044, +33519=>2045, +33542=>2046, +34384=>2047, +34425=>2048, +34427=>2049, +34426=>2050, +34893=>2051, +34923=>2052, +35201=>2053, +35284=>2054, +35336=>2055, +35330=>2056, +35331=>2057, +35998=>2058, +36000=>2059, +36212=>2060, +36211=>2061, +36276=>2062, +36557=>2063, +36556=>2064, +36848=>2065, +36838=>2066, +36834=>2067, +36842=>2068, +36837=>2069, +36845=>2070, +36843=>2071, +36836=>2072, +36840=>2073, +37066=>2074, +37070=>2075, +37057=>2076, +37059=>2077, +37195=>2078, +37194=>2079, +37325=>2080, +38274=>2081, +38480=>2082, +38475=>2083, +38476=>2084, +38477=>2085, +38754=>2086, +12207=>2086, +38761=>2087, +12208=>2087, +38859=>2088, +12209=>2088, +38893=>2089, +12210=>2089, +38899=>2090, +12211=>2090, +38913=>2091, +12212=>2091, +39080=>2092, +12213=>2092, +39131=>2093, +12214=>2093, +39135=>2094, +12215=>2094, +39318=>2095, +12216=>2095, +39321=>2096, +12217=>2096, +20056=>2097, +20147=>2098, +20492=>2099, +20493=>2100, +20515=>2101, +20463=>2102, +20518=>2103, +20517=>2104, +20472=>2105, +20521=>2106, +57375=>2106, +20502=>2107, +20486=>2108, +20540=>2109, +20511=>2110, +20506=>2111, +20498=>2112, +20497=>2113, +20474=>2114, +20480=>2115, +20500=>2116, +20520=>2117, +20465=>2118, +20513=>2119, +20491=>2120, +20505=>2121, +20504=>2122, +20467=>2123, +20462=>2124, +20525=>2125, +20522=>2126, +20478=>2127, +20523=>2128, +20489=>2129, +20860=>2130, +20900=>2131, +20901=>2132, +20898=>2133, +20941=>2134, +20940=>2135, +20934=>2136, +20939=>2137, +21078=>2138, +21084=>2139, +21076=>2140, +21083=>2141, +21085=>2142, +21290=>2143, +21375=>2144, +57459=>2144, +21407=>2145, +21405=>2146, +21471=>2147, +21736=>2148, +21776=>2149, +21761=>2150, +21815=>2151, +21756=>2152, +21733=>2153, +21746=>2154, +21766=>2155, +21754=>2156, +21780=>2157, +21737=>2158, +21741=>2159, +21729=>2160, +21769=>2161, +21742=>2162, +21738=>2163, +21734=>2164, +21799=>2165, +21767=>2166, +21757=>2167, +21775=>2168, +22275=>2169, +22276=>2170, +22466=>2171, +22484=>2172, +22475=>2173, +22467=>2174, +22537=>2175, +22799=>2176, +22871=>2177, +22872=>2178, +22874=>2179, +23057=>2180, +23064=>2181, +23068=>2182, +23071=>2183, +23067=>2184, +23059=>2185, +23020=>2186, +23072=>2187, +23075=>2188, +23081=>2189, +23077=>2190, +23052=>2191, +23049=>2192, +23403=>2193, +23640=>2194, +23472=>2195, +23475=>2196, +23478=>2197, +23476=>2198, +23470=>2199, +23477=>2200, +23481=>2201, +23480=>2202, +23556=>2203, +23633=>2204, +23637=>2205, +23632=>2206, +23789=>2207, +23805=>2208, +23803=>2209, +23786=>2210, +23784=>2211, +23792=>2212, +23798=>2213, +23809=>2214, +23796=>2215, +24046=>2216, +24109=>2217, +24107=>2218, +24235=>2219, +24237=>2220, +24231=>2221, +24369=>2222, +24466=>2223, +24465=>2224, +24464=>2225, +24665=>2226, +24675=>2227, +24677=>2228, +24656=>2229, +24661=>2230, +24685=>2231, +24681=>2232, +24687=>2233, +24708=>2234, +24735=>2235, +24730=>2236, +24717=>2237, +24724=>2238, +24716=>2239, +24709=>2240, +24726=>2241, +25159=>2242, +25331=>2243, +25352=>2244, +25343=>2245, +25422=>2246, +25406=>2247, +25391=>2248, +25429=>2249, +25410=>2250, +25414=>2251, +25423=>2252, +25417=>2253, +25402=>2254, +25424=>2255, +25405=>2256, +25386=>2257, +25387=>2258, +25384=>2259, +25421=>2260, +25420=>2261, +25928=>2262, +25929=>2263, +26009=>2264, +26049=>2265, +26053=>2266, +26178=>2267, +26185=>2268, +26191=>2269, +26179=>2270, +26194=>2271, +26188=>2272, +26181=>2273, +26177=>2274, +26360=>2275, +26388=>2276, +26389=>2277, +26391=>2278, +26657=>2279, +26680=>2280, +26696=>2281, +26694=>2282, +26707=>2283, +26681=>2284, +26690=>2285, +26708=>2286, +26665=>2287, +26803=>2288, +26647=>2289, +26700=>2290, +26705=>2291, +26685=>2292, +26612=>2293, +26704=>2294, +26688=>2295, +26684=>2296, +26691=>2297, +26666=>2298, +26693=>2299, +26643=>2300, +26648=>2301, +26689=>2302, +27530=>2303, +27529=>2304, +27575=>2305, +27683=>2306, +27687=>2307, +27688=>2308, +27686=>2309, +27684=>2310, +27888=>2311, +28010=>2312, +28053=>2313, +28040=>2314, +28039=>2315, +28006=>2316, +28024=>2317, +28023=>2318, +27993=>2319, +28051=>2320, +28012=>2321, +28041=>2322, +28014=>2323, +27994=>2324, +28020=>2325, +28009=>2326, +28044=>2327, +28042=>2328, +28025=>2329, +28037=>2330, +28005=>2331, +28052=>2332, +28874=>2333, +28888=>2334, +28900=>2335, +28889=>2336, +28872=>2337, +28879=>2338, +29241=>2339, +29305=>2340, +29436=>2341, +29433=>2342, +29437=>2343, +29432=>2344, +29431=>2345, +29574=>2346, +29677=>2347, +29705=>2348, +29678=>2349, +29664=>2350, +29674=>2351, +29662=>2352, +30036=>2353, +30045=>2354, +30044=>2355, +30042=>2356, +30041=>2357, +30142=>2358, +30149=>2359, +30151=>2360, +30130=>2361, +30131=>2362, +30141=>2363, +30140=>2364, +30137=>2365, +30146=>2366, +30136=>2367, +30347=>2368, +30384=>2369, +30410=>2370, +30413=>2371, +30414=>2372, +30505=>2373, +30495=>2374, +30496=>2375, +30504=>2376, +30697=>2377, +30768=>2378, +30759=>2379, +30776=>2380, +30749=>2381, +30772=>2382, +30775=>2383, +30757=>2384, +30765=>2385, +30752=>2386, +30751=>2387, +30770=>2388, +31061=>2389, +31056=>2390, +31072=>2391, +31071=>2392, +31062=>2393, +31070=>2394, +31069=>2395, +31063=>2396, +31066=>2397, +31204=>2398, +31203=>2399, +60418=>2399, +31207=>2400, +31199=>2401, +31206=>2402, +31209=>2403, +31192=>2404, +31364=>2405, +31368=>2406, +31449=>2407, +31494=>2408, +31505=>2409, +31881=>2410, +32033=>2411, +32023=>2412, +32011=>2413, +32010=>2414, +32032=>2415, +32034=>2416, +32020=>2417, +32016=>2418, +32021=>2419, +32026=>2420, +32028=>2421, +32013=>2422, +32025=>2423, +32027=>2424, +32570=>2425, +32607=>2426, +32660=>2427, +32709=>2428, +32705=>2429, +32774=>2430, +32772=>2431, +32792=>2432, +32789=>2433, +32793=>2434, +32791=>2435, +32829=>2436, +32831=>2437, +33009=>2438, +33026=>2439, +33008=>2440, +33029=>2441, +33005=>2442, +33012=>2443, +33030=>2444, +33016=>2445, +33011=>2446, +33032=>2447, +33021=>2448, +33034=>2449, +33020=>2450, +33007=>2451, +33261=>2452, +33260=>2453, +33280=>2454, +33296=>2455, +33322=>2456, +33323=>2457, +33320=>2458, +33324=>2459, +33467=>2460, +33579=>2461, +33618=>2462, +33620=>2463, +33610=>2464, +33592=>2465, +33616=>2466, +33609=>2467, +33589=>2468, +33588=>2469, +33615=>2470, +33586=>2471, +33593=>2472, +33590=>2473, +33559=>2474, +33600=>2475, +33585=>2476, +33576=>2477, +33603=>2478, +34388=>2479, +34442=>2480, +34474=>2481, +34451=>2482, +34468=>2483, +34473=>2484, +34444=>2485, +34467=>2486, +34460=>2487, +34928=>2488, +34935=>2489, +34945=>2490, +34946=>2491, +34941=>2492, +34937=>2493, +35352=>2494, +35344=>2495, +35342=>2496, +35340=>2497, +35349=>2498, +35338=>2499, +35351=>2500, +35347=>2501, +35350=>2502, +35343=>2503, +35345=>2504, +35912=>2505, +35962=>2506, +35961=>2507, +36001=>2508, +36002=>2509, +36215=>2510, +58442=>2510, +36524=>2511, +36562=>2512, +36564=>2513, +36559=>2514, +36785=>2515, +36865=>2516, +36870=>2517, +36855=>2518, +36864=>2519, +36858=>2520, +36852=>2521, +36867=>2522, +36861=>2523, +36869=>2524, +36856=>2525, +37013=>2526, +37089=>2527, +37085=>2528, +37090=>2529, +37202=>2530, +37197=>2531, +37196=>2532, +37336=>2533, +37341=>2534, +37335=>2535, +37340=>2536, +37337=>2537, +38275=>2538, +38498=>2539, +38499=>2540, +38497=>2541, +38491=>2542, +38493=>2543, +38500=>2544, +38488=>2545, +38494=>2546, +38587=>2547, +39138=>2548, +39340=>2549, +12218=>2549, +39592=>2550, +12219=>2550, +39640=>2551, +12220=>2551, +12222=>2552, +39717=>2552, +39730=>2553, +12224=>2553, +39740=>2554, +12225=>2554, +20094=>2555, +20602=>2556, +20605=>2557, +57382=>2557, +20572=>2558, +20551=>2559, +20547=>2560, +20556=>2561, +20570=>2562, +20553=>2563, +20581=>2564, +20598=>2565, +20558=>2566, +20565=>2567, +20597=>2568, +20596=>2569, +20599=>2570, +20559=>2571, +20495=>2572, +20591=>2573, +20589=>2574, +20828=>2575, +20885=>2576, +20976=>2577, +21098=>2578, +21103=>2579, +21202=>2580, +21209=>2581, +21208=>2582, +21205=>2583, +21264=>2584, +21263=>2585, +21273=>2586, +21311=>2587, +21312=>2588, +21310=>2589, +21443=>2590, +26364=>2591, +21830=>2592, +21866=>2593, +21862=>2594, +21828=>2595, +21854=>2596, +21857=>2597, +21827=>2598, +21834=>2599, +21809=>2600, +21846=>2601, +21839=>2602, +21845=>2603, +21807=>2604, +21860=>2605, +21816=>2606, +21806=>2607, +21852=>2608, +21804=>2609, +21859=>2610, +21811=>2611, +21825=>2612, +21847=>2613, +22280=>2614, +22283=>2615, +22281=>2616, +22495=>2617, +22533=>2618, +22538=>2619, +22534=>2620, +22496=>2621, +22500=>2622, +22522=>2623, +22530=>2624, +22581=>2625, +22519=>2626, +22521=>2627, +22816=>2628, +22882=>2629, +23094=>2630, +23105=>2631, +23113=>2632, +23142=>2633, +23146=>2634, +23104=>2635, +23100=>2636, +23138=>2637, +23130=>2638, +23110=>2639, +23114=>2640, +23408=>2641, +23495=>2642, +23493=>2643, +23492=>2644, +23490=>2645, +23487=>2646, +23494=>2647, +23561=>2648, +23560=>2649, +23559=>2650, +23648=>2651, +23644=>2652, +23645=>2653, +23815=>2654, +23814=>2655, +23822=>2656, +23835=>2657, +23830=>2658, +23842=>2659, +23825=>2660, +23849=>2661, +23828=>2662, +23833=>2663, +23844=>2664, +23847=>2665, +23831=>2666, +24034=>2667, +24120=>2668, +24118=>2669, +24115=>2670, +24119=>2671, +24247=>2672, +24248=>2673, +24246=>2674, +24245=>2675, +24254=>2676, +24373=>2677, +24375=>2678, +24407=>2679, +24428=>2680, +24425=>2681, +24427=>2682, +24471=>2683, +24473=>2684, +24478=>2685, +24472=>2686, +24481=>2687, +24480=>2688, +24476=>2689, +24703=>2690, +24739=>2691, +24713=>2692, +24736=>2693, +24744=>2694, +24779=>2695, +24756=>2696, +24806=>2697, +24765=>2698, +24773=>2699, +24763=>2700, +24757=>2701, +24796=>2702, +24764=>2703, +24792=>2704, +24789=>2705, +24774=>2706, +24799=>2707, +24760=>2708, +24794=>2709, +24775=>2710, +25114=>2711, +25115=>2712, +25160=>2713, +25504=>2714, +25511=>2715, +25458=>2716, +25494=>2717, +25506=>2718, +25509=>2719, +25463=>2720, +25447=>2721, +25496=>2722, +25514=>2723, +25457=>2724, +25513=>2725, +25481=>2726, +25475=>2727, +25499=>2728, +25451=>2729, +25512=>2730, +25476=>2731, +25480=>2732, +25497=>2733, +25505=>2734, +25516=>2735, +25490=>2736, +25487=>2737, +25472=>2738, +25467=>2739, +25449=>2740, +25448=>2741, +25466=>2742, +25949=>2743, +25942=>2744, +25937=>2745, +25945=>2746, +25943=>2747, +21855=>2748, +25935=>2749, +25944=>2750, +25941=>2751, +25940=>2752, +26012=>2753, +26011=>2754, +26028=>2755, +26063=>2756, +26059=>2757, +26060=>2758, +26062=>2759, +26205=>2760, +26202=>2761, +26212=>2762, +26216=>2763, +26214=>2764, +26206=>2765, +26361=>2766, +21207=>2767, +26395=>2768, +26753=>2769, +26799=>2770, +26786=>2771, +26771=>2772, +26805=>2773, +26751=>2774, +26742=>2775, +26801=>2776, +26791=>2777, +26775=>2778, +26800=>2779, +26755=>2780, +26820=>2781, +26797=>2782, +26758=>2783, +26757=>2784, +26772=>2785, +26781=>2786, +26792=>2787, +26783=>2788, +26785=>2789, +26754=>2790, +27442=>2791, +27578=>2792, +27627=>2793, +27628=>2794, +27691=>2795, +28046=>2796, +28092=>2797, +28147=>2798, +28121=>2799, +28082=>2800, +28129=>2801, +28108=>2802, +28132=>2803, +28155=>2804, +28154=>2805, +28165=>2806, +28103=>2807, +28107=>2808, +28079=>2809, +28113=>2810, +28078=>2811, +28126=>2812, +28153=>2813, +28088=>2814, +28151=>2815, +28149=>2816, +28101=>2817, +28114=>2818, +28186=>2819, +28085=>2820, +28122=>2821, +28139=>2822, +28120=>2823, +28138=>2824, +28145=>2825, +28142=>2826, +28136=>2827, +28102=>2828, +28100=>2829, +28074=>2830, +28140=>2831, +28095=>2832, +28134=>2833, +28921=>2834, +28937=>2835, +28938=>2836, +28925=>2837, +28911=>2838, +29245=>2839, +29309=>2840, +29313=>2841, +29468=>2842, +29467=>2843, +29462=>2844, +29459=>2845, +29465=>2846, +29575=>2847, +29701=>2848, +29706=>2849, +29699=>2850, +29702=>2851, +29694=>2852, +29709=>2853, +29920=>2854, +29942=>2855, +29943=>2856, +29980=>2857, +29986=>2858, +30053=>2859, +30054=>2860, +30050=>2861, +30064=>2862, +30095=>2863, +30164=>2864, +30165=>2865, +30133=>2866, +30154=>2867, +30157=>2868, +30350=>2869, +30420=>2870, +30418=>2871, +30427=>2872, +30519=>2873, +30526=>2874, +30524=>2875, +30518=>2876, +30520=>2877, +30522=>2878, +30827=>2879, +30787=>2880, +30798=>2881, +31077=>2882, +31080=>2883, +31085=>2884, +31227=>2885, +31378=>2886, +31381=>2887, +31520=>2888, +31528=>2889, +31515=>2890, +31532=>2891, +31526=>2892, +31513=>2893, +31518=>2894, +31534=>2895, +31890=>2896, +31895=>2897, +31893=>2898, +32070=>2899, +32067=>2900, +32113=>2901, +32046=>2902, +32057=>2903, +32060=>2904, +32064=>2905, +32048=>2906, +32051=>2907, +32068=>2908, +32047=>2909, +32066=>2910, +32050=>2911, +32049=>2912, +32573=>2913, +32670=>2914, +32666=>2915, +32716=>2916, +32718=>2917, +32722=>2918, +32796=>2919, +32842=>2920, +32838=>2921, +33071=>2922, +33046=>2923, +33059=>2924, +33067=>2925, +33065=>2926, +33072=>2927, +33060=>2928, +33282=>2929, +33333=>2930, +33335=>2931, +33334=>2932, +33337=>2933, +33678=>2934, +33694=>2935, +33688=>2936, +33656=>2937, +33698=>2938, +33686=>2939, +33725=>2940, +33707=>2941, +33682=>2942, +33674=>2943, +33683=>2944, +33673=>2945, +33696=>2946, +33655=>2947, +33659=>2948, +33660=>2949, +33670=>2950, +33703=>2951, +34389=>2952, +24426=>2953, +34503=>2954, +34496=>2955, +34486=>2956, +34500=>2957, +34485=>2958, +34502=>2959, +34507=>2960, +34481=>2961, +34479=>2962, +34505=>2963, +34899=>2964, +34974=>2965, +34952=>2966, +34987=>2967, +34962=>2968, +34966=>2969, +34957=>2970, +34955=>2971, +35219=>2972, +35215=>2973, +35370=>2974, +35357=>2975, +35363=>2976, +35365=>2977, +35377=>2978, +35373=>2979, +35359=>2980, +35355=>2981, +35362=>2982, +35913=>2983, +35930=>2984, +36009=>2985, +36012=>2986, +36011=>2987, +36008=>2988, +36010=>2989, +36007=>2990, +36199=>2991, +36198=>2992, +36286=>2993, +36282=>2994, +36571=>2995, +36575=>2996, +36889=>2997, +36877=>2998, +36890=>2999, +36887=>3000, +36899=>3001, +36895=>3002, +36893=>3003, +36880=>3004, +36885=>3005, +36894=>3006, +36896=>3007, +36879=>3008, +36898=>3009, +36886=>3010, +36891=>3011, +36884=>3012, +37096=>3013, +37101=>3014, +37117=>3015, +58488=>3015, +37207=>3016, +37326=>3017, +37365=>3018, +37350=>3019, +37347=>3020, +37351=>3021, +37357=>3022, +37353=>3023, +38281=>3024, +38506=>3025, +38517=>3026, +38515=>3027, +38520=>3028, +38512=>3029, +38516=>3030, +38518=>3031, +38519=>3032, +38508=>3033, +38592=>3034, +38634=>3035, +38633=>3036, +31456=>3037, +31455=>3038, +38914=>3039, +38915=>3040, +39770=>3041, +12226=>3041, +40165=>3042, +12227=>3042, +40565=>3043, +12228=>3043, +40575=>3044, +12229=>3044, +40613=>3045, +12230=>3045, +40635=>3046, +12231=>3046, +20642=>3047, +20621=>3048, +20613=>3049, +20633=>3050, +20625=>3051, +20608=>3052, +20630=>3053, +20632=>3054, +20634=>3055, +26368=>3056, +20977=>3057, +21106=>3058, +21108=>3059, +21109=>3060, +21097=>3061, +21214=>3062, +21213=>3063, +21211=>3064, +21338=>3065, +21413=>3066, +21883=>3067, +21888=>3068, +21927=>3069, +21884=>3070, +21898=>3071, +21917=>3072, +21912=>3073, +21890=>3074, +21916=>3075, +21930=>3076, +21908=>3077, +21895=>3078, +21899=>3079, +21891=>3080, +21939=>3081, +21934=>3082, +21919=>3083, +21822=>3084, +21938=>3085, +21914=>3086, +21947=>3087, +21932=>3088, +21937=>3089, +21886=>3090, +21897=>3091, +21931=>3092, +21913=>3093, +22285=>3094, +22575=>3095, +22570=>3096, +22580=>3097, +22564=>3098, +22576=>3099, +22577=>3100, +22561=>3101, +22557=>3102, +22560=>3103, +22777=>3104, +22778=>3105, +22880=>3106, +23159=>3107, +57587=>3107, +23194=>3108, +23167=>3109, +23186=>3110, +23195=>3111, +23207=>3112, +23411=>3113, +23409=>3114, +23506=>3115, +23500=>3116, +23507=>3117, +23504=>3118, +23562=>3119, +23563=>3120, +23601=>3121, +23884=>3122, +23888=>3123, +23860=>3124, +23879=>3125, +24061=>3126, +24133=>3127, +24125=>3128, +24128=>3129, +24131=>3130, +24190=>3131, +24266=>3132, +24257=>3133, +24258=>3134, +24260=>3135, +24380=>3136, +24429=>3137, +24489=>3138, +24490=>3139, +24488=>3140, +24785=>3141, +24801=>3142, +24754=>3143, +24758=>3144, +24800=>3145, +24860=>3146, +24867=>3147, +24826=>3148, +24853=>3149, +24816=>3150, +24827=>3151, +24820=>3152, +24936=>3153, +24817=>3154, +24846=>3155, +24822=>3156, +24841=>3157, +24832=>3158, +24850=>3159, +25119=>3160, +25161=>3161, +25507=>3162, +25484=>3163, +25551=>3164, +25536=>3165, +25577=>3166, +25545=>3167, +25542=>3168, +25549=>3169, +25554=>3170, +25571=>3171, +25552=>3172, +25569=>3173, +25558=>3174, +25581=>3175, +25582=>3176, +25462=>3177, +25588=>3178, +25578=>3179, +25563=>3180, +25682=>3181, +25562=>3182, +25593=>3183, +25950=>3184, +25958=>3185, +25954=>3186, +25955=>3187, +26001=>3188, +26000=>3189, +26031=>3190, +26222=>3191, +26224=>3192, +26228=>3193, +57786=>3193, +26230=>3194, +26223=>3195, +26257=>3196, +26234=>3197, +26238=>3198, +26231=>3199, +26366=>3200, +26367=>3201, +26399=>3202, +26397=>3203, +26874=>3204, +26837=>3205, +26848=>3206, +26840=>3207, +26839=>3208, +26885=>3209, +26847=>3210, +26869=>3211, +26862=>3212, +26855=>3213, +26873=>3214, +26834=>3215, +26866=>3216, +26851=>3217, +26827=>3218, +26829=>3219, +26893=>3220, +26898=>3221, +26894=>3222, +26825=>3223, +26842=>3224, +26990=>3225, +26875=>3226, +27454=>3227, +27450=>3228, +27453=>3229, +27544=>3230, +27542=>3231, +27580=>3232, +27631=>3233, +27694=>3234, +27695=>3235, +27692=>3236, +28207=>3237, +57904=>3237, +28216=>3238, +28244=>3239, +28193=>3240, +28210=>3241, +28263=>3242, +28234=>3243, +28192=>3244, +28197=>3245, +28195=>3246, +28187=>3247, +28251=>3248, +28248=>3249, +28196=>3250, +28246=>3251, +28270=>3252, +28205=>3253, +28198=>3254, +28271=>3255, +28212=>3256, +28237=>3257, +28218=>3258, +28204=>3259, +28227=>3260, +28189=>3261, +57901=>3261, +28222=>3262, +28363=>3263, +28297=>3264, +28185=>3265, +28238=>3266, +28259=>3267, +28228=>3268, +28274=>3269, +28265=>3270, +28255=>3271, +28953=>3272, +28954=>3273, +28966=>3274, +28976=>3275, +28961=>3276, +28982=>3277, +29038=>3278, +57958=>3278, +28956=>3279, +29260=>3280, +29316=>3281, +29312=>3282, +29494=>3283, +29477=>3284, +29492=>3285, +29481=>3286, +29754=>3287, +29738=>3288, +29747=>3289, +29730=>3290, +29733=>3291, +29749=>3292, +29750=>3293, +29748=>3294, +29743=>3295, +29723=>3296, +29734=>3297, +29736=>3298, +29989=>3299, +29990=>3300, +30059=>3301, +30058=>3302, +30178=>3303, +30171=>3304, +30179=>3305, +30169=>3306, +30168=>3307, +30174=>3308, +30176=>3309, +30331=>3310, +30332=>3311, +30358=>3312, +30355=>3313, +30388=>3314, +30428=>3315, +30543=>3316, +30701=>3317, +30813=>3318, +30828=>3319, +30831=>3320, +31245=>3321, +31240=>3322, +31243=>3323, +31237=>3324, +31232=>3325, +31384=>3326, +31383=>3327, +31382=>3328, +31461=>3329, +31459=>3330, +31561=>3331, +31574=>3332, +31558=>3333, +31568=>3334, +31570=>3335, +31572=>3336, +31565=>3337, +31563=>3338, +31567=>3339, +31569=>3340, +60510=>3340, +31903=>3341, +31909=>3342, +32094=>3343, +32080=>3344, +32104=>3345, +32085=>3346, +32043=>3347, +32110=>3348, +32114=>3349, +32097=>3350, +32102=>3351, +32098=>3352, +32112=>3353, +32115=>3354, +21892=>3355, +32724=>3356, +32725=>3357, +32779=>3358, +32850=>3359, +32901=>3360, +33109=>3361, +33108=>3362, +33099=>3363, +33105=>3364, +33102=>3365, +33081=>3366, +33094=>3367, +33086=>3368, +33100=>3369, +33107=>3370, +33140=>3371, +33298=>3372, +33308=>3373, +33769=>3374, +33795=>3375, +33784=>3376, +33805=>3377, +33760=>3378, +33733=>3379, +33803=>3380, +33729=>3381, +58309=>3381, +33775=>3382, +33777=>3383, +33780=>3384, +33879=>3385, +33802=>3386, +33776=>3387, +33804=>3388, +33740=>3389, +33789=>3390, +33778=>3391, +33738=>3392, +33848=>3393, +33806=>3394, +33796=>3395, +33756=>3396, +33799=>3397, +33748=>3398, +33759=>3399, +34395=>3400, +34527=>3401, +34521=>3402, +34541=>3403, +34516=>3404, +34523=>3405, +34532=>3406, +34512=>3407, +34526=>3408, +34903=>3409, +35009=>3410, +35010=>3411, +34993=>3412, +35203=>3413, +35222=>3414, +35387=>3415, +35424=>3416, +35413=>3417, +35422=>3418, +35388=>3419, +35393=>3420, +35412=>3421, +35419=>3422, +35408=>3423, +35398=>3424, +35380=>3425, +35386=>3426, +35382=>3427, +35414=>3428, +35937=>3429, +35970=>3430, +36015=>3431, +36028=>3432, +36019=>3433, +36029=>3434, +36033=>3435, +36027=>3436, +36032=>3437, +36020=>3438, +36023=>3439, +36022=>3440, +36031=>3441, +36024=>3442, +36234=>3443, +36229=>3444, +36225=>3445, +36302=>3446, +36317=>3447, +36299=>3448, +36314=>3449, +36305=>3450, +36300=>3451, +36315=>3452, +36294=>3453, +36603=>3454, +36600=>3455, +36604=>3456, +36764=>3457, +36910=>3458, +36917=>3459, +36913=>3460, +36920=>3461, +36914=>3462, +36918=>3463, +37122=>3464, +37109=>3465, +37129=>3466, +37118=>3467, +37219=>3468, +37221=>3469, +37327=>3470, +37396=>3471, +37397=>3472, +37411=>3473, +37385=>3474, +37406=>3475, +37389=>3476, +37392=>3477, +37383=>3478, +37393=>3479, +38292=>3480, +38287=>3481, +38283=>3482, +38289=>3483, +38291=>3484, +38290=>3485, +38286=>3486, +38538=>3487, +38542=>3488, +38539=>3489, +38525=>3490, +38533=>3491, +38534=>3492, +38541=>3493, +38514=>3494, +38532=>3495, +38593=>3496, +38597=>3497, +38596=>3498, +38598=>3499, +38599=>3500, +38639=>3501, +38642=>3502, +38860=>3503, +38917=>3504, +38918=>3505, +38920=>3506, +39143=>3507, +39146=>3508, +39151=>3509, +39145=>3510, +39154=>3511, +39149=>3512, +39342=>3513, +39341=>3514, +40643=>3515, +12232=>3515, +40653=>3516, +12233=>3516, +40657=>3517, +12234=>3517, +20098=>3518, +20653=>3519, +20661=>3520, +20658=>3521, +20659=>3522, +20677=>3523, +20670=>3524, +20652=>3525, +20663=>3526, +20667=>3527, +20655=>3528, +20679=>3529, +21119=>3530, +21111=>3531, +21117=>3532, +21215=>3533, +21222=>3534, +21220=>3535, +21218=>3536, +21219=>3537, +21295=>3538, +21983=>3539, +21992=>3540, +21971=>3541, +21990=>3542, +21966=>3543, +21980=>3544, +21959=>3545, +21969=>3546, +21987=>3547, +21988=>3548, +21999=>3549, +21978=>3550, +21985=>3551, +21957=>3552, +21958=>3553, +21989=>3554, +21961=>3555, +22290=>3556, +22291=>3557, +22622=>3558, +22609=>3559, +22616=>3560, +22615=>3561, +22618=>3562, +22612=>3563, +22635=>3564, +22604=>3565, +22637=>3566, +22602=>3567, +22626=>3568, +22610=>3569, +22603=>3570, +22887=>3571, +23233=>3572, +23241=>3573, +23244=>3574, +23230=>3575, +23229=>3576, +23228=>3577, +23219=>3578, +23234=>3579, +23218=>3580, +23913=>3581, +23919=>3582, +24140=>3583, +24185=>3584, +24265=>3585, +24264=>3586, +24338=>3587, +24409=>3588, +24492=>3589, +24494=>3590, +24858=>3591, +24847=>3592, +24904=>3593, +24863=>3594, +24819=>3595, +24859=>3596, +24825=>3597, +24833=>3598, +24840=>3599, +24910=>3600, +24908=>3601, +24900=>3602, +24909=>3603, +24894=>3604, +24884=>3605, +24871=>3606, +24845=>3607, +24838=>3608, +24887=>3609, +25121=>3610, +25122=>3611, +25619=>3612, +25662=>3613, +25630=>3614, +25642=>3615, +25645=>3616, +25661=>3617, +25644=>3618, +25615=>3619, +25628=>3620, +25620=>3621, +25613=>3622, +25654=>3623, +25622=>3624, +25623=>3625, +25606=>3626, +25964=>3627, +26015=>3628, +26032=>3629, +26263=>3630, +26249=>3631, +26247=>3632, +26248=>3633, +26262=>3634, +26244=>3635, +26264=>3636, +26253=>3637, +26371=>3638, +27028=>3639, +26989=>3640, +26970=>3641, +26999=>3642, +26976=>3643, +26964=>3644, +26997=>3645, +26928=>3646, +27010=>3647, +26954=>3648, +26984=>3649, +26987=>3650, +26974=>3651, +26963=>3652, +27001=>3653, +27014=>3654, +26973=>3655, +26979=>3656, +26971=>3657, +27463=>3658, +27506=>3659, +27584=>3660, +27583=>3661, +27603=>3662, +27645=>3663, +28322=>3664, +28335=>3665, +28371=>3666, +28342=>3667, +28354=>3668, +28304=>3669, +28317=>3670, +28359=>3671, +28357=>3672, +28325=>3673, +28312=>3674, +28348=>3675, +28346=>3676, +28331=>3677, +28369=>3678, +28310=>3679, +28316=>3680, +28356=>3681, +28372=>3682, +28330=>3683, +28327=>3684, +28340=>3685, +29006=>3686, +29017=>3687, +29033=>3688, +29028=>3689, +29001=>3690, +29031=>3691, +29020=>3692, +29036=>3693, +29030=>3694, +29004=>3695, +29029=>3696, +29022=>3697, +28998=>3698, +29032=>3699, +29014=>3700, +29242=>3701, +29266=>3702, +29495=>3703, +29509=>3704, +29503=>3705, +29502=>3706, +29807=>3707, +29786=>3708, +29781=>3709, +29791=>3710, +29790=>3711, +29761=>3712, +29759=>3713, +29785=>3714, +29787=>3715, +58019=>3716, +29788=>3716, +30070=>3717, +30072=>3718, +30208=>3719, +30192=>3720, +30209=>3721, +30194=>3722, +30193=>3723, +30202=>3724, +30207=>3725, +30196=>3726, +30195=>3727, +30430=>3728, +30431=>3729, +30555=>3730, +30571=>3731, +30566=>3732, +30558=>3733, +30563=>3734, +30585=>3735, +30570=>3736, +30572=>3737, +30556=>3738, +30565=>3739, +30568=>3740, +30562=>3741, +30702=>3742, +30862=>3743, +30896=>3744, +30871=>3745, +30872=>3746, +30860=>3747, +30857=>3748, +30844=>3749, +30865=>3750, +30867=>3751, +30847=>3752, +31098=>3753, +31103=>3754, +31105=>3755, +33836=>3756, +31165=>3757, +31260=>3758, +31258=>3759, +31264=>3760, +31252=>3761, +31263=>3762, +31262=>3763, +31391=>3764, +31392=>3765, +31607=>3766, +31680=>3767, +31584=>3768, +31598=>3769, +31591=>3770, +31921=>3771, +31923=>3772, +31925=>3773, +32147=>3774, +32121=>3775, +32145=>3776, +32129=>3777, +32143=>3778, +32091=>3779, +32622=>3780, +32617=>3781, +32618=>3782, +32626=>3783, +32681=>3784, +32680=>3785, +32676=>3786, +32854=>3787, +32856=>3788, +32902=>3789, +32900=>3790, +33137=>3791, +33136=>3792, +33144=>3793, +33125=>3794, +33134=>3795, +33139=>3796, +33131=>3797, +33145=>3798, +33146=>3799, +33126=>3800, +33285=>3801, +33351=>3802, +33922=>3803, +33911=>3804, +33853=>3805, +33841=>3806, +33909=>3807, +33894=>3808, +33899=>3809, +33865=>3810, +33900=>3811, +33883=>3812, +33852=>3813, +33845=>3814, +33889=>3815, +33891=>3816, +33897=>3817, +33901=>3818, +33862=>3819, +34398=>3820, +34396=>3821, +34399=>3822, +34553=>3823, +34579=>3824, +34568=>3825, +34567=>3826, +34560=>3827, +34558=>3828, +34555=>3829, +34562=>3830, +34563=>3831, +34566=>3832, +34570=>3833, +34905=>3834, +35039=>3835, +35028=>3836, +35033=>3837, +35036=>3838, +35032=>3839, +35037=>3840, +35041=>3841, +35018=>3842, +35029=>3843, +35026=>3844, +35228=>3845, +35299=>3846, +35435=>3847, +35442=>3848, +35443=>3849, +35430=>3850, +35433=>3851, +35440=>3852, +35463=>3853, +35452=>3854, +35427=>3855, +35488=>3856, +35441=>3857, +35461=>3858, +35437=>3859, +35426=>3860, +35438=>3861, +35436=>3862, +35449=>3863, +35451=>3864, +35390=>3865, +35432=>3866, +35938=>3867, +35978=>3868, +35977=>3869, +36042=>3870, +36039=>3871, +36040=>3872, +36036=>3873, +36018=>3874, +36035=>3875, +36034=>3876, +36037=>3877, +36321=>3878, +36319=>3879, +36328=>3880, +36335=>3881, +36339=>3882, +36346=>3883, +36330=>3884, +36324=>3885, +36326=>3886, +36530=>3887, +36611=>3888, +36617=>3889, +36606=>3890, +36618=>3891, +36767=>3892, +36786=>3893, +36939=>3894, +36938=>3895, +36947=>3896, +36930=>3897, +36948=>3898, +36924=>3899, +36949=>3900, +36944=>3901, +36935=>3902, +36943=>3903, +36942=>3904, +36941=>3905, +36945=>3906, +36926=>3907, +36929=>3908, +37138=>3909, +37143=>3910, +37228=>3911, +37226=>3912, +37225=>3913, +37321=>3914, +37431=>3915, +37463=>3916, +37432=>3917, +37437=>3918, +37440=>3919, +37438=>3920, +37467=>3921, +37451=>3922, +37476=>3923, +37457=>3924, +37428=>3925, +37449=>3926, +37453=>3927, +37445=>3928, +37433=>3929, +37439=>3930, +37466=>3931, +38296=>3932, +38552=>3933, +38548=>3934, +38549=>3935, +38605=>3936, +38603=>3937, +38601=>3938, +38602=>3939, +38647=>3940, +38651=>3941, +38649=>3942, +38646=>3943, +38742=>3944, +38772=>3945, +38774=>3946, +38928=>3947, +38929=>3948, +38931=>3949, +38922=>3950, +38930=>3951, +38924=>3952, +39164=>3953, +39156=>3954, +39165=>3955, +39166=>3956, +39347=>3957, +39345=>3958, +39348=>3959, +39649=>3960, +40169=>3961, +40578=>3962, +40718=>3963, +12237=>3963, +40723=>3964, +12238=>3964, +40736=>3965, +12239=>3965, +20711=>3966, +20718=>3967, +20709=>3968, +20694=>3969, +20717=>3970, +60903=>3970, +20698=>3971, +20693=>3972, +20687=>3973, +20689=>3974, +20721=>3975, +20686=>3976, +20713=>3977, +20834=>3978, +20979=>3979, +21123=>3980, +21122=>3981, +21297=>3982, +21421=>3983, +22014=>3984, +22016=>3985, +22043=>3986, +22039=>3987, +22013=>3988, +22036=>3989, +22022=>3990, +22025=>3991, +22029=>3992, +22030=>3993, +22007=>3994, +22038=>3995, +22047=>3996, +22024=>3997, +22032=>3998, +22006=>3999, +22296=>4000, +22294=>4001, +22645=>4002, +22654=>4003, +22659=>4004, +22675=>4005, +22666=>4006, +22649=>4007, +22661=>4008, +22653=>4009, +22781=>4010, +22821=>4011, +22818=>4012, +22820=>4013, +22890=>4014, +22889=>4015, +23265=>4016, +23270=>4017, +23273=>4018, +23255=>4019, +23254=>4020, +23256=>4021, +23267=>4022, +23413=>4023, +23518=>4024, +23527=>4025, +23521=>4026, +23525=>4027, +23526=>4028, +23528=>4029, +23522=>4030, +23524=>4031, +23519=>4032, +23565=>4033, +23650=>4034, +23940=>4035, +23943=>4036, +24155=>4037, +24163=>4038, +24149=>4039, +24151=>4040, +24148=>4041, +24275=>4042, +24278=>4043, +24330=>4044, +24390=>4045, +24432=>4046, +24505=>4047, +24903=>4048, +24895=>4049, +24907=>4050, +24951=>4051, +24930=>4052, +24931=>4053, +24927=>4054, +24922=>4055, +24920=>4056, +24949=>4057, +25130=>4058, +25735=>4059, +25688=>4060, +25684=>4061, +25764=>4062, +25720=>4063, +25695=>4064, +25722=>4065, +25681=>4066, +25703=>4067, +25652=>4068, +25709=>4069, +25723=>4070, +25970=>4071, +26017=>4072, +26071=>4073, +26070=>4074, +26274=>4075, +26280=>4076, +26269=>4077, +27036=>4078, +27048=>4079, +27029=>4080, +27073=>4081, +27054=>4082, +27091=>4083, +27083=>4084, +27035=>4085, +27063=>4086, +27067=>4087, +27051=>4088, +27060=>4089, +27088=>4090, +27085=>4091, +27053=>4092, +27084=>4093, +27046=>4094, +27075=>4095, +27043=>4096, +27465=>4097, +27468=>4098, +27699=>4099, +28467=>4100, +28436=>4101, +28414=>4102, +28435=>4103, +28404=>4104, +28457=>4105, +28478=>4106, +28448=>4107, +28460=>4108, +28431=>4109, +28418=>4110, +28450=>4111, +28415=>4112, +28399=>4113, +28422=>4114, +28465=>4115, +28472=>4116, +28466=>4117, +28451=>4118, +28437=>4119, +28459=>4120, +28463=>4121, +28552=>4122, +28458=>4123, +28396=>4124, +28417=>4125, +28402=>4126, +28364=>4127, +28407=>4128, +29076=>4129, +29081=>4130, +29053=>4131, +29066=>4132, +29060=>4133, +29074=>4134, +29246=>4135, +29330=>4136, +29334=>4137, +29508=>4138, +29520=>4139, +29796=>4140, +29795=>4141, +29802=>4142, +29808=>4143, +29805=>4144, +29956=>4145, +30097=>4146, +30247=>4147, +30221=>4148, +30219=>4149, +30217=>4150, +30227=>4151, +30433=>4152, +30435=>4153, +30596=>4154, +30589=>4155, +30591=>4156, +30561=>4157, +30913=>4158, +30879=>4159, +30887=>4160, +30899=>4161, +30889=>4162, +30883=>4163, +31118=>4164, +31119=>4165, +31117=>4166, +31278=>4167, +31281=>4168, +31402=>4169, +31401=>4170, +31469=>4171, +31471=>4172, +31649=>4173, +31637=>4174, +31627=>4175, +31605=>4176, +31639=>4177, +31645=>4178, +31636=>4179, +31631=>4180, +31672=>4181, +58170=>4181, +31623=>4182, +31620=>4183, +31929=>4184, +31933=>4185, +31934=>4186, +32187=>4187, +32176=>4188, +32156=>4189, +32189=>4190, +32190=>4191, +32160=>4192, +32202=>4193, +32180=>4194, +32178=>4195, +32177=>4196, +32186=>4197, +32162=>4198, +32191=>4199, +32181=>4200, +32184=>4201, +32173=>4202, +32210=>4203, +58202=>4203, +32199=>4204, +32172=>4205, +32624=>4206, +32736=>4207, +32737=>4208, +32735=>4209, +32862=>4210, +32858=>4211, +32903=>4212, +33104=>4213, +33152=>4214, +33167=>4215, +33160=>4216, +33162=>4217, +33151=>4218, +33154=>4219, +33255=>4220, +33274=>4221, +33287=>4222, +33300=>4223, +33310=>4224, +33355=>4225, +33993=>4226, +33983=>4227, +33990=>4228, +33988=>4229, +33945=>4230, +33950=>4231, +33970=>4232, +33948=>4233, +33995=>4234, +33976=>4235, +33984=>4236, +34003=>4237, +33936=>4238, +33980=>4239, +34001=>4240, +33994=>4241, +34623=>4242, +34588=>4243, +34619=>4244, +34594=>4245, +34597=>4246, +34612=>4247, +34584=>4248, +34645=>4249, +34615=>4250, +34601=>4251, +35059=>4252, +35074=>4253, +35060=>4254, +35065=>4255, +35064=>4256, +35069=>4257, +35048=>4258, +35098=>4259, +35055=>4260, +35494=>4261, +35468=>4262, +35486=>4263, +35491=>4264, +35469=>4265, +35489=>4266, +35475=>4267, +35492=>4268, +35498=>4269, +35493=>4270, +35496=>4271, +35480=>4272, +35473=>4273, +35482=>4274, +35495=>4275, +35946=>4276, +35981=>4277, +35980=>4278, +36051=>4279, +36049=>4280, +36050=>4281, +36203=>4282, +36249=>4283, +36245=>4284, +36348=>4285, +36628=>4286, +36626=>4287, +36629=>4288, +36627=>4289, +36771=>4290, +36960=>4291, +36952=>4292, +36956=>4293, +36963=>4294, +36953=>4295, +36958=>4296, +36962=>4297, +36957=>4298, +36955=>4299, +37145=>4300, +37144=>4301, +37150=>4302, +37237=>4303, +37240=>4304, +37239=>4305, +37236=>4306, +37496=>4307, +37548=>4308, +37504=>4309, +37509=>4310, +37528=>4311, +37526=>4312, +37499=>4313, +37523=>4314, +37532=>4315, +37544=>4316, +37500=>4317, +37521=>4318, +38305=>4319, +38312=>4320, +38313=>4321, +38307=>4322, +38309=>4323, +38308=>4324, +38553=>4325, +38556=>4326, +38555=>4327, +38604=>4328, +38610=>4329, +38656=>4330, +38780=>4331, +38789=>4332, +38902=>4333, +38935=>4334, +38936=>4335, +39087=>4336, +39089=>4337, +39171=>4338, +39173=>4339, +39180=>4340, +39177=>4341, +39361=>4342, +39599=>4343, +39600=>4344, +39654=>4345, +39745=>4346, +39746=>4347, +40180=>4348, +40182=>4349, +40179=>4350, +40636=>4351, +40763=>4352, +12240=>4352, +40778=>4353, +12241=>4353, +20740=>4354, +20736=>4355, +20731=>4356, +20725=>4357, +20729=>4358, +20738=>4359, +20744=>4360, +20745=>4361, +20741=>4362, +20956=>4363, +21127=>4364, +21128=>4365, +21129=>4366, +21133=>4367, +21130=>4368, +21232=>4369, +21426=>4370, +22062=>4371, +22075=>4372, +22073=>4373, +22066=>4374, +22079=>4375, +22068=>4376, +22057=>4377, +22099=>4378, +22094=>4379, +22103=>4380, +22132=>4381, +22070=>4382, +22063=>4383, +22064=>4384, +22656=>4385, +22687=>4386, +22686=>4387, +22707=>4388, +22684=>4389, +22702=>4390, +22697=>4391, +22694=>4392, +22893=>4393, +23305=>4394, +23291=>4395, +23307=>4396, +23285=>4397, +23308=>4398, +23304=>4399, +23534=>4400, +23532=>4401, +23529=>4402, +23531=>4403, +23652=>4404, +23653=>4405, +23965=>4406, +23956=>4407, +24162=>4408, +24159=>4409, +24161=>4410, +24290=>4411, +24282=>4412, +24287=>4413, +24285=>4414, +24291=>4415, +24288=>4416, +24392=>4417, +24433=>4418, +24503=>4419, +24501=>4420, +24950=>4421, +24935=>4422, +24942=>4423, +24925=>4424, +24917=>4425, +24962=>4426, +24956=>4427, +24944=>4428, +24939=>4429, +24958=>4430, +24999=>4431, +24976=>4432, +25003=>4433, +24974=>4434, +25004=>4435, +24986=>4436, +24996=>4437, +24980=>4438, +25006=>4439, +25134=>4440, +25705=>4441, +25711=>4442, +25721=>4443, +25758=>4444, +25778=>4445, +25736=>4446, +25744=>4447, +57745=>4447, +25776=>4448, +25765=>4449, +25747=>4450, +25749=>4451, +25769=>4452, +25746=>4453, +25774=>4454, +25773=>4455, +25771=>4456, +25754=>4457, +25772=>4458, +25753=>4459, +25762=>4460, +25779=>4461, +25973=>4462, +25975=>4463, +25976=>4464, +26286=>4465, +26283=>4466, +26292=>4467, +26289=>4468, +27171=>4469, +27167=>4470, +27112=>4471, +27137=>4472, +27166=>4473, +27161=>4474, +27133=>4475, +27169=>4476, +27155=>4477, +27146=>4478, +27123=>4479, +27138=>4480, +27141=>4481, +27117=>4482, +27153=>4483, +27472=>4484, +27470=>4485, +27556=>4486, +27589=>4487, +27590=>4488, +28479=>4489, +28540=>4490, +28548=>4491, +28497=>4492, +28518=>4493, +28500=>4494, +28550=>4495, +28525=>4496, +28507=>4497, +28536=>4498, +28526=>4499, +28558=>4500, +28538=>4501, +28528=>4502, +28516=>4503, +28567=>4504, +28504=>4505, +28373=>4506, +28527=>4507, +28512=>4508, +28511=>4509, +29087=>4510, +29100=>4511, +29105=>4512, +29096=>4513, +29270=>4514, +29339=>4515, +29518=>4516, +29527=>4517, +29801=>4518, +29835=>4519, +29827=>4520, +29822=>4521, +29824=>4522, +30079=>4523, +30240=>4524, +30249=>4525, +30239=>4526, +30244=>4527, +30246=>4528, +30241=>4529, +30242=>4530, +30362=>4531, +30394=>4532, +30436=>4533, +30606=>4534, +30599=>4535, +30604=>4536, +30609=>4537, +30603=>4538, +30923=>4539, +30917=>4540, +30906=>4541, +30922=>4542, +30910=>4543, +30933=>4544, +30908=>4545, +30928=>4546, +31295=>4547, +31292=>4548, +31296=>4549, +31293=>4550, +31287=>4551, +31291=>4552, +31407=>4553, +31406=>4554, +31661=>4555, +31665=>4556, +31684=>4557, +31668=>4558, +31686=>4559, +31687=>4560, +31681=>4561, +31648=>4562, +31692=>4563, +31946=>4564, +32224=>4565, +32244=>4566, +32239=>4567, +32251=>4568, +32216=>4569, +32236=>4570, +32221=>4571, +32232=>4572, +32227=>4573, +32218=>4574, +32222=>4575, +32233=>4576, +32158=>4577, +32217=>4578, +32242=>4579, +32249=>4580, +32629=>4581, +32631=>4582, +32687=>4583, +32745=>4584, +32806=>4585, +33179=>4586, +33180=>4587, +33181=>4588, +33184=>4589, +33178=>4590, +33176=>4591, +34071=>4592, +34109=>4593, +34074=>4594, +34030=>4595, +34092=>4596, +34093=>4597, +34067=>4598, +34065=>4599, +34083=>4600, +34081=>4601, +34068=>4602, +34028=>4603, +34085=>4604, +34047=>4605, +34054=>4606, +34690=>4607, +34676=>4608, +34678=>4609, +34656=>4610, +34662=>4611, +34680=>4612, +34664=>4613, +34649=>4614, +34647=>4615, +34636=>4616, +34643=>4617, +34907=>4618, +34909=>4619, +35088=>4620, +35079=>4621, +35090=>4622, +35091=>4623, +35093=>4624, +35082=>4625, +35516=>4626, +35538=>4627, +35527=>4628, +35524=>4629, +35477=>4630, +35531=>4631, +35576=>4632, +35506=>4633, +35529=>4634, +35522=>4635, +35519=>4636, +35504=>4637, +35542=>4638, +35533=>4639, +35510=>4640, +35513=>4641, +35547=>4642, +35916=>4643, +35918=>4644, +35948=>4645, +36064=>4646, +36062=>4647, +36070=>4648, +36068=>4649, +36076=>4650, +36077=>4651, +36066=>4652, +36067=>4653, +36060=>4654, +36074=>4655, +36065=>4656, +36205=>4657, +36255=>4658, +36259=>4659, +36395=>4660, +36368=>4661, +36381=>4662, +36386=>4663, +36367=>4664, +36393=>4665, +36383=>4666, +36385=>4667, +36382=>4668, +36538=>4669, +36637=>4670, +36635=>4671, +36639=>4672, +36649=>4673, +36646=>4674, +36650=>4675, +36636=>4676, +36638=>4677, +36645=>4678, +36969=>4679, +36974=>4680, +36968=>4681, +36973=>4682, +36983=>4683, +37168=>4684, +37165=>4685, +37159=>4686, +37169=>4687, +37255=>4688, +37257=>4689, +37259=>4690, +37251=>4691, +37573=>4692, +37563=>4693, +37559=>4694, +37610=>4695, +37604=>4696, +37569=>4697, +37555=>4698, +37564=>4699, +37586=>4700, +37575=>4701, +37616=>4702, +37554=>4703, +38317=>4704, +38321=>4705, +38660=>4706, +38662=>4707, +38663=>4708, +38665=>4709, +38752=>4710, +38797=>4711, +38795=>4712, +38799=>4713, +38945=>4714, +38955=>4715, +38940=>4716, +39091=>4717, +39178=>4718, +39187=>4719, +39186=>4720, +39192=>4721, +39389=>4722, +39376=>4723, +39391=>4724, +39387=>4725, +39377=>4726, +39381=>4727, +39378=>4728, +39385=>4729, +39607=>4730, +39662=>4731, +39663=>4732, +39719=>4733, +39749=>4734, +39748=>4735, +39799=>4736, +39791=>4737, +40198=>4738, +40201=>4739, +40195=>4740, +40617=>4741, +40638=>4742, +40654=>4743, +22696=>4744, +12242=>4745, +40786=>4745, +20754=>4746, +20760=>4747, +20756=>4748, +20752=>4749, +20757=>4750, +20864=>4751, +20906=>4752, +20957=>4753, +21137=>4754, +21139=>4755, +21235=>4756, +22105=>4757, +22123=>4758, +22137=>4759, +22121=>4760, +22116=>4761, +22136=>4762, +22122=>4763, +22120=>4764, +22117=>4765, +22129=>4766, +22127=>4767, +22124=>4768, +22114=>4769, +22134=>4770, +22721=>4771, +22718=>4772, +22727=>4773, +22725=>4774, +22894=>4775, +23325=>4776, +23348=>4777, +23416=>4778, +23536=>4779, +23566=>4780, +24394=>4781, +25010=>4782, +24977=>4783, +25001=>4784, +24970=>4785, +25037=>4786, +25014=>4787, +25022=>4788, +25034=>4789, +25032=>4790, +25136=>4791, +25797=>4792, +25793=>4793, +25803=>4794, +25787=>4795, +25788=>4796, +25818=>4797, +25796=>4798, +25799=>4799, +25794=>4800, +25805=>4801, +25791=>4802, +25810=>4803, +25812=>4804, +25790=>4805, +25972=>4806, +26310=>4807, +26313=>4808, +26297=>4809, +26308=>4810, +26311=>4811, +26296=>4812, +27197=>4813, +27192=>4814, +27194=>4815, +27225=>4816, +27243=>4817, +27224=>4818, +27193=>4819, +27204=>4820, +27234=>4821, +27233=>4822, +27211=>4823, +27207=>4824, +27189=>4825, +27231=>4826, +27208=>4827, +27481=>4828, +27511=>4829, +27653=>4830, +28610=>4831, +28593=>4832, +28577=>4833, +28611=>4834, +28580=>4835, +28609=>4836, +28583=>4837, +28595=>4838, +28608=>4839, +28601=>4840, +28598=>4841, +60318=>4841, +28582=>4842, +28576=>4843, +28596=>4844, +29118=>4845, +29129=>4846, +29136=>4847, +29138=>4848, +29128=>4849, +29141=>4850, +29113=>4851, +29134=>4852, +29145=>4853, +29148=>4854, +29123=>4855, +29124=>4856, +29544=>4857, +29852=>4858, +29859=>4859, +29848=>4860, +29855=>4861, +29854=>4862, +29922=>4863, +29964=>4864, +29965=>4865, +30260=>4866, +30264=>4867, +30266=>4868, +30439=>4869, +30437=>4870, +30624=>4871, +30622=>4872, +30623=>4873, +30629=>4874, +30952=>4875, +30938=>4876, +30956=>4877, +30951=>4878, +31142=>4879, +31309=>4880, +31310=>4881, +31302=>4882, +31308=>4883, +31307=>4884, +31418=>4885, +31705=>4886, +31761=>4887, +31689=>4888, +31716=>4889, +31707=>4890, +31713=>4891, +31721=>4892, +31718=>4893, +31957=>4894, +31958=>4895, +32266=>4896, +32273=>4897, +32264=>4898, +32283=>4899, +32291=>4900, +32286=>4901, +32285=>4902, +58211=>4902, +32265=>4903, +32272=>4904, +32633=>4905, +32690=>4906, +32752=>4907, +32753=>4908, +32750=>4909, +32808=>4910, +58239=>4910, +33203=>4911, +33193=>4912, +33192=>4913, +33275=>4914, +33288=>4915, +33368=>4916, +33369=>4917, +34122=>4918, +34137=>4919, +34120=>4920, +34152=>4921, +34153=>4922, +34115=>4923, +34121=>4924, +34157=>4925, +34154=>4926, +34142=>4927, +34691=>4928, +34719=>4929, +34718=>4930, +34722=>4931, +34701=>4932, +34913=>4933, +35114=>4934, +35122=>4935, +35109=>4936, +35115=>4937, +35105=>4938, +35242=>4939, +35238=>4940, +58391=>4940, +35558=>4941, +35578=>4942, +35563=>4943, +35569=>4944, +35584=>4945, +35548=>4946, +35559=>4947, +35566=>4948, +35582=>4949, +35585=>4950, +35586=>4951, +35575=>4952, +35565=>4953, +35571=>4954, +35574=>4955, +35580=>4956, +35947=>4957, +35949=>4958, +35987=>4959, +36084=>4960, +36420=>4961, +36401=>4962, +36404=>4963, +36418=>4964, +36409=>4965, +36405=>4966, +36667=>4967, +36655=>4968, +36664=>4969, +36659=>4970, +36776=>4971, +36774=>4972, +36981=>4973, +36980=>4974, +36984=>4975, +36978=>4976, +36988=>4977, +36986=>4978, +37172=>4979, +37266=>4980, +37664=>4981, +37686=>4982, +37624=>4983, +37683=>4984, +37679=>4985, +37666=>4986, +37628=>4987, +37675=>4988, +37636=>4989, +37658=>4990, +37648=>4991, +37670=>4992, +37665=>4993, +37653=>4994, +37678=>4995, +37657=>4996, +38331=>4997, +38567=>4998, +38568=>4999, +38570=>5000, +38613=>5001, +38670=>5002, +38673=>5003, +38678=>5004, +38669=>5005, +38675=>5006, +38671=>5007, +38747=>5008, +58565=>5009, +38748=>5009, +38758=>5010, +38808=>5011, +38960=>5012, +38968=>5013, +38971=>5014, +38967=>5015, +38957=>5016, +38969=>5017, +38948=>5018, +39184=>5019, +39208=>5020, +39198=>5021, +39195=>5022, +39201=>5023, +39194=>5024, +39405=>5025, +39394=>5026, +39409=>5027, +39608=>5028, +39612=>5029, +39675=>5030, +39661=>5031, +39720=>5032, +39825=>5033, +40213=>5034, +40227=>5035, +40230=>5036, +40232=>5037, +40210=>5038, +40219=>5039, +40664=>5040, +40660=>5041, +40845=>5042, +12243=>5042, +40860=>5043, +12244=>5043, +20778=>5044, +20767=>5045, +20769=>5046, +20786=>5047, +21237=>5048, +22158=>5049, +22144=>5050, +22160=>5051, +22149=>5052, +22151=>5053, +22159=>5054, +22741=>5055, +22739=>5056, +22737=>5057, +22734=>5058, +23344=>5059, +23338=>5060, +23332=>5061, +23418=>5062, +23607=>5063, +23656=>5064, +23996=>5065, +23994=>5066, +23997=>5067, +23992=>5068, +24171=>5069, +24396=>5070, +24509=>5071, +25033=>5072, +25026=>5073, +25031=>5074, +25062=>5075, +25035=>5076, +25138=>5077, +25140=>5078, +25806=>5079, +25802=>5080, +25816=>5081, +25824=>5082, +25840=>5083, +25830=>5084, +25836=>5085, +25841=>5086, +25826=>5087, +25837=>5088, +25986=>5089, +25987=>5090, +26329=>5091, +26326=>5092, +27264=>5093, +27284=>5094, +27268=>5095, +27298=>5096, +27292=>5097, +27355=>5098, +27299=>5099, +27262=>5100, +27287=>5101, +27280=>5102, +27296=>5103, +27484=>5104, +27566=>5105, +27610=>5106, +27656=>5107, +28632=>5108, +28657=>5109, +28639=>5110, +28640=>5111, +28635=>5112, +28644=>5113, +28651=>5114, +28655=>5115, +28544=>5116, +28652=>5117, +28641=>5118, +28649=>5119, +28629=>5120, +28654=>5121, +28656=>5122, +29159=>5123, +29151=>5124, +60361=>5124, +29166=>5125, +29158=>5126, +29157=>5127, +29165=>5128, +29164=>5129, +29172=>5130, +29152=>5131, +29237=>5132, +29254=>5133, +29552=>5134, +29554=>5135, +29865=>5136, +29872=>5137, +29862=>5138, +29864=>5139, +30278=>5140, +30274=>5141, +30284=>5142, +30442=>5143, +30643=>5144, +30634=>5145, +30640=>5146, +30636=>5147, +30631=>5148, +30637=>5149, +30703=>5150, +30967=>5151, +30970=>5152, +30964=>5153, +30959=>5154, +30977=>5155, +31143=>5156, +31146=>5157, +31319=>5158, +31423=>5159, +31751=>5160, +31757=>5161, +31742=>5162, +31735=>5163, +31756=>5164, +31712=>5165, +31968=>5166, +31964=>5167, +31966=>5168, +31970=>5169, +31967=>5170, +31961=>5171, +31965=>5172, +32302=>5173, +32318=>5174, +32326=>5175, +32311=>5176, +32306=>5177, +32323=>5178, +32299=>5179, +32317=>5180, +32305=>5181, +32325=>5182, +32321=>5183, +32308=>5184, +32313=>5185, +32328=>5186, +32309=>5187, +32319=>5188, +32303=>5189, +32580=>5190, +32755=>5191, +32764=>5192, +32881=>5193, +32882=>5194, +32880=>5195, +32879=>5196, +32883=>5197, +33222=>5198, +33219=>5199, +33210=>5200, +33218=>5201, +33216=>5202, +33215=>5203, +33213=>5204, +33225=>5205, +33214=>5206, +33256=>5207, +33289=>5208, +33393=>5209, +34218=>5210, +34180=>5211, +34174=>5212, +34204=>5213, +34193=>5214, +34196=>5215, +34223=>5216, +34203=>5217, +34183=>5218, +34216=>5219, +34186=>5220, +34214=>5221, +34407=>5222, +34752=>5223, +34769=>5224, +34739=>5225, +34770=>5226, +34758=>5227, +34731=>5228, +34747=>5229, +34746=>5230, +34760=>5231, +34763=>5232, +35131=>5233, +35126=>5234, +35140=>5235, +35128=>5236, +35133=>5237, +35244=>5238, +35598=>5239, +35607=>5240, +35609=>5241, +35611=>5242, +35594=>5243, +35616=>5244, +35613=>5245, +35588=>5246, +35600=>5247, +35905=>5248, +35903=>5249, +35955=>5250, +36090=>5251, +36093=>5252, +36092=>5253, +36088=>5254, +36091=>5255, +36264=>5256, +36425=>5257, +36427=>5258, +36424=>5259, +36426=>5260, +36676=>5261, +36670=>5262, +36674=>5263, +36677=>5264, +36671=>5265, +36991=>5266, +36989=>5267, +36996=>5268, +36993=>5269, +36994=>5270, +36992=>5271, +37177=>5272, +37283=>5273, +37278=>5274, +37276=>5275, +37709=>5276, +37762=>5277, +37672=>5278, +37749=>5279, +37706=>5280, +37733=>5281, +37707=>5282, +37656=>5283, +37758=>5284, +37740=>5285, +37723=>5286, +37744=>5287, +37722=>5288, +37716=>5289, +38346=>5290, +38347=>5291, +38348=>5292, +38344=>5293, +38342=>5294, +38577=>5295, +38584=>5296, +38614=>5297, +38684=>5298, +38686=>5299, +38816=>5300, +38867=>5301, +38982=>5302, +39094=>5303, +39221=>5304, +39425=>5305, +39423=>5306, +39854=>5307, +39851=>5308, +39850=>5309, +39853=>5310, +40251=>5311, +40255=>5312, +40587=>5313, +40655=>5314, +40670=>5315, +40668=>5316, +40669=>5317, +40667=>5318, +40766=>5319, +40779=>5320, +21474=>5321, +22165=>5322, +22190=>5323, +22745=>5324, +22744=>5325, +23352=>5326, +24413=>5327, +25059=>5328, +25139=>5329, +25844=>5330, +25842=>5331, +25854=>5332, +25862=>5333, +25850=>5334, +25851=>5335, +25847=>5336, +26039=>5337, +26332=>5338, +26406=>5339, +27315=>5340, +27308=>5341, +27331=>5342, +27323=>5343, +27320=>5344, +27330=>5345, +27310=>5346, +27311=>5347, +27487=>5348, +27512=>5349, +27567=>5350, +28681=>5351, +28683=>5352, +28670=>5353, +28678=>5354, +28666=>5355, +28689=>5356, +28687=>5357, +29179=>5358, +29180=>5359, +29182=>5360, +29176=>5361, +29559=>5362, +29557=>5363, +29863=>5364, +29887=>5365, +29973=>5366, +30294=>5367, +30296=>5368, +30290=>5369, +30653=>5370, +30655=>5371, +30651=>5372, +30652=>5373, +30990=>5374, +31150=>5375, +31329=>5376, +31330=>5377, +31328=>5378, +31428=>5379, +31429=>5380, +31787=>5381, +31783=>5382, +31786=>5383, +31774=>5384, +31779=>5385, +31777=>5386, +31975=>5387, +32340=>5388, +32341=>5389, +32350=>5390, +32346=>5391, +32353=>5392, +32338=>5393, +32345=>5394, +32584=>5395, +32761=>5396, +32763=>5397, +32887=>5398, +32886=>5399, +33229=>5400, +33231=>5401, +33290=>5402, +34255=>5403, +34217=>5404, +34253=>5405, +34256=>5406, +34249=>5407, +34224=>5408, +34234=>5409, +34233=>5410, +34799=>5411, +34796=>5412, +34802=>5413, +34784=>5414, +35206=>5415, +35250=>5416, +35316=>5417, +35624=>5418, +35641=>5419, +35628=>5420, +35627=>5421, +35920=>5422, +36101=>5423, +36441=>5424, +36451=>5425, +36454=>5426, +36452=>5427, +36447=>5428, +36437=>5429, +36544=>5430, +36681=>5431, +36685=>5432, +36999=>5433, +36995=>5434, +37000=>5435, +37291=>5436, +37292=>5437, +37328=>5438, +37780=>5439, +37770=>5440, +37782=>5441, +37794=>5442, +37811=>5443, +37806=>5444, +37804=>5445, +37808=>5446, +37784=>5447, +37786=>5448, +37783=>5449, +38356=>5450, +38358=>5451, +38352=>5452, +38357=>5453, +38626=>5454, +38620=>5455, +38617=>5456, +38619=>5457, +38622=>5458, +38692=>5459, +38819=>5460, +38822=>5461, +38829=>5462, +38905=>5463, +38989=>5464, +38991=>5465, +38988=>5466, +38990=>5467, +38995=>5468, +39098=>5469, +39230=>5470, +39231=>5471, +39229=>5472, +39214=>5473, +39333=>5474, +39438=>5475, +39617=>5476, +39683=>5477, +39686=>5478, +39759=>5479, +39758=>5480, +39757=>5481, +39882=>5482, +39881=>5483, +39933=>5484, +39880=>5485, +39872=>5486, +40273=>5487, +40285=>5488, +40288=>5489, +40672=>5490, +40725=>5491, +40748=>5492, +20787=>5493, +22181=>5494, +22184=>5495, +22750=>5496, +22751=>5497, +22754=>5498, +23541=>5499, +40848=>5500, +24300=>5501, +25074=>5502, +25079=>5503, +25078=>5504, +25077=>5505, +25856=>5506, +25871=>5507, +26336=>5508, +26333=>5509, +27365=>5510, +27357=>5511, +27354=>5512, +27347=>5513, +28699=>5514, +28703=>5515, +28712=>5516, +28698=>5517, +28701=>5518, +28693=>5519, +28696=>5520, +29190=>5521, +29197=>5522, +29272=>5523, +29346=>5524, +29560=>5525, +29562=>5526, +29885=>5527, +29898=>5528, +29923=>5529, +30087=>5530, +30086=>5531, +30303=>5532, +30305=>5533, +30663=>5534, +31001=>5535, +31153=>5536, +31339=>5537, +31337=>5538, +31806=>5539, +31807=>5540, +31800=>5541, +31805=>5542, +31799=>5543, +31808=>5544, +32363=>5545, +32365=>5546, +32377=>5547, +32361=>5548, +32362=>5549, +32371=>5550, +32645=>5551, +32694=>5552, +32697=>5553, +32696=>5554, +33240=>5555, +34281=>5556, +34269=>5557, +34282=>5558, +34261=>5559, +34276=>5560, +34277=>5561, +34295=>5562, +34811=>5563, +34821=>5564, +34829=>5565, +34809=>5566, +34814=>5567, +35168=>5568, +35167=>5569, +35158=>5570, +35166=>5571, +35649=>5572, +35676=>5573, +35672=>5574, +35657=>5575, +35674=>5576, +35662=>5577, +35663=>5578, +35654=>5579, +35673=>5580, +36104=>5581, +36106=>5582, +36476=>5583, +36466=>5584, +36487=>5585, +36470=>5586, +36460=>5587, +36474=>5588, +36468=>5589, +36692=>5590, +36686=>5591, +36781=>5592, +37002=>5593, +37003=>5594, +37297=>5595, +37294=>5596, +37857=>5597, +37841=>5598, +37855=>5599, +37827=>5600, +37832=>5601, +37852=>5602, +37853=>5603, +37846=>5604, +37858=>5605, +37837=>5606, +37848=>5607, +37860=>5608, +37847=>5609, +37864=>5610, +38364=>5611, +38580=>5612, +38627=>5613, +38698=>5614, +38695=>5615, +38753=>5616, +38876=>5617, +38907=>5618, +39006=>5619, +39000=>5620, +39003=>5621, +39100=>5622, +39237=>5623, +39241=>5624, +39446=>5625, +39449=>5626, +39693=>5627, +39912=>5628, +39911=>5629, +39894=>5630, +39899=>5631, +40329=>5632, +40289=>5633, +40306=>5634, +40298=>5635, +40300=>5636, +40594=>5637, +40599=>5638, +40595=>5639, +40628=>5640, +21240=>5641, +22199=>5642, +22198=>5643, +22196=>5644, +22204=>5645, +22756=>5646, +23360=>5647, +23363=>5648, +23421=>5649, +23542=>5650, +24009=>5651, +25080=>5652, +25082=>5653, +25880=>5654, +25876=>5655, +25881=>5656, +26342=>5657, +26407=>5658, +27372=>5659, +28734=>5660, +28720=>5661, +28722=>5662, +29200=>5663, +29563=>5664, +29903=>5665, +30306=>5666, +30309=>5667, +31014=>5668, +31018=>5669, +31020=>5670, +31019=>5671, +31431=>5672, +31478=>5673, +31820=>5674, +31811=>5675, +31821=>5676, +31983=>5677, +31984=>5678, +36782=>5679, +32381=>5680, +32380=>5681, +32386=>5682, +32588=>5683, +32768=>5684, +33242=>5685, +33382=>5686, +34299=>5687, +34297=>5688, +34321=>5689, +34298=>5690, +34310=>5691, +34315=>5692, +34311=>5693, +34314=>5694, +34836=>5695, +34837=>5696, +35172=>5697, +35258=>5698, +35320=>5699, +35696=>5700, +35692=>5701, +35686=>5702, +35695=>5703, +35679=>5704, +35691=>5705, +36111=>5706, +36109=>5707, +36489=>5708, +36481=>5709, +36485=>5710, +36482=>5711, +37300=>5712, +37323=>5713, +37912=>5714, +37891=>5715, +37885=>5716, +38369=>5717, +38704=>5718, +39108=>5719, +39250=>5720, +39249=>5721, +39336=>5722, +39467=>5723, +39472=>5724, +39479=>5725, +39477=>5726, +39955=>5727, +39949=>5728, +40569=>5729, +40629=>5730, +40680=>5731, +40751=>5732, +40799=>5733, +40803=>5734, +40801=>5735, +20791=>5736, +20792=>5737, +22209=>5738, +22208=>5739, +22210=>5740, +22804=>5741, +23660=>5742, +24013=>5743, +25084=>5744, +25086=>5745, +25885=>5746, +25884=>5747, +26005=>5748, +26345=>5749, +27387=>5750, +27396=>5751, +27386=>5752, +27570=>5753, +28748=>5754, +29211=>5755, +29351=>5756, +29910=>5757, +29908=>5758, +30313=>5759, +30675=>5760, +31824=>5761, +32399=>5762, +32396=>5763, +32700=>5764, +34327=>5765, +34349=>5766, +34330=>5767, +34851=>5768, +34850=>5769, +34849=>5770, +34847=>5771, +35178=>5772, +35180=>5773, +35261=>5774, +35700=>5775, +35703=>5776, +35709=>5777, +36115=>5778, +36490=>5779, +36493=>5780, +36491=>5781, +36703=>5782, +36783=>5783, +37306=>5784, +37934=>5785, +37939=>5786, +37941=>5787, +37946=>5788, +37944=>5789, +37938=>5790, +37931=>5791, +38370=>5792, +38712=>5793, +38713=>5794, +38706=>5795, +38911=>5796, +58586=>5796, +39015=>5797, +39013=>5798, +39255=>5799, +39493=>5800, +39491=>5801, +39488=>5802, +39486=>5803, +39631=>5804, +39764=>5805, +39761=>5806, +39981=>5807, +39973=>5808, +40367=>5809, +40372=>5810, +40386=>5811, +40376=>5812, +40605=>5813, +40687=>5814, +40729=>5815, +40796=>5816, +40806=>5817, +40807=>5818, +20796=>5819, +20795=>5820, +22216=>5821, +22218=>5822, +22217=>5823, +23423=>5824, +24020=>5825, +24018=>5826, +24398=>5827, +25087=>5828, +25892=>5829, +27402=>5830, +27489=>5831, +28753=>5832, +28760=>5833, +29568=>5834, +29924=>5835, +30090=>5836, +30318=>5837, +30316=>5838, +31155=>5839, +31840=>5840, +31839=>5841, +32894=>5842, +32893=>5843, +33247=>5844, +35186=>5845, +35183=>5846, +35324=>5847, +35712=>5848, +36118=>5849, +36119=>5850, +36497=>5851, +36499=>5852, +36705=>5853, +37192=>5854, +37956=>5855, +37969=>5856, +37970=>5857, +38717=>5858, +38718=>5859, +38851=>5860, +38849=>5861, +39019=>5862, +39253=>5863, +39509=>5864, +39501=>5865, +39634=>5866, +39706=>5867, +40009=>5868, +39985=>5869, +39998=>5870, +39995=>5871, +40403=>5872, +40407=>5873, +40756=>5874, +40812=>5875, +40810=>5876, +40852=>5877, +22220=>5878, +24022=>5879, +25088=>5880, +25891=>5881, +25899=>5882, +25898=>5883, +26348=>5884, +27408=>5885, +29914=>5886, +31434=>5887, +31844=>5888, +31843=>5889, +31845=>5890, +32403=>5891, +32406=>5892, +32404=>5893, +33250=>5894, +34360=>5895, +34367=>5896, +34865=>5897, +35722=>5898, +37008=>5899, +37007=>5900, +37987=>5901, +37984=>5902, +37988=>5903, +38760=>5904, +39023=>5905, +39260=>5906, +39514=>5907, +39515=>5908, +39511=>5909, +39635=>5910, +39636=>5911, +39633=>5912, +40020=>5913, +40023=>5914, +40022=>5915, +40421=>5916, +40607=>5917, +40692=>5918, +22225=>5919, +22761=>5920, +25900=>5921, +28766=>5922, +30321=>5923, +30322=>5924, +30679=>5925, +60226=>5925, +32592=>5926, +32648=>5927, +34870=>5928, +34873=>5929, +34914=>5930, +35731=>5931, +35730=>5932, +35734=>5933, +33399=>5934, +36123=>5935, +37312=>5936, +37994=>5937, +38722=>5938, +38728=>5939, +38724=>5940, +38854=>5941, +39024=>5942, +39519=>5943, +39714=>5944, +39768=>5945, +40031=>5946, +40441=>5947, +40442=>5948, +40572=>5949, +40573=>5950, +40711=>5951, +40823=>5952, +40818=>5953, +24307=>5954, +27414=>5955, +28771=>5956, +31852=>5957, +31854=>5958, +34875=>5959, +35264=>5960, +36513=>5961, +37313=>5962, +38002=>5963, +38000=>5964, +39025=>5965, +39262=>5966, +39638=>5967, +39715=>5968, +40652=>5969, +28772=>5970, +30682=>5971, +35738=>5972, +38007=>5973, +38857=>5974, +39522=>5975, +39525=>5976, +32412=>5977, +35740=>5978, +36522=>5979, +37317=>5980, +38013=>5981, +38014=>5982, +38012=>5983, +40055=>5984, +40056=>5985, +40695=>5986, +35924=>5987, +38015=>5988, +40474=>5989, +29224=>5990, +39530=>5991, +39729=>5992, +40475=>5993, +40478=>5994, +31858=>5995, +20034=>5996, +20060=>5997, +12048=>5998, +20981=>5998, +12053=>5999, +21274=>5999, +12058=>6000, +21378=>6000, +19975=>6001, +19980=>6002, +20039=>6003, +20109=>6004, +12062=>6005, +22231=>6005, +12076=>6006, +23662=>6006, +12091=>6007, +24435=>6007, +19983=>6008, +20871=>6009, +19982=>6010, +20014=>6011, +20115=>6012, +20162=>6013, +20169=>6014, +20168=>6015, +20888=>6016, +21244=>6017, +21356=>6018, +21433=>6019, +22304=>6020, +22787=>6021, +22828=>6022, +23568=>6023, +60417=>6023, +24063=>6024, +26081=>6025, +12110=>6026, +27571=>6026, +27596=>6027, +12115=>6028, +27668=>6028, +12121=>6029, +29247=>6029, +20017=>6030, +20028=>6031, +20200=>6032, +20188=>6033, +20201=>6034, +20193=>6035, +20189=>6036, +20186=>6037, +21004=>6038, +21001=>6039, +21276=>6040, +21324=>6041, +22306=>6042, +22307=>6043, +22807=>6044, +22831=>6045, +23425=>6046, +23428=>6047, +23570=>6048, +23611=>6049, +23668=>6050, +23667=>6051, +24068=>6052, +24192=>6053, +24194=>6054, +24521=>6055, +25097=>6056, +25168=>6057, +27669=>6058, +27702=>6059, +27715=>6060, +27711=>6061, +27707=>6062, +29358=>6063, +29360=>6064, +29578=>6065, +12145=>6066, +31160=>6066, +32906=>6067, +38430=>6068, +20238=>6069, +20248=>6070, +20268=>6071, +20213=>6072, +20244=>6073, +20209=>6074, +20224=>6075, +20215=>6076, +20232=>6077, +20253=>6078, +20226=>6079, +20229=>6080, +20258=>6081, +20243=>6082, +20228=>6083, +20212=>6084, +20242=>6085, +20913=>6086, +21011=>6087, +21008=>6088, +21158=>6089, +21282=>6090, +21279=>6091, +21325=>6092, +21386=>6093, +21511=>6094, +22241=>6095, +22239=>6096, +22318=>6097, +22314=>6098, +22324=>6099, +22844=>6100, +22912=>6101, +22908=>6102, +22917=>6103, +22907=>6104, +22910=>6105, +22903=>6106, +22911=>6107, +23382=>6108, +23573=>6109, +23589=>6110, +23676=>6111, +23674=>6112, +23675=>6113, +23678=>6114, +24031=>6115, +24181=>6116, +57646=>6116, +24196=>6117, +24322=>6118, +24346=>6119, +24436=>6120, +24533=>6121, +24532=>6122, +24527=>6123, +25180=>6124, +25182=>6125, +25188=>6126, +25185=>6127, +25190=>6128, +25186=>6129, +25177=>6130, +25184=>6131, +25178=>6132, +25189=>6133, +25911=>6134, +26095=>6135, +26094=>6136, +26430=>6137, +26425=>6138, +26424=>6139, +26427=>6140, +26426=>6141, +26431=>6142, +26428=>6143, +26419=>6144, +27672=>6145, +27718=>6146, +27730=>6147, +27740=>6148, +27727=>6149, +27722=>6150, +60796=>6150, +27732=>6151, +27723=>6152, +27724=>6153, +28785=>6154, +29278=>6155, +29364=>6156, +29365=>6157, +29582=>6158, +29994=>6159, +30335=>6160, +31349=>6161, +12153=>6162, +32593=>6162, +12171=>6163, +33400=>6163, +33404=>6164, +33408=>6165, +33405=>6166, +33407=>6167, +12172=>6168, +34381=>6168, +12177=>6169, +35198=>6169, +37017=>6170, +59347=>6171, +37015=>6171, +37016=>6172, +37019=>6173, +37012=>6174, +38434=>6175, +38436=>6176, +38432=>6177, +38435=>6178, +20310=>6179, +20283=>6180, +20322=>6181, +20297=>6182, +20307=>6183, +20324=>6184, +20286=>6185, +20327=>6186, +20306=>6187, +20319=>6188, +20289=>6189, +20312=>6190, +20269=>6191, +20275=>6192, +20287=>6193, +20321=>6194, +20879=>6195, +20921=>6196, +21020=>6197, +21022=>6198, +21025=>6199, +21165=>6200, +21166=>6201, +21257=>6202, +21347=>6203, +21362=>6204, +21390=>6205, +21391=>6206, +21552=>6207, +21559=>6208, +21546=>6209, +21588=>6210, +21573=>6211, +21529=>6212, +21532=>6213, +21541=>6214, +21528=>6215, +21565=>6216, +21583=>6217, +21569=>6218, +21544=>6219, +21540=>6220, +21575=>6221, +22254=>6222, +22247=>6223, +22245=>6224, +22337=>6225, +22341=>6226, +22348=>6227, +22345=>6228, +22347=>6229, +22354=>6230, +22790=>6231, +22848=>6232, +22950=>6233, +22936=>6234, +22944=>6235, +22935=>6236, +22926=>6237, +22946=>6238, +22928=>6239, +22927=>6240, +22951=>6241, +22945=>6242, +23438=>6243, +23442=>6244, +23592=>6245, +23594=>6246, +23693=>6247, +23695=>6248, +23688=>6249, +23691=>6250, +23689=>6251, +23698=>6252, +23690=>6253, +23686=>6254, +23699=>6255, +23701=>6256, +24032=>6257, +24074=>6258, +24078=>6259, +24203=>6260, +24201=>6261, +24204=>6262, +24200=>6263, +24205=>6264, +24325=>6265, +24349=>6266, +24440=>6267, +24438=>6268, +24530=>6269, +24529=>6270, +24528=>6271, +24557=>6272, +24552=>6273, +24558=>6274, +24563=>6275, +24545=>6276, +24548=>6277, +24547=>6278, +24570=>6279, +24559=>6280, +24567=>6281, +24571=>6282, +24576=>6283, +24564=>6284, +25146=>6285, +25219=>6286, +25228=>6287, +25230=>6288, +25231=>6289, +25236=>6290, +25223=>6291, +25201=>6292, +25211=>6293, +25210=>6294, +25200=>6295, +25217=>6296, +25224=>6297, +25207=>6298, +25213=>6299, +25202=>6300, +25204=>6301, +26096=>6302, +26100=>6303, +26099=>6304, +26098=>6305, +26101=>6306, +26437=>6307, +26439=>6308, +26457=>6309, +26453=>6310, +26444=>6311, +26440=>6312, +26461=>6313, +26445=>6314, +26458=>6315, +26443=>6316, +27600=>6317, +27673=>6318, +27674=>6319, +27768=>6320, +27751=>6321, +27755=>6322, +27780=>6323, +27787=>6324, +27791=>6325, +27761=>6326, +27759=>6327, +27753=>6328, +27802=>6329, +27757=>6330, +27783=>6331, +27797=>6332, +27804=>6333, +57900=>6333, +27750=>6334, +27763=>6335, +27749=>6336, +27771=>6337, +27790=>6338, +28788=>6339, +28794=>6340, +29283=>6341, +29375=>6342, +29373=>6343, +29379=>6344, +29382=>6345, +29377=>6346, +29370=>6347, +29381=>6348, +29589=>6349, +29591=>6350, +29587=>6351, +29588=>6352, +29586=>6353, +30010=>6354, +30009=>6355, +30100=>6356, +30101=>6357, +30337=>6358, +31037=>6359, +32820=>6360, +32917=>6361, +32921=>6362, +32912=>6363, +32914=>6364, +32924=>6365, +33424=>6366, +33423=>6367, +33413=>6368, +33422=>6369, +33425=>6370, +33427=>6371, +33418=>6372, +33411=>6373, +33412=>6374, +12184=>6375, +35960=>6375, +36809=>6376, +36799=>6377, +37023=>6378, +37025=>6379, +37029=>6380, +37022=>6381, +37031=>6382, +37024=>6383, +38448=>6384, +38440=>6385, +38447=>6386, +38445=>6387, +20019=>6388, +20376=>6389, +20348=>6390, +20357=>6391, +20349=>6392, +20352=>6393, +20359=>6394, +20342=>6395, +20340=>6396, +20361=>6397, +20356=>6398, +20343=>6399, +20300=>6400, +20375=>6401, +20330=>6402, +20378=>6403, +20345=>6404, +20353=>6405, +20344=>6406, +20368=>6407, +20380=>6408, +20372=>6409, +20382=>6410, +20370=>6411, +20354=>6412, +20373=>6413, +20331=>6414, +20334=>6415, +20894=>6416, +20924=>6417, +20926=>6418, +21045=>6419, +21042=>6420, +21043=>6421, +21062=>6422, +21041=>6423, +21180=>6424, +21258=>6425, +21259=>6426, +21308=>6427, +21394=>6428, +21396=>6429, +21639=>6430, +21631=>6431, +21633=>6432, +21649=>6433, +21634=>6434, +21640=>6435, +21611=>6436, +21626=>6437, +21630=>6438, +21605=>6439, +21612=>6440, +21620=>6441, +21606=>6442, +21645=>6443, +21615=>6444, +21601=>6445, +21600=>6446, +21656=>6447, +21603=>6448, +21607=>6449, +21604=>6450, +22263=>6451, +22265=>6452, +22383=>6453, +22386=>6454, +22381=>6455, +22379=>6456, +22385=>6457, +22384=>6458, +22390=>6459, +22400=>6460, +22389=>6461, +22395=>6462, +22387=>6463, +22388=>6464, +22370=>6465, +22376=>6466, +22397=>6467, +22796=>6468, +22853=>6469, +22965=>6470, +22970=>6471, +22991=>6472, +22990=>6473, +22962=>6474, +22988=>6475, +22977=>6476, +22966=>6477, +22972=>6478, +22979=>6479, +22998=>6480, +22961=>6481, +22973=>6482, +22976=>6483, +22984=>6484, +22964=>6485, +22983=>6486, +23394=>6487, +23397=>6488, +23443=>6489, +23445=>6490, +23620=>6491, +23623=>6492, +23726=>6493, +23716=>6494, +23712=>6495, +23733=>6496, +23727=>6497, +23720=>6498, +23724=>6499, +23711=>6500, +23715=>6501, +23725=>6502, +23714=>6503, +23722=>6504, +23719=>6505, +23709=>6506, +23717=>6507, +23734=>6508, +23728=>6509, +23718=>6510, +24087=>6511, +24084=>6512, +24089=>6513, +24360=>6514, +24354=>6515, +24355=>6516, +24356=>6517, +24404=>6518, +24450=>6519, +24446=>6520, +24445=>6521, +24542=>6522, +24549=>6523, +24621=>6524, +24614=>6525, +24601=>6526, +24626=>6527, +24587=>6528, +24628=>6529, +24586=>6530, +24599=>6531, +24627=>6532, +24602=>6533, +24606=>6534, +24620=>6535, +24610=>6536, +24589=>6537, +24592=>6538, +24622=>6539, +24595=>6540, +24593=>6541, +24588=>6542, +24585=>6543, +24604=>6544, +25108=>6545, +25149=>6546, +25261=>6547, +25268=>6548, +25297=>6549, +25278=>6550, +25258=>6551, +25270=>6552, +25290=>6553, +25262=>6554, +25267=>6555, +25263=>6556, +25275=>6557, +25257=>6558, +25264=>6559, +25272=>6560, +25917=>6561, +26024=>6562, +26043=>6563, +26121=>6564, +26108=>6565, +26116=>6566, +26130=>6567, +26120=>6568, +26107=>6569, +26115=>6570, +26123=>6571, +26125=>6572, +26117=>6573, +26109=>6574, +26129=>6575, +26128=>6576, +26358=>6577, +26378=>6578, +26501=>6579, +26476=>6580, +26510=>6581, +26514=>6582, +26486=>6583, +26491=>6584, +26520=>6585, +26502=>6586, +26500=>6587, +26484=>6588, +26509=>6589, +26508=>6590, +26490=>6591, +26527=>6592, +26513=>6593, +26521=>6594, +26499=>6595, +26493=>6596, +26497=>6597, +26488=>6598, +26489=>6599, +26516=>6600, +27429=>6601, +27520=>6602, +27518=>6603, +27614=>6604, +27677=>6605, +27795=>6606, +27884=>6607, +27883=>6608, +27886=>6609, +27865=>6610, +27830=>6611, +27860=>6612, +27821=>6613, +27879=>6614, +27831=>6615, +27856=>6616, +27842=>6617, +27834=>6618, +27843=>6619, +27846=>6620, +27885=>6621, +27890=>6622, +27858=>6623, +27869=>6624, +27828=>6625, +27786=>6626, +27805=>6627, +27776=>6628, +27870=>6629, +27840=>6630, +27952=>6631, +27853=>6632, +27847=>6633, +27824=>6634, +27897=>6635, +27855=>6636, +27881=>6637, +27857=>6638, +28820=>6639, +28824=>6640, +28805=>6641, +28819=>6642, +28806=>6643, +28804=>6644, +28817=>6645, +28822=>6646, +28802=>6647, +28826=>6648, +28803=>6649, +29290=>6650, +29398=>6651, +29387=>6652, +29400=>6653, +29385=>6654, +29404=>6655, +29394=>6656, +29396=>6657, +29402=>6658, +29388=>6659, +29393=>6660, +29604=>6661, +29601=>6662, +29613=>6663, +29606=>6664, +29602=>6665, +29600=>6666, +29612=>6667, +29597=>6668, +29917=>6669, +29928=>6670, +30015=>6671, +30016=>6672, +30014=>6673, +30092=>6674, +30104=>6675, +30383=>6676, +30451=>6677, +30449=>6678, +30448=>6679, +30453=>6680, +30712=>6681, +30716=>6682, +30713=>6683, +30715=>6684, +30714=>6685, +30711=>6686, +31042=>6687, +31039=>6688, +31173=>6689, +31352=>6690, +31355=>6691, +31483=>6692, +31861=>6693, +31997=>6694, +32821=>6695, +32911=>6696, +32942=>6697, +32931=>6698, +32952=>6699, +32949=>6700, +32941=>6701, +33312=>6702, +33440=>6703, +33472=>6704, +33451=>6705, +33434=>6706, +33432=>6707, +33435=>6708, +33461=>6709, +33447=>6710, +33454=>6711, +33468=>6712, +33438=>6713, +33466=>6714, +33460=>6715, +33448=>6716, +33441=>6717, +33449=>6718, +33474=>6719, +33444=>6720, +33475=>6721, +33462=>6722, +33442=>6723, +34416=>6724, +34415=>6725, +34413=>6726, +34414=>6727, +35926=>6728, +36818=>6729, +36811=>6730, +36819=>6731, +36813=>6732, +36822=>6733, +36821=>6734, +36823=>6735, +37042=>6736, +37044=>6737, +37039=>6738, +37043=>6739, +37040=>6740, +38457=>6741, +38461=>6742, +38460=>6743, +38458=>6744, +38467=>6745, +20429=>6746, +20421=>6747, +20435=>6748, +20402=>6749, +20425=>6750, +20427=>6751, +20417=>6752, +20436=>6753, +20444=>6754, +20441=>6755, +20411=>6756, +60346=>6756, +20403=>6757, +20443=>6758, +20423=>6759, +20438=>6760, +20410=>6761, +20416=>6762, +20409=>6763, +20460=>6764, +21060=>6765, +21065=>6766, +21184=>6767, +21186=>6768, +21309=>6769, +21372=>6770, +21399=>6771, +21398=>6772, +21401=>6773, +21400=>6774, +21690=>6775, +21665=>6776, +21677=>6777, +21669=>6778, +21711=>6779, +21699=>6780, +33549=>6781, +21687=>6782, +21678=>6783, +21718=>6784, +21686=>6785, +21701=>6786, +21702=>6787, +21664=>6788, +21616=>6789, +21692=>6790, +21666=>6791, +21694=>6792, +21618=>6793, +21726=>6794, +21680=>6795, +22453=>6796, +22430=>6797, +22431=>6798, +22436=>6799, +22412=>6800, +22423=>6801, +22429=>6802, +22427=>6803, +22420=>6804, +22424=>6805, +22415=>6806, +22425=>6807, +22437=>6808, +22426=>6809, +22421=>6810, +22772=>6811, +22797=>6812, +22867=>6813, +23009=>6814, +23006=>6815, +23022=>6816, +23040=>6817, +23025=>6818, +23005=>6819, +23034=>6820, +23037=>6821, +23036=>6822, +23030=>6823, +23012=>6824, +23026=>6825, +23031=>6826, +23003=>6827, +23017=>6828, +23027=>6829, +23029=>6830, +23008=>6831, +23038=>6832, +23028=>6833, +23021=>6834, +23464=>6835, +23628=>6836, +23760=>6837, +23768=>6838, +23756=>6839, +23767=>6840, +23755=>6841, +23771=>6842, +23774=>6843, +23770=>6844, +23753=>6845, +23751=>6846, +23754=>6847, +23766=>6848, +23763=>6849, +23764=>6850, +23759=>6851, +23752=>6852, +23750=>6853, +23758=>6854, +23775=>6855, +23800=>6856, +24057=>6857, +24097=>6858, +24098=>6859, +24099=>6860, +24096=>6861, +24100=>6862, +24240=>6863, +24228=>6864, +24226=>6865, +24219=>6866, +24227=>6867, +24229=>6868, +24327=>6869, +24366=>6870, +24406=>6871, +24454=>6872, +24631=>6873, +24633=>6874, +24660=>6875, +24690=>6876, +24670=>6877, +24645=>6878, +24659=>6879, +24647=>6880, +24649=>6881, +24667=>6882, +24652=>6883, +24640=>6884, +24642=>6885, +24671=>6886, +24612=>6887, +24644=>6888, +24664=>6889, +24678=>6890, +24686=>6891, +25154=>6892, +25155=>6893, +25295=>6894, +25357=>6895, +25355=>6896, +25333=>6897, +25358=>6898, +25347=>6899, +25323=>6900, +25337=>6901, +25359=>6902, +25356=>6903, +25336=>6904, +25334=>6905, +25344=>6906, +25363=>6907, +25364=>6908, +25338=>6909, +25365=>6910, +25339=>6911, +25328=>6912, +25921=>6913, +25923=>6914, +26026=>6915, +26047=>6916, +26166=>6917, +26145=>6918, +26162=>6919, +26165=>6920, +26140=>6921, +26150=>6922, +26146=>6923, +26163=>6924, +26155=>6925, +26170=>6926, +26141=>6927, +26164=>6928, +26169=>6929, +26158=>6930, +26383=>6931, +26384=>6932, +26561=>6933, +26610=>6934, +26568=>6935, +26554=>6936, +26588=>6937, +26555=>6938, +26616=>6939, +26584=>6940, +26560=>6941, +26551=>6942, +26565=>6943, +26603=>6944, +26596=>6945, +26591=>6946, +26549=>6947, +26573=>6948, +26547=>6949, +26615=>6950, +26614=>6951, +26606=>6952, +26595=>6953, +26562=>6954, +26553=>6955, +26574=>6956, +26599=>6957, +26608=>6958, +26546=>6959, +26620=>6960, +26566=>6961, +26605=>6962, +26572=>6963, +26542=>6964, +26598=>6965, +26587=>6966, +26618=>6967, +26569=>6968, +26570=>6969, +26563=>6970, +26602=>6971, +26571=>6972, +27432=>6973, +27522=>6974, +27524=>6975, +27574=>6976, +27606=>6977, +27608=>6978, +27616=>6979, +27680=>6980, +27681=>6981, +27944=>6982, +27956=>6983, +27949=>6984, +27935=>6985, +27964=>6986, +27967=>6987, +27922=>6988, +27914=>6989, +27866=>6990, +27955=>6991, +27908=>6992, +27929=>6993, +27962=>6994, +27930=>6995, +27921=>6996, +27904=>6997, +27933=>6998, +27970=>6999, +27905=>7000, +27928=>7001, +27959=>7002, +27907=>7003, +27919=>7004, +27968=>7005, +27911=>7006, +27936=>7007, +27948=>7008, +27912=>7009, +27938=>7010, +27913=>7011, +27920=>7012, +28855=>7013, +28831=>7014, +28862=>7015, +28849=>7016, +28848=>7017, +28833=>7018, +28852=>7019, +28853=>7020, +28841=>7021, +29249=>7022, +29257=>7023, +29258=>7024, +29292=>7025, +29296=>7026, +29299=>7027, +29294=>7028, +29386=>7029, +29412=>7030, +29416=>7031, +29419=>7032, +29407=>7033, +29418=>7034, +29414=>7035, +29411=>7036, +29573=>7037, +29644=>7038, +29634=>7039, +29640=>7040, +29637=>7041, +29625=>7042, +29622=>7043, +29621=>7044, +29620=>7045, +29675=>7046, +29631=>7047, +29639=>7048, +29630=>7049, +29635=>7050, +29638=>7051, +29624=>7052, +29643=>7053, +29932=>7054, +29934=>7055, +29998=>7056, +30023=>7057, +30024=>7058, +30119=>7059, +30122=>7060, +30329=>7061, +30404=>7062, +30472=>7063, +30467=>7064, +30468=>7065, +30469=>7066, +30474=>7067, +30455=>7068, +30459=>7069, +30458=>7070, +30695=>7071, +30696=>7072, +30726=>7073, +30737=>7074, +30738=>7075, +30725=>7076, +30736=>7077, +30735=>7078, +30734=>7079, +30729=>7080, +58095=>7080, +30723=>7081, +30739=>7082, +31050=>7083, +31052=>7084, +31051=>7085, +31045=>7086, +31044=>7087, +31189=>7088, +31181=>7089, +31183=>7090, +31190=>7091, +31182=>7092, +31360=>7093, +31358=>7094, +31441=>7095, +31488=>7096, +31489=>7097, +31866=>7098, +31864=>7099, +31865=>7100, +31871=>7101, +31872=>7102, +31873=>7103, +32003=>7104, +32008=>7105, +32001=>7106, +32600=>7107, +32657=>7108, +32653=>7109, +32702=>7110, +32775=>7111, +32782=>7112, +32783=>7113, +32788=>7114, +32823=>7115, +32984=>7116, +32967=>7117, +32992=>7118, +32977=>7119, +32968=>7120, +32962=>7121, +32976=>7122, +32965=>7123, +32995=>7124, +32985=>7125, +32988=>7126, +32970=>7127, +32981=>7128, +32969=>7129, +32975=>7130, +32983=>7131, +32998=>7132, +32973=>7133, +33279=>7134, +33313=>7135, +33428=>7136, +33497=>7137, +33534=>7138, +33529=>7139, +33543=>7140, +33512=>7141, +33536=>7142, +33493=>7143, +33594=>7144, +33515=>7145, +33494=>7146, +33524=>7147, +33516=>7148, +33505=>7149, +33522=>7150, +33525=>7151, +33548=>7152, +33531=>7153, +33526=>7154, +33520=>7155, +33514=>7156, +33508=>7157, +33504=>7158, +33530=>7159, +33523=>7160, +33517=>7161, +34423=>7162, +34420=>7163, +34428=>7164, +34419=>7165, +34881=>7166, +34894=>7167, +34919=>7168, +34922=>7169, +34921=>7170, +35283=>7171, +35332=>7172, +35335=>7173, +36210=>7174, +36835=>7175, +36833=>7176, +36846=>7177, +36832=>7178, +37105=>7179, +37053=>7180, +37055=>7181, +37077=>7182, +37061=>7183, +37054=>7184, +37063=>7185, +37067=>7186, +37064=>7187, +37332=>7188, +60294=>7188, +37331=>7189, +38484=>7190, +38479=>7191, +38481=>7192, +38483=>7193, +38474=>7194, +38478=>7195, +20510=>7196, +20485=>7197, +20487=>7198, +20499=>7199, +20514=>7200, +20528=>7201, +20507=>7202, +20469=>7203, +20468=>7204, +20531=>7205, +20535=>7206, +20524=>7207, +20470=>7208, +20471=>7209, +20503=>7210, +20508=>7211, +20512=>7212, +20519=>7213, +20533=>7214, +20527=>7215, +20529=>7216, +20494=>7217, +20826=>7218, +20884=>7219, +20883=>7220, +20938=>7221, +20932=>7222, +20933=>7223, +20936=>7224, +20942=>7225, +21089=>7226, +21082=>7227, +21074=>7228, +21086=>7229, +21087=>7230, +21077=>7231, +21090=>7232, +21197=>7233, +21262=>7234, +21406=>7235, +21798=>7236, +21730=>7237, +21783=>7238, +21778=>7239, +21735=>7240, +21747=>7241, +21732=>7242, +21786=>7243, +21759=>7244, +21764=>7245, +21768=>7246, +21739=>7247, +21777=>7248, +21765=>7249, +21745=>7250, +21770=>7251, +21755=>7252, +21751=>7253, +21752=>7254, +21728=>7255, +21774=>7256, +21763=>7257, +21771=>7258, +22273=>7259, +22274=>7260, +22476=>7261, +22578=>7262, +22485=>7263, +22482=>7264, +22458=>7265, +22470=>7266, +22461=>7267, +22460=>7268, +22456=>7269, +22454=>7270, +22463=>7271, +22471=>7272, +22480=>7273, +22457=>7274, +22465=>7275, +22798=>7276, +22858=>7277, +23065=>7278, +23062=>7279, +23085=>7280, +23086=>7281, +23061=>7282, +23055=>7283, +23063=>7284, +23050=>7285, +23070=>7286, +23091=>7287, +23404=>7288, +23463=>7289, +23469=>7290, +23468=>7291, +23555=>7292, +23638=>7293, +23636=>7294, +23788=>7295, +23807=>7296, +23790=>7297, +23793=>7298, +23799=>7299, +23808=>7300, +23801=>7301, +24105=>7302, +24104=>7303, +24232=>7304, +24238=>7305, +24234=>7306, +24236=>7307, +24371=>7308, +24368=>7309, +24423=>7310, +24669=>7311, +24666=>7312, +24679=>7313, +24641=>7314, +24738=>7315, +24712=>7316, +24704=>7317, +24722=>7318, +24705=>7319, +24733=>7320, +24707=>7321, +24725=>7322, +24731=>7323, +24727=>7324, +24711=>7325, +24732=>7326, +24718=>7327, +25113=>7328, +25158=>7329, +25330=>7330, +25360=>7331, +25430=>7332, +25388=>7333, +25412=>7334, +25413=>7335, +25398=>7336, +25411=>7337, +25572=>7338, +25401=>7339, +25419=>7340, +25418=>7341, +25404=>7342, +25385=>7343, +25409=>7344, +25396=>7345, +25432=>7346, +25428=>7347, +25433=>7348, +25389=>7349, +25415=>7350, +25395=>7351, +25434=>7352, +25425=>7353, +25400=>7354, +25431=>7355, +25408=>7356, +25416=>7357, +25930=>7358, +25926=>7359, +26054=>7360, +26051=>7361, +26052=>7362, +26050=>7363, +26186=>7364, +26207=>7365, +26183=>7366, +26193=>7367, +26386=>7368, +26387=>7369, +26655=>7370, +26650=>7371, +26697=>7372, +26674=>7373, +26675=>7374, +26683=>7375, +26699=>7376, +26703=>7377, +26646=>7378, +26673=>7379, +26652=>7380, +26677=>7381, +26667=>7382, +26669=>7383, +26671=>7384, +26702=>7385, +26692=>7386, +26676=>7387, +26653=>7388, +26642=>7389, +26644=>7390, +26662=>7391, +26664=>7392, +26670=>7393, +26701=>7394, +26682=>7395, +26661=>7396, +26656=>7397, +27436=>7398, +27439=>7399, +27437=>7400, +27441=>7401, +27444=>7402, +27501=>7403, +32898=>7404, +27528=>7405, +27622=>7406, +27620=>7407, +27624=>7408, +27619=>7409, +27618=>7410, +27623=>7411, +27685=>7412, +28026=>7413, +28003=>7414, +28004=>7415, +28022=>7416, +27917=>7417, +28001=>7418, +28050=>7419, +27992=>7420, +28002=>7421, +28013=>7422, +28015=>7423, +28049=>7424, +28045=>7425, +28143=>7426, +28031=>7427, +28038=>7428, +27998=>7429, +28007=>7430, +59078=>7430, +28000=>7431, +28055=>7432, +28016=>7433, +28028=>7434, +27999=>7435, +28034=>7436, +28056=>7437, +27951=>7438, +28008=>7439, +28043=>7440, +28030=>7441, +28032=>7442, +28036=>7443, +27926=>7444, +28035=>7445, +28027=>7446, +28029=>7447, +28021=>7448, +28048=>7449, +28892=>7450, +28883=>7451, +28881=>7452, +28893=>7453, +28875=>7454, +32569=>7455, +28898=>7456, +28887=>7457, +28882=>7458, +28894=>7459, +28896=>7460, +28884=>7461, +28877=>7462, +28869=>7463, +28870=>7464, +28871=>7465, +28890=>7466, +28878=>7467, +28897=>7468, +29250=>7469, +29304=>7470, +29303=>7471, +29302=>7472, +29440=>7473, +29434=>7474, +29428=>7475, +29438=>7476, +29430=>7477, +29427=>7478, +29435=>7479, +29441=>7480, +29651=>7481, +29657=>7482, +29669=>7483, +29654=>7484, +29628=>7485, +29671=>7486, +29667=>7487, +29673=>7488, +29660=>7489, +29650=>7490, +29659=>7491, +29652=>7492, +29661=>7493, +29658=>7494, +29655=>7495, +29656=>7496, +29672=>7497, +29918=>7498, +29919=>7499, +29940=>7500, +29941=>7501, +29985=>7502, +30043=>7503, +30047=>7504, +30128=>7505, +30145=>7506, +30139=>7507, +30148=>7508, +30144=>7509, +30143=>7510, +30134=>7511, +30138=>7512, +30346=>7513, +30409=>7514, +30493=>7515, +30491=>7516, +30480=>7517, +30483=>7518, +30482=>7519, +30499=>7520, +30481=>7521, +30485=>7522, +30489=>7523, +30490=>7524, +30498=>7525, +30503=>7526, +30755=>7527, +30764=>7528, +30754=>7529, +30773=>7530, +30767=>7531, +30760=>7532, +30766=>7533, +30763=>7534, +30753=>7535, +30761=>7536, +30771=>7537, +30762=>7538, +30769=>7539, +31060=>7540, +31067=>7541, +31055=>7542, +31068=>7543, +31059=>7544, +31058=>7545, +31057=>7546, +31211=>7547, +31212=>7548, +31200=>7549, +31214=>7550, +31213=>7551, +31210=>7552, +31196=>7553, +31198=>7554, +31197=>7555, +31366=>7556, +31369=>7557, +31365=>7558, +31371=>7559, +31372=>7560, +31370=>7561, +31367=>7562, +31448=>7563, +31504=>7564, +31492=>7565, +31507=>7566, +31493=>7567, +31503=>7568, +31496=>7569, +31498=>7570, +31502=>7571, +31497=>7572, +31506=>7573, +31876=>7574, +31889=>7575, +31882=>7576, +31884=>7577, +31880=>7578, +31885=>7579, +31877=>7580, +32030=>7581, +32029=>7582, +32017=>7583, +32014=>7584, +32024=>7585, +32022=>7586, +32019=>7587, +32031=>7588, +32018=>7589, +32015=>7590, +32012=>7591, +32604=>7592, +32609=>7593, +32606=>7594, +32608=>7595, +32605=>7596, +32603=>7597, +32662=>7598, +32658=>7599, +32707=>7600, +32706=>7601, +32704=>7602, +32790=>7603, +32830=>7604, +32825=>7605, +33018=>7606, +33010=>7607, +33017=>7608, +33013=>7609, +33025=>7610, +33019=>7611, +33024=>7612, +33281=>7613, +33327=>7614, +33317=>7615, +33587=>7616, +33581=>7617, +33604=>7618, +33561=>7619, +33617=>7620, +33573=>7621, +33622=>7622, +33599=>7623, +33601=>7624, +33574=>7625, +33564=>7626, +33570=>7627, +33602=>7628, +33614=>7629, +33563=>7630, +33578=>7631, +33544=>7632, +33596=>7633, +33613=>7634, +33558=>7635, +33572=>7636, +33568=>7637, +33591=>7638, +33583=>7639, +33577=>7640, +33607=>7641, +33605=>7642, +33612=>7643, +33619=>7644, +33566=>7645, +33580=>7646, +33611=>7647, +33575=>7648, +33608=>7649, +34387=>7650, +34386=>7651, +34466=>7652, +34472=>7653, +34454=>7654, +34445=>7655, +34449=>7656, +34462=>7657, +34439=>7658, +34455=>7659, +34438=>7660, +34443=>7661, +34458=>7662, +34437=>7663, +34469=>7664, +34457=>7665, +34465=>7666, +34471=>7667, +34453=>7668, +34456=>7669, +34446=>7670, +34461=>7671, +34448=>7672, +34452=>7673, +34883=>7674, +34884=>7675, +34925=>7676, +34933=>7677, +34934=>7678, +34930=>7679, +34944=>7680, +34929=>7681, +34943=>7682, +34927=>7683, +34947=>7684, +34942=>7685, +34932=>7686, +34940=>7687, +35346=>7688, +35911=>7689, +35927=>7690, +35963=>7691, +36004=>7692, +36003=>7693, +36214=>7694, +36216=>7695, +36277=>7696, +36279=>7697, +36278=>7698, +36561=>7699, +36563=>7700, +36862=>7701, +36853=>7702, +36866=>7703, +36863=>7704, +36859=>7705, +36868=>7706, +36860=>7707, +36854=>7708, +37078=>7709, +37088=>7710, +37081=>7711, +37082=>7712, +37091=>7713, +37087=>7714, +37093=>7715, +37080=>7716, +37083=>7717, +37079=>7718, +37084=>7719, +37092=>7720, +37200=>7721, +37198=>7722, +37199=>7723, +37333=>7724, +37346=>7725, +37338=>7726, +38492=>7727, +38495=>7728, +38588=>7729, +39139=>7730, +12221=>7731, +39647=>7731, +12223=>7732, +39727=>7732, +20095=>7733, +20592=>7734, +20586=>7735, +20577=>7736, +20574=>7737, +20576=>7738, +20563=>7739, +20555=>7740, +20573=>7741, +20594=>7742, +20552=>7743, +20557=>7744, +20545=>7745, +20571=>7746, +20554=>7747, +20578=>7748, +20501=>7749, +20549=>7750, +20575=>7751, +20585=>7752, +20587=>7753, +20579=>7754, +20580=>7755, +20550=>7756, +20544=>7757, +20590=>7758, +20595=>7759, +20567=>7760, +20561=>7761, +20944=>7762, +21099=>7763, +21101=>7764, +21100=>7765, +21102=>7766, +21206=>7767, +21203=>7768, +21293=>7769, +21404=>7770, +21877=>7771, +21878=>7772, +21820=>7773, +21837=>7774, +21840=>7775, +21812=>7776, +21802=>7777, +21841=>7778, +21858=>7779, +21814=>7780, +21813=>7781, +21808=>7782, +21842=>7783, +21829=>7784, +21772=>7785, +21810=>7786, +21861=>7787, +21838=>7788, +21817=>7789, +21832=>7790, +21805=>7791, +21819=>7792, +21824=>7793, +21835=>7794, +22282=>7795, +22279=>7796, +22523=>7797, +22548=>7798, +22498=>7799, +22518=>7800, +22492=>7801, +22516=>7802, +22528=>7803, +22509=>7804, +22525=>7805, +22536=>7806, +22520=>7807, +22539=>7808, +22515=>7809, +22479=>7810, +22535=>7811, +22510=>7812, +22499=>7813, +22514=>7814, +22501=>7815, +22508=>7816, +22497=>7817, +22542=>7818, +22524=>7819, +22544=>7820, +22503=>7821, +22529=>7822, +22540=>7823, +22513=>7824, +22505=>7825, +22512=>7826, +22541=>7827, +22532=>7828, +22876=>7829, +23136=>7830, +23128=>7831, +23125=>7832, +23143=>7833, +60437=>7833, +23134=>7834, +23096=>7835, +23093=>7836, +23149=>7837, +23120=>7838, +23135=>7839, +23141=>7840, +23148=>7841, +23123=>7842, +23140=>7843, +23127=>7844, +23107=>7845, +23133=>7846, +23122=>7847, +23108=>7848, +23131=>7849, +23112=>7850, +23182=>7851, +23102=>7852, +23117=>7853, +23097=>7854, +23116=>7855, +23152=>7856, +23145=>7857, +23111=>7858, +23121=>7859, +23126=>7860, +23106=>7861, +23132=>7862, +23410=>7863, +23406=>7864, +23489=>7865, +23488=>7866, +23641=>7867, +23838=>7868, +23819=>7869, +23837=>7870, +23834=>7871, +23840=>7872, +23820=>7873, +23848=>7874, +23821=>7875, +23846=>7876, +23845=>7877, +23823=>7878, +23856=>7879, +23826=>7880, +23843=>7881, +23839=>7882, +23854=>7883, +24126=>7884, +24116=>7885, +24241=>7886, +24244=>7887, +24249=>7888, +24242=>7889, +24243=>7890, +24374=>7891, +24376=>7892, +24475=>7893, +24470=>7894, +24479=>7895, +24714=>7896, +24720=>7897, +24710=>7898, +24766=>7899, +24752=>7900, +24762=>7901, +24787=>7902, +24788=>7903, +24783=>7904, +24804=>7905, +24793=>7906, +24797=>7907, +24776=>7908, +24753=>7909, +24795=>7910, +24759=>7911, +24778=>7912, +24767=>7913, +24771=>7914, +24781=>7915, +24768=>7916, +25394=>7917, +25445=>7918, +25482=>7919, +25474=>7920, +25469=>7921, +25533=>7922, +25502=>7923, +25517=>7924, +25501=>7925, +25495=>7926, +25515=>7927, +25486=>7928, +25455=>7929, +25479=>7930, +25488=>7931, +25454=>7932, +25519=>7933, +25461=>7934, +25500=>7935, +25453=>7936, +25518=>7937, +25468=>7938, +25508=>7939, +25403=>7940, +25503=>7941, +25464=>7942, +25477=>7943, +25473=>7944, +25489=>7945, +25485=>7946, +25456=>7947, +25939=>7948, +26061=>7949, +26213=>7950, +26209=>7951, +26203=>7952, +26201=>7953, +26204=>7954, +26210=>7955, +26392=>7956, +26745=>7957, +26759=>7958, +26768=>7959, +26780=>7960, +26733=>7961, +26734=>7962, +26798=>7963, +26795=>7964, +26966=>7965, +26735=>7966, +26787=>7967, +26796=>7968, +26793=>7969, +26741=>7970, +26740=>7971, +26802=>7972, +26767=>7973, +26743=>7974, +26770=>7975, +26748=>7976, +26731=>7977, +26738=>7978, +26794=>7979, +26752=>7980, +26737=>7981, +26750=>7982, +26779=>7983, +26774=>7984, +26763=>7985, +26784=>7986, +26761=>7987, +26788=>7988, +26744=>7989, +26747=>7990, +26769=>7991, +26764=>7992, +26762=>7993, +26749=>7994, +27446=>7995, +27443=>7996, +27447=>7997, +27448=>7998, +27537=>7999, +27535=>8000, +27533=>8001, +27534=>8002, +27532=>8003, +27690=>8004, +28096=>8005, +28075=>8006, +28084=>8007, +28083=>8008, +28276=>8009, +28076=>8010, +28137=>8011, +28130=>8012, +28087=>8013, +28150=>8014, +28116=>8015, +28160=>8016, +28104=>8017, +28128=>8018, +28127=>8019, +28118=>8020, +28094=>8021, +28133=>8022, +28124=>8023, +28125=>8024, +28123=>8025, +28148=>8026, +28106=>8027, +28093=>8028, +28141=>8029, +28144=>8030, +28090=>8031, +28117=>8032, +28098=>8033, +28111=>8034, +28105=>8035, +28112=>8036, +28146=>8037, +28115=>8038, +28157=>8039, +28119=>8040, +28109=>8041, +28131=>8042, +28091=>8043, +28922=>8044, +28941=>8045, +28919=>8046, +28951=>8047, +28916=>8048, +28940=>8049, +28912=>8050, +28932=>8051, +28915=>8052, +28944=>8053, +28924=>8054, +28927=>8055, +28934=>8056, +28947=>8057, +28928=>8058, +28920=>8059, +28918=>8060, +28939=>8061, +28930=>8062, +28942=>8063, +29310=>8064, +29307=>8065, +29308=>8066, +29311=>8067, +29469=>8068, +29463=>8069, +29447=>8070, +29457=>8071, +29464=>8072, +29450=>8073, +29448=>8074, +29439=>8075, +29455=>8076, +29470=>8077, +29576=>8078, +29686=>8079, +29688=>8080, +29685=>8081, +29700=>8082, +29697=>8083, +29693=>8084, +29703=>8085, +29696=>8086, +29690=>8087, +29692=>8088, +29695=>8089, +29708=>8090, +29707=>8091, +29684=>8092, +29704=>8093, +30052=>8094, +30051=>8095, +30158=>8096, +30162=>8097, +30159=>8098, +30155=>8099, +30156=>8100, +30161=>8101, +30160=>8102, +30351=>8103, +30345=>8104, +30419=>8105, +30521=>8106, +30511=>8107, +30509=>8108, +30513=>8109, +30514=>8110, +30516=>8111, +30515=>8112, +30525=>8113, +30501=>8114, +30523=>8115, +30517=>8116, +30792=>8117, +30802=>8118, +30793=>8119, +30797=>8120, +30794=>8121, +30796=>8122, +30758=>8123, +30789=>8124, +30800=>8125, +31076=>8126, +31079=>8127, +31081=>8128, +31082=>8129, +31075=>8130, +31083=>8131, +31073=>8132, +31163=>8133, +31226=>8134, +31224=>8135, +31222=>8136, +31223=>8137, +31375=>8138, +31380=>8139, +31376=>8140, +31541=>8141, +31547=>8142, +31540=>8143, +31525=>8144, +31536=>8145, +31522=>8146, +31524=>8147, +31539=>8148, +31512=>8149, +31530=>8150, +31517=>8151, +31537=>8152, +31531=>8153, +31533=>8154, +31535=>8155, +31538=>8156, +31544=>8157, +31514=>8158, +31523=>8159, +31892=>8160, +31896=>8161, +31894=>8162, +31907=>8163, +32053=>8164, +32061=>8165, +32056=>8166, +32054=>8167, +32058=>8168, +32069=>8169, +32044=>8170, +32041=>8171, +32065=>8172, +32071=>8173, +32062=>8174, +32063=>8175, +32074=>8176, +32059=>8177, +32040=>8178, +32611=>8179, +32661=>8180, +32668=>8181, +32669=>8182, +32667=>8183, +32714=>8184, +32715=>8185, +32717=>8186, +32720=>8187, +32721=>8188, +32711=>8189, +32719=>8190, +32713=>8191, +32799=>8192, +32798=>8193, +32795=>8194, +32839=>8195, +32835=>8196, +32840=>8197, +33048=>8198, +33061=>8199, +33049=>8200, +33051=>8201, +33069=>8202, +33055=>8203, +33068=>8204, +33054=>8205, +33057=>8206, +33045=>8207, +33063=>8208, +33053=>8209, +33058=>8210, +33297=>8211, +33336=>8212, +33331=>8213, +33338=>8214, +33332=>8215, +33330=>8216, +33396=>8217, +33680=>8218, +33699=>8219, +33704=>8220, +33677=>8221, +33658=>8222, +33651=>8223, +33700=>8224, +33652=>8225, +33679=>8226, +33665=>8227, +33685=>8228, +33689=>8229, +33653=>8230, +33684=>8231, +33705=>8232, +33661=>8233, +33667=>8234, +33676=>8235, +33693=>8236, +33691=>8237, +33706=>8238, +33675=>8239, +33662=>8240, +33701=>8241, +33711=>8242, +33672=>8243, +33687=>8244, +33712=>8245, +33663=>8246, +33702=>8247, +33671=>8248, +33710=>8249, +33654=>8250, +34393=>8251, +34390=>8252, +34495=>8253, +34487=>8254, +34498=>8255, +34497=>8256, +34501=>8257, +34490=>8258, +34480=>8259, +34504=>8260, +34489=>8261, +34483=>8262, +34488=>8263, +34508=>8264, +34484=>8265, +34491=>8266, +34492=>8267, +34499=>8268, +34493=>8269, +34494=>8270, +34898=>8271, +34953=>8272, +34965=>8273, +34984=>8274, +34978=>8275, +34986=>8276, +34970=>8277, +34961=>8278, +34977=>8279, +34975=>8280, +34968=>8281, +34983=>8282, +34969=>8283, +34971=>8284, +34967=>8285, +34980=>8286, +34988=>8287, +34956=>8288, +34963=>8289, +34958=>8290, +35202=>8291, +35286=>8292, +35289=>8293, +35285=>8294, +35376=>8295, +35367=>8296, +35372=>8297, +35358=>8298, +35897=>8299, +35899=>8300, +35932=>8301, +35933=>8302, +35965=>8303, +36005=>8304, +36221=>8305, +36219=>8306, +36217=>8307, +36284=>8308, +36290=>8309, +36281=>8310, +36287=>8311, +36289=>8312, +36568=>8313, +36574=>8314, +36573=>8315, +36572=>8316, +36567=>8317, +36576=>8318, +36577=>8319, +36900=>8320, +36875=>8321, +36881=>8322, +36892=>8323, +36876=>8324, +36897=>8325, +37103=>8326, +37098=>8327, +37104=>8328, +37108=>8329, +37106=>8330, +37107=>8331, +37076=>8332, +37099=>8333, +37100=>8334, +37097=>8335, +37206=>8336, +37208=>8337, +37210=>8338, +37203=>8339, +37205=>8340, +37356=>8341, +37364=>8342, +37361=>8343, +37363=>8344, +37368=>8345, +37348=>8346, +37369=>8347, +37354=>8348, +37355=>8349, +37367=>8350, +37352=>8351, +37358=>8352, +38266=>8353, +38278=>8354, +38280=>8355, +38524=>8356, +38509=>8357, +38507=>8358, +38513=>8359, +38511=>8360, +38591=>8361, +38762=>8362, +38916=>8363, +39141=>8364, +39319=>8365, +20635=>8366, +20629=>8367, +20628=>8368, +20638=>8369, +20619=>8370, +20643=>8371, +20611=>8372, +20620=>8373, +20622=>8374, +20637=>8375, +20584=>8376, +20636=>8377, +20626=>8378, +20610=>8379, +20615=>8380, +20831=>8381, +20948=>8382, +21266=>8383, +21265=>8384, +21412=>8385, +21415=>8386, +21905=>8387, +21928=>8388, +21925=>8389, +21933=>8390, +21879=>8391, +22085=>8392, +21922=>8393, +21907=>8394, +21896=>8395, +21903=>8396, +21941=>8397, +21889=>8398, +21923=>8399, +21906=>8400, +21924=>8401, +21885=>8402, +21900=>8403, +21926=>8404, +21887=>8405, +21909=>8406, +21921=>8407, +21902=>8408, +22284=>8409, +22569=>8410, +22583=>8411, +22553=>8412, +22558=>8413, +22567=>8414, +22563=>8415, +22568=>8416, +22517=>8417, +22600=>8418, +22565=>8419, +22556=>8420, +22555=>8421, +22579=>8422, +22591=>8423, +22582=>8424, +22574=>8425, +22585=>8426, +22584=>8427, +22573=>8428, +22572=>8429, +22587=>8430, +22881=>8431, +23215=>8432, +23188=>8433, +23199=>8434, +23162=>8435, +23202=>8436, +23198=>8437, +23160=>8438, +23206=>8439, +23164=>8440, +23205=>8441, +23212=>8442, +23189=>8443, +23214=>8444, +23095=>8445, +23172=>8446, +23178=>8447, +23191=>8448, +23171=>8449, +23179=>8450, +23209=>8451, +23163=>8452, +23165=>8453, +23180=>8454, +23196=>8455, +23183=>8456, +23187=>8457, +23197=>8458, +23530=>8459, +23501=>8460, +23499=>8461, +23508=>8462, +23505=>8463, +23498=>8464, +23502=>8465, +23564=>8466, +23600=>8467, +23863=>8468, +23875=>8469, +23915=>8470, +23873=>8471, +23883=>8472, +23871=>8473, +23861=>8474, +23889=>8475, +23886=>8476, +23893=>8477, +23859=>8478, +23866=>8479, +23890=>8480, +23869=>8481, +23857=>8482, +23897=>8483, +23874=>8484, +23865=>8485, +23881=>8486, +23864=>8487, +23868=>8488, +23858=>8489, +23862=>8490, +23872=>8491, +23877=>8492, +24132=>8493, +24129=>8494, +24408=>8495, +57673=>8495, +24486=>8496, +24485=>8497, +24491=>8498, +24777=>8499, +24761=>8500, +24780=>8501, +24802=>8502, +24782=>8503, +24772=>8504, +24852=>8505, +24818=>8506, +24842=>8507, +24854=>8508, +24837=>8509, +24821=>8510, +24851=>8511, +24824=>8512, +24828=>8513, +24830=>8514, +24769=>8515, +24835=>8516, +24856=>8517, +24861=>8518, +24848=>8519, +24831=>8520, +24836=>8521, +24843=>8522, +25162=>8523, +25492=>8524, +25521=>8525, +25520=>8526, +25550=>8527, +25573=>8528, +25576=>8529, +25583=>8530, +25539=>8531, +25757=>8532, +25587=>8533, +25546=>8534, +25568=>8535, +25590=>8536, +25557=>8537, +25586=>8538, +25589=>8539, +25697=>8540, +25567=>8541, +25534=>8542, +25565=>8543, +25564=>8544, +25540=>8545, +25560=>8546, +25555=>8547, +25538=>8548, +25543=>8549, +25548=>8550, +25547=>8551, +25544=>8552, +25584=>8553, +25559=>8554, +25561=>8555, +25906=>8556, +25959=>8557, +25962=>8558, +25956=>8559, +25948=>8560, +25960=>8561, +25957=>8562, +25996=>8563, +26013=>8564, +26014=>8565, +26030=>8566, +26064=>8567, +26066=>8568, +26236=>8569, +26220=>8570, +26235=>8571, +26240=>8572, +26225=>8573, +26233=>8574, +26218=>8575, +26226=>8576, +26369=>8577, +26892=>8578, +26835=>8579, +26884=>8580, +26844=>8581, +26922=>8582, +26860=>8583, +26858=>8584, +26865=>8585, +26895=>8586, +26838=>8587, +26871=>8588, +26859=>8589, +26852=>8590, +26870=>8591, +26899=>8592, +26896=>8593, +26867=>8594, +26849=>8595, +26887=>8596, +26828=>8597, +26888=>8598, +26992=>8599, +26804=>8600, +26897=>8601, +26863=>8602, +26822=>8603, +26900=>8604, +26872=>8605, +26832=>8606, +26877=>8607, +26876=>8608, +26856=>8609, +26891=>8610, +26890=>8611, +26903=>8612, +26830=>8613, +26824=>8614, +26845=>8615, +26846=>8616, +26854=>8617, +26868=>8618, +26833=>8619, +26886=>8620, +26836=>8621, +26857=>8622, +26901=>8623, +26917=>8624, +26823=>8625, +27449=>8626, +27451=>8627, +27455=>8628, +27452=>8629, +27540=>8630, +27543=>8631, +27545=>8632, +27541=>8633, +27581=>8634, +27632=>8635, +27634=>8636, +27635=>8637, +27696=>8638, +28156=>8639, +28230=>8640, +28231=>8641, +28191=>8642, +28233=>8643, +28296=>8644, +28220=>8645, +28221=>8646, +28229=>8647, +28258=>8648, +28203=>8649, +28223=>8650, +28225=>8651, +28253=>8652, +28275=>8653, +28188=>8654, +28211=>8655, +28235=>8656, +28224=>8657, +28241=>8658, +28219=>8659, +28163=>8660, +28206=>8661, +28254=>8662, +28264=>8663, +28252=>8664, +28257=>8665, +28209=>8666, +28200=>8667, +28256=>8668, +28273=>8669, +28267=>8670, +28217=>8671, +28194=>8672, +28208=>8673, +28243=>8674, +28261=>8675, +28199=>8676, +28280=>8677, +28260=>8678, +28279=>8679, +28245=>8680, +28281=>8681, +28242=>8682, +28262=>8683, +28213=>8684, +28214=>8685, +28250=>8686, +28960=>8687, +28958=>8688, +28975=>8689, +28923=>8690, +28974=>8691, +28977=>8692, +28963=>8693, +28965=>8694, +28962=>8695, +28978=>8696, +28959=>8697, +28968=>8698, +28986=>8699, +28955=>8700, +29259=>8701, +29274=>8702, +29320=>8703, +29321=>8704, +29318=>8705, +29317=>8706, +29323=>8707, +29458=>8708, +29451=>8709, +29488=>8710, +29474=>8711, +29489=>8712, +29491=>8713, +29479=>8714, +29490=>8715, +29485=>8716, +29478=>8717, +29475=>8718, +29493=>8719, +29452=>8720, +29742=>8721, +29740=>8722, +29744=>8723, +29739=>8724, +29718=>8725, +29722=>8726, +29729=>8727, +29741=>8728, +29745=>8729, +29732=>8730, +29731=>8731, +29725=>8732, +29737=>8733, +29728=>8734, +29746=>8735, +29947=>8736, +29999=>8737, +30063=>8738, +30060=>8739, +30183=>8740, +30170=>8741, +30177=>8742, +30182=>8743, +30173=>8744, +30175=>8745, +30180=>8746, +30167=>8747, +30357=>8748, +30354=>8749, +30426=>8750, +30534=>8751, +30535=>8752, +30532=>8753, +30541=>8754, +30533=>8755, +30538=>8756, +30542=>8757, +30539=>8758, +30540=>8759, +30686=>8760, +30700=>8761, +30816=>8762, +30820=>8763, +30821=>8764, +30812=>8765, +30829=>8766, +30833=>8767, +30826=>8768, +30830=>8769, +30832=>8770, +30825=>8771, +30824=>8772, +30814=>8773, +30818=>8774, +31092=>8775, +31091=>8776, +31090=>8777, +31088=>8778, +31234=>8779, +31242=>8780, +31235=>8781, +31244=>8782, +31236=>8783, +31385=>8784, +31462=>8785, +31460=>8786, +31562=>8787, +31559=>8788, +31556=>8789, +31560=>8790, +31564=>8791, +31566=>8792, +31552=>8793, +31576=>8794, +31557=>8795, +31906=>8796, +31902=>8797, +31912=>8798, +31905=>8799, +32088=>8800, +32111=>8801, +32099=>8802, +32083=>8803, +32086=>8804, +32103=>8805, +32106=>8806, +32079=>8807, +32109=>8808, +32092=>8809, +32107=>8810, +32082=>8811, +32084=>8812, +32105=>8813, +32081=>8814, +32095=>8815, +32078=>8816, +32574=>8817, +32575=>8818, +32613=>8819, +32614=>8820, +32674=>8821, +32672=>8822, +32673=>8823, +32727=>8824, +32849=>8825, +32847=>8826, +32848=>8827, +33022=>8828, +32980=>8829, +33091=>8830, +33098=>8831, +33106=>8832, +33103=>8833, +33095=>8834, +33085=>8835, +33101=>8836, +33082=>8837, +33254=>8838, +33262=>8839, +33271=>8840, +33272=>8841, +33273=>8842, +33284=>8843, +33340=>8844, +33341=>8845, +33343=>8846, +33397=>8847, +33595=>8848, +33743=>8849, +60382=>8849, +33785=>8850, +33827=>8851, +33728=>8852, +33768=>8853, +33810=>8854, +33767=>8855, +33764=>8856, +33788=>8857, +33782=>8858, +33808=>8859, +33734=>8860, +33736=>8861, +33771=>8862, +33763=>8863, +33727=>8864, +33793=>8865, +33757=>8866, +33765=>8867, +33752=>8868, +33791=>8869, +33761=>8870, +33739=>8871, +33742=>8872, +33750=>8873, +33781=>8874, +33737=>8875, +33801=>8876, +33807=>8877, +58332=>8877, +33758=>8878, +33809=>8879, +33798=>8880, +33730=>8881, +33779=>8882, +33749=>8883, +33786=>8884, +33735=>8885, +33745=>8886, +33770=>8887, +33811=>8888, +33690=>8889, +33731=>8890, +33772=>8891, +33774=>8892, +33732=>8893, +33787=>8894, +33751=>8895, +33762=>8896, +33819=>8897, +33755=>8898, +33790=>8899, +34520=>8900, +34530=>8901, +34534=>8902, +34515=>8903, +34531=>8904, +34522=>8905, +34538=>8906, +34525=>8907, +34539=>8908, +34524=>8909, +34540=>8910, +34537=>8911, +34519=>8912, +34536=>8913, +34513=>8914, +34888=>8915, +34902=>8916, +34901=>8917, +35002=>8918, +35031=>8919, +35001=>8920, +35000=>8921, +35008=>8922, +35006=>8923, +34998=>8924, +35004=>8925, +34999=>8926, +35005=>8927, +34994=>8928, +35073=>8929, +35017=>8930, +35221=>8931, +35224=>8932, +35223=>8933, +35293=>8934, +35290=>8935, +35291=>8936, +35406=>8937, +35405=>8938, +35385=>8939, +35417=>8940, +35392=>8941, +35415=>8942, +35416=>8943, +35396=>8944, +35397=>8945, +35410=>8946, +35400=>8947, +35409=>8948, +35402=>8949, +35404=>8950, +35407=>8951, +35935=>8952, +35969=>8953, +35968=>8954, +36026=>8955, +36030=>8956, +36016=>8957, +36025=>8958, +36021=>8959, +36228=>8960, +36224=>8961, +36233=>8962, +36312=>8963, +36307=>8964, +36301=>8965, +36295=>8966, +36310=>8967, +36316=>8968, +36303=>8969, +36309=>8970, +36313=>8971, +36296=>8972, +36311=>8973, +36293=>8974, +36591=>8975, +36599=>8976, +36602=>8977, +36601=>8978, +36582=>8979, +36590=>8980, +36581=>8981, +36597=>8982, +36583=>8983, +36584=>8984, +36598=>8985, +36587=>8986, +36593=>8987, +36588=>8988, +36596=>8989, +36585=>8990, +36909=>8991, +36916=>8992, +36911=>8993, +37126=>8994, +37164=>8995, +37124=>8996, +60367=>8996, +37119=>8997, +37116=>8998, +37128=>8999, +37113=>9000, +37115=>9001, +37121=>9002, +37120=>9003, +37127=>9004, +37125=>9005, +37123=>9006, +37217=>9007, +37220=>9008, +37215=>9009, +37218=>9010, +37216=>9011, +37377=>9012, +37386=>9013, +37413=>9014, +37379=>9015, +37402=>9016, +37414=>9017, +37391=>9018, +37388=>9019, +37376=>9020, +37394=>9021, +37375=>9022, +37373=>9023, +37382=>9024, +37380=>9025, +37415=>9026, +37378=>9027, +37404=>9028, +37412=>9029, +37401=>9030, +37399=>9031, +37381=>9032, +37398=>9033, +38267=>9034, +38285=>9035, +38284=>9036, +38288=>9037, +38535=>9038, +38526=>9039, +38536=>9040, +38537=>9041, +38531=>9042, +38528=>9043, +38594=>9044, +38600=>9045, +38595=>9046, +38641=>9047, +38640=>9048, +38764=>9049, +38768=>9050, +38766=>9051, +38919=>9052, +39081=>9053, +39147=>9054, +40166=>9055, +12235=>9056, +40697=>9056, +20099=>9057, +20100=>9058, +20150=>9059, +20669=>9060, +20671=>9061, +20678=>9062, +20654=>9063, +20676=>9064, +20682=>9065, +20660=>9066, +20680=>9067, +20674=>9068, +20656=>9069, +20673=>9070, +20666=>9071, +20657=>9072, +20683=>9073, +20681=>9074, +20662=>9075, +20664=>9076, +20951=>9077, +21114=>9078, +21112=>9079, +21115=>9080, +21116=>9081, +21955=>9082, +21979=>9083, +21964=>9084, +21968=>9085, +21963=>9086, +21962=>9087, +21981=>9088, +21952=>9089, +64013=>9089, +21972=>9090, +21956=>9091, +21993=>9092, +21951=>9093, +21970=>9094, +21901=>9095, +21967=>9096, +21973=>9097, +21986=>9098, +21974=>9099, +21960=>9100, +22002=>9101, +21965=>9102, +21977=>9103, +21954=>9104, +22292=>9105, +22611=>9106, +22632=>9107, +22628=>9108, +22607=>9109, +22605=>9110, +22601=>9111, +22639=>9112, +22613=>9113, +22606=>9114, +22621=>9115, +22617=>9116, +22629=>9117, +22619=>9118, +22589=>9119, +22627=>9120, +22641=>9121, +22780=>9122, +23239=>9123, +23236=>9124, +23243=>9125, +23226=>9126, +23224=>9127, +23217=>9128, +23221=>9129, +23216=>9130, +23231=>9131, +23240=>9132, +23227=>9133, +23238=>9134, +23223=>9135, +23232=>9136, +23242=>9137, +23220=>9138, +23222=>9139, +23245=>9140, +23225=>9141, +23184=>9142, +23510=>9143, +23512=>9144, +23513=>9145, +23583=>9146, +23603=>9147, +23921=>9148, +23907=>9149, +23882=>9150, +23909=>9151, +23922=>9152, +23916=>9153, +23902=>9154, +23912=>9155, +23911=>9156, +23906=>9157, +24048=>9158, +24143=>9159, +24142=>9160, +24138=>9161, +24141=>9162, +24139=>9163, +24261=>9164, +24268=>9165, +24262=>9166, +24267=>9167, +24263=>9168, +24384=>9169, +24495=>9170, +24493=>9171, +24823=>9172, +24905=>9173, +24906=>9174, +24875=>9175, +24901=>9176, +24886=>9177, +24882=>9178, +24878=>9179, +24902=>9180, +24879=>9181, +24911=>9182, +24873=>9183, +24896=>9184, +25120=>9185, +37224=>9186, +25123=>9187, +25125=>9188, +25124=>9189, +25541=>9190, +25585=>9191, +25579=>9192, +25616=>9193, +25618=>9194, +25609=>9195, +25632=>9196, +25636=>9197, +25651=>9198, +25667=>9199, +25631=>9200, +25621=>9201, +25624=>9202, +25657=>9203, +25655=>9204, +25634=>9205, +25635=>9206, +25612=>9207, +25638=>9208, +25648=>9209, +25640=>9210, +25665=>9211, +25653=>9212, +25647=>9213, +25610=>9214, +25626=>9215, +25664=>9216, +25637=>9217, +25639=>9218, +25611=>9219, +25575=>9220, +25627=>9221, +25646=>9222, +25633=>9223, +25614=>9224, +25967=>9225, +26002=>9226, +26067=>9227, +26246=>9228, +26252=>9229, +26261=>9230, +26256=>9231, +26251=>9232, +26250=>9233, +26265=>9234, +26260=>9235, +26232=>9236, +26400=>9237, +26982=>9238, +26975=>9239, +26936=>9240, +26958=>9241, +26978=>9242, +26993=>9243, +26943=>9244, +26949=>9245, +26986=>9246, +26937=>9247, +26946=>9248, +26967=>9249, +26969=>9250, +27002=>9251, +26952=>9252, +26953=>9253, +26933=>9254, +26988=>9255, +26931=>9256, +26941=>9257, +26981=>9258, +26864=>9259, +27000=>9260, +26932=>9261, +26985=>9262, +26944=>9263, +26991=>9264, +26948=>9265, +26998=>9266, +26968=>9267, +26945=>9268, +26996=>9269, +26956=>9270, +26939=>9271, +26955=>9272, +26935=>9273, +26972=>9274, +26959=>9275, +26961=>9276, +26930=>9277, +26962=>9278, +26927=>9279, +27003=>9280, +26940=>9281, +27462=>9282, +27461=>9283, +27459=>9284, +27458=>9285, +27464=>9286, +27457=>9287, +27547=>9288, +27643=>9289, +27644=>9290, +27641=>9291, +27639=>9292, +27640=>9293, +28315=>9294, +28374=>9295, +28360=>9296, +28303=>9297, +28352=>9298, +28319=>9299, +28307=>9300, +28308=>9301, +28320=>9302, +28337=>9303, +28345=>9304, +28358=>9305, +28370=>9306, +28349=>9307, +28353=>9308, +28318=>9309, +28361=>9310, +28343=>9311, +28336=>9312, +28365=>9313, +28326=>9314, +28367=>9315, +28338=>9316, +28350=>9317, +28355=>9318, +28380=>9319, +28376=>9320, +28313=>9321, +28306=>9322, +28302=>9323, +28301=>9324, +28324=>9325, +28321=>9326, +28351=>9327, +28339=>9328, +28368=>9329, +28362=>9330, +28311=>9331, +28334=>9332, +28323=>9333, +28999=>9334, +29012=>9335, +29010=>9336, +29027=>9337, +29024=>9338, +28993=>9339, +29021=>9340, +29026=>9341, +61080=>9341, +29042=>9342, +29048=>9343, +29034=>9344, +29025=>9345, +28994=>9346, +29016=>9347, +28995=>9348, +29003=>9349, +29040=>9350, +29023=>9351, +29008=>9352, +29011=>9353, +28996=>9354, +29005=>9355, +29018=>9356, +29263=>9357, +29325=>9358, +29324=>9359, +29329=>9360, +29328=>9361, +29326=>9362, +29500=>9363, +29506=>9364, +29499=>9365, +29498=>9366, +29504=>9367, +29514=>9368, +29513=>9369, +29764=>9370, +29770=>9371, +29771=>9372, +29778=>9373, +29777=>9374, +29783=>9375, +29760=>9376, +29775=>9377, +29776=>9378, +29774=>9379, +29762=>9380, +29766=>9381, +29773=>9382, +29780=>9383, +29921=>9384, +29951=>9385, +29950=>9386, +29949=>9387, +29981=>9388, +30073=>9389, +30071=>9390, +27011=>9391, +30191=>9392, +30223=>9393, +30211=>9394, +30199=>9395, +30206=>9396, +30204=>9397, +30201=>9398, +60782=>9398, +30200=>9399, +30224=>9400, +30203=>9401, +30198=>9402, +30189=>9403, +30197=>9404, +30205=>9405, +30361=>9406, +30389=>9407, +30429=>9408, +30549=>9409, +30559=>9410, +30560=>9411, +30546=>9412, +30550=>9413, +30554=>9414, +30569=>9415, +30567=>9416, +30548=>9417, +30553=>9418, +30573=>9419, +30688=>9420, +30855=>9421, +30874=>9422, +30868=>9423, +30863=>9424, +30852=>9425, +30869=>9426, +30853=>9427, +30854=>9428, +30881=>9429, +30851=>9430, +30841=>9431, +30873=>9432, +30848=>9433, +30870=>9434, +30843=>9435, +31100=>9436, +31106=>9437, +31101=>9438, +31097=>9439, +31249=>9440, +31256=>9441, +31257=>9442, +31250=>9443, +31255=>9444, +31253=>9445, +31266=>9446, +31251=>9447, +31259=>9448, +31248=>9449, +31395=>9450, +31394=>9451, +31390=>9452, +31467=>9453, +31590=>9454, +31588=>9455, +31597=>9456, +31604=>9457, +31593=>9458, +31602=>9459, +31589=>9460, +31603=>9461, +31601=>9462, +31600=>9463, +31585=>9464, +31608=>9465, +31606=>9466, +31587=>9467, +31922=>9468, +31924=>9469, +31919=>9470, +32136=>9471, +32134=>9472, +32128=>9473, +32141=>9474, +32127=>9475, +32133=>9476, +32122=>9477, +32142=>9478, +32123=>9479, +32131=>9480, +32124=>9481, +32140=>9482, +32148=>9483, +32132=>9484, +32125=>9485, +32146=>9486, +32621=>9487, +32619=>9488, +32615=>9489, +32616=>9490, +32620=>9491, +32678=>9492, +32677=>9493, +32679=>9494, +32731=>9495, +32732=>9496, +32801=>9497, +33124=>9498, +33120=>9499, +33143=>9500, +33116=>9501, +33129=>9502, +33115=>9503, +33122=>9504, +33138=>9505, +26401=>9506, +33118=>9507, +33142=>9508, +33127=>9509, +33135=>9510, +33092=>9511, +33121=>9512, +33309=>9513, +33353=>9514, +33348=>9515, +33344=>9516, +33346=>9517, +33349=>9518, +34033=>9519, +33855=>9520, +33878=>9521, +33910=>9522, +33913=>9523, +33935=>9524, +33933=>9525, +33893=>9526, +33873=>9527, +33856=>9528, +33926=>9529, +33895=>9530, +33840=>9531, +33869=>9532, +33917=>9533, +33882=>9534, +33881=>9535, +33908=>9536, +33907=>9537, +33885=>9538, +34055=>9539, +33886=>9540, +33847=>9541, +33850=>9542, +33844=>9543, +33914=>9544, +33859=>9545, +33912=>9546, +33842=>9547, +33861=>9548, +33833=>9549, +33753=>9550, +33867=>9551, +33839=>9552, +33858=>9553, +33837=>9554, +33887=>9555, +33904=>9556, +33849=>9557, +33870=>9558, +33868=>9559, +33874=>9560, +33903=>9561, +33989=>9562, +33934=>9563, +33851=>9564, +33863=>9565, +33846=>9566, +33843=>9567, +33896=>9568, +33918=>9569, +33860=>9570, +33835=>9571, +33888=>9572, +33876=>9573, +33902=>9574, +33872=>9575, +34571=>9576, +34564=>9577, +34551=>9578, +34572=>9579, +34554=>9580, +34518=>9581, +34549=>9582, +34637=>9583, +34552=>9584, +34574=>9585, +34569=>9586, +34561=>9587, +34550=>9588, +34573=>9589, +34565=>9590, +35030=>9591, +35019=>9592, +35021=>9593, +35022=>9594, +35038=>9595, +35035=>9596, +35034=>9597, +35020=>9598, +35024=>9599, +35205=>9600, +35227=>9601, +35295=>9602, +35301=>9603, +35300=>9604, +35297=>9605, +35296=>9606, +35298=>9607, +35292=>9608, +35302=>9609, +35446=>9610, +35462=>9611, +35455=>9612, +35425=>9613, +35391=>9614, +35447=>9615, +35458=>9616, +35460=>9617, +35445=>9618, +35459=>9619, +35457=>9620, +35444=>9621, +35450=>9622, +35900=>9623, +35915=>9624, +35914=>9625, +35941=>9626, +35940=>9627, +35942=>9628, +35974=>9629, +35972=>9630, +35973=>9631, +36044=>9632, +36200=>9633, +36201=>9634, +36241=>9635, +36236=>9636, +36238=>9637, +36239=>9638, +36237=>9639, +36243=>9640, +36244=>9641, +36240=>9642, +36242=>9643, +36336=>9644, +36320=>9645, +36332=>9646, +36337=>9647, +36334=>9648, +36304=>9649, +36329=>9650, +36323=>9651, +36322=>9652, +36327=>9653, +36338=>9654, +36331=>9655, +36340=>9656, +36614=>9657, +36607=>9658, +36609=>9659, +36608=>9660, +36613=>9661, +36615=>9662, +36616=>9663, +36610=>9664, +36619=>9665, +60507=>9665, +36946=>9666, +36927=>9667, +36932=>9668, +36937=>9669, +36925=>9670, +37136=>9671, +37133=>9672, +37135=>9673, +37137=>9674, +37142=>9675, +37140=>9676, +37131=>9677, +37134=>9678, +37230=>9679, +37231=>9680, +37448=>9681, +37458=>9682, +37424=>9683, +37434=>9684, +37478=>9685, +37427=>9686, +37477=>9687, +37470=>9688, +37507=>9689, +37422=>9690, +37450=>9691, +37446=>9692, +37485=>9693, +37484=>9694, +37455=>9695, +37472=>9696, +37479=>9697, +37487=>9698, +37430=>9699, +37473=>9700, +37488=>9701, +37425=>9702, +37460=>9703, +37475=>9704, +37456=>9705, +37490=>9706, +37454=>9707, +37459=>9708, +37452=>9709, +37462=>9710, +37426=>9711, +38303=>9712, +38300=>9713, +38302=>9714, +38299=>9715, +38546=>9716, +38547=>9717, +38545=>9718, +38551=>9719, +38606=>9720, +38650=>9721, +38653=>9722, +38648=>9723, +38645=>9724, +38771=>9725, +38775=>9726, +38776=>9727, +38770=>9728, +38927=>9729, +38925=>9730, +38926=>9731, +39084=>9732, +39158=>9733, +39161=>9734, +39343=>9735, +39346=>9736, +39344=>9737, +39349=>9738, +39597=>9739, +39595=>9740, +39771=>9741, +40170=>9742, +40173=>9743, +40167=>9744, +40576=>9745, +12236=>9746, +40701=>9746, +20710=>9747, +20692=>9748, +20695=>9749, +20712=>9750, +20723=>9751, +20699=>9752, +20714=>9753, +20701=>9754, +20708=>9755, +20691=>9756, +20716=>9757, +20720=>9758, +20719=>9759, +20707=>9760, +20704=>9761, +20952=>9762, +21120=>9763, +21121=>9764, +21225=>9765, +21227=>9766, +21296=>9767, +21420=>9768, +22055=>9769, +22037=>9770, +22028=>9771, +22034=>9772, +22012=>9773, +22031=>9774, +22044=>9775, +22017=>9776, +22035=>9777, +22018=>9778, +22010=>9779, +22045=>9780, +22020=>9781, +22015=>9782, +22009=>9783, +22665=>9784, +22652=>9785, +22672=>9786, +22680=>9787, +22662=>9788, +22657=>9789, +22655=>9790, +22644=>9791, +22667=>9792, +22650=>9793, +22663=>9794, +22673=>9795, +22670=>9796, +22646=>9797, +22658=>9798, +22664=>9799, +22651=>9800, +22676=>9801, +22671=>9802, +22782=>9803, +22891=>9804, +23260=>9805, +23278=>9806, +23269=>9807, +23253=>9808, +23274=>9809, +23258=>9810, +23277=>9811, +23275=>9812, +23283=>9813, +23266=>9814, +23264=>9815, +23259=>9816, +23276=>9817, +23262=>9818, +23261=>9819, +23257=>9820, +23272=>9821, +23263=>9822, +23415=>9823, +23520=>9824, +23523=>9825, +23651=>9826, +23938=>9827, +23936=>9828, +23933=>9829, +23942=>9830, +23930=>9831, +23937=>9832, +23927=>9833, +23946=>9834, +23945=>9835, +23944=>9836, +23934=>9837, +23932=>9838, +23949=>9839, +23929=>9840, +23935=>9841, +24152=>9842, +24153=>9843, +24147=>9844, +24280=>9845, +24273=>9846, +24279=>9847, +24270=>9848, +24284=>9849, +24277=>9850, +24281=>9851, +24274=>9852, +24276=>9853, +24388=>9854, +24387=>9855, +24431=>9856, +24502=>9857, +24876=>9858, +24872=>9859, +24897=>9860, +24926=>9861, +24945=>9862, +24947=>9863, +24914=>9864, +24915=>9865, +24946=>9866, +24940=>9867, +24960=>9868, +24948=>9869, +24916=>9870, +24954=>9871, +24923=>9872, +24933=>9873, +24891=>9874, +24938=>9875, +24929=>9876, +24918=>9877, +25129=>9878, +25127=>9879, +25131=>9880, +25643=>9881, +25677=>9882, +25691=>9883, +25693=>9884, +25716=>9885, +25718=>9886, +25714=>9887, +25715=>9888, +25725=>9889, +25717=>9890, +25702=>9891, +25766=>9892, +25678=>9893, +25730=>9894, +25694=>9895, +25692=>9896, +25675=>9897, +25683=>9898, +25696=>9899, +25680=>9900, +25727=>9901, +25663=>9902, +25708=>9903, +25707=>9904, +25689=>9905, +25701=>9906, +25719=>9907, +25971=>9908, +26016=>9909, +26273=>9910, +26272=>9911, +26271=>9912, +26373=>9913, +26372=>9914, +26402=>9915, +27057=>9916, +27062=>9917, +27081=>9918, +27040=>9919, +27086=>9920, +27030=>9921, +27056=>9922, +27052=>9923, +27068=>9924, +27025=>9925, +27033=>9926, +27022=>9927, +27047=>9928, +27021=>9929, +27049=>9930, +27070=>9931, +27055=>9932, +27071=>9933, +27076=>9934, +27069=>9935, +27044=>9936, +27092=>9937, +27065=>9938, +27082=>9939, +27034=>9940, +27087=>9941, +27059=>9942, +27027=>9943, +27050=>9944, +27041=>9945, +27038=>9946, +27097=>9947, +27031=>9948, +27024=>9949, +27074=>9950, +27061=>9951, +27045=>9952, +27078=>9953, +27466=>9954, +27469=>9955, +27467=>9956, +27550=>9957, +27551=>9958, +27552=>9959, +27587=>9960, +27588=>9961, +27646=>9962, +28366=>9963, +28405=>9964, +28401=>9965, +28419=>9966, +28453=>9967, +28408=>9968, +28471=>9969, +28411=>9970, +28462=>9971, +28425=>9972, +28494=>9973, +28441=>9974, +28442=>9975, +28455=>9976, +28440=>9977, +28475=>9978, +28434=>9979, +28397=>9980, +28426=>9981, +28470=>9982, +28531=>9983, +28409=>9984, +28398=>9985, +28461=>9986, +28480=>9987, +28464=>9988, +28476=>9989, +28469=>9990, +28395=>9991, +28423=>9992, +28430=>9993, +28483=>9994, +28421=>9995, +28413=>9996, +28406=>9997, +28473=>9998, +28444=>9999, +28412=>10000, +28474=>10001, +28447=>10002, +28429=>10003, +28446=>10004, +28424=>10005, +28449=>10006, +29063=>10007, +29072=>10008, +29065=>10009, +29056=>10010, +29061=>10011, +29058=>10012, +29071=>10013, +29051=>10014, +29062=>10015, +29057=>10016, +29079=>10017, +29252=>10018, +29267=>10019, +29335=>10020, +29333=>10021, +29331=>10022, +29507=>10023, +29517=>10024, +29521=>10025, +29516=>10026, +29794=>10027, +29811=>10028, +29809=>10029, +29813=>10030, +29810=>10031, +29799=>10032, +29806=>10033, +29952=>10034, +29954=>10035, +29955=>10036, +30077=>10037, +30096=>10038, +30230=>10039, +30216=>10040, +30220=>10041, +30229=>10042, +30225=>10043, +30218=>10044, +30228=>10045, +30392=>10046, +30593=>10047, +30588=>10048, +30597=>10049, +30594=>10050, +30574=>10051, +30592=>10052, +30575=>10053, +30590=>10054, +30595=>10055, +30898=>10056, +30890=>10057, +30900=>10058, +30893=>10059, +30888=>10060, +30846=>10061, +30891=>10062, +30878=>10063, +30885=>10064, +30880=>10065, +30892=>10066, +30882=>10067, +30884=>10068, +31128=>10069, +31114=>10070, +31115=>10071, +31126=>10072, +31125=>10073, +31124=>10074, +31123=>10075, +31127=>10076, +31112=>10077, +31122=>10078, +31120=>10079, +31275=>10080, +31306=>10081, +31280=>10082, +31279=>10083, +31272=>10084, +31270=>10085, +31400=>10086, +31403=>10087, +31404=>10088, +31470=>10089, +31624=>10090, +31644=>10091, +31626=>10092, +31633=>10093, +31632=>10094, +31638=>10095, +31629=>10096, +31628=>10097, +31643=>10098, +31630=>10099, +31621=>10100, +31640=>10101, +21124=>10102, +31641=>10103, +31652=>10104, +31618=>10105, +31931=>10106, +31935=>10107, +31932=>10108, +31930=>10109, +32167=>10110, +32183=>10111, +32194=>10112, +32163=>10113, +32170=>10114, +32193=>10115, +32192=>10116, +32197=>10117, +32157=>10118, +32206=>10119, +32196=>10120, +32198=>10121, +32203=>10122, +32204=>10123, +32175=>10124, +32185=>10125, +32150=>10126, +32188=>10127, +32159=>10128, +32166=>10129, +32174=>10130, +32169=>10131, +32161=>10132, +32201=>10133, +32627=>10134, +32738=>10135, +32739=>10136, +32741=>10137, +32734=>10138, +32804=>10139, +32861=>10140, +32860=>10141, +33161=>10142, +33158=>10143, +33155=>10144, +33159=>10145, +33165=>10146, +33164=>10147, +33163=>10148, +33301=>10149, +33943=>10150, +33956=>10151, +33953=>10152, +33951=>10153, +33978=>10154, +33998=>10155, +33986=>10156, +33964=>10157, +33966=>10158, +33963=>10159, +33977=>10160, +33972=>10161, +33985=>10162, +33997=>10163, +33962=>10164, +33946=>10165, +33969=>10166, +34000=>10167, +33949=>10168, +33959=>10169, +33979=>10170, +33954=>10171, +33940=>10172, +33991=>10173, +33996=>10174, +33947=>10175, +33961=>10176, +33967=>10177, +33960=>10178, +58327=>10178, +34006=>10179, +33944=>10180, +33974=>10181, +33999=>10182, +33952=>10183, +34007=>10184, +34004=>10185, +34002=>10186, +34011=>10187, +33968=>10188, +33937=>10189, +34401=>10190, +34611=>10191, +34595=>10192, +34600=>10193, +34667=>10194, +34624=>10195, +34606=>10196, +34590=>10197, +34593=>10198, +34585=>10199, +34587=>10200, +34627=>10201, +34604=>10202, +34625=>10203, +34622=>10204, +34630=>10205, +34592=>10206, +34610=>10207, +34602=>10208, +34605=>10209, +34620=>10210, +34578=>10211, +34618=>10212, +34609=>10213, +34613=>10214, +34626=>10215, +34598=>10216, +34599=>10217, +34616=>10218, +34596=>10219, +34586=>10220, +34608=>10221, +34577=>10222, +35063=>10223, +35047=>10224, +35057=>10225, +35058=>10226, +35066=>10227, +35070=>10228, +35054=>10229, +35068=>10230, +35062=>10231, +35067=>10232, +35056=>10233, +35052=>10234, +35051=>10235, +35229=>10236, +35233=>10237, +35231=>10238, +35230=>10239, +35305=>10240, +35307=>10241, +35304=>10242, +35499=>10243, +35481=>10244, +35467=>10245, +35474=>10246, +35471=>10247, +35478=>10248, +35901=>10249, +35944=>10250, +35945=>10251, +36053=>10252, +36047=>10253, +36055=>10254, +36246=>10255, +36361=>10256, +36354=>10257, +36351=>10258, +36365=>10259, +36349=>10260, +36362=>10261, +36355=>10262, +36359=>10263, +36358=>10264, +36357=>10265, +36350=>10266, +36352=>10267, +36356=>10268, +36624=>10269, +36625=>10270, +36622=>10271, +36621=>10272, +37155=>10273, +37148=>10274, +37152=>10275, +37154=>10276, +37151=>10277, +37149=>10278, +37146=>10279, +37156=>10280, +37153=>10281, +37147=>10282, +37242=>10283, +37234=>10284, +37241=>10285, +37235=>10286, +37541=>10287, +37540=>10288, +37494=>10289, +37531=>10290, +37498=>10291, +37536=>10292, +37524=>10293, +37546=>10294, +37517=>10295, +37542=>10296, +37530=>10297, +37547=>10298, +37497=>10299, +37527=>10300, +37503=>10301, +37539=>10302, +37614=>10303, +37518=>10304, +37506=>10305, +37525=>10306, +37538=>10307, +37501=>10308, +37512=>10309, +37537=>10310, +37514=>10311, +37510=>10312, +37516=>10313, +37529=>10314, +37543=>10315, +37502=>10316, +37511=>10317, +37545=>10318, +37533=>10319, +37515=>10320, +37421=>10321, +38558=>10322, +38561=>10323, +38655=>10324, +38744=>10325, +38781=>10326, +38778=>10327, +38782=>10328, +38787=>10329, +38784=>10330, +38786=>10331, +38779=>10332, +38788=>10333, +38785=>10334, +38783=>10335, +38862=>10336, +38861=>10337, +38934=>10338, +39085=>10339, +39086=>10340, +39170=>10341, +39168=>10342, +39175=>10343, +39325=>10344, +39324=>10345, +39363=>10346, +39353=>10347, +39355=>10348, +39354=>10349, +39362=>10350, +39357=>10351, +39367=>10352, +39601=>10353, +39651=>10354, +39655=>10355, +39742=>10356, +39743=>10357, +39776=>10358, +39777=>10359, +39775=>10360, +40177=>10361, +40178=>10362, +40181=>10363, +40615=>10364, +20735=>10365, +20739=>10366, +20784=>10367, +20728=>10368, +20742=>10369, +20743=>10370, +20726=>10371, +20734=>10372, +20747=>10373, +20748=>10374, +20733=>10375, +20746=>10376, +21131=>10377, +21132=>10378, +21233=>10379, +21231=>10380, +22088=>10381, +22082=>10382, +22092=>10383, +22069=>10384, +22081=>10385, +22090=>10386, +22089=>10387, +22086=>10388, +22104=>10389, +22106=>10390, +22080=>10391, +22067=>10392, +22077=>10393, +22060=>10394, +22078=>10395, +22072=>10396, +22058=>10397, +22074=>10398, +22298=>10399, +22699=>10400, +22685=>10401, +22705=>10402, +22688=>10403, +22691=>10404, +22703=>10405, +22700=>10406, +22693=>10407, +22689=>10408, +22783=>10409, +23295=>10410, +23284=>10411, +23293=>10412, +23287=>10413, +23286=>10414, +23299=>10415, +23288=>10416, +23298=>10417, +23289=>10418, +23297=>10419, +23303=>10420, +23301=>10421, +23311=>10422, +23655=>10423, +23961=>10424, +23959=>10425, +23967=>10426, +23954=>10427, +23970=>10428, +23955=>10429, +23957=>10430, +23968=>10431, +23964=>10432, +23969=>10433, +23962=>10434, +23966=>10435, +24169=>10436, +24157=>10437, +24160=>10438, +24156=>10439, +32243=>10440, +24283=>10441, +24286=>10442, +24289=>10443, +24393=>10444, +24498=>10445, +24971=>10446, +24963=>10447, +24953=>10448, +25009=>10449, +25008=>10450, +24994=>10451, +24969=>10452, +24987=>10453, +24979=>10454, +25007=>10455, +25005=>10456, +24991=>10457, +24978=>10458, +25002=>10459, +24993=>10460, +24973=>10461, +24934=>10462, +25011=>10463, +25133=>10464, +25710=>10465, +25712=>10466, +25750=>10467, +25760=>10468, +25733=>10469, +25751=>10470, +25756=>10471, +25743=>10472, +25739=>10473, +25738=>10474, +25740=>10475, +25763=>10476, +25759=>10477, +25704=>10478, +25777=>10479, +25752=>10480, +25974=>10481, +25978=>10482, +25977=>10483, +25979=>10484, +26034=>10485, +26035=>10486, +26293=>10487, +26288=>10488, +26281=>10489, +26290=>10490, +26295=>10491, +26282=>10492, +26287=>10493, +27136=>10494, +27142=>10495, +27159=>10496, +27109=>10497, +27128=>10498, +27157=>10499, +27121=>10500, +27108=>10501, +27168=>10502, +27135=>10503, +27116=>10504, +27106=>10505, +27163=>10506, +27165=>10507, +27134=>10508, +27175=>10509, +27122=>10510, +27118=>10511, +27156=>10512, +27127=>10513, +27111=>10514, +27200=>10515, +27144=>10516, +27110=>10517, +27131=>10518, +27149=>10519, +27132=>10520, +27115=>10521, +27145=>10522, +27140=>10523, +27160=>10524, +27173=>10525, +27151=>10526, +27126=>10527, +27174=>10528, +27143=>10529, +27124=>10530, +27158=>10531, +27473=>10532, +27557=>10533, +27555=>10534, +27554=>10535, +27558=>10536, +27649=>10537, +27648=>10538, +27647=>10539, +27650=>10540, +28481=>10541, +28454=>10542, +28542=>10543, +28551=>10544, +28614=>10545, +28562=>10546, +28557=>10547, +28553=>10548, +28556=>10549, +28514=>10550, +28495=>10551, +28549=>10552, +28506=>10553, +28566=>10554, +28534=>10555, +28524=>10556, +28546=>10557, +28501=>10558, +28530=>10559, +28498=>10560, +28496=>10561, +28503=>10562, +28564=>10563, +28563=>10564, +28509=>10565, +28416=>10566, +28513=>10567, +28523=>10568, +28541=>10569, +28519=>10570, +28560=>10571, +28499=>10572, +28555=>10573, +28521=>10574, +28543=>10575, +28565=>10576, +28515=>10577, +28535=>10578, +28522=>10579, +28539=>10580, +29106=>10581, +29103=>10582, +29083=>10583, +29104=>10584, +29088=>10585, +29082=>10586, +29097=>10587, +29109=>10588, +29085=>10589, +29093=>10590, +29086=>10591, +29092=>10592, +29089=>10593, +29098=>10594, +29084=>10595, +29095=>10596, +29107=>10597, +29336=>10598, +29338=>10599, +29528=>10600, +29522=>10601, +29534=>10602, +29535=>10603, +29536=>10604, +29533=>10605, +29531=>10606, +29537=>10607, +29530=>10608, +29529=>10609, +29538=>10610, +29831=>10611, +29833=>10612, +29834=>10613, +29830=>10614, +29825=>10615, +29821=>10616, +29829=>10617, +29832=>10618, +29820=>10619, +29817=>10620, +58868=>10620, +29960=>10621, +29959=>10622, +30078=>10623, +30245=>10624, +30238=>10625, +30233=>10626, +30237=>10627, +30236=>10628, +30243=>10629, +30234=>10630, +30248=>10631, +30235=>10632, +30364=>10633, +30365=>10634, +30366=>10635, +30363=>10636, +30605=>10637, +30607=>10638, +30601=>10639, +30600=>10640, +30925=>10641, +30907=>10642, +30927=>10643, +30924=>10644, +30929=>10645, +30926=>10646, +30932=>10647, +30920=>10648, +30915=>10649, +30916=>10650, +30921=>10651, +31130=>10652, +31137=>10653, +31136=>10654, +31132=>10655, +31138=>10656, +31131=>10657, +59175=>10657, +27510=>10658, +31289=>10659, +31410=>10660, +31412=>10661, +31411=>10662, +31671=>10663, +31691=>10664, +31678=>10665, +31660=>10666, +31694=>10667, +31663=>10668, +31673=>10669, +31690=>10670, +31669=>10671, +31941=>10672, +31944=>10673, +31948=>10674, +31947=>10675, +32247=>10676, +32219=>10677, +32234=>10678, +32231=>10679, +32215=>10680, +32225=>10681, +32259=>10682, +32250=>10683, +32230=>10684, +32246=>10685, +32241=>10686, +32240=>10687, +32238=>10688, +32223=>10689, +32630=>10690, +32684=>10691, +32688=>10692, +32685=>10693, +32749=>10694, +32747=>10695, +32746=>10696, +32748=>10697, +32742=>10698, +32744=>10699, +32868=>10700, +32871=>10701, +33187=>10702, +33183=>10703, +33182=>10704, +33173=>10705, +33186=>10706, +33177=>10707, +33175=>10708, +33302=>10709, +33359=>10710, +33363=>10711, +33362=>10712, +33360=>10713, +33358=>10714, +33361=>10715, +34084=>10716, +34107=>10717, +34063=>10718, +34048=>10719, +34089=>10720, +34062=>10721, +34057=>10722, +34061=>10723, +34079=>10724, +34058=>10725, +34087=>10726, +34076=>10727, +34043=>10728, +34091=>10729, +34042=>10730, +34056=>10731, +34060=>10732, +34036=>10733, +34090=>10734, +34034=>10735, +34069=>10736, +34039=>10737, +34027=>10738, +34035=>10739, +34044=>10740, +34066=>10741, +34026=>10742, +34025=>10743, +34070=>10744, +34046=>10745, +34088=>10746, +34077=>10747, +34094=>10748, +34050=>10749, +34045=>10750, +34078=>10751, +34038=>10752, +34097=>10753, +34086=>10754, +34023=>10755, +34024=>10756, +34032=>10757, +34031=>10758, +34041=>10759, +34072=>10760, +34080=>10761, +34096=>10762, +34059=>10763, +34073=>10764, +34095=>10765, +34402=>10766, +34646=>10767, +34659=>10768, +34660=>10769, +34679=>10770, +34785=>10771, +34675=>10772, +34648=>10773, +34644=>10774, +34651=>10775, +34642=>10776, +34657=>10777, +34650=>10778, +34641=>10779, +34654=>10780, +34669=>10781, +34666=>10782, +34640=>10783, +34638=>10784, +34655=>10785, +34653=>10786, +34671=>10787, +34668=>10788, +34682=>10789, +34670=>10790, +34652=>10791, +34661=>10792, +34639=>10793, +34683=>10794, +34677=>10795, +34658=>10796, +34663=>10797, +34665=>10798, +34906=>10799, +35077=>10800, +35084=>10801, +35092=>10802, +35083=>10803, +35095=>10804, +35096=>10805, +35097=>10806, +35078=>10807, +35094=>10808, +35089=>10809, +35086=>10810, +35081=>10811, +35234=>10812, +35236=>10813, +35235=>10814, +35309=>10815, +35312=>10816, +35308=>10817, +35535=>10818, +35526=>10819, +35512=>10820, +35539=>10821, +35537=>10822, +35540=>10823, +35541=>10824, +35515=>10825, +35543=>10826, +35518=>10827, +35520=>10828, +35525=>10829, +35544=>10830, +35523=>10831, +35514=>10832, +35517=>10833, +35545=>10834, +35902=>10835, +35917=>10836, +35983=>10837, +36069=>10838, +36063=>10839, +36057=>10840, +36072=>10841, +36058=>10842, +36061=>10843, +36071=>10844, +36256=>10845, +36252=>10846, +36257=>10847, +36251=>10848, +36384=>10849, +36387=>10850, +36389=>10851, +36388=>10852, +36398=>10853, +36373=>10854, +36379=>10855, +36374=>10856, +36369=>10857, +36377=>10858, +36390=>10859, +36391=>10860, +36372=>10861, +36370=>10862, +36376=>10863, +36371=>10864, +36380=>10865, +36375=>10866, +36378=>10867, +36652=>10868, +36644=>10869, +36632=>10870, +36634=>10871, +36640=>10872, +36643=>10873, +36630=>10874, +36631=>10875, +36979=>10876, +36976=>10877, +36975=>10878, +36967=>10879, +36971=>10880, +37167=>10881, +37163=>10882, +37161=>10883, +37162=>10884, +37170=>10885, +37158=>10886, +37166=>10887, +37253=>10888, +37254=>10889, +37258=>10890, +37249=>10891, +37250=>10892, +37252=>10893, +37248=>10894, +37584=>10895, +37571=>10896, +37572=>10897, +37568=>10898, +37593=>10899, +37558=>10900, +37583=>10901, +37617=>10902, +37599=>10903, +37592=>10904, +37609=>10905, +37591=>10906, +37597=>10907, +37580=>10908, +37615=>10909, +37570=>10910, +37608=>10911, +37578=>10912, +37576=>10913, +37582=>10914, +37606=>10915, +37581=>10916, +37589=>10917, +37577=>10918, +37600=>10919, +37598=>10920, +37607=>10921, +37585=>10922, +37587=>10923, +37557=>10924, +37601=>10925, +37669=>10926, +37574=>10927, +37556=>10928, +38268=>10929, +38316=>10930, +38315=>10931, +38318=>10932, +38320=>10933, +38564=>10934, +38562=>10935, +38611=>10936, +38661=>10937, +38664=>10938, +38658=>10939, +38746=>10940, +38794=>10941, +38798=>10942, +38792=>10943, +38864=>10944, +38863=>10945, +38942=>10946, +38941=>10947, +38950=>10948, +38953=>10949, +38952=>10950, +38944=>10951, +38939=>10952, +38951=>10953, +39090=>10954, +39176=>10955, +39162=>10956, +39185=>10957, +39188=>10958, +39190=>10959, +39191=>10960, +39189=>10961, +39388=>10962, +39373=>10963, +39375=>10964, +39379=>10965, +39380=>10966, +39374=>10967, +39369=>10968, +39382=>10969, +60270=>10969, +39384=>10970, +39371=>10971, +39383=>10972, +39372=>10973, +39603=>10974, +39660=>10975, +39659=>10976, +39667=>10977, +39666=>10978, +39665=>10979, +39750=>10980, +39747=>10981, +39783=>10982, +39796=>10983, +39793=>10984, +39782=>10985, +39798=>10986, +39797=>10987, +39792=>10988, +39784=>10989, +39780=>10990, +39788=>10991, +40188=>10992, +40186=>10993, +40189=>10994, +40191=>10995, +40183=>10996, +40199=>10997, +40192=>10998, +40185=>10999, +40187=>11000, +40200=>11001, +40197=>11002, +40196=>11003, +40579=>11004, +40659=>11005, +40719=>11006, +40720=>11007, +20764=>11008, +20755=>11009, +20759=>11010, +20762=>11011, +20753=>11012, +20958=>11013, +21300=>11014, +21473=>11015, +22128=>11016, +22112=>11017, +22126=>11018, +22131=>11019, +22118=>11020, +22115=>11021, +22125=>11022, +22130=>11023, +22110=>11024, +22135=>11025, +22300=>11026, +22299=>11027, +22728=>11028, +22717=>11029, +22729=>11030, +22719=>11031, +22714=>11032, +22722=>11033, +22716=>11034, +22726=>11035, +23319=>11036, +23321=>11037, +23323=>11038, +23329=>11039, +23316=>11040, +23315=>11041, +23312=>11042, +23318=>11043, +23336=>11044, +59539=>11044, +23322=>11045, +23328=>11046, +23326=>11047, +23535=>11048, +23980=>11049, +23985=>11050, +23977=>11051, +23975=>11052, +23989=>11053, +23984=>11054, +23982=>11055, +23978=>11056, +23976=>11057, +23986=>11058, +23981=>11059, +23983=>11060, +23988=>11061, +24167=>11062, +24168=>11063, +24166=>11064, +24175=>11065, +24297=>11066, +24295=>11067, +24294=>11068, +24296=>11069, +24293=>11070, +24395=>11071, +24508=>11072, +24507=>11073, +24989=>11074, +25000=>11075, +24982=>11076, +25029=>11077, +25012=>11078, +25030=>11079, +25025=>11080, +25036=>11081, +25018=>11082, +25023=>11083, +25016=>11084, +24972=>11085, +25815=>11086, +25814=>11087, +25808=>11088, +25807=>11089, +25801=>11090, +25789=>11091, +25737=>11092, +25795=>11093, +25819=>11094, +25843=>11095, +25817=>11096, +25907=>11097, +25983=>11098, +25980=>11099, +26018=>11100, +26312=>11101, +26302=>11102, +26304=>11103, +26314=>11104, +26315=>11105, +26319=>11106, +26301=>11107, +26299=>11108, +26298=>11109, +26316=>11110, +26403=>11111, +27188=>11112, +27238=>11113, +27209=>11114, +27239=>11115, +27186=>11116, +27240=>11117, +27198=>11118, +27229=>11119, +27245=>11120, +27254=>11121, +27227=>11122, +27217=>11123, +27176=>11124, +27226=>11125, +27195=>11126, +27199=>11127, +27201=>11128, +27242=>11129, +27236=>11130, +27216=>11131, +27215=>11132, +27220=>11133, +27247=>11134, +27241=>11135, +27232=>11136, +27196=>11137, +27230=>11138, +27222=>11139, +27221=>11140, +27213=>11141, +27214=>11142, +27206=>11143, +27477=>11144, +27476=>11145, +27478=>11146, +27559=>11147, +27562=>11148, +27563=>11149, +27592=>11150, +27591=>11151, +27652=>11152, +27651=>11153, +27654=>11154, +28589=>11155, +28619=>11156, +28579=>11157, +28615=>11158, +28604=>11159, +28622=>11160, +28616=>11161, +28510=>11162, +28612=>11163, +28605=>11164, +28574=>11165, +28618=>11166, +28584=>11167, +28676=>11168, +28581=>11169, +28590=>11170, +28602=>11171, +28588=>11172, +28586=>11173, +28623=>11174, +28607=>11175, +28600=>11176, +28578=>11177, +28617=>11178, +28587=>11179, +28621=>11180, +28591=>11181, +28594=>11182, +28592=>11183, +29125=>11184, +29122=>11185, +29119=>11186, +29112=>11187, +29142=>11188, +29120=>11189, +29121=>11190, +29131=>11191, +29140=>11192, +29130=>11193, +29127=>11194, +29135=>11195, +29117=>11196, +29144=>11197, +29116=>11198, +29126=>11199, +29146=>11200, +29147=>11201, +29341=>11202, +29342=>11203, +29545=>11204, +29542=>11205, +29543=>11206, +29548=>11207, +29541=>11208, +29547=>11209, +29546=>11210, +29823=>11211, +29850=>11212, +29856=>11213, +29844=>11214, +29842=>11215, +29845=>11216, +29857=>11217, +29963=>11218, +30080=>11219, +30255=>11220, +30253=>11221, +30257=>11222, +30269=>11223, +30259=>11224, +30268=>11225, +30261=>11226, +30258=>11227, +30256=>11228, +30395=>11229, +30438=>11230, +30618=>11231, +30621=>11232, +30625=>11233, +30620=>11234, +30619=>11235, +30626=>11236, +30627=>11237, +30613=>11238, +30617=>11239, +30615=>11240, +30941=>11241, +30953=>11242, +30949=>11243, +30954=>11244, +30942=>11245, +30947=>11246, +30939=>11247, +30945=>11248, +30946=>11249, +30957=>11250, +30943=>11251, +30944=>11252, +31140=>11253, +31300=>11254, +31304=>11255, +31303=>11256, +31414=>11257, +31416=>11258, +31413=>11259, +31409=>11260, +31415=>11261, +31710=>11262, +31715=>11263, +31719=>11264, +31709=>11265, +31701=>11266, +31717=>11267, +31706=>11268, +31720=>11269, +31737=>11270, +31700=>11271, +31722=>11272, +31714=>11273, +31708=>11274, +31723=>11275, +31704=>11276, +31711=>11277, +31954=>11278, +31956=>11279, +31959=>11280, +31952=>11281, +31953=>11282, +32274=>11283, +32289=>11284, +32279=>11285, +32268=>11286, +32287=>11287, +32288=>11288, +32275=>11289, +32270=>11290, +32284=>11291, +32277=>11292, +32282=>11293, +32290=>11294, +32267=>11295, +32271=>11296, +32278=>11297, +32269=>11298, +32276=>11299, +32293=>11300, +32292=>11301, +32579=>11302, +32635=>11303, +32636=>11304, +32634=>11305, +32689=>11306, +32751=>11307, +32810=>11308, +32809=>11309, +32876=>11310, +33201=>11311, +33190=>11312, +33198=>11313, +33209=>11314, +33205=>11315, +33195=>11316, +33200=>11317, +33196=>11318, +33204=>11319, +33202=>11320, +33207=>11321, +33191=>11322, +33266=>11323, +33365=>11324, +33366=>11325, +33367=>11326, +34134=>11327, +34117=>11328, +34155=>11329, +34125=>11330, +34131=>11331, +34145=>11332, +34136=>11333, +34112=>11334, +34118=>11335, +34148=>11336, +34113=>11337, +34146=>11338, +34116=>11339, +34129=>11340, +34119=>11341, +34147=>11342, +34110=>11343, +34139=>11344, +34161=>11345, +34126=>11346, +34158=>11347, +34165=>11348, +34133=>11349, +34151=>11350, +34144=>11351, +34188=>11352, +34150=>11353, +34141=>11354, +34132=>11355, +34149=>11356, +34156=>11357, +34403=>11358, +34405=>11359, +34404=>11360, +34724=>11361, +34715=>11362, +34703=>11363, +34711=>11364, +34707=>11365, +34706=>11366, +34696=>11367, +34689=>11368, +34710=>11369, +34712=>11370, +34681=>11371, +34695=>11372, +34723=>11373, +34693=>11374, +34704=>11375, +34705=>11376, +34717=>11377, +34692=>11378, +34708=>11379, +34716=>11380, +34714=>11381, +34697=>11382, +35102=>11383, +35110=>11384, +35120=>11385, +35117=>11386, +35118=>11387, +35111=>11388, +35121=>11389, +35106=>11390, +35113=>11391, +35107=>11392, +35119=>11393, +35116=>11394, +35103=>11395, +35313=>11396, +35552=>11397, +35554=>11398, +35570=>11399, +35572=>11400, +35573=>11401, +35549=>11402, +35604=>11403, +35556=>11404, +35551=>11405, +35568=>11406, +35528=>11407, +35550=>11408, +35553=>11409, +35560=>11410, +35583=>11411, +35567=>11412, +35579=>11413, +35985=>11414, +35986=>11415, +35984=>11416, +36085=>11417, +36078=>11418, +36081=>11419, +36080=>11420, +36083=>11421, +36204=>11422, +36206=>11423, +36261=>11424, +36263=>11425, +36403=>11426, +36414=>11427, +36408=>11428, +36416=>11429, +36421=>11430, +36406=>11431, +36412=>11432, +36413=>11433, +36417=>11434, +36400=>11435, +36415=>11436, +36541=>11437, +36662=>11438, +60329=>11438, +36654=>11439, +36661=>11440, +36658=>11441, +36665=>11442, +36663=>11443, +36660=>11444, +36982=>11445, +36985=>11446, +36987=>11447, +36998=>11448, +37114=>11449, +37171=>11450, +37173=>11451, +37174=>11452, +37267=>11453, +37264=>11454, +37265=>11455, +37261=>11456, +37263=>11457, +37671=>11458, +37662=>11459, +37640=>11460, +37663=>11461, +37638=>11462, +37647=>11463, +37754=>11464, +37688=>11465, +37692=>11466, +37659=>11467, +37667=>11468, +37650=>11469, +37633=>11470, +37702=>11471, +37677=>11472, +37646=>11473, +37645=>11474, +37579=>11475, +37661=>11476, +37626=>11477, +37651=>11478, +37625=>11479, +37623=>11480, +37684=>11481, +37634=>11482, +37668=>11483, +37631=>11484, +37673=>11485, +37689=>11486, +37685=>11487, +37674=>11488, +37652=>11489, +37644=>11490, +37643=>11491, +37630=>11492, +37641=>11493, +37632=>11494, +37627=>11495, +37654=>11496, +38332=>11497, +38349=>11498, +38334=>11499, +38329=>11500, +38330=>11501, +38326=>11502, +38335=>11503, +38325=>11504, +38333=>11505, +38569=>11506, +38612=>11507, +38667=>11508, +38674=>11509, +38672=>11510, +38809=>11511, +38807=>11512, +38804=>11513, +38896=>11514, +38904=>11515, +38965=>11516, +38959=>11517, +38962=>11518, +39204=>11519, +39199=>11520, +39207=>11521, +39209=>11522, +39326=>11523, +39406=>11524, +39404=>11525, +39397=>11526, +39396=>11527, +39408=>11528, +39395=>11529, +39402=>11530, +39401=>11531, +39399=>11532, +39609=>11533, +39615=>11534, +39604=>11535, +39611=>11536, +39670=>11537, +39674=>11538, +39673=>11539, +39671=>11540, +39731=>11541, +39808=>11542, +39813=>11543, +39815=>11544, +39804=>11545, +39806=>11546, +39803=>11547, +39810=>11548, +39827=>11549, +39826=>11550, +39824=>11551, +39802=>11552, +39829=>11553, +39805=>11554, +39816=>11555, +40229=>11556, +40215=>11557, +40224=>11558, +40222=>11559, +40212=>11560, +40233=>11561, +40221=>11562, +40216=>11563, +40226=>11564, +40208=>11565, +40217=>11566, +40223=>11567, +40584=>11568, +40582=>11569, +40583=>11570, +40622=>11571, +40621=>11572, +40661=>11573, +40662=>11574, +40698=>11575, +40722=>11576, +40765=>11577, +20774=>11578, +20773=>11579, +20770=>11580, +20772=>11581, +20768=>11582, +20777=>11583, +21236=>11584, +22163=>11585, +22156=>11586, +22157=>11587, +22150=>11588, +22148=>11589, +22147=>11590, +22142=>11591, +22146=>11592, +22143=>11593, +22145=>11594, +22742=>11595, +22740=>11596, +22735=>11597, +22738=>11598, +23341=>11599, +23333=>11600, +23346=>11601, +23331=>11602, +23340=>11603, +23335=>11604, +23334=>11605, +23343=>11606, +23342=>11607, +23419=>11608, +23537=>11609, +23538=>11610, +23991=>11611, +24172=>11612, +24170=>11613, +24510=>11614, +25027=>11615, +25013=>11616, +25020=>11617, +25063=>11618, +25056=>11619, +25061=>11620, +25060=>11621, +25064=>11622, +25054=>11623, +25839=>11624, +25833=>11625, +25827=>11626, +25835=>11627, +25828=>11628, +25832=>11629, +25985=>11630, +25984=>11631, +26038=>11632, +26074=>11633, +26322=>11634, +27277=>11635, +27286=>11636, +27265=>11637, +27301=>11638, +27273=>11639, +27295=>11640, +27291=>11641, +27297=>11642, +27294=>11643, +27271=>11644, +27283=>11645, +27278=>11646, +27285=>11647, +27267=>11648, +27304=>11649, +27300=>11650, +27281=>11651, +27263=>11652, +27302=>11653, +27290=>11654, +27269=>11655, +27276=>11656, +27282=>11657, +27483=>11658, +27565=>11659, +27657=>11660, +28620=>11661, +28585=>11662, +28660=>11663, +28628=>11664, +28643=>11665, +28636=>11666, +28653=>11667, +28647=>11668, +28646=>11669, +28638=>11670, +28658=>11671, +28637=>11672, +28642=>11673, +28648=>11674, +29153=>11675, +29169=>11676, +29160=>11677, +29170=>11678, +29156=>11679, +29168=>11680, +29154=>11681, +29555=>11682, +29550=>11683, +29551=>11684, +29847=>11685, +29874=>11686, +29867=>11687, +29840=>11688, +29866=>11689, +29869=>11690, +29873=>11691, +29861=>11692, +29871=>11693, +29968=>11694, +29969=>11695, +29970=>11696, +29967=>11697, +30084=>11698, +30275=>11699, +30280=>11700, +30281=>11701, +30279=>11702, +30372=>11703, +30441=>11704, +30645=>11705, +30635=>11706, +30642=>11707, +30647=>11708, +30646=>11709, +30644=>11710, +30641=>11711, +30632=>11712, +30704=>11713, +30963=>11714, +30973=>11715, +30978=>11716, +30971=>11717, +30972=>11718, +30975=>11719, +30962=>11720, +30981=>11721, +30969=>11722, +30974=>11723, +30980=>11724, +31147=>11725, +31144=>11726, +31324=>11727, +31323=>11728, +31318=>11729, +31320=>11730, +31316=>11731, +31322=>11732, +31422=>11733, +31424=>11734, +31425=>11735, +31749=>11736, +31759=>11737, +31730=>11738, +31744=>11739, +31743=>11740, +31739=>11741, +31758=>11742, +31732=>11743, +31755=>11744, +31731=>11745, +31746=>11746, +31753=>11747, +31747=>11748, +31745=>11749, +31736=>11750, +31741=>11751, +31750=>11752, +58176=>11752, +31728=>11753, +31729=>11754, +31760=>11755, +31754=>11756, +31976=>11757, +32301=>11758, +32316=>11759, +32322=>11760, +32307=>11761, +38984=>11762, +32312=>11763, +32298=>11764, +32329=>11765, +32320=>11766, +32327=>11767, +32297=>11768, +32332=>11769, +32304=>11770, +32315=>11771, +32310=>11772, +32324=>11773, +32314=>11774, +32581=>11775, +32639=>11776, +32638=>11777, +32637=>11778, +32756=>11779, +32754=>11780, +32812=>11781, +33211=>11782, +33220=>11783, +33228=>11784, +33226=>11785, +33221=>11786, +33223=>11787, +33212=>11788, +33257=>11789, +33371=>11790, +33370=>11791, +33372=>11792, +34179=>11793, +34176=>11794, +34191=>11795, +34215=>11796, +34197=>11797, +34208=>11798, +34187=>11799, +34211=>11800, +34171=>11801, +34212=>11802, +34202=>11803, +34206=>11804, +34167=>11805, +34172=>11806, +34185=>11807, +34209=>11808, +34170=>11809, +34168=>11810, +34135=>11811, +34190=>11812, +34198=>11813, +34182=>11814, +34189=>11815, +34201=>11816, +34205=>11817, +34177=>11818, +34210=>11819, +34178=>11820, +34184=>11821, +34181=>11822, +34169=>11823, +34166=>11824, +34200=>11825, +34192=>11826, +34207=>11827, +34408=>11828, +34750=>11829, +34730=>11830, +34733=>11831, +34757=>11832, +34736=>11833, +34732=>11834, +34745=>11835, +34741=>11836, +34748=>11837, +34734=>11838, +34761=>11839, +34755=>11840, +34754=>11841, +34764=>11842, +34743=>11843, +34735=>11844, +34756=>11845, +34762=>11846, +34740=>11847, +34742=>11848, +34751=>11849, +34744=>11850, +34749=>11851, +34782=>11852, +34738=>11853, +35125=>11854, +35123=>11855, +35132=>11856, +35134=>11857, +35137=>11858, +35154=>11859, +35127=>11860, +35138=>11861, +35245=>11862, +35247=>11863, +35246=>11864, +35314=>11865, +35315=>11866, +35614=>11867, +35608=>11868, +35606=>11869, +35601=>11870, +35589=>11871, +35595=>11872, +35618=>11873, +35599=>11874, +35602=>11875, +35605=>11876, +35591=>11877, +35597=>11878, +35592=>11879, +35590=>11880, +35612=>11881, +35603=>11882, +35610=>11883, +35919=>11884, +35952=>11885, +35954=>11886, +35953=>11887, +35951=>11888, +35989=>11889, +35988=>11890, +36089=>11891, +36207=>11892, +36430=>11893, +36429=>11894, +36435=>11895, +36432=>11896, +36428=>11897, +36423=>11898, +36675=>11899, +36672=>11900, +36997=>11901, +36990=>11902, +37176=>11903, +37274=>11904, +37282=>11905, +37275=>11906, +37273=>11907, +37279=>11908, +37281=>11909, +37277=>11910, +37280=>11911, +37793=>11912, +37763=>11913, +37807=>11914, +37732=>11915, +37718=>11916, +37703=>11917, +37756=>11918, +37720=>11919, +37724=>11920, +37750=>11921, +37705=>11922, +37712=>11923, +37713=>11924, +37728=>11925, +37741=>11926, +37775=>11927, +37708=>11928, +37738=>11929, +37753=>11930, +37719=>11931, +37717=>11932, +37714=>11933, +37711=>11934, +37745=>11935, +37751=>11936, +37755=>11937, +37729=>11938, +37726=>11939, +37731=>11940, +37735=>11941, +37710=>11942, +37721=>11943, +38343=>11944, +38336=>11945, +38345=>11946, +38339=>11947, +38341=>11948, +38327=>11949, +38574=>11950, +38576=>11951, +38572=>11952, +38688=>11953, +38687=>11954, +38680=>11955, +38685=>11956, +38681=>11957, +38810=>11958, +38817=>11959, +38812=>11960, +38814=>11961, +38813=>11962, +38869=>11963, +38868=>11964, +38897=>11965, +38977=>11966, +38980=>11967, +38986=>11968, +38985=>11969, +38981=>11970, +38979=>11971, +39205=>11972, +39211=>11973, +39212=>11974, +39210=>11975, +39219=>11976, +39218=>11977, +39215=>11978, +39213=>11979, +39217=>11980, +39216=>11981, +39320=>11982, +39331=>11983, +39329=>11984, +39426=>11985, +39418=>11986, +39412=>11987, +39415=>11988, +39417=>11989, +39416=>11990, +39414=>11991, +39419=>11992, +39421=>11993, +39422=>11994, +39420=>11995, +39427=>11996, +39614=>11997, +39678=>11998, +39677=>11999, +39681=>12000, +39676=>12001, +39752=>12002, +39834=>12003, +39848=>12004, +39838=>12005, +39835=>12006, +39846=>12007, +39841=>12008, +39845=>12009, +39844=>12010, +39814=>12011, +39842=>12012, +39840=>12013, +39855=>12014, +40243=>12015, +40257=>12016, +40295=>12017, +40246=>12018, +40238=>12019, +40239=>12020, +40241=>12021, +40248=>12022, +40240=>12023, +40261=>12024, +40258=>12025, +40259=>12026, +40254=>12027, +40247=>12028, +40256=>12029, +40253=>12030, +32757=>12031, +40237=>12032, +40586=>12033, +40585=>12034, +40589=>12035, +40624=>12036, +40648=>12037, +40666=>12038, +40699=>12039, +40703=>12040, +40740=>12041, +40739=>12042, +40738=>12043, +40788=>12044, +12245=>12045, +40864=>12045, +20785=>12046, +20781=>12047, +20782=>12048, +22168=>12049, +22172=>12050, +22167=>12051, +22170=>12052, +22173=>12053, +22169=>12054, +22896=>12055, +23356=>12056, +23657=>12057, +23658=>12058, +24000=>12059, +24173=>12060, +24174=>12061, +25048=>12062, +25055=>12063, +25069=>12064, +25070=>12065, +25073=>12066, +25066=>12067, +25072=>12068, +25067=>12069, +25046=>12070, +25065=>12071, +25855=>12072, +25860=>12073, +25853=>12074, +25848=>12075, +25857=>12076, +25859=>12077, +25852=>12078, +26004=>12079, +26075=>12080, +26330=>12081, +26331=>12082, +26328=>12083, +27333=>12084, +27321=>12085, +27325=>12086, +27361=>12087, +27334=>12088, +27322=>12089, +27318=>12090, +27319=>12091, +27335=>12092, +27316=>12093, +27309=>12094, +27486=>12095, +27593=>12096, +27659=>12097, +28679=>12098, +28684=>12099, +28685=>12100, +28673=>12101, +28677=>12102, +28692=>12103, +28686=>12104, +28671=>12105, +28672=>12106, +28667=>12107, +28710=>12108, +28668=>12109, +28663=>12110, +28682=>12111, +29185=>12112, +60224=>12112, +29183=>12113, +29177=>12114, +29187=>12115, +29181=>12116, +29558=>12117, +29880=>12118, +29888=>12119, +29877=>12120, +29889=>12121, +29886=>12122, +29878=>12123, +29883=>12124, +29890=>12125, +29972=>12126, +29971=>12127, +30300=>12128, +30308=>12129, +30297=>12130, +30288=>12131, +30291=>12132, +30295=>12133, +30298=>12134, +30374=>12135, +30397=>12136, +30444=>12137, +30658=>12138, +30650=>12139, +30988=>12140, +30995=>12141, +30996=>12142, +30985=>12143, +30992=>12144, +30994=>12145, +30993=>12146, +31149=>12147, +31148=>12148, +31327=>12149, +31772=>12150, +31785=>12151, +31769=>12152, +31776=>12153, +31775=>12154, +31789=>12155, +31773=>12156, +31782=>12157, +31784=>12158, +31778=>12159, +31781=>12160, +31792=>12161, +32348=>12162, +32336=>12163, +32342=>12164, +32355=>12165, +32344=>12166, +32354=>12167, +32351=>12168, +32337=>12169, +32352=>12170, +32343=>12171, +32339=>12172, +32693=>12173, +32691=>12174, +32759=>12175, +32760=>12176, +32885=>12177, +33233=>12178, +33234=>12179, +33232=>12180, +33375=>12181, +33374=>12182, +34228=>12183, +34246=>12184, +34240=>12185, +34243=>12186, +34242=>12187, +34227=>12188, +34229=>12189, +34237=>12190, +34247=>12191, +34244=>12192, +34239=>12193, +34251=>12194, +34254=>12195, +34248=>12196, +34245=>12197, +34225=>12198, +34230=>12199, +34258=>12200, +34340=>12201, +34232=>12202, +34231=>12203, +34238=>12204, +34409=>12205, +34791=>12206, +34790=>12207, +34786=>12208, +34779=>12209, +34795=>12210, +34794=>12211, +34789=>12212, +34783=>12213, +34803=>12214, +34788=>12215, +34772=>12216, +34780=>12217, +34771=>12218, +34797=>12219, +34776=>12220, +34787=>12221, +34775=>12222, +34777=>12223, +34817=>12224, +34804=>12225, +34792=>12226, +34781=>12227, +35155=>12228, +35147=>12229, +35151=>12230, +35148=>12231, +35142=>12232, +35152=>12233, +35153=>12234, +35145=>12235, +35626=>12236, +35623=>12237, +35619=>12238, +35635=>12239, +35632=>12240, +35637=>12241, +35655=>12242, +35631=>12243, +35644=>12244, +35646=>12245, +35633=>12246, +35621=>12247, +35639=>12248, +35622=>12249, +35638=>12250, +35630=>12251, +35620=>12252, +35643=>12253, +35645=>12254, +35642=>12255, +35906=>12256, +35957=>12257, +35993=>12258, +35992=>12259, +35991=>12260, +36094=>12261, +36100=>12262, +36098=>12263, +36096=>12264, +36444=>12265, +36450=>12266, +36448=>12267, +36439=>12268, +36438=>12269, +36446=>12270, +36453=>12271, +36455=>12272, +36443=>12273, +36442=>12274, +36449=>12275, +36445=>12276, +36457=>12277, +36436=>12278, +36678=>12279, +36679=>12280, +36680=>12281, +36683=>12282, +37160=>12283, +37178=>12284, +37179=>12285, +37182=>12286, +37288=>12287, +37285=>12288, +37287=>12289, +37295=>12290, +37290=>12291, +37813=>12292, +37772=>12293, +37778=>12294, +37815=>12295, +37787=>12296, +37789=>12297, +37769=>12298, +37799=>12299, +37774=>12300, +37802=>12301, +37790=>12302, +37798=>12303, +37781=>12304, +37768=>12305, +37785=>12306, +37791=>12307, +37760=>12308, +37773=>12309, +37809=>12310, +37777=>12311, +37810=>12312, +37796=>12313, +37800=>12314, +37812=>12315, +37795=>12316, +38354=>12317, +38355=>12318, +38353=>12319, +38579=>12320, +38615=>12321, +38618=>12322, +24002=>12323, +38623=>12324, +38616=>12325, +38621=>12326, +38691=>12327, +38690=>12328, +38693=>12329, +38828=>12330, +38830=>12331, +38824=>12332, +38827=>12333, +38820=>12334, +38826=>12335, +38818=>12336, +38821=>12337, +38871=>12338, +38873=>12339, +38870=>12340, +38872=>12341, +38906=>12342, +38992=>12343, +38993=>12344, +38994=>12345, +39096=>12346, +39233=>12347, +39228=>12348, +39226=>12349, +39439=>12350, +39435=>12351, +39433=>12352, +39437=>12353, +39428=>12354, +39441=>12355, +39434=>12356, +39429=>12357, +39431=>12358, +39430=>12359, +39616=>12360, +39644=>12361, +39688=>12362, +39684=>12363, +39685=>12364, +39721=>12365, +39733=>12366, +39754=>12367, +39756=>12368, +39755=>12369, +39879=>12370, +39878=>12371, +39875=>12372, +39871=>12373, +39873=>12374, +39861=>12375, +39864=>12376, +39891=>12377, +39862=>12378, +39876=>12379, +39865=>12380, +39869=>12381, +40284=>12382, +40275=>12383, +40271=>12384, +40266=>12385, +40283=>12386, +40267=>12387, +40281=>12388, +40278=>12389, +40268=>12390, +40279=>12391, +40274=>12392, +40276=>12393, +40287=>12394, +40280=>12395, +40282=>12396, +40590=>12397, +40588=>12398, +40671=>12399, +40705=>12400, +40704=>12401, +40726=>12402, +58693=>12402, +40741=>12403, +40747=>12404, +40746=>12405, +40745=>12406, +40744=>12407, +40780=>12408, +40789=>12409, +20788=>12410, +20789=>12411, +21142=>12412, +21239=>12413, +21428=>12414, +22187=>12415, +22189=>12416, +22182=>12417, +22183=>12418, +22186=>12419, +22188=>12420, +22746=>12421, +22749=>12422, +22747=>12423, +22802=>12424, +23357=>12425, +23358=>12426, +23359=>12427, +24003=>12428, +24176=>12429, +24511=>12430, +25083=>12431, +25863=>12432, +25872=>12433, +25869=>12434, +25865=>12435, +25868=>12436, +25870=>12437, +25988=>12438, +26078=>12439, +26077=>12440, +26334=>12441, +27367=>12442, +27360=>12443, +27340=>12444, +27345=>12445, +27353=>12446, +27339=>12447, +27359=>12448, +27356=>12449, +27344=>12450, +27371=>12451, +27343=>12452, +27341=>12453, +27358=>12454, +27488=>12455, +27568=>12456, +27660=>12457, +28697=>12458, +28711=>12459, +28704=>12460, +28694=>12461, +28715=>12462, +28705=>12463, +28706=>12464, +28707=>12465, +28713=>12466, +28695=>12467, +28708=>12468, +28700=>12469, +29196=>12470, +29194=>12471, +29191=>12472, +29186=>12473, +29189=>12474, +29349=>12475, +29350=>12476, +29348=>12477, +29347=>12478, +29345=>12479, +29899=>12480, +29893=>12481, +29879=>12482, +29891=>12483, +29974=>12484, +30304=>12485, +30665=>12486, +30666=>12487, +30660=>12488, +30705=>12489, +31005=>12490, +31003=>12491, +31009=>12492, +31004=>12493, +30999=>12494, +31006=>12495, +31152=>12496, +31335=>12497, +31336=>12498, +31795=>12499, +31804=>12500, +31801=>12501, +31788=>12502, +31803=>12503, +31980=>12504, +31978=>12505, +32374=>12506, +32373=>12507, +32376=>12508, +32368=>12509, +32375=>12510, +32367=>12511, +32378=>12512, +32370=>12513, +32372=>12514, +32360=>12515, +32587=>12516, +32586=>12517, +32643=>12518, +32646=>12519, +32695=>12520, +32765=>12521, +32766=>12522, +32888=>12523, +33239=>12524, +33237=>12525, +33291=>12526, +33380=>12527, +33377=>12528, +33379=>12529, +34283=>12530, +34289=>12531, +34285=>12532, +34265=>12533, +34273=>12534, +34280=>12535, +34266=>12536, +34263=>12537, +34284=>12538, +34290=>12539, +34296=>12540, +34264=>12541, +34271=>12542, +34275=>12543, +34268=>12544, +34257=>12545, +34288=>12546, +34278=>12547, +34287=>12548, +34270=>12549, +34274=>12550, +34816=>12551, +34810=>12552, +34819=>12553, +34806=>12554, +34807=>12555, +34825=>12556, +34828=>12557, +34827=>12558, +34822=>12559, +34812=>12560, +34824=>12561, +34815=>12562, +34826=>12563, +34818=>12564, +35170=>12565, +35162=>12566, +35163=>12567, +35159=>12568, +35169=>12569, +35164=>12570, +35160=>12571, +35165=>12572, +35161=>12573, +35208=>12574, +35255=>12575, +35254=>12576, +35318=>12577, +35664=>12578, +35656=>12579, +35658=>12580, +35648=>12581, +35667=>12582, +35670=>12583, +35668=>12584, +35659=>12585, +35669=>12586, +35665=>12587, +35650=>12588, +35666=>12589, +35671=>12590, +35907=>12591, +35959=>12592, +35958=>12593, +35994=>12594, +36102=>12595, +36103=>12596, +36105=>12597, +36268=>12598, +36266=>12599, +36269=>12600, +36267=>12601, +36461=>12602, +36472=>12603, +36467=>12604, +36458=>12605, +36463=>12606, +36475=>12607, +36546=>12608, +36690=>12609, +36689=>12610, +36687=>12611, +36688=>12612, +36691=>12613, +36788=>12614, +37184=>12615, +37183=>12616, +37296=>12617, +37293=>12618, +37854=>12619, +37831=>12620, +37839=>12621, +37826=>12622, +37850=>12623, +37840=>12624, +37881=>12625, +37868=>12626, +37836=>12627, +37849=>12628, +37801=>12629, +37862=>12630, +37834=>12631, +37844=>12632, +37870=>12633, +37859=>12634, +37845=>12635, +37828=>12636, +37838=>12637, +37824=>12638, +37842=>12639, +37797=>12640, +37863=>12641, +38269=>12642, +38362=>12643, +38363=>12644, +38625=>12645, +38697=>12646, +38699=>12647, +38700=>12648, +38696=>12649, +38694=>12650, +38835=>12651, +38839=>12652, +38838=>12653, +38877=>12654, +38878=>12655, +38879=>12656, +39004=>12657, +39001=>12658, +39005=>12659, +38999=>12660, +39103=>12661, +39101=>12662, +39099=>12663, +39102=>12664, +39240=>12665, +39239=>12666, +39235=>12667, +39334=>12668, +39335=>12669, +39450=>12670, +39445=>12671, +39461=>12672, +39453=>12673, +39460=>12674, +39451=>12675, +39458=>12676, +39456=>12677, +39463=>12678, +39459=>12679, +39454=>12680, +39452=>12681, +39444=>12682, +39618=>12683, +39691=>12684, +39690=>12685, +39694=>12686, +39692=>12687, +39735=>12688, +39914=>12689, +39915=>12690, +39904=>12691, +39902=>12692, +39908=>12693, +39910=>12694, +39906=>12695, +39920=>12696, +39892=>12697, +39895=>12698, +39916=>12699, +39900=>12700, +39897=>12701, +39909=>12702, +39893=>12703, +39905=>12704, +39898=>12705, +40311=>12706, +40321=>12707, +40330=>12708, +40324=>12709, +40328=>12710, +40305=>12711, +40320=>12712, +40312=>12713, +40326=>12714, +40331=>12715, +40332=>12716, +40317=>12717, +40299=>12718, +40308=>12719, +40309=>12720, +40304=>12721, +40297=>12722, +40325=>12723, +40307=>12724, +40315=>12725, +40322=>12726, +40303=>12727, +40313=>12728, +40319=>12729, +40327=>12730, +40296=>12731, +40596=>12732, +40593=>12733, +40640=>12734, +40700=>12735, +40749=>12736, +40768=>12737, +40769=>12738, +40781=>12739, +40790=>12740, +40791=>12741, +40792=>12742, +21303=>12743, +22194=>12744, +22197=>12745, +22195=>12746, +22755=>12747, +23365=>12748, +24006=>12749, +24007=>12750, +24302=>12751, +24303=>12752, +24512=>12753, +24513=>12754, +25081=>12755, +25879=>12756, +25878=>12757, +25877=>12758, +25875=>12759, +26079=>12760, +26344=>12761, +26339=>12762, +26340=>12763, +27379=>12764, +27376=>12765, +27370=>12766, +27368=>12767, +27385=>12768, +27377=>12769, +27374=>12770, +27375=>12771, +28732=>12772, +28725=>12773, +28719=>12774, +28727=>12775, +28724=>12776, +28721=>12777, +28738=>12778, +28728=>12779, +28735=>12780, +28730=>12781, +28729=>12782, +28714=>12783, +28736=>12784, +28731=>12785, +28723=>12786, +28737=>12787, +29203=>12788, +29204=>12789, +29352=>12790, +29565=>12791, +29564=>12792, +29882=>12793, +30379=>12794, +30378=>12795, +30398=>12796, +30445=>12797, +30668=>12798, +30670=>12799, +30671=>12800, +30669=>12801, +30706=>12802, +31013=>12803, +31011=>12804, +31015=>12805, +31016=>12806, +31012=>12807, +31017=>12808, +31154=>12809, +31342=>12810, +31340=>12811, +31341=>12812, +31479=>12813, +31817=>12814, +31816=>12815, +31818=>12816, +31815=>12817, +31813=>12818, +31982=>12819, +32379=>12820, +32382=>12821, +32385=>12822, +32384=>12823, +32698=>12824, +32767=>12825, +32889=>12826, +33243=>12827, +33241=>12828, +33384=>12829, +33385=>12830, +34338=>12831, +34303=>12832, +34305=>12833, +34302=>12834, +34331=>12835, +34304=>12836, +34294=>12837, +34308=>12838, +34313=>12839, +34309=>12840, +34316=>12841, +34301=>12842, +34841=>12843, +34832=>12844, +34833=>12845, +34839=>12846, +34835=>12847, +34838=>12848, +35171=>12849, +35174=>12850, +35257=>12851, +35319=>12852, +35680=>12853, +35690=>12854, +35677=>12855, +35688=>12856, +35683=>12857, +35685=>12858, +35687=>12859, +35693=>12860, +36270=>12861, +36486=>12862, +36488=>12863, +36484=>12864, +36697=>12865, +36694=>12866, +36695=>12867, +36693=>12868, +36696=>12869, +36698=>12870, +37005=>12871, +37187=>12872, +37185=>12873, +37303=>12874, +37301=>12875, +37298=>12876, +37299=>12877, +37899=>12878, +37907=>12879, +37883=>12880, +37920=>12881, +37903=>12882, +37908=>12883, +37886=>12884, +37909=>12885, +37904=>12886, +37928=>12887, +37913=>12888, +37901=>12889, +37877=>12890, +37888=>12891, +37879=>12892, +37895=>12893, +37902=>12894, +37910=>12895, +37906=>12896, +37882=>12897, +37897=>12898, +37880=>12899, +37948=>12900, +37898=>12901, +37887=>12902, +37884=>12903, +37900=>12904, +37878=>12905, +37905=>12906, +37894=>12907, +38366=>12908, +38368=>12909, +38367=>12910, +38702=>12911, +38703=>12912, +38841=>12913, +38843=>12914, +38909=>12915, +38910=>12916, +39008=>12917, +39010=>12918, +39011=>12919, +39007=>12920, +39105=>12921, +39106=>12922, +39248=>12923, +39246=>12924, +39257=>12925, +39244=>12926, +39243=>12927, +39251=>12928, +39474=>12929, +39476=>12930, +39473=>12931, +39468=>12932, +39466=>12933, +39478=>12934, +39465=>12935, +39470=>12936, +39480=>12937, +39469=>12938, +39623=>12939, +39626=>12940, +39622=>12941, +39696=>12942, +39698=>12943, +39697=>12944, +39947=>12945, +39944=>12946, +39927=>12947, +39941=>12948, +39954=>12949, +39928=>12950, +40000=>12951, +39943=>12952, +39950=>12953, +39942=>12954, +39959=>12955, +39956=>12956, +39945=>12957, +40351=>12958, +40345=>12959, +40356=>12960, +40349=>12961, +40338=>12962, +40344=>12963, +40336=>12964, +40347=>12965, +40352=>12966, +40340=>12967, +40348=>12968, +40362=>12969, +40343=>12970, +40353=>12971, +40346=>12972, +40354=>12973, +40360=>12974, +40350=>12975, +40355=>12976, +40383=>12977, +40361=>12978, +40342=>12979, +40358=>12980, +40359=>12981, +40601=>12982, +40603=>12983, +40602=>12984, +40677=>12985, +40676=>12986, +40679=>12987, +40678=>12988, +40752=>12989, +40750=>12990, +40795=>12991, +40800=>12992, +40798=>12993, +40797=>12994, +40793=>12995, +40849=>12996, +20794=>12997, +20793=>12998, +21144=>12999, +21143=>13000, +22211=>13001, +22205=>13002, +22206=>13003, +23368=>13004, +23367=>13005, +24011=>13006, +24015=>13007, +24305=>13008, +25085=>13009, +25883=>13010, +27394=>13011, +27388=>13012, +27395=>13013, +27384=>13014, +27392=>13015, +28739=>13016, +28740=>13017, +28746=>13018, +28744=>13019, +28745=>13020, +28741=>13021, +28742=>13022, +29213=>13023, +29210=>13024, +29209=>13025, +29566=>13026, +29975=>13027, +30314=>13028, +30672=>13029, +31021=>13030, +31025=>13031, +31023=>13032, +31828=>13033, +31827=>13034, +31986=>13035, +32394=>13036, +60229=>13037, +32391=>13037, +32392=>13038, +32395=>13039, +32390=>13040, +32397=>13041, +32589=>13042, +32699=>13043, +32816=>13044, +33245=>13045, +34328=>13046, +34346=>13047, +34342=>13048, +34335=>13049, +34339=>13050, +34332=>13051, +34329=>13052, +34343=>13053, +34350=>13054, +34337=>13055, +34336=>13056, +34345=>13057, +34334=>13058, +34341=>13059, +34857=>13060, +34845=>13061, +34843=>13062, +34848=>13063, +34852=>13064, +34844=>13065, +34859=>13066, +34890=>13067, +35181=>13068, +35177=>13069, +35182=>13070, +35179=>13071, +35322=>13072, +35705=>13073, +35704=>13074, +35653=>13075, +35706=>13076, +35707=>13077, +36112=>13078, +36116=>13079, +36271=>13080, +36494=>13081, +36492=>13082, +36702=>13083, +36699=>13084, +36701=>13085, +37190=>13086, +37188=>13087, +37189=>13088, +37305=>13089, +37951=>13090, +37947=>13091, +37942=>13092, +37929=>13093, +37949=>13094, +37936=>13095, +37945=>13096, +37930=>13097, +37943=>13098, +37932=>13099, +37952=>13100, +37937=>13101, +38373=>13102, +38372=>13103, +38371=>13104, +38709=>13105, +38714=>13106, +38847=>13107, +38881=>13108, +39012=>13109, +39113=>13110, +39110=>13111, +39104=>13112, +39256=>13113, +39254=>13114, +39481=>13115, +39485=>13116, +39494=>13117, +39492=>13118, +39490=>13119, +39489=>13120, +39482=>13121, +39487=>13122, +39629=>13123, +39701=>13124, +39703=>13125, +39704=>13126, +39702=>13127, +39738=>13128, +39762=>13129, +39979=>13130, +39965=>13131, +39964=>13132, +39980=>13133, +39971=>13134, +39976=>13135, +39977=>13136, +39972=>13137, +39969=>13138, +40375=>13139, +40374=>13140, +40380=>13141, +40385=>13142, +40391=>13143, +40394=>13144, +40399=>13145, +40382=>13146, +40389=>13147, +40387=>13148, +40379=>13149, +40373=>13150, +40398=>13151, +40377=>13152, +40378=>13153, +40364=>13154, +40392=>13155, +40369=>13156, +40365=>13157, +40396=>13158, +40371=>13159, +40397=>13160, +40370=>13161, +40570=>13162, +40604=>13163, +40683=>13164, +40686=>13165, +40685=>13166, +40731=>13167, +40728=>13168, +40730=>13169, +40753=>13170, +40782=>13171, +40805=>13172, +40804=>13173, +40850=>13174, +20153=>13175, +22214=>13176, +22213=>13177, +22219=>13178, +22897=>13179, +23371=>13180, +23372=>13181, +24021=>13182, +24017=>13183, +24306=>13184, +25889=>13185, +25888=>13186, +25894=>13187, +25890=>13188, +27403=>13189, +27400=>13190, +27401=>13191, +27661=>13192, +28757=>13193, +28758=>13194, +28759=>13195, +28754=>13196, +29214=>13197, +29215=>13198, +29353=>13199, +29567=>13200, +29912=>13201, +29909=>13202, +29913=>13203, +29911=>13204, +30317=>13205, +30381=>13206, +31029=>13207, +31156=>13208, +31344=>13209, +31345=>13210, +31831=>13211, +31836=>13212, +31833=>13213, +31835=>13214, +31834=>13215, +31988=>13216, +31985=>13217, +32401=>13218, +32591=>13219, +32647=>13220, +33246=>13221, +33387=>13222, +34356=>13223, +34357=>13224, +34355=>13225, +34348=>13226, +34354=>13227, +34358=>13228, +34860=>13229, +34856=>13230, +34854=>13231, +34858=>13232, +34853=>13233, +35185=>13234, +35263=>13235, +35262=>13236, +35323=>13237, +35710=>13238, +35716=>13239, +35714=>13240, +35718=>13241, +35717=>13242, +35711=>13243, +36117=>13244, +36501=>13245, +36500=>13246, +36506=>13247, +36498=>13248, +36496=>13249, +36502=>13250, +36503=>13251, +36704=>13252, +36706=>13253, +37191=>13254, +37964=>13255, +37968=>13256, +37962=>13257, +37963=>13258, +37967=>13259, +37959=>13260, +37957=>13261, +37960=>13262, +37961=>13263, +37958=>13264, +38719=>13265, +38883=>13266, +39018=>13267, +39017=>13268, +39115=>13269, +39252=>13270, +39259=>13271, +39502=>13272, +39507=>13273, +39508=>13274, +39500=>13275, +39503=>13276, +39496=>13277, +39498=>13278, +39497=>13279, +39506=>13280, +39504=>13281, +39632=>13282, +39705=>13283, +39723=>13284, +39739=>13285, +39766=>13286, +39765=>13287, +40006=>13288, +40008=>13289, +39999=>13290, +40004=>13291, +39993=>13292, +39987=>13293, +40001=>13294, +39996=>13295, +39991=>13296, +39988=>13297, +39986=>13298, +39997=>13299, +39990=>13300, +40411=>13301, +40402=>13302, +40414=>13303, +40410=>13304, +40395=>13305, +40400=>13306, +40412=>13307, +40401=>13308, +40415=>13309, +40425=>13310, +40409=>13311, +40408=>13312, +40406=>13313, +40437=>13314, +40405=>13315, +40413=>13316, +40630=>13317, +40688=>13318, +40757=>13319, +40755=>13320, +40754=>13321, +40770=>13322, +40811=>13323, +40853=>13324, +40866=>13325, +20797=>13326, +21145=>13327, +22760=>13328, +22759=>13329, +22898=>13330, +23373=>13331, +24024=>13332, +34863=>13333, +24399=>13334, +25089=>13335, +25091=>13336, +25092=>13337, +25897=>13338, +25893=>13339, +26006=>13340, +26347=>13341, +27409=>13342, +27410=>13343, +27407=>13344, +27594=>13345, +28763=>13346, +28762=>13347, +29218=>13348, +29570=>13349, +29569=>13350, +29571=>13351, +30320=>13352, +30676=>13353, +31847=>13354, +31846=>13355, +32405=>13356, +33388=>13357, +34362=>13358, +34368=>13359, +34361=>13360, +34364=>13361, +34353=>13362, +34363=>13363, +34366=>13364, +34864=>13365, +34866=>13366, +34862=>13367, +34867=>13368, +35190=>13369, +35188=>13370, +35187=>13371, +35326=>13372, +35724=>13373, +35726=>13374, +35723=>13375, +35720=>13376, +35909=>13377, +36121=>13378, +36504=>13379, +36708=>13380, +36707=>13381, +37308=>13382, +37986=>13383, +37973=>13384, +37981=>13385, +37975=>13386, +37982=>13387, +38852=>13388, +38853=>13389, +38912=>13390, +39510=>13391, +39513=>13392, +39710=>13393, +39711=>13394, +39712=>13395, +40018=>13396, +40024=>13397, +40016=>13398, +40010=>13399, +40013=>13400, +40011=>13401, +40021=>13402, +40025=>13403, +40012=>13404, +40014=>13405, +40443=>13406, +40439=>13407, +40431=>13408, +40419=>13409, +40427=>13410, +40440=>13411, +40420=>13412, +40438=>13413, +40417=>13414, +40430=>13415, +40422=>13416, +40434=>13417, +40432=>13418, +60370=>13418, +40418=>13419, +40428=>13420, +40436=>13421, +40435=>13422, +40424=>13423, +40429=>13424, +40642=>13425, +40656=>13426, +40690=>13427, +40691=>13428, +40710=>13429, +40732=>13430, +40760=>13431, +40759=>13432, +40758=>13433, +40771=>13434, +40783=>13435, +40817=>13436, +40816=>13437, +40814=>13438, +40815=>13439, +22227=>13440, +22221=>13441, +23374=>13442, +23661=>13443, +25901=>13444, +26349=>13445, +26350=>13446, +27411=>13447, +28767=>13448, +28769=>13449, +28765=>13450, +28768=>13451, +29219=>13452, +29915=>13453, +29925=>13454, +30677=>13455, +31032=>13456, +31159=>13457, +31158=>13458, +31850=>13459, +32407=>13460, +32649=>13461, +33389=>13462, +34371=>13463, +34872=>13464, +34871=>13465, +34869=>13466, +34891=>13467, +35732=>13468, +35733=>13469, +36510=>13470, +36511=>13471, +36512=>13472, +36509=>13473, +37310=>13474, +37309=>13475, +37314=>13476, +37995=>13477, +37992=>13478, +37993=>13479, +38629=>13480, +38726=>13481, +38723=>13482, +38727=>13483, +38855=>13484, +38885=>13485, +39518=>13486, +39637=>13487, +39769=>13488, +40035=>13489, +40039=>13490, +40038=>13491, +40034=>13492, +40030=>13493, +40032=>13494, +40450=>13495, +40446=>13496, +40455=>13497, +40451=>13498, +40454=>13499, +40453=>13500, +40448=>13501, +40449=>13502, +40457=>13503, +40447=>13504, +40445=>13505, +40452=>13506, +40608=>13507, +40734=>13508, +40774=>13509, +40820=>13510, +40821=>13511, +40822=>13512, +22228=>13513, +25902=>13514, +26040=>13515, +27416=>13516, +27417=>13517, +27415=>13518, +27418=>13519, +28770=>13520, +29222=>13521, +29354=>13522, +30680=>13523, +30681=>13524, +31033=>13525, +31849=>13526, +31851=>13527, +31990=>13528, +32410=>13529, +32408=>13530, +32411=>13531, +32409=>13532, +33248=>13533, +33249=>13534, +34374=>13535, +34375=>13536, +34376=>13537, +35193=>13538, +35194=>13539, +35196=>13540, +35195=>13541, +35327=>13542, +35736=>13543, +35737=>13544, +36517=>13545, +36516=>13546, +36515=>13547, +37998=>13548, +37997=>13549, +37999=>13550, +38001=>13551, +38003=>13552, +38729=>13553, +39026=>13554, +39263=>13555, +40040=>13556, +40046=>13557, +40045=>13558, +40459=>13559, +40461=>13560, +40464=>13561, +40463=>13562, +40466=>13563, +40465=>13564, +40609=>13565, +40693=>13566, +40713=>13567, +40775=>13568, +40824=>13569, +40827=>13570, +40826=>13571, +40825=>13572, +22302=>13573, +28774=>13574, +31855=>13575, +34876=>13576, +36274=>13577, +36518=>13578, +37315=>13579, +38004=>13580, +38008=>13581, +38006=>13582, +38005=>13583, +39520=>13584, +39726=>13585, +60830=>13585, +40052=>13586, +40051=>13587, +40049=>13588, +40053=>13589, +40468=>13590, +40467=>13591, +40694=>13592, +40714=>13593, +40868=>13594, +28776=>13595, +28773=>13596, +31991=>13597, +34410=>13598, +34878=>13599, +34877=>13600, +34879=>13601, +35742=>13602, +35996=>13603, +36521=>13604, +36553=>13605, +38731=>13606, +39027=>13607, +39028=>13608, +39116=>13609, +39265=>13610, +39339=>13611, +39524=>13612, +39526=>13613, +39527=>13614, +39716=>13615, +40469=>13616, +40471=>13617, +40776=>13618, +25095=>13619, +27422=>13620, +29223=>13621, +34380=>13622, +36520=>13623, +38018=>13624, +38016=>13625, +38017=>13626, +39529=>13627, +39528=>13628, +40473=>13629, +34379=>13630, +35743=>13631, +38019=>13632, +40057=>13633, +40631=>13634, +30325=>13635, +39531=>13636, +40058=>13637, +40477=>13638, +28777=>13639, +28778=>13640, +29225=>13641, +40612=>13642, +40830=>13643, +40777=>13644, +40856=>13645, +65049=>13646, +65075=>13743, +9588=>13744, +65076=>13745, +65103=>13746, +168=>13747, +776=>13747, +63208=>13747, +710=>13748, +65342=>13748, +63209=>13748, +12541=>13749, +63210=>13749, +12542=>13750, +63211=>13750, +12445=>13751, +63212=>13751, +12446=>13752, +63213=>13752, +12293=>13754, +63216=>13754, +12294=>13755, +63217=>13755, +12295=>13756, +63218=>13756, +12540=>13757, +63219=>13757, +65339=>13758, +63220=>13758, +65341=>13759, +63221=>13759, +10045=>13760, +63222=>13760, +12353=>13761, +63223=>13761, +12354=>13762, +63224=>13762, +12355=>13763, +63225=>13763, +12356=>13764, +63226=>13764, +12357=>13765, +63227=>13765, +12358=>13766, +63228=>13766, +12359=>13767, +63229=>13767, +12360=>13768, +63230=>13768, +12361=>13769, +63231=>13769, +12362=>13770, +63232=>13770, +12363=>13771, +63233=>13771, +12364=>13772, +63234=>13772, +12365=>13773, +63235=>13773, +12366=>13774, +63236=>13774, +12367=>13775, +63237=>13775, +12368=>13776, +63238=>13776, +12369=>13777, +63239=>13777, +12370=>13778, +63240=>13778, +12371=>13779, +63241=>13779, +12372=>13780, +63242=>13780, +12373=>13781, +63243=>13781, +12374=>13782, +63244=>13782, +12375=>13783, +63245=>13783, +12376=>13784, +63246=>13784, +12377=>13785, +63247=>13785, +12378=>13786, +63248=>13786, +12379=>13787, +63249=>13787, +12380=>13788, +63250=>13788, +12381=>13789, +63251=>13789, +12382=>13790, +63252=>13790, +12383=>13791, +63253=>13791, +12384=>13792, +63254=>13792, +12385=>13793, +63255=>13793, +12386=>13794, +63256=>13794, +12387=>13795, +63257=>13795, +12388=>13796, +63258=>13796, +12389=>13797, +63259=>13797, +12390=>13798, +63260=>13798, +12391=>13799, +63261=>13799, +12392=>13800, +63262=>13800, +12393=>13801, +63263=>13801, +12394=>13802, +63264=>13802, +12395=>13803, +63265=>13803, +12396=>13804, +63266=>13804, +12397=>13805, +63267=>13805, +12398=>13806, +63268=>13806, +12399=>13807, +63269=>13807, +12400=>13808, +63270=>13808, +12401=>13809, +63271=>13809, +12402=>13810, +63272=>13810, +12403=>13811, +63273=>13811, +12404=>13812, +63274=>13812, +12405=>13813, +63275=>13813, +12406=>13814, +63276=>13814, +12407=>13815, +63277=>13815, +12408=>13816, +63278=>13816, +12409=>13817, +63279=>13817, +12410=>13818, +63280=>13818, +12411=>13819, +63281=>13819, +12412=>13820, +63282=>13820, +12413=>13821, +63283=>13821, +12414=>13822, +63284=>13822, +12415=>13823, +63285=>13823, +12416=>13824, +63286=>13824, +12417=>13825, +63287=>13825, +12418=>13826, +63288=>13826, +12419=>13827, +63289=>13827, +12420=>13828, +63290=>13828, +12421=>13829, +63291=>13829, +12422=>13830, +63292=>13830, +12423=>13831, +63293=>13831, +12424=>13832, +63294=>13832, +12425=>13833, +63295=>13833, +12426=>13834, +63296=>13834, +12427=>13835, +63297=>13835, +12428=>13836, +63298=>13836, +12429=>13837, +63299=>13837, +12430=>13838, +63300=>13838, +12431=>13839, +63301=>13839, +12432=>13840, +63302=>13840, +12433=>13841, +63303=>13841, +12434=>13842, +63304=>13842, +12435=>13843, +63305=>13843, +12449=>13844, +63306=>13844, +12450=>13845, +63307=>13845, +12451=>13846, +63308=>13846, +12452=>13847, +63309=>13847, +12453=>13848, +63310=>13848, +12454=>13849, +63311=>13849, +12455=>13850, +63312=>13850, +12456=>13851, +63313=>13851, +12457=>13852, +63314=>13852, +12458=>13853, +63315=>13853, +12459=>13854, +63316=>13854, +12460=>13855, +63317=>13855, +12461=>13856, +63318=>13856, +12462=>13857, +63319=>13857, +12463=>13858, +63320=>13858, +12464=>13859, +63321=>13859, +12465=>13860, +63322=>13860, +12466=>13861, +63323=>13861, +12467=>13862, +63324=>13862, +12468=>13863, +63325=>13863, +12469=>13864, +63326=>13864, +12470=>13865, +63327=>13865, +12471=>13866, +63328=>13866, +12472=>13867, +63329=>13867, +12473=>13868, +63330=>13868, +12474=>13869, +63331=>13869, +12475=>13870, +63332=>13870, +12476=>13871, +63333=>13871, +12477=>13872, +63334=>13872, +12478=>13873, +63335=>13873, +12479=>13874, +63336=>13874, +12480=>13875, +63337=>13875, +12481=>13876, +63338=>13876, +12482=>13877, +63339=>13877, +12483=>13878, +63340=>13878, +12484=>13879, +63341=>13879, +12485=>13880, +63342=>13880, +12486=>13881, +63343=>13881, +12487=>13882, +63344=>13882, +12488=>13883, +63345=>13883, +12489=>13884, +63346=>13884, +12490=>13885, +63347=>13885, +12491=>13886, +63348=>13886, +12492=>13887, +63349=>13887, +12493=>13888, +63350=>13888, +12494=>13889, +63351=>13889, +12495=>13890, +63352=>13890, +12496=>13891, +63353=>13891, +12497=>13892, +63354=>13892, +12498=>13893, +63355=>13893, +12499=>13894, +63356=>13894, +12500=>13895, +63357=>13895, +12501=>13896, +63358=>13896, +12502=>13897, +63359=>13897, +12503=>13898, +63360=>13898, +12504=>13899, +63361=>13899, +12505=>13900, +63362=>13900, +12506=>13901, +63363=>13901, +12507=>13902, +63364=>13902, +12508=>13903, +63365=>13903, +12509=>13904, +63366=>13904, +12510=>13905, +63367=>13905, +12511=>13906, +63368=>13906, +12512=>13907, +63369=>13907, +12513=>13908, +63370=>13908, +12514=>13909, +63371=>13909, +12515=>13910, +63372=>13910, +12516=>13911, +63373=>13911, +12517=>13912, +63374=>13912, +12518=>13913, +63375=>13913, +12519=>13914, +63376=>13914, +12520=>13915, +63377=>13915, +12521=>13916, +63378=>13916, +12522=>13917, +63379=>13917, +12523=>13918, +63380=>13918, +12524=>13919, +63381=>13919, +12525=>13920, +63382=>13920, +12526=>13921, +63383=>13921, +12527=>13922, +63384=>13922, +12528=>13923, +63385=>13923, +12529=>13924, +63386=>13924, +12530=>13925, +63387=>13925, +12531=>13926, +63388=>13926, +12532=>13927, +63389=>13927, +12533=>13928, +63390=>13928, +12534=>13929, +63391=>13929, +1040=>13930, +63392=>13930, +1041=>13931, +63393=>13931, +1042=>13932, +63394=>13932, +1043=>13933, +63395=>13933, +1044=>13934, +63396=>13934, +1045=>13935, +63397=>13935, +1025=>13936, +63398=>13936, +1046=>13937, +63399=>13937, +1047=>13938, +63400=>13938, +1048=>13939, +63401=>13939, +1049=>13940, +63402=>13940, +1050=>13941, +63403=>13941, +1051=>13942, +63404=>13942, +1052=>13943, +63405=>13943, +1053=>13944, +63406=>13944, +1054=>13945, +63407=>13945, +1055=>13946, +63408=>13946, +1056=>13947, +63409=>13947, +1057=>13948, +63410=>13948, +1058=>13949, +63411=>13949, +1059=>13950, +63412=>13950, +1060=>13951, +63413=>13951, +1061=>13952, +63414=>13952, +1062=>13953, +63415=>13953, +1063=>13954, +63416=>13954, +1064=>13955, +63417=>13955, +1065=>13956, +63418=>13956, +1066=>13957, +63419=>13957, +1067=>13958, +63420=>13958, +1068=>13959, +63421=>13959, +1069=>13960, +63422=>13960, +1070=>13961, +63423=>13961, +1071=>13962, +63424=>13962, +1072=>13963, +63425=>13963, +1073=>13964, +63426=>13964, +1074=>13965, +63427=>13965, +1075=>13966, +63428=>13966, +1076=>13967, +63429=>13967, +1077=>13968, +63430=>13968, +1105=>13969, +63431=>13969, +1078=>13970, +63432=>13970, +1079=>13971, +63433=>13971, +1080=>13972, +63434=>13972, +1081=>13973, +63435=>13973, +1082=>13974, +63436=>13974, +1083=>13975, +63437=>13975, +1084=>13976, +63438=>13976, +1085=>13977, +63439=>13977, +1086=>13978, +63440=>13978, +1087=>13979, +63441=>13979, +1088=>13980, +63442=>13980, +1089=>13981, +63443=>13981, +1090=>13982, +63444=>13982, +1091=>13983, +63445=>13983, +1092=>13984, +63446=>13984, +1093=>13985, +63447=>13985, +1094=>13986, +63448=>13986, +1095=>13987, +63449=>13987, +1096=>13988, +63450=>13988, +1097=>13989, +63451=>13989, +1098=>13990, +63452=>13990, +1099=>13991, +63453=>13991, +1100=>13992, +63454=>13992, +1101=>13993, +63455=>13993, +1102=>13994, +63456=>13994, +1103=>13995, +63457=>13995, +8679=>13996, +63458=>13996, +8632=>13997, +63459=>13997, +8633=>13998, +63460=>13998, +12751=>13999, +20033=>13999, +63461=>13999, +131276=>14000, +63462=>14000, +20058=>14001, +63463=>14001, +131210=>14002, +63464=>14002, +20994=>14003, +63465=>14003, +17553=>14004, +63466=>14004, +40880=>14005, +63467=>14005, +20872=>14006, +63468=>14006, +13853=>14007, +40881=>14007, +63469=>14007, +161287=>14008, +63470=>14008, +172=>14049, +65506=>14049, +63511=>14049, +65508=>14050, +63512=>14050, +65287=>14051, +63513=>14051, +65282=>14052, +63514=>14052, +12849=>14053, +63515=>14053, +8470=>14054, +63516=>14054, +8481=>14055, +63517=>14055, +30849=>14056, +37561=>14057, +58501=>14057, +35023=>14058, +22715=>14059, +24658=>14060, +31911=>14061, +23290=>14062, +9556=>14063, +9574=>14064, +9559=>14065, +9568=>14066, +9580=>14067, +9571=>14068, +9562=>14069, +9577=>14070, +9565=>14071, +9554=>14072, +9572=>14073, +9557=>14074, +9560=>14078, +9575=>14079, +9563=>14080, +9555=>14081, +9573=>14082, +9558=>14083, +9567=>14084, +9579=>14085, +9570=>14086, +9561=>14087, +9576=>14088, +9564=>14089, +9553=>14090, +9619=>14096, +65517=>14096, +65040=>14099, +65041=>14100, +65042=>14101, +65044=>14103, +65043=>14104, +65046=>14105, +65045=>14106, +147159=>14123, +58129=>14123, +22462=>14124, +58130=>14124, +159443=>14125, +58131=>14125, +28990=>14126, +58132=>14126, +153568=>14127, +58133=>14127, +27042=>14128, +58135=>14128, +166889=>14129, +58136=>14129, +23412=>14130, +58137=>14130, +31305=>14131, +58138=>14131, +153825=>14132, +58139=>14132, +169177=>14133, +58140=>14133, +31333=>14134, +58141=>14134, +31357=>14135, +58142=>14135, +154028=>14136, +58143=>14136, +31419=>14137, +58144=>14137, +31408=>14138, +58145=>14138, +31426=>14139, +58146=>14139, +31427=>14140, +58147=>14140, +29137=>14141, +58148=>14141, +156813=>14142, +58149=>14142, +16842=>14143, +58150=>14143, +31450=>14144, +58151=>14144, +31453=>14145, +58152=>14145, +31466=>14146, +58153=>14146, +16879=>14147, +58154=>14147, +21682=>14148, +58155=>14148, +154625=>14149, +58156=>14149, +31499=>14150, +58157=>14150, +31573=>14151, +58158=>14151, +31529=>14152, +58159=>14152, +152334=>14153, +58160=>14153, +154878=>14154, +58161=>14154, +31650=>14155, +58162=>14155, +31599=>14156, +58163=>14156, +33692=>14157, +58164=>14157, +154548=>14158, +58165=>14158, +158847=>14159, +58166=>14159, +31696=>14160, +58167=>14160, +33825=>14161, +58168=>14161, +31634=>14162, +58169=>14162, +58171=>14164, +154912=>14164, +33938=>14166, +58174=>14166, +31738=>14167, +58175=>14167, +31797=>14169, +58177=>14169, +154817=>14170, +58178=>14170, +31812=>14171, +58179=>14171, +31875=>14172, +58180=>14172, +149634=>14173, +58181=>14173, +31910=>14174, +58182=>14174, +148856=>14175, +58184=>14175, +31945=>14176, +58185=>14176, +31943=>14177, +58186=>14177, +31974=>14178, +58187=>14178, +31987=>14180, +58189=>14180, +31989=>14181, +58190=>14181, +32359=>14182, +58192=>14182, +17693=>14183, +58193=>14183, +159300=>14184, +58194=>14184, +32093=>14185, +58195=>14185, +159446=>14186, +58196=>14186, +32137=>14187, +58198=>14187, +32171=>14188, +58199=>14188, +28981=>14189, +58200=>14189, +32179=>14190, +58201=>14190, +32214=>14191, +147543=>14192, +58203=>14192, +155689=>14193, +58204=>14193, +32228=>14194, +58205=>14194, +15635=>14195, +58206=>14195, +32245=>14196, +58207=>14196, +137209=>14197, +58208=>14197, +32229=>14198, +58209=>14198, +164717=>14199, +58210=>14199, +155937=>14201, +58212=>14201, +155994=>14202, +58213=>14202, +32366=>14203, +58214=>14203, +17195=>14205, +58216=>14205, +37996=>14206, +58217=>14206, +32295=>14207, +58218=>14207, +32576=>14208, +58219=>14208, +32577=>14209, +58220=>14209, +32583=>14210, +58221=>14210, +31030=>14211, +58222=>14211, +156368=>14212, +58223=>14212, +39393=>14213, +58224=>14213, +32663=>14214, +58225=>14214, +156497=>14215, +58226=>14215, +32675=>14216, +58227=>14216, +136801=>14217, +58228=>14217, +131176=>14218, +58229=>14218, +17756=>14219, +58230=>14219, +145254=>14220, +58231=>14220, +164666=>14221, +58233=>14221, +32762=>14222, +58234=>14222, +156809=>14223, +58235=>14223, +64091=>14224, +32776=>14225, +58237=>14225, +32797=>14226, +58238=>14226, +32815=>14228, +58240=>14228, +172167=>14229, +58241=>14229, +158915=>14230, +58242=>14230, +32827=>14231, +58243=>14231, +32828=>14232, +58244=>14232, +32865=>14233, +58245=>14233, +141076=>14234, +58246=>14234, +18825=>14235, +58247=>14235, +157222=>14236, +58248=>14236, +146915=>14237, +58249=>14237, +157416=>14238, +58250=>14238, +26405=>14239, +58251=>14239, +32935=>14240, +58252=>14240, +166472=>14241, +58253=>14241, +33031=>14242, +58254=>14242, +33050=>14243, +58255=>14243, +22704=>14244, +58256=>14244, +141046=>14245, +58257=>14245, +27775=>14246, +58258=>14246, +156824=>14247, +58259=>14247, +25831=>14248, +58261=>14248, +136330=>14249, +58262=>14249, +33304=>14250, +58263=>14250, +137310=>14251, +58264=>14251, +27219=>14252, +58265=>14252, +150117=>14253, +58266=>14253, +150165=>14254, +58267=>14254, +17530=>14255, +58268=>14255, +33321=>14256, +58269=>14256, +158290=>14257, +58271=>14257, +146814=>14258, +58272=>14258, +20473=>14259, +58273=>14259, +136445=>14260, +58274=>14260, +34018=>14261, +58275=>14261, +33634=>14262, +58276=>14262, +194959=>14263, +149927=>14264, +58278=>14264, +144688=>14265, +58279=>14265, +137075=>14266, +58280=>14266, +146936=>14267, +58281=>14267, +33450=>14268, +58282=>14268, +26907=>14269, +58283=>14269, +194964=>14270, +58284=>14270, +16859=>14271, +58285=>14271, +34123=>14272, +58286=>14272, +33488=>14273, +58287=>14273, +33562=>14274, +58288=>14274, +134678=>14275, +58289=>14275, +137140=>14276, +58290=>14276, +14017=>14277, +58291=>14277, +143741=>14278, +58292=>14278, +144730=>14279, +58293=>14279, +33403=>14280, +58294=>14280, +33506=>14281, +58295=>14281, +33560=>14282, +58296=>14282, +147083=>14283, +58297=>14283, +159139=>14284, +58298=>14284, +158469=>14285, +58299=>14285, +158615=>14286, +58300=>14286, +144846=>14287, +58301=>14287, +15807=>14288, +58302=>14288, +33565=>14289, +58303=>14289, +21996=>14290, +58304=>14290, +33669=>14291, +58305=>14291, +17675=>14292, +58306=>14292, +159141=>14293, +58307=>14293, +33708=>14294, +58308=>14294, +33747=>14296, +58310=>14296, +159444=>14297, +58312=>14297, +27223=>14298, +58313=>14298, +34138=>14299, +58314=>14299, +13462=>14300, +58315=>14300, +159298=>14301, +58316=>14301, +33880=>14302, +58318=>14302, +154596=>14303, +58319=>14303, +33905=>14304, +58320=>14304, +15827=>14305, +58321=>14305, +17636=>14306, +58322=>14306, +27303=>14307, +58323=>14307, +33866=>14308, +58324=>14308, +31064=>14309, +58326=>14309, +158614=>14311, +58328=>14311, +159351=>14312, +58329=>14312, +159299=>14313, +58330=>14313, +34014=>14314, +58331=>14314, +33681=>14316, +58333=>14316, +17568=>14317, +58334=>14317, +33939=>14318, +58335=>14318, +34020=>14319, +58336=>14319, +154769=>14320, +58337=>14320, +16960=>14321, +58338=>14321, +154816=>14322, +58339=>14322, +17731=>14323, +58340=>14323, +34100=>14324, +58341=>14324, +23282=>14325, +58342=>14325, +17699=>14326, +17703=>14327, +58344=>14327, +34163=>14328, +58345=>14328, +17686=>14329, +58346=>14329, +26559=>14330, +58347=>14330, +34326=>14331, +58348=>14331, +165413=>14332, +58349=>14332, +165435=>14333, +58350=>14333, +34241=>14334, +58351=>14334, +159880=>14335, +58352=>14335, +34306=>14336, +58353=>14336, +136578=>14337, +58354=>14337, +159949=>14338, +58355=>14338, +194994=>14339, +58356=>14339, +17770=>14340, +58357=>14340, +34344=>14341, +58358=>14341, +13896=>14342, +58359=>14342, +137378=>14343, +58360=>14343, +21495=>14344, +58361=>14344, +160666=>14345, +58362=>14345, +34430=>14346, +58363=>14346, +172280=>14348, +58365=>14348, +34798=>14349, +58366=>14349, +142375=>14350, +58367=>14350, +34737=>14351, +58368=>14351, +34778=>14352, +58369=>14352, +34831=>14353, +60990=>14353, +58370=>14353, +22113=>14354, +58371=>14354, +34412=>14355, +58372=>14355, +26710=>14356, +58373=>14356, +17935=>14357, +58374=>14357, +34885=>14358, +58375=>14358, +34886=>14359, +58376=>14359, +161248=>14360, +58377=>14360, +146873=>14361, +58378=>14361, +161252=>14362, +58379=>14362, +34910=>14363, +58380=>14363, +34972=>14364, +58381=>14364, +18011=>14365, +58382=>14365, +34996=>14366, +58383=>14366, +34997=>14367, +58384=>14367, +35013=>14368, +58386=>14368, +161551=>14369, +58388=>14369, +35207=>14370, +58389=>14370, +35239=>14374, +58393=>14374, +35260=>14375, +58394=>14375, +166437=>14376, +58395=>14376, +35303=>14377, +58396=>14377, +162084=>14378, +58397=>14378, +162493=>14379, +58398=>14379, +35484=>14380, +58399=>14380, +30611=>14381, +58400=>14381, +37374=>14382, +58401=>14382, +35472=>14383, +58402=>14383, +162393=>14384, +58403=>14384, +31465=>14385, +58404=>14385, +162618=>14386, +58405=>14386, +18195=>14387, +58407=>14387, +162616=>14388, +58408=>14388, +29052=>14389, +58409=>14389, +35596=>14390, +58410=>14390, +35615=>14391, +58411=>14391, +152624=>14392, +58412=>14392, +152933=>14393, +58413=>14393, +35647=>14394, +58414=>14394, +35661=>14396, +58416=>14396, +35497=>14397, +58417=>14397, +150138=>14398, +58418=>14398, +35728=>14399, +58419=>14399, +35739=>14400, +58420=>14400, +35503=>14401, +58421=>14401, +136927=>14402, +58422=>14402, +17941=>14403, +58423=>14403, +34895=>14404, +58424=>14404, +35995=>14405, +58425=>14405, +163156=>14406, +58426=>14406, +163215=>14407, +58427=>14407, +195028=>14408, +58428=>14408, +14117=>14409, +58429=>14409, +163155=>14410, +58430=>14410, +36054=>14411, +58431=>14411, +163224=>14412, +58432=>14412, +163261=>14413, +58433=>14413, +36114=>14414, +58434=>14414, +36099=>14415, +58435=>14415, +137488=>14416, +58436=>14416, +36059=>14417, +58437=>14417, +28764=>14418, +58438=>14418, +36113=>14419, +58439=>14419, +16080=>14420, +58441=>14420, +195031=>14421, +36265=>14422, +58443=>14422, +163842=>14423, +58444=>14423, +135188=>14424, +58445=>14424, +149898=>14425, +58446=>14425, +15228=>14426, +58447=>14426, +164284=>14427, +58448=>14427, +160012=>14428, +58449=>14428, +31463=>14429, +58450=>14429, +36525=>14430, +58451=>14430, +36534=>14431, +58452=>14431, +36547=>14432, +58453=>14432, +37588=>14433, +58454=>14433, +36633=>14434, +58455=>14434, +36653=>14435, +58456=>14435, +164709=>14436, +58457=>14436, +164882=>14437, +58458=>14437, +36773=>14438, +58459=>14438, +37635=>14439, +58460=>14439, +172703=>14440, +58461=>14440, +133712=>14441, +58462=>14441, +36787=>14442, +58463=>14442, +166366=>14444, +58465=>14444, +165181=>14445, +58466=>14445, +146875=>14446, +58467=>14446, +24312=>14447, +58468=>14447, +143970=>14448, +58469=>14448, +36857=>14449, +58470=>14449, +140069=>14451, +58474=>14451, +14720=>14452, +58475=>14452, +159447=>14453, +58476=>14453, +36919=>14454, +58477=>14454, +165180=>14455, +58478=>14455, +162494=>14456, +58479=>14456, +36961=>14457, +58480=>14457, +165228=>14458, +58481=>14458, +165387=>14459, +58482=>14459, +37032=>14460, +58483=>14460, +165651=>14461, +58484=>14461, +37060=>14462, +58485=>14462, +165606=>14463, +58486=>14463, +37038=>14464, +58487=>14464, +64038=>14465, +37223=>14466, +58489=>14466, +37289=>14467, +58491=>14467, +37316=>14468, +58492=>14468, +31916=>14469, +58493=>14469, +166195=>14470, +58494=>14470, +138889=>14471, +58495=>14471, +37390=>14472, +58496=>14472, +27807=>14473, +58497=>14473, +37441=>14474, +58498=>14474, +37474=>14475, +58499=>14475, +153017=>14476, +58500=>14476, +166598=>14477, +58502=>14477, +146587=>14478, +58503=>14478, +166668=>14479, +58504=>14479, +153051=>14480, +58505=>14480, +134449=>14481, +58506=>14481, +37676=>14482, +58507=>14482, +37739=>14483, +58508=>14483, +166625=>14484, +58509=>14484, +166891=>14485, +58510=>14485, +23235=>14486, +58512=>14486, +166626=>14487, +58513=>14487, +166629=>14488, +58514=>14488, +18789=>14489, +58515=>14489, +37444=>14490, +58516=>14490, +166892=>14491, +58517=>14491, +166969=>14492, +58518=>14492, +166911=>14493, +58519=>14493, +37747=>14494, +58520=>14494, +37979=>14495, +58521=>14495, +36540=>14496, +58522=>14496, +38277=>14497, +58523=>14497, +38310=>14498, +58524=>14498, +37926=>14499, +58525=>14499, +38304=>14500, +58526=>14500, +28662=>14501, +58527=>14501, +17081=>14502, +58528=>14502, +165592=>14503, +58530=>14503, +135804=>14504, +58531=>14504, +146990=>14505, +58532=>14505, +18911=>14506, +58533=>14506, +27676=>14507, +58534=>14507, +38523=>14508, +58535=>14508, +38550=>14509, +58536=>14509, +16748=>14510, +58537=>14510, +38563=>14511, +58538=>14511, +159445=>14512, +58539=>14512, +25050=>14513, +58540=>14513, +58541=>14514, +30965=>14515, +58542=>14515, +166624=>14516, +58543=>14516, +38589=>14517, +58544=>14517, +21452=>14518, +58545=>14518, +18849=>14519, +58546=>14519, +158904=>14520, +58547=>14520, +131700=>14521, +58548=>14521, +156688=>14522, +58549=>14522, +168111=>14523, +58550=>14523, +168165=>14524, +58551=>14524, +150225=>14525, +58552=>14525, +137493=>14526, +58553=>14526, +144138=>14527, +58554=>14527, +38705=>14528, +58555=>14528, +34370=>14529, +58556=>14529, +38710=>14530, +58557=>14530, +18959=>14531, +58558=>14531, +17725=>14532, +58559=>14532, +17797=>14533, +58560=>14533, +150249=>14534, +58561=>14534, +28789=>14535, +58562=>14535, +23361=>14536, +58563=>14536, +38683=>14537, +58564=>14537, +168405=>14539, +58566=>14539, +38743=>14540, +58567=>14540, +23370=>14541, +58568=>14541, +168427=>14542, +58569=>14542, +38751=>14543, +58570=>14543, +37925=>14544, +58571=>14544, +20688=>14545, +58572=>14545, +143543=>14546, +58573=>14546, +143548=>14547, +58574=>14547, +38793=>14548, +58575=>14548, +38815=>14549, +58576=>14549, +38833=>14550, +58577=>14550, +38846=>14551, +58578=>14551, +38848=>14552, +58579=>14552, +38866=>14553, +58580=>14553, +38880=>14554, +58581=>14554, +152684=>14555, +58582=>14555, +38894=>14556, +58583=>14556, +29724=>14557, +58584=>14557, +169011=>14558, +58585=>14558, +38901=>14560, +58587=>14560, +168989=>14561, +58588=>14561, +162170=>14562, +58589=>14562, +19153=>14563, +58590=>14563, +38964=>14564, +58591=>14564, +38963=>14565, +58592=>14565, +38987=>14566, +58593=>14566, +39014=>14567, +58594=>14567, +15118=>14568, +58595=>14568, +160117=>14569, +58596=>14569, +15697=>14570, +58597=>14570, +132656=>14571, +58598=>14571, +147804=>14572, +58599=>14572, +153350=>14573, +58600=>14573, +39114=>14574, +58601=>14574, +39095=>14575, +58602=>14575, +39112=>14576, +58603=>14576, +39111=>14577, +58604=>14577, +19199=>14578, +58605=>14578, +159015=>14579, +58606=>14579, +136915=>14580, +58607=>14580, +21936=>14581, +58608=>14581, +39137=>14582, +58609=>14582, +39142=>14583, +58610=>14583, +39148=>14584, +58611=>14584, +37752=>14585, +58612=>14585, +39225=>14586, +58613=>14586, +150057=>14587, +58614=>14587, +19314=>14588, +58615=>14588, +170071=>14589, +58616=>14589, +170245=>14590, +58617=>14590, +39413=>14591, +58618=>14591, +39436=>14592, +58619=>14592, +39483=>14593, +58620=>14593, +39440=>14594, +58621=>14594, +39512=>14595, +58622=>14595, +153381=>14596, +58623=>14596, +14020=>14597, +58624=>14597, +168113=>14598, +58625=>14598, +170965=>14599, +58626=>14599, +39648=>14600, +58627=>14600, +39650=>14601, +58628=>14601, +170757=>14602, +58629=>14602, +39668=>14603, +58630=>14603, +19470=>14604, +58631=>14604, +39700=>14605, +58632=>14605, +39725=>14606, +58633=>14606, +165376=>14607, +58634=>14607, +20532=>14608, +58635=>14608, +39732=>14609, +58636=>14609, +14531=>14610, +58638=>14610, +143485=>14611, +58639=>14611, +39760=>14612, +58640=>14612, +39744=>14613, +58641=>14613, +171326=>14614, +58642=>14614, +23109=>14615, +58643=>14615, +137315=>14616, +58644=>14616, +39822=>14617, +58645=>14617, +39938=>14618, +58647=>14618, +39935=>14619, +58648=>14619, +39948=>14620, +58649=>14620, +171624=>14621, +58650=>14621, +40404=>14622, +58651=>14622, +171959=>14623, +58652=>14623, +172434=>14624, +58653=>14624, +172459=>14625, +58654=>14625, +172257=>14626, +58655=>14626, +172323=>14627, +58656=>14627, +172511=>14628, +58657=>14628, +40318=>14629, +58658=>14629, +40323=>14630, +58659=>14630, +172340=>14631, +58660=>14631, +40462=>14632, +58661=>14632, +40388=>14633, +58663=>14633, +172435=>14634, +58665=>14634, +172576=>14635, +58666=>14635, +137531=>14636, +58667=>14636, +172595=>14637, +58668=>14637, +40249=>14638, +58669=>14638, +172217=>14639, +58670=>14639, +172724=>14640, +58671=>14640, +40592=>14641, +58672=>14641, +40597=>14642, +58673=>14642, +40606=>14643, +58674=>14643, +40610=>14644, +58675=>14644, +19764=>14645, +58676=>14645, +40618=>14646, +58677=>14646, +40623=>14647, +58678=>14647, +148324=>14648, +58679=>14648, +40641=>14649, +58680=>14649, +15200=>14650, +58681=>14650, +14821=>14651, +58682=>14651, +15645=>14652, +58683=>14652, +20274=>14653, +58684=>14653, +14270=>14654, +58685=>14654, +166955=>14655, +58686=>14655, +40706=>14656, +58687=>14656, +40712=>14657, +58688=>14657, +19350=>14658, +58689=>14658, +37924=>14659, +58690=>14659, +159138=>14660, +58691=>14660, +40727=>14661, +60836=>14661, +58692=>14661, +195099=>14662, +40761=>14663, +58694=>14663, +22175=>14664, +58695=>14664, +22154=>14665, +58696=>14665, +40773=>14666, +58697=>14666, +39352=>14667, +58698=>14667, +168075=>14668, +58699=>14668, +38898=>14669, +58700=>14669, +33919=>14670, +58701=>14670, +40809=>14672, +58703=>14672, +31452=>14673, +58704=>14673, +40846=>14674, +58705=>14674, +29206=>14675, +58706=>14675, +19390=>14676, +58707=>14676, +149877=>14677, +58708=>14677, +149947=>14678, +58709=>14678, +29047=>14679, +58710=>14679, +150008=>14680, +58711=>14680, +148296=>14681, +58712=>14681, +150097=>14682, +58713=>14682, +29598=>14683, +58714=>14683, +166874=>14684, +58715=>14684, +137466=>14685, +58716=>14685, +31135=>14686, +58717=>14686, +166270=>14687, +58718=>14687, +167478=>14688, +58719=>14688, +37737=>14689, +58720=>14689, +37875=>14690, +58721=>14690, +166468=>14691, +58722=>14691, +37612=>14692, +58723=>14692, +37761=>14693, +58724=>14693, +37835=>14694, +58725=>14694, +166252=>14695, +58726=>14695, +148665=>14696, +58727=>14696, +29207=>14697, +58728=>14697, +16107=>14698, +58729=>14698, +30578=>14699, +58730=>14699, +31299=>14700, +58731=>14700, +28880=>14701, +58732=>14701, +148595=>14702, +58733=>14702, +148472=>14703, +58734=>14703, +29054=>14704, +58735=>14704, +137199=>14705, +58736=>14705, +28835=>14706, +58737=>14706, +137406=>14707, +58738=>14707, +144793=>14708, +58739=>14708, +16071=>14709, +58740=>14709, +137349=>14710, +58741=>14710, +152623=>14711, +58742=>14711, +137208=>14712, +58743=>14712, +14114=>14713, +58744=>14713, +136955=>14714, +58745=>14714, +137273=>14715, +58746=>14715, +14049=>14716, +58747=>14716, +137076=>14717, +58748=>14717, +137425=>14718, +58749=>14718, +155467=>14719, +58750=>14719, +14115=>14720, +58751=>14720, +136896=>14721, +58752=>14721, +22363=>14722, +58753=>14722, +150053=>14723, +58754=>14723, +136190=>14724, +58755=>14724, +135848=>14725, +58756=>14725, +136134=>14726, +58757=>14726, +136374=>14727, +58758=>14727, +34051=>14728, +58761=>14728, +58759=>14728, +145062=>14729, +58760=>14729, +33877=>14731, +58762=>14731, +149908=>14732, +58763=>14732, +160101=>14733, +58764=>14733, +146993=>14734, +58765=>14734, +152924=>14735, +58766=>14735, +147195=>14736, +58767=>14736, +159826=>14737, +58768=>14737, +17652=>14738, +58769=>14738, +145134=>14739, +58770=>14739, +170397=>14740, +58771=>14740, +159526=>14741, +58772=>14741, +26617=>14742, +58773=>14742, +14131=>14743, +58774=>14743, +15381=>14744, +58775=>14744, +15847=>14745, +58776=>14745, +22636=>14746, +58777=>14746, +137506=>14747, +58778=>14747, +26640=>14748, +58779=>14748, +16471=>14749, +58780=>14749, +145215=>14750, +58781=>14750, +147681=>14751, +58782=>14751, +147595=>14752, +58783=>14752, +147727=>14753, +58784=>14753, +158753=>14754, +58785=>14754, +21707=>14755, +58786=>14755, +22174=>14756, +58787=>14756, +157361=>14757, +58788=>14757, +22162=>14758, +58789=>14758, +135135=>14759, +58790=>14759, +134056=>14760, +58791=>14760, +134669=>14761, +58792=>14761, +166675=>14763, +58794=>14763, +37788=>14764, +58795=>14764, +20216=>14765, +58796=>14765, +20779=>14766, +58797=>14766, +14361=>14767, +58798=>14767, +148534=>14768, +58799=>14768, +20156=>14769, +58800=>14769, +132197=>14770, +58801=>14770, +20299=>14772, +58803=>14772, +20362=>14773, +58804=>14773, +153169=>14774, +58805=>14774, +23144=>14775, +58806=>14775, +131499=>14776, +58807=>14776, +132043=>14777, +58808=>14777, +14745=>14778, +58809=>14778, +131850=>14779, +58810=>14779, +132116=>14780, +58811=>14780, +13365=>14781, +58812=>14781, +20265=>14782, +58813=>14782, +131776=>14783, +58814=>14783, +167603=>14784, +58815=>14784, +131701=>14785, +58816=>14785, +35546=>14786, +58817=>14786, +131596=>14787, +58818=>14787, +20120=>14788, +58819=>14788, +20685=>14789, +58820=>14789, +20749=>14790, +58821=>14790, +20386=>14791, +58822=>14791, +20227=>14792, +58823=>14792, +150030=>14793, +58824=>14793, +147082=>14794, +58825=>14794, +20290=>14795, +58826=>14795, +20526=>14796, +58827=>14796, +20588=>14797, +58828=>14797, +20609=>14798, +58829=>14798, +20428=>14799, +58830=>14799, +20453=>14800, +58831=>14800, +20568=>14801, +58832=>14801, +20732=>14802, +58833=>14802, +28278=>14803, +58838=>14803, +144789=>14804, +58839=>14804, +147001=>14805, +58840=>14805, +147135=>14806, +58841=>14806, +28018=>14807, +58842=>14807, +137348=>14808, +58843=>14808, +147081=>14809, +58844=>14809, +20904=>14810, +58845=>14810, +20931=>14811, +58846=>14811, +132576=>14812, +58847=>14812, +17629=>14813, +58848=>14813, +132259=>14814, +58849=>14814, +132242=>14815, +58850=>14815, +132241=>14816, +58851=>14816, +36218=>14817, +58852=>14817, +166556=>14818, +58853=>14818, +132878=>14819, +58854=>14819, +21081=>14820, +58855=>14820, +21156=>14821, +58856=>14821, +133235=>14822, +58857=>14822, +21217=>14823, +58858=>14823, +18042=>14825, +58860=>14825, +29068=>14826, +58861=>14826, +148364=>14827, +58862=>14827, +134176=>14828, +58863=>14828, +149932=>14829, +58864=>14829, +135396=>14830, +58865=>14830, +27089=>14831, +58866=>14831, +134685=>14832, +58867=>14832, +16094=>14834, +58869=>14834, +29849=>14835, +58870=>14835, +29716=>14836, +58871=>14836, +29782=>14837, +58872=>14837, +29592=>14838, +58873=>14838, +19342=>14839, +58874=>14839, +150204=>14840, +58875=>14840, +147597=>14841, +58876=>14841, +21456=>14842, +58877=>14842, +13700=>14843, +58878=>14843, +29199=>14844, +58879=>14844, +147657=>14845, +58880=>14845, +21940=>14846, +58881=>14846, +131909=>14847, +58882=>14847, +21709=>14848, +58883=>14848, +134086=>14849, +58884=>14849, +22301=>14850, +58885=>14850, +37469=>14851, +58886=>14851, +38644=>14852, +58887=>14852, +22493=>14853, +58889=>14853, +22413=>14854, +58890=>14854, +22399=>14855, +58891=>14855, +13886=>14856, +58892=>14856, +22731=>14857, +58893=>14857, +23193=>14858, +58894=>14858, +166470=>14859, +58895=>14859, +136954=>14860, +58896=>14860, +137071=>14861, +58897=>14861, +136976=>14862, +58898=>14862, +23084=>14863, +58899=>14863, +22968=>14864, +58900=>14864, +23166=>14865, +58902=>14865, +23247=>14866, +58903=>14866, +23058=>14867, +58904=>14867, +153926=>14868, +58905=>14868, +137715=>14869, +58906=>14869, +137313=>14870, +58907=>14870, +148117=>14871, +58908=>14871, +14069=>14872, +58909=>14872, +27909=>14873, +58910=>14873, +29763=>14874, +58911=>14874, +23073=>14875, +58912=>14875, +155267=>14876, +58913=>14876, +23169=>14877, +58914=>14877, +166871=>14878, +58915=>14878, +132115=>14879, +58916=>14879, +37856=>14880, +58917=>14880, +29836=>14881, +58918=>14881, +135939=>14882, +58919=>14882, +28933=>14883, +58920=>14883, +18802=>14884, +58921=>14884, +37896=>14885, +58922=>14885, +166395=>14886, +58923=>14886, +37821=>14887, +58924=>14887, +14240=>14888, +58925=>14888, +23582=>14889, +58926=>14889, +23710=>14890, +58927=>14890, +24158=>14891, +58928=>14891, +24136=>14892, +58929=>14892, +137622=>14893, +58930=>14893, +137596=>14894, +58931=>14894, +146158=>14895, +58932=>14895, +24269=>14896, +58933=>14896, +23375=>14897, +58934=>14897, +58935=>14898, +137475=>14898, +58936=>14899, +137476=>14899, +14081=>14900, +58937=>14900, +137376=>14901, +58938=>14901, +14045=>14902, +58939=>14902, +136958=>14903, +58940=>14903, +14035=>14904, +58941=>14904, +33066=>14905, +58942=>14905, +166471=>14906, +58943=>14906, +138682=>14907, +58944=>14907, +144498=>14908, +58945=>14908, +166312=>14909, +58946=>14909, +24332=>14910, +60916=>14910, +58947=>14910, +24334=>14911, +58948=>14911, +137511=>14912, +58949=>14912, +137131=>14913, +58950=>14913, +23147=>14914, +58951=>14914, +137019=>14915, +58952=>14915, +23364=>14916, +58953=>14916, +161277=>14917, +58955=>14917, +34912=>14918, +58956=>14918, +24702=>14919, +58957=>14919, +141408=>14920, +58958=>14920, +140843=>14921, +58959=>14921, +24539=>14922, +58960=>14922, +16056=>14923, +58961=>14923, +140719=>14924, +58962=>14924, +140734=>14925, +58963=>14925, +168072=>14926, +58964=>14926, +159603=>14927, +58965=>14927, +25024=>14928, +58966=>14928, +131134=>14929, +58967=>14929, +131142=>14930, +58968=>14930, +140827=>14931, +58969=>14931, +24985=>14932, +58970=>14932, +24984=>14933, +58971=>14933, +24693=>14934, +58972=>14934, +142491=>14935, +58973=>14935, +142599=>14936, +58974=>14936, +149204=>14937, +58975=>14937, +168269=>14938, +58976=>14938, +25713=>14939, +58977=>14939, +149093=>14940, +58978=>14940, +142186=>14941, +58979=>14941, +14889=>14942, +58980=>14942, +142114=>14943, +58981=>14943, +144464=>14944, +58982=>14944, +170218=>14945, +58983=>14945, +142968=>14946, +58984=>14946, +25399=>14947, +58985=>14947, +25782=>14948, +58987=>14948, +25393=>14949, +58988=>14949, +25553=>14950, +58989=>14950, +149987=>14951, +58990=>14951, +142695=>14952, +58991=>14952, +25252=>14953, +58992=>14953, +142497=>14954, +58993=>14954, +25659=>14955, +58994=>14955, +25963=>14956, +58995=>14956, +26994=>14957, +58996=>14957, +15348=>14958, +58997=>14958, +143502=>14959, +58998=>14959, +144045=>14960, +58999=>14960, +149897=>14961, +59000=>14961, +144043=>14962, +59001=>14962, +21773=>14963, +59002=>14963, +144096=>14964, +59003=>14964, +137433=>14965, +59004=>14965, +169023=>14966, +59005=>14966, +26318=>14967, +59006=>14967, +144009=>14968, +59007=>14968, +143795=>14969, +59008=>14969, +15072=>14970, +59009=>14970, +152964=>14971, +59011=>14971, +166690=>14972, +59012=>14972, +152975=>14973, +59013=>14973, +136956=>14974, +59014=>14974, +152923=>14975, +59015=>14975, +152613=>14976, +59016=>14976, +30958=>14977, +59017=>14977, +143619=>14978, +59018=>14978, +137258=>14979, +59019=>14979, +143924=>14980, +59020=>14980, +13412=>14981, +59021=>14981, +143887=>14982, +59022=>14982, +143746=>14983, +59023=>14983, +148169=>14984, +59024=>14984, +26254=>14985, +59025=>14985, +159012=>14986, +59026=>14986, +26219=>14987, +59027=>14987, +19347=>14988, +59028=>14988, +26160=>14989, +59029=>14989, +161904=>14990, +59030=>14990, +138731=>14991, +59031=>14991, +26211=>14992, +59032=>14992, +144082=>14993, +59033=>14993, +144097=>14994, +59034=>14994, +26142=>14995, +59035=>14995, +153714=>14996, +59036=>14996, +14545=>14997, +59037=>14997, +145466=>14998, +59038=>14998, +145340=>14999, +59039=>14999, +15257=>15000, +59040=>15000, +145314=>15001, +59041=>15001, +144382=>15002, +59042=>15002, +29904=>15003, +59043=>15003, +15254=>15004, +59044=>15004, +149034=>15005, +59046=>15005, +26806=>15006, +59047=>15006, +15300=>15008, +59049=>15008, +27326=>15009, +59050=>15009, +145365=>15010, +59052=>15010, +148615=>15011, +59053=>15011, +27187=>15012, +59054=>15012, +27218=>15013, +59055=>15013, +27337=>15014, +59056=>15014, +27397=>15015, +59057=>15015, +137490=>15016, +59058=>15016, +25873=>15017, +59059=>15017, +26776=>15018, +59060=>15018, +27212=>15019, +59061=>15019, +15319=>15020, +59062=>15020, +27258=>15021, +59063=>15021, +27479=>15022, +59064=>15022, +147392=>15023, +59065=>15023, +146586=>15024, +59066=>15024, +37792=>15025, +59067=>15025, +37618=>15026, +59068=>15026, +166890=>15027, +59069=>15027, +166603=>15028, +59070=>15028, +37513=>15029, +59071=>15029, +163870=>15030, +59072=>15030, +166364=>15031, +59073=>15031, +37991=>15032, +59074=>15032, +28069=>15033, +59075=>15033, +28427=>15034, +59076=>15034, +147327=>15036, +59079=>15036, +15759=>15037, +59080=>15037, +28164=>15038, +59081=>15038, +147516=>15039, +59082=>15039, +23101=>15040, +59083=>15040, +28170=>15041, +59084=>15041, +22599=>15042, +59085=>15042, +27940=>15043, +59086=>15043, +30786=>15044, +59087=>15044, +28987=>15045, +59088=>15045, +148250=>15046, +59089=>15046, +148086=>15047, +59090=>15047, +28913=>15048, +59091=>15048, +29264=>15049, +61085=>15049, +59092=>15049, +29319=>15050, +59093=>15050, +29332=>15051, +59094=>15051, +149391=>15052, +59095=>15052, +149285=>15053, +59096=>15053, +20857=>15054, +59097=>15054, +150180=>15055, +59098=>15055, +132587=>15056, +59099=>15056, +29818=>15057, +59100=>15057, +147192=>15058, +59101=>15058, +144991=>15059, +59102=>15059, +150090=>15060, +59103=>15060, +149783=>15061, +59104=>15061, +155617=>15062, +59105=>15062, +16134=>15063, +59106=>15063, +16049=>15064, +59107=>15064, +150239=>15065, +59108=>15065, +166947=>15066, +59109=>15066, +147253=>15067, +59110=>15067, +24743=>15068, +59111=>15068, +16115=>15069, +59112=>15069, +29900=>15070, +59113=>15070, +29756=>15071, +59114=>15071, +37767=>15072, +59115=>15072, +29751=>15073, +59116=>15073, +17567=>15074, +59117=>15074, +159210=>15075, +59118=>15075, +17745=>15076, +59119=>15076, +30083=>15077, +59120=>15077, +16227=>15078, +59121=>15078, +150745=>15079, +59122=>15079, +150790=>15080, +59123=>15080, +16216=>15081, +59124=>15081, +30037=>15082, +59125=>15082, +30323=>15083, +59126=>15083, +173510=>15084, +59127=>15084, +29800=>15086, +61070=>15086, +59129=>15086, +166604=>15087, +59130=>15087, +149931=>15088, +59131=>15088, +149902=>15089, +59132=>15089, +15099=>15090, +59133=>15090, +15821=>15091, +59134=>15091, +150094=>15092, +59135=>15092, +16127=>15093, +59136=>15093, +149957=>15094, +59137=>15094, +149747=>15095, +59138=>15095, +37370=>15096, +59139=>15096, +22322=>15097, +59140=>15097, +37698=>15098, +59141=>15098, +166627=>15099, +59142=>15099, +137316=>15100, +59143=>15100, +20703=>15101, +59144=>15101, +152097=>15102, +59145=>15102, +152039=>15103, +59146=>15103, +30584=>15104, +59147=>15104, +143922=>15105, +59148=>15105, +30478=>15106, +59149=>15106, +30479=>15107, +59150=>15107, +30587=>15108, +59151=>15108, +149143=>15109, +59152=>15109, +145281=>15110, +59153=>15110, +14942=>15111, +59154=>15111, +149744=>15112, +59155=>15112, +29752=>15113, +59156=>15113, +29851=>15114, +59157=>15114, +16063=>15115, +59158=>15115, +150202=>15116, +59159=>15116, +150215=>15117, +59160=>15117, +16584=>15118, +59161=>15118, +150166=>15119, +59162=>15119, +156078=>15120, +59163=>15120, +37639=>15121, +59164=>15121, +152961=>15122, +59165=>15122, +30750=>15123, +59166=>15123, +30861=>15124, +59167=>15124, +30856=>15125, +59168=>15125, +30930=>15126, +59169=>15126, +29648=>15127, +59170=>15127, +31065=>15128, +59171=>15128, +161601=>15129, +59172=>15129, +153315=>15130, +59173=>15130, +16654=>15131, +59174=>15131, +31141=>15134, +59177=>15134, +27181=>15135, +59178=>15135, +147194=>15136, +59179=>15136, +31290=>15137, +59180=>15137, +31220=>15138, +59181=>15138, +16750=>15139, +59182=>15139, +136934=>15140, +59183=>15140, +16690=>15141, +59184=>15141, +37429=>15142, +59185=>15142, +31217=>15143, +59186=>15143, +134476=>15144, +59187=>15144, +149900=>15145, +59188=>15145, +131737=>15146, +59189=>15146, +146874=>15147, +59190=>15147, +137070=>15148, +59191=>15148, +13719=>15149, +59192=>15149, +21867=>15150, +59193=>15150, +13680=>15151, +59194=>15151, +13994=>15152, +59195=>15152, +131540=>15153, +59196=>15153, +134157=>15154, +59197=>15154, +31458=>15155, +59198=>15155, +23129=>15156, +59199=>15156, +141045=>15157, +59200=>15157, +154287=>15158, +59201=>15158, +154268=>15159, +59202=>15159, +23053=>15160, +59203=>15160, +131675=>15161, +59204=>15161, +30960=>15162, +59205=>15162, +23082=>15163, +59206=>15163, +154566=>15164, +59207=>15164, +31486=>15165, +59208=>15165, +16889=>15166, +59209=>15166, +31837=>15167, +59210=>15167, +31853=>15168, +59211=>15168, +16913=>15169, +59212=>15169, +154547=>15170, +59213=>15170, +155324=>15171, +59214=>15171, +155302=>15172, +59215=>15172, +31949=>15173, +59216=>15173, +150009=>15174, +59217=>15174, +137136=>15175, +59218=>15175, +31886=>15176, +59219=>15176, +31868=>15177, +59220=>15177, +31918=>15178, +59221=>15178, +27314=>15179, +59222=>15179, +32220=>15180, +59223=>15180, +32263=>15181, +59224=>15181, +32211=>15182, +59225=>15182, +32590=>15183, +59226=>15183, +156257=>15184, +59227=>15184, +155996=>15185, +59228=>15185, +162632=>15186, +59229=>15186, +32151=>15187, +59230=>15187, +155266=>15188, +59231=>15188, +17002=>15189, +59232=>15189, +158581=>15190, +59233=>15190, +133398=>15191, +59234=>15191, +26582=>15192, +59235=>15192, +131150=>15193, +59236=>15193, +144847=>15194, +59237=>15194, +22468=>15195, +59238=>15195, +156690=>15196, +59239=>15196, +156664=>15197, +59240=>15197, +32733=>15198, +59242=>15198, +31527=>15199, +59243=>15199, +133164=>15200, +59244=>15200, +154345=>15201, +59245=>15201, +154947=>15202, +59246=>15202, +31500=>15203, +59247=>15203, +155150=>15204, +59248=>15204, +39398=>15205, +59249=>15205, +34373=>15206, +59250=>15206, +39523=>15207, +59251=>15207, +27164=>15208, +59252=>15208, +144447=>15209, +59253=>15209, +150007=>15210, +59255=>15210, +157101=>15211, +59256=>15211, +39455=>15212, +59257=>15212, +157088=>15213, +59258=>15213, +33941=>15214, +160039=>15215, +59260=>15215, +158929=>15216, +59261=>15216, +17642=>15217, +59262=>15217, +33079=>15218, +59263=>15218, +17410=>15219, +59264=>15219, +32966=>15220, +59265=>15220, +33033=>15221, +59266=>15221, +33090=>15222, +59267=>15222, +157620=>15223, +59268=>15223, +39107=>15224, +59269=>15224, +158274=>15225, +59270=>15225, +33378=>15226, +59271=>15226, +33381=>15227, +59272=>15227, +158289=>15228, +59273=>15228, +33875=>15229, +59274=>15229, +159143=>15230, +59275=>15230, +34320=>15231, +59276=>15231, +160283=>15232, +59277=>15232, +23174=>15233, +59278=>15233, +16767=>15234, +59279=>15234, +137280=>15235, +59280=>15235, +23339=>15236, +59281=>15236, +137377=>15237, +59282=>15237, +23268=>15238, +59283=>15238, +137432=>15239, +59284=>15239, +34464=>15240, +59285=>15240, +195004=>15241, +59286=>15241, +146831=>15242, +59287=>15242, +34861=>15243, +59288=>15243, +160802=>15244, +59289=>15244, +23042=>15245, +59290=>15245, +34926=>15246, +59291=>15246, +20293=>15247, +59292=>15247, +34951=>15248, +59293=>15248, +35007=>15249, +59294=>15249, +35046=>15250, +59295=>15250, +35173=>15251, +59296=>15251, +35149=>15252, +59297=>15252, +153219=>15253, +59298=>15253, +35156=>15254, +59299=>15254, +161669=>15255, +59300=>15255, +161668=>15256, +59301=>15256, +166901=>15257, +59302=>15257, +166873=>15258, +59303=>15258, +166812=>15259, +59304=>15259, +166393=>15260, +59305=>15260, +16045=>15261, +59306=>15261, +33955=>15262, +59307=>15262, +18165=>15263, +59308=>15263, +18127=>15264, +59309=>15264, +14322=>15265, +59310=>15265, +35389=>15266, +59311=>15266, +35356=>15267, +59312=>15267, +169032=>15268, +59313=>15268, +24397=>15269, +59314=>15269, +37419=>15270, +59315=>15270, +148100=>15271, +59316=>15271, +26068=>15272, +59317=>15272, +28969=>15273, +59318=>15273, +28868=>15274, +59319=>15274, +137285=>15275, +59320=>15275, +40301=>15276, +59321=>15276, +35999=>15277, +59322=>15277, +36073=>15278, +59323=>15278, +163292=>15279, +59324=>15279, +22938=>15280, +59325=>15280, +30659=>15281, +59326=>15281, +23024=>15282, +59327=>15282, +14036=>15283, +59329=>15283, +36394=>15284, +59330=>15284, +36519=>15285, +59331=>15285, +150537=>15286, +59332=>15286, +36656=>15287, +59333=>15287, +36682=>15288, +59334=>15288, +17140=>15289, +59335=>15289, +27736=>15290, +59336=>15290, +28603=>15291, +59337=>15291, +140065=>15292, +59338=>15292, +18587=>15293, +59339=>15293, +28537=>15294, +59340=>15294, +28299=>15295, +59341=>15295, +137178=>15296, +59342=>15296, +39913=>15297, +59343=>15297, +14005=>15298, +59344=>15298, +149807=>15299, +59345=>15299, +37051=>15300, +59346=>15300, +18612=>15301, +21873=>15302, +59348=>15302, +18694=>15303, +59349=>15303, +37307=>15304, +59350=>15304, +37892=>15305, +59351=>15305, +166475=>15306, +59352=>15306, +16482=>15307, +59353=>15307, +166652=>15308, +59354=>15308, +37927=>15309, +59355=>15309, +166941=>15310, +59356=>15310, +166971=>15311, +59357=>15311, +34021=>15312, +59358=>15312, +35371=>15313, +59359=>15313, +38297=>15314, +59360=>15314, +38311=>15315, +59361=>15315, +38295=>15316, +59362=>15316, +38294=>15317, +59363=>15317, +167220=>15318, +59364=>15318, +29765=>15319, +59365=>15319, +16066=>15320, +59366=>15320, +149759=>15321, +59367=>15321, +150082=>15322, +59368=>15322, +148458=>15323, +59369=>15323, +16103=>15324, +59370=>15324, +143909=>15325, +59371=>15325, +38543=>15326, +59372=>15326, +167655=>15327, +59373=>15327, +167526=>15328, +59374=>15328, +167525=>15329, +59375=>15329, +16076=>15330, +59376=>15330, +149997=>15331, +59377=>15331, +150136=>15332, +59378=>15332, +147438=>15333, +59379=>15333, +29714=>15334, +59380=>15334, +29803=>15335, +59381=>15335, +16124=>15336, +59382=>15336, +38721=>15337, +59383=>15337, +168112=>15338, +59384=>15338, +26695=>15339, +59385=>15339, +18973=>15340, +59386=>15340, +168083=>15341, +59387=>15341, +153567=>15342, +59388=>15342, +37736=>15344, +59390=>15344, +166281=>15345, +59391=>15345, +166950=>15346, +59392=>15346, +166703=>15347, +59393=>15347, +156606=>15348, +59394=>15348, +37562=>15349, +59395=>15349, +23313=>15350, +59396=>15350, +35689=>15351, +59397=>15351, +18748=>15352, +59398=>15352, +29689=>15353, +59399=>15353, +147995=>15354, +59400=>15354, +38811=>15355, +59401=>15355, +39224=>15357, +59403=>15357, +134950=>15358, +59404=>15358, +24001=>15359, +59405=>15359, +166853=>15360, +59406=>15360, +150194=>15361, +59407=>15361, +38943=>15362, +59408=>15362, +169178=>15363, +59409=>15363, +37622=>15364, +59410=>15364, +169431=>15365, +59411=>15365, +37349=>15366, +59412=>15366, +17600=>15367, +59413=>15367, +166736=>15368, +59414=>15368, +150119=>15369, +59415=>15369, +166756=>15370, +59416=>15370, +39132=>15371, +59417=>15371, +166469=>15372, +59418=>15372, +16128=>15373, +59419=>15373, +37418=>15374, +59420=>15374, +18725=>15375, +59421=>15375, +33812=>15376, +59422=>15376, +39227=>15377, +59423=>15377, +39245=>15378, +59424=>15378, +162566=>15379, +59425=>15379, +15869=>15380, +59426=>15380, +19311=>15382, +59428=>15382, +39338=>15383, +59429=>15383, +39516=>15384, +59430=>15384, +166757=>15385, +59431=>15385, +153800=>15386, +59432=>15386, +27279=>15387, +59433=>15387, +39457=>15388, +59434=>15388, +23294=>15389, +59435=>15389, +39471=>15390, +59436=>15390, +170225=>15391, +59437=>15391, +19344=>15392, +59438=>15392, +170312=>15393, +59439=>15393, +39356=>15394, +59440=>15394, +19389=>15395, +59441=>15395, +19351=>15396, +59442=>15396, +37757=>15397, +59443=>15397, +22642=>15398, +59444=>15398, +135938=>15399, +59445=>15399, +22562=>15400, +59446=>15400, +149944=>15401, +59447=>15401, +136424=>15402, +59448=>15402, +30788=>15403, +59449=>15403, +141087=>15404, +59450=>15404, +146872=>15405, +59451=>15405, +26821=>15406, +59452=>15406, +15741=>15407, +59453=>15407, +37976=>15408, +59454=>15408, +14631=>15409, +59455=>15409, +24912=>15410, +59456=>15410, +141185=>15411, +59457=>15411, +141675=>15412, +59458=>15412, +24839=>15413, +59459=>15413, +40015=>15414, +59460=>15414, +40019=>15415, +59461=>15415, +40059=>15416, +59462=>15416, +39989=>15417, +59463=>15417, +39952=>15418, +59464=>15418, +39807=>15419, +59465=>15419, +39887=>15420, +59466=>15420, +171565=>15421, +59467=>15421, +39839=>15422, +59468=>15422, +172533=>15423, +59469=>15423, +172286=>15424, +59470=>15424, +40225=>15425, +59471=>15425, +19630=>15426, +59472=>15426, +147716=>15427, +59473=>15427, +40472=>15428, +59474=>15428, +19632=>15429, +59475=>15429, +40204=>15430, +59476=>15430, +172468=>15431, +59477=>15431, +172269=>15432, +59478=>15432, +172275=>15433, +59479=>15433, +170287=>15434, +59480=>15434, +40357=>15435, +59481=>15435, +33981=>15436, +59482=>15436, +159250=>15437, +59483=>15437, +159711=>15438, +59484=>15438, +158594=>15439, +59485=>15439, +34300=>15440, +59486=>15440, +17715=>15441, +59487=>15441, +159140=>15442, +59488=>15442, +159364=>15443, +59489=>15443, +159216=>15444, +59490=>15444, +33824=>15445, +59491=>15445, +34286=>15446, +59492=>15446, +159232=>15447, +59493=>15447, +145367=>15448, +59494=>15448, +155748=>15449, +59495=>15449, +31202=>15450, +59496=>15450, +144796=>15451, +59497=>15451, +144960=>15452, +59498=>15452, +149982=>15453, +59500=>15453, +15714=>15454, +59501=>15454, +37851=>15455, +59502=>15455, +37566=>15456, +59503=>15456, +37704=>15457, +59504=>15457, +131775=>15458, +59505=>15458, +30905=>15459, +59506=>15459, +37495=>15460, +59507=>15460, +37965=>15461, +59508=>15461, +20452=>15462, +59509=>15462, +13376=>15463, +59510=>15463, +36964=>15464, +59511=>15464, +152925=>15465, +59512=>15465, +30781=>15466, +59513=>15466, +30804=>15467, +59514=>15467, +30902=>15468, +59515=>15468, +30795=>15469, +59516=>15469, +137047=>15470, +59517=>15470, +143817=>15471, +59518=>15471, +149825=>15472, +59519=>15472, +13978=>15473, +59520=>15473, +20338=>15474, +59521=>15474, +28634=>15475, +59522=>15475, +28633=>15476, +59523=>15476, +28702=>15478, +59524=>15478, +59525=>15478, +21524=>15479, +59526=>15479, +147893=>15480, +59527=>15480, +22459=>15481, +59528=>15481, +22771=>15482, +59529=>15482, +22410=>15483, +59530=>15483, +40214=>15484, +59531=>15484, +22487=>15485, +59532=>15485, +28980=>15486, +59533=>15486, +13487=>15487, +59534=>15487, +147884=>15488, +59535=>15488, +29163=>15489, +59536=>15489, +158784=>15490, +59537=>15490, +151447=>15491, +59538=>15491, +137141=>15493, +59540=>15493, +166473=>15494, +59541=>15494, +24844=>15495, +59542=>15495, +23246=>15496, +59543=>15496, +23051=>15497, +59544=>15497, +17084=>15498, +59545=>15498, +148616=>15499, +59546=>15499, +14124=>15500, +59547=>15500, +19323=>15501, +59548=>15501, +166396=>15502, +59549=>15502, +37819=>15503, +59550=>15503, +37816=>15504, +59551=>15504, +137430=>15505, +59552=>15505, +134941=>15506, +59553=>15506, +33906=>15507, +59554=>15507, +158912=>15508, +59555=>15508, +136211=>15509, +59556=>15509, +148218=>15510, +59557=>15510, +142374=>15511, +59558=>15511, +148417=>15512, +59559=>15512, +22932=>15513, +59560=>15513, +146871=>15514, +59561=>15514, +157505=>15515, +59562=>15515, +32168=>15516, +59563=>15516, +155995=>15517, +59564=>15517, +155812=>15518, +59565=>15518, +149945=>15519, +59566=>15519, +149899=>15520, +59567=>15520, +166394=>15521, +59568=>15521, +37605=>15522, +59569=>15522, +29666=>15523, +59570=>15523, +16105=>15524, +59571=>15524, +29876=>15525, +59572=>15525, +166755=>15526, +59573=>15526, +137375=>15527, +59574=>15527, +16097=>15528, +59575=>15528, +150195=>15529, +59576=>15529, +27352=>15530, +59577=>15530, +29683=>15531, +59578=>15531, +29691=>15532, +59579=>15532, +16086=>15533, +59580=>15533, +150078=>15534, +59581=>15534, +150164=>15535, +59582=>15535, +137177=>15536, +59583=>15536, +150118=>15537, +59584=>15537, +132007=>15538, +59585=>15538, +136228=>15539, +59586=>15539, +149989=>15540, +59587=>15540, +29768=>15541, +59588=>15541, +149782=>15542, +59589=>15542, +28837=>15543, +59590=>15543, +149878=>15544, +59591=>15544, +37508=>15545, +59592=>15545, +29670=>15546, +59593=>15546, +37727=>15547, +59594=>15547, +132350=>15548, +59595=>15548, +37681=>15549, +59596=>15549, +166606=>15550, +59597=>15550, +166422=>15551, +59598=>15551, +37766=>15552, +59599=>15552, +166887=>15553, +59600=>15553, +153045=>15554, +59601=>15554, +18741=>15555, +59602=>15555, +166530=>15556, +59603=>15556, +29035=>15557, +59604=>15557, +149827=>15558, +59605=>15558, +134399=>15559, +59606=>15559, +22180=>15560, +59607=>15560, +132634=>15561, +59608=>15561, +134123=>15562, +59609=>15562, +134328=>15563, +59610=>15563, +21762=>15564, +59611=>15564, +31172=>15565, +59612=>15565, +137210=>15566, +59613=>15566, +32254=>15567, +59614=>15567, +136898=>15568, +59615=>15568, +150096=>15569, +59616=>15569, +137298=>15570, +59617=>15570, +17710=>15571, +59618=>15571, +37889=>15572, +59619=>15572, +14090=>15573, +59620=>15573, +166592=>15574, +59621=>15574, +149933=>15575, +59622=>15575, +22960=>15576, +59623=>15576, +137407=>15577, +59624=>15577, +137347=>15578, +59625=>15578, +160900=>15579, +59626=>15579, +23201=>15580, +59627=>15580, +14050=>15581, +59628=>15581, +146779=>15582, +59629=>15582, +14000=>15583, +59630=>15583, +37471=>15584, +59631=>15584, +23161=>15585, +59632=>15585, +166529=>15586, +59633=>15586, +137314=>15587, +59634=>15587, +37748=>15588, +59635=>15588, +15565=>15589, +59636=>15589, +133812=>15590, +59637=>15590, +19094=>15591, +59638=>15591, +14730=>15592, +59639=>15592, +20724=>15593, +59640=>15593, +15721=>15594, +59641=>15594, +15692=>15595, +59642=>15595, +136092=>15596, +59643=>15596, +29045=>15597, +59644=>15597, +17147=>15598, +59645=>15598, +164376=>15599, +59646=>15599, +28175=>15600, +59647=>15600, +168164=>15601, +59648=>15601, +17643=>15602, +59649=>15602, +27991=>15603, +59650=>15603, +163407=>15604, +59651=>15604, +28775=>15605, +59652=>15605, +27823=>15606, +59653=>15606, +15574=>15607, +59654=>15607, +147437=>15608, +59655=>15608, +146989=>15609, +59656=>15609, +28162=>15610, +59657=>15610, +28428=>15611, +59658=>15611, +15727=>15612, +59659=>15612, +132085=>15613, +59660=>15613, +30033=>15614, +59661=>15614, +14012=>15615, +59662=>15615, +13512=>15616, +59663=>15616, +18048=>15617, +59664=>15617, +16090=>15618, +59665=>15618, +18545=>15619, +59666=>15619, +22980=>15620, +59667=>15620, +37486=>15621, +59668=>15621, +18750=>15622, +59669=>15622, +36673=>15623, +59670=>15623, +166940=>15624, +59671=>15624, +158656=>15625, +59672=>15625, +22546=>15626, +59673=>15626, +22472=>15627, +59674=>15627, +14038=>15628, +59675=>15628, +136274=>15629, +59676=>15629, +28926=>15630, +59677=>15630, +148322=>15631, +59678=>15631, +150129=>15632, +59679=>15632, +143331=>15633, +59680=>15633, +135856=>15634, +59681=>15634, +140221=>15635, +59682=>15635, +26809=>15636, +59683=>15636, +26983=>15637, +59684=>15637, +136088=>15638, +59685=>15638, +144613=>15639, +59686=>15639, +162804=>15640, +59687=>15640, +145119=>15641, +59688=>15641, +166531=>15642, +59689=>15642, +145366=>15643, +59690=>15643, +144378=>15644, +59691=>15644, +150687=>15645, +59692=>15645, +27162=>15646, +59693=>15646, +145069=>15647, +59694=>15647, +158903=>15648, +59695=>15648, +33854=>15649, +59696=>15649, +17631=>15650, +59697=>15650, +17614=>15651, +59698=>15651, +159014=>15652, +59699=>15652, +159057=>15653, +59700=>15653, +158850=>15654, +59701=>15654, +159710=>15655, +59702=>15655, +33597=>15658, +59705=>15658, +137018=>15659, +59706=>15659, +33773=>15660, +59707=>15660, +158848=>15661, +59708=>15661, +159827=>15662, +59709=>15662, +137179=>15663, +59710=>15663, +22921=>15664, +59711=>15664, +23170=>15665, +59712=>15665, +137139=>15666, +59713=>15666, +23137=>15667, +59714=>15667, +23153=>15668, +59715=>15668, +137477=>15669, +59716=>15669, +147964=>15670, +59717=>15670, +14125=>15671, +59718=>15671, +23023=>15672, +59719=>15672, +137020=>15673, +59720=>15673, +14023=>15674, +59721=>15674, +29070=>15675, +59722=>15675, +37776=>15676, +59723=>15676, +26266=>15677, +59724=>15677, +148133=>15678, +59725=>15678, +23150=>15679, +59726=>15679, +23083=>15680, +59727=>15680, +148115=>15681, +59728=>15681, +27179=>15682, +59729=>15682, +147193=>15683, +59730=>15683, +161590=>15684, +59731=>15684, +148571=>15685, +59732=>15685, +148170=>15686, +59733=>15686, +28957=>15687, +59734=>15687, +148057=>15688, +59735=>15688, +166369=>15689, +59736=>15689, +20400=>15690, +59737=>15690, +159016=>15691, +59738=>15691, +23746=>15692, +59739=>15692, +148686=>15693, +59740=>15693, +163405=>15694, +59741=>15694, +148413=>15695, +59742=>15695, +27148=>15696, +59743=>15696, +148054=>15697, +59744=>15697, +135940=>15698, +59745=>15698, +28979=>15700, +59747=>15700, +148457=>15701, +59748=>15701, +15781=>15702, +59749=>15702, +27871=>15703, +59750=>15703, +194597=>15704, +59751=>15704, +23019=>15705, +59754=>15705, +24412=>15706, +59757=>15706, +59764=>15707, +144128=>15707, +31955=>15708, +59776=>15708, +59783=>15709, +162548=>15709, +59786=>15710, +153334=>15710, +162584=>15711, +59790=>15711, +36972=>15712, +59791=>15712, +33270=>15713, +59795=>15713, +30476=>15714, +59797=>15714, +27810=>15715, +59799=>15715, +22269=>15716, +59800=>15716, +22633=>15717, +59828=>15717, +26465=>15718, +59832=>15718, +23646=>15719, +59838=>15719, +22770=>15720, +59841=>15720, +28857=>15721, +59843=>15721, +26627=>15722, +59853=>15722, +59859=>15723, +36795=>15723, +59861=>15724, +36796=>15724, +20001=>15725, +59871=>15725, +31545=>15726, +59898=>15726, +15820=>15727, +59902=>15727, +29482=>15728, +57990=>15728, +59909=>15728, +30048=>15729, +59912=>15729, +22586=>15730, +59920=>15730, +33446=>15731, +59932=>15731, +27018=>15732, +59940=>15732, +24803=>15733, +59944=>15733, +20206=>15734, +59984=>15734, +39364=>15735, +60002=>15735, +40639=>15736, +60023=>15736, +21249=>15737, +60025=>15737, +26528=>15738, +60038=>15738, +24808=>15739, +60046=>15739, +20916=>15740, +60053=>15740, +31363=>15741, +60064=>15741, +39994=>15742, +60075=>15742, +31432=>15743, +60093=>15743, +26906=>15744, +60098=>15744, +22956=>15745, +60100=>15745, +22592=>15746, +60102=>15746, +21610=>15747, +60114=>15747, +24807=>15748, +60123=>15748, +22138=>15749, +60125=>15749, +26965=>15750, +60132=>15750, +39983=>15751, +60133=>15751, +34725=>15752, +60134=>15752, +23584=>15753, +60141=>15753, +24075=>15754, +60143=>15754, +26398=>15755, +60147=>15755, +33965=>15756, +60157=>15756, +35713=>15757, +60161=>15757, +20088=>15758, +60166=>15758, +25283=>15759, +60176=>15759, +26709=>15760, +60180=>15760, +33533=>15762, +60190=>15762, +35237=>15763, +60194=>15763, +36768=>15764, +60196=>15764, +38840=>15765, +60198=>15765, +38983=>15766, +60200=>15766, +39613=>15767, +60201=>15767, +24497=>15768, +60218=>15768, +26184=>15769, +60219=>15769, +26303=>15770, +60220=>15770, +162425=>15771, +60221=>15771, +60225=>15773, +149946=>15773, +60230=>15776, +131910=>15776, +26382=>15777, +60232=>15777, +26904=>15778, +60233=>15778, +161367=>15779, +60235=>15779, +155618=>15780, +60236=>15780, +161278=>15781, +60239=>15781, +139418=>15782, +60240=>15782, +18640=>15783, +60241=>15783, +19128=>15784, +60242=>15784, +60244=>15785, +166554=>15785, +60247=>15786, +147515=>15786, +150085=>15787, +60250=>15787, +132554=>15788, +60251=>15788, +20946=>15789, +60252=>15789, +132625=>15790, +60253=>15790, +22943=>15791, +60254=>15791, +138920=>15792, +60255=>15792, +15294=>15793, +60256=>15793, +146687=>15794, +60257=>15794, +14747=>15795, +60262=>15795, +165352=>15796, +60264=>15796, +170441=>15797, +60265=>15797, +14178=>15798, +60266=>15798, +139715=>15799, +60267=>15799, +35678=>15800, +60268=>15800, +166734=>15801, +60269=>15801, +29193=>15803, +60274=>15803, +60276=>15804, +134264=>15804, +132985=>15805, +60280=>15805, +36570=>15806, +60281=>15806, +21135=>15807, +60283=>15807, +29041=>15808, +60285=>15808, +147274=>15809, +60288=>15809, +150183=>15810, +60289=>15810, +21948=>15811, +60290=>15811, +60293=>15812, +158546=>15812, +13427=>15813, +60295=>15813, +60297=>15814, +161330=>15814, +18200=>15815, +60299=>15815, +60303=>15816, +149823=>15816, +20582=>15817, +60305=>15817, +13563=>15818, +60306=>15818, +144332=>15819, +60307=>15819, +18300=>15821, +60310=>15821, +166216=>15822, +60311=>15822, +60315=>15823, +138640=>15823, +162834=>15825, +60320=>15825, +36950=>15826, +60321=>15826, +151450=>15827, +60323=>15827, +35682=>15828, +60324=>15828, +23899=>15829, +60327=>15829, +158711=>15830, +60328=>15830, +137500=>15832, +60331=>15832, +35562=>15833, +60332=>15833, +150006=>15834, +60333=>15834, +60335=>15835, +147439=>15835, +19392=>15836, +60337=>15836, +141083=>15837, +60340=>15837, +37989=>15838, +60341=>15838, +153569=>15839, +60342=>15839, +24981=>15840, +60343=>15840, +23079=>15841, +60344=>15841, +194765=>15842, +60345=>15842, +194566=>15843, +60348=>15844, +148769=>15844, +20074=>15845, +60350=>15845, +149812=>15846, +60351=>15846, +38486=>15847, +60352=>15847, +28047=>15848, +60353=>15848, +158909=>15849, +60354=>15849, +35191=>15850, +60356=>15850, +60359=>15851, +156689=>15851, +31554=>15853, +60363=>15853, +168128=>15854, +60364=>15854, +133649=>15855, +60365=>15855, +31301=>15857, +60369=>15857, +39462=>15858, +60372=>15858, +13919=>15859, +60374=>15859, +156777=>15860, +60375=>15860, +131105=>15861, +60376=>15861, +31107=>15862, +60377=>15862, +23852=>15863, +60380=>15863, +144665=>15864, +60381=>15864, +18128=>15866, +60384=>15866, +30011=>15867, +60386=>15867, +34917=>15868, +60387=>15868, +22710=>15869, +60389=>15869, +14108=>15870, +60390=>15870, +140685=>15871, +60391=>15871, +15444=>15872, +60394=>15872, +37505=>15873, +60397=>15873, +139642=>15874, +60398=>15874, +37680=>15875, +60400=>15875, +149968=>15876, +60402=>15876, +27705=>15877, +60403=>15877, +134904=>15878, +60406=>15878, +34855=>15879, +60407=>15879, +35061=>15880, +60408=>15880, +141606=>15881, +60409=>15881, +164979=>15882, +60410=>15882, +137137=>15883, +60411=>15883, +28344=>15884, +60412=>15884, +150058=>15885, +60413=>15885, +137248=>15886, +60414=>15886, +14756=>15887, +60415=>15887, +17727=>15890, +60419=>15890, +26294=>15891, +60420=>15891, +171181=>15892, +60421=>15892, +170148=>15893, +60422=>15893, +35139=>15894, +60423=>15894, +16607=>15895, +60427=>15895, +136714=>15896, +60428=>15896, +14753=>15897, +60429=>15897, +145199=>15898, +60430=>15898, +164072=>15899, +60431=>15899, +136133=>15900, +60432=>15900, +29101=>15901, +60433=>15901, +33638=>15902, +60434=>15902, +60436=>15903, +168360=>15903, +19639=>15905, +60438=>15905, +159919=>15906, +60439=>15906, +166315=>15907, +60440=>15907, +147834=>15908, +60445=>15908, +31555=>15909, +60446=>15909, +31102=>15910, +60447=>15910, +28597=>15911, +60449=>15911, +172767=>15912, +60450=>15912, +27139=>15913, +60451=>15913, +164632=>15914, +60452=>15914, +21410=>15915, +60453=>15915, +159239=>15916, +60454=>15916, +37823=>15917, +60455=>15917, +26678=>15918, +60456=>15918, +38749=>15919, +59389=>15919, +60457=>15919, +164207=>15920, +60458=>15920, +158133=>15921, +60460=>15921, +136173=>15922, +60461=>15922, +143919=>15923, +60462=>15923, +23941=>15924, +60464=>15924, +166960=>15925, +60465=>15925, +22293=>15926, +60467=>15926, +38947=>15927, +60468=>15927, +166217=>15928, +60469=>15928, +23979=>15929, +60470=>15929, +149896=>15930, +60471=>15930, +26046=>15931, +60472=>15931, +27093=>15932, +60473=>15932, +21458=>15933, +60474=>15933, +150181=>15934, +60475=>15934, +147329=>15935, +60476=>15935, +15377=>15936, +60477=>15936, +26422=>15937, +60478=>15937, +60482=>15938, +139169=>15938, +13770=>15939, +60490=>15939, +18682=>15940, +60493=>15940, +30728=>15942, +60496=>15942, +37461=>15943, +60497=>15943, +17394=>15944, +60499=>15944, +17375=>15945, +60501=>15945, +23032=>15946, +60505=>15946, +22155=>15948, +60518=>15948, +60520=>15949, +169449=>15949, +36882=>15950, +60541=>15950, +21953=>15951, +60546=>15951, +17673=>15952, +60551=>15952, +32383=>15953, +60552=>15953, +28502=>15954, +60553=>15954, +27313=>15955, +60554=>15955, +13540=>15956, +60556=>15956, +161949=>15957, +60558=>15957, +14138=>15958, +60559=>15958, +60562=>15960, +163876=>15960, +60565=>15961, +162366=>15961, +15851=>15962, +60567=>15962, +60569=>15963, +146615=>15963, +156248=>15964, +60574=>15964, +22207=>15965, +60575=>15965, +36366=>15966, +60577=>15966, +23405=>15967, +60578=>15967, +25566=>15968, +60581=>15968, +25904=>15970, +60585=>15970, +22061=>15971, +60586=>15971, +21530=>15972, +60588=>15972, +171416=>15973, +60591=>15973, +19581=>15974, +60592=>15974, +22050=>15975, +60593=>15975, +22046=>15976, +60594=>15976, +32585=>15977, +60595=>15977, +22901=>15978, +60597=>15978, +146752=>15979, +60598=>15979, +34672=>15980, +60599=>15980, +33047=>15981, +60604=>15981, +40286=>15982, +60605=>15982, +36120=>15983, +60606=>15983, +30267=>15984, +60607=>15984, +40005=>15985, +60608=>15985, +30286=>15986, +60609=>15986, +30649=>15987, +60610=>15987, +37701=>15988, +60611=>15988, +21554=>15989, +60612=>15989, +33096=>15990, +60613=>15990, +33527=>15991, +60614=>15991, +22053=>15992, +60615=>15992, +33074=>15993, +60616=>15993, +33816=>15994, +60617=>15994, +32957=>15995, +60618=>15995, +21994=>15996, +60619=>15996, +31074=>15997, +60620=>15997, +22083=>15998, +60621=>15998, +21526=>15999, +60622=>15999, +134813=>16000, +60623=>16000, +13774=>16001, +60624=>16001, +22021=>16002, +57509=>16002, +60625=>16002, +22001=>16003, +60626=>16003, +26353=>16004, +60627=>16004, +164578=>16005, +60628=>16005, +13869=>16006, +60629=>16006, +30004=>16007, +60630=>16007, +22000=>16008, +60631=>16008, +21946=>16009, +60632=>16009, +21655=>16010, +60633=>16010, +21874=>16011, +60634=>16011, +134209=>16012, +60635=>16012, +134294=>16013, +60636=>16013, +24272=>16014, +57652=>16014, +60637=>16014, +134774=>16015, +60639=>16015, +142434=>16016, +60640=>16016, +134818=>16017, +60641=>16017, +40619=>16018, +60642=>16018, +32090=>16019, +60643=>16019, +135285=>16021, +60645=>16021, +25245=>16022, +60646=>16022, +38765=>16023, +60647=>16023, +21652=>16024, +60648=>16024, +36045=>16025, +60649=>16025, +29174=>16026, +60650=>16026, +37238=>16027, +60651=>16027, +25596=>16028, +60652=>16028, +25529=>16029, +60653=>16029, +25598=>16030, +60654=>16030, +21865=>16031, +60655=>16031, +142147=>16032, +60656=>16032, +40050=>16033, +60657=>16033, +143027=>16034, +60658=>16034, +20890=>16035, +60659=>16035, +13535=>16036, +60660=>16036, +134567=>16037, +60661=>16037, +20903=>16038, +60662=>16038, +21581=>16039, +60663=>16039, +21790=>16040, +60664=>16040, +21779=>16041, +60665=>16041, +30310=>16042, +60666=>16042, +36397=>16043, +60667=>16043, +157834=>16044, +60668=>16044, +30129=>16045, +60669=>16045, +32950=>16046, +60670=>16046, +34820=>16047, +60671=>16047, +35015=>16049, +60673=>16049, +33206=>16050, +60674=>16050, +33820=>16051, +60675=>16051, +17644=>16052, +60677=>16052, +29444=>16053, +60678=>16053, +33547=>16054, +60681=>16054, +22139=>16055, +60683=>16055, +37232=>16056, +60690=>16056, +37384=>16057, +60692=>16057, +134905=>16058, +60696=>16058, +29286=>16059, +60697=>16059, +18254=>16060, +60699=>16060, +60701=>16061, +163833=>16061, +16634=>16062, +60703=>16062, +40029=>16063, +60704=>16063, +25887=>16064, +60705=>16064, +18675=>16065, +60707=>16065, +149472=>16066, +60708=>16066, +171388=>16067, +60709=>16067, +60713=>16069, +161187=>16069, +60715=>16070, +155720=>16071, +60716=>16071, +29091=>16072, +60718=>16072, +32398=>16073, +60719=>16073, +40272=>16074, +60720=>16074, +13687=>16075, +60723=>16075, +27826=>16076, +60725=>16076, +21351=>16077, +60726=>16077, +14812=>16078, +60728=>16078, +60731=>16079, +149016=>16079, +33325=>16080, +60734=>16080, +21579=>16081, +60735=>16081, +60739=>16082, +14930=>16083, +60740=>16083, +29556=>16084, +60742=>16084, +171692=>16085, +60743=>16085, +19721=>16086, +60744=>16086, +39917=>16087, +60745=>16087, +19547=>16089, +60748=>16089, +171998=>16090, +60751=>16090, +33884=>16091, +60752=>16091, +60754=>16092, +160434=>16092, +25390=>16093, +60757=>16093, +32037=>16094, +60758=>16094, +14890=>16095, +60761=>16095, +36872=>16096, +60762=>16096, +21196=>16097, +60763=>16097, +15988=>16098, +60764=>16098, +13946=>16099, +60765=>16099, +17897=>16100, +60766=>16100, +132238=>16101, +60767=>16101, +30272=>16102, +60768=>16102, +23280=>16103, +60769=>16103, +134838=>16104, +60770=>16104, +30842=>16105, +60771=>16105, +18358=>16106, +163630=>16106, +60772=>16106, +22695=>16107, +60773=>16107, +16575=>16108, +60774=>16108, +22140=>16109, +60775=>16109, +39819=>16110, +60776=>16110, +23924=>16111, +60777=>16111, +30292=>16112, +60778=>16112, +173108=>16113, +60779=>16113, +40581=>16114, +60780=>16114, +19681=>16115, +60781=>16115, +14331=>16117, +60783=>16117, +24857=>16118, +60784=>16118, +148466=>16119, +60786=>16119, +60787=>16120, +22109=>16121, +60788=>16121, +171526=>16122, +60792=>16122, +21044=>16123, +60793=>16123, +13741=>16124, +60795=>16124, +40316=>16126, +60797=>16126, +31830=>16127, +60798=>16127, +39737=>16128, +60799=>16128, +22494=>16129, +60800=>16129, +23635=>16130, +60802=>16130, +25811=>16131, +60803=>16131, +169168=>16132, +60804=>16132, +156469=>16133, +60805=>16133, +34477=>16134, +60807=>16134, +134440=>16135, +60808=>16135, +134513=>16136, +60811=>16136, +60812=>16137, +20990=>16138, +60813=>16138, +139023=>16139, +60814=>16139, +23950=>16140, +60815=>16140, +38659=>16141, +60816=>16141, +138705=>16142, +60817=>16142, +40577=>16143, +60818=>16143, +36940=>16144, +60819=>16144, +31519=>16145, +60820=>16145, +39682=>16146, +60821=>16146, +23761=>16147, +60822=>16147, +31651=>16148, +60823=>16148, +25192=>16149, +60824=>16149, +25397=>16150, +60825=>16150, +39679=>16151, +60826=>16151, +31695=>16152, +60827=>16152, +39722=>16153, +60828=>16153, +31870=>16154, +60829=>16154, +31810=>16156, +60831=>16156, +31878=>16157, +60832=>16157, +39957=>16158, +60833=>16158, +31740=>16159, +60834=>16159, +39689=>16160, +60835=>16160, +39982=>16162, +40794=>16163, +60839=>16163, +21875=>16164, +60840=>16164, +23491=>16165, +60841=>16165, +20477=>16166, +60842=>16166, +40600=>16167, +60843=>16167, +20466=>16168, +60844=>16168, +21088=>16169, +60845=>16169, +21201=>16170, +60847=>16170, +22375=>16171, +60848=>16171, +20566=>16172, +60849=>16172, +22967=>16173, +60850=>16173, +24082=>16174, +60851=>16174, +38856=>16175, +60852=>16175, +40363=>16176, +60853=>16176, +36700=>16177, +60854=>16177, +21609=>16178, +60855=>16178, +38836=>16179, +60856=>16179, +39232=>16180, +60857=>16180, +38842=>16181, +60858=>16181, +21292=>16182, +60859=>16182, +24880=>16183, +60860=>16183, +26924=>16184, +60861=>16184, +21466=>16185, +60862=>16185, +39946=>16186, +60863=>16186, +40194=>16187, +60864=>16187, +19515=>16188, +60865=>16188, +38465=>16189, +60866=>16189, +27008=>16190, +60867=>16190, +20646=>16191, +60868=>16191, +30022=>16192, +60869=>16192, +137069=>16193, +60870=>16193, +39386=>16194, +60871=>16194, +21107=>16195, +60872=>16195, +60873=>16196, +37209=>16197, +60874=>16197, +38529=>16198, +60875=>16198, +37212=>16199, +60876=>16199, +60877=>16200, +37201=>16201, +60878=>16201, +167575=>16202, +60879=>16202, +25471=>16203, +60880=>16203, +27338=>16204, +60882=>16204, +22033=>16205, +60883=>16205, +37262=>16206, +60884=>16206, +30074=>16207, +60885=>16207, +25221=>16208, +60886=>16208, +29519=>16209, +60888=>16209, +31856=>16210, +60889=>16210, +154657=>16211, +60890=>16211, +60892=>16212, +30422=>16213, +60894=>16213, +39837=>16214, +60895=>16214, +20010=>16215, +60896=>16215, +134356=>16216, +60897=>16216, +33726=>16217, +60898=>16217, +34882=>16218, +60899=>16218, +60900=>16219, +23626=>16220, +60901=>16220, +27072=>16221, +60902=>16221, +21023=>16224, +60905=>16224, +24053=>16225, +60906=>16225, +20174=>16226, +60907=>16226, +27697=>16227, +60908=>16227, +131570=>16228, +60909=>16228, +20281=>16229, +60910=>16229, +21660=>16230, +60911=>16230, +21146=>16232, +60913=>16232, +36226=>16233, +60914=>16233, +13822=>16234, +60915=>16234, +13811=>16236, +60917=>16236, +60918=>16237, +27474=>16238, +60919=>16238, +37244=>16239, +60920=>16239, +40869=>16240, +60921=>16240, +39831=>16241, +60922=>16241, +38958=>16242, +60923=>16242, +39092=>16243, +60924=>16243, +39610=>16244, +60925=>16244, +40616=>16245, +60926=>16245, +40580=>16246, +60927=>16246, +31508=>16247, +60929=>16247, +60930=>16248, +27642=>16249, +60931=>16249, +34840=>16250, +60932=>16250, +32632=>16251, +60933=>16251, +60934=>16252, +22048=>16253, +60935=>16253, +173642=>16254, +60936=>16254, +36471=>16255, +60937=>16255, +40787=>16256, +60938=>16256, +60939=>16257, +36308=>16258, +60940=>16258, +36431=>16259, +60941=>16259, +40476=>16260, +60942=>16260, +36353=>16261, +60943=>16261, +25218=>16262, +60944=>16262, +164733=>16263, +60945=>16263, +36392=>16264, +60946=>16264, +36469=>16265, +60947=>16265, +31443=>16266, +60948=>16266, +31294=>16267, +60950=>16267, +30936=>16268, +60951=>16268, +27882=>16269, +60952=>16269, +35431=>16270, +60953=>16270, +30215=>16271, +60954=>16271, +40742=>16272, +60956=>16272, +27854=>16273, +60957=>16273, +34774=>16274, +60958=>16274, +30147=>16275, +60959=>16275, +172722=>16276, +60960=>16276, +30803=>16277, +60961=>16277, +36108=>16278, +60963=>16278, +29410=>16279, +60964=>16279, +29553=>16280, +60965=>16280, +35629=>16281, +60966=>16281, +29442=>16282, +60967=>16282, +29937=>16283, +60968=>16283, +36075=>16284, +60969=>16284, +150203=>16285, +60970=>16285, +34351=>16286, +60971=>16286, +24506=>16287, +60972=>16287, +34976=>16288, +60973=>16288, +17591=>16289, +60974=>16289, +60975=>16290, +159237=>16291, +60977=>16291, +60978=>16292, +35454=>16293, +60979=>16293, +140571=>16294, +60980=>16294, +60981=>16295, +24829=>16296, +60982=>16296, +30311=>16297, +60983=>16297, +39639=>16298, +60984=>16298, +40260=>16299, +60985=>16299, +37742=>16300, +58859=>16300, +60986=>16300, +39823=>16301, +60987=>16301, +34805=>16302, +60988=>16302, +60989=>16303, +36087=>16305, +60991=>16305, +29484=>16306, +60992=>16306, +38689=>16307, +60993=>16307, +39856=>16308, +60994=>16308, +13782=>16309, +60995=>16309, +29362=>16310, +60996=>16310, +19463=>16311, +60997=>16311, +31825=>16312, +60998=>16312, +39242=>16313, +60999=>16313, +24921=>16314, +61001=>16314, +19460=>16315, +61002=>16315, +40598=>16316, +61003=>16316, +24957=>16317, +61004=>16317, +61005=>16318, +22367=>16319, +61006=>16319, +24943=>16320, +61007=>16320, +25254=>16321, +61008=>16321, +25145=>16322, +61009=>16322, +14940=>16324, +61011=>16324, +25058=>16325, +61012=>16325, +21418=>16326, +61013=>16326, +25444=>16327, +61015=>16327, +26626=>16328, +61016=>16328, +13778=>16329, +61017=>16329, +23895=>16330, +61018=>16330, +36826=>16331, +61020=>16331, +167481=>16332, +61021=>16332, +61022=>16333, +20697=>16334, +61023=>16334, +30982=>16335, +61025=>16335, +21298=>16336, +61026=>16336, +38456=>16337, +61027=>16337, +134971=>16338, +61028=>16338, +16485=>16339, +61029=>16339, +61030=>16340, +30718=>16341, +61031=>16341, +61032=>16342, +31938=>16343, +61033=>16343, +155418=>16344, +61034=>16344, +31962=>16345, +61035=>16345, +31277=>16346, +61036=>16346, +32870=>16347, +61037=>16347, +32867=>16348, +61038=>16348, +32077=>16349, +61039=>16349, +29957=>16350, +61040=>16350, +29938=>16351, +61041=>16351, +35220=>16352, +61042=>16352, +33306=>16353, +61043=>16353, +26380=>16354, +61044=>16354, +32866=>16355, +61045=>16355, +160902=>16356, +61046=>16356, +32859=>16357, +61047=>16357, +29936=>16358, +61048=>16358, +33027=>16359, +61049=>16359, +30500=>16360, +61050=>16360, +35209=>16361, +61051=>16361, +157644=>16362, +61052=>16362, +30035=>16363, +61053=>16363, +34729=>16364, +61055=>16364, +34766=>16365, +61056=>16365, +33224=>16366, +61057=>16366, +34700=>16367, +61058=>16367, +35401=>16368, +61059=>16368, +36013=>16369, +61060=>16369, +35651=>16370, +61061=>16370, +30507=>16371, +61062=>16371, +29944=>16372, +61063=>16372, +34010=>16373, +61064=>16373, +27058=>16374, +61066=>16374, +36262=>16375, +61067=>16375, +61068=>16376, +35241=>16377, +58392=>16377, +61069=>16377, +28089=>16379, +61071=>16379, +34753=>16380, +61072=>16380, +147473=>16381, +61073=>16381, +29927=>16382, +61074=>16382, +15835=>16383, +61075=>16383, +29046=>16384, +61076=>16384, +24740=>16385, +57702=>16385, +61077=>16385, +24988=>16386, +61078=>16386, +15569=>16387, +61079=>16387, +24695=>16389, +61081=>16389, +61082=>16390, +32625=>16391, +61083=>16391, +194850=>16392, +24809=>16393, +61086=>16393, +19326=>16394, +61087=>16394, +132423=>16395, +57344=>16395, +37595=>16396, +57345=>16396, +132575=>16397, +57346=>16397, +147397=>16398, +57347=>16398, +34124=>16399, +57348=>16399, +17077=>16400, +57349=>16400, +29679=>16401, +57350=>16401, +20917=>16402, +57351=>16402, +13897=>16403, +57352=>16403, +149826=>16404, +57353=>16404, +166372=>16405, +57354=>16405, +37700=>16406, +57355=>16406, +137691=>16407, +57356=>16407, +33518=>16408, +57357=>16408, +146632=>16409, +57358=>16409, +30780=>16410, +57359=>16410, +26436=>16411, +57360=>16411, +25311=>16412, +57361=>16412, +149811=>16413, +57362=>16413, +166314=>16414, +57363=>16414, +131744=>16415, +57364=>16415, +158643=>16416, +57365=>16416, +135941=>16417, +57366=>16417, +20395=>16418, +57367=>16418, +140525=>16419, +57368=>16419, +20488=>16420, +57369=>16420, +159017=>16421, +57370=>16421, +162436=>16422, +57371=>16422, +144896=>16423, +57372=>16423, +150193=>16424, +57373=>16424, +140563=>16425, +57374=>16425, +131966=>16427, +57376=>16427, +24484=>16428, +57377=>16428, +131968=>16429, +57378=>16429, +131911=>16430, +57379=>16430, +28379=>16431, +57380=>16431, +132127=>16432, +57381=>16432, +20702=>16433, +20737=>16434, +57383=>16434, +13434=>16435, +57384=>16435, +20750=>16436, +57385=>16436, +39020=>16437, +57386=>16437, +14147=>16438, +57387=>16438, +33814=>16439, +57388=>16439, +149924=>16440, +57389=>16440, +132231=>16441, +57390=>16441, +20832=>16442, +57391=>16442, +144308=>16443, +57392=>16443, +20842=>16444, +57393=>16444, +134143=>16445, +57394=>16445, +139516=>16446, +57395=>16446, +131813=>16447, +57396=>16447, +140592=>16448, +57397=>16448, +132494=>16449, +57398=>16449, +143923=>16450, +57399=>16450, +137603=>16451, +57400=>16451, +23426=>16452, +57401=>16452, +34685=>16453, +57402=>16453, +132531=>16454, +57403=>16454, +146585=>16455, +57404=>16455, +20914=>16456, +57405=>16456, +20920=>16457, +57406=>16457, +40244=>16458, +57407=>16458, +20937=>16459, +57408=>16459, +20943=>16460, +57409=>16460, +20945=>16461, +57410=>16461, +15580=>16462, +57411=>16462, +20947=>16463, +57412=>16463, +150182=>16464, +57413=>16464, +20915=>16465, +57414=>16465, +20973=>16468, +57417=>16468, +33741=>16469, +57418=>16469, +26942=>16470, +57419=>16470, +145197=>16471, +57420=>16471, +24443=>16472, +57421=>16472, +21003=>16473, +57422=>16473, +21030=>16474, +57423=>16474, +21052=>16475, +57424=>16475, +21173=>16476, +57425=>16476, +21079=>16477, +57426=>16477, +21140=>16478, +57427=>16478, +21177=>16479, +57428=>16479, +21189=>16480, +57429=>16480, +31765=>16481, +57430=>16481, +34114=>16482, +57431=>16482, +21216=>16483, +57432=>16483, +34317=>16484, +57433=>16484, +158483=>16485, +57434=>16485, +194601=>16486, +166622=>16487, +57436=>16487, +21833=>16488, +57437=>16488, +28377=>16489, +57438=>16489, +147328=>16490, +57439=>16490, +133460=>16491, +57440=>16491, +147436=>16492, +57441=>16492, +21299=>16493, +57442=>16493, +134114=>16495, +57444=>16495, +27851=>16496, +57445=>16496, +136998=>16497, +57446=>16497, +26651=>16498, +57447=>16498, +29653=>16499, +57448=>16499, +24650=>16500, +57449=>16500, +16042=>16501, +57450=>16501, +14540=>16502, +57451=>16502, +136936=>16503, +57452=>16503, +29149=>16504, +57453=>16504, +17570=>16505, +57454=>16505, +21357=>16506, +57455=>16506, +21364=>16507, +57456=>16507, +165547=>16508, +57457=>16508, +21374=>16509, +57458=>16509, +194610=>16510, +136598=>16511, +57460=>16511, +136723=>16512, +57461=>16512, +30694=>16513, +57462=>16513, +21395=>16514, +57463=>16514, +166555=>16515, +57464=>16515, +21408=>16516, +57465=>16516, +21419=>16517, +57466=>16517, +21422=>16518, +57467=>16518, +29607=>16519, +57468=>16519, +153458=>16520, +57469=>16520, +16217=>16521, +57470=>16521, +29596=>16522, +57471=>16522, +21441=>16523, +57472=>16523, +21445=>16524, +57473=>16524, +27721=>16525, +57474=>16525, +20041=>16526, +57475=>16526, +22526=>16527, +57476=>16527, +21465=>16528, +57477=>16528, +15019=>16529, +57478=>16529, +134031=>16530, +57479=>16530, +21472=>16531, +57480=>16531, +147435=>16532, +57481=>16532, +142755=>16533, +57482=>16533, +21494=>16534, +57483=>16534, +134263=>16535, +57484=>16535, +21523=>16536, +57485=>16536, +28793=>16537, +57486=>16537, +21803=>16538, +57487=>16538, +26199=>16539, +57488=>16539, +27995=>16540, +57489=>16540, +21613=>16541, +57490=>16541, +158547=>16542, +57491=>16542, +134516=>16543, +57492=>16543, +21853=>16544, +57493=>16544, +21647=>16545, +57494=>16545, +21668=>16546, +57495=>16546, +18342=>16547, +57496=>16547, +136973=>16548, +57497=>16548, +134877=>16549, +57498=>16549, +15796=>16550, +57499=>16550, +134477=>16551, +57500=>16551, +166332=>16552, +57501=>16552, +140952=>16553, +57502=>16553, +21831=>16554, +57503=>16554, +19693=>16555, +57504=>16555, +21551=>16556, +57505=>16556, +29719=>16557, +57506=>16557, +21894=>16558, +57507=>16558, +21929=>16559, +57508=>16559, +137431=>16561, +57510=>16561, +147514=>16562, +57511=>16562, +17746=>16563, +57512=>16563, +148533=>16564, +57513=>16564, +26291=>16565, +57514=>16565, +135348=>16566, +57515=>16566, +22071=>16567, +57516=>16567, +26317=>16568, +57517=>16568, +144010=>16569, +57518=>16569, +26276=>16570, +57519=>16570, +22093=>16572, +57521=>16572, +22095=>16573, +57522=>16573, +30961=>16574, +57523=>16574, +22257=>16575, +57524=>16575, +38791=>16576, +57525=>16576, +21502=>16577, +57526=>16577, +22272=>16578, +57527=>16578, +22255=>16579, +57528=>16579, +22253=>16580, +57529=>16580, +166758=>16581, +57530=>16581, +13859=>16582, +57531=>16582, +135759=>16583, +57532=>16583, +22342=>16584, +57533=>16584, +147877=>16585, +57534=>16585, +27758=>16586, +57535=>16586, +28811=>16587, +57536=>16587, +22338=>16588, +57537=>16588, +14001=>16589, +57538=>16589, +158846=>16590, +57539=>16590, +22502=>16591, +57540=>16591, +136214=>16592, +57541=>16592, +22531=>16593, +57542=>16593, +136276=>16594, +57543=>16594, +148323=>16595, +57544=>16595, +22566=>16596, +57545=>16596, +150517=>16597, +57546=>16597, +22559=>16598, +22698=>16599, +57548=>16599, +13665=>16600, +57549=>16600, +22752=>16601, +57550=>16601, +22748=>16602, +57551=>16602, +135740=>16603, +57552=>16603, +22779=>16604, +57553=>16604, +23551=>16605, +57554=>16605, +22339=>16606, +57555=>16606, +172368=>16607, +57556=>16607, +148088=>16608, +57557=>16608, +37843=>16609, +57558=>16609, +13729=>16610, +57559=>16610, +22815=>16611, +57560=>16611, +26790=>16612, +57561=>16612, +14019=>16613, +57562=>16613, +28249=>16614, +57563=>16614, +136766=>16615, +57564=>16615, +23076=>16616, +57565=>16616, +136850=>16618, +57567=>16618, +34053=>16619, +57568=>16619, +22985=>16620, +57569=>16620, +134478=>16621, +57570=>16621, +158849=>16622, +57571=>16622, +159018=>16623, +57572=>16623, +137180=>16624, +57573=>16624, +23001=>16625, +57574=>16625, +137211=>16626, +57575=>16626, +137138=>16627, +57576=>16627, +159142=>16628, +57577=>16628, +28017=>16629, +57578=>16629, +137256=>16630, +57579=>16630, +136917=>16631, +57580=>16631, +23033=>16632, +57581=>16632, +159301=>16633, +57582=>16633, +23211=>16634, +57583=>16634, +23139=>16635, +57584=>16635, +14054=>16636, +57585=>16636, +149929=>16637, +57586=>16637, +14088=>16639, +57588=>16639, +23190=>16640, +57589=>16640, +29797=>16641, +57590=>16641, +23251=>16642, +57591=>16642, +159649=>16643, +57592=>16643, +140628=>16644, +57593=>16644, +137489=>16645, +57595=>16645, +14130=>16646, +57596=>16646, +136888=>16647, +57597=>16647, +24195=>16648, +57598=>16648, +21200=>16649, +57599=>16649, +23414=>16650, +57600=>16650, +25992=>16651, +57601=>16651, +23420=>16652, +57602=>16652, +162318=>16653, +57603=>16653, +16388=>16654, +57604=>16654, +18525=>16655, +57605=>16655, +131588=>16656, +57606=>16656, +23509=>16657, +57607=>16657, +137780=>16658, +57609=>16658, +154060=>16659, +57610=>16659, +132517=>16660, +57611=>16660, +23539=>16661, +57612=>16661, +23453=>16662, +57613=>16662, +19728=>16663, +57614=>16663, +23557=>16664, +57615=>16664, +138052=>16665, +57616=>16665, +23571=>16666, +57617=>16666, +29646=>16667, +57618=>16667, +23572=>16668, +57619=>16668, +138405=>16669, +57620=>16669, +158504=>16670, +57621=>16670, +23625=>16671, +57622=>16671, +18653=>16672, +57623=>16672, +23685=>16673, +57624=>16673, +23785=>16674, +57625=>16674, +23791=>16675, +57626=>16675, +23947=>16676, +57627=>16676, +138745=>16677, +57628=>16677, +138807=>16678, +57629=>16678, +23824=>16679, +57630=>16679, +23832=>16680, +57631=>16680, +23878=>16681, +57632=>16681, +138916=>16682, +57633=>16682, +23738=>16683, +57634=>16683, +24023=>16684, +57635=>16684, +33532=>16685, +57636=>16685, +14381=>16686, +57637=>16686, +149761=>16687, +57638=>16687, +139337=>16688, +57639=>16688, +139635=>16689, +57640=>16689, +33415=>16690, +57641=>16690, +14390=>16691, +57642=>16691, +15298=>16692, +57643=>16692, +24110=>16693, +57644=>16693, +27274=>16694, +57645=>16694, +57647=>16696, +148668=>16697, +57648=>16697, +134355=>16698, +57649=>16698, +21414=>16699, +57650=>16699, +20151=>16700, +57651=>16700, +21416=>16702, +57653=>16702, +137073=>16703, +57654=>16703, +24073=>16704, +57655=>16704, +57656=>16705, +164994=>16706, +57657=>16706, +24313=>16707, +57658=>16707, +24315=>16708, +57659=>16708, +14496=>16709, +57660=>16709, +24316=>16710, +57661=>16710, +26686=>16711, +57662=>16711, +37915=>16712, +57663=>16712, +24333=>16713, +57664=>16713, +131521=>16714, +57665=>16714, +194708=>16715, +57666=>16715, +15070=>16716, +57667=>16716, +135994=>16717, +57669=>16717, +24378=>16718, +57670=>16718, +157832=>16719, +57671=>16719, +140240=>16720, +57672=>16720, +140401=>16721, +57674=>16721, +24419=>16722, +57675=>16722, +159342=>16723, +57677=>16723, +24434=>16724, +57678=>16724, +37696=>16725, +57679=>16725, +166454=>16726, +57680=>16726, +24487=>16727, +57681=>16727, +23990=>16728, +57682=>16728, +15711=>16729, +57683=>16729, +152144=>16730, +57684=>16730, +139114=>16731, +57685=>16731, +159992=>16732, +57686=>16732, +140904=>16733, +57687=>16733, +37334=>16734, +57688=>16734, +131742=>16735, +57689=>16735, +166441=>16736, +57690=>16736, +24625=>16737, +57691=>16737, +26245=>16738, +57692=>16738, +14691=>16739, +57694=>16739, +15815=>16740, +57695=>16740, +13881=>16741, +57696=>16741, +22416=>16742, +57697=>16742, +141236=>16743, +57698=>16743, +31089=>16744, +57699=>16744, +15936=>16745, +57700=>16745, +24734=>16746, +57701=>16746, +24810=>16748, +149890=>16749, +57704=>16749, +149903=>16750, +57705=>16750, +162387=>16751, +57706=>16751, +29860=>16752, +57707=>16752, +20705=>16753, +57708=>16753, +23200=>16754, +57709=>16754, +24932=>16755, +57710=>16755, +24898=>16756, +57712=>16756, +194726=>16757, +57713=>16757, +159442=>16758, +57714=>16758, +24961=>16759, +57715=>16759, +20980=>16760, +57716=>16760, +132694=>16761, +57717=>16761, +24967=>16762, +57718=>16762, +23466=>16763, +57719=>16763, +147383=>16764, +57720=>16764, +141407=>16765, +57721=>16765, +25043=>16766, +57722=>16766, +166813=>16767, +57723=>16767, +170333=>16768, +57724=>16768, +25040=>16769, +57725=>16769, +14642=>16770, +57726=>16770, +141696=>16771, +57727=>16771, +141505=>16772, +57728=>16772, +24611=>16773, +57729=>16773, +24924=>16774, +57730=>16774, +25886=>16775, +57731=>16775, +25483=>16776, +57732=>16776, +131352=>16777, +57733=>16777, +25285=>16778, +57734=>16778, +137072=>16779, +57735=>16779, +25301=>16780, +57736=>16780, +142861=>16781, +57737=>16781, +25452=>16782, +57738=>16782, +149983=>16783, +57739=>16783, +14871=>16784, +57740=>16784, +25656=>16785, +57741=>16785, +25592=>16786, +57742=>16786, +136078=>16787, +57743=>16787, +137212=>16788, +57744=>16788, +28554=>16789, +57746=>16789, +142902=>16790, +57747=>16790, +153373=>16792, +57750=>16792, +25825=>16793, +57751=>16793, +25829=>16794, +57752=>16794, +38011=>16795, +57753=>16795, +14950=>16796, +57754=>16796, +25658=>16797, +57755=>16797, +14935=>16798, +57756=>16798, +25933=>16799, +57757=>16799, +28438=>16800, +57758=>16800, +150056=>16801, +57759=>16801, +150051=>16802, +57760=>16802, +25989=>16803, +57761=>16803, +25965=>16804, +57762=>16804, +25951=>16805, +57763=>16805, +26037=>16807, +57765=>16807, +149824=>16808, +57766=>16808, +19255=>16809, +57767=>16809, +26065=>16810, +57768=>16810, +16600=>16811, +57769=>16811, +137257=>16812, +57770=>16812, +57771=>16813, +26083=>16814, +57772=>16814, +24543=>16815, +57773=>16815, +144384=>16816, +57774=>16816, +26136=>16817, +57775=>16817, +57776=>16818, +143863=>16818, +57777=>16819, +143864=>16819, +26180=>16820, +57778=>16820, +57779=>16821, +143780=>16821, +57780=>16822, +143781=>16822, +26187=>16823, +57781=>16823, +134773=>16824, +57782=>16824, +26215=>16825, +57783=>16825, +152038=>16826, +57784=>16826, +26227=>16827, +57785=>16827, +64018=>16828, +143921=>16829, +57788=>16829, +165364=>16830, +57789=>16830, +143816=>16831, +57790=>16831, +152339=>16832, +57791=>16832, +30661=>16833, +57792=>16833, +141559=>16834, +57793=>16834, +39332=>16835, +57794=>16835, +26370=>16836, +57795=>16836, +148380=>16837, +57796=>16837, +150049=>16838, +57797=>16838, +27130=>16839, +57799=>16839, +145346=>16840, +57800=>16840, +194779=>16841, +26471=>16842, +57802=>16842, +26466=>16843, +57803=>16843, +147917=>16844, +57804=>16844, +168173=>16845, +57805=>16845, +26583=>16846, +57806=>16846, +17641=>16847, +57807=>16847, +26658=>16848, +57808=>16848, +28240=>16849, +57809=>16849, +37436=>16850, +57810=>16850, +26625=>16851, +57811=>16851, +144358=>16852, +57812=>16852, +159136=>16853, +57813=>16853, +26717=>16854, +57814=>16854, +144495=>16855, +57815=>16855, +27105=>16856, +57816=>16856, +27147=>16857, +57817=>16857, +166623=>16858, +57818=>16858, +26995=>16859, +57819=>16859, +26819=>16860, +57820=>16860, +144845=>16861, +57821=>16861, +26881=>16862, +57822=>16862, +26880=>16863, +57823=>16863, +14849=>16864, +57825=>16864, +144956=>16865, +57826=>16865, +15232=>16866, +57827=>16866, +26540=>16867, +57828=>16867, +26977=>16868, +57829=>16868, +166474=>16869, +57830=>16869, +17148=>16870, +57831=>16870, +26934=>16871, +57832=>16871, +27032=>16872, +57833=>16872, +15265=>16873, +57834=>16873, +132041=>16874, +57835=>16874, +33635=>16875, +57836=>16875, +20624=>16876, +57837=>16876, +27129=>16877, +57838=>16877, +144985=>16878, +57839=>16878, +139562=>16879, +57840=>16879, +27205=>16880, +57841=>16880, +145155=>16881, +57842=>16881, +27293=>16882, +57843=>16882, +15347=>16883, +57844=>16883, +26545=>16884, +57845=>16884, +27336=>16885, +57846=>16885, +168348=>16886, +57847=>16886, +15373=>16887, +57848=>16887, +27421=>16888, +57849=>16888, +133411=>16889, +57850=>16889, +24798=>16890, +60308=>16890, +57851=>16890, +27445=>16891, +57852=>16891, +27508=>16892, +57853=>16892, +141261=>16893, +57854=>16893, +28341=>16894, +57855=>16894, +57856=>16895, +146139=>16895, +137560=>16897, +57858=>16897, +14144=>16898, +57859=>16898, +21537=>16899, +57860=>16899, +146266=>16900, +57861=>16900, +27617=>16901, +57862=>16901, +147196=>16902, +57863=>16902, +27612=>16903, +57864=>16903, +27703=>16904, +57865=>16904, +140427=>16905, +57866=>16905, +149745=>16906, +57867=>16906, +158545=>16907, +57868=>16907, +27738=>16908, +57869=>16908, +33318=>16909, +57870=>16909, +27769=>16910, +57871=>16910, +146876=>16911, +57872=>16911, +17605=>16912, +57873=>16912, +146877=>16913, +57874=>16913, +147876=>16914, +57875=>16914, +149772=>16915, +57876=>16915, +149760=>16916, +57877=>16916, +146633=>16917, +57878=>16917, +14053=>16918, +57879=>16918, +15595=>16919, +57880=>16919, +134450=>16920, +57881=>16920, +39811=>16921, +57882=>16921, +143865=>16922, +57883=>16922, +140433=>16923, +57884=>16923, +32655=>16924, +57885=>16924, +26679=>16925, +57886=>16925, +159013=>16926, +57887=>16926, +159137=>16927, +57888=>16927, +159211=>16928, +57889=>16928, +28054=>16929, +57890=>16929, +27996=>16930, +57891=>16930, +28284=>16931, +57892=>16931, +28420=>16932, +57893=>16932, +149887=>16933, +57894=>16933, +147589=>16934, +57895=>16934, +159346=>16935, +57896=>16935, +34099=>16936, +57897=>16936, +159604=>16937, +57898=>16937, +20935=>16938, +57899=>16938, +33838=>16941, +57902=>16941, +166689=>16942, +57903=>16942, +194824=>16943, +146991=>16944, +57905=>16944, +29779=>16945, +57906=>16945, +147330=>16946, +57907=>16946, +31180=>16947, +57908=>16947, +28239=>16948, +57909=>16948, +23185=>16949, +57910=>16949, +143435=>16950, +57911=>16950, +28664=>16951, +57912=>16951, +14093=>16952, +57913=>16952, +28573=>16953, +57914=>16953, +146992=>16954, +57915=>16954, +28410=>16955, +57916=>16955, +136343=>16956, +57917=>16956, +147517=>16957, +57918=>16957, +17749=>16958, +57919=>16958, +37872=>16959, +57920=>16959, +28484=>16960, +57921=>16960, +28508=>16961, +57922=>16961, +15694=>16962, +57923=>16962, +28532=>16963, +57924=>16963, +168304=>16964, +57925=>16964, +15675=>16965, +57926=>16965, +28575=>16966, +57927=>16966, +147780=>16967, +57928=>16967, +28627=>16968, +57929=>16968, +147601=>16969, +57930=>16969, +147797=>16970, +57931=>16970, +147513=>16971, +57932=>16971, +147440=>16972, +57933=>16972, +147380=>16973, +57934=>16973, +147775=>16974, +57935=>16974, +20959=>16975, +57936=>16975, +57937=>16976, +147798=>16976, +57938=>16977, +147799=>16977, +147776=>16978, +57939=>16978, +156125=>16979, +57940=>16979, +28747=>16980, +57941=>16980, +28798=>16981, +57942=>16981, +28839=>16982, +57943=>16982, +28876=>16984, +57945=>16984, +28885=>16985, +57946=>16985, +28886=>16986, +57947=>16986, +28895=>16987, +57948=>16987, +16644=>16988, +57949=>16988, +15848=>16989, +57950=>16989, +29108=>16990, +57951=>16990, +29078=>16991, +57952=>16991, +148087=>16992, +57953=>16992, +28971=>16993, +57954=>16993, +28997=>16994, +57955=>16994, +23176=>16995, +57956=>16995, +29002=>16996, +57957=>16996, +64072=>16997, +148325=>16998, +57960=>16998, +29007=>16999, +57961=>16999, +37730=>17000, +57962=>17000, +148161=>17001, +57963=>17001, +28972=>17002, +57964=>17002, +148570=>17003, +57965=>17003, +150055=>17004, +57966=>17004, +150050=>17005, +57967=>17005, +29114=>17006, +57968=>17006, +166888=>17007, +57969=>17007, +28861=>17008, +57970=>17008, +29198=>17009, +57971=>17009, +37954=>17010, +57972=>17010, +29205=>17011, +57973=>17011, +22801=>17012, +57974=>17012, +37955=>17013, +57975=>17013, +29220=>17014, +57976=>17014, +37697=>17015, +57977=>17015, +153093=>17016, +57978=>17016, +29230=>17017, +57979=>17017, +29248=>17018, +57980=>17018, +149876=>17019, +57981=>17019, +26813=>17020, +57982=>17020, +29269=>17021, +57983=>17021, +29271=>17022, +57984=>17022, +15957=>17023, +57985=>17023, +143428=>17024, +57986=>17024, +26637=>17025, +57987=>17025, +28477=>17026, +57988=>17026, +29314=>17027, +57989=>17027, +29483=>17029, +57991=>17029, +149539=>17030, +57992=>17030, +165931=>17031, +57993=>17031, +18669=>17032, +57994=>17032, +165892=>17033, +57995=>17033, +29480=>17034, +57996=>17034, +29486=>17035, +57997=>17035, +29647=>17036, +57998=>17036, +29610=>17037, +57999=>17037, +134202=>17038, +58000=>17038, +158254=>17039, +58001=>17039, +29641=>17040, +58002=>17040, +29769=>17041, +58003=>17041, +147938=>17042, +58004=>17042, +136935=>17043, +58005=>17043, +150052=>17044, +58006=>17044, +26147=>17045, +58007=>17045, +14021=>17046, +58008=>17046, +149943=>17047, +58009=>17047, +149901=>17048, +58010=>17048, +150011=>17049, +58011=>17049, +29687=>17050, +58012=>17050, +29717=>17051, +58013=>17051, +26883=>17052, +58014=>17052, +150054=>17053, +58015=>17053, +29753=>17054, +58016=>17054, +16087=>17055, +58018=>17055, +194863=>17056, +141485=>17057, +58020=>17057, +29792=>17058, +58021=>17058, +167602=>17059, +58022=>17059, +29767=>17060, +58023=>17060, +29668=>17061, +58024=>17061, +29814=>17062, +58025=>17062, +33721=>17063, +58026=>17063, +29804=>17064, +58027=>17064, +29812=>17065, +58029=>17065, +37873=>17066, +58030=>17066, +27180=>17067, +58031=>17067, +29826=>17068, +58032=>17068, +18771=>17069, +58033=>17069, +150156=>17070, +58034=>17070, +147807=>17071, +58035=>17071, +150137=>17072, +58036=>17072, +166799=>17073, +58037=>17073, +23366=>17074, +58038=>17074, +166915=>17075, +58039=>17075, +137374=>17076, +58040=>17076, +29896=>17077, +58041=>17077, +137608=>17078, +58042=>17078, +29966=>17079, +58043=>17079, +29982=>17080, +58045=>17080, +167641=>17081, +58046=>17081, +137803=>17082, +58047=>17082, +23511=>17083, +58048=>17083, +167596=>17084, +58049=>17084, +37765=>17085, +58050=>17085, +30029=>17086, +58051=>17086, +30026=>17087, +58052=>17087, +30055=>17088, +58053=>17088, +30062=>17089, +58054=>17089, +151426=>17090, +58055=>17090, +16132=>17091, +58056=>17091, +150803=>17092, +58057=>17092, +30094=>17093, +58058=>17093, +29789=>17094, +58059=>17094, +30110=>17095, +58060=>17095, +30132=>17096, +58061=>17096, +30210=>17097, +58062=>17097, +30252=>17098, +58063=>17098, +30289=>17099, +58064=>17099, +30287=>17100, +58065=>17100, +30319=>17101, +58066=>17101, +58067=>17102, +156661=>17103, +58068=>17103, +30352=>17104, +58069=>17104, +33263=>17105, +58070=>17105, +14328=>17106, +58071=>17106, +157969=>17107, +58072=>17107, +157966=>17108, +58073=>17108, +30369=>17109, +58074=>17109, +30373=>17110, +58075=>17110, +30391=>17111, +58076=>17111, +30412=>17112, +58077=>17112, +159647=>17113, +58078=>17113, +33890=>17114, +58079=>17114, +151709=>17115, +58080=>17115, +151933=>17116, +58081=>17116, +138780=>17117, +58082=>17117, +30494=>17118, +58083=>17118, +30502=>17119, +58084=>17119, +30528=>17120, +58085=>17120, +25775=>17121, +58086=>17121, +152096=>17122, +58087=>17122, +30552=>17123, +58088=>17123, +144044=>17124, +58089=>17124, +30639=>17125, +58090=>17125, +166244=>17126, +58091=>17126, +166248=>17127, +58092=>17127, +136897=>17128, +58093=>17128, +30708=>17129, +58094=>17129, +26826=>17131, +58098=>17131, +30895=>17132, +58099=>17132, +30919=>17133, +58100=>17133, +30931=>17134, +58101=>17134, +38565=>17135, +58102=>17135, +31022=>17136, +58103=>17136, +153056=>17137, +58104=>17137, +30935=>17138, +58105=>17138, +31028=>17139, +58106=>17139, +30897=>17140, +58107=>17140, +161292=>17141, +58108=>17141, +36792=>17142, +58109=>17142, +34948=>17143, +58110=>17143, +140828=>17144, +58113=>17144, +31110=>17145, +58114=>17145, +35072=>17146, +58115=>17146, +26882=>17147, +58116=>17147, +31104=>17148, +58117=>17148, +153687=>17149, +58118=>17149, +31133=>17150, +58119=>17150, +162617=>17151, +58120=>17151, +31036=>17152, +58121=>17152, +31145=>17153, +58122=>17153, +28202=>17154, +58123=>17154, +160038=>17155, +58124=>17155, +16040=>17156, +58125=>17156, +31174=>17157, +58126=>17157, +168205=>17158, +58127=>17158, +31188=>17159, +58128=>17159, +21797=>17161, +62526=>17161, +134210=>17163, +62528=>17163, +134421=>17164, +62529=>17164, +151851=>17165, +62530=>17165, +21904=>17166, +62531=>17166, +142534=>17167, +62532=>17167, +14828=>17168, +62533=>17168, +131905=>17169, +62534=>17169, +36422=>17170, +62535=>17170, +150968=>17171, +62536=>17171, +169189=>17172, +62537=>17172, +164030=>17174, +62539=>17174, +30586=>17175, +62540=>17175, +142392=>17176, +62541=>17176, +14900=>17177, +62542=>17177, +18389=>17178, +62543=>17178, +164189=>17179, +62544=>17179, +158194=>17180, +62545=>17180, +151018=>17181, +62546=>17181, +25821=>17182, +62547=>17182, +134524=>17183, +62548=>17183, +135092=>17184, +62549=>17184, +134357=>17185, +62550=>17185, +25741=>17187, +62552=>17187, +36478=>17188, +62553=>17188, +134806=>17189, +62554=>17189, +135012=>17191, +62556=>17191, +142505=>17192, +62557=>17192, +164438=>17193, +62558=>17193, +148691=>17194, +62559=>17194, +134470=>17196, +62561=>17196, +170573=>17197, +62562=>17197, +164073=>17198, +62563=>17198, +18420=>17199, +62564=>17199, +151207=>17200, +62565=>17200, +142530=>17201, +62566=>17201, +39602=>17202, +62567=>17202, +14951=>17203, +62568=>17203, +169460=>17204, +62569=>17204, +16365=>17205, +62570=>17205, +13574=>17206, +62571=>17206, +152263=>17207, +62572=>17207, +169940=>17208, +62573=>17208, +142660=>17210, +62575=>17210, +40302=>17211, +62576=>17211, +38933=>17212, +62577=>17212, +17369=>17214, +62579=>17214, +25780=>17216, +62581=>17216, +21731=>17217, +62582=>17217, +62584=>17219, +142282=>17219, +14843=>17221, +62586=>17221, +157402=>17223, +62588=>17223, +157462=>17224, +62589=>17224, +162208=>17225, +62590=>17225, +25834=>17226, +62591=>17226, +151634=>17227, +62592=>17227, +134211=>17228, +62593=>17228, +36456=>17229, +62594=>17229, +166732=>17231, +62596=>17231, +132913=>17232, +62597=>17232, +18443=>17234, +62599=>17234, +131497=>17235, +62600=>17235, +16378=>17236, +62601=>17236, +22643=>17237, +62602=>17237, +142733=>17238, +62603=>17238, +148936=>17240, +62605=>17240, +132348=>17241, +62606=>17241, +155799=>17242, +62607=>17242, +134988=>17243, +62608=>17243, +21881=>17245, +62610=>17245, +17338=>17247, +62612=>17247, +19124=>17249, +62614=>17249, +141926=>17250, +62615=>17250, +135325=>17251, +62616=>17251, +33194=>17252, +62617=>17252, +39157=>17253, +62618=>17253, +134556=>17254, +62619=>17254, +25465=>17255, +62620=>17255, +14846=>17256, +62621=>17256, +141173=>17257, +62622=>17257, +36288=>17258, +62623=>17258, +22177=>17259, +62624=>17259, +25724=>17260, +62625=>17260, +15939=>17261, +62626=>17261, +173569=>17263, +62628=>17263, +134665=>17264, +62629=>17264, +142031=>17265, +62630=>17265, +135368=>17268, +62633=>17268, +145858=>17269, +62634=>17269, +14738=>17270, +62635=>17270, +14854=>17271, +62636=>17271, +164507=>17272, +62637=>17272, +13688=>17273, +62638=>17273, +155209=>17274, +62639=>17274, +139463=>17275, +62640=>17275, +142514=>17278, +62643=>17278, +169760=>17279, +62644=>17279, +13500=>17280, +62645=>17280, +27709=>17281, +62646=>17281, +151099=>17282, +62647=>17282, +161140=>17285, +62650=>17285, +142987=>17286, +62651=>17286, +139784=>17287, +62652=>17287, +173659=>17288, +62653=>17288, +167117=>17289, +62654=>17289, +134778=>17290, +62655=>17290, +134196=>17291, +62656=>17291, +161337=>17292, +62683=>17292, +142286=>17293, +62684=>17293, +62687=>17294, +142417=>17294, +14872=>17295, +62689=>17295, +62691=>17296, +135367=>17296, +62693=>17297, +173618=>17297, +167122=>17298, +62695=>17298, +167321=>17299, +62696=>17299, +167114=>17300, +62697=>17300, +38314=>17301, +62698=>17301, +62706=>17303, +161630=>17303, +28992=>17304, +62708=>17304, +20822=>17306, +62385=>17306, +20222=>17307, +20616=>17308, +62487=>17308, +13459=>17310, +62489=>17310, +20870=>17311, +62491=>17311, +24130=>17312, +63037=>17312, +20997=>17313, +62495=>17313, +21031=>17314, +62436=>17314, +21113=>17315, +62497=>17315, +194600=>17316, +13651=>17317, +62504=>17317, +21442=>17318, +62505=>17318, +21343=>17319, +62715=>17319, +21823=>17321, +62520=>17321, +21976=>17323, +59986=>17323, +13789=>17324, +62722=>17324, +22049=>17325, +63067=>17325, +22100=>17327, +60044=>17327, +60148=>17328, +135291=>17328, +60153=>17330, +135379=>17330, +61095=>17332, +135934=>17332, +14265=>17335, +60104=>17335, +23745=>17336, +61099=>17336, +23829=>17337, +63066=>17337, +23894=>17338, +63030=>17338, +14392=>17339, +63036=>17339, +20097=>17340, +62477=>17340, +24253=>17341, +63038=>17341, +14612=>17342, +63042=>17342, +25017=>17343, +63050=>17343, +25232=>17344, +63054=>17344, +25368=>17345, +63056=>17345, +25690=>17346, +63063=>17346, +25745=>17347, +62381=>17347, +33133=>17348, +62709=>17348, +33156=>17349, +59922=>17349, +33171=>17350, +59924=>17350, +26624=>17351, +63080=>17351, +15292=>17352, +63093=>17352, +29327=>17353, +60517=>17353, +29389=>17354, +59781=>17354, +149487=>17355, +29497=>17356, +59785=>17356, +30018=>17357, +59811=>17357, +30172=>17358, +59817=>17358, +16320=>17359, +59818=>17359, +60278=>17360, +151205=>17360, +16343=>17361, +59820=>17361, +30336=>17363, +30348=>17364, +59824=>17364, +151388=>17364, +16552=>17365, +59845=>17365, +30777=>17366, +59846=>17366, +16643=>17367, +59855=>17367, +31377=>17368, +59863=>17368, +31771=>17369, +59876=>17369, +31981=>17370, +59884=>17370, +32659=>17371, +62658=>17371, +32686=>17372, +59892=>17372, +33535=>17374, +59936=>17374, +22623=>17375, +59981=>17375, +34482=>17376, +59960=>17376, +17836=>17377, +34699=>17378, +59963=>17378, +35143=>17379, +59969=>17379, +35369=>17381, +59972=>17381, +36465=>17383, +59988=>17383, +60484=>17384, +164233=>17384, +36528=>17385, +59990=>17385, +37214=>17387, +62443=>17387, +37260=>17388, +62441=>17388, +39182=>17389, +60051=>17389, +39196=>17390, +60054=>17390, +39809=>17393, +60066=>17393, +40384=>17394, +60080=>17394, +40339=>17395, +60078=>17395, +40620=>17396, +60085=>17396, +19857=>17397, +60540=>17397, +37818=>17399, +40571=>17400, +60084=>17400, +28809=>17401, +63148=>17401, +29512=>17402, +59788=>17402, +31129=>17404, +59858=>17404, +36791=>17405, +59997=>17405, +39234=>17407, +60056=>17407, +8364=>17601, +12443=>17606, +63518=>17606, +12444=>17607, +63519=>17607, +11904=>17608, +63520=>17608, +12736=>17609, +62211=>17609, +12737=>17610, +62212=>17610, +12738=>17611, +62213=>17611, +12739=>17612, +62214=>17612, +12740=>17613, +62215=>17613, +131340=>17614, +62216=>17614, +12741=>17615, +62217=>17615, +131281=>17616, +62218=>17616, +131277=>17617, +62219=>17617, +12742=>17618, +62220=>17618, +12743=>17619, +62221=>17619, +131275=>17620, +62222=>17620, +139240=>17621, +62223=>17621, +12744=>17622, +62224=>17622, +131274=>17623, +62225=>17623, +12745=>17624, +62226=>17624, +12746=>17625, +62227=>17625, +12747=>17626, +62228=>17626, +12748=>17627, +62229=>17627, +131342=>17628, +62230=>17628, +12749=>17629, +62231=>17629, +12750=>17630, +62232=>17630, +62776=>17631, +62777=>17632, +138177=>17633, +62778=>17633, +194680=>17634, +62779=>17634, +12205=>17635, +38737=>17635, +62780=>17635, +131206=>17636, +62781=>17636, +20059=>17637, +62782=>17637, +20155=>17638, +62783=>17638, +13630=>17639, +62784=>17639, +23587=>17640, +62785=>17640, +24401=>17641, +62786=>17641, +24516=>17642, +62787=>17642, +14586=>17643, +62788=>17643, +25164=>17644, +62789=>17644, +25909=>17645, +62790=>17645, +27514=>17646, +62791=>17646, +27701=>17647, +62792=>17647, +27706=>17648, +62793=>17648, +28780=>17649, +62794=>17649, +29227=>17650, +62795=>17650, +20012=>17651, +62796=>17651, +29357=>17652, +62797=>17652, +149737=>17653, +62798=>17653, +32594=>17654, +62799=>17654, +31035=>17655, +62800=>17655, +31993=>17656, +62801=>17656, +32595=>17657, +62802=>17657, +156266=>17658, +62803=>17658, +13505=>17659, +62804=>17659, +156491=>17660, +62806=>17660, +32770=>17661, +62807=>17661, +32896=>17662, +62808=>17662, +157202=>17663, +62809=>17663, +158033=>17664, +62810=>17664, +21341=>17665, +62811=>17665, +34916=>17666, +62812=>17666, +35265=>17667, +62813=>17667, +161970=>17668, +62814=>17668, +35744=>17669, +62815=>17669, +36125=>17670, +62816=>17670, +38021=>17671, +62817=>17671, +38264=>17672, +62818=>17672, +38271=>17673, +62819=>17673, +38376=>17674, +62820=>17674, +167439=>17675, +62821=>17675, +38886=>17676, +62822=>17676, +39029=>17677, +62823=>17677, +39118=>17678, +62824=>17678, +39134=>17679, +62825=>17679, +39267=>17680, +62826=>17680, +170000=>17681, +62827=>17681, +40060=>17682, +62828=>17682, +40479=>17683, +62829=>17683, +40644=>17684, +62830=>17684, +27503=>17685, +62831=>17685, +63751=>17686, +62832=>17686, +20023=>17687, +62833=>17687, +131207=>17688, +62834=>17688, +38429=>17689, +62835=>17689, +25143=>17690, +62836=>17690, +38050=>17691, +62837=>17691, +11908=>17692, +63521=>17692, +11910=>17693, +63522=>17693, +11911=>17694, +63523=>17694, +11912=>17695, +63524=>17695, +11914=>17696, +63525=>17696, +11916=>17697, +63526=>17697, +11917=>17698, +63527=>17698, +11925=>17699, +63528=>17699, +11932=>17700, +63529=>17700, +11941=>17701, +63531=>17701, +11943=>17702, +63532=>17702, +11946=>17703, +63533=>17703, +11948=>17704, +63534=>17704, +11950=>17705, +63535=>17705, +11958=>17706, +63536=>17706, +11964=>17707, +63537=>17707, +11966=>17708, +63538=>17708, +11978=>17709, +63540=>17709, +11980=>17710, +63541=>17710, +11981=>17711, +63542=>17711, +11983=>17712, +63543=>17712, +11990=>17713, +63544=>17713, +11991=>17714, +63545=>17714, +11998=>17715, +63546=>17715, +172969=>17716, +62368=>17716, +135493=>17717, +62369=>17717, +25866=>17718, +62371=>17718, +20029=>17719, +62374=>17719, +28381=>17720, +62375=>17720, +40270=>17721, +62376=>17721, +37343=>17722, +62377=>17722, +62380=>17723, +161589=>17723, +20250=>17724, +62382=>17724, +20264=>17725, +62383=>17725, +20392=>17726, +62384=>17726, +20852=>17727, +62386=>17727, +20892=>17728, +62387=>17728, +20964=>17729, +62388=>17729, +21153=>17730, +62389=>17730, +21160=>17731, +62390=>17731, +21307=>17732, +62391=>17732, +21326=>17733, +62392=>17733, +21457=>17734, +62393=>17734, +21464=>17735, +62394=>17735, +22242=>17736, +62395=>17736, +22768=>17737, +62396=>17737, +22788=>17738, +62397=>17738, +22791=>17739, +62398=>17739, +22834=>17740, +62399=>17740, +22836=>17741, +62400=>17741, +23398=>17742, +62401=>17742, +23454=>17743, +62402=>17743, +23455=>17744, +62403=>17744, +23706=>17745, +62404=>17745, +24198=>17746, +62405=>17746, +24635=>17747, +62406=>17747, +25993=>17748, +62407=>17748, +26622=>17749, +62408=>17749, +26628=>17750, +62409=>17750, +26725=>17751, +62410=>17751, +27982=>17752, +62411=>17752, +28860=>17753, +62412=>17753, +30005=>17754, +62413=>17754, +32420=>17755, +62414=>17755, +32428=>17756, +62415=>17756, +32442=>17757, +62416=>17757, +32455=>17758, +62417=>17758, +32463=>17759, +62418=>17759, +32479=>17760, +62419=>17760, +32518=>17761, +62420=>17761, +32567=>17762, +62421=>17762, +33402=>17763, +62422=>17763, +33487=>17764, +62423=>17764, +33647=>17765, +62424=>17765, +35270=>17766, +62425=>17766, +35774=>17767, +62426=>17767, +35810=>17768, +62427=>17768, +36710=>17769, +62428=>17769, +36711=>17770, +62429=>17770, +36718=>17771, +62430=>17771, +29713=>17772, +62431=>17772, +31996=>17773, +62432=>17773, +32205=>17774, +62433=>17774, +26950=>17775, +62434=>17775, +31433=>17776, +62435=>17776, +30904=>17777, +62442=>17777, +32956=>17778, +62444=>17778, +36107=>17779, +62446=>17779, +33014=>17780, +62447=>17780, +133607=>17781, +62448=>17781, +32927=>17782, +62451=>17782, +40647=>17783, +62452=>17783, +19661=>17784, +62453=>17784, +40393=>17785, +62454=>17785, +40460=>17786, +62455=>17786, +19518=>17787, +62456=>17787, +171510=>17788, +62457=>17788, +159758=>17789, +62458=>17789, +40458=>17790, +62459=>17790, +172339=>17791, +62460=>17791, +13761=>17792, +62461=>17792, +28314=>17793, +62463=>17793, +33342=>17794, +62464=>17794, +29977=>17795, +62465=>17795, +18705=>17796, +62467=>17796, +39532=>17797, +62468=>17797, +39567=>17798, +62469=>17798, +40857=>17799, +62470=>17799, +31111=>17800, +62471=>17800, +164972=>17801, +62472=>17801, +138698=>17802, +62473=>17802, +132560=>17803, +62474=>17803, +142054=>17804, +62475=>17804, +20004=>17805, +62476=>17805, +20096=>17806, +62478=>17806, +20103=>17807, +62479=>17807, +20159=>17808, +62480=>17808, +20203=>17809, +62481=>17809, +20279=>17810, +62482=>17810, +13388=>17811, +62483=>17811, +20413=>17812, +62484=>17812, +15944=>17813, +62485=>17813, +20483=>17814, +62486=>17814, +13437=>17815, +62488=>17815, +13477=>17816, +62490=>17816, +22789=>17817, +62492=>17817, +20955=>17818, +62493=>17818, +20988=>17819, +62494=>17819, +20105=>17820, +62496=>17820, +21136=>17821, +62498=>17821, +21287=>17822, +62499=>17822, +13767=>17823, +62500=>17823, +21417=>17824, +62501=>17824, +13649=>17825, +62502=>17825, +21424=>17826, +62503=>17826, +21539=>17827, +62506=>17827, +13677=>17828, +62507=>17828, +13682=>17829, +62508=>17829, +13953=>17830, +62509=>17830, +21651=>17831, +62510=>17831, +21667=>17832, +62511=>17832, +21684=>17833, +62512=>17833, +21689=>17834, +62513=>17834, +21712=>17835, +62514=>17835, +21743=>17836, +62515=>17836, +21784=>17837, +62516=>17837, +21795=>17838, +62517=>17838, +21800=>17839, +62518=>17839, +13720=>17840, +62519=>17840, +13733=>17841, +62521=>17841, +13759=>17842, +62522=>17842, +21975=>17843, +62523=>17843, +13765=>17844, +62524=>17844, +163204=>17845, +62525=>17845, +16467=>17846, +62538=>17846, +62551=>17847, +135412=>17847, +62555=>17848, +134155=>17848, +62574=>17849, +161992=>17849, +62580=>17850, +155813=>17850, +62583=>17851, +142668=>17851, +62585=>17852, +135287=>17852, +62587=>17853, +135279=>17853, +62595=>17854, +139681=>17854, +62609=>17855, +134550=>17855, +16571=>17856, +62611=>17856, +62631=>17857, +142537=>17857, +22098=>17858, +62641=>17858, +134961=>17859, +62642=>17859, +62657=>17860, +157724=>17860, +135375=>17861, +62659=>17861, +141315=>17862, +62660=>17862, +141625=>17863, +62661=>17863, +13819=>17864, +62662=>17864, +152035=>17865, +62663=>17865, +134796=>17866, +62664=>17866, +135053=>17867, +62665=>17867, +134826=>17868, +62666=>17868, +16275=>17869, +62667=>17869, +134960=>17870, +62668=>17870, +134471=>17871, +62669=>17871, +135503=>17872, +62670=>17872, +134732=>17873, +62671=>17873, +134827=>17874, +62673=>17874, +134057=>17875, +62674=>17875, +134472=>17876, +62675=>17876, +135360=>17877, +62676=>17877, +135485=>17878, +62677=>17878, +16377=>17879, +62678=>17879, +140950=>17880, +62679=>17880, +25650=>17881, +62680=>17881, +135085=>17882, +62681=>17882, +144372=>17883, +62682=>17883, +62685=>17884, +134526=>17884, +62686=>17885, +134527=>17885, +62688=>17886, +142421=>17886, +62690=>17887, +134808=>17887, +62692=>17888, +134958=>17888, +62694=>17889, +158544=>17889, +21708=>17890, +62699=>17890, +33476=>17891, +62700=>17891, +21945=>17892, +62701=>17892, +171715=>17893, +62703=>17893, +39974=>17894, +62704=>17894, +39606=>17895, +62705=>17895, +62707=>17896, +142830=>17896, +33004=>17897, +62710=>17897, +23580=>17898, +62711=>17898, +157042=>17899, +62712=>17899, +33076=>17900, +62713=>17900, +14231=>17901, +62714=>17901, +164029=>17902, +62716=>17902, +37302=>17903, +62717=>17903, +134906=>17904, +62718=>17904, +134671=>17905, +62719=>17905, +134775=>17906, +62720=>17906, +134907=>17907, +62721=>17907, +151019=>17908, +62723=>17908, +13833=>17909, +62724=>17909, +134358=>17910, +62725=>17910, +22191=>17911, +62726=>17911, +141237=>17912, +62727=>17912, +135369=>17913, +62728=>17913, +134672=>17914, +62729=>17914, +134776=>17915, +62730=>17915, +135288=>17916, +62731=>17916, +135496=>17917, +62732=>17917, +164359=>17918, +62733=>17918, +136277=>17919, +62734=>17919, +134777=>17920, +62735=>17920, +151120=>17921, +62736=>17921, +142756=>17922, +62737=>17922, +23124=>17923, +62738=>17923, +62739=>17924, +135197=>17924, +62740=>17925, +135198=>17925, +62741=>17926, +135413=>17926, +62742=>17927, +135414=>17927, +22428=>17928, +62743=>17928, +134673=>17929, +62744=>17929, +161428=>17930, +62745=>17930, +164557=>17931, +62746=>17931, +135093=>17932, +62747=>17932, +134779=>17933, +62748=>17933, +151934=>17934, +62749=>17934, +14083=>17935, +62750=>17935, +135094=>17936, +62751=>17936, +135552=>17937, +62752=>17937, +152280=>17938, +62753=>17938, +172733=>17939, +62754=>17939, +149978=>17940, +62755=>17940, +137274=>17941, +62756=>17941, +147831=>17942, +62757=>17942, +164476=>17943, +62758=>17943, +22681=>17944, +62759=>17944, +21096=>17945, +62760=>17945, +13850=>17946, +62761=>17946, +153405=>17947, +62762=>17947, +31666=>17948, +62763=>17948, +23400=>17949, +62764=>17949, +18432=>17950, +62765=>17950, +19244=>17951, +62766=>17951, +40743=>17952, +62767=>17952, +18919=>17953, +62768=>17953, +39967=>17954, +62769=>17954, +39821=>17955, +62770=>17955, +154484=>17956, +62771=>17956, +143677=>17957, +62772=>17957, +22011=>17958, +62773=>17958, +13810=>17959, +62774=>17959, +22153=>17960, +62775=>17960, +23870=>17961, +63028=>17961, +23880=>17962, +63029=>17962, +15868=>17963, +63031=>17963, +14351=>17964, +63032=>17964, +23972=>17965, +63033=>17965, +23993=>17966, +63034=>17966, +14368=>17967, +63035=>17967, +24357=>17968, +63039=>17968, +24451=>17969, +63040=>17969, +14600=>17970, +63041=>17970, +14655=>17971, +63043=>17971, +14669=>17972, +63044=>17972, +24791=>17973, +63045=>17973, +24893=>17974, +63046=>17974, +23781=>17975, +63047=>17975, +14729=>17976, +63048=>17976, +25015=>17977, +63049=>17977, +25039=>17978, +63051=>17978, +14776=>17979, +63052=>17979, +25132=>17980, +63053=>17980, +25317=>17981, +63055=>17981, +14840=>17982, +63057=>17982, +22193=>17983, +63058=>17983, +14851=>17984, +63059=>17984, +25570=>17985, +63060=>17985, +25595=>17986, +63061=>17986, +25607=>17987, +63062=>17987, +14923=>17988, +63064=>17988, +25792=>17989, +63065=>17989, +40863=>17990, +63068=>17990, +14999=>17991, +63069=>17991, +25990=>17992, +63070=>17992, +15037=>17993, +63071=>17993, +26111=>17994, +63072=>17994, +26195=>17995, +63073=>17995, +15090=>17996, +63074=>17996, +26258=>17997, +63075=>17997, +15138=>17998, +63076=>17998, +26390=>17999, +63077=>17999, +15170=>18000, +63078=>18000, +26532=>18001, +63079=>18001, +15192=>18002, +63081=>18002, +26698=>18003, +63082=>18003, +26756=>18004, +63083=>18004, +15218=>18005, +63084=>18005, +15217=>18006, +63085=>18006, +15227=>18007, +63086=>18007, +26889=>18008, +63087=>18008, +26947=>18009, +63088=>18009, +29276=>18010, +63089=>18010, +26980=>18011, +63090=>18011, +27039=>18012, +63091=>18012, +27013=>18013, +63092=>18013, +27094=>18014, +63094=>18014, +15325=>18015, +63095=>18015, +27237=>18016, +63096=>18016, +27252=>18017, +63097=>18017, +27249=>18018, +63098=>18018, +27266=>18019, +63099=>18019, +15340=>18020, +63100=>18020, +27289=>18021, +63101=>18021, +15346=>18022, +63102=>18022, +27307=>18023, +63103=>18023, +27317=>18024, +63104=>18024, +27348=>18025, +63105=>18025, +27382=>18026, +63106=>18026, +27521=>18027, +63107=>18027, +27585=>18028, +63108=>18028, +27626=>18029, +63109=>18029, +27765=>18030, +63110=>18030, +27818=>18031, +63111=>18031, +15563=>18032, +63112=>18032, +27906=>18033, +63113=>18033, +27910=>18034, +63114=>18034, +27942=>18035, +63115=>18035, +28033=>18036, +63116=>18036, +15599=>18037, +63117=>18037, +28068=>18038, +63118=>18038, +28081=>18039, +63119=>18039, +28181=>18040, +63120=>18040, +28184=>18041, +63121=>18041, +28201=>18042, +63122=>18042, +28294=>18043, +63123=>18043, +166336=>18044, +63124=>18044, +28347=>18045, +63125=>18045, +28386=>18046, +63126=>18046, +28378=>18047, +63127=>18047, +40831=>18048, +63128=>18048, +28392=>18049, +63129=>18049, +28393=>18050, +63130=>18050, +28452=>18051, +63131=>18051, +28468=>18052, +63132=>18052, +15686=>18053, +63133=>18053, +147265=>18054, +63134=>18054, +28545=>18055, +63135=>18055, +28606=>18056, +63136=>18056, +15722=>18057, +63137=>18057, +15733=>18058, +63138=>18058, +29111=>18059, +63139=>18059, +23705=>18060, +63140=>18060, +15754=>18061, +63141=>18061, +28716=>18062, +63142=>18062, +15761=>18063, +63143=>18063, +28752=>18064, +63144=>18064, +28756=>18065, +63145=>18065, +28783=>18066, +63146=>18066, +28799=>18067, +63147=>18067, +131877=>18068, +63149=>18068, +17345=>18069, +63150=>18069, +13809=>18070, +63151=>18070, +134872=>18071, +63152=>18071, +13902=>18072, +58134=>18072, +15789=>18073, +58172=>18073, +154725=>18074, +58173=>18074, +26237=>18075, +58183=>18075, +31860=>18076, +58188=>18076, +29837=>18077, +58197=>18077, +32402=>18078, +58215=>18078, +17667=>18079, +58232=>18079, +58260=>18080, +151480=>18080, +58270=>18081, +133901=>18081, +58277=>18082, +158474=>18082, +13438=>18083, +58311=>18083, +58317=>18084, +143087=>18084, +58325=>18085, +146613=>18085, +58343=>18086, +159385=>18086, +34673=>18087, +58364=>18087, +25537=>18088, +58385=>18088, +30583=>18089, +58387=>18089, +35210=>18090, +58390=>18090, +58406=>18091, +147343=>18091, +35660=>18092, +58415=>18092, +58440=>18093, +150729=>18093, +18730=>18094, +58464=>18094, +172052=>18095, +58471=>18095, +165564=>18096, +58472=>18096, +165121=>18097, +58473=>18097, +15088=>18098, +58490=>18098, +28815=>18099, +58511=>18099, +58529=>18100, +140922=>18100, +58637=>18101, +158120=>18101, +58646=>18102, +148043=>18102, +26760=>18103, +58662=>18103, +58664=>18104, +139611=>18104, +40802=>18105, +58702=>18105, +37830=>18106, +58793=>18106, +58802=>18107, +131967=>18107, +37734=>18108, +58888=>18108, +37519=>18109, +58901=>18109, +34324=>18110, +58954=>18110, +58986=>18111, +173147=>18111, +16784=>18112, +59010=>18112, +26511=>18113, +59045=>18113, +26654=>18114, +59048=>18114, +14435=>18115, +59051=>18115, +59077=>18116, +149996=>18116, +15129=>18117, +59128=>18117, +33942=>18118, +59176=>18118, +59241=>18119, +149858=>18119, +14818=>18120, +59254=>18120, +33920=>18121, +59259=>18121, +17262=>18122, +59328=>18122, +38769=>18123, +59402=>18123, +39323=>18124, +59427=>18124, +18733=>18125, +59499=>18125, +28439=>18126, +59703=>18126, +160009=>18127, +59704=>18127, +28838=>18128, +59746=>18128, +150095=>18129, +59752=>18129, +32357=>18130, +59753=>18130, +23855=>18131, +59755=>18131, +15859=>18132, +59756=>18132, +150109=>18133, +59758=>18133, +137183=>18134, +59759=>18134, +32164=>18135, +59760=>18135, +33830=>18136, +59761=>18136, +21637=>18137, +59762=>18137, +146170=>18138, +59763=>18138, +131604=>18139, +59765=>18139, +22398=>18140, +59766=>18140, +133333=>18141, +59767=>18141, +132633=>18142, +59768=>18142, +16357=>18143, +59769=>18143, +139166=>18144, +59770=>18144, +172726=>18145, +59771=>18145, +28675=>18146, +59772=>18146, +168283=>18147, +59773=>18147, +23920=>18148, +59774=>18148, +29583=>18149, +59775=>18149, +166489=>18150, +59777=>18150, +168992=>18151, +59778=>18151, +20424=>18152, +59779=>18152, +32743=>18153, +59780=>18153, +29456=>18154, +59782=>18154, +29496=>18155, +59784=>18155, +29505=>18156, +59787=>18156, +16041=>18157, +59789=>18157, +29173=>18158, +59792=>18158, +149746=>18159, +59793=>18159, +29665=>18160, +59794=>18160, +16074=>18161, +59796=>18161, +16081=>18162, +59798=>18162, +29721=>18163, +59801=>18163, +29726=>18164, +59802=>18164, +29727=>18165, +59803=>18165, +16098=>18166, +59804=>18166, +16112=>18167, +59805=>18167, +16116=>18168, +59806=>18168, +16122=>18169, +59807=>18169, +29907=>18170, +59808=>18170, +16142=>18171, +59809=>18171, +16211=>18172, +59810=>18172, +30061=>18173, +59812=>18173, +30066=>18174, +59813=>18174, +30093=>18175, +59814=>18175, +16252=>18176, +59815=>18176, +30152=>18177, +59816=>18177, +30285=>18178, +59819=>18178, +30324=>18179, +59821=>18179, +16348=>18180, +59822=>18180, +30330=>18181, +59823=>18181, +29064=>18182, +59825=>18182, +22051=>18183, +59826=>18183, +35200=>18184, +59827=>18184, +16413=>18185, +59829=>18185, +30531=>18186, +59830=>18186, +16441=>18187, +59831=>18187, +16453=>18188, +59833=>18188, +13787=>18189, +59834=>18189, +30616=>18190, +59835=>18190, +16490=>18191, +59836=>18191, +16495=>18192, +59837=>18192, +30654=>18193, +59839=>18193, +30667=>18194, +59840=>18194, +30744=>18195, +59842=>18195, +30748=>18196, +59844=>18196, +30791=>18197, +59847=>18197, +30801=>18198, +59848=>18198, +30822=>18199, +59849=>18199, +33864=>18200, +59850=>18200, +152885=>18201, +59851=>18201, +31027=>18202, +59852=>18202, +31026=>18203, +59854=>18203, +16649=>18204, +59856=>18204, +31121=>18205, +59857=>18205, +31238=>18206, +59860=>18206, +16743=>18207, +59862=>18207, +16818=>18208, +59864=>18208, +31420=>18209, +59865=>18209, +33401=>18210, +59866=>18210, +16836=>18211, +59867=>18211, +31439=>18212, +59868=>18212, +31451=>18213, +59869=>18213, +16847=>18214, +59870=>18214, +31586=>18215, +59872=>18215, +31596=>18216, +59873=>18216, +31611=>18217, +59874=>18217, +31762=>18218, +59875=>18218, +16992=>18219, +59877=>18219, +17018=>18220, +59878=>18220, +31867=>18221, +59879=>18221, +31900=>18222, +59880=>18222, +17036=>18223, +59881=>18223, +31928=>18224, +59882=>18224, +17044=>18225, +59883=>18225, +36755=>18226, +59885=>18226, +28864=>18227, +59886=>18227, +134351=>18228, +59887=>18228, +32207=>18229, +59888=>18229, +32212=>18230, +59889=>18230, +32208=>18231, +59890=>18231, +32253=>18232, +59891=>18232, +32692=>18233, +59893=>18233, +29343=>18234, +59894=>18234, +17303=>18235, +59895=>18235, +32800=>18236, +59896=>18236, +32805=>18237, +59897=>18237, +32814=>18238, +59899=>18238, +32817=>18239, +59900=>18239, +32852=>18240, +59901=>18240, +22452=>18241, +59903=>18241, +28832=>18242, +59904=>18242, +32951=>18243, +59905=>18243, +33001=>18244, +59906=>18244, +17389=>18245, +59907=>18245, +33036=>18246, +59908=>18246, +33038=>18247, +59910=>18247, +33042=>18248, +59911=>18248, +33044=>18249, +59913=>18249, +17409=>18250, +59914=>18250, +15161=>18251, +59915=>18251, +33110=>18252, +59916=>18252, +33113=>18253, +59917=>18253, +33114=>18254, +59918=>18254, +17427=>18255, +59919=>18255, +33148=>18256, +59921=>18256, +17445=>18257, +59923=>18257, +17453=>18258, +59925=>18258, +33189=>18259, +59926=>18259, +22511=>18260, +59927=>18260, +33217=>18261, +59928=>18261, +33252=>18262, +59929=>18262, +33364=>18263, +59930=>18263, +17551=>18264, +59931=>18264, +33398=>18265, +59933=>18265, +33482=>18266, +59934=>18266, +33496=>18267, +59935=>18267, +17584=>18268, +59937=>18268, +33623=>18269, +59938=>18269, +38505=>18270, +59939=>18270, +33797=>18271, +59941=>18271, +28917=>18272, +59942=>18272, +33892=>18273, +59943=>18273, +33928=>18274, +59945=>18274, +17668=>18275, +59946=>18275, +33982=>18276, +59947=>18276, +34017=>18277, +59948=>18277, +34040=>18278, +59949=>18278, +34064=>18279, +59950=>18279, +34104=>18280, +59951=>18280, +34130=>18281, +59952=>18281, +17723=>18282, +59953=>18282, +34159=>18283, +59954=>18283, +34160=>18284, +59955=>18284, +34272=>18285, +59956=>18285, +17783=>18286, +59957=>18286, +34418=>18287, +59958=>18287, +34450=>18288, +59959=>18288, +34543=>18289, +59961=>18289, +38469=>18290, +59962=>18290, +17926=>18291, +59964=>18291, +17943=>18292, +59965=>18292, +34990=>18293, +59966=>18293, +35071=>18294, +59967=>18294, +35108=>18295, +59968=>18295, +35217=>18296, +59970=>18296, +162151=>18297, +59971=>18297, +35384=>18298, +59973=>18298, +35476=>18299, +59974=>18299, +35508=>18300, +59975=>18300, +35921=>18301, +59976=>18301, +36052=>18302, +59977=>18302, +36082=>18303, +59978=>18303, +36124=>18304, +59979=>18304, +18328=>18305, +59980=>18305, +36291=>18306, +59982=>18306, +18413=>18307, +59983=>18307, +36410=>18308, +59985=>18308, +22356=>18309, +59987=>18309, +22005=>18310, +59989=>18310, +18487=>18311, +59991=>18311, +36558=>18312, +59992=>18312, +36578=>18313, +59993=>18313, +36580=>18314, +59994=>18314, +36589=>18315, +59995=>18315, +36594=>18316, +59996=>18316, +36801=>18317, +59998=>18317, +36810=>18318, +59999=>18318, +36812=>18319, +60000=>18319, +36915=>18320, +60001=>18320, +18605=>18321, +60003=>18321, +39136=>18322, +60004=>18322, +37395=>18323, +60005=>18323, +18718=>18324, +60006=>18324, +37416=>18325, +60007=>18325, +37464=>18326, +60008=>18326, +37483=>18327, +60009=>18327, +37553=>18328, +60010=>18328, +37550=>18329, +60011=>18329, +37567=>18330, +60012=>18330, +37603=>18331, +60013=>18331, +37611=>18332, +60014=>18332, +37619=>18333, +60015=>18333, +37620=>18334, +60016=>18334, +37629=>18335, +60017=>18335, +37699=>18336, +60018=>18336, +37764=>18337, +60019=>18337, +37805=>18338, +60020=>18338, +18757=>18339, +60021=>18339, +18769=>18340, +60022=>18340, +37911=>18341, +60024=>18341, +37917=>18342, +60026=>18342, +37933=>18343, +60027=>18343, +37950=>18344, +60028=>18344, +18794=>18345, +60029=>18345, +37972=>18346, +60030=>18346, +38009=>18347, +60031=>18347, +38189=>18348, +60032=>18348, +38306=>18349, +60033=>18349, +18855=>18350, +60034=>18350, +38388=>18351, +60035=>18351, +38451=>18352, +60036=>18352, +18917=>18353, +60037=>18353, +18980=>18354, +60039=>18354, +38720=>18355, +60040=>18355, +18997=>18356, +60041=>18356, +38834=>18357, +60042=>18357, +38850=>18358, +60043=>18358, +19172=>18359, +60045=>18359, +39097=>18360, +60047=>18360, +19225=>18361, +60048=>18361, +39153=>18362, +60049=>18362, +22596=>18363, +60050=>18363, +39193=>18364, +60052=>18364, +39223=>18365, +60055=>18365, +39261=>18366, +60057=>18366, +39266=>18367, +60058=>18367, +19312=>18368, +60059=>18368, +39365=>18369, +60060=>18369, +19357=>18370, +60061=>18370, +39484=>18371, +60062=>18371, +39695=>18372, +60063=>18372, +39785=>18373, +60065=>18373, +39901=>18374, +60067=>18374, +39921=>18375, +60068=>18375, +39924=>18376, +60069=>18376, +19565=>18377, +60070=>18377, +39968=>18378, +60071=>18378, +14191=>18379, +60072=>18379, +138178=>18380, +60073=>18380, +40265=>18381, +60074=>18381, +40702=>18382, +60076=>18382, +22096=>18383, +60077=>18383, +40381=>18384, +60079=>18384, +40444=>18385, +60081=>18385, +38134=>18386, +60082=>18386, +36790=>18387, +60083=>18387, +40625=>18388, +60086=>18388, +40637=>18389, +60087=>18389, +40646=>18390, +60088=>18390, +38108=>18391, +60089=>18391, +40674=>18392, +60090=>18392, +40689=>18393, +60091=>18393, +40696=>18394, +60092=>18394, +40772=>18395, +60094=>18395, +131220=>18396, +60095=>18396, +131767=>18397, +60096=>18397, +132000=>18398, +60097=>18398, +38083=>18399, +60099=>18399, +60101=>18400, +132311=>18400, +38081=>18401, +60103=>18401, +132565=>18402, +60105=>18402, +132629=>18403, +60106=>18403, +132726=>18404, +60107=>18404, +136890=>18405, +60108=>18405, +22359=>18406, +60109=>18406, +29043=>18407, +60110=>18407, +133826=>18408, +60111=>18408, +133837=>18409, +60112=>18409, +134079=>18410, +60113=>18410, +194619=>18411, +60115=>18411, +134091=>18412, +60116=>18412, +21662=>18413, +60117=>18413, +134139=>18414, +60118=>18414, +134203=>18415, +60119=>18415, +134227=>18416, +60120=>18416, +134245=>18417, +60121=>18417, +134268=>18418, +60122=>18418, +60124=>18419, +134285=>18419, +134325=>18420, +60126=>18420, +134365=>18421, +60127=>18421, +134381=>18422, +60128=>18422, +134511=>18423, +60129=>18423, +134578=>18424, +60130=>18424, +134600=>18425, +60131=>18425, +134660=>18426, +60135=>18426, +134670=>18427, +60136=>18427, +134871=>18428, +60137=>18428, +135056=>18429, +60138=>18429, +134957=>18430, +60139=>18430, +134771=>18431, +60140=>18431, +60142=>18432, +135100=>18432, +135260=>18433, +60144=>18433, +135247=>18434, +60145=>18434, +135286=>18435, +60146=>18435, +135304=>18436, +60149=>18436, +135318=>18437, +60150=>18437, +13895=>18438, +60151=>18438, +135359=>18439, +60152=>18439, +135471=>18440, +60154=>18440, +135483=>18441, +60155=>18441, +21348=>18442, +60156=>18442, +135907=>18443, +60158=>18443, +136053=>18444, +60159=>18444, +60160=>18445, +135990=>18445, +136567=>18446, +60162=>18446, +136729=>18447, +60163=>18447, +137155=>18448, +60164=>18448, +137159=>18449, +60165=>18449, +28859=>18450, +60167=>18450, +137261=>18451, +60168=>18451, +137578=>18452, +60169=>18452, +137773=>18453, +60170=>18453, +137797=>18454, +60171=>18454, +138282=>18455, +60172=>18455, +138352=>18456, +60173=>18456, +138412=>18457, +60174=>18457, +138952=>18458, +60175=>18458, +138965=>18459, +60177=>18459, +139029=>18460, +60178=>18460, +29080=>18461, +60179=>18461, +139333=>18462, +60181=>18462, +27113=>18463, +60182=>18463, +14024=>18464, +60183=>18464, +139900=>18465, +60184=>18465, +140247=>18466, +60185=>18466, +140282=>18467, +60186=>18467, +141098=>18468, +60187=>18468, +141425=>18469, +60188=>18469, +141647=>18470, +60189=>18470, +141671=>18471, +60191=>18471, +141715=>18472, +60192=>18472, +142037=>18473, +60193=>18473, +60195=>18474, +142056=>18474, +60197=>18475, +142094=>18475, +60199=>18476, +142143=>18476, +60202=>18477, +142412=>18477, +142472=>18478, +60204=>18478, +142519=>18479, +60205=>18479, +154600=>18480, +60206=>18480, +142600=>18481, +60207=>18481, +142610=>18482, +60208=>18482, +142775=>18483, +60209=>18483, +142741=>18484, +60210=>18484, +142914=>18485, +60211=>18485, +143220=>18486, +60212=>18486, +143308=>18487, +60213=>18487, +143411=>18488, +60214=>18488, +143462=>18489, +60215=>18489, +144159=>18490, +60216=>18490, +144350=>18491, +60217=>18491, +144743=>18492, +60222=>18492, +144883=>18493, +60223=>18493, +144922=>18494, +60227=>18494, +145174=>18495, +60228=>18495, +22709=>18496, +60231=>18496, +60234=>18497, +146087=>18497, +146961=>18498, +60237=>18498, +147129=>18499, +60238=>18499, +60243=>18500, +147737=>18500, +148206=>18501, +60245=>18501, +148237=>18502, +60246=>18502, +148276=>18503, +60248=>18503, +148374=>18504, +60249=>18504, +148484=>18505, +60258=>18505, +148694=>18506, +60259=>18506, +22408=>18507, +60260=>18507, +149108=>18508, +60261=>18508, +60263=>18509, +149295=>18509, +149522=>18510, +60271=>18510, +149755=>18511, +60272=>18511, +150037=>18512, +60273=>18512, +60275=>18513, +150208=>18513, +22885=>18514, +60277=>18514, +60279=>18515, +151430=>18515, +60282=>18516, +151596=>18516, +22335=>18517, +60284=>18517, +152217=>18518, +60286=>18518, +152601=>18519, +60287=>18519, +152646=>18520, +60291=>18520, +152686=>18521, +60292=>18521, +60296=>18522, +152895=>18522, +60298=>18523, +152926=>18523, +152930=>18524, +60300=>18524, +152934=>18525, +60301=>18525, +153543=>18526, +60302=>18526, +60304=>18527, +153693=>18527, +60309=>18528, +153859=>18528, +154286=>18529, +60312=>18529, +154505=>18530, +60313=>18530, +154630=>18531, +60314=>18531, +22433=>18532, +60316=>18532, +29009=>18533, +60317=>18533, +60319=>18534, +155906=>18534, +60322=>18535, +156082=>18535, +156674=>18536, +60325=>18536, +156746=>18537, +60326=>18537, +60330=>18538, +156804=>18538, +60334=>18539, +156808=>18539, +60336=>18540, +156946=>18540, +157119=>18541, +60338=>18541, +157365=>18542, +60339=>18542, +22201=>18543, +60347=>18543, +60349=>18544, +157436=>18544, +13848=>18545, +60355=>18545, +157593=>18546, +60357=>18546, +157806=>18547, +60358=>18547, +60360=>18548, +157790=>18548, +60362=>18549, +157895=>18549, +60366=>18550, +157990=>18550, +60368=>18551, +158009=>18551, +60371=>18552, +158202=>18552, +60373=>18553, +158253=>18553, +158260=>18554, +60378=>18554, +158555=>18555, +60379=>18555, +60383=>18556, +158621=>18556, +60385=>18557, +158884=>18557, +60388=>18558, +159150=>18558, +159819=>18559, +60392=>18559, +160205=>18560, +60393=>18560, +160384=>18561, +60395=>18561, +160389=>18562, +60396=>18562, +60399=>18563, +160395=>18563, +60401=>18564, +160486=>18564, +38047=>18565, +60404=>18565, +160848=>18566, +60405=>18566, +14009=>18567, +60416=>18567, +161740=>18568, +60424=>18568, +161880=>18569, +60425=>18569, +22230=>18570, +60426=>18570, +60435=>18571, +162269=>18571, +162301=>18572, +60441=>18572, +162314=>18573, +60442=>18573, +162571=>18574, +60443=>18574, +163174=>18575, +60444=>18575, +60448=>18576, +163849=>18576, +60459=>18577, +163875=>18577, +60463=>18578, +163912=>18578, +60466=>18579, +163971=>18579, +163984=>18580, +60479=>18580, +164084=>18581, +60480=>18581, +164142=>18582, +60481=>18582, +60483=>18583, +164175=>18583, +164271=>18584, +60485=>18584, +164378=>18585, +60486=>18585, +164614=>18586, +60487=>18586, +164655=>18587, +60488=>18587, +164746=>18588, +60489=>18588, +164968=>18589, +60491=>18589, +165546=>18590, +60492=>18590, +25574=>18591, +60494=>18591, +166230=>18592, +60495=>18592, +60498=>18593, +166328=>18593, +60500=>18594, +166375=>18594, +60502=>18595, +166376=>18595, +166726=>18596, +60503=>18596, +166868=>18597, +60504=>18597, +60506=>18598, +166921=>18598, +167877=>18599, +60508=>18599, +168172=>18600, +60509=>18600, +168208=>18601, +60511=>18601, +168252=>18602, +60512=>18602, +15863=>18603, +60513=>18603, +168286=>18604, +60514=>18604, +150218=>18605, +60515=>18605, +36816=>18606, +60516=>18606, +60519=>18607, +169191=>18607, +169392=>18608, +60521=>18608, +169400=>18609, +60522=>18609, +169778=>18610, +60523=>18610, +170193=>18611, +60524=>18611, +170313=>18612, +60525=>18612, +170346=>18613, +60526=>18613, +170435=>18614, +60527=>18614, +170536=>18615, +60528=>18615, +170766=>18616, +60529=>18616, +171354=>18617, +60530=>18617, +171419=>18618, +60531=>18618, +32415=>18619, +60532=>18619, +171768=>18620, +60533=>18620, +171811=>18621, +60534=>18621, +19620=>18622, +60535=>18622, +38215=>18623, +60536=>18623, +172691=>18624, +60537=>18624, +29090=>18625, +60538=>18625, +172799=>18626, +60539=>18626, +173515=>18627, +60542=>18627, +19868=>18628, +60543=>18628, +134300=>18629, +60544=>18629, +36798=>18630, +60545=>18630, +36794=>18631, +60547=>18631, +140464=>18632, +60548=>18632, +36793=>18633, +60549=>18633, +150163=>18634, +60550=>18634, +20202=>18635, +60555=>18635, +60557=>18636, +166700=>18636, +36480=>18637, +60560=>18637, +137205=>18638, +60561=>18638, +166764=>18639, +60563=>18639, +166809=>18640, +60564=>18640, +60566=>18641, +157359=>18641, +60568=>18642, +161365=>18642, +153141=>18643, +60570=>18643, +153942=>18644, +60571=>18644, +20122=>18645, +60572=>18645, +155265=>18646, +60573=>18646, +60576=>18647, +134765=>18647, +147080=>18648, +60579=>18648, +150686=>18649, +60580=>18649, +137206=>18650, +60583=>18650, +137339=>18651, +60584=>18651, +60587=>18652, +154698=>18652, +152337=>18653, +60589=>18653, +15814=>18654, +60590=>18654, +60596=>18655, +155352=>18655, +19996=>18656, +60600=>18656, +135146=>18657, +60601=>18657, +134473=>18658, +60602=>18658, +145082=>18659, +60603=>18659, +60638=>18660, +151880=>18660, +21982=>18661, +60644=>18661, +34694=>18662, +60672=>18662, +60676=>18663, +135361=>18663, +149254=>18664, +60679=>18664, +23440=>18665, +60680=>18665, +60682=>18666, +157843=>18666, +141044=>18667, +60684=>18667, +163119=>18668, +60685=>18668, +147875=>18669, +60686=>18669, +163187=>18670, +60687=>18670, +159440=>18671, +60688=>18671, +160438=>18672, +60689=>18672, +60691=>18673, +135641=>18673, +146684=>18674, +60693=>18674, +173737=>18675, +60694=>18675, +134828=>18676, +60695=>18676, +60698=>18677, +138402=>18677, +60700=>18678, +151490=>18678, +60702=>18679, +135147=>18679, +60706=>18680, +142752=>18680, +135148=>18681, +60710=>18681, +134666=>18682, +60711=>18682, +60714=>18683, +135149=>18683, +60717=>18684, +135559=>18684, +19994=>18685, +60721=>18685, +19972=>18686, +60722=>18686, +23309=>18687, +60724=>18687, +13996=>18688, +60727=>18688, +21373=>18689, +60729=>18689, +13989=>18690, +60730=>18690, +22682=>18691, +60732=>18691, +150382=>18692, +60733=>18692, +22442=>18693, +60736=>18693, +154261=>18694, +60737=>18694, +133497=>18695, +60738=>18695, +60741=>18696, +140389=>18696, +146686=>18697, +60746=>18697, +171824=>18698, +60747=>18698, +151465=>18699, +60749=>18699, +169374=>18700, +60750=>18700, +60753=>18701, +146870=>18701, +157619=>18702, +60755=>18702, +145184=>18703, +60756=>18703, +147191=>18704, +60759=>18704, +146988=>18705, +60760=>18705, +60785=>18706, +143578=>18706, +135849=>18707, +60789=>18707, +22439=>18708, +60790=>18708, +149859=>18709, +60791=>18709, +60794=>18710, +159918=>18710, +60801=>18711, +137068=>18711, +60806=>18712, +160100=>18712, +159010=>18713, +60809=>18713, +150242=>18714, +60810=>18714, +39963=>18715, +60837=>18715, +149822=>18716, +60838=>18716, +15878=>18717, +60846=>18717, +60881=>18718, +159011=>18718, +60887=>18719, +132092=>18719, +60891=>18720, +146685=>18720, +60893=>18721, +149785=>18721, +22394=>18722, +60904=>18722, +21722=>18723, +60912=>18723, +29050=>18724, +60928=>18724, +60949=>18725, +150135=>18725, +60955=>18726, +166490=>18726, +60962=>18727, +194624=>18727, +60976=>18728, +137275=>18728, +61000=>18729, +155993=>18729, +61014=>18730, +144373=>18730, +61019=>18731, +166850=>18731, +61024=>18732, +138566=>18732, +61054=>18733, +159441=>18733, +13877=>18734, +61065=>18734, +61084=>18735, +166701=>18735, +21024=>18736, +61088=>18736, +15384=>18737, +61089=>18737, +146631=>18738, +61090=>18738, +155351=>18739, +61091=>18739, +161366=>18740, +61092=>18740, +152881=>18741, +61093=>18741, +137540=>18742, +61094=>18742, +170243=>18743, +61096=>18743, +159196=>18744, +61097=>18744, +159917=>18745, +61098=>18745, +156077=>18746, +61100=>18746, +166415=>18747, +61101=>18747, +145015=>18748, +61102=>18748, +131310=>18749, +61103=>18749, +157766=>18750, +61104=>18750, +151310=>18751, +61105=>18751, +17762=>18752, +61106=>18752, +23327=>18753, +61107=>18753, +156492=>18754, +61108=>18754, +40784=>18755, +61109=>18755, +40614=>18756, +61110=>18756, +156267=>18757, +61111=>18757, +20962=>18758, +57415=>18758, +21314=>18759, +57416=>18759, +26285=>18760, +57520=>18760, +22620=>18761, +57547=>18761, +21843=>18762, +57566=>18762, +15749=>18763, +57594=>18763, +24928=>18764, +57608=>18764, +18606=>18765, +57668=>18765, +38845=>18766, +57676=>18766, +57693=>18767, +137335=>18767, +24755=>18768, +57703=>18768, +33828=>18769, +57711=>18769, +38932=>18770, +57748=>18770, +147596=>18771, +57749=>18771, +57764=>18772, +143486=>18772, +57787=>18773, +138813=>18773, +15147=>18774, +57798=>18774, +15666=>18775, +57824=>18775, +57857=>18776, +132021=>18776, +28801=>18777, +57944=>18777, +23708=>18778, +57959=>18778, +58017=>18779, +132547=>18779, +14128=>18780, +58028=>18780, +136054=>18781, +58096=>18781, +150034=>18782, +58097=>18782, +58111=>18783, +166699=>18783, +58112=>18784, +155779=>18784, +256=>18785, +62233=>18785, +193=>18786, +62234=>18786, +461=>18787, +62235=>18787, +192=>18788, +62236=>18788, +274=>18789, +62237=>18789, +201=>18790, +62238=>18790, +282=>18791, +62239=>18791, +200=>18792, +62240=>18792, +332=>18793, +62241=>18793, +211=>18794, +62242=>18794, +465=>18795, +62243=>18795, +210=>18796, +62244=>18796, +62245=>18797, +7870=>18798, +62246=>18798, +62247=>18799, +7872=>18800, +62248=>18800, +202=>18801, +62249=>18801, +257=>18802, +62250=>18802, +225=>18803, +62251=>18803, +462=>18804, +62252=>18804, +224=>18805, +62253=>18805, +593=>18806, +62254=>18806, +275=>18807, +62255=>18807, +233=>18808, +62256=>18808, +283=>18809, +62257=>18809, +232=>18810, +62258=>18810, +299=>18811, +62259=>18811, +237=>18812, +62260=>18812, +464=>18813, +62261=>18813, +236=>18814, +62262=>18814, +333=>18815, +62263=>18815, +243=>18816, +62264=>18816, +466=>18817, +62265=>18817, +242=>18818, +62266=>18818, +363=>18819, +62267=>18819, +250=>18820, +62268=>18820, +468=>18821, +62269=>18821, +249=>18822, +62270=>18822, +470=>18823, +62271=>18823, +472=>18824, +62272=>18824, +474=>18825, +62273=>18825, +476=>18826, +62274=>18826, +252=>18827, +62275=>18827, +62276=>18828, +7871=>18829, +62277=>18829, +62278=>18830, +7873=>18831, +62279=>18831, +234=>18832, +62280=>18832, +609=>18833, +62281=>18833, +643=>18834, +63551=>18834, +592=>18835, +63552=>18835, +603=>18836, +63553=>18836, +596=>18837, +63554=>18837, +629=>18838, +63555=>18838, +339=>18839, +63556=>18839, +248=>18840, +63557=>18840, +331=>18841, +63558=>18841, +650=>18842, +63559=>18842, +618=>18843, +63560=>18843, +9178=>18844, +62282=>18844, +9179=>18845, +62283=>18845, +11933=>18846, +63530=>18846, +11974=>18847, +63539=>18847, +12003=>18848, +63547=>18848, +20539=>18849, +28158=>18850, +171123=>18851, +62841=>18851, +40870=>18852, +62842=>18852, +15817=>18853, +62843=>18853, +34959=>18854, +62845=>18855, +147790=>18855, +28791=>18856, +23797=>18857, +19232=>18858, +62848=>18858, +152013=>18859, +62849=>18859, +13657=>18860, +62850=>18860, +154928=>18861, +62851=>18861, +24866=>18862, +62853=>18863, +166450=>18863, +36775=>18864, +37366=>18865, +29073=>18866, +26393=>18867, +29626=>18868, +144001=>18869, +62859=>18869, +172295=>18870, +62860=>18870, +15499=>18871, +62861=>18871, +137600=>18872, +62862=>18872, +19216=>18873, +62863=>18873, +30948=>18874, +29698=>18875, +20910=>18876, +165647=>18877, +62867=>18877, +16393=>18878, +62868=>18878, +27235=>18879, +172730=>18880, +62870=>18880, +16931=>18881, +62871=>18881, +34319=>18882, +31274=>18883, +170311=>18884, +62875=>18884, +166634=>18885, +62876=>18885, +38741=>18886, +28749=>18887, +21284=>18888, +62880=>18889, +139390=>18889, +37876=>18890, +30425=>18891, +166371=>18892, +62883=>18892, +40871=>18893, +62884=>18893, +30685=>18894, +20131=>18895, +20464=>18896, +20668=>18897, +20015=>18898, +20247=>18899, +40872=>18900, +62891=>18900, +21556=>18901, +32139=>18902, +22674=>18903, +22736=>18904, +62896=>18905, +138678=>18905, +24210=>18906, +24217=>18907, +24514=>18908, +62900=>18909, +141074=>18909, +25995=>18910, +62902=>18911, +144377=>18911, +26905=>18912, +27203=>18913, +62905=>18914, +146531=>18914, +27903=>18915, +29184=>18916, +62909=>18917, +148741=>18917, +29580=>18918, +16091=>18919, +62911=>18919, +150035=>18920, +62912=>18920, +23317=>18921, +29881=>18922, +35715=>18923, +154788=>18924, +62916=>18924, +153237=>18925, +62917=>18925, +31379=>18926, +31724=>18927, +31939=>18928, +32364=>18929, +33528=>18930, +34199=>18931, +40873=>18932, +62924=>18932, +34960=>18933, +40874=>18934, +62926=>18934, +36537=>18935, +40875=>18936, +62928=>18936, +36815=>18937, +34143=>18938, +39392=>18939, +37409=>18940, +40876=>18941, +62933=>18941, +167353=>18942, +62934=>18942, +136255=>18943, +62935=>18943, +16497=>18944, +62936=>18944, +17058=>18945, +62937=>18945, +23066=>18946, +39016=>18947, +26475=>18948, +17014=>18949, +62944=>18949, +22333=>18950, +34262=>18951, +62948=>18952, +149883=>18952, +33471=>18953, +160013=>18954, +62950=>18954, +19585=>18955, +62951=>18955, +159092=>18956, +62952=>18956, +23931=>18957, +158485=>18958, +62954=>18958, +159678=>18959, +62955=>18959, +40877=>18960, +62956=>18960, +40878=>18961, +62957=>18961, +23446=>18962, +40879=>18963, +62959=>18963, +32347=>18964, +17392=>18965, +19506=>18966, +17923=>18967, +17830=>18968, +17784=>18969, +160359=>18970, +19831=>18971, +17843=>18972, +162993=>18973, +19682=>18974, +163013=>18975, +15253=>18976, +18230=>18977, +18244=>18978, +19527=>18979, +19520=>18980, +148159=>18981, +144919=>18982, +160594=>18983, +159371=>18984, +159954=>18985, +19543=>18986, +172881=>18987, +18255=>18988, +17882=>18989, +19589=>18990, +162924=>18991, +19719=>18992, +19108=>18993, +18081=>18994, +158499=>18995, +29221=>18996, +154196=>18997, +137827=>18998, +146950=>18999, +147297=>19000, +26189=>19001, +22267=>19002, +32149=>19003, +22813=>19004, +166841=>19005, +15860=>19006, +38708=>19007, +162799=>19008, +23515=>19009, +138590=>19010, +23204=>19011, +13861=>19012, +171696=>19013, +23249=>19014, +23479=>19015, +23804=>19016, +26478=>19017, +34195=>19018, +170309=>19019, +29793=>19020, +29853=>19021, +133743=>19022, +26343=>19023, +28247=>19024, +31178=>19025, +15752=>19026, +17603=>19027, +143958=>19028, +141206=>19029, +17306=>19030, +17718=>19031, +23765=>19032, +146202=>19033, +35577=>19034, +23672=>19035, +15634=>19036, +144721=>19037, +23928=>19038, +40882=>19039, +29015=>19040, +17752=>19041, +147692=>19042, +138787=>19043, +19575=>19044, +14712=>19045, +13386=>19046, +131492=>19047, +158785=>19048, +35532=>19049, +20404=>19050, +131641=>19051, +22975=>19052, +33132=>19053, +38998=>19054, +170234=>19055, +24379=>19056, +134047=>19057, +139713=>19058, +166253=>19059, +16642=>19060, +18107=>19061, +168057=>19062, +16135=>19063, +40883=>19064, +172469=>19065, +16632=>19066, +14294=>19067, +18167=>19068, +158790=>19069, +16764=>19070, +165554=>19071, +160767=>19072, +17773=>19073, +14548=>19074, +152730=>19075, +17761=>19076, +17691=>19077, +19849=>19078, +19579=>19079, +19830=>19080, +17898=>19081, +16328=>19082, +150287=>19083, +13921=>19084, +17630=>19085, +17597=>19086, +16877=>19087, +); +// --- EOF --- --- /dev/null +++ b/tcpdf/fonts/uni2cid_ag15.php @@ -1,1 +1,30223 @@ +1, +33=>2, +34=>3, +35=>4, +36=>5, +37=>6, +38=>7, +39=>8, +40=>9, +41=>10, +42=>11, +43=>12, +44=>13, +45=>14, +46=>15, +47=>16, +48=>17, +49=>18, +50=>19, +51=>20, +52=>21, +53=>22, +54=>23, +55=>24, +56=>25, +57=>26, +58=>27, +59=>28, +60=>29, +61=>30, +62=>31, +63=>32, +64=>33, +65=>34, +66=>35, +67=>36, +68=>37, +69=>38, +70=>39, +71=>40, +72=>41, +73=>42, +74=>43, +75=>44, +76=>45, +77=>46, +78=>47, +79=>48, +80=>49, +81=>50, +82=>51, +83=>52, +84=>53, +85=>54, +86=>55, +87=>56, +88=>57, +89=>58, +90=>59, +91=>60, +92=>61, +93=>62, +94=>63, +95=>64, +96=>65, +97=>66, +98=>67, +99=>68, +100=>69, +101=>70, +102=>71, +103=>72, +104=>73, +105=>74, +106=>75, +107=>76, +108=>77, +109=>78, +110=>79, +111=>80, +112=>81, +113=>82, +114=>83, +115=>84, +116=>85, +117=>86, +118=>87, +119=>88, +120=>89, +121=>90, +122=>91, +123=>92, +124=>93, +125=>94, +126=>95, +12288=>96, +12289=>97, +12290=>98, +183=>99, +12539=>99, +713=>100, +711=>101, +168=>102, +12291=>103, +12293=>104, +8212=>105, +65374=>106, +8214=>107, +8230=>108, +8943=>108, +8216=>109, +8217=>110, +8220=>111, +8221=>112, +12308=>113, +12309=>114, +12296=>115, +12297=>116, +12298=>117, +12299=>118, +12300=>119, +12301=>120, +12302=>121, +12303=>122, +12310=>123, +12311=>124, +12304=>125, +12305=>126, +177=>127, +215=>128, +247=>129, +8758=>130, +8743=>131, +8744=>132, +8721=>133, +8719=>134, +8746=>135, +8745=>136, +8712=>137, +8759=>138, +8730=>139, +8869=>140, +8741=>141, +8736=>142, +8978=>143, +8857=>144, +8747=>145, +8750=>146, +8801=>147, +8780=>148, +8776=>149, +8765=>150, +8733=>151, +8800=>152, +8814=>153, +8815=>154, +8804=>155, +8805=>156, +8734=>157, +8757=>158, +8756=>159, +9794=>160, +9792=>161, +176=>162, +8242=>163, +8243=>164, +8451=>165, +65284=>166, +164=>167, +65504=>168, +65505=>169, +8240=>170, +167=>171, +8470=>172, +9734=>173, +9733=>174, +9675=>175, +9679=>176, +9678=>177, +9671=>178, +9670=>179, +9633=>180, +9632=>181, +9651=>182, +9650=>183, +8251=>184, +8594=>185, +8592=>186, +8593=>187, +8595=>188, +12307=>189, +9352=>190, +9353=>191, +9354=>192, +9355=>193, +9356=>194, +9357=>195, +9358=>196, +9359=>197, +9360=>198, +9361=>199, +9362=>200, +9363=>201, +9364=>202, +9365=>203, +9366=>204, +9367=>205, +9368=>206, +9369=>207, +9370=>208, +9371=>209, +9332=>210, +9333=>211, +9334=>212, +9335=>213, +9336=>214, +9337=>215, +9338=>216, +9339=>217, +9340=>218, +9341=>219, +9342=>220, +9343=>221, +9344=>222, +9345=>223, +9346=>224, +9347=>225, +9348=>226, +9349=>227, +9350=>228, +9351=>229, +9312=>230, +9313=>231, +9314=>232, +9315=>233, +9316=>234, +9317=>235, +9318=>236, +9319=>237, +9320=>238, +9321=>239, +12832=>240, +12833=>241, +12834=>242, +12835=>243, +12836=>244, +12837=>245, +12838=>246, +12839=>247, +12840=>248, +12841=>249, +8544=>250, +8545=>251, +8546=>252, +8547=>253, +8548=>254, +8549=>255, +8550=>256, +8551=>257, +8552=>258, +8553=>259, +8554=>260, +8555=>261, +65281=>262, +65282=>263, +65283=>264, +65509=>265, +65285=>266, +65286=>267, +65287=>268, +65288=>269, +65289=>270, +65290=>271, +65291=>272, +65292=>273, +65293=>274, +65294=>275, +65295=>276, +65296=>277, +65297=>278, +65298=>279, +65299=>280, +65300=>281, +65301=>282, +65302=>283, +65303=>284, +65304=>285, +65305=>286, +65306=>287, +65307=>288, +65308=>289, +65309=>290, +65310=>291, +65311=>292, +65312=>293, +65313=>294, +65314=>295, +65315=>296, +65316=>297, +65317=>298, +65318=>299, +65319=>300, +65320=>301, +65321=>302, +65322=>303, +65323=>304, +65324=>305, +65325=>306, +65326=>307, +65327=>308, +65328=>309, +65329=>310, +65330=>311, +65331=>312, +65332=>313, +65333=>314, +65334=>315, +65335=>316, +65336=>317, +65337=>318, +65338=>319, +65339=>320, +65340=>321, +65341=>322, +65342=>323, +65343=>324, +65344=>325, +65345=>326, +65346=>327, +65347=>328, +65348=>329, +65349=>330, +65350=>331, +65351=>332, +65352=>333, +65353=>334, +65354=>335, +65355=>336, +65356=>337, +65357=>338, +65358=>339, +65359=>340, +65360=>341, +65361=>342, +65362=>343, +65363=>344, +65364=>345, +65365=>346, +65366=>347, +65367=>348, +65368=>349, +65369=>350, +65370=>351, +65371=>352, +65372=>353, +65373=>354, +65507=>355, +12353=>356, +12354=>357, +12355=>358, +12356=>359, +12357=>360, +12358=>361, +12359=>362, +12360=>363, +12361=>364, +12362=>365, +12363=>366, +12364=>367, +12365=>368, +12366=>369, +12367=>370, +12368=>371, +12369=>372, +12370=>373, +12371=>374, +12372=>375, +12373=>376, +12374=>377, +12375=>378, +12376=>379, +12377=>380, +12378=>381, +12379=>382, +12380=>383, +12381=>384, +12382=>385, +12383=>386, +12384=>387, +12385=>388, +12386=>389, +12387=>390, +12388=>391, +12389=>392, +12390=>393, +12391=>394, +12392=>395, +12393=>396, +12394=>397, +12395=>398, +12396=>399, +12397=>400, +12398=>401, +12399=>402, +12400=>403, +12401=>404, +12402=>405, +12403=>406, +12404=>407, +12405=>408, +12406=>409, +12407=>410, +12408=>411, +12409=>412, +12410=>413, +12411=>414, +12412=>415, +12413=>416, +12414=>417, +12415=>418, +12416=>419, +12417=>420, +12418=>421, +12419=>422, +12420=>423, +12421=>424, +12422=>425, +12423=>426, +12424=>427, +12425=>428, +12426=>429, +12427=>430, +12428=>431, +12429=>432, +12430=>433, +12431=>434, +12432=>435, +12433=>436, +12434=>437, +12435=>438, +12449=>439, +12450=>440, +12451=>441, +12452=>442, +12453=>443, +12454=>444, +12455=>445, +12456=>446, +12457=>447, +12458=>448, +12459=>449, +12460=>450, +12461=>451, +12462=>452, +12463=>453, +12464=>454, +12465=>455, +12466=>456, +12467=>457, +12468=>458, +12469=>459, +12470=>460, +12471=>461, +12472=>462, +12473=>463, +12474=>464, +12475=>465, +12476=>466, +12477=>467, +12478=>468, +12479=>469, +12480=>470, +12481=>471, +12482=>472, +12483=>473, +12484=>474, +12485=>475, +12486=>476, +12487=>477, +12488=>478, +12489=>479, +12490=>480, +12491=>481, +12492=>482, +12493=>483, +12494=>484, +12495=>485, +12496=>486, +12497=>487, +12498=>488, +12499=>489, +12500=>490, +12501=>491, +12502=>492, +12503=>493, +12504=>494, +12505=>495, +12506=>496, +12507=>497, +12508=>498, +12509=>499, +12510=>500, +12511=>501, +12512=>502, +12513=>503, +12514=>504, +12515=>505, +12516=>506, +12517=>507, +12518=>508, +12519=>509, +12520=>510, +12521=>511, +12522=>512, +12523=>513, +12524=>514, +12525=>515, +12526=>516, +12527=>517, +12528=>518, +12529=>519, +12530=>520, +12531=>521, +12532=>522, +12533=>523, +12534=>524, +913=>525, +914=>526, +915=>527, +916=>528, +917=>529, +918=>530, +919=>531, +920=>532, +921=>533, +922=>534, +923=>535, +924=>536, +925=>537, +926=>538, +927=>539, +928=>540, +929=>541, +931=>542, +932=>543, +933=>544, +934=>545, +935=>546, +936=>547, +937=>548, +945=>549, +946=>550, +947=>551, +948=>552, +949=>553, +950=>554, +951=>555, +952=>556, +953=>557, +954=>558, +955=>559, +956=>560, +957=>561, +958=>562, +959=>563, +960=>564, +961=>565, +963=>566, +964=>567, +965=>568, +966=>569, +967=>570, +968=>571, +969=>572, +65040=>573, +59277=>573, +65042=>574, +59278=>574, +65041=>575, +59279=>575, +59280=>576, +65043=>576, +59281=>577, +65044=>577, +59282=>578, +65045=>578, +59283=>579, +65046=>579, +65077=>580, +65078=>581, +65081=>582, +65082=>583, +65087=>584, +65088=>585, +65085=>586, +65086=>587, +65089=>588, +65090=>589, +65091=>590, +65092=>591, +59284=>592, +65047=>592, +59285=>593, +65048=>593, +65083=>594, +65084=>595, +65079=>596, +65080=>597, +65073=>598, +8285=>599, +59286=>599, +65049=>599, +65075=>600, +65076=>601, +1040=>602, +1041=>603, +1042=>604, +1043=>605, +1044=>606, +1045=>607, +1025=>608, +1046=>609, +1047=>610, +1048=>611, +1049=>612, +1050=>613, +1051=>614, +1052=>615, +1053=>616, +1054=>617, +1055=>618, +1056=>619, +1057=>620, +1058=>621, +1059=>622, +1060=>623, +1061=>624, +1062=>625, +1063=>626, +1064=>627, +1065=>628, +1066=>629, +1067=>630, +1068=>631, +1069=>632, +1070=>633, +1071=>634, +1072=>635, +1073=>636, +1074=>637, +1075=>638, +1076=>639, +1077=>640, +1105=>641, +1078=>642, +1079=>643, +1080=>644, +1081=>645, +1082=>646, +1083=>647, +1084=>648, +1085=>649, +1086=>650, +1087=>651, +1088=>652, +1089=>653, +1090=>654, +1091=>655, +1092=>656, +1093=>657, +1094=>658, +1095=>659, +1096=>660, +1097=>661, +1098=>662, +1099=>663, +1100=>664, +1101=>665, +1102=>666, +1103=>667, +257=>668, +225=>669, +462=>670, +224=>671, +275=>672, +233=>673, +283=>674, +232=>675, +299=>676, +237=>677, +464=>678, +236=>679, +333=>680, +243=>681, +466=>682, +242=>683, +363=>684, +250=>685, +468=>686, +249=>687, +470=>688, +472=>689, +474=>690, +476=>691, +252=>692, +234=>693, +593=>694, +7743=>695, +59335=>695, +324=>696, +328=>697, +505=>698, +59336=>698, +609=>699, +12549=>700, +12550=>701, +12551=>702, +12552=>703, +12553=>704, +12554=>705, +12555=>706, +12556=>707, +12557=>708, +12558=>709, +12559=>710, +12560=>711, +12561=>712, +12562=>713, +12563=>714, +12564=>715, +12565=>716, +12566=>717, +12567=>718, +12568=>719, +12569=>720, +12570=>721, +12571=>722, +12572=>723, +12573=>724, +12574=>725, +12575=>726, +12576=>727, +12577=>728, +12578=>729, +12579=>730, +12580=>731, +12581=>732, +12582=>733, +12583=>734, +12584=>735, +12585=>736, +9472=>738, +9473=>739, +9474=>740, +9475=>741, +9476=>742, +9477=>743, +9478=>744, +9479=>745, +9480=>746, +9481=>747, +9482=>748, +9483=>749, +9484=>750, +9485=>751, +9486=>752, +9487=>753, +9488=>754, +9489=>755, +9490=>756, +9491=>757, +9492=>758, +9493=>759, +9494=>760, +9495=>761, +9496=>762, +9497=>763, +9498=>764, +9499=>765, +9500=>766, +9501=>767, +9502=>768, +9503=>769, +9504=>770, +9505=>771, +9506=>772, +9507=>773, +9508=>774, +9509=>775, +9510=>776, +9511=>777, +9512=>778, +9513=>779, +9514=>780, +9515=>781, +9516=>782, +9517=>783, +9518=>784, +9519=>785, +9520=>786, +9521=>787, +9522=>788, +9523=>789, +9524=>790, +9525=>791, +9526=>792, +9527=>793, +9528=>794, +9529=>795, +9530=>796, +9531=>797, +9532=>798, +9533=>799, +9534=>800, +9535=>801, +9536=>802, +9537=>803, +9538=>804, +9539=>805, +9540=>806, +9541=>807, +9542=>808, +9543=>809, +9544=>810, +9545=>811, +9546=>812, +9547=>813, +21834=>940, +38463=>941, +22467=>942, +25384=>943, +21710=>944, +21769=>945, +21696=>946, +30353=>947, +30284=>948, +34108=>949, +30702=>950, +33406=>951, +30861=>952, +29233=>953, +38552=>954, +38797=>955, +27688=>956, +23433=>957, +20474=>958, +25353=>959, +26263=>960, +23736=>961, +33018=>962, +26696=>963, +32942=>964, +26114=>965, +30414=>966, +20985=>967, +25942=>968, +29100=>969, +32753=>970, +34948=>971, +20658=>972, +22885=>973, +25034=>974, +28595=>975, +33453=>976, +25420=>977, +25170=>978, +21485=>979, +21543=>980, +31494=>981, +12043=>982, +20843=>982, +30116=>983, +24052=>984, +25300=>985, +36299=>986, +38774=>987, +25226=>988, +32793=>989, +22365=>990, +38712=>991, +32610=>992, +29240=>993, +12137=>994, +30333=>994, +26575=>995, +30334=>996, +25670=>997, +20336=>998, +36133=>999, +25308=>1000, +31255=>1001, +26001=>1002, +29677=>1003, +25644=>1004, +25203=>1005, +33324=>1006, +39041=>1007, +26495=>1008, +29256=>1009, +25198=>1010, +25292=>1011, +20276=>1012, +29923=>1013, +21322=>1014, +21150=>1015, +32458=>1016, +37030=>1017, +24110=>1018, +26758=>1019, +27036=>1020, +33152=>1021, +32465=>1022, +26834=>1023, +30917=>1024, +34444=>1025, +38225=>1026, +20621=>1027, +35876=>1028, +33502=>1029, +32990=>1030, +21253=>1031, +35090=>1032, +21093=>1033, +34180=>1034, +38649=>1035, +20445=>1036, +22561=>1037, +39281=>1038, +23453=>1039, +25265=>1040, +25253=>1041, +26292=>1042, +35961=>1043, +40077=>1044, +29190=>1045, +26479=>1046, +30865=>1047, +24754=>1048, +21329=>1049, +21271=>1050, +36744=>1051, +32972=>1052, +36125=>1053, +38049=>1054, +20493=>1055, +29384=>1056, +22791=>1057, +24811=>1058, +28953=>1059, +34987=>1060, +22868=>1061, +33519=>1062, +26412=>1063, +31528=>1064, +23849=>1065, +32503=>1066, +29997=>1067, +27893=>1068, +36454=>1069, +36856=>1070, +36924=>1071, +12240=>1072, +40763=>1072, +12112=>1073, +27604=>1073, +37145=>1074, +31508=>1075, +24444=>1076, +30887=>1077, +34006=>1078, +34109=>1079, +27605=>1080, +27609=>1081, +27606=>1082, +24065=>1083, +24199=>1084, +30201=>1085, +38381=>1086, +25949=>1087, +24330=>1088, +24517=>1089, +36767=>1090, +22721=>1091, +33218=>1092, +36991=>1093, +38491=>1094, +38829=>1095, +36793=>1096, +32534=>1097, +36140=>1098, +25153=>1099, +20415=>1100, +21464=>1101, +21342=>1102, +36776=>1103, +36777=>1104, +36779=>1105, +36941=>1106, +26631=>1107, +24426=>1108, +33176=>1109, +34920=>1110, +40150=>1111, +24971=>1112, +21035=>1113, +30250=>1114, +24428=>1115, +25996=>1116, +28626=>1117, +28392=>1118, +23486=>1119, +25672=>1120, +20853=>1121, +20912=>1122, +26564=>1123, +19993=>1124, +31177=>1125, +39292=>1126, +28851=>1127, +30149=>1128, +24182=>1129, +29627=>1130, +33760=>1131, +25773=>1132, +25320=>1133, +38069=>1134, +27874=>1135, +21338=>1136, +21187=>1137, +25615=>1138, +38082=>1139, +31636=>1140, +20271=>1141, +24091=>1142, +33334=>1143, +33046=>1144, +33162=>1145, +28196=>1146, +27850=>1147, +39539=>1148, +25429=>1149, +12056=>1150, +21340=>1150, +21754=>1151, +34917=>1152, +22496=>1153, +19981=>1154, +24067=>1155, +27493=>1156, +31807=>1157, +37096=>1158, +24598=>1159, +25830=>1160, +29468=>1161, +35009=>1162, +26448=>1163, +25165=>1164, +36130=>1165, +30572=>1166, +36393=>1167, +37319=>1168, +24425=>1169, +33756=>1170, +34081=>1171, +39184=>1172, +21442=>1173, +34453=>1174, +27531=>1175, +24813=>1176, +24808=>1177, +28799=>1178, +33485=>1179, +33329=>1180, +20179=>1181, +27815=>1182, +34255=>1183, +25805=>1184, +31961=>1185, +27133=>1186, +26361=>1187, +33609=>1188, +21397=>1189, +31574=>1190, +20391=>1191, +20876=>1192, +27979=>1193, +23618=>1194, +36461=>1195, +25554=>1196, +21449=>1197, +33580=>1198, +33590=>1199, +26597=>1200, +30900=>1201, +25661=>1202, +23519=>1203, +23700=>1204, +24046=>1205, +35815=>1206, +25286=>1207, +26612=>1208, +35962=>1209, +25600=>1210, +25530=>1211, +34633=>1212, +39307=>1213, +35863=>1214, +32544=>1215, +38130=>1216, +20135=>1217, +38416=>1218, +39076=>1219, +26124=>1220, +29462=>1221, +22330=>1222, +23581=>1223, +24120=>1224, +38271=>1225, +20607=>1226, +32928=>1227, +12058=>1228, +21378=>1228, +25950=>1229, +30021=>1230, +21809=>1231, +20513=>1232, +36229=>1233, +25220=>1234, +38046=>1235, +26397=>1236, +22066=>1237, +28526=>1238, +24034=>1239, +21557=>1240, +28818=>1241, +36710=>1242, +25199=>1243, +25764=>1244, +25507=>1245, +24443=>1246, +28552=>1247, +37108=>1248, +12162=>1249, +33251=>1249, +12192=>1250, +36784=>1250, +23576=>1251, +26216=>1252, +24561=>1253, +27785=>1254, +38472=>1255, +36225=>1256, +34924=>1257, +25745=>1258, +31216=>1259, +22478=>1260, +27225=>1261, +25104=>1262, +21576=>1263, +20056=>1264, +31243=>1265, +24809=>1266, +28548=>1267, +35802=>1268, +25215=>1269, +36894=>1270, +39563=>1271, +31204=>1272, +21507=>1273, +30196=>1274, +25345=>1275, +21273=>1276, +27744=>1277, +36831=>1278, +24347=>1279, +39536=>1280, +32827=>1281, +40831=>1282, +20360=>1283, +23610=>1284, +12186=>1285, +36196=>1285, +32709=>1286, +26021=>1287, +28861=>1288, +20805=>1289, +20914=>1290, +12173=>1291, +34411=>1291, +23815=>1292, +23456=>1293, +25277=>1294, +37228=>1295, +30068=>1296, +36364=>1297, +31264=>1298, +24833=>1299, +31609=>1300, +20167=>1301, +32504=>1302, +30597=>1303, +19985=>1304, +33261=>1305, +21021=>1306, +20986=>1307, +27249=>1308, +21416=>1309, +36487=>1310, +38148=>1311, +38607=>1312, +28353=>1313, +38500=>1314, +26970=>1315, +30784=>1316, +20648=>1317, +30679=>1318, +25616=>1319, +35302=>1320, +22788=>1321, +25571=>1322, +24029=>1323, +31359=>1324, +26941=>1325, +20256=>1326, +33337=>1327, +21912=>1328, +20018=>1329, +30126=>1330, +31383=>1331, +24162=>1332, +24202=>1333, +38383=>1334, +21019=>1335, +21561=>1336, +28810=>1337, +25462=>1338, +38180=>1339, +22402=>1340, +26149=>1341, +26943=>1342, +37255=>1343, +21767=>1344, +28147=>1345, +32431=>1346, +34850=>1347, +25139=>1348, +32496=>1349, +30133=>1350, +33576=>1351, +30913=>1352, +38604=>1353, +36766=>1354, +24904=>1355, +29943=>1356, +35789=>1357, +27492=>1358, +21050=>1359, +36176=>1360, +27425=>1361, +32874=>1362, +33905=>1363, +22257=>1364, +21254=>1365, +20174=>1366, +19995=>1367, +20945=>1368, +31895=>1369, +37259=>1370, +31751=>1371, +20419=>1372, +36479=>1373, +31713=>1374, +31388=>1375, +25703=>1376, +23828=>1377, +20652=>1378, +33030=>1379, +30209=>1380, +31929=>1381, +28140=>1382, +32736=>1383, +26449=>1384, +23384=>1385, +12072=>1386, +23544=>1386, +30923=>1387, +25774=>1388, +25619=>1389, +25514=>1390, +25387=>1391, +38169=>1392, +25645=>1393, +36798=>1394, +31572=>1395, +30249=>1396, +25171=>1397, +12068=>1398, +22823=>1398, +21574=>1399, +12109=>1400, +27513=>1400, +20643=>1401, +25140=>1402, +24102=>1403, +27526=>1404, +20195=>1405, +36151=>1406, +34955=>1407, +24453=>1408, +36910=>1409, +24608=>1410, +32829=>1411, +25285=>1412, +20025=>1413, +21333=>1414, +37112=>1415, +25528=>1416, +32966=>1417, +26086=>1418, +27694=>1419, +20294=>1420, +24814=>1421, +28129=>1422, +35806=>1423, +24377=>1424, +34507=>1425, +24403=>1426, +25377=>1427, +20826=>1428, +33633=>1429, +26723=>1430, +12049=>1431, +20992=>1431, +25443=>1432, +36424=>1433, +20498=>1434, +23707=>1435, +31095=>1436, +23548=>1437, +21040=>1438, +31291=>1439, +24764=>1440, +36947=>1441, +30423=>1442, +24503=>1443, +24471=>1444, +30340=>1445, +36460=>1446, +28783=>1447, +30331=>1448, +31561=>1449, +30634=>1450, +20979=>1451, +37011=>1452, +22564=>1453, +20302=>1454, +28404=>1455, +36842=>1456, +25932=>1457, +31515=>1458, +29380=>1459, +28068=>1460, +32735=>1461, +23265=>1462, +25269=>1463, +24213=>1464, +22320=>1465, +33922=>1466, +31532=>1467, +24093=>1468, +24351=>1469, +36882=>1470, +32532=>1471, +39072=>1472, +25474=>1473, +28359=>1474, +30872=>1475, +28857=>1476, +20856=>1477, +38747=>1478, +22443=>1479, +30005=>1480, +20291=>1481, +30008=>1482, +24215=>1483, +24806=>1484, +22880=>1485, +28096=>1486, +27583=>1487, +30857=>1488, +21500=>1489, +38613=>1490, +20939=>1491, +20993=>1492, +25481=>1493, +21514=>1494, +38035=>1495, +35843=>1496, +36300=>1497, +29241=>1498, +30879=>1499, +34678=>1500, +36845=>1501, +35853=>1502, +21472=>1503, +19969=>1504, +30447=>1505, +21486=>1506, +38025=>1507, +39030=>1508, +12237=>1509, +40718=>1509, +38189=>1510, +23450=>1511, +35746=>1512, +20002=>1513, +19996=>1514, +20908=>1515, +33891=>1516, +25026=>1517, +21160=>1518, +26635=>1519, +20375=>1520, +24683=>1521, +20923=>1522, +27934=>1523, +20828=>1524, +25238=>1525, +12099=>1526, +26007=>1526, +38497=>1527, +12182=>1528, +35910=>1528, +36887=>1529, +30168=>1530, +37117=>1531, +30563=>1532, +27602=>1533, +29322=>1534, +29420=>1535, +35835=>1536, +22581=>1537, +30585=>1538, +36172=>1539, +26460=>1540, +38208=>1541, +32922=>1542, +24230=>1543, +28193=>1544, +22930=>1545, +31471=>1546, +30701=>1547, +38203=>1548, +27573=>1549, +26029=>1550, +32526=>1551, +22534=>1552, +20817=>1553, +38431=>1554, +23545=>1555, +22697=>1556, +21544=>1557, +36466=>1558, +25958=>1559, +39039=>1560, +22244=>1561, +38045=>1562, +30462=>1563, +36929=>1564, +25479=>1565, +21702=>1566, +22810=>1567, +22842=>1568, +22427=>1569, +36530=>1570, +26421=>1571, +36346=>1572, +33333=>1573, +21057=>1574, +24816=>1575, +22549=>1576, +34558=>1577, +23784=>1578, +40517=>1579, +20420=>1580, +39069=>1581, +35769=>1582, +23077=>1583, +24694=>1584, +21380=>1585, +25212=>1586, +36943=>1587, +37122=>1588, +39295=>1589, +24681=>1590, +12157=>1591, +32780=>1591, +12041=>1592, +20799=>1592, +12159=>1593, +32819=>1593, +23572=>1594, +39285=>1595, +27953=>1596, +12038=>1597, +20108=>1597, +36144=>1598, +21457=>1599, +32602=>1600, +31567=>1601, +20240=>1602, +20047=>1603, +38400=>1604, +27861=>1605, +29648=>1606, +34281=>1607, +24070=>1608, +30058=>1609, +32763=>1610, +27146=>1611, +30718=>1612, +38034=>1613, +32321=>1614, +20961=>1615, +28902=>1616, +21453=>1617, +36820=>1618, +33539=>1619, +36137=>1620, +29359=>1621, +39277=>1622, +27867=>1623, +22346=>1624, +33459=>1625, +12101=>1626, +26041=>1626, +32938=>1627, +25151=>1628, +38450=>1629, +22952=>1630, +20223=>1631, +35775=>1632, +32442=>1633, +25918=>1634, +33778=>1635, +12206=>1636, +38750=>1636, +21857=>1637, +39134=>1638, +32933=>1639, +21290=>1640, +35837=>1641, +21536=>1642, +32954=>1643, +24223=>1644, +27832=>1645, +36153=>1646, +33452=>1647, +37210=>1648, +21545=>1649, +27675=>1650, +20998=>1651, +32439=>1652, +22367=>1653, +28954=>1654, +27774=>1655, +31881=>1656, +22859=>1657, +20221=>1658, +24575=>1659, +24868=>1660, +31914=>1661, +20016=>1662, +23553=>1663, +26539=>1664, +34562=>1665, +23792=>1666, +38155=>1667, +39118=>1668, +30127=>1669, +28925=>1670, +36898=>1671, +20911=>1672, +32541=>1673, +35773=>1674, +22857=>1675, +20964=>1676, +20315=>1677, +21542=>1678, +22827=>1679, +25975=>1680, +32932=>1681, +23413=>1682, +25206=>1683, +25282=>1684, +36752=>1685, +24133=>1686, +27679=>1687, +31526=>1688, +20239=>1689, +20440=>1690, +26381=>1691, +28014=>1692, +28074=>1693, +31119=>1694, +34993=>1695, +24343=>1696, +29995=>1697, +25242=>1698, +36741=>1699, +20463=>1700, +37340=>1701, +26023=>1702, +33071=>1703, +33105=>1704, +24220=>1705, +33104=>1706, +36212=>1707, +21103=>1708, +35206=>1709, +36171=>1710, +22797=>1711, +20613=>1712, +20184=>1713, +12201=>1714, +38428=>1714, +12119=>1715, +29238=>1715, +33145=>1716, +36127=>1717, +23500=>1718, +35747=>1719, +38468=>1720, +22919=>1721, +32538=>1722, +21648=>1723, +22134=>1724, +22030=>1725, +35813=>1726, +25913=>1727, +27010=>1728, +38041=>1729, +30422=>1730, +28297=>1731, +12082=>1732, +24178=>1732, +12130=>1733, +29976=>1733, +26438=>1734, +26577=>1735, +31487=>1736, +32925=>1737, +36214=>1738, +24863=>1739, +31174=>1740, +25954=>1741, +36195=>1742, +20872=>1743, +21018=>1744, +38050=>1745, +32568=>1746, +32923=>1747, +32434=>1748, +23703=>1749, +28207=>1750, +26464=>1751, +31705=>1752, +30347=>1753, +12220=>1754, +39640=>1754, +33167=>1755, +32660=>1756, +31957=>1757, +25630=>1758, +38224=>1759, +31295=>1760, +21578=>1761, +21733=>1762, +27468=>1763, +25601=>1764, +12093=>1765, +25096=>1765, +40509=>1766, +33011=>1767, +30105=>1768, +21106=>1769, +12208=>1770, +38761=>1770, +33883=>1771, +26684=>1772, +34532=>1773, +38401=>1774, +38548=>1775, +38124=>1776, +20010=>1777, +21508=>1778, +32473=>1779, +26681=>1780, +36319=>1781, +32789=>1782, +26356=>1783, +24218=>1784, +32697=>1785, +22466=>1786, +32831=>1787, +26775=>1788, +12079=>1789, +24037=>1789, +25915=>1790, +21151=>1791, +24685=>1792, +40858=>1793, +20379=>1794, +36524=>1795, +20844=>1796, +23467=>1797, +12088=>1798, +24339=>1798, +24041=>1799, +27742=>1800, +25329=>1801, +36129=>1802, +20849=>1803, +38057=>1804, +21246=>1805, +27807=>1806, +33503=>1807, +29399=>1808, +22434=>1809, +26500=>1810, +36141=>1811, +22815=>1812, +36764=>1813, +33735=>1814, +21653=>1815, +31629=>1816, +20272=>1817, +27837=>1818, +23396=>1819, +22993=>1820, +12238=>1821, +40723=>1821, +21476=>1822, +34506=>1823, +12219=>1824, +39592=>1824, +12181=>1825, +35895=>1825, +32929=>1826, +25925=>1827, +39038=>1828, +22266=>1829, +38599=>1830, +21038=>1831, +12128=>1832, +29916=>1832, +21072=>1833, +23521=>1834, +25346=>1835, +35074=>1836, +20054=>1837, +25296=>1838, +24618=>1839, +26874=>1840, +20851=>1841, +23448=>1842, +20896=>1843, +35266=>1844, +31649=>1845, +39302=>1846, +32592=>1847, +24815=>1848, +28748=>1849, +36143=>1850, +20809=>1851, +12084=>1852, +24191=>1852, +36891=>1853, +29808=>1854, +35268=>1855, +22317=>1856, +30789=>1857, +24402=>1858, +40863=>1859, +38394=>1860, +36712=>1861, +12225=>1862, +39740=>1862, +35809=>1863, +30328=>1864, +26690=>1865, +26588=>1866, +36330=>1867, +36149=>1868, +21053=>1869, +36746=>1870, +28378=>1871, +26829=>1872, +38149=>1873, +37101=>1874, +22269=>1875, +26524=>1876, +35065=>1877, +36807=>1878, +21704=>1879, +39608=>1880, +23401=>1881, +28023=>1882, +27686=>1883, +20133=>1884, +23475=>1885, +39559=>1886, +37219=>1887, +25000=>1888, +37039=>1889, +38889=>1890, +21547=>1891, +28085=>1892, +23506=>1893, +20989=>1894, +21898=>1895, +32597=>1896, +32752=>1897, +25788=>1898, +25421=>1899, +26097=>1900, +25022=>1901, +24717=>1902, +28938=>1903, +27735=>1904, +27721=>1905, +22831=>1906, +26477=>1907, +33322=>1908, +22741=>1909, +22158=>1910, +35946=>1911, +27627=>1912, +37085=>1913, +22909=>1914, +32791=>1915, +21495=>1916, +28009=>1917, +21621=>1918, +21917=>1919, +33655=>1920, +33743=>1921, +26680=>1922, +12146=>1923, +31166=>1923, +21644=>1924, +20309=>1925, +21512=>1926, +30418=>1927, +35977=>1928, +38402=>1929, +27827=>1930, +28088=>1931, +36203=>1932, +35088=>1933, +40548=>1934, +36154=>1935, +22079=>1936, +12234=>1937, +40657=>1937, +30165=>1938, +24456=>1939, +29408=>1940, +24680=>1941, +21756=>1942, +20136=>1943, +27178=>1944, +34913=>1945, +24658=>1946, +36720=>1947, +21700=>1948, +28888=>1949, +34425=>1950, +40511=>1951, +27946=>1952, +23439=>1953, +24344=>1954, +32418=>1955, +21897=>1956, +20399=>1957, +29492=>1958, +21564=>1959, +21402=>1960, +20505=>1961, +21518=>1962, +21628=>1963, +20046=>1964, +24573=>1965, +29786=>1966, +22774=>1967, +33899=>1968, +32993=>1969, +34676=>1970, +29392=>1971, +31946=>1972, +28246=>1973, +24359=>1974, +34382=>1975, +21804=>1976, +25252=>1977, +20114=>1978, +27818=>1979, +25143=>1980, +33457=>1981, +21719=>1982, +21326=>1983, +29502=>1984, +28369=>1985, +30011=>1986, +21010=>1987, +21270=>1988, +35805=>1989, +27088=>1990, +24458=>1991, +24576=>1992, +28142=>1993, +22351=>1994, +27426=>1995, +29615=>1996, +26707=>1997, +36824=>1998, +32531=>1999, +25442=>2000, +24739=>2001, +21796=>2002, +30186=>2003, +35938=>2004, +28949=>2005, +28067=>2006, +23462=>2007, +24187=>2008, +33618=>2009, +24908=>2010, +40644=>2011, +30970=>2012, +34647=>2013, +31783=>2014, +30343=>2015, +20976=>2016, +24822=>2017, +29004=>2018, +26179=>2019, +24140=>2020, +24653=>2021, +35854=>2022, +28784=>2023, +25381=>2024, +36745=>2025, +24509=>2026, +24674=>2027, +34516=>2028, +22238=>2029, +27585=>2030, +24724=>2031, +24935=>2032, +21321=>2033, +24800=>2034, +26214=>2035, +36159=>2036, +31229=>2037, +20250=>2038, +28905=>2039, +27719=>2040, +35763=>2041, +35826=>2042, +32472=>2043, +33636=>2044, +26127=>2045, +23130=>2046, +39746=>2047, +27985=>2048, +28151=>2049, +35905=>2050, +27963=>2051, +20249=>2052, +12117=>2053, +28779=>2053, +33719=>2054, +25110=>2055, +24785=>2056, +38669=>2057, +36135=>2058, +31096=>2059, +20987=>2060, +22334=>2061, +22522=>2062, +26426=>2063, +30072=>2064, +31293=>2065, +31215=>2066, +31637=>2067, +32908=>2068, +39269=>2069, +36857=>2070, +28608=>2071, +35749=>2072, +40481=>2073, +23020=>2074, +32489=>2075, +32521=>2076, +21513=>2077, +26497=>2078, +26840=>2079, +36753=>2080, +31821=>2081, +38598=>2082, +21450=>2083, +24613=>2084, +30142=>2085, +27762=>2086, +21363=>2087, +23241=>2088, +32423=>2089, +25380=>2090, +12047=>2091, +20960=>2091, +33034=>2092, +12080=>2093, +24049=>2093, +34015=>2094, +25216=>2095, +20864=>2096, +23395=>2097, +20238=>2098, +31085=>2099, +21058=>2100, +24760=>2101, +27982=>2102, +23492=>2103, +23490=>2104, +35745=>2105, +35760=>2106, +26082=>2107, +24524=>2108, +38469=>2109, +22931=>2110, +32487=>2111, +32426=>2112, +22025=>2113, +26551=>2114, +22841=>2115, +20339=>2116, +23478=>2117, +21152=>2118, +33626=>2119, +39050=>2120, +36158=>2121, +30002=>2122, +38078=>2123, +20551=>2124, +31292=>2125, +20215=>2126, +26550=>2127, +39550=>2128, +23233=>2129, +27516=>2130, +30417=>2131, +22362=>2132, +23574=>2133, +31546=>2134, +38388=>2135, +29006=>2136, +20860=>2137, +32937=>2138, +33392=>2139, +22904=>2140, +32516=>2141, +33575=>2142, +26816=>2143, +26604=>2144, +30897=>2145, +30839=>2146, +25315=>2147, +25441=>2148, +31616=>2149, +20461=>2150, +21098=>2151, +20943=>2152, +33616=>2153, +27099=>2154, +37492=>2155, +36341=>2156, +36145=>2157, +35265=>2158, +38190=>2159, +31661=>2160, +20214=>2161, +20581=>2162, +33328=>2163, +21073=>2164, +39279=>2165, +28176=>2166, +28293=>2167, +28071=>2168, +24314=>2169, +20725=>2170, +23004=>2171, +23558=>2172, +27974=>2173, +27743=>2174, +30086=>2175, +33931=>2176, +26728=>2177, +22870=>2178, +35762=>2179, +21280=>2180, +37233=>2181, +38477=>2182, +34121=>2183, +26898=>2184, +30977=>2185, +28966=>2186, +33014=>2187, +20132=>2188, +37066=>2189, +27975=>2190, +39556=>2191, +23047=>2192, +22204=>2193, +25605=>2194, +38128=>2195, +30699=>2196, +20389=>2197, +33050=>2198, +29409=>2199, +12179=>2200, +35282=>2200, +39290=>2201, +32564=>2202, +32478=>2203, +21119=>2204, +25945=>2205, +37237=>2206, +36735=>2207, +36739=>2208, +21483=>2209, +31382=>2210, +25581=>2211, +25509=>2212, +30342=>2213, +31224=>2214, +34903=>2215, +38454=>2216, +25130=>2217, +21163=>2218, +33410=>2219, +26708=>2220, +26480=>2221, +25463=>2222, +30571=>2223, +31469=>2224, +27905=>2225, +32467=>2226, +35299=>2227, +22992=>2228, +25106=>2229, +34249=>2230, +33445=>2231, +30028=>2232, +20511=>2233, +20171=>2234, +30117=>2235, +35819=>2236, +23626=>2237, +12081=>2238, +24062=>2238, +31563=>2239, +12100=>2240, +26020=>2240, +12198=>2241, +37329=>2241, +20170=>2242, +27941=>2243, +35167=>2244, +32039=>2245, +38182=>2246, +20165=>2247, +35880=>2248, +36827=>2249, +38771=>2250, +26187=>2251, +31105=>2252, +36817=>2253, +28908=>2254, +28024=>2255, +23613=>2256, +21170=>2257, +33606=>2258, +20834=>2259, +33550=>2260, +30555=>2261, +26230=>2262, +40120=>2263, +20140=>2264, +24778=>2265, +31934=>2266, +31923=>2267, +32463=>2268, +20117=>2269, +35686=>2270, +26223=>2271, +39048=>2272, +38745=>2273, +22659=>2274, +25964=>2275, +38236=>2276, +24452=>2277, +30153=>2278, +38742=>2279, +31455=>2280, +31454=>2281, +20928=>2282, +28847=>2283, +31384=>2284, +25578=>2285, +31350=>2286, +32416=>2287, +29590=>2288, +12210=>2289, +38893=>2289, +20037=>2290, +28792=>2291, +20061=>2292, +37202=>2293, +21417=>2294, +25937=>2295, +26087=>2296, +12165=>2297, +33276=>2297, +33285=>2298, +21646=>2299, +23601=>2300, +30106=>2301, +38816=>2302, +25304=>2303, +29401=>2304, +30141=>2305, +23621=>2306, +39545=>2307, +33738=>2308, +23616=>2309, +21632=>2310, +30697=>2311, +20030=>2312, +27822=>2313, +32858=>2314, +25298=>2315, +25454=>2316, +24040=>2317, +20855=>2318, +36317=>2319, +36382=>2320, +38191=>2321, +20465=>2322, +21477=>2323, +24807=>2324, +28844=>2325, +21095=>2326, +25424=>2327, +40515=>2328, +23071=>2329, +20518=>2330, +30519=>2331, +21367=>2332, +32482=>2333, +25733=>2334, +25899=>2335, +25225=>2336, +25496=>2337, +20500=>2338, +29237=>2339, +35273=>2340, +20915=>2341, +35776=>2342, +32477=>2343, +22343=>2344, +33740=>2345, +38055=>2346, +20891=>2347, +21531=>2348, +23803=>2349, +20426=>2350, +31459=>2351, +27994=>2352, +37089=>2353, +39567=>2354, +21888=>2355, +21654=>2356, +21345=>2357, +21679=>2358, +24320=>2359, +25577=>2360, +26999=>2361, +20975=>2362, +24936=>2363, +21002=>2364, +22570=>2365, +21208=>2366, +22350=>2367, +30733=>2368, +30475=>2369, +24247=>2370, +24951=>2371, +31968=>2372, +25179=>2373, +25239=>2374, +20130=>2375, +28821=>2376, +32771=>2377, +25335=>2378, +28900=>2379, +38752=>2380, +22391=>2381, +33499=>2382, +26607=>2383, +26869=>2384, +30933=>2385, +39063=>2386, +31185=>2387, +22771=>2388, +21683=>2389, +21487=>2390, +28212=>2391, +20811=>2392, +21051=>2393, +23458=>2394, +35838=>2395, +32943=>2396, +21827=>2397, +22438=>2398, +24691=>2399, +22353=>2400, +21549=>2401, +31354=>2402, +24656=>2403, +23380=>2404, +25511=>2405, +25248=>2406, +12061=>2407, +21475=>2407, +25187=>2408, +23495=>2409, +26543=>2410, +21741=>2411, +31391=>2412, +33510=>2413, +37239=>2414, +24211=>2415, +35044=>2416, +22840=>2417, +22446=>2418, +25358=>2419, +36328=>2420, +33007=>2421, +22359=>2422, +31607=>2423, +20393=>2424, +24555=>2425, +23485=>2426, +27454=>2427, +21281=>2428, +31568=>2429, +29378=>2430, +26694=>2431, +30719=>2432, +30518=>2433, +26103=>2434, +20917=>2435, +20111=>2436, +30420=>2437, +23743=>2438, +31397=>2439, +33909=>2440, +22862=>2441, +39745=>2442, +20608=>2443, +39304=>2444, +24871=>2445, +28291=>2446, +22372=>2447, +26118=>2448, +25414=>2449, +22256=>2450, +25324=>2451, +25193=>2452, +24275=>2453, +38420=>2454, +22403=>2455, +25289=>2456, +21895=>2457, +34593=>2458, +33098=>2459, +36771=>2460, +21862=>2461, +33713=>2462, +26469=>2463, +36182=>2464, +34013=>2465, +23146=>2466, +26639=>2467, +25318=>2468, +31726=>2469, +38417=>2470, +20848=>2471, +28572=>2472, +35888=>2473, +25597=>2474, +35272=>2475, +25042=>2476, +32518=>2477, +28866=>2478, +28389=>2479, +29701=>2480, +27028=>2481, +29436=>2482, +24266=>2483, +37070=>2484, +26391=>2485, +28010=>2486, +25438=>2487, +21171=>2488, +29282=>2489, +12156=>2490, +32769=>2490, +20332=>2491, +23013=>2492, +37226=>2493, +28889=>2494, +28061=>2495, +21202=>2496, +20048=>2497, +38647=>2498, +38253=>2499, +34174=>2500, +30922=>2501, +32047=>2502, +20769=>2503, +22418=>2504, +25794=>2505, +32907=>2506, +31867=>2507, +27882=>2508, +26865=>2509, +26974=>2510, +20919=>2511, +21400=>2512, +26792=>2513, +29313=>2514, +40654=>2515, +31729=>2516, +29432=>2517, +31163=>2518, +28435=>2519, +29702=>2520, +26446=>2521, +12197=>2522, +37324=>2522, +40100=>2523, +31036=>2524, +33673=>2525, +33620=>2526, +21519=>2527, +26647=>2528, +20029=>2529, +21385=>2530, +21169=>2531, +30782=>2532, +21382=>2533, +21033=>2534, +20616=>2535, +20363=>2536, +20432=>2537, +30178=>2538, +12148=>2539, +31435=>2539, +31890=>2540, +27813=>2541, +12202=>2542, +38582=>2542, +12050=>2543, +21147=>2543, +29827=>2544, +21737=>2545, +20457=>2546, +32852=>2547, +33714=>2548, +36830=>2549, +38256=>2550, +24265=>2551, +24604=>2552, +28063=>2553, +24088=>2554, +25947=>2555, +33080=>2556, +38142=>2557, +24651=>2558, +28860=>2559, +32451=>2560, +31918=>2561, +20937=>2562, +63865=>2562, +26753=>2563, +31921=>2564, +33391=>2565, +20004=>2566, +36742=>2567, +37327=>2568, +26238=>2569, +20142=>2570, +35845=>2571, +25769=>2572, +32842=>2573, +20698=>2574, +30103=>2575, +29134=>2576, +23525=>2577, +36797=>2578, +28518=>2579, +20102=>2580, +25730=>2581, +38243=>2582, +24278=>2583, +26009=>2584, +21015=>2585, +35010=>2586, +28872=>2587, +21155=>2588, +29454=>2589, +29747=>2590, +26519=>2591, +30967=>2592, +38678=>2593, +20020=>2594, +37051=>2595, +40158=>2596, +28107=>2597, +20955=>2598, +36161=>2599, +21533=>2600, +25294=>2601, +29618=>2602, +33777=>2603, +38646=>2604, +40836=>2605, +38083=>2606, +20278=>2607, +32666=>2608, +20940=>2609, +28789=>2610, +38517=>2611, +23725=>2612, +39046=>2613, +21478=>2614, +20196=>2615, +28316=>2616, +29705=>2617, +27060=>2618, +30827=>2619, +39311=>2620, +30041=>2621, +21016=>2622, +30244=>2623, +27969=>2624, +26611=>2625, +20845=>2626, +40857=>2627, +32843=>2628, +21657=>2629, +31548=>2630, +31423=>2631, +38534=>2632, +22404=>2633, +25314=>2634, +38471=>2635, +27004=>2636, +23044=>2637, +25602=>2638, +31699=>2639, +28431=>2640, +38475=>2641, +33446=>2642, +21346=>2643, +39045=>2644, +24208=>2645, +28809=>2646, +25523=>2647, +21348=>2648, +34383=>2649, +40065=>2650, +40595=>2651, +30860=>2652, +38706=>2653, +36335=>2654, +36162=>2655, +12229=>2656, +40575=>2656, +28510=>2657, +31108=>2658, +24405=>2659, +38470=>2660, +25134=>2661, +39540=>2662, +21525=>2663, +38109=>2664, +20387=>2665, +26053=>2666, +23653=>2667, +23649=>2668, +32533=>2669, +34385=>2670, +27695=>2671, +24459=>2672, +29575=>2673, +28388=>2674, +32511=>2675, +23782=>2676, +25371=>2677, +23402=>2678, +28390=>2679, +21365=>2680, +20081=>2681, +25504=>2682, +30053=>2683, +25249=>2684, +36718=>2685, +20262=>2686, +20177=>2687, +27814=>2688, +32438=>2689, +35770=>2690, +33821=>2691, +34746=>2692, +32599=>2693, +36923=>2694, +38179=>2695, +31657=>2696, +39585=>2697, +35064=>2698, +33853=>2699, +27931=>2700, +39558=>2701, +32476=>2702, +22920=>2703, +12231=>2704, +40635=>2704, +29595=>2705, +30721=>2706, +34434=>2707, +39532=>2708, +39554=>2709, +22043=>2710, +21527=>2711, +22475=>2712, +20080=>2713, +40614=>2714, +21334=>2715, +36808=>2716, +33033=>2717, +30610=>2718, +39314=>2719, +34542=>2720, +28385=>2721, +34067=>2722, +26364=>2723, +24930=>2724, +28459=>2725, +35881=>2726, +33426=>2727, +33579=>2728, +30450=>2729, +27667=>2730, +24537=>2731, +33725=>2732, +29483=>2733, +33541=>2734, +38170=>2735, +12113=>2736, +27611=>2736, +12141=>2737, +30683=>2737, +38086=>2738, +21359=>2739, +33538=>2740, +20882=>2741, +24125=>2742, +35980=>2743, +36152=>2744, +20040=>2745, +29611=>2746, +26522=>2747, +26757=>2748, +37238=>2749, +38665=>2750, +29028=>2751, +27809=>2752, +30473=>2753, +23186=>2754, +38209=>2755, +27599=>2756, +32654=>2757, +26151=>2758, +23504=>2759, +22969=>2760, +23194=>2761, +38376=>2762, +38391=>2763, +20204=>2764, +33804=>2765, +33945=>2766, +27308=>2767, +30431=>2768, +38192=>2769, +29467=>2770, +26790=>2771, +23391=>2772, +30511=>2773, +37274=>2774, +38753=>2775, +31964=>2776, +36855=>2777, +35868=>2778, +24357=>2779, +12150=>2780, +31859=>2780, +31192=>2781, +35269=>2782, +27852=>2783, +34588=>2784, +23494=>2785, +24130=>2786, +26825=>2787, +30496=>2788, +32501=>2789, +20885=>2790, +20813=>2791, +21193=>2792, +23081=>2793, +32517=>2794, +12207=>2795, +38754=>2795, +33495=>2796, +25551=>2797, +30596=>2798, +34256=>2799, +31186=>2800, +28218=>2801, +24217=>2802, +22937=>2803, +34065=>2804, +28781=>2805, +27665=>2806, +25279=>2807, +12139=>2808, +30399=>2808, +25935=>2809, +24751=>2810, +38397=>2811, +26126=>2812, +34719=>2813, +40483=>2814, +38125=>2815, +21517=>2816, +21629=>2817, +35884=>2818, +25720=>2819, +25721=>2820, +34321=>2821, +27169=>2822, +33180=>2823, +30952=>2824, +25705=>2825, +39764=>2826, +25273=>2827, +26411=>2828, +33707=>2829, +22696=>2830, +40664=>2831, +27819=>2832, +28448=>2833, +23518=>2834, +38476=>2835, +35851=>2836, +29279=>2837, +26576=>2838, +25287=>2839, +29281=>2840, +20137=>2841, +22982=>2842, +27597=>2843, +22675=>2844, +26286=>2845, +24149=>2846, +21215=>2847, +24917=>2848, +12106=>2849, +26408=>2849, +12140=>2850, +30446=>2850, +30566=>2851, +29287=>2852, +31302=>2853, +25343=>2854, +21738=>2855, +21584=>2856, +38048=>2857, +37027=>2858, +23068=>2859, +32435=>2860, +27670=>2861, +20035=>2862, +22902=>2863, +32784=>2864, +22856=>2865, +21335=>2866, +30007=>2867, +38590=>2868, +22218=>2869, +25376=>2870, +33041=>2871, +24700=>2872, +38393=>2873, +28118=>2874, +21602=>2875, +39297=>2876, +20869=>2877, +23273=>2878, +33021=>2879, +22958=>2880, +38675=>2881, +20522=>2882, +27877=>2883, +23612=>2884, +25311=>2885, +20320=>2886, +21311=>2887, +33147=>2888, +36870=>2889, +28346=>2890, +34091=>2891, +25288=>2892, +24180=>2893, +30910=>2894, +25781=>2895, +25467=>2896, +24565=>2897, +23064=>2898, +37247=>2899, +40479=>2900, +23615=>2901, +25423=>2902, +32834=>2903, +23421=>2904, +21870=>2905, +38218=>2906, +38221=>2907, +28037=>2908, +24744=>2909, +26592=>2910, +29406=>2911, +20957=>2912, +23425=>2913, +25319=>2914, +27870=>2915, +12124=>2916, +29275=>2916, +25197=>2917, +38062=>2918, +32445=>2919, +33043=>2920, +27987=>2921, +20892=>2922, +24324=>2923, +22900=>2924, +21162=>2925, +24594=>2926, +12069=>2927, +22899=>2927, +26262=>2928, +34384=>2929, +30111=>2930, +25386=>2931, +25062=>2932, +31983=>2933, +35834=>2934, +21734=>2935, +27431=>2936, +40485=>2937, +27572=>2938, +34261=>2939, +21589=>2940, +20598=>2941, +27812=>2942, +21866=>2943, +36276=>2944, +29228=>2945, +24085=>2946, +24597=>2947, +29750=>2948, +25293=>2949, +25490=>2950, +29260=>2951, +24472=>2952, +28227=>2953, +27966=>2954, +25856=>2955, +28504=>2956, +30424=>2957, +30928=>2958, +30460=>2959, +30036=>2960, +21028=>2961, +21467=>2962, +20051=>2963, +24222=>2964, +26049=>2965, +32810=>2966, +32982=>2967, +25243=>2968, +21638=>2969, +21032=>2970, +28846=>2971, +34957=>2972, +36305=>2973, +27873=>2974, +21624=>2975, +32986=>2976, +22521=>2977, +35060=>2978, +36180=>2979, +38506=>2980, +37197=>2981, +20329=>2982, +27803=>2983, +21943=>2984, +30406=>2985, +30768=>2986, +25256=>2987, +28921=>2988, +28558=>2989, +24429=>2990, +34028=>2991, +26842=>2992, +30844=>2993, +31735=>2994, +33192=>2995, +26379=>2996, +40527=>2997, +25447=>2998, +30896=>2999, +22383=>3000, +30738=>3001, +38713=>3002, +25209=>3003, +25259=>3004, +21128=>3005, +29749=>3006, +27607=>3007, +21860=>3008, +33086=>3009, +30130=>3010, +12138=>3011, +30382=>3011, +21305=>3012, +30174=>3013, +20731=>3014, +23617=>3015, +35692=>3016, +31687=>3017, +20559=>3018, +12122=>3019, +29255=>3019, +39575=>3020, +39128=>3021, +28418=>3022, +29922=>3023, +31080=>3024, +25735=>3025, +30629=>3026, +25340=>3027, +39057=>3028, +36139=>3029, +21697=>3030, +32856=>3031, +20050=>3032, +22378=>3033, +33529=>3034, +33805=>3035, +24179=>3036, +20973=>3037, +29942=>3038, +35780=>3039, +23631=>3040, +22369=>3041, +27900=>3042, +39047=>3043, +23110=>3044, +30772=>3045, +39748=>3046, +36843=>3047, +31893=>3048, +21078=>3049, +25169=>3050, +38138=>3051, +20166=>3052, +33670=>3053, +33889=>3054, +33769=>3055, +33970=>3056, +22484=>3057, +26420=>3058, +22275=>3059, +26222=>3060, +28006=>3061, +35889=>3062, +26333=>3063, +28689=>3064, +26399=>3065, +27450=>3066, +26646=>3067, +25114=>3068, +22971=>3069, +19971=>3070, +20932=>3071, +28422=>3072, +26578=>3073, +27791=>3074, +20854=>3075, +26827=>3076, +22855=>3077, +27495=>3078, +30054=>3079, +23822=>3080, +33040=>3081, +40784=>3082, +26071=>3083, +31048=>3084, +31041=>3085, +39569=>3086, +36215=>3087, +23682=>3088, +20062=>3089, +20225=>3090, +21551=>3091, +22865=>3092, +30732=>3093, +22120=>3094, +12115=>3095, +27668=>3095, +36804=>3096, +24323=>3097, +27773=>3098, +27875=>3099, +35755=>3100, +25488=>3101, +24688=>3102, +27965=>3103, +29301=>3104, +25190=>3105, +38030=>3106, +38085=>3107, +21315=>3108, +36801=>3109, +31614=>3110, +20191=>3111, +35878=>3112, +20094=>3113, +40660=>3114, +38065=>3115, +38067=>3116, +21069=>3117, +28508=>3118, +36963=>3119, +27973=>3120, +35892=>3121, +22545=>3122, +23884=>3123, +12107=>3124, +27424=>3124, +27465=>3125, +26538=>3126, +21595=>3127, +33108=>3128, +32652=>3129, +22681=>3130, +34103=>3131, +24378=>3132, +25250=>3133, +27207=>3134, +38201=>3135, +25970=>3136, +24708=>3137, +26725=>3138, +30631=>3139, +20052=>3140, +20392=>3141, +24039=>3142, +38808=>3143, +25772=>3144, +32728=>3145, +23789=>3146, +20431=>3147, +31373=>3148, +20999=>3149, +33540=>3150, +19988=>3151, +24623=>3152, +31363=>3153, +38054=>3154, +20405=>3155, +20146=>3156, +31206=>3157, +29748=>3158, +21220=>3159, +33465=>3160, +25810=>3161, +31165=>3162, +23517=>3163, +27777=>3164, +38738=>3165, +36731=>3166, +27682=>3167, +20542=>3168, +21375=>3169, +28165=>3170, +25806=>3171, +26228=>3172, +27696=>3173, +24773=>3174, +39031=>3175, +35831=>3176, +24198=>3177, +29756=>3178, +31351=>3179, +31179=>3180, +19992=>3181, +37041=>3182, +29699=>3183, +27714=>3184, +22234=>3185, +37195=>3186, +27845=>3187, +36235=>3188, +21306=>3189, +34502=>3190, +26354=>3191, +36527=>3192, +23624=>3193, +39537=>3194, +28192=>3195, +21462=>3196, +23094=>3197, +40843=>3198, +36259=>3199, +21435=>3200, +22280=>3201, +39079=>3202, +26435=>3203, +37275=>3204, +27849=>3205, +20840=>3206, +30154=>3207, +25331=>3208, +12125=>3209, +29356=>3209, +21048=>3210, +21149=>3211, +32570=>3212, +28820=>3213, +30264=>3214, +21364=>3215, +40522=>3216, +27063=>3217, +30830=>3218, +38592=>3219, +35033=>3220, +32676=>3221, +28982=>3222, +29123=>3223, +20873=>3224, +26579=>3225, +29924=>3226, +22756=>3227, +25880=>3228, +22199=>3229, +35753=>3230, +39286=>3231, +25200=>3232, +32469=>3233, +24825=>3234, +28909=>3235, +22764=>3236, +20161=>3237,