original_string: public static function decodeFilterASCII85Decode($data) {
  		// initialize string to return
  		$decoded = '';
  		// all white-space characters shall be ignored
  		$data = preg_replace('/[\s]/', '', $data);
  		// remove start sequence 2-character sequence <~ (3Ch)(7Eh)
  		if (strpos($data, '<~') !== false) {
  			// remove EOD and extra data (if any)
  			$data = substr($data, 2);
  		}
  		// check for EOD: 2-character sequence ~> (7Eh)(3Eh)
  		$eod = strpos($data, '~>');
  		if ($eod !== false) {
  			// remove EOD and extra data (if any)
  			$data = substr($data, 0, $eod);
  		}
  		// data length
  		$data_length = strlen($data);
  		// check for invalid characters
  		if (preg_match('/[^\x21-\x75,\x74]/', $data) > 0) {
  			self::Error('decodeFilterASCII85Decode: invalid code');
  		}
  		// z sequence
  		$zseq = chr(0).chr(0).chr(0).chr(0);
  		// position inside a group of 4 bytes (0-3)
  		$group_pos = 0;
  		$tuple = 0;
  		$pow85 = array((85*85*85*85), (85*85*85), (85*85), 85, 1);
  		$last_pos = ($data_length - 1);
  		// for each byte
  		for ($i = 0; $i < $data_length; ++$i) {
  			// get char value
  			$char = ord($data[$i]);
  			if ($char == 122) { // 'z'
  				if ($group_pos == 0) {
  					$decoded .= $zseq;
  				} else {
  					self::Error('decodeFilterASCII85Decode: invalid code');
  				}
  			} else {
  				// the value represented by a group of 5 characters should never be greater than 2^32 - 1
  				$tuple += (($char - 33) * $pow85[$group_pos]);
  				if ($group_pos == 4) {
  					$decoded .= chr($tuple >> 24).chr($tuple >> 16).chr($tuple >> 8).chr($tuple);
  					$tuple = 0;
  					$group_pos = 0;
  				} else {
  					++$group_pos;
  				}
  			}
  		}
  		if ($group_pos > 1) {
  			$tuple += $pow85[($group_pos - 1)];
  		}
  		// last tuple (if any)
  		switch ($group_pos) {
  			case 4: {
  				$decoded .= chr($tuple >> 24).chr($tuple >> 16).chr($tuple >> 8);
  				break;
  			}
  			case 3: {
  				$decoded .= chr($tuple >> 24).chr($tuple >> 16);
  				break;
  			}
  			case 2: {
  				$decoded .= chr($tuple >> 24);
  				break;
  			}
  			case 1: {
  				self::Error('decodeFilterASCII85Decode: invalid code');
  				break;
  			}
  		}
  		return $decoded;
  	}
code: public static function decodeFilterASCII85Decode($data) {
  		// initialize string to return
  		$decoded = '';
  		// all white-space characters shall be ignored
  		$data = preg_replace('/[\s]/', '', $data);
  		// remove start sequence 2-character sequence <~ (3Ch)(7Eh)
  		if (strpos($data, '<~') !== false) {
  			// remove EOD and extra data (if any)
  			$data = substr($data, 2);
  		}
  		// check for EOD: 2-character sequence ~> (7Eh)(3Eh)
  		$eod = strpos($data, '~>');
  		if ($eod !== false) {
  			// remove EOD and extra data (if any)
  			$data = substr($data, 0, $eod);
  		}
  		// data length
  		$data_length = strlen($data);
  		// check for invalid characters
  		if (preg_match('/[^\x21-\x75,\x74]/', $data) > 0) {
  			self::Error('decodeFilterASCII85Decode: invalid code');
  		}
  		// z sequence
  		$zseq = chr(0).chr(0).chr(0).chr(0);
  		// position inside a group of 4 bytes (0-3)
  		$group_pos = 0;
  		$tuple = 0;
  		$pow85 = array((85*85*85*85), (85*85*85), (85*85), 85, 1);
  		$last_pos = ($data_length - 1);
  		// for each byte
  		for ($i = 0; $i < $data_length; ++$i) {
  			// get char value
  			$char = ord($data[$i]);
  			if ($char == 122) { // 'z'
  				if ($group_pos == 0) {
  					$decoded .= $zseq;
  				} else {
  					self::Error('decodeFilterASCII85Decode: invalid code');
  				}
  			} else {
  				// the value represented by a group of 5 characters should never be greater than 2^32 - 1
  				$tuple += (($char - 33) * $pow85[$group_pos]);
  				if ($group_pos == 4) {
  					$decoded .= chr($tuple >> 24).chr($tuple >> 16).chr($tuple >> 8).chr($tuple);
  					$tuple = 0;
  					$group_pos = 0;
  				} else {
  					++$group_pos;
  				}
  			}
  		}
  		if ($group_pos > 1) {
  			$tuple += $pow85[($group_pos - 1)];
  		}
  		// last tuple (if any)
  		switch ($group_pos) {
  			case 4: {
  				$decoded .= chr($tuple >> 24).chr($tuple >> 16).chr($tuple >> 8);
  				break;
  			}
  			case 3: {
  				$decoded .= chr($tuple >> 24).chr($tuple >> 16);
  				break;
  			}
  			case 2: {
  				$decoded .= chr($tuple >> 24);
  				break;
  			}
  			case 1: {
  				self::Error('decodeFilterASCII85Decode: invalid code');
  				break;
  			}
  		}
  		return $decoded;
  	}
