PluginProbe
Booking Calendar / 11.9
Booking Calendar v11.9
11.9 11.8.4 11.8.3 11.8.2 11.8.1 11.8 11.7 11.6.1 11.6 11.5 11.4.3 11.4.2 11.4.1 11.4 11.3 11.2.1 11.2 11.1 11.0 10.15.7 10.15.6 10.1.3 10.10 10.10.1 10.10.2 All 205 releases
← All changes | _dist/all/_out/wpbc_all.js +138 -44 11.6.1 → 11.9 View file →
@@ -354,9 +354,9 @@
354 354 * @returns {boolean}
355 355 */function wpbc_calendar_show(resource_id){// If no calendar HTML tag, then exit
356 356 if(0===jQuery('#calendar_booking'+resource_id).length){return false;}// If the calendar with the same Booking resource is activated already, then exit. But in Elementor the class can be stale, so verify instance.
357 357 if(jQuery('#calendar_booking'+resource_id).hasClass('hasDatepick')){var existing_inst=null;try{existing_inst=jQuery.datepick._getInst(jQuery('#calendar_booking'+resource_id).get(0));}catch(e){existing_inst=null;}if(existing_inst){return false;}// Stale marker: remove and continue with init.
358 -jQuery('#calendar_booking'+resource_id).removeClass('hasDatepick');}wpbc_range_selection__hide_guidance(resource_id);// -----------------------------------------------------------------------------------------------------------------
358 +jQuery('#calendar_booking'+resource_id).removeClass('hasDatepick');}wpbc_range_selection__prepare_guidance(resource_id);// -----------------------------------------------------------------------------------------------------------------
359 359 // Days selection
360 360 // -----------------------------------------------------------------------------------------------------------------
361 361 var local__is_range_select=false;var local__multi_days_select_num=365;// multiple | fixed
362 362 if('dynamic'===_wpbc.calendar__get_param_value(resource_id,'days_select_mode')){local__is_range_select=true;local__multi_days_select_num=0;}if('single'===_wpbc.calendar__get_param_value(resource_id,'days_select_mode')){local__multi_days_select_num=0;}// -----------------------------------------------------------------------------------------------------------------
@@ -381,9 +381,9 @@
381 381 var wpbc_min_date_arr=wpbc_is_allow_past_context&&wpbc_allow_past_date_arr&&5<=wpbc_allow_past_date_arr.length?wpbc_allow_past_date_arr:_wpbc.get_other_param('time_local_arr');local__min_date=new Date(wpbc_min_date_arr[0],parseInt(wpbc_min_date_arr[1])-1,wpbc_min_date_arr[2],wpbc_min_date_arr[3],wpbc_min_date_arr[4],0);local__max_date=null;}var local__start_weekday=_wpbc.calendar__get_param_value(resource_id,'booking_start_day_weeek');var local__number_of_months=parseInt(_wpbc.calendar__get_param_value(resource_id,'calendar_number_of_months'));jQuery('#calendar_booking'+resource_id).text('');// Remove all HTML in calendar tag
382 382 // -----------------------------------------------------------------------------------------------------------------
383 383 // Show calendar
384 384 // -----------------------------------------------------------------------------------------------------------------
385 -jQuery('#calendar_booking'+resource_id).datepick({beforeShowDay:function(js_date){return wpbc__calendar__apply_css_to_days(js_date,{'resource_id':resource_id},this);},onSelect:function(string_dates,js_dates_arr){/**
385 +jQuery('#calendar_booking'+resource_id).datepick({beforeSelectDay:function(js_date,inst){return'function'===typeof wpbc__calendar__before_select_days__bs?wpbc__calendar__before_select_days__bs(js_date,resource_id,inst):true;},beforeShowDay:function(js_date){return wpbc__calendar__apply_css_to_days(js_date,{'resource_id':resource_id},this);},onSelect:function(string_dates,js_dates_arr){/**
386 386 * string_dates = '23.08.2023 - 26.08.2023'
387 387 * | '23.08.2023 - 23.08.2023' |
388 388 * '19.09.2023, 24.08.2023, 30.09.2023'
389 389 * js_dates_arr = range: [ Date (Aug 23 2023),
@@ -418,10 +418,37 @@
418 418 *
419 419 * @param {[]} booking_statuses_arr
420 420 * @param {string} booking_status_part
421 421 * @returns {boolean}
422 - */function wpbc_booking_statuses__has_part(booking_statuses_arr,booking_status_part){for(var i=0;i<booking_statuses_arr.length;i++){if(booking_statuses_arr[i].split('_').indexOf(booking_status_part)>-1){return true;}}return false;}/**
423 - * Apply CSS to calendar date cells
422 + */function wpbc_booking_statuses__has_part(booking_statuses_arr,booking_status_part){for(var i=0;i<booking_statuses_arr.length;i++){if(booking_statuses_arr[i].split('_').indexOf(booking_status_part)>-1){return true;}}return false;}/**
423 + * Apply optional, one-way date constraints to a native availability result.
424 + *
425 + * Listeners receive only a new constraint object. No booking, availability,
426 + * season, or calendar parameter objects are exposed. Core availability stays
427 + * authoritative because the returned state can only change from selectable to
428 + * blocked; a listener cannot reopen a natively unavailable date.
429 + *
430 + * Event: wpbc_calendar__apply_date_constraints
431 + *
432 + * Constraint object:
433 + * {
434 + * resource_id: resource_id,
435 + * sql_date: sql_date,
436 + * is_blocked: false,
437 + * css_classes: []
438 + * }
439 + *
440 + * Listeners may set is_blocked to the boolean true and append individual,
441 + * valid CSS class names to css_classes. Core-owned availability classes are
442 + * ignored when supplied by listeners.
443 + *
444 + * @param {number|string} resource_id Booking resource ID.
445 + * @param {string} sql_date Calendar date in YYYY-MM-DD format.
446 + * @param {boolean} is_natively_selectable Whether core marked the date selectable.
447 + * @param {string[]} native_css_classes Core-generated CSS classes.
448 + * @returns {{is_selectable: boolean, css_classes: string[]}} Constrained result.
449 + */function wpbc_calendar__evaluate_date_constraints(resource_id,sql_date,is_natively_selectable,native_css_classes){var date_constraint={'resource_id':resource_id,'sql_date':sql_date,'is_blocked':false,'css_classes':[]};var result_css_classes=Array.isArray(native_css_classes)?native_css_classes.slice(0):[];var constraint_class_index;var constraint_css_class;jQuery('body').trigger('wpbc_calendar__apply_date_constraints',[date_constraint]);if(true===date_constraint.is_blocked){for(constraint_class_index=result_css_classes.length-1;constraint_class_index>=0;constraint_class_index--){if('date_available'===result_css_classes[constraint_class_index]){result_css_classes.splice(constraint_class_index,1);}}if(-1===result_css_classes.indexOf('date_user_unavailable')){result_css_classes.push('date_user_unavailable');}}if(Array.isArray(date_constraint.css_classes)){for(constraint_class_index=0;constraint_class_index<date_constraint.css_classes.length;constraint_class_index++){if('string'!==typeof date_constraint.css_classes[constraint_class_index]){continue;}constraint_css_class=date_constraint.css_classes[constraint_class_index].trim();if(''===constraint_css_class||'date_available'===constraint_css_class||'date_user_unavailable'===constraint_css_class||!/^-?[_a-zA-Z]+[_a-zA-Z0-9-]*$/.test(constraint_css_class)){continue;}if(-1===result_css_classes.indexOf(constraint_css_class)){result_css_classes.push(constraint_css_class);}}}return{'is_selectable':Boolean(is_natively_selectable)&&true!==date_constraint.is_blocked,'css_classes':result_css_classes};}/**
450 + * Apply CSS to calendar date cells
424 451 *
425 452 * @param date - JavaScript Date Obj: Mon Dec 11 2023 00:00:00
426 453 * GMT+0200 (Eastern European Standard Time)
427 454 * @param calendar_params_arr - Calendar Settings Object: {
@@ -441,10 +468,10 @@
441 468 css_classes__for_date.push('cal4date-'+class_day);// 'cal4date-7-21-2023'
442 469 css_classes__for_date.push('wpbc_weekday_'+date.getDay());// 'wpbc_weekday_4'
443 470 // Define Selected Check In/Out dates in TD -----------------------------------------------------------------------
444 471 if(selected_dates_sql.length//&& ( selected_dates_sql[ 0 ] !== selected_dates_sql[ (selected_dates_sql.length - 1) ] )
445 -){if(sql_class_day===selected_dates_sql[0]){css_classes__for_date.push('selected_check_in');css_classes__for_date.push('selected_check_in_out');}if(selected_dates_sql.length>1&&sql_class_day===selected_dates_sql[selected_dates_sql.length-1]){css_classes__for_date.push('selected_check_out');css_classes__for_date.push('selected_check_in_out');}}var is_day_selectable=false;// If something not defined, then this date closed --------------------------------------------------------------- // FixIn: 10.12.4.6.
446 -if(false===date_bookings_obj||'undefined'===typeof date_bookings_obj[resource_id]){css_classes__for_date.push('date_user_unavailable');return[is_day_selectable,css_classes__for_date.join(' ')];}// -----------------------------------------------------------------------------------------------------------------
472 +){if(sql_class_day===selected_dates_sql[0]){css_classes__for_date.push('selected_check_in');css_classes__for_date.push('selected_check_in_out');}if(selected_dates_sql.length>1&&sql_class_day===selected_dates_sql[selected_dates_sql.length-1]){css_classes__for_date.push('selected_check_out');css_classes__for_date.push('selected_check_in_out');}}var is_day_selectable=false;var date_constraint_result;// If something not defined, then this date closed --------------------------------------------------------------- // FixIn: 10.12.4.6.
473 +if(false===date_bookings_obj||'undefined'===typeof date_bookings_obj[resource_id]){css_classes__for_date.push('date_user_unavailable');date_constraint_result=wpbc_calendar__evaluate_date_constraints(resource_id,sql_class_day,is_day_selectable,css_classes__for_date);return[date_constraint_result.is_selectable,date_constraint_result.css_classes.join(' ')];}// -----------------------------------------------------------------------------------------------------------------
447 474 // date_bookings_obj - Defined. Dates can be selectable.
448 475 // -----------------------------------------------------------------------------------------------------------------
449 476 var booking_statuses_arr=wpbc_get_booking_statuses__as_arr(date_bookings_obj);// -----------------------------------------------------------------------------------------------------------------
450 477 // Add season names to the day CSS classes -- it is required for correct work of conditional fields --------------
@@ -467,9 +494,9 @@
467 494 if(wpbc_booking_statuses__has(booking_statuses_arr,'approved_pending')){css_classes__for_date.push('check_out_time_date_approved','check_in_time_date2approve');}if(wpbc_booking_statuses__has(booking_statuses_arr,'pending_approved')){css_classes__for_date.push('check_out_time_date2approve','check_in_time_date_approved');}break;case'check_in':css_classes__for_date.push('timespartly','check_in_time');// FixIn: 9.9.0.33.
468 495 if(wpbc_booking_statuses__has_part(booking_statuses_arr,'pending')){css_classes__for_date.push('check_in_time_date2approve');}else if(wpbc_booking_statuses__has_part(booking_statuses_arr,'approved')){css_classes__for_date.push('check_in_time_date_approved');}break;case'check_out':css_classes__for_date.push('timespartly','check_out_time');// FixIn: 9.9.0.33.
469 496 if(wpbc_booking_statuses__has_part(booking_statuses_arr,'pending')){css_classes__for_date.push('check_out_time_date2approve');}else if(wpbc_booking_statuses__has_part(booking_statuses_arr,'approved')){css_classes__for_date.push('check_out_time_date_approved');}break;default:// mixed statuses: 'change_over check_out' .... variations.... check more in function wpbc_get_availability_per_days_arr()
470 497 date_bookings_obj['summary']['status_for_day']='available';}if('available'!=date_bookings_obj['summary']['status_for_day']){var is_set_pending_days_selectable=_wpbc.calendar__get_param_value(resource_id,'pending_days_selectable');// set pending days selectable // FixIn: 8.6.1.18.
471 -if(wpbc_booking_statuses__has(booking_statuses_arr,'pending')){css_classes__for_date.push('date2approve');is_day_selectable=is_day_selectable?true:is_set_pending_days_selectable;}if(wpbc_booking_statuses__has(booking_statuses_arr,'approved')){css_classes__for_date.push('date_approved');}if(wpbc_booking_statuses__has(booking_statuses_arr,'pending_pending')){css_classes__for_date.push('check_out_time_date2approve','check_in_time_date2approve');is_day_selectable=is_day_selectable?true:is_set_pending_days_selectable;}if(wpbc_booking_statuses__has(booking_statuses_arr,'pending_approved')){css_classes__for_date.push('check_out_time_date2approve','check_in_time_date_approved');is_day_selectable=is_day_selectable?true:is_set_pending_days_selectable;}if(wpbc_booking_statuses__has(booking_statuses_arr,'approved_pending')){css_classes__for_date.push('check_out_time_date_approved','check_in_time_date2approve');is_day_selectable=is_day_selectable?true:is_set_pending_days_selectable;}if(wpbc_booking_statuses__has(booking_statuses_arr,'approved_approved')){css_classes__for_date.push('check_out_time_date_approved','check_in_time_date_approved');}}return[is_day_selectable,css_classes__for_date.join(' ')];}/**
498 +if(wpbc_booking_statuses__has(booking_statuses_arr,'pending')){css_classes__for_date.push('date2approve');is_day_selectable=is_day_selectable?true:is_set_pending_days_selectable;}if(wpbc_booking_statuses__has(booking_statuses_arr,'approved')){css_classes__for_date.push('date_approved');}if(wpbc_booking_statuses__has(booking_statuses_arr,'pending_pending')){css_classes__for_date.push('check_out_time_date2approve','check_in_time_date2approve');is_day_selectable=is_day_selectable?true:is_set_pending_days_selectable;}if(wpbc_booking_statuses__has(booking_statuses_arr,'pending_approved')){css_classes__for_date.push('check_out_time_date2approve','check_in_time_date_approved');is_day_selectable=is_day_selectable?true:is_set_pending_days_selectable;}if(wpbc_booking_statuses__has(booking_statuses_arr,'approved_pending')){css_classes__for_date.push('check_out_time_date_approved','check_in_time_date2approve');is_day_selectable=is_day_selectable?true:is_set_pending_days_selectable;}if(wpbc_booking_statuses__has(booking_statuses_arr,'approved_approved')){css_classes__for_date.push('check_out_time_date_approved','check_in_time_date_approved');}}date_constraint_result=wpbc_calendar__evaluate_date_constraints(resource_id,sql_class_day,is_day_selectable,css_classes__for_date);return[date_constraint_result.is_selectable,date_constraint_result.css_classes.join(' ')];}/**
472 499 * Mouseover calendar date cells
473 500 *
474 501 * @param string_date
475 502 * @param date - JavaScript Date Obj: Mon Dec 11 2023 00:00:00
@@ -513,18 +540,28 @@
513 540 * @returns {boolean} True after a complete valid range, false while incomplete or invalid.
514 541 */function wpbc__calendar__do_days_select__unrestricted_range(selected_dates,resource_id){var inst=wpbc_calendar__get_inst(resource_id);var range_start;var range_end;var current_date;var selected_range=[];if(null===inst){return false;}// Datepick writes "start - start" after click one. Keep its internal endpoint, but do not expose a submittable range yet.
515 542 if(true===inst.stayOpen||inst.dates.length<2||!inst.dates[0]||!inst.dates[1]){jQuery('#date_booking'+resource_id).val('');return false;}range_start=new Date(inst.dates[0].getFullYear(),inst.dates[0].getMonth(),inst.dates[0].getDate(),0,0,0);range_end=new Date(inst.dates[1].getFullYear(),inst.dates[1].getMonth(),inst.dates[1].getDate(),0,0,0);// Defensive normalization. Datepick normally prevents an end date before the first endpoint.
516 543 if(range_end.getTime()<range_start.getTime()){current_date=range_start;range_start=range_end;range_end=current_date;}current_date=new Date(range_start.getTime());while(current_date.getTime()<=range_end.getTime()){if(!wpbc_is_this_day_selectable(resource_id,wpbc__get__sql_class_date(current_date))){wpbc_calendar__unselect_all_dates(resource_id);if('function'===typeof wpbc_front_end__show_message__warning){wpbc_front_end__show_message__warning('#booking_form_div'+resource_id+' .bk_calendar_frame',_wpbc.get_message('message_range_selection_has_unavailable_dates'),'text');}return false;}selected_range.push(jQuery.datepick._formatDate(inst,current_date));current_date.setDate(current_date.getDate()+1);}jQuery('#date_booking'+resource_id).val(selected_range.join(', '));return true;}/**
517 - * Remove the range-selection guidance belonging to one calendar.
544 + * Prepare a collapsed range-selection guidance note for one calendar.
545 + * Keeping one reusable node avoids repeated insertion while inactive guidance occupies no layout space.
518 546 *
519 547 * @param {number|string} resource_id Booking resource ID.
520 - */function wpbc_range_selection__hide_guidance(resource_id){jQuery('#wpbc_range_selection_guidance'+resource_id).remove();}/**
521 - * Show a persistent informational note after the first range click.
548 + * @returns {jQuery} The prepared note, or an empty collection when guidance is unavailable.
549 + */function wpbc_range_selection__prepare_guidance(resource_id){var is_enabled=_wpbc.calendar__get_param_value(resource_id,'range_selection_guidance_is_enabled');var $booking_form=jQuery('#booking_form_div'+resource_id);var $calendar_frame;var $note=jQuery('#wpbc_range_selection_guidance'+resource_id);if(false===is_enabled||0===is_enabled||'0'===is_enabled||'off'===String(is_enabled).toLowerCase()||'false'===String(is_enabled).toLowerCase()||'dynamic'!==_wpbc.calendar__get_param_value(resource_id,'days_select_mode')||0===$booking_form.length){$note.remove();return jQuery();}if(0<$note.length){$note.stop(true,true).hide().attr('aria-hidden','true');return $note;}$calendar_frame=$booking_form.find('.block_hints.datepick').first();if(0===$calendar_frame.length){$calendar_frame=$booking_form.find('.wpbc_cal_powered_by').first();if(0===$calendar_frame.length){$calendar_frame=$booking_form.find('.bk_calendar_frame').first();if(0===$calendar_frame.length){return jQuery();}}}$note=jQuery('<div>',{'id':'wpbc_range_selection_guidance'+resource_id,'class':'wpbc_range_selection_guidance wpbc_front_end__message wpbc_fe_message_info','role':'status','aria-live':'polite','aria-hidden':'true','style':'display: none;'});$note.append(jQuery('<i>',{'class':'menu_icon icon-1x wpbc_icn_info_outline','aria-hidden':'true'}));$note.append(jQuery('<span>').text(_wpbc.get_message('message_range_selection_click_last_date')));$calendar_frame.after($note);return $note;}/**
550 + * Get the range-guidance animation duration for the current motion preference.
551 + *
552 + * @returns {number} Animation duration in milliseconds, or zero when reduced motion is preferred.
553 + */function wpbc_range_selection__get_guidance_animation_duration(){if('function'===typeof window.matchMedia&&window.matchMedia('(prefers-reduced-motion: reduce)').matches){return 0;}return 160;}/**
554 + * Collapse the range-selection guidance so it does not reserve empty layout space.
555 + *
556 + * @param {number|string} resource_id Booking resource ID.
557 + */function wpbc_range_selection__hide_guidance(resource_id){jQuery('#wpbc_range_selection_guidance'+resource_id).attr('aria-hidden','true').stop(true,true).slideUp(wpbc_range_selection__get_guidance_animation_duration());}/**
558 + * Show the prepared informational note after the first range click.
522 559 * The calendar parameter can be set to false by PHP or JavaScript to suppress this UI per resource.
523 560 *
524 561 * @param {number|string} resource_id Booking resource ID.
525 - * @returns {boolean} True when the note was inserted.
526 - */function wpbc_range_selection__show_guidance(resource_id){var is_enabled=_wpbc.calendar__get_param_value(resource_id,'range_selection_guidance_is_enabled');var $booking_form=jQuery('#booking_form_div'+resource_id);var $calendar_frame;var $note;wpbc_range_selection__hide_guidance(resource_id);if(false===is_enabled||0===is_enabled||'0'===is_enabled||'off'===String(is_enabled).toLowerCase()||'false'===String(is_enabled).toLowerCase()||'dynamic'!==_wpbc.calendar__get_param_value(resource_id,'days_select_mode')||0===$booking_form.length){return false;}$calendar_frame=$booking_form.find('.block_hints.datepick').first();if(0===$calendar_frame.length){$calendar_frame=$booking_form.find('.wpbc_cal_powered_by').first();if(0===$calendar_frame.length){$calendar_frame=$booking_form.find('.bk_calendar_frame').first();if(0===$calendar_frame.length){return false;}}}$note=jQuery('<div>',{'id':'wpbc_range_selection_guidance'+resource_id,'class':'wpbc_range_selection_guidance wpbc_front_end__message wpbc_fe_message_info','role':'status','aria-live':'polite'});$note.append(jQuery('<i>',{'class':'menu_icon icon-1x wpbc_icn_info_outline','aria-hidden':'true'}));$note.append(jQuery('<span>').text(_wpbc.get_message('message_range_selection_click_last_date')));$calendar_frame.after($note);return true;}/**
562 + * @returns {boolean} True when the note was shown.
563 + */function wpbc_range_selection__show_guidance(resource_id){var $note=wpbc_range_selection__prepare_guidance(resource_id);if(0===$note.length){return false;}$note.stop(true,true).slideDown(wpbc_range_selection__get_guidance_animation_duration()).removeAttr('aria-hidden');$note.find('span').text(_wpbc.get_message('message_range_selection_click_last_date'));return true;}/**
527 564 * Synchronize the guidance with Datepick's two-click range state.
528 565 *
529 566 * @param {number|string} resource_id Booking resource ID.
530 567 */function wpbc_range_selection__sync_guidance(resource_id){var inst=wpbc_calendar__get_inst(resource_id);if(null!==inst&&'dynamic'===_wpbc.calendar__get_param_value(resource_id,'days_select_mode')&&true===inst.stayOpen&&1===inst.dates.length&&inst.dates[0]){wpbc_range_selection__show_guidance(resource_id);return;}wpbc_range_selection__hide_guidance(resource_id);}/**
@@ -755,17 +792,32 @@
755 792 * @param month - real month - 12
756 793 * @returns {boolean}
757 794 */function wpbc_calendar__scroll_to(resource_id,year,month){if('undefined'===typeof resource_id){resource_id='1';}var inst=wpbc_calendar__get_inst(resource_id);if(null!==inst){year=parseInt(year);month=parseInt(month)-1;// In JS date, month -1
758 795 inst.cursorDate=new Date();// In some cases, the setFullYear can set only Year, and not the Month and day // FixIn: 6.2.3.5.
759 -inst.cursorDate.setFullYear(year,month,1);inst.cursorDate.setMonth(month);inst.cursorDate.setDate(1);inst.drawMonth=inst.cursorDate.getMonth();inst.drawYear=inst.cursorDate.getFullYear();jQuery.datepick._notifyChange(inst);jQuery.datepick._adjustInstDate(inst);jQuery.datepick._showDate(inst);jQuery.datepick._updateDatepick(inst);return true;}return false;}/**
760 - * Is this date selectable in calendar (mainly it's means AVAILABLE date)
761 - *
762 - * @param {int|string} resource_id 1
763 - * @param {string} sql_class_day '2023-08-11'
764 - * @returns {boolean} true | false
765 - */function wpbc_is_this_day_selectable(resource_id,sql_class_day){// Get Data --------------------------------------------------------------------------------------------------------
766 -var date_bookings_obj=_wpbc.bookings_in_calendar__get_for_date(resource_id,sql_class_day);if(!date_bookings_obj||'undefined'===typeof date_bookings_obj['day_availability']){return false;}var is_day_selectable=parseInt(date_bookings_obj['day_availability'])>0;if(typeof date_bookings_obj['summary']==='undefined'){return is_day_selectable;}if('available'!=date_bookings_obj['summary']['status_for_day']){var is_set_pending_days_selectable=_wpbc.calendar__get_param_value(resource_id,'pending_days_selectable');// set pending days selectable // FixIn: 8.6.1.18.
767 -var booking_statuses_arr=wpbc_get_booking_statuses__as_arr(date_bookings_obj);if(wpbc_booking_statuses__has(booking_statuses_arr,'pending')||wpbc_booking_statuses__has(booking_statuses_arr,'pending_pending')||wpbc_booking_statuses__has(booking_statuses_arr,'pending_approved')||wpbc_booking_statuses__has(booking_statuses_arr,'approved_pending')){is_day_selectable=is_day_selectable?true:is_set_pending_days_selectable;}}return is_day_selectable;}/**
796 +inst.cursorDate.setFullYear(year,month,1);inst.cursorDate.setMonth(month);inst.cursorDate.setDate(1);inst.drawMonth=inst.cursorDate.getMonth();inst.drawYear=inst.cursorDate.getFullYear();jQuery.datepick._notifyChange(inst);jQuery.datepick._adjustInstDate(inst);jQuery.datepick._showDate(inst);jQuery.datepick._updateDatepick(inst);return true;}return false;}/**
797 + * Determine native date selectability without optional date constraints.
798 + *
799 + * This helper exposes the canonical calendar result for algorithms, such as
800 + * gap discovery, that must not consume their own derived constraints. It does
801 + * not trigger wpbc_calendar__apply_date_constraints and must remain free of
802 + * optional-module state.
803 + *
804 + * @param {number|string} resource_id Booking resource ID.
805 + * @param {string} sql_date Calendar date in YYYY-MM-DD format.
806 + * @returns {boolean} True when core calendar data marks the date selectable.
807 + */function wpbc_is_this_day_selectable__raw(resource_id,sql_date){// Get Data --------------------------------------------------------------------------------------------------------
808 +var date_bookings_obj=_wpbc.bookings_in_calendar__get_for_date(resource_id,sql_date);var is_day_selectable=false;if(date_bookings_obj&&'undefined'!==typeof date_bookings_obj['day_availability']){is_day_selectable=parseInt(date_bookings_obj['day_availability'])>0;if('undefined'!==typeof date_bookings_obj['summary']&&'available'!=date_bookings_obj['summary']['status_for_day']){var is_set_pending_days_selectable=_wpbc.calendar__get_param_value(resource_id,'pending_days_selectable');// set pending days selectable // FixIn: 8.6.1.18.
809 +var booking_statuses_arr=wpbc_get_booking_statuses__as_arr(date_bookings_obj);if(wpbc_booking_statuses__has(booking_statuses_arr,'pending')||wpbc_booking_statuses__has(booking_statuses_arr,'pending_pending')||wpbc_booking_statuses__has(booking_statuses_arr,'pending_approved')||wpbc_booking_statuses__has(booking_statuses_arr,'approved_pending')){is_day_selectable=is_day_selectable?true:is_set_pending_days_selectable;}}}return Boolean(is_day_selectable);}/**
810 + * Determine final date selectability after native and optional constraints.
811 + *
812 + * Native unavailability returns immediately. Optional modules may therefore
813 + * only block a natively selectable date and can never reopen a core-unavailable
814 + * date.
815 + *
816 + * @param {number|string} resource_id Booking resource ID.
817 + * @param {string} sql_date Calendar date in YYYY-MM-DD format.
818 + * @returns {boolean} True when the date remains selectable after constraints.
819 + */function wpbc_is_this_day_selectable(resource_id,sql_date){var is_natively_selectable=wpbc_is_this_day_selectable__raw(resource_id,sql_date);if(!is_natively_selectable){return false;}return wpbc_calendar__evaluate_date_constraints(resource_id,sql_date,is_natively_selectable,[]).is_selectable;}/**
768 820 * Is date to check IN array of selected dates
769 821 *
770 822 * @param {date}js_date_to_check - JS Date - simple JavaScript Date object
771 823 * @param {[]} js_dates_arr - [ JSDate, ... ] - array of JS dates
@@ -967,9 +1019,9 @@
967 1019 for(var j=0;j<dates_arr.dates_js.length;j++){// Loop array of dates
968 1020 var str_date=wpbc__get__sql_class_date(dates_arr.dates_js[j]);// Date unavailable !
969 1021 if(0==_wpbc.bookings_in_calendar__get_for_date(resource_id,str_date).day_availability){return 0;}if(dates_arr.dates_js[j]!=-1){inst.dates.push(dates_arr.dates_js[j]);}}var check_out_date=dates_arr.dates_js[dates_arr.dates_js.length-1];inst.dates.push(check_out_date);// Need add one additional SAME date for correct works of dates selection !!!!!
970 1022 var checkout_timestamp=check_out_date.getTime();var td_cell=wpbc_get_clicked_td(inst.id,check_out_date);jQuery.datepick._selectDay(td_cell,'#'+inst.id,checkout_timestamp);}if(0!==inst.dates.length){// Scroll to specific month, if we set dates in some future months
971 -wpbc_calendar__scroll_to(resource_id,inst.dates[0].getFullYear(),inst.dates[0].getMonth()+1);}return inst.dates.length;}return 0;}/**
1023 +wpbc_calendar__scroll_to(resource_id,inst.dates[0].getFullYear(),inst.dates[0].getMonth()+1);}return wpbc_get__selected_dates_sql__as_arr(resource_id).length;}return 0;}/**
972 1024 * Get HTML td element (where was click in calendar day cell)
973 1025 *
974 1026 * @param calendar_html_id 'calendar_booking1'
975 1027 * @param date_js JS Date
@@ -995,16 +1047,20 @@
995 1047 var original_array=[];var bk_distinct_dates=[];var one_date_str;for(var d=0;d<dates_to_select_arr.length;d++){original_array.push(wpbc__get__js_date(dates_to_select_arr[d]));one_date_str=dates_to_select_arr[d].split('-');if(!wpbc_in_array(bk_distinct_dates,one_date_str[2]+'.'+one_date_str[1]+'.'+one_date_str[0])){bk_distinct_dates.push(parseInt(one_date_str[2])+'.'+parseInt(one_date_str[1])+'.'+one_date_str[0]);}}return{'dates_js':original_array,'dates_str':original_array};}// =====================================================================================================================
996 1048 /* == Auto Fill Fields / Auto Select Dates ==
997 1049 // ===================================================================================================================== */jQuery(document).ready(function(){var url_params=new URLSearchParams(window.location.search);// Disable days selection in calendar, after redirection from the "Search results page, after search availability" // FixIn: 8.8.2.3.
998 1050 if('On'!=_wpbc.get_other_param('is_enabled_booking_search_results_days_select')){if(url_params.has('wpbc_select_check_in')&&url_params.has('wpbc_select_check_out')&&url_params.has('wpbc_select_calendar_id')){var select_dates_in_calendar_id=parseInt(url_params.get('wpbc_select_calendar_id'));// Fire on all booking dates loaded
999 -jQuery('body').on('wpbc_calendar_ajx__loaded_data',function(event,loaded_resource_id){if(loaded_resource_id==select_dates_in_calendar_id){wpbc_auto_select_dates_in_calendar(select_dates_in_calendar_id,url_params.get('wpbc_select_check_in'),url_params.get('wpbc_select_check_out'));}});}}if(url_params.has('wpbc_auto_fill')){var wpbc_auto_fill_value=url_params.get('wpbc_auto_fill');// Convert back. Some systems do not like symbol '~' in URL, so we need to replace to some other symbols
1051 +jQuery('body').on('wpbc_calendar_ajx__loaded_data',function(event,loaded_resource_id){if(loaded_resource_id==select_dates_in_calendar_id){wpbc_auto_select_dates_in_calendar(select_dates_in_calendar_id,url_params.get('wpbc_select_check_in'),url_params.get('wpbc_select_check_out'));}});}}if(url_params.has('wpbc_auto_fill')&&!jQuery('body').hasClass('wp-admin')){var wpbc_auto_fill_value=url_params.get('wpbc_auto_fill');// Convert back. Some systems do not like symbol '~' in URL, so we need to replace to some other symbols
1000 1052 wpbc_auto_fill_value=wpbc_auto_fill_value.replaceAll('_^_','~');wpbc_auto_fill_booking_fields(wpbc_auto_fill_value);}});/**
1001 1053 * Autofill / select booking form fields by values from the GET request parameter: ?wpbc_auto_fill=
1002 1054 *
1003 - * @param auto_fill_str
1055 + * URL-provided field names are resolved through the exact-name DOM API so
1056 + * they can never be interpreted as CSS selector syntax.
1057 + *
1058 + * @param {string} auto_fill_str Serialized field-name and value pairs.
1059 + * @return {void}
1004 1060 */function wpbc_auto_fill_booking_fields(auto_fill_str){// FixIn: 10.0.0.48.
1005 1061 if(''==auto_fill_str){return;}// console.log( 'WPBC_AUTO_FILL_BOOKING_FIELDS( AUTO_FILL_STR )', auto_fill_str);
1006 -var fields_arr=wpbc_auto_fill_booking_fields__parse(auto_fill_str);for(let i=0;i<fields_arr.length;i++){jQuery('[name="'+fields_arr[i]['name']+'"]').val(fields_arr[i]['value']);}}/**
1062 +var fields_arr=wpbc_auto_fill_booking_fields__parse(auto_fill_str);for(let i=0;i<fields_arr.length;i++){var field_name=String(fields_arr[i]['name']||'');if(''===field_name){continue;}var field_elements=document.getElementsByName(field_name);if(0<field_elements.length){jQuery(field_elements).val(fields_arr[i]['value']);}}}/**
1007 1063 * Parse data from get parameter: ?wpbc_auto_fill=visitors231^2~max_capacity231^2
1008 1064 *
1009 1065 * @param data_str = 'visitors231^2~max_capacity231^2';
1010 1066 * @returns {*}
@@ -1174,14 +1230,19 @@
1174 1230 // Bookings - Dates
1175 1231 _wpbc.bookings_in_calendar__set_dates(response_data['resource_id'],response_data['ajx_data']['dates']);// Bookings - Child or only single booking resource in dates
1176 1232 _wpbc.booking__set_param_value(response_data['resource_id'],'resources_id_arr__in_dates',response_data['ajx_data']['resources_id_arr__in_dates']);// Aggregate booking resources, if any ?
1177 1233 _wpbc.booking__set_param_value(response_data['resource_id'],'aggregate_resource_id_arr',response_data['ajx_data']['aggregate_resource_id_arr']);// -------------------------------------------------------------------------------------------------
1178 -// Update calendar
1234 +/**
1235 + * Allow optional modules to calculate derived calendar state after canonical
1236 + * AJAX data is stored and before the first refreshed calendar render.
1237 + *
1238 + * @param {number|string} resource_id Booking resource ID.
1239 + */jQuery('body').trigger('wpbc_calendar_ajx__before_update_look',[response_data['resource_id']]);// Update calendar
1179 1240 wpbc_calendar__update_look(response_data['resource_id']);if('function'===typeof wpbc_hook__init_timeselector){wpbc_hook__init_timeselector();}if('undefined'!==typeof response_data['ajx_data']['ajx_after_action_message']&&''!=response_data['ajx_data']['ajx_after_action_message'].replace(/\n/g,"<br />")){var jq_node=wpbc_get_calendar__jq_node__for_messages(this.data);// Show Message
1180 1241 wpbc_front_end__show_message(response_data['ajx_data']['ajx_after_action_message'].replace(/\n/g,"<br />"),{'type':'undefined'!==typeof response_data['ajx_data']['ajx_after_action_message_status']?response_data['ajx_data']['ajx_after_action_message_status']:'info','show_here':{'jq_node':jq_node,'where':'after'},'is_append':true,'style':'text-align:left;','delay':10000});}if('function'===typeof wpbc_update_capacity_hint){wpbc_update_capacity_hint(response_data['resource_id']);}// Trigger event that calendar has been // FixIn: 10.0.0.44. // FixIn: 10.14.17.2.
1181 1242 if(jQuery('#calendar_booking'+response_data['resource_id']).length>0||jQuery('#date_booking'+response_data['resource_id']).length>0){var target_elm=jQuery('body').trigger("wpbc_calendar_ajx__loaded_data",[response_data['resource_id']]);//jQuery( 'body' ).on( 'wpbc_calendar_ajx__loaded_data', function( event, resource_id ) { ... } );
1182 1243 }//jQuery( '#ajax_respond' ).html( response_data ); // For ability to show response, add such DIV element to page
1183 -}).fail(function(jqXHR,textStatus,errorThrown){wpbc_front_end__log_unexpected_ajax_response('WPBC_AJX_CALENDAR_LOAD',jqXHR.responseText||'',jqXHR,textStatus,errorThrown);var ajx_post_data__resource_id=wpbc_get_resource_id__from_ajx_post_data_url(this.data);wpbc_balancer__completed(ajx_post_data__resource_id,'wpbc_calendar__load_data__ajx');wpbc_calendar__loading__stop(ajx_post_data__resource_id);var error_message=_wpbc.get_message('message_unexpected_server_response')||'The server returned an unexpected response. Please reload the page and try again.';if(jqXHR.status){error_message+=' ('+parseInt(jqXHR.status,10)+')';}var message_show_delay=3000;var jq_node=wpbc_get_calendar__jq_node__for_messages(this.data);/**
1244 +}).fail(function(jqXHR,textStatus,errorThrown){wpbc_front_end__log_unexpected_ajax_response('WPBC_AJX_CALENDAR_LOAD',jqXHR.responseText||'',jqXHR,textStatus,errorThrown);var ajx_post_data__resource_id=wpbc_get_resource_id__from_ajx_post_data_url(this.data);wpbc_balancer__completed(ajx_post_data__resource_id,'wpbc_calendar__load_data__ajx');wpbc_calendar__loading__stop(ajx_post_data__resource_id);var fallback_error_message=_wpbc.get_message('message_unexpected_server_response')||'The server returned an unexpected response. Please reload the page and try again.';var conflict_cache_hint=_wpbc.get_message('message_http_conflict_cache_hint')||'A cached or optimized version of this page may be outdated. Clear the browser cache and reload the page. Website administrators should also purge page, server, and CDN caches and regenerate minified or optimized files.';var error_message=wpbc_front_end__get_ajax_error_message(jqXHR,fallback_error_message,conflict_cache_hint);var message_show_delay=3000;var jq_node=wpbc_get_calendar__jq_node__for_messages(this.data);/**
1184 1245 * If we make fast clicking on different pages,
1185 1246 * then under calendar will show error message with empty text, because ajax was not received.
1186 1247 * To not show such warnings we are set delay in 3 seconds. var message_show_delay = 3000;
1187 1248 */var closed_timer=setTimeout(function(){// Show Message
@@ -1223,8 +1284,23 @@
1223 1284 */// ---------------------------------------------------------------------------------------------------------------------
1224 1285 // Show Messages at Front-Edn side
1225 1286 // ---------------------------------------------------------------------------------------------------------------------
1226 1287 /**
1288 + * Extract a safe plain-text message from a recognized JSON AJAX error response.
1289 + *
1290 + * Only documented message properties are accepted. Callers must still render the returned value in text mode so an
1291 + * upstream response cannot inject markup into the public booking page.
1292 + *
1293 + * @param {jqXHR|null} jq_xhr jQuery XHR object, when available.
1294 + * @return {string} Bounded server message, or an empty string when the response is not recognized.
1295 + */function wpbc_front_end__get_safe_ajax_error_message(jq_xhr){if(!jq_xhr||!jq_xhr.responseJSON||'object'!==typeof jq_xhr.responseJSON||Array.isArray(jq_xhr.responseJSON)){return'';}var response_json=jq_xhr.responseJSON;var message_candidates=[];if('string'===typeof response_json.message){message_candidates.push(response_json.message);}if(response_json.data&&'object'===typeof response_json.data&&!Array.isArray(response_json.data)&&'string'===typeof response_json.data.message){message_candidates.push(response_json.data.message);}for(var candidate_index=0;candidate_index<message_candidates.length;candidate_index++){var server_message=message_candidates[candidate_index].trim();if(server_message){return server_message.slice(0,1000);}}return'';}/**
1296 + * Build a public-safe AJAX failure message with optional HTTP 409 cache troubleshooting guidance.
1297 + *
1298 + * @param {jqXHR|null} jq_xhr jQuery XHR object, when available.
1299 + * @param {string} fallback_message Localized fallback shown when no safe server message exists.
1300 + * @param {string} http_conflict_cache_hint Optional localized cache guidance for HTTP 409 responses.
1301 + * @return {string} Plain-text message including the HTTP status when available.
1302 + */function wpbc_front_end__get_ajax_error_message(jq_xhr,fallback_message,http_conflict_cache_hint){var http_status=jq_xhr&&jq_xhr.status?parseInt(jq_xhr.status,10):0;var safe_server_message=wpbc_front_end__get_safe_ajax_error_message(jq_xhr);var error_message=safe_server_message||String(fallback_message||'').trim();if(409===http_status&&http_conflict_cache_hint){error_message+=(error_message?' ':'')+String(http_conflict_cache_hint).trim();}if(http_status){error_message+=' ('+http_status+')';}return error_message;}/**
1227 1303 * Log an unexpected AJAX response for browser-console diagnostics.
1228 1304 *
1229 1305 * The response is intentionally kept out of frontend notices because it can contain a complete HTML error or login page.
1230 1306 * Logging it here preserves the server payload and request context for support troubleshooting.
@@ -1234,9 +1310,9 @@
1234 1310 * @param {jqXHR|null} jq_xhr jQuery XHR object, when available.
1235 1311 * @param {string} text_status jQuery request status or success state.
1236 1312 * @param {string|Error} error_thrown Error description or exception reported by jQuery.
1237 1313 * @return {void}
1238 - */function wpbc_front_end__log_unexpected_ajax_response(ajax_action,response_data,jq_xhr,text_status,error_thrown){if(!window.console||'function'!==typeof window.console.error){return;}try{var content_type='';if(jq_xhr&&'function'===typeof jq_xhr.getResponseHeader){content_type=jq_xhr.getResponseHeader('content-type')||'';}window.console.error('[WPBC][AJAX-UNEXPECTED-RESPONSE] '+ajax_action,{'action':ajax_action,'http_status':jq_xhr&&jq_xhr.status?parseInt(jq_xhr.status,10):0,'http_status_text':jq_xhr&&jq_xhr.statusText?jq_xhr.statusText:'','text_status':text_status||'','error':error_thrown||'','content_type':content_type,'response':response_data});}catch(logging_error){// Console diagnostics must never interrupt frontend error recovery.
1314 + */function wpbc_front_end__log_unexpected_ajax_response(ajax_action,response_data,jq_xhr,text_status,error_thrown){if(!window.console||'function'!==typeof window.console.error){return;}try{var content_type='';var response_text='string'===typeof response_data?response_data:'';var response_length=response_text.length;var response_format=response_text?'text':'empty';var http_status=jq_xhr&&jq_xhr.status?parseInt(jq_xhr.status,10):0;var diagnostic_action=String(ajax_action||'AJAX').replace(/^WPBC_AJX_/,'').replace(/[^A-Za-z0-9]+/g,'-').toUpperCase();var diagnostic_code='WPBC-'+diagnostic_action+'-'+(http_status||'NETWORK');var response_headers={};if(jq_xhr&&'function'===typeof jq_xhr.getResponseHeader){content_type=jq_xhr.getResponseHeader('content-type')||'';response_headers={'server':jq_xhr.getResponseHeader('server')||'','cf_ray':jq_xhr.getResponseHeader('cf-ray')||'','x_cache':jq_xhr.getResponseHeader('x-cache')||'','x_cache_status':jq_xhr.getResponseHeader('x-cache-status')||'','x_litespeed_cache':jq_xhr.getResponseHeader('x-litespeed-cache')||'','x_request_id':jq_xhr.getResponseHeader('x-request-id')||''};}if(jq_xhr&&jq_xhr.responseJSON&&'object'===typeof jq_xhr.responseJSON){response_format='json';try{response_length=JSON.stringify(jq_xhr.responseJSON).length;}catch(response_json_error){response_length=0;}}else if(-1!==content_type.toLowerCase().indexOf('html')||/^\s*(?:<!doctype|<html)/i.test(response_text)){response_format='html';}window.console.error('[WPBC][AJAX-UNEXPECTED-RESPONSE] '+ajax_action,{'action':ajax_action,'diagnostic_code':diagnostic_code,'http_status':http_status,'http_status_text':jq_xhr&&jq_xhr.statusText?jq_xhr.statusText:'','text_status':text_status||'','error':error_thrown||'','content_type':content_type,'response_format':response_format,'response_length':response_length,'server_message':wpbc_front_end__get_safe_ajax_error_message(jq_xhr),'response_headers':response_headers,'response':response_data});}catch(logging_error){// Console diagnostics must never interrupt frontend error recovery.
1239 1315 }}/**
1240 1316 * Show message in content
1241 1317 *
1242 1318 * @param message Message HTML
@@ -1357,19 +1433,24 @@
1357 1433 * if the real calendar hasn't replaced the loader.
1358 1434 * - Multiple calendars and duplicate RIDs are handled.
1359 1435 */(function(w,d){'use strict';/* ---------------------------------------------------------------------------
1360 1436 * Small utilities (snake_case)
1361 - * ------------------------------------------------------------------------ *//** Track processed loader elements; fallback to data flag if WeakSet missing. */var processed_set=typeof WeakSet==='function'?new WeakSet():null;/** Return first match inside optional root. */function query_one(selector,root){return(root||d).querySelector(selector);}/** Return NodeList of matches inside optional root. */function query_all(selector,root){return(root||d).querySelectorAll(selector);}/** Run a callback when DOM is ready. */function on_ready(fn){if(d.readyState==='loading'){d.addEventListener('DOMContentLoaded',fn);}else{fn();}}/** Clear interval safely. */function safe_clear(interval_id){try{w.clearInterval(interval_id);}catch(e){}}/** Mark element processed (WeakSet or data attribute). */function mark_processed(el){if(processed_set){processed_set.add(el);}else{try{el.dataset.wpbcProcessed='1';}catch(e){}}}/** Check if element was processed. */function is_processed(el){return processed_set?processed_set.has(el):el&&el.dataset&&el.dataset.wpbcProcessed==='1';}/* ---------------------------------------------------------------------------
1362 - * Messages (fixed English strings; no i18n)
1363 - * ------------------------------------------------------------------------ *//**
1364 - * Build fixed English messages for a resource.
1365 - * @param {string|number} rid
1366 - * @return {{duplicate:string,support:string,lib_jq:string,lib_dp:string,lib_wpbc:string}}
1367 - */function get_messages(rid){var rid_int=parseInt(rid,10);return{duplicate:'You have added the same calendar (ID = '+rid_int+') more than once on this page. '+'Please keep only one calendar with the same ID on a page to avoid conflicts.',init_failed:'The calendar could not be initialized on this page.'+'\n'+'Please check your browser console for JavaScript errors and conflicts with other scripts/plugins.',support:'',/* 'Contact [email protected] if you have any questions.', */lib_jq:'It appears that the "jQuery" library is not loading correctly.'+'\n'+'For more information, please refer to this page: https://wpbookingcalendar.com/faq/',lib_dp:'It appears that the "jQuery.datepick" library is not loading correctly.'+'\n'+'For more information, please refer to this page: https://wpbookingcalendar.com/faq/',lib_wpbc:'It appears that the "_wpbc" library is not loading correctly.'+'\n'+'Please enable the loading of JS/CSS files for this page on the "WP Booking Calendar" - "Settings General" - "Advanced" page'+'\n'+'For more information, please refer to this page: https://wpbookingcalendar.com/faq/'};}/**
1368 - * Wrap plain text (with newlines) in a small HTML container.
1369 - * @param {string} msg
1370 - * @return {string}
1371 - */function wrap_html(msg){return'<div style="font-size:13px;margin:10px;">'+String(msg||'').replace(/\n/g,'<br>')+'</div>';}/** Library presence checks (fast & cheap). */function has_jq(){return!!(w.jQuery&&jQuery.fn&&typeof jQuery.fn.on==='function');}function has_dp(){return!!(w.jQuery&&jQuery.datepick);}function has_wpbc(){return!!(w._wpbc&&typeof w._wpbc.set_other_param==='function');}function normalize_rid(rid){var n=parseInt(rid,10);return n>0?String(n):'';}function get_rid_counts(rid){var r=normalize_rid(rid);return{rid:r,loaders:r?query_all('.calendar_loader_frame[data-wpbc-rid="'+r+'"]').length:0,containers:r?query_all('#calendar_booking'+r).length:0};}function is_duplicate_rid(rid){var c=get_rid_counts(rid);return c.loaders>1||c.containers>1;}/**
1437 + * ------------------------------------------------------------------------ *//** Track processed loader elements; fallback to data flag if WeakSet missing. */var processed_set=typeof WeakSet==='function'?new WeakSet():null;/** Return first match inside optional root. */function query_one(selector,root){return(root||d).querySelector(selector);}/** Return NodeList of matches inside optional root. */function query_all(selector,root){return(root||d).querySelectorAll(selector);}/** Run a callback when DOM is ready. */function on_ready(fn){if(d.readyState==='loading'){d.addEventListener('DOMContentLoaded',fn);}else{fn();}}/** Clear interval safely. */function safe_clear(interval_id){try{w.clearInterval(interval_id);}catch(e){}}/** Mark element processed (WeakSet or data attribute). */function mark_processed(el){if(processed_set){processed_set.add(el);}else{try{el.dataset.wpbcProcessed='1';}catch(e){}}}/** Check if element was processed. */function is_processed(el){return processed_set?processed_set.has(el):el&&el.dataset&&el.dataset.wpbcProcessed==='1';}/* ---------------------------------------------------------------------------
1438 + * Messages
1439 + * ------------------------------------------------------------------------ *//**
1440 + * Build visitor messages for a resource, using localized Form Messages when available.
1441 + * @param {string|number} rid
1442 + * @return {{duplicate:string,init_failed:string,support:string,lib_jq:string,lib_dp:string,lib_wpbc:string}}
1443 + */function get_messages(rid){var rid_int=parseInt(rid,10);var duplicate_message='More than one calendar or booking form for Booking Resource ID {resource_id} is present on this page. '+'A hidden copy still conflicts with the visible form and can prevent booking submission. '+'The site administrator must keep only one calendar or form for this Booking Resource. '+'After the page is corrected, reload it and try again.';if(w._wpbc&&typeof w._wpbc.get_message==='function'){duplicate_message=w._wpbc.get_message('message_duplicate_booking_resource_on_page')||duplicate_message;}duplicate_message=String(duplicate_message).replace(/\{resource_id\}/g,String(rid_int));return{duplicate:duplicate_message,init_failed:'The calendar could not be initialized on this page.'+'\n'+'Please check your browser console for JavaScript errors and conflicts with other scripts/plugins.',support:'',/* 'Contact [email protected] if you have any questions.', */lib_jq:'It appears that the "jQuery" library is not loading correctly.'+'\n'+'For more information, please refer to this page: https://wpbookingcalendar.com/faq/',lib_dp:'It appears that the "jQuery.datepick" library is not loading correctly.'+'\n'+'For more information, please refer to this page: https://wpbookingcalendar.com/faq/',lib_wpbc:'It appears that the "_wpbc" library is not loading correctly.'+'\n'+'Please enable the loading of JS/CSS files for this page on the "WP Booking Calendar" - "Settings General" - "Advanced" page'+'\n'+'For more information, please refer to this page: https://wpbookingcalendar.com/faq/'};}/**
1444 + * Escape a plain-text loader message before inserting its wrapper markup.
1445 + *
1446 + * @param {string} plain_text Visitor-facing plain text.
1447 + * @return {string} HTML-safe text.
1448 + */function escape_html(plain_text){return String(plain_text||'').replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;').replace(/"/g,'&quot;').replace(/'/g,'&#039;');}/**
1449 + * Wrap plain text (with newlines) in a small HTML container.
1450 + * @param {string} msg
1451 + * @return {string}
1452 + */function wrap_html(msg){return'<div style="font-size:13px;margin:10px;">'+escape_html(msg).replace(/\n/g,'<br>')+'</div>';}/** Library presence checks (fast & cheap). */function has_jq(){return!!(w.jQuery&&jQuery.fn&&typeof jQuery.fn.on==='function');}function has_dp(){return!!(w.jQuery&&jQuery.datepick);}function has_wpbc(){return!!(w._wpbc&&typeof w._wpbc.set_other_param==='function');}function normalize_rid(rid){var n=parseInt(rid,10);return n>0?String(n):'';}function get_rid_counts(rid){var r=normalize_rid(rid);return{rid:r,loaders:r?query_all('.calendar_loader_frame[data-wpbc-rid="'+r+'"]').length:0,containers:r?query_all('#calendar_booking'+r).length:0};}function is_duplicate_rid(rid){var c=get_rid_counts(rid);return c.loaders>1||c.containers>1;}/**
1372 1453 * Determine if the loader has been replaced by the real calendar.
1373 1454 *
1374 1455 * @param {Element} el Loader element
1375 1456 * @param {string} rid Resource ID
@@ -1417,10 +1498,23 @@
1417 1498 var nickname=fill_values.nickname!=null?String(fill_values.nickname):'';var last_name=fill_values.last_name!=null?String(fill_values.last_name):'';var first_name=fill_values.first_name!=null?String(fill_values.first_name):'';var email=fill_values.email!=null?String(fill_values.email):'';var phone=fill_values.phone!=null?String(fill_values.phone):'';var nb_enfant=fill_values.nb_enfant!=null?String(fill_values.nb_enfant):'';var url=fill_values.url!=null?String(fill_values.url):'';return[{re:/^([A-Za-z0-9_\-\.])*(nickname){1}([A-Za-z0-9_\-\.])*$/,val:nickname},{re:/^([A-Za-z0-9_\-\.])*(last|second){1}([_\-\.])?name([A-Za-z0-9_\-\.])*$/,val:last_name},{re:/^name([0-9_\-\.])*$/,val:first_name},{re:/^([A-Za-z0-9_\-\.])*(first|my){1}([_\-\.])?name([A-Za-z0-9_\-\.])*$/,val:first_name},{re:/^(e)?([_\-\.])?mail([0-9_\-\.]*)$/,val:email},{re:/^([A-Za-z0-9_\-\.])*(phone|fone){1}([A-Za-z0-9_\-\.])*$/,val:phone},{re:/^(e)?([_\-\.])?nb_enfant([0-9_\-\.]*)$/,val:nb_enfant},{re:/^([A-Za-z0-9_\-\.])*(URL|site|web|WEB){1}([A-Za-z0-9_\-\.])*$/,val:url}];}})(window);// == Submit Booking Data ==============================================================================================
1418 1499 // Refactored (safe), with new wpbc_* names.
1419 1500 // Backward-compatible wrappers for legacy function names are included at the bottom.
1420 1501 // @file: includes/__js/client/front_end_form/booking_form_submit.js
1421 -/**
1422 - * Check fields at form and then send request (legacy: mybooking_submit).
1502 +/**
1503 + * Check whether a form belongs to a request-local booking preview.
1504 + *
1505 + * Signed iframe and new-window previews intentionally do not use this marker;
1506 + * they retain the complete Booking Calendar preview lifecycle.
1507 + *
1508 + * @param {HTMLFormElement} submit_form Booking form being submitted.
1509 + * @return {boolean} True when final submission must remain local and non-mutating.
1510 + */function wpbc_booking_form__is_inline_preview_submission(submit_form){return 0<jQuery(submit_form).closest('[data-wpbc-inline-booking-preview="1"]').length;}/**
1511 + * Explain below the form why a request-local preview cannot create a booking.
1512 + *
1513 + * @param {HTMLFormElement} submit_form Booking form being submitted.
1514 + * @return {void}
1515 + */function wpbc_booking_form__show_inline_preview_submission_notice(submit_form){wpbc_front_end__show_message__warning_under_element(submit_form,_wpbc.get_message('message_inline_preview_submission_disabled'),'text');}/**
1516 + * Check fields at form and then send request (legacy: mybooking_submit).
1423 1517 *
1424 1518 * @param {HTMLFormElement} submit_form
1425 1519 * @param {number|string} resource_id
1426 1520 * @param {string} wpdev_active_locale
@@ -1430,9 +1524,9 @@
1430 1524 if(!submit_form||!submit_form.elements){/* eslint-disable no-console */console.error('WPBC: Invalid submit form in wpbc_booking_form_submit().');/* eslint-enable no-console */return false;}// -------------------------------------------------------------------------
1431 1525 // External hook: allow pause submit on confirmation/summary step.
1432 1526 // -------------------------------------------------------------------------
1433 1527 var target_elm=jQuery('.booking_form_div').trigger('booking_form_submit_click',[resource_id,submit_form,wpdev_active_locale]);// FixIn: 8.8.3.13.
1434 -if(jQuery(target_elm).find('input[name="booking_form_show_summary"]').length>0&&'pause_submit'===jQuery(target_elm).find('input[name="booking_form_show_summary"]').val()){return false;}// FixIn: 8.4.0.2.
1528 +if(jQuery(target_elm).find('input[name="booking_form_show_summary"]').length>0&&'pause_submit'===jQuery(target_elm).find('input[name="booking_form_show_summary"]').val()){return false;}if(wpbc_booking_form__is_inline_preview_submission(submit_form)){wpbc_booking_form__show_inline_preview_submission_notice(submit_form);return false;}// FixIn: 8.4.0.2.
1435 1529 var is_error=wpbc_check_errors_in_booking_form(resource_id);if(is_error){return false;}// -------------------------------------------------------------------------
1436 1530 // Show message if no selected days in Calendar(s).
1437 1531 // -------------------------------------------------------------------------
1438 1532 var date_input=document.getElementById('date_booking'+resource_id);var date_value=date_input?date_input.value:'';if(''===date_value){var arr_of_selected_additional_calendars=wpbc_get_arr_of_selected_additional_calendars(resource_id);// FixIn: 8.5.2.26.
@@ -1532,9 +1626,9 @@
1532 1626 *
1533 1627 * @return {undefined} Legacy behavior.
1534 1628 */function wpbc_send_ajax_submit(resource_id,formdata,captcha_chalange,user_captcha,is_send_emeils,my_booking_hash,my_booking_form,wpdev_active_locale){resource_id=parseInt(resource_id,10);// Disable Submit | Show spin loader.
1535 1629 wpbc_booking_form__on_submit__ui_elements_disable(resource_id);// FixIn: 2026-02-05 - pass preview context to booking create Ajax.
1536 -var form_status=wpbc__get_form_status_for_submit(resource_id);var preview_args=form_status==='preview'?wpbc__get_bfb_preview_args_from_location():null;var $add_booking_modal=jQuery('#booking_form'+resource_id).closest('#wpbc_modal__add_booking__section');var is_allow_past=0;var classic_booking_context_token='';var has_add_booking_modal_context=$add_booking_modal.length&&$add_booking_modal.is(':visible');if(has_add_booking_modal_context){is_allow_past=$add_booking_modal.find('[data-wpbc-add-booking-allow-past]').first().is(':checked')?1:0;if(!is_allow_past){is_allow_past='1'===String($add_booking_modal.attr('data-wpbc-add-booking-allow-past')||'0')?1:0;}}if(!has_add_booking_modal_context&&'undefined'!==typeof _wpbc){is_allow_past='1'===String(_wpbc.get_other_param('this_page_allow_past')||'0')?1:0;classic_booking_context_token=String(_wpbc.booking__get_param_value(resource_id,'classic_booking_context_token')||'');}var request_params={'resource_id':resource_id,'dates_ddmmyy_csv':document.getElementById('date_booking'+resource_id).value,'formdata':formdata,'booking_hash':my_booking_hash,'custom_form':my_booking_form,'aggregate_resource_id_arr':null!==_wpbc.booking__get_param_value(resource_id,'aggregate_resource_id_arr')?_wpbc.booking__get_param_value(resource_id,'aggregate_resource_id_arr').join(','):'','captcha_chalange':captcha_chalange,'captcha_user_input':user_captcha,'is_emails_send':is_send_emeils,'active_locale':wpdev_active_locale,'form_status':form_status,'allow_past':is_allow_past,'classic_booking_context_token':classic_booking_context_token};var $time_override_panel=jQuery('#booking_form'+resource_id).find('[data-wpbc-add-booking-time-override-panel]').first();if(!$time_override_panel.length){$time_override_panel=jQuery('#wpbc_modal__add_booking__section:visible').find('[data-wpbc-add-booking-time-override-panel]').first();}if($time_override_panel.length&&$time_override_panel.find('[data-wpbc-add-booking-time-override-enabled]').first().is(':checked')){request_params['wpbc_time_override_enabled']=1;request_params['wpbc_time_override_source']=$time_override_panel.attr('data-wpbc-add-booking-time-override-source')||'';request_params['wpbc_time_override_start']=$time_override_panel.find('[data-wpbc-add-booking-time-override-field="start"]').first().val()||'';request_params['wpbc_time_override_end']=$time_override_panel.find('[data-wpbc-add-booking-time-override-field="end"]').first().val()||'';}var selected_dates_count=String(request_params['dates_ddmmyy_csv']||'').split(',').filter(function(date_text){return''!==String(date_text||'').replace(/^\s+|\s+$/g,'');}).length;var is_times_availability_override=1===parseInt(request_params['wpbc_time_override_enabled']||0,10)&&'times_availability'===String(request_params['wpbc_time_override_source']||'');if(has_add_booking_modal_context&&'1'===String($add_booking_modal.attr('data-wpbc-add-booking-force-recurrent-time')||'0')||is_times_availability_override&&selected_dates_count>1){request_params['is_use_booking_recurrent_time']=1;}// If preview, pass session identifiers so PHP can load transient snapshot.
1630 +var form_status=wpbc__get_form_status_for_submit(resource_id);var preview_args=form_status==='preview'?wpbc__get_bfb_preview_args_from_location():null;var $add_booking_modal=jQuery('#booking_form'+resource_id).closest('#wpbc_modal__add_booking__section');var is_allow_past=0;var classic_booking_context_token='';var admin_booking_nonce='';var has_add_booking_modal_context=$add_booking_modal.length&&$add_booking_modal.is(':visible');if('undefined'!==typeof _wpbc){admin_booking_nonce=String(_wpbc.get_other_param('this_page_admin_booking_nonce')||'');}if(has_add_booking_modal_context){is_allow_past=$add_booking_modal.find('[data-wpbc-add-booking-allow-past]').first().is(':checked')?1:0;if(!is_allow_past){is_allow_past='1'===String($add_booking_modal.attr('data-wpbc-add-booking-allow-past')||'0')?1:0;}}if(!has_add_booking_modal_context&&'undefined'!==typeof _wpbc){is_allow_past='1'===String(_wpbc.get_other_param('this_page_allow_past')||'0')?1:0;classic_booking_context_token=String(_wpbc.booking__get_param_value(resource_id,'classic_booking_context_token')||'');}var request_params={'resource_id':resource_id,'dates_ddmmyy_csv':document.getElementById('date_booking'+resource_id).value,'formdata':formdata,'booking_hash':my_booking_hash,'custom_form':my_booking_form,'aggregate_resource_id_arr':null!==_wpbc.booking__get_param_value(resource_id,'aggregate_resource_id_arr')?_wpbc.booking__get_param_value(resource_id,'aggregate_resource_id_arr').join(','):'','captcha_chalange':captcha_chalange,'captcha_user_input':user_captcha,'is_emails_send':is_send_emeils,'active_locale':wpdev_active_locale,'form_status':form_status,'allow_past':is_allow_past,'classic_booking_context_token':classic_booking_context_token,'wpbc_admin_booking_nonce':admin_booking_nonce};var $time_override_panel=jQuery('#booking_form'+resource_id).find('[data-wpbc-add-booking-time-override-panel]').first();if(!$time_override_panel.length){$time_override_panel=jQuery('#wpbc_modal__add_booking__section:visible').find('[data-wpbc-add-booking-time-override-panel]').first();}if($time_override_panel.length&&$time_override_panel.find('[data-wpbc-add-booking-time-override-enabled]').first().is(':checked')){request_params['wpbc_time_override_enabled']=1;request_params['wpbc_time_override_source']=$time_override_panel.attr('data-wpbc-add-booking-time-override-source')||'';request_params['wpbc_time_override_start']=$time_override_panel.find('[data-wpbc-add-booking-time-override-field="start"]').first().val()||'';request_params['wpbc_time_override_end']=$time_override_panel.find('[data-wpbc-add-booking-time-override-field="end"]').first().val()||'';}var selected_dates_count=String(request_params['dates_ddmmyy_csv']||'').split(',').filter(function(date_text){return''!==String(date_text||'').replace(/^\s+|\s+$/g,'');}).length;var is_times_availability_override=1===parseInt(request_params['wpbc_time_override_enabled']||0,10)&&'times_availability'===String(request_params['wpbc_time_override_source']||'');if(has_add_booking_modal_context&&'1'===String($add_booking_modal.attr('data-wpbc-add-booking-force-recurrent-time')||'0')||is_times_availability_override&&selected_dates_count>1){request_params['is_use_booking_recurrent_time']=1;}// If preview, pass session identifiers so PHP can load transient snapshot.
1537 1631 if(preview_args&&preview_args.token&&preview_args.form_id){request_params['wpbc_bfb_preview']=1;request_params['wpbc_bfb_preview_token']=preview_args.token;request_params['wpbc_bfb_preview_form_id']=preview_args.form_id;request_params['wpbc_bfb_preview_nonce']=preview_args.nonce;// note: URL param is `nonce`.
1538 1632 }var is_exit=wpbc_ajx_booking__create(request_params);if(true===is_exit){return;}}// == Helper Functions =================================================================================================
1539 1633 /**
1540 1634 * Parse query string into {key:value} (old-browser safe).
@@ -1557,5 +1651,5 @@
1557 1651 * @return {string} 'preview'|'published'
1558 1652 */function wpbc__get_form_status_for_submit(resource_id){var status='';try{if(typeof _wpbc!=='undefined'&&_wpbc.booking__get_param_value){status=_wpbc.booking__get_param_value(resource_id,'form_status');}}catch(e){}status=status==null?'':String(status);status=status.toLowerCase();// URL-based detection for preview iframe.
1559 1653 var preview_args=wpbc__get_bfb_preview_args_from_location();if(preview_args){return'preview';}return status==='preview'?'preview':'published';}// == Backward-compatible wrappers (keep old global names working 100% as before). =====================================
1560 1654 function mybooking_submit(submit_form,resource_id,wpdev_active_locale){return wpbc_booking_form_submit(submit_form,resource_id,wpdev_active_locale);}try{var ev=typeof CustomEvent==='function'?new CustomEvent('wpbc-ready'):document.createEvent('Event');if(ev.initEvent){ev.initEvent('wpbc-ready',true,true);}document.dispatchEvent(ev);console.log('wpbc-ready');}catch(e){console.error("WPBC event 'wpbc-ready' failed!",e);}
1561 -//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX2Rpc3QvYWxsL19vdXQvd3BiY19hbGwuanMiLCJuYW1lcyI6WyJ3cGJjX3RyaW0iLCJzdHJpbmdfdG9fdHJpbSIsIkFycmF5IiwiaXNBcnJheSIsImpvaW4iLCJ0cmltIiwid3BiY19pbl9hcnJheSIsImFycmF5X2hlcmUiLCJwX3ZhbCIsImkiLCJsIiwibGVuZ3RoIiwiaXNfcGxheWdyb3VuZF9vcmlnaW4iLCJsb2NhdGlvbiIsIm9yaWdpbiIsImlzX3BzZXVkb19saW5rIiwiYSIsImdldEF0dHJpYnV0ZSIsImhyZWYiLCJ0b0xvd2VyQ2FzZSIsImluZGV4T2YiLCJmaXhfdGFyZ2V0IiwiaGFzQXR0cmlidXRlIiwidGFyZ2V0IiwiaW5pdF9maXgiLCJub2RlcyIsImRvY3VtZW50IiwicXVlcnlTZWxlY3RvckFsbCIsImFkZEV2ZW50TGlzdGVuZXIiLCJlIiwiY2xvc2VzdCIsInNjaGVkdWxlX2luaXQiLCJzZXRUaW1lb3V0IiwicmVhZHlTdGF0ZSIsIndwYmNfY2xvbmVfb2JqIiwib2JqIiwiSlNPTiIsInBhcnNlIiwic3RyaW5naWZ5IiwiX3dwYmMiLCIkIiwicF9zZWN1cmUiLCJzZWN1cml0eV9vYmoiLCJ1c2VyX2lkIiwibm9uY2UiLCJsb2NhbGUiLCJzZXRfc2VjdXJlX3BhcmFtIiwicGFyYW1fa2V5IiwicGFyYW1fdmFsIiwiZ2V0X3NlY3VyZV9wYXJhbSIsInBfY2FsZW5kYXJzIiwiY2FsZW5kYXJzX29iaiIsImNhbGVuZGFyX19pc19kZWZpbmVkIiwicmVzb3VyY2VfaWQiLCJjYWxlbmRhcl9faW5pdCIsImNhbGVuZGFyX19pc19wcm9wX2ludCIsInByb3BlcnR5X25hbWUiLCJwX2NhbGVuZGFyX2ludF9wcm9wZXJ0aWVzIiwiaXNfaW5jbHVkZSIsImluY2x1ZGVzIiwiY2FsZW5kYXJzX2FsbF9fc2V0IiwiY2FsZW5kYXJzX2FsbF9fZ2V0IiwiY2FsZW5kYXJfX2dldF9wYXJhbWV0ZXJzIiwiY2FsZW5kYXJfX3NldF9wYXJhbWV0ZXJzIiwiY2FsZW5kYXJfcHJvcGVydHlfb2JqIiwiaXNfY29tcGxldGVfb3ZlcndyaXRlIiwicHJvcF9uYW1lIiwiY2FsZW5kYXJfX3NldF9wYXJhbV92YWx1ZSIsInByb3BfdmFsdWUiLCJjYWxlbmRhcl9fZ2V0X3BhcmFtX3ZhbHVlIiwicGFyc2VJbnQiLCJwX2Jvb2tpbmdzIiwiYm9va2luZ3Nfb2JqIiwiYm9va2luZ3NfaW5fY2FsZW5kYXJfX2lzX2RlZmluZWQiLCJib29raW5nc19pbl9jYWxlbmRhcl9fZ2V0IiwiYm9va2luZ3NfaW5fY2FsZW5kYXJfX3NldCIsImNhbGVuZGFyX29iaiIsImJvb2tpbmdzX2luX2NhbGVuZGFyX19nZXRfZGF0ZXMiLCJib29raW5nc19pbl9jYWxlbmRhcl9fc2V0X2RhdGVzIiwiZGF0ZXNfb2JqIiwiYm9va2luZ3NfaW5fY2FsZW5kYXJfX2dldF9mb3JfZGF0ZSIsInNxbF9jbGFzc19kYXkiLCJib29raW5nX19zZXRfcGFyYW1fdmFsdWUiLCJib29raW5nX19nZXRfcGFyYW1fdmFsdWUiLCJib29raW5nc19pbl9jYWxlbmRhcnNfX3NldF9hbGwiLCJib29raW5nc19pbl9jYWxlbmRhcnNfX2dldF9hbGwiLCJwX3NlYXNvbnMiLCJzZWFzb25zX29iaiIsInNlYXNvbnNfX3NldCIsInNlYXNvbl9uYW1lX2tleSIsInB1c2giLCJzZWFzb25zX19nZXRfZm9yX2RhdGUiLCJwX290aGVyIiwib3RoZXJfb2JqIiwic2V0X290aGVyX3BhcmFtIiwiZ2V0X290aGVyX3BhcmFtIiwiZ2V0X290aGVyX3BhcmFtX19hbGwiLCJwX21lc3NhZ2VzIiwibWVzc2FnZXNfb2JqIiwic2V0X21lc3NhZ2UiLCJnZXRfbWVzc2FnZSIsImdldF9tZXNzYWdlc19fYWxsIiwialF1ZXJ5Iiwid2luZG93IiwiX19XUEJDX0RFViIsImRldiIsInNlZW4iLCJTZXQiLCJlbmFibGVkIiwib3V0IiwibGV2ZWwiLCJjb2RlIiwibXNnIiwiZXh0cmEiLCJjb25zb2xlIiwid2FybiIsImxvZyIsImRlYnVnIiwiZXJyb3IiLCJlcnJPck1zZyIsIkVycm9yIiwibWVzc2FnZSIsIlN0cmluZyIsIm9uY2UiLCJrZXkiLCJoYXMiLCJhZGQiLCJ0cnkiLCJmbiIsIl8iLCJyZWFzb24iLCJwX2JhbGFuY2VyIiwiYmFsYW5jZXJfb2JqIiwiYmFsYW5jZXJfX3NldF9tYXhfdGhyZWFkcyIsIm1heF90aHJlYWRzIiwiYmFsYW5jZXJfX2lzX2RlZmluZWQiLCJiYWxhbmNlcl9faW5pdCIsImZ1bmN0aW9uX25hbWUiLCJwYXJhbXMiLCJiYWxhbmNlX29iaiIsImJhbGFuY2VyX19pc19hbHJlYWR5X3J1biIsImJhbGFuY2VyX19pc19hbHJlYWR5X3dhaXQiLCJiYWxhbmNlcl9fY2FuX2lfcnVuIiwiYmFsYW5jZXJfX2FkZF90b19fcnVuIiwiYmFsYW5jZXJfX2FkZF90b19fd2FpdCIsImJhbGFuY2VyX19yZW1vdmVfZnJvbV9fd2FpdF9saXN0IiwicmVtb3ZlZF9lbCIsInNwbGljZSIsInBvcCIsImZpbHRlciIsInYiLCJiYWxhbmNlcl9fcmVtb3ZlX2Zyb21fX3J1bl9saXN0IiwiYmFsYW5jZXJfX3J1bl9uZXh0IiwiYmFsYW5jZXJfX3J1biIsIndwYmNfY2FsZW5kYXJfX2xvYWRfZGF0YV9fYWp4Iiwid3BiY19iYWxhbmNlcl9faXNfd2FpdCIsImJhbGFuY2VyX3N0YXR1cyIsIndwYmNfYmFsYW5jZXJfX2NvbXBsZXRlZCIsIndwYmNfY2FsZW5kYXJfc2hvdyIsImhhc0NsYXNzIiwiZXhpc3RpbmdfaW5zdCIsImRhdGVwaWNrIiwiX2dldEluc3QiLCJnZXQiLCJyZW1vdmVDbGFzcyIsIndwYmNfcmFuZ2Vfc2VsZWN0aW9uX19oaWRlX2d1aWRhbmNlIiwibG9jYWxfX2lzX3JhbmdlX3NlbGVjdCIsImxvY2FsX19tdWx0aV9kYXlzX3NlbGVjdF9udW0iLCJsb2NhbF9fbWluX2RhdGUiLCJEYXRlIiwibG9jYWxfX21heF9kYXRlIiwid3BiY19jYWxlbmRhcl9fZ2V0X2RhdGVzX3N0YXJ0Iiwid3BiY19jYWxlbmRhcl9fZ2V0X2RhdGVzX2VuZCIsIndwYmNfZWRpdF9ib29raW5nX2hhc2giLCJ3cGJjX2lzX2VkaXRfYm9va2luZ19jb250ZXh0Iiwid3BiY19hbGxvd19wYXN0X2NvbnRleHQiLCJ3cGJjX2lzX2FsbG93X3Bhc3RfY29udGV4dCIsIndwYmNfYWxsb3dfcGFzdF9kYXRlX2FyciIsIndwYmNfaXNfYWRkX2Jvb2tpbmdfYWRtaW5fcGFnZSIsIndwYmNfbWluX2RhdGVfYXJyIiwibG9jYWxfX3N0YXJ0X3dlZWtkYXkiLCJsb2NhbF9fbnVtYmVyX29mX21vbnRocyIsInRleHQiLCJiZWZvcmVTaG93RGF5IiwianNfZGF0ZSIsIndwYmNfX2NhbGVuZGFyX19hcHBseV9jc3NfdG9fZGF5cyIsIm9uU2VsZWN0Iiwic3RyaW5nX2RhdGVzIiwianNfZGF0ZXNfYXJyIiwid3BiY19fY2FsZW5kYXJfX29uX3NlbGVjdF9kYXlzIiwib25Ib3ZlciIsInN0cmluZ19kYXRlIiwid3BiY19fY2FsZW5kYXJfX29uX2hvdmVyX2RheXMiLCJvbkNoYW5nZU1vbnRoWWVhciIsInllYXIiLCJyZWFsX21vbnRoIiwianNfZGF0ZV9fMXN0X2RheV9pbl9tb250aCIsInNob3dPbiIsIm51bWJlck9mTW9udGhzIiwic3RlcE1vbnRocyIsInByZXZUZXh0IiwibmV4dFRleHQiLCJkYXRlRm9ybWF0IiwiY2hhbmdlTW9udGgiLCJjaGFuZ2VZZWFyIiwibWluRGF0ZSIsIm1heERhdGUiLCJzaG93U3RhdHVzIiwibXVsdGlTZXBhcmF0b3IiLCJjbG9zZUF0VG9wIiwiZmlyc3REYXkiLCJnb3RvQ3VycmVudCIsImhpZGVJZk5vUHJldk5leHQiLCJtdWx0aVNlbGVjdCIsInJhbmdlU2VsZWN0IiwidXNlVGhlbWVSb2xsZXIiLCJ3cGJjX2NhbGVuZGFyc19fY2xlYXJfZGF5c19oaWdobGlnaHRpbmciLCJzdGFydF9ia19tb250aCIsIndwYmNfY2FsZW5kYXJfX3Njcm9sbF90byIsIndwYmNfZ2V0X2Jvb2tpbmdfc3RhdHVzZXNfX2FzX2FyciIsImRhdGVfYm9va2luZ3Nfb2JqIiwiYm9va2luZ19zdGF0dXMiLCJ0b1N0cmluZyIsInNwbGl0Iiwid3BiY19ib29raW5nX3N0YXR1c2VzX19oYXMiLCJib29raW5nX3N0YXR1c2VzX2FyciIsIndwYmNfYm9va2luZ19zdGF0dXNlc19faGFzX3BhcnQiLCJib29raW5nX3N0YXR1c19wYXJ0IiwiZGF0ZSIsImNhbGVuZGFyX3BhcmFtc19hcnIiLCJkYXRlcGlja190aGlzIiwidG9kYXlfZGF0ZSIsImNsYXNzX2RheSIsIndwYmNfX2dldF9fdGRfY2xhc3NfZGF0ZSIsIndwYmNfX2dldF9fc3FsX2NsYXNzX2RhdGUiLCJzZWxlY3RlZF9kYXRlc19zcWwiLCJ3cGJjX2dldF9fc2VsZWN0ZWRfZGF0ZXNfc3FsX19hc19hcnIiLCJjc3NfY2xhc3Nlc19fZm9yX2RhdGUiLCJnZXREYXkiLCJpc19kYXlfc2VsZWN0YWJsZSIsInNlYXNvbl9uYW1lc19hcnIiLCJzZWFzb25fa2V5IiwicmVwbGFjZSIsImlzX3NldF9wZW5kaW5nX2RheXNfc2VsZWN0YWJsZSIsImRhdGVfYm9va2luZ19vYmoiLCJ0b29sdGlwX3RleHQiLCJ3cGJjX3NldF90b29sdGlwX19fZm9yX19jYWxlbmRhcl9kYXRlIiwiaXNfdW5zZWxlY3RhYmxlX2NhbGVuZGFyIiwiaXNfYm9va2luZ19mb3JtX2V4aXN0IiwiaXNfYWRkX2Jvb2tpbmdfbW9kYWxfY2FsZW5kYXIiLCJpc19hZG1pbl9jYWxlbmRhcl9wcmV2aWV3IiwiY3NzX29mX2NhbGVuZGFyIiwiY3NzIiwid3BiY19fY2FsZW5kYXJfX2RvX2RheXNfaGlnaGxpZ2h0X19icyIsIndwYmNfX2NhbGVuZGFyX19kb19kYXlzX2hpZ2hsaWdodF9fdW5yZXN0cmljdGVkX3JhbmdlIiwiaW5zdCIsIndwYmNfY2FsZW5kYXJfX2dldF9pbnN0IiwicmFuZ2Vfc3RhcnQiLCJyYW5nZV9lbmQiLCJ3b3JraW5nX2RhdGUiLCJ0ZF9vdmVycyIsImRhdGVzIiwid3BiY19pc190aGlzX2RheV9zZWxlY3RhYmxlIiwiYWRkQ2xhc3MiLCJnZXRGdWxsWWVhciIsImdldE1vbnRoIiwiZ2V0RGF0ZSIsImdldFRpbWUiLCJzZXREYXRlIiwid3BiY19fY2FsZW5kYXJfX2RvX2RheXNfc2VsZWN0X191bnJlc3RyaWN0ZWRfcmFuZ2UiLCJzZWxlY3RlZF9kYXRlcyIsImN1cnJlbnRfZGF0ZSIsInNlbGVjdGVkX3JhbmdlIiwic3RheU9wZW4iLCJ2YWwiLCJ3cGJjX2NhbGVuZGFyX191bnNlbGVjdF9hbGxfZGF0ZXMiLCJ3cGJjX2Zyb250X2VuZF9fc2hvd19tZXNzYWdlX193YXJuaW5nIiwiX2Zvcm1hdERhdGUiLCJyZW1vdmUiLCJ3cGJjX3JhbmdlX3NlbGVjdGlvbl9fc2hvd19ndWlkYW5jZSIsImlzX2VuYWJsZWQiLCIkYm9va2luZ19mb3JtIiwiJGNhbGVuZGFyX2ZyYW1lIiwiJG5vdGUiLCJmaW5kIiwiZmlyc3QiLCJhcHBlbmQiLCJhZnRlciIsIndwYmNfcmFuZ2Vfc2VsZWN0aW9uX19zeW5jX2d1aWRhbmNlIiwid3BiY19fY2FsZW5kYXJfX2RvX2RheXNfc2VsZWN0X19icyIsIndwYmNfZGlzYWJsZV90aW1lX2ZpZWxkc19pbl9ib29raW5nX2Zvcm0iLCJtb3VzZV9jbGlja2VkX2RhdGVzIiwiYWxsX3NlbGVjdGVkX2RhdGVzX2FyciIsInRyaWdnZXIiLCJyZWFkeSIsIm9uIiwiZXZlbnQiLCJjbG9zZWRfdGltZXIiLCJtaWRkbGVfZGF5c19vcGFjaXR5Iiwibm90IiwidGltZV9maWVsZHNfb2JqX2FyciIsIndwYmNfZ2V0X190aW1lX2ZpZWxkc19faW5fYm9va2luZ19mb3JtX19hc19hcnIiLCJzZWxlY3RlZF9kYXRlc19hcnIiLCJjaGlsZF9yZXNvdXJjZXNfYXJyIiwic3FsX2RhdGUiLCJjaGlsZF9yZXNvdXJjZV9pZCIsIm1lcmdlZF9zZWNvbmRzIiwidGltZV9maWVsZHNfb2JqIiwiaXNfaW50ZXJzZWN0IiwiaXNfY2hlY2tfaW4iLCJ0b2RheV90aW1lX19yZWFsIiwidG9kYXlfdGltZV9fc2hpZnQiLCJhbGxvd19wYXN0X2NvbnRleHQiLCJlZGl0X2Jvb2tpbmdfaGFzaF9jb250ZXh0IiwiaXNfYWxsb3dfcGFzdF9jb250ZXh0IiwiZmllbGRfa2V5IiwiZGlzYWJsZWQiLCJpc190aW1lX2luX3Bhc3QiLCJ3cGJjX2NoZWNrX2lzX3RpbWVfaW5fcGFzdCIsIm5hbWUiLCJob3dfbWFueV9yZXNvdXJjZXNfaW50ZXJzZWN0ZWQiLCJyZXNfa2V5IiwiYm9va2VkX3RpbWVfc2xvdHMiLCJ0aW1lc19hc19zZWNvbmRzIiwid3BiY19pc19pbnRlcnNlY3RfX3JhbmdlX3RpbWVfaW50ZXJ2YWwiLCJ3cGJjX2lzX2ludGVyc2VjdF9fb25lX3RpbWVfaW50ZXJ2YWwiLCJ3cGJjX19odG1sX190aW1lX2ZpZWxkX29wdGlvbnNfX3NldF9kaXNhYmxlZCIsImpzX2N1cnJlbnRfdGltZV90b19jaGVjayIsInNxbF9kYXRlX2FyciIsInNxbF9kYXRlX19taWRuaWdodCIsInNxbF9kYXRlX19taWRuaWdodF9taWxpc2Vjb25kcyIsInRpbWVzX2FzX3NlY29uZHNfY2hlY2siLCJ0aW1lX0EiLCJ0aW1lX2ludGVydmFsX0IiLCJqIiwidGltZV9pbnRlcnZhbF9BIiwid3BiY19pbnRlcnZhbHNfX2lzX2ludGVyc2VjdGVkIiwidGltZV9maWVsZHNfYXJyIiwiY3RmIiwidGltZV9maWVsZCIsInRpbWVfb3B0aW9uIiwianF1ZXJ5X29wdGlvbiIsInZhbHVlX29wdGlvbl9zZWNvbmRzX2FyciIsInN0YXJ0X2VuZF90aW1lc19hcnIiLCJ0aW1lX2luX3NlY29uZHMiLCJhdHRyIiwicHJvcCIsInBhcmVudCIsIndwYmNfaXNfdGhpc190aW1lc2xvdF9fZnVsbF9kYXlfYm9va2VkIiwidGltZXNsb3RfYXJyX2luX3NlY29uZHMiLCJuIiwic29ydCIsIndwYmNfZ2V0X19zZWxlY3RlZF90aW1lX2ZpZWxkc19faW5fYm9va2luZ19mb3JtX19hc19hcnIiLCJpc19vbmx5X3NlbGVjdGVkX3RpbWUiLCJ0ZXh0X3RpbWVfZmllbGRzX2FyciIsInRmIiwidGV4dF9qcXVlcnkiLCJ0aW1lX19oX21fX2FyciIsInRleHRfdGltZV9pbl9zZWNvbmRzIiwidGV4dF90aW1lc19hc19zZWNvbmRzIiwiX3VwZGF0ZURhdGVwaWNrIiwibW9udGgiLCJjdXJzb3JEYXRlIiwic2V0RnVsbFllYXIiLCJzZXRNb250aCIsImRyYXdNb250aCIsImRyYXdZZWFyIiwiX25vdGlmeUNoYW5nZSIsIl9hZGp1c3RJbnN0RGF0ZSIsIl9zaG93RGF0ZSIsIndwYmNfaXNfdGhpc19kYXlfYW1vbmdfc2VsZWN0ZWRfZGF5cyIsImpzX2RhdGVfdG9fY2hlY2siLCJkYXRlX2luZGV4Iiwid3BiY19fZ2V0X19qc19kYXRlIiwic3FsX2NsYXNzX2RhdGUiLCJzcWxfY2xhc3NfZGF0ZV9hcnIiLCJkYXRlX2pzIiwic2V0SG91cnMiLCJzZXRNaW51dGVzIiwic2V0U2Vjb25kcyIsInNldE1pbGxpc2Vjb25kcyIsInRkX2NsYXNzX2RheSIsIndwYmNfX2dldF9fZGF0ZV9wYXJhbXNfX2Zyb21fc3RyaW5nX2RhdGUiLCJzZXBhcmF0b3IiLCJkYXRlX2FyciIsImRhdGVfb2JqIiwid3BiY19jYWxlbmRhcl9fbG9hZGluZ19fc3RhcnQiLCJuZXh0Iiwid3BiY19jYWxlbmRhcl9fYmx1cl9fc3RhcnQiLCJ3cGJjX2NhbGVuZGFyX19sb2FkaW5nX19zdG9wIiwid3BiY19jYWxlbmRhcl9fYmx1cl9fc3RvcCIsIndwYmNfY2FsZW5kYXJfX3VwZGF0ZV9sb29rIiwianFfY2FsIiwid3BiY19jYWxlbmRhcl9fdXBkYXRlX21vbnRoc19udW1iZXIiLCJtb250aHNfbnVtYmVyIiwic2V0dGluZ3MiLCJ3cGJjX19jYWxlbmRhcl9fY2hhbmdlX3NraW4iLCJzZWxlY3RlZF9za2luX3VybCIsInN0eWxlc2hlZXQiLCJnZXRFbGVtZW50QnlJZCIsInBhcmVudE5vZGUiLCJyZW1vdmVDaGlsZCIsImhlYWRJRCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiY3NzTm9kZSIsImNyZWF0ZUVsZW1lbnQiLCJ0eXBlIiwic2V0QXR0cmlidXRlIiwicmVsIiwibWVkaWEiLCJhcHBlbmRDaGlsZCIsIndwYmNfX2Nzc19fY2hhbmdlX3NraW4iLCJzdHlsZXNoZWV0X2lkIiwid3BiY19pbnRlcnZhbHNfX21lcmdlX2luZXJzZWN0ZWQiLCJpbnRlcnZhbHMiLCJtZXJnZWQiLCJiIiwibWVyZ2VkSW50ZXJ2YWwiLCJpbnRlcnZhbCIsIk1hdGgiLCJtYXgiLCJpbnRlcnZhbF9BIiwiaW50ZXJ2YWxfQiIsImlzX2ludGVyc2VjdGVkIiwibWluIiwid3BiY19nZXRfYWJzX2Nsb3Nlc3RfdmFsdWVfaW5fYXJyIiwibXlWYWx1ZSIsIm15QXJyYXkiLCJkaWZmIiwiYWJzIiwiY2xvc2V0VmFsdWUiLCJ0ZF9jbGFzcyIsInRkX2VsIiwidW5kZWZpbmVkIiwiX3RpcHB5Iiwid3BiY190aXBweSIsImNvbnRlbnQiLCJyZWZlcmVuY2UiLCJwb3BvdmVyX2NvbnRlbnQiLCJhbGxvd0hUTUwiLCJpbnRlcmFjdGl2ZSIsImhpZGVPbkNsaWNrIiwiaW50ZXJhY3RpdmVCb3JkZXIiLCJtYXhXaWR0aCIsInRoZW1lIiwicGxhY2VtZW50IiwiZGVsYXkiLCJpZ25vcmVBdHRyaWJ1dGVzIiwidG91Y2giLCJhcHBlbmRUbyIsImJvZHkiLCJ3cGJjX2RhdGVzX19kYXlzX2JldHdlZW4iLCJkYXRlMSIsImRhdGUyIiwiT05FX0RBWSIsImRhdGUxX21zIiwiZGF0ZTJfbXMiLCJkaWZmZXJlbmNlX21zIiwicm91bmQiLCJ3cGJjX2RhdGVzX19pc19jb25zZWN1dGl2ZV9kYXRlc19hcnJfcmFuZ2UiLCJzcWxfZGF0ZXNfYXJyIiwicHJldmlvc19kYXRlIiwid3BiY19hdXRvX3NlbGVjdF9kYXRlc19pbl9jYWxlbmRhciIsImNoZWNrX2luX3ltZCIsImNoZWNrX291dF95bWQiLCJkYXRlc190b19zZWxlY3RfYXJyIiwid3BiY19jYWxfZGF5c19zZWxlY3RfX211bHRpcGxlIiwiY2hlY2tfaW5fanMiLCJ0ZF9jZWxsIiwid3BiY19nZXRfY2xpY2tlZF90ZCIsImlkIiwiX3NlbGVjdERheSIsImNoZWNrX291dF9qcyIsInRkX2NlbGxfb3V0IiwiZGF0ZXNfYXJyIiwid3BiY19nZXRfc2VsZWN0aW9uX2RhdGVzX2pzX3N0cl9hcnJfX2Zyb21fYXJyIiwid3BiY19nZXRfc2VsZWN0aW9uX2RhdGVzX2pzX3N0cl9hcnJfX2Zyb21fY2hlY2tfaW5fb3V0IiwiZGF0ZXNfanMiLCJzdHJfZGF0ZSIsImRheV9hdmFpbGFiaWxpdHkiLCJjaGVja19vdXRfZGF0ZSIsImNoZWNrb3V0X3RpbWVzdGFtcCIsImNhbGVuZGFyX2h0bWxfaWQiLCJvcmlnaW5hbF9hcnJheSIsImJrX2Rpc3RpbmN0X2RhdGVzIiwiY2hlY2tfaW5fZGF0ZSIsIm9yaWdpbmFsX2NoZWNrX2luX2RhdGUiLCJfcmVzdHJpY3RNaW5NYXgiLCJfZGV0ZXJtaW5lRGF0ZSIsImRhdGVfb3V0Iiwib3JpZ2luYWxfY2hlY2tfb3V0X2RhdGUiLCJtZXdEYXRlIiwib25lX2RhdGVfc3RyIiwiZCIsInVybF9wYXJhbXMiLCJVUkxTZWFyY2hQYXJhbXMiLCJzZWFyY2giLCJzZWxlY3RfZGF0ZXNfaW5fY2FsZW5kYXJfaWQiLCJsb2FkZWRfcmVzb3VyY2VfaWQiLCJ3cGJjX2F1dG9fZmlsbF92YWx1ZSIsInJlcGxhY2VBbGwiLCJ3cGJjX2F1dG9fZmlsbF9ib29raW5nX2ZpZWxkcyIsImF1dG9fZmlsbF9zdHIiLCJmaWVsZHNfYXJyIiwid3BiY19hdXRvX2ZpbGxfYm9va2luZ19maWVsZHNfX3BhcnNlIiwiZGF0YV9zdHIiLCJmaWx0ZXJfb3B0aW9uc19hcnIiLCJkYXRhX2FyciIsIm15X2Zvcm1fZmllbGQiLCJmaWx0ZXJfbmFtZSIsImZpbHRlcl92YWx1ZSIsIndwYmNfYXV0b19maWxsX3NlYXJjaF9maWVsZHNfX3BhcnNlIiwiZmlsdGVyX3R5cGUiLCJ3cGJjX2NhbGVuZGFyX19hdXRvX3VwZGF0ZV9tb250aHNfbnVtYmVyX19vbl9yZXNpemUiLCJ3aWR0aCIsIndwYmNfY2FsZW5kYXJzX19hdXRvX3VwZGF0ZV9tb250aHNfbnVtYmVyIiwiYWxsX2NhbGVuZGFyc19hcnIiLCJjYWxlbmRhcl9pZCIsInNsaWNlIiwid3BiY19jYWxlbmRhcl9fZ2V0X2RhdGVfcGFyYW1ldGVyIiwicGFyYW1ldGVyX3N0ciIsImRhdGVfZXhwZWN0ZWRfeW1kIiwiZGF0ZV9leHBlY3RlZF95bWRfYXJyIiwiZGF5Iiwid3BiY19jYWxfX3JlX2luaXQiLCJ3cGJjX2NhbF9kYXlzX3NlbGVjdF9fcmVfaW5pdCIsIndwYmNfY2FsX3JlYWR5X2RheXNfc2VsZWN0X19zaW5nbGUiLCJ3cGJjX2NhbF9kYXlzX3NlbGVjdF9fc2luZ2xlIiwid3BiY19jYWxfcmVhZHlfZGF5c19zZWxlY3RfX211bHRpcGxlIiwid3BiY19jYWxfcmVhZHlfZGF5c19zZWxlY3RfX2ZpeGVkIiwiZGF5c19udW1iZXIiLCJ3ZWVrX2RheXNfX3N0YXJ0Iiwid3BiY19jYWxfZGF5c19zZWxlY3RfX2ZpeGVkIiwid3BiY19jYWxfcmVhZHlfZGF5c19zZWxlY3RfX3JhbmdlX21vZGUiLCJ3cGJjX2NhbF9kYXlzX3NlbGVjdF9fcmFuZ2VfbW9kZSIsIndwYmNfY2FsX3JlYWR5X2RheXNfc2VsZWN0X19yYW5nZSIsImRheXNfbWluIiwiZGF5c19tYXgiLCJkYXlzX3NwZWNpZmljIiwid3BiY19jYWxfZGF5c19zZWxlY3RfX3JhbmdlIiwidGFyZ2V0X2VsbSIsImRhdGVzX3N0YXJ0IiwiZGF0ZXNfZW5kIiwiZ3JvdXBDb2xsYXBzZWQiLCJ3cGJjX2hvb2tfX2luaXRfdGltZXNlbGVjdG9yIiwicG9zdCIsIndwYmNfdXJsX2FqYXgiLCJhY3Rpb24iLCJ3cGJjX2FqeF91c2VyX2lkIiwid3BiY19hanhfbG9jYWxlIiwiY2FsZW5kYXJfcmVxdWVzdF9wYXJhbXMiLCJyZXNwb25zZV9kYXRhIiwidGV4dFN0YXR1cyIsImpxWEhSIiwiZ3JvdXBFbmQiLCJhanhfcG9zdF9kYXRhX19yZXNvdXJjZV9pZCIsIndwYmNfZ2V0X3Jlc291cmNlX2lkX19mcm9tX2FqeF9wb3N0X2RhdGFfdXJsIiwiZGF0YSIsImlzX3ZhbGlkX3Jlc3BvbnNlIiwiT2JqZWN0IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwianFfbm9kZSIsIndwYmNfZ2V0X2NhbGVuZGFyX19qcV9ub2RlX19mb3JfbWVzc2FnZXMiLCJyZXNwb25zZV9lcnJvcl9tZXNzYWdlIiwid3BiY19mcm9udF9lbmRfX2xvZ191bmV4cGVjdGVkX2FqYXhfcmVzcG9uc2UiLCJ3cGJjX2Zyb250X2VuZF9fc2hvd19tZXNzYWdlIiwid3BiY191cGRhdGVfY2FwYWNpdHlfaGludCIsImZhaWwiLCJlcnJvclRocm93biIsInJlc3BvbnNlVGV4dCIsImVycm9yX21lc3NhZ2UiLCJzdGF0dXMiLCJtZXNzYWdlX3Nob3dfZGVsYXkiLCJhanhfcG9zdF9kYXRhX3VybF9wYXJhbXMiLCJjYWxlbmRhcl9yZXNvdXJjZV9pZCIsIndwYmNfZ2V0X3VyaV9wYXJhbV9ieV9uYW1lIiwidXJsIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwicmVnZXgiLCJSZWdFeHAiLCJyZXN1bHRzIiwiZXhlYyIsImFqYXhfYWN0aW9uIiwianFfeGhyIiwidGV4dF9zdGF0dXMiLCJlcnJvcl90aHJvd24iLCJjb250ZW50X3R5cGUiLCJnZXRSZXNwb25zZUhlYWRlciIsInN0YXR1c1RleHQiLCJsb2dnaW5nX2Vycm9yIiwicGFyYW1zX2RlZmF1bHQiLCJwX2tleSIsImh0bWwiLCJ1bmlxdWVfZGl2X2lkIiwic2Nyb2xsX3RvX2VsZW1lbnQiLCJqcV9lbF9tZXNzYWdlIiwiaXNfc2hvd19tZXNzYWdlIiwic2libGluZ3MiLCJpcyIsImJlZm9yZSIsIm5leHRBbGwiLCJmYWRlT3V0IiwiY2xvc2VkX3RpbWVyMiIsInBhcmVudF9lbHMiLCJwYXJlbnRzIiwibWFwIiwic2hvdyIsIndwYmNfZG9fc2Nyb2xsIiwid3BiY19mcm9udF9lbmRfX3Nob3dfbWVzc2FnZV9fZXJyb3IiLCJjb250ZW50X21vZGUiLCJub3RpY2VfbWVzc2FnZV9pZCIsIndwYmNfZnJvbnRfZW5kX19zaG93X21lc3NhZ2VfX2Vycm9yX3VuZGVyX2VsZW1lbnQiLCJtZXNzYWdlX2RlbGF5Iiwid3BiY19mcm9udF9lbmRfX3Nob3dfbWVzc2FnZV9fZXJyb3JfYWJvdmVfZWxlbWVudCIsIndwYmNfaGlnaGxpZ2h0X2Vycm9yX29uX2Zvcm1fZmllbGQiLCJ3cGJjX2Zyb250X2VuZF9fc2hvd19tZXNzYWdlX193YXJuaW5nX3VuZGVyX2VsZW1lbnQiLCJ3cGJjX2Zyb250X2VuZF9fc2hvd19tZXNzYWdlX193YXJuaW5nX2Fib3ZlX2VsZW1lbnQiLCJqcV9ub2RlX2FyciIsImV4dHJhX3NoaWZ0X29mZnNldCIsInRhcmdldE9mZnNldCIsIm9mZnNldCIsInRvcCIsImFuaW1hdGUiLCJzY3JvbGxUb3AiLCJ3cGJjX2RlZmluZV90aXBweV9wb3BvdmVyIiwicG9wb3Zlcl90aXRsZSIsInN0YXRlIiwiaXNWaXNpYmxlIiwiaGlkZSIsIndwYmNfZGVmaW5lX2hpZGVfdGlwcHlfb25fc2Nyb2xsIiwiaGlkZUFsbCIsInciLCJwcm9jZXNzZWRfc2V0IiwiV2Vha1NldCIsInF1ZXJ5X29uZSIsInNlbGVjdG9yIiwicm9vdCIsInF1ZXJ5U2VsZWN0b3IiLCJxdWVyeV9hbGwiLCJvbl9yZWFkeSIsInNhZmVfY2xlYXIiLCJpbnRlcnZhbF9pZCIsImNsZWFySW50ZXJ2YWwiLCJtYXJrX3Byb2Nlc3NlZCIsImVsIiwiZGF0YXNldCIsIndwYmNQcm9jZXNzZWQiLCJpc19wcm9jZXNzZWQiLCJnZXRfbWVzc2FnZXMiLCJyaWQiLCJyaWRfaW50IiwiZHVwbGljYXRlIiwiaW5pdF9mYWlsZWQiLCJzdXBwb3J0IiwibGliX2pxIiwibGliX2RwIiwibGliX3dwYmMiLCJ3cmFwX2h0bWwiLCJoYXNfanEiLCJoYXNfZHAiLCJoYXNfd3BiYyIsIm5vcm1hbGl6ZV9yaWQiLCJnZXRfcmlkX2NvdW50cyIsInIiLCJsb2FkZXJzIiwiY29udGFpbmVycyIsImlzX2R1cGxpY2F0ZV9yaWQiLCJjIiwiaXNfcmVwbGFjZWQiLCJjb250YWluZXIiLCJsb2FkZXJfc3RpbGxfaW5fZG9tIiwiY29udGFpbnMiLCJjYWxlbmRhcl9leGlzdHMiLCJzdGFydF9mb3IiLCJ3cGJjUmlkIiwiZ3JhY2VfbXMiLCJ3cGJjR3JhY2UiLCJjb250YWluZXJfaWQiLCJ0ZXh0X2VsIiwicmVwbGFjZWRfbm93IiwicG9sbF9pZCIsInNldEludGVydmFsIiwib2JzZXJ2ZXIiLCJkaXNjb25uZWN0IiwiTXV0YXRpb25PYnNlcnZlciIsIm9ic2VydmUiLCJjaGlsZExpc3QiLCJzdWJ0cmVlIiwiZmluYWxpemVfYWZ0ZXJfZ3JhY2UiLCJNIiwiaW5uZXJIVE1MIiwiYm9vdHN0cmFwX2V4aXN0aW5nIiwiZm9yRWFjaCIsIm9ic2VydmVfbmV3X2xvYWRlcnMiLCJkb2Nfb2JzZXJ2ZXIiLCJtdXRhdGlvbnMiLCJhZGRlZE5vZGVzIiwibm9kZSIsIm5vZGVUeXBlIiwibWF0Y2hlcyIsImlubmVyIiwiZG9jdW1lbnRFbGVtZW50IiwiV1BCQ19GRSIsImF1dG9maWxsX2Jvb2tpbmdfZm9ybV9maWVsZHMiLCJmaWxsX3ZhbHVlcyIsImZvcm1faWQiLCJkYXRlX25hbWUiLCJzdWJtaXRfZm9ybSIsInJ1bGVzIiwiYXJyYXlfcnVsZXMiLCJlbGVtZW50cyIsImNvdW50IiwidmFsdWUiLCJyZSIsInRlc3QiLCJuaWNrbmFtZSIsImxhc3RfbmFtZSIsImZpcnN0X25hbWUiLCJlbWFpbCIsInBob25lIiwibmJfZW5mYW50Iiwid3BiY19ib29raW5nX2Zvcm1fc3VibWl0Iiwid3BkZXZfYWN0aXZlX2xvY2FsZSIsImlzX2Vycm9yIiwid3BiY19jaGVja19lcnJvcnNfaW5fYm9va2luZ19mb3JtIiwiZGF0ZV9pbnB1dCIsImRhdGVfdmFsdWUiLCJhcnJfb2Zfc2VsZWN0ZWRfYWRkaXRpb25hbF9jYWxlbmRhcnMiLCJ3cGJjX2dldF9hcnJfb2Zfc2VsZWN0ZWRfYWRkaXRpb25hbF9jYWxlbmRhcnMiLCJ3cGJjX2lzX3RoaXNfdGltZV9zZWxlY3Rpb25fbm90X2F2YWlsYWJsZSIsImFkZGl0aW9uYWxfY2FsZW5kYXJzX2VsIiwiaWRfYWRkaXRpb25hbF9zdHIiLCJpZF9hZGRpdGlvbmFsX2FyciIsImlzX3RpbWVzX2RhdGVzX29rIiwiaWEiLCJhZGRfaWQiLCJhZGRfZGF0ZV9lbCIsImFkZF9kYXRlX3ZhbCIsImZvcm1kYXRhIiwiaW5wX3ZhbHVlIiwiaW5wX3RpdGxlX3ZhbHVlIiwiZWxlbWVudCIsImVsX3R5cGUiLCJ3cGJjX2VzY2FwZV9zZXJpYWxpemVkX3ZhbHVlIiwid3BiY19nZXRfaW5wdXRfZWxlbWVudF90eXBlIiwidGFnTmFtZSIsInRhZyIsImNoZWNrZWQiLCJjbGFzc05hbWUiLCJpbnB1dF9lbGVtZW50X3R5cGUiLCJsYWJlbF9lbGVtZW50Iiwid3BiY19faXNfbGVzc190aGFuX3JlcXVpcmVkX19vZl9tYXhfYXZhaWxhYmxlX3Nsb3RzX19ibCIsInJlZ19lbWFpbCIsInByaW1hcnlfZW1haWxfbmFtZSIsIm1hdGNoIiwic3Vic3RyIiwiY2xlYW5fZmllbGRfbmFtZSIsInJlc291cmNlX2lkX3N0ciIsImNhcHRjaGEiLCJ3cGJjX2Zvcm1fc3VibWl0X3NlbmQiLCJjYXB0Y2hhX2NoYWxhbmdlIiwidXNlcl9jYXB0Y2hhIiwibXlfYm9va2luZ19mb3JtIiwiYm9va2luZ19mb3JtX3R5cGVfZWwiLCJteV9ib29raW5nX2hhc2giLCJpc19zZW5kX2VtZWlscyIsIiRpc19zZW5kX2VtYWlsX3RvZ2dsZSIsIiRtb2RhbF9zZW5kX2VtYWlsX3RvZ2dsZSIsImRhdGVfZWwiLCJ3cGJjX3NlbmRfYWpheF9zdWJtaXQiLCJ3cGJjX2Jvb2tpbmdfZm9ybV9fc3Bpbl9sb2FkZXJfX3Nob3ciLCJ3cGJjX3Jld3JpdGVfZmllbGRfbmFtZV9zdWZmaXgiLCJmaWVsZF9uYW1lIiwib2xkX2lkIiwibmV3X2lkIiwib2xkX2lkX3N0ciIsIm5ld19pZF9zdHIiLCJpZF9hZGRpdGlvbmFsIiwiZm9ybWRhdGFfYWRkaXRpb25hbF9hcnIiLCJmb3JtZGF0YV9hZGRpdGlvbmFsIiwid3BiY19ib29raW5nX2Zvcm1fX29uX3N1Ym1pdF9fdWlfZWxlbWVudHNfZGlzYWJsZSIsImZvcm1fc3RhdHVzIiwid3BiY19fZ2V0X2Zvcm1fc3RhdHVzX2Zvcl9zdWJtaXQiLCJwcmV2aWV3X2FyZ3MiLCJ3cGJjX19nZXRfYmZiX3ByZXZpZXdfYXJnc19mcm9tX2xvY2F0aW9uIiwiJGFkZF9ib29raW5nX21vZGFsIiwiaXNfYWxsb3dfcGFzdCIsImNsYXNzaWNfYm9va2luZ19jb250ZXh0X3Rva2VuIiwiaGFzX2FkZF9ib29raW5nX21vZGFsX2NvbnRleHQiLCJyZXF1ZXN0X3BhcmFtcyIsIiR0aW1lX292ZXJyaWRlX3BhbmVsIiwic2VsZWN0ZWRfZGF0ZXNfY291bnQiLCJkYXRlX3RleHQiLCJpc190aW1lc19hdmFpbGFiaWxpdHlfb3ZlcnJpZGUiLCJ0b2tlbiIsImlzX2V4aXQiLCJ3cGJjX2FqeF9ib29raW5nX19jcmVhdGUiLCJ3cGJjX19wYXJzZV9xdWVyeV9zdHJpbmciLCJxcyIsInBhcnRzIiwia3YiLCJrIiwicCIsIndwYmNfYmZiX3ByZXZpZXciLCJ3cGJjX2JmYl9wcmV2aWV3X3Rva2VuIiwid3BiY19iZmJfcHJldmlld19mb3JtX2lkIiwibXlib29raW5nX3N1Ym1pdCIsImV2IiwiQ3VzdG9tRXZlbnQiLCJjcmVhdGVFdmVudCIsImluaXRFdmVudCIsImRpc3BhdGNoRXZlbnQiXSwic291cmNlcyI6WyJ3cGJjX3V0aWxzLmpzIiwid3BiYy5qcyIsImRldl9sb2cuanMiLCJhanhfbG9hZF9iYWxhbmNlci5qcyIsIndwYmNfY2FsLmpzIiwiZGF5c19zZWxlY3RfY3VzdG9tLmpzIiwid3BiY19jYWxfYWp4LmpzIiwid3BiY19mZV9tZXNzYWdlcy5qcyIsInRpbWVsaW5lX3BvcG92ZXIuanMiLCJ3cGJjX2NhbF9sb2FkZXIuanMiLCJhdXRvZmlsbF9maWVsZHMuanMiLCJib29raW5nX2Zvcm1fc3VibWl0LmpzIiwid3BiY19yZWFkeV9ldmVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbiAqIEphdmFTY3JpcHQgVXRpbCBGdW5jdGlvbnNcdFx0Li4vaW5jbHVkZXMvX19qcy91dGlscy93cGJjX3V0aWxzLmpzXHJcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUcmltICBzdHJpbmdzIGFuZCBhcnJheSBqb2luZWQgd2l0aCAgKCwpXHJcbiAqXHJcbiAqIEBwYXJhbSBzdHJpbmdfdG9fdHJpbSAgIHN0cmluZyAvIGFycmF5XHJcbiAqIEByZXR1cm5zIHN0cmluZ1xyXG4gKi9cclxuZnVuY3Rpb24gd3BiY190cmltKHN0cmluZ190b190cmltKSB7XHJcblxyXG5cdGlmICggQXJyYXkuaXNBcnJheSggc3RyaW5nX3RvX3RyaW0gKSApIHtcclxuXHRcdHN0cmluZ190b190cmltID0gc3RyaW5nX3RvX3RyaW0uam9pbiggJywnICk7XHJcblx0fVxyXG5cclxuXHRpZiAoICdzdHJpbmcnID09IHR5cGVvZiAoc3RyaW5nX3RvX3RyaW0pICkge1xyXG5cdFx0c3RyaW5nX3RvX3RyaW0gPSBzdHJpbmdfdG9fdHJpbS50cmltKCk7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gc3RyaW5nX3RvX3RyaW07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDaGVjayBpZiBlbGVtZW50IGluIGFycmF5XHJcbiAqXHJcbiAqIEBwYXJhbSBhcnJheV9oZXJlXHRcdGFycmF5XHJcbiAqIEBwYXJhbSBwX3ZhbFx0XHRcdFx0ZWxlbWVudCB0byAgY2hlY2tcclxuICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAqL1xyXG5mdW5jdGlvbiB3cGJjX2luX2FycmF5KGFycmF5X2hlcmUsIHBfdmFsKSB7XHJcblx0Zm9yICggdmFyIGkgPSAwLCBsID0gYXJyYXlfaGVyZS5sZW5ndGg7IGkgPCBsOyBpKysgKSB7XHJcblx0XHRpZiAoIGFycmF5X2hlcmVbaV0gPT0gcF92YWwgKSB7XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHRyZXR1cm4gZmFsc2U7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBQcmV2ZW50IG9wZW5pbmcgYmxhbmsgd2luZG93cyBvbiBXb3JkUHJlc3MgcGxheWdyb3VuZCBmb3IgcHNldWRvIGxpbmtzIGxpa2UgdGhpczogPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiPiBvciAjIHRvIHN0YXkgaW4gdGhlIHNhbWUgdGFiLlxyXG4gKi9cclxuKGZ1bmN0aW9uICgpIHtcclxuXHQndXNlIHN0cmljdCc7XHJcblxyXG5cdGZ1bmN0aW9uIGlzX3BsYXlncm91bmRfb3JpZ2luKCkge1xyXG5cdFx0cmV0dXJuIGxvY2F0aW9uLm9yaWdpbiA9PT0gJ2h0dHBzOi8vcGxheWdyb3VuZC53b3JkcHJlc3MubmV0JztcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIGlzX3BzZXVkb19saW5rKGEpIHtcclxuXHRcdGlmICggIWEgfHwgIWEuZ2V0QXR0cmlidXRlICkgcmV0dXJuIHRydWU7XHJcblx0XHR2YXIgaHJlZiA9IChhLmdldEF0dHJpYnV0ZSggJ2hyZWYnICkgfHwgJycpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG5cdFx0cmV0dXJuIChcclxuXHRcdFx0IWhyZWYgfHxcclxuXHRcdFx0aHJlZiA9PT0gJyMnIHx8XHJcblx0XHRcdGhyZWYuaW5kZXhPZiggJyMnICkgPT09IDAgfHxcclxuXHRcdFx0aHJlZi5pbmRleE9mKCAnamF2YXNjcmlwdDonICkgPT09IDAgfHxcclxuXHRcdFx0aHJlZi5pbmRleE9mKCAnbWFpbHRvOicgKSA9PT0gMCB8fFxyXG5cdFx0XHRocmVmLmluZGV4T2YoICd0ZWw6JyApID09PSAwXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gZml4X3RhcmdldChhKSB7XHJcblx0XHRpZiAoICEgYSApIHJldHVybjtcclxuXHRcdGlmICggaXNfcHNldWRvX2xpbmsoIGEgKSB8fCBhLmhhc0F0dHJpYnV0ZSggJ2RhdGEtd3Atbm8tYmxhbmsnICkgKSB7XHJcblx0XHRcdGEudGFyZ2V0ID0gJ19zZWxmJztcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIGluaXRfZml4KCkge1xyXG5cdFx0Ly8gT3B0aW9uYWw6IGNsZWFuIHVwIGN1cnJlbnQgRE9NIChoYXJtbGVzc+KAlGFmZmVjdHMgb25seSBwc2V1ZG8vZGF0YW1hcmtlZCBsaW5rcykuXHJcblx0XHR2YXIgbm9kZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCAnYVtocmVmXScgKTtcclxuXHRcdGZvciAoIHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrICkgZml4X3RhcmdldCggbm9kZXNbaV0gKTtcclxuXHJcblx0XHQvLyBMYXRlIGJ1YmJsZS1waGFzZSBsaXN0ZW5lcnMgKHJ1biBhZnRlciBQbGF5Z3JvdW5kJ3MgaGFuZGxlcnMpXHJcblx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCAnY2xpY2snLCBmdW5jdGlvbiAoZSkge1xyXG5cdFx0XHR2YXIgYSA9IGUudGFyZ2V0ICYmIGUudGFyZ2V0LmNsb3Nlc3QgPyBlLnRhcmdldC5jbG9zZXN0KCAnYVtocmVmXScgKSA6IG51bGw7XHJcblx0XHRcdGlmICggYSApIGZpeF90YXJnZXQoIGEgKTtcclxuXHRcdH0sIGZhbHNlICk7XHJcblxyXG5cdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggJ2ZvY3VzaW4nLCBmdW5jdGlvbiAoZSkge1xyXG5cdFx0XHR2YXIgYSA9IGUudGFyZ2V0ICYmIGUudGFyZ2V0LmNsb3Nlc3QgPyBlLnRhcmdldC5jbG9zZXN0KCAnYVtocmVmXScgKSA6IG51bGw7XHJcblx0XHRcdGlmICggYSApIGZpeF90YXJnZXQoIGEgKTtcclxuXHRcdH0gKTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIHNjaGVkdWxlX2luaXQoKSB7XHJcblx0XHRpZiAoICFpc19wbGF5Z3JvdW5kX29yaWdpbigpICkgcmV0dXJuO1xyXG5cdFx0c2V0VGltZW91dCggaW5pdF9maXgsIDEwMDAgKTsgLy8gZW5zdXJlIHdlIGF0dGFjaCBhZnRlciBQbGF5Z3JvdW5kJ3Mgc2NyaXB0LlxyXG5cdH1cclxuXHJcblx0aWYgKCBkb2N1bWVudC5yZWFkeVN0YXRlID09PSAnbG9hZGluZycgKSB7XHJcblx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCAnRE9NQ29udGVudExvYWRlZCcsIHNjaGVkdWxlX2luaXQgKTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0c2NoZWR1bGVfaW5pdCgpO1xyXG5cdH1cclxufSkoKTsiLCJcInVzZSBzdHJpY3RcIjtcclxuLyoqXHJcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4gKlx0aW5jbHVkZXMvX19qcy93cGJjL3dwYmMuanNcclxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIERlZXAgQ2xvbmUgb2Ygb2JqZWN0IG9yIGFycmF5XHJcbiAqXHJcbiAqIEBwYXJhbSBvYmpcclxuICogQHJldHVybnMge2FueX1cclxuICovXHJcbmZ1bmN0aW9uIHdwYmNfY2xvbmVfb2JqKCBvYmogKXtcclxuXHJcblx0cmV0dXJuIEpTT04ucGFyc2UoIEpTT04uc3RyaW5naWZ5KCBvYmogKSApO1xyXG59XHJcblxyXG5cclxuXHJcbi8qKlxyXG4gKiBNYWluIF93cGJjIEpTIG9iamVjdFxyXG4gKi9cclxuXHJcbnZhciBfd3BiYyA9IChmdW5jdGlvbiAoIG9iaiwgJCkge1xyXG5cclxuXHQvLyBTZWN1cmUgcGFyYW1ldGVycyBmb3IgQWpheFx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0dmFyIHBfc2VjdXJlID0gb2JqLnNlY3VyaXR5X29iaiA9IG9iai5zZWN1cml0eV9vYmogfHwge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1c2VyX2lkOiAwLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRub25jZSAgOiAnJyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bG9jYWxlIDogJydcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgfTtcclxuXHRvYmouc2V0X3NlY3VyZV9wYXJhbSA9IGZ1bmN0aW9uICggcGFyYW1fa2V5LCBwYXJhbV92YWwgKSB7XHJcblx0XHRwX3NlY3VyZVsgcGFyYW1fa2V5IF0gPSBwYXJhbV92YWw7XHJcblx0fTtcclxuXHJcblx0b2JqLmdldF9zZWN1cmVfcGFyYW0gPSBmdW5jdGlvbiAoIHBhcmFtX2tleSApIHtcclxuXHRcdHJldHVybiBwX3NlY3VyZVsgcGFyYW1fa2V5IF07XHJcblx0fTtcclxuXHJcblxyXG5cdC8vIENhbGVuZGFycyBcdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHR2YXIgcF9jYWxlbmRhcnMgPSBvYmouY2FsZW5kYXJzX29iaiA9IG9iai5jYWxlbmRhcnNfb2JqIHx8IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gc29ydCAgICAgICAgICAgIDogXCJib29raW5nX2lkXCIsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIHNvcnRfdHlwZSAgICAgICA6IFwiREVTQ1wiLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBwYWdlX251bSAgICAgICAgOiAxLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBwYWdlX2l0ZW1zX2NvdW50OiAxMCxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gY3JlYXRlX2RhdGUgICAgIDogXCJcIixcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8ga2V5d29yZCAgICAgICAgIDogXCJcIixcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gc291cmNlICAgICAgICAgIDogXCJcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH07XHJcblxyXG5cdC8qKlxyXG5cdCAqICBDaGVjayBpZiBjYWxlbmRhciBmb3Igc3BlY2lmaWMgYm9va2luZyByZXNvdXJjZSBkZWZpbmVkICAgOjogICB0cnVlIHwgZmFsc2VcclxuXHQgKlxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfGludH0gcmVzb3VyY2VfaWRcclxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuXHQgKi9cclxuXHRvYmouY2FsZW5kYXJfX2lzX2RlZmluZWQgPSBmdW5jdGlvbiAoIHJlc291cmNlX2lkICkge1xyXG5cclxuXHRcdHJldHVybiAoJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiggcF9jYWxlbmRhcnNbICdjYWxlbmRhcl8nICsgcmVzb3VyY2VfaWQgXSApICk7XHJcblx0fTtcclxuXHJcblx0LyoqXHJcblx0ICogIENyZWF0ZSBDYWxlbmRhciBpbml0aWFsaXppbmdcclxuXHQgKlxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfGludH0gcmVzb3VyY2VfaWRcclxuXHQgKi9cclxuXHRvYmouY2FsZW5kYXJfX2luaXQgPSBmdW5jdGlvbiAoIHJlc291cmNlX2lkICkge1xyXG5cclxuXHRcdHBfY2FsZW5kYXJzWyAnY2FsZW5kYXJfJyArIHJlc291cmNlX2lkIF0gPSB7fTtcclxuXHRcdHBfY2FsZW5kYXJzWyAnY2FsZW5kYXJfJyArIHJlc291cmNlX2lkIF1bICdpZCcgXSA9IHJlc291cmNlX2lkO1xyXG5cdFx0cF9jYWxlbmRhcnNbICdjYWxlbmRhcl8nICsgcmVzb3VyY2VfaWQgXVsgJ3BlbmRpbmdfZGF5c19zZWxlY3RhYmxlJyBdID0gZmFsc2U7XHJcblxyXG5cdH07XHJcblxyXG5cdC8qKlxyXG5cdCAqIENoZWNrICBpZiB0aGUgdHlwZSBvZiB0aGlzIHByb3BlcnR5ICBpcyBJTlRcclxuXHQgKiBAcGFyYW0gcHJvcGVydHlfbmFtZVxyXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxyXG5cdCAqL1xyXG5cdG9iai5jYWxlbmRhcl9faXNfcHJvcF9pbnQgPSBmdW5jdGlvbiAoIHByb3BlcnR5X25hbWUgKSB7XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBGaXhJbjogOS45LjAuMjkuXHJcblxyXG5cdFx0dmFyIHBfY2FsZW5kYXJfaW50X3Byb3BlcnRpZXMgPSBbJ2R5bmFtaWNfX2RheXNfbWluJywgJ2R5bmFtaWNfX2RheXNfbWF4JywgJ2ZpeGVkX19kYXlzX251bSddO1xyXG5cclxuXHRcdHZhciBpc19pbmNsdWRlID0gcF9jYWxlbmRhcl9pbnRfcHJvcGVydGllcy5pbmNsdWRlcyggcHJvcGVydHlfbmFtZSApO1xyXG5cclxuXHRcdHJldHVybiBpc19pbmNsdWRlO1xyXG5cdH07XHJcblxyXG5cclxuXHQvKipcclxuXHQgKiBTZXQgcGFyYW1zIGZvciBhbGwgIGNhbGVuZGFyc1xyXG5cdCAqXHJcblx0ICogQHBhcmFtIHtvYmplY3R9IGNhbGVuZGFyc19vYmpcdFx0T2JqZWN0IHsgY2FsZW5kYXJfMToge30gfVxyXG5cdCAqIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCBjYWxlbmRhcl8zOiB7fSwgLi4uIH1cclxuXHQgKi9cclxuXHRvYmouY2FsZW5kYXJzX2FsbF9fc2V0ID0gZnVuY3Rpb24gKCBjYWxlbmRhcnNfb2JqICkge1xyXG5cdFx0cF9jYWxlbmRhcnMgPSBjYWxlbmRhcnNfb2JqO1xyXG5cdH07XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldCBib29raW5ncyBpbiBhbGwgY2FsZW5kYXJzXHJcblx0ICpcclxuXHQgKiBAcmV0dXJucyB7b2JqZWN0fHt9fVxyXG5cdCAqL1xyXG5cdG9iai5jYWxlbmRhcnNfYWxsX19nZXQgPSBmdW5jdGlvbiAoKSB7XHJcblx0XHRyZXR1cm4gcF9jYWxlbmRhcnM7XHJcblx0fTtcclxuXHJcblx0LyoqXHJcblx0ICogR2V0IGNhbGVuZGFyIG9iamVjdCAgIDo6ICAgeyBpZDogMSwg4oCmIH1cclxuXHQgKlxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfGludH0gcmVzb3VyY2VfaWRcdFx0XHRcdCAgJzInXHJcblx0ICogQHJldHVybnMge29iamVjdHxib29sZWFufVx0XHRcdFx0XHR7IGlkOiAyICzigKYgfVxyXG5cdCAqL1xyXG5cdG9iai5jYWxlbmRhcl9fZ2V0X3BhcmFtZXRlcnMgPSBmdW5jdGlvbiAoIHJlc291cmNlX2lkICkge1xyXG5cclxuXHRcdGlmICggb2JqLmNhbGVuZGFyX19pc19kZWZpbmVkKCByZXNvdXJjZV9pZCApICl7XHJcblxyXG5cdFx0XHRyZXR1cm4gcF9jYWxlbmRhcnNbICdjYWxlbmRhcl8nICsgcmVzb3VyY2VfaWQgXTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHR9O1xyXG5cclxuXHQvKipcclxuXHQgKiBTZXQgY2FsZW5kYXIgb2JqZWN0ICAgOjogICB7IGRhdGVzOiAgT2JqZWN0IHsgXCIyMDIzLTA3LTIxXCI6IHvigKZ9LCBcIjIwMjMtMDctMjJcIjoge+KApn0sIFwiMjAyMy0wNy0yM1wiOiB74oCmfSwg4oCmIH1cclxuXHQgKlxyXG5cdCAqIGlmIGNhbGVuZGFyIG9iamVjdCAgbm90IGRlZmluZWQsIHRoZW4gIGl0J3Mgd2lsbCBiZSBkZWZpbmVkIGFuZCBJRCBzZXRcclxuXHQgKiBpZiBjYWxlbmRhciBleGlzdCwgdGhlbiAgc3lzdGVtIHNldCAgYXMgbmV3IG9yIG92ZXJ3cml0ZSBvbmx5IHByb3BlcnRpZXMgZnJvbSBjYWxlbmRhcl9wcm9wZXJ0eV9vYmogcGFyYW1ldGVyLCAgYnV0IG90aGVyIHByb3BlcnRpZXMgd2lsbCBiZSBleGlzdGVkIGFuZCBub3Qgb3ZlcndyaXRlLCBsaWtlICdpZCdcclxuXHQgKlxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfGludH0gcmVzb3VyY2VfaWRcdFx0XHRcdCAgJzInXHJcblx0ICogQHBhcmFtIHtvYmplY3R9IGNhbGVuZGFyX3Byb3BlcnR5X29ialx0XHRcdFx0XHQgIHsgIGRhdGVzOiAgT2JqZWN0IHsgXCIyMDIzLTA3LTIxXCI6IHvigKZ9LCBcIjIwMjMtMDctMjJcIjoge+KApn0sIFwiMjAyMy0wNy0yM1wiOiB74oCmfSwg4oCmIH0gIH1cclxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGlzX2NvbXBsZXRlX292ZXJ3cml0ZVx0XHQgIGlmICd0cnVlJyAoZGVmYXVsdDogJ2ZhbHNlJyksICB0aGVuICBvbmx5IG92ZXJ3cml0ZSBvciBhZGQgIG5ldyBwcm9wZXJ0aWVzIGluICBjYWxlbmRhcl9wcm9wZXJ0eV9vYmpcclxuXHQgKiBAcmV0dXJucyB7Kn1cclxuXHQgKlxyXG5cdCAqIEV4YW1wbGVzOlxyXG5cdCAqXHJcblx0ICogQ29tbW9uIHVzYWdlIGluIFBIUDpcclxuXHQgKiAgIFx0XHRcdGVjaG8gXCIgIF93cGJjLmNhbGVuZGFyX19zZXQoICBcIiAuaW50dmFsKCAkcmVzb3VyY2VfaWQgKSAuIFwiLCB7ICdkYXRlcyc6IFwiIC4gd3BfanNvbl9lbmNvZGUoICRhdmFpbGFiaWxpdHlfcGVyX2RheXNfYXJyICkgLiBcIiB9ICk7XCI7XHJcblx0ICovXHJcblx0b2JqLmNhbGVuZGFyX19zZXRfcGFyYW1ldGVycyA9IGZ1bmN0aW9uICggcmVzb3VyY2VfaWQsIGNhbGVuZGFyX3Byb3BlcnR5X29iaiwgaXNfY29tcGxldGVfb3ZlcndyaXRlID0gZmFsc2UgICkge1xyXG5cclxuXHRcdGlmICggKCFvYmouY2FsZW5kYXJfX2lzX2RlZmluZWQoIHJlc291cmNlX2lkICkpIHx8ICh0cnVlID09PSBpc19jb21wbGV0ZV9vdmVyd3JpdGUpICl7XHJcblx0XHRcdG9iai5jYWxlbmRhcl9faW5pdCggcmVzb3VyY2VfaWQgKTtcclxuXHRcdH1cclxuXHJcblx0XHRmb3IgKCB2YXIgcHJvcF9uYW1lIGluIGNhbGVuZGFyX3Byb3BlcnR5X29iaiApe1xyXG5cclxuXHRcdFx0cF9jYWxlbmRhcnNbICdjYWxlbmRhcl8nICsgcmVzb3VyY2VfaWQgXVsgcHJvcF9uYW1lIF0gPSBjYWxlbmRhcl9wcm9wZXJ0eV9vYmpbIHByb3BfbmFtZSBdO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBwX2NhbGVuZGFyc1sgJ2NhbGVuZGFyXycgKyByZXNvdXJjZV9pZCBdO1xyXG5cdH07XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNldCBwcm9wZXJ0eSAgdG8gIGNhbGVuZGFyXHJcblx0ICogQHBhcmFtIHJlc291cmNlX2lkXHRcIjFcIlxyXG5cdCAqIEBwYXJhbSBwcm9wX25hbWVcdFx0bmFtZSBvZiBwcm9wZXJ0eVxyXG5cdCAqIEBwYXJhbSBwcm9wX3ZhbHVlXHR2YWx1ZSBvZiBwcm9wZXJ0eVxyXG5cdCAqIEByZXR1cm5zIHsqfVx0XHRcdGNhbGVuZGFyIG9iamVjdFxyXG5cdCAqL1xyXG5cdG9iai5jYWxlbmRhcl9fc2V0X3BhcmFtX3ZhbHVlID0gZnVuY3Rpb24gKCByZXNvdXJjZV9pZCwgcHJvcF9uYW1lLCBwcm9wX3ZhbHVlICkge1xyXG5cclxuXHRcdGlmICggKCFvYmouY2FsZW5kYXJfX2lzX2RlZmluZWQoIHJlc291cmNlX2lkICkpICl7XHJcblx0XHRcdG9iai5jYWxlbmRhcl9faW5pdCggcmVzb3VyY2VfaWQgKTtcclxuXHRcdH1cclxuXHJcblx0XHRwX2NhbGVuZGFyc1sgJ2NhbGVuZGFyXycgKyByZXNvdXJjZV9pZCBdWyBwcm9wX25hbWUgXSA9IHByb3BfdmFsdWU7XHJcblxyXG5cdFx0cmV0dXJuIHBfY2FsZW5kYXJzWyAnY2FsZW5kYXJfJyArIHJlc291cmNlX2lkIF07XHJcblx0fTtcclxuXHJcblx0LyoqXHJcblx0ICogIEdldCBjYWxlbmRhciBwcm9wZXJ0eSB2YWx1ZSAgIFx0OjogICBtaXhlZCB8IG51bGxcclxuXHQgKlxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfGludH0gIHJlc291cmNlX2lkXHRcdCcxJ1xyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wX25hbWVcdFx0XHQnc2VsZWN0aW9uX21vZGUnXHJcblx0ICogQHJldHVybnMgeyp8bnVsbH1cdFx0XHRcdFx0bWl4ZWQgfCBudWxsXHJcblx0ICovXHJcblx0b2JqLmNhbGVuZGFyX19nZXRfcGFyYW1fdmFsdWUgPSBmdW5jdGlvbiggcmVzb3VyY2VfaWQsIHByb3BfbmFtZSApe1xyXG5cclxuXHRcdGlmIChcclxuXHRcdFx0ICAgKCBvYmouY2FsZW5kYXJfX2lzX2RlZmluZWQoIHJlc291cmNlX2lkICkgKVxyXG5cdFx0XHQmJiAoICd1bmRlZmluZWQnICE9PSB0eXBlb2YgKCBwX2NhbGVuZGFyc1sgJ2NhbGVuZGFyXycgKyByZXNvdXJjZV9pZCBdWyBwcm9wX25hbWUgXSApIClcclxuXHRcdCl7XHJcblx0XHRcdC8vIEZpeEluOiA5LjkuMC4yOS5cclxuXHRcdFx0aWYgKCBvYmouY2FsZW5kYXJfX2lzX3Byb3BfaW50KCBwcm9wX25hbWUgKSApe1xyXG5cdFx0XHRcdHBfY2FsZW5kYXJzWyAnY2FsZW5kYXJfJyArIHJlc291cmNlX2lkIF1bIHByb3BfbmFtZSBdID0gcGFyc2VJbnQoIHBfY2FsZW5kYXJzWyAnY2FsZW5kYXJfJyArIHJlc291cmNlX2lkIF1bIHByb3BfbmFtZSBdICk7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuICBwX2NhbGVuZGFyc1sgJ2NhbGVuZGFyXycgKyByZXNvdXJjZV9pZCBdWyBwcm9wX25hbWUgXTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gbnVsbDtcdFx0Ly8gSWYgc29tZSBwcm9wZXJ0eSBub3QgZGVmaW5lZCwgdGhlbiBudWxsO1xyXG5cdH07XHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblxyXG5cdC8vIEJvb2tpbmdzIFx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdHZhciBwX2Jvb2tpbmdzID0gb2JqLmJvb2tpbmdzX29iaiA9IG9iai5ib29raW5nc19vYmogfHwge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGNhbGVuZGFyXzE6IE9iamVjdCB7XHJcbiBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vXHRcdFx0XHRcdFx0ICAgaWQ6ICAgICAxXHJcbiBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vXHRcdFx0XHRcdFx0ICwgZGF0ZXM6ICBPYmplY3QgeyBcIjIwMjMtMDctMjFcIjoge+KApn0sIFwiMjAyMy0wNy0yMlwiOiB74oCmfSwgXCIyMDIzLTA3LTIzXCI6IHvigKZ9LCDigKZcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyB9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH07XHJcblxyXG5cdC8qKlxyXG5cdCAqICBDaGVjayBpZiBib29raW5ncyBmb3Igc3BlY2lmaWMgYm9va2luZyByZXNvdXJjZSBkZWZpbmVkICAgOjogICB0cnVlIHwgZmFsc2VcclxuXHQgKlxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfGludH0gcmVzb3VyY2VfaWRcclxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuXHQgKi9cclxuXHRvYmouYm9va2luZ3NfaW5fY2FsZW5kYXJfX2lzX2RlZmluZWQgPSBmdW5jdGlvbiAoIHJlc291cmNlX2lkICkge1xyXG5cclxuXHRcdHJldHVybiAoJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiggcF9ib29raW5nc1sgJ2NhbGVuZGFyXycgKyByZXNvdXJjZV9pZCBdICkgKTtcclxuXHR9O1xyXG5cclxuXHQvKipcclxuXHQgKiBHZXQgYm9va2luZ3MgY2FsZW5kYXIgb2JqZWN0ICAgOjogICB7IGlkOiAxICwgZGF0ZXM6ICBPYmplY3QgeyBcIjIwMjMtMDctMjFcIjoge+KApn0sIFwiMjAyMy0wNy0yMlwiOiB74oCmfSwgXCIyMDIzLTA3LTIzXCI6IHvigKZ9LCDigKYgfVxyXG5cdCAqXHJcblx0ICogQHBhcmFtIHtzdHJpbmd8aW50fSByZXNvdXJjZV9pZFx0XHRcdFx0ICAnMidcclxuXHQgKiBAcmV0dXJucyB7b2JqZWN0fGJvb2xlYW59XHRcdFx0XHRcdHsgaWQ6IDIgLCBkYXRlczogIE9iamVjdCB7IFwiMjAyMy0wNy0yMVwiOiB74oCmfSwgXCIyMDIzLTA3LTIyXCI6IHvigKZ9LCBcIjIwMjMtMDctMjNcIjoge+KApn0sIOKApiB9XHJcblx0ICovXHJcblx0b2JqLmJvb2tpbmdzX2luX2NhbGVuZGFyX19nZXQgPSBmdW5jdGlvbiggcmVzb3VyY2VfaWQgKXtcclxuXHJcblx0XHRpZiAoIG9iai5ib29raW5nc19pbl9jYWxlbmRhcl9faXNfZGVmaW5lZCggcmVzb3VyY2VfaWQgKSApe1xyXG5cclxuXHRcdFx0cmV0dXJuIHBfYm9va2luZ3NbICdjYWxlbmRhcl8nICsgcmVzb3VyY2VfaWQgXTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHR9O1xyXG5cclxuXHQvKipcclxuXHQgKiBTZXQgYm9va2luZ3MgY2FsZW5kYXIgb2JqZWN0ICAgOjogICB7IGRhdGVzOiAgT2JqZWN0IHsgXCIyMDIzLTA3LTIxXCI6IHvigKZ9LCBcIjIwMjMtMDctMjJcIjoge+KApn0sIFwiMjAyMy0wNy0yM1wiOiB74oCmfSwg4oCmIH1cclxuXHQgKlxyXG5cdCAqIGlmIGNhbGVuZGFyIG9iamVjdCAgbm90IGRlZmluZWQsIHRoZW4gIGl0J3Mgd2lsbCBiZSBkZWZpbmVkIGFuZCBJRCBzZXRcclxuXHQgKiBpZiBjYWxlbmRhciBleGlzdCwgdGhlbiAgc3lzdGVtIHNldCAgYXMgbmV3IG9yIG92ZXJ3cml0ZSBvbmx5IHByb3BlcnRpZXMgZnJvbSBjYWxlbmRhcl9vYmogcGFyYW1ldGVyLCAgYnV0IG90aGVyIHByb3BlcnRpZXMgd2lsbCBiZSBleGlzdGVkIGFuZCBub3Qgb3ZlcndyaXRlLCBsaWtlICdpZCdcclxuXHQgKlxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfGludH0gcmVzb3VyY2VfaWRcdFx0XHRcdCAgJzInXHJcblx0ICogQHBhcmFtIHtvYmplY3R9IGNhbGVuZGFyX29ialx0XHRcdFx0XHQgIHsgIGRhdGVzOiAgT2JqZWN0IHsgXCIyMDIzLTA3LTIxXCI6IHvigKZ9LCBcIjIwMjMtMDctMjJcIjoge+KApn0sIFwiMjAyMy0wNy0yM1wiOiB74oCmfSwg4oCmIH0gIH1cclxuXHQgKiBAcmV0dXJucyB7Kn1cclxuXHQgKlxyXG5cdCAqIEV4YW1wbGVzOlxyXG5cdCAqXHJcblx0ICogQ29tbW9uIHVzYWdlIGluIFBIUDpcclxuXHQgKiAgIFx0XHRcdGVjaG8gXCIgIF93cGJjLmJvb2tpbmdzX2luX2NhbGVuZGFyX19zZXQoICBcIiAuaW50dmFsKCAkcmVzb3VyY2VfaWQgKSAuIFwiLCB7ICdkYXRlcyc6IFwiIC4gd3BfanNvbl9lbmNvZGUoICRhdmFpbGFiaWxpdHlfcGVyX2RheXNfYXJyICkgLiBcIiB9ICk7XCI7XHJcblx0ICovXHJcblx0b2JqLmJvb2tpbmdzX2luX2NhbGVuZGFyX19zZXQgPSBmdW5jdGlvbiggcmVzb3VyY2VfaWQsIGNhbGVuZGFyX29iaiApe1xyXG5cclxuXHRcdGlmICggISBvYmouYm9va2luZ3NfaW5fY2FsZW5kYXJfX2lzX2RlZmluZWQoIHJlc291cmNlX2lkICkgKXtcclxuXHRcdFx0cF9ib29raW5nc1sgJ2NhbGVuZGFyXycgKyByZXNvdXJjZV9pZCBdID0ge307XHJcblx0XHRcdHBfYm9va2luZ3NbICdjYWxlbmRhcl8nICsgcmVzb3VyY2VfaWQgXVsgJ2lkJyBdID0gcmVzb3VyY2VfaWQ7XHJcblx0XHR9XHJcblxyXG5cdFx0Zm9yICggdmFyIHByb3BfbmFtZSBpbiBjYWxlbmRhcl9vYmogKXtcclxuXHJcblx0XHRcdHBfYm9va2luZ3NbICdjYWxlbmRhcl8nICsgcmVzb3VyY2VfaWQgXVsgcHJvcF9uYW1lIF0gPSBjYWxlbmRhcl9vYmpbIHByb3BfbmFtZSBdO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBwX2Jvb2tpbmdzWyAnY2FsZW5kYXJfJyArIHJlc291cmNlX2lkIF07XHJcblx0fTtcclxuXHJcblx0Ly8gRGF0ZXNcclxuXHJcblx0LyoqXHJcblx0ICogIEdldCBib29raW5ncyBkYXRhIGZvciBBTEwgRGF0ZXMgaW4gY2FsZW5kYXIgICA6OiAgIGZhbHNlIHwgeyBcIjIwMjMtMDctMjJcIjoge+KApn0sIFwiMjAyMy0wNy0yM1wiOiB74oCmfSwg4oCmIH1cclxuXHQgKlxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfGludH0gcmVzb3VyY2VfaWRcdFx0XHQnMSdcclxuXHQgKiBAcmV0dXJucyB7b2JqZWN0fGJvb2xlYW59XHRcdFx0XHRmYWxzZSB8IE9iamVjdCB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCIyMDIzLTA3LTI0XCI6IE9iamVjdCB7IFsnc3VtbWFyeSddWydzdGF0dXNfZm9yX2RheSddOiBcImF2YWlsYWJsZVwiLCBkYXlfYXZhaWxhYmlsaXR5OiAxLCBtYXhfY2FwYWNpdHk6IDEsIOKApiB9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCIyMDIzLTA3LTI2XCI6IE9iamVjdCB7IFsnc3VtbWFyeSddWydzdGF0dXNfZm9yX2RheSddOiBcImZ1bGxfZGF5X2Jvb2tpbmdcIiwgWydzdW1tYXJ5J11bJ3N0YXR1c19mb3JfYm9va2luZ3MnXTogXCJwZW5kaW5nXCIsIGRheV9hdmFpbGFiaWxpdHk6IDAsIOKApiB9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCIyMDIzLTA3LTI5XCI6IE9iamVjdCB7IFsnc3VtbWFyeSddWydzdGF0dXNfZm9yX2RheSddOiBcInJlc291cmNlX2F2YWlsYWJpbGl0eVwiLCBkYXlfYXZhaWxhYmlsaXR5OiAwLCBtYXhfY2FwYWNpdHk6IDEsIOKApiB9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCIyMDIzLTA3LTMwXCI6IHvigKZ9LCBcIjIwMjMtMDctMzFcIjoge+KApn0sIOKAplxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0ICovXHJcblx0b2JqLmJvb2tpbmdzX2luX2NhbGVuZGFyX19nZXRfZGF0ZXMgPSBmdW5jdGlvbiggcmVzb3VyY2VfaWQpe1xyXG5cclxuXHRcdGlmIChcclxuXHRcdFx0ICAgKCBvYmouYm9va2luZ3NfaW5fY2FsZW5kYXJfX2lzX2RlZmluZWQoIHJlc291cmNlX2lkICkgKVxyXG5cdFx0XHQmJiAoICd1bmRlZmluZWQnICE9PSB0eXBlb2YgKCBwX2Jvb2tpbmdzWyAnY2FsZW5kYXJfJyArIHJlc291cmNlX2lkIF1bICdkYXRlcycgXSApIClcclxuXHRcdCl7XHJcblx0XHRcdHJldHVybiAgcF9ib29raW5nc1sgJ2NhbGVuZGFyXycgKyByZXNvdXJjZV9pZCBdWyAnZGF0ZXMnIF07XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGZhbHNlO1x0XHQvLyBJZiBzb21lIHByb3BlcnR5IG5vdCBkZWZpbmVkLCB0aGVuIGZhbHNlO1xyXG5cdH07XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNldCBib29raW5ncyBkYXRlcyBpbiBjYWxlbmRhciBvYmplY3QgICA6OiAgICB7IFwiMjAyMy0wNy0yMVwiOiB74oCmfSwgXCIyMDIzLTA3LTIyXCI6IHvigKZ9LCBcIjIwMjMtMDctMjNcIjoge+KApn0sIOKApiB9XHJcblx0ICpcclxuXHQgKiBpZiBjYWxlbmRhciBvYmplY3QgIG5vdCBkZWZpbmVkLCB0aGVuICBpdCdzIHdpbGwgYmUgZGVmaW5lZCBhbmQgJ2lkJywgJ2RhdGVzJyBzZXRcclxuXHQgKiBpZiBjYWxlbmRhciBleGlzdCwgdGhlbiBzeXN0ZW0gYWRkIGEgIG5ldyBvciBvdmVyd3JpdGUgb25seSBkYXRlcyBmcm9tIGRhdGVzX29iaiBwYXJhbWV0ZXIsXHJcblx0ICogYnV0IG90aGVyIGRhdGVzIG5vdCBmcm9tIHBhcmFtZXRlciBkYXRlc19vYmogd2lsbCBiZSBleGlzdGVkIGFuZCBub3Qgb3ZlcndyaXRlLlxyXG5cdCAqXHJcblx0ICogQHBhcmFtIHtzdHJpbmd8aW50fSByZXNvdXJjZV9pZFx0XHRcdFx0ICAnMidcclxuXHQgKiBAcGFyYW0ge29iamVjdH0gZGF0ZXNfb2JqXHRcdFx0XHRcdCAgeyBcIjIwMjMtMDctMjFcIjoge+KApn0sIFwiMjAyMy0wNy0yMlwiOiB74oCmfSwgXCIyMDIzLTA3LTIzXCI6IHvigKZ9LCDigKYgfVxyXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNfY29tcGxldGVfb3ZlcndyaXRlXHRcdCAgaWYgZmFsc2UsICB0aGVuICBvbmx5IG92ZXJ3cml0ZSBvciBhZGQgIGRhdGVzIGZyb20gXHRkYXRlc19vYmpcclxuXHQgKiBAcmV0dXJucyB7Kn1cclxuXHQgKlxyXG5cdCAqIEV4YW1wbGVzOlxyXG5cdCAqICAgXHRcdFx0X3dwYmMuYm9va2luZ3NfaW5fY2FsZW5kYXJfX3NldF9kYXRlcyggcmVzb3VyY2VfaWQsIHsgXCIyMDIzLTA3LTIxXCI6IHvigKZ9LCBcIjIwMjMtMDctMjJcIjoge+KApn0sIOKApiB9ICApO1x0XHQ8LSAgIG92ZXJ3cml0ZSBBTEwgZGF0ZXNcclxuXHQgKiAgIFx0XHRcdF93cGJjLmJvb2tpbmdzX2luX2NhbGVuZGFyX19zZXRfZGF0ZXMoIHJlc291cmNlX2lkLCB7IFwiMjAyMy0wNy0yMlwiOiB74oCmfSB9LCAgZmFsc2UgICk7XHRcdFx0XHRcdDwtICAgYWRkIG9yIG92ZXJ3cml0ZSBvbmx5ICBcdFwiMjAyMy0wNy0yMlwiOiB7fVxyXG5cdCAqXHJcblx0ICogQ29tbW9uIHVzYWdlIGluIFBIUDpcclxuXHQgKiAgIFx0XHRcdGVjaG8gXCIgIF93cGJjLmJvb2tpbmdzX2luX2NhbGVuZGFyX19zZXRfZGF0ZXMoICBcIiAuIGludHZhbCggJHJlc291cmNlX2lkICkgLiBcIiwgIFwiIC4gd3BfanNvbl9lbmNvZGUoICRhdmFpbGFiaWxpdHlfcGVyX2RheXNfYXJyICkgLiBcIiAgKTsgIFwiO1xyXG5cdCAqL1xyXG5cdG9iai5ib29raW5nc19pbl9jYWxlbmRhcl9fc2V0X2RhdGVzID0gZnVuY3Rpb24oIHJlc291cmNlX2lkLCBkYXRlc19vYmogLCBpc19jb21wbGV0ZV9vdmVyd3JpdGUgPSB0cnVlICl7XHJcblxyXG5cdFx0aWYgKCAhb2JqLmJvb2tpbmdzX2luX2NhbGVuZGFyX19pc19kZWZpbmVkKCByZXNvdXJjZV9pZCApICl7XHJcblx0XHRcdG9iai5ib29raW5nc19pbl9jYWxlbmRhcl9fc2V0KCByZXNvdXJjZV9pZCwgeyAnZGF0ZXMnOiB7fSB9ICk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCAndW5kZWZpbmVkJyA9PT0gdHlwZW9mIChwX2Jvb2tpbmdzWyAnY2FsZW5kYXJfJyArIHJlc291cmNlX2lkIF1bICdkYXRlcycgXSkgKXtcclxuXHRcdFx0cF9ib29raW5nc1sgJ2NhbGVuZGFyXycgKyByZXNvdXJjZV9pZCBdWyAnZGF0ZXMnIF0gPSB7fVxyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChpc19jb21wbGV0ZV9vdmVyd3JpdGUpe1xyXG5cclxuXHRcdFx0Ly8gQ29tcGxldGUgb3ZlcndyaXRlIGFsbCAgYm9va2luZyBkYXRlc1xyXG5cdFx0XHRwX2Jvb2tpbmdzWyAnY2FsZW5kYXJfJyArIHJlc291cmNlX2lkIF1bICdkYXRlcycgXSA9IGRhdGVzX29iajtcclxuXHRcdH0gZWxzZSB7XHJcblxyXG5cdFx0XHQvLyBBZGQgb25seSAgbmV3IG9yIG92ZXJ3cml0ZSBleGlzdCBib29raW5nIGRhdGVzIGZyb20gIHBhcmFtZXRlci4gQm9va2luZyBkYXRlcyBub3QgZnJvbSAgcGFyYW1ldGVyICB3aWxsICBiZSB3aXRob3V0IGNobmFuZ2VzXHJcblx0XHRcdGZvciAoIHZhciBwcm9wX25hbWUgaW4gZGF0ZXNfb2JqICl7XHJcblxyXG5cdFx0XHRcdHBfYm9va2luZ3NbICdjYWxlbmRhcl8nICsgcmVzb3VyY2VfaWQgXVsnZGF0ZXMnXVsgcHJvcF9uYW1lIF0gPSBkYXRlc19vYmpbIHByb3BfbmFtZSBdO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHBfYm9va2luZ3NbICdjYWxlbmRhcl8nICsgcmVzb3VyY2VfaWQgXTtcclxuXHR9O1xyXG5cclxuXHJcblx0LyoqXHJcblx0ICogIEdldCBib29raW5ncyBkYXRhIGZvciBzcGVjaWZpYyBkYXRlIGluIGNhbGVuZGFyICAgOjogICBmYWxzZSB8IHsgZGF5X2F2YWlsYWJpbGl0eTogMSwgLi4uIH1cclxuXHQgKlxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfGludH0gcmVzb3VyY2VfaWRcdFx0XHQnMSdcclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc3FsX2NsYXNzX2RheVx0XHRcdCcyMDIzLTA3LTIxJ1xyXG5cdCAqIEByZXR1cm5zIHtvYmplY3R8Ym9vbGVhbn1cdFx0XHRcdGZhbHNlIHwge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXlfYXZhaWxhYmlsaXR5OiA0XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1heF9jYXBhY2l0eTogNFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vICA+PSBCdXNpbmVzcyBMYXJnZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQyOiBPYmplY3QgeyBpc19kYXlfdW5hdmFpbGFibGU6IGZhbHNlLCBfZGF5X3N0YXR1czogXCJhdmFpbGFibGVcIiB9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDEwOiBPYmplY3QgeyBpc19kYXlfdW5hdmFpbGFibGU6IGZhbHNlLCBfZGF5X3N0YXR1czogXCJhdmFpbGFibGVcIiB9XHRcdC8vICA+PSBCdXNpbmVzcyBMYXJnZSAuLi5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0MTE6IE9iamVjdCB7IGlzX2RheV91bmF2YWlsYWJsZTogZmFsc2UsIF9kYXlfc3RhdHVzOiBcImF2YWlsYWJsZVwiIH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0MTI6IE9iamVjdCB7IGlzX2RheV91bmF2YWlsYWJsZTogZmFsc2UsIF9kYXlfc3RhdHVzOiBcImF2YWlsYWJsZVwiIH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHQgKi9cclxuXHRvYmouYm9va2luZ3NfaW5fY2FsZW5kYXJfX2dldF9mb3JfZGF0ZSA9IGZ1bmN0aW9uKCByZXNvdXJjZV9pZCwgc3FsX2NsYXNzX2RheSApe1xyXG5cclxuXHRcdGlmIChcclxuXHRcdFx0ICAgKCBvYmouYm9va2luZ3NfaW5fY2FsZW5kYXJfX2lzX2RlZmluZWQoIHJlc291cmNlX2lkICkgKVxyXG5cdFx0XHQmJiAoICd1bmRlZmluZWQnICE9PSB0eXBlb2YgKCBwX2Jvb2tpbmdzWyAnY2FsZW5kYXJfJyArIHJlc291cmNlX2lkIF1bICdkYXRlcycgXSApIClcclxuXHRcdFx0JiYgKCAndW5kZWZpbmVkJyAhPT0gdHlwZW9mICggcF9ib29raW5nc1sgJ2NhbGVuZGFyXycgKyByZXNvdXJjZV9pZCBdWyAnZGF0ZXMnIF1bIHNxbF9jbGFzc19kYXkgXSApIClcclxuXHRcdCl7XHJcblx0XHRcdHJldHVybiAgcF9ib29raW5nc1sgJ2NhbGVuZGFyXycgKyByZXNvdXJjZV9pZCBdWyAnZGF0ZXMnIF1bIHNxbF9jbGFzc19kYXkgXTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZmFsc2U7XHRcdC8vIElmIHNvbWUgcHJvcGVydHkgbm90IGRlZmluZWQsIHRoZW4gZmFsc2U7XHJcblx0fTtcclxuXHJcblxyXG5cdC8vIEFueSAgUEFSQU1TICAgaW4gYm9va2luZ3NcclxuXHJcblx0LyoqXHJcblx0ICogU2V0IHByb3BlcnR5ICB0byAgYm9va2luZ1xyXG5cdCAqIEBwYXJhbSByZXNvdXJjZV9pZFx0XCIxXCJcclxuXHQgKiBAcGFyYW0gcHJvcF9uYW1lXHRcdG5hbWUgb2YgcHJvcGVydHlcclxuXHQgKiBAcGFyYW0gcHJvcF92YWx1ZVx0dmFsdWUgb2YgcHJvcGVydHlcclxuXHQgKiBAcmV0dXJucyB7Kn1cdFx0XHRib29raW5nIG9iamVjdFxyXG5cdCAqL1xyXG5cdG9iai5ib29raW5nX19zZXRfcGFyYW1fdmFsdWUgPSBmdW5jdGlvbiAoIHJlc291cmNlX2lkLCBwcm9wX25hbWUsIHByb3BfdmFsdWUgKSB7XHJcblxyXG5cdFx0aWYgKCAhIG9iai5ib29raW5nc19pbl9jYWxlbmRhcl9faXNfZGVmaW5lZCggcmVzb3VyY2VfaWQgKSApe1xyXG5cdFx0XHRwX2Jvb2tpbmdzWyAnY2FsZW5kYXJfJyArIHJlc291cmNlX2lkIF0gPSB7fTtcclxuXHRcdFx0cF9ib29raW5nc1sgJ2NhbGVuZGFyXycgKyByZXNvdXJjZV9pZCBdWyAnaWQnIF0gPSByZXNvdXJjZV9pZDtcclxuXHRcdH1cclxuXHJcblx0XHRwX2Jvb2tpbmdzWyAnY2FsZW5kYXJfJyArIHJlc291cmNlX2lkIF1bIHByb3BfbmFtZSBdID0gcHJvcF92YWx1ZTtcclxuXHJcblx0XHRyZXR1cm4gcF9ib29raW5nc1sgJ2NhbGVuZGFyXycgKyByZXNvdXJjZV9pZCBdO1xyXG5cdH07XHJcblxyXG5cdC8qKlxyXG5cdCAqICBHZXQgYm9va2luZyBwcm9wZXJ0eSB2YWx1ZSAgIFx0OjogICBtaXhlZCB8IG51bGxcclxuXHQgKlxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfGludH0gIHJlc291cmNlX2lkXHRcdCcxJ1xyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wX25hbWVcdFx0XHQnc2VsZWN0aW9uX21vZGUnXHJcblx0ICogQHJldHVybnMgeyp8bnVsbH1cdFx0XHRcdFx0bWl4ZWQgfCBudWxsXHJcblx0ICovXHJcblx0b2JqLmJvb2tpbmdfX2dldF9wYXJhbV92YWx1ZSA9IGZ1bmN0aW9uKCByZXNvdXJjZV9pZCwgcHJvcF9uYW1lICl7XHJcblxyXG5cdFx0aWYgKFxyXG5cdFx0XHQgICAoIG9iai5ib29raW5nc19pbl9jYWxlbmRhcl9faXNfZGVmaW5lZCggcmVzb3VyY2VfaWQgKSApXHJcblx0XHRcdCYmICggJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiAoIHBfYm9va2luZ3NbICdjYWxlbmRhcl8nICsgcmVzb3VyY2VfaWQgXVsgcHJvcF9uYW1lIF0gKSApXHJcblx0XHQpe1xyXG5cdFx0XHRyZXR1cm4gIHBfYm9va2luZ3NbICdjYWxlbmRhcl8nICsgcmVzb3VyY2VfaWQgXVsgcHJvcF9uYW1lIF07XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIG51bGw7XHRcdC8vIElmIHNvbWUgcHJvcGVydHkgbm90IGRlZmluZWQsIHRoZW4gbnVsbDtcclxuXHR9O1xyXG5cclxuXHJcblxyXG5cclxuXHQvKipcclxuXHQgKiBTZXQgYm9va2luZ3MgZm9yIGFsbCAgY2FsZW5kYXJzXHJcblx0ICpcclxuXHQgKiBAcGFyYW0ge29iamVjdH0gY2FsZW5kYXJzX29ialx0XHRPYmplY3QgeyBjYWxlbmRhcl8xOiB7IGlkOiAxLCBkYXRlczogT2JqZWN0IHsgXCIyMDIzLTA3LTIyXCI6IHvigKZ9LCBcIjIwMjMtMDctMjNcIjoge+KApn0sIFwiMjAyMy0wNy0yNFwiOiB74oCmfSwg4oCmIH0gfVxyXG5cdCAqIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCBjYWxlbmRhcl8zOiB7fSwgLi4uIH1cclxuXHQgKi9cclxuXHRvYmouYm9va2luZ3NfaW5fY2FsZW5kYXJzX19zZXRfYWxsID0gZnVuY3Rpb24gKCBjYWxlbmRhcnNfb2JqICkge1xyXG5cdFx0cF9ib29raW5ncyA9IGNhbGVuZGFyc19vYmo7XHJcblx0fTtcclxuXHJcblx0LyoqXHJcblx0ICogR2V0IGJvb2tpbmdzIGluIGFsbCBjYWxlbmRhcnNcclxuXHQgKlxyXG5cdCAqIEByZXR1cm5zIHtvYmplY3R8e319XHJcblx0ICovXHJcblx0b2JqLmJvb2tpbmdzX2luX2NhbGVuZGFyc19fZ2V0X2FsbCA9IGZ1bmN0aW9uICgpIHtcclxuXHRcdHJldHVybiBwX2Jvb2tpbmdzO1xyXG5cdH07XHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblxyXG5cclxuXHJcblx0Ly8gU2Vhc29ucyBcdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHR2YXIgcF9zZWFzb25zID0gb2JqLnNlYXNvbnNfb2JqID0gb2JqLnNlYXNvbnNfb2JqIHx8IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBjYWxlbmRhcl8xOiBPYmplY3Qge1xyXG4gXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvL1x0XHRcdFx0XHRcdCAgIGlkOiAgICAgMVxyXG4gXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvL1x0XHRcdFx0XHRcdCAsIGRhdGVzOiAgT2JqZWN0IHsgXCIyMDIzLTA3LTIxXCI6IHvigKZ9LCBcIjIwMjMtMDctMjJcIjoge+KApn0sIFwiMjAyMy0wNy0yM1wiOiB74oCmfSwg4oCmXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gfVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9O1xyXG5cclxuXHQvKipcclxuXHQgKiBBZGQgc2Vhc29uIG5hbWVzIGZvciBkYXRlcyBpbiBjYWxlbmRhciBvYmplY3QgICA6OiAgICB7IFwiMjAyMy0wNy0yMVwiOiBbICd3cGJjX3NlYXNvbl9zZXB0ZW1iZXJfMjAyMycsICd3cGJjX3NlYXNvbl9zZXB0ZW1iZXJfMjAyNCcgXSwgXCIyMDIzLTA3LTIyXCI6IFsuLi5dLCAuLi4gfVxyXG5cdCAqXHJcblx0ICpcclxuXHQgKiBAcGFyYW0ge3N0cmluZ3xpbnR9IHJlc291cmNlX2lkXHRcdFx0XHQgICcyJ1xyXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBkYXRlc19vYmpcdFx0XHRcdFx0ICB7IFwiMjAyMy0wNy0yMVwiOiB74oCmfSwgXCIyMDIzLTA3LTIyXCI6IHvigKZ9LCBcIjIwMjMtMDctMjNcIjoge+KApn0sIOKApiB9XHJcblx0ICogQHBhcmFtIHtib29sZWFufSBpc19jb21wbGV0ZV9vdmVyd3JpdGVcdFx0ICBpZiBmYWxzZSwgIHRoZW4gIG9ubHkgIGFkZCAgZGF0ZXMgZnJvbSBcdGRhdGVzX29ialxyXG5cdCAqIEByZXR1cm5zIHsqfVxyXG5cdCAqXHJcblx0ICogRXhhbXBsZXM6XHJcblx0ICogICBcdFx0XHRfd3BiYy5zZWFzb25zX19zZXQoIHJlc291cmNlX2lkLCB7IFwiMjAyMy0wNy0yMVwiOiBbICd3cGJjX3NlYXNvbl9zZXB0ZW1iZXJfMjAyMycsICd3cGJjX3NlYXNvbl9zZXB0ZW1iZXJfMjAyNCcgXSwgXCIyMDIzLTA3LTIyXCI6IFsuLi5dLCAuLi4gfSAgKTtcclxuXHQgKi9cclxuXHRvYmouc2Vhc29uc19fc2V0ID0gZnVuY3Rpb24oIHJlc291cmNlX2lkLCBkYXRlc19vYmogLCBpc19jb21wbGV0ZV9vdmVyd3JpdGUgPSBmYWxzZSApe1xyXG5cclxuXHRcdGlmICggJ3VuZGVmaW5lZCcgPT09IHR5cGVvZiAocF9zZWFzb25zWyAnY2FsZW5kYXJfJyArIHJlc291cmNlX2lkIF0pICl7XHJcblx0XHRcdHBfc2Vhc29uc1sgJ2NhbGVuZGFyXycgKyByZXNvdXJjZV9pZCBdID0ge307XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCBpc19jb21wbGV0ZV9vdmVyd3JpdGUgKXtcclxuXHJcblx0XHRcdC8vIENvbXBsZXRlIG92ZXJ3cml0ZSBhbGwgIHNlYXNvbiBkYXRlc1xyXG5cdFx0XHRwX3NlYXNvbnNbICdjYWxlbmRhcl8nICsgcmVzb3VyY2VfaWQgXSA9IGRhdGVzX29iajtcclxuXHJcblx0XHR9IGVsc2Uge1xyXG5cclxuXHRcdFx0Ly8gQWRkIG9ubHkgIG5ldyBvciBvdmVyd3JpdGUgZXhpc3QgYm9va2luZyBkYXRlcyBmcm9tICBwYXJhbWV0ZXIuIEJvb2tpbmcgZGF0ZXMgbm90IGZyb20gIHBhcmFtZXRlciAgd2lsbCAgYmUgd2l0aG91dCBjaG5hbmdlc1xyXG5cdFx0XHRmb3IgKCB2YXIgcHJvcF9uYW1lIGluIGRhdGVzX29iaiApe1xyXG5cclxuXHRcdFx0XHRpZiAoICd1bmRlZmluZWQnID09PSB0eXBlb2YgKHBfc2Vhc29uc1sgJ2NhbGVuZGFyXycgKyByZXNvdXJjZV9pZCBdWyBwcm9wX25hbWUgXSkgKXtcclxuXHRcdFx0XHRcdHBfc2Vhc29uc1sgJ2NhbGVuZGFyXycgKyByZXNvdXJjZV9pZCBdWyBwcm9wX25hbWUgXSA9IFtdO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRmb3IgKCB2YXIgc2Vhc29uX25hbWVfa2V5IGluIGRhdGVzX29ialsgcHJvcF9uYW1lIF0gKXtcclxuXHRcdFx0XHRcdHBfc2Vhc29uc1sgJ2NhbGVuZGFyXycgKyByZXNvdXJjZV9pZCBdWyBwcm9wX25hbWUgXS5wdXNoKCBkYXRlc19vYmpbIHByb3BfbmFtZSBdWyBzZWFzb25fbmFtZV9rZXkgXSApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBwX3NlYXNvbnNbICdjYWxlbmRhcl8nICsgcmVzb3VyY2VfaWQgXTtcclxuXHR9O1xyXG5cclxuXHJcblx0LyoqXHJcblx0ICogIEdldCBib29raW5ncyBkYXRhIGZvciBzcGVjaWZpYyBkYXRlIGluIGNhbGVuZGFyICAgOjogICBbXSB8IFsgJ3dwYmNfc2Vhc29uX3NlcHRlbWJlcl8yMDIzJywgJ3dwYmNfc2Vhc29uX3NlcHRlbWJlcl8yMDI0JyBdXHJcblx0ICpcclxuXHQgKiBAcGFyYW0ge3N0cmluZ3xpbnR9IHJlc291cmNlX2lkXHRcdFx0JzEnXHJcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNxbF9jbGFzc19kYXlcdFx0XHQnMjAyMy0wNy0yMSdcclxuXHQgKiBAcmV0dXJucyB7b2JqZWN0fGJvb2xlYW59XHRcdFx0XHRbXSAgfCAgWyAnd3BiY19zZWFzb25fc2VwdGVtYmVyXzIwMjMnLCAnd3BiY19zZWFzb25fc2VwdGVtYmVyXzIwMjQnIF1cclxuXHQgKi9cclxuXHRvYmouc2Vhc29uc19fZ2V0X2Zvcl9kYXRlID0gZnVuY3Rpb24oIHJlc291cmNlX2lkLCBzcWxfY2xhc3NfZGF5ICl7XHJcblxyXG5cdFx0aWYgKFxyXG5cdFx0XHQgICAoICd1bmRlZmluZWQnICE9PSB0eXBlb2YgKCBwX3NlYXNvbnNbICdjYWxlbmRhcl8nICsgcmVzb3VyY2VfaWQgXSApIClcclxuXHRcdFx0JiYgKCAndW5kZWZpbmVkJyAhPT0gdHlwZW9mICggcF9zZWFzb25zWyAnY2FsZW5kYXJfJyArIHJlc291cmNlX2lkIF1bIHNxbF9jbGFzc19kYXkgXSApIClcclxuXHRcdCl7XHJcblx0XHRcdHJldHVybiAgcF9zZWFzb25zWyAnY2FsZW5kYXJfJyArIHJlc291cmNlX2lkIF1bIHNxbF9jbGFzc19kYXkgXTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gW107XHRcdC8vIElmIG5vdCBkZWZpbmVkLCB0aGVuIFtdO1xyXG5cdH07XHJcblxyXG5cclxuXHQvLyBPdGhlciBwYXJhbWV0ZXJzIFx0XHRcdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdHZhciBwX290aGVyID0gb2JqLm90aGVyX29iaiA9IG9iai5vdGhlcl9vYmogfHwgeyB9O1xyXG5cclxuXHRvYmouc2V0X290aGVyX3BhcmFtID0gZnVuY3Rpb24gKCBwYXJhbV9rZXksIHBhcmFtX3ZhbCApIHtcclxuXHRcdHBfb3RoZXJbIHBhcmFtX2tleSBdID0gcGFyYW1fdmFsO1xyXG5cdH07XHJcblxyXG5cdG9iai5nZXRfb3RoZXJfcGFyYW0gPSBmdW5jdGlvbiAoIHBhcmFtX2tleSApIHtcclxuXHRcdHJldHVybiBwX290aGVyWyBwYXJhbV9rZXkgXTtcclxuXHR9O1xyXG5cclxuXHQvKipcclxuXHQgKiBHZXQgYWxsIG90aGVyIHBhcmFtc1xyXG5cdCAqXHJcblx0ICogQHJldHVybnMge29iamVjdHx7fX1cclxuXHQgKi9cclxuXHRvYmouZ2V0X290aGVyX3BhcmFtX19hbGwgPSBmdW5jdGlvbiAoKSB7XHJcblx0XHRyZXR1cm4gcF9vdGhlcjtcclxuXHR9O1xyXG5cclxuXHQvLyBNZXNzYWdlcyBcdFx0XHQgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdHZhciBwX21lc3NhZ2VzID0gb2JqLm1lc3NhZ2VzX29iaiA9IG9iai5tZXNzYWdlc19vYmogfHwgeyB9O1xyXG5cclxuXHRvYmouc2V0X21lc3NhZ2UgPSBmdW5jdGlvbiAoIHBhcmFtX2tleSwgcGFyYW1fdmFsICkge1xyXG5cdFx0cF9tZXNzYWdlc1sgcGFyYW1fa2V5IF0gPSBwYXJhbV92YWw7XHJcblx0fTtcclxuXHJcblx0b2JqLmdldF9tZXNzYWdlID0gZnVuY3Rpb24gKCBwYXJhbV9rZXkgKSB7XHJcblx0XHRyZXR1cm4gcF9tZXNzYWdlc1sgcGFyYW1fa2V5IF07XHJcblx0fTtcclxuXHJcblx0LyoqXHJcblx0ICogR2V0IGFsbCBvdGhlciBwYXJhbXNcclxuXHQgKlxyXG5cdCAqIEByZXR1cm5zIHtvYmplY3R8e319XHJcblx0ICovXHJcblx0b2JqLmdldF9tZXNzYWdlc19fYWxsID0gZnVuY3Rpb24gKCkge1xyXG5cdFx0cmV0dXJuIHBfbWVzc2FnZXM7XHJcblx0fTtcclxuXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0cmV0dXJuIG9iajtcclxuXHJcbn0oIF93cGJjIHx8IHt9LCBqUXVlcnkgKSk7XHJcbiIsIndpbmRvdy5fX1dQQkNfREVWID0gdHJ1ZTtcclxuXHJcbi8qKlxyXG4gKiBFeHRlbmQgX3dwYmMgd2l0aCAgbmV3IG1ldGhvZHNcclxuICpcclxuICogQHR5cGUgeyp8e319XHJcbiAqIEBwcml2YXRlXHJcbiAqL1xyXG5fd3BiYyA9IChmdW5jdGlvbiAob2JqLCAkKSB7XHJcblxyXG5cdC8qKlxyXG5cdCAqIERldiBsb2dnZXIgKG5vLW9wIHVubGVzcyB3aW5kb3cuX19XUEJDX0RFViA9IHRydWUpXHJcblx0ICpcclxuXHQgKiBAdHlwZSB7Knx7d2FybjogKGZ1bmN0aW9uKCosICosICopOiB2b2lkKSwgZXJyb3I6IChmdW5jdGlvbigqLCAqLCAqKTogdm9pZCksIG9uY2U6IG9iai5kZXYub25jZSwgdHJ5OiAoKGZ1bmN0aW9uKCosICosICopOiAoKnx1bmRlZmluZWQpKXwqKX19XHJcblx0ICovXHJcblx0b2JqLmRldiA9IG9iai5kZXYgfHwgKCgpID0+IHtcclxuXHRcdGNvbnN0IHNlZW4gICAgPSBuZXcgU2V0KCk7XHJcblx0XHRjb25zdCBlbmFibGVkID0gKCkgPT4gISF3aW5kb3cuX19XUEJDX0RFVjtcclxuXHJcblx0XHRmdW5jdGlvbiBvdXQobGV2ZWwsIGNvZGUsIG1zZywgZXh0cmEpIHtcclxuXHRcdFx0aWYgKCAhZW5hYmxlZCgpICkgcmV0dXJuO1xyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdChjb25zb2xlW2xldmVsXSB8fCBjb25zb2xlLndhcm4pKCBgW1dQQkNdWyR7Y29kZX1dICR7bXNnfWAsIGV4dHJhID8/ICcnICk7XHJcblx0XHRcdH0gY2F0Y2gge1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0bG9nICA6IChjb2RlLCBtc2csIGV4dHJhKSA9PiBvdXQoJ2xvZycsICAgY29kZSwgbXNnLCBleHRyYSksXHJcblx0XHRcdGRlYnVnOiAoY29kZSwgbXNnLCBleHRyYSkgPT4gb3V0KCdkZWJ1ZycsIGNvZGUsIG1zZywgZXh0cmEpLFxyXG5cdFx0XHR3YXJuIDogKGNvZGUsIG1zZywgZXh0cmEpID0+IG91dCggJ3dhcm4nLCBjb2RlLCBtc2csIGV4dHJhICksXHJcblx0XHRcdGVycm9yOiAoY29kZSwgZXJyT3JNc2csIGV4dHJhKSA9PlxyXG5cdFx0XHRcdG91dCggJ2Vycm9yJywgY29kZSxcclxuXHRcdFx0XHRcdGVyck9yTXNnIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJPck1zZy5tZXNzYWdlIDogU3RyaW5nKCBlcnJPck1zZyApLFxyXG5cdFx0XHRcdFx0ZXJyT3JNc2cgaW5zdGFuY2VvZiBFcnJvciA/IGVyck9yTXNnIDogZXh0cmEgKSxcclxuXHRcdFx0b25jZSA6IChjb2RlLCBtc2csIGV4dHJhKSA9PiB7XHJcblx0XHRcdFx0aWYgKCAhZW5hYmxlZCgpICkgcmV0dXJuO1xyXG5cdFx0XHRcdGNvbnN0IGtleSA9IGAke2NvZGV9fCR7bXNnfWA7XHJcblx0XHRcdFx0aWYgKCBzZWVuLmhhcygga2V5ICkgKSByZXR1cm47XHJcblx0XHRcdFx0c2Vlbi5hZGQoIGtleSApO1xyXG5cdFx0XHRcdG91dCggJ2Vycm9yJywgY29kZSwgbXNnLCBleHRyYSApO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0cnkgIDogKGNvZGUsIGZuLCBleHRyYSkgPT4ge1xyXG5cdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gZm4oKTtcclxuXHRcdFx0XHR9IGNhdGNoICggZSApIHtcclxuXHRcdFx0XHRcdG91dCggJ2Vycm9yJywgY29kZSwgZSwgZXh0cmEgKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH07XHJcblx0fSkoKTtcclxuXHJcblx0Ly8gT3B0aW9uYWw6IGdsb2JhbCB0cmFwcyBpbiBkZXYuXHJcblx0aWYgKCB3aW5kb3cuX19XUEJDX0RFViApIHtcclxuXHRcdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCAnZXJyb3InLCAoZSkgPT4ge1xyXG5cdFx0XHR0cnkgeyBfd3BiYz8uZGV2Py5lcnJvciggJ0dMT0JBTC1FUlJPUicsIGU/LmVycm9yIHx8IGU/Lm1lc3NhZ2UsIGUgKTsgfSBjYXRjaCAoIF8gKSB7fVxyXG5cdFx0fSApO1xyXG5cdFx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoICd1bmhhbmRsZWRyZWplY3Rpb24nLCAoZSkgPT4ge1xyXG5cdFx0XHR0cnkgeyBfd3BiYz8uZGV2Py5lcnJvciggJ0dMT0JBTC1SRUpFQ1RJT04nLCBlPy5yZWFzb24gKTsgfSBjYXRjaCAoIF8gKSB7fVxyXG5cdFx0fSApO1xyXG5cdH1cclxuXHJcblx0cmV0dXJuIG9iajtcclxuXHR9KCBfd3BiYyB8fCB7fSwgalF1ZXJ5ICkpO1xyXG4iLCIvKipcclxuICogRXh0ZW5kIF93cGJjIHdpdGggIG5ldyBtZXRob2RzICAgICAgICAvLyBGaXhJbjogOS44LjYuMi5cclxuICpcclxuICogQHR5cGUgeyp8e319XHJcbiAqIEBwcml2YXRlXHJcbiAqL1xyXG4gX3dwYmMgPSAoZnVuY3Rpb24gKCBvYmosICQpIHtcclxuXHJcblx0Ly8gTG9hZCBCYWxhbmNlciBcdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cdHZhciBwX2JhbGFuY2VyID0gb2JqLmJhbGFuY2VyX29iaiA9IG9iai5iYWxhbmNlcl9vYmogfHwge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdtYXhfdGhyZWFkcyc6IDIsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J2luX3Byb2Nlc3MnIDogW10sXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3dhaXQnICAgICAgIDogW11cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fTtcclxuXHJcblx0IC8qKlxyXG5cdCAgKiBTZXQgIG1heCBwYXJhbGxlbCByZXF1ZXN0ICB0byAgbG9hZFxyXG5cdCAgKlxyXG5cdCAgKiBAcGFyYW0gbWF4X3RocmVhZHNcclxuXHQgICovXHJcblx0b2JqLmJhbGFuY2VyX19zZXRfbWF4X3RocmVhZHMgPSBmdW5jdGlvbiAoIG1heF90aHJlYWRzICl7XHJcblxyXG5cdFx0cF9iYWxhbmNlclsgJ21heF90aHJlYWRzJyBdID0gbWF4X3RocmVhZHM7XHJcblx0fTtcclxuXHJcblx0LyoqXHJcblx0ICogIENoZWNrIGlmIGJhbGFuY2VyIGZvciBzcGVjaWZpYyBib29raW5nIHJlc291cmNlIGRlZmluZWQgICA6OiAgIHRydWUgfCBmYWxzZVxyXG5cdCAqXHJcblx0ICogQHBhcmFtIHtzdHJpbmd8aW50fSByZXNvdXJjZV9pZFxyXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxyXG5cdCAqL1xyXG5cdG9iai5iYWxhbmNlcl9faXNfZGVmaW5lZCA9IGZ1bmN0aW9uICggcmVzb3VyY2VfaWQgKSB7XHJcblxyXG5cdFx0cmV0dXJuICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mKCBwX2JhbGFuY2VyWyAnYmFsYW5jZXJfJyArIHJlc291cmNlX2lkIF0gKSApO1xyXG5cdH07XHJcblxyXG5cclxuXHQvKipcclxuXHQgKiAgQ3JlYXRlIGJhbGFuY2VyIGluaXRpYWxpemluZ1xyXG5cdCAqXHJcblx0ICogQHBhcmFtIHtzdHJpbmd8aW50fSByZXNvdXJjZV9pZFxyXG5cdCAqL1xyXG5cdG9iai5iYWxhbmNlcl9faW5pdCA9IGZ1bmN0aW9uICggcmVzb3VyY2VfaWQsIGZ1bmN0aW9uX25hbWUgLCBwYXJhbXMgPXt9KSB7XHJcblxyXG5cdFx0dmFyIGJhbGFuY2Vfb2JqID0ge307XHJcblx0XHRiYWxhbmNlX29ialsgJ3Jlc291cmNlX2lkJyBdICAgPSByZXNvdXJjZV9pZDtcclxuXHRcdGJhbGFuY2Vfb2JqWyAncHJpb3JpdHknIF0gICAgICA9IDE7XHJcblx0XHRiYWxhbmNlX29ialsgJ2Z1bmN0aW9uX25hbWUnIF0gPSBmdW5jdGlvbl9uYW1lO1xyXG5cdFx0YmFsYW5jZV9vYmpbICdwYXJhbXMnIF0gICAgICAgID0gd3BiY19jbG9uZV9vYmooIHBhcmFtcyApO1xyXG5cclxuXHJcblx0XHRpZiAoIG9iai5iYWxhbmNlcl9faXNfYWxyZWFkeV9ydW4oIHJlc291cmNlX2lkLCBmdW5jdGlvbl9uYW1lICkgKXtcclxuXHRcdFx0cmV0dXJuICdydW4nO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCBvYmouYmFsYW5jZXJfX2lzX2FscmVhZHlfd2FpdCggcmVzb3VyY2VfaWQsIGZ1bmN0aW9uX25hbWUgKSApe1xyXG5cdFx0XHRyZXR1cm4gJ3dhaXQnO1xyXG5cdFx0fVxyXG5cclxuXHJcblx0XHRpZiAoIG9iai5iYWxhbmNlcl9fY2FuX2lfcnVuKCkgKXtcclxuXHRcdFx0b2JqLmJhbGFuY2VyX19hZGRfdG9fX3J1biggYmFsYW5jZV9vYmogKTtcclxuXHRcdFx0cmV0dXJuICdydW4nO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0b2JqLmJhbGFuY2VyX19hZGRfdG9fX3dhaXQoIGJhbGFuY2Vfb2JqICk7XHJcblx0XHRcdHJldHVybiAnd2FpdCc7XHJcblx0XHR9XHJcblx0fTtcclxuXHJcblx0IC8qKlxyXG5cdCAgKiBDYW4gSSBSdW4gP1xyXG5cdCAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuXHQgICovXHJcblx0b2JqLmJhbGFuY2VyX19jYW5faV9ydW4gPSBmdW5jdGlvbiAoKXtcclxuXHRcdHJldHVybiAoIHBfYmFsYW5jZXJbICdpbl9wcm9jZXNzJyBdLmxlbmd0aCA8IHBfYmFsYW5jZXJbICdtYXhfdGhyZWFkcycgXSApO1xyXG5cdH1cclxuXHJcblx0XHQgLyoqXHJcblx0XHQgICogQWRkIHRvIFdBSVRcclxuXHRcdCAgKiBAcGFyYW0gYmFsYW5jZV9vYmpcclxuXHRcdCAgKi9cclxuXHRcdG9iai5iYWxhbmNlcl9fYWRkX3RvX193YWl0ID0gZnVuY3Rpb24gKCBiYWxhbmNlX29iaiApIHtcclxuXHRcdFx0cF9iYWxhbmNlclsnd2FpdCddLnB1c2goIGJhbGFuY2Vfb2JqICk7XHJcblx0XHR9XHJcblxyXG5cdFx0IC8qKlxyXG5cdFx0ICAqIFJlbW92ZSBmcm9tIFdhaXRcclxuXHRcdCAgKlxyXG5cdFx0ICAqIEBwYXJhbSByZXNvdXJjZV9pZFxyXG5cdFx0ICAqIEBwYXJhbSBmdW5jdGlvbl9uYW1lXHJcblx0XHQgICogQHJldHVybnMgeyp8Ym9vbGVhbn1cclxuXHRcdCAgKi9cclxuXHRcdG9iai5iYWxhbmNlcl9fcmVtb3ZlX2Zyb21fX3dhaXRfbGlzdCA9IGZ1bmN0aW9uICggcmVzb3VyY2VfaWQsIGZ1bmN0aW9uX25hbWUgKXtcclxuXHJcblx0XHRcdHZhciByZW1vdmVkX2VsID0gZmFsc2U7XHJcblxyXG5cdFx0XHRpZiAoIHBfYmFsYW5jZXJbICd3YWl0JyBdLmxlbmd0aCApe1x0XHRcdFx0XHQvLyBGaXhJbjogOS44LjEwLjEuXHJcblx0XHRcdFx0Zm9yICggdmFyIGkgaW4gcF9iYWxhbmNlclsgJ3dhaXQnIF0gKXtcclxuXHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0KHJlc291cmNlX2lkID09PSBwX2JhbGFuY2VyWyAnd2FpdCcgXVsgaSBdWyAncmVzb3VyY2VfaWQnIF0pXHJcblx0XHRcdFx0XHRcdCYmIChmdW5jdGlvbl9uYW1lID09PSBwX2JhbGFuY2VyWyAnd2FpdCcgXVsgaSBdWyAnZnVuY3Rpb25fbmFtZScgXSlcclxuXHRcdFx0XHRcdCl7XHJcblx0XHRcdFx0XHRcdHJlbW92ZWRfZWwgPSBwX2JhbGFuY2VyWyAnd2FpdCcgXS5zcGxpY2UoIGksIDEgKTtcclxuXHRcdFx0XHRcdFx0cmVtb3ZlZF9lbCA9IHJlbW92ZWRfZWwucG9wKCk7XHJcblx0XHRcdFx0XHRcdHBfYmFsYW5jZXJbICd3YWl0JyBdID0gcF9iYWxhbmNlclsgJ3dhaXQnIF0uZmlsdGVyKCBmdW5jdGlvbiAoIHYgKXtcclxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdjtcclxuXHRcdFx0XHRcdFx0fSApO1x0XHRcdFx0XHQvLyBSZWluZGV4IGFycmF5XHJcblx0XHRcdFx0XHRcdHJldHVybiByZW1vdmVkX2VsO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gcmVtb3ZlZF9lbDtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCogSXMgYWxyZWFkeSBXQUlUXHJcblx0XHQqXHJcblx0XHQqIEBwYXJhbSByZXNvdXJjZV9pZFxyXG5cdFx0KiBAcGFyYW0gZnVuY3Rpb25fbmFtZVxyXG5cdFx0KiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuXHRcdCovXHJcblx0XHRvYmouYmFsYW5jZXJfX2lzX2FscmVhZHlfd2FpdCA9IGZ1bmN0aW9uICggcmVzb3VyY2VfaWQsIGZ1bmN0aW9uX25hbWUgKXtcclxuXHJcblx0XHRcdGlmICggcF9iYWxhbmNlclsgJ3dhaXQnIF0ubGVuZ3RoICl7XHRcdFx0XHQvLyBGaXhJbjogOS44LjEwLjEuXHJcblx0XHRcdFx0Zm9yICggdmFyIGkgaW4gcF9iYWxhbmNlclsgJ3dhaXQnIF0gKXtcclxuXHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0KHJlc291cmNlX2lkID09PSBwX2JhbGFuY2VyWyAnd2FpdCcgXVsgaSBdWyAncmVzb3VyY2VfaWQnIF0pXHJcblx0XHRcdFx0XHRcdCYmIChmdW5jdGlvbl9uYW1lID09PSBwX2JhbGFuY2VyWyAnd2FpdCcgXVsgaSBdWyAnZnVuY3Rpb25fbmFtZScgXSlcclxuXHRcdFx0XHRcdCl7XHJcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cclxuXHRcdCAvKipcclxuXHRcdCAgKiBBZGQgdG8gUlVOXHJcblx0XHQgICogQHBhcmFtIGJhbGFuY2Vfb2JqXHJcblx0XHQgICovXHJcblx0XHRvYmouYmFsYW5jZXJfX2FkZF90b19fcnVuID0gZnVuY3Rpb24gKCBiYWxhbmNlX29iaiApIHtcclxuXHRcdFx0cF9iYWxhbmNlclsnaW5fcHJvY2VzcyddLnB1c2goIGJhbGFuY2Vfb2JqICk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQqIFJlbW92ZSBmcm9tIFJVTiBsaXN0XHJcblx0XHQqXHJcblx0XHQqIEBwYXJhbSByZXNvdXJjZV9pZFxyXG5cdFx0KiBAcGFyYW0gZnVuY3Rpb25fbmFtZVxyXG5cdFx0KiBAcmV0dXJucyB7Knxib29sZWFufVxyXG5cdFx0Ki9cclxuXHRcdG9iai5iYWxhbmNlcl9fcmVtb3ZlX2Zyb21fX3J1bl9saXN0ID0gZnVuY3Rpb24gKCByZXNvdXJjZV9pZCwgZnVuY3Rpb25fbmFtZSApe1xyXG5cclxuXHRcdFx0IHZhciByZW1vdmVkX2VsID0gZmFsc2U7XHJcblxyXG5cdFx0XHQgaWYgKCBwX2JhbGFuY2VyWyAnaW5fcHJvY2VzcycgXS5sZW5ndGggKXtcdFx0XHRcdC8vIEZpeEluOiA5LjguMTAuMS5cclxuXHRcdFx0XHQgZm9yICggdmFyIGkgaW4gcF9iYWxhbmNlclsgJ2luX3Byb2Nlc3MnIF0gKXtcclxuXHRcdFx0XHRcdCBpZiAoXHJcblx0XHRcdFx0XHRcdCAocmVzb3VyY2VfaWQgPT09IHBfYmFsYW5jZXJbICdpbl9wcm9jZXNzJyBdWyBpIF1bICdyZXNvdXJjZV9pZCcgXSlcclxuXHRcdFx0XHRcdFx0ICYmIChmdW5jdGlvbl9uYW1lID09PSBwX2JhbGFuY2VyWyAnaW5fcHJvY2VzcycgXVsgaSBdWyAnZnVuY3Rpb25fbmFtZScgXSlcclxuXHRcdFx0XHRcdCApe1xyXG5cdFx0XHRcdFx0XHQgcmVtb3ZlZF9lbCA9IHBfYmFsYW5jZXJbICdpbl9wcm9jZXNzJyBdLnNwbGljZSggaSwgMSApO1xyXG5cdFx0XHRcdFx0XHQgcmVtb3ZlZF9lbCA9IHJlbW92ZWRfZWwucG9wKCk7XHJcblx0XHRcdFx0XHRcdCBwX2JhbGFuY2VyWyAnaW5fcHJvY2VzcycgXSA9IHBfYmFsYW5jZXJbICdpbl9wcm9jZXNzJyBdLmZpbHRlciggZnVuY3Rpb24gKCB2ICl7XHJcblx0XHRcdFx0XHRcdFx0IHJldHVybiB2O1xyXG5cdFx0XHRcdFx0XHQgfSApO1x0XHQvLyBSZWluZGV4IGFycmF5XHJcblx0XHRcdFx0XHRcdCByZXR1cm4gcmVtb3ZlZF9lbDtcclxuXHRcdFx0XHRcdCB9XHJcblx0XHRcdFx0IH1cclxuXHRcdFx0IH1cclxuXHRcdFx0IHJldHVybiByZW1vdmVkX2VsO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0KiBJcyBhbHJlYWR5IFJVTlxyXG5cdFx0KlxyXG5cdFx0KiBAcGFyYW0gcmVzb3VyY2VfaWRcclxuXHRcdCogQHBhcmFtIGZ1bmN0aW9uX25hbWVcclxuXHRcdCogQHJldHVybnMge2Jvb2xlYW59XHJcblx0XHQqL1xyXG5cdFx0b2JqLmJhbGFuY2VyX19pc19hbHJlYWR5X3J1biA9IGZ1bmN0aW9uICggcmVzb3VyY2VfaWQsIGZ1bmN0aW9uX25hbWUgKXtcclxuXHJcblx0XHRcdGlmICggcF9iYWxhbmNlclsgJ2luX3Byb2Nlc3MnIF0ubGVuZ3RoICl7XHRcdFx0XHRcdC8vIEZpeEluOiA5LjguMTAuMS5cclxuXHRcdFx0XHRmb3IgKCB2YXIgaSBpbiBwX2JhbGFuY2VyWyAnaW5fcHJvY2VzcycgXSApe1xyXG5cdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHQocmVzb3VyY2VfaWQgPT09IHBfYmFsYW5jZXJbICdpbl9wcm9jZXNzJyBdWyBpIF1bICdyZXNvdXJjZV9pZCcgXSlcclxuXHRcdFx0XHRcdFx0JiYgKGZ1bmN0aW9uX25hbWUgPT09IHBfYmFsYW5jZXJbICdpbl9wcm9jZXNzJyBdWyBpIF1bICdmdW5jdGlvbl9uYW1lJyBdKVxyXG5cdFx0XHRcdFx0KXtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblxyXG5cclxuXHRvYmouYmFsYW5jZXJfX3J1bl9uZXh0ID0gZnVuY3Rpb24gKCl7XHJcblxyXG5cdFx0Ly8gR2V0IDFzdCBmcm9tICBXYWl0IGxpc3RcclxuXHRcdHZhciByZW1vdmVkX2VsID0gZmFsc2U7XHJcblx0XHRpZiAoIHBfYmFsYW5jZXJbICd3YWl0JyBdLmxlbmd0aCApe1x0XHRcdFx0XHQvLyBGaXhJbjogOS44LjEwLjEuXHJcblx0XHRcdGZvciAoIHZhciBpIGluIHBfYmFsYW5jZXJbICd3YWl0JyBdICl7XHJcblx0XHRcdFx0cmVtb3ZlZF9lbCA9IG9iai5iYWxhbmNlcl9fcmVtb3ZlX2Zyb21fX3dhaXRfbGlzdCggcF9iYWxhbmNlclsgJ3dhaXQnIF1bIGkgXVsgJ3Jlc291cmNlX2lkJyBdLCBwX2JhbGFuY2VyWyAnd2FpdCcgXVsgaSBdWyAnZnVuY3Rpb25fbmFtZScgXSApO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCBmYWxzZSAhPT0gcmVtb3ZlZF9lbCApe1xyXG5cclxuXHRcdFx0Ly8gUnVuXHJcblx0XHRcdG9iai5iYWxhbmNlcl9fcnVuKCByZW1vdmVkX2VsICk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQgLyoqXHJcblx0ICAqIFJ1blxyXG5cdCAgKiBAcGFyYW0gYmFsYW5jZV9vYmpcclxuXHQgICovXHJcblx0b2JqLmJhbGFuY2VyX19ydW4gPSBmdW5jdGlvbiAoIGJhbGFuY2Vfb2JqICl7XHJcblxyXG5cdFx0c3dpdGNoICggYmFsYW5jZV9vYmpbICdmdW5jdGlvbl9uYW1lJyBdICl7XHJcblxyXG5cdFx0XHRjYXNlICd3cGJjX2NhbGVuZGFyX19sb2FkX2RhdGFfX2FqeCc6XHJcblxyXG5cdFx0XHRcdC8vIEFkZCB0byBydW4gbGlzdFxyXG5cdFx0XHRcdG9iai5iYWxhbmNlcl9fYWRkX3RvX19ydW4oIGJhbGFuY2Vfb2JqICk7XHJcblxyXG5cdFx0XHRcdHdwYmNfY2FsZW5kYXJfX2xvYWRfZGF0YV9fYWp4KCBiYWxhbmNlX29ialsgJ3BhcmFtcycgXSApXHJcblx0XHRcdFx0YnJlYWs7XHJcblxyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cmV0dXJuIG9iajtcclxuXHJcbn0oIF93cGJjIHx8IHt9LCBqUXVlcnkgKSk7XHJcblxyXG5cclxuIFx0LyoqXHJcbiBcdCAqIC0tIEhlbHAgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHQgKi9cclxuXHJcblx0ZnVuY3Rpb24gd3BiY19iYWxhbmNlcl9faXNfd2FpdCggcGFyYW1zLCBmdW5jdGlvbl9uYW1lICl7XHJcbi8vY29uc29sZS5sb2coJzo6d3BiY19iYWxhbmNlcl9faXNfd2FpdCcscGFyYW1zICwgZnVuY3Rpb25fbmFtZSApO1xyXG5cdFx0aWYgKCAndW5kZWZpbmVkJyAhPT0gdHlwZW9mIChwYXJhbXNbICdyZXNvdXJjZV9pZCcgXSkgKXtcclxuXHJcblx0XHRcdHZhciBiYWxhbmNlcl9zdGF0dXMgPSBfd3BiYy5iYWxhbmNlcl9faW5pdCggcGFyYW1zWyAncmVzb3VyY2VfaWQnIF0sIGZ1bmN0aW9uX25hbWUsIHBhcmFtcyApO1xyXG5cclxuXHRcdFx0cmV0dXJuICggJ3dhaXQnID09PSBiYWxhbmNlcl9zdGF0dXMgKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cclxuXHJcblx0ZnVuY3Rpb24gd3BiY19iYWxhbmNlcl9fY29tcGxldGVkKCByZXNvdXJjZV9pZCAsIGZ1bmN0aW9uX25hbWUgKXtcclxuLy9jb25zb2xlLmxvZygnOjp3cGJjX2JhbGFuY2VyX19jb21wbGV0ZWQnLHJlc291cmNlX2lkICwgZnVuY3Rpb25fbmFtZSApO1xyXG5cdFx0X3dwYmMuYmFsYW5jZXJfX3JlbW92ZV9mcm9tX19ydW5fbGlzdCggcmVzb3VyY2VfaWQsIGZ1bmN0aW9uX25hbWUgKTtcclxuXHRcdF93cGJjLmJhbGFuY2VyX19ydW5fbmV4dCgpO1xyXG5cdH0iLCIvKipcclxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbiAqXHRpbmNsdWRlcy9fX2pzL2NhbC93cGJjX2NhbC5qc1xyXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuICovXHJcblxyXG4vKipcclxuICogT3JkZXIgb3IgY2hpbGQgYm9va2luZyByZXNvdXJjZXMgc2F2ZWQgaGVyZTogIFx0X3dwYmMuYm9va2luZ19fZ2V0X3BhcmFtX3ZhbHVlKCByZXNvdXJjZV9pZCxcclxuICogJ3Jlc291cmNlc19pZF9hcnJfX2luX2RhdGVzJyApXHRcdFsyLDEwLDEyLDExXVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBIb3cgdG8gY2hlY2sgIGJvb2tlZCB0aW1lcyBvbiAgc3BlY2lmaWMgZGF0ZTogP1xyXG4gKlxyXG5cdFx0XHRfd3BiYy5ib29raW5nc19pbl9jYWxlbmRhcl9fZ2V0X2Zvcl9kYXRlKDIsJzIwMjMtMDgtMjEnKTtcclxuXHJcblx0XHRcdGNvbnNvbGUubG9nKFxyXG5cdFx0XHRcdFx0XHRfd3BiYy5ib29raW5nc19pbl9jYWxlbmRhcl9fZ2V0X2Zvcl9kYXRlKDIsJzIwMjMtMDgtMjEnKVsyXS5ib29rZWRfdGltZV9zbG90cy5tZXJnZWRfc2Vjb25kcyxcclxuXHRcdFx0XHRcdFx0X3dwYmMuYm9va2luZ3NfaW5fY2FsZW5kYXJfX2dldF9mb3JfZGF0ZSgyLCcyMDIzLTA4LTIxJylbMTBdLmJvb2tlZF90aW1lX3Nsb3RzLm1lcmdlZF9zZWNvbmRzLFxyXG5cdFx0XHRcdFx0XHRfd3BiYy5ib29raW5nc19pbl9jYWxlbmRhcl9fZ2V0X2Zvcl9kYXRlKDIsJzIwMjMtMDgtMjEnKVsxMV0uYm9va2VkX3RpbWVfc2xvdHMubWVyZ2VkX3NlY29uZHMsXHJcblx0XHRcdFx0XHRcdF93cGJjLmJvb2tpbmdzX2luX2NhbGVuZGFyX19nZXRfZm9yX2RhdGUoMiwnMjAyMy0wOC0yMScpWzEyXS5ib29rZWRfdGltZV9zbG90cy5tZXJnZWRfc2Vjb25kc1xyXG5cdFx0XHRcdFx0KTtcclxuICogIE9SXHJcblx0XHRcdGNvbnNvbGUubG9nKFxyXG5cdFx0XHRcdFx0XHRfd3BiYy5ib29raW5nc19pbl9jYWxlbmRhcl9fZ2V0X2Zvcl9kYXRlKDIsJzIwMjMtMDgtMjEnKVsyXS5ib29rZWRfdGltZV9zbG90cy5tZXJnZWRfcmVhZGFibGUsXHJcblx0XHRcdFx0XHRcdF93cGJjLmJvb2tpbmdzX2luX2NhbGVuZGFyX19nZXRfZm9yX2RhdGUoMiwnMjAyMy0wOC0yMScpWzEwXS5ib29rZWRfdGltZV9zbG90cy5tZXJnZWRfcmVhZGFibGUsXHJcblx0XHRcdFx0XHRcdF93cGJjLmJvb2tpbmdzX2luX2NhbGVuZGFyX19nZXRfZm9yX2RhdGUoMiwnMjAyMy0wOC0yMScpWzExXS5ib29rZWRfdGltZV9zbG90cy5tZXJnZWRfcmVhZGFibGUsXHJcblx0XHRcdFx0XHRcdF93cGJjLmJvb2tpbmdzX2luX2NhbGVuZGFyX19nZXRfZm9yX2RhdGUoMiwnMjAyMy0wOC0yMScpWzEyXS5ib29rZWRfdGltZV9zbG90cy5tZXJnZWRfcmVhZGFibGVcclxuXHRcdFx0XHRcdCk7XHJcbiAqXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIERheXMgc2VsZWN0aW9uOlxyXG4gKiBcdFx0XHRcdFx0d3BiY19jYWxlbmRhcl9fdW5zZWxlY3RfYWxsX2RhdGVzKCByZXNvdXJjZV9pZCApO1xyXG4gKlxyXG4gKlx0XHRcdFx0XHR2YXIgcmVzb3VyY2VfaWQgPSAxO1xyXG4gKiBcdEV4YW1wbGUgMTpcdFx0dmFyIG51bV9zZWxlY3RlZF9kYXlzID0gd3BiY19hdXRvX3NlbGVjdF9kYXRlc19pbl9jYWxlbmRhciggcmVzb3VyY2VfaWQsICcyMDI0LTA1LTE1JyxcclxuICogJzIwMjQtMDUtMjUnICk7IEV4YW1wbGUgMjpcdFx0dmFyIG51bV9zZWxlY3RlZF9kYXlzID0gd3BiY19hdXRvX3NlbGVjdF9kYXRlc19pbl9jYWxlbmRhciggcmVzb3VyY2VfaWQsXHJcbiAqIFsnMjAyNC0wNS0wOScsJzIwMjQtMDUtMTknLCcyMDI0LTA1LTI1J10gKTtcclxuICpcclxuICovXHJcblxyXG5cclxuLyoqXHJcbiAqIEMgQSBMIEUgTiBEIEEgUiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAqL1xyXG5cclxuXHJcbi8qKlxyXG4gKiAgU2hvdyBXUEJDIENhbGVuZGFyXHJcbiAqXHJcbiAqIEBwYXJhbSByZXNvdXJjZV9pZFx0XHRcdC0gcmVzb3VyY2UgSURcclxuICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAqL1xyXG5mdW5jdGlvbiB3cGJjX2NhbGVuZGFyX3Nob3coIHJlc291cmNlX2lkICl7XHJcblxyXG5cdC8vIElmIG5vIGNhbGVuZGFyIEhUTUwgdGFnLCAgdGhlbiAgZXhpdFxyXG5cdGlmICggMCA9PT0galF1ZXJ5KCAnI2NhbGVuZGFyX2Jvb2tpbmcnICsgcmVzb3VyY2VfaWQgKS5sZW5ndGggKXsgcmV0dXJuIGZhbHNlOyB9XHJcblxyXG5cdC8vIElmIHRoZSBjYWxlbmRhciB3aXRoIHRoZSBzYW1lIEJvb2tpbmcgcmVzb3VyY2UgaXMgYWN0aXZhdGVkIGFscmVhZHksIHRoZW4gZXhpdC4gQnV0IGluIEVsZW1lbnRvciB0aGUgY2xhc3MgY2FuIGJlIHN0YWxlLCBzbyB2ZXJpZnkgaW5zdGFuY2UuXHJcblx0aWYgKCBqUXVlcnkoICcjY2FsZW5kYXJfYm9va2luZycgKyByZXNvdXJjZV9pZCApLmhhc0NsYXNzKCAnaGFzRGF0ZXBpY2snICkgKSB7XHJcblxyXG5cdFx0dmFyIGV4aXN0aW5nX2luc3QgPSBudWxsO1xyXG5cclxuXHRcdHRyeSB7XHJcblx0XHRcdGV4aXN0aW5nX2luc3QgPSBqUXVlcnkuZGF0ZXBpY2suX2dldEluc3QoIGpRdWVyeSggJyNjYWxlbmRhcl9ib29raW5nJyArIHJlc291cmNlX2lkICkuZ2V0KCAwICkgKTtcclxuXHRcdH0gY2F0Y2ggKCBlICkge1xyXG5cdFx0XHRleGlzdGluZ19pbnN0ID0gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIGV4aXN0aW5nX2luc3QgKSB7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBTdGFsZSBtYXJrZXI6IHJlbW92ZSBhbmQgY29udGludWUgd2l0aCBpbml0LlxyXG5cdFx0alF1ZXJ5KCAnI2NhbGVuZGFyX2Jvb2tpbmcnICsgcmVzb3VyY2VfaWQgKS5yZW1vdmVDbGFzcyggJ2hhc0RhdGVwaWNrJyApO1xyXG5cdH1cclxuXHJcblx0d3BiY19yYW5nZV9zZWxlY3Rpb25fX2hpZGVfZ3VpZGFuY2UoIHJlc291cmNlX2lkICk7XHJcblxyXG5cclxuXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHQvLyBEYXlzIHNlbGVjdGlvblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0dmFyIGxvY2FsX19pc19yYW5nZV9zZWxlY3QgPSBmYWxzZTtcclxuXHR2YXIgbG9jYWxfX211bHRpX2RheXNfc2VsZWN0X251bSAgID0gMzY1O1x0XHRcdFx0XHQvLyBtdWx0aXBsZSB8IGZpeGVkXHJcblx0aWYgKCAnZHluYW1pYycgPT09IF93cGJjLmNhbGVuZGFyX19nZXRfcGFyYW1fdmFsdWUoIHJlc291cmNlX2lkLCAnZGF5c19zZWxlY3RfbW9kZScgKSApe1xyXG5cdFx0bG9jYWxfX2lzX3JhbmdlX3NlbGVjdCA9IHRydWU7XHJcblx0XHRsb2NhbF9fbXVsdGlfZGF5c19zZWxlY3RfbnVtID0gMDtcclxuXHR9XHJcblx0aWYgKCAnc2luZ2xlJyAgPT09IF93cGJjLmNhbGVuZGFyX19nZXRfcGFyYW1fdmFsdWUoIHJlc291cmNlX2lkLCAnZGF5c19zZWxlY3RfbW9kZScgKSApe1xyXG5cdFx0bG9jYWxfX211bHRpX2RheXNfc2VsZWN0X251bSA9IDA7XHJcblx0fVxyXG5cclxuXHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdC8vIE1pbiAtIE1heCBkYXlzIHRvIHNjcm9sbC9zaG93XHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHR2YXIgbG9jYWxfX21pbl9kYXRlID0gMDtcclxuIFx0bG9jYWxfX21pbl9kYXRlID0gbmV3IERhdGUoIF93cGJjLmdldF9vdGhlcl9wYXJhbSggJ3RvZGF5X2FycicgKVsgMCBdLCAocGFyc2VJbnQoIF93cGJjLmdldF9vdGhlcl9wYXJhbSggJ3RvZGF5X2FycicgKVsgMSBdICkgLSAxKSwgX3dwYmMuZ2V0X290aGVyX3BhcmFtKCAndG9kYXlfYXJyJyApWyAyIF0sIDAsIDAsIDAgKTtcdFx0XHQvLyBGaXhJbjogOS45LjAuMTcuXHJcbi8vY29uc29sZS5sb2coIGxvY2FsX19taW5fZGF0ZSApO1xyXG5cdHZhciBsb2NhbF9fbWF4X2RhdGUgPSBfd3BiYy5jYWxlbmRhcl9fZ2V0X3BhcmFtX3ZhbHVlKCByZXNvdXJjZV9pZCwgJ2Jvb2tpbmdfbWF4X21vbnRoZXNfaW5fY2FsZW5kYXInICk7XHJcblx0Ly9sb2NhbF9fbWF4X2RhdGUgPSBuZXcgRGF0ZSgyMDI0LCA1LCAyOCk7ICBJdCBpcyBoZXJlIGlzc3VlIG9mIG5vdCBzZWxlY3RhYmxlIGRhdGVzLCBidXQgc29tZSBkYXRlcyBzaG93aW5nIGluIGNhbGVuZGFyIGFzIGF2YWlsYWJsZSwgYnV0IHdlIGNhbiBub3Qgc2VsZWN0IGl0LlxyXG5cclxuXHQvLy8vIERlZmluZSBsYXN0IGRheSBpbiBjYWxlbmRhciAoYXMgYSBsYXN0IGRheSBvZiBtb250aCAoYW5kIG5vdCBkYXRlLCB3aGljaCBpcyByZWxhdGVkIHRvIGFjdHVhbCAnVG9kYXknIGRhdGUpLlxyXG5cdC8vLy8gRS5nLiBpZiB0b2RheSBpcyAyMDIzLTA5LTI1LCBhbmQgd2Ugc2V0ICdOdW1iZXIgb2YgbW9udGhzIHRvIHNjcm9sbCcgYXMgNSBtb250aHMsIHRoZW4gbGFzdCBkYXkgd2lsbCBiZSAyMDI0LTAyLTI5IGFuZCBub3QgdGhlIDIwMjQtMDItMjUuXHJcblx0Ly8gdmFyIGNhbF9sYXN0X2RheV9pbl9tb250aCA9IGpRdWVyeS5kYXRlcGljay5fZGV0ZXJtaW5lRGF0ZSggbnVsbCwgbG9jYWxfX21heF9kYXRlLCBuZXcgRGF0ZSgpICk7XHJcblx0Ly8gY2FsX2xhc3RfZGF5X2luX21vbnRoID0gbmV3IERhdGUoIGNhbF9sYXN0X2RheV9pbl9tb250aC5nZXRGdWxsWWVhcigpLCBjYWxfbGFzdF9kYXlfaW5fbW9udGguZ2V0TW9udGgoKSArIDEsIDAgKTtcclxuXHQvLyBsb2NhbF9fbWF4X2RhdGUgPSBjYWxfbGFzdF9kYXlfaW5fbW9udGg7XHRcdFx0Ly8gRml4SW46IDEwLjAuMC4yNi5cclxuXHJcblx0Ly8gR2V0IHN0YXJ0IC8gZW5kIGRhdGVzIGZyb20gIHRoZSBCb29raW5nIENhbGVuZGFyIHNob3J0Y29kZS4gRXhhbXBsZTogW2Jvb2tpbmcgY2FsZW5kYXJfZGF0ZXNfc3RhcnQ9JzIwMjYtMDEtMDEnIGNhbGVuZGFyX2RhdGVzX2VuZD0nMjAyNi0xMi0zMScgIHJlc291cmNlX2lkPTFdIC8vIEZpeEluOiAxMC4xMy4xLjQuXHJcblx0aWYgKCBmYWxzZSAhPT0gd3BiY19jYWxlbmRhcl9fZ2V0X2RhdGVzX3N0YXJ0KCByZXNvdXJjZV9pZCApICkge1xyXG5cdFx0bG9jYWxfX21pbl9kYXRlID0gd3BiY19jYWxlbmRhcl9fZ2V0X2RhdGVzX3N0YXJ0KCByZXNvdXJjZV9pZCApOyAgLy8gRS5nLiAtIGxvY2FsX19taW5fZGF0ZSA9IG5ldyBEYXRlKCAyMDI1LCAwLCAxICk7XHJcblx0fVxyXG5cdGlmICggZmFsc2UgIT09IHdwYmNfY2FsZW5kYXJfX2dldF9kYXRlc19lbmQoIHJlc291cmNlX2lkICkgKSB7XHJcblx0XHRsb2NhbF9fbWF4X2RhdGUgPSB3cGJjX2NhbGVuZGFyX19nZXRfZGF0ZXNfZW5kKCByZXNvdXJjZV9pZCApOyAgICAvLyBFLmcuIC0gbG9jYWxfX21heF9kYXRlID0gbmV3IERhdGUoIDIwMjUsIDExLCAzMSApO1xyXG5cdH1cclxuXHJcblx0Ly8gSW4gY2FzZSB3ZSBlZGl0IGJvb2tpbmcgaW4gcGFzdCBvciBoYXZlIHNwZWNpZmljIHBhcmFtZXRlciBpbiBVUkwuXHJcblx0dmFyIHdwYmNfZWRpdF9ib29raW5nX2hhc2ggPSBfd3BiYy5nZXRfb3RoZXJfcGFyYW0oICd0aGlzX3BhZ2VfYm9va2luZ19oYXNoJyApO1xyXG5cdHZhciB3cGJjX2lzX2VkaXRfYm9va2luZ19jb250ZXh0ID0gKCAndW5kZWZpbmVkJyAhPT0gdHlwZW9mIHdwYmNfZWRpdF9ib29raW5nX2hhc2ggKSAmJiAoICcnICE9PSB3cGJjX2VkaXRfYm9va2luZ19oYXNoICk7XHJcblx0dmFyIHdwYmNfYWxsb3dfcGFzdF9jb250ZXh0ID0gX3dwYmMuZ2V0X290aGVyX3BhcmFtKCAndGhpc19wYWdlX2FsbG93X3Bhc3QnICk7XHJcblx0dmFyIHdwYmNfaXNfYWxsb3dfcGFzdF9jb250ZXh0ID0gKCAnMScgPT09IFN0cmluZyggd3BiY19hbGxvd19wYXN0X2NvbnRleHQgKSApIHx8ICggMSA9PT0gd3BiY19hbGxvd19wYXN0X2NvbnRleHQgKSB8fCAoIHRydWUgPT09IHdwYmNfYWxsb3dfcGFzdF9jb250ZXh0ICk7XHJcblx0dmFyIHdwYmNfYWxsb3dfcGFzdF9kYXRlX2FyciA9IF93cGJjLmdldF9vdGhlcl9wYXJhbSggJ3RoaXNfcGFnZV9hbGxvd19wYXN0X2FycicgKTtcclxuXHR2YXIgd3BiY19pc19hZGRfYm9va2luZ19hZG1pbl9wYWdlID0gKCBsb2NhdGlvbi5ocmVmLmluZGV4T2YoICdwYWdlPXdwYmMnICkgIT0gLTEgKSAmJiAoIGxvY2F0aW9uLmhyZWYuaW5kZXhPZiggJ3RhYj1hZGQtYm9va2luZycgKSAhPSAtMSApO1xyXG5cdGlmICggICAoIHdwYmNfaXNfYWRkX2Jvb2tpbmdfYWRtaW5fcGFnZSB8fCB3cGJjX2lzX2VkaXRfYm9va2luZ19jb250ZXh0IHx8IHdwYmNfaXNfYWxsb3dfcGFzdF9jb250ZXh0IClcclxuXHRcdCYmIChcclxuXHRcdFx0ICB3cGJjX2lzX2VkaXRfYm9va2luZ19jb250ZXh0XHJcblx0XHQgICB8fCB3cGJjX2lzX2FsbG93X3Bhc3RfY29udGV4dFxyXG5cdFx0ICAgfHwgKCBsb2NhdGlvbi5ocmVmLmluZGV4T2YoJ2Jvb2tpbmdfaGFzaCcpICE9IC0xICkgICAgICAgICAgICAgICAgICAvLyBDb21tZW50IHRoaXMgbGluZSBmb3IgYWJpbGl0eSB0byBhZGQgIGJvb2tpbmcgaW4gcGFzdCBkYXlzIGF0ICBCb29raW5nID4gQWRkIGJvb2tpbmcgcGFnZS5cclxuXHRcdCAgIHx8ICggbG9jYXRpb24uaHJlZi5pbmRleE9mKCdhbGxvd19wYXN0JykgIT0gLTEgKSAgICAgICAgICAgICAgICAvLyBGaXhJbjogMTAuNy4xLjIuXHJcblx0XHQpXHJcblx0KXtcclxuXHRcdC8vIGxvY2FsX19taW5fZGF0ZSA9IG51bGw7XHJcblx0XHQvLyBGaXhJbjogMTAuMTQuMS40LlxyXG5cdFx0dmFyIHdwYmNfbWluX2RhdGVfYXJyID0gKCB3cGJjX2lzX2FsbG93X3Bhc3RfY29udGV4dCAmJiB3cGJjX2FsbG93X3Bhc3RfZGF0ZV9hcnIgJiYgKCA1IDw9IHdwYmNfYWxsb3dfcGFzdF9kYXRlX2Fyci5sZW5ndGggKSApID8gd3BiY19hbGxvd19wYXN0X2RhdGVfYXJyIDogX3dwYmMuZ2V0X290aGVyX3BhcmFtKCAndGltZV9sb2NhbF9hcnInICk7XHJcblx0XHRsb2NhbF9fbWluX2RhdGUgID0gbmV3IERhdGUoIHdwYmNfbWluX2RhdGVfYXJyWzBdLCAoIHBhcnNlSW50KCB3cGJjX21pbl9kYXRlX2FyclsxXSApIC0gMSksIHdwYmNfbWluX2RhdGVfYXJyWzJdLCB3cGJjX21pbl9kYXRlX2FyclszXSwgd3BiY19taW5fZGF0ZV9hcnJbNF0sIDAgKTtcclxuXHRcdGxvY2FsX19tYXhfZGF0ZSA9IG51bGw7XHJcblx0fVxyXG5cclxuXHR2YXIgbG9jYWxfX3N0YXJ0X3dlZWtkYXkgICAgPSBfd3BiYy5jYWxlbmRhcl9fZ2V0X3BhcmFtX3ZhbHVlKCByZXNvdXJjZV9pZCwgJ2Jvb2tpbmdfc3RhcnRfZGF5X3dlZWVrJyApO1xyXG5cdHZhciBsb2NhbF9fbnVtYmVyX29mX21vbnRocyA9IHBhcnNlSW50KCBfd3BiYy5jYWxlbmRhcl9fZ2V0X3BhcmFtX3ZhbHVlKCByZXNvdXJjZV9pZCwgJ2NhbGVuZGFyX251bWJlcl9vZl9tb250aHMnICkgKTtcclxuXHJcblx0alF1ZXJ5KCAnI2NhbGVuZGFyX2Jvb2tpbmcnICsgcmVzb3VyY2VfaWQgKS50ZXh0KCAnJyApO1x0XHRcdFx0XHQvLyBSZW1vdmUgYWxsIEhUTUwgaW4gY2FsZW5kYXIgdGFnXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHQvLyBTaG93IGNhbGVuZGFyXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHRqUXVlcnkoJyNjYWxlbmRhcl9ib29raW5nJysgcmVzb3VyY2VfaWQpLmRhdGVwaWNrKFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0YmVmb3JlU2hvd0RheTogZnVuY3Rpb24gKCBqc19kYXRlICl7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiB3cGJjX19jYWxlbmRhcl9fYXBwbHlfY3NzX3RvX2RheXMoIGpzX2RhdGUsIHsncmVzb3VyY2VfaWQnOiByZXNvdXJjZV9pZH0sIHRoaXMgKTtcclxuXHRcdFx0XHRcdFx0XHQgIH0sXHJcblx0XHRcdFx0b25TZWxlY3Q6IGZ1bmN0aW9uICggc3RyaW5nX2RhdGVzLCBqc19kYXRlc19hcnIgKXsgIC8qKlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICpcdHN0cmluZ19kYXRlcyAgID0gICAnMjMuMDguMjAyMyAtIDI2LjA4LjIwMjMnXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgKiAgIHwgICAgJzIzLjA4LjIwMjMgLSAyMy4wOC4yMDIzJyAgICB8XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgKiAnMTkuMDkuMjAyMywgMjQuMDguMjAyMywgMzAuMDkuMjAyMydcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAqIGpzX2RhdGVzX2FyciAgID0gICByYW5nZTogWyBEYXRlIChBdWcgMjMgMjAyMyksXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgKiBEYXRlIChBdWcgMjUgMjAyMyldICAgICB8ICAgICBtdWx0aXBsZTogW1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICogRGF0ZShPY3QgMjQgMjAyMyksIERhdGUoT2N0IDIwIDIwMjMpLCBEYXRlKE9jdFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICogMTYgMjAyMykgXVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiB3cGJjX19jYWxlbmRhcl9fb25fc2VsZWN0X2RheXMoIHN0cmluZ19kYXRlcywgeydyZXNvdXJjZV9pZCc6IHJlc291cmNlX2lkfSwgdGhpcyApO1xyXG5cdFx0XHRcdFx0XHRcdCAgfSxcclxuXHRcdFx0XHRvbkhvdmVyOiBmdW5jdGlvbiAoIHN0cmluZ19kYXRlLCBqc19kYXRlICl7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiB3cGJjX19jYWxlbmRhcl9fb25faG92ZXJfZGF5cyggc3RyaW5nX2RhdGUsIGpzX2RhdGUsIHsncmVzb3VyY2VfaWQnOiByZXNvdXJjZV9pZH0sIHRoaXMgKTtcclxuXHRcdFx0XHRcdFx0XHQgIH0sXHJcblx0XHRcdFx0b25DaGFuZ2VNb250aFllYXI6IGZ1bmN0aW9uICggeWVhciwgcmVhbF9tb250aCwganNfZGF0ZV9fMXN0X2RheV9pbl9tb250aCApeyB9LFxyXG5cdFx0XHRcdHNob3dPbiAgICAgICAgOiAnYm90aCcsXHJcblx0XHRcdFx0bnVtYmVyT2ZNb250aHM6IGxvY2FsX19udW1iZXJfb2ZfbW9udGhzLFxyXG5cdFx0XHRcdHN0ZXBNb250aHMgICAgOiAxLFxyXG5cdFx0XHRcdC8vIHByZXZUZXh0ICAgICAgOiAnJmxhcXVvOycsXHJcblx0XHRcdFx0Ly8gbmV4dFRleHQgICAgICA6ICcmcmFxdW87JyxcclxuXHRcdFx0XHRwcmV2VGV4dCAgICAgIDogJyZsc2FxdW87JyxcclxuXHRcdFx0XHRuZXh0VGV4dCAgICAgIDogJyZyc2FxdW87JyxcclxuXHRcdFx0XHRkYXRlRm9ybWF0ICAgIDogJ2RkLm1tLnl5JyxcclxuXHRcdFx0XHRjaGFuZ2VNb250aCAgIDogZmFsc2UsXHJcblx0XHRcdFx0Y2hhbmdlWWVhciAgICA6IGZhbHNlLFxyXG5cdFx0XHRcdG1pbkRhdGUgICAgICAgOiBsb2NhbF9fbWluX2RhdGUsXHJcblx0XHRcdFx0bWF4RGF0ZSAgICAgICA6IGxvY2FsX19tYXhfZGF0ZSwgXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vICcxWScsXHJcblx0XHRcdFx0Ly8gbWluRGF0ZTogbmV3IERhdGUoMjAyMCwgMiwgMSksIG1heERhdGU6IG5ldyBEYXRlKDIwMjAsIDksIDMxKSwgICAgICAgICAgICAgXHQvLyBBYmlsaXR5IHRvIHNldCBhbnkgIHN0YXJ0IGFuZCBlbmQgZGF0ZSBpbiBjYWxlbmRhclxyXG5cdFx0XHRcdHNob3dTdGF0dXMgICAgICA6IGZhbHNlLFxyXG5cdFx0XHRcdG11bHRpU2VwYXJhdG9yICA6ICcsICcsXHJcblx0XHRcdFx0Y2xvc2VBdFRvcCAgICAgIDogZmFsc2UsXHJcblx0XHRcdFx0Zmlyc3REYXkgICAgICAgIDogbG9jYWxfX3N0YXJ0X3dlZWtkYXksXHJcblx0XHRcdFx0Z290b0N1cnJlbnQgICAgIDogZmFsc2UsXHJcblx0XHRcdFx0aGlkZUlmTm9QcmV2TmV4dDogdHJ1ZSxcclxuXHRcdFx0XHRtdWx0aVNlbGVjdCAgICAgOiBsb2NhbF9fbXVsdGlfZGF5c19zZWxlY3RfbnVtLFxyXG5cdFx0XHRcdHJhbmdlU2VsZWN0ICAgICA6IGxvY2FsX19pc19yYW5nZV9zZWxlY3QsXHJcblx0XHRcdFx0Ly8gc2hvd1dlZWtzOiB0cnVlLFxyXG5cdFx0XHRcdHVzZVRoZW1lUm9sbGVyOiBmYWxzZVxyXG5cdFx0XHR9XHJcblx0KTtcclxuXHJcblxyXG5cclxuXHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdC8vIENsZWFyIHRvZGF5IGRhdGUgaGlnaGxpZ2h0aW5nXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHRzZXRUaW1lb3V0KCBmdW5jdGlvbiAoKXsgIHdwYmNfY2FsZW5kYXJzX19jbGVhcl9kYXlzX2hpZ2hsaWdodGluZyggcmVzb3VyY2VfaWQgKTsgIH0sIDUwMCApOyAgICAgICAgICAgICAgICAgICAgXHQvLyBGaXhJbjogNy4xLjIuOC5cclxuXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHQvLyBTY3JvbGwgY2FsZW5kYXIgdG8gIHNwZWNpZmljIG1vbnRoXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHR2YXIgc3RhcnRfYmtfbW9udGggPSBfd3BiYy5jYWxlbmRhcl9fZ2V0X3BhcmFtX3ZhbHVlKCByZXNvdXJjZV9pZCwgJ2NhbGVuZGFyX3Njcm9sbF90bycgKTtcclxuXHRpZiAoIGZhbHNlICE9PSBzdGFydF9ia19tb250aCApe1xyXG5cdFx0d3BiY19jYWxlbmRhcl9fc2Nyb2xsX3RvKCByZXNvdXJjZV9pZCwgc3RhcnRfYmtfbW9udGhbIDAgXSwgc3RhcnRfYmtfbW9udGhbIDEgXSApO1xyXG5cdH1cclxuXHR9XHJcblxyXG5cclxuXHQvKipcclxuXHQgKiBHZXQgYm9va2luZyBzdGF0dXNlcyBhcyBhcnJheSBmcm9tIHRoZSBzdHJ1Y3R1cmVkIHN1bW1hcnkgZmllbGQsIHdpdGggZmFsbGJhY2sgdG8gdGhlIGxlZ2FjeSBzdHJpbmcgZmllbGQuXHJcblx0ICpcclxuXHQgKiBAcGFyYW0gZGF0ZV9ib29raW5nc19vYmpcclxuXHQgKiBAcmV0dXJucyB7W119XHJcblx0ICovXHJcblx0ZnVuY3Rpb24gd3BiY19nZXRfYm9va2luZ19zdGF0dXNlc19fYXNfYXJyKCBkYXRlX2Jvb2tpbmdzX29iaiApe1xyXG5cclxuXHRcdGlmIChcclxuXHRcdFx0ICAgKCAhIGRhdGVfYm9va2luZ3Nfb2JqIClcclxuXHRcdFx0fHwgKCAndW5kZWZpbmVkJyA9PT0gdHlwZW9mIChkYXRlX2Jvb2tpbmdzX29ialsgJ3N1bW1hcnknIF0pIClcclxuXHRcdCl7XHJcblx0XHRcdHJldHVybiBbXTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIGRhdGVfYm9va2luZ3Nfb2JqWyAnc3VtbWFyeScgXVsgJ3N0YXR1c19mb3JfYm9va2luZ3NfYXJyJyBdICkgKXtcclxuXHRcdFx0cmV0dXJuIGRhdGVfYm9va2luZ3Nfb2JqWyAnc3VtbWFyeScgXVsgJ3N0YXR1c19mb3JfYm9va2luZ3NfYXJyJyBdLmZpbHRlciggZnVuY3Rpb24gKCBib29raW5nX3N0YXR1cyApe1xyXG5cdFx0XHRcdHJldHVybiAnJyAhPT0gYm9va2luZ19zdGF0dXM7XHJcblx0XHRcdH0gKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoICEgZGF0ZV9ib29raW5nc19vYmpbICdzdW1tYXJ5JyBdWyAnc3RhdHVzX2Zvcl9ib29raW5ncycgXSApe1xyXG5cdFx0XHRyZXR1cm4gW107XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGRhdGVfYm9va2luZ3Nfb2JqWyAnc3VtbWFyeScgXVsgJ3N0YXR1c19mb3JfYm9va2luZ3MnIF0udG9TdHJpbmcoKS50cmltKCkuc3BsaXQoIC9cXHMrLyApLmZpbHRlciggZnVuY3Rpb24gKCBib29raW5nX3N0YXR1cyApe1xyXG5cdFx0XHRyZXR1cm4gJycgIT09IGJvb2tpbmdfc3RhdHVzO1xyXG5cdFx0fSApO1xyXG5cdH1cclxuXHJcblxyXG5cdC8qKlxyXG5cdCAqIENoZWNrIGV4YWN0IGJvb2tpbmcgc3RhdHVzIGluIHN0YXR1c2VzIGFycmF5LlxyXG5cdCAqXHJcblx0ICogQHBhcmFtIHtbXX0gYm9va2luZ19zdGF0dXNlc19hcnJcclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gYm9va2luZ19zdGF0dXNcclxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuXHQgKi9cclxuXHRmdW5jdGlvbiB3cGJjX2Jvb2tpbmdfc3RhdHVzZXNfX2hhcyggYm9va2luZ19zdGF0dXNlc19hcnIsIGJvb2tpbmdfc3RhdHVzICl7XHJcblx0XHRyZXR1cm4gYm9va2luZ19zdGF0dXNlc19hcnIuaW5kZXhPZiggYm9va2luZ19zdGF0dXMgKSA+IC0xO1xyXG5cdH1cclxuXHJcblxyXG5cdC8qKlxyXG5cdCAqIENoZWNrIGJvb2tpbmcgc3RhdHVzIHBhcnQsIGUuZy4gXCJwZW5kaW5nXCIgaW4gXCJhcHByb3ZlZF9wZW5kaW5nXCIuXHJcblx0ICpcclxuXHQgKiBAcGFyYW0ge1tdfSBib29raW5nX3N0YXR1c2VzX2FyclxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBib29raW5nX3N0YXR1c19wYXJ0XHJcblx0ICogQHJldHVybnMge2Jvb2xlYW59XHJcblx0ICovXHJcblx0ZnVuY3Rpb24gd3BiY19ib29raW5nX3N0YXR1c2VzX19oYXNfcGFydCggYm9va2luZ19zdGF0dXNlc19hcnIsIGJvb2tpbmdfc3RhdHVzX3BhcnQgKXtcclxuXHJcblx0XHRmb3IgKCB2YXIgaSA9IDA7IGkgPCBib29raW5nX3N0YXR1c2VzX2Fyci5sZW5ndGg7IGkrKyApe1xyXG5cdFx0XHRpZiAoIGJvb2tpbmdfc3RhdHVzZXNfYXJyWyBpIF0uc3BsaXQoICdfJyApLmluZGV4T2YoIGJvb2tpbmdfc3RhdHVzX3BhcnQgKSA+IC0xICl7XHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cclxuXHJcblx0LyoqXHJcblx0ICogQXBwbHkgQ1NTIHRvIGNhbGVuZGFyIGRhdGUgY2VsbHNcclxuXHQgKlxyXG5cdCAqIEBwYXJhbSBkYXRlXHRcdFx0XHRcdFx0XHRcdFx0XHQtICBKYXZhU2NyaXB0IERhdGUgT2JqOiAgXHRcdE1vbiBEZWMgMTEgMjAyMyAwMDowMDowMFxyXG5cdCAqICAgICBHTVQrMDIwMCAoRWFzdGVybiBFdXJvcGVhbiBTdGFuZGFyZCBUaW1lKVxyXG5cdCAqIEBwYXJhbSBjYWxlbmRhcl9wYXJhbXNfYXJyXHRcdFx0XHRcdFx0LSAgQ2FsZW5kYXIgU2V0dGluZ3MgT2JqZWN0OiAgXHR7XHJcblx0ICpcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgXHRcdFx0XHRcdFx0XCJyZXNvdXJjZV9pZFwiOiA0XHJcblx0ICpcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0ICogQHBhcmFtIGRhdGVwaWNrX3RoaXNcdFx0XHRcdFx0XHRcdFx0LSB0aGlzIG9mIGRhdGVwaWNrIE9ialxyXG5cdCAqIEByZXR1cm5zIHsoKnxzdHJpbmcpW118KGJvb2xlYW58c3RyaW5nKVtdfVx0XHQtIFsge3RydWUgLWF2YWlsYWJsZSB8IGZhbHNlIC0gdW5hdmFpbGFibGV9LCAnQ1NTIGNsYXNzZXMgZm9yXHJcblx0ICogICAgIGNhbGVuZGFyIGRheSBjZWxsJyBdXHJcblx0ICovXHJcblx0ZnVuY3Rpb24gd3BiY19fY2FsZW5kYXJfX2FwcGx5X2Nzc190b19kYXlzKCBkYXRlLCBjYWxlbmRhcl9wYXJhbXNfYXJyLCBkYXRlcGlja190aGlzICl7XHJcblxyXG5cdFx0dmFyIHRvZGF5X2RhdGUgPSBuZXcgRGF0ZSggX3dwYmMuZ2V0X290aGVyX3BhcmFtKCAndG9kYXlfYXJyJyApWyAwIF0sIChwYXJzZUludCggX3dwYmMuZ2V0X290aGVyX3BhcmFtKCAndG9kYXlfYXJyJyApWyAxIF0gKSAtIDEpLCBfd3BiYy5nZXRfb3RoZXJfcGFyYW0oICd0b2RheV9hcnInIClbIDIgXSwgMCwgMCwgMCApO1x0XHRcdFx0XHRcdFx0XHQvLyBUb2RheSBKU19EYXRlX09iai5cclxuXHRcdHZhciBjbGFzc19kYXkgICAgID0gd3BiY19fZ2V0X190ZF9jbGFzc19kYXRlKCBkYXRlICk7XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gJzEtOS0yMDIzJ1xyXG5cdFx0dmFyIHNxbF9jbGFzc19kYXkgPSB3cGJjX19nZXRfX3NxbF9jbGFzc19kYXRlKCBkYXRlICk7XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gJzIwMjMtMDEtMDknXHJcblx0XHR2YXIgcmVzb3VyY2VfaWQgPSAoICd1bmRlZmluZWQnICE9PSB0eXBlb2YoY2FsZW5kYXJfcGFyYW1zX2FyclsgJ3Jlc291cmNlX2lkJyBdKSApID8gY2FsZW5kYXJfcGFyYW1zX2FyclsgJ3Jlc291cmNlX2lkJyBdIDogJzEnOyBcdFx0Ly8gJzEnXHJcblxyXG5cdFx0Ly8gR2V0IFNlbGVjdGVkIGRhdGVzIGluIGNhbGVuZGFyXHJcblx0XHR2YXIgc2VsZWN0ZWRfZGF0ZXNfc3FsID0gd3BiY19nZXRfX3NlbGVjdGVkX2RhdGVzX3NxbF9fYXNfYXJyKCByZXNvdXJjZV9pZCApO1xyXG5cclxuXHRcdC8vIEdldCBEYXRhIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0XHR2YXIgZGF0ZV9ib29raW5nc19vYmogPSBfd3BiYy5ib29raW5nc19pbl9jYWxlbmRhcl9fZ2V0X2Zvcl9kYXRlKCByZXNvdXJjZV9pZCwgc3FsX2NsYXNzX2RheSApO1xyXG5cclxuXHJcblx0XHQvLyBBcnJheSB3aXRoIENTUyBjbGFzc2VzIGZvciBkYXRlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdFx0dmFyIGNzc19jbGFzc2VzX19mb3JfZGF0ZSA9IFtdO1xyXG5cdFx0Y3NzX2NsYXNzZXNfX2Zvcl9kYXRlLnB1c2goICdzcWxfZGF0ZV8nICAgICArIHNxbF9jbGFzc19kYXkgKTtcdFx0XHRcdC8vICAnc3FsX2RhdGVfMjAyMy0wNy0yMSdcclxuXHRcdGNzc19jbGFzc2VzX19mb3JfZGF0ZS5wdXNoKCAnY2FsNGRhdGUtJyAgICAgKyBjbGFzc19kYXkgKTtcdFx0XHRcdFx0Ly8gICdjYWw0ZGF0ZS03LTIxLTIwMjMnXHJcblx0XHRjc3NfY2xhc3Nlc19fZm9yX2RhdGUucHVzaCggJ3dwYmNfd2Vla2RheV8nICsgZGF0ZS5nZXREYXkoKSApO1x0XHRcdFx0Ly8gICd3cGJjX3dlZWtkYXlfNCdcclxuXHJcblx0XHQvLyBEZWZpbmUgU2VsZWN0ZWQgQ2hlY2sgSW4vT3V0IGRhdGVzIGluIFREICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdFx0aWYgKFxyXG5cdFx0XHRcdCggc2VsZWN0ZWRfZGF0ZXNfc3FsLmxlbmd0aCAgKVxyXG5cdFx0XHQvLyYmICAoIHNlbGVjdGVkX2RhdGVzX3NxbFsgMCBdICE9PSBzZWxlY3RlZF9kYXRlc19zcWxbIChzZWxlY3RlZF9kYXRlc19zcWwubGVuZ3RoIC0gMSkgXSApXHJcblx0XHQpe1xyXG5cdFx0XHRpZiAoIHNxbF9jbGFzc19kYXkgPT09IHNlbGVjdGVkX2RhdGVzX3NxbFsgMCBdICl7XHJcblx0XHRcdFx0Y3NzX2NsYXNzZXNfX2Zvcl9kYXRlLnB1c2goICdzZWxlY3RlZF9jaGVja19pbicgKTtcclxuXHRcdFx0XHRjc3NfY2xhc3Nlc19fZm9yX2RhdGUucHVzaCggJ3NlbGVjdGVkX2NoZWNrX2luX291dCcgKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoICAoIHNlbGVjdGVkX2RhdGVzX3NxbC5sZW5ndGggPiAxICkgJiYgKCBzcWxfY2xhc3NfZGF5ID09PSBzZWxlY3RlZF9kYXRlc19zcWxbIChzZWxlY3RlZF9kYXRlc19zcWwubGVuZ3RoIC0gMSkgXSApICkge1xyXG5cdFx0XHRcdGNzc19jbGFzc2VzX19mb3JfZGF0ZS5wdXNoKCAnc2VsZWN0ZWRfY2hlY2tfb3V0JyApO1xyXG5cdFx0XHRcdGNzc19jbGFzc2VzX19mb3JfZGF0ZS5wdXNoKCAnc2VsZWN0ZWRfY2hlY2tfaW5fb3V0JyApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cclxuXHRcdHZhciBpc19kYXlfc2VsZWN0YWJsZSA9IGZhbHNlO1xyXG5cclxuXHRcdC8vIElmIHNvbWV0aGluZyBub3QgZGVmaW5lZCwgIHRoZW4gIHRoaXMgZGF0ZSBjbG9zZWQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC8vIEZpeEluOiAxMC4xMi40LjYuXHJcblx0XHRpZiAoIChmYWxzZSA9PT0gZGF0ZV9ib29raW5nc19vYmopIHx8ICgndW5kZWZpbmVkJyA9PT0gdHlwZW9mIChkYXRlX2Jvb2tpbmdzX29ialtyZXNvdXJjZV9pZF0pKSApIHtcclxuXHJcblx0XHRcdGNzc19jbGFzc2VzX19mb3JfZGF0ZS5wdXNoKCAnZGF0ZV91c2VyX3VuYXZhaWxhYmxlJyApO1xyXG5cclxuXHRcdFx0cmV0dXJuIFsgaXNfZGF5X3NlbGVjdGFibGUsIGNzc19jbGFzc2VzX19mb3JfZGF0ZS5qb2luKCcgJykgIF07XHJcblx0XHR9XHJcblxyXG5cclxuXHRcdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0XHQvLyAgIGRhdGVfYm9va2luZ3Nfb2JqICAtIERlZmluZWQuICAgICAgICAgICAgRGF0ZXMgY2FuIGJlIHNlbGVjdGFibGUuXHJcblx0XHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdFx0dmFyIGJvb2tpbmdfc3RhdHVzZXNfYXJyID0gd3BiY19nZXRfYm9va2luZ19zdGF0dXNlc19fYXNfYXJyKCBkYXRlX2Jvb2tpbmdzX29iaiApO1xyXG5cclxuXHRcdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0XHQvLyBBZGQgc2Vhc29uIG5hbWVzIHRvIHRoZSBkYXkgQ1NTIGNsYXNzZXMgLS0gaXQgaXMgcmVxdWlyZWQgZm9yIGNvcnJlY3QgIHdvcmsgIG9mIGNvbmRpdGlvbmFsIGZpZWxkcyAtLS0tLS0tLS0tLS0tLVxyXG5cdFx0dmFyIHNlYXNvbl9uYW1lc19hcnIgPSBfd3BiYy5zZWFzb25zX19nZXRfZm9yX2RhdGUoIHJlc291cmNlX2lkLCBzcWxfY2xhc3NfZGF5ICk7XHJcblxyXG5cdFx0Zm9yICggdmFyIHNlYXNvbl9rZXkgaW4gc2Vhc29uX25hbWVzX2FyciApe1xyXG5cclxuXHRcdFx0Y3NzX2NsYXNzZXNfX2Zvcl9kYXRlLnB1c2goIHNlYXNvbl9uYW1lc19hcnJbIHNlYXNvbl9rZXkgXSApO1x0XHRcdFx0Ly8gICd3cGRldmJrX3NlYXNvbl9zZXB0ZW1iZXJfMjAyMydcclxuXHRcdH1cclxuXHRcdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cclxuXHRcdC8vIENvc3QgUmF0ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0XHRjc3NfY2xhc3Nlc19fZm9yX2RhdGUucHVzaCggJ3JhdGVfJyArIGRhdGVfYm9va2luZ3Nfb2JqWyByZXNvdXJjZV9pZCBdWyAnZGF0ZV9jb3N0X3JhdGUnIF0udG9TdHJpbmcoKS5yZXBsYWNlKCAvW1xcLlxcc10vZywgJ18nICkgKTtcdFx0XHRcdFx0XHQvLyAgJ3JhdGVfOTlfMDAnIC0+IDk5LjAwXHJcblxyXG5cclxuXHRcdGlmICggcGFyc2VJbnQoIGRhdGVfYm9va2luZ3Nfb2JqWyAnZGF5X2F2YWlsYWJpbGl0eScgXSApID4gMCApe1xyXG5cdFx0XHRpc19kYXlfc2VsZWN0YWJsZSA9IHRydWU7XHJcblx0XHRcdGNzc19jbGFzc2VzX19mb3JfZGF0ZS5wdXNoKCAnZGF0ZV9hdmFpbGFibGUnICk7XHJcblx0XHRcdGNzc19jbGFzc2VzX19mb3JfZGF0ZS5wdXNoKCAncmVzZXJ2ZWRfZGF5c19jb3VudCcgKyBwYXJzZUludCggZGF0ZV9ib29raW5nc19vYmpbICdtYXhfY2FwYWNpdHknIF0gLSBkYXRlX2Jvb2tpbmdzX29ialsgJ2RheV9hdmFpbGFiaWxpdHknIF0gKSApO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0aXNfZGF5X3NlbGVjdGFibGUgPSBmYWxzZTtcclxuXHRcdFx0Y3NzX2NsYXNzZXNfX2Zvcl9kYXRlLnB1c2goICdkYXRlX3VzZXJfdW5hdmFpbGFibGUnICk7XHJcblx0XHR9XHJcblxyXG5cclxuXHRcdHN3aXRjaCAoIGRhdGVfYm9va2luZ3Nfb2JqWyAnc3VtbWFyeSddWydzdGF0dXNfZm9yX2RheScgXSApe1xyXG5cclxuXHRcdFx0Y2FzZSAnYXZhaWxhYmxlJzpcclxuXHRcdFx0XHRicmVhaztcclxuXHJcblx0XHRcdGNhc2UgJ3RpbWVfc2xvdHNfYm9va2luZyc6XHJcblx0XHRcdFx0Y3NzX2NsYXNzZXNfX2Zvcl9kYXRlLnB1c2goICd0aW1lc3BhcnRseScsICd0aW1lc19jbG9jaycgKTtcclxuXHRcdFx0XHRicmVhaztcclxuXHJcblx0XHRcdGNhc2UgJ2Z1bGxfZGF5X2Jvb2tpbmcnOlxyXG5cdFx0XHRcdGNzc19jbGFzc2VzX19mb3JfZGF0ZS5wdXNoKCAnZnVsbF9kYXlfYm9va2luZycgKTtcclxuXHRcdFx0XHRicmVhaztcclxuXHJcblx0XHRcdGNhc2UgJ3NlYXNvbl9maWx0ZXInOlxyXG5cdFx0XHRcdGNzc19jbGFzc2VzX19mb3JfZGF0ZS5wdXNoKCAnZGF0ZV91c2VyX3VuYXZhaWxhYmxlJywgJ3NlYXNvbl91bmF2YWlsYWJsZScgKTtcclxuXHRcdFx0XHRkYXRlX2Jvb2tpbmdzX29ialsgJ3N1bW1hcnknXVsnc3RhdHVzX2Zvcl9ib29raW5ncycgXSA9ICcnO1x0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBSZXNldCBib29raW5nIHN0YXR1cyBjb2xvciBmb3IgcG9zc2libGUgb2xkIGJvb2tpbmdzIG9uIHRoaXMgZGF0ZVxyXG5cdFx0XHRcdGRhdGVfYm9va2luZ3Nfb2JqWyAnc3VtbWFyeSddWydzdGF0dXNfZm9yX2Jvb2tpbmdzX2FycicgXSA9IFtdO1xyXG5cdFx0XHRcdGJvb2tpbmdfc3RhdHVzZXNfYXJyID0gW107XHJcblx0XHRcdFx0YnJlYWs7XHJcblxyXG5cdFx0XHRjYXNlICdyZXNvdXJjZV9hdmFpbGFiaWxpdHknOlxyXG5cdFx0XHRcdGNzc19jbGFzc2VzX19mb3JfZGF0ZS5wdXNoKCAnZGF0ZV91c2VyX3VuYXZhaWxhYmxlJywgJ3Jlc291cmNlX3VuYXZhaWxhYmxlJyApO1xyXG5cdFx0XHRcdGRhdGVfYm9va2luZ3Nfb2JqWyAnc3VtbWFyeSddWydzdGF0dXNfZm9yX2Jvb2tpbmdzJyBdID0gJyc7XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFJlc2V0IGJvb2tpbmcgc3RhdHVzIGNvbG9yIGZvciBwb3NzaWJsZSBvbGQgYm9va2luZ3Mgb24gdGhpcyBkYXRlXHJcblx0XHRcdFx0ZGF0ZV9ib29raW5nc19vYmpbICdzdW1tYXJ5J11bJ3N0YXR1c19mb3JfYm9va2luZ3NfYXJyJyBdID0gW107XHJcblx0XHRcdFx0Ym9va2luZ19zdGF0dXNlc19hcnIgPSBbXTtcclxuXHRcdFx0XHRicmVhaztcclxuXHJcblx0XHRcdGNhc2UgJ3dlZWtkYXlfdW5hdmFpbGFibGUnOlxyXG5cdFx0XHRcdGNzc19jbGFzc2VzX19mb3JfZGF0ZS5wdXNoKCAnZGF0ZV91c2VyX3VuYXZhaWxhYmxlJywgJ3dlZWtkYXlfdW5hdmFpbGFibGUnICk7XHJcblx0XHRcdFx0ZGF0ZV9ib29raW5nc19vYmpbICdzdW1tYXJ5J11bJ3N0YXR1c19mb3JfYm9va2luZ3MnIF0gPSAnJztcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gUmVzZXQgYm9va2luZyBzdGF0dXMgY29sb3IgZm9yIHBvc3NpYmxlIG9sZCBib29raW5ncyBvbiB0aGlzIGRhdGVcclxuXHRcdFx0XHRkYXRlX2Jvb2tpbmdzX29ialsgJ3N1bW1hcnknXVsnc3RhdHVzX2Zvcl9ib29raW5nc19hcnInIF0gPSBbXTtcclxuXHRcdFx0XHRib29raW5nX3N0YXR1c2VzX2FyciA9IFtdO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cclxuXHRcdFx0Y2FzZSAnZnJvbV90b2RheV91bmF2YWlsYWJsZSc6XHJcblx0XHRcdFx0Y3NzX2NsYXNzZXNfX2Zvcl9kYXRlLnB1c2goICdkYXRlX3VzZXJfdW5hdmFpbGFibGUnLCAnZnJvbV90b2RheV91bmF2YWlsYWJsZScgKTtcclxuXHRcdFx0XHRkYXRlX2Jvb2tpbmdzX29ialsgJ3N1bW1hcnknXVsnc3RhdHVzX2Zvcl9ib29raW5ncycgXSA9ICcnO1x0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBSZXNldCBib29raW5nIHN0YXR1cyBjb2xvciBmb3IgcG9zc2libGUgb2xkIGJvb2tpbmdzIG9uIHRoaXMgZGF0ZVxyXG5cdFx0XHRcdGRhdGVfYm9va2luZ3Nfb2JqWyAnc3VtbWFyeSddWydzdGF0dXNfZm9yX2Jvb2tpbmdzX2FycicgXSA9IFtdO1xyXG5cdFx0XHRcdGJvb2tpbmdfc3RhdHVzZXNfYXJyID0gW107XHJcblx0XHRcdFx0YnJlYWs7XHJcblxyXG5cdFx0XHRjYXNlICdsaW1pdF9hdmFpbGFibGVfZnJvbV90b2RheSc6XHJcblx0XHRcdFx0Y3NzX2NsYXNzZXNfX2Zvcl9kYXRlLnB1c2goICdkYXRlX3VzZXJfdW5hdmFpbGFibGUnLCAnbGltaXRfYXZhaWxhYmxlX2Zyb21fdG9kYXknICk7XHJcblx0XHRcdFx0ZGF0ZV9ib29raW5nc19vYmpbICdzdW1tYXJ5J11bJ3N0YXR1c19mb3JfYm9va2luZ3MnIF0gPSAnJztcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gUmVzZXQgYm9va2luZyBzdGF0dXMgY29sb3IgZm9yIHBvc3NpYmxlIG9sZCBib29raW5ncyBvbiB0aGlzIGRhdGVcclxuXHRcdFx0XHRkYXRlX2Jvb2tpbmdzX29ialsgJ3N1bW1hcnknXVsnc3RhdHVzX2Zvcl9ib29raW5nc19hcnInIF0gPSBbXTtcclxuXHRcdFx0XHRib29raW5nX3N0YXR1c2VzX2FyciA9IFtdO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cclxuXHRcdFx0Y2FzZSAnY2hhbmdlX292ZXInOlxyXG5cdFx0XHRcdC8qXHJcblx0XHRcdFx0ICpcclxuXHRcdFx0XHQvLyAgY2hlY2tfb3V0X3RpbWVfZGF0ZTJhcHByb3ZlIFx0IFx0Y2hlY2tfaW5fdGltZV9kYXRlMmFwcHJvdmVcclxuXHRcdFx0XHQvLyAgY2hlY2tfb3V0X3RpbWVfZGF0ZTJhcHByb3ZlIFx0IFx0Y2hlY2tfaW5fdGltZV9kYXRlX2FwcHJvdmVkXHJcblx0XHRcdFx0Ly8gIGNoZWNrX2luX3RpbWVfZGF0ZTJhcHByb3ZlIFx0XHQgXHRjaGVja19vdXRfdGltZV9kYXRlX2FwcHJvdmVkXHJcblx0XHRcdFx0Ly8gIGNoZWNrX291dF90aW1lX2RhdGVfYXBwcm92ZWQgXHQgXHRjaGVja19pbl90aW1lX2RhdGVfYXBwcm92ZWRcclxuXHRcdFx0XHQgKi9cclxuXHJcblx0XHRcdFx0Y3NzX2NsYXNzZXNfX2Zvcl9kYXRlLnB1c2goICd0aW1lc3BhcnRseScsICdjaGVja19pbl90aW1lJywgJ2NoZWNrX291dF90aW1lJyApO1xyXG5cdFx0XHRcdC8vIEZpeEluOiAxMC4wLjAuMi5cclxuXHRcdFx0XHRpZiAoIHdwYmNfYm9va2luZ19zdGF0dXNlc19faGFzKCBib29raW5nX3N0YXR1c2VzX2FyciwgJ2FwcHJvdmVkX3BlbmRpbmcnICkgKXtcclxuXHRcdFx0XHRcdGNzc19jbGFzc2VzX19mb3JfZGF0ZS5wdXNoKCAnY2hlY2tfb3V0X3RpbWVfZGF0ZV9hcHByb3ZlZCcsICdjaGVja19pbl90aW1lX2RhdGUyYXBwcm92ZScgKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKCB3cGJjX2Jvb2tpbmdfc3RhdHVzZXNfX2hhcyggYm9va2luZ19zdGF0dXNlc19hcnIsICdwZW5kaW5nX2FwcHJvdmVkJyApICl7XHJcblx0XHRcdFx0XHRjc3NfY2xhc3Nlc19fZm9yX2RhdGUucHVzaCggJ2NoZWNrX291dF90aW1lX2RhdGUyYXBwcm92ZScsICdjaGVja19pbl90aW1lX2RhdGVfYXBwcm92ZWQnICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGJyZWFrO1xyXG5cclxuXHRcdFx0Y2FzZSAnY2hlY2tfaW4nOlxyXG5cdFx0XHRcdGNzc19jbGFzc2VzX19mb3JfZGF0ZS5wdXNoKCAndGltZXNwYXJ0bHknLCAnY2hlY2tfaW5fdGltZScgKTtcclxuXHJcblx0XHRcdFx0Ly8gRml4SW46IDkuOS4wLjMzLlxyXG5cdFx0XHRcdGlmICggd3BiY19ib29raW5nX3N0YXR1c2VzX19oYXNfcGFydCggYm9va2luZ19zdGF0dXNlc19hcnIsICdwZW5kaW5nJyApICl7XHJcblx0XHRcdFx0XHRjc3NfY2xhc3Nlc19fZm9yX2RhdGUucHVzaCggJ2NoZWNrX2luX3RpbWVfZGF0ZTJhcHByb3ZlJyApO1xyXG5cdFx0XHRcdH0gZWxzZSBpZiAoIHdwYmNfYm9va2luZ19zdGF0dXNlc19faGFzX3BhcnQoIGJvb2tpbmdfc3RhdHVzZXNfYXJyLCAnYXBwcm92ZWQnICkgKXtcclxuXHRcdFx0XHRcdGNzc19jbGFzc2VzX19mb3JfZGF0ZS5wdXNoKCAnY2hlY2tfaW5fdGltZV9kYXRlX2FwcHJvdmVkJyApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRicmVhaztcclxuXHJcblx0XHRcdGNhc2UgJ2NoZWNrX291dCc6XHJcblx0XHRcdFx0Y3NzX2NsYXNzZXNfX2Zvcl9kYXRlLnB1c2goICd0aW1lc3BhcnRseScsICdjaGVja19vdXRfdGltZScgKTtcclxuXHJcblx0XHRcdFx0Ly8gRml4SW46IDkuOS4wLjMzLlxyXG5cdFx0XHRcdGlmICggd3BiY19ib29raW5nX3N0YXR1c2VzX19oYXNfcGFydCggYm9va2luZ19zdGF0dXNlc19hcnIsICdwZW5kaW5nJyApICl7XHJcblx0XHRcdFx0XHRjc3NfY2xhc3Nlc19fZm9yX2RhdGUucHVzaCggJ2NoZWNrX291dF90aW1lX2RhdGUyYXBwcm92ZScgKTtcclxuXHRcdFx0XHR9IGVsc2UgaWYgKCB3cGJjX2Jvb2tpbmdfc3RhdHVzZXNfX2hhc19wYXJ0KCBib29raW5nX3N0YXR1c2VzX2FyciwgJ2FwcHJvdmVkJyApICl7XHJcblx0XHRcdFx0XHRjc3NfY2xhc3Nlc19fZm9yX2RhdGUucHVzaCggJ2NoZWNrX291dF90aW1lX2RhdGVfYXBwcm92ZWQnICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGJyZWFrO1xyXG5cclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHQvLyBtaXhlZCBzdGF0dXNlczogJ2NoYW5nZV9vdmVyIGNoZWNrX291dCcgLi4uLiB2YXJpYXRpb25zLi4uLiBjaGVjayBtb3JlIGluIFx0XHRmdW5jdGlvbiB3cGJjX2dldF9hdmFpbGFiaWxpdHlfcGVyX2RheXNfYXJyKClcclxuXHRcdFx0XHRkYXRlX2Jvb2tpbmdzX29ialsgJ3N1bW1hcnknXVsnc3RhdHVzX2Zvcl9kYXknIF0gPSAnYXZhaWxhYmxlJztcclxuXHRcdH1cclxuXHJcblxyXG5cclxuXHRcdGlmICggJ2F2YWlsYWJsZScgIT0gZGF0ZV9ib29raW5nc19vYmpbICdzdW1tYXJ5J11bJ3N0YXR1c19mb3JfZGF5JyBdICl7XHJcblxyXG5cdFx0XHR2YXIgaXNfc2V0X3BlbmRpbmdfZGF5c19zZWxlY3RhYmxlID0gX3dwYmMuY2FsZW5kYXJfX2dldF9wYXJhbV92YWx1ZSggcmVzb3VyY2VfaWQsICdwZW5kaW5nX2RheXNfc2VsZWN0YWJsZScgKTtcdC8vIHNldCBwZW5kaW5nIGRheXMgc2VsZWN0YWJsZSAgICAgICAgICAvLyBGaXhJbjogOC42LjEuMTguXHJcblxyXG5cdFx0XHRpZiAoIHdwYmNfYm9va2luZ19zdGF0dXNlc19faGFzKCBib29raW5nX3N0YXR1c2VzX2FyciwgJ3BlbmRpbmcnICkgKXtcclxuXHRcdFx0XHRjc3NfY2xhc3Nlc19fZm9yX2RhdGUucHVzaCggJ2RhdGUyYXBwcm92ZScgKTtcclxuXHRcdFx0XHRpc19kYXlfc2VsZWN0YWJsZSA9IChpc19kYXlfc2VsZWN0YWJsZSkgPyB0cnVlIDogaXNfc2V0X3BlbmRpbmdfZGF5c19zZWxlY3RhYmxlO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICggd3BiY19ib29raW5nX3N0YXR1c2VzX19oYXMoIGJvb2tpbmdfc3RhdHVzZXNfYXJyLCAnYXBwcm92ZWQnICkgKXtcclxuXHRcdFx0XHRjc3NfY2xhc3Nlc19fZm9yX2RhdGUucHVzaCggJ2RhdGVfYXBwcm92ZWQnICk7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKCB3cGJjX2Jvb2tpbmdfc3RhdHVzZXNfX2hhcyggYm9va2luZ19zdGF0dXNlc19hcnIsICdwZW5kaW5nX3BlbmRpbmcnICkgKXtcclxuXHRcdFx0XHRjc3NfY2xhc3Nlc19fZm9yX2RhdGUucHVzaCggJ2NoZWNrX291dF90aW1lX2RhdGUyYXBwcm92ZScsICdjaGVja19pbl90aW1lX2RhdGUyYXBwcm92ZScgKTtcclxuXHRcdFx0XHRpc19kYXlfc2VsZWN0YWJsZSA9IChpc19kYXlfc2VsZWN0YWJsZSkgPyB0cnVlIDogaXNfc2V0X3BlbmRpbmdfZGF5c19zZWxlY3RhYmxlO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICggd3BiY19ib29raW5nX3N0YXR1c2VzX19oYXMoIGJvb2tpbmdfc3RhdHVzZXNfYXJyLCAncGVuZGluZ19hcHByb3ZlZCcgKSApe1xyXG5cdFx0XHRcdGNzc19jbGFzc2VzX19mb3JfZGF0ZS5wdXNoKCAnY2hlY2tfb3V0X3RpbWVfZGF0ZTJhcHByb3ZlJywgJ2NoZWNrX2luX3RpbWVfZGF0ZV9hcHByb3ZlZCcgKTtcclxuXHRcdFx0XHRpc19kYXlfc2VsZWN0YWJsZSA9IChpc19kYXlfc2VsZWN0YWJsZSkgPyB0cnVlIDogaXNfc2V0X3BlbmRpbmdfZGF5c19zZWxlY3RhYmxlO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICggd3BiY19ib29raW5nX3N0YXR1c2VzX19oYXMoIGJvb2tpbmdfc3RhdHVzZXNfYXJyLCAnYXBwcm92ZWRfcGVuZGluZycgKSApe1xyXG5cdFx0XHRcdGNzc19jbGFzc2VzX19mb3JfZGF0ZS5wdXNoKCAnY2hlY2tfb3V0X3RpbWVfZGF0ZV9hcHByb3ZlZCcsICdjaGVja19pbl90aW1lX2RhdGUyYXBwcm92ZScgKTtcclxuXHRcdFx0XHRpc19kYXlfc2VsZWN0YWJsZSA9IChpc19kYXlfc2VsZWN0YWJsZSkgPyB0cnVlIDogaXNfc2V0X3BlbmRpbmdfZGF5c19zZWxlY3RhYmxlO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICggd3BiY19ib29raW5nX3N0YXR1c2VzX19oYXMoIGJvb2tpbmdfc3RhdHVzZXNfYXJyLCAnYXBwcm92ZWRfYXBwcm92ZWQnICkgKXtcclxuXHRcdFx0XHRjc3NfY2xhc3Nlc19fZm9yX2RhdGUucHVzaCggJ2NoZWNrX291dF90aW1lX2RhdGVfYXBwcm92ZWQnLCAnY2hlY2tfaW5fdGltZV9kYXRlX2FwcHJvdmVkJyApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIFsgaXNfZGF5X3NlbGVjdGFibGUsIGNzc19jbGFzc2VzX19mb3JfZGF0ZS5qb2luKCAnICcgKSBdO1xyXG5cdH1cclxuXHJcblxyXG5cdC8qKlxyXG5cdCAqIE1vdXNlb3ZlciBjYWxlbmRhciBkYXRlIGNlbGxzXHJcblx0ICpcclxuXHQgKiBAcGFyYW0gc3RyaW5nX2RhdGVcclxuXHQgKiBAcGFyYW0gZGF0ZVx0XHRcdFx0XHRcdFx0XHRcdFx0LSAgSmF2YVNjcmlwdCBEYXRlIE9iajogIFx0XHRNb24gRGVjIDExIDIwMjMgMDA6MDA6MDBcclxuXHQgKiAgICAgR01UKzAyMDAgKEVhc3Rlcm4gRXVyb3BlYW4gU3RhbmRhcmQgVGltZSlcclxuXHQgKiBAcGFyYW0gY2FsZW5kYXJfcGFyYW1zX2Fyclx0XHRcdFx0XHRcdC0gIENhbGVuZGFyIFNldHRpbmdzIE9iamVjdDogIFx0e1xyXG5cdCAqXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgIFx0XHRcdFx0XHRcdFwicmVzb3VyY2VfaWRcIjogNFxyXG5cdCAqXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdCAqIEBwYXJhbSBkYXRlcGlja190aGlzXHRcdFx0XHRcdFx0XHRcdC0gdGhpcyBvZiBkYXRlcGljayBPYmpcclxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuXHQgKi9cclxuXHRmdW5jdGlvbiB3cGJjX19jYWxlbmRhcl9fb25faG92ZXJfZGF5cyggc3RyaW5nX2RhdGUsIGRhdGUsIGNhbGVuZGFyX3BhcmFtc19hcnIsIGRhdGVwaWNrX3RoaXMgKSB7XHJcblxyXG5cdFx0aWYgKCBudWxsID09PSBkYXRlICkge1xyXG5cdFx0XHR3cGJjX2NhbGVuZGFyc19fY2xlYXJfZGF5c19oaWdobGlnaHRpbmcoICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIChjYWxlbmRhcl9wYXJhbXNfYXJyWyAncmVzb3VyY2VfaWQnIF0pKSA/IGNhbGVuZGFyX3BhcmFtc19hcnJbICdyZXNvdXJjZV9pZCcgXSA6ICcxJyApO1x0XHQvLyBGaXhJbjogMTAuNS4yLjQuXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHR2YXIgY2xhc3NfZGF5ICAgICA9IHdwYmNfX2dldF9fdGRfY2xhc3NfZGF0ZSggZGF0ZSApO1x0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vICcxLTktMjAyMydcclxuXHRcdHZhciBzcWxfY2xhc3NfZGF5ID0gd3BiY19fZ2V0X19zcWxfY2xhc3NfZGF0ZSggZGF0ZSApO1x0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vICcyMDIzLTAxLTA5J1xyXG5cdFx0dmFyIHJlc291cmNlX2lkID0gKCAndW5kZWZpbmVkJyAhPT0gdHlwZW9mKGNhbGVuZGFyX3BhcmFtc19hcnJbICdyZXNvdXJjZV9pZCcgXSkgKSA/IGNhbGVuZGFyX3BhcmFtc19hcnJbICdyZXNvdXJjZV9pZCcgXSA6ICcxJztcdFx0Ly8gJzEnXHJcblxyXG5cdFx0Ly8gR2V0IERhdGEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHRcdHZhciBkYXRlX2Jvb2tpbmdfb2JqID0gX3dwYmMuYm9va2luZ3NfaW5fY2FsZW5kYXJfX2dldF9mb3JfZGF0ZSggcmVzb3VyY2VfaWQsIHNxbF9jbGFzc19kYXkgKTtcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gey4uLn1cclxuXHJcblx0XHRpZiAoICEgZGF0ZV9ib29raW5nX29iaiApeyByZXR1cm4gZmFsc2U7IH1cclxuXHJcblxyXG5cdFx0Ly8gVCBvIG8gbCB0IGkgcCBzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHRcdHZhciB0b29sdGlwX3RleHQgPSAnJztcclxuXHRcdGlmICggZGF0ZV9ib29raW5nX29ialsgJ3N1bW1hcnknXVsndG9vbHRpcF9hdmFpbGFiaWxpdHknIF0ubGVuZ3RoID4gMCApe1xyXG5cdFx0XHR0b29sdGlwX3RleHQgKz0gIGRhdGVfYm9va2luZ19vYmpbICdzdW1tYXJ5J11bJ3Rvb2x0aXBfYXZhaWxhYmlsaXR5JyBdO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCBkYXRlX2Jvb2tpbmdfb2JqWyAnc3VtbWFyeSddWyd0b29sdGlwX2RheV9jb3N0JyBdLmxlbmd0aCA+IDAgKXtcclxuXHRcdFx0dG9vbHRpcF90ZXh0ICs9ICBkYXRlX2Jvb2tpbmdfb2JqWyAnc3VtbWFyeSddWyd0b29sdGlwX2RheV9jb3N0JyBdO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCBkYXRlX2Jvb2tpbmdfb2JqWyAnc3VtbWFyeSddWyd0b29sdGlwX3RpbWVzJyBdLmxlbmd0aCA+IDAgKXtcclxuXHRcdFx0dG9vbHRpcF90ZXh0ICs9ICBkYXRlX2Jvb2tpbmdfb2JqWyAnc3VtbWFyeSddWyd0b29sdGlwX3RpbWVzJyBdO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCBkYXRlX2Jvb2tpbmdfb2JqWyAnc3VtbWFyeSddWyd0b29sdGlwX2Jvb2tpbmdfZGV0YWlscycgXS5sZW5ndGggPiAwICl7XHJcblx0XHRcdHRvb2x0aXBfdGV4dCArPSAgZGF0ZV9ib29raW5nX29ialsgJ3N1bW1hcnknXVsndG9vbHRpcF9ib29raW5nX2RldGFpbHMnIF07XHJcblx0XHR9XHJcblx0XHR3cGJjX3NldF90b29sdGlwX19fZm9yX19jYWxlbmRhcl9kYXRlKCB0b29sdGlwX3RleHQsIHJlc291cmNlX2lkLCBjbGFzc19kYXkgKTtcclxuXHJcblxyXG5cclxuXHRcdC8vICBVIG4gaCBvIHYgZSByIGkgbiBnICAgIGluICAgIFVOU0VMRUNUQUJMRV9DQUxFTkRBUiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0XHR2YXIgaXNfdW5zZWxlY3RhYmxlX2NhbGVuZGFyID0gKCBqUXVlcnkoICcjY2FsZW5kYXJfYm9va2luZ191bnNlbGVjdGFibGUnICsgcmVzb3VyY2VfaWQgKS5sZW5ndGggPiAwKTtcdFx0XHRcdC8vIEZpeEluOiA4LjAuMS4yLlxyXG5cdFx0dmFyIGlzX2Jvb2tpbmdfZm9ybV9leGlzdCAgICA9ICggalF1ZXJ5KCAnI2Jvb2tpbmdfZm9ybV9kaXYnICsgcmVzb3VyY2VfaWQgKS5sZW5ndGggPiAwICk7XHJcblx0XHR2YXIgaXNfYWRkX2Jvb2tpbmdfbW9kYWxfY2FsZW5kYXIgPSAoIGpRdWVyeSggJyNjYWxlbmRhcl9ib29raW5nJyArIHJlc291cmNlX2lkICkuY2xvc2VzdCggJyN3cGJjX21vZGFsX19hZGRfYm9va2luZ19fc2VjdGlvbicgKS5sZW5ndGggPiAwICk7XHJcblx0XHR2YXIgaXNfYWRtaW5fY2FsZW5kYXJfcHJldmlldyA9ICggalF1ZXJ5KCAnI2NhbGVuZGFyX2Jvb2tpbmcnICsgcmVzb3VyY2VfaWQgKS5jbG9zZXN0KCAnW2RhdGEtd3BiYy1hZG1pbi1jYWxlbmRhci1wcmV2aWV3PVwiMVwiXScgKS5sZW5ndGggPiAwICk7XHJcblxyXG5cdFx0aWYgKCAoIGlzX3Vuc2VsZWN0YWJsZV9jYWxlbmRhciApICYmICggISBpc19ib29raW5nX2Zvcm1fZXhpc3QgKSApe1xyXG5cclxuXHRcdFx0LyoqXHJcblx0XHRcdCAqICBVbiBIb3ZlciBhbGwgZGF0ZXMgaW4gY2FsZW5kYXIgKHdpdGhvdXQgdGhlIGJvb2tpbmcgZm9ybSksIGlmIG9ubHkgQXZhaWxhYmlsaXR5IENhbGVuZGFyIGhlcmUgYW5kIHdlIGRvXHJcblx0XHRcdCAqIG5vdCBpbnNlcnQgQm9va2luZyBmb3JtIGJ5IG1pc3Rha2UuXHJcblx0XHRcdCAqL1xyXG5cclxuXHRcdFx0d3BiY19jYWxlbmRhcnNfX2NsZWFyX2RheXNfaGlnaGxpZ2h0aW5nKCByZXNvdXJjZV9pZCApOyBcdFx0XHRcdFx0XHRcdC8vIENsZWFyIGRheXMgaGlnaGxpZ2h0aW5nXHJcblxyXG5cdFx0XHR2YXIgY3NzX29mX2NhbGVuZGFyID0gJy53cGJjX29ubHlfY2FsZW5kYXIgI2NhbGVuZGFyX2Jvb2tpbmcnICsgcmVzb3VyY2VfaWQ7XHJcblx0XHRcdGpRdWVyeSggY3NzX29mX2NhbGVuZGFyICsgJyAuZGF0ZXBpY2stZGF5cy1jZWxsLCAnXHJcblx0XHRcdFx0ICArIGNzc19vZl9jYWxlbmRhciArICcgLmRhdGVwaWNrLWRheXMtY2VsbCBhJyApLmNzcyggJ2N1cnNvcicsICdkZWZhdWx0JyApO1x0Ly8gU2V0IGN1cnNvciB0byBEZWZhdWx0XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblxyXG5cclxuXHRcdC8vICBEIGEgeSBzICAgIEggbyB2IGUgciBpIG4gZyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0XHRpZiAoXHJcblx0XHRcdCAgICggbG9jYXRpb24uaHJlZi5pbmRleE9mKCAncGFnZT13cGJjJyApID09IC0xIClcclxuXHRcdFx0fHwgKCAoIGxvY2F0aW9uLmhyZWYuaW5kZXhPZiggJ3BhZ2U9d3BiYycgKSA+IDAgKSAmJiAoIGxvY2F0aW9uLmhyZWYuaW5kZXhPZiggJ3RhYj1hZGQtYm9va2luZycgKSA+IDAgKSApXHJcblx0XHRcdHx8ICggaXNfYWRkX2Jvb2tpbmdfbW9kYWxfY2FsZW5kYXIgKVxyXG5cdFx0XHR8fCAoIGlzX2FkbWluX2NhbGVuZGFyX3ByZXZpZXcgKVxyXG5cdFx0XHR8fCAoIGxvY2F0aW9uLmhyZWYuaW5kZXhPZiggJ3BhZ2U9d3BiYy1zZXR1cCcgKSA+IDAgKVxyXG5cdFx0XHR8fCAoIGxvY2F0aW9uLmhyZWYuaW5kZXhPZiggJ3BhZ2U9d3BiYy1hdmFpbGFiaWxpdHknICkgPiAwIClcclxuXHRcdFx0fHwgKCAgKCBsb2NhdGlvbi5ocmVmLmluZGV4T2YoICdwYWdlPXdwYmMtc2V0dGluZ3MnICkgPiAwICkgICYmXHJcblx0XHRcdFx0ICAoIGxvY2F0aW9uLmhyZWYuaW5kZXhPZiggJ3RhYj1idWlsZGVyX2Jvb2tpbmdfZm9ybScgKSA+IDAgKVxyXG5cdFx0XHQgICApXHJcblx0XHQpe1xyXG5cdFx0XHQvLyBUaGUgc2FtZSBhcyBkYXRlcyBzZWxlY3Rpb24sICBidXQgZm9yIGRheXMgaG92ZXJpbmdcclxuXHJcblx0XHRcdGlmICggJ2Z1bmN0aW9uJyA9PSB0eXBlb2YoIHdwYmNfX2NhbGVuZGFyX19kb19kYXlzX2hpZ2hsaWdodF9fYnMgKSApe1xyXG5cdFx0XHRcdHdwYmNfX2NhbGVuZGFyX19kb19kYXlzX2hpZ2hsaWdodF9fYnMoIHNxbF9jbGFzc19kYXksIGRhdGUsIHJlc291cmNlX2lkICk7XHJcblx0XHRcdH0gZWxzZSBpZiAoICdkeW5hbWljJyA9PT0gX3dwYmMuY2FsZW5kYXJfX2dldF9wYXJhbV92YWx1ZSggcmVzb3VyY2VfaWQsICdkYXlzX3NlbGVjdF9tb2RlJyApICkge1xyXG5cdFx0XHRcdHdwYmNfX2NhbGVuZGFyX19kb19kYXlzX2hpZ2hsaWdodF9fdW5yZXN0cmljdGVkX3JhbmdlKCBzcWxfY2xhc3NfZGF5LCBkYXRlLCByZXNvdXJjZV9pZCApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdH1cclxuXHJcblxyXG5cdC8qKlxyXG5cdCAqIEhpZ2hsaWdodCBhbiB1bnJlc3RyaWN0ZWQgcHJvcG9zZWQgcmFuZ2UgYWZ0ZXIgdGhlIGZpcnN0IGNsaWNrIHdoZW4gQnVzaW5lc3MgU21hbGwgaXMgbm90IGxvYWRlZC5cclxuXHQgKlxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzcWxfY2xhc3NfZGF5IEhvdmVyZWQgZGF0ZSBpbiBTUUwgZm9ybWF0LlxyXG5cdCAqIEBwYXJhbSB7RGF0ZX0gZGF0ZSBIb3ZlcmVkIGRhdGUuXHJcblx0ICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSByZXNvdXJjZV9pZCBCb29raW5nIHJlc291cmNlIElELlxyXG5cdCAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIHdoZW4gdGhlIGNvbXBsZXRlIHByb3Bvc2VkIHJhbmdlIGlzIGF2YWlsYWJsZSBhbmQgaGlnaGxpZ2h0ZWQuXHJcblx0ICovXHJcblx0ZnVuY3Rpb24gd3BiY19fY2FsZW5kYXJfX2RvX2RheXNfaGlnaGxpZ2h0X191bnJlc3RyaWN0ZWRfcmFuZ2UoIHNxbF9jbGFzc19kYXksIGRhdGUsIHJlc291cmNlX2lkICl7XHJcblxyXG5cdFx0dmFyIGluc3QgPSB3cGJjX2NhbGVuZGFyX19nZXRfaW5zdCggcmVzb3VyY2VfaWQgKTtcclxuXHRcdHZhciByYW5nZV9zdGFydDtcclxuXHRcdHZhciByYW5nZV9lbmQ7XHJcblx0XHR2YXIgd29ya2luZ19kYXRlO1xyXG5cdFx0dmFyIHRkX292ZXJzID0gW107XHJcblxyXG5cdFx0d3BiY19jYWxlbmRhcnNfX2NsZWFyX2RheXNfaGlnaGxpZ2h0aW5nKCByZXNvdXJjZV9pZCApO1xyXG5cclxuXHRcdGlmIChcclxuXHRcdFx0ICAgbnVsbCA9PT0gaW5zdFxyXG5cdFx0XHR8fCAnZHluYW1pYycgIT09IF93cGJjLmNhbGVuZGFyX19nZXRfcGFyYW1fdmFsdWUoIHJlc291cmNlX2lkLCAnZGF5c19zZWxlY3RfbW9kZScgKVxyXG5cdFx0KSB7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBCZWZvcmUgYSByYW5nZSBzdGFydHMsIG9yIGFmdGVyIGl0IGlzIGNvbXBsZXRlLCBwcmV2aWV3IHRoZSBob3ZlcmVkIGRhdGUgYXMgdGhlIHBvc3NpYmxlIGZpcnN0IGRheS5cclxuXHRcdGlmICggMSAhPT0gaW5zdC5kYXRlcy5sZW5ndGggfHwgISBpbnN0LmRhdGVzWyAwIF0gKSB7XHJcblx0XHRcdGlmICggISB3cGJjX2lzX3RoaXNfZGF5X3NlbGVjdGFibGUoIHJlc291cmNlX2lkLCBzcWxfY2xhc3NfZGF5ICkgKSB7XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRqUXVlcnkoICcjY2FsZW5kYXJfYm9va2luZycgKyByZXNvdXJjZV9pZCArICcgLmNhbDRkYXRlLScgKyB3cGJjX19nZXRfX3RkX2NsYXNzX2RhdGUoIGRhdGUgKSApXHJcblx0XHRcdFx0LmFkZENsYXNzKCAnZGF0ZXBpY2stZGF5cy1jZWxsLW92ZXInICk7XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJhbmdlX3N0YXJ0ID0gbmV3IERhdGUoIGluc3QuZGF0ZXNbIDAgXS5nZXRGdWxsWWVhcigpLCBpbnN0LmRhdGVzWyAwIF0uZ2V0TW9udGgoKSwgaW5zdC5kYXRlc1sgMCBdLmdldERhdGUoKSwgMCwgMCwgMCApO1xyXG5cdFx0cmFuZ2VfZW5kICAgPSBuZXcgRGF0ZSggZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIGRhdGUuZ2V0RGF0ZSgpLCAwLCAwLCAwICk7XHJcblxyXG5cdFx0Ly8gRGF0ZXBpY2sgb25seSBwZXJtaXRzIGEgY2hlY2stb3V0IGRhdGUgb24vYWZ0ZXIgdGhlIGZpcnN0IGNsaWNrLiBEbyBub3QgcHJldmlldyBhIGJhY2t3YXJkIHJhbmdlLlxyXG5cdFx0aWYgKCByYW5nZV9lbmQuZ2V0VGltZSgpIDwgcmFuZ2Vfc3RhcnQuZ2V0VGltZSgpICkge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0d29ya2luZ19kYXRlID0gbmV3IERhdGUoIHJhbmdlX3N0YXJ0LmdldFRpbWUoKSApO1xyXG5cdFx0d2hpbGUgKCB3b3JraW5nX2RhdGUuZ2V0VGltZSgpIDw9IHJhbmdlX2VuZC5nZXRUaW1lKCkgKSB7XHJcblx0XHRcdHNxbF9jbGFzc19kYXkgPSB3cGJjX19nZXRfX3NxbF9jbGFzc19kYXRlKCB3b3JraW5nX2RhdGUgKTtcclxuXHRcdFx0aWYgKCAhIHdwYmNfaXNfdGhpc19kYXlfc2VsZWN0YWJsZSggcmVzb3VyY2VfaWQsIHNxbF9jbGFzc19kYXkgKSApIHtcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHRkX292ZXJzLnB1c2goICcjY2FsZW5kYXJfYm9va2luZycgKyByZXNvdXJjZV9pZCArICcgLmNhbDRkYXRlLScgKyB3cGJjX19nZXRfX3RkX2NsYXNzX2RhdGUoIHdvcmtpbmdfZGF0ZSApICk7XHJcblx0XHRcdHdvcmtpbmdfZGF0ZS5zZXREYXRlKCB3b3JraW5nX2RhdGUuZ2V0RGF0ZSgpICsgMSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICggdGRfb3ZlcnMubGVuZ3RoICkge1xyXG5cdFx0XHRqUXVlcnkoIHRkX292ZXJzLmpvaW4oICcsJyApICkuYWRkQ2xhc3MoICdkYXRlcGljay1kYXlzLWNlbGwtb3ZlcicgKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcblxyXG5cclxuXHQvKipcclxuXHQgKiBDb21wbGV0ZSBhbiB1bnJlc3RyaWN0ZWQgdHdvLWNsaWNrIHJhbmdlIHdoZW4gdGhlIEJ1c2luZXNzIFNtYWxsIHJhbmdlIGVuZ2luZSBpcyBub3QgbG9hZGVkLlxyXG5cdCAqIFRoZSBoaWRkZW4gYm9va2luZyBmaWVsZCBtdXN0IGNvbnRhaW4gZXZlcnkgZGF0ZSBiZWNhdXNlIEZyZWUgdGltZS9oaW50IGhhbmRsZXJzIGNvbnN1bWUgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdC5cclxuXHQgKlxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RlZF9kYXRlcyBEYXRlcGljaydzIGVuZHBvaW50IHN0cmluZy5cclxuXHQgKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IHJlc291cmNlX2lkIEJvb2tpbmcgcmVzb3VyY2UgSUQuXHJcblx0ICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgYWZ0ZXIgYSBjb21wbGV0ZSB2YWxpZCByYW5nZSwgZmFsc2Ugd2hpbGUgaW5jb21wbGV0ZSBvciBpbnZhbGlkLlxyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIHdwYmNfX2NhbGVuZGFyX19kb19kYXlzX3NlbGVjdF9fdW5yZXN0cmljdGVkX3JhbmdlKCBzZWxlY3RlZF9kYXRlcywgcmVzb3VyY2VfaWQgKXtcclxuXHJcblx0XHR2YXIgaW5zdCA9IHdwYmNfY2FsZW5kYXJfX2dldF9pbnN0KCByZXNvdXJjZV9pZCApO1xyXG5cdFx0dmFyIHJhbmdlX3N0YXJ0O1xyXG5cdFx0dmFyIHJhbmdlX2VuZDtcclxuXHRcdHZhciBjdXJyZW50X2RhdGU7XHJcblx0XHR2YXIgc2VsZWN0ZWRfcmFuZ2UgPSBbXTtcclxuXHJcblx0XHRpZiAoIG51bGwgPT09IGluc3QgKSB7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBEYXRlcGljayB3cml0ZXMgXCJzdGFydCAtIHN0YXJ0XCIgYWZ0ZXIgY2xpY2sgb25lLiBLZWVwIGl0cyBpbnRlcm5hbCBlbmRwb2ludCwgYnV0IGRvIG5vdCBleHBvc2UgYSBzdWJtaXR0YWJsZSByYW5nZSB5ZXQuXHJcblx0XHRpZiAoIHRydWUgPT09IGluc3Quc3RheU9wZW4gfHwgaW5zdC5kYXRlcy5sZW5ndGggPCAyIHx8ICEgaW5zdC5kYXRlc1sgMCBdIHx8ICEgaW5zdC5kYXRlc1sgMSBdICkge1xyXG5cdFx0XHRqUXVlcnkoICcjZGF0ZV9ib29raW5nJyArIHJlc291cmNlX2lkICkudmFsKCAnJyApO1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0cmFuZ2Vfc3RhcnQgPSBuZXcgRGF0ZSggaW5zdC5kYXRlc1sgMCBdLmdldEZ1bGxZZWFyKCksIGluc3QuZGF0ZXNbIDAgXS5nZXRNb250aCgpLCBpbnN0LmRhdGVzWyAwIF0uZ2V0RGF0ZSgpLCAwLCAwLCAwICk7XHJcblx0XHRyYW5nZV9lbmQgICA9IG5ldyBEYXRlKCBpbnN0LmRhdGVzWyAxIF0uZ2V0RnVsbFllYXIoKSwgaW5zdC5kYXRlc1sgMSBdLmdldE1vbnRoKCksIGluc3QuZGF0ZXNbIDEgXS5nZXREYXRlKCksIDAsIDAsIDAgKTtcclxuXHJcblx0XHQvLyBEZWZlbnNpdmUgbm9ybWFsaXphdGlvbi4gRGF0ZXBpY2sgbm9ybWFsbHkgcHJldmVudHMgYW4gZW5kIGRhdGUgYmVmb3JlIHRoZSBmaXJzdCBlbmRwb2ludC5cclxuXHRcdGlmICggcmFuZ2VfZW5kLmdldFRpbWUoKSA8IHJhbmdlX3N0YXJ0LmdldFRpbWUoKSApIHtcclxuXHRcdFx0Y3VycmVudF9kYXRlID0gcmFuZ2Vfc3RhcnQ7XHJcblx0XHRcdHJhbmdlX3N0YXJ0ID0gcmFuZ2VfZW5kO1xyXG5cdFx0XHRyYW5nZV9lbmQgPSBjdXJyZW50X2RhdGU7XHJcblx0XHR9XHJcblxyXG5cdFx0Y3VycmVudF9kYXRlID0gbmV3IERhdGUoIHJhbmdlX3N0YXJ0LmdldFRpbWUoKSApO1xyXG5cdFx0d2hpbGUgKCBjdXJyZW50X2RhdGUuZ2V0VGltZSgpIDw9IHJhbmdlX2VuZC5nZXRUaW1lKCkgKSB7XHJcblx0XHRcdGlmICggISB3cGJjX2lzX3RoaXNfZGF5X3NlbGVjdGFibGUoIHJlc291cmNlX2lkLCB3cGJjX19nZXRfX3NxbF9jbGFzc19kYXRlKCBjdXJyZW50X2RhdGUgKSApICkge1xyXG5cdFx0XHRcdHdwYmNfY2FsZW5kYXJfX3Vuc2VsZWN0X2FsbF9kYXRlcyggcmVzb3VyY2VfaWQgKTtcclxuXHRcdFx0XHRpZiAoICdmdW5jdGlvbicgPT09IHR5cGVvZiAoIHdwYmNfZnJvbnRfZW5kX19zaG93X21lc3NhZ2VfX3dhcm5pbmcgKSApIHtcclxuXHRcdFx0XHRcdHdwYmNfZnJvbnRfZW5kX19zaG93X21lc3NhZ2VfX3dhcm5pbmcoXHJcblx0XHRcdFx0XHRcdCcjYm9va2luZ19mb3JtX2RpdicgKyByZXNvdXJjZV9pZCArICcgLmJrX2NhbGVuZGFyX2ZyYW1lJyxcclxuXHRcdFx0XHRcdFx0X3dwYmMuZ2V0X21lc3NhZ2UoICdtZXNzYWdlX3JhbmdlX3NlbGVjdGlvbl9oYXNfdW5hdmFpbGFibGVfZGF0ZXMnICksXHJcblx0XHRcdFx0XHRcdCd0ZXh0J1xyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRzZWxlY3RlZF9yYW5nZS5wdXNoKCBqUXVlcnkuZGF0ZXBpY2suX2Zvcm1hdERhdGUoIGluc3QsIGN1cnJlbnRfZGF0ZSApICk7XHJcblx0XHRcdGN1cnJlbnRfZGF0ZS5zZXREYXRlKCBjdXJyZW50X2RhdGUuZ2V0RGF0ZSgpICsgMSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdGpRdWVyeSggJyNkYXRlX2Jvb2tpbmcnICsgcmVzb3VyY2VfaWQgKS52YWwoIHNlbGVjdGVkX3JhbmdlLmpvaW4oICcsICcgKSApO1xyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cclxuXHJcblx0LyoqXHJcblx0ICogUmVtb3ZlIHRoZSByYW5nZS1zZWxlY3Rpb24gZ3VpZGFuY2UgYmVsb25naW5nIHRvIG9uZSBjYWxlbmRhci5cclxuXHQgKlxyXG5cdCAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gcmVzb3VyY2VfaWQgQm9va2luZyByZXNvdXJjZSBJRC5cclxuXHQgKi9cclxuXHRmdW5jdGlvbiB3cGJjX3JhbmdlX3NlbGVjdGlvbl9faGlkZV9ndWlkYW5jZSggcmVzb3VyY2VfaWQgKXtcclxuXHRcdGpRdWVyeSggJyN3cGJjX3JhbmdlX3NlbGVjdGlvbl9ndWlkYW5jZScgKyByZXNvdXJjZV9pZCApLnJlbW92ZSgpO1xyXG5cdH1cclxuXHJcblxyXG5cdC8qKlxyXG5cdCAqIFNob3cgYSBwZXJzaXN0ZW50IGluZm9ybWF0aW9uYWwgbm90ZSBhZnRlciB0aGUgZmlyc3QgcmFuZ2UgY2xpY2suXHJcblx0ICogVGhlIGNhbGVuZGFyIHBhcmFtZXRlciBjYW4gYmUgc2V0IHRvIGZhbHNlIGJ5IFBIUCBvciBKYXZhU2NyaXB0IHRvIHN1cHByZXNzIHRoaXMgVUkgcGVyIHJlc291cmNlLlxyXG5cdCAqXHJcblx0ICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSByZXNvdXJjZV9pZCBCb29raW5nIHJlc291cmNlIElELlxyXG5cdCAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIHdoZW4gdGhlIG5vdGUgd2FzIGluc2VydGVkLlxyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIHdwYmNfcmFuZ2Vfc2VsZWN0aW9uX19zaG93X2d1aWRhbmNlKCByZXNvdXJjZV9pZCApe1xyXG5cclxuXHRcdHZhciBpc19lbmFibGVkID0gX3dwYmMuY2FsZW5kYXJfX2dldF9wYXJhbV92YWx1ZSggcmVzb3VyY2VfaWQsICdyYW5nZV9zZWxlY3Rpb25fZ3VpZGFuY2VfaXNfZW5hYmxlZCcgKTtcclxuXHRcdHZhciAkYm9va2luZ19mb3JtID0galF1ZXJ5KCAnI2Jvb2tpbmdfZm9ybV9kaXYnICsgcmVzb3VyY2VfaWQgKTtcclxuXHRcdHZhciAkY2FsZW5kYXJfZnJhbWU7XHJcblx0XHR2YXIgJG5vdGU7XHJcblxyXG5cdFx0d3BiY19yYW5nZV9zZWxlY3Rpb25fX2hpZGVfZ3VpZGFuY2UoIHJlc291cmNlX2lkICk7XHJcblxyXG5cdFx0aWYgKFxyXG5cdFx0XHQgICBmYWxzZSA9PT0gaXNfZW5hYmxlZFxyXG5cdFx0XHR8fCAwID09PSBpc19lbmFibGVkXHJcblx0XHRcdHx8ICcwJyA9PT0gaXNfZW5hYmxlZFxyXG5cdFx0XHR8fCAnb2ZmJyA9PT0gU3RyaW5nKCBpc19lbmFibGVkICkudG9Mb3dlckNhc2UoKVxyXG5cdFx0XHR8fCAnZmFsc2UnID09PSBTdHJpbmcoIGlzX2VuYWJsZWQgKS50b0xvd2VyQ2FzZSgpXHJcblx0XHRcdHx8ICdkeW5hbWljJyAhPT0gX3dwYmMuY2FsZW5kYXJfX2dldF9wYXJhbV92YWx1ZSggcmVzb3VyY2VfaWQsICdkYXlzX3NlbGVjdF9tb2RlJyApXHJcblx0XHRcdHx8IDAgPT09ICRib29raW5nX2Zvcm0ubGVuZ3RoXHJcblx0XHQpIHtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdCRjYWxlbmRhcl9mcmFtZSA9ICRib29raW5nX2Zvcm0uZmluZCggJy5ibG9ja19oaW50cy5kYXRlcGljaycgKS5maXJzdCgpO1xyXG5cdFx0aWYgKCAwID09PSAkY2FsZW5kYXJfZnJhbWUubGVuZ3RoICkge1xyXG5cdFx0XHQkY2FsZW5kYXJfZnJhbWUgPSAkYm9va2luZ19mb3JtLmZpbmQoICcud3BiY19jYWxfcG93ZXJlZF9ieScgKS5maXJzdCgpO1xyXG5cdFx0XHRpZiAoIDAgPT09ICRjYWxlbmRhcl9mcmFtZS5sZW5ndGggKSB7XHJcblx0XHRcdFx0JGNhbGVuZGFyX2ZyYW1lID0gJGJvb2tpbmdfZm9ybS5maW5kKCAnLmJrX2NhbGVuZGFyX2ZyYW1lJyApLmZpcnN0KCk7XHJcblx0XHRcdFx0aWYgKCAwID09PSAkY2FsZW5kYXJfZnJhbWUubGVuZ3RoICkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdCRub3RlID0galF1ZXJ5KCAnPGRpdj4nLCB7XHJcblx0XHRcdCdpZCc6ICd3cGJjX3JhbmdlX3NlbGVjdGlvbl9ndWlkYW5jZScgKyByZXNvdXJjZV9pZCxcclxuXHRcdFx0J2NsYXNzJzogJ3dwYmNfcmFuZ2Vfc2VsZWN0aW9uX2d1aWRhbmNlIHdwYmNfZnJvbnRfZW5kX19tZXNzYWdlIHdwYmNfZmVfbWVzc2FnZV9pbmZvJyxcclxuXHRcdFx0J3JvbGUnOiAnc3RhdHVzJyxcclxuXHRcdFx0J2FyaWEtbGl2ZSc6ICdwb2xpdGUnXHJcblx0XHR9ICk7XHJcblx0XHQkbm90ZS5hcHBlbmQoIGpRdWVyeSggJzxpPicsIHtcclxuXHRcdFx0J2NsYXNzJzogJ21lbnVfaWNvbiBpY29uLTF4IHdwYmNfaWNuX2luZm9fb3V0bGluZScsXHJcblx0XHRcdCdhcmlhLWhpZGRlbic6ICd0cnVlJ1xyXG5cdFx0fSApICk7XHJcblx0XHQkbm90ZS5hcHBlbmQoIGpRdWVyeSggJzxzcGFuPicgKS50ZXh0KCBfd3BiYy5nZXRfbWVzc2FnZSggJ21lc3NhZ2VfcmFuZ2Vfc2VsZWN0aW9uX2NsaWNrX2xhc3RfZGF0ZScgKSApICk7XHJcblx0XHQkY2FsZW5kYXJfZnJhbWUuYWZ0ZXIoICRub3RlICk7XHJcblxyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cclxuXHJcblx0LyoqXHJcblx0ICogU3luY2hyb25pemUgdGhlIGd1aWRhbmNlIHdpdGggRGF0ZXBpY2sncyB0d28tY2xpY2sgcmFuZ2Ugc3RhdGUuXHJcblx0ICpcclxuXHQgKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IHJlc291cmNlX2lkIEJvb2tpbmcgcmVzb3VyY2UgSUQuXHJcblx0ICovXHJcblx0ZnVuY3Rpb24gd3BiY19yYW5nZV9zZWxlY3Rpb25fX3N5bmNfZ3VpZGFuY2UoIHJlc291cmNlX2lkICl7XHJcblxyXG5cdFx0dmFyIGluc3QgPSB3cGJjX2NhbGVuZGFyX19nZXRfaW5zdCggcmVzb3VyY2VfaWQgKTtcclxuXHJcblx0XHRpZiAoXHJcblx0XHRcdCAgIG51bGwgIT09IGluc3RcclxuXHRcdFx0JiYgJ2R5bmFtaWMnID09PSBfd3BiYy5jYWxlbmRhcl9fZ2V0X3BhcmFtX3ZhbHVlKCByZXNvdXJjZV9pZCwgJ2RheXNfc2VsZWN0X21vZGUnIClcclxuXHRcdFx0JiYgdHJ1ZSA9PT0gaW5zdC5zdGF5T3BlblxyXG5cdFx0XHQmJiAxID09PSBpbnN0LmRhdGVzLmxlbmd0aFxyXG5cdFx0XHQmJiBpbnN0LmRhdGVzWyAwIF1cclxuXHRcdCkge1xyXG5cdFx0XHR3cGJjX3JhbmdlX3NlbGVjdGlvbl9fc2hvd19ndWlkYW5jZSggcmVzb3VyY2VfaWQgKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdHdwYmNfcmFuZ2Vfc2VsZWN0aW9uX19oaWRlX2d1aWRhbmNlKCByZXNvdXJjZV9pZCApO1xyXG5cdH1cclxuXHJcblxyXG5cdC8qKlxyXG5cdCAqIFNlbGVjdCBjYWxlbmRhciBkYXRlIGNlbGxzXHJcblx0ICpcclxuXHQgKiBAcGFyYW0gZGF0ZVx0XHRcdFx0XHRcdFx0XHRcdFx0LSAgSmF2YVNjcmlwdCBEYXRlIE9iajogIFx0XHRNb24gRGVjIDExIDIwMjMgMDA6MDA6MDBcclxuXHQgKiAgICAgR01UKzAyMDAgKEVhc3Rlcm4gRXVyb3BlYW4gU3RhbmRhcmQgVGltZSlcclxuXHQgKiBAcGFyYW0gY2FsZW5kYXJfcGFyYW1zX2Fyclx0XHRcdFx0XHRcdC0gIENhbGVuZGFyIFNldHRpbmdzIE9iamVjdDogIFx0e1xyXG5cdCAqXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgIFx0XHRcdFx0XHRcdFwicmVzb3VyY2VfaWRcIjogNFxyXG5cdCAqXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdCAqIEBwYXJhbSBkYXRlcGlja190aGlzXHRcdFx0XHRcdFx0XHRcdC0gdGhpcyBvZiBkYXRlcGljayBPYmpcclxuXHQgKlxyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIHdwYmNfX2NhbGVuZGFyX19vbl9zZWxlY3RfZGF5cyggZGF0ZSwgY2FsZW5kYXJfcGFyYW1zX2FyciwgZGF0ZXBpY2tfdGhpcyApe1xyXG5cclxuXHRcdHZhciByZXNvdXJjZV9pZCA9ICggJ3VuZGVmaW5lZCcgIT09IHR5cGVvZihjYWxlbmRhcl9wYXJhbXNfYXJyWyAncmVzb3VyY2VfaWQnIF0pICkgPyBjYWxlbmRhcl9wYXJhbXNfYXJyWyAncmVzb3VyY2VfaWQnIF0gOiAnMSc7XHRcdC8vICcxJ1xyXG5cclxuXHRcdC8vIFNldCB1bnNlbGVjdGFibGUsICBpZiBvbmx5IEF2YWlsYWJpbGl0eSBDYWxlbmRhciAgaGVyZSAoYW5kIHdlIGRvIG5vdCBpbnNlcnQgQm9va2luZyBmb3JtIGJ5IG1pc3Rha2UpLlxyXG5cdFx0dmFyIGlzX3Vuc2VsZWN0YWJsZV9jYWxlbmRhciA9ICggalF1ZXJ5KCAnI2NhbGVuZGFyX2Jvb2tpbmdfdW5zZWxlY3RhYmxlJyArIHJlc291cmNlX2lkICkubGVuZ3RoID4gMCk7XHRcdFx0XHQvLyBGaXhJbjogOC4wLjEuMi5cclxuXHRcdHZhciBpc19ib29raW5nX2Zvcm1fZXhpc3QgICAgPSAoIGpRdWVyeSggJyNib29raW5nX2Zvcm1fZGl2JyArIHJlc291cmNlX2lkICkubGVuZ3RoID4gMCApO1xyXG5cdFx0aWYgKCAoIGlzX3Vuc2VsZWN0YWJsZV9jYWxlbmRhciApICYmICggISBpc19ib29raW5nX2Zvcm1fZXhpc3QgKSApe1xyXG5cdFx0XHR3cGJjX2NhbGVuZGFyX191bnNlbGVjdF9hbGxfZGF0ZXMoIHJlc291cmNlX2lkICk7XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBVbnNlbGVjdCBEYXRlc1xyXG5cdFx0XHRqUXVlcnkoJy53cGJjX29ubHlfY2FsZW5kYXIgLnBvcG92ZXJfY2FsZW5kYXJfaG92ZXInKS5yZW1vdmUoKTsgICAgICAgICAgICAgICAgICAgICAgXHRcdFx0XHRcdFx0XHQvLyBIaWRlIGFsbCBvcGVuZWQgcG9wb3ZlcnNcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGpRdWVyeSggJyNkYXRlX2Jvb2tpbmcnICsgcmVzb3VyY2VfaWQgKS52YWwoIGRhdGUgKTtcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIEFkZCBzZWxlY3RlZCBkYXRlcyB0byAgaGlkZGVuIHRleHRhcmVhXHJcblxyXG5cclxuXHRcdGlmICggJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mICh3cGJjX19jYWxlbmRhcl9fZG9fZGF5c19zZWxlY3RfX2JzKSApIHtcclxuXHRcdFx0d3BiY19fY2FsZW5kYXJfX2RvX2RheXNfc2VsZWN0X19icyggZGF0ZSwgcmVzb3VyY2VfaWQgKTtcclxuXHRcdH0gZWxzZSBpZiAoICdkeW5hbWljJyA9PT0gX3dwYmMuY2FsZW5kYXJfX2dldF9wYXJhbV92YWx1ZSggcmVzb3VyY2VfaWQsICdkYXlzX3NlbGVjdF9tb2RlJyApICkge1xyXG5cdFx0XHR3cGJjX19jYWxlbmRhcl9fZG9fZGF5c19zZWxlY3RfX3VucmVzdHJpY3RlZF9yYW5nZSggZGF0ZSwgcmVzb3VyY2VfaWQgKTtcclxuXHRcdH1cclxuXHJcblx0XHR3cGJjX3JhbmdlX3NlbGVjdGlvbl9fc3luY19ndWlkYW5jZSggcmVzb3VyY2VfaWQgKTtcclxuXHJcblx0XHR3cGJjX2Rpc2FibGVfdGltZV9maWVsZHNfaW5fYm9va2luZ19mb3JtKCByZXNvdXJjZV9pZCApO1xyXG5cclxuXHRcdC8vIEhvb2sgLS0gdHJpZ2dlciBkYXkgc2VsZWN0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0XHR2YXIgbW91c2VfY2xpY2tlZF9kYXRlcyA9IGRhdGU7XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBDYW4gYmU6IFwiMDUuMTAuMjAyMyAtIDA3LjEwLjIwMjNcIiAgfCAgXCIxMC4xMC4yMDIzIC0gMTAuMTAuMjAyM1wiICB8XHJcblx0XHR2YXIgYWxsX3NlbGVjdGVkX2RhdGVzX2FyciA9IHdwYmNfZ2V0X19zZWxlY3RlZF9kYXRlc19zcWxfX2FzX2FyciggcmVzb3VyY2VfaWQgKTtcdFx0XHRcdFx0XHRcdFx0XHQvLyBDYW4gYmU6IFsgXCIyMDIzLTEwLTA1XCIsIFwiMjAyMy0xMC0wNlwiLCBcIjIwMjMtMTAtMDdcIiwg4oCmIF1cclxuXHRcdGpRdWVyeSggXCIuYm9va2luZ19mb3JtX2RpdlwiICkudHJpZ2dlciggXCJkYXRlX3NlbGVjdGVkXCIsIFsgcmVzb3VyY2VfaWQsIG1vdXNlX2NsaWNrZWRfZGF0ZXMsIGFsbF9zZWxlY3RlZF9kYXRlc19hcnIgXSApO1xyXG5cdH1cclxuXHJcblx0Ly8gTWFyayBtaWRkbGUgc2VsZWN0ZWQgZGF0ZXMgd2l0aCAwLjUgb3BhY2l0eVx0XHQvLyBGaXhJbjogMTAuMy4wLjkuXHJcblx0alF1ZXJ5KCBkb2N1bWVudCApLnJlYWR5KCBmdW5jdGlvbiAoKXtcclxuXHRcdGpRdWVyeSggXCIuYm9va2luZ19mb3JtX2RpdlwiICkub24oICdkYXRlX3NlbGVjdGVkJywgZnVuY3Rpb24gKCBldmVudCwgcmVzb3VyY2VfaWQsIGRhdGUgKXtcclxuXHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHQgICAoICAnZml4ZWQnID09PSBfd3BiYy5jYWxlbmRhcl9fZ2V0X3BhcmFtX3ZhbHVlKCByZXNvdXJjZV9pZCwgJ2RheXNfc2VsZWN0X21vZGUnICkpXHJcblx0XHRcdFx0XHR8fCAoJ2R5bmFtaWMnID09PSBfd3BiYy5jYWxlbmRhcl9fZ2V0X3BhcmFtX3ZhbHVlKCByZXNvdXJjZV9pZCwgJ2RheXNfc2VsZWN0X21vZGUnICkpXHJcblx0XHRcdFx0KXtcclxuXHRcdFx0XHRcdHZhciBjbG9zZWRfdGltZXIgPSBzZXRUaW1lb3V0KCBmdW5jdGlvbiAoKXtcclxuXHRcdFx0XHRcdFx0dmFyIG1pZGRsZV9kYXlzX29wYWNpdHkgPSBfd3BiYy5nZXRfb3RoZXJfcGFyYW0oICdjYWxlbmRhcnNfX2RheXNfc2VsZWN0aW9uX19taWRkbGVfZGF5c19vcGFjaXR5JyApO1xyXG5cdFx0XHRcdFx0XHRqUXVlcnkoICcjY2FsZW5kYXJfYm9va2luZycgKyByZXNvdXJjZV9pZCArICcgLmRhdGVwaWNrLWN1cnJlbnQtZGF5JyApLm5vdCggXCIuc2VsZWN0ZWRfY2hlY2tfaW5fb3V0XCIgKS5jc3MoICdvcGFjaXR5JywgbWlkZGxlX2RheXNfb3BhY2l0eSApO1xyXG5cdFx0XHRcdFx0fSwgMTAgKTtcclxuXHRcdFx0XHR9XHJcblx0XHR9ICk7XHJcblx0fSApO1xyXG5cclxuXHJcblx0LyoqXHJcblx0ICogLS0gIFQgaSBtIGUgICAgRiBpIGUgbCBkIHMgICAgIHN0YXJ0ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdCAqL1xyXG5cclxuXHQvKipcclxuXHQgKiBEaXNhYmxlIHRpbWUgc2xvdHMgaW4gYm9va2luZyBmb3JtIGRlcGVuZCBvbiBzZWxlY3RlZCBkYXRlcyBhbmQgYm9va2VkIGRhdGVzL3RpbWVzXHJcblx0ICpcclxuXHQgKiBAcGFyYW0gcmVzb3VyY2VfaWRcclxuXHQgKi9cclxuXHRmdW5jdGlvbiB3cGJjX2Rpc2FibGVfdGltZV9maWVsZHNfaW5fYm9va2luZ19mb3JtKCByZXNvdXJjZV9pZCApe1xyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogXHQxLiBHZXQgYWxsIHRpbWUgZmllbGRzIGluIHRoZSBib29raW5nIGZvcm0gYXMgYXJyYXkgIG9mIG9iamVjdHNcclxuXHRcdCAqIFx0XHRcdFx0XHRbXHJcblx0XHQgKiBcdFx0XHRcdFx0IFx0ICAge1x0anF1ZXJ5X29wdGlvbjogICAgICBqUXVlcnlfT2JqZWN0IHt9XHJcblx0XHQgKiBcdFx0XHRcdFx0XHRcdFx0bmFtZTogICAgICAgICAgICAgICAncmFuZ2V0aW1lMltdJ1xyXG5cdFx0ICogXHRcdFx0XHRcdFx0XHRcdHRpbWVzX2FzX3NlY29uZHM6ICAgWyAyMTYwMCwgMjM0MDAgXVxyXG5cdFx0ICogXHRcdFx0XHRcdFx0XHRcdHZhbHVlX29wdGlvbl8yNGg6ICAgJzA2OjAwIC0gMDY6MzAnXHJcblx0XHQgKiBcdFx0XHRcdFx0ICAgICB9XHJcblx0XHQgKiBcdFx0XHRcdFx0ICAuLi5cclxuXHRcdCAqIFx0XHRcdFx0XHRcdCAgIHtcdGpxdWVyeV9vcHRpb246ICAgICAgalF1ZXJ5X09iamVjdCB7fVxyXG5cdFx0ICogXHRcdFx0XHRcdFx0XHRcdG5hbWU6ICAgICAgICAgICAgICAgJ3N0YXJ0dGltZTJbXSdcclxuXHRcdCAqIFx0XHRcdFx0XHRcdFx0XHR0aW1lc19hc19zZWNvbmRzOiAgIFsgMjE2MDAgXVxyXG5cdFx0ICogXHRcdFx0XHRcdFx0XHRcdHZhbHVlX29wdGlvbl8yNGg6ICAgJzA2OjAwJ1xyXG5cdFx0ICogIFx0XHRcdFx0XHQgICAgfVxyXG5cdFx0ICogXHRcdFx0XHRcdCBdXHJcblx0XHQgKi9cclxuXHRcdHZhciB0aW1lX2ZpZWxkc19vYmpfYXJyID0gd3BiY19nZXRfX3RpbWVfZmllbGRzX19pbl9ib29raW5nX2Zvcm1fX2FzX2FyciggcmVzb3VyY2VfaWQgKTtcclxuXHJcblx0XHQvLyAyLiBHZXQgYWxsIHNlbGVjdGVkIGRhdGVzIGluICBTUUwgZm9ybWF0ICBsaWtlIHRoaXMgWyBcIjIwMjMtMDgtMjNcIiwgXCIyMDIzLTA4LTI0XCIsIFwiMjAyMy0wOC0yNVwiLCAuLi4gXVxyXG5cdFx0dmFyIHNlbGVjdGVkX2RhdGVzX2FyciA9IHdwYmNfZ2V0X19zZWxlY3RlZF9kYXRlc19zcWxfX2FzX2FyciggcmVzb3VyY2VfaWQgKTtcclxuXHJcblx0XHQvLyAzLiBHZXQgY2hpbGQgYm9va2luZyByZXNvdXJjZXMgIG9yIHNpbmdsZSBib29raW5nIHJlc291cmNlICB0aGF0ICBleGlzdCAgaW4gZGF0ZXNcclxuXHRcdHZhciBjaGlsZF9yZXNvdXJjZXNfYXJyID0gd3BiY19jbG9uZV9vYmooIF93cGJjLmJvb2tpbmdfX2dldF9wYXJhbV92YWx1ZSggcmVzb3VyY2VfaWQsICdyZXNvdXJjZXNfaWRfYXJyX19pbl9kYXRlcycgKSApO1xyXG5cclxuXHRcdHZhciBzcWxfZGF0ZTtcclxuXHRcdHZhciBjaGlsZF9yZXNvdXJjZV9pZDtcclxuXHRcdHZhciBtZXJnZWRfc2Vjb25kcztcclxuXHRcdHZhciB0aW1lX2ZpZWxkc19vYmo7XHJcblx0XHR2YXIgaXNfaW50ZXJzZWN0O1xyXG5cdFx0dmFyIGlzX2NoZWNrX2luO1xyXG5cclxuXHRcdHZhciB0b2RheV90aW1lX19yZWFsICA9IG5ldyBEYXRlKCBfd3BiYy5nZXRfb3RoZXJfcGFyYW0oICd0aW1lX2xvY2FsX2FycicgKVswXSwgKCBwYXJzZUludCggX3dwYmMuZ2V0X290aGVyX3BhcmFtKCAndGltZV9sb2NhbF9hcnInIClbMV0gKSAtIDEpLCBfd3BiYy5nZXRfb3RoZXJfcGFyYW0oICd0aW1lX2xvY2FsX2FycicgKVsyXSwgX3dwYmMuZ2V0X290aGVyX3BhcmFtKCAndGltZV9sb2NhbF9hcnInIClbM10sIF93cGJjLmdldF9vdGhlcl9wYXJhbSggJ3RpbWVfbG9jYWxfYXJyJyApWzRdLCAwICk7XHJcblx0XHR2YXIgdG9kYXlfdGltZV9fc2hpZnQgPSBuZXcgRGF0ZSggX3dwYmMuZ2V0X290aGVyX3BhcmFtKCAndG9kYXlfYXJyJyAgICAgIClbMF0sICggcGFyc2VJbnQoIF93cGJjLmdldF9vdGhlcl9wYXJhbSggICAgICAndG9kYXlfYXJyJyApWzFdICkgLSAxKSwgX3dwYmMuZ2V0X290aGVyX3BhcmFtKCAndG9kYXlfYXJyJyAgICAgIClbMl0sIF93cGJjLmdldF9vdGhlcl9wYXJhbSggJ3RvZGF5X2FycicgICAgICApWzNdLCBfd3BiYy5nZXRfb3RoZXJfcGFyYW0oICd0b2RheV9hcnInICAgICAgKVs0XSwgMCApO1xyXG5cdFx0dmFyIGFsbG93X3Bhc3RfY29udGV4dCA9IF93cGJjLmdldF9vdGhlcl9wYXJhbSggJ3RoaXNfcGFnZV9hbGxvd19wYXN0JyApO1xyXG5cdFx0dmFyIGVkaXRfYm9va2luZ19oYXNoX2NvbnRleHQgPSBfd3BiYy5nZXRfb3RoZXJfcGFyYW0oICd0aGlzX3BhZ2VfYm9va2luZ19oYXNoJyApO1xyXG5cdFx0dmFyIGlzX2FsbG93X3Bhc3RfY29udGV4dCA9XHJcblx0XHRcdCAgICggJzEnID09PSBTdHJpbmcoIGFsbG93X3Bhc3RfY29udGV4dCApIClcclxuXHRcdFx0fHwgKCAxID09PSBhbGxvd19wYXN0X2NvbnRleHQgKVxyXG5cdFx0XHR8fCAoIHRydWUgPT09IGFsbG93X3Bhc3RfY29udGV4dCApXHJcblx0XHRcdHx8ICggJycgIT09IFN0cmluZyggZWRpdF9ib29raW5nX2hhc2hfY29udGV4dCB8fCAnJyApIClcclxuXHRcdFx0fHwgKCBsb2NhdGlvbi5ocmVmLmluZGV4T2YoICdib29raW5nX2hhc2gnICkgPiAtMSApXHJcblx0XHRcdHx8ICggbG9jYXRpb24uaHJlZi5pbmRleE9mKCAnYWxsb3dfcGFzdCcgKSA+IC0xICk7XHJcblxyXG5cdFx0Ly8gNC4gTG9vcCAgYWxsICB0aW1lIEZpZWxkcyBvcHRpb25zXHRcdC8vIEZpeEluOiAxMC4zLjAuMi5cclxuXHRcdGZvciAoIGxldCBmaWVsZF9rZXkgPSAwOyBmaWVsZF9rZXkgPCB0aW1lX2ZpZWxkc19vYmpfYXJyLmxlbmd0aDsgZmllbGRfa2V5KysgKXtcclxuXHJcblx0XHRcdHRpbWVfZmllbGRzX29ial9hcnJbIGZpZWxkX2tleSBdLmRpc2FibGVkID0gMDsgICAgICAgICAgLy8gQnkgZGVmYXVsdCwgdGhpcyB0aW1lIGZpZWxkIGlzIG5vdCBkaXNhYmxlZC5cclxuXHJcblx0XHRcdHRpbWVfZmllbGRzX29iaiA9IHRpbWVfZmllbGRzX29ial9hcnJbIGZpZWxkX2tleSBdO1x0XHQvLyB7IHRpbWVzX2FzX3NlY29uZHM6IFsgMjE2MDAsIDIzNDAwIF0sIHZhbHVlX29wdGlvbl8yNGg6ICcwNjowMCAtIDA2OjMwJywgbmFtZTogJ3JhbmdldGltZTJbXScsIGpxdWVyeV9vcHRpb246IGpRdWVyeV9PYmplY3Qge319XHJcblxyXG5cdFx0XHQvLyBMb29wICBhbGwgIHNlbGVjdGVkIGRhdGVzLlxyXG5cdFx0XHRmb3IgKCB2YXIgaSA9IDA7IGkgPCBzZWxlY3RlZF9kYXRlc19hcnIubGVuZ3RoOyBpKysgKSB7XHJcblxyXG5cdFx0XHRcdC8vIEdldCBEYXRlOiAnMjAyMy0wOC0xOCcuXHJcblx0XHRcdFx0c3FsX2RhdGUgPSBzZWxlY3RlZF9kYXRlc19hcnJbaV07XHJcblxyXG5cdFx0XHRcdHZhciBpc190aW1lX2luX3Bhc3QgPSBpc19hbGxvd19wYXN0X2NvbnRleHQgPyBmYWxzZSA6IHdwYmNfY2hlY2tfaXNfdGltZV9pbl9wYXN0KCB0b2RheV90aW1lX19zaGlmdCwgc3FsX2RhdGUsIHRpbWVfZmllbGRzX29iaiApO1xyXG5cdFx0XHRcdC8vIEV4Y2VwdGlvbiAgZm9yICdFbmQgVGltZScgZmllbGQsICB3aGVuICBzZWxlY3RlZCBzZXZlcmFsIGRhdGVzLiAvLyBGaXhJbjogMTAuMTQuMS41LlxyXG5cdFx0XHRcdGlmICggKCAhIGlzX2FsbG93X3Bhc3RfY29udGV4dCApICYmXHJcblx0XHRcdFx0XHQoJ09uJyAhPT0gX3dwYmMuY2FsZW5kYXJfX2dldF9wYXJhbV92YWx1ZSggcmVzb3VyY2VfaWQsICdib29raW5nX3JlY3VycmVudF90aW1lJyApKSAmJlxyXG5cdFx0XHRcdFx0KC0xICE9PSB0aW1lX2ZpZWxkc19vYmoubmFtZS5pbmRleE9mKCAnZW5kdGltZScgKSkgJiZcclxuXHRcdFx0XHRcdChzZWxlY3RlZF9kYXRlc19hcnIubGVuZ3RoID4gMSlcclxuXHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdGlzX3RpbWVfaW5fcGFzdCA9IHdwYmNfY2hlY2tfaXNfdGltZV9pbl9wYXN0KCB0b2RheV90aW1lX19zaGlmdCwgc2VsZWN0ZWRfZGF0ZXNfYXJyWyhzZWxlY3RlZF9kYXRlc19hcnIubGVuZ3RoIC0gMSldLCB0aW1lX2ZpZWxkc19vYmogKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKCBpc190aW1lX2luX3Bhc3QgKSB7XHJcblx0XHRcdFx0XHQvLyBUaGlzIHRpbWUgZm9yIHNlbGVjdGVkIGRhdGUgYWxyZWFkeSAgaW4gdGhlIHBhc3QuXHJcblx0XHRcdFx0XHR0aW1lX2ZpZWxkc19vYmpfYXJyW2ZpZWxkX2tleV0uZGlzYWJsZWQgPSAxO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGV4aXN0ICBmcm9tICAgRGF0ZXMgTE9PUC5cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Ly8gRml4SW46IDkuOS4wLjMxLlxyXG5cdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdCAgICggJ09mZicgPT09IF93cGJjLmNhbGVuZGFyX19nZXRfcGFyYW1fdmFsdWUoIHJlc291cmNlX2lkLCAnYm9va2luZ19yZWN1cnJlbnRfdGltZScgKSApXHJcblx0XHRcdFx0XHQmJiAoIHNlbGVjdGVkX2RhdGVzX2Fyci5sZW5ndGg+MSApXHJcblx0XHRcdFx0KXtcclxuXHRcdFx0XHRcdC8vVE9ETzogc2tpcCBzb21lIGZpZWxkcyBjaGVja2luZyBpZiBpdCdzIHN0YXJ0IC8gZW5kIHRpbWUgZm9yIG11bHBsZSBkYXRlcyAgc2VsZWN0aW9uICBtb2RlLlxyXG5cdFx0XHRcdFx0Ly9UT0RPOiB3ZSBuZWVkIHRvIGZpeCBzaXR1YXRpb24gIGZvciBlbnRpbWVzLCAgd2hlbiAgdXNlciAgc2VsZWN0ICBzZXZlcmFsICBkYXRlcywgIGFuZCBpbiBzdGFydCAgdGltZSBib29rZWQgMDA6MDAgLSAxNTowMCAsIGJ1dCBzeXN0c21lIGJsb2NrIHVudGlsbCAxNTowMCB0aGUgZW5kIHRpbWUgYXMgd2VsbCwgIHdoaWNoICBpcyB3cm9uZywgIGJlY2F1c2UgaXQgMiBvciAzIGRhdGVzIHNlbGVjdGlvbiAgYW5kIGVuZCBkYXRlIGNhbiBiZSBmdWxsdSAgYXZhaWxhYmxlXHJcblxyXG5cdFx0XHRcdFx0aWYgKCAoMCA9PSBpKSAmJiAodGltZV9maWVsZHNfb2JqWyAnbmFtZScgXS5pbmRleE9mKCAnZW5kdGltZScgKSA+PSAwKSApe1xyXG5cdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGlmICggKCAoc2VsZWN0ZWRfZGF0ZXNfYXJyLmxlbmd0aC0xKSA9PSBpICkgJiYgKHRpbWVfZmllbGRzX29ialsgJ25hbWUnIF0uaW5kZXhPZiggJ3N0YXJ0dGltZScgKSA+PSAwKSApe1xyXG5cdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblxyXG5cclxuXHJcblx0XHRcdFx0dmFyIGhvd19tYW55X3Jlc291cmNlc19pbnRlcnNlY3RlZCA9IDA7XHJcblx0XHRcdFx0Ly8gTG9vcCBhbGwgcmVzb3VyY2VzIElEXHJcblx0XHRcdFx0XHQvLyBmb3IgKCB2YXIgcmVzX2tleSBpbiBjaGlsZF9yZXNvdXJjZXNfYXJyICl7XHQgXHRcdFx0XHRcdFx0Ly8gRml4SW46IDEwLjMuMC4yLlxyXG5cdFx0XHRcdGlmICggbnVsbCA9PT0gY2hpbGRfcmVzb3VyY2VzX2FyciApIHtcclxuXHRcdFx0XHRcdGNoaWxkX3Jlc291cmNlc19hcnIgPSBbXTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Zm9yICggbGV0IHJlc19rZXkgPSAwOyByZXNfa2V5IDwgY2hpbGRfcmVzb3VyY2VzX2Fyci5sZW5ndGg7IHJlc19rZXkrKyApe1xyXG5cclxuXHRcdFx0XHRcdGNoaWxkX3Jlc291cmNlX2lkID0gY2hpbGRfcmVzb3VyY2VzX2FyclsgcmVzX2tleSBdO1xyXG5cclxuXHRcdFx0XHRcdC8vIF93cGJjLmJvb2tpbmdzX2luX2NhbGVuZGFyX19nZXRfZm9yX2RhdGUoMiwnMjAyMy0wOC0yMScpWzEyXS5ib29rZWRfdGltZV9zbG90cy5tZXJnZWRfc2Vjb25kc1x0XHQ9IFsgXCIwNzowMDoxMSAtIDA3OjMwOjAyXCIsIFwiMTA6MDA6MTEgLSAwMDowMDowMFwiIF1cclxuXHRcdFx0XHRcdC8vIF93cGJjLmJvb2tpbmdzX2luX2NhbGVuZGFyX19nZXRfZm9yX2RhdGUoMiwnMjAyMy0wOC0yMScpWzJdLmJvb2tlZF90aW1lX3Nsb3RzLm1lcmdlZF9zZWNvbmRzXHRcdFx0PSBbICBbIDI1MjExLCAyNzAwMiBdLCBbIDM2MDExLCA4NjQwMCBdICBdXHJcblxyXG5cdFx0XHRcdFx0aWYgKCBmYWxzZSAhPT0gX3dwYmMuYm9va2luZ3NfaW5fY2FsZW5kYXJfX2dldF9mb3JfZGF0ZSggcmVzb3VyY2VfaWQsIHNxbF9kYXRlICkgKXtcclxuXHRcdFx0XHRcdFx0bWVyZ2VkX3NlY29uZHMgPSBfd3BiYy5ib29raW5nc19pbl9jYWxlbmRhcl9fZ2V0X2Zvcl9kYXRlKCByZXNvdXJjZV9pZCwgc3FsX2RhdGUgKVsgY2hpbGRfcmVzb3VyY2VfaWQgXS5ib29rZWRfdGltZV9zbG90cy5tZXJnZWRfc2Vjb25kcztcdFx0Ly8gWyAgWyAyNTIxMSwgMjcwMDIgXSwgWyAzNjAxMSwgODY0MDAgXSAgXVxyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0bWVyZ2VkX3NlY29uZHMgPSBbXTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGlmICggdGltZV9maWVsZHNfb2JqLnRpbWVzX2FzX3NlY29uZHMubGVuZ3RoID4gMSApe1xyXG5cdFx0XHRcdFx0XHRpc19pbnRlcnNlY3QgPSB3cGJjX2lzX2ludGVyc2VjdF9fcmFuZ2VfdGltZV9pbnRlcnZhbCggIFtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0W1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCggcGFyc2VJbnQoIHRpbWVfZmllbGRzX29iai50aW1lc19hc19zZWNvbmRzWzBdICkgKyAyMCApLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCggcGFyc2VJbnQoIHRpbWVfZmllbGRzX29iai50aW1lc19hc19zZWNvbmRzWzFdICkgLSAyMCApXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdF1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdF1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCwgbWVyZ2VkX3NlY29uZHMgKTtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdGlzX2NoZWNrX2luID0gKC0xICE9PSB0aW1lX2ZpZWxkc19vYmoubmFtZS5pbmRleE9mKCAnc3RhcnQnICkpO1xyXG5cdFx0XHRcdFx0XHRpc19pbnRlcnNlY3QgPSB3cGJjX2lzX2ludGVyc2VjdF9fb25lX3RpbWVfaW50ZXJ2YWwoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQoICggaXNfY2hlY2tfaW4gKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICA/IHBhcnNlSW50KCB0aW1lX2ZpZWxkc19vYmoudGltZXNfYXNfc2Vjb25kcyApICsgMjBcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgOiBwYXJzZUludCggdGltZV9maWVsZHNfb2JqLnRpbWVzX2FzX3NlY29uZHMgKSAtIDIwXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQsIG1lcmdlZF9zZWNvbmRzICk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRpZiAoaXNfaW50ZXJzZWN0KXtcclxuXHRcdFx0XHRcdFx0aG93X21hbnlfcmVzb3VyY2VzX2ludGVyc2VjdGVkKys7XHRcdFx0Ly8gSW5jcmVhc2VcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRpZiAoIGNoaWxkX3Jlc291cmNlc19hcnIubGVuZ3RoID09IGhvd19tYW55X3Jlc291cmNlc19pbnRlcnNlY3RlZCApIHtcclxuXHRcdFx0XHRcdC8vIEFsbCByZXNvdXJjZXMgaW50ZXJzZWN0ZWQsICB0aGVuICBpdCdzIG1lYW5zIHRoYXQgdGhpcyB0aW1lLXNsb3Qgb3IgdGltZSBtdXN0ICBiZSAgRGlzYWJsZWQsIGFuZCB3ZSBjYW4gIGV4aXN0ICBmcm9tICAgc2VsZWN0ZWRfZGF0ZXNfYXJyIExPT1BcclxuXHJcblx0XHRcdFx0XHR0aW1lX2ZpZWxkc19vYmpfYXJyWyBmaWVsZF9rZXkgXS5kaXNhYmxlZCA9IDE7XHJcblx0XHRcdFx0XHRicmVhaztcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gZXhpc3QgIGZyb20gICBEYXRlcyBMT09QXHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cclxuXHRcdC8vIDUuIE5vdyB3ZSBjYW4gZGlzYWJsZSB0aW1lIHNsb3QgaW4gSFRNTCBieSAgdXNpbmcgICggZmllbGQuZGlzYWJsZWQgPT0gMSApIHByb3BlcnR5XHJcblx0XHR3cGJjX19odG1sX190aW1lX2ZpZWxkX29wdGlvbnNfX3NldF9kaXNhYmxlZCggdGltZV9maWVsZHNfb2JqX2FyciApO1xyXG5cclxuXHRcdGpRdWVyeSggXCIuYm9va2luZ19mb3JtX2RpdlwiICkudHJpZ2dlciggJ3dwYmNfaG9va190aW1lc2xvdHNfZGlzYWJsZWQnLCBbcmVzb3VyY2VfaWQsIHNlbGVjdGVkX2RhdGVzX2Fycl0gKTtcdFx0XHRcdFx0Ly8gVHJpZ2dlciBob29rIG9uIGRpc2FibGluZyB0aW1lc2xvdHMuXHRcdFVzYWdlOiBcdGpRdWVyeSggXCIuYm9va2luZ19mb3JtX2RpdlwiICkub24oICd3cGJjX2hvb2tfdGltZXNsb3RzX2Rpc2FibGVkJywgZnVuY3Rpb24gKCBldmVudCwgYmtfdHlwZSwgYWxsX2RhdGVzICl7IC4uLiB9ICk7XHRcdC8vIEZpeEluOiA4LjcuMTEuOS5cclxuXHR9XHJcblxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQ2hlY2sgaWYgc3BlY2lmaWMgdGltZSgtc2xvdCkgYWxyZWFkeSAgaW4gdGhlIHBhc3QgZm9yIHNlbGVjdGVkIGRhdGVcclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ganNfY3VycmVudF90aW1lX3RvX2NoZWNrXHRcdC0gSlMgRGF0ZVxyXG5cdFx0ICogQHBhcmFtIHNxbF9kYXRlXHRcdFx0XHRcdFx0LSAnMjAyNS0wMS0yNidcclxuXHRcdCAqIEBwYXJhbSB0aW1lX2ZpZWxkc19vYmpcdFx0XHRcdC0gT2JqZWN0XHJcblx0XHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuXHRcdCAqL1xyXG5cdFx0ZnVuY3Rpb24gd3BiY19jaGVja19pc190aW1lX2luX3Bhc3QoIGpzX2N1cnJlbnRfdGltZV90b19jaGVjaywgc3FsX2RhdGUsIHRpbWVfZmllbGRzX29iaiApIHtcclxuXHJcblx0XHRcdC8vIEZpeEluOiAxMC45LjYuNFxyXG5cdFx0XHR2YXIgc3FsX2RhdGVfYXJyID0gc3FsX2RhdGUuc3BsaXQoICctJyApO1xyXG5cdFx0XHR2YXIgc3FsX2RhdGVfX21pZG5pZ2h0ID0gbmV3IERhdGUoIHBhcnNlSW50KCBzcWxfZGF0ZV9hcnJbMF0gKSwgKCBwYXJzZUludCggc3FsX2RhdGVfYXJyWzFdICkgLSAxICksIHBhcnNlSW50KCBzcWxfZGF0ZV9hcnJbMl0gKSwgMCwgMCwgMCApO1xyXG5cdFx0XHR2YXIgc3FsX2RhdGVfX21pZG5pZ2h0X21pbGlzZWNvbmRzID0gc3FsX2RhdGVfX21pZG5pZ2h0LmdldFRpbWUoKTtcclxuXHJcblx0XHRcdHZhciBpc19pbnRlcnNlY3QgPSBmYWxzZTtcclxuXHJcblx0XHRcdGlmICggdGltZV9maWVsZHNfb2JqLnRpbWVzX2FzX3NlY29uZHMubGVuZ3RoID4gMSApIHtcclxuXHJcblx0XHRcdFx0aWYgKCBqc19jdXJyZW50X3RpbWVfdG9fY2hlY2suZ2V0VGltZSgpID4gKHNxbF9kYXRlX19taWRuaWdodF9taWxpc2Vjb25kcyArIChwYXJzZUludCggdGltZV9maWVsZHNfb2JqLnRpbWVzX2FzX3NlY29uZHNbMF0gKSArIDIwKSAqIDEwMDApICkge1xyXG5cdFx0XHRcdFx0aXNfaW50ZXJzZWN0ID0gdHJ1ZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKCBqc19jdXJyZW50X3RpbWVfdG9fY2hlY2suZ2V0VGltZSgpID4gKHNxbF9kYXRlX19taWRuaWdodF9taWxpc2Vjb25kcyArIChwYXJzZUludCggdGltZV9maWVsZHNfb2JqLnRpbWVzX2FzX3NlY29uZHNbMV0gKSAtIDIwKSAqIDEwMDApICkge1xyXG5cdFx0XHRcdFx0aXNfaW50ZXJzZWN0ID0gdHJ1ZTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHZhciBpc19jaGVja19pbiA9ICgtMSAhPT0gdGltZV9maWVsZHNfb2JqLm5hbWUuaW5kZXhPZiggJ3N0YXJ0JyApKTtcclxuXHJcblx0XHRcdFx0dmFyIHRpbWVzX2FzX3NlY29uZHNfY2hlY2sgPSAoaXNfY2hlY2tfaW4pID8gcGFyc2VJbnQoIHRpbWVfZmllbGRzX29iai50aW1lc19hc19zZWNvbmRzICkgKyAyMCA6IHBhcnNlSW50KCB0aW1lX2ZpZWxkc19vYmoudGltZXNfYXNfc2Vjb25kcyApIC0gMjA7XHJcblxyXG5cdFx0XHRcdHRpbWVzX2FzX3NlY29uZHNfY2hlY2sgPSBzcWxfZGF0ZV9fbWlkbmlnaHRfbWlsaXNlY29uZHMgKyB0aW1lc19hc19zZWNvbmRzX2NoZWNrICogMTAwMDtcclxuXHJcblx0XHRcdFx0aWYgKCBqc19jdXJyZW50X3RpbWVfdG9fY2hlY2suZ2V0VGltZSgpID4gdGltZXNfYXNfc2Vjb25kc19jaGVjayApIHtcclxuXHRcdFx0XHRcdGlzX2ludGVyc2VjdCA9IHRydWU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4gaXNfaW50ZXJzZWN0O1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogSXMgbnVtYmVyIGluc2lkZSAvaW50ZXJzZWN0ICBvZiBhcnJheSBvZiBpbnRlcnZhbHMgP1xyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB0aW1lX0FcdFx0ICAgICBcdC0gMjU4MDBcclxuXHRcdCAqIEBwYXJhbSB0aW1lX2ludGVydmFsX0JcdFx0LSBbICBbIDI1MjExLCAyNzAwMiBdLCBbIDM2MDExLCA4NjQwMCBdICBdXHJcblx0XHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuXHRcdCAqL1xyXG5cdFx0ZnVuY3Rpb24gd3BiY19pc19pbnRlcnNlY3RfX29uZV90aW1lX2ludGVydmFsKCB0aW1lX0EsIHRpbWVfaW50ZXJ2YWxfQiApe1xyXG5cclxuXHRcdFx0Zm9yICggdmFyIGogPSAwOyBqIDwgdGltZV9pbnRlcnZhbF9CLmxlbmd0aDsgaisrICl7XHJcblxyXG5cdFx0XHRcdGlmICggKHBhcnNlSW50KCB0aW1lX0EgKSA+IHBhcnNlSW50KCB0aW1lX2ludGVydmFsX0JbIGogXVsgMCBdICkpICYmIChwYXJzZUludCggdGltZV9BICkgPCBwYXJzZUludCggdGltZV9pbnRlcnZhbF9CWyBqIF1bIDEgXSApKSApe1xyXG5cdFx0XHRcdFx0cmV0dXJuIHRydWVcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIGlmICggKCBwYXJzZUludCggdGltZV9BICkgPT0gcGFyc2VJbnQoIHRpbWVfaW50ZXJ2YWxfQlsgaiBdWyAwIF0gKSApIHx8ICggcGFyc2VJbnQoIHRpbWVfQSApID09IHBhcnNlSW50KCB0aW1lX2ludGVydmFsX0JbIGogXVsgMSBdICkgKSApIHtcclxuXHRcdFx0XHQvLyBcdFx0XHQvLyBUaW1lIEEganVzdCAgYXQgIHRoZSBib3JkZXIgb2YgaW50ZXJ2YWxcclxuXHRcdFx0XHQvLyB9XHJcblx0XHRcdH1cclxuXHJcblx0XHQgICAgcmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogSXMgdGhlc2UgYXJyYXkgb2YgaW50ZXJ2YWxzIGludGVyc2VjdGVkID9cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0gdGltZV9pbnRlcnZhbF9BXHRcdC0gWyBbIDIxNjAwLCAyMzQwMCBdIF1cclxuXHRcdCAqIEBwYXJhbSB0aW1lX2ludGVydmFsX0JcdFx0LSBbICBbIDI1MjExLCAyNzAwMiBdLCBbIDM2MDExLCA4NjQwMCBdICBdXHJcblx0XHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuXHRcdCAqL1xyXG5cdFx0ZnVuY3Rpb24gd3BiY19pc19pbnRlcnNlY3RfX3JhbmdlX3RpbWVfaW50ZXJ2YWwoIHRpbWVfaW50ZXJ2YWxfQSwgdGltZV9pbnRlcnZhbF9CICl7XHJcblxyXG5cdFx0XHR2YXIgaXNfaW50ZXJzZWN0O1xyXG5cclxuXHRcdFx0Zm9yICggdmFyIGkgPSAwOyBpIDwgdGltZV9pbnRlcnZhbF9BLmxlbmd0aDsgaSsrICl7XHJcblxyXG5cdFx0XHRcdGZvciAoIHZhciBqID0gMDsgaiA8IHRpbWVfaW50ZXJ2YWxfQi5sZW5ndGg7IGorKyApe1xyXG5cclxuXHRcdFx0XHRcdGlzX2ludGVyc2VjdCA9IHdwYmNfaW50ZXJ2YWxzX19pc19pbnRlcnNlY3RlZCggdGltZV9pbnRlcnZhbF9BWyBpIF0sIHRpbWVfaW50ZXJ2YWxfQlsgaiBdICk7XHJcblxyXG5cdFx0XHRcdFx0aWYgKCBpc19pbnRlcnNlY3QgKXtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBHZXQgYWxsIHRpbWUgZmllbGRzIGluIHRoZSBib29raW5nIGZvcm0gYXMgYXJyYXkgIG9mIG9iamVjdHNcclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0gcmVzb3VyY2VfaWRcclxuXHRcdCAqIEByZXR1cm5zIFtdXHJcblx0XHQgKlxyXG5cdFx0ICogXHRcdEV4YW1wbGU6XHJcblx0XHQgKiBcdFx0XHRcdFx0W1xyXG5cdFx0ICogXHRcdFx0XHRcdCBcdCAgIHtcclxuXHRcdCAqIFx0XHRcdFx0XHRcdFx0XHR2YWx1ZV9vcHRpb25fMjRoOiAgICcwNjowMCAtIDA2OjMwJ1xyXG5cdFx0ICogXHRcdFx0XHRcdFx0XHRcdHRpbWVzX2FzX3NlY29uZHM6ICAgWyAyMTYwMCwgMjM0MDAgXVxyXG5cdFx0ICogXHRcdFx0XHRcdCBcdCAgIFx0XHRqcXVlcnlfb3B0aW9uOiAgICAgIGpRdWVyeV9PYmplY3Qge31cclxuXHRcdCAqIFx0XHRcdFx0XHRcdFx0XHRuYW1lOiAgICAgICAgICAgICAgICdyYW5nZXRpbWUyW10nXHJcblx0XHQgKiBcdFx0XHRcdFx0ICAgICB9XHJcblx0XHQgKiBcdFx0XHRcdFx0ICAuLi5cclxuXHRcdCAqIFx0XHRcdFx0XHRcdCAgIHtcclxuXHRcdCAqIFx0XHRcdFx0XHRcdFx0XHR2YWx1ZV9vcHRpb25fMjRoOiAgICcwNjowMCdcclxuXHRcdCAqIFx0XHRcdFx0XHRcdFx0XHR0aW1lc19hc19zZWNvbmRzOiAgIFsgMjE2MDAgXVxyXG5cdFx0ICogXHRcdFx0XHRcdFx0ICAgXHRcdGpxdWVyeV9vcHRpb246ICAgICAgalF1ZXJ5X09iamVjdCB7fVxyXG5cdFx0ICogXHRcdFx0XHRcdFx0XHRcdG5hbWU6ICAgICAgICAgICAgICAgJ3N0YXJ0dGltZTJbXSdcclxuXHRcdCAqICBcdFx0XHRcdFx0ICAgIH1cclxuXHRcdCAqIFx0XHRcdFx0XHQgXVxyXG5cdFx0ICovXHJcblx0XHRmdW5jdGlvbiB3cGJjX2dldF9fdGltZV9maWVsZHNfX2luX2Jvb2tpbmdfZm9ybV9fYXNfYXJyKCByZXNvdXJjZV9pZCApe1xyXG5cdFx0ICAgIC8qKlxyXG5cdFx0XHQgKiBGaWVsZHMgd2l0aCAgW10gIGxpa2UgdGhpcyAgIHNlbGVjdFtuYW1lPVwicmFuZ2V0aW1lMVtdXCJdXHJcblx0XHRcdCAqIGl0J3Mgd2hlbiB3ZSBoYXZlICdtdWx0aXBsZScgaW4gc2hvcnRjb2RlOiAgIFtzZWxlY3QqIHJhbmdldGltZSBtdWx0aXBsZSAgXCIwNjowMCAtIDA2OjMwXCIgLi4uIF1cclxuXHRcdFx0ICovXHJcblx0XHRcdHZhciB0aW1lX2ZpZWxkc19hcnI9W1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQnc2VsZWN0W25hbWU9XCJyYW5nZXRpbWUnICsgcmVzb3VyY2VfaWQgKyAnXCJdJyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0J3NlbGVjdFtuYW1lPVwicmFuZ2V0aW1lJyArIHJlc291cmNlX2lkICsgJ1tdXCJdJyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0J3NlbGVjdFtuYW1lPVwic3RhcnR0aW1lJyArIHJlc291cmNlX2lkICsgJ1wiXScsXHJcblx0XHRcdFx0XHRcdFx0XHRcdCdzZWxlY3RbbmFtZT1cInN0YXJ0dGltZScgKyByZXNvdXJjZV9pZCArICdbXVwiXScsXHJcblx0XHRcdFx0XHRcdFx0XHRcdCdzZWxlY3RbbmFtZT1cImVuZHRpbWUnICsgcmVzb3VyY2VfaWQgKyAnXCJdJyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0J3NlbGVjdFtuYW1lPVwiZW5kdGltZScgKyByZXNvdXJjZV9pZCArICdbXVwiXSdcclxuXHRcdFx0XHRcdFx0XHRcdF07XHJcblxyXG5cdFx0XHR2YXIgdGltZV9maWVsZHNfb2JqX2FyciA9IFtdO1xyXG5cclxuXHRcdFx0Ly8gTG9vcCBhbGwgVGltZSBGaWVsZHNcclxuXHRcdFx0Zm9yICggdmFyIGN0Zj0gMDsgY3RmIDwgdGltZV9maWVsZHNfYXJyLmxlbmd0aDsgY3RmKysgKXtcclxuXHJcblx0XHRcdFx0dmFyIHRpbWVfZmllbGQgPSB0aW1lX2ZpZWxkc19hcnJbIGN0ZiBdO1xyXG5cdFx0XHRcdHZhciB0aW1lX29wdGlvbiA9IGpRdWVyeSggdGltZV9maWVsZCArICcgb3B0aW9uJyApO1xyXG5cclxuXHRcdFx0XHQvLyBMb29wIGFsbCBvcHRpb25zIGluIHRpbWUgZmllbGRcclxuXHRcdFx0XHRmb3IgKCB2YXIgaiA9IDA7IGogPCB0aW1lX29wdGlvbi5sZW5ndGg7IGorKyApe1xyXG5cclxuXHRcdFx0XHRcdHZhciBqcXVlcnlfb3B0aW9uID0galF1ZXJ5KCB0aW1lX2ZpZWxkICsgJyBvcHRpb246ZXEoJyArIGogKyAnKScgKTtcclxuXHRcdFx0XHRcdHZhciB2YWx1ZV9vcHRpb25fc2Vjb25kc19hcnIgPSBqcXVlcnlfb3B0aW9uLnZhbCgpLnNwbGl0KCAnLScgKTtcclxuXHRcdFx0XHRcdHZhciB0aW1lc19hc19zZWNvbmRzID0gW107XHJcblxyXG5cdFx0XHRcdFx0Ly8gR2V0IHRpbWUgYXMgc2Vjb25kc1xyXG5cdFx0XHRcdFx0aWYgKCB2YWx1ZV9vcHRpb25fc2Vjb25kc19hcnIubGVuZ3RoICl7XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRml4SW46IDkuOC4xMC4xLlxyXG5cdFx0XHRcdFx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCB2YWx1ZV9vcHRpb25fc2Vjb25kc19hcnIubGVuZ3RoOyBpKysgKXtcdFx0Ly8gRml4SW46IDEwLjAuMC41Ni5cclxuXHRcdFx0XHRcdFx0XHQvLyB2YWx1ZV9vcHRpb25fc2Vjb25kc19hcnJbaV0gPSAnMTQ6MDAgJyAgfCAnIDE2OjAwJyAgIChpZiBmcm9tICdyYW5nZXRpbWUnKSBhbmQgJzE2OjAwJyAgaWYgKHN0YXJ0L2VuZCB0aW1lKVxyXG5cclxuXHRcdFx0XHRcdFx0XHR2YXIgc3RhcnRfZW5kX3RpbWVzX2FyciA9IHZhbHVlX29wdGlvbl9zZWNvbmRzX2FyclsgaSBdLnRyaW0oKS5zcGxpdCggJzonICk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdHZhciB0aW1lX2luX3NlY29uZHMgPSBwYXJzZUludCggc3RhcnRfZW5kX3RpbWVzX2FyclsgMCBdICkgKiA2MCAqIDYwICsgcGFyc2VJbnQoIHN0YXJ0X2VuZF90aW1lc19hcnJbIDEgXSApICogNjA7XHJcblxyXG5cdFx0XHRcdFx0XHRcdHRpbWVzX2FzX3NlY29uZHMucHVzaCggdGltZV9pbl9zZWNvbmRzICk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHR0aW1lX2ZpZWxkc19vYmpfYXJyLnB1c2goIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J25hbWUnICAgICAgICAgICAgOiBqUXVlcnkoIHRpbWVfZmllbGQgKS5hdHRyKCAnbmFtZScgKSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3ZhbHVlX29wdGlvbl8yNGgnOiBqcXVlcnlfb3B0aW9uLnZhbCgpLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnanF1ZXJ5X29wdGlvbicgICA6IGpxdWVyeV9vcHRpb24sXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCd0aW1lc19hc19zZWNvbmRzJzogdGltZXNfYXNfc2Vjb25kc1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cmV0dXJuIHRpbWVfZmllbGRzX29ial9hcnI7XHJcblx0XHR9XHJcblxyXG5cdFx0XHQvKipcclxuXHRcdFx0ICogRGlzYWJsZSBIVE1MIG9wdGlvbnMgYW5kIGFkZCBib29rZWQgQ1NTIGNsYXNzXHJcblx0XHRcdCAqXHJcblx0XHRcdCAqIEBwYXJhbSB0aW1lX2ZpZWxkc19vYmpfYXJyICAgICAgLSB0aGlzIHZhbHVlIGlzIGZyb20gIHRoZSBmdW5jOlxyXG5cdFx0XHQgKiAgICAgXHR3cGJjX2dldF9fdGltZV9maWVsZHNfX2luX2Jvb2tpbmdfZm9ybV9fYXNfYXJyKCByZXNvdXJjZV9pZCApXHJcblx0XHRcdCAqIFx0XHRcdFx0XHRbXHJcblx0XHRcdCAqIFx0XHRcdFx0XHQgXHQgICB7XHRqcXVlcnlfb3B0aW9uOiAgICAgIGpRdWVyeV9PYmplY3Qge31cclxuXHRcdFx0ICogXHRcdFx0XHRcdFx0XHRcdG5hbWU6ICAgICAgICAgICAgICAgJ3JhbmdldGltZTJbXSdcclxuXHRcdFx0ICogXHRcdFx0XHRcdFx0XHRcdHRpbWVzX2FzX3NlY29uZHM6ICAgWyAyMTYwMCwgMjM0MDAgXVxyXG5cdFx0XHQgKiBcdFx0XHRcdFx0XHRcdFx0dmFsdWVfb3B0aW9uXzI0aDogICAnMDY6MDAgLSAwNjozMCdcclxuXHRcdFx0ICogXHQgIFx0XHRcdFx0XHRcdCAgICBkaXNhYmxlZCA9IDFcclxuXHRcdFx0ICogXHRcdFx0XHRcdCAgICAgfVxyXG5cdFx0XHQgKiBcdFx0XHRcdFx0ICAuLi5cclxuXHRcdFx0ICogXHRcdFx0XHRcdFx0ICAge1x0anF1ZXJ5X29wdGlvbjogICAgICBqUXVlcnlfT2JqZWN0IHt9XHJcblx0XHRcdCAqIFx0XHRcdFx0XHRcdFx0XHRuYW1lOiAgICAgICAgICAgICAgICdzdGFydHRpbWUyW10nXHJcblx0XHRcdCAqIFx0XHRcdFx0XHRcdFx0XHR0aW1lc19hc19zZWNvbmRzOiAgIFsgMjE2MDAgXVxyXG5cdFx0XHQgKiBcdFx0XHRcdFx0XHRcdFx0dmFsdWVfb3B0aW9uXzI0aDogICAnMDY6MDAnXHJcblx0XHRcdCAqICAgXHRcdFx0XHRcdFx0XHRkaXNhYmxlZCA9IDBcclxuXHRcdFx0ICogIFx0XHRcdFx0XHQgICAgfVxyXG5cdFx0XHQgKiBcdFx0XHRcdFx0IF1cclxuXHRcdFx0ICpcclxuXHRcdFx0ICovXHJcblx0XHRcdGZ1bmN0aW9uIHdwYmNfX2h0bWxfX3RpbWVfZmllbGRfb3B0aW9uc19fc2V0X2Rpc2FibGVkKCB0aW1lX2ZpZWxkc19vYmpfYXJyICl7XHJcblxyXG5cdFx0XHRcdHZhciBqcXVlcnlfb3B0aW9uO1xyXG5cclxuXHRcdFx0XHRmb3IgKCB2YXIgaSA9IDA7IGkgPCB0aW1lX2ZpZWxkc19vYmpfYXJyLmxlbmd0aDsgaSsrICl7XHJcblxyXG5cdFx0XHRcdFx0dmFyIGpxdWVyeV9vcHRpb24gPSB0aW1lX2ZpZWxkc19vYmpfYXJyWyBpIF0uanF1ZXJ5X29wdGlvbjtcclxuXHJcblx0XHRcdFx0XHRpZiAoIDEgPT0gdGltZV9maWVsZHNfb2JqX2FyclsgaSBdLmRpc2FibGVkICl7XHJcblx0XHRcdFx0XHRcdGpxdWVyeV9vcHRpb24ucHJvcCggJ2Rpc2FibGVkJywgdHJ1ZSApOyBcdFx0Ly8gTWFrZSBkaXNhYmxlIHNvbWUgb3B0aW9uc1xyXG5cdFx0XHRcdFx0XHRqcXVlcnlfb3B0aW9uLmFkZENsYXNzKCAnYm9va2VkJyApOyAgICAgICAgICAgXHQvLyBBZGQgXCJib29rZWRcIiBDU1MgY2xhc3NcclxuXHJcblx0XHRcdFx0XHRcdC8vIGlmIHRoaXMgYm9va2VkIGVsZW1lbnQgc2VsZWN0ZWQgLS0+IHRoZW4gZGVzZWxlY3QgIGl0XHJcblx0XHRcdFx0XHRcdGlmICgganF1ZXJ5X29wdGlvbi5wcm9wKCAnc2VsZWN0ZWQnICkgKXtcclxuXHRcdFx0XHRcdFx0XHRqcXVlcnlfb3B0aW9uLnByb3AoICdzZWxlY3RlZCcsIGZhbHNlICk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdGpxdWVyeV9vcHRpb24ucGFyZW50KCkuZmluZCggJ29wdGlvbjpub3QoW2Rpc2FibGVkXSk6Zmlyc3QnICkucHJvcCggJ3NlbGVjdGVkJywgdHJ1ZSApLnRyaWdnZXIoIFwiY2hhbmdlXCIgKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdGpxdWVyeV9vcHRpb24ucHJvcCggJ2Rpc2FibGVkJywgZmFsc2UgKTsgIFx0XHQvLyBNYWtlIGFjdGl2ZSBhbGwgdGltZXNcclxuXHRcdFx0XHRcdFx0anF1ZXJ5X29wdGlvbi5yZW1vdmVDbGFzcyggJ2Jvb2tlZCcgKTsgICBcdFx0Ly8gUmVtb3ZlIGNsYXNzIFwiYm9va2VkXCJcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENoZWNrIGlmIHRoaXMgdGltZV9yYW5nZSB8IFRpbWVfU2xvdCBpcyBGdWxsIERheSAgYm9va2VkXHJcblx0ICpcclxuXHQgKiBAcGFyYW0gdGltZXNsb3RfYXJyX2luX3NlY29uZHNcdFx0LSBbIDM2MDExLCA4NjQwMCBdXHJcblx0ICogQHJldHVybnMge2Jvb2xlYW59XHJcblx0ICovXHJcblx0ZnVuY3Rpb24gd3BiY19pc190aGlzX3RpbWVzbG90X19mdWxsX2RheV9ib29rZWQoIHRpbWVzbG90X2Fycl9pbl9zZWNvbmRzICl7XHJcblxyXG5cdFx0aWYgKFxyXG5cdFx0XHRcdCggdGltZXNsb3RfYXJyX2luX3NlY29uZHMubGVuZ3RoID4gMSApXHJcblx0XHRcdCYmICggcGFyc2VJbnQoIHRpbWVzbG90X2Fycl9pbl9zZWNvbmRzWyAwIF0gKSA8IDMwIClcclxuXHRcdFx0JiYgKCBwYXJzZUludCggdGltZXNsb3RfYXJyX2luX3NlY29uZHNbIDEgXSApID4gICggKDI0ICogNjAgKiA2MCkgLSAzMCkgKVxyXG5cdFx0KXtcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0LyogID09ICBTIGUgbCBlIGMgdCBlIGQgICAgRCBhIHQgZSBzICAvICBUIGkgbSBlIC0gRiBpIGUgbCBkIHMgID09XHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcblx0LyoqXHJcblx0ICogIEdldCBhbGwgc2VsZWN0ZWQgZGF0ZXMgaW4gU1FMIGZvcm1hdCBsaWtlIHRoaXMgWyBcIjIwMjMtMDgtMjNcIiwgXCIyMDIzLTA4LTI0XCIgLCAuLi4gXVxyXG5cdCAqXHJcblx0ICogQHBhcmFtIHJlc291cmNlX2lkXHJcblx0ICogQHJldHVybnMge1tdfVx0XHRcdFsgXCIyMDIzLTA4LTIzXCIsIFwiMjAyMy0wOC0yNFwiLCBcIjIwMjMtMDgtMjVcIiwgXCIyMDIzLTA4LTI2XCIsIFwiMjAyMy0wOC0yN1wiLCBcIjIwMjMtMDgtMjhcIixcclxuXHQgKiAgICAgXCIyMDIzLTA4LTI5XCIgXVxyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIHdwYmNfZ2V0X19zZWxlY3RlZF9kYXRlc19zcWxfX2FzX2FyciggcmVzb3VyY2VfaWQgKXtcclxuXHJcblx0XHR2YXIgc2VsZWN0ZWRfZGF0ZXNfYXJyID0gW107XHJcblx0XHRzZWxlY3RlZF9kYXRlc19hcnIgPSBqUXVlcnkoICcjZGF0ZV9ib29raW5nJyArIHJlc291cmNlX2lkICkudmFsKCkuc3BsaXQoJywnKTtcclxuXHJcblx0XHRpZiAoIHNlbGVjdGVkX2RhdGVzX2Fyci5sZW5ndGggKXtcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBGaXhJbjogOS44LjEwLjEuXHJcblx0XHRcdGZvciAoIGxldCBpID0gMDsgaSA8IHNlbGVjdGVkX2RhdGVzX2Fyci5sZW5ndGg7IGkrKyApe1x0XHRcdFx0XHRcdC8vIEZpeEluOiAxMC4wLjAuNTYuXHJcblx0XHRcdFx0c2VsZWN0ZWRfZGF0ZXNfYXJyWyBpIF0gPSBzZWxlY3RlZF9kYXRlc19hcnJbIGkgXS50cmltKCk7XHJcblx0XHRcdFx0c2VsZWN0ZWRfZGF0ZXNfYXJyWyBpIF0gPSBzZWxlY3RlZF9kYXRlc19hcnJbIGkgXS5zcGxpdCggJy4nICk7XHJcblx0XHRcdFx0aWYgKCBzZWxlY3RlZF9kYXRlc19hcnJbIGkgXS5sZW5ndGggPiAxICl7XHJcblx0XHRcdFx0XHRzZWxlY3RlZF9kYXRlc19hcnJbIGkgXSA9IHNlbGVjdGVkX2RhdGVzX2FyclsgaSBdWyAyIF0gKyAnLScgKyBzZWxlY3RlZF9kYXRlc19hcnJbIGkgXVsgMSBdICsgJy0nICsgc2VsZWN0ZWRfZGF0ZXNfYXJyWyBpIF1bIDAgXTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyBSZW1vdmUgZW1wdHkgZWxlbWVudHMgZnJvbSBhbiBhcnJheVxyXG5cdFx0c2VsZWN0ZWRfZGF0ZXNfYXJyID0gc2VsZWN0ZWRfZGF0ZXNfYXJyLmZpbHRlciggZnVuY3Rpb24gKCBuICl7IHJldHVybiBwYXJzZUludChuKTsgfSApO1xyXG5cclxuXHRcdHNlbGVjdGVkX2RhdGVzX2Fyci5zb3J0KCk7XHJcblxyXG5cdFx0cmV0dXJuIHNlbGVjdGVkX2RhdGVzX2FycjtcclxuXHR9XHJcblxyXG5cclxuXHQvKipcclxuXHQgKiBHZXQgYWxsIHRpbWUgZmllbGRzIGluIHRoZSBib29raW5nIGZvcm0gYXMgYXJyYXkgIG9mIG9iamVjdHNcclxuXHQgKlxyXG5cdCAqIEBwYXJhbSByZXNvdXJjZV9pZFxyXG5cdCAqIEBwYXJhbSBpc19vbmx5X3NlbGVjdGVkX3RpbWVcclxuXHQgKiBAcmV0dXJucyBbXVxyXG5cdCAqXHJcblx0ICogXHRcdEV4YW1wbGU6XHJcblx0ICogXHRcdFx0XHRcdFtcclxuXHQgKiBcdFx0XHRcdFx0IFx0ICAge1xyXG5cdCAqIFx0XHRcdFx0XHRcdFx0XHR2YWx1ZV9vcHRpb25fMjRoOiAgICcwNjowMCAtIDA2OjMwJ1xyXG5cdCAqIFx0XHRcdFx0XHRcdFx0XHR0aW1lc19hc19zZWNvbmRzOiAgIFsgMjE2MDAsIDIzNDAwIF1cclxuXHQgKiBcdFx0XHRcdFx0IFx0ICAgXHRcdGpxdWVyeV9vcHRpb246ICAgICAgalF1ZXJ5X09iamVjdCB7fVxyXG5cdCAqIFx0XHRcdFx0XHRcdFx0XHRuYW1lOiAgICAgICAgICAgICAgICdyYW5nZXRpbWUyW10nXHJcblx0ICogXHRcdFx0XHRcdCAgICAgfVxyXG5cdCAqIFx0XHRcdFx0XHQgIC4uLlxyXG5cdCAqIFx0XHRcdFx0XHRcdCAgIHtcclxuXHQgKiBcdFx0XHRcdFx0XHRcdFx0dmFsdWVfb3B0aW9uXzI0aDogICAnMDY6MDAnXHJcblx0ICogXHRcdFx0XHRcdFx0XHRcdHRpbWVzX2FzX3NlY29uZHM6ICAgWyAyMTYwMCBdXHJcblx0ICogXHRcdFx0XHRcdFx0ICAgXHRcdGpxdWVyeV9vcHRpb246ICAgICAgalF1ZXJ5X09iamVjdCB7fVxyXG5cdCAqIFx0XHRcdFx0XHRcdFx0XHRuYW1lOiAgICAgICAgICAgICAgICdzdGFydHRpbWUyW10nXHJcblx0ICogIFx0XHRcdFx0XHQgICAgfVxyXG5cdCAqIFx0XHRcdFx0XHQgXVxyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIHdwYmNfZ2V0X19zZWxlY3RlZF90aW1lX2ZpZWxkc19faW5fYm9va2luZ19mb3JtX19hc19hcnIoIHJlc291cmNlX2lkLCBpc19vbmx5X3NlbGVjdGVkX3RpbWUgPSB0cnVlICl7XHJcblx0XHQvKipcclxuXHRcdCAqIEZpZWxkcyB3aXRoICBbXSAgbGlrZSB0aGlzICAgc2VsZWN0W25hbWU9XCJyYW5nZXRpbWUxW11cIl1cclxuXHRcdCAqIGl0J3Mgd2hlbiB3ZSBoYXZlICdtdWx0aXBsZScgaW4gc2hvcnRjb2RlOiAgIFtzZWxlY3QqIHJhbmdldGltZSBtdWx0aXBsZSAgXCIwNjowMCAtIDA2OjMwXCIgLi4uIF1cclxuXHRcdCAqL1xyXG5cdFx0dmFyIHRpbWVfZmllbGRzX2Fycj1bXHJcblx0XHRcdFx0XHRcdFx0XHQnc2VsZWN0W25hbWU9XCJyYW5nZXRpbWUnICsgcmVzb3VyY2VfaWQgKyAnXCJdJyxcclxuXHRcdFx0XHRcdFx0XHRcdCdzZWxlY3RbbmFtZT1cInJhbmdldGltZScgKyByZXNvdXJjZV9pZCArICdbXVwiXScsXHJcblx0XHRcdFx0XHRcdFx0XHQnc2VsZWN0W25hbWU9XCJzdGFydHRpbWUnICsgcmVzb3VyY2VfaWQgKyAnXCJdJyxcclxuXHRcdFx0XHRcdFx0XHRcdCdzZWxlY3RbbmFtZT1cInN0YXJ0dGltZScgKyByZXNvdXJjZV9pZCArICdbXVwiXScsXHJcblx0XHRcdFx0XHRcdFx0XHQnc2VsZWN0W25hbWU9XCJlbmR0aW1lJyArIHJlc291cmNlX2lkICsgJ1wiXScsXHJcblx0XHRcdFx0XHRcdFx0XHQnc2VsZWN0W25hbWU9XCJlbmR0aW1lJyArIHJlc291cmNlX2lkICsgJ1tdXCJdJyxcclxuXHRcdFx0XHRcdFx0XHRcdCdzZWxlY3RbbmFtZT1cImR1cmF0aW9udGltZScgKyByZXNvdXJjZV9pZCArICdcIl0nLFxyXG5cdFx0XHRcdFx0XHRcdFx0J3NlbGVjdFtuYW1lPVwiZHVyYXRpb250aW1lJyArIHJlc291cmNlX2lkICsgJ1tdXCJdJ1xyXG5cdFx0XHRcdFx0XHRcdF07XHJcblxyXG5cdFx0dmFyIHRpbWVfZmllbGRzX29ial9hcnIgPSBbXTtcclxuXHJcblx0XHQvLyBMb29wIGFsbCBUaW1lIEZpZWxkc1xyXG5cdFx0Zm9yICggdmFyIGN0Zj0gMDsgY3RmIDwgdGltZV9maWVsZHNfYXJyLmxlbmd0aDsgY3RmKysgKXtcclxuXHJcblx0XHRcdHZhciB0aW1lX2ZpZWxkID0gdGltZV9maWVsZHNfYXJyWyBjdGYgXTtcclxuXHJcblx0XHRcdHZhciB0aW1lX29wdGlvbjtcclxuXHRcdFx0aWYgKCBpc19vbmx5X3NlbGVjdGVkX3RpbWUgKXtcclxuXHRcdFx0XHR0aW1lX29wdGlvbiA9IGpRdWVyeSggJyNib29raW5nX2Zvcm0nICsgcmVzb3VyY2VfaWQgKyAnICcgKyB0aW1lX2ZpZWxkICsgJyBvcHRpb246c2VsZWN0ZWQnICk7XHRcdFx0Ly8gRXhjbHVkZSBjb25kaXRpb25hbCAgZmllbGRzLCAgYmVjYXVzZSBvZiB1c2luZyAnI2Jvb2tpbmdfZm9ybTMgLi4uJ1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRpbWVfb3B0aW9uID0galF1ZXJ5KCAnI2Jvb2tpbmdfZm9ybScgKyByZXNvdXJjZV9pZCArICcgJyArIHRpbWVfZmllbGQgKyAnIG9wdGlvbicgKTtcdFx0XHRcdC8vIEFsbCAgdGltZSBmaWVsZHNcclxuXHRcdFx0fVxyXG5cclxuXHJcblx0XHRcdC8vIExvb3AgYWxsIG9wdGlvbnMgaW4gdGltZSBmaWVsZFxyXG5cdFx0XHRmb3IgKCB2YXIgaiA9IDA7IGogPCB0aW1lX29wdGlvbi5sZW5ndGg7IGorKyApe1xyXG5cclxuXHRcdFx0XHR2YXIganF1ZXJ5X29wdGlvbiA9IGpRdWVyeSggdGltZV9vcHRpb25bIGogXSApO1x0XHQvLyBHZXQgb25seSAgc2VsZWN0ZWQgb3B0aW9ucyBcdC8valF1ZXJ5KCB0aW1lX2ZpZWxkICsgJyBvcHRpb246ZXEoJyArIGogKyAnKScgKTtcclxuXHRcdFx0XHR2YXIgdmFsdWVfb3B0aW9uX3NlY29uZHNfYXJyID0ganF1ZXJ5X29wdGlvbi52YWwoKS5zcGxpdCggJy0nICk7XHJcblx0XHRcdFx0dmFyIHRpbWVzX2FzX3NlY29uZHMgPSBbXTtcclxuXHJcblx0XHRcdFx0Ly8gR2V0IHRpbWUgYXMgc2Vjb25kc1xyXG5cdFx0XHRcdGlmICggdmFsdWVfb3B0aW9uX3NlY29uZHNfYXJyLmxlbmd0aCApe1x0XHRcdFx0IFx0XHRcdFx0XHRcdFx0XHQvLyBGaXhJbjogOS44LjEwLjEuXHJcblx0XHRcdFx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCB2YWx1ZV9vcHRpb25fc2Vjb25kc19hcnIubGVuZ3RoOyBpKysgKXtcdFx0XHRcdFx0Ly8gRml4SW46IDEwLjAuMC41Ni5cclxuXHRcdFx0XHRcdFx0Ly8gdmFsdWVfb3B0aW9uX3NlY29uZHNfYXJyW2ldID0gJzE0OjAwICcgIHwgJyAxNjowMCcgICAoaWYgZnJvbSAncmFuZ2V0aW1lJykgYW5kICcxNjowMCcgIGlmIChzdGFydC9lbmQgdGltZSlcclxuXHJcblx0XHRcdFx0XHRcdHZhciBzdGFydF9lbmRfdGltZXNfYXJyID0gdmFsdWVfb3B0aW9uX3NlY29uZHNfYXJyWyBpIF0udHJpbSgpLnNwbGl0KCAnOicgKTtcclxuXHJcblx0XHRcdFx0XHRcdHZhciB0aW1lX2luX3NlY29uZHMgPSBwYXJzZUludCggc3RhcnRfZW5kX3RpbWVzX2FyclsgMCBdICkgKiA2MCAqIDYwICsgcGFyc2VJbnQoIHN0YXJ0X2VuZF90aW1lc19hcnJbIDEgXSApICogNjA7XHJcblxyXG5cdFx0XHRcdFx0XHR0aW1lc19hc19zZWNvbmRzLnB1c2goIHRpbWVfaW5fc2Vjb25kcyApO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0dGltZV9maWVsZHNfb2JqX2Fyci5wdXNoKCB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnbmFtZScgICAgICAgICAgICA6IGpRdWVyeSggJyNib29raW5nX2Zvcm0nICsgcmVzb3VyY2VfaWQgKyAnICcgKyB0aW1lX2ZpZWxkICkuYXR0ciggJ25hbWUnICksXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQndmFsdWVfb3B0aW9uXzI0aCc6IGpxdWVyeV9vcHRpb24udmFsKCksXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnanF1ZXJ5X29wdGlvbicgICA6IGpxdWVyeV9vcHRpb24sXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQndGltZXNfYXNfc2Vjb25kcyc6IHRpbWVzX2FzX3NlY29uZHNcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9ICk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyBUZXh0OiAgIFtzdGFydHRpbWVdIC0gW2VuZHRpbWVdIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cdFx0dmFyIHRleHRfdGltZV9maWVsZHNfYXJyPVtcclxuXHRcdFx0XHRcdFx0XHRcdFx0J2lucHV0W25hbWU9XCJzdGFydHRpbWUnICsgcmVzb3VyY2VfaWQgKyAnXCJdJyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0J2lucHV0W25hbWU9XCJlbmR0aW1lJyArIHJlc291cmNlX2lkICsgJ1wiXScsXHJcblx0XHRcdFx0XHRcdFx0XHRdO1xyXG5cdFx0Zm9yICggdmFyIHRmPSAwOyB0ZiA8IHRleHRfdGltZV9maWVsZHNfYXJyLmxlbmd0aDsgdGYrKyApe1xyXG5cclxuXHRcdFx0dmFyIHRleHRfanF1ZXJ5ID0galF1ZXJ5KCAnI2Jvb2tpbmdfZm9ybScgKyByZXNvdXJjZV9pZCArICcgJyArIHRleHRfdGltZV9maWVsZHNfYXJyWyB0ZiBdICk7XHRcdFx0XHRcdFx0XHRcdC8vIEV4Y2x1ZGUgY29uZGl0aW9uYWwgIGZpZWxkcywgIGJlY2F1c2Ugb2YgdXNpbmcgJyNib29raW5nX2Zvcm0zIC4uLidcclxuXHRcdFx0aWYgKCB0ZXh0X2pxdWVyeS5sZW5ndGggPiAwICl7XHJcblxyXG5cdFx0XHRcdHZhciB0aW1lX19oX21fX2FyciA9IHRleHRfanF1ZXJ5LnZhbCgpLnRyaW0oKS5zcGxpdCggJzonICk7XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vICcxNDowMCdcclxuXHRcdFx0XHRpZiAoIDAgPT0gdGltZV9faF9tX19hcnIubGVuZ3RoICl7XHJcblx0XHRcdFx0XHRjb250aW51ZTtcdFx0XHRcdFx0XHRcdFx0XHQvLyBOb3QgZW50ZXJlZCB0aW1lIHZhbHVlIGluIGEgZmllbGRcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKCAxID09IHRpbWVfX2hfbV9fYXJyLmxlbmd0aCApe1xyXG5cdFx0XHRcdFx0aWYgKCAnJyA9PT0gdGltZV9faF9tX19hcnJbIDAgXSApe1xyXG5cdFx0XHRcdFx0XHRjb250aW51ZTtcdFx0XHRcdFx0XHRcdFx0Ly8gTm90IGVudGVyZWQgdGltZSB2YWx1ZSBpbiBhIGZpZWxkXHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR0aW1lX19oX21fX2FyclsgMSBdID0gMDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0dmFyIHRleHRfdGltZV9pbl9zZWNvbmRzID0gcGFyc2VJbnQoIHRpbWVfX2hfbV9fYXJyWyAwIF0gKSAqIDYwICogNjAgKyBwYXJzZUludCggdGltZV9faF9tX19hcnJbIDEgXSApICogNjA7XHJcblxyXG5cdFx0XHRcdHZhciB0ZXh0X3RpbWVzX2FzX3NlY29uZHMgPSBbXTtcclxuXHRcdFx0XHR0ZXh0X3RpbWVzX2FzX3NlY29uZHMucHVzaCggdGV4dF90aW1lX2luX3NlY29uZHMgKTtcclxuXHJcblx0XHRcdFx0dGltZV9maWVsZHNfb2JqX2Fyci5wdXNoKCB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnbmFtZScgICAgICAgICAgICA6IHRleHRfanF1ZXJ5LmF0dHIoICduYW1lJyApLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3ZhbHVlX29wdGlvbl8yNGgnOiB0ZXh0X2pxdWVyeS52YWwoKSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdqcXVlcnlfb3B0aW9uJyAgIDogdGV4dF9qcXVlcnksXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQndGltZXNfYXNfc2Vjb25kcyc6IHRleHRfdGltZXNfYXNfc2Vjb25kc1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aW1lX2ZpZWxkc19vYmpfYXJyO1xyXG5cdH1cclxuXHJcblxyXG5cclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbi8qICA9PSAgUyBVIFAgUCBPIFIgVCAgICBmb3IgICAgQyBBIEwgRSBOIEQgQSBSICA9PVxyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcblx0LyoqXHJcblx0ICogR2V0IENhbGVuZGFyIGRhdGVwaWNrIEluc3RhbmNlLlxyXG5cdCAqXHJcblx0ICogQHBhcmFtIHtpbnR8c3RyaW5nfSByZXNvdXJjZV9pZFxyXG5cdCAqIEByZXR1cm5zIHsqfG51bGx9XHJcblx0ICovXHJcblx0ZnVuY3Rpb24gd3BiY19jYWxlbmRhcl9fZ2V0X2luc3QocmVzb3VyY2VfaWQpIHtcclxuXHJcblx0XHRpZiAoICd1bmRlZmluZWQnID09PSB0eXBlb2YgKHJlc291cmNlX2lkKSApIHtcclxuXHRcdFx0cmVzb3VyY2VfaWQgPSAnMSc7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCBqUXVlcnkoICcjY2FsZW5kYXJfYm9va2luZycgKyByZXNvdXJjZV9pZCApLmxlbmd0aCA+IDAgKSB7XHJcblxyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdHZhciBpbnN0ID0galF1ZXJ5LmRhdGVwaWNrLl9nZXRJbnN0KCBqUXVlcnkoICcjY2FsZW5kYXJfYm9va2luZycgKyByZXNvdXJjZV9pZCApLmdldCggMCApICk7XHJcblx0XHRcdFx0cmV0dXJuIGluc3QgPyBpbnN0IDogbnVsbDtcclxuXHRcdFx0fSBjYXRjaCAoIGUgKSB7XHJcblx0XHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gbnVsbDtcclxuXHR9XHJcblxyXG5cclxuXHQvKipcclxuXHQgKiBVbnNlbGVjdCAgYWxsIGRhdGVzIGluIGNhbGVuZGFyIGFuZCB2aXN1YWxseSB1cGRhdGUgdGhpcyBjYWxlbmRhclxyXG5cdCAqXHJcblx0ICogQHBhcmFtIHJlc291cmNlX2lkXHRcdElEIG9mIGJvb2tpbmcgcmVzb3VyY2VcclxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cdFx0dHJ1ZSBvbiBzdWNjZXNzIHwgZmFsc2UsICBpZiBubyBzdWNoICBjYWxlbmRhclxyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIHdwYmNfY2FsZW5kYXJfX3Vuc2VsZWN0X2FsbF9kYXRlcyggcmVzb3VyY2VfaWQgKXtcclxuXHJcblx0XHRpZiAoICd1bmRlZmluZWQnID09PSB0eXBlb2YgKHJlc291cmNlX2lkKSApe1xyXG5cdFx0XHRyZXNvdXJjZV9pZCA9ICcxJztcclxuXHRcdH1cclxuXHJcblx0XHR3cGJjX3JhbmdlX3NlbGVjdGlvbl9faGlkZV9ndWlkYW5jZSggcmVzb3VyY2VfaWQgKTtcclxuXHJcblx0XHR2YXIgaW5zdCA9IHdwYmNfY2FsZW5kYXJfX2dldF9pbnN0KCByZXNvdXJjZV9pZCApXHJcblxyXG5cdFx0aWYgKCBudWxsICE9PSBpbnN0ICl7XHJcblxyXG5cdFx0XHQvLyBVbnNlbGVjdCBhbGwgZGF0ZXMgYW5kIHNldCAgcHJvcGVydGllcyBvZiBEYXRlcGlja1xyXG5cdFx0XHRqUXVlcnkoICcjZGF0ZV9ib29raW5nJyArIHJlc291cmNlX2lkICkudmFsKCAnJyApOyAgICAgIC8vRml4SW46IDUuNC4zXHJcblx0XHRcdGluc3Quc3RheU9wZW4gPSBmYWxzZTtcclxuXHRcdFx0aW5zdC5kYXRlcyA9IFtdO1xyXG5cdFx0XHRqUXVlcnkuZGF0ZXBpY2suX3VwZGF0ZURhdGVwaWNrKCBpbnN0ICk7XHJcblxyXG5cdFx0XHRyZXR1cm4gdHJ1ZVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDbGVhciBkYXlzIGhpZ2hsaWdodGluZyBpbiBBbGwgb3Igc3BlY2lmaWMgQ2FsZW5kYXJzXHJcblx0ICpcclxuICAgICAqIEBwYXJhbSByZXNvdXJjZV9pZCAgLSBjYW4gYmUgc2tpcGVkIHRvICBjbGVhciBoaWdobGlnaHRpbmcgaW4gYWxsIGNhbGVuZGFyc1xyXG4gICAgICovXHJcblx0ZnVuY3Rpb24gd3BiY19jYWxlbmRhcnNfX2NsZWFyX2RheXNfaGlnaGxpZ2h0aW5nKCByZXNvdXJjZV9pZCApe1xyXG5cclxuXHRcdGlmICggJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiAoIHJlc291cmNlX2lkICkgKXtcclxuXHJcblx0XHRcdGpRdWVyeSggJyNjYWxlbmRhcl9ib29raW5nJyArIHJlc291cmNlX2lkICsgJyAuZGF0ZXBpY2stZGF5cy1jZWxsLW92ZXInICkucmVtb3ZlQ2xhc3MoICdkYXRlcGljay1kYXlzLWNlbGwtb3ZlcicgKTtcdFx0Ly8gQ2xlYXIgaW4gc3BlY2lmaWMgY2FsZW5kYXJcclxuXHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRqUXVlcnkoICcuZGF0ZXBpY2stZGF5cy1jZWxsLW92ZXInICkucmVtb3ZlQ2xhc3MoICdkYXRlcGljay1kYXlzLWNlbGwtb3ZlcicgKTtcdFx0XHRcdFx0XHRcdFx0Ly8gQ2xlYXIgaW4gYWxsIGNhbGVuZGFyc1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogU2Nyb2xsIHRvIHNwZWNpZmljIG1vbnRoIGluIGNhbGVuZGFyXHJcblx0ICpcclxuXHQgKiBAcGFyYW0gcmVzb3VyY2VfaWRcdFx0SUQgb2YgcmVzb3VyY2VcclxuXHQgKiBAcGFyYW0geWVhclx0XHRcdFx0LSByZWFsIHllYXIgIC0gMjAyM1xyXG5cdCAqIEBwYXJhbSBtb250aFx0XHRcdFx0LSByZWFsIG1vbnRoIC0gMTJcclxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuXHQgKi9cclxuXHRmdW5jdGlvbiB3cGJjX2NhbGVuZGFyX19zY3JvbGxfdG8oIHJlc291cmNlX2lkLCB5ZWFyLCBtb250aCApe1xyXG5cclxuXHRcdGlmICggJ3VuZGVmaW5lZCcgPT09IHR5cGVvZiAocmVzb3VyY2VfaWQpICl7IHJlc291cmNlX2lkID0gJzEnOyB9XHJcblx0XHR2YXIgaW5zdCA9IHdwYmNfY2FsZW5kYXJfX2dldF9pbnN0KCByZXNvdXJjZV9pZCApXHJcblx0XHRpZiAoIG51bGwgIT09IGluc3QgKXtcclxuXHJcblx0XHRcdHllYXIgID0gcGFyc2VJbnQoIHllYXIgKTtcclxuXHRcdFx0bW9udGggPSBwYXJzZUludCggbW9udGggKSAtIDE7XHRcdC8vIEluIEpTIGRhdGUsICBtb250aCAtMVxyXG5cclxuXHRcdFx0aW5zdC5jdXJzb3JEYXRlID0gbmV3IERhdGUoKTtcclxuXHRcdFx0Ly8gSW4gc29tZSBjYXNlcywgIHRoZSBzZXRGdWxsWWVhciBjYW4gIHNldCAgb25seSBZZWFyLCAgYW5kIG5vdCB0aGUgTW9udGggYW5kIGRheSAgICAgIC8vIEZpeEluOiA2LjIuMy41LlxyXG5cdFx0XHRpbnN0LmN1cnNvckRhdGUuc2V0RnVsbFllYXIoIHllYXIsIG1vbnRoLCAxICk7XHJcblx0XHRcdGluc3QuY3Vyc29yRGF0ZS5zZXRNb250aCggbW9udGggKTtcclxuXHRcdFx0aW5zdC5jdXJzb3JEYXRlLnNldERhdGUoIDEgKTtcclxuXHJcblx0XHRcdGluc3QuZHJhd01vbnRoID0gaW5zdC5jdXJzb3JEYXRlLmdldE1vbnRoKCk7XHJcblx0XHRcdGluc3QuZHJhd1llYXIgPSBpbnN0LmN1cnNvckRhdGUuZ2V0RnVsbFllYXIoKTtcclxuXHJcblx0XHRcdGpRdWVyeS5kYXRlcGljay5fbm90aWZ5Q2hhbmdlKCBpbnN0ICk7XHJcblx0XHRcdGpRdWVyeS5kYXRlcGljay5fYWRqdXN0SW5zdERhdGUoIGluc3QgKTtcclxuXHRcdFx0alF1ZXJ5LmRhdGVwaWNrLl9zaG93RGF0ZSggaW5zdCApO1xyXG5cdFx0XHRqUXVlcnkuZGF0ZXBpY2suX3VwZGF0ZURhdGVwaWNrKCBpbnN0ICk7XHJcblxyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIElzIHRoaXMgZGF0ZSBzZWxlY3RhYmxlIGluIGNhbGVuZGFyIChtYWlubHkgaXQncyBtZWFucyBBVkFJTEFCTEUgZGF0ZSlcclxuXHQgKlxyXG5cdCAqIEBwYXJhbSB7aW50fHN0cmluZ30gcmVzb3VyY2VfaWRcdFx0MVxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzcWxfY2xhc3NfZGF5XHRcdCcyMDIzLTA4LTExJ1xyXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVx0XHRcdFx0XHR0cnVlIHwgZmFsc2VcclxuXHQgKi9cclxuXHRmdW5jdGlvbiB3cGJjX2lzX3RoaXNfZGF5X3NlbGVjdGFibGUoIHJlc291cmNlX2lkLCBzcWxfY2xhc3NfZGF5ICl7XHJcblxyXG5cdFx0Ly8gR2V0IERhdGEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHRcdHZhciBkYXRlX2Jvb2tpbmdzX29iaiA9IF93cGJjLmJvb2tpbmdzX2luX2NhbGVuZGFyX19nZXRfZm9yX2RhdGUoIHJlc291cmNlX2lkLCBzcWxfY2xhc3NfZGF5ICk7XHJcblx0XHRpZiAoICEgZGF0ZV9ib29raW5nc19vYmogfHwgJ3VuZGVmaW5lZCcgPT09IHR5cGVvZiAoIGRhdGVfYm9va2luZ3Nfb2JqWyAnZGF5X2F2YWlsYWJpbGl0eScgXSApICkge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0dmFyIGlzX2RheV9zZWxlY3RhYmxlID0gKCBwYXJzZUludCggZGF0ZV9ib29raW5nc19vYmpbICdkYXlfYXZhaWxhYmlsaXR5JyBdICkgPiAwICk7XHJcblxyXG5cdFx0aWYgKCB0eXBlb2YgKGRhdGVfYm9va2luZ3Nfb2JqWyAnc3VtbWFyeScgXSkgPT09ICd1bmRlZmluZWQnICl7XHJcblx0XHRcdHJldHVybiBpc19kYXlfc2VsZWN0YWJsZTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoICdhdmFpbGFibGUnICE9IGRhdGVfYm9va2luZ3Nfb2JqWyAnc3VtbWFyeSddWydzdGF0dXNfZm9yX2RheScgXSApe1xyXG5cclxuXHRcdFx0dmFyIGlzX3NldF9wZW5kaW5nX2RheXNfc2VsZWN0YWJsZSA9IF93cGJjLmNhbGVuZGFyX19nZXRfcGFyYW1fdmFsdWUoIHJlc291cmNlX2lkLCAncGVuZGluZ19kYXlzX3NlbGVjdGFibGUnICk7XHRcdC8vIHNldCBwZW5kaW5nIGRheXMgc2VsZWN0YWJsZSAgICAgICAgICAvLyBGaXhJbjogOC42LjEuMTguXHJcblx0XHRcdHZhciBib29raW5nX3N0YXR1c2VzX2FyciA9IHdwYmNfZ2V0X2Jvb2tpbmdfc3RhdHVzZXNfX2FzX2FyciggZGF0ZV9ib29raW5nc19vYmogKTtcclxuXHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHQgICAoIHdwYmNfYm9va2luZ19zdGF0dXNlc19faGFzKCBib29raW5nX3N0YXR1c2VzX2FyciwgJ3BlbmRpbmcnICkgKVxyXG5cdFx0XHRcdHx8ICggd3BiY19ib29raW5nX3N0YXR1c2VzX19oYXMoIGJvb2tpbmdfc3RhdHVzZXNfYXJyLCAncGVuZGluZ19wZW5kaW5nJyApIClcclxuXHRcdFx0XHR8fCAoIHdwYmNfYm9va2luZ19zdGF0dXNlc19faGFzKCBib29raW5nX3N0YXR1c2VzX2FyciwgJ3BlbmRpbmdfYXBwcm92ZWQnICkgKVxyXG5cdFx0XHRcdHx8ICggd3BiY19ib29raW5nX3N0YXR1c2VzX19oYXMoIGJvb2tpbmdfc3RhdHVzZXNfYXJyLCAnYXBwcm92ZWRfcGVuZGluZycgKSApXHJcblx0XHRcdCl7XHJcblx0XHRcdFx0aXNfZGF5X3NlbGVjdGFibGUgPSAoaXNfZGF5X3NlbGVjdGFibGUpID8gdHJ1ZSA6IGlzX3NldF9wZW5kaW5nX2RheXNfc2VsZWN0YWJsZTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBpc19kYXlfc2VsZWN0YWJsZTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIElzIGRhdGUgdG8gY2hlY2sgSU4gYXJyYXkgb2Ygc2VsZWN0ZWQgZGF0ZXNcclxuXHQgKlxyXG5cdCAqIEBwYXJhbSB7ZGF0ZX1qc19kYXRlX3RvX2NoZWNrXHRcdC0gSlMgRGF0ZVx0XHRcdC0gc2ltcGxlICBKYXZhU2NyaXB0IERhdGUgb2JqZWN0XHJcblx0ICogQHBhcmFtIHtbXX0ganNfZGF0ZXNfYXJyXHRcdFx0LSBbIEpTRGF0ZSwgLi4uIF0gICAtIGFycmF5ICBvZiBKUyBkYXRlc1xyXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIHdwYmNfaXNfdGhpc19kYXlfYW1vbmdfc2VsZWN0ZWRfZGF5cygganNfZGF0ZV90b19jaGVjaywganNfZGF0ZXNfYXJyICl7XHJcblxyXG5cdFx0Zm9yICggdmFyIGRhdGVfaW5kZXggPSAwOyBkYXRlX2luZGV4IDwganNfZGF0ZXNfYXJyLmxlbmd0aCA7IGRhdGVfaW5kZXgrKyApeyAgICAgXHRcdFx0XHRcdFx0XHRcdFx0Ly8gRml4SW46IDguNC41LjE2LlxyXG5cdFx0XHRpZiAoICgganNfZGF0ZXNfYXJyWyBkYXRlX2luZGV4IF0uZ2V0RnVsbFllYXIoKSA9PT0ganNfZGF0ZV90b19jaGVjay5nZXRGdWxsWWVhcigpICkgJiZcclxuXHRcdFx0XHQgKCBqc19kYXRlc19hcnJbIGRhdGVfaW5kZXggXS5nZXRNb250aCgpID09PSBqc19kYXRlX3RvX2NoZWNrLmdldE1vbnRoKCkgKSAmJlxyXG5cdFx0XHRcdCAoIGpzX2RhdGVzX2FyclsgZGF0ZV9pbmRleCBdLmdldERhdGUoKSA9PT0ganNfZGF0ZV90b19jaGVjay5nZXREYXRlKCkgKSApIHtcclxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuICBmYWxzZTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldCBTUUwgQ2xhc3MgRGF0ZSAnMjAyMy0wOC0wMScgZnJvbSAgSlMgRGF0ZVxyXG5cdCAqXHJcblx0ICogQHBhcmFtIGRhdGVcdFx0XHRcdEpTIERhdGVcclxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVx0XHQnMjAyMy0wOC0xMidcclxuXHQgKi9cclxuXHRmdW5jdGlvbiB3cGJjX19nZXRfX3NxbF9jbGFzc19kYXRlKCBkYXRlICl7XHJcblxyXG5cdFx0dmFyIHNxbF9jbGFzc19kYXkgPSBkYXRlLmdldEZ1bGxZZWFyKCkgKyAnLSc7XHJcblx0XHRcdHNxbF9jbGFzc19kYXkgKz0gKCAoIGRhdGUuZ2V0TW9udGgoKSArIDEgKSA8IDEwICkgPyAnMCcgOiAnJztcclxuXHRcdFx0c3FsX2NsYXNzX2RheSArPSAoIGRhdGUuZ2V0TW9udGgoKSArIDEgKSArICctJ1xyXG5cdFx0XHRzcWxfY2xhc3NfZGF5ICs9ICggZGF0ZS5nZXREYXRlKCkgPCAxMCApID8gJzAnIDogJyc7XHJcblx0XHRcdHNxbF9jbGFzc19kYXkgKz0gZGF0ZS5nZXREYXRlKCk7XHJcblxyXG5cdFx0XHRyZXR1cm4gc3FsX2NsYXNzX2RheTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldCBKUyBEYXRlIGZyb20gIHRoZSBTUUwgZGF0ZSBmb3JtYXQgJzIwMjQtMDUtMTQnXHJcblx0ICogQHBhcmFtIHNxbF9jbGFzc19kYXRlXHJcblx0ICogQHJldHVybnMge0RhdGV9XHJcblx0ICovXHJcblx0ZnVuY3Rpb24gd3BiY19fZ2V0X19qc19kYXRlKCBzcWxfY2xhc3NfZGF0ZSApe1xyXG5cclxuXHRcdHZhciBzcWxfY2xhc3NfZGF0ZV9hcnIgPSBzcWxfY2xhc3NfZGF0ZS5zcGxpdCggJy0nICk7XHJcblxyXG5cdFx0dmFyIGRhdGVfanMgPSBuZXcgRGF0ZSgpO1xyXG5cclxuXHRcdGRhdGVfanMuc2V0RnVsbFllYXIoIHBhcnNlSW50KCBzcWxfY2xhc3NfZGF0ZV9hcnJbIDAgXSApLCAocGFyc2VJbnQoIHNxbF9jbGFzc19kYXRlX2FyclsgMSBdICkgLSAxKSwgcGFyc2VJbnQoIHNxbF9jbGFzc19kYXRlX2FyclsgMiBdICkgKTsgIC8vIHllYXIsIG1vbnRoLCBkYXRlXHJcblxyXG5cdFx0Ly8gV2l0aG91dCB0aGlzIHRpbWUgYWRqdXN0IERhdGVzIHNlbGVjdGlvbiAgaW4gRGF0ZXBpY2tlciBjYW4gbm90IHdvcmshISFcclxuXHRcdGRhdGVfanMuc2V0SG91cnMoMCk7XHJcblx0XHRkYXRlX2pzLnNldE1pbnV0ZXMoMCk7XHJcblx0XHRkYXRlX2pzLnNldFNlY29uZHMoMCk7XHJcblx0XHRkYXRlX2pzLnNldE1pbGxpc2Vjb25kcygwKTtcclxuXHJcblx0XHRyZXR1cm4gZGF0ZV9qcztcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldCBURCBDbGFzcyBEYXRlICcxLTMxLTIwMjMnIGZyb20gIEpTIERhdGVcclxuXHQgKlxyXG5cdCAqIEBwYXJhbSBkYXRlXHRcdFx0XHRKUyBEYXRlXHJcblx0ICogQHJldHVybnMge3N0cmluZ31cdFx0JzEtMzEtMjAyMydcclxuXHQgKi9cclxuXHRmdW5jdGlvbiB3cGJjX19nZXRfX3RkX2NsYXNzX2RhdGUoIGRhdGUgKXtcclxuXHJcblx0XHR2YXIgdGRfY2xhc3NfZGF5ID0gKGRhdGUuZ2V0TW9udGgoKSArIDEpICsgJy0nICsgZGF0ZS5nZXREYXRlKCkgKyAnLScgKyBkYXRlLmdldEZ1bGxZZWFyKCk7XHRcdFx0XHRcdFx0XHRcdC8vICcxLTktMjAyMydcclxuXHJcblx0XHRyZXR1cm4gdGRfY2xhc3NfZGF5O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogR2V0IGRhdGUgcGFyYW1zIGZyb20gIHN0cmluZyBkYXRlXHJcblx0ICpcclxuXHQgKiBAcGFyYW0gZGF0ZVx0XHRcdHN0cmluZyBkYXRlIGxpa2UgJzMxLjUuMjAyMydcclxuXHQgKiBAcGFyYW0gc2VwYXJhdG9yXHRcdGRlZmF1bHQgJy4nICBjYW4gYmUgc2tpcHBlZC5cclxuXHQgKiBAcmV0dXJucyB7ICB7ZGF0ZTogbnVtYmVyLCBtb250aDogbnVtYmVyLCB5ZWFyOiBudW1iZXJ9ICB9XHJcblx0ICovXHJcblx0ZnVuY3Rpb24gd3BiY19fZ2V0X19kYXRlX3BhcmFtc19fZnJvbV9zdHJpbmdfZGF0ZSggZGF0ZSAsIHNlcGFyYXRvcil7XHJcblxyXG5cdFx0c2VwYXJhdG9yID0gKCAndW5kZWZpbmVkJyAhPT0gdHlwZW9mIChzZXBhcmF0b3IpICkgPyBzZXBhcmF0b3IgOiAnLic7XHJcblxyXG5cdFx0dmFyIGRhdGVfYXJyID0gZGF0ZS5zcGxpdCggc2VwYXJhdG9yICk7XHJcblx0XHR2YXIgZGF0ZV9vYmogPSB7XHJcblx0XHRcdCd5ZWFyJyA6ICBwYXJzZUludCggZGF0ZV9hcnJbIDIgXSApLFxyXG5cdFx0XHQnbW9udGgnOiAocGFyc2VJbnQoIGRhdGVfYXJyWyAxIF0gKSAtIDEpLFxyXG5cdFx0XHQnZGF0ZScgOiAgcGFyc2VJbnQoIGRhdGVfYXJyWyAwIF0gKVxyXG5cdFx0fTtcclxuXHRcdHJldHVybiBkYXRlX29iajtcdFx0Ly8gZm9yIFx0XHQgPSBuZXcgRGF0ZSggZGF0ZV9vYmoueWVhciAsIGRhdGVfb2JqLm1vbnRoICwgZGF0ZV9vYmouZGF0ZSApO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQWRkIFNwaW4gTG9hZGVyIHRvICBjYWxlbmRhclxyXG5cdCAqIEBwYXJhbSByZXNvdXJjZV9pZFxyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIHdwYmNfY2FsZW5kYXJfX2xvYWRpbmdfX3N0YXJ0KCByZXNvdXJjZV9pZCApe1xyXG5cdFx0aWYgKCAhIGpRdWVyeSggJyNjYWxlbmRhcl9ib29raW5nJyArIHJlc291cmNlX2lkICkubmV4dCgpLmhhc0NsYXNzKCAnd3BiY19zcGluc19sb2FkZXJfd3JhcHBlcicgKSApe1xyXG5cdFx0XHRqUXVlcnkoICcjY2FsZW5kYXJfYm9va2luZycgKyByZXNvdXJjZV9pZCApLmFmdGVyKCAnPGRpdiBjbGFzcz1cIndwYmNfc3BpbnNfbG9hZGVyX3dyYXBwZXJcIj48ZGl2IGNsYXNzPVwid3BiY19zcGluX2xvYWRlcl9vbmVfbmV3XCI+PC9kaXY+PC9kaXY+JyApO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCAhIGpRdWVyeSggJyNjYWxlbmRhcl9ib29raW5nJyArIHJlc291cmNlX2lkICkuaGFzQ2xhc3MoICd3cGJjX2NhbGVuZGFyX2JsdXJfc21hbGwnICkgKXtcclxuXHRcdFx0alF1ZXJ5KCAnI2NhbGVuZGFyX2Jvb2tpbmcnICsgcmVzb3VyY2VfaWQgKS5hZGRDbGFzcyggJ3dwYmNfY2FsZW5kYXJfYmx1cl9zbWFsbCcgKTtcclxuXHRcdH1cclxuXHRcdHdwYmNfY2FsZW5kYXJfX2JsdXJfX3N0YXJ0KCByZXNvdXJjZV9pZCApO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUmVtb3ZlIFNwaW4gTG9hZGVyIHRvICBjYWxlbmRhclxyXG5cdCAqIEBwYXJhbSByZXNvdXJjZV9pZFxyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIHdwYmNfY2FsZW5kYXJfX2xvYWRpbmdfX3N0b3AoIHJlc291cmNlX2lkICl7XHJcblx0XHRqUXVlcnkoICcjY2FsZW5kYXJfYm9va2luZycgKyByZXNvdXJjZV9pZCArICcgKyAud3BiY19zcGluc19sb2FkZXJfd3JhcHBlcicgKS5yZW1vdmUoKTtcclxuXHRcdGpRdWVyeSggJyNjYWxlbmRhcl9ib29raW5nJyArIHJlc291cmNlX2lkICkucmVtb3ZlQ2xhc3MoICd3cGJjX2NhbGVuZGFyX2JsdXJfc21hbGwnICk7XHJcblx0XHR3cGJjX2NhbGVuZGFyX19ibHVyX19zdG9wKCByZXNvdXJjZV9pZCApO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQWRkIEJsdXIgdG8gIGNhbGVuZGFyXHJcblx0ICogQHBhcmFtIHJlc291cmNlX2lkXHJcblx0ICovXHJcblx0ZnVuY3Rpb24gd3BiY19jYWxlbmRhcl9fYmx1cl9fc3RhcnQoIHJlc291cmNlX2lkICl7XHJcblx0XHRpZiAoICEgalF1ZXJ5KCAnI2NhbGVuZGFyX2Jvb2tpbmcnICsgcmVzb3VyY2VfaWQgKS5oYXNDbGFzcyggJ3dwYmNfY2FsZW5kYXJfYmx1cicgKSApe1xyXG5cdFx0XHRqUXVlcnkoICcjY2FsZW5kYXJfYm9va2luZycgKyByZXNvdXJjZV9pZCApLmFkZENsYXNzKCAnd3BiY19jYWxlbmRhcl9ibHVyJyApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUmVtb3ZlIEJsdXIgaW4gIGNhbGVuZGFyXHJcblx0ICogQHBhcmFtIHJlc291cmNlX2lkXHJcblx0ICovXHJcblx0ZnVuY3Rpb24gd3BiY19jYWxlbmRhcl9fYmx1cl9fc3RvcCggcmVzb3VyY2VfaWQgKXtcclxuXHRcdGpRdWVyeSggJyNjYWxlbmRhcl9ib29raW5nJyArIHJlc291cmNlX2lkICkucmVtb3ZlQ2xhc3MoICd3cGJjX2NhbGVuZGFyX2JsdXInICk7XHJcblx0fVxyXG5cclxuXHJcblx0Ly8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cclxuXHQvKiAgPT0gIENhbGVuZGFyIFVwZGF0ZSAgLSBWaWV3ICA9PVxyXG5cdC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uICovXHJcblxyXG5cdC8qKlxyXG5cdCAqIFVwZGF0ZSBsb29rIG9mIGNhbGVuZGFyIChzYWZlKS5cclxuXHQgKlxyXG5cdCAqIEluIEVsZW1lbnRvciBwcmV2aWV3IHRoZSBET00gY2FuIGJlIHJlLXJlbmRlcmVkLCBzbyB0aGUgY2FsZW5kYXIgZWxlbWVudCBtYXkgZXhpc3RcclxuXHQgKiB3aGlsZSB0aGUgRGF0ZXBpY2sgaW5zdGFuY2UgaXMgbWlzc2luZy4gSW4gdGhhdCBjYXNlIHRyeSB0byAocmUpaW5pdGlhbGl6ZS5cclxuXHQgKlxyXG5cdCAqIEBwYXJhbSB7aW50fHN0cmluZ30gcmVzb3VyY2VfaWRcclxuXHQgKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIHVwZGF0ZWQsIGZhbHNlIGlmIG5vdCBwb3NzaWJsZVxyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIHdwYmNfY2FsZW5kYXJfX3VwZGF0ZV9sb29rKHJlc291cmNlX2lkKSB7XHJcblxyXG5cdFx0dmFyIGluc3QgPSB3cGJjX2NhbGVuZGFyX19nZXRfaW5zdCggcmVzb3VyY2VfaWQgKTtcclxuXHJcblx0XHQvLyBJZiBpbnN0YW5jZSBtaXNzaW5nLCB0cnkgdG8gcmUtaW5pdCBjYWxlbmRhciBvbmNlLlxyXG5cdFx0aWYgKCBudWxsID09PSBpbnN0ICkge1xyXG5cclxuXHRcdFx0dmFyIGpxX2NhbCA9IGpRdWVyeSggJyNjYWxlbmRhcl9ib29raW5nJyArIHJlc291cmNlX2lkICk7XHJcblxyXG5cdFx0XHRpZiAoIGpxX2NhbC5sZW5ndGggJiYgKCdmdW5jdGlvbicgPT09IHR5cGVvZiB3cGJjX2NhbGVuZGFyX3Nob3cpICkge1xyXG5cclxuXHRcdFx0XHQvLyBFbGVtZW50b3Igc29tZXRpbWVzIGxlYXZlcyBzdGFsZSBjbGFzcyB3aXRob3V0IHJlYWwgaW5zdGFuY2UuXHJcblx0XHRcdFx0aWYgKCBqcV9jYWwuaGFzQ2xhc3MoICdoYXNEYXRlcGljaycgKSApIHtcclxuXHRcdFx0XHRcdGpxX2NhbC5yZW1vdmVDbGFzcyggJ2hhc0RhdGVwaWNrJyApO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gVHJ5IHRvIGluaXQgZGF0ZXBpY2sgbWFya3VwIG5vdy5cclxuXHRcdFx0XHR3cGJjX2NhbGVuZGFyX3Nob3coIHJlc291cmNlX2lkICk7XHJcblxyXG5cdFx0XHRcdC8vIFRyeSBhZ2Fpbi5cclxuXHRcdFx0XHRpbnN0ID0gd3BiY19jYWxlbmRhcl9fZ2V0X2luc3QoIHJlc291cmNlX2lkICk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyBTdGlsbCBubyBpbnN0YW5jZSAtPiBkbyBub3QgY3Jhc2ggdGhlIHdob2xlIGFqYXggZmxvdy5cclxuXHRcdGlmICggbnVsbCA9PT0gaW5zdCApIHtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGpRdWVyeS5kYXRlcGljay5fdXBkYXRlRGF0ZXBpY2soIGluc3QgKTtcclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHJcblxyXG5cclxuXHQvKipcclxuXHQgKiBVcGRhdGUgZHluYW1pY2FsbHkgTnVtYmVyIG9mIE1vbnRocyBpbiBjYWxlbmRhclxyXG5cdCAqXHJcblx0ICogQHBhcmFtIHJlc291cmNlX2lkIGludFxyXG5cdCAqIEBwYXJhbSBtb250aHNfbnVtYmVyIGludFxyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIHdwYmNfY2FsZW5kYXJfX3VwZGF0ZV9tb250aHNfbnVtYmVyKCByZXNvdXJjZV9pZCwgbW9udGhzX251bWJlciApe1xyXG5cdFx0dmFyIGluc3QgPSB3cGJjX2NhbGVuZGFyX19nZXRfaW5zdCggcmVzb3VyY2VfaWQgKTtcclxuXHRcdGlmICggbnVsbCAhPT0gaW5zdCApe1xyXG5cdFx0XHRpbnN0LnNldHRpbmdzWyAnbnVtYmVyT2ZNb250aHMnIF0gPSBtb250aHNfbnVtYmVyO1xyXG5cdFx0XHQvL193cGJjLmNhbGVuZGFyX19zZXRfcGFyYW1fdmFsdWUoIHJlc291cmNlX2lkLCAnY2FsZW5kYXJfbnVtYmVyX29mX21vbnRocycsIG1vbnRoc19udW1iZXIgKTtcclxuXHRcdFx0d3BiY19jYWxlbmRhcl9fdXBkYXRlX2xvb2soIHJlc291cmNlX2lkICk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHJcblx0LyoqXHJcblx0ICogU2hvdyBjYWxlbmRhciBpbiAgZGlmZmVyZW50IFNraW5cclxuXHQgKlxyXG5cdCAqIEBwYXJhbSBzZWxlY3RlZF9za2luX3VybFxyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIHdwYmNfX2NhbGVuZGFyX19jaGFuZ2Vfc2tpbiggc2VsZWN0ZWRfc2tpbl91cmwgKXtcclxuXHJcblx0Ly9jb25zb2xlLmxvZyggJ1NLSU4gU0VMRUNUSU9OIDo6Jywgc2VsZWN0ZWRfc2tpbl91cmwgKTtcclxuXHJcblx0XHQvLyBSZW1vdmUgQ1NTIHNraW5cclxuXHRcdHZhciBzdHlsZXNoZWV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICd3cGJjLWNhbGVuZGFyLXNraW4tY3NzJyApO1xyXG5cdFx0c3R5bGVzaGVldC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBzdHlsZXNoZWV0ICk7XHJcblxyXG5cclxuXHRcdC8vIEFkZCBuZXcgQ1NTIHNraW5cclxuXHRcdHZhciBoZWFkSUQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSggXCJoZWFkXCIgKVsgMCBdO1xyXG5cdFx0dmFyIGNzc05vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnbGluaycgKTtcclxuXHRcdGNzc05vZGUudHlwZSA9ICd0ZXh0L2Nzcyc7XHJcblx0XHRjc3NOb2RlLnNldEF0dHJpYnV0ZSggXCJpZFwiLCBcIndwYmMtY2FsZW5kYXItc2tpbi1jc3NcIiApO1xyXG5cdFx0Y3NzTm9kZS5yZWwgPSAnc3R5bGVzaGVldCc7XHJcblx0XHRjc3NOb2RlLm1lZGlhID0gJ3NjcmVlbic7XHJcblx0XHRjc3NOb2RlLmhyZWYgPSBzZWxlY3RlZF9za2luX3VybDtcdC8vXCJodHRwOi8vYmV0YS93cC1jb250ZW50L3BsdWdpbnMvYm9va2luZy9jc3Mvc2tpbnMvZ3JlZW4tMDEuY3NzXCI7XHJcblx0XHRoZWFkSUQuYXBwZW5kQ2hpbGQoIGNzc05vZGUgKTtcclxuXHR9XHJcblxyXG5cclxuXHRmdW5jdGlvbiB3cGJjX19jc3NfX2NoYW5nZV9za2luKCBzZWxlY3RlZF9za2luX3VybCwgc3R5bGVzaGVldF9pZCA9ICd3cGJjLXRpbWVfcGlja2VyLXNraW4tY3NzJyApe1xyXG5cclxuXHRcdC8vIFJlbW92ZSBDU1Mgc2tpblxyXG5cdFx0dmFyIHN0eWxlc2hlZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggc3R5bGVzaGVldF9pZCApO1xyXG5cdFx0c3R5bGVzaGVldC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBzdHlsZXNoZWV0ICk7XHJcblxyXG5cclxuXHRcdC8vIEFkZCBuZXcgQ1NTIHNraW5cclxuXHRcdHZhciBoZWFkSUQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSggXCJoZWFkXCIgKVsgMCBdO1xyXG5cdFx0dmFyIGNzc05vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnbGluaycgKTtcclxuXHRcdGNzc05vZGUudHlwZSA9ICd0ZXh0L2Nzcyc7XHJcblx0XHRjc3NOb2RlLnNldEF0dHJpYnV0ZSggXCJpZFwiLCBzdHlsZXNoZWV0X2lkICk7XHJcblx0XHRjc3NOb2RlLnJlbCA9ICdzdHlsZXNoZWV0JztcclxuXHRcdGNzc05vZGUubWVkaWEgPSAnc2NyZWVuJztcclxuXHRcdGNzc05vZGUuaHJlZiA9IHNlbGVjdGVkX3NraW5fdXJsO1x0Ly9cImh0dHA6Ly9iZXRhL3dwLWNvbnRlbnQvcGx1Z2lucy9ib29raW5nL2Nzcy9za2lucy9ncmVlbi0wMS5jc3NcIjtcclxuXHRcdGhlYWRJRC5hcHBlbmRDaGlsZCggY3NzTm9kZSApO1xyXG5cdH1cclxuXHJcblxyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuLyogID09ICBTIFUgUCBQIE8gUiBUICAgIE0gQSBUIEggID09XHJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogTWVyZ2Ugc2V2ZXJhbCAgaW50ZXJzZWN0ZWQgaW50ZXJ2YWxzIG9yIHJldHVybiBub3QgaW50ZXJzZWN0ZWQ6XHJcblx0XHQgKiBbWzEsM10sWzIsNl0sWzgsMTBdLFsxNSwxOF1dICAtPiAgIFtbMSw2XSxbOCwxMF0sWzE1LDE4XV1cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0gW10gaW50ZXJ2YWxzXHRcdFx0IFsgWzEsM10sWzIsNF0sWzYsOF0sWzksMTBdLFszLDddIF1cclxuXHRcdCAqIEByZXR1cm5zIFtdXHRcdFx0XHRcdCBbIFsxLDhdLFs5LDEwXSBdXHJcblx0XHQgKlxyXG5cdFx0ICogRXhtYW1wbGU6IHdwYmNfaW50ZXJ2YWxzX19tZXJnZV9pbmVyc2VjdGVkKCAgWyBbMSwzXSxbMiw0XSxbNiw4XSxbOSwxMF0sWzMsN10gXSAgKTtcclxuXHRcdCAqL1xyXG5cdFx0ZnVuY3Rpb24gd3BiY19pbnRlcnZhbHNfX21lcmdlX2luZXJzZWN0ZWQoIGludGVydmFscyApe1xyXG5cclxuXHRcdFx0aWYgKCAhIGludGVydmFscyB8fCBpbnRlcnZhbHMubGVuZ3RoID09PSAwICl7XHJcblx0XHRcdFx0cmV0dXJuIFtdO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHR2YXIgbWVyZ2VkID0gW107XHJcblx0XHRcdGludGVydmFscy5zb3J0KCBmdW5jdGlvbiAoIGEsIGIgKXtcclxuXHRcdFx0XHRyZXR1cm4gYVsgMCBdIC0gYlsgMCBdO1xyXG5cdFx0XHR9ICk7XHJcblxyXG5cdFx0XHR2YXIgbWVyZ2VkSW50ZXJ2YWwgPSBpbnRlcnZhbHNbIDAgXTtcclxuXHJcblx0XHRcdGZvciAoIHZhciBpID0gMTsgaSA8IGludGVydmFscy5sZW5ndGg7IGkrKyApe1xyXG5cdFx0XHRcdHZhciBpbnRlcnZhbCA9IGludGVydmFsc1sgaSBdO1xyXG5cclxuXHRcdFx0XHRpZiAoIGludGVydmFsWyAwIF0gPD0gbWVyZ2VkSW50ZXJ2YWxbIDEgXSApe1xyXG5cdFx0XHRcdFx0bWVyZ2VkSW50ZXJ2YWxbIDEgXSA9IE1hdGgubWF4KCBtZXJnZWRJbnRlcnZhbFsgMSBdLCBpbnRlcnZhbFsgMSBdICk7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdG1lcmdlZC5wdXNoKCBtZXJnZWRJbnRlcnZhbCApO1xyXG5cdFx0XHRcdFx0bWVyZ2VkSW50ZXJ2YWwgPSBpbnRlcnZhbDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdG1lcmdlZC5wdXNoKCBtZXJnZWRJbnRlcnZhbCApO1xyXG5cdFx0XHRyZXR1cm4gbWVyZ2VkO1xyXG5cdFx0fVxyXG5cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIElzIDIgaW50ZXJ2YWxzIGludGVyc2VjdGVkOiAgICAgICBbMzYwMTEsIDg2MzkyXSAgICA8PT4gICAgWzEsIDQzMTkyXSAgPT4gIHRydWUgICAgICAoIGludGVyc2VjdGVkIClcclxuXHRcdCAqXHJcblx0XHQgKiBHb29kIGV4cGxhbmF0aW9uICBoZXJlXHJcblx0XHQgKiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8zMjY5NDM0L3doYXRzLXRoZS1tb3N0LWVmZmljaWVudC13YXktdG8tdGVzdC1pZi10d28tcmFuZ2VzLW92ZXJsYXBcclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0gIGludGVydmFsX0EgICAtIFsgMzYwMTEsIDg2MzkyIF1cclxuXHRcdCAqIEBwYXJhbSAgaW50ZXJ2YWxfQiAgIC0gWyAgICAgMSwgNDMxOTIgXVxyXG5cdFx0ICpcclxuXHRcdCAqIEByZXR1cm4gYm9vbFxyXG5cdFx0ICovXHJcblx0XHRmdW5jdGlvbiB3cGJjX2ludGVydmFsc19faXNfaW50ZXJzZWN0ZWQoIGludGVydmFsX0EsIGludGVydmFsX0IgKSB7XHJcblxyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0XHQoIDAgPT0gaW50ZXJ2YWxfQS5sZW5ndGggKVxyXG5cdFx0XHRcdCB8fCAoIDAgPT0gaW50ZXJ2YWxfQi5sZW5ndGggKVxyXG5cdFx0XHQpe1xyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aW50ZXJ2YWxfQVsgMCBdID0gcGFyc2VJbnQoIGludGVydmFsX0FbIDAgXSApO1xyXG5cdFx0XHRpbnRlcnZhbF9BWyAxIF0gPSBwYXJzZUludCggaW50ZXJ2YWxfQVsgMSBdICk7XHJcblx0XHRcdGludGVydmFsX0JbIDAgXSA9IHBhcnNlSW50KCBpbnRlcnZhbF9CWyAwIF0gKTtcclxuXHRcdFx0aW50ZXJ2YWxfQlsgMSBdID0gcGFyc2VJbnQoIGludGVydmFsX0JbIDEgXSApO1xyXG5cclxuXHRcdFx0dmFyIGlzX2ludGVyc2VjdGVkID0gTWF0aC5tYXgoIGludGVydmFsX0FbIDAgXSwgaW50ZXJ2YWxfQlsgMCBdICkgLSBNYXRoLm1pbiggaW50ZXJ2YWxfQVsgMSBdLCBpbnRlcnZhbF9CWyAxIF0gKTtcclxuXHJcblx0XHRcdC8vIGlmICggMCA9PSBpc19pbnRlcnNlY3RlZCApIHtcclxuXHRcdFx0Ly9cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN1Y2ggcmFuZ2VzIGdvaW5nIG9uZSBhZnRlciBvdGhlciwgZS5nLjogWyAxMiwgMTUgXSBhbmQgWyAxNSwgMjEgXVxyXG5cdFx0XHQvLyB9XHJcblxyXG5cdFx0XHRpZiAoIGlzX2ludGVyc2VjdGVkIDwgMCApIHtcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTsgICAgICAgICAgICAgICAgICAgICAvLyBJTlRFUlNFQ1RFRFxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7ICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3QgaW50ZXJzZWN0ZWRcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBHZXQgdGhlIGNsb3NldHMgQUJTIHZhbHVlIG9mIGVsZW1lbnQgaW4gYXJyYXkgdG8gdGhlIGN1cnJlbnQgbXlWYWx1ZVxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSBteVZhbHVlIFx0LSBpbnQgZWxlbWVudCB0byBzZWFyY2ggY2xvc2V0IFx0XHRcdDRcclxuXHRcdCAqIEBwYXJhbSBteUFycmF5XHQtIGFycmF5IG9mIGVsZW1lbnRzIHdoZXJlIHRvIHNlYXJjaCBcdFs1LDgsMSw3XVxyXG5cdFx0ICogQHJldHVybnMgaW50XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0NVxyXG5cdFx0ICovXHJcblx0XHRmdW5jdGlvbiB3cGJjX2dldF9hYnNfY2xvc2VzdF92YWx1ZV9pbl9hcnIoIG15VmFsdWUsIG15QXJyYXkgKXtcclxuXHJcblx0XHRcdGlmICggbXlBcnJheS5sZW5ndGggPT0gMCApeyBcdFx0XHRcdFx0XHRcdFx0Ly8gSWYgdGhlIGFycmF5IGlzIGVtcHR5IC0+IHJldHVybiAgdGhlIG15VmFsdWVcclxuXHRcdFx0XHRyZXR1cm4gbXlWYWx1ZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0dmFyIG9iaiA9IG15QXJyYXlbIDAgXTtcclxuXHRcdFx0dmFyIGRpZmYgPSBNYXRoLmFicyggbXlWYWx1ZSAtIG9iaiApOyAgICAgICAgICAgICBcdC8vIEdldCBkaXN0YW5jZSBiZXR3ZWVuICAxc3QgZWxlbWVudFxyXG5cdFx0XHR2YXIgY2xvc2V0VmFsdWUgPSBteUFycmF5WyAwIF07ICAgICAgICAgICAgICAgICAgIFx0XHRcdC8vIFNhdmUgMXN0IGVsZW1lbnRcclxuXHJcblx0XHRcdGZvciAoIHZhciBpID0gMTsgaSA8IG15QXJyYXkubGVuZ3RoOyBpKysgKXtcclxuXHRcdFx0XHRvYmogPSBteUFycmF5WyBpIF07XHJcblxyXG5cdFx0XHRcdGlmICggTWF0aC5hYnMoIG15VmFsdWUgLSBvYmogKSA8IGRpZmYgKXsgICAgIFx0XHRcdC8vIHdlIGZvdW5kIGNsb3NlciB2YWx1ZSAtPiBzYXZlIGl0XHJcblx0XHRcdFx0XHRkaWZmID0gTWF0aC5hYnMoIG15VmFsdWUgLSBvYmogKTtcclxuXHRcdFx0XHRcdGNsb3NldFZhbHVlID0gb2JqO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cmV0dXJuIGNsb3NldFZhbHVlO1xyXG5cdFx0fVxyXG5cclxuXHJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4vKiAgPT0gIFQgTyBPIEwgVCBJIFAgUyAgPT1cclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG5cdC8qKlxyXG5cdCAqIERlZmluZSB0b29sdGlwIHRvIHNob3csICB3aGVuICBtb3VzZSBvdmVyIERhdGUgaW4gQ2FsZW5kYXJcclxuXHQgKlxyXG5cdCAqIEBwYXJhbSAgdG9vbHRpcF90ZXh0XHRcdFx0LSBUZXh0IHRvIHNob3dcdFx0XHRcdCdCb29rZWQgdGltZTogMTI6MDAgLSAxMzowMDxicj5Db3N0OiAkMjAuMDAnXHJcblx0ICogQHBhcmFtICByZXNvdXJjZV9pZFx0XHRcdC0gSUQgb2YgYm9va2luZyByZXNvdXJjZVx0JzEnXHJcblx0ICogQHBhcmFtICB0ZF9jbGFzc1x0XHRcdFx0LSBTUUwgY2xhc3NcdFx0XHRcdFx0JzEtOS0yMDIzJ1xyXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVx0XHRcdFx0XHQtIGRlZmluZWQgdG8gc2hvdyBvciBub3RcclxuXHQgKi9cclxuXHRmdW5jdGlvbiB3cGJjX3NldF90b29sdGlwX19fZm9yX19jYWxlbmRhcl9kYXRlKCB0b29sdGlwX3RleHQsIHJlc291cmNlX2lkLCB0ZF9jbGFzcyApe1xyXG5cclxuXHRcdC8vVE9ETzogbWFrZSBlc2NhcGluZyBvZiB0ZXh0IGZvciBxdW90IHN5bWJvbHMsICBhbmQgSlMvSFRNTC4uLlxyXG5cclxuXHRcdGpRdWVyeSggJyNjYWxlbmRhcl9ib29raW5nJyArIHJlc291cmNlX2lkICsgJyB0ZC5jYWw0ZGF0ZS0nICsgdGRfY2xhc3MgKS5hdHRyKCAnZGF0YS1jb250ZW50JywgdG9vbHRpcF90ZXh0ICk7XHJcblxyXG5cdFx0dmFyIHRkX2VsID0galF1ZXJ5KCAnI2NhbGVuZGFyX2Jvb2tpbmcnICsgcmVzb3VyY2VfaWQgKyAnIHRkLmNhbDRkYXRlLScgKyB0ZF9jbGFzcyApLmdldCggMCApO1x0XHRcdFx0XHQvLyBGaXhJbjogOS4wLjEuMS5cclxuXHJcblx0XHRpZiAoXHJcblx0XHRcdCAgICggJ3VuZGVmaW5lZCcgIT09IHR5cGVvZih0ZF9lbCkgKVxyXG5cdFx0XHQmJiAoIHVuZGVmaW5lZCA9PSB0ZF9lbC5fdGlwcHkgKVxyXG5cdFx0XHQmJiAoICcnICE9PSB0b29sdGlwX3RleHQgKVxyXG5cdFx0KXtcclxuXHJcblx0XHRcdHdwYmNfdGlwcHkoIHRkX2VsICwge1xyXG5cdFx0XHRcdFx0Y29udGVudCggcmVmZXJlbmNlICl7XHJcblxyXG5cdFx0XHRcdFx0XHR2YXIgcG9wb3Zlcl9jb250ZW50ID0gcmVmZXJlbmNlLmdldEF0dHJpYnV0ZSggJ2RhdGEtY29udGVudCcgKTtcclxuXHJcblx0XHRcdFx0XHRcdHJldHVybiAnPGRpdiBjbGFzcz1cInBvcG92ZXIgcG9wb3Zlcl90aXBweVwiPidcclxuXHRcdFx0XHRcdFx0XHRcdFx0KyAnPGRpdiBjbGFzcz1cInBvcG92ZXItY29udGVudFwiPidcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQrIHBvcG92ZXJfY29udGVudFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQrICc8L2Rpdj4nXHJcblx0XHRcdFx0XHRcdFx0ICsgJzwvZGl2Pic7XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0YWxsb3dIVE1MICAgICAgICA6IHRydWUsXHJcblx0XHRcdFx0XHR0cmlnZ2VyXHRcdFx0IDogJ21vdXNlZW50ZXIgZm9jdXMnLFxyXG5cdFx0XHRcdFx0aW50ZXJhY3RpdmUgICAgICA6IGZhbHNlLFxyXG5cdFx0XHRcdFx0aGlkZU9uQ2xpY2sgICAgICA6IHRydWUsXHJcblx0XHRcdFx0XHRpbnRlcmFjdGl2ZUJvcmRlcjogMTAsXHJcblx0XHRcdFx0XHRtYXhXaWR0aCAgICAgICAgIDogNTUwLFxyXG5cdFx0XHRcdFx0dGhlbWUgICAgICAgICAgICA6ICd3cGJjLXRpcHB5LXRpbWVzJyxcclxuXHRcdFx0XHRcdHBsYWNlbWVudCAgICAgICAgOiAndG9wJyxcclxuXHRcdFx0XHRcdGRlbGF5XHRcdFx0IDogWzQwMCwgMF0sXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRml4SW46IDkuNC4yLjIuXHJcblx0XHRcdFx0XHQvL2RlbGF5XHRcdFx0IDogWzAsIDk5OTk5OTk5OTldLFx0XHRcdFx0XHRcdC8vIERlYnVnZSAgdG9vbHRpcFxyXG5cdFx0XHRcdFx0aWdub3JlQXR0cmlidXRlcyA6IHRydWUsXHJcblx0XHRcdFx0XHR0b3VjaFx0XHRcdCA6IHRydWUsXHRcdFx0XHRcdFx0XHRcdC8vWydob2xkJywgNTAwXSwgLy8gNTAwbXMgZGVsYXlcdFx0XHRcdC8vIEZpeEluOiA5LjIuMS41LlxyXG5cdFx0XHRcdFx0YXBwZW5kVG86ICgpID0+IGRvY3VtZW50LmJvZHksXHJcblx0XHRcdH0pO1xyXG5cclxuXHRcdFx0cmV0dXJuICB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiAgZmFsc2U7XHJcblx0fVxyXG5cclxuXHJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4vKiAgPT0gIERhdGVzIEZ1bmN0aW9ucyAgPT1cclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG4vKipcclxuICogR2V0IG51bWJlciBvZiBkYXRlcyBiZXR3ZWVuIDIgSlMgRGF0ZXNcclxuICpcclxuICogQHBhcmFtIGRhdGUxXHRcdEpTIERhdGVcclxuICogQHBhcmFtIGRhdGUyXHRcdEpTIERhdGVcclxuICogQHJldHVybnMge251bWJlcn1cclxuICovXHJcbmZ1bmN0aW9uIHdwYmNfZGF0ZXNfX2RheXNfYmV0d2VlbihkYXRlMSwgZGF0ZTIpIHtcclxuXHJcbiAgICAvLyBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBpbiBvbmUgZGF5XHJcbiAgICB2YXIgT05FX0RBWSA9IDEwMDAgKiA2MCAqIDYwICogMjQ7XHJcblxyXG4gICAgLy8gQ29udmVydCBib3RoIGRhdGVzIHRvIG1pbGxpc2Vjb25kc1xyXG4gICAgdmFyIGRhdGUxX21zID0gZGF0ZTEuZ2V0VGltZSgpO1xyXG4gICAgdmFyIGRhdGUyX21zID0gZGF0ZTIuZ2V0VGltZSgpO1xyXG5cclxuICAgIC8vIENhbGN1bGF0ZSB0aGUgZGlmZmVyZW5jZSBpbiBtaWxsaXNlY29uZHNcclxuICAgIHZhciBkaWZmZXJlbmNlX21zID0gIGRhdGUxX21zIC0gZGF0ZTJfbXM7XHJcblxyXG4gICAgLy8gQ29udmVydCBiYWNrIHRvIGRheXMgYW5kIHJldHVyblxyXG4gICAgcmV0dXJuIE1hdGgucm91bmQoZGlmZmVyZW5jZV9tcy9PTkVfREFZKTtcclxufVxyXG5cclxuXHJcbi8qKlxyXG4gKiBDaGVjayAgaWYgdGhpcyBhcnJheSAgb2YgZGF0ZXMgaXMgY29uc2VjdXRpdmUgYXJyYXkgIG9mIGRhdGVzIG9yIG5vdC5cclxuICogXHRcdGUuZy4gIFsnMjAyNC0wNS0wOScsJzIwMjQtMDUtMTknLCcyMDI0LTA1LTMwJ10gLT4gZmFsc2VcclxuICogXHRcdGUuZy4gIFsnMjAyNC0wNS0wOScsJzIwMjQtMDUtMTAnLCcyMDI0LTA1LTExJ10gLT4gdHJ1ZVxyXG4gKiBAcGFyYW0gc3FsX2RhdGVzX2Fyclx0IGFycmF5XHRcdGUuZy46IFsnMjAyNC0wNS0wOScsJzIwMjQtMDUtMTknLCcyMDI0LTA1LTMwJ11cclxuICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAqL1xyXG5mdW5jdGlvbiB3cGJjX2RhdGVzX19pc19jb25zZWN1dGl2ZV9kYXRlc19hcnJfcmFuZ2UoIHNxbF9kYXRlc19hcnIgKXtcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIEZpeEluOiAxMC4wLjAuNTAuXHJcblxyXG5cdGlmICggc3FsX2RhdGVzX2Fyci5sZW5ndGggPiAxICl7XHJcblx0XHR2YXIgcHJldmlvc19kYXRlID0gd3BiY19fZ2V0X19qc19kYXRlKCBzcWxfZGF0ZXNfYXJyWyAwIF0gKTtcclxuXHRcdHZhciBjdXJyZW50X2RhdGU7XHJcblxyXG5cdFx0Zm9yICggdmFyIGkgPSAxOyBpIDwgc3FsX2RhdGVzX2Fyci5sZW5ndGg7IGkrKyApe1xyXG5cdFx0XHRjdXJyZW50X2RhdGUgPSB3cGJjX19nZXRfX2pzX2RhdGUoIHNxbF9kYXRlc19hcnJbaV0gKTtcclxuXHJcblx0XHRcdGlmICggd3BiY19kYXRlc19fZGF5c19iZXR3ZWVuKCBjdXJyZW50X2RhdGUsIHByZXZpb3NfZGF0ZSApICE9IDEgKXtcclxuXHRcdFx0XHRyZXR1cm4gIGZhbHNlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRwcmV2aW9zX2RhdGUgPSBjdXJyZW50X2RhdGU7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gdHJ1ZTtcclxufVxyXG5cclxuXHJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4vKiAgPT0gIEF1dG8gRGF0ZXMgU2VsZWN0aW9uICA9PVxyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcbi8qKlxyXG4gKiAgPT0gSG93IHRvICB1c2UgPyA9PVxyXG4gKlxyXG4gKiAgRm9yIERhdGVzIHNlbGVjdGlvbiwgd2UgbmVlZCB0byB1c2UgdGhpcyBsb2dpYyEgICAgIFdlIG5lZWQgc2VsZWN0IHRoZSBkYXRlcyBvbmx5IGFmdGVyIGJvb2tpbmcgZGF0YSBsb2FkZWQhXHJcbiAqXHJcbiAqICBDaGVjayBleGFtcGxlIGJlbGxvdy5cclxuICpcclxuICpcdC8vIEZpcmUgb24gYWxsIGJvb2tpbmcgZGF0ZXMgbG9hZGVkXHJcbiAqXHRqUXVlcnkoICdib2R5JyApLm9uKCAnd3BiY19jYWxlbmRhcl9hanhfX2xvYWRlZF9kYXRhJywgZnVuY3Rpb24gKCBldmVudCwgbG9hZGVkX3Jlc291cmNlX2lkICl7XHJcbiAqXHJcbiAqXHRcdGlmICggbG9hZGVkX3Jlc291cmNlX2lkID09IHNlbGVjdF9kYXRlc19pbl9jYWxlbmRhcl9pZCApe1xyXG4gKlx0XHRcdHdwYmNfYXV0b19zZWxlY3RfZGF0ZXNfaW5fY2FsZW5kYXIoIHNlbGVjdF9kYXRlc19pbl9jYWxlbmRhcl9pZCwgJzIwMjQtMDUtMTUnLCAnMjAyNC0wNS0yNScgKTtcclxuICpcdFx0fVxyXG4gKlx0fSApO1xyXG4gKlxyXG4gKi9cclxuXHJcblxyXG4vKipcclxuICogVHJ5IHRvIEF1dG8gc2VsZWN0IGRhdGVzIGluIHNwZWNpZmljIGNhbGVuZGFyIGJ5IHNpbXVsYXRlZCBjbGlja3MgaW4gZGF0ZXBpY2tlclxyXG4gKlxyXG4gKiBAcGFyYW0gcmVzb3VyY2VfaWRcdFx0MVxyXG4gKiBAcGFyYW0gY2hlY2tfaW5feW1kXHRcdCcyMDI0LTA1LTA5J1x0XHRPUiAgXHRbJzIwMjQtMDUtMDknLCcyMDI0LTA1LTE5JywnMjAyNC0wNS0yMCddXHJcbiAqIEBwYXJhbSBjaGVja19vdXRfeW1kXHRcdCcyMDI0LTA1LTE1J1x0XHRPcHRpb25hbFxyXG4gKlxyXG4gKiBAcmV0dXJucyB7bnVtYmVyfVx0XHRudW1iZXIgb2Ygc2VsZWN0ZWQgZGF0ZXNcclxuICpcclxuICogXHRFeGFtcGxlIDE6XHRcdFx0XHR2YXIgbnVtX3NlbGVjdGVkX2RheXMgPSB3cGJjX2F1dG9fc2VsZWN0X2RhdGVzX2luX2NhbGVuZGFyKCAxLCAnMjAyNC0wNS0xNScsXHJcbiAqICAgICAnMjAyNC0wNS0yNScgKTsgRXhhbXBsZSAyOlx0XHRcdFx0dmFyIG51bV9zZWxlY3RlZF9kYXlzID0gd3BiY19hdXRvX3NlbGVjdF9kYXRlc19pbl9jYWxlbmRhciggMSxcclxuICogICAgIFsnMjAyNC0wNS0wOScsJzIwMjQtMDUtMTknLCcyMDI0LTA1LTIwJ10gKTtcclxuICovXHJcbmZ1bmN0aW9uIHdwYmNfYXV0b19zZWxlY3RfZGF0ZXNfaW5fY2FsZW5kYXIoIHJlc291cmNlX2lkLCBjaGVja19pbl95bWQsIGNoZWNrX291dF95bWQgPSAnJyApe1x0XHRcdFx0XHRcdFx0XHQvLyBGaXhJbjogMTAuMC4wLjQ3LlxyXG5cclxuXHRjb25zb2xlLmxvZyggJ1dQQkNfQVVUT19TRUxFQ1RfREFURVNfSU5fQ0FMRU5EQVIoIFJFU09VUkNFX0lELCBDSEVDS19JTl9ZTUQsIENIRUNLX09VVF9ZTUQgKScsIHJlc291cmNlX2lkLCBjaGVja19pbl95bWQsIGNoZWNrX291dF95bWQgKTtcclxuXHJcblx0aWYgKFxyXG5cdFx0ICAgKCAnMjEwMC0wMS0wMScgPT0gY2hlY2tfaW5feW1kIClcclxuXHRcdHx8ICggJzIxMDAtMDEtMDEnID09IGNoZWNrX291dF95bWQgKVxyXG5cdFx0fHwgKCAoICcnID09IGNoZWNrX2luX3ltZCApICYmICggJycgPT0gY2hlY2tfb3V0X3ltZCApIClcclxuXHQpe1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fVxyXG5cclxuXHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdC8vIElmIFx0Y2hlY2tfaW5feW1kICA9ICBbICcyMDI0LTA1LTA5JywnMjAyNC0wNS0xOScsJzIwMjQtMDUtMzAnIF1cdFx0XHRcdEFSUkFZIG9mIERBVEVTXHRcdFx0XHRcdFx0Ly8gRml4SW46IDEwLjAuMC41MC5cclxuXHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdHZhciBkYXRlc190b19zZWxlY3RfYXJyID0gW107XHJcblx0aWYgKCBBcnJheS5pc0FycmF5KCBjaGVja19pbl95bWQgKSApe1xyXG5cdFx0ZGF0ZXNfdG9fc2VsZWN0X2FyciA9IHdwYmNfY2xvbmVfb2JqKCBjaGVja19pbl95bWQgKTtcclxuXHJcblx0XHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0XHQvLyBFeGNlcHRpb25zIHRvICBzZXQgIFx0TVVMVElQTEUgREFZUyBcdG1vZGVcclxuXHRcdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHRcdC8vIGlmIGRhdGVzIGFzIE5PVCBDT05TRUNVVElWRTogWycyMDI0LTA1LTA5JywnMjAyNC0wNS0xOScsJzIwMjQtMDUtMzAnXSwgLT4gc2V0IE1VTFRJUExFIERBWVMgbW9kZVxyXG5cdFx0aWYgKFxyXG5cdFx0XHQgICAoIGRhdGVzX3RvX3NlbGVjdF9hcnIubGVuZ3RoID4gMCApXHJcblx0XHRcdCYmICggJycgPT0gY2hlY2tfb3V0X3ltZCApXHJcblx0XHRcdCYmICggISB3cGJjX2RhdGVzX19pc19jb25zZWN1dGl2ZV9kYXRlc19hcnJfcmFuZ2UoIGRhdGVzX3RvX3NlbGVjdF9hcnIgKSApXHJcblx0XHQpe1xyXG5cdFx0XHR3cGJjX2NhbF9kYXlzX3NlbGVjdF9fbXVsdGlwbGUoIHJlc291cmNlX2lkICk7XHJcblx0XHR9XHJcblx0XHQvLyBpZiBtdWx0aXBsZSBkYXlzIHRvIHNlbGVjdCwgYnV0IGVuYWJsZWQgU0lOR0xFIGRheSBtb2RlLCAtPiBzZXQgTVVMVElQTEUgREFZUyBtb2RlXHJcblx0XHRpZiAoXHJcblx0XHRcdCAgICggZGF0ZXNfdG9fc2VsZWN0X2Fyci5sZW5ndGggPiAxIClcclxuXHRcdFx0JiYgKCAnJyA9PSBjaGVja19vdXRfeW1kIClcclxuXHRcdFx0JiYgKCAnc2luZ2xlJyA9PT0gX3dwYmMuY2FsZW5kYXJfX2dldF9wYXJhbV92YWx1ZSggcmVzb3VyY2VfaWQsICdkYXlzX3NlbGVjdF9tb2RlJyApIClcclxuXHRcdCl7XHJcblx0XHRcdHdwYmNfY2FsX2RheXNfc2VsZWN0X19tdWx0aXBsZSggcmVzb3VyY2VfaWQgKTtcclxuXHRcdH1cclxuXHRcdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHRcdGNoZWNrX2luX3ltZCA9IGRhdGVzX3RvX3NlbGVjdF9hcnJbIDAgXTtcclxuXHRcdGlmICggJycgPT0gY2hlY2tfb3V0X3ltZCApe1xyXG5cdFx0XHRjaGVja19vdXRfeW1kID0gZGF0ZXNfdG9fc2VsZWN0X2FyclsgKGRhdGVzX3RvX3NlbGVjdF9hcnIubGVuZ3RoLTEpIF07XHJcblx0XHR9XHJcblx0fVxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cclxuXHRpZiAoICcnID09IGNoZWNrX2luX3ltZCApe1xyXG5cdFx0Y2hlY2tfaW5feW1kID0gY2hlY2tfb3V0X3ltZDtcclxuXHR9XHJcblx0aWYgKCAnJyA9PSBjaGVja19vdXRfeW1kICl7XHJcblx0XHRjaGVja19vdXRfeW1kID0gY2hlY2tfaW5feW1kO1xyXG5cdH1cclxuXHJcblx0aWYgKCAndW5kZWZpbmVkJyA9PT0gdHlwZW9mIChyZXNvdXJjZV9pZCkgKXtcclxuXHRcdHJlc291cmNlX2lkID0gJzEnO1xyXG5cdH1cclxuXHJcblxyXG5cdHZhciBpbnN0ID0gd3BiY19jYWxlbmRhcl9fZ2V0X2luc3QoIHJlc291cmNlX2lkICk7XHJcblxyXG5cdGlmICggbnVsbCAhPT0gaW5zdCApe1xyXG5cclxuXHRcdC8vIFVuc2VsZWN0IGFsbCBkYXRlcyBhbmQgc2V0ICBwcm9wZXJ0aWVzIG9mIERhdGVwaWNrXHJcblx0XHRqUXVlcnkoICcjZGF0ZV9ib29raW5nJyArIHJlc291cmNlX2lkICkudmFsKCAnJyApOyAgICAgIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvL0ZpeEluOiA1LjQuM1xyXG5cdFx0aW5zdC5zdGF5T3BlbiA9IGZhbHNlO1xyXG5cdFx0aW5zdC5kYXRlcyA9IFtdO1xyXG5cdFx0dmFyIGNoZWNrX2luX2pzID0gd3BiY19fZ2V0X19qc19kYXRlKCBjaGVja19pbl95bWQgKTtcclxuXHRcdHZhciB0ZF9jZWxsICAgICA9IHdwYmNfZ2V0X2NsaWNrZWRfdGQoIGluc3QuaWQsIGNoZWNrX2luX2pzICk7XHJcblxyXG5cdFx0Ly8gSXMgb21lIHR5cGUgb2YgZXJyb3IsIHRoZW4gc2VsZWN0IG11bHRpcGxlIGRheXMgc2VsZWN0aW9uICBtb2RlLlxyXG5cdFx0aWYgKCAnJyA9PT0gX3dwYmMuY2FsZW5kYXJfX2dldF9wYXJhbV92YWx1ZSggcmVzb3VyY2VfaWQsICdkYXlzX3NlbGVjdF9tb2RlJyApICkge1xyXG4gXHRcdFx0X3dwYmMuY2FsZW5kYXJfX3NldF9wYXJhbV92YWx1ZSggcmVzb3VyY2VfaWQsICdkYXlzX3NlbGVjdF9tb2RlJywgJ211bHRpcGxlJyApO1xyXG5cdFx0fVxyXG5cclxuXHJcblx0XHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHRcdC8vICA9PSBEWU5BTUlDID09XHJcblx0XHRpZiAoICdkeW5hbWljJyA9PT0gX3dwYmMuY2FsZW5kYXJfX2dldF9wYXJhbV92YWx1ZSggcmVzb3VyY2VfaWQsICdkYXlzX3NlbGVjdF9tb2RlJyApICl7XHJcblx0XHRcdC8vIDEtc3QgY2xpY2tcclxuXHRcdFx0aW5zdC5zdGF5T3BlbiA9IGZhbHNlO1xyXG5cdFx0XHRqUXVlcnkuZGF0ZXBpY2suX3NlbGVjdERheSggdGRfY2VsbCwgJyMnICsgaW5zdC5pZCwgY2hlY2tfaW5fanMuZ2V0VGltZSgpICk7XHJcblx0XHRcdGlmICggMCA9PT0gaW5zdC5kYXRlcy5sZW5ndGggKXtcclxuXHRcdFx0XHRyZXR1cm4gMDsgIFx0XHRcdFx0XHRcdFx0XHQvLyBGaXJzdCBjbGljayAgd2FzIHVuc3VjY2Vzc2Z1bCwgc28gd2UgbXVzdCBub3QgbWFrZSBvdGhlciBjbGlja1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyAyLW5kIGNsaWNrXHJcblx0XHRcdHZhciBjaGVja19vdXRfanMgPSB3cGJjX19nZXRfX2pzX2RhdGUoIGNoZWNrX291dF95bWQgKTtcclxuXHRcdFx0dmFyIHRkX2NlbGxfb3V0ID0gd3BiY19nZXRfY2xpY2tlZF90ZCggaW5zdC5pZCwgY2hlY2tfb3V0X2pzICk7XHJcblx0XHRcdGluc3Quc3RheU9wZW4gPSB0cnVlO1xyXG5cdFx0XHRqUXVlcnkuZGF0ZXBpY2suX3NlbGVjdERheSggdGRfY2VsbF9vdXQsICcjJyArIGluc3QuaWQsIGNoZWNrX291dF9qcy5nZXRUaW1lKCkgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHRcdC8vICA9PSBGSVhFRCA9PVxyXG5cdFx0aWYgKCAgJ2ZpeGVkJyA9PT0gX3dwYmMuY2FsZW5kYXJfX2dldF9wYXJhbV92YWx1ZSggcmVzb3VyY2VfaWQsICdkYXlzX3NlbGVjdF9tb2RlJyApKSB7XHJcblx0XHRcdGpRdWVyeS5kYXRlcGljay5fc2VsZWN0RGF5KCB0ZF9jZWxsLCAnIycgKyBpbnN0LmlkLCBjaGVja19pbl9qcy5nZXRUaW1lKCkgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHRcdC8vICA9PSBTSU5HTEUgPT1cclxuXHRcdGlmICggJ3NpbmdsZScgPT09IF93cGJjLmNhbGVuZGFyX19nZXRfcGFyYW1fdmFsdWUoIHJlc291cmNlX2lkLCAnZGF5c19zZWxlY3RfbW9kZScgKSApe1xyXG5cdFx0XHQvL2pRdWVyeS5kYXRlcGljay5fcmVzdHJpY3RNaW5NYXgoIGluc3QsIGpRdWVyeS5kYXRlcGljay5fZGV0ZXJtaW5lRGF0ZSggaW5zdCwgY2hlY2tfaW5fanMsIG51bGwgKSApO1x0XHQvLyBEbyB3ZSBuZWVkIHRvIHJ1biAgdGhpcyA/IFBsZWFzZSBub3RlLCBjaGVja19pbl9qcyBtdXN0ICBoYXZlIHRpbWUsICBtaW4sIHNlYyBkZWZpbmVkIHRvIDAhXHJcblx0XHRcdGpRdWVyeS5kYXRlcGljay5fc2VsZWN0RGF5KCB0ZF9jZWxsLCAnIycgKyBpbnN0LmlkLCBjaGVja19pbl9qcy5nZXRUaW1lKCkgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHRcdC8vICA9PSBNVUxUSVBMRSA9PVxyXG5cdFx0aWYgKCAnbXVsdGlwbGUnID09PSBfd3BiYy5jYWxlbmRhcl9fZ2V0X3BhcmFtX3ZhbHVlKCByZXNvdXJjZV9pZCwgJ2RheXNfc2VsZWN0X21vZGUnICkgKXtcclxuXHJcblx0XHRcdHZhciBkYXRlc19hcnI7XHJcblxyXG5cdFx0XHRpZiAoIGRhdGVzX3RvX3NlbGVjdF9hcnIubGVuZ3RoID4gMCApe1xyXG5cdFx0XHRcdC8vIFNpdHVhdGlvbiwgd2hlbiB3ZSBoYXZlIGRhdGVzIGFycmF5OiBbJzIwMjQtMDUtMDknLCcyMDI0LTA1LTE5JywnMjAyNC0wNS0zMCddLiAgYW5kIG5vdCB0aGUgQ2hlY2sgSW4gLyBDaGVjayAgb3V0IGRhdGVzIGFzIHBhcmFtZXRlciBpbiB0aGlzIGZ1bmN0aW9uXHJcblx0XHRcdFx0ZGF0ZXNfYXJyID0gd3BiY19nZXRfc2VsZWN0aW9uX2RhdGVzX2pzX3N0cl9hcnJfX2Zyb21fYXJyKCBkYXRlc190b19zZWxlY3RfYXJyICk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0ZGF0ZXNfYXJyID0gd3BiY19nZXRfc2VsZWN0aW9uX2RhdGVzX2pzX3N0cl9hcnJfX2Zyb21fY2hlY2tfaW5fb3V0KCBjaGVja19pbl95bWQsIGNoZWNrX291dF95bWQsIGluc3QgKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKCAwID09PSBkYXRlc19hcnIuZGF0ZXNfanMubGVuZ3RoICl7XHJcblx0XHRcdFx0cmV0dXJuIDA7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIEZvciBDYWxlbmRhciBEYXlzIHNlbGVjdGlvblxyXG5cdFx0XHRmb3IgKCB2YXIgaiA9IDA7IGogPCBkYXRlc19hcnIuZGF0ZXNfanMubGVuZ3RoOyBqKysgKXsgICAgICAgLy8gTG9vcCBhcnJheSBvZiBkYXRlc1xyXG5cclxuXHRcdFx0XHR2YXIgc3RyX2RhdGUgPSB3cGJjX19nZXRfX3NxbF9jbGFzc19kYXRlKCBkYXRlc19hcnIuZGF0ZXNfanNbIGogXSApO1xyXG5cclxuXHRcdFx0XHQvLyBEYXRlIHVuYXZhaWxhYmxlICFcclxuXHRcdFx0XHRpZiAoIDAgPT0gX3dwYmMuYm9va2luZ3NfaW5fY2FsZW5kYXJfX2dldF9mb3JfZGF0ZSggcmVzb3VyY2VfaWQsIHN0cl9kYXRlICkuZGF5X2F2YWlsYWJpbGl0eSApe1xyXG5cdFx0XHRcdFx0cmV0dXJuIDA7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRpZiAoIGRhdGVzX2Fyci5kYXRlc19qc1sgaiBdICE9IC0xICkge1xyXG5cdFx0XHRcdFx0aW5zdC5kYXRlcy5wdXNoKCBkYXRlc19hcnIuZGF0ZXNfanNbIGogXSApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0dmFyIGNoZWNrX291dF9kYXRlID0gZGF0ZXNfYXJyLmRhdGVzX2pzWyAoZGF0ZXNfYXJyLmRhdGVzX2pzLmxlbmd0aCAtIDEpIF07XHJcblxyXG5cdFx0XHRpbnN0LmRhdGVzLnB1c2goIGNoZWNrX291dF9kYXRlICk7IFx0XHRcdC8vIE5lZWQgYWRkIG9uZSBhZGRpdGlvbmFsIFNBTUUgZGF0ZSBmb3IgY29ycmVjdCAgd29ya3Mgb2YgZGF0ZXMgc2VsZWN0aW9uICEhISEhXHJcblxyXG5cdFx0XHR2YXIgY2hlY2tvdXRfdGltZXN0YW1wID0gY2hlY2tfb3V0X2RhdGUuZ2V0VGltZSgpO1xyXG5cdFx0XHR2YXIgdGRfY2VsbCA9IHdwYmNfZ2V0X2NsaWNrZWRfdGQoIGluc3QuaWQsIGNoZWNrX291dF9kYXRlICk7XHJcblxyXG5cdFx0XHRqUXVlcnkuZGF0ZXBpY2suX3NlbGVjdERheSggdGRfY2VsbCwgJyMnICsgaW5zdC5pZCwgY2hlY2tvdXRfdGltZXN0YW1wICk7XHJcblx0XHR9XHJcblxyXG5cclxuXHRcdGlmICggMCAhPT0gaW5zdC5kYXRlcy5sZW5ndGggKXtcclxuXHRcdFx0Ly8gU2Nyb2xsIHRvIHNwZWNpZmljIG1vbnRoLCBpZiB3ZSBzZXQgZGF0ZXMgaW4gc29tZSBmdXR1cmUgbW9udGhzXHJcblx0XHRcdHdwYmNfY2FsZW5kYXJfX3Njcm9sbF90byggcmVzb3VyY2VfaWQsIGluc3QuZGF0ZXNbIDAgXS5nZXRGdWxsWWVhcigpLCBpbnN0LmRhdGVzWyAwIF0uZ2V0TW9udGgoKSsxICk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGluc3QuZGF0ZXMubGVuZ3RoO1xyXG5cdH1cclxuXHJcblx0cmV0dXJuIDA7XHJcbn1cclxuXHJcblx0LyoqXHJcblx0ICogR2V0IEhUTUwgdGQgZWxlbWVudCAod2hlcmUgd2FzIGNsaWNrIGluIGNhbGVuZGFyICBkYXkgIGNlbGwpXHJcblx0ICpcclxuXHQgKiBAcGFyYW0gY2FsZW5kYXJfaHRtbF9pZFx0XHRcdCdjYWxlbmRhcl9ib29raW5nMSdcclxuXHQgKiBAcGFyYW0gZGF0ZV9qc1x0XHRcdFx0XHRKUyBEYXRlXHJcblx0ICogQHJldHVybnMgeyp8alF1ZXJ5fVx0XHRcdFx0RG9tIEhUTUwgdGQgZWxlbWVudFxyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIHdwYmNfZ2V0X2NsaWNrZWRfdGQoIGNhbGVuZGFyX2h0bWxfaWQsIGRhdGVfanMgKXtcclxuXHJcblx0ICAgIHZhciB0ZF9jZWxsID0galF1ZXJ5KCAnIycgKyBjYWxlbmRhcl9odG1sX2lkICsgJyAuc3FsX2RhdGVfJyArIHdwYmNfX2dldF9fc3FsX2NsYXNzX2RhdGUoIGRhdGVfanMgKSApLmdldCggMCApO1xyXG5cclxuXHRcdHJldHVybiB0ZF9jZWxsO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogR2V0IGFycmF5cyBvZiBKUyBhbmQgU1FMIGRhdGVzIGFzIGRhdGVzIGFycmF5XHJcblx0ICpcclxuXHQgKiBAcGFyYW0gY2hlY2tfaW5feW1kXHRcdFx0XHRcdFx0XHQnMjAyNC0wNS0xNSdcclxuXHQgKiBAcGFyYW0gY2hlY2tfb3V0X3ltZFx0XHRcdFx0XHRcdFx0JzIwMjQtMDUtMjUnXHJcblx0ICogQHBhcmFtIGluc3RcdFx0XHRcdFx0XHRcdFx0XHREYXRlcGljayBJbnN0LiBVc2Ugd3BiY19jYWxlbmRhcl9fZ2V0X2luc3QoIHJlc291cmNlX2lkICk7XHJcblx0ICogQHJldHVybnMge3tkYXRlc19qczogKltdLCBkYXRlc19zdHI6ICpbXX19XHJcblx0ICovXHJcblx0ZnVuY3Rpb24gd3BiY19nZXRfc2VsZWN0aW9uX2RhdGVzX2pzX3N0cl9hcnJfX2Zyb21fY2hlY2tfaW5fb3V0KCBjaGVja19pbl95bWQsIGNoZWNrX291dF95bWQgLCBpbnN0ICl7XHJcblxyXG5cdFx0dmFyIG9yaWdpbmFsX2FycmF5ID0gW107XHJcblx0XHR2YXIgZGF0ZTtcclxuXHRcdHZhciBia19kaXN0aW5jdF9kYXRlcyA9IFtdO1xyXG5cclxuXHRcdHZhciBjaGVja19pbl9kYXRlID0gY2hlY2tfaW5feW1kLnNwbGl0KCAnLScgKTtcclxuXHRcdHZhciBjaGVja19vdXRfZGF0ZSA9IGNoZWNrX291dF95bWQuc3BsaXQoICctJyApO1xyXG5cclxuXHRcdGRhdGUgPSBuZXcgRGF0ZSgpO1xyXG5cdFx0ZGF0ZS5zZXRGdWxsWWVhciggY2hlY2tfaW5fZGF0ZVsgMCBdLCAoY2hlY2tfaW5fZGF0ZVsgMSBdIC0gMSksIGNoZWNrX2luX2RhdGVbIDIgXSApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHllYXIsIG1vbnRoLCBkYXRlXHJcblx0XHR2YXIgb3JpZ2luYWxfY2hlY2tfaW5fZGF0ZSA9IGRhdGU7XHJcblx0XHRvcmlnaW5hbF9hcnJheS5wdXNoKCBqUXVlcnkuZGF0ZXBpY2suX3Jlc3RyaWN0TWluTWF4KCBpbnN0LCBqUXVlcnkuZGF0ZXBpY2suX2RldGVybWluZURhdGUoIGluc3QsIGRhdGUsIG51bGwgKSApICk7IC8vYWRkIGRhdGVcclxuXHRcdGlmICggISB3cGJjX2luX2FycmF5KCBia19kaXN0aW5jdF9kYXRlcywgKGNoZWNrX2luX2RhdGVbIDIgXSArICcuJyArIGNoZWNrX2luX2RhdGVbIDEgXSArICcuJyArIGNoZWNrX2luX2RhdGVbIDAgXSkgKSApe1xyXG5cdFx0XHRia19kaXN0aW5jdF9kYXRlcy5wdXNoKCBwYXJzZUludChjaGVja19pbl9kYXRlWyAyIF0pICsgJy4nICsgcGFyc2VJbnQoY2hlY2tfaW5fZGF0ZVsgMSBdKSArICcuJyArIGNoZWNrX2luX2RhdGVbIDAgXSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdHZhciBkYXRlX291dCA9IG5ldyBEYXRlKCk7XHJcblx0XHRkYXRlX291dC5zZXRGdWxsWWVhciggY2hlY2tfb3V0X2RhdGVbIDAgXSwgKGNoZWNrX291dF9kYXRlWyAxIF0gLSAxKSwgY2hlY2tfb3V0X2RhdGVbIDIgXSApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHllYXIsIG1vbnRoLCBkYXRlXHJcblx0XHR2YXIgb3JpZ2luYWxfY2hlY2tfb3V0X2RhdGUgPSBkYXRlX291dDtcclxuXHJcblx0XHR2YXIgbWV3RGF0ZSA9IG5ldyBEYXRlKCBvcmlnaW5hbF9jaGVja19pbl9kYXRlLmdldEZ1bGxZZWFyKCksIG9yaWdpbmFsX2NoZWNrX2luX2RhdGUuZ2V0TW9udGgoKSwgb3JpZ2luYWxfY2hlY2tfaW5fZGF0ZS5nZXREYXRlKCkgKTtcclxuXHRcdG1ld0RhdGUuc2V0RGF0ZSggb3JpZ2luYWxfY2hlY2tfaW5fZGF0ZS5nZXREYXRlKCkgKyAxICk7XHJcblxyXG5cdFx0d2hpbGUgKFxyXG5cdFx0XHQob3JpZ2luYWxfY2hlY2tfb3V0X2RhdGUgPiBkYXRlKSAmJlxyXG5cdFx0XHQob3JpZ2luYWxfY2hlY2tfaW5fZGF0ZSAhPSBvcmlnaW5hbF9jaGVja19vdXRfZGF0ZSkgKXtcclxuXHRcdFx0ZGF0ZSA9IG5ldyBEYXRlKCBtZXdEYXRlLmdldEZ1bGxZZWFyKCksIG1ld0RhdGUuZ2V0TW9udGgoKSwgbWV3RGF0ZS5nZXREYXRlKCkgKTtcclxuXHJcblx0XHRcdG9yaWdpbmFsX2FycmF5LnB1c2goIGpRdWVyeS5kYXRlcGljay5fcmVzdHJpY3RNaW5NYXgoIGluc3QsIGpRdWVyeS5kYXRlcGljay5fZGV0ZXJtaW5lRGF0ZSggaW5zdCwgZGF0ZSwgbnVsbCApICkgKTsgLy9hZGQgZGF0ZVxyXG5cdFx0XHRpZiAoICF3cGJjX2luX2FycmF5KCBia19kaXN0aW5jdF9kYXRlcywgKGRhdGUuZ2V0RGF0ZSgpICsgJy4nICsgcGFyc2VJbnQoIGRhdGUuZ2V0TW9udGgoKSArIDEgKSArICcuJyArIGRhdGUuZ2V0RnVsbFllYXIoKSkgKSApe1xyXG5cdFx0XHRcdGJrX2Rpc3RpbmN0X2RhdGVzLnB1c2goIChwYXJzZUludChkYXRlLmdldERhdGUoKSkgKyAnLicgKyBwYXJzZUludCggZGF0ZS5nZXRNb250aCgpICsgMSApICsgJy4nICsgZGF0ZS5nZXRGdWxsWWVhcigpKSApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRtZXdEYXRlID0gbmV3IERhdGUoIGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCBkYXRlLmdldERhdGUoKSApO1xyXG5cdFx0XHRtZXdEYXRlLnNldERhdGUoIG1ld0RhdGUuZ2V0RGF0ZSgpICsgMSApO1xyXG5cdFx0fVxyXG5cdFx0b3JpZ2luYWxfYXJyYXkucG9wKCk7XHJcblx0XHRia19kaXN0aW5jdF9kYXRlcy5wb3AoKTtcclxuXHJcblx0XHRyZXR1cm4geydkYXRlc19qcyc6IG9yaWdpbmFsX2FycmF5LCAnZGF0ZXNfc3RyJzogYmtfZGlzdGluY3RfZGF0ZXN9O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogR2V0IGFycmF5cyBvZiBKUyBhbmQgU1FMIGRhdGVzIGFzIGRhdGVzIGFycmF5XHJcblx0ICpcclxuXHQgKiBAcGFyYW0gZGF0ZXNfdG9fc2VsZWN0X2Fyclx0PSBbJzIwMjQtMDUtMDknLCcyMDI0LTA1LTE5JywnMjAyNC0wNS0zMCddXHJcblx0ICpcclxuXHQgKiBAcmV0dXJucyB7e2RhdGVzX2pzOiAqW10sIGRhdGVzX3N0cjogKltdfX1cclxuXHQgKi9cclxuXHRmdW5jdGlvbiB3cGJjX2dldF9zZWxlY3Rpb25fZGF0ZXNfanNfc3RyX2Fycl9fZnJvbV9hcnIoIGRhdGVzX3RvX3NlbGVjdF9hcnIgKXtcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIEZpeEluOiAxMC4wLjAuNTAuXHJcblxyXG5cdFx0dmFyIG9yaWdpbmFsX2FycmF5ICAgID0gW107XHJcblx0XHR2YXIgYmtfZGlzdGluY3RfZGF0ZXMgPSBbXTtcclxuXHRcdHZhciBvbmVfZGF0ZV9zdHI7XHJcblxyXG5cdFx0Zm9yICggdmFyIGQgPSAwOyBkIDwgZGF0ZXNfdG9fc2VsZWN0X2Fyci5sZW5ndGg7IGQrKyApe1xyXG5cclxuXHRcdFx0b3JpZ2luYWxfYXJyYXkucHVzaCggd3BiY19fZ2V0X19qc19kYXRlKCBkYXRlc190b19zZWxlY3RfYXJyWyBkIF0gKSApO1xyXG5cclxuXHRcdFx0b25lX2RhdGVfc3RyID0gZGF0ZXNfdG9fc2VsZWN0X2FyclsgZCBdLnNwbGl0KCctJylcclxuXHRcdFx0aWYgKCAhIHdwYmNfaW5fYXJyYXkoIGJrX2Rpc3RpbmN0X2RhdGVzLCAob25lX2RhdGVfc3RyWyAyIF0gKyAnLicgKyBvbmVfZGF0ZV9zdHJbIDEgXSArICcuJyArIG9uZV9kYXRlX3N0clsgMCBdKSApICl7XHJcblx0XHRcdFx0YmtfZGlzdGluY3RfZGF0ZXMucHVzaCggcGFyc2VJbnQob25lX2RhdGVfc3RyWyAyIF0pICsgJy4nICsgcGFyc2VJbnQob25lX2RhdGVfc3RyWyAxIF0pICsgJy4nICsgb25lX2RhdGVfc3RyWyAwIF0gKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB7J2RhdGVzX2pzJzogb3JpZ2luYWxfYXJyYXksICdkYXRlc19zdHInOiBvcmlnaW5hbF9hcnJheX07XHJcblx0fVxyXG5cclxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbi8qICA9PSAgQXV0byBGaWxsIEZpZWxkcyAvIEF1dG8gU2VsZWN0IERhdGVzICA9PVxyXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cclxuXHJcbmpRdWVyeSggZG9jdW1lbnQgKS5yZWFkeSggZnVuY3Rpb24gKCl7XHJcblxyXG5cdHZhciB1cmxfcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyggd2luZG93LmxvY2F0aW9uLnNlYXJjaCApO1xyXG5cclxuXHQvLyBEaXNhYmxlIGRheXMgc2VsZWN0aW9uICBpbiBjYWxlbmRhciwgIGFmdGVyICByZWRpcmVjdGlvbiAgZnJvbSAgdGhlIFwiU2VhcmNoIHJlc3VsdHMgcGFnZSwgIGFmdGVyICBzZWFyY2ggIGF2YWlsYWJpbGl0eVwiIFx0XHRcdC8vIEZpeEluOiA4LjguMi4zLlxyXG5cdGlmICAoICdPbicgIT0gX3dwYmMuZ2V0X290aGVyX3BhcmFtKCAnaXNfZW5hYmxlZF9ib29raW5nX3NlYXJjaF9yZXN1bHRzX2RheXNfc2VsZWN0JyApICkge1xyXG5cdFx0aWYgKFxyXG5cdFx0XHQoIHVybF9wYXJhbXMuaGFzKCAnd3BiY19zZWxlY3RfY2hlY2tfaW4nICkgKSAmJlxyXG5cdFx0XHQoIHVybF9wYXJhbXMuaGFzKCAnd3BiY19zZWxlY3RfY2hlY2tfb3V0JyApICkgJiZcclxuXHRcdFx0KCB1cmxfcGFyYW1zLmhhcyggJ3dwYmNfc2VsZWN0X2NhbGVuZGFyX2lkJyApIClcclxuXHRcdCl7XHJcblxyXG5cdFx0XHR2YXIgc2VsZWN0X2RhdGVzX2luX2NhbGVuZGFyX2lkID0gcGFyc2VJbnQoIHVybF9wYXJhbXMuZ2V0KCAnd3BiY19zZWxlY3RfY2FsZW5kYXJfaWQnICkgKTtcclxuXHJcblx0XHRcdC8vIEZpcmUgb24gYWxsIGJvb2tpbmcgZGF0ZXMgbG9hZGVkXHJcblx0XHRcdGpRdWVyeSggJ2JvZHknICkub24oICd3cGJjX2NhbGVuZGFyX2FqeF9fbG9hZGVkX2RhdGEnLCBmdW5jdGlvbiAoIGV2ZW50LCBsb2FkZWRfcmVzb3VyY2VfaWQgKXtcclxuXHJcblx0XHRcdFx0aWYgKCBsb2FkZWRfcmVzb3VyY2VfaWQgPT0gc2VsZWN0X2RhdGVzX2luX2NhbGVuZGFyX2lkICl7XHJcblx0XHRcdFx0XHR3cGJjX2F1dG9fc2VsZWN0X2RhdGVzX2luX2NhbGVuZGFyKCBzZWxlY3RfZGF0ZXNfaW5fY2FsZW5kYXJfaWQsIHVybF9wYXJhbXMuZ2V0KCAnd3BiY19zZWxlY3RfY2hlY2tfaW4nICksIHVybF9wYXJhbXMuZ2V0KCAnd3BiY19zZWxlY3RfY2hlY2tfb3V0JyApICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9ICk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRpZiAoIHVybF9wYXJhbXMuaGFzKCAnd3BiY19hdXRvX2ZpbGwnICkgKXtcclxuXHJcblx0XHR2YXIgd3BiY19hdXRvX2ZpbGxfdmFsdWUgPSB1cmxfcGFyYW1zLmdldCggJ3dwYmNfYXV0b19maWxsJyApO1xyXG5cclxuXHRcdC8vIENvbnZlcnQgYmFjay4gICAgIFNvbWUgc3lzdGVtcyBkbyBub3QgbGlrZSBzeW1ib2wgJ34nIGluIFVSTCwgc28gIHdlIG5lZWQgdG8gcmVwbGFjZSB0byAgc29tZSBvdGhlciBzeW1ib2xzXHJcblx0XHR3cGJjX2F1dG9fZmlsbF92YWx1ZSA9IHdwYmNfYXV0b19maWxsX3ZhbHVlLnJlcGxhY2VBbGwoICdfXl8nLCAnficgKTtcclxuXHJcblx0XHR3cGJjX2F1dG9fZmlsbF9ib29raW5nX2ZpZWxkcyggd3BiY19hdXRvX2ZpbGxfdmFsdWUgKTtcclxuXHR9XHJcblxyXG59ICk7XHJcblxyXG4vKipcclxuICogQXV0b2ZpbGwgLyBzZWxlY3QgYm9va2luZyBmb3JtICBmaWVsZHMgYnkgIHZhbHVlcyBmcm9tICB0aGUgR0VUIHJlcXVlc3QgIHBhcmFtZXRlcjogP3dwYmNfYXV0b19maWxsPVxyXG4gKlxyXG4gKiBAcGFyYW0gYXV0b19maWxsX3N0clxyXG4gKi9cclxuZnVuY3Rpb24gd3BiY19hdXRvX2ZpbGxfYm9va2luZ19maWVsZHMoIGF1dG9fZmlsbF9zdHIgKXtcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIEZpeEluOiAxMC4wLjAuNDguXHJcblxyXG5cdGlmICggJycgPT0gYXV0b19maWxsX3N0ciApe1xyXG5cdFx0cmV0dXJuO1xyXG5cdH1cclxuXHJcbi8vIGNvbnNvbGUubG9nKCAnV1BCQ19BVVRPX0ZJTExfQk9PS0lOR19GSUVMRFMoIEFVVE9fRklMTF9TVFIgKScsIGF1dG9fZmlsbF9zdHIpO1xyXG5cclxuXHR2YXIgZmllbGRzX2FyciA9IHdwYmNfYXV0b19maWxsX2Jvb2tpbmdfZmllbGRzX19wYXJzZSggYXV0b19maWxsX3N0ciApO1xyXG5cclxuXHRmb3IgKCBsZXQgaSA9IDA7IGkgPCBmaWVsZHNfYXJyLmxlbmd0aDsgaSsrICl7XHJcblx0XHRqUXVlcnkoICdbbmFtZT1cIicgKyBmaWVsZHNfYXJyWyBpIF1bICduYW1lJyBdICsgJ1wiXScgKS52YWwoIGZpZWxkc19hcnJbIGkgXVsgJ3ZhbHVlJyBdICk7XHJcblx0fVxyXG59XHJcblxyXG5cdC8qKlxyXG5cdCAqIFBhcnNlIGRhdGEgZnJvbSAgZ2V0IHBhcmFtZXRlcjpcdD93cGJjX2F1dG9fZmlsbD12aXNpdG9yczIzMV4yfm1heF9jYXBhY2l0eTIzMV4yXHJcblx0ICpcclxuXHQgKiBAcGFyYW0gZGF0YV9zdHIgICAgICA9ICAgJ3Zpc2l0b3JzMjMxXjJ+bWF4X2NhcGFjaXR5MjMxXjInO1xyXG5cdCAqIEByZXR1cm5zIHsqfVxyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIHdwYmNfYXV0b19maWxsX2Jvb2tpbmdfZmllbGRzX19wYXJzZSggZGF0YV9zdHIgKXtcclxuXHJcblx0XHR2YXIgZmlsdGVyX29wdGlvbnNfYXJyID0gW107XHJcblxyXG5cdFx0dmFyIGRhdGFfYXJyID0gZGF0YV9zdHIuc3BsaXQoICd+JyApO1xyXG5cclxuXHRcdGZvciAoIHZhciBqID0gMDsgaiA8IGRhdGFfYXJyLmxlbmd0aDsgaisrICl7XHJcblxyXG5cdFx0XHR2YXIgbXlfZm9ybV9maWVsZCA9IGRhdGFfYXJyWyBqIF0uc3BsaXQoICdeJyApO1xyXG5cclxuXHRcdFx0dmFyIGZpbHRlcl9uYW1lICA9ICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIChteV9mb3JtX2ZpZWxkWyAwIF0pKSA/IG15X2Zvcm1fZmllbGRbIDAgXSA6ICcnO1xyXG5cdFx0XHR2YXIgZmlsdGVyX3ZhbHVlID0gKCd1bmRlZmluZWQnICE9PSB0eXBlb2YgKG15X2Zvcm1fZmllbGRbIDEgXSkpID8gbXlfZm9ybV9maWVsZFsgMSBdIDogJyc7XHJcblxyXG5cdFx0XHRmaWx0ZXJfb3B0aW9uc19hcnIucHVzaChcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnbmFtZScgIDogZmlsdGVyX25hbWUsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQndmFsdWUnIDogZmlsdGVyX3ZhbHVlXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0ICAgKTtcclxuXHRcdH1cclxuXHRcdHJldHVybiBmaWx0ZXJfb3B0aW9uc19hcnI7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBQYXJzZSBkYXRhIGZyb20gIGdldCBwYXJhbWV0ZXI6XHQ/c2VhcmNoX2dldF9fY3VzdG9tX3BhcmFtcz0uLi5cclxuXHQgKlxyXG5cdCAqIEBwYXJhbSBkYXRhX3N0ciAgICAgID0gICAndGV4dF5zZWFyY2hfZmllbGRfX2Rpc3BsYXlfY2hlY2tfaW5eMjMuMDUuMjAyNH50ZXh0XnNlYXJjaF9maWVsZF9fZGlzcGxheV9jaGVja19vdXReMjYuMDUuMjAyNH5zZWxlY3Rib3gtb25lXnNlYXJjaF9xdWFudGl0eV4yfnNlbGVjdGJveC1vbmVebG9jYXRpb25eU3BhaW5+c2VsZWN0Ym94LW9uZV5tYXhfY2FwYWNpdHleMn5zZWxlY3Rib3gtb25lXmFtZW5pdHlecGFya2luZ35jaGVja2JveF5zZWFyY2hfZmllbGRfX2V4dGVuZF9zZWFyY2hfZGF5c141fnN1Ym1pdF5eU2VhcmNofmhpZGRlbl5zZWFyY2hfZ2V0X19jaGVja19pbl95bWReMjAyNC0wNS0yM35oaWRkZW5ec2VhcmNoX2dldF9fY2hlY2tfb3V0X3ltZF4yMDI0LTA1LTI2fmhpZGRlbl5zZWFyY2hfZ2V0X190aW1lXn5oaWRkZW5ec2VhcmNoX2dldF9fcXVhbnRpdHleMn5oaWRkZW5ec2VhcmNoX2dldF9fZXh0ZW5kXjV+aGlkZGVuXnNlYXJjaF9nZXRfX3VzZXJzX2lkXn5oaWRkZW5ec2VhcmNoX2dldF9fY3VzdG9tX3BhcmFtc15+JztcclxuXHQgKiBAcmV0dXJucyB7Kn1cclxuXHQgKi9cclxuXHRmdW5jdGlvbiB3cGJjX2F1dG9fZmlsbF9zZWFyY2hfZmllbGRzX19wYXJzZSggZGF0YV9zdHIgKXtcclxuXHJcblx0XHR2YXIgZmlsdGVyX29wdGlvbnNfYXJyID0gW107XHJcblxyXG5cdFx0dmFyIGRhdGFfYXJyID0gZGF0YV9zdHIuc3BsaXQoICd+JyApO1xyXG5cclxuXHRcdGZvciAoIHZhciBqID0gMDsgaiA8IGRhdGFfYXJyLmxlbmd0aDsgaisrICl7XHJcblxyXG5cdFx0XHR2YXIgbXlfZm9ybV9maWVsZCA9IGRhdGFfYXJyWyBqIF0uc3BsaXQoICdeJyApO1xyXG5cclxuXHRcdFx0dmFyIGZpbHRlcl90eXBlICA9ICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIChteV9mb3JtX2ZpZWxkWyAwIF0pKSA/IG15X2Zvcm1fZmllbGRbIDAgXSA6ICcnO1xyXG5cdFx0XHR2YXIgZmlsdGVyX25hbWUgID0gKCd1bmRlZmluZWQnICE9PSB0eXBlb2YgKG15X2Zvcm1fZmllbGRbIDEgXSkpID8gbXlfZm9ybV9maWVsZFsgMSBdIDogJyc7XHJcblx0XHRcdHZhciBmaWx0ZXJfdmFsdWUgPSAoJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiAobXlfZm9ybV9maWVsZFsgMiBdKSkgPyBteV9mb3JtX2ZpZWxkWyAyIF0gOiAnJztcclxuXHJcblx0XHRcdGZpbHRlcl9vcHRpb25zX2Fyci5wdXNoKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCd0eXBlJyAgOiBmaWx0ZXJfdHlwZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCduYW1lJyAgOiBmaWx0ZXJfbmFtZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCd2YWx1ZScgOiBmaWx0ZXJfdmFsdWVcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHQgICApO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGZpbHRlcl9vcHRpb25zX2FycjtcclxuXHR9XHJcblxyXG5cclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbi8qICA9PSAgQXV0byBVcGRhdGUgbnVtYmVyIG9mIG1vbnRocyBpbiBjYWxlbmRhcnMgT04gc2NyZWVuIHNpemUgY2hhbmdlZCAgPT1cclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG4vKipcclxuICogQXV0byBVcGRhdGUgTnVtYmVyIG9mIE1vbnRocyBpbiBDYWxlbmRhciwgZS5nLjogIFx0XHRpZiAgICAoIFdJTkRPV19XSURUSCA8PSA3ODJweCApICAgPj4+IFx0TU9OVEhTX05VTUJFUiA9IDFcclxuICogICBFTFNFOiAgbnVtYmVyIG9mIG1vbnRocyBkZWZpbmVkIGluIHNob3J0Y29kZS5cclxuICogQHBhcmFtIHJlc291cmNlX2lkIGludFxyXG4gKlxyXG4gKi9cclxuZnVuY3Rpb24gd3BiY19jYWxlbmRhcl9fYXV0b191cGRhdGVfbW9udGhzX251bWJlcl9fb25fcmVzaXplKCByZXNvdXJjZV9pZCApe1xyXG5cclxuXHRpZiAoIHRydWUgPT09IF93cGJjLmdldF9vdGhlcl9wYXJhbSggJ2lzX2FsbG93X3NldmVyYWxfbW9udGhzX29uX21vYmlsZScgKSApIHtcclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcblxyXG5cdHZhciBsb2NhbF9fbnVtYmVyX29mX21vbnRocyA9IHBhcnNlSW50KCBfd3BiYy5jYWxlbmRhcl9fZ2V0X3BhcmFtX3ZhbHVlKCByZXNvdXJjZV9pZCwgJ2NhbGVuZGFyX251bWJlcl9vZl9tb250aHMnICkgKTtcclxuXHJcblx0aWYgKCBsb2NhbF9fbnVtYmVyX29mX21vbnRocyA+IDEgKXtcclxuXHJcblx0XHRpZiAoIGpRdWVyeSggd2luZG93ICkud2lkdGgoKSA8PSA3ODIgKXtcclxuXHRcdFx0d3BiY19jYWxlbmRhcl9fdXBkYXRlX21vbnRoc19udW1iZXIoIHJlc291cmNlX2lkLCAxICk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR3cGJjX2NhbGVuZGFyX191cGRhdGVfbW9udGhzX251bWJlciggcmVzb3VyY2VfaWQsIGxvY2FsX19udW1iZXJfb2ZfbW9udGhzICk7XHJcblx0XHR9XHJcblxyXG5cdH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEF1dG8gVXBkYXRlIE51bWJlciBvZiBNb250aHMgaW4gICBBTEwgICBDYWxlbmRhcnNcclxuICpcclxuICovXHJcbmZ1bmN0aW9uIHdwYmNfY2FsZW5kYXJzX19hdXRvX3VwZGF0ZV9tb250aHNfbnVtYmVyKCl7XHJcblxyXG5cdHZhciBhbGxfY2FsZW5kYXJzX2FyciA9IF93cGJjLmNhbGVuZGFyc19hbGxfX2dldCgpO1xyXG5cclxuXHQvLyBUaGlzIExPT1AgXCJmb3IgaW5cIiBpcyBHT09ELCBiZWNhdXNlIHdlIGNoZWNrICBoZXJlIGtleXMgICAgJ2NhbGVuZGFyXycgPT09IGNhbGVuZGFyX2lkLnNsaWNlKCAwLCA5IClcclxuXHRmb3IgKCB2YXIgY2FsZW5kYXJfaWQgaW4gYWxsX2NhbGVuZGFyc19hcnIgKXtcclxuXHRcdGlmICggJ2NhbGVuZGFyXycgPT09IGNhbGVuZGFyX2lkLnNsaWNlKCAwLCA5ICkgKXtcclxuXHRcdFx0dmFyIHJlc291cmNlX2lkID0gcGFyc2VJbnQoIGNhbGVuZGFyX2lkLnNsaWNlKCA5ICkgKTtcdFx0XHQvLyAgJ2NhbGVuZGFyXzMnIC0+IDNcclxuXHRcdFx0aWYgKCByZXNvdXJjZV9pZCA+IDAgKXtcclxuXHRcdFx0XHR3cGJjX2NhbGVuZGFyX19hdXRvX3VwZGF0ZV9tb250aHNfbnVtYmVyX19vbl9yZXNpemUoIHJlc291cmNlX2lkICk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBJZiBicm93c2VyIHdpbmRvdyBjaGFuZ2VkLCAgdGhlbiAgdXBkYXRlIG51bWJlciBvZiBtb250aHMuXHJcbiAqL1xyXG5qUXVlcnkoIHdpbmRvdyApLm9uKCAncmVzaXplJywgZnVuY3Rpb24gKCl7XHJcblx0d3BiY19jYWxlbmRhcnNfX2F1dG9fdXBkYXRlX21vbnRoc19udW1iZXIoKTtcclxufSApO1xyXG5cclxuLyoqXHJcbiAqIEF1dG8gdXBkYXRlIGNhbGVuZGFyIG51bWJlciBvZiBtb250aHMgb24gaW5pdGlhbCBwYWdlIGxvYWRcclxuICovXHJcbmpRdWVyeSggZG9jdW1lbnQgKS5yZWFkeSggZnVuY3Rpb24gKCl7XHJcblx0dmFyIGNsb3NlZF90aW1lciA9IHNldFRpbWVvdXQoIGZ1bmN0aW9uICgpe1xyXG5cdFx0d3BiY19jYWxlbmRhcnNfX2F1dG9fdXBkYXRlX21vbnRoc19udW1iZXIoKTtcclxuXHR9LCAxMDAgKTtcclxufSk7XHJcblxyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuLyogID09ICBDaGVjazogY2FsZW5kYXJfZGF0ZXNfc3RhcnQ6IFwiMjAyNi0wMS0wMVwiLCBjYWxlbmRhcl9kYXRlc19lbmQ6IFwiMjAyNi0xMi0zMVwiID09ICAvLyBGaXhJbjogMTAuMTMuMS40LlxyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHQvKipcclxuXHQgKiBHZXQgU3RhcnQgSlMgRGF0ZSBvZiBzdGFydGluZyBkYXRlcyBpbiBjYWxlbmRhciwgZnJvbSB0aGUgX3dwYmMgb2JqZWN0LlxyXG5cdCAqXHJcblx0ICogQHBhcmFtIGludGVnZXIgcmVzb3VyY2VfaWQgLSByZXNvdXJjZSBJRCwgZS5nLjogMS5cclxuXHQgKi9cclxuXHRmdW5jdGlvbiB3cGJjX2NhbGVuZGFyX19nZXRfZGF0ZXNfc3RhcnQoIHJlc291cmNlX2lkICkge1xyXG5cdFx0cmV0dXJuIHdwYmNfY2FsZW5kYXJfX2dldF9kYXRlX3BhcmFtZXRlciggcmVzb3VyY2VfaWQsICdjYWxlbmRhcl9kYXRlc19zdGFydCcgKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldCBFbmQgSlMgRGF0ZSBvZiBlbmRpbmcgZGF0ZXMgaW4gY2FsZW5kYXIsIGZyb20gdGhlIF93cGJjIG9iamVjdC5cclxuXHQgKlxyXG5cdCAqIEBwYXJhbSBpbnRlZ2VyIHJlc291cmNlX2lkIC0gcmVzb3VyY2UgSUQsIGUuZy46IDEuXHJcblx0ICovXHJcblx0ZnVuY3Rpb24gd3BiY19jYWxlbmRhcl9fZ2V0X2RhdGVzX2VuZChyZXNvdXJjZV9pZCkge1xyXG5cdFx0cmV0dXJuIHdwYmNfY2FsZW5kYXJfX2dldF9kYXRlX3BhcmFtZXRlciggcmVzb3VyY2VfaWQsICdjYWxlbmRhcl9kYXRlc19lbmQnICk7XHJcblx0fVxyXG5cclxuLyoqXHJcbiAqIEdldCB2YWxpZGF0ZXMgZGF0ZSBwYXJhbWV0ZXIuXHJcbiAqXHJcbiAqIEBwYXJhbSByZXNvdXJjZV9pZCAgIC0gMVxyXG4gKiBAcGFyYW0gcGFyYW1ldGVyX3N0ciAtICdjYWxlbmRhcl9kYXRlc19zdGFydCcgfCAnY2FsZW5kYXJfZGF0ZXNfZW5kJyB8IC4uLlxyXG4gKi9cclxuZnVuY3Rpb24gd3BiY19jYWxlbmRhcl9fZ2V0X2RhdGVfcGFyYW1ldGVyKHJlc291cmNlX2lkLCBwYXJhbWV0ZXJfc3RyKSB7XHJcblxyXG5cdHZhciBkYXRlX2V4cGVjdGVkX3ltZCA9IF93cGJjLmNhbGVuZGFyX19nZXRfcGFyYW1fdmFsdWUoIHJlc291cmNlX2lkLCBwYXJhbWV0ZXJfc3RyICk7XHJcblxyXG5cdGlmICggISBkYXRlX2V4cGVjdGVkX3ltZCApIHtcclxuXHRcdHJldHVybiBmYWxzZTsgICAgICAgICAgICAgLy8gJycgfCAwIHwgbnVsbCB8IHVuZGVmaW5lZCAgLT4gZmFsc2UuXHJcblx0fVxyXG5cclxuXHRpZiAoIC0xICE9PSBkYXRlX2V4cGVjdGVkX3ltZC5pbmRleE9mKCAnLScgKSApIHtcclxuXHJcblx0XHR2YXIgZGF0ZV9leHBlY3RlZF95bWRfYXJyID0gZGF0ZV9leHBlY3RlZF95bWQuc3BsaXQoICctJyApO1x0Ly8gJzIwMjUtMDctMjYnIC0+IFsnMjAyNScsICcwNycsICcyNiddXHJcblxyXG5cdFx0aWYgKCBkYXRlX2V4cGVjdGVkX3ltZF9hcnIubGVuZ3RoID4gMCApIHtcclxuXHRcdFx0dmFyIHllYXIgID0gKGRhdGVfZXhwZWN0ZWRfeW1kX2Fyci5sZW5ndGggPiAwKSA/IHBhcnNlSW50KCBkYXRlX2V4cGVjdGVkX3ltZF9hcnJbMF0gKSA6IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKTtcdC8vIFllYXIuXHJcblx0XHRcdHZhciBtb250aCA9IChkYXRlX2V4cGVjdGVkX3ltZF9hcnIubGVuZ3RoID4gMSkgPyAocGFyc2VJbnQoIGRhdGVfZXhwZWN0ZWRfeW1kX2FyclsxXSApIC0gMSkgOiAwOyAgLy8gKG1vbnRoIC0gMSkgb3IgMCAtIEphbi5cclxuXHRcdFx0dmFyIGRheSAgID0gKGRhdGVfZXhwZWN0ZWRfeW1kX2Fyci5sZW5ndGggPiAyKSA/IHBhcnNlSW50KCBkYXRlX2V4cGVjdGVkX3ltZF9hcnJbMl0gKSA6IDE7ICAvLyBkYXRlIG9yIE90aGVyd2lzZSAxc3Qgb2YgbW9udGhcclxuXHJcblx0XHRcdHZhciBkYXRlX2pzID0gbmV3IERhdGUoIHllYXIsIG1vbnRoLCBkYXksIDAsIDAsIDAsIDAgKTtcclxuXHJcblx0XHRcdHJldHVybiBkYXRlX2pzO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cmV0dXJuIGZhbHNlOyAgLy8gRmFsbGJhY2ssICBpZiB3ZSBub3QgcGFyc2VkIHRoaXMgcGFyYW1ldGVyICAnY2FsZW5kYXJfZGF0ZXNfc3RhcnQnID0gJzIwMjUtMDctMjYnLCAgZm9yIGV4YW1wbGUgYmVjYXVzZSBvZiAnY2FsZW5kYXJfZGF0ZXNfc3RhcnQnID0gJ3Nmc2RmJy5cclxufVxyXG4iLCIvKipcclxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuICpcdGluY2x1ZGVzL19fanMvY2FsL2RheXNfc2VsZWN0X2N1c3RvbS5qc1xyXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4gKi9cclxuXHJcbi8vIEZpeEluOiA5LjguOS4yLlxyXG5cclxuLyoqXHJcbiAqIFJlLUluaXQgQ2FsZW5kYXIgYW5kIFJlLVJlbmRlciBpdC5cclxuICpcclxuICogQHBhcmFtIHJlc291cmNlX2lkXHJcbiAqL1xyXG5mdW5jdGlvbiB3cGJjX2NhbF9fcmVfaW5pdCggcmVzb3VyY2VfaWQgKXtcclxuXHJcblx0Ly8gUmVtb3ZlIENMQVNTICBmb3IgYWJpbGl0eSB0byByZS1yZW5kZXIgYW5kIHJlaW5pdCBjYWxlbmRhci5cclxuXHRqUXVlcnkoICcjY2FsZW5kYXJfYm9va2luZycgKyByZXNvdXJjZV9pZCApLnJlbW92ZUNsYXNzKCAnaGFzRGF0ZXBpY2snICk7XHJcblx0d3BiY19jYWxlbmRhcl9zaG93KCByZXNvdXJjZV9pZCApO1xyXG59XHJcblxyXG5cclxuLyoqXHJcbiAqIFJlLUluaXQgcHJldmlvdXNseSAgc2F2ZWQgZGF5cyBzZWxlY3Rpb24gIHZhcmlhYmxlcy5cclxuICpcclxuICogQHBhcmFtIHJlc291cmNlX2lkXHJcbiAqL1xyXG5mdW5jdGlvbiB3cGJjX2NhbF9kYXlzX3NlbGVjdF9fcmVfaW5pdCggcmVzb3VyY2VfaWQgKXtcclxuXHJcblx0X3dwYmMuY2FsZW5kYXJfX3NldF9wYXJhbV92YWx1ZSggcmVzb3VyY2VfaWQsICdzYXZlZF92YXJpYWJsZV9fX2RheXNfc2VsZWN0X2luaXRpYWwnXHJcblx0XHQsIHtcclxuXHRcdFx0J2R5bmFtaWNfX2RheXNfbWluJyAgICAgICAgOiBfd3BiYy5jYWxlbmRhcl9fZ2V0X3BhcmFtX3ZhbHVlKCByZXNvdXJjZV9pZCwgJ2R5bmFtaWNfX2RheXNfbWluJyApLFxyXG5cdFx0XHQnZHluYW1pY19fZGF5c19tYXgnICAgICAgICA6IF93cGJjLmNhbGVuZGFyX19nZXRfcGFyYW1fdmFsdWUoIHJlc291cmNlX2lkLCAnZHluYW1pY19fZGF5c19tYXgnICksXHJcblx0XHRcdCdkeW5hbWljX19kYXlzX3NwZWNpZmljJyAgIDogX3dwYmMuY2FsZW5kYXJfX2dldF9wYXJhbV92YWx1ZSggcmVzb3VyY2VfaWQsICdkeW5hbWljX19kYXlzX3NwZWNpZmljJyApLFxyXG5cdFx0XHQnZHluYW1pY19fd2Vla19kYXlzX19zdGFydCc6IF93cGJjLmNhbGVuZGFyX19nZXRfcGFyYW1fdmFsdWUoIHJlc291cmNlX2lkLCAnZHluYW1pY19fd2Vla19kYXlzX19zdGFydCcgKSxcclxuXHRcdFx0J2ZpeGVkX19kYXlzX251bScgICAgICAgICAgOiBfd3BiYy5jYWxlbmRhcl9fZ2V0X3BhcmFtX3ZhbHVlKCByZXNvdXJjZV9pZCwgJ2ZpeGVkX19kYXlzX251bScgKSxcclxuXHRcdFx0J2ZpeGVkX193ZWVrX2RheXNfX3N0YXJ0JyAgOiBfd3BiYy5jYWxlbmRhcl9fZ2V0X3BhcmFtX3ZhbHVlKCByZXNvdXJjZV9pZCwgJ2ZpeGVkX193ZWVrX2RheXNfX3N0YXJ0JyApXHJcblx0XHR9XHJcblx0KTtcclxufVxyXG5cclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4vKipcclxuICogU2V0IFNpbmdsZSBEYXkgc2VsZWN0aW9uIC0gYWZ0ZXIgcGFnZSBsb2FkXHJcbiAqXHJcbiAqIEBwYXJhbSByZXNvdXJjZV9pZFx0XHRJRCBvZiBib29raW5nIHJlc291cmNlXHJcbiAqL1xyXG5mdW5jdGlvbiB3cGJjX2NhbF9yZWFkeV9kYXlzX3NlbGVjdF9fc2luZ2xlKCByZXNvdXJjZV9pZCApe1xyXG5cclxuXHQvLyBSZS1kZWZpbmUgc2VsZWN0aW9uLCBvbmx5IGFmdGVyIHBhZ2UgbG9hZGVkIHdpdGggYWxsIGluaXQgdmFyc1xyXG5cdGpRdWVyeShkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXtcclxuXHJcblx0XHQvLyBXYWl0IDEgc2Vjb25kLCBqdXN0IHRvICBiZSBzdXJlLCB0aGF0IGFsbCBpbml0IHZhcnMgZGVmaW5lZFxyXG5cdFx0c2V0VGltZW91dChmdW5jdGlvbigpe1xyXG5cclxuXHRcdFx0d3BiY19jYWxfZGF5c19zZWxlY3RfX3NpbmdsZSggcmVzb3VyY2VfaWQgKTtcclxuXHJcblx0XHR9LCAxMDAwKTtcclxuXHR9KTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFNldCBTaW5nbGUgRGF5IHNlbGVjdGlvblxyXG4gKiBDYW4gYmUgcnVuIGF0IGFueSAgdGltZSwgIHdoZW4gIGNhbGVuZGFyIGRlZmluZWQgLSB1c2VmdWwgZm9yIGNvbnNvbGUgcnVuLlxyXG4gKlxyXG4gKiBAcGFyYW0gcmVzb3VyY2VfaWRcdFx0SUQgb2YgYm9va2luZyByZXNvdXJjZVxyXG4gKi9cclxuZnVuY3Rpb24gd3BiY19jYWxfZGF5c19zZWxlY3RfX3NpbmdsZSggcmVzb3VyY2VfaWQgKXtcclxuXHJcblx0X3dwYmMuY2FsZW5kYXJfX3NldF9wYXJhbWV0ZXJzKCByZXNvdXJjZV9pZCwgeydkYXlzX3NlbGVjdF9tb2RlJzogJ3NpbmdsZSd9ICk7XHJcblxyXG5cdHdwYmNfY2FsX2RheXNfc2VsZWN0X19yZV9pbml0KCByZXNvdXJjZV9pZCApO1xyXG5cdHdwYmNfY2FsX19yZV9pbml0KCByZXNvdXJjZV9pZCApO1xyXG59XHJcblxyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbi8qKlxyXG4gKiBTZXQgTXVsdGlwbGUgRGF5cyBzZWxlY3Rpb24gIC0gYWZ0ZXIgcGFnZSBsb2FkXHJcbiAqXHJcbiAqIEBwYXJhbSByZXNvdXJjZV9pZFx0XHRJRCBvZiBib29raW5nIHJlc291cmNlXHJcbiAqL1xyXG5mdW5jdGlvbiB3cGJjX2NhbF9yZWFkeV9kYXlzX3NlbGVjdF9fbXVsdGlwbGUoIHJlc291cmNlX2lkICl7XHJcblxyXG5cdC8vIFJlLWRlZmluZSBzZWxlY3Rpb24sIG9ubHkgYWZ0ZXIgcGFnZSBsb2FkZWQgd2l0aCBhbGwgaW5pdCB2YXJzXHJcblx0alF1ZXJ5KGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpe1xyXG5cclxuXHRcdC8vIFdhaXQgMSBzZWNvbmQsIGp1c3QgdG8gIGJlIHN1cmUsIHRoYXQgYWxsIGluaXQgdmFycyBkZWZpbmVkXHJcblx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XHJcblxyXG5cdFx0XHR3cGJjX2NhbF9kYXlzX3NlbGVjdF9fbXVsdGlwbGUoIHJlc291cmNlX2lkICk7XHJcblxyXG5cdFx0fSwgMTAwMCk7XHJcblx0fSk7XHJcbn1cclxuXHJcblxyXG4vKipcclxuICogU2V0IE11bHRpcGxlIERheXMgc2VsZWN0aW9uXHJcbiAqIENhbiBiZSBydW4gYXQgYW55ICB0aW1lLCAgd2hlbiAgY2FsZW5kYXIgZGVmaW5lZCAtIHVzZWZ1bCBmb3IgY29uc29sZSBydW4uXHJcbiAqXHJcbiAqIEBwYXJhbSByZXNvdXJjZV9pZFx0XHRJRCBvZiBib29raW5nIHJlc291cmNlXHJcbiAqL1xyXG5mdW5jdGlvbiB3cGJjX2NhbF9kYXlzX3NlbGVjdF9fbXVsdGlwbGUoIHJlc291cmNlX2lkICl7XHJcblxyXG5cdF93cGJjLmNhbGVuZGFyX19zZXRfcGFyYW1ldGVycyggcmVzb3VyY2VfaWQsIHsnZGF5c19zZWxlY3RfbW9kZSc6ICdtdWx0aXBsZSd9ICk7XHJcblxyXG5cdHdwYmNfY2FsX2RheXNfc2VsZWN0X19yZV9pbml0KCByZXNvdXJjZV9pZCApO1xyXG5cdHdwYmNfY2FsX19yZV9pbml0KCByZXNvdXJjZV9pZCApO1xyXG59XHJcblxyXG5cclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4vKipcclxuICogU2V0IEZpeGVkIERheXMgc2VsZWN0aW9uIHdpdGggIDEgbW91c2UgY2xpY2sgIC0gYWZ0ZXIgcGFnZSBsb2FkXHJcbiAqXHJcbiAqIEBpbnRlZ2VyIHJlc291cmNlX2lkXHRcdFx0LSAxXHRcdFx0XHQgICAtLSBJRCBvZiBib29raW5nIHJlc291cmNlIChjYWxlbmRhcikgLVxyXG4gKiBAaW50ZWdlciBkYXlzX251bWJlclx0XHRcdC0gM1x0XHRcdFx0ICAgLS0gbnVtYmVyIG9mIGRheXMgdG8gIHNlbGVjdFx0LVxyXG4gKiBAYXJyYXkgd2Vla19kYXlzX19zdGFydFx0LSBbLTFdIHwgWyAxLCA1XSAgIC0tICB7IC0xIC0gQW55IHwgMCAtIFN1LCAgMSAtIE1vLCAgMiAtIFR1LCAzIC0gV2UsIDQgLSBUaCwgNSAtIEZyLCA2IC0gU2F0IH1cclxuICovXHJcbmZ1bmN0aW9uIHdwYmNfY2FsX3JlYWR5X2RheXNfc2VsZWN0X19maXhlZCggcmVzb3VyY2VfaWQsIGRheXNfbnVtYmVyLCB3ZWVrX2RheXNfX3N0YXJ0ID0gWy0xXSApe1xyXG5cclxuXHQvLyBSZS1kZWZpbmUgc2VsZWN0aW9uLCBvbmx5IGFmdGVyIHBhZ2UgbG9hZGVkIHdpdGggYWxsIGluaXQgdmFyc1xyXG5cdGpRdWVyeShkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXtcclxuXHJcblx0XHQvLyBXYWl0IDEgc2Vjb25kLCBqdXN0IHRvICBiZSBzdXJlLCB0aGF0IGFsbCBpbml0IHZhcnMgZGVmaW5lZFxyXG5cdFx0c2V0VGltZW91dChmdW5jdGlvbigpe1xyXG5cclxuXHRcdFx0d3BiY19jYWxfZGF5c19zZWxlY3RfX2ZpeGVkKCByZXNvdXJjZV9pZCwgZGF5c19udW1iZXIsIHdlZWtfZGF5c19fc3RhcnQgKTtcclxuXHJcblx0XHR9LCAxMDAwKTtcclxuXHR9KTtcclxufVxyXG5cclxuXHJcbi8qKlxyXG4gKiBTZXQgRml4ZWQgRGF5cyBzZWxlY3Rpb24gd2l0aCAgMSBtb3VzZSBjbGlja1xyXG4gKiBDYW4gYmUgcnVuIGF0IGFueSAgdGltZSwgIHdoZW4gIGNhbGVuZGFyIGRlZmluZWQgLSB1c2VmdWwgZm9yIGNvbnNvbGUgcnVuLlxyXG4gKlxyXG4gKiBAaW50ZWdlciByZXNvdXJjZV9pZFx0XHRcdC0gMVx0XHRcdFx0ICAgLS0gSUQgb2YgYm9va2luZyByZXNvdXJjZSAoY2FsZW5kYXIpIC1cclxuICogQGludGVnZXIgZGF5c19udW1iZXJcdFx0XHQtIDNcdFx0XHRcdCAgIC0tIG51bWJlciBvZiBkYXlzIHRvICBzZWxlY3RcdC1cclxuICogQGFycmF5IHdlZWtfZGF5c19fc3RhcnRcdC0gWy0xXSB8IFsgMSwgNV0gICAtLSAgeyAtMSAtIEFueSB8IDAgLSBTdSwgIDEgLSBNbywgIDIgLSBUdSwgMyAtIFdlLCA0IC0gVGgsIDUgLSBGciwgNiAtIFNhdCB9XHJcbiAqL1xyXG5mdW5jdGlvbiB3cGJjX2NhbF9kYXlzX3NlbGVjdF9fZml4ZWQoIHJlc291cmNlX2lkLCBkYXlzX251bWJlciwgd2Vla19kYXlzX19zdGFydCA9IFstMV0gKXtcclxuXHJcblx0X3dwYmMuY2FsZW5kYXJfX3NldF9wYXJhbWV0ZXJzKCByZXNvdXJjZV9pZCwgeydkYXlzX3NlbGVjdF9tb2RlJzogJ2ZpeGVkJ30gKTtcclxuXHJcblx0X3dwYmMuY2FsZW5kYXJfX3NldF9wYXJhbWV0ZXJzKCByZXNvdXJjZV9pZCwgeydmaXhlZF9fZGF5c19udW0nOiBwYXJzZUludCggZGF5c19udW1iZXIgKX0gKTtcdFx0XHQvLyBOdW1iZXIgb2YgZGF5cyBzZWxlY3Rpb24gd2l0aCAxIG1vdXNlIGNsaWNrXHJcblx0X3dwYmMuY2FsZW5kYXJfX3NldF9wYXJhbWV0ZXJzKCByZXNvdXJjZV9pZCwgeydmaXhlZF9fd2Vla19kYXlzX19zdGFydCc6IHdlZWtfZGF5c19fc3RhcnR9ICk7IFx0Ly8geyAtMSAtIEFueSB8IDAgLSBTdSwgIDEgLSBNbywgIDIgLSBUdSwgMyAtIFdlLCA0IC0gVGgsIDUgLSBGciwgNiAtIFNhdCB9XHJcblxyXG5cdHdwYmNfY2FsX2RheXNfc2VsZWN0X19yZV9pbml0KCByZXNvdXJjZV9pZCApO1xyXG5cdHdwYmNfY2FsX19yZV9pbml0KCByZXNvdXJjZV9pZCApO1xyXG59XHJcblxyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBTZXQgdGhlIGV4aXN0aW5nIGNhbGVuZGFyIHBhcmFtZXRlcnMgdG8gdHdvLWNsaWNrIHJhbmdlIG1vZGUgYWZ0ZXIgcGFnZSBsb2FkLlxuICogRnJlZSB1c2VzIHRoZSB1bnJlc3RyaWN0ZWQgc2hhcmVkIGhhbmRsZXI7IEJ1c2luZXNzIFNtYWxsKyBrZWVwcyBpdHMgYWxyZWFkeSBpbml0aWFsaXplZCBhZHZhbmNlZCByYW5nZSBydWxlcy5cbiAqXG4gKiBAcGFyYW0gcmVzb3VyY2VfaWQgSUQgb2YgYm9va2luZyByZXNvdXJjZS5cbiAqL1xuZnVuY3Rpb24gd3BiY19jYWxfcmVhZHlfZGF5c19zZWxlY3RfX3JhbmdlX21vZGUoIHJlc291cmNlX2lkICl7XG5cblx0alF1ZXJ5KGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpe1xuXHRcdHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcblx0XHRcdHdwYmNfY2FsX2RheXNfc2VsZWN0X19yYW5nZV9tb2RlKCByZXNvdXJjZV9pZCApO1xuXHRcdH0sIDEwMDApO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBTd2l0Y2ggdG8gdHdvLWNsaWNrIHJhbmdlIG1vZGUgd2l0aG91dCBjaGFuZ2luZyBhbnkgYWR2YW5jZWQgcmFuZ2UgcGFyYW1ldGVycy5cbiAqXG4gKiBAcGFyYW0gcmVzb3VyY2VfaWQgSUQgb2YgYm9va2luZyByZXNvdXJjZS5cbiAqL1xuZnVuY3Rpb24gd3BiY19jYWxfZGF5c19zZWxlY3RfX3JhbmdlX21vZGUoIHJlc291cmNlX2lkICl7XG5cblx0X3dwYmMuY2FsZW5kYXJfX3NldF9wYXJhbWV0ZXJzKCByZXNvdXJjZV9pZCwgeydkYXlzX3NlbGVjdF9tb2RlJzogJ2R5bmFtaWMnfSApO1xuXG5cdHdwYmNfY2FsX2RheXNfc2VsZWN0X19yZV9pbml0KCByZXNvdXJjZV9pZCApO1xuXHR3cGJjX2NhbF9fcmVfaW5pdCggcmVzb3VyY2VfaWQgKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogU2V0IFJhbmdlIERheXMgc2VsZWN0aW9uICB3aXRoICAyIG1vdXNlIGNsaWNrcyAgLSBhZnRlciBwYWdlIGxvYWRcbiAqXHJcbiAqIEBpbnRlZ2VyIHJlc291cmNlX2lkXHRcdFx0LSAxXHRcdFx0XHQgICBcdFx0LS0gSUQgb2YgYm9va2luZyByZXNvdXJjZSAoY2FsZW5kYXIpXHJcbiAqIEBpbnRlZ2VyIGRheXNfbWluXHRcdFx0LSA3XHRcdFx0XHQgICBcdFx0LS0gTWluIG51bWJlciBvZiBkYXlzIHRvIHNlbGVjdFxyXG4gKiBAaW50ZWdlciBkYXlzX21heFx0XHRcdC0gMzBcdFx0XHQgICBcdFx0LS0gTWF4IG51bWJlciBvZiBkYXlzIHRvIHNlbGVjdFxyXG4gKiBAYXJyYXkgZGF5c19zcGVjaWZpY1x0XHRcdC0gW10gfCBbNywxNCwyMSwyOF1cdFx0LS0gUmVzdHJpY3Rpb24gZm9yIFNwZWNpZmljIG51bWJlciBvZiBkYXlzIHNlbGVjdGlvblxyXG4gKiBAYXJyYXkgd2Vla19kYXlzX19zdGFydFx0XHQtIFstMV0gfCBbIDEsIDVdICAgXHRcdC0tICB7IC0xIC0gQW55IHwgMCAtIFN1LCAgMSAtIE1vLCAgMiAtIFR1LCAzIC0gV2UsIDQgLSBUaCwgNSAtIEZyLCA2IC0gU2F0IH1cclxuICovXHJcbmZ1bmN0aW9uIHdwYmNfY2FsX3JlYWR5X2RheXNfc2VsZWN0X19yYW5nZSggcmVzb3VyY2VfaWQsIGRheXNfbWluLCBkYXlzX21heCwgZGF5c19zcGVjaWZpYyA9IFtdLCB3ZWVrX2RheXNfX3N0YXJ0ID0gWy0xXSApe1xyXG5cclxuXHQvLyBSZS1kZWZpbmUgc2VsZWN0aW9uLCBvbmx5IGFmdGVyIHBhZ2UgbG9hZGVkIHdpdGggYWxsIGluaXQgdmFyc1xyXG5cdGpRdWVyeShkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXtcclxuXHJcblx0XHQvLyBXYWl0IDEgc2Vjb25kLCBqdXN0IHRvICBiZSBzdXJlLCB0aGF0IGFsbCBpbml0IHZhcnMgZGVmaW5lZFxyXG5cdFx0c2V0VGltZW91dChmdW5jdGlvbigpe1xyXG5cclxuXHRcdFx0d3BiY19jYWxfZGF5c19zZWxlY3RfX3JhbmdlKCByZXNvdXJjZV9pZCwgZGF5c19taW4sIGRheXNfbWF4LCBkYXlzX3NwZWNpZmljLCB3ZWVrX2RheXNfX3N0YXJ0ICk7XHJcblx0XHR9LCAxMDAwKTtcclxuXHR9KTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFNldCBSYW5nZSBEYXlzIHNlbGVjdGlvbiAgd2l0aCAgMiBtb3VzZSBjbGlja3NcclxuICogQ2FuIGJlIHJ1biBhdCBhbnkgIHRpbWUsICB3aGVuICBjYWxlbmRhciBkZWZpbmVkIC0gdXNlZnVsIGZvciBjb25zb2xlIHJ1bi5cclxuICpcclxuICogQGludGVnZXIgcmVzb3VyY2VfaWRcdFx0XHQtIDFcdFx0XHRcdCAgIFx0XHQtLSBJRCBvZiBib29raW5nIHJlc291cmNlIChjYWxlbmRhcilcclxuICogQGludGVnZXIgZGF5c19taW5cdFx0XHQtIDdcdFx0XHRcdCAgIFx0XHQtLSBNaW4gbnVtYmVyIG9mIGRheXMgdG8gc2VsZWN0XHJcbiAqIEBpbnRlZ2VyIGRheXNfbWF4XHRcdFx0LSAzMFx0XHRcdCAgIFx0XHQtLSBNYXggbnVtYmVyIG9mIGRheXMgdG8gc2VsZWN0XHJcbiAqIEBhcnJheSBkYXlzX3NwZWNpZmljXHRcdFx0LSBbXSB8IFs3LDE0LDIxLDI4XVx0XHQtLSBSZXN0cmljdGlvbiBmb3IgU3BlY2lmaWMgbnVtYmVyIG9mIGRheXMgc2VsZWN0aW9uXHJcbiAqIEBhcnJheSB3ZWVrX2RheXNfX3N0YXJ0XHRcdC0gWy0xXSB8IFsgMSwgNV0gICBcdFx0LS0gIHsgLTEgLSBBbnkgfCAwIC0gU3UsICAxIC0gTW8sICAyIC0gVHUsIDMgLSBXZSwgNCAtIFRoLCA1IC0gRnIsIDYgLSBTYXQgfVxyXG4gKi9cclxuZnVuY3Rpb24gd3BiY19jYWxfZGF5c19zZWxlY3RfX3JhbmdlKCByZXNvdXJjZV9pZCwgZGF5c19taW4sIGRheXNfbWF4LCBkYXlzX3NwZWNpZmljID0gW10sIHdlZWtfZGF5c19fc3RhcnQgPSBbLTFdICl7XHJcblxyXG5cdF93cGJjLmNhbGVuZGFyX19zZXRfcGFyYW1ldGVycyggIHJlc291cmNlX2lkLCB7J2RheXNfc2VsZWN0X21vZGUnOiAnZHluYW1pYyd9ICApO1xyXG5cdF93cGJjLmNhbGVuZGFyX19zZXRfcGFyYW1fdmFsdWUoIHJlc291cmNlX2lkLCAnZHluYW1pY19fZGF5c19taW4nICAgICAgICAgLCBwYXJzZUludCggZGF5c19taW4gKSAgKTsgICAgICAgICAgIFx0XHQvLyBNaW4uIE51bWJlciBvZiBkYXlzIHNlbGVjdGlvbiB3aXRoIDIgbW91c2UgY2xpY2tzXHJcblx0X3dwYmMuY2FsZW5kYXJfX3NldF9wYXJhbV92YWx1ZSggcmVzb3VyY2VfaWQsICdkeW5hbWljX19kYXlzX21heCcgICAgICAgICAsIHBhcnNlSW50KCBkYXlzX21heCApICApOyAgICAgICAgICBcdFx0Ly8gTWF4LiBOdW1iZXIgb2YgZGF5cyBzZWxlY3Rpb24gd2l0aCAyIG1vdXNlIGNsaWNrc1xyXG5cdF93cGJjLmNhbGVuZGFyX19zZXRfcGFyYW1fdmFsdWUoIHJlc291cmNlX2lkLCAnZHluYW1pY19fZGF5c19zcGVjaWZpYycgICAgLCBkYXlzX3NwZWNpZmljICApO1x0ICAgICAgXHRcdFx0XHQvLyBFeGFtcGxlIFs1LDddXHJcblx0X3dwYmMuY2FsZW5kYXJfX3NldF9wYXJhbV92YWx1ZSggcmVzb3VyY2VfaWQsICdkeW5hbWljX193ZWVrX2RheXNfX3N0YXJ0JyAsIHdlZWtfZGF5c19fc3RhcnQgICk7ICBcdFx0XHRcdFx0Ly8geyAtMSAtIEFueSB8IDAgLSBTdSwgIDEgLSBNbywgIDIgLSBUdSwgMyAtIFdlLCA0IC0gVGgsIDUgLSBGciwgNiAtIFNhdCB9XHJcblxyXG5cdHdwYmNfY2FsX2RheXNfc2VsZWN0X19yZV9pbml0KCByZXNvdXJjZV9pZCApO1xyXG5cdHdwYmNfY2FsX19yZV9pbml0KCByZXNvdXJjZV9pZCApO1xyXG59XHJcbiIsIi8qKlxyXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4gKlx0aW5jbHVkZXMvX19qcy9jYWxfYWp4X2xvYWQvd3BiY19jYWxfYWp4LmpzXHJcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbiAqL1xyXG5cclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbi8vICBBIGogYSB4ICAgIEwgbyBhIGQgICAgQyBhIGwgZSBuIGQgYSByICAgIEQgYSB0IGFcclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5mdW5jdGlvbiB3cGJjX2NhbGVuZGFyX19sb2FkX2RhdGFfX2FqeCggcGFyYW1zICl7XHJcblxyXG5cdC8vIEZpeEluOiA5LjguNi4yLlxyXG5cdHdwYmNfY2FsZW5kYXJfX2xvYWRpbmdfX3N0YXJ0KCBwYXJhbXNbJ3Jlc291cmNlX2lkJ10gKTtcclxuXHJcblx0Ly8gVHJpZ2dlciBldmVudCBmb3IgY2FsZW5kYXIgYmVmb3JlIGxvYWRpbmcgQm9va2luZyBkYXRhLCAgYnV0IGFmdGVyIHNob3dpbmcgQ2FsZW5kYXIuXHJcblx0aWYgKCBqUXVlcnkoICcjY2FsZW5kYXJfYm9va2luZycgKyBwYXJhbXNbJ3Jlc291cmNlX2lkJ10gKS5sZW5ndGggPiAwICl7XHJcblx0XHR2YXIgdGFyZ2V0X2VsbSA9IGpRdWVyeSggJ2JvZHknICkudHJpZ2dlciggXCJ3cGJjX2NhbGVuZGFyX2FqeF9fYmVmb3JlX2xvYWRlZF9kYXRhXCIsIFtwYXJhbXNbJ3Jlc291cmNlX2lkJ11dICk7XHJcblx0XHQgLy9qUXVlcnkoICdib2R5JyApLm9uKCAnd3BiY19jYWxlbmRhcl9hanhfX2JlZm9yZV9sb2FkZWRfZGF0YScsIGZ1bmN0aW9uKCBldmVudCwgcmVzb3VyY2VfaWQgKSB7IC4uLiB9ICk7XHJcblx0fVxyXG5cclxuXHRpZiAoIHdwYmNfYmFsYW5jZXJfX2lzX3dhaXQoIHBhcmFtcyAsICd3cGJjX2NhbGVuZGFyX19sb2FkX2RhdGFfX2FqeCcgKSApe1xyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0Ly8gRml4SW46IDkuOC42LjIuXHJcblx0d3BiY19jYWxlbmRhcl9fYmx1cl9fc3RvcCggcGFyYW1zWydyZXNvdXJjZV9pZCddICk7XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0Ly8gPT0gR2V0IHN0YXJ0IC8gZW5kIGRhdGVzIGZyb20gIHRoZSBCb29raW5nIENhbGVuZGFyIHNob3J0Y29kZS4gPT1cclxuXHQvLyBFeGFtcGxlOiBbYm9va2luZyBjYWxlbmRhcl9kYXRlc19zdGFydD0nMjAyNi0wMS0wMScgY2FsZW5kYXJfZGF0ZXNfZW5kPScyMDI2LTEyLTMxJyAgcmVzb3VyY2VfaWQ9MV0gICAgICAgICAgICAgIC8vIEZpeEluOiAxMC4xMy4xLjQuXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHRpZiAoIGZhbHNlICE9PSB3cGJjX2NhbGVuZGFyX19nZXRfZGF0ZXNfc3RhcnQoIHBhcmFtc1sncmVzb3VyY2VfaWQnXSApICkge1xyXG5cdFx0aWYgKCAhIHBhcmFtc1snZGF0ZXNfdG9fY2hlY2snXSApIHsgcGFyYW1zWydkYXRlc190b19jaGVjayddID0gW107IH1cclxuXHRcdHZhciBkYXRlc19zdGFydCA9IHdwYmNfY2FsZW5kYXJfX2dldF9kYXRlc19zdGFydCggcGFyYW1zWydyZXNvdXJjZV9pZCddICk7ICAvLyBFLmcuIC0gbG9jYWxfX21pbl9kYXRlID0gbmV3IERhdGUoIDIwMjUsIDAsIDEgKTtcclxuXHRcdGlmICggZmFsc2UgIT09IGRhdGVzX3N0YXJ0ICl7XHJcblx0XHRcdHBhcmFtc1snZGF0ZXNfdG9fY2hlY2snXVswXSA9IHdwYmNfX2dldF9fc3FsX2NsYXNzX2RhdGUoIGRhdGVzX3N0YXJ0ICk7XHJcblx0XHR9XHJcblx0fVxyXG5cdGlmICggZmFsc2UgIT09IHdwYmNfY2FsZW5kYXJfX2dldF9kYXRlc19lbmQoIHBhcmFtc1sncmVzb3VyY2VfaWQnXSApICkge1xyXG5cdFx0aWYgKCAhcGFyYW1zWydkYXRlc190b19jaGVjayddICkgeyBwYXJhbXNbJ2RhdGVzX3RvX2NoZWNrJ10gPSBbXTsgfVxyXG5cdFx0dmFyIGRhdGVzX2VuZCA9IHdwYmNfY2FsZW5kYXJfX2dldF9kYXRlc19lbmQoIHBhcmFtc1sncmVzb3VyY2VfaWQnXSApOyAgLy8gRS5nLiAtIGxvY2FsX19taW5fZGF0ZSA9IG5ldyBEYXRlKCAyMDI1LCAwLCAxICk7XHJcblx0XHRpZiAoIGZhbHNlICE9PSBkYXRlc19lbmQgKSB7XHJcblx0XHRcdHBhcmFtc1snZGF0ZXNfdG9fY2hlY2snXVsxXSA9IHdwYmNfX2dldF9fc3FsX2NsYXNzX2RhdGUoIGRhdGVzX2VuZCApO1xyXG5cdFx0XHRpZiAoICFwYXJhbXNbJ2RhdGVzX3RvX2NoZWNrJ11bMF0gKSB7XHJcblx0XHRcdFx0cGFyYW1zWydkYXRlc190b19jaGVjayddWzBdID0gd3BiY19fZ2V0X19zcWxfY2xhc3NfZGF0ZSggbmV3IERhdGUoKSApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4vLyBjb25zb2xlLmdyb3VwRW5kKCk7IGNvbnNvbGUudGltZSgncmVzb3VyY2VfaWRfJyArIHBhcmFtc1sncmVzb3VyY2VfaWQnXSk7XHJcbmNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQoICdXUEJDX0FKWF9DQUxFTkRBUl9MT0FEJyApOyBjb25zb2xlLmxvZyggJyA9PSBCZWZvcmUgQWpheCBTZW5kIC0gY2FsZW5kYXJzX2FsbF9fZ2V0KCkgPT0gJyAsIF93cGJjLmNhbGVuZGFyc19hbGxfX2dldCgpICk7XHJcblx0aWYgKCAnZnVuY3Rpb24nID09PSB0eXBlb2YgKHdwYmNfaG9va19faW5pdF90aW1lc2VsZWN0b3IpICkge1xyXG5cdFx0d3BiY19ob29rX19pbml0X3RpbWVzZWxlY3RvcigpO1xyXG5cdH1cclxuXHJcblx0Ly8gU3RhcnQgQWpheFxyXG5cdGpRdWVyeS5wb3N0KCB3cGJjX3VybF9hamF4LFxyXG5cdFx0XHRcdHtcclxuXHRcdFx0XHRcdGFjdGlvbiAgICAgICAgICA6ICdXUEJDX0FKWF9DQUxFTkRBUl9MT0FEJyxcclxuXHRcdFx0XHRcdHdwYmNfYWp4X3VzZXJfaWQ6IF93cGJjLmdldF9zZWN1cmVfcGFyYW0oICd1c2VyX2lkJyApLFxyXG5cdFx0XHRcdFx0bm9uY2UgICAgICAgICAgIDogX3dwYmMuZ2V0X3NlY3VyZV9wYXJhbSggJ25vbmNlJyApLFxyXG5cdFx0XHRcdFx0d3BiY19hanhfbG9jYWxlIDogX3dwYmMuZ2V0X3NlY3VyZV9wYXJhbSggJ2xvY2FsZScgKSxcclxuXHJcblx0XHRcdFx0XHRjYWxlbmRhcl9yZXF1ZXN0X3BhcmFtcyA6IHBhcmFtcyBcdFx0XHRcdFx0XHQvLyBVc3VhbGx5IGxpa2U6IHsgJ3Jlc291cmNlX2lkJzogMSwgJ21heF9kYXlzX2NvdW50JzogMzY1IH1cclxuXHRcdFx0XHR9LFxyXG5cclxuXHRcdFx0XHQvKipcclxuXHRcdFx0XHQgKiBTIHUgYyBjIGUgcyBzXHJcblx0XHRcdFx0ICpcclxuXHRcdFx0XHQgKiBAcGFyYW0gcmVzcG9uc2VfZGF0YVx0XHQtXHRpdHMgb2JqZWN0IHJldHVybmVkIGZyb20gIEFqYXggLSBjbGFzcy1saXZlLXNlYXJjaC5waHBcclxuXHRcdFx0XHQgKiBAcGFyYW0gdGV4dFN0YXR1c1x0XHQtXHQnc3VjY2VzcydcclxuXHRcdFx0XHQgKiBAcGFyYW0ganFYSFJcdFx0XHRcdC1cdE9iamVjdFxyXG5cdFx0XHRcdCAqL1xyXG5cdFx0XHRcdGZ1bmN0aW9uICggcmVzcG9uc2VfZGF0YSwgdGV4dFN0YXR1cywganFYSFIgKSB7XHJcbi8vIGNvbnNvbGUudGltZUVuZCgncmVzb3VyY2VfaWRfJyArIHJlc3BvbnNlX2RhdGFbJ3Jlc291cmNlX2lkJ10pO1xyXG5jb25zb2xlLmxvZyggJyA9PSBSZXNwb25zZSBXUEJDX0FKWF9DQUxFTkRBUl9MT0FEID09ICcsIHJlc3BvbnNlX2RhdGEgKTsgY29uc29sZS5ncm91cEVuZCgpO1xyXG5cclxuXHRcdFx0XHRcdC8vIEZpeEluOiA5LjguNi4yLlxyXG5cdFx0XHRcdFx0dmFyIGFqeF9wb3N0X2RhdGFfX3Jlc291cmNlX2lkID0gd3BiY19nZXRfcmVzb3VyY2VfaWRfX2Zyb21fYWp4X3Bvc3RfZGF0YV91cmwoIHRoaXMuZGF0YSApO1xyXG5cdFx0XHRcdFx0d3BiY19iYWxhbmNlcl9fY29tcGxldGVkKCBhanhfcG9zdF9kYXRhX19yZXNvdXJjZV9pZCAsICd3cGJjX2NhbGVuZGFyX19sb2FkX2RhdGFfX2FqeCcgKTtcclxuXHJcblx0XHRcdFx0XHR2YXIgaXNfdmFsaWRfcmVzcG9uc2UgPSAoXG5cdFx0XHRcdFx0XHRcdCh0eXBlb2YgcmVzcG9uc2VfZGF0YSA9PT0gJ29iamVjdCcpXG5cdFx0XHRcdFx0XHQgJiYgKHJlc3BvbnNlX2RhdGEgIT09IG51bGwpXG5cdFx0XHRcdFx0XHQgJiYgKCEgQXJyYXkuaXNBcnJheSggcmVzcG9uc2VfZGF0YSApKVxuXHRcdFx0XHRcdFx0ICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCggcmVzcG9uc2VfZGF0YSwgJ3Jlc291cmNlX2lkJyApXG5cdFx0XHRcdFx0XHQgJiYgKHR5cGVvZiByZXNwb25zZV9kYXRhWyAnYWp4X2RhdGEnIF0gPT09ICdvYmplY3QnKVxuXHRcdFx0XHRcdFx0ICYmIChyZXNwb25zZV9kYXRhWyAnYWp4X2RhdGEnIF0gIT09IG51bGwpXG5cdFx0XHRcdFx0XHQgJiYgKCEgQXJyYXkuaXNBcnJheSggcmVzcG9uc2VfZGF0YVsgJ2FqeF9kYXRhJyBdICkpXG5cdFx0XHRcdFx0XHQgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKCByZXNwb25zZV9kYXRhWyAnYWp4X2RhdGEnIF0sICdkYXRlcycgKVxuXHRcdFx0XHRcdFx0ICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCggcmVzcG9uc2VfZGF0YVsgJ2FqeF9kYXRhJyBdLCAncmVzb3VyY2VzX2lkX2Fycl9faW5fZGF0ZXMnIClcblx0XHRcdFx0XHRcdCAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoIHJlc3BvbnNlX2RhdGFbICdhanhfZGF0YScgXSwgJ2FnZ3JlZ2F0ZV9yZXNvdXJjZV9pZF9hcnInIClcblx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0aWYgKCAhIGlzX3ZhbGlkX3Jlc3BvbnNlICkge1xuXHRcdFx0XHRcdFx0dmFyIGpxX25vZGUgPSB3cGJjX2dldF9jYWxlbmRhcl9fanFfbm9kZV9fZm9yX21lc3NhZ2VzKCB0aGlzLmRhdGEgKTtcblx0XHRcdFx0XHRcdHZhciByZXNwb25zZV9lcnJvcl9tZXNzYWdlID0gX3dwYmMuZ2V0X21lc3NhZ2UoICdtZXNzYWdlX3VuZXhwZWN0ZWRfc2VydmVyX3Jlc3BvbnNlJyApIHx8ICdUaGUgc2VydmVyIHJldHVybmVkIGFuIHVuZXhwZWN0ZWQgcmVzcG9uc2UuIFBsZWFzZSByZWxvYWQgdGhlIHBhZ2UgYW5kIHRyeSBhZ2Fpbi4nO1xuXG5cdFx0XHRcdFx0XHR3cGJjX2Zyb250X2VuZF9fbG9nX3VuZXhwZWN0ZWRfYWpheF9yZXNwb25zZSggJ1dQQkNfQUpYX0NBTEVOREFSX0xPQUQnLCByZXNwb25zZV9kYXRhLCBqcVhIUiwgdGV4dFN0YXR1cywgJ0ludmFsaWQgcmVzcG9uc2Ugc3RydWN0dXJlJyApO1xuXHRcdFx0XHRcdFx0d3BiY19jYWxlbmRhcl9fbG9hZGluZ19fc3RvcCggYWp4X3Bvc3RfZGF0YV9fcmVzb3VyY2VfaWQgKTtcblxuXHRcdFx0XHRcdFx0d3BiY19mcm9udF9lbmRfX3Nob3dfbWVzc2FnZSggcmVzcG9uc2VfZXJyb3JfbWVzc2FnZSwgeyAndHlwZScgICAgICAgIDogJ2Vycm9yJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICdzaG93X2hlcmUnICAgOiB7J2pxX25vZGUnOiBqcV9ub2RlLCAnd2hlcmUnOiAnYWZ0ZXInfSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICdpc19hcHBlbmQnICAgOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgJ3N0eWxlJyAgICAgICA6ICd0ZXh0LWFsaWduOmxlZnQ7Jyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICdjb250ZW50X21vZGUnOiAndGV4dCcsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAnZGVsYXknICAgICAgIDogMFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cclxuXHRcdFx0XHRcdC8vIFNob3cgQ2FsZW5kYXJcclxuXHRcdFx0XHRcdHdwYmNfY2FsZW5kYXJfX2xvYWRpbmdfX3N0b3AoIHJlc3BvbnNlX2RhdGFbICdyZXNvdXJjZV9pZCcgXSApO1xyXG5cclxuXHRcdFx0XHRcdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHRcdFx0XHRcdC8vIEJvb2tpbmdzIC0gRGF0ZXNcclxuXHRcdFx0XHRcdF93cGJjLmJvb2tpbmdzX2luX2NhbGVuZGFyX19zZXRfZGF0ZXMoICByZXNwb25zZV9kYXRhWyAncmVzb3VyY2VfaWQnIF0sIHJlc3BvbnNlX2RhdGFbICdhanhfZGF0YScgXVsnZGF0ZXMnXSAgKTtcclxuXHJcblx0XHRcdFx0XHQvLyBCb29raW5ncyAtIENoaWxkIG9yIG9ubHkgc2luZ2xlIGJvb2tpbmcgcmVzb3VyY2UgaW4gZGF0ZXNcclxuXHRcdFx0XHRcdF93cGJjLmJvb2tpbmdfX3NldF9wYXJhbV92YWx1ZSggcmVzcG9uc2VfZGF0YVsgJ3Jlc291cmNlX2lkJyBdLCAncmVzb3VyY2VzX2lkX2Fycl9faW5fZGF0ZXMnLCByZXNwb25zZV9kYXRhWyAnYWp4X2RhdGEnIF1bICdyZXNvdXJjZXNfaWRfYXJyX19pbl9kYXRlcycgXSApO1xyXG5cclxuXHRcdFx0XHRcdC8vIEFnZ3JlZ2F0ZSBib29raW5nIHJlc291cmNlcywgIGlmIGFueSA/XHJcblx0XHRcdFx0XHRfd3BiYy5ib29raW5nX19zZXRfcGFyYW1fdmFsdWUoIHJlc3BvbnNlX2RhdGFbICdyZXNvdXJjZV9pZCcgXSwgJ2FnZ3JlZ2F0ZV9yZXNvdXJjZV9pZF9hcnInLCByZXNwb25zZV9kYXRhWyAnYWp4X2RhdGEnIF1bICdhZ2dyZWdhdGVfcmVzb3VyY2VfaWRfYXJyJyBdICk7XHJcblx0XHRcdFx0XHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cdFx0XHRcdFx0Ly8gVXBkYXRlIGNhbGVuZGFyXHJcblx0XHRcdFx0XHR3cGJjX2NhbGVuZGFyX191cGRhdGVfbG9vayggcmVzcG9uc2VfZGF0YVsgJ3Jlc291cmNlX2lkJyBdICk7XHJcblxyXG5cdFx0XHRcdFx0aWYgKCAnZnVuY3Rpb24nID09PSB0eXBlb2YgKHdwYmNfaG9va19faW5pdF90aW1lc2VsZWN0b3IpICkge1xyXG5cdFx0XHRcdFx0XHR3cGJjX2hvb2tfX2luaXRfdGltZXNlbGVjdG9yKCk7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRcdCggJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiAocmVzcG9uc2VfZGF0YVsgJ2FqeF9kYXRhJyBdWyAnYWp4X2FmdGVyX2FjdGlvbl9tZXNzYWdlJyBdKSApXHJcblx0XHRcdFx0XHRcdCAmJiAoICcnICE9IHJlc3BvbnNlX2RhdGFbICdhanhfZGF0YScgXVsgJ2FqeF9hZnRlcl9hY3Rpb25fbWVzc2FnZScgXS5yZXBsYWNlKCAvXFxuL2csIFwiPGJyIC8+XCIgKSApXHJcblx0XHRcdFx0XHQpe1xyXG5cclxuXHRcdFx0XHRcdFx0dmFyIGpxX25vZGUgID0gd3BiY19nZXRfY2FsZW5kYXJfX2pxX25vZGVfX2Zvcl9tZXNzYWdlcyggdGhpcy5kYXRhICk7XHJcblxyXG5cdFx0XHRcdFx0XHQvLyBTaG93IE1lc3NhZ2VcclxuXHRcdFx0XHRcdFx0d3BiY19mcm9udF9lbmRfX3Nob3dfbWVzc2FnZSggcmVzcG9uc2VfZGF0YVsgJ2FqeF9kYXRhJyBdWyAnYWp4X2FmdGVyX2FjdGlvbl9tZXNzYWdlJyBdLnJlcGxhY2UoIC9cXG4vZywgXCI8YnIgLz5cIiApLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0eyAgICd0eXBlJyAgICAgOiAoICd1bmRlZmluZWQnICE9PSB0eXBlb2YoIHJlc3BvbnNlX2RhdGFbICdhanhfZGF0YScgXVsgJ2FqeF9hZnRlcl9hY3Rpb25fbWVzc2FnZV9zdGF0dXMnIF0gKSApXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgPyByZXNwb25zZV9kYXRhWyAnYWp4X2RhdGEnIF1bICdhanhfYWZ0ZXJfYWN0aW9uX21lc3NhZ2Vfc3RhdHVzJyBdIDogJ2luZm8nLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnc2hvd19oZXJlJzogeydqcV9ub2RlJzoganFfbm9kZSwgJ3doZXJlJzogJ2FmdGVyJ30sXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdpc19hcHBlbmQnOiB0cnVlLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnc3R5bGUnICAgIDogJ3RleHQtYWxpZ246bGVmdDsnLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnZGVsYXknICAgIDogMTAwMDBcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0gKTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAoICdmdW5jdGlvbicgPT09IHR5cGVvZiAod3BiY191cGRhdGVfY2FwYWNpdHlfaGludCkgKSB7XHJcblx0XHRcdFx0XHRcdHdwYmNfdXBkYXRlX2NhcGFjaXR5X2hpbnQoIHJlc3BvbnNlX2RhdGFbJ3Jlc291cmNlX2lkJ10gKTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHQvLyBUcmlnZ2VyIGV2ZW50IHRoYXQgY2FsZW5kYXIgaGFzIGJlZW5cdFx0IC8vIEZpeEluOiAxMC4wLjAuNDQuICAvLyBGaXhJbjogMTAuMTQuMTcuMi5cclxuXHRcdFx0XHRcdGlmICggKGpRdWVyeSggJyNjYWxlbmRhcl9ib29raW5nJyArIHJlc3BvbnNlX2RhdGFbJ3Jlc291cmNlX2lkJ10gKS5sZW5ndGggPiAwKSB8fCAoalF1ZXJ5KCAnI2RhdGVfYm9va2luZycgKyByZXNwb25zZV9kYXRhWydyZXNvdXJjZV9pZCddICkubGVuZ3RoID4gMCkgKSB7XHJcblx0XHRcdFx0XHRcdHZhciB0YXJnZXRfZWxtID0galF1ZXJ5KCAnYm9keScgKS50cmlnZ2VyKCBcIndwYmNfY2FsZW5kYXJfYWp4X19sb2FkZWRfZGF0YVwiLCBbcmVzcG9uc2VfZGF0YVsgJ3Jlc291cmNlX2lkJyBdXSApO1xyXG5cdFx0XHRcdFx0XHQgLy9qUXVlcnkoICdib2R5JyApLm9uKCAnd3BiY19jYWxlbmRhcl9hanhfX2xvYWRlZF9kYXRhJywgZnVuY3Rpb24oIGV2ZW50LCByZXNvdXJjZV9pZCApIHsgLi4uIH0gKTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHQvL2pRdWVyeSggJyNhamF4X3Jlc3BvbmQnICkuaHRtbCggcmVzcG9uc2VfZGF0YSApO1x0XHQvLyBGb3IgYWJpbGl0eSB0byBzaG93IHJlc3BvbnNlLCBhZGQgc3VjaCBESVYgZWxlbWVudCB0byBwYWdlXHJcblx0XHRcdFx0fVxyXG5cdFx0XHQgICkuZmFpbCggZnVuY3Rpb24gKCBqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24gKSB7XG5cdFx0XHRcdFx0d3BiY19mcm9udF9lbmRfX2xvZ191bmV4cGVjdGVkX2FqYXhfcmVzcG9uc2UoICdXUEJDX0FKWF9DQUxFTkRBUl9MT0FEJywganFYSFIucmVzcG9uc2VUZXh0IHx8ICcnLCBqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24gKTtcblxyXG5cdFx0XHRcdFx0dmFyIGFqeF9wb3N0X2RhdGFfX3Jlc291cmNlX2lkID0gd3BiY19nZXRfcmVzb3VyY2VfaWRfX2Zyb21fYWp4X3Bvc3RfZGF0YV91cmwoIHRoaXMuZGF0YSApO1xuXHRcdFx0XHRcdHdwYmNfYmFsYW5jZXJfX2NvbXBsZXRlZCggYWp4X3Bvc3RfZGF0YV9fcmVzb3VyY2VfaWQgLCAnd3BiY19jYWxlbmRhcl9fbG9hZF9kYXRhX19hangnICk7XG5cdFx0XHRcdFx0d3BiY19jYWxlbmRhcl9fbG9hZGluZ19fc3RvcCggYWp4X3Bvc3RfZGF0YV9fcmVzb3VyY2VfaWQgKTtcblxuXHRcdFx0XHRcdHZhciBlcnJvcl9tZXNzYWdlID0gX3dwYmMuZ2V0X21lc3NhZ2UoICdtZXNzYWdlX3VuZXhwZWN0ZWRfc2VydmVyX3Jlc3BvbnNlJyApIHx8ICdUaGUgc2VydmVyIHJldHVybmVkIGFuIHVuZXhwZWN0ZWQgcmVzcG9uc2UuIFBsZWFzZSByZWxvYWQgdGhlIHBhZ2UgYW5kIHRyeSBhZ2Fpbi4nO1xuXHRcdFx0XHRcdGlmICgganFYSFIuc3RhdHVzICl7XG5cdFx0XHRcdFx0XHRlcnJvcl9tZXNzYWdlICs9ICcgKCcgKyBwYXJzZUludCgganFYSFIuc3RhdHVzLCAxMCApICsgJyknO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR2YXIgbWVzc2FnZV9zaG93X2RlbGF5ID0gMzAwMDtcblxuXHRcdFx0XHRcdHZhciBqcV9ub2RlICA9IHdwYmNfZ2V0X2NhbGVuZGFyX19qcV9ub2RlX19mb3JfbWVzc2FnZXMoIHRoaXMuZGF0YSApO1xuXHJcblx0XHRcdFx0XHQvKipcclxuXHRcdFx0XHRcdCAqIElmIHdlIG1ha2UgZmFzdCBjbGlja2luZyBvbiBkaWZmZXJlbnQgcGFnZXMsXHJcblx0XHRcdFx0XHQgKiB0aGVuIHVuZGVyIGNhbGVuZGFyIHdpbGwgc2hvdyBlcnJvciBtZXNzYWdlIHdpdGggIGVtcHR5ICB0ZXh0LCBiZWNhdXNlIGFqYXggd2FzIG5vdCByZWNlaXZlZC5cclxuXHRcdFx0XHRcdCAqIFRvICBub3Qgc2hvdyBzdWNoIHdhcm5pbmdzIHdlIGFyZSBzZXQgZGVsYXkgIGluIDMgc2Vjb25kcy4gIHZhciBtZXNzYWdlX3Nob3dfZGVsYXkgPSAzMDAwO1xyXG5cdFx0XHRcdFx0ICovXHJcblx0XHRcdFx0XHR2YXIgY2xvc2VkX3RpbWVyID0gc2V0VGltZW91dCggZnVuY3Rpb24gKCl7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFNob3cgTWVzc2FnZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHdwYmNfZnJvbnRfZW5kX19zaG93X21lc3NhZ2UoIGVycm9yX21lc3NhZ2UgLCB7ICd0eXBlJyAgICAgOiAnZXJyb3InLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdzaG93X2hlcmUnOiB7J2pxX25vZGUnOiBqcV9ub2RlLCAnd2hlcmUnOiAnYWZ0ZXInfSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnaXNfYXBwZW5kJzogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3N0eWxlJyAgICA6ICd0ZXh0LWFsaWduOmxlZnQ7Jyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J2Nzc19jbGFzcyc6J3dwYmNfZmVfbWVzc2FnZV9hbHQnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnY29udGVudF9tb2RlJzogJ3RleHQnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnZGVsYXknICAgIDogMFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSApO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgfSAsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICBwYXJzZUludCggbWVzc2FnZV9zaG93X2RlbGF5ICkgICApO1xyXG5cclxuXHRcdFx0ICB9KVxyXG5cdCAgICAgICAgICAvLyAuZG9uZSggICBmdW5jdGlvbiAoIGRhdGEsIHRleHRTdGF0dXMsIGpxWEhSICkgeyAgIGlmICggd2luZG93LmNvbnNvbGUgJiYgd2luZG93LmNvbnNvbGUubG9nICl7IGNvbnNvbGUubG9nKCAnc2Vjb25kIHN1Y2Nlc3MnLCBkYXRhLCB0ZXh0U3RhdHVzLCBqcVhIUiApOyB9ICAgIH0pXHJcblx0XHRcdCAgLy8gLmFsd2F5cyggZnVuY3Rpb24gKCBkYXRhX2pxWEhSLCB0ZXh0U3RhdHVzLCBqcVhIUl9lcnJvclRocm93biApIHsgICBpZiAoIHdpbmRvdy5jb25zb2xlICYmIHdpbmRvdy5jb25zb2xlLmxvZyApeyBjb25zb2xlLmxvZyggJ2Fsd2F5cyBmaW5pc2hlZCcsIGRhdGFfanFYSFIsIHRleHRTdGF0dXMsIGpxWEhSX2Vycm9yVGhyb3duICk7IH0gICAgIH0pXHJcblx0XHRcdCAgOyAgLy8gRW5kIEFqYXhcclxufVxyXG5cclxuXHJcblxyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuLy8gU3VwcG9ydFxyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0LyoqXHJcblx0ICogR2V0IENhbGVuZGFyIGpRdWVyeSBub2RlIGZvciBzaG93aW5nIG1lc3NhZ2VzIGR1cmluZyBBamF4XHJcblx0ICogVGhpcyBwYXJhbWV0ZXI6ICAgY2FsZW5kYXJfcmVxdWVzdF9wYXJhbXNbcmVzb3VyY2VfaWRdICAgcGFyc2VkIGZyb20gdGhpcy5kYXRhIEFqYXggcG9zdCAgZGF0YVxyXG5cdCAqXHJcblx0ICogQHBhcmFtIGFqeF9wb3N0X2RhdGFfdXJsX3BhcmFtc1x0XHQgJ2FjdGlvbj1XUEJDX0FKWF9DQUxFTkRBUl9MT0FELi4uJmNhbGVuZGFyX3JlcXVlc3RfcGFyYW1zJTVCcmVzb3VyY2VfaWQlNUQ9MiZjYWxlbmRhcl9yZXF1ZXN0X3BhcmFtcyU1QmJvb2tpbmdfaGFzaCU1RD0mY2FsZW5kYXJfcmVxdWVzdF9wYXJhbXMnXHJcblx0ICogQHJldHVybnMge3N0cmluZ31cdCcnI2NhbGVuZGFyX2Jvb2tpbmcxJyAgfCAgICcuYm9va2luZ19mb3JtX2RpdicgLi4uXHJcblx0ICpcclxuXHQgKiBFeGFtcGxlICAgIHZhciBqcV9ub2RlICA9IHdwYmNfZ2V0X2NhbGVuZGFyX19qcV9ub2RlX19mb3JfbWVzc2FnZXMoIHRoaXMuZGF0YSApO1xyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIHdwYmNfZ2V0X2NhbGVuZGFyX19qcV9ub2RlX19mb3JfbWVzc2FnZXMoIGFqeF9wb3N0X2RhdGFfdXJsX3BhcmFtcyApe1xyXG5cclxuXHRcdHZhciBqcV9ub2RlID0gJy5ib29raW5nX2Zvcm1fZGl2JztcclxuXHJcblx0XHR2YXIgY2FsZW5kYXJfcmVzb3VyY2VfaWQgPSB3cGJjX2dldF9yZXNvdXJjZV9pZF9fZnJvbV9hanhfcG9zdF9kYXRhX3VybCggYWp4X3Bvc3RfZGF0YV91cmxfcGFyYW1zICk7XHJcblxyXG5cdFx0aWYgKCBjYWxlbmRhcl9yZXNvdXJjZV9pZCA+IDAgKXtcclxuXHRcdFx0anFfbm9kZSA9ICcjY2FsZW5kYXJfYm9va2luZycgKyBjYWxlbmRhcl9yZXNvdXJjZV9pZDtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4ganFfbm9kZTtcclxuXHR9XHJcblxyXG5cclxuXHQvKipcclxuXHQgKiBHZXQgcmVzb3VyY2UgSUQgZnJvbSBhanggcG9zdCBkYXRhIHVybCAgIHVzdWFsbHkgIGZyb20gIHRoaXMuZGF0YSAgPVxyXG5cdCAqICdhY3Rpb249V1BCQ19BSlhfQ0FMRU5EQVJfTE9BRC4uLiZjYWxlbmRhcl9yZXF1ZXN0X3BhcmFtcyU1QnJlc291cmNlX2lkJTVEPTImY2FsZW5kYXJfcmVxdWVzdF9wYXJhbXMlNUJib29raW5nX2hhc2glNUQ9JmNhbGVuZGFyX3JlcXVlc3RfcGFyYW1zJ1xyXG5cdCAqXHJcblx0ICogQHBhcmFtIGFqeF9wb3N0X2RhdGFfdXJsX3BhcmFtc1x0XHQgJ2FjdGlvbj1XUEJDX0FKWF9DQUxFTkRBUl9MT0FELi4uJmNhbGVuZGFyX3JlcXVlc3RfcGFyYW1zJTVCcmVzb3VyY2VfaWQlNUQ9MiZjYWxlbmRhcl9yZXF1ZXN0X3BhcmFtcyU1QmJvb2tpbmdfaGFzaCU1RD0mY2FsZW5kYXJfcmVxdWVzdF9wYXJhbXMnXHJcblx0ICogQHJldHVybnMge2ludH1cdFx0XHRcdFx0XHQgMSB8IDAgIChpZiBlcnJyb3IgdGhlbiAgMClcclxuXHQgKlxyXG5cdCAqIEV4YW1wbGUgICAgdmFyIGpxX25vZGUgID0gd3BiY19nZXRfY2FsZW5kYXJfX2pxX25vZGVfX2Zvcl9tZXNzYWdlcyggdGhpcy5kYXRhICk7XHJcblx0ICovXHJcblx0ZnVuY3Rpb24gd3BiY19nZXRfcmVzb3VyY2VfaWRfX2Zyb21fYWp4X3Bvc3RfZGF0YV91cmwoIGFqeF9wb3N0X2RhdGFfdXJsX3BhcmFtcyApe1xyXG5cclxuXHRcdC8vIEdldCBib29raW5nIHJlc291cmNlIElEIGZyb20gQWpheCBQb3N0IFJlcXVlc3QgIC0+IHRoaXMuZGF0YSA9ICdhY3Rpb249V1BCQ19BSlhfQ0FMRU5EQVJfTE9BRC4uLiZjYWxlbmRhcl9yZXF1ZXN0X3BhcmFtcyU1QnJlc291cmNlX2lkJTVEPTImY2FsZW5kYXJfcmVxdWVzdF9wYXJhbXMlNUJib29raW5nX2hhc2glNUQ9JmNhbGVuZGFyX3JlcXVlc3RfcGFyYW1zJ1xyXG5cdFx0dmFyIGNhbGVuZGFyX3Jlc291cmNlX2lkID0gd3BiY19nZXRfdXJpX3BhcmFtX2J5X25hbWUoICdjYWxlbmRhcl9yZXF1ZXN0X3BhcmFtc1tyZXNvdXJjZV9pZF0nLCBhanhfcG9zdF9kYXRhX3VybF9wYXJhbXMgKTtcclxuXHRcdGlmICggKG51bGwgIT09IGNhbGVuZGFyX3Jlc291cmNlX2lkKSAmJiAoJycgIT09IGNhbGVuZGFyX3Jlc291cmNlX2lkKSApe1xyXG5cdFx0XHRjYWxlbmRhcl9yZXNvdXJjZV9pZCA9IHBhcnNlSW50KCBjYWxlbmRhcl9yZXNvdXJjZV9pZCApO1xyXG5cdFx0XHRpZiAoIGNhbGVuZGFyX3Jlc291cmNlX2lkID4gMCApe1xyXG5cdFx0XHRcdHJldHVybiBjYWxlbmRhcl9yZXNvdXJjZV9pZDtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIDA7XHJcblx0fVxyXG5cclxuXHJcblx0LyoqXHJcblx0ICogR2V0IHBhcmFtZXRlciBmcm9tIFVSTCAgLSAgcGFyc2UgVVJMIHBhcmFtZXRlcnMsICBsaWtlIHRoaXM6XHJcblx0ICogYWN0aW9uPVdQQkNfQUpYX0NBTEVOREFSX0xPQUQuLi4mY2FsZW5kYXJfcmVxdWVzdF9wYXJhbXMlNUJyZXNvdXJjZV9pZCU1RD0yJmNhbGVuZGFyX3JlcXVlc3RfcGFyYW1zJTVCYm9va2luZ19oYXNoJTVEPSZjYWxlbmRhcl9yZXF1ZXN0X3BhcmFtc1xyXG5cdCAqIEBwYXJhbSBuYW1lICBwYXJhbWV0ZXIgIG5hbWUsICBsaWtlICdjYWxlbmRhcl9yZXF1ZXN0X3BhcmFtc1tyZXNvdXJjZV9pZF0nXHJcblx0ICogQHBhcmFtIHVybFx0J3BhcmFtZXRlciAgc3RyaW5nIFVSTCdcclxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfG51bGx9ICAgcGFyYW1ldGVyIHZhbHVlXHJcblx0ICpcclxuXHQgKiBFeGFtcGxlOiBcdFx0d3BiY19nZXRfdXJpX3BhcmFtX2J5X25hbWUoICdjYWxlbmRhcl9yZXF1ZXN0X3BhcmFtc1tyZXNvdXJjZV9pZF0nLCB0aGlzLmRhdGEgKTsgIC0+ICcyJ1xyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIHdwYmNfZ2V0X3VyaV9wYXJhbV9ieV9uYW1lKCBuYW1lLCB1cmwgKXtcclxuXHJcblx0XHR1cmwgPSBkZWNvZGVVUklDb21wb25lbnQoIHVybCApO1xyXG5cclxuXHRcdG5hbWUgPSBuYW1lLnJlcGxhY2UoIC9bXFxbXFxdXS9nLCAnXFxcXCQmJyApO1xyXG5cdFx0dmFyIHJlZ2V4ID0gbmV3IFJlZ0V4cCggJ1s/Jl0nICsgbmFtZSArICcoPShbXiYjXSopfCZ8I3wkKScgKSxcclxuXHRcdFx0cmVzdWx0cyA9IHJlZ2V4LmV4ZWMoIHVybCApO1xyXG5cdFx0aWYgKCAhcmVzdWx0cyApIHJldHVybiBudWxsO1xyXG5cdFx0aWYgKCAhcmVzdWx0c1sgMiBdICkgcmV0dXJuICcnO1xyXG5cdFx0cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudCggcmVzdWx0c1sgMiBdLnJlcGxhY2UoIC9cXCsvZywgJyAnICkgKTtcclxuXHR9XHJcbiIsIi8qKlxyXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuICpcdGluY2x1ZGVzL19fanMvZnJvbnRfZW5kX21lc3NhZ2VzL3dwYmNfZmVfbWVzc2FnZXMuanNcclxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbiAqL1xyXG5cclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbi8vIFNob3cgTWVzc2FnZXMgYXQgRnJvbnQtRWRuIHNpZGVcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIExvZyBhbiB1bmV4cGVjdGVkIEFKQVggcmVzcG9uc2UgZm9yIGJyb3dzZXItY29uc29sZSBkaWFnbm9zdGljcy5cbiAqXG4gKiBUaGUgcmVzcG9uc2UgaXMgaW50ZW50aW9uYWxseSBrZXB0IG91dCBvZiBmcm9udGVuZCBub3RpY2VzIGJlY2F1c2UgaXQgY2FuIGNvbnRhaW4gYSBjb21wbGV0ZSBIVE1MIGVycm9yIG9yIGxvZ2luIHBhZ2UuXG4gKiBMb2dnaW5nIGl0IGhlcmUgcHJlc2VydmVzIHRoZSBzZXJ2ZXIgcGF5bG9hZCBhbmQgcmVxdWVzdCBjb250ZXh0IGZvciBzdXBwb3J0IHRyb3VibGVzaG9vdGluZy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gICAgICBhamF4X2FjdGlvbiAgIFdvcmRQcmVzcyBBSkFYIGFjdGlvbiB0aGF0IHByb2R1Y2VkIHRoZSB1bmV4cGVjdGVkIHJlc3BvbnNlLlxuICogQHBhcmFtIHsqfSAgICAgICAgICAgcmVzcG9uc2VfZGF0YSBSYXcgcmVzcG9uc2UgcGF5bG9hZCByZXR1cm5lZCBieSB0aGUgc2VydmVyLlxuICogQHBhcmFtIHtqcVhIUnxudWxsfSAganFfeGhyICAgICAgICBqUXVlcnkgWEhSIG9iamVjdCwgd2hlbiBhdmFpbGFibGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gICAgICB0ZXh0X3N0YXR1cyAgIGpRdWVyeSByZXF1ZXN0IHN0YXR1cyBvciBzdWNjZXNzIHN0YXRlLlxuICogQHBhcmFtIHtzdHJpbmd8RXJyb3J9IGVycm9yX3Rocm93biBFcnJvciBkZXNjcmlwdGlvbiBvciBleGNlcHRpb24gcmVwb3J0ZWQgYnkgalF1ZXJ5LlxuICogQHJldHVybiB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gd3BiY19mcm9udF9lbmRfX2xvZ191bmV4cGVjdGVkX2FqYXhfcmVzcG9uc2UoIGFqYXhfYWN0aW9uLCByZXNwb25zZV9kYXRhLCBqcV94aHIsIHRleHRfc3RhdHVzLCBlcnJvcl90aHJvd24gKSB7XG5cdGlmICggISB3aW5kb3cuY29uc29sZSB8fCAnZnVuY3Rpb24nICE9PSB0eXBlb2Ygd2luZG93LmNvbnNvbGUuZXJyb3IgKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dHJ5IHtcblx0XHR2YXIgY29udGVudF90eXBlID0gJyc7XG5cdFx0aWYgKCBqcV94aHIgJiYgJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIGpxX3hoci5nZXRSZXNwb25zZUhlYWRlciApIHtcblx0XHRcdGNvbnRlbnRfdHlwZSA9IGpxX3hoci5nZXRSZXNwb25zZUhlYWRlciggJ2NvbnRlbnQtdHlwZScgKSB8fCAnJztcblx0XHR9XG5cblx0XHR3aW5kb3cuY29uc29sZS5lcnJvciggJ1tXUEJDXVtBSkFYLVVORVhQRUNURUQtUkVTUE9OU0VdICcgKyBhamF4X2FjdGlvbiwge1xuXHRcdFx0J2FjdGlvbicgICAgICAgICAgOiBhamF4X2FjdGlvbixcblx0XHRcdCdodHRwX3N0YXR1cycgICAgIDoganFfeGhyICYmIGpxX3hoci5zdGF0dXMgPyBwYXJzZUludCgganFfeGhyLnN0YXR1cywgMTAgKSA6IDAsXG5cdFx0XHQnaHR0cF9zdGF0dXNfdGV4dCc6IGpxX3hociAmJiBqcV94aHIuc3RhdHVzVGV4dCA/IGpxX3hoci5zdGF0dXNUZXh0IDogJycsXG5cdFx0XHQndGV4dF9zdGF0dXMnICAgICA6IHRleHRfc3RhdHVzIHx8ICcnLFxuXHRcdFx0J2Vycm9yJyAgICAgICAgICAgOiBlcnJvcl90aHJvd24gfHwgJycsXG5cdFx0XHQnY29udGVudF90eXBlJyAgICA6IGNvbnRlbnRfdHlwZSxcblx0XHRcdCdyZXNwb25zZScgICAgICAgIDogcmVzcG9uc2VfZGF0YVxuXHRcdH0gKTtcblx0fSBjYXRjaCAoIGxvZ2dpbmdfZXJyb3IgKSB7XG5cdFx0Ly8gQ29uc29sZSBkaWFnbm9zdGljcyBtdXN0IG5ldmVyIGludGVycnVwdCBmcm9udGVuZCBlcnJvciByZWNvdmVyeS5cblx0fVxufVxuXG4vKipcbiAqIFNob3cgbWVzc2FnZSBpbiBjb250ZW50XG4gKlxyXG4gKiBAcGFyYW0gbWVzc2FnZVx0XHRcdFx0TWVzc2FnZSBIVE1MXHJcbiAqIEBwYXJhbSBwYXJhbXMgPSB7XHJcbiAqXHRcdFx0XHRcdFx0XHRcdCd0eXBlJyAgICAgOiAnd2FybmluZycsXHRcdFx0XHRcdFx0XHQvLyAnZXJyb3InIHwgJ3dhcm5pbmcnIHwgJ2luZm8nIHwgJ3N1Y2Nlc3MnXHJcbiAqXHRcdFx0XHRcdFx0XHRcdCdzaG93X2hlcmUnIDoge1xyXG4gKlx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J2pxX25vZGUnIDogJycsXHRcdFx0XHQvLyBhbnkgalF1ZXJ5IG5vZGUgZGVmaW5pdGlvblxyXG4gKlx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3doZXJlJyAgIDogJ2luc2lkZSdcdFx0Ly8gJ2luc2lkZScgfCAnYmVmb3JlJyB8ICdhZnRlcicgfCAncmlnaHQnIHwgJ2xlZnQnXHJcbiAqXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgfSxcclxuICpcdFx0XHRcdFx0XHRcdFx0J2lzX2FwcGVuZCc6IHRydWUsXHRcdFx0XHRcdFx0XHRcdC8vIEFwcGx5ICBvbmx5IGlmIFx0J3doZXJlJyAgIDogJ2luc2lkZSdcclxuICpcdFx0XHRcdFx0XHRcdFx0J3N0eWxlJyAgICA6ICd0ZXh0LWFsaWduOmxlZnQ7JyxcdFx0XHRcdC8vIHN0eWxlcywgaWYgbmVlZGVkXHJcbiAqXHRcdFx0XHRcdFx0XHQgICAgJ2Nzc19jbGFzcyc6ICcnLFx0XHRcdFx0XHRcdFx0XHQvLyBGb3IgZXhhbXBsZSBjYW4gIGJlOiAnd3BiY19mZV9tZXNzYWdlX2FsdCdcclxuICpcdFx0XHRcdFx0XHRcdFx0J2RlbGF5JyAgICA6IDAsXHRcdFx0XHRcdFx0XHRcdFx0Ly8gaG93IG1hbnkgbWljcm9zZWNvbmQgdG8gIHNob3csICBpZiAwICB0aGVuICBzaG93IGZvcmV2ZXJcclxuICpcdFx0XHRcdFx0XHRcdFx0J2lmX3Zpc2libGVfbm90X3Nob3cnOiBmYWxzZVx0XHRcdFx0XHQvLyBpZiB0cnVlLCAgdGhlbiBkbyBub3Qgc2hvdyBtZXNzYWdlLCAgaWYgcHJldmlvcyBtZXNzYWdlIHdhcyBub3QgaGlkZWQgKG5vdCBhcHBseSBpZiAnd2hlcmUnICAgOiAnaW5zaWRlJyApXHJcbiAqXHRcdFx0XHR9O1xyXG4gKiBFeGFtcGxlczpcclxuICogXHRcdFx0dmFyIGh0bWxfaWQgPSB3cGJjX2Zyb250X2VuZF9fc2hvd19tZXNzYWdlKCAnWW91IGNhbiB0ZXN0IGRheXMgc2VsZWN0aW9uIGluIGNhbGVuZGFyJywge30gKTtcclxuICpcclxuICpcdFx0XHR2YXIgbm90aWNlX21lc3NhZ2VfaWQgPSB3cGJjX2Zyb250X2VuZF9fc2hvd19tZXNzYWdlKCBfd3BiYy5nZXRfbWVzc2FnZSggJ21lc3NhZ2VfY2hlY2tfcmVxdWlyZWQnICksIHsgJ3R5cGUnOiAnd2FybmluZycsICdkZWxheSc6IDEwMDAwLCAnaWZfdmlzaWJsZV9ub3Rfc2hvdyc6IHRydWUsXHJcbiAqXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICdzaG93X2hlcmUnOiB7J3doZXJlJzogJ3JpZ2h0JywgJ2pxX25vZGUnOiBlbCx9IH0gKTtcclxuICpcclxuICpcdFx0XHR3cGJjX2Zyb250X2VuZF9fc2hvd19tZXNzYWdlKCByZXNwb25zZV9kYXRhWyAnYWp4X2RhdGEnIF1bICdhanhfYWZ0ZXJfYWN0aW9uX21lc3NhZ2UnIF0ucmVwbGFjZSggL1xcbi9nLCBcIjxiciAvPlwiICksXHJcbiAqXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHsgICAndHlwZScgICAgIDogKCAndW5kZWZpbmVkJyAhPT0gdHlwZW9mKCByZXNwb25zZV9kYXRhWyAnYWp4X2RhdGEnIF1bICdhanhfYWZ0ZXJfYWN0aW9uX21lc3NhZ2Vfc3RhdHVzJyBdICkgKVxyXG4gKlx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgPyByZXNwb25zZV9kYXRhWyAnYWp4X2RhdGEnIF1bICdhanhfYWZ0ZXJfYWN0aW9uX21lc3NhZ2Vfc3RhdHVzJyBdIDogJ2luZm8nLFxyXG4gKlx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdzaG93X2hlcmUnOiB7J2pxX25vZGUnOiBqcV9ub2RlLCAnd2hlcmUnOiAnYWZ0ZXInfSxcclxuICpcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnY3NzX2NsYXNzJzond3BiY19mZV9tZXNzYWdlX2FsdCcsXHJcbiAqXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J2RlbGF5JyAgICA6IDEwMDAwXHJcbiAqXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0gKTtcclxuICpcclxuICpcclxuICogQHJldHVybnMgc3RyaW5nICAtIEhUTUwgSURcdFx0b3IgMCBpZiBub3Qgc2hvd2luZyBkdXJpbmcgdGhpcyB0aW1lLlxyXG4gKi9cclxuZnVuY3Rpb24gd3BiY19mcm9udF9lbmRfX3Nob3dfbWVzc2FnZSggbWVzc2FnZSwgcGFyYW1zID0ge30gKXtcclxuXHJcblx0dmFyIHBhcmFtc19kZWZhdWx0ID0ge1xyXG5cdFx0XHRcdFx0XHRcdFx0J3R5cGUnICAgICA6ICd3YXJuaW5nJyxcdFx0XHRcdFx0XHRcdC8vICdlcnJvcicgfCAnd2FybmluZycgfCAnaW5mbycgfCAnc3VjY2VzcydcclxuXHRcdFx0XHRcdFx0XHRcdCdzaG93X2hlcmUnIDoge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdqcV9ub2RlJyA6ICcnLFx0XHRcdFx0Ly8gYW55IGpRdWVyeSBub2RlIGRlZmluaXRpb25cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnd2hlcmUnICAgOiAnaW5zaWRlJ1x0XHQvLyAnaW5zaWRlJyB8ICdiZWZvcmUnIHwgJ2FmdGVyJyB8ICdyaWdodCcgfCAnbGVmdCdcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgfSxcclxuXHRcdFx0XHRcdFx0XHRcdCdpc19hcHBlbmQnOiB0cnVlLFx0XHRcdFx0XHRcdFx0XHQvLyBBcHBseSAgb25seSBpZiBcdCd3aGVyZScgICA6ICdpbnNpZGUnXHJcblx0XHRcdFx0XHRcdFx0XHQnc3R5bGUnICAgIDogJ3RleHQtYWxpZ246bGVmdDsnLFx0XHRcdFx0Ly8gc3R5bGVzLCBpZiBuZWVkZWRcclxuXHRcdFx0XHRcdFx0XHQgICAgJ2Nzc19jbGFzcyc6ICcnLFx0XHRcdFx0XHRcdFx0XHQvLyBGb3IgZXhhbXBsZSBjYW4gIGJlOiAnd3BiY19mZV9tZXNzYWdlX2FsdCdcclxuXHRcdFx0XHRcdFx0XHRcdCdkZWxheScgICAgOiAwLFx0XHRcdFx0XHRcdFx0XHRcdC8vIGhvdyBtYW55IG1pY3Jvc2Vjb25kIHRvICBzaG93LCAgaWYgMCAgdGhlbiAgc2hvdyBmb3JldmVyXG5cdFx0XHRcdFx0XHRcdFx0J2lmX3Zpc2libGVfbm90X3Nob3cnOiBmYWxzZSxcdFx0XHRcdFx0Ly8gaWYgdHJ1ZSwgIHRoZW4gZG8gbm90IHNob3cgbWVzc2FnZSwgIGlmIHByZXZpb3MgbWVzc2FnZSB3YXMgbm90IGhpZGVkIChub3QgYXBwbHkgaWYgJ3doZXJlJyAgIDogJ2luc2lkZScgKVxuXHRcdFx0XHRcdFx0XHRcdCdpc19zY3JvbGwnOiB0cnVlLFx0XHRcdFx0XHRcdFx0XHQvLyBpcyBzY3JvbGwgIHRvICB0aGlzIGVsZW1lbnRcblx0XHRcdFx0XHRcdFx0XHQnY29udGVudF9tb2RlJzogJ2h0bWwnXHRcdFx0XHRcdFx0XHQvLyAnaHRtbCcgZm9yIHRydXN0ZWQgbGVnYWN5IGNvbnRlbnQgfCAndGV4dCcgZm9yIGVkaXRhYmxlL3VzZXIgY29udGVudFxuXHRcdFx0XHRcdFx0fTtcclxuXHRmb3IgKCB2YXIgcF9rZXkgaW4gcGFyYW1zICl7XHJcblx0XHRwYXJhbXNfZGVmYXVsdFsgcF9rZXkgXSA9IHBhcmFtc1sgcF9rZXkgXTtcclxuXHR9XHJcblx0cGFyYW1zID0gcGFyYW1zX2RlZmF1bHQ7XG5cblx0aWYgKCAndGV4dCcgPT09IHBhcmFtc1sgJ2NvbnRlbnRfbW9kZScgXSApIHtcblx0XHRtZXNzYWdlID0galF1ZXJ5KCAnPGRpdj4nICkudGV4dCggbnVsbCA9PT0gbWVzc2FnZSB8fCAndW5kZWZpbmVkJyA9PT0gdHlwZW9mIG1lc3NhZ2UgPyAnJyA6IFN0cmluZyggbWVzc2FnZSApICkuaHRtbCgpLnJlcGxhY2UoIC9cXG4vZywgJzxiciAvPicgKTtcblx0fVxuXHJcbiAgICB2YXIgdW5pcXVlX2Rpdl9pZCA9IG5ldyBEYXRlKCk7XHJcbiAgICB1bmlxdWVfZGl2X2lkID0gJ3dwYmNfbm90aWNlXycgKyB1bmlxdWVfZGl2X2lkLmdldFRpbWUoKTtcclxuXHJcblx0cGFyYW1zWydjc3NfY2xhc3MnXSArPSAnIHdwYmNfZmVfbWVzc2FnZSc7XHJcblx0aWYgKCBwYXJhbXNbJ3R5cGUnXSA9PSAnZXJyb3InICl7XHJcblx0XHRwYXJhbXNbJ2Nzc19jbGFzcyddICs9ICcgd3BiY19mZV9tZXNzYWdlX2Vycm9yJztcclxuXHRcdG1lc3NhZ2UgPSAnPGkgY2xhc3M9XCJtZW51X2ljb24gaWNvbi0xeCB3cGJjX2ljbl9yZXBvcnRfZ21haWxlcnJvcnJlZFwiPjwvaT4nICsgbWVzc2FnZTtcclxuXHR9XHJcblx0aWYgKCBwYXJhbXNbJ3R5cGUnXSA9PSAnd2FybmluZycgKXtcclxuXHRcdHBhcmFtc1snY3NzX2NsYXNzJ10gKz0gJyB3cGJjX2ZlX21lc3NhZ2Vfd2FybmluZyc7XHJcblx0XHRtZXNzYWdlID0gJzxpIGNsYXNzPVwibWVudV9pY29uIGljb24tMXggd3BiY19pY25fd2FybmluZ1wiPjwvaT4nICsgbWVzc2FnZTtcclxuXHR9XHJcblx0aWYgKCBwYXJhbXNbJ3R5cGUnXSA9PSAnaW5mbycgKXtcclxuXHRcdHBhcmFtc1snY3NzX2NsYXNzJ10gKz0gJyB3cGJjX2ZlX21lc3NhZ2VfaW5mbyc7XHJcblx0fVxyXG5cdGlmICggcGFyYW1zWyd0eXBlJ10gPT0gJ3N1Y2Nlc3MnICl7XHJcblx0XHRwYXJhbXNbJ2Nzc19jbGFzcyddICs9ICcgd3BiY19mZV9tZXNzYWdlX3N1Y2Nlc3MnO1xyXG5cdFx0bWVzc2FnZSA9ICc8aSBjbGFzcz1cIm1lbnVfaWNvbiBpY29uLTF4IHdwYmNfaWNuX2RvbmVfb3V0bGluZVwiPjwvaT4nICsgbWVzc2FnZTtcclxuXHR9XHJcblxyXG5cdHZhciBzY3JvbGxfdG9fZWxlbWVudCA9ICc8ZGl2IGlkPVwiJyArIHVuaXF1ZV9kaXZfaWQgKyAnX3Njcm9sbFwiIHN0eWxlPVwiZGlzcGxheTpub25lO1wiPjwvZGl2Pic7XHJcblx0bWVzc2FnZSA9ICc8ZGl2IGlkPVwiJyArIHVuaXF1ZV9kaXZfaWQgKyAnXCIgY2xhc3M9XCJ3cGJjX2Zyb250X2VuZF9fbWVzc2FnZSAnICsgcGFyYW1zWydjc3NfY2xhc3MnXSArICdcIiBzdHlsZT1cIicgKyBwYXJhbXNbICdzdHlsZScgXSArICdcIj4nICsgbWVzc2FnZSArICc8L2Rpdj4nO1xyXG5cclxuXHJcblx0dmFyIGpxX2VsX21lc3NhZ2UgPSBmYWxzZTtcclxuXHR2YXIgaXNfc2hvd19tZXNzYWdlID0gdHJ1ZTtcclxuXHJcblx0aWYgKCAnaW5zaWRlJyA9PT0gcGFyYW1zWyAnc2hvd19oZXJlJyBdWyAnd2hlcmUnIF0gKXtcclxuXHJcblx0XHRpZiAoIHBhcmFtc1sgJ2lzX2FwcGVuZCcgXSApe1xyXG5cdFx0XHRqUXVlcnkoIHBhcmFtc1sgJ3Nob3dfaGVyZScgXVsgJ2pxX25vZGUnIF0gKS5hcHBlbmQoIHNjcm9sbF90b19lbGVtZW50ICk7XHJcblx0XHRcdGpRdWVyeSggcGFyYW1zWyAnc2hvd19oZXJlJyBdWyAnanFfbm9kZScgXSApLmFwcGVuZCggbWVzc2FnZSApO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0alF1ZXJ5KCBwYXJhbXNbICdzaG93X2hlcmUnIF1bICdqcV9ub2RlJyBdICkuaHRtbCggc2Nyb2xsX3RvX2VsZW1lbnQgKyBtZXNzYWdlICk7XHJcblx0XHR9XHJcblxyXG5cdH0gZWxzZSBpZiAoICdiZWZvcmUnID09PSBwYXJhbXNbICdzaG93X2hlcmUnIF1bICd3aGVyZScgXSApe1xyXG5cclxuXHRcdGpxX2VsX21lc3NhZ2UgPSBqUXVlcnkoIHBhcmFtc1sgJ3Nob3dfaGVyZScgXVsgJ2pxX25vZGUnIF0gKS5zaWJsaW5ncyggJ1tpZF49XCJ3cGJjX25vdGljZV9cIl0nICk7XHJcblx0XHRpZiAoIChwYXJhbXNbICdpZl92aXNpYmxlX25vdF9zaG93JyBdKSAmJiAoanFfZWxfbWVzc2FnZS5pcyggJzp2aXNpYmxlJyApKSApe1xyXG5cdFx0XHRpc19zaG93X21lc3NhZ2UgPSBmYWxzZTtcclxuXHRcdFx0dW5pcXVlX2Rpdl9pZCA9IGpRdWVyeSgganFfZWxfbWVzc2FnZS5nZXQoIDAgKSApLmF0dHIoICdpZCcgKTtcclxuXHRcdH1cclxuXHRcdGlmICggaXNfc2hvd19tZXNzYWdlICl7XHJcblx0XHRcdGpRdWVyeSggcGFyYW1zWyAnc2hvd19oZXJlJyBdWyAnanFfbm9kZScgXSApLmJlZm9yZSggc2Nyb2xsX3RvX2VsZW1lbnQgKTtcclxuXHRcdFx0alF1ZXJ5KCBwYXJhbXNbICdzaG93X2hlcmUnIF1bICdqcV9ub2RlJyBdICkuYmVmb3JlKCBtZXNzYWdlICk7XHJcblx0XHR9XHJcblxyXG5cdH0gZWxzZSBpZiAoICdhZnRlcicgPT09IHBhcmFtc1sgJ3Nob3dfaGVyZScgXVsgJ3doZXJlJyBdICl7XHJcblxyXG5cdFx0anFfZWxfbWVzc2FnZSA9IGpRdWVyeSggcGFyYW1zWyAnc2hvd19oZXJlJyBdWyAnanFfbm9kZScgXSApLm5leHRBbGwoICdbaWRePVwid3BiY19ub3RpY2VfXCJdJyApO1xyXG5cdFx0aWYgKCAocGFyYW1zWyAnaWZfdmlzaWJsZV9ub3Rfc2hvdycgXSkgJiYgKGpxX2VsX21lc3NhZ2UuaXMoICc6dmlzaWJsZScgKSkgKXtcclxuXHRcdFx0aXNfc2hvd19tZXNzYWdlID0gZmFsc2U7XHJcblx0XHRcdHVuaXF1ZV9kaXZfaWQgPSBqUXVlcnkoIGpxX2VsX21lc3NhZ2UuZ2V0KCAwICkgKS5hdHRyKCAnaWQnICk7XHJcblx0XHR9XHJcblx0XHRpZiAoIGlzX3Nob3dfbWVzc2FnZSApe1xyXG5cdFx0XHRqUXVlcnkoIHBhcmFtc1sgJ3Nob3dfaGVyZScgXVsgJ2pxX25vZGUnIF0gKS5iZWZvcmUoIHNjcm9sbF90b19lbGVtZW50ICk7XHRcdC8vIFdlIG5lZWQgdG8gIHNldCAgaGVyZSBiZWZvcmUoZm9yIGhhbmR5IHNjcm9sbClcclxuXHRcdFx0alF1ZXJ5KCBwYXJhbXNbICdzaG93X2hlcmUnIF1bICdqcV9ub2RlJyBdICkuYWZ0ZXIoIG1lc3NhZ2UgKTtcclxuXHRcdH1cclxuXHJcblx0fSBlbHNlIGlmICggJ3JpZ2h0JyA9PT0gcGFyYW1zWyAnc2hvd19oZXJlJyBdWyAnd2hlcmUnIF0gKXtcclxuXHJcblx0XHRqcV9lbF9tZXNzYWdlID0galF1ZXJ5KCBwYXJhbXNbICdzaG93X2hlcmUnIF1bICdqcV9ub2RlJyBdICkubmV4dEFsbCggJy53cGJjX2Zyb250X2VuZF9fbWVzc2FnZV9jb250YWluZXJfcmlnaHQnICkuZmluZCggJ1tpZF49XCJ3cGJjX25vdGljZV9cIl0nICk7XHJcblx0XHRpZiAoIChwYXJhbXNbICdpZl92aXNpYmxlX25vdF9zaG93JyBdKSAmJiAoanFfZWxfbWVzc2FnZS5pcyggJzp2aXNpYmxlJyApKSApe1xyXG5cdFx0XHRpc19zaG93X21lc3NhZ2UgPSBmYWxzZTtcclxuXHRcdFx0dW5pcXVlX2Rpdl9pZCA9IGpRdWVyeSgganFfZWxfbWVzc2FnZS5nZXQoIDAgKSApLmF0dHIoICdpZCcgKTtcclxuXHRcdH1cclxuXHRcdGlmICggaXNfc2hvd19tZXNzYWdlICl7XHJcblx0XHRcdGpRdWVyeSggcGFyYW1zWyAnc2hvd19oZXJlJyBdWyAnanFfbm9kZScgXSApLmJlZm9yZSggc2Nyb2xsX3RvX2VsZW1lbnQgKTtcdFx0Ly8gV2UgbmVlZCB0byAgc2V0ICBoZXJlIGJlZm9yZShmb3IgaGFuZHkgc2Nyb2xsKVxyXG5cdFx0XHRqUXVlcnkoIHBhcmFtc1sgJ3Nob3dfaGVyZScgXVsgJ2pxX25vZGUnIF0gKS5hZnRlciggJzxkaXYgY2xhc3M9XCJ3cGJjX2Zyb250X2VuZF9fbWVzc2FnZV9jb250YWluZXJfcmlnaHRcIj4nICsgbWVzc2FnZSArICc8L2Rpdj4nICk7XHJcblx0XHR9XHJcblx0fSBlbHNlIGlmICggJ2xlZnQnID09PSBwYXJhbXNbICdzaG93X2hlcmUnIF1bICd3aGVyZScgXSApe1xyXG5cclxuXHRcdGpxX2VsX21lc3NhZ2UgPSBqUXVlcnkoIHBhcmFtc1sgJ3Nob3dfaGVyZScgXVsgJ2pxX25vZGUnIF0gKS5zaWJsaW5ncyggJy53cGJjX2Zyb250X2VuZF9fbWVzc2FnZV9jb250YWluZXJfbGVmdCcgKS5maW5kKCAnW2lkXj1cIndwYmNfbm90aWNlX1wiXScgKTtcclxuXHRcdGlmICggKHBhcmFtc1sgJ2lmX3Zpc2libGVfbm90X3Nob3cnIF0pICYmIChqcV9lbF9tZXNzYWdlLmlzKCAnOnZpc2libGUnICkpICl7XHJcblx0XHRcdGlzX3Nob3dfbWVzc2FnZSA9IGZhbHNlO1xyXG5cdFx0XHR1bmlxdWVfZGl2X2lkID0galF1ZXJ5KCBqcV9lbF9tZXNzYWdlLmdldCggMCApICkuYXR0ciggJ2lkJyApO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCBpc19zaG93X21lc3NhZ2UgKXtcclxuXHRcdFx0alF1ZXJ5KCBwYXJhbXNbICdzaG93X2hlcmUnIF1bICdqcV9ub2RlJyBdICkuYmVmb3JlKCBzY3JvbGxfdG9fZWxlbWVudCApO1x0XHQvLyBXZSBuZWVkIHRvICBzZXQgIGhlcmUgYmVmb3JlKGZvciBoYW5keSBzY3JvbGwpXHJcblx0XHRcdGpRdWVyeSggcGFyYW1zWyAnc2hvd19oZXJlJyBdWyAnanFfbm9kZScgXSApLmJlZm9yZSggJzxkaXYgY2xhc3M9XCJ3cGJjX2Zyb250X2VuZF9fbWVzc2FnZV9jb250YWluZXJfbGVmdFwiPicgKyBtZXNzYWdlICsgJzwvZGl2PicgKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGlmICggICAoIGlzX3Nob3dfbWVzc2FnZSApICAmJiAgKCBwYXJzZUludCggcGFyYW1zWyAnZGVsYXknIF0gKSA+IDAgKSAgICl7XHJcblx0XHR2YXIgY2xvc2VkX3RpbWVyID0gc2V0VGltZW91dCggZnVuY3Rpb24gKCl7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0alF1ZXJ5KCAnIycgKyB1bmlxdWVfZGl2X2lkICkuZmFkZU91dCggMTUwMCApO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gLCBwYXJzZUludCggcGFyYW1zWyAnZGVsYXknIF0gKSAgICk7XHJcblxyXG5cdFx0dmFyIGNsb3NlZF90aW1lcjIgPSBzZXRUaW1lb3V0KCBmdW5jdGlvbiAoKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGpRdWVyeSggJyMnICsgdW5pcXVlX2Rpdl9pZCApLnRyaWdnZXIoICdoaWRlJyApO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0sICggcGFyc2VJbnQoIHBhcmFtc1sgJ2RlbGF5JyBdICkgKyAxNTAxICkgKTtcclxuXHR9XHJcblxyXG5cdC8vIENoZWNrICBpZiBzaG93ZWQgbWVzc2FnZSBpbiBzb21lIGhpZGRlbiBwYXJlbnQgc2VjdGlvbiBhbmQgc2hvdyBpdC4gQnV0IGl0IG11c3QgIGJlIGxvd2VyIHRoYW4gJy53cGJjX2NvbnRhaW5lcidcclxuXHR2YXIgcGFyZW50X2VscyA9IGpRdWVyeSggJyMnICsgdW5pcXVlX2Rpdl9pZCApLnBhcmVudHMoKS5tYXAoIGZ1bmN0aW9uICgpe1xyXG5cdFx0aWYgKCAoIWpRdWVyeSggdGhpcyApLmlzKCAndmlzaWJsZScgKSkgJiYgKGpRdWVyeSggJy53cGJjX2NvbnRhaW5lcicgKS5oYXMoIHRoaXMgKSkgKXtcclxuXHRcdFx0alF1ZXJ5KCB0aGlzICkuc2hvdygpO1xyXG5cdFx0fVxyXG5cdH0gKTtcclxuXHJcblx0aWYgKCBwYXJhbXNbICdpc19zY3JvbGwnIF0gKXtcclxuXHRcdHdwYmNfZG9fc2Nyb2xsKCAnIycgKyB1bmlxdWVfZGl2X2lkICsgJ19zY3JvbGwnICk7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gdW5pcXVlX2Rpdl9pZDtcclxufVxyXG5cclxuXHJcblx0LyoqXHJcblx0ICogRXJyb3IgbWVzc2FnZS4gXHRQcmVzZXQgb2YgcGFyYW1ldGVycyBmb3IgcmVhbCBtZXNzYWdlIGZ1bmN0aW9uLlxyXG5cdCAqXHJcblx0ICogQHBhcmFtIGVsXHRcdC0gYW55IGpRdWVyeSBub2RlIGRlZmluaXRpb25cclxuXHQgKiBAcGFyYW0gbWVzc2FnZVx0LSBNZXNzYWdlIEhUTUxcclxuXHQgKiBAcmV0dXJucyBzdHJpbmcgIC0gSFRNTCBJRFx0XHRvciAwIGlmIG5vdCBzaG93aW5nIGR1cmluZyB0aGlzIHRpbWUuXHJcblx0ICovXHJcblx0ZnVuY3Rpb24gd3BiY19mcm9udF9lbmRfX3Nob3dfbWVzc2FnZV9fZXJyb3IoIGpxX25vZGUsIG1lc3NhZ2UsIGNvbnRlbnRfbW9kZSApe1xuXG5cdFx0Y29udGVudF9tb2RlID0gKCAndW5kZWZpbmVkJyA9PT0gdHlwZW9mIGNvbnRlbnRfbW9kZSApID8gJ2h0bWwnIDogY29udGVudF9tb2RlO1xuXHJcblx0XHR2YXIgbm90aWNlX21lc3NhZ2VfaWQgPSB3cGJjX2Zyb250X2VuZF9fc2hvd19tZXNzYWdlKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2UsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3R5cGUnICAgICAgICAgICAgICAgOiAnZXJyb3InLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J2RlbGF5JyAgICAgICAgICAgICAgOiAxMDAwMCxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnaWZfdmlzaWJsZV9ub3Rfc2hvdyc6IHRydWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdjb250ZW50X21vZGUnICAgICAgIDogY29udGVudF9tb2RlLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdzaG93X2hlcmUnICAgICAgICAgIDoge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3doZXJlJyAgOiAncmlnaHQnLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J2pxX25vZGUnOiBqcV9ub2RlXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgfVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRyZXR1cm4gbm90aWNlX21lc3NhZ2VfaWQ7XHJcblx0fVxyXG5cclxuXHJcblx0LyoqXHJcblx0ICogRXJyb3IgbWVzc2FnZSBVTkRFUiBlbGVtZW50LiBcdFByZXNldCBvZiBwYXJhbWV0ZXJzIGZvciByZWFsIG1lc3NhZ2UgZnVuY3Rpb24uXHJcblx0ICpcclxuXHQgKiBAcGFyYW0gZWxcdFx0LSBhbnkgalF1ZXJ5IG5vZGUgZGVmaW5pdGlvblxyXG5cdCAqIEBwYXJhbSBtZXNzYWdlXHQtIE1lc3NhZ2UgSFRNTFxyXG5cdCAqIEByZXR1cm5zIHN0cmluZyAgLSBIVE1MIElEXHRcdG9yIDAgaWYgbm90IHNob3dpbmcgZHVyaW5nIHRoaXMgdGltZS5cclxuXHQgKi9cclxuXHRmdW5jdGlvbiB3cGJjX2Zyb250X2VuZF9fc2hvd19tZXNzYWdlX19lcnJvcl91bmRlcl9lbGVtZW50KCBqcV9ub2RlLCBtZXNzYWdlLCBtZXNzYWdlX2RlbGF5LCBjb250ZW50X21vZGUgKXtcblxyXG5cdFx0aWYgKCAndW5kZWZpbmVkJyA9PT0gdHlwZW9mIChtZXNzYWdlX2RlbGF5KSApe1xuXHRcdFx0bWVzc2FnZV9kZWxheSA9IDBcblx0XHR9XG5cdFx0Y29udGVudF9tb2RlID0gKCAndW5kZWZpbmVkJyA9PT0gdHlwZW9mIGNvbnRlbnRfbW9kZSApID8gJ2h0bWwnIDogY29udGVudF9tb2RlO1xuXHJcblx0XHR2YXIgbm90aWNlX21lc3NhZ2VfaWQgPSB3cGJjX2Zyb250X2VuZF9fc2hvd19tZXNzYWdlKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2UsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3R5cGUnICAgICAgICAgICAgICAgOiAnZXJyb3InLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J2RlbGF5JyAgICAgICAgICAgICAgOiBtZXNzYWdlX2RlbGF5LFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdpZl92aXNpYmxlX25vdF9zaG93JzogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J2NvbnRlbnRfbW9kZScgICAgICAgOiBjb250ZW50X21vZGUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3Nob3dfaGVyZScgICAgICAgICAgOiB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnd2hlcmUnICA6ICdhZnRlcicsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnanFfbm9kZSc6IGpxX25vZGVcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICB9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdHJldHVybiBub3RpY2VfbWVzc2FnZV9pZDtcclxuXHR9XHJcblxyXG5cclxuXHQvKipcclxuXHQgKiBFcnJvciBtZXNzYWdlIFVOREVSIGVsZW1lbnQuIFx0UHJlc2V0IG9mIHBhcmFtZXRlcnMgZm9yIHJlYWwgbWVzc2FnZSBmdW5jdGlvbi5cclxuXHQgKlxyXG5cdCAqIEBwYXJhbSBlbFx0XHQtIGFueSBqUXVlcnkgbm9kZSBkZWZpbml0aW9uXHJcblx0ICogQHBhcmFtIG1lc3NhZ2VcdC0gTWVzc2FnZSBIVE1MXHJcblx0ICogQHJldHVybnMgc3RyaW5nICAtIEhUTUwgSURcdFx0b3IgMCBpZiBub3Qgc2hvd2luZyBkdXJpbmcgdGhpcyB0aW1lLlxyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIHdwYmNfZnJvbnRfZW5kX19zaG93X21lc3NhZ2VfX2Vycm9yX2Fib3ZlX2VsZW1lbnQoIGpxX25vZGUsIG1lc3NhZ2UsIG1lc3NhZ2VfZGVsYXksIGNvbnRlbnRfbW9kZSApe1xuXHJcblx0XHRpZiAoICd1bmRlZmluZWQnID09PSB0eXBlb2YgKG1lc3NhZ2VfZGVsYXkpICl7XG5cdFx0XHRtZXNzYWdlX2RlbGF5ID0gMTAwMDBcblx0XHR9XG5cdFx0Y29udGVudF9tb2RlID0gKCAndW5kZWZpbmVkJyA9PT0gdHlwZW9mIGNvbnRlbnRfbW9kZSApID8gJ2h0bWwnIDogY29udGVudF9tb2RlO1xuXHJcblx0XHR2YXIgbm90aWNlX21lc3NhZ2VfaWQgPSB3cGJjX2Zyb250X2VuZF9fc2hvd19tZXNzYWdlKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2UsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3R5cGUnICAgICAgICAgICAgICAgOiAnZXJyb3InLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J2RlbGF5JyAgICAgICAgICAgICAgOiBtZXNzYWdlX2RlbGF5LFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdpZl92aXNpYmxlX25vdF9zaG93JzogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J2NvbnRlbnRfbW9kZScgICAgICAgOiBjb250ZW50X21vZGUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3Nob3dfaGVyZScgICAgICAgICAgOiB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnd2hlcmUnICA6ICdiZWZvcmUnLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J2pxX25vZGUnOiBqcV9ub2RlXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgfVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRyZXR1cm4gbm90aWNlX21lc3NhZ2VfaWQ7XHJcblx0fVxyXG5cclxuXHJcblx0LyoqXHJcblx0ICogV2FybmluZyBtZXNzYWdlLiBcdFByZXNldCBvZiBwYXJhbWV0ZXJzIGZvciByZWFsIG1lc3NhZ2UgZnVuY3Rpb24uXHJcblx0ICpcclxuXHQgKiBAcGFyYW0gZWxcdFx0LSBhbnkgalF1ZXJ5IG5vZGUgZGVmaW5pdGlvblxyXG5cdCAqIEBwYXJhbSBtZXNzYWdlXHQtIE1lc3NhZ2UgSFRNTFxyXG5cdCAqIEByZXR1cm5zIHN0cmluZyAgLSBIVE1MIElEXHRcdG9yIDAgaWYgbm90IHNob3dpbmcgZHVyaW5nIHRoaXMgdGltZS5cclxuXHQgKi9cclxuXHRmdW5jdGlvbiB3cGJjX2Zyb250X2VuZF9fc2hvd19tZXNzYWdlX193YXJuaW5nKCBqcV9ub2RlLCBtZXNzYWdlLCBjb250ZW50X21vZGUgKXtcblxuXHRcdGNvbnRlbnRfbW9kZSA9ICggJ3VuZGVmaW5lZCcgPT09IHR5cGVvZiBjb250ZW50X21vZGUgKSA/ICdodG1sJyA6IGNvbnRlbnRfbW9kZTtcblxyXG5cdFx0dmFyIG5vdGljZV9tZXNzYWdlX2lkID0gd3BiY19mcm9udF9lbmRfX3Nob3dfbWVzc2FnZShcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtZXNzYWdlLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCd0eXBlJyAgICAgICAgICAgICAgIDogJ3dhcm5pbmcnLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J2RlbGF5JyAgICAgICAgICAgICAgOiAxMDAwMCxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnaWZfdmlzaWJsZV9ub3Rfc2hvdyc6IHRydWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdjb250ZW50X21vZGUnICAgICAgIDogY29udGVudF9tb2RlLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdzaG93X2hlcmUnICAgICAgICAgIDoge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3doZXJlJyAgOiAncmlnaHQnLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J2pxX25vZGUnOiBqcV9ub2RlXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgfVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XHJcblx0XHR3cGJjX2hpZ2hsaWdodF9lcnJvcl9vbl9mb3JtX2ZpZWxkKCBqcV9ub2RlICk7XHJcblx0XHRyZXR1cm4gbm90aWNlX21lc3NhZ2VfaWQ7XHJcblx0fVxyXG5cclxuXHJcblx0LyoqXHJcblx0ICogV2FybmluZyBtZXNzYWdlIFVOREVSIGVsZW1lbnQuIFx0UHJlc2V0IG9mIHBhcmFtZXRlcnMgZm9yIHJlYWwgbWVzc2FnZSBmdW5jdGlvbi5cclxuXHQgKlxyXG5cdCAqIEBwYXJhbSBlbFx0XHQtIGFueSBqUXVlcnkgbm9kZSBkZWZpbml0aW9uXHJcblx0ICogQHBhcmFtIG1lc3NhZ2VcdC0gTWVzc2FnZSBIVE1MXHJcblx0ICogQHJldHVybnMgc3RyaW5nICAtIEhUTUwgSURcdFx0b3IgMCBpZiBub3Qgc2hvd2luZyBkdXJpbmcgdGhpcyB0aW1lLlxyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIHdwYmNfZnJvbnRfZW5kX19zaG93X21lc3NhZ2VfX3dhcm5pbmdfdW5kZXJfZWxlbWVudCgganFfbm9kZSwgbWVzc2FnZSwgY29udGVudF9tb2RlICl7XG5cblx0XHRjb250ZW50X21vZGUgPSAoICd1bmRlZmluZWQnID09PSB0eXBlb2YgY29udGVudF9tb2RlICkgPyAnaHRtbCcgOiBjb250ZW50X21vZGU7XG5cclxuXHRcdHZhciBub3RpY2VfbWVzc2FnZV9pZCA9IHdwYmNfZnJvbnRfZW5kX19zaG93X21lc3NhZ2UoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWVzc2FnZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQndHlwZScgICAgICAgICAgICAgICA6ICd3YXJuaW5nJyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdkZWxheScgICAgICAgICAgICAgIDogMTAwMDAsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J2lmX3Zpc2libGVfbm90X3Nob3cnOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnY29udGVudF9tb2RlJyAgICAgICA6IGNvbnRlbnRfbW9kZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnc2hvd19oZXJlJyAgICAgICAgICA6IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCd3aGVyZScgIDogJ2FmdGVyJyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdqcV9ub2RlJzoganFfbm9kZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgIH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0cmV0dXJuIG5vdGljZV9tZXNzYWdlX2lkO1xyXG5cdH1cclxuXHJcblxyXG5cdC8qKlxyXG5cdCAqIFdhcm5pbmcgbWVzc2FnZSBBQk9WRSBlbGVtZW50LiBcdFByZXNldCBvZiBwYXJhbWV0ZXJzIGZvciByZWFsIG1lc3NhZ2UgZnVuY3Rpb24uXHJcblx0ICpcclxuXHQgKiBAcGFyYW0gZWxcdFx0LSBhbnkgalF1ZXJ5IG5vZGUgZGVmaW5pdGlvblxyXG5cdCAqIEBwYXJhbSBtZXNzYWdlXHQtIE1lc3NhZ2UgSFRNTFxyXG5cdCAqIEByZXR1cm5zIHN0cmluZyAgLSBIVE1MIElEXHRcdG9yIDAgaWYgbm90IHNob3dpbmcgZHVyaW5nIHRoaXMgdGltZS5cclxuXHQgKi9cclxuXHRmdW5jdGlvbiB3cGJjX2Zyb250X2VuZF9fc2hvd19tZXNzYWdlX193YXJuaW5nX2Fib3ZlX2VsZW1lbnQoIGpxX25vZGUsIG1lc3NhZ2UsIGNvbnRlbnRfbW9kZSApe1xuXG5cdFx0Y29udGVudF9tb2RlID0gKCAndW5kZWZpbmVkJyA9PT0gdHlwZW9mIGNvbnRlbnRfbW9kZSApID8gJ2h0bWwnIDogY29udGVudF9tb2RlO1xuXHJcblx0XHR2YXIgbm90aWNlX21lc3NhZ2VfaWQgPSB3cGJjX2Zyb250X2VuZF9fc2hvd19tZXNzYWdlKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2UsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3R5cGUnICAgICAgICAgICAgICAgOiAnd2FybmluZycsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnZGVsYXknICAgICAgICAgICAgICA6IDEwMDAwLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdpZl92aXNpYmxlX25vdF9zaG93JzogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J2NvbnRlbnRfbW9kZScgICAgICAgOiBjb250ZW50X21vZGUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3Nob3dfaGVyZScgICAgICAgICAgOiB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnd2hlcmUnICA6ICdiZWZvcmUnLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J2pxX25vZGUnOiBqcV9ub2RlXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgfVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRyZXR1cm4gbm90aWNlX21lc3NhZ2VfaWQ7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBIaWdobGlnaHQgRXJyb3IgaW4gc3BlY2lmaWMgZmllbGRcclxuXHQgKlxyXG5cdCAqIEBwYXJhbSBqcV9ub2RlXHRcdFx0XHRcdHN0cmluZyBvciBqUXVlcnkgZWxlbWVudCwgIHdoZXJlIHNjcm9sbCAgdG9cclxuXHQgKi9cclxuXHRmdW5jdGlvbiB3cGJjX2hpZ2hsaWdodF9lcnJvcl9vbl9mb3JtX2ZpZWxkKCBqcV9ub2RlICl7XHJcblxyXG5cdFx0aWYgKCAhalF1ZXJ5KCBqcV9ub2RlICkubGVuZ3RoICl7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdGlmICggISBqUXVlcnkoIGpxX25vZGUgKS5pcyggJzppbnB1dCcgKSApe1xyXG5cdFx0XHQvLyBTaXR1YXRpb24gd2l0aCAgY2hlY2tib3hlcyBvciByYWRpbyAgYnV0dG9uc1xyXG5cdFx0XHR2YXIganFfbm9kZV9hcnIgPSBqUXVlcnkoIGpxX25vZGUgKS5maW5kKCAnOmlucHV0JyApO1xyXG5cdFx0XHRpZiAoICFqcV9ub2RlX2Fyci5sZW5ndGggKXtcclxuXHRcdFx0XHRyZXR1cm5cclxuXHRcdFx0fVxyXG5cdFx0XHRqcV9ub2RlID0ganFfbm9kZV9hcnIuZ2V0KCAwICk7XHJcblx0XHR9XHJcblx0XHR2YXIgcGFyYW1zID0ge307XHJcblx0XHRwYXJhbXNbICdkZWxheScgXSA9IDEwMDAwO1xyXG5cclxuXHRcdGlmICggIWpRdWVyeSgganFfbm9kZSApLmhhc0NsYXNzKCAnd3BiY19mb3JtX2ZpZWxkX2Vycm9yJyApICl7XHJcblxyXG5cdFx0XHRqUXVlcnkoIGpxX25vZGUgKS5hZGRDbGFzcyggJ3dwYmNfZm9ybV9maWVsZF9lcnJvcicgKVxyXG5cclxuXHRcdFx0aWYgKCBwYXJzZUludCggcGFyYW1zWyAnZGVsYXknIF0gKSA+IDAgKXtcclxuXHRcdFx0XHR2YXIgY2xvc2VkX3RpbWVyID0gc2V0VGltZW91dCggZnVuY3Rpb24gKCl7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCBqUXVlcnkoIGpxX25vZGUgKS5yZW1vdmVDbGFzcyggJ3dwYmNfZm9ybV9maWVsZF9lcnJvcicgKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgfVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgLCBwYXJzZUludCggcGFyYW1zWyAnZGVsYXknIF0gKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcbi8qKlxyXG4gKiBTY3JvbGwgdG8gc3BlY2lmaWMgZWxlbWVudFxyXG4gKlxyXG4gKiBAcGFyYW0ganFfbm9kZVx0XHRcdFx0XHRzdHJpbmcgb3IgalF1ZXJ5IGVsZW1lbnQsICB3aGVyZSBzY3JvbGwgIHRvXHJcbiAqIEBwYXJhbSBleHRyYV9zaGlmdF9vZmZzZXRcdFx0aW50IHNoaWZ0IG9mZnNldCBmcm9tICBqcV9ub2RlXHJcbiAqL1xyXG5mdW5jdGlvbiB3cGJjX2RvX3Njcm9sbCgganFfbm9kZSAsIGV4dHJhX3NoaWZ0X29mZnNldCA9IDAgKXtcclxuXHJcblx0aWYgKCAhalF1ZXJ5KCBqcV9ub2RlICkubGVuZ3RoICl7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cdHZhciB0YXJnZXRPZmZzZXQgPSBqUXVlcnkoIGpxX25vZGUgKS5vZmZzZXQoKS50b3A7XHJcblxyXG5cdGlmICggdGFyZ2V0T2Zmc2V0IDw9IDAgKXtcclxuXHRcdGlmICggMCAhPSBqUXVlcnkoIGpxX25vZGUgKS5uZXh0QWxsKCAnOnZpc2libGUnICkubGVuZ3RoICl7XHJcblx0XHRcdHRhcmdldE9mZnNldCA9IGpRdWVyeSgganFfbm9kZSApLm5leHRBbGwoICc6dmlzaWJsZScgKS5maXJzdCgpLm9mZnNldCgpLnRvcDtcclxuXHRcdH0gZWxzZSBpZiAoIDAgIT0galF1ZXJ5KCBqcV9ub2RlICkucGFyZW50KCkubmV4dEFsbCggJzp2aXNpYmxlJyApLmxlbmd0aCApe1xyXG5cdFx0XHR0YXJnZXRPZmZzZXQgPSBqUXVlcnkoIGpxX25vZGUgKS5wYXJlbnQoKS5uZXh0QWxsKCAnOnZpc2libGUnICkuZmlyc3QoKS5vZmZzZXQoKS50b3A7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRpZiAoIGpRdWVyeSggJyN3cGFkbWluYmFyJyApLmxlbmd0aCA+IDAgKXtcclxuXHRcdHRhcmdldE9mZnNldCA9IHRhcmdldE9mZnNldCAtIDUwIC0gNTA7XHJcblx0fSBlbHNlIHtcclxuXHRcdHRhcmdldE9mZnNldCA9IHRhcmdldE9mZnNldCAtIDIwIC0gNTA7XHJcblx0fVxyXG5cdHRhcmdldE9mZnNldCArPSBleHRyYV9zaGlmdF9vZmZzZXQ7XHJcblxyXG5cdC8vIFNjcm9sbCBvbmx5ICBpZiB3ZSBkaWQgbm90IHNjcm9sbCBiZWZvcmVcclxuXHRpZiAoICEgalF1ZXJ5KCAnaHRtbCxib2R5JyApLmlzKCAnOmFuaW1hdGVkJyApICl7XHJcblx0XHRqUXVlcnkoICdodG1sLGJvZHknICkuYW5pbWF0ZSgge3Njcm9sbFRvcDogdGFyZ2V0T2Zmc2V0fSwgNTAwICk7XHJcblx0fVxyXG59XHJcblxyXG4iLCJcclxuLy8gRml4SW46IDEwLjIuMC40LlxyXG4vKipcclxuICogRGVmaW5lIFBvcG92ZXJzIGZvciBUaW1lbGluZXMgaW4gV1AgQm9va2luZyBDYWxlbmRhclxyXG4gKlxyXG4gKiBAcmV0dXJucyB7c3RyaW5nfGJvb2xlYW59XHJcbiAqL1xyXG5mdW5jdGlvbiB3cGJjX2RlZmluZV90aXBweV9wb3BvdmVyKCl7XHJcblx0aWYgKCAnZnVuY3Rpb24nICE9PSB0eXBlb2YgKHdwYmNfdGlwcHkpICl7XHJcblx0XHRjb25zb2xlLmxvZyggJ1dQQkMgRXJyb3IuIHdwYmNfdGlwcHkgd2FzIG5vdCBkZWZpbmVkLicgKTtcclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcblx0d3BiY190aXBweSggJy5wb3BvdmVyX2JvdHRvbS5wb3BvdmVyX2NsaWNrJywge1xyXG5cdFx0Y29udGVudCggcmVmZXJlbmNlICl7XHJcblx0XHRcdHZhciBwb3BvdmVyX3RpdGxlID0gcmVmZXJlbmNlLmdldEF0dHJpYnV0ZSggJ2RhdGEtb3JpZ2luYWwtdGl0bGUnICk7XHJcblx0XHRcdHZhciBwb3BvdmVyX2NvbnRlbnQgPSByZWZlcmVuY2UuZ2V0QXR0cmlidXRlKCAnZGF0YS1jb250ZW50JyApO1xyXG5cdFx0XHRyZXR1cm4gJzxkaXYgY2xhc3M9XCJwb3BvdmVyIHBvcG92ZXJfdGlwcHlcIj4nXHJcblx0XHRcdFx0KyAnPGRpdiBjbGFzcz1cInBvcG92ZXItY2xvc2VcIj48YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgb25jbGljaz1cImphdmFzY3JpcHQ6dGhpcy5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQuX3RpcHB5LmhpZGUoKTtcIiA+JnRpbWVzOzwvYT48L2Rpdj4nXHJcblx0XHRcdFx0KyBwb3BvdmVyX2NvbnRlbnRcclxuXHRcdFx0XHQrICc8L2Rpdj4nO1xyXG5cdFx0fSxcclxuXHRcdGFsbG93SFRNTCAgICAgICAgOiB0cnVlLFxyXG5cdFx0dHJpZ2dlciAgICAgICAgICA6ICdtYW51YWwnLFxyXG5cdFx0aW50ZXJhY3RpdmUgICAgICA6IHRydWUsXHJcblx0XHRoaWRlT25DbGljayAgICAgIDogZmFsc2UsXHJcblx0XHRpbnRlcmFjdGl2ZUJvcmRlcjogMTAsXHJcblx0XHRtYXhXaWR0aCAgICAgICAgIDogNTUwLFxyXG5cdFx0dGhlbWUgICAgICAgICAgICA6ICd3cGJjLXRpcHB5LXBvcG92ZXInLFxyXG5cdFx0cGxhY2VtZW50ICAgICAgICA6ICdib3R0b20tc3RhcnQnLFxyXG5cdFx0dG91Y2ggICAgICAgICAgICA6IFsnaG9sZCcsIDUwMF0sXHJcblx0fSApO1xyXG5cdGpRdWVyeSggJy5wb3BvdmVyX2JvdHRvbS5wb3BvdmVyX2NsaWNrJyApLm9uKCAnY2xpY2snLCBmdW5jdGlvbiAoKXtcclxuXHRcdGlmICggdGhpcy5fdGlwcHkuc3RhdGUuaXNWaXNpYmxlICl7XHJcblx0XHRcdHRoaXMuX3RpcHB5LmhpZGUoKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMuX3RpcHB5LnNob3coKTtcclxuXHRcdH1cclxuXHR9ICk7XHJcblx0d3BiY19kZWZpbmVfaGlkZV90aXBweV9vbl9zY3JvbGwoKTtcclxufVxyXG5cclxuXHJcblxyXG5mdW5jdGlvbiB3cGJjX2RlZmluZV9oaWRlX3RpcHB5X29uX3Njcm9sbCgpe1xyXG5cdGpRdWVyeSggJy5mbGV4X3RsX19zY3JvbGxpbmdfc2VjdGlvbjIsLmZsZXhfdGxfX3Njcm9sbGluZ19zZWN0aW9ucycgKS5vbiggJ3Njcm9sbCcsIGZ1bmN0aW9uICggZXZlbnQgKXtcclxuXHRcdGlmICggJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mICh3cGJjX3RpcHB5KSApe1xyXG5cdFx0XHR3cGJjX3RpcHB5LmhpZGVBbGwoKTtcclxuXHRcdH1cclxuXHR9ICk7XHJcbn1cclxuIiwiLyoqXHJcbiAqIFdQQkMgY2FsZW5kYXIgbG9hZGVyIGJvb3RzdHJhcC5cclxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4gKiAtIEZpbmRzIGV2ZXJ5IC5jYWxlbmRhcl9sb2FkZXJfZnJhbWVbZGF0YS13cGJjLXJpZF0gb24gdGhlIHBhZ2UgKG5vdyBvciBsYXRlcikuXHJcbiAqIC0gRm9yIGVhY2ggbG9hZGVyIGVsZW1lbnQsIHdhaXRzIGEgXCJncmFjZVwiIHBlcmlvZCAoZGF0YS13cGJjLWdyYWNlLCBkZWZhdWx0IDgwMDAgbXMpOlxyXG4gKiAgICAgLSBJZiB0aGUgcmVhbCBjYWxlbmRhciBhcHBlYXJzOiBkbyBub3RoaW5nIChsb2FkZXIgbmF0dXJhbGx5IHJlcGxhY2VkKS5cclxuICogICAgIC0gSWYgbm90OiBzaG93IGEgaGVscGZ1bCBtZXNzYWdlIChtaXNzaW5nIGpRdWVyeS9fd3BiYy9kYXRlcGljaykgb3IgYSBkdXBsaWNhdGUgbm90aWNlLlxyXG4gKiAtIFdvcmtzIHdpdGggbXVsdGlwbGUgY2FsZW5kYXJzIGFuZCBldmVuIGR1cGxpY2F0ZSBSSURzIG9uIHRoZSBzYW1lIHBhZ2UuXHJcbiAqIC0gTm8gaW5saW5lIEpTIG5lZWRlZCBpbiB0aGUgc2hvcnRjb2RlL3RlbXBsYXRlIG91dHB1dC5cclxuICpcclxuICogRmlsZTogIC4uL2luY2x1ZGVzL19fanMvY2xpZW50L2NhbC93cGJjX2NhbF9sb2FkZXIuanNcclxuICpcclxuICogQHNpbmNlICAgIDEwLjE0LjVcclxuICogQG1vZGlmaWVkIDIwMjUtMDktMDcgMTI6MjFcclxuICogQHZlcnNpb24gIDEuMC4wXHJcbiAqXHJcbiAqL1xyXG4vKipcclxuICogV1BCQyBjYWxlbmRhciBsb2FkZXIgYm9vdHN0cmFwLlxyXG4gKiAtIEF1dG8tZGV0ZWN0cyAuY2FsZW5kYXJfbG9hZGVyX2ZyYW1lW2RhdGEtd3BiYy1yaWRdIGJsb2Nrcy5cclxuICogLSBXYWl0cyBhIFwiZ3JhY2VcIiBwZXJpb2QgcGVyIGVsZW1lbnQgYmVmb3JlIHNob3dpbmcgYSBoZWxwZnVsIG1lc3NhZ2VcclxuICogICBpZiB0aGUgcmVhbCBjYWxlbmRhciBoYXNuJ3QgcmVwbGFjZWQgdGhlIGxvYWRlci5cclxuICogLSBNdWx0aXBsZSBjYWxlbmRhcnMgYW5kIGR1cGxpY2F0ZSBSSURzIGFyZSBoYW5kbGVkLlxyXG4gKi9cclxuKGZ1bmN0aW9uICh3LCBkKSB7XHJcblx0J3VzZSBzdHJpY3QnO1xyXG5cclxuXHQvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHQgKiBTbWFsbCB1dGlsaXRpZXMgKHNuYWtlX2Nhc2UpXHJcblx0ICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG5cdC8qKiBUcmFjayBwcm9jZXNzZWQgbG9hZGVyIGVsZW1lbnRzOyBmYWxsYmFjayB0byBkYXRhIGZsYWcgaWYgV2Vha1NldCBtaXNzaW5nLiAqL1xyXG5cdHZhciBwcm9jZXNzZWRfc2V0ID0gdHlwZW9mIFdlYWtTZXQgPT09ICdmdW5jdGlvbicgPyBuZXcgV2Vha1NldCgpIDogbnVsbDtcclxuXHJcblx0LyoqIFJldHVybiBmaXJzdCBtYXRjaCBpbnNpZGUgb3B0aW9uYWwgcm9vdC4gKi9cclxuXHRmdW5jdGlvbiBxdWVyeV9vbmUoc2VsZWN0b3IsIHJvb3QpIHtcclxuXHRcdHJldHVybiAocm9vdCB8fCBkKS5xdWVyeVNlbGVjdG9yKCBzZWxlY3RvciApO1xyXG5cdH1cclxuXHJcblx0LyoqIFJldHVybiBOb2RlTGlzdCBvZiBtYXRjaGVzIGluc2lkZSBvcHRpb25hbCByb290LiAqL1xyXG5cdGZ1bmN0aW9uIHF1ZXJ5X2FsbChzZWxlY3Rvciwgcm9vdCkge1xyXG5cdFx0cmV0dXJuIChyb290IHx8IGQpLnF1ZXJ5U2VsZWN0b3JBbGwoIHNlbGVjdG9yICk7XHJcblx0fVxyXG5cclxuXHQvKiogUnVuIGEgY2FsbGJhY2sgd2hlbiBET00gaXMgcmVhZHkuICovXHJcblx0ZnVuY3Rpb24gb25fcmVhZHkoZm4pIHtcclxuXHRcdGlmICggZC5yZWFkeVN0YXRlID09PSAnbG9hZGluZycgKSB7XHJcblx0XHRcdGQuYWRkRXZlbnRMaXN0ZW5lciggJ0RPTUNvbnRlbnRMb2FkZWQnLCBmbiApO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Zm4oKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKiBDbGVhciBpbnRlcnZhbCBzYWZlbHkuICovXHJcblx0ZnVuY3Rpb24gc2FmZV9jbGVhcihpbnRlcnZhbF9pZCkge1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0dy5jbGVhckludGVydmFsKCBpbnRlcnZhbF9pZCApO1xyXG5cdFx0fSBjYXRjaCAoIGUgKSB7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKiogTWFyayBlbGVtZW50IHByb2Nlc3NlZCAoV2Vha1NldCBvciBkYXRhIGF0dHJpYnV0ZSkuICovXHJcblx0ZnVuY3Rpb24gbWFya19wcm9jZXNzZWQoZWwpIHtcclxuXHRcdGlmICggcHJvY2Vzc2VkX3NldCApIHtcclxuXHRcdFx0cHJvY2Vzc2VkX3NldC5hZGQoIGVsICk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdGVsLmRhdGFzZXQud3BiY1Byb2Nlc3NlZCA9ICcxJztcclxuXHRcdFx0fSBjYXRjaCAoIGUgKSB7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKiBDaGVjayBpZiBlbGVtZW50IHdhcyBwcm9jZXNzZWQuICovXHJcblx0ZnVuY3Rpb24gaXNfcHJvY2Vzc2VkKGVsKSB7XHJcblx0XHRyZXR1cm4gcHJvY2Vzc2VkX3NldCA/IHByb2Nlc3NlZF9zZXQuaGFzKCBlbCApIDogKGVsICYmIGVsLmRhdGFzZXQgJiYgZWwuZGF0YXNldC53cGJjUHJvY2Vzc2VkID09PSAnMScpO1xyXG5cdH1cclxuXHJcblx0LyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0ICogTWVzc2FnZXMgKGZpeGVkIEVuZ2xpc2ggc3RyaW5nczsgbm8gaTE4bilcclxuXHQgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcblx0LyoqXHJcblx0ICogQnVpbGQgZml4ZWQgRW5nbGlzaCBtZXNzYWdlcyBmb3IgYSByZXNvdXJjZS5cclxuXHQgKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IHJpZFxyXG5cdCAqIEByZXR1cm4ge3tkdXBsaWNhdGU6c3RyaW5nLHN1cHBvcnQ6c3RyaW5nLGxpYl9qcTpzdHJpbmcsbGliX2RwOnN0cmluZyxsaWJfd3BiYzpzdHJpbmd9fVxyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIGdldF9tZXNzYWdlcyhyaWQpIHtcclxuXHRcdHZhciByaWRfaW50ID0gcGFyc2VJbnQoIHJpZCwgMTAgKTtcclxuXHRcdHJldHVybiB7XHJcblx0XHRcdGR1cGxpY2F0ZSAgOlxyXG5cdFx0XHRcdCdZb3UgaGF2ZSBhZGRlZCB0aGUgc2FtZSBjYWxlbmRhciAoSUQgPSAnICsgcmlkX2ludCArICcpIG1vcmUgdGhhbiBvbmNlIG9uIHRoaXMgcGFnZS4gJyArXHJcblx0XHRcdFx0J1BsZWFzZSBrZWVwIG9ubHkgb25lIGNhbGVuZGFyIHdpdGggdGhlIHNhbWUgSUQgb24gYSBwYWdlIHRvIGF2b2lkIGNvbmZsaWN0cy4nLFxyXG5cdFx0XHRpbml0X2ZhaWxlZDpcclxuXHRcdFx0XHQnVGhlIGNhbGVuZGFyIGNvdWxkIG5vdCBiZSBpbml0aWFsaXplZCBvbiB0aGlzIHBhZ2UuJyArICdcXG4nICtcclxuXHRcdFx0XHQnUGxlYXNlIGNoZWNrIHlvdXIgYnJvd3NlciBjb25zb2xlIGZvciBKYXZhU2NyaXB0IGVycm9ycyBhbmQgY29uZmxpY3RzIHdpdGggb3RoZXIgc2NyaXB0cy9wbHVnaW5zLicsXHJcblx0XHRcdHN1cHBvcnQgICAgOiAnJywgLyogJ0NvbnRhY3Qgc3VwcG9ydEB3cGJvb2tpbmdjYWxlbmRhci5jb20gaWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucy4nLCAqL1xyXG5cdFx0XHRsaWJfanEgICAgIDpcclxuXHRcdFx0XHQnSXQgYXBwZWFycyB0aGF0IHRoZSBcImpRdWVyeVwiIGxpYnJhcnkgaXMgbm90IGxvYWRpbmcgY29ycmVjdGx5LicgKyAnXFxuJyArXHJcblx0XHRcdFx0J0ZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgcmVmZXIgdG8gdGhpcyBwYWdlOiBodHRwczovL3dwYm9va2luZ2NhbGVuZGFyLmNvbS9mYXEvJyxcclxuXHRcdFx0bGliX2RwICAgICA6XHJcblx0XHRcdFx0J0l0IGFwcGVhcnMgdGhhdCB0aGUgXCJqUXVlcnkuZGF0ZXBpY2tcIiBsaWJyYXJ5IGlzIG5vdCBsb2FkaW5nIGNvcnJlY3RseS4nICsgJ1xcbicgK1xyXG5cdFx0XHRcdCdGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHJlZmVyIHRvIHRoaXMgcGFnZTogaHR0cHM6Ly93cGJvb2tpbmdjYWxlbmRhci5jb20vZmFxLycsXHJcblx0XHRcdGxpYl93cGJjICAgOlxyXG5cdFx0XHRcdCdJdCBhcHBlYXJzIHRoYXQgdGhlIFwiX3dwYmNcIiBsaWJyYXJ5IGlzIG5vdCBsb2FkaW5nIGNvcnJlY3RseS4nICsgJ1xcbicgK1xyXG5cdFx0XHRcdCdQbGVhc2UgZW5hYmxlIHRoZSBsb2FkaW5nIG9mIEpTL0NTUyBmaWxlcyBmb3IgdGhpcyBwYWdlIG9uIHRoZSBcIldQIEJvb2tpbmcgQ2FsZW5kYXJcIiAtIFwiU2V0dGluZ3MgR2VuZXJhbFwiIC0gXCJBZHZhbmNlZFwiIHBhZ2UnICsgJ1xcbicgK1xyXG5cdFx0XHRcdCdGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHJlZmVyIHRvIHRoaXMgcGFnZTogaHR0cHM6Ly93cGJvb2tpbmdjYWxlbmRhci5jb20vZmFxLydcclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBXcmFwIHBsYWluIHRleHQgKHdpdGggbmV3bGluZXMpIGluIGEgc21hbGwgSFRNTCBjb250YWluZXIuXHJcblx0ICogQHBhcmFtIHtzdHJpbmd9IG1zZ1xyXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cclxuXHQgKi9cclxuXHRmdW5jdGlvbiB3cmFwX2h0bWwobXNnKSB7XHJcblx0XHRyZXR1cm4gJzxkaXYgc3R5bGU9XCJmb250LXNpemU6MTNweDttYXJnaW46MTBweDtcIj4nICsgU3RyaW5nKCBtc2cgfHwgJycgKS5yZXBsYWNlKCAvXFxuL2csICc8YnI+JyApICsgJzwvZGl2Pic7XHJcblx0fVxyXG5cclxuXHQvKiogTGlicmFyeSBwcmVzZW5jZSBjaGVja3MgKGZhc3QgJiBjaGVhcCkuICovXHJcblx0ZnVuY3Rpb24gaGFzX2pxKCkge1xyXG5cdFx0cmV0dXJuICEhKHcualF1ZXJ5ICYmIGpRdWVyeS5mbiAmJiB0eXBlb2YgalF1ZXJ5LmZuLm9uID09PSAnZnVuY3Rpb24nKTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIGhhc19kcCgpIHtcclxuXHRcdHJldHVybiAhISh3LmpRdWVyeSAmJiBqUXVlcnkuZGF0ZXBpY2spO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gaGFzX3dwYmMoKSB7XHJcblx0XHRyZXR1cm4gISEody5fd3BiYyAmJiB0eXBlb2Ygdy5fd3BiYy5zZXRfb3RoZXJfcGFyYW0gPT09ICdmdW5jdGlvbicpO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gbm9ybWFsaXplX3JpZChyaWQpIHtcclxuXHRcdHZhciBuID0gcGFyc2VJbnQoIHJpZCwgMTAgKTtcclxuXHRcdHJldHVybiAobiA+IDApID8gU3RyaW5nKCBuICkgOiAnJztcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIGdldF9yaWRfY291bnRzKHJpZCkge1xyXG5cdFx0dmFyIHIgPSBub3JtYWxpemVfcmlkKCByaWQgKTtcclxuXHRcdHJldHVybiB7XHJcblx0XHRcdHJpZCAgICAgICA6IHIsXHJcblx0XHRcdGxvYWRlcnMgICA6IHIgPyBxdWVyeV9hbGwoICcuY2FsZW5kYXJfbG9hZGVyX2ZyYW1lW2RhdGEtd3BiYy1yaWQ9XCInICsgciArICdcIl0nICkubGVuZ3RoIDogMCxcclxuXHRcdFx0Y29udGFpbmVyczogciA/IHF1ZXJ5X2FsbCggJyNjYWxlbmRhcl9ib29raW5nJyArIHIgKS5sZW5ndGggOiAwXHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gaXNfZHVwbGljYXRlX3JpZChyaWQpIHtcclxuXHRcdHZhciBjID0gZ2V0X3JpZF9jb3VudHMoIHJpZCApO1xyXG5cdFx0cmV0dXJuIChjLmxvYWRlcnMgPiAxKSB8fCAoYy5jb250YWluZXJzID4gMSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBEZXRlcm1pbmUgaWYgdGhlIGxvYWRlciBoYXMgYmVlbiByZXBsYWNlZCBieSB0aGUgcmVhbCBjYWxlbmRhci5cclxuXHQgKlxyXG5cdCAqIEBwYXJhbSB7RWxlbWVudH0gZWwgICAgICAgTG9hZGVyIGVsZW1lbnRcclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gcmlkICAgICAgIFJlc291cmNlIElEXHJcblx0ICogQHBhcmFtIHtFbGVtZW50fG51bGx9IGNvbnRhaW5lciBPcHRpb25hbCAjY2FsZW5kYXJfYm9va2luZ3tyaWR9IGVsZW1lbnRcclxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIGlzX3JlcGxhY2VkKGVsLCByaWQsIGNvbnRhaW5lcikge1xyXG5cdFx0dmFyIGxvYWRlcl9zdGlsbF9pbl9kb20gPSBkLmJvZHkuY29udGFpbnMoIGVsICk7XHJcblx0XHR2YXIgY2FsZW5kYXJfZXhpc3RzICAgICA9ICEhcXVlcnlfb25lKCAnLndwYmNfY2FsZW5kYXJfaWRfJyArIHJpZCwgY29udGFpbmVyIHx8IGQgKTtcclxuXHRcdHJldHVybiAoIWxvYWRlcl9zdGlsbF9pbl9kb20pIHx8IGNhbGVuZGFyX2V4aXN0cztcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFN0YXJ0IHdhdGNoZXIgZm9yIGEgc2luZ2xlIGxvYWRlciBlbGVtZW50LlxyXG5cdCAqIC0gUG9sbHMgYW5kIG9ic2VydmVzIHRoZSBjYWxlbmRhciBjb250YWluZXIuXHJcblx0ICogLSBBZnRlciBncmFjZSwgaW5qZWN0cyBhIHN1aXRhYmxlIG1lc3NhZ2UgaWYgbm90IHJlcGxhY2VkLlxyXG5cdCAqXHJcblx0ICogQHBhcmFtIHtFbGVtZW50fSBlbFxyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIHN0YXJ0X2ZvcihlbCkge1xyXG5cdFx0aWYgKCAhIGVsIHx8IGlzX3Byb2Nlc3NlZCggZWwgKSApIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0bWFya19wcm9jZXNzZWQoIGVsICk7XHJcblxyXG5cdFx0dmFyIHJpZCA9IGVsLmRhdGFzZXQud3BiY1JpZDtcclxuXHRcdGlmICggISByaWQgKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHR2YXIgZ3JhY2VfbXMgPSBwYXJzZUludCggZWwuZGF0YXNldC53cGJjR3JhY2UgfHwgJzgwMDAnLCAxMCApO1xyXG5cdFx0aWYgKCAhIChncmFjZV9tcyA+IDApICkge1xyXG5cdFx0XHRncmFjZV9tcyA9IDgwMDA7XHJcblx0XHR9XHJcblxyXG5cdFx0dmFyIGNvbnRhaW5lcl9pZCA9ICdjYWxlbmRhcl9ib29raW5nJyArIHJpZDtcclxuXHRcdHZhciBjb250YWluZXIgICAgPSBkLmdldEVsZW1lbnRCeUlkKCBjb250YWluZXJfaWQgKTtcclxuXHRcdHZhciB0ZXh0X2VsICAgICAgPSBxdWVyeV9vbmUoICcuY2FsZW5kYXJfbG9hZGVyX3RleHQnLCBlbCApO1xyXG5cclxuXHRcdGZ1bmN0aW9uIHJlcGxhY2VkX25vdygpIHtcclxuXHRcdFx0cmV0dXJuIGlzX3JlcGxhY2VkKCBlbCwgcmlkLCBjb250YWluZXIgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBBbHJlYWR5IHJlcGxhY2VkIC0+IG5vdGhpbmcgdG8gZG8uXHJcblx0XHRpZiAoIHJlcGxhY2VkX25vdygpICkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gMSkgQ2hlYXAgcG9sbGluZy5cclxuXHRcdHZhciBwb2xsX2lkID0gdy5zZXRJbnRlcnZhbCggZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRpZiAoIHJlcGxhY2VkX25vdygpICkge1xyXG5cdFx0XHRcdHNhZmVfY2xlYXIoIHBvbGxfaWQgKTtcclxuXHRcdFx0XHRpZiAoIG9ic2VydmVyICkge1xyXG5cdFx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdFx0b2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xyXG5cdFx0XHRcdFx0fSBjYXRjaCAoIGUgKSB7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9LCAyNTAgKTtcclxuXHJcblx0XHQvLyAyKSBNdXRhdGlvbk9ic2VydmVyIGZvciBmYXN0ZXIgcmVhY3Rpb24uXHJcblx0XHR2YXIgb2JzZXJ2ZXIgPSBudWxsO1xyXG5cdFx0aWYgKCBjb250YWluZXIgJiYgJ011dGF0aW9uT2JzZXJ2ZXInIGluIHcgKSB7XHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0b2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlciggZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRcdFx0aWYgKCByZXBsYWNlZF9ub3coKSApIHtcclxuXHRcdFx0XHRcdFx0c2FmZV9jbGVhciggcG9sbF9pZCApO1xyXG5cdFx0XHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0XHRcdG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcclxuXHRcdFx0XHRcdFx0fSBjYXRjaCAoIGUgKSB7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9ICk7XHJcblx0XHRcdFx0b2JzZXJ2ZXIub2JzZXJ2ZSggY29udGFpbmVyLCB7IGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZSB9ICk7XHJcblx0XHRcdH0gY2F0Y2ggKCBlICkge1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gMykgRmluYWwgZGVjaXNpb24gYWZ0ZXIgZ3JhY2UgcGVyaW9kLlxyXG5cdFx0dy5zZXRUaW1lb3V0KCBmdW5jdGlvbiBmaW5hbGl6ZV9hZnRlcl9ncmFjZSgpIHtcclxuXHRcdFx0aWYgKCByZXBsYWNlZF9ub3coKSApIHtcclxuXHRcdFx0XHRzYWZlX2NsZWFyKCBwb2xsX2lkICk7XHJcblx0XHRcdFx0aWYgKCBvYnNlcnZlciApIHtcclxuXHRcdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHRcdG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcclxuXHRcdFx0XHRcdH0gY2F0Y2ggKCBlICkge1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHZhciBNID0gZ2V0X21lc3NhZ2VzKCByaWQgKTtcclxuXHRcdFx0dmFyIG1zZztcclxuXHRcdFx0aWYgKCAhIGhhc19qcSgpICkge1xyXG5cdFx0XHRcdG1zZyA9IE0ubGliX2pxO1xyXG5cdFx0XHR9IGVsc2UgaWYgKCAhIGhhc193cGJjKCkgKSB7XHJcblx0XHRcdFx0bXNnID0gTS5saWJfd3BiYztcclxuXHRcdFx0fSBlbHNlIGlmICggISBoYXNfZHAoKSApIHtcclxuXHRcdFx0XHRtc2cgPSBNLmxpYl9kcDtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHQvLyBMaWJyYXJpZXMgYXJlIHByZXNlbnQsIGJ1dCBsb2FkZXIgd2Fzbid0IHJlcGxhY2VkIC0+IGRlY2lkZSB3aGF0IGlzIG1vc3QgbGlrZWx5LlxyXG5cdFx0XHRcdGlmICggaXNfZHVwbGljYXRlX3JpZCggcmlkICkgKSB7XHJcblx0XHRcdFx0XHRtc2cgPSBNLmR1cGxpY2F0ZSArICdcXG5cXG4nICsgTS5zdXBwb3J0O1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRtc2cgPSBNLmluaXRfZmFpbGVkICsgJ1xcblxcbicgKyBNLnN1cHBvcnQ7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdGlmICggdGV4dF9lbCApIHtcclxuXHRcdFx0XHRcdHRleHRfZWwuaW5uZXJIVE1MID0gd3JhcF9odG1sKCBtc2cgKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gY2F0Y2ggKCBlICkge1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRzYWZlX2NsZWFyKCBwb2xsX2lkICk7XHJcblx0XHRcdGlmICggb2JzZXJ2ZXIgKSB7XHJcblx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcclxuXHRcdFx0XHR9IGNhdGNoICggZSApIHtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0sIGdyYWNlX21zICk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBJbml0aWFsaXplIHdhdGNoZXJzIGZvciBsb2FkZXIgZWxlbWVudHMgYWxyZWFkeSBpbiB0aGUgRE9NLlxyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIGJvb3RzdHJhcF9leGlzdGluZygpIHtcclxuXHRcdHF1ZXJ5X2FsbCggJy5jYWxlbmRhcl9sb2FkZXJfZnJhbWVbZGF0YS13cGJjLXJpZF0nICkuZm9yRWFjaCggc3RhcnRfZm9yICk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBPYnNlcnZlIHRoZSBkb2N1bWVudCBmb3IgYW55IG5ldyBsb2FkZXIgZWxlbWVudHMgaW5zZXJ0ZWQgbGF0ZXIgKEFKQVgsIGJsb2NrIHJlbmRlcikuXHJcblx0ICovXHJcblx0ZnVuY3Rpb24gb2JzZXJ2ZV9uZXdfbG9hZGVycygpIHtcclxuXHRcdGlmICggISAoJ011dGF0aW9uT2JzZXJ2ZXInIGluIHcpICkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHR0cnkge1xyXG5cdFx0XHR2YXIgZG9jX29ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoIGZ1bmN0aW9uIChtdXRhdGlvbnMpIHtcclxuXHRcdFx0XHRmb3IgKCB2YXIgaSA9IDA7IGkgPCBtdXRhdGlvbnMubGVuZ3RoOyBpKysgKSB7XHJcblx0XHRcdFx0XHR2YXIgbm9kZXMgPSBtdXRhdGlvbnNbaV0uYWRkZWROb2RlcyB8fCBbXTtcclxuXHRcdFx0XHRcdGZvciAoIHZhciBqID0gMDsgaiA8IG5vZGVzLmxlbmd0aDsgaisrICkge1xyXG5cdFx0XHRcdFx0XHR2YXIgbm9kZSA9IG5vZGVzW2pdO1xyXG5cdFx0XHRcdFx0XHRpZiAoICEgbm9kZSB8fCBub2RlLm5vZGVUeXBlICE9PSAxICkge1xyXG5cdFx0XHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGlmICggbm9kZS5tYXRjaGVzICYmIG5vZGUubWF0Y2hlcyggJy5jYWxlbmRhcl9sb2FkZXJfZnJhbWVbZGF0YS13cGJjLXJpZF0nICkgKSB7XHJcblx0XHRcdFx0XHRcdFx0c3RhcnRfZm9yKCBub2RlICk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0aWYgKCBub2RlLnF1ZXJ5U2VsZWN0b3JBbGwgKSB7XHJcblx0XHRcdFx0XHRcdFx0dmFyIGlubmVyID0gbm9kZS5xdWVyeVNlbGVjdG9yQWxsKCAnLmNhbGVuZGFyX2xvYWRlcl9mcmFtZVtkYXRhLXdwYmMtcmlkXScgKTtcclxuXHRcdFx0XHRcdFx0XHRpZiAoIGlubmVyICYmIGlubmVyLmxlbmd0aCApIHtcclxuXHRcdFx0XHRcdFx0XHRcdGlubmVyLmZvckVhY2goIHN0YXJ0X2ZvciApO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSApO1xyXG5cdFx0XHRkb2Nfb2JzZXJ2ZXIub2JzZXJ2ZSggZC5kb2N1bWVudEVsZW1lbnQsIHsgY2hpbGRMaXN0OiB0cnVlLCBzdWJ0cmVlOiB0cnVlIH0gKTtcclxuXHRcdH0gY2F0Y2ggKCBlICkge1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0ICogQm9vdFxyXG5cdCAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cdG9uX3JlYWR5KCBmdW5jdGlvbiAoKSB7XHJcblx0XHRib290c3RyYXBfZXhpc3RpbmcoKTtcclxuXHRcdG9ic2VydmVfbmV3X2xvYWRlcnMoKTtcclxuXHR9ICk7XHJcblxyXG59KSggd2luZG93LCBkb2N1bWVudCApO1xyXG4iLCIoZnVuY3Rpb24oIHcgKSB7XHJcblxyXG5cdCd1c2Ugc3RyaWN0JztcclxuXHJcblx0aWYgKCAhIHcuV1BCQ19GRSApIHtcclxuXHRcdHcuV1BCQ19GRSA9IHt9O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQXV0by1maWxsIGJvb2tpbmcgZm9ybSBmaWVsZHMgKHRleHQvZW1haWwpIGJhc2VkIG9uIGlucHV0IFwibmFtZVwiIHBhdHRlcm5zLlxyXG5cdCAqXHJcblx0ICogRm9ybSBJRCBmb3JtYXQ6IGJvb2tpbmdfZm9ybXtyZXNvdXJjZV9pZH1cclxuXHQgKiBTa2lwcyBkYXRlIGZpZWxkOiBkYXRlX2Jvb2tpbmd7cmVzb3VyY2VfaWR9XHJcblx0ICpcclxuXHQgKiBAcGFyYW0ge251bWJlcn0gcmVzb3VyY2VfaWQgQm9va2luZyByZXNvdXJjZSBJRC5cclxuXHQgKiBAcGFyYW0ge09iamVjdH0gZmlsbF92YWx1ZXMgVmFsdWVzIHRvIGluamVjdCAoc3RyaW5ncykuXHJcblx0ICpcclxuXHQgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIGZvcm0gZm91bmQgYW5kIHByb2Nlc3NlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG5cdCAqL1xyXG5cdHcuV1BCQ19GRS5hdXRvZmlsbF9ib29raW5nX2Zvcm1fZmllbGRzID0gZnVuY3Rpb24oIHJlc291cmNlX2lkLCBmaWxsX3ZhbHVlcyApIHtcclxuXHJcblx0XHRyZXNvdXJjZV9pZCAgPSBwYXJzZUludCggcmVzb3VyY2VfaWQsIDEwICkgfHwgMDtcclxuXHRcdGZpbGxfdmFsdWVzICA9IGZpbGxfdmFsdWVzIHx8IHt9O1xyXG5cclxuXHRcdHZhciBmb3JtX2lkICAgPSAnYm9va2luZ19mb3JtJyArIHJlc291cmNlX2lkO1xyXG5cdFx0dmFyIGRhdGVfbmFtZSA9ICdkYXRlX2Jvb2tpbmcnICsgcmVzb3VyY2VfaWQ7XHJcblxyXG5cdFx0dmFyIHN1Ym1pdF9mb3JtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIGZvcm1faWQgKTtcclxuXHJcblx0XHRpZiAoICEgc3VibWl0X2Zvcm0gKSB7XHJcblx0XHRcdC8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cclxuXHRcdFx0Y29uc29sZS5lcnJvciggJ1dQQkM6IE5vIGJvb2tpbmcgZm9ybTogJyArIGZvcm1faWQgKTtcclxuXHRcdFx0LyogZXNsaW50LWVuYWJsZSBuby1jb25zb2xlICovXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBLZWVwIHNhbWUgcmVnZXggcnVsZXMgYW5kIHByaW9yaXR5IG9yZGVyIGFzIGxlZ2FjeSBpbmxpbmUgSlMuXHJcblx0XHR2YXIgcnVsZXMgPSBhcnJheV9ydWxlcyggZmlsbF92YWx1ZXMgKTtcclxuXHJcblx0XHR2YXIgZWxlbWVudHMgPSBzdWJtaXRfZm9ybS5lbGVtZW50cyB8fCBbXTtcclxuXHRcdHZhciBjb3VudCAgICA9IGVsZW1lbnRzLmxlbmd0aDtcclxuXHRcdHZhciBlbDtcclxuXHRcdHZhciBpO1xyXG5cdFx0dmFyIGo7XHJcblxyXG5cdFx0Zm9yICggaSA9IDA7IGkgPCBjb3VudDsgaSsrICkge1xyXG5cclxuXHRcdFx0ZWwgPSBlbGVtZW50c1sgaSBdO1xyXG5cclxuXHRcdFx0aWYgKCAhIGVsIHx8ICEgZWwubmFtZSApIHtcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gT25seSB0ZXh0L2VtYWlsIGlucHV0cy5cclxuXHRcdFx0aWYgKCAoIGVsLnR5cGUgIT09ICd0ZXh0JyApICYmICggZWwudHlwZSAhPT0gJ2VtYWlsJyApICkge1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBTa2lwIGRhdGUgZmllbGQuXHJcblx0XHRcdGlmICggZWwubmFtZSA9PT0gZGF0ZV9uYW1lICkge1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBGaWxsIG9ubHkgZW1wdHkgdmFsdWVzIChsZWdhY3kgYmVoYXZpb3I6ID09IFwiXCIpLlxyXG5cdFx0XHRpZiAoIGVsLnZhbHVlICE9PSAnJyApIHtcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Zm9yICggaiA9IDA7IGogPCBydWxlcy5sZW5ndGg7IGorKyApIHtcclxuXHJcblx0XHRcdFx0aWYgKCBydWxlc1sgaiBdLnJlLnRlc3QoIGVsLm5hbWUgKSApIHtcclxuXHJcblx0XHRcdFx0XHRpZiAoIHJ1bGVzWyBqIF0udmFsICE9PSAnJyApIHtcclxuXHRcdFx0XHRcdFx0ZWwudmFsdWUgPSBydWxlc1sgaiBdLnZhbDtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRicmVhazsgLy8gU3RvcCBhdCBmaXJzdCBtYXRjaGluZyBydWxlIChwcmlvcml0eSkuXHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fTtcclxuXHJcblx0LyoqXHJcblx0ICogQnVpbGQgcnVsZXMgYXJyYXkgZm9yIGF1dG9maWxsLlxyXG5cdCAqXHJcblx0ICogQHBhcmFtIHtPYmplY3R9IGZpbGxfdmFsdWVzIFZhbHVlcyB0byBpbmplY3QuXHJcblx0ICpcclxuXHQgKiBAcmV0dXJuIHtBcnJheX0gUnVsZXMgbGlzdC5cclxuXHQgKi9cclxuXHRmdW5jdGlvbiBhcnJheV9ydWxlcyggZmlsbF92YWx1ZXMgKSB7XHJcblxyXG5cdFx0Ly8gTm9ybWFsaXplIHRvIHN0cmluZ3MgKHByZXZlbnQgXCJ1bmRlZmluZWRcIiBpbiBmaWVsZHMpLlxyXG5cdFx0dmFyIG5pY2tuYW1lICA9ICggZmlsbF92YWx1ZXMubmlja25hbWUgIT0gbnVsbCApID8gU3RyaW5nKCBmaWxsX3ZhbHVlcy5uaWNrbmFtZSApIDogJyc7XHJcblx0XHR2YXIgbGFzdF9uYW1lID0gKCBmaWxsX3ZhbHVlcy5sYXN0X25hbWUgIT0gbnVsbCApID8gU3RyaW5nKCBmaWxsX3ZhbHVlcy5sYXN0X25hbWUgKSA6ICcnO1xyXG5cdFx0dmFyIGZpcnN0X25hbWUgPSAoIGZpbGxfdmFsdWVzLmZpcnN0X25hbWUgIT0gbnVsbCApID8gU3RyaW5nKCBmaWxsX3ZhbHVlcy5maXJzdF9uYW1lICkgOiAnJztcclxuXHRcdHZhciBlbWFpbCAgICAgPSAoIGZpbGxfdmFsdWVzLmVtYWlsICE9IG51bGwgKSA/IFN0cmluZyggZmlsbF92YWx1ZXMuZW1haWwgKSA6ICcnO1xyXG5cdFx0dmFyIHBob25lICAgICA9ICggZmlsbF92YWx1ZXMucGhvbmUgIT0gbnVsbCApID8gU3RyaW5nKCBmaWxsX3ZhbHVlcy5waG9uZSApIDogJyc7XHJcblx0XHR2YXIgbmJfZW5mYW50ID0gKCBmaWxsX3ZhbHVlcy5uYl9lbmZhbnQgIT0gbnVsbCApID8gU3RyaW5nKCBmaWxsX3ZhbHVlcy5uYl9lbmZhbnQgKSA6ICcnO1xyXG5cdFx0dmFyIHVybCAgICAgICA9ICggZmlsbF92YWx1ZXMudXJsICE9IG51bGwgKSA/IFN0cmluZyggZmlsbF92YWx1ZXMudXJsICkgOiAnJztcclxuXHJcblx0XHRyZXR1cm4gW1xyXG5cdFx0XHR7IHJlOiAvXihbQS1aYS16MC05X1xcLVxcLl0pKihuaWNrbmFtZSl7MX0oW0EtWmEtejAtOV9cXC1cXC5dKSokLywgdmFsOiBuaWNrbmFtZSB9LFxyXG5cdFx0XHR7IHJlOiAvXihbQS1aYS16MC05X1xcLVxcLl0pKihsYXN0fHNlY29uZCl7MX0oW19cXC1cXC5dKT9uYW1lKFtBLVphLXowLTlfXFwtXFwuXSkqJC8sIHZhbDogbGFzdF9uYW1lIH0sXHJcblx0XHRcdHsgcmU6IC9ebmFtZShbMC05X1xcLVxcLl0pKiQvLCB2YWw6IGZpcnN0X25hbWUgfSxcclxuXHRcdFx0eyByZTogL14oW0EtWmEtejAtOV9cXC1cXC5dKSooZmlyc3R8bXkpezF9KFtfXFwtXFwuXSk/bmFtZShbQS1aYS16MC05X1xcLVxcLl0pKiQvLCB2YWw6IGZpcnN0X25hbWUgfSxcclxuXHRcdFx0eyByZTogL14oZSk/KFtfXFwtXFwuXSk/bWFpbChbMC05X1xcLVxcLl0qKSQvLCB2YWw6IGVtYWlsIH0sXHJcblx0XHRcdHsgcmU6IC9eKFtBLVphLXowLTlfXFwtXFwuXSkqKHBob25lfGZvbmUpezF9KFtBLVphLXowLTlfXFwtXFwuXSkqJC8sIHZhbDogcGhvbmUgfSxcclxuXHRcdFx0eyByZTogL14oZSk/KFtfXFwtXFwuXSk/bmJfZW5mYW50KFswLTlfXFwtXFwuXSopJC8sIHZhbDogbmJfZW5mYW50IH0sXHJcblx0XHRcdHsgcmU6IC9eKFtBLVphLXowLTlfXFwtXFwuXSkqKFVSTHxzaXRlfHdlYnxXRUIpezF9KFtBLVphLXowLTlfXFwtXFwuXSkqJC8sIHZhbDogdXJsIH1cclxuXHRcdF07XHJcblx0fVxyXG5cclxufSkoIHdpbmRvdyApO1xyXG4iLCIvLyA9PSBTdWJtaXQgQm9va2luZyBEYXRhID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuLy8gUmVmYWN0b3JlZCAoc2FmZSksIHdpdGggbmV3IHdwYmNfKiBuYW1lcy5cclxuLy8gQmFja3dhcmQtY29tcGF0aWJsZSB3cmFwcGVycyBmb3IgbGVnYWN5IGZ1bmN0aW9uIG5hbWVzIGFyZSBpbmNsdWRlZCBhdCB0aGUgYm90dG9tLlxyXG4vLyBAZmlsZTogaW5jbHVkZXMvX19qcy9jbGllbnQvZnJvbnRfZW5kX2Zvcm0vYm9va2luZ19mb3JtX3N1Ym1pdC5qc1xyXG5cclxuLyoqXHJcbiAqIENoZWNrIGZpZWxkcyBhdCBmb3JtIGFuZCB0aGVuIHNlbmQgcmVxdWVzdCAobGVnYWN5OiBteWJvb2tpbmdfc3VibWl0KS5cclxuICpcclxuICogQHBhcmFtIHtIVE1MRm9ybUVsZW1lbnR9IHN1Ym1pdF9mb3JtXHJcbiAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gICByZXNvdXJjZV9pZFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgd3BkZXZfYWN0aXZlX2xvY2FsZVxyXG4gKlxyXG4gKiBAcmV0dXJuIHtmYWxzZXx1bmRlZmluZWR9IExlZ2FjeSBiZWhhdmlvcjogcmV0dXJucyBmYWxzZSBpbiBzb21lIGNhc2VzLCBvdGhlcndpc2UgdW5kZWZpbmVkLlxyXG4gKi9cclxuZnVuY3Rpb24gd3BiY19ib29raW5nX2Zvcm1fc3VibWl0KCBzdWJtaXRfZm9ybSwgcmVzb3VyY2VfaWQsIHdwZGV2X2FjdGl2ZV9sb2NhbGUgKSB7XHJcblxyXG5cdHJlc291cmNlX2lkID0gcGFyc2VJbnQoIHJlc291cmNlX2lkLCAxMCApO1xyXG5cclxuXHQvLyBTYWZldHkgZ3VhcmQgKGxlZ2FjeSBjb2RlIGFzc3VtZWQgdmFsaWQgZm9ybSkuXHJcblx0aWYgKCAhIHN1Ym1pdF9mb3JtIHx8ICEgc3VibWl0X2Zvcm0uZWxlbWVudHMgKSB7XHJcblx0XHQvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXHJcblx0XHRjb25zb2xlLmVycm9yKCAnV1BCQzogSW52YWxpZCBzdWJtaXQgZm9ybSBpbiB3cGJjX2Jvb2tpbmdfZm9ybV9zdWJtaXQoKS4nICk7XHJcblx0XHQvKiBlc2xpbnQtZW5hYmxlIG5vLWNvbnNvbGUgKi9cclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHQvLyBFeHRlcm5hbCBob29rOiBhbGxvdyBwYXVzZSBzdWJtaXQgb24gY29uZmlybWF0aW9uL3N1bW1hcnkgc3RlcC5cclxuXHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0dmFyIHRhcmdldF9lbG0gPSBqUXVlcnkoICcuYm9va2luZ19mb3JtX2RpdicgKS50cmlnZ2VyKCAnYm9va2luZ19mb3JtX3N1Ym1pdF9jbGljaycsIFsgcmVzb3VyY2VfaWQsIHN1Ym1pdF9mb3JtLCB3cGRldl9hY3RpdmVfbG9jYWxlIF0gKTsgLy8gRml4SW46IDguOC4zLjEzLlxyXG5cclxuXHRpZiAoXHJcblx0XHQoIGpRdWVyeSggdGFyZ2V0X2VsbSApLmZpbmQoICdpbnB1dFtuYW1lPVwiYm9va2luZ19mb3JtX3Nob3dfc3VtbWFyeVwiXScgKS5sZW5ndGggPiAwICkgJiZcclxuXHRcdCggJ3BhdXNlX3N1Ym1pdCcgPT09IGpRdWVyeSggdGFyZ2V0X2VsbSApLmZpbmQoICdpbnB1dFtuYW1lPVwiYm9va2luZ19mb3JtX3Nob3dfc3VtbWFyeVwiXScgKS52YWwoKSApXHJcblx0KSB7XHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cclxuXHQvLyBGaXhJbjogOC40LjAuMi5cclxuXHR2YXIgaXNfZXJyb3IgPSB3cGJjX2NoZWNrX2Vycm9yc19pbl9ib29raW5nX2Zvcm0oIHJlc291cmNlX2lkICk7XHJcblx0aWYgKCBpc19lcnJvciApIHtcclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHQvLyBTaG93IG1lc3NhZ2UgaWYgbm8gc2VsZWN0ZWQgZGF5cyBpbiBDYWxlbmRhcihzKS5cclxuXHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0dmFyIGRhdGVfaW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ2RhdGVfYm9va2luZycgKyByZXNvdXJjZV9pZCApO1xyXG5cdHZhciBkYXRlX3ZhbHVlID0gKCBkYXRlX2lucHV0ICkgPyBkYXRlX2lucHV0LnZhbHVlIDogJyc7XHJcblxyXG5cdGlmICggJycgPT09IGRhdGVfdmFsdWUgKSB7XHJcblxyXG5cdFx0dmFyIGFycl9vZl9zZWxlY3RlZF9hZGRpdGlvbmFsX2NhbGVuZGFycyA9IHdwYmNfZ2V0X2Fycl9vZl9zZWxlY3RlZF9hZGRpdGlvbmFsX2NhbGVuZGFycyggcmVzb3VyY2VfaWQgKTsgLy8gRml4SW46IDguNS4yLjI2LlxyXG5cclxuXHRcdGlmICggISBhcnJfb2Zfc2VsZWN0ZWRfYWRkaXRpb25hbF9jYWxlbmRhcnMgfHwgKCBhcnJfb2Zfc2VsZWN0ZWRfYWRkaXRpb25hbF9jYWxlbmRhcnMubGVuZ3RoID09PSAwICkgKSB7XHJcblx0XHRcdHdwYmNfZnJvbnRfZW5kX19zaG93X21lc3NhZ2VfX3dhcm5pbmcoXG5cdFx0XHRcdCcjYm9va2luZ19mb3JtX2RpdicgKyByZXNvdXJjZV9pZCArICcgLmJrX2NhbGVuZGFyX2ZyYW1lJyxcblx0XHRcdFx0X3dwYmMuZ2V0X21lc3NhZ2UoICdtZXNzYWdlX2NoZWNrX25vX3NlbGVjdGVkX2RhdGVzJyApLFxuXHRcdFx0XHQndGV4dCdcblx0XHRcdCk7XG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0Ly8gRml4SW46IDYuMS4xLjMuIFRpbWUgc2VsZWN0aW9uIGF2YWlsYWJpbGl0eSBjaGVja3MuXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdGlmICggdHlwZW9mIHdwYmNfaXNfdGhpc190aW1lX3NlbGVjdGlvbl9ub3RfYXZhaWxhYmxlID09PSAnZnVuY3Rpb24nICkge1xyXG5cclxuXHRcdGlmICggJycgPT09IGRhdGVfdmFsdWUgKSB7IC8vIFByaW1hcnkgY2FsZW5kYXIgbm90IHNlbGVjdGVkLlxyXG5cclxuXHRcdFx0dmFyIGFkZGl0aW9uYWxfY2FsZW5kYXJzX2VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICdhZGRpdGlvbmFsX2NhbGVuZGFycycgKyByZXNvdXJjZV9pZCApO1xyXG5cclxuXHRcdFx0aWYgKCBhZGRpdGlvbmFsX2NhbGVuZGFyc19lbCAhPT0gbnVsbCApIHsgLy8gQ2hlY2tpbmcgYWRkaXRpb25hbCBjYWxlbmRhcnMuXHJcblxyXG5cdFx0XHRcdHZhciBpZF9hZGRpdGlvbmFsX3N0ciA9IGFkZGl0aW9uYWxfY2FsZW5kYXJzX2VsLnZhbHVlO1xyXG5cdFx0XHRcdHZhciBpZF9hZGRpdGlvbmFsX2FyciA9IGlkX2FkZGl0aW9uYWxfc3RyLnNwbGl0KCAnLCcgKTtcclxuXHRcdFx0XHR2YXIgaXNfdGltZXNfZGF0ZXNfb2sgPSBmYWxzZTtcclxuXHJcblx0XHRcdFx0Zm9yICggdmFyIGlhID0gMDsgaWEgPCBpZF9hZGRpdGlvbmFsX2Fyci5sZW5ndGg7IGlhKysgKSB7XHJcblxyXG5cdFx0XHRcdFx0dmFyIGFkZF9pZCA9IGlkX2FkZGl0aW9uYWxfYXJyWyBpYSBdO1xyXG5cclxuXHRcdFx0XHRcdHZhciBhZGRfZGF0ZV9lbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnZGF0ZV9ib29raW5nJyArIGFkZF9pZCApO1xyXG5cdFx0XHRcdFx0dmFyIGFkZF9kYXRlX3ZhbCA9ICggYWRkX2RhdGVfZWwgKSA/IGFkZF9kYXRlX2VsLnZhbHVlIDogJyc7XHJcblxyXG5cdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHQoICcnICE9PSBhZGRfZGF0ZV92YWwgKSAmJlxyXG5cdFx0XHRcdFx0XHQoICEgd3BiY19pc190aGlzX3RpbWVfc2VsZWN0aW9uX25vdF9hdmFpbGFibGUoIGFkZF9pZCwgc3VibWl0X2Zvcm0uZWxlbWVudHMgKSApXHJcblx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0aXNfdGltZXNfZGF0ZXNfb2sgPSB0cnVlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aWYgKCAhIGlzX3RpbWVzX2RhdGVzX29rICkge1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdH0gZWxzZSB7IC8vIFByaW1hcnkgY2FsZW5kYXIgc2VsZWN0ZWQuXHJcblxyXG5cdFx0XHRpZiAoIHdwYmNfaXNfdGhpc190aW1lX3NlbGVjdGlvbl9ub3RfYXZhaWxhYmxlKCByZXNvdXJjZV9pZCwgc3VibWl0X2Zvcm0uZWxlbWVudHMgKSApIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHQvLyBTZXJpYWxpemUgZm9ybSAobGVnYWN5IGZvcm1hdCkuXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdHZhciBjb3VudCAgICA9IHN1Ym1pdF9mb3JtLmVsZW1lbnRzLmxlbmd0aDtcclxuXHR2YXIgZm9ybWRhdGEgPSAnJztcclxuXHR2YXIgaW5wX3ZhbHVlO1xyXG5cdHZhciBpbnBfdGl0bGVfdmFsdWU7XHJcblx0dmFyIGVsZW1lbnQ7XHJcblx0dmFyIGVsX3R5cGU7XHJcblxyXG5cdC8vIEhlbHBlcjogbGVnYWN5IGVzY2FwaW5nIGZvciB0aGUgc2VyaWFsaXplZCB2YWx1ZS5cclxuXHRmdW5jdGlvbiB3cGJjX2VzY2FwZV9zZXJpYWxpemVkX3ZhbHVlKCB2YWwgKSB7XHJcblxyXG5cdFx0dmFsID0gKCB2YWwgPT0gbnVsbCApID8gJycgOiBTdHJpbmcoIHZhbCApO1xyXG5cclxuXHRcdC8vIFJlcGxhY2UgcmVnaXN0ZXJlZCBjaGFyYWN0ZXJzLlxyXG5cdFx0dmFsID0gdmFsLnJlcGxhY2UoIG5ldyBSZWdFeHAoICdcXFxcXicsICdnJyApLCAnJiM5NDsnICk7XHJcblx0XHR2YWwgPSB2YWwucmVwbGFjZSggbmV3IFJlZ0V4cCggJ34nLCAnZycgKSwgJyYjMTI2OycgKTtcclxuXHJcblx0XHQvLyBSZXBsYWNlIHF1b3Rlcy5cclxuXHRcdHZhbCA9IHZhbC5yZXBsYWNlKCAvXCIvZywgJyYjMzQ7JyApO1xyXG5cdFx0dmFsID0gdmFsLnJlcGxhY2UoIC8nL2csICcmIzM5OycgKTtcclxuXHJcblx0XHRyZXR1cm4gdmFsO1xyXG5cdH1cclxuXHJcblx0Ly8gSGVscGVyOiBkZXRlcm1pbmUgVUkgdHlwZSBmb3IgdGl0bGUgZXh0cmFjdGlvbiAobGVnYWN5IGxvZ2ljKS5cclxuXHRmdW5jdGlvbiB3cGJjX2dldF9pbnB1dF9lbGVtZW50X3R5cGUoIGVsICkge1xyXG5cclxuXHRcdGlmICggISBlbCB8fCAhIGVsLnRhZ05hbWUgKSB7XHJcblx0XHRcdHJldHVybiAnJztcclxuXHRcdH1cclxuXHJcblx0XHR2YXIgdGFnID0gU3RyaW5nKCBlbC50YWdOYW1lICkudG9Mb3dlckNhc2UoKTtcclxuXHJcblx0XHRpZiAoICdpbnB1dCcgPT09IHRhZyApIHtcclxuXHRcdFx0cmV0dXJuICggZWwudHlwZSApID8gU3RyaW5nKCBlbC50eXBlICkudG9Mb3dlckNhc2UoKSA6ICd0ZXh0JztcclxuXHRcdH1cclxuXHJcblx0XHQvLyBMZWdhY3kgdXNlZCBcInNlbGVjdFwiIHN0cmluZyBoZXJlLlxyXG5cdFx0aWYgKCAnc2VsZWN0JyA9PT0gdGFnICkge1xyXG5cdFx0XHRyZXR1cm4gJ3NlbGVjdCc7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRhZztcclxuXHR9XHJcblxyXG5cdGZvciAoIHZhciBpID0gMDsgaSA8IGNvdW50OyBpKysgKSB7IC8vIEZpeEluOiA5LjEuNS4xLlxyXG5cclxuXHRcdGVsZW1lbnQgPSBzdWJtaXRfZm9ybS5lbGVtZW50c1sgaSBdO1xyXG5cclxuXHRcdGlmICggISBlbGVtZW50ICkge1xyXG5cdFx0XHRjb250aW51ZTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIGpRdWVyeSggZWxlbWVudCApLmNsb3Nlc3QoICcuYm9va2luZ19mb3JtX2dhcmJhZ2UnICkubGVuZ3RoICkge1xyXG5cdFx0XHRjb250aW51ZTsgLy8gU2tpcCBlbGVtZW50cyBmcm9tIGdhcmJhZ2UuIEZpeEluOiA3LjEuMi4xNC5cclxuXHRcdH1cclxuXHJcblx0XHRpZiAoICcxJyA9PT0gU3RyaW5nKCBqUXVlcnkoIGVsZW1lbnQgKS5hdHRyKCAnZGF0YS13cGJjLWJvb2tpbmctc3VibWl0LWlnbm9yZScgKSB8fCAnJyApICkge1xyXG5cdFx0XHRjb250aW51ZTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoXHJcblx0XHRcdCggZWxlbWVudC50eXBlICE9PSAnYnV0dG9uJyApICYmXHJcblx0XHRcdCggZWxlbWVudC50eXBlICE9PSAnaGlkZGVuJyApICYmXHJcblx0XHRcdCggZWxlbWVudC5uYW1lICE9PSAoICdkYXRlX2Jvb2tpbmcnICsgcmVzb3VyY2VfaWQgKSApXHJcblx0XHRcdC8vICYmICggalF1ZXJ5KCBlbGVtZW50ICkuaXMoICc6dmlzaWJsZScgKSApIC8vRml4SW46IDcuMi4xLjEyLjJcclxuXHRcdCkge1xyXG5cclxuXHRcdFx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdFx0XHQvLyBHZXQgZWxlbWVudCB2YWx1ZS5cclxuXHRcdFx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdFx0XHRpZiAoIGVsZW1lbnQudHlwZSA9PT0gJ2NoZWNrYm94JyApIHtcclxuXHJcblx0XHRcdFx0aWYgKCBlbGVtZW50LnZhbHVlID09PSAnJyApIHtcclxuXHRcdFx0XHRcdGlucF92YWx1ZSA9IGVsZW1lbnQuY2hlY2tlZDtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0aW5wX3ZhbHVlID0gKCBlbGVtZW50LmNoZWNrZWQgKSA/IGVsZW1lbnQudmFsdWUgOiAnJztcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHR9IGVsc2UgaWYgKCBlbGVtZW50LnR5cGUgPT09ICdyYWRpbycgKSB7XHJcblxyXG5cdFx0XHRcdGlmICggZWxlbWVudC5jaGVja2VkICkge1xyXG5cdFx0XHRcdFx0aW5wX3ZhbHVlID0gZWxlbWVudC52YWx1ZTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cclxuXHRcdFx0XHRcdC8vIFJlcXVpcmVkIHJhZGlvOiBzaG93IHdhcm5pbmcgaWYgbm9uZSBjaGVja2VkLlxyXG5cdFx0XHRcdFx0Ly8gRml4SW46IDcuMC4xLjYyLlxyXG5cdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHQoIGVsZW1lbnQuY2xhc3NOYW1lLmluZGV4T2YoICd3cGRldi12YWxpZGF0ZXMtYXMtcmVxdWlyZWQnICkgIT09IC0xICkgJiZcclxuXHRcdFx0XHRcdFx0KCBqUXVlcnkoIGVsZW1lbnQgKS5pcyggJzp2aXNpYmxlJyApICkgJiYgLy8gRml4SW46IDcuMi4xLjEyLjIuXHJcblx0XHRcdFx0XHRcdCggISBqUXVlcnkoICc6cmFkaW9bbmFtZT1cIicgKyBlbGVtZW50Lm5hbWUgKyAnXCJdJywgc3VibWl0X2Zvcm0gKS5pcyggJzpjaGVja2VkJyApIClcclxuXHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHR3cGJjX2Zyb250X2VuZF9fc2hvd19tZXNzYWdlX193YXJuaW5nKCBlbGVtZW50LCBfd3BiYy5nZXRfbWVzc2FnZSggJ21lc3NhZ2VfY2hlY2tfcmVxdWlyZWRfZm9yX3JhZGlvX2JveCcgKSwgJ3RleHQnICk7IC8vIEZpeEluOiA4LjUuMS4zLlxuXHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdC8vIFNraXAgc3RvcmluZyBlbXB0eSByYWRpbyBvcHRpb25zLlxyXG5cdFx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRpbnBfdmFsdWUgPSBlbGVtZW50LnZhbHVlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpbnBfdGl0bGVfdmFsdWUgPSAnJztcclxuXHJcblx0XHRcdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHRcdFx0Ly8gR2V0IGh1bWFuLWZyaWVuZGx5IHRpdGxlIHZhbHVlIChsZWdhY3kgYmVoYXZpb3IpLlxyXG5cdFx0XHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0XHRcdHZhciBpbnB1dF9lbGVtZW50X3R5cGUgPSB3cGJjX2dldF9pbnB1dF9lbGVtZW50X3R5cGUoIGVsZW1lbnQgKTtcclxuXHJcblx0XHRcdHN3aXRjaCAoIGlucHV0X2VsZW1lbnRfdHlwZSApIHtcclxuXHJcblx0XHRcdFx0Y2FzZSAndGV4dCc6XHJcblx0XHRcdFx0Y2FzZSAnZW1haWwnOlxyXG5cdFx0XHRcdFx0aW5wX3RpdGxlX3ZhbHVlID0gaW5wX3ZhbHVlO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblxyXG5cdFx0XHRcdGNhc2UgJ3NlbGVjdCc6XHJcblx0XHRcdFx0XHRpbnBfdGl0bGVfdmFsdWUgPSBqUXVlcnkoIGVsZW1lbnQgKS5maW5kKCAnb3B0aW9uOnNlbGVjdGVkJyApLnRleHQoKTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cclxuXHRcdFx0XHRjYXNlICdyYWRpbyc6XHJcblx0XHRcdFx0Y2FzZSAnY2hlY2tib3gnOlxyXG5cdFx0XHRcdFx0aWYgKCBqUXVlcnkoIGVsZW1lbnQgKS5pcyggJzpjaGVja2VkJyApICkge1xyXG5cdFx0XHRcdFx0XHR2YXIgbGFiZWxfZWxlbWVudCA9IGpRdWVyeSggZWxlbWVudCApLnBhcmVudHMoICcud3BkZXYtbGlzdC1pdGVtJyApLmZpbmQoICcud3BkZXYtbGlzdC1pdGVtLWxhYmVsJyApO1xyXG5cdFx0XHRcdFx0XHRpZiAoIGxhYmVsX2VsZW1lbnQubGVuZ3RoICkge1xyXG5cdFx0XHRcdFx0XHRcdGlucF90aXRsZV92YWx1ZSA9IGxhYmVsX2VsZW1lbnQuaHRtbCgpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHJcblx0XHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRcdGlucF90aXRsZV92YWx1ZSA9IGlucF92YWx1ZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdFx0XHQvLyBNdWx0aXBsZSBzZWxlY3QgdmFsdWUgZXh0cmFjdGlvbi5cclxuXHRcdFx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdFx0XHRpZiAoICggZWxlbWVudC50eXBlID09PSAnc2VsZWN0Ym94LW11bHRpcGxlJyApIHx8ICggZWxlbWVudC50eXBlID09PSAnc2VsZWN0LW11bHRpcGxlJyApICkge1xyXG5cdFx0XHRcdGlucF92YWx1ZSA9IGpRdWVyeSggJ1tuYW1lPVwiJyArIGVsZW1lbnQubmFtZSArICdcIl0nICkudmFsKCk7XHJcblx0XHRcdFx0aWYgKCAoIGlucF92YWx1ZSA9PT0gbnVsbCApIHx8ICggU3RyaW5nKCBpbnBfdmFsdWUgKSA9PT0gJycgKSApIHtcclxuXHRcdFx0XHRcdGlucF92YWx1ZSA9ICcnO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdFx0XHQvLyBNYWtlIHZhbGlkYXRpb24gb25seSBmb3IgdmlzaWJsZSBlbGVtZW50cy5cclxuXHRcdFx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdFx0XHRpZiAoIGpRdWVyeSggZWxlbWVudCApLmlzKCAnOnZpc2libGUnICkgKSB7IC8vIEZpeEluOiA3LjIuMS4xMi4yLlxyXG5cclxuXHRcdFx0XHQvLyBSZWNoZWNrIG1heCBhdmFpbGFibGUgdmlzaXRvcnMgc2VsZWN0aW9uLlxyXG5cdFx0XHRcdGlmICggdHlwZW9mIHdwYmNfX2lzX2xlc3NfdGhhbl9yZXF1aXJlZF9fb2ZfbWF4X2F2YWlsYWJsZV9zbG90c19fYmwgPT09ICdmdW5jdGlvbicgKSB7XHJcblx0XHRcdFx0XHRpZiAoIHdwYmNfX2lzX2xlc3NfdGhhbl9yZXF1aXJlZF9fb2ZfbWF4X2F2YWlsYWJsZV9zbG90c19fYmwoIHJlc291cmNlX2lkLCBlbGVtZW50ICkgKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIFJlcXVpcmVkIGZpZWxkcy5cclxuXHRcdFx0XHRpZiAoIGVsZW1lbnQuY2xhc3NOYW1lLmluZGV4T2YoICd3cGRldi12YWxpZGF0ZXMtYXMtcmVxdWlyZWQnICkgIT09IC0xICkge1xyXG5cclxuXHRcdFx0XHRcdGlmICggKCBlbGVtZW50LnR5cGUgPT09ICdjaGVja2JveCcgKSAmJiAoIGVsZW1lbnQuY2hlY2tlZCA9PT0gZmFsc2UgKSApIHtcclxuXHJcblx0XHRcdFx0XHRcdGlmICggISBqUXVlcnkoICc6Y2hlY2tib3hbbmFtZT1cIicgKyBlbGVtZW50Lm5hbWUgKyAnXCJdJywgc3VibWl0X2Zvcm0gKS5pcyggJzpjaGVja2VkJyApICkge1xyXG5cdFx0XHRcdFx0XHRcdHdwYmNfZnJvbnRfZW5kX19zaG93X21lc3NhZ2VfX3dhcm5pbmcoIGVsZW1lbnQsIF93cGJjLmdldF9tZXNzYWdlKCAnbWVzc2FnZV9jaGVja19yZXF1aXJlZF9mb3JfY2hlY2tfYm94JyApLCAndGV4dCcgKTsgLy8gRml4SW46IDguNS4xLjMuXG5cdFx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmICggZWxlbWVudC50eXBlID09PSAncmFkaW8nICkge1xyXG5cclxuXHRcdFx0XHRcdFx0aWYgKCAhIGpRdWVyeSggJzpyYWRpb1tuYW1lPVwiJyArIGVsZW1lbnQubmFtZSArICdcIl0nLCBzdWJtaXRfZm9ybSApLmlzKCAnOmNoZWNrZWQnICkgKSB7XHJcblx0XHRcdFx0XHRcdFx0d3BiY19mcm9udF9lbmRfX3Nob3dfbWVzc2FnZV9fd2FybmluZyggZWxlbWVudCwgX3dwYmMuZ2V0X21lc3NhZ2UoICdtZXNzYWdlX2NoZWNrX3JlcXVpcmVkX2Zvcl9yYWRpb19ib3gnICksICd0ZXh0JyApOyAvLyBGaXhJbjogOC41LjEuMy5cblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0aWYgKCAoIGVsZW1lbnQudHlwZSAhPT0gJ2NoZWNrYm94JyApICYmICggZWxlbWVudC50eXBlICE9PSAncmFkaW8nICkgJiYgKCAnJyA9PT0gd3BiY190cmltKCBpbnBfdmFsdWUgKSApICkge1xyXG5cdFx0XHRcdFx0XHR3cGJjX2Zyb250X2VuZF9fc2hvd19tZXNzYWdlX193YXJuaW5nKCBlbGVtZW50LCBfd3BiYy5nZXRfbWVzc2FnZSggJ21lc3NhZ2VfY2hlY2tfcmVxdWlyZWQnICksICd0ZXh0JyApOyAvLyBGaXhJbjogOC41LjEuMy5cblx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIEVtYWlsIGZvcm1hdCB2YWxpZGF0aW9uLlxyXG5cdFx0XHRcdGlmICggZWxlbWVudC5jbGFzc05hbWUuaW5kZXhPZiggJ3dwZGV2LXZhbGlkYXRlcy1hcy1lbWFpbCcgKSAhPT0gLTEgKSB7XHJcblxyXG5cdFx0XHRcdFx0aW5wX3ZhbHVlID0gU3RyaW5nKCBpbnBfdmFsdWUgKS5yZXBsYWNlKCAvXlxccyt8XFxzKyQvZ20sICcnICk7IC8vIFRyaW0gd2hpdGUgc3BhY2UuIEZpeEluOiA1LjQuNS5cclxuXHRcdFx0XHRcdHZhciByZWdfZW1haWwgPSAvXihbQS1aYS16MC05X1xcLVxcLlxcK10pK1xcQChbQS1aYS16MC05X1xcLVxcLl0pK1xcLihbQS1aYS16XXsyLH0pJC87XHJcblxyXG5cdFx0XHRcdFx0aWYgKCBpbnBfdmFsdWUgIT09ICcnICkge1xyXG5cdFx0XHRcdFx0XHRpZiAoIHJlZ19lbWFpbC50ZXN0KCBpbnBfdmFsdWUgKSA9PT0gZmFsc2UgKSB7XHJcblx0XHRcdFx0XHRcdFx0d3BiY19mcm9udF9lbmRfX3Nob3dfbWVzc2FnZV9fd2FybmluZyggZWxlbWVudCwgX3dwYmMuZ2V0X21lc3NhZ2UoICdtZXNzYWdlX2NoZWNrX2VtYWlsJyApLCAndGV4dCcgKTsgLy8gRml4SW46IDguNS4xLjMuXG5cdFx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gU2FtZSBlbWFpbCBmaWVsZCB2YWxpZGF0aW9uICh2ZXJpZmljYXRpb24gZmllbGQpLlxyXG5cdFx0XHRcdGlmICggKCBlbGVtZW50LmNsYXNzTmFtZS5pbmRleE9mKCAnd3BkZXYtdmFsaWRhdGVzLWFzLWVtYWlsJyApICE9PSAtMSApICYmICggZWxlbWVudC5jbGFzc05hbWUuaW5kZXhPZiggJ3NhbWVfYXNfJyApICE9PSAtMSApICkge1xyXG5cclxuXHRcdFx0XHRcdHZhciBwcmltYXJ5X2VtYWlsX25hbWUgPSBlbGVtZW50LmNsYXNzTmFtZS5tYXRjaCggL3NhbWVfYXNfKFteXFxzXSkrL2dpICk7XHJcblxyXG5cdFx0XHRcdFx0aWYgKCBwcmltYXJ5X2VtYWlsX25hbWUgIT09IG51bGwgKSB7XHJcblxyXG5cdFx0XHRcdFx0XHRwcmltYXJ5X2VtYWlsX25hbWUgPSBwcmltYXJ5X2VtYWlsX25hbWVbIDAgXS5zdWJzdHIoIDggKTtcclxuXHJcblx0XHRcdFx0XHRcdGlmICggalF1ZXJ5KCAnW25hbWU9XCInICsgcHJpbWFyeV9lbWFpbF9uYW1lICsgcmVzb3VyY2VfaWQgKyAnXCJdJyApLmxlbmd0aCA+IDAgKSB7XHJcblxyXG5cdFx0XHRcdFx0XHRcdGlmICggalF1ZXJ5KCAnW25hbWU9XCInICsgcHJpbWFyeV9lbWFpbF9uYW1lICsgcmVzb3VyY2VfaWQgKyAnXCJdJyApLnZhbCgpICE9PSBpbnBfdmFsdWUgKSB7XHJcblx0XHRcdFx0XHRcdFx0XHR3cGJjX2Zyb250X2VuZF9fc2hvd19tZXNzYWdlX193YXJuaW5nKCBlbGVtZW50LCBfd3BiYy5nZXRfbWVzc2FnZSggJ21lc3NhZ2VfY2hlY2tfc2FtZV9lbWFpbCcgKSwgJ3RleHQnICk7IC8vIEZpeEluOiA4LjUuMS4zLlxuXHRcdFx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHQvLyBTa2lwIG9uZSBsb29wIGZvciB0aGUgZW1haWwgdmVyaWZpY2F0aW9uIGZpZWxkLlxyXG5cdFx0XHRcdFx0Y29udGludWU7IC8vIEZpeEluOiA4LjEuMi4xNS5cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHRcdFx0Ly8gR2V0IEZvcm0gRGF0YSAobGVnYWN5IGZvcm1hdCkuXHJcblx0XHRcdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHRcdFx0aWYgKCBlbGVtZW50Lm5hbWUgIT09ICggJ2NhcHRjaGFfaW5wdXQnICsgcmVzb3VyY2VfaWQgKSApIHtcclxuXHJcblx0XHRcdFx0aWYgKCBmb3JtZGF0YSAhPT0gJycgKSB7XHJcblx0XHRcdFx0XHRmb3JtZGF0YSArPSAnfic7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRlbF90eXBlID0gZWxlbWVudC50eXBlO1xyXG5cclxuXHRcdFx0XHRpZiAoIGVsZW1lbnQuY2xhc3NOYW1lLmluZGV4T2YoICd3cGRldi12YWxpZGF0ZXMtYXMtZW1haWwnICkgIT09IC0xICkge1xyXG5cdFx0XHRcdFx0ZWxfdHlwZSA9ICdlbWFpbCc7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmICggZWxlbWVudC5jbGFzc05hbWUuaW5kZXhPZiggJ3dwZGV2LXZhbGlkYXRlcy1hcy1jb3Vwb24nICkgIT09IC0xICkge1xyXG5cdFx0XHRcdFx0ZWxfdHlwZSA9ICdjb3Vwb24nO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aW5wX3ZhbHVlID0gd3BiY19lc2NhcGVfc2VyaWFsaXplZF92YWx1ZSggaW5wX3ZhbHVlICk7XHJcblxyXG5cdFx0XHRcdGlmICggZWxfdHlwZSA9PT0gJ3NlbGVjdC1vbmUnICkge1xyXG5cdFx0XHRcdFx0ZWxfdHlwZSA9ICdzZWxlY3Rib3gtb25lJztcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKCBlbF90eXBlID09PSAnc2VsZWN0LW11bHRpcGxlJyApIHtcclxuXHRcdFx0XHRcdGVsX3R5cGUgPSAnc2VsZWN0Ym94LW11bHRpcGxlJztcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGZvcm1kYXRhICs9IGVsX3R5cGUgKyAnXicgKyBlbGVtZW50Lm5hbWUgKyAnXicgKyBpbnBfdmFsdWU7XHJcblxyXG5cdFx0XHRcdC8vIEFkZCB0aXRsZS9sYWJlbCB2YWx1ZSAobGVnYWN5KS5cclxuXHRcdFx0XHR2YXIgY2xlYW5fZmllbGRfbmFtZSA9IFN0cmluZyggZWxlbWVudC5uYW1lICk7XHJcblxyXG5cdFx0XHRcdC8vIEJVR0ZJWDogcmVwbGFjZUFsbChSZWdFeHApIGlzIG5vdCBzdXBwb3J0ZWQgaW4gb2xkZXIgYnJvd3NlcnMuXHJcblx0XHRcdFx0Ly8gS2VlcCBsZWdhY3kgaW50ZW50OiByZW1vdmUgW10gc3VmZml4IG9jY3VycmVuY2VzLlxyXG5cdFx0XHRcdGNsZWFuX2ZpZWxkX25hbWUgPSBjbGVhbl9maWVsZF9uYW1lLnJlcGxhY2UoIC9cXFtcXF0vZ2ksICcnICk7XHJcblxyXG5cdFx0XHRcdHZhciByZXNvdXJjZV9pZF9zdHIgPSBTdHJpbmcoIHJlc291cmNlX2lkICk7XHJcblxyXG5cdFx0XHRcdC8vIExlZ2FjeSBhc3N1bWVkIHN1ZmZpeCBlbmRzIHdpdGggcmVzb3VyY2VfaWQsIG1ha2UgaXQgc2FmZS5cclxuXHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHQoIGNsZWFuX2ZpZWxkX25hbWUubGVuZ3RoID49IHJlc291cmNlX2lkX3N0ci5sZW5ndGggKSAmJlxyXG5cdFx0XHRcdFx0KCBjbGVhbl9maWVsZF9uYW1lLnN1YnN0ciggY2xlYW5fZmllbGRfbmFtZS5sZW5ndGggLSByZXNvdXJjZV9pZF9zdHIubGVuZ3RoICkgPT09IHJlc291cmNlX2lkX3N0ciApXHJcblx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRjbGVhbl9maWVsZF9uYW1lID0gY2xlYW5fZmllbGRfbmFtZS5zdWJzdHIoIDAsIGNsZWFuX2ZpZWxkX25hbWUubGVuZ3RoIC0gcmVzb3VyY2VfaWRfc3RyLmxlbmd0aCApO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Zm9ybWRhdGEgKz0gJ34nICsgZWxfdHlwZSArICdeJyArIGNsZWFuX2ZpZWxkX25hbWUgKyAnX3ZhbCcgKyByZXNvdXJjZV9pZCArICdeJyArIGlucF90aXRsZV92YWx1ZTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly8gVE9ETzogaGVyZSB3YXMgZnVuY3Rpb24gZm9yICdDaGVjayBpZiB2aXNpdG9yIGZpbmlzaCBkYXRlcyBzZWxlY3Rpb24uXHJcblxyXG5cdC8vIENhcHRjaGEgdmVyaWZ5LlxyXG5cdHZhciBjYXB0Y2hhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICd3cGRldl9jYXB0Y2hhX2NoYWxsZW5nZV8nICsgcmVzb3VyY2VfaWQgKTtcclxuXHJcblx0aWYgKCBjYXB0Y2hhICE9PSBudWxsICkge1xyXG5cdFx0d3BiY19mb3JtX3N1Ym1pdF9zZW5kKCByZXNvdXJjZV9pZCwgZm9ybWRhdGEsIGNhcHRjaGEudmFsdWUsIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnY2FwdGNoYV9pbnB1dCcgKyByZXNvdXJjZV9pZCApLnZhbHVlLCB3cGRldl9hY3RpdmVfbG9jYWxlICk7XHJcblx0fSBlbHNlIHtcclxuXHRcdHdwYmNfZm9ybV9zdWJtaXRfc2VuZCggcmVzb3VyY2VfaWQsIGZvcm1kYXRhLCAnJywgJycsIHdwZGV2X2FjdGl2ZV9sb2NhbGUgKTtcclxuXHR9XHJcblxyXG5cdHJldHVybjtcclxufVxyXG5cclxuXHJcbi8qKlxyXG4gKiBHYXRoZXJpbmcgcGFyYW1zIGZvciBzZW5kaW5nIEFqYXggcmVxdWVzdCBhbmQgdGhlbiBzZW5kIGl0IChsZWdhY3k6IGZvcm1fc3VibWl0X3NlbmQpLlxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IHJlc291cmNlX2lkXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgZm9ybWRhdGFcclxuICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICBjYXB0Y2hhX2NoYWxhbmdlXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgdXNlcl9jYXB0Y2hhXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgd3BkZXZfYWN0aXZlX2xvY2FsZVxyXG4gKlxyXG4gKiBAcmV0dXJuIHt1bmRlZmluZWR9IExlZ2FjeSBiZWhhdmlvci5cclxuICovXHJcbmZ1bmN0aW9uIHdwYmNfZm9ybV9zdWJtaXRfc2VuZCggcmVzb3VyY2VfaWQsIGZvcm1kYXRhLCBjYXB0Y2hhX2NoYWxhbmdlLCB1c2VyX2NhcHRjaGEsIHdwZGV2X2FjdGl2ZV9sb2NhbGUgKSB7XHJcblxyXG5cdHJlc291cmNlX2lkID0gcGFyc2VJbnQoIHJlc291cmNlX2lkLCAxMCApO1xyXG5cclxuXHR2YXIgbXlfYm9va2luZ19mb3JtID0gJyc7XHJcblx0dmFyIGJvb2tpbmdfZm9ybV90eXBlX2VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICdib29raW5nX2Zvcm1fdHlwZScgKyByZXNvdXJjZV9pZCApO1xyXG5cdGlmICggYm9va2luZ19mb3JtX3R5cGVfZWwgIT09IG51bGwgKSB7XHJcblx0XHRteV9ib29raW5nX2Zvcm0gPSBib29raW5nX2Zvcm1fdHlwZV9lbC52YWx1ZTtcclxuXHR9XHJcblxyXG5cdHZhciBteV9ib29raW5nX2hhc2ggPSAnJztcclxuXHRpZiAoIF93cGJjLmdldF9vdGhlcl9wYXJhbSggJ3RoaXNfcGFnZV9ib29raW5nX2hhc2gnICkgIT09ICcnICkge1xyXG5cdFx0bXlfYm9va2luZ19oYXNoID0gX3dwYmMuZ2V0X290aGVyX3BhcmFtKCAndGhpc19wYWdlX2Jvb2tpbmdfaGFzaCcgKTtcclxuXHR9XHJcblxyXG5cdHZhciBpc19zZW5kX2VtZWlscyA9IDE7XHJcblx0dmFyICRpc19zZW5kX2VtYWlsX3RvZ2dsZSA9IGpRdWVyeSggJyNpc19zZW5kX2VtYWlsX2Zvcl9wZW5kaW5nJyApO1xyXG5cdHZhciAkbW9kYWxfc2VuZF9lbWFpbF90b2dnbGUgPSBqUXVlcnkoICcjYm9va2luZ19mb3JtJyArIHJlc291cmNlX2lkICkuY2xvc2VzdCggJy53cGJjX21vZGFsX19hZGRfYm9va2luZ19fc2VjdGlvbicgKS5maW5kKCAnW2RhdGEtd3BiYy1hZGQtYm9va2luZy1zZW5kLWVtYWlsc10nICkuZmlyc3QoKTtcclxuXHRpZiAoICRtb2RhbF9zZW5kX2VtYWlsX3RvZ2dsZS5sZW5ndGggKSB7XHJcblx0XHQkaXNfc2VuZF9lbWFpbF90b2dnbGUgPSAkbW9kYWxfc2VuZF9lbWFpbF90b2dnbGU7XHJcblx0fVxyXG5cdGlmICggJGlzX3NlbmRfZW1haWxfdG9nZ2xlLmxlbmd0aCApIHsgLy8gRml4SW46IDguNy45LjUuXHJcblxyXG5cdFx0aXNfc2VuZF9lbWVpbHMgPSAkaXNfc2VuZF9lbWFpbF90b2dnbGUuaXMoICc6Y2hlY2tlZCcgKTtcclxuXHJcblx0XHRpZiAoIGZhbHNlID09PSBpc19zZW5kX2VtZWlscyApIHtcclxuXHRcdFx0aXNfc2VuZF9lbWVpbHMgPSAwO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0aXNfc2VuZF9lbWVpbHMgPSAxO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0dmFyIGRhdGVfZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ2RhdGVfYm9va2luZycgKyByZXNvdXJjZV9pZCApO1xyXG5cdHZhciBkYXRlX3ZhbHVlID0gKCBkYXRlX2VsICkgPyBkYXRlX2VsLnZhbHVlIDogJyc7XHJcblxyXG5cdGlmICggJycgIT09IGRhdGVfdmFsdWUgKSB7IC8vIEZpeEluOiA2LjEuMS4zLlxyXG5cdFx0d3BiY19zZW5kX2FqYXhfc3VibWl0KCByZXNvdXJjZV9pZCwgZm9ybWRhdGEsIGNhcHRjaGFfY2hhbGFuZ2UsIHVzZXJfY2FwdGNoYSwgaXNfc2VuZF9lbWVpbHMsIG15X2Jvb2tpbmdfaGFzaCwgbXlfYm9va2luZ19mb3JtLCB3cGRldl9hY3RpdmVfbG9jYWxlICk7XHJcblx0fSBlbHNlIHtcclxuXHRcdGpRdWVyeSggJyNib29raW5nX2Zvcm1fZGl2JyArIHJlc291cmNlX2lkICkuaGlkZSgpO1xyXG5cdFx0alF1ZXJ5KCAnI3N1Ym1pdGluZycgKyByZXNvdXJjZV9pZCApLmhpZGUoKTtcclxuXHR9XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHQvLyBBZGRpdGlvbmFsIGNhbGVuZGFycyBzdWJtaXQuXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdHZhciBhZGRpdGlvbmFsX2NhbGVuZGFyc19lbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnYWRkaXRpb25hbF9jYWxlbmRhcnMnICsgcmVzb3VyY2VfaWQgKTtcclxuXHRpZiAoIGFkZGl0aW9uYWxfY2FsZW5kYXJzX2VsID09PSBudWxsICkge1xyXG5cdFx0cmV0dXJuO1xyXG5cdH1cclxuXHJcblx0dmFyIGlkX2FkZGl0aW9uYWxfc3RyID0gYWRkaXRpb25hbF9jYWxlbmRhcnNfZWwudmFsdWU7XHJcblx0dmFyIGlkX2FkZGl0aW9uYWxfYXJyID0gaWRfYWRkaXRpb25hbF9zdHIuc3BsaXQoICcsJyApO1xyXG5cclxuXHQvLyBGaXhJbjogMTAuOS40LjEuXHJcblx0Zm9yICggdmFyIGlhID0gMDsgaWEgPCBpZF9hZGRpdGlvbmFsX2Fyci5sZW5ndGg7IGlhKysgKSB7XHJcblx0XHRpZF9hZGRpdGlvbmFsX2FyclsgaWEgXSA9IHBhcnNlSW50KCBpZF9hZGRpdGlvbmFsX2FyclsgaWEgXSwgMTAgKTtcclxuXHR9XHJcblxyXG5cdGlmICggISBqUXVlcnkoICcjYm9va2luZ19mb3JtX2RpdicgKyByZXNvdXJjZV9pZCApLmlzKCAnOnZpc2libGUnICkgKSB7XHJcblx0XHR3cGJjX2Jvb2tpbmdfZm9ybV9fc3Bpbl9sb2FkZXJfX3Nob3coIHJlc291cmNlX2lkICk7IC8vIFNob3cgU3Bpbm5lclxyXG5cdH1cclxuXHJcblx0Ly8gSGVscGVyOiByZXdyaXRlIGZpZWxkIG5hbWUgc3VmZml4IGZyb20gcmVzb3VyY2VfaWQgLT4gaWRfYWRkaXRpb25hbC5cclxuXHRmdW5jdGlvbiB3cGJjX3Jld3JpdGVfZmllbGRfbmFtZV9zdWZmaXgoIGZpZWxkX25hbWUsIG9sZF9pZCwgbmV3X2lkICkge1xyXG5cclxuXHRcdGZpZWxkX25hbWUgPSBTdHJpbmcoIGZpZWxkX25hbWUgKTtcclxuXHJcblx0XHR2YXIgb2xkX2lkX3N0ciA9IFN0cmluZyggb2xkX2lkICk7XHJcblx0XHR2YXIgbmV3X2lkX3N0ciA9IFN0cmluZyggbmV3X2lkICk7XHJcblxyXG5cdFx0Ly8gSGFuZGxlIGZpZWxkcyB3aXRoIFtdLlxyXG5cdFx0aWYgKFxyXG5cdFx0XHQoIGZpZWxkX25hbWUubGVuZ3RoID49ICggb2xkX2lkX3N0ci5sZW5ndGggKyAyICkgKSAmJlxyXG5cdFx0XHQoIGZpZWxkX25hbWUuc3Vic3RyKCBmaWVsZF9uYW1lLmxlbmd0aCAtICggb2xkX2lkX3N0ci5sZW5ndGggKyAyICkgKSA9PT0gKCBvbGRfaWRfc3RyICsgJ1tdJyApIClcclxuXHRcdCkge1xyXG5cdFx0XHRyZXR1cm4gZmllbGRfbmFtZS5zdWJzdHIoIDAsIGZpZWxkX25hbWUubGVuZ3RoIC0gKCBvbGRfaWRfc3RyLmxlbmd0aCArIDIgKSApICsgbmV3X2lkX3N0ciArICdbXSc7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gSGFuZGxlIGZpZWxkcyB3aXRob3V0IFtdLlxyXG5cdFx0aWYgKFxyXG5cdFx0XHQoIGZpZWxkX25hbWUubGVuZ3RoID49IG9sZF9pZF9zdHIubGVuZ3RoICkgJiZcclxuXHRcdFx0KCBmaWVsZF9uYW1lLnN1YnN0ciggZmllbGRfbmFtZS5sZW5ndGggLSBvbGRfaWRfc3RyLmxlbmd0aCApID09PSBvbGRfaWRfc3RyIClcclxuXHRcdCkge1xyXG5cdFx0XHRyZXR1cm4gZmllbGRfbmFtZS5zdWJzdHIoIDAsIGZpZWxkX25hbWUubGVuZ3RoIC0gb2xkX2lkX3N0ci5sZW5ndGggKSArIG5ld19pZF9zdHI7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gRmFsbGJhY2s6IHJldHVybiB1bmNoYW5nZWQgKHNhZmVyIHRoYW4gYnJlYWtpbmcgbmFtZSkuXHJcblx0XHRyZXR1cm4gZmllbGRfbmFtZTtcclxuXHR9XHJcblxyXG5cdGZvciAoIGlhID0gMDsgaWEgPCBpZF9hZGRpdGlvbmFsX2Fyci5sZW5ndGg7IGlhKysgKSB7XHJcblxyXG5cdFx0dmFyIGlkX2FkZGl0aW9uYWwgPSBpZF9hZGRpdGlvbmFsX2FyclsgaWEgXTtcclxuXHJcblx0XHQvLyBGaXhJbjogMTAuOS40LjEuXHJcblx0XHRpZiAoIGlkX2FkZGl0aW9uYWwgPD0gMCApIHtcclxuXHRcdFx0Y29udGludWU7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gUmVidWlsZCBmb3JtZGF0YSBmb3IgZWFjaCBhZGRpdGlvbmFsIGNhbGVuZGFyIChsZWdhY3kgYmVoYXZpb3IpLlxyXG5cdFx0dmFyIGZvcm1kYXRhX2FkZGl0aW9uYWxfYXJyID0gU3RyaW5nKCBmb3JtZGF0YSApLnNwbGl0KCAnficgKTtcclxuXHRcdHZhciBmb3JtZGF0YV9hZGRpdGlvbmFsID0gJyc7XHJcblxyXG5cdFx0Zm9yICggdmFyIGogPSAwOyBqIDwgZm9ybWRhdGFfYWRkaXRpb25hbF9hcnIubGVuZ3RoOyBqKysgKSB7XHJcblxyXG5cdFx0XHR2YXIgbXlfZm9ybV9maWVsZCA9IGZvcm1kYXRhX2FkZGl0aW9uYWxfYXJyWyBqIF0uc3BsaXQoICdeJyApO1xyXG5cclxuXHRcdFx0aWYgKCBmb3JtZGF0YV9hZGRpdGlvbmFsICE9PSAnJyApIHtcclxuXHRcdFx0XHRmb3JtZGF0YV9hZGRpdGlvbmFsICs9ICd+JztcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gU2FmZXR5OiBlbnN1cmUgd2UgaGF2ZSBhdCBsZWFzdCB0eXBlIF4gbmFtZSBeIHZhbHVlLlxyXG5cdFx0XHRpZiAoIG15X2Zvcm1fZmllbGQubGVuZ3RoIDwgMyApIHtcclxuXHRcdFx0XHRmb3JtZGF0YV9hZGRpdGlvbmFsICs9IGZvcm1kYXRhX2FkZGl0aW9uYWxfYXJyWyBqIF07XHJcblx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdG15X2Zvcm1fZmllbGRbIDEgXSA9IHdwYmNfcmV3cml0ZV9maWVsZF9uYW1lX3N1ZmZpeCggbXlfZm9ybV9maWVsZFsgMSBdLCByZXNvdXJjZV9pZCwgaWRfYWRkaXRpb25hbCApO1xyXG5cdFx0XHRmb3JtZGF0YV9hZGRpdGlvbmFsICs9IG15X2Zvcm1fZmllbGRbIDAgXSArICdeJyArIG15X2Zvcm1fZmllbGRbIDEgXSArICdeJyArIG15X2Zvcm1fZmllbGRbIDIgXTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBJZiBwYXltZW50IGZvcm0gZm9yIG1haW4gYm9va2luZyByZXNvdXJjZSBpcyBzaG93aW5nLCBhcHBlbmQgZm9yIGFkZGl0aW9uYWwgY2FsZW5kYXJzLlxyXG5cdFx0aWYgKCBqUXVlcnkoICcjZ2F0ZXdheV9wYXltZW50X2Zvcm1zJyArIHJlc291cmNlX2lkICkubGVuZ3RoID4gMCApIHtcclxuXHRcdFx0alF1ZXJ5KCAnI2dhdGV3YXlfcGF5bWVudF9mb3JtcycgKyByZXNvdXJjZV9pZCApLmFmdGVyKCAnPGRpdiBpZD1cImdhdGV3YXlfcGF5bWVudF9mb3JtcycgKyBpZF9hZGRpdGlvbmFsICsgJ1wiPjwvZGl2PicgKTtcclxuXHRcdFx0alF1ZXJ5KCAnI2dhdGV3YXlfcGF5bWVudF9mb3JtcycgKyByZXNvdXJjZV9pZCApLmFmdGVyKCAnPGRpdiBpZD1cImFqYXhfcmVzcG9uZF9pbnNlcnQnICsgaWRfYWRkaXRpb25hbCArICdcIiBzdHlsZT1cImRpc3BsYXk6bm9uZTtcIj48L2Rpdj4nICk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gRml4SW46IDguNS4yLjE3LlxyXG5cdFx0d3BiY19zZW5kX2FqYXhfc3VibWl0KCBpZF9hZGRpdGlvbmFsLCBmb3JtZGF0YV9hZGRpdGlvbmFsLCBjYXB0Y2hhX2NoYWxhbmdlLCB1c2VyX2NhcHRjaGEsIGlzX3NlbmRfZW1laWxzLCBteV9ib29raW5nX2hhc2gsIG15X2Jvb2tpbmdfZm9ybSwgd3BkZXZfYWN0aXZlX2xvY2FsZSApO1xyXG5cdH1cclxufVxyXG5cclxuXHJcbi8qKlxyXG4gKiBTZW5kIEFqYXggc3VibWl0IChsZWdhY3k6IHNlbmRfYWpheF9zdWJtaXQpLlxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IHJlc291cmNlX2lkXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgZm9ybWRhdGFcclxuICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICBjYXB0Y2hhX2NoYWxhbmdlXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgdXNlcl9jYXB0Y2hhXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSAgICAgICAgaXNfc2VuZF9lbWVpbHNcclxuICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICBteV9ib29raW5nX2hhc2hcclxuICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICBteV9ib29raW5nX2Zvcm1cclxuICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICB3cGRldl9hY3RpdmVfbG9jYWxlXHJcbiAqXHJcbiAqIEByZXR1cm4ge3VuZGVmaW5lZH0gTGVnYWN5IGJlaGF2aW9yLlxyXG4gKi9cclxuZnVuY3Rpb24gd3BiY19zZW5kX2FqYXhfc3VibWl0KHJlc291cmNlX2lkLCBmb3JtZGF0YSwgY2FwdGNoYV9jaGFsYW5nZSwgdXNlcl9jYXB0Y2hhLCBpc19zZW5kX2VtZWlscywgbXlfYm9va2luZ19oYXNoLCBteV9ib29raW5nX2Zvcm0sIHdwZGV2X2FjdGl2ZV9sb2NhbGUpIHtcclxuXHJcblx0cmVzb3VyY2VfaWQgPSBwYXJzZUludCggcmVzb3VyY2VfaWQsIDEwICk7XHJcblxyXG5cdC8vIERpc2FibGUgU3VibWl0IHwgU2hvdyBzcGluIGxvYWRlci5cclxuXHR3cGJjX2Jvb2tpbmdfZm9ybV9fb25fc3VibWl0X191aV9lbGVtZW50c19kaXNhYmxlKCByZXNvdXJjZV9pZCApO1xyXG5cclxuXHQvLyBGaXhJbjogMjAyNi0wMi0wNSAtIHBhc3MgcHJldmlldyBjb250ZXh0IHRvIGJvb2tpbmcgY3JlYXRlIEFqYXguXHJcblx0dmFyIGZvcm1fc3RhdHVzICA9IHdwYmNfX2dldF9mb3JtX3N0YXR1c19mb3Jfc3VibWl0KCByZXNvdXJjZV9pZCApO1xyXG5cdHZhciBwcmV2aWV3X2FyZ3MgPSAoZm9ybV9zdGF0dXMgPT09ICdwcmV2aWV3JykgPyB3cGJjX19nZXRfYmZiX3ByZXZpZXdfYXJnc19mcm9tX2xvY2F0aW9uKCkgOiBudWxsO1xyXG5cdHZhciAkYWRkX2Jvb2tpbmdfbW9kYWwgPSBqUXVlcnkoICcjYm9va2luZ19mb3JtJyArIHJlc291cmNlX2lkICkuY2xvc2VzdCggJyN3cGJjX21vZGFsX19hZGRfYm9va2luZ19fc2VjdGlvbicgKTtcblx0dmFyIGlzX2FsbG93X3Bhc3QgPSAwO1xuXHR2YXIgY2xhc3NpY19ib29raW5nX2NvbnRleHRfdG9rZW4gPSAnJztcblx0dmFyIGhhc19hZGRfYm9va2luZ19tb2RhbF9jb250ZXh0ID0gKCAkYWRkX2Jvb2tpbmdfbW9kYWwubGVuZ3RoICYmICRhZGRfYm9va2luZ19tb2RhbC5pcyggJzp2aXNpYmxlJyApICk7XG5cclxuXHRpZiAoIGhhc19hZGRfYm9va2luZ19tb2RhbF9jb250ZXh0ICkge1xyXG5cdFx0aXNfYWxsb3dfcGFzdCA9ICRhZGRfYm9va2luZ19tb2RhbC5maW5kKCAnW2RhdGEtd3BiYy1hZGQtYm9va2luZy1hbGxvdy1wYXN0XScgKS5maXJzdCgpLmlzKCAnOmNoZWNrZWQnICkgPyAxIDogMDtcclxuXHRcdGlmICggISBpc19hbGxvd19wYXN0ICkge1xyXG5cdFx0XHRpc19hbGxvd19wYXN0ID0gKCAnMScgPT09IFN0cmluZyggJGFkZF9ib29raW5nX21vZGFsLmF0dHIoICdkYXRhLXdwYmMtYWRkLWJvb2tpbmctYWxsb3ctcGFzdCcgKSB8fCAnMCcgKSApID8gMSA6IDA7XHJcblx0XHR9XHJcblx0fVxyXG5cdGlmICggISBoYXNfYWRkX2Jvb2tpbmdfbW9kYWxfY29udGV4dCAmJiAoICd1bmRlZmluZWQnICE9PSB0eXBlb2YgX3dwYmMgKSApIHtcblx0XHRpc19hbGxvd19wYXN0ID0gKCAnMScgPT09IFN0cmluZyggX3dwYmMuZ2V0X290aGVyX3BhcmFtKCAndGhpc19wYWdlX2FsbG93X3Bhc3QnICkgfHwgJzAnICkgKSA/IDEgOiAwO1xuXHRcdGNsYXNzaWNfYm9va2luZ19jb250ZXh0X3Rva2VuID0gU3RyaW5nKCBfd3BiYy5ib29raW5nX19nZXRfcGFyYW1fdmFsdWUoIHJlc291cmNlX2lkLCAnY2xhc3NpY19ib29raW5nX2NvbnRleHRfdG9rZW4nICkgfHwgJycgKTtcblx0fVxuXHJcblx0dmFyIHJlcXVlc3RfcGFyYW1zID0ge1xyXG5cdFx0J3Jlc291cmNlX2lkJyAgICAgICAgICAgICAgOiByZXNvdXJjZV9pZCxcclxuXHRcdCdkYXRlc19kZG1teXlfY3N2JyAgICAgICAgIDogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICdkYXRlX2Jvb2tpbmcnICsgcmVzb3VyY2VfaWQgKS52YWx1ZSxcclxuXHRcdCdmb3JtZGF0YScgICAgICAgICAgICAgICAgIDogZm9ybWRhdGEsXHJcblx0XHQnYm9va2luZ19oYXNoJyAgICAgICAgICAgICA6IG15X2Jvb2tpbmdfaGFzaCxcclxuXHRcdCdjdXN0b21fZm9ybScgICAgICAgICAgICAgIDogbXlfYm9va2luZ19mb3JtLFxyXG5cdFx0J2FnZ3JlZ2F0ZV9yZXNvdXJjZV9pZF9hcnInOiAoICggbnVsbCAhPT0gX3dwYmMuYm9va2luZ19fZ2V0X3BhcmFtX3ZhbHVlKCByZXNvdXJjZV9pZCwgJ2FnZ3JlZ2F0ZV9yZXNvdXJjZV9pZF9hcnInICkgKSA/IF93cGJjLmJvb2tpbmdfX2dldF9wYXJhbV92YWx1ZSggcmVzb3VyY2VfaWQsICdhZ2dyZWdhdGVfcmVzb3VyY2VfaWRfYXJyJyApLmpvaW4oICcsJyApIDogJycgKSxcclxuXHRcdCdjYXB0Y2hhX2NoYWxhbmdlJyAgICAgICAgIDogY2FwdGNoYV9jaGFsYW5nZSxcclxuXHRcdCdjYXB0Y2hhX3VzZXJfaW5wdXQnICAgICAgIDogdXNlcl9jYXB0Y2hhLFxyXG5cdFx0J2lzX2VtYWlsc19zZW5kJyAgICAgICAgICAgOiBpc19zZW5kX2VtZWlscyxcclxuXHRcdCdhY3RpdmVfbG9jYWxlJyAgICAgICAgICAgIDogd3BkZXZfYWN0aXZlX2xvY2FsZSxcclxuXHRcdCdmb3JtX3N0YXR1cycgICAgICAgICAgICAgIDogZm9ybV9zdGF0dXMsXG5cdFx0J2FsbG93X3Bhc3QnICAgICAgICAgICAgICAgOiBpc19hbGxvd19wYXN0LFxuXHRcdCdjbGFzc2ljX2Jvb2tpbmdfY29udGV4dF90b2tlbic6IGNsYXNzaWNfYm9va2luZ19jb250ZXh0X3Rva2VuXG5cdH07XG5cclxuXHR2YXIgJHRpbWVfb3ZlcnJpZGVfcGFuZWwgPSBqUXVlcnkoICcjYm9va2luZ19mb3JtJyArIHJlc291cmNlX2lkICkuZmluZCggJ1tkYXRhLXdwYmMtYWRkLWJvb2tpbmctdGltZS1vdmVycmlkZS1wYW5lbF0nICkuZmlyc3QoKTtcclxuXHRpZiAoICEgJHRpbWVfb3ZlcnJpZGVfcGFuZWwubGVuZ3RoICkge1xyXG5cdFx0JHRpbWVfb3ZlcnJpZGVfcGFuZWwgPSBqUXVlcnkoICcjd3BiY19tb2RhbF9fYWRkX2Jvb2tpbmdfX3NlY3Rpb246dmlzaWJsZScgKS5maW5kKCAnW2RhdGEtd3BiYy1hZGQtYm9va2luZy10aW1lLW92ZXJyaWRlLXBhbmVsXScgKS5maXJzdCgpO1xyXG5cdH1cclxuXHRpZiAoXHJcblx0XHQgICAkdGltZV9vdmVycmlkZV9wYW5lbC5sZW5ndGhcclxuXHRcdCYmICR0aW1lX292ZXJyaWRlX3BhbmVsLmZpbmQoICdbZGF0YS13cGJjLWFkZC1ib29raW5nLXRpbWUtb3ZlcnJpZGUtZW5hYmxlZF0nICkuZmlyc3QoKS5pcyggJzpjaGVja2VkJyApXHJcblx0KSB7XHJcblx0XHRyZXF1ZXN0X3BhcmFtc1snd3BiY190aW1lX292ZXJyaWRlX2VuYWJsZWQnXSA9IDE7XHJcblx0XHRyZXF1ZXN0X3BhcmFtc1snd3BiY190aW1lX292ZXJyaWRlX3NvdXJjZSddICA9ICR0aW1lX292ZXJyaWRlX3BhbmVsLmF0dHIoICdkYXRhLXdwYmMtYWRkLWJvb2tpbmctdGltZS1vdmVycmlkZS1zb3VyY2UnICkgfHwgJyc7XHJcblx0XHRyZXF1ZXN0X3BhcmFtc1snd3BiY190aW1lX292ZXJyaWRlX3N0YXJ0J10gICA9ICR0aW1lX292ZXJyaWRlX3BhbmVsLmZpbmQoICdbZGF0YS13cGJjLWFkZC1ib29raW5nLXRpbWUtb3ZlcnJpZGUtZmllbGQ9XCJzdGFydFwiXScgKS5maXJzdCgpLnZhbCgpIHx8ICcnO1xyXG5cdFx0cmVxdWVzdF9wYXJhbXNbJ3dwYmNfdGltZV9vdmVycmlkZV9lbmQnXSAgICAgPSAkdGltZV9vdmVycmlkZV9wYW5lbC5maW5kKCAnW2RhdGEtd3BiYy1hZGQtYm9va2luZy10aW1lLW92ZXJyaWRlLWZpZWxkPVwiZW5kXCJdJyApLmZpcnN0KCkudmFsKCkgfHwgJyc7XHJcblx0fVxyXG5cclxuXHR2YXIgc2VsZWN0ZWRfZGF0ZXNfY291bnQgPSBTdHJpbmcoIHJlcXVlc3RfcGFyYW1zWydkYXRlc19kZG1teXlfY3N2J10gfHwgJycgKS5zcGxpdCggJywnICkuZmlsdGVyKCBmdW5jdGlvbiggZGF0ZV90ZXh0ICl7XHJcblx0XHRyZXR1cm4gJycgIT09IFN0cmluZyggZGF0ZV90ZXh0IHx8ICcnICkucmVwbGFjZSggL15cXHMrfFxccyskL2csICcnICk7XHJcblx0fSApLmxlbmd0aDtcclxuXHR2YXIgaXNfdGltZXNfYXZhaWxhYmlsaXR5X292ZXJyaWRlID0gKFxyXG5cdFx0ICAgKCAxID09PSBwYXJzZUludCggcmVxdWVzdF9wYXJhbXNbJ3dwYmNfdGltZV9vdmVycmlkZV9lbmFibGVkJ10gfHwgMCwgMTAgKSApXHJcblx0XHQmJiAoICd0aW1lc19hdmFpbGFiaWxpdHknID09PSBTdHJpbmcoIHJlcXVlc3RfcGFyYW1zWyd3cGJjX3RpbWVfb3ZlcnJpZGVfc291cmNlJ10gfHwgJycgKSApXHJcblx0KTtcclxuXHRpZiAoXHJcblx0XHQgICAoXHJcblx0XHRcdCAgIGhhc19hZGRfYm9va2luZ19tb2RhbF9jb250ZXh0XHJcblx0XHRcdCYmICcxJyA9PT0gU3RyaW5nKCAkYWRkX2Jvb2tpbmdfbW9kYWwuYXR0ciggJ2RhdGEtd3BiYy1hZGQtYm9va2luZy1mb3JjZS1yZWN1cnJlbnQtdGltZScgKSB8fCAnMCcgKVxyXG5cdFx0ICAgKVxyXG5cdFx0fHwgKFxyXG5cdFx0XHQgICBpc190aW1lc19hdmFpbGFiaWxpdHlfb3ZlcnJpZGVcclxuXHRcdFx0JiYgKCBzZWxlY3RlZF9kYXRlc19jb3VudCA+IDEgKVxyXG5cdFx0ICAgKVxyXG5cdCkge1xyXG5cdFx0cmVxdWVzdF9wYXJhbXNbJ2lzX3VzZV9ib29raW5nX3JlY3VycmVudF90aW1lJ10gPSAxO1xyXG5cdH1cclxuXHJcblx0Ly8gSWYgcHJldmlldywgcGFzcyBzZXNzaW9uIGlkZW50aWZpZXJzIHNvIFBIUCBjYW4gbG9hZCB0cmFuc2llbnQgc25hcHNob3QuXHJcblx0aWYgKCBwcmV2aWV3X2FyZ3MgJiYgcHJldmlld19hcmdzLnRva2VuICYmIHByZXZpZXdfYXJncy5mb3JtX2lkICkge1xyXG5cdFx0cmVxdWVzdF9wYXJhbXNbJ3dwYmNfYmZiX3ByZXZpZXcnXSAgICAgICAgID0gMTtcclxuXHRcdHJlcXVlc3RfcGFyYW1zWyd3cGJjX2JmYl9wcmV2aWV3X3Rva2VuJ10gICA9IHByZXZpZXdfYXJncy50b2tlbjtcclxuXHRcdHJlcXVlc3RfcGFyYW1zWyd3cGJjX2JmYl9wcmV2aWV3X2Zvcm1faWQnXSA9IHByZXZpZXdfYXJncy5mb3JtX2lkO1xyXG5cdFx0cmVxdWVzdF9wYXJhbXNbJ3dwYmNfYmZiX3ByZXZpZXdfbm9uY2UnXSAgID0gcHJldmlld19hcmdzLm5vbmNlOyAvLyBub3RlOiBVUkwgcGFyYW0gaXMgYG5vbmNlYC5cclxuXHR9XHJcblxyXG5cdHZhciBpc19leGl0ID0gd3BiY19hanhfYm9va2luZ19fY3JlYXRlKCByZXF1ZXN0X3BhcmFtcyApO1xyXG5cclxuXHRpZiAoIHRydWUgPT09IGlzX2V4aXQgKSB7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG59XHJcblxyXG5cclxuXHJcbi8vID09IEhlbHBlciBGdW5jdGlvbnMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuLyoqXHJcbiAqIFBhcnNlIHF1ZXJ5IHN0cmluZyBpbnRvIHtrZXk6dmFsdWV9IChvbGQtYnJvd3NlciBzYWZlKS5cclxuICpcclxuICogQHBhcmFtIHtzdHJpbmd9IHFzXHJcbiAqIEByZXR1cm4ge09iamVjdH1cclxuICovXHJcbmZ1bmN0aW9uIHdwYmNfX3BhcnNlX3F1ZXJ5X3N0cmluZyhxcykge1xyXG5cdHZhciBvdXQgPSB7fTtcclxuXHRxcyAgICAgID0gKHFzIHx8ICcnKTtcclxuXHRxcyAgICAgID0gcXMucmVwbGFjZSggL15cXD8vLCAnJyApO1xyXG5cdGlmICggISBxcyApIHtcclxuXHRcdHJldHVybiBvdXQ7XHJcblx0fVxyXG5cclxuXHR2YXIgcGFydHMgPSBxcy5zcGxpdCggJyYnICk7XHJcblx0Zm9yICggdmFyIGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyBpKysgKSB7XHJcblx0XHR2YXIga3YgPSBwYXJ0c1tpXS5zcGxpdCggJz0nICk7XHJcblx0XHR2YXIgayAgPSBkZWNvZGVVUklDb21wb25lbnQoIGt2WzBdIHx8ICcnICk7XHJcblx0XHRpZiAoICEgayApIHtcclxuXHRcdFx0Y29udGludWU7XHJcblx0XHR9XHJcblx0XHR2YXIgdiAgPSBkZWNvZGVVUklDb21wb25lbnQoIGt2LnNsaWNlKCAxICkuam9pbiggJz0nICkgfHwgJycgKTtcclxuXHRcdG91dFtrXSA9IHY7XHJcblx0fVxyXG5cdHJldHVybiBvdXQ7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBEZXRlY3QgcHJldmlldyBhcmdzIGZyb20gY3VycmVudCBVUkwgKGlmcmFtZSBVUkwpLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtPYmplY3R8bnVsbH0geyB0b2tlbiwgZm9ybV9pZCwgbm9uY2UgfSBvciBudWxsXHJcbiAqL1xyXG5mdW5jdGlvbiB3cGJjX19nZXRfYmZiX3ByZXZpZXdfYXJnc19mcm9tX2xvY2F0aW9uKCkge1xyXG5cdHRyeSB7XHJcblx0XHR2YXIgcCA9IHdwYmNfX3BhcnNlX3F1ZXJ5X3N0cmluZyggKHdpbmRvdy5sb2NhdGlvbiAmJiB3aW5kb3cubG9jYXRpb24uc2VhcmNoKSA/IHdpbmRvdy5sb2NhdGlvbi5zZWFyY2ggOiAnJyApO1xyXG5cclxuXHRcdGlmICggISBwLndwYmNfYmZiX3ByZXZpZXcgfHwgKHAud3BiY19iZmJfcHJldmlldyA9PT0gJzAnKSApIHtcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCAhIHAud3BiY19iZmJfcHJldmlld190b2tlbiB8fCAhIHAud3BiY19iZmJfcHJldmlld19mb3JtX2lkICkge1xyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHR0b2tlbiAgOiBTdHJpbmcoIHAud3BiY19iZmJfcHJldmlld190b2tlbiApLFxyXG5cdFx0XHRmb3JtX2lkOiBwYXJzZUludCggcC53cGJjX2JmYl9wcmV2aWV3X2Zvcm1faWQsIDEwICkgfHwgMCxcclxuXHRcdFx0bm9uY2UgIDogKHAubm9uY2UpID8gU3RyaW5nKCBwLm5vbmNlICkgOiAnJ1xyXG5cdFx0fTtcclxuXHR9IGNhdGNoICggZSApIHtcclxuXHRcdHJldHVybiBudWxsO1xyXG5cdH1cclxufVxyXG5cclxuLyoqXHJcbiAqIFJlc29sdmUgZm9ybSBzdGF0dXMgZm9yIHN1Ym1pdC5cclxuICpcclxuICogUHJpb3JpdHk6XHJcbiAqIDEpIHNob3J0Y29kZSBwYXJhbSBleHBvc2VkIHZpYSBfd3BiYy5ib29raW5nX19nZXRfcGFyYW1fdmFsdWUoLi4uLCAnZm9ybV9zdGF0dXMnKVxyXG4gKiAyKSBkZXRlY3QgcHJldmlldyBVUkwgYXJnc1xyXG4gKiAzKSBmYWxsYmFjazogcHVibGlzaGVkXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSByZXNvdXJjZV9pZFxyXG4gKiBAcmV0dXJuIHtzdHJpbmd9ICdwcmV2aWV3J3wncHVibGlzaGVkJ1xyXG4gKi9cclxuZnVuY3Rpb24gd3BiY19fZ2V0X2Zvcm1fc3RhdHVzX2Zvcl9zdWJtaXQocmVzb3VyY2VfaWQpIHtcclxuXHJcblx0dmFyIHN0YXR1cyA9ICcnO1xyXG5cclxuXHR0cnkge1xyXG5cdFx0aWYgKCAodHlwZW9mIF93cGJjICE9PSAndW5kZWZpbmVkJykgJiYgX3dwYmMuYm9va2luZ19fZ2V0X3BhcmFtX3ZhbHVlICkge1xyXG5cdFx0XHRzdGF0dXMgPSBfd3BiYy5ib29raW5nX19nZXRfcGFyYW1fdmFsdWUoIHJlc291cmNlX2lkLCAnZm9ybV9zdGF0dXMnICk7XHJcblx0XHR9XHJcblx0fSBjYXRjaCAoIGUgKSB7fVxyXG5cclxuXHRzdGF0dXMgPSAoc3RhdHVzID09IG51bGwpID8gJycgOiBTdHJpbmcoIHN0YXR1cyApO1xyXG5cdHN0YXR1cyA9IHN0YXR1cy50b0xvd2VyQ2FzZSgpO1xyXG5cclxuXHQvLyBVUkwtYmFzZWQgZGV0ZWN0aW9uIGZvciBwcmV2aWV3IGlmcmFtZS5cclxuXHR2YXIgcHJldmlld19hcmdzID0gd3BiY19fZ2V0X2JmYl9wcmV2aWV3X2FyZ3NfZnJvbV9sb2NhdGlvbigpO1xyXG5cdGlmICggcHJldmlld19hcmdzICkge1xyXG5cdFx0cmV0dXJuICdwcmV2aWV3JztcclxuXHR9XHJcblxyXG5cdHJldHVybiAoc3RhdHVzID09PSAncHJldmlldycpID8gJ3ByZXZpZXcnIDogJ3B1Ymxpc2hlZCc7XHJcbn1cclxuXHJcblxyXG5cclxuLy8gPT0gQmFja3dhcmQtY29tcGF0aWJsZSB3cmFwcGVycyAoa2VlcCBvbGQgZ2xvYmFsIG5hbWVzIHdvcmtpbmcgMTAwJSBhcyBiZWZvcmUpLiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbmZ1bmN0aW9uIG15Ym9va2luZ19zdWJtaXQoIHN1Ym1pdF9mb3JtLCByZXNvdXJjZV9pZCwgd3BkZXZfYWN0aXZlX2xvY2FsZSApIHtcclxuXHRyZXR1cm4gd3BiY19ib29raW5nX2Zvcm1fc3VibWl0KCBzdWJtaXRfZm9ybSwgcmVzb3VyY2VfaWQsIHdwZGV2X2FjdGl2ZV9sb2NhbGUgKTtcclxufVxyXG4iLCJ0cnkge1xyXG5cdHZhciBldiA9ICh0eXBlb2YgQ3VzdG9tRXZlbnQgPT09ICdmdW5jdGlvbicpID8gbmV3IEN1c3RvbUV2ZW50KCAnd3BiYy1yZWFkeScgKSA6IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCAnRXZlbnQnICk7XHJcblx0aWYgKCBldi5pbml0RXZlbnQgKSB7XHJcblx0XHRldi5pbml0RXZlbnQoICd3cGJjLXJlYWR5JywgdHJ1ZSwgdHJ1ZSApO1xyXG5cdH1cclxuXHRkb2N1bWVudC5kaXNwYXRjaEV2ZW50KCBldiApO1xyXG5cdGNvbnNvbGUubG9nKCAnd3BiYy1yZWFkeScgKTtcclxufSBjYXRjaCAoIGUgKSB7XHJcblx0Y29uc29sZS5lcnJvciggXCJXUEJDIGV2ZW50ICd3cGJjLXJlYWR5JyBmYWlsZWQhXCIsIGUgKTtcclxufVxyXG4iXSwibWFwcGluZ3MiOiJhQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FDQSxTQUFBQSxVQUFBQyxjQUFBLEVBRUEsR0FBQUMsS0FBQSxDQUFBQyxPQUFBLENBQUFGLGNBQUEsR0FDQUEsY0FBQSxDQUFBQSxjQUFBLENBQUFHLElBQUEsTUFDQSxDQUVBLG9CQUFBSCxjQUFBLEVBQ0FBLGNBQUEsQ0FBQUEsY0FBQSxDQUFBSSxJQUFBLEdBQ0EsQ0FFQSxPQUFBSixjQUFBLENBQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUNBLFNBQUFLLGNBQUFDLFVBQUEsQ0FBQUMsS0FBQSxFQUNBLFFBQUFDLENBQUEsR0FBQUMsQ0FBQSxDQUFBSCxVQUFBLENBQUFJ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QUEsQ0FBQWxELFNBQUEsRUFDQSxFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFDQVosR0FBQSxDQUFBa0UsaUJBQUEsWUFDQSxPQUFBSixVQUFBLENBQ0EsRUFFQTtBQUVBLE9BQUE5RCxHQUFBLENBRUEsRUFBQUksS0FBQSxLQUFBK0QsTUFBQSxFQzloQkFDLE1BQUEsQ0FBQUMsVUFBQSxNQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUNBakUsS0FBQSxVQUFBSixHQUFBLENBQUFLLENBQUEsRUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQ0FMLEdBQUEsQ0FBQXNFLEdBQUEsQ0FBQXRFLEdBQUEsQ0FBQXNFLEdBQUEsUUFDQSxNQUFBQyxJQUFBLEtBQUFDLEdBQUEsR0FDQSxNQUFBQyxPQUFBLENBQUFBLENBQUEsS0FBQUwsTUFBQSxDQUFBQyxVQUFBLENBRUEsU0FBQUssSUFBQUMsS0FBQSxDQUFBQyxJQUFBLENBQUFDLEdBQUEsQ0FBQUMsS0FBQSxFQUNBLElBQUFMLE9BQUEsVUFDQSxJQUNBLENBQUFNLE9BQUEsQ0FBQUosS0FBQSxHQUFBSSxPQUFBLENBQUFDLElBQUEsWUFBQUosSUFBQSxLQUFBQyxHQUFBLEdBQUFDLEtBQUEsTUFDQSxPQUNBLENBQ0EsQ0FFQSxPQUNBRyxHQUFBLENBQUFBLENBQUFMLElBQUEsQ0FBQUMsR0FBQSxDQUFBQyxLQUFBLEdBQUFKLEdBQUEsT0FBQUUsSUFBQSxDQUFBQyxHQUFBLENBQUFDLEtBQUEsRUFDQUksS0FBQSxDQUFBQSxDQUFBTixJQUFBLENBQUFDLEdBQUEsQ0FBQUMsS0FBQSxHQUFBSixHQUFBLFNBQUFFLElBQUEsQ0FBQUMsR0FBQSxDQUFBQyxLQUFBLEVBQ0FFLElBQUEsQ0FBQUEsQ0FBQUosSUFBQSxDQUFBQyxHQUFBLENBQUFDLEtBQUEsR0FBQUosR0FBQSxRQUFBRSxJQUFBLENBQUFDLEdBQUEsQ0FBQUMsS0FBQSxFQUNBSyxLQUFBLENBQUFBLENBQUFQLElBQUEsQ0FBQVEsUUFBQSxDQUFBTixLQUFBLEdBQ0FKLEdBQUEsU0FB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
1655 +//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX2Rpc3QvYWxsL19vdXQvd3BiY19hbGwuanMiLCJuYW1lcyI6WyJ3cGJjX3RyaW0iLCJzdHJpbmdfdG9fdHJpbSIsIkFycmF5IiwiaXNBcnJheSIsImpvaW4iLCJ0cmltIiwid3BiY19pbl9hcnJheSIsImFycmF5X2hlcmUiLCJwX3ZhbCIsImkiLCJsIiwibGVuZ3RoIiwiaXNfcGxheWdyb3VuZF9vcmlnaW4iLCJsb2NhdGlvbiIsIm9yaWdpbiIsImlzX3BzZXVkb19saW5rIiwiYSIsImdldEF0dHJpYnV0ZSIsImhyZWYiLCJ0b0xvd2VyQ2FzZSIsImluZGV4T2YiLCJmaXhfdGFyZ2V0IiwiaGFzQXR0cmlidXRlIiwidGFyZ2V0IiwiaW5pdF9maXgiLCJub2RlcyIsImRvY3VtZW50IiwicXVlcnlTZWxlY3RvckFsbCIsImFkZEV2ZW50TGlzdGVuZXIiLCJlIiwiY2xvc2VzdCIsInNjaGVkdWxlX2luaXQiLCJzZXRUaW1lb3V0IiwicmVhZHlTdGF0ZSIsIndwYmNfY2xvbmVfb2JqIiwib2JqIiwiSlNPTiIsInBhcnNlIiwic3RyaW5naWZ5IiwiX3dwYmMiLCIkIiwicF9zZWN1cmUiLCJzZWN1cml0eV9vYmoiLCJ1c2VyX2lkIiwibm9uY2UiLCJsb2NhbGUiLCJzZXRfc2VjdXJlX3BhcmFtIiwicGFyYW1fa2V5IiwicGFyYW1fdmFsIiwiZ2V0X3NlY3VyZV9wYXJhbSIsInBfY2FsZW5kYXJzIiwiY2FsZW5kYXJzX29iaiIsImNhbGVuZGFyX19pc19kZWZpbmVkIiwicmVzb3VyY2VfaWQiLCJjYWxlbmRhcl9faW5pdCIsImNhbGVuZGFyX19pc19wcm9wX2ludCIsInByb3BlcnR5X25hbWUiLCJwX2NhbGVuZGFyX2ludF9wcm9wZXJ0aWVzIiwiaXNfaW5jbHVkZSIsImluY2x1ZGVzIiwiY2FsZW5kYXJzX2FsbF9fc2V0IiwiY2FsZW5kYXJzX2FsbF9fZ2V0IiwiY2FsZW5kYXJfX2dldF9wYXJhbWV0ZXJzIiwiY2FsZW5kYXJfX3NldF9wYXJhbWV0ZXJzIiwiY2FsZW5kYXJfcHJvcGVydHlfb2JqIiwiaXNfY29tcGxldGVfb3ZlcndyaXRlIiwicHJvcF9uYW1lIiwiY2FsZW5kYXJfX3NldF9wYXJhbV92YWx1ZSIsInByb3BfdmFsdWUiLCJjYWxlbmRhcl9fZ2V0X3BhcmFtX3ZhbHVlIiwicGFyc2VJbnQiLCJwX2Jvb2tpbmdzIiwiYm9va2luZ3Nfb2JqIiwiYm9va2luZ3NfaW5fY2FsZW5kYXJfX2lzX2RlZmluZWQiLCJib29raW5nc19pbl9jYWxlbmRhcl9fZ2V0IiwiYm9va2luZ3NfaW5fY2FsZW5kYXJfX3NldCIsImNhbGVuZGFyX29iaiIsImJvb2tpbmdzX2luX2NhbGVuZGFyX19nZXRfZGF0ZXMiLCJib29raW5nc19pbl9jYWxlbmRhcl9fc2V0X2RhdGVzIiwiZGF0ZXNfb2JqIiwiYm9va2luZ3NfaW5fY2FsZW5kYXJfX2dldF9mb3JfZGF0ZSIsInNxbF9jbGFzc19kYXkiLCJib29raW5nX19zZXRfcGFyYW1fdmFsdWUiLCJib29raW5nX19nZXRfcGFyYW1fdmFsdWUiLCJib29raW5nc19pbl9jYWxlbmRhcnNfX3NldF9hbGwiLCJib29raW5nc19pbl9jYWxlbmRhcnNfX2dldF9hbGwiLCJwX3NlYXNvbnMiLCJzZWFzb25zX29iaiIsInNlYXNvbnNfX3NldCIsInNlYXNvbl9uYW1lX2tleSIsInB1c2giLCJzZWFzb25zX19nZXRfZm9yX2RhdGUiLCJwX290aGVyIiwib3RoZXJfb2JqIiwic2V0X290aGVyX3BhcmFtIiwiZ2V0X290aGVyX3BhcmFtIiwiZ2V0X290aGVyX3BhcmFtX19hbGwiLCJwX21lc3NhZ2VzIiwibWVzc2FnZXNfb2JqIiwic2V0X21lc3NhZ2UiLCJnZXRfbWVzc2FnZSIsImdldF9tZXNzYWdlc19fYWxsIiwialF1ZXJ5Iiwid2luZG93IiwiX19XUEJDX0RFViIsImRldiIsInNlZW4iLCJTZXQiLCJlbmFibGVkIiwib3V0IiwibGV2ZWwiLCJjb2RlIiwibXNnIiwiZXh0cmEiLCJjb25zb2xlIiwid2FybiIsImxvZyIsImRlYnVnIiwiZXJyb3IiLCJlcnJPck1zZyIsIkVycm9yIiwibWVzc2FnZSIsIlN0cmluZyIsIm9uY2UiLCJrZXkiLCJoYXMiLCJhZGQiLCJ0cnkiLCJmbiIsIl8iLCJyZWFzb24iLCJwX2JhbGFuY2VyIiwiYmFsYW5jZXJfb2JqIiwiYmFsYW5jZXJfX3NldF9tYXhfdGhyZWFkcyIsIm1heF90aHJlYWRzIiwiYmFsYW5jZXJfX2lzX2RlZmluZWQiLCJiYWxhbmNlcl9faW5pdCIsImZ1bmN0aW9uX25hbWUiLCJwYXJhbXMiLCJiYWxhbmNlX29iaiIsImJhbGFuY2VyX19pc19hbHJlYWR5X3J1biIsImJhbGFuY2VyX19pc19hbHJlYWR5X3dhaXQiLCJiYWxhbmNlcl9fY2FuX2lfcnVuIiwiYmFsYW5jZXJfX2FkZF90b19fcnVuIiwiYmFsYW5jZXJfX2FkZF90b19fd2FpdCIsImJhbGFuY2VyX19yZW1vdmVfZnJvbV9fd2FpdF9saXN0IiwicmVtb3ZlZF9lbCIsInNwbGljZSIsInBvcCIsImZpbHRlciIsInYiLCJiYWxhbmNlcl9fcmVtb3ZlX2Zyb21fX3J1bl9saXN0IiwiYmFsYW5jZXJfX3J1bl9uZXh0IiwiYmFsYW5jZXJfX3J1biIsIndwYmNfY2FsZW5kYXJfX2xvYWRfZGF0YV9fYWp4Iiwid3BiY19iYWxhbmNlcl9faXNfd2FpdCIsImJhbGFuY2VyX3N0YXR1cyIsIndwYmNfYmFsYW5jZXJfX2NvbXBsZXRlZCIsIndwYmNfY2FsZW5kYXJfc2hvdyIsImhhc0NsYXNzIiwiZXhpc3RpbmdfaW5zdCIsImRhdGVwaWNrIiwiX2dldEluc3QiLCJnZXQiLCJyZW1vdmVDbGFzcyIsIndwYmNfcmFuZ2Vfc2VsZWN0aW9uX19wcmVwYXJlX2d1aWRhbmNlIiwibG9jYWxfX2lzX3JhbmdlX3NlbGVjdCIsImxvY2FsX19tdWx0aV9kYXlzX3NlbGVjdF9udW0iLCJsb2NhbF9fbWluX2RhdGUiLCJEYXRlIiwibG9jYWxfX21heF9kYXRlIiwid3BiY19jYWxlbmRhcl9fZ2V0X2RhdGVzX3N0YXJ0Iiwid3BiY19jYWxlbmRhcl9fZ2V0X2RhdGVzX2VuZCIsIndwYmNfZWRpdF9ib29raW5nX2hhc2giLCJ3cGJjX2lzX2VkaXRfYm9va2luZ19jb250ZXh0Iiwid3BiY19hbGxvd19wYXN0X2NvbnRleHQiLCJ3cGJjX2lzX2FsbG93X3Bhc3RfY29udGV4dCIsIndwYmNfYWxsb3dfcGFzdF9kYXRlX2FyciIsIndwYmNfaXNfYWRkX2Jvb2tpbmdfYWRtaW5fcGFnZSIsIndwYmNfbWluX2RhdGVfYXJyIiwibG9jYWxfX3N0YXJ0X3dlZWtkYXkiLCJsb2NhbF9fbnVtYmVyX29mX21vbnRocyIsInRleHQiLCJiZWZvcmVTZWxlY3REYXkiLCJqc19kYXRlIiwiaW5zdCIsIndwYmNfX2NhbGVuZGFyX19iZWZvcmVfc2VsZWN0X2RheXNfX2JzIiwiYmVmb3JlU2hvd0RheSIsIndwYmNfX2NhbGVuZGFyX19hcHBseV9jc3NfdG9fZGF5cyIsIm9uU2VsZWN0Iiwic3RyaW5nX2RhdGVzIiwianNfZGF0ZXNfYXJyIiwid3BiY19fY2FsZW5kYXJfX29uX3NlbGVjdF9kYXlzIiwib25Ib3ZlciIsInN0cmluZ19kYXRlIiwid3BiY19fY2FsZW5kYXJfX29uX2hvdmVyX2RheXMiLCJvbkNoYW5nZU1vbnRoWWVhciIsInllYXIiLCJyZWFsX21vbnRoIiwianNfZGF0ZV9fMXN0X2RheV9pbl9tb250aCIsInNob3dPbiIsIm51bWJlck9mTW9udGhzIiwic3RlcE1vbnRocyIsInByZXZUZXh0IiwibmV4dFRleHQiLCJkYXRlRm9ybWF0IiwiY2hhbmdlTW9udGgiLCJjaGFuZ2VZZWFyIiwibWluRGF0ZSIsIm1heERhdGUiLCJzaG93U3RhdHVzIiwibXVsdGlTZXBhcmF0b3IiLCJjbG9zZUF0VG9wIiwiZmlyc3REYXkiLCJnb3RvQ3VycmVudCIsImhpZGVJZk5vUHJldk5leHQiLCJtdWx0aVNlbGVjdCIsInJhbmdlU2VsZWN0IiwidXNlVGhlbWVSb2xsZXIiLCJ3cGJjX2NhbGVuZGFyc19fY2xlYXJfZGF5c19oaWdobGlnaHRpbmciLCJzdGFydF9ia19tb250aCIsIndwYmNfY2FsZW5kYXJfX3Njcm9sbF90byIsIndwYmNfZ2V0X2Jvb2tpbmdfc3RhdHVzZXNfX2FzX2FyciIsImRhdGVfYm9va2luZ3Nfb2JqIiwiYm9va2luZ19zdGF0dXMiLCJ0b1N0cmluZyIsInNwbGl0Iiwid3BiY19ib29raW5nX3N0YXR1c2VzX19oYXMiLCJib29raW5nX3N0YXR1c2VzX2FyciIsIndwYmNfYm9va2luZ19zdGF0dXNlc19faGFzX3BhcnQiLCJib29raW5nX3N0YXR1c19wYXJ0Iiwid3BiY19jYWxlbmRhcl9fZXZhbHVhdGVfZGF0ZV9jb25zdHJhaW50cyIsInNxbF9kYXRlIiwiaXNfbmF0aXZlbHlfc2VsZWN0YWJsZSIsIm5hdGl2ZV9jc3NfY2xhc3NlcyIsImRhdGVfY29uc3RyYWludCIsInJlc3VsdF9jc3NfY2xhc3NlcyIsInNsaWNlIiwiY29uc3RyYWludF9jbGFzc19pbmRleCIsImNvbnN0cmFpbnRfY3NzX2NsYXNzIiwidHJpZ2dlciIsImlzX2Jsb2NrZWQiLCJjc3NfY2xhc3NlcyIsInRlc3QiLCJCb29sZWFuIiwiZGF0ZSIsImNhbGVuZGFyX3BhcmFtc19hcnIiLCJkYXRlcGlja190aGlzIiwidG9kYXlfZGF0ZSIsImNsYXNzX2RheSIsIndwYmNfX2dldF9fdGRfY2xhc3NfZGF0ZSIsIndwYmNfX2dldF9fc3FsX2NsYXNzX2RhdGUiLCJzZWxlY3RlZF9kYXRlc19zcWwiLCJ3cGJjX2dldF9fc2VsZWN0ZWRfZGF0ZXNfc3FsX19hc19hcnIiLCJjc3NfY2xhc3Nlc19fZm9yX2RhdGUiLCJnZXREYXkiLCJpc19kYXlfc2VsZWN0YWJsZSIsImRhdGVfY29uc3RyYWludF9yZXN1bHQiLCJpc19zZWxlY3RhYmxlIiwic2Vhc29uX25hbWVzX2FyciIsInNlYXNvbl9rZXkiLCJyZXBsYWNlIiwiaXNfc2V0X3BlbmRpbmdfZGF5c19zZWxlY3RhYmxlIiwiZGF0ZV9ib29raW5nX29iaiIsInRvb2x0aXBfdGV4dCIsIndwYmNfc2V0X3Rvb2x0aXBfX19mb3JfX2NhbGVuZGFyX2RhdGUiLCJpc191bnNlbGVjdGFibGVfY2FsZW5kYXIiLCJpc19ib29raW5nX2Zvcm1fZXhpc3QiLCJpc19hZGRfYm9va2luZ19tb2RhbF9jYWxlbmRhciIsImlzX2FkbWluX2NhbGVuZGFyX3ByZXZpZXciLCJjc3Nfb2ZfY2FsZW5kYXIiLCJjc3MiLCJ3cGJjX19jYWxlbmRhcl9fZG9fZGF5c19oaWdobGlnaHRfX2JzIiwid3BiY19fY2FsZW5kYXJfX2RvX2RheXNfaGlnaGxpZ2h0X191bnJlc3RyaWN0ZWRfcmFuZ2UiLCJ3cGJjX2NhbGVuZGFyX19nZXRfaW5zdCIsInJhbmdlX3N0YXJ0IiwicmFuZ2VfZW5kIiwid29ya2luZ19kYXRlIiwidGRfb3ZlcnMiLCJkYXRlcyIsIndwYmNfaXNfdGhpc19kYXlfc2VsZWN0YWJsZSIsImFkZENsYXNzIiwiZ2V0RnVsbFllYXIiLCJnZXRNb250aCIsImdldERhdGUiLCJnZXRUaW1lIiwic2V0RGF0ZSIsIndwYmNfX2NhbGVuZGFyX19kb19kYXlzX3NlbGVjdF9fdW5yZXN0cmljdGVkX3JhbmdlIiwic2VsZWN0ZWRfZGF0ZXMiLCJjdXJyZW50X2RhdGUiLCJzZWxlY3RlZF9yYW5nZSIsInN0YXlPcGVuIiwidmFsIiwid3BiY19jYWxlbmRhcl9fdW5zZWxlY3RfYWxsX2RhdGVzIiwid3BiY19mcm9udF9lbmRfX3Nob3dfbWVzc2FnZV9fd2FybmluZyIsIl9mb3JtYXREYXRlIiwiaXNfZW5hYmxlZCIsIiRib29raW5nX2Zvcm0iLCIkY2FsZW5kYXJfZnJhbWUiLCIkbm90ZSIsInJlbW92ZSIsInN0b3AiLCJoaWRlIiwiYXR0ciIsImZpbmQiLCJmaXJzdCIsImFwcGVuZCIsImFmdGVyIiwid3BiY19yYW5nZV9zZWxlY3Rpb25fX2dldF9ndWlkYW5jZV9hbmltYXRpb25fZHVyYXRpb24iLCJtYXRjaE1lZGlhIiwibWF0Y2hlcyIsIndwYmNfcmFuZ2Vfc2VsZWN0aW9uX19oaWRlX2d1aWRhbmNlIiwic2xpZGVVcCIsIndwYmNfcmFuZ2Vfc2VsZWN0aW9uX19zaG93X2d1aWRhbmNlIiwic2xpZGVEb3duIiwicmVtb3ZlQXR0ciIsIndwYmNfcmFuZ2Vfc2VsZWN0aW9uX19zeW5jX2d1aWRhbmNlIiwid3BiY19fY2FsZW5kYXJfX2RvX2RheXNfc2VsZWN0X19icyIsIndwYmNfZGlzYWJsZV90aW1lX2ZpZWxkc19pbl9ib29raW5nX2Zvcm0iLCJtb3VzZV9jbGlja2VkX2RhdGVzIiwiYWxsX3NlbGVjdGVkX2RhdGVzX2FyciIsInJlYWR5Iiwib24iLCJldmVudCIsImNsb3NlZF90aW1lciIsIm1pZGRsZV9kYXlzX29wYWNpdHkiLCJub3QiLCJ0aW1lX2ZpZWxkc19vYmpfYXJyIiwid3BiY19nZXRfX3RpbWVfZmllbGRzX19pbl9ib29raW5nX2Zvcm1fX2FzX2FyciIsInNlbGVjdGVkX2RhdGVzX2FyciIsImNoaWxkX3Jlc291cmNlc19hcnIiLCJjaGlsZF9yZXNvdXJjZV9pZCIsIm1lcmdlZF9zZWNvbmRzIiwidGltZV9maWVsZHNfb2JqIiwiaXNfaW50ZXJzZWN0IiwiaXNfY2hlY2tfaW4iLCJ0b2RheV90aW1lX19yZWFsIiwidG9kYXlfdGltZV9fc2hpZnQiLCJhbGxvd19wYXN0X2NvbnRleHQiLCJlZGl0X2Jvb2tpbmdfaGFzaF9jb250ZXh0IiwiaXNfYWxsb3dfcGFzdF9jb250ZXh0IiwiZmllbGRfa2V5IiwiZGlzYWJsZWQiLCJpc190aW1lX2luX3Bhc3QiLCJ3cGJjX2NoZWNrX2lzX3RpbWVfaW5fcGFzdCIsIm5hbWUiLCJob3dfbWFueV9yZXNvdXJjZXNfaW50ZXJzZWN0ZWQiLCJyZXNfa2V5IiwiYm9va2VkX3RpbWVfc2xvdHMiLCJ0aW1lc19hc19zZWNvbmRzIiwid3BiY19pc19pbnRlcnNlY3RfX3JhbmdlX3RpbWVfaW50ZXJ2YWwiLCJ3cGJjX2lzX2ludGVyc2VjdF9fb25lX3RpbWVfaW50ZXJ2YWwiLCJ3cGJjX19odG1sX190aW1lX2ZpZWxkX29wdGlvbnNfX3NldF9kaXNhYmxlZCIsImpzX2N1cnJlbnRfdGltZV90b19jaGVjayIsInNxbF9kYXRlX2FyciIsInNxbF9kYXRlX19taWRuaWdodCIsInNxbF9kYXRlX19taWRuaWdodF9taWxpc2Vjb25kcyIsInRpbWVzX2FzX3NlY29uZHNfY2hlY2siLCJ0aW1lX0EiLCJ0aW1lX2ludGVydmFsX0IiLCJqIiwidGltZV9pbnRlcnZhbF9BIiwid3BiY19pbnRlcnZhbHNfX2lzX2ludGVyc2VjdGVkIiwidGltZV9maWVsZHNfYXJyIiwiY3RmIiwidGltZV9maWVsZCIsInRpbWVfb3B0aW9uIiwianF1ZXJ5X29wdGlvbiIsInZhbHVlX29wdGlvbl9zZWNvbmRzX2FyciIsInN0YXJ0X2VuZF90aW1lc19hcnIiLCJ0aW1lX2luX3NlY29uZHMiLCJwcm9wIiwicGFyZW50Iiwid3BiY19pc190aGlzX3RpbWVzbG90X19mdWxsX2RheV9ib29rZWQiLCJ0aW1lc2xvdF9hcnJfaW5fc2Vjb25kcyIsIm4iLCJzb3J0Iiwid3BiY19nZXRfX3NlbGVjdGVkX3RpbWVfZmllbGRzX19pbl9ib29raW5nX2Zvcm1fX2FzX2FyciIsImlzX29ubHlfc2VsZWN0ZWRfdGltZSIsInRleHRfdGltZV9maWVsZHNfYXJyIiwidGYiLCJ0ZXh0X2pxdWVyeSIsInRpbWVfX2hfbV9fYXJyIiwidGV4dF90aW1lX2luX3NlY29uZHMiLCJ0ZXh0X3RpbWVzX2FzX3NlY29uZHMiLCJfdXBkYXRlRGF0ZXBpY2siLCJtb250aCIsImN1cnNvckRhdGUiLCJzZXRGdWxsWWVhciIsInNldE1vbnRoIiwiZHJhd01vbnRoIiwiZHJhd1llYXIiLCJfbm90aWZ5Q2hhbmdlIiwiX2FkanVzdEluc3REYXRlIiwiX3Nob3dEYXRlIiwid3BiY19pc190aGlzX2RheV9zZWxlY3RhYmxlX19yYXciLCJ3cGJjX2lzX3RoaXNfZGF5X2Ftb25nX3NlbGVjdGVkX2RheXMiLCJqc19kYXRlX3RvX2NoZWNrIiwiZGF0ZV9pbmRleCIsIndwYmNfX2dldF9fanNfZGF0ZSIsInNxbF9jbGFzc19kYXRlIiwic3FsX2NsYXNzX2RhdGVfYXJyIiwiZGF0ZV9qcyIsInNldEhvdXJzIiwic2V0TWludXRlcyIsInNldFNlY29uZHMiLCJzZXRNaWxsaXNlY29uZHMiLCJ0ZF9jbGFzc19kYXkiLCJ3cGJjX19nZXRfX2RhdGVfcGFyYW1zX19mcm9tX3N0cmluZ19kYXRlIiwic2VwYXJhdG9yIiwiZGF0ZV9hcnIiLCJkYXRlX29iaiIsIndwYmNfY2FsZW5kYXJfX2xvYWRpbmdfX3N0YXJ0IiwibmV4dCIsIndwYmNfY2FsZW5kYXJfX2JsdXJfX3N0YXJ0Iiwid3BiY19jYWxlbmRhcl9fbG9hZGluZ19fc3RvcCIsIndwYmNfY2FsZW5kYXJfX2JsdXJfX3N0b3AiLCJ3cGJjX2NhbGVuZGFyX191cGRhdGVfbG9vayIsImpxX2NhbCIsIndwYmNfY2FsZW5kYXJfX3VwZGF0ZV9tb250aHNfbnVtYmVyIiwibW9udGhzX251bWJlciIsInNldHRpbmdzIiwid3BiY19fY2FsZW5kYXJfX2NoYW5nZV9za2luIiwic2VsZWN0ZWRfc2tpbl91cmwiLCJzdHlsZXNoZWV0IiwiZ2V0RWxlbWVudEJ5SWQiLCJwYXJlbnROb2RlIiwicmVtb3ZlQ2hpbGQiLCJoZWFkSUQiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsImNzc05vZGUiLCJjcmVhdGVFbGVtZW50IiwidHlwZSIsInNldEF0dHJpYnV0ZSIsInJlbCIsIm1lZGlhIiwiYXBwZW5kQ2hpbGQiLCJ3cGJjX19jc3NfX2NoYW5nZV9za2luIiwic3R5bGVzaGVldF9pZCIsIndwYmNfaW50ZXJ2YWxzX19tZXJnZV9pbmVyc2VjdGVkIiwiaW50ZXJ2YWxzIiwibWVyZ2VkIiwiYiIsIm1lcmdlZEludGVydmFsIiwiaW50ZXJ2YWwiLCJNYXRoIiwibWF4IiwiaW50ZXJ2YWxfQSIsImludGVydmFsX0IiLCJpc19pbnRlcnNlY3RlZCIsIm1pbiIsIndwYmNfZ2V0X2Fic19jbG9zZXN0X3ZhbHVlX2luX2FyciIsIm15VmFsdWUiLCJteUFycmF5IiwiZGlmZiIsImFicyIsImNsb3NldFZhbHVlIiwidGRfY2xhc3MiLCJ0ZF9lbCIsInVuZGVmaW5lZCIsIl90aXBweSIsIndwYmNfdGlwcHkiLCJjb250ZW50IiwicmVmZXJlbmNlIiwicG9wb3Zlcl9jb250ZW50IiwiYWxsb3dIVE1MIiwiaW50ZXJhY3RpdmUiLCJoaWRlT25DbGljayIsImludGVyYWN0aXZlQm9yZGVyIiwibWF4V2lkdGgiLCJ0aGVtZSIsInBsYWNlbWVudCIsImRlbGF5IiwiaWdub3JlQXR0cmlidXRlcyIsInRvdWNoIiwiYXBwZW5kVG8iLCJib2R5Iiwid3BiY19kYXRlc19fZGF5c19iZXR3ZWVuIiwiZGF0ZTEiLCJkYXRlMiIsIk9ORV9EQVkiLCJkYXRlMV9tcyIsImRhdGUyX21zIiwiZGlmZmVyZW5jZV9tcyIsInJvdW5kIiwid3BiY19kYXRlc19faXNfY29uc2VjdXRpdmVfZGF0ZXNfYXJyX3JhbmdlIiwic3FsX2RhdGVzX2FyciIsInByZXZpb3NfZGF0ZSIsIndwYmNfYXV0b19zZWxlY3RfZGF0ZXNfaW5fY2FsZW5kYXIiLCJjaGVja19pbl95bWQiLCJjaGVja19vdXRfeW1kIiwiZGF0ZXNfdG9fc2VsZWN0X2FyciIsIndwYmNfY2FsX2RheXNfc2VsZWN0X19tdWx0aXBsZSIsImNoZWNrX2luX2pzIiwidGRfY2VsbCIsIndwYmNfZ2V0X2NsaWNrZWRfdGQiLCJpZCIsIl9zZWxlY3REYXkiLCJjaGVja19vdXRfanMiLCJ0ZF9jZWxsX291dCIsImRhdGVzX2FyciIsIndwYmNfZ2V0X3NlbGVjdGlvbl9kYXRlc19qc19zdHJfYXJyX19mcm9tX2FyciIsIndwYmNfZ2V0X3NlbGVjdGlvbl9kYXRlc19qc19zdHJfYXJyX19mcm9tX2NoZWNrX2luX291dCIsImRhdGVzX2pzIiwic3RyX2RhdGUiLCJkYXlfYXZhaWxhYmlsaXR5IiwiY2hlY2tfb3V0X2RhdGUiLCJjaGVja291dF90aW1lc3RhbXAiLCJjYWxlbmRhcl9odG1sX2lkIiwib3JpZ2luYWxfYXJyYXkiLCJia19kaXN0aW5jdF9kYXRlcyIsImNoZWNrX2luX2RhdGUiLCJvcmlnaW5hbF9jaGVja19pbl9kYXRlIiwiX3Jlc3RyaWN0TWluTWF4IiwiX2RldGVybWluZURhdGUiLCJkYXRlX291dCIsIm9yaWdpbmFsX2NoZWNrX291dF9kYXRlIiwibWV3RGF0ZSIsIm9uZV9kYXRlX3N0ciIsImQiLCJ1cmxfcGFyYW1zIiwiVVJMU2VhcmNoUGFyYW1zIiwic2VhcmNoIiwic2VsZWN0X2RhdGVzX2luX2NhbGVuZGFyX2lkIiwibG9hZGVkX3Jlc291cmNlX2lkIiwid3BiY19hdXRvX2ZpbGxfdmFsdWUiLCJyZXBsYWNlQWxsIiwid3BiY19hdXRvX2ZpbGxfYm9va2luZ19maWVsZHMiLCJhdXRvX2ZpbGxfc3RyIiwiZmllbGRzX2FyciIsIndwYmNfYXV0b19maWxsX2Jvb2tpbmdfZmllbGRzX19wYXJzZSIsImZpZWxkX25hbWUiLCJmaWVsZF9lbGVtZW50cyIsImdldEVsZW1lbnRzQnlOYW1lIiwiZGF0YV9zdHIiLCJmaWx0ZXJfb3B0aW9uc19hcnIiLCJkYXRhX2FyciIsIm15X2Zvcm1fZmllbGQiLCJmaWx0ZXJfbmFtZSIsImZpbHRlcl92YWx1ZSIsIndwYmNfYXV0b19maWxsX3NlYXJjaF9maWVsZHNfX3BhcnNlIiwiZmlsdGVyX3R5cGUiLCJ3cGJjX2NhbGVuZGFyX19hdXRvX3VwZGF0ZV9tb250aHNfbnVtYmVyX19vbl9yZXNpemUiLCJ3aWR0aCIsIndwYmNfY2FsZW5kYXJzX19hdXRvX3VwZGF0ZV9tb250aHNfbnVtYmVyIiwiYWxsX2NhbGVuZGFyc19hcnIiLCJjYWxlbmRhcl9pZCIsIndwYmNfY2FsZW5kYXJfX2dldF9kYXRlX3BhcmFtZXRlciIsInBhcmFtZXRlcl9zdHIiLCJkYXRlX2V4cGVjdGVkX3ltZCIsImRhdGVfZXhwZWN0ZWRfeW1kX2FyciIsImRheSIsIndwYmNfY2FsX19yZV9pbml0Iiwid3BiY19jYWxfZGF5c19zZWxlY3RfX3JlX2luaXQiLCJ3cGJjX2NhbF9yZWFkeV9kYXlzX3NlbGVjdF9fc2luZ2xlIiwid3BiY19jYWxfZGF5c19zZWxlY3RfX3NpbmdsZSIsIndwYmNfY2FsX3JlYWR5X2RheXNfc2VsZWN0X19tdWx0aXBsZSIsIndwYmNfY2FsX3JlYWR5X2RheXNfc2VsZWN0X19maXhlZCIsImRheXNfbnVtYmVyIiwid2Vla19kYXlzX19zdGFydCIsIndwYmNfY2FsX2RheXNfc2VsZWN0X19maXhlZCIsIndwYmNfY2FsX3JlYWR5X2RheXNfc2VsZWN0X19yYW5nZV9tb2RlIiwid3BiY19jYWxfZGF5c19zZWxlY3RfX3JhbmdlX21vZGUiLCJ3cGJjX2NhbF9yZWFkeV9kYXlzX3NlbGVjdF9fcmFuZ2UiLCJkYXlzX21pbiIsImRheXNfbWF4IiwiZGF5c19zcGVjaWZpYyIsIndwYmNfY2FsX2RheXNfc2VsZWN0X19yYW5nZSIsInRhcmdldF9lbG0iLCJkYXRlc19zdGFydCIsImRhdGVzX2VuZCIsImdyb3VwQ29sbGFwc2VkIiwid3BiY19ob29rX19pbml0X3RpbWVzZWxlY3RvciIsInBvc3QiLCJ3cGJjX3VybF9hamF4IiwiYWN0aW9uIiwid3BiY19hanhfdXNlcl9pZCIsIndwYmNfYWp4X2xvY2FsZSIsImNhbGVuZGFyX3JlcXVlc3RfcGFyYW1zIiwicmVzcG9uc2VfZGF0YSIsInRleHRTdGF0dXMiLCJqcVhIUiIsImdyb3VwRW5kIiwiYWp4X3Bvc3RfZGF0YV9fcmVzb3VyY2VfaWQiLCJ3cGJjX2dldF9yZXNvdXJjZV9pZF9fZnJvbV9hanhfcG9zdF9kYXRhX3VybCIsImRhdGEiLCJpc192YWxpZF9yZXNwb25zZSIsIk9iamVjdCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImpxX25vZGUiLCJ3cGJjX2dldF9jYWxlbmRhcl9fanFfbm9kZV9fZm9yX21lc3NhZ2VzIiwicmVzcG9uc2VfZXJyb3JfbWVzc2FnZSIsIndwYmNfZnJvbnRfZW5kX19sb2dfdW5leHBlY3RlZF9hamF4X3Jlc3BvbnNlIiwid3BiY19mcm9udF9lbmRfX3Nob3dfbWVzc2FnZSIsIndwYmNfdXBkYXRlX2NhcGFjaXR5X2hpbnQiLCJmYWlsIiwiZXJyb3JUaHJvd24iLCJyZXNwb25zZVRleHQiLCJmYWxsYmFja19lcnJvcl9tZXNzYWdlIiwiY29uZmxpY3RfY2FjaGVfaGludCIsImVycm9yX21lc3NhZ2UiLCJ3cGJjX2Zyb250X2VuZF9fZ2V0X2FqYXhfZXJyb3JfbWVzc2FnZSIsIm1lc3NhZ2Vfc2hvd19kZWxheSIsImFqeF9wb3N0X2RhdGFfdXJsX3BhcmFtcyIsImNhbGVuZGFyX3Jlc291cmNlX2lkIiwid3BiY19nZXRfdXJpX3BhcmFtX2J5X25hbWUiLCJ1cmwiLCJkZWNvZGVVUklDb21wb25lbnQiLCJyZWdleCIsIlJlZ0V4cCIsInJlc3VsdHMiLCJleGVjIiwid3BiY19mcm9udF9lbmRfX2dldF9zYWZlX2FqYXhfZXJyb3JfbWVzc2FnZSIsImpxX3hociIsInJlc3BvbnNlSlNPTiIsInJlc3BvbnNlX2pzb24iLCJtZXNzYWdlX2NhbmRpZGF0ZXMiLCJjYW5kaWRhdGVfaW5kZXgiLCJzZXJ2ZXJfbWVzc2FnZSIsImZhbGxiYWNrX21lc3NhZ2UiLCJodHRwX2NvbmZsaWN0X2NhY2hlX2hpbnQiLCJodHRwX3N0YXR1cyIsInN0YXR1cyIsInNhZmVfc2VydmVyX21lc3NhZ2UiLCJhamF4X2FjdGlvbiIsInRleHRfc3RhdHVzIiwiZXJyb3JfdGhyb3duIiwiY29udGVudF90eXBlIiwicmVzcG9uc2VfdGV4dCIsInJlc3BvbnNlX2xlbmd0aCIsInJlc3BvbnNlX2Zvcm1hdCIsImRpYWdub3N0aWNfYWN0aW9uIiwidG9VcHBlckNhc2UiLCJkaWFnbm9zdGljX2NvZGUiLCJyZXNwb25zZV9oZWFkZXJzIiwiZ2V0UmVzcG9uc2VIZWFkZXIiLCJyZXNwb25zZV9qc29uX2Vycm9yIiwic3RhdHVzVGV4dCIsImxvZ2dpbmdfZXJyb3IiLCJwYXJhbXNfZGVmYXVsdCIsInBfa2V5IiwiaHRtbCIsInVuaXF1ZV9kaXZfaWQiLCJzY3JvbGxfdG9fZWxlbWVudCIsImpxX2VsX21lc3NhZ2UiLCJpc19zaG93X21lc3NhZ2UiLCJzaWJsaW5ncyIsImlzIiwiYmVmb3JlIiwibmV4dEFsbCIsImZhZGVPdXQiLCJjbG9zZWRfdGltZXIyIiwicGFyZW50X2VscyIsInBhcmVudHMiLCJtYXAiLCJzaG93Iiwid3BiY19kb19zY3JvbGwiLCJ3cGJjX2Zyb250X2VuZF9fc2hvd19tZXNzYWdlX19lcnJvciIsImNvbnRlbnRfbW9kZSIsIm5vdGljZV9tZXNzYWdlX2lkIiwid3BiY19mcm9udF9lbmRfX3Nob3dfbWVzc2FnZV9fZXJyb3JfdW5kZXJfZWxlbWVudCIsIm1lc3NhZ2VfZGVsYXkiLCJ3cGJjX2Zyb250X2VuZF9fc2hvd19tZXNzYWdlX19lcnJvcl9hYm92ZV9lbGVtZW50Iiwid3BiY19oaWdobGlnaHRfZXJyb3Jfb25fZm9ybV9maWVsZCIsIndwYmNfZnJvbnRfZW5kX19zaG93X21lc3NhZ2VfX3dhcm5pbmdfdW5kZXJfZWxlbWVudCIsIndwYmNfZnJvbnRfZW5kX19zaG93X21lc3NhZ2VfX3dhcm5pbmdfYWJvdmVfZWxlbWVudCIsImpxX25vZGVfYXJyIiwiZXh0cmFfc2hpZnRfb2Zmc2V0IiwidGFyZ2V0T2Zmc2V0Iiwib2Zmc2V0IiwidG9wIiwiYW5pbWF0ZSIsInNjcm9sbFRvcCIsIndwYmNfZGVmaW5lX3RpcHB5X3BvcG92ZXIiLCJwb3BvdmVyX3RpdGxlIiwic3RhdGUiLCJpc1Zpc2libGUiLCJ3cGJjX2RlZmluZV9oaWRlX3RpcHB5X29uX3Njcm9sbCIsImhpZGVBbGwiLCJ3IiwicHJvY2Vzc2VkX3NldCIsIldlYWtTZXQiLCJxdWVyeV9vbmUiLCJzZWxlY3RvciIsInJvb3QiLCJxdWVyeVNlbGVjdG9yIiwicXVlcnlfYWxsIiwib25fcmVhZHkiLCJzYWZlX2NsZWFyIiwiaW50ZXJ2YWxfaWQiLCJjbGVhckludGVydmFsIiwibWFya19wcm9jZXNzZWQiLCJlbCIsImRhdGFzZXQiLCJ3cGJjUHJvY2Vzc2VkIiwiaXNfcHJvY2Vzc2VkIiwiZ2V0X21lc3NhZ2VzIiwicmlkIiwicmlkX2ludCIsImR1cGxpY2F0ZV9tZXNzYWdlIiwiZHVwbGljYXRlIiwiaW5pdF9mYWlsZWQiLCJzdXBwb3J0IiwibGliX2pxIiwibGliX2RwIiwibGliX3dwYmMiLCJlc2NhcGVfaHRtbCIsInBsYWluX3RleHQiLCJ3cmFwX2h0bWwiLCJoYXNfanEiLCJoYXNfZHAiLCJoYXNfd3BiYyIsIm5vcm1hbGl6ZV9yaWQiLCJnZXRfcmlkX2NvdW50cyIsInIiLCJsb2FkZXJzIiwiY29udGFpbmVycyIsImlzX2R1cGxpY2F0ZV9yaWQiLCJjIiwiaXNfcmVwbGFjZWQiLCJjb250YWluZXIiLCJsb2FkZXJfc3RpbGxfaW5fZG9tIiwiY29udGFpbnMiLCJjYWxlbmRhcl9leGlzdHMiLCJzdGFydF9mb3IiLCJ3cGJjUmlkIiwiZ3JhY2VfbXMiLCJ3cGJjR3JhY2UiLCJjb250YWluZXJfaWQiLCJ0ZXh0X2VsIiwicmVwbGFjZWRfbm93IiwicG9sbF9pZCIsInNldEludGVydmFsIiwib2JzZXJ2ZXIiLCJkaXNjb25uZWN0IiwiTXV0YXRpb25PYnNlcnZlciIsIm9ic2VydmUiLCJjaGlsZExpc3QiLCJzdWJ0cmVlIiwiZmluYWxpemVfYWZ0ZXJfZ3JhY2UiLCJNIiwiaW5uZXJIVE1MIiwiYm9vdHN0cmFwX2V4aXN0aW5nIiwiZm9yRWFjaCIsIm9ic2VydmVfbmV3X2xvYWRlcnMiLCJkb2Nfb2JzZXJ2ZXIiLCJtdXRhdGlvbnMiLCJhZGRlZE5vZGVzIiwibm9kZSIsIm5vZGVUeXBlIiwiaW5uZXIiLCJkb2N1bWVudEVsZW1lbnQiLCJXUEJDX0ZFIiwiYXV0b2ZpbGxfYm9va2luZ19mb3JtX2ZpZWxkcyIsImZpbGxfdmFsdWVzIiwiZm9ybV9pZCIsImRhdGVfbmFtZSIsInN1Ym1pdF9mb3JtIiwicnVsZXMiLCJhcnJheV9ydWxlcyIsImVsZW1lbnRzIiwiY291bnQiLCJ2YWx1ZSIsInJlIiwibmlja25hbWUiLCJsYXN0X25hbWUiLCJmaXJzdF9uYW1lIiwiZW1haWwiLCJwaG9uZSIsIm5iX2VuZmFudCIsIndwYmNfYm9va2luZ19mb3JtX19pc19pbmxpbmVfcHJldmlld19zdWJtaXNzaW9uIiwid3BiY19ib29raW5nX2Zvcm1fX3Nob3dfaW5saW5lX3ByZXZpZXdfc3VibWlzc2lvbl9ub3RpY2UiLCJ3cGJjX2Jvb2tpbmdfZm9ybV9zdWJtaXQiLCJ3cGRldl9hY3RpdmVfbG9jYWxlIiwiaXNfZXJyb3IiLCJ3cGJjX2NoZWNrX2Vycm9yc19pbl9ib29raW5nX2Zvcm0iLCJkYXRlX2lucHV0IiwiZGF0ZV92YWx1ZSIsImFycl9vZl9zZWxlY3RlZF9hZGRpdGlvbmFsX2NhbGVuZGFycyIsIndwYmNfZ2V0X2Fycl9vZl9zZWxlY3RlZF9hZGRpdGlvbmFsX2NhbGVuZGFycyIsIndwYmNfaXNfdGhpc190aW1lX3NlbGVjdGlvbl9ub3RfYXZhaWxhYmxlIiwiYWRkaXRpb25hbF9jYWxlbmRhcnNfZWwiLCJpZF9hZGRpdGlvbmFsX3N0ciIsImlkX2FkZGl0aW9uYWxfYXJyIiwiaXNfdGltZXNfZGF0ZXNfb2siLCJpYSIsImFkZF9pZCIsImFkZF9kYXRlX2VsIiwiYWRkX2RhdGVfdmFsIiwiZm9ybWRhdGEiLCJpbnBfdmFsdWUiLCJpbnBfdGl0bGVfdmFsdWUiLCJlbGVtZW50IiwiZWxfdHlwZSIsIndwYmNfZXNjYXBlX3NlcmlhbGl6ZWRfdmFsdWUiLCJ3cGJjX2dldF9pbnB1dF9lbGVtZW50X3R5cGUiLCJ0YWdOYW1lIiwidGFnIiwiY2hlY2tlZCIsImNsYXNzTmFtZSIsImlucHV0X2VsZW1lbnRfdHlwZSIsImxhYmVsX2VsZW1lbnQiLCJ3cGJjX19pc19sZXNzX3RoYW5fcmVxdWlyZWRfX29mX21heF9hdmFpbGFibGVfc2xvdHNfX2JsIiwicmVnX2VtYWlsIiwicHJpbWFyeV9lbWFpbF9uYW1lIiwibWF0Y2giLCJzdWJzdHIiLCJjbGVhbl9maWVsZF9uYW1lIiwicmVzb3VyY2VfaWRfc3RyIiwiY2FwdGNoYSIsIndwYmNfZm9ybV9zdWJtaXRfc2VuZCIsImNhcHRjaGFfY2hhbGFuZ2UiLCJ1c2VyX2NhcHRjaGEiLCJteV9ib29raW5nX2Zvcm0iLCJib29raW5nX2Zvcm1fdHlwZV9lbCIsIm15X2Jvb2tpbmdfaGFzaCIsImlzX3NlbmRfZW1laWxzIiwiJGlzX3NlbmRfZW1haWxfdG9nZ2xlIiwiJG1vZGFsX3NlbmRfZW1haWxfdG9nZ2xlIiwiZGF0ZV9lbCIsIndwYmNfc2VuZF9hamF4X3N1Ym1pdCIsIndwYmNfYm9va2luZ19mb3JtX19zcGluX2xvYWRlcl9fc2hvdyIsIndwYmNfcmV3cml0ZV9maWVsZF9uYW1lX3N1ZmZpeCIsIm9sZF9pZCIsIm5ld19pZCIsIm9sZF9pZF9zdHIiLCJuZXdfaWRfc3RyIiwiaWRfYWRkaXRpb25hbCIsImZvcm1kYXRhX2FkZGl0aW9uYWxfYXJyIiwiZm9ybWRhdGFfYWRkaXRpb25hbCIsIndwYmNfYm9va2luZ19mb3JtX19vbl9zdWJtaXRfX3VpX2VsZW1lbnRzX2Rpc2FibGUiLCJmb3JtX3N0YXR1cyIsIndwYmNfX2dldF9mb3JtX3N0YXR1c19mb3Jfc3VibWl0IiwicHJldmlld19hcmdzIiwid3BiY19fZ2V0X2JmYl9wcmV2aWV3X2FyZ3NfZnJvbV9sb2NhdGlvbiIsIiRhZGRfYm9va2luZ19tb2RhbCIsImlzX2FsbG93X3Bhc3QiLCJjbGFzc2ljX2Jvb2tpbmdfY29udGV4dF90b2tlbiIsImFkbWluX2Jvb2tpbmdfbm9uY2UiLCJoYXNfYWRkX2Jvb2tpbmdfbW9kYWxfY29udGV4dCIsInJlcXVlc3RfcGFyYW1zIiwiJHRpbWVfb3ZlcnJpZGVfcGFuZWwiLCJzZWxlY3RlZF9kYXRlc19jb3VudCIsImRhdGVfdGV4dCIsImlzX3RpbWVzX2F2YWlsYWJpbGl0eV9vdmVycmlkZSIsInRva2VuIiwiaXNfZXhpdCIsIndwYmNfYWp4X2Jvb2tpbmdfX2NyZWF0ZSIsIndwYmNfX3BhcnNlX3F1ZXJ5X3N0cmluZyIsInFzIiwicGFydHMiLCJrdiIsImsiLCJwIiwid3BiY19iZmJfcHJldmlldyIsIndwYmNfYmZiX3ByZXZpZXdfdG9rZW4iLCJ3cGJjX2JmYl9wcmV2aWV3X2Zvcm1faWQiLCJteWJvb2tpbmdfc3VibWl0IiwiZXYiLCJDdXN0b21FdmVudCIsImNyZWF0ZUV2ZW50IiwiaW5pdEV2ZW50IiwiZGlzcGF0Y2hFdmVudCJdLCJzb3VyY2VzIjpbIndwYmNfdXRpbHMuanMiLCJ3cGJjLmpzIiwiZGV2X2xvZy5qcyIsImFqeF9sb2FkX2JhbGFuY2VyLmpzIiwid3BiY19jYWwuanMiLCJkYXlzX3NlbGVjdF9jdXN0b20uanMiLCJ3cGJjX2NhbF9hanguanMiLCJ3cGJjX2ZlX21lc3NhZ2VzLmpzIiwidGltZWxpbmVfcG9wb3Zlci5qcyIsIndwYmNfY2FsX2xvYWRlci5qcyIsImF1dG9maWxsX2ZpZWxkcy5qcyIsImJvb2tpbmdfZm9ybV9zdWJtaXQuanMiLCJ3cGJjX3JlYWR5X2V2ZW50LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuICogSmF2YVNjcmlwdCBVdGlsIEZ1bmN0aW9uc1x0XHQuLi9pbmNsdWRlcy9fX2pzL3V0aWxzL3dwYmNfdXRpbHMuanNcclxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRyaW0gIHN0cmluZ3MgYW5kIGFycmF5IGpvaW5lZCB3aXRoICAoLClcclxuICpcclxuICogQHBhcmFtIHN0cmluZ190b190cmltICAgc3RyaW5nIC8gYXJyYXlcclxuICogQHJldHVybnMgc3RyaW5nXHJcbiAqL1xyXG5mdW5jdGlvbiB3cGJjX3RyaW0oc3RyaW5nX3RvX3RyaW0pIHtcclxuXHJcblx0aWYgKCBBcnJheS5pc0FycmF5KCBzdHJpbmdfdG9fdHJpbSApICkge1xyXG5cdFx0c3RyaW5nX3RvX3RyaW0gPSBzdHJpbmdfdG9fdHJpbS5qb2luKCAnLCcgKTtcclxuXHR9XHJcblxyXG5cdGlmICggJ3N0cmluZycgPT0gdHlwZW9mIChzdHJpbmdfdG9fdHJpbSkgKSB7XHJcblx0XHRzdHJpbmdfdG9fdHJpbSA9IHN0cmluZ190b190cmltLnRyaW0oKTtcclxuXHR9XHJcblxyXG5cdHJldHVybiBzdHJpbmdfdG9fdHJpbTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENoZWNrIGlmIGVsZW1lbnQgaW4gYXJyYXlcclxuICpcclxuICogQHBhcmFtIGFycmF5X2hlcmVcdFx0YXJyYXlcclxuICogQHBhcmFtIHBfdmFsXHRcdFx0XHRlbGVtZW50IHRvICBjaGVja1xyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICovXHJcbmZ1bmN0aW9uIHdwYmNfaW5fYXJyYXkoYXJyYXlfaGVyZSwgcF92YWwpIHtcclxuXHRmb3IgKCB2YXIgaSA9IDAsIGwgPSBhcnJheV9oZXJlLmxlbmd0aDsgaSA8IGw7IGkrKyApIHtcclxuXHRcdGlmICggYXJyYXlfaGVyZVtpXSA9PSBwX3ZhbCApIHtcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblx0fVxyXG5cdHJldHVybiBmYWxzZTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFByZXZlbnQgb3BlbmluZyBibGFuayB3aW5kb3dzIG9uIFdvcmRQcmVzcyBwbGF5Z3JvdW5kIGZvciBwc2V1ZG8gbGlua3MgbGlrZSB0aGlzOiA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCI+IG9yICMgdG8gc3RheSBpbiB0aGUgc2FtZSB0YWIuXHJcbiAqL1xyXG4oZnVuY3Rpb24gKCkge1xyXG5cdCd1c2Ugc3RyaWN0JztcclxuXHJcblx0ZnVuY3Rpb24gaXNfcGxheWdyb3VuZF9vcmlnaW4oKSB7XHJcblx0XHRyZXR1cm4gbG9jYXRpb24ub3JpZ2luID09PSAnaHR0cHM6Ly9wbGF5Z3JvdW5kLndvcmRwcmVzcy5uZXQnO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gaXNfcHNldWRvX2xpbmsoYSkge1xyXG5cdFx0aWYgKCAhYSB8fCAhYS5nZXRBdHRyaWJ1dGUgKSByZXR1cm4gdHJ1ZTtcclxuXHRcdHZhciBocmVmID0gKGEuZ2V0QXR0cmlidXRlKCAnaHJlZicgKSB8fCAnJykudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcblx0XHRyZXR1cm4gKFxyXG5cdFx0XHQhaHJlZiB8fFxyXG5cdFx0XHRocmVmID09PSAnIycgfHxcclxuXHRcdFx0aHJlZi5pbmRleE9mKCAnIycgKSA9PT0gMCB8fFxyXG5cdFx0XHRocmVmLmluZGV4T2YoICdqYXZhc2NyaXB0OicgKSA9PT0gMCB8fFxyXG5cdFx0XHRocmVmLmluZGV4T2YoICdtYWlsdG86JyApID09PSAwIHx8XHJcblx0XHRcdGhyZWYuaW5kZXhPZiggJ3RlbDonICkgPT09IDBcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBmaXhfdGFyZ2V0KGEpIHtcclxuXHRcdGlmICggISBhICkgcmV0dXJuO1xyXG5cdFx0aWYgKCBpc19wc2V1ZG9fbGluayggYSApIHx8IGEuaGFzQXR0cmlidXRlKCAnZGF0YS13cC1uby1ibGFuaycgKSApIHtcclxuXHRcdFx0YS50YXJnZXQgPSAnX3NlbGYnO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gaW5pdF9maXgoKSB7XHJcblx0XHQvLyBPcHRpb25hbDogY2xlYW4gdXAgY3VycmVudCBET00gKGhhcm1sZXNz4oCUYWZmZWN0cyBvbmx5IHBzZXVkby9kYXRhbWFya2VkIGxpbmtzKS5cclxuXHRcdHZhciBub2RlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoICdhW2hyZWZdJyApO1xyXG5cdFx0Zm9yICggdmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKysgKSBmaXhfdGFyZ2V0KCBub2Rlc1tpXSApO1xyXG5cclxuXHRcdC8vIExhdGUgYnViYmxlLXBoYXNlIGxpc3RlbmVycyAocnVuIGFmdGVyIFBsYXlncm91bmQncyBoYW5kbGVycylcclxuXHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoICdjbGljaycsIGZ1bmN0aW9uIChlKSB7XHJcblx0XHRcdHZhciBhID0gZS50YXJnZXQgJiYgZS50YXJnZXQuY2xvc2VzdCA/IGUudGFyZ2V0LmNsb3Nlc3QoICdhW2hyZWZdJyApIDogbnVsbDtcclxuXHRcdFx0aWYgKCBhICkgZml4X3RhcmdldCggYSApO1xyXG5cdFx0fSwgZmFsc2UgKTtcclxuXHJcblx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCAnZm9jdXNpbicsIGZ1bmN0aW9uIChlKSB7XHJcblx0XHRcdHZhciBhID0gZS50YXJnZXQgJiYgZS50YXJnZXQuY2xvc2VzdCA/IGUudGFyZ2V0LmNsb3Nlc3QoICdhW2hyZWZdJyApIDogbnVsbDtcclxuXHRcdFx0aWYgKCBhICkgZml4X3RhcmdldCggYSApO1xyXG5cdFx0fSApO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gc2NoZWR1bGVfaW5pdCgpIHtcclxuXHRcdGlmICggIWlzX3BsYXlncm91bmRfb3JpZ2luKCkgKSByZXR1cm47XHJcblx0XHRzZXRUaW1lb3V0KCBpbml0X2ZpeCwgMTAwMCApOyAvLyBlbnN1cmUgd2UgYXR0YWNoIGFmdGVyIFBsYXlncm91bmQncyBzY3JpcHQuXHJcblx0fVxyXG5cclxuXHRpZiAoIGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICdsb2FkaW5nJyApIHtcclxuXHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoICdET01Db250ZW50TG9hZGVkJywgc2NoZWR1bGVfaW5pdCApO1xyXG5cdH0gZWxzZSB7XHJcblx0XHRzY2hlZHVsZV9pbml0KCk7XHJcblx0fVxyXG59KSgpOyIsIlwidXNlIHN0cmljdFwiO1xyXG4vKipcclxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbiAqXHRpbmNsdWRlcy9fX2pzL3dwYmMvd3BiYy5qc1xyXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuICovXHJcblxyXG4vKipcclxuICogRGVlcCBDbG9uZSBvZiBvYmplY3Qgb3IgYXJyYXlcclxuICpcclxuICogQHBhcmFtIG9ialxyXG4gKiBAcmV0dXJucyB7YW55fVxyXG4gKi9cclxuZnVuY3Rpb24gd3BiY19jbG9uZV9vYmooIG9iaiApe1xyXG5cclxuXHRyZXR1cm4gSlNPTi5wYXJzZSggSlNPTi5zdHJpbmdpZnkoIG9iaiApICk7XHJcbn1cclxuXHJcblxyXG5cclxuLyoqXHJcbiAqIE1haW4gX3dwYmMgSlMgb2JqZWN0XHJcbiAqL1xyXG5cclxudmFyIF93cGJjID0gKGZ1bmN0aW9uICggb2JqLCAkKSB7XHJcblxyXG5cdC8vIFNlY3VyZSBwYXJhbWV0ZXJzIGZvciBBamF4XHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHR2YXIgcF9zZWN1cmUgPSBvYmouc2VjdXJpdHlfb2JqID0gb2JqLnNlY3VyaXR5X29iaiB8fCB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVzZXJfaWQ6IDAsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG5vbmNlICA6ICcnLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRsb2NhbGUgOiAnJ1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICB9O1xyXG5cdG9iai5zZXRfc2VjdXJlX3BhcmFtID0gZnVuY3Rpb24gKCBwYXJhbV9rZXksIHBhcmFtX3ZhbCApIHtcclxuXHRcdHBfc2VjdXJlWyBwYXJhbV9rZXkgXSA9IHBhcmFtX3ZhbDtcclxuXHR9O1xyXG5cclxuXHRvYmouZ2V0X3NlY3VyZV9wYXJhbSA9IGZ1bmN0aW9uICggcGFyYW1fa2V5ICkge1xyXG5cdFx0cmV0dXJuIHBfc2VjdXJlWyBwYXJhbV9rZXkgXTtcclxuXHR9O1xyXG5cclxuXHJcblx0Ly8gQ2FsZW5kYXJzIFx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdHZhciBwX2NhbGVuZGFycyA9IG9iai5jYWxlbmRhcnNfb2JqID0gb2JqLmNhbGVuZGFyc19vYmogfHwge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBzb3J0ICAgICAgICAgICAgOiBcImJvb2tpbmdfaWRcIixcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gc29ydF90eXBlICAgICAgIDogXCJERVNDXCIsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIHBhZ2VfbnVtICAgICAgICA6IDEsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIHBhZ2VfaXRlbXNfY291bnQ6IDEwLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBjcmVhdGVfZGF0ZSAgICAgOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBrZXl3b3JkICAgICAgICAgOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBzb3VyY2UgICAgICAgICAgOiBcIlwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fTtcclxuXHJcblx0LyoqXHJcblx0ICogIENoZWNrIGlmIGNhbGVuZGFyIGZvciBzcGVjaWZpYyBib29raW5nIHJlc291cmNlIGRlZmluZWQgICA6OiAgIHRydWUgfCBmYWxzZVxyXG5cdCAqXHJcblx0ICogQHBhcmFtIHtzdHJpbmd8aW50fSByZXNvdXJjZV9pZFxyXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxyXG5cdCAqL1xyXG5cdG9iai5jYWxlbmRhcl9faXNfZGVmaW5lZCA9IGZ1bmN0aW9uICggcmVzb3VyY2VfaWQgKSB7XHJcblxyXG5cdFx0cmV0dXJuICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mKCBwX2NhbGVuZGFyc1sgJ2NhbGVuZGFyXycgKyByZXNvdXJjZV9pZCBdICkgKTtcclxuXHR9O1xyXG5cclxuXHQvKipcclxuXHQgKiAgQ3JlYXRlIENhbGVuZGFyIGluaXRpYWxpemluZ1xyXG5cdCAqXHJcblx0ICogQHBhcmFtIHtzdHJpbmd8aW50fSByZXNvdXJjZV9pZFxyXG5cdCAqL1xyXG5cdG9iai5jYWxlbmRhcl9faW5pdCA9IGZ1bmN0aW9uICggcmVzb3VyY2VfaWQgKSB7XHJcblxyXG5cdFx0cF9jYWxlbmRhcnNbICdjYWxlbmRhcl8nICsgcmVzb3VyY2VfaWQgXSA9IHt9O1xyXG5cdFx0cF9jYWxlbmRhcnNbICdjYWxlbmRhcl8nICsgcmVzb3VyY2VfaWQgXVsgJ2lkJyBdID0gcmVzb3VyY2VfaWQ7XHJcblx0XHRwX2NhbGVuZGFyc1sgJ2NhbGVuZGFyXycgKyByZXNvdXJjZV9pZCBdWyAncGVuZGluZ19kYXlzX3NlbGVjdGFibGUnIF0gPSBmYWxzZTtcclxuXHJcblx0fTtcclxuXHJcblx0LyoqXHJcblx0ICogQ2hlY2sgIGlmIHRoZSB0eXBlIG9mIHRoaXMgcHJvcGVydHkgIGlzIElOVFxyXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eV9uYW1lXHJcblx0ICogQHJldHVybnMge2Jvb2xlYW59XHJcblx0ICovXHJcblx0b2JqLmNhbGVuZGFyX19pc19wcm9wX2ludCA9IGZ1bmN0aW9uICggcHJvcGVydHlfbmFtZSApIHtcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIEZpeEluOiA5LjkuMC4yOS5cclxuXHJcblx0XHR2YXIgcF9jYWxlbmRhcl9pbnRfcHJvcGVydGllcyA9IFsnZHluYW1pY19fZGF5c19taW4nLCAnZHluYW1pY19fZGF5c19tYXgnLCAnZml4ZWRfX2RheXNfbnVtJ107XHJcblxyXG5cdFx0dmFyIGlzX2luY2x1ZGUgPSBwX2NhbGVuZGFyX2ludF9wcm9wZXJ0aWVzLmluY2x1ZGVzKCBwcm9wZXJ0eV9uYW1lICk7XHJcblxyXG5cdFx0cmV0dXJuIGlzX2luY2x1ZGU7XHJcblx0fTtcclxuXHJcblxyXG5cdC8qKlxyXG5cdCAqIFNldCBwYXJhbXMgZm9yIGFsbCAgY2FsZW5kYXJzXHJcblx0ICpcclxuXHQgKiBAcGFyYW0ge29iamVjdH0gY2FsZW5kYXJzX29ialx0XHRPYmplY3QgeyBjYWxlbmRhcl8xOiB7fSB9XHJcblx0ICogXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0IGNhbGVuZGFyXzM6IHt9LCAuLi4gfVxyXG5cdCAqL1xyXG5cdG9iai5jYWxlbmRhcnNfYWxsX19zZXQgPSBmdW5jdGlvbiAoIGNhbGVuZGFyc19vYmogKSB7XHJcblx0XHRwX2NhbGVuZGFycyA9IGNhbGVuZGFyc19vYmo7XHJcblx0fTtcclxuXHJcblx0LyoqXHJcblx0ICogR2V0IGJvb2tpbmdzIGluIGFsbCBjYWxlbmRhcnNcclxuXHQgKlxyXG5cdCAqIEByZXR1cm5zIHtvYmplY3R8e319XHJcblx0ICovXHJcblx0b2JqLmNhbGVuZGFyc19hbGxfX2dldCA9IGZ1bmN0aW9uICgpIHtcclxuXHRcdHJldHVybiBwX2NhbGVuZGFycztcclxuXHR9O1xyXG5cclxuXHQvKipcclxuXHQgKiBHZXQgY2FsZW5kYXIgb2JqZWN0ICAgOjogICB7IGlkOiAxLCDigKYgfVxyXG5cdCAqXHJcblx0ICogQHBhcmFtIHtzdHJpbmd8aW50fSByZXNvdXJjZV9pZFx0XHRcdFx0ICAnMidcclxuXHQgKiBAcmV0dXJucyB7b2JqZWN0fGJvb2xlYW59XHRcdFx0XHRcdHsgaWQ6IDIgLOKApiB9XHJcblx0ICovXHJcblx0b2JqLmNhbGVuZGFyX19nZXRfcGFyYW1ldGVycyA9IGZ1bmN0aW9uICggcmVzb3VyY2VfaWQgKSB7XHJcblxyXG5cdFx0aWYgKCBvYmouY2FsZW5kYXJfX2lzX2RlZmluZWQoIHJlc291cmNlX2lkICkgKXtcclxuXHJcblx0XHRcdHJldHVybiBwX2NhbGVuZGFyc1sgJ2NhbGVuZGFyXycgKyByZXNvdXJjZV9pZCBdO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdH07XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNldCBjYWxlbmRhciBvYmplY3QgICA6OiAgIHsgZGF0ZXM6ICBPYmplY3QgeyBcIjIwMjMtMDctMjFcIjoge+KApn0sIFwiMjAyMy0wNy0yMlwiOiB74oCmfSwgXCIyMDIzLTA3LTIzXCI6IHvigKZ9LCDigKYgfVxyXG5cdCAqXHJcblx0ICogaWYgY2FsZW5kYXIgb2JqZWN0ICBub3QgZGVmaW5lZCwgdGhlbiAgaXQncyB3aWxsIGJlIGRlZmluZWQgYW5kIElEIHNldFxyXG5cdCAqIGlmIGNhbGVuZGFyIGV4aXN0LCB0aGVuICBzeXN0ZW0gc2V0ICBhcyBuZXcgb3Igb3ZlcndyaXRlIG9ubHkgcHJvcGVydGllcyBmcm9tIGNhbGVuZGFyX3Byb3BlcnR5X29iaiBwYXJhbWV0ZXIsICBidXQgb3RoZXIgcHJvcGVydGllcyB3aWxsIGJlIGV4aXN0ZWQgYW5kIG5vdCBvdmVyd3JpdGUsIGxpa2UgJ2lkJ1xyXG5cdCAqXHJcblx0ICogQHBhcmFtIHtzdHJpbmd8aW50fSByZXNvdXJjZV9pZFx0XHRcdFx0ICAnMidcclxuXHQgKiBAcGFyYW0ge29iamVjdH0gY2FsZW5kYXJfcHJvcGVydHlfb2JqXHRcdFx0XHRcdCAgeyAgZGF0ZXM6ICBPYmplY3QgeyBcIjIwMjMtMDctMjFcIjoge+KApn0sIFwiMjAyMy0wNy0yMlwiOiB74oCmfSwgXCIyMDIzLTA3LTIzXCI6IHvigKZ9LCDigKYgfSAgfVxyXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNfY29tcGxldGVfb3ZlcndyaXRlXHRcdCAgaWYgJ3RydWUnIChkZWZhdWx0OiAnZmFsc2UnKSwgIHRoZW4gIG9ubHkgb3ZlcndyaXRlIG9yIGFkZCAgbmV3IHByb3BlcnRpZXMgaW4gIGNhbGVuZGFyX3Byb3BlcnR5X29ialxyXG5cdCAqIEByZXR1cm5zIHsqfVxyXG5cdCAqXHJcblx0ICogRXhhbXBsZXM6XHJcblx0ICpcclxuXHQgKiBDb21tb24gdXNhZ2UgaW4gUEhQOlxyXG5cdCAqICAgXHRcdFx0ZWNobyBcIiAgX3dwYmMuY2FsZW5kYXJfX3NldCggIFwiIC5pbnR2YWwoICRyZXNvdXJjZV9pZCApIC4gXCIsIHsgJ2RhdGVzJzogXCIgLiB3cF9qc29uX2VuY29kZSggJGF2YWlsYWJpbGl0eV9wZXJfZGF5c19hcnIgKSAuIFwiIH0gKTtcIjtcclxuXHQgKi9cclxuXHRvYmouY2FsZW5kYXJfX3NldF9wYXJhbWV0ZXJzID0gZnVuY3Rpb24gKCByZXNvdXJjZV9pZCwgY2FsZW5kYXJfcHJvcGVydHlfb2JqLCBpc19jb21wbGV0ZV9vdmVyd3JpdGUgPSBmYWxzZSAgKSB7XHJcblxyXG5cdFx0aWYgKCAoIW9iai5jYWxlbmRhcl9faXNfZGVmaW5lZCggcmVzb3VyY2VfaWQgKSkgfHwgKHRydWUgPT09IGlzX2NvbXBsZXRlX292ZXJ3cml0ZSkgKXtcclxuXHRcdFx0b2JqLmNhbGVuZGFyX19pbml0KCByZXNvdXJjZV9pZCApO1xyXG5cdFx0fVxyXG5cclxuXHRcdGZvciAoIHZhciBwcm9wX25hbWUgaW4gY2FsZW5kYXJfcHJvcGVydHlfb2JqICl7XHJcblxyXG5cdFx0XHRwX2NhbGVuZGFyc1sgJ2NhbGVuZGFyXycgKyByZXNvdXJjZV9pZCBdWyBwcm9wX25hbWUgXSA9IGNhbGVuZGFyX3Byb3BlcnR5X29ialsgcHJvcF9uYW1lIF07XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHBfY2FsZW5kYXJzWyAnY2FsZW5kYXJfJyArIHJlc291cmNlX2lkIF07XHJcblx0fTtcclxuXHJcblx0LyoqXHJcblx0ICogU2V0IHByb3BlcnR5ICB0byAgY2FsZW5kYXJcclxuXHQgKiBAcGFyYW0gcmVzb3VyY2VfaWRcdFwiMVwiXHJcblx0ICogQHBhcmFtIHByb3BfbmFtZVx0XHRuYW1lIG9mIHByb3BlcnR5XHJcblx0ICogQHBhcmFtIHByb3BfdmFsdWVcdHZhbHVlIG9mIHByb3BlcnR5XHJcblx0ICogQHJldHVybnMgeyp9XHRcdFx0Y2FsZW5kYXIgb2JqZWN0XHJcblx0ICovXHJcblx0b2JqLmNhbGVuZGFyX19zZXRfcGFyYW1fdmFsdWUgPSBmdW5jdGlvbiAoIHJlc291cmNlX2lkLCBwcm9wX25hbWUsIHByb3BfdmFsdWUgKSB7XHJcblxyXG5cdFx0aWYgKCAoIW9iai5jYWxlbmRhcl9faXNfZGVmaW5lZCggcmVzb3VyY2VfaWQgKSkgKXtcclxuXHRcdFx0b2JqLmNhbGVuZGFyX19pbml0KCByZXNvdXJjZV9pZCApO1xyXG5cdFx0fVxyXG5cclxuXHRcdHBfY2FsZW5kYXJzWyAnY2FsZW5kYXJfJyArIHJlc291cmNlX2lkIF1bIHByb3BfbmFtZSBdID0gcHJvcF92YWx1ZTtcclxuXHJcblx0XHRyZXR1cm4gcF9jYWxlbmRhcnNbICdjYWxlbmRhcl8nICsgcmVzb3VyY2VfaWQgXTtcclxuXHR9O1xyXG5cclxuXHQvKipcclxuXHQgKiAgR2V0IGNhbGVuZGFyIHByb3BlcnR5IHZhbHVlICAgXHQ6OiAgIG1peGVkIHwgbnVsbFxyXG5cdCAqXHJcblx0ICogQHBhcmFtIHtzdHJpbmd8aW50fSAgcmVzb3VyY2VfaWRcdFx0JzEnXHJcblx0ICogQHBhcmFtIHtzdHJpbmd9IHByb3BfbmFtZVx0XHRcdCdzZWxlY3Rpb25fbW9kZSdcclxuXHQgKiBAcmV0dXJucyB7KnxudWxsfVx0XHRcdFx0XHRtaXhlZCB8IG51bGxcclxuXHQgKi9cclxuXHRvYmouY2FsZW5kYXJfX2dldF9wYXJhbV92YWx1ZSA9IGZ1bmN0aW9uKCByZXNvdXJjZV9pZCwgcHJvcF9uYW1lICl7XHJcblxyXG5cdFx0aWYgKFxyXG5cdFx0XHQgICAoIG9iai5jYWxlbmRhcl9faXNfZGVmaW5lZCggcmVzb3VyY2VfaWQgKSApXHJcblx0XHRcdCYmICggJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiAoIHBfY2FsZW5kYXJzWyAnY2FsZW5kYXJfJyArIHJlc291cmNlX2lkIF1bIHByb3BfbmFtZSBdICkgKVxyXG5cdFx0KXtcclxuXHRcdFx0Ly8gRml4SW46IDkuOS4wLjI5LlxyXG5cdFx0XHRpZiAoIG9iai5jYWxlbmRhcl9faXNfcHJvcF9pbnQoIHByb3BfbmFtZSApICl7XHJcblx0XHRcdFx0cF9jYWxlbmRhcnNbICdjYWxlbmRhcl8nICsgcmVzb3VyY2VfaWQgXVsgcHJvcF9uYW1lIF0gPSBwYXJzZUludCggcF9jYWxlbmRhcnNbICdjYWxlbmRhcl8nICsgcmVzb3VyY2VfaWQgXVsgcHJvcF9uYW1lIF0gKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gIHBfY2FsZW5kYXJzWyAnY2FsZW5kYXJfJyArIHJlc291cmNlX2lkIF1bIHByb3BfbmFtZSBdO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBudWxsO1x0XHQvLyBJZiBzb21lIHByb3BlcnR5IG5vdCBkZWZpbmVkLCB0aGVuIG51bGw7XHJcblx0fTtcclxuXHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHJcblx0Ly8gQm9va2luZ3MgXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0dmFyIHBfYm9va2luZ3MgPSBvYmouYm9va2luZ3Nfb2JqID0gb2JqLmJvb2tpbmdzX29iaiB8fCB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gY2FsZW5kYXJfMTogT2JqZWN0IHtcclxuIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly9cdFx0XHRcdFx0XHQgICBpZDogICAgIDFcclxuIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly9cdFx0XHRcdFx0XHQgLCBkYXRlczogIE9iamVjdCB7IFwiMjAyMy0wNy0yMVwiOiB74oCmfSwgXCIyMDIzLTA3LTIyXCI6IHvigKZ9LCBcIjIwMjMtMDctMjNcIjoge+KApn0sIOKAplxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fTtcclxuXHJcblx0LyoqXHJcblx0ICogIENoZWNrIGlmIGJvb2tpbmdzIGZvciBzcGVjaWZpYyBib29raW5nIHJlc291cmNlIGRlZmluZWQgICA6OiAgIHRydWUgfCBmYWxzZVxyXG5cdCAqXHJcblx0ICogQHBhcmFtIHtzdHJpbmd8aW50fSByZXNvdXJjZV9pZFxyXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxyXG5cdCAqL1xyXG5cdG9iai5ib29raW5nc19pbl9jYWxlbmRhcl9faXNfZGVmaW5lZCA9IGZ1bmN0aW9uICggcmVzb3VyY2VfaWQgKSB7XHJcblxyXG5cdFx0cmV0dXJuICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mKCBwX2Jvb2tpbmdzWyAnY2FsZW5kYXJfJyArIHJlc291cmNlX2lkIF0gKSApO1xyXG5cdH07XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldCBib29raW5ncyBjYWxlbmRhciBvYmplY3QgICA6OiAgIHsgaWQ6IDEgLCBkYXRlczogIE9iamVjdCB7IFwiMjAyMy0wNy0yMVwiOiB74oCmfSwgXCIyMDIzLTA3LTIyXCI6IHvigKZ9LCBcIjIwMjMtMDctMjNcIjoge+KApn0sIOKApiB9XHJcblx0ICpcclxuXHQgKiBAcGFyYW0ge3N0cmluZ3xpbnR9IHJlc291cmNlX2lkXHRcdFx0XHQgICcyJ1xyXG5cdCAqIEByZXR1cm5zIHtvYmplY3R8Ym9vbGVhbn1cdFx0XHRcdFx0eyBpZDogMiAsIGRhdGVzOiAgT2JqZWN0IHsgXCIyMDIzLTA3LTIxXCI6IHvigKZ9LCBcIjIwMjMtMDctMjJcIjoge+KApn0sIFwiMjAyMy0wNy0yM1wiOiB74oCmfSwg4oCmIH1cclxuXHQgKi9cclxuXHRvYmouYm9va2luZ3NfaW5fY2FsZW5kYXJfX2dldCA9IGZ1bmN0aW9uKCByZXNvdXJjZV9pZCApe1xyXG5cclxuXHRcdGlmICggb2JqLmJvb2tpbmdzX2luX2NhbGVuZGFyX19pc19kZWZpbmVkKCByZXNvdXJjZV9pZCApICl7XHJcblxyXG5cdFx0XHRyZXR1cm4gcF9ib29raW5nc1sgJ2NhbGVuZGFyXycgKyByZXNvdXJjZV9pZCBdO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdH07XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNldCBib29raW5ncyBjYWxlbmRhciBvYmplY3QgICA6OiAgIHsgZGF0ZXM6ICBPYmplY3QgeyBcIjIwMjMtMDctMjFcIjoge+KApn0sIFwiMjAyMy0wNy0yMlwiOiB74oCmfSwgXCIyMDIzLTA3LTIzXCI6IHvigKZ9LCDigKYgfVxyXG5cdCAqXHJcblx0ICogaWYgY2FsZW5kYXIgb2JqZWN0ICBub3QgZGVmaW5lZCwgdGhlbiAgaXQncyB3aWxsIGJlIGRlZmluZWQgYW5kIElEIHNldFxyXG5cdCAqIGlmIGNhbGVuZGFyIGV4aXN0LCB0aGVuICBzeXN0ZW0gc2V0ICBhcyBuZXcgb3Igb3ZlcndyaXRlIG9ubHkgcHJvcGVydGllcyBmcm9tIGNhbGVuZGFyX29iaiBwYXJhbWV0ZXIsICBidXQgb3RoZXIgcHJvcGVydGllcyB3aWxsIGJlIGV4aXN0ZWQgYW5kIG5vdCBvdmVyd3JpdGUsIGxpa2UgJ2lkJ1xyXG5cdCAqXHJcblx0ICogQHBhcmFtIHtzdHJpbmd8aW50fSByZXNvdXJjZV9pZFx0XHRcdFx0ICAnMidcclxuXHQgKiBAcGFyYW0ge29iamVjdH0gY2FsZW5kYXJfb2JqXHRcdFx0XHRcdCAgeyAgZGF0ZXM6ICBPYmplY3QgeyBcIjIwMjMtMDctMjFcIjoge+KApn0sIFwiMjAyMy0wNy0yMlwiOiB74oCmfSwgXCIyMDIzLTA3LTIzXCI6IHvigKZ9LCDigKYgfSAgfVxyXG5cdCAqIEByZXR1cm5zIHsqfVxyXG5cdCAqXHJcblx0ICogRXhhbXBsZXM6XHJcblx0ICpcclxuXHQgKiBDb21tb24gdXNhZ2UgaW4gUEhQOlxyXG5cdCAqICAgXHRcdFx0ZWNobyBcIiAgX3dwYmMuYm9va2luZ3NfaW5fY2FsZW5kYXJfX3NldCggIFwiIC5pbnR2YWwoICRyZXNvdXJjZV9pZCApIC4gXCIsIHsgJ2RhdGVzJzogXCIgLiB3cF9qc29uX2VuY29kZSggJGF2YWlsYWJpbGl0eV9wZXJfZGF5c19hcnIgKSAuIFwiIH0gKTtcIjtcclxuXHQgKi9cclxuXHRvYmouYm9va2luZ3NfaW5fY2FsZW5kYXJfX3NldCA9IGZ1bmN0aW9uKCByZXNvdXJjZV9pZCwgY2FsZW5kYXJfb2JqICl7XHJcblxyXG5cdFx0aWYgKCAhIG9iai5ib29raW5nc19pbl9jYWxlbmRhcl9faXNfZGVmaW5lZCggcmVzb3VyY2VfaWQgKSApe1xyXG5cdFx0XHRwX2Jvb2tpbmdzWyAnY2FsZW5kYXJfJyArIHJlc291cmNlX2lkIF0gPSB7fTtcclxuXHRcdFx0cF9ib29raW5nc1sgJ2NhbGVuZGFyXycgKyByZXNvdXJjZV9pZCBdWyAnaWQnIF0gPSByZXNvdXJjZV9pZDtcclxuXHRcdH1cclxuXHJcblx0XHRmb3IgKCB2YXIgcHJvcF9uYW1lIGluIGNhbGVuZGFyX29iaiApe1xyXG5cclxuXHRcdFx0cF9ib29raW5nc1sgJ2NhbGVuZGFyXycgKyByZXNvdXJjZV9pZCBdWyBwcm9wX25hbWUgXSA9IGNhbGVuZGFyX29ialsgcHJvcF9uYW1lIF07XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHBfYm9va2luZ3NbICdjYWxlbmRhcl8nICsgcmVzb3VyY2VfaWQgXTtcclxuXHR9O1xyXG5cclxuXHQvLyBEYXRlc1xyXG5cclxuXHQvKipcclxuXHQgKiAgR2V0IGJvb2tpbmdzIGRhdGEgZm9yIEFMTCBEYXRlcyBpbiBjYWxlbmRhciAgIDo6ICAgZmFsc2UgfCB7IFwiMjAyMy0wNy0yMlwiOiB74oCmfSwgXCIyMDIzLTA3LTIzXCI6IHvigKZ9LCDigKYgfVxyXG5cdCAqXHJcblx0ICogQHBhcmFtIHtzdHJpbmd8aW50fSByZXNvdXJjZV9pZFx0XHRcdCcxJ1xyXG5cdCAqIEByZXR1cm5zIHtvYmplY3R8Ym9vbGVhbn1cdFx0XHRcdGZhbHNlIHwgT2JqZWN0IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcIjIwMjMtMDctMjRcIjogT2JqZWN0IHsgWydzdW1tYXJ5J11bJ3N0YXR1c19mb3JfZGF5J106IFwiYXZhaWxhYmxlXCIsIGRheV9hdmFpbGFiaWxpdHk6IDEsIG1heF9jYXBhY2l0eTogMSwg4oCmIH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcIjIwMjMtMDctMjZcIjogT2JqZWN0IHsgWydzdW1tYXJ5J11bJ3N0YXR1c19mb3JfZGF5J106IFwiZnVsbF9kYXlfYm9va2luZ1wiLCBbJ3N1bW1hcnknXVsnc3RhdHVzX2Zvcl9ib29raW5ncyddOiBcInBlbmRpbmdcIiwgZGF5X2F2YWlsYWJpbGl0eTogMCwg4oCmIH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcIjIwMjMtMDctMjlcIjogT2JqZWN0IHsgWydzdW1tYXJ5J11bJ3N0YXR1c19mb3JfZGF5J106IFwicmVzb3VyY2VfYXZhaWxhYmlsaXR5XCIsIGRheV9hdmFpbGFiaWxpdHk6IDAsIG1heF9jYXBhY2l0eTogMSwg4oCmIH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcIjIwMjMtMDctMzBcIjoge+KApn0sIFwiMjAyMy0wNy0zMVwiOiB74oCmfSwg4oCmXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHQgKi9cclxuXHRvYmouYm9va2luZ3NfaW5fY2FsZW5kYXJfX2dldF9kYXRlcyA9IGZ1bmN0aW9uKCByZXNvdXJjZV9pZCl7XHJcblxyXG5cdFx0aWYgKFxyXG5cdFx0XHQgICAoIG9iai5ib29raW5nc19pbl9jYWxlbmRhcl9faXNfZGVmaW5lZCggcmVzb3VyY2VfaWQgKSApXHJcblx0XHRcdCYmICggJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiAoIHBfYm9va2luZ3NbICdjYWxlbmRhcl8nICsgcmVzb3VyY2VfaWQgXVsgJ2RhdGVzJyBdICkgKVxyXG5cdFx0KXtcclxuXHRcdFx0cmV0dXJuICBwX2Jvb2tpbmdzWyAnY2FsZW5kYXJfJyArIHJlc291cmNlX2lkIF1bICdkYXRlcycgXTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZmFsc2U7XHRcdC8vIElmIHNvbWUgcHJvcGVydHkgbm90IGRlZmluZWQsIHRoZW4gZmFsc2U7XHJcblx0fTtcclxuXHJcblx0LyoqXHJcblx0ICogU2V0IGJvb2tpbmdzIGRhdGVzIGluIGNhbGVuZGFyIG9iamVjdCAgIDo6ICAgIHsgXCIyMDIzLTA3LTIxXCI6IHvigKZ9LCBcIjIwMjMtMDctMjJcIjoge+KApn0sIFwiMjAyMy0wNy0yM1wiOiB74oCmfSwg4oCmIH1cclxuXHQgKlxyXG5cdCAqIGlmIGNhbGVuZGFyIG9iamVjdCAgbm90IGRlZmluZWQsIHRoZW4gIGl0J3Mgd2lsbCBiZSBkZWZpbmVkIGFuZCAnaWQnLCAnZGF0ZXMnIHNldFxyXG5cdCAqIGlmIGNhbGVuZGFyIGV4aXN0LCB0aGVuIHN5c3RlbSBhZGQgYSAgbmV3IG9yIG92ZXJ3cml0ZSBvbmx5IGRhdGVzIGZyb20gZGF0ZXNfb2JqIHBhcmFtZXRlcixcclxuXHQgKiBidXQgb3RoZXIgZGF0ZXMgbm90IGZyb20gcGFyYW1ldGVyIGRhdGVzX29iaiB3aWxsIGJlIGV4aXN0ZWQgYW5kIG5vdCBvdmVyd3JpdGUuXHJcblx0ICpcclxuXHQgKiBAcGFyYW0ge3N0cmluZ3xpbnR9IHJlc291cmNlX2lkXHRcdFx0XHQgICcyJ1xyXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBkYXRlc19vYmpcdFx0XHRcdFx0ICB7IFwiMjAyMy0wNy0yMVwiOiB74oCmfSwgXCIyMDIzLTA3LTIyXCI6IHvigKZ9LCBcIjIwMjMtMDctMjNcIjoge+KApn0sIOKApiB9XHJcblx0ICogQHBhcmFtIHtib29sZWFufSBpc19jb21wbGV0ZV9vdmVyd3JpdGVcdFx0ICBpZiBmYWxzZSwgIHRoZW4gIG9ubHkgb3ZlcndyaXRlIG9yIGFkZCAgZGF0ZXMgZnJvbSBcdGRhdGVzX29ialxyXG5cdCAqIEByZXR1cm5zIHsqfVxyXG5cdCAqXHJcblx0ICogRXhhbXBsZXM6XHJcblx0ICogICBcdFx0XHRfd3BiYy5ib29raW5nc19pbl9jYWxlbmRhcl9fc2V0X2RhdGVzKCByZXNvdXJjZV9pZCwgeyBcIjIwMjMtMDctMjFcIjoge+KApn0sIFwiMjAyMy0wNy0yMlwiOiB74oCmfSwg4oCmIH0gICk7XHRcdDwtICAgb3ZlcndyaXRlIEFMTCBkYXRlc1xyXG5cdCAqICAgXHRcdFx0X3dwYmMuYm9va2luZ3NfaW5fY2FsZW5kYXJfX3NldF9kYXRlcyggcmVzb3VyY2VfaWQsIHsgXCIyMDIzLTA3LTIyXCI6IHvigKZ9IH0sICBmYWxzZSAgKTtcdFx0XHRcdFx0PC0gICBhZGQgb3Igb3ZlcndyaXRlIG9ubHkgIFx0XCIyMDIzLTA3LTIyXCI6IHt9XHJcblx0ICpcclxuXHQgKiBDb21tb24gdXNhZ2UgaW4gUEhQOlxyXG5cdCAqICAgXHRcdFx0ZWNobyBcIiAgX3dwYmMuYm9va2luZ3NfaW5fY2FsZW5kYXJfX3NldF9kYXRlcyggIFwiIC4gaW50dmFsKCAkcmVzb3VyY2VfaWQgKSAuIFwiLCAgXCIgLiB3cF9qc29uX2VuY29kZSggJGF2YWlsYWJpbGl0eV9wZXJfZGF5c19hcnIgKSAuIFwiICApOyAgXCI7XHJcblx0ICovXHJcblx0b2JqLmJvb2tpbmdzX2luX2NhbGVuZGFyX19zZXRfZGF0ZXMgPSBmdW5jdGlvbiggcmVzb3VyY2VfaWQsIGRhdGVzX29iaiAsIGlzX2NvbXBsZXRlX292ZXJ3cml0ZSA9IHRydWUgKXtcclxuXHJcblx0XHRpZiAoICFvYmouYm9va2luZ3NfaW5fY2FsZW5kYXJfX2lzX2RlZmluZWQoIHJlc291cmNlX2lkICkgKXtcclxuXHRcdFx0b2JqLmJvb2tpbmdzX2luX2NhbGVuZGFyX19zZXQoIHJlc291cmNlX2lkLCB7ICdkYXRlcyc6IHt9IH0gKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoICd1bmRlZmluZWQnID09PSB0eXBlb2YgKHBfYm9va2luZ3NbICdjYWxlbmRhcl8nICsgcmVzb3VyY2VfaWQgXVsgJ2RhdGVzJyBdKSApe1xyXG5cdFx0XHRwX2Jvb2tpbmdzWyAnY2FsZW5kYXJfJyArIHJlc291cmNlX2lkIF1bICdkYXRlcycgXSA9IHt9XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGlzX2NvbXBsZXRlX292ZXJ3cml0ZSl7XHJcblxyXG5cdFx0XHQvLyBDb21wbGV0ZSBvdmVyd3JpdGUgYWxsICBib29raW5nIGRhdGVzXHJcblx0XHRcdHBfYm9va2luZ3NbICdjYWxlbmRhcl8nICsgcmVzb3VyY2VfaWQgXVsgJ2RhdGVzJyBdID0gZGF0ZXNfb2JqO1xyXG5cdFx0fSBlbHNlIHtcclxuXHJcblx0XHRcdC8vIEFkZCBvbmx5ICBuZXcgb3Igb3ZlcndyaXRlIGV4aXN0IGJvb2tpbmcgZGF0ZXMgZnJvbSAgcGFyYW1ldGVyLiBCb29raW5nIGRhdGVzIG5vdCBmcm9tICBwYXJhbWV0ZXIgIHdpbGwgIGJlIHdpdGhvdXQgY2huYW5nZXNcclxuXHRcdFx0Zm9yICggdmFyIHByb3BfbmFtZSBpbiBkYXRlc19vYmogKXtcclxuXHJcblx0XHRcdFx0cF9ib29raW5nc1sgJ2NhbGVuZGFyXycgKyByZXNvdXJjZV9pZCBdWydkYXRlcyddWyBwcm9wX25hbWUgXSA9IGRhdGVzX29ialsgcHJvcF9uYW1lIF07XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcF9ib29raW5nc1sgJ2NhbGVuZGFyXycgKyByZXNvdXJjZV9pZCBdO1xyXG5cdH07XHJcblxyXG5cclxuXHQvKipcclxuXHQgKiAgR2V0IGJvb2tpbmdzIGRhdGEgZm9yIHNwZWNpZmljIGRhdGUgaW4gY2FsZW5kYXIgICA6OiAgIGZhbHNlIHwgeyBkYXlfYXZhaWxhYmlsaXR5OiAxLCAuLi4gfVxyXG5cdCAqXHJcblx0ICogQHBhcmFtIHtzdHJpbmd8aW50fSByZXNvdXJjZV9pZFx0XHRcdCcxJ1xyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzcWxfY2xhc3NfZGF5XHRcdFx0JzIwMjMtMDctMjEnXHJcblx0ICogQHJldHVybnMge29iamVjdHxib29sZWFufVx0XHRcdFx0ZmFsc2UgfCB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRheV9hdmFpbGFiaWxpdHk6IDRcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWF4X2NhcGFjaXR5OiA0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gID49IEJ1c2luZXNzIExhcmdlXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDI6IE9iamVjdCB7IGlzX2RheV91bmF2YWlsYWJsZTogZmFsc2UsIF9kYXlfc3RhdHVzOiBcImF2YWlsYWJsZVwiIH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0MTA6IE9iamVjdCB7IGlzX2RheV91bmF2YWlsYWJsZTogZmFsc2UsIF9kYXlfc3RhdHVzOiBcImF2YWlsYWJsZVwiIH1cdFx0Ly8gID49IEJ1c2luZXNzIExhcmdlIC4uLlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQxMTogT2JqZWN0IHsgaXNfZGF5X3VuYXZhaWxhYmxlOiBmYWxzZSwgX2RheV9zdGF0dXM6IFwiYXZhaWxhYmxlXCIgfVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQxMjogT2JqZWN0IHsgaXNfZGF5X3VuYXZhaWxhYmxlOiBmYWxzZSwgX2RheV9zdGF0dXM6IFwiYXZhaWxhYmxlXCIgfVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdCAqL1xyXG5cdG9iai5ib29raW5nc19pbl9jYWxlbmRhcl9fZ2V0X2Zvcl9kYXRlID0gZnVuY3Rpb24oIHJlc291cmNlX2lkLCBzcWxfY2xhc3NfZGF5ICl7XHJcblxyXG5cdFx0aWYgKFxyXG5cdFx0XHQgICAoIG9iai5ib29raW5nc19pbl9jYWxlbmRhcl9faXNfZGVmaW5lZCggcmVzb3VyY2VfaWQgKSApXHJcblx0XHRcdCYmICggJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiAoIHBfYm9va2luZ3NbICdjYWxlbmRhcl8nICsgcmVzb3VyY2VfaWQgXVsgJ2RhdGVzJyBdICkgKVxyXG5cdFx0XHQmJiAoICd1bmRlZmluZWQnICE9PSB0eXBlb2YgKCBwX2Jvb2tpbmdzWyAnY2FsZW5kYXJfJyArIHJlc291cmNlX2lkIF1bICdkYXRlcycgXVsgc3FsX2NsYXNzX2RheSBdICkgKVxyXG5cdFx0KXtcclxuXHRcdFx0cmV0dXJuICBwX2Jvb2tpbmdzWyAnY2FsZW5kYXJfJyArIHJlc291cmNlX2lkIF1bICdkYXRlcycgXVsgc3FsX2NsYXNzX2RheSBdO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBmYWxzZTtcdFx0Ly8gSWYgc29tZSBwcm9wZXJ0eSBub3QgZGVmaW5lZCwgdGhlbiBmYWxzZTtcclxuXHR9O1xyXG5cclxuXHJcblx0Ly8gQW55ICBQQVJBTVMgICBpbiBib29raW5nc1xyXG5cclxuXHQvKipcclxuXHQgKiBTZXQgcHJvcGVydHkgIHRvICBib29raW5nXHJcblx0ICogQHBhcmFtIHJlc291cmNlX2lkXHRcIjFcIlxyXG5cdCAqIEBwYXJhbSBwcm9wX25hbWVcdFx0bmFtZSBvZiBwcm9wZXJ0eVxyXG5cdCAqIEBwYXJhbSBwcm9wX3ZhbHVlXHR2YWx1ZSBvZiBwcm9wZXJ0eVxyXG5cdCAqIEByZXR1cm5zIHsqfVx0XHRcdGJvb2tpbmcgb2JqZWN0XHJcblx0ICovXHJcblx0b2JqLmJvb2tpbmdfX3NldF9wYXJhbV92YWx1ZSA9IGZ1bmN0aW9uICggcmVzb3VyY2VfaWQsIHByb3BfbmFtZSwgcHJvcF92YWx1ZSApIHtcclxuXHJcblx0XHRpZiAoICEgb2JqLmJvb2tpbmdzX2luX2NhbGVuZGFyX19pc19kZWZpbmVkKCByZXNvdXJjZV9pZCApICl7XHJcblx0XHRcdHBfYm9va2luZ3NbICdjYWxlbmRhcl8nICsgcmVzb3VyY2VfaWQgXSA9IHt9O1xyXG5cdFx0XHRwX2Jvb2tpbmdzWyAnY2FsZW5kYXJfJyArIHJlc291cmNlX2lkIF1bICdpZCcgXSA9IHJlc291cmNlX2lkO1xyXG5cdFx0fVxyXG5cclxuXHRcdHBfYm9va2luZ3NbICdjYWxlbmRhcl8nICsgcmVzb3VyY2VfaWQgXVsgcHJvcF9uYW1lIF0gPSBwcm9wX3ZhbHVlO1xyXG5cclxuXHRcdHJldHVybiBwX2Jvb2tpbmdzWyAnY2FsZW5kYXJfJyArIHJlc291cmNlX2lkIF07XHJcblx0fTtcclxuXHJcblx0LyoqXHJcblx0ICogIEdldCBib29raW5nIHByb3BlcnR5IHZhbHVlICAgXHQ6OiAgIG1peGVkIHwgbnVsbFxyXG5cdCAqXHJcblx0ICogQHBhcmFtIHtzdHJpbmd8aW50fSAgcmVzb3VyY2VfaWRcdFx0JzEnXHJcblx0ICogQHBhcmFtIHtzdHJpbmd9IHByb3BfbmFtZVx0XHRcdCdzZWxlY3Rpb25fbW9kZSdcclxuXHQgKiBAcmV0dXJucyB7KnxudWxsfVx0XHRcdFx0XHRtaXhlZCB8IG51bGxcclxuXHQgKi9cclxuXHRvYmouYm9va2luZ19fZ2V0X3BhcmFtX3ZhbHVlID0gZnVuY3Rpb24oIHJlc291cmNlX2lkLCBwcm9wX25hbWUgKXtcclxuXHJcblx0XHRpZiAoXHJcblx0XHRcdCAgICggb2JqLmJvb2tpbmdzX2luX2NhbGVuZGFyX19pc19kZWZpbmVkKCByZXNvdXJjZV9pZCApIClcclxuXHRcdFx0JiYgKCAndW5kZWZpbmVkJyAhPT0gdHlwZW9mICggcF9ib29raW5nc1sgJ2NhbGVuZGFyXycgKyByZXNvdXJjZV9pZCBdWyBwcm9wX25hbWUgXSApIClcclxuXHRcdCl7XHJcblx0XHRcdHJldHVybiAgcF9ib29raW5nc1sgJ2NhbGVuZGFyXycgKyByZXNvdXJjZV9pZCBdWyBwcm9wX25hbWUgXTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gbnVsbDtcdFx0Ly8gSWYgc29tZSBwcm9wZXJ0eSBub3QgZGVmaW5lZCwgdGhlbiBudWxsO1xyXG5cdH07XHJcblxyXG5cclxuXHJcblxyXG5cdC8qKlxyXG5cdCAqIFNldCBib29raW5ncyBmb3IgYWxsICBjYWxlbmRhcnNcclxuXHQgKlxyXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBjYWxlbmRhcnNfb2JqXHRcdE9iamVjdCB7IGNhbGVuZGFyXzE6IHsgaWQ6IDEsIGRhdGVzOiBPYmplY3QgeyBcIjIwMjMtMDctMjJcIjoge+KApn0sIFwiMjAyMy0wNy0yM1wiOiB74oCmfSwgXCIyMDIzLTA3LTI0XCI6IHvigKZ9LCDigKYgfSB9XHJcblx0ICogXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0IGNhbGVuZGFyXzM6IHt9LCAuLi4gfVxyXG5cdCAqL1xyXG5cdG9iai5ib29raW5nc19pbl9jYWxlbmRhcnNfX3NldF9hbGwgPSBmdW5jdGlvbiAoIGNhbGVuZGFyc19vYmogKSB7XHJcblx0XHRwX2Jvb2tpbmdzID0gY2FsZW5kYXJzX29iajtcclxuXHR9O1xyXG5cclxuXHQvKipcclxuXHQgKiBHZXQgYm9va2luZ3MgaW4gYWxsIGNhbGVuZGFyc1xyXG5cdCAqXHJcblx0ICogQHJldHVybnMge29iamVjdHx7fX1cclxuXHQgKi9cclxuXHRvYmouYm9va2luZ3NfaW5fY2FsZW5kYXJzX19nZXRfYWxsID0gZnVuY3Rpb24gKCkge1xyXG5cdFx0cmV0dXJuIHBfYm9va2luZ3M7XHJcblx0fTtcclxuXHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHJcblxyXG5cclxuXHQvLyBTZWFzb25zIFx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdHZhciBwX3NlYXNvbnMgPSBvYmouc2Vhc29uc19vYmogPSBvYmouc2Vhc29uc19vYmogfHwge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGNhbGVuZGFyXzE6IE9iamVjdCB7XHJcbiBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vXHRcdFx0XHRcdFx0ICAgaWQ6ICAgICAxXHJcbiBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vXHRcdFx0XHRcdFx0ICwgZGF0ZXM6ICBPYmplY3QgeyBcIjIwMjMtMDctMjFcIjoge+KApn0sIFwiMjAyMy0wNy0yMlwiOiB74oCmfSwgXCIyMDIzLTA3LTIzXCI6IHvigKZ9LCDigKZcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyB9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH07XHJcblxyXG5cdC8qKlxyXG5cdCAqIEFkZCBzZWFzb24gbmFtZXMgZm9yIGRhdGVzIGluIGNhbGVuZGFyIG9iamVjdCAgIDo6ICAgIHsgXCIyMDIzLTA3LTIxXCI6IFsgJ3dwYmNfc2Vhc29uX3NlcHRlbWJlcl8yMDIzJywgJ3dwYmNfc2Vhc29uX3NlcHRlbWJlcl8yMDI0JyBdLCBcIjIwMjMtMDctMjJcIjogWy4uLl0sIC4uLiB9XHJcblx0ICpcclxuXHQgKlxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfGludH0gcmVzb3VyY2VfaWRcdFx0XHRcdCAgJzInXHJcblx0ICogQHBhcmFtIHtvYmplY3R9IGRhdGVzX29ialx0XHRcdFx0XHQgIHsgXCIyMDIzLTA3LTIxXCI6IHvigKZ9LCBcIjIwMjMtMDctMjJcIjoge+KApn0sIFwiMjAyMy0wNy0yM1wiOiB74oCmfSwg4oCmIH1cclxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGlzX2NvbXBsZXRlX292ZXJ3cml0ZVx0XHQgIGlmIGZhbHNlLCAgdGhlbiAgb25seSAgYWRkICBkYXRlcyBmcm9tIFx0ZGF0ZXNfb2JqXHJcblx0ICogQHJldHVybnMgeyp9XHJcblx0ICpcclxuXHQgKiBFeGFtcGxlczpcclxuXHQgKiAgIFx0XHRcdF93cGJjLnNlYXNvbnNfX3NldCggcmVzb3VyY2VfaWQsIHsgXCIyMDIzLTA3LTIxXCI6IFsgJ3dwYmNfc2Vhc29uX3NlcHRlbWJlcl8yMDIzJywgJ3dwYmNfc2Vhc29uX3NlcHRlbWJlcl8yMDI0JyBdLCBcIjIwMjMtMDctMjJcIjogWy4uLl0sIC4uLiB9ICApO1xyXG5cdCAqL1xyXG5cdG9iai5zZWFzb25zX19zZXQgPSBmdW5jdGlvbiggcmVzb3VyY2VfaWQsIGRhdGVzX29iaiAsIGlzX2NvbXBsZXRlX292ZXJ3cml0ZSA9IGZhbHNlICl7XHJcblxyXG5cdFx0aWYgKCAndW5kZWZpbmVkJyA9PT0gdHlwZW9mIChwX3NlYXNvbnNbICdjYWxlbmRhcl8nICsgcmVzb3VyY2VfaWQgXSkgKXtcclxuXHRcdFx0cF9zZWFzb25zWyAnY2FsZW5kYXJfJyArIHJlc291cmNlX2lkIF0gPSB7fTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIGlzX2NvbXBsZXRlX292ZXJ3cml0ZSApe1xyXG5cclxuXHRcdFx0Ly8gQ29tcGxldGUgb3ZlcndyaXRlIGFsbCAgc2Vhc29uIGRhdGVzXHJcblx0XHRcdHBfc2Vhc29uc1sgJ2NhbGVuZGFyXycgKyByZXNvdXJjZV9pZCBdID0gZGF0ZXNfb2JqO1xyXG5cclxuXHRcdH0gZWxzZSB7XHJcblxyXG5cdFx0XHQvLyBBZGQgb25seSAgbmV3IG9yIG92ZXJ3cml0ZSBleGlzdCBib29raW5nIGRhdGVzIGZyb20gIHBhcmFtZXRlci4gQm9va2luZyBkYXRlcyBub3QgZnJvbSAgcGFyYW1ldGVyICB3aWxsICBiZSB3aXRob3V0IGNobmFuZ2VzXHJcblx0XHRcdGZvciAoIHZhciBwcm9wX25hbWUgaW4gZGF0ZXNfb2JqICl7XHJcblxyXG5cdFx0XHRcdGlmICggJ3VuZGVmaW5lZCcgPT09IHR5cGVvZiAocF9zZWFzb25zWyAnY2FsZW5kYXJfJyArIHJlc291cmNlX2lkIF1bIHByb3BfbmFtZSBdKSApe1xyXG5cdFx0XHRcdFx0cF9zZWFzb25zWyAnY2FsZW5kYXJfJyArIHJlc291cmNlX2lkIF1bIHByb3BfbmFtZSBdID0gW107XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGZvciAoIHZhciBzZWFzb25fbmFtZV9rZXkgaW4gZGF0ZXNfb2JqWyBwcm9wX25hbWUgXSApe1xyXG5cdFx0XHRcdFx0cF9zZWFzb25zWyAnY2FsZW5kYXJfJyArIHJlc291cmNlX2lkIF1bIHByb3BfbmFtZSBdLnB1c2goIGRhdGVzX29ialsgcHJvcF9uYW1lIF1bIHNlYXNvbl9uYW1lX2tleSBdICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHBfc2Vhc29uc1sgJ2NhbGVuZGFyXycgKyByZXNvdXJjZV9pZCBdO1xyXG5cdH07XHJcblxyXG5cclxuXHQvKipcclxuXHQgKiAgR2V0IGJvb2tpbmdzIGRhdGEgZm9yIHNwZWNpZmljIGRhdGUgaW4gY2FsZW5kYXIgICA6OiAgIFtdIHwgWyAnd3BiY19zZWFzb25fc2VwdGVtYmVyXzIwMjMnLCAnd3BiY19zZWFzb25fc2VwdGVtYmVyXzIwMjQnIF1cclxuXHQgKlxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfGludH0gcmVzb3VyY2VfaWRcdFx0XHQnMSdcclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc3FsX2NsYXNzX2RheVx0XHRcdCcyMDIzLTA3LTIxJ1xyXG5cdCAqIEByZXR1cm5zIHtvYmplY3R8Ym9vbGVhbn1cdFx0XHRcdFtdICB8ICBbICd3cGJjX3NlYXNvbl9zZXB0ZW1iZXJfMjAyMycsICd3cGJjX3NlYXNvbl9zZXB0ZW1iZXJfMjAyNCcgXVxyXG5cdCAqL1xyXG5cdG9iai5zZWFzb25zX19nZXRfZm9yX2RhdGUgPSBmdW5jdGlvbiggcmVzb3VyY2VfaWQsIHNxbF9jbGFzc19kYXkgKXtcclxuXHJcblx0XHRpZiAoXHJcblx0XHRcdCAgICggJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiAoIHBfc2Vhc29uc1sgJ2NhbGVuZGFyXycgKyByZXNvdXJjZV9pZCBdICkgKVxyXG5cdFx0XHQmJiAoICd1bmRlZmluZWQnICE9PSB0eXBlb2YgKCBwX3NlYXNvbnNbICdjYWxlbmRhcl8nICsgcmVzb3VyY2VfaWQgXVsgc3FsX2NsYXNzX2RheSBdICkgKVxyXG5cdFx0KXtcclxuXHRcdFx0cmV0dXJuICBwX3NlYXNvbnNbICdjYWxlbmRhcl8nICsgcmVzb3VyY2VfaWQgXVsgc3FsX2NsYXNzX2RheSBdO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBbXTtcdFx0Ly8gSWYgbm90IGRlZmluZWQsIHRoZW4gW107XHJcblx0fTtcclxuXHJcblxyXG5cdC8vIE90aGVyIHBhcmFtZXRlcnMgXHRcdFx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0dmFyIHBfb3RoZXIgPSBvYmoub3RoZXJfb2JqID0gb2JqLm90aGVyX29iaiB8fCB7IH07XHJcblxyXG5cdG9iai5zZXRfb3RoZXJfcGFyYW0gPSBmdW5jdGlvbiAoIHBhcmFtX2tleSwgcGFyYW1fdmFsICkge1xyXG5cdFx0cF9vdGhlclsgcGFyYW1fa2V5IF0gPSBwYXJhbV92YWw7XHJcblx0fTtcclxuXHJcblx0b2JqLmdldF9vdGhlcl9wYXJhbSA9IGZ1bmN0aW9uICggcGFyYW1fa2V5ICkge1xyXG5cdFx0cmV0dXJuIHBfb3RoZXJbIHBhcmFtX2tleSBdO1xyXG5cdH07XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldCBhbGwgb3RoZXIgcGFyYW1zXHJcblx0ICpcclxuXHQgKiBAcmV0dXJucyB7b2JqZWN0fHt9fVxyXG5cdCAqL1xyXG5cdG9iai5nZXRfb3RoZXJfcGFyYW1fX2FsbCA9IGZ1bmN0aW9uICgpIHtcclxuXHRcdHJldHVybiBwX290aGVyO1xyXG5cdH07XHJcblxyXG5cdC8vIE1lc3NhZ2VzIFx0XHRcdCAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0dmFyIHBfbWVzc2FnZXMgPSBvYmoubWVzc2FnZXNfb2JqID0gb2JqLm1lc3NhZ2VzX29iaiB8fCB7IH07XHJcblxyXG5cdG9iai5zZXRfbWVzc2FnZSA9IGZ1bmN0aW9uICggcGFyYW1fa2V5LCBwYXJhbV92YWwgKSB7XHJcblx0XHRwX21lc3NhZ2VzWyBwYXJhbV9rZXkgXSA9IHBhcmFtX3ZhbDtcclxuXHR9O1xyXG5cclxuXHRvYmouZ2V0X21lc3NhZ2UgPSBmdW5jdGlvbiAoIHBhcmFtX2tleSApIHtcclxuXHRcdHJldHVybiBwX21lc3NhZ2VzWyBwYXJhbV9rZXkgXTtcclxuXHR9O1xyXG5cclxuXHQvKipcclxuXHQgKiBHZXQgYWxsIG90aGVyIHBhcmFtc1xyXG5cdCAqXHJcblx0ICogQHJldHVybnMge29iamVjdHx7fX1cclxuXHQgKi9cclxuXHRvYmouZ2V0X21lc3NhZ2VzX19hbGwgPSBmdW5jdGlvbiAoKSB7XHJcblx0XHRyZXR1cm4gcF9tZXNzYWdlcztcclxuXHR9O1xyXG5cclxuXHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHRyZXR1cm4gb2JqO1xyXG5cclxufSggX3dwYmMgfHwge30sIGpRdWVyeSApKTtcclxuIiwid2luZG93Ll9fV1BCQ19ERVYgPSB0cnVlO1xyXG5cclxuLyoqXHJcbiAqIEV4dGVuZCBfd3BiYyB3aXRoICBuZXcgbWV0aG9kc1xyXG4gKlxyXG4gKiBAdHlwZSB7Knx7fX1cclxuICogQHByaXZhdGVcclxuICovXHJcbl93cGJjID0gKGZ1bmN0aW9uIChvYmosICQpIHtcclxuXHJcblx0LyoqXHJcblx0ICogRGV2IGxvZ2dlciAobm8tb3AgdW5sZXNzIHdpbmRvdy5fX1dQQkNfREVWID0gdHJ1ZSlcclxuXHQgKlxyXG5cdCAqIEB0eXBlIHsqfHt3YXJuOiAoZnVuY3Rpb24oKiwgKiwgKik6IHZvaWQpLCBlcnJvcjogKGZ1bmN0aW9uKCosICosICopOiB2b2lkKSwgb25jZTogb2JqLmRldi5vbmNlLCB0cnk6ICgoZnVuY3Rpb24oKiwgKiwgKik6ICgqfHVuZGVmaW5lZCkpfCopfX1cclxuXHQgKi9cclxuXHRvYmouZGV2ID0gb2JqLmRldiB8fCAoKCkgPT4ge1xyXG5cdFx0Y29uc3Qgc2VlbiAgICA9IG5ldyBTZXQoKTtcclxuXHRcdGNvbnN0IGVuYWJsZWQgPSAoKSA9PiAhIXdpbmRvdy5fX1dQQkNfREVWO1xyXG5cclxuXHRcdGZ1bmN0aW9uIG91dChsZXZlbCwgY29kZSwgbXNnLCBleHRyYSkge1xyXG5cdFx0XHRpZiAoICFlbmFibGVkKCkgKSByZXR1cm47XHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0KGNvbnNvbGVbbGV2ZWxdIHx8IGNvbnNvbGUud2FybikoIGBbV1BCQ11bJHtjb2RlfV0gJHttc2d9YCwgZXh0cmEgPz8gJycgKTtcclxuXHRcdFx0fSBjYXRjaCB7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRsb2cgIDogKGNvZGUsIG1zZywgZXh0cmEpID0+IG91dCgnbG9nJywgICBjb2RlLCBtc2csIGV4dHJhKSxcclxuXHRcdFx0ZGVidWc6IChjb2RlLCBtc2csIGV4dHJhKSA9PiBvdXQoJ2RlYnVnJywgY29kZSwgbXNnLCBleHRyYSksXHJcblx0XHRcdHdhcm4gOiAoY29kZSwgbXNnLCBleHRyYSkgPT4gb3V0KCAnd2FybicsIGNvZGUsIG1zZywgZXh0cmEgKSxcclxuXHRcdFx0ZXJyb3I6IChjb2RlLCBlcnJPck1zZywgZXh0cmEpID0+XHJcblx0XHRcdFx0b3V0KCAnZXJyb3InLCBjb2RlLFxyXG5cdFx0XHRcdFx0ZXJyT3JNc2cgaW5zdGFuY2VvZiBFcnJvciA/IGVyck9yTXNnLm1lc3NhZ2UgOiBTdHJpbmcoIGVyck9yTXNnICksXHJcblx0XHRcdFx0XHRlcnJPck1zZyBpbnN0YW5jZW9mIEVycm9yID8gZXJyT3JNc2cgOiBleHRyYSApLFxyXG5cdFx0XHRvbmNlIDogKGNvZGUsIG1zZywgZXh0cmEpID0+IHtcclxuXHRcdFx0XHRpZiAoICFlbmFibGVkKCkgKSByZXR1cm47XHJcblx0XHRcdFx0Y29uc3Qga2V5ID0gYCR7Y29kZX18JHttc2d9YDtcclxuXHRcdFx0XHRpZiAoIHNlZW4uaGFzKCBrZXkgKSApIHJldHVybjtcclxuXHRcdFx0XHRzZWVuLmFkZCgga2V5ICk7XHJcblx0XHRcdFx0b3V0KCAnZXJyb3InLCBjb2RlLCBtc2csIGV4dHJhICk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRyeSAgOiAoY29kZSwgZm4sIGV4dHJhKSA9PiB7XHJcblx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdHJldHVybiBmbigpO1xyXG5cdFx0XHRcdH0gY2F0Y2ggKCBlICkge1xyXG5cdFx0XHRcdFx0b3V0KCAnZXJyb3InLCBjb2RlLCBlLCBleHRyYSApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fTtcclxuXHR9KSgpO1xyXG5cclxuXHQvLyBPcHRpb25hbDogZ2xvYmFsIHRyYXBzIGluIGRldi5cclxuXHRpZiAoIHdpbmRvdy5fX1dQQkNfREVWICkge1xyXG5cdFx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoICdlcnJvcicsIChlKSA9PiB7XHJcblx0XHRcdHRyeSB7IF93cGJjPy5kZXY/LmVycm9yKCAnR0xPQkFMLUVSUk9SJywgZT8uZXJyb3IgfHwgZT8ubWVzc2FnZSwgZSApOyB9IGNhdGNoICggXyApIHt9XHJcblx0XHR9ICk7XHJcblx0XHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciggJ3VuaGFuZGxlZHJlamVjdGlvbicsIChlKSA9PiB7XHJcblx0XHRcdHRyeSB7IF93cGJjPy5kZXY/LmVycm9yKCAnR0xPQkFMLVJFSkVDVElPTicsIGU/LnJlYXNvbiApOyB9IGNhdGNoICggXyApIHt9XHJcblx0XHR9ICk7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gb2JqO1xyXG5cdH0oIF93cGJjIHx8IHt9LCBqUXVlcnkgKSk7XHJcbiIsIi8qKlxyXG4gKiBFeHRlbmQgX3dwYmMgd2l0aCAgbmV3IG1ldGhvZHMgICAgICAgIC8vIEZpeEluOiA5LjguNi4yLlxyXG4gKlxyXG4gKiBAdHlwZSB7Knx7fX1cclxuICogQHByaXZhdGVcclxuICovXHJcbiBfd3BiYyA9IChmdW5jdGlvbiAoIG9iaiwgJCkge1xyXG5cclxuXHQvLyBMb2FkIEJhbGFuY2VyIFx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0dmFyIHBfYmFsYW5jZXIgPSBvYmouYmFsYW5jZXJfb2JqID0gb2JqLmJhbGFuY2VyX29iaiB8fCB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J21heF90aHJlYWRzJzogMixcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnaW5fcHJvY2VzcycgOiBbXSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnd2FpdCcgICAgICAgOiBbXVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9O1xyXG5cclxuXHQgLyoqXHJcblx0ICAqIFNldCAgbWF4IHBhcmFsbGVsIHJlcXVlc3QgIHRvICBsb2FkXHJcblx0ICAqXHJcblx0ICAqIEBwYXJhbSBtYXhfdGhyZWFkc1xyXG5cdCAgKi9cclxuXHRvYmouYmFsYW5jZXJfX3NldF9tYXhfdGhyZWFkcyA9IGZ1bmN0aW9uICggbWF4X3RocmVhZHMgKXtcclxuXHJcblx0XHRwX2JhbGFuY2VyWyAnbWF4X3RocmVhZHMnIF0gPSBtYXhfdGhyZWFkcztcclxuXHR9O1xyXG5cclxuXHQvKipcclxuXHQgKiAgQ2hlY2sgaWYgYmFsYW5jZXIgZm9yIHNwZWNpZmljIGJvb2tpbmcgcmVzb3VyY2UgZGVmaW5lZCAgIDo6ICAgdHJ1ZSB8IGZhbHNlXHJcblx0ICpcclxuXHQgKiBAcGFyYW0ge3N0cmluZ3xpbnR9IHJlc291cmNlX2lkXHJcblx0ICogQHJldHVybnMge2Jvb2xlYW59XHJcblx0ICovXHJcblx0b2JqLmJhbGFuY2VyX19pc19kZWZpbmVkID0gZnVuY3Rpb24gKCByZXNvdXJjZV9pZCApIHtcclxuXHJcblx0XHRyZXR1cm4gKCd1bmRlZmluZWQnICE9PSB0eXBlb2YoIHBfYmFsYW5jZXJbICdiYWxhbmNlcl8nICsgcmVzb3VyY2VfaWQgXSApICk7XHJcblx0fTtcclxuXHJcblxyXG5cdC8qKlxyXG5cdCAqICBDcmVhdGUgYmFsYW5jZXIgaW5pdGlhbGl6aW5nXHJcblx0ICpcclxuXHQgKiBAcGFyYW0ge3N0cmluZ3xpbnR9IHJlc291cmNlX2lkXHJcblx0ICovXHJcblx0b2JqLmJhbGFuY2VyX19pbml0ID0gZnVuY3Rpb24gKCByZXNvdXJjZV9pZCwgZnVuY3Rpb25fbmFtZSAsIHBhcmFtcyA9e30pIHtcclxuXHJcblx0XHR2YXIgYmFsYW5jZV9vYmogPSB7fTtcclxuXHRcdGJhbGFuY2Vfb2JqWyAncmVzb3VyY2VfaWQnIF0gICA9IHJlc291cmNlX2lkO1xyXG5cdFx0YmFsYW5jZV9vYmpbICdwcmlvcml0eScgXSAgICAgID0gMTtcclxuXHRcdGJhbGFuY2Vfb2JqWyAnZnVuY3Rpb25fbmFtZScgXSA9IGZ1bmN0aW9uX25hbWU7XHJcblx0XHRiYWxhbmNlX29ialsgJ3BhcmFtcycgXSAgICAgICAgPSB3cGJjX2Nsb25lX29iaiggcGFyYW1zICk7XHJcblxyXG5cclxuXHRcdGlmICggb2JqLmJhbGFuY2VyX19pc19hbHJlYWR5X3J1biggcmVzb3VyY2VfaWQsIGZ1bmN0aW9uX25hbWUgKSApe1xyXG5cdFx0XHRyZXR1cm4gJ3J1bic7XHJcblx0XHR9XHJcblx0XHRpZiAoIG9iai5iYWxhbmNlcl9faXNfYWxyZWFkeV93YWl0KCByZXNvdXJjZV9pZCwgZnVuY3Rpb25fbmFtZSApICl7XHJcblx0XHRcdHJldHVybiAnd2FpdCc7XHJcblx0XHR9XHJcblxyXG5cclxuXHRcdGlmICggb2JqLmJhbGFuY2VyX19jYW5faV9ydW4oKSApe1xyXG5cdFx0XHRvYmouYmFsYW5jZXJfX2FkZF90b19fcnVuKCBiYWxhbmNlX29iaiApO1xyXG5cdFx0XHRyZXR1cm4gJ3J1bic7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRvYmouYmFsYW5jZXJfX2FkZF90b19fd2FpdCggYmFsYW5jZV9vYmogKTtcclxuXHRcdFx0cmV0dXJuICd3YWl0JztcclxuXHRcdH1cclxuXHR9O1xyXG5cclxuXHQgLyoqXHJcblx0ICAqIENhbiBJIFJ1biA/XHJcblx0ICAqIEByZXR1cm5zIHtib29sZWFufVxyXG5cdCAgKi9cclxuXHRvYmouYmFsYW5jZXJfX2Nhbl9pX3J1biA9IGZ1bmN0aW9uICgpe1xyXG5cdFx0cmV0dXJuICggcF9iYWxhbmNlclsgJ2luX3Byb2Nlc3MnIF0ubGVuZ3RoIDwgcF9iYWxhbmNlclsgJ21heF90aHJlYWRzJyBdICk7XHJcblx0fVxyXG5cclxuXHRcdCAvKipcclxuXHRcdCAgKiBBZGQgdG8gV0FJVFxyXG5cdFx0ICAqIEBwYXJhbSBiYWxhbmNlX29ialxyXG5cdFx0ICAqL1xyXG5cdFx0b2JqLmJhbGFuY2VyX19hZGRfdG9fX3dhaXQgPSBmdW5jdGlvbiAoIGJhbGFuY2Vfb2JqICkge1xyXG5cdFx0XHRwX2JhbGFuY2VyWyd3YWl0J10ucHVzaCggYmFsYW5jZV9vYmogKTtcclxuXHRcdH1cclxuXHJcblx0XHQgLyoqXHJcblx0XHQgICogUmVtb3ZlIGZyb20gV2FpdFxyXG5cdFx0ICAqXHJcblx0XHQgICogQHBhcmFtIHJlc291cmNlX2lkXHJcblx0XHQgICogQHBhcmFtIGZ1bmN0aW9uX25hbWVcclxuXHRcdCAgKiBAcmV0dXJucyB7Knxib29sZWFufVxyXG5cdFx0ICAqL1xyXG5cdFx0b2JqLmJhbGFuY2VyX19yZW1vdmVfZnJvbV9fd2FpdF9saXN0ID0gZnVuY3Rpb24gKCByZXNvdXJjZV9pZCwgZnVuY3Rpb25fbmFtZSApe1xyXG5cclxuXHRcdFx0dmFyIHJlbW92ZWRfZWwgPSBmYWxzZTtcclxuXHJcblx0XHRcdGlmICggcF9iYWxhbmNlclsgJ3dhaXQnIF0ubGVuZ3RoICl7XHRcdFx0XHRcdC8vIEZpeEluOiA5LjguMTAuMS5cclxuXHRcdFx0XHRmb3IgKCB2YXIgaSBpbiBwX2JhbGFuY2VyWyAnd2FpdCcgXSApe1xyXG5cdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHQocmVzb3VyY2VfaWQgPT09IHBfYmFsYW5jZXJbICd3YWl0JyBdWyBpIF1bICdyZXNvdXJjZV9pZCcgXSlcclxuXHRcdFx0XHRcdFx0JiYgKGZ1bmN0aW9uX25hbWUgPT09IHBfYmFsYW5jZXJbICd3YWl0JyBdWyBpIF1bICdmdW5jdGlvbl9uYW1lJyBdKVxyXG5cdFx0XHRcdFx0KXtcclxuXHRcdFx0XHRcdFx0cmVtb3ZlZF9lbCA9IHBfYmFsYW5jZXJbICd3YWl0JyBdLnNwbGljZSggaSwgMSApO1xyXG5cdFx0XHRcdFx0XHRyZW1vdmVkX2VsID0gcmVtb3ZlZF9lbC5wb3AoKTtcclxuXHRcdFx0XHRcdFx0cF9iYWxhbmNlclsgJ3dhaXQnIF0gPSBwX2JhbGFuY2VyWyAnd2FpdCcgXS5maWx0ZXIoIGZ1bmN0aW9uICggdiApe1xyXG5cdFx0XHRcdFx0XHRcdHJldHVybiB2O1xyXG5cdFx0XHRcdFx0XHR9ICk7XHRcdFx0XHRcdC8vIFJlaW5kZXggYXJyYXlcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHJlbW92ZWRfZWw7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiByZW1vdmVkX2VsO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0KiBJcyBhbHJlYWR5IFdBSVRcclxuXHRcdCpcclxuXHRcdCogQHBhcmFtIHJlc291cmNlX2lkXHJcblx0XHQqIEBwYXJhbSBmdW5jdGlvbl9uYW1lXHJcblx0XHQqIEByZXR1cm5zIHtib29sZWFufVxyXG5cdFx0Ki9cclxuXHRcdG9iai5iYWxhbmNlcl9faXNfYWxyZWFkeV93YWl0ID0gZnVuY3Rpb24gKCByZXNvdXJjZV9pZCwgZnVuY3Rpb25fbmFtZSApe1xyXG5cclxuXHRcdFx0aWYgKCBwX2JhbGFuY2VyWyAnd2FpdCcgXS5sZW5ndGggKXtcdFx0XHRcdC8vIEZpeEluOiA5LjguMTAuMS5cclxuXHRcdFx0XHRmb3IgKCB2YXIgaSBpbiBwX2JhbGFuY2VyWyAnd2FpdCcgXSApe1xyXG5cdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHQocmVzb3VyY2VfaWQgPT09IHBfYmFsYW5jZXJbICd3YWl0JyBdWyBpIF1bICdyZXNvdXJjZV9pZCcgXSlcclxuXHRcdFx0XHRcdFx0JiYgKGZ1bmN0aW9uX25hbWUgPT09IHBfYmFsYW5jZXJbICd3YWl0JyBdWyBpIF1bICdmdW5jdGlvbl9uYW1lJyBdKVxyXG5cdFx0XHRcdFx0KXtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0IC8qKlxyXG5cdFx0ICAqIEFkZCB0byBSVU5cclxuXHRcdCAgKiBAcGFyYW0gYmFsYW5jZV9vYmpcclxuXHRcdCAgKi9cclxuXHRcdG9iai5iYWxhbmNlcl9fYWRkX3RvX19ydW4gPSBmdW5jdGlvbiAoIGJhbGFuY2Vfb2JqICkge1xyXG5cdFx0XHRwX2JhbGFuY2VyWydpbl9wcm9jZXNzJ10ucHVzaCggYmFsYW5jZV9vYmogKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCogUmVtb3ZlIGZyb20gUlVOIGxpc3RcclxuXHRcdCpcclxuXHRcdCogQHBhcmFtIHJlc291cmNlX2lkXHJcblx0XHQqIEBwYXJhbSBmdW5jdGlvbl9uYW1lXHJcblx0XHQqIEByZXR1cm5zIHsqfGJvb2xlYW59XHJcblx0XHQqL1xyXG5cdFx0b2JqLmJhbGFuY2VyX19yZW1vdmVfZnJvbV9fcnVuX2xpc3QgPSBmdW5jdGlvbiAoIHJlc291cmNlX2lkLCBmdW5jdGlvbl9uYW1lICl7XHJcblxyXG5cdFx0XHQgdmFyIHJlbW92ZWRfZWwgPSBmYWxzZTtcclxuXHJcblx0XHRcdCBpZiAoIHBfYmFsYW5jZXJbICdpbl9wcm9jZXNzJyBdLmxlbmd0aCApe1x0XHRcdFx0Ly8gRml4SW46IDkuOC4xMC4xLlxyXG5cdFx0XHRcdCBmb3IgKCB2YXIgaSBpbiBwX2JhbGFuY2VyWyAnaW5fcHJvY2VzcycgXSApe1xyXG5cdFx0XHRcdFx0IGlmIChcclxuXHRcdFx0XHRcdFx0IChyZXNvdXJjZV9pZCA9PT0gcF9iYWxhbmNlclsgJ2luX3Byb2Nlc3MnIF1bIGkgXVsgJ3Jlc291cmNlX2lkJyBdKVxyXG5cdFx0XHRcdFx0XHQgJiYgKGZ1bmN0aW9uX25hbWUgPT09IHBfYmFsYW5jZXJbICdpbl9wcm9jZXNzJyBdWyBpIF1bICdmdW5jdGlvbl9uYW1lJyBdKVxyXG5cdFx0XHRcdFx0ICl7XHJcblx0XHRcdFx0XHRcdCByZW1vdmVkX2VsID0gcF9iYWxhbmNlclsgJ2luX3Byb2Nlc3MnIF0uc3BsaWNlKCBpLCAxICk7XHJcblx0XHRcdFx0XHRcdCByZW1vdmVkX2VsID0gcmVtb3ZlZF9lbC5wb3AoKTtcclxuXHRcdFx0XHRcdFx0IHBfYmFsYW5jZXJbICdpbl9wcm9jZXNzJyBdID0gcF9iYWxhbmNlclsgJ2luX3Byb2Nlc3MnIF0uZmlsdGVyKCBmdW5jdGlvbiAoIHYgKXtcclxuXHRcdFx0XHRcdFx0XHQgcmV0dXJuIHY7XHJcblx0XHRcdFx0XHRcdCB9ICk7XHRcdC8vIFJlaW5kZXggYXJyYXlcclxuXHRcdFx0XHRcdFx0IHJldHVybiByZW1vdmVkX2VsO1xyXG5cdFx0XHRcdFx0IH1cclxuXHRcdFx0XHQgfVxyXG5cdFx0XHQgfVxyXG5cdFx0XHQgcmV0dXJuIHJlbW92ZWRfZWw7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQqIElzIGFscmVhZHkgUlVOXHJcblx0XHQqXHJcblx0XHQqIEBwYXJhbSByZXNvdXJjZV9pZFxyXG5cdFx0KiBAcGFyYW0gZnVuY3Rpb25fbmFtZVxyXG5cdFx0KiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuXHRcdCovXHJcblx0XHRvYmouYmFsYW5jZXJfX2lzX2FscmVhZHlfcnVuID0gZnVuY3Rpb24gKCByZXNvdXJjZV9pZCwgZnVuY3Rpb25fbmFtZSApe1xyXG5cclxuXHRcdFx0aWYgKCBwX2JhbGFuY2VyWyAnaW5fcHJvY2VzcycgXS5sZW5ndGggKXtcdFx0XHRcdFx0Ly8gRml4SW46IDkuOC4xMC4xLlxyXG5cdFx0XHRcdGZvciAoIHZhciBpIGluIHBfYmFsYW5jZXJbICdpbl9wcm9jZXNzJyBdICl7XHJcblx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdChyZXNvdXJjZV9pZCA9PT0gcF9iYWxhbmNlclsgJ2luX3Byb2Nlc3MnIF1bIGkgXVsgJ3Jlc291cmNlX2lkJyBdKVxyXG5cdFx0XHRcdFx0XHQmJiAoZnVuY3Rpb25fbmFtZSA9PT0gcF9iYWxhbmNlclsgJ2luX3Byb2Nlc3MnIF1bIGkgXVsgJ2Z1bmN0aW9uX25hbWUnIF0pXHJcblx0XHRcdFx0XHQpe1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHJcblxyXG5cdG9iai5iYWxhbmNlcl9fcnVuX25leHQgPSBmdW5jdGlvbiAoKXtcclxuXHJcblx0XHQvLyBHZXQgMXN0IGZyb20gIFdhaXQgbGlzdFxyXG5cdFx0dmFyIHJlbW92ZWRfZWwgPSBmYWxzZTtcclxuXHRcdGlmICggcF9iYWxhbmNlclsgJ3dhaXQnIF0ubGVuZ3RoICl7XHRcdFx0XHRcdC8vIEZpeEluOiA5LjguMTAuMS5cclxuXHRcdFx0Zm9yICggdmFyIGkgaW4gcF9iYWxhbmNlclsgJ3dhaXQnIF0gKXtcclxuXHRcdFx0XHRyZW1vdmVkX2VsID0gb2JqLmJhbGFuY2VyX19yZW1vdmVfZnJvbV9fd2FpdF9saXN0KCBwX2JhbGFuY2VyWyAnd2FpdCcgXVsgaSBdWyAncmVzb3VyY2VfaWQnIF0sIHBfYmFsYW5jZXJbICd3YWl0JyBdWyBpIF1bICdmdW5jdGlvbl9uYW1lJyBdICk7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIGZhbHNlICE9PSByZW1vdmVkX2VsICl7XHJcblxyXG5cdFx0XHQvLyBSdW5cclxuXHRcdFx0b2JqLmJhbGFuY2VyX19ydW4oIHJlbW92ZWRfZWwgKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdCAvKipcclxuXHQgICogUnVuXHJcblx0ICAqIEBwYXJhbSBiYWxhbmNlX29ialxyXG5cdCAgKi9cclxuXHRvYmouYmFsYW5jZXJfX3J1biA9IGZ1bmN0aW9uICggYmFsYW5jZV9vYmogKXtcclxuXHJcblx0XHRzd2l0Y2ggKCBiYWxhbmNlX29ialsgJ2Z1bmN0aW9uX25hbWUnIF0gKXtcclxuXHJcblx0XHRcdGNhc2UgJ3dwYmNfY2FsZW5kYXJfX2xvYWRfZGF0YV9fYWp4JzpcclxuXHJcblx0XHRcdFx0Ly8gQWRkIHRvIHJ1biBsaXN0XHJcblx0XHRcdFx0b2JqLmJhbGFuY2VyX19hZGRfdG9fX3J1biggYmFsYW5jZV9vYmogKTtcclxuXHJcblx0XHRcdFx0d3BiY19jYWxlbmRhcl9fbG9hZF9kYXRhX19hangoIGJhbGFuY2Vfb2JqWyAncGFyYW1zJyBdIClcclxuXHRcdFx0XHRicmVhaztcclxuXHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gb2JqO1xyXG5cclxufSggX3dwYmMgfHwge30sIGpRdWVyeSApKTtcclxuXHJcblxyXG4gXHQvKipcclxuIFx0ICogLS0gSGVscCBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdCAqL1xyXG5cclxuXHRmdW5jdGlvbiB3cGJjX2JhbGFuY2VyX19pc193YWl0KCBwYXJhbXMsIGZ1bmN0aW9uX25hbWUgKXtcclxuLy9jb25zb2xlLmxvZygnOjp3cGJjX2JhbGFuY2VyX19pc193YWl0JyxwYXJhbXMgLCBmdW5jdGlvbl9uYW1lICk7XHJcblx0XHRpZiAoICd1bmRlZmluZWQnICE9PSB0eXBlb2YgKHBhcmFtc1sgJ3Jlc291cmNlX2lkJyBdKSApe1xyXG5cclxuXHRcdFx0dmFyIGJhbGFuY2VyX3N0YXR1cyA9IF93cGJjLmJhbGFuY2VyX19pbml0KCBwYXJhbXNbICdyZXNvdXJjZV9pZCcgXSwgZnVuY3Rpb25fbmFtZSwgcGFyYW1zICk7XHJcblxyXG5cdFx0XHRyZXR1cm4gKCAnd2FpdCcgPT09IGJhbGFuY2VyX3N0YXR1cyApO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcblxyXG5cclxuXHRmdW5jdGlvbiB3cGJjX2JhbGFuY2VyX19jb21wbGV0ZWQoIHJlc291cmNlX2lkICwgZnVuY3Rpb25fbmFtZSApe1xyXG4vL2NvbnNvbGUubG9nKCc6OndwYmNfYmFsYW5jZXJfX2NvbXBsZXRlZCcscmVzb3VyY2VfaWQgLCBmdW5jdGlvbl9uYW1lICk7XHJcblx0XHRfd3BiYy5iYWxhbmNlcl9fcmVtb3ZlX2Zyb21fX3J1bl9saXN0KCByZXNvdXJjZV9pZCwgZnVuY3Rpb25fbmFtZSApO1xyXG5cdFx0X3dwYmMuYmFsYW5jZXJfX3J1bl9uZXh0KCk7XHJcblx0fSIsIi8qKlxyXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuICpcdGluY2x1ZGVzL19fanMvY2FsL3dwYmNfY2FsLmpzXHJcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBPcmRlciBvciBjaGlsZCBib29raW5nIHJlc291cmNlcyBzYXZlZCBoZXJlOiAgXHRfd3BiYy5ib29raW5nX19nZXRfcGFyYW1fdmFsdWUoIHJlc291cmNlX2lkLFxyXG4gKiAncmVzb3VyY2VzX2lkX2Fycl9faW5fZGF0ZXMnIClcdFx0WzIsMTAsMTIsMTFdXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEhvdyB0byBjaGVjayAgYm9va2VkIHRpbWVzIG9uICBzcGVjaWZpYyBkYXRlOiA/XHJcbiAqXHJcblx0XHRcdF93cGJjLmJvb2tpbmdzX2luX2NhbGVuZGFyX19nZXRfZm9yX2RhdGUoMiwnMjAyMy0wOC0yMScpO1xyXG5cclxuXHRcdFx0Y29uc29sZS5sb2coXHJcblx0XHRcdFx0XHRcdF93cGJjLmJvb2tpbmdzX2luX2NhbGVuZGFyX19nZXRfZm9yX2RhdGUoMiwnMjAyMy0wOC0yMScpWzJdLmJvb2tlZF90aW1lX3Nsb3RzLm1lcmdlZF9zZWNvbmRzLFxyXG5cdFx0XHRcdFx0XHRfd3BiYy5ib29raW5nc19pbl9jYWxlbmRhcl9fZ2V0X2Zvcl9kYXRlKDIsJzIwMjMtMDgtMjEnKVsxMF0uYm9va2VkX3RpbWVfc2xvdHMubWVyZ2VkX3NlY29uZHMsXHJcblx0XHRcdFx0XHRcdF93cGJjLmJvb2tpbmdzX2luX2NhbGVuZGFyX19nZXRfZm9yX2RhdGUoMiwnMjAyMy0wOC0yMScpWzExXS5ib29rZWRfdGltZV9zbG90cy5tZXJnZWRfc2Vjb25kcyxcclxuXHRcdFx0XHRcdFx0X3dwYmMuYm9va2luZ3NfaW5fY2FsZW5kYXJfX2dldF9mb3JfZGF0ZSgyLCcyMDIzLTA4LTIxJylbMTJdLmJvb2tlZF90aW1lX3Nsb3RzLm1lcmdlZF9zZWNvbmRzXHJcblx0XHRcdFx0XHQpO1xyXG4gKiAgT1JcclxuXHRcdFx0Y29uc29sZS5sb2coXHJcblx0XHRcdFx0XHRcdF93cGJjLmJvb2tpbmdzX2luX2NhbGVuZGFyX19nZXRfZm9yX2RhdGUoMiwnMjAyMy0wOC0yMScpWzJdLmJvb2tlZF90aW1lX3Nsb3RzLm1lcmdlZF9yZWFkYWJsZSxcclxuXHRcdFx0XHRcdFx0X3dwYmMuYm9va2luZ3NfaW5fY2FsZW5kYXJfX2dldF9mb3JfZGF0ZSgyLCcyMDIzLTA4LTIxJylbMTBdLmJvb2tlZF90aW1lX3Nsb3RzLm1lcmdlZF9yZWFkYWJsZSxcclxuXHRcdFx0XHRcdFx0X3dwYmMuYm9va2luZ3NfaW5fY2FsZW5kYXJfX2dldF9mb3JfZGF0ZSgyLCcyMDIzLTA4LTIxJylbMTFdLmJvb2tlZF90aW1lX3Nsb3RzLm1lcmdlZF9yZWFkYWJsZSxcclxuXHRcdFx0XHRcdFx0X3dwYmMuYm9va2luZ3NfaW5fY2FsZW5kYXJfX2dldF9mb3JfZGF0ZSgyLCcyMDIzLTA4LTIxJylbMTJdLmJvb2tlZF90aW1lX3Nsb3RzLm1lcmdlZF9yZWFkYWJsZVxyXG5cdFx0XHRcdFx0KTtcclxuICpcclxuICovXHJcblxyXG4vKipcclxuICogRGF5cyBzZWxlY3Rpb246XHJcbiAqIFx0XHRcdFx0XHR3cGJjX2NhbGVuZGFyX191bnNlbGVjdF9hbGxfZGF0ZXMoIHJlc291cmNlX2lkICk7XHJcbiAqXHJcbiAqXHRcdFx0XHRcdHZhciByZXNvdXJjZV9pZCA9IDE7XHJcbiAqIFx0RXhhbXBsZSAxOlx0XHR2YXIgbnVtX3NlbGVjdGVkX2RheXMgPSB3cGJjX2F1dG9fc2VsZWN0X2RhdGVzX2luX2NhbGVuZGFyKCByZXNvdXJjZV9pZCwgJzIwMjQtMDUtMTUnLFxyXG4gKiAnMjAyNC0wNS0yNScgKTsgRXhhbXBsZSAyOlx0XHR2YXIgbnVtX3NlbGVjdGVkX2RheXMgPSB3cGJjX2F1dG9fc2VsZWN0X2RhdGVzX2luX2NhbGVuZGFyKCByZXNvdXJjZV9pZCxcclxuICogWycyMDI0LTA1LTA5JywnMjAyNC0wNS0xOScsJzIwMjQtMDUtMjUnXSApO1xyXG4gKlxyXG4gKi9cclxuXHJcblxyXG4vKipcclxuICogQyBBIEwgRSBOIEQgQSBSICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICovXHJcblxyXG5cclxuLyoqXHJcbiAqICBTaG93IFdQQkMgQ2FsZW5kYXJcclxuICpcclxuICogQHBhcmFtIHJlc291cmNlX2lkXHRcdFx0LSByZXNvdXJjZSBJRFxyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICovXHJcbmZ1bmN0aW9uIHdwYmNfY2FsZW5kYXJfc2hvdyggcmVzb3VyY2VfaWQgKXtcclxuXHJcblx0Ly8gSWYgbm8gY2FsZW5kYXIgSFRNTCB0YWcsICB0aGVuICBleGl0XHJcblx0aWYgKCAwID09PSBqUXVlcnkoICcjY2FsZW5kYXJfYm9va2luZycgKyByZXNvdXJjZV9pZCApLmxlbmd0aCApeyByZXR1cm4gZmFsc2U7IH1cclxuXHJcblx0Ly8gSWYgdGhlIGNhbGVuZGFyIHdpdGggdGhlIHNhbWUgQm9va2luZyByZXNvdXJjZSBpcyBhY3RpdmF0ZWQgYWxyZWFkeSwgdGhlbiBleGl0LiBCdXQgaW4gRWxlbWVudG9yIHRoZSBjbGFzcyBjYW4gYmUgc3RhbGUsIHNvIHZlcmlmeSBpbnN0YW5jZS5cclxuXHRpZiAoIGpRdWVyeSggJyNjYWxlbmRhcl9ib29raW5nJyArIHJlc291cmNlX2lkICkuaGFzQ2xhc3MoICdoYXNEYXRlcGljaycgKSApIHtcclxuXHJcblx0XHR2YXIgZXhpc3RpbmdfaW5zdCA9IG51bGw7XHJcblxyXG5cdFx0dHJ5IHtcclxuXHRcdFx0ZXhpc3RpbmdfaW5zdCA9IGpRdWVyeS5kYXRlcGljay5fZ2V0SW5zdCggalF1ZXJ5KCAnI2NhbGVuZGFyX2Jvb2tpbmcnICsgcmVzb3VyY2VfaWQgKS5nZXQoIDAgKSApO1xyXG5cdFx0fSBjYXRjaCAoIGUgKSB7XHJcblx0XHRcdGV4aXN0aW5nX2luc3QgPSBudWxsO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICggZXhpc3RpbmdfaW5zdCApIHtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIFN0YWxlIG1hcmtlcjogcmVtb3ZlIGFuZCBjb250aW51ZSB3aXRoIGluaXQuXHJcblx0XHRqUXVlcnkoICcjY2FsZW5kYXJfYm9va2luZycgKyByZXNvdXJjZV9pZCApLnJlbW92ZUNsYXNzKCAnaGFzRGF0ZXBpY2snICk7XHJcblx0fVxyXG5cclxuXHR3cGJjX3JhbmdlX3NlbGVjdGlvbl9fcHJlcGFyZV9ndWlkYW5jZSggcmVzb3VyY2VfaWQgKTtcclxuXHJcblxyXG5cclxuXHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdC8vIERheXMgc2VsZWN0aW9uXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHR2YXIgbG9jYWxfX2lzX3JhbmdlX3NlbGVjdCA9IGZhbHNlO1xyXG5cdHZhciBsb2NhbF9fbXVsdGlfZGF5c19zZWxlY3RfbnVtICAgPSAzNjU7XHRcdFx0XHRcdC8vIG11bHRpcGxlIHwgZml4ZWRcclxuXHRpZiAoICdkeW5hbWljJyA9PT0gX3dwYmMuY2FsZW5kYXJfX2dldF9wYXJhbV92YWx1ZSggcmVzb3VyY2VfaWQsICdkYXlzX3NlbGVjdF9tb2RlJyApICl7XHJcblx0XHRsb2NhbF9faXNfcmFuZ2Vfc2VsZWN0ID0gdHJ1ZTtcclxuXHRcdGxvY2FsX19tdWx0aV9kYXlzX3NlbGVjdF9udW0gPSAwO1xyXG5cdH1cclxuXHRpZiAoICdzaW5nbGUnICA9PT0gX3dwYmMuY2FsZW5kYXJfX2dldF9wYXJhbV92YWx1ZSggcmVzb3VyY2VfaWQsICdkYXlzX3NlbGVjdF9tb2RlJyApICl7XHJcblx0XHRsb2NhbF9fbXVsdGlfZGF5c19zZWxlY3RfbnVtID0gMDtcclxuXHR9XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0Ly8gTWluIC0gTWF4IGRheXMgdG8gc2Nyb2xsL3Nob3dcclxuXHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdHZhciBsb2NhbF9fbWluX2RhdGUgPSAwO1xyXG4gXHRsb2NhbF9fbWluX2RhdGUgPSBuZXcgRGF0ZSggX3dwYmMuZ2V0X290aGVyX3BhcmFtKCAndG9kYXlfYXJyJyApWyAwIF0sIChwYXJzZUludCggX3dwYmMuZ2V0X290aGVyX3BhcmFtKCAndG9kYXlfYXJyJyApWyAxIF0gKSAtIDEpLCBfd3BiYy5nZXRfb3RoZXJfcGFyYW0oICd0b2RheV9hcnInIClbIDIgXSwgMCwgMCwgMCApO1x0XHRcdC8vIEZpeEluOiA5LjkuMC4xNy5cclxuLy9jb25zb2xlLmxvZyggbG9jYWxfX21pbl9kYXRlICk7XHJcblx0dmFyIGxvY2FsX19tYXhfZGF0ZSA9IF93cGJjLmNhbGVuZGFyX19nZXRfcGFyYW1fdmFsdWUoIHJlc291cmNlX2lkLCAnYm9va2luZ19tYXhfbW9udGhlc19pbl9jYWxlbmRhcicgKTtcclxuXHQvL2xvY2FsX19tYXhfZGF0ZSA9IG5ldyBEYXRlKDIwMjQsIDUsIDI4KTsgIEl0IGlzIGhlcmUgaXNzdWUgb2Ygbm90IHNlbGVjdGFibGUgZGF0ZXMsIGJ1dCBzb21lIGRhdGVzIHNob3dpbmcgaW4gY2FsZW5kYXIgYXMgYXZhaWxhYmxlLCBidXQgd2UgY2FuIG5vdCBzZWxlY3QgaXQuXHJcblxyXG5cdC8vLy8gRGVmaW5lIGxhc3QgZGF5IGluIGNhbGVuZGFyIChhcyBhIGxhc3QgZGF5IG9mIG1vbnRoIChhbmQgbm90IGRhdGUsIHdoaWNoIGlzIHJlbGF0ZWQgdG8gYWN0dWFsICdUb2RheScgZGF0ZSkuXHJcblx0Ly8vLyBFLmcuIGlmIHRvZGF5IGlzIDIwMjMtMDktMjUsIGFuZCB3ZSBzZXQgJ051bWJlciBvZiBtb250aHMgdG8gc2Nyb2xsJyBhcyA1IG1vbnRocywgdGhlbiBsYXN0IGRheSB3aWxsIGJlIDIwMjQtMDItMjkgYW5kIG5vdCB0aGUgMjAyNC0wMi0yNS5cclxuXHQvLyB2YXIgY2FsX2xhc3RfZGF5X2luX21vbnRoID0galF1ZXJ5LmRhdGVwaWNrLl9kZXRlcm1pbmVEYXRlKCBudWxsLCBsb2NhbF9fbWF4X2RhdGUsIG5ldyBEYXRlKCkgKTtcclxuXHQvLyBjYWxfbGFzdF9kYXlfaW5fbW9udGggPSBuZXcgRGF0ZSggY2FsX2xhc3RfZGF5X2luX21vbnRoLmdldEZ1bGxZZWFyKCksIGNhbF9sYXN0X2RheV9pbl9tb250aC5nZXRNb250aCgpICsgMSwgMCApO1xyXG5cdC8vIGxvY2FsX19tYXhfZGF0ZSA9IGNhbF9sYXN0X2RheV9pbl9tb250aDtcdFx0XHQvLyBGaXhJbjogMTAuMC4wLjI2LlxyXG5cclxuXHQvLyBHZXQgc3RhcnQgLyBlbmQgZGF0ZXMgZnJvbSAgdGhlIEJvb2tpbmcgQ2FsZW5kYXIgc2hvcnRjb2RlLiBFeGFtcGxlOiBbYm9va2luZyBjYWxlbmRhcl9kYXRlc19zdGFydD0nMjAyNi0wMS0wMScgY2FsZW5kYXJfZGF0ZXNfZW5kPScyMDI2LTEyLTMxJyAgcmVzb3VyY2VfaWQ9MV0gLy8gRml4SW46IDEwLjEzLjEuNC5cclxuXHRpZiAoIGZhbHNlICE9PSB3cGJjX2NhbGVuZGFyX19nZXRfZGF0ZXNfc3RhcnQoIHJlc291cmNlX2lkICkgKSB7XHJcblx0XHRsb2NhbF9fbWluX2RhdGUgPSB3cGJjX2NhbGVuZGFyX19nZXRfZGF0ZXNfc3RhcnQoIHJlc291cmNlX2lkICk7ICAvLyBFLmcuIC0gbG9jYWxfX21pbl9kYXRlID0gbmV3IERhdGUoIDIwMjUsIDAsIDEgKTtcclxuXHR9XHJcblx0aWYgKCBmYWxzZSAhPT0gd3BiY19jYWxlbmRhcl9fZ2V0X2RhdGVzX2VuZCggcmVzb3VyY2VfaWQgKSApIHtcclxuXHRcdGxvY2FsX19tYXhfZGF0ZSA9IHdwYmNfY2FsZW5kYXJfX2dldF9kYXRlc19lbmQoIHJlc291cmNlX2lkICk7ICAgIC8vIEUuZy4gLSBsb2NhbF9fbWF4X2RhdGUgPSBuZXcgRGF0ZSggMjAyNSwgMTEsIDMxICk7XHJcblx0fVxyXG5cclxuXHQvLyBJbiBjYXNlIHdlIGVkaXQgYm9va2luZyBpbiBwYXN0IG9yIGhhdmUgc3BlY2lmaWMgcGFyYW1ldGVyIGluIFVSTC5cclxuXHR2YXIgd3BiY19lZGl0X2Jvb2tpbmdfaGFzaCA9IF93cGJjLmdldF9vdGhlcl9wYXJhbSggJ3RoaXNfcGFnZV9ib29raW5nX2hhc2gnICk7XHJcblx0dmFyIHdwYmNfaXNfZWRpdF9ib29raW5nX2NvbnRleHQgPSAoICd1bmRlZmluZWQnICE9PSB0eXBlb2Ygd3BiY19lZGl0X2Jvb2tpbmdfaGFzaCApICYmICggJycgIT09IHdwYmNfZWRpdF9ib29raW5nX2hhc2ggKTtcclxuXHR2YXIgd3BiY19hbGxvd19wYXN0X2NvbnRleHQgPSBfd3BiYy5nZXRfb3RoZXJfcGFyYW0oICd0aGlzX3BhZ2VfYWxsb3dfcGFzdCcgKTtcclxuXHR2YXIgd3BiY19pc19hbGxvd19wYXN0X2NvbnRleHQgPSAoICcxJyA9PT0gU3RyaW5nKCB3cGJjX2FsbG93X3Bhc3RfY29udGV4dCApICkgfHwgKCAxID09PSB3cGJjX2FsbG93X3Bhc3RfY29udGV4dCApIHx8ICggdHJ1ZSA9PT0gd3BiY19hbGxvd19wYXN0X2NvbnRleHQgKTtcclxuXHR2YXIgd3BiY19hbGxvd19wYXN0X2RhdGVfYXJyID0gX3dwYmMuZ2V0X290aGVyX3BhcmFtKCAndGhpc19wYWdlX2FsbG93X3Bhc3RfYXJyJyApO1xyXG5cdHZhciB3cGJjX2lzX2FkZF9ib29raW5nX2FkbWluX3BhZ2UgPSAoIGxvY2F0aW9uLmhyZWYuaW5kZXhPZiggJ3BhZ2U9d3BiYycgKSAhPSAtMSApICYmICggbG9jYXRpb24uaHJlZi5pbmRleE9mKCAndGFiPWFkZC1ib29raW5nJyApICE9IC0xICk7XHJcblx0aWYgKCAgICggd3BiY19pc19hZGRfYm9va2luZ19hZG1pbl9wYWdlIHx8IHdwYmNfaXNfZWRpdF9ib29raW5nX2NvbnRleHQgfHwgd3BiY19pc19hbGxvd19wYXN0X2NvbnRleHQgKVxyXG5cdFx0JiYgKFxyXG5cdFx0XHQgIHdwYmNfaXNfZWRpdF9ib29raW5nX2NvbnRleHRcclxuXHRcdCAgIHx8IHdwYmNfaXNfYWxsb3dfcGFzdF9jb250ZXh0XHJcblx0XHQgICB8fCAoIGxvY2F0aW9uLmhyZWYuaW5kZXhPZignYm9va2luZ19oYXNoJykgIT0gLTEgKSAgICAgICAgICAgICAgICAgIC8vIENvbW1lbnQgdGhpcyBsaW5lIGZvciBhYmlsaXR5IHRvIGFkZCAgYm9va2luZyBpbiBwYXN0IGRheXMgYXQgIEJvb2tpbmcgPiBBZGQgYm9va2luZyBwYWdlLlxyXG5cdFx0ICAgfHwgKCBsb2NhdGlvbi5ocmVmLmluZGV4T2YoJ2FsbG93X3Bhc3QnKSAhPSAtMSApICAgICAgICAgICAgICAgIC8vIEZpeEluOiAxMC43LjEuMi5cclxuXHRcdClcclxuXHQpe1xyXG5cdFx0Ly8gbG9jYWxfX21pbl9kYXRlID0gbnVsbDtcclxuXHRcdC8vIEZpeEluOiAxMC4xNC4xLjQuXHJcblx0XHR2YXIgd3BiY19taW5fZGF0ZV9hcnIgPSAoIHdwYmNfaXNfYWxsb3dfcGFzdF9jb250ZXh0ICYmIHdwYmNfYWxsb3dfcGFzdF9kYXRlX2FyciAmJiAoIDUgPD0gd3BiY19hbGxvd19wYXN0X2RhdGVfYXJyLmxlbmd0aCApICkgPyB3cGJjX2FsbG93X3Bhc3RfZGF0ZV9hcnIgOiBfd3BiYy5nZXRfb3RoZXJfcGFyYW0oICd0aW1lX2xvY2FsX2FycicgKTtcclxuXHRcdGxvY2FsX19taW5fZGF0ZSAgPSBuZXcgRGF0ZSggd3BiY19taW5fZGF0ZV9hcnJbMF0sICggcGFyc2VJbnQoIHdwYmNfbWluX2RhdGVfYXJyWzFdICkgLSAxKSwgd3BiY19taW5fZGF0ZV9hcnJbMl0sIHdwYmNfbWluX2RhdGVfYXJyWzNdLCB3cGJjX21pbl9kYXRlX2Fycls0XSwgMCApO1xyXG5cdFx0bG9jYWxfX21heF9kYXRlID0gbnVsbDtcclxuXHR9XHJcblxyXG5cdHZhciBsb2NhbF9fc3RhcnRfd2Vla2RheSAgICA9IF93cGJjLmNhbGVuZGFyX19nZXRfcGFyYW1fdmFsdWUoIHJlc291cmNlX2lkLCAnYm9va2luZ19zdGFydF9kYXlfd2VlZWsnICk7XHJcblx0dmFyIGxvY2FsX19udW1iZXJfb2ZfbW9udGhzID0gcGFyc2VJbnQoIF93cGJjLmNhbGVuZGFyX19nZXRfcGFyYW1fdmFsdWUoIHJlc291cmNlX2lkLCAnY2FsZW5kYXJfbnVtYmVyX29mX21vbnRocycgKSApO1xyXG5cclxuXHRqUXVlcnkoICcjY2FsZW5kYXJfYm9va2luZycgKyByZXNvdXJjZV9pZCApLnRleHQoICcnICk7XHRcdFx0XHRcdC8vIFJlbW92ZSBhbGwgSFRNTCBpbiBjYWxlbmRhciB0YWdcclxuXHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdC8vIFNob3cgY2FsZW5kYXJcclxuXHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdGpRdWVyeSgnI2NhbGVuZGFyX2Jvb2tpbmcnKyByZXNvdXJjZV9pZCkuZGF0ZXBpY2soXHJcblx0XHRcdHtcblx0XHRcdFx0YmVmb3JlU2VsZWN0RGF5OiBmdW5jdGlvbiAoIGpzX2RhdGUsIGluc3QgKSB7XG5cdFx0XHRcdFx0cmV0dXJuICdmdW5jdGlvbicgPT09IHR5cGVvZiB3cGJjX19jYWxlbmRhcl9fYmVmb3JlX3NlbGVjdF9kYXlzX19ic1xuXHRcdFx0XHRcdFx0PyB3cGJjX19jYWxlbmRhcl9fYmVmb3JlX3NlbGVjdF9kYXlzX19icygganNfZGF0ZSwgcmVzb3VyY2VfaWQsIGluc3QgKSA6IHRydWU7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJlZm9yZVNob3dEYXk6IGZ1bmN0aW9uICgganNfZGF0ZSApe1xuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHdwYmNfX2NhbGVuZGFyX19hcHBseV9jc3NfdG9fZGF5cygganNfZGF0ZSwgeydyZXNvdXJjZV9pZCc6IHJlc291cmNlX2lkfSwgdGhpcyApO1xyXG5cdFx0XHRcdFx0XHRcdCAgfSxcclxuXHRcdFx0XHRvblNlbGVjdDogZnVuY3Rpb24gKCBzdHJpbmdfZGF0ZXMsIGpzX2RhdGVzX2FyciApeyAgLyoqXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgKlx0c3RyaW5nX2RhdGVzICAgPSAgICcyMy4wOC4yMDIzIC0gMjYuMDguMjAyMydcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAqICAgfCAgICAnMjMuMDguMjAyMyAtIDIzLjA4LjIwMjMnICAgIHxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAqICcxOS4wOS4yMDIzLCAyNC4wOC4yMDIzLCAzMC4wOS4yMDIzJ1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICoganNfZGF0ZXNfYXJyICAgPSAgIHJhbmdlOiBbIERhdGUgKEF1ZyAyMyAyMDIzKSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAqIERhdGUgKEF1ZyAyNSAyMDIzKV0gICAgIHwgICAgIG11bHRpcGxlOiBbXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgKiBEYXRlKE9jdCAyNCAyMDIzKSwgRGF0ZShPY3QgMjAgMjAyMyksIERhdGUoT2N0XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgKiAxNiAyMDIzKSBdXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHdwYmNfX2NhbGVuZGFyX19vbl9zZWxlY3RfZGF5cyggc3RyaW5nX2RhdGVzLCB7J3Jlc291cmNlX2lkJzogcmVzb3VyY2VfaWR9LCB0aGlzICk7XHJcblx0XHRcdFx0XHRcdFx0ICB9LFxyXG5cdFx0XHRcdG9uSG92ZXI6IGZ1bmN0aW9uICggc3RyaW5nX2RhdGUsIGpzX2RhdGUgKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHdwYmNfX2NhbGVuZGFyX19vbl9ob3Zlcl9kYXlzKCBzdHJpbmdfZGF0ZSwganNfZGF0ZSwgeydyZXNvdXJjZV9pZCc6IHJlc291cmNlX2lkfSwgdGhpcyApO1xyXG5cdFx0XHRcdFx0XHRcdCAgfSxcclxuXHRcdFx0XHRvbkNoYW5nZU1vbnRoWWVhcjogZnVuY3Rpb24gKCB5ZWFyLCByZWFsX21vbnRoLCBqc19kYXRlX18xc3RfZGF5X2luX21vbnRoICl7IH0sXHJcblx0XHRcdFx0c2hvd09uICAgICAgICA6ICdib3RoJyxcclxuXHRcdFx0XHRudW1iZXJPZk1vbnRoczogbG9jYWxfX251bWJlcl9vZl9tb250aHMsXHJcblx0XHRcdFx0c3RlcE1vbnRocyAgICA6IDEsXHJcblx0XHRcdFx0Ly8gcHJldlRleHQgICAgICA6ICcmbGFxdW87JyxcclxuXHRcdFx0XHQvLyBuZXh0VGV4dCAgICAgIDogJyZyYXF1bzsnLFxyXG5cdFx0XHRcdHByZXZUZXh0ICAgICAgOiAnJmxzYXF1bzsnLFxyXG5cdFx0XHRcdG5leHRUZXh0ICAgICAgOiAnJnJzYXF1bzsnLFxyXG5cdFx0XHRcdGRhdGVGb3JtYXQgICAgOiAnZGQubW0ueXknLFxyXG5cdFx0XHRcdGNoYW5nZU1vbnRoICAgOiBmYWxzZSxcclxuXHRcdFx0XHRjaGFuZ2VZZWFyICAgIDogZmFsc2UsXHJcblx0XHRcdFx0bWluRGF0ZSAgICAgICA6IGxvY2FsX19taW5fZGF0ZSxcclxuXHRcdFx0XHRtYXhEYXRlICAgICAgIDogbG9jYWxfX21heF9kYXRlLCBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gJzFZJyxcclxuXHRcdFx0XHQvLyBtaW5EYXRlOiBuZXcgRGF0ZSgyMDIwLCAyLCAxKSwgbWF4RGF0ZTogbmV3IERhdGUoMjAyMCwgOSwgMzEpLCAgICAgICAgICAgICBcdC8vIEFiaWxpdHkgdG8gc2V0IGFueSAgc3RhcnQgYW5kIGVuZCBkYXRlIGluIGNhbGVuZGFyXHJcblx0XHRcdFx0c2hvd1N0YXR1cyAgICAgIDogZmFsc2UsXHJcblx0XHRcdFx0bXVsdGlTZXBhcmF0b3IgIDogJywgJyxcclxuXHRcdFx0XHRjbG9zZUF0VG9wICAgICAgOiBmYWxzZSxcclxuXHRcdFx0XHRmaXJzdERheSAgICAgICAgOiBsb2NhbF9fc3RhcnRfd2Vla2RheSxcclxuXHRcdFx0XHRnb3RvQ3VycmVudCAgICAgOiBmYWxzZSxcclxuXHRcdFx0XHRoaWRlSWZOb1ByZXZOZXh0OiB0cnVlLFxyXG5cdFx0XHRcdG11bHRpU2VsZWN0ICAgICA6IGxvY2FsX19tdWx0aV9kYXlzX3NlbGVjdF9udW0sXHJcblx0XHRcdFx0cmFuZ2VTZWxlY3QgICAgIDogbG9jYWxfX2lzX3JhbmdlX3NlbGVjdCxcclxuXHRcdFx0XHQvLyBzaG93V2Vla3M6IHRydWUsXHJcblx0XHRcdFx0dXNlVGhlbWVSb2xsZXI6IGZhbHNlXHJcblx0XHRcdH1cclxuXHQpO1xyXG5cclxuXHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0Ly8gQ2xlYXIgdG9kYXkgZGF0ZSBoaWdobGlnaHRpbmdcclxuXHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdHNldFRpbWVvdXQoIGZ1bmN0aW9uICgpeyAgd3BiY19jYWxlbmRhcnNfX2NsZWFyX2RheXNfaGlnaGxpZ2h0aW5nKCByZXNvdXJjZV9pZCApOyAgfSwgNTAwICk7ICAgICAgICAgICAgICAgICAgICBcdC8vIEZpeEluOiA3LjEuMi44LlxyXG5cclxuXHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdC8vIFNjcm9sbCBjYWxlbmRhciB0byAgc3BlY2lmaWMgbW9udGhcclxuXHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdHZhciBzdGFydF9ia19tb250aCA9IF93cGJjLmNhbGVuZGFyX19nZXRfcGFyYW1fdmFsdWUoIHJlc291cmNlX2lkLCAnY2FsZW5kYXJfc2Nyb2xsX3RvJyApO1xyXG5cdGlmICggZmFsc2UgIT09IHN0YXJ0X2JrX21vbnRoICl7XHJcblx0XHR3cGJjX2NhbGVuZGFyX19zY3JvbGxfdG8oIHJlc291cmNlX2lkLCBzdGFydF9ia19tb250aFsgMCBdLCBzdGFydF9ia19tb250aFsgMSBdICk7XHJcblx0fVxyXG5cdH1cclxuXHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldCBib29raW5nIHN0YXR1c2VzIGFzIGFycmF5IGZyb20gdGhlIHN0cnVjdHVyZWQgc3VtbWFyeSBmaWVsZCwgd2l0aCBmYWxsYmFjayB0byB0aGUgbGVnYWN5IHN0cmluZyBmaWVsZC5cclxuXHQgKlxyXG5cdCAqIEBwYXJhbSBkYXRlX2Jvb2tpbmdzX29ialxyXG5cdCAqIEByZXR1cm5zIHtbXX1cclxuXHQgKi9cclxuXHRmdW5jdGlvbiB3cGJjX2dldF9ib29raW5nX3N0YXR1c2VzX19hc19hcnIoIGRhdGVfYm9va2luZ3Nfb2JqICl7XHJcblxyXG5cdFx0aWYgKFxyXG5cdFx0XHQgICAoICEgZGF0ZV9ib29raW5nc19vYmogKVxyXG5cdFx0XHR8fCAoICd1bmRlZmluZWQnID09PSB0eXBlb2YgKGRhdGVfYm9va2luZ3Nfb2JqWyAnc3VtbWFyeScgXSkgKVxyXG5cdFx0KXtcclxuXHRcdFx0cmV0dXJuIFtdO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICggQXJyYXkuaXNBcnJheSggZGF0ZV9ib29raW5nc19vYmpbICdzdW1tYXJ5JyBdWyAnc3RhdHVzX2Zvcl9ib29raW5nc19hcnInIF0gKSApe1xyXG5cdFx0XHRyZXR1cm4gZGF0ZV9ib29raW5nc19vYmpbICdzdW1tYXJ5JyBdWyAnc3RhdHVzX2Zvcl9ib29raW5nc19hcnInIF0uZmlsdGVyKCBmdW5jdGlvbiAoIGJvb2tpbmdfc3RhdHVzICl7XHJcblx0XHRcdFx0cmV0dXJuICcnICE9PSBib29raW5nX3N0YXR1cztcclxuXHRcdFx0fSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICggISBkYXRlX2Jvb2tpbmdzX29ialsgJ3N1bW1hcnknIF1bICdzdGF0dXNfZm9yX2Jvb2tpbmdzJyBdICl7XHJcblx0XHRcdHJldHVybiBbXTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZGF0ZV9ib29raW5nc19vYmpbICdzdW1tYXJ5JyBdWyAnc3RhdHVzX2Zvcl9ib29raW5ncycgXS50b1N0cmluZygpLnRyaW0oKS5zcGxpdCggL1xccysvICkuZmlsdGVyKCBmdW5jdGlvbiAoIGJvb2tpbmdfc3RhdHVzICl7XHJcblx0XHRcdHJldHVybiAnJyAhPT0gYm9va2luZ19zdGF0dXM7XHJcblx0XHR9ICk7XHJcblx0fVxyXG5cclxuXHJcblx0LyoqXHJcblx0ICogQ2hlY2sgZXhhY3QgYm9va2luZyBzdGF0dXMgaW4gc3RhdHVzZXMgYXJyYXkuXHJcblx0ICpcclxuXHQgKiBAcGFyYW0ge1tdfSBib29raW5nX3N0YXR1c2VzX2FyclxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBib29raW5nX3N0YXR1c1xyXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIHdwYmNfYm9va2luZ19zdGF0dXNlc19faGFzKCBib29raW5nX3N0YXR1c2VzX2FyciwgYm9va2luZ19zdGF0dXMgKXtcclxuXHRcdHJldHVybiBib29raW5nX3N0YXR1c2VzX2Fyci5pbmRleE9mKCBib29raW5nX3N0YXR1cyApID4gLTE7XHJcblx0fVxyXG5cclxuXHJcblx0LyoqXHJcblx0ICogQ2hlY2sgYm9va2luZyBzdGF0dXMgcGFydCwgZS5nLiBcInBlbmRpbmdcIiBpbiBcImFwcHJvdmVkX3BlbmRpbmdcIi5cclxuXHQgKlxyXG5cdCAqIEBwYXJhbSB7W119IGJvb2tpbmdfc3RhdHVzZXNfYXJyXHJcblx0ICogQHBhcmFtIHtzdHJpbmd9IGJvb2tpbmdfc3RhdHVzX3BhcnRcclxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuXHQgKi9cclxuXHRmdW5jdGlvbiB3cGJjX2Jvb2tpbmdfc3RhdHVzZXNfX2hhc19wYXJ0KCBib29raW5nX3N0YXR1c2VzX2FyciwgYm9va2luZ19zdGF0dXNfcGFydCApe1xyXG5cclxuXHRcdGZvciAoIHZhciBpID0gMDsgaSA8IGJvb2tpbmdfc3RhdHVzZXNfYXJyLmxlbmd0aDsgaSsrICl7XHJcblx0XHRcdGlmICggYm9va2luZ19zdGF0dXNlc19hcnJbIGkgXS5zcGxpdCggJ18nICkuaW5kZXhPZiggYm9va2luZ19zdGF0dXNfcGFydCApID4gLTEgKXtcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XG5cblxuXHQvKipcblx0ICogQXBwbHkgb3B0aW9uYWwsIG9uZS13YXkgZGF0ZSBjb25zdHJhaW50cyB0byBhIG5hdGl2ZSBhdmFpbGFiaWxpdHkgcmVzdWx0LlxuXHQgKlxuXHQgKiBMaXN0ZW5lcnMgcmVjZWl2ZSBvbmx5IGEgbmV3IGNvbnN0cmFpbnQgb2JqZWN0LiBObyBib29raW5nLCBhdmFpbGFiaWxpdHksXG5cdCAqIHNlYXNvbiwgb3IgY2FsZW5kYXIgcGFyYW1ldGVyIG9iamVjdHMgYXJlIGV4cG9zZWQuIENvcmUgYXZhaWxhYmlsaXR5IHN0YXlzXG5cdCAqIGF1dGhvcml0YXRpdmUgYmVjYXVzZSB0aGUgcmV0dXJuZWQgc3RhdGUgY2FuIG9ubHkgY2hhbmdlIGZyb20gc2VsZWN0YWJsZSB0b1xuXHQgKiBibG9ja2VkOyBhIGxpc3RlbmVyIGNhbm5vdCByZW9wZW4gYSBuYXRpdmVseSB1bmF2YWlsYWJsZSBkYXRlLlxuXHQgKlxuXHQgKiBFdmVudDogd3BiY19jYWxlbmRhcl9fYXBwbHlfZGF0ZV9jb25zdHJhaW50c1xuXHQgKlxuXHQgKiBDb25zdHJhaW50IG9iamVjdDpcblx0ICoge1xuXHQgKiAgICAgcmVzb3VyY2VfaWQ6IHJlc291cmNlX2lkLFxuXHQgKiAgICAgc3FsX2RhdGU6IHNxbF9kYXRlLFxuXHQgKiAgICAgaXNfYmxvY2tlZDogZmFsc2UsXG5cdCAqICAgICBjc3NfY2xhc3NlczogW11cblx0ICogfVxuXHQgKlxuXHQgKiBMaXN0ZW5lcnMgbWF5IHNldCBpc19ibG9ja2VkIHRvIHRoZSBib29sZWFuIHRydWUgYW5kIGFwcGVuZCBpbmRpdmlkdWFsLFxuXHQgKiB2YWxpZCBDU1MgY2xhc3MgbmFtZXMgdG8gY3NzX2NsYXNzZXMuIENvcmUtb3duZWQgYXZhaWxhYmlsaXR5IGNsYXNzZXMgYXJlXG5cdCAqIGlnbm9yZWQgd2hlbiBzdXBwbGllZCBieSBsaXN0ZW5lcnMuXG5cdCAqXG5cdCAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gcmVzb3VyY2VfaWQgICAgICAgICAgIEJvb2tpbmcgcmVzb3VyY2UgSUQuXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgc3FsX2RhdGUgICAgICAgICAgICAgIENhbGVuZGFyIGRhdGUgaW4gWVlZWS1NTS1ERCBmb3JtYXQuXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgaXNfbmF0aXZlbHlfc2VsZWN0YWJsZSBXaGV0aGVyIGNvcmUgbWFya2VkIHRoZSBkYXRlIHNlbGVjdGFibGUuXG5cdCAqIEBwYXJhbSB7c3RyaW5nW119ICAgICAgbmF0aXZlX2Nzc19jbGFzc2VzICAgIENvcmUtZ2VuZXJhdGVkIENTUyBjbGFzc2VzLlxuXHQgKiBAcmV0dXJucyB7e2lzX3NlbGVjdGFibGU6IGJvb2xlYW4sIGNzc19jbGFzc2VzOiBzdHJpbmdbXX19IENvbnN0cmFpbmVkIHJlc3VsdC5cblx0ICovXG5cdGZ1bmN0aW9uIHdwYmNfY2FsZW5kYXJfX2V2YWx1YXRlX2RhdGVfY29uc3RyYWludHMoIHJlc291cmNlX2lkLCBzcWxfZGF0ZSwgaXNfbmF0aXZlbHlfc2VsZWN0YWJsZSwgbmF0aXZlX2Nzc19jbGFzc2VzICkge1xuXG5cdFx0dmFyIGRhdGVfY29uc3RyYWludCA9IHtcblx0XHRcdCdyZXNvdXJjZV9pZCc6IHJlc291cmNlX2lkLFxuXHRcdFx0J3NxbF9kYXRlJzogc3FsX2RhdGUsXG5cdFx0XHQnaXNfYmxvY2tlZCc6IGZhbHNlLFxuXHRcdFx0J2Nzc19jbGFzc2VzJzogW11cblx0XHR9O1xuXHRcdHZhciByZXN1bHRfY3NzX2NsYXNzZXMgPSBBcnJheS5pc0FycmF5KCBuYXRpdmVfY3NzX2NsYXNzZXMgKSA/IG5hdGl2ZV9jc3NfY2xhc3Nlcy5zbGljZSggMCApIDogW107XG5cdFx0dmFyIGNvbnN0cmFpbnRfY2xhc3NfaW5kZXg7XG5cdFx0dmFyIGNvbnN0cmFpbnRfY3NzX2NsYXNzO1xuXG5cdFx0alF1ZXJ5KCAnYm9keScgKS50cmlnZ2VyKCAnd3BiY19jYWxlbmRhcl9fYXBwbHlfZGF0ZV9jb25zdHJhaW50cycsIFsgZGF0ZV9jb25zdHJhaW50IF0gKTtcblxuXHRcdGlmICggdHJ1ZSA9PT0gZGF0ZV9jb25zdHJhaW50LmlzX2Jsb2NrZWQgKSB7XG5cdFx0XHRmb3IgKCBjb25zdHJhaW50X2NsYXNzX2luZGV4ID0gcmVzdWx0X2Nzc19jbGFzc2VzLmxlbmd0aCAtIDE7IGNvbnN0cmFpbnRfY2xhc3NfaW5kZXggPj0gMDsgY29uc3RyYWludF9jbGFzc19pbmRleC0tICkge1xuXHRcdFx0XHRpZiAoICdkYXRlX2F2YWlsYWJsZScgPT09IHJlc3VsdF9jc3NfY2xhc3Nlc1sgY29uc3RyYWludF9jbGFzc19pbmRleCBdICkge1xuXHRcdFx0XHRcdHJlc3VsdF9jc3NfY2xhc3Nlcy5zcGxpY2UoIGNvbnN0cmFpbnRfY2xhc3NfaW5kZXgsIDEgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIC0xID09PSByZXN1bHRfY3NzX2NsYXNzZXMuaW5kZXhPZiggJ2RhdGVfdXNlcl91bmF2YWlsYWJsZScgKSApIHtcblx0XHRcdFx0cmVzdWx0X2Nzc19jbGFzc2VzLnB1c2goICdkYXRlX3VzZXJfdW5hdmFpbGFibGUnICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCBBcnJheS5pc0FycmF5KCBkYXRlX2NvbnN0cmFpbnQuY3NzX2NsYXNzZXMgKSApIHtcblx0XHRcdGZvciAoIGNvbnN0cmFpbnRfY2xhc3NfaW5kZXggPSAwOyBjb25zdHJhaW50X2NsYXNzX2luZGV4IDwgZGF0ZV9jb25zdHJhaW50LmNzc19jbGFzc2VzLmxlbmd0aDsgY29uc3RyYWludF9jbGFzc19pbmRleCsrICkge1xuXHRcdFx0XHRpZiAoICdzdHJpbmcnICE9PSB0eXBlb2YgZGF0ZV9jb25zdHJhaW50LmNzc19jbGFzc2VzWyBjb25zdHJhaW50X2NsYXNzX2luZGV4IF0gKSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdHJhaW50X2Nzc19jbGFzcyA9IGRhdGVfY29uc3RyYWludC5jc3NfY2xhc3Nlc1sgY29uc3RyYWludF9jbGFzc19pbmRleCBdLnRyaW0oKTtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdCAgICcnID09PSBjb25zdHJhaW50X2Nzc19jbGFzc1xuXHRcdFx0XHRcdHx8ICdkYXRlX2F2YWlsYWJsZScgPT09IGNvbnN0cmFpbnRfY3NzX2NsYXNzXG5cdFx0XHRcdFx0fHwgJ2RhdGVfdXNlcl91bmF2YWlsYWJsZScgPT09IGNvbnN0cmFpbnRfY3NzX2NsYXNzXG5cdFx0XHRcdFx0fHwgISAvXi0/W19hLXpBLVpdK1tfYS16QS1aMC05LV0qJC8udGVzdCggY29uc3RyYWludF9jc3NfY2xhc3MgKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICggLTEgPT09IHJlc3VsdF9jc3NfY2xhc3Nlcy5pbmRleE9mKCBjb25zdHJhaW50X2Nzc19jbGFzcyApICkge1xuXHRcdFx0XHRcdHJlc3VsdF9jc3NfY2xhc3Nlcy5wdXNoKCBjb25zdHJhaW50X2Nzc19jbGFzcyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdCdpc19zZWxlY3RhYmxlJzogQm9vbGVhbiggaXNfbmF0aXZlbHlfc2VsZWN0YWJsZSApICYmIHRydWUgIT09IGRhdGVfY29uc3RyYWludC5pc19ibG9ja2VkLFxuXHRcdFx0J2Nzc19jbGFzc2VzJzogcmVzdWx0X2Nzc19jbGFzc2VzXG5cdFx0fTtcblx0fVxuXG5cblx0LyoqXG5cdCAqIEFwcGx5IENTUyB0byBjYWxlbmRhciBkYXRlIGNlbGxzXG5cdCAqXHJcblx0ICogQHBhcmFtIGRhdGVcdFx0XHRcdFx0XHRcdFx0XHRcdC0gIEphdmFTY3JpcHQgRGF0ZSBPYmo6ICBcdFx0TW9uIERlYyAxMSAyMDIzIDAwOjAwOjAwXHJcblx0ICogICAgIEdNVCswMjAwIChFYXN0ZXJuIEV1cm9wZWFuIFN0YW5kYXJkIFRpbWUpXHJcblx0ICogQHBhcmFtIGNhbGVuZGFyX3BhcmFtc19hcnJcdFx0XHRcdFx0XHQtICBDYWxlbmRhciBTZXR0aW5ncyBPYmplY3Q6ICBcdHtcclxuXHQgKlx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICBcdFx0XHRcdFx0XHRcInJlc291cmNlX2lkXCI6IDRcclxuXHQgKlx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHQgKiBAcGFyYW0gZGF0ZXBpY2tfdGhpc1x0XHRcdFx0XHRcdFx0XHQtIHRoaXMgb2YgZGF0ZXBpY2sgT2JqXHJcblx0ICogQHJldHVybnMgeygqfHN0cmluZylbXXwoYm9vbGVhbnxzdHJpbmcpW119XHRcdC0gWyB7dHJ1ZSAtYXZhaWxhYmxlIHwgZmFsc2UgLSB1bmF2YWlsYWJsZX0sICdDU1MgY2xhc3NlcyBmb3JcclxuXHQgKiAgICAgY2FsZW5kYXIgZGF5IGNlbGwnIF1cclxuXHQgKi9cclxuXHRmdW5jdGlvbiB3cGJjX19jYWxlbmRhcl9fYXBwbHlfY3NzX3RvX2RheXMoIGRhdGUsIGNhbGVuZGFyX3BhcmFtc19hcnIsIGRhdGVwaWNrX3RoaXMgKXtcclxuXHJcblx0XHR2YXIgdG9kYXlfZGF0ZSA9IG5ldyBEYXRlKCBfd3BiYy5nZXRfb3RoZXJfcGFyYW0oICd0b2RheV9hcnInIClbIDAgXSwgKHBhcnNlSW50KCBfd3BiYy5nZXRfb3RoZXJfcGFyYW0oICd0b2RheV9hcnInIClbIDEgXSApIC0gMSksIF93cGJjLmdldF9vdGhlcl9wYXJhbSggJ3RvZGF5X2FycicgKVsgMiBdLCAwLCAwLCAwICk7XHRcdFx0XHRcdFx0XHRcdC8vIFRvZGF5IEpTX0RhdGVfT2JqLlxyXG5cdFx0dmFyIGNsYXNzX2RheSAgICAgPSB3cGJjX19nZXRfX3RkX2NsYXNzX2RhdGUoIGRhdGUgKTtcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyAnMS05LTIwMjMnXHJcblx0XHR2YXIgc3FsX2NsYXNzX2RheSA9IHdwYmNfX2dldF9fc3FsX2NsYXNzX2RhdGUoIGRhdGUgKTtcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyAnMjAyMy0wMS0wOSdcclxuXHRcdHZhciByZXNvdXJjZV9pZCA9ICggJ3VuZGVmaW5lZCcgIT09IHR5cGVvZihjYWxlbmRhcl9wYXJhbXNfYXJyWyAncmVzb3VyY2VfaWQnIF0pICkgPyBjYWxlbmRhcl9wYXJhbXNfYXJyWyAncmVzb3VyY2VfaWQnIF0gOiAnMSc7IFx0XHQvLyAnMSdcclxuXHJcblx0XHQvLyBHZXQgU2VsZWN0ZWQgZGF0ZXMgaW4gY2FsZW5kYXJcclxuXHRcdHZhciBzZWxlY3RlZF9kYXRlc19zcWwgPSB3cGJjX2dldF9fc2VsZWN0ZWRfZGF0ZXNfc3FsX19hc19hcnIoIHJlc291cmNlX2lkICk7XHJcblxyXG5cdFx0Ly8gR2V0IERhdGEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHRcdHZhciBkYXRlX2Jvb2tpbmdzX29iaiA9IF93cGJjLmJvb2tpbmdzX2luX2NhbGVuZGFyX19nZXRfZm9yX2RhdGUoIHJlc291cmNlX2lkLCBzcWxfY2xhc3NfZGF5ICk7XHJcblxyXG5cclxuXHRcdC8vIEFycmF5IHdpdGggQ1NTIGNsYXNzZXMgZm9yIGRhdGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0XHR2YXIgY3NzX2NsYXNzZXNfX2Zvcl9kYXRlID0gW107XHJcblx0XHRjc3NfY2xhc3Nlc19fZm9yX2RhdGUucHVzaCggJ3NxbF9kYXRlXycgICAgICsgc3FsX2NsYXNzX2RheSApO1x0XHRcdFx0Ly8gICdzcWxfZGF0ZV8yMDIzLTA3LTIxJ1xyXG5cdFx0Y3NzX2NsYXNzZXNfX2Zvcl9kYXRlLnB1c2goICdjYWw0ZGF0ZS0nICAgICArIGNsYXNzX2RheSApO1x0XHRcdFx0XHQvLyAgJ2NhbDRkYXRlLTctMjEtMjAyMydcclxuXHRcdGNzc19jbGFzc2VzX19mb3JfZGF0ZS5wdXNoKCAnd3BiY193ZWVrZGF5XycgKyBkYXRlLmdldERheSgpICk7XHRcdFx0XHQvLyAgJ3dwYmNfd2Vla2RheV80J1xyXG5cclxuXHRcdC8vIERlZmluZSBTZWxlY3RlZCBDaGVjayBJbi9PdXQgZGF0ZXMgaW4gVEQgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0XHRpZiAoXHJcblx0XHRcdFx0KCBzZWxlY3RlZF9kYXRlc19zcWwubGVuZ3RoICApXHJcblx0XHRcdC8vJiYgICggc2VsZWN0ZWRfZGF0ZXNfc3FsWyAwIF0gIT09IHNlbGVjdGVkX2RhdGVzX3NxbFsgKHNlbGVjdGVkX2RhdGVzX3NxbC5sZW5ndGggLSAxKSBdIClcclxuXHRcdCl7XHJcblx0XHRcdGlmICggc3FsX2NsYXNzX2RheSA9PT0gc2VsZWN0ZWRfZGF0ZXNfc3FsWyAwIF0gKXtcclxuXHRcdFx0XHRjc3NfY2xhc3Nlc19fZm9yX2RhdGUucHVzaCggJ3NlbGVjdGVkX2NoZWNrX2luJyApO1xyXG5cdFx0XHRcdGNzc19jbGFzc2VzX19mb3JfZGF0ZS5wdXNoKCAnc2VsZWN0ZWRfY2hlY2tfaW5fb3V0JyApO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICggICggc2VsZWN0ZWRfZGF0ZXNfc3FsLmxlbmd0aCA+IDEgKSAmJiAoIHNxbF9jbGFzc19kYXkgPT09IHNlbGVjdGVkX2RhdGVzX3NxbFsgKHNlbGVjdGVkX2RhdGVzX3NxbC5sZW5ndGggLSAxKSBdICkgKSB7XHJcblx0XHRcdFx0Y3NzX2NsYXNzZXNfX2Zvcl9kYXRlLnB1c2goICdzZWxlY3RlZF9jaGVja19vdXQnICk7XHJcblx0XHRcdFx0Y3NzX2NsYXNzZXNfX2Zvcl9kYXRlLnB1c2goICdzZWxlY3RlZF9jaGVja19pbl9vdXQnICk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblxyXG5cdFx0dmFyIGlzX2RheV9zZWxlY3RhYmxlICAgICA9IGZhbHNlO1xuXHRcdHZhciBkYXRlX2NvbnN0cmFpbnRfcmVzdWx0O1xuXHJcblx0XHQvLyBJZiBzb21ldGhpbmcgbm90IGRlZmluZWQsICB0aGVuICB0aGlzIGRhdGUgY2xvc2VkIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAvLyBGaXhJbjogMTAuMTIuNC42LlxyXG5cdFx0aWYgKCAoZmFsc2UgPT09IGRhdGVfYm9va2luZ3Nfb2JqKSB8fCAoJ3VuZGVmaW5lZCcgPT09IHR5cGVvZiAoZGF0ZV9ib29raW5nc19vYmpbcmVzb3VyY2VfaWRdKSkgKSB7XG5cblx0XHRcdGNzc19jbGFzc2VzX19mb3JfZGF0ZS5wdXNoKCAnZGF0ZV91c2VyX3VuYXZhaWxhYmxlJyApO1xuXHRcdFx0ZGF0ZV9jb25zdHJhaW50X3Jlc3VsdCA9IHdwYmNfY2FsZW5kYXJfX2V2YWx1YXRlX2RhdGVfY29uc3RyYWludHMoIHJlc291cmNlX2lkLCBzcWxfY2xhc3NfZGF5LCBpc19kYXlfc2VsZWN0YWJsZSwgY3NzX2NsYXNzZXNfX2Zvcl9kYXRlICk7XG5cblx0XHRcdHJldHVybiBbIGRhdGVfY29uc3RyYWludF9yZXN1bHQuaXNfc2VsZWN0YWJsZSwgZGF0ZV9jb25zdHJhaW50X3Jlc3VsdC5jc3NfY2xhc3Nlcy5qb2luKCAnICcgKSBdO1xuXHRcdH1cclxuXHJcblxyXG5cdFx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHRcdC8vICAgZGF0ZV9ib29raW5nc19vYmogIC0gRGVmaW5lZC4gICAgICAgICAgICBEYXRlcyBjYW4gYmUgc2VsZWN0YWJsZS5cclxuXHRcdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0XHR2YXIgYm9va2luZ19zdGF0dXNlc19hcnIgPSB3cGJjX2dldF9ib29raW5nX3N0YXR1c2VzX19hc19hcnIoIGRhdGVfYm9va2luZ3Nfb2JqICk7XHJcblxyXG5cdFx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHRcdC8vIEFkZCBzZWFzb24gbmFtZXMgdG8gdGhlIGRheSBDU1MgY2xhc3NlcyAtLSBpdCBpcyByZXF1aXJlZCBmb3IgY29ycmVjdCAgd29yayAgb2YgY29uZGl0aW9uYWwgZmllbGRzIC0tLS0tLS0tLS0tLS0tXHJcblx0XHR2YXIgc2Vhc29uX25hbWVzX2FyciA9IF93cGJjLnNlYXNvbnNfX2dldF9mb3JfZGF0ZSggcmVzb3VyY2VfaWQsIHNxbF9jbGFzc19kYXkgKTtcclxuXHJcblx0XHRmb3IgKCB2YXIgc2Vhc29uX2tleSBpbiBzZWFzb25fbmFtZXNfYXJyICl7XHJcblxyXG5cdFx0XHRjc3NfY2xhc3Nlc19fZm9yX2RhdGUucHVzaCggc2Vhc29uX25hbWVzX2Fyclsgc2Vhc29uX2tleSBdICk7XHRcdFx0XHQvLyAgJ3dwZGV2Ymtfc2Vhc29uX3NlcHRlbWJlcl8yMDIzJ1xyXG5cdFx0fVxyXG5cdFx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblxyXG5cdFx0Ly8gQ29zdCBSYXRlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHRcdGNzc19jbGFzc2VzX19mb3JfZGF0ZS5wdXNoKCAncmF0ZV8nICsgZGF0ZV9ib29raW5nc19vYmpbIHJlc291cmNlX2lkIF1bICdkYXRlX2Nvc3RfcmF0ZScgXS50b1N0cmluZygpLnJlcGxhY2UoIC9bXFwuXFxzXS9nLCAnXycgKSApO1x0XHRcdFx0XHRcdC8vICAncmF0ZV85OV8wMCcgLT4gOTkuMDBcclxuXHJcblxyXG5cdFx0aWYgKCBwYXJzZUludCggZGF0ZV9ib29raW5nc19vYmpbICdkYXlfYXZhaWxhYmlsaXR5JyBdICkgPiAwICl7XHJcblx0XHRcdGlzX2RheV9zZWxlY3RhYmxlID0gdHJ1ZTtcclxuXHRcdFx0Y3NzX2NsYXNzZXNfX2Zvcl9kYXRlLnB1c2goICdkYXRlX2F2YWlsYWJsZScgKTtcclxuXHRcdFx0Y3NzX2NsYXNzZXNfX2Zvcl9kYXRlLnB1c2goICdyZXNlcnZlZF9kYXlzX2NvdW50JyArIHBhcnNlSW50KCBkYXRlX2Jvb2tpbmdzX29ialsgJ21heF9jYXBhY2l0eScgXSAtIGRhdGVfYm9va2luZ3Nfb2JqWyAnZGF5X2F2YWlsYWJpbGl0eScgXSApICk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRpc19kYXlfc2VsZWN0YWJsZSA9IGZhbHNlO1xyXG5cdFx0XHRjc3NfY2xhc3Nlc19fZm9yX2RhdGUucHVzaCggJ2RhdGVfdXNlcl91bmF2YWlsYWJsZScgKTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0c3dpdGNoICggZGF0ZV9ib29raW5nc19vYmpbICdzdW1tYXJ5J11bJ3N0YXR1c19mb3JfZGF5JyBdICl7XHJcblxyXG5cdFx0XHRjYXNlICdhdmFpbGFibGUnOlxyXG5cdFx0XHRcdGJyZWFrO1xyXG5cclxuXHRcdFx0Y2FzZSAndGltZV9zbG90c19ib29raW5nJzpcclxuXHRcdFx0XHRjc3NfY2xhc3Nlc19fZm9yX2RhdGUucHVzaCggJ3RpbWVzcGFydGx5JywgJ3RpbWVzX2Nsb2NrJyApO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cclxuXHRcdFx0Y2FzZSAnZnVsbF9kYXlfYm9va2luZyc6XHJcblx0XHRcdFx0Y3NzX2NsYXNzZXNfX2Zvcl9kYXRlLnB1c2goICdmdWxsX2RheV9ib29raW5nJyApO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cclxuXHRcdFx0Y2FzZSAnc2Vhc29uX2ZpbHRlcic6XHJcblx0XHRcdFx0Y3NzX2NsYXNzZXNfX2Zvcl9kYXRlLnB1c2goICdkYXRlX3VzZXJfdW5hdmFpbGFibGUnLCAnc2Vhc29uX3VuYXZhaWxhYmxlJyApO1xyXG5cdFx0XHRcdGRhdGVfYm9va2luZ3Nfb2JqWyAnc3VtbWFyeSddWydzdGF0dXNfZm9yX2Jvb2tpbmdzJyBdID0gJyc7XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFJlc2V0IGJvb2tpbmcgc3RhdHVzIGNvbG9yIGZvciBwb3NzaWJsZSBvbGQgYm9va2luZ3Mgb24gdGhpcyBkYXRlXHJcblx0XHRcdFx0ZGF0ZV9ib29raW5nc19vYmpbICdzdW1tYXJ5J11bJ3N0YXR1c19mb3JfYm9va2luZ3NfYXJyJyBdID0gW107XHJcblx0XHRcdFx0Ym9va2luZ19zdGF0dXNlc19hcnIgPSBbXTtcclxuXHRcdFx0XHRicmVhaztcclxuXHJcblx0XHRcdGNhc2UgJ3Jlc291cmNlX2F2YWlsYWJpbGl0eSc6XHJcblx0XHRcdFx0Y3NzX2NsYXNzZXNfX2Zvcl9kYXRlLnB1c2goICdkYXRlX3VzZXJfdW5hdmFpbGFibGUnLCAncmVzb3VyY2VfdW5hdmFpbGFibGUnICk7XHJcblx0XHRcdFx0ZGF0ZV9ib29raW5nc19vYmpbICdzdW1tYXJ5J11bJ3N0YXR1c19mb3JfYm9va2luZ3MnIF0gPSAnJztcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gUmVzZXQgYm9va2luZyBzdGF0dXMgY29sb3IgZm9yIHBvc3NpYmxlIG9sZCBib29raW5ncyBvbiB0aGlzIGRhdGVcclxuXHRcdFx0XHRkYXRlX2Jvb2tpbmdzX29ialsgJ3N1bW1hcnknXVsnc3RhdHVzX2Zvcl9ib29raW5nc19hcnInIF0gPSBbXTtcclxuXHRcdFx0XHRib29raW5nX3N0YXR1c2VzX2FyciA9IFtdO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cclxuXHRcdFx0Y2FzZSAnd2Vla2RheV91bmF2YWlsYWJsZSc6XHJcblx0XHRcdFx0Y3NzX2NsYXNzZXNfX2Zvcl9kYXRlLnB1c2goICdkYXRlX3VzZXJfdW5hdmFpbGFibGUnLCAnd2Vla2RheV91bmF2YWlsYWJsZScgKTtcclxuXHRcdFx0XHRkYXRlX2Jvb2tpbmdzX29ialsgJ3N1bW1hcnknXVsnc3RhdHVzX2Zvcl9ib29raW5ncycgXSA9ICcnO1x0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBSZXNldCBib29raW5nIHN0YXR1cyBjb2xvciBmb3IgcG9zc2libGUgb2xkIGJvb2tpbmdzIG9uIHRoaXMgZGF0ZVxyXG5cdFx0XHRcdGRhdGVfYm9va2luZ3Nfb2JqWyAnc3VtbWFyeSddWydzdGF0dXNfZm9yX2Jvb2tpbmdzX2FycicgXSA9IFtdO1xyXG5cdFx0XHRcdGJvb2tpbmdfc3RhdHVzZXNfYXJyID0gW107XHJcblx0XHRcdFx0YnJlYWs7XHJcblxyXG5cdFx0XHRjYXNlICdmcm9tX3RvZGF5X3VuYXZhaWxhYmxlJzpcclxuXHRcdFx0XHRjc3NfY2xhc3Nlc19fZm9yX2RhdGUucHVzaCggJ2RhdGVfdXNlcl91bmF2YWlsYWJsZScsICdmcm9tX3RvZGF5X3VuYXZhaWxhYmxlJyApO1xyXG5cdFx0XHRcdGRhdGVfYm9va2luZ3Nfb2JqWyAnc3VtbWFyeSddWydzdGF0dXNfZm9yX2Jvb2tpbmdzJyBdID0gJyc7XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFJlc2V0IGJvb2tpbmcgc3RhdHVzIGNvbG9yIGZvciBwb3NzaWJsZSBvbGQgYm9va2luZ3Mgb24gdGhpcyBkYXRlXHJcblx0XHRcdFx0ZGF0ZV9ib29raW5nc19vYmpbICdzdW1tYXJ5J11bJ3N0YXR1c19mb3JfYm9va2luZ3NfYXJyJyBdID0gW107XHJcblx0XHRcdFx0Ym9va2luZ19zdGF0dXNlc19hcnIgPSBbXTtcclxuXHRcdFx0XHRicmVhaztcclxuXHJcblx0XHRcdGNhc2UgJ2xpbWl0X2F2YWlsYWJsZV9mcm9tX3RvZGF5JzpcclxuXHRcdFx0XHRjc3NfY2xhc3Nlc19fZm9yX2RhdGUucHVzaCggJ2RhdGVfdXNlcl91bmF2YWlsYWJsZScsICdsaW1pdF9hdmFpbGFibGVfZnJvbV90b2RheScgKTtcclxuXHRcdFx0XHRkYXRlX2Jvb2tpbmdzX29ialsgJ3N1bW1hcnknXVsnc3RhdHVzX2Zvcl9ib29raW5ncycgXSA9ICcnO1x0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBSZXNldCBib29raW5nIHN0YXR1cyBjb2xvciBmb3IgcG9zc2libGUgb2xkIGJvb2tpbmdzIG9uIHRoaXMgZGF0ZVxyXG5cdFx0XHRcdGRhdGVfYm9va2luZ3Nfb2JqWyAnc3VtbWFyeSddWydzdGF0dXNfZm9yX2Jvb2tpbmdzX2FycicgXSA9IFtdO1xyXG5cdFx0XHRcdGJvb2tpbmdfc3RhdHVzZXNfYXJyID0gW107XHJcblx0XHRcdFx0YnJlYWs7XHJcblxyXG5cdFx0XHRjYXNlICdjaGFuZ2Vfb3Zlcic6XHJcblx0XHRcdFx0LypcclxuXHRcdFx0XHQgKlxyXG5cdFx0XHRcdC8vICBjaGVja19vdXRfdGltZV9kYXRlMmFwcHJvdmUgXHQgXHRjaGVja19pbl90aW1lX2RhdGUyYXBwcm92ZVxyXG5cdFx0XHRcdC8vICBjaGVja19vdXRfdGltZV9kYXRlMmFwcHJvdmUgXHQgXHRjaGVja19pbl90aW1lX2RhdGVfYXBwcm92ZWRcclxuXHRcdFx0XHQvLyAgY2hlY2tfaW5fdGltZV9kYXRlMmFwcHJvdmUgXHRcdCBcdGNoZWNrX291dF90aW1lX2RhdGVfYXBwcm92ZWRcclxuXHRcdFx0XHQvLyAgY2hlY2tfb3V0X3RpbWVfZGF0ZV9hcHByb3ZlZCBcdCBcdGNoZWNrX2luX3RpbWVfZGF0ZV9hcHByb3ZlZFxyXG5cdFx0XHRcdCAqL1xyXG5cclxuXHRcdFx0XHRjc3NfY2xhc3Nlc19fZm9yX2RhdGUucHVzaCggJ3RpbWVzcGFydGx5JywgJ2NoZWNrX2luX3RpbWUnLCAnY2hlY2tfb3V0X3RpbWUnICk7XHJcblx0XHRcdFx0Ly8gRml4SW46IDEwLjAuMC4yLlxyXG5cdFx0XHRcdGlmICggd3BiY19ib29raW5nX3N0YXR1c2VzX19oYXMoIGJvb2tpbmdfc3RhdHVzZXNfYXJyLCAnYXBwcm92ZWRfcGVuZGluZycgKSApe1xyXG5cdFx0XHRcdFx0Y3NzX2NsYXNzZXNfX2Zvcl9kYXRlLnB1c2goICdjaGVja19vdXRfdGltZV9kYXRlX2FwcHJvdmVkJywgJ2NoZWNrX2luX3RpbWVfZGF0ZTJhcHByb3ZlJyApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAoIHdwYmNfYm9va2luZ19zdGF0dXNlc19faGFzKCBib29raW5nX3N0YXR1c2VzX2FyciwgJ3BlbmRpbmdfYXBwcm92ZWQnICkgKXtcclxuXHRcdFx0XHRcdGNzc19jbGFzc2VzX19mb3JfZGF0ZS5wdXNoKCAnY2hlY2tfb3V0X3RpbWVfZGF0ZTJhcHByb3ZlJywgJ2NoZWNrX2luX3RpbWVfZGF0ZV9hcHByb3ZlZCcgKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0YnJlYWs7XHJcblxyXG5cdFx0XHRjYXNlICdjaGVja19pbic6XHJcblx0XHRcdFx0Y3NzX2NsYXNzZXNfX2Zvcl9kYXRlLnB1c2goICd0aW1lc3BhcnRseScsICdjaGVja19pbl90aW1lJyApO1xyXG5cclxuXHRcdFx0XHQvLyBGaXhJbjogOS45LjAuMzMuXHJcblx0XHRcdFx0aWYgKCB3cGJjX2Jvb2tpbmdfc3RhdHVzZXNfX2hhc19wYXJ0KCBib29raW5nX3N0YXR1c2VzX2FyciwgJ3BlbmRpbmcnICkgKXtcclxuXHRcdFx0XHRcdGNzc19jbGFzc2VzX19mb3JfZGF0ZS5wdXNoKCAnY2hlY2tfaW5fdGltZV9kYXRlMmFwcHJvdmUnICk7XHJcblx0XHRcdFx0fSBlbHNlIGlmICggd3BiY19ib29raW5nX3N0YXR1c2VzX19oYXNfcGFydCggYm9va2luZ19zdGF0dXNlc19hcnIsICdhcHByb3ZlZCcgKSApe1xyXG5cdFx0XHRcdFx0Y3NzX2NsYXNzZXNfX2Zvcl9kYXRlLnB1c2goICdjaGVja19pbl90aW1lX2RhdGVfYXBwcm92ZWQnICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGJyZWFrO1xyXG5cclxuXHRcdFx0Y2FzZSAnY2hlY2tfb3V0JzpcclxuXHRcdFx0XHRjc3NfY2xhc3Nlc19fZm9yX2RhdGUucHVzaCggJ3RpbWVzcGFydGx5JywgJ2NoZWNrX291dF90aW1lJyApO1xyXG5cclxuXHRcdFx0XHQvLyBGaXhJbjogOS45LjAuMzMuXHJcblx0XHRcdFx0aWYgKCB3cGJjX2Jvb2tpbmdfc3RhdHVzZXNfX2hhc19wYXJ0KCBib29raW5nX3N0YXR1c2VzX2FyciwgJ3BlbmRpbmcnICkgKXtcclxuXHRcdFx0XHRcdGNzc19jbGFzc2VzX19mb3JfZGF0ZS5wdXNoKCAnY2hlY2tfb3V0X3RpbWVfZGF0ZTJhcHByb3ZlJyApO1xyXG5cdFx0XHRcdH0gZWxzZSBpZiAoIHdwYmNfYm9va2luZ19zdGF0dXNlc19faGFzX3BhcnQoIGJvb2tpbmdfc3RhdHVzZXNfYXJyLCAnYXBwcm92ZWQnICkgKXtcclxuXHRcdFx0XHRcdGNzc19jbGFzc2VzX19mb3JfZGF0ZS5wdXNoKCAnY2hlY2tfb3V0X3RpbWVfZGF0ZV9hcHByb3ZlZCcgKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0YnJlYWs7XHJcblxyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdC8vIG1peGVkIHN0YXR1c2VzOiAnY2hhbmdlX292ZXIgY2hlY2tfb3V0JyAuLi4uIHZhcmlhdGlvbnMuLi4uIGNoZWNrIG1vcmUgaW4gXHRcdGZ1bmN0aW9uIHdwYmNfZ2V0X2F2YWlsYWJpbGl0eV9wZXJfZGF5c19hcnIoKVxyXG5cdFx0XHRcdGRhdGVfYm9va2luZ3Nfb2JqWyAnc3VtbWFyeSddWydzdGF0dXNfZm9yX2RheScgXSA9ICdhdmFpbGFibGUnO1xyXG5cdFx0fVxyXG5cclxuXHJcblxyXG5cdFx0aWYgKCAnYXZhaWxhYmxlJyAhPSBkYXRlX2Jvb2tpbmdzX29ialsgJ3N1bW1hcnknXVsnc3RhdHVzX2Zvcl9kYXknIF0gKXtcclxuXHJcblx0XHRcdHZhciBpc19zZXRfcGVuZGluZ19kYXlzX3NlbGVjdGFibGUgPSBfd3BiYy5jYWxlbmRhcl9fZ2V0X3BhcmFtX3ZhbHVlKCByZXNvdXJjZV9pZCwgJ3BlbmRpbmdfZGF5c19zZWxlY3RhYmxlJyApO1x0Ly8gc2V0IHBlbmRpbmcgZGF5cyBzZWxlY3RhYmxlICAgICAgICAgIC8vIEZpeEluOiA4LjYuMS4xOC5cclxuXHJcblx0XHRcdGlmICggd3BiY19ib29raW5nX3N0YXR1c2VzX19oYXMoIGJvb2tpbmdfc3RhdHVzZXNfYXJyLCAncGVuZGluZycgKSApe1xyXG5cdFx0XHRcdGNzc19jbGFzc2VzX19mb3JfZGF0ZS5wdXNoKCAnZGF0ZTJhcHByb3ZlJyApO1xyXG5cdFx0XHRcdGlzX2RheV9zZWxlY3RhYmxlID0gKGlzX2RheV9zZWxlY3RhYmxlKSA/IHRydWUgOiBpc19zZXRfcGVuZGluZ19kYXlzX3NlbGVjdGFibGU7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKCB3cGJjX2Jvb2tpbmdfc3RhdHVzZXNfX2hhcyggYm9va2luZ19zdGF0dXNlc19hcnIsICdhcHByb3ZlZCcgKSApe1xyXG5cdFx0XHRcdGNzc19jbGFzc2VzX19mb3JfZGF0ZS5wdXNoKCAnZGF0ZV9hcHByb3ZlZCcgKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoIHdwYmNfYm9va2luZ19zdGF0dXNlc19faGFzKCBib29raW5nX3N0YXR1c2VzX2FyciwgJ3BlbmRpbmdfcGVuZGluZycgKSApe1xyXG5cdFx0XHRcdGNzc19jbGFzc2VzX19mb3JfZGF0ZS5wdXNoKCAnY2hlY2tfb3V0X3RpbWVfZGF0ZTJhcHByb3ZlJywgJ2NoZWNrX2luX3RpbWVfZGF0ZTJhcHByb3ZlJyApO1xyXG5cdFx0XHRcdGlzX2RheV9zZWxlY3RhYmxlID0gKGlzX2RheV9zZWxlY3RhYmxlKSA/IHRydWUgOiBpc19zZXRfcGVuZGluZ19kYXlzX3NlbGVjdGFibGU7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKCB3cGJjX2Jvb2tpbmdfc3RhdHVzZXNfX2hhcyggYm9va2luZ19zdGF0dXNlc19hcnIsICdwZW5kaW5nX2FwcHJvdmVkJyApICl7XHJcblx0XHRcdFx0Y3NzX2NsYXNzZXNfX2Zvcl9kYXRlLnB1c2goICdjaGVja19vdXRfdGltZV9kYXRlMmFwcHJvdmUnLCAnY2hlY2tfaW5fdGltZV9kYXRlX2FwcHJvdmVkJyApO1xyXG5cdFx0XHRcdGlzX2RheV9zZWxlY3RhYmxlID0gKGlzX2RheV9zZWxlY3RhYmxlKSA/IHRydWUgOiBpc19zZXRfcGVuZGluZ19kYXlzX3NlbGVjdGFibGU7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKCB3cGJjX2Jvb2tpbmdfc3RhdHVzZXNfX2hhcyggYm9va2luZ19zdGF0dXNlc19hcnIsICdhcHByb3ZlZF9wZW5kaW5nJyApICl7XHJcblx0XHRcdFx0Y3NzX2NsYXNzZXNfX2Zvcl9kYXRlLnB1c2goICdjaGVja19vdXRfdGltZV9kYXRlX2FwcHJvdmVkJywgJ2NoZWNrX2luX3RpbWVfZGF0ZTJhcHByb3ZlJyApO1xyXG5cdFx0XHRcdGlzX2RheV9zZWxlY3RhYmxlID0gKGlzX2RheV9zZWxlY3RhYmxlKSA/IHRydWUgOiBpc19zZXRfcGVuZGluZ19kYXlzX3NlbGVjdGFibGU7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKCB3cGJjX2Jvb2tpbmdfc3RhdHVzZXNfX2hhcyggYm9va2luZ19zdGF0dXNlc19hcnIsICdhcHByb3ZlZF9hcHByb3ZlZCcgKSApe1xyXG5cdFx0XHRcdGNzc19jbGFzc2VzX19mb3JfZGF0ZS5wdXNoKCAnY2hlY2tfb3V0X3RpbWVfZGF0ZV9hcHByb3ZlZCcsICdjaGVja19pbl90aW1lX2RhdGVfYXBwcm92ZWQnICk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRkYXRlX2NvbnN0cmFpbnRfcmVzdWx0ID0gd3BiY19jYWxlbmRhcl9fZXZhbHVhdGVfZGF0ZV9jb25zdHJhaW50cyggcmVzb3VyY2VfaWQsIHNxbF9jbGFzc19kYXksIGlzX2RheV9zZWxlY3RhYmxlLCBjc3NfY2xhc3Nlc19fZm9yX2RhdGUgKTtcblxuXHRcdHJldHVybiBbIGRhdGVfY29uc3RyYWludF9yZXN1bHQuaXNfc2VsZWN0YWJsZSwgZGF0ZV9jb25zdHJhaW50X3Jlc3VsdC5jc3NfY2xhc3Nlcy5qb2luKCAnICcgKSBdO1xuXHR9XHJcblxyXG5cclxuXHQvKipcclxuXHQgKiBNb3VzZW92ZXIgY2FsZW5kYXIgZGF0ZSBjZWxsc1xyXG5cdCAqXHJcblx0ICogQHBhcmFtIHN0cmluZ19kYXRlXHJcblx0ICogQHBhcmFtIGRhdGVcdFx0XHRcdFx0XHRcdFx0XHRcdC0gIEphdmFTY3JpcHQgRGF0ZSBPYmo6ICBcdFx0TW9uIERlYyAxMSAyMDIzIDAwOjAwOjAwXHJcblx0ICogICAgIEdNVCswMjAwIChFYXN0ZXJuIEV1cm9wZWFuIFN0YW5kYXJkIFRpbWUpXHJcblx0ICogQHBhcmFtIGNhbGVuZGFyX3BhcmFtc19hcnJcdFx0XHRcdFx0XHQtICBDYWxlbmRhciBTZXR0aW5ncyBPYmplY3Q6ICBcdHtcclxuXHQgKlx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICBcdFx0XHRcdFx0XHRcInJlc291cmNlX2lkXCI6IDRcclxuXHQgKlx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHQgKiBAcGFyYW0gZGF0ZXBpY2tfdGhpc1x0XHRcdFx0XHRcdFx0XHQtIHRoaXMgb2YgZGF0ZXBpY2sgT2JqXHJcblx0ICogQHJldHVybnMge2Jvb2xlYW59XHJcblx0ICovXHJcblx0ZnVuY3Rpb24gd3BiY19fY2FsZW5kYXJfX29uX2hvdmVyX2RheXMoIHN0cmluZ19kYXRlLCBkYXRlLCBjYWxlbmRhcl9wYXJhbXNfYXJyLCBkYXRlcGlja190aGlzICkge1xyXG5cclxuXHRcdGlmICggbnVsbCA9PT0gZGF0ZSApIHtcclxuXHRcdFx0d3BiY19jYWxlbmRhcnNfX2NsZWFyX2RheXNfaGlnaGxpZ2h0aW5nKCAoJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiAoY2FsZW5kYXJfcGFyYW1zX2FyclsgJ3Jlc291cmNlX2lkJyBdKSkgPyBjYWxlbmRhcl9wYXJhbXNfYXJyWyAncmVzb3VyY2VfaWQnIF0gOiAnMScgKTtcdFx0Ly8gRml4SW46IDEwLjUuMi40LlxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0dmFyIGNsYXNzX2RheSAgICAgPSB3cGJjX19nZXRfX3RkX2NsYXNzX2RhdGUoIGRhdGUgKTtcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyAnMS05LTIwMjMnXHJcblx0XHR2YXIgc3FsX2NsYXNzX2RheSA9IHdwYmNfX2dldF9fc3FsX2NsYXNzX2RhdGUoIGRhdGUgKTtcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyAnMjAyMy0wMS0wOSdcclxuXHRcdHZhciByZXNvdXJjZV9pZCA9ICggJ3VuZGVmaW5lZCcgIT09IHR5cGVvZihjYWxlbmRhcl9wYXJhbXNfYXJyWyAncmVzb3VyY2VfaWQnIF0pICkgPyBjYWxlbmRhcl9wYXJhbXNfYXJyWyAncmVzb3VyY2VfaWQnIF0gOiAnMSc7XHRcdC8vICcxJ1xyXG5cclxuXHRcdC8vIEdldCBEYXRhIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0XHR2YXIgZGF0ZV9ib29raW5nX29iaiA9IF93cGJjLmJvb2tpbmdzX2luX2NhbGVuZGFyX19nZXRfZm9yX2RhdGUoIHJlc291cmNlX2lkLCBzcWxfY2xhc3NfZGF5ICk7XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIHsuLi59XHJcblxyXG5cdFx0aWYgKCAhIGRhdGVfYm9va2luZ19vYmogKXsgcmV0dXJuIGZhbHNlOyB9XHJcblxyXG5cclxuXHRcdC8vIFQgbyBvIGwgdCBpIHAgcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0XHR2YXIgdG9vbHRpcF90ZXh0ID0gJyc7XHJcblx0XHRpZiAoIGRhdGVfYm9va2luZ19vYmpbICdzdW1tYXJ5J11bJ3Rvb2x0aXBfYXZhaWxhYmlsaXR5JyBdLmxlbmd0aCA+IDAgKXtcclxuXHRcdFx0dG9vbHRpcF90ZXh0ICs9ICBkYXRlX2Jvb2tpbmdfb2JqWyAnc3VtbWFyeSddWyd0b29sdGlwX2F2YWlsYWJpbGl0eScgXTtcclxuXHRcdH1cclxuXHRcdGlmICggZGF0ZV9ib29raW5nX29ialsgJ3N1bW1hcnknXVsndG9vbHRpcF9kYXlfY29zdCcgXS5sZW5ndGggPiAwICl7XHJcblx0XHRcdHRvb2x0aXBfdGV4dCArPSAgZGF0ZV9ib29raW5nX29ialsgJ3N1bW1hcnknXVsndG9vbHRpcF9kYXlfY29zdCcgXTtcclxuXHRcdH1cclxuXHRcdGlmICggZGF0ZV9ib29raW5nX29ialsgJ3N1bW1hcnknXVsndG9vbHRpcF90aW1lcycgXS5sZW5ndGggPiAwICl7XHJcblx0XHRcdHRvb2x0aXBfdGV4dCArPSAgZGF0ZV9ib29raW5nX29ialsgJ3N1bW1hcnknXVsndG9vbHRpcF90aW1lcycgXTtcclxuXHRcdH1cclxuXHRcdGlmICggZGF0ZV9ib29raW5nX29ialsgJ3N1bW1hcnknXVsndG9vbHRpcF9ib29raW5nX2RldGFpbHMnIF0ubGVuZ3RoID4gMCApe1xyXG5cdFx0XHR0b29sdGlwX3RleHQgKz0gIGRhdGVfYm9va2luZ19vYmpbICdzdW1tYXJ5J11bJ3Rvb2x0aXBfYm9va2luZ19kZXRhaWxzJyBdO1xyXG5cdFx0fVxyXG5cdFx0d3BiY19zZXRfdG9vbHRpcF9fX2Zvcl9fY2FsZW5kYXJfZGF0ZSggdG9vbHRpcF90ZXh0LCByZXNvdXJjZV9pZCwgY2xhc3NfZGF5ICk7XHJcblxyXG5cclxuXHJcblx0XHQvLyAgVSBuIGggbyB2IGUgciBpIG4gZyAgICBpbiAgICBVTlNFTEVDVEFCTEVfQ0FMRU5EQVIgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdFx0dmFyIGlzX3Vuc2VsZWN0YWJsZV9jYWxlbmRhciA9ICggalF1ZXJ5KCAnI2NhbGVuZGFyX2Jvb2tpbmdfdW5zZWxlY3RhYmxlJyArIHJlc291cmNlX2lkICkubGVuZ3RoID4gMCk7XHRcdFx0XHQvLyBGaXhJbjogOC4wLjEuMi5cclxuXHRcdHZhciBpc19ib29raW5nX2Zvcm1fZXhpc3QgICAgPSAoIGpRdWVyeSggJyNib29raW5nX2Zvcm1fZGl2JyArIHJlc291cmNlX2lkICkubGVuZ3RoID4gMCApO1xyXG5cdFx0dmFyIGlzX2FkZF9ib29raW5nX21vZGFsX2NhbGVuZGFyID0gKCBqUXVlcnkoICcjY2FsZW5kYXJfYm9va2luZycgKyByZXNvdXJjZV9pZCApLmNsb3Nlc3QoICcjd3BiY19tb2RhbF9fYWRkX2Jvb2tpbmdfX3NlY3Rpb24nICkubGVuZ3RoID4gMCApO1xyXG5cdFx0dmFyIGlzX2FkbWluX2NhbGVuZGFyX3ByZXZpZXcgPSAoIGpRdWVyeSggJyNjYWxlbmRhcl9ib29raW5nJyArIHJlc291cmNlX2lkICkuY2xvc2VzdCggJ1tkYXRhLXdwYmMtYWRtaW4tY2FsZW5kYXItcHJldmlldz1cIjFcIl0nICkubGVuZ3RoID4gMCApO1xyXG5cclxuXHRcdGlmICggKCBpc191bnNlbGVjdGFibGVfY2FsZW5kYXIgKSAmJiAoICEgaXNfYm9va2luZ19mb3JtX2V4aXN0ICkgKXtcclxuXHJcblx0XHRcdC8qKlxyXG5cdFx0XHQgKiAgVW4gSG92ZXIgYWxsIGRhdGVzIGluIGNhbGVuZGFyICh3aXRob3V0IHRoZSBib29raW5nIGZvcm0pLCBpZiBvbmx5IEF2YWlsYWJpbGl0eSBDYWxlbmRhciBoZXJlIGFuZCB3ZSBkb1xyXG5cdFx0XHQgKiBub3QgaW5zZXJ0IEJvb2tpbmcgZm9ybSBieSBtaXN0YWtlLlxyXG5cdFx0XHQgKi9cclxuXHJcblx0XHRcdHdwYmNfY2FsZW5kYXJzX19jbGVhcl9kYXlzX2hpZ2hsaWdodGluZyggcmVzb3VyY2VfaWQgKTsgXHRcdFx0XHRcdFx0XHQvLyBDbGVhciBkYXlzIGhpZ2hsaWdodGluZ1xyXG5cclxuXHRcdFx0dmFyIGNzc19vZl9jYWxlbmRhciA9ICcud3BiY19vbmx5X2NhbGVuZGFyICNjYWxlbmRhcl9ib29raW5nJyArIHJlc291cmNlX2lkO1xyXG5cdFx0XHRqUXVlcnkoIGNzc19vZl9jYWxlbmRhciArICcgLmRhdGVwaWNrLWRheXMtY2VsbCwgJ1xyXG5cdFx0XHRcdCAgKyBjc3Nfb2ZfY2FsZW5kYXIgKyAnIC5kYXRlcGljay1kYXlzLWNlbGwgYScgKS5jc3MoICdjdXJzb3InLCAnZGVmYXVsdCcgKTtcdC8vIFNldCBjdXJzb3IgdG8gRGVmYXVsdFxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cclxuXHJcblx0XHQvLyAgRCBhIHkgcyAgICBIIG8gdiBlIHIgaSBuIGcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdFx0aWYgKFxyXG5cdFx0XHQgICAoIGxvY2F0aW9uLmhyZWYuaW5kZXhPZiggJ3BhZ2U9d3BiYycgKSA9PSAtMSApXHJcblx0XHRcdHx8ICggKCBsb2NhdGlvbi5ocmVmLmluZGV4T2YoICdwYWdlPXdwYmMnICkgPiAwICkgJiYgKCBsb2NhdGlvbi5ocmVmLmluZGV4T2YoICd0YWI9YWRkLWJvb2tpbmcnICkgPiAwICkgKVxyXG5cdFx0XHR8fCAoIGlzX2FkZF9ib29raW5nX21vZGFsX2NhbGVuZGFyIClcclxuXHRcdFx0fHwgKCBpc19hZG1pbl9jYWxlbmRhcl9wcmV2aWV3IClcclxuXHRcdFx0fHwgKCBsb2NhdGlvbi5ocmVmLmluZGV4T2YoICdwYWdlPXdwYmMtc2V0dXAnICkgPiAwIClcclxuXHRcdFx0fHwgKCBsb2NhdGlvbi5ocmVmLmluZGV4T2YoICdwYWdlPXdwYmMtYXZhaWxhYmlsaXR5JyApID4gMCApXHJcblx0XHRcdHx8ICggICggbG9jYXRpb24uaHJlZi5pbmRleE9mKCAncGFnZT13cGJjLXNldHRpbmdzJyApID4gMCApICAmJlxyXG5cdFx0XHRcdCAgKCBsb2NhdGlvbi5ocmVmLmluZGV4T2YoICd0YWI9YnVpbGRlcl9ib29raW5nX2Zvcm0nICkgPiAwIClcclxuXHRcdFx0ICAgKVxyXG5cdFx0KXtcclxuXHRcdFx0Ly8gVGhlIHNhbWUgYXMgZGF0ZXMgc2VsZWN0aW9uLCAgYnV0IGZvciBkYXlzIGhvdmVyaW5nXHJcblxyXG5cdFx0XHRpZiAoICdmdW5jdGlvbicgPT0gdHlwZW9mKCB3cGJjX19jYWxlbmRhcl9fZG9fZGF5c19oaWdobGlnaHRfX2JzICkgKXtcclxuXHRcdFx0XHR3cGJjX19jYWxlbmRhcl9fZG9fZGF5c19oaWdobGlnaHRfX2JzKCBzcWxfY2xhc3NfZGF5LCBkYXRlLCByZXNvdXJjZV9pZCApO1xyXG5cdFx0XHR9IGVsc2UgaWYgKCAnZHluYW1pYycgPT09IF93cGJjLmNhbGVuZGFyX19nZXRfcGFyYW1fdmFsdWUoIHJlc291cmNlX2lkLCAnZGF5c19zZWxlY3RfbW9kZScgKSApIHtcclxuXHRcdFx0XHR3cGJjX19jYWxlbmRhcl9fZG9fZGF5c19oaWdobGlnaHRfX3VucmVzdHJpY3RlZF9yYW5nZSggc3FsX2NsYXNzX2RheSwgZGF0ZSwgcmVzb3VyY2VfaWQgKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHR9XHJcblxyXG5cclxuXHQvKipcclxuXHQgKiBIaWdobGlnaHQgYW4gdW5yZXN0cmljdGVkIHByb3Bvc2VkIHJhbmdlIGFmdGVyIHRoZSBmaXJzdCBjbGljayB3aGVuIEJ1c2luZXNzIFNtYWxsIGlzIG5vdCBsb2FkZWQuXHJcblx0ICpcclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc3FsX2NsYXNzX2RheSBIb3ZlcmVkIGRhdGUgaW4gU1FMIGZvcm1hdC5cclxuXHQgKiBAcGFyYW0ge0RhdGV9IGRhdGUgSG92ZXJlZCBkYXRlLlxyXG5cdCAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gcmVzb3VyY2VfaWQgQm9va2luZyByZXNvdXJjZSBJRC5cclxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSB3aGVuIHRoZSBjb21wbGV0ZSBwcm9wb3NlZCByYW5nZSBpcyBhdmFpbGFibGUgYW5kIGhpZ2hsaWdodGVkLlxyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIHdwYmNfX2NhbGVuZGFyX19kb19kYXlzX2hpZ2hsaWdodF9fdW5yZXN0cmljdGVkX3JhbmdlKCBzcWxfY2xhc3NfZGF5LCBkYXRlLCByZXNvdXJjZV9pZCApe1xyXG5cclxuXHRcdHZhciBpbnN0ID0gd3BiY19jYWxlbmRhcl9fZ2V0X2luc3QoIHJlc291cmNlX2lkICk7XHJcblx0XHR2YXIgcmFuZ2Vfc3RhcnQ7XHJcblx0XHR2YXIgcmFuZ2VfZW5kO1xyXG5cdFx0dmFyIHdvcmtpbmdfZGF0ZTtcclxuXHRcdHZhciB0ZF9vdmVycyA9IFtdO1xyXG5cclxuXHRcdHdwYmNfY2FsZW5kYXJzX19jbGVhcl9kYXlzX2hpZ2hsaWdodGluZyggcmVzb3VyY2VfaWQgKTtcclxuXHJcblx0XHRpZiAoXHJcblx0XHRcdCAgIG51bGwgPT09IGluc3RcclxuXHRcdFx0fHwgJ2R5bmFtaWMnICE9PSBfd3BiYy5jYWxlbmRhcl9fZ2V0X3BhcmFtX3ZhbHVlKCByZXNvdXJjZV9pZCwgJ2RheXNfc2VsZWN0X21vZGUnIClcclxuXHRcdCkge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQmVmb3JlIGEgcmFuZ2Ugc3RhcnRzLCBvciBhZnRlciBpdCBpcyBjb21wbGV0ZSwgcHJldmlldyB0aGUgaG92ZXJlZCBkYXRlIGFzIHRoZSBwb3NzaWJsZSBmaXJzdCBkYXkuXHJcblx0XHRpZiAoIDEgIT09IGluc3QuZGF0ZXMubGVuZ3RoIHx8ICEgaW5zdC5kYXRlc1sgMCBdICkge1xyXG5cdFx0XHRpZiAoICEgd3BiY19pc190aGlzX2RheV9zZWxlY3RhYmxlKCByZXNvdXJjZV9pZCwgc3FsX2NsYXNzX2RheSApICkge1xyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0alF1ZXJ5KCAnI2NhbGVuZGFyX2Jvb2tpbmcnICsgcmVzb3VyY2VfaWQgKyAnIC5jYWw0ZGF0ZS0nICsgd3BiY19fZ2V0X190ZF9jbGFzc19kYXRlKCBkYXRlICkgKVxyXG5cdFx0XHRcdC5hZGRDbGFzcyggJ2RhdGVwaWNrLWRheXMtY2VsbC1vdmVyJyApO1xyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblx0XHRyYW5nZV9zdGFydCA9IG5ldyBEYXRlKCBpbnN0LmRhdGVzWyAwIF0uZ2V0RnVsbFllYXIoKSwgaW5zdC5kYXRlc1sgMCBdLmdldE1vbnRoKCksIGluc3QuZGF0ZXNbIDAgXS5nZXREYXRlKCksIDAsIDAsIDAgKTtcclxuXHRcdHJhbmdlX2VuZCAgID0gbmV3IERhdGUoIGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCBkYXRlLmdldERhdGUoKSwgMCwgMCwgMCApO1xyXG5cclxuXHRcdC8vIERhdGVwaWNrIG9ubHkgcGVybWl0cyBhIGNoZWNrLW91dCBkYXRlIG9uL2FmdGVyIHRoZSBmaXJzdCBjbGljay4gRG8gbm90IHByZXZpZXcgYSBiYWNrd2FyZCByYW5nZS5cclxuXHRcdGlmICggcmFuZ2VfZW5kLmdldFRpbWUoKSA8IHJhbmdlX3N0YXJ0LmdldFRpbWUoKSApIHtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHdvcmtpbmdfZGF0ZSA9IG5ldyBEYXRlKCByYW5nZV9zdGFydC5nZXRUaW1lKCkgKTtcclxuXHRcdHdoaWxlICggd29ya2luZ19kYXRlLmdldFRpbWUoKSA8PSByYW5nZV9lbmQuZ2V0VGltZSgpICkge1xyXG5cdFx0XHRzcWxfY2xhc3NfZGF5ID0gd3BiY19fZ2V0X19zcWxfY2xhc3NfZGF0ZSggd29ya2luZ19kYXRlICk7XHJcblx0XHRcdGlmICggISB3cGJjX2lzX3RoaXNfZGF5X3NlbGVjdGFibGUoIHJlc291cmNlX2lkLCBzcWxfY2xhc3NfZGF5ICkgKSB7XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHR0ZF9vdmVycy5wdXNoKCAnI2NhbGVuZGFyX2Jvb2tpbmcnICsgcmVzb3VyY2VfaWQgKyAnIC5jYWw0ZGF0ZS0nICsgd3BiY19fZ2V0X190ZF9jbGFzc19kYXRlKCB3b3JraW5nX2RhdGUgKSApO1xyXG5cdFx0XHR3b3JraW5nX2RhdGUuc2V0RGF0ZSggd29ya2luZ19kYXRlLmdldERhdGUoKSArIDEgKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIHRkX292ZXJzLmxlbmd0aCApIHtcclxuXHRcdFx0alF1ZXJ5KCB0ZF9vdmVycy5qb2luKCAnLCcgKSApLmFkZENsYXNzKCAnZGF0ZXBpY2stZGF5cy1jZWxsLW92ZXInICk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cclxuXHJcblx0LyoqXHJcblx0ICogQ29tcGxldGUgYW4gdW5yZXN0cmljdGVkIHR3by1jbGljayByYW5nZSB3aGVuIHRoZSBCdXNpbmVzcyBTbWFsbCByYW5nZSBlbmdpbmUgaXMgbm90IGxvYWRlZC5cclxuXHQgKiBUaGUgaGlkZGVuIGJvb2tpbmcgZmllbGQgbXVzdCBjb250YWluIGV2ZXJ5IGRhdGUgYmVjYXVzZSBGcmVlIHRpbWUvaGludCBoYW5kbGVycyBjb25zdW1lIGEgY29tbWEtc2VwYXJhdGVkIGxpc3QuXHJcblx0ICpcclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0ZWRfZGF0ZXMgRGF0ZXBpY2sncyBlbmRwb2ludCBzdHJpbmcuXHJcblx0ICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSByZXNvdXJjZV9pZCBCb29raW5nIHJlc291cmNlIElELlxyXG5cdCAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGFmdGVyIGEgY29tcGxldGUgdmFsaWQgcmFuZ2UsIGZhbHNlIHdoaWxlIGluY29tcGxldGUgb3IgaW52YWxpZC5cclxuXHQgKi9cclxuXHRmdW5jdGlvbiB3cGJjX19jYWxlbmRhcl9fZG9fZGF5c19zZWxlY3RfX3VucmVzdHJpY3RlZF9yYW5nZSggc2VsZWN0ZWRfZGF0ZXMsIHJlc291cmNlX2lkICl7XHJcblxyXG5cdFx0dmFyIGluc3QgPSB3cGJjX2NhbGVuZGFyX19nZXRfaW5zdCggcmVzb3VyY2VfaWQgKTtcclxuXHRcdHZhciByYW5nZV9zdGFydDtcclxuXHRcdHZhciByYW5nZV9lbmQ7XHJcblx0XHR2YXIgY3VycmVudF9kYXRlO1xyXG5cdFx0dmFyIHNlbGVjdGVkX3JhbmdlID0gW107XHJcblxyXG5cdFx0aWYgKCBudWxsID09PSBpbnN0ICkge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gRGF0ZXBpY2sgd3JpdGVzIFwic3RhcnQgLSBzdGFydFwiIGFmdGVyIGNsaWNrIG9uZS4gS2VlcCBpdHMgaW50ZXJuYWwgZW5kcG9pbnQsIGJ1dCBkbyBub3QgZXhwb3NlIGEgc3VibWl0dGFibGUgcmFuZ2UgeWV0LlxyXG5cdFx0aWYgKCB0cnVlID09PSBpbnN0LnN0YXlPcGVuIHx8IGluc3QuZGF0ZXMubGVuZ3RoIDwgMiB8fCAhIGluc3QuZGF0ZXNbIDAgXSB8fCAhIGluc3QuZGF0ZXNbIDEgXSApIHtcclxuXHRcdFx0alF1ZXJ5KCAnI2RhdGVfYm9va2luZycgKyByZXNvdXJjZV9pZCApLnZhbCggJycgKTtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJhbmdlX3N0YXJ0ID0gbmV3IERhdGUoIGluc3QuZGF0ZXNbIDAgXS5nZXRGdWxsWWVhcigpLCBpbnN0LmRhdGVzWyAwIF0uZ2V0TW9udGgoKSwgaW5zdC5kYXRlc1sgMCBdLmdldERhdGUoKSwgMCwgMCwgMCApO1xyXG5cdFx0cmFuZ2VfZW5kICAgPSBuZXcgRGF0ZSggaW5zdC5kYXRlc1sgMSBdLmdldEZ1bGxZZWFyKCksIGluc3QuZGF0ZXNbIDEgXS5nZXRNb250aCgpLCBpbnN0LmRhdGVzWyAxIF0uZ2V0RGF0ZSgpLCAwLCAwLCAwICk7XHJcblxyXG5cdFx0Ly8gRGVmZW5zaXZlIG5vcm1hbGl6YXRpb24uIERhdGVwaWNrIG5vcm1hbGx5IHByZXZlbnRzIGFuIGVuZCBkYXRlIGJlZm9yZSB0aGUgZmlyc3QgZW5kcG9pbnQuXHJcblx0XHRpZiAoIHJhbmdlX2VuZC5nZXRUaW1lKCkgPCByYW5nZV9zdGFydC5nZXRUaW1lKCkgKSB7XHJcblx0XHRcdGN1cnJlbnRfZGF0ZSA9IHJhbmdlX3N0YXJ0O1xyXG5cdFx0XHRyYW5nZV9zdGFydCA9IHJhbmdlX2VuZDtcclxuXHRcdFx0cmFuZ2VfZW5kID0gY3VycmVudF9kYXRlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGN1cnJlbnRfZGF0ZSA9IG5ldyBEYXRlKCByYW5nZV9zdGFydC5nZXRUaW1lKCkgKTtcclxuXHRcdHdoaWxlICggY3VycmVudF9kYXRlLmdldFRpbWUoKSA8PSByYW5nZV9lbmQuZ2V0VGltZSgpICkge1xyXG5cdFx0XHRpZiAoICEgd3BiY19pc190aGlzX2RheV9zZWxlY3RhYmxlKCByZXNvdXJjZV9pZCwgd3BiY19fZ2V0X19zcWxfY2xhc3NfZGF0ZSggY3VycmVudF9kYXRlICkgKSApIHtcclxuXHRcdFx0XHR3cGJjX2NhbGVuZGFyX191bnNlbGVjdF9hbGxfZGF0ZXMoIHJlc291cmNlX2lkICk7XHJcblx0XHRcdFx0aWYgKCAnZnVuY3Rpb24nID09PSB0eXBlb2YgKCB3cGJjX2Zyb250X2VuZF9fc2hvd19tZXNzYWdlX193YXJuaW5nICkgKSB7XHJcblx0XHRcdFx0XHR3cGJjX2Zyb250X2VuZF9fc2hvd19tZXNzYWdlX193YXJuaW5nKFxyXG5cdFx0XHRcdFx0XHQnI2Jvb2tpbmdfZm9ybV9kaXYnICsgcmVzb3VyY2VfaWQgKyAnIC5ia19jYWxlbmRhcl9mcmFtZScsXHJcblx0XHRcdFx0XHRcdF93cGJjLmdldF9tZXNzYWdlKCAnbWVzc2FnZV9yYW5nZV9zZWxlY3Rpb25faGFzX3VuYXZhaWxhYmxlX2RhdGVzJyApLFxyXG5cdFx0XHRcdFx0XHQndGV4dCdcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0c2VsZWN0ZWRfcmFuZ2UucHVzaCggalF1ZXJ5LmRhdGVwaWNrLl9mb3JtYXREYXRlKCBpbnN0LCBjdXJyZW50X2RhdGUgKSApO1xyXG5cdFx0XHRjdXJyZW50X2RhdGUuc2V0RGF0ZSggY3VycmVudF9kYXRlLmdldERhdGUoKSArIDEgKTtcclxuXHRcdH1cclxuXHJcblx0XHRqUXVlcnkoICcjZGF0ZV9ib29raW5nJyArIHJlc291cmNlX2lkICkudmFsKCBzZWxlY3RlZF9yYW5nZS5qb2luKCAnLCAnICkgKTtcclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHJcblxyXG5cdC8qKlxyXG5cdCAqIFByZXBhcmUgYSBjb2xsYXBzZWQgcmFuZ2Utc2VsZWN0aW9uIGd1aWRhbmNlIG5vdGUgZm9yIG9uZSBjYWxlbmRhci5cclxuXHQgKiBLZWVwaW5nIG9uZSByZXVzYWJsZSBub2RlIGF2b2lkcyByZXBlYXRlZCBpbnNlcnRpb24gd2hpbGUgaW5hY3RpdmUgZ3VpZGFuY2Ugb2NjdXBpZXMgbm8gbGF5b3V0IHNwYWNlLlxyXG5cdCAqXHJcblx0ICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSByZXNvdXJjZV9pZCBCb29raW5nIHJlc291cmNlIElELlxyXG5cdCAqIEByZXR1cm5zIHtqUXVlcnl9IFRoZSBwcmVwYXJlZCBub3RlLCBvciBhbiBlbXB0eSBjb2xsZWN0aW9uIHdoZW4gZ3VpZGFuY2UgaXMgdW5hdmFpbGFibGUuXHJcblx0ICovXHJcblx0ZnVuY3Rpb24gd3BiY19yYW5nZV9zZWxlY3Rpb25fX3ByZXBhcmVfZ3VpZGFuY2UoIHJlc291cmNlX2lkICl7XHJcblxyXG5cdFx0dmFyIGlzX2VuYWJsZWQgPSBfd3BiYy5jYWxlbmRhcl9fZ2V0X3BhcmFtX3ZhbHVlKCByZXNvdXJjZV9pZCwgJ3JhbmdlX3NlbGVjdGlvbl9ndWlkYW5jZV9pc19lbmFibGVkJyApO1xyXG5cdFx0dmFyICRib29raW5nX2Zvcm0gPSBqUXVlcnkoICcjYm9va2luZ19mb3JtX2RpdicgKyByZXNvdXJjZV9pZCApO1xyXG5cdFx0dmFyICRjYWxlbmRhcl9mcmFtZTtcclxuXHRcdHZhciAkbm90ZSA9IGpRdWVyeSggJyN3cGJjX3JhbmdlX3NlbGVjdGlvbl9ndWlkYW5jZScgKyByZXNvdXJjZV9pZCApO1xyXG5cclxuXHRcdGlmIChcclxuXHRcdFx0ICAgZmFsc2UgPT09IGlzX2VuYWJsZWRcclxuXHRcdFx0fHwgMCA9PT0gaXNfZW5hYmxlZFxyXG5cdFx0XHR8fCAnMCcgPT09IGlzX2VuYWJsZWRcclxuXHRcdFx0fHwgJ29mZicgPT09IFN0cmluZyggaXNfZW5hYmxlZCApLnRvTG93ZXJDYXNlKClcclxuXHRcdFx0fHwgJ2ZhbHNlJyA9PT0gU3RyaW5nKCBpc19lbmFibGVkICkudG9Mb3dlckNhc2UoKVxyXG5cdFx0XHR8fCAnZHluYW1pYycgIT09IF93cGJjLmNhbGVuZGFyX19nZXRfcGFyYW1fdmFsdWUoIHJlc291cmNlX2lkLCAnZGF5c19zZWxlY3RfbW9kZScgKVxyXG5cdFx0XHR8fCAwID09PSAkYm9va2luZ19mb3JtLmxlbmd0aFxyXG5cdFx0KSB7XHJcblx0XHRcdCRub3RlLnJlbW92ZSgpO1xyXG5cdFx0XHRyZXR1cm4galF1ZXJ5KCk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCAwIDwgJG5vdGUubGVuZ3RoICkge1xyXG5cdFx0XHQkbm90ZS5zdG9wKCB0cnVlLCB0cnVlICkuaGlkZSgpLmF0dHIoICdhcmlhLWhpZGRlbicsICd0cnVlJyApO1xyXG5cdFx0XHRyZXR1cm4gJG5vdGU7XHJcblx0XHR9XHJcblxyXG5cdFx0JGNhbGVuZGFyX2ZyYW1lID0gJGJvb2tpbmdfZm9ybS5maW5kKCAnLmJsb2NrX2hpbnRzLmRhdGVwaWNrJyApLmZpcnN0KCk7XHJcblx0XHRpZiAoIDAgPT09ICRjYWxlbmRhcl9mcmFtZS5sZW5ndGggKSB7XHJcblx0XHRcdCRjYWxlbmRhcl9mcmFtZSA9ICRib29raW5nX2Zvcm0uZmluZCggJy53cGJjX2NhbF9wb3dlcmVkX2J5JyApLmZpcnN0KCk7XHJcblx0XHRcdGlmICggMCA9PT0gJGNhbGVuZGFyX2ZyYW1lLmxlbmd0aCApIHtcclxuXHRcdFx0XHQkY2FsZW5kYXJfZnJhbWUgPSAkYm9va2luZ19mb3JtLmZpbmQoICcuYmtfY2FsZW5kYXJfZnJhbWUnICkuZmlyc3QoKTtcclxuXHRcdFx0XHRpZiAoIDAgPT09ICRjYWxlbmRhcl9mcmFtZS5sZW5ndGggKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4galF1ZXJ5KCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0JG5vdGUgPSBqUXVlcnkoICc8ZGl2PicsIHtcclxuXHRcdFx0J2lkJzogJ3dwYmNfcmFuZ2Vfc2VsZWN0aW9uX2d1aWRhbmNlJyArIHJlc291cmNlX2lkLFxyXG5cdFx0XHQnY2xhc3MnOiAnd3BiY19yYW5nZV9zZWxlY3Rpb25fZ3VpZGFuY2Ugd3BiY19mcm9udF9lbmRfX21lc3NhZ2Ugd3BiY19mZV9tZXNzYWdlX2luZm8nLFxyXG5cdFx0XHQncm9sZSc6ICdzdGF0dXMnLFxyXG5cdFx0XHQnYXJpYS1saXZlJzogJ3BvbGl0ZScsXHJcblx0XHRcdCdhcmlhLWhpZGRlbic6ICd0cnVlJyxcclxuXHRcdFx0J3N0eWxlJzogJ2Rpc3BsYXk6IG5vbmU7J1xyXG5cdFx0fSApO1xyXG5cdFx0JG5vdGUuYXBwZW5kKCBqUXVlcnkoICc8aT4nLCB7XHJcblx0XHRcdCdjbGFzcyc6ICdtZW51X2ljb24gaWNvbi0xeCB3cGJjX2ljbl9pbmZvX291dGxpbmUnLFxyXG5cdFx0XHQnYXJpYS1oaWRkZW4nOiAndHJ1ZSdcclxuXHRcdH0gKSApO1xyXG5cdFx0JG5vdGUuYXBwZW5kKCBqUXVlcnkoICc8c3Bhbj4nICkudGV4dCggX3dwYmMuZ2V0X21lc3NhZ2UoICdtZXNzYWdlX3JhbmdlX3NlbGVjdGlvbl9jbGlja19sYXN0X2RhdGUnICkgKSApO1xyXG5cdFx0JGNhbGVuZGFyX2ZyYW1lLmFmdGVyKCAkbm90ZSApO1xyXG5cclxuXHRcdHJldHVybiAkbm90ZTtcclxuXHR9XHJcblxyXG5cclxuXHQvKipcclxuXHQgKiBHZXQgdGhlIHJhbmdlLWd1aWRhbmNlIGFuaW1hdGlvbiBkdXJhdGlvbiBmb3IgdGhlIGN1cnJlbnQgbW90aW9uIHByZWZlcmVuY2UuXHJcblx0ICpcclxuXHQgKiBAcmV0dXJucyB7bnVtYmVyfSBBbmltYXRpb24gZHVyYXRpb24gaW4gbWlsbGlzZWNvbmRzLCBvciB6ZXJvIHdoZW4gcmVkdWNlZCBtb3Rpb24gaXMgcHJlZmVycmVkLlxyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIHdwYmNfcmFuZ2Vfc2VsZWN0aW9uX19nZXRfZ3VpZGFuY2VfYW5pbWF0aW9uX2R1cmF0aW9uKCl7XHJcblxyXG5cdFx0aWYgKFxyXG5cdFx0XHQnZnVuY3Rpb24nID09PSB0eXBlb2Ygd2luZG93Lm1hdGNoTWVkaWFcclxuXHRcdFx0JiYgd2luZG93Lm1hdGNoTWVkaWEoICcocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKScgKS5tYXRjaGVzXHJcblx0XHQpIHtcclxuXHRcdFx0cmV0dXJuIDA7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIDE2MDtcclxuXHR9XHJcblxyXG5cclxuXHQvKipcclxuXHQgKiBDb2xsYXBzZSB0aGUgcmFuZ2Utc2VsZWN0aW9uIGd1aWRhbmNlIHNvIGl0IGRvZXMgbm90IHJlc2VydmUgZW1wdHkgbGF5b3V0IHNwYWNlLlxyXG5cdCAqXHJcblx0ICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSByZXNvdXJjZV9pZCBCb29raW5nIHJlc291cmNlIElELlxyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIHdwYmNfcmFuZ2Vfc2VsZWN0aW9uX19oaWRlX2d1aWRhbmNlKCByZXNvdXJjZV9pZCApe1xyXG5cclxuXHRcdGpRdWVyeSggJyN3cGJjX3JhbmdlX3NlbGVjdGlvbl9ndWlkYW5jZScgKyByZXNvdXJjZV9pZCApXHJcblx0XHRcdC5hdHRyKCAnYXJpYS1oaWRkZW4nLCAndHJ1ZScgKVxyXG5cdFx0XHQuc3RvcCggdHJ1ZSwgdHJ1ZSApXHJcblx0XHRcdC5zbGlkZVVwKCB3cGJjX3JhbmdlX3NlbGVjdGlvbl9fZ2V0X2d1aWRhbmNlX2FuaW1hdGlvbl9kdXJhdGlvbigpICk7XHJcblx0fVxyXG5cclxuXHJcblx0LyoqXHJcblx0ICogU2hvdyB0aGUgcHJlcGFyZWQgaW5mb3JtYXRpb25hbCBub3RlIGFmdGVyIHRoZSBmaXJzdCByYW5nZSBjbGljay5cclxuXHQgKiBUaGUgY2FsZW5kYXIgcGFyYW1ldGVyIGNhbiBiZSBzZXQgdG8gZmFsc2UgYnkgUEhQIG9yIEphdmFTY3JpcHQgdG8gc3VwcHJlc3MgdGhpcyBVSSBwZXIgcmVzb3VyY2UuXHJcblx0ICpcclxuXHQgKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IHJlc291cmNlX2lkIEJvb2tpbmcgcmVzb3VyY2UgSUQuXHJcblx0ICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgd2hlbiB0aGUgbm90ZSB3YXMgc2hvd24uXHJcblx0ICovXHJcblx0ZnVuY3Rpb24gd3BiY19yYW5nZV9zZWxlY3Rpb25fX3Nob3dfZ3VpZGFuY2UoIHJlc291cmNlX2lkICl7XHJcblxyXG5cdFx0dmFyICRub3RlID0gd3BiY19yYW5nZV9zZWxlY3Rpb25fX3ByZXBhcmVfZ3VpZGFuY2UoIHJlc291cmNlX2lkICk7XHJcblxyXG5cdFx0aWYgKCAwID09PSAkbm90ZS5sZW5ndGggKSB7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHQkbm90ZVxyXG5cdFx0XHQuc3RvcCggdHJ1ZSwgdHJ1ZSApXHJcblx0XHRcdC5zbGlkZURvd24oIHdwYmNfcmFuZ2Vfc2VsZWN0aW9uX19nZXRfZ3VpZGFuY2VfYW5pbWF0aW9uX2R1cmF0aW9uKCkgKVxyXG5cdFx0XHQucmVtb3ZlQXR0ciggJ2FyaWEtaGlkZGVuJyApO1xyXG5cdFx0JG5vdGUuZmluZCggJ3NwYW4nICkudGV4dCggX3dwYmMuZ2V0X21lc3NhZ2UoICdtZXNzYWdlX3JhbmdlX3NlbGVjdGlvbl9jbGlja19sYXN0X2RhdGUnICkgKTtcclxuXHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcblxyXG5cclxuXHQvKipcclxuXHQgKiBTeW5jaHJvbml6ZSB0aGUgZ3VpZGFuY2Ugd2l0aCBEYXRlcGljaydzIHR3by1jbGljayByYW5nZSBzdGF0ZS5cclxuXHQgKlxyXG5cdCAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gcmVzb3VyY2VfaWQgQm9va2luZyByZXNvdXJjZSBJRC5cclxuXHQgKi9cclxuXHRmdW5jdGlvbiB3cGJjX3JhbmdlX3NlbGVjdGlvbl9fc3luY19ndWlkYW5jZSggcmVzb3VyY2VfaWQgKXtcclxuXHJcblx0XHR2YXIgaW5zdCA9IHdwYmNfY2FsZW5kYXJfX2dldF9pbnN0KCByZXNvdXJjZV9pZCApO1xyXG5cclxuXHRcdGlmIChcclxuXHRcdFx0ICAgbnVsbCAhPT0gaW5zdFxyXG5cdFx0XHQmJiAnZHluYW1pYycgPT09IF93cGJjLmNhbGVuZGFyX19nZXRfcGFyYW1fdmFsdWUoIHJlc291cmNlX2lkLCAnZGF5c19zZWxlY3RfbW9kZScgKVxyXG5cdFx0XHQmJiB0cnVlID09PSBpbnN0LnN0YXlPcGVuXHJcblx0XHRcdCYmIDEgPT09IGluc3QuZGF0ZXMubGVuZ3RoXHJcblx0XHRcdCYmIGluc3QuZGF0ZXNbIDAgXVxyXG5cdFx0KSB7XHJcblx0XHRcdHdwYmNfcmFuZ2Vfc2VsZWN0aW9uX19zaG93X2d1aWRhbmNlKCByZXNvdXJjZV9pZCApO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0d3BiY19yYW5nZV9zZWxlY3Rpb25fX2hpZGVfZ3VpZGFuY2UoIHJlc291cmNlX2lkICk7XHJcblx0fVxyXG5cclxuXHJcblx0LyoqXHJcblx0ICogU2VsZWN0IGNhbGVuZGFyIGRhdGUgY2VsbHNcclxuXHQgKlxyXG5cdCAqIEBwYXJhbSBkYXRlXHRcdFx0XHRcdFx0XHRcdFx0XHQtICBKYXZhU2NyaXB0IERhdGUgT2JqOiAgXHRcdE1vbiBEZWMgMTEgMjAyMyAwMDowMDowMFxyXG5cdCAqICAgICBHTVQrMDIwMCAoRWFzdGVybiBFdXJvcGVhbiBTdGFuZGFyZCBUaW1lKVxyXG5cdCAqIEBwYXJhbSBjYWxlbmRhcl9wYXJhbXNfYXJyXHRcdFx0XHRcdFx0LSAgQ2FsZW5kYXIgU2V0dGluZ3MgT2JqZWN0OiAgXHR7XHJcblx0ICpcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgXHRcdFx0XHRcdFx0XCJyZXNvdXJjZV9pZFwiOiA0XHJcblx0ICpcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0ICogQHBhcmFtIGRhdGVwaWNrX3RoaXNcdFx0XHRcdFx0XHRcdFx0LSB0aGlzIG9mIGRhdGVwaWNrIE9ialxyXG5cdCAqXHJcblx0ICovXHJcblx0ZnVuY3Rpb24gd3BiY19fY2FsZW5kYXJfX29uX3NlbGVjdF9kYXlzKCBkYXRlLCBjYWxlbmRhcl9wYXJhbXNfYXJyLCBkYXRlcGlja190aGlzICl7XHJcblxyXG5cdFx0dmFyIHJlc291cmNlX2lkID0gKCAndW5kZWZpbmVkJyAhPT0gdHlwZW9mKGNhbGVuZGFyX3BhcmFtc19hcnJbICdyZXNvdXJjZV9pZCcgXSkgKSA/IGNhbGVuZGFyX3BhcmFtc19hcnJbICdyZXNvdXJjZV9pZCcgXSA6ICcxJztcdFx0Ly8gJzEnXHJcblxyXG5cdFx0Ly8gU2V0IHVuc2VsZWN0YWJsZSwgIGlmIG9ubHkgQXZhaWxhYmlsaXR5IENhbGVuZGFyICBoZXJlIChhbmQgd2UgZG8gbm90IGluc2VydCBCb29raW5nIGZvcm0gYnkgbWlzdGFrZSkuXHJcblx0XHR2YXIgaXNfdW5zZWxlY3RhYmxlX2NhbGVuZGFyID0gKCBqUXVlcnkoICcjY2FsZW5kYXJfYm9va2luZ191bnNlbGVjdGFibGUnICsgcmVzb3VyY2VfaWQgKS5sZW5ndGggPiAwKTtcdFx0XHRcdC8vIEZpeEluOiA4LjAuMS4yLlxyXG5cdFx0dmFyIGlzX2Jvb2tpbmdfZm9ybV9leGlzdCAgICA9ICggalF1ZXJ5KCAnI2Jvb2tpbmdfZm9ybV9kaXYnICsgcmVzb3VyY2VfaWQgKS5sZW5ndGggPiAwICk7XHJcblx0XHRpZiAoICggaXNfdW5zZWxlY3RhYmxlX2NhbGVuZGFyICkgJiYgKCAhIGlzX2Jvb2tpbmdfZm9ybV9leGlzdCApICl7XHJcblx0XHRcdHdwYmNfY2FsZW5kYXJfX3Vuc2VsZWN0X2FsbF9kYXRlcyggcmVzb3VyY2VfaWQgKTtcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFVuc2VsZWN0IERhdGVzXHJcblx0XHRcdGpRdWVyeSgnLndwYmNfb25seV9jYWxlbmRhciAucG9wb3Zlcl9jYWxlbmRhcl9ob3ZlcicpLnJlbW92ZSgpOyAgICAgICAgICAgICAgICAgICAgICBcdFx0XHRcdFx0XHRcdC8vIEhpZGUgYWxsIG9wZW5lZCBwb3BvdmVyc1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0alF1ZXJ5KCAnI2RhdGVfYm9va2luZycgKyByZXNvdXJjZV9pZCApLnZhbCggZGF0ZSApO1x0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gQWRkIHNlbGVjdGVkIGRhdGVzIHRvICBoaWRkZW4gdGV4dGFyZWFcclxuXHJcblxyXG5cdFx0aWYgKCAnZnVuY3Rpb24nID09PSB0eXBlb2YgKHdwYmNfX2NhbGVuZGFyX19kb19kYXlzX3NlbGVjdF9fYnMpICkge1xyXG5cdFx0XHR3cGJjX19jYWxlbmRhcl9fZG9fZGF5c19zZWxlY3RfX2JzKCBkYXRlLCByZXNvdXJjZV9pZCApO1xyXG5cdFx0fSBlbHNlIGlmICggJ2R5bmFtaWMnID09PSBfd3BiYy5jYWxlbmRhcl9fZ2V0X3BhcmFtX3ZhbHVlKCByZXNvdXJjZV9pZCwgJ2RheXNfc2VsZWN0X21vZGUnICkgKSB7XHJcblx0XHRcdHdwYmNfX2NhbGVuZGFyX19kb19kYXlzX3NlbGVjdF9fdW5yZXN0cmljdGVkX3JhbmdlKCBkYXRlLCByZXNvdXJjZV9pZCApO1xyXG5cdFx0fVxyXG5cclxuXHRcdHdwYmNfcmFuZ2Vfc2VsZWN0aW9uX19zeW5jX2d1aWRhbmNlKCByZXNvdXJjZV9pZCApO1xyXG5cclxuXHRcdHdwYmNfZGlzYWJsZV90aW1lX2ZpZWxkc19pbl9ib29raW5nX2Zvcm0oIHJlc291cmNlX2lkICk7XHJcblxyXG5cdFx0Ly8gSG9vayAtLSB0cmlnZ2VyIGRheSBzZWxlY3Rpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHRcdHZhciBtb3VzZV9jbGlja2VkX2RhdGVzID0gZGF0ZTtcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIENhbiBiZTogXCIwNS4xMC4yMDIzIC0gMDcuMTAuMjAyM1wiICB8ICBcIjEwLjEwLjIwMjMgLSAxMC4xMC4yMDIzXCIgIHxcclxuXHRcdHZhciBhbGxfc2VsZWN0ZWRfZGF0ZXNfYXJyID0gd3BiY19nZXRfX3NlbGVjdGVkX2RhdGVzX3NxbF9fYXNfYXJyKCByZXNvdXJjZV9pZCApO1x0XHRcdFx0XHRcdFx0XHRcdC8vIENhbiBiZTogWyBcIjIwMjMtMTAtMDVcIiwgXCIyMDIzLTEwLTA2XCIsIFwiMjAyMy0xMC0wN1wiLCDigKYgXVxyXG5cdFx0alF1ZXJ5KCBcIi5ib29raW5nX2Zvcm1fZGl2XCIgKS50cmlnZ2VyKCBcImRhdGVfc2VsZWN0ZWRcIiwgWyByZXNvdXJjZV9pZCwgbW91c2VfY2xpY2tlZF9kYXRlcywgYWxsX3NlbGVjdGVkX2RhdGVzX2FyciBdICk7XHJcblx0fVxyXG5cclxuXHQvLyBNYXJrIG1pZGRsZSBzZWxlY3RlZCBkYXRlcyB3aXRoIDAuNSBvcGFjaXR5XHRcdC8vIEZpeEluOiAxMC4zLjAuOS5cclxuXHRqUXVlcnkoIGRvY3VtZW50ICkucmVhZHkoIGZ1bmN0aW9uICgpe1xyXG5cdFx0alF1ZXJ5KCBcIi5ib29raW5nX2Zvcm1fZGl2XCIgKS5vbiggJ2RhdGVfc2VsZWN0ZWQnLCBmdW5jdGlvbiAoIGV2ZW50LCByZXNvdXJjZV9pZCwgZGF0ZSApe1xyXG5cdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdCAgICggICdmaXhlZCcgPT09IF93cGJjLmNhbGVuZGFyX19nZXRfcGFyYW1fdmFsdWUoIHJlc291cmNlX2lkLCAnZGF5c19zZWxlY3RfbW9kZScgKSlcclxuXHRcdFx0XHRcdHx8ICgnZHluYW1pYycgPT09IF93cGJjLmNhbGVuZGFyX19nZXRfcGFyYW1fdmFsdWUoIHJlc291cmNlX2lkLCAnZGF5c19zZWxlY3RfbW9kZScgKSlcclxuXHRcdFx0XHQpe1xyXG5cdFx0XHRcdFx0dmFyIGNsb3NlZF90aW1lciA9IHNldFRpbWVvdXQoIGZ1bmN0aW9uICgpe1xyXG5cdFx0XHRcdFx0XHR2YXIgbWlkZGxlX2RheXNfb3BhY2l0eSA9IF93cGJjLmdldF9vdGhlcl9wYXJhbSggJ2NhbGVuZGFyc19fZGF5c19zZWxlY3Rpb25fX21pZGRsZV9kYXlzX29wYWNpdHknICk7XHJcblx0XHRcdFx0XHRcdGpRdWVyeSggJyNjYWxlbmRhcl9ib29raW5nJyArIHJlc291cmNlX2lkICsgJyAuZGF0ZXBpY2stY3VycmVudC1kYXknICkubm90KCBcIi5zZWxlY3RlZF9jaGVja19pbl9vdXRcIiApLmNzcyggJ29wYWNpdHknLCBtaWRkbGVfZGF5c19vcGFjaXR5ICk7XHJcblx0XHRcdFx0XHR9LCAxMCApO1xyXG5cdFx0XHRcdH1cclxuXHRcdH0gKTtcclxuXHR9ICk7XHJcblxyXG5cclxuXHQvKipcclxuXHQgKiAtLSAgVCBpIG0gZSAgICBGIGkgZSBsIGQgcyAgICAgc3RhcnQgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0ICovXHJcblxyXG5cdC8qKlxyXG5cdCAqIERpc2FibGUgdGltZSBzbG90cyBpbiBib29raW5nIGZvcm0gZGVwZW5kIG9uIHNlbGVjdGVkIGRhdGVzIGFuZCBib29rZWQgZGF0ZXMvdGltZXNcclxuXHQgKlxyXG5cdCAqIEBwYXJhbSByZXNvdXJjZV9pZFxyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIHdwYmNfZGlzYWJsZV90aW1lX2ZpZWxkc19pbl9ib29raW5nX2Zvcm0oIHJlc291cmNlX2lkICl7XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBcdDEuIEdldCBhbGwgdGltZSBmaWVsZHMgaW4gdGhlIGJvb2tpbmcgZm9ybSBhcyBhcnJheSAgb2Ygb2JqZWN0c1xyXG5cdFx0ICogXHRcdFx0XHRcdFtcclxuXHRcdCAqIFx0XHRcdFx0XHQgXHQgICB7XHRqcXVlcnlfb3B0aW9uOiAgICAgIGpRdWVyeV9PYmplY3Qge31cclxuXHRcdCAqIFx0XHRcdFx0XHRcdFx0XHRuYW1lOiAgICAgICAgICAgICAgICdyYW5nZXRpbWUyW10nXHJcblx0XHQgKiBcdFx0XHRcdFx0XHRcdFx0dGltZXNfYXNfc2Vjb25kczogICBbIDIxNjAwLCAyMzQwMCBdXHJcblx0XHQgKiBcdFx0XHRcdFx0XHRcdFx0dmFsdWVfb3B0aW9uXzI0aDogICAnMDY6MDAgLSAwNjozMCdcclxuXHRcdCAqIFx0XHRcdFx0XHQgICAgIH1cclxuXHRcdCAqIFx0XHRcdFx0XHQgIC4uLlxyXG5cdFx0ICogXHRcdFx0XHRcdFx0ICAge1x0anF1ZXJ5X29wdGlvbjogICAgICBqUXVlcnlfT2JqZWN0IHt9XHJcblx0XHQgKiBcdFx0XHRcdFx0XHRcdFx0bmFtZTogICAgICAgICAgICAgICAnc3RhcnR0aW1lMltdJ1xyXG5cdFx0ICogXHRcdFx0XHRcdFx0XHRcdHRpbWVzX2FzX3NlY29uZHM6ICAgWyAyMTYwMCBdXHJcblx0XHQgKiBcdFx0XHRcdFx0XHRcdFx0dmFsdWVfb3B0aW9uXzI0aDogICAnMDY6MDAnXHJcblx0XHQgKiAgXHRcdFx0XHRcdCAgICB9XHJcblx0XHQgKiBcdFx0XHRcdFx0IF1cclxuXHRcdCAqL1xyXG5cdFx0dmFyIHRpbWVfZmllbGRzX29ial9hcnIgPSB3cGJjX2dldF9fdGltZV9maWVsZHNfX2luX2Jvb2tpbmdfZm9ybV9fYXNfYXJyKCByZXNvdXJjZV9pZCApO1xyXG5cclxuXHRcdC8vIDIuIEdldCBhbGwgc2VsZWN0ZWQgZGF0ZXMgaW4gIFNRTCBmb3JtYXQgIGxpa2UgdGhpcyBbIFwiMjAyMy0wOC0yM1wiLCBcIjIwMjMtMDgtMjRcIiwgXCIyMDIzLTA4LTI1XCIsIC4uLiBdXHJcblx0XHR2YXIgc2VsZWN0ZWRfZGF0ZXNfYXJyID0gd3BiY19nZXRfX3NlbGVjdGVkX2RhdGVzX3NxbF9fYXNfYXJyKCByZXNvdXJjZV9pZCApO1xyXG5cclxuXHRcdC8vIDMuIEdldCBjaGlsZCBib29raW5nIHJlc291cmNlcyAgb3Igc2luZ2xlIGJvb2tpbmcgcmVzb3VyY2UgIHRoYXQgIGV4aXN0ICBpbiBkYXRlc1xyXG5cdFx0dmFyIGNoaWxkX3Jlc291cmNlc19hcnIgPSB3cGJjX2Nsb25lX29iaiggX3dwYmMuYm9va2luZ19fZ2V0X3BhcmFtX3ZhbHVlKCByZXNvdXJjZV9pZCwgJ3Jlc291cmNlc19pZF9hcnJfX2luX2RhdGVzJyApICk7XHJcblxyXG5cdFx0dmFyIHNxbF9kYXRlO1xyXG5cdFx0dmFyIGNoaWxkX3Jlc291cmNlX2lkO1xyXG5cdFx0dmFyIG1lcmdlZF9zZWNvbmRzO1xyXG5cdFx0dmFyIHRpbWVfZmllbGRzX29iajtcclxuXHRcdHZhciBpc19pbnRlcnNlY3Q7XHJcblx0XHR2YXIgaXNfY2hlY2tfaW47XHJcblxyXG5cdFx0dmFyIHRvZGF5X3RpbWVfX3JlYWwgID0gbmV3IERhdGUoIF93cGJjLmdldF9vdGhlcl9wYXJhbSggJ3RpbWVfbG9jYWxfYXJyJyApWzBdLCAoIHBhcnNlSW50KCBfd3BiYy5nZXRfb3RoZXJfcGFyYW0oICd0aW1lX2xvY2FsX2FycicgKVsxXSApIC0gMSksIF93cGJjLmdldF9vdGhlcl9wYXJhbSggJ3RpbWVfbG9jYWxfYXJyJyApWzJdLCBfd3BiYy5nZXRfb3RoZXJfcGFyYW0oICd0aW1lX2xvY2FsX2FycicgKVszXSwgX3dwYmMuZ2V0X290aGVyX3BhcmFtKCAndGltZV9sb2NhbF9hcnInIClbNF0sIDAgKTtcclxuXHRcdHZhciB0b2RheV90aW1lX19zaGlmdCA9IG5ldyBEYXRlKCBfd3BiYy5nZXRfb3RoZXJfcGFyYW0oICd0b2RheV9hcnInICAgICAgKVswXSwgKCBwYXJzZUludCggX3dwYmMuZ2V0X290aGVyX3BhcmFtKCAgICAgICd0b2RheV9hcnInIClbMV0gKSAtIDEpLCBfd3BiYy5nZXRfb3RoZXJfcGFyYW0oICd0b2RheV9hcnInICAgICAgKVsyXSwgX3dwYmMuZ2V0X290aGVyX3BhcmFtKCAndG9kYXlfYXJyJyAgICAgIClbM10sIF93cGJjLmdldF9vdGhlcl9wYXJhbSggJ3RvZGF5X2FycicgICAgICApWzRdLCAwICk7XHJcblx0XHR2YXIgYWxsb3dfcGFzdF9jb250ZXh0ID0gX3dwYmMuZ2V0X290aGVyX3BhcmFtKCAndGhpc19wYWdlX2FsbG93X3Bhc3QnICk7XHJcblx0XHR2YXIgZWRpdF9ib29raW5nX2hhc2hfY29udGV4dCA9IF93cGJjLmdldF9vdGhlcl9wYXJhbSggJ3RoaXNfcGFnZV9ib29raW5nX2hhc2gnICk7XHJcblx0XHR2YXIgaXNfYWxsb3dfcGFzdF9jb250ZXh0ID1cclxuXHRcdFx0ICAgKCAnMScgPT09IFN0cmluZyggYWxsb3dfcGFzdF9jb250ZXh0ICkgKVxyXG5cdFx0XHR8fCAoIDEgPT09IGFsbG93X3Bhc3RfY29udGV4dCApXHJcblx0XHRcdHx8ICggdHJ1ZSA9PT0gYWxsb3dfcGFzdF9jb250ZXh0IClcclxuXHRcdFx0fHwgKCAnJyAhPT0gU3RyaW5nKCBlZGl0X2Jvb2tpbmdfaGFzaF9jb250ZXh0IHx8ICcnICkgKVxyXG5cdFx0XHR8fCAoIGxvY2F0aW9uLmhyZWYuaW5kZXhPZiggJ2Jvb2tpbmdfaGFzaCcgKSA+IC0xIClcclxuXHRcdFx0fHwgKCBsb2NhdGlvbi5ocmVmLmluZGV4T2YoICdhbGxvd19wYXN0JyApID4gLTEgKTtcclxuXHJcblx0XHQvLyA0LiBMb29wICBhbGwgIHRpbWUgRmllbGRzIG9wdGlvbnNcdFx0Ly8gRml4SW46IDEwLjMuMC4yLlxyXG5cdFx0Zm9yICggbGV0IGZpZWxkX2tleSA9IDA7IGZpZWxkX2tleSA8IHRpbWVfZmllbGRzX29ial9hcnIubGVuZ3RoOyBmaWVsZF9rZXkrKyApe1xyXG5cclxuXHRcdFx0dGltZV9maWVsZHNfb2JqX2FyclsgZmllbGRfa2V5IF0uZGlzYWJsZWQgPSAwOyAgICAgICAgICAvLyBCeSBkZWZhdWx0LCB0aGlzIHRpbWUgZmllbGQgaXMgbm90IGRpc2FibGVkLlxyXG5cclxuXHRcdFx0dGltZV9maWVsZHNfb2JqID0gdGltZV9maWVsZHNfb2JqX2FyclsgZmllbGRfa2V5IF07XHRcdC8vIHsgdGltZXNfYXNfc2Vjb25kczogWyAyMTYwMCwgMjM0MDAgXSwgdmFsdWVfb3B0aW9uXzI0aDogJzA2OjAwIC0gMDY6MzAnLCBuYW1lOiAncmFuZ2V0aW1lMltdJywganF1ZXJ5X29wdGlvbjogalF1ZXJ5X09iamVjdCB7fX1cclxuXHJcblx0XHRcdC8vIExvb3AgIGFsbCAgc2VsZWN0ZWQgZGF0ZXMuXHJcblx0XHRcdGZvciAoIHZhciBpID0gMDsgaSA8IHNlbGVjdGVkX2RhdGVzX2Fyci5sZW5ndGg7IGkrKyApIHtcclxuXHJcblx0XHRcdFx0Ly8gR2V0IERhdGU6ICcyMDIzLTA4LTE4Jy5cclxuXHRcdFx0XHRzcWxfZGF0ZSA9IHNlbGVjdGVkX2RhdGVzX2FycltpXTtcclxuXHJcblx0XHRcdFx0dmFyIGlzX3RpbWVfaW5fcGFzdCA9IGlzX2FsbG93X3Bhc3RfY29udGV4dCA/IGZhbHNlIDogd3BiY19jaGVja19pc190aW1lX2luX3Bhc3QoIHRvZGF5X3RpbWVfX3NoaWZ0LCBzcWxfZGF0ZSwgdGltZV9maWVsZHNfb2JqICk7XHJcblx0XHRcdFx0Ly8gRXhjZXB0aW9uICBmb3IgJ0VuZCBUaW1lJyBmaWVsZCwgIHdoZW4gIHNlbGVjdGVkIHNldmVyYWwgZGF0ZXMuIC8vIEZpeEluOiAxMC4xNC4xLjUuXHJcblx0XHRcdFx0aWYgKCAoICEgaXNfYWxsb3dfcGFzdF9jb250ZXh0ICkgJiZcclxuXHRcdFx0XHRcdCgnT24nICE9PSBfd3BiYy5jYWxlbmRhcl9fZ2V0X3BhcmFtX3ZhbHVlKCByZXNvdXJjZV9pZCwgJ2Jvb2tpbmdfcmVjdXJyZW50X3RpbWUnICkpICYmXHJcblx0XHRcdFx0XHQoLTEgIT09IHRpbWVfZmllbGRzX29iai5uYW1lLmluZGV4T2YoICdlbmR0aW1lJyApKSAmJlxyXG5cdFx0XHRcdFx0KHNlbGVjdGVkX2RhdGVzX2Fyci5sZW5ndGggPiAxKVxyXG5cdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0aXNfdGltZV9pbl9wYXN0ID0gd3BiY19jaGVja19pc190aW1lX2luX3Bhc3QoIHRvZGF5X3RpbWVfX3NoaWZ0LCBzZWxlY3RlZF9kYXRlc19hcnJbKHNlbGVjdGVkX2RhdGVzX2Fyci5sZW5ndGggLSAxKV0sIHRpbWVfZmllbGRzX29iaiApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAoIGlzX3RpbWVfaW5fcGFzdCApIHtcclxuXHRcdFx0XHRcdC8vIFRoaXMgdGltZSBmb3Igc2VsZWN0ZWQgZGF0ZSBhbHJlYWR5ICBpbiB0aGUgcGFzdC5cclxuXHRcdFx0XHRcdHRpbWVfZmllbGRzX29ial9hcnJbZmllbGRfa2V5XS5kaXNhYmxlZCA9IDE7XHJcblx0XHRcdFx0XHRicmVhaztcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gZXhpc3QgIGZyb20gICBEYXRlcyBMT09QLlxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQvLyBGaXhJbjogOS45LjAuMzEuXHJcblx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0ICAgKCAnT2ZmJyA9PT0gX3dwYmMuY2FsZW5kYXJfX2dldF9wYXJhbV92YWx1ZSggcmVzb3VyY2VfaWQsICdib29raW5nX3JlY3VycmVudF90aW1lJyApIClcclxuXHRcdFx0XHRcdCYmICggc2VsZWN0ZWRfZGF0ZXNfYXJyLmxlbmd0aD4xIClcclxuXHRcdFx0XHQpe1xyXG5cdFx0XHRcdFx0Ly9UT0RPOiBza2lwIHNvbWUgZmllbGRzIGNoZWNraW5nIGlmIGl0J3Mgc3RhcnQgLyBlbmQgdGltZSBmb3IgbXVscGxlIGRhdGVzICBzZWxlY3Rpb24gIG1vZGUuXHJcblx0XHRcdFx0XHQvL1RPRE86IHdlIG5lZWQgdG8gZml4IHNpdHVhdGlvbiAgZm9yIGVudGltZXMsICB3aGVuICB1c2VyICBzZWxlY3QgIHNldmVyYWwgIGRhdGVzLCAgYW5kIGluIHN0YXJ0ICB0aW1lIGJvb2tlZCAwMDowMCAtIDE1OjAwICwgYnV0IHN5c3RzbWUgYmxvY2sgdW50aWxsIDE1OjAwIHRoZSBlbmQgdGltZSBhcyB3ZWxsLCAgd2hpY2ggIGlzIHdyb25nLCAgYmVjYXVzZSBpdCAyIG9yIDMgZGF0ZXMgc2VsZWN0aW9uICBhbmQgZW5kIGRhdGUgY2FuIGJlIGZ1bGx1ICBhdmFpbGFibGVcclxuXHJcblx0XHRcdFx0XHRpZiAoICgwID09IGkpICYmICh0aW1lX2ZpZWxkc19vYmpbICduYW1lJyBdLmluZGV4T2YoICdlbmR0aW1lJyApID49IDApICl7XHJcblx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKCAoIChzZWxlY3RlZF9kYXRlc19hcnIubGVuZ3RoLTEpID09IGkgKSAmJiAodGltZV9maWVsZHNfb2JqWyAnbmFtZScgXS5pbmRleE9mKCAnc3RhcnR0aW1lJyApID49IDApICl7XHJcblx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblxyXG5cclxuXHRcdFx0XHR2YXIgaG93X21hbnlfcmVzb3VyY2VzX2ludGVyc2VjdGVkID0gMDtcclxuXHRcdFx0XHQvLyBMb29wIGFsbCByZXNvdXJjZXMgSURcclxuXHRcdFx0XHRcdC8vIGZvciAoIHZhciByZXNfa2V5IGluIGNoaWxkX3Jlc291cmNlc19hcnIgKXtcdCBcdFx0XHRcdFx0XHQvLyBGaXhJbjogMTAuMy4wLjIuXHJcblx0XHRcdFx0aWYgKCBudWxsID09PSBjaGlsZF9yZXNvdXJjZXNfYXJyICkge1xyXG5cdFx0XHRcdFx0Y2hpbGRfcmVzb3VyY2VzX2FyciA9IFtdO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRmb3IgKCBsZXQgcmVzX2tleSA9IDA7IHJlc19rZXkgPCBjaGlsZF9yZXNvdXJjZXNfYXJyLmxlbmd0aDsgcmVzX2tleSsrICl7XHJcblxyXG5cdFx0XHRcdFx0Y2hpbGRfcmVzb3VyY2VfaWQgPSBjaGlsZF9yZXNvdXJjZXNfYXJyWyByZXNfa2V5IF07XHJcblxyXG5cdFx0XHRcdFx0Ly8gX3dwYmMuYm9va2luZ3NfaW5fY2FsZW5kYXJfX2dldF9mb3JfZGF0ZSgyLCcyMDIzLTA4LTIxJylbMTJdLmJvb2tlZF90aW1lX3Nsb3RzLm1lcmdlZF9zZWNvbmRzXHRcdD0gWyBcIjA3OjAwOjExIC0gMDc6MzA6MDJcIiwgXCIxMDowMDoxMSAtIDAwOjAwOjAwXCIgXVxyXG5cdFx0XHRcdFx0Ly8gX3dwYmMuYm9va2luZ3NfaW5fY2FsZW5kYXJfX2dldF9mb3JfZGF0ZSgyLCcyMDIzLTA4LTIxJylbMl0uYm9va2VkX3RpbWVfc2xvdHMubWVyZ2VkX3NlY29uZHNcdFx0XHQ9IFsgIFsgMjUyMTEsIDI3MDAyIF0sIFsgMzYwMTEsIDg2NDAwIF0gIF1cclxuXHJcblx0XHRcdFx0XHRpZiAoIGZhbHNlICE9PSBfd3BiYy5ib29raW5nc19pbl9jYWxlbmRhcl9fZ2V0X2Zvcl9kYXRlKCByZXNvdXJjZV9pZCwgc3FsX2RhdGUgKSApe1xyXG5cdFx0XHRcdFx0XHRtZXJnZWRfc2Vjb25kcyA9IF93cGJjLmJvb2tpbmdzX2luX2NhbGVuZGFyX19nZXRfZm9yX2RhdGUoIHJlc291cmNlX2lkLCBzcWxfZGF0ZSApWyBjaGlsZF9yZXNvdXJjZV9pZCBdLmJvb2tlZF90aW1lX3Nsb3RzLm1lcmdlZF9zZWNvbmRzO1x0XHQvLyBbICBbIDI1MjExLCAyNzAwMiBdLCBbIDM2MDExLCA4NjQwMCBdICBdXHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRtZXJnZWRfc2Vjb25kcyA9IFtdO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKCB0aW1lX2ZpZWxkc19vYmoudGltZXNfYXNfc2Vjb25kcy5sZW5ndGggPiAxICl7XHJcblx0XHRcdFx0XHRcdGlzX2ludGVyc2VjdCA9IHdwYmNfaXNfaW50ZXJzZWN0X19yYW5nZV90aW1lX2ludGVydmFsKCAgW1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRbXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KCBwYXJzZUludCggdGltZV9maWVsZHNfb2JqLnRpbWVzX2FzX3NlY29uZHNbMF0gKSArIDIwICksXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KCBwYXJzZUludCggdGltZV9maWVsZHNfb2JqLnRpbWVzX2FzX3NlY29uZHNbMV0gKSAtIDIwIClcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0LCBtZXJnZWRfc2Vjb25kcyApO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0aXNfY2hlY2tfaW4gPSAoLTEgIT09IHRpbWVfZmllbGRzX29iai5uYW1lLmluZGV4T2YoICdzdGFydCcgKSk7XHJcblx0XHRcdFx0XHRcdGlzX2ludGVyc2VjdCA9IHdwYmNfaXNfaW50ZXJzZWN0X19vbmVfdGltZV9pbnRlcnZhbChcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCggKCBpc19jaGVja19pbiApXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgID8gcGFyc2VJbnQoIHRpbWVfZmllbGRzX29iai50aW1lc19hc19zZWNvbmRzICkgKyAyMFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICA6IHBhcnNlSW50KCB0aW1lX2ZpZWxkc19vYmoudGltZXNfYXNfc2Vjb25kcyApIC0gMjBcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCwgbWVyZ2VkX3NlY29uZHMgKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGlmIChpc19pbnRlcnNlY3Qpe1xyXG5cdFx0XHRcdFx0XHRob3dfbWFueV9yZXNvdXJjZXNfaW50ZXJzZWN0ZWQrKztcdFx0XHQvLyBJbmNyZWFzZVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGlmICggY2hpbGRfcmVzb3VyY2VzX2Fyci5sZW5ndGggPT0gaG93X21hbnlfcmVzb3VyY2VzX2ludGVyc2VjdGVkICkge1xyXG5cdFx0XHRcdFx0Ly8gQWxsIHJlc291cmNlcyBpbnRlcnNlY3RlZCwgIHRoZW4gIGl0J3MgbWVhbnMgdGhhdCB0aGlzIHRpbWUtc2xvdCBvciB0aW1lIG11c3QgIGJlICBEaXNhYmxlZCwgYW5kIHdlIGNhbiAgZXhpc3QgIGZyb20gICBzZWxlY3RlZF9kYXRlc19hcnIgTE9PUFxyXG5cclxuXHRcdFx0XHRcdHRpbWVfZmllbGRzX29ial9hcnJbIGZpZWxkX2tleSBdLmRpc2FibGVkID0gMTtcclxuXHRcdFx0XHRcdGJyZWFrO1x0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBleGlzdCAgZnJvbSAgIERhdGVzIExPT1BcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblxyXG5cdFx0Ly8gNS4gTm93IHdlIGNhbiBkaXNhYmxlIHRpbWUgc2xvdCBpbiBIVE1MIGJ5ICB1c2luZyAgKCBmaWVsZC5kaXNhYmxlZCA9PSAxICkgcHJvcGVydHlcclxuXHRcdHdwYmNfX2h0bWxfX3RpbWVfZmllbGRfb3B0aW9uc19fc2V0X2Rpc2FibGVkKCB0aW1lX2ZpZWxkc19vYmpfYXJyICk7XHJcblxyXG5cdFx0alF1ZXJ5KCBcIi5ib29raW5nX2Zvcm1fZGl2XCIgKS50cmlnZ2VyKCAnd3BiY19ob29rX3RpbWVzbG90c19kaXNhYmxlZCcsIFtyZXNvdXJjZV9pZCwgc2VsZWN0ZWRfZGF0ZXNfYXJyXSApO1x0XHRcdFx0XHQvLyBUcmlnZ2VyIGhvb2sgb24gZGlzYWJsaW5nIHRpbWVzbG90cy5cdFx0VXNhZ2U6IFx0alF1ZXJ5KCBcIi5ib29raW5nX2Zvcm1fZGl2XCIgKS5vbiggJ3dwYmNfaG9va190aW1lc2xvdHNfZGlzYWJsZWQnLCBmdW5jdGlvbiAoIGV2ZW50LCBia190eXBlLCBhbGxfZGF0ZXMgKXsgLi4uIH0gKTtcdFx0Ly8gRml4SW46IDguNy4xMS45LlxyXG5cdH1cclxuXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBDaGVjayBpZiBzcGVjaWZpYyB0aW1lKC1zbG90KSBhbHJlYWR5ICBpbiB0aGUgcGFzdCBmb3Igc2VsZWN0ZWQgZGF0ZVxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSBqc19jdXJyZW50X3RpbWVfdG9fY2hlY2tcdFx0LSBKUyBEYXRlXHJcblx0XHQgKiBAcGFyYW0gc3FsX2RhdGVcdFx0XHRcdFx0XHQtICcyMDI1LTAxLTI2J1xyXG5cdFx0ICogQHBhcmFtIHRpbWVfZmllbGRzX29ialx0XHRcdFx0LSBPYmplY3RcclxuXHRcdCAqIEByZXR1cm5zIHtib29sZWFufVxyXG5cdFx0ICovXHJcblx0XHRmdW5jdGlvbiB3cGJjX2NoZWNrX2lzX3RpbWVfaW5fcGFzdCgganNfY3VycmVudF90aW1lX3RvX2NoZWNrLCBzcWxfZGF0ZSwgdGltZV9maWVsZHNfb2JqICkge1xyXG5cclxuXHRcdFx0Ly8gRml4SW46IDEwLjkuNi40XHJcblx0XHRcdHZhciBzcWxfZGF0ZV9hcnIgPSBzcWxfZGF0ZS5zcGxpdCggJy0nICk7XHJcblx0XHRcdHZhciBzcWxfZGF0ZV9fbWlkbmlnaHQgPSBuZXcgRGF0ZSggcGFyc2VJbnQoIHNxbF9kYXRlX2FyclswXSApLCAoIHBhcnNlSW50KCBzcWxfZGF0ZV9hcnJbMV0gKSAtIDEgKSwgcGFyc2VJbnQoIHNxbF9kYXRlX2FyclsyXSApLCAwLCAwLCAwICk7XHJcblx0XHRcdHZhciBzcWxfZGF0ZV9fbWlkbmlnaHRfbWlsaXNlY29uZHMgPSBzcWxfZGF0ZV9fbWlkbmlnaHQuZ2V0VGltZSgpO1xyXG5cclxuXHRcdFx0dmFyIGlzX2ludGVyc2VjdCA9IGZhbHNlO1xyXG5cclxuXHRcdFx0aWYgKCB0aW1lX2ZpZWxkc19vYmoudGltZXNfYXNfc2Vjb25kcy5sZW5ndGggPiAxICkge1xyXG5cclxuXHRcdFx0XHRpZiAoIGpzX2N1cnJlbnRfdGltZV90b19jaGVjay5nZXRUaW1lKCkgPiAoc3FsX2RhdGVfX21pZG5pZ2h0X21pbGlzZWNvbmRzICsgKHBhcnNlSW50KCB0aW1lX2ZpZWxkc19vYmoudGltZXNfYXNfc2Vjb25kc1swXSApICsgMjApICogMTAwMCkgKSB7XHJcblx0XHRcdFx0XHRpc19pbnRlcnNlY3QgPSB0cnVlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAoIGpzX2N1cnJlbnRfdGltZV90b19jaGVjay5nZXRUaW1lKCkgPiAoc3FsX2RhdGVfX21pZG5pZ2h0X21pbGlzZWNvbmRzICsgKHBhcnNlSW50KCB0aW1lX2ZpZWxkc19vYmoudGltZXNfYXNfc2Vjb25kc1sxXSApIC0gMjApICogMTAwMCkgKSB7XHJcblx0XHRcdFx0XHRpc19pbnRlcnNlY3QgPSB0cnVlO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0dmFyIGlzX2NoZWNrX2luID0gKC0xICE9PSB0aW1lX2ZpZWxkc19vYmoubmFtZS5pbmRleE9mKCAnc3RhcnQnICkpO1xyXG5cclxuXHRcdFx0XHR2YXIgdGltZXNfYXNfc2Vjb25kc19jaGVjayA9IChpc19jaGVja19pbikgPyBwYXJzZUludCggdGltZV9maWVsZHNfb2JqLnRpbWVzX2FzX3NlY29uZHMgKSArIDIwIDogcGFyc2VJbnQoIHRpbWVfZmllbGRzX29iai50aW1lc19hc19zZWNvbmRzICkgLSAyMDtcclxuXHJcblx0XHRcdFx0dGltZXNfYXNfc2Vjb25kc19jaGVjayA9IHNxbF9kYXRlX19taWRuaWdodF9taWxpc2Vjb25kcyArIHRpbWVzX2FzX3NlY29uZHNfY2hlY2sgKiAxMDAwO1xyXG5cclxuXHRcdFx0XHRpZiAoIGpzX2N1cnJlbnRfdGltZV90b19jaGVjay5nZXRUaW1lKCkgPiB0aW1lc19hc19zZWNvbmRzX2NoZWNrICkge1xyXG5cdFx0XHRcdFx0aXNfaW50ZXJzZWN0ID0gdHJ1ZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHJldHVybiBpc19pbnRlcnNlY3Q7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBJcyBudW1iZXIgaW5zaWRlIC9pbnRlcnNlY3QgIG9mIGFycmF5IG9mIGludGVydmFscyA/XHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHRpbWVfQVx0XHQgICAgIFx0LSAyNTgwMFxyXG5cdFx0ICogQHBhcmFtIHRpbWVfaW50ZXJ2YWxfQlx0XHQtIFsgIFsgMjUyMTEsIDI3MDAyIF0sIFsgMzYwMTEsIDg2NDAwIF0gIF1cclxuXHRcdCAqIEByZXR1cm5zIHtib29sZWFufVxyXG5cdFx0ICovXHJcblx0XHRmdW5jdGlvbiB3cGJjX2lzX2ludGVyc2VjdF9fb25lX3RpbWVfaW50ZXJ2YWwoIHRpbWVfQSwgdGltZV9pbnRlcnZhbF9CICl7XHJcblxyXG5cdFx0XHRmb3IgKCB2YXIgaiA9IDA7IGogPCB0aW1lX2ludGVydmFsX0IubGVuZ3RoOyBqKysgKXtcclxuXHJcblx0XHRcdFx0aWYgKCAocGFyc2VJbnQoIHRpbWVfQSApID4gcGFyc2VJbnQoIHRpbWVfaW50ZXJ2YWxfQlsgaiBdWyAwIF0gKSkgJiYgKHBhcnNlSW50KCB0aW1lX0EgKSA8IHBhcnNlSW50KCB0aW1lX2ludGVydmFsX0JbIGogXVsgMSBdICkpICl7XHJcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gaWYgKCAoIHBhcnNlSW50KCB0aW1lX0EgKSA9PSBwYXJzZUludCggdGltZV9pbnRlcnZhbF9CWyBqIF1bIDAgXSApICkgfHwgKCBwYXJzZUludCggdGltZV9BICkgPT0gcGFyc2VJbnQoIHRpbWVfaW50ZXJ2YWxfQlsgaiBdWyAxIF0gKSApICkge1xyXG5cdFx0XHRcdC8vIFx0XHRcdC8vIFRpbWUgQSBqdXN0ICBhdCAgdGhlIGJvcmRlciBvZiBpbnRlcnZhbFxyXG5cdFx0XHRcdC8vIH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdCAgICByZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBJcyB0aGVzZSBhcnJheSBvZiBpbnRlcnZhbHMgaW50ZXJzZWN0ZWQgP1xyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB0aW1lX2ludGVydmFsX0FcdFx0LSBbIFsgMjE2MDAsIDIzNDAwIF0gXVxyXG5cdFx0ICogQHBhcmFtIHRpbWVfaW50ZXJ2YWxfQlx0XHQtIFsgIFsgMjUyMTEsIDI3MDAyIF0sIFsgMzYwMTEsIDg2NDAwIF0gIF1cclxuXHRcdCAqIEByZXR1cm5zIHtib29sZWFufVxyXG5cdFx0ICovXHJcblx0XHRmdW5jdGlvbiB3cGJjX2lzX2ludGVyc2VjdF9fcmFuZ2VfdGltZV9pbnRlcnZhbCggdGltZV9pbnRlcnZhbF9BLCB0aW1lX2ludGVydmFsX0IgKXtcclxuXHJcblx0XHRcdHZhciBpc19pbnRlcnNlY3Q7XHJcblxyXG5cdFx0XHRmb3IgKCB2YXIgaSA9IDA7IGkgPCB0aW1lX2ludGVydmFsX0EubGVuZ3RoOyBpKysgKXtcclxuXHJcblx0XHRcdFx0Zm9yICggdmFyIGogPSAwOyBqIDwgdGltZV9pbnRlcnZhbF9CLmxlbmd0aDsgaisrICl7XHJcblxyXG5cdFx0XHRcdFx0aXNfaW50ZXJzZWN0ID0gd3BiY19pbnRlcnZhbHNfX2lzX2ludGVyc2VjdGVkKCB0aW1lX2ludGVydmFsX0FbIGkgXSwgdGltZV9pbnRlcnZhbF9CWyBqIF0gKTtcclxuXHJcblx0XHRcdFx0XHRpZiAoIGlzX2ludGVyc2VjdCApe1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEdldCBhbGwgdGltZSBmaWVsZHMgaW4gdGhlIGJvb2tpbmcgZm9ybSBhcyBhcnJheSAgb2Ygb2JqZWN0c1xyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSByZXNvdXJjZV9pZFxyXG5cdFx0ICogQHJldHVybnMgW11cclxuXHRcdCAqXHJcblx0XHQgKiBcdFx0RXhhbXBsZTpcclxuXHRcdCAqIFx0XHRcdFx0XHRbXHJcblx0XHQgKiBcdFx0XHRcdFx0IFx0ICAge1xyXG5cdFx0ICogXHRcdFx0XHRcdFx0XHRcdHZhbHVlX29wdGlvbl8yNGg6ICAgJzA2OjAwIC0gMDY6MzAnXHJcblx0XHQgKiBcdFx0XHRcdFx0XHRcdFx0dGltZXNfYXNfc2Vjb25kczogICBbIDIxNjAwLCAyMzQwMCBdXHJcblx0XHQgKiBcdFx0XHRcdFx0IFx0ICAgXHRcdGpxdWVyeV9vcHRpb246ICAgICAgalF1ZXJ5X09iamVjdCB7fVxyXG5cdFx0ICogXHRcdFx0XHRcdFx0XHRcdG5hbWU6ICAgICAgICAgICAgICAgJ3JhbmdldGltZTJbXSdcclxuXHRcdCAqIFx0XHRcdFx0XHQgICAgIH1cclxuXHRcdCAqIFx0XHRcdFx0XHQgIC4uLlxyXG5cdFx0ICogXHRcdFx0XHRcdFx0ICAge1xyXG5cdFx0ICogXHRcdFx0XHRcdFx0XHRcdHZhbHVlX29wdGlvbl8yNGg6ICAgJzA2OjAwJ1xyXG5cdFx0ICogXHRcdFx0XHRcdFx0XHRcdHRpbWVzX2FzX3NlY29uZHM6ICAgWyAyMTYwMCBdXHJcblx0XHQgKiBcdFx0XHRcdFx0XHQgICBcdFx0anF1ZXJ5X29wdGlvbjogICAgICBqUXVlcnlfT2JqZWN0IHt9XHJcblx0XHQgKiBcdFx0XHRcdFx0XHRcdFx0bmFtZTogICAgICAgICAgICAgICAnc3RhcnR0aW1lMltdJ1xyXG5cdFx0ICogIFx0XHRcdFx0XHQgICAgfVxyXG5cdFx0ICogXHRcdFx0XHRcdCBdXHJcblx0XHQgKi9cclxuXHRcdGZ1bmN0aW9uIHdwYmNfZ2V0X190aW1lX2ZpZWxkc19faW5fYm9va2luZ19mb3JtX19hc19hcnIoIHJlc291cmNlX2lkICl7XHJcblx0XHQgICAgLyoqXHJcblx0XHRcdCAqIEZpZWxkcyB3aXRoICBbXSAgbGlrZSB0aGlzICAgc2VsZWN0W25hbWU9XCJyYW5nZXRpbWUxW11cIl1cclxuXHRcdFx0ICogaXQncyB3aGVuIHdlIGhhdmUgJ211bHRpcGxlJyBpbiBzaG9ydGNvZGU6ICAgW3NlbGVjdCogcmFuZ2V0aW1lIG11bHRpcGxlICBcIjA2OjAwIC0gMDY6MzBcIiAuLi4gXVxyXG5cdFx0XHQgKi9cclxuXHRcdFx0dmFyIHRpbWVfZmllbGRzX2Fycj1bXHJcblx0XHRcdFx0XHRcdFx0XHRcdCdzZWxlY3RbbmFtZT1cInJhbmdldGltZScgKyByZXNvdXJjZV9pZCArICdcIl0nLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQnc2VsZWN0W25hbWU9XCJyYW5nZXRpbWUnICsgcmVzb3VyY2VfaWQgKyAnW11cIl0nLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQnc2VsZWN0W25hbWU9XCJzdGFydHRpbWUnICsgcmVzb3VyY2VfaWQgKyAnXCJdJyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0J3NlbGVjdFtuYW1lPVwic3RhcnR0aW1lJyArIHJlc291cmNlX2lkICsgJ1tdXCJdJyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0J3NlbGVjdFtuYW1lPVwiZW5kdGltZScgKyByZXNvdXJjZV9pZCArICdcIl0nLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQnc2VsZWN0W25hbWU9XCJlbmR0aW1lJyArIHJlc291cmNlX2lkICsgJ1tdXCJdJ1xyXG5cdFx0XHRcdFx0XHRcdFx0XTtcclxuXHJcblx0XHRcdHZhciB0aW1lX2ZpZWxkc19vYmpfYXJyID0gW107XHJcblxyXG5cdFx0XHQvLyBMb29wIGFsbCBUaW1lIEZpZWxkc1xyXG5cdFx0XHRmb3IgKCB2YXIgY3RmPSAwOyBjdGYgPCB0aW1lX2ZpZWxkc19hcnIubGVuZ3RoOyBjdGYrKyApe1xyXG5cclxuXHRcdFx0XHR2YXIgdGltZV9maWVsZCA9IHRpbWVfZmllbGRzX2FyclsgY3RmIF07XHJcblx0XHRcdFx0dmFyIHRpbWVfb3B0aW9uID0galF1ZXJ5KCB0aW1lX2ZpZWxkICsgJyBvcHRpb24nICk7XHJcblxyXG5cdFx0XHRcdC8vIExvb3AgYWxsIG9wdGlvbnMgaW4gdGltZSBmaWVsZFxyXG5cdFx0XHRcdGZvciAoIHZhciBqID0gMDsgaiA8IHRpbWVfb3B0aW9uLmxlbmd0aDsgaisrICl7XHJcblxyXG5cdFx0XHRcdFx0dmFyIGpxdWVyeV9vcHRpb24gPSBqUXVlcnkoIHRpbWVfZmllbGQgKyAnIG9wdGlvbjplcSgnICsgaiArICcpJyApO1xyXG5cdFx0XHRcdFx0dmFyIHZhbHVlX29wdGlvbl9zZWNvbmRzX2FyciA9IGpxdWVyeV9vcHRpb24udmFsKCkuc3BsaXQoICctJyApO1xyXG5cdFx0XHRcdFx0dmFyIHRpbWVzX2FzX3NlY29uZHMgPSBbXTtcclxuXHJcblx0XHRcdFx0XHQvLyBHZXQgdGltZSBhcyBzZWNvbmRzXHJcblx0XHRcdFx0XHRpZiAoIHZhbHVlX29wdGlvbl9zZWNvbmRzX2Fyci5sZW5ndGggKXtcdFx0XHRcdFx0XHRcdFx0XHQvLyBGaXhJbjogOS44LjEwLjEuXHJcblx0XHRcdFx0XHRcdGZvciAoIGxldCBpID0gMDsgaSA8IHZhbHVlX29wdGlvbl9zZWNvbmRzX2Fyci5sZW5ndGg7IGkrKyApe1x0XHQvLyBGaXhJbjogMTAuMC4wLjU2LlxyXG5cdFx0XHRcdFx0XHRcdC8vIHZhbHVlX29wdGlvbl9zZWNvbmRzX2FycltpXSA9ICcxNDowMCAnICB8ICcgMTY6MDAnICAgKGlmIGZyb20gJ3JhbmdldGltZScpIGFuZCAnMTY6MDAnICBpZiAoc3RhcnQvZW5kIHRpbWUpXHJcblxyXG5cdFx0XHRcdFx0XHRcdHZhciBzdGFydF9lbmRfdGltZXNfYXJyID0gdmFsdWVfb3B0aW9uX3NlY29uZHNfYXJyWyBpIF0udHJpbSgpLnNwbGl0KCAnOicgKTtcclxuXHJcblx0XHRcdFx0XHRcdFx0dmFyIHRpbWVfaW5fc2Vjb25kcyA9IHBhcnNlSW50KCBzdGFydF9lbmRfdGltZXNfYXJyWyAwIF0gKSAqIDYwICogNjAgKyBwYXJzZUludCggc3RhcnRfZW5kX3RpbWVzX2FyclsgMSBdICkgKiA2MDtcclxuXHJcblx0XHRcdFx0XHRcdFx0dGltZXNfYXNfc2Vjb25kcy5wdXNoKCB0aW1lX2luX3NlY29uZHMgKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdHRpbWVfZmllbGRzX29ial9hcnIucHVzaCgge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnbmFtZScgICAgICAgICAgICA6IGpRdWVyeSggdGltZV9maWVsZCApLmF0dHIoICduYW1lJyApLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQndmFsdWVfb3B0aW9uXzI0aCc6IGpxdWVyeV9vcHRpb24udmFsKCksXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdqcXVlcnlfb3B0aW9uJyAgIDoganF1ZXJ5X29wdGlvbixcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3RpbWVzX2FzX3NlY29uZHMnOiB0aW1lc19hc19zZWNvbmRzXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9ICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4gdGltZV9maWVsZHNfb2JqX2FycjtcclxuXHRcdH1cclxuXHJcblx0XHRcdC8qKlxyXG5cdFx0XHQgKiBEaXNhYmxlIEhUTUwgb3B0aW9ucyBhbmQgYWRkIGJvb2tlZCBDU1MgY2xhc3NcclxuXHRcdFx0ICpcclxuXHRcdFx0ICogQHBhcmFtIHRpbWVfZmllbGRzX29ial9hcnIgICAgICAtIHRoaXMgdmFsdWUgaXMgZnJvbSAgdGhlIGZ1bmM6XHJcblx0XHRcdCAqICAgICBcdHdwYmNfZ2V0X190aW1lX2ZpZWxkc19faW5fYm9va2luZ19mb3JtX19hc19hcnIoIHJlc291cmNlX2lkIClcclxuXHRcdFx0ICogXHRcdFx0XHRcdFtcclxuXHRcdFx0ICogXHRcdFx0XHRcdCBcdCAgIHtcdGpxdWVyeV9vcHRpb246ICAgICAgalF1ZXJ5X09iamVjdCB7fVxyXG5cdFx0XHQgKiBcdFx0XHRcdFx0XHRcdFx0bmFtZTogICAgICAgICAgICAgICAncmFuZ2V0aW1lMltdJ1xyXG5cdFx0XHQgKiBcdFx0XHRcdFx0XHRcdFx0dGltZXNfYXNfc2Vjb25kczogICBbIDIxNjAwLCAyMzQwMCBdXHJcblx0XHRcdCAqIFx0XHRcdFx0XHRcdFx0XHR2YWx1ZV9vcHRpb25fMjRoOiAgICcwNjowMCAtIDA2OjMwJ1xyXG5cdFx0XHQgKiBcdCAgXHRcdFx0XHRcdFx0ICAgIGRpc2FibGVkID0gMVxyXG5cdFx0XHQgKiBcdFx0XHRcdFx0ICAgICB9XHJcblx0XHRcdCAqIFx0XHRcdFx0XHQgIC4uLlxyXG5cdFx0XHQgKiBcdFx0XHRcdFx0XHQgICB7XHRqcXVlcnlfb3B0aW9uOiAgICAgIGpRdWVyeV9PYmplY3Qge31cclxuXHRcdFx0ICogXHRcdFx0XHRcdFx0XHRcdG5hbWU6ICAgICAgICAgICAgICAgJ3N0YXJ0dGltZTJbXSdcclxuXHRcdFx0ICogXHRcdFx0XHRcdFx0XHRcdHRpbWVzX2FzX3NlY29uZHM6ICAgWyAyMTYwMCBdXHJcblx0XHRcdCAqIFx0XHRcdFx0XHRcdFx0XHR2YWx1ZV9vcHRpb25fMjRoOiAgICcwNjowMCdcclxuXHRcdFx0ICogICBcdFx0XHRcdFx0XHRcdGRpc2FibGVkID0gMFxyXG5cdFx0XHQgKiAgXHRcdFx0XHRcdCAgICB9XHJcblx0XHRcdCAqIFx0XHRcdFx0XHQgXVxyXG5cdFx0XHQgKlxyXG5cdFx0XHQgKi9cclxuXHRcdFx0ZnVuY3Rpb24gd3BiY19faHRtbF9fdGltZV9maWVsZF9vcHRpb25zX19zZXRfZGlzYWJsZWQoIHRpbWVfZmllbGRzX29ial9hcnIgKXtcclxuXHJcblx0XHRcdFx0dmFyIGpxdWVyeV9vcHRpb247XHJcblxyXG5cdFx0XHRcdGZvciAoIHZhciBpID0gMDsgaSA8IHRpbWVfZmllbGRzX29ial9hcnIubGVuZ3RoOyBpKysgKXtcclxuXHJcblx0XHRcdFx0XHR2YXIganF1ZXJ5X29wdGlvbiA9IHRpbWVfZmllbGRzX29ial9hcnJbIGkgXS5qcXVlcnlfb3B0aW9uO1xyXG5cclxuXHRcdFx0XHRcdGlmICggMSA9PSB0aW1lX2ZpZWxkc19vYmpfYXJyWyBpIF0uZGlzYWJsZWQgKXtcclxuXHRcdFx0XHRcdFx0anF1ZXJ5X29wdGlvbi5wcm9wKCAnZGlzYWJsZWQnLCB0cnVlICk7IFx0XHQvLyBNYWtlIGRpc2FibGUgc29tZSBvcHRpb25zXHJcblx0XHRcdFx0XHRcdGpxdWVyeV9vcHRpb24uYWRkQ2xhc3MoICdib29rZWQnICk7ICAgICAgICAgICBcdC8vIEFkZCBcImJvb2tlZFwiIENTUyBjbGFzc1xyXG5cclxuXHRcdFx0XHRcdFx0Ly8gaWYgdGhpcyBib29rZWQgZWxlbWVudCBzZWxlY3RlZCAtLT4gdGhlbiBkZXNlbGVjdCAgaXRcclxuXHRcdFx0XHRcdFx0aWYgKCBqcXVlcnlfb3B0aW9uLnByb3AoICdzZWxlY3RlZCcgKSApe1xyXG5cdFx0XHRcdFx0XHRcdGpxdWVyeV9vcHRpb24ucHJvcCggJ3NlbGVjdGVkJywgZmFsc2UgKTtcclxuXHJcblx0XHRcdFx0XHRcdFx0anF1ZXJ5X29wdGlvbi5wYXJlbnQoKS5maW5kKCAnb3B0aW9uOm5vdChbZGlzYWJsZWRdKTpmaXJzdCcgKS5wcm9wKCAnc2VsZWN0ZWQnLCB0cnVlICkudHJpZ2dlciggXCJjaGFuZ2VcIiApO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0anF1ZXJ5X29wdGlvbi5wcm9wKCAnZGlzYWJsZWQnLCBmYWxzZSApOyAgXHRcdC8vIE1ha2UgYWN0aXZlIGFsbCB0aW1lc1xyXG5cdFx0XHRcdFx0XHRqcXVlcnlfb3B0aW9uLnJlbW92ZUNsYXNzKCAnYm9va2VkJyApOyAgIFx0XHQvLyBSZW1vdmUgY2xhc3MgXCJib29rZWRcIlxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdH1cclxuXHJcblx0LyoqXHJcblx0ICogQ2hlY2sgaWYgdGhpcyB0aW1lX3JhbmdlIHwgVGltZV9TbG90IGlzIEZ1bGwgRGF5ICBib29rZWRcclxuXHQgKlxyXG5cdCAqIEBwYXJhbSB0aW1lc2xvdF9hcnJfaW5fc2Vjb25kc1x0XHQtIFsgMzYwMTEsIDg2NDAwIF1cclxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuXHQgKi9cclxuXHRmdW5jdGlvbiB3cGJjX2lzX3RoaXNfdGltZXNsb3RfX2Z1bGxfZGF5X2Jvb2tlZCggdGltZXNsb3RfYXJyX2luX3NlY29uZHMgKXtcclxuXHJcblx0XHRpZiAoXHJcblx0XHRcdFx0KCB0aW1lc2xvdF9hcnJfaW5fc2Vjb25kcy5sZW5ndGggPiAxIClcclxuXHRcdFx0JiYgKCBwYXJzZUludCggdGltZXNsb3RfYXJyX2luX3NlY29uZHNbIDAgXSApIDwgMzAgKVxyXG5cdFx0XHQmJiAoIHBhcnNlSW50KCB0aW1lc2xvdF9hcnJfaW5fc2Vjb25kc1sgMSBdICkgPiAgKCAoMjQgKiA2MCAqIDYwKSAtIDMwKSApXHJcblx0XHQpe1xyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cclxuXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHQvKiAgPT0gIFMgZSBsIGUgYyB0IGUgZCAgICBEIGEgdCBlIHMgIC8gIFQgaSBtIGUgLSBGIGkgZSBsIGQgcyAgPT1cclxuXHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuXHQvKipcclxuXHQgKiAgR2V0IGFsbCBzZWxlY3RlZCBkYXRlcyBpbiBTUUwgZm9ybWF0IGxpa2UgdGhpcyBbIFwiMjAyMy0wOC0yM1wiLCBcIjIwMjMtMDgtMjRcIiAsIC4uLiBdXHJcblx0ICpcclxuXHQgKiBAcGFyYW0gcmVzb3VyY2VfaWRcclxuXHQgKiBAcmV0dXJucyB7W119XHRcdFx0WyBcIjIwMjMtMDgtMjNcIiwgXCIyMDIzLTA4LTI0XCIsIFwiMjAyMy0wOC0yNVwiLCBcIjIwMjMtMDgtMjZcIiwgXCIyMDIzLTA4LTI3XCIsIFwiMjAyMy0wOC0yOFwiLFxyXG5cdCAqICAgICBcIjIwMjMtMDgtMjlcIiBdXHJcblx0ICovXHJcblx0ZnVuY3Rpb24gd3BiY19nZXRfX3NlbGVjdGVkX2RhdGVzX3NxbF9fYXNfYXJyKCByZXNvdXJjZV9pZCApe1xyXG5cclxuXHRcdHZhciBzZWxlY3RlZF9kYXRlc19hcnIgPSBbXTtcclxuXHRcdHNlbGVjdGVkX2RhdGVzX2FyciA9IGpRdWVyeSggJyNkYXRlX2Jvb2tpbmcnICsgcmVzb3VyY2VfaWQgKS52YWwoKS5zcGxpdCgnLCcpO1xyXG5cclxuXHRcdGlmICggc2VsZWN0ZWRfZGF0ZXNfYXJyLmxlbmd0aCApe1x0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIEZpeEluOiA5LjguMTAuMS5cclxuXHRcdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgc2VsZWN0ZWRfZGF0ZXNfYXJyLmxlbmd0aDsgaSsrICl7XHRcdFx0XHRcdFx0Ly8gRml4SW46IDEwLjAuMC41Ni5cclxuXHRcdFx0XHRzZWxlY3RlZF9kYXRlc19hcnJbIGkgXSA9IHNlbGVjdGVkX2RhdGVzX2FyclsgaSBdLnRyaW0oKTtcclxuXHRcdFx0XHRzZWxlY3RlZF9kYXRlc19hcnJbIGkgXSA9IHNlbGVjdGVkX2RhdGVzX2FyclsgaSBdLnNwbGl0KCAnLicgKTtcclxuXHRcdFx0XHRpZiAoIHNlbGVjdGVkX2RhdGVzX2FyclsgaSBdLmxlbmd0aCA+IDEgKXtcclxuXHRcdFx0XHRcdHNlbGVjdGVkX2RhdGVzX2FyclsgaSBdID0gc2VsZWN0ZWRfZGF0ZXNfYXJyWyBpIF1bIDIgXSArICctJyArIHNlbGVjdGVkX2RhdGVzX2FyclsgaSBdWyAxIF0gKyAnLScgKyBzZWxlY3RlZF9kYXRlc19hcnJbIGkgXVsgMCBdO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIFJlbW92ZSBlbXB0eSBlbGVtZW50cyBmcm9tIGFuIGFycmF5XHJcblx0XHRzZWxlY3RlZF9kYXRlc19hcnIgPSBzZWxlY3RlZF9kYXRlc19hcnIuZmlsdGVyKCBmdW5jdGlvbiAoIG4gKXsgcmV0dXJuIHBhcnNlSW50KG4pOyB9ICk7XHJcblxyXG5cdFx0c2VsZWN0ZWRfZGF0ZXNfYXJyLnNvcnQoKTtcclxuXHJcblx0XHRyZXR1cm4gc2VsZWN0ZWRfZGF0ZXNfYXJyO1xyXG5cdH1cclxuXHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldCBhbGwgdGltZSBmaWVsZHMgaW4gdGhlIGJvb2tpbmcgZm9ybSBhcyBhcnJheSAgb2Ygb2JqZWN0c1xyXG5cdCAqXHJcblx0ICogQHBhcmFtIHJlc291cmNlX2lkXHJcblx0ICogQHBhcmFtIGlzX29ubHlfc2VsZWN0ZWRfdGltZVxyXG5cdCAqIEByZXR1cm5zIFtdXHJcblx0ICpcclxuXHQgKiBcdFx0RXhhbXBsZTpcclxuXHQgKiBcdFx0XHRcdFx0W1xyXG5cdCAqIFx0XHRcdFx0XHQgXHQgICB7XHJcblx0ICogXHRcdFx0XHRcdFx0XHRcdHZhbHVlX29wdGlvbl8yNGg6ICAgJzA2OjAwIC0gMDY6MzAnXHJcblx0ICogXHRcdFx0XHRcdFx0XHRcdHRpbWVzX2FzX3NlY29uZHM6ICAgWyAyMTYwMCwgMjM0MDAgXVxyXG5cdCAqIFx0XHRcdFx0XHQgXHQgICBcdFx0anF1ZXJ5X29wdGlvbjogICAgICBqUXVlcnlfT2JqZWN0IHt9XHJcblx0ICogXHRcdFx0XHRcdFx0XHRcdG5hbWU6ICAgICAgICAgICAgICAgJ3JhbmdldGltZTJbXSdcclxuXHQgKiBcdFx0XHRcdFx0ICAgICB9XHJcblx0ICogXHRcdFx0XHRcdCAgLi4uXHJcblx0ICogXHRcdFx0XHRcdFx0ICAge1xyXG5cdCAqIFx0XHRcdFx0XHRcdFx0XHR2YWx1ZV9vcHRpb25fMjRoOiAgICcwNjowMCdcclxuXHQgKiBcdFx0XHRcdFx0XHRcdFx0dGltZXNfYXNfc2Vjb25kczogICBbIDIxNjAwIF1cclxuXHQgKiBcdFx0XHRcdFx0XHQgICBcdFx0anF1ZXJ5X29wdGlvbjogICAgICBqUXVlcnlfT2JqZWN0IHt9XHJcblx0ICogXHRcdFx0XHRcdFx0XHRcdG5hbWU6ICAgICAgICAgICAgICAgJ3N0YXJ0dGltZTJbXSdcclxuXHQgKiAgXHRcdFx0XHRcdCAgICB9XHJcblx0ICogXHRcdFx0XHRcdCBdXHJcblx0ICovXHJcblx0ZnVuY3Rpb24gd3BiY19nZXRfX3NlbGVjdGVkX3RpbWVfZmllbGRzX19pbl9ib29raW5nX2Zvcm1fX2FzX2FyciggcmVzb3VyY2VfaWQsIGlzX29ubHlfc2VsZWN0ZWRfdGltZSA9IHRydWUgKXtcclxuXHRcdC8qKlxyXG5cdFx0ICogRmllbGRzIHdpdGggIFtdICBsaWtlIHRoaXMgICBzZWxlY3RbbmFtZT1cInJhbmdldGltZTFbXVwiXVxyXG5cdFx0ICogaXQncyB3aGVuIHdlIGhhdmUgJ211bHRpcGxlJyBpbiBzaG9ydGNvZGU6ICAgW3NlbGVjdCogcmFuZ2V0aW1lIG11bHRpcGxlICBcIjA2OjAwIC0gMDY6MzBcIiAuLi4gXVxyXG5cdFx0ICovXHJcblx0XHR2YXIgdGltZV9maWVsZHNfYXJyPVtcclxuXHRcdFx0XHRcdFx0XHRcdCdzZWxlY3RbbmFtZT1cInJhbmdldGltZScgKyByZXNvdXJjZV9pZCArICdcIl0nLFxyXG5cdFx0XHRcdFx0XHRcdFx0J3NlbGVjdFtuYW1lPVwicmFuZ2V0aW1lJyArIHJlc291cmNlX2lkICsgJ1tdXCJdJyxcclxuXHRcdFx0XHRcdFx0XHRcdCdzZWxlY3RbbmFtZT1cInN0YXJ0dGltZScgKyByZXNvdXJjZV9pZCArICdcIl0nLFxyXG5cdFx0XHRcdFx0XHRcdFx0J3NlbGVjdFtuYW1lPVwic3RhcnR0aW1lJyArIHJlc291cmNlX2lkICsgJ1tdXCJdJyxcclxuXHRcdFx0XHRcdFx0XHRcdCdzZWxlY3RbbmFtZT1cImVuZHRpbWUnICsgcmVzb3VyY2VfaWQgKyAnXCJdJyxcclxuXHRcdFx0XHRcdFx0XHRcdCdzZWxlY3RbbmFtZT1cImVuZHRpbWUnICsgcmVzb3VyY2VfaWQgKyAnW11cIl0nLFxyXG5cdFx0XHRcdFx0XHRcdFx0J3NlbGVjdFtuYW1lPVwiZHVyYXRpb250aW1lJyArIHJlc291cmNlX2lkICsgJ1wiXScsXHJcblx0XHRcdFx0XHRcdFx0XHQnc2VsZWN0W25hbWU9XCJkdXJhdGlvbnRpbWUnICsgcmVzb3VyY2VfaWQgKyAnW11cIl0nXHJcblx0XHRcdFx0XHRcdFx0XTtcclxuXHJcblx0XHR2YXIgdGltZV9maWVsZHNfb2JqX2FyciA9IFtdO1xyXG5cclxuXHRcdC8vIExvb3AgYWxsIFRpbWUgRmllbGRzXHJcblx0XHRmb3IgKCB2YXIgY3RmPSAwOyBjdGYgPCB0aW1lX2ZpZWxkc19hcnIubGVuZ3RoOyBjdGYrKyApe1xyXG5cclxuXHRcdFx0dmFyIHRpbWVfZmllbGQgPSB0aW1lX2ZpZWxkc19hcnJbIGN0ZiBdO1xyXG5cclxuXHRcdFx0dmFyIHRpbWVfb3B0aW9uO1xyXG5cdFx0XHRpZiAoIGlzX29ubHlfc2VsZWN0ZWRfdGltZSApe1xyXG5cdFx0XHRcdHRpbWVfb3B0aW9uID0galF1ZXJ5KCAnI2Jvb2tpbmdfZm9ybScgKyByZXNvdXJjZV9pZCArICcgJyArIHRpbWVfZmllbGQgKyAnIG9wdGlvbjpzZWxlY3RlZCcgKTtcdFx0XHQvLyBFeGNsdWRlIGNvbmRpdGlvbmFsICBmaWVsZHMsICBiZWNhdXNlIG9mIHVzaW5nICcjYm9va2luZ19mb3JtMyAuLi4nXHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0dGltZV9vcHRpb24gPSBqUXVlcnkoICcjYm9va2luZ19mb3JtJyArIHJlc291cmNlX2lkICsgJyAnICsgdGltZV9maWVsZCArICcgb3B0aW9uJyApO1x0XHRcdFx0Ly8gQWxsICB0aW1lIGZpZWxkc1xyXG5cdFx0XHR9XHJcblxyXG5cclxuXHRcdFx0Ly8gTG9vcCBhbGwgb3B0aW9ucyBpbiB0aW1lIGZpZWxkXHJcblx0XHRcdGZvciAoIHZhciBqID0gMDsgaiA8IHRpbWVfb3B0aW9uLmxlbmd0aDsgaisrICl7XHJcblxyXG5cdFx0XHRcdHZhciBqcXVlcnlfb3B0aW9uID0galF1ZXJ5KCB0aW1lX29wdGlvblsgaiBdICk7XHRcdC8vIEdldCBvbmx5ICBzZWxlY3RlZCBvcHRpb25zIFx0Ly9qUXVlcnkoIHRpbWVfZmllbGQgKyAnIG9wdGlvbjplcSgnICsgaiArICcpJyApO1xyXG5cdFx0XHRcdHZhciB2YWx1ZV9vcHRpb25fc2Vjb25kc19hcnIgPSBqcXVlcnlfb3B0aW9uLnZhbCgpLnNwbGl0KCAnLScgKTtcclxuXHRcdFx0XHR2YXIgdGltZXNfYXNfc2Vjb25kcyA9IFtdO1xyXG5cclxuXHRcdFx0XHQvLyBHZXQgdGltZSBhcyBzZWNvbmRzXHJcblx0XHRcdFx0aWYgKCB2YWx1ZV9vcHRpb25fc2Vjb25kc19hcnIubGVuZ3RoICl7XHRcdFx0XHQgXHRcdFx0XHRcdFx0XHRcdC8vIEZpeEluOiA5LjguMTAuMS5cclxuXHRcdFx0XHRcdGZvciAoIGxldCBpID0gMDsgaSA8IHZhbHVlX29wdGlvbl9zZWNvbmRzX2Fyci5sZW5ndGg7IGkrKyApe1x0XHRcdFx0XHQvLyBGaXhJbjogMTAuMC4wLjU2LlxyXG5cdFx0XHRcdFx0XHQvLyB2YWx1ZV9vcHRpb25fc2Vjb25kc19hcnJbaV0gPSAnMTQ6MDAgJyAgfCAnIDE2OjAwJyAgIChpZiBmcm9tICdyYW5nZXRpbWUnKSBhbmQgJzE2OjAwJyAgaWYgKHN0YXJ0L2VuZCB0aW1lKVxyXG5cclxuXHRcdFx0XHRcdFx0dmFyIHN0YXJ0X2VuZF90aW1lc19hcnIgPSB2YWx1ZV9vcHRpb25fc2Vjb25kc19hcnJbIGkgXS50cmltKCkuc3BsaXQoICc6JyApO1xyXG5cclxuXHRcdFx0XHRcdFx0dmFyIHRpbWVfaW5fc2Vjb25kcyA9IHBhcnNlSW50KCBzdGFydF9lbmRfdGltZXNfYXJyWyAwIF0gKSAqIDYwICogNjAgKyBwYXJzZUludCggc3RhcnRfZW5kX3RpbWVzX2FyclsgMSBdICkgKiA2MDtcclxuXHJcblx0XHRcdFx0XHRcdHRpbWVzX2FzX3NlY29uZHMucHVzaCggdGltZV9pbl9zZWNvbmRzICk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHR0aW1lX2ZpZWxkc19vYmpfYXJyLnB1c2goIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCduYW1lJyAgICAgICAgICAgIDogalF1ZXJ5KCAnI2Jvb2tpbmdfZm9ybScgKyByZXNvdXJjZV9pZCArICcgJyArIHRpbWVfZmllbGQgKS5hdHRyKCAnbmFtZScgKSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCd2YWx1ZV9vcHRpb25fMjRoJzoganF1ZXJ5X29wdGlvbi52YWwoKSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdqcXVlcnlfb3B0aW9uJyAgIDoganF1ZXJ5X29wdGlvbixcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCd0aW1lc19hc19zZWNvbmRzJzogdGltZXNfYXNfc2Vjb25kc1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIFRleHQ6ICAgW3N0YXJ0dGltZV0gLSBbZW5kdGltZV0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0XHR2YXIgdGV4dF90aW1lX2ZpZWxkc19hcnI9W1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQnaW5wdXRbbmFtZT1cInN0YXJ0dGltZScgKyByZXNvdXJjZV9pZCArICdcIl0nLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQnaW5wdXRbbmFtZT1cImVuZHRpbWUnICsgcmVzb3VyY2VfaWQgKyAnXCJdJyxcclxuXHRcdFx0XHRcdFx0XHRcdF07XHJcblx0XHRmb3IgKCB2YXIgdGY9IDA7IHRmIDwgdGV4dF90aW1lX2ZpZWxkc19hcnIubGVuZ3RoOyB0ZisrICl7XHJcblxyXG5cdFx0XHR2YXIgdGV4dF9qcXVlcnkgPSBqUXVlcnkoICcjYm9va2luZ19mb3JtJyArIHJlc291cmNlX2lkICsgJyAnICsgdGV4dF90aW1lX2ZpZWxkc19hcnJbIHRmIF0gKTtcdFx0XHRcdFx0XHRcdFx0Ly8gRXhjbHVkZSBjb25kaXRpb25hbCAgZmllbGRzLCAgYmVjYXVzZSBvZiB1c2luZyAnI2Jvb2tpbmdfZm9ybTMgLi4uJ1xyXG5cdFx0XHRpZiAoIHRleHRfanF1ZXJ5Lmxlbmd0aCA+IDAgKXtcclxuXHJcblx0XHRcdFx0dmFyIHRpbWVfX2hfbV9fYXJyID0gdGV4dF9qcXVlcnkudmFsKCkudHJpbSgpLnNwbGl0KCAnOicgKTtcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gJzE0OjAwJ1xyXG5cdFx0XHRcdGlmICggMCA9PSB0aW1lX19oX21fX2Fyci5sZW5ndGggKXtcclxuXHRcdFx0XHRcdGNvbnRpbnVlO1x0XHRcdFx0XHRcdFx0XHRcdC8vIE5vdCBlbnRlcmVkIHRpbWUgdmFsdWUgaW4gYSBmaWVsZFxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAoIDEgPT0gdGltZV9faF9tX19hcnIubGVuZ3RoICl7XHJcblx0XHRcdFx0XHRpZiAoICcnID09PSB0aW1lX19oX21fX2FyclsgMCBdICl7XHJcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1x0XHRcdFx0XHRcdFx0XHQvLyBOb3QgZW50ZXJlZCB0aW1lIHZhbHVlIGluIGEgZmllbGRcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHRpbWVfX2hfbV9fYXJyWyAxIF0gPSAwO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHR2YXIgdGV4dF90aW1lX2luX3NlY29uZHMgPSBwYXJzZUludCggdGltZV9faF9tX19hcnJbIDAgXSApICogNjAgKiA2MCArIHBhcnNlSW50KCB0aW1lX19oX21fX2FyclsgMSBdICkgKiA2MDtcclxuXHJcblx0XHRcdFx0dmFyIHRleHRfdGltZXNfYXNfc2Vjb25kcyA9IFtdO1xyXG5cdFx0XHRcdHRleHRfdGltZXNfYXNfc2Vjb25kcy5wdXNoKCB0ZXh0X3RpbWVfaW5fc2Vjb25kcyApO1xyXG5cclxuXHRcdFx0XHR0aW1lX2ZpZWxkc19vYmpfYXJyLnB1c2goIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCduYW1lJyAgICAgICAgICAgIDogdGV4dF9qcXVlcnkuYXR0ciggJ25hbWUnICksXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQndmFsdWVfb3B0aW9uXzI0aCc6IHRleHRfanF1ZXJ5LnZhbCgpLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0J2pxdWVyeV9vcHRpb24nICAgOiB0ZXh0X2pxdWVyeSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCd0aW1lc19hc19zZWNvbmRzJzogdGV4dF90aW1lc19hc19zZWNvbmRzXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRpbWVfZmllbGRzX29ial9hcnI7XHJcblx0fVxyXG5cclxuXHJcblxyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuLyogID09ICBTIFUgUCBQIE8gUiBUICAgIGZvciAgICBDIEEgTCBFIE4gRCBBIFIgID09XHJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuXHQvKipcclxuXHQgKiBHZXQgQ2FsZW5kYXIgZGF0ZXBpY2sgSW5zdGFuY2UuXHJcblx0ICpcclxuXHQgKiBAcGFyYW0ge2ludHxzdHJpbmd9IHJlc291cmNlX2lkXHJcblx0ICogQHJldHVybnMgeyp8bnVsbH1cclxuXHQgKi9cclxuXHRmdW5jdGlvbiB3cGJjX2NhbGVuZGFyX19nZXRfaW5zdChyZXNvdXJjZV9pZCkge1xyXG5cclxuXHRcdGlmICggJ3VuZGVmaW5lZCcgPT09IHR5cGVvZiAocmVzb3VyY2VfaWQpICkge1xyXG5cdFx0XHRyZXNvdXJjZV9pZCA9ICcxJztcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIGpRdWVyeSggJyNjYWxlbmRhcl9ib29raW5nJyArIHJlc291cmNlX2lkICkubGVuZ3RoID4gMCApIHtcclxuXHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0dmFyIGluc3QgPSBqUXVlcnkuZGF0ZXBpY2suX2dldEluc3QoIGpRdWVyeSggJyNjYWxlbmRhcl9ib29raW5nJyArIHJlc291cmNlX2lkICkuZ2V0KCAwICkgKTtcclxuXHRcdFx0XHRyZXR1cm4gaW5zdCA/IGluc3QgOiBudWxsO1xyXG5cdFx0XHR9IGNhdGNoICggZSApIHtcclxuXHRcdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBudWxsO1xyXG5cdH1cclxuXHJcblxyXG5cdC8qKlxyXG5cdCAqIFVuc2VsZWN0ICBhbGwgZGF0ZXMgaW4gY2FsZW5kYXIgYW5kIHZpc3VhbGx5IHVwZGF0ZSB0aGlzIGNhbGVuZGFyXHJcblx0ICpcclxuXHQgKiBAcGFyYW0gcmVzb3VyY2VfaWRcdFx0SUQgb2YgYm9va2luZyByZXNvdXJjZVxyXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVx0XHR0cnVlIG9uIHN1Y2Nlc3MgfCBmYWxzZSwgIGlmIG5vIHN1Y2ggIGNhbGVuZGFyXHJcblx0ICovXHJcblx0ZnVuY3Rpb24gd3BiY19jYWxlbmRhcl9fdW5zZWxlY3RfYWxsX2RhdGVzKCByZXNvdXJjZV9pZCApe1xyXG5cclxuXHRcdGlmICggJ3VuZGVmaW5lZCcgPT09IHR5cGVvZiAocmVzb3VyY2VfaWQpICl7XHJcblx0XHRcdHJlc291cmNlX2lkID0gJzEnO1xyXG5cdFx0fVxyXG5cclxuXHRcdHdwYmNfcmFuZ2Vfc2VsZWN0aW9uX19oaWRlX2d1aWRhbmNlKCByZXNvdXJjZV9pZCApO1xyXG5cclxuXHRcdHZhciBpbnN0ID0gd3BiY19jYWxlbmRhcl9fZ2V0X2luc3QoIHJlc291cmNlX2lkIClcclxuXHJcblx0XHRpZiAoIG51bGwgIT09IGluc3QgKXtcclxuXHJcblx0XHRcdC8vIFVuc2VsZWN0IGFsbCBkYXRlcyBhbmQgc2V0ICBwcm9wZXJ0aWVzIG9mIERhdGVwaWNrXHJcblx0XHRcdGpRdWVyeSggJyNkYXRlX2Jvb2tpbmcnICsgcmVzb3VyY2VfaWQgKS52YWwoICcnICk7ICAgICAgLy9GaXhJbjogNS40LjNcclxuXHRcdFx0aW5zdC5zdGF5T3BlbiA9IGZhbHNlO1xyXG5cdFx0XHRpbnN0LmRhdGVzID0gW107XHJcblx0XHRcdGpRdWVyeS5kYXRlcGljay5fdXBkYXRlRGF0ZXBpY2soIGluc3QgKTtcclxuXHJcblx0XHRcdHJldHVybiB0cnVlXHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENsZWFyIGRheXMgaGlnaGxpZ2h0aW5nIGluIEFsbCBvciBzcGVjaWZpYyBDYWxlbmRhcnNcclxuXHQgKlxyXG4gICAgICogQHBhcmFtIHJlc291cmNlX2lkICAtIGNhbiBiZSBza2lwZWQgdG8gIGNsZWFyIGhpZ2hsaWdodGluZyBpbiBhbGwgY2FsZW5kYXJzXHJcbiAgICAgKi9cclxuXHRmdW5jdGlvbiB3cGJjX2NhbGVuZGFyc19fY2xlYXJfZGF5c19oaWdobGlnaHRpbmcoIHJlc291cmNlX2lkICl7XHJcblxyXG5cdFx0aWYgKCAndW5kZWZpbmVkJyAhPT0gdHlwZW9mICggcmVzb3VyY2VfaWQgKSApe1xyXG5cclxuXHRcdFx0alF1ZXJ5KCAnI2NhbGVuZGFyX2Jvb2tpbmcnICsgcmVzb3VyY2VfaWQgKyAnIC5kYXRlcGljay1kYXlzLWNlbGwtb3ZlcicgKS5yZW1vdmVDbGFzcyggJ2RhdGVwaWNrLWRheXMtY2VsbC1vdmVyJyApO1x0XHQvLyBDbGVhciBpbiBzcGVjaWZpYyBjYWxlbmRhclxyXG5cclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGpRdWVyeSggJy5kYXRlcGljay1kYXlzLWNlbGwtb3ZlcicgKS5yZW1vdmVDbGFzcyggJ2RhdGVwaWNrLWRheXMtY2VsbC1vdmVyJyApO1x0XHRcdFx0XHRcdFx0XHQvLyBDbGVhciBpbiBhbGwgY2FsZW5kYXJzXHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBTY3JvbGwgdG8gc3BlY2lmaWMgbW9udGggaW4gY2FsZW5kYXJcclxuXHQgKlxyXG5cdCAqIEBwYXJhbSByZXNvdXJjZV9pZFx0XHRJRCBvZiByZXNvdXJjZVxyXG5cdCAqIEBwYXJhbSB5ZWFyXHRcdFx0XHQtIHJlYWwgeWVhciAgLSAyMDIzXHJcblx0ICogQHBhcmFtIG1vbnRoXHRcdFx0XHQtIHJlYWwgbW9udGggLSAxMlxyXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIHdwYmNfY2FsZW5kYXJfX3Njcm9sbF90byggcmVzb3VyY2VfaWQsIHllYXIsIG1vbnRoICl7XHJcblxyXG5cdFx0aWYgKCAndW5kZWZpbmVkJyA9PT0gdHlwZW9mIChyZXNvdXJjZV9pZCkgKXsgcmVzb3VyY2VfaWQgPSAnMSc7IH1cclxuXHRcdHZhciBpbnN0ID0gd3BiY19jYWxlbmRhcl9fZ2V0X2luc3QoIHJlc291cmNlX2lkIClcclxuXHRcdGlmICggbnVsbCAhPT0gaW5zdCApe1xyXG5cclxuXHRcdFx0eWVhciAgPSBwYXJzZUludCggeWVhciApO1xyXG5cdFx0XHRtb250aCA9IHBhcnNlSW50KCBtb250aCApIC0gMTtcdFx0Ly8gSW4gSlMgZGF0ZSwgIG1vbnRoIC0xXHJcblxyXG5cdFx0XHRpbnN0LmN1cnNvckRhdGUgPSBuZXcgRGF0ZSgpO1xyXG5cdFx0XHQvLyBJbiBzb21lIGNhc2VzLCAgdGhlIHNldEZ1bGxZZWFyIGNhbiAgc2V0ICBvbmx5IFllYXIsICBhbmQgbm90IHRoZSBNb250aCBhbmQgZGF5ICAgICAgLy8gRml4SW46IDYuMi4zLjUuXHJcblx0XHRcdGluc3QuY3Vyc29yRGF0ZS5zZXRGdWxsWWVhciggeWVhciwgbW9udGgsIDEgKTtcclxuXHRcdFx0aW5zdC5jdXJzb3JEYXRlLnNldE1vbnRoKCBtb250aCApO1xyXG5cdFx0XHRpbnN0LmN1cnNvckRhdGUuc2V0RGF0ZSggMSApO1xyXG5cclxuXHRcdFx0aW5zdC5kcmF3TW9udGggPSBpbnN0LmN1cnNvckRhdGUuZ2V0TW9udGgoKTtcclxuXHRcdFx0aW5zdC5kcmF3WWVhciA9IGluc3QuY3Vyc29yRGF0ZS5nZXRGdWxsWWVhcigpO1xyXG5cclxuXHRcdFx0alF1ZXJ5LmRhdGVwaWNrLl9ub3RpZnlDaGFuZ2UoIGluc3QgKTtcclxuXHRcdFx0alF1ZXJ5LmRhdGVwaWNrLl9hZGp1c3RJbnN0RGF0ZSggaW5zdCApO1xyXG5cdFx0XHRqUXVlcnkuZGF0ZXBpY2suX3Nob3dEYXRlKCBpbnN0ICk7XHJcblx0XHRcdGpRdWVyeS5kYXRlcGljay5fdXBkYXRlRGF0ZXBpY2soIGluc3QgKTtcclxuXHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0LyoqXG5cdCAqIERldGVybWluZSBuYXRpdmUgZGF0ZSBzZWxlY3RhYmlsaXR5IHdpdGhvdXQgb3B0aW9uYWwgZGF0ZSBjb25zdHJhaW50cy5cblx0ICpcblx0ICogVGhpcyBoZWxwZXIgZXhwb3NlcyB0aGUgY2Fub25pY2FsIGNhbGVuZGFyIHJlc3VsdCBmb3IgYWxnb3JpdGhtcywgc3VjaCBhc1xuXHQgKiBnYXAgZGlzY292ZXJ5LCB0aGF0IG11c3Qgbm90IGNvbnN1bWUgdGhlaXIgb3duIGRlcml2ZWQgY29uc3RyYWludHMuIEl0IGRvZXNcblx0ICogbm90IHRyaWdnZXIgd3BiY19jYWxlbmRhcl9fYXBwbHlfZGF0ZV9jb25zdHJhaW50cyBhbmQgbXVzdCByZW1haW4gZnJlZSBvZlxuXHQgKiBvcHRpb25hbC1tb2R1bGUgc3RhdGUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gcmVzb3VyY2VfaWQgQm9va2luZyByZXNvdXJjZSBJRC5cblx0ICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICBzcWxfZGF0ZSAgICBDYWxlbmRhciBkYXRlIGluIFlZWVktTU0tREQgZm9ybWF0LlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSB3aGVuIGNvcmUgY2FsZW5kYXIgZGF0YSBtYXJrcyB0aGUgZGF0ZSBzZWxlY3RhYmxlLlxuXHQgKi9cblx0ZnVuY3Rpb24gd3BiY19pc190aGlzX2RheV9zZWxlY3RhYmxlX19yYXcoIHJlc291cmNlX2lkLCBzcWxfZGF0ZSApe1xuXG5cdFx0Ly8gR2V0IERhdGEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblx0XHR2YXIgZGF0ZV9ib29raW5nc19vYmogPSBfd3BiYy5ib29raW5nc19pbl9jYWxlbmRhcl9fZ2V0X2Zvcl9kYXRlKCByZXNvdXJjZV9pZCwgc3FsX2RhdGUgKTtcblx0XHR2YXIgaXNfZGF5X3NlbGVjdGFibGUgPSBmYWxzZTtcblxuXHRcdGlmICggZGF0ZV9ib29raW5nc19vYmogJiYgJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiAoIGRhdGVfYm9va2luZ3Nfb2JqWyAnZGF5X2F2YWlsYWJpbGl0eScgXSApICkge1xuXHRcdFx0aXNfZGF5X3NlbGVjdGFibGUgPSAoIHBhcnNlSW50KCBkYXRlX2Jvb2tpbmdzX29ialsgJ2RheV9hdmFpbGFiaWxpdHknIF0gKSA+IDAgKTtcblxuXHRcdFx0aWYgKCAndW5kZWZpbmVkJyAhPT0gdHlwZW9mICggZGF0ZV9ib29raW5nc19vYmpbICdzdW1tYXJ5JyBdICkgJiYgJ2F2YWlsYWJsZScgIT0gZGF0ZV9ib29raW5nc19vYmpbICdzdW1tYXJ5J11bJ3N0YXR1c19mb3JfZGF5JyBdICl7XG5cblx0XHRcdFx0dmFyIGlzX3NldF9wZW5kaW5nX2RheXNfc2VsZWN0YWJsZSA9IF93cGJjLmNhbGVuZGFyX19nZXRfcGFyYW1fdmFsdWUoIHJlc291cmNlX2lkLCAncGVuZGluZ19kYXlzX3NlbGVjdGFibGUnICk7XHRcdC8vIHNldCBwZW5kaW5nIGRheXMgc2VsZWN0YWJsZSAgICAgICAgICAvLyBGaXhJbjogOC42LjEuMTguXG5cdFx0XHRcdHZhciBib29raW5nX3N0YXR1c2VzX2FyciA9IHdwYmNfZ2V0X2Jvb2tpbmdfc3RhdHVzZXNfX2FzX2FyciggZGF0ZV9ib29raW5nc19vYmogKTtcblxuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0ICAgKCB3cGJjX2Jvb2tpbmdfc3RhdHVzZXNfX2hhcyggYm9va2luZ19zdGF0dXNlc19hcnIsICdwZW5kaW5nJyApIClcblx0XHRcdFx0XHR8fCAoIHdwYmNfYm9va2luZ19zdGF0dXNlc19faGFzKCBib29raW5nX3N0YXR1c2VzX2FyciwgJ3BlbmRpbmdfcGVuZGluZycgKSApXG5cdFx0XHRcdFx0fHwgKCB3cGJjX2Jvb2tpbmdfc3RhdHVzZXNfX2hhcyggYm9va2luZ19zdGF0dXNlc19hcnIsICdwZW5kaW5nX2FwcHJvdmVkJyApIClcblx0XHRcdFx0XHR8fCAoIHdwYmNfYm9va2luZ19zdGF0dXNlc19faGFzKCBib29raW5nX3N0YXR1c2VzX2FyciwgJ2FwcHJvdmVkX3BlbmRpbmcnICkgKVxuXHRcdFx0XHQpe1xuXHRcdFx0XHRcdGlzX2RheV9zZWxlY3RhYmxlID0gKGlzX2RheV9zZWxlY3RhYmxlKSA/IHRydWUgOiBpc19zZXRfcGVuZGluZ19kYXlzX3NlbGVjdGFibGU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gQm9vbGVhbiggaXNfZGF5X3NlbGVjdGFibGUgKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZXRlcm1pbmUgZmluYWwgZGF0ZSBzZWxlY3RhYmlsaXR5IGFmdGVyIG5hdGl2ZSBhbmQgb3B0aW9uYWwgY29uc3RyYWludHMuXG5cdCAqXG5cdCAqIE5hdGl2ZSB1bmF2YWlsYWJpbGl0eSByZXR1cm5zIGltbWVkaWF0ZWx5LiBPcHRpb25hbCBtb2R1bGVzIG1heSB0aGVyZWZvcmVcblx0ICogb25seSBibG9jayBhIG5hdGl2ZWx5IHNlbGVjdGFibGUgZGF0ZSBhbmQgY2FuIG5ldmVyIHJlb3BlbiBhIGNvcmUtdW5hdmFpbGFibGVcblx0ICogZGF0ZS5cblx0ICpcblx0ICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSByZXNvdXJjZV9pZCBCb29raW5nIHJlc291cmNlIElELlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gICAgICAgIHNxbF9kYXRlICAgIENhbGVuZGFyIGRhdGUgaW4gWVlZWS1NTS1ERCBmb3JtYXQuXG5cdCAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIHdoZW4gdGhlIGRhdGUgcmVtYWlucyBzZWxlY3RhYmxlIGFmdGVyIGNvbnN0cmFpbnRzLlxuXHQgKi9cblx0ZnVuY3Rpb24gd3BiY19pc190aGlzX2RheV9zZWxlY3RhYmxlKCByZXNvdXJjZV9pZCwgc3FsX2RhdGUgKXtcblxuXHRcdHZhciBpc19uYXRpdmVseV9zZWxlY3RhYmxlID0gd3BiY19pc190aGlzX2RheV9zZWxlY3RhYmxlX19yYXcoIHJlc291cmNlX2lkLCBzcWxfZGF0ZSApO1xuXG5cdFx0aWYgKCAhIGlzX25hdGl2ZWx5X3NlbGVjdGFibGUgKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHdwYmNfY2FsZW5kYXJfX2V2YWx1YXRlX2RhdGVfY29uc3RyYWludHMoIHJlc291cmNlX2lkLCBzcWxfZGF0ZSwgaXNfbmF0aXZlbHlfc2VsZWN0YWJsZSwgW10gKS5pc19zZWxlY3RhYmxlO1xuXHR9XG5cclxuXHQvKipcclxuXHQgKiBJcyBkYXRlIHRvIGNoZWNrIElOIGFycmF5IG9mIHNlbGVjdGVkIGRhdGVzXHJcblx0ICpcclxuXHQgKiBAcGFyYW0ge2RhdGV9anNfZGF0ZV90b19jaGVja1x0XHQtIEpTIERhdGVcdFx0XHQtIHNpbXBsZSAgSmF2YVNjcmlwdCBEYXRlIG9iamVjdFxyXG5cdCAqIEBwYXJhbSB7W119IGpzX2RhdGVzX2Fyclx0XHRcdC0gWyBKU0RhdGUsIC4uLiBdICAgLSBhcnJheSAgb2YgSlMgZGF0ZXNcclxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuXHQgKi9cclxuXHRmdW5jdGlvbiB3cGJjX2lzX3RoaXNfZGF5X2Ftb25nX3NlbGVjdGVkX2RheXMoIGpzX2RhdGVfdG9fY2hlY2ssIGpzX2RhdGVzX2FyciApe1xyXG5cclxuXHRcdGZvciAoIHZhciBkYXRlX2luZGV4ID0gMDsgZGF0ZV9pbmRleCA8IGpzX2RhdGVzX2Fyci5sZW5ndGggOyBkYXRlX2luZGV4KysgKXsgICAgIFx0XHRcdFx0XHRcdFx0XHRcdC8vIEZpeEluOiA4LjQuNS4xNi5cclxuXHRcdFx0aWYgKCAoIGpzX2RhdGVzX2FyclsgZGF0ZV9pbmRleCBdLmdldEZ1bGxZZWFyKCkgPT09IGpzX2RhdGVfdG9fY2hlY2suZ2V0RnVsbFllYXIoKSApICYmXHJcblx0XHRcdFx0ICgganNfZGF0ZXNfYXJyWyBkYXRlX2luZGV4IF0uZ2V0TW9udGgoKSA9PT0ganNfZGF0ZV90b19jaGVjay5nZXRNb250aCgpICkgJiZcclxuXHRcdFx0XHQgKCBqc19kYXRlc19hcnJbIGRhdGVfaW5kZXggXS5nZXREYXRlKCkgPT09IGpzX2RhdGVfdG9fY2hlY2suZ2V0RGF0ZSgpICkgKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiAgZmFsc2U7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBHZXQgU1FMIENsYXNzIERhdGUgJzIwMjMtMDgtMDEnIGZyb20gIEpTIERhdGVcclxuXHQgKlxyXG5cdCAqIEBwYXJhbSBkYXRlXHRcdFx0XHRKUyBEYXRlXHJcblx0ICogQHJldHVybnMge3N0cmluZ31cdFx0JzIwMjMtMDgtMTInXHJcblx0ICovXHJcblx0ZnVuY3Rpb24gd3BiY19fZ2V0X19zcWxfY2xhc3NfZGF0ZSggZGF0ZSApe1xyXG5cclxuXHRcdHZhciBzcWxfY2xhc3NfZGF5ID0gZGF0ZS5nZXRGdWxsWWVhcigpICsgJy0nO1xyXG5cdFx0XHRzcWxfY2xhc3NfZGF5ICs9ICggKCBkYXRlLmdldE1vbnRoKCkgKyAxICkgPCAxMCApID8gJzAnIDogJyc7XHJcblx0XHRcdHNxbF9jbGFzc19kYXkgKz0gKCBkYXRlLmdldE1vbnRoKCkgKyAxICkgKyAnLSdcclxuXHRcdFx0c3FsX2NsYXNzX2RheSArPSAoIGRhdGUuZ2V0RGF0ZSgpIDwgMTAgKSA/ICcwJyA6ICcnO1xyXG5cdFx0XHRzcWxfY2xhc3NfZGF5ICs9IGRhdGUuZ2V0RGF0ZSgpO1xyXG5cclxuXHRcdFx0cmV0dXJuIHNxbF9jbGFzc19kYXk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBHZXQgSlMgRGF0ZSBmcm9tICB0aGUgU1FMIGRhdGUgZm9ybWF0ICcyMDI0LTA1LTE0J1xyXG5cdCAqIEBwYXJhbSBzcWxfY2xhc3NfZGF0ZVxyXG5cdCAqIEByZXR1cm5zIHtEYXRlfVxyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIHdwYmNfX2dldF9fanNfZGF0ZSggc3FsX2NsYXNzX2RhdGUgKXtcclxuXHJcblx0XHR2YXIgc3FsX2NsYXNzX2RhdGVfYXJyID0gc3FsX2NsYXNzX2RhdGUuc3BsaXQoICctJyApO1xyXG5cclxuXHRcdHZhciBkYXRlX2pzID0gbmV3IERhdGUoKTtcclxuXHJcblx0XHRkYXRlX2pzLnNldEZ1bGxZZWFyKCBwYXJzZUludCggc3FsX2NsYXNzX2RhdGVfYXJyWyAwIF0gKSwgKHBhcnNlSW50KCBzcWxfY2xhc3NfZGF0ZV9hcnJbIDEgXSApIC0gMSksIHBhcnNlSW50KCBzcWxfY2xhc3NfZGF0ZV9hcnJbIDIgXSApICk7ICAvLyB5ZWFyLCBtb250aCwgZGF0ZVxyXG5cclxuXHRcdC8vIFdpdGhvdXQgdGhpcyB0aW1lIGFkanVzdCBEYXRlcyBzZWxlY3Rpb24gIGluIERhdGVwaWNrZXIgY2FuIG5vdCB3b3JrISEhXHJcblx0XHRkYXRlX2pzLnNldEhvdXJzKDApO1xyXG5cdFx0ZGF0ZV9qcy5zZXRNaW51dGVzKDApO1xyXG5cdFx0ZGF0ZV9qcy5zZXRTZWNvbmRzKDApO1xyXG5cdFx0ZGF0ZV9qcy5zZXRNaWxsaXNlY29uZHMoMCk7XHJcblxyXG5cdFx0cmV0dXJuIGRhdGVfanM7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBHZXQgVEQgQ2xhc3MgRGF0ZSAnMS0zMS0yMDIzJyBmcm9tICBKUyBEYXRlXHJcblx0ICpcclxuXHQgKiBAcGFyYW0gZGF0ZVx0XHRcdFx0SlMgRGF0ZVxyXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XHRcdCcxLTMxLTIwMjMnXHJcblx0ICovXHJcblx0ZnVuY3Rpb24gd3BiY19fZ2V0X190ZF9jbGFzc19kYXRlKCBkYXRlICl7XHJcblxyXG5cdFx0dmFyIHRkX2NsYXNzX2RheSA9IChkYXRlLmdldE1vbnRoKCkgKyAxKSArICctJyArIGRhdGUuZ2V0RGF0ZSgpICsgJy0nICsgZGF0ZS5nZXRGdWxsWWVhcigpO1x0XHRcdFx0XHRcdFx0XHQvLyAnMS05LTIwMjMnXHJcblxyXG5cdFx0cmV0dXJuIHRkX2NsYXNzX2RheTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldCBkYXRlIHBhcmFtcyBmcm9tICBzdHJpbmcgZGF0ZVxyXG5cdCAqXHJcblx0ICogQHBhcmFtIGRhdGVcdFx0XHRzdHJpbmcgZGF0ZSBsaWtlICczMS41LjIwMjMnXHJcblx0ICogQHBhcmFtIHNlcGFyYXRvclx0XHRkZWZhdWx0ICcuJyAgY2FuIGJlIHNraXBwZWQuXHJcblx0ICogQHJldHVybnMgeyAge2RhdGU6IG51bWJlciwgbW9udGg6IG51bWJlciwgeWVhcjogbnVtYmVyfSAgfVxyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIHdwYmNfX2dldF9fZGF0ZV9wYXJhbXNfX2Zyb21fc3RyaW5nX2RhdGUoIGRhdGUgLCBzZXBhcmF0b3Ipe1xyXG5cclxuXHRcdHNlcGFyYXRvciA9ICggJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiAoc2VwYXJhdG9yKSApID8gc2VwYXJhdG9yIDogJy4nO1xyXG5cclxuXHRcdHZhciBkYXRlX2FyciA9IGRhdGUuc3BsaXQoIHNlcGFyYXRvciApO1xyXG5cdFx0dmFyIGRhdGVfb2JqID0ge1xyXG5cdFx0XHQneWVhcicgOiAgcGFyc2VJbnQoIGRhdGVfYXJyWyAyIF0gKSxcclxuXHRcdFx0J21vbnRoJzogKHBhcnNlSW50KCBkYXRlX2FyclsgMSBdICkgLSAxKSxcclxuXHRcdFx0J2RhdGUnIDogIHBhcnNlSW50KCBkYXRlX2FyclsgMCBdIClcclxuXHRcdH07XHJcblx0XHRyZXR1cm4gZGF0ZV9vYmo7XHRcdC8vIGZvciBcdFx0ID0gbmV3IERhdGUoIGRhdGVfb2JqLnllYXIgLCBkYXRlX29iai5tb250aCAsIGRhdGVfb2JqLmRhdGUgKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEFkZCBTcGluIExvYWRlciB0byAgY2FsZW5kYXJcclxuXHQgKiBAcGFyYW0gcmVzb3VyY2VfaWRcclxuXHQgKi9cclxuXHRmdW5jdGlvbiB3cGJjX2NhbGVuZGFyX19sb2FkaW5nX19zdGFydCggcmVzb3VyY2VfaWQgKXtcclxuXHRcdGlmICggISBqUXVlcnkoICcjY2FsZW5kYXJfYm9va2luZycgKyByZXNvdXJjZV9pZCApLm5leHQoKS5oYXNDbGFzcyggJ3dwYmNfc3BpbnNfbG9hZGVyX3dyYXBwZXInICkgKXtcclxuXHRcdFx0alF1ZXJ5KCAnI2NhbGVuZGFyX2Jvb2tpbmcnICsgcmVzb3VyY2VfaWQgKS5hZnRlciggJzxkaXYgY2xhc3M9XCJ3cGJjX3NwaW5zX2xvYWRlcl93cmFwcGVyXCI+PGRpdiBjbGFzcz1cIndwYmNfc3Bpbl9sb2FkZXJfb25lX25ld1wiPjwvZGl2PjwvZGl2PicgKTtcclxuXHRcdH1cclxuXHRcdGlmICggISBqUXVlcnkoICcjY2FsZW5kYXJfYm9va2luZycgKyByZXNvdXJjZV9pZCApLmhhc0NsYXNzKCAnd3BiY19jYWxlbmRhcl9ibHVyX3NtYWxsJyApICl7XHJcblx0XHRcdGpRdWVyeSggJyNjYWxlbmRhcl9ib29raW5nJyArIHJlc291cmNlX2lkICkuYWRkQ2xhc3MoICd3cGJjX2NhbGVuZGFyX2JsdXJfc21hbGwnICk7XHJcblx0XHR9XHJcblx0XHR3cGJjX2NhbGVuZGFyX19ibHVyX19zdGFydCggcmVzb3VyY2VfaWQgKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFJlbW92ZSBTcGluIExvYWRlciB0byAgY2FsZW5kYXJcclxuXHQgKiBAcGFyYW0gcmVzb3VyY2VfaWRcclxuXHQgKi9cclxuXHRmdW5jdGlvbiB3cGJjX2NhbGVuZGFyX19sb2FkaW5nX19zdG9wKCByZXNvdXJjZV9pZCApe1xyXG5cdFx0alF1ZXJ5KCAnI2NhbGVuZGFyX2Jvb2tpbmcnICsgcmVzb3VyY2VfaWQgKyAnICsgLndwYmNfc3BpbnNfbG9hZGVyX3dyYXBwZXInICkucmVtb3ZlKCk7XHJcblx0XHRqUXVlcnkoICcjY2FsZW5kYXJfYm9va2luZycgKyByZXNvdXJjZV9pZCApLnJlbW92ZUNsYXNzKCAnd3BiY19jYWxlbmRhcl9ibHVyX3NtYWxsJyApO1xyXG5cdFx0d3BiY19jYWxlbmRhcl9fYmx1cl9fc3RvcCggcmVzb3VyY2VfaWQgKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEFkZCBCbHVyIHRvICBjYWxlbmRhclxyXG5cdCAqIEBwYXJhbSByZXNvdXJjZV9pZFxyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIHdwYmNfY2FsZW5kYXJfX2JsdXJfX3N0YXJ0KCByZXNvdXJjZV9pZCApe1xyXG5cdFx0aWYgKCAhIGpRdWVyeSggJyNjYWxlbmRhcl9ib29raW5nJyArIHJlc291cmNlX2lkICkuaGFzQ2xhc3MoICd3cGJjX2NhbGVuZGFyX2JsdXInICkgKXtcclxuXHRcdFx0alF1ZXJ5KCAnI2NhbGVuZGFyX2Jvb2tpbmcnICsgcmVzb3VyY2VfaWQgKS5hZGRDbGFzcyggJ3dwYmNfY2FsZW5kYXJfYmx1cicgKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFJlbW92ZSBCbHVyIGluICBjYWxlbmRhclxyXG5cdCAqIEBwYXJhbSByZXNvdXJjZV9pZFxyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIHdwYmNfY2FsZW5kYXJfX2JsdXJfX3N0b3AoIHJlc291cmNlX2lkICl7XHJcblx0XHRqUXVlcnkoICcjY2FsZW5kYXJfYm9va2luZycgKyByZXNvdXJjZV9pZCApLnJlbW92ZUNsYXNzKCAnd3BiY19jYWxlbmRhcl9ibHVyJyApO1xyXG5cdH1cclxuXHJcblxyXG5cdC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXHJcblx0LyogID09ICBDYWxlbmRhciBVcGRhdGUgIC0gVmlldyAgPT1cclxuXHQvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAqL1xyXG5cclxuXHQvKipcclxuXHQgKiBVcGRhdGUgbG9vayBvZiBjYWxlbmRhciAoc2FmZSkuXHJcblx0ICpcclxuXHQgKiBJbiBFbGVtZW50b3IgcHJldmlldyB0aGUgRE9NIGNhbiBiZSByZS1yZW5kZXJlZCwgc28gdGhlIGNhbGVuZGFyIGVsZW1lbnQgbWF5IGV4aXN0XHJcblx0ICogd2hpbGUgdGhlIERhdGVwaWNrIGluc3RhbmNlIGlzIG1pc3NpbmcuIEluIHRoYXQgY2FzZSB0cnkgdG8gKHJlKWluaXRpYWxpemUuXHJcblx0ICpcclxuXHQgKiBAcGFyYW0ge2ludHxzdHJpbmd9IHJlc291cmNlX2lkXHJcblx0ICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiB1cGRhdGVkLCBmYWxzZSBpZiBub3QgcG9zc2libGVcclxuXHQgKi9cclxuXHRmdW5jdGlvbiB3cGJjX2NhbGVuZGFyX191cGRhdGVfbG9vayhyZXNvdXJjZV9pZCkge1xyXG5cclxuXHRcdHZhciBpbnN0ID0gd3BiY19jYWxlbmRhcl9fZ2V0X2luc3QoIHJlc291cmNlX2lkICk7XHJcblxyXG5cdFx0Ly8gSWYgaW5zdGFuY2UgbWlzc2luZywgdHJ5IHRvIHJlLWluaXQgY2FsZW5kYXIgb25jZS5cclxuXHRcdGlmICggbnVsbCA9PT0gaW5zdCApIHtcclxuXHJcblx0XHRcdHZhciBqcV9jYWwgPSBqUXVlcnkoICcjY2FsZW5kYXJfYm9va2luZycgKyByZXNvdXJjZV9pZCApO1xyXG5cclxuXHRcdFx0aWYgKCBqcV9jYWwubGVuZ3RoICYmICgnZnVuY3Rpb24nID09PSB0eXBlb2Ygd3BiY19jYWxlbmRhcl9zaG93KSApIHtcclxuXHJcblx0XHRcdFx0Ly8gRWxlbWVudG9yIHNvbWV0aW1lcyBsZWF2ZXMgc3RhbGUgY2xhc3Mgd2l0aG91dCByZWFsIGluc3RhbmNlLlxyXG5cdFx0XHRcdGlmICgganFfY2FsLmhhc0NsYXNzKCAnaGFzRGF0ZXBpY2snICkgKSB7XHJcblx0XHRcdFx0XHRqcV9jYWwucmVtb3ZlQ2xhc3MoICdoYXNEYXRlcGljaycgKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIFRyeSB0byBpbml0IGRhdGVwaWNrIG1hcmt1cCBub3cuXHJcblx0XHRcdFx0d3BiY19jYWxlbmRhcl9zaG93KCByZXNvdXJjZV9pZCApO1xyXG5cclxuXHRcdFx0XHQvLyBUcnkgYWdhaW4uXHJcblx0XHRcdFx0aW5zdCA9IHdwYmNfY2FsZW5kYXJfX2dldF9pbnN0KCByZXNvdXJjZV9pZCApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gU3RpbGwgbm8gaW5zdGFuY2UgLT4gZG8gbm90IGNyYXNoIHRoZSB3aG9sZSBhamF4IGZsb3cuXHJcblx0XHRpZiAoIG51bGwgPT09IGluc3QgKSB7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRqUXVlcnkuZGF0ZXBpY2suX3VwZGF0ZURhdGVwaWNrKCBpbnN0ICk7XHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcblxyXG5cclxuXHJcblx0LyoqXHJcblx0ICogVXBkYXRlIGR5bmFtaWNhbGx5IE51bWJlciBvZiBNb250aHMgaW4gY2FsZW5kYXJcclxuXHQgKlxyXG5cdCAqIEBwYXJhbSByZXNvdXJjZV9pZCBpbnRcclxuXHQgKiBAcGFyYW0gbW9udGhzX251bWJlciBpbnRcclxuXHQgKi9cclxuXHRmdW5jdGlvbiB3cGJjX2NhbGVuZGFyX191cGRhdGVfbW9udGhzX251bWJlciggcmVzb3VyY2VfaWQsIG1vbnRoc19udW1iZXIgKXtcclxuXHRcdHZhciBpbnN0ID0gd3BiY19jYWxlbmRhcl9fZ2V0X2luc3QoIHJlc291cmNlX2lkICk7XHJcblx0XHRpZiAoIG51bGwgIT09IGluc3QgKXtcclxuXHRcdFx0aW5zdC5zZXR0aW5nc1sgJ251bWJlck9mTW9udGhzJyBdID0gbW9udGhzX251bWJlcjtcclxuXHRcdFx0Ly9fd3BiYy5jYWxlbmRhcl9fc2V0X3BhcmFtX3ZhbHVlKCByZXNvdXJjZV9pZCwgJ2NhbGVuZGFyX251bWJlcl9vZl9tb250aHMnLCBtb250aHNfbnVtYmVyICk7XHJcblx0XHRcdHdwYmNfY2FsZW5kYXJfX3VwZGF0ZV9sb29rKCByZXNvdXJjZV9pZCApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblxyXG5cdC8qKlxyXG5cdCAqIFNob3cgY2FsZW5kYXIgaW4gIGRpZmZlcmVudCBTa2luXHJcblx0ICpcclxuXHQgKiBAcGFyYW0gc2VsZWN0ZWRfc2tpbl91cmxcclxuXHQgKi9cclxuXHRmdW5jdGlvbiB3cGJjX19jYWxlbmRhcl9fY2hhbmdlX3NraW4oIHNlbGVjdGVkX3NraW5fdXJsICl7XHJcblxyXG5cdC8vY29uc29sZS5sb2coICdTS0lOIFNFTEVDVElPTiA6OicsIHNlbGVjdGVkX3NraW5fdXJsICk7XHJcblxyXG5cdFx0Ly8gUmVtb3ZlIENTUyBza2luXHJcblx0XHR2YXIgc3R5bGVzaGVldCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnd3BiYy1jYWxlbmRhci1za2luLWNzcycgKTtcclxuXHRcdHN0eWxlc2hlZXQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggc3R5bGVzaGVldCApO1xyXG5cclxuXHJcblx0XHQvLyBBZGQgbmV3IENTUyBza2luXHJcblx0XHR2YXIgaGVhZElEID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIFwiaGVhZFwiIClbIDAgXTtcclxuXHRcdHZhciBjc3NOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2xpbmsnICk7XHJcblx0XHRjc3NOb2RlLnR5cGUgPSAndGV4dC9jc3MnO1xyXG5cdFx0Y3NzTm9kZS5zZXRBdHRyaWJ1dGUoIFwiaWRcIiwgXCJ3cGJjLWNhbGVuZGFyLXNraW4tY3NzXCIgKTtcclxuXHRcdGNzc05vZGUucmVsID0gJ3N0eWxlc2hlZXQnO1xyXG5cdFx0Y3NzTm9kZS5tZWRpYSA9ICdzY3JlZW4nO1xyXG5cdFx0Y3NzTm9kZS5ocmVmID0gc2VsZWN0ZWRfc2tpbl91cmw7XHQvL1wiaHR0cDovL2JldGEvd3AtY29udGVudC9wbHVnaW5zL2Jvb2tpbmcvY3NzL3NraW5zL2dyZWVuLTAxLmNzc1wiO1xyXG5cdFx0aGVhZElELmFwcGVuZENoaWxkKCBjc3NOb2RlICk7XHJcblx0fVxyXG5cclxuXHJcblx0ZnVuY3Rpb24gd3BiY19fY3NzX19jaGFuZ2Vfc2tpbiggc2VsZWN0ZWRfc2tpbl91cmwsIHN0eWxlc2hlZXRfaWQgPSAnd3BiYy10aW1lX3BpY2tlci1za2luLWNzcycgKXtcclxuXHJcblx0XHQvLyBSZW1vdmUgQ1NTIHNraW5cclxuXHRcdHZhciBzdHlsZXNoZWV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIHN0eWxlc2hlZXRfaWQgKTtcclxuXHRcdHN0eWxlc2hlZXQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggc3R5bGVzaGVldCApO1xyXG5cclxuXHJcblx0XHQvLyBBZGQgbmV3IENTUyBza2luXHJcblx0XHR2YXIgaGVhZElEID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIFwiaGVhZFwiIClbIDAgXTtcclxuXHRcdHZhciBjc3NOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2xpbmsnICk7XHJcblx0XHRjc3NOb2RlLnR5cGUgPSAndGV4dC9jc3MnO1xyXG5cdFx0Y3NzTm9kZS5zZXRBdHRyaWJ1dGUoIFwiaWRcIiwgc3R5bGVzaGVldF9pZCApO1xyXG5cdFx0Y3NzTm9kZS5yZWwgPSAnc3R5bGVzaGVldCc7XHJcblx0XHRjc3NOb2RlLm1lZGlhID0gJ3NjcmVlbic7XHJcblx0XHRjc3NOb2RlLmhyZWYgPSBzZWxlY3RlZF9za2luX3VybDtcdC8vXCJodHRwOi8vYmV0YS93cC1jb250ZW50L3BsdWdpbnMvYm9va2luZy9jc3Mvc2tpbnMvZ3JlZW4tMDEuY3NzXCI7XHJcblx0XHRoZWFkSUQuYXBwZW5kQ2hpbGQoIGNzc05vZGUgKTtcclxuXHR9XHJcblxyXG5cclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbi8qICA9PSAgUyBVIFAgUCBPIFIgVCAgICBNIEEgVCBIICA9PVxyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIE1lcmdlIHNldmVyYWwgIGludGVyc2VjdGVkIGludGVydmFscyBvciByZXR1cm4gbm90IGludGVyc2VjdGVkOlxyXG5cdFx0ICogW1sxLDNdLFsyLDZdLFs4LDEwXSxbMTUsMThdXSAgLT4gICBbWzEsNl0sWzgsMTBdLFsxNSwxOF1dXHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIFtdIGludGVydmFsc1x0XHRcdCBbIFsxLDNdLFsyLDRdLFs2LDhdLFs5LDEwXSxbMyw3XSBdXHJcblx0XHQgKiBAcmV0dXJucyBbXVx0XHRcdFx0XHQgWyBbMSw4XSxbOSwxMF0gXVxyXG5cdFx0ICpcclxuXHRcdCAqIEV4bWFtcGxlOiB3cGJjX2ludGVydmFsc19fbWVyZ2VfaW5lcnNlY3RlZCggIFsgWzEsM10sWzIsNF0sWzYsOF0sWzksMTBdLFszLDddIF0gICk7XHJcblx0XHQgKi9cclxuXHRcdGZ1bmN0aW9uIHdwYmNfaW50ZXJ2YWxzX19tZXJnZV9pbmVyc2VjdGVkKCBpbnRlcnZhbHMgKXtcclxuXHJcblx0XHRcdGlmICggISBpbnRlcnZhbHMgfHwgaW50ZXJ2YWxzLmxlbmd0aCA9PT0gMCApe1xyXG5cdFx0XHRcdHJldHVybiBbXTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0dmFyIG1lcmdlZCA9IFtdO1xyXG5cdFx0XHRpbnRlcnZhbHMuc29ydCggZnVuY3Rpb24gKCBhLCBiICl7XHJcblx0XHRcdFx0cmV0dXJuIGFbIDAgXSAtIGJbIDAgXTtcclxuXHRcdFx0fSApO1xyXG5cclxuXHRcdFx0dmFyIG1lcmdlZEludGVydmFsID0gaW50ZXJ2YWxzWyAwIF07XHJcblxyXG5cdFx0XHRmb3IgKCB2YXIgaSA9IDE7IGkgPCBpbnRlcnZhbHMubGVuZ3RoOyBpKysgKXtcclxuXHRcdFx0XHR2YXIgaW50ZXJ2YWwgPSBpbnRlcnZhbHNbIGkgXTtcclxuXHJcblx0XHRcdFx0aWYgKCBpbnRlcnZhbFsgMCBdIDw9IG1lcmdlZEludGVydmFsWyAxIF0gKXtcclxuXHRcdFx0XHRcdG1lcmdlZEludGVydmFsWyAxIF0gPSBNYXRoLm1heCggbWVyZ2VkSW50ZXJ2YWxbIDEgXSwgaW50ZXJ2YWxbIDEgXSApO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRtZXJnZWQucHVzaCggbWVyZ2VkSW50ZXJ2YWwgKTtcclxuXHRcdFx0XHRcdG1lcmdlZEludGVydmFsID0gaW50ZXJ2YWw7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRtZXJnZWQucHVzaCggbWVyZ2VkSW50ZXJ2YWwgKTtcclxuXHRcdFx0cmV0dXJuIG1lcmdlZDtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBJcyAyIGludGVydmFscyBpbnRlcnNlY3RlZDogICAgICAgWzM2MDExLCA4NjM5Ml0gICAgPD0+ICAgIFsxLCA0MzE5Ml0gID0+ICB0cnVlICAgICAgKCBpbnRlcnNlY3RlZCApXHJcblx0XHQgKlxyXG5cdFx0ICogR29vZCBleHBsYW5hdGlvbiAgaGVyZVxyXG5cdFx0ICogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzI2OTQzNC93aGF0cy10aGUtbW9zdC1lZmZpY2llbnQtd2F5LXRvLXRlc3QtaWYtdHdvLXJhbmdlcy1vdmVybGFwXHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtICBpbnRlcnZhbF9BICAgLSBbIDM2MDExLCA4NjM5MiBdXHJcblx0XHQgKiBAcGFyYW0gIGludGVydmFsX0IgICAtIFsgICAgIDEsIDQzMTkyIF1cclxuXHRcdCAqXHJcblx0XHQgKiBAcmV0dXJuIGJvb2xcclxuXHRcdCAqL1xyXG5cdFx0ZnVuY3Rpb24gd3BiY19pbnRlcnZhbHNfX2lzX2ludGVyc2VjdGVkKCBpbnRlcnZhbF9BLCBpbnRlcnZhbF9CICkge1xyXG5cclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0KCAwID09IGludGVydmFsX0EubGVuZ3RoIClcclxuXHRcdFx0XHQgfHwgKCAwID09IGludGVydmFsX0IubGVuZ3RoIClcclxuXHRcdFx0KXtcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGludGVydmFsX0FbIDAgXSA9IHBhcnNlSW50KCBpbnRlcnZhbF9BWyAwIF0gKTtcclxuXHRcdFx0aW50ZXJ2YWxfQVsgMSBdID0gcGFyc2VJbnQoIGludGVydmFsX0FbIDEgXSApO1xyXG5cdFx0XHRpbnRlcnZhbF9CWyAwIF0gPSBwYXJzZUludCggaW50ZXJ2YWxfQlsgMCBdICk7XHJcblx0XHRcdGludGVydmFsX0JbIDEgXSA9IHBhcnNlSW50KCBpbnRlcnZhbF9CWyAxIF0gKTtcclxuXHJcblx0XHRcdHZhciBpc19pbnRlcnNlY3RlZCA9IE1hdGgubWF4KCBpbnRlcnZhbF9BWyAwIF0sIGludGVydmFsX0JbIDAgXSApIC0gTWF0aC5taW4oIGludGVydmFsX0FbIDEgXSwgaW50ZXJ2YWxfQlsgMSBdICk7XHJcblxyXG5cdFx0XHQvLyBpZiAoIDAgPT0gaXNfaW50ZXJzZWN0ZWQgKSB7XHJcblx0XHRcdC8vXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdWNoIHJhbmdlcyBnb2luZyBvbmUgYWZ0ZXIgb3RoZXIsIGUuZy46IFsgMTIsIDE1IF0gYW5kIFsgMTUsIDIxIF1cclxuXHRcdFx0Ly8gfVxyXG5cclxuXHRcdFx0aWYgKCBpc19pbnRlcnNlY3RlZCA8IDAgKSB7XHJcblx0XHRcdFx0cmV0dXJuIHRydWU7ICAgICAgICAgICAgICAgICAgICAgLy8gSU5URVJTRUNURURcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cmV0dXJuIGZhbHNlOyAgICAgICAgICAgICAgICAgICAgICAgLy8gTm90IGludGVyc2VjdGVkXHJcblx0XHR9XHJcblxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogR2V0IHRoZSBjbG9zZXRzIEFCUyB2YWx1ZSBvZiBlbGVtZW50IGluIGFycmF5IHRvIHRoZSBjdXJyZW50IG15VmFsdWVcclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0gbXlWYWx1ZSBcdC0gaW50IGVsZW1lbnQgdG8gc2VhcmNoIGNsb3NldCBcdFx0XHQ0XHJcblx0XHQgKiBAcGFyYW0gbXlBcnJheVx0LSBhcnJheSBvZiBlbGVtZW50cyB3aGVyZSB0byBzZWFyY2ggXHRbNSw4LDEsN11cclxuXHRcdCAqIEByZXR1cm5zIGludFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDVcclxuXHRcdCAqL1xyXG5cdFx0ZnVuY3Rpb24gd3BiY19nZXRfYWJzX2Nsb3Nlc3RfdmFsdWVfaW5fYXJyKCBteVZhbHVlLCBteUFycmF5ICl7XHJcblxyXG5cdFx0XHRpZiAoIG15QXJyYXkubGVuZ3RoID09IDAgKXsgXHRcdFx0XHRcdFx0XHRcdC8vIElmIHRoZSBhcnJheSBpcyBlbXB0eSAtPiByZXR1cm4gIHRoZSBteVZhbHVlXHJcblx0XHRcdFx0cmV0dXJuIG15VmFsdWU7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHZhciBvYmogPSBteUFycmF5WyAwIF07XHJcblx0XHRcdHZhciBkaWZmID0gTWF0aC5hYnMoIG15VmFsdWUgLSBvYmogKTsgICAgICAgICAgICAgXHQvLyBHZXQgZGlzdGFuY2UgYmV0d2VlbiAgMXN0IGVsZW1lbnRcclxuXHRcdFx0dmFyIGNsb3NldFZhbHVlID0gbXlBcnJheVsgMCBdOyAgICAgICAgICAgICAgICAgICBcdFx0XHQvLyBTYXZlIDFzdCBlbGVtZW50XHJcblxyXG5cdFx0XHRmb3IgKCB2YXIgaSA9IDE7IGkgPCBteUFycmF5Lmxlbmd0aDsgaSsrICl7XHJcblx0XHRcdFx0b2JqID0gbXlBcnJheVsgaSBdO1xyXG5cclxuXHRcdFx0XHRpZiAoIE1hdGguYWJzKCBteVZhbHVlIC0gb2JqICkgPCBkaWZmICl7ICAgICBcdFx0XHQvLyB3ZSBmb3VuZCBjbG9zZXIgdmFsdWUgLT4gc2F2ZSBpdFxyXG5cdFx0XHRcdFx0ZGlmZiA9IE1hdGguYWJzKCBteVZhbHVlIC0gb2JqICk7XHJcblx0XHRcdFx0XHRjbG9zZXRWYWx1ZSA9IG9iajtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHJldHVybiBjbG9zZXRWYWx1ZTtcclxuXHRcdH1cclxuXHJcblxyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuLyogID09ICBUIE8gTyBMIFQgSSBQIFMgID09XHJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuXHQvKipcclxuXHQgKiBEZWZpbmUgdG9vbHRpcCB0byBzaG93LCAgd2hlbiAgbW91c2Ugb3ZlciBEYXRlIGluIENhbGVuZGFyXHJcblx0ICpcclxuXHQgKiBAcGFyYW0gIHRvb2x0aXBfdGV4dFx0XHRcdC0gVGV4dCB0byBzaG93XHRcdFx0XHQnQm9va2VkIHRpbWU6IDEyOjAwIC0gMTM6MDA8YnI+Q29zdDogJDIwLjAwJ1xyXG5cdCAqIEBwYXJhbSAgcmVzb3VyY2VfaWRcdFx0XHQtIElEIG9mIGJvb2tpbmcgcmVzb3VyY2VcdCcxJ1xyXG5cdCAqIEBwYXJhbSAgdGRfY2xhc3NcdFx0XHRcdC0gU1FMIGNsYXNzXHRcdFx0XHRcdCcxLTktMjAyMydcclxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cdFx0XHRcdFx0LSBkZWZpbmVkIHRvIHNob3cgb3Igbm90XHJcblx0ICovXHJcblx0ZnVuY3Rpb24gd3BiY19zZXRfdG9vbHRpcF9fX2Zvcl9fY2FsZW5kYXJfZGF0ZSggdG9vbHRpcF90ZXh0LCByZXNvdXJjZV9pZCwgdGRfY2xhc3MgKXtcclxuXHJcblx0XHQvL1RPRE86IG1ha2UgZXNjYXBpbmcgb2YgdGV4dCBmb3IgcXVvdCBzeW1ib2xzLCAgYW5kIEpTL0hUTUwuLi5cclxuXHJcblx0XHRqUXVlcnkoICcjY2FsZW5kYXJfYm9va2luZycgKyByZXNvdXJjZV9pZCArICcgdGQuY2FsNGRhdGUtJyArIHRkX2NsYXNzICkuYXR0ciggJ2RhdGEtY29udGVudCcsIHRvb2x0aXBfdGV4dCApO1xyXG5cclxuXHRcdHZhciB0ZF9lbCA9IGpRdWVyeSggJyNjYWxlbmRhcl9ib29raW5nJyArIHJlc291cmNlX2lkICsgJyB0ZC5jYWw0ZGF0ZS0nICsgdGRfY2xhc3MgKS5nZXQoIDAgKTtcdFx0XHRcdFx0Ly8gRml4SW46IDkuMC4xLjEuXHJcblxyXG5cdFx0aWYgKFxyXG5cdFx0XHQgICAoICd1bmRlZmluZWQnICE9PSB0eXBlb2YodGRfZWwpIClcclxuXHRcdFx0JiYgKCB1bmRlZmluZWQgPT0gdGRfZWwuX3RpcHB5IClcclxuXHRcdFx0JiYgKCAnJyAhPT0gdG9vbHRpcF90ZXh0IClcclxuXHRcdCl7XHJcblxyXG5cdFx0XHR3cGJjX3RpcHB5KCB0ZF9lbCAsIHtcclxuXHRcdFx0XHRcdGNvbnRlbnQoIHJlZmVyZW5jZSApe1xyXG5cclxuXHRcdFx0XHRcdFx0dmFyIHBvcG92ZXJfY29udGVudCA9IHJlZmVyZW5jZS5nZXRBdHRyaWJ1dGUoICdkYXRhLWNvbnRlbnQnICk7XHJcblxyXG5cdFx0XHRcdFx0XHRyZXR1cm4gJzxkaXYgY2xhc3M9XCJwb3BvdmVyIHBvcG92ZXJfdGlwcHlcIj4nXHJcblx0XHRcdFx0XHRcdFx0XHRcdCsgJzxkaXYgY2xhc3M9XCJwb3BvdmVyLWNvbnRlbnRcIj4nXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0KyBwb3BvdmVyX2NvbnRlbnRcclxuXHRcdFx0XHRcdFx0XHRcdFx0KyAnPC9kaXY+J1xyXG5cdFx0XHRcdFx0XHRcdCArICc8L2Rpdj4nO1xyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdGFsbG93SFRNTCAgICAgICAgOiB0cnVlLFxyXG5cdFx0XHRcdFx0dHJpZ2dlclx0XHRcdCA6ICdtb3VzZWVudGVyIGZvY3VzJyxcclxuXHRcdFx0XHRcdGludGVyYWN0aXZlICAgICAgOiBmYWxzZSxcclxuXHRcdFx0XHRcdGhpZGVPbkNsaWNrICAgICAgOiB0cnVlLFxyXG5cdFx0XHRcdFx0aW50ZXJhY3RpdmVCb3JkZXI6IDEwLFxyXG5cdFx0XHRcdFx0bWF4V2lkdGggICAgICAgICA6IDU1MCxcclxuXHRcdFx0XHRcdHRoZW1lICAgICAgICAgICAgOiAnd3BiYy10aXBweS10aW1lcycsXHJcblx0XHRcdFx0XHRwbGFjZW1lbnQgICAgICAgIDogJ3RvcCcsXHJcblx0XHRcdFx0XHRkZWxheVx0XHRcdCA6IFs0MDAsIDBdLFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIEZpeEluOiA5LjQuMi4yLlxyXG5cdFx0XHRcdFx0Ly9kZWxheVx0XHRcdCA6IFswLCA5OTk5OTk5OTk5XSxcdFx0XHRcdFx0XHQvLyBEZWJ1Z2UgIHRvb2x0aXBcclxuXHRcdFx0XHRcdGlnbm9yZUF0dHJpYnV0ZXMgOiB0cnVlLFxyXG5cdFx0XHRcdFx0dG91Y2hcdFx0XHQgOiB0cnVlLFx0XHRcdFx0XHRcdFx0XHQvL1snaG9sZCcsIDUwMF0sIC8vIDUwMG1zIGRlbGF5XHRcdFx0XHQvLyBGaXhJbjogOS4yLjEuNS5cclxuXHRcdFx0XHRcdGFwcGVuZFRvOiAoKSA9PiBkb2N1bWVudC5ib2R5LFxyXG5cdFx0XHR9KTtcclxuXHJcblx0XHRcdHJldHVybiAgdHJ1ZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gIGZhbHNlO1xyXG5cdH1cclxuXHJcblxyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuLyogID09ICBEYXRlcyBGdW5jdGlvbnMgID09XHJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuLyoqXHJcbiAqIEdldCBudW1iZXIgb2YgZGF0ZXMgYmV0d2VlbiAyIEpTIERhdGVzXHJcbiAqXHJcbiAqIEBwYXJhbSBkYXRlMVx0XHRKUyBEYXRlXHJcbiAqIEBwYXJhbSBkYXRlMlx0XHRKUyBEYXRlXHJcbiAqIEByZXR1cm5zIHtudW1iZXJ9XHJcbiAqL1xyXG5mdW5jdGlvbiB3cGJjX2RhdGVzX19kYXlzX2JldHdlZW4oZGF0ZTEsIGRhdGUyKSB7XHJcblxyXG4gICAgLy8gVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgaW4gb25lIGRheVxyXG4gICAgdmFyIE9ORV9EQVkgPSAxMDAwICogNjAgKiA2MCAqIDI0O1xyXG5cclxuICAgIC8vIENvbnZlcnQgYm90aCBkYXRlcyB0byBtaWxsaXNlY29uZHNcclxuICAgIHZhciBkYXRlMV9tcyA9IGRhdGUxLmdldFRpbWUoKTtcclxuICAgIHZhciBkYXRlMl9tcyA9IGRhdGUyLmdldFRpbWUoKTtcclxuXHJcbiAgICAvLyBDYWxjdWxhdGUgdGhlIGRpZmZlcmVuY2UgaW4gbWlsbGlzZWNvbmRzXHJcbiAgICB2YXIgZGlmZmVyZW5jZV9tcyA9ICBkYXRlMV9tcyAtIGRhdGUyX21zO1xyXG5cclxuICAgIC8vIENvbnZlcnQgYmFjayB0byBkYXlzIGFuZCByZXR1cm5cclxuICAgIHJldHVybiBNYXRoLnJvdW5kKGRpZmZlcmVuY2VfbXMvT05FX0RBWSk7XHJcbn1cclxuXHJcblxyXG4vKipcclxuICogQ2hlY2sgIGlmIHRoaXMgYXJyYXkgIG9mIGRhdGVzIGlzIGNvbnNlY3V0aXZlIGFycmF5ICBvZiBkYXRlcyBvciBub3QuXHJcbiAqIFx0XHRlLmcuICBbJzIwMjQtMDUtMDknLCcyMDI0LTA1LTE5JywnMjAyNC0wNS0zMCddIC0+IGZhbHNlXHJcbiAqIFx0XHRlLmcuICBbJzIwMjQtMDUtMDknLCcyMDI0LTA1LTEwJywnMjAyNC0wNS0xMSddIC0+IHRydWVcclxuICogQHBhcmFtIHNxbF9kYXRlc19hcnJcdCBhcnJheVx0XHRlLmcuOiBbJzIwMjQtMDUtMDknLCcyMDI0LTA1LTE5JywnMjAyNC0wNS0zMCddXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cclxuZnVuY3Rpb24gd3BiY19kYXRlc19faXNfY29uc2VjdXRpdmVfZGF0ZXNfYXJyX3JhbmdlKCBzcWxfZGF0ZXNfYXJyICl7XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBGaXhJbjogMTAuMC4wLjUwLlxyXG5cclxuXHRpZiAoIHNxbF9kYXRlc19hcnIubGVuZ3RoID4gMSApe1xyXG5cdFx0dmFyIHByZXZpb3NfZGF0ZSA9IHdwYmNfX2dldF9fanNfZGF0ZSggc3FsX2RhdGVzX2FyclsgMCBdICk7XHJcblx0XHR2YXIgY3VycmVudF9kYXRlO1xyXG5cclxuXHRcdGZvciAoIHZhciBpID0gMTsgaSA8IHNxbF9kYXRlc19hcnIubGVuZ3RoOyBpKysgKXtcclxuXHRcdFx0Y3VycmVudF9kYXRlID0gd3BiY19fZ2V0X19qc19kYXRlKCBzcWxfZGF0ZXNfYXJyW2ldICk7XHJcblxyXG5cdFx0XHRpZiAoIHdwYmNfZGF0ZXNfX2RheXNfYmV0d2VlbiggY3VycmVudF9kYXRlLCBwcmV2aW9zX2RhdGUgKSAhPSAxICl7XHJcblx0XHRcdFx0cmV0dXJuICBmYWxzZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cHJldmlvc19kYXRlID0gY3VycmVudF9kYXRlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cmV0dXJuIHRydWU7XHJcbn1cclxuXHJcblxyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuLyogID09ICBBdXRvIERhdGVzIFNlbGVjdGlvbiAgPT1cclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG4vKipcclxuICogID09IEhvdyB0byAgdXNlID8gPT1cclxuICpcclxuICogIEZvciBEYXRlcyBzZWxlY3Rpb24sIHdlIG5lZWQgdG8gdXNlIHRoaXMgbG9naWMhICAgICBXZSBuZWVkIHNlbGVjdCB0aGUgZGF0ZXMgb25seSBhZnRlciBib29raW5nIGRhdGEgbG9hZGVkIVxyXG4gKlxyXG4gKiAgQ2hlY2sgZXhhbXBsZSBiZWxsb3cuXHJcbiAqXHJcbiAqXHQvLyBGaXJlIG9uIGFsbCBib29raW5nIGRhdGVzIGxvYWRlZFxyXG4gKlx0alF1ZXJ5KCAnYm9keScgKS5vbiggJ3dwYmNfY2FsZW5kYXJfYWp4X19sb2FkZWRfZGF0YScsIGZ1bmN0aW9uICggZXZlbnQsIGxvYWRlZF9yZXNvdXJjZV9pZCApe1xyXG4gKlxyXG4gKlx0XHRpZiAoIGxvYWRlZF9yZXNvdXJjZV9pZCA9PSBzZWxlY3RfZGF0ZXNfaW5fY2FsZW5kYXJfaWQgKXtcclxuICpcdFx0XHR3cGJjX2F1dG9fc2VsZWN0X2RhdGVzX2luX2NhbGVuZGFyKCBzZWxlY3RfZGF0ZXNfaW5fY2FsZW5kYXJfaWQsICcyMDI0LTA1LTE1JywgJzIwMjQtMDUtMjUnICk7XHJcbiAqXHRcdH1cclxuICpcdH0gKTtcclxuICpcclxuICovXHJcblxyXG5cclxuLyoqXHJcbiAqIFRyeSB0byBBdXRvIHNlbGVjdCBkYXRlcyBpbiBzcGVjaWZpYyBjYWxlbmRhciBieSBzaW11bGF0ZWQgY2xpY2tzIGluIGRhdGVwaWNrZXJcclxuICpcclxuICogQHBhcmFtIHJlc291cmNlX2lkXHRcdDFcclxuICogQHBhcmFtIGNoZWNrX2luX3ltZFx0XHQnMjAyNC0wNS0wOSdcdFx0T1IgIFx0WycyMDI0LTA1LTA5JywnMjAyNC0wNS0xOScsJzIwMjQtMDUtMjAnXVxyXG4gKiBAcGFyYW0gY2hlY2tfb3V0X3ltZFx0XHQnMjAyNC0wNS0xNSdcdFx0T3B0aW9uYWxcclxuICpcclxuICogQHJldHVybnMge251bWJlcn1cdFx0bnVtYmVyIG9mIHNlbGVjdGVkIGRhdGVzXHJcbiAqXHJcbiAqIFx0RXhhbXBsZSAxOlx0XHRcdFx0dmFyIG51bV9zZWxlY3RlZF9kYXlzID0gd3BiY19hdXRvX3NlbGVjdF9kYXRlc19pbl9jYWxlbmRhciggMSwgJzIwMjQtMDUtMTUnLFxyXG4gKiAgICAgJzIwMjQtMDUtMjUnICk7IEV4YW1wbGUgMjpcdFx0XHRcdHZhciBudW1fc2VsZWN0ZWRfZGF5cyA9IHdwYmNfYXV0b19zZWxlY3RfZGF0ZXNfaW5fY2FsZW5kYXIoIDEsXHJcbiAqICAgICBbJzIwMjQtMDUtMDknLCcyMDI0LTA1LTE5JywnMjAyNC0wNS0yMCddICk7XHJcbiAqL1xyXG5mdW5jdGlvbiB3cGJjX2F1dG9fc2VsZWN0X2RhdGVzX2luX2NhbGVuZGFyKCByZXNvdXJjZV9pZCwgY2hlY2tfaW5feW1kLCBjaGVja19vdXRfeW1kID0gJycgKXtcdFx0XHRcdFx0XHRcdFx0Ly8gRml4SW46IDEwLjAuMC40Ny5cclxuXHJcblx0Y29uc29sZS5sb2coICdXUEJDX0FVVE9fU0VMRUNUX0RBVEVTX0lOX0NBTEVOREFSKCBSRVNPVVJDRV9JRCwgQ0hFQ0tfSU5fWU1ELCBDSEVDS19PVVRfWU1EICknLCByZXNvdXJjZV9pZCwgY2hlY2tfaW5feW1kLCBjaGVja19vdXRfeW1kICk7XHJcblxyXG5cdGlmIChcclxuXHRcdCAgICggJzIxMDAtMDEtMDEnID09IGNoZWNrX2luX3ltZCApXHJcblx0XHR8fCAoICcyMTAwLTAxLTAxJyA9PSBjaGVja19vdXRfeW1kIClcclxuXHRcdHx8ICggKCAnJyA9PSBjaGVja19pbl95bWQgKSAmJiAoICcnID09IGNoZWNrX291dF95bWQgKSApXHJcblx0KXtcclxuXHRcdHJldHVybiAwO1xyXG5cdH1cclxuXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHQvLyBJZiBcdGNoZWNrX2luX3ltZCAgPSAgWyAnMjAyNC0wNS0wOScsJzIwMjQtMDUtMTknLCcyMDI0LTA1LTMwJyBdXHRcdFx0XHRBUlJBWSBvZiBEQVRFU1x0XHRcdFx0XHRcdC8vIEZpeEluOiAxMC4wLjAuNTAuXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHR2YXIgZGF0ZXNfdG9fc2VsZWN0X2FyciA9IFtdO1xyXG5cdGlmICggQXJyYXkuaXNBcnJheSggY2hlY2tfaW5feW1kICkgKXtcclxuXHRcdGRhdGVzX3RvX3NlbGVjdF9hcnIgPSB3cGJjX2Nsb25lX29iaiggY2hlY2tfaW5feW1kICk7XHJcblxyXG5cdFx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdFx0Ly8gRXhjZXB0aW9ucyB0byAgc2V0ICBcdE1VTFRJUExFIERBWVMgXHRtb2RlXHJcblx0XHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0XHQvLyBpZiBkYXRlcyBhcyBOT1QgQ09OU0VDVVRJVkU6IFsnMjAyNC0wNS0wOScsJzIwMjQtMDUtMTknLCcyMDI0LTA1LTMwJ10sIC0+IHNldCBNVUxUSVBMRSBEQVlTIG1vZGVcclxuXHRcdGlmIChcclxuXHRcdFx0ICAgKCBkYXRlc190b19zZWxlY3RfYXJyLmxlbmd0aCA+IDAgKVxyXG5cdFx0XHQmJiAoICcnID09IGNoZWNrX291dF95bWQgKVxyXG5cdFx0XHQmJiAoICEgd3BiY19kYXRlc19faXNfY29uc2VjdXRpdmVfZGF0ZXNfYXJyX3JhbmdlKCBkYXRlc190b19zZWxlY3RfYXJyICkgKVxyXG5cdFx0KXtcclxuXHRcdFx0d3BiY19jYWxfZGF5c19zZWxlY3RfX211bHRpcGxlKCByZXNvdXJjZV9pZCApO1xyXG5cdFx0fVxyXG5cdFx0Ly8gaWYgbXVsdGlwbGUgZGF5cyB0byBzZWxlY3QsIGJ1dCBlbmFibGVkIFNJTkdMRSBkYXkgbW9kZSwgLT4gc2V0IE1VTFRJUExFIERBWVMgbW9kZVxyXG5cdFx0aWYgKFxyXG5cdFx0XHQgICAoIGRhdGVzX3RvX3NlbGVjdF9hcnIubGVuZ3RoID4gMSApXHJcblx0XHRcdCYmICggJycgPT0gY2hlY2tfb3V0X3ltZCApXHJcblx0XHRcdCYmICggJ3NpbmdsZScgPT09IF93cGJjLmNhbGVuZGFyX19nZXRfcGFyYW1fdmFsdWUoIHJlc291cmNlX2lkLCAnZGF5c19zZWxlY3RfbW9kZScgKSApXHJcblx0XHQpe1xyXG5cdFx0XHR3cGJjX2NhbF9kYXlzX3NlbGVjdF9fbXVsdGlwbGUoIHJlc291cmNlX2lkICk7XHJcblx0XHR9XHJcblx0XHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0XHRjaGVja19pbl95bWQgPSBkYXRlc190b19zZWxlY3RfYXJyWyAwIF07XHJcblx0XHRpZiAoICcnID09IGNoZWNrX291dF95bWQgKXtcclxuXHRcdFx0Y2hlY2tfb3V0X3ltZCA9IGRhdGVzX3RvX3NlbGVjdF9hcnJbIChkYXRlc190b19zZWxlY3RfYXJyLmxlbmd0aC0xKSBdO1xyXG5cdFx0fVxyXG5cdH1cclxuXHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHJcblx0aWYgKCAnJyA9PSBjaGVja19pbl95bWQgKXtcclxuXHRcdGNoZWNrX2luX3ltZCA9IGNoZWNrX291dF95bWQ7XHJcblx0fVxyXG5cdGlmICggJycgPT0gY2hlY2tfb3V0X3ltZCApe1xyXG5cdFx0Y2hlY2tfb3V0X3ltZCA9IGNoZWNrX2luX3ltZDtcclxuXHR9XHJcblxyXG5cdGlmICggJ3VuZGVmaW5lZCcgPT09IHR5cGVvZiAocmVzb3VyY2VfaWQpICl7XHJcblx0XHRyZXNvdXJjZV9pZCA9ICcxJztcclxuXHR9XHJcblxyXG5cclxuXHR2YXIgaW5zdCA9IHdwYmNfY2FsZW5kYXJfX2dldF9pbnN0KCByZXNvdXJjZV9pZCApO1xyXG5cclxuXHRpZiAoIG51bGwgIT09IGluc3QgKXtcclxuXHJcblx0XHQvLyBVbnNlbGVjdCBhbGwgZGF0ZXMgYW5kIHNldCAgcHJvcGVydGllcyBvZiBEYXRlcGlja1xyXG5cdFx0alF1ZXJ5KCAnI2RhdGVfYm9va2luZycgKyByZXNvdXJjZV9pZCApLnZhbCggJycgKTsgICAgICBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly9GaXhJbjogNS40LjNcclxuXHRcdGluc3Quc3RheU9wZW4gPSBmYWxzZTtcclxuXHRcdGluc3QuZGF0ZXMgPSBbXTtcclxuXHRcdHZhciBjaGVja19pbl9qcyA9IHdwYmNfX2dldF9fanNfZGF0ZSggY2hlY2tfaW5feW1kICk7XHJcblx0XHR2YXIgdGRfY2VsbCAgICAgPSB3cGJjX2dldF9jbGlja2VkX3RkKCBpbnN0LmlkLCBjaGVja19pbl9qcyApO1xyXG5cclxuXHRcdC8vIElzIG9tZSB0eXBlIG9mIGVycm9yLCB0aGVuIHNlbGVjdCBtdWx0aXBsZSBkYXlzIHNlbGVjdGlvbiAgbW9kZS5cclxuXHRcdGlmICggJycgPT09IF93cGJjLmNhbGVuZGFyX19nZXRfcGFyYW1fdmFsdWUoIHJlc291cmNlX2lkLCAnZGF5c19zZWxlY3RfbW9kZScgKSApIHtcclxuIFx0XHRcdF93cGJjLmNhbGVuZGFyX19zZXRfcGFyYW1fdmFsdWUoIHJlc291cmNlX2lkLCAnZGF5c19zZWxlY3RfbW9kZScsICdtdWx0aXBsZScgKTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0XHQvLyAgPT0gRFlOQU1JQyA9PVxyXG5cdFx0aWYgKCAnZHluYW1pYycgPT09IF93cGJjLmNhbGVuZGFyX19nZXRfcGFyYW1fdmFsdWUoIHJlc291cmNlX2lkLCAnZGF5c19zZWxlY3RfbW9kZScgKSApe1xyXG5cdFx0XHQvLyAxLXN0IGNsaWNrXHJcblx0XHRcdGluc3Quc3RheU9wZW4gPSBmYWxzZTtcclxuXHRcdFx0alF1ZXJ5LmRhdGVwaWNrLl9zZWxlY3REYXkoIHRkX2NlbGwsICcjJyArIGluc3QuaWQsIGNoZWNrX2luX2pzLmdldFRpbWUoKSApO1xyXG5cdFx0XHRpZiAoIDAgPT09IGluc3QuZGF0ZXMubGVuZ3RoICl7XHJcblx0XHRcdFx0cmV0dXJuIDA7ICBcdFx0XHRcdFx0XHRcdFx0Ly8gRmlyc3QgY2xpY2sgIHdhcyB1bnN1Y2Nlc3NmdWwsIHNvIHdlIG11c3Qgbm90IG1ha2Ugb3RoZXIgY2xpY2tcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gMi1uZCBjbGlja1xyXG5cdFx0XHR2YXIgY2hlY2tfb3V0X2pzID0gd3BiY19fZ2V0X19qc19kYXRlKCBjaGVja19vdXRfeW1kICk7XHJcblx0XHRcdHZhciB0ZF9jZWxsX291dCA9IHdwYmNfZ2V0X2NsaWNrZWRfdGQoIGluc3QuaWQsIGNoZWNrX291dF9qcyApO1xyXG5cdFx0XHRpbnN0LnN0YXlPcGVuID0gdHJ1ZTtcclxuXHRcdFx0alF1ZXJ5LmRhdGVwaWNrLl9zZWxlY3REYXkoIHRkX2NlbGxfb3V0LCAnIycgKyBpbnN0LmlkLCBjaGVja19vdXRfanMuZ2V0VGltZSgpICk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0XHQvLyAgPT0gRklYRUQgPT1cclxuXHRcdGlmICggICdmaXhlZCcgPT09IF93cGJjLmNhbGVuZGFyX19nZXRfcGFyYW1fdmFsdWUoIHJlc291cmNlX2lkLCAnZGF5c19zZWxlY3RfbW9kZScgKSkge1xyXG5cdFx0XHRqUXVlcnkuZGF0ZXBpY2suX3NlbGVjdERheSggdGRfY2VsbCwgJyMnICsgaW5zdC5pZCwgY2hlY2tfaW5fanMuZ2V0VGltZSgpICk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0XHQvLyAgPT0gU0lOR0xFID09XHJcblx0XHRpZiAoICdzaW5nbGUnID09PSBfd3BiYy5jYWxlbmRhcl9fZ2V0X3BhcmFtX3ZhbHVlKCByZXNvdXJjZV9pZCwgJ2RheXNfc2VsZWN0X21vZGUnICkgKXtcclxuXHRcdFx0Ly9qUXVlcnkuZGF0ZXBpY2suX3Jlc3RyaWN0TWluTWF4KCBpbnN0LCBqUXVlcnkuZGF0ZXBpY2suX2RldGVybWluZURhdGUoIGluc3QsIGNoZWNrX2luX2pzLCBudWxsICkgKTtcdFx0Ly8gRG8gd2UgbmVlZCB0byBydW4gIHRoaXMgPyBQbGVhc2Ugbm90ZSwgY2hlY2tfaW5fanMgbXVzdCAgaGF2ZSB0aW1lLCAgbWluLCBzZWMgZGVmaW5lZCB0byAwIVxyXG5cdFx0XHRqUXVlcnkuZGF0ZXBpY2suX3NlbGVjdERheSggdGRfY2VsbCwgJyMnICsgaW5zdC5pZCwgY2hlY2tfaW5fanMuZ2V0VGltZSgpICk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0XHQvLyAgPT0gTVVMVElQTEUgPT1cclxuXHRcdGlmICggJ211bHRpcGxlJyA9PT0gX3dwYmMuY2FsZW5kYXJfX2dldF9wYXJhbV92YWx1ZSggcmVzb3VyY2VfaWQsICdkYXlzX3NlbGVjdF9tb2RlJyApICl7XHJcblxyXG5cdFx0XHR2YXIgZGF0ZXNfYXJyO1xyXG5cclxuXHRcdFx0aWYgKCBkYXRlc190b19zZWxlY3RfYXJyLmxlbmd0aCA+IDAgKXtcclxuXHRcdFx0XHQvLyBTaXR1YXRpb24sIHdoZW4gd2UgaGF2ZSBkYXRlcyBhcnJheTogWycyMDI0LTA1LTA5JywnMjAyNC0wNS0xOScsJzIwMjQtMDUtMzAnXS4gIGFuZCBub3QgdGhlIENoZWNrIEluIC8gQ2hlY2sgIG91dCBkYXRlcyBhcyBwYXJhbWV0ZXIgaW4gdGhpcyBmdW5jdGlvblxyXG5cdFx0XHRcdGRhdGVzX2FyciA9IHdwYmNfZ2V0X3NlbGVjdGlvbl9kYXRlc19qc19zdHJfYXJyX19mcm9tX2FyciggZGF0ZXNfdG9fc2VsZWN0X2FyciApO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGRhdGVzX2FyciA9IHdwYmNfZ2V0X3NlbGVjdGlvbl9kYXRlc19qc19zdHJfYXJyX19mcm9tX2NoZWNrX2luX291dCggY2hlY2tfaW5feW1kLCBjaGVja19vdXRfeW1kLCBpbnN0ICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICggMCA9PT0gZGF0ZXNfYXJyLmRhdGVzX2pzLmxlbmd0aCApe1xyXG5cdFx0XHRcdHJldHVybiAwO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBGb3IgQ2FsZW5kYXIgRGF5cyBzZWxlY3Rpb25cclxuXHRcdFx0Zm9yICggdmFyIGogPSAwOyBqIDwgZGF0ZXNfYXJyLmRhdGVzX2pzLmxlbmd0aDsgaisrICl7ICAgICAgIC8vIExvb3AgYXJyYXkgb2YgZGF0ZXNcclxuXHJcblx0XHRcdFx0dmFyIHN0cl9kYXRlID0gd3BiY19fZ2V0X19zcWxfY2xhc3NfZGF0ZSggZGF0ZXNfYXJyLmRhdGVzX2pzWyBqIF0gKTtcclxuXHJcblx0XHRcdFx0Ly8gRGF0ZSB1bmF2YWlsYWJsZSAhXHJcblx0XHRcdFx0aWYgKCAwID09IF93cGJjLmJvb2tpbmdzX2luX2NhbGVuZGFyX19nZXRfZm9yX2RhdGUoIHJlc291cmNlX2lkLCBzdHJfZGF0ZSApLmRheV9hdmFpbGFiaWxpdHkgKXtcclxuXHRcdFx0XHRcdHJldHVybiAwO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aWYgKCBkYXRlc19hcnIuZGF0ZXNfanNbIGogXSAhPSAtMSApIHtcclxuXHRcdFx0XHRcdGluc3QuZGF0ZXMucHVzaCggZGF0ZXNfYXJyLmRhdGVzX2pzWyBqIF0gKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHZhciBjaGVja19vdXRfZGF0ZSA9IGRhdGVzX2Fyci5kYXRlc19qc1sgKGRhdGVzX2Fyci5kYXRlc19qcy5sZW5ndGggLSAxKSBdO1xyXG5cclxuXHRcdFx0aW5zdC5kYXRlcy5wdXNoKCBjaGVja19vdXRfZGF0ZSApOyBcdFx0XHQvLyBOZWVkIGFkZCBvbmUgYWRkaXRpb25hbCBTQU1FIGRhdGUgZm9yIGNvcnJlY3QgIHdvcmtzIG9mIGRhdGVzIHNlbGVjdGlvbiAhISEhIVxyXG5cclxuXHRcdFx0dmFyIGNoZWNrb3V0X3RpbWVzdGFtcCA9IGNoZWNrX291dF9kYXRlLmdldFRpbWUoKTtcclxuXHRcdFx0dmFyIHRkX2NlbGwgPSB3cGJjX2dldF9jbGlja2VkX3RkKCBpbnN0LmlkLCBjaGVja19vdXRfZGF0ZSApO1xyXG5cclxuXHRcdFx0alF1ZXJ5LmRhdGVwaWNrLl9zZWxlY3REYXkoIHRkX2NlbGwsICcjJyArIGluc3QuaWQsIGNoZWNrb3V0X3RpbWVzdGFtcCApO1xyXG5cdFx0fVxyXG5cclxuXHJcblx0XHRpZiAoIDAgIT09IGluc3QuZGF0ZXMubGVuZ3RoICl7XHJcblx0XHRcdC8vIFNjcm9sbCB0byBzcGVjaWZpYyBtb250aCwgaWYgd2Ugc2V0IGRhdGVzIGluIHNvbWUgZnV0dXJlIG1vbnRoc1xyXG5cdFx0XHR3cGJjX2NhbGVuZGFyX19zY3JvbGxfdG8oIHJlc291cmNlX2lkLCBpbnN0LmRhdGVzWyAwIF0uZ2V0RnVsbFllYXIoKSwgaW5zdC5kYXRlc1sgMCBdLmdldE1vbnRoKCkrMSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB3cGJjX2dldF9fc2VsZWN0ZWRfZGF0ZXNfc3FsX19hc19hcnIoIHJlc291cmNlX2lkICkubGVuZ3RoO1xuXHR9XHJcblxyXG5cdHJldHVybiAwO1xyXG59XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldCBIVE1MIHRkIGVsZW1lbnQgKHdoZXJlIHdhcyBjbGljayBpbiBjYWxlbmRhciAgZGF5ICBjZWxsKVxyXG5cdCAqXHJcblx0ICogQHBhcmFtIGNhbGVuZGFyX2h0bWxfaWRcdFx0XHQnY2FsZW5kYXJfYm9va2luZzEnXHJcblx0ICogQHBhcmFtIGRhdGVfanNcdFx0XHRcdFx0SlMgRGF0ZVxyXG5cdCAqIEByZXR1cm5zIHsqfGpRdWVyeX1cdFx0XHRcdERvbSBIVE1MIHRkIGVsZW1lbnRcclxuXHQgKi9cclxuXHRmdW5jdGlvbiB3cGJjX2dldF9jbGlja2VkX3RkKCBjYWxlbmRhcl9odG1sX2lkLCBkYXRlX2pzICl7XHJcblxyXG5cdCAgICB2YXIgdGRfY2VsbCA9IGpRdWVyeSggJyMnICsgY2FsZW5kYXJfaHRtbF9pZCArICcgLnNxbF9kYXRlXycgKyB3cGJjX19nZXRfX3NxbF9jbGFzc19kYXRlKCBkYXRlX2pzICkgKS5nZXQoIDAgKTtcclxuXHJcblx0XHRyZXR1cm4gdGRfY2VsbDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldCBhcnJheXMgb2YgSlMgYW5kIFNRTCBkYXRlcyBhcyBkYXRlcyBhcnJheVxyXG5cdCAqXHJcblx0ICogQHBhcmFtIGNoZWNrX2luX3ltZFx0XHRcdFx0XHRcdFx0JzIwMjQtMDUtMTUnXHJcblx0ICogQHBhcmFtIGNoZWNrX291dF95bWRcdFx0XHRcdFx0XHRcdCcyMDI0LTA1LTI1J1xyXG5cdCAqIEBwYXJhbSBpbnN0XHRcdFx0XHRcdFx0XHRcdFx0RGF0ZXBpY2sgSW5zdC4gVXNlIHdwYmNfY2FsZW5kYXJfX2dldF9pbnN0KCByZXNvdXJjZV9pZCApO1xyXG5cdCAqIEByZXR1cm5zIHt7ZGF0ZXNfanM6ICpbXSwgZGF0ZXNfc3RyOiAqW119fVxyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIHdwYmNfZ2V0X3NlbGVjdGlvbl9kYXRlc19qc19zdHJfYXJyX19mcm9tX2NoZWNrX2luX291dCggY2hlY2tfaW5feW1kLCBjaGVja19vdXRfeW1kICwgaW5zdCApe1xyXG5cclxuXHRcdHZhciBvcmlnaW5hbF9hcnJheSA9IFtdO1xyXG5cdFx0dmFyIGRhdGU7XHJcblx0XHR2YXIgYmtfZGlzdGluY3RfZGF0ZXMgPSBbXTtcclxuXHJcblx0XHR2YXIgY2hlY2tfaW5fZGF0ZSA9IGNoZWNrX2luX3ltZC5zcGxpdCggJy0nICk7XHJcblx0XHR2YXIgY2hlY2tfb3V0X2RhdGUgPSBjaGVja19vdXRfeW1kLnNwbGl0KCAnLScgKTtcclxuXHJcblx0XHRkYXRlID0gbmV3IERhdGUoKTtcclxuXHRcdGRhdGUuc2V0RnVsbFllYXIoIGNoZWNrX2luX2RhdGVbIDAgXSwgKGNoZWNrX2luX2RhdGVbIDEgXSAtIDEpLCBjaGVja19pbl9kYXRlWyAyIF0gKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB5ZWFyLCBtb250aCwgZGF0ZVxyXG5cdFx0dmFyIG9yaWdpbmFsX2NoZWNrX2luX2RhdGUgPSBkYXRlO1xyXG5cdFx0b3JpZ2luYWxfYXJyYXkucHVzaCggalF1ZXJ5LmRhdGVwaWNrLl9yZXN0cmljdE1pbk1heCggaW5zdCwgalF1ZXJ5LmRhdGVwaWNrLl9kZXRlcm1pbmVEYXRlKCBpbnN0LCBkYXRlLCBudWxsICkgKSApOyAvL2FkZCBkYXRlXHJcblx0XHRpZiAoICEgd3BiY19pbl9hcnJheSggYmtfZGlzdGluY3RfZGF0ZXMsIChjaGVja19pbl9kYXRlWyAyIF0gKyAnLicgKyBjaGVja19pbl9kYXRlWyAxIF0gKyAnLicgKyBjaGVja19pbl9kYXRlWyAwIF0pICkgKXtcclxuXHRcdFx0YmtfZGlzdGluY3RfZGF0ZXMucHVzaCggcGFyc2VJbnQoY2hlY2tfaW5fZGF0ZVsgMiBdKSArICcuJyArIHBhcnNlSW50KGNoZWNrX2luX2RhdGVbIDEgXSkgKyAnLicgKyBjaGVja19pbl9kYXRlWyAwIF0gKTtcclxuXHRcdH1cclxuXHJcblx0XHR2YXIgZGF0ZV9vdXQgPSBuZXcgRGF0ZSgpO1xyXG5cdFx0ZGF0ZV9vdXQuc2V0RnVsbFllYXIoIGNoZWNrX291dF9kYXRlWyAwIF0sIChjaGVja19vdXRfZGF0ZVsgMSBdIC0gMSksIGNoZWNrX291dF9kYXRlWyAyIF0gKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB5ZWFyLCBtb250aCwgZGF0ZVxyXG5cdFx0dmFyIG9yaWdpbmFsX2NoZWNrX291dF9kYXRlID0gZGF0ZV9vdXQ7XHJcblxyXG5cdFx0dmFyIG1ld0RhdGUgPSBuZXcgRGF0ZSggb3JpZ2luYWxfY2hlY2tfaW5fZGF0ZS5nZXRGdWxsWWVhcigpLCBvcmlnaW5hbF9jaGVja19pbl9kYXRlLmdldE1vbnRoKCksIG9yaWdpbmFsX2NoZWNrX2luX2RhdGUuZ2V0RGF0ZSgpICk7XHJcblx0XHRtZXdEYXRlLnNldERhdGUoIG9yaWdpbmFsX2NoZWNrX2luX2RhdGUuZ2V0RGF0ZSgpICsgMSApO1xyXG5cclxuXHRcdHdoaWxlIChcclxuXHRcdFx0KG9yaWdpbmFsX2NoZWNrX291dF9kYXRlID4gZGF0ZSkgJiZcclxuXHRcdFx0KG9yaWdpbmFsX2NoZWNrX2luX2RhdGUgIT0gb3JpZ2luYWxfY2hlY2tfb3V0X2RhdGUpICl7XHJcblx0XHRcdGRhdGUgPSBuZXcgRGF0ZSggbWV3RGF0ZS5nZXRGdWxsWWVhcigpLCBtZXdEYXRlLmdldE1vbnRoKCksIG1ld0RhdGUuZ2V0RGF0ZSgpICk7XHJcblxyXG5cdFx0XHRvcmlnaW5hbF9hcnJheS5wdXNoKCBqUXVlcnkuZGF0ZXBpY2suX3Jlc3RyaWN0TWluTWF4KCBpbnN0LCBqUXVlcnkuZGF0ZXBpY2suX2RldGVybWluZURhdGUoIGluc3QsIGRhdGUsIG51bGwgKSApICk7IC8vYWRkIGRhdGVcclxuXHRcdFx0aWYgKCAhd3BiY19pbl9hcnJheSggYmtfZGlzdGluY3RfZGF0ZXMsIChkYXRlLmdldERhdGUoKSArICcuJyArIHBhcnNlSW50KCBkYXRlLmdldE1vbnRoKCkgKyAxICkgKyAnLicgKyBkYXRlLmdldEZ1bGxZZWFyKCkpICkgKXtcclxuXHRcdFx0XHRia19kaXN0aW5jdF9kYXRlcy5wdXNoKCAocGFyc2VJbnQoZGF0ZS5nZXREYXRlKCkpICsgJy4nICsgcGFyc2VJbnQoIGRhdGUuZ2V0TW9udGgoKSArIDEgKSArICcuJyArIGRhdGUuZ2V0RnVsbFllYXIoKSkgKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0bWV3RGF0ZSA9IG5ldyBEYXRlKCBkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCkgKTtcclxuXHRcdFx0bWV3RGF0ZS5zZXREYXRlKCBtZXdEYXRlLmdldERhdGUoKSArIDEgKTtcclxuXHRcdH1cclxuXHRcdG9yaWdpbmFsX2FycmF5LnBvcCgpO1xyXG5cdFx0YmtfZGlzdGluY3RfZGF0ZXMucG9wKCk7XHJcblxyXG5cdFx0cmV0dXJuIHsnZGF0ZXNfanMnOiBvcmlnaW5hbF9hcnJheSwgJ2RhdGVzX3N0cic6IGJrX2Rpc3RpbmN0X2RhdGVzfTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldCBhcnJheXMgb2YgSlMgYW5kIFNRTCBkYXRlcyBhcyBkYXRlcyBhcnJheVxyXG5cdCAqXHJcblx0ICogQHBhcmFtIGRhdGVzX3RvX3NlbGVjdF9hcnJcdD0gWycyMDI0LTA1LTA5JywnMjAyNC0wNS0xOScsJzIwMjQtMDUtMzAnXVxyXG5cdCAqXHJcblx0ICogQHJldHVybnMge3tkYXRlc19qczogKltdLCBkYXRlc19zdHI6ICpbXX19XHJcblx0ICovXHJcblx0ZnVuY3Rpb24gd3BiY19nZXRfc2VsZWN0aW9uX2RhdGVzX2pzX3N0cl9hcnJfX2Zyb21fYXJyKCBkYXRlc190b19zZWxlY3RfYXJyICl7XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBGaXhJbjogMTAuMC4wLjUwLlxyXG5cclxuXHRcdHZhciBvcmlnaW5hbF9hcnJheSAgICA9IFtdO1xyXG5cdFx0dmFyIGJrX2Rpc3RpbmN0X2RhdGVzID0gW107XHJcblx0XHR2YXIgb25lX2RhdGVfc3RyO1xyXG5cclxuXHRcdGZvciAoIHZhciBkID0gMDsgZCA8IGRhdGVzX3RvX3NlbGVjdF9hcnIubGVuZ3RoOyBkKysgKXtcclxuXHJcblx0XHRcdG9yaWdpbmFsX2FycmF5LnB1c2goIHdwYmNfX2dldF9fanNfZGF0ZSggZGF0ZXNfdG9fc2VsZWN0X2FyclsgZCBdICkgKTtcclxuXHJcblx0XHRcdG9uZV9kYXRlX3N0ciA9IGRhdGVzX3RvX3NlbGVjdF9hcnJbIGQgXS5zcGxpdCgnLScpXHJcblx0XHRcdGlmICggISB3cGJjX2luX2FycmF5KCBia19kaXN0aW5jdF9kYXRlcywgKG9uZV9kYXRlX3N0clsgMiBdICsgJy4nICsgb25lX2RhdGVfc3RyWyAxIF0gKyAnLicgKyBvbmVfZGF0ZV9zdHJbIDAgXSkgKSApe1xyXG5cdFx0XHRcdGJrX2Rpc3RpbmN0X2RhdGVzLnB1c2goIHBhcnNlSW50KG9uZV9kYXRlX3N0clsgMiBdKSArICcuJyArIHBhcnNlSW50KG9uZV9kYXRlX3N0clsgMSBdKSArICcuJyArIG9uZV9kYXRlX3N0clsgMCBdICk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4geydkYXRlc19qcyc6IG9yaWdpbmFsX2FycmF5LCAnZGF0ZXNfc3RyJzogb3JpZ2luYWxfYXJyYXl9O1xyXG5cdH1cclxuXHJcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4vKiAgPT0gIEF1dG8gRmlsbCBGaWVsZHMgLyBBdXRvIFNlbGVjdCBEYXRlcyAgPT1cclxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXHJcblxyXG5qUXVlcnkoIGRvY3VtZW50ICkucmVhZHkoIGZ1bmN0aW9uICgpe1xyXG5cclxuXHR2YXIgdXJsX3BhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoIHdpbmRvdy5sb2NhdGlvbi5zZWFyY2ggKTtcclxuXHJcblx0Ly8gRGlzYWJsZSBkYXlzIHNlbGVjdGlvbiAgaW4gY2FsZW5kYXIsICBhZnRlciAgcmVkaXJlY3Rpb24gIGZyb20gIHRoZSBcIlNlYXJjaCByZXN1bHRzIHBhZ2UsICBhZnRlciAgc2VhcmNoICBhdmFpbGFiaWxpdHlcIiBcdFx0XHQvLyBGaXhJbjogOC44LjIuMy5cclxuXHRpZiAgKCAnT24nICE9IF93cGJjLmdldF9vdGhlcl9wYXJhbSggJ2lzX2VuYWJsZWRfYm9va2luZ19zZWFyY2hfcmVzdWx0c19kYXlzX3NlbGVjdCcgKSApIHtcclxuXHRcdGlmIChcclxuXHRcdFx0KCB1cmxfcGFyYW1zLmhhcyggJ3dwYmNfc2VsZWN0X2NoZWNrX2luJyApICkgJiZcclxuXHRcdFx0KCB1cmxfcGFyYW1zLmhhcyggJ3dwYmNfc2VsZWN0X2NoZWNrX291dCcgKSApICYmXHJcblx0XHRcdCggdXJsX3BhcmFtcy5oYXMoICd3cGJjX3NlbGVjdF9jYWxlbmRhcl9pZCcgKSApXHJcblx0XHQpe1xyXG5cclxuXHRcdFx0dmFyIHNlbGVjdF9kYXRlc19pbl9jYWxlbmRhcl9pZCA9IHBhcnNlSW50KCB1cmxfcGFyYW1zLmdldCggJ3dwYmNfc2VsZWN0X2NhbGVuZGFyX2lkJyApICk7XHJcblxyXG5cdFx0XHQvLyBGaXJlIG9uIGFsbCBib29raW5nIGRhdGVzIGxvYWRlZFxyXG5cdFx0XHRqUXVlcnkoICdib2R5JyApLm9uKCAnd3BiY19jYWxlbmRhcl9hanhfX2xvYWRlZF9kYXRhJywgZnVuY3Rpb24gKCBldmVudCwgbG9hZGVkX3Jlc291cmNlX2lkICl7XHJcblxyXG5cdFx0XHRcdGlmICggbG9hZGVkX3Jlc291cmNlX2lkID09IHNlbGVjdF9kYXRlc19pbl9jYWxlbmRhcl9pZCApe1xyXG5cdFx0XHRcdFx0d3BiY19hdXRvX3NlbGVjdF9kYXRlc19pbl9jYWxlbmRhciggc2VsZWN0X2RhdGVzX2luX2NhbGVuZGFyX2lkLCB1cmxfcGFyYW1zLmdldCggJ3dwYmNfc2VsZWN0X2NoZWNrX2luJyApLCB1cmxfcGFyYW1zLmdldCggJ3dwYmNfc2VsZWN0X2NoZWNrX291dCcgKSApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0aWYgKFxuXHRcdHVybF9wYXJhbXMuaGFzKCAnd3BiY19hdXRvX2ZpbGwnIClcblx0XHQmJiAhIGpRdWVyeSggJ2JvZHknICkuaGFzQ2xhc3MoICd3cC1hZG1pbicgKVxuXHQpe1xuXHJcblx0XHR2YXIgd3BiY19hdXRvX2ZpbGxfdmFsdWUgPSB1cmxfcGFyYW1zLmdldCggJ3dwYmNfYXV0b19maWxsJyApO1xyXG5cclxuXHRcdC8vIENvbnZlcnQgYmFjay4gICAgIFNvbWUgc3lzdGVtcyBkbyBub3QgbGlrZSBzeW1ib2wgJ34nIGluIFVSTCwgc28gIHdlIG5lZWQgdG8gcmVwbGFjZSB0byAgc29tZSBvdGhlciBzeW1ib2xzXHJcblx0XHR3cGJjX2F1dG9fZmlsbF92YWx1ZSA9IHdwYmNfYXV0b19maWxsX3ZhbHVlLnJlcGxhY2VBbGwoICdfXl8nLCAnficgKTtcclxuXHJcblx0XHR3cGJjX2F1dG9fZmlsbF9ib29raW5nX2ZpZWxkcyggd3BiY19hdXRvX2ZpbGxfdmFsdWUgKTtcclxuXHR9XHJcblxyXG59ICk7XHJcblxyXG4vKipcclxuICogQXV0b2ZpbGwgLyBzZWxlY3QgYm9va2luZyBmb3JtICBmaWVsZHMgYnkgIHZhbHVlcyBmcm9tICB0aGUgR0VUIHJlcXVlc3QgIHBhcmFtZXRlcjogP3dwYmNfYXV0b19maWxsPVxyXG4gKlxyXG4gKiBVUkwtcHJvdmlkZWQgZmllbGQgbmFtZXMgYXJlIHJlc29sdmVkIHRocm91Z2ggdGhlIGV4YWN0LW5hbWUgRE9NIEFQSSBzb1xuICogdGhleSBjYW4gbmV2ZXIgYmUgaW50ZXJwcmV0ZWQgYXMgQ1NTIHNlbGVjdG9yIHN5bnRheC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXV0b19maWxsX3N0ciBTZXJpYWxpemVkIGZpZWxkLW5hbWUgYW5kIHZhbHVlIHBhaXJzLlxuICogQHJldHVybiB7dm9pZH1cbiAqL1xyXG5mdW5jdGlvbiB3cGJjX2F1dG9fZmlsbF9ib29raW5nX2ZpZWxkcyggYXV0b19maWxsX3N0ciApe1x0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRml4SW46IDEwLjAuMC40OC5cclxuXHJcblx0aWYgKCAnJyA9PSBhdXRvX2ZpbGxfc3RyICl7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cclxuLy8gY29uc29sZS5sb2coICdXUEJDX0FVVE9fRklMTF9CT09LSU5HX0ZJRUxEUyggQVVUT19GSUxMX1NUUiApJywgYXV0b19maWxsX3N0cik7XHJcblxyXG5cdHZhciBmaWVsZHNfYXJyID0gd3BiY19hdXRvX2ZpbGxfYm9va2luZ19maWVsZHNfX3BhcnNlKCBhdXRvX2ZpbGxfc3RyICk7XG5cblx0Zm9yICggbGV0IGkgPSAwOyBpIDwgZmllbGRzX2Fyci5sZW5ndGg7IGkrKyApe1xuXHRcdHZhciBmaWVsZF9uYW1lID0gU3RyaW5nKCBmaWVsZHNfYXJyWyBpIF1bICduYW1lJyBdIHx8ICcnICk7XG5cdFx0aWYgKCAnJyA9PT0gZmllbGRfbmFtZSApIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdHZhciBmaWVsZF9lbGVtZW50cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKCBmaWVsZF9uYW1lICk7XG5cdFx0aWYgKCAwIDwgZmllbGRfZWxlbWVudHMubGVuZ3RoICkge1xuXHRcdFx0alF1ZXJ5KCBmaWVsZF9lbGVtZW50cyApLnZhbCggZmllbGRzX2FyclsgaSBdWyAndmFsdWUnIF0gKTtcblx0XHR9XG5cdH1cbn1cblxyXG5cdC8qKlxyXG5cdCAqIFBhcnNlIGRhdGEgZnJvbSAgZ2V0IHBhcmFtZXRlcjpcdD93cGJjX2F1dG9fZmlsbD12aXNpdG9yczIzMV4yfm1heF9jYXBhY2l0eTIzMV4yXHJcblx0ICpcclxuXHQgKiBAcGFyYW0gZGF0YV9zdHIgICAgICA9ICAgJ3Zpc2l0b3JzMjMxXjJ+bWF4X2NhcGFjaXR5MjMxXjInO1xyXG5cdCAqIEByZXR1cm5zIHsqfVxyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIHdwYmNfYXV0b19maWxsX2Jvb2tpbmdfZmllbGRzX19wYXJzZSggZGF0YV9zdHIgKXtcclxuXHJcblx0XHR2YXIgZmlsdGVyX29wdGlvbnNfYXJyID0gW107XHJcblxyXG5cdFx0dmFyIGRhdGFfYXJyID0gZGF0YV9zdHIuc3BsaXQoICd+JyApO1xyXG5cclxuXHRcdGZvciAoIHZhciBqID0gMDsgaiA8IGRhdGFfYXJyLmxlbmd0aDsgaisrICl7XHJcblxyXG5cdFx0XHR2YXIgbXlfZm9ybV9maWVsZCA9IGRhdGFfYXJyWyBqIF0uc3BsaXQoICdeJyApO1xyXG5cclxuXHRcdFx0dmFyIGZpbHRlcl9uYW1lICA9ICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIChteV9mb3JtX2ZpZWxkWyAwIF0pKSA/IG15X2Zvcm1fZmllbGRbIDAgXSA6ICcnO1xyXG5cdFx0XHR2YXIgZmlsdGVyX3ZhbHVlID0gKCd1bmRlZmluZWQnICE9PSB0eXBlb2YgKG15X2Zvcm1fZmllbGRbIDEgXSkpID8gbXlfZm9ybV9maWVsZFsgMSBdIDogJyc7XHJcblxyXG5cdFx0XHRmaWx0ZXJfb3B0aW9uc19hcnIucHVzaChcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnbmFtZScgIDogZmlsdGVyX25hbWUsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQndmFsdWUnIDogZmlsdGVyX3ZhbHVlXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0ICAgKTtcclxuXHRcdH1cclxuXHRcdHJldHVybiBmaWx0ZXJfb3B0aW9uc19hcnI7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBQYXJzZSBkYXRhIGZyb20gIGdldCBwYXJhbWV0ZXI6XHQ/c2VhcmNoX2dldF9fY3VzdG9tX3BhcmFtcz0uLi5cclxuXHQgKlxyXG5cdCAqIEBwYXJhbSBkYXRhX3N0ciAgICAgID0gICAndGV4dF5zZWFyY2hfZmllbGRfX2Rpc3BsYXlfY2hlY2tfaW5eMjMuMDUuMjAyNH50ZXh0XnNlYXJjaF9maWVsZF9fZGlzcGxheV9jaGVja19vdXReMjYuMDUuMjAyNH5zZWxlY3Rib3gtb25lXnNlYXJjaF9xdWFudGl0eV4yfnNlbGVjdGJveC1vbmVebG9jYXRpb25eU3BhaW5+c2VsZWN0Ym94LW9uZV5tYXhfY2FwYWNpdHleMn5zZWxlY3Rib3gtb25lXmFtZW5pdHlecGFya2luZ35jaGVja2JveF5zZWFyY2hfZmllbGRfX2V4dGVuZF9zZWFyY2hfZGF5c141fnN1Ym1pdF5eU2VhcmNofmhpZGRlbl5zZWFyY2hfZ2V0X19jaGVja19pbl95bWReMjAyNC0wNS0yM35oaWRkZW5ec2VhcmNoX2dldF9fY2hlY2tfb3V0X3ltZF4yMDI0LTA1LTI2fmhpZGRlbl5zZWFyY2hfZ2V0X190aW1lXn5oaWRkZW5ec2VhcmNoX2dldF9fcXVhbnRpdHleMn5oaWRkZW5ec2VhcmNoX2dldF9fZXh0ZW5kXjV+aGlkZGVuXnNlYXJjaF9nZXRfX3VzZXJzX2lkXn5oaWRkZW5ec2VhcmNoX2dldF9fY3VzdG9tX3BhcmFtc15+JztcclxuXHQgKiBAcmV0dXJucyB7Kn1cclxuXHQgKi9cclxuXHRmdW5jdGlvbiB3cGJjX2F1dG9fZmlsbF9zZWFyY2hfZmllbGRzX19wYXJzZSggZGF0YV9zdHIgKXtcclxuXHJcblx0XHR2YXIgZmlsdGVyX29wdGlvbnNfYXJyID0gW107XHJcblxyXG5cdFx0dmFyIGRhdGFfYXJyID0gZGF0YV9zdHIuc3BsaXQoICd+JyApO1xyXG5cclxuXHRcdGZvciAoIHZhciBqID0gMDsgaiA8IGRhdGFfYXJyLmxlbmd0aDsgaisrICl7XHJcblxyXG5cdFx0XHR2YXIgbXlfZm9ybV9maWVsZCA9IGRhdGFfYXJyWyBqIF0uc3BsaXQoICdeJyApO1xyXG5cclxuXHRcdFx0dmFyIGZpbHRlcl90eXBlICA9ICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIChteV9mb3JtX2ZpZWxkWyAwIF0pKSA/IG15X2Zvcm1fZmllbGRbIDAgXSA6ICcnO1xyXG5cdFx0XHR2YXIgZmlsdGVyX25hbWUgID0gKCd1bmRlZmluZWQnICE9PSB0eXBlb2YgKG15X2Zvcm1fZmllbGRbIDEgXSkpID8gbXlfZm9ybV9maWVsZFsgMSBdIDogJyc7XHJcblx0XHRcdHZhciBmaWx0ZXJfdmFsdWUgPSAoJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiAobXlfZm9ybV9maWVsZFsgMiBdKSkgPyBteV9mb3JtX2ZpZWxkWyAyIF0gOiAnJztcclxuXHJcblx0XHRcdGZpbHRlcl9vcHRpb25zX2Fyci5wdXNoKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCd0eXBlJyAgOiBmaWx0ZXJfdHlwZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCduYW1lJyAgOiBmaWx0ZXJfbmFtZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCd2YWx1ZScgOiBmaWx0ZXJfdmFsdWVcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHQgICApO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGZpbHRlcl9vcHRpb25zX2FycjtcclxuXHR9XHJcblxyXG5cclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbi8qICA9PSAgQXV0byBVcGRhdGUgbnVtYmVyIG9mIG1vbnRocyBpbiBjYWxlbmRhcnMgT04gc2NyZWVuIHNpemUgY2hhbmdlZCAgPT1cclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG4vKipcclxuICogQXV0byBVcGRhdGUgTnVtYmVyIG9mIE1vbnRocyBpbiBDYWxlbmRhciwgZS5nLjogIFx0XHRpZiAgICAoIFdJTkRPV19XSURUSCA8PSA3ODJweCApICAgPj4+IFx0TU9OVEhTX05VTUJFUiA9IDFcclxuICogICBFTFNFOiAgbnVtYmVyIG9mIG1vbnRocyBkZWZpbmVkIGluIHNob3J0Y29kZS5cclxuICogQHBhcmFtIHJlc291cmNlX2lkIGludFxyXG4gKlxyXG4gKi9cclxuZnVuY3Rpb24gd3BiY19jYWxlbmRhcl9fYXV0b191cGRhdGVfbW9udGhzX251bWJlcl9fb25fcmVzaXplKCByZXNvdXJjZV9pZCApe1xyXG5cclxuXHRpZiAoIHRydWUgPT09IF93cGJjLmdldF9vdGhlcl9wYXJhbSggJ2lzX2FsbG93X3NldmVyYWxfbW9udGhzX29uX21vYmlsZScgKSApIHtcclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcblxyXG5cdHZhciBsb2NhbF9fbnVtYmVyX29mX21vbnRocyA9IHBhcnNlSW50KCBfd3BiYy5jYWxlbmRhcl9fZ2V0X3BhcmFtX3ZhbHVlKCByZXNvdXJjZV9pZCwgJ2NhbGVuZGFyX251bWJlcl9vZl9tb250aHMnICkgKTtcclxuXHJcblx0aWYgKCBsb2NhbF9fbnVtYmVyX29mX21vbnRocyA+IDEgKXtcclxuXHJcblx0XHRpZiAoIGpRdWVyeSggd2luZG93ICkud2lkdGgoKSA8PSA3ODIgKXtcclxuXHRcdFx0d3BiY19jYWxlbmRhcl9fdXBkYXRlX21vbnRoc19udW1iZXIoIHJlc291cmNlX2lkLCAxICk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR3cGJjX2NhbGVuZGFyX191cGRhdGVfbW9udGhzX251bWJlciggcmVzb3VyY2VfaWQsIGxvY2FsX19udW1iZXJfb2ZfbW9udGhzICk7XHJcblx0XHR9XHJcblxyXG5cdH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEF1dG8gVXBkYXRlIE51bWJlciBvZiBNb250aHMgaW4gICBBTEwgICBDYWxlbmRhcnNcclxuICpcclxuICovXHJcbmZ1bmN0aW9uIHdwYmNfY2FsZW5kYXJzX19hdXRvX3VwZGF0ZV9tb250aHNfbnVtYmVyKCl7XHJcblxyXG5cdHZhciBhbGxfY2FsZW5kYXJzX2FyciA9IF93cGJjLmNhbGVuZGFyc19hbGxfX2dldCgpO1xyXG5cclxuXHQvLyBUaGlzIExPT1AgXCJmb3IgaW5cIiBpcyBHT09ELCBiZWNhdXNlIHdlIGNoZWNrICBoZXJlIGtleXMgICAgJ2NhbGVuZGFyXycgPT09IGNhbGVuZGFyX2lkLnNsaWNlKCAwLCA5IClcclxuXHRmb3IgKCB2YXIgY2FsZW5kYXJfaWQgaW4gYWxsX2NhbGVuZGFyc19hcnIgKXtcclxuXHRcdGlmICggJ2NhbGVuZGFyXycgPT09IGNhbGVuZGFyX2lkLnNsaWNlKCAwLCA5ICkgKXtcclxuXHRcdFx0dmFyIHJlc291cmNlX2lkID0gcGFyc2VJbnQoIGNhbGVuZGFyX2lkLnNsaWNlKCA5ICkgKTtcdFx0XHQvLyAgJ2NhbGVuZGFyXzMnIC0+IDNcclxuXHRcdFx0aWYgKCByZXNvdXJjZV9pZCA+IDAgKXtcclxuXHRcdFx0XHR3cGJjX2NhbGVuZGFyX19hdXRvX3VwZGF0ZV9tb250aHNfbnVtYmVyX19vbl9yZXNpemUoIHJlc291cmNlX2lkICk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBJZiBicm93c2VyIHdpbmRvdyBjaGFuZ2VkLCAgdGhlbiAgdXBkYXRlIG51bWJlciBvZiBtb250aHMuXHJcbiAqL1xyXG5qUXVlcnkoIHdpbmRvdyApLm9uKCAncmVzaXplJywgZnVuY3Rpb24gKCl7XHJcblx0d3BiY19jYWxlbmRhcnNfX2F1dG9fdXBkYXRlX21vbnRoc19udW1iZXIoKTtcclxufSApO1xyXG5cclxuLyoqXHJcbiAqIEF1dG8gdXBkYXRlIGNhbGVuZGFyIG51bWJlciBvZiBtb250aHMgb24gaW5pdGlhbCBwYWdlIGxvYWRcclxuICovXHJcbmpRdWVyeSggZG9jdW1lbnQgKS5yZWFkeSggZnVuY3Rpb24gKCl7XHJcblx0dmFyIGNsb3NlZF90aW1lciA9IHNldFRpbWVvdXQoIGZ1bmN0aW9uICgpe1xyXG5cdFx0d3BiY19jYWxlbmRhcnNfX2F1dG9fdXBkYXRlX21vbnRoc19udW1iZXIoKTtcclxuXHR9LCAxMDAgKTtcclxufSk7XHJcblxyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuLyogID09ICBDaGVjazogY2FsZW5kYXJfZGF0ZXNfc3RhcnQ6IFwiMjAyNi0wMS0wMVwiLCBjYWxlbmRhcl9kYXRlc19lbmQ6IFwiMjAyNi0xMi0zMVwiID09ICAvLyBGaXhJbjogMTAuMTMuMS40LlxyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHQvKipcclxuXHQgKiBHZXQgU3RhcnQgSlMgRGF0ZSBvZiBzdGFydGluZyBkYXRlcyBpbiBjYWxlbmRhciwgZnJvbSB0aGUgX3dwYmMgb2JqZWN0LlxyXG5cdCAqXHJcblx0ICogQHBhcmFtIGludGVnZXIgcmVzb3VyY2VfaWQgLSByZXNvdXJjZSBJRCwgZS5nLjogMS5cclxuXHQgKi9cclxuXHRmdW5jdGlvbiB3cGJjX2NhbGVuZGFyX19nZXRfZGF0ZXNfc3RhcnQoIHJlc291cmNlX2lkICkge1xyXG5cdFx0cmV0dXJuIHdwYmNfY2FsZW5kYXJfX2dldF9kYXRlX3BhcmFtZXRlciggcmVzb3VyY2VfaWQsICdjYWxlbmRhcl9kYXRlc19zdGFydCcgKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldCBFbmQgSlMgRGF0ZSBvZiBlbmRpbmcgZGF0ZXMgaW4gY2FsZW5kYXIsIGZyb20gdGhlIF93cGJjIG9iamVjdC5cclxuXHQgKlxyXG5cdCAqIEBwYXJhbSBpbnRlZ2VyIHJlc291cmNlX2lkIC0gcmVzb3VyY2UgSUQsIGUuZy46IDEuXHJcblx0ICovXHJcblx0ZnVuY3Rpb24gd3BiY19jYWxlbmRhcl9fZ2V0X2RhdGVzX2VuZChyZXNvdXJjZV9pZCkge1xyXG5cdFx0cmV0dXJuIHdwYmNfY2FsZW5kYXJfX2dldF9kYXRlX3BhcmFtZXRlciggcmVzb3VyY2VfaWQsICdjYWxlbmRhcl9kYXRlc19lbmQnICk7XHJcblx0fVxyXG5cclxuLyoqXHJcbiAqIEdldCB2YWxpZGF0ZXMgZGF0ZSBwYXJhbWV0ZXIuXHJcbiAqXHJcbiAqIEBwYXJhbSByZXNvdXJjZV9pZCAgIC0gMVxyXG4gKiBAcGFyYW0gcGFyYW1ldGVyX3N0ciAtICdjYWxlbmRhcl9kYXRlc19zdGFydCcgfCAnY2FsZW5kYXJfZGF0ZXNfZW5kJyB8IC4uLlxyXG4gKi9cclxuZnVuY3Rpb24gd3BiY19jYWxlbmRhcl9fZ2V0X2RhdGVfcGFyYW1ldGVyKHJlc291cmNlX2lkLCBwYXJhbWV0ZXJfc3RyKSB7XHJcblxyXG5cdHZhciBkYXRlX2V4cGVjdGVkX3ltZCA9IF93cGJjLmNhbGVuZGFyX19nZXRfcGFyYW1fdmFsdWUoIHJlc291cmNlX2lkLCBwYXJhbWV0ZXJfc3RyICk7XHJcblxyXG5cdGlmICggISBkYXRlX2V4cGVjdGVkX3ltZCApIHtcclxuXHRcdHJldHVybiBmYWxzZTsgICAgICAgICAgICAgLy8gJycgfCAwIHwgbnVsbCB8IHVuZGVmaW5lZCAgLT4gZmFsc2UuXHJcblx0fVxyXG5cclxuXHRpZiAoIC0xICE9PSBkYXRlX2V4cGVjdGVkX3ltZC5pbmRleE9mKCAnLScgKSApIHtcclxuXHJcblx0XHR2YXIgZGF0ZV9leHBlY3RlZF95bWRfYXJyID0gZGF0ZV9leHBlY3RlZF95bWQuc3BsaXQoICctJyApO1x0Ly8gJzIwMjUtMDctMjYnIC0+IFsnMjAyNScsICcwNycsICcyNiddXHJcblxyXG5cdFx0aWYgKCBkYXRlX2V4cGVjdGVkX3ltZF9hcnIubGVuZ3RoID4gMCApIHtcclxuXHRcdFx0dmFyIHllYXIgID0gKGRhdGVfZXhwZWN0ZWRfeW1kX2Fyci5sZW5ndGggPiAwKSA/IHBhcnNlSW50KCBkYXRlX2V4cGVjdGVkX3ltZF9hcnJbMF0gKSA6IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKTtcdC8vIFllYXIuXHJcblx0XHRcdHZhciBtb250aCA9IChkYXRlX2V4cGVjdGVkX3ltZF9hcnIubGVuZ3RoID4gMSkgPyAocGFyc2VJbnQoIGRhdGVfZXhwZWN0ZWRfeW1kX2FyclsxXSApIC0gMSkgOiAwOyAgLy8gKG1vbnRoIC0gMSkgb3IgMCAtIEphbi5cclxuXHRcdFx0dmFyIGRheSAgID0gKGRhdGVfZXhwZWN0ZWRfeW1kX2Fyci5sZW5ndGggPiAyKSA/IHBhcnNlSW50KCBkYXRlX2V4cGVjdGVkX3ltZF9hcnJbMl0gKSA6IDE7ICAvLyBkYXRlIG9yIE90aGVyd2lzZSAxc3Qgb2YgbW9udGhcclxuXHJcblx0XHRcdHZhciBkYXRlX2pzID0gbmV3IERhdGUoIHllYXIsIG1vbnRoLCBkYXksIDAsIDAsIDAsIDAgKTtcclxuXHJcblx0XHRcdHJldHVybiBkYXRlX2pzO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cmV0dXJuIGZhbHNlOyAgLy8gRmFsbGJhY2ssICBpZiB3ZSBub3QgcGFyc2VkIHRoaXMgcGFyYW1ldGVyICAnY2FsZW5kYXJfZGF0ZXNfc3RhcnQnID0gJzIwMjUtMDctMjYnLCAgZm9yIGV4YW1wbGUgYmVjYXVzZSBvZiAnY2FsZW5kYXJfZGF0ZXNfc3RhcnQnID0gJ3Nmc2RmJy5cclxufVxyXG4iLCIvKipcclxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuICpcdGluY2x1ZGVzL19fanMvY2FsL2RheXNfc2VsZWN0X2N1c3RvbS5qc1xyXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4gKi9cclxuXHJcbi8vIEZpeEluOiA5LjguOS4yLlxyXG5cclxuLyoqXHJcbiAqIFJlLUluaXQgQ2FsZW5kYXIgYW5kIFJlLVJlbmRlciBpdC5cclxuICpcclxuICogQHBhcmFtIHJlc291cmNlX2lkXHJcbiAqL1xyXG5mdW5jdGlvbiB3cGJjX2NhbF9fcmVfaW5pdCggcmVzb3VyY2VfaWQgKXtcclxuXHJcblx0Ly8gUmVtb3ZlIENMQVNTICBmb3IgYWJpbGl0eSB0byByZS1yZW5kZXIgYW5kIHJlaW5pdCBjYWxlbmRhci5cclxuXHRqUXVlcnkoICcjY2FsZW5kYXJfYm9va2luZycgKyByZXNvdXJjZV9pZCApLnJlbW92ZUNsYXNzKCAnaGFzRGF0ZXBpY2snICk7XHJcblx0d3BiY19jYWxlbmRhcl9zaG93KCByZXNvdXJjZV9pZCApO1xyXG59XHJcblxyXG5cclxuLyoqXHJcbiAqIFJlLUluaXQgcHJldmlvdXNseSAgc2F2ZWQgZGF5cyBzZWxlY3Rpb24gIHZhcmlhYmxlcy5cclxuICpcclxuICogQHBhcmFtIHJlc291cmNlX2lkXHJcbiAqL1xyXG5mdW5jdGlvbiB3cGJjX2NhbF9kYXlzX3NlbGVjdF9fcmVfaW5pdCggcmVzb3VyY2VfaWQgKXtcclxuXHJcblx0X3dwYmMuY2FsZW5kYXJfX3NldF9wYXJhbV92YWx1ZSggcmVzb3VyY2VfaWQsICdzYXZlZF92YXJpYWJsZV9fX2RheXNfc2VsZWN0X2luaXRpYWwnXHJcblx0XHQsIHtcclxuXHRcdFx0J2R5bmFtaWNfX2RheXNfbWluJyAgICAgICAgOiBfd3BiYy5jYWxlbmRhcl9fZ2V0X3BhcmFtX3ZhbHVlKCByZXNvdXJjZV9pZCwgJ2R5bmFtaWNfX2RheXNfbWluJyApLFxyXG5cdFx0XHQnZHluYW1pY19fZGF5c19tYXgnICAgICAgICA6IF93cGJjLmNhbGVuZGFyX19nZXRfcGFyYW1fdmFsdWUoIHJlc291cmNlX2lkLCAnZHluYW1pY19fZGF5c19tYXgnICksXHJcblx0XHRcdCdkeW5hbWljX19kYXlzX3NwZWNpZmljJyAgIDogX3dwYmMuY2FsZW5kYXJfX2dldF9wYXJhbV92YWx1ZSggcmVzb3VyY2VfaWQsICdkeW5hbWljX19kYXlzX3NwZWNpZmljJyApLFxyXG5cdFx0XHQnZHluYW1pY19fd2Vla19kYXlzX19zdGFydCc6IF93cGJjLmNhbGVuZGFyX19nZXRfcGFyYW1fdmFsdWUoIHJlc291cmNlX2lkLCAnZHluYW1pY19fd2Vla19kYXlzX19zdGFydCcgKSxcclxuXHRcdFx0J2ZpeGVkX19kYXlzX251bScgICAgICAgICAgOiBfd3BiYy5jYWxlbmRhcl9fZ2V0X3BhcmFtX3ZhbHVlKCByZXNvdXJjZV9pZCwgJ2ZpeGVkX19kYXlzX251bScgKSxcclxuXHRcdFx0J2ZpeGVkX193ZWVrX2RheXNfX3N0YXJ0JyAgOiBfd3BiYy5jYWxlbmRhcl9fZ2V0X3BhcmFtX3ZhbHVlKCByZXNvdXJjZV9pZCwgJ2ZpeGVkX193ZWVrX2RheXNfX3N0YXJ0JyApXHJcblx0XHR9XHJcblx0KTtcclxufVxyXG5cclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4vKipcclxuICogU2V0IFNpbmdsZSBEYXkgc2VsZWN0aW9uIC0gYWZ0ZXIgcGFnZSBsb2FkXHJcbiAqXHJcbiAqIEBwYXJhbSByZXNvdXJjZV9pZFx0XHRJRCBvZiBib29raW5nIHJlc291cmNlXHJcbiAqL1xyXG5mdW5jdGlvbiB3cGJjX2NhbF9yZWFkeV9kYXlzX3NlbGVjdF9fc2luZ2xlKCByZXNvdXJjZV9pZCApe1xyXG5cclxuXHQvLyBSZS1kZWZpbmUgc2VsZWN0aW9uLCBvbmx5IGFmdGVyIHBhZ2UgbG9hZGVkIHdpdGggYWxsIGluaXQgdmFyc1xyXG5cdGpRdWVyeShkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXtcclxuXHJcblx0XHQvLyBXYWl0IDEgc2Vjb25kLCBqdXN0IHRvICBiZSBzdXJlLCB0aGF0IGFsbCBpbml0IHZhcnMgZGVmaW5lZFxyXG5cdFx0c2V0VGltZW91dChmdW5jdGlvbigpe1xyXG5cclxuXHRcdFx0d3BiY19jYWxfZGF5c19zZWxlY3RfX3NpbmdsZSggcmVzb3VyY2VfaWQgKTtcclxuXHJcblx0XHR9LCAxMDAwKTtcclxuXHR9KTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFNldCBTaW5nbGUgRGF5IHNlbGVjdGlvblxyXG4gKiBDYW4gYmUgcnVuIGF0IGFueSAgdGltZSwgIHdoZW4gIGNhbGVuZGFyIGRlZmluZWQgLSB1c2VmdWwgZm9yIGNvbnNvbGUgcnVuLlxyXG4gKlxyXG4gKiBAcGFyYW0gcmVzb3VyY2VfaWRcdFx0SUQgb2YgYm9va2luZyByZXNvdXJjZVxyXG4gKi9cclxuZnVuY3Rpb24gd3BiY19jYWxfZGF5c19zZWxlY3RfX3NpbmdsZSggcmVzb3VyY2VfaWQgKXtcclxuXHJcblx0X3dwYmMuY2FsZW5kYXJfX3NldF9wYXJhbWV0ZXJzKCByZXNvdXJjZV9pZCwgeydkYXlzX3NlbGVjdF9tb2RlJzogJ3NpbmdsZSd9ICk7XHJcblxyXG5cdHdwYmNfY2FsX2RheXNfc2VsZWN0X19yZV9pbml0KCByZXNvdXJjZV9pZCApO1xyXG5cdHdwYmNfY2FsX19yZV9pbml0KCByZXNvdXJjZV9pZCApO1xyXG59XHJcblxyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbi8qKlxyXG4gKiBTZXQgTXVsdGlwbGUgRGF5cyBzZWxlY3Rpb24gIC0gYWZ0ZXIgcGFnZSBsb2FkXHJcbiAqXHJcbiAqIEBwYXJhbSByZXNvdXJjZV9pZFx0XHRJRCBvZiBib29raW5nIHJlc291cmNlXHJcbiAqL1xyXG5mdW5jdGlvbiB3cGJjX2NhbF9yZWFkeV9kYXlzX3NlbGVjdF9fbXVsdGlwbGUoIHJlc291cmNlX2lkICl7XHJcblxyXG5cdC8vIFJlLWRlZmluZSBzZWxlY3Rpb24sIG9ubHkgYWZ0ZXIgcGFnZSBsb2FkZWQgd2l0aCBhbGwgaW5pdCB2YXJzXHJcblx0alF1ZXJ5KGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpe1xyXG5cclxuXHRcdC8vIFdhaXQgMSBzZWNvbmQsIGp1c3QgdG8gIGJlIHN1cmUsIHRoYXQgYWxsIGluaXQgdmFycyBkZWZpbmVkXHJcblx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XHJcblxyXG5cdFx0XHR3cGJjX2NhbF9kYXlzX3NlbGVjdF9fbXVsdGlwbGUoIHJlc291cmNlX2lkICk7XHJcblxyXG5cdFx0fSwgMTAwMCk7XHJcblx0fSk7XHJcbn1cclxuXHJcblxyXG4vKipcclxuICogU2V0IE11bHRpcGxlIERheXMgc2VsZWN0aW9uXHJcbiAqIENhbiBiZSBydW4gYXQgYW55ICB0aW1lLCAgd2hlbiAgY2FsZW5kYXIgZGVmaW5lZCAtIHVzZWZ1bCBmb3IgY29uc29sZSBydW4uXHJcbiAqXHJcbiAqIEBwYXJhbSByZXNvdXJjZV9pZFx0XHRJRCBvZiBib29raW5nIHJlc291cmNlXHJcbiAqL1xyXG5mdW5jdGlvbiB3cGJjX2NhbF9kYXlzX3NlbGVjdF9fbXVsdGlwbGUoIHJlc291cmNlX2lkICl7XHJcblxyXG5cdF93cGJjLmNhbGVuZGFyX19zZXRfcGFyYW1ldGVycyggcmVzb3VyY2VfaWQsIHsnZGF5c19zZWxlY3RfbW9kZSc6ICdtdWx0aXBsZSd9ICk7XHJcblxyXG5cdHdwYmNfY2FsX2RheXNfc2VsZWN0X19yZV9pbml0KCByZXNvdXJjZV9pZCApO1xyXG5cdHdwYmNfY2FsX19yZV9pbml0KCByZXNvdXJjZV9pZCApO1xyXG59XHJcblxyXG5cclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4vKipcclxuICogU2V0IEZpeGVkIERheXMgc2VsZWN0aW9uIHdpdGggIDEgbW91c2UgY2xpY2sgIC0gYWZ0ZXIgcGFnZSBsb2FkXHJcbiAqXHJcbiAqIEBpbnRlZ2VyIHJlc291cmNlX2lkXHRcdFx0LSAxXHRcdFx0XHQgICAtLSBJRCBvZiBib29raW5nIHJlc291cmNlIChjYWxlbmRhcikgLVxyXG4gKiBAaW50ZWdlciBkYXlzX251bWJlclx0XHRcdC0gM1x0XHRcdFx0ICAgLS0gbnVtYmVyIG9mIGRheXMgdG8gIHNlbGVjdFx0LVxyXG4gKiBAYXJyYXkgd2Vla19kYXlzX19zdGFydFx0LSBbLTFdIHwgWyAxLCA1XSAgIC0tICB7IC0xIC0gQW55IHwgMCAtIFN1LCAgMSAtIE1vLCAgMiAtIFR1LCAzIC0gV2UsIDQgLSBUaCwgNSAtIEZyLCA2IC0gU2F0IH1cclxuICovXHJcbmZ1bmN0aW9uIHdwYmNfY2FsX3JlYWR5X2RheXNfc2VsZWN0X19maXhlZCggcmVzb3VyY2VfaWQsIGRheXNfbnVtYmVyLCB3ZWVrX2RheXNfX3N0YXJ0ID0gWy0xXSApe1xyXG5cclxuXHQvLyBSZS1kZWZpbmUgc2VsZWN0aW9uLCBvbmx5IGFmdGVyIHBhZ2UgbG9hZGVkIHdpdGggYWxsIGluaXQgdmFyc1xyXG5cdGpRdWVyeShkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXtcclxuXHJcblx0XHQvLyBXYWl0IDEgc2Vjb25kLCBqdXN0IHRvICBiZSBzdXJlLCB0aGF0IGFsbCBpbml0IHZhcnMgZGVmaW5lZFxyXG5cdFx0c2V0VGltZW91dChmdW5jdGlvbigpe1xyXG5cclxuXHRcdFx0d3BiY19jYWxfZGF5c19zZWxlY3RfX2ZpeGVkKCByZXNvdXJjZV9pZCwgZGF5c19udW1iZXIsIHdlZWtfZGF5c19fc3RhcnQgKTtcclxuXHJcblx0XHR9LCAxMDAwKTtcclxuXHR9KTtcclxufVxyXG5cclxuXHJcbi8qKlxyXG4gKiBTZXQgRml4ZWQgRGF5cyBzZWxlY3Rpb24gd2l0aCAgMSBtb3VzZSBjbGlja1xyXG4gKiBDYW4gYmUgcnVuIGF0IGFueSAgdGltZSwgIHdoZW4gIGNhbGVuZGFyIGRlZmluZWQgLSB1c2VmdWwgZm9yIGNvbnNvbGUgcnVuLlxyXG4gKlxyXG4gKiBAaW50ZWdlciByZXNvdXJjZV9pZFx0XHRcdC0gMVx0XHRcdFx0ICAgLS0gSUQgb2YgYm9va2luZyByZXNvdXJjZSAoY2FsZW5kYXIpIC1cclxuICogQGludGVnZXIgZGF5c19udW1iZXJcdFx0XHQtIDNcdFx0XHRcdCAgIC0tIG51bWJlciBvZiBkYXlzIHRvICBzZWxlY3RcdC1cclxuICogQGFycmF5IHdlZWtfZGF5c19fc3RhcnRcdC0gWy0xXSB8IFsgMSwgNV0gICAtLSAgeyAtMSAtIEFueSB8IDAgLSBTdSwgIDEgLSBNbywgIDIgLSBUdSwgMyAtIFdlLCA0IC0gVGgsIDUgLSBGciwgNiAtIFNhdCB9XHJcbiAqL1xyXG5mdW5jdGlvbiB3cGJjX2NhbF9kYXlzX3NlbGVjdF9fZml4ZWQoIHJlc291cmNlX2lkLCBkYXlzX251bWJlciwgd2Vla19kYXlzX19zdGFydCA9IFstMV0gKXtcclxuXHJcblx0X3dwYmMuY2FsZW5kYXJfX3NldF9wYXJhbWV0ZXJzKCByZXNvdXJjZV9pZCwgeydkYXlzX3NlbGVjdF9tb2RlJzogJ2ZpeGVkJ30gKTtcclxuXHJcblx0X3dwYmMuY2FsZW5kYXJfX3NldF9wYXJhbWV0ZXJzKCByZXNvdXJjZV9pZCwgeydmaXhlZF9fZGF5c19udW0nOiBwYXJzZUludCggZGF5c19udW1iZXIgKX0gKTtcdFx0XHQvLyBOdW1iZXIgb2YgZGF5cyBzZWxlY3Rpb24gd2l0aCAxIG1vdXNlIGNsaWNrXHJcblx0X3dwYmMuY2FsZW5kYXJfX3NldF9wYXJhbWV0ZXJzKCByZXNvdXJjZV9pZCwgeydmaXhlZF9fd2Vla19kYXlzX19zdGFydCc6IHdlZWtfZGF5c19fc3RhcnR9ICk7IFx0Ly8geyAtMSAtIEFueSB8IDAgLSBTdSwgIDEgLSBNbywgIDIgLSBUdSwgMyAtIFdlLCA0IC0gVGgsIDUgLSBGciwgNiAtIFNhdCB9XHJcblxyXG5cdHdwYmNfY2FsX2RheXNfc2VsZWN0X19yZV9pbml0KCByZXNvdXJjZV9pZCApO1xyXG5cdHdwYmNfY2FsX19yZV9pbml0KCByZXNvdXJjZV9pZCApO1xyXG59XHJcblxyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBTZXQgdGhlIGV4aXN0aW5nIGNhbGVuZGFyIHBhcmFtZXRlcnMgdG8gdHdvLWNsaWNrIHJhbmdlIG1vZGUgYWZ0ZXIgcGFnZSBsb2FkLlxuICogRnJlZSB1c2VzIHRoZSB1bnJlc3RyaWN0ZWQgc2hhcmVkIGhhbmRsZXI7IEJ1c2luZXNzIFNtYWxsKyBrZWVwcyBpdHMgYWxyZWFkeSBpbml0aWFsaXplZCBhZHZhbmNlZCByYW5nZSBydWxlcy5cbiAqXG4gKiBAcGFyYW0gcmVzb3VyY2VfaWQgSUQgb2YgYm9va2luZyByZXNvdXJjZS5cbiAqL1xuZnVuY3Rpb24gd3BiY19jYWxfcmVhZHlfZGF5c19zZWxlY3RfX3JhbmdlX21vZGUoIHJlc291cmNlX2lkICl7XG5cblx0alF1ZXJ5KGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpe1xuXHRcdHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcblx0XHRcdHdwYmNfY2FsX2RheXNfc2VsZWN0X19yYW5nZV9tb2RlKCByZXNvdXJjZV9pZCApO1xuXHRcdH0sIDEwMDApO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBTd2l0Y2ggdG8gdHdvLWNsaWNrIHJhbmdlIG1vZGUgd2l0aG91dCBjaGFuZ2luZyBhbnkgYWR2YW5jZWQgcmFuZ2UgcGFyYW1ldGVycy5cbiAqXG4gKiBAcGFyYW0gcmVzb3VyY2VfaWQgSUQgb2YgYm9va2luZyByZXNvdXJjZS5cbiAqL1xuZnVuY3Rpb24gd3BiY19jYWxfZGF5c19zZWxlY3RfX3JhbmdlX21vZGUoIHJlc291cmNlX2lkICl7XG5cblx0X3dwYmMuY2FsZW5kYXJfX3NldF9wYXJhbWV0ZXJzKCByZXNvdXJjZV9pZCwgeydkYXlzX3NlbGVjdF9tb2RlJzogJ2R5bmFtaWMnfSApO1xuXG5cdHdwYmNfY2FsX2RheXNfc2VsZWN0X19yZV9pbml0KCByZXNvdXJjZV9pZCApO1xuXHR3cGJjX2NhbF9fcmVfaW5pdCggcmVzb3VyY2VfaWQgKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogU2V0IFJhbmdlIERheXMgc2VsZWN0aW9uICB3aXRoICAyIG1vdXNlIGNsaWNrcyAgLSBhZnRlciBwYWdlIGxvYWRcbiAqXHJcbiAqIEBpbnRlZ2VyIHJlc291cmNlX2lkXHRcdFx0LSAxXHRcdFx0XHQgICBcdFx0LS0gSUQgb2YgYm9va2luZyByZXNvdXJjZSAoY2FsZW5kYXIpXHJcbiAqIEBpbnRlZ2VyIGRheXNfbWluXHRcdFx0LSA3XHRcdFx0XHQgICBcdFx0LS0gTWluIG51bWJlciBvZiBkYXlzIHRvIHNlbGVjdFxyXG4gKiBAaW50ZWdlciBkYXlzX21heFx0XHRcdC0gMzBcdFx0XHQgICBcdFx0LS0gTWF4IG51bWJlciBvZiBkYXlzIHRvIHNlbGVjdFxyXG4gKiBAYXJyYXkgZGF5c19zcGVjaWZpY1x0XHRcdC0gW10gfCBbNywxNCwyMSwyOF1cdFx0LS0gUmVzdHJpY3Rpb24gZm9yIFNwZWNpZmljIG51bWJlciBvZiBkYXlzIHNlbGVjdGlvblxyXG4gKiBAYXJyYXkgd2Vla19kYXlzX19zdGFydFx0XHQtIFstMV0gfCBbIDEsIDVdICAgXHRcdC0tICB7IC0xIC0gQW55IHwgMCAtIFN1LCAgMSAtIE1vLCAgMiAtIFR1LCAzIC0gV2UsIDQgLSBUaCwgNSAtIEZyLCA2IC0gU2F0IH1cclxuICovXHJcbmZ1bmN0aW9uIHdwYmNfY2FsX3JlYWR5X2RheXNfc2VsZWN0X19yYW5nZSggcmVzb3VyY2VfaWQsIGRheXNfbWluLCBkYXlzX21heCwgZGF5c19zcGVjaWZpYyA9IFtdLCB3ZWVrX2RheXNfX3N0YXJ0ID0gWy0xXSApe1xyXG5cclxuXHQvLyBSZS1kZWZpbmUgc2VsZWN0aW9uLCBvbmx5IGFmdGVyIHBhZ2UgbG9hZGVkIHdpdGggYWxsIGluaXQgdmFyc1xyXG5cdGpRdWVyeShkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXtcclxuXHJcblx0XHQvLyBXYWl0IDEgc2Vjb25kLCBqdXN0IHRvICBiZSBzdXJlLCB0aGF0IGFsbCBpbml0IHZhcnMgZGVmaW5lZFxyXG5cdFx0c2V0VGltZW91dChmdW5jdGlvbigpe1xyXG5cclxuXHRcdFx0d3BiY19jYWxfZGF5c19zZWxlY3RfX3JhbmdlKCByZXNvdXJjZV9pZCwgZGF5c19taW4sIGRheXNfbWF4LCBkYXlzX3NwZWNpZmljLCB3ZWVrX2RheXNfX3N0YXJ0ICk7XHJcblx0XHR9LCAxMDAwKTtcclxuXHR9KTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFNldCBSYW5nZSBEYXlzIHNlbGVjdGlvbiAgd2l0aCAgMiBtb3VzZSBjbGlja3NcclxuICogQ2FuIGJlIHJ1biBhdCBhbnkgIHRpbWUsICB3aGVuICBjYWxlbmRhciBkZWZpbmVkIC0gdXNlZnVsIGZvciBjb25zb2xlIHJ1bi5cclxuICpcclxuICogQGludGVnZXIgcmVzb3VyY2VfaWRcdFx0XHQtIDFcdFx0XHRcdCAgIFx0XHQtLSBJRCBvZiBib29raW5nIHJlc291cmNlIChjYWxlbmRhcilcclxuICogQGludGVnZXIgZGF5c19taW5cdFx0XHQtIDdcdFx0XHRcdCAgIFx0XHQtLSBNaW4gbnVtYmVyIG9mIGRheXMgdG8gc2VsZWN0XHJcbiAqIEBpbnRlZ2VyIGRheXNfbWF4XHRcdFx0LSAzMFx0XHRcdCAgIFx0XHQtLSBNYXggbnVtYmVyIG9mIGRheXMgdG8gc2VsZWN0XHJcbiAqIEBhcnJheSBkYXlzX3NwZWNpZmljXHRcdFx0LSBbXSB8IFs3LDE0LDIxLDI4XVx0XHQtLSBSZXN0cmljdGlvbiBmb3IgU3BlY2lmaWMgbnVtYmVyIG9mIGRheXMgc2VsZWN0aW9uXHJcbiAqIEBhcnJheSB3ZWVrX2RheXNfX3N0YXJ0XHRcdC0gWy0xXSB8IFsgMSwgNV0gICBcdFx0LS0gIHsgLTEgLSBBbnkgfCAwIC0gU3UsICAxIC0gTW8sICAyIC0gVHUsIDMgLSBXZSwgNCAtIFRoLCA1IC0gRnIsIDYgLSBTYXQgfVxyXG4gKi9cclxuZnVuY3Rpb24gd3BiY19jYWxfZGF5c19zZWxlY3RfX3JhbmdlKCByZXNvdXJjZV9pZCwgZGF5c19taW4sIGRheXNfbWF4LCBkYXlzX3NwZWNpZmljID0gW10sIHdlZWtfZGF5c19fc3RhcnQgPSBbLTFdICl7XHJcblxyXG5cdF93cGJjLmNhbGVuZGFyX19zZXRfcGFyYW1ldGVycyggIHJlc291cmNlX2lkLCB7J2RheXNfc2VsZWN0X21vZGUnOiAnZHluYW1pYyd9ICApO1xyXG5cdF93cGJjLmNhbGVuZGFyX19zZXRfcGFyYW1fdmFsdWUoIHJlc291cmNlX2lkLCAnZHluYW1pY19fZGF5c19taW4nICAgICAgICAgLCBwYXJzZUludCggZGF5c19taW4gKSAgKTsgICAgICAgICAgIFx0XHQvLyBNaW4uIE51bWJlciBvZiBkYXlzIHNlbGVjdGlvbiB3aXRoIDIgbW91c2UgY2xpY2tzXHJcblx0X3dwYmMuY2FsZW5kYXJfX3NldF9wYXJhbV92YWx1ZSggcmVzb3VyY2VfaWQsICdkeW5hbWljX19kYXlzX21heCcgICAgICAgICAsIHBhcnNlSW50KCBkYXlzX21heCApICApOyAgICAgICAgICBcdFx0Ly8gTWF4LiBOdW1iZXIgb2YgZGF5cyBzZWxlY3Rpb24gd2l0aCAyIG1vdXNlIGNsaWNrc1xyXG5cdF93cGJjLmNhbGVuZGFyX19zZXRfcGFyYW1fdmFsdWUoIHJlc291cmNlX2lkLCAnZHluYW1pY19fZGF5c19zcGVjaWZpYycgICAgLCBkYXlzX3NwZWNpZmljICApO1x0ICAgICAgXHRcdFx0XHQvLyBFeGFtcGxlIFs1LDddXHJcblx0X3dwYmMuY2FsZW5kYXJfX3NldF9wYXJhbV92YWx1ZSggcmVzb3VyY2VfaWQsICdkeW5hbWljX193ZWVrX2RheXNfX3N0YXJ0JyAsIHdlZWtfZGF5c19fc3RhcnQgICk7ICBcdFx0XHRcdFx0Ly8geyAtMSAtIEFueSB8IDAgLSBTdSwgIDEgLSBNbywgIDIgLSBUdSwgMyAtIFdlLCA0IC0gVGgsIDUgLSBGciwgNiAtIFNhdCB9XHJcblxyXG5cdHdwYmNfY2FsX2RheXNfc2VsZWN0X19yZV9pbml0KCByZXNvdXJjZV9pZCApO1xyXG5cdHdwYmNfY2FsX19yZV9pbml0KCByZXNvdXJjZV9pZCApO1xyXG59XHJcbiIsIi8qKlxyXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4gKlx0aW5jbHVkZXMvX19qcy9jYWxfYWp4X2xvYWQvd3BiY19jYWxfYWp4LmpzXHJcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbiAqL1xyXG5cclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbi8vICBBIGogYSB4ICAgIEwgbyBhIGQgICAgQyBhIGwgZSBuIGQgYSByICAgIEQgYSB0IGFcclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5mdW5jdGlvbiB3cGJjX2NhbGVuZGFyX19sb2FkX2RhdGFfX2FqeCggcGFyYW1zICl7XHJcblxyXG5cdC8vIEZpeEluOiA5LjguNi4yLlxyXG5cdHdwYmNfY2FsZW5kYXJfX2xvYWRpbmdfX3N0YXJ0KCBwYXJhbXNbJ3Jlc291cmNlX2lkJ10gKTtcclxuXHJcblx0Ly8gVHJpZ2dlciBldmVudCBmb3IgY2FsZW5kYXIgYmVmb3JlIGxvYWRpbmcgQm9va2luZyBkYXRhLCAgYnV0IGFmdGVyIHNob3dpbmcgQ2FsZW5kYXIuXHJcblx0aWYgKCBqUXVlcnkoICcjY2FsZW5kYXJfYm9va2luZycgKyBwYXJhbXNbJ3Jlc291cmNlX2lkJ10gKS5sZW5ndGggPiAwICl7XHJcblx0XHR2YXIgdGFyZ2V0X2VsbSA9IGpRdWVyeSggJ2JvZHknICkudHJpZ2dlciggXCJ3cGJjX2NhbGVuZGFyX2FqeF9fYmVmb3JlX2xvYWRlZF9kYXRhXCIsIFtwYXJhbXNbJ3Jlc291cmNlX2lkJ11dICk7XHJcblx0XHQgLy9qUXVlcnkoICdib2R5JyApLm9uKCAnd3BiY19jYWxlbmRhcl9hanhfX2JlZm9yZV9sb2FkZWRfZGF0YScsIGZ1bmN0aW9uKCBldmVudCwgcmVzb3VyY2VfaWQgKSB7IC4uLiB9ICk7XHJcblx0fVxyXG5cclxuXHRpZiAoIHdwYmNfYmFsYW5jZXJfX2lzX3dhaXQoIHBhcmFtcyAsICd3cGJjX2NhbGVuZGFyX19sb2FkX2RhdGFfX2FqeCcgKSApe1xyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0Ly8gRml4SW46IDkuOC42LjIuXHJcblx0d3BiY19jYWxlbmRhcl9fYmx1cl9fc3RvcCggcGFyYW1zWydyZXNvdXJjZV9pZCddICk7XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0Ly8gPT0gR2V0IHN0YXJ0IC8gZW5kIGRhdGVzIGZyb20gIHRoZSBCb29raW5nIENhbGVuZGFyIHNob3J0Y29kZS4gPT1cclxuXHQvLyBFeGFtcGxlOiBbYm9va2luZyBjYWxlbmRhcl9kYXRlc19zdGFydD0nMjAyNi0wMS0wMScgY2FsZW5kYXJfZGF0ZXNfZW5kPScyMDI2LTEyLTMxJyAgcmVzb3VyY2VfaWQ9MV0gICAgICAgICAgICAgIC8vIEZpeEluOiAxMC4xMy4xLjQuXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHRpZiAoIGZhbHNlICE9PSB3cGJjX2NhbGVuZGFyX19nZXRfZGF0ZXNfc3RhcnQoIHBhcmFtc1sncmVzb3VyY2VfaWQnXSApICkge1xyXG5cdFx0aWYgKCAhIHBhcmFtc1snZGF0ZXNfdG9fY2hlY2snXSApIHsgcGFyYW1zWydkYXRlc190b19jaGVjayddID0gW107IH1cclxuXHRcdHZhciBkYXRlc19zdGFydCA9IHdwYmNfY2FsZW5kYXJfX2dldF9kYXRlc19zdGFydCggcGFyYW1zWydyZXNvdXJjZV9pZCddICk7ICAvLyBFLmcuIC0gbG9jYWxfX21pbl9kYXRlID0gbmV3IERhdGUoIDIwMjUsIDAsIDEgKTtcclxuXHRcdGlmICggZmFsc2UgIT09IGRhdGVzX3N0YXJ0ICl7XHJcblx0XHRcdHBhcmFtc1snZGF0ZXNfdG9fY2hlY2snXVswXSA9IHdwYmNfX2dldF9fc3FsX2NsYXNzX2RhdGUoIGRhdGVzX3N0YXJ0ICk7XHJcblx0XHR9XHJcblx0fVxyXG5cdGlmICggZmFsc2UgIT09IHdwYmNfY2FsZW5kYXJfX2dldF9kYXRlc19lbmQoIHBhcmFtc1sncmVzb3VyY2VfaWQnXSApICkge1xyXG5cdFx0aWYgKCAhcGFyYW1zWydkYXRlc190b19jaGVjayddICkgeyBwYXJhbXNbJ2RhdGVzX3RvX2NoZWNrJ10gPSBbXTsgfVxyXG5cdFx0dmFyIGRhdGVzX2VuZCA9IHdwYmNfY2FsZW5kYXJfX2dldF9kYXRlc19lbmQoIHBhcmFtc1sncmVzb3VyY2VfaWQnXSApOyAgLy8gRS5nLiAtIGxvY2FsX19taW5fZGF0ZSA9IG5ldyBEYXRlKCAyMDI1LCAwLCAxICk7XHJcblx0XHRpZiAoIGZhbHNlICE9PSBkYXRlc19lbmQgKSB7XHJcblx0XHRcdHBhcmFtc1snZGF0ZXNfdG9fY2hlY2snXVsxXSA9IHdwYmNfX2dldF9fc3FsX2NsYXNzX2RhdGUoIGRhdGVzX2VuZCApO1xyXG5cdFx0XHRpZiAoICFwYXJhbXNbJ2RhdGVzX3RvX2NoZWNrJ11bMF0gKSB7XHJcblx0XHRcdFx0cGFyYW1zWydkYXRlc190b19jaGVjayddWzBdID0gd3BiY19fZ2V0X19zcWxfY2xhc3NfZGF0ZSggbmV3IERhdGUoKSApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4vLyBjb25zb2xlLmdyb3VwRW5kKCk7IGNvbnNvbGUudGltZSgncmVzb3VyY2VfaWRfJyArIHBhcmFtc1sncmVzb3VyY2VfaWQnXSk7XHJcbmNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQoICdXUEJDX0FKWF9DQUxFTkRBUl9MT0FEJyApOyBjb25zb2xlLmxvZyggJyA9PSBCZWZvcmUgQWpheCBTZW5kIC0gY2FsZW5kYXJzX2FsbF9fZ2V0KCkgPT0gJyAsIF93cGJjLmNhbGVuZGFyc19hbGxfX2dldCgpICk7XHJcblx0aWYgKCAnZnVuY3Rpb24nID09PSB0eXBlb2YgKHdwYmNfaG9va19faW5pdF90aW1lc2VsZWN0b3IpICkge1xyXG5cdFx0d3BiY19ob29rX19pbml0X3RpbWVzZWxlY3RvcigpO1xyXG5cdH1cclxuXHJcblx0Ly8gU3RhcnQgQWpheFxyXG5cdGpRdWVyeS5wb3N0KCB3cGJjX3VybF9hamF4LFxyXG5cdFx0XHRcdHtcclxuXHRcdFx0XHRcdGFjdGlvbiAgICAgICAgICA6ICdXUEJDX0FKWF9DQUxFTkRBUl9MT0FEJyxcclxuXHRcdFx0XHRcdHdwYmNfYWp4X3VzZXJfaWQ6IF93cGJjLmdldF9zZWN1cmVfcGFyYW0oICd1c2VyX2lkJyApLFxyXG5cdFx0XHRcdFx0bm9uY2UgICAgICAgICAgIDogX3dwYmMuZ2V0X3NlY3VyZV9wYXJhbSggJ25vbmNlJyApLFxyXG5cdFx0XHRcdFx0d3BiY19hanhfbG9jYWxlIDogX3dwYmMuZ2V0X3NlY3VyZV9wYXJhbSggJ2xvY2FsZScgKSxcclxuXHJcblx0XHRcdFx0XHRjYWxlbmRhcl9yZXF1ZXN0X3BhcmFtcyA6IHBhcmFtcyBcdFx0XHRcdFx0XHQvLyBVc3VhbGx5IGxpa2U6IHsgJ3Jlc291cmNlX2lkJzogMSwgJ21heF9kYXlzX2NvdW50JzogMzY1IH1cclxuXHRcdFx0XHR9LFxyXG5cclxuXHRcdFx0XHQvKipcclxuXHRcdFx0XHQgKiBTIHUgYyBjIGUgcyBzXHJcblx0XHRcdFx0ICpcclxuXHRcdFx0XHQgKiBAcGFyYW0gcmVzcG9uc2VfZGF0YVx0XHQtXHRpdHMgb2JqZWN0IHJldHVybmVkIGZyb20gIEFqYXggLSBjbGFzcy1saXZlLXNlYXJjaC5waHBcclxuXHRcdFx0XHQgKiBAcGFyYW0gdGV4dFN0YXR1c1x0XHQtXHQnc3VjY2VzcydcclxuXHRcdFx0XHQgKiBAcGFyYW0ganFYSFJcdFx0XHRcdC1cdE9iamVjdFxyXG5cdFx0XHRcdCAqL1xyXG5cdFx0XHRcdGZ1bmN0aW9uICggcmVzcG9uc2VfZGF0YSwgdGV4dFN0YXR1cywganFYSFIgKSB7XHJcbi8vIGNvbnNvbGUudGltZUVuZCgncmVzb3VyY2VfaWRfJyArIHJlc3BvbnNlX2RhdGFbJ3Jlc291cmNlX2lkJ10pO1xyXG5jb25zb2xlLmxvZyggJyA9PSBSZXNwb25zZSBXUEJDX0FKWF9DQUxFTkRBUl9MT0FEID09ICcsIHJlc3BvbnNlX2RhdGEgKTsgY29uc29sZS5ncm91cEVuZCgpO1xyXG5cclxuXHRcdFx0XHRcdC8vIEZpeEluOiA5LjguNi4yLlxyXG5cdFx0XHRcdFx0dmFyIGFqeF9wb3N0X2RhdGFfX3Jlc291cmNlX2lkID0gd3BiY19nZXRfcmVzb3VyY2VfaWRfX2Zyb21fYWp4X3Bvc3RfZGF0YV91cmwoIHRoaXMuZGF0YSApO1xyXG5cdFx0XHRcdFx0d3BiY19iYWxhbmNlcl9fY29tcGxldGVkKCBhanhfcG9zdF9kYXRhX19yZXNvdXJjZV9pZCAsICd3cGJjX2NhbGVuZGFyX19sb2FkX2RhdGFfX2FqeCcgKTtcclxuXHJcblx0XHRcdFx0XHR2YXIgaXNfdmFsaWRfcmVzcG9uc2UgPSAoXG5cdFx0XHRcdFx0XHRcdCh0eXBlb2YgcmVzcG9uc2VfZGF0YSA9PT0gJ29iamVjdCcpXG5cdFx0XHRcdFx0XHQgJiYgKHJlc3BvbnNlX2RhdGEgIT09IG51bGwpXG5cdFx0XHRcdFx0XHQgJiYgKCEgQXJyYXkuaXNBcnJheSggcmVzcG9uc2VfZGF0YSApKVxuXHRcdFx0XHRcdFx0ICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCggcmVzcG9uc2VfZGF0YSwgJ3Jlc291cmNlX2lkJyApXG5cdFx0XHRcdFx0XHQgJiYgKHR5cGVvZiByZXNwb25zZV9kYXRhWyAnYWp4X2RhdGEnIF0gPT09ICdvYmplY3QnKVxuXHRcdFx0XHRcdFx0ICYmIChyZXNwb25zZV9kYXRhWyAnYWp4X2RhdGEnIF0gIT09IG51bGwpXG5cdFx0XHRcdFx0XHQgJiYgKCEgQXJyYXkuaXNBcnJheSggcmVzcG9uc2VfZGF0YVsgJ2FqeF9kYXRhJyBdICkpXG5cdFx0XHRcdFx0XHQgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKCByZXNwb25zZV9kYXRhWyAnYWp4X2RhdGEnIF0sICdkYXRlcycgKVxuXHRcdFx0XHRcdFx0ICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCggcmVzcG9uc2VfZGF0YVsgJ2FqeF9kYXRhJyBdLCAncmVzb3VyY2VzX2lkX2Fycl9faW5fZGF0ZXMnIClcblx0XHRcdFx0XHRcdCAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoIHJlc3BvbnNlX2RhdGFbICdhanhfZGF0YScgXSwgJ2FnZ3JlZ2F0ZV9yZXNvdXJjZV9pZF9hcnInIClcblx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0aWYgKCAhIGlzX3ZhbGlkX3Jlc3BvbnNlICkge1xuXHRcdFx0XHRcdFx0dmFyIGpxX25vZGUgPSB3cGJjX2dldF9jYWxlbmRhcl9fanFfbm9kZV9fZm9yX21lc3NhZ2VzKCB0aGlzLmRhdGEgKTtcblx0XHRcdFx0XHRcdHZhciByZXNwb25zZV9lcnJvcl9tZXNzYWdlID0gX3dwYmMuZ2V0X21lc3NhZ2UoICdtZXNzYWdlX3VuZXhwZWN0ZWRfc2VydmVyX3Jlc3BvbnNlJyApIHx8ICdUaGUgc2VydmVyIHJldHVybmVkIGFuIHVuZXhwZWN0ZWQgcmVzcG9uc2UuIFBsZWFzZSByZWxvYWQgdGhlIHBhZ2UgYW5kIHRyeSBhZ2Fpbi4nO1xuXG5cdFx0XHRcdFx0XHR3cGJjX2Zyb250X2VuZF9fbG9nX3VuZXhwZWN0ZWRfYWpheF9yZXNwb25zZSggJ1dQQkNfQUpYX0NBTEVOREFSX0xPQUQnLCByZXNwb25zZV9kYXRhLCBqcVhIUiwgdGV4dFN0YXR1cywgJ0ludmFsaWQgcmVzcG9uc2Ugc3RydWN0dXJlJyApO1xuXHRcdFx0XHRcdFx0d3BiY19jYWxlbmRhcl9fbG9hZGluZ19fc3RvcCggYWp4X3Bvc3RfZGF0YV9fcmVzb3VyY2VfaWQgKTtcblxuXHRcdFx0XHRcdFx0d3BiY19mcm9udF9lbmRfX3Nob3dfbWVzc2FnZSggcmVzcG9uc2VfZXJyb3JfbWVzc2FnZSwgeyAndHlwZScgICAgICAgIDogJ2Vycm9yJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICdzaG93X2hlcmUnICAgOiB7J2pxX25vZGUnOiBqcV9ub2RlLCAnd2hlcmUnOiAnYWZ0ZXInfSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICdpc19hcHBlbmQnICAgOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgJ3N0eWxlJyAgICAgICA6ICd0ZXh0LWFsaWduOmxlZnQ7Jyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICdjb250ZW50X21vZGUnOiAndGV4dCcsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAnZGVsYXknICAgICAgIDogMFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cclxuXHRcdFx0XHRcdC8vIFNob3cgQ2FsZW5kYXJcclxuXHRcdFx0XHRcdHdwYmNfY2FsZW5kYXJfX2xvYWRpbmdfX3N0b3AoIHJlc3BvbnNlX2RhdGFbICdyZXNvdXJjZV9pZCcgXSApO1xyXG5cclxuXHRcdFx0XHRcdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHRcdFx0XHRcdC8vIEJvb2tpbmdzIC0gRGF0ZXNcclxuXHRcdFx0XHRcdF93cGJjLmJvb2tpbmdzX2luX2NhbGVuZGFyX19zZXRfZGF0ZXMoICByZXNwb25zZV9kYXRhWyAncmVzb3VyY2VfaWQnIF0sIHJlc3BvbnNlX2RhdGFbICdhanhfZGF0YScgXVsnZGF0ZXMnXSAgKTtcclxuXHJcblx0XHRcdFx0XHQvLyBCb29raW5ncyAtIENoaWxkIG9yIG9ubHkgc2luZ2xlIGJvb2tpbmcgcmVzb3VyY2UgaW4gZGF0ZXNcclxuXHRcdFx0XHRcdF93cGJjLmJvb2tpbmdfX3NldF9wYXJhbV92YWx1ZSggcmVzcG9uc2VfZGF0YVsgJ3Jlc291cmNlX2lkJyBdLCAncmVzb3VyY2VzX2lkX2Fycl9faW5fZGF0ZXMnLCByZXNwb25zZV9kYXRhWyAnYWp4X2RhdGEnIF1bICdyZXNvdXJjZXNfaWRfYXJyX19pbl9kYXRlcycgXSApO1xyXG5cclxuXHRcdFx0XHRcdC8vIEFnZ3JlZ2F0ZSBib29raW5nIHJlc291cmNlcywgIGlmIGFueSA/XHJcblx0XHRcdFx0XHRfd3BiYy5ib29raW5nX19zZXRfcGFyYW1fdmFsdWUoIHJlc3BvbnNlX2RhdGFbICdyZXNvdXJjZV9pZCcgXSwgJ2FnZ3JlZ2F0ZV9yZXNvdXJjZV9pZF9hcnInLCByZXNwb25zZV9kYXRhWyAnYWp4X2RhdGEnIF1bICdhZ2dyZWdhdGVfcmVzb3VyY2VfaWRfYXJyJyBdICk7XG5cdFx0XHRcdFx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cdFx0XHRcdFx0LyoqXG5cdFx0XHRcdFx0ICogQWxsb3cgb3B0aW9uYWwgbW9kdWxlcyB0byBjYWxjdWxhdGUgZGVyaXZlZCBjYWxlbmRhciBzdGF0ZSBhZnRlciBjYW5vbmljYWxcblx0XHRcdFx0XHQgKiBBSkFYIGRhdGEgaXMgc3RvcmVkIGFuZCBiZWZvcmUgdGhlIGZpcnN0IHJlZnJlc2hlZCBjYWxlbmRhciByZW5kZXIuXG5cdFx0XHRcdFx0ICpcblx0XHRcdFx0XHQgKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IHJlc291cmNlX2lkIEJvb2tpbmcgcmVzb3VyY2UgSUQuXG5cdFx0XHRcdFx0ICovXG5cdFx0XHRcdFx0alF1ZXJ5KCAnYm9keScgKS50cmlnZ2VyKCAnd3BiY19jYWxlbmRhcl9hanhfX2JlZm9yZV91cGRhdGVfbG9vaycsIFsgcmVzcG9uc2VfZGF0YVsgJ3Jlc291cmNlX2lkJyBdIF0gKTtcblxuXHRcdFx0XHRcdC8vIFVwZGF0ZSBjYWxlbmRhclxuXHRcdFx0XHRcdHdwYmNfY2FsZW5kYXJfX3VwZGF0ZV9sb29rKCByZXNwb25zZV9kYXRhWyAncmVzb3VyY2VfaWQnIF0gKTtcblxyXG5cdFx0XHRcdFx0aWYgKCAnZnVuY3Rpb24nID09PSB0eXBlb2YgKHdwYmNfaG9va19faW5pdF90aW1lc2VsZWN0b3IpICkge1xyXG5cdFx0XHRcdFx0XHR3cGJjX2hvb2tfX2luaXRfdGltZXNlbGVjdG9yKCk7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRcdCggJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiAocmVzcG9uc2VfZGF0YVsgJ2FqeF9kYXRhJyBdWyAnYWp4X2FmdGVyX2FjdGlvbl9tZXNzYWdlJyBdKSApXHJcblx0XHRcdFx0XHRcdCAmJiAoICcnICE9IHJlc3BvbnNlX2RhdGFbICdhanhfZGF0YScgXVsgJ2FqeF9hZnRlcl9hY3Rpb25fbWVzc2FnZScgXS5yZXBsYWNlKCAvXFxuL2csIFwiPGJyIC8+XCIgKSApXHJcblx0XHRcdFx0XHQpe1xyXG5cclxuXHRcdFx0XHRcdFx0dmFyIGpxX25vZGUgID0gd3BiY19nZXRfY2FsZW5kYXJfX2pxX25vZGVfX2Zvcl9tZXNzYWdlcyggdGhpcy5kYXRhICk7XHJcblxyXG5cdFx0XHRcdFx0XHQvLyBTaG93IE1lc3NhZ2VcclxuXHRcdFx0XHRcdFx0d3BiY19mcm9udF9lbmRfX3Nob3dfbWVzc2FnZSggcmVzcG9uc2VfZGF0YVsgJ2FqeF9kYXRhJyBdWyAnYWp4X2FmdGVyX2FjdGlvbl9tZXNzYWdlJyBdLnJlcGxhY2UoIC9cXG4vZywgXCI8YnIgLz5cIiApLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0eyAgICd0eXBlJyAgICAgOiAoICd1bmRlZmluZWQnICE9PSB0eXBlb2YoIHJlc3BvbnNlX2RhdGFbICdhanhfZGF0YScgXVsgJ2FqeF9hZnRlcl9hY3Rpb25fbWVzc2FnZV9zdGF0dXMnIF0gKSApXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgPyByZXNwb25zZV9kYXRhWyAnYWp4X2RhdGEnIF1bICdhanhfYWZ0ZXJfYWN0aW9uX21lc3NhZ2Vfc3RhdHVzJyBdIDogJ2luZm8nLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnc2hvd19oZXJlJzogeydqcV9ub2RlJzoganFfbm9kZSwgJ3doZXJlJzogJ2FmdGVyJ30sXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdpc19hcHBlbmQnOiB0cnVlLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnc3R5bGUnICAgIDogJ3RleHQtYWxpZ246bGVmdDsnLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnZGVsYXknICAgIDogMTAwMDBcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0gKTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAoICdmdW5jdGlvbicgPT09IHR5cGVvZiAod3BiY191cGRhdGVfY2FwYWNpdHlfaGludCkgKSB7XHJcblx0XHRcdFx0XHRcdHdwYmNfdXBkYXRlX2NhcGFjaXR5X2hpbnQoIHJlc3BvbnNlX2RhdGFbJ3Jlc291cmNlX2lkJ10gKTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHQvLyBUcmlnZ2VyIGV2ZW50IHRoYXQgY2FsZW5kYXIgaGFzIGJlZW5cdFx0IC8vIEZpeEluOiAxMC4wLjAuNDQuICAvLyBGaXhJbjogMTAuMTQuMTcuMi5cclxuXHRcdFx0XHRcdGlmICggKGpRdWVyeSggJyNjYWxlbmRhcl9ib29raW5nJyArIHJlc3BvbnNlX2RhdGFbJ3Jlc291cmNlX2lkJ10gKS5sZW5ndGggPiAwKSB8fCAoalF1ZXJ5KCAnI2RhdGVfYm9va2luZycgKyByZXNwb25zZV9kYXRhWydyZXNvdXJjZV9pZCddICkubGVuZ3RoID4gMCkgKSB7XHJcblx0XHRcdFx0XHRcdHZhciB0YXJnZXRfZWxtID0galF1ZXJ5KCAnYm9keScgKS50cmlnZ2VyKCBcIndwYmNfY2FsZW5kYXJfYWp4X19sb2FkZWRfZGF0YVwiLCBbcmVzcG9uc2VfZGF0YVsgJ3Jlc291cmNlX2lkJyBdXSApO1xyXG5cdFx0XHRcdFx0XHQgLy9qUXVlcnkoICdib2R5JyApLm9uKCAnd3BiY19jYWxlbmRhcl9hanhfX2xvYWRlZF9kYXRhJywgZnVuY3Rpb24oIGV2ZW50LCByZXNvdXJjZV9pZCApIHsgLi4uIH0gKTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHQvL2pRdWVyeSggJyNhamF4X3Jlc3BvbmQnICkuaHRtbCggcmVzcG9uc2VfZGF0YSApO1x0XHQvLyBGb3IgYWJpbGl0eSB0byBzaG93IHJlc3BvbnNlLCBhZGQgc3VjaCBESVYgZWxlbWVudCB0byBwYWdlXHJcblx0XHRcdFx0fVxyXG5cdFx0XHQgICkuZmFpbCggZnVuY3Rpb24gKCBqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24gKSB7XG5cdFx0XHRcdFx0d3BiY19mcm9udF9lbmRfX2xvZ191bmV4cGVjdGVkX2FqYXhfcmVzcG9uc2UoICdXUEJDX0FKWF9DQUxFTkRBUl9MT0FEJywganFYSFIucmVzcG9uc2VUZXh0IHx8ICcnLCBqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24gKTtcblxyXG5cdFx0XHRcdFx0dmFyIGFqeF9wb3N0X2RhdGFfX3Jlc291cmNlX2lkID0gd3BiY19nZXRfcmVzb3VyY2VfaWRfX2Zyb21fYWp4X3Bvc3RfZGF0YV91cmwoIHRoaXMuZGF0YSApO1xuXHRcdFx0XHRcdHdwYmNfYmFsYW5jZXJfX2NvbXBsZXRlZCggYWp4X3Bvc3RfZGF0YV9fcmVzb3VyY2VfaWQgLCAnd3BiY19jYWxlbmRhcl9fbG9hZF9kYXRhX19hangnICk7XG5cdFx0XHRcdFx0d3BiY19jYWxlbmRhcl9fbG9hZGluZ19fc3RvcCggYWp4X3Bvc3RfZGF0YV9fcmVzb3VyY2VfaWQgKTtcblxuXHRcdFx0XHRcdHZhciBmYWxsYmFja19lcnJvcl9tZXNzYWdlID0gX3dwYmMuZ2V0X21lc3NhZ2UoICdtZXNzYWdlX3VuZXhwZWN0ZWRfc2VydmVyX3Jlc3BvbnNlJyApIHx8ICdUaGUgc2VydmVyIHJldHVybmVkIGFuIHVuZXhwZWN0ZWQgcmVzcG9uc2UuIFBsZWFzZSByZWxvYWQgdGhlIHBhZ2UgYW5kIHRyeSBhZ2Fpbi4nO1xuXHRcdFx0XHRcdHZhciBjb25mbGljdF9jYWNoZV9oaW50ICAgID0gX3dwYmMuZ2V0X21lc3NhZ2UoICdtZXNzYWdlX2h0dHBfY29uZmxpY3RfY2FjaGVfaGludCcgKSB8fCAnQSBjYWNoZWQgb3Igb3B0aW1pemVkIHZlcnNpb24gb2YgdGhpcyBwYWdlIG1heSBiZSBvdXRkYXRlZC4gQ2xlYXIgdGhlIGJyb3dzZXIgY2FjaGUgYW5kIHJlbG9hZCB0aGUgcGFnZS4gV2Vic2l0ZSBhZG1pbmlzdHJhdG9ycyBzaG91bGQgYWxzbyBwdXJnZSBwYWdlLCBzZXJ2ZXIsIGFuZCBDRE4gY2FjaGVzIGFuZCByZWdlbmVyYXRlIG1pbmlmaWVkIG9yIG9wdGltaXplZCBmaWxlcy4nO1xuXHRcdFx0XHRcdHZhciBlcnJvcl9tZXNzYWdlICAgICAgICAgID0gd3BiY19mcm9udF9lbmRfX2dldF9hamF4X2Vycm9yX21lc3NhZ2UoIGpxWEhSLCBmYWxsYmFja19lcnJvcl9tZXNzYWdlLCBjb25mbGljdF9jYWNoZV9oaW50ICk7XG5cdFx0XHRcdFx0dmFyIG1lc3NhZ2Vfc2hvd19kZWxheSA9IDMwMDA7XG5cblx0XHRcdFx0XHR2YXIganFfbm9kZSAgPSB3cGJjX2dldF9jYWxlbmRhcl9fanFfbm9kZV9fZm9yX21lc3NhZ2VzKCB0aGlzLmRhdGEgKTtcblxyXG5cdFx0XHRcdFx0LyoqXHJcblx0XHRcdFx0XHQgKiBJZiB3ZSBtYWtlIGZhc3QgY2xpY2tpbmcgb24gZGlmZmVyZW50IHBhZ2VzLFxyXG5cdFx0XHRcdFx0ICogdGhlbiB1bmRlciBjYWxlbmRhciB3aWxsIHNob3cgZXJyb3IgbWVzc2FnZSB3aXRoICBlbXB0eSAgdGV4dCwgYmVjYXVzZSBhamF4IHdhcyBub3QgcmVjZWl2ZWQuXHJcblx0XHRcdFx0XHQgKiBUbyAgbm90IHNob3cgc3VjaCB3YXJuaW5ncyB3ZSBhcmUgc2V0IGRlbGF5ICBpbiAzIHNlY29uZHMuICB2YXIgbWVzc2FnZV9zaG93X2RlbGF5ID0gMzAwMDtcclxuXHRcdFx0XHRcdCAqL1xyXG5cdFx0XHRcdFx0dmFyIGNsb3NlZF90aW1lciA9IHNldFRpbWVvdXQoIGZ1bmN0aW9uICgpe1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBTaG93IE1lc3NhZ2VcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR3cGJjX2Zyb250X2VuZF9fc2hvd19tZXNzYWdlKCBlcnJvcl9tZXNzYWdlICwgeyAndHlwZScgICAgIDogJ2Vycm9yJyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnc2hvd19oZXJlJzogeydqcV9ub2RlJzoganFfbm9kZSwgJ3doZXJlJzogJ2FmdGVyJ30sXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J2lzX2FwcGVuZCc6IHRydWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdzdHlsZScgICAgOiAndGV4dC1hbGlnbjpsZWZ0OycsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdjc3NfY2xhc3MnOid3cGJjX2ZlX21lc3NhZ2VfYWx0Jyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J2NvbnRlbnRfbW9kZSc6ICd0ZXh0Jyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J2RlbGF5JyAgICA6IDBcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0gKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgIH0gLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgcGFyc2VJbnQoIG1lc3NhZ2Vfc2hvd19kZWxheSApICAgKTtcclxuXHJcblx0XHRcdCAgfSlcclxuXHQgICAgICAgICAgLy8gLmRvbmUoICAgZnVuY3Rpb24gKCBkYXRhLCB0ZXh0U3RhdHVzLCBqcVhIUiApIHsgICBpZiAoIHdpbmRvdy5jb25zb2xlICYmIHdpbmRvdy5jb25zb2xlLmxvZyApeyBjb25zb2xlLmxvZyggJ3NlY29uZCBzdWNjZXNzJywgZGF0YSwgdGV4dFN0YXR1cywganFYSFIgKTsgfSAgICB9KVxyXG5cdFx0XHQgIC8vIC5hbHdheXMoIGZ1bmN0aW9uICggZGF0YV9qcVhIUiwgdGV4dFN0YXR1cywganFYSFJfZXJyb3JUaHJvd24gKSB7ICAgaWYgKCB3aW5kb3cuY29uc29sZSAmJiB3aW5kb3cuY29uc29sZS5sb2cgKXsgY29uc29sZS5sb2coICdhbHdheXMgZmluaXNoZWQnLCBkYXRhX2pxWEhSLCB0ZXh0U3RhdHVzLCBqcVhIUl9lcnJvclRocm93biApOyB9ICAgICB9KVxyXG5cdFx0XHQgIDsgIC8vIEVuZCBBamF4XHJcbn1cclxuXHJcblxyXG5cclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbi8vIFN1cHBvcnRcclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldCBDYWxlbmRhciBqUXVlcnkgbm9kZSBmb3Igc2hvd2luZyBtZXNzYWdlcyBkdXJpbmcgQWpheFxyXG5cdCAqIFRoaXMgcGFyYW1ldGVyOiAgIGNhbGVuZGFyX3JlcXVlc3RfcGFyYW1zW3Jlc291cmNlX2lkXSAgIHBhcnNlZCBmcm9tIHRoaXMuZGF0YSBBamF4IHBvc3QgIGRhdGFcclxuXHQgKlxyXG5cdCAqIEBwYXJhbSBhanhfcG9zdF9kYXRhX3VybF9wYXJhbXNcdFx0ICdhY3Rpb249V1BCQ19BSlhfQ0FMRU5EQVJfTE9BRC4uLiZjYWxlbmRhcl9yZXF1ZXN0X3BhcmFtcyU1QnJlc291cmNlX2lkJTVEPTImY2FsZW5kYXJfcmVxdWVzdF9wYXJhbXMlNUJib29raW5nX2hhc2glNUQ9JmNhbGVuZGFyX3JlcXVlc3RfcGFyYW1zJ1xyXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XHQnJyNjYWxlbmRhcl9ib29raW5nMScgIHwgICAnLmJvb2tpbmdfZm9ybV9kaXYnIC4uLlxyXG5cdCAqXHJcblx0ICogRXhhbXBsZSAgICB2YXIganFfbm9kZSAgPSB3cGJjX2dldF9jYWxlbmRhcl9fanFfbm9kZV9fZm9yX21lc3NhZ2VzKCB0aGlzLmRhdGEgKTtcclxuXHQgKi9cclxuXHRmdW5jdGlvbiB3cGJjX2dldF9jYWxlbmRhcl9fanFfbm9kZV9fZm9yX21lc3NhZ2VzKCBhanhfcG9zdF9kYXRhX3VybF9wYXJhbXMgKXtcclxuXHJcblx0XHR2YXIganFfbm9kZSA9ICcuYm9va2luZ19mb3JtX2Rpdic7XHJcblxyXG5cdFx0dmFyIGNhbGVuZGFyX3Jlc291cmNlX2lkID0gd3BiY19nZXRfcmVzb3VyY2VfaWRfX2Zyb21fYWp4X3Bvc3RfZGF0YV91cmwoIGFqeF9wb3N0X2RhdGFfdXJsX3BhcmFtcyApO1xyXG5cclxuXHRcdGlmICggY2FsZW5kYXJfcmVzb3VyY2VfaWQgPiAwICl7XHJcblx0XHRcdGpxX25vZGUgPSAnI2NhbGVuZGFyX2Jvb2tpbmcnICsgY2FsZW5kYXJfcmVzb3VyY2VfaWQ7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGpxX25vZGU7XHJcblx0fVxyXG5cclxuXHJcblx0LyoqXHJcblx0ICogR2V0IHJlc291cmNlIElEIGZyb20gYWp4IHBvc3QgZGF0YSB1cmwgICB1c3VhbGx5ICBmcm9tICB0aGlzLmRhdGEgID1cclxuXHQgKiAnYWN0aW9uPVdQQkNfQUpYX0NBTEVOREFSX0xPQUQuLi4mY2FsZW5kYXJfcmVxdWVzdF9wYXJhbXMlNUJyZXNvdXJjZV9pZCU1RD0yJmNhbGVuZGFyX3JlcXVlc3RfcGFyYW1zJTVCYm9va2luZ19oYXNoJTVEPSZjYWxlbmRhcl9yZXF1ZXN0X3BhcmFtcydcclxuXHQgKlxyXG5cdCAqIEBwYXJhbSBhanhfcG9zdF9kYXRhX3VybF9wYXJhbXNcdFx0ICdhY3Rpb249V1BCQ19BSlhfQ0FMRU5EQVJfTE9BRC4uLiZjYWxlbmRhcl9yZXF1ZXN0X3BhcmFtcyU1QnJlc291cmNlX2lkJTVEPTImY2FsZW5kYXJfcmVxdWVzdF9wYXJhbXMlNUJib29raW5nX2hhc2glNUQ9JmNhbGVuZGFyX3JlcXVlc3RfcGFyYW1zJ1xyXG5cdCAqIEByZXR1cm5zIHtpbnR9XHRcdFx0XHRcdFx0IDEgfCAwICAoaWYgZXJycm9yIHRoZW4gIDApXHJcblx0ICpcclxuXHQgKiBFeGFtcGxlICAgIHZhciBqcV9ub2RlICA9IHdwYmNfZ2V0X2NhbGVuZGFyX19qcV9ub2RlX19mb3JfbWVzc2FnZXMoIHRoaXMuZGF0YSApO1xyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIHdwYmNfZ2V0X3Jlc291cmNlX2lkX19mcm9tX2FqeF9wb3N0X2RhdGFfdXJsKCBhanhfcG9zdF9kYXRhX3VybF9wYXJhbXMgKXtcclxuXHJcblx0XHQvLyBHZXQgYm9va2luZyByZXNvdXJjZSBJRCBmcm9tIEFqYXggUG9zdCBSZXF1ZXN0ICAtPiB0aGlzLmRhdGEgPSAnYWN0aW9uPVdQQkNfQUpYX0NBTEVOREFSX0xPQUQuLi4mY2FsZW5kYXJfcmVxdWVzdF9wYXJhbXMlNUJyZXNvdXJjZV9pZCU1RD0yJmNhbGVuZGFyX3JlcXVlc3RfcGFyYW1zJTVCYm9va2luZ19oYXNoJTVEPSZjYWxlbmRhcl9yZXF1ZXN0X3BhcmFtcydcclxuXHRcdHZhciBjYWxlbmRhcl9yZXNvdXJjZV9pZCA9IHdwYmNfZ2V0X3VyaV9wYXJhbV9ieV9uYW1lKCAnY2FsZW5kYXJfcmVxdWVzdF9wYXJhbXNbcmVzb3VyY2VfaWRdJywgYWp4X3Bvc3RfZGF0YV91cmxfcGFyYW1zICk7XHJcblx0XHRpZiAoIChudWxsICE9PSBjYWxlbmRhcl9yZXNvdXJjZV9pZCkgJiYgKCcnICE9PSBjYWxlbmRhcl9yZXNvdXJjZV9pZCkgKXtcclxuXHRcdFx0Y2FsZW5kYXJfcmVzb3VyY2VfaWQgPSBwYXJzZUludCggY2FsZW5kYXJfcmVzb3VyY2VfaWQgKTtcclxuXHRcdFx0aWYgKCBjYWxlbmRhcl9yZXNvdXJjZV9pZCA+IDAgKXtcclxuXHRcdFx0XHRyZXR1cm4gY2FsZW5kYXJfcmVzb3VyY2VfaWQ7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiAwO1xyXG5cdH1cclxuXHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldCBwYXJhbWV0ZXIgZnJvbSBVUkwgIC0gIHBhcnNlIFVSTCBwYXJhbWV0ZXJzLCAgbGlrZSB0aGlzOlxyXG5cdCAqIGFjdGlvbj1XUEJDX0FKWF9DQUxFTkRBUl9MT0FELi4uJmNhbGVuZGFyX3JlcXVlc3RfcGFyYW1zJTVCcmVzb3VyY2VfaWQlNUQ9MiZjYWxlbmRhcl9yZXF1ZXN0X3BhcmFtcyU1QmJvb2tpbmdfaGFzaCU1RD0mY2FsZW5kYXJfcmVxdWVzdF9wYXJhbXNcclxuXHQgKiBAcGFyYW0gbmFtZSAgcGFyYW1ldGVyICBuYW1lLCAgbGlrZSAnY2FsZW5kYXJfcmVxdWVzdF9wYXJhbXNbcmVzb3VyY2VfaWRdJ1xyXG5cdCAqIEBwYXJhbSB1cmxcdCdwYXJhbWV0ZXIgIHN0cmluZyBVUkwnXHJcblx0ICogQHJldHVybnMge3N0cmluZ3xudWxsfSAgIHBhcmFtZXRlciB2YWx1ZVxyXG5cdCAqXHJcblx0ICogRXhhbXBsZTogXHRcdHdwYmNfZ2V0X3VyaV9wYXJhbV9ieV9uYW1lKCAnY2FsZW5kYXJfcmVxdWVzdF9wYXJhbXNbcmVzb3VyY2VfaWRdJywgdGhpcy5kYXRhICk7ICAtPiAnMidcclxuXHQgKi9cclxuXHRmdW5jdGlvbiB3cGJjX2dldF91cmlfcGFyYW1fYnlfbmFtZSggbmFtZSwgdXJsICl7XHJcblxyXG5cdFx0dXJsID0gZGVjb2RlVVJJQ29tcG9uZW50KCB1cmwgKTtcclxuXHJcblx0XHRuYW1lID0gbmFtZS5yZXBsYWNlKCAvW1xcW1xcXV0vZywgJ1xcXFwkJicgKTtcclxuXHRcdHZhciByZWdleCA9IG5ldyBSZWdFeHAoICdbPyZdJyArIG5hbWUgKyAnKD0oW14mI10qKXwmfCN8JCknICksXHJcblx0XHRcdHJlc3VsdHMgPSByZWdleC5leGVjKCB1cmwgKTtcclxuXHRcdGlmICggIXJlc3VsdHMgKSByZXR1cm4gbnVsbDtcclxuXHRcdGlmICggIXJlc3VsdHNbIDIgXSApIHJldHVybiAnJztcclxuXHRcdHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoIHJlc3VsdHNbIDIgXS5yZXBsYWNlKCAvXFwrL2csICcgJyApICk7XHJcblx0fVxyXG4iLCIvKipcclxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbiAqXHRpbmNsdWRlcy9fX2pzL2Zyb250X2VuZF9tZXNzYWdlcy93cGJjX2ZlX21lc3NhZ2VzLmpzXHJcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4gKi9cclxuXHJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4vLyBTaG93IE1lc3NhZ2VzIGF0IEZyb250LUVkbiBzaWRlXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBFeHRyYWN0IGEgc2FmZSBwbGFpbi10ZXh0IG1lc3NhZ2UgZnJvbSBhIHJlY29nbml6ZWQgSlNPTiBBSkFYIGVycm9yIHJlc3BvbnNlLlxuICpcbiAqIE9ubHkgZG9jdW1lbnRlZCBtZXNzYWdlIHByb3BlcnRpZXMgYXJlIGFjY2VwdGVkLiBDYWxsZXJzIG11c3Qgc3RpbGwgcmVuZGVyIHRoZSByZXR1cm5lZCB2YWx1ZSBpbiB0ZXh0IG1vZGUgc28gYW5cbiAqIHVwc3RyZWFtIHJlc3BvbnNlIGNhbm5vdCBpbmplY3QgbWFya3VwIGludG8gdGhlIHB1YmxpYyBib29raW5nIHBhZ2UuXG4gKlxuICogQHBhcmFtIHtqcVhIUnxudWxsfSBqcV94aHIgalF1ZXJ5IFhIUiBvYmplY3QsIHdoZW4gYXZhaWxhYmxlLlxuICogQHJldHVybiB7c3RyaW5nfSBCb3VuZGVkIHNlcnZlciBtZXNzYWdlLCBvciBhbiBlbXB0eSBzdHJpbmcgd2hlbiB0aGUgcmVzcG9uc2UgaXMgbm90IHJlY29nbml6ZWQuXG4gKi9cbmZ1bmN0aW9uIHdwYmNfZnJvbnRfZW5kX19nZXRfc2FmZV9hamF4X2Vycm9yX21lc3NhZ2UoIGpxX3hociApIHtcblx0aWYgKFxuXHRcdCEganFfeGhyXG5cdFx0fHwgISBqcV94aHIucmVzcG9uc2VKU09OXG5cdFx0fHwgJ29iamVjdCcgIT09IHR5cGVvZiBqcV94aHIucmVzcG9uc2VKU09OXG5cdFx0fHwgQXJyYXkuaXNBcnJheSgganFfeGhyLnJlc3BvbnNlSlNPTiApXG5cdCkge1xuXHRcdHJldHVybiAnJztcblx0fVxuXG5cdHZhciByZXNwb25zZV9qc29uICAgICAgPSBqcV94aHIucmVzcG9uc2VKU09OO1xuXHR2YXIgbWVzc2FnZV9jYW5kaWRhdGVzID0gW107XG5cblx0aWYgKCAnc3RyaW5nJyA9PT0gdHlwZW9mIHJlc3BvbnNlX2pzb24ubWVzc2FnZSApIHtcblx0XHRtZXNzYWdlX2NhbmRpZGF0ZXMucHVzaCggcmVzcG9uc2VfanNvbi5tZXNzYWdlICk7XG5cdH1cblx0aWYgKFxuXHRcdHJlc3BvbnNlX2pzb24uZGF0YVxuXHRcdCYmICdvYmplY3QnID09PSB0eXBlb2YgcmVzcG9uc2VfanNvbi5kYXRhXG5cdFx0JiYgISBBcnJheS5pc0FycmF5KCByZXNwb25zZV9qc29uLmRhdGEgKVxuXHRcdCYmICdzdHJpbmcnID09PSB0eXBlb2YgcmVzcG9uc2VfanNvbi5kYXRhLm1lc3NhZ2Vcblx0KSB7XG5cdFx0bWVzc2FnZV9jYW5kaWRhdGVzLnB1c2goIHJlc3BvbnNlX2pzb24uZGF0YS5tZXNzYWdlICk7XG5cdH1cblxuXHRmb3IgKCB2YXIgY2FuZGlkYXRlX2luZGV4ID0gMDsgY2FuZGlkYXRlX2luZGV4IDwgbWVzc2FnZV9jYW5kaWRhdGVzLmxlbmd0aDsgY2FuZGlkYXRlX2luZGV4KysgKSB7XG5cdFx0dmFyIHNlcnZlcl9tZXNzYWdlID0gbWVzc2FnZV9jYW5kaWRhdGVzWyBjYW5kaWRhdGVfaW5kZXggXS50cmltKCk7XG5cdFx0aWYgKCBzZXJ2ZXJfbWVzc2FnZSApIHtcblx0XHRcdHJldHVybiBzZXJ2ZXJfbWVzc2FnZS5zbGljZSggMCwgMTAwMCApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiAnJztcbn1cblxuLyoqXG4gKiBCdWlsZCBhIHB1YmxpYy1zYWZlIEFKQVggZmFpbHVyZSBtZXNzYWdlIHdpdGggb3B0aW9uYWwgSFRUUCA0MDkgY2FjaGUgdHJvdWJsZXNob290aW5nIGd1aWRhbmNlLlxuICpcbiAqIEBwYXJhbSB7anFYSFJ8bnVsbH0ganFfeGhyICAgICAgICAgICAgICAgICAgICBqUXVlcnkgWEhSIG9iamVjdCwgd2hlbiBhdmFpbGFibGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gICAgIGZhbGxiYWNrX21lc3NhZ2UgICAgICAgICAgTG9jYWxpemVkIGZhbGxiYWNrIHNob3duIHdoZW4gbm8gc2FmZSBzZXJ2ZXIgbWVzc2FnZSBleGlzdHMuXG4gKiBAcGFyYW0ge3N0cmluZ30gICAgIGh0dHBfY29uZmxpY3RfY2FjaGVfaGludCAgT3B0aW9uYWwgbG9jYWxpemVkIGNhY2hlIGd1aWRhbmNlIGZvciBIVFRQIDQwOSByZXNwb25zZXMuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFBsYWluLXRleHQgbWVzc2FnZSBpbmNsdWRpbmcgdGhlIEhUVFAgc3RhdHVzIHdoZW4gYXZhaWxhYmxlLlxuICovXG5mdW5jdGlvbiB3cGJjX2Zyb250X2VuZF9fZ2V0X2FqYXhfZXJyb3JfbWVzc2FnZSgganFfeGhyLCBmYWxsYmFja19tZXNzYWdlLCBodHRwX2NvbmZsaWN0X2NhY2hlX2hpbnQgKSB7XG5cdHZhciBodHRwX3N0YXR1cyAgICAgICAgID0ganFfeGhyICYmIGpxX3hoci5zdGF0dXMgPyBwYXJzZUludCgganFfeGhyLnN0YXR1cywgMTAgKSA6IDA7XG5cdHZhciBzYWZlX3NlcnZlcl9tZXNzYWdlID0gd3BiY19mcm9udF9lbmRfX2dldF9zYWZlX2FqYXhfZXJyb3JfbWVzc2FnZSgganFfeGhyICk7XG5cdHZhciBlcnJvcl9tZXNzYWdlICAgICAgID0gc2FmZV9zZXJ2ZXJfbWVzc2FnZSB8fCBTdHJpbmcoIGZhbGxiYWNrX21lc3NhZ2UgfHwgJycgKS50cmltKCk7XG5cblx0aWYgKCA0MDkgPT09IGh0dHBfc3RhdHVzICYmIGh0dHBfY29uZmxpY3RfY2FjaGVfaGludCApIHtcblx0XHRlcnJvcl9tZXNzYWdlICs9ICggZXJyb3JfbWVzc2FnZSA/ICcgJyA6ICcnICkgKyBTdHJpbmcoIGh0dHBfY29uZmxpY3RfY2FjaGVfaGludCApLnRyaW0oKTtcblx0fVxuXHRpZiAoIGh0dHBfc3RhdHVzICkge1xuXHRcdGVycm9yX21lc3NhZ2UgKz0gJyAoJyArIGh0dHBfc3RhdHVzICsgJyknO1xuXHR9XG5cblx0cmV0dXJuIGVycm9yX21lc3NhZ2U7XG59XG5cbi8qKlxuICogTG9nIGFuIHVuZXhwZWN0ZWQgQUpBWCByZXNwb25zZSBmb3IgYnJvd3Nlci1jb25zb2xlIGRpYWdub3N0aWNzLlxuICpcbiAqIFRoZSByZXNwb25zZSBpcyBpbnRlbnRpb25hbGx5IGtlcHQgb3V0IG9mIGZyb250ZW5kIG5vdGljZXMgYmVjYXVzZSBpdCBjYW4gY29udGFpbiBhIGNvbXBsZXRlIEhUTUwgZXJyb3Igb3IgbG9naW4gcGFnZS5cbiAqIExvZ2dpbmcgaXQgaGVyZSBwcmVzZXJ2ZXMgdGhlIHNlcnZlciBwYXlsb2FkIGFuZCByZXF1ZXN0IGNvbnRleHQgZm9yIHN1cHBvcnQgdHJvdWJsZXNob290aW5nLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSAgICAgIGFqYXhfYWN0aW9uICAgV29yZFByZXNzIEFKQVggYWN0aW9uIHRoYXQgcHJvZHVjZWQgdGhlIHVuZXhwZWN0ZWQgcmVzcG9uc2UuXG4gKiBAcGFyYW0geyp9ICAgICAgICAgICByZXNwb25zZV9kYXRhIFJhdyByZXNwb25zZSBwYXlsb2FkIHJldHVybmVkIGJ5IHRoZSBzZXJ2ZXIuXG4gKiBAcGFyYW0ge2pxWEhSfG51bGx9ICBqcV94aHIgICAgICAgIGpRdWVyeSBYSFIgb2JqZWN0LCB3aGVuIGF2YWlsYWJsZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSAgICAgIHRleHRfc3RhdHVzICAgalF1ZXJ5IHJlcXVlc3Qgc3RhdHVzIG9yIHN1Y2Nlc3Mgc3RhdGUuXG4gKiBAcGFyYW0ge3N0cmluZ3xFcnJvcn0gZXJyb3JfdGhyb3duIEVycm9yIGRlc2NyaXB0aW9uIG9yIGV4Y2VwdGlvbiByZXBvcnRlZCBieSBqUXVlcnkuXG4gKiBAcmV0dXJuIHt2b2lkfVxuICovXG5mdW5jdGlvbiB3cGJjX2Zyb250X2VuZF9fbG9nX3VuZXhwZWN0ZWRfYWpheF9yZXNwb25zZSggYWpheF9hY3Rpb24sIHJlc3BvbnNlX2RhdGEsIGpxX3hociwgdGV4dF9zdGF0dXMsIGVycm9yX3Rocm93biApIHtcblx0aWYgKCAhIHdpbmRvdy5jb25zb2xlIHx8ICdmdW5jdGlvbicgIT09IHR5cGVvZiB3aW5kb3cuY29uc29sZS5lcnJvciApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0cnkge1xuXHRcdHZhciBjb250ZW50X3R5cGUgICAgICAgPSAnJztcblx0XHR2YXIgcmVzcG9uc2VfdGV4dCAgICAgID0gJ3N0cmluZycgPT09IHR5cGVvZiByZXNwb25zZV9kYXRhID8gcmVzcG9uc2VfZGF0YSA6ICcnO1xuXHRcdHZhciByZXNwb25zZV9sZW5ndGggICAgPSByZXNwb25zZV90ZXh0Lmxlbmd0aDtcblx0XHR2YXIgcmVzcG9uc2VfZm9ybWF0ICAgID0gcmVzcG9uc2VfdGV4dCA/ICd0ZXh0JyA6ICdlbXB0eSc7XG5cdFx0dmFyIGh0dHBfc3RhdHVzICAgICAgICA9IGpxX3hociAmJiBqcV94aHIuc3RhdHVzID8gcGFyc2VJbnQoIGpxX3hoci5zdGF0dXMsIDEwICkgOiAwO1xuXHRcdHZhciBkaWFnbm9zdGljX2FjdGlvbiAgPSBTdHJpbmcoIGFqYXhfYWN0aW9uIHx8ICdBSkFYJyApLnJlcGxhY2UoIC9eV1BCQ19BSlhfLywgJycgKS5yZXBsYWNlKCAvW15BLVphLXowLTldKy9nLCAnLScgKS50b1VwcGVyQ2FzZSgpO1xuXHRcdHZhciBkaWFnbm9zdGljX2NvZGUgICAgPSAnV1BCQy0nICsgZGlhZ25vc3RpY19hY3Rpb24gKyAnLScgKyAoIGh0dHBfc3RhdHVzIHx8ICdORVRXT1JLJyApO1xuXHRcdHZhciByZXNwb25zZV9oZWFkZXJzICAgPSB7fTtcblx0XHRpZiAoIGpxX3hociAmJiAnZnVuY3Rpb24nID09PSB0eXBlb2YganFfeGhyLmdldFJlc3BvbnNlSGVhZGVyICkge1xuXHRcdFx0Y29udGVudF90eXBlID0ganFfeGhyLmdldFJlc3BvbnNlSGVhZGVyKCAnY29udGVudC10eXBlJyApIHx8ICcnO1xuXHRcdFx0cmVzcG9uc2VfaGVhZGVycyA9IHtcblx0XHRcdFx0J3NlcnZlcicgICAgICAgICAgIDoganFfeGhyLmdldFJlc3BvbnNlSGVhZGVyKCAnc2VydmVyJyApIHx8ICcnLFxuXHRcdFx0XHQnY2ZfcmF5JyAgICAgICAgICAgOiBqcV94aHIuZ2V0UmVzcG9uc2VIZWFkZXIoICdjZi1yYXknICkgfHwgJycsXG5cdFx0XHRcdCd4X2NhY2hlJyAgICAgICAgICA6IGpxX3hoci5nZXRSZXNwb25zZUhlYWRlciggJ3gtY2FjaGUnICkgfHwgJycsXG5cdFx0XHRcdCd4X2NhY2hlX3N0YXR1cycgICA6IGpxX3hoci5nZXRSZXNwb25zZUhlYWRlciggJ3gtY2FjaGUtc3RhdHVzJyApIHx8ICcnLFxuXHRcdFx0XHQneF9saXRlc3BlZWRfY2FjaGUnOiBqcV94aHIuZ2V0UmVzcG9uc2VIZWFkZXIoICd4LWxpdGVzcGVlZC1jYWNoZScgKSB8fCAnJyxcblx0XHRcdFx0J3hfcmVxdWVzdF9pZCcgICAgIDoganFfeGhyLmdldFJlc3BvbnNlSGVhZGVyKCAneC1yZXF1ZXN0LWlkJyApIHx8ICcnXG5cdFx0XHR9O1xuXHRcdH1cblx0XHRpZiAoIGpxX3hociAmJiBqcV94aHIucmVzcG9uc2VKU09OICYmICdvYmplY3QnID09PSB0eXBlb2YganFfeGhyLnJlc3BvbnNlSlNPTiApIHtcblx0XHRcdHJlc3BvbnNlX2Zvcm1hdCA9ICdqc29uJztcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHJlc3BvbnNlX2xlbmd0aCA9IEpTT04uc3RyaW5naWZ5KCBqcV94aHIucmVzcG9uc2VKU09OICkubGVuZ3RoO1xuXHRcdFx0fSBjYXRjaCAoIHJlc3BvbnNlX2pzb25fZXJyb3IgKSB7XG5cdFx0XHRcdHJlc3BvbnNlX2xlbmd0aCA9IDA7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICggLTEgIT09IGNvbnRlbnRfdHlwZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoICdodG1sJyApIHx8IC9eXFxzKig/OjwhZG9jdHlwZXw8aHRtbCkvaS50ZXN0KCByZXNwb25zZV90ZXh0ICkgKSB7XG5cdFx0XHRyZXNwb25zZV9mb3JtYXQgPSAnaHRtbCc7XG5cdFx0fVxuXG5cdFx0d2luZG93LmNvbnNvbGUuZXJyb3IoICdbV1BCQ11bQUpBWC1VTkVYUEVDVEVELVJFU1BPTlNFXSAnICsgYWpheF9hY3Rpb24sIHtcblx0XHRcdCdhY3Rpb24nICAgICAgICAgIDogYWpheF9hY3Rpb24sXG5cdFx0XHQnZGlhZ25vc3RpY19jb2RlJyA6IGRpYWdub3N0aWNfY29kZSxcblx0XHRcdCdodHRwX3N0YXR1cycgICAgIDogaHR0cF9zdGF0dXMsXG5cdFx0XHQnaHR0cF9zdGF0dXNfdGV4dCc6IGpxX3hociAmJiBqcV94aHIuc3RhdHVzVGV4dCA/IGpxX3hoci5zdGF0dXNUZXh0IDogJycsXG5cdFx0XHQndGV4dF9zdGF0dXMnICAgICA6IHRleHRfc3RhdHVzIHx8ICcnLFxuXHRcdFx0J2Vycm9yJyAgICAgICAgICAgOiBlcnJvcl90aHJvd24gfHwgJycsXG5cdFx0XHQnY29udGVudF90eXBlJyAgICA6IGNvbnRlbnRfdHlwZSxcblx0XHRcdCdyZXNwb25zZV9mb3JtYXQnIDogcmVzcG9uc2VfZm9ybWF0LFxuXHRcdFx0J3Jlc3BvbnNlX2xlbmd0aCcgOiByZXNwb25zZV9sZW5ndGgsXG5cdFx0XHQnc2VydmVyX21lc3NhZ2UnICA6IHdwYmNfZnJvbnRfZW5kX19nZXRfc2FmZV9hamF4X2Vycm9yX21lc3NhZ2UoIGpxX3hociApLFxuXHRcdFx0J3Jlc3BvbnNlX2hlYWRlcnMnOiByZXNwb25zZV9oZWFkZXJzLFxuXHRcdFx0J3Jlc3BvbnNlJyAgICAgICAgOiByZXNwb25zZV9kYXRhXG5cdFx0fSApO1xuXHR9IGNhdGNoICggbG9nZ2luZ19lcnJvciApIHtcblx0XHQvLyBDb25zb2xlIGRpYWdub3N0aWNzIG11c3QgbmV2ZXIgaW50ZXJydXB0IGZyb250ZW5kIGVycm9yIHJlY292ZXJ5LlxuXHR9XG59XG5cbi8qKlxuICogU2hvdyBtZXNzYWdlIGluIGNvbnRlbnRcbiAqXHJcbiAqIEBwYXJhbSBtZXNzYWdlXHRcdFx0XHRNZXNzYWdlIEhUTUxcclxuICogQHBhcmFtIHBhcmFtcyA9IHtcclxuICpcdFx0XHRcdFx0XHRcdFx0J3R5cGUnICAgICA6ICd3YXJuaW5nJyxcdFx0XHRcdFx0XHRcdC8vICdlcnJvcicgfCAnd2FybmluZycgfCAnaW5mbycgfCAnc3VjY2VzcydcclxuICpcdFx0XHRcdFx0XHRcdFx0J3Nob3dfaGVyZScgOiB7XHJcbiAqXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnanFfbm9kZScgOiAnJyxcdFx0XHRcdC8vIGFueSBqUXVlcnkgbm9kZSBkZWZpbml0aW9uXHJcbiAqXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnd2hlcmUnICAgOiAnaW5zaWRlJ1x0XHQvLyAnaW5zaWRlJyB8ICdiZWZvcmUnIHwgJ2FmdGVyJyB8ICdyaWdodCcgfCAnbGVmdCdcclxuICpcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICB9LFxyXG4gKlx0XHRcdFx0XHRcdFx0XHQnaXNfYXBwZW5kJzogdHJ1ZSxcdFx0XHRcdFx0XHRcdFx0Ly8gQXBwbHkgIG9ubHkgaWYgXHQnd2hlcmUnICAgOiAnaW5zaWRlJ1xyXG4gKlx0XHRcdFx0XHRcdFx0XHQnc3R5bGUnICAgIDogJ3RleHQtYWxpZ246bGVmdDsnLFx0XHRcdFx0Ly8gc3R5bGVzLCBpZiBuZWVkZWRcclxuICpcdFx0XHRcdFx0XHRcdCAgICAnY3NzX2NsYXNzJzogJycsXHRcdFx0XHRcdFx0XHRcdC8vIEZvciBleGFtcGxlIGNhbiAgYmU6ICd3cGJjX2ZlX21lc3NhZ2VfYWx0J1xyXG4gKlx0XHRcdFx0XHRcdFx0XHQnZGVsYXknICAgIDogMCxcdFx0XHRcdFx0XHRcdFx0XHQvLyBob3cgbWFueSBtaWNyb3NlY29uZCB0byAgc2hvdywgIGlmIDAgIHRoZW4gIHNob3cgZm9yZXZlclxyXG4gKlx0XHRcdFx0XHRcdFx0XHQnaWZfdmlzaWJsZV9ub3Rfc2hvdyc6IGZhbHNlXHRcdFx0XHRcdC8vIGlmIHRydWUsICB0aGVuIGRvIG5vdCBzaG93IG1lc3NhZ2UsICBpZiBwcmV2aW9zIG1lc3NhZ2Ugd2FzIG5vdCBoaWRlZCAobm90IGFwcGx5IGlmICd3aGVyZScgICA6ICdpbnNpZGUnIClcclxuICpcdFx0XHRcdH07XHJcbiAqIEV4YW1wbGVzOlxyXG4gKiBcdFx0XHR2YXIgaHRtbF9pZCA9IHdwYmNfZnJvbnRfZW5kX19zaG93X21lc3NhZ2UoICdZb3UgY2FuIHRlc3QgZGF5cyBzZWxlY3Rpb24gaW4gY2FsZW5kYXInLCB7fSApO1xyXG4gKlxyXG4gKlx0XHRcdHZhciBub3RpY2VfbWVzc2FnZV9pZCA9IHdwYmNfZnJvbnRfZW5kX19zaG93X21lc3NhZ2UoIF93cGJjLmdldF9tZXNzYWdlKCAnbWVzc2FnZV9jaGVja19yZXF1aXJlZCcgKSwgeyAndHlwZSc6ICd3YXJuaW5nJywgJ2RlbGF5JzogMTAwMDAsICdpZl92aXNpYmxlX25vdF9zaG93JzogdHJ1ZSxcclxuICpcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgJ3Nob3dfaGVyZSc6IHsnd2hlcmUnOiAncmlnaHQnLCAnanFfbm9kZSc6IGVsLH0gfSApO1xyXG4gKlxyXG4gKlx0XHRcdHdwYmNfZnJvbnRfZW5kX19zaG93X21lc3NhZ2UoIHJlc3BvbnNlX2RhdGFbICdhanhfZGF0YScgXVsgJ2FqeF9hZnRlcl9hY3Rpb25fbWVzc2FnZScgXS5yZXBsYWNlKCAvXFxuL2csIFwiPGJyIC8+XCIgKSxcclxuICpcdFx0XHRcdFx0XHRcdFx0XHRcdFx0eyAgICd0eXBlJyAgICAgOiAoICd1bmRlZmluZWQnICE9PSB0eXBlb2YoIHJlc3BvbnNlX2RhdGFbICdhanhfZGF0YScgXVsgJ2FqeF9hZnRlcl9hY3Rpb25fbWVzc2FnZV9zdGF0dXMnIF0gKSApXHJcbiAqXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICA/IHJlc3BvbnNlX2RhdGFbICdhanhfZGF0YScgXVsgJ2FqeF9hZnRlcl9hY3Rpb25fbWVzc2FnZV9zdGF0dXMnIF0gOiAnaW5mbycsXHJcbiAqXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3Nob3dfaGVyZSc6IHsnanFfbm9kZSc6IGpxX25vZGUsICd3aGVyZSc6ICdhZnRlcid9LFxyXG4gKlx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdjc3NfY2xhc3MnOid3cGJjX2ZlX21lc3NhZ2VfYWx0JyxcclxuICpcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnZGVsYXknICAgIDogMTAwMDBcclxuICpcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSApO1xyXG4gKlxyXG4gKlxyXG4gKiBAcmV0dXJucyBzdHJpbmcgIC0gSFRNTCBJRFx0XHRvciAwIGlmIG5vdCBzaG93aW5nIGR1cmluZyB0aGlzIHRpbWUuXHJcbiAqL1xyXG5mdW5jdGlvbiB3cGJjX2Zyb250X2VuZF9fc2hvd19tZXNzYWdlKCBtZXNzYWdlLCBwYXJhbXMgPSB7fSApe1xyXG5cclxuXHR2YXIgcGFyYW1zX2RlZmF1bHQgPSB7XHJcblx0XHRcdFx0XHRcdFx0XHQndHlwZScgICAgIDogJ3dhcm5pbmcnLFx0XHRcdFx0XHRcdFx0Ly8gJ2Vycm9yJyB8ICd3YXJuaW5nJyB8ICdpbmZvJyB8ICdzdWNjZXNzJ1xyXG5cdFx0XHRcdFx0XHRcdFx0J3Nob3dfaGVyZScgOiB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J2pxX25vZGUnIDogJycsXHRcdFx0XHQvLyBhbnkgalF1ZXJ5IG5vZGUgZGVmaW5pdGlvblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCd3aGVyZScgICA6ICdpbnNpZGUnXHRcdC8vICdpbnNpZGUnIHwgJ2JlZm9yZScgfCAnYWZ0ZXInIHwgJ3JpZ2h0JyB8ICdsZWZ0J1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICB9LFxyXG5cdFx0XHRcdFx0XHRcdFx0J2lzX2FwcGVuZCc6IHRydWUsXHRcdFx0XHRcdFx0XHRcdC8vIEFwcGx5ICBvbmx5IGlmIFx0J3doZXJlJyAgIDogJ2luc2lkZSdcclxuXHRcdFx0XHRcdFx0XHRcdCdzdHlsZScgICAgOiAndGV4dC1hbGlnbjpsZWZ0OycsXHRcdFx0XHQvLyBzdHlsZXMsIGlmIG5lZWRlZFxyXG5cdFx0XHRcdFx0XHRcdCAgICAnY3NzX2NsYXNzJzogJycsXHRcdFx0XHRcdFx0XHRcdC8vIEZvciBleGFtcGxlIGNhbiAgYmU6ICd3cGJjX2ZlX21lc3NhZ2VfYWx0J1xyXG5cdFx0XHRcdFx0XHRcdFx0J2RlbGF5JyAgICA6IDAsXHRcdFx0XHRcdFx0XHRcdFx0Ly8gaG93IG1hbnkgbWljcm9zZWNvbmQgdG8gIHNob3csICBpZiAwICB0aGVuICBzaG93IGZvcmV2ZXJcblx0XHRcdFx0XHRcdFx0XHQnaWZfdmlzaWJsZV9ub3Rfc2hvdyc6IGZhbHNlLFx0XHRcdFx0XHQvLyBpZiB0cnVlLCAgdGhlbiBkbyBub3Qgc2hvdyBtZXNzYWdlLCAgaWYgcHJldmlvcyBtZXNzYWdlIHdhcyBub3QgaGlkZWQgKG5vdCBhcHBseSBpZiAnd2hlcmUnICAgOiAnaW5zaWRlJyApXG5cdFx0XHRcdFx0XHRcdFx0J2lzX3Njcm9sbCc6IHRydWUsXHRcdFx0XHRcdFx0XHRcdC8vIGlzIHNjcm9sbCAgdG8gIHRoaXMgZWxlbWVudFxuXHRcdFx0XHRcdFx0XHRcdCdjb250ZW50X21vZGUnOiAnaHRtbCdcdFx0XHRcdFx0XHRcdC8vICdodG1sJyBmb3IgdHJ1c3RlZCBsZWdhY3kgY29udGVudCB8ICd0ZXh0JyBmb3IgZWRpdGFibGUvdXNlciBjb250ZW50XG5cdFx0XHRcdFx0XHR9O1xyXG5cdGZvciAoIHZhciBwX2tleSBpbiBwYXJhbXMgKXtcclxuXHRcdHBhcmFtc19kZWZhdWx0WyBwX2tleSBdID0gcGFyYW1zWyBwX2tleSBdO1xyXG5cdH1cclxuXHRwYXJhbXMgPSBwYXJhbXNfZGVmYXVsdDtcblxuXHRpZiAoICd0ZXh0JyA9PT0gcGFyYW1zWyAnY29udGVudF9tb2RlJyBdICkge1xuXHRcdG1lc3NhZ2UgPSBqUXVlcnkoICc8ZGl2PicgKS50ZXh0KCBudWxsID09PSBtZXNzYWdlIHx8ICd1bmRlZmluZWQnID09PSB0eXBlb2YgbWVzc2FnZSA/ICcnIDogU3RyaW5nKCBtZXNzYWdlICkgKS5odG1sKCkucmVwbGFjZSggL1xcbi9nLCAnPGJyIC8+JyApO1xuXHR9XG5cclxuICAgIHZhciB1bmlxdWVfZGl2X2lkID0gbmV3IERhdGUoKTtcclxuICAgIHVuaXF1ZV9kaXZfaWQgPSAnd3BiY19ub3RpY2VfJyArIHVuaXF1ZV9kaXZfaWQuZ2V0VGltZSgpO1xyXG5cclxuXHRwYXJhbXNbJ2Nzc19jbGFzcyddICs9ICcgd3BiY19mZV9tZXNzYWdlJztcclxuXHRpZiAoIHBhcmFtc1sndHlwZSddID09ICdlcnJvcicgKXtcclxuXHRcdHBhcmFtc1snY3NzX2NsYXNzJ10gKz0gJyB3cGJjX2ZlX21lc3NhZ2VfZXJyb3InO1xyXG5cdFx0bWVzc2FnZSA9ICc8aSBjbGFzcz1cIm1lbnVfaWNvbiBpY29uLTF4IHdwYmNfaWNuX3JlcG9ydF9nbWFpbGVycm9ycmVkXCI+PC9pPicgKyBtZXNzYWdlO1xyXG5cdH1cclxuXHRpZiAoIHBhcmFtc1sndHlwZSddID09ICd3YXJuaW5nJyApe1xyXG5cdFx0cGFyYW1zWydjc3NfY2xhc3MnXSArPSAnIHdwYmNfZmVfbWVzc2FnZV93YXJuaW5nJztcclxuXHRcdG1lc3NhZ2UgPSAnPGkgY2xhc3M9XCJtZW51X2ljb24gaWNvbi0xeCB3cGJjX2ljbl93YXJuaW5nXCI+PC9pPicgKyBtZXNzYWdlO1xyXG5cdH1cclxuXHRpZiAoIHBhcmFtc1sndHlwZSddID09ICdpbmZvJyApe1xyXG5cdFx0cGFyYW1zWydjc3NfY2xhc3MnXSArPSAnIHdwYmNfZmVfbWVzc2FnZV9pbmZvJztcclxuXHR9XHJcblx0aWYgKCBwYXJhbXNbJ3R5cGUnXSA9PSAnc3VjY2VzcycgKXtcclxuXHRcdHBhcmFtc1snY3NzX2NsYXNzJ10gKz0gJyB3cGJjX2ZlX21lc3NhZ2Vfc3VjY2Vzcyc7XHJcblx0XHRtZXNzYWdlID0gJzxpIGNsYXNzPVwibWVudV9pY29uIGljb24tMXggd3BiY19pY25fZG9uZV9vdXRsaW5lXCI+PC9pPicgKyBtZXNzYWdlO1xyXG5cdH1cclxuXHJcblx0dmFyIHNjcm9sbF90b19lbGVtZW50ID0gJzxkaXYgaWQ9XCInICsgdW5pcXVlX2Rpdl9pZCArICdfc2Nyb2xsXCIgc3R5bGU9XCJkaXNwbGF5Om5vbmU7XCI+PC9kaXY+JztcclxuXHRtZXNzYWdlID0gJzxkaXYgaWQ9XCInICsgdW5pcXVlX2Rpdl9pZCArICdcIiBjbGFzcz1cIndwYmNfZnJvbnRfZW5kX19tZXNzYWdlICcgKyBwYXJhbXNbJ2Nzc19jbGFzcyddICsgJ1wiIHN0eWxlPVwiJyArIHBhcmFtc1sgJ3N0eWxlJyBdICsgJ1wiPicgKyBtZXNzYWdlICsgJzwvZGl2Pic7XHJcblxyXG5cclxuXHR2YXIganFfZWxfbWVzc2FnZSA9IGZhbHNlO1xyXG5cdHZhciBpc19zaG93X21lc3NhZ2UgPSB0cnVlO1xyXG5cclxuXHRpZiAoICdpbnNpZGUnID09PSBwYXJhbXNbICdzaG93X2hlcmUnIF1bICd3aGVyZScgXSApe1xyXG5cclxuXHRcdGlmICggcGFyYW1zWyAnaXNfYXBwZW5kJyBdICl7XHJcblx0XHRcdGpRdWVyeSggcGFyYW1zWyAnc2hvd19oZXJlJyBdWyAnanFfbm9kZScgXSApLmFwcGVuZCggc2Nyb2xsX3RvX2VsZW1lbnQgKTtcclxuXHRcdFx0alF1ZXJ5KCBwYXJhbXNbICdzaG93X2hlcmUnIF1bICdqcV9ub2RlJyBdICkuYXBwZW5kKCBtZXNzYWdlICk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRqUXVlcnkoIHBhcmFtc1sgJ3Nob3dfaGVyZScgXVsgJ2pxX25vZGUnIF0gKS5odG1sKCBzY3JvbGxfdG9fZWxlbWVudCArIG1lc3NhZ2UgKTtcclxuXHRcdH1cclxuXHJcblx0fSBlbHNlIGlmICggJ2JlZm9yZScgPT09IHBhcmFtc1sgJ3Nob3dfaGVyZScgXVsgJ3doZXJlJyBdICl7XHJcblxyXG5cdFx0anFfZWxfbWVzc2FnZSA9IGpRdWVyeSggcGFyYW1zWyAnc2hvd19oZXJlJyBdWyAnanFfbm9kZScgXSApLnNpYmxpbmdzKCAnW2lkXj1cIndwYmNfbm90aWNlX1wiXScgKTtcclxuXHRcdGlmICggKHBhcmFtc1sgJ2lmX3Zpc2libGVfbm90X3Nob3cnIF0pICYmIChqcV9lbF9tZXNzYWdlLmlzKCAnOnZpc2libGUnICkpICl7XHJcblx0XHRcdGlzX3Nob3dfbWVzc2FnZSA9IGZhbHNlO1xyXG5cdFx0XHR1bmlxdWVfZGl2X2lkID0galF1ZXJ5KCBqcV9lbF9tZXNzYWdlLmdldCggMCApICkuYXR0ciggJ2lkJyApO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCBpc19zaG93X21lc3NhZ2UgKXtcclxuXHRcdFx0alF1ZXJ5KCBwYXJhbXNbICdzaG93X2hlcmUnIF1bICdqcV9ub2RlJyBdICkuYmVmb3JlKCBzY3JvbGxfdG9fZWxlbWVudCApO1xyXG5cdFx0XHRqUXVlcnkoIHBhcmFtc1sgJ3Nob3dfaGVyZScgXVsgJ2pxX25vZGUnIF0gKS5iZWZvcmUoIG1lc3NhZ2UgKTtcclxuXHRcdH1cclxuXHJcblx0fSBlbHNlIGlmICggJ2FmdGVyJyA9PT0gcGFyYW1zWyAnc2hvd19oZXJlJyBdWyAnd2hlcmUnIF0gKXtcclxuXHJcblx0XHRqcV9lbF9tZXNzYWdlID0galF1ZXJ5KCBwYXJhbXNbICdzaG93X2hlcmUnIF1bICdqcV9ub2RlJyBdICkubmV4dEFsbCggJ1tpZF49XCJ3cGJjX25vdGljZV9cIl0nICk7XHJcblx0XHRpZiAoIChwYXJhbXNbICdpZl92aXNpYmxlX25vdF9zaG93JyBdKSAmJiAoanFfZWxfbWVzc2FnZS5pcyggJzp2aXNpYmxlJyApKSApe1xyXG5cdFx0XHRpc19zaG93X21lc3NhZ2UgPSBmYWxzZTtcclxuXHRcdFx0dW5pcXVlX2Rpdl9pZCA9IGpRdWVyeSgganFfZWxfbWVzc2FnZS5nZXQoIDAgKSApLmF0dHIoICdpZCcgKTtcclxuXHRcdH1cclxuXHRcdGlmICggaXNfc2hvd19tZXNzYWdlICl7XHJcblx0XHRcdGpRdWVyeSggcGFyYW1zWyAnc2hvd19oZXJlJyBdWyAnanFfbm9kZScgXSApLmJlZm9yZSggc2Nyb2xsX3RvX2VsZW1lbnQgKTtcdFx0Ly8gV2UgbmVlZCB0byAgc2V0ICBoZXJlIGJlZm9yZShmb3IgaGFuZHkgc2Nyb2xsKVxyXG5cdFx0XHRqUXVlcnkoIHBhcmFtc1sgJ3Nob3dfaGVyZScgXVsgJ2pxX25vZGUnIF0gKS5hZnRlciggbWVzc2FnZSApO1xyXG5cdFx0fVxyXG5cclxuXHR9IGVsc2UgaWYgKCAncmlnaHQnID09PSBwYXJhbXNbICdzaG93X2hlcmUnIF1bICd3aGVyZScgXSApe1xyXG5cclxuXHRcdGpxX2VsX21lc3NhZ2UgPSBqUXVlcnkoIHBhcmFtc1sgJ3Nob3dfaGVyZScgXVsgJ2pxX25vZGUnIF0gKS5uZXh0QWxsKCAnLndwYmNfZnJvbnRfZW5kX19tZXNzYWdlX2NvbnRhaW5lcl9yaWdodCcgKS5maW5kKCAnW2lkXj1cIndwYmNfbm90aWNlX1wiXScgKTtcclxuXHRcdGlmICggKHBhcmFtc1sgJ2lmX3Zpc2libGVfbm90X3Nob3cnIF0pICYmIChqcV9lbF9tZXNzYWdlLmlzKCAnOnZpc2libGUnICkpICl7XHJcblx0XHRcdGlzX3Nob3dfbWVzc2FnZSA9IGZhbHNlO1xyXG5cdFx0XHR1bmlxdWVfZGl2X2lkID0galF1ZXJ5KCBqcV9lbF9tZXNzYWdlLmdldCggMCApICkuYXR0ciggJ2lkJyApO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCBpc19zaG93X21lc3NhZ2UgKXtcclxuXHRcdFx0alF1ZXJ5KCBwYXJhbXNbICdzaG93X2hlcmUnIF1bICdqcV9ub2RlJyBdICkuYmVmb3JlKCBzY3JvbGxfdG9fZWxlbWVudCApO1x0XHQvLyBXZSBuZWVkIHRvICBzZXQgIGhlcmUgYmVmb3JlKGZvciBoYW5keSBzY3JvbGwpXHJcblx0XHRcdGpRdWVyeSggcGFyYW1zWyAnc2hvd19oZXJlJyBdWyAnanFfbm9kZScgXSApLmFmdGVyKCAnPGRpdiBjbGFzcz1cIndwYmNfZnJvbnRfZW5kX19tZXNzYWdlX2NvbnRhaW5lcl9yaWdodFwiPicgKyBtZXNzYWdlICsgJzwvZGl2PicgKTtcclxuXHRcdH1cclxuXHR9IGVsc2UgaWYgKCAnbGVmdCcgPT09IHBhcmFtc1sgJ3Nob3dfaGVyZScgXVsgJ3doZXJlJyBdICl7XHJcblxyXG5cdFx0anFfZWxfbWVzc2FnZSA9IGpRdWVyeSggcGFyYW1zWyAnc2hvd19oZXJlJyBdWyAnanFfbm9kZScgXSApLnNpYmxpbmdzKCAnLndwYmNfZnJvbnRfZW5kX19tZXNzYWdlX2NvbnRhaW5lcl9sZWZ0JyApLmZpbmQoICdbaWRePVwid3BiY19ub3RpY2VfXCJdJyApO1xyXG5cdFx0aWYgKCAocGFyYW1zWyAnaWZfdmlzaWJsZV9ub3Rfc2hvdycgXSkgJiYgKGpxX2VsX21lc3NhZ2UuaXMoICc6dmlzaWJsZScgKSkgKXtcclxuXHRcdFx0aXNfc2hvd19tZXNzYWdlID0gZmFsc2U7XHJcblx0XHRcdHVuaXF1ZV9kaXZfaWQgPSBqUXVlcnkoIGpxX2VsX21lc3NhZ2UuZ2V0KCAwICkgKS5hdHRyKCAnaWQnICk7XHJcblx0XHR9XHJcblx0XHRpZiAoIGlzX3Nob3dfbWVzc2FnZSApe1xyXG5cdFx0XHRqUXVlcnkoIHBhcmFtc1sgJ3Nob3dfaGVyZScgXVsgJ2pxX25vZGUnIF0gKS5iZWZvcmUoIHNjcm9sbF90b19lbGVtZW50ICk7XHRcdC8vIFdlIG5lZWQgdG8gIHNldCAgaGVyZSBiZWZvcmUoZm9yIGhhbmR5IHNjcm9sbClcclxuXHRcdFx0alF1ZXJ5KCBwYXJhbXNbICdzaG93X2hlcmUnIF1bICdqcV9ub2RlJyBdICkuYmVmb3JlKCAnPGRpdiBjbGFzcz1cIndwYmNfZnJvbnRfZW5kX19tZXNzYWdlX2NvbnRhaW5lcl9sZWZ0XCI+JyArIG1lc3NhZ2UgKyAnPC9kaXY+JyApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0aWYgKCAgICggaXNfc2hvd19tZXNzYWdlICkgICYmICAoIHBhcnNlSW50KCBwYXJhbXNbICdkZWxheScgXSApID4gMCApICAgKXtcclxuXHRcdHZhciBjbG9zZWRfdGltZXIgPSBzZXRUaW1lb3V0KCBmdW5jdGlvbiAoKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRqUXVlcnkoICcjJyArIHVuaXF1ZV9kaXZfaWQgKS5mYWRlT3V0KCAxNTAwICk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSAsIHBhcnNlSW50KCBwYXJhbXNbICdkZWxheScgXSApICAgKTtcclxuXHJcblx0XHR2YXIgY2xvc2VkX3RpbWVyMiA9IHNldFRpbWVvdXQoIGZ1bmN0aW9uICgpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0alF1ZXJ5KCAnIycgKyB1bmlxdWVfZGl2X2lkICkudHJpZ2dlciggJ2hpZGUnICk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSwgKCBwYXJzZUludCggcGFyYW1zWyAnZGVsYXknIF0gKSArIDE1MDEgKSApO1xyXG5cdH1cclxuXHJcblx0Ly8gQ2hlY2sgIGlmIHNob3dlZCBtZXNzYWdlIGluIHNvbWUgaGlkZGVuIHBhcmVudCBzZWN0aW9uIGFuZCBzaG93IGl0LiBCdXQgaXQgbXVzdCAgYmUgbG93ZXIgdGhhbiAnLndwYmNfY29udGFpbmVyJ1xyXG5cdHZhciBwYXJlbnRfZWxzID0galF1ZXJ5KCAnIycgKyB1bmlxdWVfZGl2X2lkICkucGFyZW50cygpLm1hcCggZnVuY3Rpb24gKCl7XHJcblx0XHRpZiAoICghalF1ZXJ5KCB0aGlzICkuaXMoICd2aXNpYmxlJyApKSAmJiAoalF1ZXJ5KCAnLndwYmNfY29udGFpbmVyJyApLmhhcyggdGhpcyApKSApe1xyXG5cdFx0XHRqUXVlcnkoIHRoaXMgKS5zaG93KCk7XHJcblx0XHR9XHJcblx0fSApO1xyXG5cclxuXHRpZiAoIHBhcmFtc1sgJ2lzX3Njcm9sbCcgXSApe1xyXG5cdFx0d3BiY19kb19zY3JvbGwoICcjJyArIHVuaXF1ZV9kaXZfaWQgKyAnX3Njcm9sbCcgKTtcclxuXHR9XHJcblxyXG5cdHJldHVybiB1bmlxdWVfZGl2X2lkO1xyXG59XHJcblxyXG5cclxuXHQvKipcclxuXHQgKiBFcnJvciBtZXNzYWdlLiBcdFByZXNldCBvZiBwYXJhbWV0ZXJzIGZvciByZWFsIG1lc3NhZ2UgZnVuY3Rpb24uXHJcblx0ICpcclxuXHQgKiBAcGFyYW0gZWxcdFx0LSBhbnkgalF1ZXJ5IG5vZGUgZGVmaW5pdGlvblxyXG5cdCAqIEBwYXJhbSBtZXNzYWdlXHQtIE1lc3NhZ2UgSFRNTFxyXG5cdCAqIEByZXR1cm5zIHN0cmluZyAgLSBIVE1MIElEXHRcdG9yIDAgaWYgbm90IHNob3dpbmcgZHVyaW5nIHRoaXMgdGltZS5cclxuXHQgKi9cclxuXHRmdW5jdGlvbiB3cGJjX2Zyb250X2VuZF9fc2hvd19tZXNzYWdlX19lcnJvcigganFfbm9kZSwgbWVzc2FnZSwgY29udGVudF9tb2RlICl7XG5cblx0XHRjb250ZW50X21vZGUgPSAoICd1bmRlZmluZWQnID09PSB0eXBlb2YgY29udGVudF9tb2RlICkgPyAnaHRtbCcgOiBjb250ZW50X21vZGU7XG5cclxuXHRcdHZhciBub3RpY2VfbWVzc2FnZV9pZCA9IHdwYmNfZnJvbnRfZW5kX19zaG93X21lc3NhZ2UoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWVzc2FnZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQndHlwZScgICAgICAgICAgICAgICA6ICdlcnJvcicsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnZGVsYXknICAgICAgICAgICAgICA6IDEwMDAwLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdpZl92aXNpYmxlX25vdF9zaG93JzogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J2NvbnRlbnRfbW9kZScgICAgICAgOiBjb250ZW50X21vZGUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3Nob3dfaGVyZScgICAgICAgICAgOiB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnd2hlcmUnICA6ICdyaWdodCcsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnanFfbm9kZSc6IGpxX25vZGVcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICB9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdHJldHVybiBub3RpY2VfbWVzc2FnZV9pZDtcclxuXHR9XHJcblxyXG5cclxuXHQvKipcclxuXHQgKiBFcnJvciBtZXNzYWdlIFVOREVSIGVsZW1lbnQuIFx0UHJlc2V0IG9mIHBhcmFtZXRlcnMgZm9yIHJlYWwgbWVzc2FnZSBmdW5jdGlvbi5cclxuXHQgKlxyXG5cdCAqIEBwYXJhbSBlbFx0XHQtIGFueSBqUXVlcnkgbm9kZSBkZWZpbml0aW9uXHJcblx0ICogQHBhcmFtIG1lc3NhZ2VcdC0gTWVzc2FnZSBIVE1MXHJcblx0ICogQHJldHVybnMgc3RyaW5nICAtIEhUTUwgSURcdFx0b3IgMCBpZiBub3Qgc2hvd2luZyBkdXJpbmcgdGhpcyB0aW1lLlxyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIHdwYmNfZnJvbnRfZW5kX19zaG93X21lc3NhZ2VfX2Vycm9yX3VuZGVyX2VsZW1lbnQoIGpxX25vZGUsIG1lc3NhZ2UsIG1lc3NhZ2VfZGVsYXksIGNvbnRlbnRfbW9kZSApe1xuXHJcblx0XHRpZiAoICd1bmRlZmluZWQnID09PSB0eXBlb2YgKG1lc3NhZ2VfZGVsYXkpICl7XG5cdFx0XHRtZXNzYWdlX2RlbGF5ID0gMFxuXHRcdH1cblx0XHRjb250ZW50X21vZGUgPSAoICd1bmRlZmluZWQnID09PSB0eXBlb2YgY29udGVudF9tb2RlICkgPyAnaHRtbCcgOiBjb250ZW50X21vZGU7XG5cclxuXHRcdHZhciBub3RpY2VfbWVzc2FnZV9pZCA9IHdwYmNfZnJvbnRfZW5kX19zaG93X21lc3NhZ2UoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWVzc2FnZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQndHlwZScgICAgICAgICAgICAgICA6ICdlcnJvcicsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnZGVsYXknICAgICAgICAgICAgICA6IG1lc3NhZ2VfZGVsYXksXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J2lmX3Zpc2libGVfbm90X3Nob3cnOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnY29udGVudF9tb2RlJyAgICAgICA6IGNvbnRlbnRfbW9kZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnc2hvd19oZXJlJyAgICAgICAgICA6IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCd3aGVyZScgIDogJ2FmdGVyJyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdqcV9ub2RlJzoganFfbm9kZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgIH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0cmV0dXJuIG5vdGljZV9tZXNzYWdlX2lkO1xyXG5cdH1cclxuXHJcblxyXG5cdC8qKlxyXG5cdCAqIEVycm9yIG1lc3NhZ2UgVU5ERVIgZWxlbWVudC4gXHRQcmVzZXQgb2YgcGFyYW1ldGVycyBmb3IgcmVhbCBtZXNzYWdlIGZ1bmN0aW9uLlxyXG5cdCAqXHJcblx0ICogQHBhcmFtIGVsXHRcdC0gYW55IGpRdWVyeSBub2RlIGRlZmluaXRpb25cclxuXHQgKiBAcGFyYW0gbWVzc2FnZVx0LSBNZXNzYWdlIEhUTUxcclxuXHQgKiBAcmV0dXJucyBzdHJpbmcgIC0gSFRNTCBJRFx0XHRvciAwIGlmIG5vdCBzaG93aW5nIGR1cmluZyB0aGlzIHRpbWUuXHJcblx0ICovXHJcblx0ZnVuY3Rpb24gd3BiY19mcm9udF9lbmRfX3Nob3dfbWVzc2FnZV9fZXJyb3JfYWJvdmVfZWxlbWVudCgganFfbm9kZSwgbWVzc2FnZSwgbWVzc2FnZV9kZWxheSwgY29udGVudF9tb2RlICl7XG5cclxuXHRcdGlmICggJ3VuZGVmaW5lZCcgPT09IHR5cGVvZiAobWVzc2FnZV9kZWxheSkgKXtcblx0XHRcdG1lc3NhZ2VfZGVsYXkgPSAxMDAwMFxuXHRcdH1cblx0XHRjb250ZW50X21vZGUgPSAoICd1bmRlZmluZWQnID09PSB0eXBlb2YgY29udGVudF9tb2RlICkgPyAnaHRtbCcgOiBjb250ZW50X21vZGU7XG5cclxuXHRcdHZhciBub3RpY2VfbWVzc2FnZV9pZCA9IHdwYmNfZnJvbnRfZW5kX19zaG93X21lc3NhZ2UoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWVzc2FnZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQndHlwZScgICAgICAgICAgICAgICA6ICdlcnJvcicsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnZGVsYXknICAgICAgICAgICAgICA6IG1lc3NhZ2VfZGVsYXksXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J2lmX3Zpc2libGVfbm90X3Nob3cnOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnY29udGVudF9tb2RlJyAgICAgICA6IGNvbnRlbnRfbW9kZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnc2hvd19oZXJlJyAgICAgICAgICA6IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCd3aGVyZScgIDogJ2JlZm9yZScsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnanFfbm9kZSc6IGpxX25vZGVcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICB9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdHJldHVybiBub3RpY2VfbWVzc2FnZV9pZDtcclxuXHR9XHJcblxyXG5cclxuXHQvKipcclxuXHQgKiBXYXJuaW5nIG1lc3NhZ2UuIFx0UHJlc2V0IG9mIHBhcmFtZXRlcnMgZm9yIHJlYWwgbWVzc2FnZSBmdW5jdGlvbi5cclxuXHQgKlxyXG5cdCAqIEBwYXJhbSBlbFx0XHQtIGFueSBqUXVlcnkgbm9kZSBkZWZpbml0aW9uXHJcblx0ICogQHBhcmFtIG1lc3NhZ2VcdC0gTWVzc2FnZSBIVE1MXHJcblx0ICogQHJldHVybnMgc3RyaW5nICAtIEhUTUwgSURcdFx0b3IgMCBpZiBub3Qgc2hvd2luZyBkdXJpbmcgdGhpcyB0aW1lLlxyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIHdwYmNfZnJvbnRfZW5kX19zaG93X21lc3NhZ2VfX3dhcm5pbmcoIGpxX25vZGUsIG1lc3NhZ2UsIGNvbnRlbnRfbW9kZSApe1xuXG5cdFx0Y29udGVudF9tb2RlID0gKCAndW5kZWZpbmVkJyA9PT0gdHlwZW9mIGNvbnRlbnRfbW9kZSApID8gJ2h0bWwnIDogY29udGVudF9tb2RlO1xuXHJcblx0XHR2YXIgbm90aWNlX21lc3NhZ2VfaWQgPSB3cGJjX2Zyb250X2VuZF9fc2hvd19tZXNzYWdlKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2UsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3R5cGUnICAgICAgICAgICAgICAgOiAnd2FybmluZycsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnZGVsYXknICAgICAgICAgICAgICA6IDEwMDAwLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdpZl92aXNpYmxlX25vdF9zaG93JzogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J2NvbnRlbnRfbW9kZScgICAgICAgOiBjb250ZW50X21vZGUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3Nob3dfaGVyZScgICAgICAgICAgOiB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnd2hlcmUnICA6ICdyaWdodCcsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnanFfbm9kZSc6IGpxX25vZGVcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICB9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdHdwYmNfaGlnaGxpZ2h0X2Vycm9yX29uX2Zvcm1fZmllbGQoIGpxX25vZGUgKTtcclxuXHRcdHJldHVybiBub3RpY2VfbWVzc2FnZV9pZDtcclxuXHR9XHJcblxyXG5cclxuXHQvKipcclxuXHQgKiBXYXJuaW5nIG1lc3NhZ2UgVU5ERVIgZWxlbWVudC4gXHRQcmVzZXQgb2YgcGFyYW1ldGVycyBmb3IgcmVhbCBtZXNzYWdlIGZ1bmN0aW9uLlxyXG5cdCAqXHJcblx0ICogQHBhcmFtIGVsXHRcdC0gYW55IGpRdWVyeSBub2RlIGRlZmluaXRpb25cclxuXHQgKiBAcGFyYW0gbWVzc2FnZVx0LSBNZXNzYWdlIEhUTUxcclxuXHQgKiBAcmV0dXJucyBzdHJpbmcgIC0gSFRNTCBJRFx0XHRvciAwIGlmIG5vdCBzaG93aW5nIGR1cmluZyB0aGlzIHRpbWUuXHJcblx0ICovXHJcblx0ZnVuY3Rpb24gd3BiY19mcm9udF9lbmRfX3Nob3dfbWVzc2FnZV9fd2FybmluZ191bmRlcl9lbGVtZW50KCBqcV9ub2RlLCBtZXNzYWdlLCBjb250ZW50X21vZGUgKXtcblxuXHRcdGNvbnRlbnRfbW9kZSA9ICggJ3VuZGVmaW5lZCcgPT09IHR5cGVvZiBjb250ZW50X21vZGUgKSA/ICdodG1sJyA6IGNvbnRlbnRfbW9kZTtcblxyXG5cdFx0dmFyIG5vdGljZV9tZXNzYWdlX2lkID0gd3BiY19mcm9udF9lbmRfX3Nob3dfbWVzc2FnZShcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtZXNzYWdlLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCd0eXBlJyAgICAgICAgICAgICAgIDogJ3dhcm5pbmcnLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J2RlbGF5JyAgICAgICAgICAgICAgOiAxMDAwMCxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnaWZfdmlzaWJsZV9ub3Rfc2hvdyc6IHRydWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdjb250ZW50X21vZGUnICAgICAgIDogY29udGVudF9tb2RlLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdzaG93X2hlcmUnICAgICAgICAgIDoge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3doZXJlJyAgOiAnYWZ0ZXInLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J2pxX25vZGUnOiBqcV9ub2RlXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgfVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRyZXR1cm4gbm90aWNlX21lc3NhZ2VfaWQ7XHJcblx0fVxyXG5cclxuXHJcblx0LyoqXHJcblx0ICogV2FybmluZyBtZXNzYWdlIEFCT1ZFIGVsZW1lbnQuIFx0UHJlc2V0IG9mIHBhcmFtZXRlcnMgZm9yIHJlYWwgbWVzc2FnZSBmdW5jdGlvbi5cclxuXHQgKlxyXG5cdCAqIEBwYXJhbSBlbFx0XHQtIGFueSBqUXVlcnkgbm9kZSBkZWZpbml0aW9uXHJcblx0ICogQHBhcmFtIG1lc3NhZ2VcdC0gTWVzc2FnZSBIVE1MXHJcblx0ICogQHJldHVybnMgc3RyaW5nICAtIEhUTUwgSURcdFx0b3IgMCBpZiBub3Qgc2hvd2luZyBkdXJpbmcgdGhpcyB0aW1lLlxyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIHdwYmNfZnJvbnRfZW5kX19zaG93X21lc3NhZ2VfX3dhcm5pbmdfYWJvdmVfZWxlbWVudCgganFfbm9kZSwgbWVzc2FnZSwgY29udGVudF9tb2RlICl7XG5cblx0XHRjb250ZW50X21vZGUgPSAoICd1bmRlZmluZWQnID09PSB0eXBlb2YgY29udGVudF9tb2RlICkgPyAnaHRtbCcgOiBjb250ZW50X21vZGU7XG5cclxuXHRcdHZhciBub3RpY2VfbWVzc2FnZV9pZCA9IHdwYmNfZnJvbnRfZW5kX19zaG93X21lc3NhZ2UoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWVzc2FnZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQndHlwZScgICAgICAgICAgICAgICA6ICd3YXJuaW5nJyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdkZWxheScgICAgICAgICAgICAgIDogMTAwMDAsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J2lmX3Zpc2libGVfbm90X3Nob3cnOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnY29udGVudF9tb2RlJyAgICAgICA6IGNvbnRlbnRfbW9kZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnc2hvd19oZXJlJyAgICAgICAgICA6IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCd3aGVyZScgIDogJ2JlZm9yZScsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnanFfbm9kZSc6IGpxX25vZGVcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICB9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdHJldHVybiBub3RpY2VfbWVzc2FnZV9pZDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEhpZ2hsaWdodCBFcnJvciBpbiBzcGVjaWZpYyBmaWVsZFxyXG5cdCAqXHJcblx0ICogQHBhcmFtIGpxX25vZGVcdFx0XHRcdFx0c3RyaW5nIG9yIGpRdWVyeSBlbGVtZW50LCAgd2hlcmUgc2Nyb2xsICB0b1xyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIHdwYmNfaGlnaGxpZ2h0X2Vycm9yX29uX2Zvcm1fZmllbGQoIGpxX25vZGUgKXtcclxuXHJcblx0XHRpZiAoICFqUXVlcnkoIGpxX25vZGUgKS5sZW5ndGggKXtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCAhIGpRdWVyeSgganFfbm9kZSApLmlzKCAnOmlucHV0JyApICl7XHJcblx0XHRcdC8vIFNpdHVhdGlvbiB3aXRoICBjaGVja2JveGVzIG9yIHJhZGlvICBidXR0b25zXHJcblx0XHRcdHZhciBqcV9ub2RlX2FyciA9IGpRdWVyeSgganFfbm9kZSApLmZpbmQoICc6aW5wdXQnICk7XHJcblx0XHRcdGlmICggIWpxX25vZGVfYXJyLmxlbmd0aCApe1xyXG5cdFx0XHRcdHJldHVyblxyXG5cdFx0XHR9XHJcblx0XHRcdGpxX25vZGUgPSBqcV9ub2RlX2Fyci5nZXQoIDAgKTtcclxuXHRcdH1cclxuXHRcdHZhciBwYXJhbXMgPSB7fTtcclxuXHRcdHBhcmFtc1sgJ2RlbGF5JyBdID0gMTAwMDA7XHJcblxyXG5cdFx0aWYgKCAhalF1ZXJ5KCBqcV9ub2RlICkuaGFzQ2xhc3MoICd3cGJjX2Zvcm1fZmllbGRfZXJyb3InICkgKXtcclxuXHJcblx0XHRcdGpRdWVyeSgganFfbm9kZSApLmFkZENsYXNzKCAnd3BiY19mb3JtX2ZpZWxkX2Vycm9yJyApXHJcblxyXG5cdFx0XHRpZiAoIHBhcnNlSW50KCBwYXJhbXNbICdkZWxheScgXSApID4gMCApe1xyXG5cdFx0XHRcdHZhciBjbG9zZWRfdGltZXIgPSBzZXRUaW1lb3V0KCBmdW5jdGlvbiAoKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0IGpRdWVyeSgganFfbm9kZSApLnJlbW92ZUNsYXNzKCAnd3BiY19mb3JtX2ZpZWxkX2Vycm9yJyApO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICB9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICAsIHBhcnNlSW50KCBwYXJhbXNbICdkZWxheScgXSApXHJcblx0XHRcdFx0XHRcdFx0XHRcdCk7XHJcblxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuLyoqXHJcbiAqIFNjcm9sbCB0byBzcGVjaWZpYyBlbGVtZW50XHJcbiAqXHJcbiAqIEBwYXJhbSBqcV9ub2RlXHRcdFx0XHRcdHN0cmluZyBvciBqUXVlcnkgZWxlbWVudCwgIHdoZXJlIHNjcm9sbCAgdG9cclxuICogQHBhcmFtIGV4dHJhX3NoaWZ0X29mZnNldFx0XHRpbnQgc2hpZnQgb2Zmc2V0IGZyb20gIGpxX25vZGVcclxuICovXHJcbmZ1bmN0aW9uIHdwYmNfZG9fc2Nyb2xsKCBqcV9ub2RlICwgZXh0cmFfc2hpZnRfb2Zmc2V0ID0gMCApe1xyXG5cclxuXHRpZiAoICFqUXVlcnkoIGpxX25vZGUgKS5sZW5ndGggKXtcclxuXHRcdHJldHVybjtcclxuXHR9XHJcblx0dmFyIHRhcmdldE9mZnNldCA9IGpRdWVyeSgganFfbm9kZSApLm9mZnNldCgpLnRvcDtcclxuXHJcblx0aWYgKCB0YXJnZXRPZmZzZXQgPD0gMCApe1xyXG5cdFx0aWYgKCAwICE9IGpRdWVyeSgganFfbm9kZSApLm5leHRBbGwoICc6dmlzaWJsZScgKS5sZW5ndGggKXtcclxuXHRcdFx0dGFyZ2V0T2Zmc2V0ID0galF1ZXJ5KCBqcV9ub2RlICkubmV4dEFsbCggJzp2aXNpYmxlJyApLmZpcnN0KCkub2Zmc2V0KCkudG9wO1xyXG5cdFx0fSBlbHNlIGlmICggMCAhPSBqUXVlcnkoIGpxX25vZGUgKS5wYXJlbnQoKS5uZXh0QWxsKCAnOnZpc2libGUnICkubGVuZ3RoICl7XHJcblx0XHRcdHRhcmdldE9mZnNldCA9IGpRdWVyeSgganFfbm9kZSApLnBhcmVudCgpLm5leHRBbGwoICc6dmlzaWJsZScgKS5maXJzdCgpLm9mZnNldCgpLnRvcDtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGlmICggalF1ZXJ5KCAnI3dwYWRtaW5iYXInICkubGVuZ3RoID4gMCApe1xyXG5cdFx0dGFyZ2V0T2Zmc2V0ID0gdGFyZ2V0T2Zmc2V0IC0gNTAgLSA1MDtcclxuXHR9IGVsc2Uge1xyXG5cdFx0dGFyZ2V0T2Zmc2V0ID0gdGFyZ2V0T2Zmc2V0IC0gMjAgLSA1MDtcclxuXHR9XHJcblx0dGFyZ2V0T2Zmc2V0ICs9IGV4dHJhX3NoaWZ0X29mZnNldDtcclxuXHJcblx0Ly8gU2Nyb2xsIG9ubHkgIGlmIHdlIGRpZCBub3Qgc2Nyb2xsIGJlZm9yZVxyXG5cdGlmICggISBqUXVlcnkoICdodG1sLGJvZHknICkuaXMoICc6YW5pbWF0ZWQnICkgKXtcclxuXHRcdGpRdWVyeSggJ2h0bWwsYm9keScgKS5hbmltYXRlKCB7c2Nyb2xsVG9wOiB0YXJnZXRPZmZzZXR9LCA1MDAgKTtcclxuXHR9XHJcbn1cclxuXHJcbiIsIlxyXG4vLyBGaXhJbjogMTAuMi4wLjQuXHJcbi8qKlxyXG4gKiBEZWZpbmUgUG9wb3ZlcnMgZm9yIFRpbWVsaW5lcyBpbiBXUCBCb29raW5nIENhbGVuZGFyXHJcbiAqXHJcbiAqIEByZXR1cm5zIHtzdHJpbmd8Ym9vbGVhbn1cclxuICovXHJcbmZ1bmN0aW9uIHdwYmNfZGVmaW5lX3RpcHB5X3BvcG92ZXIoKXtcclxuXHRpZiAoICdmdW5jdGlvbicgIT09IHR5cGVvZiAod3BiY190aXBweSkgKXtcclxuXHRcdGNvbnNvbGUubG9nKCAnV1BCQyBFcnJvci4gd3BiY190aXBweSB3YXMgbm90IGRlZmluZWQuJyApO1xyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHR3cGJjX3RpcHB5KCAnLnBvcG92ZXJfYm90dG9tLnBvcG92ZXJfY2xpY2snLCB7XHJcblx0XHRjb250ZW50KCByZWZlcmVuY2UgKXtcclxuXHRcdFx0dmFyIHBvcG92ZXJfdGl0bGUgPSByZWZlcmVuY2UuZ2V0QXR0cmlidXRlKCAnZGF0YS1vcmlnaW5hbC10aXRsZScgKTtcclxuXHRcdFx0dmFyIHBvcG92ZXJfY29udGVudCA9IHJlZmVyZW5jZS5nZXRBdHRyaWJ1dGUoICdkYXRhLWNvbnRlbnQnICk7XHJcblx0XHRcdHJldHVybiAnPGRpdiBjbGFzcz1cInBvcG92ZXIgcG9wb3Zlcl90aXBweVwiPidcclxuXHRcdFx0XHQrICc8ZGl2IGNsYXNzPVwicG9wb3Zlci1jbG9zZVwiPjxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIiBvbmNsaWNrPVwiamF2YXNjcmlwdDp0aGlzLnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudC5fdGlwcHkuaGlkZSgpO1wiID4mdGltZXM7PC9hPjwvZGl2PidcclxuXHRcdFx0XHQrIHBvcG92ZXJfY29udGVudFxyXG5cdFx0XHRcdCsgJzwvZGl2Pic7XHJcblx0XHR9LFxyXG5cdFx0YWxsb3dIVE1MICAgICAgICA6IHRydWUsXHJcblx0XHR0cmlnZ2VyICAgICAgICAgIDogJ21hbnVhbCcsXHJcblx0XHRpbnRlcmFjdGl2ZSAgICAgIDogdHJ1ZSxcclxuXHRcdGhpZGVPbkNsaWNrICAgICAgOiBmYWxzZSxcclxuXHRcdGludGVyYWN0aXZlQm9yZGVyOiAxMCxcclxuXHRcdG1heFdpZHRoICAgICAgICAgOiA1NTAsXHJcblx0XHR0aGVtZSAgICAgICAgICAgIDogJ3dwYmMtdGlwcHktcG9wb3ZlcicsXHJcblx0XHRwbGFjZW1lbnQgICAgICAgIDogJ2JvdHRvbS1zdGFydCcsXHJcblx0XHR0b3VjaCAgICAgICAgICAgIDogWydob2xkJywgNTAwXSxcclxuXHR9ICk7XHJcblx0alF1ZXJ5KCAnLnBvcG92ZXJfYm90dG9tLnBvcG92ZXJfY2xpY2snICkub24oICdjbGljaycsIGZ1bmN0aW9uICgpe1xyXG5cdFx0aWYgKCB0aGlzLl90aXBweS5zdGF0ZS5pc1Zpc2libGUgKXtcclxuXHRcdFx0dGhpcy5fdGlwcHkuaGlkZSgpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy5fdGlwcHkuc2hvdygpO1xyXG5cdFx0fVxyXG5cdH0gKTtcclxuXHR3cGJjX2RlZmluZV9oaWRlX3RpcHB5X29uX3Njcm9sbCgpO1xyXG59XHJcblxyXG5cclxuXHJcbmZ1bmN0aW9uIHdwYmNfZGVmaW5lX2hpZGVfdGlwcHlfb25fc2Nyb2xsKCl7XHJcblx0alF1ZXJ5KCAnLmZsZXhfdGxfX3Njcm9sbGluZ19zZWN0aW9uMiwuZmxleF90bF9fc2Nyb2xsaW5nX3NlY3Rpb25zJyApLm9uKCAnc2Nyb2xsJywgZnVuY3Rpb24gKCBldmVudCApe1xyXG5cdFx0aWYgKCAnZnVuY3Rpb24nID09PSB0eXBlb2YgKHdwYmNfdGlwcHkpICl7XHJcblx0XHRcdHdwYmNfdGlwcHkuaGlkZUFsbCgpO1xyXG5cdFx0fVxyXG5cdH0gKTtcclxufVxyXG4iLCIvKipcclxuICogV1BCQyBjYWxlbmRhciBsb2FkZXIgYm9vdHN0cmFwLlxyXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbiAqIC0gRmluZHMgZXZlcnkgLmNhbGVuZGFyX2xvYWRlcl9mcmFtZVtkYXRhLXdwYmMtcmlkXSBvbiB0aGUgcGFnZSAobm93IG9yIGxhdGVyKS5cclxuICogLSBGb3IgZWFjaCBsb2FkZXIgZWxlbWVudCwgd2FpdHMgYSBcImdyYWNlXCIgcGVyaW9kIChkYXRhLXdwYmMtZ3JhY2UsIGRlZmF1bHQgODAwMCBtcyk6XHJcbiAqICAgICAtIElmIHRoZSByZWFsIGNhbGVuZGFyIGFwcGVhcnM6IGRvIG5vdGhpbmcgKGxvYWRlciBuYXR1cmFsbHkgcmVwbGFjZWQpLlxyXG4gKiAgICAgLSBJZiBub3Q6IHNob3cgYSBoZWxwZnVsIG1lc3NhZ2UgKG1pc3NpbmcgalF1ZXJ5L193cGJjL2RhdGVwaWNrKSBvciBhIGR1cGxpY2F0ZSBub3RpY2UuXHJcbiAqIC0gV29ya3Mgd2l0aCBtdWx0aXBsZSBjYWxlbmRhcnMgYW5kIGV2ZW4gZHVwbGljYXRlIFJJRHMgb24gdGhlIHNhbWUgcGFnZS5cclxuICogLSBObyBpbmxpbmUgSlMgbmVlZGVkIGluIHRoZSBzaG9ydGNvZGUvdGVtcGxhdGUgb3V0cHV0LlxyXG4gKlxyXG4gKiBGaWxlOiAgLi4vaW5jbHVkZXMvX19qcy9jbGllbnQvY2FsL3dwYmNfY2FsX2xvYWRlci5qc1xyXG4gKlxyXG4gKiBAc2luY2UgICAgMTAuMTQuNVxyXG4gKiBAbW9kaWZpZWQgMjAyNS0wOS0wNyAxMjoyMVxyXG4gKiBAdmVyc2lvbiAgMS4wLjBcclxuICpcclxuICovXHJcbi8qKlxyXG4gKiBXUEJDIGNhbGVuZGFyIGxvYWRlciBib290c3RyYXAuXHJcbiAqIC0gQXV0by1kZXRlY3RzIC5jYWxlbmRhcl9sb2FkZXJfZnJhbWVbZGF0YS13cGJjLXJpZF0gYmxvY2tzLlxyXG4gKiAtIFdhaXRzIGEgXCJncmFjZVwiIHBlcmlvZCBwZXIgZWxlbWVudCBiZWZvcmUgc2hvd2luZyBhIGhlbHBmdWwgbWVzc2FnZVxyXG4gKiAgIGlmIHRoZSByZWFsIGNhbGVuZGFyIGhhc24ndCByZXBsYWNlZCB0aGUgbG9hZGVyLlxyXG4gKiAtIE11bHRpcGxlIGNhbGVuZGFycyBhbmQgZHVwbGljYXRlIFJJRHMgYXJlIGhhbmRsZWQuXHJcbiAqL1xyXG4oZnVuY3Rpb24gKHcsIGQpIHtcclxuXHQndXNlIHN0cmljdCc7XHJcblxyXG5cdC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdCAqIFNtYWxsIHV0aWxpdGllcyAoc25ha2VfY2FzZSlcclxuXHQgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcblx0LyoqIFRyYWNrIHByb2Nlc3NlZCBsb2FkZXIgZWxlbWVudHM7IGZhbGxiYWNrIHRvIGRhdGEgZmxhZyBpZiBXZWFrU2V0IG1pc3NpbmcuICovXHJcblx0dmFyIHByb2Nlc3NlZF9zZXQgPSB0eXBlb2YgV2Vha1NldCA9PT0gJ2Z1bmN0aW9uJyA/IG5ldyBXZWFrU2V0KCkgOiBudWxsO1xyXG5cclxuXHQvKiogUmV0dXJuIGZpcnN0IG1hdGNoIGluc2lkZSBvcHRpb25hbCByb290LiAqL1xyXG5cdGZ1bmN0aW9uIHF1ZXJ5X29uZShzZWxlY3Rvciwgcm9vdCkge1xyXG5cdFx0cmV0dXJuIChyb290IHx8IGQpLnF1ZXJ5U2VsZWN0b3IoIHNlbGVjdG9yICk7XHJcblx0fVxyXG5cclxuXHQvKiogUmV0dXJuIE5vZGVMaXN0IG9mIG1hdGNoZXMgaW5zaWRlIG9wdGlvbmFsIHJvb3QuICovXHJcblx0ZnVuY3Rpb24gcXVlcnlfYWxsKHNlbGVjdG9yLCByb290KSB7XHJcblx0XHRyZXR1cm4gKHJvb3QgfHwgZCkucXVlcnlTZWxlY3RvckFsbCggc2VsZWN0b3IgKTtcclxuXHR9XHJcblxyXG5cdC8qKiBSdW4gYSBjYWxsYmFjayB3aGVuIERPTSBpcyByZWFkeS4gKi9cclxuXHRmdW5jdGlvbiBvbl9yZWFkeShmbikge1xyXG5cdFx0aWYgKCBkLnJlYWR5U3RhdGUgPT09ICdsb2FkaW5nJyApIHtcclxuXHRcdFx0ZC5hZGRFdmVudExpc3RlbmVyKCAnRE9NQ29udGVudExvYWRlZCcsIGZuICk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRmbigpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqIENsZWFyIGludGVydmFsIHNhZmVseS4gKi9cclxuXHRmdW5jdGlvbiBzYWZlX2NsZWFyKGludGVydmFsX2lkKSB7XHJcblx0XHR0cnkge1xyXG5cdFx0XHR3LmNsZWFySW50ZXJ2YWwoIGludGVydmFsX2lkICk7XHJcblx0XHR9IGNhdGNoICggZSApIHtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKiBNYXJrIGVsZW1lbnQgcHJvY2Vzc2VkIChXZWFrU2V0IG9yIGRhdGEgYXR0cmlidXRlKS4gKi9cclxuXHRmdW5jdGlvbiBtYXJrX3Byb2Nlc3NlZChlbCkge1xyXG5cdFx0aWYgKCBwcm9jZXNzZWRfc2V0ICkge1xyXG5cdFx0XHRwcm9jZXNzZWRfc2V0LmFkZCggZWwgKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0ZWwuZGF0YXNldC53cGJjUHJvY2Vzc2VkID0gJzEnO1xyXG5cdFx0XHR9IGNhdGNoICggZSApIHtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqIENoZWNrIGlmIGVsZW1lbnQgd2FzIHByb2Nlc3NlZC4gKi9cclxuXHRmdW5jdGlvbiBpc19wcm9jZXNzZWQoZWwpIHtcclxuXHRcdHJldHVybiBwcm9jZXNzZWRfc2V0ID8gcHJvY2Vzc2VkX3NldC5oYXMoIGVsICkgOiAoZWwgJiYgZWwuZGF0YXNldCAmJiBlbC5kYXRhc2V0LndwYmNQcm9jZXNzZWQgPT09ICcxJyk7XHJcblx0fVxyXG5cclxuXHQvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblx0ICogTWVzc2FnZXNcblx0ICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cblx0LyoqXG5cdCAqIEJ1aWxkIHZpc2l0b3IgbWVzc2FnZXMgZm9yIGEgcmVzb3VyY2UsIHVzaW5nIGxvY2FsaXplZCBGb3JtIE1lc3NhZ2VzIHdoZW4gYXZhaWxhYmxlLlxuXHQgKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IHJpZFxuXHQgKiBAcmV0dXJuIHt7ZHVwbGljYXRlOnN0cmluZyxpbml0X2ZhaWxlZDpzdHJpbmcsc3VwcG9ydDpzdHJpbmcsbGliX2pxOnN0cmluZyxsaWJfZHA6c3RyaW5nLGxpYl93cGJjOnN0cmluZ319XG5cdCAqL1xuXHRmdW5jdGlvbiBnZXRfbWVzc2FnZXMocmlkKSB7XG5cdFx0dmFyIHJpZF9pbnQgICAgICAgICAgPSBwYXJzZUludCggcmlkLCAxMCApO1xuXHRcdHZhciBkdXBsaWNhdGVfbWVzc2FnZSA9XG5cdFx0XHQnTW9yZSB0aGFuIG9uZSBjYWxlbmRhciBvciBib29raW5nIGZvcm0gZm9yIEJvb2tpbmcgUmVzb3VyY2UgSUQge3Jlc291cmNlX2lkfSBpcyBwcmVzZW50IG9uIHRoaXMgcGFnZS4gJyArXG5cdFx0XHQnQSBoaWRkZW4gY29weSBzdGlsbCBjb25mbGljdHMgd2l0aCB0aGUgdmlzaWJsZSBmb3JtIGFuZCBjYW4gcHJldmVudCBib29raW5nIHN1Ym1pc3Npb24uICcgK1xuXHRcdFx0J1RoZSBzaXRlIGFkbWluaXN0cmF0b3IgbXVzdCBrZWVwIG9ubHkgb25lIGNhbGVuZGFyIG9yIGZvcm0gZm9yIHRoaXMgQm9va2luZyBSZXNvdXJjZS4gJyArXG5cdFx0XHQnQWZ0ZXIgdGhlIHBhZ2UgaXMgY29ycmVjdGVkLCByZWxvYWQgaXQgYW5kIHRyeSBhZ2Fpbi4nO1xuXG5cdFx0aWYgKCB3Ll93cGJjICYmIHR5cGVvZiB3Ll93cGJjLmdldF9tZXNzYWdlID09PSAnZnVuY3Rpb24nICkge1xuXHRcdFx0ZHVwbGljYXRlX21lc3NhZ2UgPSB3Ll93cGJjLmdldF9tZXNzYWdlKCAnbWVzc2FnZV9kdXBsaWNhdGVfYm9va2luZ19yZXNvdXJjZV9vbl9wYWdlJyApIHx8IGR1cGxpY2F0ZV9tZXNzYWdlO1xuXHRcdH1cblx0XHRkdXBsaWNhdGVfbWVzc2FnZSA9IFN0cmluZyggZHVwbGljYXRlX21lc3NhZ2UgKS5yZXBsYWNlKCAvXFx7cmVzb3VyY2VfaWRcXH0vZywgU3RyaW5nKCByaWRfaW50ICkgKTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRkdXBsaWNhdGUgIDogZHVwbGljYXRlX21lc3NhZ2UsXG5cdFx0XHRpbml0X2ZhaWxlZDpcclxuXHRcdFx0XHQnVGhlIGNhbGVuZGFyIGNvdWxkIG5vdCBiZSBpbml0aWFsaXplZCBvbiB0aGlzIHBhZ2UuJyArICdcXG4nICtcclxuXHRcdFx0XHQnUGxlYXNlIGNoZWNrIHlvdXIgYnJvd3NlciBjb25zb2xlIGZvciBKYXZhU2NyaXB0IGVycm9ycyBhbmQgY29uZmxpY3RzIHdpdGggb3RoZXIgc2NyaXB0cy9wbHVnaW5zLicsXHJcblx0XHRcdHN1cHBvcnQgICAgOiAnJywgLyogJ0NvbnRhY3Qgc3VwcG9ydEB3cGJvb2tpbmdjYWxlbmRhci5jb20gaWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucy4nLCAqL1xyXG5cdFx0XHRsaWJfanEgICAgIDpcclxuXHRcdFx0XHQnSXQgYXBwZWFycyB0aGF0IHRoZSBcImpRdWVyeVwiIGxpYnJhcnkgaXMgbm90IGxvYWRpbmcgY29ycmVjdGx5LicgKyAnXFxuJyArXHJcblx0XHRcdFx0J0ZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgcmVmZXIgdG8gdGhpcyBwYWdlOiBodHRwczovL3dwYm9va2luZ2NhbGVuZGFyLmNvbS9mYXEvJyxcclxuXHRcdFx0bGliX2RwICAgICA6XHJcblx0XHRcdFx0J0l0IGFwcGVhcnMgdGhhdCB0aGUgXCJqUXVlcnkuZGF0ZXBpY2tcIiBsaWJyYXJ5IGlzIG5vdCBsb2FkaW5nIGNvcnJlY3RseS4nICsgJ1xcbicgK1xyXG5cdFx0XHRcdCdGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHJlZmVyIHRvIHRoaXMgcGFnZTogaHR0cHM6Ly93cGJvb2tpbmdjYWxlbmRhci5jb20vZmFxLycsXHJcblx0XHRcdGxpYl93cGJjICAgOlxyXG5cdFx0XHRcdCdJdCBhcHBlYXJzIHRoYXQgdGhlIFwiX3dwYmNcIiBsaWJyYXJ5IGlzIG5vdCBsb2FkaW5nIGNvcnJlY3RseS4nICsgJ1xcbicgK1xyXG5cdFx0XHRcdCdQbGVhc2UgZW5hYmxlIHRoZSBsb2FkaW5nIG9mIEpTL0NTUyBmaWxlcyBmb3IgdGhpcyBwYWdlIG9uIHRoZSBcIldQIEJvb2tpbmcgQ2FsZW5kYXJcIiAtIFwiU2V0dGluZ3MgR2VuZXJhbFwiIC0gXCJBZHZhbmNlZFwiIHBhZ2UnICsgJ1xcbicgK1xyXG5cdFx0XHRcdCdGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHJlZmVyIHRvIHRoaXMgcGFnZTogaHR0cHM6Ly93cGJvb2tpbmdjYWxlbmRhci5jb20vZmFxLydcclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHQvKipcblx0ICogRXNjYXBlIGEgcGxhaW4tdGV4dCBsb2FkZXIgbWVzc2FnZSBiZWZvcmUgaW5zZXJ0aW5nIGl0cyB3cmFwcGVyIG1hcmt1cC5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHBsYWluX3RleHQgVmlzaXRvci1mYWNpbmcgcGxhaW4gdGV4dC5cblx0ICogQHJldHVybiB7c3RyaW5nfSBIVE1MLXNhZmUgdGV4dC5cblx0ICovXG5cdGZ1bmN0aW9uIGVzY2FwZV9odG1sKHBsYWluX3RleHQpIHtcblx0XHRyZXR1cm4gU3RyaW5nKCBwbGFpbl90ZXh0IHx8ICcnIClcblx0XHRcdC5yZXBsYWNlKCAvJi9nLCAnJmFtcDsnIClcblx0XHRcdC5yZXBsYWNlKCAvPC9nLCAnJmx0OycgKVxuXHRcdFx0LnJlcGxhY2UoIC8+L2csICcmZ3Q7JyApXG5cdFx0XHQucmVwbGFjZSggL1wiL2csICcmcXVvdDsnIClcblx0XHRcdC5yZXBsYWNlKCAvJy9nLCAnJiMwMzk7JyApO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdyYXAgcGxhaW4gdGV4dCAod2l0aCBuZXdsaW5lcykgaW4gYSBzbWFsbCBIVE1MIGNvbnRhaW5lci5cblx0ICogQHBhcmFtIHtzdHJpbmd9IG1zZ1xuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRmdW5jdGlvbiB3cmFwX2h0bWwobXNnKSB7XG5cdFx0cmV0dXJuICc8ZGl2IHN0eWxlPVwiZm9udC1zaXplOjEzcHg7bWFyZ2luOjEwcHg7XCI+JyArIGVzY2FwZV9odG1sKCBtc2cgKS5yZXBsYWNlKCAvXFxuL2csICc8YnI+JyApICsgJzwvZGl2Pic7XG5cdH1cblxyXG5cdC8qKiBMaWJyYXJ5IHByZXNlbmNlIGNoZWNrcyAoZmFzdCAmIGNoZWFwKS4gKi9cclxuXHRmdW5jdGlvbiBoYXNfanEoKSB7XHJcblx0XHRyZXR1cm4gISEody5qUXVlcnkgJiYgalF1ZXJ5LmZuICYmIHR5cGVvZiBqUXVlcnkuZm4ub24gPT09ICdmdW5jdGlvbicpO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gaGFzX2RwKCkge1xyXG5cdFx0cmV0dXJuICEhKHcualF1ZXJ5ICYmIGpRdWVyeS5kYXRlcGljayk7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBoYXNfd3BiYygpIHtcclxuXHRcdHJldHVybiAhISh3Ll93cGJjICYmIHR5cGVvZiB3Ll93cGJjLnNldF9vdGhlcl9wYXJhbSA9PT0gJ2Z1bmN0aW9uJyk7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBub3JtYWxpemVfcmlkKHJpZCkge1xyXG5cdFx0dmFyIG4gPSBwYXJzZUludCggcmlkLCAxMCApO1xyXG5cdFx0cmV0dXJuIChuID4gMCkgPyBTdHJpbmcoIG4gKSA6ICcnO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gZ2V0X3JpZF9jb3VudHMocmlkKSB7XHJcblx0XHR2YXIgciA9IG5vcm1hbGl6ZV9yaWQoIHJpZCApO1xyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0cmlkICAgICAgIDogcixcclxuXHRcdFx0bG9hZGVycyAgIDogciA/IHF1ZXJ5X2FsbCggJy5jYWxlbmRhcl9sb2FkZXJfZnJhbWVbZGF0YS13cGJjLXJpZD1cIicgKyByICsgJ1wiXScgKS5sZW5ndGggOiAwLFxyXG5cdFx0XHRjb250YWluZXJzOiByID8gcXVlcnlfYWxsKCAnI2NhbGVuZGFyX2Jvb2tpbmcnICsgciApLmxlbmd0aCA6IDBcclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBpc19kdXBsaWNhdGVfcmlkKHJpZCkge1xyXG5cdFx0dmFyIGMgPSBnZXRfcmlkX2NvdW50cyggcmlkICk7XHJcblx0XHRyZXR1cm4gKGMubG9hZGVycyA+IDEpIHx8IChjLmNvbnRhaW5lcnMgPiAxKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIERldGVybWluZSBpZiB0aGUgbG9hZGVyIGhhcyBiZWVuIHJlcGxhY2VkIGJ5IHRoZSByZWFsIGNhbGVuZGFyLlxyXG5cdCAqXHJcblx0ICogQHBhcmFtIHtFbGVtZW50fSBlbCAgICAgICBMb2FkZXIgZWxlbWVudFxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSByaWQgICAgICAgUmVzb3VyY2UgSURcclxuXHQgKiBAcGFyYW0ge0VsZW1lbnR8bnVsbH0gY29udGFpbmVyIE9wdGlvbmFsICNjYWxlbmRhcl9ib29raW5ne3JpZH0gZWxlbWVudFxyXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XHJcblx0ICovXHJcblx0ZnVuY3Rpb24gaXNfcmVwbGFjZWQoZWwsIHJpZCwgY29udGFpbmVyKSB7XHJcblx0XHR2YXIgbG9hZGVyX3N0aWxsX2luX2RvbSA9IGQuYm9keS5jb250YWlucyggZWwgKTtcclxuXHRcdHZhciBjYWxlbmRhcl9leGlzdHMgICAgID0gISFxdWVyeV9vbmUoICcud3BiY19jYWxlbmRhcl9pZF8nICsgcmlkLCBjb250YWluZXIgfHwgZCApO1xyXG5cdFx0cmV0dXJuICghbG9hZGVyX3N0aWxsX2luX2RvbSkgfHwgY2FsZW5kYXJfZXhpc3RzO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogU3RhcnQgd2F0Y2hlciBmb3IgYSBzaW5nbGUgbG9hZGVyIGVsZW1lbnQuXHJcblx0ICogLSBQb2xscyBhbmQgb2JzZXJ2ZXMgdGhlIGNhbGVuZGFyIGNvbnRhaW5lci5cclxuXHQgKiAtIEFmdGVyIGdyYWNlLCBpbmplY3RzIGEgc3VpdGFibGUgbWVzc2FnZSBpZiBub3QgcmVwbGFjZWQuXHJcblx0ICpcclxuXHQgKiBAcGFyYW0ge0VsZW1lbnR9IGVsXHJcblx0ICovXHJcblx0ZnVuY3Rpb24gc3RhcnRfZm9yKGVsKSB7XHJcblx0XHRpZiAoICEgZWwgfHwgaXNfcHJvY2Vzc2VkKCBlbCApICkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRtYXJrX3Byb2Nlc3NlZCggZWwgKTtcclxuXHJcblx0XHR2YXIgcmlkID0gZWwuZGF0YXNldC53cGJjUmlkO1xyXG5cdFx0aWYgKCAhIHJpZCApIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdHZhciBncmFjZV9tcyA9IHBhcnNlSW50KCBlbC5kYXRhc2V0LndwYmNHcmFjZSB8fCAnODAwMCcsIDEwICk7XHJcblx0XHRpZiAoICEgKGdyYWNlX21zID4gMCkgKSB7XHJcblx0XHRcdGdyYWNlX21zID0gODAwMDtcclxuXHRcdH1cclxuXHJcblx0XHR2YXIgY29udGFpbmVyX2lkID0gJ2NhbGVuZGFyX2Jvb2tpbmcnICsgcmlkO1xyXG5cdFx0dmFyIGNvbnRhaW5lciAgICA9IGQuZ2V0RWxlbWVudEJ5SWQoIGNvbnRhaW5lcl9pZCApO1xyXG5cdFx0dmFyIHRleHRfZWwgICAgICA9IHF1ZXJ5X29uZSggJy5jYWxlbmRhcl9sb2FkZXJfdGV4dCcsIGVsICk7XHJcblxyXG5cdFx0ZnVuY3Rpb24gcmVwbGFjZWRfbm93KCkge1xyXG5cdFx0XHRyZXR1cm4gaXNfcmVwbGFjZWQoIGVsLCByaWQsIGNvbnRhaW5lciApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEFscmVhZHkgcmVwbGFjZWQgLT4gbm90aGluZyB0byBkby5cclxuXHRcdGlmICggcmVwbGFjZWRfbm93KCkgKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHQvLyAxKSBDaGVhcCBwb2xsaW5nLlxyXG5cdFx0dmFyIHBvbGxfaWQgPSB3LnNldEludGVydmFsKCBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdGlmICggcmVwbGFjZWRfbm93KCkgKSB7XHJcblx0XHRcdFx0c2FmZV9jbGVhciggcG9sbF9pZCApO1xyXG5cdFx0XHRcdGlmICggb2JzZXJ2ZXIgKSB7XHJcblx0XHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0XHRvYnNlcnZlci5kaXNjb25uZWN0KCk7XHJcblx0XHRcdFx0XHR9IGNhdGNoICggZSApIHtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0sIDI1MCApO1xyXG5cclxuXHRcdC8vIDIpIE11dGF0aW9uT2JzZXJ2ZXIgZm9yIGZhc3RlciByZWFjdGlvbi5cclxuXHRcdHZhciBvYnNlcnZlciA9IG51bGw7XHJcblx0XHRpZiAoIGNvbnRhaW5lciAmJiAnTXV0YXRpb25PYnNlcnZlcicgaW4gdyApIHtcclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKCBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdFx0XHRpZiAoIHJlcGxhY2VkX25vdygpICkge1xyXG5cdFx0XHRcdFx0XHRzYWZlX2NsZWFyKCBwb2xsX2lkICk7XHJcblx0XHRcdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHRcdFx0b2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xyXG5cdFx0XHRcdFx0XHR9IGNhdGNoICggZSApIHtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0gKTtcclxuXHRcdFx0XHRvYnNlcnZlci5vYnNlcnZlKCBjb250YWluZXIsIHsgY2hpbGRMaXN0OiB0cnVlLCBzdWJ0cmVlOiB0cnVlIH0gKTtcclxuXHRcdFx0fSBjYXRjaCAoIGUgKSB7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyAzKSBGaW5hbCBkZWNpc2lvbiBhZnRlciBncmFjZSBwZXJpb2QuXHJcblx0XHR3LnNldFRpbWVvdXQoIGZ1bmN0aW9uIGZpbmFsaXplX2FmdGVyX2dyYWNlKCkge1xyXG5cdFx0XHRpZiAoIHJlcGxhY2VkX25vdygpICkge1xyXG5cdFx0XHRcdHNhZmVfY2xlYXIoIHBvbGxfaWQgKTtcclxuXHRcdFx0XHRpZiAoIG9ic2VydmVyICkge1xyXG5cdFx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdFx0b2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xyXG5cdFx0XHRcdFx0fSBjYXRjaCAoIGUgKSB7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0dmFyIE0gPSBnZXRfbWVzc2FnZXMoIHJpZCApO1xyXG5cdFx0XHR2YXIgbXNnO1xyXG5cdFx0XHRpZiAoICEgaGFzX2pxKCkgKSB7XHJcblx0XHRcdFx0bXNnID0gTS5saWJfanE7XHJcblx0XHRcdH0gZWxzZSBpZiAoICEgaGFzX3dwYmMoKSApIHtcclxuXHRcdFx0XHRtc2cgPSBNLmxpYl93cGJjO1xyXG5cdFx0XHR9IGVsc2UgaWYgKCAhIGhhc19kcCgpICkge1xyXG5cdFx0XHRcdG1zZyA9IE0ubGliX2RwO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdC8vIExpYnJhcmllcyBhcmUgcHJlc2VudCwgYnV0IGxvYWRlciB3YXNuJ3QgcmVwbGFjZWQgLT4gZGVjaWRlIHdoYXQgaXMgbW9zdCBsaWtlbHkuXHJcblx0XHRcdFx0aWYgKCBpc19kdXBsaWNhdGVfcmlkKCByaWQgKSApIHtcclxuXHRcdFx0XHRcdG1zZyA9IE0uZHVwbGljYXRlICsgJ1xcblxcbicgKyBNLnN1cHBvcnQ7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdG1zZyA9IE0uaW5pdF9mYWlsZWQgKyAnXFxuXFxuJyArIE0uc3VwcG9ydDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0aWYgKCB0ZXh0X2VsICkge1xyXG5cdFx0XHRcdFx0dGV4dF9lbC5pbm5lckhUTUwgPSB3cmFwX2h0bWwoIG1zZyApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBjYXRjaCAoIGUgKSB7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHNhZmVfY2xlYXIoIHBvbGxfaWQgKTtcclxuXHRcdFx0aWYgKCBvYnNlcnZlciApIHtcclxuXHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0b2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xyXG5cdFx0XHRcdH0gY2F0Y2ggKCBlICkge1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSwgZ3JhY2VfbXMgKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEluaXRpYWxpemUgd2F0Y2hlcnMgZm9yIGxvYWRlciBlbGVtZW50cyBhbHJlYWR5IGluIHRoZSBET00uXHJcblx0ICovXHJcblx0ZnVuY3Rpb24gYm9vdHN0cmFwX2V4aXN0aW5nKCkge1xyXG5cdFx0cXVlcnlfYWxsKCAnLmNhbGVuZGFyX2xvYWRlcl9mcmFtZVtkYXRhLXdwYmMtcmlkXScgKS5mb3JFYWNoKCBzdGFydF9mb3IgKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIE9ic2VydmUgdGhlIGRvY3VtZW50IGZvciBhbnkgbmV3IGxvYWRlciBlbGVtZW50cyBpbnNlcnRlZCBsYXRlciAoQUpBWCwgYmxvY2sgcmVuZGVyKS5cclxuXHQgKi9cclxuXHRmdW5jdGlvbiBvYnNlcnZlX25ld19sb2FkZXJzKCkge1xyXG5cdFx0aWYgKCAhICgnTXV0YXRpb25PYnNlcnZlcicgaW4gdykgKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdHRyeSB7XHJcblx0XHRcdHZhciBkb2Nfb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlciggZnVuY3Rpb24gKG11dGF0aW9ucykge1xyXG5cdFx0XHRcdGZvciAoIHZhciBpID0gMDsgaSA8IG11dGF0aW9ucy5sZW5ndGg7IGkrKyApIHtcclxuXHRcdFx0XHRcdHZhciBub2RlcyA9IG11dGF0aW9uc1tpXS5hZGRlZE5vZGVzIHx8IFtdO1xyXG5cdFx0XHRcdFx0Zm9yICggdmFyIGogPSAwOyBqIDwgbm9kZXMubGVuZ3RoOyBqKysgKSB7XHJcblx0XHRcdFx0XHRcdHZhciBub2RlID0gbm9kZXNbal07XHJcblx0XHRcdFx0XHRcdGlmICggISBub2RlIHx8IG5vZGUubm9kZVR5cGUgIT09IDEgKSB7XHJcblx0XHRcdFx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0aWYgKCBub2RlLm1hdGNoZXMgJiYgbm9kZS5tYXRjaGVzKCAnLmNhbGVuZGFyX2xvYWRlcl9mcmFtZVtkYXRhLXdwYmMtcmlkXScgKSApIHtcclxuXHRcdFx0XHRcdFx0XHRzdGFydF9mb3IoIG5vZGUgKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRpZiAoIG5vZGUucXVlcnlTZWxlY3RvckFsbCApIHtcclxuXHRcdFx0XHRcdFx0XHR2YXIgaW5uZXIgPSBub2RlLnF1ZXJ5U2VsZWN0b3JBbGwoICcuY2FsZW5kYXJfbG9hZGVyX2ZyYW1lW2RhdGEtd3BiYy1yaWRdJyApO1xyXG5cdFx0XHRcdFx0XHRcdGlmICggaW5uZXIgJiYgaW5uZXIubGVuZ3RoICkge1xyXG5cdFx0XHRcdFx0XHRcdFx0aW5uZXIuZm9yRWFjaCggc3RhcnRfZm9yICk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9ICk7XHJcblx0XHRcdGRvY19vYnNlcnZlci5vYnNlcnZlKCBkLmRvY3VtZW50RWxlbWVudCwgeyBjaGlsZExpc3Q6IHRydWUsIHN1YnRyZWU6IHRydWUgfSApO1xyXG5cdFx0fSBjYXRjaCAoIGUgKSB7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHQgKiBCb290XHJcblx0ICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblx0b25fcmVhZHkoIGZ1bmN0aW9uICgpIHtcclxuXHRcdGJvb3RzdHJhcF9leGlzdGluZygpO1xyXG5cdFx0b2JzZXJ2ZV9uZXdfbG9hZGVycygpO1xyXG5cdH0gKTtcclxuXHJcbn0pKCB3aW5kb3csIGRvY3VtZW50ICk7XHJcbiIsIihmdW5jdGlvbiggdyApIHtcclxuXHJcblx0J3VzZSBzdHJpY3QnO1xyXG5cclxuXHRpZiAoICEgdy5XUEJDX0ZFICkge1xyXG5cdFx0dy5XUEJDX0ZFID0ge307XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBBdXRvLWZpbGwgYm9va2luZyBmb3JtIGZpZWxkcyAodGV4dC9lbWFpbCkgYmFzZWQgb24gaW5wdXQgXCJuYW1lXCIgcGF0dGVybnMuXHJcblx0ICpcclxuXHQgKiBGb3JtIElEIGZvcm1hdDogYm9va2luZ19mb3Jte3Jlc291cmNlX2lkfVxyXG5cdCAqIFNraXBzIGRhdGUgZmllbGQ6IGRhdGVfYm9va2luZ3tyZXNvdXJjZV9pZH1cclxuXHQgKlxyXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSByZXNvdXJjZV9pZCBCb29raW5nIHJlc291cmNlIElELlxyXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBmaWxsX3ZhbHVlcyBWYWx1ZXMgdG8gaW5qZWN0IChzdHJpbmdzKS5cclxuXHQgKlxyXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgZm9ybSBmb3VuZCBhbmQgcHJvY2Vzc2VkLCBmYWxzZSBvdGhlcndpc2UuXHJcblx0ICovXHJcblx0dy5XUEJDX0ZFLmF1dG9maWxsX2Jvb2tpbmdfZm9ybV9maWVsZHMgPSBmdW5jdGlvbiggcmVzb3VyY2VfaWQsIGZpbGxfdmFsdWVzICkge1xyXG5cclxuXHRcdHJlc291cmNlX2lkICA9IHBhcnNlSW50KCByZXNvdXJjZV9pZCwgMTAgKSB8fCAwO1xyXG5cdFx0ZmlsbF92YWx1ZXMgID0gZmlsbF92YWx1ZXMgfHwge307XHJcblxyXG5cdFx0dmFyIGZvcm1faWQgICA9ICdib29raW5nX2Zvcm0nICsgcmVzb3VyY2VfaWQ7XHJcblx0XHR2YXIgZGF0ZV9uYW1lID0gJ2RhdGVfYm9va2luZycgKyByZXNvdXJjZV9pZDtcclxuXHJcblx0XHR2YXIgc3VibWl0X2Zvcm0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggZm9ybV9pZCApO1xyXG5cclxuXHRcdGlmICggISBzdWJtaXRfZm9ybSApIHtcclxuXHRcdFx0LyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xyXG5cdFx0XHRjb25zb2xlLmVycm9yKCAnV1BCQzogTm8gYm9va2luZyBmb3JtOiAnICsgZm9ybV9pZCApO1xyXG5cdFx0XHQvKiBlc2xpbnQtZW5hYmxlIG5vLWNvbnNvbGUgKi9cclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEtlZXAgc2FtZSByZWdleCBydWxlcyBhbmQgcHJpb3JpdHkgb3JkZXIgYXMgbGVnYWN5IGlubGluZSBKUy5cclxuXHRcdHZhciBydWxlcyA9IGFycmF5X3J1bGVzKCBmaWxsX3ZhbHVlcyApO1xyXG5cclxuXHRcdHZhciBlbGVtZW50cyA9IHN1Ym1pdF9mb3JtLmVsZW1lbnRzIHx8IFtdO1xyXG5cdFx0dmFyIGNvdW50ICAgID0gZWxlbWVudHMubGVuZ3RoO1xyXG5cdFx0dmFyIGVsO1xyXG5cdFx0dmFyIGk7XHJcblx0XHR2YXIgajtcclxuXHJcblx0XHRmb3IgKCBpID0gMDsgaSA8IGNvdW50OyBpKysgKSB7XHJcblxyXG5cdFx0XHRlbCA9IGVsZW1lbnRzWyBpIF07XHJcblxyXG5cdFx0XHRpZiAoICEgZWwgfHwgISBlbC5uYW1lICkge1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBPbmx5IHRleHQvZW1haWwgaW5wdXRzLlxyXG5cdFx0XHRpZiAoICggZWwudHlwZSAhPT0gJ3RleHQnICkgJiYgKCBlbC50eXBlICE9PSAnZW1haWwnICkgKSB7XHJcblx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIFNraXAgZGF0ZSBmaWVsZC5cclxuXHRcdFx0aWYgKCBlbC5uYW1lID09PSBkYXRlX25hbWUgKSB7XHJcblx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIEZpbGwgb25seSBlbXB0eSB2YWx1ZXMgKGxlZ2FjeSBiZWhhdmlvcjogPT0gXCJcIikuXHJcblx0XHRcdGlmICggZWwudmFsdWUgIT09ICcnICkge1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRmb3IgKCBqID0gMDsgaiA8IHJ1bGVzLmxlbmd0aDsgaisrICkge1xyXG5cclxuXHRcdFx0XHRpZiAoIHJ1bGVzWyBqIF0ucmUudGVzdCggZWwubmFtZSApICkge1xyXG5cclxuXHRcdFx0XHRcdGlmICggcnVsZXNbIGogXS52YWwgIT09ICcnICkge1xyXG5cdFx0XHRcdFx0XHRlbC52YWx1ZSA9IHJ1bGVzWyBqIF0udmFsO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGJyZWFrOyAvLyBTdG9wIGF0IGZpcnN0IG1hdGNoaW5nIHJ1bGUgKHByaW9yaXR5KS5cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9O1xyXG5cclxuXHQvKipcclxuXHQgKiBCdWlsZCBydWxlcyBhcnJheSBmb3IgYXV0b2ZpbGwuXHJcblx0ICpcclxuXHQgKiBAcGFyYW0ge09iamVjdH0gZmlsbF92YWx1ZXMgVmFsdWVzIHRvIGluamVjdC5cclxuXHQgKlxyXG5cdCAqIEByZXR1cm4ge0FycmF5fSBSdWxlcyBsaXN0LlxyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIGFycmF5X3J1bGVzKCBmaWxsX3ZhbHVlcyApIHtcclxuXHJcblx0XHQvLyBOb3JtYWxpemUgdG8gc3RyaW5ncyAocHJldmVudCBcInVuZGVmaW5lZFwiIGluIGZpZWxkcykuXHJcblx0XHR2YXIgbmlja25hbWUgID0gKCBmaWxsX3ZhbHVlcy5uaWNrbmFtZSAhPSBudWxsICkgPyBTdHJpbmcoIGZpbGxfdmFsdWVzLm5pY2tuYW1lICkgOiAnJztcclxuXHRcdHZhciBsYXN0X25hbWUgPSAoIGZpbGxfdmFsdWVzLmxhc3RfbmFtZSAhPSBudWxsICkgPyBTdHJpbmcoIGZpbGxfdmFsdWVzLmxhc3RfbmFtZSApIDogJyc7XHJcblx0XHR2YXIgZmlyc3RfbmFtZSA9ICggZmlsbF92YWx1ZXMuZmlyc3RfbmFtZSAhPSBudWxsICkgPyBTdHJpbmcoIGZpbGxfdmFsdWVzLmZpcnN0X25hbWUgKSA6ICcnO1xyXG5cdFx0dmFyIGVtYWlsICAgICA9ICggZmlsbF92YWx1ZXMuZW1haWwgIT0gbnVsbCApID8gU3RyaW5nKCBmaWxsX3ZhbHVlcy5lbWFpbCApIDogJyc7XHJcblx0XHR2YXIgcGhvbmUgICAgID0gKCBmaWxsX3ZhbHVlcy5waG9uZSAhPSBudWxsICkgPyBTdHJpbmcoIGZpbGxfdmFsdWVzLnBob25lICkgOiAnJztcclxuXHRcdHZhciBuYl9lbmZhbnQgPSAoIGZpbGxfdmFsdWVzLm5iX2VuZmFudCAhPSBudWxsICkgPyBTdHJpbmcoIGZpbGxfdmFsdWVzLm5iX2VuZmFudCApIDogJyc7XHJcblx0XHR2YXIgdXJsICAgICAgID0gKCBmaWxsX3ZhbHVlcy51cmwgIT0gbnVsbCApID8gU3RyaW5nKCBmaWxsX3ZhbHVlcy51cmwgKSA6ICcnO1xyXG5cclxuXHRcdHJldHVybiBbXHJcblx0XHRcdHsgcmU6IC9eKFtBLVphLXowLTlfXFwtXFwuXSkqKG5pY2tuYW1lKXsxfShbQS1aYS16MC05X1xcLVxcLl0pKiQvLCB2YWw6IG5pY2tuYW1lIH0sXHJcblx0XHRcdHsgcmU6IC9eKFtBLVphLXowLTlfXFwtXFwuXSkqKGxhc3R8c2Vjb25kKXsxfShbX1xcLVxcLl0pP25hbWUoW0EtWmEtejAtOV9cXC1cXC5dKSokLywgdmFsOiBsYXN0X25hbWUgfSxcclxuXHRcdFx0eyByZTogL15uYW1lKFswLTlfXFwtXFwuXSkqJC8sIHZhbDogZmlyc3RfbmFtZSB9LFxyXG5cdFx0XHR7IHJlOiAvXihbQS1aYS16MC05X1xcLVxcLl0pKihmaXJzdHxteSl7MX0oW19cXC1cXC5dKT9uYW1lKFtBLVphLXowLTlfXFwtXFwuXSkqJC8sIHZhbDogZmlyc3RfbmFtZSB9LFxyXG5cdFx0XHR7IHJlOiAvXihlKT8oW19cXC1cXC5dKT9tYWlsKFswLTlfXFwtXFwuXSopJC8sIHZhbDogZW1haWwgfSxcclxuXHRcdFx0eyByZTogL14oW0EtWmEtejAtOV9cXC1cXC5dKSoocGhvbmV8Zm9uZSl7MX0oW0EtWmEtejAtOV9cXC1cXC5dKSokLywgdmFsOiBwaG9uZSB9LFxyXG5cdFx0XHR7IHJlOiAvXihlKT8oW19cXC1cXC5dKT9uYl9lbmZhbnQoWzAtOV9cXC1cXC5dKikkLywgdmFsOiBuYl9lbmZhbnQgfSxcclxuXHRcdFx0eyByZTogL14oW0EtWmEtejAtOV9cXC1cXC5dKSooVVJMfHNpdGV8d2VifFdFQil7MX0oW0EtWmEtejAtOV9cXC1cXC5dKSokLywgdmFsOiB1cmwgfVxyXG5cdFx0XTtcclxuXHR9XHJcblxyXG59KSggd2luZG93ICk7XHJcbiIsIi8vID09IFN1Ym1pdCBCb29raW5nIERhdGEgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4vLyBSZWZhY3RvcmVkIChzYWZlKSwgd2l0aCBuZXcgd3BiY18qIG5hbWVzLlxyXG4vLyBCYWNrd2FyZC1jb21wYXRpYmxlIHdyYXBwZXJzIGZvciBsZWdhY3kgZnVuY3Rpb24gbmFtZXMgYXJlIGluY2x1ZGVkIGF0IHRoZSBib3R0b20uXHJcbi8vIEBmaWxlOiBpbmNsdWRlcy9fX2pzL2NsaWVudC9mcm9udF9lbmRfZm9ybS9ib29raW5nX2Zvcm1fc3VibWl0LmpzXHJcblxyXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgYSBmb3JtIGJlbG9uZ3MgdG8gYSByZXF1ZXN0LWxvY2FsIGJvb2tpbmcgcHJldmlldy5cbiAqXG4gKiBTaWduZWQgaWZyYW1lIGFuZCBuZXctd2luZG93IHByZXZpZXdzIGludGVudGlvbmFsbHkgZG8gbm90IHVzZSB0aGlzIG1hcmtlcjtcbiAqIHRoZXkgcmV0YWluIHRoZSBjb21wbGV0ZSBCb29raW5nIENhbGVuZGFyIHByZXZpZXcgbGlmZWN5Y2xlLlxuICpcbiAqIEBwYXJhbSB7SFRNTEZvcm1FbGVtZW50fSBzdWJtaXRfZm9ybSBCb29raW5nIGZvcm0gYmVpbmcgc3VibWl0dGVkLlxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSB3aGVuIGZpbmFsIHN1Ym1pc3Npb24gbXVzdCByZW1haW4gbG9jYWwgYW5kIG5vbi1tdXRhdGluZy5cbiAqL1xuZnVuY3Rpb24gd3BiY19ib29raW5nX2Zvcm1fX2lzX2lubGluZV9wcmV2aWV3X3N1Ym1pc3Npb24oIHN1Ym1pdF9mb3JtICkge1xuXHRyZXR1cm4gMCA8IGpRdWVyeSggc3VibWl0X2Zvcm0gKS5jbG9zZXN0KCAnW2RhdGEtd3BiYy1pbmxpbmUtYm9va2luZy1wcmV2aWV3PVwiMVwiXScgKS5sZW5ndGg7XG59XG5cbi8qKlxuICogRXhwbGFpbiBiZWxvdyB0aGUgZm9ybSB3aHkgYSByZXF1ZXN0LWxvY2FsIHByZXZpZXcgY2Fubm90IGNyZWF0ZSBhIGJvb2tpbmcuXG4gKlxuICogQHBhcmFtIHtIVE1MRm9ybUVsZW1lbnR9IHN1Ym1pdF9mb3JtIEJvb2tpbmcgZm9ybSBiZWluZyBzdWJtaXR0ZWQuXG4gKiBAcmV0dXJuIHt2b2lkfVxuICovXG5mdW5jdGlvbiB3cGJjX2Jvb2tpbmdfZm9ybV9fc2hvd19pbmxpbmVfcHJldmlld19zdWJtaXNzaW9uX25vdGljZSggc3VibWl0X2Zvcm0gKSB7XG5cdHdwYmNfZnJvbnRfZW5kX19zaG93X21lc3NhZ2VfX3dhcm5pbmdfdW5kZXJfZWxlbWVudChcblx0XHRzdWJtaXRfZm9ybSxcblx0XHRfd3BiYy5nZXRfbWVzc2FnZSggJ21lc3NhZ2VfaW5saW5lX3ByZXZpZXdfc3VibWlzc2lvbl9kaXNhYmxlZCcgKSxcblx0XHQndGV4dCdcblx0KTtcbn1cblxuLyoqXG4gKiBDaGVjayBmaWVsZHMgYXQgZm9ybSBhbmQgdGhlbiBzZW5kIHJlcXVlc3QgKGxlZ2FjeTogbXlib29raW5nX3N1Ym1pdCkuXG4gKlxyXG4gKiBAcGFyYW0ge0hUTUxGb3JtRWxlbWVudH0gc3VibWl0X2Zvcm1cclxuICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSAgIHJlc291cmNlX2lkXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgICB3cGRldl9hY3RpdmVfbG9jYWxlXHJcbiAqXHJcbiAqIEByZXR1cm4ge2ZhbHNlfHVuZGVmaW5lZH0gTGVnYWN5IGJlaGF2aW9yOiByZXR1cm5zIGZhbHNlIGluIHNvbWUgY2FzZXMsIG90aGVyd2lzZSB1bmRlZmluZWQuXHJcbiAqL1xyXG5mdW5jdGlvbiB3cGJjX2Jvb2tpbmdfZm9ybV9zdWJtaXQoIHN1Ym1pdF9mb3JtLCByZXNvdXJjZV9pZCwgd3BkZXZfYWN0aXZlX2xvY2FsZSApIHtcclxuXHJcblx0cmVzb3VyY2VfaWQgPSBwYXJzZUludCggcmVzb3VyY2VfaWQsIDEwICk7XHJcblxyXG5cdC8vIFNhZmV0eSBndWFyZCAobGVnYWN5IGNvZGUgYXNzdW1lZCB2YWxpZCBmb3JtKS5cclxuXHRpZiAoICEgc3VibWl0X2Zvcm0gfHwgISBzdWJtaXRfZm9ybS5lbGVtZW50cyApIHtcclxuXHRcdC8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cclxuXHRcdGNvbnNvbGUuZXJyb3IoICdXUEJDOiBJbnZhbGlkIHN1Ym1pdCBmb3JtIGluIHdwYmNfYm9va2luZ19mb3JtX3N1Ym1pdCgpLicgKTtcclxuXHRcdC8qIGVzbGludC1lbmFibGUgbm8tY29uc29sZSAqL1xyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdC8vIEV4dGVybmFsIGhvb2s6IGFsbG93IHBhdXNlIHN1Ym1pdCBvbiBjb25maXJtYXRpb24vc3VtbWFyeSBzdGVwLlxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHR2YXIgdGFyZ2V0X2VsbSA9IGpRdWVyeSggJy5ib29raW5nX2Zvcm1fZGl2JyApLnRyaWdnZXIoICdib29raW5nX2Zvcm1fc3VibWl0X2NsaWNrJywgWyByZXNvdXJjZV9pZCwgc3VibWl0X2Zvcm0sIHdwZGV2X2FjdGl2ZV9sb2NhbGUgXSApOyAvLyBGaXhJbjogOC44LjMuMTMuXHJcblxyXG5cdGlmIChcclxuXHRcdCggalF1ZXJ5KCB0YXJnZXRfZWxtICkuZmluZCggJ2lucHV0W25hbWU9XCJib29raW5nX2Zvcm1fc2hvd19zdW1tYXJ5XCJdJyApLmxlbmd0aCA+IDAgKSAmJlxyXG5cdFx0KCAncGF1c2Vfc3VibWl0JyA9PT0galF1ZXJ5KCB0YXJnZXRfZWxtICkuZmluZCggJ2lucHV0W25hbWU9XCJib29raW5nX2Zvcm1fc2hvd19zdW1tYXJ5XCJdJyApLnZhbCgpIClcclxuXHQpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRpZiAoIHdwYmNfYm9va2luZ19mb3JtX19pc19pbmxpbmVfcHJldmlld19zdWJtaXNzaW9uKCBzdWJtaXRfZm9ybSApICkge1xuXHRcdHdwYmNfYm9va2luZ19mb3JtX19zaG93X2lubGluZV9wcmV2aWV3X3N1Ym1pc3Npb25fbm90aWNlKCBzdWJtaXRfZm9ybSApO1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8vIEZpeEluOiA4LjQuMC4yLlxuXHR2YXIgaXNfZXJyb3IgPSB3cGJjX2NoZWNrX2Vycm9yc19pbl9ib29raW5nX2Zvcm0oIHJlc291cmNlX2lkICk7XHJcblx0aWYgKCBpc19lcnJvciApIHtcclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHQvLyBTaG93IG1lc3NhZ2UgaWYgbm8gc2VsZWN0ZWQgZGF5cyBpbiBDYWxlbmRhcihzKS5cclxuXHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0dmFyIGRhdGVfaW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ2RhdGVfYm9va2luZycgKyByZXNvdXJjZV9pZCApO1xyXG5cdHZhciBkYXRlX3ZhbHVlID0gKCBkYXRlX2lucHV0ICkgPyBkYXRlX2lucHV0LnZhbHVlIDogJyc7XHJcblxyXG5cdGlmICggJycgPT09IGRhdGVfdmFsdWUgKSB7XHJcblxyXG5cdFx0dmFyIGFycl9vZl9zZWxlY3RlZF9hZGRpdGlvbmFsX2NhbGVuZGFycyA9IHdwYmNfZ2V0X2Fycl9vZl9zZWxlY3RlZF9hZGRpdGlvbmFsX2NhbGVuZGFycyggcmVzb3VyY2VfaWQgKTsgLy8gRml4SW46IDguNS4yLjI2LlxyXG5cclxuXHRcdGlmICggISBhcnJfb2Zfc2VsZWN0ZWRfYWRkaXRpb25hbF9jYWxlbmRhcnMgfHwgKCBhcnJfb2Zfc2VsZWN0ZWRfYWRkaXRpb25hbF9jYWxlbmRhcnMubGVuZ3RoID09PSAwICkgKSB7XHJcblx0XHRcdHdwYmNfZnJvbnRfZW5kX19zaG93X21lc3NhZ2VfX3dhcm5pbmcoXG5cdFx0XHRcdCcjYm9va2luZ19mb3JtX2RpdicgKyByZXNvdXJjZV9pZCArICcgLmJrX2NhbGVuZGFyX2ZyYW1lJyxcblx0XHRcdFx0X3dwYmMuZ2V0X21lc3NhZ2UoICdtZXNzYWdlX2NoZWNrX25vX3NlbGVjdGVkX2RhdGVzJyApLFxuXHRcdFx0XHQndGV4dCdcblx0XHRcdCk7XG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0Ly8gRml4SW46IDYuMS4xLjMuIFRpbWUgc2VsZWN0aW9uIGF2YWlsYWJpbGl0eSBjaGVja3MuXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdGlmICggdHlwZW9mIHdwYmNfaXNfdGhpc190aW1lX3NlbGVjdGlvbl9ub3RfYXZhaWxhYmxlID09PSAnZnVuY3Rpb24nICkge1xyXG5cclxuXHRcdGlmICggJycgPT09IGRhdGVfdmFsdWUgKSB7IC8vIFByaW1hcnkgY2FsZW5kYXIgbm90IHNlbGVjdGVkLlxyXG5cclxuXHRcdFx0dmFyIGFkZGl0aW9uYWxfY2FsZW5kYXJzX2VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICdhZGRpdGlvbmFsX2NhbGVuZGFycycgKyByZXNvdXJjZV9pZCApO1xyXG5cclxuXHRcdFx0aWYgKCBhZGRpdGlvbmFsX2NhbGVuZGFyc19lbCAhPT0gbnVsbCApIHsgLy8gQ2hlY2tpbmcgYWRkaXRpb25hbCBjYWxlbmRhcnMuXHJcblxyXG5cdFx0XHRcdHZhciBpZF9hZGRpdGlvbmFsX3N0ciA9IGFkZGl0aW9uYWxfY2FsZW5kYXJzX2VsLnZhbHVlO1xyXG5cdFx0XHRcdHZhciBpZF9hZGRpdGlvbmFsX2FyciA9IGlkX2FkZGl0aW9uYWxfc3RyLnNwbGl0KCAnLCcgKTtcclxuXHRcdFx0XHR2YXIgaXNfdGltZXNfZGF0ZXNfb2sgPSBmYWxzZTtcclxuXHJcblx0XHRcdFx0Zm9yICggdmFyIGlhID0gMDsgaWEgPCBpZF9hZGRpdGlvbmFsX2Fyci5sZW5ndGg7IGlhKysgKSB7XHJcblxyXG5cdFx0XHRcdFx0dmFyIGFkZF9pZCA9IGlkX2FkZGl0aW9uYWxfYXJyWyBpYSBdO1xyXG5cclxuXHRcdFx0XHRcdHZhciBhZGRfZGF0ZV9lbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnZGF0ZV9ib29raW5nJyArIGFkZF9pZCApO1xyXG5cdFx0XHRcdFx0dmFyIGFkZF9kYXRlX3ZhbCA9ICggYWRkX2RhdGVfZWwgKSA/IGFkZF9kYXRlX2VsLnZhbHVlIDogJyc7XHJcblxyXG5cdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHQoICcnICE9PSBhZGRfZGF0ZV92YWwgKSAmJlxyXG5cdFx0XHRcdFx0XHQoICEgd3BiY19pc190aGlzX3RpbWVfc2VsZWN0aW9uX25vdF9hdmFpbGFibGUoIGFkZF9pZCwgc3VibWl0X2Zvcm0uZWxlbWVudHMgKSApXHJcblx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0aXNfdGltZXNfZGF0ZXNfb2sgPSB0cnVlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aWYgKCAhIGlzX3RpbWVzX2RhdGVzX29rICkge1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdH0gZWxzZSB7IC8vIFByaW1hcnkgY2FsZW5kYXIgc2VsZWN0ZWQuXHJcblxyXG5cdFx0XHRpZiAoIHdwYmNfaXNfdGhpc190aW1lX3NlbGVjdGlvbl9ub3RfYXZhaWxhYmxlKCByZXNvdXJjZV9pZCwgc3VibWl0X2Zvcm0uZWxlbWVudHMgKSApIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHQvLyBTZXJpYWxpemUgZm9ybSAobGVnYWN5IGZvcm1hdCkuXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdHZhciBjb3VudCAgICA9IHN1Ym1pdF9mb3JtLmVsZW1lbnRzLmxlbmd0aDtcclxuXHR2YXIgZm9ybWRhdGEgPSAnJztcclxuXHR2YXIgaW5wX3ZhbHVlO1xyXG5cdHZhciBpbnBfdGl0bGVfdmFsdWU7XHJcblx0dmFyIGVsZW1lbnQ7XHJcblx0dmFyIGVsX3R5cGU7XHJcblxyXG5cdC8vIEhlbHBlcjogbGVnYWN5IGVzY2FwaW5nIGZvciB0aGUgc2VyaWFsaXplZCB2YWx1ZS5cclxuXHRmdW5jdGlvbiB3cGJjX2VzY2FwZV9zZXJpYWxpemVkX3ZhbHVlKCB2YWwgKSB7XHJcblxyXG5cdFx0dmFsID0gKCB2YWwgPT0gbnVsbCApID8gJycgOiBTdHJpbmcoIHZhbCApO1xyXG5cclxuXHRcdC8vIFJlcGxhY2UgcmVnaXN0ZXJlZCBjaGFyYWN0ZXJzLlxyXG5cdFx0dmFsID0gdmFsLnJlcGxhY2UoIG5ldyBSZWdFeHAoICdcXFxcXicsICdnJyApLCAnJiM5NDsnICk7XHJcblx0XHR2YWwgPSB2YWwucmVwbGFjZSggbmV3IFJlZ0V4cCggJ34nLCAnZycgKSwgJyYjMTI2OycgKTtcclxuXHJcblx0XHQvLyBSZXBsYWNlIHF1b3Rlcy5cclxuXHRcdHZhbCA9IHZhbC5yZXBsYWNlKCAvXCIvZywgJyYjMzQ7JyApO1xyXG5cdFx0dmFsID0gdmFsLnJlcGxhY2UoIC8nL2csICcmIzM5OycgKTtcclxuXHJcblx0XHRyZXR1cm4gdmFsO1xyXG5cdH1cclxuXHJcblx0Ly8gSGVscGVyOiBkZXRlcm1pbmUgVUkgdHlwZSBmb3IgdGl0bGUgZXh0cmFjdGlvbiAobGVnYWN5IGxvZ2ljKS5cclxuXHRmdW5jdGlvbiB3cGJjX2dldF9pbnB1dF9lbGVtZW50X3R5cGUoIGVsICkge1xyXG5cclxuXHRcdGlmICggISBlbCB8fCAhIGVsLnRhZ05hbWUgKSB7XHJcblx0XHRcdHJldHVybiAnJztcclxuXHRcdH1cclxuXHJcblx0XHR2YXIgdGFnID0gU3RyaW5nKCBlbC50YWdOYW1lICkudG9Mb3dlckNhc2UoKTtcclxuXHJcblx0XHRpZiAoICdpbnB1dCcgPT09IHRhZyApIHtcclxuXHRcdFx0cmV0dXJuICggZWwudHlwZSApID8gU3RyaW5nKCBlbC50eXBlICkudG9Mb3dlckNhc2UoKSA6ICd0ZXh0JztcclxuXHRcdH1cclxuXHJcblx0XHQvLyBMZWdhY3kgdXNlZCBcInNlbGVjdFwiIHN0cmluZyBoZXJlLlxyXG5cdFx0aWYgKCAnc2VsZWN0JyA9PT0gdGFnICkge1xyXG5cdFx0XHRyZXR1cm4gJ3NlbGVjdCc7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRhZztcclxuXHR9XHJcblxyXG5cdGZvciAoIHZhciBpID0gMDsgaSA8IGNvdW50OyBpKysgKSB7IC8vIEZpeEluOiA5LjEuNS4xLlxyXG5cclxuXHRcdGVsZW1lbnQgPSBzdWJtaXRfZm9ybS5lbGVtZW50c1sgaSBdO1xyXG5cclxuXHRcdGlmICggISBlbGVtZW50ICkge1xyXG5cdFx0XHRjb250aW51ZTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIGpRdWVyeSggZWxlbWVudCApLmNsb3Nlc3QoICcuYm9va2luZ19mb3JtX2dhcmJhZ2UnICkubGVuZ3RoICkge1xyXG5cdFx0XHRjb250aW51ZTsgLy8gU2tpcCBlbGVtZW50cyBmcm9tIGdhcmJhZ2UuIEZpeEluOiA3LjEuMi4xNC5cclxuXHRcdH1cclxuXHJcblx0XHRpZiAoICcxJyA9PT0gU3RyaW5nKCBqUXVlcnkoIGVsZW1lbnQgKS5hdHRyKCAnZGF0YS13cGJjLWJvb2tpbmctc3VibWl0LWlnbm9yZScgKSB8fCAnJyApICkge1xyXG5cdFx0XHRjb250aW51ZTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoXHJcblx0XHRcdCggZWxlbWVudC50eXBlICE9PSAnYnV0dG9uJyApICYmXHJcblx0XHRcdCggZWxlbWVudC50eXBlICE9PSAnaGlkZGVuJyApICYmXHJcblx0XHRcdCggZWxlbWVudC5uYW1lICE9PSAoICdkYXRlX2Jvb2tpbmcnICsgcmVzb3VyY2VfaWQgKSApXHJcblx0XHRcdC8vICYmICggalF1ZXJ5KCBlbGVtZW50ICkuaXMoICc6dmlzaWJsZScgKSApIC8vRml4SW46IDcuMi4xLjEyLjJcclxuXHRcdCkge1xyXG5cclxuXHRcdFx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdFx0XHQvLyBHZXQgZWxlbWVudCB2YWx1ZS5cclxuXHRcdFx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdFx0XHRpZiAoIGVsZW1lbnQudHlwZSA9PT0gJ2NoZWNrYm94JyApIHtcclxuXHJcblx0XHRcdFx0aWYgKCBlbGVtZW50LnZhbHVlID09PSAnJyApIHtcclxuXHRcdFx0XHRcdGlucF92YWx1ZSA9IGVsZW1lbnQuY2hlY2tlZDtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0aW5wX3ZhbHVlID0gKCBlbGVtZW50LmNoZWNrZWQgKSA/IGVsZW1lbnQudmFsdWUgOiAnJztcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHR9IGVsc2UgaWYgKCBlbGVtZW50LnR5cGUgPT09ICdyYWRpbycgKSB7XHJcblxyXG5cdFx0XHRcdGlmICggZWxlbWVudC5jaGVja2VkICkge1xyXG5cdFx0XHRcdFx0aW5wX3ZhbHVlID0gZWxlbWVudC52YWx1ZTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cclxuXHRcdFx0XHRcdC8vIFJlcXVpcmVkIHJhZGlvOiBzaG93IHdhcm5pbmcgaWYgbm9uZSBjaGVja2VkLlxyXG5cdFx0XHRcdFx0Ly8gRml4SW46IDcuMC4xLjYyLlxyXG5cdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHQoIGVsZW1lbnQuY2xhc3NOYW1lLmluZGV4T2YoICd3cGRldi12YWxpZGF0ZXMtYXMtcmVxdWlyZWQnICkgIT09IC0xICkgJiZcclxuXHRcdFx0XHRcdFx0KCBqUXVlcnkoIGVsZW1lbnQgKS5pcyggJzp2aXNpYmxlJyApICkgJiYgLy8gRml4SW46IDcuMi4xLjEyLjIuXHJcblx0XHRcdFx0XHRcdCggISBqUXVlcnkoICc6cmFkaW9bbmFtZT1cIicgKyBlbGVtZW50Lm5hbWUgKyAnXCJdJywgc3VibWl0X2Zvcm0gKS5pcyggJzpjaGVja2VkJyApIClcclxuXHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHR3cGJjX2Zyb250X2VuZF9fc2hvd19tZXNzYWdlX193YXJuaW5nKCBlbGVtZW50LCBfd3BiYy5nZXRfbWVzc2FnZSggJ21lc3NhZ2VfY2hlY2tfcmVxdWlyZWRfZm9yX3JhZGlvX2JveCcgKSwgJ3RleHQnICk7IC8vIEZpeEluOiA4LjUuMS4zLlxuXHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdC8vIFNraXAgc3RvcmluZyBlbXB0eSByYWRpbyBvcHRpb25zLlxyXG5cdFx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRpbnBfdmFsdWUgPSBlbGVtZW50LnZhbHVlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpbnBfdGl0bGVfdmFsdWUgPSAnJztcclxuXHJcblx0XHRcdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHRcdFx0Ly8gR2V0IGh1bWFuLWZyaWVuZGx5IHRpdGxlIHZhbHVlIChsZWdhY3kgYmVoYXZpb3IpLlxyXG5cdFx0XHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0XHRcdHZhciBpbnB1dF9lbGVtZW50X3R5cGUgPSB3cGJjX2dldF9pbnB1dF9lbGVtZW50X3R5cGUoIGVsZW1lbnQgKTtcclxuXHJcblx0XHRcdHN3aXRjaCAoIGlucHV0X2VsZW1lbnRfdHlwZSApIHtcclxuXHJcblx0XHRcdFx0Y2FzZSAndGV4dCc6XHJcblx0XHRcdFx0Y2FzZSAnZW1haWwnOlxyXG5cdFx0XHRcdFx0aW5wX3RpdGxlX3ZhbHVlID0gaW5wX3ZhbHVlO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblxyXG5cdFx0XHRcdGNhc2UgJ3NlbGVjdCc6XHJcblx0XHRcdFx0XHRpbnBfdGl0bGVfdmFsdWUgPSBqUXVlcnkoIGVsZW1lbnQgKS5maW5kKCAnb3B0aW9uOnNlbGVjdGVkJyApLnRleHQoKTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cclxuXHRcdFx0XHRjYXNlICdyYWRpbyc6XHJcblx0XHRcdFx0Y2FzZSAnY2hlY2tib3gnOlxyXG5cdFx0XHRcdFx0aWYgKCBqUXVlcnkoIGVsZW1lbnQgKS5pcyggJzpjaGVja2VkJyApICkge1xyXG5cdFx0XHRcdFx0XHR2YXIgbGFiZWxfZWxlbWVudCA9IGpRdWVyeSggZWxlbWVudCApLnBhcmVudHMoICcud3BkZXYtbGlzdC1pdGVtJyApLmZpbmQoICcud3BkZXYtbGlzdC1pdGVtLWxhYmVsJyApO1xyXG5cdFx0XHRcdFx0XHRpZiAoIGxhYmVsX2VsZW1lbnQubGVuZ3RoICkge1xyXG5cdFx0XHRcdFx0XHRcdGlucF90aXRsZV92YWx1ZSA9IGxhYmVsX2VsZW1lbnQuaHRtbCgpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHJcblx0XHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRcdGlucF90aXRsZV92YWx1ZSA9IGlucF92YWx1ZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdFx0XHQvLyBNdWx0aXBsZSBzZWxlY3QgdmFsdWUgZXh0cmFjdGlvbi5cclxuXHRcdFx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdFx0XHRpZiAoICggZWxlbWVudC50eXBlID09PSAnc2VsZWN0Ym94LW11bHRpcGxlJyApIHx8ICggZWxlbWVudC50eXBlID09PSAnc2VsZWN0LW11bHRpcGxlJyApICkge1xyXG5cdFx0XHRcdGlucF92YWx1ZSA9IGpRdWVyeSggJ1tuYW1lPVwiJyArIGVsZW1lbnQubmFtZSArICdcIl0nICkudmFsKCk7XHJcblx0XHRcdFx0aWYgKCAoIGlucF92YWx1ZSA9PT0gbnVsbCApIHx8ICggU3RyaW5nKCBpbnBfdmFsdWUgKSA9PT0gJycgKSApIHtcclxuXHRcdFx0XHRcdGlucF92YWx1ZSA9ICcnO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdFx0XHQvLyBNYWtlIHZhbGlkYXRpb24gb25seSBmb3IgdmlzaWJsZSBlbGVtZW50cy5cclxuXHRcdFx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdFx0XHRpZiAoIGpRdWVyeSggZWxlbWVudCApLmlzKCAnOnZpc2libGUnICkgKSB7IC8vIEZpeEluOiA3LjIuMS4xMi4yLlxyXG5cclxuXHRcdFx0XHQvLyBSZWNoZWNrIG1heCBhdmFpbGFibGUgdmlzaXRvcnMgc2VsZWN0aW9uLlxyXG5cdFx0XHRcdGlmICggdHlwZW9mIHdwYmNfX2lzX2xlc3NfdGhhbl9yZXF1aXJlZF9fb2ZfbWF4X2F2YWlsYWJsZV9zbG90c19fYmwgPT09ICdmdW5jdGlvbicgKSB7XHJcblx0XHRcdFx0XHRpZiAoIHdwYmNfX2lzX2xlc3NfdGhhbl9yZXF1aXJlZF9fb2ZfbWF4X2F2YWlsYWJsZV9zbG90c19fYmwoIHJlc291cmNlX2lkLCBlbGVtZW50ICkgKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIFJlcXVpcmVkIGZpZWxkcy5cclxuXHRcdFx0XHRpZiAoIGVsZW1lbnQuY2xhc3NOYW1lLmluZGV4T2YoICd3cGRldi12YWxpZGF0ZXMtYXMtcmVxdWlyZWQnICkgIT09IC0xICkge1xyXG5cclxuXHRcdFx0XHRcdGlmICggKCBlbGVtZW50LnR5cGUgPT09ICdjaGVja2JveCcgKSAmJiAoIGVsZW1lbnQuY2hlY2tlZCA9PT0gZmFsc2UgKSApIHtcclxuXHJcblx0XHRcdFx0XHRcdGlmICggISBqUXVlcnkoICc6Y2hlY2tib3hbbmFtZT1cIicgKyBlbGVtZW50Lm5hbWUgKyAnXCJdJywgc3VibWl0X2Zvcm0gKS5pcyggJzpjaGVja2VkJyApICkge1xyXG5cdFx0XHRcdFx0XHRcdHdwYmNfZnJvbnRfZW5kX19zaG93X21lc3NhZ2VfX3dhcm5pbmcoIGVsZW1lbnQsIF93cGJjLmdldF9tZXNzYWdlKCAnbWVzc2FnZV9jaGVja19yZXF1aXJlZF9mb3JfY2hlY2tfYm94JyApLCAndGV4dCcgKTsgLy8gRml4SW46IDguNS4xLjMuXG5cdFx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmICggZWxlbWVudC50eXBlID09PSAncmFkaW8nICkge1xyXG5cclxuXHRcdFx0XHRcdFx0aWYgKCAhIGpRdWVyeSggJzpyYWRpb1tuYW1lPVwiJyArIGVsZW1lbnQubmFtZSArICdcIl0nLCBzdWJtaXRfZm9ybSApLmlzKCAnOmNoZWNrZWQnICkgKSB7XHJcblx0XHRcdFx0XHRcdFx0d3BiY19mcm9udF9lbmRfX3Nob3dfbWVzc2FnZV9fd2FybmluZyggZWxlbWVudCwgX3dwYmMuZ2V0X21lc3NhZ2UoICdtZXNzYWdlX2NoZWNrX3JlcXVpcmVkX2Zvcl9yYWRpb19ib3gnICksICd0ZXh0JyApOyAvLyBGaXhJbjogOC41LjEuMy5cblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0aWYgKCAoIGVsZW1lbnQudHlwZSAhPT0gJ2NoZWNrYm94JyApICYmICggZWxlbWVudC50eXBlICE9PSAncmFkaW8nICkgJiYgKCAnJyA9PT0gd3BiY190cmltKCBpbnBfdmFsdWUgKSApICkge1xyXG5cdFx0XHRcdFx0XHR3cGJjX2Zyb250X2VuZF9fc2hvd19tZXNzYWdlX193YXJuaW5nKCBlbGVtZW50LCBfd3BiYy5nZXRfbWVzc2FnZSggJ21lc3NhZ2VfY2hlY2tfcmVxdWlyZWQnICksICd0ZXh0JyApOyAvLyBGaXhJbjogOC41LjEuMy5cblx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIEVtYWlsIGZvcm1hdCB2YWxpZGF0aW9uLlxyXG5cdFx0XHRcdGlmICggZWxlbWVudC5jbGFzc05hbWUuaW5kZXhPZiggJ3dwZGV2LXZhbGlkYXRlcy1hcy1lbWFpbCcgKSAhPT0gLTEgKSB7XHJcblxyXG5cdFx0XHRcdFx0aW5wX3ZhbHVlID0gU3RyaW5nKCBpbnBfdmFsdWUgKS5yZXBsYWNlKCAvXlxccyt8XFxzKyQvZ20sICcnICk7IC8vIFRyaW0gd2hpdGUgc3BhY2UuIEZpeEluOiA1LjQuNS5cclxuXHRcdFx0XHRcdHZhciByZWdfZW1haWwgPSAvXihbQS1aYS16MC05X1xcLVxcLlxcK10pK1xcQChbQS1aYS16MC05X1xcLVxcLl0pK1xcLihbQS1aYS16XXsyLH0pJC87XHJcblxyXG5cdFx0XHRcdFx0aWYgKCBpbnBfdmFsdWUgIT09ICcnICkge1xyXG5cdFx0XHRcdFx0XHRpZiAoIHJlZ19lbWFpbC50ZXN0KCBpbnBfdmFsdWUgKSA9PT0gZmFsc2UgKSB7XHJcblx0XHRcdFx0XHRcdFx0d3BiY19mcm9udF9lbmRfX3Nob3dfbWVzc2FnZV9fd2FybmluZyggZWxlbWVudCwgX3dwYmMuZ2V0X21lc3NhZ2UoICdtZXNzYWdlX2NoZWNrX2VtYWlsJyApLCAndGV4dCcgKTsgLy8gRml4SW46IDguNS4xLjMuXG5cdFx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gU2FtZSBlbWFpbCBmaWVsZCB2YWxpZGF0aW9uICh2ZXJpZmljYXRpb24gZmllbGQpLlxyXG5cdFx0XHRcdGlmICggKCBlbGVtZW50LmNsYXNzTmFtZS5pbmRleE9mKCAnd3BkZXYtdmFsaWRhdGVzLWFzLWVtYWlsJyApICE9PSAtMSApICYmICggZWxlbWVudC5jbGFzc05hbWUuaW5kZXhPZiggJ3NhbWVfYXNfJyApICE9PSAtMSApICkge1xyXG5cclxuXHRcdFx0XHRcdHZhciBwcmltYXJ5X2VtYWlsX25hbWUgPSBlbGVtZW50LmNsYXNzTmFtZS5tYXRjaCggL3NhbWVfYXNfKFteXFxzXSkrL2dpICk7XHJcblxyXG5cdFx0XHRcdFx0aWYgKCBwcmltYXJ5X2VtYWlsX25hbWUgIT09IG51bGwgKSB7XHJcblxyXG5cdFx0XHRcdFx0XHRwcmltYXJ5X2VtYWlsX25hbWUgPSBwcmltYXJ5X2VtYWlsX25hbWVbIDAgXS5zdWJzdHIoIDggKTtcclxuXHJcblx0XHRcdFx0XHRcdGlmICggalF1ZXJ5KCAnW25hbWU9XCInICsgcHJpbWFyeV9lbWFpbF9uYW1lICsgcmVzb3VyY2VfaWQgKyAnXCJdJyApLmxlbmd0aCA+IDAgKSB7XHJcblxyXG5cdFx0XHRcdFx0XHRcdGlmICggalF1ZXJ5KCAnW25hbWU9XCInICsgcHJpbWFyeV9lbWFpbF9uYW1lICsgcmVzb3VyY2VfaWQgKyAnXCJdJyApLnZhbCgpICE9PSBpbnBfdmFsdWUgKSB7XHJcblx0XHRcdFx0XHRcdFx0XHR3cGJjX2Zyb250X2VuZF9fc2hvd19tZXNzYWdlX193YXJuaW5nKCBlbGVtZW50LCBfd3BiYy5nZXRfbWVzc2FnZSggJ21lc3NhZ2VfY2hlY2tfc2FtZV9lbWFpbCcgKSwgJ3RleHQnICk7IC8vIEZpeEluOiA4LjUuMS4zLlxuXHRcdFx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHQvLyBTa2lwIG9uZSBsb29wIGZvciB0aGUgZW1haWwgdmVyaWZpY2F0aW9uIGZpZWxkLlxyXG5cdFx0XHRcdFx0Y29udGludWU7IC8vIEZpeEluOiA4LjEuMi4xNS5cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHRcdFx0Ly8gR2V0IEZvcm0gRGF0YSAobGVnYWN5IGZvcm1hdCkuXHJcblx0XHRcdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHRcdFx0aWYgKCBlbGVtZW50Lm5hbWUgIT09ICggJ2NhcHRjaGFfaW5wdXQnICsgcmVzb3VyY2VfaWQgKSApIHtcclxuXHJcblx0XHRcdFx0aWYgKCBmb3JtZGF0YSAhPT0gJycgKSB7XHJcblx0XHRcdFx0XHRmb3JtZGF0YSArPSAnfic7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRlbF90eXBlID0gZWxlbWVudC50eXBlO1xyXG5cclxuXHRcdFx0XHRpZiAoIGVsZW1lbnQuY2xhc3NOYW1lLmluZGV4T2YoICd3cGRldi12YWxpZGF0ZXMtYXMtZW1haWwnICkgIT09IC0xICkge1xyXG5cdFx0XHRcdFx0ZWxfdHlwZSA9ICdlbWFpbCc7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmICggZWxlbWVudC5jbGFzc05hbWUuaW5kZXhPZiggJ3dwZGV2LXZhbGlkYXRlcy1hcy1jb3Vwb24nICkgIT09IC0xICkge1xyXG5cdFx0XHRcdFx0ZWxfdHlwZSA9ICdjb3Vwb24nO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aW5wX3ZhbHVlID0gd3BiY19lc2NhcGVfc2VyaWFsaXplZF92YWx1ZSggaW5wX3ZhbHVlICk7XHJcblxyXG5cdFx0XHRcdGlmICggZWxfdHlwZSA9PT0gJ3NlbGVjdC1vbmUnICkge1xyXG5cdFx0XHRcdFx0ZWxfdHlwZSA9ICdzZWxlY3Rib3gtb25lJztcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKCBlbF90eXBlID09PSAnc2VsZWN0LW11bHRpcGxlJyApIHtcclxuXHRcdFx0XHRcdGVsX3R5cGUgPSAnc2VsZWN0Ym94LW11bHRpcGxlJztcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGZvcm1kYXRhICs9IGVsX3R5cGUgKyAnXicgKyBlbGVtZW50Lm5hbWUgKyAnXicgKyBpbnBfdmFsdWU7XHJcblxyXG5cdFx0XHRcdC8vIEFkZCB0aXRsZS9sYWJlbCB2YWx1ZSAobGVnYWN5KS5cclxuXHRcdFx0XHR2YXIgY2xlYW5fZmllbGRfbmFtZSA9IFN0cmluZyggZWxlbWVudC5uYW1lICk7XHJcblxyXG5cdFx0XHRcdC8vIEJVR0ZJWDogcmVwbGFjZUFsbChSZWdFeHApIGlzIG5vdCBzdXBwb3J0ZWQgaW4gb2xkZXIgYnJvd3NlcnMuXHJcblx0XHRcdFx0Ly8gS2VlcCBsZWdhY3kgaW50ZW50OiByZW1vdmUgW10gc3VmZml4IG9jY3VycmVuY2VzLlxyXG5cdFx0XHRcdGNsZWFuX2ZpZWxkX25hbWUgPSBjbGVhbl9maWVsZF9uYW1lLnJlcGxhY2UoIC9cXFtcXF0vZ2ksICcnICk7XHJcblxyXG5cdFx0XHRcdHZhciByZXNvdXJjZV9pZF9zdHIgPSBTdHJpbmcoIHJlc291cmNlX2lkICk7XHJcblxyXG5cdFx0XHRcdC8vIExlZ2FjeSBhc3N1bWVkIHN1ZmZpeCBlbmRzIHdpdGggcmVzb3VyY2VfaWQsIG1ha2UgaXQgc2FmZS5cclxuXHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHQoIGNsZWFuX2ZpZWxkX25hbWUubGVuZ3RoID49IHJlc291cmNlX2lkX3N0ci5sZW5ndGggKSAmJlxyXG5cdFx0XHRcdFx0KCBjbGVhbl9maWVsZF9uYW1lLnN1YnN0ciggY2xlYW5fZmllbGRfbmFtZS5sZW5ndGggLSByZXNvdXJjZV9pZF9zdHIubGVuZ3RoICkgPT09IHJlc291cmNlX2lkX3N0ciApXHJcblx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRjbGVhbl9maWVsZF9uYW1lID0gY2xlYW5fZmllbGRfbmFtZS5zdWJzdHIoIDAsIGNsZWFuX2ZpZWxkX25hbWUubGVuZ3RoIC0gcmVzb3VyY2VfaWRfc3RyLmxlbmd0aCApO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Zm9ybWRhdGEgKz0gJ34nICsgZWxfdHlwZSArICdeJyArIGNsZWFuX2ZpZWxkX25hbWUgKyAnX3ZhbCcgKyByZXNvdXJjZV9pZCArICdeJyArIGlucF90aXRsZV92YWx1ZTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly8gVE9ETzogaGVyZSB3YXMgZnVuY3Rpb24gZm9yICdDaGVjayBpZiB2aXNpdG9yIGZpbmlzaCBkYXRlcyBzZWxlY3Rpb24uXHJcblxyXG5cdC8vIENhcHRjaGEgdmVyaWZ5LlxyXG5cdHZhciBjYXB0Y2hhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICd3cGRldl9jYXB0Y2hhX2NoYWxsZW5nZV8nICsgcmVzb3VyY2VfaWQgKTtcclxuXHJcblx0aWYgKCBjYXB0Y2hhICE9PSBudWxsICkge1xyXG5cdFx0d3BiY19mb3JtX3N1Ym1pdF9zZW5kKCByZXNvdXJjZV9pZCwgZm9ybWRhdGEsIGNhcHRjaGEudmFsdWUsIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnY2FwdGNoYV9pbnB1dCcgKyByZXNvdXJjZV9pZCApLnZhbHVlLCB3cGRldl9hY3RpdmVfbG9jYWxlICk7XHJcblx0fSBlbHNlIHtcclxuXHRcdHdwYmNfZm9ybV9zdWJtaXRfc2VuZCggcmVzb3VyY2VfaWQsIGZvcm1kYXRhLCAnJywgJycsIHdwZGV2X2FjdGl2ZV9sb2NhbGUgKTtcclxuXHR9XHJcblxyXG5cdHJldHVybjtcclxufVxyXG5cclxuXHJcbi8qKlxyXG4gKiBHYXRoZXJpbmcgcGFyYW1zIGZvciBzZW5kaW5nIEFqYXggcmVxdWVzdCBhbmQgdGhlbiBzZW5kIGl0IChsZWdhY3k6IGZvcm1fc3VibWl0X3NlbmQpLlxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IHJlc291cmNlX2lkXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgZm9ybWRhdGFcclxuICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICBjYXB0Y2hhX2NoYWxhbmdlXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgdXNlcl9jYXB0Y2hhXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgd3BkZXZfYWN0aXZlX2xvY2FsZVxyXG4gKlxyXG4gKiBAcmV0dXJuIHt1bmRlZmluZWR9IExlZ2FjeSBiZWhhdmlvci5cclxuICovXHJcbmZ1bmN0aW9uIHdwYmNfZm9ybV9zdWJtaXRfc2VuZCggcmVzb3VyY2VfaWQsIGZvcm1kYXRhLCBjYXB0Y2hhX2NoYWxhbmdlLCB1c2VyX2NhcHRjaGEsIHdwZGV2X2FjdGl2ZV9sb2NhbGUgKSB7XHJcblxyXG5cdHJlc291cmNlX2lkID0gcGFyc2VJbnQoIHJlc291cmNlX2lkLCAxMCApO1xyXG5cclxuXHR2YXIgbXlfYm9va2luZ19mb3JtID0gJyc7XHJcblx0dmFyIGJvb2tpbmdfZm9ybV90eXBlX2VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICdib29raW5nX2Zvcm1fdHlwZScgKyByZXNvdXJjZV9pZCApO1xyXG5cdGlmICggYm9va2luZ19mb3JtX3R5cGVfZWwgIT09IG51bGwgKSB7XHJcblx0XHRteV9ib29raW5nX2Zvcm0gPSBib29raW5nX2Zvcm1fdHlwZV9lbC52YWx1ZTtcclxuXHR9XHJcblxyXG5cdHZhciBteV9ib29raW5nX2hhc2ggPSAnJztcclxuXHRpZiAoIF93cGJjLmdldF9vdGhlcl9wYXJhbSggJ3RoaXNfcGFnZV9ib29raW5nX2hhc2gnICkgIT09ICcnICkge1xyXG5cdFx0bXlfYm9va2luZ19oYXNoID0gX3dwYmMuZ2V0X290aGVyX3BhcmFtKCAndGhpc19wYWdlX2Jvb2tpbmdfaGFzaCcgKTtcclxuXHR9XHJcblxyXG5cdHZhciBpc19zZW5kX2VtZWlscyA9IDE7XHJcblx0dmFyICRpc19zZW5kX2VtYWlsX3RvZ2dsZSA9IGpRdWVyeSggJyNpc19zZW5kX2VtYWlsX2Zvcl9wZW5kaW5nJyApO1xyXG5cdHZhciAkbW9kYWxfc2VuZF9lbWFpbF90b2dnbGUgPSBqUXVlcnkoICcjYm9va2luZ19mb3JtJyArIHJlc291cmNlX2lkICkuY2xvc2VzdCggJy53cGJjX21vZGFsX19hZGRfYm9va2luZ19fc2VjdGlvbicgKS5maW5kKCAnW2RhdGEtd3BiYy1hZGQtYm9va2luZy1zZW5kLWVtYWlsc10nICkuZmlyc3QoKTtcclxuXHRpZiAoICRtb2RhbF9zZW5kX2VtYWlsX3RvZ2dsZS5sZW5ndGggKSB7XHJcblx0XHQkaXNfc2VuZF9lbWFpbF90b2dnbGUgPSAkbW9kYWxfc2VuZF9lbWFpbF90b2dnbGU7XHJcblx0fVxyXG5cdGlmICggJGlzX3NlbmRfZW1haWxfdG9nZ2xlLmxlbmd0aCApIHsgLy8gRml4SW46IDguNy45LjUuXHJcblxyXG5cdFx0aXNfc2VuZF9lbWVpbHMgPSAkaXNfc2VuZF9lbWFpbF90b2dnbGUuaXMoICc6Y2hlY2tlZCcgKTtcclxuXHJcblx0XHRpZiAoIGZhbHNlID09PSBpc19zZW5kX2VtZWlscyApIHtcclxuXHRcdFx0aXNfc2VuZF9lbWVpbHMgPSAwO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0aXNfc2VuZF9lbWVpbHMgPSAxO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0dmFyIGRhdGVfZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ2RhdGVfYm9va2luZycgKyByZXNvdXJjZV9pZCApO1xyXG5cdHZhciBkYXRlX3ZhbHVlID0gKCBkYXRlX2VsICkgPyBkYXRlX2VsLnZhbHVlIDogJyc7XHJcblxyXG5cdGlmICggJycgIT09IGRhdGVfdmFsdWUgKSB7IC8vIEZpeEluOiA2LjEuMS4zLlxyXG5cdFx0d3BiY19zZW5kX2FqYXhfc3VibWl0KCByZXNvdXJjZV9pZCwgZm9ybWRhdGEsIGNhcHRjaGFfY2hhbGFuZ2UsIHVzZXJfY2FwdGNoYSwgaXNfc2VuZF9lbWVpbHMsIG15X2Jvb2tpbmdfaGFzaCwgbXlfYm9va2luZ19mb3JtLCB3cGRldl9hY3RpdmVfbG9jYWxlICk7XHJcblx0fSBlbHNlIHtcclxuXHRcdGpRdWVyeSggJyNib29raW5nX2Zvcm1fZGl2JyArIHJlc291cmNlX2lkICkuaGlkZSgpO1xyXG5cdFx0alF1ZXJ5KCAnI3N1Ym1pdGluZycgKyByZXNvdXJjZV9pZCApLmhpZGUoKTtcclxuXHR9XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHQvLyBBZGRpdGlvbmFsIGNhbGVuZGFycyBzdWJtaXQuXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdHZhciBhZGRpdGlvbmFsX2NhbGVuZGFyc19lbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnYWRkaXRpb25hbF9jYWxlbmRhcnMnICsgcmVzb3VyY2VfaWQgKTtcclxuXHRpZiAoIGFkZGl0aW9uYWxfY2FsZW5kYXJzX2VsID09PSBudWxsICkge1xyXG5cdFx0cmV0dXJuO1xyXG5cdH1cclxuXHJcblx0dmFyIGlkX2FkZGl0aW9uYWxfc3RyID0gYWRkaXRpb25hbF9jYWxlbmRhcnNfZWwudmFsdWU7XHJcblx0dmFyIGlkX2FkZGl0aW9uYWxfYXJyID0gaWRfYWRkaXRpb25hbF9zdHIuc3BsaXQoICcsJyApO1xyXG5cclxuXHQvLyBGaXhJbjogMTAuOS40LjEuXHJcblx0Zm9yICggdmFyIGlhID0gMDsgaWEgPCBpZF9hZGRpdGlvbmFsX2Fyci5sZW5ndGg7IGlhKysgKSB7XHJcblx0XHRpZF9hZGRpdGlvbmFsX2FyclsgaWEgXSA9IHBhcnNlSW50KCBpZF9hZGRpdGlvbmFsX2FyclsgaWEgXSwgMTAgKTtcclxuXHR9XHJcblxyXG5cdGlmICggISBqUXVlcnkoICcjYm9va2luZ19mb3JtX2RpdicgKyByZXNvdXJjZV9pZCApLmlzKCAnOnZpc2libGUnICkgKSB7XHJcblx0XHR3cGJjX2Jvb2tpbmdfZm9ybV9fc3Bpbl9sb2FkZXJfX3Nob3coIHJlc291cmNlX2lkICk7IC8vIFNob3cgU3Bpbm5lclxyXG5cdH1cclxuXHJcblx0Ly8gSGVscGVyOiByZXdyaXRlIGZpZWxkIG5hbWUgc3VmZml4IGZyb20gcmVzb3VyY2VfaWQgLT4gaWRfYWRkaXRpb25hbC5cclxuXHRmdW5jdGlvbiB3cGJjX3Jld3JpdGVfZmllbGRfbmFtZV9zdWZmaXgoIGZpZWxkX25hbWUsIG9sZF9pZCwgbmV3X2lkICkge1xyXG5cclxuXHRcdGZpZWxkX25hbWUgPSBTdHJpbmcoIGZpZWxkX25hbWUgKTtcclxuXHJcblx0XHR2YXIgb2xkX2lkX3N0ciA9IFN0cmluZyggb2xkX2lkICk7XHJcblx0XHR2YXIgbmV3X2lkX3N0ciA9IFN0cmluZyggbmV3X2lkICk7XHJcblxyXG5cdFx0Ly8gSGFuZGxlIGZpZWxkcyB3aXRoIFtdLlxyXG5cdFx0aWYgKFxyXG5cdFx0XHQoIGZpZWxkX25hbWUubGVuZ3RoID49ICggb2xkX2lkX3N0ci5sZW5ndGggKyAyICkgKSAmJlxyXG5cdFx0XHQoIGZpZWxkX25hbWUuc3Vic3RyKCBmaWVsZF9uYW1lLmxlbmd0aCAtICggb2xkX2lkX3N0ci5sZW5ndGggKyAyICkgKSA9PT0gKCBvbGRfaWRfc3RyICsgJ1tdJyApIClcclxuXHRcdCkge1xyXG5cdFx0XHRyZXR1cm4gZmllbGRfbmFtZS5zdWJzdHIoIDAsIGZpZWxkX25hbWUubGVuZ3RoIC0gKCBvbGRfaWRfc3RyLmxlbmd0aCArIDIgKSApICsgbmV3X2lkX3N0ciArICdbXSc7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gSGFuZGxlIGZpZWxkcyB3aXRob3V0IFtdLlxyXG5cdFx0aWYgKFxyXG5cdFx0XHQoIGZpZWxkX25hbWUubGVuZ3RoID49IG9sZF9pZF9zdHIubGVuZ3RoICkgJiZcclxuXHRcdFx0KCBmaWVsZF9uYW1lLnN1YnN0ciggZmllbGRfbmFtZS5sZW5ndGggLSBvbGRfaWRfc3RyLmxlbmd0aCApID09PSBvbGRfaWRfc3RyIClcclxuXHRcdCkge1xyXG5cdFx0XHRyZXR1cm4gZmllbGRfbmFtZS5zdWJzdHIoIDAsIGZpZWxkX25hbWUubGVuZ3RoIC0gb2xkX2lkX3N0ci5sZW5ndGggKSArIG5ld19pZF9zdHI7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gRmFsbGJhY2s6IHJldHVybiB1bmNoYW5nZWQgKHNhZmVyIHRoYW4gYnJlYWtpbmcgbmFtZSkuXHJcblx0XHRyZXR1cm4gZmllbGRfbmFtZTtcclxuXHR9XHJcblxyXG5cdGZvciAoIGlhID0gMDsgaWEgPCBpZF9hZGRpdGlvbmFsX2Fyci5sZW5ndGg7IGlhKysgKSB7XHJcblxyXG5cdFx0dmFyIGlkX2FkZGl0aW9uYWwgPSBpZF9hZGRpdGlvbmFsX2FyclsgaWEgXTtcclxuXHJcblx0XHQvLyBGaXhJbjogMTAuOS40LjEuXHJcblx0XHRpZiAoIGlkX2FkZGl0aW9uYWwgPD0gMCApIHtcclxuXHRcdFx0Y29udGludWU7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gUmVidWlsZCBmb3JtZGF0YSBmb3IgZWFjaCBhZGRpdGlvbmFsIGNhbGVuZGFyIChsZWdhY3kgYmVoYXZpb3IpLlxyXG5cdFx0dmFyIGZvcm1kYXRhX2FkZGl0aW9uYWxfYXJyID0gU3RyaW5nKCBmb3JtZGF0YSApLnNwbGl0KCAnficgKTtcclxuXHRcdHZhciBmb3JtZGF0YV9hZGRpdGlvbmFsID0gJyc7XHJcblxyXG5cdFx0Zm9yICggdmFyIGogPSAwOyBqIDwgZm9ybWRhdGFfYWRkaXRpb25hbF9hcnIubGVuZ3RoOyBqKysgKSB7XHJcblxyXG5cdFx0XHR2YXIgbXlfZm9ybV9maWVsZCA9IGZvcm1kYXRhX2FkZGl0aW9uYWxfYXJyWyBqIF0uc3BsaXQoICdeJyApO1xyXG5cclxuXHRcdFx0aWYgKCBmb3JtZGF0YV9hZGRpdGlvbmFsICE9PSAnJyApIHtcclxuXHRcdFx0XHRmb3JtZGF0YV9hZGRpdGlvbmFsICs9ICd+JztcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gU2FmZXR5OiBlbnN1cmUgd2UgaGF2ZSBhdCBsZWFzdCB0eXBlIF4gbmFtZSBeIHZhbHVlLlxyXG5cdFx0XHRpZiAoIG15X2Zvcm1fZmllbGQubGVuZ3RoIDwgMyApIHtcclxuXHRcdFx0XHRmb3JtZGF0YV9hZGRpdGlvbmFsICs9IGZvcm1kYXRhX2FkZGl0aW9uYWxfYXJyWyBqIF07XHJcblx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdG15X2Zvcm1fZmllbGRbIDEgXSA9IHdwYmNfcmV3cml0ZV9maWVsZF9uYW1lX3N1ZmZpeCggbXlfZm9ybV9maWVsZFsgMSBdLCByZXNvdXJjZV9pZCwgaWRfYWRkaXRpb25hbCApO1xyXG5cdFx0XHRmb3JtZGF0YV9hZGRpdGlvbmFsICs9IG15X2Zvcm1fZmllbGRbIDAgXSArICdeJyArIG15X2Zvcm1fZmllbGRbIDEgXSArICdeJyArIG15X2Zvcm1fZmllbGRbIDIgXTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBJZiBwYXltZW50IGZvcm0gZm9yIG1haW4gYm9va2luZyByZXNvdXJjZSBpcyBzaG93aW5nLCBhcHBlbmQgZm9yIGFkZGl0aW9uYWwgY2FsZW5kYXJzLlxyXG5cdFx0aWYgKCBqUXVlcnkoICcjZ2F0ZXdheV9wYXltZW50X2Zvcm1zJyArIHJlc291cmNlX2lkICkubGVuZ3RoID4gMCApIHtcclxuXHRcdFx0alF1ZXJ5KCAnI2dhdGV3YXlfcGF5bWVudF9mb3JtcycgKyByZXNvdXJjZV9pZCApLmFmdGVyKCAnPGRpdiBpZD1cImdhdGV3YXlfcGF5bWVudF9mb3JtcycgKyBpZF9hZGRpdGlvbmFsICsgJ1wiPjwvZGl2PicgKTtcclxuXHRcdFx0alF1ZXJ5KCAnI2dhdGV3YXlfcGF5bWVudF9mb3JtcycgKyByZXNvdXJjZV9pZCApLmFmdGVyKCAnPGRpdiBpZD1cImFqYXhfcmVzcG9uZF9pbnNlcnQnICsgaWRfYWRkaXRpb25hbCArICdcIiBzdHlsZT1cImRpc3BsYXk6bm9uZTtcIj48L2Rpdj4nICk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gRml4SW46IDguNS4yLjE3LlxyXG5cdFx0d3BiY19zZW5kX2FqYXhfc3VibWl0KCBpZF9hZGRpdGlvbmFsLCBmb3JtZGF0YV9hZGRpdGlvbmFsLCBjYXB0Y2hhX2NoYWxhbmdlLCB1c2VyX2NhcHRjaGEsIGlzX3NlbmRfZW1laWxzLCBteV9ib29raW5nX2hhc2gsIG15X2Jvb2tpbmdfZm9ybSwgd3BkZXZfYWN0aXZlX2xvY2FsZSApO1xyXG5cdH1cclxufVxyXG5cclxuXHJcbi8qKlxyXG4gKiBTZW5kIEFqYXggc3VibWl0IChsZWdhY3k6IHNlbmRfYWpheF9zdWJtaXQpLlxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IHJlc291cmNlX2lkXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgZm9ybWRhdGFcclxuICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICBjYXB0Y2hhX2NoYWxhbmdlXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgdXNlcl9jYXB0Y2hhXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSAgICAgICAgaXNfc2VuZF9lbWVpbHNcclxuICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICBteV9ib29raW5nX2hhc2hcclxuICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICBteV9ib29raW5nX2Zvcm1cclxuICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICB3cGRldl9hY3RpdmVfbG9jYWxlXHJcbiAqXHJcbiAqIEByZXR1cm4ge3VuZGVmaW5lZH0gTGVnYWN5IGJlaGF2aW9yLlxyXG4gKi9cclxuZnVuY3Rpb24gd3BiY19zZW5kX2FqYXhfc3VibWl0KHJlc291cmNlX2lkLCBmb3JtZGF0YSwgY2FwdGNoYV9jaGFsYW5nZSwgdXNlcl9jYXB0Y2hhLCBpc19zZW5kX2VtZWlscywgbXlfYm9va2luZ19oYXNoLCBteV9ib29raW5nX2Zvcm0sIHdwZGV2X2FjdGl2ZV9sb2NhbGUpIHtcclxuXHJcblx0cmVzb3VyY2VfaWQgPSBwYXJzZUludCggcmVzb3VyY2VfaWQsIDEwICk7XHJcblxyXG5cdC8vIERpc2FibGUgU3VibWl0IHwgU2hvdyBzcGluIGxvYWRlci5cclxuXHR3cGJjX2Jvb2tpbmdfZm9ybV9fb25fc3VibWl0X191aV9lbGVtZW50c19kaXNhYmxlKCByZXNvdXJjZV9pZCApO1xyXG5cclxuXHQvLyBGaXhJbjogMjAyNi0wMi0wNSAtIHBhc3MgcHJldmlldyBjb250ZXh0IHRvIGJvb2tpbmcgY3JlYXRlIEFqYXguXHJcblx0dmFyIGZvcm1fc3RhdHVzICA9IHdwYmNfX2dldF9mb3JtX3N0YXR1c19mb3Jfc3VibWl0KCByZXNvdXJjZV9pZCApO1xyXG5cdHZhciBwcmV2aWV3X2FyZ3MgPSAoZm9ybV9zdGF0dXMgPT09ICdwcmV2aWV3JykgPyB3cGJjX19nZXRfYmZiX3ByZXZpZXdfYXJnc19mcm9tX2xvY2F0aW9uKCkgOiBudWxsO1xyXG5cdHZhciAkYWRkX2Jvb2tpbmdfbW9kYWwgPSBqUXVlcnkoICcjYm9va2luZ19mb3JtJyArIHJlc291cmNlX2lkICkuY2xvc2VzdCggJyN3cGJjX21vZGFsX19hZGRfYm9va2luZ19fc2VjdGlvbicgKTtcblx0dmFyIGlzX2FsbG93X3Bhc3QgPSAwO1xuXHR2YXIgY2xhc3NpY19ib29raW5nX2NvbnRleHRfdG9rZW4gPSAnJztcblx0dmFyIGFkbWluX2Jvb2tpbmdfbm9uY2UgPSAnJztcblx0dmFyIGhhc19hZGRfYm9va2luZ19tb2RhbF9jb250ZXh0ID0gKCAkYWRkX2Jvb2tpbmdfbW9kYWwubGVuZ3RoICYmICRhZGRfYm9va2luZ19tb2RhbC5pcyggJzp2aXNpYmxlJyApICk7XG5cdGlmICggJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiBfd3BiYyApIHtcblx0XHRhZG1pbl9ib29raW5nX25vbmNlID0gU3RyaW5nKCBfd3BiYy5nZXRfb3RoZXJfcGFyYW0oICd0aGlzX3BhZ2VfYWRtaW5fYm9va2luZ19ub25jZScgKSB8fCAnJyApO1xuXHR9XG5cclxuXHRpZiAoIGhhc19hZGRfYm9va2luZ19tb2RhbF9jb250ZXh0ICkge1xyXG5cdFx0aXNfYWxsb3dfcGFzdCA9ICRhZGRfYm9va2luZ19tb2RhbC5maW5kKCAnW2RhdGEtd3BiYy1hZGQtYm9va2luZy1hbGxvdy1wYXN0XScgKS5maXJzdCgpLmlzKCAnOmNoZWNrZWQnICkgPyAxIDogMDtcclxuXHRcdGlmICggISBpc19hbGxvd19wYXN0ICkge1xyXG5cdFx0XHRpc19hbGxvd19wYXN0ID0gKCAnMScgPT09IFN0cmluZyggJGFkZF9ib29raW5nX21vZGFsLmF0dHIoICdkYXRhLXdwYmMtYWRkLWJvb2tpbmctYWxsb3ctcGFzdCcgKSB8fCAnMCcgKSApID8gMSA6IDA7XHJcblx0XHR9XHJcblx0fVxyXG5cdGlmICggISBoYXNfYWRkX2Jvb2tpbmdfbW9kYWxfY29udGV4dCAmJiAoICd1bmRlZmluZWQnICE9PSB0eXBlb2YgX3dwYmMgKSApIHtcblx0XHRpc19hbGxvd19wYXN0ID0gKCAnMScgPT09IFN0cmluZyggX3dwYmMuZ2V0X290aGVyX3BhcmFtKCAndGhpc19wYWdlX2FsbG93X3Bhc3QnICkgfHwgJzAnICkgKSA/IDEgOiAwO1xuXHRcdGNsYXNzaWNfYm9va2luZ19jb250ZXh0X3Rva2VuID0gU3RyaW5nKCBfd3BiYy5ib29raW5nX19nZXRfcGFyYW1fdmFsdWUoIHJlc291cmNlX2lkLCAnY2xhc3NpY19ib29raW5nX2NvbnRleHRfdG9rZW4nICkgfHwgJycgKTtcblx0fVxuXHJcblx0dmFyIHJlcXVlc3RfcGFyYW1zID0ge1xyXG5cdFx0J3Jlc291cmNlX2lkJyAgICAgICAgICAgICAgOiByZXNvdXJjZV9pZCxcclxuXHRcdCdkYXRlc19kZG1teXlfY3N2JyAgICAgICAgIDogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICdkYXRlX2Jvb2tpbmcnICsgcmVzb3VyY2VfaWQgKS52YWx1ZSxcclxuXHRcdCdmb3JtZGF0YScgICAgICAgICAgICAgICAgIDogZm9ybWRhdGEsXHJcblx0XHQnYm9va2luZ19oYXNoJyAgICAgICAgICAgICA6IG15X2Jvb2tpbmdfaGFzaCxcclxuXHRcdCdjdXN0b21fZm9ybScgICAgICAgICAgICAgIDogbXlfYm9va2luZ19mb3JtLFxyXG5cdFx0J2FnZ3JlZ2F0ZV9yZXNvdXJjZV9pZF9hcnInOiAoICggbnVsbCAhPT0gX3dwYmMuYm9va2luZ19fZ2V0X3BhcmFtX3ZhbHVlKCByZXNvdXJjZV9pZCwgJ2FnZ3JlZ2F0ZV9yZXNvdXJjZV9pZF9hcnInICkgKSA/IF93cGJjLmJvb2tpbmdfX2dldF9wYXJhbV92YWx1ZSggcmVzb3VyY2VfaWQsICdhZ2dyZWdhdGVfcmVzb3VyY2VfaWRfYXJyJyApLmpvaW4oICcsJyApIDogJycgKSxcclxuXHRcdCdjYXB0Y2hhX2NoYWxhbmdlJyAgICAgICAgIDogY2FwdGNoYV9jaGFsYW5nZSxcclxuXHRcdCdjYXB0Y2hhX3VzZXJfaW5wdXQnICAgICAgIDogdXNlcl9jYXB0Y2hhLFxyXG5cdFx0J2lzX2VtYWlsc19zZW5kJyAgICAgICAgICAgOiBpc19zZW5kX2VtZWlscyxcclxuXHRcdCdhY3RpdmVfbG9jYWxlJyAgICAgICAgICAgIDogd3BkZXZfYWN0aXZlX2xvY2FsZSxcclxuXHRcdCdmb3JtX3N0YXR1cycgICAgICAgICAgICAgIDogZm9ybV9zdGF0dXMsXG5cdFx0J2FsbG93X3Bhc3QnICAgICAgICAgICAgICAgOiBpc19hbGxvd19wYXN0LFxuXHRcdCdjbGFzc2ljX2Jvb2tpbmdfY29udGV4dF90b2tlbic6IGNsYXNzaWNfYm9va2luZ19jb250ZXh0X3Rva2VuLFxuXHRcdCd3cGJjX2FkbWluX2Jvb2tpbmdfbm9uY2UnICAgICA6IGFkbWluX2Jvb2tpbmdfbm9uY2Vcblx0fTtcblxyXG5cdHZhciAkdGltZV9vdmVycmlkZV9wYW5lbCA9IGpRdWVyeSggJyNib29raW5nX2Zvcm0nICsgcmVzb3VyY2VfaWQgKS5maW5kKCAnW2RhdGEtd3BiYy1hZGQtYm9va2luZy10aW1lLW92ZXJyaWRlLXBhbmVsXScgKS5maXJzdCgpO1xyXG5cdGlmICggISAkdGltZV9vdmVycmlkZV9wYW5lbC5sZW5ndGggKSB7XHJcblx0XHQkdGltZV9vdmVycmlkZV9wYW5lbCA9IGpRdWVyeSggJyN3cGJjX21vZGFsX19hZGRfYm9va2luZ19fc2VjdGlvbjp2aXNpYmxlJyApLmZpbmQoICdbZGF0YS13cGJjLWFkZC1ib29raW5nLXRpbWUtb3ZlcnJpZGUtcGFuZWxdJyApLmZpcnN0KCk7XHJcblx0fVxyXG5cdGlmIChcclxuXHRcdCAgICR0aW1lX292ZXJyaWRlX3BhbmVsLmxlbmd0aFxyXG5cdFx0JiYgJHRpbWVfb3ZlcnJpZGVfcGFuZWwuZmluZCggJ1tkYXRhLXdwYmMtYWRkLWJvb2tpbmctdGltZS1vdmVycmlkZS1lbmFibGVkXScgKS5maXJzdCgpLmlzKCAnOmNoZWNrZWQnIClcclxuXHQpIHtcclxuXHRcdHJlcXVlc3RfcGFyYW1zWyd3cGJjX3RpbWVfb3ZlcnJpZGVfZW5hYmxlZCddID0gMTtcclxuXHRcdHJlcXVlc3RfcGFyYW1zWyd3cGJjX3RpbWVfb3ZlcnJpZGVfc291cmNlJ10gID0gJHRpbWVfb3ZlcnJpZGVfcGFuZWwuYXR0ciggJ2RhdGEtd3BiYy1hZGQtYm9va2luZy10aW1lLW92ZXJyaWRlLXNvdXJjZScgKSB8fCAnJztcclxuXHRcdHJlcXVlc3RfcGFyYW1zWyd3cGJjX3RpbWVfb3ZlcnJpZGVfc3RhcnQnXSAgID0gJHRpbWVfb3ZlcnJpZGVfcGFuZWwuZmluZCggJ1tkYXRhLXdwYmMtYWRkLWJvb2tpbmctdGltZS1vdmVycmlkZS1maWVsZD1cInN0YXJ0XCJdJyApLmZpcnN0KCkudmFsKCkgfHwgJyc7XHJcblx0XHRyZXF1ZXN0X3BhcmFtc1snd3BiY190aW1lX292ZXJyaWRlX2VuZCddICAgICA9ICR0aW1lX292ZXJyaWRlX3BhbmVsLmZpbmQoICdbZGF0YS13cGJjLWFkZC1ib29raW5nLXRpbWUtb3ZlcnJpZGUtZmllbGQ9XCJlbmRcIl0nICkuZmlyc3QoKS52YWwoKSB8fCAnJztcclxuXHR9XHJcblxyXG5cdHZhciBzZWxlY3RlZF9kYXRlc19jb3VudCA9IFN0cmluZyggcmVxdWVzdF9wYXJhbXNbJ2RhdGVzX2RkbW15eV9jc3YnXSB8fCAnJyApLnNwbGl0KCAnLCcgKS5maWx0ZXIoIGZ1bmN0aW9uKCBkYXRlX3RleHQgKXtcclxuXHRcdHJldHVybiAnJyAhPT0gU3RyaW5nKCBkYXRlX3RleHQgfHwgJycgKS5yZXBsYWNlKCAvXlxccyt8XFxzKyQvZywgJycgKTtcclxuXHR9ICkubGVuZ3RoO1xyXG5cdHZhciBpc190aW1lc19hdmFpbGFiaWxpdHlfb3ZlcnJpZGUgPSAoXHJcblx0XHQgICAoIDEgPT09IHBhcnNlSW50KCByZXF1ZXN0X3BhcmFtc1snd3BiY190aW1lX292ZXJyaWRlX2VuYWJsZWQnXSB8fCAwLCAxMCApIClcclxuXHRcdCYmICggJ3RpbWVzX2F2YWlsYWJpbGl0eScgPT09IFN0cmluZyggcmVxdWVzdF9wYXJhbXNbJ3dwYmNfdGltZV9vdmVycmlkZV9zb3VyY2UnXSB8fCAnJyApIClcclxuXHQpO1xyXG5cdGlmIChcclxuXHRcdCAgIChcclxuXHRcdFx0ICAgaGFzX2FkZF9ib29raW5nX21vZGFsX2NvbnRleHRcclxuXHRcdFx0JiYgJzEnID09PSBTdHJpbmcoICRhZGRfYm9va2luZ19tb2RhbC5hdHRyKCAnZGF0YS13cGJjLWFkZC1ib29raW5nLWZvcmNlLXJlY3VycmVudC10aW1lJyApIHx8ICcwJyApXHJcblx0XHQgICApXHJcblx0XHR8fCAoXHJcblx0XHRcdCAgIGlzX3RpbWVzX2F2YWlsYWJpbGl0eV9vdmVycmlkZVxyXG5cdFx0XHQmJiAoIHNlbGVjdGVkX2RhdGVzX2NvdW50ID4gMSApXHJcblx0XHQgICApXHJcblx0KSB7XHJcblx0XHRyZXF1ZXN0X3BhcmFtc1snaXNfdXNlX2Jvb2tpbmdfcmVjdXJyZW50X3RpbWUnXSA9IDE7XHJcblx0fVxyXG5cclxuXHQvLyBJZiBwcmV2aWV3LCBwYXNzIHNlc3Npb24gaWRlbnRpZmllcnMgc28gUEhQIGNhbiBsb2FkIHRyYW5zaWVudCBzbmFwc2hvdC5cclxuXHRpZiAoIHByZXZpZXdfYXJncyAmJiBwcmV2aWV3X2FyZ3MudG9rZW4gJiYgcHJldmlld19hcmdzLmZvcm1faWQgKSB7XHJcblx0XHRyZXF1ZXN0X3BhcmFtc1snd3BiY19iZmJfcHJldmlldyddICAgICAgICAgPSAxO1xyXG5cdFx0cmVxdWVzdF9wYXJhbXNbJ3dwYmNfYmZiX3ByZXZpZXdfdG9rZW4nXSAgID0gcHJldmlld19hcmdzLnRva2VuO1xyXG5cdFx0cmVxdWVzdF9wYXJhbXNbJ3dwYmNfYmZiX3ByZXZpZXdfZm9ybV9pZCddID0gcHJldmlld19hcmdzLmZvcm1faWQ7XHJcblx0XHRyZXF1ZXN0X3BhcmFtc1snd3BiY19iZmJfcHJldmlld19ub25jZSddICAgPSBwcmV2aWV3X2FyZ3Mubm9uY2U7IC8vIG5vdGU6IFVSTCBwYXJhbSBpcyBgbm9uY2VgLlxyXG5cdH1cclxuXHJcblx0dmFyIGlzX2V4aXQgPSB3cGJjX2FqeF9ib29raW5nX19jcmVhdGUoIHJlcXVlc3RfcGFyYW1zICk7XHJcblxyXG5cdGlmICggdHJ1ZSA9PT0gaXNfZXhpdCApIHtcclxuXHRcdHJldHVybjtcclxuXHR9XHJcbn1cclxuXHJcblxyXG5cclxuLy8gPT0gSGVscGVyIEZ1bmN0aW9ucyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcblxyXG4vKipcclxuICogUGFyc2UgcXVlcnkgc3RyaW5nIGludG8ge2tleTp2YWx1ZX0gKG9sZC1icm93c2VyIHNhZmUpLlxyXG4gKlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gcXNcclxuICogQHJldHVybiB7T2JqZWN0fVxyXG4gKi9cclxuZnVuY3Rpb24gd3BiY19fcGFyc2VfcXVlcnlfc3RyaW5nKHFzKSB7XHJcblx0dmFyIG91dCA9IHt9O1xyXG5cdHFzICAgICAgPSAocXMgfHwgJycpO1xyXG5cdHFzICAgICAgPSBxcy5yZXBsYWNlKCAvXlxcPy8sICcnICk7XHJcblx0aWYgKCAhIHFzICkge1xyXG5cdFx0cmV0dXJuIG91dDtcclxuXHR9XHJcblxyXG5cdHZhciBwYXJ0cyA9IHFzLnNwbGl0KCAnJicgKTtcclxuXHRmb3IgKCB2YXIgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7IGkrKyApIHtcclxuXHRcdHZhciBrdiA9IHBhcnRzW2ldLnNwbGl0KCAnPScgKTtcclxuXHRcdHZhciBrICA9IGRlY29kZVVSSUNvbXBvbmVudCgga3ZbMF0gfHwgJycgKTtcclxuXHRcdGlmICggISBrICkge1xyXG5cdFx0XHRjb250aW51ZTtcclxuXHRcdH1cclxuXHRcdHZhciB2ICA9IGRlY29kZVVSSUNvbXBvbmVudCgga3Yuc2xpY2UoIDEgKS5qb2luKCAnPScgKSB8fCAnJyApO1xyXG5cdFx0b3V0W2tdID0gdjtcclxuXHR9XHJcblx0cmV0dXJuIG91dDtcclxufVxyXG5cclxuLyoqXHJcbiAqIERldGVjdCBwcmV2aWV3IGFyZ3MgZnJvbSBjdXJyZW50IFVSTCAoaWZyYW1lIFVSTCkuXHJcbiAqXHJcbiAqIEByZXR1cm4ge09iamVjdHxudWxsfSB7IHRva2VuLCBmb3JtX2lkLCBub25jZSB9IG9yIG51bGxcclxuICovXHJcbmZ1bmN0aW9uIHdwYmNfX2dldF9iZmJfcHJldmlld19hcmdzX2Zyb21fbG9jYXRpb24oKSB7XHJcblx0dHJ5IHtcclxuXHRcdHZhciBwID0gd3BiY19fcGFyc2VfcXVlcnlfc3RyaW5nKCAod2luZG93LmxvY2F0aW9uICYmIHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpID8gd2luZG93LmxvY2F0aW9uLnNlYXJjaCA6ICcnICk7XHJcblxyXG5cdFx0aWYgKCAhIHAud3BiY19iZmJfcHJldmlldyB8fCAocC53cGJjX2JmYl9wcmV2aWV3ID09PSAnMCcpICkge1xyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoICEgcC53cGJjX2JmYl9wcmV2aWV3X3Rva2VuIHx8ICEgcC53cGJjX2JmYl9wcmV2aWV3X2Zvcm1faWQgKSB7XHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB7XHJcblx0XHRcdHRva2VuICA6IFN0cmluZyggcC53cGJjX2JmYl9wcmV2aWV3X3Rva2VuICksXHJcblx0XHRcdGZvcm1faWQ6IHBhcnNlSW50KCBwLndwYmNfYmZiX3ByZXZpZXdfZm9ybV9pZCwgMTAgKSB8fCAwLFxyXG5cdFx0XHRub25jZSAgOiAocC5ub25jZSkgPyBTdHJpbmcoIHAubm9uY2UgKSA6ICcnXHJcblx0XHR9O1xyXG5cdH0gY2F0Y2ggKCBlICkge1xyXG5cdFx0cmV0dXJuIG51bGw7XHJcblx0fVxyXG59XHJcblxyXG4vKipcclxuICogUmVzb2x2ZSBmb3JtIHN0YXR1cyBmb3Igc3VibWl0LlxyXG4gKlxyXG4gKiBQcmlvcml0eTpcclxuICogMSkgc2hvcnRjb2RlIHBhcmFtIGV4cG9zZWQgdmlhIF93cGJjLmJvb2tpbmdfX2dldF9wYXJhbV92YWx1ZSguLi4sICdmb3JtX3N0YXR1cycpXHJcbiAqIDIpIGRldGVjdCBwcmV2aWV3IFVSTCBhcmdzXHJcbiAqIDMpIGZhbGxiYWNrOiBwdWJsaXNoZWRcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IHJlc291cmNlX2lkXHJcbiAqIEByZXR1cm4ge3N0cmluZ30gJ3ByZXZpZXcnfCdwdWJsaXNoZWQnXHJcbiAqL1xyXG5mdW5jdGlvbiB3cGJjX19nZXRfZm9ybV9zdGF0dXNfZm9yX3N1Ym1pdChyZXNvdXJjZV9pZCkge1xyXG5cclxuXHR2YXIgc3RhdHVzID0gJyc7XHJcblxyXG5cdHRyeSB7XHJcblx0XHRpZiAoICh0eXBlb2YgX3dwYmMgIT09ICd1bmRlZmluZWQnKSAmJiBfd3BiYy5ib29raW5nX19nZXRfcGFyYW1fdmFsdWUgKSB7XHJcblx0XHRcdHN0YXR1cyA9IF93cGJjLmJvb2tpbmdfX2dldF9wYXJhbV92YWx1ZSggcmVzb3VyY2VfaWQsICdmb3JtX3N0YXR1cycgKTtcclxuXHRcdH1cclxuXHR9IGNhdGNoICggZSApIHt9XHJcblxyXG5cdHN0YXR1cyA9IChzdGF0dXMgPT0gbnVsbCkgPyAnJyA6IFN0cmluZyggc3RhdHVzICk7XHJcblx0c3RhdHVzID0gc3RhdHVzLnRvTG93ZXJDYXNlKCk7XHJcblxyXG5cdC8vIFVSTC1iYXNlZCBkZXRlY3Rpb24gZm9yIHByZXZpZXcgaWZyYW1lLlxyXG5cdHZhciBwcmV2aWV3X2FyZ3MgPSB3cGJjX19nZXRfYmZiX3ByZXZpZXdfYXJnc19mcm9tX2xvY2F0aW9uKCk7XHJcblx0aWYgKCBwcmV2aWV3X2FyZ3MgKSB7XHJcblx0XHRyZXR1cm4gJ3ByZXZpZXcnO1xyXG5cdH1cclxuXHJcblx0cmV0dXJuIChzdGF0dXMgPT09ICdwcmV2aWV3JykgPyAncHJldmlldycgOiAncHVibGlzaGVkJztcclxufVxyXG5cclxuXHJcblxyXG4vLyA9PSBCYWNrd2FyZC1jb21wYXRpYmxlIHdyYXBwZXJzIChrZWVwIG9sZCBnbG9iYWwgbmFtZXMgd29ya2luZyAxMDAlIGFzIGJlZm9yZSkuID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuZnVuY3Rpb24gbXlib29raW5nX3N1Ym1pdCggc3VibWl0X2Zvcm0sIHJlc291cmNlX2lkLCB3cGRldl9hY3RpdmVfbG9jYWxlICkge1xyXG5cdHJldHVybiB3cGJjX2Jvb2tpbmdfZm9ybV9zdWJtaXQoIHN1Ym1pdF9mb3JtLCByZXNvdXJjZV9pZCwgd3BkZXZfYWN0aXZlX2xvY2FsZSApO1xyXG59XHJcbiIsInRyeSB7XHJcblx0dmFyIGV2ID0gKHR5cGVvZiBDdXN0b21FdmVudCA9PT0gJ2Z1bmN0aW9uJykgPyBuZXcgQ3VzdG9tRXZlbnQoICd3cGJjLXJlYWR5JyApIDogZG9jdW1lbnQuY3JlYXRlRXZlbnQoICdFdmVudCcgKTtcclxuXHRpZiAoIGV2LmluaXRFdmVudCApIHtcclxuXHRcdGV2LmluaXRFdmVudCggJ3dwYmMtcmVhZHknLCB0cnVlLCB0cnVlICk7XHJcblx0fVxyXG5cdGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoIGV2ICk7XHJcblx0Y29uc29sZS5sb2coICd3cGJjLXJlYWR5JyApO1xyXG59IGNhdGNoICggZSApIHtcclxuXHRjb25zb2xlLmVycm9yKCBcIldQQkMgZXZlbnQgJ3dwYmMtcmVhZHknIGZhaWxlZCFcIiwgZSApO1xyXG59XHJcbiJdLCJtYXBwaW5ncyI6ImFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUNBLFNBQUFBLFVBQUFDLGNBQUEsRUFFQSxHQUFBQyxLQUFBLENBQUFDLE9BQUEsQ0FBQUYsY0FBQSxHQUNBQSxjQUFBLENBQUFBLGNBQUEsQ0FBQUcsSUFBQSxNQUNBLENBRUEsb0JBQUFILGNBQUEsRUFDQUEsY0FBQSxDQUFBQSxjQUFBLENBQUFJLElBQUEsR0FDQSxDQUVBLE9BQUFKLGNBQUEsQ0FDQSxDQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQ0EsU0FBQUssY0FBQUMsVUFBQSxDQUFBQyxLQUFBLEVBQ0EsUUFBQUMsQ0FBQSxHQUFBQyxDQUFBLENBQUFILFVBQUEsQ0FBQUksTUFBQSxDQUFBRixDQUFBLENBQUFDLENBQUEsQ0FBQUQsQ0FBQSxJQUNBLEdBQUFGLFVBQUEsQ0FBQUUsQ0FBQSxHQUFBRCxLQUFBLEVBQ0EsWUFDQSxDQUNBLENBQ0EsYUFDQSxDQUVBO0FBQ0E7QUFDQSxHQUNBLFlBQ0EsYUFFQSxTQUFBSSxxQkFBQSxFQUNBLE9BQUFDLFFBQUEsQ0FBQUMsTUFBQSxzQ0FDQSxDQUVBLFNBQUFDLGVBQUFDLENBQUEsRUFDQSxJQUFBQSxDQUFBLEdBQUFBLENBQUEsQ0FBQUMsWUFBQSxhQUNBLElBQUFDLElBQUEsRUFBQUYsQ0FBQSxDQUFBQyxZQUFBLGNBQUFaLElBQUEsR0FBQWMsV0FBQSxHQUNBLE1BQ0EsQ0FBQUQsSUFBQSxFQUNBQSxJQUFBLFFBQ0FBLElBQUEsQ0FBQUUsT0FBQSxXQUNBRixJQUFBLENBQUFFLE9BQUEscUJBQ0FGLElBQUEsQ0FBQUUsT0FBQSxpQkFDQUYsSUFBQSxDQUFBRSxPQUFBLGFBRUEsQ0FFQSxTQUFBQyxXQUFBTCxDQUFBLEVBQ0EsSUFBQUEsQ0FBQSxRQUNBLEdBQUFELGNBQUEsQ0FBQUMsQ0FBQSxHQUFBQSxDQUFBLENBQUFNLFlBQUEsc0JBQ0FOLENBQUEsQ0FBQU8sTUFBQSxTQUNBLENBQ0EsQ0FFQSxTQUFBQyxTQUFBLEVBQ0E7QUFDQSxJQUFBQyxLQUFBLENBQUFDLFFBQUEsQ0FBQUMsZ0JBQUEsWUFDQSxRQUFBbEIsQ0FBQSxHQUFBQSxDQUFBLENBQUFnQixLQUFBLENBQUFkLE1BQUEsQ0FBQUYsQ0FBQSxHQUFBWSxVQUFBLENBQUFJLEtBQUEsQ0FBQWhCLENBQUEsR0FFQTtBQUNBaUIsUUFBQSxDQUFBRSxnQkFBQSxrQkFBQUMsQ0FBQSxFQUNBLElBQUFiLENBQUEsQ0FBQWEsQ0FBQSxDQUFBTixNQUFBLEVBQUFNLENBQUEsQ0FBQU4sTUFBQSxDQUFBTyxPQUFBLENBQUFELENBQUEsQ0FBQU4sTUFBQSxDQUFBTyxPQUFBLGlCQUNBLEdBQUFkLENBQUEsQ0FBQUssVUFBQSxDQUFBTCxDQUFBLEVBQ0EsU0FFQVUsUUFBQSxDQUFBRSxnQkFBQSxvQkFBQUMsQ0FBQSxFQUNBLElBQUFiLENBQUEsQ0FBQWEsQ0FBQSxDQUFBTixNQUFBLEVBQUFNLENBQUEsQ0FBQU4sTUFBQSxDQUFBTyxPQUFBLENBQUFELENBQUEsQ0FBQU4sTUFBQSxDQUFBTyxPQUFBLGlCQUNBLEdBQUFkLENBQUEsQ0FBQUssVUFBQSxDQUFBTCxDQUFBLEVBQ0EsR0FDQSxDQUVBLFNBQUFlLGNBQUEsRUFDQSxJQUFBbkIsb0JBQUEsVUFDQW9CLFVBQUEsQ0FBQVIsUUFBQTtBQUNBLENBRUEsR0FBQUUsUUFBQSxDQUFBTyxVQUFBLGNBQ0FQLFFBQUEsQ0FBQUUsZ0JBQUEsb0JBQUFHLGFBQUEsRUFDQSxNQUNBQSxhQUFBLEdBQ0EsQ0FDQSxLQ2xHQSxhQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FDQSxTQUFBRyxlQUFBQyxHQUFBLEVBRUEsT0FBQUMsSUFBQSxDQUFBQyxLQUFBLENBQUFELElBQUEsQ0FBQUUsU0FBQSxDQUFBSCxHQUFBLEdBQ0EsQ0FJQTtBQUNBO0FBQ0EsR0FFQSxJQUFBSSxLQUFBLFVBQUFKLEdBQUEsQ0FBQUssQ0FBQSxFQUVBO0FBQ0EsSUFBQUMsUUFBQSxDQUFBTixHQUFBLENBQUFPLFlBQUEsQ0FBQVAsR0FBQSxDQUFBTyxZQUFBLEdBQ0FDLE9BQUEsR0FDQUMsS0FBQSxJQUNBQyxNQUFBLEdBQ0EsRUFDQVYsR0FBQSxDQUFBVyxnQkFBQSxVQUFBQyxTQUFBLENBQUFDLFNBQUEsRUFDQVAsUUFBQSxDQUFBTSxTQUFBLEVBQUFDLFNBQUEsQ0FDQSxFQUVBYixHQUFBLENBQUFjLGdCQUFBLFVBQUFGLFNBQUEsRUFDQSxPQUFBTixRQUFBLENBQUFNLFNBQUEsRUFDQSxFQUdBO0FBQ0EsSUFBQUcsV0FBQSxDQUFBZixHQUFBLENBQUFnQixhQUFBLENBQUFoQixHQUFBLENBQUFnQixhQUFBLEdBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQSxDQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQ0FoQixHQUFBLENBQUFpQixvQkFBQSxVQUFBQyxXQUFBLEVBRUEsMkJBQUFILFdBQUEsYUFBQUcsV0FBQSxFQUNBLEVBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUNBbEIsR0FBQSxDQUFBbUIsY0FBQSxVQUFBRCxXQUFBLEVBRUFILFdBQUEsYUFBQUcsV0FBQSxLQUNBSCxXQUFBLGFBQUFHLFdBQUEsUUFBQUEsV0FBQSxDQUNBSCxXQUFBLGFBQUFHLFdBQUEsbUNBRUEsRUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQ0FsQixHQUFBLENBQUFvQixxQkFBQSxVQUFBQyxhQUFBO0FBRUEsSUFBQUMseUJBQUEsNkRBRUEsSUFBQUMsVUFBQSxDQUFBRCx5QkFBQSxDQUFBRSxRQUFBLENBQUFILGFBQUEsRUFFQSxPQUFBRSxVQUFBLENBQ0EsRUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFDQXZCLEdBQUEsQ0FBQXlCLGtCQUFBLFVBQUFULGFBQUEsRUFDQUQsV0FBQSxDQUFBQyxhQUFBLENBQ0EsRUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQ0FoQixHQUFBLENBQUEwQixrQkFBQSxZQUNBLE9BQUFYLFdBQUEsQ0FDQSxFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUNBZixHQUFBLENBQUEyQix3QkFBQSxVQUFBVCxXQUFBLEVBRUEsR0FBQWxCLEdBQUEsQ0FBQWlCLG9CQUFBLENBQUFDLFdBQUEsR0FFQSxPQUFBSCxXQUFBLGFBQUFHLFdBQUEsRUFDQSxNQUNBLGFBQ0EsQ0FDQSxFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQ0FsQixHQUFBLENBQUE0Qix3QkFBQSxVQUFBVixXQUFBLENBQUFXLHFCQUFBLENBQUFDLHFCQUFBLFFBRUEsSUFBQTlCLEdBQUEsQ0FBQWlCLG9CQUFBLENBQUFDLFdBQUEsVUFBQVkscUJBQUEsRUFDQTlCLEdBQUEsQ0FBQW1CLGNBQUEsQ0FBQUQsV0FBQSxFQUNBLENBRUEsUUFBQWEsU0FBQSxJQUFBRixxQkFBQSxFQUVBZCxXQUFBLGFBQUFHLFdBQUEsRUFBQWEsU0FBQSxFQUFBRixxQkFBQSxDQUFBRSxTQUFBLEVBQ0EsQ0FFQSxPQUFBaEIsV0FBQSxhQUFBRyxXQUFBLEVBQ0EsRUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUNBbEIsR0FBQSxDQUFBZ0MseUJBQUEsVUFBQWQsV0FBQSxDQUFBYSxTQUFBLENBQUFFLFVBQUEsRUFFQSxJQUFBakMsR0FBQSxDQUFBaUIsb0JBQUEsQ0FBQUMsV0FBQSxHQUNBbEIsR0FBQSxDQUFBbUIsY0FBQSxDQUFBRCxXQUFBLEVBQ0EsQ0FFQUgsV0FBQSxhQUFBRyxXQUFBLEVBQUFhLFNBQUEsRUFBQUUsVUFBQSxDQUVBLE9BQUFsQixXQUFBLGFBQUFHLFdBQUEsRUFDQSxFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQ0FsQixHQUFBLENBQUFrQyx5QkFBQSxVQUFBaEIsV0FBQSxDQUFBYSxTQUFBLEVBRUEsR0FDQS9CLEdBQUEsQ0FBQWlCLG9CQUFBLENBQUFDLFdBQUEsR0FDQSxxQkFBQUgsV0FBQSxhQUFBRyxXQUFBLEVBQUFhLFNBQUEsRUFDQSxDQUNBO0FBQ0EsR0FBQS9CLEdBQUEsQ0FBQW9CLHFCQUFBLENBQUFXLFNBQUEsR0FDQWhCLFdBQUEsYUFBQUcsV0FBQSxFQUFBYSxTQUFBLEVBQUFJLFFBQUEsQ0FBQXBCLFdBQUEsYUFBQUcsV0FBQSxFQUFBYSxTQUFBLEdBQ0EsQ0FDQSxPQUFBaEIsV0FBQSxhQUFBRyxXQUFBLEVBQUFhLFNBQUEsRUFDQSxDQUVBO0FBQ0EsRUFDQTtBQUdBO0FBQ0EsSUFBQUssVUFBQSxDQUFBcEMsR0FBQSxDQUFBcUMsWUFBQSxDQUFBckMsR0FBQSxDQUFBcUMsWUFBQSxHQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUEsQ0FDQSxDQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUNBckMsR0FBQSxDQUFBc0MsZ0NBQUEsVUFBQXBCLFdBQUEsRUFFQSwyQkFBQWtCLFVBQUEsYUFBQWxCLFdBQUEsRUFDQSxFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUNBbEIsR0FBQSxDQUFBdUMseUJBQUEsVUFBQXJCLFdBQUEsRUFFQSxHQUFBbEIsR0FBQSxDQUFBc0MsZ0NBQUEsQ0FBQXBCLFdBQUEsR0FFQSxPQUFBa0IsVUFBQSxhQUFBbEIsV0FBQSxFQUNBLE1BQ0EsYUFDQSxDQUNBLEVBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQ0FsQixHQUFBLENBQUF3Qyx5QkFBQSxVQUFBdEIsV0FBQSxDQUFBdUIsWUFBQSxFQUVBLElBQUF6QyxHQUFBLENBQUFzQyxnQ0FBQSxDQUFBcEIsV0FBQSxHQUNBa0IsVUFBQSxhQUFBbEIsV0FBQSxLQUNBa0IsVUFBQSxhQUFBbEIsV0FBQSxRQUFBQSxXQUFBLENBQ0EsQ0FFQSxRQUFBYSxTQUFBLElBQUFVLFlBQUEsRUFFQUwsVUFBQSxhQUFBbEIsV0FBQSxFQUFBYSxTQUFBLEVBQUFVLFlBQUEsQ0FBQVYsU0FBQSxFQUNBLENBRUEsT0FBQUssVUFBQSxhQUFBbEIsV0FBQSxFQUNBLEVBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQ0FsQixHQUFBLENBQUEwQywrQkFBQSxVQUFBeEIsV0FBQSxFQUVBLEdBQ0FsQixHQUFBLENBQUFzQyxnQ0FBQSxDQUFBcEIsV0FBQSxHQUNBLHFCQUFBa0IsVUFBQSxhQUFBbEIsV0FBQSxXQUNBLENBQ0EsT0FBQWtCLFVBQUEsYUFBQWxCLFdBQUEsV0FDQSxDQUVBO0FBQ0EsRUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUNBbEIsR0FBQSxDQUFBMkMsK0JBQUEsVUFBQXpCLFdBQUEsQ0FBQTBCLFNBQUEsQ0FBQWQscUJBQUEsT0FFQSxJQUFBOUIsR0FBQSxDQUFBc0MsZ0NBQUEsQ0FBQXBCLFdBQUEsR0FDQWxCLEdBQUEsQ0FBQXdDLHlCQUFBLENBQUF0QixXQUFBLGVBQ0EsQ0FFQSx3QkFBQWtCLFVBQUEsYUFBQWxCLFdBQUEsWUFDQWtCLFVBQUEsYUFBQWxCLFdBQUEsY0FDQSxDQUVBLEdBQUFZLHFCQUFBLEVBRUE7QUFDQU0sVUFBQSxhQUFBbEIsV0FBQSxXQUFBMEIsU0FBQSxDQUNBLE1BRUE7QUFDQSxRQUFBYixTQUFBLElBQUFhLFNBQUEsRUFFQVIsVUFBQSxhQUFBbEIsV0FBQSxXQUFBYSxTQUFBLEVBQUFhLFNBQUEsQ0FBQWIsU0FBQSxFQUNBLENBQ0EsQ0FFQSxPQUFBSyxVQUFBLGFBQUFsQixXQUFBLEVBQ0EsRUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQ0FsQixHQUFBLENBQUE2QyxrQ0FBQSxVQUFBM0IsV0FBQSxDQUFBNEIsYUFBQSxFQUVBLEdBQ0E5QyxHQUFBLENBQUFzQyxnQ0FBQSxDQUFBcEIsV0FBQSxHQUNBLHFCQUFBa0IsVUFBQSxhQUFBbEIsV0FBQSxZQUNBLHFCQUFBa0IsVUFBQSxhQUFBbEIsV0FBQSxXQUFBNEIsYUFBQSxFQUNBLENBQ0EsT0FBQVYsVUFBQSxhQUFBbEIsV0FBQSxXQUFBNEIsYUFBQSxFQUNBLENBRUE7QUFDQSxFQUdBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFDQTlDLEdBQUEsQ0FBQStDLHdCQUFBLFVBQUE3QixXQUFBLENBQUFhLFNBQUEsQ0FBQUUsVUFBQSxFQUVBLElBQUFqQyxHQUFBLENBQUFzQyxnQ0FBQSxDQUFBcEIsV0FBQSxHQUNBa0IsVUFBQSxhQUFBbEIsV0FBQSxLQUNBa0IsVUFBQSxhQUFBbEIsV0FBQSxRQUFBQSxXQUFBLENBQ0EsQ0FFQWtCLFVBQUEsYUFBQWxCLFdBQUEsRUFBQWEsU0FBQSxFQUFBRSxVQUFBLENBRUEsT0FBQUcsVUFBQSxhQUFBbEIsV0FBQSxFQUNBLEVBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFDQWxCLEdBQUEsQ0FBQWdELHdCQUFBLFVBQUE5QixXQUFBLENBQUFhLFNBQUEsRUFFQSxHQUNBL0IsR0FBQSxDQUFBc0MsZ0NBQUEsQ0FBQXBCLFdBQUEsR0FDQSxxQkFBQWtCLFVBQUEsYUFBQWxCLFdBQUEsRUFBQWEsU0FBQSxFQUNBLENBQ0EsT0FBQUssVUFBQSxhQUFBbEIsV0FBQSxFQUFBYSxTQUFBLEVBQ0EsQ0FFQTtBQUNBLEVBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQ0EvQixHQUFBLENBQUFpRCw4QkFBQSxVQUFBakMsYUFBQSxFQUNBb0IsVUFBQSxDQUFBcEIsYUFBQSxDQUNBLEVBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUNBaEIsR0FBQSxDQUFBa0QsOEJBQUEsWUFDQSxPQUFBZCxVQUFBLENBQ0EsRUFDQTtBQUtBO0FBQ0EsSUFBQWUsU0FBQSxDQUFBbkQsR0FBQSxDQUFBb0QsV0FBQSxDQUFBcEQsR0FBQSxDQUFBb0QsV0FBQSxHQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUEsQ0FDQSxDQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUNBcEQsR0FBQSxDQUFBcUQsWUFBQSxVQUFBbkMsV0FBQSxDQUFBMEIsU0FBQSxDQUFBZCxxQkFBQSxRQUVBLHdCQUFBcUIsU0FBQSxhQUFBakMsV0FBQSxHQUNBaUMsU0FBQSxhQUFBakMsV0FBQSxLQUNBLENBRUEsR0FBQVkscUJBQUEsRUFFQTtBQUNBcUIsU0FBQSxhQUFBakMsV0FBQSxFQUFBMEIsU0FBQSxDQUVBLE1BRUE7QUFDQSxRQUFBYixTQUFBLElBQUFhLFNBQUEsRUFFQSx3QkFBQU8sU0FBQSxhQUFBakMsV0FBQSxFQUFBYSxTQUFBLEdBQ0FvQixTQUFBLGFBQUFqQyxXQUFBLEVBQUFhLFNBQUEsS0FDQSxDQUNBLFFBQUF1QixlQUFBLElBQUFWLFNBQUEsQ0FBQWIsU0FBQSxHQUNBb0IsU0FBQSxhQUFBakMsV0FBQSxFQUFBYSxTQUFBLEVBQUF3QixJQUFBLENBQUFYLFNBQUEsQ0FBQWIsU0FBQSxFQUFBdUIsZUFBQSxHQUNBLENBQ0EsQ0FDQSxDQUVBLE9BQUFILFNBQUEsYUFBQWpDLFdBQUEsRUFDQSxFQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQ0FsQixHQUFBLENBQUF3RCxxQkFBQSxVQUFBdEMsV0FBQSxDQUFBNEIsYUFBQSxFQUVBLEdBQ0EscUJBQUFLLFNBQUEsYUFBQWpDLFdBQUEsR0FDQSxxQkFBQWlDLFNBQUEsYUFBQWpDLFdBQUEsRUFBQTRCLGFBQUEsRUFDQSxDQUNBLE9BQUFLLFNBQUEsYUFBQWpDLFdBQUEsRUFBQTRCLGFBQUEsRUFDQSxDQUVBO0FBQ0EsRUFHQTtBQUNBLElBQUFXLE9BQUEsQ0FBQXpELEdBQUEsQ0FBQTBELFNBQUEsQ0FBQTFELEdBQUEsQ0FBQTBELFNBQUEsS0FFQTFELEdBQUEsQ0FBQTJELGVBQUEsVUFBQS9DLFNBQUEsQ0FBQUMsU0FBQSxFQUNBNEMsT0FBQSxDQUFBN0MsU0FBQSxFQUFBQyxTQUFBLENBQ0EsRUFFQWIsR0FBQSxDQUFBNEQsZUFBQSxVQUFBaEQsU0FBQSxFQUNBLE9BQUE2QyxPQUFBLENBQUE3QyxTQUFBLEVBQ0EsRUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQ0FaLEdBQUEsQ0FBQTZELG9CQUFBLFlBQ0EsT0FBQUosT0FBQSxDQUNBLEVBRUE7QUFDQSxJQUFBSyxVQUFBLENBQUE5RCxHQUFBLENBQUErRCxZQUFBLENBQUEvRCxHQUFBLENBQUErRCxZQUFBLEtBRUEvRCxHQUFBLENBQUFnRSxXQUFBLFVBQUFwRCxTQUFBLENBQUFDLFNBQUEsRUFDQWlELFVBQUEsQ0FBQWxELFNBQUEsRUFBQUMsU0FBQSxDQUNBLEVBRUFiLEdBQUEsQ0FBQWlFLFdBQUEsVUFBQXJELFNBQUEsRUFDQSxPQUFBa0QsVUFBQSxDQUFBbEQsU0FBQSxFQUNBLEVBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUNBWixHQUFBLENBQUFrRSxpQkFBQSxZQUNBLE9BQUFKLFVBQUEsQ0FDQSxFQUVBO0FBRUEsT0FBQTlELEdBQUEsQ0FFQSxFQUFBSSxLQUFBLEtBQUErRCxNQUFBLEVDOWhCQUMsTUFBQSxDQUFBQyxVQUFBLE1BRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQ0FqRSxLQUFBLFVBQUFKLEdBQUEsQ0FBQUssQ0FBQSxFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFDQUwsR0FBQSxDQUFBc0UsR0FBQSxDQUFBdEUsR0FBQSxDQUFBc0UsR0FBQSxRQUNBLE1BQUFDLElBQUEsS0FBQUMsR0FBQSxHQUNBLE1BQUFDLE9BQUEsQ0FBQUEsQ0FBQSxLQUFBTCxNQUFBLENBQUFDLFVBQUEsQ0FFQSxTQUFBSyxJQUFBQyxLQUFBLENBQUFDLElBQUEsQ0FBQUMsR0FBQSxDQUFBQyxLQUFBLEVBQ0EsSUFBQUwsT0FBQSxVQUNBLElBQ0EsQ0FBQU0sT0FBQSxDQUFBSixLQUFBLEdBQUFJLE9BQUEsQ0FBQUMsSUFBQSxZQUFBSixJQUFBLEtBQUFDLEdBQUEsR0FBQUMsS0FBQSxNQUNBLE9BQ0EsQ0FDQSxDQUVBLE9BQ0FHLEdBQUEsQ0FBQUEsQ0FBQUwsSUFBQSxDQUFBQyxHQUFBLENBQUFDLEtBQUEsR0FBQUosR0FBQSxPQUFBRSxJQUFBLENBQUFDLEdBQUEsQ0FBQUMsS0FBQSxFQUNBSSxLQUFBLENBQUFBLENBQUFOLElBQUEsQ0FBQUMsR0FBQSxDQUFBQyxLQUFBLEdBQUFKLEdBQUEsU0FBQUUsSUFBQSxDQUFBQyxHQUFBLENBQUFDLEtBQUEsRUFDQUUsSUFBQSxDQUFBQSxDQUFBSixJQUFBLENBQUFDLEdBQUEsQ0FBQUMsS0FBQSxHQUFBSixHQUFBLFFBQUFFLElBQUEsQ0FBQUMsR0FBQSxDQUFBQyxLQUFBLEVBQ0FLLEtBQUEsQ0FBQUEsQ0FBQVAsSUFBQSxDQUFBUSxRQUFBLENBQUFOLEtBQUEsR0FDQUosR0FBQSxTQUFBRSxJQUFBLENBQ0FRLFFBQUEsWUFBQUMsS0FBQSxDQUFBRCxRQUFBLENBQUFFLE9BQUEsQ0FBQUMsTUFBQSxDQUFBSCxRQUFBLEVBQ0FBLFFBQUEsWUFBQUMsS0FBQSxDQUFBRCxRQUFBLENBQUFOLEtBQUEsRUFDQVUsSUFBQSxDQUFBQSxDQUFBWixJQUFBLENBQUFDLEdBQUEsQ0FBQUMsS0FBQSxJQUNBLElBQUFMLE9BQUEsVUFDQSxNQUFBZ0IsR0FBQSxJQUFBYixJQUFBLElBQUFDLEdB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