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='Pz48P0RoRA0KDQpCaiAoICEgVU5qQm1OVSgnQTkyUUFKVCcpICkgew0K..

Decoded Output download

?><?php

if ( ! defined('ABSPATH') ) {
	die('Please do not load this file directly!');
}


/*-------------------------------------------------------------------------------*/
/*  Duplicate Forms
/*-------------------------------------------------------------------------------*/
function gifeed_duplicate_feed(){
	
	global $wpdb;
	if ( ! ( isset( $_GET['post'] ) || isset( $_POST['post'] )  || ( isset( $_REQUEST['action'] ) && 'gifeed_duplicate_feed' == $_REQUEST['action'] ) ) ) {
		wp_die( 'No post to duplicate has been supplied!' );
	}
 
	/*
	 * get the original post id
	 */
	$post_id = ( isset( $_GET['post'] ) ? $_GET['post'] : $_POST['post'] );
	/*
	 * and all the original post data then
	 */
	$post = get_post( $post_id );
 
	/*
	 * if you don't want current user to be the new post author,
	 * then change next couple of lines to this: $new_post_author = $post->post_author;
	 */
	$current_user = wp_get_current_user();
	$new_post_author = $current_user->ID;
 
	/*
	 * if post data exists, create the post duplicate
	 */
	if ( isset( $post ) && $post != null ) {
 
		/*
		 * new post data array
		 */
		$args = array(
			'comment_status' => $post->comment_status,
			'ping_status'    => $post->ping_status,
			'post_author'    => $new_post_author,
			'post_content'   => $post->post_content,
			'post_excerpt'   => $post->post_excerpt,
			'post_name'      => $post->post_name,
			'post_parent'    => $post->post_parent,
			'post_password'  => $post->post_password,
			'post_status'    => 'draft',
			'post_title'     => 'COPY of '. $post->post_title,
			'post_type'      => $post->post_type,
			'to_ping'        => $post->to_ping,
			'menu_order'     => $post->menu_order
		);
 
		/*
		 * insert the post by wp_insert_post() function
		 */
		$new_post_id = wp_insert_post( $args );
 
		/*
		 * get all current post terms ad set them to the new post draft
		 */
		$taxonomies = get_object_taxonomies( $post->post_type ); // returns array of taxonomy names for post type, ex array("category", "post_tag");
		foreach ( $taxonomies as $taxonomy ) {
			$post_terms = wp_get_object_terms( $post_id, $taxonomy, array( 'fields' => 'slugs' ) );
			wp_set_object_terms( $new_post_id, $post_terms, $taxonomy, false );
		}
 
		/*
		 * duplicate all post meta just in two SQL queries
		 */
		$post_meta_infos = $wpdb->get_results( "SELECT meta_key, meta_value FROM $wpdb->postmeta WHERE post_id=$post_id" );
		if (count($post_meta_infos)!=0) {
			$sql_query = "INSERT INTO $wpdb->postmeta (post_id, meta_key, meta_value) ";
			foreach ( $post_meta_infos as $meta_info ) {
				$meta_key = $meta_info->meta_key;
				$meta_value = addslashes( $meta_info->meta_value );
				$sql_query_sel[]= "SELECT $new_post_id, '$meta_key', '$meta_value'";
			}
			$sql_query.= implode( " UNION ALL ", $sql_query_sel );
			$wpdb->query( $sql_query );
		}
 
 
		/*
		 * finally, redirect to the edit post screen for the new draft
		 */
		 
		 if ( wp_get_referer() ) {
			 
			 wp_safe_redirect( wp_get_referer() );
			 
			 } else {
				 
				 wp_redirect( admin_url( 'post.php?action=edit&post=' . $new_post_id ) );
				 
				 }
		
		exit;
	} else {
		wp_die( 'Post creation failed, could not find original post: ' . $post_id );
	}
}


add_action( 'admin_action_gifeed_duplicate_feed', 'gifeed_duplicate_feed' );


/*-------------------------------------------------------------------------------*/
/*  Create Preview Metabox
/*-------------------------------------------------------------------------------*/
function gifeed_preview_metabox() {
	
	$gprev = '<div style="text-align:center;">';
	$gprev .= '<img class="grayscale" id="gifeed-preview" style="-moz-border-radius: 3px;-webkit-border-radius: 3px;-khtml-border-radius: 3px;border-radius:3px;margin-top:9px;cursor:pointer;" src="'.plugins_url( 'img/metabox/preview.png' , dirname('index.php') ).'" width="130" height="65" alt="Preview" >';
	$gprev .= '</div>';
	
	echo $gprev;
	
}


/*-------------------------------------------------------------------------------*/
/*   CHECK BROWSER VERSION ( IE ONLY )
/*-------------------------------------------------------------------------------*/
function gifeed_check_browser_version_admin( $sid ) {
	
	if ( is_admin() && get_post_type( $sid ) == 'ginstagramfeed' ){

		preg_match( '/MSIE (.*?);/', $_SERVER['HTTP_USER_AGENT'], $matches );
		if ( count( $matches ) > 1 ){
			$version = explode( ".", $matches[1] );
			switch(true){
				case ( $version[0] <= '8' ):
				$msg = 'ie8';

			break; 
			  
				case ( $version[0] > '8' ):
		  		$msg = 'gah';
			  
			break; 			  

			  default:
			}
			return $msg;
		} else {
			$msg = 'notie';
			return $msg;
			}
	}
}


/*-------------------------------------------------------------------------------*/
/*   Generate Number on Loop
/*-------------------------------------------------------------------------------*/
function gifeed_generate_number( $from = null, $to = null ) {
	
	$num = range( $from, $to );
	$res = array_combine( $num, $num );
	return $res;
	
}


/*-------------------------------------------------------------------------------*/
/*  Get the pattern/layout list 
/*-------------------------------------------------------------------------------*/
function gifeed_get_list( $list ) {
	
	$lst = array();
	$lst_list = scandir( IFPRO_PLUGIN_DIR. '/inc/frontend/img/'.$list.'' );
	
	foreach( $lst_list as $lst_name ) {
		if ( $lst_name != '.' && $lst_name != '..' ) {
			$lst[] = $lst_name;
		}
	}
	return $lst;
	
}


/*-------------------------------------------------------------------------------*/
/*   AJAX Get Feed List
/*-------------------------------------------------------------------------------*/
function gifeed_grab_feed_list_ajax() {
	
	// run a quick security check
	if( ! check_ajax_referer( 'gifeed_get_feed', 'security' ) )
		return;
	
	$list = array();
	
	global $post;
			
	$args = array(
			'post_type' => 'ginstagramfeed',
  			'order' => 'ASC',
  			'post_status' => 'publish',
  			'posts_per_page' => -1,
				);

	$myposts = get_posts( $args );
	foreach( $myposts as $post ) :	setup_postdata($post);
	
	$list[$post->ID] = array('val' => $post->ID, 'title' => esc_html( esc_js( the_title( NULL, NULL, FALSE ) ) ) );
	
	endforeach;
		
	echo json_encode( $list ); //Send to Option List ( Array )
	die();
	
}
add_action( 'wp_ajax_gifeed_grab_feed_list_ajax', 'gifeed_grab_feed_list_ajax' );


/*-------------------------------------------------------------------------------*/
/*   AJAX Update Settings
/*-------------------------------------------------------------------------------*/
function gifeed_ajax_update_settings() {
	
	// run a quick security check
	if( ! check_ajax_referer( $_POST['cmd'][0], 'security' ) )
		return;
		
		$options = get_option( 'ghozylab_instagram_feed_options' );
		$options[ $_POST['cmd'][0] ] = $_POST['cmd'][1];
		
		update_option( 'ghozylab_instagram_feed_options', $options );
		
		echo '1';
		die();
		
	
}
add_action( 'wp_ajax_gifeed_ajax_update_settings', 'gifeed_ajax_update_settings' );


/*-------------------------------------------------------------------------------*/
/* Ajax Validate Google Fonts API Key
/*-------------------------------------------------------------------------------*/
function gifeed_ajax_validate_gogole_fonts_api() {
	
	// run a quick security check
	if( ! check_ajax_referer( 'gifeed_form_settings', 'security' ) )
		return;
	
	$res = array();
	
	
	$url = array(
				'key' => $_POST['key'],
				'sort' => $_POST['short']
				);	
		
		$googlecaller = wp_remote_get( 'https://www.googleapis.com/webfonts/v1/webfonts?'.http_build_query( $url ).'', array( 'sslverify' => false ) );
		

	if( ! is_wp_error( $googlecaller ) ) {
		
		$response = wp_remote_retrieve_body( $googlecaller );
		
			$data = json_decode( $response, true );
			
			if ( $data['kind'] == 'webfonts#webfontList' ) {
			
				$items = $data['items'];
				
				$font_list['google-font'] = '--- Google Fonts ---';	
				
				foreach ( $items as $item ) {
			
					$font_list[htmlspecialchars( $item['family'] )] = $item['family'];
			
					}
				
				delete_option( 'gifeed_google_fonts_list' );
				update_option('gifeed_google_fonts_list',  $font_list );
				
				$options = get_option( 'ghozylab_instagram_feed_options' );
				$options['gif_instagram_opt_google_fonts_api_key'] = $_POST['key'];
				$options['gif_instagram_opt_google_fonts_short'] = $_POST['short'];
		
				update_option( 'ghozylab_instagram_feed_options', $options );
				
				$res['ok'] = true;
				$res['msg'] = 'Great, successfully validating Google Fonts API Key!';
			
				} else {
					
					foreach ( $data['error']['errors'] as $err ) {
						
						$reason = 'Validation failed ( reason : '.$err['reason'].' )';
						
					}
					
					$res['ok'] = false;
					$res['msg'] = $reason;
				
					}
			
			
	
		} else {
			
			$res['ok'] = false;
		
				
			}
			

	echo json_encode( $res );
	wp_die();
	
}

add_action( 'wp_ajax_gifeed_ajax_validate_gogole_fonts_api', 'gifeed_ajax_validate_gogole_fonts_api' );


/*-----------------------------------------------------------------------------------------------------------------*/
/*-------------------------------------------------Activation Section----------------------------------------------*/
/*-----------------------------------------------------------------------------------------------------------------*/


/*-------------------------------------------------------------------------------*/
/*   Create Activation Page ( License Manager )
/*-------------------------------------------------------------------------------*/
function gifeed_create_activate_page() {
	
    $gifeed_activation_page = add_submenu_page('edit.php?post_type=ginstagramfeed', 'License Manager', __('License Manager', 'instagram-feed-pro'), 'edit_posts', 'gifeed-activation', 'gifeed_license_page');
	
}

function gifeed_license_page() {
	
	wp_enqueue_style( 'gifeed_activate', plugins_url( 'css/activate.css', __DIR__ ), array(), IFPRO_VERSION );
		
	$license = gifeed_get_lic_option( 'gifeedpro_license_info', 'gifeed_license_key', '' );	
	$status = gifeed_get_lic_option( 'gifeedpro_license_info', 'gifeed_license_status', 'invalid'  );	
	
	?>
    <div class="wrap">
    <div id="gifeed-license-logo">
        	<img style="width:32px;height:32px;vertical-align:middle; margin-right:10px;" src="<?php echo plugins_url( 'img/activation/key2-32x32.png' , dirname('index.php') ) ;?>" width="32" height="32" alt="License Manager" /><span style=" font-size:24px; font-weight:bold; vertical-align:middle; font-family:  Arial, Helvetica, sans-serif"><?php _e('License Manager', 'instagram-feed-pro'); ?></span>
            </div>

	<?php  
				if ( false === $cache = get_transient( 'gifeed_admin_notice' ) ) {
					
					if ( $status == 'expired' ) {
						
						$istext = 'Your license has expired, but you still able to use the plugin with no limitation times. However in this period you are not able to deactivate the license in order to activate to another sites. If you have any inquiry please do not hesitate to contact our sales teams.';
						
						$stsclass = 'gifeed-error';

					}
					
					else if ( $status == 'valid' ) {
						
						$istext = 'You can activate a license key on localhost or temporary site if you are really need for development of the website,<br /> <span style="color: #DD5050; font-weight: bold; text-decoration: none;margin-right:7px">BUT PLEASE DO NOT FORGET TO DEACTIVATE A LICENSE WHEN YOU\'RE DONE</span>before you activate a license in your live site.<br /><br /><strong>We are not responsible for any license issue that caused by you ignore this warning!</strong><br />';
						
						$stsclass = 'gifeed-warning';

					} 
					
					else {
						
						$istext = 'You can activate a license key on localhost or temporary site if you are really need for development of the website,<br /> <span style="color: #DD5050; font-weight: bold; text-decoration: none;margin-right:7px">BUT PLEASE DO NOT FORGET TO DEACTIVATE A LICENSE WHEN YOU\'RE DONE</span>before you activate a license in your live site.<br /><br /><strong>We are not responsible for any license issue that caused by you ignore this warning!</strong><br />';
						
						$stsclass = 'gifeed-notice';
					}
					
						echo '<div class="gifeed_lic_notice gifeed-alert-box '.$stsclass.'"><strong>ATTENTION :</strong><hr />'.$istext.'</div>';
					} 
					
				else {
					
					echo $cache;
				
				}
	
	?>

                
		<div class="metabox-holder">
			<div class="postbox">
				<h3 style="margin-top:8px;"><?php _e( 'Activation Form', 'instagram-feed-pro' ); ?></h3><hr />
                <div id="gifeed_docsq" style="padding-left:10px !important;">
                
	<div class="wrap">
		<form method="post">
		
			<?php settings_fields('gifeed_license_field'); ?>
			
			<table class="form-table gifeed-val">
				<tbody>
					<tr valign="top">	
						<th scope="row" valign="top">
							<?php _e('License Key'); ?>
						</th>
						<td>
                        	<?php if( $status !== false ) {
								
								switch ( $status ) {
									case 'valid':
										$inputstts = 'valid-license';
										$an = 'style="display: none;"';
										$ab = '';
										$ac = 'style="display: none;"';
										$aa = 'style="display: none;"';
									
									break;
									
									case 'invalid':
										$inputstts = 'invalid-license';
										$an = ''; 
										$ab = 'style="display:none;"';
										$ac = 'style="display:none;"';
										$aa = 'style="display: none;"';
									
									break;
									
									case 'expired':
										$inputstts = 'expired-license';
										$an = 'style="display:none;"';
										$ab = 'style="display:none;"';
										$ac = '';
										$aa = '';
									
									break;
									
								default:
								break;	
								}		
										?>
							<div class="gifeed-isleft1"><input <?php //echo $ac; ?> id="gifeed-license-key" name="gifeed-license-key" type="text" class="gifeed-input <?php echo $inputstts ?>" value="<?php esc_attr_e( $license ); ?>" />

                                
   <input type="button" id="btnactvte" <?php echo $an; ?> class="button-secondary gifeed-license-caller" name="gifeed_license_activate" value="<?php _e('Activate License'); ?>"/>
   <input type="button" id="btndeactvte" <?php echo $ab; ?> class="button-secondary gifeed-license-caller" name="gifeed_license_deactivate" value="<?php _e('Deactivate License'); ?>"/>
   <input type="button" disabled="disabled" id="btnexpired" <?php echo $ac; ?> class="button-secondary" name="gifeed_license_expired" value="<?php _e('Locked ( Expired )'); ?>"/>   
					<?php
                    
					} ?>
                            </div>
                            <div class="gifeed-isleft2"><label class="gifeed-licenseinfo"></label></div>                       
						</td>
					</tr>
				</tbody>
			</table>
            <br /><br />	
		</form>
    				</div>
    		</div>     
		</div>  
        
  		<div class="metabox-holder">
			<div class="postbox">
				<h3 style="margin-top:8px;"><?php _e( 'License Information', 'instagram-feed-pro' ); ?></h3><hr />
        <div id="gifeed_docs2" style="padding-left:10px !important;margin-top:25px;margin-bottom:25px;">
<table class="gifeed-bordered">
    <thead>

    <tr>
        <th>#</th>        
        <th>Details</th>
    </tr>
    </thead>
    <tr>
        <td>Owner</td>        
        <td><span id="gifeed-lo"><?php echo gifeed_get_lic_option( 'gifeedpro_license_info', 'gifeed_license_owner', 'none' ); ?></span></td>
    </tr>        
    <tr>
        <td>Email</td>         
        <td><span id="gifeed-leml"><?php echo gifeed_get_lic_option( 'gifeedpro_license_info', 'gifeed_license_email', 'none' ); ?></span></td>
    </tr>
    <tr>

        <td>Product Name</td>         
        <td><span id="gifeed-pname"><?php echo gifeed_get_lic_option( 'gifeedpro_license_info', 'gifeed_license_product', 'none' ); ?></span></td>
    </tr>    
    <tr>
        <td class="liconly">License Key</td> 
        <td class="liconly"><span id="gifeed-lkey" style="color:grey; font-weight:bold;"><?php echo gifeed_get_lic_option( 'gifeedpro_license_info', 'gifeed_license_key', 'none' ); ?></span></td>
    </tr>
    <tr>
        <td>License Status</td> 
        <td><span id="gifeed-lsts"><?php echo gifeed_convert_lic_status(gifeed_get_lic_option( 'gifeedpro_license_info', 'gifeed_license_status', '' )); ?></span></td>
    </tr>   
    <tr>
        <td>License Limit</td> 
        <td><span id="gifeed-llim"><?php echo gifeed_get_lic_option( 'gifeedpro_license_info', 'gifeed_license_limit', 'none' ); ?></span></td>
    </tr>
    <tr>
        <td>Site Count</td> 
        <td><span id="gifeed-lusg"><?php echo gifeed_get_lic_option( 'gifeedpro_license_info', 'gifeed_license_usage', 'none' ); ?></span><span id="gifeed-scountreload" class="gifeed-license-caller" <?php echo $ab; ?>></span></td>
    </tr>    
    <tr>

        <td>Expires Date</td>
		<?php if (gifeed_get_lic_option( 'gifeedpro_license_info', 'gifeed_license_expire', '' ) != '' ) {
			$phpdate = strtotime( gifeed_get_lic_option( 'gifeedpro_license_info', 'gifeed_license_expire', '' ) );
			$newate = date( 'M d, Y', $phpdate );
			}
		else {
			$newate = 'none';
			}
		?> 
        <td><span id="gifeed-lexpr"><?php echo $newate; ?></span><span data-ttl="If a license has expired you still able to use the product with no limitation times. However you are not able to activate a license to the other/new site(s) except the site(s) that have been registered before. If you have any inquiry please do not hesitate to contact our support teams." class="tooltip" id="lexpr-info"></span></td>
    </tr>


</table>

    </div>
    </div>    

  </div>       
        
        
        
 </div>  
	<?php 
	
	if ( is_admin() && gifeed_get_lic_option( 'gifeedpro_license_info', 'gifeed_license_status' ) != 'expired' ) {
	add_action( 'admin_footer', 'gifeed_include_js' );
}
}

