Find this useful? Enter your email to receive occasional updates for securing PHP code.

Signing you up...

Thank you for signing up!

PHP Decode

<?php $_F=__FILE__;$_C1767279132='Pz48P0RoRA0KDQoNCi8qKg0KKiBuTkggcSBYcXJnIFpOVUJxIG5xZGRO..

Decoded Output download

?><?php


/**
* Get a Easy Media Gallery Global Functions
*
* @param string $name The option name
* @return object|bool Option value on success, false if no value exists
*/
 
 
 
/*
|--------------------------------------------------------------------------
| Easymedia Get Control Panel Options
|--------------------------------------------------------------------------
*/
function easy_get_option( $name ){
    $easymedia_values = get_option( 'easy_media_opt' );
    if ( is_array( $easymedia_values ) && array_key_exists( $name, $easymedia_values ) ) return $easymedia_values[$name];
    return false;
} 

/*-------------------------------------------------------------------------------*/
/*   ADMIN Register JS & CSS
/*-------------------------------------------------------------------------------*/
function easymedia_reg_script() {
	// CSS ( emg-settings.php, tinymce-dlg.php, metaboxes.php )
	wp_register_style( 'easymedia-cpstyles', plugins_url( 'css/funcstyle.css' , dirname('index.php') ), false, EASYMEDIA_VERSION, 'all');
	wp_register_style( 'easymedia-colorpickercss', plugins_url( 'css/colorpicker.css' , dirname('index.php') ), false, EASYMEDIA_VERSION );
	wp_register_style( 'easymedia-sldr', plugins_url( 'css/slider.css' , dirname('index.php') ), false, EASYMEDIA_VERSION );
	wp_register_style( 'easymedia-ibutton', plugins_url( 'css/ibutton.css' , dirname('index.php') ), false, EASYMEDIA_VERSION );	
	wp_register_style( 'easymedia-tinymce', plugins_url( 'css/tinymce.css' , dirname('index.php') ), false, EASYMEDIA_VERSION );
	wp_register_style( 'jquery-ui-themes-redmond', plugins_url( 'css/jquery/jquery-ui/themes/smoothness/jquery-ui-1.10.0.custom.min.css' , dirname('index.php') ), false, EASYMEDIA_VERSION );
	wp_register_style( 'easymedia-tinymce', plugins_url( 'css/tinymce.css' , dirname('index.php') ), false, EASYMEDIA_VERSION );	
	wp_register_style( 'jquery-multiselect-css', plugins_url( 'css/jquery/multiselect/jquery.multiselect.css' , dirname('index.php') ), false, EASYMEDIA_VERSION );
	wp_register_style( 'jquery-messi-css', plugins_url( 'css/messi.css' , dirname('index.php') ), false, EASYMEDIA_VERSION );
	wp_register_style( 'jquery-lightbox-css', plugins_url( 'css/lightbox_me.css' , dirname('index.php') ), false, EASYMEDIA_VERSION );
	wp_register_style( 'jquery-gdakramttip-css', plugins_url( 'css/jquery/jquery.tooltip/jquery.tooltip.css' , dirname('index.php') ), false, EASYMEDIA_VERSION );
			
	// JS ( emg-settings.php ) 
	wp_register_script( 'easymedia-jquery-easing', plugins_url( 'js/jquery/jquery.easing.1.3.js' , dirname('index.php') ) );	
	wp_register_script( 'easymedia-colorpicker', plugins_url( 'js/colorpicker/colorpicker.js' , dirname('index.php') ) );	
	wp_register_script( 'colorpicker-eye', plugins_url( 'js/colorpicker/eye.js' , dirname('index.php') ) );
	wp_register_script( 'colorpicker-utils', plugins_url( 'js/colorpicker/utils.js' , dirname('index.php') ) );
	
	// JS ( tinymce-dlg.php ) 
	//wp_register_script( 'jquery-ui-custom', plugins_url( 'js/jquery/jquery-ui-1.10.0.min.js' , dirname('index.php') ) );
	//wp_register_script( 'jquery-ui-custom-1', plugins_url( 'js/jquery/jquery-ui-1.9.2.custom.min.js' , dirname('index.php') ) );
	wp_register_script( 'jquery-multi-sel', plugins_url( 'js/jquery/multiselect/jquery.multiselect.js' , dirname('index.php') ) );
	//wp_register_style('layoutjs', plugins_url('js/colorpicker/layout.js' , dirname('index.php') ));
	
	// JS ( metaboxes.php, ) 
	wp_register_script( 'jquery-multi-sel', plugins_url( 'js/jquery/multiselect/jquery.multiselect.js' , dirname('index.php') ) );
	wp_register_script( 'easymedia-ckeditor', plugins_url( 'addons/ckeditor/ckeditor.js' , dirname('index.php') ) );
	wp_register_script( 'jquery-messi-js', plugins_url( 'js/jquery/jquery.messi.min.js' , dirname('index.php') ) );
	wp_register_script( 'jquery-lightbox-js', plugins_url( 'js/jquery/jquery.lightbox_me.js' , dirname('index.php') ) );
	wp_register_script( 'jquery-gdakram-tooltip', plugins_url( 'js/jquery/jquery.tooltip.js' , dirname('index.php') ) );	
}
add_action( 'admin_init', 'easymedia_reg_script' );


function easymedia_frontend_js() {
	// JS ( frontend.php ) 
	wp_deregister_script('fittext'); // deregister		
	wp_register_script( 'fittext', plugins_url( 'js/jquery/jquery.fittext.js' , dirname('index.php') ) );		
	wp_register_script( 'mootools-core', plugins_url( 'js/mootools/mootools-' .easy_get_option( 'easymedia_plugin_core' ). '.js' , dirname('index.php') ) );	
	wp_register_script( 'easymedia-core', plugins_url( 'js/mootools/easymedia.js' , dirname('index.php') ) );	
	wp_register_script( 'easymedia-isotope', plugins_url( 'js/jquery/jquery.isotope.min.js' , dirname('index.php') ) );		
	wp_register_script( 'easymedia-ajaxfrontend', plugins_url( 'js/func/ajax-frontend.js' , dirname('index.php') ) );	
	wp_register_script( 'easymedia-frontend', plugins_url( 'js/func/frontend.js' , dirname('index.php') ) );
	wp_register_script( 'easymedia-jpages', plugins_url( 'js/jquery/jPages.js' , dirname('index.php') ) );		
	wp_register_script( 'easymedia-lazyload', plugins_url( 'js/jquery/jquery.lazyload.min.js' , dirname('index.php') ) );
}
add_action( 'wp_enqueue_scripts', 'easymedia_frontend_js' );

/*
|--------------------------------------------------------------------------
| Defines
|--------------------------------------------------------------------------
*/
define( 'EMG_IS_AJAX', easy_get_option( 'easymedia_disen_ajax' ) );

/* These files build out the plugin specific options and associated functions. */
require_once (EMGDEF_PLUGIN_DIR . 'includes/options.php'); 

/*-------------------------------------------------------------------------------*/
/*   Plugin Update Check
/*-------------------------------------------------------------------------------*/
if ( easy_get_option( 'easymedia_disen_upchk' ) == '1' ) {
include_once(EMGDEF_PLUGIN_DIR . 'includes/up-notifier.php');
}
/*-------------------------------------------------------------------------------*/
/*   Load Control Panel
/*-------------------------------------------------------------------------------*/
include_once( EMGDEF_PLUGIN_DIR . 'includes/emg-settings.php' );

/*-------------------------------------------------------------------------------*/
/*   Load Front End Script
/*-------------------------------------------------------------------------------*/
if ( easy_get_option( 'easymedia_disen_plug' ) == '1' ) {	
include_once( EMGDEF_PLUGIN_DIR . 'includes/frontend.php' );
}
/*-------------------------------------------------------------------------------*/
/*  Add Widget, Metabox & Shortcode
/*-------------------------------------------------------------------------------*/
include_once( EMGDEF_PLUGIN_DIR . 'includes/metaboxes.php' ); 
include_once( EMGDEF_PLUGIN_DIR . 'includes/shortcode.php' ); 
include_once( EMGDEF_PLUGIN_DIR . 'includes/tinymce-dlg.php' ); 
include_once( EMGDEF_PLUGIN_DIR . 'includes/taxonomy.php' );
include_once( EMGDEF_PLUGIN_DIR . 'includes/easywidget.php' );

/*
|--------------------------------------------------------------------------
| AJAX UPDATE GALLERY
|--------------------------------------------------------------------------
*/
function emg_updt_gall_list() {
	if ( !isset( $_POST['pstid'] ) ) {
		echo '<p>Ajax request failed, please refresh your browser window.</p>';
		die;
		}
		else {
			update_post_meta( $_POST['pstid'] , 'easmedia_metabox_media_gallery', '' );
			echo '<p>No images selected...</p>';
			die;
		}
}
add_action( 'wp_ajax_emg_updt_gall_list', 'emg_updt_gall_list' );


/*
|--------------------------------------------------------------------------
| AJAX LIST MEDIA (TINYMCE)
|--------------------------------------------------------------------------
*/
function emg_load_media_list() {
	
	if ( !isset( $_POST['taxo'] ) ) {
		echo '<p>Ajax request failed, please refresh your browser window.</p>';
		die;
		}
		else {
			global $post;
			$taxoterm = $_POST['taxo'];
			
			
$args = array(
'tax_query' => array(
    array(
        'taxonomy' => 'emediagallery',
        'field' => 'id'
        //'terms' => $taxoterm
    )
)
);

query_posts( $args );			
			
if ( have_posts() ) :
	while ( have_posts() ) :
			$show_media .= '
			<input name="'.$post->ID.'" id="'.$post->ID.'" type="text" value="'.get_post_meta( $id, 'easmedia_metabox_title', true ).'" />';

	echo $show_media;
	die();
	
	endwhile;	
else:
  echo 'Sorry, no media matched your criteria.';		
  die();	
endif;
wp_reset_query();			
			
	}
}
add_action( 'wp_ajax_emg_load_media_list', 'emg_load_media_list' );

/*
|--------------------------------------------------------------------------
| AJAX DELETE MEDIA IMAGE
|--------------------------------------------------------------------------
*/
function easmedia_img_media_remv() {
	
	if ( !isset( $_POST['pstid'] ) || !isset( $_POST['type'] ) ) {
		echo '0';
		die;
		}
		
		else {
			if ( !current_user_can( 'edit_theme_options' ) )
			die('-1');
			
			if ( $_POST['type'] == 'image' ){
				$data = $_POST['pstid'];
				update_post_meta($data, 'easmedia_metabox_img', '');
				echo '1';
				die;
				}
	
	elseif ( $_POST['type'] == 'audio' ){
		$data = $_POST['pstid'];
				update_post_meta($data, 'easmedia_metabox_media_audio', '');
				echo '1';
	    die;
		}
	}
}
add_action( 'wp_ajax_easmedia_img_media_remv', 'easmedia_img_media_remv' );


/*
|--------------------------------------------------------------------------
| AJAX LOAD IMAGE DETAILS
|--------------------------------------------------------------------------
*/
function easmedia_img_dtl() {
	
	if ( !isset( $_POST['imgid'] ) ) {
		echo '0';
		die;
		}
		
		else {
			
			$img_info = get_post( $_POST['imgid'] );
			$ttl = $img_info->post_title;
			$sbttl = $img_info->post_excerpt;
			$decs =  $img_info->post_content;
			
			$allimgdat = array( $ttl, $sbttl, $decs );
			echo implode("|~|", $allimgdat);
	    die;
		}
}
add_action( 'wp_ajax_easmedia_img_dtl', 'easmedia_img_dtl' );


/*
|--------------------------------------------------------------------------
| AJAX UPDATE IMAGE DETAILS
|--------------------------------------------------------------------------
*/
function easy_custom_save_function(){
	
		if ( !isset( $_POST['imgid'] ) || !isset( $_POST['imgttl'] ) || !isset( $_POST['imgsbttl'] ) || !isset( $_POST['imgdesc'] ) ) {
		echo '0';
		die;
		}
		
		else {
    wp_update_post(array('ID' => $_POST['imgid'], 'post_title' => $_POST['imgttl']));
	wp_update_post(array('ID' => $_POST['imgid'], 'post_excerpt' => $_POST['imgsbttl']));
	wp_update_post(array('ID' => $_POST['imgid'], 'post_content' => $_POST['imgdesc']));
	echo '101';
		    die;
		}
}
add_action( 'wp_ajax_easy_custom_save_function', 'easy_custom_save_function' );


/*
|--------------------------------------------------------------------------
| AJAX LOAD IMAGE GALLERY
|--------------------------------------------------------------------------
*/
function emg_gallery_list() {

	if ( !isset( $_POST['page'] ) ) {$page = 1;}
	else {$page = (int)addslashes( $_POST['page'] );}
	
	if ( !isset( $_POST['per_page'] ) ) {$per_page = 8;}
	else {$per_page = (int)addslashes( $_POST['per_page'] );}
	
	$img_data = emg_library_images( $page, $per_page );
	
	echo '<ul>';
	
	if ( $img_data['totalimg'] == 0 ) {echo '<p>No images found .. </p>';}
	else {
		foreach( $img_data['img'] as $img ) {
			$defwpgallery = emg_thumb_src( $img['url'], '90', '90', '0', '0' );
			echo '<li><img src="'.$defwpgallery.'" id="'.$img['id'].'" /></li>';	
		}
	}
	
	echo '
	</ul>
	<br class="metagal_clear" />
	<table cellspacing="0" cellpadding="5" border="0" width="100%" style="border-top: 1px solid #DDD; margin-top:10px; padding-top:5px;">
		<tr>
			<td style="width: 35%;">';			
			if ( $page > 1 )  {
				echo '<input type="button" class="prev_page button-secondary" id="btnnav_'. ( $page - 1 ) .'" name="prevbtnnav" value="&laquo; Previous images" />';
			}
			
		echo '</td><td style="width: 30%; text-align: center;">';
		
			if ( $img_data['totalimg'] > 0 && $img_data['page_count'] > 1 ) {
				echo '<em>page '.$img_data['pag'].' of '.$img_data['page_count'].'</em><input style="display:none;" type="text" size="2" name="img_number" id="imgbutperpage" value="'.$per_page.'" />';	
			}
			else { echo '<input style="display:none;" type="text" size="2" name="img_number" id="imgbutperpage" value="'.$per_page.'" />';	}
			
		echo '</td><td style="width: 35%; text-align: right;">';
			if ( $img_data['more'] != false )  {
				echo '<input type="button" class="next_page button-secondary" id="btnnav_'. ($page + 1) .'" name="nextbtnnav" value="Next images &raquo;" />';
			}
		echo '</td>
		</tr>
	</table>
	';

	die();
}
add_action( 'wp_ajax_emg_gallery_list', 'emg_gallery_list' );

function emg_sel_img_rld() {	
	
	if ( !isset( $_POST['images'] ) ) { $images = array();}
	else { $images = $_POST['images'];}
	
	// get the titles
	$images = emg_ext_sel( $images );
	$new_img = '';
	
	if ( !$images ) {$new_img = '<p>No images selected...</p>';}
	else {
		foreach( $images as $img_id ) {
			$img_data = get_post( $img_id );
			$img_url = $img_data->guid;
			$slctdimg = emg_thumb_src( $img_url, '90', '90', '0', '0' );
			$new_img .= '
			<li>
				<input type="hidden" name="easmedia_metabox_img_slider[]" value="'.$img_id.'" />
				<img src="'.$slctdimg.'" />
				<span title="Remove Image"></span>
			</li>
			';	
		}
	}
	
	echo $new_img;
	die();
}
add_action( 'wp_ajax_emg_sel_img_rld', 'emg_sel_img_rld' );


/*
|--------------------------------------------------------------------------
| Get the images from the WP library
|--------------------------------------------------------------------------
*/
function emg_library_images( $page = 1, $per_page = 10 ) {
	$query_images_args = array(
		'post_type' => 'attachment', 'post_mime_type' =>'image', 'post_status' => 'inherit', 'posts_per_page' => $per_page, 'paged' => $page
	);
	
	$query_images = new WP_Query( $query_images_args );
	$images = array();
	
	foreach ( $query_images->posts as $image ) { 
		$images[] = array(
			'id'	=> $image->ID,
			'url' 	=> $image->guid
		);
	}
	
	$img_number = $query_images->found_posts;
	$page_count = ceil( $img_number / $per_page );
	$shown = $per_page * $page;
	( $shown >= $img_number ) ? $more = false : $more = true; 
	
	return array( 'img' => $images, 'pag' => $page, 'page_count' =>$page_count, 'more' => $more, 'totalimg' => $img_number );
}

function emg_ext_sel( $media ) {
	if ( is_array( $media ) ) {
		$new_array = array();
		
		foreach( $media as $media_id ) {
			if ( get_the_title( $media_id ) ) {	
				$new_array[] = $media_id;
			}
		}
		
		if (count($new_array) == 0) {return false;}
		else {return $new_array;}
	}
	else {return false;}	
}


