<s> import struct <EOL> LUTS = { <EOL> '<STR_LIT>' : { <EOL> '<STR_LIT>' : '<STR_LIT:!>' , <EOL> '<STR_LIT>' : { <EOL> '<STR_LIT:!>' : <NUM_LIT:0> , '<STR_LIT:#>' : <NUM_LIT:2> , '<STR_LIT:">' : <NUM_LIT:1> , '<STR_LIT:%>' : <NUM_LIT:4> , '<STR_LIT:$>' : <NUM_LIT:3> , "<STR_LIT:'>" : <NUM_LIT:6> , '<STR_LIT:&>' : <NUM_LIT:5> , '<STR_LIT:)>' : <NUM_LIT:8> , <EOL> '<STR_LIT:(>' : <NUM_LIT:7> , '<STR_LIT:+>' : <NUM_LIT:10> , '<STR_LIT:*>' : <NUM_LIT:9> , '<STR_LIT:->' : <NUM_LIT:12> , '<STR_LIT:U+002C>' : <NUM_LIT:11> , '<STR_LIT:/>' : <NUM_LIT> , '<STR_LIT:.>' : <NUM_LIT> , <EOL> '<STR_LIT:1>' : <NUM_LIT:16> , '<STR_LIT:0>' : <NUM_LIT:15> , '<STR_LIT:3>' : <NUM_LIT> , '<STR_LIT:2>' : <NUM_LIT> , '<STR_LIT:5>' : <NUM_LIT:20> , '<STR_LIT:4>' : <NUM_LIT> , '<STR_LIT>' : <NUM_LIT> , <EOL> '<STR_LIT>' : <NUM_LIT> , '<STR_LIT>' : <NUM_LIT> , '<STR_LIT>' : <NUM_LIT> , '<STR_LIT:;>' : <NUM_LIT> , '<STR_LIT::>' : <NUM_LIT> , '<STR_LIT:=>' : <NUM_LIT> , '<STR_LIT:<>' : <NUM_LIT> , <EOL> '<STR_LIT:?>' : <NUM_LIT:30> , '<STR_LIT:>>' : <NUM_LIT> , '<STR_LIT:A>' : <NUM_LIT:32> , '<STR_LIT:@>' : <NUM_LIT> , '<STR_LIT:C>' : <NUM_LIT> , '<STR_LIT:B>' : <NUM_LIT> , '<STR_LIT:E>' : <NUM_LIT> , <EOL> '<STR_LIT:D>' : <NUM_LIT> , '<STR_LIT>' : <NUM_LIT> , '<STR_LIT:F>' : <NUM_LIT> , '<STR_LIT:I>' : <NUM_LIT> , '<STR_LIT:H>' : <NUM_LIT> , '<STR_LIT>' : <NUM_LIT> , '<STR_LIT>' : <NUM_LIT> , <EOL> '<STR_LIT:M>' : <NUM_LIT> , '<STR_LIT:L>' : <NUM_LIT> , '<STR_LIT:O>' : <NUM_LIT> , '<STR_LIT:N>' : <NUM_LIT> , '<STR_LIT>' : <NUM_LIT> , '<STR_LIT:P>' : <NUM_LIT> , '<STR_LIT:S>' : <NUM_LIT:50> , <EOL> '<STR_LIT:R>' : <NUM_LIT> , '<STR_LIT>' : <NUM_LIT> , '<STR_LIT:T>' : <NUM_LIT> , '<STR_LIT>' : <NUM_LIT> , '<STR_LIT>' : <NUM_LIT> , '<STR_LIT:Y>' : <NUM_LIT> , '<STR_LIT:X>' : <NUM_LIT> , <EOL> '<STR_LIT:[>' : <NUM_LIT> , '<STR_LIT>' : <NUM_LIT> , '<STR_LIT:]>' : <NUM_LIT> , '<STR_LIT:\\>' : <NUM_LIT> , '<STR_LIT:_>' : <NUM_LIT> , '<STR_LIT>' : <NUM_LIT> , '<STR_LIT:a>' : <NUM_LIT:64> , <EOL> '<STR_LIT>' : <NUM_LIT> , '<STR_LIT:c>' : <NUM_LIT> , '<STR_LIT:b>' : <NUM_LIT> , '<STR_LIT:e>' : <NUM_LIT> , '<STR_LIT:d>' : <NUM_LIT> , '<STR_LIT:g>' : <NUM_LIT> , '<STR_LIT:f>' : <NUM_LIT> , <EOL> '<STR_LIT:i>' : <NUM_LIT> , '<STR_LIT:h>' : <NUM_LIT> , '<STR_LIT:k>' : <NUM_LIT> , '<STR_LIT>' : <NUM_LIT> , '<STR_LIT:m>' : <NUM_LIT> , '<STR_LIT:l>' : <NUM_LIT> , '<STR_LIT:o>' : <NUM_LIT> , <EOL> '<STR_LIT:n>' : <NUM_LIT> , '<STR_LIT:q>' : <NUM_LIT> , '<STR_LIT:p>' : <NUM_LIT> , '<STR_LIT:s>' : <NUM_LIT> , '<STR_LIT:r>' : <NUM_LIT> , '<STR_LIT:u>' : <NUM_LIT> , '<STR_LIT:t>' : <NUM_LIT> <EOL> } , <EOL> '<STR_LIT>' : [ <EOL> '<STR_LIT:!>' , '<STR_LIT:">' , '<STR_LIT:#>' , '<STR_LIT:$>' , '<STR_LIT:%>' , '<STR_LIT:&>' , "<STR_LIT:'>" , '<STR_LIT:(>' , '<STR_LIT:)>' , '<STR_LIT:*>' , '<STR_LIT:+>' , '<STR_LIT:U+002C>' , '<STR_LIT:->' , <EOL> '<STR_LIT:.>' , '<STR_LIT:/>' , '<STR_LIT:0>' , '<STR_LIT:1>' , '<STR_LIT:2>' , '<STR_LIT:3>' , '<STR_LIT:4>' , '<STR_LIT:5>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT::>' , <EOL> '<STR_LIT:;>' , '<STR_LIT:<>' , '<STR_LIT:=>' , '<STR_LIT:>>' , '<STR_LIT:?>' , '<STR_LIT:@>' , '<STR_LIT:A>' , '<STR_LIT:B>' , '<STR_LIT:C>' , '<STR_LIT:D>' , '<STR_LIT:E>' , '<STR_LIT:F>' , '<STR_LIT>' , <EOL> '<STR_LIT:H>' , '<STR_LIT:I>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT:L>' , '<STR_LIT:M>' , '<STR_LIT:N>' , '<STR_LIT:O>' , '<STR_LIT:P>' , '<STR_LIT>' , '<STR_LIT:R>' , '<STR_LIT:S>' , '<STR_LIT:T>' , <EOL> '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT:X>' , '<STR_LIT:Y>' , '<STR_LIT>' , '<STR_LIT:[>' , '<STR_LIT:\\>' , '<STR_LIT:]>' , '<STR_LIT>' , '<STR_LIT:_>' , '<STR_LIT>' , '<STR_LIT:a>' , <EOL> '<STR_LIT:b>' , '<STR_LIT:c>' , '<STR_LIT:d>' , '<STR_LIT:e>' , '<STR_LIT:f>' , '<STR_LIT:g>' , '<STR_LIT:h>' , '<STR_LIT:i>' , '<STR_LIT>' , '<STR_LIT:k>' , '<STR_LIT:l>' , '<STR_LIT:m>' , '<STR_LIT:n>' , <EOL> '<STR_LIT:o>' , '<STR_LIT:p>' , '<STR_LIT:q>' , '<STR_LIT:r>' , '<STR_LIT:s>' , '<STR_LIT:t>' , '<STR_LIT:u>' <EOL> ] <EOL> } , <EOL> '<STR_LIT>' : { <EOL> '<STR_LIT>' : '<STR_LIT:!>' , <EOL> '<STR_LIT>' : { <EOL> '<STR_LIT:0>' : <NUM_LIT:0> , '<STR_LIT:1>' : <NUM_LIT:1> , '<STR_LIT:2>' : <NUM_LIT:2> , '<STR_LIT:3>' : <NUM_LIT:3> , '<STR_LIT:4>' : <NUM_LIT:4> , '<STR_LIT:5>' : <NUM_LIT:5> , '<STR_LIT>' : <NUM_LIT:6> , '<STR_LIT>' : <NUM_LIT:7> , <EOL> '<STR_LIT>' : <NUM_LIT:8> , '<STR_LIT>' : <NUM_LIT:9> , '<STR_LIT:A>' : <NUM_LIT:10> , '<STR_LIT:B>' : <NUM_LIT:11> , '<STR_LIT:C>' : <NUM_LIT:12> , '<STR_LIT:D>' : <NUM_LIT> , '<STR_LIT:E>' : <NUM_LIT> , <EOL> '<STR_LIT:F>' : <NUM_LIT:15> , '<STR_LIT>' : <NUM_LIT:16> , '<STR_LIT:H>' : <NUM_LIT> , '<STR_LIT:I>' : <NUM_LIT> , '<STR_LIT>' : <NUM_LIT> , '<STR_LIT>' : <NUM_LIT:20> , '<STR_LIT:L>' : <NUM_LIT> , <EOL> '<STR_LIT:M>' : <NUM_LIT> , '<STR_LIT:N>' : <NUM_LIT> , '<STR_LIT:O>' : <NUM_LIT> , '<STR_LIT:P>' : <NUM_LIT> , '<STR_LIT>' : <NUM_LIT> , '<STR_LIT:R>' : <NUM_LIT> , '<STR_LIT:S>' : <NUM_LIT> , <EOL> '<STR_LIT:T>' : <NUM_LIT> , '<STR_LIT>' : <NUM_LIT:30> , '<STR_LIT>' : <NUM_LIT> , '<STR_LIT>' : <NUM_LIT:32> , '<STR_LIT:X>' : <NUM_LIT> , '<STR_LIT:Y>' : <NUM_LIT> , '<STR_LIT>' : <NUM_LIT> , <EOL> '<STR_LIT:a>' : <NUM_LIT> , '<STR_LIT:b>' : <NUM_LIT> , '<STR_LIT:c>' : <NUM_LIT> , '<STR_LIT:d>' : <NUM_LIT> , '<STR_LIT:e>' : <NUM_LIT> , '<STR_LIT:f>' : <NUM_LIT> , '<STR_LIT:g>' : <NUM_LIT> , <EOL> '<STR_LIT:h>' : <NUM_LIT> , '<STR_LIT:i>' : <NUM_LIT> , '<STR_LIT>' : <NUM_LIT> , '<STR_LIT:k>' : <NUM_LIT> , '<STR_LIT:l>' : <NUM_LIT> , '<STR_LIT:m>' : <NUM_LIT> , '<STR_LIT:n>' : <NUM_LIT> , <EOL> '<STR_LIT:o>' : <NUM_LIT:50> , '<STR_LIT:p>' : <NUM_LIT> , '<STR_LIT:q>' : <NUM_LIT> , '<STR_LIT:r>' : <NUM_LIT> , '<STR_LIT:s>' : <NUM_LIT> , '<STR_LIT:t>' : <NUM_LIT> , '<STR_LIT:u>' : <NUM_LIT> , <EOL> '<STR_LIT:v>' : <NUM_LIT> , '<STR_LIT:w>' : <NUM_LIT> , '<STR_LIT:x>' : <NUM_LIT> , '<STR_LIT:y>' : <NUM_LIT> , '<STR_LIT:z>' : <NUM_LIT> , '<STR_LIT:!>' : <NUM_LIT> , '<STR_LIT:#>' : <NUM_LIT> , <EOL> '<STR_LIT:$>' : <NUM_LIT:64> , '<STR_LIT:%>' : <NUM_LIT> , '<STR_LIT:&>' : <NUM_LIT> , '<STR_LIT:(>' : <NUM_LIT> , '<STR_LIT:)>' : <NUM_LIT> , '<STR_LIT:*>' : <NUM_LIT> , '<STR_LIT:+>' : <NUM_LIT> , <EOL> '<STR_LIT:->' : <NUM_LIT> , '<STR_LIT:;>' : <NUM_LIT> , '<STR_LIT:<>' : <NUM_LIT> , '<STR_LIT:=>' : <NUM_LIT> , '<STR_LIT:>>' : <NUM_LIT> , '<STR_LIT:?>' : <NUM_LIT> , '<STR_LIT:@>' : <NUM_LIT> , <EOL> '<STR_LIT>' : <NUM_LIT> , '<STR_LIT:_>' : <NUM_LIT> , '<STR_LIT>' : <NUM_LIT> , '<STR_LIT:{>' : <NUM_LIT> , '<STR_LIT:|>' : <NUM_LIT> , '<STR_LIT:}>' : <NUM_LIT> , '<STR_LIT>' : <NUM_LIT> <EOL> } , <EOL> '<STR_LIT>' : [ <EOL> '<STR_LIT:0>' , '<STR_LIT:1>' , '<STR_LIT:2>' , '<STR_LIT:3>' , '<STR_LIT:4>' , '<STR_LIT:5>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT:A>' , '<STR_LIT:B>' , '<STR_LIT:C>' , <EOL> '<STR_LIT:D>' , '<STR_LIT:E>' , '<STR_LIT:F>' , '<STR_LIT>' , '<STR_LIT:H>' , '<STR_LIT:I>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT:L>' , '<STR_LIT:M>' , '<STR_LIT:N>' , '<STR_LIT:O>' , '<STR_LIT:P>' , <EOL> '<STR_LIT>' , '<STR_LIT:R>' , '<STR_LIT:S>' , '<STR_LIT:T>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT:X>' , '<STR_LIT:Y>' , '<STR_LIT>' , '<STR_LIT:a>' , '<STR_LIT:b>' , '<STR_LIT:c>' , <EOL> '<STR_LIT:d>' , '<STR_LIT:e>' , '<STR_LIT:f>' , '<STR_LIT:g>' , '<STR_LIT:h>' , '<STR_LIT:i>' , '<STR_LIT>' , '<STR_LIT:k>' , '<STR_LIT:l>' , '<STR_LIT:m>' , '<STR_LIT:n>' , '<STR_LIT:o>' , '<STR_LIT:p>' , <EOL> '<STR_LIT:q>' , '<STR_LIT:r>' , '<STR_LIT:s>' , '<STR_LIT:t>' , '<STR_LIT:u>' , '<STR_LIT:v>' , '<STR_LIT:w>' , '<STR_LIT:x>' , '<STR_LIT:y>' , '<STR_LIT:z>' , '<STR_LIT:!>' , '<STR_LIT:#>' , '<STR_LIT:$>' , <EOL> '<STR_LIT:%>' , '<STR_LIT:&>' , '<STR_LIT:(>' , '<STR_LIT:)>' , '<STR_LIT:*>' , '<STR_LIT:+>' , '<STR_LIT:->' , '<STR_LIT:;>' , '<STR_LIT:<>' , '<STR_LIT:=>' , '<STR_LIT:>>' , '<STR_LIT:?>' , '<STR_LIT:@>' , <EOL> '<STR_LIT>' , '<STR_LIT:_>' , '<STR_LIT>' , '<STR_LIT:{>' , '<STR_LIT:|>' , '<STR_LIT:}>' , '<STR_LIT>' <EOL> ] <EOL> } , <EOL> '<STR_LIT>' : { <EOL> '<STR_LIT>' : '<STR_LIT:<>' , <EOL> '<STR_LIT>' : '<STR_LIT:!>' , <EOL> '<STR_LIT>' : { <EOL> '<STR_LIT>' : '<STR_LIT:z>' , <EOL> '<STR_LIT>' : '<STR_LIT:y>' <EOL> } , <EOL> '<STR_LIT>' : { <EOL> '<STR_LIT:%>' : <NUM_LIT:1> , '<STR_LIT:$>' : <NUM_LIT:0> , "<STR_LIT:'>" : <NUM_LIT:3> , '<STR_LIT:&>' : <NUM_LIT:2> , '<STR_LIT:)>' : <NUM_LIT:5> , '<STR_LIT:(>' : <NUM_LIT:4> , '<STR_LIT:+>' : <NUM_LIT:7> , '<STR_LIT:*>' : <NUM_LIT:6> , <EOL> '<STR_LIT:->' : <NUM_LIT:9> , '<STR_LIT:U+002C>' : <NUM_LIT:8> , '<STR_LIT:/>' : <NUM_LIT:11> , '<STR_LIT:.>' : <NUM_LIT:10> , '<STR_LIT:1>' : <NUM_LIT> , '<STR_LIT:0>' : <NUM_LIT:12> , '<STR_LIT:3>' : <NUM_LIT:15> , <EOL> '<STR_LIT:2>' : <NUM_LIT> , '<STR_LIT:5>' : <NUM_LIT> , '<STR_LIT:4>' : <NUM_LIT:16> , '<STR_LIT>' : <NUM_LIT> , '<STR_LIT>' : <NUM_LIT> , '<STR_LIT>' : <NUM_LIT> , '<STR_LIT>' : <NUM_LIT:20> , <EOL> '<STR_LIT:;>' : <NUM_LIT> , '<STR_LIT::>' : <NUM_LIT> , '<STR_LIT:=>' : <NUM_LIT> , '<STR_LIT:<>' : <NUM_LIT> , '<STR_LIT:?>' : <NUM_LIT> , '<STR_LIT:>>' : <NUM_LIT> , '<STR_LIT:A>' : <NUM_LIT> , <EOL> '<STR_LIT:@>' : <NUM_LIT> , '<STR_LIT:C>' : <NUM_LIT> , '<STR_LIT:B>' : <NUM_LIT:30> , '<STR_LIT:E>' : <NUM_LIT> , '<STR_LIT:D>' : <NUM_LIT:32> , '<STR_LIT>' : <NUM_LIT> , '<STR_LIT:F>' : <NUM_LIT> , <EOL> '<STR_LIT:I>' : <NUM_LIT> , '<STR_LIT:H>' : <NUM_LIT> , '<STR_LIT>' : <NUM_LIT> , '<STR_LIT>' : <NUM_LIT> , '<STR_LIT:M>' : <NUM_LIT> , '<STR_LIT:L>' : <NUM_LIT> , '<STR_LIT:O>' : <NUM_LIT> , <EOL> '<STR_LIT:N>' : <NUM_LIT> , '<STR_LIT>' : <NUM_LIT> , '<STR_LIT:P>' : <NUM_LIT> , '<STR_LIT:S>' : <NUM_LIT> , '<STR_LIT:R>' : <NUM_LIT> , '<STR_LIT>' : <NUM_LIT> , '<STR_LIT:T>' : <NUM_LIT> , <EOL> '<STR_LIT>' : <NUM_LIT> , '<STR_LIT>' : <NUM_LIT:50> , '<STR_LIT:Y>' : <NUM_LIT> , '<STR_LIT:X>' : <NUM_LIT> , '<STR_LIT:[>' : <NUM_LIT> , '<STR_LIT>' : <NUM_LIT> , '<STR_LIT:]>' : <NUM_LIT> , <EOL> '<STR_LIT:\\>' : <NUM_LIT> , '<STR_LIT:_>' : <NUM_LIT> , '<STR_LIT>' : <NUM_LIT> , '<STR_LIT:a>' : <NUM_LIT> , '<STR_LIT>' : <NUM_LIT> , '<STR_LIT:c>' : <NUM_LIT> , '<STR_LIT:b>' : <NUM_LIT> , <EOL> '<STR_LIT:e>' : <NUM_LIT> , '<STR_LIT:d>' : <NUM_LIT:64> , '<STR_LIT:g>' : <NUM_LIT> , '<STR_LIT:f>' : <NUM_LIT> , '<STR_LIT:i>' : <NUM_LIT> , '<STR_LIT:h>' : <NUM_LIT> , '<STR_LIT:k>' : <NUM_LIT> , <EOL> '<STR_LIT>' : <NUM_LIT> , '<STR_LIT:m>' : <NUM_LIT> , '<STR_LIT:l>' : <NUM_LIT> , '<STR_LIT:o>' : <NUM_LIT> , '<STR_LIT:n>' : <NUM_LIT> , '<STR_LIT:q>' : <NUM_LIT> , '<STR_LIT:p>' : <NUM_LIT> , <EOL> '<STR_LIT:s>' : <NUM_LIT> , '<STR_LIT:r>' : <NUM_LIT> , '<STR_LIT:u>' : <NUM_LIT> , '<STR_LIT:t>' : <NUM_LIT> , '<STR_LIT:w>' : <NUM_LIT> , '<STR_LIT:v>' : <NUM_LIT> , '<STR_LIT:x>' : <NUM_LIT> <EOL> } , <EOL> '<STR_LIT>' : [ <EOL> '<STR_LIT:$>' , '<STR_LIT:%>' , '<STR_LIT:&>' , "<STR_LIT:'>" , '<STR_LIT:(>' , '<STR_LIT:)>' , '<STR_LIT:*>' , '<STR_LIT:+>' , '<STR_LIT:U+002C>' , '<STR_LIT:->' , '<STR_LIT:.>' , '<STR_LIT:/>' , '<STR_LIT:0>' , <EOL> '<STR_LIT:1>' , '<STR_LIT:2>' , '<STR_LIT:3>' , '<STR_LIT:4>' , '<STR_LIT:5>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT::>' , '<STR_LIT:;>' , '<STR_LIT:<>' , '<STR_LIT:=>' , <EOL> '<STR_LIT:>>' , '<STR_LIT:?>' , '<STR_LIT:@>' , '<STR_LIT:A>' , '<STR_LIT:B>' , '<STR_LIT:C>' , '<STR_LIT:D>' , '<STR_LIT:E>' , '<STR_LIT:F>' , '<STR_LIT>' , '<STR_LIT:H>' , '<STR_LIT:I>' , '<STR_LIT>' , <EOL> '<STR_LIT>' , '<STR_LIT:L>' , '<STR_LIT:M>' , '<STR_LIT:N>' , '<STR_LIT:O>' , '<STR_LIT:P>' , '<STR_LIT>' , '<STR_LIT:R>' , '<STR_LIT:S>' , '<STR_LIT:T>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , <EOL> '<STR_LIT:X>' , '<STR_LIT:Y>' , '<STR_LIT>' , '<STR_LIT:[>' , '<STR_LIT:\\>' , '<STR_LIT:]>' , '<STR_LIT>' , '<STR_LIT:_>' , '<STR_LIT>' , '<STR_LIT:a>' , '<STR_LIT:b>' , '<STR_LIT:c>' , <EOL> '<STR_LIT:d>' , '<STR_LIT:e>' , '<STR_LIT:f>' , '<STR_LIT:g>' , '<STR_LIT:h>' , '<STR_LIT:i>' , '<STR_LIT>' , '<STR_LIT:k>' , '<STR_LIT:l>' , '<STR_LIT:m>' , '<STR_LIT:n>' , '<STR_LIT:o>' , '<STR_LIT:p>' , <EOL> '<STR_LIT:q>' , '<STR_LIT:r>' , '<STR_LIT:s>' , '<STR_LIT:t>' , '<STR_LIT:u>' , '<STR_LIT:v>' , '<STR_LIT:w>' , '<STR_LIT:x>' <EOL> ] <EOL> } , <EOL> } <EOL> def __b85_encode ( data , lut , byte_order , special_values = None ) : <EOL> """<STR_LIT>""" <EOL> padding = ( <NUM_LIT:4> - len ( data ) % <NUM_LIT:4> ) % <NUM_LIT:4> <EOL> data = '<STR_LIT>' . join ( [ data , '<STR_LIT>' * padding ] ) <EOL> parts = [ ] <EOL> parts_append = parts . append <EOL> number_of_chunks = len ( data ) // <NUM_LIT:4> <EOL> byte_format = '<STR_LIT>' % ( byte_order , number_of_chunks ) <EOL> unpack = struct . unpack <EOL> for x in unpack ( byte_format , data ) : <EOL> parts_append ( lut [ ( x // <NUM_LIT> ) ] ) <EOL> parts_append ( lut [ ( x // <NUM_LIT> ) % <NUM_LIT> ] ) <EOL> parts_append ( lut [ ( x // <NUM_LIT> ) % <NUM_LIT> ] ) <EOL> parts_append ( lut [ ( x // <NUM_LIT> ) % <NUM_LIT> ] ) <EOL> parts_append ( lut [ x % <NUM_LIT> ] ) <EOL> return_val = '<STR_LIT>' . join ( parts ) <EOL> if special_values : <EOL> for key in special_values . keys ( ) : <EOL> return_val = return_val . replace ( key , special_values [ key ] ) <EOL> return return_val <EOL> def __encode_multithreaded ( f , data ) : <EOL> """<STR_LIT>""" <EOL> import multiprocessing <EOL> import platform <EOL> number_of_threads = multiprocessing . cpu_count ( ) / <NUM_LIT:2> <EOL> if platform . system ( ) == '<STR_LIT>' : <EOL> multiprocessing . set_executable ( '<STR_LIT>' ) <EOL> elif platform . system ( ) == '<STR_LIT>' : <EOL> multiprocessing . set_executable ( '<STR_LIT>' ) <EOL> p = multiprocessing . Pool ( number_of_threads ) <EOL> number_of_chunks = len ( data ) // <NUM_LIT:4> <EOL> chunk_per_thread = number_of_chunks / number_of_threads <EOL> split_per_char = chunk_per_thread * <NUM_LIT:4> <EOL> thread_data = [ ] <EOL> for i in range ( <NUM_LIT:0> , len ( data ) , split_per_char ) : <EOL> thread_data . append ( data [ i : i + split_per_char ] ) <EOL> data = '<STR_LIT>' . join ( p . map ( f , thread_data ) ) <EOL> p . close ( ) <EOL> return data <EOL> def rfc1924_b85_encode ( data ) : <EOL> """<STR_LIT>""" <EOL> lut = LUTS [ '<STR_LIT>' ] [ '<STR_LIT>' ] <EOL> byte_order = LUTS [ '<STR_LIT>' ] [ '<STR_LIT>' ] <EOL> return __b85_encode ( data , lut , byte_order ) <EOL> def rfc1924_b85_encode_multithreaded ( data ) : <EOL> """<STR_LIT>""" <EOL> return __encode_multithreaded ( rfc1924_b85_encode , data ) <EOL> def arnold_b85_encode ( data ) : <EOL> """<STR_LIT>""" <EOL> lut = LUTS [ '<STR_LIT>' ] [ '<STR_LIT>' ] <EOL> byte_order = LUTS [ '<STR_LIT>' ] [ '<STR_LIT>' ] <EOL> special_values = LUTS [ '<STR_LIT>' ] [ '<STR_LIT>' ] <EOL> return __b85_encode ( data , lut , byte_order ) <EOL> def arnold_b85_encode_multithreaded ( data ) : <EOL> """<STR_LIT>""" <EOL> return __encode_multithreaded ( arnold_b85_encode , data ) <EOL> def __b85_decode ( data , lut , byte_order , special_values = None ) : <EOL> """<STR_LIT>""" <EOL> if special_values : <EOL> for key in special_values . keys ( ) : <EOL> data = data . replace ( special_values [ key ] , key ) <EOL> parts = [ ] <EOL> parts_append = parts . append <EOL> pack = struct . pack <EOL> byte_format = '<STR_LIT>' % byte_order <EOL> for i in xrange ( <NUM_LIT:0> , len ( data ) , <NUM_LIT:5> ) : <EOL> int_sum = <NUM_LIT> * lut [ data [ i ] ] + <NUM_LIT> * lut [ data [ i + <NUM_LIT:1> ] ] + <NUM_LIT> * lut [ data [ i + <NUM_LIT:2> ] ] + <NUM_LIT> * lut [ data [ i + <NUM_LIT:3> ] ] + lut [ data [ i + <NUM_LIT:4> ] ] <EOL> parts_append ( pack ( byte_format , int_sum ) ) <EOL> return '<STR_LIT>' . join ( parts ) <EOL> def b85_decode ( data ) : <EOL> """<STR_LIT>""" <EOL> lut = LUTS [ '<STR_LIT>' ] [ '<STR_LIT>' ] <EOL> byte_order = LUTS [ '<STR_LIT>' ] [ '<STR_LIT>' ] <EOL> return __b85_decode ( data , lut , byte_order ) <EOL> def rfc1924_b85_decode ( data ) : <EOL> """<STR_LIT>""" <EOL> lut = LUTS [ '<STR_LIT>' ] [ '<STR_LIT>' ] <EOL> byte_order = LUTS [ '<STR_LIT>' ] [ '<STR_LIT>' ] <EOL> return __b85_decode ( data , lut , byte_order ) <EOL> def arnold_b85_decode ( data ) : <EOL> """<STR_LIT>""" <EOL> lut = LUTS [ '<STR_LIT>' ] [ '<STR_LIT>' ] <EOL> byte_order = LUTS [ '<STR_LIT>' ] [ '<STR_LIT>' ] <EOL> special_values = LUTS [ '<STR_LIT>' ] [ '<STR_LIT>' ] <EOL> return __b85_decode ( data , lut , byte_order ) <EOL> def mapper ( encoded_data , raw_data , special_values = None ) : <EOL> """<STR_LIT>""" <EOL> data = encoded_data <EOL> if special_values : <EOL> data = encoded_data <EOL> for key in special_values . keys ( ) : <EOL> data = data . replace ( special_values [ key ] , key ) <EOL> half_encoded = [ ] <EOL> unpack = struct . unpack <EOL> pack = struct . pack <EOL> for i in xrange ( <NUM_LIT:0> , len ( raw_data ) ) : <EOL> unencoded_base85 = unpack ( '<STR_LIT:I>' , pack ( '<STR_LIT:f>' , raw_data [ i ] ) ) [ <NUM_LIT:0> ] <EOL> half_encoded . append ( unencoded_base85 // <NUM_LIT> ) <EOL> half_encoded . append ( ( unencoded_base85 // <NUM_LIT> ) % <NUM_LIT> ) <EOL> half_encoded . append ( ( unencoded_base85 // <NUM_LIT> ) % <NUM_LIT> ) <EOL> half_encoded . append ( ( unencoded_base85 // <NUM_LIT> ) % <NUM_LIT> ) <EOL> half_encoded . append ( unencoded_base85 % <NUM_LIT> ) <EOL> lut = { } <EOL> for i in range ( len ( half_encoded ) ) : <EOL> lut [ data [ i ] ] = half_encoded [ i ] <EOL> return lut <EOL> def auto_mapper ( encoded_data_path , raw_data ) : <EOL> """<STR_LIT>""" <EOL> data = open ( encoded_data_path , '<STR_LIT:r>' ) . read ( ) . strip ( ) <EOL> return mapper ( data , raw_data ) </s>