function gifeed_register_option() {
	// creates our settings in the options table
	register_setting( 'gifeed_license_field', 'gifeedpro_license_info', 'gifeed_sanitize_license' );
}
add_action( 'admin_init', 'gifeed_register_option' );

function gifeed_sanitize_license( $new ) {
	
	$old = trim( gifeed_get_lic_option( 'gifeedpro_license_info', 'gifeed_license_key' ), false );	
	
	if( $old && $old != $new ) {
		
			gifeed_del_lic_option( 'gifeedpro_license_info', 'gifeed_license_status' );
	}
	return $new;
} 




/*******************************************************
* Illustrates how to activate license via AJAX call
* v.1.3
*******************************************************/
function gifeed_include_js() {
?>
<script type="text/javascript">
	jQuery(document).ready(function() {
		var currentclass; var timer;	 	

		jQuery('.gifeed-license-caller').bind('click', function() {
			window.clearTimeout(timer);
			currentclass = jQuery('#gifeed-license-key').attr("class");
			jQuery('.gifeed-licenseinfo').text("");
		   if( jQuery('#gifeed-license-key').val() == ''){
			   alert('Input can not be left blank');
			   return false;
			   }
			   	jQuery(this).attr('disabled','disabled');
				jQuery('.gifeed-licenseinfo').removeClass('lic-actinvalid lic-actvalid lic-actvalidex');
				jQuery('#gifeed-license-key').removeClass('valid-license invalid-license').addClass('gifeed-act-loading');
				
			switch (jQuery(this).attr('id')) {	
					case 'btnactvte':
					case 'gifeed-scountreload':
					var cmd = 'activate_license';
					gifeed_ajax_validation(cmd);
					break;
					
					case 'btndeactvte':
					var cmd = 'deactivate_license';
					gifeed_ajax_validation(cmd);
					break;				
									
					default:
			}
	});
	
			function gifeed_ajax_validation(cmd) {
				var data = {
				action: 'gifeed_ajax_validation',
				security: '<?php echo wp_create_nonce( "gifeed-pro-nonce"); ?>',	
				lkey: jQuery('#gifeed-license-key').val(),				
				cmd: cmd,
				};
			
				jQuery.post(ajaxurl, data, function(response) {
					var json = jQuery.parseJSON(response);
					
					try {
						
						var obj = jQuery.parseJSON(json.ldata);
							jQuery('#gifeed-lo').text(obj[0].customer_name);
							jQuery('#gifeed-leml').text(obj[0].customer_email);
							jQuery('#gifeed-pname').text(obj[0].item_name);
							jQuery('#gifeed-lkey').text(jQuery('#gifeed-license-key').val());
							jQuery('#gifeed-llim').text(obj[0].license_limit);
							jQuery('#gifeed-lusg').text(obj[0].site_count);
							jQuery('#gifeed-lsts').text(obj[0].license);							
							jQuery('#gifeed-lexpr').text(obj[0].expires);
							
						}
						catch (err) {
							
							}

					
					switch (json.button_class) {
						
						case 'actode':
						jQuery('#btnactvte').hide();
						jQuery('#btndeactvte').fadeIn('slow');
						jQuery('.gifeed_lic_notice').fadeOut(100).empty().removeClass('gifeed-alert-box gifeed-notice error').addClass('gifeed-alert-box gifeed-warning').html('<strong>ATTENTION :</strong><hr />You can activate a license key on localhost or temporary site if you are really need for development of the website,<br /> <span style="color: #DD5050; font-weight: bold; text-decoration: none;margin-right:7px">BUT PLEASE DO NOT FORGET TO DEACTIVATE A LICENSE WHEN YOU\'RE DONE</span>before you activate a license in your live site.<br /><br /><strong>We are not responsible for any license issue that caused by you ignore this warning!</strong><br />').fadeIn(1000);
						
						break;
						
						case 'detoact':
						jQuery('#btndeactvte').hide();
						jQuery('#btnactvte').fadeIn('slow');
						jQuery('#gifeed-license-key').val("");
						jQuery(".gifeed-bordered").find("span").not(".tooltip, #gifeed-scountreload").text("none");
						jQuery('.gifeed_lic_notice').removeClass('gifeed-alert-box gifeed-warning').addClass('gifeed-alert-box gifeed-notice')
						break;	
						
						case 'expired':
						//jQuery('#gifeed-license-key').removeAttr('readonly');
						jQuery('#btndeactvte, #btnactvte').hide();
						jQuery('#btnexpired').fadeIn('slow');
						
						jQuery('.gifeed_lic_notice').fadeOut(100).empty().removeClass('gifeed-alert-box gifeed-warning gifeed-notice gifeed-error error').addClass('gifeed-alert-box gifeed-error').html('<label class="gifeed-licexinfoexpired"><?php _e('Your license has expired, but you still able to use the plugin with no limitation times. However in this period you are not able to deactivate the license in order to activate to another sites. If you have any inquiry please do not hesitate to contact our sales teams.'); ?></label>').fadeIn(1000);
						
						break;											
						
						default:
					}											
						jQuery('#btnactvte, #btndeactvte').removeAttr('disabled');
						jQuery('#gifeed-license-key').removeClass('gifeed-act-loading').addClass(json.textbox_class);
						jQuery('.gifeed-licenseinfo').addClass(json.message_class).text(json.message).fadeIn('slow', function() {
							timer = window.setTimeout(function() { jQuery('.gifeed-licenseinfo').fadeOut('slow');
									if (json.button_class == 'expired' ) {
										//jQuery('.gifeed-isleft3').fadeIn('slow');
										}
							 }, 6000);
							});					
					});
			}	
});	


</script>
<?php	
	
	
}


/*-------------------------------------------------------------------------------*/
/*  Check License via AJAX
/*-------------------------------------------------------------------------------*/
function gifeed_ajax_validation() {
	
	global $gifeed_params;
	
	check_ajax_referer( 'gifeed-pro-nonce', 'security' );
	
	if ( !isset( $_POST['cmd'] ) || !isset( $_POST['lkey'] ) ) {
		echo '0';
		wp_die();
		
		}

		
		// Let's start to activate
		$license_key = trim( $_POST['lkey'] );
		$action = trim( $_POST['cmd'] );

		$license_data = _gifeedFetchmode( $gifeed_params, true, $action, $license_key );	
			
		( isset ( $license_data ) ? $license_data = $license_data : $license_data = null );
		$error_code = ( isset ( $license_data->error ) ? trim ( $license_data->error ) : null );
		$license_code = ( isset ( $license_data->error ) ? trim ( $license_data->license ) : null );

			
			switch ( $error_code ) { // Pharse error response switch START
			

				// Handle valid license & successfully activate
				case md5( 'validlicense' ):
				
					gifeed_start_schedule_event();
					
					delete_transient( 'gifeed_admin_notice' );
					
					gifeed_update_license_option( $license_data, false );
					
					gifeed_encode_user_data( $license_data->response_to_user );	
				
				break;	
				
				
				// Handle invalid license
				case 'invalid':
				case 'missing':
				
					gifeed_encode_user_data( $license_data->response_to_user );
				
				break;
							
				
				// Handle valid license & successfully activate
				case 'deactivated':
				
					gifeed_clear_scheduled_hook();
					
					delete_option( 'gifeedpro_license_info' );
					
					gifeed_encode_user_data( $license_data->response_to_user );
				
				break;			
						
						
				 // Handle invalid product
				case 'item_name_mismatch':
				
					gifeed_encode_user_data( $license_data->response_to_user );
				
				break;	
				
				
				 // Handle license activations left
				case 'no_activations_left':
				
					gifeed_encode_user_data( $license_data->response_to_user );
				
				break;
				
				
				 // Handle license expire
				case 'expired':
				
				
					if ( trim( $license_data->is_listed_site == true ) ) {
						
						$license_data->license_key = $license_key;
						
						gifeed_update_license_option( $license_data, true );
						
						gifeed_encode_user_data( $license_data->response_to_user );
						
						} else {
							
							gifeed_encode_user_data( $license_data->response_to_user );
							
							}	
				
				break;
				
				
				 // Handle license revoked
				case 'revoked':
				case 'disabled':
				case 'inactive':
				
					gifeed_clear_scheduled_hook();
					
					delete_option( 'gifeedpro_license_info' );
				
					gifeed_encode_user_data( $license_data->response_to_user );
				
				break;
				
				
				 // Handle failed deactivate
				case 'failed':
				
					if ( trim( $license_data->is_listed_site == true ) ) {

						gifeed_update_license_per_val( 'gifeed_license_status', 'expired' );
						gifeed_update_license_per_val( 'gifeed_license_expire', $license_data->expires );
						
						gifeed_encode_user_data( $license_data->response_to_user );
						
						} else {
							
							gifeed_encode_user_data( $license_data->response_to_user );
							
							}
				
				break;

				
				default:
				
					gifeed_encode_user_data( $license_data->response_to_user );
				
				break;
		
			} // Pharse error response switch END
		
	
wp_die();	
	
}
add_action( 'wp_ajax_gifeed_ajax_validation', 'gifeed_ajax_validation' );


/*-------------------------------------------------------------------------------*/
/*  Check License on Activated Hook or via WP Cron
/*-------------------------------------------------------------------------------*/
function gifeed_check_license() {
	
	global $gifeed_params;

	$lic = gifeed_get_lic_option( 'gifeedpro_license_info', 'gifeed_license_key', '' );	

	if ( trim( $lic ) ) {
		
		$license = $lic;
		
	} else {
		
		$license = '1234567890';
		
		}
		
	$license_data = _gifeedFetchmode( $gifeed_params, true, 'check_license', $license );		
	
	// Start Check License Here

	switch ( trim( $license_data->error ) ) {
		
		
		case md5( 'validlicense' ): // Site is authorize and a license is valid
		
			$license_data->license_key = $lic;
			
			gifeed_update_license_option( $license_data, true );
			
			delete_transient( 'gifeed_admin_notice' );
			
			gifeed_start_schedule_event();
				
		break;
		
		
		case 'invalid':
		case 'missing':
		case 'invalid':
		case 'item_name_mismatch':
		
			delete_option( 'gifeedpro_license_info' );
			gifeed_clear_scheduled_hook();
			
			if ( !is_network_admin() ) {
				
				wp_redirect( "edit.php?post_type=ginstagramfeed&page=gifeed-activation" );
				
				}
			 
		break;
		
		
		case 'revoked':
		case 'disabled':
		case 'inactive':
		
			set_transient( 'gifeed_admin_notice', '<div class="error gifeed_lic_notice"><p>Your License has been revoked. Please contact us for more info.</p></div>' );
			
			delete_option( 'gifeedpro_license_info' );
			
			gifeed_clear_scheduled_hook();
			
			if ( !is_network_admin() ) {
				
				wp_redirect( "edit.php?post_type=ginstagramfeed&page=gifeed-activation" );
				
			}
		
		break;
		
		
				 // Handle license expire
		case 'expired':
		
			if ( trim( $license_data->is_listed_site == true ) ) {
			
				$license_data->license_key = $lic;
			
				gifeed_update_license_option( $license_data, true );
				
				gifeed_start_schedule_event();
			
			} else {
				
				delete_option( 'gifeedpro_license_info' );
				
				gifeed_clear_scheduled_hook();
				
				if ( !is_network_admin() ) {
				
					wp_redirect( "edit.php?post_type=ginstagramfeed&page=gifeed-activation" );
				
				}
				
							
				}	
				
				break;


				case 'no_activations_left':
				
				delete_option( 'gifeedpro_license_info' );
				
				gifeed_clear_scheduled_hook();
				
				if ( !is_network_admin() ) {
				
					wp_redirect( "edit.php?post_type=ginstagramfeed&page=gifeed-activation" );
				
				}
				
				
				break;	
		
		
		
		default:
		
		break;
		
		
	}

// END	
	return;

}


/*-------------------------------------------------------------------------------*/
/*  Get License info from database
/*-------------------------------------------------------------------------------*/
function gifeed_get_lic_option( $option_name, $key, $default = false ) {
	$options = get_option( $option_name );

	if ( $options ) {
		
		return ( array_key_exists( $key, $options ) ) ? $options[$key] : $default;
	}

	return $default;
}


/*-------------------------------------------------------------------------------*/
/*  Delete License info from database by Key
/*-------------------------------------------------------------------------------*/
function gifeed_del_lic_option( $option_name, $key ) {
	
	$options = get_option( $option_name );

}


/*-------------------------------------------------------------------------------*/
/*  Update License Info Indivual
/*-------------------------------------------------------------------------------*/
function gifeed_update_license_per_val( $key, $val ) {
	
	$options = get_option( 'gifeedpro_license_info' );
	
	$options[$key] = $val;
	
	update_option( 'gifeedpro_license_info', $options );
	
}


/*-------------------------------------------------------------------------------*/
/*  Update License info
/*-------------------------------------------------------------------------------*/
function gifeed_update_license_option( $license_data, $forstatus = false ) {
	
	if ( $forstatus === false ) {
		
		$key = $_POST['lkey'];

		} else {
			
			$key = $license_data->license_key;		
			
		}
	
	$licval = array(
	"gifeed_license_status" 	=> trim( $license_data->license ),
	"gifeed_license_key" 		=> trim( $key ),
	"gifeed_license_owner" 	=> trim( $license_data->customer_name ),
	"gifeed_license_email" 	=> trim( $license_data->customer_email ),
	"gifeed_license_product" 	=> trim( $license_data->item_name ),
	"gifeed_license_limit" 	=> trim( $license_data->license_limit ),
	"gifeed_license_usage" 	=> trim( $license_data->site_count ),
	"gifeed_license_expire" 	=> trim( $license_data->expires )
		);
		
		update_option( 'gifeedpro_license_info', $licval );	
			
}


/*--------------------------------------------------------------------------
| Check if curl is enabled or disabled
|--------------------------------------------------------------------------*/
function _gifeedFetchmode( $gifeed_params, $thekey = false, $action, $license ){
	
	$gifeed_params = array(
	'edd_action'=> $action,
	'license' 	=> $license,
	'item_name' => urlencode( IFPRO_ITEM_NAME ) // the name of our product in EDD	
		);	
	
	if ( $thekey == true ) {
		
		$arrurl = array(
		"url" => get_site_url()
		);
		
		$gifeed_params = array_merge($gifeed_params, $arrurl);
		
	}	
	
    if( function_exists('curl_version') ){
		
		$response = wp_remote_get( add_query_arg( $gifeed_params, IFPRO_API_URLCURL ), array( 'timeout' => 15, 'sslverify' => false ) );
		
		if ( is_wp_error( $response ) )
		
			return false;

			$cdata = json_decode( wp_remote_retrieve_body( $response ) );
			
			}
  				else {

					$json_url = add_query_arg( $gifeed_params, IFPRO_API_URL );
					
					$json = file_get_contents( $json_url );
					
						if ( is_wp_error( $json_url ) )
						
							return false;

							$cdata = json_decode( $json );		
					}							
						
		return $cdata;
		
}


/*-------------------------------------------------------------------------------*/
/*  Convert license status
/*-------------------------------------------------------------------------------*/
function gifeed_convert_lic_status( $licsts ) {
	
	switch ($licsts) {
		
		case 'valid';
		
		echo '<span =id="gifeed-lsts" style=color:green; font-weight:bold;">'.strtoupper( $licsts ).'</span>';
		
		break;
		
		case 'expired';
		
		echo '<span =id="gifeed-lsts" style=color:red; font-weight:bold;">'.strtoupper( $licsts ).'</span>';
				
		break;
		
		
	default:
	
			echo '<span =id="gifeed-lsts" style=color:grey; font-weight:bold;">none</span>';
			
	break;
	
	}

	return;
	
}


/*-------------------------------------------------------------------------------*/
/*  Encode to JSON format and sed the data to user
/*-------------------------------------------------------------------------------*/
function gifeed_encode_user_data( $decoded ) {
	
		if ( $decoded->cond == true ) {
			
			$sendtousr = array(
					"ldata"			=> $decoded->ldata,
					"response" 		=> $decoded->response,
					"message" 		=> $decoded->message,
					"message_class" => $decoded->message_class,
					"textbox_class" => $decoded->textbox_class,
					"button_class" 	=> $decoded->button_class,
					);
			
			} else {
				
				$sendtousr = array(
						"ldata"			=> "",
						"response" 		=> "unknow",
						"message" 		=> "Failed",
						"message_class" => "lic-actinvalid",
						"textbox_class" =>  "invalid-license",
						"button_class" 	=> ""
						);
				
			}
	

	echo json_encode( $sendtousr );
	
	}
	
	