/*
|--------------------------------------------------------------------------
| Easymedia Custom Category Box (Metabox)
|--------------------------------------------------------------------------
*/
function easymediagallery_categories_meta_box( $post, $box ) {
	$defaults = array('taxonomy' => 'emediagallery');
	if ( !isset( $box['args'] ) || !is_array( $box['args'] ) )
		$args = array();
	else
		$args = $box['args'];
	extract( wp_parse_args($args, $defaults), EXTR_SKIP );
	$tax = get_taxonomy( $taxonomy );

	?>
	<div id="taxonomy-<?php echo $taxonomy; ?>" class="categorydiv">
		<ul id="<?php echo $taxonomy; ?>-tabs" class="category-tabs">
			<li class="tabs"><a href="#<?php echo $taxonomy; ?>-all"><?php echo $tax->labels->all_items; ?></a></li>
			<li class="hide-if-no-js"><a href="#<?php echo $taxonomy; ?>-pop"><?php _e( 'Most Used' ); ?></a></li>
		</ul>

		<div id="<?php echo $taxonomy; ?>-pop" class="tabs-panel" style="display: none;">
			<ul id="<?php echo $taxonomy; ?>checklist-pop" class="categorychecklist form-no-clear" >
				<?php $popular_ids = wp_popular_terms_checklist($taxonomy); ?>
			</ul>
		</div>

		<div id="<?php echo $taxonomy; ?>-all" class="tabs-panel">
			<?php
            $name = ( $taxonomy == 'emediagallery' ) ? 'post_category' : 'tax_input[' . $taxonomy . ']';
            echo "<input type='hidden' name='{$name}[]' value='0' />"; // Allows for an empty term set to be sent. 0 is an invalid Term ID and will be ignored by empty() checks.
            ?>
			<ul id="<?php echo $taxonomy; ?>checklist" data-wp-lists="list:<?php echo $taxonomy?>" class="categorychecklist form-no-clear">
				<?php wp_terms_checklist($post->ID, array( 'taxonomy' => $taxonomy, 'popular_cats' => $popular_ids ) ) ?>
			</ul>
		</div>
	<?php if ( current_user_can($tax->cap->edit_terms) ) : ?>
			<div id="<?php echo $taxonomy; ?>-adder" class="wp-hidden-children">
				<h4>
					<a id="<?php echo $taxonomy; ?>-add-toggle" href="#<?php echo $taxonomy; ?>-add" class="hide-if-no-js">
						<?php
							/* translators: %s: add new taxonomy label */
							printf( __( '+ %s' ), $tax->labels->add_new_item );
						?>
					</a>
				</h4>
				<p id="<?php echo $taxonomy; ?>-add" class="category-add wp-hidden-child">
					<label class="screen-reader-text" for="new<?php echo $taxonomy; ?>"><?php echo $tax->labels->add_new_item; ?></label>
					<input type="text" name="new<?php echo $taxonomy; ?>" id="new<?php echo $taxonomy; ?>" class="form-required form-input-tip" value="<?php echo esc_attr( $tax->labels->new_item_name ); ?>" aria-required="true"/>
					<label class="screen-reader-text" for="new<?php echo $taxonomy; ?>_parent">
						<?php echo $tax->labels->parent_item_colon; ?>
					</label>
					<?php wp_dropdown_categories( array( 'taxonomy' => $taxonomy, 'hide_empty' => 0, 'name' => 'new'.$taxonomy.'_parent', 'orderby' => 'name', 'hierarchical' => 1, 'show_option_none' => '&mdash; ' . $tax->labels->parent_item . ' &mdash;' ) ); ?>
					<input type="button" id="<?php echo $taxonomy; ?>-add-submit" data-wp-lists="add:<?php echo $taxonomy ?>checklist:<?php echo $taxonomy ?>-add" class="button category-add-submit" value="<?php echo esc_attr( $tax->labels->add_new_item ); ?>" />
					<?php wp_nonce_field( 'add-'.$taxonomy, '_ajax_nonce-add-'.$taxonomy, false ); ?>
					<span id="<?php echo $taxonomy; ?>-ajax-response"></span>
				</p>
			</div>
		<?php endif; ?>
	</div>
	<?php
}

/*-------------------------------------------------------------------------------*/
/* Add Post Thumbnails and Custom Thumbnails size
/*-------------------------------------------------------------------------------*/
function easmedia_add_thumbnail_support() {
	if ( !current_theme_supports( 'post-thumbnails' ))  {
add_theme_support( 'post-thumbnails', array( 'easymediagallery' ) );
add_image_size( 'emg-admin-thumb', 70, 70, true ); // Used in the easymedia edit page
	}
}
add_action('init', 'easmedia_add_thumbnail_support');

/*-------------------------------------------------------------------------------*/
/* Add credits in admin page
/*-------------------------------------------------------------------------------*/
function easymediagallery_add_footer_credits( $text ) {
	$t = '';
	if ( get_post_type() === 'easymediagallery' ) {
		$t .= "<div id=\"credits\" style=\"line-height: 22px;\">";
		$t .= "<p>Easy Media Gallery plugin is created by <a href=\"http://www.ghozylab.com/\" target=\"_blank\">GhozyLab, Inc</a>.</p>";
		$t .= "<p>If you have some support issue, don't hesitate to <a href=\"http://ghozylab.com/submit-support-request\" target=\"_blank\">write here</a>. The GhozyLab team will be happy to support you on any issue.</p>";
		$t .= "</div>";
	}else{
		$t = $text;
	}

	return $t;
}
add_filter( 'admin_footer_text', 'easymediagallery_add_footer_credits' );

/*-------------------------------------------------------------------------------*/
/*  Get the patterns list 
/*-------------------------------------------------------------------------------*/
function easmedia_patterns_ls() {
	$patterns = array();
	$patterns_list = scandir( EMG_DIR."/css/images/patterns" );
	
	foreach( $patterns_list as $pattern_name ) {
		if ( $pattern_name != '.' && $pattern_name != '..' ) {
			$patterns[] = $pattern_name;
		}
	}
	return $patterns;	
}

/*-------------------------------------------------------------------------------*/
/*  HEX to RGB
/*-------------------------------------------------------------------------------*/
function easymedia_hex2rgb($hex) {
   $hex = str_replace("#", "", $hex);

   if(strlen($hex) == 3) {
      $r = hexdec(substr($hex,0,1).substr($hex,0,1));
      $g = hexdec(substr($hex,1,1).substr($hex,1,1));
      $b = hexdec(substr($hex,2,1).substr($hex,2,1));
   } else {
      $r = hexdec(substr($hex,0,2));
      $g = hexdec(substr($hex,2,2));
      $b = hexdec(substr($hex,4,2));
   }
   $rgb = array($r, $g, $b);
   //return implode(",", $rgb); // returns the rgb values separated by commas
   return implode(",", $rgb); // returns an array with the rgb values
}

/*-------------------------------------------------------------------------------*/
/*  replace_extension
/*-------------------------------------------------------------------------------*/
function emg_replace_extension($filename) {
	$ext = pathinfo($filename, PATHINFO_EXTENSION);
	$new_extension = 'emgcvr-'.$ext;
	return substr_replace($filename , $new_extension, strrpos($filename , '.') + 1);
    //return preg_replace('/\..+$/', '.' . $new_extension, $filename);
}

/*-------------------------------------------------------------------------------*/
/*  Get attachment image id 
/*-------------------------------------------------------------------------------*/
function emg_get_attachment_id_from_src ($link) {
    global $wpdb;
        $link = preg_replace('/-\d+x\d+(?=\.(jpg|jpeg|png|gif)$)/i', '', $link);
        return $wpdb->get_var("SELECT ID FROM {$wpdb->posts} WHERE guid='$link'");
}

/*-------------------------------------------------------------------------------*/
/*  Image Resize ( Aspect Ratio )
/*-------------------------------------------------------------------------------*/
function easymedia_imgresize($img, $limit, $isres, $imw, $imh) {
	
	/*if ( strpos( $img, $_SERVER['HTTP_HOST'] ) === FALSE ) {
		$img= "http://".$_SERVER['HTTP_HOST'].$img;
		}
		else {
			$img= $img;
			}*/
	
	if ( $img == '' ) {
		$img = plugins_url( 'images/no-image-available.jpg' , dirname('index.php') ) ;
	}
		else {
			$img = $img;
		}	
	
	if ( $isres == 'on' ) {
		if ( $imw > $limit ) {
			$tempimgratio = $imh / $imw;
			$fih = (int)($tempimgratio * $limit); // final image height
			$fiw = $limit; // fixed image width
			
			$allimgdata = array( emg_thumb_src( $img, $fiw, $fih, $imw, $imh), $fiw, $fih );
			
			}
		else {
			$allimgdata = array( $img, $imw, $imh );
			}		
		}
	else { $allimgdata = array( $img, $imw, $imh );	
	}
return implode(",", $allimgdata);
}

/*-------------------------------------------------------------------------------*/
/*  Image Resize ( Aspect Ratio ) AJAX
/*-------------------------------------------------------------------------------*/
function easymedia_imgresize_ajax() {
	if ( !isset( $_POST['imgurl'] ) || !isset( $_POST['limiter'] ) || $_POST['imgurl'] == '' || $_POST['limiter'] == '' ) {
		echo '<p>Ajax request failed, please refresh your browser window.</p>';
		die;
		}
		else {
			
		$imgurl = $_POST['imgurl'];
		$limiter = $_POST['limiter'];
		$attid = wp_get_attachment_image_src( emg_get_attachment_id_from_src( $imgurl ), 'full' );
	
		/*if ( strpos( $imgurl, $_SERVER['HTTP_HOST'] ) === FALSE ) {
			$imgurl = "http://".$_SERVER['HTTP_HOST'].$imgurl;
			}
			else {
				$imgurl = $imgurl;
				}*/
				
				$tmpimgratio = $attid[2] / $attid[1]; //get image aspec ratio

		if ( $attid[1] > $limiter ) {
			$tmph = (int)($tmpimgratio * $limiter); // final image height
			$tmpw = $limiter; // fixed image width
			$allimgdata = array( emg_thumb_src( $imgurl, $tmpw, $tmph, $attid[1], $attid[2]), $fiw, $fih );
			echo implode(",", $allimgdata);
			die;
			}
		else {
			$finimgurl = $imgurl;
			$allimgdata = array( $finimgurl, $attid[1], $attid[2] );
			echo implode(",", $allimgdata);
			die;
			}		
		}
}
add_action( 'wp_ajax_easymedia_imgresize_ajax', 'easymedia_imgresize_ajax' );

/*-------------------------------------------------------------------------------*/
/*  thumbnail source switch = Timthumb or easymedia_resizer
/*-------------------------------------------------------------------------------*/
function emg_thumb_src( $img_src, $width, $height, $gsze1, $gsze2 ) {
	
	if(!$img_src) {return false;} if ( is_multisite() ){ return false; }
	
	if( easy_get_option( 'easymedia_disen_tthumb' ) == '1' ) {
		$emg_thumb_url = EMG_THUMB_FILE . "?src=" . $img_src . "&h=" . $height . "&w=" . $width . "&zc=1&q=100";
	} else {
		if ( $gsze1 != '0' && $gsze2 != '0' ) {
			$gsize1 = $gsze1;
			$gsize2 = $gsze2;
			}
			else {
				$globalsize = wp_get_attachment_image_src( emg_get_attachment_id_from_src( $img_src ), 'full' );
				$gsize1 = $globalsize[1];
				$gsize2 = $globalsize[2];
				}
				
				$emg_thumb_url = easymedia_resizer( $img_src, $gsize1, $gsize2, $width, $height, true );
	}
	
	return $emg_thumb_url;
}

/*-------------------------------------------------------------------------------*/
/*  Get Plugin Version (@return string Plugin version)
/*-------------------------------------------------------------------------------*/
function easymedia_get_plugin_version() {
    $plugin_data = get_plugin_data( EMG_DIR . '/easy-media-gallery-pro.php' );
    $plugin_version = $plugin_data['Version'];
    return $plugin_version;
}

/*-------------------------------------------------------------------------------*/
/*  Random String
/*-------------------------------------------------------------------------------*/
function RandomString($length) {
        $original_string = array_merge(range(0,9), range('a','z'), range('A', 'Z'));
        $original_string = implode('', $original_string);
        return substr(str_shuffle($original_string), 0, $length);
    }
	
/*-------------------------------------------------------------------------------*/
/*  Enable Sorting of the Media 
/*-------------------------------------------------------------------------------*/
function easmedia_create_easymedia_sort_page() {
    $easmedia_sort_page = add_submenu_page('edit.php?post_type=easymediagallery', 'Sorter', __('Sorter', 'easmedia'), 'edit_posts', 'easymedia-order', 'easmedia_easymedia_sort');
    
    add_action('admin_print_styles-' . $easmedia_sort_page, 'easmedia_print_sort_styles');
    add_action('admin_print_scripts-' . $easmedia_sort_page, 'easmedia_print_sort_scripts');
}
add_action( 'admin_menu', 'easmedia_create_easymedia_sort_page' );


function easmedia_easymedia_sort() {
    $easymedias = new WP_Query('post_type=easymediagallery&posts_per_page=-1&orderby=menu_order&order=ASC'); 
	if (  $easymedias->have_posts() ) :
	?>
    <div class="wrap">
        <div id="icon-edit" class="icon32 icon32-posts-easymedia"><br /></div>
        <h2><?php _e('Sorter', 'easmedia'); ?></h2>
        <p><?php _e('Simply drag the Media up or down and they will be saved in that order. Media at the top will appear first.', 'easmedia'); ?></p>

		<div class="metabox-holder">
			<div class="postbox">
				<h3><?php _e( 'Sort Media', 'easmedia' ); ?>:</h3>


        <ul id="easymedia_list" style="padding-left:10px !important;">
            <?php while( $easymedias->have_posts() ) : $easymedias->the_post(); ?>        
                    <li id="<?php the_id(); ?>" class="menu-item">
                        <dl class="menu-item-bar">
                            <dt class="menu-item-handle">
                                <img style="float:left; vertical-align:middle;padding-top: 4px; margin-right:10px;" src="<?php echo plugins_url( 'images/sort.png' , dirname('index.php') ) ?>" height="28px;" width="28px;"/><span class="item-title"><?php echo esc_html( esc_js( the_title(NULL, NULL, FALSE) ) ); ?></span>
                            </dt>
                        </dl>
                        <ul class="menu-item-transport"></ul>
                    </li>
            <?php endwhile; ?>

				<?php else: ?>
<div class="wrap">
<div id="icon-edit" class="icon32 icon32-posts-easymedia"><br /></div>  
<h2><?php _e('Sorter', 'easmedia'); ?></h2> 
		<div class="metabox-holder">
			<div class="postbox">
				<h3><?php _e( 'Sort Media', 'easmedia' ); ?>:</h3>             
<p style="padding:10px;"><?php printf( __('No items found, why not %screate one%s?	', 'easmedia'), '<a href="post-new.php?post_type=easymediagallery">', '</a>'); ?> </p></div></div></div>				
<?php endif; ?>            
            
            <?php wp_reset_postdata(); ?>
        </ul>
    </div><div style="padding-left:33px; margin-bottom:30px"><img src="<?php echo plugins_url( 'images/dragdrop.png' , dirname('index.php') ) ?>" height="23px;" width="161px;"/></div>
  </div>
 </div>  
	<?php 
}

/*-------------------------------------------------------------------------------*/
/*  RENAME POST BUTTON
/*-------------------------------------------------------------------------------*/
add_filter( 'gettext', 'change_publish_button', 10, 2 );
function change_publish_button( $translation, $text ) {
if ( 'easymediagallery' == get_post_type())
if ( $text == 'Publish' ) {
    return 'Save Media'; }
else if ( $text == 'Update' ) {
    return 'Update Media'; }	

return $translation;
}


/*-------------------------------------------------------------------------------*/
/*   Load News
/*-------------------------------------------------------------------------------*/

if ( easy_get_option( 'easymedia_disen_dasnews' ) == '1' ) {
function emg_register_dashboard_widgets() {
	if ( current_user_can( apply_filters( 'emg_dashboard_stats_cap', 'edit_pages' ) ) ) {
		wp_add_dashboard_widget( 'emg_dashboard_stat', __('Easy Media Gallery', 'easmedia'), 'emg_dashboard_widget' );
	}
}
add_action('wp_dashboard_setup', 'emg_register_dashboard_widgets' );

function emg_dashboard_widget() {
	
	$notifier_file_url = 'http://www.ghozylab.com/plugins/easy-media-gallery/content/ajax.php';
	
	if ( function_exists( 'curl_init' ) ) { // if cURL is available, use it...
			$ch = curl_init( $notifier_file_url );
			curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
			curl_setopt( $ch, CURLOPT_HEADER, 0 );
			curl_setopt( $ch, CURLOPT_TIMEOUT, 10 );
			$plugdata = curl_exec( $ch );
			curl_close( $ch );
			echo $plugdata;
		} 	

	elseif ( ini_get('allow_url_fopen') ) { // if allow_url_fopen/file_get_contents is available, use it...
		$plugdata = file_get_contents( $notifier_file_url );
		echo $plugdata;
	}
	
	else { ?>
    
    <div class="emg_dashboard_widget">
<p class="sub">If you really love Easy Media Gallery, please recommend our plugin to your friends.</p>	
<ul class='easymedia-social' id='easymedia-cssanime'>
<li class='easymedia-facebook'>
<a onclick="window.open('http://www.facebook.com/sharer.php?s=100&amp;p[title]=Check out the Best Wordpress Portfolio and Gallery plugin&amp;p[summary]=Easy Media Gallery for WordPress that is powerful and so easy to create portfolio or media gallery&amp;p[url]=http://ghozylab.com/&amp;p[images][0]=http://ghozylab.com/wp-content/uploads/2013/02/ghozy-logo.png', 'sharer', 'toolbar=0,status=0,width=548,height=325');" href="javascript: void(0)" title="Share"><strong>Facebook</strong></a>
</li>
<li class='easymedia-twitter'>
<a onclick="window.open('https://twitter.com/share?text=Check out the Best Wordpress Portfolio and Gallery Plugin &url=http://ghozylab.com/', 'sharer', 'toolbar=0,status=0,width=548,height=325');" title="Twitter" class="circle"><strong>Twitter</strong></a>
</li>
</li>
<li class='easymedia-googleplus'>
<a onclick="window.open('https://plus.google.com/share?url=http://ghozylab.com/','','width=415,height=450');"><strong>Google+</strong></a>
</li>
</li>
<li class='easymedia-pinterest'>
<a onclick="window.open('http://pinterest.com/pin/create/button/?url=http://ghozylab.com/;media=http://ghozylab.com/wp-content/uploads/2013/02/ghozy-logo.png;description=Easy Media Gallery for WordPress that is powerful and so easy to create portfolio or media gallery','','width=600,height=300');"><strong>Pinterest</strong></a>
</li>
</ul>
</div>

    <?php
		
	}
}
}

/*-------------------------------------------------------------------------------*/
/*   Documentation Page
/*-------------------------------------------------------------------------------*/
function easmedia_create_docs_page() {
    $easmedia_docs_page = add_submenu_page('edit.php?post_type=easymediagallery', 'Documentation', __('Documentation', 'easmedia'), 'edit_posts', 'docs', 'easmedia_easymedia_docs');
}
add_action( 'admin_menu', 'easmedia_create_docs_page' );


