!function(S){"use strict";var f={init:function(){this.brw_datepicker(),this.submit_button(),this.ova_collapsed(),this.ova_ajax_show_total(),this.ova_ajax_show_total_after_load(),this.ova_guestspicker(),this.ova_search_ajax(),this.ova_choose_time(),this.ova_duration(),this.ova_deposit(),this.ova_remove_from_cart()},brw_datepicker:function(){var r=0,r="undefined"!=typeof brw_first_day?brw_first_day:S(".ovabrw_datetimepicker").data("firstday");"undefined"!=typeof brw_lang_general_calendar&&S.datetimepicker.setLocale(brw_lang_general_calendar);var i="";"undefined"!=typeof brw_disable_week_day&&(i=brw_disable_week_day.split(",").map(function(a){return parseInt(a,10)}));var o="d-m-Y";switch(o="undefined"!=typeof brw_date_format?brw_date_format:o){case"d-m-Y":o="DD-MM-Y";break;case"m/d/Y":o="MM/DD/Y";break;case"Y/m/d":o="Y/MM/DD";break;case"Y-m-d":o="Y-MM-DD";break;default:o="DD-MM-Y"}var a,t,n,s=new Date;"undefined"!=typeof brw_next_year&&(a=brw_next_year)&&(t=s.getFullYear(),n=parseInt(t)+parseInt(a)),S.datetimepicker.setDateFormatter({parseDate:function(a,e){e=moment(a,e);return!!e.isValid()&&e.toDate()},formatDate:function(a,e){return moment(a).format(e)}}),S(".ovabrw_datetimepicker").each(function(){var a=[],e=S(this).data("order-time");e&&(a=e);e=S(this).data("disable-week-day");e&&(i=e.toString().split(",").map(function(a){return parseInt(a,10)})),"readonly"!=S(this).data("readonly")&&(a={scrollInput:!1,dayOfWeekStart:r,minDate:s,disabledWeekDays:i,disabledDates:a,format:o,formatDate:o,timepicker:!1,autoclose:!0},t&&(a.yearStart=t),n&&(a.yearEnd=n),S(this).datetimepicker(a))}),S(".ovabrw_datetimepicker.ovabrw_start_date").focus(function(a){S(this).blur()}),S(".ovabrw_end_date").focus(function(){S(this).blur()}),S(".ovabrw_datetimepicker.ovabrw_start_date").on("click",function(a){var e=[],t=S(this).data("order-time");t&&(e=t),"readonly"!=S(this).data("readonly")&&(e={scrollInput:!1,dayOfWeekStart:r,minDate:s,disabledWeekDays:i,disabledDates:e,format:o,formatDate:o,timepicker:!1,autoclose:!0},S(this).datetimepicker(e))});var u="";S('input[name="ovabrw_pickup_date"].ovabrw_datetimepicker').on("change",function(){var e,t,r,i,a,o,n,s,d,l,c=S(this);c.val()&&c.val()!=u&&(u=c.val(),e=c.closest("form"),t=e.find(".ovabrw_checkin_field"),e.find(".ovabrw_times_field").remove(),r=e.find(".ovabrw_end_date"),i=e.find(".ovabrw-date-loading"),a=e.find('input[name="product_id"]').val(),o=e.find('input[name="ovabrw_adults"]').val(),n=e.find('input[name="ovabrw_childrens"]').val(),s=e.find('input[name="ovabrw_babies"]').val(),d=e.find('input[name="ovabrw_quantity"]').val(),l=e.find(".ajax-error"),a&&(i.show(),l.html("").hide(),S.ajax({url:ajax_object.ajax_url,type:"POST",data:{action:"ovabrw_show_time",product_id:a,adults:o,children:n,babies:s,quantity:d,pickup_date:c.val()},success:function(a){a&&("error"in(a=JSON.parse(a))?(e.find("button.booking-form-submit").prop("disabled",!0),l.html("").append(a.error).show()):(e.find("button.booking-form-submit").prop("disabled",!1),"checkout"in a&&r.val(a.checkout),"durration"in a&&t.after(a.durration),f.ova_duration(),"qty_by_guests"in a&&a.qty_by_guests&&(e.find('.ovabrw-wrapper-guestspicker input[name="ovabrw_adults"]').attr("max",a.max_adults),e.find('.ovabrw-wrapper-guestspicker input[name="ovabrw_adults"]').attr("min",a.min_adults),e.find('.ovabrw-wrapper-guestspicker input[name="ovabrw_adults"]').val(a.val_adults),e.find('.ovabrw-wrapper-guestspicker input[name="ovabrw_childrens"]').attr("max",a.max_children),e.find('.ovabrw-wrapper-guestspicker input[name="ovabrw_childrens"]').attr("min",a.min_children),e.find('.ovabrw-wrapper-guestspicker input[name="ovabrw_childrens"]').val(a.val_children),e.find('.ovabrw-wrapper-guestspicker input[name="ovabrw_babies"]').attr("max",a.max_babies),e.find('.ovabrw-wrapper-guestspicker input[name="ovabrw_babies"]').attr("min",a.min_babies),e.find('.ovabrw-wrapper-guestspicker input[name="ovabrw_babies"]').val(a.val_babies),f.ova_guests_calculate(e)),e.hasClass("booking-form")&&f.ova_ajax_show_total_after_load(e))),i.hide()}})))});var p="";S('input[name="ovabrw_request_pickup_date"].ovabrw_datetimepicker').on("change",function(){var e,t,r,i,a,o,n,s,d,l,c=S(this);c.val()&&c.val()!=p&&(p=c.val(),e=c.closest("form"),t=e.find(".ovabrw_checkin_field"),e.find(".ovabrw_times_field").remove(),r=e.find(".ovabrw_end_date"),i=e.find(".ovabrw-date-loading"),a=e.find('input[name="product_id"]').val(),o=e.find('input[name="ovabrw_adults"]').val(),n=e.find('input[name="ovabrw_childrens"]').val(),s=e.find('input[name="ovabrw_babies"]').val(),d=e.find('input[name="ovabrw_quantity"]').val(),l=e.find(".ajax-error"),i.show(),l.html("").hide(),S.ajax({url:ajax_object.ajax_url,type:"POST",data:{action:"ovabrw_show_time",product_id:a,adults:o,children:n,babies:s,quantity:d,pickup_date:c.val()},success:function(a){a&&("error"in(a=JSON.parse(a))?(e.find("button.request-form-submit").prop("disabled",!0),l.html("").append(a.error).show()):(e.find("button.request-form-submit").prop("disabled",!1),"checkout"in a&&r.val(a.checkout),"durration"in a&&t.after(a.durration),f.ova_duration(),"qty_by_guests"in a&&a.qty_by_guests&&(e.find('.ovabrw-wrapper-guestspicker input[name="ovabrw_adults"]').attr("max",a.max_adults),e.find('.ovabrw-wrapper-guestspicker input[name="ovabrw_adults"]').attr("min",a.min_adults),e.find('.ovabrw-wrapper-guestspicker input[name="ovabrw_adults"]').val(a.val_adults),e.find('.ovabrw-wrapper-guestspicker input[name="ovabrw_childrens"]').attr("max",a.max_children),e.find('.ovabrw-wrapper-guestspicker input[name="ovabrw_childrens"]').attr("min",a.min_children),e.find('.ovabrw-wrapper-guestspicker input[name="ovabrw_childrens"]').val(a.val_children),e.find('.ovabrw-wrapper-guestspicker input[name="ovabrw_babies"]').attr("max",a.max_babies),e.find('.ovabrw-wrapper-guestspicker input[name="ovabrw_babies"]').attr("min",a.min_babies),e.find('.ovabrw-wrapper-guestspicker input[name="ovabrw_babies"]').val(a.val_babies),f.ova_guests_calculate(e)),e.hasClass("request-form")&&f.ova_check_max_guests(e))),i.hide()}}))})},ova_duration:function(){S('form input[name="ovabrw_time_from"]').on("change",function(){var a=S(this),e=a.closest("form"),t=a.val(),r=e.find('input[name="product_id"]').val(),i=e.find("input.ovabrw_start_date").val(),o=e.find("input.ovabrw_end_date"),n=e.find(".ovabrw_checkout_field .ovabrw-date-loading"),s=e.find('input[name="ovabrw_adults"]').val(),d=e.find('input[name="ovabrw_childrens"]').val(),l=e.find('input[name="ovabrw_babies"]').val(),a=e.find('input[name="ovabrw_quantity"]').val(),c=e.find(".ajax-error");n.show(),o.val(""),c.html("").hide(),S.ajax({url:ajax_object.ajax_url,type:"POST",data:{action:"ovabrw_duration_change",time:t,product_id:r,adults:s,children:d,babies:l,quantity:a,pickup_date:i},success:function(a){a&&("error"in(a=JSON.parse(a))?(e.hasClass("booking-form")&&e.find("button.booking-form-submit").prop("disabled",!0),e.hasClass("request-form")&&e.find("button.request-form-submit").prop("disabled",!0),c.html("").append(a.error).show()):(e.hasClass("booking-form")&&e.find("button.booking-form-submit").prop("disabled",!1),e.hasClass("request-form")&&e.find("button.request-form-submit").prop("disabled",!1),"checkout"in a&&o.val(a.checkout),"qty_by_guests"in a&&a.qty_by_guests&&(e.find('.ovabrw-wrapper-guestspicker input[name="ovabrw_adults"]').attr("max",a.max_adults),e.find('.ovabrw-wrapper-guestspicker input[name="ovabrw_adults"]').attr("min",a.min_adults),e.find('.ovabrw-wrapper-guestspicker input[name="ovabrw_adults"]').val(a.val_adults),e.find('.ovabrw-wrapper-guestspicker input[name="ovabrw_childrens"]').attr("max",a.max_children),e.find('.ovabrw-wrapper-guestspicker input[name="ovabrw_childrens"]').attr("min",a.min_children),e.find('.ovabrw-wrapper-guestspicker input[name="ovabrw_childrens"]').val(a.val_children),e.find('.ovabrw-wrapper-guestspicker input[name="ovabrw_babies"]').attr("max",a.max_babies),e.find('.ovabrw-wrapper-guestspicker input[name="ovabrw_babies"]').attr("min",a.min_babies),e.find('.ovabrw-wrapper-guestspicker input[name="ovabrw_babies"]').val(a.val_babies),f.ova_guests_calculate(e)),e.hasClass("booking-form")&&f.ova_ajax_show_total_after_load(e),e.hasClass("request-form")&&f.ova_check_max_guests(e))),n.hide()}})})},ova_guests_calculate:function(a=null){var e,t,r;a&&(e=a.find(".ovabrw-guestspicker .gueststotal"),t=a.find('input[name="ovabrw_adults"]'),r=a.find('input[name="ovabrw_childrens"]'),a=a.find('input[name="ovabrw_babies"]'),void 0!==(t=t.val())&&t||(t=0),void 0!==(r=r.val())&&r||(r=0),void 0!==(a=a.val())&&a||(a=0),e&&e.text(parseInt(t)+parseInt(r)+parseInt(a)))},ova_check_max_guests:function(e=null){var a,t,r,i,o,n;e&&(a=e.find('input[name="product_id"]').val(),t=e.find('input[name="ovabrw_adults"]').val(),r=e.find('input[name="ovabrw_childrens"]').val(),i=e.find('input[name="ovabrw_babies"]').val(),o=e.find(".ovabrw-date-loading"),n=e.find(".ajax-error"),o.show(),n.html("").hide(),S.ajax({url:ajax_object.ajax_url,type:"POST",data:{action:"ovabrw_check_max_guests",product_id:a,adults:t,children:r,babies:i},success:function(a){a&&("error"in(a=JSON.parse(a))?(e.hasClass("request-form")&&e.find("button.request-form-submit").prop("disabled",!0),n.html("").append(a.error).show()):e.hasClass("request-form")&&e.find("button.request-form-submit").prop("disabled",!1)),o.hide()}}))},submit_button:function(){S(".ovabrw_btn_submit").on("click",function(a){var e=S(this).closest(".ovabrw_search").data("mesg_required"),t=!0;if(S(this).closest(".ovabrw_search").find(".content .wrap-error").empty(),S(this).closest(".form_ovabrw").find(".required").each(function(){S(this).val()||(t=!1,S(this).parent(".content").children(".wrap-error").append('<p class="error">'+e+"</p>"))}),!t)return a.preventDefault(),!1}),S("form.booking-form button.booking-form-submit").on("click",function(a){var e=S(this);e.addClass("disabled"),e.find(".ovabrw-submit-loading").show();var t=!0;e.closest(".ova-booking-form").find(".required").each(function(){if(!S(this).val()){var a=S(this).data("error");return S(this).closest("form.booking-form").find(".ajax-error").html("").append(a).show(),t=!1}var e=S(this).attr("type");if("checkbox"==e&&!S(this).closest(".rental_item").find("input:checked").val()){a=S(this).closest(".ovabrw-checkbox").data("error");return S(this).closest("form.booking-form").find(".ajax-error").html("").append(a).show(),t=!1}});var r=e.closest("form.booking-form").find('input[name="ovabrw-booking-terms-conditions"]');if(t&&0<r.length){if(!r.is(":checked")){r.addClass("ovabrw-required");var i=r.data("error");return e.closest("form.booking-form").find(".ajax-error").html("").append(i).show(),t=!1,S("html, body").animate({scrollTop:r.offset().top-300},1e3),e.removeClass("disabled"),e.find(".ovabrw-submit-loading").hide(),!1}r.removeClass("ovabrw-required"),t=t&&!0}if(!t)return e.removeClass("disabled"),e.find(".ovabrw-submit-loading").hide(),!1;i=e.closest("form.booking-form").find("#ovabrw-recaptcha-booking-token");if(t&&0<i.length){r=i.val();return r?(e.addClass("disabled"),e.find(".ovabrw-submit-loading").show(),e.closest(".ova-booking-form").find(".ajax-error").html("").hide(),S.ajax({url:ajax_object.ajax_url,type:"POST",data:{action:"ovabrw_verify_reCAPTCHA",token:r},success:function(a){a?(e.closest("form.booking-form").find(".ajax-error").html("").append(a).show(),e.removeClass("disabled"),e.find(".ovabrw-submit-loading").hide()):e.closest("form.booking-form").submit()}})):(i=i.attr("data-mess"),e.closest("form.booking-form").find(".ajax-error").html("").append(i).show(),e.removeClass("disabled"),e.find(".ovabrw-submit-loading").hide()),!1}}),S("form.request-form button.request-form-submit").on("click",function(a){var e=S(this);e.addClass("disabled"),e.find(".ovabrw-submit-loading").show();var t=!0;e.closest(".ova-request-form").find(".required").each(function(){if(!S(this).val()){var a=S(this).data("error");return S(this).closest("form.request-form").find(".ajax-error").html("").append(a).show(),t=!1}var e=S(this).attr("type");if("checkbox"==e&&!S(this).closest(".rental_item").find("input:checked").val()){a=S(this).closest(".ovabrw-checkbox").data("error");return S(this).closest("form.request-form").find(".ajax-error").html("").append(a).show(),t=!1}});var r=e.closest("form.request-form").find('input[name="ovabrw-request-booking-terms-conditions"]');if(t&&0<r.length){if(!r.is(":checked")){r.addClass("ovabrw-required");var i=r.data("error");return e.closest("form.request-form").find(".ajax-error").html("").append(i).show(),t=!1,S("html, body").animate({scrollTop:r.offset().top-300},1e3),e.removeClass("disabled"),e.find(".ovabrw-submit-loading").hide(),!1}r.removeClass("ovabrw-required"),t=t&&!0}if(!t)return e.removeClass("disabled"),e.find(".ovabrw-submit-loading").hide(),!1;i=e.closest("form.request-form").find("#ovabrw-recaptcha-enquiry-token");if(t&&0<i.length){r=i.val();return r?(e.addClass("disabled"),e.find(".ovabrw-submit-loading").show(),e.closest("form.request-form").find(".ajax-error").html("").hide(),S.ajax({url:ajax_object.ajax_url,type:"POST",data:{action:"ovabrw_verify_reCAPTCHA",token:r},success:function(a){a?(e.closest("form.request-form").find(".ajax-error").html("").append(a).show(),e.removeClass("disabled"),e.find(".ovabrw-submit-loading").hide()):e.closest("form.request-form").submit()}})):(i=i.attr("data-mess"),e.closest("form.request-form").find(".ajax-error").html("").append(i).show(),e.removeClass("disabled"),e.find(".ovabrw-submit-loading").hide()),!1}}),S('.ovabrw-file input[type="file"]').each(function(){S(this).on("change",function(a){a.preventDefault();var e=S(this),t=e.data("max-file-size"),r=e.data("max-file-size-msg"),i=e.data("formats"),o=e.data("file-mimes"),n=[];"object"==typeof o&&S.each(o,function(a,e){n.push(e)}),e.closest(".ovabrw-file").find(".ovabrw-file-name").html("");var s=this.files[0].name,a=this.files[0].size,o=this.files[0].type;s&&a&&o&&(e.closest(".ovabrw-file").find(".ovabrw-file-name").html(s),t<(a/1048576).toFixed(2)&&e.closest(".ovabrw-file").find(".ovabrw-file-name").html(r),-1==S.inArray(o,n)&&e.closest(".ovabrw-file").find(".ovabrw-file-name").html(i))})})},ova_collapsed:function(){S(".ovabrw-according").off().on("click",function(a){a.preventDefault(),S(this).siblings(".ovabrw_collapse_content").slideToggle()}),S(".ovabrw_open_popup").off().on("click",function(a){a.preventDefault(),S(this).siblings(".popup").css("display","block")}),S(".popup-close").on("click",function(a){a.preventDefault(),S(this).parent(".popup-inner").parent(".popup").css("display","none")}),S(".popup-close-2").on("click",function(a){a.preventDefault(),S(this).parent(".close_discount").parent(".popup-inner").parent(".popup").css("display","none")})},ova_ajax_show_total:function(){S("body").on("change","form.booking-form",function(){S(this).find('input[name="qty-by-guests"]').val()&&(S(this).find('input[name="ovabrw_pickup_date"]').on("change",function(a){return!1}),S(this).find('input[name="ovabrw_pickoff_date"]').on("change",function(a){return!1}),S(this).find('input[name="ovabrw_time_from"]').on("change",function(){return!1})),f.ova_ajax_show_total_after_load(S(this))}),S("form.booking-form").each(function(){var a=S(this),e=a.find('input[name="ovabrw_pickup_date"]').val();a.find('input[name="ovabrw_pickoff_date"]').val();e&&(S(".ovabrw_datetimepicker.ovabrw_start_date").blur(),f.ova_ajax_show_total_after_load(a))})},ova_ajax_show_total_after_load:function(r=null){var t,i,o,n,s,d,l,c,u,p,f,v=[],b=[],m={};null!=r&&(r.find('input[name="product_id"]').val()&&(c=r.find('input[name="product_id"]').val()),(t=r.find('input[name="ovabrw_pickup_date"]').val()?r.find('input[name="ovabrw_pickup_date"]').val():t)&&setTimeout(function(){var a,e;r.find('input[name="ovabrw_time_from"]:checked')&&(i=r.find('input[name="ovabrw_time_from"]:checked').val()),r.find('input[name="ovabrw_pickoff_date"]').val()&&(o=r.find('input[name="ovabrw_pickoff_date"]').val()),r.find('input[name="ovabrw_adults"]').val()&&(n=r.find('input[name="ovabrw_adults"]').val()),r.find('input[name="ovabrw_childrens"]').val()&&(s=r.find('input[name="ovabrw_childrens"]').val()),r.find('input[name="ovabrw_babies"]').val()&&(d=r.find('input[name="ovabrw_babies"]').val()),r.find('input[name="ovabrw_quantity"]').val()&&(l=r.find('input[name="ovabrw_quantity"]').val()),r.find('input[name="ova_type_deposit"]:checked').val()&&(u=r.find('input[name="ova_type_deposit"]:checked').val()),!r.find('input[name="data_custom_ckf"]')||(a=r.find('input[name="data_custom_ckf"]').data("ckf"))&&S.each(a,function(a,e){var t;"radio"==e.type&&(m[a]=r.find('input[name="'+a+'"]:checked').val()),"checkbox"==e.type&&(t=[],r.find(".ovabrw-checkbox input[type=checkbox]:checked").each(function(){t.push(S(this).val())}),m[a]=t),"select"==e.type&&(m[a]=r.find('select[name="'+a+'"]').val())}),r.find(".ovabrw-resources input[type=checkbox]:checked").each(function(){v[S(this).data("rs-key")]=S(this).val()}),p=S.extend({},v),r.find("select[name='ovabrw_service[]']").each(function(){S(this).val()&&b.push(S(this).val())}),f=S.extend({},b),t&&o&&(e=r.find(".ajax-show-total .ajax-loading-total").show(),r.find(".ajax-error").html("").hide(),r.find(".ajax-show-total .show-availables-number").html(""),r.find(".ajax-show-total .show-amount-insurance").html(""),r.find(".ajax-show-total .show-total-number").html(""),S.ajax({url:ajax_object.ajax_url,type:"POST",data:{action:"ovabrw_calculate_total",product_id:c,pickup_date:t,time_from:i,dropoff_date:o,adults:n,childrens:s,babies:d,quantity:l,deposit:u,resources:JSON.stringify(p),services:JSON.stringify(f),custom_ckf:JSON.stringify(m)},success:function(a){a=JSON.parse(a);a&&(a.error?(r.find("button.booking-form-submit").prop("disabled",!0),r.find(".ajax-show-total .ovabrw-show-amount").css("display","none"),r.find(".ajax-show-total .ovabrw-ajax-amount-insurance").hide(),r.find(".ajax-error").html("").append(a.error).show()):(r.find("button.booking-form-submit").prop("disabled",!1),a.adults_price&&r.find(".ovabrw-wrapper-guestspicker .adults-price").html("").append(a.adults_price),a.childrens_price&&r.find(".ovabrw-wrapper-guestspicker .childrens-price").html("").append(a.childrens_price),a.babies_price&&r.find(".ovabrw-wrapper-guestspicker .babies-price").html("").append(a.babies_price),r.find(".ajax-show-total .ovabrw-show-amount").css("display","flex"),"qty_by_guests"in a&&a.qty_by_guests?r.find(".ajax-show-total .ovabrw-ajax-availables").css("display","none"):r.find(".ajax-show-total .show-availables-number").html("").append(a.quantity_available),r.find(".ajax-show-total .show-amount-insurance").html("").append(a.amount_insurance),r.find(".ajax-show-total .show-total-number").html("").append(a.line_total),r.find(".ajax-show-total .ovabrw-ajax-amount-insurance").show()),e.hide())}}))},300))},ova_search_ajax:function(){function D(a){a.find(".btn-video").each(function(){S(this).on("click",function(){var e=S(this).closest(".ova-video-gallery").find(".video-container"),a=S(this).closest(".ova-video-gallery").find(".ovaicon-cancel"),t=S(this).closest(".ova-video-gallery").find(".modal-video"),r=function(a){a=a.match(/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*/);return a&&11==a[2].length?a[2]:"error"}(S(this).data("src")),i=S(this).data("controls"),o="?";o+="yes"==i.autoplay?"autoplay=1":"autoplay=0",o+="yes"==i.mute?"&mute=1":"&mute=0",o+="yes"==i.loop?"&loop=1":"&loop=0",o+="yes"==i.controls?"&controls=1":"&controls=0",o+="yes"==i.rel?"&rel=1":"&rel=0",o+="yes"==i.modest?"&modestbranding=1":"&modestbranding=0","error"!=r&&(t.attr("src","https://www.youtube.com/embed/"+r+(o+="&playlist="+r)),e.css("display","flex")),a.on("click",function(){e.hide(),t.removeAttr("src")}),S(window).click(function(a){"video-container"==a.target.className&&(e.hide(),t.removeAttr("src"))})})})}function d(a=null){var e=S(document).find(".ovabrw-search-ajax .wrap-search-ajax"),t=e.find(".filter-layout-active").attr("data-layout"),r=e.data("grid_column"),i=e.data("thumbnail-type"),o=e.find("#brw-destinations-select-box :selected").val(),n=[],s=[];e.find(".brw_custom_taxonomy_dropdown").each(function(a){var e=S(this).attr("name"),t=S(this).val();n[a]=e,s[a]=t});var d=e.find('input[name="ovabrw_pickup_date"]').val(),l=e.find('input[name="ovabrw_adults"]').val(),c=e.find('input[name="ovabrw_childrens"]').val(),u=e.find('input[name="ovabrw_babies"]').val(),p=e.find(".brw-tour-price-from").val(),f=e.find(".brw-tour-price-to").val(),v=[],b=[],m=e.find(".duration-filter:checked").val(),_=e.find(".duration-filter:checked").nextAll(".duration-filter-to").val(),h=e.find(".duration-filter:checked").nextAll(".duration-filter-type").val();e.find(".rating-filter:checked").each(function(a){v[a]=S(this).val()}),e.find(".tour-category-filter:checked").each(function(a){b[a]=S(this).val()});var w=e.find(".brw-search-ajax-result"),g=w.data("order"),k=w.data("orderby"),y=w.data("orderby_meta_key"),x=w.data("posts-per-page"),j=w.data("defautl-category"),q=w.data("show-category"),C=w.find(".ovabrw-pagination-ajax .current").attr("data-paged");e.find(".wrap-load-more").show(),S.ajax({url:ajax_object.ajax_url,type:"POST",data:{action:"ovabrw_search_ajax",order:g,orderby:k,orderby_meta_key:y,posts_per_page:x,default_category:j,show_category:q,paged:C,layout:t,grid_column:r,thumbnail_type:i,destination:o,custom_taxonomy:n,taxonomy_value:s,start_date:d,adults:l,childrens:c,babies:u,start_price:p,end_price:f,review_score:v,categories:b,duration_from:m,duration_to:_,duration_type:h,clicked:a},success:function(a){a&&(a=JSON.parse(a),a=S(a.result).fadeOut(300).fadeIn(500),w.html(a),null==(a=w.find(".tour_number_results_found").val())&&(a=0),w.closest(".wrap-search-ajax").find(".number-result-tour-found").html("").append(a),e.find(".wrap-load-more").hide(),D(e),e.find(".btn-gallery").on("click",function(){var a=S(this).data("gallery");Fancybox.show(a,{Image:{Panzoom:{zoomFriction:.7,maxScale:function(){return 3}}}})}),S(".ova-gallery-slideshow").each(function(){var a=S(this),e=a.data("options")?a.data("options"):{},t={0:{items:1,nav:!1,slideBy:1},768:{items:2,slideBy:1},1025:{items:3,slideBy:1},1300:{items:e.items}};a.owlCarousel({autoWidth:e.autoWidth,margin:e.margin,items:e.items,loop:e.loop,autoplay:e.autoplay,autoplayTimeout:e.autoplayTimeout,center:e.center,lazyLoad:e.lazyLoad,nav:e.nav,dots:e.dots,autoplayHoverPause:e.autoplayHoverPause,slideBy:e.slideBy,smartSpeed:e.smartSpeed,rtl:e.rtl,navText:['<i aria-hidden="true" class="'+e.nav_left+'"></i>','<i aria-hidden="true" class="'+e.nav_right+'"></i>'],responsive:t}),a.find(".gallery-fancybox").off("click").on("click",function(){var a=S(this).data("index"),e=S(this).closest(".ova-gallery-popup").find(".ova-data-gallery").data("gallery");Fancybox.show(e,{Image:{Panzoom:{zoomFriction:.7,maxScale:function(){return 3}}},startIndex:a})})}))}})}0<S(".ovabrw-search-ajax .wrap-search-ajax").length&&d(),S(".ovabrw-search-ajax .wrap-search-ajax .ovabrw-btn").on("click",function(a){d(!0),S("html, body").animate({scrollTop:S("#brw-search-ajax-result").offset().top-250},500);var e=S(this).closest(".wrap-search-ajax").find(".search-advanced-field-wrapper"),t=e.closest(".ovabrw-search-advanced").find(".search-advanced-input i");e.removeClass("toggled"),t.removeClass("icomoon-chevron-up"),t.addClass("icomoon-chevron-down"),S(this).closest(".wrap-search-ajax").find(".input_select_list").hide(),a.preventDefault()}),S(".ovabrw-search-ajax").on("click",".wrap-search-ajax .filter-layout",function(a){a.preventDefault();var e=S(this),t=S(".wrap-search-ajax .filter-layout-active").attr("data-layout"),r=e.attr("data-layout"),a=e.closest(".wrap-search-ajax").find(".ovabrw-products-result").data("clicked");r!=t&&(S(".wrap-search-ajax .filter-layout").removeClass("filter-layout-active"),e.addClass("filter-layout-active"),a?d(!0):d())}),S(".ovabrw-search-ajax").on("click",".wrap-search-ajax .ovabrw-tour-filter .input_select_list .term_item",function(a){a.preventDefault();var e=S(this),t=e.closest(".filter-sort").find(".input_select_input_value").val(),a=e.closest(".wrap-search-ajax").find(".brw-search-ajax-result"),e=e.closest(".wrap-search-ajax").find(".ovabrw-products-result").data("clicked");"date"==t?(a.data("order","DESC"),a.data("orderby","date"),a.data("orderby_meta_key","")):"rating_desc"==t?(a.data("order","DESC"),a.data("orderby","meta_value_num"),a.data("orderby_meta_key","_wc_average_rating")):"price_asc"==t?(a.data("order","ASC"),a.data("orderby","meta_value_num"),a.data("orderby_meta_key","_price")):"price_desc"==t&&(a.data("order","DESC"),a.data("orderby","meta_value_num"),a.data("orderby_meta_key","_price")),e?d(!0):d()}),S(document).on("click",".ovabrw-search-ajax .wrap-search-ajax .ovabrw-pagination-ajax .page-numbers",function(a){a.preventDefault();var e=S(this),t=S(".wrap-search-ajax .ovabrw-pagination-ajax .current").attr("data-paged"),r=e.attr("data-paged"),a=e.closest(".brw-search-ajax-result").find(".ovabrw-products-result").data("clicked");t!=r&&(S(window).scrollTop(0),S(".wrap-search-ajax .ovabrw-pagination-ajax .page-numbers").removeClass("current"),e.addClass("current"),a?d(!0):d())}),S(".ovabrw-tour-filter .clear-filter").on("click",function(a){a.preventDefault();var e=S(this),t=e.closest(".wrap-search-ajax"),r=t.data("adults"),i=t.data("childrens"),o=t.data("babies"),n=t.data("sort_by_default"),s=t.data("start-price"),a=t.data("end-price");e.closest(".wrap-search-ajax").find(".ovabrw-pagination-ajax").attr("data-paged",1),t.find("#brw-destinations-select-box, .brw_custom_taxonomy_dropdown").val("all").trigger("change"),t.find('input[name="ovabrw_pickup_date"]').val("").trigger("change"),t.find('input[name="ovabrw_adults"]').val(r),t.find('input[name="ovabrw_childrens"]').val(i),t.find('input[name="ovabrw_babies"]').val(o),void 0!==r&&r||(r=0),void 0!==i&&i||(i=0),void 0!==o&&o||(o=0),t.find(".ovabrw-guestspicker .gueststotal").html(r+i+o),t.find(".search-advanced-field-wrapper input:checkbox, .search-advanced-field-wrapper input:radio").removeAttr("checked"),t.find(".brw-tour-price-from").val(s),t.find(".brw-tour-price-to").val(a),t.find("#brw-tour-price-slider .ui-slider-range").css({left:"0",width:"100%"}),t.find("#brw-tour-price-slider  span").css("left","100%"),t.find("#brw-tour-price-slider .ui-slider-range + span").css("left","0"),t.find(".input_select_list .term_item ").removeClass("term_item_selected"),t.find('.input_select_list .term_item[data-id="'+n+'"]').addClass("term_item_selected");a=t.find('.input_select_list .term_item[data-id="'+n+'"]').data("value");t.find(".input_select_input").val(a),t.find(".input_select_input_value").val(n);t=t.find(".brw-search-ajax-result");"date"==n?(t.data("order","DESC"),t.data("orderby","date"),t.data("orderby_meta_key","")):"rating_desc"==n?(t.data("order","DESC"),t.data("orderby","meta_value_num"),t.data("orderby_meta_key","_wc_average_rating")):"price_asc"==n?(t.data("order","ASC"),t.data("orderby","meta_value_num"),t.data("orderby_meta_key","_price")):"price_desc"==n&&(t.data("order","DESC"),t.data("orderby","meta_value_num"),t.data("orderby_meta_key","_price")),d()}),S(document).find(".wrap-search-ajax .brw-search-ajax-result .ova-video-gallery").each(function(){S(this)}),S(document).find(".wrap-search-ajax .brw-search-ajax-result .ova-video-gallery").each(function(){S(this)})},ova_guestspicker:function(){function r(a,e,t="booking"){var r,i,o,n=a.closest(".ovabrw-wrapper-guestspicker").find('input[name="ovabrw_max_total_guest"]').val(),s=a.closest("form.booking-form"),d=a.closest("form.request-form"),l=a.closest(".guests-button").find('input[type="text"]'),c=l.val(),u=l.attr("min"),p=l.attr("max"),a=a.closest(".ovabrw-wrapper-guestspicker");if("sub"==e&&parseInt(c)>parseInt(u)&&(l.val(parseInt(c)-1),"booking"===t&&f.ova_ajax_show_total_after_load(s),"request"===t&&d.hasClass("request-form")&&f.ova_check_max_guests(d)),"sum"==e&&parseInt(c)<parseInt(p)){if(n)if(void 0!==(r=a.find(".ovabrw_adults").val())&&r||(r=0),void 0!==(i=a.find(".ovabrw_childrens").val())&&i||(i=0),void 0!==(o=a.find(".ovabrw_babies").val())&&o||(o=0),parseInt(r)+parseInt(i)+parseInt(o)>n-1)return;l.val(parseInt(c)+1),"booking"===t&&f.ova_ajax_show_total_after_load(s),"request"===t&&d.hasClass("request-form")&&f.ova_check_max_guests(d)}void 0!==(r=a.find(".ovabrw_adults").val())&&r||(r=0),void 0!==(i=a.find(".ovabrw_childrens").val())&&i||(i=0),void 0!==(o=a.find(".ovabrw_babies").val())&&o||(o=0);a=a.find(".gueststotal");a&&a.text(parseInt(r)+parseInt(i)+parseInt(o))}S("form.booking-form .ovabrw-wrapper-guestspicker").each(function(){var a=S(this),e=a.find(".ovabrw-guestspicker"),t=a.find(".ovabrw-guestspicker-content");e.on("click",function(){t.toggle()}),S(window).click(function(a){e.is(a.target)||0!==e.has(a.target).length||t.is(a.target)||0!==t.has(a.target).length||t.hide()}),a.find(".minus").on("click",function(){r(S(this),"sub","booking")}),a.find(".plus").on("click",function(){r(S(this),"sum","booking")})}),S("form.request-form .ovabrw-wrapper-guestspicker").each(function(){var a=S(this),e=a.find(".ovabrw-guestspicker"),t=a.find(".ovabrw-guestspicker-content");e.on("click",function(){t.toggle()}),S(window).click(function(a){e.is(a.target)||0!==e.has(a.target).length||t.is(a.target)||0!==t.has(a.target).length||t.hide()}),a.find(".minus").on("click",function(){r(S(this),"sub","request")}),a.find(".plus").on("click",function(){r(S(this),"sum","request")})})},ova_choose_time:function(){function a(a){var e,t,r,i,o,n,s,d,l;a&&(d=(e=a.closest("form")).find('input[name="qty-by-guests"]').val(),(n=a.val())&&(t=(s=n.split("|"))[0],r=s[1],a.closest("form").find(".ovabrw_start_date").val(t),a.closest("form").find(".ovabrw_end_date").val(r),d&&t&&r&&(i=e.find(".ovabrw-date-loading"),o=e.find('input[name="product_id"]').val(),n=e.find('input[name="ovabrw_adults"]').val(),s=e.find('input[name="ovabrw_childrens"]').val(),a=e.find('input[name="ovabrw_babies"]').val(),d=e.find('input[name="ovabrw_quantity"]').val(),l=e.find(".ajax-error"),i.show(),l.html("").hide(),S.ajax({url:ajax_object.ajax_url,type:"POST",data:{action:"ovabrw_choose_time",check_in:t,check_out:r,product_id:o,adults:n,children:s,babies:a,quantity:d},success:function(a){a&&("error"in(a=JSON.parse(a))?(e.find("button.booking-form-submit").prop("disabled",!0),l.html("").append(a.error).show()):(e.find("button.booking-form-submit").prop("disabled",!1),e.find('.ovabrw-wrapper-guestspicker input[name="ovabrw_adults"]').attr("max",a.max_adults),e.find('.ovabrw-wrapper-guestspicker input[name="ovabrw_adults"]').attr("min",a.min_adults),e.find('.ovabrw-wrapper-guestspicker input[name="ovabrw_adults"]').val(a.val_adults),e.find('.ovabrw-wrapper-guestspicker input[name="ovabrw_childrens"]').attr("max",a.max_children),e.find('.ovabrw-wrapper-guestspicker input[name="ovabrw_childrens"]').attr("min",a.min_children),e.find('.ovabrw-wrapper-guestspicker input[name="ovabrw_childrens"]').val(a.val_children),e.find('.ovabrw-wrapper-guestspicker input[name="ovabrw_babies"]').attr("max",a.max_babies),e.find('.ovabrw-wrapper-guestspicker input[name="ovabrw_babies"]').attr("min",a.min_babies),e.find('.ovabrw-wrapper-guestspicker input[name="ovabrw_babies"]').val(a.val_babies),f.ova_guests_calculate(e),e.hasClass("booking-form")&&f.ova_ajax_show_total_after_load(e),e.hasClass("request-form")&&f.ova_check_max_guests(e))),i.hide()}}))))}S(".ovabrw_fixed_time").each(function(){a(S(this))}),S(".ovabrw_fixed_time").on("change",function(){a(S(this))})},ova_deposit:function(){S("form.booking-form .ovabrw-deposit .ovabrw-type-deposit").each(function(){"full"==S(this).find('input[name="ova_type_deposit"]:checked').val()?S(this).closest(".ovabrw-deposit").find(".title-deposite").hide():S(this).closest(".ovabrw-deposit").find(".title-deposite").show()}),S("form.booking-form .ovabrw-deposit .ovabrw-type-deposit").on("change",function(){"full"==S(this).find('input[name="ova_type_deposit"]:checked').val()?S(this).closest(".ovabrw-deposit").find(".title-deposite").hide():S(this).closest(".ovabrw-deposit").find(".title-deposite").show()})},ova_remove_from_cart:function(){function e(a=""){a&&S.ajax({url:ajax_object.ajax_url,type:"POST",data:{action:"ovabrw_remove_cart",cart_item_key:a},success:function(a){""!=a&&S(".ova-menu-cart").find(".cart-total .items").html(a)}})}S(document).on("click",".remove_from_cart_button",function(){e(S(this).data("cart_item_key"))}),S(document).on("click",".cart .product-remove a.remove",function(a){a.preventDefault();a=function(a=""){var e={};if(a&&""!==a.trim()){var t=document.createElement("a");t.href=a;for(var r=t.search.slice(1).split("&"),i=0;i<r.length;i++){var o=r[i].split("="),n=decodeURIComponent(o[0]),o=decodeURIComponent(o[1]||"");e[n]=o}}return e}(S(this).attr("href")).remove_item;a&&(S(".ova-menu-cart .minicart").find('a[data-cart_item_key="'+a+'"]').click(),e(a))})}};S(document).ready(function(){f.init()})}(jQuery);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZhLWJydy1mcm9udGVuZC5taW4uanMiLCJzb3VyY2VzIjpbIm92YS1icnctZnJvbnRlbmQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uICgkKSB7XG5cdFwidXNlIHN0cmljdFwiO1xuXG4gICAgdmFyIEJyd19Gcm9udGVuZCA9IHtcbiAgICAgICBcdGluaXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICBcdFx0dGhpcy5icndfZGF0ZXBpY2tlcigpO1xuICAgICAgICAgICAgdGhpcy5zdWJtaXRfYnV0dG9uKCk7XG4gICAgICAgICAgICB0aGlzLm92YV9jb2xsYXBzZWQoKTtcbiAgICAgICAgICAgIHRoaXMub3ZhX2FqYXhfc2hvd190b3RhbCgpO1xuICAgICAgICAgICAgdGhpcy5vdmFfYWpheF9zaG93X3RvdGFsX2FmdGVyX2xvYWQoKTtcbiAgICAgICAgICAgIHRoaXMub3ZhX2d1ZXN0c3BpY2tlcigpO1xuICAgICAgICAgICAgdGhpcy5vdmFfc2VhcmNoX2FqYXgoKTtcbiAgICAgICAgICAgIHRoaXMub3ZhX2Nob29zZV90aW1lKCk7XG4gICAgICAgICAgICB0aGlzLm92YV9kdXJhdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5vdmFfZGVwb3NpdCgpO1xuICAgICAgICAgICAgdGhpcy5vdmFfcmVtb3ZlX2Zyb21fY2FydCgpO1xuICAgICAgICB9LFxuXG4gICAgICAgIGJyd19kYXRlcGlja2VyOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIC8vIGdldCBmaXJzdGRheVxuICAgICAgICAgICAgdmFyIGZpcnN0RGF5ID0gMDtcbiAgICAgICAgICAgIGlmICggdHlwZW9mIGJyd19maXJzdF9kYXkgIT09ICd1bmRlZmluZWQnICkge1xuICAgICAgICAgICAgICAgIGZpcnN0RGF5ID0gYnJ3X2ZpcnN0X2RheTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZmlyc3REYXkgPSAkKCcub3ZhYnJ3X2RhdGV0aW1lcGlja2VyJykuZGF0YSgnZmlyc3RkYXknKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyogQ2FsZW5kYXIgbGFuZ3VhZ2UgKi9cbiAgICAgICAgICAgIGlmICggdHlwZW9mIGJyd19sYW5nX2dlbmVyYWxfY2FsZW5kYXIgIT09ICd1bmRlZmluZWQnICkge1xuICAgICAgICAgICAgICAgICQuZGF0ZXRpbWVwaWNrZXIuc2V0TG9jYWxlKCBicndfbGFuZ19nZW5lcmFsX2NhbGVuZGFyICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qIERpc2FibGVkIFdlZWtEYXlzICovXG4gICAgICAgICAgICB2YXIgZGlzYWJsZWRXZWVrRGF5cyA9ICcnO1xuICAgICAgICAgICAgaWYgKCB0eXBlb2YgYnJ3X2Rpc2FibGVfd2Vla19kYXkgIT09ICd1bmRlZmluZWQnICkge1xuICAgICAgICAgICAgICAgIGRpc2FibGVkV2Vla0RheXMgPSBicndfZGlzYWJsZV93ZWVrX2RheS5zcGxpdCgnLCcpLm1hcChmdW5jdGlvbihpdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUludChpdGVtLCAxMCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciBkYXRlX2Zvcm1hdCA9ICdkLW0tWSc7XG4gICAgICAgICAgICBpZiAoIHR5cGVvZiBicndfZGF0ZV9mb3JtYXQgIT09ICd1bmRlZmluZWQnICkge1xuICAgICAgICAgICAgICAgIGRhdGVfZm9ybWF0ID0gYnJ3X2RhdGVfZm9ybWF0O1xuICAgICAgICAgICAgfSAgICBcbiAgICAgICAgICAgIHN3aXRjaCggZGF0ZV9mb3JtYXQgKXtcbiAgICAgICAgICAgICAgICBjYXNlICdkLW0tWSc6XG4gICAgICAgICAgICAgICAgICAgIGRhdGVfZm9ybWF0ID0gJ0RELU1NLVknO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdtL2QvWSc6XG4gICAgICAgICAgICAgICAgICAgIGRhdGVfZm9ybWF0ID0gJ01NL0REL1knO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdZL20vZCc6XG4gICAgICAgICAgICAgICAgICAgIGRhdGVfZm9ybWF0ID0gJ1kvTU0vREQnO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdZLW0tZCc6XG4gICAgICAgICAgICAgICAgICAgIGRhdGVfZm9ybWF0ID0gJ1ktTU0tREQnO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBkYXRlX2Zvcm1hdCA9ICdERC1NTS1ZJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIHRvZGF5ID0gbmV3IERhdGUoKTtcblxuICAgICAgICAgICAgdmFyIG5leHRZZWFyLCB5ZWFyU3RhcnQsIHllYXJFbmQ7XG4gICAgICAgICAgICBpZiAoIHR5cGVvZiBicndfbmV4dF95ZWFyICE9PSAndW5kZWZpbmVkJyApIHtcbiAgICAgICAgICAgICAgICBuZXh0WWVhciA9IGJyd19uZXh0X3llYXI7XG5cbiAgICAgICAgICAgICAgICBpZiAoIG5leHRZZWFyICkge1xuICAgICAgICAgICAgICAgICAgICB5ZWFyU3RhcnQgICA9IHRvZGF5LmdldEZ1bGxZZWFyKCk7XG4gICAgICAgICAgICAgICAgICAgIHllYXJFbmQgICAgID0gcGFyc2VJbnQoIHllYXJTdGFydCApICsgcGFyc2VJbnQoIG5leHRZZWFyICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBTZXR1cCBNYXNrIGRhdGUgZm9yIGRhdGV0aW1lcGlja2VyIHZpYSBtb21lbnQgbGlicmFyeVxuICAgICAgICAgICAgJC5kYXRldGltZXBpY2tlci5zZXREYXRlRm9ybWF0dGVyKHtcbiAgICAgICAgICAgICAgICBwYXJzZURhdGU6IGZ1bmN0aW9uIChkYXRlLCBmb3JtYXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSBtb21lbnQoZGF0ZSwgZm9ybWF0KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGQuaXNWYWxpZCgpID8gZC50b0RhdGUoKSA6IGZhbHNlO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgZm9ybWF0RGF0ZTogZnVuY3Rpb24gKGRhdGUsIGZvcm1hdCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9tZW50KGRhdGUpLmZvcm1hdChmb3JtYXQpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgJCgnLm92YWJyd19kYXRldGltZXBpY2tlcicpLmVhY2goZnVuY3Rpb24oKXtcblxuICAgICAgICAgICAgICAgIC8qIERpc2FibGUgRGF0ZSAqL1xuICAgICAgICAgICAgICAgIHZhciBkaXNhYmxlZERhdGVzID0gW107XG4gICAgICAgICAgICAgICAgdmFyIG9yZGVyX3RpbWUgPSAkKHRoaXMpLmRhdGEoICdvcmRlci10aW1lJyApO1xuXG4gICAgICAgICAgICAgICAgaWYgKCBvcmRlcl90aW1lICkge1xuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZERhdGVzID0gb3JkZXJfdGltZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgdG91ckRpc2FibGVXZWVrRGF5ID0gJCh0aGlzKS5kYXRhKCdkaXNhYmxlLXdlZWstZGF5Jyk7XG4gICAgICAgICAgICAgICAgaWYgKCB0b3VyRGlzYWJsZVdlZWtEYXkgKSB7XG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkV2Vla0RheXMgPSB0b3VyRGlzYWJsZVdlZWtEYXkudG9TdHJpbmcoKS5zcGxpdCgnLCcpLm1hcChmdW5jdGlvbihpdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQoIGl0ZW0sIDEwICk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciByZWFkb25seSA9ICQodGhpcykuZGF0YSgncmVhZG9ubHknKTtcblxuICAgICAgICAgICAgICAgIGlmICggcmVhZG9ubHkgIT0gJ3JlYWRvbmx5JyApIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGVQaWNrZXJPcHRpb25zID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsSW5wdXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF5T2ZXZWVrU3RhcnQ6IGZpcnN0RGF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgbWluRGF0ZTogdG9kYXksXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZFdlZWtEYXlzOiBkaXNhYmxlZFdlZWtEYXlzLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWREYXRlczogZGlzYWJsZWREYXRlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogZGF0ZV9mb3JtYXQsXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXREYXRlOiBkYXRlX2Zvcm1hdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVwaWNrZXI6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXV0b2Nsb3NlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCB5ZWFyU3RhcnQgKSBkYXRlUGlja2VyT3B0aW9ucy55ZWFyU3RhcnQgPSB5ZWFyU3RhcnQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICggeWVhckVuZCApIGRhdGVQaWNrZXJPcHRpb25zLnllYXJFbmQgPSB5ZWFyRW5kO1xuXG4gICAgICAgICAgICAgICAgICAgICQodGhpcykuZGF0ZXRpbWVwaWNrZXIoZGF0ZVBpY2tlck9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAkKCcub3ZhYnJ3X2RhdGV0aW1lcGlja2VyLm92YWJyd19zdGFydF9kYXRlJykuZm9jdXMoZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgICQodGhpcykuYmx1cigpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICQoJy5vdmFicndfZW5kX2RhdGUnKS5mb2N1cyhmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAkKHRoaXMpLmJsdXIoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAkKCcub3ZhYnJ3X2RhdGV0aW1lcGlja2VyLm92YWJyd19zdGFydF9kYXRlJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZSl7XG4gICAgICAgICAgICAgICAgLyogRGlzYWJsZSBEYXRlICovXG4gICAgICAgICAgICAgICAgdmFyIGRpc2FibGVkRGF0ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICB2YXIgb3JkZXJfdGltZSA9ICQodGhpcykuZGF0YSggJ29yZGVyLXRpbWUnICk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIG9yZGVyX3RpbWUgKSB7XG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkRGF0ZXMgPSBvcmRlcl90aW1lO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciByZWFkb25seSA9ICQodGhpcykuZGF0YSgncmVhZG9ubHknKTtcblxuICAgICAgICAgICAgICAgIGlmICggcmVhZG9ubHkgIT0gJ3JlYWRvbmx5JyApIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGVQaWNrZXJPcHRpb25zID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsSW5wdXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF5T2ZXZWVrU3RhcnQ6IGZpcnN0RGF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgbWluRGF0ZTogdG9kYXksXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZFdlZWtEYXlzOiBkaXNhYmxlZFdlZWtEYXlzLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWREYXRlczogZGlzYWJsZWREYXRlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogZGF0ZV9mb3JtYXQsXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXREYXRlOiBkYXRlX2Zvcm1hdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVwaWNrZXI6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXV0b2Nsb3NlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICQodGhpcykuZGF0ZXRpbWVwaWNrZXIoZGF0ZVBpY2tlck9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvLyBCb29raW5nIEZvcm1cbiAgICAgICAgICAgIHZhciBjdXJyZW50Q2hlY2tJbiA9ICcnO1xuXG4gICAgICAgICAgICAkKCdpbnB1dFtuYW1lPVwib3ZhYnJ3X3BpY2t1cF9kYXRlXCJdLm92YWJyd19kYXRldGltZXBpY2tlcicpLm9uKCAnY2hhbmdlJywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoYXQgPSAkKHRoaXMpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCB0aGF0LnZhbCgpICYmIHRoYXQudmFsKCkgIT0gY3VycmVudENoZWNrSW4gKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDaGVja0luICA9IHRoYXQudmFsKCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50Rm9ybSA9IHRoYXQuY2xvc2VzdCgnZm9ybScpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgY2hlY2tJbiAgICAgPSBjdXJyZW50Rm9ybS5maW5kKCcub3ZhYnJ3X2NoZWNraW5fZmllbGQnKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRpbWVzICAgICAgID0gY3VycmVudEZvcm0uZmluZCgnLm92YWJyd190aW1lc19maWVsZCcpLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgY2hlY2tPdXQgICAgPSBjdXJyZW50Rm9ybS5maW5kKCcub3ZhYnJ3X2VuZF9kYXRlJyk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhamF4TG9hZGluZyA9IGN1cnJlbnRGb3JtLmZpbmQoJy5vdmFicnctZGF0ZS1sb2FkaW5nJyk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBwcm9kdWN0SUQgICA9IGN1cnJlbnRGb3JtLmZpbmQoJ2lucHV0W25hbWU9XCJwcm9kdWN0X2lkXCJdJykudmFsKCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhZHVsdHMgICAgICA9IGN1cnJlbnRGb3JtLmZpbmQoJ2lucHV0W25hbWU9XCJvdmFicndfYWR1bHRzXCJdJykudmFsKCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjaGlsZHJlbiAgICA9IGN1cnJlbnRGb3JtLmZpbmQoJ2lucHV0W25hbWU9XCJvdmFicndfY2hpbGRyZW5zXCJdJykudmFsKCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBiYWJpZXMgICAgICA9IGN1cnJlbnRGb3JtLmZpbmQoJ2lucHV0W25hbWU9XCJvdmFicndfYmFiaWVzXCJdJykudmFsKCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBxdWFudGl0eSAgICA9IGN1cnJlbnRGb3JtLmZpbmQoJ2lucHV0W25hbWU9XCJvdmFicndfcXVhbnRpdHlcIl0nKS52YWwoKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yICAgICAgID0gY3VycmVudEZvcm0uZmluZCgnLmFqYXgtZXJyb3InKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoIHByb2R1Y3RJRCApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFqYXhMb2FkaW5nLnNob3coKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yLmh0bWwoJycpLmhpZGUoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IGFqYXhfb2JqZWN0LmFqYXhfdXJsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdQT1NUJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246ICdvdmFicndfc2hvd190aW1lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjdF9pZDogcHJvZHVjdElELFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZHVsdHM6IGFkdWx0cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWJpZXM6IGJhYmllcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhbnRpdHk6IHF1YW50aXR5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaWNrdXBfZGF0ZTogdGhhdC52YWwoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihyZXNwb25zZSl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcmVzcG9uc2UgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IEpTT04ucGFyc2UocmVzcG9uc2UpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICdlcnJvcicgaW4gZGF0YSApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Rm9ybS5maW5kKCdidXR0b24uYm9va2luZy1mb3JtLXN1Ym1pdCcpLnByb3AoJ2Rpc2FibGVkJywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IuaHRtbCgnJykuYXBwZW5kKGRhdGFbJ2Vycm9yJ10pLnNob3coKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZvcm0uZmluZCgnYnV0dG9uLmJvb2tpbmctZm9ybS1zdWJtaXQnKS5wcm9wKCdkaXNhYmxlZCcsIGZhbHNlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJ2NoZWNrb3V0JyBpbiBkYXRhICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja091dC52YWwoZGF0YVsnY2hlY2tvdXQnXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAnZHVycmF0aW9uJyBpbiBkYXRhICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja0luLmFmdGVyKGRhdGFbJ2R1cnJhdGlvbiddKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCcndfRnJvbnRlbmQub3ZhX2R1cmF0aW9uKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBRdWFudGl0eSBieSBHdWVzdHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICdxdHlfYnlfZ3Vlc3RzJyBpbiBkYXRhICYmIGRhdGEucXR5X2J5X2d1ZXN0cyApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZvcm0uZmluZCgnLm92YWJydy13cmFwcGVyLWd1ZXN0c3BpY2tlciBpbnB1dFtuYW1lPVwib3ZhYnJ3X2FkdWx0c1wiXScpLmF0dHIoJ21heCcsIGRhdGFbJ21heF9hZHVsdHMnXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGb3JtLmZpbmQoJy5vdmFicnctd3JhcHBlci1ndWVzdHNwaWNrZXIgaW5wdXRbbmFtZT1cIm92YWJyd19hZHVsdHNcIl0nKS5hdHRyKCdtaW4nLCBkYXRhWydtaW5fYWR1bHRzJ10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Rm9ybS5maW5kKCcub3ZhYnJ3LXdyYXBwZXItZ3Vlc3RzcGlja2VyIGlucHV0W25hbWU9XCJvdmFicndfYWR1bHRzXCJdJykudmFsKGRhdGFbJ3ZhbF9hZHVsdHMnXSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZvcm0uZmluZCgnLm92YWJydy13cmFwcGVyLWd1ZXN0c3BpY2tlciBpbnB1dFtuYW1lPVwib3ZhYnJ3X2NoaWxkcmVuc1wiXScpLmF0dHIoJ21heCcsIGRhdGFbJ21heF9jaGlsZHJlbiddKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZvcm0uZmluZCgnLm92YWJydy13cmFwcGVyLWd1ZXN0c3BpY2tlciBpbnB1dFtuYW1lPVwib3ZhYnJ3X2NoaWxkcmVuc1wiXScpLmF0dHIoJ21pbicsIGRhdGFbJ21pbl9jaGlsZHJlbiddKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZvcm0uZmluZCgnLm92YWJydy13cmFwcGVyLWd1ZXN0c3BpY2tlciBpbnB1dFtuYW1lPVwib3ZhYnJ3X2NoaWxkcmVuc1wiXScpLnZhbChkYXRhWyd2YWxfY2hpbGRyZW4nXSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZvcm0uZmluZCgnLm92YWJydy13cmFwcGVyLWd1ZXN0c3BpY2tlciBpbnB1dFtuYW1lPVwib3ZhYnJ3X2JhYmllc1wiXScpLmF0dHIoJ21heCcsIGRhdGFbJ21heF9iYWJpZXMnXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGb3JtLmZpbmQoJy5vdmFicnctd3JhcHBlci1ndWVzdHNwaWNrZXIgaW5wdXRbbmFtZT1cIm92YWJyd19iYWJpZXNcIl0nKS5hdHRyKCdtaW4nLCBkYXRhWydtaW5fYmFiaWVzJ10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Rm9ybS5maW5kKCcub3ZhYnJ3LXdyYXBwZXItZ3Vlc3RzcGlja2VyIGlucHV0W25hbWU9XCJvdmFicndfYmFiaWVzXCJdJykudmFsKGRhdGFbJ3ZhbF9iYWJpZXMnXSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnJ3X0Zyb250ZW5kLm92YV9ndWVzdHNfY2FsY3VsYXRlKCBjdXJyZW50Rm9ybSApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY3VycmVudEZvcm0uaGFzQ2xhc3MoJ2Jvb2tpbmctZm9ybScpICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCcndfRnJvbnRlbmQub3ZhX2FqYXhfc2hvd190b3RhbF9hZnRlcl9sb2FkKGN1cnJlbnRGb3JtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhamF4TG9hZGluZy5oaWRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIFJlcXVlc3QgQm9va2luZ1xuICAgICAgICAgICAgdmFyIGN1cnJlbnRDaGVja0luUkIgPSAnJztcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgJCgnaW5wdXRbbmFtZT1cIm92YWJyd19yZXF1ZXN0X3BpY2t1cF9kYXRlXCJdLm92YWJyd19kYXRldGltZXBpY2tlcicpLm9uKCAnY2hhbmdlJywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoYXQgPSAkKHRoaXMpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCB0aGF0LnZhbCgpICYmIHRoYXQudmFsKCkgIT0gY3VycmVudENoZWNrSW5SQiApIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudENoZWNrSW5SQiAgPSB0aGF0LnZhbCgpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgY3VycmVudEZvcm0gPSB0aGF0LmNsb3Nlc3QoJ2Zvcm0nKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNoZWNrSW4gICAgID0gY3VycmVudEZvcm0uZmluZCgnLm92YWJyd19jaGVja2luX2ZpZWxkJyk7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0aW1lcyAgICAgICA9IGN1cnJlbnRGb3JtLmZpbmQoJy5vdmFicndfdGltZXNfZmllbGQnKS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNoZWNrT3V0ICAgID0gY3VycmVudEZvcm0uZmluZCgnLm92YWJyd19lbmRfZGF0ZScpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgYWpheExvYWRpbmcgPSBjdXJyZW50Rm9ybS5maW5kKCcub3ZhYnJ3LWRhdGUtbG9hZGluZycpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcHJvZHVjdElEICAgPSBjdXJyZW50Rm9ybS5maW5kKCdpbnB1dFtuYW1lPVwicHJvZHVjdF9pZFwiXScpLnZhbCgpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgYWR1bHRzICAgICAgPSBjdXJyZW50Rm9ybS5maW5kKCdpbnB1dFtuYW1lPVwib3ZhYnJ3X2FkdWx0c1wiXScpLnZhbCgpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgY2hpbGRyZW4gICAgPSBjdXJyZW50Rm9ybS5maW5kKCdpbnB1dFtuYW1lPVwib3ZhYnJ3X2NoaWxkcmVuc1wiXScpLnZhbCgpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgYmFiaWVzICAgICAgPSBjdXJyZW50Rm9ybS5maW5kKCdpbnB1dFtuYW1lPVwib3ZhYnJ3X2JhYmllc1wiXScpLnZhbCgpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcXVhbnRpdHkgICAgPSBjdXJyZW50Rm9ybS5maW5kKCdpbnB1dFtuYW1lPVwib3ZhYnJ3X3F1YW50aXR5XCJdJykudmFsKCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBlcnJvciAgICAgICA9IGN1cnJlbnRGb3JtLmZpbmQoJy5hamF4LWVycm9yJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgYWpheExvYWRpbmcuc2hvdygpO1xuICAgICAgICAgICAgICAgICAgICBlcnJvci5odG1sKCcnKS5oaWRlKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogYWpheF9vYmplY3QuYWpheF91cmwsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnUE9TVCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogJ292YWJyd19zaG93X3RpbWUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3RfaWQ6IHByb2R1Y3RJRCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZHVsdHM6IGFkdWx0cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogY2hpbGRyZW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFiaWVzOiBiYWJpZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhbnRpdHk6IHF1YW50aXR5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpY2t1cF9kYXRlOiB0aGF0LnZhbCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihyZXNwb25zZSl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCByZXNwb25zZSApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBKU09OLnBhcnNlKHJlc3BvbnNlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICdlcnJvcicgaW4gZGF0YSApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGb3JtLmZpbmQoJ2J1dHRvbi5yZXF1ZXN0LWZvcm0tc3VibWl0JykucHJvcCgnZGlzYWJsZWQnLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yLmh0bWwoJycpLmFwcGVuZChkYXRhWydlcnJvciddKS5zaG93KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Rm9ybS5maW5kKCdidXR0b24ucmVxdWVzdC1mb3JtLXN1Ym1pdCcpLnByb3AoJ2Rpc2FibGVkJywgZmFsc2UpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICdjaGVja291dCcgaW4gZGF0YSApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja091dC52YWwoZGF0YVsnY2hlY2tvdXQnXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJ2R1cnJhdGlvbicgaW4gZGF0YSApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja0luLmFmdGVyKGRhdGFbJ2R1cnJhdGlvbiddKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnJ3X0Zyb250ZW5kLm92YV9kdXJhdGlvbigpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBRdWFudGl0eSBieSBHdWVzdHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJ3F0eV9ieV9ndWVzdHMnIGluIGRhdGEgJiYgZGF0YS5xdHlfYnlfZ3Vlc3RzICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGb3JtLmZpbmQoJy5vdmFicnctd3JhcHBlci1ndWVzdHNwaWNrZXIgaW5wdXRbbmFtZT1cIm92YWJyd19hZHVsdHNcIl0nKS5hdHRyKCdtYXgnLCBkYXRhWydtYXhfYWR1bHRzJ10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGb3JtLmZpbmQoJy5vdmFicnctd3JhcHBlci1ndWVzdHNwaWNrZXIgaW5wdXRbbmFtZT1cIm92YWJyd19hZHVsdHNcIl0nKS5hdHRyKCdtaW4nLCBkYXRhWydtaW5fYWR1bHRzJ10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGb3JtLmZpbmQoJy5vdmFicnctd3JhcHBlci1ndWVzdHNwaWNrZXIgaW5wdXRbbmFtZT1cIm92YWJyd19hZHVsdHNcIl0nKS52YWwoZGF0YVsndmFsX2FkdWx0cyddKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGb3JtLmZpbmQoJy5vdmFicnctd3JhcHBlci1ndWVzdHNwaWNrZXIgaW5wdXRbbmFtZT1cIm92YWJyd19jaGlsZHJlbnNcIl0nKS5hdHRyKCdtYXgnLCBkYXRhWydtYXhfY2hpbGRyZW4nXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZvcm0uZmluZCgnLm92YWJydy13cmFwcGVyLWd1ZXN0c3BpY2tlciBpbnB1dFtuYW1lPVwib3ZhYnJ3X2NoaWxkcmVuc1wiXScpLmF0dHIoJ21pbicsIGRhdGFbJ21pbl9jaGlsZHJlbiddKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Rm9ybS5maW5kKCcub3ZhYnJ3LXdyYXBwZXItZ3Vlc3RzcGlja2VyIGlucHV0W25hbWU9XCJvdmFicndfY2hpbGRyZW5zXCJdJykudmFsKGRhdGFbJ3ZhbF9jaGlsZHJlbiddKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGb3JtLmZpbmQoJy5vdmFicnctd3JhcHBlci1ndWVzdHNwaWNrZXIgaW5wdXRbbmFtZT1cIm92YWJyd19iYWJpZXNcIl0nKS5hdHRyKCdtYXgnLCBkYXRhWydtYXhfYmFiaWVzJ10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGb3JtLmZpbmQoJy5vdmFicnctd3JhcHBlci1ndWVzdHNwaWNrZXIgaW5wdXRbbmFtZT1cIm92YWJyd19iYWJpZXNcIl0nKS5hdHRyKCdtaW4nLCBkYXRhWydtaW5fYmFiaWVzJ10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGb3JtLmZpbmQoJy5vdmFicnctd3JhcHBlci1ndWVzdHNwaWNrZXIgaW5wdXRbbmFtZT1cIm92YWJyd19iYWJpZXNcIl0nKS52YWwoZGF0YVsndmFsX2JhYmllcyddKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJyd19Gcm9udGVuZC5vdmFfZ3Vlc3RzX2NhbGN1bGF0ZSggY3VycmVudEZvcm0gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjdXJyZW50Rm9ybS5oYXNDbGFzcygncmVxdWVzdC1mb3JtJykgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnJ3X0Zyb250ZW5kLm92YV9jaGVja19tYXhfZ3Vlc3RzKGN1cnJlbnRGb3JtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFqYXhMb2FkaW5nLmhpZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuXG4gICAgICAgIG92YV9kdXJhdGlvbjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAkKCdmb3JtIGlucHV0W25hbWU9XCJvdmFicndfdGltZV9mcm9tXCJdJykub24oICdjaGFuZ2UnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB2YXIgdGhhdCA9ICQodGhpcyk7XG4gICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRGb3JtID0gdGhhdC5jbG9zZXN0KCdmb3JtJyk7XG4gICAgICAgICAgICAgICAgdmFyIHRpbWUgICAgICAgID0gdGhhdC52YWwoKTtcbiAgICAgICAgICAgICAgICB2YXIgcHJvZHVjdElEICAgPSBjdXJyZW50Rm9ybS5maW5kKCdpbnB1dFtuYW1lPVwicHJvZHVjdF9pZFwiXScpLnZhbCgpO1xuICAgICAgICAgICAgICAgIHZhciBjaGVja0luICAgICA9IGN1cnJlbnRGb3JtLmZpbmQoJ2lucHV0Lm92YWJyd19zdGFydF9kYXRlJykudmFsKCk7XG4gICAgICAgICAgICAgICAgdmFyIGNoZWNrT3V0ICAgID0gY3VycmVudEZvcm0uZmluZCgnaW5wdXQub3ZhYnJ3X2VuZF9kYXRlJyk7XG4gICAgICAgICAgICAgICAgdmFyIGFqYXhMb2FkaW5nID0gY3VycmVudEZvcm0uZmluZCgnLm92YWJyd19jaGVja291dF9maWVsZCAub3ZhYnJ3LWRhdGUtbG9hZGluZycpO1xuICAgICAgICAgICAgICAgIHZhciBhZHVsdHMgICAgICA9IGN1cnJlbnRGb3JtLmZpbmQoJ2lucHV0W25hbWU9XCJvdmFicndfYWR1bHRzXCJdJykudmFsKCk7XG4gICAgICAgICAgICAgICAgdmFyIGNoaWxkcmVuICAgID0gY3VycmVudEZvcm0uZmluZCgnaW5wdXRbbmFtZT1cIm92YWJyd19jaGlsZHJlbnNcIl0nKS52YWwoKTtcbiAgICAgICAgICAgICAgICB2YXIgYmFiaWVzICAgICAgPSBjdXJyZW50Rm9ybS5maW5kKCdpbnB1dFtuYW1lPVwib3ZhYnJ3X2JhYmllc1wiXScpLnZhbCgpO1xuICAgICAgICAgICAgICAgIHZhciBxdWFudGl0eSAgICA9IGN1cnJlbnRGb3JtLmZpbmQoJ2lucHV0W25hbWU9XCJvdmFicndfcXVhbnRpdHlcIl0nKS52YWwoKTtcbiAgICAgICAgICAgICAgICB2YXIgZXJyb3IgICAgICAgPSBjdXJyZW50Rm9ybS5maW5kKCcuYWpheC1lcnJvcicpO1xuXG4gICAgICAgICAgICAgICAgYWpheExvYWRpbmcuc2hvdygpO1xuICAgICAgICAgICAgICAgIGNoZWNrT3V0LnZhbCgnJyk7XG4gICAgICAgICAgICAgICAgZXJyb3IuaHRtbCgnJykuaGlkZSgpO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgICAgIHVybDogYWpheF9vYmplY3QuYWpheF91cmwsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdQT1NUJyxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogJ292YWJyd19kdXJhdGlvbl9jaGFuZ2UnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGltZTogdGltZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3RfaWQ6IHByb2R1Y3RJRCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkdWx0czogYWR1bHRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmFiaWVzOiBiYWJpZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBxdWFudGl0eTogcXVhbnRpdHksXG4gICAgICAgICAgICAgICAgICAgICAgICBwaWNrdXBfZGF0ZTogY2hlY2tJbixcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKHJlc3BvbnNlKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcmVzcG9uc2UgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBKU09OLnBhcnNlKHJlc3BvbnNlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJ2Vycm9yJyBpbiBkYXRhICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGN1cnJlbnRGb3JtLmhhc0NsYXNzKCdib29raW5nLWZvcm0nKSApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGb3JtLmZpbmQoJ2J1dHRvbi5ib29raW5nLWZvcm0tc3VibWl0JykucHJvcCgnZGlzYWJsZWQnLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY3VycmVudEZvcm0uaGFzQ2xhc3MoJ3JlcXVlc3QtZm9ybScpICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZvcm0uZmluZCgnYnV0dG9uLnJlcXVlc3QtZm9ybS1zdWJtaXQnKS5wcm9wKCdkaXNhYmxlZCcsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvci5odG1sKCcnKS5hcHBlbmQoZGF0YVsnZXJyb3InXSkuc2hvdygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY3VycmVudEZvcm0uaGFzQ2xhc3MoJ2Jvb2tpbmctZm9ybScpICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZvcm0uZmluZCgnYnV0dG9uLmJvb2tpbmctZm9ybS1zdWJtaXQnKS5wcm9wKCdkaXNhYmxlZCcsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY3VycmVudEZvcm0uaGFzQ2xhc3MoJ3JlcXVlc3QtZm9ybScpICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZvcm0uZmluZCgnYnV0dG9uLnJlcXVlc3QtZm9ybS1zdWJtaXQnKS5wcm9wKCdkaXNhYmxlZCcsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJ2NoZWNrb3V0JyBpbiBkYXRhICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tPdXQudmFsKGRhdGFbJ2NoZWNrb3V0J10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUXVhbnRpdHkgYnkgR3Vlc3RzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJ3F0eV9ieV9ndWVzdHMnIGluIGRhdGEgJiYgZGF0YS5xdHlfYnlfZ3Vlc3RzICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZvcm0uZmluZCgnLm92YWJydy13cmFwcGVyLWd1ZXN0c3BpY2tlciBpbnB1dFtuYW1lPVwib3ZhYnJ3X2FkdWx0c1wiXScpLmF0dHIoJ21heCcsIGRhdGFbJ21heF9hZHVsdHMnXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Rm9ybS5maW5kKCcub3ZhYnJ3LXdyYXBwZXItZ3Vlc3RzcGlja2VyIGlucHV0W25hbWU9XCJvdmFicndfYWR1bHRzXCJdJykuYXR0cignbWluJywgZGF0YVsnbWluX2FkdWx0cyddKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGb3JtLmZpbmQoJy5vdmFicnctd3JhcHBlci1ndWVzdHNwaWNrZXIgaW5wdXRbbmFtZT1cIm92YWJyd19hZHVsdHNcIl0nKS52YWwoZGF0YVsndmFsX2FkdWx0cyddKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZvcm0uZmluZCgnLm92YWJydy13cmFwcGVyLWd1ZXN0c3BpY2tlciBpbnB1dFtuYW1lPVwib3ZhYnJ3X2NoaWxkcmVuc1wiXScpLmF0dHIoJ21heCcsIGRhdGFbJ21heF9jaGlsZHJlbiddKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGb3JtLmZpbmQoJy5vdmFicnctd3JhcHBlci1ndWVzdHNwaWNrZXIgaW5wdXRbbmFtZT1cIm92YWJyd19jaGlsZHJlbnNcIl0nKS5hdHRyKCdtaW4nLCBkYXRhWydtaW5fY2hpbGRyZW4nXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Rm9ybS5maW5kKCcub3ZhYnJ3LXdyYXBwZXItZ3Vlc3RzcGlja2VyIGlucHV0W25hbWU9XCJvdmFicndfY2hpbGRyZW5zXCJdJykudmFsKGRhdGFbJ3ZhbF9jaGlsZHJlbiddKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZvcm0uZmluZCgnLm92YWJydy13cmFwcGVyLWd1ZXN0c3BpY2tlciBpbnB1dFtuYW1lPVwib3ZhYnJ3X2JhYmllc1wiXScpLmF0dHIoJ21heCcsIGRhdGFbJ21heF9iYWJpZXMnXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Rm9ybS5maW5kKCcub3ZhYnJ3LXdyYXBwZXItZ3Vlc3RzcGlja2VyIGlucHV0W25hbWU9XCJvdmFicndfYmFiaWVzXCJdJykuYXR0cignbWluJywgZGF0YVsnbWluX2JhYmllcyddKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGb3JtLmZpbmQoJy5vdmFicnctd3JhcHBlci1ndWVzdHNwaWNrZXIgaW5wdXRbbmFtZT1cIm92YWJyd19iYWJpZXNcIl0nKS52YWwoZGF0YVsndmFsX2JhYmllcyddKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnJ3X0Zyb250ZW5kLm92YV9ndWVzdHNfY2FsY3VsYXRlKCBjdXJyZW50Rm9ybSApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjdXJyZW50Rm9ybS5oYXNDbGFzcygnYm9va2luZy1mb3JtJykgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCcndfRnJvbnRlbmQub3ZhX2FqYXhfc2hvd190b3RhbF9hZnRlcl9sb2FkKGN1cnJlbnRGb3JtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY3VycmVudEZvcm0uaGFzQ2xhc3MoJ3JlcXVlc3QtZm9ybScpICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnJ3X0Zyb250ZW5kLm92YV9jaGVja19tYXhfZ3Vlc3RzKGN1cnJlbnRGb3JtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgYWpheExvYWRpbmcuaGlkZSgpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgb3ZhX2d1ZXN0c19jYWxjdWxhdGU6IGZ1bmN0aW9uKCB0aGF0ID0gbnVsbCApIHtcbiAgICAgICAgICAgIGlmICggdGhhdCApIHtcbiAgICAgICAgICAgICAgICB2YXIgZ3Vlc3RzVG90YWwgICAgID0gdGhhdC5maW5kKCcub3ZhYnJ3LWd1ZXN0c3BpY2tlciAuZ3Vlc3RzdG90YWwnKTtcbiAgICAgICAgICAgICAgICB2YXIgaW5wdXRBZHVsdHMgICAgID0gdGhhdC5maW5kKCdpbnB1dFtuYW1lPVwib3ZhYnJ3X2FkdWx0c1wiXScpO1xuICAgICAgICAgICAgICAgIHZhciBpbnB1dENoaWxkcmVuICAgPSB0aGF0LmZpbmQoJ2lucHV0W25hbWU9XCJvdmFicndfY2hpbGRyZW5zXCJdJyk7XG4gICAgICAgICAgICAgICAgdmFyIGlucHV0QmFiaWVzICAgICA9IHRoYXQuZmluZCgnaW5wdXRbbmFtZT1cIm92YWJyd19iYWJpZXNcIl0nKTtcblxuICAgICAgICAgICAgICAgIHZhciBhZHVsdHMgPSBpbnB1dEFkdWx0cy52YWwoKTtcbiAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBhZHVsdHMgPT09IFwidW5kZWZpbmVkXCIgfHwgISBhZHVsdHMgKSBhZHVsdHMgPSAwO1xuXG4gICAgICAgICAgICAgICAgdmFyIGNoaWxkcmVuID0gaW5wdXRDaGlsZHJlbi52YWwoKTtcbiAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBjaGlsZHJlbiA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhIGNoaWxkcmVuICkgY2hpbGRyZW4gPSAwO1xuXG4gICAgICAgICAgICAgICAgdmFyIGJhYmllcyA9IGlucHV0QmFiaWVzLnZhbCgpO1xuICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIGJhYmllcyA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhIGJhYmllcyApIGJhYmllcyA9IDA7XG5cbiAgICAgICAgICAgICAgICBpZiAoIGd1ZXN0c1RvdGFsICkge1xuICAgICAgICAgICAgICAgICAgICBndWVzdHNUb3RhbC50ZXh0KCBwYXJzZUludChhZHVsdHMpICsgcGFyc2VJbnQoY2hpbGRyZW4pICsgcGFyc2VJbnQoYmFiaWVzKSApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBvdmFfY2hlY2tfbWF4X2d1ZXN0czogZnVuY3Rpb24oIHRoYXQgPSBudWxsICkge1xuICAgICAgICAgICAgaWYgKCB0aGF0ICkge1xuICAgICAgICAgICAgICAgIHZhciBwcm9kdWN0SUQgICA9IHRoYXQuZmluZCgnaW5wdXRbbmFtZT1cInByb2R1Y3RfaWRcIl0nKS52YWwoKTtcbiAgICAgICAgICAgICAgICB2YXIgYWR1bHRzICAgICAgPSB0aGF0LmZpbmQoJ2lucHV0W25hbWU9XCJvdmFicndfYWR1bHRzXCJdJykudmFsKCk7XG4gICAgICAgICAgICAgICAgdmFyIGNoaWxkcmVuICAgID0gdGhhdC5maW5kKCdpbnB1dFtuYW1lPVwib3ZhYnJ3X2NoaWxkcmVuc1wiXScpLnZhbCgpO1xuICAgICAgICAgICAgICAgIHZhciBiYWJpZXMgICAgICA9IHRoYXQuZmluZCgnaW5wdXRbbmFtZT1cIm92YWJyd19iYWJpZXNcIl0nKS52YWwoKTtcbiAgICAgICAgICAgICAgICB2YXIgYWpheExvYWRpbmcgPSB0aGF0LmZpbmQoJy5vdmFicnctZGF0ZS1sb2FkaW5nJyk7XG4gICAgICAgICAgICAgICAgdmFyIGVycm9yICAgICAgID0gdGhhdC5maW5kKCcuYWpheC1lcnJvcicpO1xuXG4gICAgICAgICAgICAgICAgYWpheExvYWRpbmcuc2hvdygpO1xuICAgICAgICAgICAgICAgIGVycm9yLmh0bWwoJycpLmhpZGUoKTtcblxuICAgICAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgICAgIHVybDogYWpheF9vYmplY3QuYWpheF91cmwsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdQT1NUJyxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogJ292YWJyd19jaGVja19tYXhfZ3Vlc3RzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3RfaWQ6IHByb2R1Y3RJRCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkdWx0czogYWR1bHRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmFiaWVzOiBiYWJpZXMsXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCByZXNwb25zZSApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IEpTT04ucGFyc2UocmVzcG9uc2UpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAnZXJyb3InIGluIGRhdGEgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdGhhdC5oYXNDbGFzcygncmVxdWVzdC1mb3JtJykgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0LmZpbmQoJ2J1dHRvbi5yZXF1ZXN0LWZvcm0tc3VibWl0JykucHJvcCgnZGlzYWJsZWQnLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IuaHRtbCgnJykuYXBwZW5kKGRhdGFbJ2Vycm9yJ10pLnNob3coKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHRoYXQuaGFzQ2xhc3MoJ3JlcXVlc3QtZm9ybScpICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5maW5kKCdidXR0b24ucmVxdWVzdC1mb3JtLXN1Ym1pdCcpLnByb3AoJ2Rpc2FibGVkJywgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBhamF4TG9hZGluZy5oaWRlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgc3VibWl0X2J1dHRvbjogZnVuY3Rpb24oKSB7XG4gICAgICAgIFx0JCgnLm92YWJyd19idG5fc3VibWl0Jykub24oJ2NsaWNrJywgZnVuY3Rpb24oZSl7XG4gICAgXHRcdFx0dmFyIGNvbnRlbnRfcmVxdWlyZWQgPSAkKHRoaXMpLmNsb3Nlc3QoJy5vdmFicndfc2VhcmNoJykuZGF0YSgnbWVzZ19yZXF1aXJlZCcpO1xuICAgIFx0XHRcdHZhciBmbGFnID0gdHJ1ZTtcblxuICAgIFx0XHRcdCQodGhpcykuY2xvc2VzdCgnLm92YWJyd19zZWFyY2gnKS5maW5kKCcuY29udGVudCAud3JhcC1lcnJvcicpLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgdmFyIGNsYXNzX3JlcXVpcmUgPSAkKHRoaXMpLmNsb3Nlc3QoJy5mb3JtX292YWJydycpLmZpbmQoJy5yZXF1aXJlZCcpO1xuICAgICAgICAgICAgICAgIGNsYXNzX3JlcXVpcmUuZWFjaChmdW5jdGlvbigpe1xuICAgIFx0XHRcdFx0aWYgKCAhICQodGhpcykudmFsKCkgKSB7XG4gICAgXHRcdFx0XHRcdGZsYWcgPSBmYWxzZTtcbiAgICBcdFx0XHRcdFx0JCh0aGlzKS5wYXJlbnQoJy5jb250ZW50JykuY2hpbGRyZW4oJy53cmFwLWVycm9yJykuYXBwZW5kKCc8cCBjbGFzcz1cImVycm9yXCI+Jytjb250ZW50X3JlcXVpcmVkKyc8L3A+Jyk7XG4gICAgXHRcdFx0XHR9XG4gICAgXHRcdFx0fSk7XG4gICAgXHRcdFx0aWYgKCAhIGZsYWcgKSB7XG4gICAgXHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4gICAgXHRcdFx0fVxuICAgIFx0XHR9KTtcblxuICAgICAgICAgICAgLyogQm9va2luZyBGb3JtIHN1Ym1pdCAqL1xuICAgICAgICAgICAgJCgnZm9ybS5ib29raW5nLWZvcm0gYnV0dG9uLmJvb2tpbmctZm9ybS1zdWJtaXQnKS5vbignY2xpY2snLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoYXQgPSAkKHRoaXMpO1xuXG4gICAgICAgICAgICAgICAgLy8gTG9hZGluZ1xuICAgICAgICAgICAgICAgIHRoYXQuYWRkQ2xhc3MoJ2Rpc2FibGVkJyk7XG4gICAgICAgICAgICAgICAgdGhhdC5maW5kKCcub3ZhYnJ3LXN1Ym1pdC1sb2FkaW5nJykuc2hvdygpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGZpZWxkc1JlcXVpcmVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIC8vIFJlcXVpcmVkIGZpZWxkc1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIG92YWJyd0Jvb2tpbmdSZXF1aXJlZEZpZWxkcygpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhhdC5jbG9zZXN0KCcub3ZhLWJvb2tpbmctZm9ybScpLmZpbmQoJy5yZXF1aXJlZCcpLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoICEgJCh0aGlzKS52YWwoKSApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSAkKHRoaXMpLmRhdGEoJ2Vycm9yJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmNsb3Nlc3QoJ2Zvcm0uYm9va2luZy1mb3JtJykuZmluZCgnLmFqYXgtZXJyb3InKS5odG1sKCcnKS5hcHBlbmQoZXJyb3IpLnNob3coKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmaWVsZHNSZXF1aXJlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVja2JveFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHR5cGUgPSAkKHRoaXMpLmF0dHIoJ3R5cGUnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBlID09ICdjaGVja2JveCcgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbCA9ICQodGhpcykuY2xvc2VzdCgnLnJlbnRhbF9pdGVtJykuZmluZCgnaW5wdXQ6Y2hlY2tlZCcpLnZhbCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhIHZhbCApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yID0gJCh0aGlzKS5jbG9zZXN0KCcub3ZhYnJ3LWNoZWNrYm94JykuZGF0YSgnZXJyb3InKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmNsb3Nlc3QoJ2Zvcm0uYm9va2luZy1mb3JtJykuZmluZCgnLmFqYXgtZXJyb3InKS5odG1sKCcnKS5hcHBlbmQoZXJyb3IpLnNob3coKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmllbGRzUmVxdWlyZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmaWVsZHNSZXF1aXJlZDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmaWVsZHNSZXF1aXJlZCA9IG92YWJyd0Jvb2tpbmdSZXF1aXJlZEZpZWxkcygpO1xuXG4gICAgICAgICAgICAgICAgLy8gVGVybXMgJiBjb25kaXRpb25zXG4gICAgICAgICAgICAgICAgdmFyIHRlcm1zQ29uZGl0aW9ucyA9IHRoYXQuY2xvc2VzdCgnZm9ybS5ib29raW5nLWZvcm0nKS5maW5kKCdpbnB1dFtuYW1lPVwib3ZhYnJ3LWJvb2tpbmctdGVybXMtY29uZGl0aW9uc1wiXScpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCBmaWVsZHNSZXF1aXJlZCAmJiB0ZXJtc0NvbmRpdGlvbnMubGVuZ3RoID4gMCApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCAhIHRlcm1zQ29uZGl0aW9ucy5pcygnOmNoZWNrZWQnKSApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlcm1zQ29uZGl0aW9ucy5hZGRDbGFzcygnb3ZhYnJ3LXJlcXVpcmVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3JUZXh0ID0gdGVybXNDb25kaXRpb25zLmRhdGEoJ2Vycm9yJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGF0LmNsb3Nlc3QoJ2Zvcm0uYm9va2luZy1mb3JtJykuZmluZCgnLmFqYXgtZXJyb3InKS5odG1sKCcnKS5hcHBlbmQoZXJyb3JUZXh0KS5zaG93KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkc1JlcXVpcmVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICQoJ2h0bWwsIGJvZHknKS5hbmltYXRlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxUb3A6ICggdGVybXNDb25kaXRpb25zLm9mZnNldCgpLnRvcCAtIDMwMCApXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDAwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSGlkZS1Mb2FkaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGF0LnJlbW92ZUNsYXNzKCdkaXNhYmxlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5maW5kKCcub3ZhYnJ3LXN1Ym1pdC1sb2FkaW5nJykuaGlkZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXJtc0NvbmRpdGlvbnMucmVtb3ZlQ2xhc3MoJ292YWJydy1yZXF1aXJlZCcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGZpZWxkc1JlcXVpcmVkICkgZmllbGRzUmVxdWlyZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCAhIGZpZWxkc1JlcXVpcmVkICkge1xuICAgICAgICAgICAgICAgICAgICAvLyBIaWRlLUxvYWRpbmdcbiAgICAgICAgICAgICAgICAgICAgdGhhdC5yZW1vdmVDbGFzcygnZGlzYWJsZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgdGhhdC5maW5kKCcub3ZhYnJ3LXN1Ym1pdC1sb2FkaW5nJykuaGlkZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyByZUNBUFRDSEFcbiAgICAgICAgICAgICAgICB2YXIgdmVyaWZ5UmVDQVBUQ0hBID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB2YXIgcmVDQVBUQ0hBID0gdGhhdC5jbG9zZXN0KCdmb3JtLmJvb2tpbmctZm9ybScpLmZpbmQoJyNvdmFicnctcmVjYXB0Y2hhLWJvb2tpbmctdG9rZW4nKTtcblxuICAgICAgICAgICAgICAgIGlmICggZmllbGRzUmVxdWlyZWQgJiYgcmVDQVBUQ0hBLmxlbmd0aCA+IDAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0b2tlbiA9IHJlQ0FQVENIQS52YWwoKTsgICAgICAgICAgICAgICAgICAgIFxuXG4gICAgICAgICAgICAgICAgICAgIGlmICggdG9rZW4gKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBMb2FkaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGF0LmFkZENsYXNzKCdkaXNhYmxlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5maW5kKCcub3ZhYnJ3LXN1Ym1pdC1sb2FkaW5nJykuc2hvdygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5jbG9zZXN0KCcub3ZhLWJvb2tpbmctZm9ybScpLmZpbmQoJy5hamF4LWVycm9yJykuaHRtbCgnJykuaGlkZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogYWpheF9vYmplY3QuYWpheF91cmwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1BPU1QnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogJ292YWJyd192ZXJpZnlfcmVDQVBUQ0hBJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW46IHRva2VuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcmVzcG9uc2UgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0LmNsb3Nlc3QoJ2Zvcm0uYm9va2luZy1mb3JtJykuZmluZCgnLmFqYXgtZXJyb3InKS5odG1sKCcnKS5hcHBlbmQocmVzcG9uc2UpLnNob3coKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSGlkZS1Mb2FkaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0LnJlbW92ZUNsYXNzKCdkaXNhYmxlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5maW5kKCcub3ZhYnJ3LXN1Ym1pdC1sb2FkaW5nJykuaGlkZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5jbG9zZXN0KCdmb3JtLmJvb2tpbmctZm9ybScpLnN1Ym1pdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSByZUNBUFRDSEEuYXR0cignZGF0YS1tZXNzJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGF0LmNsb3Nlc3QoJ2Zvcm0uYm9va2luZy1mb3JtJykuZmluZCgnLmFqYXgtZXJyb3InKS5odG1sKCcnKS5hcHBlbmQoZXJyb3IpLnNob3coKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSGlkZS1Mb2FkaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGF0LnJlbW92ZUNsYXNzKCdkaXNhYmxlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5maW5kKCcub3ZhYnJ3LXN1Ym1pdC1sb2FkaW5nJykuaGlkZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvKiBSZXF1ZXN0IEZvcm0gc3VibWl0ICovXG4gICAgICAgICAgICAkKCdmb3JtLnJlcXVlc3QtZm9ybSBidXR0b24ucmVxdWVzdC1mb3JtLXN1Ym1pdCcpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICB2YXIgdGhhdCA9ICQodGhpcyk7XG5cbiAgICAgICAgICAgICAgICAvLyBMb2FkaW5nXG4gICAgICAgICAgICAgICAgdGhhdC5hZGRDbGFzcygnZGlzYWJsZWQnKTtcbiAgICAgICAgICAgICAgICB0aGF0LmZpbmQoJy5vdmFicnctc3VibWl0LWxvYWRpbmcnKS5zaG93KCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgZmllbGRzUmVxdWlyZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgLy8gUmVxdWlyZWQgZmllbGRzXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gb3ZhYnJ3RW5xdWlyeVJlcXVpcmVkRmllbGRzKCkge1xuICAgICAgICAgICAgICAgICAgICB0aGF0LmNsb3Nlc3QoJy5vdmEtcmVxdWVzdC1mb3JtJykuZmluZCgnLnJlcXVpcmVkJykuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggISAkKHRoaXMpLnZhbCgpICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnJvciA9ICQodGhpcykuZGF0YSgnZXJyb3InKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmNsb3Nlc3QoJ2Zvcm0ucmVxdWVzdC1mb3JtJykuZmluZCgnLmFqYXgtZXJyb3InKS5odG1sKCcnKS5hcHBlbmQoZXJyb3IpLnNob3coKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmaWVsZHNSZXF1aXJlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVja2JveFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHR5cGUgPSAkKHRoaXMpLmF0dHIoJ3R5cGUnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBlID09ICdjaGVja2JveCcgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbCA9ICQodGhpcykuY2xvc2VzdCgnLnJlbnRhbF9pdGVtJykuZmluZCgnaW5wdXQ6Y2hlY2tlZCcpLnZhbCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhIHZhbCApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yID0gJCh0aGlzKS5jbG9zZXN0KCcub3ZhYnJ3LWNoZWNrYm94JykuZGF0YSgnZXJyb3InKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmNsb3Nlc3QoJ2Zvcm0ucmVxdWVzdC1mb3JtJykuZmluZCgnLmFqYXgtZXJyb3InKS5odG1sKCcnKS5hcHBlbmQoZXJyb3IpLnNob3coKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmllbGRzUmVxdWlyZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmaWVsZHNSZXF1aXJlZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgZmllbGRzUmVxdWlyZWQgPSBvdmFicndFbnF1aXJ5UmVxdWlyZWRGaWVsZHMoKTtcblxuICAgICAgICAgICAgICAgIC8vIFRlcm1zICYgY29uZGl0aW9uc1xuICAgICAgICAgICAgICAgIHZhciB0ZXJtc0NvbmRpdGlvbnMgPSB0aGF0LmNsb3Nlc3QoJ2Zvcm0ucmVxdWVzdC1mb3JtJykuZmluZCgnaW5wdXRbbmFtZT1cIm92YWJydy1yZXF1ZXN0LWJvb2tpbmctdGVybXMtY29uZGl0aW9uc1wiXScpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCBmaWVsZHNSZXF1aXJlZCAmJiB0ZXJtc0NvbmRpdGlvbnMubGVuZ3RoID4gMCApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCAhIHRlcm1zQ29uZGl0aW9ucy5pcygnOmNoZWNrZWQnKSApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlcm1zQ29uZGl0aW9ucy5hZGRDbGFzcygnb3ZhYnJ3LXJlcXVpcmVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3JUZXh0ID0gdGVybXNDb25kaXRpb25zLmRhdGEoJ2Vycm9yJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGF0LmNsb3Nlc3QoJ2Zvcm0ucmVxdWVzdC1mb3JtJykuZmluZCgnLmFqYXgtZXJyb3InKS5odG1sKCcnKS5hcHBlbmQoZXJyb3JUZXh0KS5zaG93KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkc1JlcXVpcmVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICQoJ2h0bWwsIGJvZHknKS5hbmltYXRlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxUb3A6ICggdGVybXNDb25kaXRpb25zLm9mZnNldCgpLnRvcCAtIDMwMCApXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDAwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSGlkZS1Mb2FkaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGF0LnJlbW92ZUNsYXNzKCdkaXNhYmxlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5maW5kKCcub3ZhYnJ3LXN1Ym1pdC1sb2FkaW5nJykuaGlkZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXJtc0NvbmRpdGlvbnMucmVtb3ZlQ2xhc3MoJ292YWJydy1yZXF1aXJlZCcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGZpZWxkc1JlcXVpcmVkICkgZmllbGRzUmVxdWlyZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCAhIGZpZWxkc1JlcXVpcmVkICkge1xuICAgICAgICAgICAgICAgICAgICAvLyBIaWRlLUxvYWRpbmdcbiAgICAgICAgICAgICAgICAgICAgdGhhdC5yZW1vdmVDbGFzcygnZGlzYWJsZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgdGhhdC5maW5kKCcub3ZhYnJ3LXN1Ym1pdC1sb2FkaW5nJykuaGlkZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyByZUNBUFRDSEFcbiAgICAgICAgICAgICAgICB2YXIgcmVDQVBUQ0hBID0gdGhhdC5jbG9zZXN0KCdmb3JtLnJlcXVlc3QtZm9ybScpLmZpbmQoJyNvdmFicnctcmVjYXB0Y2hhLWVucXVpcnktdG9rZW4nKTtcblxuICAgICAgICAgICAgICAgIGlmICggZmllbGRzUmVxdWlyZWQgJiYgcmVDQVBUQ0hBLmxlbmd0aCA+IDAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0b2tlbiA9IHJlQ0FQVENIQS52YWwoKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoIHRva2VuICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gTG9hZGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5hZGRDbGFzcygnZGlzYWJsZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQuZmluZCgnLm92YWJydy1zdWJtaXQtbG9hZGluZycpLnNob3coKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQuY2xvc2VzdCgnZm9ybS5yZXF1ZXN0LWZvcm0nKS5maW5kKCcuYWpheC1lcnJvcicpLmh0bWwoJycpLmhpZGUoKTsgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IGFqYXhfb2JqZWN0LmFqYXhfdXJsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdQT1NUJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246ICdvdmFicndfdmVyaWZ5X3JlQ0FQVENIQScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuOiB0b2tlbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHJlc3BvbnNlICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5jbG9zZXN0KCdmb3JtLnJlcXVlc3QtZm9ybScpLmZpbmQoJy5hamF4LWVycm9yJykuaHRtbCgnJykuYXBwZW5kKHJlc3BvbnNlKS5zaG93KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhpZGUtTG9hZGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5yZW1vdmVDbGFzcygnZGlzYWJsZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQuZmluZCgnLm92YWJydy1zdWJtaXQtbG9hZGluZycpLmhpZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQuY2xvc2VzdCgnZm9ybS5yZXF1ZXN0LWZvcm0nKS5zdWJtaXQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yID0gcmVDQVBUQ0hBLmF0dHIoJ2RhdGEtbWVzcycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5jbG9zZXN0KCdmb3JtLnJlcXVlc3QtZm9ybScpLmZpbmQoJy5hamF4LWVycm9yJykuaHRtbCgnJykuYXBwZW5kKGVycm9yKS5zaG93KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhpZGUtTG9hZGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5yZW1vdmVDbGFzcygnZGlzYWJsZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQuZmluZCgnLm92YWJydy1zdWJtaXQtbG9hZGluZycpLmhpZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLyogRmlsZSAqL1xuICAgICAgICAgICAgJCgnLm92YWJydy1maWxlIGlucHV0W3R5cGU9XCJmaWxlXCJdJykuZWFjaCggZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgJCh0aGlzKS5vbiggJ2NoYW5nZScsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZmlsZSAgICAgICAgICAgID0gJCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxpbWl0ICAgICAgICAgICA9IGZpbGUuZGF0YSgnbWF4LWZpbGUtc2l6ZScpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbWF4X3NpemVfbXNnICAgID0gZmlsZS5kYXRhKCdtYXgtZmlsZS1zaXplLW1zZycpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZm9ybWF0c19tc2cgICAgID0gZmlsZS5kYXRhKCdmb3JtYXRzJyk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBmaWxlX21pbWVzICAgICAgPSBmaWxlLmRhdGEoJ2ZpbGUtbWltZXMnKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZvcm1hdHNfZmlsZSAgICA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICggdHlwZW9mKCBmaWxlX21pbWVzICkgPT0gJ29iamVjdCcgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkLmVhY2goIGZpbGVfbWltZXMsIGZ1bmN0aW9uKCBrZXksIHZhbCApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRzX2ZpbGUucHVzaCggdmFsICk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZpbGUuY2xvc2VzdCgnLm92YWJydy1maWxlJykuZmluZCgnLm92YWJydy1maWxlLW5hbWUnKS5odG1sKCcnKTtcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIHZhciBuYW1lID0gdGhpcy5maWxlc1swXS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICB2YXIgc2l6ZSA9IHRoaXMuZmlsZXNbMF0uc2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHR5cGUgPSB0aGlzLmZpbGVzWzBdLnR5cGU7XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICBpZiAoIG5hbWUgJiYgc2l6ZSAmJiB0eXBlICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS5jbG9zZXN0KCcub3ZhYnJ3LWZpbGUnKS5maW5kKCcub3ZhYnJ3LWZpbGUtbmFtZScpLmh0bWwobmFtZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYiA9ICggc2l6ZS8xMDQ4NTc2ICkudG9GaXhlZCgyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBtYiA+IGxpbWl0ICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUuY2xvc2VzdCgnLm92YWJydy1maWxlJykuZmluZCgnLm92YWJydy1maWxlLW5hbWUnKS5odG1sKG1heF9zaXplX21zZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJC5pbkFycmF5KCB0eXBlLCBmb3JtYXRzX2ZpbGUgKSA9PSAtMSApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlLmNsb3Nlc3QoJy5vdmFicnctZmlsZScpLmZpbmQoJy5vdmFicnctZmlsZS1uYW1lJykuaHRtbChmb3JtYXRzX21zZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuXG4gICAgICAgIG92YV9jb2xsYXBzZWQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgJCgnLm92YWJydy1hY2NvcmRpbmcnKS5vZmYoKS5vbignY2xpY2snLCBmdW5jdGlvbihlKXtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgJCh0aGlzKS5zaWJsaW5ncygnLm92YWJyd19jb2xsYXBzZV9jb250ZW50Jykuc2xpZGVUb2dnbGUoKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvL29wZW4gcG9wdXBcbiAgICAgICAgICAgICQoJy5vdmFicndfb3Blbl9wb3B1cCcpLm9mZigpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpe1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAkKHRoaXMpLnNpYmxpbmdzKCcucG9wdXAnKS5jc3MoJ2Rpc3BsYXknLCAnYmxvY2snKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvL2Nsb3NlIHBvcHVwXG4gICAgICAgICAgICAkKCcucG9wdXAtY2xvc2UnKS5vbignY2xpY2snLCBmdW5jdGlvbihlKXtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgJCh0aGlzKS5wYXJlbnQoJy5wb3B1cC1pbm5lcicpLnBhcmVudCgnLnBvcHVwJykuY3NzKCdkaXNwbGF5JywgJ25vbmUnKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAkKCcucG9wdXAtY2xvc2UtMicpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpe1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAkKHRoaXMpLnBhcmVudCgnLmNsb3NlX2Rpc2NvdW50JykucGFyZW50KCcucG9wdXAtaW5uZXInKS5wYXJlbnQoJy5wb3B1cCcpLmNzcygnZGlzcGxheScsICdub25lJyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcblxuICAgICAgICBvdmFfYWpheF9zaG93X3RvdGFsOiBmdW5jdGlvbigpe1xuICAgICAgICAgICAgJCggJ2JvZHknICkub24oICdjaGFuZ2UnLCAnZm9ybS5ib29raW5nLWZvcm0nLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBpZiAoICQodGhpcykuZmluZCgnaW5wdXRbbmFtZT1cInF0eS1ieS1ndWVzdHNcIl0nKS52YWwoKSApIHtcbiAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5maW5kKCdpbnB1dFtuYW1lPVwib3ZhYnJ3X3BpY2t1cF9kYXRlXCJdJykub24oICdjaGFuZ2UnLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmZpbmQoJ2lucHV0W25hbWU9XCJvdmFicndfcGlja29mZl9kYXRlXCJdJykub24oICdjaGFuZ2UnLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmZpbmQoJ2lucHV0W25hbWU9XCJvdmFicndfdGltZV9mcm9tXCJdJykub24oICdjaGFuZ2UnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgQnJ3X0Zyb250ZW5kLm92YV9hamF4X3Nob3dfdG90YWxfYWZ0ZXJfbG9hZCgkKHRoaXMpKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAkKCdmb3JtLmJvb2tpbmctZm9ybScpLmVhY2goIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHZhciB0aGF0ID0gJCh0aGlzKTtcblxuICAgICAgICAgICAgICAgIHZhciBjaGVja19pbiAgICA9IHRoYXQuZmluZCgnaW5wdXRbbmFtZT1cIm92YWJyd19waWNrdXBfZGF0ZVwiXScpLnZhbCgpO1xuICAgICAgICAgICAgICAgIHZhciBjaGVja19vdXQgICA9IHRoYXQuZmluZCgnaW5wdXRbbmFtZT1cIm92YWJyd19waWNrb2ZmX2RhdGVcIl0nKS52YWwoKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGlmICggY2hlY2tfaW4gKSB7XG4gICAgICAgICAgICAgICAgICAgICQoJy5vdmFicndfZGF0ZXRpbWVwaWNrZXIub3ZhYnJ3X3N0YXJ0X2RhdGUnKS5ibHVyKCk7XG4gICAgICAgICAgICAgICAgICAgIEJyd19Gcm9udGVuZC5vdmFfYWpheF9zaG93X3RvdGFsX2FmdGVyX2xvYWQodGhhdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgb3ZhX2FqYXhfc2hvd190b3RhbF9hZnRlcl9sb2FkOiBmdW5jdGlvbiggdGhhdCA9IG51bGwgKSB7XG4gICAgICAgICAgICB2YXIgcGlja3VwX2RhdGUsIHRpbWVGcm9tLCBkcm9wb2ZmX2RhdGUsIGFkdWx0cywgY2hpbGRyZW5zLCBiYWJpZXMsIHF1YW50aXR5LCByZXNvdXJjZXMsIHNlcnZpY2VzLCBwcm9kdWN0X2lkLCBkZXBvc2l0LCBjdXJyZW50X2RhdGU7XG4gICAgICAgICAgICB2YXIgcmVzb3VyY2VzICAgPSBbXTtcbiAgICAgICAgICAgIHZhciBzZXJ2aWNlcyAgICA9IFtdO1xuICAgICAgICAgICAgdmFyIG9ial9yZXNvdXJjZSwgb2JqX3NlcnZpY2U7XG4gICAgICAgICAgICB2YXIgY3VzdG9tX2NrZiA9IHt9O1xuXG4gICAgICAgICAgICBpZiAoIHRoYXQgIT0gbnVsbCApIHtcbiAgICAgICAgICAgICAgICBpZiAoIHRoYXQuZmluZCgnaW5wdXRbbmFtZT1cInByb2R1Y3RfaWRcIl0nKS52YWwoKSApIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvZHVjdF9pZCA9IHRoYXQuZmluZCgnaW5wdXRbbmFtZT1cInByb2R1Y3RfaWRcIl0nKS52YWwoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIHRoYXQuZmluZCgnaW5wdXRbbmFtZT1cIm92YWJyd19waWNrdXBfZGF0ZVwiXScpLnZhbCgpICl7XG4gICAgICAgICAgICAgICAgICAgIHBpY2t1cF9kYXRlID0gdGhhdC5maW5kKCdpbnB1dFtuYW1lPVwib3ZhYnJ3X3BpY2t1cF9kYXRlXCJdJykudmFsKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCBwaWNrdXBfZGF0ZSApIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHRoYXQuZmluZCgnaW5wdXRbbmFtZT1cIm92YWJyd190aW1lX2Zyb21cIl06Y2hlY2tlZCcpICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVGcm9tID0gdGhhdC5maW5kKCdpbnB1dFtuYW1lPVwib3ZhYnJ3X3RpbWVfZnJvbVwiXTpjaGVja2VkJykudmFsKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdGhhdC5maW5kKCdpbnB1dFtuYW1lPVwib3ZhYnJ3X3BpY2tvZmZfZGF0ZVwiXScpLnZhbCgpICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyb3BvZmZfZGF0ZSA9IHRoYXQuZmluZCgnaW5wdXRbbmFtZT1cIm92YWJyd19waWNrb2ZmX2RhdGVcIl0nKS52YWwoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0aGF0LmZpbmQoJ2lucHV0W25hbWU9XCJvdmFicndfYWR1bHRzXCJdJykudmFsKCkgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWR1bHRzID0gdGhhdC5maW5kKCdpbnB1dFtuYW1lPVwib3ZhYnJ3X2FkdWx0c1wiXScpLnZhbCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHRoYXQuZmluZCgnaW5wdXRbbmFtZT1cIm92YWJyd19jaGlsZHJlbnNcIl0nKS52YWwoKSApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbnMgPSB0aGF0LmZpbmQoJ2lucHV0W25hbWU9XCJvdmFicndfY2hpbGRyZW5zXCJdJykudmFsKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdGhhdC5maW5kKCdpbnB1dFtuYW1lPVwib3ZhYnJ3X2JhYmllc1wiXScpLnZhbCgpICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhYmllcyA9IHRoYXQuZmluZCgnaW5wdXRbbmFtZT1cIm92YWJyd19iYWJpZXNcIl0nKS52YWwoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0aGF0LmZpbmQoJ2lucHV0W25hbWU9XCJvdmFicndfcXVhbnRpdHlcIl0nKS52YWwoKSApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWFudGl0eSA9IHRoYXQuZmluZCgnaW5wdXRbbmFtZT1cIm92YWJyd19xdWFudGl0eVwiXScpLnZhbCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHRoYXQuZmluZCgnaW5wdXRbbmFtZT1cIm92YV90eXBlX2RlcG9zaXRcIl06Y2hlY2tlZCcpLnZhbCgpICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcG9zaXQgPSB0aGF0LmZpbmQoJ2lucHV0W25hbWU9XCJvdmFfdHlwZV9kZXBvc2l0XCJdOmNoZWNrZWQnKS52YWwoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0aGF0LmZpbmQoJ2lucHV0W25hbWU9XCJkYXRhX2N1c3RvbV9ja2ZcIl0nKSApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2tmID0gdGhhdC5maW5kKCdpbnB1dFtuYW1lPVwiZGF0YV9jdXN0b21fY2tmXCJdJykuZGF0YSgnY2tmJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBja2YgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQuZWFjaCggY2tmLCBmdW5jdGlvbigga2V5LCBvYmogKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG9iai50eXBlID09ICdyYWRpbycgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VzdG9tX2NrZltrZXldID0gdGhhdC5maW5kKCdpbnB1dFtuYW1lPVwiJytrZXkrJ1wiXTpjaGVja2VkJykudmFsKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG9iai50eXBlID09ICdjaGVja2JveCcgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iX2NoZWNrYm94ID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5maW5kKFwiLm92YWJydy1jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkXCIpLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYl9jaGVja2JveC5wdXNoKCQodGhpcykudmFsKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VzdG9tX2NrZltrZXldID0gb2JfY2hlY2tib3g7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG9iai50eXBlID09ICdzZWxlY3QnICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbV9ja2Zba2V5XSA9IHRoYXQuZmluZCgnc2VsZWN0W25hbWU9XCInK2tleSsnXCJdJykudmFsKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVmZXJlbmNlIHRoZSBDaGVja0JveGVzIGFuZCBpbnNlcnQgdGhlIGNoZWNrZWQgQ2hlY2tCb3ggdmFsdWUgaW4gQXJyYXkuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGF0LmZpbmQoXCIub3ZhYnJ3LXJlc291cmNlcyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkXCIpLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlc1skKHRoaXMpLmRhdGEoJ3JzLWtleScpXSA9ICQodGhpcykudmFsKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ial9yZXNvdXJjZSA9ICQuZXh0ZW5kKHt9LCByZXNvdXJjZXMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBTZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGF0LmZpbmQoIFwic2VsZWN0W25hbWU9J292YWJyd19zZXJ2aWNlW10nXVwiICkuZWFjaCggZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoICQodGhpcykudmFsKCkgKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZXMucHVzaCgkKHRoaXMpLnZhbCgpKTsgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBvYmpfc2VydmljZSA9ICQuZXh0ZW5kKHt9LCBzZXJ2aWNlcyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcGlja3VwX2RhdGUgJiYgZHJvcG9mZl9kYXRlICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhamF4X2xvYWRpbmcgPSB0aGF0LmZpbmQoJy5hamF4LXNob3ctdG90YWwgLmFqYXgtbG9hZGluZy10b3RhbCcpLnNob3coKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQuZmluZCgnLmFqYXgtZXJyb3InKS5odG1sKCcnKS5oaWRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5maW5kKCcuYWpheC1zaG93LXRvdGFsIC5zaG93LWF2YWlsYWJsZXMtbnVtYmVyJykuaHRtbCgnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5maW5kKCcuYWpheC1zaG93LXRvdGFsIC5zaG93LWFtb3VudC1pbnN1cmFuY2UnKS5odG1sKCcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0LmZpbmQoJy5hamF4LXNob3ctdG90YWwgLnNob3ctdG90YWwtbnVtYmVyJykuaHRtbCgnJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IGFqYXhfb2JqZWN0LmFqYXhfdXJsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnUE9TVCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246ICdvdmFicndfY2FsY3VsYXRlX3RvdGFsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3RfaWQ6IHByb2R1Y3RfaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaWNrdXBfZGF0ZTogcGlja3VwX2RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lX2Zyb206IHRpbWVGcm9tLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJvcG9mZl9kYXRlOiBkcm9wb2ZmX2RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZHVsdHM6IGFkdWx0cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuczogY2hpbGRyZW5zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFiaWVzOiBiYWJpZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWFudGl0eTogcXVhbnRpdHksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBvc2l0OiBkZXBvc2l0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzOiBKU09OLnN0cmluZ2lmeSggb2JqX3Jlc291cmNlICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlczogSlNPTi5zdHJpbmdpZnkoIG9ial9zZXJ2aWNlICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21fY2tmOiBKU09OLnN0cmluZ2lmeSggY3VzdG9tX2NrZiApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24ocmVzcG9uc2Upe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBKU09OLnBhcnNlKHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZGF0YSApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGRhdGEuZXJyb3IgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQuZmluZCgnYnV0dG9uLmJvb2tpbmctZm9ybS1zdWJtaXQnKS5wcm9wKCdkaXNhYmxlZCcsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0LmZpbmQoJy5hamF4LXNob3ctdG90YWwgLm92YWJydy1zaG93LWFtb3VudCcpLmNzcygnZGlzcGxheScsICdub25lJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQuZmluZCgnLmFqYXgtc2hvdy10b3RhbCAub3ZhYnJ3LWFqYXgtYW1vdW50LWluc3VyYW5jZScpLmhpZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5maW5kKCcuYWpheC1lcnJvcicpLmh0bWwoJycpLmFwcGVuZChkYXRhWydlcnJvciddKS5zaG93KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5maW5kKCdidXR0b24uYm9va2luZy1mb3JtLXN1Ym1pdCcpLnByb3AoJ2Rpc2FibGVkJywgZmFsc2UpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZGF0YVsnYWR1bHRzX3ByaWNlJ10gKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0LmZpbmQoJy5vdmFicnctd3JhcHBlci1ndWVzdHNwaWNrZXIgLmFkdWx0cy1wcmljZScpLmh0bWwoJycpLmFwcGVuZChkYXRhWydhZHVsdHNfcHJpY2UnXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGRhdGFbJ2NoaWxkcmVuc19wcmljZSddICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5maW5kKCcub3ZhYnJ3LXdyYXBwZXItZ3Vlc3RzcGlja2VyIC5jaGlsZHJlbnMtcHJpY2UnKS5odG1sKCcnKS5hcHBlbmQoZGF0YVsnY2hpbGRyZW5zX3ByaWNlJ10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBkYXRhWydiYWJpZXNfcHJpY2UnXSApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQuZmluZCgnLm92YWJydy13cmFwcGVyLWd1ZXN0c3BpY2tlciAuYmFiaWVzLXByaWNlJykuaHRtbCgnJykuYXBwZW5kKGRhdGFbJ2JhYmllc19wcmljZSddKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQuZmluZCgnLmFqYXgtc2hvdy10b3RhbCAub3ZhYnJ3LXNob3ctYW1vdW50JykuY3NzKCdkaXNwbGF5JywgJ2ZsZXgnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICdxdHlfYnlfZ3Vlc3RzJyBpbiBkYXRhICYmIGRhdGEucXR5X2J5X2d1ZXN0cyApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQuZmluZCgnLmFqYXgtc2hvdy10b3RhbCAub3ZhYnJ3LWFqYXgtYXZhaWxhYmxlcycpLmNzcygnZGlzcGxheScsICdub25lJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0LmZpbmQoJy5hamF4LXNob3ctdG90YWwgLnNob3ctYXZhaWxhYmxlcy1udW1iZXInKS5odG1sKCcnKS5hcHBlbmQoZGF0YVsncXVhbnRpdHlfYXZhaWxhYmxlJ10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5maW5kKCcuYWpheC1zaG93LXRvdGFsIC5zaG93LWFtb3VudC1pbnN1cmFuY2UnKS5odG1sKCcnKS5hcHBlbmQoZGF0YVsnYW1vdW50X2luc3VyYW5jZSddKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5maW5kKCcuYWpheC1zaG93LXRvdGFsIC5zaG93LXRvdGFsLW51bWJlcicpLmh0bWwoJycpLmFwcGVuZChkYXRhWydsaW5lX3RvdGFsJ10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0LmZpbmQoJy5hamF4LXNob3ctdG90YWwgLm92YWJydy1hamF4LWFtb3VudC1pbnN1cmFuY2UnKS5zaG93KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWpheF9sb2FkaW5nLmhpZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSwgMzAwICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIG92YV9zZWFyY2hfYWpheDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoICQoJy5vdmFicnctc2VhcmNoLWFqYXggLndyYXAtc2VhcmNoLWFqYXgnKS5sZW5ndGggPiAwICkge1xuICAgICAgICAgICAgICAgIGxvYWRBamF4U2VhcmNoKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICQoJy5vdmFicnctc2VhcmNoLWFqYXggLndyYXAtc2VhcmNoLWFqYXggLm92YWJydy1idG4nKS5vbignY2xpY2snLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgbG9hZEFqYXhTZWFyY2goIHRydWUgKTtcblxuICAgICAgICAgICAgICAgICQoJ2h0bWwsIGJvZHknKS5hbmltYXRlKHtcbiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsVG9wOiAkKFwiI2Jydy1zZWFyY2gtYWpheC1yZXN1bHRcIikub2Zmc2V0KCkudG9wIC0gMjUwXG4gICAgICAgICAgICAgICAgfSwgNTAwKTtcblxuICAgICAgICAgICAgICAgIC8vIGhpZGUgYXZhbmNlZCBzZWFyY2ggZHJvcGRvd24gYW5kIGNoYW5nZSBpY29uXG4gICAgICAgICAgICAgICAgdmFyIGFkdmFuY2VkX3NlYXJjaCAgICAgICA9ICQodGhpcykuY2xvc2VzdCgnLndyYXAtc2VhcmNoLWFqYXgnKS5maW5kKCcuc2VhcmNoLWFkdmFuY2VkLWZpZWxkLXdyYXBwZXInKTtcbiAgICAgICAgICAgICAgICB2YXIgYWR2YW5jZWRfc2VhcmNoX2lucHV0ID0gYWR2YW5jZWRfc2VhcmNoLmNsb3Nlc3QoJy5vdmFicnctc2VhcmNoLWFkdmFuY2VkJykuZmluZCgnLnNlYXJjaC1hZHZhbmNlZC1pbnB1dCBpJyk7XG4gICAgICAgICAgICAgICAgYWR2YW5jZWRfc2VhcmNoLnJlbW92ZUNsYXNzKCd0b2dnbGVkJyk7XG4gICAgICAgICAgICAgICAgYWR2YW5jZWRfc2VhcmNoX2lucHV0LnJlbW92ZUNsYXNzKCdpY29tb29uLWNoZXZyb24tdXAnKTtcbiAgICAgICAgICAgICAgICBhZHZhbmNlZF9zZWFyY2hfaW5wdXQuYWRkQ2xhc3MoJ2ljb21vb24tY2hldnJvbi1kb3duJyk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gaGlkZSBmaWx0ZXIgc29ydCBieSBkcm9wZG93biBcbiAgICAgICAgICAgICAgICAkKHRoaXMpLmNsb3Nlc3QoJy53cmFwLXNlYXJjaC1hamF4JykuZmluZCgnLmlucHV0X3NlbGVjdF9saXN0JykuaGlkZSgpO1xuXG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8qIFJlc3VsdCBMYXlvdXQgKi9cbiAgICAgICAgICAgICQoJy5vdmFicnctc2VhcmNoLWFqYXgnKS5vbignY2xpY2snLCAnLndyYXAtc2VhcmNoLWFqYXggLmZpbHRlci1sYXlvdXQnICwgZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgICAgIHZhciB0aGF0ICAgICAgICAgID0gJCh0aGlzKTtcbiAgICAgICAgICAgICAgICB2YXIgbGF5b3V0X2FjdGl2ZSA9ICQoJy53cmFwLXNlYXJjaC1hamF4IC5maWx0ZXItbGF5b3V0LWFjdGl2ZScpLmF0dHIoJ2RhdGEtbGF5b3V0Jyk7XG4gICAgICAgICAgICAgICAgdmFyIGxheW91dCAgICAgICAgPSB0aGF0LmF0dHIoJ2RhdGEtbGF5b3V0Jyk7XG4gICAgICAgICAgICAgICAgdmFyIGNsaWNrZWQgICAgICAgPSB0aGF0LmNsb3Nlc3QoJy53cmFwLXNlYXJjaC1hamF4JykuZmluZCgnLm92YWJydy1wcm9kdWN0cy1yZXN1bHQnKS5kYXRhKCdjbGlja2VkJyk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIGxheW91dCAhPSBsYXlvdXRfYWN0aXZlICkge1xuICAgICAgICAgICAgICAgICAgICAkKCcud3JhcC1zZWFyY2gtYWpheCAuZmlsdGVyLWxheW91dCcpLnJlbW92ZUNsYXNzKCdmaWx0ZXItbGF5b3V0LWFjdGl2ZScpO1xuICAgICAgICAgICAgICAgICAgICB0aGF0LmFkZENsYXNzKCdmaWx0ZXItbGF5b3V0LWFjdGl2ZScpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICggY2xpY2tlZCApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRBamF4U2VhcmNoKCB0cnVlICk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2FkQWpheFNlYXJjaCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8qIFNvcnQgYnkgKi9cbiAgICAgICAgICAgICQoJy5vdmFicnctc2VhcmNoLWFqYXgnKS5vbignY2xpY2snLCAnLndyYXAtc2VhcmNoLWFqYXggLm92YWJydy10b3VyLWZpbHRlciAuaW5wdXRfc2VsZWN0X2xpc3QgLnRlcm1faXRlbScgLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHRoYXQgICAgICAgICAgPSAkKHRoaXMpO1xuICAgICAgICAgICAgICAgIHZhciBzb3J0X2J5X3ZhbHVlID0gdGhhdC5jbG9zZXN0KCcuZmlsdGVyLXNvcnQnKS5maW5kKCcuaW5wdXRfc2VsZWN0X2lucHV0X3ZhbHVlJykudmFsKCk7XG4gICAgICAgICAgICAgICAgdmFyIHNlYXJjaF9yZXN1bHQgPSB0aGF0LmNsb3Nlc3QoJy53cmFwLXNlYXJjaC1hamF4JykuZmluZCgnLmJydy1zZWFyY2gtYWpheC1yZXN1bHQnKTtcbiAgICAgICAgICAgICAgICB2YXIgY2xpY2tlZCAgICAgICA9IHRoYXQuY2xvc2VzdCgnLndyYXAtc2VhcmNoLWFqYXgnKS5maW5kKCcub3ZhYnJ3LXByb2R1Y3RzLXJlc3VsdCcpLmRhdGEoJ2NsaWNrZWQnKTtcblxuICAgICAgICAgICAgICAgIGlmKCBzb3J0X2J5X3ZhbHVlID09ICdkYXRlJykge1xuICAgICAgICAgICAgICAgICAgICBzZWFyY2hfcmVzdWx0LmRhdGEoJ29yZGVyJywnREVTQycpO1xuICAgICAgICAgICAgICAgICAgICBzZWFyY2hfcmVzdWx0LmRhdGEoJ29yZGVyYnknLCdkYXRlJyk7XG4gICAgICAgICAgICAgICAgICAgIHNlYXJjaF9yZXN1bHQuZGF0YSgnb3JkZXJieV9tZXRhX2tleScsJycpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiggc29ydF9ieV92YWx1ZSA9PSAncmF0aW5nX2Rlc2MnICkge1xuICAgICAgICAgICAgICAgICAgICBzZWFyY2hfcmVzdWx0LmRhdGEoJ29yZGVyJywnREVTQycpO1xuICAgICAgICAgICAgICAgICAgICBzZWFyY2hfcmVzdWx0LmRhdGEoJ29yZGVyYnknLCdtZXRhX3ZhbHVlX251bScpO1xuICAgICAgICAgICAgICAgICAgICBzZWFyY2hfcmVzdWx0LmRhdGEoJ29yZGVyYnlfbWV0YV9rZXknLCdfd2NfYXZlcmFnZV9yYXRpbmcnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYoIHNvcnRfYnlfdmFsdWUgPT0gJ3ByaWNlX2FzYycgKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlYXJjaF9yZXN1bHQuZGF0YSgnb3JkZXInLCdBU0MnKTtcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoX3Jlc3VsdC5kYXRhKCdvcmRlcmJ5JywnbWV0YV92YWx1ZV9udW0nKTtcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoX3Jlc3VsdC5kYXRhKCdvcmRlcmJ5X21ldGFfa2V5JywnX3ByaWNlJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmKCBzb3J0X2J5X3ZhbHVlID09ICdwcmljZV9kZXNjJyApIHtcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoX3Jlc3VsdC5kYXRhKCdvcmRlcicsJ0RFU0MnKTtcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoX3Jlc3VsdC5kYXRhKCdvcmRlcmJ5JywnbWV0YV92YWx1ZV9udW0nKTtcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoX3Jlc3VsdC5kYXRhKCdvcmRlcmJ5X21ldGFfa2V5JywnX3ByaWNlJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCBjbGlja2VkICkge1xuICAgICAgICAgICAgICAgICAgICBsb2FkQWpheFNlYXJjaCggdHJ1ZSApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxvYWRBamF4U2VhcmNoKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8qIFBhZ2luYXRpb24gKi9cbiAgICAgICAgICAgICQoZG9jdW1lbnQpLm9uKCdjbGljaycsICcub3ZhYnJ3LXNlYXJjaC1hamF4IC53cmFwLXNlYXJjaC1hamF4IC5vdmFicnctcGFnaW5hdGlvbi1hamF4IC5wYWdlLW51bWJlcnMnLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHRoYXQgICAgPSAkKHRoaXMpO1xuICAgICAgICAgICAgICAgIHZhciBjdXJyZW50ID0gJCgnLndyYXAtc2VhcmNoLWFqYXggLm92YWJydy1wYWdpbmF0aW9uLWFqYXggLmN1cnJlbnQnKS5hdHRyKCdkYXRhLXBhZ2VkJyk7XG4gICAgICAgICAgICAgICAgdmFyIHBhZ2VkICAgPSB0aGF0LmF0dHIoJ2RhdGEtcGFnZWQnKTtcbiAgICAgICAgICAgICAgICB2YXIgY2xpY2tlZCA9IHRoYXQuY2xvc2VzdCgnLmJydy1zZWFyY2gtYWpheC1yZXN1bHQnKS5maW5kKCcub3ZhYnJ3LXByb2R1Y3RzLXJlc3VsdCcpLmRhdGEoJ2NsaWNrZWQnKTtcblxuICAgICAgICAgICAgICAgIGlmICggY3VycmVudCAhPSBwYWdlZCApIHtcbiAgICAgICAgICAgICAgICAgICAgJCh3aW5kb3cpLnNjcm9sbFRvcCgwKTtcbiAgICAgICAgICAgICAgICAgICAgJCgnLndyYXAtc2VhcmNoLWFqYXggLm92YWJydy1wYWdpbmF0aW9uLWFqYXggLnBhZ2UtbnVtYmVycycpLnJlbW92ZUNsYXNzKCdjdXJyZW50Jyk7XG4gICAgICAgICAgICAgICAgICAgIHRoYXQuYWRkQ2xhc3MoJ2N1cnJlbnQnKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoIGNsaWNrZWQgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2FkQWpheFNlYXJjaCggdHJ1ZSApO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgbG9hZEFqYXhTZWFyY2goKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvLyBFdmVudCBjbGljayBjbGVhciBmaWx0ZXJcbiAgICAgICAgICAgICQoXCIub3ZhYnJ3LXRvdXItZmlsdGVyIC5jbGVhci1maWx0ZXJcIikub24oIFwiY2xpY2tcIiwgZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB2YXIgY2xlYXJfYnRuICAgICAgID0gJCh0aGlzKTtcbiAgICAgICAgICAgICAgICB2YXIgd3JhcF9zZWFyY2ggICAgID0gY2xlYXJfYnRuLmNsb3Nlc3QoJy53cmFwLXNlYXJjaC1hamF4Jyk7XG4gICAgICAgICAgICAgICAgdmFyIGFkdWx0cyAgICAgICAgICA9IHdyYXBfc2VhcmNoLmRhdGEoJ2FkdWx0cycpO1xuICAgICAgICAgICAgICAgIHZhciBjaGlsZHJlbnMgICAgICAgPSB3cmFwX3NlYXJjaC5kYXRhKCdjaGlsZHJlbnMnKTtcbiAgICAgICAgICAgICAgICB2YXIgYmFiaWVzICAgICAgICAgID0gd3JhcF9zZWFyY2guZGF0YSgnYmFiaWVzJyk7XG4gICAgICAgICAgICAgICAgdmFyIHNvcnRfYnlfZGVmYXVsdCA9IHdyYXBfc2VhcmNoLmRhdGEoJ3NvcnRfYnlfZGVmYXVsdCcpO1xuICAgICAgICAgICAgICAgIHZhciBzdGFydF9wcmljZSAgICAgPSB3cmFwX3NlYXJjaC5kYXRhKCdzdGFydC1wcmljZScpO1xuICAgICAgICAgICAgICAgIHZhciBlbmRfcHJpY2UgICAgICAgPSB3cmFwX3NlYXJjaC5kYXRhKCdlbmQtcHJpY2UnKTtcblxuICAgICAgICAgICAgICAgIC8vcmVzZXQgZGF0YS1wYWdlZFxuICAgICAgICAgICAgICAgIGNsZWFyX2J0bi5jbG9zZXN0KCcud3JhcC1zZWFyY2gtYWpheCcpLmZpbmQoJy5vdmFicnctcGFnaW5hdGlvbi1hamF4JykuYXR0cignZGF0YS1wYWdlZCcsIDEpO1xuXG4gICAgICAgICAgICAgICAgLy8gcmVzZXQgYWxsIGlucHV0IHNlYXJjaCBiYXJcbiAgICAgICAgICAgICAgICB3cmFwX3NlYXJjaC5maW5kKCcjYnJ3LWRlc3RpbmF0aW9ucy1zZWxlY3QtYm94LCAuYnJ3X2N1c3RvbV90YXhvbm9teV9kcm9wZG93bicpLnZhbChcImFsbFwiKS50cmlnZ2VyKFwiY2hhbmdlXCIpO1xuICAgICAgICAgICAgICAgIHdyYXBfc2VhcmNoLmZpbmQoJ2lucHV0W25hbWU9XCJvdmFicndfcGlja3VwX2RhdGVcIl0nKS52YWwoJycpLnRyaWdnZXIoXCJjaGFuZ2VcIik7XG5cbiAgICAgICAgICAgICAgICB3cmFwX3NlYXJjaC5maW5kKCdpbnB1dFtuYW1lPVwib3ZhYnJ3X2FkdWx0c1wiXScpLnZhbChhZHVsdHMpO1xuICAgICAgICAgICAgICAgIHdyYXBfc2VhcmNoLmZpbmQoJ2lucHV0W25hbWU9XCJvdmFicndfY2hpbGRyZW5zXCJdJykudmFsKGNoaWxkcmVucyk7XG4gICAgICAgICAgICAgICAgd3JhcF9zZWFyY2guZmluZCgnaW5wdXRbbmFtZT1cIm92YWJyd19iYWJpZXNcIl0nKS52YWwoYmFiaWVzKTtcblxuICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIGFkdWx0cyA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhIGFkdWx0cyApIHtcbiAgICAgICAgICAgICAgICAgICAgYWR1bHRzID0gMDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBjaGlsZHJlbnMgPT09IFwidW5kZWZpbmVkXCIgfHwgISBjaGlsZHJlbnMgKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVucyA9IDA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgYmFiaWVzID09PSBcInVuZGVmaW5lZFwiIHx8ICEgYmFiaWVzICkge1xuICAgICAgICAgICAgICAgICAgICBiYWJpZXMgPSAwO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHdyYXBfc2VhcmNoLmZpbmQoJy5vdmFicnctZ3Vlc3RzcGlja2VyIC5ndWVzdHN0b3RhbCcpLmh0bWwoYWR1bHRzICsgY2hpbGRyZW5zICsgYmFiaWVzKTtcblxuICAgICAgICAgICAgICAgIHdyYXBfc2VhcmNoLmZpbmQoJy5zZWFyY2gtYWR2YW5jZWQtZmllbGQtd3JhcHBlciBpbnB1dDpjaGVja2JveCwgLnNlYXJjaC1hZHZhbmNlZC1maWVsZC13cmFwcGVyIGlucHV0OnJhZGlvJykucmVtb3ZlQXR0cignY2hlY2tlZCcpO1xuXG4gICAgICAgICAgICAgICAgd3JhcF9zZWFyY2guZmluZCgnLmJydy10b3VyLXByaWNlLWZyb20nKS52YWwoc3RhcnRfcHJpY2UpO1xuICAgICAgICAgICAgICAgIHdyYXBfc2VhcmNoLmZpbmQoJy5icnctdG91ci1wcmljZS10bycpLnZhbChlbmRfcHJpY2UpO1xuICAgICAgICAgICAgICAgIHdyYXBfc2VhcmNoLmZpbmQoJyNicnctdG91ci1wcmljZS1zbGlkZXIgLnVpLXNsaWRlci1yYW5nZScpLmNzcyh7XCJsZWZ0XCI6XCIwXCIsXCJ3aWR0aFwiOlwiMTAwJVwifSk7XG4gICAgICAgICAgICAgICAgd3JhcF9zZWFyY2guZmluZCgnI2Jydy10b3VyLXByaWNlLXNsaWRlciAgc3BhbicpLmNzcyhcImxlZnRcIixcIjEwMCVcIik7XG4gICAgICAgICAgICAgICAgd3JhcF9zZWFyY2guZmluZCgnI2Jydy10b3VyLXByaWNlLXNsaWRlciAudWktc2xpZGVyLXJhbmdlICsgc3BhbicpLmNzcyhcImxlZnRcIixcIjBcIik7XG5cbiAgICAgICAgICAgICAgICAvLyByZXNldCBzb3J0IGJ5XG4gICAgICAgICAgICAgICAgd3JhcF9zZWFyY2guZmluZCgnLmlucHV0X3NlbGVjdF9saXN0IC50ZXJtX2l0ZW0gJykucmVtb3ZlQ2xhc3MoJ3Rlcm1faXRlbV9zZWxlY3RlZCcpO1xuICAgICAgICAgICAgICAgIHdyYXBfc2VhcmNoLmZpbmQoJy5pbnB1dF9zZWxlY3RfbGlzdCAudGVybV9pdGVtW2RhdGEtaWQ9XCInK3NvcnRfYnlfZGVmYXVsdCsnXCJdJykuYWRkQ2xhc3MoJ3Rlcm1faXRlbV9zZWxlY3RlZCcpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGlucHV0X3NlbGVjdF90ZXh0ID0gd3JhcF9zZWFyY2guZmluZCgnLmlucHV0X3NlbGVjdF9saXN0IC50ZXJtX2l0ZW1bZGF0YS1pZD1cIicrc29ydF9ieV9kZWZhdWx0KydcIl0nKS5kYXRhKCd2YWx1ZScpO1xuICAgICAgICAgICAgICAgIHdyYXBfc2VhcmNoLmZpbmQoJy5pbnB1dF9zZWxlY3RfaW5wdXQnKS52YWwoaW5wdXRfc2VsZWN0X3RleHQpO1xuICAgICAgICAgICAgICAgIHdyYXBfc2VhcmNoLmZpbmQoJy5pbnB1dF9zZWxlY3RfaW5wdXRfdmFsdWUnKS52YWwoc29ydF9ieV9kZWZhdWx0KTtcblxuICAgICAgICAgICAgICAgIHZhciBzZWFyY2hfcmVzdWx0ID0gd3JhcF9zZWFyY2guZmluZCgnLmJydy1zZWFyY2gtYWpheC1yZXN1bHQnKTtcbiAgICAgICAgICAgICAgICBpZiAoIHNvcnRfYnlfZGVmYXVsdCA9PSAnZGF0ZScgKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlYXJjaF9yZXN1bHQuZGF0YSgnb3JkZXInLCdERVNDJyk7XG4gICAgICAgICAgICAgICAgICAgIHNlYXJjaF9yZXN1bHQuZGF0YSgnb3JkZXJieScsJ2RhdGUnKTtcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoX3Jlc3VsdC5kYXRhKCdvcmRlcmJ5X21ldGFfa2V5JywnJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmKCBzb3J0X2J5X2RlZmF1bHQgPT0gJ3JhdGluZ19kZXNjJyApIHtcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoX3Jlc3VsdC5kYXRhKCdvcmRlcicsJ0RFU0MnKTtcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoX3Jlc3VsdC5kYXRhKCdvcmRlcmJ5JywnbWV0YV92YWx1ZV9udW0nKTtcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoX3Jlc3VsdC5kYXRhKCdvcmRlcmJ5X21ldGFfa2V5JywnX3djX2F2ZXJhZ2VfcmF0aW5nJyk7XG4gICAgICAgICAgICAgICAgfSAgXG4gICAgICAgICAgICAgICAgZWxzZSBpZiggc29ydF9ieV9kZWZhdWx0ID09ICdwcmljZV9hc2MnICkge1xuICAgICAgICAgICAgICAgICAgICBzZWFyY2hfcmVzdWx0LmRhdGEoJ29yZGVyJywnQVNDJyk7XG4gICAgICAgICAgICAgICAgICAgIHNlYXJjaF9yZXN1bHQuZGF0YSgnb3JkZXJieScsJ21ldGFfdmFsdWVfbnVtJyk7XG4gICAgICAgICAgICAgICAgICAgIHNlYXJjaF9yZXN1bHQuZGF0YSgnb3JkZXJieV9tZXRhX2tleScsJ19wcmljZScpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiggc29ydF9ieV9kZWZhdWx0ID09ICdwcmljZV9kZXNjJyApIHtcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoX3Jlc3VsdC5kYXRhKCdvcmRlcicsJ0RFU0MnKTtcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoX3Jlc3VsdC5kYXRhKCdvcmRlcmJ5JywnbWV0YV92YWx1ZV9udW0nKTtcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoX3Jlc3VsdC5kYXRhKCdvcmRlcmJ5X21ldGFfa2V5JywnX3ByaWNlJyk7XG4gICAgICAgICAgICAgICAgfSAgICAgIFxuXG4gICAgICAgICAgICAgICAgbG9hZEFqYXhTZWFyY2goKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvKiBWaWRlbyAmIEdhbGxlcnkgKi9cbiAgICAgICAgICAgIGZ1bmN0aW9uIHZpZGVvX3BvcHVwKCB0aGF0ICkge1xuXG4gICAgICAgICAgICAgICAgLy8gVmlkZW9cbiAgICAgICAgICAgICAgICB2YXIgYnRuX3ZpZGVvID0gdGhhdC5maW5kKCcuYnRuLXZpZGVvJyk7XG5cbiAgICAgICAgICAgICAgICAvLyBidG4gdmlkZW8gY2xpY2tcbiAgICAgICAgICAgICAgICBidG5fdmlkZW8uZWFjaCggZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICQodGhpcykub24oICdjbGljaycsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZpZGVvX2NvbnRhaW5lciA9ICQodGhpcykuY2xvc2VzdCgnLm92YS12aWRlby1nYWxsZXJ5JykuZmluZCgnLnZpZGVvLWNvbnRhaW5lcicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1vZGFsX2Nsb3NlICAgICA9ICQodGhpcykuY2xvc2VzdCgnLm92YS12aWRlby1nYWxsZXJ5JykuZmluZCgnLm92YWljb24tY2FuY2VsJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbW9kYWxfdmlkZW8gICAgID0gJCh0aGlzKS5jbG9zZXN0KCcub3ZhLXZpZGVvLWdhbGxlcnknKS5maW5kKCcubW9kYWwtdmlkZW8nKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVybCAgICAgICAgID0gZ2V0X3VybCggJCh0aGlzKS5kYXRhKCdzcmMnKSApO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRyb2xzICAgID0gJCh0aGlzKS5kYXRhKCdjb250cm9scycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9wdGlvbiAgICAgID0gJz8nO1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uICs9ICggJ3llcycgPT0gY29udHJvbHMuYXV0b3BsYXkgKSA/ICdhdXRvcGxheT0xJyAgICAgOiAnYXV0b3BsYXk9MCc7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb24gKz0gKCAneWVzJyA9PSBjb250cm9scy5tdXRlICkgICAgPyAnJm11dGU9MScgICAgIDogJyZtdXRlPTAnO1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uICs9ICggJ3llcycgPT0gY29udHJvbHMubG9vcCApICAgID8gJyZsb29wPTEnICAgICA6ICcmbG9vcD0wJztcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbiArPSAoICd5ZXMnID09IGNvbnRyb2xzLmNvbnRyb2xzICkgPyAnJmNvbnRyb2xzPTEnIDogJyZjb250cm9scz0wJztcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbiArPSAoICd5ZXMnID09IGNvbnRyb2xzLnJlbCApICAgICAgICAgPyAnJnJlbD0xJyAgICAgIDogJyZyZWw9MCc7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb24gKz0gKCAneWVzJyA9PSBjb250cm9scy5tb2Rlc3QgKSAgPyAnJm1vZGVzdGJyYW5kaW5nPTEnIDogJyZtb2Rlc3RicmFuZGluZz0wJztcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB1cmwgIT0gJ2Vycm9yJyApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb24gKz0gJyZwbGF5bGlzdD0nK3VybDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RhbF92aWRlby5hdHRyKCdzcmMnLCBcImh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL2VtYmVkL1wiICsgdXJsICsgb3B0aW9uICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlkZW9fY29udGFpbmVyLmNzcygnZGlzcGxheScsICdmbGV4Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNsb3NlIHZpZGVvXG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RhbF9jbG9zZS5vbignY2xpY2snLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWRlb19jb250YWluZXIuaGlkZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGFsX3ZpZGVvLnJlbW92ZUF0dHIoJ3NyYycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpbmRvdyBjbGlja1xuICAgICAgICAgICAgICAgICAgICAgICAgJCh3aW5kb3cpLmNsaWNrKCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBlLnRhcmdldC5jbGFzc05hbWUgPT0gJ3ZpZGVvLWNvbnRhaW5lcicgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZGVvX2NvbnRhaW5lci5oaWRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGFsX3ZpZGVvLnJlbW92ZUF0dHIoJ3NyYycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gZ2V0X3VybCggdXJsICkge1xuICAgICAgICAgICAgICAgIHZhciByZWdFeHAgPSAvXi4qKHlvdXR1LmJlXFwvfHZcXC98dVxcL1xcd1xcL3xlbWJlZFxcL3x3YXRjaFxcP3Y9fFxcJnY9KShbXiNcXCZcXD9dKikuKi87XG4gICAgICAgICAgICAgICAgdmFyIG1hdGNoID0gdXJsLm1hdGNoKHJlZ0V4cCk7XG5cbiAgICAgICAgICAgICAgICBpZiAobWF0Y2ggJiYgbWF0Y2hbMl0ubGVuZ3RoID09IDExKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaFsyXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2Vycm9yJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICQoZG9jdW1lbnQpLmZpbmQoXCIud3JhcC1zZWFyY2gtYWpheCAuYnJ3LXNlYXJjaC1hamF4LXJlc3VsdCAub3ZhLXZpZGVvLWdhbGxlcnlcIikuZWFjaCggZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoYXQgPSAkKHRoaXMpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8qIFByb2R1Y3QgR2FsbGVyeSBGYW5jeWJveCAqL1xuICAgICAgICAgICAgZnVuY3Rpb24gcHJvZHVjdF9nYWxsZXJ5X2ZhbmN5Ym94KCB0aGF0ICkge1xuICAgICAgICAgICAgICAgIHZhciBidG5fZ2FsbGVyeSA9IHRoYXQuZmluZCgnLmJ0bi1nYWxsZXJ5Jyk7XG5cbiAgICAgICAgICAgICAgICBidG5fZ2FsbGVyeS5vbignY2xpY2snLCBmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgICAgICB2YXIgZ2FsbGVyeV9kYXRhID0gJCh0aGlzKS5kYXRhKCdnYWxsZXJ5Jyk7XG4gICAgICAgICAgICAgICAgICAgIEZhbmN5Ym94LnNob3coZ2FsbGVyeV9kYXRhLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBJbWFnZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhbnpvb206IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgem9vbUZyaWN0aW9uOiAwLjcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFNjYWxlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIHByb2R1Y3RfZ2FsbGVyeV9zbGlkZXIoKSB7XG4gICAgICAgICAgICAgICAgJCgnLm92YS1nYWxsZXJ5LXNsaWRlc2hvdycpLmVhY2goIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdGhhdCAgICA9ICQodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBvcHRpb25zID0gdGhhdC5kYXRhKCdvcHRpb25zJykgPyB0aGF0LmRhdGEoJ29wdGlvbnMnKSA6IHt9O1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciByZXNwb25zaXZlX3ZhbHVlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgMDp7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM6MSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXY6ZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xpZGVCeTogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICA3Njg6e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsaWRlQnk6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgMTAyNTp7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM6IDMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xpZGVCeTogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAxMzAwOntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtczogb3B0aW9ucy5pdGVtcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIHRoYXQub3dsQ2Fyb3VzZWwoe1xuICAgICAgICAgICAgICAgICAgICAgICAgYXV0b1dpZHRoOiBvcHRpb25zLmF1dG9XaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogb3B0aW9ucy5tYXJnaW4sXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtczogb3B0aW9ucy5pdGVtcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A6IG9wdGlvbnMubG9vcCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9wbGF5OiBvcHRpb25zLmF1dG9wbGF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgYXV0b3BsYXlUaW1lb3V0OiBvcHRpb25zLmF1dG9wbGF5VGltZW91dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNlbnRlcjogb3B0aW9ucy5jZW50ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXp5TG9hZDogb3B0aW9ucy5sYXp5TG9hZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hdjogb3B0aW9ucy5uYXYsXG4gICAgICAgICAgICAgICAgICAgICAgICBkb3RzOiBvcHRpb25zLmRvdHMsXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRvcGxheUhvdmVyUGF1c2U6IG9wdGlvbnMuYXV0b3BsYXlIb3ZlclBhdXNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2xpZGVCeTogb3B0aW9ucy5zbGlkZUJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgc21hcnRTcGVlZDogb3B0aW9ucy5zbWFydFNwZWVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgcnRsOiBvcHRpb25zLnJ0bCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hdlRleHQ6W1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8aSBhcmlhLWhpZGRlbj1cInRydWVcIiBjbGFzcz1cIicrIG9wdGlvbnMubmF2X2xlZnQgKydcIj48L2k+JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPGkgYXJpYS1oaWRkZW49XCJ0cnVlXCIgY2xhc3M9XCInKyBvcHRpb25zLm5hdl9yaWdodCArJ1wiPjwvaT4nXG4gICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2l2ZTogcmVzcG9uc2l2ZV92YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhhdC5maW5kKCcuZ2FsbGVyeS1mYW5jeWJveCcpLm9mZignY2xpY2snKS5vbignY2xpY2snLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9ICQodGhpcykuZGF0YSgnaW5kZXgnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnYWxsZXJ5X2RhdGEgPSAkKHRoaXMpLmNsb3Nlc3QoJy5vdmEtZ2FsbGVyeS1wb3B1cCcpLmZpbmQoJy5vdmEtZGF0YS1nYWxsZXJ5JykuZGF0YSgnZ2FsbGVyeScpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBGYW5jeWJveC5zaG93KGdhbGxlcnlfZGF0YSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEltYWdlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhbnpvb206IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpvb21GcmljdGlvbjogMC43LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4U2NhbGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydEluZGV4OiBpbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJChkb2N1bWVudCkuZmluZChcIi53cmFwLXNlYXJjaC1hamF4IC5icnctc2VhcmNoLWFqYXgtcmVzdWx0IC5vdmEtdmlkZW8tZ2FsbGVyeVwiKS5lYWNoKCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB2YXIgdGhhdCA9ICQodGhpcyk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLyogbG9hZCBhamF4IHNlYXJjaCB0b3VyICovXG4gICAgICAgICAgICBmdW5jdGlvbiBsb2FkQWpheFNlYXJjaCggY2xpY2tlZCA9IG51bGwgKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoYXQgICAgICAgICAgICA9ICQoZG9jdW1lbnQpLmZpbmQoJy5vdmFicnctc2VhcmNoLWFqYXggLndyYXAtc2VhcmNoLWFqYXgnKTtcbiAgICAgICAgICAgICAgICB2YXIgbGF5b3V0ICAgICAgICAgID0gdGhhdC5maW5kKCcuZmlsdGVyLWxheW91dC1hY3RpdmUnKS5hdHRyKCdkYXRhLWxheW91dCcpO1xuICAgICAgICAgICAgICAgIHZhciBncmlkX2NvbHVtbiAgICAgPSB0aGF0LmRhdGEoJ2dyaWRfY29sdW1uJyk7XG4gICAgICAgICAgICAgICAgdmFyIHRodW1ibmFpbFR5cGUgICA9IHRoYXQuZGF0YSgndGh1bWJuYWlsLXR5cGUnKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB2YXIgZGVzdGluYXRpb24gICAgID0gdGhhdC5maW5kKCcjYnJ3LWRlc3RpbmF0aW9ucy1zZWxlY3QtYm94IDpzZWxlY3RlZCcpLnZhbCgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGN1c3RvbV90YXhvbm9teSA9IFtdO1xuICAgICAgICAgICAgICAgIHZhciB0YXhvbm9teV92YWx1ZSAgPSBbXTtcblxuICAgICAgICAgICAgICAgIHRoYXQuZmluZChcIi5icndfY3VzdG9tX3RheG9ub215X2Ryb3Bkb3duXCIpLmVhY2goZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBuYW1lVGF4b25vbXkgICAgPSAkKHRoaXMpLmF0dHIoJ25hbWUnKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlVGF4b25vbXkgICA9ICQodGhpcykudmFsKCk7XG4gICAgICAgICAgICAgICAgICAgIGN1c3RvbV90YXhvbm9teVtpbmRleF0gID0gbmFtZVRheG9ub215OyBcbiAgICAgICAgICAgICAgICAgICAgdGF4b25vbXlfdmFsdWVbaW5kZXhdICAgPSB2YWx1ZVRheG9ub215O1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgdmFyIHN0YXJ0X2RhdGUgICAgICA9IHRoYXQuZmluZCgnaW5wdXRbbmFtZT1cIm92YWJyd19waWNrdXBfZGF0ZVwiXScpLnZhbCgpO1xuICAgICAgICAgICAgICAgIHZhciBhZHVsdHMgICAgICAgICAgPSB0aGF0LmZpbmQoJ2lucHV0W25hbWU9XCJvdmFicndfYWR1bHRzXCJdJykudmFsKCk7XG4gICAgICAgICAgICAgICAgdmFyIGNoaWxkcmVucyAgICAgICA9IHRoYXQuZmluZCgnaW5wdXRbbmFtZT1cIm92YWJyd19jaGlsZHJlbnNcIl0nKS52YWwoKTtcbiAgICAgICAgICAgICAgICB2YXIgYmFiaWVzICAgICAgICAgID0gdGhhdC5maW5kKCdpbnB1dFtuYW1lPVwib3ZhYnJ3X2JhYmllc1wiXScpLnZhbCgpO1xuICAgICAgICAgICAgICAgIHZhciBzdGFydF9wcmljZSAgICAgPSB0aGF0LmZpbmQoJy5icnctdG91ci1wcmljZS1mcm9tJykudmFsKCk7XG4gICAgICAgICAgICAgICAgdmFyIGVuZF9wcmljZSAgICAgICA9IHRoYXQuZmluZCgnLmJydy10b3VyLXByaWNlLXRvJykudmFsKCk7XG4gICAgICAgICAgICAgICAgdmFyIHJldmlld19zY29yZSAgICA9IFtdO1xuICAgICAgICAgICAgICAgIHZhciBjYXRlZ29yaWVzICAgICAgPSBbXTtcbiAgICAgICAgICAgICAgICB2YXIgZHVyYXRpb25fZnJvbSAgID0gdGhhdC5maW5kKCcuZHVyYXRpb24tZmlsdGVyOmNoZWNrZWQnKS52YWwoKTtcbiAgICAgICAgICAgICAgICB2YXIgZHVyYXRpb25fdG8gICAgID0gdGhhdC5maW5kKCcuZHVyYXRpb24tZmlsdGVyOmNoZWNrZWQnKS5uZXh0QWxsKCcuZHVyYXRpb24tZmlsdGVyLXRvJykudmFsKCk7XG4gICAgICAgICAgICAgICAgdmFyIGR1cmF0aW9uX3R5cGUgICA9IHRoYXQuZmluZCgnLmR1cmF0aW9uLWZpbHRlcjpjaGVja2VkJykubmV4dEFsbCgnLmR1cmF0aW9uLWZpbHRlci10eXBlJykudmFsKCk7XG5cbiAgICAgICAgICAgICAgICB0aGF0LmZpbmQoXCIucmF0aW5nLWZpbHRlcjpjaGVja2VkXCIpLmVhY2goZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldmlld19zY29yZVtpbmRleF0gPSAkKHRoaXMpLnZhbCgpOyBcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB0aGF0LmZpbmQoXCIudG91ci1jYXRlZ29yeS1maWx0ZXI6Y2hlY2tlZFwiKS5lYWNoKGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICBjYXRlZ29yaWVzW2luZGV4XSA9ICQodGhpcykudmFsKCk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ICAgICAgICAgICA9IHRoYXQuZmluZCgnLmJydy1zZWFyY2gtYWpheC1yZXN1bHQnKTtcbiAgICAgICAgICAgICAgICB2YXIgb3JkZXIgICAgICAgICAgICA9IHJlc3VsdC5kYXRhKCdvcmRlcicpO1xuICAgICAgICAgICAgICAgIHZhciBvcmRlcmJ5ICAgICAgICAgID0gcmVzdWx0LmRhdGEoJ29yZGVyYnknKTtcbiAgICAgICAgICAgICAgICB2YXIgb3JkZXJieV9tZXRhX2tleSA9IHJlc3VsdC5kYXRhKCdvcmRlcmJ5X21ldGFfa2V5Jyk7XG4gICAgICAgICAgICAgICAgdmFyIHBvc3RzX3Blcl9wYWdlICAgPSByZXN1bHQuZGF0YSgncG9zdHMtcGVyLXBhZ2UnKTtcbiAgICAgICAgICAgICAgICB2YXIgZGVmYXVsdF9jYXRlZ29yeSA9IHJlc3VsdC5kYXRhKCdkZWZhdXRsLWNhdGVnb3J5Jyk7XG4gICAgICAgICAgICAgICAgdmFyIHNob3dfY2F0ZWdvcnkgICAgPSByZXN1bHQuZGF0YSgnc2hvdy1jYXRlZ29yeScpO1xuICAgICAgICAgICAgICAgIHZhciBwYWdlZCAgICAgICAgICAgID0gcmVzdWx0LmZpbmQoJy5vdmFicnctcGFnaW5hdGlvbi1hamF4IC5jdXJyZW50JykuYXR0cignZGF0YS1wYWdlZCcpO1xuXG4gICAgICAgICAgICAgICAgdGhhdC5maW5kKCcud3JhcC1sb2FkLW1vcmUnKS5zaG93KCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgZGF0YV9hamF4ICAgPSB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbjogJ292YWJyd19zZWFyY2hfYWpheCcsXG4gICAgICAgICAgICAgICAgICAgIG9yZGVyOiBvcmRlcixcbiAgICAgICAgICAgICAgICAgICAgb3JkZXJieTogb3JkZXJieSxcbiAgICAgICAgICAgICAgICAgICAgb3JkZXJieV9tZXRhX2tleTogb3JkZXJieV9tZXRhX2tleSxcbiAgICAgICAgICAgICAgICAgICAgcG9zdHNfcGVyX3BhZ2U6IHBvc3RzX3Blcl9wYWdlLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0X2NhdGVnb3J5OiBkZWZhdWx0X2NhdGVnb3J5LFxuICAgICAgICAgICAgICAgICAgICBzaG93X2NhdGVnb3J5OiBzaG93X2NhdGVnb3J5LFxuICAgICAgICAgICAgICAgICAgICBwYWdlZDogcGFnZWQsXG4gICAgICAgICAgICAgICAgICAgIGxheW91dDogbGF5b3V0LFxuICAgICAgICAgICAgICAgICAgICBncmlkX2NvbHVtbjogZ3JpZF9jb2x1bW4sXG4gICAgICAgICAgICAgICAgICAgIHRodW1ibmFpbF90eXBlOiB0aHVtYm5haWxUeXBlLFxuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbjogZGVzdGluYXRpb24sXG4gICAgICAgICAgICAgICAgICAgIGN1c3RvbV90YXhvbm9teTogY3VzdG9tX3RheG9ub215LFxuICAgICAgICAgICAgICAgICAgICB0YXhvbm9teV92YWx1ZTogdGF4b25vbXlfdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0X2RhdGU6IHN0YXJ0X2RhdGUsXG4gICAgICAgICAgICAgICAgICAgIGFkdWx0czogYWR1bHRzLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbnM6IGNoaWxkcmVucyxcbiAgICAgICAgICAgICAgICAgICAgYmFiaWVzOiBiYWJpZXMsXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0X3ByaWNlOiBzdGFydF9wcmljZSxcbiAgICAgICAgICAgICAgICAgICAgZW5kX3ByaWNlOiBlbmRfcHJpY2UsXG4gICAgICAgICAgICAgICAgICAgIHJldmlld19zY29yZTogcmV2aWV3X3Njb3JlLFxuICAgICAgICAgICAgICAgICAgICBjYXRlZ29yaWVzOiBjYXRlZ29yaWVzLFxuICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbl9mcm9tOiBkdXJhdGlvbl9mcm9tLFxuICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbl90bzogZHVyYXRpb25fdG8sXG4gICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uX3R5cGU6IGR1cmF0aW9uX3R5cGUsXG4gICAgICAgICAgICAgICAgICAgIGNsaWNrZWQ6IGNsaWNrZWQsXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgICAgIHVybDogYWpheF9vYmplY3QuYWpheF91cmwsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdQT1NUJyxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogZGF0YV9hamF4LFxuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOmZ1bmN0aW9uKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiggcmVzcG9uc2UgKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIganNvbiA9IEpTT04ucGFyc2UoIHJlc3BvbnNlICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSAkKGpzb24ucmVzdWx0KS5mYWRlT3V0KDMwMCkuZmFkZUluKDUwMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmh0bWwoaXRlbSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB1cGRhdGUgbnVtYmVyIHJlc3VsdHMgZm91bmRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbnVtYmVyX3Jlc3VsdHNfZm91bmQgPSAgcmVzdWx0LmZpbmQoJy50b3VyX251bWJlcl9yZXN1bHRzX2ZvdW5kJykudmFsKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG51bWJlcl9yZXN1bHRzX2ZvdW5kID09IHVuZGVmaW5lZCApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyX3Jlc3VsdHNfZm91bmQgPSAwIDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmNsb3Nlc3QoJy53cmFwLXNlYXJjaC1hamF4JykuZmluZCgnLm51bWJlci1yZXN1bHQtdG91ci1mb3VuZCcpLmh0bWwoJycpLmFwcGVuZCggbnVtYmVyX3Jlc3VsdHNfZm91bmQgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGlkZSBpY29uIGxvYWRpbmcgYWpheFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQuZmluZCgnLndyYXAtbG9hZC1tb3JlJykuaGlkZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZGVvX3BvcHVwKCB0aGF0ICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjdF9nYWxsZXJ5X2ZhbmN5Ym94KCB0aGF0ICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjdF9nYWxsZXJ5X3NsaWRlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIG92YV9ndWVzdHNwaWNrZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgJChcImZvcm0uYm9va2luZy1mb3JtIC5vdmFicnctd3JhcHBlci1ndWVzdHNwaWNrZXJcIikuZWFjaChmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgIHZhciB0aGF0ID0gJCh0aGlzKTtcbiAgICAgICAgICAgICAgICB2YXIgZ3Vlc3RzcGlja2VyID0gdGhhdC5maW5kKCcub3ZhYnJ3LWd1ZXN0c3BpY2tlcicpO1xuICAgICAgICAgICAgICAgIHZhciBndWVzdHNwaWNrZXJfY29udGVudCA9IHRoYXQuZmluZCgnLm92YWJydy1ndWVzdHNwaWNrZXItY29udGVudCcpXG5cbiAgICAgICAgICAgICAgICBndWVzdHNwaWNrZXIub24oJ2NsaWNrJywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIGd1ZXN0c3BpY2tlcl9jb250ZW50LnRvZ2dsZSgpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgJCh3aW5kb3cpLmNsaWNrKCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICggIWd1ZXN0c3BpY2tlci5pcyhlLnRhcmdldCkgJiYgZ3Vlc3RzcGlja2VyLmhhcyhlLnRhcmdldCkubGVuZ3RoID09PSAwICYmICFndWVzdHNwaWNrZXJfY29udGVudC5pcyhlLnRhcmdldCkgJiYgZ3Vlc3RzcGlja2VyX2NvbnRlbnQuaGFzKGUudGFyZ2V0KS5sZW5ndGggPT09IDAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBndWVzdHNwaWNrZXJfY29udGVudC5oaWRlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHZhciBtaW51cyA9IHRoYXQuZmluZCgnLm1pbnVzJyk7XG4gICAgICAgICAgICAgICAgbWludXMub24oJ2NsaWNrJywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIGd1ZXN0c3RvdGFsKCQodGhpcyksICdzdWInLCAnYm9va2luZycpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgdmFyIHBsdXMgPSB0aGF0LmZpbmQoJy5wbHVzJyk7XG4gICAgICAgICAgICAgICAgcGx1cy5vbignY2xpY2snLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgZ3Vlc3RzdG90YWwoJCh0aGlzKSwgJ3N1bScsICdib29raW5nJyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgJChcImZvcm0ucmVxdWVzdC1mb3JtIC5vdmFicnctd3JhcHBlci1ndWVzdHNwaWNrZXJcIikuZWFjaChmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgIHZhciB0aGF0ID0gJCh0aGlzKTtcbiAgICAgICAgICAgICAgICB2YXIgZ3Vlc3RzcGlja2VyID0gdGhhdC5maW5kKCcub3ZhYnJ3LWd1ZXN0c3BpY2tlcicpO1xuICAgICAgICAgICAgICAgIHZhciBndWVzdHNwaWNrZXJfY29udGVudCA9IHRoYXQuZmluZCgnLm92YWJydy1ndWVzdHNwaWNrZXItY29udGVudCcpXG5cbiAgICAgICAgICAgICAgICBndWVzdHNwaWNrZXIub24oJ2NsaWNrJywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIGd1ZXN0c3BpY2tlcl9jb250ZW50LnRvZ2dsZSgpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgJCh3aW5kb3cpLmNsaWNrKCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICggIWd1ZXN0c3BpY2tlci5pcyhlLnRhcmdldCkgJiYgZ3Vlc3RzcGlja2VyLmhhcyhlLnRhcmdldCkubGVuZ3RoID09PSAwICYmICFndWVzdHNwaWNrZXJfY29udGVudC5pcyhlLnRhcmdldCkgJiYgZ3Vlc3RzcGlja2VyX2NvbnRlbnQuaGFzKGUudGFyZ2V0KS5sZW5ndGggPT09IDAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBndWVzdHNwaWNrZXJfY29udGVudC5oaWRlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHZhciBtaW51cyA9IHRoYXQuZmluZCgnLm1pbnVzJyk7XG4gICAgICAgICAgICAgICAgbWludXMub24oJ2NsaWNrJywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIGd1ZXN0c3RvdGFsKCQodGhpcyksICdzdWInLCAncmVxdWVzdCcpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgdmFyIHBsdXMgPSB0aGF0LmZpbmQoJy5wbHVzJyk7XG4gICAgICAgICAgICAgICAgcGx1cy5vbignY2xpY2snLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgZ3Vlc3RzdG90YWwoJCh0aGlzKSwgJ3N1bScsICdyZXF1ZXN0Jyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZnVuY3Rpb24gZ3Vlc3RzdG90YWwoIHRoYXQsIGNhbCwgZm9ybSA9ICdib29raW5nJyApIHtcbiAgICAgICAgICAgICAgICB2YXIgbWF4R3Vlc3QgICAgICAgID0gdGhhdC5jbG9zZXN0KCcub3ZhYnJ3LXdyYXBwZXItZ3Vlc3RzcGlja2VyJykuZmluZCgnaW5wdXRbbmFtZT1cIm92YWJyd19tYXhfdG90YWxfZ3Vlc3RcIl0nKS52YWwoKTtcbiAgICAgICAgICAgICAgICB2YXIgZm9ybUJvb2tpbmcgICAgID0gdGhhdC5jbG9zZXN0KCdmb3JtLmJvb2tpbmctZm9ybScpO1xuICAgICAgICAgICAgICAgIHZhciBmb3JtUmVxdWVzdCAgICAgPSB0aGF0LmNsb3Nlc3QoJ2Zvcm0ucmVxdWVzdC1mb3JtJyk7XG4gICAgICAgICAgICAgICAgdmFyIGd1ZXN0c19idXR0b24gICA9IHRoYXQuY2xvc2VzdCgnLmd1ZXN0cy1idXR0b24nKTtcbiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgICA9IGd1ZXN0c19idXR0b24uZmluZCgnaW5wdXRbdHlwZT1cInRleHRcIl0nKTtcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWUgICA9IGlucHV0LnZhbCgpO1xuICAgICAgICAgICAgICAgIHZhciBtaW4gICAgID0gaW5wdXQuYXR0cignbWluJyk7XG4gICAgICAgICAgICAgICAgdmFyIG1heCAgICAgPSBpbnB1dC5hdHRyKCdtYXgnKTtcbiAgICAgICAgICAgICAgICB2YXIgd3JhcHBlcl9ndWVzdHNwaWNrZXIgPSB0aGF0LmNsb3Nlc3QoJy5vdmFicnctd3JhcHBlci1ndWVzdHNwaWNrZXInKTtcblxuICAgICAgICAgICAgICAgIGlmICggY2FsID09ICdzdWInICYmIHBhcnNlSW50KHZhbHVlKSA+IHBhcnNlSW50KG1pbikgKSB7XG4gICAgICAgICAgICAgICAgICAgIGlucHV0LnZhbChwYXJzZUludCh2YWx1ZSkgLSAxKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoICdib29raW5nJyA9PT0gZm9ybSApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEJyd19Gcm9udGVuZC5vdmFfYWpheF9zaG93X3RvdGFsX2FmdGVyX2xvYWQoZm9ybUJvb2tpbmcpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCAncmVxdWVzdCcgPT09IGZvcm0gKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGZvcm1SZXF1ZXN0Lmhhc0NsYXNzKCdyZXF1ZXN0LWZvcm0nKSApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCcndfRnJvbnRlbmQub3ZhX2NoZWNrX21heF9ndWVzdHMoZm9ybVJlcXVlc3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCBjYWwgPT0gJ3N1bScgJiYgcGFyc2VJbnQodmFsdWUpIDwgcGFyc2VJbnQobWF4KSApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCBtYXhHdWVzdCApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhZHVsdHMgPSB3cmFwcGVyX2d1ZXN0c3BpY2tlci5maW5kKCcub3ZhYnJ3X2FkdWx0cycpLnZhbCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBhZHVsdHMgPT09IFwidW5kZWZpbmVkXCIgfHwgISBhZHVsdHMgKSBhZHVsdHMgPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hpbGRyZW5zID0gd3JhcHBlcl9ndWVzdHNwaWNrZXIuZmluZCgnLm92YWJyd19jaGlsZHJlbnMnKS52YWwoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgY2hpbGRyZW5zID09PSBcInVuZGVmaW5lZFwiIHx8ICEgY2hpbGRyZW5zICkgY2hpbGRyZW5zID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJhYmllcyA9IHdyYXBwZXJfZ3Vlc3RzcGlja2VyLmZpbmQoJy5vdmFicndfYmFiaWVzJykudmFsKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIGJhYmllcyA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhIGJhYmllcyApIGJhYmllcyA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggKCBwYXJzZUludChhZHVsdHMpICsgcGFyc2VJbnQoY2hpbGRyZW5zKSArIHBhcnNlSW50KGJhYmllcykgKSA+ICggbWF4R3Vlc3QgLSAxICkgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICBpbnB1dC52YWwocGFyc2VJbnQodmFsdWUpICsgMSk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCAnYm9va2luZycgPT09IGZvcm0gKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBCcndfRnJvbnRlbmQub3ZhX2FqYXhfc2hvd190b3RhbF9hZnRlcl9sb2FkKGZvcm1Cb29raW5nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICggJ3JlcXVlc3QnID09PSBmb3JtICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBmb3JtUmVxdWVzdC5oYXNDbGFzcygncmVxdWVzdC1mb3JtJykgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQnJ3X0Zyb250ZW5kLm92YV9jaGVja19tYXhfZ3Vlc3RzKGZvcm1SZXF1ZXN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciBhZHVsdHMgPSB3cmFwcGVyX2d1ZXN0c3BpY2tlci5maW5kKCcub3ZhYnJ3X2FkdWx0cycpLnZhbCgpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgYWR1bHRzID09PSBcInVuZGVmaW5lZFwiIHx8ICEgYWR1bHRzICkgYWR1bHRzID0gMDtcblxuICAgICAgICAgICAgICAgIHZhciBjaGlsZHJlbnMgPSB3cmFwcGVyX2d1ZXN0c3BpY2tlci5maW5kKCcub3ZhYnJ3X2NoaWxkcmVucycpLnZhbCgpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgY2hpbGRyZW5zID09PSBcInVuZGVmaW5lZFwiIHx8ICEgY2hpbGRyZW5zICkgY2hpbGRyZW5zID0gMDtcblxuICAgICAgICAgICAgICAgIHZhciBiYWJpZXMgPSB3cmFwcGVyX2d1ZXN0c3BpY2tlci5maW5kKCcub3ZhYnJ3X2JhYmllcycpLnZhbCgpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgYmFiaWVzID09PSBcInVuZGVmaW5lZFwiIHx8ICEgYmFiaWVzICkgYmFiaWVzID0gMDtcblxuICAgICAgICAgICAgICAgIHZhciBndWVzdHN0b3RhbCA9IHdyYXBwZXJfZ3Vlc3RzcGlja2VyLmZpbmQoJy5ndWVzdHN0b3RhbCcpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCBndWVzdHN0b3RhbCApIHtcbiAgICAgICAgICAgICAgICAgICAgZ3Vlc3RzdG90YWwudGV4dCggcGFyc2VJbnQoYWR1bHRzKSArIHBhcnNlSW50KGNoaWxkcmVucykgKyBwYXJzZUludChiYWJpZXMpICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIG92YV9jaG9vc2VfdGltZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAkKCcub3ZhYnJ3X2ZpeGVkX3RpbWUnKS5lYWNoKCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBvdmFfZ2VuZXJhdGVfdGltZSgkKHRoaXMpKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAkKCcub3ZhYnJ3X2ZpeGVkX3RpbWUnKS5vbiggJ2NoYW5nZScsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIG92YV9nZW5lcmF0ZV90aW1lKCQodGhpcykpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIG92YV9nZW5lcmF0ZV90aW1lKCB0aGF0ICkge1xuICAgICAgICAgICAgICAgIGlmICggdGhhdCApIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRGb3JtID0gdGhhdC5jbG9zZXN0KCdmb3JtJyk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBxdHlCeUd1ZXN0ICA9IGN1cnJlbnRGb3JtLmZpbmQoJ2lucHV0W25hbWU9XCJxdHktYnktZ3Vlc3RzXCJdJykudmFsKCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0aW1lcyAgICAgICA9IHRoYXQudmFsKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCB0aW1lcyApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhX3RpbWUgICA9IHRpbWVzLnNwbGl0KCd8Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hlY2tfaW4gICAgPSBkYXRhX3RpbWVbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hlY2tfb3V0ICAgPSBkYXRhX3RpbWVbMV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQuY2xvc2VzdCgnZm9ybScpLmZpbmQoJy5vdmFicndfc3RhcnRfZGF0ZScpLnZhbChjaGVja19pbik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGF0LmNsb3Nlc3QoJ2Zvcm0nKS5maW5kKCcub3ZhYnJ3X2VuZF9kYXRlJykudmFsKGNoZWNrX291dCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcXR5QnlHdWVzdCAmJiBjaGVja19pbiAmJiBjaGVja19vdXQgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFqYXhMb2FkaW5nID0gY3VycmVudEZvcm0uZmluZCgnLm92YWJydy1kYXRlLWxvYWRpbmcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvZHVjdElEICAgPSBjdXJyZW50Rm9ybS5maW5kKCdpbnB1dFtuYW1lPVwicHJvZHVjdF9pZFwiXScpLnZhbCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhZHVsdHMgICAgICA9IGN1cnJlbnRGb3JtLmZpbmQoJ2lucHV0W25hbWU9XCJvdmFicndfYWR1bHRzXCJdJykudmFsKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoaWxkcmVuICAgID0gY3VycmVudEZvcm0uZmluZCgnaW5wdXRbbmFtZT1cIm92YWJyd19jaGlsZHJlbnNcIl0nKS52YWwoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmFiaWVzICAgICAgPSBjdXJyZW50Rm9ybS5maW5kKCdpbnB1dFtuYW1lPVwib3ZhYnJ3X2JhYmllc1wiXScpLnZhbCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBxdWFudGl0eSAgICA9IGN1cnJlbnRGb3JtLmZpbmQoJ2lucHV0W25hbWU9XCJvdmFicndfcXVhbnRpdHlcIl0nKS52YWwoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3IgICAgICAgPSBjdXJyZW50Rm9ybS5maW5kKCcuYWpheC1lcnJvcicpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWpheExvYWRpbmcuc2hvdygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yLmh0bWwoJycpLmhpZGUoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogYWpheF9vYmplY3QuYWpheF91cmwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdQT1NUJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogJ292YWJyd19jaG9vc2VfdGltZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja19pbjogY2hlY2tfaW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja19vdXQ6IGNoZWNrX291dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3RfaWQ6IHByb2R1Y3RJRCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkdWx0czogYWR1bHRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFiaWVzOiBiYWJpZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWFudGl0eTogcXVhbnRpdHlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKHJlc3BvbnNlKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcmVzcG9uc2UgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBKU09OLnBhcnNlKHJlc3BvbnNlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJ2Vycm9yJyBpbiBkYXRhICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Rm9ybS5maW5kKCdidXR0b24uYm9va2luZy1mb3JtLXN1Ym1pdCcpLnByb3AoJ2Rpc2FibGVkJywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yLmh0bWwoJycpLmFwcGVuZChkYXRhWydlcnJvciddKS5zaG93KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZvcm0uZmluZCgnYnV0dG9uLmJvb2tpbmctZm9ybS1zdWJtaXQnKS5wcm9wKCdkaXNhYmxlZCcsIGZhbHNlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBRdWFudGl0eSBieSBHdWVzdHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZvcm0uZmluZCgnLm92YWJydy13cmFwcGVyLWd1ZXN0c3BpY2tlciBpbnB1dFtuYW1lPVwib3ZhYnJ3X2FkdWx0c1wiXScpLmF0dHIoJ21heCcsIGRhdGFbJ21heF9hZHVsdHMnXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGb3JtLmZpbmQoJy5vdmFicnctd3JhcHBlci1ndWVzdHNwaWNrZXIgaW5wdXRbbmFtZT1cIm92YWJyd19hZHVsdHNcIl0nKS5hdHRyKCdtaW4nLCBkYXRhWydtaW5fYWR1bHRzJ10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Rm9ybS5maW5kKCcub3ZhYnJ3LXdyYXBwZXItZ3Vlc3RzcGlja2VyIGlucHV0W25hbWU9XCJvdmFicndfYWR1bHRzXCJdJykudmFsKGRhdGFbJ3ZhbF9hZHVsdHMnXSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZvcm0uZmluZCgnLm92YWJydy13cmFwcGVyLWd1ZXN0c3BpY2tlciBpbnB1dFtuYW1lPVwib3ZhYnJ3X2NoaWxkcmVuc1wiXScpLmF0dHIoJ21heCcsIGRhdGFbJ21heF9jaGlsZHJlbiddKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZvcm0uZmluZCgnLm92YWJydy13cmFwcGVyLWd1ZXN0c3BpY2tlciBpbnB1dFtuYW1lPVwib3ZhYnJ3X2NoaWxkcmVuc1wiXScpLmF0dHIoJ21pbicsIGRhdGFbJ21pbl9jaGlsZHJlbiddKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZvcm0uZmluZCgnLm92YWJydy13cmFwcGVyLWd1ZXN0c3BpY2tlciBpbnB1dFtuYW1lPVwib3ZhYnJ3X2NoaWxkcmVuc1wiXScpLnZhbChkYXRhWyd2YWxfY2hpbGRyZW4nXSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZvcm0uZmluZCgnLm92YWJydy13cmFwcGVyLWd1ZXN0c3BpY2tlciBpbnB1dFtuYW1lPVwib3ZhYnJ3X2JhYmllc1wiXScpLmF0dHIoJ21heCcsIGRhdGFbJ21heF9iYWJpZXMnXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGb3JtLmZpbmQoJy5vdmFicnctd3JhcHBlci1ndWVzdHNwaWNrZXIgaW5wdXRbbmFtZT1cIm92YWJyd19iYWJpZXNcIl0nKS5hdHRyKCdtaW4nLCBkYXRhWydtaW5fYmFiaWVzJ10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Rm9ybS5maW5kKCcub3ZhYnJ3LXdyYXBwZXItZ3Vlc3RzcGlja2VyIGlucHV0W25hbWU9XCJvdmFicndfYmFiaWVzXCJdJykudmFsKGRhdGFbJ3ZhbF9iYWJpZXMnXSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnJ3X0Zyb250ZW5kLm92YV9ndWVzdHNfY2FsY3VsYXRlKCBjdXJyZW50Rm9ybSApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY3VycmVudEZvcm0uaGFzQ2xhc3MoJ2Jvb2tpbmctZm9ybScpICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnJ3X0Zyb250ZW5kLm92YV9hamF4X3Nob3dfdG90YWxfYWZ0ZXJfbG9hZChjdXJyZW50Rm9ybSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGN1cnJlbnRGb3JtLmhhc0NsYXNzKCdyZXF1ZXN0LWZvcm0nKSApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJyd19Gcm9udGVuZC5vdmFfY2hlY2tfbWF4X2d1ZXN0cyhjdXJyZW50Rm9ybSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFqYXhMb2FkaW5nLmhpZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBvdmFfZGVwb3NpdDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAkKCdmb3JtLmJvb2tpbmctZm9ybSAub3ZhYnJ3LWRlcG9zaXQgLm92YWJydy10eXBlLWRlcG9zaXQnKS5lYWNoKCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB2YXIgZGVwb3NpdCA9ICQodGhpcykuZmluZCgnaW5wdXRbbmFtZT1cIm92YV90eXBlX2RlcG9zaXRcIl06Y2hlY2tlZCcpLnZhbCgpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCBkZXBvc2l0ID09ICdmdWxsJyApIHtcbiAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5jbG9zZXN0KCcub3ZhYnJ3LWRlcG9zaXQnKS5maW5kKCcudGl0bGUtZGVwb3NpdGUnKS5oaWRlKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5jbG9zZXN0KCcub3ZhYnJ3LWRlcG9zaXQnKS5maW5kKCcudGl0bGUtZGVwb3NpdGUnKS5zaG93KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICQoJ2Zvcm0uYm9va2luZy1mb3JtIC5vdmFicnctZGVwb3NpdCAub3ZhYnJ3LXR5cGUtZGVwb3NpdCcpLm9uKCAnY2hhbmdlJywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdmFyIGRlcG9zaXQgPSAkKHRoaXMpLmZpbmQoJ2lucHV0W25hbWU9XCJvdmFfdHlwZV9kZXBvc2l0XCJdOmNoZWNrZWQnKS52YWwoKTtcblxuICAgICAgICAgICAgICAgIGlmICggZGVwb3NpdCA9PSAnZnVsbCcgKSB7XG4gICAgICAgICAgICAgICAgICAgICQodGhpcykuY2xvc2VzdCgnLm92YWJydy1kZXBvc2l0JykuZmluZCgnLnRpdGxlLWRlcG9zaXRlJykuaGlkZSgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICQodGhpcykuY2xvc2VzdCgnLm92YWJydy1kZXBvc2l0JykuZmluZCgnLnRpdGxlLWRlcG9zaXRlJykuc2hvdygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuXG4gICAgICAgIG92YV9yZW1vdmVfZnJvbV9jYXJ0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICQoZG9jdW1lbnQpLm9uKCAnY2xpY2snLCAnLnJlbW92ZV9mcm9tX2NhcnRfYnV0dG9uJywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoYXQgPSAkKHRoaXMpO1xuICAgICAgICAgICAgICAgIHZhciBjYXJ0X2l0ZW1fa2V5ID0gdGhhdC5kYXRhKCAnY2FydF9pdGVtX2tleScgKTtcblxuICAgICAgICAgICAgICAgIG92YWJyd1JlbW92ZUNhcnQoY2FydF9pdGVtX2tleSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgJChkb2N1bWVudCkub24oICdjbGljaycsICcuY2FydCAucHJvZHVjdC1yZW1vdmUgYS5yZW1vdmUnLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHZhciB1cmwgICAgID0gJCh0aGlzKS5hdHRyKCdocmVmJyk7XG4gICAgICAgICAgICAgICAgdmFyIHBhcmFtcyAgPSBvdmFicndHZXRVcmxQYXJhbXMoIHVybCApO1xuICAgICAgICAgICAgICAgIHZhciBpdGVtS2V5ID0gcGFyYW1zLnJlbW92ZV9pdGVtO1xuXG4gICAgICAgICAgICAgICAgaWYgKCBpdGVtS2V5ICkge1xuICAgICAgICAgICAgICAgICAgICAkKCcub3ZhLW1lbnUtY2FydCAubWluaWNhcnQnKS5maW5kKCdhW2RhdGEtY2FydF9pdGVtX2tleT1cIicraXRlbUtleSsnXCJdJykuY2xpY2soKTtcblxuICAgICAgICAgICAgICAgICAgICBvdmFicndSZW1vdmVDYXJ0KGl0ZW1LZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBmdW5jdGlvbiBvdmFicndSZW1vdmVDYXJ0KCBjYXJ0X2l0ZW1fa2V5ID0gJycgKSB7XG4gICAgICAgICAgICAgICAgaWYgKCBjYXJ0X2l0ZW1fa2V5ICkge1xuICAgICAgICAgICAgICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBhamF4X29iamVjdC5hamF4X3VybCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdQT1NUJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246ICdvdmFicndfcmVtb3ZlX2NhcnQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcnRfaXRlbV9rZXk6IGNhcnRfaXRlbV9rZXksXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczpmdW5jdGlvbihyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcmVzcG9uc2UgIT0gJycgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJy5vdmEtbWVudS1jYXJ0JykuZmluZCgnLmNhcnQtdG90YWwgLml0ZW1zJykuaHRtbCggcmVzcG9uc2UgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIG92YWJyd0dldFVybFBhcmFtcyggaW5wdXRVcmwgPSAnJyApIHtcbiAgICAgICAgICAgICAgICB2YXIgcGFyYW1zID0ge307XG5cbiAgICAgICAgICAgICAgICBpZiAoIGlucHV0VXJsICYmIGlucHV0VXJsLnRyaW0oKSAhPT0gJycgKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0ZW1wQW5jaG9yICA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgICAgICAgICAgICAgICAgdGVtcEFuY2hvci5ocmVmID0gaW5wdXRVcmw7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIHF1ZXJ5U3RyaW5nID0gdGVtcEFuY2hvci5zZWFyY2guc2xpY2UoMSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBwYWlycyA9IHF1ZXJ5U3RyaW5nLnNwbGl0KCcmJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwOyBpIDwgcGFpcnMubGVuZ3RoOyBpKysgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFpciAgICA9IHBhaXJzW2ldLnNwbGl0KCc9Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIga2V5ICAgICA9IGRlY29kZVVSSUNvbXBvbmVudChwYWlyWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSAgID0gZGVjb2RlVVJJQ29tcG9uZW50KHBhaXJbMV0gfHwgJycpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcmFtcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgLyogcmVhZHkgKi9cbiAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoKSB7XG4gICAgICAgIEJyd19Gcm9udGVuZC5pbml0KCk7XG4gICAgfSk7XG5cbn0pKGpRdWVyeSk7Il0sIm5hbWVzIjpbIiQiLCJCcndfRnJvbnRlbmQiLCJpbml0IiwidGhpcyIsImJyd19kYXRlcGlja2VyIiwic3VibWl0X2J1dHRvbiIsIm92YV9jb2xsYXBzZWQiLCJvdmFfYWpheF9zaG93X3RvdGFsIiwib3ZhX2FqYXhfc2hvd190b3RhbF9hZnRlcl9sb2FkIiwib3ZhX2d1ZXN0c3BpY2tlciIsIm92YV9zZWFyY2hfYWpheCIsIm92YV9jaG9vc2VfdGltZSIsIm92YV9kdXJhdGlvbiIsIm92YV9kZXBvc2l0Iiwib3ZhX3JlbW92ZV9mcm9tX2NhcnQiLCJmaXJzdERheSIsImJyd19maXJzdF9kYXkiLCJkYXRhIiwiYnJ3X2xhbmdfZ2VuZXJhbF9jYWxlbmRhciIsImRhdGV0aW1lcGlja2VyIiwic2V0TG9jYWxlIiwiZGlzYWJsZWRXZWVrRGF5cyIsImJyd19kaXNhYmxlX3dlZWtfZGF5Iiwic3BsaXQiLCJtYXAiLCJpdGVtIiwicGFyc2VJbnQiLCJkYXRlX2Zvcm1hdCIsImJyd19kYXRlX2Zvcm1hdCIsIm5leHRZZWFyIiwieWVhclN0YXJ0IiwieWVhckVuZCIsInRvZGF5IiwiRGF0ZSIsImJyd19uZXh0X3llYXIiLCJnZXRGdWxsWWVhciIsInNldERhdGVGb3JtYXR0ZXIiLCJwYXJzZURhdGUiLCJkYXRlIiwiZm9ybWF0IiwiZCIsIm1vbWVudCIsImlzVmFsaWQiLCJ0b0RhdGUiLCJmb3JtYXREYXRlIiwiZWFjaCIsImRpc2FibGVkRGF0ZXMiLCJvcmRlcl90aW1lIiwidG91ckRpc2FibGVXZWVrRGF5IiwidG9TdHJpbmciLCJkYXRlUGlja2VyT3B0aW9ucyIsInNjcm9sbElucHV0IiwiZGF5T2ZXZWVrU3RhcnQiLCJtaW5EYXRlIiwidGltZXBpY2tlciIsImF1dG9jbG9zZSIsImZvY3VzIiwiZSIsImJsdXIiLCJvbiIsImN1cnJlbnRDaGVja0luIiwiY3VycmVudEZvcm0iLCJjaGVja0luIiwiY2hlY2tPdXQiLCJhamF4TG9hZGluZyIsInByb2R1Y3RJRCIsImFkdWx0cyIsImNoaWxkcmVuIiwiYmFiaWVzIiwicXVhbnRpdHkiLCJlcnJvciIsInRoYXQiLCJ2YWwiLCJjbG9zZXN0IiwiZmluZCIsInJlbW92ZSIsInNob3ciLCJodG1sIiwiaGlkZSIsImFqYXgiLCJ1cmwiLCJhamF4X29iamVjdCIsImFqYXhfdXJsIiwidHlwZSIsImFjdGlvbiIsInByb2R1Y3RfaWQiLCJwaWNrdXBfZGF0ZSIsInN1Y2Nlc3MiLCJyZXNwb25zZSIsIkpTT04iLCJwYXJzZSIsInByb3AiLCJhcHBlbmQiLCJhZnRlciIsInF0eV9ieV9ndWVzdHMiLCJhdHRyIiwib3ZhX2d1ZXN0c19jYWxjdWxhdGUiLCJoYXNDbGFzcyIsImN1cnJlbnRDaGVja0luUkIiLCJvdmFfY2hlY2tfbWF4X2d1ZXN0cyIsInRpbWUiLCJndWVzdHNUb3RhbCIsImlucHV0QWR1bHRzIiwiaW5wdXRDaGlsZHJlbiIsImlucHV0QmFiaWVzIiwidGV4dCIsImNvbnRlbnRfcmVxdWlyZWQiLCJmbGFnIiwiZW1wdHkiLCJwYXJlbnQiLCJwcmV2ZW50RGVmYXVsdCIsImFkZENsYXNzIiwiZmllbGRzUmVxdWlyZWQiLCJ0ZXJtc0NvbmRpdGlvbnMiLCJsZW5ndGgiLCJpcyIsImVycm9yVGV4dCIsImFuaW1hdGUiLCJzY3JvbGxUb3AiLCJvZmZzZXQiLCJ0b3AiLCJyZW1vdmVDbGFzcyIsInJlQ0FQVENIQSIsInRva2VuIiwic3VibWl0IiwiZmlsZSIsImxpbWl0IiwibWF4X3NpemVfbXNnIiwiZm9ybWF0c19tc2ciLCJmaWxlX21pbWVzIiwiZm9ybWF0c19maWxlIiwia2V5IiwicHVzaCIsIm5hbWUiLCJmaWxlcyIsInNpemUiLCJ0b0ZpeGVkIiwiaW5BcnJheSIsIm9mZiIsInNpYmxpbmdzIiwic2xpZGVUb2dnbGUiLCJjc3MiLCJjaGVja19pbiIsInRpbWVGcm9tIiwiZHJvcG9mZl9kYXRlIiwiY2hpbGRyZW5zIiwiZGVwb3NpdCIsIm9ial9yZXNvdXJjZSIsIm9ial9zZXJ2aWNlIiwicmVzb3VyY2VzIiwic2VydmljZXMiLCJjdXN0b21fY2tmIiwic2V0VGltZW91dCIsImNrZiIsImFqYXhfbG9hZGluZyIsIm9iaiIsIm9iX2NoZWNrYm94IiwiZXh0ZW5kIiwidGltZV9mcm9tIiwic3RyaW5naWZ5IiwidmlkZW9fcG9wdXAiLCJ2aWRlb19jb250YWluZXIiLCJtb2RhbF9jbG9zZSIsIm1vZGFsX3ZpZGVvIiwibWF0Y2giLCJnZXRfdXJsIiwiY29udHJvbHMiLCJvcHRpb24iLCJhdXRvcGxheSIsIm11dGUiLCJsb29wIiwicmVsIiwibW9kZXN0IiwicmVtb3ZlQXR0ciIsIndpbmRvdyIsImNsaWNrIiwidGFyZ2V0IiwiY2xhc3NOYW1lIiwibG9hZEFqYXhTZWFyY2giLCJjbGlja2VkIiwiZG9jdW1lbnQiLCJsYXlvdXQiLCJncmlkX2NvbHVtbiIsInRodW1ibmFpbFR5cGUiLCJkZXN0aW5hdGlvbiIsImN1c3RvbV90YXhvbm9teSIsInRheG9ub215X3ZhbHVlIiwiaW5kZXgiLCJuYW1lVGF4b25vbXkiLCJ2YWx1ZVRheG9ub215Iiwic3RhcnRfZGF0ZSIsInN0YXJ0X3ByaWNlIiwiZW5kX3ByaWNlIiwicmV2aWV3X3Njb3JlIiwiY2F0ZWdvcmllcyIsImR1cmF0aW9uX2Zyb20iLCJkdXJhdGlvbl90byIsIm5leHRBbGwiLCJkdXJhdGlvbl90eXBlIiwicmVzdWx0Iiwib3JkZXIiLCJvcmRlcmJ5Iiwib3JkZXJieV9tZXRhX2tleSIsInBvc3RzX3Blcl9wYWdlIiwiZGVmYXVsdF9jYXRlZ29yeSIsInNob3dfY2F0ZWdvcnkiLCJwYWdlZCIsInRodW1ibmFpbF90eXBlIiwianNvbiIsImZhZGVPdXQiLCJmYWRlSW4iLCJ1bmRlZmluZWQiLCJudW1iZXJfcmVzdWx0c19mb3VuZCIsImdhbGxlcnlfZGF0YSIsIkZhbmN5Ym94IiwiSW1hZ2UiLCJQYW56b29tIiwiem9vbUZyaWN0aW9uIiwibWF4U2NhbGUiLCJvcHRpb25zIiwicmVzcG9uc2l2ZV92YWx1ZSIsIjAiLCJpdGVtcyIsIm5hdiIsInNsaWRlQnkiLCI3NjgiLCIxMDI1IiwiMTMwMCIsIm93bENhcm91c2VsIiwiYXV0b1dpZHRoIiwibWFyZ2luIiwiYXV0b3BsYXlUaW1lb3V0IiwiY2VudGVyIiwibGF6eUxvYWQiLCJkb3RzIiwiYXV0b3BsYXlIb3ZlclBhdXNlIiwic21hcnRTcGVlZCIsInJ0bCIsIm5hdlRleHQiLCJuYXZfbGVmdCIsIm5hdl9yaWdodCIsInJlc3BvbnNpdmUiLCJzdGFydEluZGV4IiwiYWR2YW5jZWRfc2VhcmNoIiwiYWR2YW5jZWRfc2VhcmNoX2lucHV0IiwibGF5b3V0X2FjdGl2ZSIsInNvcnRfYnlfdmFsdWUiLCJzZWFyY2hfcmVzdWx0IiwiY3VycmVudCIsImNsZWFyX2J0biIsIndyYXBfc2VhcmNoIiwic29ydF9ieV9kZWZhdWx0IiwidHJpZ2dlciIsImxlZnQiLCJ3aWR0aCIsImlucHV0X3NlbGVjdF90ZXh0IiwiZ3Vlc3RzdG90YWwiLCJjYWwiLCJmb3JtIiwibWF4R3Vlc3QiLCJmb3JtQm9va2luZyIsImZvcm1SZXF1ZXN0IiwiaW5wdXQiLCJ2YWx1ZSIsIm1pbiIsIm1heCIsIndyYXBwZXJfZ3Vlc3RzcGlja2VyIiwiZ3Vlc3RzcGlja2VyIiwiZ3Vlc3RzcGlja2VyX2NvbnRlbnQiLCJ0b2dnbGUiLCJoYXMiLCJvdmFfZ2VuZXJhdGVfdGltZSIsImNoZWNrX291dCIsInF0eUJ5R3Vlc3QiLCJ0aW1lcyIsImRhdGFfdGltZSIsIm92YWJyd1JlbW92ZUNhcnQiLCJjYXJ0X2l0ZW1fa2V5IiwiaXRlbUtleSIsImlucHV0VXJsIiwicGFyYW1zIiwidHJpbSIsInRlbXBBbmNob3IiLCJjcmVhdGVFbGVtZW50IiwiaHJlZiIsInBhaXJzIiwic2VhcmNoIiwic2xpY2UiLCJpIiwicGFpciIsImRlY29kZVVSSUNvbXBvbmVudCIsIm92YWJyd0dldFVybFBhcmFtcyIsInJlbW92ZV9pdGVtIiwicmVhZHkiLCJqUXVlcnkiXSwibWFwcGlu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