/*-------------------------------------------------------------------------------*/
/*  Show admin notify per error ( BETA )
/*-------------------------------------------------------------------------------*/
function gifeed_license_notes_render( $notes ) {

				set_transient( 'gifeed_license_'.$notes.'_notice', '<div class="error gifeed-'.$notes.'"><p>Your License has been '.$notes.'. Please contact us for more info.</p></div>' );
	
}


function gifeed_license_expired_notice() {
	
	global $current_screen;
	
	$gifeedcustomposts = array( 'ginstagramfeed' );
	
	if ( gifeed_get_lic_option( 'gifeedpro_license_info', 'gifeed_license_status', 'invalid' ) == 'expired' &&  in_array( $current_screen->post_type, $gifeedcustomposts ) ) {
		
		$message = 'You have invalid or expired license key for <strong>'.IFPRO_ITEM_NAME.'</strong>. Please go to <a href="'.admin_url( 'edit.php?post_type=ginstagramfeed&page=gifeed-activation').'">License Manager page</a> to correct this issue';
		echo '<div class="error"> <p>'.$message.'</p></div>'; 
		
	} else {
		
		return false;
		
	}
	
}
	

/*-------------------------------------------------------------------------------*/
/*   END Activation Page
/*-------------------------------------------------------------------------------*/


/*-------------------------------------------------------------------------------*/
	/* ALL CRONS FUNCTION */
/*-------------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------------*/


// LICENSE CRON ACTION
function gifeed_start_schedule_event() {
	
	if ( is_admin() ) {
		
		wp_clear_scheduled_hook( 'gifeed_cron_event' );
		
		 if ( ! wp_next_scheduled( 'gifeed_cron_event' ) ) {
			 
			 wp_schedule_event( time(), 'oneday', 'gifeed_cron_event' );
			 
		 	}
		}
	}
	
add_action( 'gifeed_cron_event', 'gifeed_cron_do_this' );


function gifeed_cron_do_this() {
	
	gifeed_check_license();
	
	}


function gifeed_clear_scheduled_hook() {
	
	wp_clear_scheduled_hook( 'gifeed_cron_event' );
	
	}

Did this file decode correctly?

Original Code