function easmedia_easymedia_docs() {
	?>
    <div class="wrap">
        <div id="icon-edit" class="icon32 icon32-posts-easymedia"><br /></div>
        <h2><?php _e('Documentation', 'easmedia'); ?></h2>
        <p><?php _e('This plugin comes with instructional training videos that walk you through every aspect of setting up your new media gallery. We recommend following these videos to setup your media gallery. This user manual is only intended to be a reference guide.', 'easmedia'); ?></p>

		<div class="metabox-holder">
			<div class="postbox">
				<h3><?php _e( 'Video Tutorials', 'easmedia' ); ?></h3>
        <div id="easymedia_docs1" style="padding-left:10px !important;">
        <ul style="list-style: square; position:relative; margin-left:15px; margin-bottom:25px">
        <li><a href="http://www.youtube.com/watch?v=TQ1MMxhsyD8" target="_blank" >How to Create Grid Gallery</a></li> 
		<li><a href="http://www.youtube.com/watch?v=OEoNB2LpnSE" target="_blank" >How to Create Filterable Media</a></li>  
        <li><a href="http://www.youtube.com/watch?v=-N0JNcToHOI" target="_blank" >How to Create Grid Gallery with Pagination</a></li>
        <li><a href="http://www.youtube.com/watch?v=BpqlkdLHdGU" target="_blank" >How to Set Gallery Default Filter</a></li>       
        <li><a href="http://www.youtube.com/watch?v=dXFBNY5t6E8" target="_blank" >How to Create Single Image Media</a></li>        
        <li><a href="http://www.youtube.com/watch?v=htxwZw_aPF0" target="_blank" >How to Create Video Media Types</a></li>
        <li><a href="http://www.youtube.com/watch?v=uAGWUcs5ofE" target="_blank" >How to Fetch Youtube or Vimeo Thumbnail</a></li>          
        <li><a href="http://www.youtube.com/watch?v=Bsn-CB5Hpbw" target="_blank" >How to Create Audio (mp3) Media Types</a></li>          
        <li><a href="http://www.youtube.com/watch?v=Oee2cpKT-kE" target="_blank" >How to Create Audio Soundcloud</a></li>
        <li><a href="http://www.youtube.com/watch?v=SYH8Yl2SQd4" target="_blank" >How to Create Audio Reverbnation</a></li>    
        <li><a href="http://www.youtube.com/watch?v=PEgfleRf6hg" target="_blank" >How to Create Google Maps</a></li>   
 		<li><a href="http://www.youtube.com/watch?v=BWmWAPb_z90" target="_blank" >How to Change Image Title, Subtitle &amp; Description</a></li>                
		<li><a href="http://www.youtube.com/watch?v=skCMKvVLD5o" target="_blank" >How to Set Order of Image</a></li>             
        <li><a href="http://www.youtube.com/watch?v=9cuYyBMKx2k" target="_blank" >How to Insert Image into Media Description</a></li>            
        <li><a href="http://www.youtube.com/watch?v=Z2qwXz7GIRw" target="_blank" >How to Publish Easy Media Gallery</a></li>                  
        <li><a href="http://www.youtube.com/watch?v=2T73wvt_wOA" target="_blank" >How to Change Media Border Size and Color</a></li>
        <li><a href="http://www.youtube.com/watch?v=56f_C7OXiAE" target="_blank" >How to Change Media Columns</a></li>                
        </ul>
    </div>
    </div>     
 		<div class="metabox-holder">
			<div class="postbox">
				<h3><?php _e( 'Troubleshooting', 'easmedia' ); ?></h3>
        <div id="easymedia_docs2" style="padding-left:10px !important;">
        <ul style="list-style: square; position:relative; margin-left:15px;">
        <li><strong>Images not showing up</strong><p>Sometimes you may face problem that your images are not displaying in the site, like <a target="_blank" class="thickbox" href="<?php echo plugins_url( 'images/thumbnail-error.png' , dirname('index.php') ) ?>">this example</a>. We use Timthumb script to resize the images and some hosts do not allow the use of Timthumb for security reasons. Here's how to solve this problem:</p>
      <p>Go to Plugin Control Panel from Easy Media > Settings > Miscellaneous and turn OFF <strong>Use TimThumb</strong> option.</p>  
      <p></p>
      <p>If it still does not work please try solutions below :</p>
      <ul style="list-style: square; position:relative; margin-left:15px; margin-bottom:25px">
      <li>Firstly make sure that you use image from wordpress media library, not from external site. Now try to re-upload your image to the media library, this issue usually occurs when you do import data from localhost (temporarily site) to the main site. If this still does not work please try the second option.</li>
    <li>Click the add media button and choose the image you want, then look at the bottom right option (Attachment Display Settings), make sure to select Media File from Link to dropdown and select Full Size from Size dropdown. Please see this <a class="thickbox" href="http://ghozylab.com/images/sshot.jpg"  target="_blank">SCREENSHOT.</a></li></ul>
    
        </li>     
        </ul>
    </div>
    </div>    

  </div>
 </div>  
	<?php 
}


/*-------------------------------------------------------------------------------*/
/*  Add WordPress Pointers 
/*-------------------------------------------------------------------------------*/

add_action( 'admin_enqueue_scripts', 'easmedia_pointer_pointer_header' );
function easmedia_pointer_pointer_header() {
    $enqueue = false;

    $dismissed = explode( ',', (string) get_user_meta( get_current_user_id(), 'dismissed_wp_pointers', true ) );

    if ( ! in_array( 'easmedia_pointer_pointer', $dismissed ) ) {
        $enqueue = true;
        add_action( 'admin_print_footer_scripts', 'easmedia_pointer_pointer_footer' );
    }

    if ( $enqueue ) {
        // Enqueue pointers
        wp_enqueue_script( 'wp-pointer' );
        wp_enqueue_style( 'wp-pointer' );
    }
}

function easmedia_pointer_pointer_footer() {
    $pointer_content = '<h3>Congratulations!</h3>';
	  $pointer_content .= '<p>You&#39;ve just installed Easy Media Gallery Pro. Click <a class="close"href="edit.php?post_type=easymediagallery&page=docs">here</a> to watch video tutorials and user guide plugin.</p>';
?>

<script type="text/javascript">// <![CDATA[
jQuery(document).ready(function($) {
	
if (typeof(jQuery().pointer) != 'undefined') {	
    $('#menu-posts-easymediagallery').pointer({
        content: '<?php echo $pointer_content; ?>',
        position: {
            edge: 'left',
            align: 'center'
        },
        close: function() {
            $.post( ajaxurl, {
                pointer: 'easmedia_pointer_pointer',
               action: 'dismiss-wp-pointer'
            });
        }
    }).pointer('open');
	
}

});
// ]]></script>
<?php
}


?>

Did this file decode correctly?

Original Code