code_tokens: public static function decodeFilterASCII85Decode ( $ data ) { // initialize string to return $ decoded = '' ; // all white-space characters shall be ignored $ data = preg_replace ( '/[\s]/' , '' , $ data ) ; // remove start sequence 2-character sequence <~ (3Ch)(7Eh) if ( strpos ( $ data , '<~' ) !== false ) { // remove EOD and extra data (if any) $ data = substr ( $ data , 2 ) ; } // check for EOD: 2-character sequence ~> (7Eh)(3Eh) $ eod = strpos ( $ data , '~>' ) ; if ( $ eod !== false ) { // remove EOD and extra data (if any) $ data = substr ( $ data , 0 , $ eod ) ; } // data length $ data_length = strlen ( $ data ) ; // check for invalid characters if ( preg_match ( '/[^\x21-\x75,\x74]/' , $ data ) > 0 ) { self :: Error ( 'decodeFilterASCII85Decode: invalid code' ) ; } // z sequence $ zseq = chr ( 0 ) . chr ( 0 ) . chr ( 0 ) . chr ( 0 ) ; // position inside a group of 4 bytes (0-3) $ group_pos = 0 ; $ tuple = 0 ; $ pow85 = array ( ( 85 * 85 * 85 * 85 ) , ( 85 * 85 * 85 ) , ( 85 * 85 ) , 85 , 1 ) ; $ last_pos = ( $ data_length - 1 ) ; // for each byte for ( $ i = 0 ; $ i < $ data_length ; ++ $ i ) { // get char value $ char = ord ( $ data [ $ i ] ) ; if ( $ char == 122 ) { // 'z' if ( $ group_pos == 0 ) { $ decoded .= $ zseq ; } else { self :: Error ( 'decodeFilterASCII85Decode: invalid code' ) ; } } else { // the value represented by a group of 5 characters should never be greater than 2^32 - 1 $ tuple += ( ( $ char - 33 ) * $ pow85 [ $ group_pos ] ) ; if ( $ group_pos == 4 ) { $ decoded .= chr ( $ tuple >> 24 ) . chr ( $ tuple >> 16 ) . chr ( $ tuple >> 8 ) . chr ( $ tuple ) ; $ tuple = 0 ; $ group_pos = 0 ; } else { ++ $ group_pos ; } } } if ( $ group_pos > 1 ) { $ tuple += $ pow85 [ ( $ group_pos - 1 ) ] ; } // last tuple (if any) switch ( $ group_pos ) { case 4 : { $ decoded .= chr ( $ tuple >> 24 ) . chr ( $ tuple >> 16 ) . chr ( $ tuple >> 8 ) ; break ; } case 3 : { $ decoded .= chr ( $ tuple >> 24 ) . chr ( $ tuple >> 16 ) ; break ; } case 2 : { $ decoded .= chr ( $ tuple >> 24 ) ; break ; } case 1 : { self :: Error ( 'decodeFilterASCII85Decode: invalid code' ) ; break ; } } return $ decoded ; }
docstring: ASCII85Decode
  Decodes data encoded in an ASCII base-85 representation, reproducing the original binary data.
  @param $data (string) Data to decode.
  @return Decoded data string.
  @since 1.0.000 (2011-05-23)
  @public static
docstring_tokens: ASCII85Decode Decodes data encoded in an ASCII base - 85 representation reproducing the original binary data .