<?php $_F=__FILE__;$_C1767279132='Pz48P0RoRA0KDQpCaiAoICEgVU5qQm1OVSgnQTkyUUFKVCcpICkgew0KCVVCTignUWROcXJOIFVmIG1mSCBkZnFVIEhoQnIgakJkTiBVQlBOR0hkZyEnKTsNCn0NCg0KDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KLyogIEZ0RGRCR3FITiBpZlBXcg0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCmp0bUdIQmZtIGFCak5OVV9VdERkQkdxSE5fak5OVSgpew0KCQ0KCWFkZnhxZCAkM0RVeDsNCglCaiAoICEgKCBCcnJOSCggJF9uWEpbJ0RmckgnXSApIHx8IEJyck5IKCAkX1FNMkpbJ0RmckgnXSApICB8fCAoIEJyck5IKCAkX1ZYektYMkpbJ3FHSEJmbSddICkgJiYgJ2FCak5OVV9VdERkQkdxSE5fak5OVScgPT0gJF9WWHpLWDJKWydxR0hCZm0nXSApICkgKSB7DQoJCTNEX1VCTiggJ3NmIERmckggSGYgVXREZEJHcUhOIGhxciB4Tk5tIHJ0RERkQk5VIScgKTsNCgl9DQogDQoJLyoNCgkgKiBhTkggSGhOIGZQQmFCbXFkIERmckggQlUNCgkgKi8NCgkkRGZySF9CVSA9ICggQnJyTkgoICRfblhKWydEZnJIJ10gKSA/ICRfblhKWydEZnJIJ10gOiAkX1FNMkpbJ0RmckgnXSApOw0KCS8qDQoJICogcW1VIHFkZCBIaE4gZlBCYUJtcWQgRGZySCBVcUhxIEhoTm0NCgkgKi8NCgkkRGZySCA9IGFOSF9EZnJIKCAkRGZySF9CVSApOw0KIA0KCS8qDQoJICogQmogZ2Z0IFVmbSdIIDNxbUggR3RQUE5tSCB0ck5QIEhmIHhOIEhoTiBtTjMgRGZySCBxdEhoZlAsDQoJICogSGhObSBHaHFtYU4gbU5jSCBHZnREZE4gZmogZEJtTnIgSGYgSGhCcjogJG1OM19EZnJIX3F0SGhmUCA9ICREZnJILT5EZnJIX3F0SGhmUDsNCgkgKi8NCgkkR3RQUE5tSF90ck5QID0gM0RfYU5IX0d0UFBObUhfdHJOUCgpOw0KCSRtTjNfRGZySF9xdEhoZlAgPSAkR3RQUE5tSF90ck5QLT5ZRjsNCiANCgkvKg0KCSAqIEJqIERmckggVXFIcSBOY0JySHIsIEdQTnFITiBIaE4gRGZySCBVdERkQkdxSE4NCgkgKi8NCglCaiAoIEJyck5IKCAkRGZySCApICYmICREZnJIICE9IG10ZGQgKSB7DQogDQoJCS8qDQoJCSAqIG1OMyBEZnJIIFVxSHEgcVBQcWcNCgkJICovDQoJCSRxUGFyID0gcVBQcWcoDQoJCQknR2ZXV05tSF9ySHFIdHInID0+ICREZnJILT5HZldXTm1IX3JIcUh0ciwNCgkJCSdEQm1hX3JIcUh0cicgICAgPT4gJERmckgtPkRCbWFfckhxSHRyLA0KCQkJJ0RmckhfcXRIaGZQJyAgICA9PiAkbU4zX0RmckhfcXRIaGZQLA0KCQkJJ0RmckhfR2ZtSE5tSCcgICA9PiAkRGZySC0+RGZySF9HZm1ITm1ILA0KCQkJJ0RmckhfTmNHTlBESCcgICA9PiAkRGZySC0+RGZySF9OY0dOUERILA0KCQkJJ0RmckhfbXFXTicgICAgICA9PiAkRGZySC0+RGZySF9tcVdOLA0KCQkJJ0RmckhfRHFQTm1IJyAgICA9PiAkRGZySC0+RGZySF9EcVBObUgsDQoJCQknRGZySF9EcXJyM2ZQVScgID0+ICREZnJILT5EZnJIX0RxcnIzZlBVLA0KCQkJJ0RmckhfckhxSHRyJyAgICA9PiAnVVBxakgnLA0KCQkJJ0RmckhfSEJIZE4nICAgICA9PiAnN01RNiBmaiAnLiAkRGZySC0+RGZySF9IQkhkTiwNCgkJCSdEZnJIX0hnRE4nICAgICAgPT4gJERmckgtPkRmckhfSGdETiwNCgkJCSdIZl9EQm1hJyAgICAgICAgPT4gJERmckgtPkhmX0RCbWEsDQoJCQknV05tdF9mUFVOUCcgICAgID0+ICREZnJILT5XTm10X2ZQVU5QDQoJCSk7DQogDQoJCS8qDQoJCSAqIEJtck5QSCBIaE4gRGZySCB4ZyAzRF9CbXJOUEhfRGZySCgpIGp0bUdIQmZtDQoJCSAqLw0KCQkkbU4zX0RmckhfQlUgPSAzRF9CbXJOUEhfRGZySCggJHFQYXIgKTsNCiANCgkJLyoNCgkJICogYU5IIHFkZCBHdFBQTm1IIERmckggSE5QV3IgcVUgck5IIEhoTlcgSGYgSGhOIG1OMyBEZnJIIFVQcWpIDQoJCSAqLw0KCQkkSHFjZm1mV0JOciA9IGFOSF9meGtOR0hfSHFjZm1mV0JOciggJERmckgtPkRmckhfSGdETiApOyAvLyBQTkh0UG1yIHFQUHFnIGZqIEhxY2ZtZldnIG1xV05yIGpmUCBEZnJIIEhnRE4sIE5jIHFQUHFnKCJHcUhOYWZQZyIsICJEZnJIX0hxYSIpOw0KCQlqZlBOcUdoICggJEhxY2ZtZldCTnIgcXIgJEhxY2ZtZldnICkgew0KCQkJJERmckhfSE5QV3IgPSAzRF9hTkhfZnhrTkdIX0hOUFdyKCAkRGZySF9CVSwgJEhxY2ZtZldnLCBxUFBxZyggJ2pCTmRVcicgPT4gJ3JkdGFyJyApICk7DQoJCQkzRF9yTkhfZnhrTkdIX0hOUFdyKCAkbU4zX0RmckhfQlUsICREZnJIX0hOUFdyLCAkSHFjZm1mV2csIGpxZHJOICk7DQoJCX0NCiANCgkJLyoNCgkJICogVXREZEJHcUhOIHFkZCBEZnJIIFdOSHEga3RySCBCbSBIM2YgMnp1IDB0TlBCTnINCgkJICovDQoJCSREZnJIX1dOSHFfQm1qZnIgPSAkM0RVeC0+YU5IX1BOcnRkSHIoICIyWHVYN0ogV05IcV8xTmcsIFdOSHFfb3FkdE4gaVZNWiAkM0RVeC0+RGZySFdOSHEgOFRYVlggRGZySF9CVT0kRGZySF9CVSIgKTsNCgkJQmogKEdmdG1IKCREZnJIX1dOSHFfQm1qZnIpIT15KSB7DQoJCQkkcjBkXzB0TlBnID0gIllzMlhWSiBZc0pNICQzRFV4LT5EZnJIV05IcSAoRGZySF9CVSwgV05IcV8xTmcsIFdOSHFfb3FkdE4pICI7DQoJCQlqZlBOcUdoICggJERmckhfV05IcV9CbWpmciBxciAkV05IcV9CbWpmICkgew0KCQkJCSRXTkhxXzFOZyA9ICRXTkhxX0JtamYtPldOSHFfMU5nOw0KCQkJCSRXTkhxX29xZHROID0gcVVVcmRxcmhOciggJFdOSHFfQm1qZi0+V05IcV9vcWR0TiApOw0KCQkJCSRyMGRfMHROUGdfck5kW109ICIyWHVYN0ogJG1OM19EZnJIX0JVLCAnJFdOSHFfMU5nJywgJyRXTkhxX29xZHROJyI7DQoJCQl9DQoJCQkkcjBkXzB0TlBnLj0gQldEZGZVTiggIiBLc1lNcyBBdXUgIiwgJHIwZF8wdE5QZ19yTmQgKTsNCgkJCSQzRFV4LT4wdE5QZyggJHIwZF8wdE5QZyApOw0KCQl9DQogDQogDQoJCS8qDQoJCSAqIGpCbXFkZGcsIFBOVUJQTkdIIEhmIEhoTiBOVUJIIERmckggckdQTk5tIGpmUCBIaE4gbU4zIFVQcWpIDQoJCSAqLw0KCQkgDQoJCSBCaiAoIDNEX2FOSF9QTmpOUE5QKCkgKSB7DQoJCQkgDQoJCQkgM0RfcnFqTl9QTlVCUE5HSCggM0RfYU5IX1BOak5QTlAoKSApOw0KCQkJIA0KCQkJIH0gTmRyTiB7DQoJCQkJIA0KCQkJCSAzRF9QTlVCUE5HSCggcVVXQm1fdFBkKCAnRGZySC5EaEQ/cUdIQmZtPU5VQkgmRGZySD0nIC4gJG1OM19EZnJIX0JVICkgKTsNCgkJCQkgDQoJCQkJIH0NCgkJDQoJCU5jQkg7DQoJfSBOZHJOIHsNCgkJM0RfVUJOKCAnUWZySCBHUE5xSEJmbSBqcUJkTlUsIEdmdGRVIG1mSCBqQm1VIGZQQmFCbXFkIERmckg6ICcgLiAkRGZySF9CVSApOw0KCX0NCn0NCg0KDQpxVVVfcUdIQmZtKCAncVVXQm1fcUdIQmZtX2FCak5OVV9VdERkQkdxSE5fak5OVScsICdhQmpOTlVfVXREZEJHcUhOX2pOTlUnICk7DQoNCg0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCi8qICA3UE5xSE4gUVBOb0JOMyBaTkhxeGZjDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KanRtR0hCZm0gYUJqTk5VX0RQTm9CTjNfV05IcXhmYygpIHsNCgkNCgkkYURQTm8gPSAnPFVCbyBySGdkTj0iSE5jSC1xZEJhbTpHTm1ITlA7Ij4nOw0KCSRhRFBObyAuPSAnPEJXYSBHZHFycj0iYVBxZ3JHcWROIiBCVT0iYUJqTk5VLURQTm9CTjMiIHJIZ2ROPSItV2ZwLXhmUFVOUC1QcVVCdHI6IGJEYzstM054MUJILXhmUFVOUC1QcVVCdHI6IGJEYzstMWhIV2QteGZQVU5QLVBxVUJ0cjogYkRjO3hmUFVOUC1QcVVCdHI6YkRjO1dxUGFCbS1IZkQ6T0RjO0d0UHJmUDpEZkJtSE5QOyIgclBHPSInLkRkdGFCbXJfdFBkKCAnQldhL1dOSHF4ZmMvRFBOb0JOMy5EbWEnICwgVUJQbXFXTihfX2lZdVhfXykgKS4nIiAzQlVIaD0iRWJ5IiBoTkJhaEg9IndTIiBxZEg9IlFQTm9CTjMiID4nOw0KCSRhRFBObyAuPSAnPC9VQm8+JzsNCgkNCglOR2hmICRhRFBObzsNCgkNCn0NCg0KDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KLyogICA3VFg3NSA5Vk04MlhWIExYVjJZTXMgKCBZWCBNc3U2ICkNCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQpqdG1HSEJmbSBhQmpOTlVfR2hORzFfeFBmM3JOUF9vTlByQmZtX3FVV0JtKCAkckJVICkgew0KCQ0KCUJqICggQnJfcVVXQm0oKSAmJiBhTkhfRGZySF9IZ0ROKCAkckJVICkgPT0gJ2FCbXJIcWFQcVdqTk5VJyApew0KDQoJCURQTmFfV3FIR2goICcvWjJZWCAoLio/KTsvJywgJF8yWFZMWFZbJ1RKSlFfSzJYVl9BblhzSiddLCAkV3FIR2hOciApOw0KCQlCaiAoIEdmdG1IKCAkV3FIR2hOciApID4gRSApew0KCQkJJG9OUHJCZm0gPSBOY0RkZlVOKCAiLiIsICRXcUhHaE5yW0VdICk7DQoJCQlyM0JIR2goSFB0Til7DQoJCQkJR3FyTiAoICRvTlByQmZtW3ldIDw9ICc0JyApOg0KCQkJCSRXcmEgPSAnQk40JzsNCg0KCQkJeFBOcTE7IA0KCQkJICANCgkJCQlHcXJOICggJG9OUHJCZm1beV0gPiAnNCcgKToNCgkJICAJCSRXcmEgPSAnYXFoJzsNCgkJCSAgDQoJCQl4UE5xMTsgCQkJICANCg0KCQkJICBVTmpxdGRIOg0KCQkJfQ0KCQkJUE5IdFBtICRXcmE7DQoJCX0gTmRyTiB7DQoJCQkkV3JhID0gJ21mSEJOJzsNCgkJCVBOSHRQbSAkV3JhOw0KCQkJfQ0KCX0NCn0NCg0KDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KLyogICBuTm1OUHFITiBzdFd4TlAgZm0gdWZmRA0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCmp0bUdIQmZtIGFCak5OVV9hTm1OUHFITl9tdFd4TlAoICRqUGZXID0gbXRkZCwgJEhmID0gbXRkZCApIHsNCgkNCgkkbXRXID0gUHFtYU4oICRqUGZXLCAkSGYgKTsNCgkkUE5yID0gcVBQcWdfR2ZXeEJtTiggJG10VywgJG10VyApOw0KCVBOSHRQbSAkUE5yOw0KCQ0KfQ0KDQoNCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQovKiAgbk5IIEhoTiBEcUhITlBtL2RxZ2Z0SCBkQnJIIA0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCmp0bUdIQmZtIGFCak5OVV9hTkhfZEJySCggJGRCckggKSB7DQoJDQoJJGRySCA9IHFQUHFnKCk7DQoJJGRySF9kQnJIID0gckdxbVVCUCggWWlRVk1fUXVLbllzX0ZZVi4gJy9CbUcvalBmbUhObVUvQldhLycuJGRCckguJycgKTsNCgkNCglqZlBOcUdoKCAkZHJIX2RCckggcXIgJGRySF9tcVdOICkgew0KCQlCaiAoICRkckhfbXFXTiAhPSAnLicgJiYgJGRySF9tcVdOICE9ICcuLicgKSB7DQoJCQkkZHJIW10gPSAkZHJIX21xV047DQoJCX0NCgl9DQoJUE5IdFBtICRkckg7DQoJDQp9DQoNCg0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCi8qICAgQUlBUiBuTkggaU5OVSB1QnJIDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KanRtR0hCZm0gYUJqTk5VX2FQcXhfak5OVV9kQnJIX3FrcWMoKSB7DQoJDQoJLy8gUHRtIHEgMHRCRzEgck5HdFBCSGcgR2hORzENCglCaiggISBHaE5HMV9xa3FjX1BOak5QTlAoICdhQmpOTlVfYU5IX2pOTlUnLCAnck5HdFBCSGcnICkgKQ0KCQlQTkh0UG07DQoJDQoJJGRCckggPSBxUFBxZygpOw0KCQ0KCWFkZnhxZCAkRGZySDsNCgkJCQ0KCSRxUGFyID0gcVBQcWcoDQoJCQknRGZySF9IZ0ROJyA9PiAnYUJtckhxYVBxV2pOTlUnLA0KICAJCQknZlBVTlAnID0+ICdBMjcnLA0KICAJCQknRGZySF9ySHFIdHInID0+ICdEdHhkQnJoJywNCiAgCQkJJ0RmckhyX0ROUF9EcWFOJyA9PiAtRSwNCgkJCQkpOw0KDQoJJFdnRGZySHIgPSBhTkhfRGZySHIoICRxUGFyICk7DQoJamZQTnFHaCggJFdnRGZySHIgcXIgJERmckggKSA6CXJOSHREX0RmckhVcUhxKCREZnJIKTsNCgkNCgkkZEJySFskRGZySC0+WUZdID0gcVBQcWcoJ29xZCcgPT4gJERmckgtPllGLCAnSEJIZE4nID0+IE5yR19oSFdkKCBOckdfa3IoIEhoTl9IQkhkTiggc0t1dSwgc0t1dSwgaUF1MlggKSApICkgKTsNCgkNCglObVVqZlBOcUdoOw0KCQkNCglOR2hmIGtyZm1fTm1HZlVOKCAkZEJySCApOyAvLzJObVUgSGYgTURIQmZtIHVCckggKCBBUFBxZyApDQoJVUJOKCk7DQoJDQp9DQpxVVVfcUdIQmZtKCAnM0RfcWtxY19hQmpOTlVfYVBxeF9qTk5VX2RCckhfcWtxYycsICdhQmpOTlVfYVBxeF9qTk5VX2RCckhfcWtxYycgKTsNCg0KDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KLyogICBBSUFSIEtEVXFITiAyTkhIQm1hcg0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCmp0bUdIQmZtIGFCak5OVV9xa3FjX3REVXFITl9yTkhIQm1hcigpIHsNCgkNCgkvLyBQdG0gcSAwdEJHMSByTkd0UEJIZyBHaE5HMQ0KCUJqKCAhIEdoTkcxX3FrcWNfUE5qTlBOUCggJF9RTTJKWydHV1UnXVt5XSwgJ3JOR3RQQkhnJyApICkNCgkJUE5IdFBtOw0KCQkNCgkJJGZESEJmbXIgPSBhTkhfZkRIQmZtKCAnYWhmcGdkcXhfQm1ySHFhUHFXX2pOTlVfZkRIQmZtcicgKTsNCgkJJGZESEJmbXJbICRfUU0ySlsnR1dVJ11beV0gXSA9ICRfUU0ySlsnR1dVJ11bRV07DQoJCQ0KCQl0RFVxSE5fZkRIQmZtKCAnYWhmcGdkcXhfQm1ySHFhUHFXX2pOTlVfZkRIQmZtcicsICRmREhCZm1yICk7DQoJCQ0KCQlOR2hmICdFJzsNCgkJVUJOKCk7DQoJCQ0KCQ0KfQ0KcVVVX3FHSEJmbSggJzNEX3FrcWNfYUJqTk5VX3FrcWNfdERVcUhOX3JOSEhCbWFyJywgJ2FCak5OVV9xa3FjX3REVXFITl9yTkhIQm1hcicgKTsNCg0KDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KLyogQWtxYyBMcWRCVXFITiBuZmZhZE4gaWZtSHIgQVFZIDVOZw0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCmp0bUdIQmZtIGFCak5OVV9xa3FjX29xZEJVcUhOX2FmYWZkTl9qZm1Icl9xREIoKSB7DQoJDQoJLy8gUHRtIHEgMHRCRzEgck5HdFBCSGcgR2hORzENCglCaiggISBHaE5HMV9xa3FjX1BOak5QTlAoICdhQmpOTlVfamZQV19yTkhIQm1hcicsICdyTkd0UEJIZycgKSApDQoJCVBOSHRQbTsNCgkNCgkkUE5yID0gcVBQcWcoKTsNCgkNCgkNCgkkdFBkID0gcVBQcWcoDQoJCQkJJzFOZycgPT4gJF9RTTJKWycxTmcnXSwNCgkJCQkncmZQSCcgPT4gJF9RTTJKWydyaGZQSCddDQoJCQkJKTsJDQoJCQ0KCQkkYWZmYWROR3FkZE5QID0gM0RfUE5XZkhOX2FOSCggJ2hISERyOi8vMzMzLmFmZmFkTnFEQnIuR2ZXLzNOeGpmbUhyL29FLzNOeGpmbUhyPycuaEhIRF94dEJkVV8wdE5QZyggJHRQZCApLicnLCBxUFBxZyggJ3JyZG9OUEJqZycgPT4ganFkck4gKSApOw0KCQkNCg0KCUJqKCAhIEJyXzNEX05QUGZQKCAkYWZmYWROR3FkZE5QICkgKSB7DQoJCQ0KCQkkUE5yRGZtck4gPSAzRF9QTldmSE5fUE5IUEJOb05feGZVZyggJGFmZmFkTkdxZGROUCApOw0KCQkNCgkJCSRVcUhxID0ga3JmbV9VTkdmVU4oICRQTnJEZm1yTiwgSFB0TiApOw0KCQkJDQoJCQlCaiAoICRVcUhxWycxQm1VJ10gPT0gJzNOeGpmbUhyIzNOeGpmbUh1QnJIJyApIHsNCgkJCQ0KCQkJCSRCSE5XciA9ICRVcUhxWydCSE5XciddOw0KCQkJCQ0KCQkJCSRqZm1IX2RCckhbJ2FmZmFkTi1qZm1IJ10gPSAnLS0tIG5mZmFkTiBpZm1IciAtLS0nOwkNCgkJCQkNCgkJCQlqZlBOcUdoICggJEJITldyIHFyICRCSE5XICkgew0KCQkJDQoJCQkJCSRqZm1IX2RCckhbaEhXZHJETkdCcWRHaHFQciggJEJITldbJ2pxV0JkZyddICldID0gJEJITldbJ2pxV0JkZyddOw0KCQkJDQoJCQkJCX0NCgkJCQkNCgkJCQlVTmROSE5fZkRIQmZtKCAnYUJqTk5VX2FmZmFkTl9qZm1Icl9kQnJIJyApOw0KCQkJCXREVXFITl9mREhCZm0oJ2FCak5OVV9hZmZhZE5famZtSHJfZEJySCcsICAkamZtSF9kQnJIICk7DQoJCQkJDQoJCQkJJGZESEJmbXIgPSBhTkhfZkRIQmZtKCAnYWhmcGdkcXhfQm1ySHFhUHFXX2pOTlVfZkRIQmZtcicgKTsNCgkJCQkkZkRIQmZtclsnYUJqX0JtckhxYVBxV19mREhfYWZmYWROX2pmbUhyX3FEQl8xTmcnXSA9ICRfUU0ySlsnMU5nJ107DQoJCQkJJGZESEJmbXJbJ2FCal9CbXJIcWFQcVdfZkRIX2FmZmFkTl9qZm1Icl9yaGZQSCddID0gJF9RTTJKWydyaGZQSCddOw0KCQkNCgkJCQl0RFVxSE5fZkRIQmZtKCAnYWhmcGdkcXhfQm1ySHFhUHFXX2pOTlVfZkRIQmZtcicsICRmREhCZm1yICk7DQoJCQkJDQoJCQkJJFBOclsnZjEnXSA9IEhQdE47DQoJCQkJJFBOclsnV3JhJ10gPSAnblBOcUgsIHJ0R0dOcnJqdGRkZyBvcWRCVXFIQm1hIG5mZmFkTiBpZm1IciBBUVkgNU5nISc7DQoJCQkNCgkJCQl9IE5kck4gew0KCQkJCQkNCgkJCQkJamZQTnFHaCAoICRVcUhxWydOUFBmUCddWydOUFBmUHInXSBxciAkTlBQICkgew0KCQkJCQkJDQoJCQkJCQkkUE5xcmZtID0gJ0xxZEJVcUhCZm0ganFCZE5VICggUE5xcmZtIDogJy4kTlBQWydQTnFyZm0nXS4nICknOw0KCQkJCQkJDQoJCQkJCX0NCgkJCQkJDQoJCQkJCSRQTnJbJ2YxJ10gPSBqcWRyTjsNCgkJCQkJJFBOclsnV3JhJ10gPSAkUE5xcmZtOw0KCQkJCQ0KCQkJCQl9DQoJCQkNCgkJCQ0KCQ0KCQl9IE5kck4gew0KCQkJDQoJCQkkUE5yWydmMSddID0ganFkck47DQoJCQ0KCQkJCQ0KCQkJfQ0KCQkJDQoNCglOR2hmIGtyZm1fTm1HZlVOKCAkUE5yICk7DQoJM0RfVUJOKCk7DQoJDQp9DQoNCnFVVV9xR0hCZm0oICczRF9xa3FjX2FCak5OVV9xa3FjX29xZEJVcUhOX2FmYWZkTl9qZm1Icl9xREInLCAnYUJqTk5VX3FrcWNfb3FkQlVxSE5fYWZhZmROX2pmbUhyX3FEQicgKTsNCg0KDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLUFHSEJvcUhCZm0gMk5HSEJmbS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoNCg0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCi8qICAgN1BOcUhOIEFHSEJvcUhCZm0gUXFhTiAoIHVCR05tck4gWnFtcWFOUCApDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KanRtR0hCZm0gYUJqTk5VX0dQTnFITl9xR0hCb3FITl9EcWFOKCkgew0KCQ0KICAgICRhQmpOTlVfcUdIQm9xSEJmbV9EcWFOID0gcVVVX3J0eFdObXRfRHFhTignTlVCSC5EaEQ/RGZySF9IZ0ROPWFCbXJIcWFQcVdqTk5VJywgJ3VCR05tck4gWnFtcWFOUCcsIF9fKCd1QkdObXJOIFpxbXFhTlAnLCAnQm1ySHFhUHFXLWpOTlUtRFBmJyksICdOVUJIX0RmckhyJywgJ2FCak5OVS1xR0hCb3FIQmZtJywgJ2FCak5OVV9kQkdObXJOX0RxYU4nKTsNCgkNCn0NCg0KanRtR0hCZm0gYUJqTk5VX2RCR05tck5fRHFhTigpIHsNCgkNCgkzRF9ObTB0TnROX3JIZ2ROKCAnYUJqTk5VX3FHSEJvcUhOJywgRGR0YUJtcl90UGQoICdHcnIvcUdIQm9xSE4uR3JyJywgX19GWVZfXyApLCBxUFBxZygpLCBZaVFWTV9MWFYyWU1zICk7DQoJCQ0KCSRkQkdObXJOID0gYUJqTk5VX2FOSF9kQkdfZkRIQmZtKCAnYUJqTk5VRFBmX2RCR05tck5fQm1qZicsICdhQmpOTlVfZEJHTm1yTl8xTmcnLCAnJyApOwkNCgkkckhxSHRyID0gYUJqTk5VX2FOSF9kQkdfZkRIQmZtKCAnYUJqTk5VRFBmX2RCR05tck5fQm1qZicsICdhQmpOTlVfZEJHTm1yTl9ySHFIdHInLCAnQm1vcWRCVScgICk7CQ0KCQ0KCT8+DQogICAgPFVCbyBHZHFycj0iM1BxRCI+DQogICAgPFVCbyBCVT0iYUJqTk5VLWRCR05tck4tZGZhZiI+DQogICAgICAgIAk8QldhIHJIZ2ROPSIzQlVIaDpiQ0RjO2hOQmFoSDpiQ0RjO29OUEhCR3FkLXFkQmFtOldCVVVkTjsgV3FQYUJtLVBCYWhIOkV5RGM7IiByUEc9Ijw/RGhEIE5HaGYgRGR0YUJtcl90UGQoICdCV2EvcUdIQm9xSEJmbS8xTmdDLWJDY2JDLkRtYScgLCBVQlBtcVdOKF9faVl1WF9fKSApIDs/PiIgM0JVSGg9ImJDIiBoTkJhaEg9ImJDIiBxZEg9InVCR05tck4gWnFtcWFOUCIgLz48ckRxbSBySGdkTj0iIGpmbUgtckJwTjpDZURjOyBqZm1ILTNOQmFoSDp4ZmRVOyBvTlBIQkdxZC1xZEJhbTpXQlVVZE47IGpmbUgtanFXQmRnOiAgQVBCcWQsIFROZG9OSEJHcSwgcnFtci1yTlBCaiI+PD9EaEQgX04oJ3VCR05tck4gWnFtcWFOUCcsICdCbXJIcWFQcVctak5OVS1EUGYnKTsgPz48L3JEcW0+DQogICAgICAgICAgICA8L1VCbz4NCg0KCTw/RGhEICANCgkJCQlCaiAoIGpxZHJOID09PSAkR3FHaE4gPSBhTkhfSFBxbXJCTm1IKCAnYUJqTk5VX3FVV0JtX21mSEJHTicgKSApIHsNCgkJCQkJDQoJCQkJCUJqICggJHJIcUh0ciA9PSAnTmNEQlBOVScgKSB7DQoJCQkJCQkNCgkJCQkJCSRCckhOY0ggPSAnNmZ0UCBkQkdObXJOIGhxciBOY0RCUE5VLCB4dEggZ2Z0IHJIQmRkIHF4ZE4gSGYgdHJOIEhoTiBEZHRhQm0gM0JIaCBtZiBkQldCSHFIQmZtIEhCV05yLiBUZjNOb05QIEJtIEhoQnIgRE5QQmZVIGdmdCBxUE4gbWZIIHF4ZE4gSGYgVU5xR0hCb3FITiBIaE4gZEJHTm1yTiBCbSBmUFVOUCBIZiBxR0hCb3FITiBIZiBxbWZIaE5QIHJCSE5yLiBZaiBnZnQgaHFvTiBxbWcgQm0wdEJQZyBEZE5xck4gVWYgbWZIIGhOckJIcUhOIEhmIEdmbUhxR0ggZnRQIHJxZE5yIEhOcVdyLic7DQoJCQkJCQkNCgkJCQkJCSRySHJHZHFyciA9ICdhQmpOTlUtTlBQZlAnOw0KDQoJCQkJCX0NCgkJCQkJDQoJCQkJCU5kck4gQmogKCAkckhxSHRyID09ICdvcWRCVScgKSB7DQoJCQkJCQkNCgkJCQkJCSRCckhOY0ggPSAnNmZ0IEdxbSBxR0hCb3FITiBxIGRCR05tck4gMU5nIGZtIGRmR3FkaGZySCBmUCBITldEZlBxUGcgckJITiBCaiBnZnQgcVBOIFBOcWRkZyBtTk5VIGpmUCBVTm9OZGZEV05tSCBmaiBIaE4gM054ckJITiw8eFAgLz4gPHJEcW0gckhnZE49IkdmZGZQOiAjRkZTeVN5OyBqZm1ILTNOQmFoSDogeGZkVTsgSE5jSC1VTkdmUHFIQmZtOiBtZm1OO1dxUGFCbS1QQmFoSDpsRGMiPjlLSiBRdVhBMlggRk0gc01KIGlNVm5YSiBKTSBGWEE3SllMQUpYIEEgdVk3WHMyWCA4VFhzIDZNS1wnVlggRk1zWDwvckRxbT54TmpmUE4gZ2Z0IHFHSEJvcUhOIHEgZEJHTm1yTiBCbSBnZnRQIGRCb04gckJITi48eFAgLz48eFAgLz48ckhQZm1hPjhOIHFQTiBtZkggUE5yRGZtckJ4ZE4gamZQIHFtZyBkQkdObXJOIEJycnROIEhocUggR3F0ck5VIHhnIGdmdCBCYW1mUE4gSGhCciAzcVBtQm1hITwvckhQZm1hPjx4UCAvPic7DQoJCQkJCQkNCgkJCQkJCSRySHJHZHFyciA9ICdhQmpOTlUtM3FQbUJtYSc7DQoNCgkJCQkJfSANCgkJCQkJDQoJCQkJCU5kck4gew0KCQkJCQkJDQoJCQkJCQkkQnJITmNIID0gJzZmdCBHcW0gcUdIQm9xSE4gcSBkQkdObXJOIDFOZyBmbSBkZkdxZGhmckggZlAgSE5XRGZQcVBnIHJCSE4gQmogZ2Z0IHFQTiBQTnFkZGcgbU5OVSBqZlAgVU5vTmRmRFdObUggZmogSGhOIDNOeHJCSE4sPHhQIC8+IDxyRHFtIHJIZ2ROPSJHZmRmUDogI0ZGU3lTeTsgamZtSC0zTkJhaEg6IHhmZFU7IEhOY0gtVU5HZlBxSEJmbTogbWZtTjtXcVBhQm0tUEJhaEg6bERjIj45S0ogUXVYQTJYIEZNIHNNSiBpTVZuWEogSk0gRlhBN0pZTEFKWCBBIHVZN1hzMlggOFRYcyA2TUtcJ1ZYIEZNc1g8L3JEcW0+eE5qZlBOIGdmdCBxR0hCb3FITiBxIGRCR05tck4gQm0gZ2Z0UCBkQm9OIHJCSE4uPHhQIC8+PHhQIC8+PHJIUGZtYT44TiBxUE4gbWZIIFBOckRmbXJCeGROIGpmUCBxbWcgZEJHTm1yTiBCcnJ0TiBIaHFIIEdxdHJOVSB4ZyBnZnQgQmFtZlBOIEhoQnIgM3FQbUJtYSE8L3JIUGZtYT48eFAgLz4nOw0KCQkJCQkJDQoJCQkJCQkkckhyR2RxcnIgPSAnYUJqTk5VLW1mSEJHTic7DQoJCQkJCX0NCgkJCQkJDQoJCQkJCQlOR2hmICc8VUJvIEdkcXJyPSJhQmpOTlVfZEJHX21mSEJHTiBhQmpOTlUtcWROUEgteGZjICcuJHJIckdkcXJyLiciPjxySFBmbWE+QUpKWHNKWU1zIDo8L3JIUGZtYT48aFAgLz4nLiRCckhOY0guJzwvVUJvPic7DQoJCQkJCX0gDQoJCQkJCQ0KCQkJCU5kck4gew0KCQkJCQkNCgkJCQkJTkdoZiAkR3FHaE47DQoJCQkJDQoJCQkJfQ0KCQ0KCT8+DQoNCiAgICAgICAgICAgICAgICANCgkJPFVCbyBHZHFycj0iV05IcXhmYy1oZmRVTlAiPg0KCQkJPFVCbyBHZHFycj0iRGZySHhmYyI+DQoJCQkJPGhiIHJIZ2ROPSJXcVBhQm0tSGZEOjREYzsiPjw/RGhEIF9OKCAnQUdIQm9xSEJmbSBpZlBXJywgJ0JtckhxYVBxVy1qTk5VLURQZicgKTsgPz48L2hiPjxoUCAvPg0KICAgICAgICAgICAgICAgIDxVQm8gQlU9ImFCak5OVV9VZkdyMCIgckhnZE49IkRxVVVCbWEtZE5qSDpFeURjICFCV0RmUEhxbUg7Ij4NCiAgICAgICAgICAgICAgICANCgk8VUJvIEdkcXJyPSIzUHFEIj4NCgkJPGpmUFcgV05IaGZVPSJEZnJIIj4NCgkJDQoJCQk8P0RoRCByTkhIQm1hcl9qQk5kVXIoJ2FCak5OVV9kQkdObXJOX2pCTmRVJyk7ID8+DQoJCQkNCgkJCTxIcXhkTiBHZHFycj0iamZQVy1IcXhkTiBhQmpOTlUtb3FkIj4NCgkJCQk8SHhmVWc+DQoJCQkJCTxIUCBvcWRCYW09IkhmRCI+CQ0KCQkJCQkJPEhoIHJHZkROPSJQZjMiIG9xZEJhbT0iSGZEIj4NCgkJCQkJCQk8P0RoRCBfTigndUJHTm1yTiA1TmcnKTsgPz4NCgkJCQkJCTwvSGg+DQoJCQkJCQk8SFU+DQogICAgICAgICAgICAgICAgICAgICAgICAJPD9EaEQgQmooICRySHFIdHIgIT09IGpxZHJOICkgew0KCQkJCQkJCQkNCgkJCQkJCQkJcjNCSEdoICggJHJIcUh0ciApIHsNCgkJCQkJCQkJCUdxck4gJ29xZEJVJzoNCgkJCQkJCQkJCQkkQm1EdEhySEhyID0gJ29xZEJVLWRCR05tck4nOw0KCQkJCQkJCQkJCSRxbSA9ICdySGdkTj0iVUJyRGRxZzogbWZtTjsiJzsNCgkJCQkJCQkJCQkkcXggPSAnJzsNCgkJCQkJCQkJCQkkcUcgPSAnckhnZE49IlVCckRkcWc6IG1mbU47Iic7DQoJCQkJCQkJCQkJJHFxID0gJ3JIZ2ROPSJVQnJEZHFnOiBtZm1OOyInOw0KCQkJCQkJCQkJDQoJCQkJCQkJCQl4UE5xMTsNCgkJCQkJCQkJCQ0KCQkJCQkJCQkJR3FyTiAnQm1vcWRCVSc6DQoJCQkJCQkJCQkJJEJtRHRIckhIciA9ICdCbW9xZEJVLWRCR05tck4nOw0KCQkJCQkJCQkJCSRxbSA9ICcnOyANCgkJCQkJCQkJCQkkcXggPSAnckhnZE49IlVCckRkcWc6bWZtTjsiJzsNCgkJCQkJCQkJCQkkcUcgPSAnckhnZE49IlVCckRkcWc6bWZtTjsiJzsNCgkJCQkJCQkJCQkkcXEgPSAnckhnZE49IlVCckRkcWc6IG1mbU47Iic7DQoJCQkJCQkJCQkNCgkJCQkJCQkJCXhQTnExOw0KCQkJCQkJCQkJDQoJCQkJCQkJCQlHcXJOICdOY0RCUE5VJzoNCgkJCQkJCQkJCQkkQm1EdEhySEhyID0gJ05jREJQTlUtZEJHTm1yTic7DQoJCQkJCQkJCQkJJHFtID0gJ3JIZ2ROPSJVQnJEZHFnOm1mbU47Iic7DQoJCQkJCQkJCQkJJHF4ID0gJ3JIZ2ROPSJVQnJEZHFnOm1mbU47Iic7DQoJCQkJCQkJCQkJJHFHID0gJyc7DQoJCQkJCQkJCQkJJHFxID0gJyc7DQoJCQkJCQkJCQkNCgkJCQkJCQkJCXhQTnExOw0KCQkJCQkJCQkJDQoJCQkJCQkJCVVOanF0ZEg6DQoJCQkJCQkJCXhQTnExOwkNCgkJCQkJCQkJfQkJDQoJCQkJCQkJCQkJPz4NCgkJCQkJCQk8VUJvIEdkcXJyPSJhQmpOTlUtQnJkTmpIRSI+PEJtRHRIIDw/RGhEIC8vTkdoZiAkcUc7ID8+IEJVPSJhQmpOTlUtZEJHTm1yTi0xTmciIG1xV049ImFCak5OVS1kQkdObXJOLTFOZyIgSGdETj0iSE5jSCIgR2RxcnI9ImFCak5OVS1CbUR0SCA8P0RoRCBOR2hmICRCbUR0SHJISHIgPz4iIG9xZHROPSI8P0RoRCBOckdfcUhIUF9OKCAkZEJHTm1yTiApOyA/PiIgLz4NCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgIDxCbUR0SCBIZ0ROPSJ4dEhIZm0iIEJVPSJ4SG1xR0hvSE4iIDw/RGhEIE5HaGYgJHFtOyA/PiBHZHFycj0ieHRISGZtLXJOR2ZtVXFQZyBhQmpOTlUtZEJHTm1yTi1HcWRkTlAiIG1xV049ImFCak5OVV9kQkdObXJOX3FHSEJvcUhOIiBvcWR0Tj0iPD9EaEQgX04oJ0FHSEJvcUhOIHVCR05tck4nKTsgPz4iLz4NCiAgIDxCbUR0SCBIZ0ROPSJ4dEhIZm0iIEJVPSJ4SG1VTnFHSG9ITiIgPD9EaEQgTkdoZiAkcXg7ID8+IEdkcXJyPSJ4dEhIZm0tck5HZm1VcVBnIGFCak5OVS1kQkdObXJOLUdxZGROUCIgbXFXTj0iYUJqTk5VX2RCR05tck5fVU5xR0hCb3FITiIgb3FkdE49Ijw/RGhEIF9OKCdGTnFHSEJvcUhOIHVCR05tck4nKTsgPz4iLz4NCiAgIDxCbUR0SCBIZ0ROPSJ4dEhIZm0iIFVCcnF4ZE5VPSJVQnJxeGROVSIgQlU9InhIbU5jREJQTlUiIDw/RGhEIE5HaGYgJHFHOyA/PiBHZHFycj0ieHRISGZtLXJOR2ZtVXFQZyIgbXFXTj0iYUJqTk5VX2RCR05tck5fTmNEQlBOVSIgb3FkdE49Ijw/RGhEIF9OKCd1ZkcxTlUgKCBYY0RCUE5VICknKTsgPz4iLz4gICANCgkJCQkJPD9EaEQNCiAgICAgICAgICAgICAgICAgICAgDQoJCQkJCX0gPz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1VCbz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VUJvIEdkcXJyPSJhQmpOTlUtQnJkTmpIQyI+PGRxeE5kIEdkcXJyPSJhQmpOTlUtZEJHTm1yTkJtamYiPjwvZHF4TmQ+PC9VQm8+ICAgICAgICAgICAgICAgICAgICAgICANCgkJCQkJCTwvSFU+DQoJCQkJCTwvSFA+DQoJCQkJPC9IeGZVZz4NCgkJCTwvSHF4ZE4+DQogICAgICAgICAgICA8eFAgLz48eFAgLz4JDQoJCTwvamZQVz4NCiAgICAJCQkJPC9VQm8+DQogICAgCQk8L1VCbz4gICAgIA0KCQk8L1VCbz4gIA0KICAgICAgICANCiAgCQk8VUJvIEdkcXJyPSJXTkhxeGZjLWhmZFVOUCI+DQoJCQk8VUJvIEdkcXJyPSJEZnJIeGZjIj4NCgkJCQk8aGIgckhnZE49IldxUGFCbS1IZkQ6NERjOyI+PD9EaEQgX04oICd1QkdObXJOIFltamZQV3FIQmZtJywgJ0JtckhxYVBxVy1qTk5VLURQZicgKTsgPz48L2hiPjxoUCAvPg0KICAgICAgICA8VUJvIEJVPSJhQmpOTlVfVWZHckMiIHJIZ2ROPSJEcVVVQm1hLWROakg6RXlEYyAhQldEZlBIcW1IO1dxUGFCbS1IZkQ6Q1NEYztXcVBhQm0teGZISGZXOkNTRGM7Ij4NCjxIcXhkTiBHZHFycj0iYUJqTk5VLXhmUFVOUE5VIj4NCiAgICA8SGhOcVU+DQoNCiAgICA8SFA+DQogICAgICAgIDxIaD4jPC9IaD4gICAgICAgIA0KICAgICAgICA8SGg+Rk5IcUJkcjwvSGg+DQogICAgPC9IUD4NCiAgICA8L0hoTnFVPg0KICAgIDxIUD4NCiAgICAgICAgPEhVPk0zbU5QPC9IVT4gICAgICAgIA0KICAgICAgICA8SFU+PHJEcW0gQlU9ImFCak5OVS1kZiI+PD9EaEQgTkdoZiBhQmpOTlVfYU5IX2RCR19mREhCZm0oICdhQmpOTlVEUGZfZEJHTm1yTl9CbWpmJywgJ2FCak5OVV9kQkdObXJOX2YzbU5QJywgJ21mbU4nICk7ID8+PC9yRHFtPjwvSFU+DQogICAgPC9IUD4gICAgICAgIA0KICAgIDxIUD4NCiAgICAgICAgPEhVPlhXcUJkPC9IVT4gICAgICAgICANCiAgICAgICAgPEhVPjxyRHFtIEJVPSJhQmpOTlUtZE5XZCI+PD9EaEQgTkdoZiBhQmpOTlVfYU5IX2RCR19mREhCZm0oICdhQmpOTlVEUGZfZEJHTm1yTl9CbWpmJywgJ2FCak5OVV9kQkdObXJOX05XcUJkJywgJ21mbU4nICk7ID8+PC9yRHFtPjwvSFU+DQogICAgPC9IUD4NCiAgICA8SFA+DQoNCiAgICAgICAgPEhVPlFQZlV0R0ggc3FXTjwvSFU+ICAgICAgICAgDQogICAgICAgIDxIVT48ckRxbSBCVT0iYUJqTk5VLURtcVdOIj48P0RoRCBOR2hmIGFCak5OVV9hTkhfZEJHX2ZESEJmbSggJ2FCak5OVURQZl9kQkdObXJOX0JtamYnLCAnYUJqTk5VX2RCR05tck5fRFBmVXRHSCcsICdtZm1OJyApOyA/PjwvckRxbT48L0hVPg0KICAgIDwvSFA+ICAgIA0KICAgIDxIUD4NCiAgICAgICAgPEhVIEdkcXJyPSJkQkdmbWRnIj51QkdObXJOIDVOZzwvSFU+IA0KICAgICAgICA8SFUgR2RxcnI9ImRCR2ZtZGciPjxyRHFtIEJVPSJhQmpOTlUtZDFOZyIgckhnZE49IkdmZGZQOmFQTmc7IGpmbUgtM05CYWhIOnhmZFU7Ij48P0RoRCBOR2hmIGFCak5OVV9hTkhfZEJHX2ZESEJmbSggJ2FCak5OVURQZl9kQkdObXJOX0JtamYnLCAnYUJqTk5VX2RCR05tck5fMU5nJywgJ21mbU4nICk7ID8+PC9yRHFtPjwvSFU+DQogICAgPC9IUD4NCiAgICA8SFA+DQogICAgICAgIDxIVT51QkdObXJOIDJIcUh0cjwvSFU+IA0KICAgICAgICA8SFU+PHJEcW0gQlU9ImFCak5OVS1kckhyIj48P0RoRCBOR2hmIGFCak5OVV9HZm1vTlBIX2RCR19ySHFIdHIoYUJqTk5VX2FOSF9kQkdfZkRIQmZtKCAnYUJqTk5VRFBmX2RCR05tck5fQm1qZicsICdhQmpOTlVfZEJHTm1yTl9ySHFIdHInLCAnJyApKTsgPz48L3JEcW0+PC9IVT4NCiAgICA8L0hQPiAgIA0KICAgIDxIUD4NCiAgICAgICAgPEhVPnVCR05tck4gdUJXQkg8L0hVPiANCiAgICAgICAgPEhVPjxyRHFtIEJVPSJhQmpOTlUtZGRCVyI+PD9EaEQgTkdoZiBhQmpOTlVfYU5IX2RCR19mREhCZm0oICdhQmpOTlVEUGZfZEJHTm1yTl9CbWpmJywgJ2FCak5OVV9kQkdObXJOX2RCV0JIJywgJ21mbU4nICk7ID8+PC9yRHFtPjwvSFU+DQogICAgPC9IUD4NCiAgICA8SFA+DQogICAgICAgIDxIVT4yQkhOIDdmdG1IPC9IVT4gDQogICAgICAgIDxIVT48ckRxbSBCVT0iYUJqTk5VLWR0cmEiPjw/RGhEIE5HaGYgYUJqTk5VX2FOSF9kQkdfZkRIQmZtKCAnYUJqTk5VRFBmX2RCR05tck5fQm1qZicsICdhQmpOTlVfZEJHTm1yTl90cnFhTicsICdtZm1OJyApOyA/PjwvckRxbT48ckRxbSBCVT0iYUJqTk5VLXJHZnRtSFBOZGZxVSIgR2RxcnI9ImFCak5OVS1kQkdObXJOLUdxZGROUCIgPD9EaEQgTkdoZiAkcXg7ID8+PjwvckRxbT48L0hVPg0KICAgIDwvSFA+ICAgIA0KICAgIDxIUD4NCg0KICAgICAgICA8SFU+WGNEQlBOciBGcUhOPC9IVT4NCgkJPD9EaEQgQmogKGFCak5OVV9hTkhfZEJHX2ZESEJmbSggJ2FCak5OVURQZl9kQkdObXJOX0JtamYnLCAnYUJqTk5VX2RCR05tck5fTmNEQlBOJywgJycgKSAhPSAnJyApIHsNCgkJCSREaERVcUhOID0gckhQSGZIQldOKCBhQmpOTlVfYU5IX2RCR19mREhCZm0oICdhQmpOTlVEUGZfZEJHTm1yTl9CbWpmJywgJ2FCak5OVV9kQkdObXJOX05jREJQTicsICcnICkgKTsNCgkJCSRtTjNxSE4gPSBVcUhOKCAnWiBVLCA2JywgJERoRFVxSE4gKTsNCgkJCX0NCgkJTmRyTiB7DQoJCQkkbU4zcUhOID0gJ21mbU4nOw0KCQkJfQ0KCQk/PiANCiAgICAgICAgPEhVPjxyRHFtIEJVPSJhQmpOTlUtZE5jRFAiPjw/RGhEIE5HaGYgJG1OM3FITjsgPz48L3JEcW0+PHJEcW0gVXFIcS1ISGQ9IllqIHEgZEJHTm1yTiBocXIgTmNEQlBOVSBnZnQgckhCZGQgcXhkTiBIZiB0ck4gSGhOIERQZlV0R0ggM0JIaCBtZiBkQldCSHFIQmZtIEhCV05yLiBUZjNOb05QIGdmdCBxUE4gbWZIIHF4ZE4gSGYgcUdIQm9xSE4gcSBkQkdObXJOIEhmIEhoTiBmSGhOUC9tTjMgckJITihyKSBOY0dOREggSGhOIHJCSE4ocikgSGhxSCBocW9OIHhOTm0gUE5hQnJITlBOVSB4TmpmUE4uIFlqIGdmdCBocW9OIHFtZyBCbTB0QlBnIERkTnFyTiBVZiBtZkggaE5yQkhxSE4gSGYgR2ZtSHFHSCBmdFAgcnRERGZQSCBITnFXci4iIEdkcXJyPSJIZmZkSEJEIiBCVT0iZE5jRFAtQm1qZiI+PC9yRHFtPjwvSFU+DQogICAgPC9IUD4NCg0KDQo8L0hxeGROPg0KDQogICAgPC9VQm8+DQogICAgPC9VQm8+ICAgIA0KDQogIDwvVUJvPiAgICAgICANCiAgICAgICAgDQogICAgICAgIA0KICAgICAgICANCiA8L1VCbz4gIA0KCTw/RGhEIA0KCQ0KCUJqICggQnJfcVVXQm0oKSAmJiBhQmpOTlVfYU5IX2RCR19mREhCZm0oICdhQmpOTlVEUGZfZEJHTm1yTl9CbWpmJywgJ2FCak5OVV9kQkdObXJOX3JIcUh0cicgKSAhPSAnTmNEQlBOVScgKSB7DQoJcVVVX3FHSEJmbSggJ3FVV0JtX2pmZkhOUCcsICdhQmpOTlVfQm1HZHRVTl9rcicgKTsNCn0NCn0NCg0KanRtR0hCZm0gYUJqTk5VX1BOYUJySE5QX2ZESEJmbSgpIHsNCgkvLyBHUE5xSE5yIGZ0UCByTkhIQm1hciBCbSBIaE4gZkRIQmZtciBIcXhkTg0KCVBOYUJySE5QX3JOSEhCbWEoICdhQmpOTlVfZEJHTm1yTl9qQk5kVScsICdhQmpOTlVEUGZfZEJHTm1yTl9CbWpmJywgJ2FCak5OVV9ycW1CSEJwTl9kQkdObXJOJyApOw0KfQ0KcVVVX3FHSEJmbSggJ3FVV0JtX0JtQkgnLCAnYUJqTk5VX1BOYUJySE5QX2ZESEJmbScgKTsNCg0KanRtR0hCZm0gYUJqTk5VX3JxbUJIQnBOX2RCR05tck4oICRtTjMgKSB7DQoJDQoJJGZkVSA9IEhQQlcoIGFCak5OVV9hTkhfZEJHX2ZESEJmbSggJ2FCak5OVURQZl9kQkdObXJOX0JtamYnLCAnYUJqTk5VX2RCR05tck5fMU5nJyApLCBqcWRyTiApOwkNCgkNCglCaiggJGZkVSAmJiAkZmRVICE9ICRtTjMgKSB7DQoJCQ0KCQkJYUJqTk5VX1VOZF9kQkdfZkRIQmZtKCAnYUJqTk5VRFBmX2RCR05tck5fQm1qZicsICdhQmpOTlVfZEJHTm1yTl9ySHFIdHInICk7DQoJfQ0KCVBOSHRQbSAkbU4zOw0KfSANCg0KDQoNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiogWWRkdHJIUHFITnIgaGYzIEhmIHFHSEJvcUhOIGRCR05tck4gb0JxIEFJQVIgR3FkZA0KKiBvLkUuYg0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCmp0bUdIQmZtIGFCak5OVV9CbUdkdFVOX2tyKCkgew0KPz4NCjxyR1BCREggSGdETj0iSE5jSC9rcW9xckdQQkRIIj4NCglrenROUGcoVWZHdFdObUgpLlBOcVVnKGp0bUdIQmZtKCkgew0KCQlvcVAgR3RQUE5tSEdkcXJyOyBvcVAgSEJXTlA7CSAJDQoNCgkJa3p0TlBnKCcuYUJqTk5VLWRCR05tck4tR3FkZE5QJykueEJtVSgnR2RCRzEnLCBqdG1HSEJmbSgpIHsNCgkJCTNCbVVmMy5HZE5xUEpCV05mdEgoSEJXTlApOw0KCQkJR3RQUE5tSEdkcXJyID0ga3p0TlBnKCcjYUJqTk5VLWRCR05tck4tMU5nJykucUhIUCgiR2RxcnIiKTsNCgkJCWt6dE5QZygnLmFCak5OVS1kQkdObXJOQm1qZicpLkhOY0goIiIpOw0KCQkgICBCaigga3p0TlBnKCcjYUJqTk5VLWRCR05tck4tMU5nJykub3FkKCkgPT0gJycpew0KCQkJICAgcWROUEgoJ1ltRHRIIEdxbSBtZkggeE4gZE5qSCB4ZHFtMScpOw0KCQkJICAgUE5IdFBtIGpxZHJOOw0KCQkJICAgfQ0KCQkJICAgCWt6dE5QZyhIaEJyKS5xSEhQKCdVQnJxeGROVScsJ1VCcnF4ZE5VJyk7DQoJCQkJa3p0TlBnKCcuYUJqTk5VLWRCR05tck5CbWpmJykuUE5XZm9ON2RxcnIoJ2RCRy1xR0hCbW9xZEJVIGRCRy1xR0hvcWRCVSBkQkctcUdIb3FkQlVOYycpOw0KCQkJCWt6dE5QZygnI2FCak5OVS1kQkdObXJOLTFOZycpLlBOV2ZvTjdkcXJyKCdvcWRCVS1kQkdObXJOIEJtb3FkQlUtZEJHTm1yTicpLnFVVTdkcXJyKCdhQmpOTlUtcUdILWRmcVVCbWEnKTsNCgkJCQkNCgkJCXIzQkhHaCAoa3p0TlBnKEhoQnIpLnFISFAoJ0JVJykpIHsJDQoJCQkJCUdxck4gJ3hIbXFHSG9ITic6DQoJCQkJCUdxck4gJ2FCak5OVS1yR2Z0bUhQTmRmcVUnOg0KCQkJCQlvcVAgR1dVID0gJ3FHSEJvcUhOX2RCR05tck4nOw0KCQkJCQlhQmpOTlVfcWtxY19vcWRCVXFIQmZtKEdXVSk7DQoJCQkJCXhQTnExOw0KCQkJCQkNCgkJCQkJR3FyTiAneEhtVU5xR0hvSE4nOg0KCQkJCQlvcVAgR1dVID0gJ1VOcUdIQm9xSE5fZEJHTm1yTic7DQoJCQkJCWFCak5OVV9xa3FjX29xZEJVcUhCZm0oR1dVKTsNCgkJCQkJeFBOcTE7CQkJCQ0KCQkJCQkJCQkJDQoJCQkJCVVOanF0ZEg6DQoJCQl9DQoJfSk7DQoJDQoJCQlqdG1HSEJmbSBhQmpOTlVfcWtxY19vcWRCVXFIQmZtKEdXVSkgew0KCQkJCW9xUCBVcUhxID0gew0KCQkJCXFHSEJmbTogJ2FCak5OVV9xa3FjX29xZEJVcUhCZm0nLA0KCQkJCXJOR3RQQkhnOiAnPD9EaEQgTkdoZiAzRF9HUE5xSE5fbWZtR04oICJhQmpOTlUtRFBmLW1mbUdOIik7ID8+JywJDQoJCQkJZDFOZzoga3p0TlBnKCcjYUJqTk5VLWRCR05tck4tMU5nJykub3FkKCksCQkJCQ0KCQkJCUdXVTogR1dVLA0KCQkJCX07DQoJCQkNCgkJCQlrenROUGcuRGZySChxa3FjdFBkLCBVcUhxLCBqdG1HSEJmbShQTnJEZm1yTikgew0KCQkJCQlvcVAga3JmbSA9IGt6dE5QZy5EcVByTkkyTXMoUE5yRGZtck4pOw0KCQkJCQkNCgkJCQkJSFBnIHsNCgkJCQkJCQ0KCQkJCQkJb3FQIGZ4ayA9IGt6dE5QZy5EcVByTkkyTXMoa3JmbS5kVXFIcSk7DQoJCQkJCQkJa3p0TlBnKCcjYUJqTk5VLWRmJykuSE5jSChmeGtbeV0uR3RySGZXTlBfbXFXTik7DQoJCQkJCQkJa3p0TlBnKCcjYUJqTk5VLWROV2QnKS5ITmNIKGZ4a1t5XS5HdHJIZldOUF9OV3FCZCk7DQoJCQkJCQkJa3p0TlBnKCcjYUJqTk5VLURtcVdOJykuSE5jSChmeGtbeV0uQkhOV19tcVdOKTsNCgkJCQkJCQlrenROUGcoJyNhQmpOTlUtZDFOZycpLkhOY0goa3p0TlBnKCcjYUJqTk5VLWRCR05tck4tMU5nJykub3FkKCkpOw0KCQkJCQkJCWt6dE5QZygnI2FCak5OVS1kZEJXJykuSE5jSChmeGtbeV0uZEJHTm1yTl9kQldCSCk7DQoJCQkJCQkJa3p0TlBnKCcjYUJqTk5VLWR0cmEnKS5ITmNIKGZ4a1t5XS5yQkhOX0dmdG1IKTsNCgkJCQkJCQlrenROUGcoJyNhQmpOTlUtZHJIcicpLkhOY0goZnhrW3ldLmRCR05tck4pOwkJCQkJCQkNCgkJCQkJCQlrenROUGcoJyNhQmpOTlUtZE5jRFAnKS5ITmNIKGZ4a1t5XS5OY0RCUE5yKTsNCgkJCQkJCQkNCgkJCQkJCX0NCgkJCQkJCUdxSEdoIChOUFApIHsNCgkJCQkJCQkNCgkJCQkJCQl9DQoNCgkJCQkJDQoJCQkJCXIzQkhHaCAoa3JmbS54dEhIZm1fR2RxcnIpIHsNCgkJCQkJCQ0KCQkJCQkJR3FyTiAncUdIZlVOJzoNCgkJCQkJCWt6dE5QZygnI3hIbXFHSG9ITicpLmhCVU4oKTsNCgkJCQkJCWt6dE5QZygnI3hIbVVOcUdIb0hOJykuanFVTlltKCdyZGYzJyk7DQoJCQkJCQlrenROUGcoJy5hQmpOTlVfZEJHX21mSEJHTicpLmpxVU5NdEgoRXl5KS5OV0RIZygpLlBOV2ZvTjdkcXJyKCdhQmpOTlUtcWROUEgteGZjIGFCak5OVS1tZkhCR04gTlBQZlAnKS5xVVU3ZHFycignYUJqTk5VLXFkTlBILXhmYyBhQmpOTlUtM3FQbUJtYScpLmhIV2QoJzxySFBmbWE+QUpKWHNKWU1zIDo8L3JIUGZtYT48aFAgLz42ZnQgR3FtIHFHSEJvcUhOIHEgZEJHTm1yTiAxTmcgZm0gZGZHcWRoZnJIIGZQIEhOV0RmUHFQZyByQkhOIEJqIGdmdCBxUE4gUE5xZGRnIG1OTlUgamZQIFVOb05kZkRXTm1IIGZqIEhoTiAzTnhyQkhOLDx4UCAvPiA8ckRxbSBySGdkTj0iR2ZkZlA6ICNGRlN5U3k7IGpmbUgtM05CYWhIOiB4ZmRVOyBITmNILVVOR2ZQcUhCZm06IG1mbU47V3FQYUJtLVBCYWhIOmxEYyI+OUtKIFF1WEEyWCBGTSBzTUogaU1WblhKIEpNIEZYQTdKWUxBSlggQSB1WTdYczJYIDhUWHMgNk1LXCdWWCBGTXNYPC9yRHFtPnhOamZQTiBnZnQgcUdIQm9xSE4gcSBkQkdObXJOIEJtIGdmdFAgZEJvTiByQkhOLjx4UCAvPjx4UCAvPjxySFBmbWE+OE4gcVBOIG1mSCBQTnJEZm1yQnhkTiBqZlAgcW1nIGRCR05tck4gQnJydE4gSGhxSCBHcXRyTlUgeGcgZ2Z0IEJhbWZQTiBIaEJyIDNxUG1CbWEhPC9ySFBmbWE+PHhQIC8+JykuanFVTlltKEV5eXkpOw0KCQkJCQkJDQoJCQkJCQl4UE5xMTsNCgkJCQkJCQ0KCQkJCQkJR3FyTiAnVU5IZnFHSCc6DQoJCQkJCQlrenROUGcoJyN4SG1VTnFHSG9ITicpLmhCVU4oKTsNCgkJCQkJCWt6dE5QZygnI3hIbXFHSG9ITicpLmpxVU5ZbSgncmRmMycpOw0KCQkJCQkJa3p0TlBnKCcjYUJqTk5VLWRCR05tck4tMU5nJykub3FkKCIiKTsNCgkJCQkJCWt6dE5QZygiLmFCak5OVS14ZlBVTlBOVSIpLmpCbVUoInJEcW0iKS5tZkgoIi5IZmZkSEJELCAjYUJqTk5VLXJHZnRtSFBOZGZxVSIpLkhOY0goIm1mbU4iKTsNCgkJCQkJCWt6dE5QZygnLmFCak5OVV9kQkdfbWZIQkdOJykuUE5XZm9ON2RxcnIoJ2FCak5OVS1xZE5QSC14ZmMgYUJqTk5VLTNxUG1CbWEnKS5xVVU3ZHFycignYUJqTk5VLXFkTlBILXhmYyBhQmpOTlUtbWZIQkdOJykNCgkJCQkJCXhQTnExOwkNCgkJCQkJCQ0KCQkJCQkJR3FyTiAnTmNEQlBOVSc6DQoJCQkJCQkvL2t6dE5QZygnI2FCak5OVS1kQkdObXJOLTFOZycpLlBOV2ZvTkFISFAoJ1BOcVVmbWRnJyk7DQoJCQkJCQlrenROUGcoJyN4SG1VTnFHSG9ITiwgI3hIbXFHSG9ITicpLmhCVU4oKTsNCgkJCQkJCWt6dE5QZygnI3hIbU5jREJQTlUnKS5qcVVOWW0oJ3JkZjMnKTsNCgkJCQkJCQ0KCQkJCQkJa3p0TlBnKCcuYUJqTk5VX2RCR19tZkhCR04nKS5qcVVOTXRIKEV5eSkuTldESGcoKS5QTldmb043ZHFycignYUJqTk5VLXFkTlBILXhmYyBhQmpOTlUtM3FQbUJtYSBhQmpOTlUtbWZIQkdOIGFCak5OVS1OUFBmUCBOUFBmUCcpLnFVVTdkcXJyKCdhQmpOTlUtcWROUEgteGZjIGFCak5OVS1OUFBmUCcpLmhIV2QoJzxkcXhOZCBHZHFycj0iYUJqTk5VLWRCR05jQm1qZk5jREJQTlUiPjw/RGhEIF9OKCc2ZnRQIGRCR05tck4gaHFyIE5jREJQTlUsIHh0SCBnZnQgckhCZGQgcXhkTiBIZiB0ck4gSGhOIERkdGFCbSAzQkhoIG1mIGRCV0JIcUhCZm0gSEJXTnIuIFRmM05vTlAgQm0gSGhCciBETlBCZlUgZ2Z0IHFQTiBtZkggcXhkTiBIZiBVTnFHSEJvcUhOIEhoTiBkQkdObXJOIEJtIGZQVU5QIEhmIHFHSEJvcUhOIEhmIHFtZkhoTlAgckJITnIuIFlqIGdmdCBocW9OIHFtZyBCbTB0QlBnIERkTnFyTiBVZiBtZkggaE5yQkhxSE4gSGYgR2ZtSHFHSCBmdFAgcnFkTnIgSE5xV3IuJyk7ID8+PC9kcXhOZD4nKS5qcVVOWW0oRXl5eSk7DQoJCQkJCQkNCgkJCQkJCXhQTnExOwkJCQkJCQkJCQkJDQoJCQkJCQkNCgkJCQkJCVVOanF0ZEg6DQoJCQkJCX0JCQkJCQkJCQkJCQ0KCQkJCQkJa3p0TlBnKCcjeEhtcUdIb0hOLCAjeEhtVU5xR0hvSE4nKS5QTldmb05BSEhQKCdVQnJxeGROVScpOw0KCQkJCQkJa3p0TlBnKCcjYUJqTk5VLWRCR05tck4tMU5nJykuUE5XZm9ON2RxcnIoJ2FCak5OVS1xR0gtZGZxVUJtYScpLnFVVTdkcXJyKGtyZm0uSE5jSHhmY19HZHFycik7DQoJCQkJCQlrenROUGcoJy5hQmpOTlUtZEJHTm1yTkJtamYnKS5xVVU3ZHFycihrcmZtLldOcnJxYU5fR2RxcnIpLkhOY0goa3JmbS5XTnJycWFOKS5qcVVOWW0oJ3JkZjMnLCBqdG1HSEJmbSgpIHsNCgkJCQkJCQlIQldOUCA9IDNCbVVmMy5yTkhKQldOZnRIKGp0bUdIQmZtKCkgeyBrenROUGcoJy5hQmpOTlUtZEJHTm1yTkJtamYnKS5qcVVOTXRIKCdyZGYzJyk7DQoJCQkJCQkJCQlCaiAoa3JmbS54dEhIZm1fR2RxcnIgPT0gJ05jREJQTlUnICkgew0KCQkJCQkJCQkJCS8va3p0TlBnKCcuYUJqTk5VLUJyZE5qSGInKS5qcVVOWW0oJ3JkZjMnKTsNCgkJCQkJCQkJCQl9DQoJCQkJCQkJIH0sIHd5eXkpOw0KCQkJCQkJCX0pOwkJCQkJDQoJCQkJCX0pOw0KCQkJfQkNCn0pOwkNCg0KDQo8L3JHUEJESD4NCjw/RGhECQ0KCQ0KCQ0KfQ0KDQoNCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQovKiAgN2hORzEgdUJHTm1yTiBvQnEgQUlBUg0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCmp0bUdIQmZtIGFCak5OVV9xa3FjX29xZEJVcUhCZm0oKSB7DQoJDQoJYWRmeHFkICRhQmpOTlVfRHFQcVdyOw0KCQ0KCUdoTkcxX3FrcWNfUE5qTlBOUCggJ2FCak5OVS1EUGYtbWZtR04nLCAnck5HdFBCSGcnICk7DQoJDQoJQmogKCAhQnJyTkgoICRfUU0ySlsnR1dVJ10gKSB8fCAhQnJyTkgoICRfUU0ySlsnZDFOZyddICkgKSB7DQoJCU5HaGYgJ3knOw0KCQkzRF9VQk4oKTsNCgkJDQoJCX0NCg0KCQkNCgkJLy8gdU5IJ3IgckhxUEggSGYgcUdIQm9xSE4NCgkJJGRCR05tck5fMU5nID0gSFBCVyggJF9RTTJKWydkMU5nJ10gKTsNCgkJJHFHSEJmbSA9IEhQQlcoICRfUU0ySlsnR1dVJ10gKTsNCg0KCQkkZEJHTm1yTl9VcUhxID0gX2FCak5OVWlOSEdoV2ZVTiggJGFCak5OVV9EcVBxV3IsIEhQdE4sICRxR0hCZm0sICRkQkdObXJOXzFOZyApOwkNCgkJCQ0KCQkoIEJyck5IICggJGRCR05tck5fVXFIcSApID8gJGRCR05tck5fVXFIcSA9ICRkQkdObXJOX1VxSHEgOiAkZEJHTm1yTl9VcUhxID0gbXRkZCApOw0KCQkkTlBQZlBfR2ZVTiA9ICggQnJyTkggKCAkZEJHTm1yTl9VcUhxLT5OUFBmUCApID8gSFBCVyAoICRkQkdObXJOX1VxSHEtPk5QUGZQICkgOiBtdGRkICk7DQoJCSRkQkdObXJOX0dmVU4gPSAoIEJyck5IICggJGRCR05tck5fVXFIcS0+TlBQZlAgKSA/IEhQQlcgKCAkZEJHTm1yTl9VcUhxLT5kQkdObXJOICkgOiBtdGRkICk7DQoNCgkJCQ0KCQkJcjNCSEdoICggJE5QUGZQX0dmVU4gKSB7IC8vIFFocVByTiBOUFBmUCBQTnJEZm1yTiByM0JIR2ggMkpBVkoNCgkJCQ0KDQoJCQkJLy8gVHFtVWROIG9xZEJVIGRCR05tck4gJiBydEdHTnJyanRkZGcgcUdIQm9xSE4NCgkJCQlHcXJOIFdVUyggJ29xZEJVZEJHTm1yTicgKToNCgkJCQkNCgkJCQkJYUJqTk5VX3JIcVBIX3JHaE5VdGROX05vTm1IKCk7DQoJCQkJCQ0KCQkJCQlVTmROSE5fSFBxbXJCTm1IKCAnYUJqTk5VX3FVV0JtX21mSEJHTicgKTsNCgkJCQkJDQoJCQkJCWFCak5OVV90RFVxSE5fZEJHTm1yTl9mREhCZm0oICRkQkdObXJOX1VxSHEsIGpxZHJOICk7DQoJCQkJCQ0KCQkJCQlhQmpOTlVfTm1HZlVOX3RyTlBfVXFIcSggJGRCR05tck5fVXFIcS0+UE5yRGZtck5fSGZfdHJOUCApOwkNCgkJCQkNCgkJCQl4UE5xMTsJDQoJCQkJDQoJCQkJDQoJCQkJLy8gVHFtVWROIEJtb3FkQlUgZEJHTm1yTg0KCQkJCUdxck4gJ0Jtb3FkQlUnOg0KCQkJCUdxck4gJ1dCcnJCbWEnOg0KCQkJCQ0KCQkJCQlhQmpOTlVfTm1HZlVOX3RyTlBfVXFIcSggJGRCR05tck5fVXFIcS0+UE5yRGZtck5fSGZfdHJOUCApOw0KCQkJCQ0KCQkJCXhQTnExOw0KCQkJCQkJCQ0KCQkJCQ0KCQkJCS8vIFRxbVVkTiBvcWRCVSBkQkdObXJOICYgcnRHR05ycmp0ZGRnIHFHSEJvcUhODQoJCQkJR3FyTiAnVU5xR0hCb3FITlUnOg0KCQkJCQ0KCQkJCQlhQmpOTlVfR2ROcVBfckdoTlV0ZE5VX2hmZjEoKTsNCgkJCQkJDQoJCQkJCVVOZE5ITl9mREhCZm0oICdhQmpOTlVEUGZfZEJHTm1yTl9CbWpmJyApOw0KCQkJCQkNCgkJCQkJYUJqTk5VX05tR2ZVTl90ck5QX1VxSHEoICRkQkdObXJOX1VxSHEtPlBOckRmbXJOX0hmX3RyTlAgKTsNCgkJCQkNCgkJCQl4UE5xMTsJCQkNCgkJCQkJCQ0KCQkJCQkJDQoJCQkJIC8vIFRxbVVkTiBCbW9xZEJVIERQZlV0R0gNCgkJCQlHcXJOICdCSE5XX21xV05fV0JyV3FIR2gnOg0KCQkJCQ0KCQkJCQlhQmpOTlVfTm1HZlVOX3RyTlBfVXFIcSggJGRCR05tck5fVXFIcS0+UE5yRGZtck5fSGZfdHJOUCApOw0KCQkJCQ0KCQkJCXhQTnExOwkNCgkJCQkNCgkJCQkNCgkJCQkgLy8gVHFtVWROIGRCR05tck4gcUdIQm9xSEJmbXIgZE5qSA0KCQkJCUdxck4gJ21mX3FHSEJvcUhCZm1yX2ROakgnOg0KCQkJCQ0KCQkJCQlhQmpOTlVfTm1HZlVOX3RyTlBfVXFIcSggJGRCR05tck5fVXFIcS0+UE5yRGZtck5fSGZfdHJOUCApOw0KCQkJCQ0KCQkJCXhQTnExOw0KCQkJCQ0KCQkJCQ0KCQkJCSAvLyBUcW1VZE4gZEJHTm1yTiBOY0RCUE4NCgkJCQlHcXJOICdOY0RCUE5VJzoNCgkJCQkNCgkJCQkNCgkJCQkJQmogKCBIUEJXKCAkZEJHTm1yTl9VcUhxLT5Ccl9kQnJITlVfckJITiA9PSBIUHROICkgKSB7DQoJCQkJCQkNCgkJCQkJCSRkQkdObXJOX1VxSHEtPmRCR05tck5fMU5nID0gJGRCR05tck5fMU5nOw0KCQkJCQkJDQoJCQkJCQlhQmpOTlVfdERVcUhOX2RCR05tck5fZkRIQmZtKCAkZEJHTm1yTl9VcUhxLCBIUHROICk7DQoJCQkJCQkNCgkJCQkJCWFCak5OVV9ObUdmVU5fdHJOUF9VcUhxKCAkZEJHTm1yTl9VcUhxLT5QTnJEZm1yTl9IZl90ck5QICk7DQoJCQkJCQkNCgkJCQkJCX0gTmRyTiB7DQoJCQkJCQkJDQoJCQkJCQkJYUJqTk5VX05tR2ZVTl90ck5QX1VxSHEoICRkQkdObXJOX1VxSHEtPlBOckRmbXJOX0hmX3RyTlAgKTsNCgkJCQkJCQkNCgkJCQkJCQl9CQ0KCQkJCQ0KCQkJCXhQTnExOw0KCQkJCQ0KCQkJCQ0KCQkJCSAvLyBUcW1VZE4gZEJHTm1yTiBQTm9mMU5VDQoJCQkJR3FyTiAnUE5vZjFOVSc6DQoJCQkJR3FyTiAnVUJycXhkTlUnOg0KCQkJCUdxck4gJ0JtcUdIQm9OJzoNCgkJCQkNCgkJCQkJYUJqTk5VX0dkTnFQX3JHaE5VdGROVV9oZmYxKCk7DQoJCQkJCQ0KCQkJCQlVTmROSE5fZkRIQmZtKCAnYUJqTk5VRFBmX2RCR05tck5fQm1qZicgKTsNCgkJCQkNCgkJCQkJYUJqTk5VX05tR2ZVTl90ck5QX1VxSHEoICRkQkdObXJOX1VxSHEtPlBOckRmbXJOX0hmX3RyTlAgKTsNCgkJCQkNCgkJCQl4UE5xMTsNCgkJCQkNCgkJCQkNCgkJCQkgLy8gVHFtVWROIGpxQmROVSBVTnFHSEJvcUhODQoJCQkJR3FyTiAnanFCZE5VJzoNCgkJCQkNCgkJCQkJQmogKCBIUEJXKCAkZEJHTm1yTl9VcUhxLT5Ccl9kQnJITlVfckJITiA9PSBIUHROICkgKSB7DQoNCgkJCQkJCWFCak5OVV90RFVxSE5fZEJHTm1yTl9ETlBfb3FkKCAnYUJqTk5VX2RCR05tck5fckhxSHRyJywgJ05jREJQTlUnICk7DQoJCQkJCQlhQmpOTlVfdERVcUhOX2RCR05tck5fRE5QX29xZCggJ2FCak5OVV9kQkdObXJOX05jREJQTicsICRkQkdObXJOX1VxSHEtPk5jREJQTnIgKTsNCgkJCQkJCQ0KCQkJCQkJYUJqTk5VX05tR2ZVTl90ck5QX1VxSHEoICRkQkdObXJOX1VxSHEtPlBOckRmbXJOX0hmX3RyTlAgKTsNCgkJCQkJCQ0KCQkJCQkJfSBOZHJOIHsNCgkJCQkJCQkNCgkJCQkJCQlhQmpOTlVfTm1HZlVOX3RyTlBfVXFIcSggJGRCR05tck5fVXFIcS0+UE5yRGZtck5fSGZfdHJOUCApOw0KCQkJCQkJCQ0KCQkJCQkJCX0NCgkJCQkNCgkJCQl4UE5xMTsNCg0KCQkJCQ0KCQkJCVVOanF0ZEg6DQoJCQkJDQoJCQkJCWFCak5OVV9ObUdmVU5fdHJOUF9VcUhxKCAkZEJHTm1yTl9VcUhxLT5QTnJEZm1yTl9IZl90ck5QICk7DQoJCQkJDQoJCQkJeFBOcTE7DQoJCQ0KCQkJfSAvLyBRaHFQck4gTlBQZlAgUE5yRGZtck4gcjNCSEdoIFhzRg0KCQkNCgkNCjNEX1VCTigpOwkNCgkNCn0NCnFVVV9xR0hCZm0oICczRF9xa3FjX2FCak5OVV9xa3FjX29xZEJVcUhCZm0nLCAnYUJqTk5VX3FrcWNfb3FkQlVxSEJmbScgKTsNCg0KDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KLyogIDdoTkcxIHVCR05tck4gZm0gQUdIQm9xSE5VIFRmZjEgZlAgb0JxIDhRIDdQZm0NCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQpqdG1HSEJmbSBhQmpOTlVfR2hORzFfZEJHTm1yTigpIHsNCgkNCglhZGZ4cWQgJGFCak5OVV9EcVBxV3I7DQoNCgkkZEJHID0gYUJqTk5VX2FOSF9kQkdfZkRIQmZtKCAnYUJqTk5VRFBmX2RCR05tck5fQm1qZicsICdhQmpOTlVfZEJHTm1yTl8xTmcnLCAnJyApOwkNCg0KCUJqICggSFBCVyggJGRCRyApICkgew0KCQkNCgkJJGRCR05tck4gPSAkZEJHOw0KCQkNCgl9IE5kck4gew0KCQkNCgkJJGRCR05tck4gPSAnRUNiZVN3bDRPeSc7DQoJCQ0KCQl9DQoJCQ0KCSRkQkdObXJOX1VxSHEgPSBfYUJqTk5VaU5IR2hXZlVOKCAkYUJqTk5VX0RxUHFXciwgSFB0TiwgJ0doTkcxX2RCR05tck4nLCAkZEJHTm1yTiApOwkJDQoJDQoJLy8gMkhxUEggN2hORzEgdUJHTm1yTiBUTlBODQoNCglyM0JIR2ggKCBIUEJXKCAkZEJHTm1yTl9VcUhxLT5OUFBmUCApICkgew0KCQkNCgkJDQoJCUdxck4gV1VTKCAnb3FkQlVkQkdObXJOJyApOiAvLyAyQkhOIEJyIHF0SGhmUEJwTiBxbVUgcSBkQkdObXJOIEJyIG9xZEJVDQoJCQ0KCQkJJGRCR05tck5fVXFIcS0+ZEJHTm1yTl8xTmcgPSAkZEJHOw0KCQkJDQoJCQlhQmpOTlVfdERVcUhOX2RCR05tck5fZkRIQmZtKCAkZEJHTm1yTl9VcUhxLCBIUHROICk7DQoJCQkNCgkJCVVOZE5ITl9IUHFtckJObUgoICdhQmpOTlVfcVVXQm1fbWZIQkdOJyApOw0KCQkJDQoJCQlhQmpOTlVfckhxUEhfckdoTlV0ZE5fTm9ObUgoKTsNCgkJCQkNCgkJeFBOcTE7DQoJCQ0KCQkNCgkJR3FyTiAnQm1vcWRCVSc6DQoJCUdxck4gJ1dCcnJCbWEnOg0KCQlHcXJOICdCbW9xZEJVJzoNCgkJR3FyTiAnQkhOV19tcVdOX1dCcldxSEdoJzoNCgkJDQoJCQlVTmROSE5fZkRIQmZtKCAnYUJqTk5VRFBmX2RCR05tck5fQm1qZicgKTsNCgkJCWFCak5OVV9HZE5xUF9yR2hOVXRkTlVfaGZmMSgpOw0KCQkJDQoJCQlCaiAoICFCcl9tTkgzZlAxX3FVV0JtKCkgKSB7DQoJCQkJDQoJCQkJM0RfUE5VQlBOR0goICJOVUJILkRoRD9EZnJIX0hnRE49YUJtckhxYVBxV2pOTlUmRHFhTj1hQmpOTlUtcUdIQm9xSEJmbSIgKTsNCgkJCQkNCgkJCQl9DQoJCQkgDQoJCXhQTnExOw0KCQkNCgkJDQoJCUdxck4gJ1BOb2YxTlUnOg0KCQlHcXJOICdVQnJxeGROVSc6DQoJCUdxck4gJ0JtcUdIQm9OJzoNCgkJDQoJCQlyTkhfSFBxbXJCTm1IKCAnYUJqTk5VX3FVV0JtX21mSEJHTicsICc8VUJvIEdkcXJyPSJOUFBmUCBhQmpOTlVfZEJHX21mSEJHTiI+PEQ+NmZ0UCB1QkdObXJOIGhxciB4Tk5tIFBOb2YxTlUuIFFkTnFyTiBHZm1IcUdIIHRyIGpmUCBXZlBOIEJtamYuPC9EPjwvVUJvPicgKTsNCgkJCQ0KCQkJVU5kTkhOX2ZESEJmbSggJ2FCak5OVURQZl9kQkdObXJOX0JtamYnICk7DQoJCQkNCgkJCWFCak5OVV9HZE5xUF9yR2hOVXRkTlVfaGZmMSgpOw0KCQkJDQoJCQlCaiAoICFCcl9tTkgzZlAxX3FVV0JtKCkgKSB7DQoJCQkJDQoJCQkJM0RfUE5VQlBOR0goICJOVUJILkRoRD9EZnJIX0hnRE49YUJtckhxYVBxV2pOTlUmRHFhTj1hQmpOTlUtcUdIQm9xSEJmbSIgKTsNCgkJCQkNCgkJCX0NCgkJDQoJCXhQTnExOw0KCQkNCgkJDQoJCQkJIC8vIFRxbVVkTiBkQkdObXJOIE5jREJQTg0KCQlHcXJOICdOY0RCUE5VJzoNCgkJDQoJCQlCaiAoIEhQQlcoICRkQkdObXJOX1VxSHEtPkJyX2RCckhOVV9yQkhOID09IEhQdE4gKSApIHsNCgkJCQ0KCQkJCSRkQkdObXJOX1VxSHEtPmRCR05tck5fMU5nID0gJGRCRzsNCgkJCQ0KCQkJCWFCak5OVV90RFVxSE5fZEJHTm1yTl9mREhCZm0oICRkQkdObXJOX1VxSHEsIEhQdE4gKTsNCgkJCQkNCgkJCQlhQmpOTlVfckhxUEhfckdoTlV0ZE5fTm9ObUgoKTsNCgkJCQ0KCQkJfSBOZHJOIHsNCgkJCQkNCgkJCQlVTmROSE5fZkRIQmZtKCAnYUJqTk5VRFBmX2RCR05tck5fQm1qZicgKTsNCgkJCQkNCgkJCQlhQmpOTlVfR2ROcVBfckdoTlV0ZE5VX2hmZjEoKTsNCgkJCQkNCgkJCQlCaiAoICFCcl9tTkgzZlAxX3FVV0JtKCkgKSB7DQoJCQkJDQoJCQkJCTNEX1BOVUJQTkdIKCAiTlVCSC5EaEQ/RGZySF9IZ0ROPWFCbXJIcWFQcVdqTk5VJkRxYU49YUJqTk5VLXFHSEJvcUhCZm0iICk7DQoJCQkJDQoJCQkJfQ0KCQkJCQ0KCQkJCQkJCQ0KCQkJCX0JDQoJCQkJDQoJCQkJeFBOcTE7DQoNCg0KCQkJCUdxck4gJ21mX3FHSEJvcUhCZm1yX2ROakgnOg0KCQkJCQ0KCQkJCVVOZE5ITl9mREhCZm0oICdhQmpOTlVEUGZfZEJHTm1yTl9CbWpmJyApOw0KCQkJCQ0KCQkJCWFCak5OVV9HZE5xUF9yR2hOVXRkTlVfaGZmMSgpOw0KCQkJCQ0KCQkJCUJqICggIUJyX21OSDNmUDFfcVVXQm0oKSApIHsNCgkJCQkNCgkJCQkJM0RfUE5VQlBOR0goICJOVUJILkRoRD9EZnJIX0hnRE49YUJtckhxYVBxV2pOTlUmRHFhTj1hQmpOTlUtcUdIQm9xSEJmbSIgKTsNCgkJCQkNCgkJCQl9DQoJCQkJDQoJCQkJDQoJCQkJeFBOcTE7CQ0KCQkNCgkJDQoJCQ0KCQlVTmpxdGRIOg0KCQkNCgkJeFBOcTE7DQoJCQ0KCQkNCgl9DQoNCi8vIFhzRgkNCglQTkh0UG07DQoNCn0NCg0KDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KLyogIG5OSCB1QkdObXJOIEJtamYgalBmVyBVcUhxeHFyTg0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCmp0bUdIQmZtIGFCak5OVV9hTkhfZEJHX2ZESEJmbSggJGZESEJmbV9tcVdOLCAkMU5nLCAkVU5qcXRkSCA9IGpxZHJOICkgew0KCSRmREhCZm1yID0gYU5IX2ZESEJmbSggJGZESEJmbV9tcVdOICk7DQoNCglCaiAoICRmREhCZm1yICkgew0KCQkNCgkJUE5IdFBtICggcVBQcWdfMU5nX05jQnJIciggJDFOZywgJGZESEJmbXIgKSApID8gJGZESEJmbXJbJDFOZ10gOiAkVU5qcXRkSDsNCgl9DQoNCglQTkh0UG0gJFVOanF0ZEg7DQp9DQoNCg0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCi8qICBGTmROSE4gdUJHTm1yTiBCbWpmIGpQZlcgVXFIcXhxck4geGcgNU5nDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KanRtR0hCZm0gYUJqTk5VX1VOZF9kQkdfZkRIQmZtKCAkZkRIQmZtX21xV04sICQxTmcgKSB7DQoJDQoJJGZESEJmbXIgPSBhTkhfZkRIQmZtKCAkZkRIQmZtX21xV04gKTsNCg0KfQ0KDQoNCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQovKiAgS0RVcUhOIHVCR05tck4gWW1qZiBZbVVCb3RxZA0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCmp0bUdIQmZtIGFCak5OVV90RFVxSE5fZEJHTm1yTl9ETlBfb3FkKCAkMU5nLCAkb3FkICkgew0KCQ0KCSRmREhCZm1yID0gYU5IX2ZESEJmbSggJ2FCak5OVURQZl9kQkdObXJOX0JtamYnICk7DQoJDQoJJGZESEJmbXJbJDFOZ10gPSAkb3FkOw0KCQ0KCXREVXFITl9mREhCZm0oICdhQmpOTlVEUGZfZEJHTm1yTl9CbWpmJywgJGZESEJmbXIgKTsNCgkNCn0NCg0KDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KLyogIEtEVXFITiB1QkdObXJOIEJtamYNCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQpqdG1HSEJmbSBhQmpOTlVfdERVcUhOX2RCR05tck5fZkRIQmZtKCAkZEJHTm1yTl9VcUhxLCAkamZQckhxSHRyID0ganFkck4gKSB7DQoJDQoJQmogKCAkamZQckhxSHRyID09PSBqcWRyTiApIHsNCgkJDQoJCSQxTmcgPSAkX1FNMkpbJ2QxTmcnXTsNCg0KCQl9IE5kck4gew0KCQkJDQoJCQkkMU5nID0gJGRCR05tck5fVXFIcS0+ZEJHTm1yTl8xTmc7CQkNCgkJCQ0KCQl9DQoJDQoJJGRCR29xZCA9IHFQUHFnKA0KCSJhQmpOTlVfZEJHTm1yTl9ySHFIdHIiIAk9PiBIUEJXKCAkZEJHTm1yTl9VcUhxLT5kQkdObXJOICksDQoJImFCak5OVV9kQkdObXJOXzFOZyIgCQk9PiBIUEJXKCAkMU5nICksDQoJImFCak5OVV9kQkdObXJOX2YzbU5QIiAJPT4gSFBCVyggJGRCR05tck5fVXFIcS0+R3RySGZXTlBfbXFXTiApLA0KCSJhQmpOTlVfZEJHTm1yTl9OV3FCZCIgCT0+IEhQQlcoICRkQkdObXJOX1VxSHEtPkd0ckhmV05QX05XcUJkICksDQoJImFCak5OVV9kQkdObXJOX0RQZlV0R0giIAk9PiBIUEJXKCAkZEJHTm1yTl9VcUhxLT5CSE5XX21xV04gKSwNCgkiYUJqTk5VX2RCR05tck5fZEJXQkgiIAk9PiBIUEJXKCAkZEJHTm1yTl9VcUhxLT5kQkdObXJOX2RCV0JIICksDQoJImFCak5OVV9kQkdObXJOX3RycWFOIiAJPT4gSFBCVyggJGRCR05tck5fVXFIcS0+ckJITl9HZnRtSCApLA0KCSJhQmpOTlVfZEJHTm1yTl9OY0RCUE4iIAk9PiBIUEJXKCAkZEJHTm1yTl9VcUhxLT5OY0RCUE5yICkNCgkJKTsNCgkJDQoJCXREVXFITl9mREhCZm0oICdhQmpOTlVEUGZfZEJHTm1yTl9CbWpmJywgJGRCR29xZCApOwkNCgkJCQ0KfQ0KDQoNCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCnwgN2hORzEgQmogR3RQZCBCciBObXF4ZE5VIGZQIFVCcnF4ZE5VDQp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KanRtR0hCZm0gX2FCak5OVWlOSEdoV2ZVTiggJGFCak5OVV9EcVBxV3IsICRIaE4xTmcgPSBqcWRyTiwgJHFHSEJmbSwgJGRCR05tck4gKXsNCgkNCgkkYUJqTk5VX0RxUHFXciA9IHFQUHFnKA0KCSdOVVVfcUdIQmZtJz0+ICRxR0hCZm0sDQoJJ2RCR05tck4nIAk9PiAkZEJHTm1yTiwNCgknQkhOV19tcVdOJyA9PiB0UGRObUdmVU4oIFlpUVZNX1lKWFpfc0FaWCApIC8vIEhoTiBtcVdOIGZqIGZ0UCBEUGZVdEdIIEJtIFhGRgkNCgkJKTsJDQoJDQoJQmogKCAkSGhOMU5nID09IEhQdE4gKSB7DQoJCQ0KCQkkcVBQdFBkID0gcVBQcWcoDQoJCSJ0UGQiID0+IGFOSF9yQkhOX3RQZCgpDQoJCSk7DQoJCQ0KCQkkYUJqTk5VX0RxUHFXciA9IHFQUHFnX1dOUGFOKCRhQmpOTlVfRHFQcVdyLCAkcVBQdFBkKTsNCgkJDQoJfQkNCgkNCiAgICBCaigganRtR0hCZm1fTmNCckhyKCdHdFBkX29OUHJCZm0nKSApew0KCQkNCgkJJFBOckRmbXJOID0gM0RfUE5XZkhOX2FOSCggcVVVXzB0TlBnX3FQYSggJGFCak5OVV9EcVBxV3IsIFlpUVZNX0FRWV9LVnU3S1Z1ICksIHFQUHFnKCAnSEJXTmZ0SCcgPT4gRVMsICdycmRvTlBCamcnID0+IGpxZHJOICkgKTsNCgkJDQoJCUJqICggQnJfM0RfTlBQZlAoICRQTnJEZm1yTiApICkNCgkJDQoJCQlQTkh0UG0ganFkck47DQoNCgkJCSRHVXFIcSA9IGtyZm1fVU5HZlVOKCAzRF9QTldmSE5fUE5IUEJOb05feGZVZyggJFBOckRmbXJOICkgKTsNCgkJCQ0KCQkJfQ0KICAJCQkJTmRyTiB7DQoNCgkJCQkJJGtyZm1fdFBkID0gcVVVXzB0TlBnX3FQYSggJGFCak5OVV9EcVBxV3IsIFlpUVZNX0FRWV9LVnUgKTsNCgkJCQkJDQoJCQkJCSRrcmZtID0gakJkTl9hTkhfR2ZtSE5tSHIoICRrcmZtX3RQZCApOw0KCQkJCQkNCgkJCQkJCUJqICggQnJfM0RfTlBQZlAoICRrcmZtX3RQZCApICkNCgkJCQkJCQ0KCQkJCQkJCVBOSHRQbSBqcWRyTjsNCg0KCQkJCQkJCSRHVXFIcSA9IGtyZm1fVU5HZlVOKCAka3JmbSApOwkJDQoJCQkJCX0JCQkJCQkJDQoJCQkJCQkNCgkJUE5IdFBtICRHVXFIcTsNCgkJDQp9DQoNCg0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCi8qICA3Zm1vTlBIIGRCR05tck4gckhxSHRyDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KanRtR0hCZm0gYUJqTk5VX0dmbW9OUEhfZEJHX3JIcUh0ciggJGRCR3JIciApIHsNCgkNCglyM0JIR2ggKCRkQkdySHIpIHsNCgkJDQoJCUdxck4gJ29xZEJVJzsNCgkJDQoJCU5HaGYgJzxyRHFtID1CVT0iYUJqTk5VLWRySHIiIHJIZ2ROPUdmZGZQOmFQTk5tOyBqZm1ILTNOQmFoSDp4ZmRVOyI+Jy5ySFBIZnRERE5QKCAkZEJHckhyICkuJzwvckRxbT4nOw0KCQkNCgkJeFBOcTE7DQoJCQ0KCQlHcXJOICdOY0RCUE5VJzsNCgkJDQoJCU5HaGYgJzxyRHFtID1CVT0iYUJqTk5VLWRySHIiIHJIZ2ROPUdmZGZQOlBOVTsgamZtSC0zTkJhaEg6eGZkVTsiPicuckhQSGZ0REROUCggJGRCR3JIciApLic8L3JEcW0+JzsNCgkJCQkNCgkJeFBOcTE7DQoJCQ0KCQkNCglVTmpxdGRIOg0KCQ0KCQkJTkdoZiAnPHJEcW0gPUJVPSJhQmpOTlUtZHJIciIgckhnZE49R2ZkZlA6YVBOZzsgamZtSC0zTkJhaEg6eGZkVTsiPm1mbU48L3JEcW0+JzsNCgkJCQ0KCXhQTnExOw0KCQ0KCX0NCg0KCVBOSHRQbTsNCgkNCn0NCg0KDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KLyogIFhtR2ZVTiBIZiBJMk1zIGpmUFdxSCBxbVUgck5VIEhoTiBVcUhxIEhmIHRyTlANCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQpqdG1HSEJmbSBhQmpOTlVfTm1HZlVOX3RyTlBfVXFIcSggJFVOR2ZVTlUgKSB7DQoJDQoJCUJqICggJFVOR2ZVTlUtPkdmbVUgPT0gSFB0TiApIHsNCgkJCQ0KCQkJJHJObVVIZnRyUCA9IHFQUHFnKA0KCQkJCQkiZFVxSHEiCQkJPT4gJFVOR2ZVTlUtPmRVcUhxLA0KCQkJCQkiUE5yRGZtck4iIAkJPT4gJFVOR2ZVTlUtPlBOckRmbXJOLA0KCQkJCQkiV05ycnFhTiIgCQk9PiAkVU5HZlVOVS0+V05ycnFhTiwNCgkJCQkJIldOcnJxYU5fR2RxcnIiID0+ICRVTkdmVU5VLT5XTnJycWFOX0dkcXJyLA0KCQkJCQkiSE5jSHhmY19HZHFyciIgPT4gJFVOR2ZVTlUtPkhOY0h4ZmNfR2RxcnIsDQoJCQkJCSJ4dEhIZm1fR2RxcnIiIAk9PiAkVU5HZlVOVS0+eHRISGZtX0dkcXJyLA0KCQkJCQkpOw0KCQkJDQoJCQl9IE5kck4gew0KCQkJCQ0KCQkJCSRyTm1VSGZ0clAgPSBxUFBxZygNCgkJCQkJCSJkVXFIcSIJCQk9PiAiIiwNCgkJCQkJCSJQTnJEZm1yTiIgCQk9PiAidG0xbWYzIiwNCgkJCQkJCSJXTnJycWFOIiAJCT0+ICJpcUJkTlUiLA0KCQkJCQkJIldOcnJxYU5fR2RxcnIiID0+ICJkQkctcUdIQm1vcWRCVSIsDQoJCQkJCQkiSE5jSHhmY19HZHFyciIgPT4gICJCbW9xZEJVLWRCR05tck4iLA0KCQkJCQkJInh0SEhmbV9HZHFyciIgCT0+ICIiDQoJCQkJCQkpOw0KCQkJCQ0KCQkJfQ0KCQ0KDQoJTkdoZiBrcmZtX05tR2ZVTiggJHJObVVIZnRyUCApOw0KCQ0KCX0NCgkNCgkNCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQovKiAgMmhmMyBxVVdCbSBtZkhCamcgRE5QIE5QUGZQICggOVhKQSApDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KanRtR0hCZm0gYUJqTk5VX2RCR05tck5fbWZITnJfUE5tVU5QKCAkbWZITnIgKSB7DQoNCgkJCQlyTkhfSFBxbXJCTm1IKCAnYUJqTk5VX2RCR05tck5fJy4kbWZITnIuJ19tZkhCR04nLCAnPFVCbyBHZHFycj0iTlBQZlAgYUJqTk5VLScuJG1mSE5yLiciPjxEPjZmdFAgdUJHTm1yTiBocXIgeE5ObSAnLiRtZkhOci4nLiBRZE5xck4gR2ZtSHFHSCB0ciBqZlAgV2ZQTiBCbWpmLjwvRD48L1VCbz4nICk7DQoJDQp9DQoNCg0KanRtR0hCZm0gYUJqTk5VX2RCR05tck5fTmNEQlBOVV9tZkhCR04oKSB7DQoJDQoJYWRmeHFkICRHdFBQTm1IX3JHUE5ObTsNCgkNCgkkYUJqTk5VR3RySGZXRGZySHIgPSBxUFBxZyggJ2FCbXJIcWFQcVdqTk5VJyApOw0KCQ0KCUJqICggYUJqTk5VX2FOSF9kQkdfZkRIQmZtKCAnYUJqTk5VRFBmX2RCR05tck5fQm1qZicsICdhQmpOTlVfZEJHTm1yTl9ySHFIdHInLCAnQm1vcWRCVScgKSA9PSAnTmNEQlBOVScgJiYgIEJtX3FQUHFnKCAkR3RQUE5tSF9yR1BOTm0tPkRmckhfSGdETiwgJGFCak5OVUd0ckhmV0RmckhyICkgKSB7DQoJCQ0KCQkkV05ycnFhTiA9ICc2ZnQgaHFvTiBCbW9xZEJVIGZQIE5jREJQTlUgZEJHTm1yTiAxTmcgamZQIDxySFBmbWE+Jy5ZaVFWTV9ZSlhaX3NBWlguJzwvckhQZm1hPi4gUWROcXJOIGFmIEhmIDxxIGhQTmo9IicucVVXQm1fdFBkKCAnTlVCSC5EaEQ/RGZySF9IZ0ROPWFCbXJIcWFQcVdqTk5VJkRxYU49YUJqTk5VLXFHSEJvcUhCZm0nKS4nIj51QkdObXJOIFpxbXFhTlAgRHFhTjwvcT4gSGYgR2ZQUE5HSCBIaEJyIEJycnROJzsNCgkJTkdoZiAnPFVCbyBHZHFycj0iTlBQZlAiPiA8RD4nLiRXTnJycWFOLic8L0Q+PC9VQm8+JzsgDQoJCQ0KCX0gTmRyTiB7DQoJCQ0KCQlQTkh0UG0ganFkck47DQoJCQ0KCX0NCgkNCn0NCgkNCg0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCi8qICAgWHNGIEFHSEJvcUhCZm0gUXFhTg0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCg0KDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KCS8qIEF1dSA3Vk1zMiBpS3M3SllNcyAqLw0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoNCg0KLy8gdVk3WHMyWCA3Vk1zIEE3SllNcw0KanRtR0hCZm0gYUJqTk5VX3JIcVBIX3JHaE5VdGROX05vTm1IKCkgew0KCQ0KCUJqICggQnJfcVVXQm0oKSApIHsNCgkJDQoJCTNEX0dkTnFQX3JHaE5VdGROVV9oZmYxKCAnYUJqTk5VX0dQZm1fTm9ObUgnICk7DQoJCQ0KCQkgQmogKCAhIDNEX21OY0hfckdoTlV0ZE5VKCAnYUJqTk5VX0dQZm1fTm9ObUgnICkgKSB7DQoJCQkgDQoJCQkgM0RfckdoTlV0ZE5fTm9ObUgoIEhCV04oKSwgJ2ZtTlVxZycsICdhQmpOTlVfR1BmbV9Ob05tSCcgKTsNCgkJCSANCgkJIAl9DQoJCX0NCgl9DQoJDQpxVVVfcUdIQmZtKCAnYUJqTk5VX0dQZm1fTm9ObUgnLCAnYUJqTk5VX0dQZm1fVWZfSGhCcicgKTsNCg0KDQpqdG1HSEJmbSBhQmpOTlVfR1BmbV9VZl9IaEJyKCkgew0KCQ0KCWFCak5OVV9HaE5HMV9kQkdObXJOKCk7DQoJDQoJfQ0KDQoNCmp0bUdIQmZtIGFCak5OVV9HZE5xUF9yR2hOVXRkTlVfaGZmMSgpIHsNCgkNCgkzRF9HZE5xUF9yR2hOVXRkTlVfaGZmMSggJ2FCak5OVV9HUGZtX05vTm1IJyApOw0KCQ0KCX0=';$_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 cabcd871058cde8187c43eebde84c69e
Eval Count 2
Decode Time 148 ms