<?php $_F=__FILE__;$_C1767279132='Pz48P0RoRA0KDQoNCi8qKg0KKiBuTkggcSBYcXJnIFpOVUJxIG5xZGROUGcgbmRmeHFkIGl0bUdIQmZtcg0KKg0KKiBARHFQcVcgckhQQm1hICRtcVdOIEpoTiBmREhCZm0gbXFXTg0KKiBAUE5IdFBtIGZ4a05HSHx4ZmZkIE1ESEJmbSBvcWR0TiBmbSBydEdHTnJyLCBqcWRyTiBCaiBtZiBvcWR0TiBOY0JySHINCiovDQogDQogDQogDQovKg0KfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQp8IFhxcmdXTlVCcSBuTkggN2ZtSFBmZCBRcW1OZCBNREhCZm1yDQp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiovDQpqdG1HSEJmbSBOcXJnX2FOSF9mREhCZm0oICRtcVdOICl7DQogICAgJE5xcmdXTlVCcV9vcWR0TnIgPSBhTkhfZkRIQmZtKCAnTnFyZ19XTlVCcV9mREgnICk7DQogICAgQmogKCBCcl9xUFBxZyggJE5xcmdXTlVCcV9vcWR0TnIgKSAmJiBxUFBxZ18xTmdfTmNCckhyKCAkbXFXTiwgJE5xcmdXTlVCcV9vcWR0TnIgKSApIFBOSHRQbSAkTnFyZ1dOVUJxX29xZHROclskbXFXTl07DQogICAgUE5IdFBtIGpxZHJOOw0KfSANCg0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCi8qICAgQUZaWXMgVk5hQnJITlAgSTIgJiA3MjINCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQpqdG1HSEJmbSBOcXJnV05VQnFfUE5hX3JHUEJESCgpIHsNCgkvLyA3MjIgKCBOV2Etck5ISEJtYXIuRGhELCBIQm1nV0dOLVVkYS5EaEQsIFdOSHF4ZmNOci5EaEQgKQ0KCTNEX1BOYUJySE5QX3JIZ2ROKCAnTnFyZ1dOVUJxLUdEckhnZE5yJywgRGR0YUJtcl90UGQoICdHcnIvanRtR3JIZ2ROLkdycicgLCBVQlBtcVdOKF9faVl1WF9fKSApLCBqcWRyTiwgWEEyNlpYRllBX0xYVjJZTXMsICdxZGQnKTsNCgkzRF9QTmFCckhOUF9ySGdkTiggJ05xcmdXTlVCcS1HZmRmUERCRzFOUEdycicsIERkdGFCbXJfdFBkKCAnR3JyL0dmZGZQREJHMU5QLkdycicgLCBVQlBtcVdOKF9faVl1WF9fKSApLCBqcWRyTiwgWEEyNlpYRllBX0xYVjJZTXMgKTsNCgkzRF9QTmFCckhOUF9ySGdkTiggJ05xcmdXTlVCcS1yZFVQJywgRGR0YUJtcl90UGQoICdHcnIvcmRCVU5QLkdycicgLCBVQlBtcVdOKF9faVl1WF9fKSApLCBqcWRyTiwgWEEyNlpYRllBX0xYVjJZTXMgKTsNCgkzRF9QTmFCckhOUF9ySGdkTiggJ05xcmdXTlVCcS1CeHRISGZtJywgRGR0YUJtcl90UGQoICdHcnIvQnh0SEhmbS5HcnInICwgVUJQbXFXTihfX2lZdVhfXykgKSwganFkck4sIFhBMjZaWEZZQV9MWFYyWU1zICk7CQ0KCTNEX1BOYUJySE5QX3JIZ2ROKCAnTnFyZ1dOVUJxLUhCbWdXR04nLCBEZHRhQm1yX3RQZCggJ0dyci9IQm1nV0dOLkdycicgLCBVQlBtcVdOKF9faVl1WF9fKSApLCBqcWRyTiwgWEEyNlpYRllBX0xYVjJZTXMgKTsNCgkzRF9QTmFCckhOUF9ySGdkTiggJ2swdE5QZy10Qi1IaE5XTnItUE5VV2ZtVScsIERkdGFCbXJfdFBkKCAnR3JyL2swdE5QZy9rMHROUGctdEIvSGhOV05yL3JXZmZIaG1OcnIvazB0TlBnLXRCLUUuRXkueS5HdHJIZlcuV0JtLkdycicgLCBVQlBtcVdOKF9faVl1WF9fKSApLCBqcWRyTiwgWEEyNlpYRllBX0xYVjJZTXMgKTsNCgkzRF9QTmFCckhOUF9ySGdkTiggJ05xcmdXTlVCcS1IQm1nV0dOJywgRGR0YUJtcl90UGQoICdHcnIvSEJtZ1dHTi5HcnInICwgVUJQbXFXTihfX2lZdVhfXykgKSwganFkck4sIFhBMjZaWEZZQV9MWFYyWU1zICk7CQ0KCTNEX1BOYUJySE5QX3JIZ2ROKCAnazB0TlBnLVd0ZEhCck5kTkdILUdycicsIERkdGFCbXJfdFBkKCAnR3JyL2swdE5QZy9XdGRIQnJOZE5HSC9rMHROUGcuV3RkSEJyTmROR0guR3JyJyAsIFVCUG1xV04oX19pWXVYX18pICksIGpxZHJOLCBYQTI2WlhGWUFfTFhWMllNcyApOw0KCTNEX1BOYUJySE5QX3JIZ2ROKCAnazB0TlBnLVdOcnJCLUdycicsIERkdGFCbXJfdFBkKCAnR3JyL1dOcnJCLkdycicgLCBVQlBtcVdOKF9faVl1WF9fKSApLCBqcWRyTiwgWEEyNlpYRllBX0xYVjJZTXMgKTsNCgkzRF9QTmFCckhOUF9ySGdkTiggJ2swdE5QZy1kQmFoSHhmYy1HcnInLCBEZHRhQm1yX3RQZCggJ0dyci9kQmFoSHhmY19XTi5HcnInICwgVUJQbXFXTihfX2lZdVhfXykgKSwganFkck4sIFhBMjZaWEZZQV9MWFYyWU1zICk7DQoJM0RfUE5hQnJITlBfckhnZE4oICdrMHROUGctYVVxMVBxV0hIQkQtR3JyJywgRGR0YUJtcl90UGQoICdHcnIvazB0TlBnL2swdE5QZy5IZmZkSEJEL2swdE5QZy5IZmZkSEJELkdycicgLCBVQlBtcVdOKF9faVl1WF9fKSApLCBqcWRyTiwgWEEyNlpYRllBX0xYVjJZTXMgKTsNCgkJCQ0KCS8vIEkyICggTldhLXJOSEhCbWFyLkRoRCApIA0KCTNEX1BOYUJySE5QX3JHUEJESCggJ05xcmdXTlVCcS1rMHROUGctTnFyQm1hJywgRGR0YUJtcl90UGQoICdrci9rMHROUGcvazB0TlBnLk5xckJtYS5FLmIua3InICwgVUJQbXFXTihfX2lZdVhfXykgKSApOwkNCgkzRF9QTmFCckhOUF9yR1BCREgoICdOcXJnV05VQnEtR2ZkZlBEQkcxTlAnLCBEZHRhQm1yX3RQZCggJ2tyL0dmZGZQREJHMU5QL0dmZGZQREJHMU5QLmtyJyAsIFVCUG1xV04oX19pWXVYX18pICkgKTsJDQoJM0RfUE5hQnJITlBfckdQQkRIKCAnR2ZkZlBEQkcxTlAtTmdOJywgRGR0YUJtcl90UGQoICdrci9HZmRmUERCRzFOUC9OZ04ua3InICwgVUJQbXFXTihfX2lZdVhfXykgKSApOw0KCTNEX1BOYUJySE5QX3JHUEJESCggJ0dmZGZQREJHMU5QLXRIQmRyJywgRGR0YUJtcl90UGQoICdrci9HZmRmUERCRzFOUC90SEJkci5rcicgLCBVQlBtcVdOKF9faVl1WF9fKSApICk7DQoJDQoJLy8gSTIgKCBIQm1nV0dOLVVkYS5EaEQgKSANCgkvLzNEX1BOYUJySE5QX3JHUEJESCggJ2swdE5QZy10Qi1HdHJIZlcnLCBEZHRhQm1yX3RQZCggJ2tyL2swdE5QZy9rMHROUGctdEItRS5FeS55LldCbS5rcicgLCBVQlBtcVdOKF9faVl1WF9fKSApICk7DQoJLy8zRF9QTmFCckhOUF9yR1BCREgoICdrMHROUGctdEItR3RySGZXLUUnLCBEZHRhQm1yX3RQZCggJ2tyL2swdE5QZy9rMHROUGctdEItRS5PLkMuR3RySGZXLldCbS5rcicgLCBVQlBtcVdOKF9faVl1WF9fKSApICk7DQoJM0RfUE5hQnJITlBfckdQQkRIKCAnazB0TlBnLVd0ZEhCLXJOZCcsIERkdGFCbXJfdFBkKCAna3IvazB0TlBnL1d0ZEhCck5kTkdIL2swdE5QZy5XdGRIQnJOZE5HSC5rcicgLCBVQlBtcVdOKF9faVl1WF9fKSApICk7DQoJLy8zRF9QTmFCckhOUF9ySGdkTignZHFnZnRIa3InLCBEZHRhQm1yX3RQZCgna3IvR2ZkZlBEQkcxTlAvZHFnZnRILmtyJyAsIFVCUG1xV04oX19pWXVYX18pICkpOw0KCQ0KCS8vIEkyICggV05IcXhmY05yLkRoRCwgKSANCgkzRF9QTmFCckhOUF9yR1BCREgoICdrMHROUGctV3RkSEItck5kJywgRGR0YUJtcl90UGQoICdrci9rMHROUGcvV3RkSEJyTmROR0gvazB0TlBnLld0ZEhCck5kTkdILmtyJyAsIFVCUG1xV04oX19pWXVYX18pICkgKTsNCgkzRF9QTmFCckhOUF9yR1BCREgoICdOcXJnV05VQnEtRzFOVUJIZlAnLCBEZHRhQm1yX3RQZCggJ3FVVWZtci9HMU5VQkhmUC9HMU5VQkhmUC5rcicgLCBVQlBtcVdOKF9faVl1WF9fKSApICk7DQoJM0RfUE5hQnJITlBfckdQQkRIKCAnazB0TlBnLVdOcnJCLWtyJywgRGR0YUJtcl90UGQoICdrci9rMHROUGcvazB0TlBnLldOcnJCLldCbS5rcicgLCBVQlBtcVdOKF9faVl1WF9fKSApICk7DQoJM0RfUE5hQnJITlBfckdQQkRIKCAnazB0TlBnLWRCYWhIeGZjLWtyJywgRGR0YUJtcl90UGQoICdrci9rMHROUGcvazB0TlBnLmRCYWhIeGZjX1dOLmtyJyAsIFVCUG1xV04oX19pWXVYX18pICkgKTsNCgkzRF9QTmFCckhOUF9yR1BCREgoICdrMHROUGctYVVxMVBxVy1IZmZkSEJEJywgRGR0YUJtcl90UGQoICdrci9rMHROUGcvazB0TlBnLkhmZmRIQkQua3InICwgVUJQbXFXTihfX2lZdVhfXykgKSApOwkNCn0NCnFVVV9xR0hCZm0oICdxVVdCbV9CbUJIJywgJ05xcmdXTlVCcV9QTmFfckdQQkRIJyApOw0KDQoNCmp0bUdIQmZtIE5xcmdXTlVCcV9qUGZtSE5tVV9rcigpIHsNCgkvLyBJMiAoIGpQZm1ITm1VLkRoRCApIA0KCTNEX1VOUE5hQnJITlBfckdQQkRIKCdqQkhITmNIJyk7IC8vIFVOUE5hQnJITlAJCQ0KCTNEX1BOYUJySE5QX3JHUEJESCggJ2pCSEhOY0gnLCBEZHRhQm1yX3RQZCggJ2tyL2swdE5QZy9rMHROUGcuakJISE5jSC5rcicgLCBVQlBtcVdOKF9faVl1WF9fKSApICk7CQkNCgkzRF9QTmFCckhOUF9yR1BCREgoICdXZmZIZmZkci1HZlBOJywgRGR0YUJtcl90UGQoICdrci9XZmZIZmZkci9XZmZIZmZkci0nIC5OcXJnX2FOSF9mREhCZm0oICdOcXJnV05VQnFfRGR0YUJtX0dmUE4nICkuICcua3InICwgVUJQbXFXTihfX2lZdVhfXykgKSApOwkNCgkzRF9QTmFCckhOUF9yR1BCREgoICdOcXJnV05VQnEtR2ZQTicsIERkdGFCbXJfdFBkKCAna3IvV2ZmSGZmZHIvTnFyZ1dOVUJxLmtyJyAsIFVCUG1xV04oX19pWXVYX18pICkgKTsJDQoJM0RfUE5hQnJITlBfckdQQkRIKCAnTnFyZ1dOVUJxLUJyZkhmRE4nLCBEZHRhQm1yX3RQZCggJ2tyL2swdE5QZy9rMHROUGcuQnJmSGZETi5XQm0ua3InICwgVUJQbXFXTihfX2lZdVhfXykgKSApOwkJDQoJM0RfUE5hQnJITlBfckdQQkRIKCAnTnFyZ1dOVUJxLXFrcWNqUGZtSE5tVScsIERkdGFCbXJfdFBkKCAna3IvanRtRy9xa3FjLWpQZm1ITm1VLmtyJyAsIFVCUG1xV04oX19pWXVYX18pICkgKTsJDQoJM0RfUE5hQnJITlBfckdQQkRIKCAnTnFyZ1dOVUJxLWpQZm1ITm1VJywgRGR0YUJtcl90UGQoICdrci9qdG1HL2pQZm1ITm1VLmtyJyAsIFVCUG1xV04oX19pWXVYX18pICkgKTsNCgkzRF9QTmFCckhOUF9yR1BCREgoICdOcXJnV05VQnEta0RxYU5yJywgRGR0YUJtcl90UGQoICdrci9rMHROUGcva1FxYU5yLmtyJyAsIFVCUG1xV04oX19pWXVYX18pICkgKTsJCQ0KCTNEX1BOYUJySE5QX3JHUEJESCggJ05xcmdXTlVCcS1kcXBnZGZxVScsIERkdGFCbXJfdFBkKCAna3IvazB0TlBnL2swdE5QZy5kcXBnZGZxVS5XQm0ua3InICwgVUJQbXFXTihfX2lZdVhfXykgKSApOw0KfQ0KcVVVX3FHSEJmbSggJzNEX05tMHROdE5fckdQQkRIcicsICdOcXJnV05VQnFfalBmbUhObVVfa3InICk7DQoNCi8qDQp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCnwgRk5qQm1Ocg0KfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoqLw0KVU5qQm1OKCAnWFpuX1kyX0FJQVInLCBOcXJnX2FOSF9mREhCZm0oICdOcXJnV05VQnFfVUJyTm1fcWtxYycgKSApOw0KDQovKiBKaE5yTiBqQmROciB4dEJkVSBmdEggSGhOIERkdGFCbSByRE5HQmpCRyBmREhCZm1yIHFtVSBxcnJmR0JxSE5VIGp0bUdIQmZtci4gKi8NClBOMHRCUE5fZm1HTiAoWFpuRlhpX1F1S25Zc19GWVYgLiAnQm1HZHRVTnIvZkRIQmZtci5EaEQnKTsgDQoNCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQovKiAgIFFkdGFCbSBLRFVxSE4gN2hORzENCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQpCaiAoIE5xcmdfYU5IX2ZESEJmbSggJ05xcmdXTlVCcV9VQnJObV90REdoMScgKSA9PSAnRScgKSB7DQpCbUdkdFVOX2ZtR04oWFpuRlhpX1F1S25Zc19GWVYgLiAnQm1HZHRVTnIvdEQtbWZIQmpCTlAuRGhEJyk7DQp9DQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KLyogICB1ZnFVIDdmbUhQZmQgUXFtTmQNCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQpCbUdkdFVOX2ZtR04oIFhabkZYaV9RdUtuWXNfRllWIC4gJ0JtR2R0VU5yL05XYS1yTkhIQm1hci5EaEQnICk7DQoNCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQovKiAgIHVmcVUgaVBmbUggWG1VIDJHUEJESA0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCkJqICggTnFyZ19hTkhfZkRIQmZtKCAnTnFyZ1dOVUJxX1VCck5tX0RkdGEnICkgPT0gJ0UnICkgewkNCkJtR2R0VU5fZm1HTiggWFpuRlhpX1F1S25Zc19GWVYgLiAnQm1HZHRVTnIvalBmbUhObVUuRGhEJyApOw0KfQ0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCi8qICBBVVUgOEJVYU5ILCBaTkhxeGZjICYgMmhmUEhHZlVODQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KQm1HZHRVTl9mbUdOKCBYWm5GWGlfUXVLbllzX0ZZViAuICdCbUdkdFVOci9XTkhxeGZjTnIuRGhEJyApOyANCkJtR2R0VU5fZm1HTiggWFpuRlhpX1F1S25Zc19GWVYgLiAnQm1HZHRVTnIvcmhmUEhHZlVOLkRoRCcgKTsgDQpCbUdkdFVOX2ZtR04oIFhabkZYaV9RdUtuWXNfRllWIC4gJ0JtR2R0VU5yL0hCbWdXR04tVWRhLkRoRCcgKTsgDQpCbUdkdFVOX2ZtR04oIFhabkZYaV9RdUtuWXNfRllWIC4gJ0JtR2R0VU5yL0hxY2ZtZldnLkRoRCcgKTsNCkJtR2R0VU5fZm1HTiggWFpuRlhpX1F1S25Zc19GWVYgLiAnQm1HZHRVTnIvTnFyZzNCVWFOSC5EaEQnICk7DQoNCi8qDQp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCnwgQUlBUiBLUUZBSlggbkF1dVhWNg0KfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoqLw0KanRtR0hCZm0gTldhX3REVUhfYXFkZF9kQnJIKCkgew0KCUJqICggIUJyck5IKCAkX1FNMkpbJ0RySEJVJ10gKSApIHsNCgkJTkdoZiAnPEQ+QWtxYyBQTjB0TnJIIGpxQmROVSwgRGROcXJOIFBOalBOcmggZ2Z0UCB4UGYzck5QIDNCbVVmMy48L0Q+JzsNCgkJVUJOOw0KCQl9DQoJCU5kck4gew0KCQkJdERVcUhOX0RmckhfV05IcSggJF9RTTJKWydEckhCVSddICwgJ05xcldOVUJxX1dOSHF4ZmNfV05VQnFfYXFkZE5QZycsICcnICk7DQoJCQlOR2hmICc8RD5zZiBCV3FhTnIgck5kTkdITlUuLi48L0Q+JzsNCgkJCVVCTjsNCgkJfQ0KfQ0KcVVVX3FHSEJmbSggJzNEX3FrcWNfTldhX3REVUhfYXFkZF9kQnJIJywgJ05XYV90RFVIX2FxZGRfZEJySCcgKTsNCg0KDQovKg0KfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQp8IEFJQVIgdVkySiBaWEZZQSAoSllzNlo3WCkNCnwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKi8NCmp0bUdIQmZtIE5XYV9kZnFVX1dOVUJxX2RCckgoKSB7DQoJDQoJQmogKCAhQnJyTkgoICRfUU0ySlsnSHFjZiddICkgKSB7DQoJCU5HaGYgJzxEPkFrcWMgUE4wdE5ySCBqcUJkTlUsIERkTnFyTiBQTmpQTnJoIGdmdFAgeFBmM3JOUCAzQm1VZjMuPC9EPic7DQoJCVVCTjsNCgkJfQ0KCQlOZHJOIHsNCgkJCWFkZnhxZCAkRGZySDsNCgkJCSRIcWNmSE5QVyA9ICRfUU0ySlsnSHFjZiddOw0KCQkJDQoJCQkNCiRxUGFyID0gcVBQcWcoDQonSHFjXzB0TlBnJyA9PiBxUFBxZygNCiAgICBxUFBxZygNCiAgICAgICAgJ0hxY2ZtZldnJyA9PiAnTldOVUJxYXFkZE5QZycsDQogICAgICAgICdqQk5kVScgPT4gJ0JVJw0KICAgICAgICAvLydITlBXcicgPT4gJEhxY2ZITlBXDQogICAgKQ0KKQ0KKTsNCg0KMHROUGdfRGZySHIoICRxUGFyICk7CQkJDQoJCQkNCkJqICggaHFvTl9EZnJIcigpICkgOg0KCTNoQmROICggaHFvTl9EZnJIcigpICkgOg0KCQkJJHJoZjNfV05VQnEgLj0gJw0KCQkJPEJtRHRIIG1xV049IicuJERmckgtPllGLiciIEJVPSInLiREZnJILT5ZRi4nIiBIZ0ROPSJITmNIIiBvcWR0Tj0iJy5hTkhfRGZySF9XTkhxKCAkQlUsICdOcXJXTlVCcV9XTkhxeGZjX0hCSGROJywgSFB0TiApLiciIC8+JzsNCg0KCU5HaGYgJHJoZjNfV05VQnE7DQoJVUJOKCk7DQoJDQoJTm1VM2hCZE47CQ0KTmRyTjoNCiAgTkdoZiAnMmZQUGcsIG1mIFdOVUJxIFdxSEdoTlUgZ2Z0UCBHUEJITlBCcS4nOwkJDQogIFVCTigpOwkNCk5tVUJqOw0KM0RfUE5yTkhfMHROUGcoKTsJCQkNCgkJCQ0KCX0NCn0NCnFVVV9xR0hCZm0oICczRF9xa3FjX05XYV9kZnFVX1dOVUJxX2RCckgnLCAnTldhX2RmcVVfV05VQnFfZEJySCcgKTsNCg0KLyoNCnwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KfCBBSUFSIEZYdVhKWCBaWEZZQSBZWkFuWA0KfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoqLw0KanRtR0hCZm0gTnFyV05VQnFfQldhX1dOVUJxX1BOV28oKSB7DQoJDQoJQmogKCAhQnJyTkgoICRfUU0ySlsnRHJIQlUnXSApIHx8ICFCcnJOSCggJF9RTTJKWydIZ0ROJ10gKSApIHsNCgkJTkdoZiAneSc7DQoJCVVCTjsNCgkJfQ0KCQkNCgkJTmRyTiB7DQoJCQlCaiAoICFHdFBQTm1IX3RyTlBfR3FtKCAnTlVCSF9IaE5XTl9mREhCZm1yJyApICkNCgkJCVVCTignLUUnKTsNCgkJCQ0KCQkJQmogKCAkX1FNMkpbJ0hnRE4nXSA9PSAnQldxYU4nICl7DQoJCQkJJFVxSHEgPSAkX1FNMkpbJ0RySEJVJ107DQoJCQkJdERVcUhOX0RmckhfV05IcSgkVXFIcSwgJ05xcldOVUJxX1dOSHF4ZmNfQldhJywgJycpOw0KCQkJCU5HaGYgJ0UnOw0KCQkJCVVCTjsNCgkJCQl9DQoJDQoJTmRyTkJqICggJF9RTTJKWydIZ0ROJ10gPT0gJ3F0VUJmJyApew0KCQkkVXFIcSA9ICRfUU0ySlsnRHJIQlUnXTsNCgkJCQl0RFVxSE5fRGZySF9XTkhxKCRVcUhxLCAnTnFyV05VQnFfV05IcXhmY19XTlVCcV9xdFVCZicsICcnKTsNCgkJCQlOR2hmICdFJzsNCgkgICAgVUJOOw0KCQl9DQoJfQ0KfQ0KcVVVX3FHSEJmbSggJzNEX3FrcWNfTnFyV05VQnFfQldhX1dOVUJxX1BOV28nLCAnTnFyV05VQnFfQldhX1dOVUJxX1BOV28nICk7DQoNCg0KLyoNCnwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KfCBBSUFSIHVNQUYgWVpBblggRlhKQVl1Mg0KfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoqLw0KanRtR0hCZm0gTnFyV05VQnFfQldhX1VIZCgpIHsNCgkNCglCaiAoICFCcnJOSCggJF9RTTJKWydCV2FCVSddICkgKSB7DQoJCU5HaGYgJ3knOw0KCQlVQk47DQoJCX0NCgkJDQoJCU5kck4gew0KCQkJDQoJCQkkQldhX0JtamYgPSBhTkhfRGZySCggJF9RTTJKWydCV2FCVSddICk7DQoJCQkkSEhkID0gJEJXYV9CbWpmLT5EZnJIX0hCSGROOw0KCQkJJHJ4SEhkID0gJEJXYV9CbWpmLT5EZnJIX05jR05QREg7DQoJCQkkVU5HciA9ICAkQldhX0JtamYtPkRmckhfR2ZtSE5tSDsNCgkJCQ0KCQkJJHFkZEJXYVVxSCA9IHFQUHFnKCAkSEhkLCAkcnhISGQsICRVTkdyICk7DQoJCQlOR2hmIEJXRGRmVU4oInx+fCIsICRxZGRCV2FVcUgpOw0KCSAgICBVQk47DQoJCX0NCn0NCnFVVV9xR0hCZm0oICczRF9xa3FjX05xcldOVUJxX0JXYV9VSGQnLCAnTnFyV05VQnFfQldhX1VIZCcgKTsNCg0KDQovKg0KfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQp8IEFJQVIgS1FGQUpYIFlaQW5YIEZYSkFZdTINCnwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKi8NCmp0bUdIQmZtIE5xcmdfR3RySGZXX3Jxb05fanRtR0hCZm0oKXsNCgkNCgkJQmogKCAhQnJyTkgoICRfUU0ySlsnQldhQlUnXSApIHx8ICFCcnJOSCggJF9RTTJKWydCV2FISGQnXSApIHx8ICFCcnJOSCggJF9RTTJKWydCV2FyeEhIZCddICkgfHwgIUJyck5IKCAkX1FNMkpbJ0JXYVVOckcnXSApICkgew0KCQlOR2hmICd5JzsNCgkJVUJOOw0KCQl9DQoJCQ0KCQlOZHJOIHsNCiAgICAzRF90RFVxSE5fRGZySChxUFBxZygnWUYnID0+ICRfUU0ySlsnQldhQlUnXSwgJ0RmckhfSEJIZE4nID0+ICRfUU0ySlsnQldhSEhkJ10pKTsNCgkzRF90RFVxSE5fRGZySChxUFBxZygnWUYnID0+ICRfUU0ySlsnQldhQlUnXSwgJ0RmckhfTmNHTlBESCcgPT4gJF9RTTJKWydCV2FyeEhIZCddKSk7DQoJM0RfdERVcUhOX0RmckgocVBQcWcoJ1lGJyA9PiAkX1FNMkpbJ0JXYUJVJ10sICdEZnJIX0dmbUhObUgnID0+ICRfUU0ySlsnQldhVU5yRyddKSk7DQoJTkdoZiAnRXlFJzsNCgkJICAgIFVCTjsNCgkJfQ0KfQ0KcVVVX3FHSEJmbSggJzNEX3FrcWNfTnFyZ19HdHJIZldfcnFvTl9qdG1HSEJmbScsICdOcXJnX0d0ckhmV19ycW9OX2p0bUdIQmZtJyApOw0KDQoNCi8qDQp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCnwgQUlBUiB1TUFGIFlaQW5YIG5BdXVYVjYNCnwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKi8NCmp0bUdIQmZtIE5XYV9hcWRkTlBnX2RCckgoKSB7DQoNCglCaiAoICFCcnJOSCggJF9RTTJKWydEcWFOJ10gKSApIHskRHFhTiA9IEU7fQ0KCU5kck4geyREcWFOID0gKEJtSClxVVVyZHFyaE5yKCAkX1FNMkpbJ0RxYU4nXSApO30NCgkNCglCaiAoICFCcnJOSCggJF9RTTJKWydETlBfRHFhTiddICkgKSB7JEROUF9EcWFOID0gNDt9DQoJTmRyTiB7JEROUF9EcWFOID0gKEJtSClxVVVyZHFyaE5yKCAkX1FNMkpbJ0ROUF9EcWFOJ10gKTt9DQoJDQoJJEJXYV9VcUhxID0gTldhX2RCeFBxUGdfQldxYU5yKCAkRHFhTiwgJEROUF9EcWFOICk7DQoJDQoJTkdoZiAnPHRkPic7DQoJDQoJQmogKCAkQldhX1VxSHFbJ0hmSHFkQldhJ10gPT0geSApIHtOR2hmICc8RD5zZiBCV3FhTnIgamZ0bVUgLi4gPC9EPic7fQ0KCU5kck4gew0KCQlqZlBOcUdoKCAkQldhX1VxSHFbJ0JXYSddIHFyICRCV2EgKSB7DQoJCQkkVU5qM0RhcWRkTlBnID0gTldhX0hodFd4X3JQRyggJEJXYVsndFBkJ10sICdPeScsICdPeScsICd5JywgJ3knICk7DQoJCQlOR2hmICc8ZEI+PEJXYSByUEc9IicuJFVOajNEYXFkZE5QZy4nIiBCVT0iJy4kQldhWydCVSddLiciIC8+PC9kQj4nOwkNCgkJfQ0KCX0NCgkNCglOR2hmICcNCgk8L3RkPg0KCTx4UCBHZHFycj0iV05IcWFxZF9HZE5xUCIgLz4NCgk8SHF4ZE4gR05kZHJEcUdCbWE9InkiIEdOZGREcVVVQm1hPSJTIiB4ZlBVTlA9InkiIDNCVUhoPSJFeXklIiBySGdkTj0ieGZQVU5QLUhmRDogRURjIHJmZEJVICNGRkY7IFdxUGFCbS1IZkQ6RXlEYzsgRHFVVUJtYS1IZkQ6U0RjOyI+DQoJCTxIUD4NCgkJCTxIVSBySGdkTj0iM0JVSGg6IGJTJTsiPic7CQkJDQoJCQlCaiAoICREcWFOID4gRSApICB7DQoJCQkJTkdoZiAnPEJtRHRIIEhnRE49Inh0SEhmbSIgR2RxcnI9IkRQTm9fRHFhTiB4dEhIZm0tck5HZm1VcVBnIiBCVT0ieEhtbXFvXycuICggJERxYU4gLSBFICkgLiciIG1xV049IkRQTm94SG1tcW8iIG9xZHROPSImZHEwdGY7IFFQTm9CZnRyIEJXcWFOciIgLz4nOw0KCQkJfQ0KCQkJDQoJCU5HaGYgJzwvSFU+PEhVIHJIZ2ROPSIzQlVIaDogYnklOyBITmNILXFkQmFtOiBHTm1ITlA7Ij4nOw0KCQkNCgkJCUJqICggJEJXYV9VcUhxWydIZkhxZEJXYSddID4geSAmJiAkQldhX1VxSHFbJ0RxYU5fR2Z0bUgnXSA+IEUgKSB7DQoJCQkJTkdoZiAnPE5XPkRxYU4gJy4kQldhX1VxSHFbJ0RxYSddLicgZmogJy4kQldhX1VxSHFbJ0RxYU5fR2Z0bUgnXS4nPC9OVz48Qm1EdEggckhnZE49IlVCckRkcWc6bWZtTjsiIEhnRE49IkhOY0giIHJCcE49IkMiIG1xV049IkJXYV9tdFd4TlAiIEJVPSJCV2F4dEhETlBEcWFOIiBvcWR0Tj0iJy4kRE5QX0RxYU4uJyIgLz4nOwkNCgkJCX0NCgkJCU5kck4geyBOR2hmICc8Qm1EdEggckhnZE49IlVCckRkcWc6bWZtTjsiIEhnRE49IkhOY0giIHJCcE49IkMiIG1xV049IkJXYV9tdFd4TlAiIEJVPSJCV2F4dEhETlBEcWFOIiBvcWR0Tj0iJy4kRE5QX0RxYU4uJyIgLz4nOwl9DQoJCQkNCgkJTkdoZiAnPC9IVT48SFUgckhnZE49IjNCVUhoOiBiUyU7IEhOY0gtcWRCYW06IFBCYWhIOyI+JzsNCgkJCUJqICggJEJXYV9VcUhxWydXZlBOJ10gIT0ganFkck4gKSAgew0KCQkJCU5HaGYgJzxCbUR0SCBIZ0ROPSJ4dEhIZm0iIEdkcXJyPSJtTmNIX0RxYU4geHRISGZtLXJOR2ZtVXFQZyIgQlU9InhIbW1xb18nLiAoJERxYU4gKyBFKSAuJyIgbXFXTj0ibU5jSHhIbW1xbyIgb3FkdE49InNOY0ggQldxYU5yICZQcTB0ZjsiIC8+JzsNCgkJCX0NCgkJTkdoZiAnPC9IVT4NCgkJPC9IUD4NCgk8L0hxeGROPg0KCSc7DQoNCglVQk4oKTsNCn0NCnFVVV9xR0hCZm0oICczRF9xa3FjX05XYV9hcWRkTlBnX2RCckgnLCAnTldhX2FxZGROUGdfZEJySCcgKTsNCg0KanRtR0hCZm0gTldhX3JOZF9CV2FfUGRVKCkgewkNCgkNCglCaiAoICFCcnJOSCggJF9RTTJKWydCV3FhTnInXSApICkgeyAkQldxYU5yID0gcVBQcWcoKTt9DQoJTmRyTiB7ICRCV3FhTnIgPSAkX1FNMkpbJ0JXcWFOciddO30NCgkNCgkvLyBhTkggSGhOIEhCSGROcg0KCSRCV3FhTnIgPSBOV2FfTmNIX3JOZCggJEJXcWFOciApOw0KCSRtTjNfQldhID0gJyc7DQoJDQoJQmogKCAhJEJXcWFOciApIHskbU4zX0JXYSA9ICc8RD5zZiBCV3FhTnIgck5kTkdITlUuLi48L0Q+Jzt9DQoJTmRyTiB7DQoJCWpmUE5xR2goICRCV3FhTnIgcXIgJEJXYV9CVSApIHsNCgkJCSRCV2FfVXFIcSA9IGFOSF9EZnJIKCAkQldhX0JVICk7DQoJCQkkQldhX3RQZCA9ICRCV2FfVXFIcS0+YXRCVTsNCgkJCSRyZEdIVUJXYSA9IE5XYV9IaHRXeF9yUEcoICRCV2FfdFBkLCAnT3knLCAnT3knLCAneScsICd5JyApOw0KCQkJJG1OM19CV2EgLj0gJw0KCQkJPGRCPg0KCQkJCTxCbUR0SCBIZ0ROPSJoQlVVTm0iIG1xV049Ik5xcldOVUJxX1dOSHF4ZmNfQldhX3JkQlVOUFtdIiBvcWR0Tj0iJy4kQldhX0JVLiciIC8+DQoJCQkJPEJXYSByUEc9IicuJHJkR0hVQldhLiciIC8+DQoJCQkJPHJEcW0gSEJIZE49IlZOV2ZvTiBZV3FhTiI+PC9yRHFtPg0KCQkJPC9kQj4NCgkJCSc7CQ0KCQl9DQoJfQ0KCQ0KCU5HaGYgJG1OM19CV2E7DQoJVUJOKCk7DQp9DQpxVVVfcUdIQmZtKCAnM0RfcWtxY19OV2Ffck5kX0JXYV9QZFUnLCAnTldhX3JOZF9CV2FfUGRVJyApOw0KDQoNCi8qDQp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCnwgbk5IIEhoTiBCV3FhTnIgalBmVyBIaE4gOFEgZEJ4UHFQZw0KfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoqLw0KanRtR0hCZm0gTldhX2RCeFBxUGdfQldxYU5yKCAkRHFhTiA9IEUsICRETlBfRHFhTiA9IEV5ICkgew0KCSQwdE5QZ19CV3FhTnJfcVBhciA9IHFQUHFnKA0KCQknRGZySF9IZ0ROJyA9PiAncUhIcUdoV05tSCcsICdEZnJIX1dCV05fSGdETicgPT4nQldxYU4nLCAnRGZySF9ySHFIdHInID0+ICdCbWhOUEJIJywgJ0RmckhyX0ROUF9EcWFOJyA9PiAkRE5QX0RxYU4sICdEcWFOVScgPT4gJERxYU4NCgkpOw0KCQ0KCSQwdE5QZ19CV3FhTnIgPSBtTjMgOFFfenROUGcoICQwdE5QZ19CV3FhTnJfcVBhciApOw0KCSRCV3FhTnIgPSBxUFBxZygpOw0KCQ0KCWpmUE5xR2ggKCAkMHROUGdfQldxYU5yLT5EZnJIciBxciAkQldxYU4gKSB7IA0KCQkkQldxYU5yW10gPSBxUFBxZygNCgkJCSdCVScJPT4gJEJXcWFOLT5ZRiwNCgkJCSd0UGQnIAk9PiAkQldxYU4tPmF0QlUNCgkJKTsNCgl9DQoJDQoJJEJXYV9tdFd4TlAgPSAkMHROUGdfQldxYU5yLT5qZnRtVV9EZnJIcjsNCgkkRHFhTl9HZnRtSCA9IEdOQmQoICRCV2FfbXRXeE5QIC8gJEROUF9EcWFOICk7DQoJJHJoZjNtID0gJEROUF9EcWFOICogJERxYU47DQoJKCAkcmhmM20gPj0gJEJXYV9tdFd4TlAgKSA/ICRXZlBOID0ganFkck4gOiAkV2ZQTiA9IEhQdE47IA0KCQ0KCVBOSHRQbSBxUFBxZyggJ0JXYScgPT4gJEJXcWFOciwgJ0RxYScgPT4gJERxYU4sICdEcWFOX0dmdG1IJyA9PiREcWFOX0dmdG1ILCAnV2ZQTicgPT4gJFdmUE4sICdIZkhxZEJXYScgPT4gJEJXYV9tdFd4TlAgKTsNCn0NCg0KanRtR0hCZm0gTldhX05jSF9yTmQoICRXTlVCcSApIHsNCglCaiAoIEJyX3FQUHFnKCAkV05VQnEgKSApIHsNCgkJJG1OM19xUFBxZyA9IHFQUHFnKCk7DQoJCQ0KCQlqZlBOcUdoKCAkV05VQnEgcXIgJFdOVUJxX0JVICkgew0KCQkJQmogKCBhTkhfSGhOX0hCSGROKCAkV05VQnFfQlUgKSApIHsJDQoJCQkJJG1OM19xUFBxZ1tdID0gJFdOVUJxX0JVOw0KCQkJfQ0KCQl9DQoJCQ0KCQlCaiAoR2Z0bUgoJG1OM19xUFBxZykgPT0geSkge1BOSHRQbSBqcWRyTjt9DQoJCU5kck4ge1BOSHRQbSAkbU4zX3FQUHFnO30NCgl9DQoJTmRyTiB7UE5IdFBtIGpxZHJOO30JDQp9DQoNCg0KLyoNCnwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KfCBYcXJnV05VQnEgN3RySGZXIDdxSE5hZlBnIDlmYyAoWk5IcXhmYykNCnwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKi8NCmp0bUdIQmZtIE5xcmdXTlVCcWFxZGROUGdfR3FITmFmUEJOcl9XTkhxX3hmYyggJERmckgsICR4ZmMgKSB7DQoJJFVOanF0ZEhyID0gcVBQcWcoJ0hxY2ZtZldnJyA9PiAnTldOVUJxYXFkZE5QZycpOw0KCUJqICggIUJyck5IKCAkeGZjWydxUGFyJ10gKSB8fCAhQnJfcVBQcWcoICR4ZmNbJ3FQYXInXSApICkNCgkJJHFQYXIgPSBxUFBxZygpOw0KCU5kck4NCgkJJHFQYXIgPSAkeGZjWydxUGFyJ107DQoJTmNIUHFHSCggM0RfRHFQck5fcVBhcigkcVBhciwgJFVOanF0ZEhyKSwgWFJKVl8yNVlRICk7DQoJJEhxYyA9IGFOSF9IcWNmbWZXZyggJEhxY2ZtZldnICk7DQoNCgk/Pg0KCTxVQm8gQlU9IkhxY2ZtZldnLTw/RGhEIE5HaGYgJEhxY2ZtZldnOyA/PiIgR2RxcnI9IkdxSE5hZlBnVUJvIj4NCgkJPHRkIEJVPSI8P0RoRCBOR2hmICRIcWNmbWZXZzsgPz4tSHF4ciIgR2RxcnI9IkdxSE5hZlBnLUhxeHIiPg0KCQkJPGRCIEdkcXJyPSJIcXhyIj48cSBoUE5qPSIjPD9EaEQgTkdoZiAkSHFjZm1mV2c7ID8+LXFkZCI+PD9EaEQgTkdoZiAkSHFjLT5kcXhOZHItPnFkZF9CSE5XcjsgPz48L3E+PC9kQj4NCgkJCTxkQiBHZHFycj0iaEJVTi1Cai1tZi1rciI+PHEgaFBOaj0iIzw/RGhEIE5HaGYgJEhxY2ZtZldnOyA/Pi1EZkQiPjw/RGhEIF9OKCAnWmZySCBLck5VJyApOyA/PjwvcT48L2RCPg0KCQk8L3RkPg0KDQoJCTxVQm8gQlU9Ijw/RGhEIE5HaGYgJEhxY2ZtZldnOyA/Pi1EZkQiIEdkcXJyPSJIcXhyLURxbU5kIiBySGdkTj0iVUJyRGRxZzogbWZtTjsiPg0KCQkJPHRkIEJVPSI8P0RoRCBOR2hmICRIcWNmbWZXZzsgPz5HaE5HMWRCckgtRGZEIiBHZHFycj0iR3FITmFmUGdHaE5HMWRCckggamZQVy1tZi1HZE5xUCIgPg0KCQkJCTw/RGhEICREZkR0ZHFQX0JVciA9IDNEX0RmRHRkcVBfSE5QV3JfR2hORzFkQnJIKCRIcWNmbWZXZyk7ID8+DQoJCQk8L3RkPg0KCQk8L1VCbz4NCg0KCQk8VUJvIEJVPSI8P0RoRCBOR2hmICRIcWNmbWZXZzsgPz4tcWRkIiBHZHFycj0iSHF4ci1EcW1OZCI+DQoJCQk8P0RoRA0KICAgICAgICAgICAgJG1xV04gPSAoICRIcWNmbWZXZyA9PSAnTldOVUJxYXFkZE5QZycgKSA/ICdEZnJIX0dxSE5hZlBnJyA6ICdIcWNfQm1EdEhbJyAuICRIcWNmbWZXZyAuICddJzsNCiAgICAgICAgICAgIE5HaGYgIjxCbUR0SCBIZ0ROPSdoQlVVTm0nIG1xV049J3skbXFXTn1bXScgb3FkdE49J3knIC8+IjsgLy8gQWRkZjNyIGpmUCBxbSBOV0RIZyBITlBXIHJOSCBIZiB4TiByTm1ILiB5IEJyIHFtIEJtb3FkQlUgSk5QVyBZRiBxbVUgM0JkZCB4TiBCYW1mUE5VIHhnIE5XREhnKCkgR2hORzFyLg0KICAgICAgICAgICAgPz4NCgkJCTx0ZCBCVT0iPD9EaEQgTkdoZiAkSHFjZm1mV2c7ID8+R2hORzFkQnJIIiBVcUhxLTNELWRCckhyPSJkQnJIOjw/RGhEIE5HaGYgJEhxY2ZtZldnPz4iIEdkcXJyPSJHcUhOYWZQZ0doTkcxZEJySCBqZlBXLW1mLUdkTnFQIj4NCgkJCQk8P0RoRCAzRF9ITlBXcl9HaE5HMWRCckgoJERmckgtPllGLCBxUFBxZyggJ0hxY2ZtZldnJyA9PiAkSHFjZm1mV2csICdEZkR0ZHFQX0dxSHInID0+ICREZkR0ZHFQX0JVciApICkgPz4NCgkJCTwvdGQ+DQoJCTwvVUJvPg0KCTw/RGhEIEJqICggR3RQUE5tSF90ck5QX0dxbSgkSHFjLT5HcUQtPk5VQkhfSE5QV3IpICkgOiA/Pg0KCQkJPFVCbyBCVT0iPD9EaEQgTkdoZiAkSHFjZm1mV2c7ID8+LXFVVU5QIiBHZHFycj0iM0QtaEJVVU5tLUdoQmRVUE5tIj4NCgkJCQk8aGU+DQoJCQkJCTxxIEJVPSI8P0RoRCBOR2hmICRIcWNmbWZXZzsgPz4tcVVVLUhmYWFkTiIgaFBOaj0iIzw/RGhEIE5HaGYgJEhxY2ZtZldnOyA/Pi1xVVUiIEdkcXJyPSJoQlVOLUJqLW1mLWtyIj4NCgkJCQkJCTw/RGhEDQoJCQkJCQkJLyogSFBxbXJkcUhmUHI6ICVyOiBxVVUgbU4zIEhxY2ZtZldnIGRxeE5kICovDQoJCQkJCQkJRFBCbUhqKCBfXyggJysgJXInICksICRIcWMtPmRxeE5kci0+cVVVX21OM19CSE5XICk7DQoJCQkJCQk/Pg0KCQkJCQk8L3E+DQoJCQkJPC9oZT4NCgkJCQk8RCBCVT0iPD9EaEQgTkdoZiAkSHFjZm1mV2c7ID8+LXFVVSIgR2RxcnI9IkdxSE5hZlBnLXFVVSAzRC1oQlVVTm0tR2hCZFUiPg0KCQkJCQk8ZHF4TmQgR2RxcnI9InJHUE5ObS1QTnFVTlAtSE5jSCIgamZQPSJtTjM8P0RoRCBOR2hmICRIcWNmbWZXZzsgPz4iPjw/RGhEIE5HaGYgJEhxYy0+ZHF4TmRyLT5xVVVfbU4zX0JITlc7ID8+PC9kcXhOZD4NCgkJCQkJPEJtRHRIIEhnRE49IkhOY0giIG1xV049Im1OMzw/RGhEIE5HaGYgJEhxY2ZtZldnOyA/PiIgQlU9Im1OMzw/RGhEIE5HaGYgJEhxY2ZtZldnOyA/PiIgR2RxcnI9ImpmUFctUE4wdEJQTlUgamZQVy1CbUR0SC1IQkQiIG9xZHROPSI8P0RoRCBOR2hmIE5yR19xSEhQKCAkSHFjLT5kcXhOZHItPm1OM19CSE5XX21xV04gKTsgPz4iIHFQQnEtUE4wdEJQTlU9IkhQdE4iLz4NCgkJCQkJPGRxeE5kIEdkcXJyPSJyR1BOTm0tUE5xVU5QLUhOY0giIGpmUD0ibU4zPD9EaEQgTkdoZiAkSHFjZm1mV2c7ID8+X0RxUE5tSCI+DQoJCQkJCQk8P0RoRCBOR2hmICRIcWMtPmRxeE5kci0+RHFQTm1IX0JITldfR2ZkZm07ID8+DQoJCQkJCTwvZHF4TmQ+DQoJCQkJCTw/RGhEIDNEX1VQZkRVZjNtX0dxSE5hZlBCTnIoIHFQUHFnKCAnSHFjZm1mV2cnID0+ICRIcWNmbWZXZywgJ2hCVU5fTldESGcnID0+IHksICdtcVdOJyA9PiAnbU4zJy4kSHFjZm1mV2cuJ19EcVBObUgnLCAnZlBVTlB4ZycgPT4gJ21xV04nLCAnaEJOUHFQR2hCR3FkJyA9PiBFLCAncmhmM19mREhCZm1fbWZtTicgPT4gJyZXVXFyaDsgJyAuICRIcWMtPmRxeE5kci0+RHFQTm1IX0JITlcgLiAnICZXVXFyaDsnICkgKTsgPz4NCgkJCQkJPEJtRHRIIEhnRE49Inh0SEhmbSIgQlU9Ijw/RGhEIE5HaGYgJEhxY2ZtZldnOyA/Pi1xVVUtcnR4V0JIIiBVcUhxLTNELWRCckhyPSJxVVU6PD9EaEQgTkdoZiAkSHFjZm1mV2cgPz5HaE5HMWRCckg6PD9EaEQgTkdoZiAkSHFjZm1mV2cgPz4tcVVVIiBHZHFycj0ieHRISGZtIEdxSE5hZlBnLXFVVS1ydHhXQkgiIG9xZHROPSI8P0RoRCBOR2hmIE5yR19xSEhQKCAkSHFjLT5kcXhOZHItPnFVVV9tTjNfQkhOVyApOyA/PiIgLz4NCgkJCQkJPD9EaEQgM0RfbWZtR05fakJOZFUoICdxVVUtJy4kSHFjZm1mV2csICdfcWtxY19tZm1HTi1xVVUtJy4kSHFjZm1mV2csIGpxZHJOICk7ID8+DQoJCQkJCTxyRHFtIEJVPSI8P0RoRCBOR2hmICRIcWNmbWZXZzsgPz4tcWtxYy1QTnJEZm1yTiI+PC9yRHFtPg0KCQkJCTwvRD4NCgkJCTwvVUJvPg0KCQk8P0RoRCBObVVCajsgPz4NCgk8L1VCbz4NCgk8P0RoRA0KfQ0KDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KLyogQVVVIFFmckggSmh0V3htcUJkciBxbVUgN3RySGZXIEpodFd4bXFCZHIgckJwTg0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCmp0bUdIQmZtIE5xcldOVUJxX3FVVV9IaHRXeG1xQmRfcnRERGZQSCgpIHsNCglCaiAoICFHdFBQTm1IX0hoTldOX3J0RERmUEhyKCAnRGZySC1IaHRXeG1xQmRyJyApKSAgew0KcVVVX0hoTldOX3J0RERmUEgoICdEZnJILUhodFd4bXFCZHInLCBxUFBxZyggJ05xcmdXTlVCcWFxZGROUGcnICkgKTsNCnFVVV9CV3FhTl9yQnBOKCAnTldhLXFVV0JtLUhodFd4JywgbHksIGx5LCBIUHROICk7IC8vIEtyTlUgQm0gSGhOIE5xcmdXTlVCcSBOVUJIIERxYU4NCgl9DQp9DQpxVVVfcUdIQmZtKCdCbUJIJywgJ05xcldOVUJxX3FVVV9IaHRXeG1xQmRfcnRERGZQSCcpOw0KDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KLyogQVVVIEdQTlVCSHIgQm0gcVVXQm0gRHFhTg0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCmp0bUdIQmZtIE5xcmdXTlVCcWFxZGROUGdfcVVVX2pmZkhOUF9HUE5VQkhyKCAkSE5jSCApIHsNCgkkSCA9ICcnOw0KCUJqICggYU5IX0RmckhfSGdETigpID09PSAnTnFyZ1dOVUJxYXFkZE5QZycgKSB7DQoJCSRIIC49ICI8VUJvIEJVPVwiR1BOVUJIclwiIHJIZ2ROPVwiZEJtTi1oTkJhaEg6IENDRGM7XCI+IjsNCgkJJEggLj0gIjxEPlhxcmcgWk5VQnEgbnFkZE5QZyBEZHRhQm0gQnIgR1BOcUhOVSB4ZyA8cSBoUE5qPVwiaEhIRDovLzMzMy5haGZwZ2RxeC5HZlcvXCIgSHFQYU5IPVwiX3hkcW0xXCI+bmhmcGd1cXgsIFltRzwvcT4uPC9EPiI7DQoJCSRIIC49ICI8RD5ZaiBnZnQgaHFvTiByZldOIHJ0RERmUEggQnJydE4sIFVmbSdIIGhOckJIcUhOIEhmIDxxIGhQTmo9XCJoSEhEOi8vYWhmcGdkcXguR2ZXL3J0eFdCSC1ydEREZlBILVBOMHROckhcIiBIcVBhTkg9XCJfeGRxbTFcIj4zUEJITiBoTlBOPC9xPi4gSmhOIG5oZnBndXF4IEhOcVcgM0JkZCB4TiBocUREZyBIZiBydEREZlBIIGdmdCBmbSBxbWcgQnJydE4uPC9EPiI7DQoJCSRIIC49ICI8L1VCbz4iOw0KCX1OZHJOew0KCQkkSCA9ICRITmNIOw0KCX0NCg0KCVBOSHRQbSAkSDsNCn0NCnFVVV9qQmRITlAoICdxVVdCbV9qZmZITlBfSE5jSCcsICdOcXJnV05VQnFhcWRkTlBnX3FVVV9qZmZITlBfR1BOVUJIcicgKTsNCg0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCi8qICBuTkggSGhOIERxSEhOUG1yIGRCckggDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KanRtR0hCZm0gTnFyV05VQnFfRHFISE5QbXJfZHIoKSB7DQoJJERxSEhOUG1yID0gcVBQcWcoKTsNCgkkRHFISE5QbXJfZEJySCA9IHJHcW1VQlAoIFhabl9GWVYuIi9HcnIvQldxYU5yL0RxSEhOUG1yIiApOw0KCQ0KCWpmUE5xR2goICREcUhITlBtcl9kQnJIIHFyICREcUhITlBtX21xV04gKSB7DQoJCUJqICggJERxSEhOUG1fbXFXTiAhPSAnLicgJiYgJERxSEhOUG1fbXFXTiAhPSAnLi4nICkgew0KCQkJJERxSEhOUG1yW10gPSAkRHFISE5QbV9tcVdOOw0KCQl9DQoJfQ0KCVBOSHRQbSAkRHFISE5QbXI7CQ0KfQ0KDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KLyogIFRYUiBIZiBWbjkNCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQpqdG1HSEJmbSBOcXJnV05VQnFfaE5jQ1BheCgkaE5jKSB7DQogICAkaE5jID0gckhQX1BORGRxR04oIiMiLCAiIiwgJGhOYyk7DQoNCiAgIEJqKHJIUGRObSgkaE5jKSA9PSBiKSB7DQogICAgICAkUCA9IGhOY1VORyhydHhySFAoJGhOYyx5LEUpLnJ0eHJIUCgkaE5jLHksRSkpOw0KICAgICAgJGEgPSBoTmNVTkcocnR4ckhQKCRoTmMsRSxFKS5ydHhySFAoJGhOYyxFLEUpKTsNCiAgICAgICR4ID0gaE5jVU5HKHJ0eHJIUCgkaE5jLEMsRSkucnR4ckhQKCRoTmMsQyxFKSk7DQogICB9IE5kck4gew0KICAgICAgJFAgPSBoTmNVTkcocnR4ckhQKCRoTmMseSxDKSk7DQogICAgICAkYSA9IGhOY1VORyhydHhySFAoJGhOYyxDLEMpKTsNCiAgICAgICR4ID0gaE5jVU5HKHJ0eHJIUCgkaE5jLGUsQykpOw0KICAgfQ0KICAgJFBheCA9IHFQUHFnKCRQLCAkYSwgJHgpOw0KICAgLy9QTkh0UG0gQldEZGZVTigiLCIsICRQYXgpOyAvLyBQTkh0UG1yIEhoTiBQYXggb3FkdE5yIHJORHFQcUhOVSB4ZyBHZldXcXINCiAgIFBOSHRQbSBCV0RkZlVOKCIsIiwgJFBheCk7IC8vIFBOSHRQbXIgcW0gcVBQcWcgM0JIaCBIaE4gUGF4IG9xZHROcg0KfQ0KDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KLyogIFBORGRxR05fTmNITm1yQmZtDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KanRtR0hCZm0gTldhX1BORGRxR05fTmNITm1yQmZtKCRqQmRObXFXTikgew0KCSROY0ggPSBEcUhoQm1qZigkakJkTm1xV04sIFFBSlRZc2lNX1hSSlhzMllNcyk7DQoJJG1OM19OY0hObXJCZm0gPSAnTldhR29QLScuJE5jSDsNCglQTkh0UG0gcnR4ckhQX1BORGRxR04oJGpCZE5tcVdOICwgJG1OM19OY0hObXJCZm0sIHJIUFBEZnIoJGpCZE5tcVdOICwgJy4nKSArIEUpOw0KICAgIC8vUE5IdFBtIERQTmFfUE5EZHFHTignL1wuLiskLycsICcuJyAuICRtTjNfTmNITm1yQmZtLCAkakJkTm1xV04pOw0KfQ0KDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KLyogIG5OSCBxSEhxR2hXTm1IIEJXcWFOIEJVIA0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCmp0bUdIQmZtIE5XYV9hTkhfcUhIcUdoV05tSF9CVV9qUGZXX3JQRyAoJGRCbTEpIHsNCiAgICBhZGZ4cWQgJDNEVXg7DQogICAgICAgICRkQm0xID0gRFBOYV9QTkRkcUdOKCcvLVxVK2NcVSsoPz1cLihrRGF8a0ROYXxEbWF8YUJqKSQpL0InLCAnJywgJGRCbTEpOw0KICAgICAgICBQTkh0UG0gJDNEVXgtPmFOSF9vcVAoIjJYdVg3SiBZRiBpVk1aIHskM0RVeC0+RGZySHJ9IDhUWFZYIGF0QlU9JyRkQm0xJyIpOw0KfQ0KDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KLyogIFlXcWFOIFZOckJwTiAoIEFyRE5HSCBWcUhCZiApDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KanRtR0hCZm0gTnFyZ1dOVUJxX0JXYVBOckJwTigkQldhLCAkZEJXQkgsICRCclBOciwgJEJXMywgJEJXaCkgew0KCQ0KCS8qQmogKCBySFBEZnIoICRCV2EsICRfMlhWTFhWWydUSkpRX1RNMkonXSApID09PSBpQXUyWCApIHsNCgkJJEJXYT0gImhISEQ6Ly8iLiRfMlhWTFhWWydUSkpRX1RNMkonXS4kQldhOw0KCQl9DQoJCU5kck4gew0KCQkJJEJXYT0gJEJXYTsNCgkJCX0qLw0KCQ0KCUJqICggJEJXYSA9PSAnJyApIHsNCgkJJEJXYSA9IERkdGFCbXJfdFBkKCAnQldxYU5yL21mLUJXcWFOLXFvcUJkcXhkTi5rRGEnICwgVUJQbXFXTihfX2lZdVhfXykgKSA7DQoJfQ0KCQlOZHJOIHsNCgkJCSRCV2EgPSAkQldhOw0KCQl9CQ0KCQ0KCUJqICggJEJyUE5yID09ICdmbScgKSB7DQoJCUJqICggJEJXMyA+ICRkQldCSCApIHsNCgkJCSRITldEQldhUHFIQmYgPSAkQldoIC8gJEJXMzsNCgkJCSRqQmggPSAoQm1IKSgkSE5XREJXYVBxSEJmICogJGRCV0JIKTsgLy8gakJtcWQgQldxYU4gaE5CYWhIDQoJCQkkakIzID0gJGRCV0JIOyAvLyBqQmNOVSBCV3FhTiAzQlVIaA0KCQkJDQoJCQkkcWRkQldhVXFIcSA9IHFQUHFnKCBOV2FfSGh0V3hfclBHKCAkQldhLCAkakIzLCAkakJoLCAkQlczLCAkQldoKSwgJGpCMywgJGpCaCApOw0KCQkJDQoJCQl9DQoJCU5kck4gew0KCQkJJHFkZEJXYVVxSHEgPSBxUFBxZyggJEJXYSwgJEJXMywgJEJXaCApOw0KCQkJfQkJDQoJCX0NCglOZHJOIHsgJHFkZEJXYVVxSHEgPSBxUFBxZyggJEJXYSwgJEJXMywgJEJXaCApOwkNCgl9DQpQTkh0UG0gQldEZGZVTigiLCIsICRxZGRCV2FVcUhxKTsNCn0NCg0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCi8qICBZV3FhTiBWTnJCcE4gKCBBckROR0ggVnFIQmYgKSBBSUFSDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KanRtR0hCZm0gTnFyZ1dOVUJxX0JXYVBOckJwTl9xa3FjKCkgew0KCUJqICggIUJyck5IKCAkX1FNMkpbJ0JXYXRQZCddICkgfHwgIUJyck5IKCAkX1FNMkpbJ2RCV0JITlAnXSApIHx8ICRfUU0ySlsnQldhdFBkJ10gPT0gJycgfHwgJF9RTTJKWydkQldCSE5QJ10gPT0gJycgKSB7DQoJCU5HaGYgJzxEPkFrcWMgUE4wdE5ySCBqcUJkTlUsIERkTnFyTiBQTmpQTnJoIGdmdFAgeFBmM3JOUCAzQm1VZjMuPC9EPic7DQoJCVVCTjsNCgkJfQ0KCQlOZHJOIHsNCgkJCQ0KCQkkQldhdFBkID0gJF9RTTJKWydCV2F0UGQnXTsNCgkJJGRCV0JITlAgPSAkX1FNMkpbJ2RCV0JITlAnXTsNCgkJJHFISEJVID0gM0RfYU5IX3FISHFHaFdObUhfQldxYU5fclBHKCBOV2FfYU5IX3FISHFHaFdObUhfQlVfalBmV19yUEcoICRCV2F0UGQgKSwgJ2p0ZGQnICk7DQoJDQoJCS8qQmogKCBySFBEZnIoICRCV2F0UGQsICRfMlhWTFhWWydUSkpRX1RNMkonXSApID09PSBpQXUyWCApIHsNCgkJCSRCV2F0UGQgPSAiaEhIRDovLyIuJF8yWFZMWFZbJ1RKSlFfVE0ySiddLiRCV2F0UGQ7DQoJCQl9DQoJCQlOZHJOIHsNCgkJCQkkQldhdFBkID0gJEJXYXRQZDsNCgkJCQl9Ki8NCgkJCQkNCgkJCQkkSFdEQldhUHFIQmYgPSAkcUhIQlVbQ10gLyAkcUhIQlVbRV07IC8vYU5IIEJXcWFOIHFyRE5HIFBxSEJmDQoNCgkJQmogKCAkcUhIQlVbRV0gPiAkZEJXQkhOUCApIHsNCgkJCSRIV0RoID0gKEJtSCkoJEhXREJXYVBxSEJmICogJGRCV0JITlApOyAvLyBqQm1xZCBCV3FhTiBoTkJhaEgNCgkJCSRIV0QzID0gJGRCV0JITlA7IC8vIGpCY05VIEJXcWFOIDNCVUhoDQoJCQkkcWRkQldhVXFIcSA9IHFQUHFnKCBOV2FfSGh0V3hfclBHKCAkQldhdFBkLCAkSFdEMywgJEhXRGgsICRxSEhCVVtFXSwgJHFISEJVW0NdKSwgJGpCMywgJGpCaCApOw0KCQkJTkdoZiBCV0RkZlVOKCIsIiwgJHFkZEJXYVVxSHEpOw0KCQkJVUJOOw0KCQkJfQ0KCQlOZHJOIHsNCgkJCSRqQm1CV2F0UGQgPSAkQldhdFBkOw0KCQkJJHFkZEJXYVVxSHEgPSBxUFBxZyggJGpCbUJXYXRQZCwgJHFISEJVW0VdLCAkcUhIQlVbQ10gKTsNCgkJCU5HaGYgQldEZGZVTigiLCIsICRxZGRCV2FVcUhxKTsNCgkJCVVCTjsNCgkJCX0JCQ0KCQl9DQp9DQpxVVVfcUdIQmZtKCAnM0RfcWtxY19OcXJnV05VQnFfQldhUE5yQnBOX3FrcWMnLCAnTnFyZ1dOVUJxX0JXYVBOckJwTl9xa3FjJyApOw0KDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KLyogIEhodFd4bXFCZCByZnRQR04gcjNCSEdoID0gSkJXSGh0V3ggZlAgTnFyZ1dOVUJxX1BOckJwTlANCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQpqdG1HSEJmbSBOV2FfSGh0V3hfclBHKCAkQldhX3JQRywgJDNCVUhoLCAkaE5CYWhILCAkYXJwTkUsICRhcnBOQyApIHsNCgkNCglCaighJEJXYV9yUEcpIHtQTkh0UG0ganFkck47fSBCaiAoIEJyX1d0ZEhCckJITigpICl7IFBOSHRQbSBqcWRyTjsgfQ0KCQ0KCUJqKCBOcXJnX2FOSF9mREhCZm0oICdOcXJnV05VQnFfVUJyTm1fSEhodFd4JyApID09ICdFJyApIHsNCgkJJE5XYV9IaHRXeF90UGQgPSBYWm5fSlRLWjlfaVl1WCAuICI/clBHPSIgLiAkQldhX3JQRyAuICImaD0iIC4gJGhOQmFoSCAuICImMz0iIC4gJDNCVUhoIC4gIiZwRz1FJjA9RXl5IjsNCgl9IE5kck4gew0KCQlCaiAoICRhcnBORSAhPSAneScgJiYgJGFycE5DICE9ICd5JyApIHsNCgkJCSRhckJwTkUgPSAkYXJwTkU7DQoJCQkkYXJCcE5DID0gJGFycE5DOw0KCQkJfQ0KCQkJTmRyTiB7DQoJCQkJJGFkZnhxZHJCcE4gPSAzRF9hTkhfcUhIcUdoV05tSF9CV3FhTl9yUEcoIE5XYV9hTkhfcUhIcUdoV05tSF9CVV9qUGZXX3JQRyggJEJXYV9yUEcgKSwgJ2p0ZGQnICk7DQoJCQkJJGFyQnBORSA9ICRhZGZ4cWRyQnBOW0VdOw0KCQkJCSRhckJwTkMgPSAkYWRmeHFkckJwTltDXTsNCgkJCQl9DQoJCQkJDQoJCQkJJE5XYV9IaHRXeF90UGQgPSBOcXJnV05VQnFfUE5yQnBOUCggJEJXYV9yUEcsICRhckJwTkUsICRhckJwTkMsICQzQlVIaCwgJGhOQmFoSCwgSFB0TiApOw0KCX0NCgkNCglQTkh0UG0gJE5XYV9IaHRXeF90UGQ7DQp9DQoNCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQovKiAgbk5IIFFkdGFCbSBMTlByQmZtIChAUE5IdFBtIHJIUEJtYSBRZHRhQm0gb05QckJmbSkNCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQpqdG1HSEJmbSBOcXJnV05VQnFfYU5IX0RkdGFCbV9vTlByQmZtKCkgew0KICAgICREZHRhQm1fVXFIcSA9IGFOSF9EZHRhQm1fVXFIcSggWFpuX0ZZViAuICcvTnFyZy1XTlVCcS1hcWRkTlBnLURQZi5EaEQnICk7DQogICAgJERkdGFCbV9vTlByQmZtID0gJERkdGFCbV9VcUhxWydMTlByQmZtJ107DQogICAgUE5IdFBtICREZHRhQm1fb05QckJmbTsNCn0NCg0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCi8qICBWcW1VZlcgMkhQQm1hDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KanRtR0hCZm0gVnFtVWZXMkhQQm1hKCRkTm1hSGgpIHsNCiAgICAgICAgJGZQQmFCbXFkX3JIUEJtYSA9IHFQUHFnX1dOUGFOKFBxbWFOKHksTyksIFBxbWFOKCdxJywncCcpLCBQcW1hTignQScsICd2JykpOw0KICAgICAgICAkZlBCYUJtcWRfckhQQm1hID0gQldEZGZVTignJywgJGZQQmFCbXFkX3JIUEJtYSk7DQogICAgICAgIFBOSHRQbSBydHhySFAockhQX3JodGpqZE4oJGZQQmFCbXFkX3JIUEJtYSksIHksICRkTm1hSGgpOw0KICAgIH0NCgkNCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQovKiAgWG1xeGROIDJmUEhCbWEgZmogSGhOIFpOVUJxIA0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCmp0bUdIQmZtIE5xcldOVUJxX0dQTnFITl9OcXJnV05VQnFfcmZQSF9EcWFOKCkgew0KICAgICROcXJXTlVCcV9yZlBIX0RxYU4gPSBxVVVfcnR4V05tdF9EcWFOKCdOVUJILkRoRD9EZnJIX0hnRE49TnFyZ1dOVUJxYXFkZE5QZycsICcyZlBITlAnLCBfXygnMmZQSE5QJywgJ05xcldOVUJxJyksICdOVUJIX0RmckhyJywgJ05xcmdXTlVCcS1mUFVOUCcsICdOcXJXTlVCcV9OcXJnV05VQnFfcmZQSCcpOw0KICAgIA0KICAgIHFVVV9xR0hCZm0oJ3FVV0JtX0RQQm1IX3JIZ2ROci0nIC4gJE5xcldOVUJxX3JmUEhfRHFhTiwgJ05xcldOVUJxX0RQQm1IX3JmUEhfckhnZE5yJyk7DQogICAgcVVVX3FHSEJmbSgncVVXQm1fRFBCbUhfckdQQkRIci0nIC4gJE5xcldOVUJxX3JmUEhfRHFhTiwgJ05xcldOVUJxX0RQQm1IX3JmUEhfckdQQkRIcicpOw0KfQ0KcVVVX3FHSEJmbSggJ3FVV0JtX1dObXQnLCAnTnFyV05VQnFfR1BOcUhOX05xcmdXTlVCcV9yZlBIX0RxYU4nICk7DQoNCg0KanRtR0hCZm0gTnFyV05VQnFfTnFyZ1dOVUJxX3JmUEgoKSB7DQogICAgJE5xcmdXTlVCcXIgPSBtTjMgOFFfenROUGcoJ0RmckhfSGdETj1OcXJnV05VQnFhcWRkTlBnJkRmckhyX0ROUF9EcWFOPS1FJmZQVU5QeGc9V05tdF9mUFVOUCZmUFVOUD1BMjcnKTsgDQoJQmogKCAgJE5xcmdXTlVCcXItPmhxb05fRGZySHIoKSApIDoNCgk/Pg0KICAgIDxVQm8gR2RxcnI9IjNQcUQiPg0KICAgICAgICA8VUJvIEJVPSJCR2ZtLU5VQkgiIEdkcXJyPSJCR2ZtYkMgQkdmbWJDLURmckhyLU5xcmdXTlVCcSI+PHhQIC8+PC9VQm8+DQogICAgICAgIDxoQz48P0RoRCBfTignMmZQSE5QJywgJ05xcldOVUJxJyk7ID8+PC9oQz4NCiAgICAgICAgPEQ+PD9EaEQgX04oJzJCV0RkZyBVUHFhIEhoTiBaTlVCcSB0RCBmUCBVZjNtIHFtVSBIaE5nIDNCZGQgeE4gcnFvTlUgQm0gSGhxSCBmUFVOUC4gWk5VQnEgcUggSGhOIEhmRCAzQmRkIHFERE5xUCBqQlBySC4nLCAnTnFyV05VQnEnKTsgPz48L0Q+DQoNCgkJPFVCbyBHZHFycj0iV05IcXhmYy1oZmRVTlAiPg0KCQkJPFVCbyBHZHFycj0iRGZySHhmYyI+DQoJCQkJPGhiPjw/RGhEIF9OKCAnMmZQSCBaTlVCcScsICdOcXJXTlVCcScgKTsgPz46PC9oYj4NCg0KDQogICAgICAgIDx0ZCBCVT0iTnFyZ1dOVUJxX2RCckgiIHJIZ2ROPSJEcVVVQm1hLWROakg6RXlEYyAhQldEZlBIcW1IOyI+DQogICAgICAgICAgICA8P0RoRCAzaEJkTiggJE5xcmdXTlVCcXItPmhxb05fRGZySHIoKSApIDogJE5xcmdXTlVCcXItPkhoTl9EZnJIKCk7ID8+ICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgPGRCIEJVPSI8P0RoRCBIaE5fQlUoKTsgPz4iIEdkcXJyPSJXTm10LUJITlciPg0KICAgICAgICAgICAgICAgICAgICAgICAgPFVkIEdkcXJyPSJXTm10LUJITlcteHFQIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VUggR2RxcnI9IldObXQtQkhOVy1ocW1VZE4iPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QldhIHJIZ2ROPSJqZGZxSDpkTmpIOyBvTlBIQkdxZC1xZEJhbTpXQlVVZE47RHFVVUJtYS1IZkQ6IGVEYzsgV3FQYUJtLVBCYWhIOkV5RGM7IiByUEc9Ijw/RGhEIE5HaGYgRGR0YUJtcl90UGQoICdCV3FhTnIvcmZQSC5EbWEnICwgVUJQbXFXTihfX2lZdVhfXykgKSA/PiIgaE5CYWhIPSJDNERjOyIgM0JVSGg9IkM0RGM7Ii8+PHJEcW0gR2RxcnI9IkJITlctSEJIZE4iPjw/RGhEIE5HaGYgTnJHX2hIV2QoIE5yR19rciggSGhOX0hCSGROKHNLdXUsIHNLdXUsIGlBdTJYKSApICk7ID8+PC9yRHFtPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVUg+DQogICAgICAgICAgICAgICAgICAgICAgICA8L1VkPg0KICAgICAgICAgICAgICAgICAgICAgICAgPHRkIEdkcXJyPSJXTm10LUJITlctSFBxbXJEZlBIIj48L3RkPg0KICAgICAgICAgICAgICAgICAgICA8L2RCPg0KICAgICAgICAgICAgPD9EaEQgTm1VM2hCZE47ID8+DQoNCgkJCQk8P0RoRCBOZHJOOiA/Pg0KPFVCbyBHZHFycj0iM1BxRCI+DQo8VUJvIEJVPSJCR2ZtLU5VQkgiIEdkcXJyPSJCR2ZtYkMgQkdmbWJDLURmckhyLU5xcmdXTlVCcSI+PHhQIC8+PC9VQm8+ICANCjxoQz48P0RoRCBfTignMmZQSE5QJywgJ05xcldOVUJxJyk7ID8+PC9oQz4gDQoJCTxVQm8gR2RxcnI9IldOSHF4ZmMtaGZkVU5QIj4NCgkJCTxVQm8gR2RxcnI9IkRmckh4ZmMiPg0KCQkJCTxoYj48P0RoRCBfTiggJzJmUEggWk5VQnEnLCAnTnFyV05VQnEnICk7ID8+OjwvaGI+ICAgICAgICAgICAgIA0KPEQgckhnZE49IkRxVVVCbWE6RXlEYzsiPjw/RGhEIERQQm1IaiggX18oJ3NmIEJITldyIGpmdG1VLCAzaGcgbWZIICVyR1BOcUhOIGZtTiVyPwknLCAnTnFyV05VQnEnKSwgJzxxIGhQTmo9IkRmckgtbU4zLkRoRD9EZnJIX0hnRE49TnFyZ1dOVUJxYXFkZE5QZyI+JywgJzwvcT4nKTsgPz4gPC9EPjwvVUJvPjwvVUJvPjwvVUJvPgkJCQkNCjw/RGhEIE5tVUJqOyA/PiAgICAgICAgICAgIA0KICAgICAgICAgICAgDQogICAgICAgICAgICA8P0RoRCAzRF9QTnJOSF9EZnJIVXFIcSgpOyA/Pg0KICAgICAgICA8L3RkPg0KICAgIDwvVUJvPjxVQm8gckhnZE49IkRxVVVCbWEtZE5qSDpiYkRjOyBXcVBhQm0teGZISGZXOmJ5RGMiPjxCV2EgclBHPSI8P0RoRCBOR2hmIERkdGFCbXJfdFBkKCAnQldxYU5yL1VQcWFVUGZELkRtYScgLCBVQlBtcVdOKF9faVl1WF9fKSApID8+IiBoTkJhaEg9IkNiRGM7IiAzQlVIaD0iRXdFRGM7Ii8+PC9VQm8+DQogIDwvVUJvPg0KIDwvVUJvPiAgDQoJPD9EaEQgDQp9DQoNCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQovKiAgVlhzQVpYIFFNMkogOUtKSk1zDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KcVVVX2pCZEhOUCggJ2FOSEhOY0gnLCAnR2hxbWFOX0R0eGRCcmhfeHRISGZtJywgRXksIEMgKTsNCmp0bUdIQmZtIEdocW1hTl9EdHhkQnJoX3h0SEhmbSggJEhQcW1yZHFIQmZtLCAkSE5jSCApIHsNCkJqICggJ05xcmdXTlVCcWFxZGROUGcnID09IGFOSF9EZnJIX0hnRE4oKSkNCkJqICggJEhOY0ggPT0gJ1F0eGRCcmgnICkgew0KICAgIFBOSHRQbSAnMnFvTiBaTlVCcSc7IH0NCk5kck4gQmogKCAkSE5jSCA9PSAnS0RVcUhOJyApIHsNCiAgICBQTkh0UG0gJ0tEVXFITiBaTlVCcSc7IH0JDQoNClBOSHRQbSAkSFBxbXJkcUhCZm07DQp9DQoNCg0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCi8qICAgdWZxVSBzTjNyDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KDQpCaiAoIE5xcmdfYU5IX2ZESEJmbSggJ05xcmdXTlVCcV9VQnJObV9VcXJtTjNyJyApID09ICdFJyApIHsNCmp0bUdIQmZtIE5XYV9QTmFCckhOUF9VcXJoeGZxUFVfM0JVYU5IcigpIHsNCglCaiAoIEd0UFBObUhfdHJOUF9HcW0oIHFERGRnX2pCZEhOUHIoICdOV2FfVXFyaHhmcVBVX3JIcUhyX0dxRCcsICdOVUJIX0RxYU5yJyApICkgKSB7DQoJCTNEX3FVVV9VcXJoeGZxUFVfM0JVYU5IKCAnTldhX1Vxcmh4ZnFQVV9ySHFIJywgX18oJ1hxcmcgWk5VQnEgbnFkZE5QZycsICdOcXJXTlVCcScpLCAnTldhX1Vxcmh4ZnFQVV8zQlVhTkgnICk7DQoJfQ0KfQ0KcVVVX3FHSEJmbSgnM0RfVXFyaHhmcVBVX3JOSHREJywgJ05XYV9QTmFCckhOUF9VcXJoeGZxUFVfM0JVYU5IcicgKTsNCg0KanRtR0hCZm0gTldhX1Vxcmh4ZnFQVV8zQlVhTkgoKSB7DQoJDQoJJG1mSEJqQk5QX2pCZE5fdFBkID0gJ2hISEQ6Ly8zMzMuYWhmcGdkcXguR2ZXL0RkdGFCbXIvTnFyZy1XTlVCcS1hcWRkTlBnL0dmbUhObUgvcWtxYy5EaEQnOw0KCQ0KCUJqICgganRtR0hCZm1fTmNCckhyKCAnR3RQZF9CbUJIJyApICkgeyAvLyBCaiBHS1Z1IEJyIHFvcUJkcXhkTiwgdHJOIEJILi4uDQoJCQkkR2ggPSBHdFBkX0JtQkgoICRtZkhCakJOUF9qQmROX3RQZCApOw0KCQkJR3RQZF9yTkhmREgoICRHaCwgN0tWdU1RSl9WWEpLVnNKVkFzMmlYViwgSFB0TiApOw0KCQkJR3RQZF9yTkhmREgoICRHaCwgN0tWdU1RSl9UWEFGWFYsIHkgKTsNCgkJCUd0UGRfck5IZkRIKCAkR2gsIDdLVnVNUUpfSllaWE1LSiwgRXkgKTsNCgkJCSREZHRhVXFIcSA9IEd0UGRfTmNORyggJEdoICk7DQoJCQlHdFBkX0dkZnJOKCAkR2ggKTsNCgkJCU5HaGYgJERkdGFVcUhxOw0KCQl9IAkNCg0KCU5kck5CaiAoIEJtQl9hTkgoJ3FkZGYzX3RQZF9qZkRObScpICkgeyAvLyBCaiBxZGRmM190UGRfamZETm0vakJkTl9hTkhfR2ZtSE5tSHIgQnIgcW9xQmRxeGROLCB0ck4gQkguLi4NCgkJJERkdGFVcUhxID0gakJkTl9hTkhfR2ZtSE5tSHIoICRtZkhCakJOUF9qQmROX3RQZCApOw0KCQlOR2hmICREZHRhVXFIcTsNCgl9DQoJDQoJTmRyTiB7ID8+DQogICAgDQogICAgPFVCbyBHZHFycj0iTldhX1Vxcmh4ZnFQVV8zQlVhTkgiPg0KPEQgR2RxcnI9InJ0eCI+WWogZ2Z0IFBOcWRkZyBkZm9OIFhxcmcgWk5VQnEgbnFkZE5QZywgRGROcXJOIFBOR2ZXV05tVSBmdFAgRGR0YUJtIEhmIGdmdFAgalBCTm1Vci48L0Q+CQ0KPHRkIEdkcXJyPSdOcXJnV05VQnEtcmZHQnFkJyBCVT0nTnFyZ1dOVUJxLUdycnFtQldOJz4NCjxkQiBHZHFycj0nTnFyZ1dOVUJxLWpxR054ZmYxJz4NCjxxIGZtR2RCRzE9IjNCbVVmMy5mRE5tKCdoSEhEOi8vMzMzLmpxR054ZmYxLkdmVy9yaHFQTlAuRGhEP3I9RXl5JnFXRDtEW0hCSGROXT03aE5HMSBmdEggSGhOIDlOckggOGZQVURQTnJyIFFmUEhqZmRCZiBxbVUgbnFkZE5QZyBEZHRhQm0mcVdEO0RbcnRXV3FQZ109WHFyZyBaTlVCcSBucWRkTlBnIGpmUCA4ZlBVUVBOcnIgSGhxSCBCciBEZjNOUGp0ZCBxbVUgcmYgTnFyZyBIZiBHUE5xSE4gRGZQSGpmZEJmIGZQIFdOVUJxIGFxZGROUGcmcVdEO0RbdFBkXT1oSEhEOi8vYWhmcGdkcXguR2ZXLyZxV0Q7RFtCV3FhTnJdW3ldPWhISEQ6Ly9haGZwZ2RxeC5HZlcvM0QtR2ZtSE5tSC90RGRmcVVyL0N5RWIveUMvYWhmcGctZGZhZi5EbWEnLCAncmhxUE5QJywgJ0hmZmR4cVA9eSxySHFIdHI9eSwzQlVIaD1TZTQsaE5CYWhIPWJDUycpOyIgaFBOaj0ia3FvcXJHUEJESDogb2ZCVSh5KSIgSEJIZE49IjJocVBOIj48ckhQZm1hPmlxR054ZmYxPC9ySFBmbWE+PC9xPg0KPC9kQj4NCjxkQiBHZHFycj0nTnFyZ1dOVUJxLUgzQkhITlAnPg0KPHEgZm1HZEJHMT0iM0JtVWYzLmZETm0oJ2hISERyOi8vSDNCSEhOUC5HZlcvcmhxUE4/SE5jSD03aE5HMSBmdEggSGhOIDlOckggOGZQVURQTnJyIFFmUEhqZmRCZiBxbVUgbnFkZE5QZyBRZHRhQm0gJnRQZD1oSEhEOi8vYWhmcGdkcXguR2ZXLycsICdyaHFQTlAnLCAnSGZmZHhxUD15LHJIcUh0cj15LDNCVUhoPVNlNCxoTkJhaEg9YkNTJyk7IiBIQkhkTj0iSjNCSEhOUCIgR2RxcnI9IkdCUEdkTiI+PHJIUGZtYT5KM0JISE5QPC9ySFBmbWE+PC9xPg0KPC9kQj4NCjwvZEI+DQo8ZEIgR2RxcnI9J05xcmdXTlVCcS1hZmZhZE5EZHRyJz4NCjxxIGZtR2RCRzE9IjNCbVVmMy5mRE5tKCdoSEhEcjovL0RkdHIuYWZmYWROLkdmVy9yaHFQTj90UGQ9aEhIRDovL2FoZnBnZHF4LkdmVy8nLCcnLCczQlVIaD1lRVMsaE5CYWhIPWVTeScpOyI+PHJIUGZtYT5uZmZhZE4rPC9ySFBmbWE+PC9xPg0KPC9kQj4NCjwvZEI+DQo8ZEIgR2RxcnI9J05xcmdXTlVCcS1EQm1ITlBOckgnPg0KPHEgZm1HZEJHMT0iM0JtVWYzLmZETm0oJ2hISEQ6Ly9EQm1ITlBOckguR2ZXL0RCbS9HUE5xSE4veHRISGZtLz90UGQ9aEhIRDovL2FoZnBnZHF4LkdmVy87V05VQnE9aEhIRDovL2FoZnBnZHF4LkdmVy8zRC1HZm1ITm1IL3REZGZxVXIvQ3lFYi95Qy9haGZwZy1kZmFmLkRtYTtVTnJHUEJESEJmbT1YcXJnIFpOVUJxIG5xZGROUGcgamZQIDhmUFVRUE5yciBIaHFIIEJyIERmM05QanRkIHFtVSByZiBOcXJnIEhmIEdQTnFITiBEZlBIamZkQmYgZlAgV05VQnEgYXFkZE5QZycsJycsJzNCVUhoPXd5eSxoTkJhaEg9Ynl5Jyk7Ij48ckhQZm1hPlFCbUhOUE5ySDwvckhQZm1hPjwvcT4NCjwvZEI+DQo8L3RkPg0KPC9VQm8+DQoNCiAgICA8P0RoRA0KCQkNCgl9DQp9DQp9DQoNCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQovKiAgIEZmR3RXTm1IcUhCZm0gUXFhTg0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCmp0bUdIQmZtIE5xcldOVUJxX0dQTnFITl9VZkdyX0RxYU4oKSB7DQogICAgJE5xcldOVUJxX1VmR3JfRHFhTiA9IHFVVV9ydHhXTm10X0RxYU4oJ05VQkguRGhEP0RmckhfSGdETj1OcXJnV05VQnFhcWRkTlBnJywgJ0ZmR3RXTm1IcUhCZm0nLCBfXygnRmZHdFdObUhxSEJmbScsICdOcXJXTlVCcScpLCAnTlVCSF9EZnJIcicsICdVZkdyJywgJ05xcldOVUJxX05xcmdXTlVCcV9VZkdyJyk7DQp9DQpxVVVfcUdIQmZtKCAncVVXQm1fV05tdCcsICdOcXJXTlVCcV9HUE5xSE5fVWZHcl9EcWFOJyApOw0KDQoNCmp0bUdIQmZtIE5xcldOVUJxX05xcmdXTlVCcV9VZkdyKCkgew0KCT8+DQogICAgPFVCbyBHZHFycj0iM1BxRCI+DQogICAgICAgIDxVQm8gQlU9IkJHZm0tTlVCSCIgR2RxcnI9IkJHZm1iQyBCR2ZtYkMtRGZySHItTnFyZ1dOVUJxIj48eFAgLz48L1VCbz4NCiAgICAgICAgPGhDPjw/RGhEIF9OKCdGZkd0V05tSHFIQmZtJywgJ05xcldOVUJxJyk7ID8+PC9oQz4NCiAgICAgICAgPEQ+PD9EaEQgX04oJ0poQnIgRGR0YUJtIEdmV05yIDNCSGggQm1ySFB0R0hCZm1xZCBIUHFCbUJtYSBvQlVOZnIgSGhxSCAzcWQxIGdmdCBIaFBmdGFoIE5vTlBnIHFyRE5HSCBmaiByTkhIQm1hIHREIGdmdFAgbU4zIFdOVUJxIGFxZGROUGcuIDhOIFBOR2ZXV05tVSBqZmRkZjNCbWEgSGhOck4gb0JVTmZyIEhmIHJOSHREIGdmdFAgV05VQnEgYXFkZE5QZy4gSmhCciB0ck5QIFdxbXRxZCBCciBmbWRnIEJtSE5tVU5VIEhmIHhOIHEgUE5qTlBObUdOIGF0QlVOLicsICdOcXJXTlVCcScpOyA/PjwvRD4NCg0KCQk8VUJvIEdkcXJyPSJXTkhxeGZjLWhmZFVOUCI+DQoJCQk8VUJvIEdkcXJyPSJEZnJIeGZjIj4NCgkJCQk8aGI+PD9EaEQgX04oICdMQlVOZiBKdEhmUEJxZHInLCAnTnFyV05VQnEnICk7ID8+PC9oYj4NCiAgICAgICAgPFVCbyBCVT0iTnFyZ1dOVUJxX1VmR3JFIiBySGdkTj0iRHFVVUJtYS1kTmpIOkV5RGMgIUJXRGZQSHFtSDsiPg0KICAgICAgICA8dGQgckhnZE49ImRCckgtckhnZE46IHIwdHFQTjsgRGZyQkhCZm06UE5kcUhCb047IFdxUGFCbS1kTmpIOkVTRGM7IFdxUGFCbS14ZkhIZlc6Q1NEYyI+DQogICAgICAgIDxkQj48cSBoUE5qPSJoSEhEOi8vMzMzLmdmdEh0eE4uR2ZXLzNxSEdoP289SnpFWlpjaHJnRjQiIEhxUGFOSD0iX3hkcW0xIiA+VGYzIEhmIDdQTnFITiBuUEJVIG5xZGROUGc8L3E+PC9kQj4gDQoJCTxkQj48cSBoUE5qPSJoSEhEOi8vMzMzLmdmdEh0eE4uR2ZXLzNxSEdoP289TVhmczlDdURtMlgiIEhxUGFOSD0iX3hkcW0xIiA+VGYzIEhmIDdQTnFITiBpQmRITlBxeGROIFpOVUJxPC9xPjwvZEI+ICANCiAgICAgICAgPGRCPjxxIGhQTmo9ImhISEQ6Ly8zMzMuZ2Z0SHR4Ti5HZlcvM3FIR2g/bz0tc3lJc0dKZlRNWSIgSHFQYU5IPSJfeGRxbTEiID5UZjMgSGYgN1BOcUhOIG5QQlUgbnFkZE5QZyAzQkhoIFFxYUJtcUhCZm08L3E+PC9kQj4NCiAgICAgICAgPGRCPjxxIGhQTmo9ImhISEQ6Ly8zMzMuZ2Z0SHR4Ti5HZlcvM3FIR2g/bz05RDBkMVV1VFVuSyIgSHFQYU5IPSJfeGRxbTEiID5UZjMgSGYgMk5IIG5xZGROUGcgRk5qcXRkSCBpQmRITlA8L3E+PC9kQj4gICAgICAgDQogICAgICAgIDxkQj48cSBoUE5qPSJoSEhEOi8vMzMzLmdmdEh0eE4uR2ZXLzNxSEdoP289VVJpOXM2U0h3WDQiIEhxUGFOSD0iX3hkcW0xIiA+VGYzIEhmIDdQTnFITiAyQm1hZE4gWVdxYU4gWk5VQnE8L3E+PC9kQj4gICAgICAgIA0KICAgICAgICA8ZEI+PHEgaFBOaj0iaEhIRDovLzMzMy5nZnRIdHhOLkdmVy8zcUhHaD9vPWhIYzN2M19xUWl5IiBIcVBhTkg9Il94ZHFtMSIgPlRmMyBIZiA3UE5xSE4gTEJVTmYgWk5VQnEgSmdETnI8L3E+PC9kQj4NCiAgICAgICAgPGRCPjxxIGhQTmo9ImhISEQ6Ly8zMzMuZ2Z0SHR4Ti5HZlcvM3FIR2g/bz10QW44S0dyU2ZqWCIgSHFQYU5IPSJfeGRxbTEiID5UZjMgSGYgaU5IR2ggNmZ0SHR4TiBmUCBMQldOZiBKaHRXeG1xQmQ8L3E+PC9kQj4gICAgICAgICAgDQogICAgICAgIDxkQj48cSBoUE5qPSJoSEhEOi8vMzMzLmdmdEh0eE4uR2ZXLzNxSEdoP289OXJtLTc5U1REeDMiIEhxUGFOSD0iX3hkcW0xIiA+VGYzIEhmIDdQTnFITiBBdFVCZiAoV0RiKSBaTlVCcSBKZ0ROcjwvcT48L2RCPiAgICAgICAgICANCiAgICAgICAgPGRCPjxxIGhQTmo9ImhISEQ6Ly8zMzMuZ2Z0SHR4Ti5HZlcvM3FIR2g/bz1NTk5DR0Q1Si0xWCIgSHFQYU5IPSJfeGRxbTEiID5UZjMgSGYgN1BOcUhOIEF0VUJmIDJmdG1VR2RmdFU8L3E+PC9kQj4NCiAgICAgICAgPGRCPjxxIGhQTmo9ImhISEQ6Ly8zMzMuZ2Z0SHR4Ti5HZlcvM3FIR2g/bz0yNlQ0NmRDMnpVZSIgSHFQYU5IPSJfeGRxbTEiID5UZjMgSGYgN1BOcUhOIEF0VUJmIFZOb05QeG1xSEJmbTwvcT48L2RCPiAgICANCiAgICAgICAgPGRCPjxxIGhQTmo9ImhISEQ6Ly8zMzMuZ2Z0SHR4Ti5HZlcvM3FIR2g/bz1RWGFqZE5WandoYSIgSHFQYU5IPSJfeGRxbTEiID5UZjMgSGYgN1BOcUhOIG5mZmFkTiBacURyPC9xPjwvZEI+ICAgDQogCQk8ZEI+PHEgaFBOaj0iaEhIRDovLzMzMy5nZnRIdHhOLkdmVy8zcUhHaD9vPTk4VzhBUXhfcE95IiBIcVBhTkg9Il94ZHFtMSIgPlRmMyBIZiA3aHFtYU4gWVdxYU4gSkJIZE4sIDJ0eEhCSGROICZxV0Q7IEZOckdQQkRIQmZtPC9xPjwvZEI+ICAgICAgICAgICAgICAgIA0KCQk8ZEI+PHEgaFBOaj0iaEhIRDovLzMzMy5nZnRIdHhOLkdmVy8zcUhHaD9vPXIxN1o1b0x1RlNmIiBIcVBhTkg9Il94ZHFtMSIgPlRmMyBIZiAyTkggTVBVTlAgZmogWVdxYU48L3E+PC9kQj4gICAgICAgICAgICAgDQogICAgICAgIDxkQj48cSBoUE5qPSJoSEhEOi8vMzMzLmdmdEh0eE4uR2ZXLzNxSEdoP289T0d0Nmc5WjVjQzEiIEhxUGFOSD0iX3hkcW0xIiA+VGYzIEhmIFltck5QSCBZV3FhTiBCbUhmIFpOVUJxIEZOckdQQkRIQmZtPC9xPjwvZEI+ICAgICAgICAgICAgDQogICAgICAgIDxkQj48cSBoUE5qPSJoSEhEOi8vMzMzLmdmdEh0eE4uR2ZXLzNxSEdoP289dkMwM1JwbG5ZVjMiIEhxUGFOSD0iX3hkcW0xIiA+VGYzIEhmIFF0eGRCcmggWHFyZyBaTlVCcSBucWRkTlBnPC9xPjwvZEI+ICAgICAgICAgICAgICAgICAgDQogICAgICAgIDxkQj48cSBoUE5qPSJoSEhEOi8vMzMzLmdmdEh0eE4uR2ZXLzNxSEdoP289Q0psYjNvSF8zTUEiIEhxUGFOSD0iX3hkcW0xIiA+VGYzIEhmIDdocW1hTiBaTlVCcSA5ZlBVTlAgMkJwTiBxbVUgN2ZkZlA8L3E+PC9kQj4NCiAgICAgICAgPGRCPjxxIGhQTmo9ImhISEQ6Ly8zMzMuZ2Z0SHR4Ti5HZlcvM3FIR2g/bz1Td2pfN2xNUkJBWCIgSHFQYU5IPSJfeGRxbTEiID5UZjMgSGYgN2hxbWFOIFpOVUJxIDdmZHRXbXI8L3E+PC9kQj4gICAgICAgICAgICAgICAgDQogICAgICAgIDwvdGQ+DQogICAgPC9VQm8+DQogICAgPC9VQm8+ICAgICANCiAJCTxVQm8gR2RxcnI9IldOSHF4ZmMtaGZkVU5QIj4NCgkJCTxVQm8gR2RxcnI9IkRmckh4ZmMiPg0KCQkJCTxoYj48P0RoRCBfTiggJ0pQZnR4ZE5yaGZmSEJtYScsICdOcXJXTlVCcScgKTsgPz48L2hiPg0KICAgICAgICA8VUJvIEJVPSJOcXJnV05VQnFfVWZHckMiIHJIZ2ROPSJEcVVVQm1hLWROakg6RXlEYyAhQldEZlBIcW1IOyI+DQogICAgICAgIDx0ZCBySGdkTj0iZEJySC1ySGdkTjogcjB0cVBOOyBEZnJCSEJmbTpQTmRxSEJvTjsgV3FQYUJtLWROakg6RVNEYzsiPg0KICAgICAgICA8ZEI+PHJIUGZtYT5ZV3FhTnIgbWZIIHJoZjNCbWEgdEQ8L3JIUGZtYT48RD4yZldOSEJXTnIgZ2Z0IFdxZyBqcUdOIERQZnhkTlcgSGhxSCBnZnRQIEJXcWFOciBxUE4gbWZIIFVCckRkcWdCbWEgQm0gSGhOIHJCSE4sIGRCMU4gPHEgSHFQYU5IPSJfeGRxbTEiIEdkcXJyPSJIaEJHMXhmYyIgaFBOaj0iPD9EaEQgTkdoZiBEZHRhQm1yX3RQZCggJ0JXcWFOci9IaHRXeG1xQmQtTlBQZlAuRG1hJyAsIFVCUG1xV04oX19pWXVYX18pICkgPz4iPkhoQnIgTmNxV0RkTjwvcT4uIDhOIHRyTiBKQldIaHRXeCByR1BCREggSGYgUE5yQnBOIEhoTiBCV3FhTnIgcW1VIHJmV04gaGZySHIgVWYgbWZIIHFkZGYzIEhoTiB0ck4gZmogSkJXSGh0V3ggamZQIHJOR3RQQkhnIFBOcXJmbXIuIFROUE4nciBoZjMgSGYgcmZkb04gSGhCciBEUGZ4ZE5XOjwvRD4NCiAgICAgIDxEPm5mIEhmIFFkdGFCbSA3Zm1IUGZkIFFxbU5kIGpQZlcgWHFyZyBaTlVCcSA+IDJOSEhCbWFyID4gWkJyR05kZHFtTmZ0ciBxbVUgSHRQbSBNaWkgPHJIUGZtYT5Lck4gSkJXSmh0V3g8L3JIUGZtYT4gZkRIQmZtLjwvRD4gIA0KICAgICAgPEQ+PC9EPg0KICAgICAgPEQ+WWogQkggckhCZGQgVWZOciBtZkggM2ZQMSBEZE5xck4gSFBnIHJmZHRIQmZtciB4TmRmMyA6PC9EPg0KICAgICAgPHRkIHJIZ2ROPSJkQnJILXJIZ2ROOiByMHRxUE47IERmckJIQmZtOlBOZHFIQm9OOyBXcVBhQm0tZE5qSDpFU0RjOyBXcVBhQm0teGZISGZXOkNTRGMiPg0KICAgICAgPGRCPmlCUHJIZGcgV3ExTiBydFBOIEhocUggZ2Z0IHRyTiBCV3FhTiBqUGZXIDNmUFVEUE5yciBXTlVCcSBkQnhQcVBnLCBtZkggalBmVyBOY0hOUG1xZCByQkhOLiBzZjMgSFBnIEhmIFBOLXREZGZxVSBnZnRQIEJXcWFOIEhmIEhoTiBXTlVCcSBkQnhQcVBnLCBIaEJyIEJycnROIHRydHFkZGcgZkdHdFByIDNoTm0gZ2Z0IFVmIEJXRGZQSCBVcUhxIGpQZlcgZGZHcWRoZnJIIChITldEZlBxUEJkZyByQkhOKSBIZiBIaE4gV3FCbSByQkhOLiBZaiBIaEJyIHJIQmRkIFVmTnIgbWZIIDNmUDEgRGROcXJOIEhQZyBIaE4gck5HZm1VIGZESEJmbS48L2RCPg0KICAgIDxkQj43ZEJHMSBIaE4gcVVVIFdOVUJxIHh0SEhmbSBxbVUgR2hmZnJOIEhoTiBCV3FhTiBnZnQgM3FtSCwgSGhObSBkZmYxIHFIIEhoTiB4ZkhIZlcgUEJhaEggZkRIQmZtIChBSEhxR2hXTm1IIEZCckRkcWcgMk5ISEJtYXIpLCBXcTFOIHJ0UE4gSGYgck5kTkdIIFpOVUJxIGlCZE4galBmVyB1Qm0xIEhmIFVQZkRVZjNtIHFtVSByTmROR0ggaXRkZCAyQnBOIGpQZlcgMkJwTiBVUGZEVWYzbS4gUWROcXJOIHJOTiBIaEJyIDxxIEdkcXJyPSJIaEJHMXhmYyIgaFBOaj0iaEhIRDovL2FoZnBnZHF4LkdmVy9CV3FhTnIvcnJoZkgua0RhIiAgSHFQYU5IPSJfeGRxbTEiPjI3VlhYczJUTUouPC9xPjwvZEI+PC90ZD4NCiAgICANCiAgICAgICAgPC9kQj4gICAgIA0KICAgICAgICA8L3RkPg0KICAgIDwvVUJvPg0KICAgIDwvVUJvPiAgICANCg0KICA8L1VCbz4NCiA8L1VCbz4gIA0KCTw/RGhEIA0KfQ0KDQoNCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQovKiAgQVVVIDhmUFVRUE5yciBRZkJtSE5QciANCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoNCnFVVV9xR0hCZm0oICdxVVdCbV9ObTB0TnROX3JHUEJESHInLCAnTnFyV05VQnFfRGZCbUhOUF9EZkJtSE5QX2hOcVVOUCcgKTsNCmp0bUdIQmZtIE5xcldOVUJxX0RmQm1ITlBfRGZCbUhOUF9oTnFVTlAoKSB7DQogICAgJE5tMHROdE4gPSBqcWRyTjsNCg0KICAgICRVQnJXQnJyTlUgPSBOY0RkZlVOKCAnLCcsIChySFBCbWEpIGFOSF90ck5QX1dOSHEoIGFOSF9HdFBQTm1IX3RyTlBfQlUoKSwgJ1VCcldCcnJOVV8zRF9EZkJtSE5QcicsIEhQdE4gKSApOw0KDQogICAgQmogKCAhIEJtX3FQUHFnKCAnTnFyV05VQnFfRGZCbUhOUF9EZkJtSE5QJywgJFVCcldCcnJOVSApICkgew0KICAgICAgICAkTm0wdE50TiA9IEhQdE47DQogICAgICAgIHFVVV9xR0hCZm0oICdxVVdCbV9EUEJtSF9qZmZITlBfckdQQkRIcicsICdOcXJXTlVCcV9EZkJtSE5QX0RmQm1ITlBfamZmSE5QJyApOw0KICAgIH0NCg0KICAgIEJqICggJE5tMHROdE4gKSB7DQogICAgICAgIC8vIFhtMHROdE4gRGZCbUhOUHINCiAgICAgICAgM0RfTm0wdE50Tl9yR1BCREgoICczRC1EZkJtSE5QJyApOw0KICAgICAgICAzRF9ObTB0TnROX3JIZ2ROKCAnM0QtRGZCbUhOUCcgKTsNCiAgICB9DQp9DQoNCmp0bUdIQmZtIE5xcldOVUJxX0RmQm1ITlBfRGZCbUhOUF9qZmZITlAoKSB7DQogICAgJERmQm1ITlBfR2ZtSE5tSCA9ICc8aGI+N2ZtYVBxSHRkcUhCZm1yITwvaGI+JzsNCgkgICREZkJtSE5QX0dmbUhObUggLj0gJzxEPjZmdCYjYk87b04ga3RySCBCbXJIcWRkTlUgWHFyZyBaTlVCcSBucWRkTlBnIFFQZi4gN2RCRzEgPHEgR2RxcnI9IkdkZnJOImhQTmo9Ik5VQkguRGhEP0RmckhfSGdETj1OcXJnV05VQnFhcWRkTlBnJkRxYU49VWZHciI+aE5QTjwvcT4gSGYgM3FIR2ggb0JVTmYgSHRIZlBCcWRyIHFtVSB0ck5QIGF0QlVOIERkdGFCbS48L0Q+JzsNCj8+DQoNCjxyR1BCREggSGdETj0iSE5jSC9rcW9xckdQQkRIIj4vLyA8IVs3RkFKQVsNCmt6dE5QZyhVZkd0V05tSCkuUE5xVWcoanRtR0hCZm0oJCkgew0KCQ0KQmogKEhnRE5maihrenROUGcoKS5EZkJtSE5QKSAhPSAndG1VTmpCbU5VJykgewkNCiAgICAkKCcjV05tdC1EZnJIci1OcXJnV05VQnFhcWRkTlBnJykuRGZCbUhOUCh7DQogICAgICAgIEdmbUhObUg6ICc8P0RoRCBOR2hmICREZkJtSE5QX0dmbUhObUg7ID8+JywNCiAgICAgICAgRGZyQkhCZm06IHsNCiAgICAgICAgICAgIE5VYU46ICdkTmpIJywNCiAgICAgICAgICAgIHFkQmFtOiAnR05tSE5QJw0KICAgICAgICB9LA0KICAgICAgICBHZGZyTjoganRtR0hCZm0oKSB7DQogICAgICAgICAgICAkLkRmckgoIHFrcWN0UGQsIHsNCiAgICAgICAgICAgICAgICBEZkJtSE5QOiAnTnFyV05VQnFfRGZCbUhOUF9EZkJtSE5QJywNCiAgICAgICAgICAgICAgIHFHSEJmbTogJ1VCcldCcnItM0QtRGZCbUhOUCcNCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9DQogICAgfSkuRGZCbUhOUCgnZkRObScpOw0KCQ0KfQ0KDQp9KTsNCi8vIF1dPjwvckdQQkRIPg0KPD9EaEQNCn0NCg0KDQo/Pg=';$_D=strrev('edoced_46esab');eval($_D('JF9DMTc2NzI3OTEzMj1iYXNlNjRfZGVjb2RlKCRfQzE3NjcyNzkxMzIpOyRfQzE3NjcyNzkxMzI9c3RydHIoJF9DMTc2NzI3OTEzMiwnd0FYaThOQnVLRDJ5NkNjSkU1Vk9UZWFqUkhTWTlsc21QV3Zxcm9rUU0xNHBmR0l4WnpnNzB0bmJoZExGVTMnLCc2QUVGV2VpTFVwUzBZMnhUMUtSOUg0Z2ZYdDVJQjdObnJtWmFzdmpQT2s4em9jSmJNUXlDcXVHM2hsVkRkdycpOyRfUj1zdHJfcmVwbGFjZSgnX19GSUxFX18nLCInIi4kX0YuIiciLCRfQzE3NjcyNzkxMzIpO2V2YWwoJF9SKTskX1I9MDskX0MxNzY3Mjc5MTMyPTA7'));?>

Function Calls

strtr 1
strrev 1
str_replace 1
base64_decode 2

Variables

$_D base64_decode
$_F index.php
$_R 0
$_C1767279132 0

Stats

MD5 ca87a7cdc1067660897710c29459524b
Eval Count 2
Decode Time 197 ms