PluginProbe
Booking Calendar / 11.8.4
Booking Calendar v11.8.4
11.8.4 11.8.3 11.8.2 11.8.1 11.8 11.7 11.6.1 11.6 11.5 11.4.3 11.4.2 11.4.1 11.4 11.3 11.2.1 11.2 11.1 11.0 10.15.7 10.15.6 10.1.3 10.10 10.10.1 10.10.2 10.11 All 204 releases
← All changes | _dist/bfb/_out/wpbc_bfb.js +19 -8 11.311.8.4 View file →
@@ -852,9 +852,10 @@
852 852 const schemas=window.WPBC_BFB_Schemas||{};const typeKey=sel.dataset&&sel.dataset.type||'';const schemaEntry=schemas[typeKey]||null;const propsSchema=schemaEntry&&schemaEntry.schema&&schemaEntry.schema.props?schemaEntry.schema.props:{};const hasOwn=Function.prototype.call.bind(Object.prototype.hasOwnProperty);const getDefault=key=>{const meta=propsSchema[key];return meta&&hasOwn(meta,'default')?meta.default:undefined;};ins.querySelectorAll('[data-inspector-key]').forEach(ctrl=>{const key=String(ctrl.dataset?.inspectorKey||'').toLowerCase();if(!key||SKIP.test(key))return;// Element-level lock.
853 853 const dl=(ctrl.dataset?.locked||'').trim().toLowerCase();if(dl==='1'||dl==='true'||dl==='yes')return;// Respect explicit adapters.
854 854 if(ctrl.dataset?.value_from||ctrl.dataset?.valueFrom)return;const raw=sel.dataset?sel.dataset[key]:undefined;const hasRaw=sel.dataset?hasOwn(sel.dataset,key):false;const defValue=getDefault(key);// Best-effort control typing with schema default fallback when value is absent.
855 855 if(ctrl instanceof HTMLInputElement&&(ctrl.type==='checkbox'||ctrl.type==='radio')){// If dataset is missing the key entirely -> use schema default (boolean).
856 -if(!hasRaw){ctrl.checked=!!defValue;}else{ctrl.checked=Core.WPBC_BFB_Sanitize.coerce_boolean(raw,!!defValue);}}else if('value'in ctrl){if(hasRaw){ctrl.value=raw!=null?String(raw):'';}else{ctrl.value=defValue==null?'':String(defValue);}}});}_bind_id_sanitizer(){const b=this.builder;const ins=document.getElementById('wpbc_bfb__inspector');if(!ins){return;}if(ins.__wpbc_bfb_id_sanitizer_bound){return;}ins.__wpbc_bfb_id_sanitizer_bound=true;const handler=e=>{const t=e.target;if(!t||!('value'in t)){return;}const key=(t.dataset?.inspectorKey||'').toLowerCase();const sel=b.get_selected_field?.();const isSection=sel?.classList?.contains('wpbc_bfb__section');if(!sel)return;// Unified emitter that always includes the element reference.
856 +if(!hasRaw){ctrl.checked=!!defValue;}else{// An explicit empty value is the legacy persisted representation of false.
857 +ctrl.checked=Core.WPBC_BFB_Sanitize.coerce_boolean(raw,false);}}else if('value'in ctrl){if(hasRaw){ctrl.value=raw!=null?String(raw):'';}else{ctrl.value=defValue==null?'':String(defValue);}}});}_bind_id_sanitizer(){const b=this.builder;const ins=document.getElementById('wpbc_bfb__inspector');if(!ins){return;}if(ins.__wpbc_bfb_id_sanitizer_bound){return;}ins.__wpbc_bfb_id_sanitizer_bound=true;const handler=e=>{const t=e.target;if(!t||!('value'in t)){return;}const key=(t.dataset?.inspectorKey||'').toLowerCase();const sel=b.get_selected_field?.();const isSection=sel?.classList?.contains('wpbc_bfb__section');if(!sel)return;// Unified emitter that always includes the element reference.
857 858 const EV=Core.WPBC_BFB_Events;// STRUCTURE_CHANGE can be "expensive" because other listeners may trigger full canvas refresh.
858 859 // Debounce only continuous controls (e.g. value slider scrubbing) on the INPUT phase.
859 860 const ensure_sc_debounce_state=()=>{if(b.__wpbc_bfb_sc_debounce_state){return b.__wpbc_bfb_sc_debounce_state;}b.__wpbc_bfb_sc_debounce_state={timer_id:0,pending_payload:null};return b.__wpbc_bfb_sc_debounce_state;};const cancel_sc_debounced_emit=()=>{const st=b.__wpbc_bfb_sc_debounce_state;if(!st)return;try{clearTimeout(st.timer_id);}catch(_){}st.timer_id=0;st.pending_payload=null;};const bus_emit_change=(reason,extra={})=>{// If we’re committing something (change/blur/etc), drop any pending "input" emit.
860 861 cancel_sc_debounced_emit();b.bus?.emit?.(EV.STRUCTURE_CHANGE,{reason,el:sel,...extra});};const bus_emit_change_debounced=(reason,extra={},wait_ms)=>{const st=ensure_sc_debounce_state();const ms=Number.isFinite(wait_ms)?wait_ms:Number.isFinite(UI.STRUCTURE_CHANGE_DEBOUNCE_MS)?UI.STRUCTURE_CHANGE_DEBOUNCE_MS:240;// Capture the CURRENT selected element into the payload now (stable ref).
@@ -887,9 +888,10 @@
887 888 b.render_preview(sel);bus_emit_change('label-change');return;}// ---- DEFAULT (GENERIC): dataset writer for both fields & sections ----
888 889 // Any inspector control with [data-inspector-key] that doesn't have a custom
889 890 // adapter/value_from will simply read/write sel.dataset[key].
890 891 if(key){const selfLocked=/^(1|true|yes)$/i.test((t.dataset?.locked||'').trim());if(selfLocked){return;}// Skip keys we handled above to avoid double work.
891 -if(key==='id'||key==='name'||key==='html_id'||key==='cssclass'||key==='label'){return;}let nextVal='';if(t instanceof HTMLInputElement&&(t.type==='checkbox'||t.type==='radio')){nextVal=t.checked?'1':'';}else if('value'in t){nextVal=String(t.value??'');}// Persist to dataset.
892 +if(key==='id'||key==='name'||key==='html_id'||key==='cssclass'||key==='label'){return;}let nextVal='';if(t instanceof HTMLInputElement&&(t.type==='checkbox'||t.type==='radio')){// Persist both boolean states explicitly so schema defaults cannot replace false.
893 +nextVal=t.checked?'true':'false';}else if('value'in t){nextVal=String(t.value??'');}// Persist to dataset.
892 894 if(sel?.dataset)sel.dataset[key]=nextVal;// Generator controls are "UI inputs" — avoid STRUCTURE_CHANGE spam while dragging/typing.
893 895 const is_gen_key=key.indexOf('gen_')===0;// Re-render on visual keys so preview stays in sync (calendar label/help, etc.).
894 896 const visualKeys=new Set(['help','placeholder','min_width','cssclass']);if(!isSection&&(visualKeys.has(key)||key.startsWith('ui_'))){// Light heuristic: only re-render on commit for heavy inputs; live for short ones is fine.
895 897 if(e.type==='change'||key==='help'||key==='placeholder'){b.render_preview(sel);}}if(!(is_gen_key&&e.type==='input')){// Debounce continuous value slider input events to avoid full-canvas refresh spam.
@@ -980,15 +982,24 @@
980 982 String(section_data.cssclass).split(/\s+/).filter(Boolean).forEach(cls=>section.classList.add(cls));}const row=section.querySelector('.wpbc_bfb__row');// Delegate parsing + activation + application to the Column Styles service.
981 983 try{const json=section.getAttribute('data-col_styles')||(section.dataset?section.dataset.col_styles||'':'');const arr=UI.WPBC_BFB_Column_Styles.parse_col_styles(json);UI.WPBC_BFB_Column_Styles.apply(section,arr);}catch(_e){}cols_data.forEach((col_data,index)=>{const columns_only=row.querySelectorAll(':scope > .wpbc_bfb__column');const col=columns_only[index];col.style.flexBasis=col_data.width||'100%';(col_data.items||[]).forEach(item=>{if(!item||!item.type){return;}if(item.type==='field'){const el=b.build_field(item.data);if(el){col.appendChild(el);b.trigger_field_drop_callback(el,'load');}return;}if(item.type==='section'){this.rebuild_section(item.data,col);}});});const computed=b.layout.compute_effective_bases_from_row(row,b.col_gap_percent);b.layout.apply_bases_to_row(row,computed.bases);this.init_all_nested_sortables(section);// NEW: retag UIDs first (so uniqueness checks don't exclude originals), then dedupe all keys.
982 984 this._retag_uids_in_subtree(section);this._dedupe_subtree_strict(section);return section;}/** @param {HTMLElement} container */init_all_nested_sortables(container){const b=this.builder;if(container.classList.contains('wpbc_bfb__form_preview_section_container')){this.init_section_sortable(container);}container.querySelectorAll('.wpbc_bfb__section').forEach(section=>{section.querySelectorAll('.wpbc_bfb__column').forEach(col=>{this.init_section_sortable(col);});});}/** @param {HTMLElement} container */init_section_sortable(container){const b=this.builder;if(!container){return;}const is_column=container.classList.contains('wpbc_bfb__column');const is_top_level=container.classList.contains('wpbc_bfb__form_preview_section_container');if(!is_column&&!is_top_level){return;}b.init_sortable?.(container);}};/**
983 985 * Serialization and deserialization of pages/sections/fields.
984 - */UI.WPBC_BFB_Structure_IO=class extends UI.WPBC_BFB_Module{init(){this.builder.get_structure=()=>this.serialize();this.builder.load_saved_structure=(s,opts)=>this.deserialize(s,opts);}/** @returns {Array} */serialize(){const b=this.builder;this._normalize_ids();this._normalize_names();const pages=[];b.pages_container.querySelectorAll('.wpbc_bfb__panel--preview').forEach((page_el,page_index)=>{const container=page_el.querySelector('.wpbc_bfb__form_preview_section_container');const content=[];if(!container){pages.push({page:page_index+1,content});return;}container.querySelectorAll(':scope > *').forEach(child=>{if(child.classList.contains('wpbc_bfb__section')){content.push({type:'section',data:this.serialize_section(child)});return;}if(child.classList.contains('wpbc_bfb__field')){if(child.classList.contains('is-invalid')){return;}const f_data=Core.WPBC_Form_Builder_Helper.get_all_data_attributes(child);// Drop ephemeral/editor-only flags
986 + */UI.WPBC_BFB_Structure_IO=class extends UI.WPBC_BFB_Module{init(){this.builder.get_structure=()=>this.serialize();this.builder.load_saved_structure=(s,opts)=>this.deserialize(s,opts);}/**
987 + * Normalize option values when a field explicitly disables separate values.
988 + *
989 + * Older Builder versions persisted an unchecked value_differs toggle as an
990 + * empty string. Treat that explicit legacy value as false, while retaining
991 + * the schema default when the property is genuinely absent.
992 + *
993 + * @param {Object} field_data Serialized field data.
994 + * @returns {Object} Normalized serialized field data.
995 + */_normalize_field_option_values(field_data){const has_value_differs=Object.prototype.hasOwnProperty.call(field_data,'value_differs');if(!has_value_differs){return field_data;}const value_differs=Core.WPBC_BFB_Sanitize.coerce_boolean(field_data.value_differs,false);field_data.value_differs=value_differs;if(!value_differs&&Array.isArray(field_data.options)){field_data.options=field_data.options.map(option_record=>{if(!option_record||typeof option_record!=='object'){return option_record;}return Object.assign({},option_record,{value:String(option_record.label==null?'':option_record.label)});});}return field_data;}/** @returns {Array} */serialize(){const b=this.builder;this._normalize_ids();this._normalize_names();const pages=[];b.pages_container.querySelectorAll('.wpbc_bfb__panel--preview').forEach((page_el,page_index)=>{const container=page_el.querySelector('.wpbc_bfb__form_preview_section_container');const content=[];if(!container){pages.push({page:page_index+1,content});return;}container.querySelectorAll(':scope > *').forEach(child=>{if(child.classList.contains('wpbc_bfb__section')){content.push({type:'section',data:this.serialize_section(child)});return;}if(child.classList.contains('wpbc_bfb__field')){if(child.classList.contains('is-invalid')){return;}const f_data=this._normalize_field_option_values(Core.WPBC_Form_Builder_Helper.get_all_data_attributes(child));// Drop ephemeral/editor-only flags
985 996 ['uid','fresh','autoname','was_loaded','name_user_touched'].forEach(k=>{if(k in f_data)delete f_data[k];});content.push({type:'field',data:f_data});}});pages.push({page:page_index+1,content});});return pages;}/**
986 997 * @param {HTMLElement} section_el
987 998 * @returns {{id:string,label:string,html_id:string,cssclass:string,col_styles:string,columns:Array}}
988 999 */serialize_section(section_el){const row=section_el.querySelector(':scope > .wpbc_bfb__row');// NEW: read per-column styles from dataset/attributes (underscore & hyphen)
989 1000 var col_styles_raw=section_el.getAttribute('data-col_styles')||(section_el.dataset?section_el.dataset.col_styles:'')||'';const base={id:section_el.dataset.id,label:section_el.dataset.label||'',html_id:section_el.dataset.html_id||'',cssclass:section_el.dataset.cssclass||'',col_styles:String(col_styles_raw)// <-- NEW: keep as raw JSON string
990 -};if(!row){return Object.assign({},base,{columns:[]});}const columns=[];row.querySelectorAll(':scope > .wpbc_bfb__column').forEach(function(col){const width=col.style.flexBasis||'100%';const items=[];Array.prototype.forEach.call(col.children,function(child){if(child.classList.contains('wpbc_bfb__section')){items.push({type:'section',data:this.serialize_section(child)});return;}if(child.classList.contains('wpbc_bfb__field')){if(child.classList.contains('is-invalid')){return;}const f_data=Core.WPBC_Form_Builder_Helper.get_all_data_attributes(child);['uid','fresh','autoname','was_loaded','name_user_touched'].forEach(function(k){if(k in f_data){delete f_data[k];}});items.push({type:'field',data:f_data});}}.bind(this));columns.push({width:width,items:items});}.bind(this));// Clamp persisted col_styles to the actual number of columns on Save.
1001 +};if(!row){return Object.assign({},base,{columns:[]});}const columns=[];row.querySelectorAll(':scope > .wpbc_bfb__column').forEach(function(col){const width=col.style.flexBasis||'100%';const items=[];Array.prototype.forEach.call(col.children,function(child){if(child.classList.contains('wpbc_bfb__section')){items.push({type:'section',data:this.serialize_section(child)});return;}if(child.classList.contains('wpbc_bfb__field')){if(child.classList.contains('is-invalid')){return;}const f_data=this._normalize_field_option_values(Core.WPBC_Form_Builder_Helper.get_all_data_attributes(child));['uid','fresh','autoname','was_loaded','name_user_touched'].forEach(function(k){if(k in f_data){delete f_data[k];}});items.push({type:'field',data:f_data});}}.bind(this));columns.push({width:width,items:items});}.bind(this));// Clamp persisted col_styles to the actual number of columns on Save.
991 1002 try{const colCount=columns.length;const raw=String(col_styles_raw||'').trim();if(raw){let arr=[];try{const parsed=JSON.parse(raw);arr=Array.isArray(parsed)?parsed:parsed&&Array.isArray(parsed.columns)?parsed.columns:[];}catch(_e){arr=[];}if(colCount<=0){base.col_styles='[]';}else{if(arr.length>colCount)arr.length=colCount;while(arr.length<colCount)arr.push({});base.col_styles=JSON.stringify(arr);}}else{base.col_styles='';}}catch(_e){}return Object.assign({},base,{columns:columns});}/**
992 1003 * @param {Array} structure
993 1004 * @param {{deferIfTyping?: boolean}} [opts = {}]
994 1005 */deserialize(structure,{deferIfTyping=true}={}){const b=this.builder;if(deferIfTyping&&this._is_typing_in_inspector()){clearTimeout(this._defer_timer);this._defer_timer=setTimeout(()=>{this.deserialize(structure,{deferIfTyping:false});},150);return;}b.pages_container.innerHTML='';b.page_counter=0;(structure||[]).forEach(page_data=>{const page_el=b.pages_sections.add_page({scroll:false});const section_container=page_el.querySelector('.wpbc_bfb__form_preview_section_container');section_container.innerHTML='';b.init_section_sortable?.(section_container);(page_data.content||[]).forEach(item=>{if(item.type==='section'){// Now returns the element; attributes (incl. col_styles) are applied inside rebuild.
@@ -1327,11 +1338,11 @@
1327 1338 try{const hasSlotHost=this.panel.querySelector('[data-bfb-slot="layout_chips"]')||this.panel.querySelector('.inspector__row--layout-chips .wpbc_bfb__layout_chips')||this.panel.querySelector('#wpbc_bfb__layout_chips_host');const hasChips=!!this.panel.querySelector('.wpbc_bfb__layout_chip');if(!hasChips){// Create a host if missing and render chips into it.
1328 1339 const host=function ensureHost(root){let h=root.querySelector('[data-bfb-slot="layout_chips"]')||root.querySelector('.inspector__row--layout-chips .wpbc_bfb__layout_chips')||root.querySelector('#wpbc_bfb__layout_chips_host');if(h)return h;// Fallback host inside (or after) the “layout” group
1329 1340 const fields=root.querySelector('.wpbc_bfb__inspector__group[data-group="layout"] .group__fields')||root.querySelector('.group__fields')||root;const row=document.createElement('div');row.className='inspector__row inspector__row--layout-chips';const lab=document.createElement('label');lab.className='inspector__label';lab.textContent='Layout';const ctl=document.createElement('div');ctl.className='inspector__control';h=document.createElement('div');h.className='wpbc_bfb__layout_chips';h.setAttribute('data-bfb-slot','layout_chips');ctl.appendChild(h);row.appendChild(lab);row.appendChild(ctl);fields.appendChild(row);return h;}(this.panel);const L=w.WPBC_BFB_Core&&w.WPBC_BFB_Core.UI&&w.WPBC_BFB_Core.UI.WPBC_BFB_Layout_Chips;if(L&&typeof L.render_for_section==='function'){host.innerHTML='';L.render_for_section(this.builder,el,host);}}}catch(e){_wpbc?.dev?.error('WPBC_BFB_Inspector - render',e);}this._set_panel_section_cols(el);this.panel.scrollTop=prev_scroll;return;}this.panel.innerHTML='<div class="wpbc_bfb__inspector__empty">Select a field to edit its options.</div>';return;}// Field
1330 1341 if(!el.classList.contains('wpbc_bfb__field'))return this.clear();const data=w.WPBC_BFB_Core.WPBC_Form_Builder_Helper.get_all_data_attributes(el);const type=data.type||'text';function _get_tpl(id){if(!w.wp||!wp.template)return null;if(!document.getElementById('tmpl-'+id))return null;try{return wp.template(id);}catch(e){return null;}}const tpl_id=`wpbc-bfb-inspector-${type}`;const tpl=_get_tpl(tpl_id);const generic_tpl=_get_tpl('wpbc-bfb-inspector-generic');const schemas=w.WPBC_BFB_Schemas||{};const schema_for_type=schemas[type]||null;const Factory=w.WPBC_BFB_Core.UI&&w.WPBC_BFB_Core.UI.WPBC_BFB_Inspector_Factory;if(tpl){// NEW: merge schema defaults so missing keys (esp. booleans) honor defaults on first paint
1331 -const hasOwn=Function.call.bind(Object.prototype.hasOwnProperty);const props=schema_for_type&&schema_for_type.schema&&schema_for_type.schema.props?schema_for_type.schema.props:{};const merged={...data};if(props){Object.keys(props).forEach(k=>{const meta=props[k]||{};if(!hasOwn(data,k)||data[k]===''){if(hasOwn(meta,'default')){// Coerce booleans to a real boolean; leave others as-is
1332 -merged[k]=meta.type==='boolean'?!!meta.default:meta.default;}}else if(meta.type==='boolean'){// Normalize truthy strings into booleans for templates that check on truthiness
1333 -const v=data[k];merged[k]=v===true||v==='true'||v===1||v==='1';}});}this.panel.innerHTML=tpl(merged);this._post_render_ui();}else if(schema_for_type&&Factory){this.panel.innerHTML='';Factory.render(this.panel,schema_for_type,{...data},{el,builder:this.builder,type,title:data.label||''});// Ensure toggle normalizers and slider/number/unit wiring are attached.
1342 +const hasOwn=Function.call.bind(Object.prototype.hasOwnProperty);const props=schema_for_type&&schema_for_type.schema&&schema_for_type.schema.props?schema_for_type.schema.props:{};const merged={...data};if(props){Object.keys(props).forEach(k=>{const meta=props[k]||{};if(!hasOwn(data,k)){if(hasOwn(meta,'default')){// Coerce booleans to a real boolean; leave others as-is
1343 +merged[k]=meta.type==='boolean'?!!meta.default:meta.default;}}else if(meta.type==='boolean'){// Explicit empty values are legacy unchecked booleans, not missing defaults.
1344 +merged[k]=w.WPBC_BFB_Core.WPBC_BFB_Sanitize.coerce_boolean(data[k],false);}else if(data[k]===''&&hasOwn(meta,'default')){merged[k]=meta.default;}});}this.panel.innerHTML=tpl(merged);this._post_render_ui();}else if(schema_for_type&&Factory){this.panel.innerHTML='';Factory.render(this.panel,schema_for_type,{...data},{el,builder:this.builder,type,title:data.label||''});// Ensure toggle normalizers and slider/number/unit wiring are attached.
1334 1345 this._post_render_ui();}else if(generic_tpl){this.panel.innerHTML=generic_tpl({...data});this._post_render_ui();}else{const msg=`There are no Inspector wp.template "${tpl_id}" or Schema for this "${String(type||'')}" element.`;this.panel.innerHTML='';const div=document.createElement('div');div.className='wpbc_bfb__inspector__empty';div.textContent=msg;// safe.
1335 1346 this.panel.appendChild(div);}this._enforce_default_group_open();this.panel.scrollTop=prev_scroll;}_enforce_default_group_open(){const groups=Array.from(this.panel.querySelectorAll('.wpbc_bfb__inspector__group'));if(!groups.length)return;let found=false;groups.forEach(g=>{if(!found&&g.classList.contains('is-open')){found=true;}else{if(g.classList.contains('is-open')){g.classList.remove('is-open');g.dispatchEvent(new Event('wpbc:collapsible:close',{bubbles:true}));}else{g.classList.remove('is-open');}}});if(!found){groups[0].classList.add('is-open');groups[0].dispatchEvent(new Event('wpbc:collapsible:open',{bubbles:true}));}}/**
1336 1347 * Set data-bfb-section-cols on the inspector panel based on the current section.
1337 1348 * Uses the registered compute fn if available; falls back to direct DOM.
@@ -1339,5 +1350,5 @@
1339 1350 */_set_panel_section_cols(sectionEl){try{// Prefer the already-registered value_from helper if present.
1340 1351 var compute=w.wpbc_bfb_inspector_factory_value_from&&w.wpbc_bfb_inspector_factory_value_from.compute_section_columns;var cols=1;if(typeof compute==='function'){cols=compute({el:sectionEl})||1;}else{// Fallback: compute directly from the DOM.
1341 1352 var row=sectionEl&&sectionEl.querySelector(':scope > .wpbc_bfb__row');cols=row?row.querySelectorAll(':scope > .wpbc_bfb__column').length||1:1;if(cols<1)cols=1;if(cols>4)cols=4;}this.panel.setAttribute('data-bfb-section-cols',String(cols));}catch(_){}}_create_fallback_panel(){const p=document.createElement('div');p.id='wpbc_bfb__inspector';p.className='wpbc_bfb__inspector';document.body.appendChild(p);return/** @type {HTMLDivElement} */p;}}// Export class + ready signal.
1342 1353 w.WPBC_BFB_Inspector=WPBC_BFB_Inspector;document.dispatchEvent(new Event('wpbc_bfb_inspector_ready'));})(window);
1343 -//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX2Rpc3QvYmZiL19vdXQvd3BiY19iZmIuanMiLCJuYW1lcyI6WyJ3IiwiQ29yZSIsIldQQkNfQkZCX0NvcmUiLCJVSSIsIldQQkNfQkZCX1Nhbml0aXplIiwiZXNjX2NzcyIsInMiLCJDU1MiLCJlc2NhcGUiLCJTdHJpbmciLCJyZXBsYWNlIiwiZXNjX2F0dHJfdmFsdWVfZm9yX3NlbGVjdG9yIiwidiIsInNhbml0aXplX2h0bWxfaWQiLCJ0cmltIiwidGVzdCIsInNhbml0aXplX2h0bWxfbmFtZSIsImVzY2FwZV9odG1sIiwiZXNjYXBlX3ZhbHVlX2Zvcl9hdHRyIiwic2FuaXRpemVfY3NzX2NsYXNzbGlzdCIsInRvX3Rva2VuIiwidG9fa2ViYWIiLCJ0b0xvd2VyQ2FzZSIsImlzX3RydXRoeSIsImNvZXJjZV9ib29sZWFuIiwiZGVmIiwicGFyc2VfcGVyY2VudCIsImZhbGxiYWNrX3ZhbHVlIiwibiIsInBhcnNlRmxvYXQiLCJOdW1iZXIiLCJpc0Zpbml0ZSIsImNsYW1wIiwibWluIiwibWF4IiwiTWF0aCIsImVzY2FwZV9mb3JfYXR0cl9xdW90ZWQiLCJlc2NhcGVfZm9yX3Nob3J0Y29kZSIsInNhZmVfanNvbl9wYXJzZSIsImZhbGxiYWNrIiwiSlNPTiIsInBhcnNlIiwiXyIsInN0cmluZ2lmeV9kYXRhX3ZhbHVlIiwic3RyaW5naWZ5IiwiY29uc29sZSIsImVycm9yIiwic2FuaXRpemVfY3NzX2xlbiIsIm0iLCJtYXRjaCIsInNhbml0aXplX2hleF9jb2xvciIsIldQQkNfQkZCX0lkU2VydmljZSIsImNvbnN0cnVjdG9yIiwicGFnZXNfY29udGFpbmVyIiwiZW5zdXJlX3VuaXF1ZV9maWVsZF9pZCIsImJhc2VJZCIsImN1cnJlbnRFbCIsImJhc2UiLCJpZCIsImVzYyIsImVzY1VpZCIsIm5vdFNlbGYiLCJkYXRhc2V0IiwidWlkIiwicXVlcnlTZWxlY3RvciIsImZvdW5kIiwicmFuZG9tIiwidG9TdHJpbmciLCJzbGljZSIsImVuc3VyZV91bmlxdWVfZmllbGRfbmFtZSIsIm5hbWUiLCJzZWxlY3RvciIsImNsYXNoZXMiLCJxdWVyeVNlbGVjdG9yQWxsIiwibGVuZ3RoIiwic2V0X2ZpZWxkX2lkIiwiZmllbGRfZWwiLCJuZXdJZFJhdyIsInJlbmRlclByZXZpZXciLCJkZXNpcmVkIiwidW5pcXVlIiwic2V0QXR0cmlidXRlIiwic2V0X2ZpZWxkX25hbWUiLCJuZXdOYW1lUmF3IiwicmF3IiwiZ2V0QXR0cmlidXRlIiwic2V0X2ZpZWxkX2h0bWxfaWQiLCJuZXdIdG1sSWRSYXciLCJyZW1vdmVBdHRyaWJ1dGUiLCJodG1sSWQiLCJjbGFzaEluQ2FudmFzIiwiZG9tQ2xhc2giLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwiZG9tQ2xhc2hJc1NlbGYiLCJjb250YWlucyIsIldQQkNfQkZCX0xheW91dFNlcnZpY2UiLCJvcHRzIiwiY29sX2dhcF9wZXJjZW50IiwiY29tcHV0ZV9lZmZlY3RpdmVfYmFzZXNfZnJvbV9yb3ciLCJyb3dfZWwiLCJnYXBfcGVyY2VudCIsImNvbHMiLCJBcnJheSIsImZyb20iLCJtYXAiLCJjb2wiLCJzdHlsZSIsImZsZXhCYXNpcyIsInAiLCJOYU4iLCJzdW1fcmF3IiwicmVkdWNlIiwiYSIsImIiLCJncCIsInRvdGFsX2dhcHMiLCJhdmFpbGFibGUiLCJzY2FsZSIsImJhc2VzIiwiYXBwbHlfYmFzZXNfdG9fcm93IiwiZm9yRWFjaCIsImkiLCJzZXRfZXF1YWxfYmFzZXMiLCJlYWNoIiwiZmlsbCIsImFwcGx5X2xheW91dF9wcmVzZXQiLCJzZWN0aW9uT3JSb3ciLCJ3ZWlnaHRzIiwicm93IiwiY2xhc3NMaXN0IiwiaXNBcnJheSIsInN1bSIsImJ1aWxkX3ByZXNldHNfZm9yX2NvbHVtbnMiLCJmb3JtYXRfcHJlc2V0X2xhYmVsIiwicm91bmQiLCJqb2luIiwicGFyc2Vfd2VpZ2h0cyIsImlucHV0Iiwic3BsaXQiLCJmaWx0ZXIiLCJXUEJDX0JGQl9Vc2FnZUxpbWl0U2VydmljZSIsInBhbGV0dGVfdWxzIiwicGFyc2VfdXNhZ2VfbGltaXQiLCJJbmZpbml0eSIsInBhcnNlSW50IiwiY291bnRfdXNhZ2VfYnlfa2V5IiwidXNlZCIsImFsbCIsImVsIiwia2V5IiwidXNhZ2Vfa2V5IiwidHlwZSIsImdldF9saW1pdF9mb3Jfa2V5Iiwicm9vdHMiLCJhbGxQYWxldHRlRmllbGRzIiwiZmxhdE1hcCIsInIiLCJsaW1pdCIsInVzYWdlbnVtYmVyIiwidXBkYXRlX3BhbGV0dGVfdWkiLCJ1c2FnZSIsInBhbGV0dGVzIiwicGFsIiwicGFuZWxfZmllbGQiLCJwYWxldHRlSWQiLCJ1c2FnZUtleSIsInJhd19saW1pdCIsInBlckVsTGltaXQiLCJnbG9iYWxMaW1pdCIsImN1cnJlbnQiLCJkaXNhYmxlIiwicG9pbnRlckV2ZW50cyIsIm9wYWNpdHkiLCJjb3VudF9mb3Jfa2V5IiwibGltaXRfZm9yX2tleSIsInJlbWFpbmluZ19mb3Jfa2V5IiwiY2FuX2FkZCIsImRlbHRhIiwicmVtIiwiZ2F0ZV9vcl9hbGVydCIsImxhYmVsIiwiYWxlcnQiLCJpc191c2FnZV9vayIsIldQQkNfQkZCX0V2ZW50cyIsIk9iamVjdCIsImZyZWV6ZSIsIlNFTEVDVCIsIkNMRUFSX1NFTEVDVElPTiIsIkZJRUxEX0FERCIsIkZJRUxEX1JFTU9WRSIsIlNUUlVDVFVSRV9DSEFOR0UiLCJTVFJVQ1RVUkVfTE9BREVEIiwiV1BCQ19CRkJfRXZlbnRCdXMiLCJzY29wZV9lbCIsImVtaXQiLCJkZXRhaWwiLCJkaXNwYXRjaEV2ZW50IiwiQ3VzdG9tRXZlbnQiLCJidWJibGVzIiwib24iLCJoYW5kbGVyIiwiYWRkRXZlbnRMaXN0ZW5lciIsIm9mZiIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJXUEJDX0JGQl9Tb3J0YWJsZU1hbmFnZXIiLCJidWlsZGVyIiwiZ2lkIiwiaW5zdGFuY2VfaWQiLCJncm91cE5hbWUiLCJhbmltYXRpb24iLCJnaG9zdENsYXNzIiwiY2hvc2VuQ2xhc3MiLCJkcmFnQ2xhc3MiLCJfY29udGFpbmVycyIsIlNldCIsIl9kcmFnX2ZhaWxfc2FmZV9ib3VuZCIsIl9iaW5kX2RyYWdfZmFpbF9zYWZlIiwiX2NsZWFudXBfZHJhZ191aSIsIl9kcmFnU3RhdGUiLCJfdG9nZ2xlX2RuZF9yb290X2ZsYWdzIiwiX3JlbW92ZV9kcmFnZ2luZ19jbGFzcyIsInBhcmVudE5vZGUiLCJyZW1vdmVDaGlsZCIsImZpbmlzaF9kcmFnIiwid2luZG93IiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiZXZ0X25hbWUiLCJoaWRkZW4iLCJfdGFnX2RyYWdfbWlycm9yIiwiZXZ0IiwiZnJvbVBhbGV0dGUiLCJpbmNsdWRlcyIsInJvbGUiLCJtaXJyb3IiLCJhY3RpdmUiLCJmcm9tX3BhbGV0dGUiLCJyb290IiwiZG9jdW1lbnRFbGVtZW50IiwiYWRkIiwicmVtb3ZlIiwiZW5zdXJlX3NpbXBsZV9saXN0IiwiY29udGFpbmVyIiwiaGFuZGxlcnMiLCJTb3J0YWJsZSIsImdldCIsImNvbW1vbiIsImZvcmNlRmFsbGJhY2siLCJmYWxsYmFja09uQm9keSIsImZhbGxiYWNrVG9sZXJhbmNlIiwicmVtb3ZlQ2xvbmVPbkhpZGUiLCJvblN0YXJ0IiwiX2FkZF9kcmFnZ2luZ19jbGFzcyIsIm9uRW5kIiwic2V0VGltZW91dCIsImNyZWF0ZSIsImdyb3VwIiwicHVsbCIsInB1dCIsInNvcnQiLCJkaXJlY3Rpb24iLCJoYW5kbGUiLCJoYW5kbGVfc2VsZWN0b3IiLCJkcmFnZ2FibGUiLCJkcmFnZ2FibGVfc2VsZWN0b3IiLCJmYWxsYmFja0NsYXNzIiwicHJldmVudE9uRmlsdGVyIiwiaW52ZXJ0U3dhcCIsInN3YXBUaHJlc2hvbGQiLCJpbnZlcnRlZFN3YXBUaHJlc2hvbGQiLCJlbXB0eUluc2VydFRocmVzaG9sZCIsImRyYWdvdmVyQnViYmxlIiwic2Nyb2xsIiwic2Nyb2xsU2Vuc2l0aXZpdHkiLCJzY3JvbGxTcGVlZCIsIm9uVXBkYXRlIiwiZW5zdXJlIiwic29ydGFibGVfa2luZCIsInRvIiwiZHJhZ2dlZEVsIiwib25Nb3ZlIiwib3JpZ2luYWxFdmVudCIsImluX3ByZXZpZXdfY2FudmFzIiwiY2xvc2VzdCIsImlzQ29sdW1uIiwiZnJvbVJvdyIsInRvUm93IiwicmVjdCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImV2dFgiLCJ0b3VjaGVzIiwiY2xpZW50WCIsImV2dFkiLCJjbGllbnRZIiwicGFkZGluZ1giLCJ3aWR0aCIsInBhZGRpbmdZIiwiaGVpZ2h0IiwiaXNWaXN1YWxseUVtcHR5IiwiY2hpbGRFbGVtZW50Q291bnQiLCJpbm5lclRvcCIsInRvcCIsImlubmVyQm90dG9tIiwiYm90dG9tIiwiaW5uZXJMZWZ0IiwibGVmdCIsImlubmVyUmlnaHQiLCJyaWdodCIsImluc2lkZVgiLCJpbnNpZGVZIiwiZHMiLCJzdGlja3lUbyIsImNvbW1pdFgiLCJjb21taXRZIiwiZGVlcEluc2lkZSIsImxhc3RTd2l0Y2hUcyIsInBlcmZvcm1hbmNlIiwibm93Iiwib25BZGQiLCJfb25fYWRkX3NlY3Rpb24iLCJoYW5kbGVfb25fYWRkIiwiYmluZCIsImJ1cyIsInJlYXNvbiIsIml0ZW0iLCJkYXRhIiwiV1BCQ19Gb3JtX0J1aWxkZXJfSGVscGVyIiwiZ2V0X2FsbF9kYXRhX2F0dHJpYnV0ZXMiLCJpc1NlY3Rpb24iLCJhZGRfb3ZlcmxheV90b29sYmFyIiwicGFnZXNfc2VjdGlvbnMiLCJpbml0X2FsbF9uZXN0ZWRfc29ydGFibGVzIiwiY29sdW1ucyIsInNlbGVjdF9maWVsZCIsImFkZF9zZWN0aW9uIiwic2VjdGlvbiIsImxhc3RFbGVtZW50Q2hpbGQiLCJuZXdJbmRleCIsImNoaWxkcmVuIiwicmVmIiwiaW5zZXJ0QmVmb3JlIiwiZGVzdHJveUFsbCIsImluc3QiLCJkZXN0cm95IiwiY2xlYXIiLCJXUEJDX0JGQl9ET00iLCJTRUxFQ1RPUlMiLCJwYWdlUGFuZWwiLCJmaWVsZCIsInZhbGlkRmllbGQiLCJjb2x1bW4iLCJvdmVybGF5IiwiQ0xBU1NFUyIsInNlbGVjdGVkIiwiQVRUUiIsImNyZWF0ZV9lbGVtZW50IiwidGFnIiwiY2xhc3NfbmFtZSIsImlubmVyX2h0bWwiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwiaW5uZXJIVE1MIiwic2V0X2RhdGFfYXR0cmlidXRlcyIsImRhdGFfb2JqIiwiZW50cmllcyIsInZhbCIsInZhbHVlIiwiYXR0cmlidXRlcyIsImF0dHIiLCJzdGFydHNXaXRoIiwiZSIsImhhc0V4cGxpY2l0TGFiZWwiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJjaGFyQXQiLCJ0b1VwcGVyQ2FzZSIsInJlbmRlcl9maWVsZF9pbm5lcl9odG1sIiwiZmllbGRfZGF0YSIsImhhc0xhYmVsIiwiaXNfcmVxdWlyZWQiLCJyZXF1aXJlZCIsIndyYXBwZXIiLCJzcGFuTGFiZWwiLCJ0ZXh0Q29udGVudCIsImFwcGVuZENoaWxkIiwic3BhblR5cGUiLCJkZWJvdW5jZSIsImZuIiwid2FpdCIsInQiLCJkZWJvdW5jZWQiLCJhcmdzIiwiY2xlYXJUaW1lb3V0IiwiYXBwbHkiLCJXUEJDX0JGQl9GaWVsZF9SZW5kZXJlcl9SZWdpc3RyeSIsIk1hcCIsInJlZ2lzdGVyIiwiQ2xhc3NSZWYiLCJzZXQiLCJXUEJDX0JGQl9GaWVsZF9CYXNlIiwiZ2V0X2RlZmF1bHRzIiwiaHRtbF9pZCIsInBsYWNlaG9sZGVyIiwibWlubGVuZ3RoIiwibWF4bGVuZ3RoIiwicGF0dGVybiIsImNzc2NsYXNzIiwiaGVscCIsIm5vcm1hbGl6ZV9kYXRhIiwiZCIsImRlZmF1bHRzIiwib3V0IiwiayIsImdldF90ZW1wbGF0ZSIsInRlbXBsYXRlX2lkIiwid3AiLCJ0ZW1wbGF0ZSIsImRvbUlkIiwiX19iZmJfdHBsX2NhY2hlX21hcCIsImNvbXBpbGVyIiwicmVuZGVyIiwiY3R4IiwiY29tcGlsZSIsInNhbml0IiwidGl0bGUiLCJvbl9maWVsZF9kcm9wIiwibWV0YSIsImNvbnRleHQiLCJkZWZzIiwidW5kZWZpbmVkIiwiaGFzVmFsdWUiLCJkZWZhdWx0VmFsIiwiU3RydWN0dXJlIiwidXBkYXRlX2ZpZWxkX3Byb3AiLCJfaW5uZXIiLCJfZSIsImZyZXNoIiwiYXV0b25hbWUiLCJ3YXNfbG9hZGVkIiwiaGFzQXR0cmlidXRlIiwiUyIsInVuaXEiLCJuYW1lX3VzZXJfdG91Y2hlZCIsIm5hbWVfZnJvbV9sYWJlbCIsIm1heWJlX2F1dG9uYW1lX2Zyb21fbGFiZWwiLCJsYWJlbFZhbCIsImFsbG93QXV0byIsInVzZXJUb3VjaGVkIiwiaXNMb2FkZWQiLCJpbnMiLCJuYW1lQ3RybCIsIldQQkNfQkZCX1NlbGVjdF9CYXNlIiwib3B0aW9uX3Jvd190ZW1wbGF0ZV9pZCIsImtpbmQiLCJfX3Jvb3Rfd2lyZWQiLCJfX3Jvb3Rfbm9kZSIsInVpIiwibGlzdCIsImhvbGRlciIsInRvZ2dsZSIsImFkZF9idG4iLCJkcmFnX2hhbmRsZSIsIm11bHRpcGxlX2NoayIsImRlZmF1bHRfdGV4dCIsInBsYWNlaG9sZGVyX2lucHV0IiwicGxhY2Vob2xkZXJfbm90ZSIsInNpemVfaW5wdXQiLCJtZW51X3Jvb3QiLCJtZW51X3RvZ2dsZSIsIm1lbnVfYWN0aW9uIiwidmFsdWVfZGlmZmVyc19jaGsiLCJidWlsZF92YWx1ZV9mcm9tX2xhYmVsIiwiZGlmZmVycyIsImlzX3ZhbHVlX2RpZmZlcnNfZW5hYmxlZCIsInBhbmVsIiwiY2hrIiwiY2hlY2tlZCIsInN5bmNfdmFsdWVfaW5wdXRzX3Zpc2liaWxpdHkiLCJyb3dzIiwibGJsX2luIiwidmFsX2luIiwiZGlzcGxheSIsImhhc0NhY2hlIiwiY2FjaGVkX3ZhbHVlIiwidXNlckVkaXRlZCIsInZhbHVlX3VzZXJfdG91Y2hlZCIsImxibCIsIm1pcnJvcmVkIiwiaXNfcm93X3ZhbHVlX3VzZXJfdG91Y2hlZCIsIm1hcmtfcm93X3ZhbHVlX3VzZXJfdG91Y2hlZCIsImluaXRfcm93X2ZyZXNoX2ZsYWdzIiwibXVsdGlwbGUiLCJzaXplIiwiZGVmYXVsdF92YWx1ZSIsIm9wdGlvbnMiLCJtaW5fd2lkdGgiLCJzZXRQcm9wZXJ0eSIsInRwbCIsIl93cGJjIiwiZGV2IiwiV1BCQ19CRkJfT3ZlcmxheSIsImlzX2Ryb3AiLCJvIiwicGgiLCJkZmx0IiwiZ2V0X3BhbmVsX3Jvb3QiLCJnZXRfbGlzdCIsImdldF9ob2xkZXIiLCJtYWtlX3VpZCIsImFwcGVuZF9yb3ciLCJpZHgiLCJyb3dkIiwiYXNzaWduIiwiaW5kZXgiLCJ0cGxfaWQiLCJodG1sIiwid3JhcCIsIm5vZGUiLCJmaXJzdEVsZW1lbnRDaGlsZCIsInZhbEluIiwibGJsSW4iLCJjbG9zZV9kcm9wZG93biIsImFuY2hvcl9lbCIsImluc2VydF9hZnRlciIsIm5ld19ub2RlIiwicmVmX25vZGUiLCJuZXh0U2libGluZyIsImNvbW1pdF9vcHRpb25zIiwic2VsIiwicHVzaCIsIkV2ZW50Iiwic3luY19kZWZhdWx0X3ZhbHVlX2xvY2siLCJzeW5jX3BsYWNlaG9sZGVyX2xvY2siLCJfX3NlbGVjdGJhc2VfZmllbGQiLCJlbnN1cmVfc29ydGFibGUiLCJleGlzdGluZyIsIndwYmNfYmZiX2FwaSIsImdldF9idWlsZGVyIiwid3BiY19iZmIiLCJzb3J0YWJsZSIsInNvcnRhYmxlX2luaXQiLCJyZWJ1aWxkX2lmX2VtcHR5IiwiaGFzX3Jvd19kZWZhdWx0cyIsImNoZWNrcyIsImlzX211bHRpcGxlX2VuYWJsZWQiLCJoYXNfdGV4dF9kZWZhdWx0X3ZhbHVlIiwiZHYiLCJub3RlIiwibG9jayIsImRpc2FibGVkIiwiaXNNdWx0aXBsZSIsInBsYWNlaG9sZGVyUm93Iiwic2l6ZUlucHV0Iiwic2l6ZVJvdyIsImVuZm9yY2Vfc2luZ2xlX2RlZmF1bHQiLCJjbGlja2VkIiwia2VwdCIsImoiLCJib290c3RyYXBfcGFuZWwiLCJzZWxlY3RiYXNlX2Jvb3RzdHJhcHBlZCIsIndpcmVfb25jZSIsIl9fc2VsZWN0YmFzZV93aXJlZCIsIm9uX3JlYWR5X29yX3JlbmRlciIsImV2Iiwid2lyZV9yb290X2xpc3RlbmVycyIsImlzQ29ubmVjdGVkIiwic2VsZWN0YmFzZV9yb290X3dpcmVkIiwiZ2V0X3BhbmVsIiwidGFyZ2V0IiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJhY3Rpb24iLCJwcmV2X2NvdW50IiwiaXNfbGFiZWxfb3JfdmFsdWUiLCJpc190b2dnbGUiLCJpc19tdWx0aXBsZSIsIm1hdGNoZXMiLCJpc19kZWZhdWx0X3RleHQiLCJpc192YWx1ZV9kaWZmZXJzIiwiaXNfbXVsdGkiLCJfcHVsc2VfdGltZXJzIiwiX3B1bHNlX21ldGEiLCJQVUxTRV9USFJPVFRMRV9NUyIsIlBVTFNFX0RFQk9VTkNFX01TIiwiU1RSVUNUVVJFX0NIQU5HRV9ERUJPVU5DRV9NUyIsIlZBTFVFX1NMSURFUl9USFJPVFRMRV9NUyIsImNhbmNlbF9wdWxzZSIsImRlbGV0ZSIsInRva2VuIiwiY29sb3Jfc2V0IiwicmVtb3ZlUHJvcGVydHkiLCJkZWJvdW5jZV9pZCIsIl9yZXN0YXJ0X2Nzc19hbmltYXRpb24iLCJjbHMiLCJvZmZzZXRXaWR0aCIsInB1bHNlX29uY2UiLCJkdXJfbXMiLCJtcyIsInB1bHNlX3NlcXVlbmNlIiwidGltZXMiLCJvbl9tcyIsIm9mZl9tcyIsImhleF9jb2xvciIsImJvZHkiLCJjb3VudCIsIkRhdGUiLCJ0aHJvdHRsZV9tcyIsImxhc3RfdHMiLCJoYXZlX2NvbG9yIiwidGljayIsIm0yIiwibTMiLCJwdWxzZV9xdWVyeV9kZWJvdW5jZWQiLCJyb290X29yX3NlbGVjdG9yIiwid2FpdF9tcyIsImMiLCJjb2xvciIsImRlZl9tcyIsInB1bHNlX3F1ZXJ5IiwicHVsc2Vfc2VxdWVuY2Vfc3Ryb25nIiwiV1BCQ19CRkJfTW9kdWxlIiwiaW5pdCIsInByZXBlbmQiLCJzZXR0aW5nc19idG4iLCJvbmNsaWNrIiwic2Nyb2xsSW50b1ZpZXciLCJ3cGJjX2JmYl9fZGlzcGF0Y2hfZXZlbnRfc2FmZSIsInBhbmVsX2lkIiwidGFiX2lkIiwiYmVoYXZpb3IiLCJibG9jayIsImZvY3VzYWJsZSIsImZvY3VzIiwiV1BCQ19CRkJfTGF5b3V0X0NoaXBzIiwiX2dldF9jb2xfbWluX3B4IiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImdldFByb3BlcnR5VmFsdWUiLCJfZml0X3dlaWdodHNfcmVzcGVjdGluZ19taW4iLCJlZmYiLCJsYXlvdXQiLCJhdmFpbFBjdCIsInJvd1B4IiwiYXZhaWxQeCIsIm1pblBjdCIsIm1pblB4Iiwic3VtTWluIiwid1N1bSIsInRhcmdldFBjdCIsImxvY2tlZCIsImxvY2tlZFN1bSIsInJlbWFpbmluZyIsImZyZWVJZHgiLCJmcmVlVGFyZ2V0U3VtIiwicmVzdWx0IiwiX2FwcGx5X3ByZXNldF93aXRoX21pbl9ndWFyZCIsInNlY3Rpb25fZWwiLCJmaXR0ZWQiLCJfYW5ub3VuY2UiLCJyZW5kZXJfZm9yX3NlY3Rpb24iLCJob3N0X2VsIiwiX21ha2VfY2hpcCIsInByZXNldHMiLCJjdXN0b21CdG4iLCJleGFtcGxlIiwidGV4dCIsInByb21wdCIsImJ0biIsInZpcyIsImJhciIsImZsZXgiLCJ0b0ZpeGVkIiwidHh0IiwicGFyZW50RWxlbWVudCIsIldQQkNfQkZCX1NlbGVjdGlvbl9Db250cm9sbGVyIiwiX3NlbGVjdGVkX3VpZCIsImdldF9zZWxlY3RlZF9maWVsZCIsIl9vbl9jbGVhciIsIm9uX2NsZWFyIiwiZGVsZXRlX2l0ZW0iLCJuZWlnaGJvciIsIl9maW5kX25laWdoYm9yX3NlbGVjdGFibGUiLCJfb25fY2FudmFzX2NsaWNrIiwiX2hhbmRsZV9jYW52YXNfY2xpY2siLCJJR05PUkUiLCJoaXQiLCJwcmVzZWxlY3RfdGFiX2tleSIsImluZGV4T2YiLCJzZWMiLCJjb2xfc3R5bGVzX2FjdGl2ZV90YWIiLCJXUEJDX0JGQl9Db2x1bW5fU3R5bGVzIiwic2V0X3NlbGVjdGVkX2NvbF9mbGFnIiwidGFicyIsIndwYmNfdWlfdGFicyIsInNldF9hY3RpdmUiLCJ0YWJfa2V5IiwicHJldkVsIiwiY2xlYXJfc2VsZWN0ZWRfY29sX2ZsYWciLCJwcmV2IiwiaW5zcGVjdG9yIiwicHJldl91aWQiLCJzb3VyY2UiLCJiaW5kX3RvX2ZpZWxkIiwiSW5zcGVjdG9yRW5oYW5jZXJzIiwic2NhbiIsIldQQkNfQkZCX1ZhbHVlU2xpZGVyIiwiaW5pdF9vbiIsIldQQkNfQkZCX0luc3BlY3Rvcl9CcmlkZ2UiLCJfZ2VuZXJpY19oeWRyYXRlX2NvbnRyb2xzIiwiX2h5ZHJhdGVfc3BlY2lhbF9jb250cm9scyIsImVzY19hdHRyIiwic3JjIiwiX2F0dGFjaF9pbnNwZWN0b3IiLCJfYmluZF9pZF9zYW5pdGl6ZXIiLCJfb3Blbl9pbnNwZWN0b3JfYWZ0ZXJfZmllbGRfYWRkZWQiLCJfYmluZF9mb2N1c19zaG9ydGN1dHMiLCJhdHRhY2giLCJXUEJDX0JGQl9JbnNwZWN0b3IiLCJvbl9mb2N1cyIsImdycF9rZXkiLCJzbG90IiwiZ3JvdXBfd3JhcCIsImhlYWRlcl9idG4iLCJfb25faW5zcGVjdG9yX2ZvY3VzIiwic2V0VmFsIiwiY3RybCIsIlNLSVAiLCJzY2hlbWFzIiwiV1BCQ19CRkJfU2NoZW1hcyIsInR5cGVLZXkiLCJzY2hlbWFFbnRyeSIsInByb3BzU2NoZW1hIiwic2NoZW1hIiwicHJvcHMiLCJoYXNPd24iLCJGdW5jdGlvbiIsImdldERlZmF1bHQiLCJkZWZhdWx0IiwiaW5zcGVjdG9yS2V5IiwiZGwiLCJ2YWx1ZV9mcm9tIiwidmFsdWVGcm9tIiwiaGFzUmF3IiwiZGVmVmFsdWUiLCJIVE1MSW5wdXRFbGVtZW50IiwiX193cGJjX2JmYl9pZF9zYW5pdGl6ZXJfYm91bmQiLCJFViIsImVuc3VyZV9zY19kZWJvdW5jZV9zdGF0ZSIsIl9fd3BiY19iZmJfc2NfZGVib3VuY2Vfc3RhdGUiLCJ0aW1lcl9pZCIsInBlbmRpbmdfcGF5bG9hZCIsImNhbmNlbF9zY19kZWJvdW5jZWRfZW1pdCIsInN0IiwiYnVzX2VtaXRfY2hhbmdlIiwiZXh0cmEiLCJidXNfZW1pdF9jaGFuZ2VfZGVib3VuY2VkIiwicGF5bG9hZCIsInByZXZpZXdfbW9kZSIsInJlbmRlcl9wcmV2aWV3IiwiYXBwbGllZCIsImJlZm9yZSIsInNhbml0aXplZCIsInNlbFN0YXJ0Iiwic2VsZWN0aW9uU3RhcnQiLCJzZWxFbmQiLCJzZWxlY3Rpb25FbmQiLCJzZXRTZWxlY3Rpb25SYW5nZSIsIm5leHQiLCJkZXNpcmVkQXJyIiwiQm9vbGVhbiIsImRlc2lyZWRTZXQiLCJpc0NvcmUiLCJiZWZvcmVDbGFzc2VzIiwiY3VzdG9tQmVmb3JlIiwiaGFzIiwibWlzc2luZyIsImFmdGVyQ2xhc3NlcyIsImNoYW5nZWQiLCJzb21lIiwicGhhc2UiLCJhdXRvQWN0aXZlIiwidG9nZ2xlQXR0cmlidXRlIiwiaTE4biIsImF1dG9fZnJvbV9sYWJlbCIsInNlbGZMb2NrZWQiLCJuZXh0VmFsIiwiaXNfZ2VuX2tleSIsInZpc3VhbEtleXMiLCJpc19sZW5fZ3JvdXBfY3RybCIsIldQQkNfQkZCX0tleWJvYXJkX0NvbnRyb2xsZXIiLCJfb25fa2V5Iiwib25fa2V5IiwiaXNfdHlwaW5nIiwiX2lzX3R5cGluZ19hbnl3aGVyZSIsImFsdEtleSIsImN0cmxLZXkiLCJtZXRhS2V5Iiwic2hpZnRLZXkiLCJkaXIiLCJtb3ZlX2l0ZW0iLCJhY3RpdmVFbGVtZW50IiwidGFnTmFtZSIsImlzQ29udGVudEVkaXRhYmxlIiwiV1BCQ19CRkJfUmVzaXplX0NvbnRyb2xsZXIiLCJpbml0X3Jlc2l6ZV9oYW5kbGVyIiwiaGFuZGxlX3Jlc2l6ZSIsImJ1dHRvbiIsInJlc2l6ZXIiLCJjdXJyZW50VGFyZ2V0IiwibGVmdF9jb2wiLCJwcmV2aW91c0VsZW1lbnRTaWJsaW5nIiwicmlnaHRfY29sIiwibmV4dEVsZW1lbnRTaWJsaW5nIiwibGVmdF9pbmRleCIsInJpZ2h0X2luZGV4Iiwic3RhcnRfeCIsImxlZnRfc3RhcnRfcHgiLCJyaWdodF9zdGFydF9weCIsInBhaXJfcHgiLCJjb21wdXRlZCIsInBhaXJfYXZhaWwiLCJwY3RUb1B4IiwicGN0IiwiZ2VuZXJpY01pblBjdCIsImdlbmVyaWNNaW5QeCIsImxlZnRNaW5QeCIsInJpZ2h0TWluUHgiLCJwcmV2X3VzZXJfc2VsZWN0IiwidXNlclNlbGVjdCIsImN1cnNvciIsIm9uX21vdXNlX21vdmUiLCJkZWx0YV9weCIsIm5ld0xlZnRQeCIsIm5ld1JpZ2h0UHgiLCJuZXdMZWZ0UGN0IiwibmV3QmFzZXMiLCJvbl9tb3VzZV91cCIsIm5vcm1hbGl6ZWQiLCJXUEJDX0JGQl9QYWdlc19TZWN0aW9ucyIsImFkZF9wYWdlIiwicmVidWlsZF9zZWN0aW9uIiwic2VjdGlvbl9kYXRhIiwiaW5pdF9zZWN0aW9uX3NvcnRhYmxlIiwiX3JldGFnX3VpZHNfaW5fc3VidHJlZSIsIm5vZGVzIiwicHJlZml4IiwiX3VpZF9jb3VudGVyIiwiX21ha2VfdW5pcXVlIiwidGFrZW4iLCJzdGVtIiwiX2RlZHVwZV9zdWJ0cmVlX3N0cmljdCIsInRha2VuRGF0YUlkIiwidGFrZW5EYXRhTmFtZSIsInRha2VuSHRtbElkIiwidGFrZW5Eb21JZCIsImRpZCIsImRuYW0iLCJoaWQiLCJpc0ZpZWxkIiwiY29tYmluZWRUYWtlbiIsImNhbmRpZGF0ZSIsImh0bWxGb3IiLCJfbWFrZV9hZGRfY29sdW1uc19jb250cm9sIiwicGFnZV9lbCIsInNlY3Rpb25fY29udGFpbmVyIiwiaW5zZXJ0X3BvcyIsImNvbnRlbnQiLCJjbG9uZSIsImNsb25lTm9kZSIsImluc2VydCIsInBhZ2VfY291bnRlciIsImNvbnRyb2xzX2h0bWwiLCJyZW5kZXJfd3BfdGVtcGxhdGUiLCJwYWdlX251bWJlciIsInNlY3Rpb25fY291bnRfb25fYWRkX3BhZ2UiLCJjb250cm9sc19ob3N0X3RvcCIsImN0cmxfdG9wIiwiY29udHJvbHNfaG9zdF9ib3R0b20iLCJhZnRlciIsImN0cmxfYm90dG9tIiwic2VjdGlvbl9jb3VudGVyIiwiaW5pdF9zb3J0YWJsZSIsImNvbHNfZGF0YSIsImNvbF9zdHlsZXMiLCJqc29uIiwiYXJyIiwicGFyc2VfY29sX3N0eWxlcyIsImNvbF9kYXRhIiwiY29sdW1uc19vbmx5IiwiaXRlbXMiLCJidWlsZF9maWVsZCIsInRyaWdnZXJfZmllbGRfZHJvcF9jYWxsYmFjayIsImlzX2NvbHVtbiIsImlzX3RvcF9sZXZlbCIsIldQQkNfQkZCX1N0cnVjdHVyZV9JTyIsImdldF9zdHJ1Y3R1cmUiLCJzZXJpYWxpemUiLCJsb2FkX3NhdmVkX3N0cnVjdHVyZSIsImRlc2VyaWFsaXplIiwiX25vcm1hbGl6ZV9pZHMiLCJfbm9ybWFsaXplX25hbWVzIiwicGFnZXMiLCJwYWdlX2luZGV4IiwicGFnZSIsImNoaWxkIiwic2VyaWFsaXplX3NlY3Rpb24iLCJmX2RhdGEiLCJjb2xfc3R5bGVzX3JhdyIsImNvbENvdW50IiwicGFyc2VkIiwic3RydWN0dXJlIiwiZGVmZXJJZlR5cGluZyIsIl9pc190eXBpbmdfaW5faW5zcGVjdG9yIiwiX2RlZmVyX3RpbWVyIiwicGFnZV9kYXRhIiwid2FudCIsIldQQkNfQkZCX01pbl9XaWR0aF9HdWFyZCIsIl9vbl9maWVsZF9hZGQiLCJfb25fZmllbGRfcmVtb3ZlIiwiX29uX3N0cnVjdHVyZV9sb2FkZWQiLCJfb25fc3RydWN0dXJlX2NoYW5nZSIsIl9vbl93aW5kb3dfcmVzaXplIiwiX3BlbmRpbmdfcm93cyIsIl9wZW5kaW5nX2FsbCIsIl9yYWZfaWQiLCJwYXNzaXZlIiwiX3NjaGVkdWxlX3JlZnJlc2hfYWxsIiwic3JjX2VsIiwiX3NjaGVkdWxlX3JlZnJlc2hfcm93IiwiX2tpY2tfcmFmIiwicmVmcmVzaF9hbGwiLCJyZWZyZXNoX3JvdyIsImFwcGx5X2NvbF9taW4iLCJweCIsIm1pbldpZHRoIiwiYWJzIiwiY29sX2VsIiwibWF4X3B4IiwiY29sUmVjdCIsImVuZHNXaXRoIiwicGFyc2VfbGVuX3B4IiwiY3MiLCJmb250U2l6ZSIsIldQQkNfQkZCX1RvZ2dsZV9Ob3JtYWxpemVyIiwidXBncmFkZV9jaGVja2JveGVzX2luIiwicm9vdF9lbCIsImlucHV0cyIsImlucHV0X2lkIiwiZ2VuZXJhdGVfdW5pcXVlX2lkIiwibGFiZWxfdGV4dCIsInJlc29sdmVfbGFiZWxfdGV4dCIsImljb25fbGFiZWwiLCJ0ZXh0X2xhYmVsIiwiY3JlYXRlVGV4dE5vZGUiLCJyZXBsYWNlZCIsInRyeV9yZXBsYWNlX2tub3duX3JvdyIsImFzc29jIiwiY3NzX2VzY2FwZSIsIm5lYXJfbGFiZWwiLCJpbCIsInQyIiwiYXJpYSIsImN0cmxfd3JhcCIsImZpcnN0Q2hpbGQiLCJpY29uX2xibCIsInRleHRfbGJsIiwiYXBwbHlfcG9zdF9yZW5kZXIiLCJUIiwiY2IiLCJfX3dwYmNfYXJpYV9ob29rZWQiLCJyZWdzIiwiX193cGJjX2VoIiwiZ3JvdXBzIiwibm9kZVR5cGUiLCJjb25jYXQiLCJnIiwiX193cGJjX2xlbl93aXJlZCIsIm51bWJlciIsInJhbmdlIiwidW5pdCIsInN5bmNfcmFuZ2VfZnJvbV9udW1iZXIiLCJkaXNwYXRjaF9pbnB1dCIsImRpc3BhdGNoX2NoYW5nZSIsInBlbmRpbmdfdmFsIiwicGVuZGluZ19jaGFuZ2UiLCJsYXN0X2ZsdXNoX3RzIiwibWluX2ludGVydmFsX21zIiwibGVuVGhyb3R0bGUiLCJmbHVzaF9yYW5nZV90b19udW1iZXIiLCJzY2hlZHVsZV9yYW5nZV90b19udW1iZXIiLCJlbWl0X2NoYW5nZSIsIm9uX251bWJlcl9pbnB1dCIsIm9uX251bWJlcl9jaGFuZ2UiLCJvbl9yYW5nZV9pbnB1dCIsIm9uX3JhbmdlX2NoYW5nZSIsImRlc3Ryb3lfb24iLCJfcm9vdCIsInBhdGNoSW5zcGVjdG9yRW5oYW5jZXJzIiwiYXBwbHlQYXRjaCIsIkluc3BlY3RvciIsIl9fd3BiY19lbmhhbmNlcnNfcGF0Y2hlZCIsIm9yaWciLCJpbnNFbCIsIm9uY2UiLCJ3cGJjX2JmYl9fZGlzcGF0Y2hfc2hvd19wYW5lbCIsImV2ZW50X2RldGFpbCIsIldQQkNfQkZCX01vZGVfUmlnaHRiYXJfU3luYyIsInRvcF90YWJzX25hdiIsImFkdmFuY2VkX3RhYl93cmFwIiwiYWR2YW5jZWRfcGFuZWwiLCJtdXRhdGlvbl9vYnNlcnZlciIsImxhc3RfbW9kZSIsInN5bmNfcmlnaHRiYXJfbW9kZSIsImhhbmRsZV9jbGljayIsIk11dGF0aW9uT2JzZXJ2ZXIiLCJvYnNlcnZlIiwiYXR0cmlidXRlRmlsdGVyIiwiZ2V0X2FjdGl2ZV90b3BfdGFiX2lkIiwiYWN0aXZlX3RhYl9pZCIsImFjdGl2ZV9saW5rIiwiYnVpbGRlcl9wYW5lbCIsImlzX2VsZW1lbnRfdmlzaWJsZSIsInZpc2liaWxpdHkiLCJpc19hZHZhbmNlZF9tb2RlX2FjdGl2ZSIsInNob3dfYWR2YW5jZWRfdG9vbHNfdGFiIiwiaGlkZV9hZHZhbmNlZF90b29sc190YWIiLCJpc19hZHZhbmNlZF90b29sc19wYW5lbF9hY3RpdmUiLCJvcGVuX2FkdmFuY2VkX3Rvb2xzX3BhbmVsIiwib3Blbl9kZWZhdWx0X3Zpc3VhbF9wYW5lbCIsImlzX2FkdmFuY2VkX21vZGUiLCJldmVudCIsInRoaXNfb2JqIiwicmVhZHlTdGF0ZSIsIl9fSU5TUEVDVE9SX0FDVElPTlNfTUFQX18iLCJjb25maXJtIiwiaXNfZmllbGQiLCJNb2RhbF9Db25maXJtX0RlbGV0ZSIsIm9wZW4iLCJkdXBsaWNhdGVfaXRlbSIsIldQQkNfQkZCX0luc3BlY3Rvcl9BY3Rpb25zIiwicnVuIiwid2FybiIsIkVycm9yIiwid3BiY19iZmJfaW5zcGVjdG9yX2ZhY3Rvcnlfc2xvdHMiLCJ3cGJjX2JmYl9pbnNwZWN0b3JfZmFjdG9yeV92YWx1ZV9mcm9tIiwiYXR0cnMiLCJrZXlzIiwiZGsiLCJidWlsZF90b2dnbGVfcm93IiwiaW5wdXRfZWwiLCJnZXRfaW5pdGlhbF92YWx1ZSIsInByb3BzX3NjaGVtYSIsImNvZXJjZV9ieV90eXBlIiwiaXNOYU4iLCJub3JtYWxpemVfc2VsZWN0X29wdGlvbnMiLCJwYXJzZV9sZW4iLCJmYWxsYmFja191bml0IiwiY2xhbXBfbnVtIiwiaW5pdF9jb2xvcmlzX3BpY2tlcnMiLCJDb2xvcmlzIiwiYWxwaGEiLCJmb3JtYXQiLCJ0aGVtZU1vZGUiLCJidWlsZF9yYW5nZV9udW1iZXJfcm93IiwibGFiZWxfZWwiLCJzdGVwIiwibnVtIiwiYnVpbGRfbGVuX2NvbXBvdW5kX3JvdyIsImNvbnRyb2wiLCJkZWZfc3RyIiwiZmFsbGJhY2tfdSIsInVuaXRzIiwic2xpZGVyX21hcCIsInNsaWRlciIsImlubGluZSIsInUiLCJvcHQiLCJ0YWJpbmRleCIsIndpcmVfbGVuX2dyb3VwIiwiZmluZF9ncm91cCIsIndyaXRlciIsImJvdW5kc19ieV91bml0IiwiYnVpbGRfY29udHJvbCIsInByb3BfbWV0YSIsImNsYXNzZXMiLCJzbG90X3JvdyIsImhvc3RfYXR0cnMiLCJzbG90X2hvc3QiLCJzbG90X2ZuIiwib3B0X2VsIiwicm5faWQiLCJybl92YWwiLCJidWlsZF9ncm91cCIsImlzX29wZW4iLCJmaWVsZHMiLCJhc0FycmF5IiwieCIsInZhbHVlcyIsImNvbnRyb2xzIiwiYnVpbGRfaGVhZGVyIiwiaW5zcGVjdG9yX3VpIiwidGl0bGVfZmFsbGJhY2siLCJzY2hlbWFfZm9yX3R5cGUiLCJ2YXJpYW50IiwiaGVhZGVyX3ZhcmlhbnQiLCJoZWFkZXJBY3Rpb25zIiwiaGVhZGVyX2FjdGlvbnMiLCJkZXNjcmlwdGlvbiIsImFjdGlvbkJ0biIsImFjdCIsIm1pbmltYWwiLCJpY29uTWFwIiwiaGVhZGVyIiwiYWN0aW9ucyIsImgzIiwidWlDIiwidWlHIiwiZzEiLCJnMiIsImczIiwiZmFjdG9yeV9yZW5kZXIiLCJwYW5lbF9lbCIsInRpdGxlX3RleHQiLCJXUEJDX0JGQl9JbnNwZWN0b3JfRmFjdG9yeSIsInNsb3RfbGF5b3V0X2NoaXBzIiwiaG9zdCIsIkwiLCJsYXlvdXRfY2hpcHMiLCJ2YWx1ZV9mcm9tX2NvbXB1dGVfc2VjdGlvbl9jb2x1bW5zIiwiY29tcHV0ZV9zZWN0aW9uX2NvbHVtbnMiLCJfY3JlYXRlX2ZhbGxiYWNrX3BhbmVsIiwic2VsZWN0ZWRfZWwiLCJfcmVuZGVyX3RpbWVyIiwiX29uX2RlbGVnYXRlZF9pbnB1dCIsIl9hcHBseV9jb250cm9sX2Zyb21fZXZlbnQiLCJfb25fZGVsZWdhdGVkX2NoYW5nZSIsIl9vbl9kZWxlZ2F0ZWRfY2xpY2siLCJfcG9zdF9yZW5kZXJfdWkiLCJ2X2ludCIsImNsYW1wZWQiLCJzZXRfc2VjdGlvbl9jb2x1bW5zIiwiX25lZWRzX3JlcmVuZGVyIiwiX3NjaGVkdWxlX3JlbmRlcl9wcmVzZXJ2aW5nX2ZvY3VzIiwiZGVsYXkiLCJhY3RpdmVLZXkiLCJwcmV2X3Njcm9sbCIsInNjcm9sbFRvcCIsIl9lbmZvcmNlX2RlZmF1bHRfZ3JvdXBfb3BlbiIsIl9zZXRfcGFuZWxfc2VjdGlvbl9jb2xzIiwiRmFjdG9yeSIsImVudHJ5IiwiaGFzU2xvdEhvc3QiLCJoYXNDaGlwcyIsImVuc3VyZUhvc3QiLCJoIiwibGFiIiwiY3RsIiwiX2dldF90cGwiLCJnZW5lcmljX3RwbCIsIm1lcmdlZCIsIm1zZyIsImRpdiIsInNlY3Rpb25FbCIsImNvbXB1dGUiXSwic291cmNlcyI6WyJiZmItY29yZS5qcyIsImJmYi1maWVsZHMuanMiLCJiZmItdWkuanMiLCJiZmItc3luYy1jb2RlLXRvb2xzLXRhYi5qcyIsImJmYi1pbnNwZWN0b3IuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbi8vID09IEZpbGUgIC9pbmNsdWRlcy9wYWdlLWZvcm0tYnVpbGRlci9fb3V0L2NvcmUvYmZiLWNvcmUuanMgPT0gfCAyMDI1LTA5LTEwIDE1OjQ3XHJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4oZnVuY3Rpb24gKCB3ICkge1xyXG5cdCd1c2Ugc3RyaWN0JztcclxuXHJcblx0Ly8gU2luZ2xlIGdsb2JhbCBuYW1lc3BhY2UgKGlkZW1wb3RlbnQgJiBsb2FkLW9yZGVyIHNhZmUpLlxyXG5cdGNvbnN0IENvcmUgPSAoIHcuV1BCQ19CRkJfQ29yZSA9IHcuV1BCQ19CRkJfQ29yZSB8fCB7fSApO1xyXG5cdGNvbnN0IFVJICAgPSAoIENvcmUuVUkgPSBDb3JlLlVJIHx8IHt9ICk7XHJcblxyXG5cdC8qKlxyXG5cdCAqIENvcmUgc2FuaXRpemUvZXNjYXBlL25vcm1hbGl6ZSBoZWxwZXJzLlxyXG5cdCAqIEFsbCBtZXRob2RzIHVzZSBzbmFrZV9jYXNlOyBjYW1lbENhc2UgYWxpYXNlcyBhcmUgcHJvdmlkZWQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LlxyXG5cdCAqL1xyXG5cdENvcmUuV1BCQ19CRkJfU2FuaXRpemUgPSBjbGFzcyB7XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBFc2NhcGUgdGV4dCBmb3Igc2FmZSB1c2UgaW4gQ1NTIHNlbGVjdG9ycy5cclxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBzIC0gcmF3IHNlbGVjdG9yIGZyYWdtZW50XHJcblx0XHQgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG5cdFx0ICovXHJcblx0XHRzdGF0aWMgZXNjX2NzcyhzKSB7XHJcblx0XHRcdHJldHVybiAody5DU1MgJiYgdy5DU1MuZXNjYXBlKSA/IHcuQ1NTLmVzY2FwZSggU3RyaW5nKCBzICkgKSA6IFN0cmluZyggcyApLnJlcGxhY2UoIC8oW15cXHctXSkvZywgJ1xcXFwkMScgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEVzY2FwZSBhIHZhbHVlIGZvciBhdHRyaWJ1dGUgc2VsZWN0b3JzLCBlLmcuIFtkYXRhLWlkPVwiPHZhbHVlPlwiXS5cclxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSB2XHJcblx0XHQgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG5cdFx0ICovXHJcblx0XHRzdGF0aWMgZXNjX2F0dHJfdmFsdWVfZm9yX3NlbGVjdG9yKHYpIHtcclxuXHRcdFx0cmV0dXJuIFN0cmluZyggdiApXHJcblx0XHRcdFx0LnJlcGxhY2UoIC9cXFxcL2csICdcXFxcXFxcXCcgKVxyXG5cdFx0XHRcdC5yZXBsYWNlKCAvXCIvZywgJ1xcXFxcIicgKVxyXG5cdFx0XHRcdC5yZXBsYWNlKCAvXFxuL2csICdcXFxcQSAnIClcclxuXHRcdFx0XHQucmVwbGFjZSggL1xcXS9nLCAnXFxcXF0nICk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBTYW5pdGl6ZSBpbnRvIGEgYnJvYWRseSBjb21wYXRpYmxlIEhUTUwgaWQ6IGxldHRlcnMsIGRpZ2l0cywgLSBfIDogLiA7IG11c3Qgc3RhcnQgd2l0aCBhIGxldHRlci5cclxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSB2XHJcblx0XHQgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG5cdFx0ICovXHJcblx0XHRzdGF0aWMgc2FuaXRpemVfaHRtbF9pZCh2KSB7XHJcblx0XHRcdGxldCBzID0gKHYgPT0gbnVsbCA/ICcnIDogU3RyaW5nKCB2ICkpLnRyaW0oKTtcclxuXHRcdFx0cyAgICAgPSBzXHJcblx0XHRcdFx0LnJlcGxhY2UoIC9cXHMrL2csICctJyApXHJcblx0XHRcdFx0LnJlcGxhY2UoIC9bXkEtWmEtejAtOVxcLV9cXDouXS9nLCAnLScgKVxyXG5cdFx0XHRcdC5yZXBsYWNlKCAvLSsvZywgJy0nIClcclxuXHRcdFx0XHQucmVwbGFjZSggL15bLV8uOl0rfFstXy46XSskL2csICcnICk7XHJcblx0XHRcdGlmICggIXMgKSByZXR1cm4gJ2ZpZWxkJztcclxuXHRcdFx0aWYgKCAhL15bQS1aYS16XS8udGVzdCggcyApICkgcyA9ICdmLScgKyBzO1xyXG5cdFx0XHRyZXR1cm4gcztcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFNhbml0aXplIGludG8gYSBzYWZlIEhUTUwgbmFtZSB0b2tlbjogbGV0dGVycywgZGlnaXRzLCBfIC1cclxuXHRcdCAqIE11c3Qgc3RhcnQgd2l0aCBhIGxldHRlcjsgbm8gZG90cy9icmFja2V0cy9zcGFjZXMuXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gdlxyXG5cdFx0ICogQHJldHVybnMge3N0cmluZ31cclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIHNhbml0aXplX2h0bWxfbmFtZSh2KSB7XHJcblxyXG5cdFx0XHRsZXQgcyA9ICh2ID09IG51bGwgPyAnJyA6IFN0cmluZyggdiApKS50cmltKCk7XHJcblxyXG5cdFx0XHRzID0gcy5yZXBsYWNlKCAvXFxzKy9nLCAnXycgKS5yZXBsYWNlKCAvW15BLVphLXowLTlfLV0vZywgJ18nICkucmVwbGFjZSggL18rL2csICdfJyApO1xyXG5cclxuXHRcdFx0aWYgKCAhIHMgKSB7XHJcblx0XHRcdFx0cyA9ICdmaWVsZCc7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKCAhIC9eW0EtWmEtel0vLnRlc3QoIHMgKSApIHtcclxuXHRcdFx0XHRzID0gJ2ZfJyArIHM7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIHM7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBFc2NhcGUgZm9yIEhUTUwgdGV4dC9hdHRyaWJ1dGVzIChub3QgVVJMcykuXHJcblx0XHQgKiBAcGFyYW0ge2FueX0gdlxyXG5cdFx0ICogQHJldHVybnMge3N0cmluZ31cclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIGVzY2FwZV9odG1sKHYpIHtcclxuXHRcdFx0aWYgKCB2ID09IG51bGwgKSB7XHJcblx0XHRcdFx0cmV0dXJuICcnO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBTdHJpbmcoIHYgKVxyXG5cdFx0XHRcdC5yZXBsYWNlKCAvJi9nLCAnJmFtcDsnIClcclxuXHRcdFx0XHQucmVwbGFjZSggL1wiL2csICcmcXVvdDsnIClcclxuXHRcdFx0XHQucmVwbGFjZSggLycvZywgJyYjMDM5OycgKVxyXG5cdFx0XHRcdC5yZXBsYWNlKCAvPC9nLCAnJmx0OycgKVxyXG5cdFx0XHRcdC5yZXBsYWNlKCAvPi9nLCAnJmd0OycgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEVzY2FwZSBtaW5pbWFsIHNldCBmb3IgYXR0cmlidXRlLXNhZmV0eSB3aXRob3V0IHNsdWdnaW5nLlxyXG5cdFx0ICogS2VlcHMgb3JpZ2luYWwgaHVtYW4gdGV4dDsgZXNjYXBlcyAmLCA8LCA+LCBcIiBhbmQgJyBvbmx5LlxyXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IHNcclxuXHRcdCAqIEByZXR1cm5zIHtzdHJpbmd9XHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBlc2NhcGVfdmFsdWVfZm9yX2F0dHIocykge1xyXG5cdFx0XHRyZXR1cm4gU3RyaW5nKCBzID09IG51bGwgPyAnJyA6IHMgKVxyXG5cdFx0XHRcdC5yZXBsYWNlKCAvJi9nLCAnJmFtcDsnIClcclxuXHRcdFx0XHQucmVwbGFjZSggLzwvZywgJyZsdDsnIClcclxuXHRcdFx0XHQucmVwbGFjZSggLz4vZywgJyZndDsnIClcclxuXHRcdFx0XHQucmVwbGFjZSggL1wiL2csICcmcXVvdDsnIClcclxuXHRcdFx0XHQucmVwbGFjZSggLycvZywgJyYjMzk7JyApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogU2FuaXRpemUgYSBzcGFjZS1zZXBhcmF0ZWQgQ1NTIGNsYXNzIGxpc3QuXHJcblx0XHQgKiBAcGFyYW0ge2FueX0gdlxyXG5cdFx0ICogQHJldHVybnMge3N0cmluZ31cclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIHNhbml0aXplX2Nzc19jbGFzc2xpc3Qodikge1xyXG5cdFx0XHRpZiAoIHYgPT0gbnVsbCApIHJldHVybiAnJztcclxuXHRcdFx0cmV0dXJuIFN0cmluZyggdiApLnJlcGxhY2UoIC9bXlxcd1xcLSBdKy9nLCAnICcgKS5yZXBsYWNlKCAvXFxzKy9nLCAnICcgKS50cmltKCk7XHJcblx0XHR9XHJcbi8vID09IE5FVyA9PVxyXG5cdFx0LyoqXHJcblx0XHQgKiBUdXJuIGFuIGFyYml0cmFyeSB2YWx1ZSBpbnRvIGEgY29uc2VydmF0aXZlIFwidG9rZW5cIiAodW5kZXJzY29yZXMsIGh5cGhlbnMgYWxsb3dlZCkuXHJcblx0XHQgKiBVc2VmdWwgZm9yIHNob3J0Y29kZSB0b2tlbnMsIGlkcyBpbiBwbGFpbiB0ZXh0LCBldGMuXHJcblx0XHQgKiBAcGFyYW0ge2FueX0gdlxyXG5cdFx0ICogQHJldHVybnMge3N0cmluZ31cclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIHRvX3Rva2VuKHYpIHtcclxuXHRcdFx0cmV0dXJuIFN0cmluZyggdiA/PyAnJyApXHJcblx0XHRcdFx0LnRyaW0oKVxyXG5cdFx0XHRcdC5yZXBsYWNlKCAvXFxzKy9nLCAnXycgKVxyXG5cdFx0XHRcdC5yZXBsYWNlKCAvW15BLVphLXowLTlfXFwtXS9nLCAnJyApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQ29udmVydCB0byBrZWJhYi1jYXNlIChsZXR0ZXJzLCBkaWdpdHMsIGh5cGhlbnMpLlxyXG5cdFx0ICogQHBhcmFtIHthbnl9IHZcclxuXHRcdCAqIEByZXR1cm5zIHtzdHJpbmd9XHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyB0b19rZWJhYih2KSB7XHJcblx0XHRcdHJldHVybiBTdHJpbmcoIHYgPz8gJycgKVxyXG5cdFx0XHRcdC50cmltKClcclxuXHRcdFx0XHQucmVwbGFjZSggL1tfXFxzXSsvZywgJy0nIClcclxuXHRcdFx0XHQucmVwbGFjZSggL1teQS1aYS16MC05LV0vZywgJycgKVxyXG5cdFx0XHRcdC5yZXBsYWNlKCAvLSsvZywgJy0nIClcclxuXHRcdFx0XHQudG9Mb3dlckNhc2UoKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFRydXRoeSBub3JtYWxpemF0aW9uIGZvciBmb3JtLWxpa2UgaW5wdXRzOiB0cnVlLCAndHJ1ZScsIDEsICcxJywgJ3llcycsICdvbicuXHJcblx0XHQgKiBAcGFyYW0ge2FueX0gdlxyXG5cdFx0ICogQHJldHVybnMge2Jvb2xlYW59XHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBpc190cnV0aHkodikge1xyXG5cdFx0XHRpZiAoIHR5cGVvZiB2ID09PSAnYm9vbGVhbicgKSByZXR1cm4gdjtcclxuXHRcdFx0Y29uc3QgcyA9IFN0cmluZyggdiA/PyAnJyApLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG5cdFx0XHRyZXR1cm4gcyA9PT0gJ3RydWUnIHx8IHMgPT09ICcxJyB8fCBzID09PSAneWVzJyB8fCBzID09PSAnb24nO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQ29lcmNlIHRvIGJvb2xlYW4gd2l0aCBhbiBvcHRpb25hbCBkZWZhdWx0IGZvciBlbXB0eSB2YWx1ZXMuXHJcblx0XHQgKiBAcGFyYW0ge2FueX0gdlxyXG5cdFx0ICogQHBhcmFtIHtib29sZWFufSBbZGVmPWZhbHNlXVxyXG5cdFx0ICogQHJldHVybnMge2Jvb2xlYW59XHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBjb2VyY2VfYm9vbGVhbih2LCBkZWYgPSBmYWxzZSkge1xyXG5cdFx0XHRpZiAoIHYgPT0gbnVsbCB8fCB2ID09PSAnJyApIHJldHVybiBkZWY7XHJcblx0XHRcdHJldHVybiB0aGlzLmlzX3RydXRoeSggdiApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogUGFyc2UgYSBcInBlcmNlbnQtbGlrZVwiIHZhbHVlICgnMzMnfCczMyUnfDMzKSB3aXRoIGZhbGxiYWNrLlxyXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfG51bGx8dW5kZWZpbmVkfSB2XHJcblx0XHQgKiBAcGFyYW0ge251bWJlcn0gZmFsbGJhY2tfdmFsdWVcclxuXHRcdCAqIEByZXR1cm5zIHtudW1iZXJ9XHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBwYXJzZV9wZXJjZW50KHYsIGZhbGxiYWNrX3ZhbHVlKSB7XHJcblx0XHRcdGlmICggdiA9PSBudWxsICkge1xyXG5cdFx0XHRcdHJldHVybiBmYWxsYmFja192YWx1ZTtcclxuXHRcdFx0fVxyXG5cdFx0XHRjb25zdCBzID0gU3RyaW5nKCB2ICkudHJpbSgpO1xyXG5cdFx0XHRjb25zdCBuID0gcGFyc2VGbG9hdCggcy5yZXBsYWNlKCAvJS9nLCAnJyApICk7XHJcblx0XHRcdHJldHVybiBOdW1iZXIuaXNGaW5pdGUoIG4gKSA/IG4gOiBmYWxsYmFja192YWx1ZTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIENsYW1wIGEgbnVtYmVyIHRvIHRoZSBbbWluLCBtYXhdIHJhbmdlLlxyXG5cdFx0ICogQHBhcmFtIHtudW1iZXJ9IG5cclxuXHRcdCAqIEBwYXJhbSB7bnVtYmVyfSBtaW5cclxuXHRcdCAqIEBwYXJhbSB7bnVtYmVyfSBtYXhcclxuXHRcdCAqIEByZXR1cm5zIHtudW1iZXJ9XHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBjbGFtcChuLCBtaW4sIG1heCkge1xyXG5cdFx0XHRyZXR1cm4gTWF0aC5tYXgoIG1pbiwgTWF0aC5taW4oIG1heCwgbiApICk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBFc2NhcGUgYSB2YWx1ZSBmb3IgaW5jbHVzaW9uIGluc2lkZSBhIHF1b3RlZCBIVE1MIGF0dHJpYnV0ZSAoZG91YmxlIHF1b3RlcykuXHJcblx0XHQgKiBSZXBsYWNlcyBuZXdsaW5lcyB3aXRoIHNwYWNlcyBhbmQgZG91YmxlIHF1b3RlcyB3aXRoIHNpbmdsZSBxdW90ZXMuXHJcblx0XHQgKiBAcGFyYW0ge2FueX0gdlxyXG5cdFx0ICogQHJldHVybnMge3N0cmluZ31cclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIGVzY2FwZV9mb3JfYXR0cl9xdW90ZWQodikge1xyXG5cdFx0XHRpZiAoIHYgPT0gbnVsbCApIHJldHVybiAnJztcclxuXHRcdFx0cmV0dXJuIFN0cmluZyggdiApLnJlcGxhY2UoIC9cXHI/XFxuL2csICcgJyApLnJlcGxhY2UoIC9cIi9nLCAnXFwnJyApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogRXNjYXBlIGZvciBzaG9ydGNvZGUtbGlrZSB0b2tlbnMgd2hlcmUgZG91YmxlIHF1b3RlcyBhbmQgbmV3bGluZXMgc2hvdWxkIGJlIG5ldXRyYWxpemVkLlxyXG5cdFx0ICogQHBhcmFtIHthbnl9IHZcclxuXHRcdCAqIEByZXR1cm5zIHtzdHJpbmd9XHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBlc2NhcGVfZm9yX3Nob3J0Y29kZSh2KSB7XHJcblx0XHRcdHJldHVybiBTdHJpbmcoIHYgPz8gJycgKS5yZXBsYWNlKCAvXCIvZywgJ1xcXFxcIicgKS5yZXBsYWNlKCAvXFxyP1xcbi9nLCAnICcgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEpTT04ucGFyc2Ugd2l0aCBmYWxsYmFjayAobm8gdGhyb3cpLlxyXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IHNcclxuXHRcdCAqIEBwYXJhbSB7YW55fSBbZmFsbGJhY2s9bnVsbF1cclxuXHRcdCAqIEByZXR1cm5zIHthbnl9XHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBzYWZlX2pzb25fcGFyc2UocywgZmFsbGJhY2sgPSBudWxsKSB7XHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0cmV0dXJuIEpTT04ucGFyc2UoIHMgKTtcclxuXHRcdFx0fSBjYXRjaCAoIF8gKSB7XHJcblx0XHRcdFx0cmV0dXJuIGZhbGxiYWNrO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBTdHJpbmdpZnkgZGF0YS0qIGF0dHJpYnV0ZSB2YWx1ZSBzYWZlbHkgKG9iamVjdHMgLT4gSlNPTiwgb3RoZXJzIC0+IFN0cmluZykuXHJcblx0XHQgKiBAcGFyYW0ge2FueX0gdlxyXG5cdFx0ICogQHJldHVybnMge3N0cmluZ31cclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIHN0cmluZ2lmeV9kYXRhX3ZhbHVlKHYpIHtcclxuXHRcdFx0aWYgKCB0eXBlb2YgdiA9PT0gJ29iamVjdCcgJiYgdiAhPT0gbnVsbCApIHtcclxuXHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIEpTT04uc3RyaW5naWZ5KCB2ICk7XHJcblx0XHRcdFx0fSBjYXRjaCB7XHJcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKCAnV1BCQzogc3RyaW5naWZ5X2RhdGFfdmFsdWUnICk7XHJcblx0XHRcdFx0XHRyZXR1cm4gJyc7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBTdHJpbmcoIHYgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0XHQvLyBTdHJpY3QgdmFsdWUgZ3VhcmRzIGZvciBDU1MgbGVuZ3RocyBhbmQgaGV4IGNvbG9ycyAoZGVmZW5zZS1pbi1kZXB0aCkuXHJcblx0XHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0XHQvKipcclxuXHRcdCAqIFNhbml0aXplIGEgQ1NTIGxlbmd0aC4gQWxsb3dzOiBweCwgJSwgcmVtLCBlbSAobG93ZXIvdXBwZXIpLlxyXG5cdFx0ICogUmV0dXJucyBmYWxsYmFjayBpZiBpbnZhbGlkLlxyXG5cdFx0ICogQHBhcmFtIHthbnl9IHZcclxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBbZmFsbGJhY2s9JzEwMCUnXVxyXG5cdFx0ICogQHJldHVybnMge3N0cmluZ31cclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIHNhbml0aXplX2Nzc19sZW4odiwgZmFsbGJhY2sgPSAnMTAwJScpIHtcclxuXHRcdFx0Y29uc3QgcyA9IFN0cmluZyggdiA/PyAnJyApLnRyaW0oKTtcclxuXHRcdFx0Y29uc3QgbSA9IHMubWF0Y2goIC9eKC0/XFxkKyg/OlxcLlxcZCspPykocHh8JXxyZW18ZW0pJC9pICk7XHJcblx0XHRcdHJldHVybiBtID8gbVswXSA6IFN0cmluZyggZmFsbGJhY2sgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFNhbml0aXplIGEgaGV4IGNvbG9yLiBBbGxvd3MgI3JnYiBvciAjcnJnZ2JiIChjYXNlLWluc2Vuc2l0aXZlKS5cclxuXHRcdCAqIFJldHVybnMgZmFsbGJhY2sgaWYgaW52YWxpZC5cclxuXHRcdCAqIEBwYXJhbSB7YW55fSB2XHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gW2ZhbGxiYWNrPScjZTBlMGUwJ11cclxuXHRcdCAqIEByZXR1cm5zIHtzdHJpbmd9XHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBzYW5pdGl6ZV9oZXhfY29sb3IodiwgZmFsbGJhY2sgPSAnI2UwZTBlMCcpIHtcclxuXHRcdFx0Y29uc3QgcyA9IFN0cmluZyggdiA/PyAnJyApLnRyaW0oKTtcclxuXHRcdFx0cmV0dXJuIC9eIyg/OlswLTlhLWZdezN9fFswLTlhLWZdezZ9KSQvaS50ZXN0KCBzICkgPyBzIDogU3RyaW5nKCBmYWxsYmFjayApO1xyXG5cdFx0fVxyXG5cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFdQQkMgSUQgLyBOYW1lIHNlcnZpY2UuIEdlbmVyYXRlcywgc2FuaXRpemVzLCBhbmQgZW5zdXJlcyB1bmlxdWVuZXNzIGZvciBmaWVsZCBpZHMvbmFtZXMvaHRtbF9pZHMgd2l0aGluIHRoZVxyXG5cdCAqIGNhbnZhcy5cclxuXHQgKi9cclxuXHRDb3JlLldQQkNfQkZCX0lkU2VydmljZSA9IGNsYXNzICB7XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBDb25zdHJ1Y3Rvci4gU2V0IHJvb3QgY29udGFpbmVyIG9mIHRoZSBmb3JtIHBhZ2VzLlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHBhZ2VzX2NvbnRhaW5lciAtIFJvb3QgY29udGFpbmVyIG9mIHRoZSBmb3JtIHBhZ2VzLlxyXG5cdFx0ICovXHJcblx0XHRjb25zdHJ1Y3RvciggcGFnZXNfY29udGFpbmVyICkge1xyXG5cdFx0XHR0aGlzLnBhZ2VzX2NvbnRhaW5lciA9IHBhZ2VzX2NvbnRhaW5lcjtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEVuc3VyZSBhIHVuaXF1ZSAqKmludGVybmFsKiogZmllbGQgaWQgKHN0b3JlZCBpbiBkYXRhLWlkKSB3aXRoaW4gdGhlIGNhbnZhcy5cclxuXHRcdCAqIFN0YXJ0cyBmcm9tIGEgZGVzaXJlZCBpZCAoYWxyZWFkeSBzYW5pdGl6ZWQgb3Igbm90KSBhbmQgYXBwZW5kcyBzdWZmaXhlcyBpZiBuZWVkZWQuXHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IGJhc2VJZCAtIERlc2lyZWQgaWQuXHJcblx0XHQgKiBAcmV0dXJucyB7c3RyaW5nfSBVbmlxdWUgaWQuXHJcblx0XHQgKi9cclxuXHRcdGVuc3VyZV91bmlxdWVfZmllbGRfaWQoYmFzZUlkLCBjdXJyZW50RWwgPSBudWxsKSB7XHJcblx0XHRcdGNvbnN0IGJhc2UgICAgPSBDb3JlLldQQkNfQkZCX1Nhbml0aXplLnNhbml0aXplX2h0bWxfaWQoIGJhc2VJZCApO1xyXG5cdFx0XHRsZXQgaWQgICAgICAgID0gYmFzZSB8fCAnZmllbGQnO1xyXG5cdFx0XHRjb25zdCBlc2MgICAgID0gKHYpID0+IENvcmUuV1BCQ19CRkJfU2FuaXRpemUuZXNjX2F0dHJfdmFsdWVfZm9yX3NlbGVjdG9yKCB2ICk7XHJcblx0XHRcdGNvbnN0IGVzY1VpZCAgPSAodikgPT4gQ29yZS5XUEJDX0JGQl9TYW5pdGl6ZS5lc2NfYXR0cl92YWx1ZV9mb3Jfc2VsZWN0b3IoIHYgKTtcclxuXHRcdFx0Y29uc3Qgbm90U2VsZiA9IGN1cnJlbnRFbD8uZGF0YXNldD8udWlkID8gYDpub3QoW2RhdGEtdWlkPVwiJHtlc2NVaWQoIGN1cnJlbnRFbC5kYXRhc2V0LnVpZCApfVwiXSlgIDogJyc7XHJcblx0XHRcdHdoaWxlICggdGhpcy5wYWdlc19jb250YWluZXI/LnF1ZXJ5U2VsZWN0b3IoXHJcblx0XHRcdFx0YC53cGJjX2JmYl9fcGFuZWwtLXByZXZpZXcgLndwYmNfYmZiX19maWVsZCR7bm90U2VsZn1bZGF0YS1pZD1cIiR7ZXNjKGlkKX1cIl0sIC53cGJjX2JmYl9fcGFuZWwtLXByZXZpZXcgLndwYmNfYmZiX19zZWN0aW9uJHtub3RTZWxmfVtkYXRhLWlkPVwiJHtlc2MoaWQpfVwiXWBcclxuXHRcdFx0KSApIHtcclxuXHRcdFx0XHQvLyBFeGNsdWRlcyBzZWxmIGJ5IGRhdGEtdWlkIC5cclxuXHRcdFx0XHRjb25zdCBmb3VuZCA9IHRoaXMucGFnZXNfY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIGAud3BiY19iZmJfX3BhbmVsLS1wcmV2aWV3IC53cGJjX2JmYl9fZmllbGRbZGF0YS1pZD1cIiR7ZXNjKCBpZCApfVwiXSwgLndwYmNfYmZiX19wYW5lbC0tcHJldmlldyAud3BiY19iZmJfX3NlY3Rpb25bZGF0YS1pZD1cIiR7ZXNjKCBpZCApfVwiXWAgKTtcclxuXHRcdFx0XHRpZiAoIGZvdW5kICYmIGN1cnJlbnRFbCAmJiBmb3VuZCA9PT0gY3VycmVudEVsICkge1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlkID0gYCR7YmFzZSB8fCAnZmllbGQnfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoIDM2ICkuc2xpY2UoIDIsIDUgKX1gO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBpZDtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEVuc3VyZSBhIHVuaXF1ZSBIVE1MIG5hbWUgYWNyb3NzIHRoZSBmb3JtLlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlIC0gRGVzaXJlZCBiYXNlIG5hbWUgKHVuL3Nhbml0aXplZCkuXHJcblx0XHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fG51bGx9IGN1cnJlbnRFbCAtIElmIHByb3ZpZGVkLCBpZ25vcmUgY29uZmxpY3RzIHdpdGggdGhpcyBlbGVtZW50LlxyXG5cdFx0ICogQHJldHVybnMge3N0cmluZ30gVW5pcXVlIG5hbWUuXHJcblx0XHQgKi9cclxuXHRcdGVuc3VyZV91bmlxdWVfZmllbGRfbmFtZShiYXNlLCBjdXJyZW50RWwgPSBudWxsKSB7XHJcblx0XHRcdGxldCBuYW1lICAgICAgPSBiYXNlIHx8ICdmaWVsZCc7XHJcblx0XHRcdGNvbnN0IGVzYyAgICAgPSAodikgPT4gQ29yZS5XUEJDX0JGQl9TYW5pdGl6ZS5lc2NfYXR0cl92YWx1ZV9mb3Jfc2VsZWN0b3IoIHYgKTtcclxuXHRcdFx0Y29uc3QgZXNjVWlkICA9ICh2KSA9PiBDb3JlLldQQkNfQkZCX1Nhbml0aXplLmVzY19hdHRyX3ZhbHVlX2Zvcl9zZWxlY3RvciggdiApO1xyXG5cdFx0XHQvLyBFeGNsdWRlIHRoZSBjdXJyZW50IGZpZWxkICphbmQgYW55IERPTSBtaXJyb3JzIG9mIGl0KiAoc2FtZSBkYXRhLXVpZClcclxuXHRcdFx0Y29uc3QgdWlkICAgICA9IGN1cnJlbnRFbD8uZGF0YXNldD8udWlkO1xyXG5cdFx0XHRjb25zdCBub3RTZWxmID0gdWlkID8gYDpub3QoW2RhdGEtdWlkPVwiJHtlc2NVaWQoIHVpZCApfVwiXSlgIDogJyc7XHJcblx0XHRcdHdoaWxlICggdHJ1ZSApIHtcclxuXHRcdFx0XHRjb25zdCBzZWxlY3RvciA9IGAud3BiY19iZmJfX3BhbmVsLS1wcmV2aWV3IC53cGJjX2JmYl9fZmllbGQke25vdFNlbGZ9W2RhdGEtbmFtZT1cIiR7ZXNjKCBuYW1lICl9XCJdYDtcclxuXHRcdFx0XHRjb25zdCBjbGFzaGVzICA9IHRoaXMucGFnZXNfY29udGFpbmVyPy5xdWVyeVNlbGVjdG9yQWxsKCBzZWxlY3RvciApIHx8IFtdO1xyXG5cdFx0XHRcdGlmICggY2xhc2hlcy5sZW5ndGggPT09IDAgKSBicmVhazsgICAgICAgICAgIC8vIG5vYm9keSBlbHNlIHVzZXMgdGhpcyBuYW1lXHJcblx0XHRcdFx0Y29uc3QgbSA9IG5hbWUubWF0Y2goIC8tKFxcZCspJC8gKTtcclxuXHRcdFx0XHRuYW1lICAgID0gbSA/IG5hbWUucmVwbGFjZSggLy1cXGQrJC8sICctJyArIChOdW1iZXIoIG1bMV0gKSArIDEpICkgOiBgJHtiYXNlfS0yYDtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gbmFtZTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFNldCBmaWVsZCdzIElOVEVSTkFMIGlkIChkYXRhLWlkKSBvbiBhbiBlbGVtZW50LiBFbnN1cmVzIHVuaXF1ZW5lc3MgYW5kIG9wdGlvbmFsbHkgYXNrcyBjYWxsZXIgdG8gcmVmcmVzaFxyXG5cdFx0ICogcHJldmlldy5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBmaWVsZF9lbCAtIEZpZWxkIGVsZW1lbnQgaW4gdGhlIGNhbnZhcy5cclxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBuZXdJZFJhdyAtIERlc2lyZWQgaWQgKHVuL3Nhbml0aXplZCkuXHJcblx0XHQgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZW5kZXJQcmV2aWV3PWZhbHNlXSAtIENhbGxlciBjYW4gZGVjaWRlIHRvIHJlLXJlbmRlciBwcmV2aWV3LlxyXG5cdFx0ICogQHJldHVybnMge3N0cmluZ30gQXBwbGllZCB1bmlxdWUgaWQuXHJcblx0XHQgKi9cclxuXHRcdHNldF9maWVsZF9pZCggZmllbGRfZWwsIG5ld0lkUmF3LCByZW5kZXJQcmV2aWV3ID0gZmFsc2UgKSB7XHJcblx0XHRcdGNvbnN0IGRlc2lyZWQgPSBDb3JlLldQQkNfQkZCX1Nhbml0aXplLnNhbml0aXplX2h0bWxfaWQoIG5ld0lkUmF3ICk7XHJcblx0XHRcdGNvbnN0IHVuaXF1ZSAgPSB0aGlzLmVuc3VyZV91bmlxdWVfZmllbGRfaWQoIGRlc2lyZWQsIGZpZWxkX2VsICk7XHJcblx0XHRcdGZpZWxkX2VsLnNldEF0dHJpYnV0ZSggJ2RhdGEtaWQnLCB1bmlxdWUgKTtcclxuXHRcdFx0aWYgKCByZW5kZXJQcmV2aWV3ICkge1xyXG5cdFx0XHRcdC8vIENhbGxlciBkZWNpZGVzIGlmIC8gd2hlbiB0byByZW5kZXIuXHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIHVuaXF1ZTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFNldCBmaWVsZCdzIFJFUVVJUkVEIEhUTUwgbmFtZSAoZGF0YS1uYW1lKS4gRW5zdXJlcyBzYW5pdGl6ZWQgKyB1bmlxdWUgcGVyIGZvcm0uXHJcblx0XHQgKiBGYWxscyBiYWNrIHRvIHNhbml0aXplZCBpbnRlcm5hbCBpZCBpZiB1c2VyIHByb3ZpZGVzIGVtcHR5IHZhbHVlLlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGZpZWxkX2VsIC0gRmllbGQgZWxlbWVudCBpbiB0aGUgY2FudmFzLlxyXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IG5ld05hbWVSYXcgLSBEZXNpcmVkIG5hbWUgKHVuL3Nhbml0aXplZCkuXHJcblx0XHQgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZW5kZXJQcmV2aWV3PWZhbHNlXSAtIENhbGxlciBjYW4gZGVjaWRlIHRvIHJlLXJlbmRlciBwcmV2aWV3LlxyXG5cdFx0ICogQHJldHVybnMge3N0cmluZ30gQXBwbGllZCB1bmlxdWUgbmFtZS5cclxuXHRcdCAqL1xyXG5cdFx0c2V0X2ZpZWxkX25hbWUoIGZpZWxkX2VsLCBuZXdOYW1lUmF3LCByZW5kZXJQcmV2aWV3ID0gZmFsc2UgKSB7XHJcblx0XHRcdGNvbnN0IHJhdyAgPSAobmV3TmFtZVJhdyA9PSBudWxsID8gJycgOiBTdHJpbmcoIG5ld05hbWVSYXcgKSkudHJpbSgpO1xyXG5cdFx0XHRjb25zdCBiYXNlID0gcmF3XHJcblx0XHRcdFx0PyBDb3JlLldQQkNfQkZCX1Nhbml0aXplLnNhbml0aXplX2h0bWxfbmFtZSggcmF3IClcclxuXHRcdFx0XHQ6IENvcmUuV1BCQ19CRkJfU2FuaXRpemUuc2FuaXRpemVfaHRtbF9uYW1lKCBmaWVsZF9lbC5nZXRBdHRyaWJ1dGUoICdkYXRhLWlkJyApIHx8ICdmaWVsZCcgKTtcclxuXHJcblx0XHRcdGNvbnN0IHVuaXF1ZSA9IHRoaXMuZW5zdXJlX3VuaXF1ZV9maWVsZF9uYW1lKCBiYXNlLCBmaWVsZF9lbCApO1xyXG5cdFx0XHRmaWVsZF9lbC5zZXRBdHRyaWJ1dGUoICdkYXRhLW5hbWUnLCB1bmlxdWUgKTtcclxuXHRcdFx0aWYgKCByZW5kZXJQcmV2aWV3ICkge1xyXG5cdFx0XHRcdC8vIENhbGxlciBkZWNpZGVzIGlmIC8gd2hlbiB0byByZW5kZXIuXHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIHVuaXF1ZTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFNldCBmaWVsZCdzIE9QVElPTkFMIHB1YmxpYyBIVE1MIGlkIChkYXRhLWh0bWxfaWQpLiBFbXB0eSB2YWx1ZSByZW1vdmVzIHRoZSBhdHRyaWJ1dGUuXHJcblx0XHQgKiBFbnN1cmVzIHNhbml0aXphdGlvbiArIHVuaXF1ZW5lc3MgYW1vbmcgb3RoZXIgZGVjbGFyZWQgSFRNTCBpZHMuXHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZmllbGRfZWwgLSBGaWVsZCBlbGVtZW50IGluIHRoZSBjYW52YXMuXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gbmV3SHRtbElkUmF3IC0gRGVzaXJlZCBodG1sX2lkIChvcHRpb25hbCkuXHJcblx0XHQgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZW5kZXJQcmV2aWV3PWZhbHNlXSAtIENhbGxlciBjYW4gZGVjaWRlIHRvIHJlLXJlbmRlciBwcmV2aWV3LlxyXG5cdFx0ICogQHJldHVybnMge3N0cmluZ30gVGhlIGFwcGxpZWQgaHRtbF9pZCBvciBlbXB0eSBzdHJpbmcgaWYgcmVtb3ZlZC5cclxuXHRcdCAqL1xyXG5cdFx0c2V0X2ZpZWxkX2h0bWxfaWQoIGZpZWxkX2VsLCBuZXdIdG1sSWRSYXcsIHJlbmRlclByZXZpZXcgPSBmYWxzZSApIHtcclxuXHRcdFx0Y29uc3QgcmF3ID0gKG5ld0h0bWxJZFJhdyA9PSBudWxsID8gJycgOiBTdHJpbmcoIG5ld0h0bWxJZFJhdyApKS50cmltKCk7XHJcblxyXG5cdFx0XHRpZiAoIHJhdyA9PT0gJycgKSB7XHJcblx0XHRcdFx0ZmllbGRfZWwucmVtb3ZlQXR0cmlidXRlKCAnZGF0YS1odG1sX2lkJyApO1xyXG5cdFx0XHRcdGlmICggcmVuZGVyUHJldmlldyApIHtcclxuXHRcdFx0XHRcdC8vIENhbGxlciBkZWNpZGVzIGlmIC8gd2hlbiB0byByZW5kZXIuXHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHJldHVybiAnJztcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Y29uc3QgZGVzaXJlZCA9IENvcmUuV1BCQ19CRkJfU2FuaXRpemUuc2FuaXRpemVfaHRtbF9pZCggcmF3ICk7XHJcblx0XHRcdGxldCBodG1sSWQgICAgPSBkZXNpcmVkO1xyXG5cdFx0XHRjb25zdCBlc2MgICAgID0gKHYpID0+IENvcmUuV1BCQ19CRkJfU2FuaXRpemUuZXNjX2F0dHJfdmFsdWVfZm9yX3NlbGVjdG9yKCB2ICk7XHJcblx0XHRcdGNvbnN0IGVzY1VpZCAgPSAodikgPT4gQ29yZS5XUEJDX0JGQl9TYW5pdGl6ZS5lc2NfYXR0cl92YWx1ZV9mb3Jfc2VsZWN0b3IoIHYgKTtcclxuXHJcblx0XHRcdHdoaWxlICggdHJ1ZSApIHtcclxuXHJcblx0XHRcdFx0Y29uc3QgdWlkICAgICA9IGZpZWxkX2VsPy5kYXRhc2V0Py51aWQ7XHJcblx0XHRcdFx0Y29uc3Qgbm90U2VsZiA9IHVpZCA/IGA6bm90KFtkYXRhLXVpZD1cIiR7ZXNjVWlkKCB1aWQgKX1cIl0pYCA6ICcnO1xyXG5cclxuXHRcdFx0XHRjb25zdCBjbGFzaEluQ2FudmFzID0gdGhpcy5wYWdlc19jb250YWluZXI/LnF1ZXJ5U2VsZWN0b3IoXHJcblx0XHRcdFx0XHRgLndwYmNfYmZiX19wYW5lbC0tcHJldmlldyAud3BiY19iZmJfX2ZpZWxkJHtub3RTZWxmfVtkYXRhLWh0bWxfaWQ9XCIke2VzYyggaHRtbElkICl9XCJdLGAgK1xyXG5cdFx0XHRcdFx0YC53cGJjX2JmYl9fcGFuZWwtLXByZXZpZXcgLndwYmNfYmZiX19zZWN0aW9uJHtub3RTZWxmfVtkYXRhLWh0bWxfaWQ9XCIke2VzYyggaHRtbElkICl9XCJdYFxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdFx0Y29uc3QgZG9tQ2xhc2ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggaHRtbElkICk7XHJcblxyXG5cdFx0XHRcdC8vIEFsbG93IHdoZW4gdGhlIG9ubHkgXCJjbGFzaFwiIGlzIGluc2lkZSB0aGlzIHNhbWUgZmllbGQgKGUuZy4sIHRoZSBpbnB1dCB5b3UganVzdCByZW5kZXJlZClcclxuXHRcdFx0XHRjb25zdCBkb21DbGFzaElzU2VsZiA9IGRvbUNsYXNoID09PSBmaWVsZF9lbCB8fCAoZG9tQ2xhc2ggJiYgZmllbGRfZWwuY29udGFpbnMoIGRvbUNsYXNoICkpO1xyXG5cclxuXHRcdFx0XHRpZiAoICFjbGFzaEluQ2FudmFzICYmICghZG9tQ2xhc2ggfHwgZG9tQ2xhc2hJc1NlbGYpICkge1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRjb25zdCBtID0gaHRtbElkLm1hdGNoKCAvLShcXGQrKSQvICk7XHJcblx0XHRcdFx0aHRtbElkICA9IG0gPyBodG1sSWQucmVwbGFjZSggLy1cXGQrJC8sICctJyArIChOdW1iZXIoIG1bMV0gKSArIDEpICkgOiBgJHtkZXNpcmVkfS0yYDtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0ZmllbGRfZWwuc2V0QXR0cmlidXRlKCAnZGF0YS1odG1sX2lkJywgaHRtbElkICk7XHJcblx0XHRcdGlmICggcmVuZGVyUHJldmlldyApIHtcclxuXHRcdFx0XHQvLyBDYWxsZXIgZGVjaWRlcyBpZiAvIHdoZW4gdG8gcmVuZGVyLlxyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBodG1sSWQ7XHJcblx0XHR9XHJcblx0fTtcclxuXHJcblx0LyoqXHJcblx0ICogV1BCQyBMYXlvdXQgc2VydmljZS4gRW5jYXBzdWxhdGVzIGNvbHVtbiB3aWR0aCBtYXRoIHdpdGggZ2FwIGhhbmRsaW5nLCBwcmVzZXRzLCBhbmQgdXRpbGl0aWVzLlxyXG5cdCAqL1xyXG5cdENvcmUuV1BCQ19CRkJfTGF5b3V0U2VydmljZSA9IGNsYXNzICB7XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBDb25zdHJ1Y3Rvci4gU2V0IG9wdGlvbnMgd2l0aCBnYXAgYmV0d2VlbiBjb2x1bW5zICglKS5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge3sgY29sX2dhcF9wZXJjZW50PzogbnVtYmVyIH19IFtvcHRzXSAtIE9wdGlvbnMgd2l0aCBnYXAgYmV0d2VlbiBjb2x1bW5zICglKS5cclxuXHRcdCAqL1xyXG5cdFx0Y29uc3RydWN0b3IoIG9wdHMgPSB7fSApIHtcclxuXHRcdFx0dGhpcy5jb2xfZ2FwX3BlcmNlbnQgPSBOdW1iZXIuaXNGaW5pdGUoICtvcHRzLmNvbF9nYXBfcGVyY2VudCApID8gK29wdHMuY29sX2dhcF9wZXJjZW50IDogMztcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIENvbXB1dGUgbm9ybWFsaXplZCBmbGV4LWJhc2lzIHZhbHVlcyBmb3IgYSByb3csIHJlc3BlY3RpbmcgY29sdW1uIGdhcHMuXHJcblx0XHQgKiBSZXR1cm5zIGJhc2VzIHRoYXQgc3VtIHRvIGF2YWlsYWJsZSA9IDEwMCAtIChuLTEpKmdhcC5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSByb3dfZWwgLSBSb3cgZWxlbWVudCBjb250YWluaW5nIC53cGJjX2JmYl9fY29sdW1uIGNoaWxkcmVuLlxyXG5cdFx0ICogQHBhcmFtIHtudW1iZXJ9IFtnYXBfcGVyY2VudD10aGlzLmNvbF9nYXBfcGVyY2VudF0gLSBHYXAgcGVyY2VudCBiZXR3ZWVuIGNvbHVtbnMuXHJcblx0XHQgKiBAcmV0dXJucyB7e2F2YWlsYWJsZTpudW1iZXIsYmFzZXM6bnVtYmVyW119fSBBdmFpbGFibGUgc3BhY2UgYW5kIGJhc2lzIHZhbHVlcy5cclxuXHRcdCAqL1xyXG5cdFx0Y29tcHV0ZV9lZmZlY3RpdmVfYmFzZXNfZnJvbV9yb3coIHJvd19lbCwgZ2FwX3BlcmNlbnQgPSB0aGlzLmNvbF9nYXBfcGVyY2VudCApIHtcclxuXHRcdFx0Y29uc3QgY29scyA9IEFycmF5LmZyb20oIHJvd19lbD8ucXVlcnlTZWxlY3RvckFsbCggJzpzY29wZSA+IC53cGJjX2JmYl9fY29sdW1uJyApIHx8IFtdICk7XHJcblx0XHRcdGNvbnN0IG4gICAgPSBjb2xzLmxlbmd0aCB8fCAxO1xyXG5cclxuXHRcdFx0Y29uc3QgcmF3ID0gY29scy5tYXAoICggY29sICkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHcgPSBjb2wuc3R5bGUuZmxleEJhc2lzIHx8ICcnO1xyXG5cdFx0XHRcdGNvbnN0IHAgPSBDb3JlLldQQkNfQkZCX1Nhbml0aXplLnBhcnNlX3BlcmNlbnQoIHcsIE5hTiApO1xyXG5cdFx0XHRcdHJldHVybiBOdW1iZXIuaXNGaW5pdGUoIHAgKSA/IHAgOiAoMTAwIC8gbik7XHJcblx0XHRcdH0gKTtcclxuXHJcblx0XHRcdGNvbnN0IHN1bV9yYXcgICAgPSByYXcucmVkdWNlKCAoIGEsIGIgKSA9PiBhICsgYiwgMCApIHx8IDEwMDtcclxuXHRcdFx0Y29uc3QgZ3AgICAgICAgICA9IE51bWJlci5pc0Zpbml0ZSggK2dhcF9wZXJjZW50ICkgPyArZ2FwX3BlcmNlbnQgOiAzO1xyXG5cdFx0XHRjb25zdCB0b3RhbF9nYXBzID0gTWF0aC5tYXgoIDAsIG4gLSAxICkgKiBncDtcclxuXHRcdFx0Y29uc3QgYXZhaWxhYmxlICA9IE1hdGgubWF4KCAwLCAxMDAgLSB0b3RhbF9nYXBzICk7XHJcblx0XHRcdGNvbnN0IHNjYWxlICAgICAgPSBhdmFpbGFibGUgLyBzdW1fcmF3O1xyXG5cclxuXHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRhdmFpbGFibGUsXHJcblx0XHRcdFx0YmFzZXM6IHJhdy5tYXAoICggcCApID0+IE1hdGgubWF4KCAwLCBwICogc2NhbGUgKSApXHJcblx0XHRcdH07XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBBcHBseSBjb21wdXRlZCBiYXNlcyB0byB0aGUgcm93J3MgY29sdW1ucyAoc2V0cyBmbGV4LWJhc2lzICUpLlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHJvd19lbCAtIFJvdyBlbGVtZW50LlxyXG5cdFx0ICogQHBhcmFtIHtudW1iZXJbXX0gYmFzZXMgLSBBcnJheSBvZiBiYXNpcyB2YWx1ZXMgKHBlcmNlbnQgb2YgZnVsbCAxMDApLlxyXG5cdFx0ICogQHJldHVybnMge3ZvaWR9XHJcblx0XHQgKi9cclxuXHRcdGFwcGx5X2Jhc2VzX3RvX3Jvdyggcm93X2VsLCBiYXNlcyApIHtcclxuXHRcdFx0Y29uc3QgY29scyA9IEFycmF5LmZyb20oIHJvd19lbD8ucXVlcnlTZWxlY3RvckFsbCggJzpzY29wZSA+IC53cGJjX2JmYl9fY29sdW1uJyApIHx8IFtdICk7XHJcblx0XHRcdGNvbHMuZm9yRWFjaCggKCBjb2wsIGkgKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgcCAgICAgICAgICAgICA9IGJhc2VzW2ldID8/IDA7XHJcblx0XHRcdFx0Y29sLnN0eWxlLmZsZXhCYXNpcyA9IGAke3B9JWA7XHJcblx0XHRcdH0gKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIERpc3RyaWJ1dGUgY29sdW1ucyBldmVubHksIHJlc3BlY3RpbmcgZ2FwLlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHJvd19lbCAtIFJvdyBlbGVtZW50LlxyXG5cdFx0ICogQHBhcmFtIHtudW1iZXJ9IFtnYXBfcGVyY2VudD10aGlzLmNvbF9nYXBfcGVyY2VudF0gLSBHYXAgcGVyY2VudC5cclxuXHRcdCAqIEByZXR1cm5zIHt2b2lkfVxyXG5cdFx0ICovXHJcblx0XHRzZXRfZXF1YWxfYmFzZXMoIHJvd19lbCwgZ2FwX3BlcmNlbnQgPSB0aGlzLmNvbF9nYXBfcGVyY2VudCApIHtcclxuXHRcdFx0Y29uc3QgY29scyAgICAgICA9IEFycmF5LmZyb20oIHJvd19lbD8ucXVlcnlTZWxlY3RvckFsbCggJzpzY29wZSA+IC53cGJjX2JmYl9fY29sdW1uJyApIHx8IFtdICk7XHJcblx0XHRcdGNvbnN0IG4gICAgICAgICAgPSBjb2xzLmxlbmd0aCB8fCAxO1xyXG5cdFx0XHRjb25zdCBncCAgICAgICAgID0gTnVtYmVyLmlzRmluaXRlKCArZ2FwX3BlcmNlbnQgKSA/ICtnYXBfcGVyY2VudCA6IDM7XHJcblx0XHRcdGNvbnN0IHRvdGFsX2dhcHMgPSBNYXRoLm1heCggMCwgbiAtIDEgKSAqIGdwO1xyXG5cdFx0XHRjb25zdCBhdmFpbGFibGUgID0gTWF0aC5tYXgoIDAsIDEwMCAtIHRvdGFsX2dhcHMgKTtcclxuXHRcdFx0Y29uc3QgZWFjaCAgICAgICA9IGF2YWlsYWJsZSAvIG47XHJcblx0XHRcdHRoaXMuYXBwbHlfYmFzZXNfdG9fcm93KCByb3dfZWwsIEFycmF5KCBuICkuZmlsbCggZWFjaCApICk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBBcHBseSBhIHByZXNldCBvZiByZWxhdGl2ZSB3ZWlnaHRzIHRvIGEgcm93L3NlY3Rpb24uXHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gc2VjdGlvbk9yUm93IC0gLndwYmNfYmZiX19zZWN0aW9uIG9yIGl0cyBjaGlsZCAud3BiY19iZmJfX3Jvdy5cclxuXHRcdCAqIEBwYXJhbSB7bnVtYmVyW119IHdlaWdodHMgLSBSZWxhdGl2ZSB3ZWlnaHRzIChlLmcuLCBbMSwzLDFdKS5cclxuXHRcdCAqIEBwYXJhbSB7bnVtYmVyfSBbZ2FwX3BlcmNlbnQ9dGhpcy5jb2xfZ2FwX3BlcmNlbnRdIC0gR2FwIHBlcmNlbnQuXHJcblx0XHQgKiBAcmV0dXJucyB7dm9pZH1cclxuXHRcdCAqL1xyXG5cdFx0YXBwbHlfbGF5b3V0X3ByZXNldCggc2VjdGlvbk9yUm93LCB3ZWlnaHRzLCBnYXBfcGVyY2VudCA9IHRoaXMuY29sX2dhcF9wZXJjZW50ICkge1xyXG5cdFx0XHRjb25zdCByb3cgPSBzZWN0aW9uT3JSb3c/LmNsYXNzTGlzdD8uY29udGFpbnMoICd3cGJjX2JmYl9fcm93JyApXHJcblx0XHRcdFx0PyBzZWN0aW9uT3JSb3dcclxuXHRcdFx0XHQ6IHNlY3Rpb25PclJvdz8ucXVlcnlTZWxlY3RvciggJzpzY29wZSA+IC53cGJjX2JmYl9fcm93JyApO1xyXG5cclxuXHRcdFx0aWYgKCAhIHJvdyApIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGNvbnN0IGNvbHMgPSBBcnJheS5mcm9tKCByb3cucXVlcnlTZWxlY3RvckFsbCggJzpzY29wZSA+IC53cGJjX2JmYl9fY29sdW1uJyApIHx8IFtdICk7XHJcblx0XHRcdGNvbnN0IG4gICAgPSBjb2xzLmxlbmd0aCB8fCAxO1xyXG5cclxuXHRcdFx0aWYgKCAhIEFycmF5LmlzQXJyYXkoIHdlaWdodHMgKSB8fCB3ZWlnaHRzLmxlbmd0aCAhPT0gbiApIHtcclxuXHRcdFx0XHR0aGlzLnNldF9lcXVhbF9iYXNlcyggcm93LCBnYXBfcGVyY2VudCApO1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Y29uc3Qgc3VtICAgICAgID0gd2VpZ2h0cy5yZWR1Y2UoICggYSwgYiApID0+IGEgKyBNYXRoLm1heCggMCwgTnVtYmVyKCBiICkgfHwgMCApLCAwICkgfHwgMTtcclxuXHRcdFx0Y29uc3QgZ3AgICAgICAgID0gTnVtYmVyLmlzRmluaXRlKCArZ2FwX3BlcmNlbnQgKSA/ICtnYXBfcGVyY2VudCA6IDM7XHJcblx0XHRcdGNvbnN0IGF2YWlsYWJsZSA9IE1hdGgubWF4KCAwLCAxMDAgLSBNYXRoLm1heCggMCwgbiAtIDEgKSAqIGdwICk7XHJcblx0XHRcdGNvbnN0IGJhc2VzICAgICA9IHdlaWdodHMubWFwKCAoIHcgKSA9PiBNYXRoLm1heCggMCwgKE51bWJlciggdyApIHx8IDApIC8gc3VtICogYXZhaWxhYmxlICkgKTtcclxuXHJcblx0XHRcdHRoaXMuYXBwbHlfYmFzZXNfdG9fcm93KCByb3csIGJhc2VzICk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBCdWlsZCBwcmVzZXQgd2VpZ2h0IGxpc3RzIGZvciBhIGdpdmVuIGNvbHVtbiBjb3VudC5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge251bWJlcn0gbiAtIENvbHVtbiBjb3VudC5cclxuXHRcdCAqIEByZXR1cm5zIHtudW1iZXJbXVtdfSBMaXN0IG9mIHdlaWdodCBhcnJheXMuXHJcblx0XHQgKi9cclxuXHRcdGJ1aWxkX3ByZXNldHNfZm9yX2NvbHVtbnMoIG4gKSB7XHJcblx0XHRcdHN3aXRjaCAoIG4gKSB7XHJcblx0XHRcdFx0Y2FzZSAxOlxyXG5cdFx0XHRcdFx0cmV0dXJuIFsgWyAxIF0gXTtcclxuXHRcdFx0XHRjYXNlIDI6XHJcblx0XHRcdFx0XHRyZXR1cm4gWyBbIDEsIDIgXSwgWyAyLCAxIF0sIFsgMSwgMyBdLCBbIDMsIDEgXSBdO1xyXG5cdFx0XHRcdGNhc2UgMzpcclxuXHRcdFx0XHRcdHJldHVybiBbIFsgMSwgMywgMSBdLCBbIDEsIDIsIDEgXSwgWyAyLCAxLCAxIF0sIFsgMSwgMSwgMiBdIF07XHJcblx0XHRcdFx0Y2FzZSA0OlxyXG5cdFx0XHRcdFx0cmV0dXJuIFsgWyAxLCAyLCAyLCAxIF0sIFsgMiwgMSwgMSwgMSBdLCBbIDEsIDEsIDEsIDIgXSBdO1xyXG5cdFx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0XHRyZXR1cm4gWyBBcnJheSggbiApLmZpbGwoIDEgKSBdO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBGb3JtYXQgYSBodW1hbi1yZWFkYWJsZSBsYWJlbCBsaWtlIFwiNTAlLzI1JS8yNSVcIiBmcm9tIHdlaWdodHMuXHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHtudW1iZXJbXX0gd2VpZ2h0cyAtIFdlaWdodCBsaXN0LlxyXG5cdFx0ICogQHJldHVybnMge3N0cmluZ30gTGFiZWwgc3RyaW5nLlxyXG5cdFx0ICovXHJcblx0XHRmb3JtYXRfcHJlc2V0X2xhYmVsKCB3ZWlnaHRzICkge1xyXG5cdFx0XHRjb25zdCBzdW0gPSB3ZWlnaHRzLnJlZHVjZSggKCBhLCBiICkgPT4gYSArIChOdW1iZXIoIGIgKSB8fCAwKSwgMCApIHx8IDE7XHJcblx0XHRcdHJldHVybiB3ZWlnaHRzLm1hcCggKCB3ICkgPT4gTWF0aC5yb3VuZCggKChOdW1iZXIoIHcgKSB8fCAwKSAvIHN1bSkgKiAxMDAgKSApLmpvaW4oICclLycgKSArICclJztcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFBhcnNlIGNvbW1hL3NwYWNlIHNlcGFyYXRlZCB3ZWlnaHRzIGludG8gbnVtYmVycy5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gaW5wdXQgLSBVc2VyIGlucHV0IGxpa2UgXCIyMCw2MCwyMFwiLlxyXG5cdFx0ICogQHJldHVybnMge251bWJlcltdfSBQYXJzZWQgd2VpZ2h0cy5cclxuXHRcdCAqL1xyXG5cdFx0cGFyc2Vfd2VpZ2h0cyggaW5wdXQgKSB7XHJcblx0XHRcdGlmICggISBpbnB1dCApIHtcclxuXHRcdFx0XHRyZXR1cm4gW107XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIFN0cmluZyggaW5wdXQgKVxyXG5cdFx0XHRcdC5yZXBsYWNlKCAvW15cXGQsLlxcc10vZywgJycgKVxyXG5cdFx0XHRcdC5zcGxpdCggL1tcXHMsXSsvIClcclxuXHRcdFx0XHQubWFwKCAoIHMgKSA9PiBwYXJzZUZsb2F0KCBzICkgKVxyXG5cdFx0XHRcdC5maWx0ZXIoICggbiApID0+IE51bWJlci5pc0Zpbml0ZSggbiApICYmIG4gPj0gMCApO1xyXG5cdFx0fVxyXG5cdH07XHJcblxyXG5cdC8qKlxyXG5cdCAqIFdQQkMgVXNhZ2UgTGltaXQgc2VydmljZS5cclxuXHQgKiBDb3VudHMgZmllbGQgdXNhZ2UgYnkga2V5LCBjb21wYXJlcyB0byBwYWxldHRlIGxpbWl0cywgYW5kIHVwZGF0ZXMgcGFsZXR0ZSBVSS5cclxuXHQgKi9cclxuXHRDb3JlLldQQkNfQkZCX1VzYWdlTGltaXRTZXJ2aWNlID0gY2xhc3MgIHtcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIENvbnN0cnVjdG9yLiBTZXQgcGFnZXNfY29udGFpbmVyIGFuZCBwYWxldHRlX3VsLlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHBhZ2VzX2NvbnRhaW5lciAtIENhbnZhcyByb290IHRoYXQgaG9sZHMgcGxhY2VkIGZpZWxkcy5cclxuXHRcdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnRbXXxudWxsfSBwYWxldHRlX3Vscz86ICAgUGFsZXR0ZXMgVUwgd2l0aCAud3BiY19iZmJfX2ZpZWxkIGl0ZW1zIChtYXkgYmUgbnVsbCkuXHJcblx0XHQgKi9cclxuXHRcdGNvbnN0cnVjdG9yKHBhZ2VzX2NvbnRhaW5lciwgcGFsZXR0ZV91bHMpIHtcclxuXHRcdFx0dGhpcy5wYWdlc19jb250YWluZXIgPSBwYWdlc19jb250YWluZXI7XHJcblx0XHRcdC8vIE5vcm1hbGl6ZSB0byBhbiBhcnJheTsgd2XigJlsbCBzdGlsbCBiZSByb2J1c3QgaWYgbm9uZSBwcm92aWRlZC5cclxuXHRcdFx0dGhpcy5wYWxldHRlX3VscyAgICAgPSBBcnJheS5pc0FycmF5KCBwYWxldHRlX3VscyApID8gcGFsZXR0ZV91bHMgOiAocGFsZXR0ZV91bHMgPyBbIHBhbGV0dGVfdWxzIF0gOiBbXSk7XHJcblx0XHR9XHJcblxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogUGFyc2UgdXNhZ2UgbGltaXQgZnJvbSByYXcgZGF0YXNldCB2YWx1ZS4gTWlzc2luZy9pbnZhbGlkIC0+IEluZmluaXR5LlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcnxudWxsfHVuZGVmaW5lZH0gcmF3IC0gUmF3IGF0dHJpYnV0ZSB2YWx1ZS5cclxuXHRcdCAqIEByZXR1cm5zIHtudW1iZXJ9IExpbWl0IG51bWJlciBvciBJbmZpbml0eS5cclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIHBhcnNlX3VzYWdlX2xpbWl0KCByYXcgKSB7XHJcblx0XHRcdGlmICggcmF3ID09IG51bGwgKSB7XHJcblx0XHRcdFx0cmV0dXJuIEluZmluaXR5O1xyXG5cdFx0XHR9XHJcblx0XHRcdGNvbnN0IG4gPSBwYXJzZUludCggcmF3LCAxMCApO1xyXG5cdFx0XHRyZXR1cm4gTnVtYmVyLmlzRmluaXRlKCBuICkgPyBuIDogSW5maW5pdHk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBDb3VudCBob3cgbWFueSBpbnN0YW5jZXMgZXhpc3QgcGVyIHVzYWdlX2tleSBpbiB0aGUgY2FudmFzLlxyXG5cdFx0ICpcclxuXHRcdCAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBudW1iZXI+fSBNYXAgb2YgdXNhZ2Vfa2V5IC0+IGNvdW50LlxyXG5cdFx0ICovXHJcblx0XHRjb3VudF91c2FnZV9ieV9rZXkoKSB7XHJcblx0XHRcdGNvbnN0IHVzZWQgPSB7fTtcclxuXHRcdFx0Y29uc3QgYWxsICA9IHRoaXMucGFnZXNfY29udGFpbmVyPy5xdWVyeVNlbGVjdG9yQWxsKCAnLndwYmNfYmZiX19wYW5lbC0tcHJldmlldyAud3BiY19iZmJfX2ZpZWxkOm5vdCguaXMtaW52YWxpZCknICkgfHwgW107XHJcblx0XHRcdGFsbC5mb3JFYWNoKCAoIGVsICkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IGtleSA9IGVsLmRhdGFzZXQudXNhZ2Vfa2V5IHx8IGVsLmRhdGFzZXQudHlwZSB8fCBlbC5kYXRhc2V0LmlkO1xyXG5cdFx0XHRcdGlmICggISBrZXkgKSB7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHVzZWRba2V5XSA9ICh1c2VkW2tleV0gfHwgMCkgKyAxO1xyXG5cdFx0XHR9ICk7XHJcblx0XHRcdHJldHVybiB1c2VkO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogUmV0dXJuIHBhbGV0dGUgbGltaXQgZm9yIGEgZ2l2ZW4gdXNhZ2Uga2V5IChpZCBvZiB0aGUgcGFsZXR0ZSBpdGVtKS5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVXNhZ2Uga2V5LlxyXG5cdFx0ICogQHJldHVybnMge251bWJlcn0gTGltaXQgdmFsdWUgb3IgSW5maW5pdHkuXHJcblx0XHQgKi9cclxuXHRcdGdldF9saW1pdF9mb3Jfa2V5KGtleSkge1xyXG5cdFx0XHRpZiAoICEga2V5ICkge1xyXG5cdFx0XHRcdHJldHVybiBJbmZpbml0eTtcclxuXHRcdFx0fVxyXG5cdFx0XHQvLyBRdWVyeSBhY3Jvc3MgYWxsIHBhbGV0dGVzIHByZXNlbnQgbm93IChzdG9yZWQgKyBhbnkgbmV3bHkgYWRkZWQgaW4gRE9NKS5cclxuXHRcdFx0Y29uc3Qgcm9vdHMgICAgICAgICAgICA9IHRoaXMucGFsZXR0ZV91bHM/Lmxlbmd0aCA/IHRoaXMucGFsZXR0ZV91bHMgOiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCAnLndwYmNfYmZiX19wYW5lbF9maWVsZF90eXBlc19fdWwnICk7XHJcblx0XHRcdGNvbnN0IGFsbFBhbGV0dGVGaWVsZHMgPSBBcnJheS5mcm9tKCByb290cyApLmZsYXRNYXAoIHIgPT4gQXJyYXkuZnJvbSggci5xdWVyeVNlbGVjdG9yQWxsKCAnLndwYmNfYmZiX19maWVsZCcgKSApICk7XHJcblx0XHRcdGxldCBsaW1pdCAgICAgICAgICAgICAgPSBJbmZpbml0eTtcclxuXHJcblx0XHRcdGFsbFBhbGV0dGVGaWVsZHMuZm9yRWFjaCggKGVsKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgdXNhZ2Vfa2V5ID0gZWwuZGF0YXNldC51c2FnZV9rZXkgfHwgZWwuZGF0YXNldC5pZDtcclxuXHRcdFx0XHRpZiAoIGVsLmRhdGFzZXQuaWQgPT09IGtleSB8fCB1c2FnZV9rZXkgPT09IGtleSApIHtcclxuXHRcdFx0XHRcdGNvbnN0IG4gPSBDb3JlLldQQkNfQkZCX1VzYWdlTGltaXRTZXJ2aWNlLnBhcnNlX3VzYWdlX2xpbWl0KCBlbC5kYXRhc2V0LnVzYWdlbnVtYmVyICk7XHJcblx0XHRcdFx0XHQvLyBDaG9vc2UgdGhlIHNtYWxsZXN0IGZpbml0ZSBsaW1pdCAoc2FmZXN0IGlmIHBhbGV0dGVzIGRpc2FncmVlKS5cclxuXHRcdFx0XHRcdGlmICggbiA8IGxpbWl0ICkge1xyXG5cdFx0XHRcdFx0XHRsaW1pdCA9IG47XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9ICk7XHJcblxyXG5cdFx0XHRyZXR1cm4gbGltaXQ7XHJcblx0XHR9XHJcblxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogRGlzYWJsZS9lbmFibGUgcGFsZXR0ZSBpdGVtcyBiYXNlZCBvbiBjdXJyZW50IHVzYWdlIGNvdW50cyBhbmQgbGltaXRzLlxyXG5cdFx0ICpcclxuXHRcdCAqIEByZXR1cm5zIHt2b2lkfVxyXG5cdFx0ICovXHJcblx0XHR1cGRhdGVfcGFsZXR0ZV91aSgpIHtcclxuXHRcdFx0Ly8gQWx3YXlzIGNvbXB1dGUgdXNhZ2UgZnJvbSB0aGUgY2FudmFzOlxyXG5cdFx0XHRjb25zdCB1c2FnZSA9IHRoaXMuY291bnRfdXNhZ2VfYnlfa2V5KCk7XHJcblxyXG5cdFx0XHQvLyBVcGRhdGUgYWxsIHBhbGV0dGVzIGN1cnJlbnRseSBpbiBET00gKG5vdCBqdXN0IHRoZSBpbml0aWFsbHkgY2FwdHVyZWQgb25lcylcclxuXHRcdFx0Y29uc3QgcGFsZXR0ZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCAnLndwYmNfYmZiX19wYW5lbF9maWVsZF90eXBlc19fdWwnICk7XHJcblxyXG5cdFx0XHRwYWxldHRlcy5mb3JFYWNoKCAocGFsKSA9PiB7XHJcblx0XHRcdFx0cGFsLnF1ZXJ5U2VsZWN0b3JBbGwoICcud3BiY19iZmJfX2ZpZWxkJyApLmZvckVhY2goIChwYW5lbF9maWVsZCkgPT4ge1xyXG5cdFx0XHRcdFx0Y29uc3QgcGFsZXR0ZUlkICAgPSBwYW5lbF9maWVsZC5kYXRhc2V0LmlkO1xyXG5cdFx0XHRcdFx0Y29uc3QgdXNhZ2VLZXkgICAgPSBwYW5lbF9maWVsZC5kYXRhc2V0LnVzYWdlX2tleSB8fCBwYWxldHRlSWQ7XHJcblx0XHRcdFx0XHRjb25zdCByYXdfbGltaXQgICA9IHBhbmVsX2ZpZWxkLmRhdGFzZXQudXNhZ2VudW1iZXI7XHJcblx0XHRcdFx0XHRjb25zdCBwZXJFbExpbWl0ICA9IENvcmUuV1BCQ19CRkJfVXNhZ2VMaW1pdFNlcnZpY2UucGFyc2VfdXNhZ2VfbGltaXQoIHJhd19saW1pdCApO1xyXG5cdFx0XHRcdFx0Ly8gRWZmZWN0aXZlIGxpbWl0IGFjcm9zcyBhbGwgcGFsZXR0ZXMgaXMgdGhlIGdsb2JhbCBsaW1pdCBmb3IgdGhpcyBrZXkuXHJcblx0XHRcdFx0XHRjb25zdCBnbG9iYWxMaW1pdCA9IHRoaXMuZ2V0X2xpbWl0X2Zvcl9rZXkoIHVzYWdlS2V5ICk7XHJcblx0XHRcdFx0XHRjb25zdCBsaW1pdCAgICAgICA9IE51bWJlci5pc0Zpbml0ZSggZ2xvYmFsTGltaXQgKSA/IGdsb2JhbExpbWl0IDogcGVyRWxMaW1pdDsgLy8gcHJlZmVyIGdsb2JhbCBtaW5cclxuXHJcblx0XHRcdFx0XHRjb25zdCBjdXJyZW50ID0gdXNhZ2VbdXNhZ2VLZXldIHx8IDA7XHJcblx0XHRcdFx0XHRjb25zdCBkaXNhYmxlID0gTnVtYmVyLmlzRmluaXRlKCBsaW1pdCApICYmIGN1cnJlbnQgPj0gbGltaXQ7XHJcblxyXG5cdFx0XHRcdFx0cGFuZWxfZmllbGQuc3R5bGUucG9pbnRlckV2ZW50cyA9IGRpc2FibGUgPyAnbm9uZScgOiAnJztcclxuXHRcdFx0XHRcdHBhbmVsX2ZpZWxkLnN0eWxlLm9wYWNpdHkgICAgICAgPSBkaXNhYmxlID8gJzAuNCcgOiAnJztcclxuXHRcdFx0XHRcdHBhbmVsX2ZpZWxkLnNldEF0dHJpYnV0ZSggJ2FyaWEtZGlzYWJsZWQnLCBkaXNhYmxlID8gJ3RydWUnIDogJ2ZhbHNlJyApO1xyXG5cdFx0XHRcdFx0aWYgKCBkaXNhYmxlICkge1xyXG5cdFx0XHRcdFx0XHRwYW5lbF9maWVsZC5zZXRBdHRyaWJ1dGUoICd0YWJpbmRleCcsICctMScgKTtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdHBhbmVsX2ZpZWxkLnJlbW92ZUF0dHJpYnV0ZSggJ3RhYmluZGV4JyApO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0gKTtcclxuXHRcdFx0fSApO1xyXG5cdFx0fVxyXG5cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFJldHVybiBob3cgbWFueSB2YWxpZCBpbnN0YW5jZXMgd2l0aCB0aGlzIHVzYWdlIGtleSBleGlzdCBpbiB0aGUgY2FudmFzLlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBVc2FnZSBrZXkgb2YgYSBwYWxldHRlIGl0ZW0uXHJcblx0XHQgKiBAcmV0dXJucyB7bnVtYmVyfSBDb3VudCBvZiBleGlzdGluZyBub24taW52YWxpZCBpbnN0YW5jZXMuXHJcblx0XHQgKi9cclxuXHRcdGNvdW50X2Zvcl9rZXkoIGtleSApIHtcclxuXHRcdFx0aWYgKCAhIGtleSApIHtcclxuXHRcdFx0XHRyZXR1cm4gMDtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gKCB0aGlzLnBhZ2VzX2NvbnRhaW5lcj8ucXVlcnlTZWxlY3RvckFsbChcclxuICAgICAgICAgICAgICAgIGAud3BiY19iZmJfX3BhbmVsLS1wcmV2aWV3IC53cGJjX2JmYl9fZmllbGRbZGF0YS11c2FnZV9rZXk9XCIke0NvcmUuV1BCQ19CRkJfU2FuaXRpemUuZXNjX2F0dHJfdmFsdWVfZm9yX3NlbGVjdG9yKCBrZXkgKX1cIl06bm90KC5pcy1pbnZhbGlkKSwgXHJcbiAgICAgICAgICAgICAgICAgLndwYmNfYmZiX19wYW5lbC0tcHJldmlldyAud3BiY19iZmJfX2ZpZWxkW2RhdGEtdHlwZT1cIiR7Q29yZS5XUEJDX0JGQl9TYW5pdGl6ZS5lc2NfYXR0cl92YWx1ZV9mb3Jfc2VsZWN0b3IoIGtleSApfVwiXTpub3QoLmlzLWludmFsaWQpYFxyXG5cdFx0XHQpIHx8IFtdICkubGVuZ3RoO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQWxpYXMgZm9yIGxpbWl0IGxvb2t1cCAocmVhZGFiaWxpdHkpLlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBVc2FnZSBrZXkgb2YgYSBwYWxldHRlIGl0ZW0uXHJcblx0XHQgKiBAcmV0dXJucyB7bnVtYmVyfSBMaW1pdCB2YWx1ZSBvciBJbmZpbml0eS5cclxuXHRcdCAqL1xyXG5cdFx0bGltaXRfZm9yX2tleSgga2V5ICkge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5nZXRfbGltaXRfZm9yX2tleSgga2V5ICk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBSZW1haW5pbmcgc2xvdHMgZm9yIHRoaXMga2V5IChJbmZpbml0eSBpZiB1bmxpbWl0ZWQpLlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBVc2FnZSBrZXkgb2YgYSBwYWxldHRlIGl0ZW0uXHJcblx0XHQgKiBAcmV0dXJucyB7bnVtYmVyfSBSZW1haW5pbmcgY291bnQgKD49IDApIG9yIEluZmluaXR5LlxyXG5cdFx0ICovXHJcblx0XHRyZW1haW5pbmdfZm9yX2tleSgga2V5ICkge1xyXG5cdFx0XHRjb25zdCBsaW1pdCA9IHRoaXMubGltaXRfZm9yX2tleSgga2V5ICk7XHJcblx0XHRcdGlmICggbGltaXQgPT09IEluZmluaXR5ICkge1xyXG5cdFx0XHRcdHJldHVybiBJbmZpbml0eTtcclxuXHRcdFx0fVxyXG5cdFx0XHRjb25zdCB1c2VkID0gdGhpcy5jb3VudF9mb3Jfa2V5KCBrZXkgKTtcclxuXHRcdFx0cmV0dXJuIE1hdGgubWF4KCAwLCBsaW1pdCAtIHVzZWQgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFRydWUgaWYgeW91IGNhbiBhZGQgYGRlbHRhYCBtb3JlIGl0ZW1zIGZvciB0aGlzIGtleS5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVXNhZ2Uga2V5IG9mIGEgcGFsZXR0ZSBpdGVtLlxyXG5cdFx0ICogQHBhcmFtIHtudW1iZXJ9IFtkZWx0YT0xXSAtIEhvdyBtYW55IGl0ZW1zIHlvdSBpbnRlbmQgdG8gYWRkLlxyXG5cdFx0ICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgYWRkaW5nIGlzIGFsbG93ZWQuXHJcblx0XHQgKi9cclxuXHRcdGNhbl9hZGQoIGtleSwgZGVsdGEgPSAxICkge1xyXG5cdFx0XHRjb25zdCByZW0gPSB0aGlzLnJlbWFpbmluZ19mb3Jfa2V5KCBrZXkgKTtcclxuXHRcdFx0cmV0dXJuICggcmVtID09PSBJbmZpbml0eSApID8gdHJ1ZSA6ICggcmVtID49IGRlbHRhICk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBVSS1mYWNpbmcgZ2F0ZTogYWxlcnQgd2hlbiBleGNlZWRlZC4gUmV0dXJucyBib29sZWFuIGFsbG93ZWQvYmxvY2tlZC5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVXNhZ2Uga2V5IG9mIGEgcGFsZXR0ZSBpdGVtLlxyXG5cdFx0ICogQHBhcmFtIHt7bGFiZWw/OiBzdHJpbmcsIGRlbHRhPzogbnVtYmVyfX0gW29wdHM9e31dIC0gT3B0aW9uYWwgVUkgaW5mby5cclxuXHRcdCAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIGFsbG93ZWQsIGZhbHNlIGlmIGJsb2NrZWQuXHJcblx0XHQgKi9cclxuXHRcdGdhdGVfb3JfYWxlcnQoIGtleSwgeyBsYWJlbCA9IGtleSwgZGVsdGEgPSAxIH0gPSB7fSApIHtcclxuXHRcdFx0aWYgKCB0aGlzLmNhbl9hZGQoIGtleSwgZGVsdGEgKSApIHtcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cdFx0XHRjb25zdCBsaW1pdCA9IHRoaXMubGltaXRfZm9yX2tleSgga2V5ICk7XHJcblx0XHRcdGFsZXJ0KCBgT25seSAke2xpbWl0fSBpbnN0YW5jZSR7bGltaXQgPiAxID8gJ3MnIDogJyd9IG9mIFwiJHtsYWJlbH1cIiBhbGxvd2VkLmAgKTtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQmFja3dhcmQtY29tcGF0aWJsZSBhbGlhcyB1c2VkIGVsc2V3aGVyZSBpbiB0aGUgY29kZWJhc2UuICAtIENoZWNrIHdoZXRoZXIgYW5vdGhlciBpbnN0YW5jZSB3aXRoIHRoZSBnaXZlblxyXG5cdFx0ICogdXNhZ2Uga2V5IGNhbiBiZSBhZGRlZC5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVXNhZ2Uga2V5IG9mIGEgcGFsZXR0ZSBpdGVtLlxyXG5cdFx0ICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgYWRkaW5nIG9uZSBtb3JlIGlzIGFsbG93ZWQuXHJcblx0XHQgKi9cclxuXHRcdGlzX3VzYWdlX29rKCBrZXkgKSB7XHJcblx0XHRcdHJldHVybiB0aGlzLmNhbl9hZGQoIGtleSwgMSApO1xyXG5cdFx0fVxyXG5cclxuXHR9O1xyXG5cclxuXHQvKipcclxuXHQgKiBDb25zdGFudCBldmVudCBuYW1lcyBmb3IgdGhlIGJ1aWxkZXIuXHJcblx0ICovXHJcblx0Q29yZS5XUEJDX0JGQl9FdmVudHMgPSBPYmplY3QuZnJlZXplKHtcclxuXHRcdFNFTEVDVCAgICAgICAgICAgIDogJ3dwYmM6YmZiOnNlbGVjdCcsXHJcblx0XHRDTEVBUl9TRUxFQ1RJT04gICA6ICd3cGJjOmJmYjpjbGVhci1zZWxlY3Rpb24nLFxyXG5cdFx0RklFTERfQUREICAgICAgICAgOiAnd3BiYzpiZmI6ZmllbGQ6YWRkJyxcclxuXHRcdEZJRUxEX1JFTU9WRSAgICAgIDogJ3dwYmM6YmZiOmZpZWxkOnJlbW92ZScsXHJcblx0XHRTVFJVQ1RVUkVfQ0hBTkdFICA6ICd3cGJjOmJmYjpzdHJ1Y3R1cmU6Y2hhbmdlJyxcclxuXHRcdFNUUlVDVFVSRV9MT0FERUQgIDogJ3dwYmM6YmZiOnN0cnVjdHVyZTpsb2FkZWQnXHJcblx0fSk7XHJcblxyXG5cdC8qKlxyXG5cdCAqIExpZ2h0d2VpZ2h0IGV2ZW50IGJ1cyB0aGF0IGVtaXRzIHRvIGJvdGggdGhlIHBhZ2VzIGNvbnRhaW5lciBhbmQgZG9jdW1lbnQuXHJcblx0ICovXHJcblx0Q29yZS5XUEJDX0JGQl9FdmVudEJ1cyA9ICBjbGFzcyB7XHJcblx0XHQvKipcclxuXHRcdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHNjb3BlX2VsIC0gRWxlbWVudCB0byBkaXNwYXRjaCBidWJibGVkIGV2ZW50cyBmcm9tLlxyXG5cdFx0ICovXHJcblx0XHRjb25zdHJ1Y3Rvciggc2NvcGVfZWwgKSB7XHJcblx0XHRcdHRoaXMuc2NvcGVfZWwgPSBzY29wZV9lbDtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEVtaXQgYSBET00gQ3VzdG9tRXZlbnQgd2l0aCBwYXlsb2FkLlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIC0gRXZlbnQgdHlwZSAodXNlIENvcmUuV1BCQ19CRkJfRXZlbnRzLiB3aGVuIHBvc3NpYmxlKS5cclxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBbZGV0YWlsPXt9XSAtIEFyYml0cmFyeSBzZXJpYWxpemFibGUgcGF5bG9hZC5cclxuXHRcdCAqIEByZXR1cm5zIHt2b2lkfVxyXG5cdFx0ICovXHJcblx0XHRlbWl0KCB0eXBlLCBkZXRhaWwgPSB7fSApIHtcclxuXHRcdFx0aWYgKCAhIHRoaXMuc2NvcGVfZWwgKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblx0XHRcdHRoaXMuc2NvcGVfZWwuZGlzcGF0Y2hFdmVudCggbmV3IEN1c3RvbUV2ZW50KCB0eXBlLCB7IGRldGFpbDogeyAuLi5kZXRhaWwgfSwgYnViYmxlczogdHJ1ZSB9ICkgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFN1YnNjcmliZSB0byBhbiBldmVudCBvbiBkb2N1bWVudC5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSAtIEV2ZW50IHR5cGUuXHJcblx0XHQgKiBAcGFyYW0geyhldjpDdXN0b21FdmVudCk9PnZvaWR9IGhhbmRsZXIgLSBIYW5kbGVyIGZ1bmN0aW9uLlxyXG5cdFx0ICogQHJldHVybnMge3ZvaWR9XHJcblx0XHQgKi9cclxuXHRcdG9uKCB0eXBlLCBoYW5kbGVyICkge1xyXG5cdFx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCB0eXBlLCBoYW5kbGVyICk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBVbnN1YnNjcmliZSBmcm9tIGFuIGV2ZW50IG9uIGRvY3VtZW50LlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIC0gRXZlbnQgdHlwZS5cclxuXHRcdCAqIEBwYXJhbSB7KGV2OkN1c3RvbUV2ZW50KT0+dm9pZH0gaGFuZGxlciAtIEhhbmRsZXIgZnVuY3Rpb24uXHJcblx0XHQgKiBAcmV0dXJucyB7dm9pZH1cclxuXHRcdCAqL1xyXG5cdFx0b2ZmKCB0eXBlLCBoYW5kbGVyICkge1xyXG5cdFx0XHRkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCB0eXBlLCBoYW5kbGVyICk7XHJcblx0XHR9XHJcblx0fTtcclxuXHJcblx0LyoqXHJcblx0ICogU29ydGFibGVKUyBtYW5hZ2VyOiBzaW5nbGUgcG9pbnQgZm9yIGNvbnNpc3RlbnQgRG5EIGNvbmZpZy5cclxuXHQgKi9cclxuXHRDb3JlLldQQkNfQkZCX1NvcnRhYmxlTWFuYWdlciA9IGNsYXNzICB7XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBAcGFyYW0ge1dQQkNfRm9ybV9CdWlsZGVyfSBidWlsZGVyIC0gVGhlIGFjdGl2ZSBidWlsZGVyIGluc3RhbmNlLlxyXG5cdFx0ICogQHBhcmFtIHt7IGdyb3VwTmFtZT86IHN0cmluZywgYW5pbWF0aW9uPzogbnVtYmVyLCBnaG9zdENsYXNzPzogc3RyaW5nLCBjaG9zZW5DbGFzcz86IHN0cmluZywgZHJhZ0NsYXNzPzpcclxuXHRcdCAqICAgICBzdHJpbmcgfX0gW29wdHM9e31dIC0gVmlzdWFsL2JlaGF2aW9yIG9wdGlvbnMuXHJcblx0XHQgKi9cclxuXHRcdGNvbnN0cnVjdG9yKCBidWlsZGVyLCBvcHRzID0ge30gKSB7XHJcblx0XHRcdHRoaXMuYnVpbGRlciA9IGJ1aWxkZXI7XHJcblx0XHRcdGNvbnN0IGdpZCA9IHRoaXMuYnVpbGRlcj8uaW5zdGFuY2VfaWQgfHwgTWF0aC5yYW5kb20oKS50b1N0cmluZyggMzYgKS5zbGljZSggMiwgOCApO1xyXG5cdFx0XHR0aGlzLm9wdHMgPSB7XHJcblx0XHRcdFx0Ly8gZ3JvdXBOYW1lICA6ICdmb3JtJyxcclxuXHRcdFx0XHRncm91cE5hbWU6IGBmb3JtLSR7Z2lkfWAsXHJcblx0XHRcdFx0YW5pbWF0aW9uICA6IDE1MCxcclxuXHRcdFx0XHRnaG9zdENsYXNzIDogJ3dwYmNfYmZiX19kcmFnLWdob3N0JyxcclxuXHRcdFx0XHRjaG9zZW5DbGFzczogJ3dwYmNfYmZiX19oaWdobGlnaHQnLFxyXG5cdFx0XHRcdGRyYWdDbGFzcyAgOiAnd3BiY19iZmJfX2RyYWctYWN0aXZlJyxcclxuXHRcdFx0XHQuLi5vcHRzXHJcblx0XHRcdH07XHJcblx0XHRcdC8qKiBAdHlwZSB7U2V0PEhUTUxFbGVtZW50Pn0gKi9cclxuXHRcdFx0dGhpcy5fY29udGFpbmVycyA9IG5ldyBTZXQoKTtcclxuXHJcblx0XHRcdC8qKlxyXG5cdFx0XHQgKiBHdWFyZCBhZ2FpbnN0IGxvc3QgbW91c2V1cCAvIHBvaW50ZXJ1cCBldmVudHMuXHJcblx0XHRcdCAqXHJcblx0XHRcdCAqIEB0eXBlIHtib29sZWFufVxyXG5cdFx0XHQgKi9cclxuXHRcdFx0dGhpcy5fZHJhZ19mYWlsX3NhZmVfYm91bmQgPSBmYWxzZTtcclxuXHJcblx0XHRcdHRoaXMuX2JpbmRfZHJhZ19mYWlsX3NhZmUoKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIENsZWFudXAgZHJhZyBVSSBzdGF0ZS5cclxuXHRcdCAqXHJcblx0XHQgKiBUaGlzIGlzIGEgZGVmZW5zaXZlIGNsZWFudXAgZm9yIGNhc2VzIHdoZW4gQ2hyb21lIG9yIGEgYnJvd3NlciBleHRlbnNpb25cclxuXHRcdCAqIGxvc2VzIHRoZSBmaW5hbCBtb3VzZXVwIC8gcG9pbnRlcnVwIGV2ZW50IGR1cmluZyBmYWxsYmFjayBkcmFnZ2luZy5cclxuXHRcdCAqXHJcblx0XHQgKiBAcmV0dXJucyB7dm9pZH1cclxuXHRcdCAqL1xyXG5cdFx0X2NsZWFudXBfZHJhZ191aSgpIHtcclxuXHRcdFx0dGhpcy5fZHJhZ1N0YXRlID0gbnVsbDtcclxuXHRcdFx0dGhpcy5fdG9nZ2xlX2RuZF9yb290X2ZsYWdzKCBmYWxzZSApO1xyXG5cdFx0XHR0aGlzLmJ1aWxkZXI/Ll9yZW1vdmVfZHJhZ2dpbmdfY2xhc3M/LigpO1xyXG5cclxuXHRcdFx0Ly8gUmVtb3ZlIG9ubHkgZmFsbGJhY2sgbWlycm9ycy4gRG8gbm90IHRvdWNoIHJlYWwgZHJhZ2dlZCBlbGVtZW50cy5cclxuXHRcdFx0ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCggJy5zb3J0YWJsZS1mYWxsYmFja1tkYXRhLWRyYWctcm9sZV0sIC53cGJjX2JmYl9fc2ltcGxlX2xpc3RfZmFsbGJhY2snIClcclxuXHRcdFx0XHRcdC5mb3JFYWNoKCAoZWwpID0+IHtcclxuXHRcdFx0XHRcdFx0aWYgKCBlbC5wYXJlbnROb2RlICkge1xyXG5cdFx0XHRcdFx0XHRcdGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIGVsICk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0gKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEJpbmQgZ2xvYmFsIGZhaWwtc2FmZSBsaXN0ZW5lcnMgZm9yIGRyYWcgY2xlYW51cC5cclxuXHRcdCAqXHJcblx0XHQgKiBAcmV0dXJucyB7dm9pZH1cclxuXHRcdCAqL1xyXG5cdFx0X2JpbmRfZHJhZ19mYWlsX3NhZmUoKSB7XHJcblx0XHRcdGlmICggdGhpcy5fZHJhZ19mYWlsX3NhZmVfYm91bmQgKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHR0aGlzLl9kcmFnX2ZhaWxfc2FmZV9ib3VuZCA9IHRydWU7XHJcblxyXG5cdFx0XHRjb25zdCBmaW5pc2hfZHJhZyA9ICgpID0+IHtcclxuXHRcdFx0XHR3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCAoKSA9PiB7XHJcblx0XHRcdFx0XHR0aGlzLl9jbGVhbnVwX2RyYWdfdWkoKTtcclxuXHRcdFx0XHR9ICk7XHJcblx0XHRcdH07XHJcblxyXG5cdFx0XHRbICdtb3VzZXVwJywgJ3BvaW50ZXJ1cCcsICd0b3VjaGVuZCcsICdkcmFnZW5kJyBdLmZvckVhY2goIChldnRfbmFtZSkgPT4ge1xyXG5cdFx0XHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIGV2dF9uYW1lLCBmaW5pc2hfZHJhZywgdHJ1ZSApO1xyXG5cdFx0XHR9ICk7XHJcblxyXG5cdFx0XHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciggJ2JsdXInLCBmaW5pc2hfZHJhZywgdHJ1ZSApO1xyXG5cclxuXHRcdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcclxuXHRcdFx0XHQndmlzaWJpbGl0eWNoYW5nZScsXHJcblx0XHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKCBkb2N1bWVudC5oaWRkZW4gKSB7XHJcblx0XHRcdFx0XHRcdGZpbmlzaF9kcmFnKCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHR0cnVlXHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBUYWcgdGhlIGRyYWcgbWlycm9yIChlbGVtZW50IHVuZGVyIGN1cnNvcikgd2l0aCByb2xlOiAncGFsZXR0ZScgfCAnY2FudmFzJy5cclxuXHRcdCAqIFdvcmtzIHdpdGggU29ydGFibGUncyBmYWxsYmFjayBtaXJyb3IgKC5zb3J0YWJsZS1mYWxsYmFjayAvIC5zb3J0YWJsZS1kcmFnKSBhbmQgd2l0aCB5b3VyIGRyYWdDbGFzc1xyXG5cdFx0ICogKC53cGJjX2JmYl9fZHJhZy1hY3RpdmUpLlxyXG5cdFx0ICovXHJcblx0XHRfdGFnX2RyYWdfbWlycm9yKCBldnQgKSB7XHJcblx0XHRcdGNvbnN0IGZyb21QYWxldHRlID0gdGhpcy5idWlsZGVyPy5wYWxldHRlX3Vscz8uaW5jbHVkZXM/LiggZXZ0LmZyb20gKTtcclxuXHRcdFx0Y29uc3Qgcm9sZSAgICAgICAgPSBmcm9tUGFsZXR0ZSA/ICdwYWxldHRlJyA6ICdjYW52YXMnO1xyXG5cdFx0XHQvLyBXYWl0IGEgdGljayBzbyB0aGUgbWlycm9yIGV4aXN0cy4gIC0gVGhlIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKSBtZXRob2QgdGVsbHMgdGhlIGJyb3dzZXIgeW91IHdpc2ggdG8gcGVyZm9ybSBhbiBhbmltYXRpb24uXHJcblx0XHRcdHJlcXVlc3RBbmltYXRpb25GcmFtZSggKCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IG1pcnJvciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoICcuc29ydGFibGUtZmFsbGJhY2ssIC5zb3J0YWJsZS1kcmFnLCAuJyArIHRoaXMub3B0cy5kcmFnQ2xhc3MgKTtcclxuXHRcdFx0XHRpZiAoIG1pcnJvciApIHtcclxuXHRcdFx0XHRcdG1pcnJvci5zZXRBdHRyaWJ1dGUoICdkYXRhLWRyYWctcm9sZScsIHJvbGUgKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gKTtcclxuXHRcdH1cclxuXHJcblx0XHRfdG9nZ2xlX2RuZF9yb290X2ZsYWdzKCBhY3RpdmUsIGZyb21fcGFsZXR0ZSA9IGZhbHNlICkge1xyXG5cclxuXHRcdFx0Ly8gc2V0IHRvIHJvb3QgZWxlbWVudCBvZiBhbiBIVE1MIGRvY3VtZW50LCB3aGljaCBpcyB0aGUgPGh0bWw+LlxyXG5cdFx0XHRjb25zdCByb290ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xyXG5cdFx0XHRpZiAoIGFjdGl2ZSApIHtcclxuXHRcdFx0XHRyb290LmNsYXNzTGlzdC5hZGQoICd3cGJjX2JmYl9fZG5kLWFjdGl2ZScgKTtcclxuXHRcdFx0XHRpZiAoIGZyb21fcGFsZXR0ZSApIHtcclxuXHRcdFx0XHRcdHJvb3QuY2xhc3NMaXN0LmFkZCggJ3dwYmNfYmZiX19kcmFnLWZyb20tcGFsZXR0ZScgKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0cm9vdC5jbGFzc0xpc3QucmVtb3ZlKCAnd3BiY19iZmJfX2RuZC1hY3RpdmUnLCAnd3BiY19iZmJfX2RyYWctZnJvbS1wYWxldHRlJyApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogRW5zdXJlIGEgc2ltcGxlIHZlcnRpY2FsIHNvcnRhYmxlIGxpc3QuXHJcblx0XHQgKlxyXG5cdFx0ICogVGhpcyBjb25maWd1cmF0aW9uIGlzIGludGVuZGVkIGZvciBpbnNwZWN0b3Ivc2lkZWJhciBsaXN0cyBzdWNoIGFzOlxyXG5cdFx0ICogLSBkcm9wZG93biBjaG9pY2VzXHJcblx0XHQgKiAtIHJhZGlvIG9wdGlvbnNcclxuXHRcdCAqIC0gY2hlY2tib3ggb3B0aW9uc1xyXG5cdFx0ICpcclxuXHRcdCAqIEl0IGlzIGludGVudGlvbmFsbHkgbXVjaCBzaW1wbGVyIHRoYW4gdGhlIGNhbnZhcyBEbkQgY29uZmlnIGFuZCBkb2VzIG5vdFxyXG5cdFx0ICogdXNlIHRoZSBjb2x1bW4gZWRnZS1mZW5jZSAvIHN0aWNreS10YXJnZXQgbG9naWMuXHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gY29udGFpbmVyIC0gU29ydGFibGUgbGlzdCBjb250YWluZXIuXHJcblx0XHQgKiBAcGFyYW0ge3sgaGFuZGxlX3NlbGVjdG9yPzogc3RyaW5nLCBkcmFnZ2FibGVfc2VsZWN0b3I/OiBzdHJpbmcsIG9uVXBkYXRlPzogRnVuY3Rpb24gfX0gW2hhbmRsZXJzPXt9XSAtXHJcblx0XHQgKiAgICAgT3B0aW9uYWwgaGFuZGxlcnMvc2VsZWN0b3JzLlxyXG5cdFx0ICogQHJldHVybnMge3ZvaWR9XHJcblx0XHQgKi9cclxuXHRcdGVuc3VyZV9zaW1wbGVfbGlzdCggY29udGFpbmVyLCBoYW5kbGVycyA9IHt9ICkge1xyXG5cdFx0XHRpZiAoICEgY29udGFpbmVyIHx8IHR5cGVvZiBTb3J0YWJsZSA9PT0gJ3VuZGVmaW5lZCcgKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICggU29ydGFibGUuZ2V0Py4oIGNvbnRhaW5lciApICkge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Y29uc3QgY29tbW9uID0ge1xyXG5cdFx0XHRcdGFuaW1hdGlvbiAgICAgICAgOiB0aGlzLm9wdHMuYW5pbWF0aW9uLFxyXG5cdFx0XHRcdGdob3N0Q2xhc3MgICAgICAgOiB0aGlzLm9wdHMuZ2hvc3RDbGFzcyxcclxuXHRcdFx0XHRjaG9zZW5DbGFzcyAgICAgIDogdGhpcy5vcHRzLmNob3NlbkNsYXNzLFxyXG5cdFx0XHRcdGRyYWdDbGFzcyAgICAgICAgOiB0aGlzLm9wdHMuZHJhZ0NsYXNzLFxyXG5cdFx0XHRcdGZvcmNlRmFsbGJhY2sgICAgOiB0cnVlLFxyXG5cdFx0XHRcdC8vIEZvciBhIHNpbmdsZSBzY3JvbGxhYmxlIHNpZGViYXIgbGlzdCB0aGlzIGlzIHVzdWFsbHkgbW9yZSBzdGFibGUuXHJcblx0XHRcdFx0ZmFsbGJhY2tPbkJvZHkgICA6IGZhbHNlLFxyXG5cdFx0XHRcdGZhbGxiYWNrVG9sZXJhbmNlOiA4LFxyXG5cdFx0XHRcdHJlbW92ZUNsb25lT25IaWRlOiB0cnVlLFxyXG5cdFx0XHRcdG9uU3RhcnQgICAgICAgICAgOiAoKSA9PiB7XHJcblx0XHRcdFx0XHR0aGlzLmJ1aWxkZXI/Ll9hZGRfZHJhZ2dpbmdfY2xhc3M/LigpO1xyXG5cdFx0XHRcdFx0dGhpcy5fdG9nZ2xlX2RuZF9yb290X2ZsYWdzKCB0cnVlLCBmYWxzZSApO1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0b25FbmQgICAgICAgICAgICA6ICgpID0+IHtcclxuXHRcdFx0XHRcdHNldFRpbWVvdXQoICgpID0+IHtcclxuXHRcdFx0XHRcdFx0dGhpcy5idWlsZGVyPy5fcmVtb3ZlX2RyYWdnaW5nX2NsYXNzPy4oKTtcclxuXHRcdFx0XHRcdH0sIDUwICk7XHJcblx0XHRcdFx0XHR0aGlzLl90b2dnbGVfZG5kX3Jvb3RfZmxhZ3MoIGZhbHNlICk7XHJcblx0XHRcdFx0XHR0aGlzLl9kcmFnU3RhdGUgPSBudWxsO1xyXG5cdFx0XHRcdFx0dGhpcy5fY2xlYW51cF9kcmFnX3VpKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9O1xyXG5cclxuXHRcdFx0U29ydGFibGUuY3JlYXRlKFxyXG5cdFx0XHRcdGNvbnRhaW5lcixcclxuXHRcdFx0XHR7XHJcblx0XHRcdFx0XHQuLi5jb21tb24sXHJcblx0XHRcdFx0XHRncm91cCAgICAgICAgICAgICAgICAgIDogeyBuYW1lOiB0aGlzLm9wdHMuZ3JvdXBOYW1lLCBwdWxsOiBmYWxzZSwgcHV0OiBmYWxzZSB9LFxyXG5cdFx0XHRcdFx0c29ydCAgICAgICAgICAgICAgICAgICA6IHRydWUsXHJcblx0XHRcdFx0XHRkaXJlY3Rpb24gICAgICAgICAgICAgIDogJ3ZlcnRpY2FsJyxcclxuXHRcdFx0XHRcdGhhbmRsZSAgICAgICAgICAgICAgICAgOiBoYW5kbGVycy5oYW5kbGVfc2VsZWN0b3IgfHwgJy53cGJjX2JmYl9fZHJhZy1oYW5kbGUnLFxyXG5cdFx0XHRcdFx0ZHJhZ2dhYmxlICAgICAgICAgICAgICA6IGhhbmRsZXJzLmRyYWdnYWJsZV9zZWxlY3RvciB8fCAnLndwYmNfYmZiX19zb3J0YWJsZS1yb3cnLFxyXG5cdFx0XHRcdFx0ZmFsbGJhY2tDbGFzcyAgICAgICAgICA6ICd3cGJjX2JmYl9fc2ltcGxlX2xpc3RfZmFsbGJhY2snLFxyXG5cdFx0XHRcdFx0ZmlsdGVyICAgICAgICAgICAgICAgICA6IFtcclxuXHRcdFx0XHRcdFx0J2lucHV0JyxcclxuXHRcdFx0XHRcdFx0J3RleHRhcmVhJyxcclxuXHRcdFx0XHRcdFx0J3NlbGVjdCcsXHJcblx0XHRcdFx0XHRcdCdidXR0b24nLFxyXG5cdFx0XHRcdFx0XHQnYScsXHJcblx0XHRcdFx0XHRcdCcud3BiY19iZmJfX25vLWRyYWctem9uZScsXHJcblx0XHRcdFx0XHRcdCcud3BiY19iZmJfX25vLWRyYWctem9uZSAqJ1xyXG5cdFx0XHRcdFx0XS5qb2luKCAnLCcgKSxcclxuXHRcdFx0XHRcdHByZXZlbnRPbkZpbHRlciAgICAgICAgOiBmYWxzZSxcclxuXHRcdFx0XHRcdGludmVydFN3YXAgICAgICAgICAgICAgOiBmYWxzZSxcclxuXHRcdFx0XHRcdHN3YXBUaHJlc2hvbGQgICAgICAgICAgOiAwLjMwLFxyXG5cdFx0XHRcdFx0aW52ZXJ0ZWRTd2FwVGhyZXNob2xkICA6IDAuNjAsXHJcblx0XHRcdFx0XHRlbXB0eUluc2VydFRocmVzaG9sZCAgIDogOCxcclxuXHRcdFx0XHRcdGRyYWdvdmVyQnViYmxlICAgICAgICAgOiBmYWxzZSxcclxuXHRcdFx0XHRcdHNjcm9sbCAgICAgICAgICAgICAgICAgOiB0cnVlLFxyXG5cdFx0XHRcdFx0c2Nyb2xsU2Vuc2l0aXZpdHkgICAgICA6IDYwLFxyXG5cdFx0XHRcdFx0c2Nyb2xsU3BlZWQgICAgICAgICAgICA6IDE0LFxyXG5cdFx0XHRcdFx0b25VcGRhdGUgICAgICAgICAgICAgICA6IGhhbmRsZXJzLm9uVXBkYXRlIHx8IGZ1bmN0aW9uICgpIHt9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHQpO1xyXG5cclxuXHRcdFx0dGhpcy5fY29udGFpbmVycy5hZGQoIGNvbnRhaW5lciApO1xyXG5cdFx0fVxyXG5cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEVuc3VyZSBTb3J0YWJsZSBpcyBhdHRhY2hlZCB0byBhIGNvbnRhaW5lciB3aXRoIHJvbGUgJ3BhbGV0dGUnIG9yICdjYW52YXMnLlxyXG5cdFx0ICpcclxuXHRcdCAqICAtLSBIYW5kbGUgc2VsZWN0b3JzOiBoYW5kbGU6ICAnLnNlY3Rpb24tZHJhZy1oYW5kbGUsIC53cGJjX2JmYl9fZHJhZy1oYW5kbGUsIC53cGJjX2JmYl9fZHJhZy1hbnl3aGVyZSxcclxuXHRcdCAqIFtkYXRhLWRyYWdnYWJsZT1cInRydWVcIl0nXHJcblx0XHQgKiAgLS0gRHJhZ2dhYmxlIGdhdGU6IGRyYWdnYWJsZTogJy53cGJjX2JmYl9fZmllbGQ6bm90KFtkYXRhLWRyYWdnYWJsZT1cImZhbHNlXCJdKSwgLndwYmNfYmZiX19zZWN0aW9uJ1xyXG5cdFx0ICogIC0tIEZpbHRlciAob3ZlcmxheS1zYWZlKTogICAgIGlnbm9yZSBldmVyeXRoaW5nIGluIG92ZXJsYXkgZXhjZXB0IHRoZSBoYW5kbGUgLVxyXG5cdFx0ICogJy53cGJjX2JmYl9fb3ZlcmxheS1jb250cm9sc1xyXG5cdFx0ICogKjpub3QoLndwYmNfYmZiX19kcmFnLWhhbmRsZSk6bm90KC5zZWN0aW9uLWRyYWctaGFuZGxlKTpub3QoLndwYmNfaWNuX2RyYWdfaW5kaWNhdG9yKSdcclxuXHRcdCAqICAtLSBOby1kcmFnIHdyYXBwZXI6ICAgICAgICAgICB1c2UgLndwYmNfYmZiX19uby1kcmFnLXpvbmUgaW5zaWRlIHJlbmRlcmVycyBmb3IgaW5wdXRzL3dpZGdldHMuXHJcblx0XHQgKiAgLS0gRm9jdXMgZ3VhcmQgKG9wdGlvbmFsKTogICAgZmxpcCBbZGF0YS1kcmFnZ2FibGVdIG9uIGZvY3VzaW4vZm9jdXNvdXQgdG8gcHJldmVudCBhY2NpZGVudGFsIGRyYWdzIHdoaWxlXHJcblx0XHQgKiB0eXBpbmcuXHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gY29udGFpbmVyIC0gVGhlIGVsZW1lbnQgdG8gZW5oYW5jZSB3aXRoIFNvcnRhYmxlLlxyXG5cdFx0ICogQHBhcmFtIHsncGFsZXR0ZSd8J2NhbnZhcyd9IHJvbGUgLSBCZWhhdmlvciBwcm9maWxlIHRvIGFwcGx5LlxyXG5cdFx0ICogQHBhcmFtIHt7IG9uQWRkPzogRnVuY3Rpb24gfX0gW2hhbmRsZXJzPXt9XSAtIE9wdGlvbmFsIGhhbmRsZXJzLlxyXG5cdFx0ICogQHJldHVybnMge3ZvaWR9XHJcblx0XHQgKi9cclxuXHRcdGVuc3VyZSggY29udGFpbmVyLCByb2xlLCBoYW5kbGVycyA9IHt9ICkge1xyXG5cdFx0XHRpZiAoICEgY29udGFpbmVyIHx8IHR5cGVvZiBTb3J0YWJsZSA9PT0gJ3VuZGVmaW5lZCcgKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICggU29ydGFibGUuZ2V0Py4oIGNvbnRhaW5lciApICkge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Y29uc3Qgc29ydGFibGVfa2luZCA9IGhhbmRsZXJzLnNvcnRhYmxlX2tpbmQgfHwgJyc7XHJcblxyXG5cdFx0XHRpZiAoIHNvcnRhYmxlX2tpbmQgPT09ICdzaW1wbGVfbGlzdCcgKSB7XHJcblx0XHRcdFx0dGhpcy5lbnN1cmVfc2ltcGxlX2xpc3QoIGNvbnRhaW5lciwgaGFuZGxlcnMgKTtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGNvbnN0IGNvbW1vbiA9IHtcclxuXHRcdFx0XHRhbmltYXRpb24gIDogdGhpcy5vcHRzLmFuaW1hdGlvbixcclxuXHRcdFx0XHRnaG9zdENsYXNzIDogdGhpcy5vcHRzLmdob3N0Q2xhc3MsXHJcblx0XHRcdFx0Y2hvc2VuQ2xhc3M6IHRoaXMub3B0cy5jaG9zZW5DbGFzcyxcclxuXHRcdFx0XHRkcmFnQ2xhc3MgIDogdGhpcy5vcHRzLmRyYWdDbGFzcyxcclxuXHRcdFx0XHQvLyA9PSBFbGVtZW50IHVuZGVyIHRoZSBjdXJzb3IgID09IEVuc3VyZSB3ZSBkcmFnIGEgcmVhbCBET00gbWlycm9yIHlvdSBjYW4gc3R5bGUgdmlhIENTUyAoY3Jvc3MtYnJvd3NlcikuXHJcblx0XHRcdFx0Zm9yY2VGYWxsYmFjayAgICA6IHRydWUsXHJcblx0XHRcdFx0ZmFsbGJhY2tPbkJvZHkgICA6IHRydWUsXHJcblx0XHRcdFx0ZmFsbGJhY2tUb2xlcmFuY2U6IDgsXHJcblx0XHRcdFx0cmVtb3ZlQ2xvbmVPbkhpZGU6IHRydWUsXHJcblx0XHRcdFx0Ly8gQWRkIGJvZHkvaHRtbCBmbGFncyBzbyB5b3UgY2FuIHN0eWxlIGRpZmZlcmVudGx5IHdoZW4gZHJhZ2dpbmcgZnJvbSBwYWxldHRlLlxyXG5cdFx0XHRcdG9uU3RhcnQ6IChldnQpID0+IHtcclxuXHRcdFx0XHRcdHRoaXMuYnVpbGRlcj8uX2FkZF9kcmFnZ2luZ19jbGFzcz8uKCk7XHJcblxyXG5cdFx0XHRcdFx0Y29uc3QgZnJvbVBhbGV0dGUgPSB0aGlzLmJ1aWxkZXI/LnBhbGV0dGVfdWxzPy5pbmNsdWRlcz8uKCBldnQuZnJvbSApO1xyXG5cdFx0XHRcdFx0dGhpcy5fdG9nZ2xlX2RuZF9yb290X2ZsYWdzKCB0cnVlLCBmcm9tUGFsZXR0ZSApOyAgLy8gc2V0IHRvIHJvb3QgSFRNTCBkb2N1bWVudDogaHRtbC53cGJjX2JmYl9fZG5kLWFjdGl2ZS53cGJjX2JmYl9fZHJhZy1mcm9tLXBhbGV0dGUgLlxyXG5cclxuXHRcdFx0XHRcdHRoaXMuX3RhZ19kcmFnX21pcnJvciggZXZ0ICk7ICAgICAgICAgICAgICAgICAgICAgIC8vIEFkZCAnZGF0YS1kcmFnLXJvbGUnIGF0dHJpYnV0ZSB0byAgZWxlbWVudCB1bmRlciBjdXJzb3IuXHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRvbkVuZCAgOiAoKSA9PiB7XHJcblx0XHRcdFx0XHRzZXRUaW1lb3V0KCAoKSA9PiB7IHRoaXMuYnVpbGRlci5fcmVtb3ZlX2RyYWdnaW5nX2NsYXNzKCk7IH0sIDUwICk7XHJcblx0XHRcdFx0XHR0aGlzLl90b2dnbGVfZG5kX3Jvb3RfZmxhZ3MoIGZhbHNlICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9O1xyXG5cclxuXHRcdFx0aWYgKCByb2xlID09PSAncGFsZXR0ZScgKSB7XHJcblx0XHRcdFx0U29ydGFibGUuY3JlYXRlKCBjb250YWluZXIsIHtcclxuXHRcdFx0XHRcdC4uLmNvbW1vbixcclxuXHRcdFx0XHRcdGdyb3VwICAgOiB7IG5hbWU6IHRoaXMub3B0cy5ncm91cE5hbWUsIHB1bGw6ICdjbG9uZScsIHB1dDogZmFsc2UgfSxcclxuXHRcdFx0XHRcdHNvcnQgICAgOiBmYWxzZVxyXG5cdFx0XHRcdH0gKTtcclxuXHRcdFx0XHR0aGlzLl9jb250YWluZXJzLmFkZCggY29udGFpbmVyICk7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyByb2xlID09PSAnY2FudmFzJy5cclxuXHRcdFx0U29ydGFibGUuY3JlYXRlKCBjb250YWluZXIsIHtcclxuXHRcdFx0XHQuLi5jb21tb24sXHJcblx0XHRcdFx0Z3JvdXAgICAgOiB7XHJcblx0XHRcdFx0XHRuYW1lOiB0aGlzLm9wdHMuZ3JvdXBOYW1lLFxyXG5cdFx0XHRcdFx0cHVsbDogdHJ1ZSxcclxuXHRcdFx0XHRcdHB1dCA6ICh0bywgZnJvbSwgZHJhZ2dlZEVsKSA9PiB7XHJcblx0XHRcdFx0XHRcdHJldHVybiBkcmFnZ2VkRWwuY2xhc3NMaXN0LmNvbnRhaW5zKCAnd3BiY19iZmJfX2ZpZWxkJyApIHx8XHJcblx0XHRcdFx0XHRcdFx0ICAgZHJhZ2dlZEVsLmNsYXNzTGlzdC5jb250YWlucyggJ3dwYmNfYmZiX19zZWN0aW9uJyApO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0Ly8gLS0tLS0tLS0tLSBEbkQgSGFuZGxlcnMgLS0tLS0tLS0tLS0tLS0gICAgICAgICAgICAgICAgLy8gR3JhYiBhbnl3aGVyZSBvbiBmaWVsZHMgdGhhdCBvcHQtaW4gd2l0aCB0aGUgY2xhc3Mgb3IgYXR0cmlidXRlLiAgLSBTZWN0aW9ucyBzdGlsbCByZXF1aXJlIHRoZWlyIGRlZGljYXRlZCBoYW5kbGUuXHJcblx0XHRcdFx0aGFuZGxlICAgOiAnLnNlY3Rpb24tZHJhZy1oYW5kbGUsIC53cGJjX2JmYl9fZHJhZy1oYW5kbGUsIC53cGJjX2JmYl9fZHJhZy1hbnl3aGVyZSwgW2RhdGEtZHJhZ2dhYmxlPVwidHJ1ZVwiXScsXHJcblx0XHRcdFx0ZHJhZ2dhYmxlOiAnLndwYmNfYmZiX19maWVsZDpub3QoW2RhdGEtZHJhZ2dhYmxlPVwiZmFsc2VcIl0pLCAud3BiY19iZmJfX3NlY3Rpb24nLCAgICAgICAgICAgICAgICAgICAgICAgIC8vIFBlci1maWVsZCBvcHQtb3V0IHdpdGggW2RhdGEtZHJhZ2dhYmxlPVwiZmFsc2VcIl0gKGUuZy4sIHdoaWxlIGVkaXRpbmcpLlxyXG5cdFx0XHRcdC8vIC0tLS0tLS0tLS0gRmlsdGVycyAtIE5vIERuRCAtLS0tLS0tLS0tICAgICAgICAgICAgICAgIC8vIERlY2xhcmF0aXZlIOKAnG5vLWRyYWcgem9uZXPigJ06IGFueXRoaW5nIGluc2lkZSB0aGVzZSB3cmFwcGVycyB3b27igJl0IHN0YXJ0IGEgZHJhZy5cclxuXHRcdFx0XHRmaWx0ZXI6IFtcclxuXHRcdFx0XHRcdCcud3BiY19iZmJfX25vLWRyYWctem9uZScsXHJcblx0XHRcdFx0XHQnLndwYmNfYmZiX19uby1kcmFnLXpvbmUgKicsXHJcblx0XHRcdFx0XHQnLndwYmNfYmZiX19jb2x1bW4tcmVzaXplcicsICAvLyBJZ25vcmUgdGhlIHJlc2l6ZXIgcmFpbHMgZHVyaW5nIERuRCAocHJldmVudHMgZWRnZSDigJxzbmFw4oCdKS5cclxuXHRcdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEluIHRoZSBvdmVybGF5IHRvb2xiYXIsIGJsb2NrIGV2ZXJ5dGhpbmcgRVhDRVBUIHRoZSBkcmFnIGhhbmRsZSAoYW5kIGl0cyBpY29uKS5cclxuXHRcdFx0XHRcdCcud3BiY19iZmJfX292ZXJsYXktY29udHJvbHMgKjpub3QoLndwYmNfYmZiX19kcmFnLWhhbmRsZSk6bm90KC5zZWN0aW9uLWRyYWctaGFuZGxlKTpub3QoLndwYmNfaWNuX2RyYWdfaW5kaWNhdG9yKSdcclxuXHRcdFx0XHRdLmpvaW4oICcsJyApLFxyXG5cdFx0XHRcdHByZXZlbnRPbkZpbHRlciAgOiBmYWxzZSxcclxuXHRcdFx0XHRcdC8vIC0tLS0tLS0tLS0gYW50aS1qaXR0ZXIgdHVuaW5nIC0tLS0tLS0tLS1cclxuXHRcdFx0XHRkaXJlY3Rpb24gICAgICAgICAgICA6ICd2ZXJ0aWNhbCcsICAgICAgICAgICAvLyBjb2x1bW5zIGFyZSB2ZXJ0aWNhbCBsaXN0cy5cclxuXHRcdFx0XHRpbnZlcnRTd2FwICAgICAgICAgICA6IHRydWUsICAgICAgICAgICAgICAgICAvLyB1c2Ugc3dhcCBvbiBpbnZlcnRlZCBvdmVybGFwLlxyXG5cdFx0XHRcdHN3YXBUaHJlc2hvbGQgICAgICAgIDogMC42NSwgICAgICAgICAgICAgICAgIC8vIGJlIGxlc3MgZWFnZXIgdG8gc3dhcC5cclxuXHRcdFx0XHRpbnZlcnRlZFN3YXBUaHJlc2hvbGQ6IDAuODUsICAgICAgICAgICAgICAgICAvLyByZXF1aXJlIGRlZXBlciBvdmVybGFwIHdoZW4gaW52ZXJ0ZWQuXHJcblx0XHRcdFx0ZW1wdHlJbnNlcnRUaHJlc2hvbGQgOiAyNCwgICAgICAgICAgICAgICAgICAgLy8gZG9u4oCZdCBqdW1wIGludG8gZW1wdHkgY29udGFpbmVycyB0b28gZWFybHkuXHJcblx0XHRcdFx0ZHJhZ292ZXJCdWJibGUgICAgICAgOiBmYWxzZSwgICAgICAgICAgICAgICAgLy8ga2VlcCBkcmFnb3ZlciBsb2NhbC5cclxuXHRcdFx0XHRzY3JvbGwgICAgICAgICAgICAgICA6IHRydWUsXHJcblx0XHRcdFx0c2Nyb2xsU2Vuc2l0aXZpdHkgICAgOiA0MCxcclxuXHRcdFx0XHRzY3JvbGxTcGVlZCAgICAgICAgICA6IDEwLFxyXG5cdFx0XHRcdC8qKlxyXG5cdFx0XHRcdCAqIEVudGVyL2xlYXZlIGh5c3RlcmVzaXMgZm9yIGNyb3NzLWNvbHVtbiBtb3Zlcy4gICAgT25seSBhbGxvdyBkcm9wcGluZyBpbnRvIGB0b2Agd2hlbiB0aGUgcG9pbnRlciBpc1xyXG5cdFx0XHRcdCAqIHdlbGwgaW5zaWRlIGl0LlxyXG5cdFx0XHRcdCAqL1xyXG5cdFx0XHRcdG9uTW92ZTogKGV2dCwgb3JpZ2luYWxFdmVudCkgPT4ge1xyXG5cclxuXHRcdFx0XHRcdGNvbnN0IHsgdG8sIGZyb20gfSA9IGV2dDtcclxuXHRcdFx0XHRcdGlmICggISB0byB8fCAhIGZyb20gKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGNvbnN0IGluX3ByZXZpZXdfY2FudmFzID0gISEgdG8uY2xvc2VzdCggJy53cGJjX2JmYl9fcGFuZWwtLXByZXZpZXcnICk7XHJcblx0XHRcdFx0XHRpZiAoICEgaW5fcHJldmlld19jYW52YXMgKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdC8vIE9ubHkgZ2F0ZSBjb2x1bW5zIChub3QgcGFnZSBjb250YWluZXJzKSwgYW5kIG9ubHkgZm9yIGNyb3NzLWNvbHVtbiBtb3ZlcyBpbiB0aGUgc2FtZSByb3dcclxuXHRcdFx0XHRcdGNvbnN0IGlzQ29sdW1uID0gdG8uY2xhc3NMaXN0Py5jb250YWlucyggJ3dwYmNfYmZiX19jb2x1bW4nICk7XHJcblx0XHRcdFx0XHRpZiAoICFpc0NvbHVtbiApIHJldHVybiB0cnVlO1xyXG5cclxuXHRcdFx0XHRcdGNvbnN0IGZyb21Sb3cgPSBmcm9tLmNsb3Nlc3QoICcud3BiY19iZmJfX3JvdycgKTtcclxuXHRcdFx0XHRcdGNvbnN0IHRvUm93ICAgPSB0by5jbG9zZXN0KCAnLndwYmNfYmZiX19yb3cnICk7XHJcblx0XHRcdFx0XHRpZiAoIGZyb21Sb3cgJiYgdG9Sb3cgJiYgZnJvbVJvdyAhPT0gdG9Sb3cgKSByZXR1cm4gdHJ1ZTtcclxuXHJcblx0XHRcdFx0XHRjb25zdCByZWN0ID0gdG8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcblx0XHRcdFx0XHRjb25zdCBldnRYID0gKG9yaWdpbmFsRXZlbnQudG91Y2hlcz8uWzBdPy5jbGllbnRYKSA/PyBvcmlnaW5hbEV2ZW50LmNsaWVudFg7XHJcblx0XHRcdFx0XHRjb25zdCBldnRZID0gKG9yaWdpbmFsRXZlbnQudG91Y2hlcz8uWzBdPy5jbGllbnRZKSA/PyBvcmlnaW5hbEV2ZW50LmNsaWVudFk7XHJcblxyXG5cdFx0XHRcdFx0Ly8gLS0tIEVkZ2UgZmVuY2UgKGxpa2UgeW91IGhhZCksIGJ1dCBjbGFtcGVkIGZvciB0aW55IGNvbHVtbnNcclxuXHRcdFx0XHRcdGNvbnN0IHBhZGRpbmdYID0gQ29yZS5XUEJDX0JGQl9TYW5pdGl6ZS5jbGFtcCggcmVjdC53aWR0aCAqIDAuMjAsIDEyLCAzNiApO1xyXG5cdFx0XHRcdFx0Y29uc3QgcGFkZGluZ1kgPSBDb3JlLldQQkNfQkZCX1Nhbml0aXplLmNsYW1wKCByZWN0LmhlaWdodCAqIDAuMTAsIDYsIDE2ICk7XHJcblxyXG5cdFx0XHRcdFx0Ly8gTG9vc2VyIFkgaWYgdGhlIGNvbHVtbiBpcyB2aXN1YWxseSB0aW55L2VtcHR5XHJcblx0XHRcdFx0XHRjb25zdCBpc1Zpc3VhbGx5RW1wdHkgPSB0by5jaGlsZEVsZW1lbnRDb3VudCA9PT0gMCB8fCByZWN0LmhlaWdodCA8IDY0O1xyXG5cdFx0XHRcdFx0Y29uc3QgaW5uZXJUb3AgICAgICAgID0gcmVjdC50b3AgKyAoaXNWaXN1YWxseUVtcHR5ID8gNCA6IHBhZGRpbmdZKTtcclxuXHRcdFx0XHRcdGNvbnN0IGlubmVyQm90dG9tICAgICA9IHJlY3QuYm90dG9tIC0gKGlzVmlzdWFsbHlFbXB0eSA/IDQgOiBwYWRkaW5nWSk7XHJcblx0XHRcdFx0XHRjb25zdCBpbm5lckxlZnQgICAgICAgPSByZWN0LmxlZnQgKyBwYWRkaW5nWDtcclxuXHRcdFx0XHRcdGNvbnN0IGlubmVyUmlnaHQgICAgICA9IHJlY3QucmlnaHQgLSBwYWRkaW5nWDtcclxuXHJcblx0XHRcdFx0XHRjb25zdCBpbnNpZGVYID0gZXZ0WCA+IGlubmVyTGVmdCAmJiBldnRYIDwgaW5uZXJSaWdodDtcclxuXHRcdFx0XHRcdGNvbnN0IGluc2lkZVkgPSBldnRZID4gaW5uZXJUb3AgJiYgZXZ0WSA8IGlubmVyQm90dG9tO1xyXG5cdFx0XHRcdFx0aWYgKCAhKGluc2lkZVggJiYgaW5zaWRlWSkgKSByZXR1cm4gZmFsc2U7ICAgLy8gc3RheSBpbiBjdXJyZW50IGNvbHVtbiB1bnRpbCB3ZWxsIGluc2lkZSBuZXcgb25lXHJcblxyXG5cdFx0XHRcdFx0Ly8gLS0tIFN0aWNreSB0YXJnZXQgY29tbWl0IGRpc3RhbmNlOiBvbmx5IHN3aXRjaCBpZiB3ZeKAmXJlIGNsZWFybHkgaW5zaWRlIHRoZSBuZXcgY29sdW1uXHJcblx0XHRcdFx0XHRjb25zdCBkcyA9IHRoaXMuX2RyYWdTdGF0ZTtcclxuXHRcdFx0XHRcdGlmICggZHMgKSB7XHJcblx0XHRcdFx0XHRcdGlmICggZHMuc3RpY2t5VG8gJiYgZHMuc3RpY2t5VG8gIT09IHRvICkge1xyXG5cdFx0XHRcdFx0XHRcdC8vIHJlcXVpcmUgYSBkZWVwZXIgcGVuZXRyYXRpb24gdG8gc3dpdGNoIGNvbHVtbnNcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBjb21taXRYID0gQ29yZS5XUEJDX0JGQl9TYW5pdGl6ZS5jbGFtcCggcmVjdC53aWR0aCAqIDAuMjUsIDE4LCA0MCApOyAgIC8vIDI1JSBvciAxOOKAkzQwcHhcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBjb21taXRZID0gQ29yZS5XUEJDX0JGQl9TYW5pdGl6ZS5jbGFtcCggcmVjdC5oZWlnaHQgKiAwLjE1LCAxMCwgMjggKTsgIC8vIDE1JSBvciAxMOKAkzI4cHhcclxuXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgZGVlcEluc2lkZSA9XHJcblx0XHRcdFx0XHRcdFx0XHRcdCAgKGV2dFggPiByZWN0LmxlZnQgKyBjb21taXRYICYmIGV2dFggPCByZWN0LnJpZ2h0IC0gY29tbWl0WCkgJiZcclxuXHRcdFx0XHRcdFx0XHRcdFx0ICAoZXZ0WSA+IHJlY3QudG9wICsgY29tbWl0WSAmJiBldnRZIDwgcmVjdC5ib3R0b20gLSBjb21taXRZKTtcclxuXHJcblx0XHRcdFx0XHRcdFx0aWYgKCAhZGVlcEluc2lkZSApIHJldHVybiBmYWxzZTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHQvLyBXZSBhY2NlcHQgdGhlIG5ldyB0YXJnZXQgbm93LlxyXG5cdFx0XHRcdFx0XHRkcy5zdGlja3lUbyAgICAgPSB0bztcclxuXHRcdFx0XHRcdFx0ZHMubGFzdFN3aXRjaFRzID0gcGVyZm9ybWFuY2Uubm93KCk7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRvblN0YXJ0OiAoZXZ0KSA9PiB7XHJcblx0XHRcdFx0XHR0aGlzLmJ1aWxkZXI/Ll9hZGRfZHJhZ2dpbmdfY2xhc3M/LigpO1xyXG5cdFx0XHRcdFx0Ly8gTWF0Y2ggdGhlIGZsYWdzIHdlIHNldCBpbiBjb21tb24gc28gQ1NTIHN0YXlzIGNvbnNpc3RlbnQgb24gY2FudmFzIGRyYWdzIHRvby5cclxuXHRcdFx0XHRcdGNvbnN0IGZyb21QYWxldHRlID0gdGhpcy5idWlsZGVyPy5wYWxldHRlX3Vscz8uaW5jbHVkZXM/LiggZXZ0LmZyb20gKTtcclxuXHRcdFx0XHRcdHRoaXMuX3RvZ2dsZV9kbmRfcm9vdF9mbGFncyggdHJ1ZSwgZnJvbVBhbGV0dGUgKTsgICAgICAgICAgLy8gc2V0IHRvIHJvb3QgSFRNTCBkb2N1bWVudDogaHRtbC53cGJjX2JmYl9fZG5kLWFjdGl2ZS53cGJjX2JmYl9fZHJhZy1mcm9tLXBhbGV0dGUgLlxyXG5cdFx0XHRcdFx0dGhpcy5fdGFnX2RyYWdfbWlycm9yKCBldnQgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRhZyB0aGUgbWlycm9yIHVuZGVyIGN1cnNvci5cclxuXHRcdFx0XHRcdHRoaXMuX2RyYWdTdGF0ZSA9IHsgc3RpY2t5VG86IG51bGwsIGxhc3RTd2l0Y2hUczogMCB9OyAgICAvLyBwZXItZHJhZyBzdGF0ZS5cclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdG9uRW5kICA6ICgpID0+IHtcclxuXHRcdFx0XHRcdHNldFRpbWVvdXQoICgpID0+IHsgdGhpcy5idWlsZGVyLl9yZW1vdmVfZHJhZ2dpbmdfY2xhc3MoKTsgfSwgNTAgKTtcclxuXHRcdFx0XHRcdHRoaXMuX3RvZ2dsZV9kbmRfcm9vdF9mbGFncyggZmFsc2UgKTsgICAgICAgICAgICAgICAgICAgIC8vIHNldCB0byByb290IEhUTUwgZG9jdW1lbnQgd2l0aG91dCB0aGVzZSBjbGFzc2VzOiBodG1sLndwYmNfYmZiX19kbmQtYWN0aXZlLndwYmNfYmZiX19kcmFnLWZyb20tcGFsZXR0ZSAuXHJcblx0XHRcdFx0XHR0aGlzLl9kcmFnU3RhdGUgPSBudWxsO1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdFx0XHRcdC8vIG9uQWRkOiBoYW5kbGVycy5vbkFkZCB8fCB0aGlzLmJ1aWxkZXIuaGFuZGxlX29uX2FkZC5iaW5kKCB0aGlzLmJ1aWxkZXIgKVxyXG5cdFx0XHRcdG9uQWRkOiAoZXZ0KSA9PiB7XHJcblx0XHRcdFx0XHRpZiAoIHRoaXMuX29uX2FkZF9zZWN0aW9uKCBldnQgKSApIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0Ly8gRmFsbGJhY2s6IG9yaWdpbmFsIGhhbmRsZXIgZm9yIG5vcm1hbCBmaWVsZHMuXHJcblx0XHRcdFx0XHQoaGFuZGxlcnMub25BZGQgfHwgdGhpcy5idWlsZGVyLmhhbmRsZV9vbl9hZGQuYmluZCggdGhpcy5idWlsZGVyICkpKCBldnQgKTtcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdG9uVXBkYXRlOiAoKSA9PiB7XHJcblx0XHRcdFx0XHR0aGlzLmJ1aWxkZXIuYnVzPy5lbWl0Py4oIENvcmUuV1BCQ19CRkJfRXZlbnRzLlNUUlVDVFVSRV9DSEFOR0UsIHsgcmVhc29uOiAnc29ydC11cGRhdGUnIH0gKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gKTtcclxuXHJcblx0XHRcdHRoaXMuX2NvbnRhaW5lcnMuYWRkKCBjb250YWluZXIgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEhhbmRsZSBhZGRpbmcvbW92aW5nIHNlY3Rpb25zIHZpYSBTb3J0YWJsZSBvbkFkZC5cclxuXHRcdCAqIFJldHVybnMgdHJ1ZSBpZiBoYW5kbGVkIChpLmUuLCBpdCB3YXMgYSBzZWN0aW9uKSwgZmFsc2UgdG8gbGV0IHRoZSBkZWZhdWx0IGZpZWxkIGhhbmRsZXIgcnVuLlxyXG5cdFx0ICpcclxuXHRcdCAqIC0gUGFsZXR0ZSAtPiBjYW52YXM6IHJlbW92ZSB0aGUgcGxhY2Vob2xkZXIgY2xvbmUgYW5kIGJ1aWxkIGEgZnJlc2ggc2VjdGlvbiB2aWEgYWRkX3NlY3Rpb24oKVxyXG5cdFx0ICogLSBDYW52YXMgLT4gY2FudmFzOiBrZWVwIHRoZSBtb3ZlZCBET00gKGFuZCBpdHMgY2hpbGRyZW4pLCBqdXN0IHJlLXdpcmUgb3ZlcmxheXMvc29ydGFibGVzL21ldGFkYXRhXHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHtTb3J0YWJsZS5Tb3J0YWJsZUV2ZW50fSBldnRcclxuXHRcdCAqIEByZXR1cm5zIHtib29sZWFufVxyXG5cdFx0ICovXHJcblx0XHRfb25fYWRkX3NlY3Rpb24oZXZ0KSB7XHJcblxyXG5cdFx0XHRjb25zdCBpdGVtID0gZXZ0Lml0ZW07XHJcblx0XHRcdGlmICggISBpdGVtICkge1xyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gSWRlbnRpZnkgc2VjdGlvbnMgYm90aCBmcm9tIHBhbGV0dGUgaXRlbXMgKGxpIGNsb25lcykgYW5kIHJlYWwgY2FudmFzIG5vZGVzLlxyXG5cdFx0XHRjb25zdCBkYXRhICAgICAgPSBDb3JlLldQQkNfRm9ybV9CdWlsZGVyX0hlbHBlci5nZXRfYWxsX2RhdGFfYXR0cmlidXRlcyggaXRlbSApO1xyXG5cdFx0XHRjb25zdCBpc1NlY3Rpb24gPSBpdGVtLmNsYXNzTGlzdC5jb250YWlucyggJ3dwYmNfYmZiX19zZWN0aW9uJyApIHx8IChkYXRhPy50eXBlIHx8IGl0ZW0uZGF0YXNldD8udHlwZSkgPT09ICdzZWN0aW9uJztcclxuXHJcblx0XHRcdGlmICggISBpc1NlY3Rpb24gKSB7XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRjb25zdCBmcm9tUGFsZXR0ZSA9IHRoaXMuYnVpbGRlcj8ucGFsZXR0ZV91bHM/LmluY2x1ZGVzPy4oIGV2dC5mcm9tICkgPT09IHRydWU7XHJcblxyXG5cdFx0XHRpZiAoICEgZnJvbVBhbGV0dGUgKSB7XHJcblx0XHRcdFx0Ly8gQ2FudmFzIC0+IGNhbnZhcyBtb3ZlOiBETyBOT1QgcmVidWlsZC9yZW1vdmU7IHByZXNlcnZlIGNoaWxkcmVuLlxyXG5cdFx0XHRcdHRoaXMuYnVpbGRlci5hZGRfb3ZlcmxheV90b29sYmFyPy4oIGl0ZW0gKTsgICAgICAgICAgICAgICAgICAgICAgIC8vIGVuc3VyZSBvdmVybGF5IGV4aXN0c1xyXG5cdFx0XHRcdHRoaXMuYnVpbGRlci5wYWdlc19zZWN0aW9ucz8uaW5pdF9hbGxfbmVzdGVkX3NvcnRhYmxlcz8uKCBpdGVtICk7IC8vIGVuc3VyZSBpbm5lciBzb3J0YWJsZXNcclxuXHJcblx0XHRcdFx0Ly8gRW5zdXJlIG1ldGFkYXRhIHByZXNlbnQvdXBkYXRlZFxyXG5cdFx0XHRcdGl0ZW0uZGF0YXNldC50eXBlICAgID0gJ3NlY3Rpb24nO1xyXG5cdFx0XHRcdGNvbnN0IGNvbHMgICAgICAgICAgID0gaXRlbS5xdWVyeVNlbGVjdG9yQWxsKCAnOnNjb3BlID4gLndwYmNfYmZiX19yb3cgPiAud3BiY19iZmJfX2NvbHVtbicgKS5sZW5ndGggfHwgMTtcclxuXHRcdFx0XHRpdGVtLmRhdGFzZXQuY29sdW1ucyA9IFN0cmluZyggY29scyApO1xyXG5cclxuXHRcdFx0XHQvLyBTZWxlY3QgJiBub3RpZnkgc3Vic2NyaWJlcnMgKGxheW91dC9taW4gZ3VhcmRzLCBldGMuKVxyXG5cdFx0XHRcdHRoaXMuYnVpbGRlci5zZWxlY3RfZmllbGQ/LiggaXRlbSApO1xyXG5cdFx0XHRcdHRoaXMuYnVpbGRlci5idXM/LmVtaXQ/LiggQ29yZS5XUEJDX0JGQl9FdmVudHMuU1RSVUNUVVJFX0NIQU5HRSwgeyBlbDogaXRlbSwgcmVhc29uOiAnc2VjdGlvbi1tb3ZlJyB9ICk7XHJcblx0XHRcdFx0dGhpcy5idWlsZGVyLnVzYWdlPy51cGRhdGVfcGFsZXR0ZV91aT8uKCk7XHJcblx0XHRcdFx0cmV0dXJuIHRydWU7IC8vIGhhbmRsZWQuXHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIFBhbGV0dGUgLT4gY2FudmFzOiBidWlsZCBhIGJyYW5kLW5ldyBzZWN0aW9uIHVzaW5nIHRoZSBzYW1lIHBhdGggYXMgdGhlIGRyb3Bkb3duL21lbnVcclxuXHRcdFx0Y29uc3QgdG8gICA9IGV2dC50bz8uY2xvc2VzdD8uKCAnLndwYmNfYmZiX19jb2x1bW4sIC53cGJjX2JmYl9fZm9ybV9wcmV2aWV3X3NlY3Rpb25fY29udGFpbmVyJyApIHx8IGV2dC50bztcclxuXHRcdFx0Y29uc3QgY29scyA9IHBhcnNlSW50KCBkYXRhPy5jb2x1bW5zIHx8IGl0ZW0uZGF0YXNldC5jb2x1bW5zIHx8IDEsIDEwICkgfHwgMTtcclxuXHJcblx0XHRcdC8vIFJlbW92ZSB0aGUgcGFsZXR0ZSBjbG9uZSBwbGFjZWhvbGRlci5cclxuXHRcdFx0aXRlbS5wYXJlbnROb2RlICYmIGl0ZW0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggaXRlbSApO1xyXG5cclxuXHRcdFx0Ly8gQ3JlYXRlIHRoZSByZWFsIHNlY3Rpb24uXHJcblx0XHRcdHRoaXMuYnVpbGRlci5wYWdlc19zZWN0aW9ucy5hZGRfc2VjdGlvbiggdG8sIGNvbHMgKTtcclxuXHJcblx0XHRcdC8vIEluc2VydCBhdCB0aGUgcHJlY2lzZSBkcm9wIGluZGV4LlxyXG5cdFx0XHRjb25zdCBzZWN0aW9uID0gdG8ubGFzdEVsZW1lbnRDaGlsZDsgLy8gYWRkX3NlY3Rpb24gYXBwZW5kcyB0byBlbmQuXHJcblx0XHRcdGlmICggZXZ0Lm5ld0luZGV4ICE9IG51bGwgJiYgZXZ0Lm5ld0luZGV4IDwgdG8uY2hpbGRyZW4ubGVuZ3RoIC0gMSApIHtcclxuXHRcdFx0XHRjb25zdCByZWYgPSB0by5jaGlsZHJlbltldnQubmV3SW5kZXhdIHx8IG51bGw7XHJcblx0XHRcdFx0dG8uaW5zZXJ0QmVmb3JlKCBzZWN0aW9uLCByZWYgKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gRmluYWxpemU6IG92ZXJsYXksIHNlbGVjdGlvbiwgZXZlbnRzLCB1c2FnZSByZWZyZXNoLlxyXG5cdFx0XHR0aGlzLmJ1aWxkZXIuYWRkX292ZXJsYXlfdG9vbGJhcj8uKCBzZWN0aW9uICk7XHJcblx0XHRcdHRoaXMuYnVpbGRlci5zZWxlY3RfZmllbGQ/Liggc2VjdGlvbiApO1xyXG5cdFx0XHR0aGlzLmJ1aWxkZXIuYnVzPy5lbWl0Py4oIENvcmUuV1BCQ19CRkJfRXZlbnRzLkZJRUxEX0FERCwge1xyXG5cdFx0XHRcdGVsIDogc2VjdGlvbixcclxuXHRcdFx0XHRpZCA6IHNlY3Rpb24uZGF0YXNldC5pZCxcclxuXHRcdFx0XHR1aWQ6IHNlY3Rpb24uZGF0YXNldC51aWRcclxuXHRcdFx0fSApO1xyXG5cdFx0XHR0aGlzLmJ1aWxkZXIudXNhZ2U/LnVwZGF0ZV9wYWxldHRlX3VpPy4oKTtcclxuXHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogRGVzdHJveSBhbGwgU29ydGFibGUgaW5zdGFuY2VzIGNyZWF0ZWQgYnkgdGhpcyBtYW5hZ2VyLlxyXG5cdFx0ICpcclxuXHRcdCAqIEByZXR1cm5zIHt2b2lkfVxyXG5cdFx0ICovXHJcblx0XHRkZXN0cm95QWxsKCkge1xyXG5cdFx0XHR0aGlzLl9jb250YWluZXJzLmZvckVhY2goICggZWwgKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgaW5zdCA9IFNvcnRhYmxlLmdldD8uKCBlbCApO1xyXG5cdFx0XHRcdGlmICggaW5zdCApIHtcclxuXHRcdFx0XHRcdGluc3QuZGVzdHJveSgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSApO1xyXG5cdFx0XHR0aGlzLl9jb250YWluZXJzLmNsZWFyKCk7XHJcblx0XHR9XHJcblx0fTtcclxuXHJcblx0LyoqXHJcblx0ICogU21hbGwgRE9NIGNvbnRyYWN0IGFuZCByZW5kZXJlciBoZWxwZXJcclxuXHQgKlxyXG5cdCAqIEB0eXBlIHtSZWFkb25seTx7XHJcblx0ICogICAgICAgICAgICAgICAgICBTRUxFQ1RPUlM6IHtwYWdlUGFuZWw6IHN0cmluZywgZmllbGQ6IHN0cmluZywgdmFsaWRGaWVsZDogc3RyaW5nLCBzZWN0aW9uOiBzdHJpbmcsIGNvbHVtbjpcclxuXHQgKiAgICAgc3RyaW5nLCByb3c6IHN0cmluZywgb3ZlcmxheTogc3RyaW5nfSwgQ0xBU1NFUzoge3NlbGVjdGVkOiBzdHJpbmd9LCBBVFRSOiB7aWQ6IHN0cmluZywgbmFtZTogc3RyaW5nLCBodG1sSWQ6XHJcblx0ICogICAgIHN0cmluZywgdXNhZ2VLZXk6IHN0cmluZywgdWlkOiBzdHJpbmd9fVxyXG5cdCAqICAgICAgICA+fVxyXG5cdCAqL1xyXG5cdENvcmUuV1BCQ19CRkJfRE9NID0gT2JqZWN0LmZyZWV6ZSgge1xyXG5cdFx0U0VMRUNUT1JTOiB7XHJcblx0XHRcdHBhZ2VQYW5lbCA6ICcud3BiY19iZmJfX3BhbmVsLS1wcmV2aWV3JyxcclxuXHRcdFx0ZmllbGQgICAgIDogJy53cGJjX2JmYl9fZmllbGQnLFxyXG5cdFx0XHR2YWxpZEZpZWxkOiAnLndwYmNfYmZiX19maWVsZDpub3QoLmlzLWludmFsaWQpJyxcclxuXHRcdFx0c2VjdGlvbiAgIDogJy53cGJjX2JmYl9fc2VjdGlvbicsXHJcblx0XHRcdGNvbHVtbiAgICA6ICcud3BiY19iZmJfX2NvbHVtbicsXHJcblx0XHRcdHJvdyAgICAgICA6ICcud3BiY19iZmJfX3JvdycsXHJcblx0XHRcdG92ZXJsYXkgICA6ICcud3BiY19iZmJfX292ZXJsYXktY29udHJvbHMnXHJcblx0XHR9LFxyXG5cdFx0Q0xBU1NFUyAgOiB7XHJcblx0XHRcdHNlbGVjdGVkOiAnaXMtc2VsZWN0ZWQnXHJcblx0XHR9LFxyXG5cdFx0QVRUUiAgICAgOiB7XHJcblx0XHRcdGlkICAgICAgOiAnZGF0YS1pZCcsXHJcblx0XHRcdG5hbWUgICAgOiAnZGF0YS1uYW1lJyxcclxuXHRcdFx0aHRtbElkICA6ICdkYXRhLWh0bWxfaWQnLFxyXG5cdFx0XHR1c2FnZUtleTogJ2RhdGEtdXNhZ2Vfa2V5JyxcclxuXHRcdFx0dWlkICAgICA6ICdkYXRhLXVpZCdcclxuXHRcdH1cclxuXHR9ICk7XHJcblxyXG5cdENvcmUuV1BCQ19Gb3JtX0J1aWxkZXJfSGVscGVyID0gY2xhc3Mge1xyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQ3JlYXRlIGFuIEhUTUwgZWxlbWVudC5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gdGFnIC0gSFRNTCB0YWcgbmFtZS5cclxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBbY2xhc3NfbmFtZT0nJ10gLSBPcHRpb25hbCBDU1MgY2xhc3MgbmFtZS5cclxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBbaW5uZXJfaHRtbD0nJ10gLSBPcHRpb25hbCBpbm5lckhUTUwuXHJcblx0XHQgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9IENyZWF0ZWQgZWxlbWVudC5cclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIGNyZWF0ZV9lbGVtZW50KCB0YWcsIGNsYXNzX25hbWUgPSAnJywgaW5uZXJfaHRtbCA9ICcnICkge1xyXG5cdFx0XHRjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIHRhZyApO1xyXG5cdFx0XHRpZiAoIGNsYXNzX25hbWUgKSB7XHJcblx0XHRcdFx0ZWwuY2xhc3NOYW1lID0gY2xhc3NfbmFtZTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoIGlubmVyX2h0bWwgKSB7XHJcblx0XHRcdFx0ZWwuaW5uZXJIVE1MID0gaW5uZXJfaHRtbDtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gZWw7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBTZXQgbXVsdGlwbGUgYGRhdGEtKmAgYXR0cmlidXRlcyBvbiBhIGdpdmVuIGVsZW1lbnQuXHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWwgLSBUYXJnZXQgZWxlbWVudC5cclxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhX29iaiAtIEtleS12YWx1ZSBwYWlycyBmb3IgZGF0YSBhdHRyaWJ1dGVzLlxyXG5cdFx0ICogQHJldHVybnMge3ZvaWR9XHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBzZXRfZGF0YV9hdHRyaWJ1dGVzKCBlbCwgZGF0YV9vYmogKSB7XHJcblx0XHRcdE9iamVjdC5lbnRyaWVzKCBkYXRhX29iaiApLmZvckVhY2goICggWyBrZXksIHZhbCBdICkgPT4ge1xyXG5cdFx0XHRcdC8vIFByZXZpb3VzbHk6IDIwMjUtMDktMDEgMTc6MDk6XHJcblx0XHRcdFx0Ly8gY29uc3QgdmFsdWUgPSAodHlwZW9mIHZhbCA9PT0gJ29iamVjdCcpID8gSlNPTi5zdHJpbmdpZnkoIHZhbCApIDogdmFsO1xyXG5cdFx0XHRcdC8vTmV3OlxyXG5cdFx0XHRcdGxldCB2YWx1ZTtcclxuXHRcdFx0XHRpZiAoIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnICYmIHZhbCAhPT0gbnVsbCApIHtcclxuXHRcdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHRcdHZhbHVlID0gSlNPTi5zdHJpbmdpZnkoIHZhbCApO1xyXG5cdFx0XHRcdFx0fSBjYXRjaCB7XHJcblx0XHRcdFx0XHRcdHZhbHVlID0gJyc7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdHZhbHVlID0gdmFsO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0ZWwuc2V0QXR0cmlidXRlKCAnZGF0YS0nICsga2V5LCB2YWx1ZSApO1xyXG5cdFx0XHR9ICk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBHZXQgYWxsIGBkYXRhLSpgIGF0dHJpYnV0ZXMgZnJvbSBhbiBlbGVtZW50IGFuZCBwYXJzZSBKU09OIHdoZXJlIHBvc3NpYmxlLlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsIC0gRWxlbWVudCB0byBleHRyYWN0IGRhdGEgZnJvbS5cclxuXHRcdCAqIEByZXR1cm5zIHtPYmplY3R9IFBhcnNlZCBrZXktdmFsdWUgbWFwIG9mIGRhdGEgYXR0cmlidXRlcy5cclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIGdldF9hbGxfZGF0YV9hdHRyaWJ1dGVzKCBlbCApIHtcclxuXHRcdFx0Y29uc3QgZGF0YSA9IHt9O1xyXG5cclxuXHRcdFx0aWYgKCAhIGVsIHx8ICEgZWwuYXR0cmlidXRlcyApIHtcclxuXHRcdFx0XHRyZXR1cm4gZGF0YTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0QXJyYXkuZnJvbSggZWwuYXR0cmlidXRlcyApLmZvckVhY2goXHJcblx0XHRcdFx0KCBhdHRyICkgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKCBhdHRyLm5hbWUuc3RhcnRzV2l0aCggJ2RhdGEtJyApICkge1xyXG5cdFx0XHRcdFx0XHRjb25zdCBrZXkgPSBhdHRyLm5hbWUucmVwbGFjZSggL15kYXRhLS8sICcnICk7XHJcblx0XHRcdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHRcdFx0ZGF0YVtrZXldID0gSlNPTi5wYXJzZSggYXR0ci52YWx1ZSApO1xyXG5cdFx0XHRcdFx0XHR9IGNhdGNoICggZSApIHtcclxuXHRcdFx0XHRcdFx0XHRkYXRhW2tleV0gPSBhdHRyLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHQpO1xyXG5cclxuXHRcdFx0Ly8gT25seSBkZWZhdWx0IHRoZSBsYWJlbCBpZiBpdCdzIHRydWx5IGFic2VudCAodW5kZWZpbmVkL251bGwpLCBub3Qgd2hlbiBpdCdzIGFuIGVtcHR5IHN0cmluZy5cclxuXHRcdFx0Y29uc3QgaGFzRXhwbGljaXRMYWJlbCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCggZGF0YSwgJ2xhYmVsJyApO1xyXG5cdFx0XHRpZiAoICEgaGFzRXhwbGljaXRMYWJlbCAmJiBkYXRhLmlkICkge1xyXG5cdFx0XHRcdGRhdGEubGFiZWwgPSBkYXRhLmlkLmNoYXJBdCggMCApLnRvVXBwZXJDYXNlKCkgKyBkYXRhLmlkLnNsaWNlKCAxICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHJldHVybiBkYXRhO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogUmVuZGVyIGEgc2ltcGxlIGxhYmVsICsgdHlwZSBwcmV2aWV3ICh1c2VkIGZvciB1bmtub3duIG9yIGZhbGxiYWNrIGZpZWxkcykuXHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IGZpZWxkX2RhdGEgLSBGaWVsZCBkYXRhIG9iamVjdC5cclxuXHRcdCAqIEByZXR1cm5zIHtzdHJpbmd9IEhUTUwgY29udGVudC5cclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIHJlbmRlcl9maWVsZF9pbm5lcl9odG1sKCBmaWVsZF9kYXRhICkge1xyXG5cdFx0XHQvLyBNYWtlIHRoZSBmYWxsYmFjayBwcmV2aWV3IHJlc3BlY3QgYW4gZW1wdHkgbGFiZWwuXHJcblx0XHRcdGNvbnN0IGhhc0xhYmVsID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKCBmaWVsZF9kYXRhLCAnbGFiZWwnICk7XHJcblx0XHRcdGNvbnN0IGxhYmVsICAgID0gaGFzTGFiZWwgPyBTdHJpbmcoIGZpZWxkX2RhdGEubGFiZWwgKSA6IFN0cmluZyggZmllbGRfZGF0YS5pZCB8fCAnKG5vIGxhYmVsKScgKTtcclxuXHJcblx0XHRcdGNvbnN0IHR5cGUgICAgICAgID0gU3RyaW5nKCBmaWVsZF9kYXRhLnR5cGUgfHwgJ3Vua25vd24nICk7XHJcblx0XHRcdGNvbnN0IGlzX3JlcXVpcmVkID0gZmllbGRfZGF0YS5yZXF1aXJlZCA9PT0gdHJ1ZSB8fCBmaWVsZF9kYXRhLnJlcXVpcmVkID09PSAndHJ1ZScgfHwgZmllbGRfZGF0YS5yZXF1aXJlZCA9PT0gMSB8fCBmaWVsZF9kYXRhLnJlcXVpcmVkID09PSAnMSc7XHJcblxyXG5cdFx0XHRjb25zdCB3cmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKTtcclxuXHJcblx0XHRcdGNvbnN0IHNwYW5MYWJlbCAgICAgICA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdzcGFuJyApO1xyXG5cdFx0XHRzcGFuTGFiZWwuY2xhc3NOYW1lICAgPSAnd3BiY19iZmJfX2ZpZWxkLWxhYmVsJztcclxuXHRcdFx0c3BhbkxhYmVsLnRleHRDb250ZW50ID0gbGFiZWwgKyAoaXNfcmVxdWlyZWQgPyAnIConIDogJycpO1xyXG5cdFx0XHR3cmFwcGVyLmFwcGVuZENoaWxkKCBzcGFuTGFiZWwgKTtcclxuXHJcblx0XHRcdGNvbnN0IHNwYW5UeXBlICAgICAgID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ3NwYW4nICk7XHJcblx0XHRcdHNwYW5UeXBlLmNsYXNzTmFtZSAgID0gJ3dwYmNfYmZiX19maWVsZC10eXBlJztcclxuXHRcdFx0c3BhblR5cGUudGV4dENvbnRlbnQgPSB0eXBlO1xyXG5cdFx0XHR3cmFwcGVyLmFwcGVuZENoaWxkKCBzcGFuVHlwZSApO1xyXG5cclxuXHRcdFx0cmV0dXJuIHdyYXBwZXIuaW5uZXJIVE1MO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogRGVib3VuY2UgYSBmdW5jdGlvbi5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiAtIEZ1bmN0aW9uIHRvIGRlYm91bmNlLlxyXG5cdFx0ICogQHBhcmFtIHtudW1iZXJ9IHdhaXQgLSBEZWxheSBpbiBtcy5cclxuXHRcdCAqIEByZXR1cm5zIHtGdW5jdGlvbn0gRGVib3VuY2VkIGZ1bmN0aW9uLlxyXG5cdFx0ICovXHJcblx0XHRzdGF0aWMgZGVib3VuY2UoIGZuLCB3YWl0ID0gMTIwICkge1xyXG5cdFx0XHRsZXQgdCA9IG51bGw7XHJcblx0XHRcdHJldHVybiBmdW5jdGlvbiBkZWJvdW5jZWQoIC4uLmFyZ3MgKSB7XHJcblx0XHRcdFx0aWYgKCB0ICkge1xyXG5cdFx0XHRcdFx0Y2xlYXJUaW1lb3V0KCB0ICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHQgPSBzZXRUaW1lb3V0KCAoKSA9PiBmbi5hcHBseSggdGhpcywgYXJncyApLCB3YWl0ICk7XHJcblx0XHRcdH07XHJcblx0XHR9XHJcblxyXG5cdH07XHJcblxyXG5cdC8vIFJlbmRlcmVyIHJlZ2lzdHJ5LiBBbGxvd3MgbGF0ZSByZWdpc3RyYXRpb24gYW5kIGF2b2lkcyB0aWdodCBjb3VwbGluZyB0byBhIGdsb2JhbCBtYXAuXHJcblx0Q29yZS5XUEJDX0JGQl9GaWVsZF9SZW5kZXJlcl9SZWdpc3RyeSA9IChmdW5jdGlvbiAoKSB7XHJcblx0XHRjb25zdCBtYXAgPSBuZXcgTWFwKCk7XHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRyZWdpc3RlciggdHlwZSwgQ2xhc3NSZWYgKSB7XHJcblx0XHRcdFx0bWFwLnNldCggU3RyaW5nKCB0eXBlICksIENsYXNzUmVmICk7XHJcblx0XHRcdH0sXHJcblx0XHRcdGdldCggdHlwZSApIHtcclxuXHRcdFx0XHRyZXR1cm4gbWFwLmdldCggU3RyaW5nKCB0eXBlICkgKTtcclxuXHRcdFx0fVxyXG5cdFx0fTtcclxuXHR9KSgpO1xyXG5cclxufSggd2luZG93ICkpO1xyXG4iLCIvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuLy8gPT0gRmlsZSAgL2luY2x1ZGVzL3BhZ2UtZm9ybS1idWlsZGVyL19vdXQvY29yZS9iZmItZmllbGRzLmpzID09IHwgMjAyNS0wOS0xMCAxNTo0N1xyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuKGZ1bmN0aW9uICggdyApIHtcclxuXHQndXNlIHN0cmljdCc7XHJcblxyXG5cdC8vIFNpbmdsZSBnbG9iYWwgbmFtZXNwYWNlIChpZGVtcG90ZW50ICYgbG9hZC1vcmRlciBzYWZlKS5cclxuXHRjb25zdCBDb3JlID0gKCB3LldQQkNfQkZCX0NvcmUgPSB3LldQQkNfQkZCX0NvcmUgfHwge30gKTtcclxuXHRjb25zdCBVSSAgID0gKCBDb3JlLlVJID0gQ29yZS5VSSB8fCB7fSApO1xyXG5cclxuXHQvKipcclxuXHQgKiBCYXNlIGNsYXNzIGZvciBmaWVsZCByZW5kZXJlcnMgKHN0YXRpYy1vbmx5IGNvbnRyYWN0KS5cclxuXHQgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcblx0ICogQ29udHJhY3QgZXhwb3NlZCB0byB0aGUgYnVpbGRlciAoc3RhdGljIG1ldGhvZHMgb24gdGhlIENMQVNTIGl0c2VsZik6XHJcblx0ICogICAtIHJlbmRlcihlbCwgZGF0YSwgY3R4KSAgICAgICAgICAgICAgLy8gUkVRVUlSRURcclxuXHQgKiAgIC0gb25fZmllbGRfZHJvcChkYXRhLCBlbCwgbWV0YSkgICAgICAvLyBPUFRJT05BTCAoZGVmYXVsdCBwcm92aWRlZClcclxuXHQgKlxyXG5cdCAqIEhlbHBlcnMgZm9yIHN1YmNsYXNzZXM6XHJcblx0ICogICAtIGdldF9kZWZhdWx0cygpICAgICAtPiBwZXItZmllbGQgZGVmYXVsdHMgKE1VU1Qgb3ZlcnJpZGUgaW4gc3ViY2xhc3MgdG8gc2V0IHR5cGUvbGFiZWwpXHJcblx0ICogICAtIG5vcm1hbGl6ZV9kYXRhKGQpICAtPiBzaGFsbG93IG1lcmdlIHdpdGggZGVmYXVsdHNcclxuXHQgKiAgIC0gZ2V0X3RlbXBsYXRlKGlkKSAgIC0+IHBlci1pZCBjYWNoZWQgd3AudGVtcGxhdGUgY29tcGlsZXJcclxuXHQgKlxyXG5cdCAqIFN1YmNsYXNzIHVzYWdlOlxyXG5cdCAqICAgY2xhc3MgV1BCQ19CRkJfRmllbGRfVGV4dCBleHRlbmRzIENvcmUuV1BCQ19CRkJfRmllbGRfQmFzZSB7IHN0YXRpYyBnZXRfZGVmYXVsdHMoKXsgLi4uIH0gfVxyXG5cdCAqICAgV1BCQ19CRkJfRmllbGRfVGV4dC50ZW1wbGF0ZV9pZCA9ICd3cGJjLWJmYi1maWVsZC10ZXh0JztcclxuXHQgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcblx0ICovXHJcblx0Q29yZS5XUEJDX0JGQl9GaWVsZF9CYXNlID0gY2xhc3Mge1xyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogRGVmYXVsdCBmaWVsZCBkYXRhIChnZW5lcmljIGJhc2VsaW5lKS5cclxuXHRcdCAqIFN1YmNsYXNzZXMgTVVTVCBvdmVycmlkZSB0byBwcm92aWRlIHsgdHlwZSwgbGFiZWwgfSBhcHByb3ByaWF0ZSBmb3IgdGhlIGZpZWxkLlxyXG5cdFx0ICogQHJldHVybnMge09iamVjdH1cclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIGdldF9kZWZhdWx0cygpIHtcclxuXHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHR0eXBlICAgICAgICA6ICdmaWVsZCcsXHJcblx0XHRcdFx0bGFiZWwgICAgICAgOiAnRmllbGQnLFxyXG5cdFx0XHRcdG5hbWUgICAgICAgIDogJ2ZpZWxkJyxcclxuXHRcdFx0XHRodG1sX2lkICAgICA6ICcnLFxyXG5cdFx0XHRcdHBsYWNlaG9sZGVyIDogJycsXHJcblx0XHRcdFx0cmVxdWlyZWQgICAgOiBmYWxzZSxcclxuXHRcdFx0XHRtaW5sZW5ndGggICA6ICcnLFxyXG5cdFx0XHRcdG1heGxlbmd0aCAgIDogJycsXHJcblx0XHRcdFx0cGF0dGVybiAgICAgOiAnJyxcclxuXHRcdFx0XHRjc3NjbGFzcyAgICA6ICcnLFxyXG5cdFx0XHRcdGhlbHAgICAgICAgIDogJydcclxuXHRcdFx0fTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFNoYWxsb3ctbWVyZ2UgaW5jb21pbmcgZGF0YSB3aXRoIGRlZmF1bHRzLlxyXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IGRhdGFcclxuXHRcdCAqIEByZXR1cm5zIHtPYmplY3R9XHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBub3JtYWxpemVfZGF0YSggZGF0YSApIHtcclxuXHRcdFx0dmFyIGQgICAgICAgID0gZGF0YSB8fCB7fTtcclxuXHRcdFx0dmFyIGRlZmF1bHRzID0gdGhpcy5nZXRfZGVmYXVsdHMoKTtcclxuXHRcdFx0dmFyIG91dCAgICAgID0ge307XHJcblx0XHRcdHZhciBrO1xyXG5cclxuXHRcdFx0Zm9yICggayBpbiBkZWZhdWx0cyApIHtcclxuXHRcdFx0XHRpZiAoIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCggZGVmYXVsdHMsIGsgKSApIHtcclxuXHRcdFx0XHRcdG91dFtrXSA9IGRlZmF1bHRzW2tdO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRmb3IgKCBrIGluIGQgKSB7XHJcblx0XHRcdFx0aWYgKCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoIGQsIGsgKSApIHtcclxuXHRcdFx0XHRcdG91dFtrXSA9IGRba107XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBvdXQ7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBDb21waWxlIGFuZCBjYWNoZSBhIHdwLnRlbXBsYXRlIGJ5IGlkIChwZXItaWQgY2FjaGUpLlxyXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IHRlbXBsYXRlX2lkXHJcblx0XHQgKiBAcmV0dXJucyB7RnVuY3Rpb258bnVsbH1cclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIGdldF90ZW1wbGF0ZSh0ZW1wbGF0ZV9pZCkge1xyXG5cclxuXHRcdFx0Ly8gQWNjZXB0IGVpdGhlciBcIndwYmMtYmZiLWZpZWxkLXRleHRcIiBvciBcInRtcGwtd3BiYy1iZmItZmllbGQtdGV4dFwiLlxyXG5cdFx0XHRpZiAoICEgdGVtcGxhdGVfaWQgfHwgISB3aW5kb3cud3AgfHwgISB3cC50ZW1wbGF0ZSApIHtcclxuXHRcdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdFx0fVxyXG5cdFx0XHRjb25zdCBkb21JZCA9IHRlbXBsYXRlX2lkLnN0YXJ0c1dpdGgoICd0bXBsLScgKSA/IHRlbXBsYXRlX2lkIDogKCd0bXBsLScgKyB0ZW1wbGF0ZV9pZCk7XHJcblx0XHRcdGlmICggISBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggZG9tSWQgKSApIHtcclxuXHRcdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKCAhIENvcmUuX19iZmJfdHBsX2NhY2hlX21hcCApIHtcclxuXHRcdFx0XHRDb3JlLl9fYmZiX3RwbF9jYWNoZV9tYXAgPSB7fTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gTm9ybWFsaXplIGlkIGZvciB0aGUgY29tcGlsZXIgJiBjYWNoZS4gLy8gd3AudGVtcGxhdGUgZXhwZWN0cyBpZCBXSVRIT1VUIHRoZSBcInRtcGwtXCIgcHJlZml4ICFcclxuXHRcdFx0Y29uc3Qga2V5ID0gdGVtcGxhdGVfaWQucmVwbGFjZSggL150bXBsLS8sICcnICk7XHJcblx0XHRcdGlmICggQ29yZS5fX2JmYl90cGxfY2FjaGVfbWFwW2tleV0gKSB7XHJcblx0XHRcdFx0cmV0dXJuIENvcmUuX19iZmJfdHBsX2NhY2hlX21hcFtrZXldO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRjb25zdCBjb21waWxlciA9IHdwLnRlbXBsYXRlKCBrZXkgKTsgICAgIC8vIDwtLSBub3JtYWxpemVkIGlkIGhlcmVcclxuXHRcdFx0aWYgKCBjb21waWxlciApIHtcclxuXHRcdFx0XHRDb3JlLl9fYmZiX3RwbF9jYWNoZV9tYXBba2V5XSA9IGNvbXBpbGVyO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4gY29tcGlsZXI7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBSRVFVSVJFRDogcmVuZGVyIHByZXZpZXcgaW50byBob3N0IGVsZW1lbnQgKGZ1bGwgcmVkcmF3OyBpZGVtcG90ZW50KS5cclxuXHRcdCAqIFN1YmNsYXNzZXMgc2hvdWxkIHNldCBzdGF0aWMgYHRlbXBsYXRlX2lkYCB0byBhIHZhbGlkIHdwLnRlbXBsYXRlIGlkLlxyXG5cdFx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxcclxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSAgICAgIGRhdGFcclxuXHRcdCAqIEBwYXJhbSB7e21vZGU/OnN0cmluZyxidWlsZGVyPzphbnksdHBsPzpGdW5jdGlvbixzYW5pdD86YW55fX0gY3R4XHJcblx0XHQgKiBAcmV0dXJucyB7dm9pZH1cclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIHJlbmRlciggZWwsIGRhdGEsIGN0eCApIHtcclxuXHRcdFx0aWYgKCAhIGVsICkge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0dmFyIGNvbXBpbGUgPSB0aGlzLmdldF90ZW1wbGF0ZSggdGhpcy50ZW1wbGF0ZV9pZCApO1xyXG5cdFx0XHR2YXIgZCAgICAgICA9IHRoaXMubm9ybWFsaXplX2RhdGEoIGRhdGEgKTtcclxuXHJcblx0XHRcdHZhciBzID0gKGN0eCAmJiBjdHguc2FuaXQpID8gY3R4LnNhbml0IDogQ29yZS5XUEJDX0JGQl9TYW5pdGl6ZTtcclxuXHJcblx0XHRcdC8vIFNhbml0aXplIGNyaXRpY2FsIGF0dHJpYnV0ZXMgYmVmb3JlIHRlbXBsYXRpbmcuXHJcblx0XHRcdGlmICggcyApIHtcclxuXHRcdFx0XHRkLmh0bWxfaWQgPSBkLmh0bWxfaWQgPyBzLnNhbml0aXplX2h0bWxfaWQoIFN0cmluZyggZC5odG1sX2lkICkgKSA6ICcnO1xyXG5cdFx0XHRcdGQubmFtZSAgICA9IHMuc2FuaXRpemVfaHRtbF9uYW1lKCBTdHJpbmcoIGQubmFtZSB8fCBkLmlkIHx8ICdmaWVsZCcgKSApO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGQuaHRtbF9pZCA9IGQuaHRtbF9pZCA/IFN0cmluZyggZC5odG1sX2lkICkgOiAnJztcclxuXHRcdFx0XHRkLm5hbWUgICAgPSBTdHJpbmcoIGQubmFtZSB8fCBkLmlkIHx8ICdmaWVsZCcgKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gRmFsbCBiYWNrIHRvIGdlbmVyaWMgcHJldmlldyBpZiB0ZW1wbGF0ZSBub3QgYXZhaWxhYmxlLlxyXG5cdFx0XHRpZiAoIGNvbXBpbGUgKSB7XHJcblx0XHRcdFx0ZWwuaW5uZXJIVE1MID0gY29tcGlsZSggZCApO1xyXG5cclxuXHRcdFx0XHQvLyBBZnRlciByZW5kZXIsIHNldCBhdHRyaWJ1dGUgdmFsdWVzIHZpYSBET00gc28gcXVvdGVzL25ld2xpbmVzIGFyZSBoYW5kbGVkIGNvcnJlY3RseS5cclxuXHRcdFx0XHRjb25zdCBpbnB1dCA9IGVsLnF1ZXJ5U2VsZWN0b3IoICdpbnB1dCwgdGV4dGFyZWEsIHNlbGVjdCcgKTtcclxuXHRcdFx0XHRpZiAoIGlucHV0ICkge1xyXG5cdFx0XHRcdFx0aWYgKCBkLnBsYWNlaG9sZGVyICE9IG51bGwgKSBpbnB1dC5zZXRBdHRyaWJ1dGUoICdwbGFjZWhvbGRlcicsIFN0cmluZyggZC5wbGFjZWhvbGRlciApICk7XHJcblx0XHRcdFx0XHRpZiAoIGQudGl0bGUgIT0gbnVsbCApIGlucHV0LnNldEF0dHJpYnV0ZSggJ3RpdGxlJywgU3RyaW5nKCBkLnRpdGxlICkgKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGVsLmlubmVySFRNTCA9IENvcmUuV1BCQ19Gb3JtX0J1aWxkZXJfSGVscGVyLnJlbmRlcl9maWVsZF9pbm5lcl9odG1sKCBkICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGVsLmRhdGFzZXQudHlwZSA9IGQudHlwZSB8fCAnZmllbGQnO1xyXG5cdFx0XHRlbC5zZXRBdHRyaWJ1dGUoICdkYXRhLWxhYmVsJywgKGQubGFiZWwgIT0gbnVsbCA/IFN0cmluZyggZC5sYWJlbCApIDogJycpICk7IC8vIGFsbG93IFwiXCIuXHJcblx0XHR9XHJcblxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogT1BUSU9OQUwgaG9vayBleGVjdXRlZCBhZnRlciBmaWVsZCBpcyBkcm9wcGVkL2xvYWRlZC9wcmV2aWV3LlxyXG5cdFx0ICogRGVmYXVsdCBleHRlbmRlZDpcclxuXHRcdCAqIC0gT24gZmlyc3QgZHJvcDogc3RhbXAgZGVmYXVsdCBsYWJlbCAoZXhpc3RpbmcgYmVoYXZpb3IpIGFuZCBtYXJrIGZpZWxkIGFzIFwiZnJlc2hcIiBmb3IgYXV0by1uYW1lLlxyXG5cdFx0ICogLSBPbiBsb2FkOiBtYXJrIGFzIGxvYWRlZCBzbyBsYXRlciBsYWJlbCBlZGl0cyBkbyBub3QgcmVuYW1lIHRoZSBzYXZlZCBuYW1lLlxyXG5cdFx0ICovXHJcblx0XHRzdGF0aWMgb25fZmllbGRfZHJvcChkYXRhLCBlbCwgbWV0YSkge1xyXG5cclxuXHRcdFx0Y29uc3QgY29udGV4dCA9IChtZXRhICYmIG1ldGEuY29udGV4dCkgPyBTdHJpbmcoIG1ldGEuY29udGV4dCApIDogJyc7XHJcblxyXG5cdFx0XHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdFx0XHQvLyBORVc6IFNlZWQgZGVmYXVsdCBcImhlbHBcIiAoYW5kIGtlZXAgaXQgaW4gU3RydWN0dXJlKSBmb3IgYWxsIGZpZWxkIHBhY2tzIHRoYXQgZGVmaW5lIGl0LlxyXG5cdFx0XHQvLyBUaGlzIGZpeGVzIHRoZSBtaXNtYXRjaCB3aGVyZTpcclxuXHRcdFx0Ly8gICAtIFVJIHNob3dzIGRlZmF1bHQgaGVscCB2aWEgbm9ybWFsaXplX2RhdGEoKSAvIHRlbXBsYXRlc1xyXG5cdFx0XHQvLyAgIC0gYnV0IGdldF9zdHJ1Y3R1cmUoKSAvIGV4cG9ydGVycyBzZWUgYGhlbHBgIGFzIHVuZGVmaW5lZC9lbXB0eS5cclxuXHRcdFx0Ly9cclxuXHRcdFx0Ly8gQmVoYXZpb3I6XHJcblx0XHRcdC8vICAgLSBSdW5zIE9OTFkgb24gaW5pdGlhbCBkcm9wIChjb250ZXh0ID09PSAnZHJvcCcpLlxyXG5cdFx0XHQvLyAgIC0gSWYgZ2V0X2RlZmF1bHRzKCkgZXhwb3NlcyBhIG5vbi1lbXB0eSBcImhlbHBcIiwgYW5kIGRhdGEuaGVscCBpc1xyXG5cdFx0XHQvLyAgICAgbWlzc2luZyAvIG51bGwgLyBlbXB0eSBzdHJpbmcgLT4gd2UgcGVyc2lzdCB0aGUgZGVmYXVsdCBpbnRvIGBkYXRhYFxyXG5cdFx0XHQvLyAgICAgYW5kIG5vdGlmeSBTdHJ1Y3R1cmUgc28gZXhwb3J0cyBzZWUgaXQuXHJcblx0XHRcdC8vICAgLSBPbiBcImxvYWRcIiB3ZSBkbyBub3RoaW5nLCBzbyBleGlzdGluZyBmb3JtcyB3aGVyZSB1c2VyICpjbGVhcmVkKlxyXG5cdFx0XHQvLyAgICAgaGVscCB3aWxsIG5vdCBiZSBvdmVycmlkZGVuLlxyXG5cdFx0XHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdFx0XHRpZiAoIGNvbnRleHQgPT09ICdkcm9wJyAmJiBkYXRhICkge1xyXG5cdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHRjb25zdCBkZWZzID0gKHR5cGVvZiB0aGlzLmdldF9kZWZhdWx0cyA9PT0gJ2Z1bmN0aW9uJykgPyB0aGlzLmdldF9kZWZhdWx0cygpIDogbnVsbDtcclxuXHRcdFx0XHRcdGlmICggZGVmcyAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoIGRlZnMsICdoZWxwJyApICkge1xyXG5cdFx0XHRcdFx0XHRjb25zdCBjdXJyZW50ICAgID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKCBkYXRhLCAnaGVscCcgKSA/IGRhdGEuaGVscCA6IHVuZGVmaW5lZDtcclxuXHRcdFx0XHRcdFx0Y29uc3QgaGFzVmFsdWUgICA9IChjdXJyZW50ICE9PSB1bmRlZmluZWQgJiYgY3VycmVudCAhPT0gbnVsbCAmJiBTdHJpbmcoIGN1cnJlbnQgKSAhPT0gJycpO1xyXG5cdFx0XHRcdFx0XHRjb25zdCBkZWZhdWx0VmFsID0gZGVmcy5oZWxwO1xyXG5cclxuXHRcdFx0XHRcdFx0aWYgKCAhIGhhc1ZhbHVlICYmIGRlZmF1bHRWYWwgIT0gbnVsbCAmJiBTdHJpbmcoIGRlZmF1bHRWYWwgKSAhPT0gJycgKSB7XHJcblx0XHRcdFx0XHRcdFx0Ly8gMSkgcGVyc2lzdCBpbnRvIGRhdGEgb2JqZWN0ICh1c2VkIGJ5IFN0cnVjdHVyZSkuXHJcblx0XHRcdFx0XHRcdFx0ZGF0YS5oZWxwID0gZGVmYXVsdFZhbDtcclxuXHJcblx0XHRcdFx0XHRcdFx0Ly8gMikgbWlycm9yIGludG8gZGF0YXNldCAoZm9yIGFueSBET00tYmFzZWQgY29uc3VtZXJzKS5cclxuXHRcdFx0XHRcdFx0XHRpZiAoIGVsICkge1xyXG5cdFx0XHRcdFx0XHRcdFx0ZWwuZGF0YXNldC5oZWxwID0gU3RyaW5nKCBkZWZhdWx0VmFsICk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0Ly8gMykgbm90aWZ5IFN0cnVjdHVyZSAvIGxpc3RlbmVycyAoaWYgYXZhaWxhYmxlKS5cclxuXHRcdFx0XHRcdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdENvcmUuU3RydWN0dXJlPy51cGRhdGVfZmllbGRfcHJvcD8uKCBlbCwgJ2hlbHAnLCBkZWZhdWx0VmFsICk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGVsLmRpc3BhdGNoRXZlbnQoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0bmV3IEN1c3RvbUV2ZW50KCAnd3BiY19iZmJfZmllbGRfZGF0YV9jaGFuZ2VkJywgeyBidWJibGVzOiB0cnVlLCBkZXRhaWwgOiB7IGtleTogJ2hlbHAnLCB2YWx1ZTogZGVmYXVsdFZhbCB9IH0gKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdFx0fSBjYXRjaCAoIF9pbm5lciApIHt9XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSBjYXRjaCAoIF9lICkge31cclxuXHRcdFx0fVxyXG5cdFx0XHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHRcdFx0aWYgKCBjb250ZXh0ID09PSAnZHJvcCcgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCggZGF0YSwgJ2xhYmVsJyApICkge1xyXG5cdFx0XHRcdGNvbnN0IGRlZnMgPSB0aGlzLmdldF9kZWZhdWx0cygpO1xyXG5cdFx0XHRcdGRhdGEubGFiZWwgPSBkZWZzLmxhYmVsIHx8ICdGaWVsZCc7XHJcblx0XHRcdFx0ZWwuc2V0QXR0cmlidXRlKCAnZGF0YS1sYWJlbCcsIGRhdGEubGFiZWwgKTtcclxuXHRcdFx0fVxyXG5cdFx0XHQvLyBNYXJrIHByb3ZlbmFuY2UgZmxhZ3MuXHJcblx0XHRcdGlmICggY29udGV4dCA9PT0gJ2Ryb3AnICkge1xyXG5cdFx0XHRcdGVsLmRhdGFzZXQuZnJlc2ggICAgICA9ICcxJzsgICAvLyBjYW4gYXV0by1uYW1lIG9uIGZpcnN0IGxhYmVsIGVkaXQuXHJcblx0XHRcdFx0ZWwuZGF0YXNldC5hdXRvbmFtZSAgID0gJzEnO1xyXG5cdFx0XHRcdGVsLmRhdGFzZXQud2FzX2xvYWRlZCA9ICcwJztcclxuXHRcdFx0XHQvLyBTZWVkIGEgcHJvdmlzaW9uYWwgdW5pcXVlIG5hbWUgaW1tZWRpYXRlbHkuXHJcblx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdGNvbnN0IGIgPSBtZXRhPy5idWlsZGVyO1xyXG5cdFx0XHRcdFx0aWYgKCBiPy5pZCAmJiAoIWVsLmhhc0F0dHJpYnV0ZSggJ2RhdGEtbmFtZScgKSB8fCAhZWwuZ2V0QXR0cmlidXRlKCAnZGF0YS1uYW1lJyApKSApIHtcclxuXHRcdFx0XHRcdFx0Y29uc3QgUyAgICA9IENvcmUuV1BCQ19CRkJfU2FuaXRpemU7XHJcblx0XHRcdFx0XHRcdGNvbnN0IGJhc2UgPSBTLnNhbml0aXplX2h0bWxfbmFtZSggZWwuZ2V0QXR0cmlidXRlKCAnZGF0YS1pZCcgKSB8fCBkYXRhPy5pZCB8fCBkYXRhPy50eXBlIHx8ICdmaWVsZCcgKTtcclxuXHRcdFx0XHRcdFx0Y29uc3QgdW5pcSA9IGIuaWQuZW5zdXJlX3VuaXF1ZV9maWVsZF9uYW1lKCBiYXNlLCBlbCApO1xyXG5cdFx0XHRcdFx0XHRlbC5zZXRBdHRyaWJ1dGUoICdkYXRhLW5hbWUnLCB1bmlxICk7XHJcblx0XHRcdFx0XHRcdGVsLmRhdGFzZXQubmFtZV91c2VyX3RvdWNoZWQgPSAnMCc7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSBjYXRjaCAoIF8gKSB7fVxyXG5cclxuXHRcdFx0fSBlbHNlIGlmICggY29udGV4dCA9PT0gJ2xvYWQnICkge1xyXG5cdFx0XHRcdGVsLmRhdGFzZXQuZnJlc2ggICAgICA9ICcwJztcclxuXHRcdFx0XHRlbC5kYXRhc2V0LmF1dG9uYW1lICAgPSAnMCc7XHJcblx0XHRcdFx0ZWwuZGF0YXNldC53YXNfbG9hZGVkID0gJzEnOyAgIC8vIG5ldmVyIHJlbmFtZSBuYW1lcyBmb3IgbG9hZGVkIGZpZWxkcy5cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIC0tLSBBdXRvIFJlbmFtZSBcIkZyZXNoXCIgZmllbGQsICBvbiBlbnRlcmluZyB0aGUgbmV3IExhYmVsIC0tLVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQ3JlYXRlIGEgY29uc2VydmF0aXZlIGZpZWxkIFwibmFtZVwiIGZyb20gYSBodW1hbiBsYWJlbC5cclxuXHRcdCAqIFVzZXMgdGhlIHNhbWUgY29uc3RyYWludHMgYXMgc2FuaXRpemVfaHRtbF9uYW1lIChsZXR0ZXJzL2RpZ2l0cy9fLSBhbmQgbGVhZGluZyBsZXR0ZXIpLlxyXG5cdFx0ICovXHJcblx0XHRzdGF0aWMgbmFtZV9mcm9tX2xhYmVsKGxhYmVsKSB7XHJcblx0XHRcdGNvbnN0IHMgPSBDb3JlLldQQkNfQkZCX1Nhbml0aXplLnNhbml0aXplX2h0bWxfbmFtZSggU3RyaW5nKCBsYWJlbCA/PyAnJyApICk7XHJcblx0XHRcdHJldHVybiBzLnRvTG93ZXJDYXNlKCkgfHwgJ2ZpZWxkJztcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEF1dG8tZmlsbCBkYXRhLW5hbWUgZnJvbSBsYWJlbCBPTkxZIGZvciBmcmVzaGx5IGRyb3BwZWQgZmllbGRzIHRoYXQgd2VyZSBub3QgZWRpdGVkIHlldC5cclxuXHRcdCAqIC0gTmV2ZXIgcnVucyBmb3Igc2VjdGlvbnMuXHJcblx0XHQgKiAtIE5ldmVyIHJ1bnMgZm9yIGxvYWRlZC9leGlzdGluZyBmaWVsZHMuXHJcblx0XHQgKiAtIFN0b3BzIGFzIHNvb24gYXMgdXNlciBlZGl0cyB0aGUgTmFtZSBtYW51YWxseS5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge1dQQkNfRm9ybV9CdWlsZGVyfSBidWlsZGVyXHJcblx0XHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbCAgLSAud3BiY19iZmJfX2ZpZWxkIGVsZW1lbnRcclxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBsYWJlbFZhbFxyXG5cdFx0ICovXHJcblx0XHRzdGF0aWMgbWF5YmVfYXV0b25hbWVfZnJvbV9sYWJlbChidWlsZGVyLCBlbCwgbGFiZWxWYWwpIHtcclxuXHRcdFx0aWYgKCAhYnVpbGRlciB8fCAhZWwgKSByZXR1cm47XHJcblx0XHRcdGlmICggZWwuY2xhc3NMaXN0LmNvbnRhaW5zKCAnd3BiY19iZmJfX3NlY3Rpb24nICkgKSByZXR1cm47XHJcblxyXG5cdFx0XHRjb25zdCBhbGxvd0F1dG8gPSBlbC5kYXRhc2V0LmF1dG9uYW1lID09PSAnMSc7XHJcblxyXG5cdFx0XHRjb25zdCB1c2VyVG91Y2hlZCA9IGVsLmRhdGFzZXQubmFtZV91c2VyX3RvdWNoZWQgPT09ICcxJztcclxuXHRcdFx0Y29uc3QgaXNMb2FkZWQgICAgPSBlbC5kYXRhc2V0Lndhc19sb2FkZWQgPT09ICcxJztcclxuXHJcblx0XHRcdGlmICggIWFsbG93QXV0byB8fCB1c2VyVG91Y2hlZCB8fCBpc0xvYWRlZCApIHJldHVybjtcclxuXHJcblx0XHRcdC8vIE9ubHkgb3ZlcnJpZGUgcGxhY2Vob2xkZXIteSBuYW1lc1xyXG5cdFx0XHRjb25zdCBTID0gQ29yZS5XUEJDX0JGQl9TYW5pdGl6ZTtcclxuXHJcblx0XHRcdGNvbnN0IGJhc2UgICA9IHRoaXMubmFtZV9mcm9tX2xhYmVsKCBsYWJlbFZhbCApO1xyXG5cdFx0XHRjb25zdCB1bmlxdWUgPSBidWlsZGVyLmlkLmVuc3VyZV91bmlxdWVfZmllbGRfbmFtZSggYmFzZSwgZWwgKTtcclxuXHRcdFx0ZWwuc2V0QXR0cmlidXRlKCAnZGF0YS1uYW1lJywgdW5pcXVlICk7XHJcblxyXG5cdFx0XHRjb25zdCBpbnMgICAgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnd3BiY19iZmJfX2luc3BlY3RvcicgKTtcclxuXHRcdFx0Y29uc3QgbmFtZUN0cmwgPSBpbnM/LnF1ZXJ5U2VsZWN0b3IoICdbZGF0YS1pbnNwZWN0b3Ita2V5PVwibmFtZVwiXScgKTtcclxuXHRcdFx0aWYgKCBuYW1lQ3RybCAmJiAndmFsdWUnIGluIG5hbWVDdHJsICYmIG5hbWVDdHJsLnZhbHVlICE9PSB1bmlxdWUgKSBuYW1lQ3RybC52YWx1ZSA9IHVuaXF1ZTtcclxuXHRcdH1cclxuXHJcblxyXG5cdH07XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNlbGVjdF9CYXNlIChzaGFyZWQgYmFzZSBmb3Igc2VsZWN0LWxpa2UgcGFja3MpXHJcblx0ICpcclxuXHQgKiBAdHlwZSB7Q29yZS5XUEJDX0JGQl9TZWxlY3RfQmFzZX1cclxuXHQgKi9cclxuXHRDb3JlLldQQkNfQkZCX1NlbGVjdF9CYXNlID0gY2xhc3MgZXh0ZW5kcyBDb3JlLldQQkNfQkZCX0ZpZWxkX0Jhc2Uge1xyXG5cclxuXHRcdHN0YXRpYyB0ZW1wbGF0ZV9pZCAgICAgICAgICAgID0gbnVsbDsgICAgICAgICAgICAgICAgIC8vIG1haW4gcHJldmlldyB0ZW1wbGF0ZSBpZFxyXG5cdFx0c3RhdGljIG9wdGlvbl9yb3dfdGVtcGxhdGVfaWQgPSAnd3BiYy1iZmItaW5zcGVjdG9yLXNlbGVjdC1vcHRpb24tcm93JzsgLy8gcm93IHRwbCBpZFxyXG5cdFx0c3RhdGljIGtpbmQgICAgICAgICAgICAgICAgICAgPSAnc2VsZWN0JztcclxuXHRcdHN0YXRpYyBfX3Jvb3Rfd2lyZWQgICAgICAgICAgID0gZmFsc2U7XHJcblx0XHRzdGF0aWMgX19yb290X25vZGUgICAgICAgICAgICA9IG51bGw7XHJcblxyXG5cdFx0Ly8gU2luZ2xlIHNvdXJjZSBvZiBzZWxlY3RvcnMgdXNlZCBieSB0aGUgaW5zcGVjdG9yIFVJLlxyXG5cdFx0c3RhdGljIHVpID0ge1xyXG5cdFx0XHRsaXN0ICAgOiAnLndwYmNfYmZiX19vcHRpb25zX2xpc3QnLFxyXG5cdFx0XHRob2xkZXIgOiAnLndwYmNfYmZiX19vcHRpb25zX3N0YXRlW2RhdGEtaW5zcGVjdG9yLWtleT1cIm9wdGlvbnNcIl0nLFxyXG5cdFx0XHRyb3cgICAgOiAnLndwYmNfYmZiX19vcHRpb25zX3JvdycsXHJcblx0XHRcdGxhYmVsICA6ICcud3BiY19iZmJfX29wdC1sYWJlbCcsXHJcblx0XHRcdHZhbHVlICA6ICcud3BiY19iZmJfX29wdC12YWx1ZScsXHJcblx0XHRcdHRvZ2dsZSA6ICcud3BiY19iZmJfX29wdC1zZWxlY3RlZC1jaGsnLFxyXG5cdFx0XHRhZGRfYnRuOiAnLmpzLWFkZC1vcHRpb24nLFxyXG5cclxuXHRcdFx0ZHJhZ19oYW5kbGUgICAgICA6ICcud3BiY19iZmJfX2RyYWctaGFuZGxlJyxcclxuXHRcdFx0bXVsdGlwbGVfY2hrICAgICA6ICcuanMtb3B0LW11bHRpcGxlW2RhdGEtaW5zcGVjdG9yLWtleT1cIm11bHRpcGxlXCJdJyxcclxuXHRcdFx0ZGVmYXVsdF90ZXh0ICAgICA6ICcuanMtZGVmYXVsdC12YWx1ZVtkYXRhLWluc3BlY3Rvci1rZXk9XCJkZWZhdWx0X3ZhbHVlXCJdJyxcclxuXHRcdFx0cGxhY2Vob2xkZXJfaW5wdXQ6ICcuanMtcGxhY2Vob2xkZXJbZGF0YS1pbnNwZWN0b3Ita2V5PVwicGxhY2Vob2xkZXJcIl0nLFxyXG5cdFx0XHRwbGFjZWhvbGRlcl9ub3RlIDogJy5qcy1wbGFjZWhvbGRlci1ub3RlJyxcclxuXHRcdFx0c2l6ZV9pbnB1dCAgICAgICA6ICcuaW5zcGVjdG9yX19pbnB1dFtkYXRhLWluc3BlY3Rvci1rZXk9XCJzaXplXCJdJyxcclxuXHJcblx0XHRcdC8vIERyb3Bkb3duIG1lbnUgaW50ZWdyYXRpb24uXHJcblx0XHRcdG1lbnVfcm9vdCAgOiAnLndwYmNfdWlfZWxfX2Ryb3Bkb3duJyxcclxuXHRcdFx0bWVudV90b2dnbGU6ICdbZGF0YS10b2dnbGU9XCJ3cGJjX2Ryb3Bkb3duXCJdJyxcclxuXHRcdFx0bWVudV9hY3Rpb246ICcudWxfZHJvcGRvd25fbWVudV9saV9hY3Rpb25bZGF0YS1hY3Rpb25dJyxcclxuXHRcdFx0Ly8gVmFsdWUtZGlmZmVycyB0b2dnbGUuXHJcblx0XHRcdHZhbHVlX2RpZmZlcnNfY2hrOiAnLmpzLXZhbHVlLWRpZmZlcnNbZGF0YS1pbnNwZWN0b3Ita2V5PVwidmFsdWVfZGlmZmVyc1wiXScsXHJcblx0XHR9O1xyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQnVpbGQgb3B0aW9uIHZhbHVlIGZyb20gbGFiZWwuXHJcblx0XHQgKiAtIElmIGBkaWZmZXJzID09PSB0cnVlYCAtPiBnZW5lcmF0ZSB0b2tlbiAoc2x1Zy1saWtlIG1hY2hpbmUgdmFsdWUpLlxyXG5cdFx0ICogLSBJZiBgZGlmZmVycyA9PT0gZmFsc2VgIC0+IGtlZXAgaHVtYW4gdGV4dDsgZXNjYXBlIG9ubHkgZGFuZ2Vyb3VzIGNoYXJzLlxyXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IGxhYmVsXHJcblx0XHQgKiBAcGFyYW0ge2Jvb2xlYW59IGRpZmZlcnNcclxuXHRcdCAqIEByZXR1cm5zIHtzdHJpbmd9XHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBidWlsZF92YWx1ZV9mcm9tX2xhYmVsKGxhYmVsLCBkaWZmZXJzKSB7XHJcblx0XHRcdGNvbnN0IFMgPSBDb3JlLldQQkNfQkZCX1Nhbml0aXplO1xyXG5cdFx0XHRpZiAoIGRpZmZlcnMgKSB7XHJcblx0XHRcdFx0cmV0dXJuIChTICYmIHR5cGVvZiBTLnRvX3Rva2VuID09PSAnZnVuY3Rpb24nKVxyXG5cdFx0XHRcdFx0PyBTLnRvX3Rva2VuKCBTdHJpbmcoIGxhYmVsIHx8ICcnICkgKVxyXG5cdFx0XHRcdFx0OiBTdHJpbmcoIGxhYmVsIHx8ICcnICkudHJpbSgpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSggL1xccysvZywgJ18nICkucmVwbGFjZSggL1teXFx3LV0vZywgJycgKTtcclxuXHRcdFx0fVxyXG5cdFx0XHQvLyBzaW5nbGUtaW5wdXQgbW9kZToga2VlcCBodW1hbiB0ZXh0OyB0ZW1wbGF0ZSB3aWxsIGVzY2FwZSBzYWZlbHkuXHJcblx0XHRcdHJldHVybiBTdHJpbmcoIGxhYmVsID09IG51bGwgPyAnJyA6IGxhYmVsICk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBJcyB0aGUg4oCcdmFsdWUgZGlmZmVycyBmcm9tIGxhYmVs4oCdIHRvZ2dsZSBlbmFibGVkP1xyXG5cdFx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcGFuZWxcclxuXHRcdCAqIEByZXR1cm5zIHtib29sZWFufVxyXG5cdFx0ICovXHJcblx0XHRzdGF0aWMgaXNfdmFsdWVfZGlmZmVyc19lbmFibGVkKHBhbmVsKSB7XHJcblx0XHRcdGNvbnN0IGNoayA9IHBhbmVsPy5xdWVyeVNlbGVjdG9yKCB0aGlzLnVpLnZhbHVlX2RpZmZlcnNfY2hrICk7XHJcblx0XHRcdHJldHVybiAhIShjaGsgJiYgY2hrLmNoZWNrZWQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogRW5zdXJlIHZpc2liaWxpdHkvZW5hYmxlZCBzdGF0ZSBvZiBWYWx1ZSBpbnB1dHMgYmFzZWQgb24gdGhlIHRvZ2dsZS5cclxuXHRcdCAqIFdoZW4gZGlzYWJsZWQgLT4gaGlkZSBWYWx1ZSBpbnB1dHMgYW5kIGtlZXAgdGhlbSBtaXJyb3JlZCBmcm9tIExhYmVsLlxyXG5cdFx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcGFuZWxcclxuXHRcdCAqIEByZXR1cm5zIHt2b2lkfVxyXG5cdFx0ICovXHJcblx0XHRzdGF0aWMgc3luY192YWx1ZV9pbnB1dHNfdmlzaWJpbGl0eShwYW5lbCkge1xyXG5cdFx0XHRjb25zdCBkaWZmZXJzID0gdGhpcy5pc192YWx1ZV9kaWZmZXJzX2VuYWJsZWQoIHBhbmVsICk7XHJcblx0XHRcdGNvbnN0IHJvd3MgICAgPSBwYW5lbD8ucXVlcnlTZWxlY3RvckFsbCggdGhpcy51aS5yb3cgKSB8fCBbXTtcclxuXHJcblx0XHRcdGZvciAoIGxldCBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKysgKSB7XHJcblx0XHRcdFx0Y29uc3QgciAgICAgID0gcm93c1tpXTtcclxuXHRcdFx0XHRjb25zdCBsYmxfaW4gPSByLnF1ZXJ5U2VsZWN0b3IoIHRoaXMudWkubGFiZWwgKTtcclxuXHRcdFx0XHRjb25zdCB2YWxfaW4gPSByLnF1ZXJ5U2VsZWN0b3IoIHRoaXMudWkudmFsdWUgKTtcclxuXHRcdFx0XHRpZiAoICF2YWxfaW4gKSBjb250aW51ZTtcclxuXHJcblx0XHRcdFx0aWYgKCBkaWZmZXJzICkge1xyXG5cdFx0XHRcdFx0Ly8gUmUtZW5hYmxlICYgc2hvdyB2YWx1ZSBpbnB1dFxyXG5cdFx0XHRcdFx0dmFsX2luLnJlbW92ZUF0dHJpYnV0ZSggJ2Rpc2FibGVkJyApO1xyXG5cdFx0XHRcdFx0dmFsX2luLnN0eWxlLmRpc3BsYXkgPSAnJztcclxuXHJcblx0XHRcdFx0XHQvLyBJZiB3ZSBoYXZlIGEgY2FjaGVkIGN1c3RvbSB2YWx1ZSBhbmQgdGhlIHJvdyB3YXNuJ3QgZWRpdGVkIHdoaWxlIE9GRiwgcmVzdG9yZSBpdFxyXG5cdFx0XHRcdFx0Y29uc3QgaGFzQ2FjaGUgICA9ICEhdmFsX2luLmRhdGFzZXQuY2FjaGVkX3ZhbHVlO1xyXG5cdFx0XHRcdFx0Y29uc3QgdXNlckVkaXRlZCA9IHIuZGF0YXNldC52YWx1ZV91c2VyX3RvdWNoZWQgPT09ICcxJztcclxuXHJcblx0XHRcdFx0XHRpZiAoIGhhc0NhY2hlICYmICF1c2VyRWRpdGVkICkge1xyXG5cdFx0XHRcdFx0XHR2YWxfaW4udmFsdWUgPSB2YWxfaW4uZGF0YXNldC5jYWNoZWRfdmFsdWU7XHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCAhaGFzQ2FjaGUgKSB7XHJcblx0XHRcdFx0XHRcdC8vIE5vIGNhY2hlOiBpZiB2YWx1ZSBpcyBqdXN0IGEgbWlycm9yZWQgbGFiZWwsIG9mZmVyIGEgdG9rZW5pemVkIGRlZmF1bHRcclxuXHRcdFx0XHRcdFx0Y29uc3QgbGJsICAgICAgPSBsYmxfaW4gPyBsYmxfaW4udmFsdWUgOiAnJztcclxuXHRcdFx0XHRcdFx0Y29uc3QgbWlycm9yZWQgPSB0aGlzLmJ1aWxkX3ZhbHVlX2Zyb21fbGFiZWwoIGxibCwgLypkaWZmZXJzPSovZmFsc2UgKTtcclxuXHRcdFx0XHRcdFx0aWYgKCB2YWxfaW4udmFsdWUgPT09IG1pcnJvcmVkICkge1xyXG5cdFx0XHRcdFx0XHRcdHZhbF9pbi52YWx1ZSA9IHRoaXMuYnVpbGRfdmFsdWVfZnJvbV9sYWJlbCggbGJsLCAvKmRpZmZlcnM9Ki90cnVlICk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0Ly8gT04gLT4gT0ZGOiBjYWNoZSBvbmNlLCB0aGVuIG1pcnJvclxyXG5cdFx0XHRcdFx0aWYgKCAhdmFsX2luLmRhdGFzZXQuY2FjaGVkX3ZhbHVlICkge1xyXG5cdFx0XHRcdFx0XHR2YWxfaW4uZGF0YXNldC5jYWNoZWRfdmFsdWUgPSB2YWxfaW4udmFsdWUgfHwgJyc7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRjb25zdCBsYmwgICAgPSBsYmxfaW4gPyBsYmxfaW4udmFsdWUgOiAnJztcclxuXHRcdFx0XHRcdHZhbF9pbi52YWx1ZSA9IHRoaXMuYnVpbGRfdmFsdWVfZnJvbV9sYWJlbCggbGJsLCAvKmRpZmZlcnM9Ki9mYWxzZSApO1xyXG5cclxuXHRcdFx0XHRcdHZhbF9pbi5zZXRBdHRyaWJ1dGUoICdkaXNhYmxlZCcsICdkaXNhYmxlZCcgKTtcclxuXHRcdFx0XHRcdHZhbF9pbi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG5cdFx0XHRcdFx0Ly8gTk9URTogZG8gTk9UIG1hcmsgYXMgdXNlcl90b3VjaGVkIGhlcmVcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBSZXR1cm4gd2hldGhlciB0aGlzIHJvd+KAmXMgdmFsdWUgaGFzIGJlZW4gZWRpdGVkIGJ5IHVzZXIuXHJcblx0XHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSByb3dcclxuXHRcdCAqIEByZXR1cm5zIHtib29sZWFufVxyXG5cdFx0ICovXHJcblx0XHRzdGF0aWMgaXNfcm93X3ZhbHVlX3VzZXJfdG91Y2hlZChyb3cpIHtcclxuXHRcdFx0cmV0dXJuIHJvdz8uZGF0YXNldD8udmFsdWVfdXNlcl90b3VjaGVkID09PSAnMSc7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBNYXJrIHRoaXMgcm934oCZcyB2YWx1ZSBhcyBlZGl0ZWQgYnkgdXNlci5cclxuXHRcdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHJvd1xyXG5cdFx0ICovXHJcblx0XHRzdGF0aWMgbWFya19yb3dfdmFsdWVfdXNlcl90b3VjaGVkKHJvdykge1xyXG5cdFx0XHRpZiAoIHJvdyApIHJvdy5kYXRhc2V0LnZhbHVlX3VzZXJfdG91Y2hlZCA9ICcxJztcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEluaXRpYWxpemUg4oCcZnJlc2huZXNz4oCdIGZsYWdzIG9uIGEgcm93ICh2YWx1ZSB1bnRvdWNoZWQpLlxyXG5cdFx0ICogQ2FsbCBvbiBjcmVhdGlvbi9hcHBlbmQgb2Ygcm93cy5cclxuXHRcdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHJvd1xyXG5cdFx0ICovXHJcblx0XHRzdGF0aWMgaW5pdF9yb3dfZnJlc2hfZmxhZ3Mocm93KSB7XHJcblx0XHRcdGlmICggcm93ICkge1xyXG5cdFx0XHRcdGlmICggIXJvdy5kYXRhc2V0LnZhbHVlX3VzZXJfdG91Y2hlZCApIHtcclxuXHRcdFx0XHRcdHJvdy5kYXRhc2V0LnZhbHVlX3VzZXJfdG91Y2hlZCA9ICcwJztcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyAtLS0tIGRlZmF1bHRzIChwYWNrcyBjYW4gb3ZlcnJpZGUpIC0tLS1cclxuXHRcdHN0YXRpYyBnZXRfZGVmYXVsdHMoKSB7XHJcblx0XHRcdHJldHVybiB7XHJcblx0XHRcdFx0dHlwZSAgICAgICAgIDogdGhpcy5raW5kLFxyXG5cdFx0XHRcdGxhYmVsICAgICAgICA6ICdTZWxlY3QnLFxyXG5cdFx0XHRcdG5hbWUgICAgICAgICA6ICcnLFxyXG5cdFx0XHRcdGh0bWxfaWQgICAgICA6ICcnLFxyXG5cdFx0XHRcdHBsYWNlaG9sZGVyICA6ICctLS0gU2VsZWN0IC0tLScsXHJcblx0XHRcdFx0cmVxdWlyZWQgICAgIDogZmFsc2UsXHJcblx0XHRcdFx0bXVsdGlwbGUgICAgIDogZmFsc2UsXHJcblx0XHRcdFx0c2l6ZSAgICAgICAgIDogbnVsbCxcclxuXHRcdFx0XHRjc3NjbGFzcyAgICAgOiAnJyxcclxuXHRcdFx0XHRoZWxwICAgICAgICAgOiAnJyxcclxuXHRcdFx0XHRkZWZhdWx0X3ZhbHVlOiAnJyxcclxuXHRcdFx0XHRvcHRpb25zICAgICAgOiBbXHJcblx0XHRcdFx0XHR7IGxhYmVsOiAnT3B0aW9uIDEnLCB2YWx1ZTogJ09wdGlvbiAxJywgc2VsZWN0ZWQ6IGZhbHNlIH0sXHJcblx0XHRcdFx0XHR7IGxhYmVsOiAnT3B0aW9uIDInLCB2YWx1ZTogJ09wdGlvbiAyJywgc2VsZWN0ZWQ6IGZhbHNlIH0sXHJcblx0XHRcdFx0XHR7IGxhYmVsOiAnT3B0aW9uIDMnLCB2YWx1ZTogJ09wdGlvbiAzJywgc2VsZWN0ZWQ6IGZhbHNlIH0sXHJcblx0XHRcdFx0XHR7IGxhYmVsOiAnT3B0aW9uIDQnLCB2YWx1ZTogJ09wdGlvbiA0Jywgc2VsZWN0ZWQ6IGZhbHNlIH1cclxuXHRcdFx0XHRdLFxyXG5cdFx0XHRcdG1pbl93aWR0aCAgICA6ICcyNDBweCdcclxuXHRcdFx0fTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyAtLS0tIHByZXZpZXcgcmVuZGVyIChpZGVtcG90ZW50KSAtLS0tXHJcblx0XHRzdGF0aWMgcmVuZGVyKGVsLCBkYXRhLCBjdHgpIHtcclxuXHRcdFx0aWYgKCAhZWwgKSByZXR1cm47XHJcblxyXG5cdFx0XHRjb25zdCBkID0gdGhpcy5ub3JtYWxpemVfZGF0YSggZGF0YSApO1xyXG5cclxuXHRcdFx0aWYgKCBkLm1pbl93aWR0aCAhPSBudWxsICkge1xyXG5cdFx0XHRcdGVsLmRhdGFzZXQubWluX3dpZHRoID0gU3RyaW5nKCBkLm1pbl93aWR0aCApO1xyXG5cdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHRlbC5zdHlsZS5zZXRQcm9wZXJ0eSggJy0td3BiYy1jb2wtbWluJywgU3RyaW5nKCBkLm1pbl93aWR0aCApICk7XHJcblx0XHRcdFx0fSBjYXRjaCAoIF8gKSB7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmICggZC5odG1sX2lkICE9IG51bGwgKSBlbC5kYXRhc2V0Lmh0bWxfaWQgPSBTdHJpbmcoIGQuaHRtbF9pZCB8fCAnJyApO1xyXG5cdFx0XHRpZiAoIGQuY3NzY2xhc3MgIT0gbnVsbCApIGVsLmRhdGFzZXQuY3NzY2xhc3MgPSBTdHJpbmcoIGQuY3NzY2xhc3MgfHwgJycgKTtcclxuXHRcdFx0aWYgKCBkLnBsYWNlaG9sZGVyICE9IG51bGwgKSBlbC5kYXRhc2V0LnBsYWNlaG9sZGVyID0gU3RyaW5nKCBkLnBsYWNlaG9sZGVyIHx8ICcnICk7XHJcblxyXG5cdFx0XHRjb25zdCB0cGwgPSB0aGlzLmdldF90ZW1wbGF0ZSggdGhpcy50ZW1wbGF0ZV9pZCApO1xyXG5cdFx0XHRpZiAoIHR5cGVvZiB0cGwgIT09ICdmdW5jdGlvbicgKSB7XHJcblx0XHRcdFx0ZWwuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9XCJ3cGJjX2JmYl9fZXJyb3JcIiByb2xlPVwiYWxlcnRcIj5UZW1wbGF0ZSBub3QgZm91bmQ6ICcgKyB0aGlzLnRlbXBsYXRlX2lkICsgJy48L2Rpdj4nO1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRlbC5pbm5lckhUTUwgPSB0cGwoIGQgKTtcclxuXHRcdFx0fSBjYXRjaCAoIGUgKSB7XHJcblx0XHRcdFx0d2luZG93Ll93cGJjPy5kZXY/LmVycm9yPy4oICdTZWxlY3RfQmFzZS5yZW5kZXInLCBlICk7XHJcblx0XHRcdFx0ZWwuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9XCJ3cGJjX2JmYl9fZXJyb3JcIiByb2xlPVwiYWxlcnRcIj5FcnJvciByZW5kZXJpbmcgZmllbGQgcHJldmlldy48L2Rpdj4nO1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0ZWwuZGF0YXNldC50eXBlID0gZC50eXBlIHx8IHRoaXMua2luZDtcclxuXHRcdFx0ZWwuc2V0QXR0cmlidXRlKCAnZGF0YS1sYWJlbCcsIChkLmxhYmVsICE9IG51bGwgPyBTdHJpbmcoIGQubGFiZWwgKSA6ICcnKSApO1xyXG5cclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRDb3JlLlVJPy5XUEJDX0JGQl9PdmVybGF5Py5lbnN1cmU/LiggY3R4Py5idWlsZGVyLCBlbCApO1xyXG5cdFx0XHR9IGNhdGNoICggXyApIHtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKCAhZWwuZGF0YXNldC5vcHRpb25zICYmIEFycmF5LmlzQXJyYXkoIGQub3B0aW9ucyApICYmIGQub3B0aW9ucy5sZW5ndGggKSB7XHJcblx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdGVsLmRhdGFzZXQub3B0aW9ucyA9IEpTT04uc3RyaW5naWZ5KCBkLm9wdGlvbnMgKTtcclxuXHRcdFx0XHR9IGNhdGNoICggXyApIHtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyAtLS0tIGRyb3Agc2VlZGluZyAob3B0aW9ucyArIHBsYWNlaG9sZGVyKSAtLS0tXHJcblx0XHRzdGF0aWMgb25fZmllbGRfZHJvcChkYXRhLCBlbCwgbWV0YSkge1xyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdHN1cGVyLm9uX2ZpZWxkX2Ryb3A/LiggZGF0YSwgZWwsIG1ldGEgKTtcclxuXHRcdFx0fSBjYXRjaCAoIF8gKSB7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGNvbnN0IGlzX2Ryb3AgPSAobWV0YSAmJiBtZXRhLmNvbnRleHQgPT09ICdkcm9wJyk7XHJcblxyXG5cdFx0XHRpZiAoIGlzX2Ryb3AgKSB7XHJcblx0XHRcdFx0aWYgKCAhQXJyYXkuaXNBcnJheSggZGF0YS5vcHRpb25zICkgfHwgIWRhdGEub3B0aW9ucy5sZW5ndGggKSB7XHJcblx0XHRcdFx0XHRjb25zdCBvcHRzICAgPSAodGhpcy5nZXRfZGVmYXVsdHMoKS5vcHRpb25zIHx8IFtdKS5tYXAoIChvKSA9PiAoe1xyXG5cdFx0XHRcdFx0XHRsYWJlbCAgIDogby5sYWJlbCxcclxuXHRcdFx0XHRcdFx0dmFsdWUgICA6IG8udmFsdWUsXHJcblx0XHRcdFx0XHRcdHNlbGVjdGVkOiAhIW8uc2VsZWN0ZWRcclxuXHRcdFx0XHRcdH0pICk7XHJcblx0XHRcdFx0XHRkYXRhLm9wdGlvbnMgPSBvcHRzO1xyXG5cdFx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdFx0ZWwuZGF0YXNldC5vcHRpb25zID0gSlNPTi5zdHJpbmdpZnkoIG9wdHMgKTtcclxuXHRcdFx0XHRcdFx0ZWwuZGlzcGF0Y2hFdmVudCggbmV3IEN1c3RvbUV2ZW50KCAnd3BiY19iZmJfZmllbGRfZGF0YV9jaGFuZ2VkJywgeyBidWJibGVzOiB0cnVlLFxyXG5cdFx0XHRcdFx0XHRcdGRldGFpbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB7XHJcblx0XHRcdFx0XHRcdFx0XHRrZXkgIDogJ29wdGlvbnMnLFxyXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWU6IG9wdHNcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH0gKSApO1xyXG5cdFx0XHRcdFx0XHRDb3JlLlN0cnVjdHVyZT8udXBkYXRlX2ZpZWxkX3Byb3A/LiggZWwsICdvcHRpb25zJywgb3B0cyApO1xyXG5cdFx0XHRcdFx0fSBjYXRjaCAoIF8gKSB7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRjb25zdCBwaCA9IChkYXRhLnBsYWNlaG9sZGVyID8/ICcnKS50b1N0cmluZygpLnRyaW0oKTtcclxuXHRcdFx0XHRpZiAoICFwaCApIHtcclxuXHRcdFx0XHRcdGNvbnN0IGRmbHQgICAgICAgPSB0aGlzLmdldF9kZWZhdWx0cygpLnBsYWNlaG9sZGVyIHx8ICctLS0gU2VsZWN0IC0tLSc7XHJcblx0XHRcdFx0XHRkYXRhLnBsYWNlaG9sZGVyID0gZGZsdDtcclxuXHRcdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHRcdGVsLmRhdGFzZXQucGxhY2Vob2xkZXIgPSBTdHJpbmcoIGRmbHQgKTtcclxuXHRcdFx0XHRcdFx0ZWwuZGlzcGF0Y2hFdmVudCggbmV3IEN1c3RvbUV2ZW50KCAnd3BiY19iZmJfZmllbGRfZGF0YV9jaGFuZ2VkJywgeyBidWJibGVzOiB0cnVlLFxyXG5cdFx0XHRcdFx0XHRcdGRldGFpbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB7XHJcblx0XHRcdFx0XHRcdFx0XHRrZXkgIDogJ3BsYWNlaG9sZGVyJyxcclxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlOiBkZmx0XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9ICkgKTtcclxuXHRcdFx0XHRcdFx0Q29yZS5TdHJ1Y3R1cmU/LnVwZGF0ZV9maWVsZF9wcm9wPy4oIGVsLCAncGxhY2Vob2xkZXInLCBkZmx0ICk7XHJcblx0XHRcdFx0XHR9IGNhdGNoICggXyApIHtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuXHRcdC8vIEluc3BlY3RvciBoZWxwZXJzIChzbmFrZV9jYXNlKVxyXG5cdFx0Ly8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcblx0XHRzdGF0aWMgZ2V0X3BhbmVsX3Jvb3QoZWwpIHtcclxuXHRcdFx0cmV0dXJuIGVsPy5jbG9zZXN0Py4oICcud3BiY19iZmJfX2luc3BlY3Rvcl9fYm9keScgKSB8fCBlbD8uY2xvc2VzdD8uKCAnLndwYmNfYmZiX19pbnNwZWN0b3InICkgfHwgbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHRzdGF0aWMgZ2V0X2xpc3QocGFuZWwpIHtcclxuXHRcdFx0cmV0dXJuIHBhbmVsID8gcGFuZWwucXVlcnlTZWxlY3RvciggdGhpcy51aS5saXN0ICkgOiBudWxsO1xyXG5cdFx0fVxyXG5cclxuXHRcdHN0YXRpYyBnZXRfaG9sZGVyKHBhbmVsKSB7XHJcblx0XHRcdHJldHVybiBwYW5lbCA/IHBhbmVsLnF1ZXJ5U2VsZWN0b3IoIHRoaXMudWkuaG9sZGVyICkgOiBudWxsO1xyXG5cdFx0fVxyXG5cclxuXHRcdHN0YXRpYyBtYWtlX3VpZCgpIHtcclxuXHRcdFx0cmV0dXJuICd3cGJjX2luc19hdXRvX29wdF8nICsgTWF0aC5yYW5kb20oKS50b1N0cmluZyggMzYgKS5zbGljZSggMiwgMTAgKTtcclxuXHRcdH1cclxuXHJcblx0XHRzdGF0aWMgYXBwZW5kX3JvdyhwYW5lbCwgZGF0YSkge1xyXG5cdFx0XHRjb25zdCBsaXN0ID0gdGhpcy5nZXRfbGlzdCggcGFuZWwgKTtcclxuXHRcdFx0aWYgKCAhbGlzdCApIHJldHVybjtcclxuXHJcblx0XHRcdGNvbnN0IGlkeCAgPSBsaXN0LmNoaWxkcmVuLmxlbmd0aDtcclxuXHRcdFx0Y29uc3Qgcm93ZCA9IE9iamVjdC5hc3NpZ24oIHsgbGFiZWw6ICcnLCB2YWx1ZTogJycsIHNlbGVjdGVkOiBmYWxzZSwgaW5kZXg6IGlkeCB9LCAoZGF0YSB8fCB7fSkgKTtcclxuXHRcdFx0aWYgKCAhcm93ZC51aWQgKSByb3dkLnVpZCA9IHRoaXMubWFrZV91aWQoKTtcclxuXHJcblx0XHRcdGNvbnN0IHRwbF9pZCA9IHRoaXMub3B0aW9uX3Jvd190ZW1wbGF0ZV9pZDtcclxuXHRcdFx0Y29uc3QgdHBsICAgID0gKHdpbmRvdy53cCAmJiB3cC50ZW1wbGF0ZSkgPyB3cC50ZW1wbGF0ZSggdHBsX2lkICkgOiBudWxsO1xyXG5cdFx0XHRjb25zdCBodG1sICAgPSB0cGwgPyB0cGwoIHJvd2QgKSA6IG51bGw7XHJcblxyXG5cdFx0XHQvLyBJbiBhcHBlbmRfcm93KCkgLT4gZmFsbGJhY2sgSFRNTC5cclxuXHRcdFx0Y29uc3Qgd3JhcCAgICAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnZGl2JyApO1xyXG5cdFx0XHR3cmFwLmlubmVySFRNTCA9IGh0bWwgfHwgKFxyXG5cdFx0XHRcdCc8ZGl2IGNsYXNzPVwid3BiY19iZmJfX29wdGlvbnNfcm93XCIgZGF0YS1pbmRleD1cIicgKyAocm93ZC5pbmRleCB8fCAwKSArICdcIj4nICtcclxuXHRcdFx0XHRcdCc8c3BhbiBjbGFzcz1cIndwYmNfYmZiX19kcmFnLWhhbmRsZVwiPjxzcGFuIGNsYXNzPVwid3BiY19pY25fZHJhZ19pbmRpY2F0b3JcIj48L3NwYW4+PC9zcGFuPicgK1xyXG5cdFx0XHRcdFx0JzxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwid3BiY19iZmJfX29wdC1sYWJlbFwiIHBsYWNlaG9sZGVyPVwiTGFiZWxcIiB2YWx1ZT1cIicgKyAocm93ZC5sYWJlbCB8fCAnJykgKyAnXCI+JyArXHJcblx0XHRcdFx0XHQnPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJ3cGJjX2JmYl9fb3B0LXZhbHVlXCIgcGxhY2Vob2xkZXI9XCJWYWx1ZVwiIHZhbHVlPVwiJyArIChyb3dkLnZhbHVlIHx8ICcnKSArICdcIj4nICtcclxuXHRcdFx0XHRcdCc8ZGl2IGNsYXNzPVwid3BiY19iZmJfX29wdC1zZWxlY3RlZFwiPicgK1xyXG5cdFx0XHRcdFx0XHQnPGRpdiBjbGFzcz1cImluc3BlY3Rvcl9fY29udHJvbCB3cGJjX3VpX190b2dnbGVcIj4nICtcclxuXHRcdFx0XHRcdFx0XHQnPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwid3BiY19iZmJfX29wdC1zZWxlY3RlZC1jaGsgaW5zcGVjdG9yX19pbnB1dFwiIGlkPVwiJyArIHJvd2QudWlkICsgJ1wiIHJvbGU9XCJzd2l0Y2hcIiAnICsgKHJvd2Quc2VsZWN0ZWQgPyAnY2hlY2tlZCBhcmlhLWNoZWNrZWQ9XCJ0cnVlXCInIDogJ2FyaWEtY2hlY2tlZD1cImZhbHNlXCInKSArICc+JyArXHJcblx0XHRcdFx0XHRcdFx0JzxsYWJlbCBjbGFzcz1cIndwYmNfdWlfX3RvZ2dsZV9pY29uX3JhZGlvXCIgZm9yPVwiJyArIHJvd2QudWlkICsgJ1wiPjwvbGFiZWw+JyArXHJcblx0XHRcdFx0XHRcdFx0JzxsYWJlbCBjbGFzcz1cIndwYmNfdWlfX3RvZ2dsZV9sYWJlbFwiIGZvcj1cIicgKyByb3dkLnVpZCArICdcIj5EZWZhdWx0PC9sYWJlbD4nICtcclxuXHRcdFx0XHRcdFx0JzwvZGl2PicgK1xyXG5cdFx0XHRcdFx0JzwvZGl2PicgK1xyXG5cdFx0XHRcdFx0Ly8gMy1kb3QgZHJvcGRvd24gKHVzZXMgZXhpc3RpbmcgcGx1Z2luIGRyb3Bkb3duIEpTKS5cclxuXHRcdFx0XHRcdCc8ZGl2IGNsYXNzPVwid3BiY191aV9lbCB3cGJjX3VpX2VsX2NvbnRhaW5lciB3cGJjX3VpX2VsX19kcm9wZG93blwiPicgK1xyXG5cdFx0XHRcdFx0XHQnPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIGRhdGEtdG9nZ2xlPVwid3BiY19kcm9wZG93blwiIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiIGNsYXNzPVwidWxfZHJvcGRvd25fbWVudV90b2dnbGVcIj4nICtcclxuXHRcdFx0XHRcdFx0XHQnPGkgY2xhc3M9XCJtZW51X2ljb24gaWNvbi0xeCB3cGJjX2ljbl9tb3JlX3ZlcnRcIj48L2k+JyArXHJcblx0XHRcdFx0XHRcdCc8L2E+JyArXHJcblx0XHRcdFx0XHRcdCc8dWwgY2xhc3M9XCJ1bF9kcm9wZG93bl9tZW51XCIgcm9sZT1cIm1lbnVcIiBzdHlsZT1cInJpZ2h0OjBweDsgbGVmdDphdXRvO1wiPicgK1xyXG5cdFx0XHRcdFx0XHRcdCc8bGk+JyArXHJcblx0XHRcdFx0XHRcdFx0XHQnPGEgY2xhc3M9XCJ1bF9kcm9wZG93bl9tZW51X2xpX2FjdGlvblwiIGRhdGEtYWN0aW9uPVwiYWRkX2FmdGVyXCIgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiPicgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQnQWRkIE5ldycgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQnPGkgY2xhc3M9XCJtZW51X2ljb24gaWNvbi0xeCB3cGJjX2ljbl9hZGRfY2lyY2xlXCI+PC9pPicgK1xyXG5cdFx0XHRcdFx0XHRcdFx0JzwvYT4nICtcclxuXHRcdFx0XHRcdFx0XHQnPC9saT4nICtcclxuXHRcdFx0XHRcdFx0XHQnPGxpPicgK1xyXG5cdFx0XHRcdFx0XHRcdFx0JzxhIGNsYXNzPVwidWxfZHJvcGRvd25fbWVudV9saV9hY3Rpb25cIiBkYXRhLWFjdGlvbj1cImR1cGxpY2F0ZVwiIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIj4nICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0J0R1cGxpY2F0ZScgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQnPGkgY2xhc3M9XCJtZW51X2ljb24gaWNvbi0xeCB3cGJjX2ljbl9jb250ZW50X2NvcHlcIj48L2k+JyArXHJcblx0XHRcdFx0XHRcdFx0XHQnPC9hPicgK1xyXG5cdFx0XHRcdFx0XHRcdCc8L2xpPicgK1xyXG5cdFx0XHRcdFx0XHRcdCc8bGkgY2xhc3M9XCJkaXZpZGVyXCI+PC9saT4nICtcclxuXHRcdFx0XHRcdFx0XHQnPGxpPicgK1xyXG5cdFx0XHRcdFx0XHRcdFx0JzxhIGNsYXNzPVwidWxfZHJvcGRvd25fbWVudV9saV9hY3Rpb25cIiBkYXRhLWFjdGlvbj1cInJlbW92ZVwiIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIj4nICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0J1JlbW92ZScgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQnPGkgY2xhc3M9XCJtZW51X2ljb24gaWNvbi0xeCB3cGJjX2ljbl9kZWxldGVfb3V0bGluZVwiPjwvaT4nICtcclxuXHRcdFx0XHRcdFx0XHRcdCc8L2E+JyArXHJcblx0XHRcdFx0XHRcdFx0JzwvbGk+JyArXHJcblx0XHRcdFx0XHRcdCc8L3VsPicgK1xyXG5cdFx0XHRcdFx0JzwvZGl2PicgK1xyXG5cdFx0XHRcdCc8L2Rpdj4nXHJcblx0XHRcdCk7XHJcblxyXG5cdFx0XHRjb25zdCBub2RlID0gd3JhcC5maXJzdEVsZW1lbnRDaGlsZDtcclxuXHRcdFx0IGlmICghIG5vZGUpIHtcclxuXHRcdFx0XHQgcmV0dXJuO1xyXG5cdFx0XHQgfVxyXG5cdFx0XHQvLyBwcmUtaGlkZSBWYWx1ZSBpbnB1dCBpZiB0b2dnbGUgaXMgT0ZGICoqYmVmb3JlKiogYXBwZW5kaW5nLlxyXG5cdFx0XHRjb25zdCBkaWZmZXJzID0gdGhpcy5pc192YWx1ZV9kaWZmZXJzX2VuYWJsZWQoIHBhbmVsICk7XHJcblx0XHRcdGNvbnN0IHZhbEluICAgPSBub2RlLnF1ZXJ5U2VsZWN0b3IoIHRoaXMudWkudmFsdWUgKTtcclxuXHRcdFx0Y29uc3QgbGJsSW4gICA9IG5vZGUucXVlcnlTZWxlY3RvciggdGhpcy51aS5sYWJlbCApO1xyXG5cclxuXHRcdFx0aWYgKCAhZGlmZmVycyAmJiB2YWxJbiApIHtcclxuXHRcdFx0XHRpZiAoICF2YWxJbi5kYXRhc2V0LmNhY2hlZF92YWx1ZSApIHtcclxuXHRcdFx0XHRcdHZhbEluLmRhdGFzZXQuY2FjaGVkX3ZhbHVlID0gdmFsSW4udmFsdWUgfHwgJyc7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmICggbGJsSW4gKSB2YWxJbi52YWx1ZSA9IHRoaXMuYnVpbGRfdmFsdWVfZnJvbV9sYWJlbCggbGJsSW4udmFsdWUsIGZhbHNlICk7XHJcblx0XHRcdFx0dmFsSW4uc2V0QXR0cmlidXRlKCAnZGlzYWJsZWQnLCAnZGlzYWJsZWQnICk7XHJcblx0XHRcdFx0dmFsSW4uc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuXHRcdFx0fVxyXG5cclxuXHJcblx0XHRcdHRoaXMuaW5pdF9yb3dfZnJlc2hfZmxhZ3MoIG5vZGUgKTtcclxuXHRcdFx0bGlzdC5hcHBlbmRDaGlsZCggbm9kZSApO1xyXG5cclxuXHRcdFx0Ly8gS2VlcCB5b3VyIGV4aXN0aW5nIHBvc3QtYXBwZW5kIHN5bmMgYXMgYSBzYWZldHkgbmV0XHJcblx0XHRcdHRoaXMuc3luY192YWx1ZV9pbnB1dHNfdmlzaWJpbGl0eSggcGFuZWwgKTtcclxuXHRcdH1cclxuXHJcblx0XHRzdGF0aWMgY2xvc2VfZHJvcGRvd24oYW5jaG9yX2VsKSB7XHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0dmFyIHJvb3QgPSBhbmNob3JfZWw/LmNsb3Nlc3Q/LiggdGhpcy51aS5tZW51X3Jvb3QgKTtcclxuXHRcdFx0XHRpZiAoIHJvb3QgKSB7XHJcblx0XHRcdFx0XHQvLyBJZiB5b3VyIGRyb3Bkb3duIHRvZ2dsZXIgdG9nZ2xlcyBhIGNsYXNzIGxpa2UgJ29wZW4nLCBjbG9zZSBpdC5cclxuXHRcdFx0XHRcdHJvb3QuY2xhc3NMaXN0LnJlbW92ZSggJ29wZW4nICk7XHJcblx0XHRcdFx0XHQvLyBPciBpZiBpdCByZWxpZXMgb24gYXJpYS1leHBhbmRlZCBvbiB0aGUgdG9nZ2xlLlxyXG5cdFx0XHRcdFx0dmFyIHQgPSByb290LnF1ZXJ5U2VsZWN0b3IoIHRoaXMudWkubWVudV90b2dnbGUgKTtcclxuXHRcdFx0XHRcdGlmICggdCApIHtcclxuXHRcdFx0XHRcdFx0dC5zZXRBdHRyaWJ1dGUoICdhcmlhLWV4cGFuZGVkJywgJ2ZhbHNlJyApO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBjYXRjaCAoIF8gKSB7IH1cclxuXHRcdH1cclxuXHJcblx0XHRzdGF0aWMgaW5zZXJ0X2FmdGVyKG5ld19ub2RlLCByZWZfbm9kZSkge1xyXG5cdFx0XHRpZiAoIHJlZl9ub2RlPy5wYXJlbnROb2RlICkge1xyXG5cdFx0XHRcdGlmICggcmVmX25vZGUubmV4dFNpYmxpbmcgKSB7XHJcblx0XHRcdFx0XHRyZWZfbm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSggbmV3X25vZGUsIHJlZl9ub2RlLm5leHRTaWJsaW5nICk7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdHJlZl9ub2RlLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQoIG5ld19ub2RlICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0c3RhdGljIGNvbW1pdF9vcHRpb25zKHBhbmVsKSB7XHJcblx0XHRcdGNvbnN0IGxpc3QgICA9IHRoaXMuZ2V0X2xpc3QoIHBhbmVsICk7XHJcblx0XHRcdGNvbnN0IGhvbGRlciA9IHRoaXMuZ2V0X2hvbGRlciggcGFuZWwgKTtcclxuXHRcdFx0aWYgKCAhbGlzdCB8fCAhaG9sZGVyICkgcmV0dXJuO1xyXG5cclxuXHRcdFx0Y29uc3QgZGlmZmVycyA9IHRoaXMuaXNfdmFsdWVfZGlmZmVyc19lbmFibGVkKCBwYW5lbCApO1xyXG5cclxuXHRcdFx0Y29uc3Qgcm93cyAgICA9IGxpc3QucXVlcnlTZWxlY3RvckFsbCggdGhpcy51aS5yb3cgKTtcclxuXHRcdFx0Y29uc3Qgb3B0aW9ucyA9IFtdO1xyXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrICkge1xyXG5cdFx0XHRcdGNvbnN0IHIgICAgICA9IHJvd3NbaV07XHJcblx0XHRcdFx0Y29uc3QgbGJsX2luID0gci5xdWVyeVNlbGVjdG9yKCB0aGlzLnVpLmxhYmVsICk7XHJcblx0XHRcdFx0Y29uc3QgdmFsX2luID0gci5xdWVyeVNlbGVjdG9yKCB0aGlzLnVpLnZhbHVlICk7XHJcblx0XHRcdFx0Y29uc3QgY2hrICAgID0gci5xdWVyeVNlbGVjdG9yKCB0aGlzLnVpLnRvZ2dsZSApO1xyXG5cclxuXHRcdFx0XHRjb25zdCBsYmwgPSAobGJsX2luICYmIGxibF9pbi52YWx1ZSkgfHwgJyc7XHJcblx0XHRcdFx0bGV0IHZhbCAgID0gKHZhbF9pbiAmJiB2YWxfaW4udmFsdWUpIHx8ICcnO1xyXG5cclxuXHRcdFx0XHQvLyBJZiBzaW5nbGUtaW5wdXQgbW9kZSAtPiBoYXJkIG1pcnJvciB0byBsYWJlbC5cclxuXHRcdFx0XHRpZiAoICEgZGlmZmVycyApIHtcclxuXHRcdFx0XHRcdC8vIHNpbmdsZS1pbnB1dCBtb2RlOiBtaXJyb3IgTGFiZWwsIG1pbmltYWwgZXNjYXBpbmcgKG5vIHNsdWcpLlxyXG5cdFx0XHRcdFx0dmFsID0gdGhpcy5idWlsZF92YWx1ZV9mcm9tX2xhYmVsKCBsYmwsIC8qZGlmZmVycz0qL2ZhbHNlICk7XHJcblx0XHRcdFx0XHRpZiAoIHZhbF9pbiApIHtcclxuXHRcdFx0XHRcdFx0dmFsX2luLnZhbHVlID0gdmFsOyAgIC8vIGtlZXAgaGlkZGVuIGlucHV0IGluIHN5bmMgZm9yIGFueSBwcmV2aWV3cy9kZWJ1Zy5cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGNvbnN0IHNlbCA9ICEhKGNoayAmJiBjaGsuY2hlY2tlZCk7XHJcblx0XHRcdFx0b3B0aW9ucy5wdXNoKCB7IGxhYmVsOiBsYmwsIHZhbHVlOiB2YWwsIHNlbGVjdGVkOiBzZWwgfSApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdGhvbGRlci52YWx1ZSA9IEpTT04uc3RyaW5naWZ5KCBvcHRpb25zICk7XHJcblx0XHRcdFx0aG9sZGVyLmRpc3BhdGNoRXZlbnQoIG5ldyBFdmVudCggJ2lucHV0JywgeyBidWJibGVzOiB0cnVlIH0gKSApO1xyXG5cdFx0XHRcdGhvbGRlci5kaXNwYXRjaEV2ZW50KCBuZXcgRXZlbnQoICdjaGFuZ2UnLCB7IGJ1YmJsZXM6IHRydWUgfSApICk7XHJcblx0XHRcdFx0cGFuZWwuZGlzcGF0Y2hFdmVudCggbmV3IEN1c3RvbUV2ZW50KCAnd3BiY19iZmJfZmllbGRfZGF0YV9jaGFuZ2VkJywge1xyXG5cdFx0XHRcdFx0YnViYmxlczogdHJ1ZSwgZGV0YWlsOiB7XHJcblx0XHRcdFx0XHRcdGtleTogJ29wdGlvbnMnLCB2YWx1ZTogb3B0aW9uc1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0gKSApO1xyXG5cdFx0XHR9IGNhdGNoICggXyApIHtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0dGhpcy5zeW5jX2RlZmF1bHRfdmFsdWVfbG9jayggcGFuZWwgKTtcclxuXHRcdFx0dGhpcy5zeW5jX3BsYWNlaG9sZGVyX2xvY2soIHBhbmVsICk7XHJcblxyXG5cdFx0XHQvLyBNaXJyb3IgdG8gdGhlIHNlbGVjdGVkIGZpZWxkIGVsZW1lbnQgc28gY2FudmFzL2V4cG9ydCBzZWVzIGN1cnJlbnQgb3B0aW9ucyBpbW1lZGlhdGVseS5cclxuXHRcdFx0Y29uc3QgZmllbGQgPSBwYW5lbC5fX3NlbGVjdGJhc2VfZmllbGRcclxuXHRcdFx0XHR8fCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCAnLndwYmNfYmZiX19maWVsZC5pcy1zZWxlY3RlZCwgLndwYmNfYmZiX19maWVsZC0tc2VsZWN0ZWQnICk7XHJcblx0XHRcdGlmICggZmllbGQgKSB7XHJcblx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdGZpZWxkLmRhdGFzZXQub3B0aW9ucyA9IEpTT04uc3RyaW5naWZ5KCBvcHRpb25zICk7XHJcblx0XHRcdFx0fSBjYXRjaCAoIF8gKSB7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdENvcmUuU3RydWN0dXJlPy51cGRhdGVfZmllbGRfcHJvcD8uKCBmaWVsZCwgJ29wdGlvbnMnLCBvcHRpb25zICk7XHJcblx0XHRcdFx0ZmllbGQuZGlzcGF0Y2hFdmVudCggbmV3IEN1c3RvbUV2ZW50KCAnd3BiY19iZmJfZmllbGRfZGF0YV9jaGFuZ2VkJywge1xyXG5cdFx0XHRcdFx0YnViYmxlczogdHJ1ZSwgZGV0YWlsOiB7IGtleTogJ29wdGlvbnMnLCB2YWx1ZTogb3B0aW9ucyB9XHJcblx0XHRcdFx0fSApICk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblxyXG5cdFx0c3RhdGljIGVuc3VyZV9zb3J0YWJsZShwYW5lbCkge1xyXG5cclxuXHRcdFx0Y29uc3QgbGlzdCA9IHRoaXMuZ2V0X2xpc3QoIHBhbmVsICk7XHJcblx0XHRcdGlmICggISBsaXN0ICkge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRjb25zdCBleGlzdGluZyA9IHdpbmRvdy5Tb3J0YWJsZT8uZ2V0Py4oIGxpc3QgKTtcclxuXHRcdFx0XHRpZiAoIGV4aXN0aW5nICkge1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Y29uc3QgYnVpbGRlciA9IHdpbmRvdy53cGJjX2JmYl9hcGk/LmdldF9idWlsZGVyPy4oKSB8fCB3aW5kb3cud3BiY19iZmIgfHwgbnVsbDtcclxuXHJcblx0XHRcdFx0Ly8gUHJlZmVyIHRoZSBzaGFyZWQgU29ydGFibGUgbWFuYWdlciBzbyB0aGUgc2lkZWJhciBsaXN0IHVzZXNcclxuXHRcdFx0XHQvLyB0aGUgZGVkaWNhdGVkIFwic2ltcGxlX2xpc3RcIiBjb25maWcgaW5zdGVhZCBvZiB0aGUgY2FudmFzIGNvbmZpZy5cclxuXHRcdFx0XHRpZiAoIGJ1aWxkZXIgJiYgYnVpbGRlci5zb3J0YWJsZSAmJiB0eXBlb2YgYnVpbGRlci5zb3J0YWJsZS5lbnN1cmUgPT09ICdmdW5jdGlvbicgKSB7XHJcblxyXG5cdFx0XHRcdFx0YnVpbGRlci5zb3J0YWJsZS5lbnN1cmUoXHJcblx0XHRcdFx0XHRcdGxpc3QsXHJcblx0XHRcdFx0XHRcdCdjYW52YXMnLFxyXG5cdFx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdFx0c29ydGFibGVfa2luZCAgICAgOiAnc2ltcGxlX2xpc3QnLFxyXG5cdFx0XHRcdFx0XHRcdGhhbmRsZV9zZWxlY3RvciAgIDogdGhpcy51aS5kcmFnX2hhbmRsZSxcclxuXHRcdFx0XHRcdFx0XHRkcmFnZ2FibGVfc2VsZWN0b3I6IHRoaXMudWkucm93LFxyXG5cdFx0XHRcdFx0XHRcdG9uVXBkYXRlICAgICAgICAgIDogKCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5jb21taXRfb3B0aW9ucyggcGFuZWwgKTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdH0gZWxzZSBpZiAoIHdpbmRvdy5Tb3J0YWJsZT8uY3JlYXRlICkge1xyXG5cdFx0XHRcdFx0Ly8gRmFsbGJhY2sgaWYgYnVpbGRlciBpcyBub3QgcmVhZHkgZm9yIHNvbWUgcmVhc29uLlxyXG5cdFx0XHRcdFx0d2luZG93LlNvcnRhYmxlLmNyZWF0ZShcclxuXHRcdFx0XHRcdFx0bGlzdCxcclxuXHRcdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRcdGhhbmRsZSAgICAgICAgICAgOiB0aGlzLnVpLmRyYWdfaGFuZGxlLFxyXG5cdFx0XHRcdFx0XHRcdGRyYWdnYWJsZSAgICAgICAgOiB0aGlzLnVpLnJvdyxcclxuXHRcdFx0XHRcdFx0XHRhbmltYXRpb24gICAgICAgIDogMTIwLFxyXG5cdFx0XHRcdFx0XHRcdGZvcmNlRmFsbGJhY2sgICAgOiB0cnVlLFxyXG5cdFx0XHRcdFx0XHRcdGZhbGxiYWNrT25Cb2R5ICAgOiBmYWxzZSxcclxuXHRcdFx0XHRcdFx0XHRmYWxsYmFja1RvbGVyYW5jZTogOCxcclxuXHRcdFx0XHRcdFx0XHRyZW1vdmVDbG9uZU9uSGlkZTogdHJ1ZSxcclxuXHRcdFx0XHRcdFx0XHRvblVwZGF0ZSAgICAgICAgIDogKCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5jb21taXRfb3B0aW9ucyggcGFuZWwgKTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRsaXN0LmRhdGFzZXQuc29ydGFibGVfaW5pdCA9ICcxJztcclxuXHJcblx0XHRcdH0gY2F0Y2ggKCBlICkge1xyXG5cdFx0XHRcdHdpbmRvdy5fd3BiYz8uZGV2Py5lcnJvcj8uKCAnU2VsZWN0X0Jhc2UuZW5zdXJlX3NvcnRhYmxlJywgZSApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0c3RhdGljIHJlYnVpbGRfaWZfZW1wdHkocGFuZWwpIHtcclxuXHRcdFx0Y29uc3QgbGlzdCAgID0gdGhpcy5nZXRfbGlzdCggcGFuZWwgKTtcclxuXHRcdFx0Y29uc3QgaG9sZGVyID0gdGhpcy5nZXRfaG9sZGVyKCBwYW5lbCApO1xyXG5cdFx0XHRpZiAoICFsaXN0IHx8ICFob2xkZXIgfHwgbGlzdC5jaGlsZHJlbi5sZW5ndGggKSByZXR1cm47XHJcblxyXG5cdFx0XHRsZXQgZGF0YSA9IFtdO1xyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdGRhdGEgPSBKU09OLnBhcnNlKCBob2xkZXIudmFsdWUgfHwgJ1tdJyApO1xyXG5cdFx0XHR9IGNhdGNoICggXyApIHtcclxuXHRcdFx0XHRkYXRhID0gW107XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICggIUFycmF5LmlzQXJyYXkoIGRhdGEgKSB8fCAhZGF0YS5sZW5ndGggKSB7XHJcblx0XHRcdFx0ZGF0YSA9ICh0aGlzLmdldF9kZWZhdWx0cygpLm9wdGlvbnMgfHwgW10pLnNsaWNlKCAwICk7XHJcblx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdGhvbGRlci52YWx1ZSA9IEpTT04uc3RyaW5naWZ5KCBkYXRhICk7XHJcblx0XHRcdFx0XHRob2xkZXIuZGlzcGF0Y2hFdmVudCggbmV3IEV2ZW50KCAnaW5wdXQnLCB7IGJ1YmJsZXM6IHRydWUgfSApICk7XHJcblx0XHRcdFx0XHRob2xkZXIuZGlzcGF0Y2hFdmVudCggbmV3IEV2ZW50KCAnY2hhbmdlJywgeyBidWJibGVzOiB0cnVlIH0gKSApO1xyXG5cdFx0XHRcdH0gY2F0Y2ggKCBfICkge1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKyApIHtcclxuXHRcdFx0XHR0aGlzLmFwcGVuZF9yb3coIHBhbmVsLCB7XHJcblx0XHRcdFx0XHRsYWJlbCAgIDogZGF0YVtpXT8ubGFiZWwgfHwgJycsXHJcblx0XHRcdFx0XHR2YWx1ZSAgIDogZGF0YVtpXT8udmFsdWUgfHwgJycsXHJcblx0XHRcdFx0XHRzZWxlY3RlZDogISFkYXRhW2ldPy5zZWxlY3RlZCxcclxuXHRcdFx0XHRcdGluZGV4ICAgOiBpLFxyXG5cdFx0XHRcdFx0dWlkICAgICA6IHRoaXMubWFrZV91aWQoKVxyXG5cdFx0XHRcdH0gKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0dGhpcy5zeW5jX2RlZmF1bHRfdmFsdWVfbG9jayggcGFuZWwgKTtcclxuXHRcdFx0dGhpcy5zeW5jX3BsYWNlaG9sZGVyX2xvY2soIHBhbmVsICk7XHJcblx0XHRcdHRoaXMuc3luY192YWx1ZV9pbnB1dHNfdmlzaWJpbGl0eSggcGFuZWwgKTtcclxuXHRcdH1cclxuXHJcblx0XHRzdGF0aWMgaGFzX3Jvd19kZWZhdWx0cyhwYW5lbCkge1xyXG5cdFx0XHRjb25zdCBjaGVja3MgPSBwYW5lbD8ucXVlcnlTZWxlY3RvckFsbCggdGhpcy51aS50b2dnbGUgKTtcclxuXHRcdFx0aWYgKCAhY2hlY2tzPy5sZW5ndGggKSByZXR1cm4gZmFsc2U7XHJcblx0XHRcdGZvciAoIGxldCBpID0gMDsgaSA8IGNoZWNrcy5sZW5ndGg7IGkrKyApIGlmICggY2hlY2tzW2ldLmNoZWNrZWQgKSByZXR1cm4gdHJ1ZTtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHN0YXRpYyBpc19tdWx0aXBsZV9lbmFibGVkKHBhbmVsKSB7XHJcblx0XHRcdGNvbnN0IGNoayA9IHBhbmVsPy5xdWVyeVNlbGVjdG9yKCB0aGlzLnVpLm11bHRpcGxlX2NoayApO1xyXG5cdFx0XHRyZXR1cm4gISEoY2hrICYmIGNoay5jaGVja2VkKTtcclxuXHRcdH1cclxuXHJcblx0XHRzdGF0aWMgaGFzX3RleHRfZGVmYXVsdF92YWx1ZShwYW5lbCkge1xyXG5cdFx0XHRjb25zdCBkdiA9IHBhbmVsPy5xdWVyeVNlbGVjdG9yKCB0aGlzLnVpLmRlZmF1bHRfdGV4dCApO1xyXG5cdFx0XHRyZXR1cm4gISEoZHYgJiYgU3RyaW5nKCBkdi52YWx1ZSB8fCAnJyApLnRyaW0oKS5sZW5ndGgpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHN0YXRpYyBzeW5jX2RlZmF1bHRfdmFsdWVfbG9jayhwYW5lbCkge1xyXG5cdFx0XHRjb25zdCBpbnB1dCA9IHBhbmVsPy5xdWVyeVNlbGVjdG9yKCB0aGlzLnVpLmRlZmF1bHRfdGV4dCApO1xyXG5cdFx0XHRjb25zdCBub3RlICA9IHBhbmVsPy5xdWVyeVNlbGVjdG9yKCAnLmpzLWRlZmF1bHQtdmFsdWUtbm90ZScgKTtcclxuXHRcdFx0aWYgKCAhaW5wdXQgKSByZXR1cm47XHJcblxyXG5cdFx0XHRjb25zdCBsb2NrICAgICA9IHRoaXMuaGFzX3Jvd19kZWZhdWx0cyggcGFuZWwgKTtcclxuXHRcdFx0aW5wdXQuZGlzYWJsZWQgPSAhIWxvY2s7XHJcblx0XHRcdGlmICggbG9jayApIHtcclxuXHRcdFx0XHRpbnB1dC5zZXRBdHRyaWJ1dGUoICdhcmlhLWRpc2FibGVkJywgJ3RydWUnICk7XHJcblx0XHRcdFx0aWYgKCBub3RlICkgbm90ZS5zdHlsZS5kaXNwbGF5ID0gJyc7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0aW5wdXQucmVtb3ZlQXR0cmlidXRlKCAnYXJpYS1kaXNhYmxlZCcgKTtcclxuXHRcdFx0XHRpZiAoIG5vdGUgKSBub3RlLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRzdGF0aWMgc3luY19wbGFjZWhvbGRlcl9sb2NrKHBhbmVsKSB7XHJcblx0XHRcdGNvbnN0IGlucHV0ID0gcGFuZWw/LnF1ZXJ5U2VsZWN0b3IoIHRoaXMudWkucGxhY2Vob2xkZXJfaW5wdXQgKTtcclxuXHRcdFx0Y29uc3Qgbm90ZSAgPSBwYW5lbD8ucXVlcnlTZWxlY3RvciggdGhpcy51aS5wbGFjZWhvbGRlcl9ub3RlICk7XHJcblxyXG5cdFx0XHQvLyBORVc6IGNvbXB1dGUgbXVsdGlwbGUgYW5kIHRvZ2dsZSByb3cgdmlzaWJpbGl0eVxyXG5cdFx0XHRjb25zdCBpc011bHRpcGxlICAgICA9IHRoaXMuaXNfbXVsdGlwbGVfZW5hYmxlZCggcGFuZWwgKTtcclxuXHRcdFx0Y29uc3QgcGxhY2Vob2xkZXJSb3cgPSBpbnB1dD8uY2xvc2VzdCggJy5pbnNwZWN0b3JfX3JvdycgKSB8fCBudWxsO1xyXG5cdFx0XHRjb25zdCBzaXplSW5wdXQgICAgICA9IHBhbmVsPy5xdWVyeVNlbGVjdG9yKCB0aGlzLnVpLnNpemVfaW5wdXQgKSB8fCBudWxsO1xyXG5cdFx0XHRjb25zdCBzaXplUm93ICAgICAgICA9IHNpemVJbnB1dD8uY2xvc2VzdCggJy5pbnNwZWN0b3JfX3JvdycgKSB8fCBudWxsO1xyXG5cclxuXHRcdFx0Ly8gU2hvdyBwbGFjZWhvbGRlciBvbmx5IGZvciBzaW5nbGUtc2VsZWN0OyBzaG93IHNpemUgb25seSBmb3IgbXVsdGlwbGVcclxuXHRcdFx0aWYgKCBwbGFjZWhvbGRlclJvdyApIHBsYWNlaG9sZGVyUm93LnN0eWxlLmRpc3BsYXkgPSBpc011bHRpcGxlID8gJ25vbmUnIDogJyc7XHJcblx0XHRcdGlmICggc2l6ZVJvdyApIHNpemVSb3cuc3R5bGUuZGlzcGxheSA9IGlzTXVsdGlwbGUgPyAnJyA6ICdub25lJztcclxuXHJcblx0XHRcdC8vIEV4aXN0aW5nIGJlaGF2aW9yIChrZWVwIGFzLWlzKVxyXG5cdFx0XHRpZiAoICFpbnB1dCApIHJldHVybjtcclxuXHJcblx0XHRcdGNvbnN0IGxvY2sgPSBpc011bHRpcGxlIHx8IHRoaXMuaGFzX3Jvd19kZWZhdWx0cyggcGFuZWwgKSB8fCB0aGlzLmhhc190ZXh0X2RlZmF1bHRfdmFsdWUoIHBhbmVsICk7XHJcblx0XHRcdGlmICggbm90ZSAmJiAhbm90ZS5pZCApIG5vdGUuaWQgPSAnd3BiY19wbGFjZWhvbGRlcl9ub3RlXycgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKCAzNiApLnNsaWNlKCAyLCAxMCApO1xyXG5cclxuXHRcdFx0aW5wdXQuZGlzYWJsZWQgPSAhIWxvY2s7XHJcblx0XHRcdGlmICggbG9jayApIHtcclxuXHRcdFx0XHRpbnB1dC5zZXRBdHRyaWJ1dGUoICdhcmlhLWRpc2FibGVkJywgJ3RydWUnICk7XHJcblx0XHRcdFx0aWYgKCBub3RlICkge1xyXG5cdFx0XHRcdFx0bm90ZS5zdHlsZS5kaXNwbGF5ID0gJyc7XHJcblx0XHRcdFx0XHRpbnB1dC5zZXRBdHRyaWJ1dGUoICdhcmlhLWRlc2NyaWJlZGJ5Jywgbm90ZS5pZCApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRpbnB1dC5yZW1vdmVBdHRyaWJ1dGUoICdhcmlhLWRpc2FibGVkJyApO1xyXG5cdFx0XHRcdGlucHV0LnJlbW92ZUF0dHJpYnV0ZSggJ2FyaWEtZGVzY3JpYmVkYnknICk7XHJcblx0XHRcdFx0aWYgKCBub3RlICkgbm90ZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0c3RhdGljIGVuZm9yY2Vfc2luZ2xlX2RlZmF1bHQocGFuZWwsIGNsaWNrZWQpIHtcclxuXHRcdFx0aWYgKCB0aGlzLmlzX211bHRpcGxlX2VuYWJsZWQoIHBhbmVsICkgKSByZXR1cm47XHJcblxyXG5cdFx0XHRjb25zdCBjaGVja3MgPSBwYW5lbD8ucXVlcnlTZWxlY3RvckFsbCggdGhpcy51aS50b2dnbGUgKTtcclxuXHRcdFx0aWYgKCAhY2hlY2tzPy5sZW5ndGggKSByZXR1cm47XHJcblxyXG5cdFx0XHRpZiAoIGNsaWNrZWQgJiYgY2xpY2tlZC5jaGVja2VkICkge1xyXG5cdFx0XHRcdGZvciAoIGxldCBpID0gMDsgaSA8IGNoZWNrcy5sZW5ndGg7IGkrKyApIGlmICggY2hlY2tzW2ldICE9PSBjbGlja2VkICkge1xyXG5cdFx0XHRcdFx0Y2hlY2tzW2ldLmNoZWNrZWQgPSBmYWxzZTtcclxuXHRcdFx0XHRcdGNoZWNrc1tpXS5zZXRBdHRyaWJ1dGUoICdhcmlhLWNoZWNrZWQnLCAnZmFsc2UnICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGNsaWNrZWQuc2V0QXR0cmlidXRlKCAnYXJpYS1jaGVja2VkJywgJ3RydWUnICk7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRsZXQga2VwdCA9IGZhbHNlO1xyXG5cdFx0XHRmb3IgKCBsZXQgaiA9IDA7IGogPCBjaGVja3MubGVuZ3RoOyBqKysgKSBpZiAoIGNoZWNrc1tqXS5jaGVja2VkICkge1xyXG5cdFx0XHRcdGlmICggIWtlcHQgKSB7XHJcblx0XHRcdFx0XHRrZXB0ID0gdHJ1ZTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0Y2hlY2tzW2pdLmNoZWNrZWQgPSBmYWxzZTtcclxuXHRcdFx0XHRcdGNoZWNrc1tqXS5zZXRBdHRyaWJ1dGUoICdhcmlhLWNoZWNrZWQnLCAnZmFsc2UnICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHR0aGlzLnN5bmNfZGVmYXVsdF92YWx1ZV9sb2NrKCBwYW5lbCApO1xyXG5cdFx0XHR0aGlzLnN5bmNfcGxhY2Vob2xkZXJfbG9jayggcGFuZWwgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyAtLS0tIG9uZS10aW1lIGJvb3RzdHJhcCBvZiBhIHBhbmVsIC0tLS1cclxuXHRcdHN0YXRpYyBib290c3RyYXBfcGFuZWwocGFuZWwpIHtcclxuXHRcdFx0aWYgKCAhcGFuZWwgKSByZXR1cm47XHJcblx0XHRcdGlmICggIXBhbmVsLnF1ZXJ5U2VsZWN0b3IoICcud3BiY19iZmJfX29wdGlvbnNfZWRpdG9yJyApICkgcmV0dXJuOyAvLyBvbmx5IHNlbGVjdC1saWtlIFVJc1xyXG5cdFx0XHRpZiAoIHBhbmVsLmRhdGFzZXQuc2VsZWN0YmFzZV9ib290c3RyYXBwZWQgPT09ICcxJyApIHtcclxuXHRcdFx0XHR0aGlzLmVuc3VyZV9zb3J0YWJsZSggcGFuZWwgKTtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHRoaXMucmVidWlsZF9pZl9lbXB0eSggcGFuZWwgKTtcclxuXHRcdFx0dGhpcy5lbnN1cmVfc29ydGFibGUoIHBhbmVsICk7XHJcblx0XHRcdHBhbmVsLmRhdGFzZXQuc2VsZWN0YmFzZV9ib290c3RyYXBwZWQgPSAnMSc7XHJcblxyXG5cdFx0XHR0aGlzLnN5bmNfZGVmYXVsdF92YWx1ZV9sb2NrKCBwYW5lbCApO1xyXG5cdFx0XHR0aGlzLnN5bmNfcGxhY2Vob2xkZXJfbG9jayggcGFuZWwgKTtcclxuXHRcdFx0dGhpcy5zeW5jX3ZhbHVlX2lucHV0c192aXNpYmlsaXR5KCBwYW5lbCApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIC0tLS0gaG9vayBpbnRvIGluc3BlY3RvciBsaWZlY3ljbGUgKGZpcmVzIE9OQ0UpIC0tLS1cclxuXHRcdHN0YXRpYyB3aXJlX29uY2UoKSB7XHJcblx0XHRcdGlmICggQ29yZS5fX3NlbGVjdGJhc2Vfd2lyZWQgKSByZXR1cm47XHJcblx0XHRcdENvcmUuX19zZWxlY3RiYXNlX3dpcmVkID0gdHJ1ZTtcclxuXHJcblx0XHRcdGNvbnN0IG9uX3JlYWR5X29yX3JlbmRlciA9IChldikgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHBhbmVsID0gZXY/LmRldGFpbD8ucGFuZWw7XHJcblx0XHRcdFx0Y29uc3QgZmllbGQgPSBldj8uZGV0YWlsPy5lbCB8fCBldj8uZGV0YWlsPy5maWVsZCB8fCBudWxsO1xyXG5cdFx0XHRcdGlmICggIXBhbmVsICkgcmV0dXJuO1xyXG5cdFx0XHRcdGlmICggZmllbGQgKSBwYW5lbC5fX3NlbGVjdGJhc2VfZmllbGQgPSBmaWVsZDtcclxuXHRcdFx0XHR0aGlzLmJvb3RzdHJhcF9wYW5lbCggcGFuZWwgKTtcclxuXHRcdFx0XHQvLyBJZiB0aGUgaW5zcGVjdG9yIHJvb3Qgd2FzIHJlbW91bnRlZCwgZW5zdXJlIHJvb3QgbGlzdGVuZXJzIGFyZSAocmUpYm91bmQuXHJcblx0XHRcdFx0dGhpcy53aXJlX3Jvb3RfbGlzdGVuZXJzKCk7XHJcblx0XHRcdH07XHJcblxyXG5cdFx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCAnd3BiY19iZmJfaW5zcGVjdG9yX3JlYWR5Jywgb25fcmVhZHlfb3JfcmVuZGVyICk7XHJcblx0XHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoICd3cGJjX2JmYl9pbnNwZWN0b3JfcmVuZGVyJywgb25fcmVhZHlfb3JfcmVuZGVyICk7XHJcblxyXG5cdFx0XHR0aGlzLndpcmVfcm9vdF9saXN0ZW5lcnMoKTtcclxuXHRcdH1cclxuXHJcblx0XHRzdGF0aWMgd2lyZV9yb290X2xpc3RlbmVycygpIHtcclxuXHJcblx0XHRcdC8vIElmIGFscmVhZHkgd2lyZWQgQU5EIHRoZSBzdG9yZWQgcm9vdCBpcyBzdGlsbCBpbiB0aGUgRE9NLCBiYWlsIG91dC5cclxuXHRcdFx0aWYgKCB0aGlzLl9fcm9vdF93aXJlZCAmJiB0aGlzLl9fcm9vdF9ub2RlPy5pc0Nvbm5lY3RlZCApIHJldHVybjtcclxuXHJcblx0XHRcdGNvbnN0IHJvb3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ3dwYmNfYmZiX19pbnNwZWN0b3InICk7XHJcblx0XHRcdGlmICggIXJvb3QgKSB7XHJcblx0XHRcdFx0Ly8gUm9vdCBtaXNzaW5nIChlLmcuLCBTUEEgcmUtcmVuZGVyKSDigJQgY2xlYXIgZmxhZ3Mgc28gd2UgY2FuIHdpcmUgbGF0ZXIuXHJcblx0XHRcdFx0dGhpcy5fX3Jvb3Rfd2lyZWQgPSBmYWxzZTtcclxuXHRcdFx0XHR0aGlzLl9fcm9vdF9ub2RlICA9IG51bGw7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHR0aGlzLl9fcm9vdF9ub2RlICAgICAgICAgICAgICAgICAgID0gcm9vdDtcclxuXHRcdFx0dGhpcy5fX3Jvb3Rfd2lyZWQgICAgICAgICAgICAgICAgICA9IHRydWU7XHJcblx0XHRcdHJvb3QuZGF0YXNldC5zZWxlY3RiYXNlX3Jvb3Rfd2lyZWQgPSAnMSc7XHJcblxyXG5cdFx0XHRjb25zdCBnZXRfcGFuZWwgPSAodGFyZ2V0KSA9PlxyXG5cdFx0XHRcdHRhcmdldD8uY2xvc2VzdD8uKCAnLndwYmNfYmZiX19pbnNwZWN0b3JfX2JvZHknICkgfHxcclxuXHRcdFx0XHRyb290LnF1ZXJ5U2VsZWN0b3IoICcud3BiY19iZmJfX2luc3BlY3Rvcl9fYm9keScgKSB8fCBudWxsO1xyXG5cclxuXHRcdFx0Ly8gQ2xpY2sgaGFuZGxlcnM6IGFkZCAvIGRlbGV0ZSAvIGR1cGxpY2F0ZVxyXG5cdFx0XHRyb290LmFkZEV2ZW50TGlzdGVuZXIoICdjbGljaycsIChlKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgcGFuZWwgPSBnZXRfcGFuZWwoIGUudGFyZ2V0ICk7XHJcblx0XHRcdFx0aWYgKCAhcGFuZWwgKSByZXR1cm47XHJcblxyXG5cdFx0XHRcdHRoaXMuYm9vdHN0cmFwX3BhbmVsKCBwYW5lbCApO1xyXG5cclxuXHRcdFx0XHRjb25zdCB1aSA9IHRoaXMudWk7XHJcblxyXG5cdFx0XHRcdC8vIEV4aXN0aW5nIFwiQWRkIG9wdGlvblwiIGJ1dHRvbiAodG9wIHRvb2xiYXIpXHJcblx0XHRcdFx0Y29uc3QgYWRkID0gZS50YXJnZXQuY2xvc2VzdD8uKCB1aS5hZGRfYnRuICk7XHJcblx0XHRcdFx0aWYgKCBhZGQgKSB7XHJcblx0XHRcdFx0XHR0aGlzLmFwcGVuZF9yb3coIHBhbmVsLCB7IGxhYmVsOiAnJywgdmFsdWU6ICcnLCBzZWxlY3RlZDogZmFsc2UgfSApO1xyXG5cdFx0XHRcdFx0dGhpcy5jb21taXRfb3B0aW9ucyggcGFuZWwgKTtcclxuXHRcdFx0XHRcdHRoaXMuc3luY192YWx1ZV9pbnB1dHNfdmlzaWJpbGl0eSggcGFuZWwgKTtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIERyb3Bkb3duIG1lbnUgYWN0aW9ucy5cclxuXHRcdFx0XHRjb25zdCBtZW51X2FjdGlvbiA9IGUudGFyZ2V0LmNsb3Nlc3Q/LiggdWkubWVudV9hY3Rpb24gKTtcclxuXHRcdFx0XHRpZiAoIG1lbnVfYWN0aW9uICkge1xyXG5cdFx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdFx0XHRcdFx0ZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcblx0XHRcdFx0XHRjb25zdCBhY3Rpb24gPSAobWVudV9hY3Rpb24uZ2V0QXR0cmlidXRlKCAnZGF0YS1hY3Rpb24nICkgfHwgJycpLnRvTG93ZXJDYXNlKCk7XHJcblx0XHRcdFx0XHRjb25zdCByb3cgICAgPSBtZW51X2FjdGlvbi5jbG9zZXN0Py4oIHVpLnJvdyApO1xyXG5cclxuXHRcdFx0XHRcdGlmICggIXJvdyApIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5jbG9zZV9kcm9wZG93biggbWVudV9hY3Rpb24gKTtcclxuXHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmICggJ2FkZF9hZnRlcicgPT09IGFjdGlvbiApIHtcclxuXHRcdFx0XHRcdFx0Ly8gQWRkIGVtcHR5IHJvdyBhZnRlciBjdXJyZW50XHJcblx0XHRcdFx0XHRcdGNvbnN0IHByZXZfY291bnQgPSB0aGlzLmdldF9saXN0KCBwYW5lbCApPy5jaGlsZHJlbi5sZW5ndGggfHwgMDtcclxuXHRcdFx0XHRcdFx0dGhpcy5hcHBlbmRfcm93KCBwYW5lbCwgeyBsYWJlbDogJycsIHZhbHVlOiAnJywgc2VsZWN0ZWQ6IGZhbHNlIH0gKTtcclxuXHRcdFx0XHRcdFx0Ly8gTW92ZSB0aGUgbmV3bHkgYWRkZWQgbGFzdCByb3cganVzdCBhZnRlciBjdXJyZW50IHJvdyB0byBwcmVzZXJ2ZSBcImFkZCBhZnRlclwiXHJcblx0XHRcdFx0XHRcdGNvbnN0IGxpc3QgPSB0aGlzLmdldF9saXN0KCBwYW5lbCApO1xyXG5cdFx0XHRcdFx0XHRpZiAoIGxpc3QgJiYgbGlzdC5sYXN0RWxlbWVudENoaWxkICYmIGxpc3QubGFzdEVsZW1lbnRDaGlsZCAhPT0gcm93ICkge1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMuaW5zZXJ0X2FmdGVyKCBsaXN0Lmxhc3RFbGVtZW50Q2hpbGQsIHJvdyApO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdHRoaXMuY29tbWl0X29wdGlvbnMoIHBhbmVsICk7XHJcblx0XHRcdFx0XHRcdHRoaXMuc3luY192YWx1ZV9pbnB1dHNfdmlzaWJpbGl0eSggcGFuZWwgKTtcclxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoICdkdXBsaWNhdGUnID09PSBhY3Rpb24gKSB7XHJcblx0XHRcdFx0XHRcdGNvbnN0IGxibCA9IChyb3cucXVlcnlTZWxlY3RvciggdWkubGFiZWwgKSB8fCB7fSkudmFsdWUgfHwgJyc7XHJcblx0XHRcdFx0XHRcdGNvbnN0IHZhbCA9IChyb3cucXVlcnlTZWxlY3RvciggdWkudmFsdWUgKSB8fCB7fSkudmFsdWUgfHwgJyc7XHJcblx0XHRcdFx0XHRcdGNvbnN0IHNlbCA9ICEhKChyb3cucXVlcnlTZWxlY3RvciggdWkudG9nZ2xlICkgfHwge30pLmNoZWNrZWQpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLmFwcGVuZF9yb3coIHBhbmVsLCB7IGxhYmVsOiBsYmwsIHZhbHVlOiB2YWwsIHNlbGVjdGVkOiBzZWwsIHVpZDogdGhpcy5tYWtlX3VpZCgpIH0gKTtcclxuXHRcdFx0XHRcdFx0Ly8gUGxhY2UgdGhlIG5ldyByb3cgcmlnaHQgYWZ0ZXIgdGhlIGN1cnJlbnQuXHJcblx0XHRcdFx0XHRcdGNvbnN0IGxpc3QgPSB0aGlzLmdldF9saXN0KCBwYW5lbCApO1xyXG5cclxuXHRcdFx0XHRcdFx0aWYgKCBsaXN0ICYmIGxpc3QubGFzdEVsZW1lbnRDaGlsZCAmJiBsaXN0Lmxhc3RFbGVtZW50Q2hpbGQgIT09IHJvdyApIHtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmluc2VydF9hZnRlciggbGlzdC5sYXN0RWxlbWVudENoaWxkLCByb3cgKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR0aGlzLmVuZm9yY2Vfc2luZ2xlX2RlZmF1bHQoIHBhbmVsLCBudWxsICk7XHJcblx0XHRcdFx0XHRcdHRoaXMuY29tbWl0X29wdGlvbnMoIHBhbmVsICk7XHJcblx0XHRcdFx0XHRcdHRoaXMuc3luY192YWx1ZV9pbnB1dHNfdmlzaWJpbGl0eSggcGFuZWwgKTtcclxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoICdyZW1vdmUnID09PSBhY3Rpb24gKSB7XHJcblx0XHRcdFx0XHRcdGlmICggcm93ICYmIHJvdy5wYXJlbnROb2RlICkgcm93LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIHJvdyApO1xyXG5cdFx0XHRcdFx0XHR0aGlzLmNvbW1pdF9vcHRpb25zKCBwYW5lbCApO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnN5bmNfdmFsdWVfaW5wdXRzX3Zpc2liaWxpdHkoIHBhbmVsICk7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0dGhpcy5jbG9zZV9kcm9wZG93biggbWVudV9hY3Rpb24gKTtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHR9LCB0cnVlICk7XHJcblxyXG5cclxuXHRcdFx0Ly8gSW5wdXQgZGVsZWdhdGlvbi5cclxuXHRcdFx0cm9vdC5hZGRFdmVudExpc3RlbmVyKCAnaW5wdXQnLCAoZSkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHBhbmVsID0gZ2V0X3BhbmVsKCBlLnRhcmdldCApO1xyXG5cdFx0XHRcdGlmICggISBwYW5lbCApIHtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Y29uc3QgdWkgICAgICAgICAgICAgICAgPSB0aGlzLnVpO1xyXG5cdFx0XHRcdGNvbnN0IGlzX2xhYmVsX29yX3ZhbHVlID0gZS50YXJnZXQuY2xhc3NMaXN0Py5jb250YWlucyggJ3dwYmNfYmZiX19vcHQtbGFiZWwnICkgfHwgZS50YXJnZXQuY2xhc3NMaXN0Py5jb250YWlucyggJ3dwYmNfYmZiX19vcHQtdmFsdWUnICk7XHJcblx0XHRcdFx0Y29uc3QgaXNfdG9nZ2xlICAgICAgICAgPSBlLnRhcmdldC5jbGFzc0xpc3Q/LmNvbnRhaW5zKCAnd3BiY19iZmJfX29wdC1zZWxlY3RlZC1jaGsnICk7XHJcblx0XHRcdFx0Y29uc3QgaXNfbXVsdGlwbGUgICAgICAgPSBlLnRhcmdldC5tYXRjaGVzPy4oIHVpLm11bHRpcGxlX2NoayApO1xyXG5cdFx0XHRcdGNvbnN0IGlzX2RlZmF1bHRfdGV4dCAgID0gZS50YXJnZXQubWF0Y2hlcz8uKCB1aS5kZWZhdWx0X3RleHQgKTtcclxuXHRcdFx0XHRjb25zdCBpc192YWx1ZV9kaWZmZXJzICA9IGUudGFyZ2V0Lm1hdGNoZXM/LiggdWkudmFsdWVfZGlmZmVyc19jaGsgKTtcclxuXHJcblx0XHRcdFx0Ly8gSGFuZGxlIFwidmFsdWUgZGlmZmVyc1wiIHRvZ2dsZSBsaXZlXHJcblx0XHRcdFx0aWYgKCBpc192YWx1ZV9kaWZmZXJzICkge1xyXG5cdFx0XHRcdFx0dGhpcy5zeW5jX3ZhbHVlX2lucHV0c192aXNpYmlsaXR5KCBwYW5lbCApO1xyXG5cdFx0XHRcdFx0dGhpcy5jb21taXRfb3B0aW9ucyggcGFuZWwgKTtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIFRyYWNrIHdoZW4gdGhlIHVzZXIgZWRpdHMgVkFMVUUgZXhwbGljaXRseVxyXG5cdFx0XHRcdGlmICggZS50YXJnZXQuY2xhc3NMaXN0Py5jb250YWlucyggJ3dwYmNfYmZiX19vcHQtdmFsdWUnICkgKSB7XHJcblx0XHRcdFx0XHRjb25zdCByb3cgPSBlLnRhcmdldC5jbG9zZXN0KCB0aGlzLnVpLnJvdyApO1xyXG5cdFx0XHRcdFx0dGhpcy5tYXJrX3Jvd192YWx1ZV91c2VyX3RvdWNoZWQoIHJvdyApO1xyXG5cdFx0XHRcdFx0Ly8gS2VlcCB0aGUgY2FjaGUgdXBkYXRlZCBzbyB0b2dnbGluZyBPRkYvT04gbGF0ZXIgcmVzdG9yZXMgdGhlIGxhdGVzdCBjdXN0b20gdmFsdWVcclxuXHRcdFx0XHRcdGUudGFyZ2V0LmRhdGFzZXQuY2FjaGVkX3ZhbHVlID0gZS50YXJnZXQudmFsdWUgfHwgJyc7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBBdXRvLWZpbGwgVkFMVUUgZnJvbSBMQUJFTCBpZiB2YWx1ZSBpcyBmcmVzaCAoYW5kIGRpZmZlcnMgaXMgT04pOyBpZiBkaWZmZXJzIGlzIE9GRiwgd2UgbWlycm9yIGFueXdheSBpbiBjb21taXRcclxuXHRcdFx0XHRpZiAoIGUudGFyZ2V0LmNsYXNzTGlzdD8uY29udGFpbnMoICd3cGJjX2JmYl9fb3B0LWxhYmVsJyApICkge1xyXG5cdFx0XHRcdFx0Y29uc3Qgcm93ICAgICA9IGUudGFyZ2V0LmNsb3Nlc3QoIHVpLnJvdyApO1xyXG5cdFx0XHRcdFx0Y29uc3QgdmFsX2luICA9IHJvdz8ucXVlcnlTZWxlY3RvciggdWkudmFsdWUgKTtcclxuXHRcdFx0XHRcdGNvbnN0IGRpZmZlcnMgPSB0aGlzLmlzX3ZhbHVlX2RpZmZlcnNfZW5hYmxlZCggcGFuZWwgKTtcclxuXHJcblx0XHRcdFx0XHRpZiAoIHZhbF9pbiApIHtcclxuXHRcdFx0XHRcdFx0aWYgKCAhZGlmZmVycyApIHtcclxuXHRcdFx0XHRcdFx0XHQvLyBzaW5nbGUtaW5wdXQgbW9kZTogbWlycm9yIGh1bWFuIGxhYmVsIHdpdGggbWluaW1hbCBlc2NhcGluZ1xyXG5cdFx0XHRcdFx0XHRcdHZhbF9pbi52YWx1ZSA9IHRoaXMuYnVpbGRfdmFsdWVfZnJvbV9sYWJlbCggZS50YXJnZXQudmFsdWUsIGZhbHNlICk7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoICF0aGlzLmlzX3Jvd192YWx1ZV91c2VyX3RvdWNoZWQoIHJvdyApICkge1xyXG5cdFx0XHRcdFx0XHRcdC8vIHNlcGFyYXRlLXZhbHVlIG1vZGUsIG9ubHkgd2hpbGUgZnJlc2hcclxuXHRcdFx0XHRcdFx0XHR2YWxfaW4udmFsdWUgPSB0aGlzLmJ1aWxkX3ZhbHVlX2Zyb21fbGFiZWwoIGUudGFyZ2V0LnZhbHVlLCB0cnVlICk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblxyXG5cclxuXHRcdFx0XHRpZiAoIGlzX2xhYmVsX29yX3ZhbHVlIHx8IGlzX3RvZ2dsZSB8fCBpc19tdWx0aXBsZSApIHtcclxuXHRcdFx0XHRcdGlmICggaXNfdG9nZ2xlICkgZS50YXJnZXQuc2V0QXR0cmlidXRlKCAnYXJpYS1jaGVja2VkJywgZS50YXJnZXQuY2hlY2tlZCA/ICd0cnVlJyA6ICdmYWxzZScgKTtcclxuXHRcdFx0XHRcdGlmICggaXNfdG9nZ2xlIHx8IGlzX211bHRpcGxlICkgdGhpcy5lbmZvcmNlX3NpbmdsZV9kZWZhdWx0KCBwYW5lbCwgaXNfdG9nZ2xlID8gZS50YXJnZXQgOiBudWxsICk7XHJcblx0XHRcdFx0XHR0aGlzLmNvbW1pdF9vcHRpb25zKCBwYW5lbCApO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aWYgKCBpc19kZWZhdWx0X3RleHQgKSB7XHJcblx0XHRcdFx0XHR0aGlzLnN5bmNfZGVmYXVsdF92YWx1ZV9sb2NrKCBwYW5lbCApO1xyXG5cdFx0XHRcdFx0dGhpcy5zeW5jX3BsYWNlaG9sZGVyX2xvY2soIHBhbmVsICk7XHJcblx0XHRcdFx0XHRjb25zdCBob2xkZXIgPSB0aGlzLmdldF9ob2xkZXIoIHBhbmVsICk7XHJcblx0XHRcdFx0XHRpZiAoIGhvbGRlciApIHtcclxuXHRcdFx0XHRcdFx0aG9sZGVyLmRpc3BhdGNoRXZlbnQoIG5ldyBFdmVudCggJ2lucHV0JywgeyBidWJibGVzOiB0cnVlIH0gKSApO1xyXG5cdFx0XHRcdFx0XHRob2xkZXIuZGlzcGF0Y2hFdmVudCggbmV3IEV2ZW50KCAnY2hhbmdlJywgeyBidWJibGVzOiB0cnVlIH0gKSApO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSwgdHJ1ZSApO1xyXG5cclxuXHJcblx0XHRcdC8vIENoYW5nZSBkZWxlZ2F0aW9uXHJcblx0XHRcdHJvb3QuYWRkRXZlbnRMaXN0ZW5lciggJ2NoYW5nZScsIChlKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgcGFuZWwgPSBnZXRfcGFuZWwoIGUudGFyZ2V0ICk7XHJcblx0XHRcdFx0aWYgKCAhcGFuZWwgKSByZXR1cm47XHJcblxyXG5cdFx0XHRcdGNvbnN0IHVpICAgICAgICA9IHRoaXMudWk7XHJcblx0XHRcdFx0Y29uc3QgaXNfdG9nZ2xlID0gZS50YXJnZXQuY2xhc3NMaXN0Py5jb250YWlucyggJ3dwYmNfYmZiX19vcHQtc2VsZWN0ZWQtY2hrJyApO1xyXG5cdFx0XHRcdGNvbnN0IGlzX211bHRpICA9IGUudGFyZ2V0Lm1hdGNoZXM/LiggdWkubXVsdGlwbGVfY2hrICk7XHJcblx0XHRcdFx0aWYgKCAhaXNfdG9nZ2xlICYmICFpc19tdWx0aSApIHJldHVybjtcclxuXHJcblx0XHRcdFx0aWYgKCBpc190b2dnbGUgKSBlLnRhcmdldC5zZXRBdHRyaWJ1dGUoICdhcmlhLWNoZWNrZWQnLCBlLnRhcmdldC5jaGVja2VkID8gJ3RydWUnIDogJ2ZhbHNlJyApO1xyXG5cdFx0XHRcdHRoaXMuZW5mb3JjZV9zaW5nbGVfZGVmYXVsdCggcGFuZWwsIGlzX3RvZ2dsZSA/IGUudGFyZ2V0IDogbnVsbCApO1xyXG5cdFx0XHRcdHRoaXMuY29tbWl0X29wdGlvbnMoIHBhbmVsICk7XHJcblx0XHRcdH0sIHRydWUgKTtcclxuXHJcblx0XHRcdC8vIExhenkgYm9vdHN0cmFwXHJcblx0XHRcdHJvb3QuYWRkRXZlbnRMaXN0ZW5lciggJ21vdXNlZW50ZXInLCAoZSkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHBhbmVsID0gZ2V0X3BhbmVsKCBlLnRhcmdldCApO1xyXG5cdFx0XHRcdGlmICggcGFuZWwgJiYgZS50YXJnZXQ/LmNsb3Nlc3Q/LiggdGhpcy51aS5saXN0ICkgKSB0aGlzLmJvb3RzdHJhcF9wYW5lbCggcGFuZWwgKTtcclxuXHRcdFx0fSwgdHJ1ZSApO1xyXG5cclxuXHRcdFx0cm9vdC5hZGRFdmVudExpc3RlbmVyKCAnbW91c2Vkb3duJywgKGUpID0+IHtcclxuXHRcdFx0XHRjb25zdCBwYW5lbCA9IGdldF9wYW5lbCggZS50YXJnZXQgKTtcclxuXHRcdFx0XHRpZiAoIHBhbmVsICYmIGUudGFyZ2V0Py5jbG9zZXN0Py4oIHRoaXMudWkuZHJhZ19oYW5kbGUgKSApIHRoaXMuYm9vdHN0cmFwX3BhbmVsKCBwYW5lbCApO1xyXG5cdFx0XHR9LCB0cnVlICk7XHJcblx0XHR9XHJcblxyXG5cdH07XHJcblxyXG5cdHRyeSB7IENvcmUuV1BCQ19CRkJfU2VsZWN0X0Jhc2Uud2lyZV9vbmNlKCk7IH0gY2F0Y2ggKF8pIHt9XHJcblx0Ly8gVHJ5IGltbWVkaWF0ZWx5IChpZiByb290IGlzIGFscmVhZHkgaW4gRE9NKSwgdGhlbiBhZ2FpbiBvbiBET01Db250ZW50TG9hZGVkLlxyXG5cdENvcmUuV1BCQ19CRkJfU2VsZWN0X0Jhc2Uud2lyZV9yb290X2xpc3RlbmVycygpO1xyXG5cclxuXHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgKCkgPT4geyBDb3JlLldQQkNfQkZCX1NlbGVjdF9CYXNlLndpcmVfcm9vdF9saXN0ZW5lcnMoKTsgIH0pO1xyXG5cclxufSggd2luZG93ICkpOyIsIi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4vLyA9PSBGaWxlICAvaW5jbHVkZXMvcGFnZS1mb3JtLWJ1aWxkZXIvX291dC9jb3JlL2JmYi11aS5qcyA9PSB8IDIwMjUtMDktMTAgMTU6NDdcclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbihmdW5jdGlvbiAodywgZCkge1xyXG5cdCd1c2Ugc3RyaWN0JztcclxuXHJcblx0Ly8gU2luZ2xlIGdsb2JhbCBuYW1lc3BhY2UgKGlkZW1wb3RlbnQgJiBsb2FkLW9yZGVyIHNhZmUpLlxyXG5cdGNvbnN0IENvcmUgPSAody5XUEJDX0JGQl9Db3JlID0gdy5XUEJDX0JGQl9Db3JlIHx8IHt9KTtcclxuXHRjb25zdCBVSSAgID0gKENvcmUuVUkgPSBDb3JlLlVJIHx8IHt9KTtcclxuXHJcblx0Ly8gLS0tIEhpZ2hsaWdodCBFbGVtZW50LCAgbGlrZSBHZW5lcmF0b3IgYnJuICAtICBUaW55IFVJIGhlbHBlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0VUkuX3B1bHNlX3RpbWVycyA9IFVJLl9wdWxzZV90aW1lcnMgfHwgbmV3IE1hcCgpOyAvLyBlbCAtPiB0aW1lcl9pZFxyXG5cdFVJLl9wdWxzZV9tZXRhICAgPSBVSS5fcHVsc2VfbWV0YSAgIHx8IG5ldyBNYXAoKTsgLy8gZWwgLT4geyB0b2tlbiwgbGFzdF90cywgZGVib3VuY2VfaWQsIGNvbG9yX3NldCB9XHJcblx0Ly8gUHVsc2UgdHVuaW5nIChtaWxsaXNlY29uZHMpLlxyXG5cdFVJLlBVTFNFX1RIUk9UVExFX01TICA9IE51bWJlci5pc0Zpbml0ZSggVUkuUFVMU0VfVEhST1RUTEVfTVMgKSA/IFVJLlBVTFNFX1RIUk9UVExFX01TIDogNTAwO1xyXG5cdFVJLlBVTFNFX0RFQk9VTkNFX01TICA9IE51bWJlci5pc0Zpbml0ZSggVUkuUFVMU0VfREVCT1VOQ0VfTVMgKSA/IFVJLlBVTFNFX0RFQk9VTkNFX01TIDogNzUwO1xyXG5cclxuXHQvLyBEZWJvdW5jZSBTVFJVQ1RVUkVfQ0hBTkdFIGZvciBjb250aW51b3VzIGluc3BlY3RvciBjb250cm9scyAoc2xpZGVycyAvIHNjcnViYmluZykuXHJcblx0Ly8gVHVuZTogMTgwLi4zNTAgaXMgdXN1YWxseSBhIHN3ZWV0IHNwb3QuXHJcblx0VUkuU1RSVUNUVVJFX0NIQU5HRV9ERUJPVU5DRV9NUyA9IE51bWJlci5pc0Zpbml0ZSggVUkuU1RSVUNUVVJFX0NIQU5HRV9ERUJPVU5DRV9NUyApID8gVUkuU1RSVUNUVVJFX0NIQU5HRV9ERUJPVU5DRV9NUyA6IDE4MDtcclxuXHQvLyBDaGFuZ2UgdGhpcyB0byB0dW5lIHNwZWVkOiA1MC4uMTIwIG1zIGlzIGEgZ29vZCByYW5nZS4gQ2FuIGJlIGNvbmZpZ3VyZWQgaW4gPGRpdiBkYXRhLWxlbi1ncm91cCBkYXRhLWxlbi10aHJvdHRsZT1cIjE4MFwiPi4uLjwvZGl2Pi5cclxuXHRVSS5WQUxVRV9TTElERVJfVEhST1RUTEVfTVMgPSBOdW1iZXIuaXNGaW5pdGUoIFVJLlZBTFVFX1NMSURFUl9USFJPVFRMRV9NUyApID8gVUkuVkFMVUVfU0xJREVSX1RIUk9UVExFX01TIDogMTIwO1xyXG5cclxuXHQvKipcclxuXHQgKiBDYW5jZWwgYW55IHJ1bm5pbmcgcHVsc2Ugc2VxdWVuY2UgZm9yIGFuIGVsZW1lbnQuXHJcblx0ICogVXNlcyB0b2tlbiBpbnZhbGlkYXRpb24gc28gYWxyZWFkeS1zY2hlZHVsZWQgY2FsbGJhY2tzIGJlY29tZSBuby1vcHMuXHJcblx0ICpcclxuXHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbFxyXG5cdCAqL1xyXG5cdFVJLmNhbmNlbF9wdWxzZSA9IGZ1bmN0aW9uIChlbCkge1xyXG5cdFx0aWYgKCAhZWwgKSB7IHJldHVybjsgfVxyXG5cdFx0dHJ5IHtcclxuXHRcdFx0Y2xlYXJUaW1lb3V0KCBVSS5fcHVsc2VfdGltZXJzLmdldCggZWwgKSApO1xyXG5cdFx0fSBjYXRjaCAoIF8gKSB7fVxyXG5cdFx0VUkuX3B1bHNlX3RpbWVycy5kZWxldGUoIGVsICk7XHJcblxyXG5cdFx0dmFyIG1ldGEgPSBVSS5fcHVsc2VfbWV0YS5nZXQoIGVsICkgfHwge307XHJcblx0XHRtZXRhLnRva2VuID0gKE51bWJlci5pc0Zpbml0ZSggbWV0YS50b2tlbiApID8gbWV0YS50b2tlbiA6IDApICsgMTtcclxuXHRcdG1ldGEuY29sb3Jfc2V0ID0gZmFsc2U7XHJcblx0XHR0cnkgeyBlbC5jbGFzc0xpc3QucmVtb3ZlKCAnd3BiY19iZmJfX3Njcm9sbC1wdWxzZScsICd3cGJjX2JmYl9faGlnaGxpZ2h0LXB1bHNlJyApOyB9IGNhdGNoICggXyApIHt9XHJcblx0XHR0cnkgeyBlbC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSggJy0td3BiYy1iZmItcHVsc2UtY29sb3InICk7IH0gY2F0Y2ggKCBfICkge31cclxuXHRcdFVJLl9wdWxzZV9tZXRhLnNldCggZWwsIG1ldGEgKTtcclxuXHRcdHRyeSB7IGNsZWFyVGltZW91dCggbWV0YS5kZWJvdW5jZV9pZCApOyB9IGNhdGNoICggXyApIHt9XHJcblx0XHRtZXRhLmRlYm91bmNlX2lkID0gMDtcclxuXHR9O1xyXG5cclxuXHQvKipcclxuXHQgKiBGb3JjZS1yZXN0YXJ0IGEgQ1NTIGFuaW1hdGlvbiBvbiBhIGNsYXNzLlxyXG5cdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsXHJcblx0ICogQHBhcmFtIHtzdHJpbmd9IGNsc1xyXG5cdCAqL1xyXG5cdFVJLl9yZXN0YXJ0X2Nzc19hbmltYXRpb24gPSBmdW5jdGlvbiAoZWwsIGNscykge1xyXG5cdFx0aWYgKCAhIGVsICkgeyByZXR1cm47IH1cclxuXHRcdHRyeSB7XHJcblx0XHRcdGVsLmNsYXNzTGlzdC5yZW1vdmUoIGNscyApO1xyXG5cdFx0fSBjYXRjaCAoIF8gKSB7fVxyXG5cdFx0Ly8gRm9yY2UgcmVmbG93IHNvIHRoZSBuZXh0IGFkZCgpIHJldHJpZ2dlcnMgdGhlIGtleWZyYW1lcy5cclxuXHRcdHZvaWQgZWwub2Zmc2V0V2lkdGg7XHJcblx0XHR0cnkge1xyXG5cdFx0XHRlbC5jbGFzc0xpc3QuYWRkKCBjbHMgKTtcclxuXHRcdH0gY2F0Y2ggKCBfICkge31cclxuXHR9O1xyXG5cclxuXHQvKipcclxuXHRcdFNpbmdsZSBwdWxzZSAoYmFjay1jb21wYXQpLlxyXG5cdFx0QHBhcmFtIHtIVE1MRWxlbWVudH0gZWxcclxuXHRcdEBwYXJhbSB7bnVtYmVyfSBkdXJfbXNcclxuXHQgKi9cclxuXHRVSS5wdWxzZV9vbmNlID0gZnVuY3Rpb24gKGVsLCBkdXJfbXMpIHtcclxuXHRcdGlmICggISBlbCApIHsgcmV0dXJuOyB9XHJcblx0XHR2YXIgY2xzID0gJ3dwYmNfYmZiX19zY3JvbGwtcHVsc2UnO1xyXG5cdFx0dmFyIG1zICA9IE51bWJlci5pc0Zpbml0ZSggZHVyX21zICkgPyBkdXJfbXMgOiA3MDA7XHJcblxyXG5cdFx0VUkuY2FuY2VsX3B1bHNlKCBlbCApO1xyXG5cclxuXHRcdHZhciBtZXRhICA9IFVJLl9wdWxzZV9tZXRhLmdldCggZWwgKSB8fCB7fTtcclxuXHRcdHZhciB0b2tlbiA9IChOdW1iZXIuaXNGaW5pdGUoIG1ldGEudG9rZW4gKSA/IG1ldGEudG9rZW4gOiAwKSArIDE7XHJcblx0XHRtZXRhLnRva2VuID0gdG9rZW47XHJcblx0XHRVSS5fcHVsc2VfbWV0YS5zZXQoIGVsLCBtZXRhICk7XHJcblxyXG5cdFx0VUkuX3Jlc3RhcnRfY3NzX2FuaW1hdGlvbiggZWwsIGNscyApO1xyXG5cdFx0dmFyIHQgPSBzZXRUaW1lb3V0KCBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdC8vIGlnbm9yZSBpZiBhIG5ld2VyIHB1bHNlIHN0YXJ0ZWQuXHJcblx0XHRcdHZhciBtID0gVUkuX3B1bHNlX21ldGEuZ2V0KCBlbCApIHx8IHt9O1xyXG5cdFx0XHRpZiAoIG0udG9rZW4gIT09IHRva2VuICkgeyByZXR1cm47IH1cclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRlbC5jbGFzc0xpc3QucmVtb3ZlKCBjbHMgKTtcclxuXHRcdFx0fSBjYXRjaCAoIF8gKSB7fVxyXG5cdFx0XHRVSS5fcHVsc2VfdGltZXJzLmRlbGV0ZSggZWwgKTtcclxuXHRcdH0sIG1zICk7XHJcblx0XHRVSS5fcHVsc2VfdGltZXJzLnNldCggZWwsIHQgKTtcclxuXHR9O1xyXG5cclxuXHQvKipcclxuXHRcdE11bHRpLWJsaW5rIHNlcXVlbmNlIHdpdGggb3B0aW9uYWwgcGVyLWNhbGwgY29sb3Igb3ZlcnJpZGUuXHJcblx0XHRAcGFyYW0ge0hUTUxFbGVtZW50fSBlbFxyXG5cdFx0QHBhcmFtIHtudW1iZXJ9IFt0aW1lcz0zXVxyXG5cdFx0QHBhcmFtIHtudW1iZXJ9IFtvbl9tcz0yODBdXHJcblx0XHRAcGFyYW0ge251bWJlcn0gW29mZl9tcz0xODBdXHJcblx0XHRAcGFyYW0ge3N0cmluZ30gW2hleF9jb2xvcl0gT3B0aW9uYWwgQ1NTIGNvbG9yIChlLmcuICcjZmY0ZDRmJyBvciAncmdiKC4uLiknKS5cclxuXHQgKi9cclxuXHRVSS5wdWxzZV9zZXF1ZW5jZSA9IGZ1bmN0aW9uIChlbCwgdGltZXMsIG9uX21zLCBvZmZfbXMsIGhleF9jb2xvcikge1xyXG5cdFx0aWYgKCAhZWwgfHwgIWQuYm9keS5jb250YWlucyggZWwgKSApIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0dmFyIGNscyAgID0gJ3dwYmNfYmZiX19oaWdobGlnaHQtcHVsc2UnO1xyXG5cdFx0dmFyIGNvdW50ID0gTnVtYmVyLmlzRmluaXRlKCB0aW1lcyApID8gdGltZXMgOiAyO1xyXG5cdFx0dmFyIG9uICAgID0gTnVtYmVyLmlzRmluaXRlKCBvbl9tcyApID8gb25fbXMgOiAyODA7XHJcblx0XHR2YXIgb2ZmICAgPSBOdW1iZXIuaXNGaW5pdGUoIG9mZl9tcyApID8gb2ZmX21zIDogMTgwO1xyXG5cclxuXHRcdC8vIFRocm90dGxlOiBhdm9pZCByZWZsb3cgc3BhbSBpZiBjYWxsZWQgcmVwZWF0ZWRseSB3aGlsZSB0eXBpbmcvZHJhZ2dpbmcuXHJcblx0XHR2YXIgbWV0YSA9IFVJLl9wdWxzZV9tZXRhLmdldCggZWwgKSB8fCB7fTtcclxuXHRcdHZhciBub3cgID0gRGF0ZS5ub3coKTtcclxuXHRcdHZhciB0aHJvdHRsZV9tcyA9IE51bWJlci5pc0Zpbml0ZSggVUkuUFVMU0VfVEhST1RUTEVfTVMgKSA/IFVJLlBVTFNFX1RIUk9UVExFX01TIDogMTIwO1xyXG5cdFx0aWYgKCBOdW1iZXIuaXNGaW5pdGUoIG1ldGEubGFzdF90cyApICYmIChub3cgLSBtZXRhLmxhc3RfdHMpIDwgdGhyb3R0bGVfbXMgKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdG1ldGEubGFzdF90cyA9IG5vdztcclxuXHJcblx0XHQvLyBjYW5jZWwgYW55IHJ1bm5pbmcgcHVsc2UgYW5kIHJlc2V0IGNsYXNzICh0b2tlbiBpbnZhbGlkYXRpb24pLlxyXG5cdFx0VUkuY2FuY2VsX3B1bHNlKCBlbCApO1xyXG5cclxuXHRcdC8vIG5ldyB0b2tlbiBmb3IgdGhpcyBydW5cclxuXHRcdHZhciB0b2tlbiA9IChOdW1iZXIuaXNGaW5pdGUoIG1ldGEudG9rZW4gKSA/IG1ldGEudG9rZW4gOiAwKSArIDE7XHJcblx0XHRtZXRhLnRva2VuID0gdG9rZW47XHJcblxyXG5cdFx0dmFyIGhhdmVfY29sb3IgPSAhIWhleF9jb2xvciAmJiB0eXBlb2YgaGV4X2NvbG9yID09PSAnc3RyaW5nJztcclxuXHRcdGlmICggaGF2ZV9jb2xvciApIHtcclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRlbC5zdHlsZS5zZXRQcm9wZXJ0eSggJy0td3BiYy1iZmItcHVsc2UtY29sb3InLCBoZXhfY29sb3IgKTtcclxuXHRcdFx0fSBjYXRjaCAoIF8gKSB7fVxyXG5cdFx0XHRtZXRhLmNvbG9yX3NldCA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRVSS5fcHVsc2VfbWV0YS5zZXQoIGVsLCBtZXRhICk7XHJcblxyXG5cdFx0dmFyIGkgPSAwO1xyXG5cdFx0KGZ1bmN0aW9uIHRpY2soKSB7XHJcblx0XHRcdHZhciBtID0gVUkuX3B1bHNlX21ldGEuZ2V0KCBlbCApIHx8IHt9O1xyXG5cdFx0XHRpZiAoIG0udG9rZW4gIT09IHRva2VuICkge1xyXG5cdFx0XHRcdC8vIGNhbmNlbGVkL3JlcGxhY2VkXHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICggaSA+PSBjb3VudCApIHtcclxuXHRcdFx0XHRVSS5fcHVsc2VfdGltZXJzLmRlbGV0ZSggZWwgKTtcclxuXHRcdFx0XHRpZiAoIGhhdmVfY29sb3IgKSB7XHJcblx0XHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0XHRlbC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSggJy0td3BiYy1iZmItcHVsc2UtY29sb3InICk7XHJcblx0XHRcdFx0XHR9IGNhdGNoICggXyApIHt9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cdFx0XHRVSS5fcmVzdGFydF9jc3NfYW5pbWF0aW9uKCBlbCwgY2xzICk7XHJcblx0XHRcdFVJLl9wdWxzZV90aW1lcnMuc2V0KCBlbCwgc2V0VGltZW91dCggZnVuY3Rpb24gKCkgeyAgICAgLy8gT04gLT4gT0ZGXHJcblx0XHRcdFx0dmFyIG0yID0gVUkuX3B1bHNlX21ldGEuZ2V0KCBlbCApIHx8IHt9O1xyXG5cdFx0XHRcdGlmICggbTIudG9rZW4gIT09IHRva2VuICkgeyByZXR1cm47IH1cclxuXHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0ZWwuY2xhc3NMaXN0LnJlbW92ZSggY2xzICk7XHJcblx0XHRcdFx0fSBjYXRjaCAoIF8gKSB7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdFVJLl9wdWxzZV90aW1lcnMuc2V0KCBlbCwgc2V0VGltZW91dCggZnVuY3Rpb24gKCkgeyAvLyBPRkYgZ2FwIC0+IG5leHRcclxuXHRcdFx0XHRcdHZhciBtMyA9IFVJLl9wdWxzZV9tZXRhLmdldCggZWwgKSB8fCB7fTtcclxuXHRcdFx0XHRcdGlmICggbTMudG9rZW4gIT09IHRva2VuICkgeyByZXR1cm47IH1cclxuXHRcdFx0XHRcdGkrKztcclxuXHRcdFx0XHRcdHRpY2soKTtcclxuXHRcdFx0XHR9LCBvZmYgKSApO1xyXG5cdFx0XHR9LCBvbiApICk7XHJcblx0XHR9KSgpO1xyXG5cdH07XHJcblxyXG5cclxuXHQvKipcclxuXHQgKiBEZWJvdW5jZWQgcXVlcnkgKyBwdWxzZS5cclxuXHQgKiBVc2VmdWwgZm9yIGBpbnB1dGAgZXZlbnRzIChzbGlkZXJzIC8gdHlwaW5nKSB0byBhdm9pZCBmb3JjZWQgcmVmbG93IHNwYW0uXHJcblx0ICpcclxuXHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fHN0cmluZ30gcm9vdF9vcl9zZWxlY3RvclxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvclxyXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSB3YWl0X21zXHJcblx0ICogQHBhcmFtIHtudW1iZXJ9IFthXVxyXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSBbYl1cclxuXHQgKiBAcGFyYW0ge251bWJlcn0gW2NdXHJcblx0ICogQHBhcmFtIHtzdHJpbmd9IFtjb2xvcl1cclxuXHQgKi9cclxuXHRVSS5wdWxzZV9xdWVyeV9kZWJvdW5jZWQgPSBmdW5jdGlvbiAocm9vdF9vcl9zZWxlY3Rvciwgc2VsZWN0b3IsIHdhaXRfbXMsIGEsIGIsIGMsIGNvbG9yKSB7XHJcblx0XHR2YXIgcm9vdCA9ICh0eXBlb2Ygcm9vdF9vcl9zZWxlY3RvciA9PT0gJ3N0cmluZycpID8gZCA6IChyb290X29yX3NlbGVjdG9yIHx8IGQpO1xyXG5cdFx0dmFyIHNlbCAgPSAodHlwZW9mIHJvb3Rfb3Jfc2VsZWN0b3IgPT09ICdzdHJpbmcnKSA/IHJvb3Rfb3Jfc2VsZWN0b3IgOiBzZWxlY3RvcjtcclxuXHRcdGlmICggIXNlbCApIHsgcmV0dXJuOyB9XHJcblx0XHR2YXIgZWwgPSByb290LnF1ZXJ5U2VsZWN0b3IoIHNlbCApO1xyXG5cdFx0aWYgKCAhZWwgKSB7IHJldHVybjsgfVxyXG5cclxuXHRcdHZhciBkZWZfbXMgPSBOdW1iZXIuaXNGaW5pdGUoIFVJLlBVTFNFX0RFQk9VTkNFX01TICkgPyBVSS5QVUxTRV9ERUJPVU5DRV9NUyA6IDEyMDtcclxuXHRcdHZhciBtcyAgICAgPSBOdW1iZXIuaXNGaW5pdGUoIHdhaXRfbXMgKSA/IHdhaXRfbXMgOiBkZWZfbXM7XHJcblx0XHR2YXIgbWV0YSA9IFVJLl9wdWxzZV9tZXRhLmdldCggZWwgKSB8fCB7fTtcclxuXHRcdHRyeSB7IGNsZWFyVGltZW91dCggbWV0YS5kZWJvdW5jZV9pZCApOyB9IGNhdGNoICggXyApIHt9XHJcblx0XHRtZXRhLmRlYm91bmNlX2lkID0gc2V0VGltZW91dCggZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRVSS5wdWxzZV9zZXF1ZW5jZSggZWwsIGEsIGIsIGMsIGNvbG9yICk7XHJcblx0XHR9LCBtcyApO1xyXG5cdFx0VUkuX3B1bHNlX21ldGEuc2V0KCBlbCwgbWV0YSApO1xyXG5cdH07XHJcblxyXG5cdC8qKlxyXG5cdFx0UXVlcnkgKyBwdWxzZTpcclxuXHRcdChCQykgSWYgb25seSAzcmQgYXJnIGlzIGEgbnVtYmVyIGFuZCBubyA0dGgvNXRoIC0+IHNpbmdsZSBsb25nIHB1bHNlLlxyXG5cdFx0T3RoZXJ3aXNlIC0+IHN0cm9uZyBzZXF1ZW5jZSAoZGVmYXVsdHMgM8OXMjgwLzE4MCkuXHJcblx0XHRPcHRpb25hbCA2dGggYXJnOiBjb2xvci5cclxuXHRcdEBwYXJhbSB7SFRNTEVsZW1lbnR8c3RyaW5nfSByb290X29yX3NlbGVjdG9yXHJcblx0XHRAcGFyYW0ge3N0cmluZ30gW3NlbGVjdG9yXVxyXG5cdFx0QHBhcmFtIHtudW1iZXJ9IFthXVxyXG5cdFx0QHBhcmFtIHtudW1iZXJ9IFtiXVxyXG5cclxuXHRcdEBwYXJhbSB7bnVtYmVyfSBbY11cclxuXHJcblx0XHRAcGFyYW0ge3N0cmluZ30gW2NvbG9yXVxyXG5cdCAqL1xyXG5cdFVJLnB1bHNlX3F1ZXJ5ID0gZnVuY3Rpb24gKHJvb3Rfb3Jfc2VsZWN0b3IsIHNlbGVjdG9yLCBhLCBiLCBjLCBjb2xvcikge1xyXG5cdFx0dmFyIHJvb3QgPSAodHlwZW9mIHJvb3Rfb3Jfc2VsZWN0b3IgPT09ICdzdHJpbmcnKSA/IGQgOiAocm9vdF9vcl9zZWxlY3RvciB8fCBkKTtcclxuXHRcdHZhciBzZWwgID0gKHR5cGVvZiByb290X29yX3NlbGVjdG9yID09PSAnc3RyaW5nJykgPyByb290X29yX3NlbGVjdG9yIDogc2VsZWN0b3I7XHJcblx0XHRpZiAoICFzZWwgKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHR2YXIgZWwgPSByb290LnF1ZXJ5U2VsZWN0b3IoIHNlbCApO1xyXG5cdFx0aWYgKCAhZWwgKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcbi8vIEJhY2stY29tcGF0OiBVSS5wdWxzZVF1ZXJ5KHJvb3QsIHNlbCwgZHVyX21zKVxyXG5cdFx0aWYgKCBOdW1iZXIuaXNGaW5pdGUoIGEgKSAmJiBiID09PSB1bmRlZmluZWQgJiYgYyA9PT0gdW5kZWZpbmVkICkge1xyXG5cdFx0XHRyZXR1cm4gVUkucHVsc2Vfb25jZSggZWwsIGEgKTtcclxuXHRcdH1cclxuLy8gTmV3OiBzZXF1ZW5jZTsgcGFyYW1zIG9wdGlvbmFsOyBzdXBwb3J0cyBvcHRpb25hbCBjb2xvci5cclxuXHRcdFVJLnB1bHNlX3NlcXVlbmNlKCBlbCwgYSwgYiwgYywgY29sb3IgKTtcclxuXHR9O1xyXG5cclxuXHQvKipcclxuXHRDb252ZW5pZW5jZSBoZWxwZXIgKHNuYWtlX2Nhc2UpIHRvIGNhbGwgYSBzdHJvbmcgcHVsc2Ugd2l0aCBvcHRpb25zLlxyXG5cclxuXHRAcGFyYW0ge0hUTUxFbGVtZW50fSBlbFxyXG5cclxuXHRAcGFyYW0ge09iamVjdH0gW29wdHNdXHJcblxyXG5cdEBwYXJhbSB7bnVtYmVyfSBbb3B0cy50aW1lcz0zXVxyXG5cclxuXHRAcGFyYW0ge251bWJlcn0gW29wdHMub25fbXM9MjgwXVxyXG5cclxuXHRAcGFyYW0ge251bWJlcn0gW29wdHMub2ZmX21zPTE4MF1cclxuXHJcblx0QHBhcmFtIHtzdHJpbmd9IFtvcHRzLmNvbG9yXVxyXG5cdCAqL1xyXG5cdFVJLnB1bHNlX3NlcXVlbmNlX3N0cm9uZyA9IGZ1bmN0aW9uIChlbCwgb3B0cykge1xyXG5cdFx0b3B0cyA9IG9wdHMgfHwge307XHJcblx0XHRVSS5wdWxzZV9zZXF1ZW5jZShcclxuXHRcdFx0ZWwsXHJcblx0XHRcdE51bWJlci5pc0Zpbml0ZSggb3B0cy50aW1lcyApID8gb3B0cy50aW1lcyA6IDMsXHJcblx0XHRcdE51bWJlci5pc0Zpbml0ZSggb3B0cy5vbl9tcyApID8gb3B0cy5vbl9tcyA6IDI4MCxcclxuXHRcdFx0TnVtYmVyLmlzRmluaXRlKCBvcHRzLm9mZl9tcyApID8gb3B0cy5vZmZfbXMgOiAxODAsXHJcblx0XHRcdG9wdHMuY29sb3JcclxuXHRcdCk7XHJcblx0fTtcclxuXHJcblxyXG5cdC8qKlxyXG5cdCAqIEJhc2UgY2xhc3MgZm9yIEJGQiBtb2R1bGVzLlxyXG5cdCAqL1xyXG5cdFVJLldQQkNfQkZCX01vZHVsZSA9IGNsYXNzIHtcclxuXHRcdC8qKiBAcGFyYW0ge1dQQkNfRm9ybV9CdWlsZGVyfSBidWlsZGVyICovXHJcblx0XHRjb25zdHJ1Y3RvcihidWlsZGVyKSB7XHJcblx0XHRcdHRoaXMuYnVpbGRlciA9IGJ1aWxkZXI7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqIEluaXRpYWxpemUgdGhlIG1vZHVsZS4gKi9cclxuXHRcdGluaXQoKSB7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqIENsZWFudXAgdGhlIG1vZHVsZS4gKi9cclxuXHRcdGRlc3Ryb3koKSB7XHJcblx0XHR9XHJcblx0fTtcclxuXHJcblx0LyoqXHJcblx0ICogQ2VudHJhbCBvdmVybGF5L2NvbnRyb2xzIG1hbmFnZXIgZm9yIGZpZWxkcy9zZWN0aW9ucy5cclxuXHQgKiBQdXJlIFVJIGNvbXBvc2l0aW9uOyBhbGwgYWN0aW9ucyByb3V0ZSBiYWNrIGludG8gdGhlIGJ1aWxkZXIgaW5zdGFuY2UuXHJcblx0ICovXHJcblx0VUkuV1BCQ19CRkJfT3ZlcmxheSA9IGNsYXNzIHtcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEVuc3VyZSBhbiBvdmVybGF5IGV4aXN0cyBhbmQgaXMgd2lyZWQgdXAgb24gdGhlIGVsZW1lbnQuXHJcblx0XHQgKiBAcGFyYW0ge1dQQkNfRm9ybV9CdWlsZGVyfSBidWlsZGVyXHJcblx0XHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbCAtIGZpZWxkIG9yIHNlY3Rpb24gZWxlbWVudFxyXG5cdFx0ICovXHJcblx0XHRzdGF0aWMgZW5zdXJlKGJ1aWxkZXIsIGVsKSB7XHJcblxyXG5cdFx0XHRpZiAoICFlbCApIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0Y29uc3QgaXNTZWN0aW9uID0gZWwuY2xhc3NMaXN0LmNvbnRhaW5zKCAnd3BiY19iZmJfX3NlY3Rpb24nICk7XHJcblxyXG5cdFx0XHQvLyBsZXQgb3ZlcmxheSA9IGVsLnF1ZXJ5U2VsZWN0b3IoIENvcmUuV1BCQ19CRkJfRE9NLlNFTEVDVE9SUy5vdmVybGF5ICk7XHJcblx0XHRcdGxldCBvdmVybGF5ID0gZWwucXVlcnlTZWxlY3RvciggYDpzY29wZSA+ICR7Q29yZS5XUEJDX0JGQl9ET00uU0VMRUNUT1JTLm92ZXJsYXl9YCApO1xyXG5cdFx0XHRpZiAoICFvdmVybGF5ICkge1xyXG5cdFx0XHRcdG92ZXJsYXkgPSBDb3JlLldQQkNfRm9ybV9CdWlsZGVyX0hlbHBlci5jcmVhdGVfZWxlbWVudCggJ2RpdicsICd3cGJjX2JmYl9fb3ZlcmxheS1jb250cm9scycgKTtcclxuXHRcdFx0XHRlbC5wcmVwZW5kKCBvdmVybGF5ICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIERyYWcgaGFuZGxlLlxyXG5cdFx0XHRpZiAoICFvdmVybGF5LnF1ZXJ5U2VsZWN0b3IoICcud3BiY19iZmJfX2RyYWctaGFuZGxlJyApICkge1xyXG5cdFx0XHRcdGNvbnN0IGRyYWdDbGFzcyA9IGlzU2VjdGlvbiA/ICd3cGJjX2JmYl9fZHJhZy1oYW5kbGUgc2VjdGlvbi1kcmFnLWhhbmRsZScgOiAnd3BiY19iZmJfX2RyYWctaGFuZGxlJztcclxuXHRcdFx0XHRvdmVybGF5LmFwcGVuZENoaWxkKFxyXG5cdFx0XHRcdFx0Q29yZS5XUEJDX0Zvcm1fQnVpbGRlcl9IZWxwZXIuY3JlYXRlX2VsZW1lbnQoICdzcGFuJywgZHJhZ0NsYXNzLCAnPHNwYW4gY2xhc3M9XCJ3cGJjX2ljbl9kcmFnX2luZGljYXRvclwiPjwvc3Bhbj4nIClcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBTRVRUSU5HUyBidXR0b24gKHNob3duIGZvciBib3RoIGZpZWxkcyAmIHNlY3Rpb25zKS5cclxuXHRcdFx0aWYgKCAhb3ZlcmxheS5xdWVyeVNlbGVjdG9yKCAnLndwYmNfYmZiX19zZXR0aW5ncy1idG4nICkgKSB7XHJcblx0XHRcdFx0Y29uc3Qgc2V0dGluZ3NfYnRuICAgPSBDb3JlLldQQkNfRm9ybV9CdWlsZGVyX0hlbHBlci5jcmVhdGVfZWxlbWVudCggJ2J1dHRvbicsICd3cGJjX2JmYl9fc2V0dGluZ3MtYnRuJywgJzxpIGNsYXNzPVwibWVudV9pY29uIGljb24tMXggd3BiY19pY25fc2V0dGluZ3NcIj48L2k+JyApO1xyXG5cdFx0XHRcdHNldHRpbmdzX2J0bi50eXBlICAgID0gJ2J1dHRvbic7XHJcblx0XHRcdFx0c2V0dGluZ3NfYnRuLnRpdGxlICAgPSAnT3BlbiBzZXR0aW5ncyc7XHJcblx0XHRcdFx0c2V0dGluZ3NfYnRuLm9uY2xpY2sgPSAoZSkgPT4ge1xyXG5cdFx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdFx0XHRcdFx0Ly8gU2VsZWN0IFRISVMgZWxlbWVudCBhbmQgc2Nyb2xsIGl0IGludG8gdmlldy5cclxuXHRcdFx0XHRcdGJ1aWxkZXIuc2VsZWN0X2ZpZWxkKCBlbCwgeyBzY3JvbGxJbnRvVmlldzogdHJ1ZSB9ICk7XHJcblxyXG5cdFx0XHRcdFx0Ly8gQXV0by1vcGVuIEluc3BlY3RvciBmcm9tIHRoZSBvdmVybGF5IOKAnFNldHRpbmdz4oCdIGJ1dHRvbi5cclxuXHRcdFx0XHRcdHdwYmNfYmZiX19kaXNwYXRjaF9ldmVudF9zYWZlKFxyXG5cdFx0XHRcdFx0XHQnd3BiY19iZmI6c2hvd19wYW5lbCcsXHJcblx0XHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0XHRwYW5lbF9pZDogJ3dwYmNfYmZiX19pbnNwZWN0b3InLFxyXG5cdFx0XHRcdFx0XHRcdHRhYl9pZCAgOiAnd3BiY190YWJfaW5zcGVjdG9yJ1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0XHRcdC8vIFRyeSB0byBicmluZyB0aGUgaW5zcGVjdG9yIGludG8gdmlldyAvIGZvY3VzIGZpcnN0IGlucHV0LlxyXG5cdFx0XHRcdFx0Y29uc3QgaW5zID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICd3cGJjX2JmYl9faW5zcGVjdG9yJyApO1xyXG5cdFx0XHRcdFx0aWYgKCBpbnMgKSB7XHJcblx0XHRcdFx0XHRcdGlucy5zY3JvbGxJbnRvVmlldyggeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnbmVhcmVzdCcgfSApO1xyXG5cdFx0XHRcdFx0XHQvLyBGb2N1cyBmaXJzdCBpbnRlcmFjdGl2ZSBjb250cm9sIChiZXN0LWVmZm9ydCkuXHJcblx0XHRcdFx0XHRcdHNldFRpbWVvdXQoICgpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBmb2N1c2FibGUgPSBpbnMucXVlcnlTZWxlY3RvciggJ2lucHV0LHNlbGVjdCx0ZXh0YXJlYSxidXR0b24sW2NvbnRlbnRlZGl0YWJsZV0sW3RhYmluZGV4XTpub3QoW3RhYmluZGV4PVwiLTFcIl0pJyApO1xyXG5cdFx0XHRcdFx0XHRcdGZvY3VzYWJsZT8uZm9jdXM/LigpO1xyXG5cdFx0XHRcdFx0XHR9LCAyNjAgKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9O1xyXG5cclxuXHRcdFx0XHRvdmVybGF5LmFwcGVuZENoaWxkKCBzZXR0aW5nc19idG4gKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0b3ZlcmxheS5zZXRBdHRyaWJ1dGUoICdyb2xlJywgJ3Rvb2xiYXInICk7XHJcblx0XHRcdG92ZXJsYXkuc2V0QXR0cmlidXRlKCAnYXJpYS1sYWJlbCcsIGVsLmNsYXNzTGlzdC5jb250YWlucyggJ3dwYmNfYmZiX19zZWN0aW9uJyApID8gJ1NlY3Rpb24gdG9vbHMnIDogJ0ZpZWxkIHRvb2xzJyApO1xyXG5cclxuXHRcdFx0cmV0dXJuIG92ZXJsYXk7XHJcblx0XHR9XHJcblx0fTtcclxuXHJcblx0LyoqXHJcblx0ICogV1BCQyBMYXlvdXQgQ2hpcHMgaGVscGVyIC0gdmlzdWFsIGxheW91dCBwaWNrZXIgKGNoaXBzKSwgZS5nLiwgXCI1MCUvNTAlXCIsIHRvIGEgc2VjdGlvbiBvdmVybGF5LlxyXG5cdCAqXHJcblx0ICogUmVuZGVycyBFcXVhbC9QcmVzZXRzL0N1c3RvbSBjaGlwcyBpbnRvIGEgaG9zdCBjb250YWluZXIgYW5kIHdpcmVzIHRoZW0gdG8gYXBwbHkgdGhlIGxheW91dC5cclxuXHQgKi9cclxuXHRVSS5XUEJDX0JGQl9MYXlvdXRfQ2hpcHMgPSBjbGFzcyB7XHJcblxyXG5cdFx0LyoqIFJlYWQgcGVyLWNvbHVtbiBtaW4gKHB4KSBmcm9tIENTUyB2YXIgc2V0IGJ5IHRoZSBndWFyZC4gKi9cclxuXHRcdHN0YXRpYyBfZ2V0X2NvbF9taW5fcHgoY29sKSB7XHJcblx0XHRcdGNvbnN0IHYgPSBnZXRDb21wdXRlZFN0eWxlKCBjb2wgKS5nZXRQcm9wZXJ0eVZhbHVlKCAnLS13cGJjLWNvbC1taW4nICkgfHwgJzAnO1xyXG5cdFx0XHRjb25zdCBuID0gcGFyc2VGbG9hdCggdiApO1xyXG5cdFx0XHRyZXR1cm4gTnVtYmVyLmlzRmluaXRlKCBuICkgPyBNYXRoLm1heCggMCwgbiApIDogMDtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFR1cm4gcmF3IHdlaWdodHMgKGUuZy4gWzEsMV0sIFsyLDEsMV0pIGludG8gZWZmZWN0aXZlIFwiYXZhaWxhYmxlLSVcIiBiYXNlcyB0aGF0XHJcblx0XHQgKiAoYSkgc3VtIHRvIHRoZSByb3cncyBhdmFpbGFibGUgJSwgYW5kIChiKSBtZWV0IGV2ZXJ5IGNvbHVtbidzIG1pbiBweC5cclxuXHRcdCAqIFJldHVybnMgYW4gYXJyYXkgb2YgYmFzZXMgKG51bWJlcnMpIG9yIG51bGwgaWYgaW1wb3NzaWJsZSB0byBzYXRpc2Z5IG1pbnMuXHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBfZml0X3dlaWdodHNfcmVzcGVjdGluZ19taW4oYnVpbGRlciwgcm93LCB3ZWlnaHRzKSB7XHJcblx0XHRcdGNvbnN0IGNvbHMgPSBBcnJheS5mcm9tKCByb3cucXVlcnlTZWxlY3RvckFsbCggJzpzY29wZSA+IC53cGJjX2JmYl9fY29sdW1uJyApICk7XHJcblx0XHRcdGNvbnN0IG4gICAgPSBjb2xzLmxlbmd0aDtcclxuXHRcdFx0aWYgKCAhbiApIHJldHVybiBudWxsO1xyXG5cdFx0XHRpZiAoICFBcnJheS5pc0FycmF5KCB3ZWlnaHRzICkgfHwgd2VpZ2h0cy5sZW5ndGggIT09IG4gKSByZXR1cm4gbnVsbDtcclxuXHJcblx0XHRcdC8vIGF2YWlsYWJsZSAlIGFmdGVyIGdhcHMgKGZyb20gTGF5b3V0U2VydmljZSlcclxuXHRcdFx0Y29uc3QgZ3AgICAgICAgPSBidWlsZGVyLmNvbF9nYXBfcGVyY2VudDtcclxuXHRcdFx0Y29uc3QgZWZmICAgICAgPSBidWlsZGVyLmxheW91dC5jb21wdXRlX2VmZmVjdGl2ZV9iYXNlc19mcm9tX3Jvdyggcm93LCBncCApO1xyXG5cdFx0XHRjb25zdCBhdmFpbFBjdCA9IGVmZi5hdmFpbGFibGU7ICAgICAgICAgICAgICAgLy8gZS5nLiA5NCBpZiAyIGNvbHMgYW5kIDMlIGdhcFxyXG5cdFx0XHRjb25zdCByb3dQeCAgICA9IHJvdy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcclxuXHRcdFx0Y29uc3QgYXZhaWxQeCAgPSByb3dQeCAqIChhdmFpbFBjdCAvIDEwMCk7XHJcblxyXG5cdFx0XHQvLyBjb2xsZWN0IG1pbmltYSBpbiAlIG9mIFwiYXZhaWxhYmxlXCJcclxuXHRcdFx0Y29uc3QgbWluUGN0ID0gY29scy5tYXAoIChjKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgbWluUHggPSBVSS5XUEJDX0JGQl9MYXlvdXRfQ2hpcHMuX2dldF9jb2xfbWluX3B4KCBjICk7XHJcblx0XHRcdFx0aWYgKCBhdmFpbFB4IDw9IDAgKSByZXR1cm4gMDtcclxuXHRcdFx0XHRyZXR1cm4gKG1pblB4IC8gYXZhaWxQeCkgKiBhdmFpbFBjdDtcclxuXHRcdFx0fSApO1xyXG5cclxuXHRcdFx0Ly8gSWYgbWlucyBhbG9uZSBkb24ndCBmaXQsIGJhaWwuXHJcblx0XHRcdGNvbnN0IHN1bU1pbiA9IG1pblBjdC5yZWR1Y2UoIChhLCBiKSA9PiBhICsgYiwgMCApO1xyXG5cdFx0XHRpZiAoIHN1bU1pbiA+IGF2YWlsUGN0IC0gMWUtNiApIHtcclxuXHRcdFx0XHRyZXR1cm4gbnVsbDsgLy8gaW1wb3NzaWJsZSB0byByZXNwZWN0IG1pbnM7IGRvbid0IGFwcGx5IHByZXNldFxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBUYXJnZXQgcGVyY2VudGFnZXMgZnJvbSB3ZWlnaHRzLCBub3JtYWxpemVkIHRvIGF2YWlsUGN0LlxyXG5cdFx0XHRjb25zdCB3U3VtICAgICAgPSB3ZWlnaHRzLnJlZHVjZSggKGEsIHcpID0+IGEgKyAoTnVtYmVyKCB3ICkgfHwgMCksIDAgKSB8fCBuO1xyXG5cdFx0XHRjb25zdCB0YXJnZXRQY3QgPSB3ZWlnaHRzLm1hcCggKHcpID0+ICgoTnVtYmVyKCB3ICkgfHwgMCkgLyB3U3VtKSAqIGF2YWlsUGN0ICk7XHJcblxyXG5cdFx0XHQvLyBMb2NrIGNvbHVtbnMgdGhhdCB3b3VsZCBiZSBiZWxvdyBtaW4sIHRoZW4gZGlzdHJpYnV0ZSB0aGUgcmVtYWluZGVyXHJcblx0XHRcdC8vIGFjcm9zcyB0aGUgcmVtYWluaW5nIGNvbHVtbnMgcHJvcG9ydGlvbmFsbHkgdG8gdGhlaXIgdGFyZ2V0UGN0LlxyXG5cdFx0XHRjb25zdCBsb2NrZWQgID0gbmV3IEFycmF5KCBuICkuZmlsbCggZmFsc2UgKTtcclxuXHRcdFx0bGV0IGxvY2tlZFN1bSA9IDA7XHJcblx0XHRcdGZvciAoIGxldCBpID0gMDsgaSA8IG47IGkrKyApIHtcclxuXHRcdFx0XHRpZiAoIHRhcmdldFBjdFtpXSA8IG1pblBjdFtpXSApIHtcclxuXHRcdFx0XHRcdGxvY2tlZFtpXSA9IHRydWU7XHJcblx0XHRcdFx0XHRsb2NrZWRTdW0gKz0gbWluUGN0W2ldO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0bGV0IHJlbWFpbmluZyAgICAgPSBhdmFpbFBjdCAtIGxvY2tlZFN1bTtcclxuXHRcdFx0Y29uc3QgZnJlZUlkeCAgICAgPSBbXTtcclxuXHRcdFx0bGV0IGZyZWVUYXJnZXRTdW0gPSAwO1xyXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCBuOyBpKysgKSB7XHJcblx0XHRcdFx0aWYgKCAhbG9ja2VkW2ldICkge1xyXG5cdFx0XHRcdFx0ZnJlZUlkeC5wdXNoKCBpICk7XHJcblx0XHRcdFx0XHRmcmVlVGFyZ2V0U3VtICs9IHRhcmdldFBjdFtpXTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGNvbnN0IHJlc3VsdCA9IG5ldyBBcnJheSggbiApLmZpbGwoIDAgKTtcclxuXHRcdFx0Ly8gU2VlZCBsb2NrZWQgd2l0aCB0aGVpciBtaW5pbWEuXHJcblx0XHRcdGZvciAoIGxldCBpID0gMDsgaSA8IG47IGkrKyApIHtcclxuXHRcdFx0XHRpZiAoIGxvY2tlZFtpXSApIHJlc3VsdFtpXSA9IG1pblBjdFtpXTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKCBmcmVlSWR4Lmxlbmd0aCA9PT0gMCApIHtcclxuXHRcdFx0XHQvLyBldmVyeXRoaW5nIGxvY2tlZCBleGFjdGx5IGF0IG1pbjsgYW55IGxlZnRvdmVyIChzaG91bGRuJ3QgaGFwcGVuKVxyXG5cdFx0XHRcdC8vIHdvdWxkIGJlIGlnbm9yZWQgdG8ga2VlcCBzaW1wbGljaXR5IGFuZCBzdGFiaWxpdHkuXHJcblx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKCByZW1haW5pbmcgPD0gMCApIHtcclxuXHRcdFx0XHQvLyBub3RoaW5nIGxlZnQgdG8gZGlzdHJpYnV0ZTsga2VlcCBleGFjdGx5IG1pbnMgb24gbG9ja2VkLFxyXG5cdFx0XHRcdC8vIG5vdGhpbmcgZm9yIGZyZWUgKGRlZ2VuZXJhdGUgYnV0IGNvbnNpc3RlbnQpXHJcblx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKCBmcmVlVGFyZ2V0U3VtIDw9IDAgKSB7XHJcblx0XHRcdFx0Ly8gZGlzdHJpYnV0ZSBlcXVhbGx5IGFtb25nIGZyZWUgY29sdW1uc1xyXG5cdFx0XHRcdGNvbnN0IGVhY2ggPSByZW1haW5pbmcgLyBmcmVlSWR4Lmxlbmd0aDtcclxuXHRcdFx0XHRmcmVlSWR4LmZvckVhY2goIChpKSA9PiAocmVzdWx0W2ldID0gZWFjaCkgKTtcclxuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBEaXN0cmlidXRlIHJlbWFpbmluZyBwcm9wb3J0aW9uYWxseSB0byBmcmVlIGNvbHVtbnMnIHRhcmdldFBjdFxyXG5cdFx0XHRmcmVlSWR4LmZvckVhY2goIChpKSA9PiB7XHJcblx0XHRcdFx0cmVzdWx0W2ldID0gcmVtYWluaW5nICogKHRhcmdldFBjdFtpXSAvIGZyZWVUYXJnZXRTdW0pO1xyXG5cdFx0XHR9ICk7XHJcblx0XHRcdHJldHVybiByZXN1bHQ7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqIEFwcGx5IGEgcHJlc2V0IGJ1dCBndWFyZCBpdCBieSBtaW5pbWE7IHJldHVybnMgdHJ1ZSBpZiBhcHBsaWVkLCBmYWxzZSBpZiBza2lwcGVkLiAqL1xyXG5cdFx0c3RhdGljIF9hcHBseV9wcmVzZXRfd2l0aF9taW5fZ3VhcmQoYnVpbGRlciwgc2VjdGlvbl9lbCwgd2VpZ2h0cykge1xyXG5cdFx0XHRjb25zdCByb3cgPSBzZWN0aW9uX2VsLnF1ZXJ5U2VsZWN0b3IoICc6c2NvcGUgPiAud3BiY19iZmJfX3JvdycgKTtcclxuXHRcdFx0aWYgKCAhcm93ICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdFx0Y29uc3QgZml0dGVkID0gVUkuV1BCQ19CRkJfTGF5b3V0X0NoaXBzLl9maXRfd2VpZ2h0c19yZXNwZWN0aW5nX21pbiggYnVpbGRlciwgcm93LCB3ZWlnaHRzICk7XHJcblx0XHRcdGlmICggIWZpdHRlZCApIHtcclxuXHRcdFx0XHRidWlsZGVyPy5fYW5ub3VuY2U/LiggJ05vdCBlbm91Z2ggc3BhY2UgZm9yIHRoaXMgbGF5b3V0IGJlY2F1c2Ugb2YgZmllbGRz4oCZIG1pbmltdW0gd2lkdGhzLicgKTtcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIGBmaXR0ZWRgIGFscmVhZHkgc3VtcyB0byB0aGUgcm934oCZcyBhdmFpbGFibGUgJSwgc28gd2UgY2FuIGFwcGx5IGJhc2VzIGRpcmVjdGx5LlxyXG5cdFx0XHRidWlsZGVyLmxheW91dC5hcHBseV9iYXNlc190b19yb3coIHJvdywgZml0dGVkICk7XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEJ1aWxkIGFuZCBhcHBlbmQgbGF5b3V0IGNoaXBzIGZvciBhIHNlY3Rpb24uXHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHtXUEJDX0Zvcm1fQnVpbGRlcn0gYnVpbGRlciAtIFRoZSBmb3JtIGJ1aWxkZXIgaW5zdGFuY2UuXHJcblx0XHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBzZWN0aW9uX2VsIC0gVGhlIC53cGJjX2JmYl9fc2VjdGlvbiBlbGVtZW50LlxyXG5cdFx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gaG9zdF9lbCAtIENvbnRhaW5lciB3aGVyZSBjaGlwcyBzaG91bGQgYmUgcmVuZGVyZWQuXHJcblx0XHQgKiBAcmV0dXJucyB7dm9pZH1cclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIHJlbmRlcl9mb3Jfc2VjdGlvbihidWlsZGVyLCBzZWN0aW9uX2VsLCBob3N0X2VsKSB7XHJcblxyXG5cdFx0XHRpZiAoICFidWlsZGVyIHx8ICFzZWN0aW9uX2VsIHx8ICFob3N0X2VsICkge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Y29uc3Qgcm93ID0gc2VjdGlvbl9lbC5xdWVyeVNlbGVjdG9yKCAnOnNjb3BlID4gLndwYmNfYmZiX19yb3cnICk7XHJcblx0XHRcdGlmICggIXJvdyApIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGNvbnN0IGNvbHMgPSByb3cucXVlcnlTZWxlY3RvckFsbCggJzpzY29wZSA+IC53cGJjX2JmYl9fY29sdW1uJyApLmxlbmd0aCB8fCAxO1xyXG5cclxuXHRcdFx0Ly8gQ2xlYXIgaG9zdC5cclxuXHRcdFx0aG9zdF9lbC5pbm5lckhUTUwgPSAnJztcclxuXHJcblx0XHRcdC8vIEVxdWFsIGNoaXAuXHJcblx0XHRcdGhvc3RfZWwuYXBwZW5kQ2hpbGQoXHJcblx0XHRcdFx0VUkuV1BCQ19CRkJfTGF5b3V0X0NoaXBzLl9tYWtlX2NoaXAoIGJ1aWxkZXIsIHNlY3Rpb25fZWwsIEFycmF5KCBjb2xzICkuZmlsbCggMSApLCAnRXF1YWwnIClcclxuXHRcdFx0KTtcclxuXHJcblx0XHRcdC8vIFByZXNldHMgYmFzZWQgb24gY29sdW1uIGNvdW50LlxyXG5cdFx0XHRjb25zdCBwcmVzZXRzID0gYnVpbGRlci5sYXlvdXQuYnVpbGRfcHJlc2V0c19mb3JfY29sdW1ucyggY29scyApO1xyXG5cdFx0XHRwcmVzZXRzLmZvckVhY2goICh3ZWlnaHRzKSA9PiB7XHJcblx0XHRcdFx0aG9zdF9lbC5hcHBlbmRDaGlsZChcclxuXHRcdFx0XHRcdFVJLldQQkNfQkZCX0xheW91dF9DaGlwcy5fbWFrZV9jaGlwKCBidWlsZGVyLCBzZWN0aW9uX2VsLCB3ZWlnaHRzLCBudWxsIClcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9ICk7XHJcblxyXG5cdFx0XHQvLyBDdXN0b20gY2hpcC5cclxuXHRcdFx0Y29uc3QgY3VzdG9tQnRuICAgICAgID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2J1dHRvbicgKTtcclxuXHRcdFx0Y3VzdG9tQnRuLnR5cGUgICAgICAgID0gJ2J1dHRvbic7XHJcblx0XHRcdGN1c3RvbUJ0bi5jbGFzc05hbWUgICA9ICd3cGJjX2JmYl9fbGF5b3V0X2NoaXAnO1xyXG5cdFx0XHRjdXN0b21CdG4udGV4dENvbnRlbnQgPSAnQ3VzdG9t4oCmJztcclxuXHRcdFx0Y3VzdG9tQnRuLnRpdGxlICAgICAgID0gYEVudGVyICR7Y29sc30gcGVyY2VudGFnZXNgO1xyXG5cdFx0XHRjdXN0b21CdG4uYWRkRXZlbnRMaXN0ZW5lciggJ2NsaWNrJywgKCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IGV4YW1wbGUgPSAoY29scyA9PT0gMikgPyAnNTAsNTAnIDogKGNvbHMgPT09IDMgPyAnMjAsNjAsMjAnIDogJzI1LDI1LDI1LDI1Jyk7XHJcblx0XHRcdFx0Y29uc3QgdGV4dCAgICA9IHByb21wdCggYEVudGVyICR7Y29sc30gcGVyY2VudGFnZXMgKGNvbW1hIG9yIHNwYWNlIHNlcGFyYXRlZCk6YCwgZXhhbXBsZSApO1xyXG5cdFx0XHRcdGlmICggdGV4dCA9PSBudWxsICkgcmV0dXJuO1xyXG5cdFx0XHRcdGNvbnN0IHdlaWdodHMgPSBidWlsZGVyLmxheW91dC5wYXJzZV93ZWlnaHRzKCB0ZXh0ICk7XHJcblx0XHRcdFx0aWYgKCB3ZWlnaHRzLmxlbmd0aCAhPT0gY29scyApIHtcclxuXHRcdFx0XHRcdGFsZXJ0KCBgUGxlYXNlIGVudGVyIGV4YWN0bHkgJHtjb2xzfSBudW1iZXJzLmAgKTtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Ly8gT0xEOlxyXG5cdFx0XHRcdC8vIGJ1aWxkZXIubGF5b3V0LmFwcGx5X2xheW91dF9wcmVzZXQoIHNlY3Rpb25fZWwsIHdlaWdodHMsIGJ1aWxkZXIuY29sX2dhcF9wZXJjZW50ICk7XHJcblx0XHRcdFx0Ly8gR3VhcmRlZCBhcHBseTouXHJcblx0XHRcdFx0aWYgKCAhVUkuV1BCQ19CRkJfTGF5b3V0X0NoaXBzLl9hcHBseV9wcmVzZXRfd2l0aF9taW5fZ3VhcmQoIGJ1aWxkZXIsIHNlY3Rpb25fZWwsIHdlaWdodHMgKSApIHtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aG9zdF9lbC5xdWVyeVNlbGVjdG9yQWxsKCAnLndwYmNfYmZiX19sYXlvdXRfY2hpcCcgKS5mb3JFYWNoKCBjID0+IGMuY2xhc3NMaXN0LnJlbW92ZSggJ2lzLWFjdGl2ZScgKSApO1xyXG5cdFx0XHRcdGN1c3RvbUJ0bi5jbGFzc0xpc3QuYWRkKCAnaXMtYWN0aXZlJyApO1xyXG5cdFx0XHR9ICk7XHJcblx0XHRcdGhvc3RfZWwuYXBwZW5kQ2hpbGQoIGN1c3RvbUJ0biApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQ3JlYXRlIGEgc2luZ2xlIGxheW91dCBjaGlwIGJ1dHRvbi5cclxuXHRcdCAqXHJcblx0XHQgKiBAcHJpdmF0ZVxyXG5cdFx0ICogQHBhcmFtIHtXUEJDX0Zvcm1fQnVpbGRlcn0gYnVpbGRlclxyXG5cdFx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gc2VjdGlvbl9lbFxyXG5cdFx0ICogQHBhcmFtIHtudW1iZXJbXX0gd2VpZ2h0c1xyXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd8bnVsbH0gbGFiZWxcclxuXHRcdCAqIEByZXR1cm5zIHtIVE1MQnV0dG9uRWxlbWVudH1cclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIF9tYWtlX2NoaXAoYnVpbGRlciwgc2VjdGlvbl9lbCwgd2VpZ2h0cywgbGFiZWwgPSBudWxsKSB7XHJcblxyXG5cdFx0XHRjb25zdCBidG4gICAgID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2J1dHRvbicgKTtcclxuXHRcdFx0YnRuLnR5cGUgICAgICA9ICdidXR0b24nO1xyXG5cdFx0XHRidG4uY2xhc3NOYW1lID0gJ3dwYmNfYmZiX19sYXlvdXRfY2hpcCc7XHJcblxyXG5cdFx0XHRjb25zdCB0aXRsZSA9IGxhYmVsIHx8IGJ1aWxkZXIubGF5b3V0LmZvcm1hdF9wcmVzZXRfbGFiZWwoIHdlaWdodHMgKTtcclxuXHRcdFx0YnRuLnRpdGxlICAgPSB0aXRsZTtcclxuXHJcblx0XHRcdC8vIFZpc3VhbCBtaW5pYXR1cmUuXHJcblx0XHRcdGNvbnN0IHZpcyAgICAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnZGl2JyApO1xyXG5cdFx0XHR2aXMuY2xhc3NOYW1lID0gJ3dwYmNfYmZiX19sYXlvdXRfY2hpcC12aXMnO1xyXG5cdFx0XHRjb25zdCBzdW0gICAgID0gd2VpZ2h0cy5yZWR1Y2UoIChhLCBiKSA9PiBhICsgKE51bWJlciggYiApIHx8IDApLCAwICkgfHwgMTtcclxuXHRcdFx0d2VpZ2h0cy5mb3JFYWNoKCAodykgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IGJhciAgICAgID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ3NwYW4nICk7XHJcblx0XHRcdFx0YmFyLnN0eWxlLmZsZXggPSBgMCAwIGNhbGMoICR7KChOdW1iZXIoIHcgKSB8fCAwKSAvIHN1bSAqIDEwMCkudG9GaXhlZCggMyApfSUgLSAxLjVweCApYDtcclxuXHRcdFx0XHR2aXMuYXBwZW5kQ2hpbGQoIGJhciApO1xyXG5cdFx0XHR9ICk7XHJcblx0XHRcdGJ0bi5hcHBlbmRDaGlsZCggdmlzICk7XHJcblxyXG5cdFx0XHRjb25zdCB0eHQgICAgICAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnc3BhbicgKTtcclxuXHRcdFx0dHh0LmNsYXNzTmFtZSAgID0gJ3dwYmNfYmZiX19sYXlvdXRfY2hpcC1sYWJlbCc7XHJcblx0XHRcdHR4dC50ZXh0Q29udGVudCA9IGxhYmVsIHx8IGJ1aWxkZXIubGF5b3V0LmZvcm1hdF9wcmVzZXRfbGFiZWwoIHdlaWdodHMgKTtcclxuXHRcdFx0YnRuLmFwcGVuZENoaWxkKCB0eHQgKTtcclxuXHJcblx0XHRcdGJ0bi5hZGRFdmVudExpc3RlbmVyKCAnY2xpY2snLCAoKSA9PiB7XHJcblx0XHRcdFx0Ly8gT0xEOlxyXG5cdFx0XHRcdC8vIGJ1aWxkZXIubGF5b3V0LmFwcGx5X2xheW91dF9wcmVzZXQoIHNlY3Rpb25fZWwsIHdlaWdodHMsIGJ1aWxkZXIuY29sX2dhcF9wZXJjZW50ICk7XHJcblxyXG5cdFx0XHRcdC8vIE5FVzpcclxuXHRcdFx0XHRpZiAoICFVSS5XUEJDX0JGQl9MYXlvdXRfQ2hpcHMuX2FwcGx5X3ByZXNldF93aXRoX21pbl9ndWFyZCggYnVpbGRlciwgc2VjdGlvbl9lbCwgd2VpZ2h0cyApICkge1xyXG5cdFx0XHRcdFx0cmV0dXJuOyAvLyBkbyBub3QgdG9nZ2xlIGFjdGl2ZSBpZiB3ZSBkaWRuJ3QgY2hhbmdlIGxheW91dFxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0YnRuLnBhcmVudEVsZW1lbnQ/LnF1ZXJ5U2VsZWN0b3JBbGwoICcud3BiY19iZmJfX2xheW91dF9jaGlwJyApLmZvckVhY2goIGMgPT4gYy5jbGFzc0xpc3QucmVtb3ZlKCAnaXMtYWN0aXZlJyApICk7XHJcblx0XHRcdFx0YnRuLmNsYXNzTGlzdC5hZGQoICdpcy1hY3RpdmUnICk7XHJcblx0XHRcdH0gKTtcclxuXHJcblx0XHRcdHJldHVybiBidG47XHJcblx0XHR9XHJcblx0fTtcclxuXHJcblx0LyoqXHJcblx0ICogU2VsZWN0aW9uIGNvbnRyb2xsZXIgZm9yIGZpZWxkcyBhbmQgYW5ub3VuY2VtZW50cy5cclxuXHQgKi9cclxuXHRVSS5XUEJDX0JGQl9TZWxlY3Rpb25fQ29udHJvbGxlciA9IGNsYXNzIGV4dGVuZHMgVUkuV1BCQ19CRkJfTW9kdWxlIHtcclxuXHJcblx0XHRpbml0KCkge1xyXG5cclxuXHRcdFx0dGhpcy5fc2VsZWN0ZWRfdWlkICAgICAgICAgICAgICA9IG51bGw7XHJcblx0XHRcdHRoaXMuYnVpbGRlci5zZWxlY3RfZmllbGQgICAgICAgPSB0aGlzLnNlbGVjdF9maWVsZC5iaW5kKCB0aGlzICk7XHJcblx0XHRcdHRoaXMuYnVpbGRlci5nZXRfc2VsZWN0ZWRfZmllbGQgPSB0aGlzLmdldF9zZWxlY3RlZF9maWVsZC5iaW5kKCB0aGlzICk7XHJcblx0XHRcdHRoaXMuX29uX2NsZWFyICAgICAgICAgICAgICAgICAgPSB0aGlzLm9uX2NsZWFyLmJpbmQoIHRoaXMgKTtcclxuXHJcblx0XHRcdC8vIENlbnRyYWxpemVkIGRlbGV0ZSBjb21tYW5kIHVzZWQgYnkga2V5Ym9hcmQgKyBpbnNwZWN0b3IgKyBvdmVybGF5LlxyXG5cdFx0XHR0aGlzLmJ1aWxkZXIuZGVsZXRlX2l0ZW0gPSAoZWwpID0+IHtcclxuXHRcdFx0XHRpZiAoICFlbCApIHtcclxuXHRcdFx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRjb25zdCBiICAgICAgICA9IHRoaXMuYnVpbGRlcjtcclxuXHRcdFx0XHRjb25zdCBuZWlnaGJvciA9IGIuX2ZpbmRfbmVpZ2hib3Jfc2VsZWN0YWJsZT8uKCBlbCApIHx8IG51bGw7XHJcblx0XHRcdFx0ZWwucmVtb3ZlKCk7XHJcblx0XHRcdFx0Ly8gVXNlIGxvY2FsIENvcmUgY29uc3RhbnRzIChub3QgYSBnbG9iYWwpIHRvIGF2b2lkIFJlZmVyZW5jZUVycm9ycy5cclxuXHRcdFx0XHRiLmJ1cz8uZW1pdD8uKCBDb3JlLldQQkNfQkZCX0V2ZW50cy5GSUVMRF9SRU1PVkUsIHsgZWwsIGlkOiBlbD8uZGF0YXNldD8uaWQsIHVpZDogZWw/LmRhdGFzZXQ/LnVpZCB9ICk7XHJcblx0XHRcdFx0Yi51c2FnZT8udXBkYXRlX3BhbGV0dGVfdWk/LigpO1xyXG5cdFx0XHRcdC8vIE5vdGlmeSBnZW5lcmljIHN0cnVjdHVyZSBsaXN0ZW5lcnMsIHRvbzpcclxuXHRcdFx0XHRiLmJ1cz8uZW1pdD8uKCBDb3JlLldQQkNfQkZCX0V2ZW50cy5TVFJVQ1RVUkVfQ0hBTkdFLCB7IHJlYXNvbjogJ2RlbGV0ZScsIGVsIH0gKTtcclxuXHRcdFx0XHQvLyBEZWZlciBzZWxlY3Rpb24gYSB0aWNrIHNvIHRoZSBET00gaXMgZnVsbHkgc2V0dGxlZCBiZWZvcmUgSW5zcGVjdG9yIGh5ZHJhdGVzLlxyXG5cdFx0XHRcdHJlcXVlc3RBbmltYXRpb25GcmFtZSggKCkgPT4ge1xyXG5cdFx0XHRcdFx0Ly8gVGhpcyBjYWxscyBpbnNwZWN0b3IuYmluZF90b19maWVsZCgpIGFuZCBvcGVucyB0aGUgSW5zcGVjdG9yIHBhbmVsLlxyXG5cdFx0XHRcdFx0Yi5zZWxlY3RfZmllbGQ/LiggbmVpZ2hib3IgfHwgbnVsbCwgeyBzY3JvbGxJbnRvVmlldzogISFuZWlnaGJvciB9ICk7XHJcblx0XHRcdFx0fSApO1xyXG5cdFx0XHRcdHJldHVybiBuZWlnaGJvcjtcclxuXHRcdFx0fTtcclxuXHRcdFx0dGhpcy5idWlsZGVyLmJ1cy5vbiggQ29yZS5XUEJDX0JGQl9FdmVudHMuQ0xFQVJfU0VMRUNUSU9OLCB0aGlzLl9vbl9jbGVhciApO1xyXG5cdFx0XHR0aGlzLmJ1aWxkZXIuYnVzLm9uKCBDb3JlLldQQkNfQkZCX0V2ZW50cy5TVFJVQ1RVUkVfTE9BREVELCB0aGlzLl9vbl9jbGVhciApO1xyXG5cdFx0XHQvLyBkZWxlZ2F0ZWQgY2xpY2sgc2VsZWN0aW9uIChjYXB0dXJlIGVuc3VyZXMgd2Ugd2luIGJlZm9yZSBidWJibGluZyB0byBjb250YWluZXJzKS5cclxuXHRcdFx0dGhpcy5fb25fY2FudmFzX2NsaWNrID0gdGhpcy5faGFuZGxlX2NhbnZhc19jbGljay5iaW5kKCB0aGlzICk7XHJcblx0XHRcdHRoaXMuYnVpbGRlci5wYWdlc19jb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lciggJ2NsaWNrJywgdGhpcy5fb25fY2FudmFzX2NsaWNrLCB0cnVlICk7XHJcblx0XHR9XHJcblxyXG5cdFx0ZGVzdHJveSgpIHtcclxuXHRcdFx0dGhpcy5idWlsZGVyLmJ1cy5vZmYoIENvcmUuV1BCQ19CRkJfRXZlbnRzLkNMRUFSX1NFTEVDVElPTiwgdGhpcy5fb25fY2xlYXIgKTtcclxuXHJcblx0XHRcdGlmICggdGhpcy5fb25fY2FudmFzX2NsaWNrICkge1xyXG5cdFx0XHRcdHRoaXMuYnVpbGRlci5wYWdlc19jb250YWluZXIucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ2NsaWNrJywgdGhpcy5fb25fY2FudmFzX2NsaWNrLCB0cnVlICk7XHJcblx0XHRcdFx0dGhpcy5fb25fY2FudmFzX2NsaWNrID0gbnVsbDtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogRGVsZWdhdGVkIGNhbnZhcyBjbGljayAtPiBzZWxlY3QgY2xvc2VzdCBmaWVsZC9zZWN0aW9uIChpbm5lciBiZWF0cyBvdXRlcikuXHJcblx0XHQgKiBAcHJpdmF0ZVxyXG5cdFx0ICogQHBhcmFtIHtNb3VzZUV2ZW50fSBlXHJcblx0XHQgKi9cclxuXHRcdF9oYW5kbGVfY2FudmFzX2NsaWNrKGUpIHtcclxuXHRcdFx0Y29uc3Qgcm9vdCA9IHRoaXMuYnVpbGRlci5wYWdlc19jb250YWluZXI7XHJcblx0XHRcdGlmICggIXJvb3QgKSByZXR1cm47XHJcblxyXG5cdFx0XHQvLyBJZ25vcmUgY2xpY2tzIG9uIGNvbnRyb2xzL2hhbmRsZXMvcmVzaXplcnMsIGV0Yy5cclxuXHRcdFx0Y29uc3QgSUdOT1JFID0gW1xyXG5cdFx0XHRcdCcud3BiY19iZmJfX292ZXJsYXktY29udHJvbHMnLFxyXG5cdFx0XHRcdCcud3BiY19iZmJfX2xheW91dF9waWNrZXInLFxyXG5cdFx0XHRcdCcud3BiY19iZmJfX2RyYWctaGFuZGxlJyxcclxuXHRcdFx0XHQnLndwYmNfYmZiX19maWVsZC1yZW1vdmUtYnRuJyxcclxuXHRcdFx0XHQnLndwYmNfYmZiX19maWVsZC1tb3ZlLXVwJyxcclxuXHRcdFx0XHQnLndwYmNfYmZiX19maWVsZC1tb3ZlLWRvd24nLFxyXG5cdFx0XHRcdCcud3BiY19iZmJfX2NvbHVtbi1yZXNpemVyJ1xyXG5cdFx0XHRdLmpvaW4oICcsJyApO1xyXG5cclxuXHRcdFx0aWYgKCBlLnRhcmdldC5jbG9zZXN0KCBJR05PUkUgKSApIHtcclxuXHRcdFx0XHRyZXR1cm47IC8vIGxldCB0aG9zZSBjb250cm9scyBkbyB0aGVpciBvd24gdGhpbmcuXHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIEZpbmQgdGhlIGNsb3Nlc3Qgc2VsZWN0YWJsZSAoZmllbGQgT1Igc2VjdGlvbikgZnJvbSB0aGUgY2xpY2sgdGFyZ2V0LlxyXG5cdFx0XHRsZXQgaGl0ID0gZS50YXJnZXQuY2xvc2VzdD8uKFxyXG5cdFx0XHRcdGAke0NvcmUuV1BCQ19CRkJfRE9NLlNFTEVDVE9SUy52YWxpZEZpZWxkfSwgJHtDb3JlLldQQkNfQkZCX0RPTS5TRUxFQ1RPUlMuc2VjdGlvbn0sIC53cGJjX2JmYl9fY29sdW1uYFxyXG5cdFx0XHQpO1xyXG5cclxuXHRcdFx0aWYgKCAhaGl0IHx8ICFyb290LmNvbnRhaW5zKCBoaXQgKSApIHtcclxuXHRcdFx0XHR0aGlzLnNlbGVjdF9maWVsZCggbnVsbCApOyAgICAgICAgICAgLy8gQ2xlYXIgc2VsZWN0aW9uIG9uIGJsYW5rIGNsaWNrLlxyXG5cdFx0XHRcdHJldHVybjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBFbXB0eSBzcGFjZSBpcyBoYW5kbGVkIGVsc2V3aGVyZS5cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gTkVXOiBpZiB1c2VyIGNsaWNrZWQgYSBDT0xVTU4gLT4gcmVtZW1iZXIgdGFiIGtleSBvbiBpdHMgU0VDVElPTiwgYnV0IHN0aWxsIHNlbGVjdCB0aGUgc2VjdGlvbi5cclxuXHRcdFx0bGV0IHByZXNlbGVjdF90YWJfa2V5ID0gbnVsbDtcclxuXHRcdFx0aWYgKCBoaXQuY2xhc3NMaXN0LmNvbnRhaW5zKCAnd3BiY19iZmJfX2NvbHVtbicgKSApIHtcclxuXHRcdFx0XHRjb25zdCByb3cgID0gaGl0LmNsb3Nlc3QoICcud3BiY19iZmJfX3JvdycgKTtcclxuXHRcdFx0XHRjb25zdCBjb2xzID0gcm93ID8gQXJyYXkuZnJvbSggcm93LnF1ZXJ5U2VsZWN0b3JBbGwoICc6c2NvcGUgPiAud3BiY19iZmJfX2NvbHVtbicgKSApIDogW107XHJcblx0XHRcdFx0Y29uc3QgaWR4ICA9IE1hdGgubWF4KCAwLCBjb2xzLmluZGV4T2YoIGhpdCApICk7XHJcblx0XHRcdFx0Y29uc3Qgc2VjICA9IGhpdC5jbG9zZXN0KCAnLndwYmNfYmZiX19zZWN0aW9uJyApO1xyXG5cdFx0XHRcdGlmICggc2VjICkge1xyXG5cdFx0XHRcdFx0cHJlc2VsZWN0X3RhYl9rZXkgPSBTdHJpbmcoIGlkeCArIDEgKTsgICAgICAgICAgICAgIC8vIHRhYnMgYXJlIDEtYmFzZWQgaW4gdWktY29sdW1uLXN0eWxlcy5qc1xyXG5cdFx0XHRcdFx0Ly8gSGludCBmb3IgdGhlIHJlbmRlcmVyIChpdCByZWFkcyB0aGlzIEJFRk9SRSByZW5kZXJpbmcgYW5kIHJlc3RvcmVzIHRoZSB0YWIpLlxyXG5cdFx0XHRcdFx0c2VjLmRhdGFzZXQuY29sX3N0eWxlc19hY3RpdmVfdGFiID0gcHJlc2VsZWN0X3RhYl9rZXk7XHJcblx0XHRcdFx0XHQvLyBwcm9tb3RlIHNlbGVjdGlvbiB0byB0aGUgc2VjdGlvbiAoc2FtZSBVWCBhcyBiZWZvcmUpLlxyXG5cdFx0XHRcdFx0aGl0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gc2VjO1xyXG5cdFx0XHRcdFx0Ly8gTkVXOiB2aXN1YWxseSBtYXJrIHdoaWNoIGNvbHVtbiBpcyBiZWluZyBlZGl0ZWRcclxuXHRcdFx0XHRcdGlmICggVUkgJiYgVUkuV1BCQ19CRkJfQ29sdW1uX1N0eWxlcyAmJiBVSS5XUEJDX0JGQl9Db2x1bW5fU3R5bGVzLnNldF9zZWxlY3RlZF9jb2xfZmxhZyApIHtcclxuXHRcdFx0XHRcdFx0VUkuV1BCQ19CRkJfQ29sdW1uX1N0eWxlcy5zZXRfc2VsZWN0ZWRfY29sX2ZsYWcoIHNlYywgcHJlc2VsZWN0X3RhYl9rZXkgKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIFNlbGVjdCBhbmQgc3RvcCBidWJibGluZyBzbyBvdXRlciBjb250YWluZXJzIGRvbuKAmXQgcmVzZWxlY3QgYSBwYXJlbnQuXHJcblx0XHRcdHRoaXMuc2VsZWN0X2ZpZWxkKCBoaXQgKTtcclxuXHRcdFx0ZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcblx0XHRcdC8vIEFsc28gc2V0IHRoZSB0YWIgYWZ0ZXIgdGhlIGluc3BlY3RvciByZW5kZXJzICh3b3JrcyBldmVuIGlmIGl0IHdhcyBhbHJlYWR5IG9wZW4pLlxyXG5cdFx0XHRpZiAoIHByZXNlbGVjdF90YWJfa2V5ICkge1xyXG5cdFx0XHRcdCh3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8IHNldFRpbWVvdXQpKCBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0XHRjb25zdCBpbnMgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICd3cGJjX2JmYl9faW5zcGVjdG9yJyApO1xyXG5cdFx0XHRcdFx0XHRjb25zdCB0YWJzID0gaW5zICYmIGlucy5xdWVyeVNlbGVjdG9yKCAnW2RhdGEtYmZiLXNsb3Q9XCJjb2x1bW5fc3R5bGVzXCJdIFtkYXRhLXdwYmMtdGFic10nICk7XHJcblx0XHRcdFx0XHRcdGlmICggdGFicyAmJiB3aW5kb3cud3BiY191aV90YWJzICYmIHR5cGVvZiB3aW5kb3cud3BiY191aV90YWJzLnNldF9hY3RpdmUgPT09ICdmdW5jdGlvbicgKSB7XHJcblx0XHRcdFx0XHRcdFx0d2luZG93LndwYmNfdWlfdGFicy5zZXRfYWN0aXZlKCB0YWJzLCBwcmVzZWxlY3RfdGFiX2tleSApO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9IGNhdGNoICggX2UgKSB7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSwgMCApO1xyXG5cclxuXHRcdFx0XHQvLyBQb2xpdGVseSBhc2sgdGhlIEluc3BlY3RvciB0byBmb2N1cy9vcGVuIHRoZSBcIkNvbHVtbiBTdHlsZXNcIiBncm91cCBhbmQgdGFiLlxyXG5cdFx0XHRcdHdwYmNfYmZiX19kaXNwYXRjaF9ldmVudF9zYWZlKFxyXG5cdFx0XHRcdFx0J3dwYmNfYmZiOmluc3BlY3Rvcl9mb2N1cycsXHJcblx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdGdyb3VwICA6ICdjb2x1bW5fc3R5bGVzJyxcclxuXHRcdFx0XHRcdFx0dGFiX2tleTogcHJlc2VsZWN0X3RhYl9rZXlcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogU2VsZWN0IGEgZmllbGQgZWxlbWVudCBvciBjbGVhciBzZWxlY3Rpb24uXHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHtIVE1MRWxlbWVudHxudWxsfSBmaWVsZF9lbFxyXG5cdFx0ICogQHBhcmFtIHt7c2Nyb2xsSW50b1ZpZXc/OiBib29sZWFufX0gW29wdHMgPSB7fV1cclxuXHRcdCAqL1xyXG5cdFx0c2VsZWN0X2ZpZWxkKGZpZWxkX2VsLCB7IHNjcm9sbEludG9WaWV3ID0gZmFsc2UgfSA9IHt9KSB7XHJcblx0XHRcdGNvbnN0IHJvb3QgICA9IHRoaXMuYnVpbGRlci5wYWdlc19jb250YWluZXI7XHJcblx0XHRcdGNvbnN0IHByZXZFbCA9IHRoaXMuZ2V0X3NlbGVjdGVkX2ZpZWxkPy4oKSB8fCBudWxsOyAgIC8vIHRoZSBvbmUgd2XigJlyZSBsZWF2aW5nLlxyXG5cclxuXHRcdFx0Ly8gSWdub3JlIGVsZW1lbnRzIG5vdCBpbiB0aGUgY2FudmFzLlxyXG5cdFx0XHRpZiAoIGZpZWxkX2VsICYmICFyb290LmNvbnRhaW5zKCBmaWVsZF9lbCApICkge1xyXG5cdFx0XHRcdGZpZWxkX2VsID0gbnVsbDsgLy8gdHJlYXQgYXMgXCJubyBzZWxlY3Rpb25cIi5cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gTkVXOiBpZiB3ZSBhcmUgbGVhdmluZyBhIHNlY3Rpb24sIGNsZWFyIGl0cyBjb2x1bW4gaGlnaGxpZ2h0XHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHRwcmV2RWwgJiYgcHJldkVsICE9PSBmaWVsZF9lbCAmJlxyXG5cdFx0XHRcdHByZXZFbC5jbGFzc0xpc3Q/LmNvbnRhaW5zKCAnd3BiY19iZmJfX3NlY3Rpb24nICkgJiZcclxuXHRcdFx0XHRVST8uV1BCQ19CRkJfQ29sdW1uX1N0eWxlcz8uY2xlYXJfc2VsZWN0ZWRfY29sX2ZsYWdcclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0VUkuV1BCQ19CRkJfQ29sdW1uX1N0eWxlcy5jbGVhcl9zZWxlY3RlZF9jb2xfZmxhZyggcHJldkVsICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIElmIHdlJ3JlIGxlYXZpbmcgYSBmaWVsZCwgcGVybWFuZW50bHkgc3RvcCBhdXRvLW5hbWUgZm9yIGl0LlxyXG5cdFx0XHRpZiAoIHByZXZFbCAmJiBwcmV2RWwgIT09IGZpZWxkX2VsICYmIHByZXZFbC5jbGFzc0xpc3Q/LmNvbnRhaW5zKCAnd3BiY19iZmJfX2ZpZWxkJyApICkge1xyXG5cdFx0XHRcdHByZXZFbC5kYXRhc2V0LmF1dG9uYW1lID0gJzAnO1xyXG5cdFx0XHRcdHByZXZFbC5kYXRhc2V0LmZyZXNoICAgID0gJzAnO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyb290LnF1ZXJ5U2VsZWN0b3JBbGwoICcuaXMtc2VsZWN0ZWQnICkuZm9yRWFjaCggKG4pID0+IHtcclxuXHRcdFx0XHRuLmNsYXNzTGlzdC5yZW1vdmUoICdpcy1zZWxlY3RlZCcgKTtcclxuXHRcdFx0fSApO1xyXG5cdFx0XHRpZiAoICFmaWVsZF9lbCApIHtcclxuXHRcdFx0XHRjb25zdCBwcmV2ICAgICAgICAgPSB0aGlzLl9zZWxlY3RlZF91aWQgfHwgbnVsbDtcclxuXHRcdFx0XHR0aGlzLl9zZWxlY3RlZF91aWQgPSBudWxsO1xyXG5cdFx0XHRcdHRoaXMuYnVpbGRlci5pbnNwZWN0b3I/LmNsZWFyPy4oKTtcclxuXHRcdFx0XHRyb290LmNsYXNzTGlzdC5yZW1vdmUoICdoYXMtc2VsZWN0aW9uJyApO1xyXG5cdFx0XHRcdHRoaXMuYnVpbGRlci5idXMuZW1pdCggQ29yZS5XUEJDX0JGQl9FdmVudHMuQ0xFQVJfU0VMRUNUSU9OLCB7IHByZXZfdWlkOiBwcmV2LCBzb3VyY2U6ICdidWlsZGVyJyB9ICk7XHJcblxyXG5cdFx0XHRcdC8vIEF1dG8tb3BlbiBcIkFkZCBGaWVsZHNcIiB3aGVuIG5vdGhpbmcgaXMgc2VsZWN0ZWQuXHJcblx0XHRcdFx0d3BiY19iZmJfX2Rpc3BhdGNoX2V2ZW50X3NhZmUoXHJcblx0XHRcdFx0XHQnd3BiY19iZmI6c2hvd19wYW5lbCcsXHJcblx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdHBhbmVsX2lkOiAnd3BiY19iZmJfX3BhbGV0dGVfYWRkX25ldycsXHJcblx0XHRcdFx0XHRcdHRhYl9pZCAgOiAnd3BiY190YWJfbGlicmFyeSdcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0ZmllbGRfZWwuY2xhc3NMaXN0LmFkZCggJ2lzLXNlbGVjdGVkJyApO1xyXG5cdFx0XHR0aGlzLl9zZWxlY3RlZF91aWQgPSBmaWVsZF9lbC5nZXRBdHRyaWJ1dGUoICdkYXRhLXVpZCcgKSB8fCBudWxsO1xyXG5cclxuXHRcdFx0Ly8gRmFsbGJhY2s6IGVuc3VyZSBzZWN0aW9ucyBhbm5vdW5jZSB0aGVtc2VsdmVzIGFzIHR5cGU9XCJzZWN0aW9uXCIuXHJcblx0XHRcdGlmICggZmllbGRfZWwuY2xhc3NMaXN0LmNvbnRhaW5zKCAnd3BiY19iZmJfX3NlY3Rpb24nICkgJiYgIWZpZWxkX2VsLmRhdGFzZXQudHlwZSApIHtcclxuXHRcdFx0XHRmaWVsZF9lbC5kYXRhc2V0LnR5cGUgPSAnc2VjdGlvbic7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICggc2Nyb2xsSW50b1ZpZXcgKSB7XHJcblx0XHRcdFx0ZmllbGRfZWwuc2Nyb2xsSW50b1ZpZXcoIHsgYmVoYXZpb3I6ICdzbW9vdGgnLCBibG9jazogJ2NlbnRlcicgfSApO1xyXG5cdFx0XHR9XHJcblx0XHRcdHRoaXMuYnVpbGRlci5pbnNwZWN0b3I/LmJpbmRfdG9fZmllbGQ/LiggZmllbGRfZWwgKTtcclxuXHJcblx0XHRcdC8vIEZhbGxiYWNrOiBlbnN1cmUgaW5zcGVjdG9yIGVuaGFuY2VycyAoaW5jbC4gVmFsdWVTbGlkZXIpIHJ1biBldmVyeSBiaW5kLlxyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdGNvbnN0IGlucyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnd3BiY19iZmJfX2luc3BlY3RvcicgKVxyXG5cdFx0XHRcdFx0fHwgZG9jdW1lbnQucXVlcnlTZWxlY3RvciggJy53cGJjX2JmYl9faW5zcGVjdG9yJyApO1xyXG5cdFx0XHRcdGlmICggaW5zICkge1xyXG5cdFx0XHRcdFx0VUkuSW5zcGVjdG9yRW5oYW5jZXJzPy5zY2FuPy4oIGlucyApOyAgICAgICAgICAgICAgLy8gcnVucyBhbGwgZW5oYW5jZXJzXHJcblx0XHRcdFx0XHRVSS5XUEJDX0JGQl9WYWx1ZVNsaWRlcj8uaW5pdF9vbj8uKCBpbnMgKTsgICAgICAgICAvLyBleHRyYSBiZWx0LWFuZC1zdXNwZW5kZXJzXHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGNhdGNoICggXyApIHtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gTkVXOiB3aGVuIHNlbGVjdGluZyBhIHNlY3Rpb24sIHJlZmxlY3QgaXRzIGFjdGl2ZSB0YWIgYXMgdGhlIGhpZ2hsaWdodGVkIGNvbHVtbi5cclxuXHRcdFx0aWYgKCBmaWVsZF9lbC5jbGFzc0xpc3QuY29udGFpbnMoICd3cGJjX2JmYl9fc2VjdGlvbicgKSAmJlxyXG5cdFx0XHRcdFVJPy5XUEJDX0JGQl9Db2x1bW5fU3R5bGVzPy5zZXRfc2VsZWN0ZWRfY29sX2ZsYWcgKSB7XHJcblx0XHRcdFx0dmFyIGsgPSAoZmllbGRfZWwuZGF0YXNldCAmJiBmaWVsZF9lbC5kYXRhc2V0LmNvbF9zdHlsZXNfYWN0aXZlX3RhYilcclxuXHRcdFx0XHRcdD8gZmllbGRfZWwuZGF0YXNldC5jb2xfc3R5bGVzX2FjdGl2ZV90YWIgOiAnMSc7XHJcblx0XHRcdFx0VUkuV1BCQ19CRkJfQ29sdW1uX1N0eWxlcy5zZXRfc2VsZWN0ZWRfY29sX2ZsYWcoIGZpZWxkX2VsLCBrICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIEtlZXAgc2VjdGlvbnMgJiBmaWVsZHMgaW4gdGhlIHNhbWUgZmxvdzpcclxuXHRcdFx0Ly8gMSkgR2VuZXJpYyBoeWRyYXRvciBmb3Igc2ltcGxlIGRhdGFzZXQtYmFja2VkIGNvbnRyb2xzLlxyXG5cdFx0XHRpZiAoIGZpZWxkX2VsICkge1xyXG5cdFx0XHRcdFVJLldQQkNfQkZCX0luc3BlY3Rvcl9CcmlkZ2UuX2dlbmVyaWNfaHlkcmF0ZV9jb250cm9scz8uKCB0aGlzLmJ1aWxkZXIsIGZpZWxkX2VsICk7XHJcblx0XHRcdFx0VUkuV1BCQ19CRkJfSW5zcGVjdG9yX0JyaWRnZS5faHlkcmF0ZV9zcGVjaWFsX2NvbnRyb2xzPy4oIHRoaXMuYnVpbGRlciwgZmllbGRfZWwgKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gQXV0by1vcGVuIEluc3BlY3RvciB3aGVuIGEgdXNlciBzZWxlY3RzIGEgZmllbGQvc2VjdGlvbiAuXHJcblx0XHRcdHdwYmNfYmZiX19kaXNwYXRjaF9ldmVudF9zYWZlKFxyXG5cdFx0XHRcdCd3cGJjX2JmYjpzaG93X3BhbmVsJyxcclxuXHRcdFx0XHR7XHJcblx0XHRcdFx0XHRwYW5lbF9pZDogJ3dwYmNfYmZiX19pbnNwZWN0b3InLFxyXG5cdFx0XHRcdFx0dGFiX2lkICA6ICd3cGJjX3RhYl9pbnNwZWN0b3InXHJcblx0XHRcdFx0fVxyXG5cdFx0XHQpO1xyXG5cclxuXHRcdFx0cm9vdC5jbGFzc0xpc3QuYWRkKCAnaGFzLXNlbGVjdGlvbicgKTtcclxuXHRcdFx0dGhpcy5idWlsZGVyLmJ1cy5lbWl0KCBDb3JlLldQQkNfQkZCX0V2ZW50cy5TRUxFQ1QsIHsgdWlkOiB0aGlzLl9zZWxlY3RlZF91aWQsIGVsOiBmaWVsZF9lbCB9ICk7XHJcblx0XHRcdGNvbnN0IGxhYmVsID0gZmllbGRfZWw/LnF1ZXJ5U2VsZWN0b3IoICcud3BiY19iZmJfX2ZpZWxkLWxhYmVsJyApPy50ZXh0Q29udGVudCB8fCAoZmllbGRfZWwuY2xhc3NMaXN0LmNvbnRhaW5zKCAnd3BiY19iZmJfX3NlY3Rpb24nICkgPyAnc2VjdGlvbicgOiAnJykgfHwgZmllbGRfZWw/LmRhdGFzZXQ/LmlkIHx8ICdpdGVtJztcclxuXHRcdFx0dGhpcy5idWlsZGVyLl9hbm5vdW5jZSggJ1NlbGVjdGVkICcgKyBsYWJlbCArICcuJyApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR8bnVsbH0gKi9cclxuXHRcdGdldF9zZWxlY3RlZF9maWVsZCgpIHtcclxuXHRcdFx0aWYgKCAhdGhpcy5fc2VsZWN0ZWRfdWlkICkge1xyXG5cdFx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0XHR9XHJcblx0XHRcdGNvbnN0IGVzY19hdHRyID0gQ29yZS5XUEJDX0JGQl9TYW5pdGl6ZS5lc2NfYXR0cl92YWx1ZV9mb3Jfc2VsZWN0b3IoIHRoaXMuX3NlbGVjdGVkX3VpZCApO1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5idWlsZGVyLnBhZ2VzX2NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCBgLndwYmNfYmZiX19maWVsZFtkYXRhLXVpZD1cIiR7ZXNjX2F0dHJ9XCJdLCAud3BiY19iZmJfX3NlY3Rpb25bZGF0YS11aWQ9XCIke2VzY19hdHRyfVwiXWAgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKiogQHBhcmFtIHtDdXN0b21FdmVudH0gZXYgKi9cclxuXHRcdG9uX2NsZWFyKGV2KSB7XHJcblx0XHRcdGNvbnN0IHNyYyA9IGV2Py5kZXRhaWw/LnNvdXJjZSA/PyBldj8uc291cmNlO1xyXG5cdFx0XHRpZiAoIHNyYyAhPT0gJ2J1aWxkZXInICkge1xyXG5cdFx0XHRcdHRoaXMuc2VsZWN0X2ZpZWxkKCBudWxsICk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0fTtcclxuXHJcblx0LyoqXHJcblx0ICogQnJpZGdlcyB0aGUgYnVpbGRlciB3aXRoIHRoZSBJbnNwZWN0b3IgYW5kIHNhbml0aXplcyBpZC9uYW1lIGVkaXRzLlxyXG5cdCAqL1xyXG5cdFVJLldQQkNfQkZCX0luc3BlY3Rvcl9CcmlkZ2UgPSBjbGFzcyBleHRlbmRzIFVJLldQQkNfQkZCX01vZHVsZSB7XHJcblxyXG5cdFx0aW5pdCgpIHtcclxuXHRcdFx0dGhpcy5fYXR0YWNoX2luc3BlY3RvcigpO1xyXG5cdFx0XHR0aGlzLl9iaW5kX2lkX3Nhbml0aXplcigpO1xyXG5cdFx0XHR0aGlzLl9vcGVuX2luc3BlY3Rvcl9hZnRlcl9maWVsZF9hZGRlZCgpO1xyXG5cdFx0XHR0aGlzLl9iaW5kX2ZvY3VzX3Nob3J0Y3V0cygpO1xyXG5cdFx0fVxyXG5cclxuXHRcdF9hdHRhY2hfaW5zcGVjdG9yKCkge1xyXG5cdFx0XHRjb25zdCBiICAgICAgPSB0aGlzLmJ1aWxkZXI7XHJcblx0XHRcdGNvbnN0IGF0dGFjaCA9ICgpID0+IHtcclxuXHRcdFx0XHRpZiAoIHR5cGVvZiB3aW5kb3cuV1BCQ19CRkJfSW5zcGVjdG9yID09PSAnZnVuY3Rpb24nICkge1xyXG5cdFx0XHRcdFx0Yi5pbnNwZWN0b3IgPSBuZXcgV1BCQ19CRkJfSW5zcGVjdG9yKCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ3dwYmNfYmZiX19pbnNwZWN0b3InICksIGIgKTtcclxuXHRcdFx0XHRcdHRoaXMuX2JpbmRfaWRfc2FuaXRpemVyKCk7XHJcblx0XHRcdFx0XHRkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCAnd3BiY19iZmJfaW5zcGVjdG9yX3JlYWR5JywgYXR0YWNoICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9O1xyXG5cdFx0XHQvLyBFbnN1cmUgd2UgYmluZCBhZnRlciBsYXRlIHJlYWR5IGFzIHdlbGwuXHJcblx0XHRcdGlmICggdHlwZW9mIHdpbmRvdy5XUEJDX0JGQl9JbnNwZWN0b3IgPT09ICdmdW5jdGlvbicgKSB7XHJcblx0XHRcdFx0YXR0YWNoKCk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Yi5pbnNwZWN0b3IgPSB7XHJcblx0XHRcdFx0XHRiaW5kX3RvX2ZpZWxkKCkge1xyXG5cdFx0XHRcdFx0fSwgY2xlYXIoKSB7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fTtcclxuXHRcdFx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCAnd3BiY19iZmJfaW5zcGVjdG9yX3JlYWR5JywgYXR0YWNoICk7XHJcblx0XHRcdFx0c2V0VGltZW91dCggYXR0YWNoLCAwICk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIExpc3RlbiBmb3IgXCJmb2N1c1wiIGhpbnRzIGZyb20gdGhlIGNhbnZhcyBhbmQgb3BlbiB0aGUgcmlnaHQgZ3JvdXAvdGFiLlxyXG5cdFx0ICogLSBTdXBwb3J0czogZ3JvdXAgPT09ICdjb2x1bW5fc3R5bGVzJ1xyXG5cdFx0ICogLSBBbHNvIHNjcm9sbHMgdGhlIGdyb3VwIGludG8gdmlldy5cclxuXHRcdCAqL1xyXG5cdFx0X2JpbmRfZm9jdXNfc2hvcnRjdXRzKCkge1xyXG5cdFx0XHQvKiogQHBhcmFtIHtDdXN0b21FdmVudH0gZSAqL1xyXG5cdFx0XHRjb25zdCBvbl9mb2N1cyA9IChlKSA9PiB7XHJcblx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdGNvbnN0IGdycF9rZXkgPSBlICYmIGUuZGV0YWlsICYmIGUuZGV0YWlsLmdyb3VwO1xyXG5cdFx0XHRcdFx0Y29uc3QgdGFiX2tleSA9IGUgJiYgZS5kZXRhaWwgJiYgZS5kZXRhaWwudGFiX2tleTtcclxuXHRcdFx0XHRcdGlmICggIWdycF9rZXkgKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRjb25zdCBpbnMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ3dwYmNfYmZiX19pbnNwZWN0b3InICkgfHwgZG9jdW1lbnQucXVlcnlTZWxlY3RvciggJy53cGJjX2JmYl9faW5zcGVjdG9yJyApO1xyXG5cdFx0XHRcdFx0aWYgKCAhaW5zICkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0aWYgKCBncnBfa2V5ID09PSAnY29sdW1uX3N0eWxlcycgKSB7XHJcblx0XHRcdFx0XHRcdC8vIEZpbmQgdGhlIENvbHVtbiBTdHlsZXMgc2xvdC9ncm91cC5cclxuXHRcdFx0XHRcdFx0Y29uc3Qgc2xvdCA9IGlucy5xdWVyeVNlbGVjdG9yKCAnW2RhdGEtYmZiLXNsb3Q9XCJjb2x1bW5fc3R5bGVzXCJdJyApIHx8IGlucy5xdWVyeVNlbGVjdG9yKCAnW2RhdGEtaW5zcGVjdG9yLWdyb3VwLWtleT1cImNvbHVtbl9zdHlsZXNcIl0nICk7XHJcblx0XHRcdFx0XHRcdGlmICggc2xvdCApIHtcclxuXHRcdFx0XHRcdFx0XHQvLyBPcGVuIGNvbGxhcHNpYmxlIGNvbnRhaW5lciBpZiBwcmVzZW50LlxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IGdyb3VwX3dyYXAgPSBzbG90LmNsb3Nlc3QoICcuaW5zcGVjdG9yX19ncm91cCcgKSB8fCBzbG90LmNsb3Nlc3QoICdbZGF0YS1pbnNwZWN0b3ItZ3JvdXBdJyApO1xyXG5cdFx0XHRcdFx0XHRcdGlmICggZ3JvdXBfd3JhcCAmJiAhZ3JvdXBfd3JhcC5jbGFzc0xpc3QuY29udGFpbnMoICdpcy1vcGVuJyApICkge1xyXG5cdFx0XHRcdFx0XHRcdFx0Z3JvdXBfd3JhcC5jbGFzc0xpc3QuYWRkKCAnaXMtb3BlbicgKTtcclxuXHRcdFx0XHRcdFx0XHRcdC8vIE1pcnJvciBBUklBIHN0YXRlIGlmIHlvdXIgaGVhZGVyIHVzZXMgYXJpYS1leHBhbmRlZC5cclxuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGhlYWRlcl9idG4gPSBncm91cF93cmFwLnF1ZXJ5U2VsZWN0b3IoICdbYXJpYS1leHBhbmRlZF0nICk7XHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoIGhlYWRlcl9idG4gKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGhlYWRlcl9idG4uc2V0QXR0cmlidXRlKCAnYXJpYS1leHBhbmRlZCcsICd0cnVlJyApO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0Ly8gT3B0aW9uYWw6IHNldCB0aGUgcmVxdWVzdGVkIHRhYiBrZXkgaWYgdGFicyBleGlzdCBpbiB0aGlzIGdyb3VwLlxyXG5cdFx0XHRcdFx0XHRcdGlmICggdGFiX2tleSApIHtcclxuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IHRhYnMgPSBzbG90LnF1ZXJ5U2VsZWN0b3IoICdbZGF0YS13cGJjLXRhYnNdJyApO1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCB0YWJzICYmIHdpbmRvdy53cGJjX3VpX3RhYnMgJiYgdHlwZW9mIHdpbmRvdy53cGJjX3VpX3RhYnMuc2V0X2FjdGl2ZSA9PT0gJ2Z1bmN0aW9uJyApIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0d2luZG93LndwYmNfdWlfdGFicy5zZXRfYWN0aXZlKCB0YWJzLCBTdHJpbmcoIHRhYl9rZXkgKSApO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0Ly8gQnJpbmcgaW50byB2aWV3IGZvciBjb252ZW5pZW5jZS5cclxuXHRcdFx0XHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0XHRcdFx0Ly8gVW5jb21tZW50IChPbmx5ICBpZiBuZWVkZWQpIHRoaXMgdG8gQVVUTyBTQ1JPTEwgdG8gIHNwZWNpZmljIENPTFVNTiBpbiB0aGUgc2VjdGlvbjouXHJcblx0XHRcdFx0XHRcdFx0XHQvLyBzbG90LnNjcm9sbEludG9WaWV3KCB7IGJlaGF2aW9yOiAnc21vb3RoJywgYmxvY2s6ICduZWFyZXN0JyB9ICk7XHJcblx0XHRcdFx0XHRcdFx0fSBjYXRjaCAoIF9lICkge31cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0gY2F0Y2ggKCBfZSApIHt9XHJcblx0XHRcdH07XHJcblxyXG5cdFx0XHR0aGlzLl9vbl9pbnNwZWN0b3JfZm9jdXMgPSBvbl9mb2N1cztcclxuXHRcdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggJ3dwYmNfYmZiOmluc3BlY3Rvcl9mb2N1cycsIG9uX2ZvY3VzLCB0cnVlICk7XHJcblx0XHR9XHJcblxyXG5cdFx0ZGVzdHJveSgpIHtcclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRpZiAoIHRoaXMuX29uX2luc3BlY3Rvcl9mb2N1cyApIHtcclxuXHRcdFx0XHRcdGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoICd3cGJjX2JmYjppbnNwZWN0b3JfZm9jdXMnLCB0aGlzLl9vbl9pbnNwZWN0b3JfZm9jdXMsIHRydWUgKTtcclxuXHRcdFx0XHRcdHRoaXMuX29uX2luc3BlY3Rvcl9mb2N1cyA9IG51bGw7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGNhdGNoICggX2UgKSB7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBIeWRyYXRlIGluc3BlY3RvciBpbnB1dHMgZm9yIFwic3BlY2lhbFwiIGtleXMgdGhhdCB3ZSBoYW5kbGUgZXhwbGljaXRseS5cclxuXHRcdCAqIFdvcmtzIGZvciBib3RoIGZpZWxkcyBhbmQgc2VjdGlvbnMuXHJcblx0XHQgKiBAcGFyYW0ge1dQQkNfRm9ybV9CdWlsZGVyfSBidWlsZGVyXHJcblx0XHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBzZWxcclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIF9oeWRyYXRlX3NwZWNpYWxfY29udHJvbHMoYnVpbGRlciwgc2VsKSB7XHJcblx0XHRcdGNvbnN0IGlucyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnd3BiY19iZmJfX2luc3BlY3RvcicgKTtcclxuXHRcdFx0aWYgKCAhaW5zIHx8ICFzZWwgKSByZXR1cm47XHJcblxyXG5cdFx0XHRjb25zdCBzZXRWYWwgPSAoa2V5LCB2YWwpID0+IHtcclxuXHRcdFx0XHRjb25zdCBjdHJsID0gaW5zLnF1ZXJ5U2VsZWN0b3IoIGBbZGF0YS1pbnNwZWN0b3Ita2V5PVwiJHtrZXl9XCJdYCApO1xyXG5cdFx0XHRcdGlmICggY3RybCAmJiAndmFsdWUnIGluIGN0cmwgKSBjdHJsLnZhbHVlID0gU3RyaW5nKCB2YWwgPz8gJycgKTtcclxuXHRcdFx0fTtcclxuXHJcblx0XHRcdC8vIEludGVybmFsIGlkIC8gbmFtZSAvIHB1YmxpYyBodG1sX2lkLlxyXG5cdFx0XHRzZXRWYWwoICdpZCcsIHNlbC5nZXRBdHRyaWJ1dGUoICdkYXRhLWlkJyApIHx8ICcnICk7XHJcblx0XHRcdHNldFZhbCggJ25hbWUnLCBzZWwuZ2V0QXR0cmlidXRlKCAnZGF0YS1uYW1lJyApIHx8ICcnICk7XHJcblx0XHRcdHNldFZhbCggJ2h0bWxfaWQnLCBzZWwuZ2V0QXR0cmlidXRlKCAnZGF0YS1odG1sX2lkJyApIHx8ICcnICk7XHJcblxyXG5cdFx0XHQvLyBTZWN0aW9uLW9ubHkgZXh0cmFzIGFyZSBoYXJtbGVzcyB0byBzZXQgZm9yIGZpZWxkcyAoY29udHJvbHMgbWF5IG5vdCBleGlzdCkuXHJcblx0XHRcdHNldFZhbCggJ2Nzc2NsYXNzJywgc2VsLmdldEF0dHJpYnV0ZSggJ2RhdGEtY3NzY2xhc3MnICkgfHwgJycgKTtcclxuXHRcdFx0c2V0VmFsKCAnbGFiZWwnLCBzZWwuZ2V0QXR0cmlidXRlKCAnZGF0YS1sYWJlbCcgKSB8fCAnJyApO1xyXG5cdFx0fVxyXG5cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEh5ZHJhdGUgaW5zcGVjdG9yIGlucHV0cyB0aGF0IGRlY2xhcmUgYSBnZW5lcmljIGRhdGFzZXQgbWFwcGluZyB2aWFcclxuXHRcdCAqIFtkYXRhLWluc3BlY3Rvci1rZXldIGJ1dCBkbyBOT1QgZGVjbGFyZSBhIGN1c3RvbSB2YWx1ZV9mcm9tIGFkYXB0ZXIuXHJcblx0XHQgKiBUaGlzIG1ha2VzIHNlY3Rpb25zIGZvbGxvdyB0aGUgc2FtZSBkYXRhIGZsb3cgYXMgZmllbGRzIHdpdGggYWxtb3N0IG5vIGdsdWUuXHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHtXUEJDX0Zvcm1fQnVpbGRlcn0gYnVpbGRlclxyXG5cdFx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gc2VsIC0gY3VycmVudGx5IHNlbGVjdGVkIGZpZWxkL3NlY3Rpb25cclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIF9nZW5lcmljX2h5ZHJhdGVfY29udHJvbHMoYnVpbGRlciwgc2VsKSB7XHJcblx0XHRcdGNvbnN0IGlucyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnd3BiY19iZmJfX2luc3BlY3RvcicgKTtcclxuXHRcdFx0aWYgKCAhaW5zIHx8ICFzZWwgKSByZXR1cm47XHJcblxyXG5cdFx0XHRjb25zdCBTS0lQID0gL14oaWR8bmFtZXxodG1sX2lkfGNzc2NsYXNzfGxhYmVsKSQvOyAvLyBoYW5kbGVkIGJ5IF9oeWRyYXRlX3NwZWNpYWxfY29udHJvbHNcclxuXHJcblx0XHRcdC8vIE5FVzogcmVhZCBzY2hlbWEgZm9yIHRoZSBzZWxlY3RlZCBlbGVtZW504oCZcyB0eXBlLlxyXG5cdFx0XHRjb25zdCBzY2hlbWFzICAgICA9IHdpbmRvdy5XUEJDX0JGQl9TY2hlbWFzIHx8IHt9O1xyXG5cdFx0XHRjb25zdCB0eXBlS2V5ICAgICA9IChzZWwuZGF0YXNldCAmJiBzZWwuZGF0YXNldC50eXBlKSB8fCAnJztcclxuXHRcdFx0Y29uc3Qgc2NoZW1hRW50cnkgPSBzY2hlbWFzW3R5cGVLZXldIHx8IG51bGw7XHJcblx0XHRcdGNvbnN0IHByb3BzU2NoZW1hID0gKHNjaGVtYUVudHJ5ICYmIHNjaGVtYUVudHJ5LnNjaGVtYSAmJiBzY2hlbWFFbnRyeS5zY2hlbWEucHJvcHMpID8gc2NoZW1hRW50cnkuc2NoZW1hLnByb3BzIDoge307XHJcblx0XHRcdGNvbnN0IGhhc093biAgICAgID0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGwuYmluZCggT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSApO1xyXG5cdFx0XHRjb25zdCBnZXREZWZhdWx0ICA9IChrZXkpID0+IHtcclxuXHRcdFx0XHRjb25zdCBtZXRhID0gcHJvcHNTY2hlbWFba2V5XTtcclxuXHRcdFx0XHRyZXR1cm4gKG1ldGEgJiYgaGFzT3duKCBtZXRhLCAnZGVmYXVsdCcgKSkgPyBtZXRhLmRlZmF1bHQgOiB1bmRlZmluZWQ7XHJcblx0XHRcdH07XHJcblxyXG5cdFx0XHRpbnMucXVlcnlTZWxlY3RvckFsbCggJ1tkYXRhLWluc3BlY3Rvci1rZXldJyApLmZvckVhY2goIChjdHJsKSA9PiB7XHJcblx0XHRcdFx0Y29uc3Qga2V5ID0gU3RyaW5nKCBjdHJsLmRhdGFzZXQ/Lmluc3BlY3RvcktleSB8fCAnJyApLnRvTG93ZXJDYXNlKCk7XHJcblx0XHRcdFx0aWYgKCAha2V5IHx8IFNLSVAudGVzdCgga2V5ICkgKSByZXR1cm47XHJcblxyXG5cdFx0XHRcdC8vIEVsZW1lbnQtbGV2ZWwgbG9jay5cclxuXHRcdFx0XHRjb25zdCBkbCA9IChjdHJsLmRhdGFzZXQ/LmxvY2tlZCB8fCAnJykudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcblx0XHRcdFx0aWYgKCBkbCA9PT0gJzEnIHx8IGRsID09PSAndHJ1ZScgfHwgZGwgPT09ICd5ZXMnICkgcmV0dXJuO1xyXG5cclxuXHRcdFx0XHQvLyBSZXNwZWN0IGV4cGxpY2l0IGFkYXB0ZXJzLlxyXG5cdFx0XHRcdGlmICggY3RybC5kYXRhc2V0Py52YWx1ZV9mcm9tIHx8IGN0cmwuZGF0YXNldD8udmFsdWVGcm9tICkgcmV0dXJuO1xyXG5cclxuXHRcdFx0XHRjb25zdCByYXcgICAgICA9IHNlbC5kYXRhc2V0ID8gc2VsLmRhdGFzZXRba2V5XSA6IHVuZGVmaW5lZDtcclxuXHRcdFx0XHRjb25zdCBoYXNSYXcgICA9IHNlbC5kYXRhc2V0ID8gaGFzT3duKCBzZWwuZGF0YXNldCwga2V5ICkgOiBmYWxzZTtcclxuXHRcdFx0XHRjb25zdCBkZWZWYWx1ZSA9IGdldERlZmF1bHQoIGtleSApO1xyXG5cclxuXHRcdFx0XHQvLyBCZXN0LWVmZm9ydCBjb250cm9sIHR5cGluZyB3aXRoIHNjaGVtYSBkZWZhdWx0IGZhbGxiYWNrIHdoZW4gdmFsdWUgaXMgYWJzZW50LlxyXG5cclxuXHRcdFx0XHRpZiAoIGN0cmwgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50ICYmIChjdHJsLnR5cGUgPT09ICdjaGVja2JveCcgfHwgY3RybC50eXBlID09PSAncmFkaW8nKSApIHtcclxuXHRcdFx0XHRcdC8vIElmIGRhdGFzZXQgaXMgbWlzc2luZyB0aGUga2V5IGVudGlyZWx5IC0+IHVzZSBzY2hlbWEgZGVmYXVsdCAoYm9vbGVhbikuXHJcblx0XHRcdFx0XHRpZiAoICFoYXNSYXcgKSB7XHJcblx0XHRcdFx0XHRcdGN0cmwuY2hlY2tlZCA9ICEhZGVmVmFsdWU7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRjdHJsLmNoZWNrZWQgPSBDb3JlLldQQkNfQkZCX1Nhbml0aXplLmNvZXJjZV9ib29sZWFuKCByYXcsICEhZGVmVmFsdWUgKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9IGVsc2UgaWYgKCAndmFsdWUnIGluIGN0cmwgKSB7XHJcblx0XHRcdFx0XHRpZiAoIGhhc1JhdyApIHtcclxuXHRcdFx0XHRcdFx0Y3RybC52YWx1ZSA9IChyYXcgIT0gbnVsbCkgPyBTdHJpbmcoIHJhdyApIDogJyc7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRjdHJsLnZhbHVlID0gKGRlZlZhbHVlID09IG51bGwpID8gJycgOiBTdHJpbmcoIGRlZlZhbHVlICk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9ICk7XHJcblx0XHR9XHJcblxyXG5cdFx0X2JpbmRfaWRfc2FuaXRpemVyKCkge1xyXG5cdFx0XHRjb25zdCBiICAgPSB0aGlzLmJ1aWxkZXI7XHJcblx0XHRcdGNvbnN0IGlucyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnd3BiY19iZmJfX2luc3BlY3RvcicgKTtcclxuXHRcdFx0aWYgKCAhIGlucyApIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKCBpbnMuX193cGJjX2JmYl9pZF9zYW5pdGl6ZXJfYm91bmQgKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlucy5fX3dwYmNfYmZiX2lkX3Nhbml0aXplcl9ib3VuZCA9IHRydWU7XHJcblxyXG5cdFx0XHRjb25zdCBoYW5kbGVyID0gKGUpID0+IHtcclxuXHJcblx0XHRcdFx0Y29uc3QgdCA9IGUudGFyZ2V0O1xyXG5cdFx0XHRcdGlmICggIXQgfHwgISgndmFsdWUnIGluIHQpICkge1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRjb25zdCBrZXkgICAgICAgPSAodC5kYXRhc2V0Py5pbnNwZWN0b3JLZXkgfHwgJycpLnRvTG93ZXJDYXNlKCk7XHJcblx0XHRcdFx0Y29uc3Qgc2VsICAgICAgID0gYi5nZXRfc2VsZWN0ZWRfZmllbGQ/LigpO1xyXG5cdFx0XHRcdGNvbnN0IGlzU2VjdGlvbiA9IHNlbD8uY2xhc3NMaXN0Py5jb250YWlucyggJ3dwYmNfYmZiX19zZWN0aW9uJyApO1xyXG5cdFx0XHRcdGlmICggIXNlbCApIHJldHVybjtcclxuXHJcblx0XHRcdFx0Ly8gVW5pZmllZCBlbWl0dGVyIHRoYXQgYWx3YXlzIGluY2x1ZGVzIHRoZSBlbGVtZW50IHJlZmVyZW5jZS5cclxuXHRcdFx0XHRjb25zdCBFViAgICAgICAgICAgICAgPSBDb3JlLldQQkNfQkZCX0V2ZW50cztcclxuXHRcdFx0XHQvLyBTVFJVQ1RVUkVfQ0hBTkdFIGNhbiBiZSBcImV4cGVuc2l2ZVwiIGJlY2F1c2Ugb3RoZXIgbGlzdGVuZXJzIG1heSB0cmlnZ2VyIGZ1bGwgY2FudmFzIHJlZnJlc2guXHJcblx0XHRcdFx0Ly8gRGVib3VuY2Ugb25seSBjb250aW51b3VzIGNvbnRyb2xzIChlLmcuIHZhbHVlIHNsaWRlciBzY3J1YmJpbmcpIG9uIHRoZSBJTlBVVCBwaGFzZS5cclxuXHRcdFx0XHRjb25zdCBlbnN1cmVfc2NfZGVib3VuY2Vfc3RhdGUgPSAoKSA9PiB7XHJcblx0XHRcdFx0XHRpZiAoIGIuX193cGJjX2JmYl9zY19kZWJvdW5jZV9zdGF0ZSApIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIGIuX193cGJjX2JmYl9zY19kZWJvdW5jZV9zdGF0ZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGIuX193cGJjX2JmYl9zY19kZWJvdW5jZV9zdGF0ZSA9IHsgdGltZXJfaWQ6IDAsIHBlbmRpbmdfcGF5bG9hZDogbnVsbCB9O1xyXG5cdFx0XHRcdFx0cmV0dXJuIGIuX193cGJjX2JmYl9zY19kZWJvdW5jZV9zdGF0ZTtcclxuXHRcdFx0XHR9O1xyXG5cclxuXHRcdFx0XHRjb25zdCBjYW5jZWxfc2NfZGVib3VuY2VkX2VtaXQgPSAoKSA9PiB7XHJcblx0XHRcdFx0XHRjb25zdCBzdCA9IGIuX193cGJjX2JmYl9zY19kZWJvdW5jZV9zdGF0ZTtcclxuXHRcdFx0XHRcdGlmICggIXN0ICkgcmV0dXJuO1xyXG5cdFx0XHRcdFx0dHJ5IHsgY2xlYXJUaW1lb3V0KCBzdC50aW1lcl9pZCApOyB9IGNhdGNoICggXyApIHt9XHJcblx0XHRcdFx0XHRzdC50aW1lcl9pZCAgICAgICAgPSAwO1xyXG5cdFx0XHRcdFx0c3QucGVuZGluZ19wYXlsb2FkID0gbnVsbDtcclxuXHRcdFx0XHR9O1xyXG5cclxuXHRcdFx0XHRjb25zdCBidXNfZW1pdF9jaGFuZ2UgPSAocmVhc29uLCBleHRyYSA9IHt9KSA9PiB7XHJcblx0XHRcdFx0XHQvLyBJZiB3ZeKAmXJlIGNvbW1pdHRpbmcgc29tZXRoaW5nIChjaGFuZ2UvYmx1ci9ldGMpLCBkcm9wIGFueSBwZW5kaW5nIFwiaW5wdXRcIiBlbWl0LlxyXG5cdFx0XHRcdFx0Y2FuY2VsX3NjX2RlYm91bmNlZF9lbWl0KCk7XHJcblx0XHRcdFx0XHRiLmJ1cz8uZW1pdD8uKCBFVi5TVFJVQ1RVUkVfQ0hBTkdFLCB7IHJlYXNvbiwgZWw6IHNlbCwgLi4uZXh0cmEgfSApO1xyXG5cdFx0XHRcdH07XHJcblxyXG5cdFx0XHRcdGNvbnN0IGJ1c19lbWl0X2NoYW5nZV9kZWJvdW5jZWQgPSAocmVhc29uLCBleHRyYSA9IHt9LCB3YWl0X21zKSA9PiB7XHJcblx0XHRcdFx0XHRjb25zdCBzdCA9IGVuc3VyZV9zY19kZWJvdW5jZV9zdGF0ZSgpO1xyXG5cdFx0XHRcdFx0Y29uc3QgbXMgPSBOdW1iZXIuaXNGaW5pdGUoIHdhaXRfbXMgKVxyXG5cdFx0XHRcdFx0XHQ/IHdhaXRfbXNcclxuXHRcdFx0XHRcdFx0OiAoTnVtYmVyLmlzRmluaXRlKCBVSS5TVFJVQ1RVUkVfQ0hBTkdFX0RFQk9VTkNFX01TICkgPyBVSS5TVFJVQ1RVUkVfQ0hBTkdFX0RFQk9VTkNFX01TIDogMjQwKTtcclxuXHJcblx0XHRcdFx0XHQvLyBDYXB0dXJlIHRoZSBDVVJSRU5UIHNlbGVjdGVkIGVsZW1lbnQgaW50byB0aGUgcGF5bG9hZCBub3cgKHN0YWJsZSByZWYpLlxyXG5cdFx0XHRcdFx0c3QucGVuZGluZ19wYXlsb2FkID0geyByZWFzb24sIGVsOiBzZWwsIC4uLmV4dHJhLCBkZWJvdW5jZWQ6IHRydWUgfTtcclxuXHJcblx0XHRcdFx0XHR0cnkgeyBjbGVhclRpbWVvdXQoIHN0LnRpbWVyX2lkICk7IH0gY2F0Y2ggKCBfICkge31cclxuXHRcdFx0XHRcdHN0LnRpbWVyX2lkID0gc2V0VGltZW91dCggZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRcdFx0XHRzdC50aW1lcl9pZCA9IDA7XHJcblx0XHRcdFx0XHRcdGNvbnN0IHBheWxvYWQgPSBzdC5wZW5kaW5nX3BheWxvYWQ7XHJcblx0XHRcdFx0XHRcdHN0LnBlbmRpbmdfcGF5bG9hZCA9IG51bGw7XHJcblx0XHRcdFx0XHRcdGlmICggcGF5bG9hZCApIHtcclxuXHRcdFx0XHRcdFx0XHRiLmJ1cz8uZW1pdD8uKCBFVi5TVFJVQ1RVUkVfQ0hBTkdFLCBwYXlsb2FkICk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0sIG1zICk7XHJcblx0XHRcdFx0fTtcclxuXHJcblx0XHRcdFx0Ly8gLS0tLSBGSUVMRC9TRUNUSU9OOiBpbnRlcm5hbCBpZCAtLS0tXHJcblx0XHRcdFx0aWYgKCBrZXkgPT09ICdpZCcgKSB7XHJcblx0XHRcdFx0XHRjb25zdCB1bmlxdWUgPSBiLmlkLnNldF9maWVsZF9pZCggc2VsLCB0LnZhbHVlICk7XHJcblx0XHRcdFx0XHRpZiAoIGIucHJldmlld19tb2RlICYmICFpc1NlY3Rpb24gKSB7XHJcblx0XHRcdFx0XHRcdGIucmVuZGVyX3ByZXZpZXcoIHNlbCApO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKCB0LnZhbHVlICE9PSB1bmlxdWUgKSB7XHJcblx0XHRcdFx0XHRcdHQudmFsdWUgPSB1bmlxdWU7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRidXNfZW1pdF9jaGFuZ2UoICdpZC1jaGFuZ2UnICk7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyAtLS0tIEZJRUxEL1NFQ1RJT046IHB1YmxpYyBIVE1MIGlkIC0tLS1cclxuXHRcdFx0XHRpZiAoIGtleSA9PT0gJ2h0bWxfaWQnICkge1xyXG5cdFx0XHRcdFx0Y29uc3QgYXBwbGllZCA9IGIuaWQuc2V0X2ZpZWxkX2h0bWxfaWQoIHNlbCwgdC52YWx1ZSApO1xyXG5cdFx0XHRcdFx0Ly8gRm9yIHNlY3Rpb25zLCBhbHNvIHNldCB0aGUgcmVhbCBET00gaWQgc28gYW5jaG9ycy9DU1MgY2FuIHRhcmdldCBpdC5cclxuXHRcdFx0XHRcdGlmICggaXNTZWN0aW9uICkge1xyXG5cdFx0XHRcdFx0XHRzZWwuaWQgPSBhcHBsaWVkIHx8ICcnO1xyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICggYi5wcmV2aWV3X21vZGUgKSB7XHJcblx0XHRcdFx0XHRcdGIucmVuZGVyX3ByZXZpZXcoIHNlbCApO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKCB0LnZhbHVlICE9PSBhcHBsaWVkICkge1xyXG5cdFx0XHRcdFx0XHR0LnZhbHVlID0gYXBwbGllZDtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGJ1c19lbWl0X2NoYW5nZSggJ2h0bWwtaWQtY2hhbmdlJyApO1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gLS0tLSBGSUVMRFMgT05MWTogbmFtZSAtLS0tXHJcblx0XHRcdFx0aWYgKCBrZXkgPT09ICduYW1lJyAmJiAhaXNTZWN0aW9uICkge1xyXG5cclxuXHRcdFx0XHRcdC8vIExpdmUgdHlwaW5nOiBzYW5pdGl6ZSBvbmx5IChOTyB1bmlxdWVuZXNzIHlldCkgdG8gYXZvaWQgXCItMlwiIHNwYW1cclxuXHRcdFx0XHRcdGlmICggZS50eXBlID09PSAnaW5wdXQnICkge1xyXG5cdFx0XHRcdFx0XHRjb25zdCBiZWZvcmUgICAgPSB0LnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRjb25zdCBzYW5pdGl6ZWQgPSBDb3JlLldQQkNfQkZCX1Nhbml0aXplLnNhbml0aXplX2h0bWxfbmFtZSggYmVmb3JlICk7XHJcblx0XHRcdFx0XHRcdGlmICggYmVmb3JlICE9PSBzYW5pdGl6ZWQgKSB7XHJcblx0XHRcdFx0XHRcdFx0Ly8gb3B0aW9uYWw6IHByZXNlcnZlIGNhcmV0IHRvIGF2b2lkIGp1bXBcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBzZWxTdGFydCA9IHQuc2VsZWN0aW9uU3RhcnQsIHNlbEVuZCA9IHQuc2VsZWN0aW9uRW5kO1xyXG5cdFx0XHRcdFx0XHRcdHQudmFsdWUgICAgICAgID0gc2FuaXRpemVkO1xyXG5cdFx0XHRcdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHRcdFx0XHR0LnNldFNlbGVjdGlvblJhbmdlKCBzZWxTdGFydCwgc2VsRW5kICk7XHJcblx0XHRcdFx0XHRcdFx0fSBjYXRjaCAoIF8gKSB7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdHJldHVybjsgLy8gdW5pcXVlbmVzcyBvbiBjaGFuZ2UvYmx1clxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdC8vIENvbW1pdCAoY2hhbmdlL2JsdXIpXHJcblx0XHRcdFx0XHRjb25zdCByYXcgPSBTdHJpbmcoIHQudmFsdWUgPz8gJycgKS50cmltKCk7XHJcblxyXG5cdFx0XHRcdFx0aWYgKCAhcmF3ICkge1xyXG5cdFx0XHRcdFx0XHQvLyBSRVNFRUQ6IGtlZXAgbmFtZSBub24tZW1wdHkgYW5kIHByb3Zpc2lvbmFsIChhdXRvbmFtZSBzdGF5cyBPTilcclxuXHRcdFx0XHRcdFx0Y29uc3QgUyAgICA9IENvcmUuV1BCQ19CRkJfU2FuaXRpemU7XHJcblx0XHRcdFx0XHRcdGNvbnN0IGJhc2UgPSBTLnNhbml0aXplX2h0bWxfbmFtZSggc2VsLmdldEF0dHJpYnV0ZSggJ2RhdGEtaWQnICkgfHwgc2VsLmRhdGFzZXQuaWQgfHwgc2VsLmRhdGFzZXQudHlwZSB8fCAnZmllbGQnICk7XHJcblx0XHRcdFx0XHRcdGNvbnN0IHVuaXEgPSBiLmlkLmVuc3VyZV91bmlxdWVfZmllbGRfbmFtZSggYmFzZSwgc2VsICk7XHJcblxyXG5cdFx0XHRcdFx0XHRzZWwuc2V0QXR0cmlidXRlKCAnZGF0YS1uYW1lJywgdW5pcSApO1xyXG5cdFx0XHRcdFx0XHRzZWwuZGF0YXNldC5hdXRvbmFtZSAgICAgICAgICA9ICcxJztcclxuXHRcdFx0XHRcdFx0c2VsLmRhdGFzZXQubmFtZV91c2VyX3RvdWNoZWQgPSAnMCc7XHJcblxyXG5cdFx0XHRcdFx0XHQvLyBLZWVwIERPTSBpbiBzeW5jIGlmIHdl4oCZcmUgbm90IHJlLXJlbmRlcmluZ1xyXG5cdFx0XHRcdFx0XHRpZiAoICFiLnByZXZpZXdfbW9kZSApIHtcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBjdHJsID0gc2VsLnF1ZXJ5U2VsZWN0b3IoICdpbnB1dCx0ZXh0YXJlYSxzZWxlY3QnICk7XHJcblx0XHRcdFx0XHRcdFx0aWYgKCBjdHJsICkgY3RybC5zZXRBdHRyaWJ1dGUoICduYW1lJywgdW5pcSApO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdGIucmVuZGVyX3ByZXZpZXcoIHNlbCApO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAoIHQudmFsdWUgIT09IHVuaXEgKSB0LnZhbHVlID0gdW5pcTtcclxuXHRcdFx0XHRcdFx0YnVzX2VtaXRfY2hhbmdlKCAnbmFtZS1yZXNlZWQnICk7XHJcblx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHQvLyBOb24tZW1wdHkgY29tbWl0OiB1c2VyIHRha2VzIGNvbnRyb2w7IGRpc2FibGUgYXV0b25hbWUgZ29pbmcgZm9yd2FyZFxyXG5cdFx0XHRcdFx0c2VsLmRhdGFzZXQubmFtZV91c2VyX3RvdWNoZWQgPSAnMSc7XHJcblx0XHRcdFx0XHRzZWwuZGF0YXNldC5hdXRvbmFtZSAgICAgICAgICA9ICcwJztcclxuXHJcblx0XHRcdFx0XHRjb25zdCBzYW5pdGl6ZWQgPSBDb3JlLldQQkNfQkZCX1Nhbml0aXplLnNhbml0aXplX2h0bWxfbmFtZSggcmF3ICk7XHJcblx0XHRcdFx0XHRjb25zdCB1bmlxdWUgICAgPSBiLmlkLnNldF9maWVsZF9uYW1lKCBzZWwsIHNhbml0aXplZCApO1xyXG5cclxuXHRcdFx0XHRcdGlmICggIWIucHJldmlld19tb2RlICkge1xyXG5cdFx0XHRcdFx0XHRjb25zdCBjdHJsID0gc2VsLnF1ZXJ5U2VsZWN0b3IoICdpbnB1dCx0ZXh0YXJlYSxzZWxlY3QnICk7XHJcblx0XHRcdFx0XHRcdGlmICggY3RybCApIGN0cmwuc2V0QXR0cmlidXRlKCAnbmFtZScsIHVuaXF1ZSApO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0Yi5yZW5kZXJfcHJldmlldyggc2VsICk7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0aWYgKCB0LnZhbHVlICE9PSB1bmlxdWUgKSB0LnZhbHVlID0gdW5pcXVlO1xyXG5cdFx0XHRcdFx0YnVzX2VtaXRfY2hhbmdlKCAnbmFtZS1jaGFuZ2UnICk7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyAtLS0tIFNFQ1RJT05TICYgRklFTERTOiBjc3NjbGFzcyAobGl2ZSBhcHBseTsgbm8gcmUtcmVuZGVyKSAtLS0tXHJcblx0XHRcdFx0aWYgKCBrZXkgPT09ICdjc3NjbGFzcycgKSB7XHJcblx0XHRcdFx0XHRjb25zdCBuZXh0ICAgICAgID0gQ29yZS5XUEJDX0JGQl9TYW5pdGl6ZS5zYW5pdGl6ZV9jc3NfY2xhc3NsaXN0KCB0LnZhbHVlIHx8ICcnICk7XHJcblx0XHRcdFx0XHRjb25zdCBkZXNpcmVkQXJyID0gbmV4dC5zcGxpdCggL1xccysvICkuZmlsdGVyKCBCb29sZWFuICk7XHJcblx0XHRcdFx0XHRjb25zdCBkZXNpcmVkU2V0ID0gbmV3IFNldCggZGVzaXJlZEFyciApO1xyXG5cclxuXHRcdFx0XHRcdC8vIENvcmUgY2xhc3NlcyBhcmUgbmV2ZXIgdG91Y2hlZC5cclxuXHRcdFx0XHRcdGNvbnN0IGlzQ29yZSA9IChjbHMpID0+IGNscyA9PT0gJ2lzLXNlbGVjdGVkJyB8fCBjbHMuc3RhcnRzV2l0aCggJ3dwYmNfJyApO1xyXG5cclxuXHRcdFx0XHRcdC8vIFNuYXBzaG90IGJlZm9yZSBtdXRhdGluZyAoRE9NVG9rZW5MaXN0IGlzIGxpdmUpLlxyXG5cdFx0XHRcdFx0Y29uc3QgYmVmb3JlQ2xhc3NlcyA9IEFycmF5LmZyb20oIHNlbC5jbGFzc0xpc3QgKTtcclxuXHRcdFx0XHRcdGNvbnN0IGN1c3RvbUJlZm9yZSAgPSBiZWZvcmVDbGFzc2VzLmZpbHRlciggKGMpID0+ICFpc0NvcmUoIGMgKSApO1xyXG5cclxuXHRcdFx0XHRcdC8vIFJlbW92ZSBzdHJheSBub24tY29yZSBjbGFzc2VzIG5vdCBpbiBkZXNpcmVkLlxyXG5cdFx0XHRcdFx0Y3VzdG9tQmVmb3JlLmZvckVhY2goIChjKSA9PiB7XHJcblx0XHRcdFx0XHRcdGlmICggIWRlc2lyZWRTZXQuaGFzKCBjICkgKSBzZWwuY2xhc3NMaXN0LnJlbW92ZSggYyApO1xyXG5cdFx0XHRcdFx0fSApO1xyXG5cclxuXHRcdFx0XHRcdC8vIEFkZCBtaXNzaW5nIGRlc2lyZWQgY2xhc3NlcyBpbiBvbmUgZ28uXHJcblx0XHRcdFx0XHRjb25zdCBtaXNzaW5nID0gZGVzaXJlZEFyci5maWx0ZXIoIChjKSA9PiAhY3VzdG9tQmVmb3JlLmluY2x1ZGVzKCBjICkgKTtcclxuXHRcdFx0XHRcdGlmICggbWlzc2luZy5sZW5ndGggKSBzZWwuY2xhc3NMaXN0LmFkZCggLi4ubWlzc2luZyApO1xyXG5cclxuXHRcdFx0XHRcdC8vIEtlZXAgZGF0YXNldCBpbiBzeW5jIChhdm9pZCB1c2VsZXNzIGF0dHJpYnV0ZSB3cml0ZXMpLlxyXG5cdFx0XHRcdFx0aWYgKCBzZWwuZ2V0QXR0cmlidXRlKCAnZGF0YS1jc3NjbGFzcycgKSAhPT0gbmV4dCApIHtcclxuXHRcdFx0XHRcdFx0c2VsLnNldEF0dHJpYnV0ZSggJ2RhdGEtY3NzY2xhc3MnLCBuZXh0ICk7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0Ly8gRW1pdCBvbmx5IGlmIHNvbWV0aGluZyBhY3R1YWxseSBjaGFuZ2VkLlxyXG5cdFx0XHRcdFx0Y29uc3QgYWZ0ZXJDbGFzc2VzID0gQXJyYXkuZnJvbSggc2VsLmNsYXNzTGlzdCApO1xyXG5cdFx0XHRcdFx0Y29uc3QgY2hhbmdlZCAgICAgID0gYWZ0ZXJDbGFzc2VzLmxlbmd0aCAhPT0gYmVmb3JlQ2xhc3Nlcy5sZW5ndGggfHwgYmVmb3JlQ2xhc3Nlcy5zb21lKCAoYywgaSkgPT4gYyAhPT0gYWZ0ZXJDbGFzc2VzW2ldICk7XHJcblxyXG5cdFx0XHRcdFx0Y29uc3QgZGV0YWlsID0geyBrZXk6ICdjc3NjbGFzcycsIHBoYXNlOiBlLnR5cGUgfTtcclxuXHRcdFx0XHRcdGlmICggaXNTZWN0aW9uICkge1xyXG5cdFx0XHRcdFx0XHRidXNfZW1pdF9jaGFuZ2UoICdjc3NjbGFzcy1jaGFuZ2UnLCBkZXRhaWwgKTtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdGJ1c19lbWl0X2NoYW5nZSggJ3Byb3AtY2hhbmdlJywgZGV0YWlsICk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cclxuXHJcblx0XHRcdFx0Ly8gLS0tLSBTRUNUSU9OUzogbGFiZWwgLS0tLVxyXG5cdFx0XHRcdGlmICggaXNTZWN0aW9uICYmIGtleSA9PT0gJ2xhYmVsJyApIHtcclxuXHRcdFx0XHRcdGNvbnN0IHZhbCA9IFN0cmluZyggdC52YWx1ZSA/PyAnJyApO1xyXG5cdFx0XHRcdFx0c2VsLnNldEF0dHJpYnV0ZSggJ2RhdGEtbGFiZWwnLCB2YWwgKTtcclxuXHRcdFx0XHRcdGJ1c19lbWl0X2NoYW5nZSggJ2xhYmVsLWNoYW5nZScgKTtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIC0tLS0gRklFTERTOiBsYWJlbCAoYXV0by1uYW1lIHdoaWxlIHR5cGluZzsgZnJlZXplIG9uIGNvbW1pdCkgLS0tLVxyXG5cdFx0XHRcdGlmICggIWlzU2VjdGlvbiAmJiBrZXkgPT09ICdsYWJlbCcgKSB7XHJcblx0XHRcdFx0XHRjb25zdCB2YWwgICAgICAgICA9IFN0cmluZyggdC52YWx1ZSA/PyAnJyApO1xyXG5cdFx0XHRcdFx0c2VsLmRhdGFzZXQubGFiZWwgPSB2YWw7XHJcblxyXG5cdFx0XHRcdFx0Ly8gd2hpbGUgdHlwaW5nLCBhbGxvdyBhdXRvLW5hbWUgKGlmIGZsYWdzIHBlcm1pdClcclxuXHRcdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHRcdENvcmUuV1BCQ19CRkJfRmllbGRfQmFzZS5tYXliZV9hdXRvbmFtZV9mcm9tX2xhYmVsKCBiLCBzZWwsIHZhbCApO1xyXG5cdFx0XHRcdFx0fSBjYXRjaCAoIF8gKSB7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0Ly8gaWYgdXNlciBjb21taXR0ZWQgdGhlIGxhYmVsIChibHVyL2NoYW5nZSksIGZyZWV6ZSBmdXR1cmUgYXV0by1uYW1lXHJcblx0XHRcdFx0XHRpZiAoIGUudHlwZSAhPT0gJ2lucHV0JyApIHtcclxuXHRcdFx0XHRcdFx0c2VsLmRhdGFzZXQuYXV0b25hbWUgPSAnMCc7ICAgLy8gc3RvcCBmdXR1cmUgbGFiZWwtPm5hbWUgc3luY1xyXG5cdFx0XHRcdFx0XHRzZWwuZGF0YXNldC5mcmVzaCAgICA9ICcwJzsgICAvLyBhbHNvIGtpbGwgdGhlIFwiZnJlc2hcIiBlc2NhcGUgaGF0Y2hcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHQvLyBPcHRpb25hbCBVSSBuaWNldHk6IGRpc2FibGUgTmFtZSB3aGVuIGF1dG8gaXMgT04sIGVuYWJsZSB3aGVuIE9GRlxyXG5cdFx0XHRcdFx0Y29uc3QgaW5zICAgICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ3dwYmNfYmZiX19pbnNwZWN0b3InICk7XHJcblx0XHRcdFx0XHRjb25zdCBuYW1lQ3RybCA9IGlucz8ucXVlcnlTZWxlY3RvciggJ1tkYXRhLWluc3BlY3Rvci1rZXk9XCJuYW1lXCJdJyApO1xyXG5cdFx0XHRcdFx0aWYgKCBuYW1lQ3RybCApIHtcclxuXHRcdFx0XHRcdFx0Y29uc3QgYXV0b0FjdGl2ZSA9XHJcblx0XHRcdFx0XHRcdFx0XHQgIChzZWwuZGF0YXNldC5hdXRvbmFtZSA/PyAnMScpICE9PSAnMCcgJiZcclxuXHRcdFx0XHRcdFx0XHRcdCAgc2VsLmRhdGFzZXQubmFtZV91c2VyX3RvdWNoZWQgIT09ICcxJyAmJlxyXG5cdFx0XHRcdFx0XHRcdFx0ICBzZWwuZGF0YXNldC53YXNfbG9hZGVkICE9PSAnMSc7XHJcblx0XHRcdFx0XHRcdG5hbWVDdHJsLnRvZ2dsZUF0dHJpYnV0ZSggJ2Rpc2FibGVkJywgYXV0b0FjdGl2ZSApO1xyXG5cdFx0XHRcdFx0XHRpZiAoIGF1dG9BY3RpdmUgJiYgIW5hbWVDdHJsLnBsYWNlaG9sZGVyICkge1xyXG5cdFx0XHRcdFx0XHRcdG5hbWVDdHJsLnBsYWNlaG9sZGVyID0gYj8uaTE4bj8uYXV0b19mcm9tX2xhYmVsID8/ICdhdXRvIOKAlCBmcm9tIGxhYmVsJztcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRpZiAoICFhdXRvQWN0aXZlICYmIG5hbWVDdHJsLnBsYWNlaG9sZGVyID09PSAoYj8uaTE4bj8uYXV0b19mcm9tX2xhYmVsID8/ICdhdXRvIOKAlCBmcm9tIGxhYmVsJykgKSB7XHJcblx0XHRcdFx0XHRcdFx0bmFtZUN0cmwucGxhY2Vob2xkZXIgPSAnJztcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdC8vIEFsd2F5cyByZS1yZW5kZXIgdGhlIHByZXZpZXcgc28gbGFiZWwgY2hhbmdlcyBhcmUgdmlzaWJsZSBpbW1lZGlhdGVseS5cclxuXHRcdFx0XHRcdGIucmVuZGVyX3ByZXZpZXcoIHNlbCApO1xyXG5cdFx0XHRcdFx0YnVzX2VtaXRfY2hhbmdlKCAnbGFiZWwtY2hhbmdlJyApO1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHJcblxyXG5cdFx0XHRcdC8vIC0tLS0gREVGQVVMVCAoR0VORVJJQyk6IGRhdGFzZXQgd3JpdGVyIGZvciBib3RoIGZpZWxkcyAmIHNlY3Rpb25zIC0tLS1cclxuXHRcdFx0XHQvLyBBbnkgaW5zcGVjdG9yIGNvbnRyb2wgd2l0aCBbZGF0YS1pbnNwZWN0b3Ita2V5XSB0aGF0IGRvZXNuJ3QgaGF2ZSBhIGN1c3RvbVxyXG5cdFx0XHRcdC8vIGFkYXB0ZXIvdmFsdWVfZnJvbSB3aWxsIHNpbXBseSByZWFkL3dyaXRlIHNlbC5kYXRhc2V0W2tleV0uXHJcblx0XHRcdFx0aWYgKCBrZXkgKSB7XHJcblxyXG5cdFx0XHRcdFx0Y29uc3Qgc2VsZkxvY2tlZCA9IC9eKDF8dHJ1ZXx5ZXMpJC9pLnRlc3QoICh0LmRhdGFzZXQ/LmxvY2tlZCB8fCAnJykudHJpbSgpICk7XHJcblx0XHRcdFx0XHRpZiAoIHNlbGZMb2NrZWQgKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHQvLyBTa2lwIGtleXMgd2UgaGFuZGxlZCBhYm92ZSB0byBhdm9pZCBkb3VibGUgd29yay5cclxuXHRcdFx0XHRcdGlmICgga2V5ID09PSAnaWQnIHx8IGtleSA9PT0gJ25hbWUnIHx8IGtleSA9PT0gJ2h0bWxfaWQnIHx8IGtleSA9PT0gJ2Nzc2NsYXNzJyB8fCBrZXkgPT09ICdsYWJlbCcgKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGxldCBuZXh0VmFsID0gJyc7XHJcblx0XHRcdFx0XHRpZiAoIHQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50ICYmICh0LnR5cGUgPT09ICdjaGVja2JveCcgfHwgdC50eXBlID09PSAncmFkaW8nKSApIHtcclxuXHRcdFx0XHRcdFx0bmV4dFZhbCA9IHQuY2hlY2tlZCA/ICcxJyA6ICcnO1xyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICggJ3ZhbHVlJyBpbiB0ICkge1xyXG5cdFx0XHRcdFx0XHRuZXh0VmFsID0gU3RyaW5nKCB0LnZhbHVlID8/ICcnICk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHQvLyBQZXJzaXN0IHRvIGRhdGFzZXQuXHJcblx0XHRcdFx0XHRpZiAoIHNlbD8uZGF0YXNldCApIHNlbC5kYXRhc2V0W2tleV0gPSBuZXh0VmFsO1xyXG5cclxuXHRcdFx0XHRcdC8vIEdlbmVyYXRvciBjb250cm9scyBhcmUgXCJVSSBpbnB1dHNcIiDigJQgYXZvaWQgU1RSVUNUVVJFX0NIQU5HRSBzcGFtIHdoaWxlIGRyYWdnaW5nL3R5cGluZy5cclxuXHRcdFx0XHRcdGNvbnN0IGlzX2dlbl9rZXkgPSAoa2V5LmluZGV4T2YoICdnZW5fJyApID09PSAwKTtcclxuXHJcblx0XHRcdFx0XHQvLyBSZS1yZW5kZXIgb24gdmlzdWFsIGtleXMgc28gcHJldmlldyBzdGF5cyBpbiBzeW5jIChjYWxlbmRhciBsYWJlbC9oZWxwLCBldGMuKS5cclxuXHRcdFx0XHRcdGNvbnN0IHZpc3VhbEtleXMgPSBuZXcgU2V0KCBbICdoZWxwJywgJ3BsYWNlaG9sZGVyJywgJ21pbl93aWR0aCcsICdjc3NjbGFzcycgXSApO1xyXG5cdFx0XHRcdFx0aWYgKCAhaXNTZWN0aW9uICYmICh2aXN1YWxLZXlzLmhhcygga2V5ICkgfHwga2V5LnN0YXJ0c1dpdGgoICd1aV8nICkpICkge1xyXG5cdFx0XHRcdFx0XHQvLyBMaWdodCBoZXVyaXN0aWM6IG9ubHkgcmUtcmVuZGVyIG9uIGNvbW1pdCBmb3IgaGVhdnkgaW5wdXRzOyBsaXZlIGZvciBzaG9ydCBvbmVzIGlzIGZpbmUuXHJcblx0XHRcdFx0XHRcdGlmICggZS50eXBlID09PSAnY2hhbmdlJyB8fCBrZXkgPT09ICdoZWxwJyB8fCBrZXkgPT09ICdwbGFjZWhvbGRlcicgKSB7XHJcblx0XHRcdFx0XHRcdFx0Yi5yZW5kZXJfcHJldmlldyggc2VsICk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAoICEoaXNfZ2VuX2tleSAmJiBlLnR5cGUgPT09ICdpbnB1dCcpICkge1xyXG5cdFx0XHRcdFx0XHQvLyBEZWJvdW5jZSBjb250aW51b3VzIHZhbHVlIHNsaWRlciBpbnB1dCBldmVudHMgdG8gYXZvaWQgZnVsbC1jYW52YXMgcmVmcmVzaCBzcGFtLlxyXG5cdFx0XHRcdFx0XHQvLyBXZSBkZXRlY3QgdGhlIHNsaWRlciBncm91cCB2aWEgW2RhdGEtbGVuLWdyb3VwXSB3cmFwcGVyLlxyXG5cdFx0XHRcdFx0XHRjb25zdCBpc19sZW5fZ3JvdXBfY3RybCA9ICEhKHQgJiYgdC5jbG9zZXN0ICYmIHQuY2xvc2VzdCggJ1tkYXRhLWxlbi1ncm91cF0nICkpO1xyXG5cclxuXHRcdFx0XHRcdFx0aWYgKCBpc19sZW5fZ3JvdXBfY3RybCAmJiBlLnR5cGUgPT09ICdpbnB1dCcgKSB7XHJcblx0XHRcdFx0XHRcdFx0YnVzX2VtaXRfY2hhbmdlX2RlYm91bmNlZCggJ3Byb3AtY2hhbmdlJywgeyBrZXksIHBoYXNlOiBlLnR5cGUgfSApO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdGJ1c19lbWl0X2NoYW5nZSggJ3Byb3AtY2hhbmdlJywgeyBrZXksIHBoYXNlOiBlLnR5cGUgfSApO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9O1xyXG5cclxuXHRcdFx0aW5zLmFkZEV2ZW50TGlzdGVuZXIoICdjaGFuZ2UnLCBoYW5kbGVyLCB0cnVlICk7XHJcblx0XHRcdC8vIHJlZmxlY3QgaW5zdGFudGx5IHdoaWxlIHR5cGluZyBhcyB3ZWxsLlxyXG5cdFx0XHRpbnMuYWRkRXZlbnRMaXN0ZW5lciggJ2lucHV0JywgaGFuZGxlciwgdHJ1ZSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogT3BlbiBJbnNwZWN0b3IgYWZ0ZXIgYSBmaWVsZCBpcyBhZGRlZC5cclxuXHRcdCAqIEBwcml2YXRlXHJcblx0XHQgKi9cclxuXHRcdF9vcGVuX2luc3BlY3Rvcl9hZnRlcl9maWVsZF9hZGRlZCgpIHtcclxuXHRcdFx0Y29uc3QgRVYgPSBDb3JlLldQQkNfQkZCX0V2ZW50cztcclxuXHRcdFx0dGhpcy5idWlsZGVyPy5idXM/Lm9uPy4oIEVWLkZJRUxEX0FERCwgKGUpID0+IHtcclxuXHRcdFx0XHRjb25zdCBlbCA9IGU/LmRldGFpbD8uZWwgfHwgbnVsbDtcclxuXHRcdFx0XHRpZiAoIGVsICYmIHRoaXMuYnVpbGRlcj8uc2VsZWN0X2ZpZWxkICkge1xyXG5cdFx0XHRcdFx0dGhpcy5idWlsZGVyLnNlbGVjdF9maWVsZCggZWwsIHsgc2Nyb2xsSW50b1ZpZXc6IHRydWUgfSApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQvLyBTaG93IEluc3BlY3RvciBQYWxldHRlLlxyXG5cdFx0XHRcdHdwYmNfYmZiX19kaXNwYXRjaF9ldmVudF9zYWZlKFxyXG5cdFx0XHRcdFx0J3dwYmNfYmZiOnNob3dfcGFuZWwnLFxyXG5cdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRwYW5lbF9pZDogJ3dwYmNfYmZiX19pbnNwZWN0b3InLFxyXG5cdFx0XHRcdFx0XHR0YWJfaWQgIDogJ3dwYmNfdGFiX2luc3BlY3RvcidcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9ICk7XHJcblx0XHR9XHJcblx0fTtcclxuXHJcblx0LyoqXHJcblx0ICogS2V5Ym9hcmQgc2hvcnRjdXRzIGZvciBzZWxlY3Rpb24sIGRlbGV0aW9uLCBhbmQgbW92ZW1lbnQuXHJcblx0ICovXHJcblx0VUkuV1BCQ19CRkJfS2V5Ym9hcmRfQ29udHJvbGxlciA9IGNsYXNzIGV4dGVuZHMgVUkuV1BCQ19CRkJfTW9kdWxlIHtcclxuXHRcdGluaXQoKSB7XHJcblx0XHRcdHRoaXMuX29uX2tleSA9IHRoaXMub25fa2V5LmJpbmQoIHRoaXMgKTtcclxuXHRcdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggJ2tleWRvd24nLCB0aGlzLl9vbl9rZXksIHRydWUgKTtcclxuXHRcdH1cclxuXHJcblx0XHRkZXN0cm95KCkge1xyXG5cdFx0XHRkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCAna2V5ZG93bicsIHRoaXMuX29uX2tleSwgdHJ1ZSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKiBAcGFyYW0ge0tleWJvYXJkRXZlbnR9IGUgKi9cclxuXHRcdG9uX2tleShlKSB7XHJcblx0XHRcdGNvbnN0IGIgICAgICAgICA9IHRoaXMuYnVpbGRlcjtcclxuXHRcdFx0Y29uc3QgaXNfdHlwaW5nID0gdGhpcy5faXNfdHlwaW5nX2FueXdoZXJlKCk7XHJcblx0XHRcdGlmICggZS5rZXkgPT09ICdFc2NhcGUnICkge1xyXG5cdFx0XHRcdGlmICggaXNfdHlwaW5nICkge1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHR0aGlzLmJ1aWxkZXIuYnVzLmVtaXQoIENvcmUuV1BCQ19CRkJfRXZlbnRzLkNMRUFSX1NFTEVDVElPTiwgeyBzb3VyY2U6ICdlc2MnIH0gKTtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0Y29uc3Qgc2VsZWN0ZWQgPSBiLmdldF9zZWxlY3RlZF9maWVsZD8uKCk7XHJcblx0XHRcdGlmICggIXNlbGVjdGVkIHx8IGlzX3R5cGluZyApIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKCBlLmtleSA9PT0gJ0RlbGV0ZScgfHwgZS5rZXkgPT09ICdCYWNrc3BhY2UnICkge1xyXG5cdFx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcclxuXHRcdFx0XHRiLmRlbGV0ZV9pdGVtPy4oIHNlbGVjdGVkICk7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICggKGUuYWx0S2V5IHx8IGUuY3RybEtleSB8fCBlLm1ldGFLZXkpICYmIChlLmtleSA9PT0gJ0Fycm93VXAnIHx8IGUua2V5ID09PSAnQXJyb3dEb3duJykgJiYgIWUuc2hpZnRLZXkgKSB7XHJcblx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdFx0XHRcdGNvbnN0IGRpciA9IChlLmtleSA9PT0gJ0Fycm93VXAnKSA/ICd1cCcgOiAnZG93bic7XHJcblx0XHRcdFx0Yi5tb3ZlX2l0ZW0/Liggc2VsZWN0ZWQsIGRpciApO1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoIGUua2V5ID09PSAnRW50ZXInICkge1xyXG5cdFx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcclxuXHRcdFx0XHRiLnNlbGVjdF9maWVsZCggc2VsZWN0ZWQsIHsgc2Nyb2xsSW50b1ZpZXc6IHRydWUgfSApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqIEByZXR1cm5zIHtib29sZWFufSAqL1xyXG5cdFx0X2lzX3R5cGluZ19hbnl3aGVyZSgpIHtcclxuXHRcdFx0Y29uc3QgYSAgID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcclxuXHRcdFx0Y29uc3QgdGFnID0gYT8udGFnTmFtZTtcclxuXHRcdFx0aWYgKCB0YWcgPT09ICdJTlBVVCcgfHwgdGFnID09PSAnVEVYVEFSRUEnIHx8IHRhZyA9PT0gJ1NFTEVDVCcgfHwgKGE/LmlzQ29udGVudEVkaXRhYmxlID09PSB0cnVlKSApIHtcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cdFx0XHRjb25zdCBpbnMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ3dwYmNfYmZiX19pbnNwZWN0b3InICk7XHJcblx0XHRcdHJldHVybiAhIShpbnMgJiYgYSAmJiBpbnMuY29udGFpbnMoIGEgKSk7XHJcblx0XHR9XHJcblx0fTtcclxuXHJcblx0LyoqXHJcblx0ICogQ29sdW1uIHJlc2l6ZSBsb2dpYyBmb3Igc2VjdGlvbiByb3dzLlxyXG5cdCAqL1xyXG5cdFVJLldQQkNfQkZCX1Jlc2l6ZV9Db250cm9sbGVyID0gY2xhc3MgZXh0ZW5kcyBVSS5XUEJDX0JGQl9Nb2R1bGUge1xyXG5cdFx0aW5pdCgpIHtcclxuXHRcdFx0dGhpcy5idWlsZGVyLmluaXRfcmVzaXplX2hhbmRsZXIgPSB0aGlzLmhhbmRsZV9yZXNpemUuYmluZCggdGhpcyApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogcmVhZCB0aGUgQ1NTIHZhciAoa2VwdCBsb2NhbCBzbyBpdCBkb2VzbuKAmXQgZGVwZW5kIG9uIHRoZSBNaW4tV2lkdGggbW9kdWxlKVxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSBjb2xcclxuXHRcdCAqIEByZXR1cm5zIHtudW1iZXJ8bnVtYmVyfVxyXG5cdFx0ICogQHByaXZhdGVcclxuXHRcdCAqL1xyXG5cdFx0X2dldF9jb2xfbWluX3B4KGNvbCkge1xyXG5cdFx0XHRjb25zdCB2ID0gZ2V0Q29tcHV0ZWRTdHlsZSggY29sICkuZ2V0UHJvcGVydHlWYWx1ZSggJy0td3BiYy1jb2wtbWluJyApIHx8ICcwJztcclxuXHRcdFx0Y29uc3QgbiA9IHBhcnNlRmxvYXQoIHYgKTtcclxuXHRcdFx0cmV0dXJuIE51bWJlci5pc0Zpbml0ZSggbiApID8gTWF0aC5tYXgoIDAsIG4gKSA6IDA7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqIEBwYXJhbSB7TW91c2VFdmVudH0gZSAqL1xyXG5cdFx0aGFuZGxlX3Jlc2l6ZShlKSB7XHJcblx0XHRcdGNvbnN0IGIgPSB0aGlzLmJ1aWxkZXI7XHJcblx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcclxuXHRcdFx0aWYgKCBlLmJ1dHRvbiAhPT0gMCApIHJldHVybjtcclxuXHJcblx0XHRcdGNvbnN0IHJlc2l6ZXIgICA9IGUuY3VycmVudFRhcmdldDtcclxuXHRcdFx0Y29uc3Qgcm93X2VsICAgID0gcmVzaXplci5wYXJlbnRFbGVtZW50O1xyXG5cdFx0XHRjb25zdCBjb2xzICAgICAgPSBBcnJheS5mcm9tKCByb3dfZWwucXVlcnlTZWxlY3RvckFsbCggJzpzY29wZSA+IC53cGJjX2JmYl9fY29sdW1uJyApICk7XHJcblx0XHRcdGNvbnN0IGxlZnRfY29sICA9IHJlc2l6ZXI/LnByZXZpb3VzRWxlbWVudFNpYmxpbmc7XHJcblx0XHRcdGNvbnN0IHJpZ2h0X2NvbCA9IHJlc2l6ZXI/Lm5leHRFbGVtZW50U2libGluZztcclxuXHRcdFx0aWYgKCAhbGVmdF9jb2wgfHwgIXJpZ2h0X2NvbCB8fCAhbGVmdF9jb2wuY2xhc3NMaXN0LmNvbnRhaW5zKCAnd3BiY19iZmJfX2NvbHVtbicgKSB8fCAhcmlnaHRfY29sLmNsYXNzTGlzdC5jb250YWlucyggJ3dwYmNfYmZiX19jb2x1bW4nICkgKSByZXR1cm47XHJcblxyXG5cdFx0XHRjb25zdCBsZWZ0X2luZGV4ICA9IGNvbHMuaW5kZXhPZiggbGVmdF9jb2wgKTtcclxuXHRcdFx0Y29uc3QgcmlnaHRfaW5kZXggPSBjb2xzLmluZGV4T2YoIHJpZ2h0X2NvbCApO1xyXG5cdFx0XHRpZiAoIGxlZnRfaW5kZXggPT09IC0xIHx8IHJpZ2h0X2luZGV4ICE9PSBsZWZ0X2luZGV4ICsgMSApIHJldHVybjtcclxuXHJcblx0XHRcdGNvbnN0IHN0YXJ0X3ggICAgICAgID0gZS5jbGllbnRYO1xyXG5cdFx0XHRjb25zdCBsZWZ0X3N0YXJ0X3B4ICA9IGxlZnRfY29sLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xyXG5cdFx0XHRjb25zdCByaWdodF9zdGFydF9weCA9IHJpZ2h0X2NvbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcclxuXHRcdFx0Y29uc3QgcGFpcl9weCAgICAgICAgPSBNYXRoLm1heCggMCwgbGVmdF9zdGFydF9weCArIHJpZ2h0X3N0YXJ0X3B4ICk7XHJcblxyXG5cdFx0XHRjb25zdCBncCAgICAgICAgID0gYi5jb2xfZ2FwX3BlcmNlbnQ7XHJcblx0XHRcdGNvbnN0IGNvbXB1dGVkICAgPSBiLmxheW91dC5jb21wdXRlX2VmZmVjdGl2ZV9iYXNlc19mcm9tX3Jvdyggcm93X2VsLCBncCApO1xyXG5cdFx0XHRjb25zdCBhdmFpbGFibGUgID0gY29tcHV0ZWQuYXZhaWxhYmxlOyAgICAgICAgICAgICAgICAgLy8gJSBvZiB0aGUg4oCcZnVsbCAxMDDigJ0gYWZ0ZXIgZ2Fwc1xyXG5cdFx0XHRjb25zdCBiYXNlcyAgICAgID0gY29tcHV0ZWQuYmFzZXMuc2xpY2UoIDAgKTsgICAgICAgICAgICAvLyBjdXJyZW50IGVmZmVjdGl2ZSAlXHJcblx0XHRcdGNvbnN0IHBhaXJfYXZhaWwgPSBiYXNlc1tsZWZ0X2luZGV4XSArIGJhc2VzW3JpZ2h0X2luZGV4XTtcclxuXHJcblx0XHRcdC8vIEJhaWwgaWYgd2UgY2Fu4oCZdCBjb21wdXRlIHNhbmUgZGVsdGFzLlxyXG5cdFx0XHRpZiAoIXBhaXJfcHggfHwgIU51bWJlci5pc0Zpbml0ZShwYWlyX2F2YWlsKSB8fCBwYWlyX2F2YWlsIDw9IDApIHJldHVybjtcclxuXHJcblx0XHRcdC8vIC0tLSBNSU4gQ0xBTVBTIChwaXhlbHMpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHRcdFx0Y29uc3QgcGN0VG9QeCAgICAgICA9IChwY3QpID0+IChwYWlyX3B4ICogKHBjdCAvIHBhaXJfYXZhaWwpKTsgLy8gcGFpci1sb2NhbCBwZXJjZW50IC0+IHB4XHJcblx0XHRcdGNvbnN0IGdlbmVyaWNNaW5QY3QgPSBNYXRoLm1pbiggMC4xLCBhdmFpbGFibGUgKTsgICAgICAgICAgICAgICAgICAvLyBvcmlnaW5hbCAwLjElIGZsb29yIChpbiDigJxhdmFpbGFibGUgJeKAnSBzcGFjZSlcclxuXHRcdFx0Y29uc3QgZ2VuZXJpY01pblB4ICA9IHBjdFRvUHgoIGdlbmVyaWNNaW5QY3QgKTtcclxuXHJcblx0XHRcdGNvbnN0IGxlZnRNaW5QeCAgPSBNYXRoLm1heCggdGhpcy5fZ2V0X2NvbF9taW5fcHgoIGxlZnRfY29sICksIGdlbmVyaWNNaW5QeCApO1xyXG5cdFx0XHRjb25zdCByaWdodE1pblB4ID0gTWF0aC5tYXgoIHRoaXMuX2dldF9jb2xfbWluX3B4KCByaWdodF9jb2wgKSwgZ2VuZXJpY01pblB4ICk7XHJcblxyXG5cdFx0XHQvLyBmcmVlemUgdGV4dCBzZWxlY3Rpb24gKyBjdXJzb3JcclxuXHRcdFx0Y29uc3QgcHJldl91c2VyX3NlbGVjdCAgICAgICAgID0gZG9jdW1lbnQuYm9keS5zdHlsZS51c2VyU2VsZWN0O1xyXG5cdFx0XHRkb2N1bWVudC5ib2R5LnN0eWxlLnVzZXJTZWxlY3QgPSAnbm9uZSc7XHJcblx0XHRcdHJvd19lbC5zdHlsZS5jdXJzb3IgICAgICAgICAgICA9ICdjb2wtcmVzaXplJztcclxuXHJcblx0XHRcdGNvbnN0IG9uX21vdXNlX21vdmUgPSAoZXYpID0+IHtcclxuXHRcdFx0XHRpZiAoICFwYWlyX3B4ICkgcmV0dXJuO1xyXG5cclxuXHRcdFx0XHQvLyB3b3JrIGluIHBpeGVscywgY2xhbXAgYnkgZWFjaCBzaWRl4oCZcyBtaW5cclxuXHRcdFx0XHRjb25zdCBkZWx0YV9weCAgID0gZXYuY2xpZW50WCAtIHN0YXJ0X3g7XHJcblx0XHRcdFx0bGV0IG5ld0xlZnRQeCAgICA9IGxlZnRfc3RhcnRfcHggKyBkZWx0YV9weDtcclxuXHRcdFx0XHRuZXdMZWZ0UHggICAgICAgID0gTWF0aC5tYXgoIGxlZnRNaW5QeCwgTWF0aC5taW4oIHBhaXJfcHggLSByaWdodE1pblB4LCBuZXdMZWZ0UHggKSApO1xyXG5cdFx0XHRcdGNvbnN0IG5ld1JpZ2h0UHggPSBwYWlyX3B4IC0gbmV3TGVmdFB4O1xyXG5cclxuXHRcdFx0XHQvLyB0cmFuc2xhdGUgYmFjayB0byBwYWlyLWxvY2FsIHBlcmNlbnRhZ2VzXHJcblx0XHRcdFx0Y29uc3QgbmV3TGVmdFBjdCAgICAgID0gKG5ld0xlZnRQeCAvIHBhaXJfcHgpICogcGFpcl9hdmFpbDtcclxuXHRcdFx0XHRjb25zdCBuZXdCYXNlcyAgICAgICAgPSBiYXNlcy5zbGljZSggMCApO1xyXG5cdFx0XHRcdG5ld0Jhc2VzW2xlZnRfaW5kZXhdICA9IG5ld0xlZnRQY3Q7XHJcblx0XHRcdFx0bmV3QmFzZXNbcmlnaHRfaW5kZXhdID0gcGFpcl9hdmFpbCAtIG5ld0xlZnRQY3Q7XHJcblxyXG5cdFx0XHRcdGIubGF5b3V0LmFwcGx5X2Jhc2VzX3RvX3Jvdyggcm93X2VsLCBuZXdCYXNlcyApO1xyXG5cdFx0XHR9O1xyXG5cclxuXHRcdFx0Y29uc3Qgb25fbW91c2VfdXAgPSAoKSA9PiB7XHJcblx0XHRcdFx0ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ21vdXNlbW92ZScsIG9uX21vdXNlX21vdmUgKTtcclxuXHRcdFx0XHRkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCAnbW91c2V1cCcsIG9uX21vdXNlX3VwICk7XHJcblx0XHRcdFx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoICdtb3VzZXVwJywgb25fbW91c2VfdXAgKTtcclxuXHRcdFx0XHRkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCAnbW91c2VsZWF2ZScsIG9uX21vdXNlX3VwICk7XHJcblx0XHRcdFx0ZG9jdW1lbnQuYm9keS5zdHlsZS51c2VyU2VsZWN0ID0gcHJldl91c2VyX3NlbGVjdCB8fCAnJztcclxuXHRcdFx0XHRyb3dfZWwuc3R5bGUuY3Vyc29yICAgICAgICAgICAgPSAnJztcclxuXHJcblx0XHRcdFx0Ly8gbm9ybWFsaXplIHRvIHRoZSByb3figJlzIGF2YWlsYWJsZSAlIGFnYWluXHJcblx0XHRcdFx0Y29uc3Qgbm9ybWFsaXplZCA9IGIubGF5b3V0LmNvbXB1dGVfZWZmZWN0aXZlX2Jhc2VzX2Zyb21fcm93KCByb3dfZWwsIGdwICk7XHJcblx0XHRcdFx0Yi5sYXlvdXQuYXBwbHlfYmFzZXNfdG9fcm93KCByb3dfZWwsIG5vcm1hbGl6ZWQuYmFzZXMgKTtcclxuXHRcdFx0fTtcclxuXHJcblx0XHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoICdtb3VzZW1vdmUnLCBvbl9tb3VzZV9tb3ZlICk7XHJcblx0XHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoICdtb3VzZXVwJywgb25fbW91c2VfdXAgKTtcclxuXHRcdFx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoICdtb3VzZXVwJywgb25fbW91c2VfdXAgKTtcclxuXHRcdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggJ21vdXNlbGVhdmUnLCBvbl9tb3VzZV91cCApO1xyXG5cdFx0fVxyXG5cclxuXHR9O1xyXG5cclxuXHQvKipcclxuXHQgKiBQYWdlIGFuZCBzZWN0aW9uIGNyZWF0aW9uLCByZWJ1aWxkaW5nLCBhbmQgbmVzdGVkIFNvcnRhYmxlIHNldHVwLlxyXG5cdCAqL1xyXG5cdFVJLldQQkNfQkZCX1BhZ2VzX1NlY3Rpb25zID0gY2xhc3MgZXh0ZW5kcyBVSS5XUEJDX0JGQl9Nb2R1bGUge1xyXG5cclxuXHRcdGluaXQoKSB7XHJcblx0XHRcdHRoaXMuYnVpbGRlci5hZGRfcGFnZSAgICAgICAgICAgICAgICAgID0gKG9wdHMpID0+IHRoaXMuYWRkX3BhZ2UoIG9wdHMgKTtcclxuXHRcdFx0dGhpcy5idWlsZGVyLmFkZF9zZWN0aW9uICAgICAgICAgICAgICAgPSAoY29udGFpbmVyLCBjb2xzKSA9PiB0aGlzLmFkZF9zZWN0aW9uKCBjb250YWluZXIsIGNvbHMgKTtcclxuXHRcdFx0dGhpcy5idWlsZGVyLnJlYnVpbGRfc2VjdGlvbiAgICAgICAgICAgPSAoc2VjdGlvbl9kYXRhLCBjb250YWluZXIpID0+IHRoaXMucmVidWlsZF9zZWN0aW9uKCBzZWN0aW9uX2RhdGEsIGNvbnRhaW5lciApO1xyXG5cdFx0XHR0aGlzLmJ1aWxkZXIuaW5pdF9hbGxfbmVzdGVkX3NvcnRhYmxlcyA9IChlbCkgPT4gdGhpcy5pbml0X2FsbF9uZXN0ZWRfc29ydGFibGVzKCBlbCApO1xyXG5cdFx0XHR0aGlzLmJ1aWxkZXIuaW5pdF9zZWN0aW9uX3NvcnRhYmxlICAgICA9IChlbCkgPT4gdGhpcy5pbml0X3NlY3Rpb25fc29ydGFibGUoIGVsICk7XHJcblx0XHRcdHRoaXMuYnVpbGRlci5wYWdlc19zZWN0aW9ucyAgICAgICAgICAgID0gdGhpcztcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEdpdmUgZXZlcnkgZmllbGQvc2VjdGlvbiBpbiBhIGNsb25lZCBzdWJ0cmVlIGEgZnJlc2ggZGF0YS11aWQgc29cclxuXHRcdCAqIHVuaXF1ZW5lc3MgY2hlY2tzIGRvbid0IGV4Y2x1ZGUgdGhlaXIgb3JpZ2luYWxzLlxyXG5cdFx0ICovXHJcblx0XHRfcmV0YWdfdWlkc19pbl9zdWJ0cmVlKHJvb3QpIHtcclxuXHRcdFx0Y29uc3QgYiA9IHRoaXMuYnVpbGRlcjtcclxuXHRcdFx0aWYgKCAhcm9vdCApIHJldHVybjtcclxuXHRcdFx0Y29uc3Qgbm9kZXMgPSBbXTtcclxuXHRcdFx0aWYgKCByb290LmNsYXNzTGlzdD8uY29udGFpbnMoICd3cGJjX2JmYl9fc2VjdGlvbicgKSB8fCByb290LmNsYXNzTGlzdD8uY29udGFpbnMoICd3cGJjX2JmYl9fZmllbGQnICkgKSB7XHJcblx0XHRcdFx0bm9kZXMucHVzaCggcm9vdCApO1xyXG5cdFx0XHR9XHJcblx0XHRcdG5vZGVzLnB1c2goIC4uLnJvb3QucXVlcnlTZWxlY3RvckFsbCggJy53cGJjX2JmYl9fc2VjdGlvbiwgLndwYmNfYmZiX19maWVsZCcgKSApO1xyXG5cdFx0XHRub2Rlcy5mb3JFYWNoKCAoZWwpID0+IHtcclxuXHRcdFx0XHRjb25zdCBwcmVmaXggICA9IGVsLmNsYXNzTGlzdC5jb250YWlucyggJ3dwYmNfYmZiX19zZWN0aW9uJyApID8gJ3MnIDogJ2YnO1xyXG5cdFx0XHRcdGVsLmRhdGFzZXQudWlkID0gYCR7cHJlZml4fS0keysrYi5fdWlkX2NvdW50ZXJ9LSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKCAzNiApLnNsaWNlKCAyLCA3ICl9YDtcclxuXHRcdFx0fSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQnVtcCBcImZvb1wiLCBcImZvby0yXCIsIFwiZm9vLTNcIiwgLi4uXHJcblx0XHQgKi9cclxuXHRcdF9tYWtlX3VuaXF1ZShiYXNlLCB0YWtlbikge1xyXG5cdFx0XHRjb25zdCBzID0gQ29yZS5XUEJDX0JGQl9TYW5pdGl6ZTtcclxuXHRcdFx0bGV0IHYgICA9IFN0cmluZyggYmFzZSB8fCAnJyApO1xyXG5cdFx0XHRpZiAoICF2ICkgdiA9ICdmaWVsZCc7XHJcblx0XHRcdGNvbnN0IG0gID0gdi5tYXRjaCggLy0oXFxkKykkLyApO1xyXG5cdFx0XHRsZXQgbiAgICA9IG0gPyAocGFyc2VJbnQoIG1bMV0sIDEwICkgfHwgMSkgOiAxO1xyXG5cdFx0XHRsZXQgc3RlbSA9IG0gPyB2LnJlcGxhY2UoIC8tXFxkKyQvLCAnJyApIDogdjtcclxuXHRcdFx0d2hpbGUgKCB0YWtlbi5oYXMoIHYgKSApIHtcclxuXHRcdFx0XHRuID0gTWF0aC5tYXgoIDIsIG4gKyAxICk7XHJcblx0XHRcdFx0diA9IGAke3N0ZW19LSR7bn1gO1xyXG5cdFx0XHR9XHJcblx0XHRcdHRha2VuLmFkZCggdiApO1xyXG5cdFx0XHRyZXR1cm4gdjtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFN0cmljdCwgb25lLXBhc3MgZGUtZHVwbGljYXRpb24gZm9yIGEgbmV3bHktaW5zZXJ0ZWQgc3VidHJlZS5cclxuXHRcdCAqIC0gRW5zdXJlcyB1bmlxdWUgZGF0YS1pZCAoaW50ZXJuYWwpLCBkYXRhLW5hbWUgKGZpZWxkcyksIGRhdGEtaHRtbF9pZCAocHVibGljKVxyXG5cdFx0ICogLSBBbHNvIHVwZGF0ZXMgRE9NOiA8c2VjdGlvbiBpZD4sIDxpbnB1dCBpZD4sIDxsYWJlbCBmb3I+LCBhbmQgaW5wdXRbbmFtZV0uXHJcblx0XHQgKi9cclxuXHRcdF9kZWR1cGVfc3VidHJlZV9zdHJpY3Qocm9vdCkge1xyXG5cdFx0XHRjb25zdCBiID0gdGhpcy5idWlsZGVyO1xyXG5cdFx0XHRjb25zdCBzID0gQ29yZS5XUEJDX0JGQl9TYW5pdGl6ZTtcclxuXHRcdFx0aWYgKCAhcm9vdCB8fCAhYj8ucGFnZXNfY29udGFpbmVyICkgcmV0dXJuO1xyXG5cclxuXHRcdFx0Ly8gMSkgQnVpbGQgXCJ0YWtlblwiIHNldHMgZnJvbSBvdXRzaWRlIHRoZSBzdWJ0cmVlLlxyXG5cdFx0XHRjb25zdCB0YWtlbkRhdGFJZCAgID0gbmV3IFNldCgpO1xyXG5cdFx0XHRjb25zdCB0YWtlbkRhdGFOYW1lID0gbmV3IFNldCgpO1xyXG5cdFx0XHRjb25zdCB0YWtlbkh0bWxJZCAgID0gbmV3IFNldCgpO1xyXG5cdFx0XHRjb25zdCB0YWtlbkRvbUlkICAgID0gbmV3IFNldCgpO1xyXG5cclxuXHRcdFx0Ly8gQWxsIGZpZWxkcy9zZWN0aW9ucyBvdXRzaWRlIHJvb3RcclxuXHRcdFx0Yi5wYWdlc19jb250YWluZXIucXVlcnlTZWxlY3RvckFsbCggJy53cGJjX2JmYl9fZmllbGQsIC53cGJjX2JmYl9fc2VjdGlvbicgKS5mb3JFYWNoKCBlbCA9PiB7XHJcblx0XHRcdFx0aWYgKCByb290LmNvbnRhaW5zKCBlbCApICkgcmV0dXJuO1xyXG5cdFx0XHRcdGNvbnN0IGRpZCAgPSBlbC5nZXRBdHRyaWJ1dGUoICdkYXRhLWlkJyApO1xyXG5cdFx0XHRcdGNvbnN0IGRuYW0gPSBlbC5nZXRBdHRyaWJ1dGUoICdkYXRhLW5hbWUnICk7XHJcblx0XHRcdFx0Y29uc3QgaGlkICA9IGVsLmdldEF0dHJpYnV0ZSggJ2RhdGEtaHRtbF9pZCcgKTtcclxuXHRcdFx0XHRpZiAoIGRpZCApIHRha2VuRGF0YUlkLmFkZCggZGlkICk7XHJcblx0XHRcdFx0aWYgKCBkbmFtICkgdGFrZW5EYXRhTmFtZS5hZGQoIGRuYW0gKTtcclxuXHRcdFx0XHRpZiAoIGhpZCApIHRha2VuSHRtbElkLmFkZCggaGlkICk7XHJcblx0XHRcdH0gKTtcclxuXHJcblx0XHRcdC8vIEFsbCBET00gaWRzIG91dHNpZGUgcm9vdCAobGFiZWxzLCBpbnB1dHMsIGFueXRoaW5nKVxyXG5cdFx0XHRkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCAnW2lkXScgKS5mb3JFYWNoKCBlbCA9PiB7XHJcblx0XHRcdFx0aWYgKCByb290LmNvbnRhaW5zKCBlbCApICkgcmV0dXJuO1xyXG5cdFx0XHRcdGlmICggZWwuaWQgKSB0YWtlbkRvbUlkLmFkZCggZWwuaWQgKTtcclxuXHRcdFx0fSApO1xyXG5cclxuXHRcdFx0Y29uc3Qgbm9kZXMgPSBbXTtcclxuXHRcdFx0aWYgKCByb290LmNsYXNzTGlzdD8uY29udGFpbnMoICd3cGJjX2JmYl9fc2VjdGlvbicgKSB8fCByb290LmNsYXNzTGlzdD8uY29udGFpbnMoICd3cGJjX2JmYl9fZmllbGQnICkgKSB7XHJcblx0XHRcdFx0bm9kZXMucHVzaCggcm9vdCApO1xyXG5cdFx0XHR9XHJcblx0XHRcdG5vZGVzLnB1c2goIC4uLnJvb3QucXVlcnlTZWxlY3RvckFsbCggJy53cGJjX2JmYl9fc2VjdGlvbiwgLndwYmNfYmZiX19maWVsZCcgKSApO1xyXG5cclxuXHRcdFx0Ly8gMikgV2FsayB0aGUgc3VidHJlZSBhbmQgZml4IGNvbGxpc2lvbnMgZGV0ZXJtaW5pc3RpY2FsbHkuXHJcblx0XHRcdG5vZGVzLmZvckVhY2goIGVsID0+IHtcclxuXHRcdFx0XHRjb25zdCBpc0ZpZWxkICAgPSBlbC5jbGFzc0xpc3QuY29udGFpbnMoICd3cGJjX2JmYl9fZmllbGQnICk7XHJcblx0XHRcdFx0Y29uc3QgaXNTZWN0aW9uID0gZWwuY2xhc3NMaXN0LmNvbnRhaW5zKCAnd3BiY19iZmJfX3NlY3Rpb24nICk7XHJcblxyXG5cdFx0XHRcdC8vIElOVEVSTkFMIGRhdGEtaWRcclxuXHRcdFx0XHR7XHJcblx0XHRcdFx0XHRjb25zdCByYXcgID0gZWwuZ2V0QXR0cmlidXRlKCAnZGF0YS1pZCcgKSB8fCAnJztcclxuXHRcdFx0XHRcdGNvbnN0IGJhc2UgPSBzLnNhbml0aXplX2h0bWxfaWQoIHJhdyApIHx8IChpc1NlY3Rpb24gPyAnc2VjdGlvbicgOiAnZmllbGQnKTtcclxuXHRcdFx0XHRcdGNvbnN0IHVuaXEgPSB0aGlzLl9tYWtlX3VuaXF1ZSggYmFzZSwgdGFrZW5EYXRhSWQgKTtcclxuXHRcdFx0XHRcdGlmICggdW5pcSAhPT0gcmF3ICkgZWwuc2V0QXR0cmlidXRlKCAnZGF0YS1pZCcsIHVuaXEgKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIEhUTUwgbmFtZSAoZmllbGRzIG9ubHkpXHJcblx0XHRcdFx0aWYgKCBpc0ZpZWxkICkge1xyXG5cdFx0XHRcdFx0Y29uc3QgcmF3ID0gZWwuZ2V0QXR0cmlidXRlKCAnZGF0YS1uYW1lJyApIHx8ICcnO1xyXG5cdFx0XHRcdFx0aWYgKCByYXcgKSB7XHJcblx0XHRcdFx0XHRcdGNvbnN0IGJhc2UgPSBzLnNhbml0aXplX2h0bWxfbmFtZSggcmF3ICk7XHJcblx0XHRcdFx0XHRcdGNvbnN0IHVuaXEgPSB0aGlzLl9tYWtlX3VuaXF1ZSggYmFzZSwgdGFrZW5EYXRhTmFtZSApO1xyXG5cdFx0XHRcdFx0XHRpZiAoIHVuaXEgIT09IHJhdyApIHtcclxuXHRcdFx0XHRcdFx0XHRlbC5zZXRBdHRyaWJ1dGUoICdkYXRhLW5hbWUnLCB1bmlxICk7XHJcblx0XHRcdFx0XHRcdFx0Ly8gVXBkYXRlIGlubmVyIGNvbnRyb2wgaW1tZWRpYXRlbHlcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBpbnB1dCA9IGVsLnF1ZXJ5U2VsZWN0b3IoICdpbnB1dCwgdGV4dGFyZWEsIHNlbGVjdCcgKTtcclxuXHRcdFx0XHRcdFx0XHRpZiAoIGlucHV0ICkgaW5wdXQuc2V0QXR0cmlidXRlKCAnbmFtZScsIHVuaXEgKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gUHVibGljIEhUTUwgaWQgKGZpZWxkcyArIHNlY3Rpb25zKVxyXG5cdFx0XHRcdHtcclxuXHRcdFx0XHRcdGNvbnN0IHJhdyA9IGVsLmdldEF0dHJpYnV0ZSggJ2RhdGEtaHRtbF9pZCcgKSB8fCAnJztcclxuXHRcdFx0XHRcdGlmICggcmF3ICkge1xyXG5cdFx0XHRcdFx0XHRjb25zdCBiYXNlICAgICAgICAgID0gcy5zYW5pdGl6ZV9odG1sX2lkKCByYXcgKTtcclxuXHRcdFx0XHRcdFx0Ly8gUmVzZXJ2ZSBhZ2FpbnN0IEJPVEgga25vd24gZGF0YS1odG1sX2lkIGFuZCByZWFsIERPTSBpZHMuXHJcblx0XHRcdFx0XHRcdGNvbnN0IGNvbWJpbmVkVGFrZW4gPSBuZXcgU2V0KCBbIC4uLnRha2VuSHRtbElkLCAuLi50YWtlbkRvbUlkIF0gKTtcclxuXHRcdFx0XHRcdFx0bGV0IGNhbmRpZGF0ZSAgICAgICA9IHRoaXMuX21ha2VfdW5pcXVlKCBiYXNlLCBjb21iaW5lZFRha2VuICk7XHJcblx0XHRcdFx0XHRcdC8vIFJlY29yZCBpbnRvIHRoZSByZWFsIHNldHMgc28gZnV0dXJlIGNoZWNrcyBzZWUgdGhlIHJlc2VydmF0aW9uLlxyXG5cdFx0XHRcdFx0XHR0YWtlbkh0bWxJZC5hZGQoIGNhbmRpZGF0ZSApO1xyXG5cdFx0XHRcdFx0XHR0YWtlbkRvbUlkLmFkZCggY2FuZGlkYXRlICk7XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAoIGNhbmRpZGF0ZSAhPT0gcmF3ICkgZWwuc2V0QXR0cmlidXRlKCAnZGF0YS1odG1sX2lkJywgY2FuZGlkYXRlICk7XHJcblxyXG5cdFx0XHRcdFx0XHQvLyBSZWZsZWN0IHRvIERPTSBpbW1lZGlhdGVseVxyXG5cdFx0XHRcdFx0XHRpZiAoIGlzU2VjdGlvbiApIHtcclxuXHRcdFx0XHRcdFx0XHRlbC5pZCA9IGNhbmRpZGF0ZSB8fCAnJztcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBpbnB1dCA9IGVsLnF1ZXJ5U2VsZWN0b3IoICdpbnB1dCwgdGV4dGFyZWEsIHNlbGVjdCcgKTtcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBsYWJlbCA9IGVsLnF1ZXJ5U2VsZWN0b3IoICdsYWJlbC53cGJjX2JmYl9fZmllbGQtbGFiZWwnICk7XHJcblx0XHRcdFx0XHRcdFx0aWYgKCBpbnB1dCApIGlucHV0LmlkID0gY2FuZGlkYXRlIHx8ICcnO1xyXG5cdFx0XHRcdFx0XHRcdGlmICggbGFiZWwgKSBsYWJlbC5odG1sRm9yID0gY2FuZGlkYXRlIHx8ICcnO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCBpc1NlY3Rpb24gKSB7XHJcblx0XHRcdFx0XHRcdC8vIEVuc3VyZSBubyBzdGFsZSBET00gaWQgaWYgZGF0YS1odG1sX2lkIHdhcyBjbGVhcmVkXHJcblx0XHRcdFx0XHRcdGVsLnJlbW92ZUF0dHJpYnV0ZSggJ2lkJyApO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdF9tYWtlX2FkZF9jb2x1bW5zX2NvbnRyb2wocGFnZV9lbCwgc2VjdGlvbl9jb250YWluZXIsIGluc2VydF9wb3MgPSAnYm90dG9tJykge1xyXG5cclxuXHRcdFx0Ly8gQWNjZXB0IGluc2VydF9wb3MgKCd0b3AnfCdib3R0b20nKSwgZGVmYXVsdCAnYm90dG9tJy5cclxuXHJcblx0XHRcdGNvbnN0IHRwbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnd3BiY19iZmJfX2FkZF9jb2x1bW5zX3RlbXBsYXRlJyApO1xyXG5cdFx0XHRpZiAoICF0cGwgKSB7XHJcblx0XHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIENsb25lICpjb250ZW50cyogKG5vdCB0aGUgaWQpLCB1bmhpZGUsIGFuZCBhZGQgYSBwYWdlLXNjb3BlZCBjbGFzcy5cclxuXHRcdFx0Y29uc3Qgc3JjID0gKHRwbC5jb250ZW50ICYmIHRwbC5jb250ZW50LmZpcnN0RWxlbWVudENoaWxkKSA/IHRwbC5jb250ZW50LmZpcnN0RWxlbWVudENoaWxkIDogdHBsLmZpcnN0RWxlbWVudENoaWxkO1xyXG5cdFx0XHRpZiAoICFzcmMgKSB7XHJcblx0XHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGNvbnN0IGNsb25lID0gc3JjLmNsb25lTm9kZSggdHJ1ZSApO1xyXG5cdFx0XHRjbG9uZS5yZW1vdmVBdHRyaWJ1dGUoICdoaWRkZW4nICk7XHJcblx0XHRcdGlmICggY2xvbmUuaWQgKSB7XHJcblx0XHRcdFx0Y2xvbmUucmVtb3ZlQXR0cmlidXRlKCAnaWQnICk7XHJcblx0XHRcdH1cclxuXHRcdFx0Y2xvbmUucXVlcnlTZWxlY3RvckFsbCggJ1tpZF0nICkuZm9yRWFjaCggbiA9PiBuLnJlbW92ZUF0dHJpYnV0ZSggJ2lkJyApICk7XHJcblxyXG5cdFx0XHQvLyBNYXJrIHdoZXJlIHRoaXMgY29udHJvbCBpbnNlcnRzIHNlY3Rpb25zLlxyXG5cdFx0XHRjbG9uZS5kYXRhc2V0Lmluc2VydCA9IGluc2VydF9wb3M7IC8vICd0b3AnIHwgJ2JvdHRvbSdcclxuXHJcblx0XHRcdC8vIC8vIE9wdGlvbmFsIFVJIGhpbnQgZm9yIHVzZXJzIChrZWVwcyBleGlzdGluZyBtYXJrdXAgaW50YWN0KS5cclxuXHRcdFx0Ly8gY29uc3QgaGludCA9IGNsb25lLnF1ZXJ5U2VsZWN0b3IoICcubmF2LXRhYi10ZXh0IC5zZWxlY3RlZF92YWx1ZScgKTtcclxuXHRcdFx0Ly8gaWYgKCBoaW50ICkge1xyXG5cdFx0XHQvLyBcdGhpbnQudGV4dENvbnRlbnQgPSAoaW5zZXJ0X3BvcyA9PT0gJ3RvcCcpID8gJyAoYWRkIGF0IHRvcCknIDogJyAoYWRkIGF0IGJvdHRvbSknO1xyXG5cdFx0XHQvLyB9XHJcblxyXG5cdFx0XHQvLyBDbGljayBvbiBvcHRpb25zIC0gYWRkIHNlY3Rpb24gd2l0aCBOIGNvbHVtbnMuXHJcblx0XHRcdGNsb25lLmFkZEV2ZW50TGlzdGVuZXIoICdjbGljaycsIChlKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgYSA9IGUudGFyZ2V0LmNsb3Nlc3QoICcudWxfZHJvcGRvd25fbWVudV9saV9hY3Rpb25fYWRkX3NlY3Rpb25zJyApO1xyXG5cdFx0XHRcdGlmICggIWEgKSB7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcclxuXHJcblx0XHRcdFx0Ly8gUmVhZCBOIGVpdGhlciBmcm9tIGRhdGEtY29scyBvciBmYWxsYmFjayB0byBwYXJzaW5nIHRleHQgbGlrZSBcIjMgQ29sdW1uc1wiLlxyXG5cdFx0XHRcdGxldCBjb2xzID0gcGFyc2VJbnQoIGEuZGF0YXNldC5jb2xzIHx8IChhLnRleHRDb250ZW50Lm1hdGNoKCAvXFxiKFxcZCspXFxzKkNvbHVtbi9pICk/LlsxXSA/PyAnMScpLCAxMCApO1xyXG5cdFx0XHRcdGNvbHMgICAgID0gTWF0aC5tYXgoIDEsIE1hdGgubWluKCA0LCBjb2xzICkgKTtcclxuXHJcblx0XHRcdFx0Ly8gTkVXOiBob25vciB0aGUgY29udHJvbCdzIGluc2VydGlvbiBwb3NpdGlvblxyXG5cdFx0XHRcdHRoaXMuYWRkX3NlY3Rpb24oIHNlY3Rpb25fY29udGFpbmVyLCBjb2xzLCBpbnNlcnRfcG9zICk7XHJcblxyXG5cdFx0XHRcdC8vIFJlZmxlY3QgbGFzdCBjaG9pY2UgKHVuY2hhbmdlZClcclxuXHRcdFx0XHRjb25zdCB2YWwgPSBjbG9uZS5xdWVyeVNlbGVjdG9yKCAnLnNlbGVjdGVkX3ZhbHVlJyApO1xyXG5cdFx0XHRcdGlmICggdmFsICkge1xyXG5cdFx0XHRcdFx0dmFsLnRleHRDb250ZW50ID0gYCAoJHtjb2xzfSlgO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSApO1xyXG5cclxuXHRcdFx0cmV0dXJuIGNsb25lO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQHBhcmFtIHt7c2Nyb2xsPzogYm9vbGVhbn19IFtvcHRzID0ge31dXHJcblx0XHQgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9XHJcblx0XHQgKi9cclxuXHRcdGFkZF9wYWdlKHsgc2Nyb2xsID0gdHJ1ZSB9ID0ge30pIHtcclxuXHRcdFx0Y29uc3QgYiAgICAgICA9IHRoaXMuYnVpbGRlcjtcclxuXHRcdFx0Y29uc3QgcGFnZV9lbCA9IENvcmUuV1BCQ19Gb3JtX0J1aWxkZXJfSGVscGVyLmNyZWF0ZV9lbGVtZW50KCAnZGl2JywgJ3dwYmNfYmZiX19wYW5lbCB3cGJjX2JmYl9fcGFuZWwtLXByZXZpZXcgIHdwYmNfYmZiX2Zvcm0gd3BiY19jb250YWluZXIgd3BiY19mb3JtIHdwYmNfY29udGFpbmVyX2Jvb2tpbmdfZm9ybScgKTtcclxuXHRcdFx0cGFnZV9lbC5zZXRBdHRyaWJ1dGUoICdkYXRhLXBhZ2UnLCArK2IucGFnZV9jb3VudGVyICk7XHJcblxyXG5cdFx0XHQvLyBcIlBhZ2UgMSB8IFhcIiAtIFJlbmRlciBwYWdlIFRpdGxlIHdpdGggUmVtb3ZlIFggYnV0dG9uLlxyXG5cdFx0XHRjb25zdCBjb250cm9sc19odG1sID0gVUkucmVuZGVyX3dwX3RlbXBsYXRlKCAnd3BiYy1iZmItdHBsLXBhZ2UtcmVtb3ZlJywgeyBwYWdlX251bWJlcjogYi5wYWdlX2NvdW50ZXIgfSApO1xyXG5cdFx0XHRwYWdlX2VsLmlubmVySFRNTCAgID0gY29udHJvbHNfaHRtbCArICc8ZGl2IGNsYXNzPVwid3BiY19iZmJfX2Zvcm1fcHJldmlld19zZWN0aW9uX2NvbnRhaW5lciB3cGJjX3dpemFyZF9fYm9yZGVyX2NvbnRhaW5lclwiPjwvZGl2Pic7XHJcblxyXG5cdFx0XHRiLnBhZ2VzX2NvbnRhaW5lci5hcHBlbmRDaGlsZCggcGFnZV9lbCApO1xyXG5cdFx0XHRpZiAoIHNjcm9sbCApIHtcclxuXHRcdFx0XHRwYWdlX2VsLnNjcm9sbEludG9WaWV3KCB7IGJlaGF2aW9yOiAnc21vb3RoJywgYmxvY2s6ICdzdGFydCcgfSApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRjb25zdCBzZWN0aW9uX2NvbnRhaW5lciAgICAgICAgID0gcGFnZV9lbC5xdWVyeVNlbGVjdG9yKCAnLndwYmNfYmZiX19mb3JtX3ByZXZpZXdfc2VjdGlvbl9jb250YWluZXInICk7XHJcblx0XHRcdGNvbnN0IHNlY3Rpb25fY291bnRfb25fYWRkX3BhZ2UgPSAyO1xyXG5cdFx0XHR0aGlzLmluaXRfc2VjdGlvbl9zb3J0YWJsZSggc2VjdGlvbl9jb250YWluZXIgKTtcclxuXHRcdFx0dGhpcy5hZGRfc2VjdGlvbiggc2VjdGlvbl9jb250YWluZXIsIHNlY3Rpb25fY291bnRfb25fYWRkX3BhZ2UgKTtcclxuXHJcblx0XHRcdC8vIERyb3Bkb3duIGNvbnRyb2wgY2xvbmVkIGZyb20gdGhlIGhpZGRlbiB0ZW1wbGF0ZS5cclxuXHRcdFx0Y29uc3QgY29udHJvbHNfaG9zdF90b3AgPSBwYWdlX2VsLnF1ZXJ5U2VsZWN0b3IoICcud3BiY19iZmJfX2NvbnRyb2xzJyApO1xyXG5cdFx0XHRjb25zdCBjdHJsX3RvcCAgICAgICAgICA9IHRoaXMuX21ha2VfYWRkX2NvbHVtbnNfY29udHJvbCggcGFnZV9lbCwgc2VjdGlvbl9jb250YWluZXIsICd0b3AnICk7XHJcblx0XHRcdGlmICggY3RybF90b3AgKSB7XHJcblx0XHRcdFx0Y29udHJvbHNfaG9zdF90b3AuYXBwZW5kQ2hpbGQoIGN0cmxfdG9wICk7XHJcblx0XHRcdH1cclxuXHRcdFx0Ly8gQm90dG9tIGNvbnRyb2wgYmFyIGFmdGVyIHRoZSBzZWN0aW9uIGNvbnRhaW5lci5cclxuXHRcdFx0Y29uc3QgY29udHJvbHNfaG9zdF9ib3R0b20gPSBDb3JlLldQQkNfRm9ybV9CdWlsZGVyX0hlbHBlci5jcmVhdGVfZWxlbWVudCggJ2RpdicsICd3cGJjX2JmYl9fY29udHJvbHMgd3BiY19iZmJfX2NvbnRyb2xzLS1ib3R0b20nICk7XHJcblx0XHRcdHNlY3Rpb25fY29udGFpbmVyLmFmdGVyKCBjb250cm9sc19ob3N0X2JvdHRvbSApO1xyXG5cdFx0XHRjb25zdCBjdHJsX2JvdHRvbSA9IHRoaXMuX21ha2VfYWRkX2NvbHVtbnNfY29udHJvbCggcGFnZV9lbCwgc2VjdGlvbl9jb250YWluZXIsICdib3R0b20nICk7XHJcblx0XHRcdGlmICggY3RybF9ib3R0b20gKSB7XHJcblx0XHRcdFx0Y29udHJvbHNfaG9zdF9ib3R0b20uYXBwZW5kQ2hpbGQoIGN0cmxfYm90dG9tICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHJldHVybiBwYWdlX2VsO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gY29udGFpbmVyXHJcblx0XHQgKiBAcGFyYW0ge251bWJlcn0gICAgICBjb2xzXHJcblx0XHQgKiBAcGFyYW0geyd0b3AnfCdib3R0b20nfSBbaW5zZXJ0X3Bvcz0nYm90dG9tJ10gIC8vIE5FV1xyXG5cdFx0ICovXHJcblx0XHRhZGRfc2VjdGlvbihjb250YWluZXIsIGNvbHMsIGluc2VydF9wb3MgPSAnYm90dG9tJykge1xyXG5cdFx0XHRjb25zdCBiID0gdGhpcy5idWlsZGVyO1xyXG5cdFx0XHRjb2xzICAgID0gTWF0aC5tYXgoIDEsIHBhcnNlSW50KCBjb2xzLCAxMCApIHx8IDEgKTtcclxuXHJcblx0XHRcdGNvbnN0IHNlY3Rpb24gPSBDb3JlLldQQkNfRm9ybV9CdWlsZGVyX0hlbHBlci5jcmVhdGVfZWxlbWVudCggJ2RpdicsICd3cGJjX2JmYl9fc2VjdGlvbicgKTtcclxuXHRcdFx0c2VjdGlvbi5zZXRBdHRyaWJ1dGUoICdkYXRhLWlkJywgYHNlY3Rpb24tJHsrK2Iuc2VjdGlvbl9jb3VudGVyfS0ke0RhdGUubm93KCl9YCApO1xyXG5cdFx0XHRzZWN0aW9uLnNldEF0dHJpYnV0ZSggJ2RhdGEtdWlkJywgYHMtJHsrK2IuX3VpZF9jb3VudGVyfS0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZyggMzYgKS5zbGljZSggMiwgNyApfWAgKTtcclxuXHRcdFx0c2VjdGlvbi5zZXRBdHRyaWJ1dGUoICdkYXRhLXR5cGUnLCAnc2VjdGlvbicgKTtcclxuXHRcdFx0c2VjdGlvbi5zZXRBdHRyaWJ1dGUoICdkYXRhLWxhYmVsJywgJ1NlY3Rpb24nICk7XHJcblx0XHRcdHNlY3Rpb24uc2V0QXR0cmlidXRlKCAnZGF0YS1jb2x1bW5zJywgU3RyaW5nKCBjb2xzICkgKTtcclxuXHRcdFx0Ly8gRG8gbm90IHBlcnNpc3Qgb3Igc2VlZCBwZXItY29sdW1uIHN0eWxlcyBieSBkZWZhdWx0IChvcHQtaW4gdmlhIGluc3BlY3RvcikuXHJcblxyXG5cdFx0XHRjb25zdCByb3cgPSBDb3JlLldQQkNfRm9ybV9CdWlsZGVyX0hlbHBlci5jcmVhdGVfZWxlbWVudCggJ2RpdicsICd3cGJjX2JmYl9fcm93IHdwYmNfX3JvdycgKTtcclxuXHRcdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgY29sczsgaSsrICkge1xyXG5cdFx0XHRcdGNvbnN0IGNvbCAgICAgICAgICAgPSBDb3JlLldQQkNfRm9ybV9CdWlsZGVyX0hlbHBlci5jcmVhdGVfZWxlbWVudCggJ2RpdicsICd3cGJjX2JmYl9fY29sdW1uIHdwYmNfX2ZpZWxkJyApO1xyXG5cdFx0XHRcdGNvbC5zdHlsZS5mbGV4QmFzaXMgPSAoMTAwIC8gY29scykgKyAnJSc7XHJcblx0XHRcdFx0Ly8gTm8gZGVmYXVsdCBDU1MgdmFycyBoZXJlOyByZWFsIGNvbHVtbnMgcmVtYWluIHVuYWZmZWN0ZWQgdW50aWwgdXNlciBhY3RpdmF0ZXMgc3R5bGVzLlxyXG5cdFx0XHRcdGIuaW5pdF9zb3J0YWJsZT8uKCBjb2wgKTtcclxuXHRcdFx0XHRyb3cuYXBwZW5kQ2hpbGQoIGNvbCApO1xyXG5cdFx0XHRcdGlmICggaSA8IGNvbHMgLSAxICkge1xyXG5cdFx0XHRcdFx0Y29uc3QgcmVzaXplciA9IENvcmUuV1BCQ19Gb3JtX0J1aWxkZXJfSGVscGVyLmNyZWF0ZV9lbGVtZW50KCAnZGl2JywgJ3dwYmNfYmZiX19jb2x1bW4tcmVzaXplcicgKTtcclxuXHRcdFx0XHRcdHJlc2l6ZXIuYWRkRXZlbnRMaXN0ZW5lciggJ21vdXNlZG93bicsIGIuaW5pdF9yZXNpemVfaGFuZGxlciApO1xyXG5cdFx0XHRcdFx0cm93LmFwcGVuZENoaWxkKCByZXNpemVyICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdHNlY3Rpb24uYXBwZW5kQ2hpbGQoIHJvdyApO1xyXG5cdFx0XHRiLmxheW91dC5zZXRfZXF1YWxfYmFzZXMoIHJvdywgYi5jb2xfZ2FwX3BlcmNlbnQgKTtcclxuXHRcdFx0Yi5hZGRfb3ZlcmxheV90b29sYmFyKCBzZWN0aW9uICk7XHJcblx0XHRcdHNlY3Rpb24uc2V0QXR0cmlidXRlKCAndGFiaW5kZXgnLCAnMCcgKTtcclxuXHRcdFx0dGhpcy5pbml0X2FsbF9uZXN0ZWRfc29ydGFibGVzKCBzZWN0aW9uICk7XHJcblxyXG5cdFx0XHQvLyBJbnNlcnRpb24gcG9saWN5OiB0b3AgfCBib3R0b20uXHJcblx0XHRcdGlmICggaW5zZXJ0X3BvcyA9PT0gJ3RvcCcgJiYgY29udGFpbmVyLmZpcnN0RWxlbWVudENoaWxkICkge1xyXG5cdFx0XHRcdGNvbnRhaW5lci5pbnNlcnRCZWZvcmUoIHNlY3Rpb24sIGNvbnRhaW5lci5maXJzdEVsZW1lbnRDaGlsZCApO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGNvbnRhaW5lci5hcHBlbmRDaGlsZCggc2VjdGlvbiApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gc2VjdGlvbl9kYXRhXHJcblx0XHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBjb250YWluZXJcclxuXHRcdCAqIEByZXR1cm5zIHtIVE1MRWxlbWVudH0gVGhlIHJlYnVpbHQgc2VjdGlvbiBlbGVtZW50LlxyXG5cdFx0ICovXHJcblx0XHRyZWJ1aWxkX3NlY3Rpb24oc2VjdGlvbl9kYXRhLCBjb250YWluZXIpIHtcclxuXHRcdFx0Y29uc3QgYiAgICAgICAgID0gdGhpcy5idWlsZGVyO1xyXG5cdFx0XHRjb25zdCBjb2xzX2RhdGEgPSBBcnJheS5pc0FycmF5KCBzZWN0aW9uX2RhdGE/LmNvbHVtbnMgKSA/IHNlY3Rpb25fZGF0YS5jb2x1bW5zIDogW107XHJcblx0XHRcdHRoaXMuYWRkX3NlY3Rpb24oIGNvbnRhaW5lciwgY29sc19kYXRhLmxlbmd0aCB8fCAxICk7XHJcblx0XHRcdGNvbnN0IHNlY3Rpb24gPSBjb250YWluZXIubGFzdEVsZW1lbnRDaGlsZDtcclxuXHRcdFx0aWYgKCAhc2VjdGlvbi5kYXRhc2V0LnVpZCApIHtcclxuXHRcdFx0XHRzZWN0aW9uLnNldEF0dHJpYnV0ZSggJ2RhdGEtdWlkJywgYHMtJHsrK2IuX3VpZF9jb3VudGVyfS0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZyggMzYgKS5zbGljZSggMiwgNyApfWAgKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRzZWN0aW9uLnNldEF0dHJpYnV0ZSggJ2RhdGEtaWQnLCBzZWN0aW9uX2RhdGE/LmlkIHx8IGBzZWN0aW9uLSR7KytiLnNlY3Rpb25fY291bnRlcn0tJHtEYXRlLm5vdygpfWAgKTtcclxuXHRcdFx0c2VjdGlvbi5zZXRBdHRyaWJ1dGUoICdkYXRhLXR5cGUnLCAnc2VjdGlvbicgKTtcclxuXHRcdFx0c2VjdGlvbi5zZXRBdHRyaWJ1dGUoICdkYXRhLWxhYmVsJywgc2VjdGlvbl9kYXRhPy5sYWJlbCB8fCAnU2VjdGlvbicgKTtcclxuXHRcdFx0c2VjdGlvbi5zZXRBdHRyaWJ1dGUoICdkYXRhLWNvbHVtbnMnLCBTdHJpbmcoIChzZWN0aW9uX2RhdGE/LmNvbHVtbnMgfHwgW10pLmxlbmd0aCB8fCAxICkgKTtcclxuXHRcdFx0Ly8gUGVyc2lzdGVkIGF0dHJpYnV0ZXNcclxuXHRcdFx0aWYgKCBzZWN0aW9uX2RhdGE/Lmh0bWxfaWQgKSB7XHJcblx0XHRcdFx0c2VjdGlvbi5zZXRBdHRyaWJ1dGUoICdkYXRhLWh0bWxfaWQnLCBTdHJpbmcoIHNlY3Rpb25fZGF0YS5odG1sX2lkICkgKTtcclxuXHRcdFx0XHQvLyBnaXZlIHRoZSBjb250YWluZXIgYSByZWFsIGlkIHNvIGFuY2hvcnMvQ1NTIGNhbiB0YXJnZXQgaXRcclxuXHRcdFx0XHRzZWN0aW9uLmlkID0gU3RyaW5nKCBzZWN0aW9uX2RhdGEuaHRtbF9pZCApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBORVc6IHJlc3RvcmUgcGVyc2lzdGVkIHBlci1jb2x1bW4gc3R5bGVzIChyYXcgSlNPTiBzdHJpbmcpLlxyXG5cdFx0XHRpZiAoIHNlY3Rpb25fZGF0YT8uY29sX3N0eWxlcyAhPSBudWxsICkge1xyXG5cdFx0XHRcdGNvbnN0IGpzb24gPSBTdHJpbmcoIHNlY3Rpb25fZGF0YS5jb2xfc3R5bGVzICk7XHJcblx0XHRcdFx0c2VjdGlvbi5zZXRBdHRyaWJ1dGUoICdkYXRhLWNvbF9zdHlsZXMnLCBqc29uICk7XHJcblx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdHNlY3Rpb24uZGF0YXNldC5jb2xfc3R5bGVzID0ganNvbjtcclxuXHRcdFx0XHR9IGNhdGNoICggX2UgKSB7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdC8vIChObyByZW5kZXJfcHJldmlldygpIGNhbGwgaGVyZSBvbiBwdXJwb3NlOiBzZWN0aW9uc+KAmSBidWlsZGVyIERPTSB1c2VzIC53cGJjX2JmYl9fcm93Ly53cGJjX2JmYl9fY29sdW1uLilcclxuXHJcblxyXG5cdFx0XHRpZiAoIHNlY3Rpb25fZGF0YT8uY3NzY2xhc3MgKSB7XHJcblx0XHRcdFx0c2VjdGlvbi5zZXRBdHRyaWJ1dGUoICdkYXRhLWNzc2NsYXNzJywgU3RyaW5nKCBzZWN0aW9uX2RhdGEuY3NzY2xhc3MgKSApO1xyXG5cdFx0XHRcdC8vIGtlZXAgY29yZSBjbGFzc2VzLCB0aGVuIGFkZCBjdXN0b20gY2xhc3MoZXMpXHJcblx0XHRcdFx0U3RyaW5nKCBzZWN0aW9uX2RhdGEuY3NzY2xhc3MgKS5zcGxpdCggL1xccysvICkuZmlsdGVyKCBCb29sZWFuICkuZm9yRWFjaCggY2xzID0+IHNlY3Rpb24uY2xhc3NMaXN0LmFkZCggY2xzICkgKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Y29uc3Qgcm93ID0gc2VjdGlvbi5xdWVyeVNlbGVjdG9yKCAnLndwYmNfYmZiX19yb3cnICk7XHJcblx0XHRcdC8vIERlbGVnYXRlIHBhcnNpbmcgKyBhY3RpdmF0aW9uICsgYXBwbGljYXRpb24gdG8gdGhlIENvbHVtbiBTdHlsZXMgc2VydmljZS5cclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRjb25zdCBqc29uID0gc2VjdGlvbi5nZXRBdHRyaWJ1dGUoICdkYXRhLWNvbF9zdHlsZXMnIClcclxuXHRcdFx0XHRcdHx8IChzZWN0aW9uLmRhdGFzZXQgPyAoc2VjdGlvbi5kYXRhc2V0LmNvbF9zdHlsZXMgfHwgJycpIDogJycpO1xyXG5cdFx0XHRcdGNvbnN0IGFyciAgPSBVSS5XUEJDX0JGQl9Db2x1bW5fU3R5bGVzLnBhcnNlX2NvbF9zdHlsZXMoIGpzb24gKTtcclxuXHRcdFx0XHRVSS5XUEJDX0JGQl9Db2x1bW5fU3R5bGVzLmFwcGx5KCBzZWN0aW9uLCBhcnIgKTtcclxuXHRcdFx0fSBjYXRjaCAoIF9lICkge1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRjb2xzX2RhdGEuZm9yRWFjaCggKGNvbF9kYXRhLCBpbmRleCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IGNvbHVtbnNfb25seSAgPSByb3cucXVlcnlTZWxlY3RvckFsbCggJzpzY29wZSA+IC53cGJjX2JmYl9fY29sdW1uJyApO1xyXG5cdFx0XHRcdGNvbnN0IGNvbCAgICAgICAgICAgPSBjb2x1bW5zX29ubHlbaW5kZXhdO1xyXG5cdFx0XHRcdGNvbC5zdHlsZS5mbGV4QmFzaXMgPSBjb2xfZGF0YS53aWR0aCB8fCAnMTAwJSc7XHJcblx0XHRcdFx0KGNvbF9kYXRhLml0ZW1zIHx8IFtdKS5mb3JFYWNoKCAoaXRlbSkgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKCAhaXRlbSB8fCAhaXRlbS50eXBlICkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRpZiAoIGl0ZW0udHlwZSA9PT0gJ2ZpZWxkJyApIHtcclxuXHRcdFx0XHRcdFx0Y29uc3QgZWwgPSBiLmJ1aWxkX2ZpZWxkKCBpdGVtLmRhdGEgKTtcclxuXHRcdFx0XHRcdFx0aWYgKCBlbCApIHtcclxuXHRcdFx0XHRcdFx0XHRjb2wuYXBwZW5kQ2hpbGQoIGVsICk7XHJcblx0XHRcdFx0XHRcdFx0Yi50cmlnZ2VyX2ZpZWxkX2Ryb3BfY2FsbGJhY2soIGVsLCAnbG9hZCcgKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRpZiAoIGl0ZW0udHlwZSA9PT0gJ3NlY3Rpb24nICkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnJlYnVpbGRfc2VjdGlvbiggaXRlbS5kYXRhLCBjb2wgKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9ICk7XHJcblx0XHRcdH0gKTtcclxuXHRcdFx0Y29uc3QgY29tcHV0ZWQgPSBiLmxheW91dC5jb21wdXRlX2VmZmVjdGl2ZV9iYXNlc19mcm9tX3Jvdyggcm93LCBiLmNvbF9nYXBfcGVyY2VudCApO1xyXG5cdFx0XHRiLmxheW91dC5hcHBseV9iYXNlc190b19yb3coIHJvdywgY29tcHV0ZWQuYmFzZXMgKTtcclxuXHRcdFx0dGhpcy5pbml0X2FsbF9uZXN0ZWRfc29ydGFibGVzKCBzZWN0aW9uICk7XHJcblxyXG5cdFx0XHQvLyBORVc6IHJldGFnIFVJRHMgZmlyc3QgKHNvIHVuaXF1ZW5lc3MgY2hlY2tzIGRvbid0IGV4Y2x1ZGUgb3JpZ2luYWxzKSwgdGhlbiBkZWR1cGUgYWxsIGtleXMuXHJcblx0XHRcdHRoaXMuX3JldGFnX3VpZHNfaW5fc3VidHJlZSggc2VjdGlvbiApO1xyXG5cdFx0XHR0aGlzLl9kZWR1cGVfc3VidHJlZV9zdHJpY3QoIHNlY3Rpb24gKTtcclxuXHRcdFx0cmV0dXJuIHNlY3Rpb247XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGNvbnRhaW5lciAqL1xyXG5cdFx0aW5pdF9hbGxfbmVzdGVkX3NvcnRhYmxlcyhjb250YWluZXIpIHtcclxuXHRcdFx0Y29uc3QgYiA9IHRoaXMuYnVpbGRlcjtcclxuXHRcdFx0aWYgKCBjb250YWluZXIuY2xhc3NMaXN0LmNvbnRhaW5zKCAnd3BiY19iZmJfX2Zvcm1fcHJldmlld19zZWN0aW9uX2NvbnRhaW5lcicgKSApIHtcclxuXHRcdFx0XHR0aGlzLmluaXRfc2VjdGlvbl9zb3J0YWJsZSggY29udGFpbmVyICk7XHJcblx0XHRcdH1cclxuXHRcdFx0Y29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoICcud3BiY19iZmJfX3NlY3Rpb24nICkuZm9yRWFjaCggKHNlY3Rpb24pID0+IHtcclxuXHRcdFx0XHRzZWN0aW9uLnF1ZXJ5U2VsZWN0b3JBbGwoICcud3BiY19iZmJfX2NvbHVtbicgKS5mb3JFYWNoKCAoY29sKSA9PiB7XHJcblx0XHRcdFx0XHR0aGlzLmluaXRfc2VjdGlvbl9zb3J0YWJsZSggY29sICk7XHJcblx0XHRcdFx0fSApO1xyXG5cdFx0XHR9ICk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGNvbnRhaW5lciAqL1xyXG5cdFx0aW5pdF9zZWN0aW9uX3NvcnRhYmxlKGNvbnRhaW5lcikge1xyXG5cdFx0XHRjb25zdCBiID0gdGhpcy5idWlsZGVyO1xyXG5cdFx0XHRpZiAoICFjb250YWluZXIgKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblx0XHRcdGNvbnN0IGlzX2NvbHVtbiAgICA9IGNvbnRhaW5lci5jbGFzc0xpc3QuY29udGFpbnMoICd3cGJjX2JmYl9fY29sdW1uJyApO1xyXG5cdFx0XHRjb25zdCBpc190b3BfbGV2ZWwgPSBjb250YWluZXIuY2xhc3NMaXN0LmNvbnRhaW5zKCAnd3BiY19iZmJfX2Zvcm1fcHJldmlld19zZWN0aW9uX2NvbnRhaW5lcicgKTtcclxuXHRcdFx0aWYgKCAhaXNfY29sdW1uICYmICFpc190b3BfbGV2ZWwgKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblx0XHRcdGIuaW5pdF9zb3J0YWJsZT8uKCBjb250YWluZXIgKTtcclxuXHRcdH1cclxuXHR9O1xyXG5cclxuXHQvKipcclxuXHQgKiBTZXJpYWxpemF0aW9uIGFuZCBkZXNlcmlhbGl6YXRpb24gb2YgcGFnZXMvc2VjdGlvbnMvZmllbGRzLlxyXG5cdCAqL1xyXG5cdFVJLldQQkNfQkZCX1N0cnVjdHVyZV9JTyA9IGNsYXNzIGV4dGVuZHMgVUkuV1BCQ19CRkJfTW9kdWxlIHtcclxuXHRcdGluaXQoKSB7XHJcblx0XHRcdHRoaXMuYnVpbGRlci5nZXRfc3RydWN0dXJlICAgICAgICA9ICgpID0+IHRoaXMuc2VyaWFsaXplKCk7XHJcblx0XHRcdHRoaXMuYnVpbGRlci5sb2FkX3NhdmVkX3N0cnVjdHVyZSA9IChzLCBvcHRzKSA9PiB0aGlzLmRlc2VyaWFsaXplKCBzLCBvcHRzICk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqIEByZXR1cm5zIHtBcnJheX0gKi9cclxuXHRcdHNlcmlhbGl6ZSgpIHtcclxuXHRcdFx0Y29uc3QgYiA9IHRoaXMuYnVpbGRlcjtcclxuXHRcdFx0dGhpcy5fbm9ybWFsaXplX2lkcygpO1xyXG5cdFx0XHR0aGlzLl9ub3JtYWxpemVfbmFtZXMoKTtcclxuXHRcdFx0Y29uc3QgcGFnZXMgPSBbXTtcclxuXHRcdFx0Yi5wYWdlc19jb250YWluZXIucXVlcnlTZWxlY3RvckFsbCggJy53cGJjX2JmYl9fcGFuZWwtLXByZXZpZXcnICkuZm9yRWFjaCggKHBhZ2VfZWwsIHBhZ2VfaW5kZXgpID0+IHtcclxuXHRcdFx0XHRjb25zdCBjb250YWluZXIgPSBwYWdlX2VsLnF1ZXJ5U2VsZWN0b3IoICcud3BiY19iZmJfX2Zvcm1fcHJldmlld19zZWN0aW9uX2NvbnRhaW5lcicgKTtcclxuXHRcdFx0XHRjb25zdCBjb250ZW50ICAgPSBbXTtcclxuXHRcdFx0XHRpZiAoICFjb250YWluZXIgKSB7XHJcblx0XHRcdFx0XHRwYWdlcy5wdXNoKCB7IHBhZ2U6IHBhZ2VfaW5kZXggKyAxLCBjb250ZW50IH0gKTtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Y29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoICc6c2NvcGUgPiAqJyApLmZvckVhY2goIChjaGlsZCkgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKCBjaGlsZC5jbGFzc0xpc3QuY29udGFpbnMoICd3cGJjX2JmYl9fc2VjdGlvbicgKSApIHtcclxuXHRcdFx0XHRcdFx0Y29udGVudC5wdXNoKCB7IHR5cGU6ICdzZWN0aW9uJywgZGF0YTogdGhpcy5zZXJpYWxpemVfc2VjdGlvbiggY2hpbGQgKSB9ICk7XHJcblx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGlmICggY2hpbGQuY2xhc3NMaXN0LmNvbnRhaW5zKCAnd3BiY19iZmJfX2ZpZWxkJyApICkge1xyXG5cdFx0XHRcdFx0XHRpZiAoIGNoaWxkLmNsYXNzTGlzdC5jb250YWlucyggJ2lzLWludmFsaWQnICkgKSB7XHJcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGNvbnN0IGZfZGF0YSA9IENvcmUuV1BCQ19Gb3JtX0J1aWxkZXJfSGVscGVyLmdldF9hbGxfZGF0YV9hdHRyaWJ1dGVzKCBjaGlsZCApO1xyXG5cdFx0XHRcdFx0XHQvLyBEcm9wIGVwaGVtZXJhbC9lZGl0b3Itb25seSBmbGFnc1xyXG5cdFx0XHRcdFx0XHRbICd1aWQnLCAnZnJlc2gnLCAnYXV0b25hbWUnLCAnd2FzX2xvYWRlZCcsICduYW1lX3VzZXJfdG91Y2hlZCcgXVxyXG5cdFx0XHRcdFx0XHRcdC5mb3JFYWNoKCBrID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdGlmICggayBpbiBmX2RhdGEgKSBkZWxldGUgZl9kYXRhW2tdO1xyXG5cdFx0XHRcdFx0XHRcdH0gKTtcclxuXHRcdFx0XHRcdFx0Y29udGVudC5wdXNoKCB7IHR5cGU6ICdmaWVsZCcsIGRhdGE6IGZfZGF0YSB9ICk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSApO1xyXG5cdFx0XHRcdHBhZ2VzLnB1c2goIHsgcGFnZTogcGFnZV9pbmRleCArIDEsIGNvbnRlbnQgfSApO1xyXG5cdFx0XHR9ICk7XHJcblx0XHRcdHJldHVybiBwYWdlcztcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHNlY3Rpb25fZWxcclxuXHRcdCAqIEByZXR1cm5zIHt7aWQ6c3RyaW5nLGxhYmVsOnN0cmluZyxodG1sX2lkOnN0cmluZyxjc3NjbGFzczpzdHJpbmcsY29sX3N0eWxlczpzdHJpbmcsY29sdW1uczpBcnJheX19XHJcblx0XHQgKi9cclxuXHRcdHNlcmlhbGl6ZV9zZWN0aW9uKHNlY3Rpb25fZWwpIHtcclxuXHRcdFx0Y29uc3Qgcm93ID0gc2VjdGlvbl9lbC5xdWVyeVNlbGVjdG9yKCAnOnNjb3BlID4gLndwYmNfYmZiX19yb3cnICk7XHJcblxyXG5cdFx0XHQvLyBORVc6IHJlYWQgcGVyLWNvbHVtbiBzdHlsZXMgZnJvbSBkYXRhc2V0L2F0dHJpYnV0ZXMgKHVuZGVyc2NvcmUgJiBoeXBoZW4pXHJcblx0XHRcdHZhciBjb2xfc3R5bGVzX3JhdyA9XHJcblx0XHRcdFx0XHRzZWN0aW9uX2VsLmdldEF0dHJpYnV0ZSggJ2RhdGEtY29sX3N0eWxlcycgKSB8fFxyXG5cdFx0XHRcdFx0KHNlY3Rpb25fZWwuZGF0YXNldCA/IChzZWN0aW9uX2VsLmRhdGFzZXQuY29sX3N0eWxlcykgOiAnJykgfHxcclxuXHRcdFx0XHRcdCcnO1xyXG5cclxuXHRcdFx0Y29uc3QgYmFzZSA9IHtcclxuXHRcdFx0XHRpZCAgICAgICAgOiBzZWN0aW9uX2VsLmRhdGFzZXQuaWQsXHJcblx0XHRcdFx0bGFiZWwgICAgIDogc2VjdGlvbl9lbC5kYXRhc2V0LmxhYmVsIHx8ICcnLFxyXG5cdFx0XHRcdGh0bWxfaWQgICA6IHNlY3Rpb25fZWwuZGF0YXNldC5odG1sX2lkIHx8ICcnLFxyXG5cdFx0XHRcdGNzc2NsYXNzICA6IHNlY3Rpb25fZWwuZGF0YXNldC5jc3NjbGFzcyB8fCAnJyxcclxuXHRcdFx0XHRjb2xfc3R5bGVzOiBTdHJpbmcoIGNvbF9zdHlsZXNfcmF3ICkgICAgICAgIC8vIDwtLSBORVc6IGtlZXAgYXMgcmF3IEpTT04gc3RyaW5nXHJcblx0XHRcdH07XHJcblxyXG5cdFx0XHRpZiAoICFyb3cgKSB7XHJcblx0XHRcdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oIHt9LCBiYXNlLCB7IGNvbHVtbnM6IFtdIH0gKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Y29uc3QgY29sdW1ucyA9IFtdO1xyXG5cdFx0XHRyb3cucXVlcnlTZWxlY3RvckFsbCggJzpzY29wZSA+IC53cGJjX2JmYl9fY29sdW1uJyApLmZvckVhY2goIGZ1bmN0aW9uIChjb2wpIHtcclxuXHRcdFx0XHRjb25zdCB3aWR0aCA9IGNvbC5zdHlsZS5mbGV4QmFzaXMgfHwgJzEwMCUnO1xyXG5cdFx0XHRcdGNvbnN0IGl0ZW1zID0gW107XHJcblx0XHRcdFx0QXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbCggY29sLmNoaWxkcmVuLCBmdW5jdGlvbiAoY2hpbGQpIHtcclxuXHRcdFx0XHRcdGlmICggY2hpbGQuY2xhc3NMaXN0LmNvbnRhaW5zKCAnd3BiY19iZmJfX3NlY3Rpb24nICkgKSB7XHJcblx0XHRcdFx0XHRcdGl0ZW1zLnB1c2goIHsgdHlwZTogJ3NlY3Rpb24nLCBkYXRhOiB0aGlzLnNlcmlhbGl6ZV9zZWN0aW9uKCBjaGlsZCApIH0gKTtcclxuXHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKCBjaGlsZC5jbGFzc0xpc3QuY29udGFpbnMoICd3cGJjX2JmYl9fZmllbGQnICkgKSB7XHJcblx0XHRcdFx0XHRcdGlmICggY2hpbGQuY2xhc3NMaXN0LmNvbnRhaW5zKCAnaXMtaW52YWxpZCcgKSApIHtcclxuXHRcdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0Y29uc3QgZl9kYXRhID0gQ29yZS5XUEJDX0Zvcm1fQnVpbGRlcl9IZWxwZXIuZ2V0X2FsbF9kYXRhX2F0dHJpYnV0ZXMoIGNoaWxkICk7XHJcblx0XHRcdFx0XHRcdFsgJ3VpZCcsICdmcmVzaCcsICdhdXRvbmFtZScsICd3YXNfbG9hZGVkJywgJ25hbWVfdXNlcl90b3VjaGVkJyBdLmZvckVhY2goIGZ1bmN0aW9uIChrKSB7XHJcblx0XHRcdFx0XHRcdFx0aWYgKCBrIGluIGZfZGF0YSApIHtcclxuXHRcdFx0XHRcdFx0XHRcdGRlbGV0ZSBmX2RhdGFba107XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9ICk7XHJcblx0XHRcdFx0XHRcdGl0ZW1zLnB1c2goIHsgdHlwZTogJ2ZpZWxkJywgZGF0YTogZl9kYXRhIH0gKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9LmJpbmQoIHRoaXMgKSApO1xyXG5cdFx0XHRcdGNvbHVtbnMucHVzaCggeyB3aWR0aDogd2lkdGgsIGl0ZW1zOiBpdGVtcyB9ICk7XHJcblx0XHRcdH0uYmluZCggdGhpcyApICk7XHJcblxyXG5cdFx0XHQvLyBDbGFtcCBwZXJzaXN0ZWQgY29sX3N0eWxlcyB0byB0aGUgYWN0dWFsIG51bWJlciBvZiBjb2x1bW5zIG9uIFNhdmUuXHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0Y29uc3QgY29sQ291bnQgPSBjb2x1bW5zLmxlbmd0aDtcclxuXHRcdFx0XHRjb25zdCByYXcgICAgICA9IFN0cmluZyggY29sX3N0eWxlc19yYXcgfHwgJycgKS50cmltKCk7XHJcblxyXG5cdFx0XHRcdGlmICggcmF3ICkge1xyXG5cdFx0XHRcdFx0bGV0IGFyciA9IFtdO1xyXG5cdFx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdFx0Y29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZSggcmF3ICk7XHJcblx0XHRcdFx0XHRcdGFyciAgICAgICAgICA9IEFycmF5LmlzQXJyYXkoIHBhcnNlZCApID8gcGFyc2VkIDogKHBhcnNlZCAmJiBBcnJheS5pc0FycmF5KCBwYXJzZWQuY29sdW1ucyApID8gcGFyc2VkLmNvbHVtbnMgOiBbXSk7XHJcblx0XHRcdFx0XHR9IGNhdGNoICggX2UgKSB7XHJcblx0XHRcdFx0XHRcdGFyciA9IFtdO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmICggY29sQ291bnQgPD0gMCApIHtcclxuXHRcdFx0XHRcdFx0YmFzZS5jb2xfc3R5bGVzID0gJ1tdJztcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdGlmICggYXJyLmxlbmd0aCA+IGNvbENvdW50ICkgYXJyLmxlbmd0aCA9IGNvbENvdW50O1xyXG5cdFx0XHRcdFx0XHR3aGlsZSAoIGFyci5sZW5ndGggPCBjb2xDb3VudCApIGFyci5wdXNoKCB7fSApO1xyXG5cdFx0XHRcdFx0XHRiYXNlLmNvbF9zdHlsZXMgPSBKU09OLnN0cmluZ2lmeSggYXJyICk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGJhc2UuY29sX3N0eWxlcyA9ICcnO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBjYXRjaCAoIF9lICkge1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbigge30sIGJhc2UsIHsgY29sdW1uczogY29sdW1ucyB9ICk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBAcGFyYW0ge0FycmF5fSBzdHJ1Y3R1cmVcclxuXHRcdCAqIEBwYXJhbSB7e2RlZmVySWZUeXBpbmc/OiBib29sZWFufX0gW29wdHMgPSB7fV1cclxuXHRcdCAqL1xyXG5cdFx0ZGVzZXJpYWxpemUoc3RydWN0dXJlLCB7IGRlZmVySWZUeXBpbmcgPSB0cnVlIH0gPSB7fSkge1xyXG5cdFx0XHRjb25zdCBiID0gdGhpcy5idWlsZGVyO1xyXG5cdFx0XHRpZiAoIGRlZmVySWZUeXBpbmcgJiYgdGhpcy5faXNfdHlwaW5nX2luX2luc3BlY3RvcigpICkge1xyXG5cdFx0XHRcdGNsZWFyVGltZW91dCggdGhpcy5fZGVmZXJfdGltZXIgKTtcclxuXHRcdFx0XHR0aGlzLl9kZWZlcl90aW1lciA9IHNldFRpbWVvdXQoICgpID0+IHtcclxuXHRcdFx0XHRcdHRoaXMuZGVzZXJpYWxpemUoIHN0cnVjdHVyZSwgeyBkZWZlcklmVHlwaW5nOiBmYWxzZSB9ICk7XHJcblx0XHRcdFx0fSwgMTUwICk7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblx0XHRcdGIucGFnZXNfY29udGFpbmVyLmlubmVySFRNTCA9ICcnO1xyXG5cdFx0XHRiLnBhZ2VfY291bnRlciAgICAgICAgICAgICAgPSAwO1xyXG5cdFx0XHQoc3RydWN0dXJlIHx8IFtdKS5mb3JFYWNoKCAocGFnZV9kYXRhKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgcGFnZV9lbCAgICAgICAgICAgICAgID0gYi5wYWdlc19zZWN0aW9ucy5hZGRfcGFnZSggeyBzY3JvbGw6IGZhbHNlIH0gKTtcclxuXHRcdFx0XHRjb25zdCBzZWN0aW9uX2NvbnRhaW5lciAgICAgPSBwYWdlX2VsLnF1ZXJ5U2VsZWN0b3IoICcud3BiY19iZmJfX2Zvcm1fcHJldmlld19zZWN0aW9uX2NvbnRhaW5lcicgKTtcclxuXHRcdFx0XHRzZWN0aW9uX2NvbnRhaW5lci5pbm5lckhUTUwgPSAnJztcclxuXHRcdFx0XHRiLmluaXRfc2VjdGlvbl9zb3J0YWJsZT8uKCBzZWN0aW9uX2NvbnRhaW5lciApO1xyXG5cdFx0XHRcdChwYWdlX2RhdGEuY29udGVudCB8fCBbXSkuZm9yRWFjaCggKGl0ZW0pID0+IHtcclxuXHRcdFx0XHRcdGlmICggaXRlbS50eXBlID09PSAnc2VjdGlvbicgKSB7XHJcblx0XHRcdFx0XHRcdC8vIE5vdyByZXR1cm5zIHRoZSBlbGVtZW50OyBhdHRyaWJ1dGVzIChpbmNsLiBjb2xfc3R5bGVzKSBhcmUgYXBwbGllZCBpbnNpZGUgcmVidWlsZC5cclxuXHRcdFx0XHRcdFx0Yi5wYWdlc19zZWN0aW9ucy5yZWJ1aWxkX3NlY3Rpb24oIGl0ZW0uZGF0YSwgc2VjdGlvbl9jb250YWluZXIgKTtcclxuXHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKCBpdGVtLnR5cGUgPT09ICdmaWVsZCcgKSB7XHJcblx0XHRcdFx0XHRcdGNvbnN0IGVsID0gYi5idWlsZF9maWVsZCggaXRlbS5kYXRhICk7XHJcblx0XHRcdFx0XHRcdGlmICggZWwgKSB7XHJcblx0XHRcdFx0XHRcdFx0c2VjdGlvbl9jb250YWluZXIuYXBwZW5kQ2hpbGQoIGVsICk7XHJcblx0XHRcdFx0XHRcdFx0Yi50cmlnZ2VyX2ZpZWxkX2Ryb3BfY2FsbGJhY2soIGVsLCAnbG9hZCcgKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0gKTtcclxuXHRcdFx0fSApO1xyXG5cdFx0XHRiLnVzYWdlPy51cGRhdGVfcGFsZXR0ZV91aT8uKCk7XHJcblx0XHRcdGIuYnVzLmVtaXQoIENvcmUuV1BCQ19CRkJfRXZlbnRzLlNUUlVDVFVSRV9MT0FERUQsIHsgc3RydWN0dXJlIH0gKTtcclxuXHRcdH1cclxuXHJcblx0XHRfbm9ybWFsaXplX2lkcygpIHtcclxuXHRcdFx0Y29uc3QgYiA9IHRoaXMuYnVpbGRlcjtcclxuXHRcdFx0Yi5wYWdlc19jb250YWluZXIucXVlcnlTZWxlY3RvckFsbCggJy53cGJjX2JmYl9fcGFuZWwtLXByZXZpZXcgLndwYmNfYmZiX19maWVsZDpub3QoLmlzLWludmFsaWQpJyApLmZvckVhY2goIChlbCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IGRhdGEgPSBDb3JlLldQQkNfRm9ybV9CdWlsZGVyX0hlbHBlci5nZXRfYWxsX2RhdGFfYXR0cmlidXRlcyggZWwgKTtcclxuXHRcdFx0XHRjb25zdCB3YW50ID0gQ29yZS5XUEJDX0JGQl9TYW5pdGl6ZS5zYW5pdGl6ZV9odG1sX2lkKCBkYXRhLmlkIHx8ICcnICkgfHwgJ2ZpZWxkJztcclxuXHRcdFx0XHRjb25zdCB1bmlxID0gYi5pZC5lbnN1cmVfdW5pcXVlX2ZpZWxkX2lkKCB3YW50LCBlbCApO1xyXG5cdFx0XHRcdGlmICggZGF0YS5pZCAhPT0gdW5pcSApIHtcclxuXHRcdFx0XHRcdGVsLnNldEF0dHJpYnV0ZSggJ2RhdGEtaWQnLCB1bmlxICk7XHJcblx0XHRcdFx0XHRpZiAoIGIucHJldmlld19tb2RlICkge1xyXG5cdFx0XHRcdFx0XHRiLnJlbmRlcl9wcmV2aWV3KCBlbCApO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdF9ub3JtYWxpemVfbmFtZXMoKSB7XHJcblx0XHRcdGNvbnN0IGIgPSB0aGlzLmJ1aWxkZXI7XHJcblx0XHRcdGIucGFnZXNfY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoICcud3BiY19iZmJfX3BhbmVsLS1wcmV2aWV3IC53cGJjX2JmYl9fZmllbGQ6bm90KC5pcy1pbnZhbGlkKScgKS5mb3JFYWNoKCAoZWwpID0+IHtcclxuXHRcdFx0XHRjb25zdCBkYXRhID0gQ29yZS5XUEJDX0Zvcm1fQnVpbGRlcl9IZWxwZXIuZ2V0X2FsbF9kYXRhX2F0dHJpYnV0ZXMoIGVsICk7XHJcblx0XHRcdFx0Y29uc3QgYmFzZSA9IENvcmUuV1BCQ19CRkJfU2FuaXRpemUuc2FuaXRpemVfaHRtbF9uYW1lKCAoZGF0YS5uYW1lICE9IG51bGwpID8gZGF0YS5uYW1lIDogZGF0YS5pZCApIHx8ICdmaWVsZCc7XHJcblx0XHRcdFx0Y29uc3QgdW5pcSA9IGIuaWQuZW5zdXJlX3VuaXF1ZV9maWVsZF9uYW1lKCBiYXNlLCBlbCApO1xyXG5cdFx0XHRcdGlmICggZGF0YS5uYW1lICE9PSB1bmlxICkge1xyXG5cdFx0XHRcdFx0ZWwuc2V0QXR0cmlidXRlKCAnZGF0YS1uYW1lJywgdW5pcSApO1xyXG5cdFx0XHRcdFx0aWYgKCBiLnByZXZpZXdfbW9kZSApIHtcclxuXHRcdFx0XHRcdFx0Yi5yZW5kZXJfcHJldmlldyggZWwgKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKiogQHJldHVybnMge2Jvb2xlYW59ICovXHJcblx0XHRfaXNfdHlwaW5nX2luX2luc3BlY3RvcigpIHtcclxuXHRcdFx0Y29uc3QgaW5zID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICd3cGJjX2JmYl9faW5zcGVjdG9yJyApO1xyXG5cdFx0XHRyZXR1cm4gISEoaW5zICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgJiYgaW5zLmNvbnRhaW5zKCBkb2N1bWVudC5hY3RpdmVFbGVtZW50ICkpO1xyXG5cdFx0fVxyXG5cdH07XHJcblxyXG5cdC8qKlxyXG5cdCAqIE1pbmltYWwsIHN0YW5kYWxvbmUgZ3VhcmQgdGhhdCBlbmZvcmNlcyBwZXItY29sdW1uIG1pbiB3aWR0aHMgYmFzZWQgb24gZmllbGRzJyBkYXRhLW1pbl93aWR0aC5cclxuXHQgKlxyXG5cdCAqIEB0eXBlIHtVSS5XUEJDX0JGQl9NaW5fV2lkdGhfR3VhcmR9XHJcblx0ICovXHJcblx0VUkuV1BCQ19CRkJfTWluX1dpZHRoX0d1YXJkID0gY2xhc3MgZXh0ZW5kcyBVSS5XUEJDX0JGQl9Nb2R1bGUge1xyXG5cclxuXHRcdGNvbnN0cnVjdG9yKGJ1aWxkZXIpIHtcclxuXHRcdFx0c3VwZXIoIGJ1aWxkZXIgKTtcclxuXHRcdFx0dGhpcy5fb25fZmllbGRfYWRkICAgICAgICA9IHRoaXMuX29uX2ZpZWxkX2FkZC5iaW5kKCB0aGlzICk7XHJcblx0XHRcdHRoaXMuX29uX2ZpZWxkX3JlbW92ZSAgICAgPSB0aGlzLl9vbl9maWVsZF9yZW1vdmUuYmluZCggdGhpcyApO1xyXG5cdFx0XHR0aGlzLl9vbl9zdHJ1Y3R1cmVfbG9hZGVkID0gdGhpcy5fb25fc3RydWN0dXJlX2xvYWRlZC5iaW5kKCB0aGlzICk7XHJcblx0XHRcdHRoaXMuX29uX3N0cnVjdHVyZV9jaGFuZ2UgPSB0aGlzLl9vbl9zdHJ1Y3R1cmVfY2hhbmdlLmJpbmQoIHRoaXMgKTtcclxuXHRcdFx0dGhpcy5fb25fd2luZG93X3Jlc2l6ZSAgICA9IHRoaXMuX29uX3dpbmRvd19yZXNpemUuYmluZCggdGhpcyApO1xyXG5cclxuXHRcdFx0dGhpcy5fcGVuZGluZ19yb3dzID0gbmV3IFNldCgpO1xyXG5cdFx0XHR0aGlzLl9wZW5kaW5nX2FsbCAgPSBmYWxzZTtcclxuXHRcdFx0dGhpcy5fcmFmX2lkICAgICAgID0gMDtcclxuXHRcdH1cclxuXHJcblx0XHRpbml0KCkge1xyXG5cdFx0XHRjb25zdCBFViA9IENvcmUuV1BCQ19CRkJfRXZlbnRzO1xyXG5cdFx0XHR0aGlzLmJ1aWxkZXI/LmJ1cz8ub24/LiggRVYuRklFTERfQURELCB0aGlzLl9vbl9maWVsZF9hZGQgKTtcclxuXHRcdFx0dGhpcy5idWlsZGVyPy5idXM/Lm9uPy4oIEVWLkZJRUxEX1JFTU9WRSwgdGhpcy5fb25fZmllbGRfcmVtb3ZlICk7XHJcblx0XHRcdHRoaXMuYnVpbGRlcj8uYnVzPy5vbj8uKCBFVi5TVFJVQ1RVUkVfTE9BREVELCB0aGlzLl9vbl9zdHJ1Y3R1cmVfbG9hZGVkICk7XHJcblx0XHRcdC8vIFJlZnJlc2ggc2VsZWN0aXZlbHkgb24gc3RydWN0dXJlIGNoYW5nZSAoTk9UIG9uIGV2ZXJ5IHByb3AgaW5wdXQpLlxyXG5cdFx0XHR0aGlzLmJ1aWxkZXI/LmJ1cz8ub24/LiggRVYuU1RSVUNUVVJFX0NIQU5HRSwgdGhpcy5fb25fc3RydWN0dXJlX2NoYW5nZSApO1xyXG5cclxuXHRcdFx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoICdyZXNpemUnLCB0aGlzLl9vbl93aW5kb3dfcmVzaXplLCB7IHBhc3NpdmU6IHRydWUgfSApO1xyXG5cdFx0XHR0aGlzLl9zY2hlZHVsZV9yZWZyZXNoX2FsbCgpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGRlc3Ryb3koKSB7XHJcblx0XHRcdGNvbnN0IEVWID0gQ29yZS5XUEJDX0JGQl9FdmVudHM7XHJcblx0XHRcdHRoaXMuYnVpbGRlcj8uYnVzPy5vZmY/LiggRVYuRklFTERfQURELCB0aGlzLl9vbl9maWVsZF9hZGQgKTtcclxuXHRcdFx0dGhpcy5idWlsZGVyPy5idXM/Lm9mZj8uKCBFVi5GSUVMRF9SRU1PVkUsIHRoaXMuX29uX2ZpZWxkX3JlbW92ZSApO1xyXG5cdFx0XHR0aGlzLmJ1aWxkZXI/LmJ1cz8ub2ZmPy4oIEVWLlNUUlVDVFVSRV9MT0FERUQsIHRoaXMuX29uX3N0cnVjdHVyZV9sb2FkZWQgKTtcclxuXHRcdFx0dGhpcy5idWlsZGVyPy5idXM/Lm9mZj8uKCBFVi5TVFJVQ1RVUkVfQ0hBTkdFLCB0aGlzLl9vbl9zdHJ1Y3R1cmVfY2hhbmdlICk7XHJcblx0XHRcdHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCAncmVzaXplJywgdGhpcy5fb25fd2luZG93X3Jlc2l6ZSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdF9vbl9maWVsZF9hZGQoZSkge1xyXG5cdFx0XHR0aGlzLl9zY2hlZHVsZV9yZWZyZXNoX2FsbCgpO1xyXG5cdFx0XHQvLyBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gYmUgbWluaW1hbCB3b3JrIGhlcmUsIGtlZXAgeW91ciByb3ctb25seSB2ZXJzaW9uLlxyXG5cdFx0fVxyXG5cclxuXHRcdF9vbl9maWVsZF9yZW1vdmUoZSkge1xyXG5cdFx0XHRjb25zdCBzcmNfZWwgPSBlPy5kZXRhaWw/LmVsIHx8IG51bGw7XHJcblx0XHRcdGNvbnN0IHJvdyAgICA9IChzcmNfZWwgJiYgc3JjX2VsLmNsb3Nlc3QpID8gc3JjX2VsLmNsb3Nlc3QoICcud3BiY19iZmJfX3JvdycgKSA6IG51bGw7XHJcblx0XHRcdGlmICggcm93ICkge1xyXG5cdFx0XHRcdHRoaXMuX3NjaGVkdWxlX3JlZnJlc2hfcm93KCByb3cgKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHR0aGlzLl9zY2hlZHVsZV9yZWZyZXNoX2FsbCgpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0X29uX3N0cnVjdHVyZV9sb2FkZWQoKSB7XHJcblx0XHRcdHRoaXMuX3NjaGVkdWxlX3JlZnJlc2hfYWxsKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0X29uX3N0cnVjdHVyZV9jaGFuZ2UoZSkge1xyXG5cdFx0XHRjb25zdCByZWFzb24gPSBlPy5kZXRhaWw/LnJlYXNvbiB8fCAnJztcclxuXHRcdFx0Y29uc3Qga2V5ICAgID0gZT8uZGV0YWlsPy5rZXkgfHwgJyc7XHJcblxyXG5cdFx0XHQvLyBJZ25vcmUgbm9pc3kgcHJvcCBjaGFuZ2VzIHRoYXQgZG9uJ3QgYWZmZWN0IG1pbiB3aWR0aHMuXHJcblx0XHRcdGlmICggcmVhc29uID09PSAncHJvcC1jaGFuZ2UnICYmIGtleSAhPT0gJ21pbl93aWR0aCcgKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRjb25zdCBlbCAgPSBlPy5kZXRhaWw/LmVsIHx8IG51bGw7XHJcblx0XHRcdGNvbnN0IHJvdyA9IGVsPy5jbG9zZXN0Py4oICcud3BiY19iZmJfX3JvdycgKSB8fCBudWxsO1xyXG5cdFx0XHRpZiAoIHJvdyApIHtcclxuXHRcdFx0XHR0aGlzLl9zY2hlZHVsZV9yZWZyZXNoX3Jvdyggcm93ICk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0dGhpcy5fc2NoZWR1bGVfcmVmcmVzaF9hbGwoKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdF9vbl93aW5kb3dfcmVzaXplKCkge1xyXG5cdFx0XHR0aGlzLl9zY2hlZHVsZV9yZWZyZXNoX2FsbCgpO1xyXG5cdFx0fVxyXG5cclxuXHRcdF9zY2hlZHVsZV9yZWZyZXNoX3Jvdyhyb3dfZWwpIHtcclxuXHRcdFx0aWYgKCAhcm93X2VsICkgcmV0dXJuO1xyXG5cdFx0XHR0aGlzLl9wZW5kaW5nX3Jvd3MuYWRkKCByb3dfZWwgKTtcclxuXHRcdFx0dGhpcy5fa2lja19yYWYoKTtcclxuXHRcdH1cclxuXHJcblx0XHRfc2NoZWR1bGVfcmVmcmVzaF9hbGwoKSB7XHJcblx0XHRcdHRoaXMuX3BlbmRpbmdfYWxsID0gdHJ1ZTtcclxuXHRcdFx0dGhpcy5fcGVuZGluZ19yb3dzLmNsZWFyKCk7XHJcblx0XHRcdHRoaXMuX2tpY2tfcmFmKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0X2tpY2tfcmFmKCkge1xyXG5cdFx0XHRpZiAoIHRoaXMuX3JhZl9pZCApIHJldHVybjtcclxuXHRcdFx0dGhpcy5fcmFmX2lkID0gKHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHwgc2V0VGltZW91dCkoICgpID0+IHtcclxuXHRcdFx0XHR0aGlzLl9yYWZfaWQgPSAwO1xyXG5cdFx0XHRcdGlmICggdGhpcy5fcGVuZGluZ19hbGwgKSB7XHJcblx0XHRcdFx0XHR0aGlzLl9wZW5kaW5nX2FsbCA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0dGhpcy5yZWZyZXNoX2FsbCgpO1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRjb25zdCByb3dzID0gQXJyYXkuZnJvbSggdGhpcy5fcGVuZGluZ19yb3dzICk7XHJcblx0XHRcdFx0dGhpcy5fcGVuZGluZ19yb3dzLmNsZWFyKCk7XHJcblx0XHRcdFx0cm93cy5mb3JFYWNoKCAocikgPT4gdGhpcy5yZWZyZXNoX3JvdyggciApICk7XHJcblx0XHRcdH0sIDAgKTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0cmVmcmVzaF9hbGwoKSB7XHJcblx0XHRcdHRoaXMuYnVpbGRlcj8ucGFnZXNfY29udGFpbmVyXHJcblx0XHRcdFx0Py5xdWVyeVNlbGVjdG9yQWxsPy4oICcud3BiY19iZmJfX3JvdycgKVxyXG5cdFx0XHRcdD8uZm9yRWFjaD8uKCAocm93KSA9PiB0aGlzLnJlZnJlc2hfcm93KCByb3cgKSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJlZnJlc2hfcm93KHJvd19lbCkge1xyXG5cdFx0XHRpZiAoICFyb3dfZWwgKSByZXR1cm47XHJcblxyXG5cdFx0XHRjb25zdCBjb2xzID0gcm93X2VsLnF1ZXJ5U2VsZWN0b3JBbGwoICc6c2NvcGUgPiAud3BiY19iZmJfX2NvbHVtbicgKTtcclxuXHJcblx0XHRcdC8vIDEpIFJlY2FsY3VsYXRlIGVhY2ggY29sdW1u4oCZcyByZXF1aXJlZCBtaW4gcHggYW5kIHdyaXRlIGl0IHRvIHRoZSBDU1MgdmFyLlxyXG5cdFx0XHRjb2xzLmZvckVhY2goIChjb2wpID0+IHRoaXMuYXBwbHlfY29sX21pbiggY29sICkgKTtcclxuXHJcblx0XHRcdC8vIDIpIEVuZm9yY2UgaXQgYXQgdGhlIENTUyBsZXZlbCByaWdodCBhd2F5IHNvIGxheW91dCBjYW7igJl0IHJlbmRlciBuYXJyb3dlci5cclxuXHRcdFx0Y29scy5mb3JFYWNoKCAoY29sKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgcHggICAgICAgICAgID0gcGFyc2VGbG9hdCggZ2V0Q29tcHV0ZWRTdHlsZSggY29sICkuZ2V0UHJvcGVydHlWYWx1ZSggJy0td3BiYy1jb2wtbWluJyApIHx8ICcwJyApIHx8IDA7XHJcblx0XHRcdFx0Y29sLnN0eWxlLm1pbldpZHRoID0gcHggPiAwID8gTWF0aC5yb3VuZCggcHggKSArICdweCcgOiAnJztcclxuXHRcdFx0fSApO1xyXG5cclxuXHRcdFx0Ly8gMykgTm9ybWFsaXplIGN1cnJlbnQgYmFzZXMgc28gdGhlIHJvdyByZXNwZWN0cyBhbGwgbWlucyB3aXRob3V0IG92ZXJmbG93LlxyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdGNvbnN0IGIgICA9IHRoaXMuYnVpbGRlcjtcclxuXHRcdFx0XHRjb25zdCBncCAgPSBiLmNvbF9nYXBfcGVyY2VudDtcclxuXHRcdFx0XHRjb25zdCBlZmYgPSBiLmxheW91dC5jb21wdXRlX2VmZmVjdGl2ZV9iYXNlc19mcm9tX3Jvdyggcm93X2VsLCBncCApOyAgLy8geyBiYXNlcywgYXZhaWxhYmxlIH1cclxuXHRcdFx0XHQvLyBSZS1maXQgKmN1cnJlbnQqIGJhc2VzIGFnYWluc3QgbWlucyAoc2FtZSBhbGdvcml0aG0gbGF5b3V0IGNoaXBzIHVzZSkuXHJcblx0XHRcdFx0Y29uc3QgZml0dGVkID0gVUkuV1BCQ19CRkJfTGF5b3V0X0NoaXBzLl9maXRfd2VpZ2h0c19yZXNwZWN0aW5nX21pbiggYiwgcm93X2VsLCBlZmYuYmFzZXMgKTtcclxuXHRcdFx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIGZpdHRlZCApICkge1xyXG5cdFx0XHRcdFx0Y29uc3QgY2hhbmdlZCA9IGZpdHRlZC5zb21lKCAodiwgaSkgPT4gTWF0aC5hYnMoIHYgLSBlZmYuYmFzZXNbaV0gKSA+IDAuMDEgKTtcclxuXHRcdFx0XHRcdGlmICggY2hhbmdlZCApIHtcclxuXHRcdFx0XHRcdFx0Yi5sYXlvdXQuYXBwbHlfYmFzZXNfdG9fcm93KCByb3dfZWwsIGZpdHRlZCApO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBjYXRjaCAoIGUgKSB7XHJcblx0XHRcdFx0dy5fd3BiYz8uZGV2Py5lcnJvcj8uKCAnV1BCQ19CRkJfTWluX1dpZHRoX0d1YXJkIC0gcmVmcmVzaF9yb3cnLCBlICk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRhcHBseV9jb2xfbWluKGNvbF9lbCkge1xyXG5cdFx0XHRpZiAoICFjb2xfZWwgKSByZXR1cm47XHJcblx0XHRcdGxldCBtYXhfcHggICAgPSAwO1xyXG5cdFx0XHRjb25zdCBjb2xSZWN0ID0gY29sX2VsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG5cdFx0XHRjb2xfZWwucXVlcnlTZWxlY3RvckFsbCggJzpzY29wZSA+IC53cGJjX2JmYl9fZmllbGQnICkuZm9yRWFjaCggKGZpZWxkKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgcmF3ID0gZmllbGQuZ2V0QXR0cmlidXRlKCAnZGF0YS1taW5fd2lkdGgnICk7XHJcblx0XHRcdFx0bGV0IHB4ICAgID0gMDtcclxuXHRcdFx0XHRpZiAoIHJhdyApIHtcclxuXHRcdFx0XHRcdGNvbnN0IHMgPSBTdHJpbmcoIHJhdyApLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG5cdFx0XHRcdFx0aWYgKCBzLmVuZHNXaXRoKCAnJScgKSApIHtcclxuXHRcdFx0XHRcdFx0Y29uc3QgbiA9IHBhcnNlRmxvYXQoIHMgKTtcclxuXHRcdFx0XHRcdFx0aWYgKCBOdW1iZXIuaXNGaW5pdGUoIG4gKSAmJiBjb2xSZWN0LndpZHRoID4gMCApIHtcclxuXHRcdFx0XHRcdFx0XHRweCA9IChuIC8gMTAwKSAqIGNvbFJlY3Qud2lkdGg7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0cHggPSAwO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRweCA9IHRoaXMucGFyc2VfbGVuX3B4KCBzICk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGNvbnN0IGNzID0gZ2V0Q29tcHV0ZWRTdHlsZSggZmllbGQgKTtcclxuXHRcdFx0XHRcdHB4ICAgICAgID0gcGFyc2VGbG9hdCggY3MubWluV2lkdGggfHwgJzAnICkgfHwgMDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKCBweCA+IG1heF9weCApIG1heF9weCA9IHB4O1xyXG5cdFx0XHR9ICk7XHJcblx0XHRcdGNvbF9lbC5zdHlsZS5zZXRQcm9wZXJ0eSggJy0td3BiYy1jb2wtbWluJywgbWF4X3B4ID4gMCA/IE1hdGgucm91bmQoIG1heF9weCApICsgJ3B4JyA6ICcwcHgnICk7XHJcblx0XHR9XHJcblxyXG5cdFx0cGFyc2VfbGVuX3B4KHZhbHVlKSB7XHJcblx0XHRcdGlmICggdmFsdWUgPT0gbnVsbCApIHJldHVybiAwO1xyXG5cdFx0XHRjb25zdCBzID0gU3RyaW5nKCB2YWx1ZSApLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG5cdFx0XHRpZiAoIHMgPT09ICcnICkgcmV0dXJuIDA7XHJcblx0XHRcdGlmICggcy5lbmRzV2l0aCggJ3B4JyApICkge1xyXG5cdFx0XHRcdGNvbnN0IG4gPSBwYXJzZUZsb2F0KCBzICk7XHJcblx0XHRcdFx0cmV0dXJuIE51bWJlci5pc0Zpbml0ZSggbiApID8gbiA6IDA7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKCBzLmVuZHNXaXRoKCAncmVtJyApIHx8IHMuZW5kc1dpdGgoICdlbScgKSApIHtcclxuXHRcdFx0XHRjb25zdCBuICAgID0gcGFyc2VGbG9hdCggcyApO1xyXG5cdFx0XHRcdGNvbnN0IGJhc2UgPSBwYXJzZUZsb2F0KCBnZXRDb21wdXRlZFN0eWxlKCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgKS5mb250U2l6ZSApIHx8IDE2O1xyXG5cdFx0XHRcdHJldHVybiBOdW1iZXIuaXNGaW5pdGUoIG4gKSA/IG4gKiBiYXNlIDogMDtcclxuXHRcdFx0fVxyXG5cdFx0XHRjb25zdCBuID0gcGFyc2VGbG9hdCggcyApO1xyXG5cdFx0XHRyZXR1cm4gTnVtYmVyLmlzRmluaXRlKCBuICkgPyBuIDogMDtcclxuXHRcdH1cclxuXHR9O1xyXG5cclxuXHQvKipcclxuXHQgKiBXUEJDX0JGQl9Ub2dnbGVfTm9ybWFsaXplclxyXG5cdCAqXHJcblx0ICogQ29udmVydHMgcGxhaW4gY2hlY2tib3hlcyBpbnRvIHRvZ2dsZSBVSTpcclxuXHQgKiA8ZGl2IGNsYXNzPVwiaW5zcGVjdG9yX19jb250cm9sIHdwYmNfdWlfX3RvZ2dsZVwiPlxyXG5cdCAqICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGlkPVwie3VuaXF1ZX1cIiBkYXRhLWluc3BlY3Rvci1rZXk9XCIuLi5cIiBjbGFzcz1cImluc3BlY3Rvcl9faW5wdXRcIiByb2xlPVwic3dpdGNoXCJcclxuXHQgKiBhcmlhLWNoZWNrZWQ9XCJ0cnVlfGZhbHNlXCI+XHJcblx0ICogICA8bGFiZWwgY2xhc3M9XCJ3cGJjX3VpX190b2dnbGVfaWNvblwiICBmb3I9XCJ7dW5pcXVlfVwiPjwvbGFiZWw+XHJcblx0ICogICA8bGFiZWwgY2xhc3M9XCJ3cGJjX3VpX190b2dnbGVfbGFiZWxcIiBmb3I9XCJ7dW5pcXVlfVwiPkxhYmVsPC9sYWJlbD5cclxuXHQgKiA8L2Rpdj5cclxuXHQgKlxyXG5cdCAqIC0gU2tpcHMgaW5wdXRzIGFscmVhZHkgaW5zaWRlIGAud3BiY191aV9fdG9nZ2xlYC5cclxuXHQgKiAtIFJldXNlcyBhbiBleGlzdGluZyA8bGFiZWwgZm9yPVwiLi4uXCI+IHRleHQgaWYgcHJlc2VudDsgb3RoZXJ3aXNlIGZhbGxzIGJhY2sgdG8gbmVhcmJ5IGxhYmVscyBvciBhdHRyaWJ1dGVzLlxyXG5cdCAqIC0gQXV0by1nZW5lcmF0ZXMgYSB1bmlxdWUgaWQgd2hlbiBhYnNlbnQuXHJcblx0ICovXHJcblx0VUkuV1BCQ19CRkJfVG9nZ2xlX05vcm1hbGl6ZXIgPSBjbGFzcyB7XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBVcGdyYWRlIGFsbCByYXcgY2hlY2tib3hlcyBpbiBhIGNvbnRhaW5lciB0byB0b2dnbGVzLlxyXG5cdFx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcm9vdF9lbFxyXG5cdFx0ICovXHJcblx0XHRzdGF0aWMgdXBncmFkZV9jaGVja2JveGVzX2luKHJvb3RfZWwpIHtcclxuXHJcblx0XHRcdGlmICggIXJvb3RfZWwgfHwgIXJvb3RfZWwucXVlcnlTZWxlY3RvckFsbCApIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHZhciBpbnB1dHMgPSByb290X2VsLnF1ZXJ5U2VsZWN0b3JBbGwoICdpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0nICk7XHJcblx0XHRcdGlmICggIWlucHV0cy5sZW5ndGggKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKCBpbnB1dHMsIGZ1bmN0aW9uIChpbnB1dCkge1xyXG5cclxuXHRcdFx0XHQvLyAxKSBTa2lwIGlmIGFscmVhZHkgaW5zaWRlIHRvZ2dsZSB3cmFwcGVyLlxyXG5cdFx0XHRcdGlmICggaW5wdXQuY2xvc2VzdCggJy53cGJjX3VpX190b2dnbGUnICkgKSB7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdC8vIFNraXAgcm93cyAvIHdoZXJlIGlucHV0IGNoZWNrYm94IGV4cGxpY2l0bHkgbWFya2VkIHdpdGggIGF0dHJpYnV0ZSAnZGF0YS13cGJjLXVpLW5vLXRvZ2dsZScuXHJcblx0XHRcdFx0aWYgKCBpbnB1dC5oYXNBdHRyaWJ1dGUoICdkYXRhLXdwYmMtdWktbm8tdG9nZ2xlJyApICkge1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gMikgRW5zdXJlIHVuaXF1ZSBpZDsgcHJlZmVyIGV4aXN0aW5nLlxyXG5cdFx0XHRcdHZhciBpbnB1dF9pZCA9IGlucHV0LmdldEF0dHJpYnV0ZSggJ2lkJyApO1xyXG5cdFx0XHRcdGlmICggIWlucHV0X2lkICkge1xyXG5cdFx0XHRcdFx0dmFyIGtleSAgPSAoaW5wdXQuZGF0YXNldCAmJiBpbnB1dC5kYXRhc2V0Lmluc3BlY3RvcktleSkgPyBTdHJpbmcoIGlucHV0LmRhdGFzZXQuaW5zcGVjdG9yS2V5ICkgOiAnb3B0JztcclxuXHRcdFx0XHRcdGlucHV0X2lkID0gVUkuV1BCQ19CRkJfVG9nZ2xlX05vcm1hbGl6ZXIuZ2VuZXJhdGVfdW5pcXVlX2lkKCAnd3BiY19pbnNfYXV0b18nICsga2V5ICsgJ18nICk7XHJcblx0XHRcdFx0XHRpbnB1dC5zZXRBdHRyaWJ1dGUoICdpZCcsIGlucHV0X2lkICk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyAzKSBGaW5kIGJlc3QgbGFiZWwgdGV4dC5cclxuXHRcdFx0XHR2YXIgbGFiZWxfdGV4dCA9IFVJLldQQkNfQkZCX1RvZ2dsZV9Ob3JtYWxpemVyLnJlc29sdmVfbGFiZWxfdGV4dCggcm9vdF9lbCwgaW5wdXQsIGlucHV0X2lkICk7XHJcblxyXG5cdFx0XHRcdC8vIDQpIEJ1aWxkIHRoZSB0b2dnbGUgd3JhcHBlci5cclxuXHRcdFx0XHR2YXIgd3JhcHBlciAgICAgICA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdkaXYnICk7XHJcblx0XHRcdFx0d3JhcHBlci5jbGFzc05hbWUgPSAnaW5zcGVjdG9yX19jb250cm9sIHdwYmNfdWlfX3RvZ2dsZSc7XHJcblxyXG5cdFx0XHRcdC8vIEtlZXAgb3JpZ2luYWwgaW5wdXQ7IGp1c3QgbW92ZSBpdCBpbnRvIHdyYXBwZXIuXHJcblx0XHRcdFx0aW5wdXQuY2xhc3NMaXN0LmFkZCggJ2luc3BlY3Rvcl9faW5wdXQnICk7XHJcblx0XHRcdFx0aW5wdXQuc2V0QXR0cmlidXRlKCAncm9sZScsICdzd2l0Y2gnICk7XHJcblx0XHRcdFx0aW5wdXQuc2V0QXR0cmlidXRlKCAnYXJpYS1jaGVja2VkJywgaW5wdXQuY2hlY2tlZCA/ICd0cnVlJyA6ICdmYWxzZScgKTtcclxuXHJcblx0XHRcdFx0dmFyIGljb25fbGFiZWwgICAgICAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnbGFiZWwnICk7XHJcblx0XHRcdFx0aWNvbl9sYWJlbC5jbGFzc05hbWUgPSAnd3BiY191aV9fdG9nZ2xlX2ljb24nO1xyXG5cdFx0XHRcdGljb25fbGFiZWwuc2V0QXR0cmlidXRlKCAnZm9yJywgaW5wdXRfaWQgKTtcclxuXHJcblx0XHRcdFx0dmFyIHRleHRfbGFiZWwgICAgICAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnbGFiZWwnICk7XHJcblx0XHRcdFx0dGV4dF9sYWJlbC5jbGFzc05hbWUgPSAnd3BiY191aV9fdG9nZ2xlX2xhYmVsJztcclxuXHRcdFx0XHR0ZXh0X2xhYmVsLnNldEF0dHJpYnV0ZSggJ2ZvcicsIGlucHV0X2lkICk7XHJcblx0XHRcdFx0dGV4dF9sYWJlbC5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIGxhYmVsX3RleHQgKSApO1xyXG5cclxuXHRcdFx0XHQvLyA1KSBJbnNlcnQgd3JhcHBlciBpbnRvIERPTSBuZWFyIHRoZSBpbnB1dC5cclxuXHRcdFx0XHQvLyAgICBQcmVmZXJyZWQ6IHJlcGxhY2UgdGhlIG9yaWdpbmFsIGxhYmVsZWQgcm93IGlmIGl0IG1hdGNoZXMgdHlwaWNhbCBpbnNwZWN0b3IgbGF5b3V0LlxyXG5cdFx0XHRcdHZhciByZXBsYWNlZCA9IFVJLldQQkNfQkZCX1RvZ2dsZV9Ob3JtYWxpemVyLnRyeV9yZXBsYWNlX2tub3duX3JvdyggaW5wdXQsIHdyYXBwZXIsIGxhYmVsX3RleHQgKTtcclxuXHJcblx0XHRcdFx0aWYgKCAhcmVwbGFjZWQgKSB7XHJcblx0XHRcdFx0XHRpZiAoICFpbnB1dC5wYXJlbnROb2RlICkgcmV0dXJuOyAvLyBORVcgZ3VhcmRcclxuXHRcdFx0XHRcdC8vIEZhbGxiYWNrOiBqdXN0IHdyYXAgdGhlIGlucHV0IGluIHBsYWNlIGFuZCBhcHBlbmQgbGFiZWxzLlxyXG5cdFx0XHRcdFx0aW5wdXQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIHdyYXBwZXIsIGlucHV0ICk7XHJcblx0XHRcdFx0XHR3cmFwcGVyLmFwcGVuZENoaWxkKCBpbnB1dCApO1xyXG5cdFx0XHRcdFx0d3JhcHBlci5hcHBlbmRDaGlsZCggaWNvbl9sYWJlbCApO1xyXG5cdFx0XHRcdFx0d3JhcHBlci5hcHBlbmRDaGlsZCggdGV4dF9sYWJlbCApO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gNikgQVJJQSBzeW5jIG9uIGNoYW5nZS5cclxuXHRcdFx0XHRpbnB1dC5hZGRFdmVudExpc3RlbmVyKCAnY2hhbmdlJywgZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRcdFx0aW5wdXQuc2V0QXR0cmlidXRlKCAnYXJpYS1jaGVja2VkJywgaW5wdXQuY2hlY2tlZCA/ICd0cnVlJyA6ICdmYWxzZScgKTtcclxuXHRcdFx0XHR9ICk7XHJcblx0XHRcdH0gKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEdlbmVyYXRlIGEgdW5pcXVlIGlkIHdpdGggYSBnaXZlbiBwcmVmaXguXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gcHJlZml4XHJcblx0XHQgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG5cdFx0ICovXHJcblx0XHRzdGF0aWMgZ2VuZXJhdGVfdW5pcXVlX2lkKHByZWZpeCkge1xyXG5cdFx0XHR2YXIgYmFzZSA9IFN0cmluZyggcHJlZml4IHx8ICd3cGJjX2luc19hdXRvXycgKTtcclxuXHRcdFx0dmFyIHVpZCAgPSBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKCAzNiApLnNsaWNlKCAyLCA4ICk7XHJcblx0XHRcdHZhciBpZCAgID0gYmFzZSArIHVpZDtcclxuXHRcdFx0Ly8gTWluaW1hbCBjb2xsaXNpb24gZ3VhcmQgaW4gdGhlIGN1cnJlbnQgZG9jdW1lbnQgc2NvcGUuXHJcblx0XHRcdHdoaWxlICggZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIGlkICkgKSB7XHJcblx0XHRcdFx0dWlkID0gTWF0aC5yYW5kb20oKS50b1N0cmluZyggMzYgKS5zbGljZSggMiwgOCApO1xyXG5cdFx0XHRcdGlkICA9IGJhc2UgKyB1aWQ7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIGlkO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogUmVzb2x2ZSB0aGUgYmVzdCBodW1hbiBsYWJlbCBmb3IgYW4gaW5wdXQuXHJcblx0XHQgKiBQcmlvcml0eTpcclxuXHRcdCAqICAxKSA8bGFiZWwgZm9yPVwie2lkfVwiPnRleHQ8L2xhYmVsPlxyXG5cdFx0ICogIDIpIG5lYXJlc3Qgc2libGluZy9wYXJlbnQgLmluc3BlY3Rvcl9fbGFiZWwgdGV4dFxyXG5cdFx0ICogIDMpIGlucHV0LmdldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcpIHx8IGRhdGEtbGFiZWwgfHwgZGF0YS1pbnNwZWN0b3Ita2V5IHx8IG5hbWUgfHwgJ09wdGlvbidcclxuXHRcdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHJvb3RfZWxcclxuXHRcdCAqIEBwYXJhbSB7SFRNTElucHV0RWxlbWVudH0gaW5wdXRcclxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dF9pZFxyXG5cdFx0ICogQHJldHVybnMge3N0cmluZ31cclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIHJlc29sdmVfbGFiZWxfdGV4dChyb290X2VsLCBpbnB1dCwgaW5wdXRfaWQpIHtcclxuXHRcdFx0Ly8gZm9yPSBhc3NvY2lhdGlvblxyXG5cdFx0XHRpZiAoIGlucHV0X2lkICkge1xyXG5cdFx0XHRcdHZhciBhc3NvYyA9IHJvb3RfZWwucXVlcnlTZWxlY3RvciggJ2xhYmVsW2Zvcj1cIicgKyBVSS5XUEJDX0JGQl9Ub2dnbGVfTm9ybWFsaXplci5jc3NfZXNjYXBlKCBpbnB1dF9pZCApICsgJ1wiXScgKTtcclxuXHRcdFx0XHRpZiAoIGFzc29jICYmIGFzc29jLnRleHRDb250ZW50ICkge1xyXG5cdFx0XHRcdFx0dmFyIHR4dCA9IGFzc29jLnRleHRDb250ZW50LnRyaW0oKTtcclxuXHRcdFx0XHRcdC8vIFJlbW92ZSB0aGUgb2xkIGxhYmVsIGZyb20gRE9NOyBpdHMgdGV4dCB3aWxsIGJlIHVzZWQgYnkgdG9nZ2xlLlxyXG5cdFx0XHRcdFx0YXNzb2MucGFyZW50Tm9kZSAmJiBhc3NvYy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBhc3NvYyApO1xyXG5cdFx0XHRcdFx0aWYgKCB0eHQgKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiB0eHQ7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBuZWFyYnkgaW5zcGVjdG9yIGxhYmVsXHJcblx0XHRcdHZhciBuZWFyX2xhYmVsID0gaW5wdXQuY2xvc2VzdCggJy5pbnNwZWN0b3JfX3JvdycgKTtcclxuXHRcdFx0aWYgKCBuZWFyX2xhYmVsICkge1xyXG5cdFx0XHRcdHZhciBpbCA9IG5lYXJfbGFiZWwucXVlcnlTZWxlY3RvciggJy5pbnNwZWN0b3JfX2xhYmVsJyApO1xyXG5cdFx0XHRcdGlmICggaWwgJiYgaWwudGV4dENvbnRlbnQgKSB7XHJcblx0XHRcdFx0XHR2YXIgdDIgPSBpbC50ZXh0Q29udGVudC50cmltKCk7XHJcblx0XHRcdFx0XHQvLyBJZiB0aGlzIHJvdyBoYWQgdGhlIHN0YW5kYXJkIGxhYmVsK2NvbnRyb2wsIGRyb3AgdGhlIG9sZCB0ZXh0IGxhYmVsIHRvIGF2b2lkIGR1cGxpY2F0ZXMuXHJcblx0XHRcdFx0XHRpbC5wYXJlbnROb2RlICYmIGlsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIGlsICk7XHJcblx0XHRcdFx0XHRpZiAoIHQyICkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gdDI7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBmYWxsYmFja3NcclxuXHRcdFx0dmFyIGFyaWEgPSBpbnB1dC5nZXRBdHRyaWJ1dGUoICdhcmlhLWxhYmVsJyApO1xyXG5cdFx0XHRpZiAoIGFyaWEgKSB7XHJcblx0XHRcdFx0cmV0dXJuIGFyaWE7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKCBpbnB1dC5kYXRhc2V0ICYmIGlucHV0LmRhdGFzZXQubGFiZWwgKSB7XHJcblx0XHRcdFx0cmV0dXJuIFN0cmluZyggaW5wdXQuZGF0YXNldC5sYWJlbCApO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICggaW5wdXQuZGF0YXNldCAmJiBpbnB1dC5kYXRhc2V0Lmluc3BlY3RvcktleSApIHtcclxuXHRcdFx0XHRyZXR1cm4gU3RyaW5nKCBpbnB1dC5kYXRhc2V0Lmluc3BlY3RvcktleSApO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICggaW5wdXQubmFtZSApIHtcclxuXHRcdFx0XHRyZXR1cm4gU3RyaW5nKCBpbnB1dC5uYW1lICk7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuICdPcHRpb24nO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogVHJ5IHRvIHJlcGxhY2UgYSBrbm93biBpbnNwZWN0b3Igcm93IHBhdHRlcm4gd2l0aCBhIHRvZ2dsZSB3cmFwcGVyLlxyXG5cdFx0ICogUGF0dGVybnM6XHJcblx0XHQgKiAgPGRpdi5pbnNwZWN0b3JfX3Jvdz5cclxuXHRcdCAqICAgIDxsYWJlbC5pbnNwZWN0b3JfX2xhYmVsPlRleHQ8L2xhYmVsPlxyXG5cdFx0ICogICAgPGRpdi5pbnNwZWN0b3JfX2NvbnRyb2w+IFtpbnB1dFt0eXBlPWNoZWNrYm94XV0gPC9kaXY+XHJcblx0XHQgKiAgPC9kaXY+XHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHtIVE1MSW5wdXRFbGVtZW50fSBpbnB1dFxyXG5cdFx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gd3JhcHBlclxyXG5cdFx0ICogQHJldHVybnMge2Jvb2xlYW59IHJlcGxhY2VkXHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyB0cnlfcmVwbGFjZV9rbm93bl9yb3coaW5wdXQsIHdyYXBwZXIsIGxhYmVsX3RleHQpIHtcclxuXHRcdFx0dmFyIHJvdyAgICAgICA9IGlucHV0LmNsb3Nlc3QoICcuaW5zcGVjdG9yX19yb3cnICk7XHJcblx0XHRcdHZhciBjdHJsX3dyYXAgPSBpbnB1dC5wYXJlbnRFbGVtZW50O1xyXG5cclxuXHRcdFx0aWYgKCByb3cgJiYgY3RybF93cmFwICYmIGN0cmxfd3JhcC5jbGFzc0xpc3QuY29udGFpbnMoICdpbnNwZWN0b3JfX2NvbnRyb2wnICkgKSB7XHJcblx0XHRcdFx0Ly8gQ2xlYXIgY29udHJvbCB3cmFwIGFuZCByZWluc2VydCB0b2dnbGUgc3RydWN0dXJlLlxyXG5cdFx0XHRcdHdoaWxlICggY3RybF93cmFwLmZpcnN0Q2hpbGQgKSB7XHJcblx0XHRcdFx0XHRjdHJsX3dyYXAucmVtb3ZlQ2hpbGQoIGN0cmxfd3JhcC5maXJzdENoaWxkICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHJvdy5jbGFzc0xpc3QuYWRkKCAnaW5zcGVjdG9yX19yb3ctLXRvZ2dsZScgKTtcclxuXHJcblx0XHRcdFx0Y3RybF93cmFwLmNsYXNzTGlzdC5hZGQoICd3cGJjX3VpX190b2dnbGUnICk7XHJcblx0XHRcdFx0Y3RybF93cmFwLmFwcGVuZENoaWxkKCBpbnB1dCApO1xyXG5cclxuXHRcdFx0XHR2YXIgaW5wdXRfaWQgICAgICAgPSBpbnB1dC5nZXRBdHRyaWJ1dGUoICdpZCcgKTtcclxuXHRcdFx0XHR2YXIgaWNvbl9sYmwgICAgICAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnbGFiZWwnICk7XHJcblx0XHRcdFx0aWNvbl9sYmwuY2xhc3NOYW1lID0gJ3dwYmNfdWlfX3RvZ2dsZV9pY29uJztcclxuXHRcdFx0XHRpY29uX2xibC5zZXRBdHRyaWJ1dGUoICdmb3InLCBpbnB1dF9pZCApO1xyXG5cclxuXHRcdFx0XHR2YXIgdGV4dF9sYmwgICAgICAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnbGFiZWwnICk7XHJcblx0XHRcdFx0dGV4dF9sYmwuY2xhc3NOYW1lID0gJ3dwYmNfdWlfX3RvZ2dsZV9sYWJlbCc7XHJcblx0XHRcdFx0dGV4dF9sYmwuc2V0QXR0cmlidXRlKCAnZm9yJywgaW5wdXRfaWQgKTtcclxuXHRcdFx0XHRpZiAoIGxhYmVsX3RleHQgKSB7XHJcblx0XHRcdFx0XHR0ZXh0X2xibC5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIGxhYmVsX3RleHQgKSApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQvLyBJZiB0aGUgcm93IHByZXZpb3VzbHkgaGFkIGEgLmluc3BlY3Rvcl9fbGFiZWwgKHdlIHJlbW92ZWQgaXQgaW4gcmVzb2x2ZV9sYWJlbF90ZXh0KSxcclxuXHRcdFx0XHQvLyB3ZSBpbnRlbnRpb25hbGx5IGRvIE5PVCByZWNyZWF0ZSBpdDsgdGhlIHRvZ2dsZSB0ZXh0IGxhYmVsIGJlY29tZXMgdGhlIHZpc2libGUgb25lLlxyXG5cdFx0XHRcdC8vIFRoZSB0ZXh0IGNvbnRlbnQgaXMgYWxyZWFkeSByZXNvbHZlZCBpbiByZXNvbHZlX2xhYmVsX3RleHQoKSBhbmQgc2V0IGJlbG93IGJ5IGNhbGxlci5cclxuXHJcblx0XHRcdFx0Y3RybF93cmFwLmFwcGVuZENoaWxkKCBpY29uX2xibCApO1xyXG5cdFx0XHRcdGN0cmxfd3JhcC5hcHBlbmRDaGlsZCggdGV4dF9sYmwgKTtcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gTm90IGEga25vd24gcGF0dGVybjsgY2FsbGVyIHdpbGwgd3JhcCBpbiBwbGFjZS5cclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQ1NTLmVzY2FwZSBwb2x5ZmlsbCBmb3Igc2VsZWN0b3JzLlxyXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IHNcclxuXHRcdCAqIEByZXR1cm5zIHtzdHJpbmd9XHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBjc3NfZXNjYXBlKHMpIHtcclxuXHRcdFx0cyA9IFN0cmluZyggcyApO1xyXG5cdFx0XHRpZiAoIHdpbmRvdy5DU1MgJiYgdHlwZW9mIHdpbmRvdy5DU1MuZXNjYXBlID09PSAnZnVuY3Rpb24nICkge1xyXG5cdFx0XHRcdHJldHVybiB3aW5kb3cuQ1NTLmVzY2FwZSggcyApO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBzLnJlcGxhY2UoIC8oW15cXHctXSkvZywgJ1xcXFwkMScgKTtcclxuXHRcdH1cclxuXHR9O1xyXG5cclxuXHQvKipcclxuXHQgKiBBcHBseSBhbGwgVUkgbm9ybWFsaXplcnMvZW5oYW5jZXJzIHRvIGEgY29udGFpbmVyIChwb3N0LXJlbmRlcikuXHJcblx0ICogS2VlcCB0aGlzIGZpbGUgc21hbGwgYW5kIGFkZCBtb3JlIG5vcm1hbGl6ZXJzIGxhdGVyIGluIG9uZSBwbGFjZS5cclxuXHQgKlxyXG5cdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHJvb3RcclxuXHQgKi9cclxuXHRVSS5hcHBseV9wb3N0X3JlbmRlciA9IGZ1bmN0aW9uIChyb290KSB7XHJcblx0XHRpZiAoICFyb290ICkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHR0cnkge1xyXG5cdFx0XHRVSS5XUEJDX0JGQl9WYWx1ZVNsaWRlcj8uaW5pdF9vbj8uKCByb290ICk7XHJcblx0XHR9IGNhdGNoICggZSApIHsgLyogbm9vcCAqL1xyXG5cdFx0fVxyXG5cdFx0dHJ5IHtcclxuXHRcdFx0dmFyIFQgPSBVSS5XUEJDX0JGQl9Ub2dnbGVfTm9ybWFsaXplcjtcclxuXHRcdFx0aWYgKCBUICYmIHR5cGVvZiBULnVwZ3JhZGVfY2hlY2tib3hlc19pbiA9PT0gJ2Z1bmN0aW9uJyApIHtcclxuXHRcdFx0XHRULnVwZ3JhZGVfY2hlY2tib3hlc19pbiggcm9vdCApO1xyXG5cdFx0XHR9XHJcblx0XHR9IGNhdGNoICggZSApIHtcclxuXHRcdFx0dy5fd3BiYz8uZGV2Py5lcnJvcj8uKCAnYXBwbHlfcG9zdF9yZW5kZXIudG9nZ2xlJywgZSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEFjY2Vzc2liaWxpdHk6IGtlZXAgYXJpYS1jaGVja2VkIGluIHN5bmMgZm9yIGFsbCB0b2dnbGVzIGluc2lkZSByb290LlxyXG5cdFx0dHJ5IHtcclxuXHRcdFx0cm9vdC5xdWVyeVNlbGVjdG9yQWxsKCAnLndwYmNfdWlfX3RvZ2dsZSBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0nICkuZm9yRWFjaCggZnVuY3Rpb24gKGNiKSB7XHJcblx0XHRcdFx0aWYgKCBjYi5fX3dwYmNfYXJpYV9ob29rZWQgKSB7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGNiLl9fd3BiY19hcmlhX2hvb2tlZCA9IHRydWU7XHJcblx0XHRcdFx0Y2Iuc2V0QXR0cmlidXRlKCAnYXJpYS1jaGVja2VkJywgY2IuY2hlY2tlZCA/ICd0cnVlJyA6ICdmYWxzZScgKTtcclxuXHRcdFx0XHQvLyBEZWxlZ2F0ZSDigJhjaGFuZ2XigJkganVzdCBvbmNlIHBlciByZW5kZXIg4oCTIG5hdGl2ZSBkZWxlZ2F0aW9uIHN0aWxsIHdvcmtzIGZpbmUgZm9yIHlvdXIgbG9naWMuXHJcblx0XHRcdFx0Y2IuYWRkRXZlbnRMaXN0ZW5lciggJ2NoYW5nZScsICgpID0+IHtcclxuXHRcdFx0XHRcdGNiLnNldEF0dHJpYnV0ZSggJ2FyaWEtY2hlY2tlZCcsIGNiLmNoZWNrZWQgPyAndHJ1ZScgOiAnZmFsc2UnICk7XHJcblx0XHRcdFx0fSwgeyBwYXNzaXZlOiB0cnVlIH0gKTtcclxuXHRcdFx0fSApO1xyXG5cdFx0fSBjYXRjaCAoIGUgKSB7XHJcblx0XHRcdHcuX3dwYmM/LmRldj8uZXJyb3I/LiggJ2FwcGx5X3Bvc3RfcmVuZGVyLmFyaWEnLCBlICk7XHJcblx0XHR9XHJcblx0fTtcclxuXHJcblx0VUkuSW5zcGVjdG9yRW5oYW5jZXJzID0gVUkuSW5zcGVjdG9yRW5oYW5jZXJzIHx8IChmdW5jdGlvbiAoKSB7XHJcblx0XHR2YXIgcmVncyA9IFtdO1xyXG5cclxuXHRcdGZ1bmN0aW9uIHJlZ2lzdGVyKG5hbWUsIHNlbGVjdG9yLCBpbml0LCBkZXN0cm95KSB7XHJcblx0XHRcdHJlZ3MucHVzaCggeyBuYW1lLCBzZWxlY3RvciwgaW5pdCwgZGVzdHJveSB9ICk7XHJcblx0XHR9XHJcblxyXG5cdFx0ZnVuY3Rpb24gc2Nhbihyb290KSB7XHJcblx0XHRcdGlmICggIXJvb3QgKSByZXR1cm47XHJcblx0XHRcdHJlZ3MuZm9yRWFjaCggZnVuY3Rpb24gKHIpIHtcclxuXHRcdFx0XHRyb290LnF1ZXJ5U2VsZWN0b3JBbGwoIHIuc2VsZWN0b3IgKS5mb3JFYWNoKCBmdW5jdGlvbiAobm9kZSkge1xyXG5cdFx0XHRcdFx0bm9kZS5fX3dwYmNfZWggPSBub2RlLl9fd3BiY19laCB8fCB7fTtcclxuXHRcdFx0XHRcdGlmICggbm9kZS5fX3dwYmNfZWhbci5uYW1lXSApIHJldHVybjtcclxuXHRcdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHRcdHIuaW5pdCAmJiByLmluaXQoIG5vZGUsIHJvb3QgKTtcclxuXHRcdFx0XHRcdFx0bm9kZS5fX3dwYmNfZWhbci5uYW1lXSA9IHRydWU7XHJcblx0XHRcdFx0XHR9IGNhdGNoICggX2UgKSB7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSApO1xyXG5cdFx0XHR9ICk7XHJcblx0XHR9XHJcblxyXG5cdFx0ZnVuY3Rpb24gZGVzdHJveShyb290KSB7XHJcblx0XHRcdGlmICggIXJvb3QgKSByZXR1cm47XHJcblx0XHRcdHJlZ3MuZm9yRWFjaCggZnVuY3Rpb24gKHIpIHtcclxuXHRcdFx0XHRyb290LnF1ZXJ5U2VsZWN0b3JBbGwoIHIuc2VsZWN0b3IgKS5mb3JFYWNoKCBmdW5jdGlvbiAobm9kZSkge1xyXG5cdFx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdFx0ci5kZXN0cm95ICYmIHIuZGVzdHJveSggbm9kZSwgcm9vdCApO1xyXG5cdFx0XHRcdFx0fSBjYXRjaCAoIF9lICkge1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKCBub2RlLl9fd3BiY19laCApIGRlbGV0ZSBub2RlLl9fd3BiY19laFtyLm5hbWVdO1xyXG5cdFx0XHRcdH0gKTtcclxuXHRcdFx0fSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB7IHJlZ2lzdGVyLCBzY2FuLCBkZXN0cm95IH07XHJcblx0fSkoKTtcclxuXHJcblx0VUkuV1BCQ19CRkJfVmFsdWVTbGlkZXIgPSB7XHJcblx0XHRpbml0X29uKHJvb3QpIHtcclxuXHRcdFx0dmFyIGdyb3VwcyA9IChyb290Lm5vZGVUeXBlID09PSAxID8gWyByb290IF0gOiBbXSkuY29uY2F0KCBbXS5zbGljZS5jYWxsKCByb290LnF1ZXJ5U2VsZWN0b3JBbGw/LiggJ1tkYXRhLWxlbi1ncm91cF0nICkgfHwgW10gKSApO1xyXG5cdFx0XHRncm91cHMuZm9yRWFjaCggZnVuY3Rpb24gKGcpIHtcclxuXHRcdFx0XHRpZiAoICFnLm1hdGNoZXMgfHwgIWcubWF0Y2hlcyggJ1tkYXRhLWxlbi1ncm91cF0nICkgKSByZXR1cm47XHJcblx0XHRcdFx0aWYgKCBnLl9fd3BiY19sZW5fd2lyZWQgKSByZXR1cm47XHJcblxyXG5cdFx0XHRcdHZhciBudW1iZXIgPSBnLnF1ZXJ5U2VsZWN0b3IoICdbZGF0YS1sZW4tdmFsdWVdJyApO1xyXG5cdFx0XHRcdHZhciByYW5nZSAgPSBnLnF1ZXJ5U2VsZWN0b3IoICdbZGF0YS1sZW4tcmFuZ2VdJyApO1xyXG5cdFx0XHRcdHZhciB1bml0ICAgPSBnLnF1ZXJ5U2VsZWN0b3IoICdbZGF0YS1sZW4tdW5pdF0nICk7XHJcblxyXG5cdFx0XHRcdGlmICggIW51bWJlciB8fCAhcmFuZ2UgKSByZXR1cm47XHJcblxyXG5cdFx0XHRcdC8vIE1pcnJvciBjb25zdHJhaW50cyBpZiBtaXNzaW5nIG9uIHRoZSByYW5nZS5cclxuXHRcdFx0XHRbICdtaW4nLCAnbWF4JywgJ3N0ZXAnIF0uZm9yRWFjaCggZnVuY3Rpb24gKGEpIHtcclxuXHRcdFx0XHRcdGlmICggIXJhbmdlLmhhc0F0dHJpYnV0ZSggYSApICYmIG51bWJlci5oYXNBdHRyaWJ1dGUoIGEgKSApIHtcclxuXHRcdFx0XHRcdFx0cmFuZ2Uuc2V0QXR0cmlidXRlKCBhLCBudW1iZXIuZ2V0QXR0cmlidXRlKCBhICkgKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9ICk7XHJcblxyXG5cclxuXHRcdFx0XHRmdW5jdGlvbiBzeW5jX3JhbmdlX2Zyb21fbnVtYmVyKCkge1xyXG5cdFx0XHRcdFx0aWYgKCByYW5nZS52YWx1ZSAhPT0gbnVtYmVyLnZhbHVlICkge1xyXG5cdFx0XHRcdFx0XHRyYW5nZS52YWx1ZSA9IG51bWJlci52YWx1ZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGZ1bmN0aW9uIGRpc3BhdGNoX2lucHV0KGVsKSB7XHJcblx0XHRcdFx0XHR0cnkgeyBlbC5kaXNwYXRjaEV2ZW50KCBuZXcgRXZlbnQoICdpbnB1dCcsIHsgYnViYmxlczogdHJ1ZSB9ICkgKTsgfSBjYXRjaCAoIF9lICkge31cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0ZnVuY3Rpb24gZGlzcGF0Y2hfY2hhbmdlKGVsKSB7XHJcblx0XHRcdFx0XHR0cnkgeyBlbC5kaXNwYXRjaEV2ZW50KCBuZXcgRXZlbnQoICdjaGFuZ2UnLCB7IGJ1YmJsZXM6IHRydWUgfSApICk7IH0gY2F0Y2ggKCBfZSApIHt9XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBUaHJvdHRsZSByYW5nZS0+bnVtYmVyIHN5bmNpbmcgKHRpbWUtYmFzZWQpLlxyXG5cdFx0XHRcdHZhciB0aW1lcl9pZCAgICAgICA9IDA7XHJcblx0XHRcdFx0dmFyIHBlbmRpbmdfdmFsICAgID0gbnVsbDtcclxuXHRcdFx0XHR2YXIgcGVuZGluZ19jaGFuZ2UgPSBmYWxzZTtcclxuXHRcdFx0XHR2YXIgbGFzdF9mbHVzaF90cyAgPSAwO1xyXG5cclxuXHRcdFx0XHQvLyBDaGFuZ2UgdGhpcyB0byB0dW5lIHNwZWVkOiA1MC4uMTIwIG1zIGlzIGEgZ29vZCByYW5nZS5cclxuXHRcdFx0XHR2YXIgbWluX2ludGVydmFsX21zID0gcGFyc2VJbnQoIGcuZGF0YXNldC5sZW5UaHJvdHRsZSB8fCBVSS5WQUxVRV9TTElERVJfVEhST1RUTEVfTVMsIDEwICk7XHJcblx0XHRcdFx0bWluX2ludGVydmFsX21zID0gTnVtYmVyLmlzRmluaXRlKCBtaW5faW50ZXJ2YWxfbXMgKSA/IE1hdGgubWF4KCAwLCBtaW5faW50ZXJ2YWxfbXMgKSA6IDEyMDtcclxuXHJcblx0XHRcdFx0ZnVuY3Rpb24gZmx1c2hfcmFuZ2VfdG9fbnVtYmVyKCkge1xyXG5cdFx0XHRcdFx0dGltZXJfaWQgPSAwO1xyXG5cclxuXHRcdFx0XHRcdGlmICggcGVuZGluZ192YWwgPT0gbnVsbCApIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdHZhciBuZXh0ICAgID0gU3RyaW5nKCBwZW5kaW5nX3ZhbCApO1xyXG5cdFx0XHRcdFx0cGVuZGluZ192YWwgPSBudWxsO1xyXG5cclxuXHRcdFx0XHRcdGlmICggbnVtYmVyLnZhbHVlICE9PSBuZXh0ICkge1xyXG5cdFx0XHRcdFx0XHRudW1iZXIudmFsdWUgPSBuZXh0O1xyXG5cdFx0XHRcdFx0XHQvLyBJTVBPUlRBTlQ6IG9ubHkgJ2lucHV0JyB3aGlsZSBkcmFnZ2luZy5cclxuXHRcdFx0XHRcdFx0ZGlzcGF0Y2hfaW5wdXQoIG51bWJlciApO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmICggcGVuZGluZ19jaGFuZ2UgKSB7XHJcblx0XHRcdFx0XHRcdHBlbmRpbmdfY2hhbmdlID0gZmFsc2U7XHJcblx0XHRcdFx0XHRcdGRpc3BhdGNoX2NoYW5nZSggbnVtYmVyICk7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0bGFzdF9mbHVzaF90cyA9IERhdGUubm93KCk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRmdW5jdGlvbiBzY2hlZHVsZV9yYW5nZV90b19udW1iZXIodmFsLCBlbWl0X2NoYW5nZSkge1xyXG5cdFx0XHRcdFx0cGVuZGluZ192YWwgPSB2YWw7XHJcblx0XHRcdFx0XHRpZiAoIGVtaXRfY2hhbmdlICkge1xyXG5cdFx0XHRcdFx0XHRwZW5kaW5nX2NoYW5nZSA9IHRydWU7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0Ly8gSWYgY29tbWl0IHJlcXVlc3RlZCwgZmx1c2ggaW1tZWRpYXRlbHkuXHJcblx0XHRcdFx0XHRpZiAoIHBlbmRpbmdfY2hhbmdlICkge1xyXG5cdFx0XHRcdFx0XHRpZiAoIHRpbWVyX2lkICkge1xyXG5cdFx0XHRcdFx0XHRcdGNsZWFyVGltZW91dCggdGltZXJfaWQgKTtcclxuXHRcdFx0XHRcdFx0XHR0aW1lcl9pZCA9IDA7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0Zmx1c2hfcmFuZ2VfdG9fbnVtYmVyKCk7XHJcblx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHR2YXIgbm93ICAgPSBEYXRlLm5vdygpO1xyXG5cdFx0XHRcdFx0dmFyIGRlbHRhID0gbm93IC0gbGFzdF9mbHVzaF90cztcclxuXHJcblx0XHRcdFx0XHQvLyBJZiBlbm91Z2ggdGltZSBwYXNzZWQsIGZsdXNoIGltbWVkaWF0ZWx5OyBlbHNlIHNjaGVkdWxlLlxyXG5cdFx0XHRcdFx0aWYgKCBkZWx0YSA+PSBtaW5faW50ZXJ2YWxfbXMgKSB7XHJcblx0XHRcdFx0XHRcdGZsdXNoX3JhbmdlX3RvX251bWJlcigpO1xyXG5cdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0aWYgKCB0aW1lcl9pZCApIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdHRpbWVyX2lkID0gc2V0VGltZW91dCggZmx1c2hfcmFuZ2VfdG9fbnVtYmVyLCBNYXRoLm1heCggMCwgbWluX2ludGVydmFsX21zIC0gZGVsdGEgKSApO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0ZnVuY3Rpb24gb25fbnVtYmVyX2lucHV0KCkge1xyXG5cdFx0XHRcdFx0c3luY19yYW5nZV9mcm9tX251bWJlcigpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0ZnVuY3Rpb24gb25fbnVtYmVyX2NoYW5nZSgpIHtcclxuXHRcdFx0XHRcdHN5bmNfcmFuZ2VfZnJvbV9udW1iZXIoKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGZ1bmN0aW9uIG9uX3JhbmdlX2lucHV0KCkge1xyXG5cdFx0XHRcdFx0c2NoZWR1bGVfcmFuZ2VfdG9fbnVtYmVyKCByYW5nZS52YWx1ZSwgZmFsc2UgKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGZ1bmN0aW9uIG9uX3JhbmdlX2NoYW5nZSgpIHtcclxuXHRcdFx0XHRcdHNjaGVkdWxlX3JhbmdlX3RvX251bWJlciggcmFuZ2UudmFsdWUsIHRydWUgKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdG51bWJlci5hZGRFdmVudExpc3RlbmVyKCAnaW5wdXQnLCAgb25fbnVtYmVyX2lucHV0ICk7XHJcblx0XHRcdFx0bnVtYmVyLmFkZEV2ZW50TGlzdGVuZXIoICdjaGFuZ2UnLCBvbl9udW1iZXJfY2hhbmdlICk7XHJcblx0XHRcdFx0cmFuZ2UuYWRkRXZlbnRMaXN0ZW5lciggJ2lucHV0JywgIG9uX3JhbmdlX2lucHV0ICk7XHJcblx0XHRcdFx0cmFuZ2UuYWRkRXZlbnRMaXN0ZW5lciggJ2NoYW5nZScsIG9uX3JhbmdlX2NoYW5nZSApO1xyXG5cclxuXHRcdFx0XHRpZiAoIHVuaXQgKSB7XHJcblx0XHRcdFx0XHR1bml0LmFkZEV2ZW50TGlzdGVuZXIoICdjaGFuZ2UnLCBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdFx0XHRcdC8vIFdlIGp1c3QgbnVkZ2UgdGhlIG51bWJlciBzbyB1cHN0cmVhbSBoYW5kbGVycyByZS1ydW4uXHJcblx0XHRcdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHRcdFx0bnVtYmVyLmRpc3BhdGNoRXZlbnQoIG5ldyBFdmVudCggJ2lucHV0JywgeyBidWJibGVzOiB0cnVlIH0gKSApO1xyXG5cdFx0XHRcdFx0XHR9IGNhdGNoICggX2UgKSB7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0gKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIEluaXRpYWwgc3luY1xyXG5cdFx0XHRcdHN5bmNfcmFuZ2VfZnJvbV9udW1iZXIoKTtcclxuXHJcblx0XHRcdFx0Zy5fX3dwYmNfbGVuX3dpcmVkID0ge1xyXG5cdFx0XHRcdFx0ZGVzdHJveSgpIHtcclxuXHRcdFx0XHRcdFx0bnVtYmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoICdpbnB1dCcsICBvbl9udW1iZXJfaW5wdXQgKTtcclxuXHRcdFx0XHRcdFx0bnVtYmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoICdjaGFuZ2UnLCBvbl9udW1iZXJfY2hhbmdlICk7XHJcblx0XHRcdFx0XHRcdHJhbmdlLnJlbW92ZUV2ZW50TGlzdGVuZXIoICdpbnB1dCcsICBvbl9yYW5nZV9pbnB1dCApO1xyXG5cdFx0XHRcdFx0XHRyYW5nZS5yZW1vdmVFdmVudExpc3RlbmVyKCAnY2hhbmdlJywgb25fcmFuZ2VfY2hhbmdlICk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fTtcclxuXHRcdFx0fSApO1xyXG5cdFx0fSxcclxuXHRcdGRlc3Ryb3lfb24ocm9vdCkge1xyXG5cdFx0XHR2YXIgZ3JvdXBzID0gKHJvb3QgJiYgcm9vdC5ub2RlVHlwZSA9PT0gMSA/IFsgcm9vdCBdIDogW10pLmNvbmNhdChcclxuXHRcdFx0XHRbXS5zbGljZS5jYWxsKCByb290LnF1ZXJ5U2VsZWN0b3JBbGw/LiggJ1tkYXRhLWxlbi1ncm91cF0nICkgfHwgW10gKVxyXG5cdFx0XHQpO1xyXG5cdFx0XHRncm91cHMuZm9yRWFjaCggZnVuY3Rpb24gKGcpIHtcclxuXHRcdFx0XHRpZiAoICFnLm1hdGNoZXMgfHwgIWcubWF0Y2hlcyggJ1tkYXRhLWxlbi1ncm91cF0nICkgKSByZXR1cm47XHJcblx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdGcuX193cGJjX2xlbl93aXJlZCAmJiBnLl9fd3BiY19sZW5fd2lyZWQuZGVzdHJveSAmJiBnLl9fd3BiY19sZW5fd2lyZWQuZGVzdHJveSgpO1xyXG5cdFx0XHRcdH0gY2F0Y2ggKCBfZSApIHtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0ZGVsZXRlIGcuX193cGJjX2xlbl93aXJlZDtcclxuXHRcdFx0fSApO1xyXG5cdFx0fVxyXG5cdH07XHJcblxyXG5cdC8vIFJlZ2lzdGVyIHdpdGggdGhlIGdsb2JhbCBlbmhhbmNlcnMgaHViLlxyXG5cdFVJLkluc3BlY3RvckVuaGFuY2VycyAmJiBVSS5JbnNwZWN0b3JFbmhhbmNlcnMucmVnaXN0ZXIoXHJcblx0XHQndmFsdWUtc2xpZGVyJyxcclxuXHRcdCdbZGF0YS1sZW4tZ3JvdXBdJyxcclxuXHRcdGZ1bmN0aW9uIChlbCwgX3Jvb3QpIHtcclxuXHRcdFx0VUkuV1BCQ19CRkJfVmFsdWVTbGlkZXIuaW5pdF9vbiggZWwgKTtcclxuXHRcdH0sXHJcblx0XHRmdW5jdGlvbiAoZWwsIF9yb290KSB7XHJcblx0XHRcdFVJLldQQkNfQkZCX1ZhbHVlU2xpZGVyLmRlc3Ryb3lfb24oIGVsICk7XHJcblx0XHR9XHJcblx0KTtcclxuXHJcblx0Ly8gU2luZ2xlLCBsb2FkLW9yZGVyLXNhZmUgcGF0Y2ggc28gZW5oYW5jZXJzIGF1dG8tcnVuIG9uIGV2ZXJ5IGJpbmQuXHJcblx0KGZ1bmN0aW9uIHBhdGNoSW5zcGVjdG9yRW5oYW5jZXJzKCkge1xyXG5cdFx0ZnVuY3Rpb24gYXBwbHlQYXRjaCgpIHtcclxuXHRcdFx0dmFyIEluc3BlY3RvciA9IHcuV1BCQ19CRkJfSW5zcGVjdG9yO1xyXG5cdFx0XHRpZiAoICFJbnNwZWN0b3IgfHwgSW5zcGVjdG9yLl9fd3BiY19lbmhhbmNlcnNfcGF0Y2hlZCApIHJldHVybiBmYWxzZTtcclxuXHRcdFx0SW5zcGVjdG9yLl9fd3BiY19lbmhhbmNlcnNfcGF0Y2hlZCA9IHRydWU7XHJcblx0XHRcdHZhciBvcmlnICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBJbnNwZWN0b3IucHJvdG90eXBlLmJpbmRfdG9fZmllbGQ7XHJcblx0XHRcdEluc3BlY3Rvci5wcm90b3R5cGUuYmluZF90b19maWVsZCAgPSBmdW5jdGlvbiAoZWwpIHtcclxuXHRcdFx0XHRvcmlnLmNhbGwoIHRoaXMsIGVsICk7XHJcblx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdHZhciBpbnMgPSB0aGlzLnBhbmVsXHJcblx0XHRcdFx0XHRcdHx8IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnd3BiY19iZmJfX2luc3BlY3RvcicgKVxyXG5cdFx0XHRcdFx0XHR8fCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCAnLndwYmNfYmZiX19pbnNwZWN0b3InICk7XHJcblx0XHRcdFx0XHRVSS5JbnNwZWN0b3JFbmhhbmNlcnMgJiYgVUkuSW5zcGVjdG9yRW5oYW5jZXJzLnNjYW4oIGlucyApO1xyXG5cdFx0XHRcdH0gY2F0Y2ggKCBfZSApIHtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH07XHJcblx0XHRcdC8vIEluaXRpYWwgc2NhbiBpZiB0aGUgRE9NIGlzIGFscmVhZHkgcHJlc2VudC5cclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHR2YXIgaW5zRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ3dwYmNfYmZiX19pbnNwZWN0b3InIClcclxuXHRcdFx0XHRcdHx8IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoICcud3BiY19iZmJfX2luc3BlY3RvcicgKTtcclxuXHRcdFx0XHRVSS5JbnNwZWN0b3JFbmhhbmNlcnMgJiYgVUkuSW5zcGVjdG9yRW5oYW5jZXJzLnNjYW4oIGluc0VsICk7XHJcblx0XHRcdH0gY2F0Y2ggKCBfZSApIHtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBUcnkgbm93OyBpZiBJbnNwZWN0b3IgaXNu4oCZdCBkZWZpbmVkIHlldCwgcGF0Y2ggd2hlbiBpdCBiZWNvbWVzIHJlYWR5LlxyXG5cdFx0aWYgKCAhYXBwbHlQYXRjaCgpICkge1xyXG5cdFx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFxyXG5cdFx0XHRcdCd3cGJjX2JmYl9pbnNwZWN0b3JfcmVhZHknLFxyXG5cdFx0XHRcdGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0XHRcdGFwcGx5UGF0Y2goKTtcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdHsgb25jZTogdHJ1ZSB9XHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblx0fSkoKTtcclxuXHJcbn0oIHdpbmRvdywgZG9jdW1lbnQgKSk7XHJcbiIsIi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4vLyA9PSBGaWxlICAvaW5jbHVkZXMvcGFnZS1mb3JtLWJ1aWxkZXIvX19qcy9jb3JlL2JmYi1zeW5jLWNvZGUtdG9vbHMtdGFiLmpzICAgfCAyMDI2LTA0LTA2IHwgMTY6MzhcclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbihmdW5jdGlvbiAoIHcsIGQgKSB7XHJcblx0J3VzZSBzdHJpY3QnO1xyXG5cclxuXHQvKipcclxuXHQgKiBEaXNwYXRjaCByZXF1ZXN0IHRvIHNob3cgYSByaWdodCBzaWRlYmFyIHBhbmVsLlxyXG5cdCAqXHJcblx0ICogQHBhcmFtIHtzdHJpbmd9IHBhbmVsX2lkXHJcblx0ICogQHBhcmFtIHtzdHJpbmd9IHRhYl9pZFxyXG5cdCAqXHJcblx0ICogQHJldHVybiB7dm9pZH1cclxuXHQgKi9cclxuXHRmdW5jdGlvbiB3cGJjX2JmYl9fZGlzcGF0Y2hfc2hvd19wYW5lbCggcGFuZWxfaWQsIHRhYl9pZCApIHtcclxuXHJcblx0XHR2YXIgZXZlbnRfZGV0YWlsO1xyXG5cclxuXHRcdGlmICggISBwYW5lbF9pZCB8fCAhIHRhYl9pZCApIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdGV2ZW50X2RldGFpbCA9IHtcclxuXHRcdFx0cGFuZWxfaWQ6IHBhbmVsX2lkLFxyXG5cdFx0XHR0YWJfaWQgIDogdGFiX2lkXHJcblx0XHR9O1xyXG5cclxuXHRcdGlmICggdHlwZW9mIHcud3BiY19iZmJfX2Rpc3BhdGNoX2V2ZW50X3NhZmUgPT09ICdmdW5jdGlvbicgKSB7XHJcblx0XHRcdHcud3BiY19iZmJfX2Rpc3BhdGNoX2V2ZW50X3NhZmUoICd3cGJjX2JmYjpzaG93X3BhbmVsJywgZXZlbnRfZGV0YWlsICk7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHRkLmRpc3BhdGNoRXZlbnQoXHJcblx0XHRcdG5ldyBDdXN0b21FdmVudChcclxuXHRcdFx0XHQnd3BiY19iZmI6c2hvd19wYW5lbCcsXHJcblx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0ZGV0YWlsOiBldmVudF9kZXRhaWxcclxuXHRcdFx0XHR9XHJcblx0XHRcdClcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBTeW5jIHJpZ2h0IHNpZGViYXIgd2l0aCB0b3AgbW9kZSB0YWJzLlxyXG5cdCAqXHJcblx0ICogVXNlcyB0b3AgdGFicyBuYXYgYXR0cmlidXRlIGBkYXRhLWFjdGl2ZS10YWJgIGFzIHRoZSBzb3VyY2Ugb2YgdHJ1dGguXHJcblx0ICogVGhpcyBhdm9pZHMgZmFsc2UgZGV0ZWN0aW9uIG9uIGluaXRpYWwgcGFnZSBsb2FkLCBiZWNhdXNlIHRvcCBwYW5lbHMgYXJlXHJcblx0ICogaGlkZGVuIGJ5IGlubGluZSBzdHlsZSBgZGlzcGxheTpub25lYCwgbm90IGJ5IHRoZSBgaGlkZGVuYCBhdHRyaWJ1dGUuXHJcblx0ICovXHJcblx0Y2xhc3MgV1BCQ19CRkJfTW9kZV9SaWdodGJhcl9TeW5jIHtcclxuXHJcblx0XHRjb25zdHJ1Y3RvcigpIHtcclxuXHRcdFx0dGhpcy50b3BfdGFic19uYXYgICAgICA9IG51bGw7XHJcblx0XHRcdHRoaXMuYWR2YW5jZWRfdGFiX3dyYXAgPSBudWxsO1xyXG5cdFx0XHR0aGlzLmFkdmFuY2VkX3BhbmVsICAgID0gbnVsbDtcclxuXHRcdFx0dGhpcy5tdXRhdGlvbl9vYnNlcnZlciA9IG51bGw7XHJcblx0XHRcdHRoaXMubGFzdF9tb2RlICAgICAgICAgPSAnJztcclxuXHRcdFx0dGhpcy5zeW5jX3JpZ2h0YmFyX21vZGUgPSB0aGlzLnN5bmNfcmlnaHRiYXJfbW9kZS5iaW5kKCB0aGlzICk7XHJcblx0XHRcdHRoaXMuaGFuZGxlX2NsaWNrICAgICAgPSB0aGlzLmhhbmRsZV9jbGljay5iaW5kKCB0aGlzICk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBJbml0IGNvbnRyb2xsZXIuXHJcblx0XHQgKlxyXG5cdFx0ICogQHJldHVybiB7dm9pZH1cclxuXHRcdCAqL1xyXG5cdFx0aW5pdCgpIHtcclxuXHRcdFx0dGhpcy50b3BfdGFic19uYXYgICAgICA9IGQuZ2V0RWxlbWVudEJ5SWQoICd3cGJjX2JmYl9fdG9wX2hvcmlzb250YWxfbmF2JyApO1xyXG5cdFx0XHR0aGlzLmFkdmFuY2VkX3RhYl93cmFwID0gZC5xdWVyeVNlbGVjdG9yKCAnLndwYmNfYmZiX19yaWdodGJhcl90YWJfd3JhcC0tYWR2YW5jZWRfdG9vbHMnICk7XHJcblx0XHRcdHRoaXMuYWR2YW5jZWRfcGFuZWwgICAgPSBkLmdldEVsZW1lbnRCeUlkKCAnd3BiY19iZmJfX2luc3BlY3Rvcl9hZHZhbmNlZF90b29scycgKTtcclxuXHJcblx0XHRcdGlmICggISB0aGlzLmFkdmFuY2VkX3RhYl93cmFwIHx8ICEgdGhpcy5hZHZhbmNlZF9wYW5lbCApIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIE9ic2VydmUgYWN0aXZlIHRhYiBjaGFuZ2VzIGluIHRoZSB0b3AgdGFicyBuYXYuXHJcblx0XHRcdGlmICggdGhpcy50b3BfdGFic19uYXYgKSB7XHJcblx0XHRcdFx0dGhpcy5tdXRhdGlvbl9vYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKCB0aGlzLnN5bmNfcmlnaHRiYXJfbW9kZSApO1xyXG5cdFx0XHRcdHRoaXMubXV0YXRpb25fb2JzZXJ2ZXIub2JzZXJ2ZShcclxuXHRcdFx0XHRcdHRoaXMudG9wX3RhYnNfbmF2LFxyXG5cdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRhdHRyaWJ1dGVzICAgICA6IHRydWUsXHJcblx0XHRcdFx0XHRcdGF0dHJpYnV0ZUZpbHRlcjogWyAnZGF0YS1hY3RpdmUtdGFiJyBdXHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gRmFsbGJhY2sgZm9yIGNsaWNrLWRyaXZlbiBzd2l0Y2hpbmcuXHJcblx0XHRcdGQuYWRkRXZlbnRMaXN0ZW5lciggJ2NsaWNrJywgdGhpcy5oYW5kbGVfY2xpY2ssIHRydWUgKTtcclxuXHJcblx0XHRcdC8vIEluaXRpYWwgc3luYy5cclxuXHRcdFx0dGhpcy5zeW5jX3JpZ2h0YmFyX21vZGUoKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEdldCBhY3RpdmUgdG9wIHRhYiBpZC5cclxuXHRcdCAqXHJcblx0XHQgKiBQcmlvcml0eTpcclxuXHRcdCAqIDEuIGRhdGEtYWN0aXZlLXRhYiBmcm9tIHRvcCB0YWJzIG5hdlxyXG5cdFx0ICogMi4gYWN0aXZlIENTUyBjbGFzcyBpbiBuYXZcclxuXHRcdCAqIDMuIHZpc2libGUgdG9wIHBhbmVsIGZhbGxiYWNrXHJcblx0XHQgKlxyXG5cdFx0ICogQHJldHVybiB7c3RyaW5nfVxyXG5cdFx0ICovXHJcblx0XHRnZXRfYWN0aXZlX3RvcF90YWJfaWQoKSB7XHJcblx0XHRcdHZhciBhY3RpdmVfdGFiX2lkID0gJyc7XHJcblx0XHRcdHZhciBhY3RpdmVfbGluayAgID0gbnVsbDtcclxuXHRcdFx0dmFyIGFkdmFuY2VkX3BhbmVsID0gbnVsbDtcclxuXHRcdFx0dmFyIGJ1aWxkZXJfcGFuZWwgID0gbnVsbDtcclxuXHJcblx0XHRcdGlmICggdGhpcy50b3BfdGFic19uYXYgKSB7XHJcblx0XHRcdFx0YWN0aXZlX3RhYl9pZCA9IFN0cmluZyggdGhpcy50b3BfdGFic19uYXYuZ2V0QXR0cmlidXRlKCAnZGF0YS1hY3RpdmUtdGFiJyApIHx8ICcnICkudHJpbSgpO1xyXG5cdFx0XHRcdGlmICggJycgIT09IGFjdGl2ZV90YWJfaWQgKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gYWN0aXZlX3RhYl9pZDtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGFjdGl2ZV9saW5rID0gdGhpcy50b3BfdGFic19uYXYucXVlcnlTZWxlY3RvciggJy53cGJjX3VpX2VsX19ob3Jpc19uYXZfaXRlbS5hY3RpdmUgW2RhdGEtd3BiYy1iZmItdGFiXScgKTtcclxuXHRcdFx0XHRpZiAoIGFjdGl2ZV9saW5rICkge1xyXG5cdFx0XHRcdFx0YWN0aXZlX3RhYl9pZCA9IFN0cmluZyggYWN0aXZlX2xpbmsuZ2V0QXR0cmlidXRlKCAnZGF0YS13cGJjLWJmYi10YWInICkgfHwgJycgKS50cmltKCk7XHJcblx0XHRcdFx0XHRpZiAoICcnICE9PSBhY3RpdmVfdGFiX2lkICkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gYWN0aXZlX3RhYl9pZDtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIEZpbmFsIGZhbGxiYWNrOiBkZXRlY3QgdmlzaWJsZSBwYW5lbC5cclxuXHRcdFx0YWR2YW5jZWRfcGFuZWwgPSBkLnF1ZXJ5U2VsZWN0b3IoICcud3BiY19iZmJfX3RvcF90YWJfc2VjdGlvbl9fYWR2YW5jZWRfdGFiJyApO1xyXG5cdFx0XHRidWlsZGVyX3BhbmVsICA9IGQucXVlcnlTZWxlY3RvciggJy53cGJjX2JmYl9fdG9wX3RhYl9zZWN0aW9uX19idWlsZGVyX3RhYicgKTtcclxuXHJcblx0XHRcdGlmICggdGhpcy5pc19lbGVtZW50X3Zpc2libGUoIGFkdmFuY2VkX3BhbmVsICkgKSB7XHJcblx0XHRcdFx0cmV0dXJuICdhZHZhbmNlZF90YWInO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICggdGhpcy5pc19lbGVtZW50X3Zpc2libGUoIGJ1aWxkZXJfcGFuZWwgKSApIHtcclxuXHRcdFx0XHRyZXR1cm4gJ2J1aWxkZXJfdGFiJztcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cmV0dXJuICcnO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQ2hlY2sgZWxlbWVudCB2aXNpYmlsaXR5LlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR8bnVsbH0gZWxcclxuXHRcdCAqXHJcblx0XHQgKiBAcmV0dXJuIHtib29sZWFufVxyXG5cdFx0ICovXHJcblx0XHRpc19lbGVtZW50X3Zpc2libGUoIGVsICkge1xyXG5cdFx0XHR2YXIgc3R5bGU7XHJcblxyXG5cdFx0XHRpZiAoICEgZWwgKSB7XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRzdHlsZSA9IHcuZ2V0Q29tcHV0ZWRTdHlsZSggZWwgKTtcclxuXHJcblx0XHRcdGlmICggISBzdHlsZSApIHtcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICggJ25vbmUnID09PSBzdHlsZS5kaXNwbGF5ICkge1xyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKCAnaGlkZGVuJyA9PT0gc3R5bGUudmlzaWJpbGl0eSApIHtcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQ2hlY2sgaWYgQWR2YW5jZWQgTW9kZSBpcyBhY3RpdmUuXHJcblx0XHQgKlxyXG5cdFx0ICogQHJldHVybiB7Ym9vbGVhbn1cclxuXHRcdCAqL1xyXG5cdFx0aXNfYWR2YW5jZWRfbW9kZV9hY3RpdmUoKSB7XHJcblx0XHRcdHJldHVybiAoICdhZHZhbmNlZF90YWInID09PSB0aGlzLmdldF9hY3RpdmVfdG9wX3RhYl9pZCgpICk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBTaG93IENvZGUgVG9vbHMgdGFiIGJ1dHRvbi5cclxuXHRcdCAqXHJcblx0XHQgKiBAcmV0dXJuIHt2b2lkfVxyXG5cdFx0ICovXHJcblx0XHRzaG93X2FkdmFuY2VkX3Rvb2xzX3RhYigpIHtcclxuXHRcdFx0dGhpcy5hZHZhbmNlZF90YWJfd3JhcC5yZW1vdmVBdHRyaWJ1dGUoICdoaWRkZW4nICk7XHJcblx0XHRcdHRoaXMuYWR2YW5jZWRfdGFiX3dyYXAuc2V0QXR0cmlidXRlKCAnYXJpYS1oaWRkZW4nLCAnZmFsc2UnICk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBIaWRlIENvZGUgVG9vbHMgdGFiIGJ1dHRvbi5cclxuXHRcdCAqXHJcblx0XHQgKiBAcmV0dXJuIHt2b2lkfVxyXG5cdFx0ICovXHJcblx0XHRoaWRlX2FkdmFuY2VkX3Rvb2xzX3RhYigpIHtcclxuXHRcdFx0dGhpcy5hZHZhbmNlZF90YWJfd3JhcC5zZXRBdHRyaWJ1dGUoICdoaWRkZW4nLCAndHJ1ZScgKTtcclxuXHRcdFx0dGhpcy5hZHZhbmNlZF90YWJfd3JhcC5zZXRBdHRyaWJ1dGUoICdhcmlhLWhpZGRlbicsICd0cnVlJyApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQ2hlY2sgaWYgQ29kZSBUb29scyBwYW5lbCBpcyBjdXJyZW50bHkgYWN0aXZlLlxyXG5cdFx0ICpcclxuXHRcdCAqIEByZXR1cm4ge2Jvb2xlYW59XHJcblx0XHQgKi9cclxuXHRcdGlzX2FkdmFuY2VkX3Rvb2xzX3BhbmVsX2FjdGl2ZSgpIHtcclxuXHRcdFx0cmV0dXJuICEhICggdGhpcy5hZHZhbmNlZF9wYW5lbCAmJiAhIHRoaXMuYWR2YW5jZWRfcGFuZWwuaGFzQXR0cmlidXRlKCAnaGlkZGVuJyApICk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBPcGVuIENvZGUgVG9vbHMgcGFuZWwuXHJcblx0XHQgKlxyXG5cdFx0ICogQHJldHVybiB7dm9pZH1cclxuXHRcdCAqL1xyXG5cdFx0b3Blbl9hZHZhbmNlZF90b29sc19wYW5lbCgpIHtcclxuXHRcdFx0d3BiY19iZmJfX2Rpc3BhdGNoX3Nob3dfcGFuZWwoICd3cGJjX2JmYl9faW5zcGVjdG9yX2FkdmFuY2VkX3Rvb2xzJywgJ3dwYmNfdGFiX2FkdmFuY2VkX3Rvb2xzJyApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogT3BlbiBkZWZhdWx0IGJ1aWxkZXIgcmlnaHRiYXIgcGFuZWwuXHJcblx0XHQgKlxyXG5cdFx0ICogQHJldHVybiB7dm9pZH1cclxuXHRcdCAqL1xyXG5cdFx0b3Blbl9kZWZhdWx0X3Zpc3VhbF9wYW5lbCgpIHtcclxuXHRcdFx0d3BiY19iZmJfX2Rpc3BhdGNoX3Nob3dfcGFuZWwoICd3cGJjX2JmYl9fcGFsZXR0ZV9hZGRfbmV3JywgJ3dwYmNfdGFiX2xpYnJhcnknICk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBTeW5jIHJpZ2h0YmFyIG1vZGUgd2l0aCB0b3AgdGFicyBtb2RlLlxyXG5cdFx0ICpcclxuXHRcdCAqIEByZXR1cm4ge3ZvaWR9XHJcblx0XHQgKi9cclxuXHRcdHN5bmNfcmlnaHRiYXJfbW9kZSgpIHtcclxuXHRcdFx0dmFyIGlzX2FkdmFuY2VkX21vZGUgPSB0aGlzLmlzX2FkdmFuY2VkX21vZGVfYWN0aXZlKCk7XHJcblxyXG5cdFx0XHRpZiAoIGlzX2FkdmFuY2VkX21vZGUgKSB7XHJcblx0XHRcdFx0dGhpcy5zaG93X2FkdmFuY2VkX3Rvb2xzX3RhYigpO1xyXG5cclxuXHRcdFx0XHRpZiAoICdhZHZhbmNlZCcgIT09IHRoaXMubGFzdF9tb2RlICkge1xyXG5cdFx0XHRcdFx0dGhpcy5vcGVuX2FkdmFuY2VkX3Rvb2xzX3BhbmVsKCk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHR0aGlzLmxhc3RfbW9kZSA9ICdhZHZhbmNlZCc7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoIHRoaXMuaXNfYWR2YW5jZWRfdG9vbHNfcGFuZWxfYWN0aXZlKCkgKSB7XHJcblx0XHRcdFx0dGhpcy5vcGVuX2RlZmF1bHRfdmlzdWFsX3BhbmVsKCk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHRoaXMuaGlkZV9hZHZhbmNlZF90b29sc190YWIoKTtcclxuXHRcdFx0dGhpcy5sYXN0X21vZGUgPSAnYnVpbGRlcic7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBGYWxsYmFjayBjbGljayBoYW5kbGVyIGZvciB0b3AgdGFicy5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxyXG5cdFx0ICpcclxuXHRcdCAqIEByZXR1cm4ge3ZvaWR9XHJcblx0XHQgKi9cclxuXHRcdGhhbmRsZV9jbGljayggZXZlbnQgKSB7XHJcblx0XHRcdHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQuY2xvc2VzdCggJ1tkYXRhLXdwYmMtYmZiLXRhYl0nICk7XHJcblx0XHRcdHZhciB0aGlzX29iaiA9IHRoaXM7XHJcblxyXG5cdFx0XHRpZiAoICEgdGFyZ2V0ICkge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0c2V0VGltZW91dChcclxuXHRcdFx0XHRmdW5jdGlvbiAoKSB7XHJcblx0XHRcdFx0XHR0aGlzX29iai5zeW5jX3JpZ2h0YmFyX21vZGUoKTtcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdDBcclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGlmICggZC5yZWFkeVN0YXRlID09PSAnbG9hZGluZycgKSB7XHJcblx0XHRkLmFkZEV2ZW50TGlzdGVuZXIoXHJcblx0XHRcdCdET01Db250ZW50TG9hZGVkJyxcclxuXHRcdFx0ZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRcdCggbmV3IFdQQkNfQkZCX01vZGVfUmlnaHRiYXJfU3luYygpICkuaW5pdCgpO1xyXG5cdFx0XHR9XHJcblx0XHQpO1xyXG5cdH0gZWxzZSB7XHJcblx0XHQoIG5ldyBXUEJDX0JGQl9Nb2RlX1JpZ2h0YmFyX1N5bmMoKSApLmluaXQoKTtcclxuXHR9XHJcblxyXG59KSggd2luZG93LCBkb2N1bWVudCApOyIsIi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4vLyA9PSBGaWxlICAvaW5jbHVkZXMvcGFnZS1mb3JtLWJ1aWxkZXIvX291dC9jb3JlL2JmYi1pbnNwZWN0b3IuanMgPT0gVGltZSBwb2ludDogMjAyNS0wOS0wNiAxNDowOFxyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuKGZ1bmN0aW9uICh3KSB7XHJcblx0J3VzZSBzdHJpY3QnO1xyXG5cclxuXHQvLyAxKSBBY3Rpb25zIHJlZ2lzdHJ5LlxyXG5cclxuXHQvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIChjdHg6IEluc3BlY3RvckFjdGlvbkNvbnRleHQpID0+IHZvaWQ+fSAqL1xyXG5cdGNvbnN0IF9fSU5TUEVDVE9SX0FDVElPTlNfTUFQX18gPSBPYmplY3QuY3JlYXRlKCBudWxsICk7XHJcblxyXG5cdC8vIEJ1aWx0LWlucy5cclxuXHRfX0lOU1BFQ1RPUl9BQ1RJT05TX01BUF9fWydkZXNlbGVjdCddID0gKHsgYnVpbGRlciB9KSA9PiB7XHJcblx0XHRidWlsZGVyPy5zZWxlY3RfZmllbGQ/LiggbnVsbCApO1xyXG5cdH07XHJcblxyXG5cdF9fSU5TUEVDVE9SX0FDVElPTlNfTUFQX19bJ3Njcm9sbHRvJ10gPSAoeyBidWlsZGVyLCBlbCB9KSA9PiB7XHJcblx0XHRpZiAoICFlbCB8fCAhZG9jdW1lbnQuYm9keS5jb250YWlucyggZWwgKSApIHJldHVybjtcclxuXHRcdGJ1aWxkZXI/LnNlbGVjdF9maWVsZD8uKCBlbCwgeyBzY3JvbGxJbnRvVmlldzogdHJ1ZSB9ICk7XHJcblx0XHRlbC5jbGFzc0xpc3QuYWRkKCAnd3BiY19iZmJfX3Njcm9sbC1wdWxzZScgKTtcclxuXHRcdHNldFRpbWVvdXQoICgpID0+IGVsLmNsYXNzTGlzdC5yZW1vdmUoICd3cGJjX2JmYl9fc2Nyb2xsLXB1bHNlJyApLCA3MDAgKTtcclxuXHR9O1xyXG5cclxuXHRfX0lOU1BFQ1RPUl9BQ1RJT05TX01BUF9fWydtb3ZlLXVwJ10gPSAoeyBidWlsZGVyLCBlbCB9KSA9PiB7XHJcblx0XHRpZiAoICFlbCApIHJldHVybjtcclxuXHRcdGJ1aWxkZXI/Lm1vdmVfaXRlbT8uKCBlbCwgJ3VwJyApO1xyXG5cdFx0Ly8gU2Nyb2xsIGFmdGVyIHRoZSBET00gaGFzIHNldHRsZWQuXHJcblx0XHRyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gX19JTlNQRUNUT1JfQUNUSU9OU19NQVBfX1snc2Nyb2xsdG8nXSh7IGJ1aWxkZXIsIGVsIH0pKTtcclxuXHR9O1xyXG5cclxuXHRfX0lOU1BFQ1RPUl9BQ1RJT05TX01BUF9fWydtb3ZlLWRvd24nXSA9ICh7IGJ1aWxkZXIsIGVsIH0pID0+IHtcclxuXHRcdGlmICggIWVsICkgcmV0dXJuO1xyXG5cdFx0YnVpbGRlcj8ubW92ZV9pdGVtPy4oIGVsLCAnZG93bicgKTtcclxuXHRcdC8vIFNjcm9sbCBhZnRlciB0aGUgRE9NIGhhcyBzZXR0bGVkLlxyXG5cdFx0cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IF9fSU5TUEVDVE9SX0FDVElPTlNfTUFQX19bJ3Njcm9sbHRvJ10oeyBidWlsZGVyLCBlbCB9KSk7XHJcblx0fTtcclxuXHJcblx0X19JTlNQRUNUT1JfQUNUSU9OU19NQVBfX1snZGVsZXRlJ10gPSAoeyBidWlsZGVyLCBlbCwgY29uZmlybSA9IHcuY29uZmlybSB9KSA9PiB7XHJcblx0XHRpZiAoICFlbCApIHJldHVybjtcclxuXHRcdGNvbnN0IGlzX2ZpZWxkID0gZWwuY2xhc3NMaXN0LmNvbnRhaW5zKCAnd3BiY19iZmJfX2ZpZWxkJyApO1xyXG5cdFx0Y29uc3QgbGFiZWwgICAgPSBpc19maWVsZFxyXG5cdFx0XHQ/IChlbC5xdWVyeVNlbGVjdG9yKCAnLndwYmNfYmZiX19maWVsZC1sYWJlbCcgKT8udGV4dENvbnRlbnQgfHwgZWwuZGF0YXNldD8uaWQgfHwgJ2ZpZWxkJylcclxuXHRcdFx0OiAoZWwuZGF0YXNldD8uaWQgfHwgJ3NlY3Rpb24nKTtcclxuXHJcblx0XHRVSS5Nb2RhbF9Db25maXJtX0RlbGV0ZS5vcGVuKCBsYWJlbCwgKCkgPT4ge1xyXG5cdFx0XHQvLyBDZW50cmFsIGNvbW1hbmQgd2lsbCByZW1vdmUsIGVtaXQgZXZlbnRzLCBhbmQgcmVzZWxlY3QgbmVpZ2hib3IgKHdoaWNoIHJlLWJpbmRzIEluc3BlY3RvcikuXHJcblx0XHRcdGJ1aWxkZXI/LmRlbGV0ZV9pdGVtPy4oIGVsICk7XHJcblx0XHR9ICk7XHJcblxyXG5cdH07XHJcblxyXG5cdF9fSU5TUEVDVE9SX0FDVElPTlNfTUFQX19bJ2R1cGxpY2F0ZSddID0gKHsgYnVpbGRlciwgZWwgfSkgPT4ge1xyXG5cdFx0aWYgKCAhZWwgKSByZXR1cm47XHJcblx0XHRjb25zdCBjbG9uZSA9IGJ1aWxkZXI/LmR1cGxpY2F0ZV9pdGVtPy4oIGVsICk7XHJcblx0XHRpZiAoIGNsb25lICkgYnVpbGRlcj8uc2VsZWN0X2ZpZWxkPy4oIGNsb25lLCB7IHNjcm9sbEludG9WaWV3OiB0cnVlIH0gKTtcclxuXHR9O1xyXG5cclxuXHQvLyBQdWJsaWMgQVBJLlxyXG5cdHcuV1BCQ19CRkJfSW5zcGVjdG9yX0FjdGlvbnMgPSB7XHJcblx0XHRydW4obmFtZSwgY3R4KSB7XHJcblx0XHRcdGNvbnN0IGZuID0gX19JTlNQRUNUT1JfQUNUSU9OU19NQVBfX1tuYW1lXTtcclxuXHRcdFx0aWYgKCB0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicgKSBmbiggY3R4ICk7XHJcblx0XHRcdGVsc2UgY29uc29sZS53YXJuKCAnV1BCQy4gSW5zcGVjdG9yIGFjdGlvbiBub3QgZm91bmQ6JywgbmFtZSApO1xyXG5cdFx0fSxcclxuXHRcdHJlZ2lzdGVyKG5hbWUsIGhhbmRsZXIpIHtcclxuXHRcdFx0aWYgKCAhbmFtZSB8fCB0eXBlb2YgaGFuZGxlciAhPT0gJ2Z1bmN0aW9uJyApIHtcclxuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoICdyZWdpc3RlcihuYW1lLCBoYW5kbGVyKTogaW52YWxpZCBhcmd1bWVudHMnICk7XHJcblx0XHRcdH1cclxuXHRcdFx0X19JTlNQRUNUT1JfQUNUSU9OU19NQVBfX1tuYW1lXSA9IGhhbmRsZXI7XHJcblx0XHR9LFxyXG5cdFx0aGFzKG5hbWUpIHtcclxuXHRcdFx0cmV0dXJuIHR5cGVvZiBfX0lOU1BFQ1RPUl9BQ1RJT05TX01BUF9fW25hbWVdID09PSAnZnVuY3Rpb24nO1xyXG5cdFx0fVxyXG5cdH07XHJcblxyXG5cdC8vIDIpIEluc3BlY3RvciBGYWN0b3J5LlxyXG5cclxuXHR2YXIgVUkgPSAody5XUEJDX0JGQl9Db3JlLlVJID0gdy5XUEJDX0JGQl9Db3JlLlVJIHx8IHt9KTtcclxuXHJcblx0Ly8gR2xvYmFsIEh5YnJpZCsrIHJlZ2lzdHJpZXMgKGtlZXAgcHVibGljKS5cclxuXHR3LndwYmNfYmZiX2luc3BlY3Rvcl9mYWN0b3J5X3Nsb3RzICAgICAgPSB3LndwYmNfYmZiX2luc3BlY3Rvcl9mYWN0b3J5X3Nsb3RzIHx8IHt9O1xyXG5cdHcud3BiY19iZmJfaW5zcGVjdG9yX2ZhY3RvcnlfdmFsdWVfZnJvbSA9IHcud3BiY19iZmJfaW5zcGVjdG9yX2ZhY3RvcnlfdmFsdWVfZnJvbSB8fCB7fTtcclxuXHJcblx0Ly8gRGVmaW5lIEZhY3Rvcnkgb25seSBpZiBtaXNzaW5nIChubyBlYXJseSByZXR1cm4gZm9yIHRoZSB3aG9sZSBidW5kbGUpLlxyXG5cdC8vIGFsd2F5cyBkZWZpbmUvcmVwbGFjZSBGYWN0b3J5XHJcblx0e1xyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogVXRpbGl0eTogY3JlYXRlIGVsZW1lbnQgd2l0aCBhdHRyaWJ1dGVzIGFuZCBjaGlsZHJlbi5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gdGFnXHJcblx0XHQgKiBAcGFyYW0ge09iamVjdD19IGF0dHJzXHJcblx0XHQgKiBAcGFyYW0geyhOb2RlfHN0cmluZ3xBcnJheTxOb2RlfHN0cmluZz4pPX0gY2hpbGRyZW5cclxuXHRcdCAqIEByZXR1cm5zIHtIVE1MRWxlbWVudH1cclxuXHRcdCAqL1xyXG5cdFx0ZnVuY3Rpb24gZWwodGFnLCBhdHRycywgY2hpbGRyZW4pIHtcclxuXHRcdFx0dmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCB0YWcgKTtcclxuXHRcdFx0aWYgKCBhdHRycyApIHtcclxuXHRcdFx0XHRPYmplY3Qua2V5cyggYXR0cnMgKS5mb3JFYWNoKCBmdW5jdGlvbiAoaykge1xyXG5cdFx0XHRcdFx0dmFyIHYgPSBhdHRyc1trXTtcclxuXHRcdFx0XHRcdGlmICggdiA9PSBudWxsICkgcmV0dXJuO1xyXG5cdFx0XHRcdFx0aWYgKCBrID09PSAnY2xhc3MnICkge1xyXG5cdFx0XHRcdFx0XHRub2RlLmNsYXNzTmFtZSA9IHY7XHJcblx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGlmICggayA9PT0gJ2RhdGFzZXQnICkge1xyXG5cdFx0XHRcdFx0XHRPYmplY3Qua2V5cyggdiApLmZvckVhY2goIGZ1bmN0aW9uIChkaykge1xyXG5cdFx0XHRcdFx0XHRcdG5vZGUuZGF0YXNldFtka10gPSBTdHJpbmcoIHZbZGtdICk7XHJcblx0XHRcdFx0XHRcdH0gKTtcclxuXHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKCBrID09PSAnY2hlY2tlZCcgJiYgdHlwZW9mIHYgPT09ICdib29sZWFuJyApIHtcclxuXHRcdFx0XHRcdFx0aWYgKCB2ICkgbm9kZS5zZXRBdHRyaWJ1dGUoICdjaGVja2VkJywgJ2NoZWNrZWQnICk7XHJcblx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGlmICggayA9PT0gJ2Rpc2FibGVkJyAmJiB0eXBlb2YgdiA9PT0gJ2Jvb2xlYW4nICkge1xyXG5cdFx0XHRcdFx0XHRpZiAoIHYgKSBub2RlLnNldEF0dHJpYnV0ZSggJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJyApO1xyXG5cdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHQvLyBub3JtYWxpemUgYm9vbGVhbiBhdHRyaWJ1dGVzIHRvIHN0cmluZ3MuXHJcblx0XHRcdFx0XHRpZiAoIHR5cGVvZiB2ID09PSAnYm9vbGVhbicgKSB7XHJcblx0XHRcdFx0XHRcdG5vZGUuc2V0QXR0cmlidXRlKCBrLCB2ID8gJ3RydWUnIDogJ2ZhbHNlJyApO1xyXG5cdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRub2RlLnNldEF0dHJpYnV0ZSggaywgU3RyaW5nKCB2ICkgKTtcclxuXHRcdFx0XHR9ICk7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKCBjaGlsZHJlbiApIHtcclxuXHRcdFx0XHQoQXJyYXkuaXNBcnJheSggY2hpbGRyZW4gKSA/IGNoaWxkcmVuIDogWyBjaGlsZHJlbiBdKS5mb3JFYWNoKCBmdW5jdGlvbiAoYykge1xyXG5cdFx0XHRcdFx0aWYgKCBjID09IG51bGwgKSByZXR1cm47XHJcblx0XHRcdFx0XHRub2RlLmFwcGVuZENoaWxkKCAodHlwZW9mIGMgPT09ICdzdHJpbmcnKSA/IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCBjICkgOiBjICk7XHJcblx0XHRcdFx0fSApO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBub2RlO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQnVpbGQgYSB0b2dnbGUgY29udHJvbCByb3cgKGNoZWNrYm94IHJlbmRlcmVkIGFzIHRvZ2dsZSkuXHJcblx0XHQgKlxyXG5cdFx0ICogU3RydWN0dXJlOlxyXG5cdFx0ICogPGRpdiBjbGFzcz1cImluc3BlY3Rvcl9fcm93IGluc3BlY3Rvcl9fcm93LS10b2dnbGVcIj5cclxuXHRcdCAqICAgPGRpdiBjbGFzcz1cImluc3BlY3Rvcl9fY29udHJvbCB3cGJjX3VpX190b2dnbGVcIj5cclxuXHRcdCAqICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgaWQ9XCJJRFwiIGRhdGEtaW5zcGVjdG9yLWtleT1cIktFWVwiIGNsYXNzPVwiaW5zcGVjdG9yX19pbnB1dFwiIGNoZWNrZWQ+XHJcblx0XHQgKiAgICAgPGxhYmVsIGNsYXNzPVwid3BiY191aV9fdG9nZ2xlX2ljb25cIiAgZm9yPVwiSURcIj48L2xhYmVsPlxyXG5cdFx0ICogICAgIDxsYWJlbCBjbGFzcz1cIndwYmNfdWlfX3RvZ2dsZV9sYWJlbFwiIGZvcj1cIklEXCI+TGFiZWwgdGV4dDwvbGFiZWw+XHJcblx0XHQgKiAgIDwvZGl2PlxyXG5cdFx0ICogPC9kaXY+XHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IGlucHV0X2lkXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30ga2V5XHJcblx0XHQgKiBAcGFyYW0ge2Jvb2xlYW59IGNoZWNrZWRcclxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBsYWJlbF90ZXh0XHJcblx0XHQgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9XHJcblx0XHQgKi9cclxuXHRcdGZ1bmN0aW9uIGJ1aWxkX3RvZ2dsZV9yb3coIGlucHV0X2lkLCBrZXksIGNoZWNrZWQsIGxhYmVsX3RleHQgKSB7XHJcblxyXG5cdFx0XHR2YXIgcm93X2VsICAgID0gZWwoICdkaXYnLCB7ICdjbGFzcyc6ICdpbnNwZWN0b3JfX3JvdyBpbnNwZWN0b3JfX3Jvdy0tdG9nZ2xlJyB9ICk7XHJcblx0XHRcdHZhciBjdHJsX3dyYXAgPSBlbCggJ2RpdicsIHsgJ2NsYXNzJzogJ2luc3BlY3Rvcl9fY29udHJvbCB3cGJjX3VpX190b2dnbGUnIH0gKTtcclxuXHJcblx0XHRcdHZhciBpbnB1dF9lbCA9IGVsKCAnaW5wdXQnLCB7XHJcblx0XHRcdFx0aWQgICAgICAgICAgICAgICAgICA6IGlucHV0X2lkLFxyXG5cdFx0XHRcdHR5cGUgICAgICAgICAgICAgICAgOiAnY2hlY2tib3gnLFxyXG5cdFx0XHRcdCdkYXRhLWluc3BlY3Rvci1rZXknOiBrZXksXHJcblx0XHRcdFx0J2NsYXNzJyAgICAgICAgICAgICA6ICdpbnNwZWN0b3JfX2lucHV0JyxcclxuXHRcdFx0XHRjaGVja2VkICAgICAgICAgICAgIDogISFjaGVja2VkLFxyXG5cdFx0XHRcdHJvbGUgICAgICAgICAgICAgICAgOiAnc3dpdGNoJyxcclxuXHRcdFx0XHQnYXJpYS1jaGVja2VkJyAgICAgIDogISFjaGVja2VkXHJcblx0XHRcdH0gKTtcclxuXHRcdFx0dmFyIGljb25fbGJsID0gZWwoICdsYWJlbCcsIHsgJ2NsYXNzJzogJ3dwYmNfdWlfX3RvZ2dsZV9pY29uJywgJ2Zvcic6IGlucHV0X2lkIH0gKTtcclxuXHRcdFx0dmFyIHRleHRfbGJsID0gZWwoICdsYWJlbCcsIHsgJ2NsYXNzJzogJ3dwYmNfdWlfX3RvZ2dsZV9sYWJlbCcsICdmb3InOiBpbnB1dF9pZCB9LCBsYWJlbF90ZXh0IHx8ICcnICk7XHJcblxyXG5cdFx0XHRjdHJsX3dyYXAuYXBwZW5kQ2hpbGQoIGlucHV0X2VsICk7XHJcblx0XHRcdGN0cmxfd3JhcC5hcHBlbmRDaGlsZCggaWNvbl9sYmwgKTtcclxuXHRcdFx0Y3RybF93cmFwLmFwcGVuZENoaWxkKCB0ZXh0X2xibCApO1xyXG5cclxuXHRcdFx0cm93X2VsLmFwcGVuZENoaWxkKCBjdHJsX3dyYXAgKTtcclxuXHRcdFx0cmV0dXJuIHJvd19lbDtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHQgKiBVdGlsaXR5OiBjaG9vc2UgaW5pdGlhbCB2YWx1ZSBmcm9tIGRhdGEgb3Igc2NoZW1hIGRlZmF1bHQuXHJcblx0ICovXHJcblx0XHRmdW5jdGlvbiBnZXRfaW5pdGlhbF92YWx1ZShrZXksIGRhdGEsIHByb3BzX3NjaGVtYSkge1xyXG5cdFx0XHRpZiAoIGRhdGEgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKCBkYXRhLCBrZXkgKSApIHJldHVybiBkYXRhW2tleV07XHJcblx0XHRcdHZhciBtZXRhID0gcHJvcHNfc2NoZW1hICYmIHByb3BzX3NjaGVtYVtrZXldO1xyXG5cdFx0XHRyZXR1cm4gKG1ldGEgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKCBtZXRhLCAnZGVmYXVsdCcgKSkgPyBtZXRhLmRlZmF1bHQgOiAnJztcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHQgKiBVdGlsaXR5OiBjb2VyY2UgdmFsdWUgYnkgc2NoZW1hIHR5cGUuXHJcblx0ICovXHJcblxyXG5cclxuXHRcdGZ1bmN0aW9uIGNvZXJjZV9ieV90eXBlKHZhbHVlLCB0eXBlKSB7XHJcblx0XHRcdHN3aXRjaCAoIHR5cGUgKSB7XHJcblx0XHRcdFx0Y2FzZSAnbnVtYmVyJzpcclxuXHRcdFx0XHRjYXNlICdpbnQnOlxyXG5cdFx0XHRcdGNhc2UgJ2Zsb2F0JzpcclxuXHRcdFx0XHRcdGlmICggdmFsdWUgPT09ICcnIHx8IHZhbHVlID09IG51bGwgKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiAnJztcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHZhciBuID0gTnVtYmVyKCB2YWx1ZSApO1xyXG5cdFx0XHRcdFx0cmV0dXJuIGlzTmFOKCBuICkgPyAnJyA6IG47XHJcblx0XHRcdFx0Y2FzZSAnYm9vbGVhbic6XHJcblx0XHRcdFx0XHRyZXR1cm4gISF2YWx1ZTtcclxuXHRcdFx0XHRjYXNlICdhcnJheSc6XHJcblx0XHRcdFx0XHRyZXR1cm4gQXJyYXkuaXNBcnJheSggdmFsdWUgKSA/IHZhbHVlIDogW107XHJcblx0XHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRcdHJldHVybiAodmFsdWUgPT0gbnVsbCkgPyAnJyA6IFN0cmluZyggdmFsdWUgKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdCAqIE5vcm1hbGl6ZSA8c2VsZWN0PiBvcHRpb25zIChhcnJheSBvZiB7dmFsdWUsbGFiZWx9IG9yIG1hcCB7dmFsdWU6bGFiZWx9KS5cclxuXHQgKi9cclxuXHRcdGZ1bmN0aW9uIG5vcm1hbGl6ZV9zZWxlY3Rfb3B0aW9ucyhvcHRpb25zKSB7XHJcblx0XHRcdGlmICggQXJyYXkuaXNBcnJheSggb3B0aW9ucyApICkge1xyXG5cdFx0XHRcdHJldHVybiBvcHRpb25zLm1hcCggZnVuY3Rpb24gKG8pIHtcclxuXHRcdFx0XHRcdGlmICggdHlwZW9mIG8gPT09ICdvYmplY3QnICYmIG8gJiYgJ3ZhbHVlJyBpbiBvICkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4geyB2YWx1ZTogU3RyaW5nKCBvLnZhbHVlICksIGxhYmVsOiBTdHJpbmcoIG8ubGFiZWwgfHwgby52YWx1ZSApIH07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRyZXR1cm4geyB2YWx1ZTogU3RyaW5nKCBvICksIGxhYmVsOiBTdHJpbmcoIG8gKSB9O1xyXG5cdFx0XHRcdH0gKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoIG9wdGlvbnMgJiYgdHlwZW9mIG9wdGlvbnMgPT09ICdvYmplY3QnICkge1xyXG5cdFx0XHRcdHJldHVybiBPYmplY3Qua2V5cyggb3B0aW9ucyApLm1hcCggZnVuY3Rpb24gKGspIHtcclxuXHRcdFx0XHRcdHJldHVybiB7IHZhbHVlOiBTdHJpbmcoIGsgKSwgbGFiZWw6IFN0cmluZyggb3B0aW9uc1trXSApIH07XHJcblx0XHRcdFx0fSApO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBbXTtcclxuXHRcdH1cclxuXHJcblx0XHQvKiogUGFyc2UgYSBDU1MgbGVuZ3RoIGxpa2UgXCIxMjBweFwiIG9yIFwiODAlXCIgaW50byB7IHZhbHVlOm51bWJlciwgdW5pdDpzdHJpbmcgfS4gKi9cclxuXHRcdGZ1bmN0aW9uIHBhcnNlX2xlbih2YWx1ZSwgZmFsbGJhY2tfdW5pdCkge1xyXG5cdFx0XHR2YWx1ZSA9ICh2YWx1ZSA9PSBudWxsKSA/ICcnIDogU3RyaW5nKCB2YWx1ZSApLnRyaW0oKTtcclxuXHRcdFx0dmFyIG0gPSB2YWx1ZS5tYXRjaCggL14oLT9cXGQrKD86XFwuXFxkKyk/KShweHwlfHJlbXxlbSkkL2kgKTtcclxuXHRcdFx0aWYgKCBtICkge1xyXG5cdFx0XHRcdHJldHVybiB7IHZhbHVlOiBwYXJzZUZsb2F0KCBtWzFdICksIHVuaXQ6IG1bMl0udG9Mb3dlckNhc2UoKSB9O1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vIHBsYWluIG51bWJlciAtPiBhc3N1bWUgZmFsbGJhY2sgdW5pdFxyXG5cdFx0XHRpZiAoIHZhbHVlICE9PSAnJyAmJiAhaXNOYU4oIE51bWJlciggdmFsdWUgKSApICkge1xyXG5cdFx0XHRcdHJldHVybiB7IHZhbHVlOiBOdW1iZXIoIHZhbHVlICksIHVuaXQ6IChmYWxsYmFja191bml0IHx8ICdweCcpIH07XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIHsgdmFsdWU6IDAsIHVuaXQ6IChmYWxsYmFja191bml0IHx8ICdweCcpIH07XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqIENsYW1wIGhlbHBlci4gKi9cclxuXHRcdGZ1bmN0aW9uIGNsYW1wX251bSh2LCBtaW4sIG1heCkge1xyXG5cdFx0XHRpZiAoIHR5cGVvZiB2ICE9PSAnbnVtYmVyJyB8fCBpc05hTiggdiApICkgcmV0dXJuIChtaW4gIT0gbnVsbCA/IG1pbiA6IDApO1xyXG5cdFx0XHRpZiAoIG1pbiAhPSBudWxsICYmIHYgPCBtaW4gKSB2ID0gbWluO1xyXG5cdFx0XHRpZiAoIG1heCAhPSBudWxsICYmIHYgPiBtYXggKSB2ID0gbWF4O1xyXG5cdFx0XHRyZXR1cm4gdjtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBJbml0aWFsaXplIENvbG9yaXMgcGlja2VycyBpbiBhIGdpdmVuIHJvb3QuXHJcblx0XHQvLyBSZWxpZXMgb24gQ29sb3JpcyBiZWluZyBlbnF1ZXVlZCAoc2VlIGJmYi1ib290c3RyYXAucGhwKS5cclxuXHRcdGZ1bmN0aW9uIGluaXRfY29sb3Jpc19waWNrZXJzKHJvb3QpIHtcclxuXHRcdFx0aWYgKCAhcm9vdCB8fCAhdy5Db2xvcmlzICkgcmV0dXJuO1xyXG5cdFx0XHQvLyBNYXJrIGlucHV0cyB3ZSB3YW50IENvbG9yaXMgdG8gaGFuZGxlLlxyXG5cdFx0XHR2YXIgaW5wdXRzID0gcm9vdC5xdWVyeVNlbGVjdG9yQWxsKCAnaW5wdXRbZGF0YS1pbnNwZWN0b3ItdHlwZT1cImNvbG9yXCJdJyApO1xyXG5cdFx0XHRpZiAoICFpbnB1dHMubGVuZ3RoICkgcmV0dXJuO1xyXG5cclxuXHRcdFx0Ly8gQWRkIGEgc3RhYmxlIGNsYXNzIGZvciBDb2xvcmlzIHRhcmdldGluZzsgYXZvaWQgZG91YmxlLWluaXRpYWxpemluZy5cclxuXHRcdFx0aW5wdXRzLmZvckVhY2goIGZ1bmN0aW9uIChpbnB1dCkge1xyXG5cdFx0XHRcdGlmICggaW5wdXQuY2xhc3NMaXN0LmNvbnRhaW5zKCAnd3BiY19iZmJfY29sb3JpcycgKSApIHJldHVybjtcclxuXHRcdFx0XHRpbnB1dC5jbGFzc0xpc3QuYWRkKCAnd3BiY19iZmJfY29sb3JpcycgKTtcclxuXHRcdFx0fSApO1xyXG5cclxuXHRcdFx0Ly8gQ3JlYXRlL3JlZnJlc2ggYSBDb2xvcmlzIGluc3RhbmNlIGJvdW5kIHRvIHRoZXNlIGlucHV0cy5cclxuXHRcdFx0Ly8gS2VlcCBIRVggb3V0cHV0IHRvIG1hdGNoIHNjaGVtYSBkZWZhdWx0cyAoZS5nLiwgXCIjZTBlMGUwXCIpLlxyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdHcuQ29sb3Jpcygge1xyXG5cdFx0XHRcdFx0ZWwgICAgICAgOiAnLndwYmNfYmZiX2NvbG9yaXMnLFxyXG5cdFx0XHRcdFx0YWxwaGEgICAgOiBmYWxzZSxcclxuXHRcdFx0XHRcdGZvcm1hdCAgIDogJ2hleCcsXHJcblx0XHRcdFx0XHR0aGVtZU1vZGU6ICdhdXRvJ1xyXG5cdFx0XHRcdH0gKTtcclxuXHRcdFx0XHQvLyBDb2xvcmlzIGFscmVhZHkgZGlzcGF0Y2hlcyAnaW5wdXQnIGV2ZW50cyBvbiB2YWx1ZSBjaGFuZ2VzLlxyXG5cdFx0XHR9IGNhdGNoICggZSApIHtcclxuXHRcdFx0XHQvLyBOb24tZmF0YWw6IGlmIENvbG9yaXMgdGhyb3dzIChyYXJlKSwgdGhlIHRleHQgaW5wdXQgc3RpbGwgd29ya3MuXHJcblx0XHRcdFx0Y29uc29sZS53YXJuKCAnV1BCQyBJbnNwZWN0b3I6IENvbG9yaXMgaW5pdCBmYWlsZWQ6JywgZSApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBCdWlsZDogc2xpZGVyICsgbnVtYmVyIGluIG9uZSByb3cgKHdyaXRlcyB0byBhIHNpbmdsZSBkYXRhIGtleSkuXHJcblx0XHQgKiBDb250cm9sIG1ldGE6IHsgdHlwZToncmFuZ2VfbnVtYmVyJywga2V5LCBsYWJlbCwgbWluLCBtYXgsIHN0ZXAgfVxyXG5cdFx0ICovXHJcblx0XHRmdW5jdGlvbiBidWlsZF9yYW5nZV9udW1iZXJfcm93KGlucHV0X2lkLCBrZXksIGxhYmVsX3RleHQsIHZhbHVlLCBtZXRhKSB7XHJcblx0XHRcdHZhciByb3dfZWwgICA9IGVsKCdkaXYnLCB7ICdjbGFzcyc6ICdpbnNwZWN0b3JfX3JvdycgfSk7XHJcblx0XHRcdHZhciBsYWJlbF9lbCA9IGVsKCdsYWJlbCcsIHsgJ2Zvcic6IGlucHV0X2lkLCAnY2xhc3MnOiAnaW5zcGVjdG9yX19sYWJlbCcgfSwgbGFiZWxfdGV4dCB8fCBrZXkgfHwgJycpO1xyXG5cdFx0XHR2YXIgY3RybCAgICAgPSBlbCgnZGl2JywgeyAnY2xhc3MnOiAnaW5zcGVjdG9yX19jb250cm9sJyB9KTtcclxuXHJcblx0XHRcdHZhciBtaW4gID0gKG1ldGEgJiYgbWV0YS5taW4gIT0gbnVsbCkgID8gbWV0YS5taW4gIDogMDtcclxuXHRcdFx0dmFyIG1heCAgPSAobWV0YSAmJiBtZXRhLm1heCAhPSBudWxsKSAgPyBtZXRhLm1heCAgOiAxMDA7XHJcblx0XHRcdHZhciBzdGVwID0gKG1ldGEgJiYgbWV0YS5zdGVwICE9IG51bGwpID8gbWV0YS5zdGVwIDogMTtcclxuXHJcblx0XHRcdHZhciBncm91cCA9IGVsKCdkaXYnLCB7ICdjbGFzcyc6ICd3cGJjX2xlbl9ncm91cCB3cGJjX2lubGluZV9pbnB1dHMnLCAnZGF0YS1sZW4tZ3JvdXAnOiBrZXkgfSk7XHJcblxyXG5cdFx0XHR2YXIgcmFuZ2UgPSBlbCgnaW5wdXQnLCB7XHJcblx0XHRcdFx0dHlwZSA6ICdyYW5nZScsXHJcblx0XHRcdFx0J2NsYXNzJzogJ2luc3BlY3Rvcl9faW5wdXQnLFxyXG5cdFx0XHRcdCdkYXRhLWxlbi1yYW5nZSc6ICcnLFxyXG5cdFx0XHRcdG1pbiAgOiBTdHJpbmcobWluKSxcclxuXHRcdFx0XHRtYXggIDogU3RyaW5nKG1heCksXHJcblx0XHRcdFx0c3RlcCA6IFN0cmluZyhzdGVwKSxcclxuXHRcdFx0XHR2YWx1ZTogU3RyaW5nKHZhbHVlID09IG51bGwgfHwgdmFsdWUgPT09ICcnID8gbWluIDogdmFsdWUpXHJcblx0XHRcdH0pO1xyXG5cclxuXHRcdFx0dmFyIG51bSA9IGVsKCdpbnB1dCcsIHtcclxuXHRcdFx0XHRpZCAgIDogaW5wdXRfaWQsXHJcblx0XHRcdFx0dHlwZSA6ICdudW1iZXInLFxyXG5cdFx0XHRcdCdjbGFzcyc6ICdpbnNwZWN0b3JfX2lucHV0IGluc3BlY3Rvcl9fd18zMCcsXHJcblx0XHRcdFx0J2RhdGEtbGVuLXZhbHVlJzogJycsXHJcblx0XHRcdFx0J2RhdGEtaW5zcGVjdG9yLWtleSc6IGtleSxcclxuXHRcdFx0XHRtaW4gIDogU3RyaW5nKG1pbiksXHJcblx0XHRcdFx0bWF4ICA6IFN0cmluZyhtYXgpLFxyXG5cdFx0XHRcdHN0ZXAgOiBTdHJpbmcoc3RlcCksXHJcblx0XHRcdFx0dmFsdWU6ICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09PSAnJykgPyBTdHJpbmcobWluKSA6IFN0cmluZyh2YWx1ZSlcclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0XHRncm91cC5hcHBlbmRDaGlsZChyYW5nZSk7XHJcblx0XHRcdGdyb3VwLmFwcGVuZENoaWxkKG51bSk7XHJcblx0XHRcdGN0cmwuYXBwZW5kQ2hpbGQoZ3JvdXApO1xyXG5cdFx0XHRyb3dfZWwuYXBwZW5kQ2hpbGQobGFiZWxfZWwpO1xyXG5cdFx0XHRyb3dfZWwuYXBwZW5kQ2hpbGQoY3RybCk7XHJcblx0XHRcdHJldHVybiByb3dfZWw7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBCdWlsZDogKG51bWJlciArIHVuaXQpICsgc2xpZGVyLCB3cml0aW5nIGEgKnNpbmdsZSogY29tYmluZWQgc3RyaW5nIHRvIGBrZXlgLlxyXG5cdFx0ICogQ29udHJvbCBtZXRhOlxyXG5cdFx0ICoge1xyXG5cdFx0ICogICB0eXBlOidsZW4nLCBrZXksIGxhYmVsLCB1bml0czpbJ3B4JywnJScsJ3JlbScsJ2VtJ10sXHJcblx0XHQgKiAgIHNsaWRlcjogeyBweDp7bWluOjAsbWF4OjUxMixzdGVwOjF9LCAnJSc6e21pbjowLG1heDoxMDAsc3RlcDoxfSwgcmVtOnttaW46MCxtYXg6MTAsc3RlcDowLjF9LCBlbTp7Li4ufSB9LFxyXG5cdFx0ICogICBmYWxsYmFja191bml0OidweCdcclxuXHRcdCAqIH1cclxuXHRcdCAqL1xyXG5cdFx0ZnVuY3Rpb24gYnVpbGRfbGVuX2NvbXBvdW5kX3Jvdyhjb250cm9sLCBwcm9wc19zY2hlbWEsIGRhdGEsIHVpZCkge1xyXG5cdFx0XHR2YXIga2V5ICAgICAgICA9IGNvbnRyb2wua2V5O1xyXG5cdFx0XHR2YXIgbGFiZWxfdGV4dCA9IGNvbnRyb2wubGFiZWwgfHwga2V5IHx8ICcnO1xyXG5cdFx0XHR2YXIgZGVmX3N0ciAgICA9IGdldF9pbml0aWFsX3ZhbHVlKCBrZXksIGRhdGEsIHByb3BzX3NjaGVtYSApO1xyXG5cdFx0XHR2YXIgZmFsbGJhY2tfdSA9IGNvbnRyb2wuZmFsbGJhY2tfdW5pdCB8fCAncHgnO1xyXG5cdFx0XHR2YXIgcGFyc2VkICAgICA9IHBhcnNlX2xlbiggZGVmX3N0ciwgZmFsbGJhY2tfdSApO1xyXG5cclxuXHRcdFx0dmFyIHJvdyAgID0gZWwoICdkaXYnLCB7ICdjbGFzcyc6ICdpbnNwZWN0b3JfX3JvdycgfSApO1xyXG5cdFx0XHR2YXIgbGFiZWwgPSBlbCggJ2xhYmVsJywgeyAnY2xhc3MnOiAnaW5zcGVjdG9yX19sYWJlbCcgfSwgbGFiZWxfdGV4dCApO1xyXG5cdFx0XHR2YXIgY3RybCAgPSBlbCggJ2RpdicsIHsgJ2NsYXNzJzogJ2luc3BlY3Rvcl9fY29udHJvbCcgfSApO1xyXG5cclxuXHRcdFx0dmFyIHVuaXRzICAgICAgPSBBcnJheS5pc0FycmF5KCBjb250cm9sLnVuaXRzICkgJiYgY29udHJvbC51bml0cy5sZW5ndGggPyBjb250cm9sLnVuaXRzIDogWyAncHgnLCAnJScsICdyZW0nLCAnZW0nIF07XHJcblx0XHRcdHZhciBzbGlkZXJfbWFwID0gY29udHJvbC5zbGlkZXIgfHwge1xyXG5cdFx0XHRcdCdweCcgOiB7IG1pbjogMCwgbWF4OiA1MTIsIHN0ZXA6IDEgfSxcclxuXHRcdFx0XHQnJScgIDogeyBtaW46IDAsIG1heDogMTAwLCBzdGVwOiAxIH0sXHJcblx0XHRcdFx0J3JlbSc6IHsgbWluOiAwLCBtYXg6IDEwLCBzdGVwOiAwLjEgfSxcclxuXHRcdFx0XHQnZW0nIDogeyBtaW46IDAsIG1heDogMTAsIHN0ZXA6IDAuMSB9XHJcblx0XHRcdH07XHJcblxyXG5cdFx0XHQvLyBIb3N0IHdpdGggYSBoaWRkZW4gaW5wdXQgdGhhdCBjYXJyaWVzIGRhdGEtaW5zcGVjdG9yLWtleSB0byByZXVzZSB0aGUgc3RhbmRhcmQgaGFuZGxlci5cclxuXHRcdFx0dmFyIGdyb3VwID0gZWwoICdkaXYnLCB7ICdjbGFzcyc6ICd3cGJjX2xlbl9ncm91cCcsICdkYXRhLWxlbi1ncm91cCc6IGtleSB9ICk7XHJcblxyXG5cdFx0XHR2YXIgaW5saW5lID0gZWwoICdkaXYnLCB7ICdjbGFzcyc6ICd3cGJjX2lubGluZV9pbnB1dHMnIH0gKTtcclxuXHJcblx0XHRcdHZhciBudW0gPSBlbCggJ2lucHV0Jywge1xyXG5cdFx0XHRcdHR5cGUgICAgICAgICAgICA6ICdudW1iZXInLFxyXG5cdFx0XHRcdCdjbGFzcycgICAgICAgICA6ICdpbnNwZWN0b3JfX2lucHV0JyxcclxuXHRcdFx0XHQnZGF0YS1sZW4tdmFsdWUnOiAnJyxcclxuXHRcdFx0XHRtaW4gICAgICAgICAgICAgOiAnMCcsXHJcblx0XHRcdFx0c3RlcCAgICAgICAgICAgIDogJ2FueScsXHJcblx0XHRcdFx0dmFsdWUgICAgICAgICAgIDogU3RyaW5nKCBwYXJzZWQudmFsdWUgKVxyXG5cdFx0XHR9ICk7XHJcblxyXG5cdFx0XHR2YXIgc2VsID0gZWwoICdzZWxlY3QnLCB7ICdjbGFzcyc6ICdpbnNwZWN0b3JfX2lucHV0JywgJ2RhdGEtbGVuLXVuaXQnOiAnJyB9ICk7XHJcblx0XHRcdHVuaXRzLmZvckVhY2goIGZ1bmN0aW9uICh1KSB7XHJcblx0XHRcdFx0dmFyIG9wdCA9IGVsKCAnb3B0aW9uJywgeyB2YWx1ZTogdSB9LCB1ICk7XHJcblx0XHRcdFx0aWYgKCB1ID09PSBwYXJzZWQudW5pdCApIG9wdC5zZXRBdHRyaWJ1dGUoICdzZWxlY3RlZCcsICdzZWxlY3RlZCcgKTtcclxuXHRcdFx0XHRzZWwuYXBwZW5kQ2hpbGQoIG9wdCApO1xyXG5cdFx0XHR9ICk7XHJcblxyXG5cdFx0XHRpbmxpbmUuYXBwZW5kQ2hpbGQoIG51bSApO1xyXG5cdFx0XHRpbmxpbmUuYXBwZW5kQ2hpbGQoIHNlbCApO1xyXG5cclxuXHRcdFx0Ly8gU2xpZGVyICh1bml0LWF3YXJlKVxyXG5cdFx0XHR2YXIgY3VycmVudCA9IHNsaWRlcl9tYXBbcGFyc2VkLnVuaXRdIHx8IHNsaWRlcl9tYXBbdW5pdHNbMF1dO1xyXG5cdFx0XHR2YXIgcmFuZ2UgICA9IGVsKCAnaW5wdXQnLCB7XHJcblx0XHRcdFx0dHlwZSAgICAgICAgICAgIDogJ3JhbmdlJyxcclxuXHRcdFx0XHQnY2xhc3MnICAgICAgICAgOiAnaW5zcGVjdG9yX19pbnB1dCcsXHJcblx0XHRcdFx0J2RhdGEtbGVuLXJhbmdlJzogJycsXHJcblx0XHRcdFx0bWluICAgICAgICAgICAgIDogU3RyaW5nKCBjdXJyZW50Lm1pbiApLFxyXG5cdFx0XHRcdG1heCAgICAgICAgICAgICA6IFN0cmluZyggY3VycmVudC5tYXggKSxcclxuXHRcdFx0XHRzdGVwICAgICAgICAgICAgOiBTdHJpbmcoIGN1cnJlbnQuc3RlcCApLFxyXG5cdFx0XHRcdHZhbHVlICAgICAgICAgICA6IFN0cmluZyggY2xhbXBfbnVtKCBwYXJzZWQudmFsdWUsIGN1cnJlbnQubWluLCBjdXJyZW50Lm1heCApIClcclxuXHRcdFx0fSApO1xyXG5cclxuXHRcdFx0Ly8gSGlkZGVuIHdyaXRlciBpbnB1dCB0aGF0IHRoZSBkZWZhdWx0IEluc3BlY3RvciBoYW5kbGVyIHdpbGwgY2F0Y2guXHJcblx0XHRcdHZhciBoaWRkZW4gPSBlbCggJ2lucHV0Jywge1xyXG5cdFx0XHRcdHR5cGUgICAgICAgICAgICAgICAgOiAndGV4dCcsXHJcblx0XHRcdFx0J2NsYXNzJyAgICAgICAgICAgICA6ICdpbnNwZWN0b3JfX2lucHV0JyxcclxuXHRcdFx0XHRzdHlsZSAgICAgICAgICAgICAgIDogJ2Rpc3BsYXk6bm9uZScsXHJcblx0XHRcdFx0J2FyaWEtaGlkZGVuJyAgICAgICA6ICd0cnVlJyxcclxuXHRcdFx0XHR0YWJpbmRleCAgICAgICAgICAgIDogJy0xJyxcclxuXHRcdFx0XHRpZCAgICAgICAgICAgICAgICAgIDogJ3dwYmNfaW5zXycgKyBrZXkgKyAnXycgKyB1aWQgKyAnX2xlbl9oaWRkZW4nLFxyXG5cdFx0XHRcdCdkYXRhLWluc3BlY3Rvci1rZXknOiBrZXksXHJcblx0XHRcdFx0dmFsdWUgICAgICAgICAgICAgICA6IChTdHJpbmcoIHBhcnNlZC52YWx1ZSApICsgcGFyc2VkLnVuaXQpXHJcblx0XHRcdH0gKTtcclxuXHJcblx0XHRcdGdyb3VwLmFwcGVuZENoaWxkKCBpbmxpbmUgKTtcclxuXHRcdFx0Z3JvdXAuYXBwZW5kQ2hpbGQoIHJhbmdlICk7XHJcblx0XHRcdGdyb3VwLmFwcGVuZENoaWxkKCBoaWRkZW4gKTtcclxuXHJcblx0XHRcdGN0cmwuYXBwZW5kQ2hpbGQoIGdyb3VwICk7XHJcblx0XHRcdHJvdy5hcHBlbmRDaGlsZCggbGFiZWwgKTtcclxuXHRcdFx0cm93LmFwcGVuZENoaWxkKCBjdHJsICk7XHJcblx0XHRcdHJldHVybiByb3c7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBXaXJlIHN5bmNpbmcgZm9yIGFueSAud3BiY19sZW5fZ3JvdXAgaW5zaWRlIGEgZ2l2ZW4gcm9vdCAocGFuZWwpLlxyXG5cdFx0ICogLSByYW5nZSDih4QgbnVtYmVyIHN5bmNcclxuXHRcdCAqIC0gdW5pdCBzd2l0Y2hlcyB1cGRhdGUgc2xpZGVyIGJvdW5kc1xyXG5cdFx0ICogLSBoaWRkZW4gd3JpdGVyIChpZiBwcmVzZW50KSBnZXRzIHVwZGF0ZWQgYW5kIGVtaXRzICdpbnB1dCdcclxuXHRcdCAqL1xyXG5cdFx0ZnVuY3Rpb24gd2lyZV9sZW5fZ3JvdXAocm9vdCkge1xyXG5cdFx0XHRpZiAoICFyb290ICkgcmV0dXJuO1xyXG5cclxuXHRcdFx0ZnVuY3Rpb24gZmluZF9ncm91cChlbCkge1xyXG5cdFx0XHRcdHJldHVybiBlbCAmJiBlbC5jbG9zZXN0ICYmIGVsLmNsb3Nlc3QoICcud3BiY19sZW5fZ3JvdXAnICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHJvb3QuYWRkRXZlbnRMaXN0ZW5lciggJ2lucHV0JywgZnVuY3Rpb24gKGUpIHtcclxuXHRcdFx0XHR2YXIgdCA9IGUudGFyZ2V0O1xyXG5cdFx0XHRcdC8vIFNsaWRlciBtb3ZlZCAtPiB1cGRhdGUgbnVtYmVyIChhbmQgd3JpdGVyL2hpZGRlbilcclxuXHRcdFx0XHRpZiAoIHQgJiYgdC5oYXNBdHRyaWJ1dGUoICdkYXRhLWxlbi1yYW5nZScgKSApIHtcclxuXHRcdFx0XHRcdHZhciBnID0gZmluZF9ncm91cCggdCApO1xyXG5cdFx0XHRcdFx0aWYgKCAhZyApIHJldHVybjtcclxuXHRcdFx0XHRcdHZhciBudW0gPSBnLnF1ZXJ5U2VsZWN0b3IoICdbZGF0YS1sZW4tdmFsdWVdJyApO1xyXG5cdFx0XHRcdFx0aWYgKCBudW0gKSB7XHJcblx0XHRcdFx0XHRcdG51bS52YWx1ZSA9IHQudmFsdWU7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR2YXIgd3JpdGVyID0gZy5xdWVyeVNlbGVjdG9yKCAnW2RhdGEtaW5zcGVjdG9yLWtleV0nICk7XHJcblx0XHRcdFx0XHRpZiAoIHdyaXRlciAmJiB3cml0ZXIudHlwZSA9PT0gJ3RleHQnICkge1xyXG5cdFx0XHRcdFx0XHR2YXIgdW5pdCAgICAgPSBnLnF1ZXJ5U2VsZWN0b3IoICdbZGF0YS1sZW4tdW5pdF0nICk7XHJcblx0XHRcdFx0XHRcdHVuaXQgICAgICAgICA9IHVuaXQgPyB1bml0LnZhbHVlIDogJ3B4JztcclxuXHRcdFx0XHRcdFx0d3JpdGVyLnZhbHVlID0gU3RyaW5nKCB0LnZhbHVlICkgKyBTdHJpbmcoIHVuaXQgKTtcclxuXHRcdFx0XHRcdFx0Ly8gdHJpZ2dlciBzdGFuZGFyZCBpbnNwZWN0b3IgaGFuZGxlcjpcclxuXHRcdFx0XHRcdFx0d3JpdGVyLmRpc3BhdGNoRXZlbnQoIG5ldyBFdmVudCggJ2lucHV0JywgeyBidWJibGVzOiB0cnVlIH0gKSApO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0Ly8gUGxhaW4gcmFuZ2VfbnVtYmVyIGNhc2UgKG51bWJlciBoYXMgZGF0YS1pbnNwZWN0b3Ita2V5KSAtPiBmaXJlIGlucHV0IG9uIG51bWJlclxyXG5cdFx0XHRcdFx0XHRpZiAoIG51bSAmJiBudW0uaGFzQXR0cmlidXRlKCAnZGF0YS1pbnNwZWN0b3Ita2V5JyApICkge1xyXG5cdFx0XHRcdFx0XHRcdG51bS5kaXNwYXRjaEV2ZW50KCBuZXcgRXZlbnQoICdpbnB1dCcsIHsgYnViYmxlczogdHJ1ZSB9ICkgKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gTnVtYmVyIHR5cGVkIC0+IHVwZGF0ZSBzbGlkZXIgYW5kIHdyaXRlci9oaWRkZW5cclxuXHRcdFx0XHRpZiAoIHQgJiYgdC5oYXNBdHRyaWJ1dGUoICdkYXRhLWxlbi12YWx1ZScgKSApIHtcclxuXHRcdFx0XHRcdHZhciBnID0gZmluZF9ncm91cCggdCApO1xyXG5cdFx0XHRcdFx0aWYgKCAhZyApIHJldHVybjtcclxuXHRcdFx0XHRcdHZhciByID0gZy5xdWVyeVNlbGVjdG9yKCAnW2RhdGEtbGVuLXJhbmdlXScgKTtcclxuXHRcdFx0XHRcdGlmICggciApIHtcclxuXHRcdFx0XHRcdFx0Ly8gY2xhbXAgd2l0aGluIHNsaWRlciBib3VuZHMgaWYgcHJlc2VudFxyXG5cdFx0XHRcdFx0XHR2YXIgbWluID0gTnVtYmVyKCByLm1pbiApO1xyXG5cdFx0XHRcdFx0XHR2YXIgbWF4ID0gTnVtYmVyKCByLm1heCApO1xyXG5cdFx0XHRcdFx0XHR2YXIgdiAgID0gTnVtYmVyKCB0LnZhbHVlICk7XHJcblx0XHRcdFx0XHRcdGlmICggIWlzTmFOKCB2ICkgKSB7XHJcblx0XHRcdFx0XHRcdFx0diAgICAgICA9IGNsYW1wX251bSggdiwgaXNOYU4oIG1pbiApID8gdW5kZWZpbmVkIDogbWluLCBpc05hTiggbWF4ICkgPyB1bmRlZmluZWQgOiBtYXggKTtcclxuXHRcdFx0XHRcdFx0XHRyLnZhbHVlID0gU3RyaW5nKCB2ICk7XHJcblx0XHRcdFx0XHRcdFx0aWYgKCBTdHJpbmcoIHYgKSAhPT0gdC52YWx1ZSApIHQudmFsdWUgPSBTdHJpbmcoIHYgKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0dmFyIHdyaXRlciA9IGcucXVlcnlTZWxlY3RvciggJ1tkYXRhLWluc3BlY3Rvci1rZXldJyApO1xyXG5cdFx0XHRcdFx0aWYgKCB3cml0ZXIgJiYgd3JpdGVyLnR5cGUgPT09ICd0ZXh0JyApIHtcclxuXHRcdFx0XHRcdFx0dmFyIHVuaXQgICAgID0gZy5xdWVyeVNlbGVjdG9yKCAnW2RhdGEtbGVuLXVuaXRdJyApO1xyXG5cdFx0XHRcdFx0XHR1bml0ICAgICAgICAgPSB1bml0ID8gdW5pdC52YWx1ZSA6ICdweCc7XHJcblx0XHRcdFx0XHRcdHdyaXRlci52YWx1ZSA9IFN0cmluZyggdC52YWx1ZSB8fCAwICkgKyBTdHJpbmcoIHVuaXQgKTtcclxuXHRcdFx0XHRcdFx0d3JpdGVyLmRpc3BhdGNoRXZlbnQoIG5ldyBFdmVudCggJ2lucHV0JywgeyBidWJibGVzOiB0cnVlIH0gKSApO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0Ly8gZWxzZTogbnVtYmVyIGl0c2VsZiBsaWtlbHkgY2FycmllcyBkYXRhLWluc3BlY3Rvci1rZXkgKHJhbmdlX251bWJlcik7IGRlZmF1bHQgaGFuZGxlciB3aWxsIHJ1bi5cclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sIHRydWUgKTtcclxuXHJcblx0XHRcdHJvb3QuYWRkRXZlbnRMaXN0ZW5lciggJ2NoYW5nZScsIGZ1bmN0aW9uIChlKSB7XHJcblx0XHRcdFx0dmFyIHQgPSBlLnRhcmdldDtcclxuXHRcdFx0XHQvLyBVbml0IGNoYW5nZWQgLT4gdXBkYXRlIHNsaWRlciBsaW1pdHMgYW5kIHdyaXRlci9oaWRkZW5cclxuXHRcdFx0XHRpZiAoIHQgJiYgdC5oYXNBdHRyaWJ1dGUoICdkYXRhLWxlbi11bml0JyApICkge1xyXG5cdFx0XHRcdFx0dmFyIGcgPSBmaW5kX2dyb3VwKCB0ICk7XHJcblx0XHRcdFx0XHRpZiAoICFnICkgcmV0dXJuO1xyXG5cclxuXHRcdFx0XHRcdC8vIEZpbmQgdGhlIGNvbnRyb2wgbWV0YSB2aWEgYSBkYXRhIGF0dHJpYnV0ZSBvbiBncm91cCBpZiBwcm92aWRlZFxyXG5cdFx0XHRcdFx0Ly8gKEZhY3RvcnkgcGF0aCBzZXRzIG5vdGhpbmcgaGVyZTsgd2UgcmUtZGVyaXZlIGZyb20gY3VycmVudCBzbGlkZXIgYm91bmRzLilcclxuXHRcdFx0XHRcdHZhciByICAgICAgPSBnLnF1ZXJ5U2VsZWN0b3IoICdbZGF0YS1sZW4tcmFuZ2VdJyApO1xyXG5cdFx0XHRcdFx0dmFyIG51bSAgICA9IGcucXVlcnlTZWxlY3RvciggJ1tkYXRhLWxlbi12YWx1ZV0nICk7XHJcblx0XHRcdFx0XHR2YXIgd3JpdGVyID0gZy5xdWVyeVNlbGVjdG9yKCAnW2RhdGEtaW5zcGVjdG9yLWtleV0nICk7XHJcblx0XHRcdFx0XHR2YXIgdW5pdCAgID0gdC52YWx1ZSB8fCAncHgnO1xyXG5cclxuXHRcdFx0XHRcdC8vIEFkanVzdCBzbGlkZXIgYm91bmRzIGhldXJpc3RpY2FsbHkgKG1hdGNoIEZhY3RvcnkgZGVmYXVsdHMpXHJcblx0XHRcdFx0XHR2YXIgYm91bmRzX2J5X3VuaXQgPSB7XHJcblx0XHRcdFx0XHRcdCdweCcgOiB7IG1pbjogMCwgbWF4OiA1MTIsIHN0ZXA6IDEgfSxcclxuXHRcdFx0XHRcdFx0JyUnICA6IHsgbWluOiAwLCBtYXg6IDEwMCwgc3RlcDogMSB9LFxyXG5cdFx0XHRcdFx0XHQncmVtJzogeyBtaW46IDAsIG1heDogMTAsIHN0ZXA6IDAuMSB9LFxyXG5cdFx0XHRcdFx0XHQnZW0nIDogeyBtaW46IDAsIG1heDogMTAsIHN0ZXA6IDAuMSB9XHJcblx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0aWYgKCByICkge1xyXG5cdFx0XHRcdFx0XHR2YXIgYiAgPSBib3VuZHNfYnlfdW5pdFt1bml0XSB8fCBib3VuZHNfYnlfdW5pdFsncHgnXTtcclxuXHRcdFx0XHRcdFx0ci5taW4gID0gU3RyaW5nKCBiLm1pbiApO1xyXG5cdFx0XHRcdFx0XHRyLm1heCAgPSBTdHJpbmcoIGIubWF4ICk7XHJcblx0XHRcdFx0XHRcdHIuc3RlcCA9IFN0cmluZyggYi5zdGVwICk7XHJcblx0XHRcdFx0XHRcdC8vIGNsYW1wIHRvIG5ldyBib3VuZHNcclxuXHRcdFx0XHRcdFx0dmFyIHYgID0gTnVtYmVyKCBudW0gJiYgbnVtLnZhbHVlID8gbnVtLnZhbHVlIDogci52YWx1ZSApO1xyXG5cdFx0XHRcdFx0XHRpZiAoICFpc05hTiggdiApICkge1xyXG5cdFx0XHRcdFx0XHRcdHYgICAgICAgPSBjbGFtcF9udW0oIHYsIGIubWluLCBiLm1heCApO1xyXG5cdFx0XHRcdFx0XHRcdHIudmFsdWUgPSBTdHJpbmcoIHYgKTtcclxuXHRcdFx0XHRcdFx0XHRpZiAoIG51bSApIG51bS52YWx1ZSA9IFN0cmluZyggdiApO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRpZiAoIHdyaXRlciAmJiB3cml0ZXIudHlwZSA9PT0gJ3RleHQnICkge1xyXG5cdFx0XHRcdFx0XHR2YXIgdiAgICAgICAgPSBudW0gJiYgbnVtLnZhbHVlID8gbnVtLnZhbHVlIDogKHIgPyByLnZhbHVlIDogJzAnKTtcclxuXHRcdFx0XHRcdFx0d3JpdGVyLnZhbHVlID0gU3RyaW5nKCB2ICkgKyBTdHJpbmcoIHVuaXQgKTtcclxuXHRcdFx0XHRcdFx0d3JpdGVyLmRpc3BhdGNoRXZlbnQoIG5ldyBFdmVudCggJ2lucHV0JywgeyBidWJibGVzOiB0cnVlIH0gKSApO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSwgdHJ1ZSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuXHRcdC8vID09ICBDIE8gTiBUIFIgTyBMICA9PVxyXG5cdFx0Ly8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuXHRcdC8qKlxyXG5cdCAqIFNjaGVtYSA+IEluc3BlY3RvciA+IENvbnRyb2wgRWxlbWVudCwgZS5nLiBJbnB1dCEgIEJ1aWxkIGEgc2luZ2xlIGNvbnRyb2wgcm93OlxyXG5cdCAqIDxkaXYgY2xhc3M9XCJpbnNwZWN0b3JfX3Jvd1wiPlxyXG5cdCAqICAgPGxhYmVsIGNsYXNzPVwiaW5zcGVjdG9yX19sYWJlbFwiIGZvcj1cIi4uLlwiPkxhYmVsPC9sYWJlbD5cclxuXHQgKiAgIDxkaXYgY2xhc3M9XCJpbnNwZWN0b3JfX2NvbnRyb2xcIj48aW5wdXR8dGV4dGFyZWF8c2VsZWN0IGNsYXNzPVwiaW5zcGVjdG9yX19pbnB1dFwiIC4uLj48L2Rpdj5cclxuXHQgKiA8L2Rpdj5cclxuXHQgKlxyXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBjb250cm9sICAgICAgICAgICAtIHNjaGVtYSBjb250cm9sIG1ldGEgKHt0eXBlLGtleSxsYWJlbCwuLi59KVxyXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wc19zY2hlbWEgICAgICAtIHNjaGVtYS5wcm9wc1xyXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhICAgICAgICAgICAgICAtIGN1cnJlbnQgZWxlbWVudCBkYXRhLSogbWFwXHJcblx0ICogQHBhcmFtIHtzdHJpbmd9IHVpZCAgICAgICAgICAgICAgIC0gdW5pcXVlIHN1ZmZpeCBmb3IgaW5wdXQgaWRzXHJcblx0ICogQHBhcmFtIHtPYmplY3R9IGN0eCAgICAgICAgICAgICAgIC0geyBlbCwgYnVpbGRlciwgdHlwZSwgZGF0YSB9XHJcblx0ICogQHJldHVybnMge0hUTUxFbGVtZW50fVxyXG5cdCAqL1xyXG5cdFx0ZnVuY3Rpb24gYnVpbGRfY29udHJvbChjb250cm9sLCBwcm9wc19zY2hlbWEsIGRhdGEsIHVpZCwgY3R4KSB7XHJcblx0XHRcdHZhciB0eXBlID0gY29udHJvbC50eXBlO1xyXG5cdFx0XHR2YXIga2V5ICA9IGNvbnRyb2wua2V5O1xyXG5cclxuXHRcdFx0dmFyIGxhYmVsX3RleHQgPSBjb250cm9sLmxhYmVsIHx8IGtleSB8fCAnJztcclxuXHRcdFx0dmFyIHByb3BfbWV0YSAgPSAoa2V5ID8gKHByb3BzX3NjaGVtYVtrZXldIHx8IHsgdHlwZTogJ3N0cmluZycgfSkgOiB7IHR5cGU6ICdzdHJpbmcnIH0pO1xyXG5cdFx0XHR2YXIgdmFsdWUgICAgICA9IGNvZXJjZV9ieV90eXBlKCBnZXRfaW5pdGlhbF92YWx1ZSgga2V5LCBkYXRhLCBwcm9wc19zY2hlbWEgKSwgcHJvcF9tZXRhLnR5cGUgKTtcclxuXHRcdC8vIEFsbG93IHZhbHVlX2Zyb20gb3ZlcnJpZGUgKGNvbXB1dGVkIGF0IHJlbmRlci10aW1lKS5cclxuXHRcdGlmICggY29udHJvbCAmJiBjb250cm9sLnZhbHVlX2Zyb20gJiYgdy53cGJjX2JmYl9pbnNwZWN0b3JfZmFjdG9yeV92YWx1ZV9mcm9tW2NvbnRyb2wudmFsdWVfZnJvbV0gKSB7XHJcblx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdHZhciBjb21wdXRlZCA9IHcud3BiY19iZmJfaW5zcGVjdG9yX2ZhY3RvcnlfdmFsdWVfZnJvbVtjb250cm9sLnZhbHVlX2Zyb21dKCBjdHggfHwge30gKTtcclxuXHRcdFx0XHRcdHZhbHVlICAgICAgICA9IGNvZXJjZV9ieV90eXBlKCBjb21wdXRlZCwgcHJvcF9tZXRhLnR5cGUgKTtcclxuXHRcdFx0XHR9IGNhdGNoICggZSApIHtcclxuXHRcdFx0XHRcdGNvbnNvbGUud2FybiggJ3ZhbHVlX2Zyb20gZmFpbGVkIGZvcicsIGNvbnRyb2wudmFsdWVfZnJvbSwgZSApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0dmFyIGlucHV0X2lkID0gJ3dwYmNfaW5zXycgKyBrZXkgKyAnXycgKyB1aWQ7XHJcblxyXG5cdFx0XHR2YXIgcm93X2VsICAgID0gZWwoICdkaXYnLCB7ICdjbGFzcyc6ICdpbnNwZWN0b3JfX3JvdycgfSApO1xyXG5cdFx0XHR2YXIgbGFiZWxfZWwgID0gZWwoICdsYWJlbCcsIHsgJ2Zvcic6IGlucHV0X2lkLCAnY2xhc3MnOiAnaW5zcGVjdG9yX19sYWJlbCcgfSwgbGFiZWxfdGV4dCApO1xyXG5cdFx0XHR2YXIgY3RybF93cmFwID0gZWwoICdkaXYnLCB7ICdjbGFzcyc6ICdpbnNwZWN0b3JfX2NvbnRyb2wnIH0gKTtcclxuXHJcblx0XHRcdHZhciBmaWVsZF9lbDtcclxuXHJcblx0XHQvLyAtLS0gc2xvdCBob3N0IChuYW1lZCBVSSBpbmplY3Rpb24pIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0XHRpZiAoIHR5cGUgPT09ICdzbG90JyAmJiBjb250cm9sLnNsb3QgKSB7XHJcblx0XHRcdC8vIGFkZCBhIG1hcmtlciBjbGFzcyBmb3IgdGhlIGxheW91dCBjaGlwcyByb3dcclxuXHRcdFx0dmFyIGNsYXNzZXMgPSAnaW5zcGVjdG9yX19yb3cgaW5zcGVjdG9yX19yb3ctLXNsb3QnO1xyXG5cdFx0XHRpZiAoIGNvbnRyb2wuc2xvdCA9PT0gJ2xheW91dF9jaGlwcycgKSBjbGFzc2VzICs9ICcgaW5zcGVjdG9yX19yb3ctLWxheW91dC1jaGlwcyc7XHJcblxyXG5cdFx0XHR2YXIgc2xvdF9yb3cgPSBlbCggJ2RpdicsIHsgJ2NsYXNzJzogY2xhc3NlcyB9ICk7XHJcblxyXG5cdFx0XHRpZiAoIGxhYmVsX3RleHQgKSBzbG90X3Jvdy5hcHBlbmRDaGlsZCggZWwoICdsYWJlbCcsIHsgJ2NsYXNzJzogJ2luc3BlY3Rvcl9fbGFiZWwnIH0sIGxhYmVsX3RleHQgKSApO1xyXG5cclxuXHRcdFx0Ly8gYWRkIGEgZGF0YSBhdHRyaWJ1dGUgb24gdGhlIGhvc3Qgc28gYm90aCBDU1MgYW5kIHRoZSBzYWZldHktbmV0IGNhbiB0YXJnZXQgaXRcclxuXHRcdFx0dmFyIGhvc3RfYXR0cnMgPSB7ICdjbGFzcyc6ICdpbnNwZWN0b3JfX2NvbnRyb2wnIH07XHJcblx0XHRcdGlmICggY29udHJvbC5zbG90ID09PSAnbGF5b3V0X2NoaXBzJyApIGhvc3RfYXR0cnNbJ2RhdGEtYmZiLXNsb3QnXSA9ICdsYXlvdXRfY2hpcHMnO1xyXG5cclxuXHRcdFx0dmFyIHNsb3RfaG9zdCA9IGVsKCAnZGl2JywgaG9zdF9hdHRycyApO1xyXG5cdFx0XHRzbG90X3Jvdy5hcHBlbmRDaGlsZCggc2xvdF9ob3N0ICk7XHJcblxyXG5cdFx0XHR2YXIgc2xvdF9mbiA9IHcud3BiY19iZmJfaW5zcGVjdG9yX2ZhY3Rvcnlfc2xvdHNbY29udHJvbC5zbG90XTtcclxuXHRcdFx0aWYgKCB0eXBlb2Ygc2xvdF9mbiA9PT0gJ2Z1bmN0aW9uJyApIHtcclxuXHRcdFx0XHRzZXRUaW1lb3V0KCBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0XHRzbG90X2ZuKCBzbG90X2hvc3QsIGN0eCB8fCB7fSApO1xyXG5cdFx0XHRcdFx0fSBjYXRjaCAoIGUgKSB7XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUud2FybiggJ3Nsb3QgXCInICsgY29udHJvbC5zbG90ICsgJ1wiIGZhaWxlZDonLCBlICk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSwgMCApO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHNsb3RfaG9zdC5hcHBlbmRDaGlsZCggZWwoICdkaXYnLCB7ICdjbGFzcyc6ICd3cGJjX2JmYl9fc2xvdF9fbWlzc2luZycgfSwgJ1tzbG90OiAnICsgY29udHJvbC5zbG90ICsgJ10nICkgKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gc2xvdF9yb3c7XHJcblx0XHR9XHJcblxyXG5cclxuXHRcdFx0aWYgKCB0eXBlID09PSAndGV4dGFyZWEnICkge1xyXG5cdFx0XHRcdGZpZWxkX2VsID0gZWwoICd0ZXh0YXJlYScsIHtcclxuXHRcdFx0XHRcdGlkICAgICAgICAgICAgICAgICAgOiBpbnB1dF9pZCxcclxuXHRcdFx0XHRcdCdkYXRhLWluc3BlY3Rvci1rZXknOiBrZXksXHJcblx0XHRcdFx0XHRyb3dzICAgICAgICAgICAgICAgIDogY29udHJvbC5yb3dzIHx8IDMsXHJcblx0XHRcdFx0XHQnY2xhc3MnICAgICAgICAgICAgIDogJ2luc3BlY3Rvcl9faW5wdXQnXHJcblx0XHRcdFx0fSwgKHZhbHVlID09IG51bGwgPyAnJyA6IFN0cmluZyggdmFsdWUgKSkgKTtcclxuXHRcdFx0fSBlbHNlIGlmICggdHlwZSA9PT0gJ3NlbGVjdCcgKSB7XHJcblx0XHRcdFx0ZmllbGRfZWwgPSBlbCggJ3NlbGVjdCcsIHtcclxuXHRcdFx0XHRcdGlkICAgICAgICAgICAgICAgICAgOiBpbnB1dF9pZCxcclxuXHRcdFx0XHRcdCdkYXRhLWluc3BlY3Rvci1rZXknOiBrZXksXHJcblx0XHRcdFx0XHQnY2xhc3MnICAgICAgICAgICAgIDogJ2luc3BlY3Rvcl9faW5wdXQnXHJcblx0XHRcdFx0fSApO1xyXG5cdFx0XHRcdG5vcm1hbGl6ZV9zZWxlY3Rfb3B0aW9ucyggY29udHJvbC5vcHRpb25zIHx8IFtdICkuZm9yRWFjaCggZnVuY3Rpb24gKG9wdCkge1xyXG5cdFx0XHRcdFx0dmFyIG9wdF9lbCA9IGVsKCAnb3B0aW9uJywgeyB2YWx1ZTogb3B0LnZhbHVlIH0sIG9wdC5sYWJlbCApO1xyXG5cdFx0XHRcdFx0aWYgKCBTdHJpbmcoIHZhbHVlICkgPT09IG9wdC52YWx1ZSApIG9wdF9lbC5zZXRBdHRyaWJ1dGUoICdzZWxlY3RlZCcsICdzZWxlY3RlZCcgKTtcclxuXHRcdFx0XHRcdGZpZWxkX2VsLmFwcGVuZENoaWxkKCBvcHRfZWwgKTtcclxuXHRcdFx0XHR9ICk7XHJcblx0XHRcdH0gZWxzZSBpZiAoIHR5cGUgPT09ICdjaGVja2JveCcgKSB7XHJcblx0XHRcdFx0Ly8gZmllbGRfZWwgPSBlbCggJ2lucHV0JywgeyBpZDogaW5wdXRfaWQsIHR5cGU6ICdjaGVja2JveCcsICdkYXRhLWluc3BlY3Rvci1rZXknOiBrZXksIGNoZWNrZWQ6ICEhdmFsdWUsICdjbGFzcyc6ICdpbnNwZWN0b3JfX2lucHV0JyB9ICk7IC8vLlxyXG5cclxuXHRcdFx0XHQvLyBSZW5kZXIgYXMgdG9nZ2xlIFVJIGluc3RlYWQgb2YgbGFiZWwtbGVmdCArIGNoZWNrYm94LiAgTm90ZTogd2UgcmV0dXJuIHRoZSBmdWxsIHRvZ2dsZSByb3cgaGVyZSBhbmQgc2tpcCB0aGUgZGVmYXVsdCByb3cvbGFiZWwgZmxvdyBiZWxvdy5cclxuXHRcdFx0XHRyZXR1cm4gYnVpbGRfdG9nZ2xlX3JvdyggaW5wdXRfaWQsIGtleSwgISF2YWx1ZSwgbGFiZWxfdGV4dCApO1xyXG5cclxuXHRcdFx0fSBlbHNlIGlmICggdHlwZSA9PT0gJ3JhbmdlX251bWJlcicgKSB7XHJcblx0XHRcdFx0Ly8gLS0tIG5ldzogc2xpZGVyICsgbnVtYmVyIChzaW5nbGUga2V5KS5cclxuXHRcdFx0XHR2YXIgcm5faWQgID0gJ3dwYmNfaW5zXycgKyBrZXkgKyAnXycgKyB1aWQ7XHJcblx0XHRcdFx0dmFyIHJuX3ZhbCA9IHZhbHVlOyAvLyBmcm9tIGdldF9pbml0aWFsX3ZhbHVlL3Byb3BfbWV0YSBhbHJlYWR5LlxyXG5cdFx0XHRcdHJldHVybiBidWlsZF9yYW5nZV9udW1iZXJfcm93KCBybl9pZCwga2V5LCBsYWJlbF90ZXh0LCBybl92YWwsIGNvbnRyb2wgKTtcclxuXHJcblx0XHRcdH0gZWxzZSBpZiAoIHR5cGUgPT09ICdsZW4nICkge1xyXG5cdFx0XHRcdC8vIC0tLSBuZXc6IGxlbmd0aCBjb21wb3VuZCAodmFsdWUrdW5pdCtzbGlkZXIgLT4gd3JpdGVzIGEgc2luZ2xlIHN0cmluZyBrZXkpLlxyXG5cdFx0XHRcdHJldHVybiBidWlsZF9sZW5fY29tcG91bmRfcm93KCBjb250cm9sLCBwcm9wc19zY2hlbWEsIGRhdGEsIHVpZCApO1xyXG5cclxuXHRcdFx0fSBlbHNlIGlmICggdHlwZSA9PT0gJ2NvbG9yJyApIHtcclxuXHRcdFx0XHQvLyBDb2xvciBwaWNrZXIgKENvbG9yaXMpLiBTdG9yZSBhcyBzdHJpbmcgKGUuZy4sIFwiI2UwZTBlMFwiKS5cclxuXHRcdFx0XHRmaWVsZF9lbCA9IGVsKCAnaW5wdXQnLCB7XHJcblx0XHRcdFx0XHRpZCAgICAgICAgICAgICAgICAgICA6IGlucHV0X2lkLFxyXG5cdFx0XHRcdFx0dHlwZSAgICAgICAgICAgICAgICAgOiAndGV4dCcsXHJcblx0XHRcdFx0XHQnZGF0YS1pbnNwZWN0b3Ita2V5JyA6IGtleSxcclxuXHRcdFx0XHRcdCdkYXRhLWluc3BlY3Rvci10eXBlJzogJ2NvbG9yJyxcclxuXHRcdFx0XHRcdCdkYXRhLWNvbG9yaXMnICAgICAgIDogJycsXHJcblx0XHRcdFx0XHQnY2xhc3MnICAgICAgICAgICAgICA6ICdpbnNwZWN0b3JfX2lucHV0JyxcclxuXHRcdFx0XHRcdCdkYXRhLWRlZmF1bHQtY29sb3InIDogKCB2YWx1ZSAhPSBudWxsICYmIHZhbHVlICE9PSAnJyA/IFN0cmluZyh2YWx1ZSkgOiAoY29udHJvbC5wbGFjZWhvbGRlciB8fCAnJykgKVxyXG5cdFx0XHRcdH0gKTtcclxuXHRcdFx0XHRpZiAoIHZhbHVlICE9PSAnJyApIHtcclxuXHRcdFx0XHRcdGZpZWxkX2VsLnZhbHVlID0gU3RyaW5nKCB2YWx1ZSApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHQvLyB0ZXh0L251bWJlciBkZWZhdWx0LlxyXG5cdFx0XHRcdHZhciBhdHRycyA9IHtcclxuXHRcdFx0XHRcdGlkICAgICAgICAgICAgICAgICAgOiBpbnB1dF9pZCxcclxuXHRcdFx0XHRcdHR5cGUgICAgICAgICAgICAgICAgOiAodHlwZSA9PT0gJ251bWJlcicpID8gJ251bWJlcicgOiAndGV4dCcsXHJcblx0XHRcdFx0XHQnZGF0YS1pbnNwZWN0b3Ita2V5Jzoga2V5LFxyXG5cdFx0XHRcdFx0J2NsYXNzJyAgICAgICAgICAgICA6ICdpbnNwZWN0b3JfX2lucHV0J1xyXG5cdFx0XHRcdH07XHJcblx0XHRcdC8vIG51bWJlciBjb25zdHJhaW50cyAoc2NoZW1hIG9yIGNvbnRyb2wpXHJcblx0XHRcdFx0aWYgKCB0eXBlID09PSAnbnVtYmVyJyApIHtcclxuXHRcdFx0XHRcdGlmICggT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKCBwcm9wX21ldGEsICdtaW4nICkgKSBhdHRycy5taW4gPSBwcm9wX21ldGEubWluO1xyXG5cdFx0XHRcdFx0aWYgKCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoIHByb3BfbWV0YSwgJ21heCcgKSApIGF0dHJzLm1heCA9IHByb3BfbWV0YS5tYXg7XHJcblx0XHRcdFx0XHRpZiAoIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCggcHJvcF9tZXRhLCAnc3RlcCcgKSApIGF0dHJzLnN0ZXAgPSBwcm9wX21ldGEuc3RlcDtcclxuXHRcdFx0XHRcdGlmICggT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKCBjb250cm9sLCAnbWluJyApICkgYXR0cnMubWluID0gY29udHJvbC5taW47XHJcblx0XHRcdFx0XHRpZiAoIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCggY29udHJvbCwgJ21heCcgKSApIGF0dHJzLm1heCA9IGNvbnRyb2wubWF4O1xyXG5cdFx0XHRcdFx0aWYgKCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoIGNvbnRyb2wsICdzdGVwJyApICkgYXR0cnMuc3RlcCA9IGNvbnRyb2wuc3RlcDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0ZmllbGRfZWwgPSBlbCggJ2lucHV0JywgYXR0cnMgKTtcclxuXHRcdFx0XHRpZiAoIHZhbHVlICE9PSAnJyApIGZpZWxkX2VsLnZhbHVlID0gU3RyaW5nKCB2YWx1ZSApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRjdHJsX3dyYXAuYXBwZW5kQ2hpbGQoIGZpZWxkX2VsICk7XHJcblx0XHRcdHJvd19lbC5hcHBlbmRDaGlsZCggbGFiZWxfZWwgKTtcclxuXHRcdFx0cm93X2VsLmFwcGVuZENoaWxkKCBjdHJsX3dyYXAgKTtcclxuXHRcdFx0cmV0dXJuIHJvd19lbDtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFNjaGVtYSA+IEluc3BlY3RvciA+IEdyb3VwcyEgQnVpbGQgYW4gaW5zcGVjdG9yIGdyb3VwIChjb2xsYXBzaWJsZSkuXHJcblx0XHQgKiBTdHJ1Y3R1cmU6XHJcblx0XHQgKiA8c2VjdGlvbiBjbGFzcz1cIndwYmNfYmZiX19pbnNwZWN0b3JfX2dyb3VwIHdwYmNfdWlfX2NvbGxhcHNpYmxlX2dyb3VwIGlzLW9wZW5cIiBkYXRhLWdyb3VwPVwiLi4uXCI+XHJcblx0XHQgKiAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiZ3JvdXBfX2hlYWRlclwiIHJvbGU9XCJidXR0b25cIiBhcmlhLWV4cGFuZGVkPVwidHJ1ZVwiIGFyaWEtY29udHJvbHM9XCJ3cGJjX2NvbGxhcHNpYmxlX3BhbmVsX1hcIj5cclxuXHRcdCAqICAgICA8aDM+R3JvdXAgVGl0bGU8L2gzPlxyXG5cdFx0ICogICAgIDxpIGNsYXNzPVwid3BiY191aV9lbF9fdmVydF9tZW51X3Jvb3Rfc2VjdGlvbl9pY29uIG1lbnVfaWNvbiBpY29uLTF4IHdwYmMtYmktY2hldnJvbi1yaWdodFwiPjwvaT5cclxuXHRcdCAqICAgPC9idXR0b24+XHJcblx0XHQgKiAgIDxkaXYgY2xhc3M9XCJncm91cF9fZmllbGRzXCIgaWQ9XCJ3cGJjX2NvbGxhcHNpYmxlX3BhbmVsX1hcIiBhcmlhLWhpZGRlbj1cImZhbHNlXCI+IOKApnJvd3PigKYgPC9kaXY+XHJcblx0XHQgKiA8L3NlY3Rpb24+XHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IGdyb3VwXHJcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gcHJvcHNfc2NoZW1hXHJcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gZGF0YVxyXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IHVpZFxyXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IGN0eFxyXG5cdFx0ICogQHJldHVybnMge0hUTUxFbGVtZW50fVxyXG5cdFx0ICovXHJcblx0XHRmdW5jdGlvbiBidWlsZF9ncm91cChncm91cCwgcHJvcHNfc2NoZW1hLCBkYXRhLCB1aWQsIGN0eCkge1xyXG5cdFx0XHR2YXIgaXNfb3BlbiAgPSAhIWdyb3VwLm9wZW47XHJcblx0XHRcdHZhciBwYW5lbF9pZCA9ICd3cGJjX2NvbGxhcHNpYmxlX3BhbmVsXycgKyB1aWQgKyAnXycgKyAoZ3JvdXAua2V5IHx8ICdnJyk7XHJcblxyXG5cdFx0XHR2YXIgc2VjdGlvbiA9IGVsKCAnc2VjdGlvbicsIHtcclxuXHRcdFx0XHQnY2xhc3MnICAgICA6ICd3cGJjX2JmYl9faW5zcGVjdG9yX19ncm91cCB3cGJjX3VpX19jb2xsYXBzaWJsZV9ncm91cCcgKyAoaXNfb3BlbiA/ICcgaXMtb3BlbicgOiAnJyksXHJcblx0XHRcdFx0J2RhdGEtZ3JvdXAnOiBncm91cC5rZXkgfHwgJydcclxuXHRcdFx0fSApO1xyXG5cclxuXHRcdFx0dmFyIGhlYWRlcl9idG4gPSBlbCggJ2J1dHRvbicsIHtcclxuXHRcdFx0XHR0eXBlICAgICAgICAgICA6ICdidXR0b24nLFxyXG5cdFx0XHRcdCdjbGFzcycgICAgICAgIDogJ2dyb3VwX19oZWFkZXInLFxyXG5cdFx0XHRcdHJvbGUgICAgICAgICAgIDogJ2J1dHRvbicsXHJcblx0XHRcdFx0J2FyaWEtZXhwYW5kZWQnOiBpc19vcGVuID8gJ3RydWUnIDogJ2ZhbHNlJyxcclxuXHRcdFx0XHQnYXJpYS1jb250cm9scyc6IHBhbmVsX2lkXHJcblx0XHRcdH0sIFtcclxuXHRcdFx0XHRlbCggJ2gzJywgbnVsbCwgZ3JvdXAudGl0bGUgfHwgZ3JvdXAubGFiZWwgfHwgZ3JvdXAua2V5IHx8ICcnICksXHJcblx0XHRcdFx0ZWwoICdpJywgeyAnY2xhc3MnOiAnd3BiY191aV9lbF9fdmVydF9tZW51X3Jvb3Rfc2VjdGlvbl9pY29uIG1lbnVfaWNvbiBpY29uLTF4IHdwYmMtYmktY2hldnJvbi1yaWdodCcgfSApXHJcblx0XHRcdF0gKTtcclxuXHJcblx0XHRcdHZhciBmaWVsZHMgPSBlbCggJ2RpdicsIHtcclxuXHRcdFx0XHQnY2xhc3MnICAgICAgOiAnZ3JvdXBfX2ZpZWxkcycsXHJcblx0XHRcdFx0aWQgICAgICAgICAgIDogcGFuZWxfaWQsXHJcblx0XHRcdFx0J2FyaWEtaGlkZGVuJzogaXNfb3BlbiA/ICdmYWxzZScgOiAndHJ1ZSdcclxuXHRcdFx0fSApO1xyXG5cclxuXHRcdFx0ZnVuY3Rpb24gYXNBcnJheSh4KSB7XHJcblx0XHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCB4ICkgKSByZXR1cm4geDtcclxuXHRcdFx0XHRpZiAoIHggJiYgdHlwZW9mIHggPT09ICdvYmplY3QnICkgcmV0dXJuIE9iamVjdC52YWx1ZXMoIHggKTtcclxuXHRcdFx0XHRyZXR1cm4geCAhPSBudWxsID8gWyB4IF0gOiBbXTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0YXNBcnJheSggZ3JvdXAuY29udHJvbHMgKS5mb3JFYWNoKCBmdW5jdGlvbiAoY29udHJvbCkge1xyXG5cdFx0XHRcdGZpZWxkcy5hcHBlbmRDaGlsZCggYnVpbGRfY29udHJvbCggY29udHJvbCwgcHJvcHNfc2NoZW1hLCBkYXRhLCB1aWQsIGN0eCApICk7XHJcblx0XHRcdH0gKTtcclxuXHJcblx0XHRcdHNlY3Rpb24uYXBwZW5kQ2hpbGQoIGhlYWRlcl9idG4gKTtcclxuXHRcdFx0c2VjdGlvbi5hcHBlbmRDaGlsZCggZmllbGRzICk7XHJcblx0XHRcdHJldHVybiBzZWN0aW9uO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogU2NoZW1hID4gSW5zcGVjdG9yID4gSGVhZGVyISBCdWlsZCBpbnNwZWN0b3IgaGVhZGVyIHdpdGggYWN0aW9uIGJ1dHRvbnMgd2lyZWQgdG8gZXhpc3RpbmcgZGF0YS1hY3Rpb24gaGFuZGxlcnMuXHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBoZWFkZXJfYWN0aW9uc1xyXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICB0aXRsZV90ZXh0XHJcblx0XHQgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9XHJcblx0XHQgKi9cclxuXHRcdGZ1bmN0aW9uIGJ1aWxkX2hlYWRlcihpbnNwZWN0b3JfdWksIHRpdGxlX2ZhbGxiYWNrLCBzY2hlbWFfZm9yX3R5cGUpIHtcclxuXHJcblx0XHRcdGluc3BlY3Rvcl91aSAgICAgID0gaW5zcGVjdG9yX3VpIHx8IHt9O1xyXG5cdFx0XHRzY2hlbWFfZm9yX3R5cGUgICA9IHNjaGVtYV9mb3JfdHlwZSB8fCB7fTtcclxuXHRcdFx0dmFyIHZhcmlhbnQgICAgICAgPSBpbnNwZWN0b3JfdWkuaGVhZGVyX3ZhcmlhbnQgfHwgJ21pbmltYWwnO1xyXG5cdFx0XHR2YXIgaGVhZGVyQWN0aW9ucyA9IGluc3BlY3Rvcl91aS5oZWFkZXJfYWN0aW9uc1xyXG5cdFx0XHRcdHx8IHNjaGVtYV9mb3JfdHlwZS5oZWFkZXJfYWN0aW9uc1xyXG5cdFx0XHRcdHx8IFsgJ2Rlc2VsZWN0JywgJ3Njcm9sbHRvJywgJ21vdmUtdXAnLCAnbW92ZS1kb3duJywgJ2R1cGxpY2F0ZScsICdkZWxldGUnIF07XHJcblxyXG5cdFx0XHR2YXIgdGl0bGUgICAgICAgPSBpbnNwZWN0b3JfdWkudGl0bGUgfHwgdGl0bGVfZmFsbGJhY2sgfHwgJyc7XHJcblx0XHRcdHZhciBkZXNjcmlwdGlvbiA9IGluc3BlY3Rvcl91aS5kZXNjcmlwdGlvbiB8fCAnJztcclxuXHJcblx0XHRcdC8vIGhlbHBlciB0byBjcmVhdGUgYSBidXR0b24gZm9yIGVpdGhlciBoZWFkZXIgc3R5bGVcclxuXHRcdFx0ZnVuY3Rpb24gYWN0aW9uQnRuKGFjdCwgbWluaW1hbCkge1xyXG5cdFx0XHRcdGlmICggbWluaW1hbCApIHtcclxuXHRcdFx0XHRcdHJldHVybiBlbCggJ2J1dHRvbicsIHsgdHlwZTogJ2J1dHRvbicsICdjbGFzcyc6ICdidXR0b24tbGluaycsICdkYXRhLWFjdGlvbic6IGFjdCB9LCAnJyApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQvLyB0b29sYmFyIHZhcmlhbnQgKHJpY2gpXHJcblx0XHRcdFx0dmFyIGljb25NYXAgPSB7XHJcblx0XHRcdFx0XHQnZGVzZWxlY3QnIDogJ3dwYmNfaWNuX3JlbW92ZV9kb25lJyxcclxuXHRcdFx0XHRcdCdzY3JvbGx0bycgOiAnd3BiY19pY25fYWRzX2NsaWNrIGZpbHRlcl9jZW50ZXJfZm9jdXMnLFxyXG5cdFx0XHRcdFx0J21vdmUtdXAnICA6ICd3cGJjX2ljbl9hcnJvd191cHdhcmQnLFxyXG5cdFx0XHRcdFx0J21vdmUtZG93bic6ICd3cGJjX2ljbl9hcnJvd19kb3dud2FyZCcsXHJcblx0XHRcdFx0XHQnZHVwbGljYXRlJzogJ3dwYmNfaWNuX2NvbnRlbnRfY29weScsXHJcblx0XHRcdFx0XHQnZGVsZXRlJyAgIDogJ3dwYmNfaWNuX2RlbGV0ZV9vdXRsaW5lJ1xyXG5cdFx0XHRcdH07XHJcblx0XHRcdFx0dmFyIGNsYXNzZXMgPSAnYnV0dG9uIGJ1dHRvbi1zZWNvbmRhcnkgd3BiY191aV9jb250cm9sIHdwYmNfdWlfYnV0dG9uJztcclxuXHRcdFx0XHRpZiAoIGFjdCA9PT0gJ2RlbGV0ZScgKSBjbGFzc2VzICs9ICcgd3BiY191aV9idXR0b25fZGFuZ2VyIGJ1dHRvbi1saW5rLWRlbGV0ZSc7XHJcblxyXG5cdFx0XHRcdHZhciBidG4gPSBlbCggJ2J1dHRvbicsIHtcclxuXHRcdFx0XHRcdHR5cGUgICAgICAgICA6ICdidXR0b24nLFxyXG5cdFx0XHRcdFx0J2NsYXNzJyAgICAgIDogY2xhc3NlcyxcclxuXHRcdFx0XHRcdCdkYXRhLWFjdGlvbic6IGFjdCxcclxuXHRcdFx0XHRcdCdhcmlhLWxhYmVsJyA6IGFjdC5yZXBsYWNlKCAvLS9nLCAnICcgKVxyXG5cdFx0XHRcdH0gKTtcclxuXHJcblx0XHRcdFx0aWYgKCBhY3QgPT09ICdkZWxldGUnICkge1xyXG5cdFx0XHRcdFx0YnRuLmFwcGVuZENoaWxkKCBlbCggJ3NwYW4nLCB7ICdjbGFzcyc6ICdpbi1idXR0b24tdGV4dCcgfSwgJ0RlbGV0ZScgKSApO1xyXG5cdFx0XHRcdFx0YnRuLmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSggJyAnICkgKTsgLy8gbWlub3Igc3BhY2luZyBiZWZvcmUgaWNvblxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRidG4uYXBwZW5kQ2hpbGQoIGVsKCAnaScsIHsgJ2NsYXNzJzogJ21lbnVfaWNvbiBpY29uLTF4ICcgKyAoaWNvbk1hcFthY3RdIHx8ICcnKSB9ICkgKTtcclxuXHRcdFx0XHRyZXR1cm4gYnRuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyA9PT0gbWluaW1hbCBoZWFkZXIgKGV4aXN0aW5nIGxvb2s7IGRlZmF1bHQpID09PVxyXG5cdFx0XHRpZiAoIHZhcmlhbnQgIT09ICd0b29sYmFyJyApIHtcclxuXHRcdFx0XHR2YXIgaGVhZGVyID0gZWwoICdoZWFkZXInLCB7ICdjbGFzcyc6ICd3cGJjX2JmYl9faW5zcGVjdG9yX19oZWFkZXInIH0gKTtcclxuXHRcdFx0XHRoZWFkZXIuYXBwZW5kQ2hpbGQoIGVsKCAnaDMnLCBudWxsLCB0aXRsZSB8fCAnJyApICk7XHJcblxyXG5cdFx0XHRcdHZhciBhY3Rpb25zID0gZWwoICdkaXYnLCB7ICdjbGFzcyc6ICd3cGJjX2JmYl9faW5zcGVjdG9yX19oZWFkZXJfYWN0aW9ucycgfSApO1xyXG5cdFx0XHRcdGhlYWRlckFjdGlvbnMuZm9yRWFjaCggZnVuY3Rpb24gKGFjdCkge1xyXG5cdFx0XHRcdFx0YWN0aW9ucy5hcHBlbmRDaGlsZCggYWN0aW9uQnRuKCBhY3QsIC8qbWluaW1hbCovdHJ1ZSApICk7XHJcblx0XHRcdFx0fSApO1xyXG5cdFx0XHRcdGhlYWRlci5hcHBlbmRDaGlsZCggYWN0aW9ucyApO1xyXG5cdFx0XHRcdHJldHVybiBoZWFkZXI7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vID09PSB0b29sYmFyIGhlYWRlciAocmljaCB0aXRsZS9kZXNjICsgZ3JvdXBlZCBidXR0b25zKSA9PT1cclxuXHRcdFx0dmFyIHJvb3QgPSBlbCggJ2RpdicsIHsgJ2NsYXNzJzogJ3dwYmNfYmZiX19pbnNwZWN0b3JfX2hlYWQnIH0gKTtcclxuXHRcdFx0dmFyIHdyYXAgPSBlbCggJ2RpdicsIHsgJ2NsYXNzJzogJ2hlYWRlcl9jb250YWluZXInIH0gKTtcclxuXHRcdFx0dmFyIGxlZnQgPSBlbCggJ2RpdicsIHsgJ2NsYXNzJzogJ2hlYWRlcl90aXRsZV9jb250ZW50JyB9ICk7XHJcblx0XHRcdHZhciBoMyAgID0gZWwoICdoMycsIHsgJ2NsYXNzJzogJ3RpdGxlJyB9LCB0aXRsZSB8fCAnJyApO1xyXG5cdFx0XHRsZWZ0LmFwcGVuZENoaWxkKCBoMyApO1xyXG5cdFx0XHRpZiAoIGRlc2NyaXB0aW9uICkge1xyXG5cdFx0XHRcdGxlZnQuYXBwZW5kQ2hpbGQoIGVsKCAnZGl2JywgeyAnY2xhc3MnOiAnZGVzYycgfSwgZGVzY3JpcHRpb24gKSApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHR2YXIgcmlnaHQgPSBlbCggJ2RpdicsIHsgJ2NsYXNzJzogJ2FjdGlvbnMgd3BiY19hanhfdG9vbGJhciB3cGJjX25vX2JvcmRlcnMnIH0gKTtcclxuXHRcdFx0dmFyIHVpQyAgID0gZWwoICdkaXYnLCB7ICdjbGFzcyc6ICd1aV9jb250YWluZXIgdWlfY29udGFpbmVyX3NtYWxsJyB9ICk7XHJcblx0XHRcdHZhciB1aUcgICA9IGVsKCAnZGl2JywgeyAnY2xhc3MnOiAndWlfZ3JvdXAnIH0gKTtcclxuXHJcblx0XHRcdC8vIFNwbGl0IGludG8gdmlzdWFsIGdyb3VwczogZmlyc3QgMiwgbmV4dCAyLCB0aGVuIHRoZSByZXN0LlxyXG5cdFx0XHR2YXIgZzEgPSBlbCggJ2RpdicsIHsgJ2NsYXNzJzogJ3VpX2VsZW1lbnQnIH0gKTtcclxuXHRcdFx0dmFyIGcyID0gZWwoICdkaXYnLCB7ICdjbGFzcyc6ICd1aV9lbGVtZW50JyB9ICk7XHJcblx0XHRcdHZhciBnMyA9IGVsKCAnZGl2JywgeyAnY2xhc3MnOiAndWlfZWxlbWVudCcgfSApO1xyXG5cclxuXHRcdFx0aGVhZGVyQWN0aW9ucy5zbGljZSggMCwgMiApLmZvckVhY2goIGZ1bmN0aW9uIChhY3QpIHtcclxuXHRcdFx0XHRnMS5hcHBlbmRDaGlsZCggYWN0aW9uQnRuKCBhY3QsIGZhbHNlICkgKTtcclxuXHRcdFx0fSApO1xyXG5cdFx0XHRoZWFkZXJBY3Rpb25zLnNsaWNlKCAyLCA0ICkuZm9yRWFjaCggZnVuY3Rpb24gKGFjdCkge1xyXG5cdFx0XHRcdGcyLmFwcGVuZENoaWxkKCBhY3Rpb25CdG4oIGFjdCwgZmFsc2UgKSApO1xyXG5cdFx0XHR9ICk7XHJcblx0XHRcdGhlYWRlckFjdGlvbnMuc2xpY2UoIDQgKS5mb3JFYWNoKCBmdW5jdGlvbiAoYWN0KSB7XHJcblx0XHRcdFx0ZzMuYXBwZW5kQ2hpbGQoIGFjdGlvbkJ0biggYWN0LCBmYWxzZSApICk7XHJcblx0XHRcdH0gKTtcclxuXHJcblx0XHRcdHVpRy5hcHBlbmRDaGlsZCggZzEgKTtcclxuXHRcdFx0dWlHLmFwcGVuZENoaWxkKCBnMiApO1xyXG5cdFx0XHR1aUcuYXBwZW5kQ2hpbGQoIGczICk7XHJcblx0XHRcdHVpQy5hcHBlbmRDaGlsZCggdWlHICk7XHJcblx0XHRcdHJpZ2h0LmFwcGVuZENoaWxkKCB1aUMgKTtcclxuXHJcblx0XHRcdHdyYXAuYXBwZW5kQ2hpbGQoIGxlZnQgKTtcclxuXHRcdFx0d3JhcC5hcHBlbmRDaGlsZCggcmlnaHQgKTtcclxuXHRcdFx0cm9vdC5hcHBlbmRDaGlsZCggd3JhcCApO1xyXG5cclxuXHRcdFx0cmV0dXJuIHJvb3Q7XHJcblx0XHR9XHJcblxyXG5cclxuXHRcdGZ1bmN0aW9uIGZhY3RvcnlfcmVuZGVyKHBhbmVsX2VsLCBzY2hlbWFfZm9yX3R5cGUsIGRhdGEsIG9wdHMpIHtcclxuXHRcdFx0aWYgKCAhcGFuZWxfZWwgKSByZXR1cm4gcGFuZWxfZWw7XHJcblxyXG5cdFx0XHRzY2hlbWFfZm9yX3R5cGUgID0gc2NoZW1hX2Zvcl90eXBlIHx8IHt9O1xyXG5cdFx0XHR2YXIgcHJvcHNfc2NoZW1hID0gKHNjaGVtYV9mb3JfdHlwZS5zY2hlbWEgJiYgc2NoZW1hX2Zvcl90eXBlLnNjaGVtYS5wcm9wcykgPyBzY2hlbWFfZm9yX3R5cGUuc2NoZW1hLnByb3BzIDoge307XHJcblx0XHRcdHZhciBpbnNwZWN0b3JfdWkgPSAoc2NoZW1hX2Zvcl90eXBlLmluc3BlY3Rvcl91aSB8fCB7fSk7XHJcblx0XHRcdHZhciBncm91cHMgICAgICAgPSBpbnNwZWN0b3JfdWkuZ3JvdXBzIHx8IFtdO1xyXG5cclxuXHRcdFx0dmFyIGhlYWRlcl9hY3Rpb25zID0gaW5zcGVjdG9yX3VpLmhlYWRlcl9hY3Rpb25zIHx8IHNjaGVtYV9mb3JfdHlwZS5oZWFkZXJfYWN0aW9ucyB8fCBbXTtcclxuXHRcdFx0dmFyIHRpdGxlX3RleHQgICAgID0gKG9wdHMgJiYgb3B0cy50aXRsZSkgfHwgaW5zcGVjdG9yX3VpLnRpdGxlIHx8IHNjaGVtYV9mb3JfdHlwZS5sYWJlbCB8fCAoZGF0YSAmJiBkYXRhLmxhYmVsKSB8fCAnJztcclxuXHJcblx0XHQvLyBQcmVwYXJlIHJlbmRlcmluZyBjb250ZXh0IGZvciBzbG90cy92YWx1ZV9mcm9tLCBldGMuXHJcblx0XHRcdHZhciBjdHggPSB7XHJcblx0XHRcdFx0ZWwgICAgIDogb3B0cyAmJiBvcHRzLmVsIHx8IG51bGwsXHJcblx0XHRcdFx0YnVpbGRlcjogb3B0cyAmJiBvcHRzLmJ1aWxkZXIgfHwgbnVsbCxcclxuXHRcdFx0XHR0eXBlICAgOiBvcHRzICYmIG9wdHMudHlwZSB8fCBudWxsLFxyXG5cdFx0XHRcdGRhdGEgICA6IGRhdGEgfHwge31cclxuXHRcdFx0fTtcclxuXHJcblx0XHRcdC8vIGNsZWFyIHBhbmVsLlxyXG5cdFx0XHR3aGlsZSAoIHBhbmVsX2VsLmZpcnN0Q2hpbGQgKSBwYW5lbF9lbC5yZW1vdmVDaGlsZCggcGFuZWxfZWwuZmlyc3RDaGlsZCApO1xyXG5cclxuXHRcdFx0dmFyIHVpZCA9IE1hdGgucmFuZG9tKCkudG9TdHJpbmcoIDM2ICkuc2xpY2UoIDIsIDggKTtcclxuXHJcblx0XHRcdC8vIGhlYWRlci5cclxuXHRcdFx0cGFuZWxfZWwuYXBwZW5kQ2hpbGQoIGJ1aWxkX2hlYWRlciggaW5zcGVjdG9yX3VpLCB0aXRsZV90ZXh0LCBzY2hlbWFfZm9yX3R5cGUgKSApO1xyXG5cclxuXHJcblx0XHRcdC8vIGdyb3Vwcy5cclxuXHRcdFx0Z3JvdXBzLmZvckVhY2goIGZ1bmN0aW9uIChnKSB7XHJcblx0XHRcdFx0cGFuZWxfZWwuYXBwZW5kQ2hpbGQoIGJ1aWxkX2dyb3VwKCBnLCBwcm9wc19zY2hlbWEsIGRhdGEgfHwge30sIHVpZCwgY3R4ICkgKTtcclxuXHRcdFx0fSApO1xyXG5cclxuXHRcdFx0Ly8gQVJJQSBzeW5jIGZvciB0b2dnbGVzIGNyZWF0ZWQgaGVyZSAoZW5zdXJlIGFyaWEtY2hlY2tlZCBtYXRjaGVzIHN0YXRlKS5cclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHQvLyBDZW50cmFsaXplZCBVSSBub3JtYWxpemVycyAodG9nZ2xlcyArIEExMXkpOiBoYW5kbGVkIGluIENvcmUuXHJcblx0XHRcdFx0VUkuYXBwbHlfcG9zdF9yZW5kZXIoIHBhbmVsX2VsICk7XHJcblx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdHdpcmVfbGVuX2dyb3VwKCBwYW5lbF9lbCApO1xyXG5cdFx0XHRcdFx0Ly8gSW5pdGlhbGl6ZSBDb2xvcmlzIG9uIGNvbG9yIGlucHV0cyByZW5kZXJlZCBpbiB0aGlzIHBhbmVsLlxyXG5cdFx0XHRcdFx0aW5pdF9jb2xvcmlzX3BpY2tlcnMoIHBhbmVsX2VsICk7XHJcblx0XHRcdFx0fSBjYXRjaCAoIF8gKSB7IH1cclxuXHRcdFx0fSBjYXRjaCAoIF8gKSB7IH1cclxuXHJcblx0XHRcdHJldHVybiBwYW5lbF9lbDtcclxuXHRcdH1cclxuXHJcblx0XHRVSS5XUEJDX0JGQl9JbnNwZWN0b3JfRmFjdG9yeSA9IHsgcmVuZGVyOiBmYWN0b3J5X3JlbmRlciB9OyAgIC8vIG92ZXJ3cml0ZS9yZWZyZXNoXHJcblxyXG5cdFx0Ly8gLS0tLSBCdWlsdC1pbiBzbG90ICsgdmFsdWVfZnJvbSBmb3IgU2VjdGlvbnMgLS0tLVxyXG5cclxuXHRcdGZ1bmN0aW9uIHNsb3RfbGF5b3V0X2NoaXBzKGhvc3QsIGN0eCkge1xyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdHZhciBMID0gdy5XUEJDX0JGQl9Db3JlICYmICB3LldQQkNfQkZCX0NvcmUuVUkgJiYgdy5XUEJDX0JGQl9Db3JlLlVJLldQQkNfQkZCX0xheW91dF9DaGlwcztcclxuXHRcdFx0XHRpZiAoIEwgJiYgdHlwZW9mIEwucmVuZGVyX2Zvcl9zZWN0aW9uID09PSAnZnVuY3Rpb24nICkge1xyXG5cdFx0XHRcdFx0TC5yZW5kZXJfZm9yX3NlY3Rpb24oIGN0eC5idWlsZGVyLCBjdHguZWwsIGhvc3QgKTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0aG9zdC5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoICdbbGF5b3V0X2NoaXBzIG5vdCBhdmFpbGFibGVdJyApICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGNhdGNoICggZSApIHtcclxuXHRcdFx0XHRjb25zb2xlLndhcm4oICd3cGJjX2JmYl9zbG90X2xheW91dF9jaGlwcyBmYWlsZWQ6JywgZSApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0dy53cGJjX2JmYl9pbnNwZWN0b3JfZmFjdG9yeV9zbG90cy5sYXlvdXRfY2hpcHMgPSBzbG90X2xheW91dF9jaGlwcztcclxuXHJcblx0XHRmdW5jdGlvbiB2YWx1ZV9mcm9tX2NvbXB1dGVfc2VjdGlvbl9jb2x1bW5zKGN0eCkge1xyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdHZhciByb3cgPSBjdHggJiYgY3R4LmVsICYmIGN0eC5lbC5xdWVyeVNlbGVjdG9yICYmIGN0eC5lbC5xdWVyeVNlbGVjdG9yKCAnOnNjb3BlID4gLndwYmNfYmZiX19yb3cnICk7XHJcblx0XHRcdFx0aWYgKCAhcm93ICkgcmV0dXJuIDE7XHJcblx0XHRcdFx0dmFyIG4gPSByb3cucXVlcnlTZWxlY3RvckFsbCggJzpzY29wZSA+IC53cGJjX2JmYl9fY29sdW1uJyApLmxlbmd0aCB8fCAxO1xyXG5cdFx0XHRcdGlmICggbiA8IDEgKSBuID0gMTtcclxuXHRcdFx0XHRpZiAoIG4gPiA0ICkgbiA9IDQ7XHJcblx0XHRcdFx0cmV0dXJuIG47XHJcblx0XHRcdH0gY2F0Y2ggKCBfICkge1xyXG5cdFx0XHRcdHJldHVybiAxO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0dy53cGJjX2JmYl9pbnNwZWN0b3JfZmFjdG9yeV92YWx1ZV9mcm9tLmNvbXB1dGVfc2VjdGlvbl9jb2x1bW5zID0gdmFsdWVfZnJvbV9jb21wdXRlX3NlY3Rpb25fY29sdW1ucztcclxuXHR9XHJcblxyXG5cdC8vIDMpIEluc3BlY3RvciBjbGFzcy5cclxuXHJcblx0Y2xhc3MgV1BCQ19CRkJfSW5zcGVjdG9yIHtcclxuXHJcblx0XHRjb25zdHJ1Y3RvcihwYW5lbF9lbCwgYnVpbGRlcikge1xyXG5cdFx0XHR0aGlzLnBhbmVsICAgICAgICAgPSBwYW5lbF9lbCB8fCB0aGlzLl9jcmVhdGVfZmFsbGJhY2tfcGFuZWwoKTtcclxuXHRcdFx0dGhpcy5idWlsZGVyICAgICAgID0gYnVpbGRlcjtcclxuXHRcdFx0dGhpcy5zZWxlY3RlZF9lbCAgID0gbnVsbDtcclxuXHRcdFx0dGhpcy5fcmVuZGVyX3RpbWVyID0gbnVsbDtcclxuXHJcblx0XHRcdHRoaXMuX29uX2RlbGVnYXRlZF9pbnB1dCAgPSAoZSkgPT4gdGhpcy5fYXBwbHlfY29udHJvbF9mcm9tX2V2ZW50KCBlICk7XHJcblx0XHRcdHRoaXMuX29uX2RlbGVnYXRlZF9jaGFuZ2UgPSAoZSkgPT4gdGhpcy5fYXBwbHlfY29udHJvbF9mcm9tX2V2ZW50KCBlICk7XHJcblx0XHRcdHRoaXMucGFuZWwuYWRkRXZlbnRMaXN0ZW5lciggJ2lucHV0JywgdGhpcy5fb25fZGVsZWdhdGVkX2lucHV0LCB0cnVlICk7XHJcblx0XHRcdHRoaXMucGFuZWwuYWRkRXZlbnRMaXN0ZW5lciggJ2NoYW5nZScsIHRoaXMuX29uX2RlbGVnYXRlZF9jaGFuZ2UsIHRydWUgKTtcclxuXHJcblx0XHRcdHRoaXMuX29uX2RlbGVnYXRlZF9jbGljayA9IChlKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgYnRuID0gZS50YXJnZXQuY2xvc2VzdCggJ1tkYXRhLWFjdGlvbl0nICk7XHJcblx0XHRcdFx0aWYgKCAhYnRuIHx8ICF0aGlzLnBhbmVsLmNvbnRhaW5zKCBidG4gKSApIHJldHVybjtcclxuXHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XHJcblx0XHRcdFx0ZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcblx0XHRcdFx0Y29uc3QgYWN0aW9uID0gYnRuLmdldEF0dHJpYnV0ZSggJ2RhdGEtYWN0aW9uJyApO1xyXG5cdFx0XHRcdGNvbnN0IGVsICAgICA9IHRoaXMuc2VsZWN0ZWRfZWw7XHJcblx0XHRcdFx0aWYgKCAhZWwgKSByZXR1cm47XHJcblxyXG5cdFx0XHRcdHcuV1BCQ19CRkJfSW5zcGVjdG9yX0FjdGlvbnM/LnJ1biggYWN0aW9uLCB7XHJcblx0XHRcdFx0XHRidWlsZGVyOiB0aGlzLmJ1aWxkZXIsXHJcblx0XHRcdFx0XHRlbCxcclxuXHRcdFx0XHRcdHBhbmVsICA6IHRoaXMucGFuZWwsXHJcblx0XHRcdFx0XHRldmVudCAgOiBlXHJcblx0XHRcdFx0fSApO1xyXG5cclxuXHRcdFx0XHRpZiAoIGFjdGlvbiA9PT0gJ2RlbGV0ZScgKSB0aGlzLmNsZWFyKCk7XHJcblx0XHRcdH07XHJcblx0XHRcdHRoaXMucGFuZWwuYWRkRXZlbnRMaXN0ZW5lciggJ2NsaWNrJywgdGhpcy5fb25fZGVsZWdhdGVkX2NsaWNrICk7XHJcblx0XHR9XHJcblxyXG5cdFx0X3Bvc3RfcmVuZGVyX3VpKCkge1xyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdHZhciBVSSA9IHcuV1BCQ19CRkJfQ29yZSAmJiB3LldQQkNfQkZCX0NvcmUuVUk7XHJcblx0XHRcdFx0aWYgKCBVSSAmJiB0eXBlb2YgVUkuYXBwbHlfcG9zdF9yZW5kZXIgPT09ICdmdW5jdGlvbicgKSB7XHJcblx0XHRcdFx0XHRVSS5hcHBseV9wb3N0X3JlbmRlciggdGhpcy5wYW5lbCApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQvLyBORVc6IHdpcmUgc2xpZGVyL251bWJlci91bml0IHN5bmNpbmcgZm9yIGxlbmd0aCAmIHJhbmdlX251bWJlciBncm91cHMuXHJcblx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdHdpcmVfbGVuX2dyb3VwKCB0aGlzLnBhbmVsICk7XHJcblx0XHRcdFx0XHRpbml0X2NvbG9yaXNfcGlja2VycyggdGhpcy5wYW5lbCApO1xyXG5cdFx0XHRcdH0gY2F0Y2ggKCBfICkge1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBjYXRjaCAoIGUgKSB7XHJcblx0XHRcdFx0X3dwYmM/LmRldj8uZXJyb3I/LiggJ2luc3BlY3Rvci5fcG9zdF9yZW5kZXJfdWknLCBlICk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblxyXG5cdFx0X2FwcGx5X2NvbnRyb2xfZnJvbV9ldmVudChlKSB7XHJcblx0XHRcdGlmICggIXRoaXMucGFuZWwuY29udGFpbnMoIGUudGFyZ2V0ICkgKSByZXR1cm47XHJcblxyXG5cdFx0XHRjb25zdCB0ICAgPSAvKiogQHR5cGUge0hUTUxJbnB1dEVsZW1lbnR8SFRNTFRleHRBcmVhRWxlbWVudHxIVE1MU2VsZWN0RWxlbWVudH0gKi8gKGUudGFyZ2V0KTtcclxuXHRcdFx0Y29uc3Qga2V5ID0gdD8uZGF0YXNldD8uaW5zcGVjdG9yS2V5O1xyXG5cdFx0XHRpZiAoICFrZXkgKSByZXR1cm47XHJcblxyXG5cdFx0XHRjb25zdCBlbCA9IHRoaXMuc2VsZWN0ZWRfZWw7XHJcblx0XHRcdGlmICggIWVsIHx8ICFkb2N1bWVudC5ib2R5LmNvbnRhaW5zKCBlbCApICkgcmV0dXJuO1xyXG5cclxuXHRcdFx0bGV0IHY7XHJcblx0XHRcdGlmICggdCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQgJiYgdC50eXBlID09PSAnY2hlY2tib3gnICkge1xyXG5cdFx0XHRcdHYgPSAhIXQuY2hlY2tlZDtcclxuXHRcdFx0XHR0LnNldEF0dHJpYnV0ZSggJ2FyaWEtY2hlY2tlZCcsIHYgPyAndHJ1ZScgOiAnZmFsc2UnICk7ICAgICAgICAgLy8gS2VlcCBBUklBIHN0YXRlIGluIHN5bmMgZm9yIHRvZ2dsZXMgKHNjaGVtYSBhbmQgdGVtcGxhdGUgcGF0aHMpLlxyXG5cdFx0XHR9IGVsc2UgaWYgKCB0IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCAmJiB0LnR5cGUgPT09ICdudW1iZXInICkge1xyXG5cdFx0XHRcdHYgPSAodC52YWx1ZSA9PT0gJycgPyAnJyA6IE51bWJlciggdC52YWx1ZSApKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHR2ID0gdC52YWx1ZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKCBrZXkgPT09ICdpZCcgKSB7XHJcblx0XHRcdFx0Y29uc3QgdW5pcXVlID0gdGhpcy5idWlsZGVyPy5pZD8uc2V0X2ZpZWxkX2lkPy4oIGVsLCB2ICk7XHJcblx0XHRcdFx0aWYgKCB1bmlxdWUgIT0gbnVsbCAmJiB0LnZhbHVlICE9PSB1bmlxdWUgKSB0LnZhbHVlID0gdW5pcXVlO1xyXG5cclxuXHRcdFx0fSBlbHNlIGlmICgga2V5ID09PSAnbmFtZScgKSB7XHJcblx0XHRcdFx0Y29uc3QgdW5pcXVlID0gdGhpcy5idWlsZGVyPy5pZD8uc2V0X2ZpZWxkX25hbWU/LiggZWwsIHYgKTtcclxuXHRcdFx0XHRpZiAoIHVuaXF1ZSAhPSBudWxsICYmIHQudmFsdWUgIT09IHVuaXF1ZSApIHQudmFsdWUgPSB1bmlxdWU7XHJcblxyXG5cdFx0XHR9IGVsc2UgaWYgKCBrZXkgPT09ICdodG1sX2lkJyApIHtcclxuXHRcdFx0XHRjb25zdCBhcHBsaWVkID0gdGhpcy5idWlsZGVyPy5pZD8uc2V0X2ZpZWxkX2h0bWxfaWQ/LiggZWwsIHYgKTtcclxuXHRcdFx0XHRpZiAoIGFwcGxpZWQgIT0gbnVsbCAmJiB0LnZhbHVlICE9PSBhcHBsaWVkICkgdC52YWx1ZSA9IGFwcGxpZWQ7XHJcblxyXG5cdFx0XHR9IGVsc2UgaWYgKCBrZXkgPT09ICdjb2x1bW5zJyAmJiBlbC5jbGFzc0xpc3QuY29udGFpbnMoICd3cGJjX2JmYl9fc2VjdGlvbicgKSApIHtcclxuXHRcdFx0XHRjb25zdCB2X2ludCA9IHBhcnNlSW50KCBTdHJpbmcoIHYgKSwgMTAgKTtcclxuXHRcdFx0XHRpZiAoIE51bWJlci5pc0Zpbml0ZSggdl9pbnQgKSApIHtcclxuXHRcdFx0XHRcdGNvbnN0IGNsYW1wZWQgPSB3LldQQkNfQkZCX0NvcmUuV1BCQ19CRkJfU2FuaXRpemUuY2xhbXAoIHZfaW50LCAxLCA0ICk7XHJcblx0XHRcdFx0XHR0aGlzLmJ1aWxkZXI/LnNldF9zZWN0aW9uX2NvbHVtbnM/LiggZWwsIGNsYW1wZWQgKTtcclxuXHRcdFx0XHRcdGlmICggU3RyaW5nKCBjbGFtcGVkICkgIT09IHQudmFsdWUgKSB0LnZhbHVlID0gU3RyaW5nKCBjbGFtcGVkICk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRpZiAoIHQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50ICYmIHQudHlwZSA9PT0gJ2NoZWNrYm94JyApIHtcclxuXHRcdFx0XHRcdGVsLnNldEF0dHJpYnV0ZSggJ2RhdGEtJyArIGtleSwgU3RyaW5nKCAhIXYgKSApO1xyXG5cdFx0XHRcdH0gZWxzZSBpZiAoIHQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50ICYmIHQudHlwZSA9PT0gJ251bWJlcicgKSB7XHJcblx0XHRcdFx0XHRpZiAoIHQudmFsdWUgPT09ICcnIHx8ICFOdW1iZXIuaXNGaW5pdGUoIHYgKSApIHtcclxuXHRcdFx0XHRcdFx0ZWwucmVtb3ZlQXR0cmlidXRlKCAnZGF0YS0nICsga2V5ICk7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRlbC5zZXRBdHRyaWJ1dGUoICdkYXRhLScgKyBrZXksIFN0cmluZyggdiApICk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSBlbHNlIGlmICggdiA9PSBudWxsICkge1xyXG5cdFx0XHRcdFx0ZWwucmVtb3ZlQXR0cmlidXRlKCAnZGF0YS0nICsga2V5ICk7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGVsLnNldEF0dHJpYnV0ZSggJ2RhdGEtJyArIGtleSwgKHR5cGVvZiB2ID09PSAnb2JqZWN0JykgPyBKU09OLnN0cmluZ2lmeSggdiApIDogU3RyaW5nKCB2ICkgKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIFVwZGF0ZSBwcmV2aWV3L292ZXJsYXlcclxuXHRcdFx0aWYgKCBlbC5jbGFzc0xpc3QuY29udGFpbnMoICd3cGJjX2JmYl9fZmllbGQnICkgKSB7XHJcblx0XHRcdFx0aWYgKCB0aGlzLmJ1aWxkZXI/LnByZXZpZXdfbW9kZSApIHRoaXMuYnVpbGRlci5yZW5kZXJfcHJldmlldyggZWwgKTtcclxuXHRcdFx0XHRlbHNlIHRoaXMuYnVpbGRlci5hZGRfb3ZlcmxheV90b29sYmFyKCBlbCApO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMuYnVpbGRlci5hZGRfb3ZlcmxheV90b29sYmFyKCBlbCApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoIHRoaXMuX25lZWRzX3JlcmVuZGVyKCBlbCwga2V5LCBlICkgKSB7XHJcblx0XHRcdFx0dGhpcy5fc2NoZWR1bGVfcmVuZGVyX3ByZXNlcnZpbmdfZm9jdXMoIDAgKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdF9uZWVkc19yZXJlbmRlcihlbCwga2V5LCBfZSkge1xyXG5cdFx0XHRpZiAoIGVsLmNsYXNzTGlzdC5jb250YWlucyggJ3dwYmNfYmZiX19zZWN0aW9uJyApICYmIGtleSA9PT0gJ2NvbHVtbnMnICkgcmV0dXJuIHRydWU7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRiaW5kX3RvX2ZpZWxkKGZpZWxkX2VsKSB7XHJcblx0XHRcdHRoaXMuc2VsZWN0ZWRfZWwgPSBmaWVsZF9lbDtcclxuXHRcdFx0dGhpcy5yZW5kZXIoKTtcclxuXHRcdH1cclxuXHJcblx0XHRjbGVhcigpIHtcclxuXHRcdFx0dGhpcy5zZWxlY3RlZF9lbCA9IG51bGw7XHJcblx0XHRcdGlmICggdGhpcy5fcmVuZGVyX3RpbWVyICkge1xyXG5cdFx0XHRcdGNsZWFyVGltZW91dCggdGhpcy5fcmVuZGVyX3RpbWVyICk7XHJcblx0XHRcdFx0dGhpcy5fcmVuZGVyX3RpbWVyID0gbnVsbDtcclxuXHRcdFx0fVxyXG5cdFx0XHQvLyBBbHNvIGNsZWFyIHRoZSBzZWN0aW9uLWNvbHMgaGludCBvbiBlbXB0eSBzdGF0ZS5cclxuXHRcdFx0dGhpcy5wYW5lbC5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtYmZiLXNlY3Rpb24tY29scycpO1xyXG5cdFx0XHR0aGlzLnBhbmVsLmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPVwid3BiY19iZmJfX2luc3BlY3Rvcl9fZW1wdHlcIj5TZWxlY3QgYSBmaWVsZCB0byBlZGl0IGl0cyBvcHRpb25zLjwvZGl2Pic7XHJcblx0XHR9XHJcblxyXG5cdFx0X3NjaGVkdWxlX3JlbmRlcl9wcmVzZXJ2aW5nX2ZvY3VzKGRlbGF5ID0gMjAwKSB7XHJcblx0XHRcdGNvbnN0IGFjdGl2ZSAgICA9IC8qKiBAdHlwZSB7SFRNTElucHV0RWxlbWVudHxIVE1MVGV4dEFyZWFFbGVtZW50fEhUTUxFbGVtZW50fG51bGx9ICovIChkb2N1bWVudC5hY3RpdmVFbGVtZW50KTtcclxuXHRcdFx0Y29uc3QgYWN0aXZlS2V5ID0gYWN0aXZlPy5kYXRhc2V0Py5pbnNwZWN0b3JLZXkgfHwgbnVsbDtcclxuXHRcdFx0bGV0IHNlbFN0YXJ0ICAgID0gbnVsbCwgc2VsRW5kID0gbnVsbDtcclxuXHJcblx0XHRcdGlmICggYWN0aXZlICYmICdzZWxlY3Rpb25TdGFydCcgaW4gYWN0aXZlICYmICdzZWxlY3Rpb25FbmQnIGluIGFjdGl2ZSApIHtcclxuXHRcdFx0XHQvLyBAdHMtaWdub3JlXHJcblx0XHRcdFx0c2VsU3RhcnQgPSBhY3RpdmUuc2VsZWN0aW9uU3RhcnQ7XHJcblx0XHRcdFx0Ly8gQHRzLWlnbm9yZVxyXG5cdFx0XHRcdHNlbEVuZCAgID0gYWN0aXZlLnNlbGVjdGlvbkVuZDtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKCB0aGlzLl9yZW5kZXJfdGltZXIgKSBjbGVhclRpbWVvdXQoIHRoaXMuX3JlbmRlcl90aW1lciApO1xyXG5cdFx0XHR0aGlzLl9yZW5kZXJfdGltZXIgPSAvKiogQHR5cGUge3Vua25vd259ICovIChzZXRUaW1lb3V0KCAoKSA9PiB7XHJcblx0XHRcdFx0dGhpcy5yZW5kZXIoKTtcclxuXHRcdFx0XHRpZiAoIGFjdGl2ZUtleSApIHtcclxuXHRcdFx0XHRcdGNvbnN0IG5leHQgPSAvKiogQHR5cGUge0hUTUxJbnB1dEVsZW1lbnR8SFRNTFRleHRBcmVhRWxlbWVudHxIVE1MRWxlbWVudHxudWxsfSAqLyAoXHJcblx0XHRcdFx0XHRcdHRoaXMucGFuZWwucXVlcnlTZWxlY3RvciggYFtkYXRhLWluc3BlY3Rvci1rZXk9XCIke2FjdGl2ZUtleX1cIl1gIClcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRpZiAoIG5leHQgKSB7XHJcblx0XHRcdFx0XHRcdG5leHQuZm9jdXMoKTtcclxuXHRcdFx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdFx0XHRpZiAoIHNlbFN0YXJ0ICE9IG51bGwgJiYgc2VsRW5kICE9IG51bGwgJiYgdHlwZW9mIG5leHQuc2V0U2VsZWN0aW9uUmFuZ2UgPT09ICdmdW5jdGlvbicgKSB7XHJcblx0XHRcdFx0XHRcdFx0XHQvLyBAdHMtaWdub3JlXHJcblx0XHRcdFx0XHRcdFx0XHRuZXh0LnNldFNlbGVjdGlvblJhbmdlKCBzZWxTdGFydCwgc2VsRW5kICk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9IGNhdGNoKCBlICl7IF93cGJjPy5kZXY/LmVycm9yKCAnX3JlbmRlcl90aW1lcicsIGUgKTsgfVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSwgZGVsYXkgKSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmVuZGVyKCkge1xyXG5cclxuXHRcdFx0Y29uc3QgZWwgPSB0aGlzLnNlbGVjdGVkX2VsO1xyXG5cdFx0XHRpZiAoICFlbCB8fCAhZG9jdW1lbnQuYm9keS5jb250YWlucyggZWwgKSApIHJldHVybiB0aGlzLmNsZWFyKCk7XHJcblxyXG5cdFx0XHQvLyBSZXNldCBzZWN0aW9uLWNvbHMgaGludCB1bmxlc3Mgd2Ugc2V0IGl0IGxhdGVyIGZvciBhIHNlY3Rpb24uXHJcblx0XHRcdHRoaXMucGFuZWwucmVtb3ZlQXR0cmlidXRlKCAnZGF0YS1iZmItc2VjdGlvbi1jb2xzJyApO1xyXG5cclxuXHRcdFx0Y29uc3QgcHJldl9zY3JvbGwgPSB0aGlzLnBhbmVsLnNjcm9sbFRvcDtcclxuXHJcblx0XHRcdC8vIFNlY3Rpb25cclxuXHRcdFx0aWYgKCBlbC5jbGFzc0xpc3QuY29udGFpbnMoICd3cGJjX2JmYl9fc2VjdGlvbicgKSApIHtcclxuXHRcdFx0XHRsZXQgdHBsID0gbnVsbDtcclxuXHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0dHBsID0gKHcud3AgJiYgd3AudGVtcGxhdGUgJiYgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICd0bXBsLXdwYmMtYmZiLWluc3BlY3Rvci1zZWN0aW9uJyApKSA/IHdwLnRlbXBsYXRlKCAnd3BiYy1iZmItaW5zcGVjdG9yLXNlY3Rpb24nICkgOiBudWxsO1xyXG5cdFx0XHRcdH0gY2F0Y2ggKCBfICkge1xyXG5cdFx0XHRcdFx0dHBsID0gbnVsbDtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGlmICggdHBsICkge1xyXG5cdFx0XHRcdFx0dGhpcy5wYW5lbC5pbm5lckhUTUwgPSB0cGwoIHt9ICk7XHJcblx0XHRcdFx0XHR0aGlzLl9lbmZvcmNlX2RlZmF1bHRfZ3JvdXBfb3BlbigpO1xyXG5cdFx0XHRcdFx0dGhpcy5fc2V0X3BhbmVsX3NlY3Rpb25fY29scyggZWwgKTtcclxuXHRcdFx0XHRcdHRoaXMuX3Bvc3RfcmVuZGVyX3VpKCk7XHJcblx0XHRcdFx0XHR0aGlzLnBhbmVsLnNjcm9sbFRvcCA9IHByZXZfc2Nyb2xsO1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Y29uc3QgRmFjdG9yeSA9IHcuV1BCQ19CRkJfQ29yZS5VSSAmJiB3LldQQkNfQkZCX0NvcmUuVUkuV1BCQ19CRkJfSW5zcGVjdG9yX0ZhY3Rvcnk7XHJcblx0XHRcdFx0Y29uc3Qgc2NoZW1hcyA9IHcuV1BCQ19CRkJfU2NoZW1hcyB8fCB7fTtcclxuXHRcdFx0XHRjb25zdCBlbnRyeSAgID0gc2NoZW1hc1snc2VjdGlvbiddIHx8IG51bGw7XHJcblx0XHRcdFx0aWYgKCBlbnRyeSAmJiBGYWN0b3J5ICkge1xyXG5cdFx0XHRcdFx0dGhpcy5wYW5lbC5pbm5lckhUTUwgPSAnJztcclxuXHRcdFx0XHRcdEZhY3RvcnkucmVuZGVyKFxyXG5cdFx0XHRcdFx0XHR0aGlzLnBhbmVsLFxyXG5cdFx0XHRcdFx0XHRlbnRyeSxcclxuXHRcdFx0XHRcdFx0e30sXHJcblx0XHRcdFx0XHRcdHsgZWwsIGJ1aWxkZXI6IHRoaXMuYnVpbGRlciwgdHlwZTogJ3NlY3Rpb24nLCB0aXRsZTogZW50cnkubGFiZWwgfHwgJ1NlY3Rpb24nIH1cclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR0aGlzLl9lbmZvcmNlX2RlZmF1bHRfZ3JvdXBfb3BlbigpO1xyXG5cclxuXHRcdFx0XHRcdC8vIC0tLSBTYWZldHkgbmV0OiBpZiBmb3IgYW55IHJlYXNvbiB0aGUgc2xvdCBkaWRu4oCZdCByZW5kZXIgY2hpcHMsIGluamVjdCB0aGVtIG5vdy5cclxuXHRcdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHRcdGNvbnN0IGhhc1Nsb3RIb3N0ID1cclxuXHRcdFx0XHRcdFx0XHRcdCAgdGhpcy5wYW5lbC5xdWVyeVNlbGVjdG9yKCAnW2RhdGEtYmZiLXNsb3Q9XCJsYXlvdXRfY2hpcHNcIl0nICkgfHxcclxuXHRcdFx0XHRcdFx0XHRcdCAgdGhpcy5wYW5lbC5xdWVyeVNlbGVjdG9yKCAnLmluc3BlY3Rvcl9fcm93LS1sYXlvdXQtY2hpcHMgLndwYmNfYmZiX19sYXlvdXRfY2hpcHMnICkgfHxcclxuXHRcdFx0XHRcdFx0XHRcdCAgdGhpcy5wYW5lbC5xdWVyeVNlbGVjdG9yKCAnI3dwYmNfYmZiX19sYXlvdXRfY2hpcHNfaG9zdCcgKTtcclxuXHJcblx0XHRcdFx0XHRcdGNvbnN0IGhhc0NoaXBzID1cclxuXHRcdFx0XHRcdFx0XHRcdCAgISF0aGlzLnBhbmVsLnF1ZXJ5U2VsZWN0b3IoICcud3BiY19iZmJfX2xheW91dF9jaGlwJyApO1xyXG5cclxuXHRcdFx0XHRcdFx0aWYgKCAhaGFzQ2hpcHMgKSB7XHJcblx0XHRcdFx0XHRcdFx0Ly8gQ3JlYXRlIGEgaG9zdCBpZiBtaXNzaW5nIGFuZCByZW5kZXIgY2hpcHMgaW50byBpdC5cclxuXHRcdFx0XHRcdFx0XHRjb25zdCBob3N0ID0gKGZ1bmN0aW9uIGVuc3VyZUhvc3Qocm9vdCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0bGV0IGggPVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJvb3QucXVlcnlTZWxlY3RvciggJ1tkYXRhLWJmYi1zbG90PVwibGF5b3V0X2NoaXBzXCJdJyApIHx8XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0cm9vdC5xdWVyeVNlbGVjdG9yKCAnLmluc3BlY3Rvcl9fcm93LS1sYXlvdXQtY2hpcHMgLndwYmNfYmZiX19sYXlvdXRfY2hpcHMnICkgfHxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyb290LnF1ZXJ5U2VsZWN0b3IoICcjd3BiY19iZmJfX2xheW91dF9jaGlwc19ob3N0JyApO1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCBoICkgcmV0dXJuIGg7XHJcblx0XHRcdFx0XHRcdFx0XHQvLyBGYWxsYmFjayBob3N0IGluc2lkZSAob3IgYWZ0ZXIpIHRoZSDigJxsYXlvdXTigJ0gZ3JvdXBcclxuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGZpZWxkcyAgICA9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICByb290LnF1ZXJ5U2VsZWN0b3IoICcud3BiY19iZmJfX2luc3BlY3Rvcl9fZ3JvdXBbZGF0YS1ncm91cD1cImxheW91dFwiXSAuZ3JvdXBfX2ZpZWxkcycgKSB8fFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgcm9vdC5xdWVyeVNlbGVjdG9yKCAnLmdyb3VwX19maWVsZHMnICkgfHwgcm9vdDtcclxuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IHJvdyAgICAgICA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdkaXYnICk7XHJcblx0XHRcdFx0XHRcdFx0XHRyb3cuY2xhc3NOYW1lICAgPSAnaW5zcGVjdG9yX19yb3cgaW5zcGVjdG9yX19yb3ctLWxheW91dC1jaGlwcyc7XHJcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBsYWIgICAgICAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnbGFiZWwnICk7XHJcblx0XHRcdFx0XHRcdFx0XHRsYWIuY2xhc3NOYW1lICAgPSAnaW5zcGVjdG9yX19sYWJlbCc7XHJcblx0XHRcdFx0XHRcdFx0XHRsYWIudGV4dENvbnRlbnQgPSAnTGF5b3V0JztcclxuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGN0bCAgICAgICA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdkaXYnICk7XHJcblx0XHRcdFx0XHRcdFx0XHRjdGwuY2xhc3NOYW1lICAgPSAnaW5zcGVjdG9yX19jb250cm9sJztcclxuXHRcdFx0XHRcdFx0XHRcdGggICAgICAgICAgICAgICA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdkaXYnICk7XHJcblx0XHRcdFx0XHRcdFx0XHRoLmNsYXNzTmFtZSAgICAgPSAnd3BiY19iZmJfX2xheW91dF9jaGlwcyc7XHJcblx0XHRcdFx0XHRcdFx0XHRoLnNldEF0dHJpYnV0ZSggJ2RhdGEtYmZiLXNsb3QnLCAnbGF5b3V0X2NoaXBzJyApO1xyXG5cdFx0XHRcdFx0XHRcdFx0Y3RsLmFwcGVuZENoaWxkKCBoICk7XHJcblx0XHRcdFx0XHRcdFx0XHRyb3cuYXBwZW5kQ2hpbGQoIGxhYiApO1xyXG5cdFx0XHRcdFx0XHRcdFx0cm93LmFwcGVuZENoaWxkKCBjdGwgKTtcclxuXHRcdFx0XHRcdFx0XHRcdGZpZWxkcy5hcHBlbmRDaGlsZCggcm93ICk7XHJcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gaDtcclxuXHRcdFx0XHRcdFx0XHR9KSggdGhpcy5wYW5lbCApO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRjb25zdCBMID0gKHcuV1BCQ19CRkJfQ29yZSAmJiB3LldQQkNfQkZCX0NvcmUuVUkgJiYgdy5XUEJDX0JGQl9Db3JlLlVJLldQQkNfQkZCX0xheW91dF9DaGlwcykgO1xyXG5cdFx0XHRcdFx0XHRcdGlmICggTCAmJiB0eXBlb2YgTC5yZW5kZXJfZm9yX3NlY3Rpb24gPT09ICdmdW5jdGlvbicgKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRob3N0LmlubmVySFRNTCA9ICcnO1xyXG5cdFx0XHRcdFx0XHRcdFx0TC5yZW5kZXJfZm9yX3NlY3Rpb24oIHRoaXMuYnVpbGRlciwgZWwsIGhvc3QgKTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0gY2F0Y2goIGUgKXsgX3dwYmM/LmRldj8uZXJyb3IoICdXUEJDX0JGQl9JbnNwZWN0b3IgLSByZW5kZXInLCBlICk7IH1cclxuXHJcblx0XHRcdFx0XHR0aGlzLl9zZXRfcGFuZWxfc2VjdGlvbl9jb2xzKCBlbCApO1xyXG5cdFx0XHRcdFx0dGhpcy5wYW5lbC5zY3JvbGxUb3AgPSBwcmV2X3Njcm9sbDtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHRoaXMucGFuZWwuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9XCJ3cGJjX2JmYl9faW5zcGVjdG9yX19lbXB0eVwiPlNlbGVjdCBhIGZpZWxkIHRvIGVkaXQgaXRzIG9wdGlvbnMuPC9kaXY+JztcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIEZpZWxkXHJcblx0XHRcdGlmICggIWVsLmNsYXNzTGlzdC5jb250YWlucyggJ3dwYmNfYmZiX19maWVsZCcgKSApIHJldHVybiB0aGlzLmNsZWFyKCk7XHJcblxyXG5cdFx0XHRjb25zdCBkYXRhID0gdy5XUEJDX0JGQl9Db3JlLldQQkNfRm9ybV9CdWlsZGVyX0hlbHBlci5nZXRfYWxsX2RhdGFfYXR0cmlidXRlcyggZWwgKTtcclxuXHRcdFx0Y29uc3QgdHlwZSA9IGRhdGEudHlwZSB8fCAndGV4dCc7XHJcblxyXG5cdFx0XHRmdW5jdGlvbiBfZ2V0X3RwbChpZCkge1xyXG5cdFx0XHRcdGlmICggIXcud3AgfHwgIXdwLnRlbXBsYXRlICkgcmV0dXJuIG51bGw7XHJcblx0XHRcdFx0aWYgKCAhZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICd0bXBsLScgKyBpZCApICkgcmV0dXJuIG51bGw7XHJcblx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdHJldHVybiB3cC50ZW1wbGF0ZSggaWQgKTtcclxuXHRcdFx0XHR9IGNhdGNoICggZSApIHtcclxuXHRcdFx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Y29uc3QgdHBsX2lkICAgICAgPSBgd3BiYy1iZmItaW5zcGVjdG9yLSR7dHlwZX1gO1xyXG5cdFx0XHRjb25zdCB0cGwgICAgICAgICA9IF9nZXRfdHBsKCB0cGxfaWQgKTtcclxuXHRcdFx0Y29uc3QgZ2VuZXJpY190cGwgPSBfZ2V0X3RwbCggJ3dwYmMtYmZiLWluc3BlY3Rvci1nZW5lcmljJyApO1xyXG5cclxuXHRcdFx0Y29uc3Qgc2NoZW1hcyAgICAgICAgID0gdy5XUEJDX0JGQl9TY2hlbWFzIHx8IHt9O1xyXG5cdFx0XHRjb25zdCBzY2hlbWFfZm9yX3R5cGUgPSBzY2hlbWFzW3R5cGVdIHx8IG51bGw7XHJcblx0XHRcdGNvbnN0IEZhY3RvcnkgICAgICAgICA9IHcuV1BCQ19CRkJfQ29yZS5VSSAmJiB3LldQQkNfQkZCX0NvcmUuVUkuV1BCQ19CRkJfSW5zcGVjdG9yX0ZhY3Rvcnk7XHJcblxyXG5cdFx0XHRpZiAoIHRwbCApIHtcclxuXHRcdFx0XHQvLyBORVc6IG1lcmdlIHNjaGVtYSBkZWZhdWx0cyBzbyBtaXNzaW5nIGtleXMgKGVzcC4gYm9vbGVhbnMpIGhvbm9yIGRlZmF1bHRzIG9uIGZpcnN0IHBhaW50XHJcblx0XHRcdFx0Y29uc3QgaGFzT3duID0gRnVuY3Rpb24uY2FsbC5iaW5kKCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5ICk7XHJcblx0XHRcdFx0Y29uc3QgcHJvcHMgID0gKHNjaGVtYV9mb3JfdHlwZSAmJiBzY2hlbWFfZm9yX3R5cGUuc2NoZW1hICYmIHNjaGVtYV9mb3JfdHlwZS5zY2hlbWEucHJvcHMpID8gc2NoZW1hX2Zvcl90eXBlLnNjaGVtYS5wcm9wcyA6IHt9O1xyXG5cdFx0XHRcdGNvbnN0IG1lcmdlZCA9IHsgLi4uZGF0YSB9O1xyXG5cdFx0XHRcdGlmICggcHJvcHMgKSB7XHJcblx0XHRcdFx0XHRPYmplY3Qua2V5cyggcHJvcHMgKS5mb3JFYWNoKCAoaykgPT4ge1xyXG5cdFx0XHRcdFx0XHRjb25zdCBtZXRhID0gcHJvcHNba10gfHwge307XHJcblx0XHRcdFx0XHRcdGlmICggIWhhc093biggZGF0YSwgayApIHx8IGRhdGFba10gPT09ICcnICkge1xyXG5cdFx0XHRcdFx0XHRcdGlmICggaGFzT3duKCBtZXRhLCAnZGVmYXVsdCcgKSApIHtcclxuXHRcdFx0XHRcdFx0XHRcdC8vIENvZXJjZSBib29sZWFucyB0byBhIHJlYWwgYm9vbGVhbjsgbGVhdmUgb3RoZXJzIGFzLWlzXHJcblx0XHRcdFx0XHRcdFx0XHRtZXJnZWRba10gPSAobWV0YS50eXBlID09PSAnYm9vbGVhbicpID8gISFtZXRhLmRlZmF1bHQgOiBtZXRhLmRlZmF1bHQ7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCBtZXRhLnR5cGUgPT09ICdib29sZWFuJyApIHtcclxuXHRcdFx0XHRcdFx0XHQvLyBOb3JtYWxpemUgdHJ1dGh5IHN0cmluZ3MgaW50byBib29sZWFucyBmb3IgdGVtcGxhdGVzIHRoYXQgY2hlY2sgb24gdHJ1dGhpbmVzc1xyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IHYgICA9IGRhdGFba107XHJcblx0XHRcdFx0XHRcdFx0bWVyZ2VkW2tdID0gKHYgPT09IHRydWUgfHwgdiA9PT0gJ3RydWUnIHx8IHYgPT09IDEgfHwgdiA9PT0gJzEnKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHR0aGlzLnBhbmVsLmlubmVySFRNTCA9IHRwbCggbWVyZ2VkICk7XHJcblxyXG5cdFx0XHRcdHRoaXMuX3Bvc3RfcmVuZGVyX3VpKCk7XHJcblx0XHRcdH0gZWxzZSBpZiAoIHNjaGVtYV9mb3JfdHlwZSAmJiBGYWN0b3J5ICkge1xyXG5cdFx0XHRcdHRoaXMucGFuZWwuaW5uZXJIVE1MID0gJyc7XHJcblx0XHRcdFx0RmFjdG9yeS5yZW5kZXIoXHJcblx0XHRcdFx0XHR0aGlzLnBhbmVsLFxyXG5cdFx0XHRcdFx0c2NoZW1hX2Zvcl90eXBlLFxyXG5cdFx0XHRcdFx0eyAuLi5kYXRhIH0sXHJcblx0XHRcdFx0XHR7IGVsLCBidWlsZGVyOiB0aGlzLmJ1aWxkZXIsIHR5cGUsIHRpdGxlOiBkYXRhLmxhYmVsIHx8ICcnIH1cclxuXHRcdFx0XHQpO1xyXG5cdFx0XHRcdC8vIEVuc3VyZSB0b2dnbGUgbm9ybWFsaXplcnMgYW5kIHNsaWRlci9udW1iZXIvdW5pdCB3aXJpbmcgYXJlIGF0dGFjaGVkLlxyXG5cdFx0XHRcdHRoaXMuX3Bvc3RfcmVuZGVyX3VpKCk7XHJcblx0XHRcdH0gZWxzZSBpZiAoIGdlbmVyaWNfdHBsICkge1xyXG5cdFx0XHRcdHRoaXMucGFuZWwuaW5uZXJIVE1MID0gZ2VuZXJpY190cGwoIHsgLi4uZGF0YSB9ICk7XHJcblx0XHRcdFx0dGhpcy5fcG9zdF9yZW5kZXJfdWkoKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHJcblx0XHRcdFx0Y29uc3QgbXNnICAgICAgICAgICAgPSBgVGhlcmUgYXJlIG5vIEluc3BlY3RvciB3cC50ZW1wbGF0ZSBcIiR7dHBsX2lkfVwiIG9yIFNjaGVtYSBmb3IgdGhpcyBcIiR7U3RyaW5nKCB0eXBlIHx8ICcnICl9XCIgZWxlbWVudC5gO1xyXG5cdFx0XHRcdHRoaXMucGFuZWwuaW5uZXJIVE1MID0gJyc7XHJcblx0XHRcdFx0Y29uc3QgZGl2ICAgICAgICAgICAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnZGl2JyApO1xyXG5cdFx0XHRcdGRpdi5jbGFzc05hbWUgICAgICAgID0gJ3dwYmNfYmZiX19pbnNwZWN0b3JfX2VtcHR5JztcclxuXHRcdFx0XHRkaXYudGV4dENvbnRlbnQgICAgICA9IG1zZzsgLy8gc2FmZS5cclxuXHRcdFx0XHR0aGlzLnBhbmVsLmFwcGVuZENoaWxkKCBkaXYgKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0dGhpcy5fZW5mb3JjZV9kZWZhdWx0X2dyb3VwX29wZW4oKTtcclxuXHRcdFx0dGhpcy5wYW5lbC5zY3JvbGxUb3AgPSBwcmV2X3Njcm9sbDtcclxuXHRcdH1cclxuXHJcblx0XHRfZW5mb3JjZV9kZWZhdWx0X2dyb3VwX29wZW4oKSB7XHJcblx0XHRcdGNvbnN0IGdyb3VwcyA9IEFycmF5LmZyb20oIHRoaXMucGFuZWwucXVlcnlTZWxlY3RvckFsbCggJy53cGJjX2JmYl9faW5zcGVjdG9yX19ncm91cCcgKSApO1xyXG5cdFx0XHRpZiAoICFncm91cHMubGVuZ3RoICkgcmV0dXJuO1xyXG5cclxuXHRcdFx0bGV0IGZvdW5kID0gZmFsc2U7XHJcblx0XHRcdGdyb3Vwcy5mb3JFYWNoKCAoZykgPT4ge1xyXG5cdFx0XHRcdGlmICggIWZvdW5kICYmIGcuY2xhc3NMaXN0LmNvbnRhaW5zKCAnaXMtb3BlbicgKSApIHtcclxuXHRcdFx0XHRcdGZvdW5kID0gdHJ1ZTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0aWYgKCBnLmNsYXNzTGlzdC5jb250YWlucyggJ2lzLW9wZW4nICkgKSB7XHJcblx0XHRcdFx0XHRcdGcuY2xhc3NMaXN0LnJlbW92ZSggJ2lzLW9wZW4nICk7XHJcblx0XHRcdFx0XHRcdGcuZGlzcGF0Y2hFdmVudCggbmV3IEV2ZW50KCAnd3BiYzpjb2xsYXBzaWJsZTpjbG9zZScsIHsgYnViYmxlczogdHJ1ZSB9ICkgKTtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdGcuY2xhc3NMaXN0LnJlbW92ZSggJ2lzLW9wZW4nICk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9ICk7XHJcblxyXG5cdFx0XHRpZiAoICFmb3VuZCApIHtcclxuXHRcdFx0XHRncm91cHNbMF0uY2xhc3NMaXN0LmFkZCggJ2lzLW9wZW4nICk7XHJcblx0XHRcdFx0Z3JvdXBzWzBdLmRpc3BhdGNoRXZlbnQoIG5ldyBFdmVudCggJ3dwYmM6Y29sbGFwc2libGU6b3BlbicsIHsgYnViYmxlczogdHJ1ZSB9ICkgKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogU2V0IGRhdGEtYmZiLXNlY3Rpb24tY29scyBvbiB0aGUgaW5zcGVjdG9yIHBhbmVsIGJhc2VkIG9uIHRoZSBjdXJyZW50IHNlY3Rpb24uXHJcblx0XHQgKiBVc2VzIHRoZSByZWdpc3RlcmVkIGNvbXB1dGUgZm4gaWYgYXZhaWxhYmxlOyBmYWxscyBiYWNrIHRvIGRpcmVjdCBET00uXHJcblx0XHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBzZWN0aW9uRWxcclxuXHRcdCAqL1xyXG5cdFx0X3NldF9wYW5lbF9zZWN0aW9uX2NvbHMoc2VjdGlvbkVsKSB7XHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0Ly8gUHJlZmVyIHRoZSBhbHJlYWR5LXJlZ2lzdGVyZWQgdmFsdWVfZnJvbSBoZWxwZXIgaWYgcHJlc2VudC5cclxuXHRcdFx0XHR2YXIgY29tcHV0ZSA9IHcud3BiY19iZmJfaW5zcGVjdG9yX2ZhY3RvcnlfdmFsdWVfZnJvbSAmJiB3LndwYmNfYmZiX2luc3BlY3Rvcl9mYWN0b3J5X3ZhbHVlX2Zyb20uY29tcHV0ZV9zZWN0aW9uX2NvbHVtbnM7XHJcblxyXG5cdFx0XHRcdHZhciBjb2xzID0gMTtcclxuXHRcdFx0XHRpZiAoIHR5cGVvZiBjb21wdXRlID09PSAnZnVuY3Rpb24nICkge1xyXG5cdFx0XHRcdFx0Y29scyA9IGNvbXB1dGUoIHsgZWw6IHNlY3Rpb25FbCB9ICkgfHwgMTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0Ly8gRmFsbGJhY2s6IGNvbXB1dGUgZGlyZWN0bHkgZnJvbSB0aGUgRE9NLlxyXG5cdFx0XHRcdFx0dmFyIHJvdyA9IHNlY3Rpb25FbCAmJiBzZWN0aW9uRWwucXVlcnlTZWxlY3RvciggJzpzY29wZSA+IC53cGJjX2JmYl9fcm93JyApO1xyXG5cdFx0XHRcdFx0Y29scyAgICA9IHJvdyA/IChyb3cucXVlcnlTZWxlY3RvckFsbCggJzpzY29wZSA+IC53cGJjX2JmYl9fY29sdW1uJyApLmxlbmd0aCB8fCAxKSA6IDE7XHJcblx0XHRcdFx0XHRpZiAoIGNvbHMgPCAxICkgY29scyA9IDE7XHJcblx0XHRcdFx0XHRpZiAoIGNvbHMgPiA0ICkgY29scyA9IDQ7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHRoaXMucGFuZWwuc2V0QXR0cmlidXRlKCAnZGF0YS1iZmItc2VjdGlvbi1jb2xzJywgU3RyaW5nKCBjb2xzICkgKTtcclxuXHRcdFx0fSBjYXRjaCAoIF8gKSB7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblxyXG5cdFx0X2NyZWF0ZV9mYWxsYmFja19wYW5lbCgpIHtcclxuXHRcdFx0Y29uc3QgcCAgICAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnZGl2JyApO1xyXG5cdFx0XHRwLmlkICAgICAgICA9ICd3cGJjX2JmYl9faW5zcGVjdG9yJztcclxuXHRcdFx0cC5jbGFzc05hbWUgPSAnd3BiY19iZmJfX2luc3BlY3Rvcic7XHJcblx0XHRcdGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoIHAgKTtcclxuXHRcdFx0cmV0dXJuIC8qKiBAdHlwZSB7SFRNTERpdkVsZW1lbnR9ICovIChwKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vIEV4cG9ydCBjbGFzcyArIHJlYWR5IHNpZ25hbC5cclxuXHR3LldQQkNfQkZCX0luc3BlY3RvciA9IFdQQkNfQkZCX0luc3BlY3RvcjtcclxuXHRkb2N1bWVudC5kaXNwYXRjaEV2ZW50KCBuZXcgRXZlbnQoICd3cGJjX2JmYl9pbnNwZWN0b3JfcmVhZHknICkgKTtcclxuXHJcbn0pKCB3aW5kb3cgKTtcclxuIl0sIm1hcHBpbmdzIjoiYUFBQTtBQUNBO0FBQ0E7QUFDQSxVQUFBQSxDQUFBLEVBQ0EsYUFFQTtBQUNBLE1BQUFDLElBQUEsQ0FBQUQsQ0FBQSxDQUFBRSxhQUFBLENBQUFGLENBQUEsQ0FBQUUsYUFBQSxLQUNBLE1BQUFDLEVBQUEsQ0FBQUYsSUFBQSxDQUFBRSxFQUFBLENBQUFGLElBQUEsQ0FBQUUsRUFBQSxLQUVBO0FBQ0E7QUFDQTtBQUNBLElBQ0FGLElBQUEsQ0FBQUcsaUJBQUEsT0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0EsT0FBQUMsUUFBQUMsQ0FBQSxFQUNBLE9BQUFOLENBQUEsQ0FBQU8sR0FBQSxFQUFBUCxDQUFBLENBQUFPLEdBQUEsQ0FBQUMsTUFBQSxDQUFBUixDQUFBLENBQUFPLEdBQUEsQ0FBQUMsTUFBQSxDQUFBQyxNQUFBLENBQUFILENBQUEsR0FBQUcsTUFBQSxDQUFBSCxDQUFBLEVBQUFJLE9BQUEscUJBQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0EsT0FBQUMsNEJBQUFDLENBQUEsRUFDQSxPQUFBSCxNQUFBLENBQUFHLENBQUEsRUFDQUYsT0FBQSxlQUNBQSxPQUFBLGFBQ0FBLE9BQUEsZUFDQUEsT0FBQSxjQUNBLENBRUE7QUFD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
1354 +//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX2Rpc3QvYmZiL19vdXQvd3BiY19iZmIuanMiLCJuYW1lcyI6WyJ3IiwiQ29yZSIsIldQQkNfQkZCX0NvcmUiLCJVSSIsIldQQkNfQkZCX1Nhbml0aXplIiwiZXNjX2NzcyIsInMiLCJDU1MiLCJlc2NhcGUiLCJTdHJpbmciLCJyZXBsYWNlIiwiZXNjX2F0dHJfdmFsdWVfZm9yX3NlbGVjdG9yIiwidiIsInNhbml0aXplX2h0bWxfaWQiLCJ0cmltIiwidGVzdCIsInNhbml0aXplX2h0bWxfbmFtZSIsImVzY2FwZV9odG1sIiwiZXNjYXBlX3ZhbHVlX2Zvcl9hdHRyIiwic2FuaXRpemVfY3NzX2NsYXNzbGlzdCIsInRvX3Rva2VuIiwidG9fa2ViYWIiLCJ0b0xvd2VyQ2FzZSIsImlzX3RydXRoeSIsImNvZXJjZV9ib29sZWFuIiwiZGVmIiwicGFyc2VfcGVyY2VudCIsImZhbGxiYWNrX3ZhbHVlIiwibiIsInBhcnNlRmxvYXQiLCJOdW1iZXIiLCJpc0Zpbml0ZSIsImNsYW1wIiwibWluIiwibWF4IiwiTWF0aCIsImVzY2FwZV9mb3JfYXR0cl9xdW90ZWQiLCJlc2NhcGVfZm9yX3Nob3J0Y29kZSIsInNhZmVfanNvbl9wYXJzZSIsImZhbGxiYWNrIiwiSlNPTiIsInBhcnNlIiwiXyIsInN0cmluZ2lmeV9kYXRhX3ZhbHVlIiwic3RyaW5naWZ5IiwiY29uc29sZSIsImVycm9yIiwic2FuaXRpemVfY3NzX2xlbiIsIm0iLCJtYXRjaCIsInNhbml0aXplX2hleF9jb2xvciIsIldQQkNfQkZCX0lkU2VydmljZSIsImNvbnN0cnVjdG9yIiwicGFnZXNfY29udGFpbmVyIiwiZW5zdXJlX3VuaXF1ZV9maWVsZF9pZCIsImJhc2VJZCIsImN1cnJlbnRFbCIsImJhc2UiLCJpZCIsImVzYyIsImVzY1VpZCIsIm5vdFNlbGYiLCJkYXRhc2V0IiwidWlkIiwicXVlcnlTZWxlY3RvciIsImZvdW5kIiwicmFuZG9tIiwidG9TdHJpbmciLCJzbGljZSIsImVuc3VyZV91bmlxdWVfZmllbGRfbmFtZSIsIm5hbWUiLCJzZWxlY3RvciIsImNsYXNoZXMiLCJxdWVyeVNlbGVjdG9yQWxsIiwibGVuZ3RoIiwic2V0X2ZpZWxkX2lkIiwiZmllbGRfZWwiLCJuZXdJZFJhdyIsInJlbmRlclByZXZpZXciLCJkZXNpcmVkIiwidW5pcXVlIiwic2V0QXR0cmlidXRlIiwic2V0X2ZpZWxkX25hbWUiLCJuZXdOYW1lUmF3IiwicmF3IiwiZ2V0QXR0cmlidXRlIiwic2V0X2ZpZWxkX2h0bWxfaWQiLCJuZXdIdG1sSWRSYXciLCJyZW1vdmVBdHRyaWJ1dGUiLCJodG1sSWQiLCJjbGFzaEluQ2FudmFzIiwiZG9tQ2xhc2giLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwiZG9tQ2xhc2hJc1NlbGYiLCJjb250YWlucyIsIldQQkNfQkZCX0xheW91dFNlcnZpY2UiLCJvcHRzIiwiY29sX2dhcF9wZXJjZW50IiwiY29tcHV0ZV9lZmZlY3RpdmVfYmFzZXNfZnJvbV9yb3ciLCJyb3dfZWwiLCJnYXBfcGVyY2VudCIsImNvbHMiLCJBcnJheSIsImZyb20iLCJtYXAiLCJjb2wiLCJzdHlsZSIsImZsZXhCYXNpcyIsInAiLCJOYU4iLCJzdW1fcmF3IiwicmVkdWNlIiwiYSIsImIiLCJncCIsInRvdGFsX2dhcHMiLCJhdmFpbGFibGUiLCJzY2FsZSIsImJhc2VzIiwiYXBwbHlfYmFzZXNfdG9fcm93IiwiZm9yRWFjaCIsImkiLCJzZXRfZXF1YWxfYmFzZXMiLCJlYWNoIiwiZmlsbCIsImFwcGx5X2xheW91dF9wcmVzZXQiLCJzZWN0aW9uT3JSb3ciLCJ3ZWlnaHRzIiwicm93IiwiY2xhc3NMaXN0IiwiaXNBcnJheSIsInN1bSIsImJ1aWxkX3ByZXNldHNfZm9yX2NvbHVtbnMiLCJmb3JtYXRfcHJlc2V0X2xhYmVsIiwicm91bmQiLCJqb2luIiwicGFyc2Vfd2VpZ2h0cyIsImlucHV0Iiwic3BsaXQiLCJmaWx0ZXIiLCJXUEJDX0JGQl9Vc2FnZUxpbWl0U2VydmljZSIsInBhbGV0dGVfdWxzIiwicGFyc2VfdXNhZ2VfbGltaXQiLCJJbmZpbml0eSIsInBhcnNlSW50IiwiY291bnRfdXNhZ2VfYnlfa2V5IiwidXNlZCIsImFsbCIsImVsIiwia2V5IiwidXNhZ2Vfa2V5IiwidHlwZSIsImdldF9saW1pdF9mb3Jfa2V5Iiwicm9vdHMiLCJhbGxQYWxldHRlRmllbGRzIiwiZmxhdE1hcCIsInIiLCJsaW1pdCIsInVzYWdlbnVtYmVyIiwidXBkYXRlX3BhbGV0dGVfdWkiLCJ1c2FnZSIsInBhbGV0dGVzIiwicGFsIiwicGFuZWxfZmllbGQiLCJwYWxldHRlSWQiLCJ1c2FnZUtleSIsInJhd19saW1pdCIsInBlckVsTGltaXQiLCJnbG9iYWxMaW1pdCIsImN1cnJlbnQiLCJkaXNhYmxlIiwicG9pbnRlckV2ZW50cyIsIm9wYWNpdHkiLCJjb3VudF9mb3Jfa2V5IiwibGltaXRfZm9yX2tleSIsInJlbWFpbmluZ19mb3Jfa2V5IiwiY2FuX2FkZCIsImRlbHRhIiwicmVtIiwiZ2F0ZV9vcl9hbGVydCIsImxhYmVsIiwiYWxlcnQiLCJpc191c2FnZV9vayIsIldQQkNfQkZCX0V2ZW50cyIsIk9iamVjdCIsImZyZWV6ZSIsIlNFTEVDVCIsIkNMRUFSX1NFTEVDVElPTiIsIkZJRUxEX0FERCIsIkZJRUxEX1JFTU9WRSIsIlNUUlVDVFVSRV9DSEFOR0UiLCJTVFJVQ1RVUkVfTE9BREVEIiwiV1BCQ19CRkJfRXZlbnRCdXMiLCJzY29wZV9lbCIsImVtaXQiLCJkZXRhaWwiLCJkaXNwYXRjaEV2ZW50IiwiQ3VzdG9tRXZlbnQiLCJidWJibGVzIiwib24iLCJoYW5kbGVyIiwiYWRkRXZlbnRMaXN0ZW5lciIsIm9mZiIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJXUEJDX0JGQl9Tb3J0YWJsZU1hbmFnZXIiLCJidWlsZGVyIiwiZ2lkIiwiaW5zdGFuY2VfaWQiLCJncm91cE5hbWUiLCJhbmltYXRpb24iLCJnaG9zdENsYXNzIiwiY2hvc2VuQ2xhc3MiLCJkcmFnQ2xhc3MiLCJfY29udGFpbmVycyIsIlNldCIsIl9kcmFnX2ZhaWxfc2FmZV9ib3VuZCIsIl9iaW5kX2RyYWdfZmFpbF9zYWZlIiwiX2NsZWFudXBfZHJhZ191aSIsIl9kcmFnU3RhdGUiLCJfdG9nZ2xlX2RuZF9yb290X2ZsYWdzIiwiX3JlbW92ZV9kcmFnZ2luZ19jbGFzcyIsInBhcmVudE5vZGUiLCJyZW1vdmVDaGlsZCIsImZpbmlzaF9kcmFnIiwid2luZG93IiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiZXZ0X25hbWUiLCJoaWRkZW4iLCJfdGFnX2RyYWdfbWlycm9yIiwiZXZ0IiwiZnJvbVBhbGV0dGUiLCJpbmNsdWRlcyIsInJvbGUiLCJtaXJyb3IiLCJhY3RpdmUiLCJmcm9tX3BhbGV0dGUiLCJyb290IiwiZG9jdW1lbnRFbGVtZW50IiwiYWRkIiwicmVtb3ZlIiwiZW5zdXJlX3NpbXBsZV9saXN0IiwiY29udGFpbmVyIiwiaGFuZGxlcnMiLCJTb3J0YWJsZSIsImdldCIsImNvbW1vbiIsImZvcmNlRmFsbGJhY2siLCJmYWxsYmFja09uQm9keSIsImZhbGxiYWNrVG9sZXJhbmNlIiwicmVtb3ZlQ2xvbmVPbkhpZGUiLCJvblN0YXJ0IiwiX2FkZF9kcmFnZ2luZ19jbGFzcyIsIm9uRW5kIiwic2V0VGltZW91dCIsImNyZWF0ZSIsImdyb3VwIiwicHVsbCIsInB1dCIsInNvcnQiLCJkaXJlY3Rpb24iLCJoYW5kbGUiLCJoYW5kbGVfc2VsZWN0b3IiLCJkcmFnZ2FibGUiLCJkcmFnZ2FibGVfc2VsZWN0b3IiLCJmYWxsYmFja0NsYXNzIiwicHJldmVudE9uRmlsdGVyIiwiaW52ZXJ0U3dhcCIsInN3YXBUaHJlc2hvbGQiLCJpbnZlcnRlZFN3YXBUaHJlc2hvbGQiLCJlbXB0eUluc2VydFRocmVzaG9sZCIsImRyYWdvdmVyQnViYmxlIiwic2Nyb2xsIiwic2Nyb2xsU2Vuc2l0aXZpdHkiLCJzY3JvbGxTcGVlZCIsIm9uVXBkYXRlIiwiZW5zdXJlIiwic29ydGFibGVfa2luZCIsInRvIiwiZHJhZ2dlZEVsIiwib25Nb3ZlIiwib3JpZ2luYWxFdmVudCIsImluX3ByZXZpZXdfY2FudmFzIiwiY2xvc2VzdCIsImlzQ29sdW1uIiwiZnJvbVJvdyIsInRvUm93IiwicmVjdCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImV2dFgiLCJ0b3VjaGVzIiwiY2xpZW50WCIsImV2dFkiLCJjbGllbnRZIiwicGFkZGluZ1giLCJ3aWR0aCIsInBhZGRpbmdZIiwiaGVpZ2h0IiwiaXNWaXN1YWxseUVtcHR5IiwiY2hpbGRFbGVtZW50Q291bnQiLCJpbm5lclRvcCIsInRvcCIsImlubmVyQm90dG9tIiwiYm90dG9tIiwiaW5uZXJMZWZ0IiwibGVmdCIsImlubmVyUmlnaHQiLCJyaWdodCIsImluc2lkZVgiLCJpbnNpZGVZIiwiZHMiLCJzdGlja3lUbyIsImNvbW1pdFgiLCJjb21taXRZIiwiZGVlcEluc2lkZSIsImxhc3RTd2l0Y2hUcyIsInBlcmZvcm1hbmNlIiwibm93Iiwib25BZGQiLCJfb25fYWRkX3NlY3Rpb24iLCJoYW5kbGVfb25fYWRkIiwiYmluZCIsImJ1cyIsInJlYXNvbiIsIml0ZW0iLCJkYXRhIiwiV1BCQ19Gb3JtX0J1aWxkZXJfSGVscGVyIiwiZ2V0X2FsbF9kYXRhX2F0dHJpYnV0ZXMiLCJpc1NlY3Rpb24iLCJhZGRfb3ZlcmxheV90b29sYmFyIiwicGFnZXNfc2VjdGlvbnMiLCJpbml0X2FsbF9uZXN0ZWRfc29ydGFibGVzIiwiY29sdW1ucyIsInNlbGVjdF9maWVsZCIsImFkZF9zZWN0aW9uIiwic2VjdGlvbiIsImxhc3RFbGVtZW50Q2hpbGQiLCJuZXdJbmRleCIsImNoaWxkcmVuIiwicmVmIiwiaW5zZXJ0QmVmb3JlIiwiZGVzdHJveUFsbCIsImluc3QiLCJkZXN0cm95IiwiY2xlYXIiLCJXUEJDX0JGQl9ET00iLCJTRUxFQ1RPUlMiLCJwYWdlUGFuZWwiLCJmaWVsZCIsInZhbGlkRmllbGQiLCJjb2x1bW4iLCJvdmVybGF5IiwiQ0xBU1NFUyIsInNlbGVjdGVkIiwiQVRUUiIsImNyZWF0ZV9lbGVtZW50IiwidGFnIiwiY2xhc3NfbmFtZSIsImlubmVyX2h0bWwiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwiaW5uZXJIVE1MIiwic2V0X2RhdGFfYXR0cmlidXRlcyIsImRhdGFfb2JqIiwiZW50cmllcyIsInZhbCIsInZhbHVlIiwiYXR0cmlidXRlcyIsImF0dHIiLCJzdGFydHNXaXRoIiwiZSIsImhhc0V4cGxpY2l0TGFiZWwiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJjaGFyQXQiLCJ0b1VwcGVyQ2FzZSIsInJlbmRlcl9maWVsZF9pbm5lcl9odG1sIiwiZmllbGRfZGF0YSIsImhhc0xhYmVsIiwiaXNfcmVxdWlyZWQiLCJyZXF1aXJlZCIsIndyYXBwZXIiLCJzcGFuTGFiZWwiLCJ0ZXh0Q29udGVudCIsImFwcGVuZENoaWxkIiwic3BhblR5cGUiLCJkZWJvdW5jZSIsImZuIiwid2FpdCIsInQiLCJkZWJvdW5jZWQiLCJhcmdzIiwiY2xlYXJUaW1lb3V0IiwiYXBwbHkiLCJXUEJDX0JGQl9GaWVsZF9SZW5kZXJlcl9SZWdpc3RyeSIsIk1hcCIsInJlZ2lzdGVyIiwiQ2xhc3NSZWYiLCJzZXQiLCJXUEJDX0JGQl9GaWVsZF9CYXNlIiwiZ2V0X2RlZmF1bHRzIiwiaHRtbF9pZCIsInBsYWNlaG9sZGVyIiwibWlubGVuZ3RoIiwibWF4bGVuZ3RoIiwicGF0dGVybiIsImNzc2NsYXNzIiwiaGVscCIsIm5vcm1hbGl6ZV9kYXRhIiwiZCIsImRlZmF1bHRzIiwib3V0IiwiayIsImdldF90ZW1wbGF0ZSIsInRlbXBsYXRlX2lkIiwid3AiLCJ0ZW1wbGF0ZSIsImRvbUlkIiwiX19iZmJfdHBsX2NhY2hlX21hcCIsImNvbXBpbGVyIiwicmVuZGVyIiwiY3R4IiwiY29tcGlsZSIsInNhbml0IiwidGl0bGUiLCJvbl9maWVsZF9kcm9wIiwibWV0YSIsImNvbnRleHQiLCJkZWZzIiwidW5kZWZpbmVkIiwiaGFzVmFsdWUiLCJkZWZhdWx0VmFsIiwiU3RydWN0dXJlIiwidXBkYXRlX2ZpZWxkX3Byb3AiLCJfaW5uZXIiLCJfZSIsImZyZXNoIiwiYXV0b25hbWUiLCJ3YXNfbG9hZGVkIiwiaGFzQXR0cmlidXRlIiwiUyIsInVuaXEiLCJuYW1lX3VzZXJfdG91Y2hlZCIsIm5hbWVfZnJvbV9sYWJlbCIsIm1heWJlX2F1dG9uYW1lX2Zyb21fbGFiZWwiLCJsYWJlbFZhbCIsImFsbG93QXV0byIsInVzZXJUb3VjaGVkIiwiaXNMb2FkZWQiLCJpbnMiLCJuYW1lQ3RybCIsIldQQkNfQkZCX1NlbGVjdF9CYXNlIiwib3B0aW9uX3Jvd190ZW1wbGF0ZV9pZCIsImtpbmQiLCJfX3Jvb3Rfd2lyZWQiLCJfX3Jvb3Rfbm9kZSIsInVpIiwibGlzdCIsImhvbGRlciIsInRvZ2dsZSIsImFkZF9idG4iLCJkcmFnX2hhbmRsZSIsIm11bHRpcGxlX2NoayIsImRlZmF1bHRfdGV4dCIsInBsYWNlaG9sZGVyX2lucHV0IiwicGxhY2Vob2xkZXJfbm90ZSIsInNpemVfaW5wdXQiLCJtZW51X3Jvb3QiLCJtZW51X3RvZ2dsZSIsIm1lbnVfYWN0aW9uIiwidmFsdWVfZGlmZmVyc19jaGsiLCJidWlsZF92YWx1ZV9mcm9tX2xhYmVsIiwiZGlmZmVycyIsImlzX3ZhbHVlX2RpZmZlcnNfZW5hYmxlZCIsInBhbmVsIiwiY2hrIiwiY2hlY2tlZCIsInN5bmNfdmFsdWVfaW5wdXRzX3Zpc2liaWxpdHkiLCJyb3dzIiwibGJsX2luIiwidmFsX2luIiwiZGlzcGxheSIsImhhc0NhY2hlIiwiY2FjaGVkX3ZhbHVlIiwidXNlckVkaXRlZCIsInZhbHVlX3VzZXJfdG91Y2hlZCIsImxibCIsIm1pcnJvcmVkIiwiaXNfcm93X3ZhbHVlX3VzZXJfdG91Y2hlZCIsIm1hcmtfcm93X3ZhbHVlX3VzZXJfdG91Y2hlZCIsImluaXRfcm93X2ZyZXNoX2ZsYWdzIiwibXVsdGlwbGUiLCJzaXplIiwiZGVmYXVsdF92YWx1ZSIsIm9wdGlvbnMiLCJtaW5fd2lkdGgiLCJzZXRQcm9wZXJ0eSIsInRwbCIsIl93cGJjIiwiZGV2IiwiV1BCQ19CRkJfT3ZlcmxheSIsImlzX2Ryb3AiLCJvIiwicGgiLCJkZmx0IiwiZ2V0X3BhbmVsX3Jvb3QiLCJnZXRfbGlzdCIsImdldF9ob2xkZXIiLCJtYWtlX3VpZCIsImFwcGVuZF9yb3ciLCJpZHgiLCJyb3dkIiwiYXNzaWduIiwiaW5kZXgiLCJ0cGxfaWQiLCJodG1sIiwid3JhcCIsIm5vZGUiLCJmaXJzdEVsZW1lbnRDaGlsZCIsInZhbEluIiwibGJsSW4iLCJjbG9zZV9kcm9wZG93biIsImFuY2hvcl9lbCIsImluc2VydF9hZnRlciIsIm5ld19ub2RlIiwicmVmX25vZGUiLCJuZXh0U2libGluZyIsImNvbW1pdF9vcHRpb25zIiwic2VsIiwicHVzaCIsIkV2ZW50Iiwic3luY19kZWZhdWx0X3ZhbHVlX2xvY2siLCJzeW5jX3BsYWNlaG9sZGVyX2xvY2siLCJfX3NlbGVjdGJhc2VfZmllbGQiLCJlbnN1cmVfc29ydGFibGUiLCJleGlzdGluZyIsIndwYmNfYmZiX2FwaSIsImdldF9idWlsZGVyIiwid3BiY19iZmIiLCJzb3J0YWJsZSIsInNvcnRhYmxlX2luaXQiLCJyZWJ1aWxkX2lmX2VtcHR5IiwiaGFzX3Jvd19kZWZhdWx0cyIsImNoZWNrcyIsImlzX211bHRpcGxlX2VuYWJsZWQiLCJoYXNfdGV4dF9kZWZhdWx0X3ZhbHVlIiwiZHYiLCJub3RlIiwibG9jayIsImRpc2FibGVkIiwiaXNNdWx0aXBsZSIsInBsYWNlaG9sZGVyUm93Iiwic2l6ZUlucHV0Iiwic2l6ZVJvdyIsImVuZm9yY2Vfc2luZ2xlX2RlZmF1bHQiLCJjbGlja2VkIiwia2VwdCIsImoiLCJib290c3RyYXBfcGFuZWwiLCJzZWxlY3RiYXNlX2Jvb3RzdHJhcHBlZCIsIndpcmVfb25jZSIsIl9fc2VsZWN0YmFzZV93aXJlZCIsIm9uX3JlYWR5X29yX3JlbmRlciIsImV2Iiwid2lyZV9yb290X2xpc3RlbmVycyIsImlzQ29ubmVjdGVkIiwic2VsZWN0YmFzZV9yb290X3dpcmVkIiwiZ2V0X3BhbmVsIiwidGFyZ2V0IiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJhY3Rpb24iLCJwcmV2X2NvdW50IiwiaXNfbGFiZWxfb3JfdmFsdWUiLCJpc190b2dnbGUiLCJpc19tdWx0aXBsZSIsIm1hdGNoZXMiLCJpc19kZWZhdWx0X3RleHQiLCJpc192YWx1ZV9kaWZmZXJzIiwiaXNfbXVsdGkiLCJfcHVsc2VfdGltZXJzIiwiX3B1bHNlX21ldGEiLCJQVUxTRV9USFJPVFRMRV9NUyIsIlBVTFNFX0RFQk9VTkNFX01TIiwiU1RSVUNUVVJFX0NIQU5HRV9ERUJPVU5DRV9NUyIsIlZBTFVFX1NMSURFUl9USFJPVFRMRV9NUyIsImNhbmNlbF9wdWxzZSIsImRlbGV0ZSIsInRva2VuIiwiY29sb3Jfc2V0IiwicmVtb3ZlUHJvcGVydHkiLCJkZWJvdW5jZV9pZCIsIl9yZXN0YXJ0X2Nzc19hbmltYXRpb24iLCJjbHMiLCJvZmZzZXRXaWR0aCIsInB1bHNlX29uY2UiLCJkdXJfbXMiLCJtcyIsInB1bHNlX3NlcXVlbmNlIiwidGltZXMiLCJvbl9tcyIsIm9mZl9tcyIsImhleF9jb2xvciIsImJvZHkiLCJjb3VudCIsIkRhdGUiLCJ0aHJvdHRsZV9tcyIsImxhc3RfdHMiLCJoYXZlX2NvbG9yIiwidGljayIsIm0yIiwibTMiLCJwdWxzZV9xdWVyeV9kZWJvdW5jZWQiLCJyb290X29yX3NlbGVjdG9yIiwid2FpdF9tcyIsImMiLCJjb2xvciIsImRlZl9tcyIsInB1bHNlX3F1ZXJ5IiwicHVsc2Vfc2VxdWVuY2Vfc3Ryb25nIiwiV1BCQ19CRkJfTW9kdWxlIiwiaW5pdCIsInByZXBlbmQiLCJzZXR0aW5nc19idG4iLCJvbmNsaWNrIiwic2Nyb2xsSW50b1ZpZXciLCJ3cGJjX2JmYl9fZGlzcGF0Y2hfZXZlbnRfc2FmZSIsInBhbmVsX2lkIiwidGFiX2lkIiwiYmVoYXZpb3IiLCJibG9jayIsImZvY3VzYWJsZSIsImZvY3VzIiwiV1BCQ19CRkJfTGF5b3V0X0NoaXBzIiwiX2dldF9jb2xfbWluX3B4IiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImdldFByb3BlcnR5VmFsdWUiLCJfZml0X3dlaWdodHNfcmVzcGVjdGluZ19taW4iLCJlZmYiLCJsYXlvdXQiLCJhdmFpbFBjdCIsInJvd1B4IiwiYXZhaWxQeCIsIm1pblBjdCIsIm1pblB4Iiwic3VtTWluIiwid1N1bSIsInRhcmdldFBjdCIsImxvY2tlZCIsImxvY2tlZFN1bSIsInJlbWFpbmluZyIsImZyZWVJZHgiLCJmcmVlVGFyZ2V0U3VtIiwicmVzdWx0IiwiX2FwcGx5X3ByZXNldF93aXRoX21pbl9ndWFyZCIsInNlY3Rpb25fZWwiLCJmaXR0ZWQiLCJfYW5ub3VuY2UiLCJyZW5kZXJfZm9yX3NlY3Rpb24iLCJob3N0X2VsIiwiX21ha2VfY2hpcCIsInByZXNldHMiLCJjdXN0b21CdG4iLCJleGFtcGxlIiwidGV4dCIsInByb21wdCIsImJ0biIsInZpcyIsImJhciIsImZsZXgiLCJ0b0ZpeGVkIiwidHh0IiwicGFyZW50RWxlbWVudCIsIldQQkNfQkZCX1NlbGVjdGlvbl9Db250cm9sbGVyIiwiX3NlbGVjdGVkX3VpZCIsImdldF9zZWxlY3RlZF9maWVsZCIsIl9vbl9jbGVhciIsIm9uX2NsZWFyIiwiZGVsZXRlX2l0ZW0iLCJuZWlnaGJvciIsIl9maW5kX25laWdoYm9yX3NlbGVjdGFibGUiLCJfb25fY2FudmFzX2NsaWNrIiwiX2hhbmRsZV9jYW52YXNfY2xpY2siLCJJR05PUkUiLCJoaXQiLCJwcmVzZWxlY3RfdGFiX2tleSIsImluZGV4T2YiLCJzZWMiLCJjb2xfc3R5bGVzX2FjdGl2ZV90YWIiLCJXUEJDX0JGQl9Db2x1bW5fU3R5bGVzIiwic2V0X3NlbGVjdGVkX2NvbF9mbGFnIiwidGFicyIsIndwYmNfdWlfdGFicyIsInNldF9hY3RpdmUiLCJ0YWJfa2V5IiwicHJldkVsIiwiY2xlYXJfc2VsZWN0ZWRfY29sX2ZsYWciLCJwcmV2IiwiaW5zcGVjdG9yIiwicHJldl91aWQiLCJzb3VyY2UiLCJiaW5kX3RvX2ZpZWxkIiwiSW5zcGVjdG9yRW5oYW5jZXJzIiwic2NhbiIsIldQQkNfQkZCX1ZhbHVlU2xpZGVyIiwiaW5pdF9vbiIsIldQQkNfQkZCX0luc3BlY3Rvcl9CcmlkZ2UiLCJfZ2VuZXJpY19oeWRyYXRlX2NvbnRyb2xzIiwiX2h5ZHJhdGVfc3BlY2lhbF9jb250cm9scyIsImVzY19hdHRyIiwic3JjIiwiX2F0dGFjaF9pbnNwZWN0b3IiLCJfYmluZF9pZF9zYW5pdGl6ZXIiLCJfb3Blbl9pbnNwZWN0b3JfYWZ0ZXJfZmllbGRfYWRkZWQiLCJfYmluZF9mb2N1c19zaG9ydGN1dHMiLCJhdHRhY2giLCJXUEJDX0JGQl9JbnNwZWN0b3IiLCJvbl9mb2N1cyIsImdycF9rZXkiLCJzbG90IiwiZ3JvdXBfd3JhcCIsImhlYWRlcl9idG4iLCJfb25faW5zcGVjdG9yX2ZvY3VzIiwic2V0VmFsIiwiY3RybCIsIlNLSVAiLCJzY2hlbWFzIiwiV1BCQ19CRkJfU2NoZW1hcyIsInR5cGVLZXkiLCJzY2hlbWFFbnRyeSIsInByb3BzU2NoZW1hIiwic2NoZW1hIiwicHJvcHMiLCJoYXNPd24iLCJGdW5jdGlvbiIsImdldERlZmF1bHQiLCJkZWZhdWx0IiwiaW5zcGVjdG9yS2V5IiwiZGwiLCJ2YWx1ZV9mcm9tIiwidmFsdWVGcm9tIiwiaGFzUmF3IiwiZGVmVmFsdWUiLCJIVE1MSW5wdXRFbGVtZW50IiwiX193cGJjX2JmYl9pZF9zYW5pdGl6ZXJfYm91bmQiLCJFViIsImVuc3VyZV9zY19kZWJvdW5jZV9zdGF0ZSIsIl9fd3BiY19iZmJfc2NfZGVib3VuY2Vfc3RhdGUiLCJ0aW1lcl9pZCIsInBlbmRpbmdfcGF5bG9hZCIsImNhbmNlbF9zY19kZWJvdW5jZWRfZW1pdCIsInN0IiwiYnVzX2VtaXRfY2hhbmdlIiwiZXh0cmEiLCJidXNfZW1pdF9jaGFuZ2VfZGVib3VuY2VkIiwicGF5bG9hZCIsInByZXZpZXdfbW9kZSIsInJlbmRlcl9wcmV2aWV3IiwiYXBwbGllZCIsImJlZm9yZSIsInNhbml0aXplZCIsInNlbFN0YXJ0Iiwic2VsZWN0aW9uU3RhcnQiLCJzZWxFbmQiLCJzZWxlY3Rpb25FbmQiLCJzZXRTZWxlY3Rpb25SYW5nZSIsIm5leHQiLCJkZXNpcmVkQXJyIiwiQm9vbGVhbiIsImRlc2lyZWRTZXQiLCJpc0NvcmUiLCJiZWZvcmVDbGFzc2VzIiwiY3VzdG9tQmVmb3JlIiwiaGFzIiwibWlzc2luZyIsImFmdGVyQ2xhc3NlcyIsImNoYW5nZWQiLCJzb21lIiwicGhhc2UiLCJhdXRvQWN0aXZlIiwidG9nZ2xlQXR0cmlidXRlIiwiaTE4biIsImF1dG9fZnJvbV9sYWJlbCIsInNlbGZMb2NrZWQiLCJuZXh0VmFsIiwiaXNfZ2VuX2tleSIsInZpc3VhbEtleXMiLCJpc19sZW5fZ3JvdXBfY3RybCIsIldQQkNfQkZCX0tleWJvYXJkX0NvbnRyb2xsZXIiLCJfb25fa2V5Iiwib25fa2V5IiwiaXNfdHlwaW5nIiwiX2lzX3R5cGluZ19hbnl3aGVyZSIsImFsdEtleSIsImN0cmxLZXkiLCJtZXRhS2V5Iiwic2hpZnRLZXkiLCJkaXIiLCJtb3ZlX2l0ZW0iLCJhY3RpdmVFbGVtZW50IiwidGFnTmFtZSIsImlzQ29udGVudEVkaXRhYmxlIiwiV1BCQ19CRkJfUmVzaXplX0NvbnRyb2xsZXIiLCJpbml0X3Jlc2l6ZV9oYW5kbGVyIiwiaGFuZGxlX3Jlc2l6ZSIsImJ1dHRvbiIsInJlc2l6ZXIiLCJjdXJyZW50VGFyZ2V0IiwibGVmdF9jb2wiLCJwcmV2aW91c0VsZW1lbnRTaWJsaW5nIiwicmlnaHRfY29sIiwibmV4dEVsZW1lbnRTaWJsaW5nIiwibGVmdF9pbmRleCIsInJpZ2h0X2luZGV4Iiwic3RhcnRfeCIsImxlZnRfc3RhcnRfcHgiLCJyaWdodF9zdGFydF9weCIsInBhaXJfcHgiLCJjb21wdXRlZCIsInBhaXJfYXZhaWwiLCJwY3RUb1B4IiwicGN0IiwiZ2VuZXJpY01pblBjdCIsImdlbmVyaWNNaW5QeCIsImxlZnRNaW5QeCIsInJpZ2h0TWluUHgiLCJwcmV2X3VzZXJfc2VsZWN0IiwidXNlclNlbGVjdCIsImN1cnNvciIsIm9uX21vdXNlX21vdmUiLCJkZWx0YV9weCIsIm5ld0xlZnRQeCIsIm5ld1JpZ2h0UHgiLCJuZXdMZWZ0UGN0IiwibmV3QmFzZXMiLCJvbl9tb3VzZV91cCIsIm5vcm1hbGl6ZWQiLCJXUEJDX0JGQl9QYWdlc19TZWN0aW9ucyIsImFkZF9wYWdlIiwicmVidWlsZF9zZWN0aW9uIiwic2VjdGlvbl9kYXRhIiwiaW5pdF9zZWN0aW9uX3NvcnRhYmxlIiwiX3JldGFnX3VpZHNfaW5fc3VidHJlZSIsIm5vZGVzIiwicHJlZml4IiwiX3VpZF9jb3VudGVyIiwiX21ha2VfdW5pcXVlIiwidGFrZW4iLCJzdGVtIiwiX2RlZHVwZV9zdWJ0cmVlX3N0cmljdCIsInRha2VuRGF0YUlkIiwidGFrZW5EYXRhTmFtZSIsInRha2VuSHRtbElkIiwidGFrZW5Eb21JZCIsImRpZCIsImRuYW0iLCJoaWQiLCJpc0ZpZWxkIiwiY29tYmluZWRUYWtlbiIsImNhbmRpZGF0ZSIsImh0bWxGb3IiLCJfbWFrZV9hZGRfY29sdW1uc19jb250cm9sIiwicGFnZV9lbCIsInNlY3Rpb25fY29udGFpbmVyIiwiaW5zZXJ0X3BvcyIsImNvbnRlbnQiLCJjbG9uZSIsImNsb25lTm9kZSIsImluc2VydCIsInBhZ2VfY291bnRlciIsImNvbnRyb2xzX2h0bWwiLCJyZW5kZXJfd3BfdGVtcGxhdGUiLCJwYWdlX251bWJlciIsInNlY3Rpb25fY291bnRfb25fYWRkX3BhZ2UiLCJjb250cm9sc19ob3N0X3RvcCIsImN0cmxfdG9wIiwiY29udHJvbHNfaG9zdF9ib3R0b20iLCJhZnRlciIsImN0cmxfYm90dG9tIiwic2VjdGlvbl9jb3VudGVyIiwiaW5pdF9zb3J0YWJsZSIsImNvbHNfZGF0YSIsImNvbF9zdHlsZXMiLCJqc29uIiwiYXJyIiwicGFyc2VfY29sX3N0eWxlcyIsImNvbF9kYXRhIiwiY29sdW1uc19vbmx5IiwiaXRlbXMiLCJidWlsZF9maWVsZCIsInRyaWdnZXJfZmllbGRfZHJvcF9jYWxsYmFjayIsImlzX2NvbHVtbiIsImlzX3RvcF9sZXZlbCIsIldQQkNfQkZCX1N0cnVjdHVyZV9JTyIsImdldF9zdHJ1Y3R1cmUiLCJzZXJpYWxpemUiLCJsb2FkX3NhdmVkX3N0cnVjdHVyZSIsImRlc2VyaWFsaXplIiwiX25vcm1hbGl6ZV9maWVsZF9vcHRpb25fdmFsdWVzIiwiaGFzX3ZhbHVlX2RpZmZlcnMiLCJ2YWx1ZV9kaWZmZXJzIiwib3B0aW9uX3JlY29yZCIsIl9ub3JtYWxpemVfaWRzIiwiX25vcm1hbGl6ZV9uYW1lcyIsInBhZ2VzIiwicGFnZV9pbmRleCIsInBhZ2UiLCJjaGlsZCIsInNlcmlhbGl6ZV9zZWN0aW9uIiwiZl9kYXRhIiwiY29sX3N0eWxlc19yYXciLCJjb2xDb3VudCIsInBhcnNlZCIsInN0cnVjdHVyZSIsImRlZmVySWZUeXBpbmciLCJfaXNfdHlwaW5nX2luX2luc3BlY3RvciIsIl9kZWZlcl90aW1lciIsInBhZ2VfZGF0YSIsIndhbnQiLCJXUEJDX0JGQl9NaW5fV2lkdGhfR3VhcmQiLCJfb25fZmllbGRfYWRkIiwiX29uX2ZpZWxkX3JlbW92ZSIsIl9vbl9zdHJ1Y3R1cmVfbG9hZGVkIiwiX29uX3N0cnVjdHVyZV9jaGFuZ2UiLCJfb25fd2luZG93X3Jlc2l6ZSIsIl9wZW5kaW5nX3Jvd3MiLCJfcGVuZGluZ19hbGwiLCJfcmFmX2lkIiwicGFzc2l2ZSIsIl9zY2hlZHVsZV9yZWZyZXNoX2FsbCIsInNyY19lbCIsIl9zY2hlZHVsZV9yZWZyZXNoX3JvdyIsIl9raWNrX3JhZiIsInJlZnJlc2hfYWxsIiwicmVmcmVzaF9yb3ciLCJhcHBseV9jb2xfbWluIiwicHgiLCJtaW5XaWR0aCIsImFicyIsImNvbF9lbCIsIm1heF9weCIsImNvbFJlY3QiLCJlbmRzV2l0aCIsInBhcnNlX2xlbl9weCIsImNzIiwiZm9udFNpemUiLCJXUEJDX0JGQl9Ub2dnbGVfTm9ybWFsaXplciIsInVwZ3JhZGVfY2hlY2tib3hlc19pbiIsInJvb3RfZWwiLCJpbnB1dHMiLCJpbnB1dF9pZCIsImdlbmVyYXRlX3VuaXF1ZV9pZCIsImxhYmVsX3RleHQiLCJyZXNvbHZlX2xhYmVsX3RleHQiLCJpY29uX2xhYmVsIiwidGV4dF9sYWJlbCIsImNyZWF0ZVRleHROb2RlIiwicmVwbGFjZWQiLCJ0cnlfcmVwbGFjZV9rbm93bl9yb3ciLCJhc3NvYyIsImNzc19lc2NhcGUiLCJuZWFyX2xhYmVsIiwiaWwiLCJ0MiIsImFyaWEiLCJjdHJsX3dyYXAiLCJmaXJzdENoaWxkIiwiaWNvbl9sYmwiLCJ0ZXh0X2xibCIsImFwcGx5X3Bvc3RfcmVuZGVyIiwiVCIsImNiIiwiX193cGJjX2FyaWFfaG9va2VkIiwicmVncyIsIl9fd3BiY19laCIsImdyb3VwcyIsIm5vZGVUeXBlIiwiY29uY2F0IiwiZyIsIl9fd3BiY19sZW5fd2lyZWQiLCJudW1iZXIiLCJyYW5nZSIsInVuaXQiLCJzeW5jX3JhbmdlX2Zyb21fbnVtYmVyIiwiZGlzcGF0Y2hfaW5wdXQiLCJkaXNwYXRjaF9jaGFuZ2UiLCJwZW5kaW5nX3ZhbCIsInBlbmRpbmdfY2hhbmdlIiwibGFzdF9mbHVzaF90cyIsIm1pbl9pbnRlcnZhbF9tcyIsImxlblRocm90dGxlIiwiZmx1c2hfcmFuZ2VfdG9fbnVtYmVyIiwic2NoZWR1bGVfcmFuZ2VfdG9fbnVtYmVyIiwiZW1pdF9jaGFuZ2UiLCJvbl9udW1iZXJfaW5wdXQiLCJvbl9udW1iZXJfY2hhbmdlIiwib25fcmFuZ2VfaW5wdXQiLCJvbl9yYW5nZV9jaGFuZ2UiLCJkZXN0cm95X29uIiwiX3Jvb3QiLCJwYXRjaEluc3BlY3RvckVuaGFuY2VycyIsImFwcGx5UGF0Y2giLCJJbnNwZWN0b3IiLCJfX3dwYmNfZW5oYW5jZXJzX3BhdGNoZWQiLCJvcmlnIiwiaW5zRWwiLCJvbmNlIiwid3BiY19iZmJfX2Rpc3BhdGNoX3Nob3dfcGFuZWwiLCJldmVudF9kZXRhaWwiLCJXUEJDX0JGQl9Nb2RlX1JpZ2h0YmFyX1N5bmMiLCJ0b3BfdGFic19uYXYiLCJhZHZhbmNlZF90YWJfd3JhcCIsImFkdmFuY2VkX3BhbmVsIiwibXV0YXRpb25fb2JzZXJ2ZXIiLCJsYXN0X21vZGUiLCJzeW5jX3JpZ2h0YmFyX21vZGUiLCJoYW5kbGVfY2xpY2siLCJNdXRhdGlvbk9ic2VydmVyIiwib2JzZXJ2ZSIsImF0dHJpYnV0ZUZpbHRlciIsImdldF9hY3RpdmVfdG9wX3RhYl9pZCIsImFjdGl2ZV90YWJfaWQiLCJhY3RpdmVfbGluayIsImJ1aWxkZXJfcGFuZWwiLCJpc19lbGVtZW50X3Zpc2libGUiLCJ2aXNpYmlsaXR5IiwiaXNfYWR2YW5jZWRfbW9kZV9hY3RpdmUiLCJzaG93X2FkdmFuY2VkX3Rvb2xzX3RhYiIsImhpZGVfYWR2YW5jZWRfdG9vbHNfdGFiIiwiaXNfYWR2YW5jZWRfdG9vbHNfcGFuZWxfYWN0aXZlIiwib3Blbl9hZHZhbmNlZF90b29sc19wYW5lbCIsIm9wZW5fZGVmYXVsdF92aXN1YWxfcGFuZWwiLCJpc19hZHZhbmNlZF9tb2RlIiwiZXZlbnQiLCJ0aGlzX29iaiIsInJlYWR5U3RhdGUiLCJfX0lOU1BFQ1RPUl9BQ1RJT05TX01BUF9fIiwiY29uZmlybSIsImlzX2ZpZWxkIiwiTW9kYWxfQ29uZmlybV9EZWxldGUiLCJvcGVuIiwiZHVwbGljYXRlX2l0ZW0iLCJXUEJDX0JGQl9JbnNwZWN0b3JfQWN0aW9ucyIsInJ1biIsIndhcm4iLCJFcnJvciIsIndwYmNfYmZiX2luc3BlY3Rvcl9mYWN0b3J5X3Nsb3RzIiwid3BiY19iZmJfaW5zcGVjdG9yX2ZhY3RvcnlfdmFsdWVfZnJvbSIsImF0dHJzIiwia2V5cyIsImRrIiwiYnVpbGRfdG9nZ2xlX3JvdyIsImlucHV0X2VsIiwiZ2V0X2luaXRpYWxfdmFsdWUiLCJwcm9wc19zY2hlbWEiLCJjb2VyY2VfYnlfdHlwZSIsImlzTmFOIiwibm9ybWFsaXplX3NlbGVjdF9vcHRpb25zIiwicGFyc2VfbGVuIiwiZmFsbGJhY2tfdW5pdCIsImNsYW1wX251bSIsImluaXRfY29sb3Jpc19waWNrZXJzIiwiQ29sb3JpcyIsImFscGhhIiwiZm9ybWF0IiwidGhlbWVNb2RlIiwiYnVpbGRfcmFuZ2VfbnVtYmVyX3JvdyIsImxhYmVsX2VsIiwic3RlcCIsIm51bSIsImJ1aWxkX2xlbl9jb21wb3VuZF9yb3ciLCJjb250cm9sIiwiZGVmX3N0ciIsImZhbGxiYWNrX3UiLCJ1bml0cyIsInNsaWRlcl9tYXAiLCJzbGlkZXIiLCJpbmxpbmUiLCJ1Iiwib3B0IiwidGFiaW5kZXgiLCJ3aXJlX2xlbl9ncm91cCIsImZpbmRfZ3JvdXAiLCJ3cml0ZXIiLCJib3VuZHNfYnlfdW5pdCIsImJ1aWxkX2NvbnRyb2wiLCJwcm9wX21ldGEiLCJjbGFzc2VzIiwic2xvdF9yb3ciLCJob3N0X2F0dHJzIiwic2xvdF9ob3N0Iiwic2xvdF9mbiIsIm9wdF9lbCIsInJuX2lkIiwicm5fdmFsIiwiYnVpbGRfZ3JvdXAiLCJpc19vcGVuIiwiZmllbGRzIiwiYXNBcnJheSIsIngiLCJ2YWx1ZXMiLCJjb250cm9scyIsImJ1aWxkX2hlYWRlciIsImluc3BlY3Rvcl91aSIsInRpdGxlX2ZhbGxiYWNrIiwic2NoZW1hX2Zvcl90eXBlIiwidmFyaWFudCIsImhlYWRlcl92YXJpYW50IiwiaGVhZGVyQWN0aW9ucyIsImhlYWRlcl9hY3Rpb25zIiwiZGVzY3JpcHRpb24iLCJhY3Rpb25CdG4iLCJhY3QiLCJtaW5pbWFsIiwiaWNvbk1hcCIsImhlYWRlciIsImFjdGlvbnMiLCJoMyIsInVpQyIsInVpRyIsImcxIiwiZzIiLCJnMyIsImZhY3RvcnlfcmVuZGVyIiwicGFuZWxfZWwiLCJ0aXRsZV90ZXh0IiwiV1BCQ19CRkJfSW5zcGVjdG9yX0ZhY3RvcnkiLCJzbG90X2xheW91dF9jaGlwcyIsImhvc3QiLCJMIiwibGF5b3V0X2NoaXBzIiwidmFsdWVfZnJvbV9jb21wdXRlX3NlY3Rpb25fY29sdW1ucyIsImNvbXB1dGVfc2VjdGlvbl9jb2x1bW5zIiwiX2NyZWF0ZV9mYWxsYmFja19wYW5lbCIsInNlbGVjdGVkX2VsIiwiX3JlbmRlcl90aW1lciIsIl9vbl9kZWxlZ2F0ZWRfaW5wdXQiLCJfYXBwbHlfY29udHJvbF9mcm9tX2V2ZW50IiwiX29uX2RlbGVnYXRlZF9jaGFuZ2UiLCJfb25fZGVsZWdhdGVkX2NsaWNrIiwiX3Bvc3RfcmVuZGVyX3VpIiwidl9pbnQiLCJjbGFtcGVkIiwic2V0X3NlY3Rpb25fY29sdW1ucyIsIl9uZWVkc19yZXJlbmRlciIsIl9zY2hlZHVsZV9yZW5kZXJfcHJlc2VydmluZ19mb2N1cyIsImRlbGF5IiwiYWN0aXZlS2V5IiwicHJldl9zY3JvbGwiLCJzY3JvbGxUb3AiLCJfZW5mb3JjZV9kZWZhdWx0X2dyb3VwX29wZW4iLCJfc2V0X3BhbmVsX3NlY3Rpb25fY29scyIsIkZhY3RvcnkiLCJlbnRyeSIsImhhc1Nsb3RIb3N0IiwiaGFzQ2hpcHMiLCJlbnN1cmVIb3N0IiwiaCIsImxhYiIsImN0bCIsIl9nZXRfdHBsIiwiZ2VuZXJpY190cGwiLCJtZXJnZWQiLCJtc2ciLCJkaXYiLCJzZWN0aW9uRWwiLCJjb21wdXRlIl0sInNvdXJjZXMiOlsiYmZiLWNvcmUuanMiLCJiZmItZmllbGRzLmpzIiwiYmZiLXVpLmpzIiwiYmZiLXN5bmMtY29kZS10b29scy10YWIuanMiLCJiZmItaW5zcGVjdG9yLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4vLyA9PSBGaWxlICAvaW5jbHVkZXMvcGFnZS1mb3JtLWJ1aWxkZXIvX291dC9jb3JlL2JmYi1jb3JlLmpzID09IHwgMjAyNS0wOS0xMCAxNTo0N1xyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuKGZ1bmN0aW9uICggdyApIHtcclxuXHQndXNlIHN0cmljdCc7XHJcblxyXG5cdC8vIFNpbmdsZSBnbG9iYWwgbmFtZXNwYWNlIChpZGVtcG90ZW50ICYgbG9hZC1vcmRlciBzYWZlKS5cclxuXHRjb25zdCBDb3JlID0gKCB3LldQQkNfQkZCX0NvcmUgPSB3LldQQkNfQkZCX0NvcmUgfHwge30gKTtcclxuXHRjb25zdCBVSSAgID0gKCBDb3JlLlVJID0gQ29yZS5VSSB8fCB7fSApO1xyXG5cclxuXHQvKipcclxuXHQgKiBDb3JlIHNhbml0aXplL2VzY2FwZS9ub3JtYWxpemUgaGVscGVycy5cclxuXHQgKiBBbGwgbWV0aG9kcyB1c2Ugc25ha2VfY2FzZTsgY2FtZWxDYXNlIGFsaWFzZXMgYXJlIHByb3ZpZGVkIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS5cclxuXHQgKi9cclxuXHRDb3JlLldQQkNfQkZCX1Nhbml0aXplID0gY2xhc3Mge1xyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogRXNjYXBlIHRleHQgZm9yIHNhZmUgdXNlIGluIENTUyBzZWxlY3RvcnMuXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gcyAtIHJhdyBzZWxlY3RvciBmcmFnbWVudFxyXG5cdFx0ICogQHJldHVybnMge3N0cmluZ31cclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIGVzY19jc3Mocykge1xyXG5cdFx0XHRyZXR1cm4gKHcuQ1NTICYmIHcuQ1NTLmVzY2FwZSkgPyB3LkNTUy5lc2NhcGUoIFN0cmluZyggcyApICkgOiBTdHJpbmcoIHMgKS5yZXBsYWNlKCAvKFteXFx3LV0pL2csICdcXFxcJDEnICk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBFc2NhcGUgYSB2YWx1ZSBmb3IgYXR0cmlidXRlIHNlbGVjdG9ycywgZS5nLiBbZGF0YS1pZD1cIjx2YWx1ZT5cIl0uXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gdlxyXG5cdFx0ICogQHJldHVybnMge3N0cmluZ31cclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIGVzY19hdHRyX3ZhbHVlX2Zvcl9zZWxlY3Rvcih2KSB7XHJcblx0XHRcdHJldHVybiBTdHJpbmcoIHYgKVxyXG5cdFx0XHRcdC5yZXBsYWNlKCAvXFxcXC9nLCAnXFxcXFxcXFwnIClcclxuXHRcdFx0XHQucmVwbGFjZSggL1wiL2csICdcXFxcXCInIClcclxuXHRcdFx0XHQucmVwbGFjZSggL1xcbi9nLCAnXFxcXEEgJyApXHJcblx0XHRcdFx0LnJlcGxhY2UoIC9cXF0vZywgJ1xcXFxdJyApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogU2FuaXRpemUgaW50byBhIGJyb2FkbHkgY29tcGF0aWJsZSBIVE1MIGlkOiBsZXR0ZXJzLCBkaWdpdHMsIC0gXyA6IC4gOyBtdXN0IHN0YXJ0IHdpdGggYSBsZXR0ZXIuXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gdlxyXG5cdFx0ICogQHJldHVybnMge3N0cmluZ31cclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIHNhbml0aXplX2h0bWxfaWQodikge1xyXG5cdFx0XHRsZXQgcyA9ICh2ID09IG51bGwgPyAnJyA6IFN0cmluZyggdiApKS50cmltKCk7XHJcblx0XHRcdHMgICAgID0gc1xyXG5cdFx0XHRcdC5yZXBsYWNlKCAvXFxzKy9nLCAnLScgKVxyXG5cdFx0XHRcdC5yZXBsYWNlKCAvW15BLVphLXowLTlcXC1fXFw6Ll0vZywgJy0nIClcclxuXHRcdFx0XHQucmVwbGFjZSggLy0rL2csICctJyApXHJcblx0XHRcdFx0LnJlcGxhY2UoIC9eWy1fLjpdK3xbLV8uOl0rJC9nLCAnJyApO1xyXG5cdFx0XHRpZiAoICFzICkgcmV0dXJuICdmaWVsZCc7XHJcblx0XHRcdGlmICggIS9eW0EtWmEtel0vLnRlc3QoIHMgKSApIHMgPSAnZi0nICsgcztcclxuXHRcdFx0cmV0dXJuIHM7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBTYW5pdGl6ZSBpbnRvIGEgc2FmZSBIVE1MIG5hbWUgdG9rZW46IGxldHRlcnMsIGRpZ2l0cywgXyAtXHJcblx0XHQgKiBNdXN0IHN0YXJ0IHdpdGggYSBsZXR0ZXI7IG5vIGRvdHMvYnJhY2tldHMvc3BhY2VzLlxyXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IHZcclxuXHRcdCAqIEByZXR1cm5zIHtzdHJpbmd9XHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBzYW5pdGl6ZV9odG1sX25hbWUodikge1xyXG5cclxuXHRcdFx0bGV0IHMgPSAodiA9PSBudWxsID8gJycgOiBTdHJpbmcoIHYgKSkudHJpbSgpO1xyXG5cclxuXHRcdFx0cyA9IHMucmVwbGFjZSggL1xccysvZywgJ18nICkucmVwbGFjZSggL1teQS1aYS16MC05Xy1dL2csICdfJyApLnJlcGxhY2UoIC9fKy9nLCAnXycgKTtcclxuXHJcblx0XHRcdGlmICggISBzICkge1xyXG5cdFx0XHRcdHMgPSAnZmllbGQnO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICggISAvXltBLVphLXpdLy50ZXN0KCBzICkgKSB7XHJcblx0XHRcdFx0cyA9ICdmXycgKyBzO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBzO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogRXNjYXBlIGZvciBIVE1MIHRleHQvYXR0cmlidXRlcyAobm90IFVSTHMpLlxyXG5cdFx0ICogQHBhcmFtIHthbnl9IHZcclxuXHRcdCAqIEByZXR1cm5zIHtzdHJpbmd9XHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBlc2NhcGVfaHRtbCh2KSB7XHJcblx0XHRcdGlmICggdiA9PSBudWxsICkge1xyXG5cdFx0XHRcdHJldHVybiAnJztcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gU3RyaW5nKCB2IClcclxuXHRcdFx0XHQucmVwbGFjZSggLyYvZywgJyZhbXA7JyApXHJcblx0XHRcdFx0LnJlcGxhY2UoIC9cIi9nLCAnJnF1b3Q7JyApXHJcblx0XHRcdFx0LnJlcGxhY2UoIC8nL2csICcmIzAzOTsnIClcclxuXHRcdFx0XHQucmVwbGFjZSggLzwvZywgJyZsdDsnIClcclxuXHRcdFx0XHQucmVwbGFjZSggLz4vZywgJyZndDsnICk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBFc2NhcGUgbWluaW1hbCBzZXQgZm9yIGF0dHJpYnV0ZS1zYWZldHkgd2l0aG91dCBzbHVnZ2luZy5cclxuXHRcdCAqIEtlZXBzIG9yaWdpbmFsIGh1bWFuIHRleHQ7IGVzY2FwZXMgJiwgPCwgPiwgXCIgYW5kICcgb25seS5cclxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBzXHJcblx0XHQgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG5cdFx0ICovXHJcblx0XHRzdGF0aWMgZXNjYXBlX3ZhbHVlX2Zvcl9hdHRyKHMpIHtcclxuXHRcdFx0cmV0dXJuIFN0cmluZyggcyA9PSBudWxsID8gJycgOiBzIClcclxuXHRcdFx0XHQucmVwbGFjZSggLyYvZywgJyZhbXA7JyApXHJcblx0XHRcdFx0LnJlcGxhY2UoIC88L2csICcmbHQ7JyApXHJcblx0XHRcdFx0LnJlcGxhY2UoIC8+L2csICcmZ3Q7JyApXHJcblx0XHRcdFx0LnJlcGxhY2UoIC9cIi9nLCAnJnF1b3Q7JyApXHJcblx0XHRcdFx0LnJlcGxhY2UoIC8nL2csICcmIzM5OycgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFNhbml0aXplIGEgc3BhY2Utc2VwYXJhdGVkIENTUyBjbGFzcyBsaXN0LlxyXG5cdFx0ICogQHBhcmFtIHthbnl9IHZcclxuXHRcdCAqIEByZXR1cm5zIHtzdHJpbmd9XHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBzYW5pdGl6ZV9jc3NfY2xhc3NsaXN0KHYpIHtcclxuXHRcdFx0aWYgKCB2ID09IG51bGwgKSByZXR1cm4gJyc7XHJcblx0XHRcdHJldHVybiBTdHJpbmcoIHYgKS5yZXBsYWNlKCAvW15cXHdcXC0gXSsvZywgJyAnICkucmVwbGFjZSggL1xccysvZywgJyAnICkudHJpbSgpO1xyXG5cdFx0fVxyXG4vLyA9PSBORVcgPT1cclxuXHRcdC8qKlxyXG5cdFx0ICogVHVybiBhbiBhcmJpdHJhcnkgdmFsdWUgaW50byBhIGNvbnNlcnZhdGl2ZSBcInRva2VuXCIgKHVuZGVyc2NvcmVzLCBoeXBoZW5zIGFsbG93ZWQpLlxyXG5cdFx0ICogVXNlZnVsIGZvciBzaG9ydGNvZGUgdG9rZW5zLCBpZHMgaW4gcGxhaW4gdGV4dCwgZXRjLlxyXG5cdFx0ICogQHBhcmFtIHthbnl9IHZcclxuXHRcdCAqIEByZXR1cm5zIHtzdHJpbmd9XHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyB0b190b2tlbih2KSB7XHJcblx0XHRcdHJldHVybiBTdHJpbmcoIHYgPz8gJycgKVxyXG5cdFx0XHRcdC50cmltKClcclxuXHRcdFx0XHQucmVwbGFjZSggL1xccysvZywgJ18nIClcclxuXHRcdFx0XHQucmVwbGFjZSggL1teQS1aYS16MC05X1xcLV0vZywgJycgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIENvbnZlcnQgdG8ga2ViYWItY2FzZSAobGV0dGVycywgZGlnaXRzLCBoeXBoZW5zKS5cclxuXHRcdCAqIEBwYXJhbSB7YW55fSB2XHJcblx0XHQgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG5cdFx0ICovXHJcblx0XHRzdGF0aWMgdG9fa2ViYWIodikge1xyXG5cdFx0XHRyZXR1cm4gU3RyaW5nKCB2ID8/ICcnIClcclxuXHRcdFx0XHQudHJpbSgpXHJcblx0XHRcdFx0LnJlcGxhY2UoIC9bX1xcc10rL2csICctJyApXHJcblx0XHRcdFx0LnJlcGxhY2UoIC9bXkEtWmEtejAtOS1dL2csICcnIClcclxuXHRcdFx0XHQucmVwbGFjZSggLy0rL2csICctJyApXHJcblx0XHRcdFx0LnRvTG93ZXJDYXNlKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBUcnV0aHkgbm9ybWFsaXphdGlvbiBmb3IgZm9ybS1saWtlIGlucHV0czogdHJ1ZSwgJ3RydWUnLCAxLCAnMScsICd5ZXMnLCAnb24nLlxyXG5cdFx0ICogQHBhcmFtIHthbnl9IHZcclxuXHRcdCAqIEByZXR1cm5zIHtib29sZWFufVxyXG5cdFx0ICovXHJcblx0XHRzdGF0aWMgaXNfdHJ1dGh5KHYpIHtcclxuXHRcdFx0aWYgKCB0eXBlb2YgdiA9PT0gJ2Jvb2xlYW4nICkgcmV0dXJuIHY7XHJcblx0XHRcdGNvbnN0IHMgPSBTdHJpbmcoIHYgPz8gJycgKS50cmltKCkudG9Mb3dlckNhc2UoKTtcclxuXHRcdFx0cmV0dXJuIHMgPT09ICd0cnVlJyB8fCBzID09PSAnMScgfHwgcyA9PT0gJ3llcycgfHwgcyA9PT0gJ29uJztcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIENvZXJjZSB0byBib29sZWFuIHdpdGggYW4gb3B0aW9uYWwgZGVmYXVsdCBmb3IgZW1wdHkgdmFsdWVzLlxyXG5cdFx0ICogQHBhcmFtIHthbnl9IHZcclxuXHRcdCAqIEBwYXJhbSB7Ym9vbGVhbn0gW2RlZj1mYWxzZV1cclxuXHRcdCAqIEByZXR1cm5zIHtib29sZWFufVxyXG5cdFx0ICovXHJcblx0XHRzdGF0aWMgY29lcmNlX2Jvb2xlYW4odiwgZGVmID0gZmFsc2UpIHtcclxuXHRcdFx0aWYgKCB2ID09IG51bGwgfHwgdiA9PT0gJycgKSByZXR1cm4gZGVmO1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5pc190cnV0aHkoIHYgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFBhcnNlIGEgXCJwZXJjZW50LWxpa2VcIiB2YWx1ZSAoJzMzJ3wnMzMlJ3wzMykgd2l0aCBmYWxsYmFjay5cclxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcnxudWxsfHVuZGVmaW5lZH0gdlxyXG5cdFx0ICogQHBhcmFtIHtudW1iZXJ9IGZhbGxiYWNrX3ZhbHVlXHJcblx0XHQgKiBAcmV0dXJucyB7bnVtYmVyfVxyXG5cdFx0ICovXHJcblx0XHRzdGF0aWMgcGFyc2VfcGVyY2VudCh2LCBmYWxsYmFja192YWx1ZSkge1xyXG5cdFx0XHRpZiAoIHYgPT0gbnVsbCApIHtcclxuXHRcdFx0XHRyZXR1cm4gZmFsbGJhY2tfdmFsdWU7XHJcblx0XHRcdH1cclxuXHRcdFx0Y29uc3QgcyA9IFN0cmluZyggdiApLnRyaW0oKTtcclxuXHRcdFx0Y29uc3QgbiA9IHBhcnNlRmxvYXQoIHMucmVwbGFjZSggLyUvZywgJycgKSApO1xyXG5cdFx0XHRyZXR1cm4gTnVtYmVyLmlzRmluaXRlKCBuICkgPyBuIDogZmFsbGJhY2tfdmFsdWU7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBDbGFtcCBhIG51bWJlciB0byB0aGUgW21pbiwgbWF4XSByYW5nZS5cclxuXHRcdCAqIEBwYXJhbSB7bnVtYmVyfSBuXHJcblx0XHQgKiBAcGFyYW0ge251bWJlcn0gbWluXHJcblx0XHQgKiBAcGFyYW0ge251bWJlcn0gbWF4XHJcblx0XHQgKiBAcmV0dXJucyB7bnVtYmVyfVxyXG5cdFx0ICovXHJcblx0XHRzdGF0aWMgY2xhbXAobiwgbWluLCBtYXgpIHtcclxuXHRcdFx0cmV0dXJuIE1hdGgubWF4KCBtaW4sIE1hdGgubWluKCBtYXgsIG4gKSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogRXNjYXBlIGEgdmFsdWUgZm9yIGluY2x1c2lvbiBpbnNpZGUgYSBxdW90ZWQgSFRNTCBhdHRyaWJ1dGUgKGRvdWJsZSBxdW90ZXMpLlxyXG5cdFx0ICogUmVwbGFjZXMgbmV3bGluZXMgd2l0aCBzcGFjZXMgYW5kIGRvdWJsZSBxdW90ZXMgd2l0aCBzaW5nbGUgcXVvdGVzLlxyXG5cdFx0ICogQHBhcmFtIHthbnl9IHZcclxuXHRcdCAqIEByZXR1cm5zIHtzdHJpbmd9XHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBlc2NhcGVfZm9yX2F0dHJfcXVvdGVkKHYpIHtcclxuXHRcdFx0aWYgKCB2ID09IG51bGwgKSByZXR1cm4gJyc7XHJcblx0XHRcdHJldHVybiBTdHJpbmcoIHYgKS5yZXBsYWNlKCAvXFxyP1xcbi9nLCAnICcgKS5yZXBsYWNlKCAvXCIvZywgJ1xcJycgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEVzY2FwZSBmb3Igc2hvcnRjb2RlLWxpa2UgdG9rZW5zIHdoZXJlIGRvdWJsZSBxdW90ZXMgYW5kIG5ld2xpbmVzIHNob3VsZCBiZSBuZXV0cmFsaXplZC5cclxuXHRcdCAqIEBwYXJhbSB7YW55fSB2XHJcblx0XHQgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG5cdFx0ICovXHJcblx0XHRzdGF0aWMgZXNjYXBlX2Zvcl9zaG9ydGNvZGUodikge1xyXG5cdFx0XHRyZXR1cm4gU3RyaW5nKCB2ID8/ICcnICkucmVwbGFjZSggL1wiL2csICdcXFxcXCInICkucmVwbGFjZSggL1xccj9cXG4vZywgJyAnICk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBKU09OLnBhcnNlIHdpdGggZmFsbGJhY2sgKG5vIHRocm93KS5cclxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBzXHJcblx0XHQgKiBAcGFyYW0ge2FueX0gW2ZhbGxiYWNrPW51bGxdXHJcblx0XHQgKiBAcmV0dXJucyB7YW55fVxyXG5cdFx0ICovXHJcblx0XHRzdGF0aWMgc2FmZV9qc29uX3BhcnNlKHMsIGZhbGxiYWNrID0gbnVsbCkge1xyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdHJldHVybiBKU09OLnBhcnNlKCBzICk7XHJcblx0XHRcdH0gY2F0Y2ggKCBfICkge1xyXG5cdFx0XHRcdHJldHVybiBmYWxsYmFjaztcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogU3RyaW5naWZ5IGRhdGEtKiBhdHRyaWJ1dGUgdmFsdWUgc2FmZWx5IChvYmplY3RzIC0+IEpTT04sIG90aGVycyAtPiBTdHJpbmcpLlxyXG5cdFx0ICogQHBhcmFtIHthbnl9IHZcclxuXHRcdCAqIEByZXR1cm5zIHtzdHJpbmd9XHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBzdHJpbmdpZnlfZGF0YV92YWx1ZSh2KSB7XHJcblx0XHRcdGlmICggdHlwZW9mIHYgPT09ICdvYmplY3QnICYmIHYgIT09IG51bGwgKSB7XHJcblx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdHJldHVybiBKU09OLnN0cmluZ2lmeSggdiApO1xyXG5cdFx0XHRcdH0gY2F0Y2gge1xyXG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvciggJ1dQQkM6IHN0cmluZ2lmeV9kYXRhX3ZhbHVlJyApO1xyXG5cdFx0XHRcdFx0cmV0dXJuICcnO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gU3RyaW5nKCB2ICk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdFx0Ly8gU3RyaWN0IHZhbHVlIGd1YXJkcyBmb3IgQ1NTIGxlbmd0aHMgYW5kIGhleCBjb2xvcnMgKGRlZmVuc2UtaW4tZGVwdGgpLlxyXG5cdFx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdFx0LyoqXHJcblx0XHQgKiBTYW5pdGl6ZSBhIENTUyBsZW5ndGguIEFsbG93czogcHgsICUsIHJlbSwgZW0gKGxvd2VyL3VwcGVyKS5cclxuXHRcdCAqIFJldHVybnMgZmFsbGJhY2sgaWYgaW52YWxpZC5cclxuXHRcdCAqIEBwYXJhbSB7YW55fSB2XHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gW2ZhbGxiYWNrPScxMDAlJ11cclxuXHRcdCAqIEByZXR1cm5zIHtzdHJpbmd9XHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBzYW5pdGl6ZV9jc3NfbGVuKHYsIGZhbGxiYWNrID0gJzEwMCUnKSB7XHJcblx0XHRcdGNvbnN0IHMgPSBTdHJpbmcoIHYgPz8gJycgKS50cmltKCk7XHJcblx0XHRcdGNvbnN0IG0gPSBzLm1hdGNoKCAvXigtP1xcZCsoPzpcXC5cXGQrKT8pKHB4fCV8cmVtfGVtKSQvaSApO1xyXG5cdFx0XHRyZXR1cm4gbSA/IG1bMF0gOiBTdHJpbmcoIGZhbGxiYWNrICk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBTYW5pdGl6ZSBhIGhleCBjb2xvci4gQWxsb3dzICNyZ2Igb3IgI3JyZ2diYiAoY2FzZS1pbnNlbnNpdGl2ZSkuXHJcblx0XHQgKiBSZXR1cm5zIGZhbGxiYWNrIGlmIGludmFsaWQuXHJcblx0XHQgKiBAcGFyYW0ge2FueX0gdlxyXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IFtmYWxsYmFjaz0nI2UwZTBlMCddXHJcblx0XHQgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG5cdFx0ICovXHJcblx0XHRzdGF0aWMgc2FuaXRpemVfaGV4X2NvbG9yKHYsIGZhbGxiYWNrID0gJyNlMGUwZTAnKSB7XHJcblx0XHRcdGNvbnN0IHMgPSBTdHJpbmcoIHYgPz8gJycgKS50cmltKCk7XHJcblx0XHRcdHJldHVybiAvXiMoPzpbMC05YS1mXXszfXxbMC05YS1mXXs2fSkkL2kudGVzdCggcyApID8gcyA6IFN0cmluZyggZmFsbGJhY2sgKTtcclxuXHRcdH1cclxuXHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBXUEJDIElEIC8gTmFtZSBzZXJ2aWNlLiBHZW5lcmF0ZXMsIHNhbml0aXplcywgYW5kIGVuc3VyZXMgdW5pcXVlbmVzcyBmb3IgZmllbGQgaWRzL25hbWVzL2h0bWxfaWRzIHdpdGhpbiB0aGVcclxuXHQgKiBjYW52YXMuXHJcblx0ICovXHJcblx0Q29yZS5XUEJDX0JGQl9JZFNlcnZpY2UgPSBjbGFzcyAge1xyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQ29uc3RydWN0b3IuIFNldCByb290IGNvbnRhaW5lciBvZiB0aGUgZm9ybSBwYWdlcy5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBwYWdlc19jb250YWluZXIgLSBSb290IGNvbnRhaW5lciBvZiB0aGUgZm9ybSBwYWdlcy5cclxuXHRcdCAqL1xyXG5cdFx0Y29uc3RydWN0b3IoIHBhZ2VzX2NvbnRhaW5lciApIHtcclxuXHRcdFx0dGhpcy5wYWdlc19jb250YWluZXIgPSBwYWdlc19jb250YWluZXI7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBFbnN1cmUgYSB1bmlxdWUgKippbnRlcm5hbCoqIGZpZWxkIGlkIChzdG9yZWQgaW4gZGF0YS1pZCkgd2l0aGluIHRoZSBjYW52YXMuXHJcblx0XHQgKiBTdGFydHMgZnJvbSBhIGRlc2lyZWQgaWQgKGFscmVhZHkgc2FuaXRpemVkIG9yIG5vdCkgYW5kIGFwcGVuZHMgc3VmZml4ZXMgaWYgbmVlZGVkLlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlSWQgLSBEZXNpcmVkIGlkLlxyXG5cdFx0ICogQHJldHVybnMge3N0cmluZ30gVW5pcXVlIGlkLlxyXG5cdFx0ICovXHJcblx0XHRlbnN1cmVfdW5pcXVlX2ZpZWxkX2lkKGJhc2VJZCwgY3VycmVudEVsID0gbnVsbCkge1xyXG5cdFx0XHRjb25zdCBiYXNlICAgID0gQ29yZS5XUEJDX0JGQl9TYW5pdGl6ZS5zYW5pdGl6ZV9odG1sX2lkKCBiYXNlSWQgKTtcclxuXHRcdFx0bGV0IGlkICAgICAgICA9IGJhc2UgfHwgJ2ZpZWxkJztcclxuXHRcdFx0Y29uc3QgZXNjICAgICA9ICh2KSA9PiBDb3JlLldQQkNfQkZCX1Nhbml0aXplLmVzY19hdHRyX3ZhbHVlX2Zvcl9zZWxlY3RvciggdiApO1xyXG5cdFx0XHRjb25zdCBlc2NVaWQgID0gKHYpID0+IENvcmUuV1BCQ19CRkJfU2FuaXRpemUuZXNjX2F0dHJfdmFsdWVfZm9yX3NlbGVjdG9yKCB2ICk7XHJcblx0XHRcdGNvbnN0IG5vdFNlbGYgPSBjdXJyZW50RWw/LmRhdGFzZXQ/LnVpZCA/IGA6bm90KFtkYXRhLXVpZD1cIiR7ZXNjVWlkKCBjdXJyZW50RWwuZGF0YXNldC51aWQgKX1cIl0pYCA6ICcnO1xyXG5cdFx0XHR3aGlsZSAoIHRoaXMucGFnZXNfY29udGFpbmVyPy5xdWVyeVNlbGVjdG9yKFxyXG5cdFx0XHRcdGAud3BiY19iZmJfX3BhbmVsLS1wcmV2aWV3IC53cGJjX2JmYl9fZmllbGQke25vdFNlbGZ9W2RhdGEtaWQ9XCIke2VzYyhpZCl9XCJdLCAud3BiY19iZmJfX3BhbmVsLS1wcmV2aWV3IC53cGJjX2JmYl9fc2VjdGlvbiR7bm90U2VsZn1bZGF0YS1pZD1cIiR7ZXNjKGlkKX1cIl1gXHJcblx0XHRcdCkgKSB7XHJcblx0XHRcdFx0Ly8gRXhjbHVkZXMgc2VsZiBieSBkYXRhLXVpZCAuXHJcblx0XHRcdFx0Y29uc3QgZm91bmQgPSB0aGlzLnBhZ2VzX2NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCBgLndwYmNfYmZiX19wYW5lbC0tcHJldmlldyAud3BiY19iZmJfX2ZpZWxkW2RhdGEtaWQ9XCIke2VzYyggaWQgKX1cIl0sIC53cGJjX2JmYl9fcGFuZWwtLXByZXZpZXcgLndwYmNfYmZiX19zZWN0aW9uW2RhdGEtaWQ9XCIke2VzYyggaWQgKX1cIl1gICk7XHJcblx0XHRcdFx0aWYgKCBmb3VuZCAmJiBjdXJyZW50RWwgJiYgZm91bmQgPT09IGN1cnJlbnRFbCApIHtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZCA9IGAke2Jhc2UgfHwgJ2ZpZWxkJ30tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKCAzNiApLnNsaWNlKCAyLCA1ICl9YDtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gaWQ7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBFbnN1cmUgYSB1bmlxdWUgSFRNTCBuYW1lIGFjcm9zcyB0aGUgZm9ybS5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gYmFzZSAtIERlc2lyZWQgYmFzZSBuYW1lICh1bi9zYW5pdGl6ZWQpLlxyXG5cdFx0ICogQHBhcmFtIHtIVE1MRWxlbWVudHxudWxsfSBjdXJyZW50RWwgLSBJZiBwcm92aWRlZCwgaWdub3JlIGNvbmZsaWN0cyB3aXRoIHRoaXMgZWxlbWVudC5cclxuXHRcdCAqIEByZXR1cm5zIHtzdHJpbmd9IFVuaXF1ZSBuYW1lLlxyXG5cdFx0ICovXHJcblx0XHRlbnN1cmVfdW5pcXVlX2ZpZWxkX25hbWUoYmFzZSwgY3VycmVudEVsID0gbnVsbCkge1xyXG5cdFx0XHRsZXQgbmFtZSAgICAgID0gYmFzZSB8fCAnZmllbGQnO1xyXG5cdFx0XHRjb25zdCBlc2MgICAgID0gKHYpID0+IENvcmUuV1BCQ19CRkJfU2FuaXRpemUuZXNjX2F0dHJfdmFsdWVfZm9yX3NlbGVjdG9yKCB2ICk7XHJcblx0XHRcdGNvbnN0IGVzY1VpZCAgPSAodikgPT4gQ29yZS5XUEJDX0JGQl9TYW5pdGl6ZS5lc2NfYXR0cl92YWx1ZV9mb3Jfc2VsZWN0b3IoIHYgKTtcclxuXHRcdFx0Ly8gRXhjbHVkZSB0aGUgY3VycmVudCBmaWVsZCAqYW5kIGFueSBET00gbWlycm9ycyBvZiBpdCogKHNhbWUgZGF0YS11aWQpXHJcblx0XHRcdGNvbnN0IHVpZCAgICAgPSBjdXJyZW50RWw/LmRhdGFzZXQ/LnVpZDtcclxuXHRcdFx0Y29uc3Qgbm90U2VsZiA9IHVpZCA/IGA6bm90KFtkYXRhLXVpZD1cIiR7ZXNjVWlkKCB1aWQgKX1cIl0pYCA6ICcnO1xyXG5cdFx0XHR3aGlsZSAoIHRydWUgKSB7XHJcblx0XHRcdFx0Y29uc3Qgc2VsZWN0b3IgPSBgLndwYmNfYmZiX19wYW5lbC0tcHJldmlldyAud3BiY19iZmJfX2ZpZWxkJHtub3RTZWxmfVtkYXRhLW5hbWU9XCIke2VzYyggbmFtZSApfVwiXWA7XHJcblx0XHRcdFx0Y29uc3QgY2xhc2hlcyAgPSB0aGlzLnBhZ2VzX2NvbnRhaW5lcj8ucXVlcnlTZWxlY3RvckFsbCggc2VsZWN0b3IgKSB8fCBbXTtcclxuXHRcdFx0XHRpZiAoIGNsYXNoZXMubGVuZ3RoID09PSAwICkgYnJlYWs7ICAgICAgICAgICAvLyBub2JvZHkgZWxzZSB1c2VzIHRoaXMgbmFtZVxyXG5cdFx0XHRcdGNvbnN0IG0gPSBuYW1lLm1hdGNoKCAvLShcXGQrKSQvICk7XHJcblx0XHRcdFx0bmFtZSAgICA9IG0gPyBuYW1lLnJlcGxhY2UoIC8tXFxkKyQvLCAnLScgKyAoTnVtYmVyKCBtWzFdICkgKyAxKSApIDogYCR7YmFzZX0tMmA7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIG5hbWU7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBTZXQgZmllbGQncyBJTlRFUk5BTCBpZCAoZGF0YS1pZCkgb24gYW4gZWxlbWVudC4gRW5zdXJlcyB1bmlxdWVuZXNzIGFuZCBvcHRpb25hbGx5IGFza3MgY2FsbGVyIHRvIHJlZnJlc2hcclxuXHRcdCAqIHByZXZpZXcuXHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZmllbGRfZWwgLSBGaWVsZCBlbGVtZW50IGluIHRoZSBjYW52YXMuXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gbmV3SWRSYXcgLSBEZXNpcmVkIGlkICh1bi9zYW5pdGl6ZWQpLlxyXG5cdFx0ICogQHBhcmFtIHtib29sZWFufSBbcmVuZGVyUHJldmlldz1mYWxzZV0gLSBDYWxsZXIgY2FuIGRlY2lkZSB0byByZS1yZW5kZXIgcHJldmlldy5cclxuXHRcdCAqIEByZXR1cm5zIHtzdHJpbmd9IEFwcGxpZWQgdW5pcXVlIGlkLlxyXG5cdFx0ICovXHJcblx0XHRzZXRfZmllbGRfaWQoIGZpZWxkX2VsLCBuZXdJZFJhdywgcmVuZGVyUHJldmlldyA9IGZhbHNlICkge1xyXG5cdFx0XHRjb25zdCBkZXNpcmVkID0gQ29yZS5XUEJDX0JGQl9TYW5pdGl6ZS5zYW5pdGl6ZV9odG1sX2lkKCBuZXdJZFJhdyApO1xyXG5cdFx0XHRjb25zdCB1bmlxdWUgID0gdGhpcy5lbnN1cmVfdW5pcXVlX2ZpZWxkX2lkKCBkZXNpcmVkLCBmaWVsZF9lbCApO1xyXG5cdFx0XHRmaWVsZF9lbC5zZXRBdHRyaWJ1dGUoICdkYXRhLWlkJywgdW5pcXVlICk7XHJcblx0XHRcdGlmICggcmVuZGVyUHJldmlldyApIHtcclxuXHRcdFx0XHQvLyBDYWxsZXIgZGVjaWRlcyBpZiAvIHdoZW4gdG8gcmVuZGVyLlxyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiB1bmlxdWU7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBTZXQgZmllbGQncyBSRVFVSVJFRCBIVE1MIG5hbWUgKGRhdGEtbmFtZSkuIEVuc3VyZXMgc2FuaXRpemVkICsgdW5pcXVlIHBlciBmb3JtLlxyXG5cdFx0ICogRmFsbHMgYmFjayB0byBzYW5pdGl6ZWQgaW50ZXJuYWwgaWQgaWYgdXNlciBwcm92aWRlcyBlbXB0eSB2YWx1ZS5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBmaWVsZF9lbCAtIEZpZWxkIGVsZW1lbnQgaW4gdGhlIGNhbnZhcy5cclxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBuZXdOYW1lUmF3IC0gRGVzaXJlZCBuYW1lICh1bi9zYW5pdGl6ZWQpLlxyXG5cdFx0ICogQHBhcmFtIHtib29sZWFufSBbcmVuZGVyUHJldmlldz1mYWxzZV0gLSBDYWxsZXIgY2FuIGRlY2lkZSB0byByZS1yZW5kZXIgcHJldmlldy5cclxuXHRcdCAqIEByZXR1cm5zIHtzdHJpbmd9IEFwcGxpZWQgdW5pcXVlIG5hbWUuXHJcblx0XHQgKi9cclxuXHRcdHNldF9maWVsZF9uYW1lKCBmaWVsZF9lbCwgbmV3TmFtZVJhdywgcmVuZGVyUHJldmlldyA9IGZhbHNlICkge1xyXG5cdFx0XHRjb25zdCByYXcgID0gKG5ld05hbWVSYXcgPT0gbnVsbCA/ICcnIDogU3RyaW5nKCBuZXdOYW1lUmF3ICkpLnRyaW0oKTtcclxuXHRcdFx0Y29uc3QgYmFzZSA9IHJhd1xyXG5cdFx0XHRcdD8gQ29yZS5XUEJDX0JGQl9TYW5pdGl6ZS5zYW5pdGl6ZV9odG1sX25hbWUoIHJhdyApXHJcblx0XHRcdFx0OiBDb3JlLldQQkNfQkZCX1Nhbml0aXplLnNhbml0aXplX2h0bWxfbmFtZSggZmllbGRfZWwuZ2V0QXR0cmlidXRlKCAnZGF0YS1pZCcgKSB8fCAnZmllbGQnICk7XHJcblxyXG5cdFx0XHRjb25zdCB1bmlxdWUgPSB0aGlzLmVuc3VyZV91bmlxdWVfZmllbGRfbmFtZSggYmFzZSwgZmllbGRfZWwgKTtcclxuXHRcdFx0ZmllbGRfZWwuc2V0QXR0cmlidXRlKCAnZGF0YS1uYW1lJywgdW5pcXVlICk7XHJcblx0XHRcdGlmICggcmVuZGVyUHJldmlldyApIHtcclxuXHRcdFx0XHQvLyBDYWxsZXIgZGVjaWRlcyBpZiAvIHdoZW4gdG8gcmVuZGVyLlxyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiB1bmlxdWU7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBTZXQgZmllbGQncyBPUFRJT05BTCBwdWJsaWMgSFRNTCBpZCAoZGF0YS1odG1sX2lkKS4gRW1wdHkgdmFsdWUgcmVtb3ZlcyB0aGUgYXR0cmlidXRlLlxyXG5cdFx0ICogRW5zdXJlcyBzYW5pdGl6YXRpb24gKyB1bmlxdWVuZXNzIGFtb25nIG90aGVyIGRlY2xhcmVkIEhUTUwgaWRzLlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGZpZWxkX2VsIC0gRmllbGQgZWxlbWVudCBpbiB0aGUgY2FudmFzLlxyXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IG5ld0h0bWxJZFJhdyAtIERlc2lyZWQgaHRtbF9pZCAob3B0aW9uYWwpLlxyXG5cdFx0ICogQHBhcmFtIHtib29sZWFufSBbcmVuZGVyUHJldmlldz1mYWxzZV0gLSBDYWxsZXIgY2FuIGRlY2lkZSB0byByZS1yZW5kZXIgcHJldmlldy5cclxuXHRcdCAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBhcHBsaWVkIGh0bWxfaWQgb3IgZW1wdHkgc3RyaW5nIGlmIHJlbW92ZWQuXHJcblx0XHQgKi9cclxuXHRcdHNldF9maWVsZF9odG1sX2lkKCBmaWVsZF9lbCwgbmV3SHRtbElkUmF3LCByZW5kZXJQcmV2aWV3ID0gZmFsc2UgKSB7XHJcblx0XHRcdGNvbnN0IHJhdyA9IChuZXdIdG1sSWRSYXcgPT0gbnVsbCA/ICcnIDogU3RyaW5nKCBuZXdIdG1sSWRSYXcgKSkudHJpbSgpO1xyXG5cclxuXHRcdFx0aWYgKCByYXcgPT09ICcnICkge1xyXG5cdFx0XHRcdGZpZWxkX2VsLnJlbW92ZUF0dHJpYnV0ZSggJ2RhdGEtaHRtbF9pZCcgKTtcclxuXHRcdFx0XHRpZiAoIHJlbmRlclByZXZpZXcgKSB7XHJcblx0XHRcdFx0XHQvLyBDYWxsZXIgZGVjaWRlcyBpZiAvIHdoZW4gdG8gcmVuZGVyLlxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyZXR1cm4gJyc7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGNvbnN0IGRlc2lyZWQgPSBDb3JlLldQQkNfQkZCX1Nhbml0aXplLnNhbml0aXplX2h0bWxfaWQoIHJhdyApO1xyXG5cdFx0XHRsZXQgaHRtbElkICAgID0gZGVzaXJlZDtcclxuXHRcdFx0Y29uc3QgZXNjICAgICA9ICh2KSA9PiBDb3JlLldQQkNfQkZCX1Nhbml0aXplLmVzY19hdHRyX3ZhbHVlX2Zvcl9zZWxlY3RvciggdiApO1xyXG5cdFx0XHRjb25zdCBlc2NVaWQgID0gKHYpID0+IENvcmUuV1BCQ19CRkJfU2FuaXRpemUuZXNjX2F0dHJfdmFsdWVfZm9yX3NlbGVjdG9yKCB2ICk7XHJcblxyXG5cdFx0XHR3aGlsZSAoIHRydWUgKSB7XHJcblxyXG5cdFx0XHRcdGNvbnN0IHVpZCAgICAgPSBmaWVsZF9lbD8uZGF0YXNldD8udWlkO1xyXG5cdFx0XHRcdGNvbnN0IG5vdFNlbGYgPSB1aWQgPyBgOm5vdChbZGF0YS11aWQ9XCIke2VzY1VpZCggdWlkICl9XCJdKWAgOiAnJztcclxuXHJcblx0XHRcdFx0Y29uc3QgY2xhc2hJbkNhbnZhcyA9IHRoaXMucGFnZXNfY29udGFpbmVyPy5xdWVyeVNlbGVjdG9yKFxyXG5cdFx0XHRcdFx0YC53cGJjX2JmYl9fcGFuZWwtLXByZXZpZXcgLndwYmNfYmZiX19maWVsZCR7bm90U2VsZn1bZGF0YS1odG1sX2lkPVwiJHtlc2MoIGh0bWxJZCApfVwiXSxgICtcclxuXHRcdFx0XHRcdGAud3BiY19iZmJfX3BhbmVsLS1wcmV2aWV3IC53cGJjX2JmYl9fc2VjdGlvbiR7bm90U2VsZn1bZGF0YS1odG1sX2lkPVwiJHtlc2MoIGh0bWxJZCApfVwiXWBcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHRcdGNvbnN0IGRvbUNsYXNoID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIGh0bWxJZCApO1xyXG5cclxuXHRcdFx0XHQvLyBBbGxvdyB3aGVuIHRoZSBvbmx5IFwiY2xhc2hcIiBpcyBpbnNpZGUgdGhpcyBzYW1lIGZpZWxkIChlLmcuLCB0aGUgaW5wdXQgeW91IGp1c3QgcmVuZGVyZWQpXHJcblx0XHRcdFx0Y29uc3QgZG9tQ2xhc2hJc1NlbGYgPSBkb21DbGFzaCA9PT0gZmllbGRfZWwgfHwgKGRvbUNsYXNoICYmIGZpZWxkX2VsLmNvbnRhaW5zKCBkb21DbGFzaCApKTtcclxuXHJcblx0XHRcdFx0aWYgKCAhY2xhc2hJbkNhbnZhcyAmJiAoIWRvbUNsYXNoIHx8IGRvbUNsYXNoSXNTZWxmKSApIHtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Y29uc3QgbSA9IGh0bWxJZC5tYXRjaCggLy0oXFxkKykkLyApO1xyXG5cdFx0XHRcdGh0bWxJZCAgPSBtID8gaHRtbElkLnJlcGxhY2UoIC8tXFxkKyQvLCAnLScgKyAoTnVtYmVyKCBtWzFdICkgKyAxKSApIDogYCR7ZGVzaXJlZH0tMmA7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGZpZWxkX2VsLnNldEF0dHJpYnV0ZSggJ2RhdGEtaHRtbF9pZCcsIGh0bWxJZCApO1xyXG5cdFx0XHRpZiAoIHJlbmRlclByZXZpZXcgKSB7XHJcblx0XHRcdFx0Ly8gQ2FsbGVyIGRlY2lkZXMgaWYgLyB3aGVuIHRvIHJlbmRlci5cclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gaHRtbElkO1xyXG5cdFx0fVxyXG5cdH07XHJcblxyXG5cdC8qKlxyXG5cdCAqIFdQQkMgTGF5b3V0IHNlcnZpY2UuIEVuY2Fwc3VsYXRlcyBjb2x1bW4gd2lkdGggbWF0aCB3aXRoIGdhcCBoYW5kbGluZywgcHJlc2V0cywgYW5kIHV0aWxpdGllcy5cclxuXHQgKi9cclxuXHRDb3JlLldQQkNfQkZCX0xheW91dFNlcnZpY2UgPSBjbGFzcyAge1xyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQ29uc3RydWN0b3IuIFNldCBvcHRpb25zIHdpdGggZ2FwIGJldHdlZW4gY29sdW1ucyAoJSkuXHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHt7IGNvbF9nYXBfcGVyY2VudD86IG51bWJlciB9fSBbb3B0c10gLSBPcHRpb25zIHdpdGggZ2FwIGJldHdlZW4gY29sdW1ucyAoJSkuXHJcblx0XHQgKi9cclxuXHRcdGNvbnN0cnVjdG9yKCBvcHRzID0ge30gKSB7XHJcblx0XHRcdHRoaXMuY29sX2dhcF9wZXJjZW50ID0gTnVtYmVyLmlzRmluaXRlKCArb3B0cy5jb2xfZ2FwX3BlcmNlbnQgKSA/ICtvcHRzLmNvbF9nYXBfcGVyY2VudCA6IDM7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBDb21wdXRlIG5vcm1hbGl6ZWQgZmxleC1iYXNpcyB2YWx1ZXMgZm9yIGEgcm93LCByZXNwZWN0aW5nIGNvbHVtbiBnYXBzLlxyXG5cdFx0ICogUmV0dXJucyBiYXNlcyB0aGF0IHN1bSB0byBhdmFpbGFibGUgPSAxMDAgLSAobi0xKSpnYXAuXHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcm93X2VsIC0gUm93IGVsZW1lbnQgY29udGFpbmluZyAud3BiY19iZmJfX2NvbHVtbiBjaGlsZHJlbi5cclxuXHRcdCAqIEBwYXJhbSB7bnVtYmVyfSBbZ2FwX3BlcmNlbnQ9dGhpcy5jb2xfZ2FwX3BlcmNlbnRdIC0gR2FwIHBlcmNlbnQgYmV0d2VlbiBjb2x1bW5zLlxyXG5cdFx0ICogQHJldHVybnMge3thdmFpbGFibGU6bnVtYmVyLGJhc2VzOm51bWJlcltdfX0gQXZhaWxhYmxlIHNwYWNlIGFuZCBiYXNpcyB2YWx1ZXMuXHJcblx0XHQgKi9cclxuXHRcdGNvbXB1dGVfZWZmZWN0aXZlX2Jhc2VzX2Zyb21fcm93KCByb3dfZWwsIGdhcF9wZXJjZW50ID0gdGhpcy5jb2xfZ2FwX3BlcmNlbnQgKSB7XHJcblx0XHRcdGNvbnN0IGNvbHMgPSBBcnJheS5mcm9tKCByb3dfZWw/LnF1ZXJ5U2VsZWN0b3JBbGwoICc6c2NvcGUgPiAud3BiY19iZmJfX2NvbHVtbicgKSB8fCBbXSApO1xyXG5cdFx0XHRjb25zdCBuICAgID0gY29scy5sZW5ndGggfHwgMTtcclxuXHJcblx0XHRcdGNvbnN0IHJhdyA9IGNvbHMubWFwKCAoIGNvbCApID0+IHtcclxuXHRcdFx0XHRjb25zdCB3ID0gY29sLnN0eWxlLmZsZXhCYXNpcyB8fCAnJztcclxuXHRcdFx0XHRjb25zdCBwID0gQ29yZS5XUEJDX0JGQl9TYW5pdGl6ZS5wYXJzZV9wZXJjZW50KCB3LCBOYU4gKTtcclxuXHRcdFx0XHRyZXR1cm4gTnVtYmVyLmlzRmluaXRlKCBwICkgPyBwIDogKDEwMCAvIG4pO1xyXG5cdFx0XHR9ICk7XHJcblxyXG5cdFx0XHRjb25zdCBzdW1fcmF3ICAgID0gcmF3LnJlZHVjZSggKCBhLCBiICkgPT4gYSArIGIsIDAgKSB8fCAxMDA7XHJcblx0XHRcdGNvbnN0IGdwICAgICAgICAgPSBOdW1iZXIuaXNGaW5pdGUoICtnYXBfcGVyY2VudCApID8gK2dhcF9wZXJjZW50IDogMztcclxuXHRcdFx0Y29uc3QgdG90YWxfZ2FwcyA9IE1hdGgubWF4KCAwLCBuIC0gMSApICogZ3A7XHJcblx0XHRcdGNvbnN0IGF2YWlsYWJsZSAgPSBNYXRoLm1heCggMCwgMTAwIC0gdG90YWxfZ2FwcyApO1xyXG5cdFx0XHRjb25zdCBzY2FsZSAgICAgID0gYXZhaWxhYmxlIC8gc3VtX3JhdztcclxuXHJcblx0XHRcdHJldHVybiB7XHJcblx0XHRcdFx0YXZhaWxhYmxlLFxyXG5cdFx0XHRcdGJhc2VzOiByYXcubWFwKCAoIHAgKSA9PiBNYXRoLm1heCggMCwgcCAqIHNjYWxlICkgKVxyXG5cdFx0XHR9O1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQXBwbHkgY29tcHV0ZWQgYmFzZXMgdG8gdGhlIHJvdydzIGNvbHVtbnMgKHNldHMgZmxleC1iYXNpcyAlKS5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSByb3dfZWwgLSBSb3cgZWxlbWVudC5cclxuXHRcdCAqIEBwYXJhbSB7bnVtYmVyW119IGJhc2VzIC0gQXJyYXkgb2YgYmFzaXMgdmFsdWVzIChwZXJjZW50IG9mIGZ1bGwgMTAwKS5cclxuXHRcdCAqIEByZXR1cm5zIHt2b2lkfVxyXG5cdFx0ICovXHJcblx0XHRhcHBseV9iYXNlc190b19yb3coIHJvd19lbCwgYmFzZXMgKSB7XHJcblx0XHRcdGNvbnN0IGNvbHMgPSBBcnJheS5mcm9tKCByb3dfZWw/LnF1ZXJ5U2VsZWN0b3JBbGwoICc6c2NvcGUgPiAud3BiY19iZmJfX2NvbHVtbicgKSB8fCBbXSApO1xyXG5cdFx0XHRjb2xzLmZvckVhY2goICggY29sLCBpICkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHAgICAgICAgICAgICAgPSBiYXNlc1tpXSA/PyAwO1xyXG5cdFx0XHRcdGNvbC5zdHlsZS5mbGV4QmFzaXMgPSBgJHtwfSVgO1xyXG5cdFx0XHR9ICk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBEaXN0cmlidXRlIGNvbHVtbnMgZXZlbmx5LCByZXNwZWN0aW5nIGdhcC5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSByb3dfZWwgLSBSb3cgZWxlbWVudC5cclxuXHRcdCAqIEBwYXJhbSB7bnVtYmVyfSBbZ2FwX3BlcmNlbnQ9dGhpcy5jb2xfZ2FwX3BlcmNlbnRdIC0gR2FwIHBlcmNlbnQuXHJcblx0XHQgKiBAcmV0dXJucyB7dm9pZH1cclxuXHRcdCAqL1xyXG5cdFx0c2V0X2VxdWFsX2Jhc2VzKCByb3dfZWwsIGdhcF9wZXJjZW50ID0gdGhpcy5jb2xfZ2FwX3BlcmNlbnQgKSB7XHJcblx0XHRcdGNvbnN0IGNvbHMgICAgICAgPSBBcnJheS5mcm9tKCByb3dfZWw/LnF1ZXJ5U2VsZWN0b3JBbGwoICc6c2NvcGUgPiAud3BiY19iZmJfX2NvbHVtbicgKSB8fCBbXSApO1xyXG5cdFx0XHRjb25zdCBuICAgICAgICAgID0gY29scy5sZW5ndGggfHwgMTtcclxuXHRcdFx0Y29uc3QgZ3AgICAgICAgICA9IE51bWJlci5pc0Zpbml0ZSggK2dhcF9wZXJjZW50ICkgPyArZ2FwX3BlcmNlbnQgOiAzO1xyXG5cdFx0XHRjb25zdCB0b3RhbF9nYXBzID0gTWF0aC5tYXgoIDAsIG4gLSAxICkgKiBncDtcclxuXHRcdFx0Y29uc3QgYXZhaWxhYmxlICA9IE1hdGgubWF4KCAwLCAxMDAgLSB0b3RhbF9nYXBzICk7XHJcblx0XHRcdGNvbnN0IGVhY2ggICAgICAgPSBhdmFpbGFibGUgLyBuO1xyXG5cdFx0XHR0aGlzLmFwcGx5X2Jhc2VzX3RvX3Jvdyggcm93X2VsLCBBcnJheSggbiApLmZpbGwoIGVhY2ggKSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQXBwbHkgYSBwcmVzZXQgb2YgcmVsYXRpdmUgd2VpZ2h0cyB0byBhIHJvdy9zZWN0aW9uLlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHNlY3Rpb25PclJvdyAtIC53cGJjX2JmYl9fc2VjdGlvbiBvciBpdHMgY2hpbGQgLndwYmNfYmZiX19yb3cuXHJcblx0XHQgKiBAcGFyYW0ge251bWJlcltdfSB3ZWlnaHRzIC0gUmVsYXRpdmUgd2VpZ2h0cyAoZS5nLiwgWzEsMywxXSkuXHJcblx0XHQgKiBAcGFyYW0ge251bWJlcn0gW2dhcF9wZXJjZW50PXRoaXMuY29sX2dhcF9wZXJjZW50XSAtIEdhcCBwZXJjZW50LlxyXG5cdFx0ICogQHJldHVybnMge3ZvaWR9XHJcblx0XHQgKi9cclxuXHRcdGFwcGx5X2xheW91dF9wcmVzZXQoIHNlY3Rpb25PclJvdywgd2VpZ2h0cywgZ2FwX3BlcmNlbnQgPSB0aGlzLmNvbF9nYXBfcGVyY2VudCApIHtcclxuXHRcdFx0Y29uc3Qgcm93ID0gc2VjdGlvbk9yUm93Py5jbGFzc0xpc3Q/LmNvbnRhaW5zKCAnd3BiY19iZmJfX3JvdycgKVxyXG5cdFx0XHRcdD8gc2VjdGlvbk9yUm93XHJcblx0XHRcdFx0OiBzZWN0aW9uT3JSb3c/LnF1ZXJ5U2VsZWN0b3IoICc6c2NvcGUgPiAud3BiY19iZmJfX3JvdycgKTtcclxuXHJcblx0XHRcdGlmICggISByb3cgKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRjb25zdCBjb2xzID0gQXJyYXkuZnJvbSggcm93LnF1ZXJ5U2VsZWN0b3JBbGwoICc6c2NvcGUgPiAud3BiY19iZmJfX2NvbHVtbicgKSB8fCBbXSApO1xyXG5cdFx0XHRjb25zdCBuICAgID0gY29scy5sZW5ndGggfHwgMTtcclxuXHJcblx0XHRcdGlmICggISBBcnJheS5pc0FycmF5KCB3ZWlnaHRzICkgfHwgd2VpZ2h0cy5sZW5ndGggIT09IG4gKSB7XHJcblx0XHRcdFx0dGhpcy5zZXRfZXF1YWxfYmFzZXMoIHJvdywgZ2FwX3BlcmNlbnQgKTtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGNvbnN0IHN1bSAgICAgICA9IHdlaWdodHMucmVkdWNlKCAoIGEsIGIgKSA9PiBhICsgTWF0aC5tYXgoIDAsIE51bWJlciggYiApIHx8IDAgKSwgMCApIHx8IDE7XHJcblx0XHRcdGNvbnN0IGdwICAgICAgICA9IE51bWJlci5pc0Zpbml0ZSggK2dhcF9wZXJjZW50ICkgPyArZ2FwX3BlcmNlbnQgOiAzO1xyXG5cdFx0XHRjb25zdCBhdmFpbGFibGUgPSBNYXRoLm1heCggMCwgMTAwIC0gTWF0aC5tYXgoIDAsIG4gLSAxICkgKiBncCApO1xyXG5cdFx0XHRjb25zdCBiYXNlcyAgICAgPSB3ZWlnaHRzLm1hcCggKCB3ICkgPT4gTWF0aC5tYXgoIDAsIChOdW1iZXIoIHcgKSB8fCAwKSAvIHN1bSAqIGF2YWlsYWJsZSApICk7XHJcblxyXG5cdFx0XHR0aGlzLmFwcGx5X2Jhc2VzX3RvX3Jvdyggcm93LCBiYXNlcyApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQnVpbGQgcHJlc2V0IHdlaWdodCBsaXN0cyBmb3IgYSBnaXZlbiBjb2x1bW4gY291bnQuXHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHtudW1iZXJ9IG4gLSBDb2x1bW4gY291bnQuXHJcblx0XHQgKiBAcmV0dXJucyB7bnVtYmVyW11bXX0gTGlzdCBvZiB3ZWlnaHQgYXJyYXlzLlxyXG5cdFx0ICovXHJcblx0XHRidWlsZF9wcmVzZXRzX2Zvcl9jb2x1bW5zKCBuICkge1xyXG5cdFx0XHRzd2l0Y2ggKCBuICkge1xyXG5cdFx0XHRcdGNhc2UgMTpcclxuXHRcdFx0XHRcdHJldHVybiBbIFsgMSBdIF07XHJcblx0XHRcdFx0Y2FzZSAyOlxyXG5cdFx0XHRcdFx0cmV0dXJuIFsgWyAxLCAyIF0sIFsgMiwgMSBdLCBbIDEsIDMgXSwgWyAzLCAxIF0gXTtcclxuXHRcdFx0XHRjYXNlIDM6XHJcblx0XHRcdFx0XHRyZXR1cm4gWyBbIDEsIDMsIDEgXSwgWyAxLCAyLCAxIF0sIFsgMiwgMSwgMSBdLCBbIDEsIDEsIDIgXSBdO1xyXG5cdFx0XHRcdGNhc2UgNDpcclxuXHRcdFx0XHRcdHJldHVybiBbIFsgMSwgMiwgMiwgMSBdLCBbIDIsIDEsIDEsIDEgXSwgWyAxLCAxLCAxLCAyIF0gXTtcclxuXHRcdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdFx0cmV0dXJuIFsgQXJyYXkoIG4gKS5maWxsKCAxICkgXTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogRm9ybWF0IGEgaHVtYW4tcmVhZGFibGUgbGFiZWwgbGlrZSBcIjUwJS8yNSUvMjUlXCIgZnJvbSB3ZWlnaHRzLlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7bnVtYmVyW119IHdlaWdodHMgLSBXZWlnaHQgbGlzdC5cclxuXHRcdCAqIEByZXR1cm5zIHtzdHJpbmd9IExhYmVsIHN0cmluZy5cclxuXHRcdCAqL1xyXG5cdFx0Zm9ybWF0X3ByZXNldF9sYWJlbCggd2VpZ2h0cyApIHtcclxuXHRcdFx0Y29uc3Qgc3VtID0gd2VpZ2h0cy5yZWR1Y2UoICggYSwgYiApID0+IGEgKyAoTnVtYmVyKCBiICkgfHwgMCksIDAgKSB8fCAxO1xyXG5cdFx0XHRyZXR1cm4gd2VpZ2h0cy5tYXAoICggdyApID0+IE1hdGgucm91bmQoICgoTnVtYmVyKCB3ICkgfHwgMCkgLyBzdW0pICogMTAwICkgKS5qb2luKCAnJS8nICkgKyAnJSc7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBQYXJzZSBjb21tYS9zcGFjZSBzZXBhcmF0ZWQgd2VpZ2h0cyBpbnRvIG51bWJlcnMuXHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IGlucHV0IC0gVXNlciBpbnB1dCBsaWtlIFwiMjAsNjAsMjBcIi5cclxuXHRcdCAqIEByZXR1cm5zIHtudW1iZXJbXX0gUGFyc2VkIHdlaWdodHMuXHJcblx0XHQgKi9cclxuXHRcdHBhcnNlX3dlaWdodHMoIGlucHV0ICkge1xyXG5cdFx0XHRpZiAoICEgaW5wdXQgKSB7XHJcblx0XHRcdFx0cmV0dXJuIFtdO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBTdHJpbmcoIGlucHV0IClcclxuXHRcdFx0XHQucmVwbGFjZSggL1teXFxkLC5cXHNdL2csICcnIClcclxuXHRcdFx0XHQuc3BsaXQoIC9bXFxzLF0rLyApXHJcblx0XHRcdFx0Lm1hcCggKCBzICkgPT4gcGFyc2VGbG9hdCggcyApIClcclxuXHRcdFx0XHQuZmlsdGVyKCAoIG4gKSA9PiBOdW1iZXIuaXNGaW5pdGUoIG4gKSAmJiBuID49IDAgKTtcclxuXHRcdH1cclxuXHR9O1xyXG5cclxuXHQvKipcclxuXHQgKiBXUEJDIFVzYWdlIExpbWl0IHNlcnZpY2UuXHJcblx0ICogQ291bnRzIGZpZWxkIHVzYWdlIGJ5IGtleSwgY29tcGFyZXMgdG8gcGFsZXR0ZSBsaW1pdHMsIGFuZCB1cGRhdGVzIHBhbGV0dGUgVUkuXHJcblx0ICovXHJcblx0Q29yZS5XUEJDX0JGQl9Vc2FnZUxpbWl0U2VydmljZSA9IGNsYXNzICB7XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBDb25zdHJ1Y3Rvci4gU2V0IHBhZ2VzX2NvbnRhaW5lciBhbmQgcGFsZXR0ZV91bC5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBwYWdlc19jb250YWluZXIgLSBDYW52YXMgcm9vdCB0aGF0IGhvbGRzIHBsYWNlZCBmaWVsZHMuXHJcblx0XHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50W118bnVsbH0gcGFsZXR0ZV91bHM/OiAgIFBhbGV0dGVzIFVMIHdpdGggLndwYmNfYmZiX19maWVsZCBpdGVtcyAobWF5IGJlIG51bGwpLlxyXG5cdFx0ICovXHJcblx0XHRjb25zdHJ1Y3RvcihwYWdlc19jb250YWluZXIsIHBhbGV0dGVfdWxzKSB7XHJcblx0XHRcdHRoaXMucGFnZXNfY29udGFpbmVyID0gcGFnZXNfY29udGFpbmVyO1xyXG5cdFx0XHQvLyBOb3JtYWxpemUgdG8gYW4gYXJyYXk7IHdl4oCZbGwgc3RpbGwgYmUgcm9idXN0IGlmIG5vbmUgcHJvdmlkZWQuXHJcblx0XHRcdHRoaXMucGFsZXR0ZV91bHMgICAgID0gQXJyYXkuaXNBcnJheSggcGFsZXR0ZV91bHMgKSA/IHBhbGV0dGVfdWxzIDogKHBhbGV0dGVfdWxzID8gWyBwYWxldHRlX3VscyBdIDogW10pO1xyXG5cdFx0fVxyXG5cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFBhcnNlIHVzYWdlIGxpbWl0IGZyb20gcmF3IGRhdGFzZXQgdmFsdWUuIE1pc3NpbmcvaW52YWxpZCAtPiBJbmZpbml0eS5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ8bnVsbHx1bmRlZmluZWR9IHJhdyAtIFJhdyBhdHRyaWJ1dGUgdmFsdWUuXHJcblx0XHQgKiBAcmV0dXJucyB7bnVtYmVyfSBMaW1pdCBudW1iZXIgb3IgSW5maW5pdHkuXHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBwYXJzZV91c2FnZV9saW1pdCggcmF3ICkge1xyXG5cdFx0XHRpZiAoIHJhdyA9PSBudWxsICkge1xyXG5cdFx0XHRcdHJldHVybiBJbmZpbml0eTtcclxuXHRcdFx0fVxyXG5cdFx0XHRjb25zdCBuID0gcGFyc2VJbnQoIHJhdywgMTAgKTtcclxuXHRcdFx0cmV0dXJuIE51bWJlci5pc0Zpbml0ZSggbiApID8gbiA6IEluZmluaXR5O1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQ291bnQgaG93IG1hbnkgaW5zdGFuY2VzIGV4aXN0IHBlciB1c2FnZV9rZXkgaW4gdGhlIGNhbnZhcy5cclxuXHRcdCAqXHJcblx0XHQgKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgbnVtYmVyPn0gTWFwIG9mIHVzYWdlX2tleSAtPiBjb3VudC5cclxuXHRcdCAqL1xyXG5cdFx0Y291bnRfdXNhZ2VfYnlfa2V5KCkge1xyXG5cdFx0XHRjb25zdCB1c2VkID0ge307XHJcblx0XHRcdGNvbnN0IGFsbCAgPSB0aGlzLnBhZ2VzX2NvbnRhaW5lcj8ucXVlcnlTZWxlY3RvckFsbCggJy53cGJjX2JmYl9fcGFuZWwtLXByZXZpZXcgLndwYmNfYmZiX19maWVsZDpub3QoLmlzLWludmFsaWQpJyApIHx8IFtdO1xyXG5cdFx0XHRhbGwuZm9yRWFjaCggKCBlbCApID0+IHtcclxuXHRcdFx0XHRjb25zdCBrZXkgPSBlbC5kYXRhc2V0LnVzYWdlX2tleSB8fCBlbC5kYXRhc2V0LnR5cGUgfHwgZWwuZGF0YXNldC5pZDtcclxuXHRcdFx0XHRpZiAoICEga2V5ICkge1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHR1c2VkW2tleV0gPSAodXNlZFtrZXldIHx8IDApICsgMTtcclxuXHRcdFx0fSApO1xyXG5cdFx0XHRyZXR1cm4gdXNlZDtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFJldHVybiBwYWxldHRlIGxpbWl0IGZvciBhIGdpdmVuIHVzYWdlIGtleSAoaWQgb2YgdGhlIHBhbGV0dGUgaXRlbSkuXHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFVzYWdlIGtleS5cclxuXHRcdCAqIEByZXR1cm5zIHtudW1iZXJ9IExpbWl0IHZhbHVlIG9yIEluZmluaXR5LlxyXG5cdFx0ICovXHJcblx0XHRnZXRfbGltaXRfZm9yX2tleShrZXkpIHtcclxuXHRcdFx0aWYgKCAhIGtleSApIHtcclxuXHRcdFx0XHRyZXR1cm4gSW5maW5pdHk7XHJcblx0XHRcdH1cclxuXHRcdFx0Ly8gUXVlcnkgYWNyb3NzIGFsbCBwYWxldHRlcyBwcmVzZW50IG5vdyAoc3RvcmVkICsgYW55IG5ld2x5IGFkZGVkIGluIERPTSkuXHJcblx0XHRcdGNvbnN0IHJvb3RzICAgICAgICAgICAgPSB0aGlzLnBhbGV0dGVfdWxzPy5sZW5ndGggPyB0aGlzLnBhbGV0dGVfdWxzIDogZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCggJy53cGJjX2JmYl9fcGFuZWxfZmllbGRfdHlwZXNfX3VsJyApO1xyXG5cdFx0XHRjb25zdCBhbGxQYWxldHRlRmllbGRzID0gQXJyYXkuZnJvbSggcm9vdHMgKS5mbGF0TWFwKCByID0+IEFycmF5LmZyb20oIHIucXVlcnlTZWxlY3RvckFsbCggJy53cGJjX2JmYl9fZmllbGQnICkgKSApO1xyXG5cdFx0XHRsZXQgbGltaXQgICAgICAgICAgICAgID0gSW5maW5pdHk7XHJcblxyXG5cdFx0XHRhbGxQYWxldHRlRmllbGRzLmZvckVhY2goIChlbCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHVzYWdlX2tleSA9IGVsLmRhdGFzZXQudXNhZ2Vfa2V5IHx8IGVsLmRhdGFzZXQuaWQ7XHJcblx0XHRcdFx0aWYgKCBlbC5kYXRhc2V0LmlkID09PSBrZXkgfHwgdXNhZ2Vfa2V5ID09PSBrZXkgKSB7XHJcblx0XHRcdFx0XHRjb25zdCBuID0gQ29yZS5XUEJDX0JGQl9Vc2FnZUxpbWl0U2VydmljZS5wYXJzZV91c2FnZV9saW1pdCggZWwuZGF0YXNldC51c2FnZW51bWJlciApO1xyXG5cdFx0XHRcdFx0Ly8gQ2hvb3NlIHRoZSBzbWFsbGVzdCBmaW5pdGUgbGltaXQgKHNhZmVzdCBpZiBwYWxldHRlcyBkaXNhZ3JlZSkuXHJcblx0XHRcdFx0XHRpZiAoIG4gPCBsaW1pdCApIHtcclxuXHRcdFx0XHRcdFx0bGltaXQgPSBuO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSApO1xyXG5cclxuXHRcdFx0cmV0dXJuIGxpbWl0O1xyXG5cdFx0fVxyXG5cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIERpc2FibGUvZW5hYmxlIHBhbGV0dGUgaXRlbXMgYmFzZWQgb24gY3VycmVudCB1c2FnZSBjb3VudHMgYW5kIGxpbWl0cy5cclxuXHRcdCAqXHJcblx0XHQgKiBAcmV0dXJucyB7dm9pZH1cclxuXHRcdCAqL1xyXG5cdFx0dXBkYXRlX3BhbGV0dGVfdWkoKSB7XHJcblx0XHRcdC8vIEFsd2F5cyBjb21wdXRlIHVzYWdlIGZyb20gdGhlIGNhbnZhczpcclxuXHRcdFx0Y29uc3QgdXNhZ2UgPSB0aGlzLmNvdW50X3VzYWdlX2J5X2tleSgpO1xyXG5cclxuXHRcdFx0Ly8gVXBkYXRlIGFsbCBwYWxldHRlcyBjdXJyZW50bHkgaW4gRE9NIChub3QganVzdCB0aGUgaW5pdGlhbGx5IGNhcHR1cmVkIG9uZXMpXHJcblx0XHRcdGNvbnN0IHBhbGV0dGVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCggJy53cGJjX2JmYl9fcGFuZWxfZmllbGRfdHlwZXNfX3VsJyApO1xyXG5cclxuXHRcdFx0cGFsZXR0ZXMuZm9yRWFjaCggKHBhbCkgPT4ge1xyXG5cdFx0XHRcdHBhbC5xdWVyeVNlbGVjdG9yQWxsKCAnLndwYmNfYmZiX19maWVsZCcgKS5mb3JFYWNoKCAocGFuZWxfZmllbGQpID0+IHtcclxuXHRcdFx0XHRcdGNvbnN0IHBhbGV0dGVJZCAgID0gcGFuZWxfZmllbGQuZGF0YXNldC5pZDtcclxuXHRcdFx0XHRcdGNvbnN0IHVzYWdlS2V5ICAgID0gcGFuZWxfZmllbGQuZGF0YXNldC51c2FnZV9rZXkgfHwgcGFsZXR0ZUlkO1xyXG5cdFx0XHRcdFx0Y29uc3QgcmF3X2xpbWl0ICAgPSBwYW5lbF9maWVsZC5kYXRhc2V0LnVzYWdlbnVtYmVyO1xyXG5cdFx0XHRcdFx0Y29uc3QgcGVyRWxMaW1pdCAgPSBDb3JlLldQQkNfQkZCX1VzYWdlTGltaXRTZXJ2aWNlLnBhcnNlX3VzYWdlX2xpbWl0KCByYXdfbGltaXQgKTtcclxuXHRcdFx0XHRcdC8vIEVmZmVjdGl2ZSBsaW1pdCBhY3Jvc3MgYWxsIHBhbGV0dGVzIGlzIHRoZSBnbG9iYWwgbGltaXQgZm9yIHRoaXMga2V5LlxyXG5cdFx0XHRcdFx0Y29uc3QgZ2xvYmFsTGltaXQgPSB0aGlzLmdldF9saW1pdF9mb3Jfa2V5KCB1c2FnZUtleSApO1xyXG5cdFx0XHRcdFx0Y29uc3QgbGltaXQgICAgICAgPSBOdW1iZXIuaXNGaW5pdGUoIGdsb2JhbExpbWl0ICkgPyBnbG9iYWxMaW1pdCA6IHBlckVsTGltaXQ7IC8vIHByZWZlciBnbG9iYWwgbWluXHJcblxyXG5cdFx0XHRcdFx0Y29uc3QgY3VycmVudCA9IHVzYWdlW3VzYWdlS2V5XSB8fCAwO1xyXG5cdFx0XHRcdFx0Y29uc3QgZGlzYWJsZSA9IE51bWJlci5pc0Zpbml0ZSggbGltaXQgKSAmJiBjdXJyZW50ID49IGxpbWl0O1xyXG5cclxuXHRcdFx0XHRcdHBhbmVsX2ZpZWxkLnN0eWxlLnBvaW50ZXJFdmVudHMgPSBkaXNhYmxlID8gJ25vbmUnIDogJyc7XHJcblx0XHRcdFx0XHRwYW5lbF9maWVsZC5zdHlsZS5vcGFjaXR5ICAgICAgID0gZGlzYWJsZSA/ICcwLjQnIDogJyc7XHJcblx0XHRcdFx0XHRwYW5lbF9maWVsZC5zZXRBdHRyaWJ1dGUoICdhcmlhLWRpc2FibGVkJywgZGlzYWJsZSA/ICd0cnVlJyA6ICdmYWxzZScgKTtcclxuXHRcdFx0XHRcdGlmICggZGlzYWJsZSApIHtcclxuXHRcdFx0XHRcdFx0cGFuZWxfZmllbGQuc2V0QXR0cmlidXRlKCAndGFiaW5kZXgnLCAnLTEnICk7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRwYW5lbF9maWVsZC5yZW1vdmVBdHRyaWJ1dGUoICd0YWJpbmRleCcgKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9ICk7XHJcblx0XHRcdH0gKTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBSZXR1cm4gaG93IG1hbnkgdmFsaWQgaW5zdGFuY2VzIHdpdGggdGhpcyB1c2FnZSBrZXkgZXhpc3QgaW4gdGhlIGNhbnZhcy5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVXNhZ2Uga2V5IG9mIGEgcGFsZXR0ZSBpdGVtLlxyXG5cdFx0ICogQHJldHVybnMge251bWJlcn0gQ291bnQgb2YgZXhpc3Rpbmcgbm9uLWludmFsaWQgaW5zdGFuY2VzLlxyXG5cdFx0ICovXHJcblx0XHRjb3VudF9mb3Jfa2V5KCBrZXkgKSB7XHJcblx0XHRcdGlmICggISBrZXkgKSB7XHJcblx0XHRcdFx0cmV0dXJuIDA7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuICggdGhpcy5wYWdlc19jb250YWluZXI/LnF1ZXJ5U2VsZWN0b3JBbGwoXHJcbiAgICAgICAgICAgICAgICBgLndwYmNfYmZiX19wYW5lbC0tcHJldmlldyAud3BiY19iZmJfX2ZpZWxkW2RhdGEtdXNhZ2Vfa2V5PVwiJHtDb3JlLldQQkNfQkZCX1Nhbml0aXplLmVzY19hdHRyX3ZhbHVlX2Zvcl9zZWxlY3Rvcigga2V5ICl9XCJdOm5vdCguaXMtaW52YWxpZCksIFxyXG4gICAgICAgICAgICAgICAgIC53cGJjX2JmYl9fcGFuZWwtLXByZXZpZXcgLndwYmNfYmZiX19maWVsZFtkYXRhLXR5cGU9XCIke0NvcmUuV1BCQ19CRkJfU2FuaXRpemUuZXNjX2F0dHJfdmFsdWVfZm9yX3NlbGVjdG9yKCBrZXkgKX1cIl06bm90KC5pcy1pbnZhbGlkKWBcclxuXHRcdFx0KSB8fCBbXSApLmxlbmd0aDtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEFsaWFzIGZvciBsaW1pdCBsb29rdXAgKHJlYWRhYmlsaXR5KS5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVXNhZ2Uga2V5IG9mIGEgcGFsZXR0ZSBpdGVtLlxyXG5cdFx0ICogQHJldHVybnMge251bWJlcn0gTGltaXQgdmFsdWUgb3IgSW5maW5pdHkuXHJcblx0XHQgKi9cclxuXHRcdGxpbWl0X2Zvcl9rZXkoIGtleSApIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0X2xpbWl0X2Zvcl9rZXkoIGtleSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogUmVtYWluaW5nIHNsb3RzIGZvciB0aGlzIGtleSAoSW5maW5pdHkgaWYgdW5saW1pdGVkKS5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVXNhZ2Uga2V5IG9mIGEgcGFsZXR0ZSBpdGVtLlxyXG5cdFx0ICogQHJldHVybnMge251bWJlcn0gUmVtYWluaW5nIGNvdW50ICg+PSAwKSBvciBJbmZpbml0eS5cclxuXHRcdCAqL1xyXG5cdFx0cmVtYWluaW5nX2Zvcl9rZXkoIGtleSApIHtcclxuXHRcdFx0Y29uc3QgbGltaXQgPSB0aGlzLmxpbWl0X2Zvcl9rZXkoIGtleSApO1xyXG5cdFx0XHRpZiAoIGxpbWl0ID09PSBJbmZpbml0eSApIHtcclxuXHRcdFx0XHRyZXR1cm4gSW5maW5pdHk7XHJcblx0XHRcdH1cclxuXHRcdFx0Y29uc3QgdXNlZCA9IHRoaXMuY291bnRfZm9yX2tleSgga2V5ICk7XHJcblx0XHRcdHJldHVybiBNYXRoLm1heCggMCwgbGltaXQgLSB1c2VkICk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBUcnVlIGlmIHlvdSBjYW4gYWRkIGBkZWx0YWAgbW9yZSBpdGVtcyBmb3IgdGhpcyBrZXkuXHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFVzYWdlIGtleSBvZiBhIHBhbGV0dGUgaXRlbS5cclxuXHRcdCAqIEBwYXJhbSB7bnVtYmVyfSBbZGVsdGE9MV0gLSBIb3cgbWFueSBpdGVtcyB5b3UgaW50ZW5kIHRvIGFkZC5cclxuXHRcdCAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIGFkZGluZyBpcyBhbGxvd2VkLlxyXG5cdFx0ICovXHJcblx0XHRjYW5fYWRkKCBrZXksIGRlbHRhID0gMSApIHtcclxuXHRcdFx0Y29uc3QgcmVtID0gdGhpcy5yZW1haW5pbmdfZm9yX2tleSgga2V5ICk7XHJcblx0XHRcdHJldHVybiAoIHJlbSA9PT0gSW5maW5pdHkgKSA/IHRydWUgOiAoIHJlbSA+PSBkZWx0YSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogVUktZmFjaW5nIGdhdGU6IGFsZXJ0IHdoZW4gZXhjZWVkZWQuIFJldHVybnMgYm9vbGVhbiBhbGxvd2VkL2Jsb2NrZWQuXHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFVzYWdlIGtleSBvZiBhIHBhbGV0dGUgaXRlbS5cclxuXHRcdCAqIEBwYXJhbSB7e2xhYmVsPzogc3RyaW5nLCBkZWx0YT86IG51bWJlcn19IFtvcHRzPXt9XSAtIE9wdGlvbmFsIFVJIGluZm8uXHJcblx0XHQgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiBhbGxvd2VkLCBmYWxzZSBpZiBibG9ja2VkLlxyXG5cdFx0ICovXHJcblx0XHRnYXRlX29yX2FsZXJ0KCBrZXksIHsgbGFiZWwgPSBrZXksIGRlbHRhID0gMSB9ID0ge30gKSB7XHJcblx0XHRcdGlmICggdGhpcy5jYW5fYWRkKCBrZXksIGRlbHRhICkgKSB7XHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdH1cclxuXHRcdFx0Y29uc3QgbGltaXQgPSB0aGlzLmxpbWl0X2Zvcl9rZXkoIGtleSApO1xyXG5cdFx0XHRhbGVydCggYE9ubHkgJHtsaW1pdH0gaW5zdGFuY2Uke2xpbWl0ID4gMSA/ICdzJyA6ICcnfSBvZiBcIiR7bGFiZWx9XCIgYWxsb3dlZC5gICk7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEJhY2t3YXJkLWNvbXBhdGlibGUgYWxpYXMgdXNlZCBlbHNld2hlcmUgaW4gdGhlIGNvZGViYXNlLiAgLSBDaGVjayB3aGV0aGVyIGFub3RoZXIgaW5zdGFuY2Ugd2l0aCB0aGUgZ2l2ZW5cclxuXHRcdCAqIHVzYWdlIGtleSBjYW4gYmUgYWRkZWQuXHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFVzYWdlIGtleSBvZiBhIHBhbGV0dGUgaXRlbS5cclxuXHRcdCAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIGFkZGluZyBvbmUgbW9yZSBpcyBhbGxvd2VkLlxyXG5cdFx0ICovXHJcblx0XHRpc191c2FnZV9vaygga2V5ICkge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5jYW5fYWRkKCBrZXksIDEgKTtcclxuXHRcdH1cclxuXHJcblx0fTtcclxuXHJcblx0LyoqXHJcblx0ICogQ29uc3RhbnQgZXZlbnQgbmFtZXMgZm9yIHRoZSBidWlsZGVyLlxyXG5cdCAqL1xyXG5cdENvcmUuV1BCQ19CRkJfRXZlbnRzID0gT2JqZWN0LmZyZWV6ZSh7XHJcblx0XHRTRUxFQ1QgICAgICAgICAgICA6ICd3cGJjOmJmYjpzZWxlY3QnLFxyXG5cdFx0Q0xFQVJfU0VMRUNUSU9OICAgOiAnd3BiYzpiZmI6Y2xlYXItc2VsZWN0aW9uJyxcclxuXHRcdEZJRUxEX0FERCAgICAgICAgIDogJ3dwYmM6YmZiOmZpZWxkOmFkZCcsXHJcblx0XHRGSUVMRF9SRU1PVkUgICAgICA6ICd3cGJjOmJmYjpmaWVsZDpyZW1vdmUnLFxyXG5cdFx0U1RSVUNUVVJFX0NIQU5HRSAgOiAnd3BiYzpiZmI6c3RydWN0dXJlOmNoYW5nZScsXHJcblx0XHRTVFJVQ1RVUkVfTE9BREVEICA6ICd3cGJjOmJmYjpzdHJ1Y3R1cmU6bG9hZGVkJ1xyXG5cdH0pO1xyXG5cclxuXHQvKipcclxuXHQgKiBMaWdodHdlaWdodCBldmVudCBidXMgdGhhdCBlbWl0cyB0byBib3RoIHRoZSBwYWdlcyBjb250YWluZXIgYW5kIGRvY3VtZW50LlxyXG5cdCAqL1xyXG5cdENvcmUuV1BCQ19CRkJfRXZlbnRCdXMgPSAgY2xhc3Mge1xyXG5cdFx0LyoqXHJcblx0XHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBzY29wZV9lbCAtIEVsZW1lbnQgdG8gZGlzcGF0Y2ggYnViYmxlZCBldmVudHMgZnJvbS5cclxuXHRcdCAqL1xyXG5cdFx0Y29uc3RydWN0b3IoIHNjb3BlX2VsICkge1xyXG5cdFx0XHR0aGlzLnNjb3BlX2VsID0gc2NvcGVfZWw7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBFbWl0IGEgRE9NIEN1c3RvbUV2ZW50IHdpdGggcGF5bG9hZC5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSAtIEV2ZW50IHR5cGUgKHVzZSBDb3JlLldQQkNfQkZCX0V2ZW50cy4gd2hlbiBwb3NzaWJsZSkuXHJcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gW2RldGFpbD17fV0gLSBBcmJpdHJhcnkgc2VyaWFsaXphYmxlIHBheWxvYWQuXHJcblx0XHQgKiBAcmV0dXJucyB7dm9pZH1cclxuXHRcdCAqL1xyXG5cdFx0ZW1pdCggdHlwZSwgZGV0YWlsID0ge30gKSB7XHJcblx0XHRcdGlmICggISB0aGlzLnNjb3BlX2VsICkge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cdFx0XHR0aGlzLnNjb3BlX2VsLmRpc3BhdGNoRXZlbnQoIG5ldyBDdXN0b21FdmVudCggdHlwZSwgeyBkZXRhaWw6IHsgLi4uZGV0YWlsIH0sIGJ1YmJsZXM6IHRydWUgfSApICk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBTdWJzY3JpYmUgdG8gYW4gZXZlbnQgb24gZG9jdW1lbnQuXHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgLSBFdmVudCB0eXBlLlxyXG5cdFx0ICogQHBhcmFtIHsoZXY6Q3VzdG9tRXZlbnQpPT52b2lkfSBoYW5kbGVyIC0gSGFuZGxlciBmdW5jdGlvbi5cclxuXHRcdCAqIEByZXR1cm5zIHt2b2lkfVxyXG5cdFx0ICovXHJcblx0XHRvbiggdHlwZSwgaGFuZGxlciApIHtcclxuXHRcdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggdHlwZSwgaGFuZGxlciApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogVW5zdWJzY3JpYmUgZnJvbSBhbiBldmVudCBvbiBkb2N1bWVudC5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSAtIEV2ZW50IHR5cGUuXHJcblx0XHQgKiBAcGFyYW0geyhldjpDdXN0b21FdmVudCk9PnZvaWR9IGhhbmRsZXIgLSBIYW5kbGVyIGZ1bmN0aW9uLlxyXG5cdFx0ICogQHJldHVybnMge3ZvaWR9XHJcblx0XHQgKi9cclxuXHRcdG9mZiggdHlwZSwgaGFuZGxlciApIHtcclxuXHRcdFx0ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciggdHlwZSwgaGFuZGxlciApO1xyXG5cdFx0fVxyXG5cdH07XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNvcnRhYmxlSlMgbWFuYWdlcjogc2luZ2xlIHBvaW50IGZvciBjb25zaXN0ZW50IERuRCBjb25maWcuXHJcblx0ICovXHJcblx0Q29yZS5XUEJDX0JGQl9Tb3J0YWJsZU1hbmFnZXIgPSBjbGFzcyAge1xyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQHBhcmFtIHtXUEJDX0Zvcm1fQnVpbGRlcn0gYnVpbGRlciAtIFRoZSBhY3RpdmUgYnVpbGRlciBpbnN0YW5jZS5cclxuXHRcdCAqIEBwYXJhbSB7eyBncm91cE5hbWU/OiBzdHJpbmcsIGFuaW1hdGlvbj86IG51bWJlciwgZ2hvc3RDbGFzcz86IHN0cmluZywgY2hvc2VuQ2xhc3M/OiBzdHJpbmcsIGRyYWdDbGFzcz86XHJcblx0XHQgKiAgICAgc3RyaW5nIH19IFtvcHRzPXt9XSAtIFZpc3VhbC9iZWhhdmlvciBvcHRpb25zLlxyXG5cdFx0ICovXHJcblx0XHRjb25zdHJ1Y3RvciggYnVpbGRlciwgb3B0cyA9IHt9ICkge1xyXG5cdFx0XHR0aGlzLmJ1aWxkZXIgPSBidWlsZGVyO1xyXG5cdFx0XHRjb25zdCBnaWQgPSB0aGlzLmJ1aWxkZXI/Lmluc3RhbmNlX2lkIHx8IE1hdGgucmFuZG9tKCkudG9TdHJpbmcoIDM2ICkuc2xpY2UoIDIsIDggKTtcclxuXHRcdFx0dGhpcy5vcHRzID0ge1xyXG5cdFx0XHRcdC8vIGdyb3VwTmFtZSAgOiAnZm9ybScsXHJcblx0XHRcdFx0Z3JvdXBOYW1lOiBgZm9ybS0ke2dpZH1gLFxyXG5cdFx0XHRcdGFuaW1hdGlvbiAgOiAxNTAsXHJcblx0XHRcdFx0Z2hvc3RDbGFzcyA6ICd3cGJjX2JmYl9fZHJhZy1naG9zdCcsXHJcblx0XHRcdFx0Y2hvc2VuQ2xhc3M6ICd3cGJjX2JmYl9faGlnaGxpZ2h0JyxcclxuXHRcdFx0XHRkcmFnQ2xhc3MgIDogJ3dwYmNfYmZiX19kcmFnLWFjdGl2ZScsXHJcblx0XHRcdFx0Li4ub3B0c1xyXG5cdFx0XHR9O1xyXG5cdFx0XHQvKiogQHR5cGUge1NldDxIVE1MRWxlbWVudD59ICovXHJcblx0XHRcdHRoaXMuX2NvbnRhaW5lcnMgPSBuZXcgU2V0KCk7XHJcblxyXG5cdFx0XHQvKipcclxuXHRcdFx0ICogR3VhcmQgYWdhaW5zdCBsb3N0IG1vdXNldXAgLyBwb2ludGVydXAgZXZlbnRzLlxyXG5cdFx0XHQgKlxyXG5cdFx0XHQgKiBAdHlwZSB7Ym9vbGVhbn1cclxuXHRcdFx0ICovXHJcblx0XHRcdHRoaXMuX2RyYWdfZmFpbF9zYWZlX2JvdW5kID0gZmFsc2U7XHJcblxyXG5cdFx0XHR0aGlzLl9iaW5kX2RyYWdfZmFpbF9zYWZlKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBDbGVhbnVwIGRyYWcgVUkgc3RhdGUuXHJcblx0XHQgKlxyXG5cdFx0ICogVGhpcyBpcyBhIGRlZmVuc2l2ZSBjbGVhbnVwIGZvciBjYXNlcyB3aGVuIENocm9tZSBvciBhIGJyb3dzZXIgZXh0ZW5zaW9uXHJcblx0XHQgKiBsb3NlcyB0aGUgZmluYWwgbW91c2V1cCAvIHBvaW50ZXJ1cCBldmVudCBkdXJpbmcgZmFsbGJhY2sgZHJhZ2dpbmcuXHJcblx0XHQgKlxyXG5cdFx0ICogQHJldHVybnMge3ZvaWR9XHJcblx0XHQgKi9cclxuXHRcdF9jbGVhbnVwX2RyYWdfdWkoKSB7XHJcblx0XHRcdHRoaXMuX2RyYWdTdGF0ZSA9IG51bGw7XHJcblx0XHRcdHRoaXMuX3RvZ2dsZV9kbmRfcm9vdF9mbGFncyggZmFsc2UgKTtcclxuXHRcdFx0dGhpcy5idWlsZGVyPy5fcmVtb3ZlX2RyYWdnaW5nX2NsYXNzPy4oKTtcclxuXHJcblx0XHRcdC8vIFJlbW92ZSBvbmx5IGZhbGxiYWNrIG1pcnJvcnMuIERvIG5vdCB0b3VjaCByZWFsIGRyYWdnZWQgZWxlbWVudHMuXHJcblx0XHRcdGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoICcuc29ydGFibGUtZmFsbGJhY2tbZGF0YS1kcmFnLXJvbGVdLCAud3BiY19iZmJfX3NpbXBsZV9saXN0X2ZhbGxiYWNrJyApXHJcblx0XHRcdFx0XHQuZm9yRWFjaCggKGVsKSA9PiB7XHJcblx0XHRcdFx0XHRcdGlmICggZWwucGFyZW50Tm9kZSApIHtcclxuXHRcdFx0XHRcdFx0XHRlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBlbCApO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9ICk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBCaW5kIGdsb2JhbCBmYWlsLXNhZmUgbGlzdGVuZXJzIGZvciBkcmFnIGNsZWFudXAuXHJcblx0XHQgKlxyXG5cdFx0ICogQHJldHVybnMge3ZvaWR9XHJcblx0XHQgKi9cclxuXHRcdF9iaW5kX2RyYWdfZmFpbF9zYWZlKCkge1xyXG5cdFx0XHRpZiAoIHRoaXMuX2RyYWdfZmFpbF9zYWZlX2JvdW5kICkge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0dGhpcy5fZHJhZ19mYWlsX3NhZmVfYm91bmQgPSB0cnVlO1xyXG5cclxuXHRcdFx0Y29uc3QgZmluaXNoX2RyYWcgPSAoKSA9PiB7XHJcblx0XHRcdFx0d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSggKCkgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy5fY2xlYW51cF9kcmFnX3VpKCk7XHJcblx0XHRcdFx0fSApO1xyXG5cdFx0XHR9O1xyXG5cclxuXHRcdFx0WyAnbW91c2V1cCcsICdwb2ludGVydXAnLCAndG91Y2hlbmQnLCAnZHJhZ2VuZCcgXS5mb3JFYWNoKCAoZXZ0X25hbWUpID0+IHtcclxuXHRcdFx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCBldnRfbmFtZSwgZmluaXNoX2RyYWcsIHRydWUgKTtcclxuXHRcdFx0fSApO1xyXG5cclxuXHRcdFx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoICdibHVyJywgZmluaXNoX2RyYWcsIHRydWUgKTtcclxuXHJcblx0XHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXHJcblx0XHRcdFx0J3Zpc2liaWxpdHljaGFuZ2UnLFxyXG5cdFx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRcdGlmICggZG9jdW1lbnQuaGlkZGVuICkge1xyXG5cdFx0XHRcdFx0XHRmaW5pc2hfZHJhZygpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0dHJ1ZVxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogVGFnIHRoZSBkcmFnIG1pcnJvciAoZWxlbWVudCB1bmRlciBjdXJzb3IpIHdpdGggcm9sZTogJ3BhbGV0dGUnIHwgJ2NhbnZhcycuXHJcblx0XHQgKiBXb3JrcyB3aXRoIFNvcnRhYmxlJ3MgZmFsbGJhY2sgbWlycm9yICguc29ydGFibGUtZmFsbGJhY2sgLyAuc29ydGFibGUtZHJhZykgYW5kIHdpdGggeW91ciBkcmFnQ2xhc3NcclxuXHRcdCAqICgud3BiY19iZmJfX2RyYWctYWN0aXZlKS5cclxuXHRcdCAqL1xyXG5cdFx0X3RhZ19kcmFnX21pcnJvciggZXZ0ICkge1xyXG5cdFx0XHRjb25zdCBmcm9tUGFsZXR0ZSA9IHRoaXMuYnVpbGRlcj8ucGFsZXR0ZV91bHM/LmluY2x1ZGVzPy4oIGV2dC5mcm9tICk7XHJcblx0XHRcdGNvbnN0IHJvbGUgICAgICAgID0gZnJvbVBhbGV0dGUgPyAncGFsZXR0ZScgOiAnY2FudmFzJztcclxuXHRcdFx0Ly8gV2FpdCBhIHRpY2sgc28gdGhlIG1pcnJvciBleGlzdHMuICAtIFRoZSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCkgbWV0aG9kIHRlbGxzIHRoZSBicm93c2VyIHlvdSB3aXNoIHRvIHBlcmZvcm0gYW4gYW5pbWF0aW9uLlxyXG5cdFx0XHRyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoICgpID0+IHtcclxuXHRcdFx0XHRjb25zdCBtaXJyb3IgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCAnLnNvcnRhYmxlLWZhbGxiYWNrLCAuc29ydGFibGUtZHJhZywgLicgKyB0aGlzLm9wdHMuZHJhZ0NsYXNzICk7XHJcblx0XHRcdFx0aWYgKCBtaXJyb3IgKSB7XHJcblx0XHRcdFx0XHRtaXJyb3Iuc2V0QXR0cmlidXRlKCAnZGF0YS1kcmFnLXJvbGUnLCByb2xlICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9ICk7XHJcblx0XHR9XHJcblxyXG5cdFx0X3RvZ2dsZV9kbmRfcm9vdF9mbGFncyggYWN0aXZlLCBmcm9tX3BhbGV0dGUgPSBmYWxzZSApIHtcclxuXHJcblx0XHRcdC8vIHNldCB0byByb290IGVsZW1lbnQgb2YgYW4gSFRNTCBkb2N1bWVudCwgd2hpY2ggaXMgdGhlIDxodG1sPi5cclxuXHRcdFx0Y29uc3Qgcm9vdCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcclxuXHRcdFx0aWYgKCBhY3RpdmUgKSB7XHJcblx0XHRcdFx0cm9vdC5jbGFzc0xpc3QuYWRkKCAnd3BiY19iZmJfX2RuZC1hY3RpdmUnICk7XHJcblx0XHRcdFx0aWYgKCBmcm9tX3BhbGV0dGUgKSB7XHJcblx0XHRcdFx0XHRyb290LmNsYXNzTGlzdC5hZGQoICd3cGJjX2JmYl9fZHJhZy1mcm9tLXBhbGV0dGUnICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHJvb3QuY2xhc3NMaXN0LnJlbW92ZSggJ3dwYmNfYmZiX19kbmQtYWN0aXZlJywgJ3dwYmNfYmZiX19kcmFnLWZyb20tcGFsZXR0ZScgKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEVuc3VyZSBhIHNpbXBsZSB2ZXJ0aWNhbCBzb3J0YWJsZSBsaXN0LlxyXG5cdFx0ICpcclxuXHRcdCAqIFRoaXMgY29uZmlndXJhdGlvbiBpcyBpbnRlbmRlZCBmb3IgaW5zcGVjdG9yL3NpZGViYXIgbGlzdHMgc3VjaCBhczpcclxuXHRcdCAqIC0gZHJvcGRvd24gY2hvaWNlc1xyXG5cdFx0ICogLSByYWRpbyBvcHRpb25zXHJcblx0XHQgKiAtIGNoZWNrYm94IG9wdGlvbnNcclxuXHRcdCAqXHJcblx0XHQgKiBJdCBpcyBpbnRlbnRpb25hbGx5IG11Y2ggc2ltcGxlciB0aGFuIHRoZSBjYW52YXMgRG5EIGNvbmZpZyBhbmQgZG9lcyBub3RcclxuXHRcdCAqIHVzZSB0aGUgY29sdW1uIGVkZ2UtZmVuY2UgLyBzdGlja3ktdGFyZ2V0IGxvZ2ljLlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGNvbnRhaW5lciAtIFNvcnRhYmxlIGxpc3QgY29udGFpbmVyLlxyXG5cdFx0ICogQHBhcmFtIHt7IGhhbmRsZV9zZWxlY3Rvcj86IHN0cmluZywgZHJhZ2dhYmxlX3NlbGVjdG9yPzogc3RyaW5nLCBvblVwZGF0ZT86IEZ1bmN0aW9uIH19IFtoYW5kbGVycz17fV0gLVxyXG5cdFx0ICogICAgIE9wdGlvbmFsIGhhbmRsZXJzL3NlbGVjdG9ycy5cclxuXHRcdCAqIEByZXR1cm5zIHt2b2lkfVxyXG5cdFx0ICovXHJcblx0XHRlbnN1cmVfc2ltcGxlX2xpc3QoIGNvbnRhaW5lciwgaGFuZGxlcnMgPSB7fSApIHtcclxuXHRcdFx0aWYgKCAhIGNvbnRhaW5lciB8fCB0eXBlb2YgU29ydGFibGUgPT09ICd1bmRlZmluZWQnICkge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoIFNvcnRhYmxlLmdldD8uKCBjb250YWluZXIgKSApIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGNvbnN0IGNvbW1vbiA9IHtcclxuXHRcdFx0XHRhbmltYXRpb24gICAgICAgIDogdGhpcy5vcHRzLmFuaW1hdGlvbixcclxuXHRcdFx0XHRnaG9zdENsYXNzICAgICAgIDogdGhpcy5vcHRzLmdob3N0Q2xhc3MsXHJcblx0XHRcdFx0Y2hvc2VuQ2xhc3MgICAgICA6IHRoaXMub3B0cy5jaG9zZW5DbGFzcyxcclxuXHRcdFx0XHRkcmFnQ2xhc3MgICAgICAgIDogdGhpcy5vcHRzLmRyYWdDbGFzcyxcclxuXHRcdFx0XHRmb3JjZUZhbGxiYWNrICAgIDogdHJ1ZSxcclxuXHRcdFx0XHQvLyBGb3IgYSBzaW5nbGUgc2Nyb2xsYWJsZSBzaWRlYmFyIGxpc3QgdGhpcyBpcyB1c3VhbGx5IG1vcmUgc3RhYmxlLlxyXG5cdFx0XHRcdGZhbGxiYWNrT25Cb2R5ICAgOiBmYWxzZSxcclxuXHRcdFx0XHRmYWxsYmFja1RvbGVyYW5jZTogOCxcclxuXHRcdFx0XHRyZW1vdmVDbG9uZU9uSGlkZTogdHJ1ZSxcclxuXHRcdFx0XHRvblN0YXJ0ICAgICAgICAgIDogKCkgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy5idWlsZGVyPy5fYWRkX2RyYWdnaW5nX2NsYXNzPy4oKTtcclxuXHRcdFx0XHRcdHRoaXMuX3RvZ2dsZV9kbmRfcm9vdF9mbGFncyggdHJ1ZSwgZmFsc2UgKTtcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdG9uRW5kICAgICAgICAgICAgOiAoKSA9PiB7XHJcblx0XHRcdFx0XHRzZXRUaW1lb3V0KCAoKSA9PiB7XHJcblx0XHRcdFx0XHRcdHRoaXMuYnVpbGRlcj8uX3JlbW92ZV9kcmFnZ2luZ19jbGFzcz8uKCk7XHJcblx0XHRcdFx0XHR9LCA1MCApO1xyXG5cdFx0XHRcdFx0dGhpcy5fdG9nZ2xlX2RuZF9yb290X2ZsYWdzKCBmYWxzZSApO1xyXG5cdFx0XHRcdFx0dGhpcy5fZHJhZ1N0YXRlID0gbnVsbDtcclxuXHRcdFx0XHRcdHRoaXMuX2NsZWFudXBfZHJhZ191aSgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fTtcclxuXHJcblx0XHRcdFNvcnRhYmxlLmNyZWF0ZShcclxuXHRcdFx0XHRjb250YWluZXIsXHJcblx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0Li4uY29tbW9uLFxyXG5cdFx0XHRcdFx0Z3JvdXAgICAgICAgICAgICAgICAgICA6IHsgbmFtZTogdGhpcy5vcHRzLmdyb3VwTmFtZSwgcHVsbDogZmFsc2UsIHB1dDogZmFsc2UgfSxcclxuXHRcdFx0XHRcdHNvcnQgICAgICAgICAgICAgICAgICAgOiB0cnVlLFxyXG5cdFx0XHRcdFx0ZGlyZWN0aW9uICAgICAgICAgICAgICA6ICd2ZXJ0aWNhbCcsXHJcblx0XHRcdFx0XHRoYW5kbGUgICAgICAgICAgICAgICAgIDogaGFuZGxlcnMuaGFuZGxlX3NlbGVjdG9yIHx8ICcud3BiY19iZmJfX2RyYWctaGFuZGxlJyxcclxuXHRcdFx0XHRcdGRyYWdnYWJsZSAgICAgICAgICAgICAgOiBoYW5kbGVycy5kcmFnZ2FibGVfc2VsZWN0b3IgfHwgJy53cGJjX2JmYl9fc29ydGFibGUtcm93JyxcclxuXHRcdFx0XHRcdGZhbGxiYWNrQ2xhc3MgICAgICAgICAgOiAnd3BiY19iZmJfX3NpbXBsZV9saXN0X2ZhbGxiYWNrJyxcclxuXHRcdFx0XHRcdGZpbHRlciAgICAgICAgICAgICAgICAgOiBbXHJcblx0XHRcdFx0XHRcdCdpbnB1dCcsXHJcblx0XHRcdFx0XHRcdCd0ZXh0YXJlYScsXHJcblx0XHRcdFx0XHRcdCdzZWxlY3QnLFxyXG5cdFx0XHRcdFx0XHQnYnV0dG9uJyxcclxuXHRcdFx0XHRcdFx0J2EnLFxyXG5cdFx0XHRcdFx0XHQnLndwYmNfYmZiX19uby1kcmFnLXpvbmUnLFxyXG5cdFx0XHRcdFx0XHQnLndwYmNfYmZiX19uby1kcmFnLXpvbmUgKidcclxuXHRcdFx0XHRcdF0uam9pbiggJywnICksXHJcblx0XHRcdFx0XHRwcmV2ZW50T25GaWx0ZXIgICAgICAgIDogZmFsc2UsXHJcblx0XHRcdFx0XHRpbnZlcnRTd2FwICAgICAgICAgICAgIDogZmFsc2UsXHJcblx0XHRcdFx0XHRzd2FwVGhyZXNob2xkICAgICAgICAgIDogMC4zMCxcclxuXHRcdFx0XHRcdGludmVydGVkU3dhcFRocmVzaG9sZCAgOiAwLjYwLFxyXG5cdFx0XHRcdFx0ZW1wdHlJbnNlcnRUaHJlc2hvbGQgICA6IDgsXHJcblx0XHRcdFx0XHRkcmFnb3ZlckJ1YmJsZSAgICAgICAgIDogZmFsc2UsXHJcblx0XHRcdFx0XHRzY3JvbGwgICAgICAgICAgICAgICAgIDogdHJ1ZSxcclxuXHRcdFx0XHRcdHNjcm9sbFNlbnNpdGl2aXR5ICAgICAgOiA2MCxcclxuXHRcdFx0XHRcdHNjcm9sbFNwZWVkICAgICAgICAgICAgOiAxNCxcclxuXHRcdFx0XHRcdG9uVXBkYXRlICAgICAgICAgICAgICAgOiBoYW5kbGVycy5vblVwZGF0ZSB8fCBmdW5jdGlvbiAoKSB7fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0KTtcclxuXHJcblx0XHRcdHRoaXMuX2NvbnRhaW5lcnMuYWRkKCBjb250YWluZXIgKTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBFbnN1cmUgU29ydGFibGUgaXMgYXR0YWNoZWQgdG8gYSBjb250YWluZXIgd2l0aCByb2xlICdwYWxldHRlJyBvciAnY2FudmFzJy5cclxuXHRcdCAqXHJcblx0XHQgKiAgLS0gSGFuZGxlIHNlbGVjdG9yczogaGFuZGxlOiAgJy5zZWN0aW9uLWRyYWctaGFuZGxlLCAud3BiY19iZmJfX2RyYWctaGFuZGxlLCAud3BiY19iZmJfX2RyYWctYW55d2hlcmUsXHJcblx0XHQgKiBbZGF0YS1kcmFnZ2FibGU9XCJ0cnVlXCJdJ1xyXG5cdFx0ICogIC0tIERyYWdnYWJsZSBnYXRlOiBkcmFnZ2FibGU6ICcud3BiY19iZmJfX2ZpZWxkOm5vdChbZGF0YS1kcmFnZ2FibGU9XCJmYWxzZVwiXSksIC53cGJjX2JmYl9fc2VjdGlvbidcclxuXHRcdCAqICAtLSBGaWx0ZXIgKG92ZXJsYXktc2FmZSk6ICAgICBpZ25vcmUgZXZlcnl0aGluZyBpbiBvdmVybGF5IGV4Y2VwdCB0aGUgaGFuZGxlIC1cclxuXHRcdCAqICcud3BiY19iZmJfX292ZXJsYXktY29udHJvbHNcclxuXHRcdCAqICo6bm90KC53cGJjX2JmYl9fZHJhZy1oYW5kbGUpOm5vdCguc2VjdGlvbi1kcmFnLWhhbmRsZSk6bm90KC53cGJjX2ljbl9kcmFnX2luZGljYXRvciknXHJcblx0XHQgKiAgLS0gTm8tZHJhZyB3cmFwcGVyOiAgICAgICAgICAgdXNlIC53cGJjX2JmYl9fbm8tZHJhZy16b25lIGluc2lkZSByZW5kZXJlcnMgZm9yIGlucHV0cy93aWRnZXRzLlxyXG5cdFx0ICogIC0tIEZvY3VzIGd1YXJkIChvcHRpb25hbCk6ICAgIGZsaXAgW2RhdGEtZHJhZ2dhYmxlXSBvbiBmb2N1c2luL2ZvY3Vzb3V0IHRvIHByZXZlbnQgYWNjaWRlbnRhbCBkcmFncyB3aGlsZVxyXG5cdFx0ICogdHlwaW5nLlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGNvbnRhaW5lciAtIFRoZSBlbGVtZW50IHRvIGVuaGFuY2Ugd2l0aCBTb3J0YWJsZS5cclxuXHRcdCAqIEBwYXJhbSB7J3BhbGV0dGUnfCdjYW52YXMnfSByb2xlIC0gQmVoYXZpb3IgcHJvZmlsZSB0byBhcHBseS5cclxuXHRcdCAqIEBwYXJhbSB7eyBvbkFkZD86IEZ1bmN0aW9uIH19IFtoYW5kbGVycz17fV0gLSBPcHRpb25hbCBoYW5kbGVycy5cclxuXHRcdCAqIEByZXR1cm5zIHt2b2lkfVxyXG5cdFx0ICovXHJcblx0XHRlbnN1cmUoIGNvbnRhaW5lciwgcm9sZSwgaGFuZGxlcnMgPSB7fSApIHtcclxuXHRcdFx0aWYgKCAhIGNvbnRhaW5lciB8fCB0eXBlb2YgU29ydGFibGUgPT09ICd1bmRlZmluZWQnICkge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoIFNvcnRhYmxlLmdldD8uKCBjb250YWluZXIgKSApIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGNvbnN0IHNvcnRhYmxlX2tpbmQgPSBoYW5kbGVycy5zb3J0YWJsZV9raW5kIHx8ICcnO1xyXG5cclxuXHRcdFx0aWYgKCBzb3J0YWJsZV9raW5kID09PSAnc2ltcGxlX2xpc3QnICkge1xyXG5cdFx0XHRcdHRoaXMuZW5zdXJlX3NpbXBsZV9saXN0KCBjb250YWluZXIsIGhhbmRsZXJzICk7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRjb25zdCBjb21tb24gPSB7XHJcblx0XHRcdFx0YW5pbWF0aW9uICA6IHRoaXMub3B0cy5hbmltYXRpb24sXHJcblx0XHRcdFx0Z2hvc3RDbGFzcyA6IHRoaXMub3B0cy5naG9zdENsYXNzLFxyXG5cdFx0XHRcdGNob3NlbkNsYXNzOiB0aGlzLm9wdHMuY2hvc2VuQ2xhc3MsXHJcblx0XHRcdFx0ZHJhZ0NsYXNzICA6IHRoaXMub3B0cy5kcmFnQ2xhc3MsXHJcblx0XHRcdFx0Ly8gPT0gRWxlbWVudCB1bmRlciB0aGUgY3Vyc29yICA9PSBFbnN1cmUgd2UgZHJhZyBhIHJlYWwgRE9NIG1pcnJvciB5b3UgY2FuIHN0eWxlIHZpYSBDU1MgKGNyb3NzLWJyb3dzZXIpLlxyXG5cdFx0XHRcdGZvcmNlRmFsbGJhY2sgICAgOiB0cnVlLFxyXG5cdFx0XHRcdGZhbGxiYWNrT25Cb2R5ICAgOiB0cnVlLFxyXG5cdFx0XHRcdGZhbGxiYWNrVG9sZXJhbmNlOiA4LFxyXG5cdFx0XHRcdHJlbW92ZUNsb25lT25IaWRlOiB0cnVlLFxyXG5cdFx0XHRcdC8vIEFkZCBib2R5L2h0bWwgZmxhZ3Mgc28geW91IGNhbiBzdHlsZSBkaWZmZXJlbnRseSB3aGVuIGRyYWdnaW5nIGZyb20gcGFsZXR0ZS5cclxuXHRcdFx0XHRvblN0YXJ0OiAoZXZ0KSA9PiB7XHJcblx0XHRcdFx0XHR0aGlzLmJ1aWxkZXI/Ll9hZGRfZHJhZ2dpbmdfY2xhc3M/LigpO1xyXG5cclxuXHRcdFx0XHRcdGNvbnN0IGZyb21QYWxldHRlID0gdGhpcy5idWlsZGVyPy5wYWxldHRlX3Vscz8uaW5jbHVkZXM/LiggZXZ0LmZyb20gKTtcclxuXHRcdFx0XHRcdHRoaXMuX3RvZ2dsZV9kbmRfcm9vdF9mbGFncyggdHJ1ZSwgZnJvbVBhbGV0dGUgKTsgIC8vIHNldCB0byByb290IEhUTUwgZG9jdW1lbnQ6IGh0bWwud3BiY19iZmJfX2RuZC1hY3RpdmUud3BiY19iZmJfX2RyYWctZnJvbS1wYWxldHRlIC5cclxuXHJcblx0XHRcdFx0XHR0aGlzLl90YWdfZHJhZ19taXJyb3IoIGV2dCApOyAgICAgICAgICAgICAgICAgICAgICAvLyBBZGQgJ2RhdGEtZHJhZy1yb2xlJyBhdHRyaWJ1dGUgdG8gIGVsZW1lbnQgdW5kZXIgY3Vyc29yLlxyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0b25FbmQgIDogKCkgPT4ge1xyXG5cdFx0XHRcdFx0c2V0VGltZW91dCggKCkgPT4geyB0aGlzLmJ1aWxkZXIuX3JlbW92ZV9kcmFnZ2luZ19jbGFzcygpOyB9LCA1MCApO1xyXG5cdFx0XHRcdFx0dGhpcy5fdG9nZ2xlX2RuZF9yb290X2ZsYWdzKCBmYWxzZSApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fTtcclxuXHJcblx0XHRcdGlmICggcm9sZSA9PT0gJ3BhbGV0dGUnICkge1xyXG5cdFx0XHRcdFNvcnRhYmxlLmNyZWF0ZSggY29udGFpbmVyLCB7XHJcblx0XHRcdFx0XHQuLi5jb21tb24sXHJcblx0XHRcdFx0XHRncm91cCAgIDogeyBuYW1lOiB0aGlzLm9wdHMuZ3JvdXBOYW1lLCBwdWxsOiAnY2xvbmUnLCBwdXQ6IGZhbHNlIH0sXHJcblx0XHRcdFx0XHRzb3J0ICAgIDogZmFsc2VcclxuXHRcdFx0XHR9ICk7XHJcblx0XHRcdFx0dGhpcy5fY29udGFpbmVycy5hZGQoIGNvbnRhaW5lciApO1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gcm9sZSA9PT0gJ2NhbnZhcycuXHJcblx0XHRcdFNvcnRhYmxlLmNyZWF0ZSggY29udGFpbmVyLCB7XHJcblx0XHRcdFx0Li4uY29tbW9uLFxyXG5cdFx0XHRcdGdyb3VwICAgIDoge1xyXG5cdFx0XHRcdFx0bmFtZTogdGhpcy5vcHRzLmdyb3VwTmFtZSxcclxuXHRcdFx0XHRcdHB1bGw6IHRydWUsXHJcblx0XHRcdFx0XHRwdXQgOiAodG8sIGZyb20sIGRyYWdnZWRFbCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gZHJhZ2dlZEVsLmNsYXNzTGlzdC5jb250YWlucyggJ3dwYmNfYmZiX19maWVsZCcgKSB8fFxyXG5cdFx0XHRcdFx0XHRcdCAgIGRyYWdnZWRFbC5jbGFzc0xpc3QuY29udGFpbnMoICd3cGJjX2JmYl9fc2VjdGlvbicgKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdC8vIC0tLS0tLS0tLS0gRG5EIEhhbmRsZXJzIC0tLS0tLS0tLS0tLS0tICAgICAgICAgICAgICAgIC8vIEdyYWIgYW55d2hlcmUgb24gZmllbGRzIHRoYXQgb3B0LWluIHdpdGggdGhlIGNsYXNzIG9yIGF0dHJpYnV0ZS4gIC0gU2VjdGlvbnMgc3RpbGwgcmVxdWlyZSB0aGVpciBkZWRpY2F0ZWQgaGFuZGxlLlxyXG5cdFx0XHRcdGhhbmRsZSAgIDogJy5zZWN0aW9uLWRyYWctaGFuZGxlLCAud3BiY19iZmJfX2RyYWctaGFuZGxlLCAud3BiY19iZmJfX2RyYWctYW55d2hlcmUsIFtkYXRhLWRyYWdnYWJsZT1cInRydWVcIl0nLFxyXG5cdFx0XHRcdGRyYWdnYWJsZTogJy53cGJjX2JmYl9fZmllbGQ6bm90KFtkYXRhLWRyYWdnYWJsZT1cImZhbHNlXCJdKSwgLndwYmNfYmZiX19zZWN0aW9uJywgICAgICAgICAgICAgICAgICAgICAgICAvLyBQZXItZmllbGQgb3B0LW91dCB3aXRoIFtkYXRhLWRyYWdnYWJsZT1cImZhbHNlXCJdIChlLmcuLCB3aGlsZSBlZGl0aW5nKS5cclxuXHRcdFx0XHQvLyAtLS0tLS0tLS0tIEZpbHRlcnMgLSBObyBEbkQgLS0tLS0tLS0tLSAgICAgICAgICAgICAgICAvLyBEZWNsYXJhdGl2ZSDigJxuby1kcmFnIHpvbmVz4oCdOiBhbnl0aGluZyBpbnNpZGUgdGhlc2Ugd3JhcHBlcnMgd29u4oCZdCBzdGFydCBhIGRyYWcuXHJcblx0XHRcdFx0ZmlsdGVyOiBbXHJcblx0XHRcdFx0XHQnLndwYmNfYmZiX19uby1kcmFnLXpvbmUnLFxyXG5cdFx0XHRcdFx0Jy53cGJjX2JmYl9fbm8tZHJhZy16b25lIConLFxyXG5cdFx0XHRcdFx0Jy53cGJjX2JmYl9fY29sdW1uLXJlc2l6ZXInLCAgLy8gSWdub3JlIHRoZSByZXNpemVyIHJhaWxzIGR1cmluZyBEbkQgKHByZXZlbnRzIGVkZ2Ug4oCcc25hcOKAnSkuXHJcblx0XHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbiB0aGUgb3ZlcmxheSB0b29sYmFyLCBibG9jayBldmVyeXRoaW5nIEVYQ0VQVCB0aGUgZHJhZyBoYW5kbGUgKGFuZCBpdHMgaWNvbikuXHJcblx0XHRcdFx0XHQnLndwYmNfYmZiX19vdmVybGF5LWNvbnRyb2xzICo6bm90KC53cGJjX2JmYl9fZHJhZy1oYW5kbGUpOm5vdCguc2VjdGlvbi1kcmFnLWhhbmRsZSk6bm90KC53cGJjX2ljbl9kcmFnX2luZGljYXRvciknXHJcblx0XHRcdFx0XS5qb2luKCAnLCcgKSxcclxuXHRcdFx0XHRwcmV2ZW50T25GaWx0ZXIgIDogZmFsc2UsXHJcblx0XHRcdFx0XHQvLyAtLS0tLS0tLS0tIGFudGktaml0dGVyIHR1bmluZyAtLS0tLS0tLS0tXHJcblx0XHRcdFx0ZGlyZWN0aW9uICAgICAgICAgICAgOiAndmVydGljYWwnLCAgICAgICAgICAgLy8gY29sdW1ucyBhcmUgdmVydGljYWwgbGlzdHMuXHJcblx0XHRcdFx0aW52ZXJ0U3dhcCAgICAgICAgICAgOiB0cnVlLCAgICAgICAgICAgICAgICAgLy8gdXNlIHN3YXAgb24gaW52ZXJ0ZWQgb3ZlcmxhcC5cclxuXHRcdFx0XHRzd2FwVGhyZXNob2xkICAgICAgICA6IDAuNjUsICAgICAgICAgICAgICAgICAvLyBiZSBsZXNzIGVhZ2VyIHRvIHN3YXAuXHJcblx0XHRcdFx0aW52ZXJ0ZWRTd2FwVGhyZXNob2xkOiAwLjg1LCAgICAgICAgICAgICAgICAgLy8gcmVxdWlyZSBkZWVwZXIgb3ZlcmxhcCB3aGVuIGludmVydGVkLlxyXG5cdFx0XHRcdGVtcHR5SW5zZXJ0VGhyZXNob2xkIDogMjQsICAgICAgICAgICAgICAgICAgIC8vIGRvbuKAmXQganVtcCBpbnRvIGVtcHR5IGNvbnRhaW5lcnMgdG9vIGVhcmx5LlxyXG5cdFx0XHRcdGRyYWdvdmVyQnViYmxlICAgICAgIDogZmFsc2UsICAgICAgICAgICAgICAgIC8vIGtlZXAgZHJhZ292ZXIgbG9jYWwuXHJcblx0XHRcdFx0c2Nyb2xsICAgICAgICAgICAgICAgOiB0cnVlLFxyXG5cdFx0XHRcdHNjcm9sbFNlbnNpdGl2aXR5ICAgIDogNDAsXHJcblx0XHRcdFx0c2Nyb2xsU3BlZWQgICAgICAgICAgOiAxMCxcclxuXHRcdFx0XHQvKipcclxuXHRcdFx0XHQgKiBFbnRlci9sZWF2ZSBoeXN0ZXJlc2lzIGZvciBjcm9zcy1jb2x1bW4gbW92ZXMuICAgIE9ubHkgYWxsb3cgZHJvcHBpbmcgaW50byBgdG9gIHdoZW4gdGhlIHBvaW50ZXIgaXNcclxuXHRcdFx0XHQgKiB3ZWxsIGluc2lkZSBpdC5cclxuXHRcdFx0XHQgKi9cclxuXHRcdFx0XHRvbk1vdmU6IChldnQsIG9yaWdpbmFsRXZlbnQpID0+IHtcclxuXHJcblx0XHRcdFx0XHRjb25zdCB7IHRvLCBmcm9tIH0gPSBldnQ7XHJcblx0XHRcdFx0XHRpZiAoICEgdG8gfHwgISBmcm9tICkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRjb25zdCBpbl9wcmV2aWV3X2NhbnZhcyA9ICEhIHRvLmNsb3Nlc3QoICcud3BiY19iZmJfX3BhbmVsLS1wcmV2aWV3JyApO1xyXG5cdFx0XHRcdFx0aWYgKCAhIGluX3ByZXZpZXdfY2FudmFzICkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHQvLyBPbmx5IGdhdGUgY29sdW1ucyAobm90IHBhZ2UgY29udGFpbmVycyksIGFuZCBvbmx5IGZvciBjcm9zcy1jb2x1bW4gbW92ZXMgaW4gdGhlIHNhbWUgcm93XHJcblx0XHRcdFx0XHRjb25zdCBpc0NvbHVtbiA9IHRvLmNsYXNzTGlzdD8uY29udGFpbnMoICd3cGJjX2JmYl9fY29sdW1uJyApO1xyXG5cdFx0XHRcdFx0aWYgKCAhaXNDb2x1bW4gKSByZXR1cm4gdHJ1ZTtcclxuXHJcblx0XHRcdFx0XHRjb25zdCBmcm9tUm93ID0gZnJvbS5jbG9zZXN0KCAnLndwYmNfYmZiX19yb3cnICk7XHJcblx0XHRcdFx0XHRjb25zdCB0b1JvdyAgID0gdG8uY2xvc2VzdCggJy53cGJjX2JmYl9fcm93JyApO1xyXG5cdFx0XHRcdFx0aWYgKCBmcm9tUm93ICYmIHRvUm93ICYmIGZyb21Sb3cgIT09IHRvUm93ICkgcmV0dXJuIHRydWU7XHJcblxyXG5cdFx0XHRcdFx0Y29uc3QgcmVjdCA9IHRvLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG5cdFx0XHRcdFx0Y29uc3QgZXZ0WCA9IChvcmlnaW5hbEV2ZW50LnRvdWNoZXM/LlswXT8uY2xpZW50WCkgPz8gb3JpZ2luYWxFdmVudC5jbGllbnRYO1xyXG5cdFx0XHRcdFx0Y29uc3QgZXZ0WSA9IChvcmlnaW5hbEV2ZW50LnRvdWNoZXM/LlswXT8uY2xpZW50WSkgPz8gb3JpZ2luYWxFdmVudC5jbGllbnRZO1xyXG5cclxuXHRcdFx0XHRcdC8vIC0tLSBFZGdlIGZlbmNlIChsaWtlIHlvdSBoYWQpLCBidXQgY2xhbXBlZCBmb3IgdGlueSBjb2x1bW5zXHJcblx0XHRcdFx0XHRjb25zdCBwYWRkaW5nWCA9IENvcmUuV1BCQ19CRkJfU2FuaXRpemUuY2xhbXAoIHJlY3Qud2lkdGggKiAwLjIwLCAxMiwgMzYgKTtcclxuXHRcdFx0XHRcdGNvbnN0IHBhZGRpbmdZID0gQ29yZS5XUEJDX0JGQl9TYW5pdGl6ZS5jbGFtcCggcmVjdC5oZWlnaHQgKiAwLjEwLCA2LCAxNiApO1xyXG5cclxuXHRcdFx0XHRcdC8vIExvb3NlciBZIGlmIHRoZSBjb2x1bW4gaXMgdmlzdWFsbHkgdGlueS9lbXB0eVxyXG5cdFx0XHRcdFx0Y29uc3QgaXNWaXN1YWxseUVtcHR5ID0gdG8uY2hpbGRFbGVtZW50Q291bnQgPT09IDAgfHwgcmVjdC5oZWlnaHQgPCA2NDtcclxuXHRcdFx0XHRcdGNvbnN0IGlubmVyVG9wICAgICAgICA9IHJlY3QudG9wICsgKGlzVmlzdWFsbHlFbXB0eSA/IDQgOiBwYWRkaW5nWSk7XHJcblx0XHRcdFx0XHRjb25zdCBpbm5lckJvdHRvbSAgICAgPSByZWN0LmJvdHRvbSAtIChpc1Zpc3VhbGx5RW1wdHkgPyA0IDogcGFkZGluZ1kpO1xyXG5cdFx0XHRcdFx0Y29uc3QgaW5uZXJMZWZ0ICAgICAgID0gcmVjdC5sZWZ0ICsgcGFkZGluZ1g7XHJcblx0XHRcdFx0XHRjb25zdCBpbm5lclJpZ2h0ICAgICAgPSByZWN0LnJpZ2h0IC0gcGFkZGluZ1g7XHJcblxyXG5cdFx0XHRcdFx0Y29uc3QgaW5zaWRlWCA9IGV2dFggPiBpbm5lckxlZnQgJiYgZXZ0WCA8IGlubmVyUmlnaHQ7XHJcblx0XHRcdFx0XHRjb25zdCBpbnNpZGVZID0gZXZ0WSA+IGlubmVyVG9wICYmIGV2dFkgPCBpbm5lckJvdHRvbTtcclxuXHRcdFx0XHRcdGlmICggIShpbnNpZGVYICYmIGluc2lkZVkpICkgcmV0dXJuIGZhbHNlOyAgIC8vIHN0YXkgaW4gY3VycmVudCBjb2x1bW4gdW50aWwgd2VsbCBpbnNpZGUgbmV3IG9uZVxyXG5cclxuXHRcdFx0XHRcdC8vIC0tLSBTdGlja3kgdGFyZ2V0IGNvbW1pdCBkaXN0YW5jZTogb25seSBzd2l0Y2ggaWYgd2XigJlyZSBjbGVhcmx5IGluc2lkZSB0aGUgbmV3IGNvbHVtblxyXG5cdFx0XHRcdFx0Y29uc3QgZHMgPSB0aGlzLl9kcmFnU3RhdGU7XHJcblx0XHRcdFx0XHRpZiAoIGRzICkge1xyXG5cdFx0XHRcdFx0XHRpZiAoIGRzLnN0aWNreVRvICYmIGRzLnN0aWNreVRvICE9PSB0byApIHtcclxuXHRcdFx0XHRcdFx0XHQvLyByZXF1aXJlIGEgZGVlcGVyIHBlbmV0cmF0aW9uIHRvIHN3aXRjaCBjb2x1bW5zXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgY29tbWl0WCA9IENvcmUuV1BCQ19CRkJfU2FuaXRpemUuY2xhbXAoIHJlY3Qud2lkdGggKiAwLjI1LCAxOCwgNDAgKTsgICAvLyAyNSUgb3IgMTjigJM0MHB4XHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgY29tbWl0WSA9IENvcmUuV1BCQ19CRkJfU2FuaXRpemUuY2xhbXAoIHJlY3QuaGVpZ2h0ICogMC4xNSwgMTAsIDI4ICk7ICAvLyAxNSUgb3IgMTDigJMyOHB4XHJcblxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IGRlZXBJbnNpZGUgPVxyXG5cdFx0XHRcdFx0XHRcdFx0XHQgIChldnRYID4gcmVjdC5sZWZ0ICsgY29tbWl0WCAmJiBldnRYIDwgcmVjdC5yaWdodCAtIGNvbW1pdFgpICYmXHJcblx0XHRcdFx0XHRcdFx0XHRcdCAgKGV2dFkgPiByZWN0LnRvcCArIGNvbW1pdFkgJiYgZXZ0WSA8IHJlY3QuYm90dG9tIC0gY29tbWl0WSk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdGlmICggIWRlZXBJbnNpZGUgKSByZXR1cm4gZmFsc2U7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0Ly8gV2UgYWNjZXB0IHRoZSBuZXcgdGFyZ2V0IG5vdy5cclxuXHRcdFx0XHRcdFx0ZHMuc3RpY2t5VG8gICAgID0gdG87XHJcblx0XHRcdFx0XHRcdGRzLmxhc3RTd2l0Y2hUcyA9IHBlcmZvcm1hbmNlLm5vdygpO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0b25TdGFydDogKGV2dCkgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy5idWlsZGVyPy5fYWRkX2RyYWdnaW5nX2NsYXNzPy4oKTtcclxuXHRcdFx0XHRcdC8vIE1hdGNoIHRoZSBmbGFncyB3ZSBzZXQgaW4gY29tbW9uIHNvIENTUyBzdGF5cyBjb25zaXN0ZW50IG9uIGNhbnZhcyBkcmFncyB0b28uXHJcblx0XHRcdFx0XHRjb25zdCBmcm9tUGFsZXR0ZSA9IHRoaXMuYnVpbGRlcj8ucGFsZXR0ZV91bHM/LmluY2x1ZGVzPy4oIGV2dC5mcm9tICk7XHJcblx0XHRcdFx0XHR0aGlzLl90b2dnbGVfZG5kX3Jvb3RfZmxhZ3MoIHRydWUsIGZyb21QYWxldHRlICk7ICAgICAgICAgIC8vIHNldCB0byByb290IEhUTUwgZG9jdW1lbnQ6IGh0bWwud3BiY19iZmJfX2RuZC1hY3RpdmUud3BiY19iZmJfX2RyYWctZnJvbS1wYWxldHRlIC5cclxuXHRcdFx0XHRcdHRoaXMuX3RhZ19kcmFnX21pcnJvciggZXZ0ICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUYWcgdGhlIG1pcnJvciB1bmRlciBjdXJzb3IuXHJcblx0XHRcdFx0XHR0aGlzLl9kcmFnU3RhdGUgPSB7IHN0aWNreVRvOiBudWxsLCBsYXN0U3dpdGNoVHM6IDAgfTsgICAgLy8gcGVyLWRyYWcgc3RhdGUuXHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRvbkVuZCAgOiAoKSA9PiB7XHJcblx0XHRcdFx0XHRzZXRUaW1lb3V0KCAoKSA9PiB7IHRoaXMuYnVpbGRlci5fcmVtb3ZlX2RyYWdnaW5nX2NsYXNzKCk7IH0sIDUwICk7XHJcblx0XHRcdFx0XHR0aGlzLl90b2dnbGVfZG5kX3Jvb3RfZmxhZ3MoIGZhbHNlICk7ICAgICAgICAgICAgICAgICAgICAvLyBzZXQgdG8gcm9vdCBIVE1MIGRvY3VtZW50IHdpdGhvdXQgdGhlc2UgY2xhc3NlczogaHRtbC53cGJjX2JmYl9fZG5kLWFjdGl2ZS53cGJjX2JmYl9fZHJhZy1mcm9tLXBhbGV0dGUgLlxyXG5cdFx0XHRcdFx0dGhpcy5fZHJhZ1N0YXRlID0gbnVsbDtcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHRcdFx0XHQvLyBvbkFkZDogaGFuZGxlcnMub25BZGQgfHwgdGhpcy5idWlsZGVyLmhhbmRsZV9vbl9hZGQuYmluZCggdGhpcy5idWlsZGVyIClcclxuXHRcdFx0XHRvbkFkZDogKGV2dCkgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKCB0aGlzLl9vbl9hZGRfc2VjdGlvbiggZXZ0ICkgKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdC8vIEZhbGxiYWNrOiBvcmlnaW5hbCBoYW5kbGVyIGZvciBub3JtYWwgZmllbGRzLlxyXG5cdFx0XHRcdFx0KGhhbmRsZXJzLm9uQWRkIHx8IHRoaXMuYnVpbGRlci5oYW5kbGVfb25fYWRkLmJpbmQoIHRoaXMuYnVpbGRlciApKSggZXZ0ICk7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRvblVwZGF0ZTogKCkgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy5idWlsZGVyLmJ1cz8uZW1pdD8uKCBDb3JlLldQQkNfQkZCX0V2ZW50cy5TVFJVQ1RVUkVfQ0hBTkdFLCB7IHJlYXNvbjogJ3NvcnQtdXBkYXRlJyB9ICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9ICk7XHJcblxyXG5cdFx0XHR0aGlzLl9jb250YWluZXJzLmFkZCggY29udGFpbmVyICk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBIYW5kbGUgYWRkaW5nL21vdmluZyBzZWN0aW9ucyB2aWEgU29ydGFibGUgb25BZGQuXHJcblx0XHQgKiBSZXR1cm5zIHRydWUgaWYgaGFuZGxlZCAoaS5lLiwgaXQgd2FzIGEgc2VjdGlvbiksIGZhbHNlIHRvIGxldCB0aGUgZGVmYXVsdCBmaWVsZCBoYW5kbGVyIHJ1bi5cclxuXHRcdCAqXHJcblx0XHQgKiAtIFBhbGV0dGUgLT4gY2FudmFzOiByZW1vdmUgdGhlIHBsYWNlaG9sZGVyIGNsb25lIGFuZCBidWlsZCBhIGZyZXNoIHNlY3Rpb24gdmlhIGFkZF9zZWN0aW9uKClcclxuXHRcdCAqIC0gQ2FudmFzIC0+IGNhbnZhczoga2VlcCB0aGUgbW92ZWQgRE9NIChhbmQgaXRzIGNoaWxkcmVuKSwganVzdCByZS13aXJlIG92ZXJsYXlzL3NvcnRhYmxlcy9tZXRhZGF0YVxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7U29ydGFibGUuU29ydGFibGVFdmVudH0gZXZ0XHJcblx0XHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuXHRcdCAqL1xyXG5cdFx0X29uX2FkZF9zZWN0aW9uKGV2dCkge1xyXG5cclxuXHRcdFx0Y29uc3QgaXRlbSA9IGV2dC5pdGVtO1xyXG5cdFx0XHRpZiAoICEgaXRlbSApIHtcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIElkZW50aWZ5IHNlY3Rpb25zIGJvdGggZnJvbSBwYWxldHRlIGl0ZW1zIChsaSBjbG9uZXMpIGFuZCByZWFsIGNhbnZhcyBub2Rlcy5cclxuXHRcdFx0Y29uc3QgZGF0YSAgICAgID0gQ29yZS5XUEJDX0Zvcm1fQnVpbGRlcl9IZWxwZXIuZ2V0X2FsbF9kYXRhX2F0dHJpYnV0ZXMoIGl0ZW0gKTtcclxuXHRcdFx0Y29uc3QgaXNTZWN0aW9uID0gaXRlbS5jbGFzc0xpc3QuY29udGFpbnMoICd3cGJjX2JmYl9fc2VjdGlvbicgKSB8fCAoZGF0YT8udHlwZSB8fCBpdGVtLmRhdGFzZXQ/LnR5cGUpID09PSAnc2VjdGlvbic7XHJcblxyXG5cdFx0XHRpZiAoICEgaXNTZWN0aW9uICkge1xyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Y29uc3QgZnJvbVBhbGV0dGUgPSB0aGlzLmJ1aWxkZXI/LnBhbGV0dGVfdWxzPy5pbmNsdWRlcz8uKCBldnQuZnJvbSApID09PSB0cnVlO1xyXG5cclxuXHRcdFx0aWYgKCAhIGZyb21QYWxldHRlICkge1xyXG5cdFx0XHRcdC8vIENhbnZhcyAtPiBjYW52YXMgbW92ZTogRE8gTk9UIHJlYnVpbGQvcmVtb3ZlOyBwcmVzZXJ2ZSBjaGlsZHJlbi5cclxuXHRcdFx0XHR0aGlzLmJ1aWxkZXIuYWRkX292ZXJsYXlfdG9vbGJhcj8uKCBpdGVtICk7ICAgICAgICAgICAgICAgICAgICAgICAvLyBlbnN1cmUgb3ZlcmxheSBleGlzdHNcclxuXHRcdFx0XHR0aGlzLmJ1aWxkZXIucGFnZXNfc2VjdGlvbnM/LmluaXRfYWxsX25lc3RlZF9zb3J0YWJsZXM/LiggaXRlbSApOyAvLyBlbnN1cmUgaW5uZXIgc29ydGFibGVzXHJcblxyXG5cdFx0XHRcdC8vIEVuc3VyZSBtZXRhZGF0YSBwcmVzZW50L3VwZGF0ZWRcclxuXHRcdFx0XHRpdGVtLmRhdGFzZXQudHlwZSAgICA9ICdzZWN0aW9uJztcclxuXHRcdFx0XHRjb25zdCBjb2xzICAgICAgICAgICA9IGl0ZW0ucXVlcnlTZWxlY3RvckFsbCggJzpzY29wZSA+IC53cGJjX2JmYl9fcm93ID4gLndwYmNfYmZiX19jb2x1bW4nICkubGVuZ3RoIHx8IDE7XHJcblx0XHRcdFx0aXRlbS5kYXRhc2V0LmNvbHVtbnMgPSBTdHJpbmcoIGNvbHMgKTtcclxuXHJcblx0XHRcdFx0Ly8gU2VsZWN0ICYgbm90aWZ5IHN1YnNjcmliZXJzIChsYXlvdXQvbWluIGd1YXJkcywgZXRjLilcclxuXHRcdFx0XHR0aGlzLmJ1aWxkZXIuc2VsZWN0X2ZpZWxkPy4oIGl0ZW0gKTtcclxuXHRcdFx0XHR0aGlzLmJ1aWxkZXIuYnVzPy5lbWl0Py4oIENvcmUuV1BCQ19CRkJfRXZlbnRzLlNUUlVDVFVSRV9DSEFOR0UsIHsgZWw6IGl0ZW0sIHJlYXNvbjogJ3NlY3Rpb24tbW92ZScgfSApO1xyXG5cdFx0XHRcdHRoaXMuYnVpbGRlci51c2FnZT8udXBkYXRlX3BhbGV0dGVfdWk/LigpO1xyXG5cdFx0XHRcdHJldHVybiB0cnVlOyAvLyBoYW5kbGVkLlxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBQYWxldHRlIC0+IGNhbnZhczogYnVpbGQgYSBicmFuZC1uZXcgc2VjdGlvbiB1c2luZyB0aGUgc2FtZSBwYXRoIGFzIHRoZSBkcm9wZG93bi9tZW51XHJcblx0XHRcdGNvbnN0IHRvICAgPSBldnQudG8/LmNsb3Nlc3Q/LiggJy53cGJjX2JmYl9fY29sdW1uLCAud3BiY19iZmJfX2Zvcm1fcHJldmlld19zZWN0aW9uX2NvbnRhaW5lcicgKSB8fCBldnQudG87XHJcblx0XHRcdGNvbnN0IGNvbHMgPSBwYXJzZUludCggZGF0YT8uY29sdW1ucyB8fCBpdGVtLmRhdGFzZXQuY29sdW1ucyB8fCAxLCAxMCApIHx8IDE7XHJcblxyXG5cdFx0XHQvLyBSZW1vdmUgdGhlIHBhbGV0dGUgY2xvbmUgcGxhY2Vob2xkZXIuXHJcblx0XHRcdGl0ZW0ucGFyZW50Tm9kZSAmJiBpdGVtLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIGl0ZW0gKTtcclxuXHJcblx0XHRcdC8vIENyZWF0ZSB0aGUgcmVhbCBzZWN0aW9uLlxyXG5cdFx0XHR0aGlzLmJ1aWxkZXIucGFnZXNfc2VjdGlvbnMuYWRkX3NlY3Rpb24oIHRvLCBjb2xzICk7XHJcblxyXG5cdFx0XHQvLyBJbnNlcnQgYXQgdGhlIHByZWNpc2UgZHJvcCBpbmRleC5cclxuXHRcdFx0Y29uc3Qgc2VjdGlvbiA9IHRvLmxhc3RFbGVtZW50Q2hpbGQ7IC8vIGFkZF9zZWN0aW9uIGFwcGVuZHMgdG8gZW5kLlxyXG5cdFx0XHRpZiAoIGV2dC5uZXdJbmRleCAhPSBudWxsICYmIGV2dC5uZXdJbmRleCA8IHRvLmNoaWxkcmVuLmxlbmd0aCAtIDEgKSB7XHJcblx0XHRcdFx0Y29uc3QgcmVmID0gdG8uY2hpbGRyZW5bZXZ0Lm5ld0luZGV4XSB8fCBudWxsO1xyXG5cdFx0XHRcdHRvLmluc2VydEJlZm9yZSggc2VjdGlvbiwgcmVmICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIEZpbmFsaXplOiBvdmVybGF5LCBzZWxlY3Rpb24sIGV2ZW50cywgdXNhZ2UgcmVmcmVzaC5cclxuXHRcdFx0dGhpcy5idWlsZGVyLmFkZF9vdmVybGF5X3Rvb2xiYXI/Liggc2VjdGlvbiApO1xyXG5cdFx0XHR0aGlzLmJ1aWxkZXIuc2VsZWN0X2ZpZWxkPy4oIHNlY3Rpb24gKTtcclxuXHRcdFx0dGhpcy5idWlsZGVyLmJ1cz8uZW1pdD8uKCBDb3JlLldQQkNfQkZCX0V2ZW50cy5GSUVMRF9BREQsIHtcclxuXHRcdFx0XHRlbCA6IHNlY3Rpb24sXHJcblx0XHRcdFx0aWQgOiBzZWN0aW9uLmRhdGFzZXQuaWQsXHJcblx0XHRcdFx0dWlkOiBzZWN0aW9uLmRhdGFzZXQudWlkXHJcblx0XHRcdH0gKTtcclxuXHRcdFx0dGhpcy5idWlsZGVyLnVzYWdlPy51cGRhdGVfcGFsZXR0ZV91aT8uKCk7XHJcblxyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIERlc3Ryb3kgYWxsIFNvcnRhYmxlIGluc3RhbmNlcyBjcmVhdGVkIGJ5IHRoaXMgbWFuYWdlci5cclxuXHRcdCAqXHJcblx0XHQgKiBAcmV0dXJucyB7dm9pZH1cclxuXHRcdCAqL1xyXG5cdFx0ZGVzdHJveUFsbCgpIHtcclxuXHRcdFx0dGhpcy5fY29udGFpbmVycy5mb3JFYWNoKCAoIGVsICkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IGluc3QgPSBTb3J0YWJsZS5nZXQ/LiggZWwgKTtcclxuXHRcdFx0XHRpZiAoIGluc3QgKSB7XHJcblx0XHRcdFx0XHRpbnN0LmRlc3Ryb3koKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gKTtcclxuXHRcdFx0dGhpcy5fY29udGFpbmVycy5jbGVhcigpO1xyXG5cdFx0fVxyXG5cdH07XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNtYWxsIERPTSBjb250cmFjdCBhbmQgcmVuZGVyZXIgaGVscGVyXHJcblx0ICpcclxuXHQgKiBAdHlwZSB7UmVhZG9ubHk8e1xyXG5cdCAqICAgICAgICAgICAgICAgICAgU0VMRUNUT1JTOiB7cGFnZVBhbmVsOiBzdHJpbmcsIGZpZWxkOiBzdHJpbmcsIHZhbGlkRmllbGQ6IHN0cmluZywgc2VjdGlvbjogc3RyaW5nLCBjb2x1bW46XHJcblx0ICogICAgIHN0cmluZywgcm93OiBzdHJpbmcsIG92ZXJsYXk6IHN0cmluZ30sIENMQVNTRVM6IHtzZWxlY3RlZDogc3RyaW5nfSwgQVRUUjoge2lkOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgaHRtbElkOlxyXG5cdCAqICAgICBzdHJpbmcsIHVzYWdlS2V5OiBzdHJpbmcsIHVpZDogc3RyaW5nfX1cclxuXHQgKiAgICAgICAgPn1cclxuXHQgKi9cclxuXHRDb3JlLldQQkNfQkZCX0RPTSA9IE9iamVjdC5mcmVlemUoIHtcclxuXHRcdFNFTEVDVE9SUzoge1xyXG5cdFx0XHRwYWdlUGFuZWwgOiAnLndwYmNfYmZiX19wYW5lbC0tcHJldmlldycsXHJcblx0XHRcdGZpZWxkICAgICA6ICcud3BiY19iZmJfX2ZpZWxkJyxcclxuXHRcdFx0dmFsaWRGaWVsZDogJy53cGJjX2JmYl9fZmllbGQ6bm90KC5pcy1pbnZhbGlkKScsXHJcblx0XHRcdHNlY3Rpb24gICA6ICcud3BiY19iZmJfX3NlY3Rpb24nLFxyXG5cdFx0XHRjb2x1bW4gICAgOiAnLndwYmNfYmZiX19jb2x1bW4nLFxyXG5cdFx0XHRyb3cgICAgICAgOiAnLndwYmNfYmZiX19yb3cnLFxyXG5cdFx0XHRvdmVybGF5ICAgOiAnLndwYmNfYmZiX19vdmVybGF5LWNvbnRyb2xzJ1xyXG5cdFx0fSxcclxuXHRcdENMQVNTRVMgIDoge1xyXG5cdFx0XHRzZWxlY3RlZDogJ2lzLXNlbGVjdGVkJ1xyXG5cdFx0fSxcclxuXHRcdEFUVFIgICAgIDoge1xyXG5cdFx0XHRpZCAgICAgIDogJ2RhdGEtaWQnLFxyXG5cdFx0XHRuYW1lICAgIDogJ2RhdGEtbmFtZScsXHJcblx0XHRcdGh0bWxJZCAgOiAnZGF0YS1odG1sX2lkJyxcclxuXHRcdFx0dXNhZ2VLZXk6ICdkYXRhLXVzYWdlX2tleScsXHJcblx0XHRcdHVpZCAgICAgOiAnZGF0YS11aWQnXHJcblx0XHR9XHJcblx0fSApO1xyXG5cclxuXHRDb3JlLldQQkNfRm9ybV9CdWlsZGVyX0hlbHBlciA9IGNsYXNzIHtcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIENyZWF0ZSBhbiBIVE1MIGVsZW1lbnQuXHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IHRhZyAtIEhUTUwgdGFnIG5hbWUuXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gW2NsYXNzX25hbWU9JyddIC0gT3B0aW9uYWwgQ1NTIGNsYXNzIG5hbWUuXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gW2lubmVyX2h0bWw9JyddIC0gT3B0aW9uYWwgaW5uZXJIVE1MLlxyXG5cdFx0ICogQHJldHVybnMge0hUTUxFbGVtZW50fSBDcmVhdGVkIGVsZW1lbnQuXHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBjcmVhdGVfZWxlbWVudCggdGFnLCBjbGFzc19uYW1lID0gJycsIGlubmVyX2h0bWwgPSAnJyApIHtcclxuXHRcdFx0Y29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCB0YWcgKTtcclxuXHRcdFx0aWYgKCBjbGFzc19uYW1lICkge1xyXG5cdFx0XHRcdGVsLmNsYXNzTmFtZSA9IGNsYXNzX25hbWU7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKCBpbm5lcl9odG1sICkge1xyXG5cdFx0XHRcdGVsLmlubmVySFRNTCA9IGlubmVyX2h0bWw7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIGVsO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogU2V0IG11bHRpcGxlIGBkYXRhLSpgIGF0dHJpYnV0ZXMgb24gYSBnaXZlbiBlbGVtZW50LlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsIC0gVGFyZ2V0IGVsZW1lbnQuXHJcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gZGF0YV9vYmogLSBLZXktdmFsdWUgcGFpcnMgZm9yIGRhdGEgYXR0cmlidXRlcy5cclxuXHRcdCAqIEByZXR1cm5zIHt2b2lkfVxyXG5cdFx0ICovXHJcblx0XHRzdGF0aWMgc2V0X2RhdGFfYXR0cmlidXRlcyggZWwsIGRhdGFfb2JqICkge1xyXG5cdFx0XHRPYmplY3QuZW50cmllcyggZGF0YV9vYmogKS5mb3JFYWNoKCAoIFsga2V5LCB2YWwgXSApID0+IHtcclxuXHRcdFx0XHQvLyBQcmV2aW91c2x5OiAyMDI1LTA5LTAxIDE3OjA5OlxyXG5cdFx0XHRcdC8vIGNvbnN0IHZhbHVlID0gKHR5cGVvZiB2YWwgPT09ICdvYmplY3QnKSA/IEpTT04uc3RyaW5naWZ5KCB2YWwgKSA6IHZhbDtcclxuXHRcdFx0XHQvL05ldzpcclxuXHRcdFx0XHRsZXQgdmFsdWU7XHJcblx0XHRcdFx0aWYgKCB0eXBlb2YgdmFsID09PSAnb2JqZWN0JyAmJiB2YWwgIT09IG51bGwgKSB7XHJcblx0XHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0XHR2YWx1ZSA9IEpTT04uc3RyaW5naWZ5KCB2YWwgKTtcclxuXHRcdFx0XHRcdH0gY2F0Y2gge1xyXG5cdFx0XHRcdFx0XHR2YWx1ZSA9ICcnO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHR2YWx1ZSA9IHZhbDtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGVsLnNldEF0dHJpYnV0ZSggJ2RhdGEtJyArIGtleSwgdmFsdWUgKTtcclxuXHRcdFx0fSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogR2V0IGFsbCBgZGF0YS0qYCBhdHRyaWJ1dGVzIGZyb20gYW4gZWxlbWVudCBhbmQgcGFyc2UgSlNPTiB3aGVyZSBwb3NzaWJsZS5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbCAtIEVsZW1lbnQgdG8gZXh0cmFjdCBkYXRhIGZyb20uXHJcblx0XHQgKiBAcmV0dXJucyB7T2JqZWN0fSBQYXJzZWQga2V5LXZhbHVlIG1hcCBvZiBkYXRhIGF0dHJpYnV0ZXMuXHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBnZXRfYWxsX2RhdGFfYXR0cmlidXRlcyggZWwgKSB7XHJcblx0XHRcdGNvbnN0IGRhdGEgPSB7fTtcclxuXHJcblx0XHRcdGlmICggISBlbCB8fCAhIGVsLmF0dHJpYnV0ZXMgKSB7XHJcblx0XHRcdFx0cmV0dXJuIGRhdGE7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdEFycmF5LmZyb20oIGVsLmF0dHJpYnV0ZXMgKS5mb3JFYWNoKFxyXG5cdFx0XHRcdCggYXR0ciApID0+IHtcclxuXHRcdFx0XHRcdGlmICggYXR0ci5uYW1lLnN0YXJ0c1dpdGgoICdkYXRhLScgKSApIHtcclxuXHRcdFx0XHRcdFx0Y29uc3Qga2V5ID0gYXR0ci5uYW1lLnJlcGxhY2UoIC9eZGF0YS0vLCAnJyApO1xyXG5cdFx0XHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0XHRcdGRhdGFba2V5XSA9IEpTT04ucGFyc2UoIGF0dHIudmFsdWUgKTtcclxuXHRcdFx0XHRcdFx0fSBjYXRjaCAoIGUgKSB7XHJcblx0XHRcdFx0XHRcdFx0ZGF0YVtrZXldID0gYXR0ci52YWx1ZTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0KTtcclxuXHJcblx0XHRcdC8vIE9ubHkgZGVmYXVsdCB0aGUgbGFiZWwgaWYgaXQncyB0cnVseSBhYnNlbnQgKHVuZGVmaW5lZC9udWxsKSwgbm90IHdoZW4gaXQncyBhbiBlbXB0eSBzdHJpbmcuXHJcblx0XHRcdGNvbnN0IGhhc0V4cGxpY2l0TGFiZWwgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoIGRhdGEsICdsYWJlbCcgKTtcclxuXHRcdFx0aWYgKCAhIGhhc0V4cGxpY2l0TGFiZWwgJiYgZGF0YS5pZCApIHtcclxuXHRcdFx0XHRkYXRhLmxhYmVsID0gZGF0YS5pZC5jaGFyQXQoIDAgKS50b1VwcGVyQ2FzZSgpICsgZGF0YS5pZC5zbGljZSggMSApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4gZGF0YTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFJlbmRlciBhIHNpbXBsZSBsYWJlbCArIHR5cGUgcHJldmlldyAodXNlZCBmb3IgdW5rbm93biBvciBmYWxsYmFjayBmaWVsZHMpLlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBmaWVsZF9kYXRhIC0gRmllbGQgZGF0YSBvYmplY3QuXHJcblx0XHQgKiBAcmV0dXJucyB7c3RyaW5nfSBIVE1MIGNvbnRlbnQuXHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyByZW5kZXJfZmllbGRfaW5uZXJfaHRtbCggZmllbGRfZGF0YSApIHtcclxuXHRcdFx0Ly8gTWFrZSB0aGUgZmFsbGJhY2sgcHJldmlldyByZXNwZWN0IGFuIGVtcHR5IGxhYmVsLlxyXG5cdFx0XHRjb25zdCBoYXNMYWJlbCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCggZmllbGRfZGF0YSwgJ2xhYmVsJyApO1xyXG5cdFx0XHRjb25zdCBsYWJlbCAgICA9IGhhc0xhYmVsID8gU3RyaW5nKCBmaWVsZF9kYXRhLmxhYmVsICkgOiBTdHJpbmcoIGZpZWxkX2RhdGEuaWQgfHwgJyhubyBsYWJlbCknICk7XHJcblxyXG5cdFx0XHRjb25zdCB0eXBlICAgICAgICA9IFN0cmluZyggZmllbGRfZGF0YS50eXBlIHx8ICd1bmtub3duJyApO1xyXG5cdFx0XHRjb25zdCBpc19yZXF1aXJlZCA9IGZpZWxkX2RhdGEucmVxdWlyZWQgPT09IHRydWUgfHwgZmllbGRfZGF0YS5yZXF1aXJlZCA9PT0gJ3RydWUnIHx8IGZpZWxkX2RhdGEucmVxdWlyZWQgPT09IDEgfHwgZmllbGRfZGF0YS5yZXF1aXJlZCA9PT0gJzEnO1xyXG5cclxuXHRcdFx0Y29uc3Qgd3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdkaXYnICk7XHJcblxyXG5cdFx0XHRjb25zdCBzcGFuTGFiZWwgICAgICAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnc3BhbicgKTtcclxuXHRcdFx0c3BhbkxhYmVsLmNsYXNzTmFtZSAgID0gJ3dwYmNfYmZiX19maWVsZC1sYWJlbCc7XHJcblx0XHRcdHNwYW5MYWJlbC50ZXh0Q29udGVudCA9IGxhYmVsICsgKGlzX3JlcXVpcmVkID8gJyAqJyA6ICcnKTtcclxuXHRcdFx0d3JhcHBlci5hcHBlbmRDaGlsZCggc3BhbkxhYmVsICk7XHJcblxyXG5cdFx0XHRjb25zdCBzcGFuVHlwZSAgICAgICA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdzcGFuJyApO1xyXG5cdFx0XHRzcGFuVHlwZS5jbGFzc05hbWUgICA9ICd3cGJjX2JmYl9fZmllbGQtdHlwZSc7XHJcblx0XHRcdHNwYW5UeXBlLnRleHRDb250ZW50ID0gdHlwZTtcclxuXHRcdFx0d3JhcHBlci5hcHBlbmRDaGlsZCggc3BhblR5cGUgKTtcclxuXHJcblx0XHRcdHJldHVybiB3cmFwcGVyLmlubmVySFRNTDtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIERlYm91bmNlIGEgZnVuY3Rpb24uXHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gLSBGdW5jdGlvbiB0byBkZWJvdW5jZS5cclxuXHRcdCAqIEBwYXJhbSB7bnVtYmVyfSB3YWl0IC0gRGVsYXkgaW4gbXMuXHJcblx0XHQgKiBAcmV0dXJucyB7RnVuY3Rpb259IERlYm91bmNlZCBmdW5jdGlvbi5cclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIGRlYm91bmNlKCBmbiwgd2FpdCA9IDEyMCApIHtcclxuXHRcdFx0bGV0IHQgPSBudWxsO1xyXG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gZGVib3VuY2VkKCAuLi5hcmdzICkge1xyXG5cdFx0XHRcdGlmICggdCApIHtcclxuXHRcdFx0XHRcdGNsZWFyVGltZW91dCggdCApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHR0ID0gc2V0VGltZW91dCggKCkgPT4gZm4uYXBwbHkoIHRoaXMsIGFyZ3MgKSwgd2FpdCApO1xyXG5cdFx0XHR9O1xyXG5cdFx0fVxyXG5cclxuXHR9O1xyXG5cclxuXHQvLyBSZW5kZXJlciByZWdpc3RyeS4gQWxsb3dzIGxhdGUgcmVnaXN0cmF0aW9uIGFuZCBhdm9pZHMgdGlnaHQgY291cGxpbmcgdG8gYSBnbG9iYWwgbWFwLlxyXG5cdENvcmUuV1BCQ19CRkJfRmllbGRfUmVuZGVyZXJfUmVnaXN0cnkgPSAoZnVuY3Rpb24gKCkge1xyXG5cdFx0Y29uc3QgbWFwID0gbmV3IE1hcCgpO1xyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0cmVnaXN0ZXIoIHR5cGUsIENsYXNzUmVmICkge1xyXG5cdFx0XHRcdG1hcC5zZXQoIFN0cmluZyggdHlwZSApLCBDbGFzc1JlZiApO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRnZXQoIHR5cGUgKSB7XHJcblx0XHRcdFx0cmV0dXJuIG1hcC5nZXQoIFN0cmluZyggdHlwZSApICk7XHJcblx0XHRcdH1cclxuXHRcdH07XHJcblx0fSkoKTtcclxuXHJcbn0oIHdpbmRvdyApKTtcclxuIiwiLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbi8vID09IEZpbGUgIC9pbmNsdWRlcy9wYWdlLWZvcm0tYnVpbGRlci9fb3V0L2NvcmUvYmZiLWZpZWxkcy5qcyA9PSB8IDIwMjUtMDktMTAgMTU6NDdcclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbihmdW5jdGlvbiAoIHcgKSB7XHJcblx0J3VzZSBzdHJpY3QnO1xyXG5cclxuXHQvLyBTaW5nbGUgZ2xvYmFsIG5hbWVzcGFjZSAoaWRlbXBvdGVudCAmIGxvYWQtb3JkZXIgc2FmZSkuXHJcblx0Y29uc3QgQ29yZSA9ICggdy5XUEJDX0JGQl9Db3JlID0gdy5XUEJDX0JGQl9Db3JlIHx8IHt9ICk7XHJcblx0Y29uc3QgVUkgICA9ICggQ29yZS5VSSA9IENvcmUuVUkgfHwge30gKTtcclxuXHJcblx0LyoqXHJcblx0ICogQmFzZSBjbGFzcyBmb3IgZmllbGQgcmVuZGVyZXJzIChzdGF0aWMtb25seSBjb250cmFjdCkuXHJcblx0ICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cdCAqIENvbnRyYWN0IGV4cG9zZWQgdG8gdGhlIGJ1aWxkZXIgKHN0YXRpYyBtZXRob2RzIG9uIHRoZSBDTEFTUyBpdHNlbGYpOlxyXG5cdCAqICAgLSByZW5kZXIoZWwsIGRhdGEsIGN0eCkgICAgICAgICAgICAgIC8vIFJFUVVJUkVEXHJcblx0ICogICAtIG9uX2ZpZWxkX2Ryb3AoZGF0YSwgZWwsIG1ldGEpICAgICAgLy8gT1BUSU9OQUwgKGRlZmF1bHQgcHJvdmlkZWQpXHJcblx0ICpcclxuXHQgKiBIZWxwZXJzIGZvciBzdWJjbGFzc2VzOlxyXG5cdCAqICAgLSBnZXRfZGVmYXVsdHMoKSAgICAgLT4gcGVyLWZpZWxkIGRlZmF1bHRzIChNVVNUIG92ZXJyaWRlIGluIHN1YmNsYXNzIHRvIHNldCB0eXBlL2xhYmVsKVxyXG5cdCAqICAgLSBub3JtYWxpemVfZGF0YShkKSAgLT4gc2hhbGxvdyBtZXJnZSB3aXRoIGRlZmF1bHRzXHJcblx0ICogICAtIGdldF90ZW1wbGF0ZShpZCkgICAtPiBwZXItaWQgY2FjaGVkIHdwLnRlbXBsYXRlIGNvbXBpbGVyXHJcblx0ICpcclxuXHQgKiBTdWJjbGFzcyB1c2FnZTpcclxuXHQgKiAgIGNsYXNzIFdQQkNfQkZCX0ZpZWxkX1RleHQgZXh0ZW5kcyBDb3JlLldQQkNfQkZCX0ZpZWxkX0Jhc2UgeyBzdGF0aWMgZ2V0X2RlZmF1bHRzKCl7IC4uLiB9IH1cclxuXHQgKiAgIFdQQkNfQkZCX0ZpZWxkX1RleHQudGVtcGxhdGVfaWQgPSAnd3BiYy1iZmItZmllbGQtdGV4dCc7XHJcblx0ICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cdCAqL1xyXG5cdENvcmUuV1BCQ19CRkJfRmllbGRfQmFzZSA9IGNsYXNzIHtcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIERlZmF1bHQgZmllbGQgZGF0YSAoZ2VuZXJpYyBiYXNlbGluZSkuXHJcblx0XHQgKiBTdWJjbGFzc2VzIE1VU1Qgb3ZlcnJpZGUgdG8gcHJvdmlkZSB7IHR5cGUsIGxhYmVsIH0gYXBwcm9wcmlhdGUgZm9yIHRoZSBmaWVsZC5cclxuXHRcdCAqIEByZXR1cm5zIHtPYmplY3R9XHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBnZXRfZGVmYXVsdHMoKSB7XHJcblx0XHRcdHJldHVybiB7XHJcblx0XHRcdFx0dHlwZSAgICAgICAgOiAnZmllbGQnLFxyXG5cdFx0XHRcdGxhYmVsICAgICAgIDogJ0ZpZWxkJyxcclxuXHRcdFx0XHRuYW1lICAgICAgICA6ICdmaWVsZCcsXHJcblx0XHRcdFx0aHRtbF9pZCAgICAgOiAnJyxcclxuXHRcdFx0XHRwbGFjZWhvbGRlciA6ICcnLFxyXG5cdFx0XHRcdHJlcXVpcmVkICAgIDogZmFsc2UsXHJcblx0XHRcdFx0bWlubGVuZ3RoICAgOiAnJyxcclxuXHRcdFx0XHRtYXhsZW5ndGggICA6ICcnLFxyXG5cdFx0XHRcdHBhdHRlcm4gICAgIDogJycsXHJcblx0XHRcdFx0Y3NzY2xhc3MgICAgOiAnJyxcclxuXHRcdFx0XHRoZWxwICAgICAgICA6ICcnXHJcblx0XHRcdH07XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBTaGFsbG93LW1lcmdlIGluY29taW5nIGRhdGEgd2l0aCBkZWZhdWx0cy5cclxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhXHJcblx0XHQgKiBAcmV0dXJucyB7T2JqZWN0fVxyXG5cdFx0ICovXHJcblx0XHRzdGF0aWMgbm9ybWFsaXplX2RhdGEoIGRhdGEgKSB7XHJcblx0XHRcdHZhciBkICAgICAgICA9IGRhdGEgfHwge307XHJcblx0XHRcdHZhciBkZWZhdWx0cyA9IHRoaXMuZ2V0X2RlZmF1bHRzKCk7XHJcblx0XHRcdHZhciBvdXQgICAgICA9IHt9O1xyXG5cdFx0XHR2YXIgaztcclxuXHJcblx0XHRcdGZvciAoIGsgaW4gZGVmYXVsdHMgKSB7XHJcblx0XHRcdFx0aWYgKCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoIGRlZmF1bHRzLCBrICkgKSB7XHJcblx0XHRcdFx0XHRvdXRba10gPSBkZWZhdWx0c1trXTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0Zm9yICggayBpbiBkICkge1xyXG5cdFx0XHRcdGlmICggT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKCBkLCBrICkgKSB7XHJcblx0XHRcdFx0XHRvdXRba10gPSBkW2tdO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gb3V0O1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQ29tcGlsZSBhbmQgY2FjaGUgYSB3cC50ZW1wbGF0ZSBieSBpZCAocGVyLWlkIGNhY2hlKS5cclxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSB0ZW1wbGF0ZV9pZFxyXG5cdFx0ICogQHJldHVybnMge0Z1bmN0aW9ufG51bGx9XHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBnZXRfdGVtcGxhdGUodGVtcGxhdGVfaWQpIHtcclxuXHJcblx0XHRcdC8vIEFjY2VwdCBlaXRoZXIgXCJ3cGJjLWJmYi1maWVsZC10ZXh0XCIgb3IgXCJ0bXBsLXdwYmMtYmZiLWZpZWxkLXRleHRcIi5cclxuXHRcdFx0aWYgKCAhIHRlbXBsYXRlX2lkIHx8ICEgd2luZG93LndwIHx8ICEgd3AudGVtcGxhdGUgKSB7XHJcblx0XHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHRcdH1cclxuXHRcdFx0Y29uc3QgZG9tSWQgPSB0ZW1wbGF0ZV9pZC5zdGFydHNXaXRoKCAndG1wbC0nICkgPyB0ZW1wbGF0ZV9pZCA6ICgndG1wbC0nICsgdGVtcGxhdGVfaWQpO1xyXG5cdFx0XHRpZiAoICEgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIGRvbUlkICkgKSB7XHJcblx0XHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICggISBDb3JlLl9fYmZiX3RwbF9jYWNoZV9tYXAgKSB7XHJcblx0XHRcdFx0Q29yZS5fX2JmYl90cGxfY2FjaGVfbWFwID0ge307XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIE5vcm1hbGl6ZSBpZCBmb3IgdGhlIGNvbXBpbGVyICYgY2FjaGUuIC8vIHdwLnRlbXBsYXRlIGV4cGVjdHMgaWQgV0lUSE9VVCB0aGUgXCJ0bXBsLVwiIHByZWZpeCAhXHJcblx0XHRcdGNvbnN0IGtleSA9IHRlbXBsYXRlX2lkLnJlcGxhY2UoIC9edG1wbC0vLCAnJyApO1xyXG5cdFx0XHRpZiAoIENvcmUuX19iZmJfdHBsX2NhY2hlX21hcFtrZXldICkge1xyXG5cdFx0XHRcdHJldHVybiBDb3JlLl9fYmZiX3RwbF9jYWNoZV9tYXBba2V5XTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Y29uc3QgY29tcGlsZXIgPSB3cC50ZW1wbGF0ZSgga2V5ICk7ICAgICAvLyA8LS0gbm9ybWFsaXplZCBpZCBoZXJlXHJcblx0XHRcdGlmICggY29tcGlsZXIgKSB7XHJcblx0XHRcdFx0Q29yZS5fX2JmYl90cGxfY2FjaGVfbWFwW2tleV0gPSBjb21waWxlcjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cmV0dXJuIGNvbXBpbGVyO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogUkVRVUlSRUQ6IHJlbmRlciBwcmV2aWV3IGludG8gaG9zdCBlbGVtZW50IChmdWxsIHJlZHJhdzsgaWRlbXBvdGVudCkuXHJcblx0XHQgKiBTdWJjbGFzc2VzIHNob3VsZCBzZXQgc3RhdGljIGB0ZW1wbGF0ZV9pZGAgdG8gYSB2YWxpZCB3cC50ZW1wbGF0ZSBpZC5cclxuXHRcdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsXHJcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gICAgICBkYXRhXHJcblx0XHQgKiBAcGFyYW0ge3ttb2RlPzpzdHJpbmcsYnVpbGRlcj86YW55LHRwbD86RnVuY3Rpb24sc2FuaXQ/OmFueX19IGN0eFxyXG5cdFx0ICogQHJldHVybnMge3ZvaWR9XHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyByZW5kZXIoIGVsLCBkYXRhLCBjdHggKSB7XHJcblx0XHRcdGlmICggISBlbCApIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHZhciBjb21waWxlID0gdGhpcy5nZXRfdGVtcGxhdGUoIHRoaXMudGVtcGxhdGVfaWQgKTtcclxuXHRcdFx0dmFyIGQgICAgICAgPSB0aGlzLm5vcm1hbGl6ZV9kYXRhKCBkYXRhICk7XHJcblxyXG5cdFx0XHR2YXIgcyA9IChjdHggJiYgY3R4LnNhbml0KSA/IGN0eC5zYW5pdCA6IENvcmUuV1BCQ19CRkJfU2FuaXRpemU7XHJcblxyXG5cdFx0XHQvLyBTYW5pdGl6ZSBjcml0aWNhbCBhdHRyaWJ1dGVzIGJlZm9yZSB0ZW1wbGF0aW5nLlxyXG5cdFx0XHRpZiAoIHMgKSB7XHJcblx0XHRcdFx0ZC5odG1sX2lkID0gZC5odG1sX2lkID8gcy5zYW5pdGl6ZV9odG1sX2lkKCBTdHJpbmcoIGQuaHRtbF9pZCApICkgOiAnJztcclxuXHRcdFx0XHRkLm5hbWUgICAgPSBzLnNhbml0aXplX2h0bWxfbmFtZSggU3RyaW5nKCBkLm5hbWUgfHwgZC5pZCB8fCAnZmllbGQnICkgKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRkLmh0bWxfaWQgPSBkLmh0bWxfaWQgPyBTdHJpbmcoIGQuaHRtbF9pZCApIDogJyc7XHJcblx0XHRcdFx0ZC5uYW1lICAgID0gU3RyaW5nKCBkLm5hbWUgfHwgZC5pZCB8fCAnZmllbGQnICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIEZhbGwgYmFjayB0byBnZW5lcmljIHByZXZpZXcgaWYgdGVtcGxhdGUgbm90IGF2YWlsYWJsZS5cclxuXHRcdFx0aWYgKCBjb21waWxlICkge1xyXG5cdFx0XHRcdGVsLmlubmVySFRNTCA9IGNvbXBpbGUoIGQgKTtcclxuXHJcblx0XHRcdFx0Ly8gQWZ0ZXIgcmVuZGVyLCBzZXQgYXR0cmlidXRlIHZhbHVlcyB2aWEgRE9NIHNvIHF1b3Rlcy9uZXdsaW5lcyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkuXHJcblx0XHRcdFx0Y29uc3QgaW5wdXQgPSBlbC5xdWVyeVNlbGVjdG9yKCAnaW5wdXQsIHRleHRhcmVhLCBzZWxlY3QnICk7XHJcblx0XHRcdFx0aWYgKCBpbnB1dCApIHtcclxuXHRcdFx0XHRcdGlmICggZC5wbGFjZWhvbGRlciAhPSBudWxsICkgaW5wdXQuc2V0QXR0cmlidXRlKCAncGxhY2Vob2xkZXInLCBTdHJpbmcoIGQucGxhY2Vob2xkZXIgKSApO1xyXG5cdFx0XHRcdFx0aWYgKCBkLnRpdGxlICE9IG51bGwgKSBpbnB1dC5zZXRBdHRyaWJ1dGUoICd0aXRsZScsIFN0cmluZyggZC50aXRsZSApICk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRlbC5pbm5lckhUTUwgPSBDb3JlLldQQkNfRm9ybV9CdWlsZGVyX0hlbHBlci5yZW5kZXJfZmllbGRfaW5uZXJfaHRtbCggZCApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRlbC5kYXRhc2V0LnR5cGUgPSBkLnR5cGUgfHwgJ2ZpZWxkJztcclxuXHRcdFx0ZWwuc2V0QXR0cmlidXRlKCAnZGF0YS1sYWJlbCcsIChkLmxhYmVsICE9IG51bGwgPyBTdHJpbmcoIGQubGFiZWwgKSA6ICcnKSApOyAvLyBhbGxvdyBcIlwiLlxyXG5cdFx0fVxyXG5cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIE9QVElPTkFMIGhvb2sgZXhlY3V0ZWQgYWZ0ZXIgZmllbGQgaXMgZHJvcHBlZC9sb2FkZWQvcHJldmlldy5cclxuXHRcdCAqIERlZmF1bHQgZXh0ZW5kZWQ6XHJcblx0XHQgKiAtIE9uIGZpcnN0IGRyb3A6IHN0YW1wIGRlZmF1bHQgbGFiZWwgKGV4aXN0aW5nIGJlaGF2aW9yKSBhbmQgbWFyayBmaWVsZCBhcyBcImZyZXNoXCIgZm9yIGF1dG8tbmFtZS5cclxuXHRcdCAqIC0gT24gbG9hZDogbWFyayBhcyBsb2FkZWQgc28gbGF0ZXIgbGFiZWwgZWRpdHMgZG8gbm90IHJlbmFtZSB0aGUgc2F2ZWQgbmFtZS5cclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIG9uX2ZpZWxkX2Ryb3AoZGF0YSwgZWwsIG1ldGEpIHtcclxuXHJcblx0XHRcdGNvbnN0IGNvbnRleHQgPSAobWV0YSAmJiBtZXRhLmNvbnRleHQpID8gU3RyaW5nKCBtZXRhLmNvbnRleHQgKSA6ICcnO1xyXG5cclxuXHRcdFx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHRcdFx0Ly8gTkVXOiBTZWVkIGRlZmF1bHQgXCJoZWxwXCIgKGFuZCBrZWVwIGl0IGluIFN0cnVjdHVyZSkgZm9yIGFsbCBmaWVsZCBwYWNrcyB0aGF0IGRlZmluZSBpdC5cclxuXHRcdFx0Ly8gVGhpcyBmaXhlcyB0aGUgbWlzbWF0Y2ggd2hlcmU6XHJcblx0XHRcdC8vICAgLSBVSSBzaG93cyBkZWZhdWx0IGhlbHAgdmlhIG5vcm1hbGl6ZV9kYXRhKCkgLyB0ZW1wbGF0ZXNcclxuXHRcdFx0Ly8gICAtIGJ1dCBnZXRfc3RydWN0dXJlKCkgLyBleHBvcnRlcnMgc2VlIGBoZWxwYCBhcyB1bmRlZmluZWQvZW1wdHkuXHJcblx0XHRcdC8vXHJcblx0XHRcdC8vIEJlaGF2aW9yOlxyXG5cdFx0XHQvLyAgIC0gUnVucyBPTkxZIG9uIGluaXRpYWwgZHJvcCAoY29udGV4dCA9PT0gJ2Ryb3AnKS5cclxuXHRcdFx0Ly8gICAtIElmIGdldF9kZWZhdWx0cygpIGV4cG9zZXMgYSBub24tZW1wdHkgXCJoZWxwXCIsIGFuZCBkYXRhLmhlbHAgaXNcclxuXHRcdFx0Ly8gICAgIG1pc3NpbmcgLyBudWxsIC8gZW1wdHkgc3RyaW5nIC0+IHdlIHBlcnNpc3QgdGhlIGRlZmF1bHQgaW50byBgZGF0YWBcclxuXHRcdFx0Ly8gICAgIGFuZCBub3RpZnkgU3RydWN0dXJlIHNvIGV4cG9ydHMgc2VlIGl0LlxyXG5cdFx0XHQvLyAgIC0gT24gXCJsb2FkXCIgd2UgZG8gbm90aGluZywgc28gZXhpc3RpbmcgZm9ybXMgd2hlcmUgdXNlciAqY2xlYXJlZCpcclxuXHRcdFx0Ly8gICAgIGhlbHAgd2lsbCBub3QgYmUgb3ZlcnJpZGRlbi5cclxuXHRcdFx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHRcdFx0aWYgKCBjb250ZXh0ID09PSAnZHJvcCcgJiYgZGF0YSApIHtcclxuXHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0Y29uc3QgZGVmcyA9ICh0eXBlb2YgdGhpcy5nZXRfZGVmYXVsdHMgPT09ICdmdW5jdGlvbicpID8gdGhpcy5nZXRfZGVmYXVsdHMoKSA6IG51bGw7XHJcblx0XHRcdFx0XHRpZiAoIGRlZnMgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKCBkZWZzLCAnaGVscCcgKSApIHtcclxuXHRcdFx0XHRcdFx0Y29uc3QgY3VycmVudCAgICA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCggZGF0YSwgJ2hlbHAnICkgPyBkYXRhLmhlbHAgOiB1bmRlZmluZWQ7XHJcblx0XHRcdFx0XHRcdGNvbnN0IGhhc1ZhbHVlICAgPSAoY3VycmVudCAhPT0gdW5kZWZpbmVkICYmIGN1cnJlbnQgIT09IG51bGwgJiYgU3RyaW5nKCBjdXJyZW50ICkgIT09ICcnKTtcclxuXHRcdFx0XHRcdFx0Y29uc3QgZGVmYXVsdFZhbCA9IGRlZnMuaGVscDtcclxuXHJcblx0XHRcdFx0XHRcdGlmICggISBoYXNWYWx1ZSAmJiBkZWZhdWx0VmFsICE9IG51bGwgJiYgU3RyaW5nKCBkZWZhdWx0VmFsICkgIT09ICcnICkge1xyXG5cdFx0XHRcdFx0XHRcdC8vIDEpIHBlcnNpc3QgaW50byBkYXRhIG9iamVjdCAodXNlZCBieSBTdHJ1Y3R1cmUpLlxyXG5cdFx0XHRcdFx0XHRcdGRhdGEuaGVscCA9IGRlZmF1bHRWYWw7XHJcblxyXG5cdFx0XHRcdFx0XHRcdC8vIDIpIG1pcnJvciBpbnRvIGRhdGFzZXQgKGZvciBhbnkgRE9NLWJhc2VkIGNvbnN1bWVycykuXHJcblx0XHRcdFx0XHRcdFx0aWYgKCBlbCApIHtcclxuXHRcdFx0XHRcdFx0XHRcdGVsLmRhdGFzZXQuaGVscCA9IFN0cmluZyggZGVmYXVsdFZhbCApO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdC8vIDMpIG5vdGlmeSBTdHJ1Y3R1cmUgLyBsaXN0ZW5lcnMgKGlmIGF2YWlsYWJsZSkuXHJcblx0XHRcdFx0XHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRDb3JlLlN0cnVjdHVyZT8udXBkYXRlX2ZpZWxkX3Byb3A/LiggZWwsICdoZWxwJywgZGVmYXVsdFZhbCApO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRlbC5kaXNwYXRjaEV2ZW50KFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5ldyBDdXN0b21FdmVudCggJ3dwYmNfYmZiX2ZpZWxkX2RhdGFfY2hhbmdlZCcsIHsgYnViYmxlczogdHJ1ZSwgZGV0YWlsIDogeyBrZXk6ICdoZWxwJywgdmFsdWU6IGRlZmF1bHRWYWwgfSB9IClcclxuXHRcdFx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKCBfaW5uZXIgKSB7fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0gY2F0Y2ggKCBfZSApIHt9XHJcblx0XHRcdH1cclxuXHRcdFx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0XHRcdGlmICggY29udGV4dCA9PT0gJ2Ryb3AnICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoIGRhdGEsICdsYWJlbCcgKSApIHtcclxuXHRcdFx0XHRjb25zdCBkZWZzID0gdGhpcy5nZXRfZGVmYXVsdHMoKTtcclxuXHRcdFx0XHRkYXRhLmxhYmVsID0gZGVmcy5sYWJlbCB8fCAnRmllbGQnO1xyXG5cdFx0XHRcdGVsLnNldEF0dHJpYnV0ZSggJ2RhdGEtbGFiZWwnLCBkYXRhLmxhYmVsICk7XHJcblx0XHRcdH1cclxuXHRcdFx0Ly8gTWFyayBwcm92ZW5hbmNlIGZsYWdzLlxyXG5cdFx0XHRpZiAoIGNvbnRleHQgPT09ICdkcm9wJyApIHtcclxuXHRcdFx0XHRlbC5kYXRhc2V0LmZyZXNoICAgICAgPSAnMSc7ICAgLy8gY2FuIGF1dG8tbmFtZSBvbiBmaXJzdCBsYWJlbCBlZGl0LlxyXG5cdFx0XHRcdGVsLmRhdGFzZXQuYXV0b25hbWUgICA9ICcxJztcclxuXHRcdFx0XHRlbC5kYXRhc2V0Lndhc19sb2FkZWQgPSAnMCc7XHJcblx0XHRcdFx0Ly8gU2VlZCBhIHByb3Zpc2lvbmFsIHVuaXF1ZSBuYW1lIGltbWVkaWF0ZWx5LlxyXG5cdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHRjb25zdCBiID0gbWV0YT8uYnVpbGRlcjtcclxuXHRcdFx0XHRcdGlmICggYj8uaWQgJiYgKCFlbC5oYXNBdHRyaWJ1dGUoICdkYXRhLW5hbWUnICkgfHwgIWVsLmdldEF0dHJpYnV0ZSggJ2RhdGEtbmFtZScgKSkgKSB7XHJcblx0XHRcdFx0XHRcdGNvbnN0IFMgICAgPSBDb3JlLldQQkNfQkZCX1Nhbml0aXplO1xyXG5cdFx0XHRcdFx0XHRjb25zdCBiYXNlID0gUy5zYW5pdGl6ZV9odG1sX25hbWUoIGVsLmdldEF0dHJpYnV0ZSggJ2RhdGEtaWQnICkgfHwgZGF0YT8uaWQgfHwgZGF0YT8udHlwZSB8fCAnZmllbGQnICk7XHJcblx0XHRcdFx0XHRcdGNvbnN0IHVuaXEgPSBiLmlkLmVuc3VyZV91bmlxdWVfZmllbGRfbmFtZSggYmFzZSwgZWwgKTtcclxuXHRcdFx0XHRcdFx0ZWwuc2V0QXR0cmlidXRlKCAnZGF0YS1uYW1lJywgdW5pcSApO1xyXG5cdFx0XHRcdFx0XHRlbC5kYXRhc2V0Lm5hbWVfdXNlcl90b3VjaGVkID0gJzAnO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0gY2F0Y2ggKCBfICkge31cclxuXHJcblx0XHRcdH0gZWxzZSBpZiAoIGNvbnRleHQgPT09ICdsb2FkJyApIHtcclxuXHRcdFx0XHRlbC5kYXRhc2V0LmZyZXNoICAgICAgPSAnMCc7XHJcblx0XHRcdFx0ZWwuZGF0YXNldC5hdXRvbmFtZSAgID0gJzAnO1xyXG5cdFx0XHRcdGVsLmRhdGFzZXQud2FzX2xvYWRlZCA9ICcxJzsgICAvLyBuZXZlciByZW5hbWUgbmFtZXMgZm9yIGxvYWRlZCBmaWVsZHMuXHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyAtLS0gQXV0byBSZW5hbWUgXCJGcmVzaFwiIGZpZWxkLCAgb24gZW50ZXJpbmcgdGhlIG5ldyBMYWJlbCAtLS1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIENyZWF0ZSBhIGNvbnNlcnZhdGl2ZSBmaWVsZCBcIm5hbWVcIiBmcm9tIGEgaHVtYW4gbGFiZWwuXHJcblx0XHQgKiBVc2VzIHRoZSBzYW1lIGNvbnN0cmFpbnRzIGFzIHNhbml0aXplX2h0bWxfbmFtZSAobGV0dGVycy9kaWdpdHMvXy0gYW5kIGxlYWRpbmcgbGV0dGVyKS5cclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIG5hbWVfZnJvbV9sYWJlbChsYWJlbCkge1xyXG5cdFx0XHRjb25zdCBzID0gQ29yZS5XUEJDX0JGQl9TYW5pdGl6ZS5zYW5pdGl6ZV9odG1sX25hbWUoIFN0cmluZyggbGFiZWwgPz8gJycgKSApO1xyXG5cdFx0XHRyZXR1cm4gcy50b0xvd2VyQ2FzZSgpIHx8ICdmaWVsZCc7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBBdXRvLWZpbGwgZGF0YS1uYW1lIGZyb20gbGFiZWwgT05MWSBmb3IgZnJlc2hseSBkcm9wcGVkIGZpZWxkcyB0aGF0IHdlcmUgbm90IGVkaXRlZCB5ZXQuXHJcblx0XHQgKiAtIE5ldmVyIHJ1bnMgZm9yIHNlY3Rpb25zLlxyXG5cdFx0ICogLSBOZXZlciBydW5zIGZvciBsb2FkZWQvZXhpc3RpbmcgZmllbGRzLlxyXG5cdFx0ICogLSBTdG9wcyBhcyBzb29uIGFzIHVzZXIgZWRpdHMgdGhlIE5hbWUgbWFudWFsbHkuXHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHtXUEJDX0Zvcm1fQnVpbGRlcn0gYnVpbGRlclxyXG5cdFx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWwgIC0gLndwYmNfYmZiX19maWVsZCBlbGVtZW50XHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gbGFiZWxWYWxcclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIG1heWJlX2F1dG9uYW1lX2Zyb21fbGFiZWwoYnVpbGRlciwgZWwsIGxhYmVsVmFsKSB7XHJcblx0XHRcdGlmICggIWJ1aWxkZXIgfHwgIWVsICkgcmV0dXJuO1xyXG5cdFx0XHRpZiAoIGVsLmNsYXNzTGlzdC5jb250YWlucyggJ3dwYmNfYmZiX19zZWN0aW9uJyApICkgcmV0dXJuO1xyXG5cclxuXHRcdFx0Y29uc3QgYWxsb3dBdXRvID0gZWwuZGF0YXNldC5hdXRvbmFtZSA9PT0gJzEnO1xyXG5cclxuXHRcdFx0Y29uc3QgdXNlclRvdWNoZWQgPSBlbC5kYXRhc2V0Lm5hbWVfdXNlcl90b3VjaGVkID09PSAnMSc7XHJcblx0XHRcdGNvbnN0IGlzTG9hZGVkICAgID0gZWwuZGF0YXNldC53YXNfbG9hZGVkID09PSAnMSc7XHJcblxyXG5cdFx0XHRpZiAoICFhbGxvd0F1dG8gfHwgdXNlclRvdWNoZWQgfHwgaXNMb2FkZWQgKSByZXR1cm47XHJcblxyXG5cdFx0XHQvLyBPbmx5IG92ZXJyaWRlIHBsYWNlaG9sZGVyLXkgbmFtZXNcclxuXHRcdFx0Y29uc3QgUyA9IENvcmUuV1BCQ19CRkJfU2FuaXRpemU7XHJcblxyXG5cdFx0XHRjb25zdCBiYXNlICAgPSB0aGlzLm5hbWVfZnJvbV9sYWJlbCggbGFiZWxWYWwgKTtcclxuXHRcdFx0Y29uc3QgdW5pcXVlID0gYnVpbGRlci5pZC5lbnN1cmVfdW5pcXVlX2ZpZWxkX25hbWUoIGJhc2UsIGVsICk7XHJcblx0XHRcdGVsLnNldEF0dHJpYnV0ZSggJ2RhdGEtbmFtZScsIHVuaXF1ZSApO1xyXG5cclxuXHRcdFx0Y29uc3QgaW5zICAgICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ3dwYmNfYmZiX19pbnNwZWN0b3InICk7XHJcblx0XHRcdGNvbnN0IG5hbWVDdHJsID0gaW5zPy5xdWVyeVNlbGVjdG9yKCAnW2RhdGEtaW5zcGVjdG9yLWtleT1cIm5hbWVcIl0nICk7XHJcblx0XHRcdGlmICggbmFtZUN0cmwgJiYgJ3ZhbHVlJyBpbiBuYW1lQ3RybCAmJiBuYW1lQ3RybC52YWx1ZSAhPT0gdW5pcXVlICkgbmFtZUN0cmwudmFsdWUgPSB1bmlxdWU7XHJcblx0XHR9XHJcblxyXG5cclxuXHR9O1xyXG5cclxuXHQvKipcclxuXHQgKiBTZWxlY3RfQmFzZSAoc2hhcmVkIGJhc2UgZm9yIHNlbGVjdC1saWtlIHBhY2tzKVxyXG5cdCAqXHJcblx0ICogQHR5cGUge0NvcmUuV1BCQ19CRkJfU2VsZWN0X0Jhc2V9XHJcblx0ICovXHJcblx0Q29yZS5XUEJDX0JGQl9TZWxlY3RfQmFzZSA9IGNsYXNzIGV4dGVuZHMgQ29yZS5XUEJDX0JGQl9GaWVsZF9CYXNlIHtcclxuXHJcblx0XHRzdGF0aWMgdGVtcGxhdGVfaWQgICAgICAgICAgICA9IG51bGw7ICAgICAgICAgICAgICAgICAvLyBtYWluIHByZXZpZXcgdGVtcGxhdGUgaWRcclxuXHRcdHN0YXRpYyBvcHRpb25fcm93X3RlbXBsYXRlX2lkID0gJ3dwYmMtYmZiLWluc3BlY3Rvci1zZWxlY3Qtb3B0aW9uLXJvdyc7IC8vIHJvdyB0cGwgaWRcclxuXHRcdHN0YXRpYyBraW5kICAgICAgICAgICAgICAgICAgID0gJ3NlbGVjdCc7XHJcblx0XHRzdGF0aWMgX19yb290X3dpcmVkICAgICAgICAgICA9IGZhbHNlO1xyXG5cdFx0c3RhdGljIF9fcm9vdF9ub2RlICAgICAgICAgICAgPSBudWxsO1xyXG5cclxuXHRcdC8vIFNpbmdsZSBzb3VyY2Ugb2Ygc2VsZWN0b3JzIHVzZWQgYnkgdGhlIGluc3BlY3RvciBVSS5cclxuXHRcdHN0YXRpYyB1aSA9IHtcclxuXHRcdFx0bGlzdCAgIDogJy53cGJjX2JmYl9fb3B0aW9uc19saXN0JyxcclxuXHRcdFx0aG9sZGVyIDogJy53cGJjX2JmYl9fb3B0aW9uc19zdGF0ZVtkYXRhLWluc3BlY3Rvci1rZXk9XCJvcHRpb25zXCJdJyxcclxuXHRcdFx0cm93ICAgIDogJy53cGJjX2JmYl9fb3B0aW9uc19yb3cnLFxyXG5cdFx0XHRsYWJlbCAgOiAnLndwYmNfYmZiX19vcHQtbGFiZWwnLFxyXG5cdFx0XHR2YWx1ZSAgOiAnLndwYmNfYmZiX19vcHQtdmFsdWUnLFxyXG5cdFx0XHR0b2dnbGUgOiAnLndwYmNfYmZiX19vcHQtc2VsZWN0ZWQtY2hrJyxcclxuXHRcdFx0YWRkX2J0bjogJy5qcy1hZGQtb3B0aW9uJyxcclxuXHJcblx0XHRcdGRyYWdfaGFuZGxlICAgICAgOiAnLndwYmNfYmZiX19kcmFnLWhhbmRsZScsXHJcblx0XHRcdG11bHRpcGxlX2NoayAgICAgOiAnLmpzLW9wdC1tdWx0aXBsZVtkYXRhLWluc3BlY3Rvci1rZXk9XCJtdWx0aXBsZVwiXScsXHJcblx0XHRcdGRlZmF1bHRfdGV4dCAgICAgOiAnLmpzLWRlZmF1bHQtdmFsdWVbZGF0YS1pbnNwZWN0b3Ita2V5PVwiZGVmYXVsdF92YWx1ZVwiXScsXHJcblx0XHRcdHBsYWNlaG9sZGVyX2lucHV0OiAnLmpzLXBsYWNlaG9sZGVyW2RhdGEtaW5zcGVjdG9yLWtleT1cInBsYWNlaG9sZGVyXCJdJyxcclxuXHRcdFx0cGxhY2Vob2xkZXJfbm90ZSA6ICcuanMtcGxhY2Vob2xkZXItbm90ZScsXHJcblx0XHRcdHNpemVfaW5wdXQgICAgICAgOiAnLmluc3BlY3Rvcl9faW5wdXRbZGF0YS1pbnNwZWN0b3Ita2V5PVwic2l6ZVwiXScsXHJcblxyXG5cdFx0XHQvLyBEcm9wZG93biBtZW51IGludGVncmF0aW9uLlxyXG5cdFx0XHRtZW51X3Jvb3QgIDogJy53cGJjX3VpX2VsX19kcm9wZG93bicsXHJcblx0XHRcdG1lbnVfdG9nZ2xlOiAnW2RhdGEtdG9nZ2xlPVwid3BiY19kcm9wZG93blwiXScsXHJcblx0XHRcdG1lbnVfYWN0aW9uOiAnLnVsX2Ryb3Bkb3duX21lbnVfbGlfYWN0aW9uW2RhdGEtYWN0aW9uXScsXHJcblx0XHRcdC8vIFZhbHVlLWRpZmZlcnMgdG9nZ2xlLlxyXG5cdFx0XHR2YWx1ZV9kaWZmZXJzX2NoazogJy5qcy12YWx1ZS1kaWZmZXJzW2RhdGEtaW5zcGVjdG9yLWtleT1cInZhbHVlX2RpZmZlcnNcIl0nLFxyXG5cdFx0fTtcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEJ1aWxkIG9wdGlvbiB2YWx1ZSBmcm9tIGxhYmVsLlxyXG5cdFx0ICogLSBJZiBgZGlmZmVycyA9PT0gdHJ1ZWAgLT4gZ2VuZXJhdGUgdG9rZW4gKHNsdWctbGlrZSBtYWNoaW5lIHZhbHVlKS5cclxuXHRcdCAqIC0gSWYgYGRpZmZlcnMgPT09IGZhbHNlYCAtPiBrZWVwIGh1bWFuIHRleHQ7IGVzY2FwZSBvbmx5IGRhbmdlcm91cyBjaGFycy5cclxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBsYWJlbFxyXG5cdFx0ICogQHBhcmFtIHtib29sZWFufSBkaWZmZXJzXHJcblx0XHQgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG5cdFx0ICovXHJcblx0XHRzdGF0aWMgYnVpbGRfdmFsdWVfZnJvbV9sYWJlbChsYWJlbCwgZGlmZmVycykge1xyXG5cdFx0XHRjb25zdCBTID0gQ29yZS5XUEJDX0JGQl9TYW5pdGl6ZTtcclxuXHRcdFx0aWYgKCBkaWZmZXJzICkge1xyXG5cdFx0XHRcdHJldHVybiAoUyAmJiB0eXBlb2YgUy50b190b2tlbiA9PT0gJ2Z1bmN0aW9uJylcclxuXHRcdFx0XHRcdD8gUy50b190b2tlbiggU3RyaW5nKCBsYWJlbCB8fCAnJyApIClcclxuXHRcdFx0XHRcdDogU3RyaW5nKCBsYWJlbCB8fCAnJyApLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoIC9cXHMrL2csICdfJyApLnJlcGxhY2UoIC9bXlxcdy1dL2csICcnICk7XHJcblx0XHRcdH1cclxuXHRcdFx0Ly8gc2luZ2xlLWlucHV0IG1vZGU6IGtlZXAgaHVtYW4gdGV4dDsgdGVtcGxhdGUgd2lsbCBlc2NhcGUgc2FmZWx5LlxyXG5cdFx0XHRyZXR1cm4gU3RyaW5nKCBsYWJlbCA9PSBudWxsID8gJycgOiBsYWJlbCApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogSXMgdGhlIOKAnHZhbHVlIGRpZmZlcnMgZnJvbSBsYWJlbOKAnSB0b2dnbGUgZW5hYmxlZD9cclxuXHRcdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHBhbmVsXHJcblx0XHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIGlzX3ZhbHVlX2RpZmZlcnNfZW5hYmxlZChwYW5lbCkge1xyXG5cdFx0XHRjb25zdCBjaGsgPSBwYW5lbD8ucXVlcnlTZWxlY3RvciggdGhpcy51aS52YWx1ZV9kaWZmZXJzX2NoayApO1xyXG5cdFx0XHRyZXR1cm4gISEoY2hrICYmIGNoay5jaGVja2VkKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEVuc3VyZSB2aXNpYmlsaXR5L2VuYWJsZWQgc3RhdGUgb2YgVmFsdWUgaW5wdXRzIGJhc2VkIG9uIHRoZSB0b2dnbGUuXHJcblx0XHQgKiBXaGVuIGRpc2FibGVkIC0+IGhpZGUgVmFsdWUgaW5wdXRzIGFuZCBrZWVwIHRoZW0gbWlycm9yZWQgZnJvbSBMYWJlbC5cclxuXHRcdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHBhbmVsXHJcblx0XHQgKiBAcmV0dXJucyB7dm9pZH1cclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIHN5bmNfdmFsdWVfaW5wdXRzX3Zpc2liaWxpdHkocGFuZWwpIHtcclxuXHRcdFx0Y29uc3QgZGlmZmVycyA9IHRoaXMuaXNfdmFsdWVfZGlmZmVyc19lbmFibGVkKCBwYW5lbCApO1xyXG5cdFx0XHRjb25zdCByb3dzICAgID0gcGFuZWw/LnF1ZXJ5U2VsZWN0b3JBbGwoIHRoaXMudWkucm93ICkgfHwgW107XHJcblxyXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrICkge1xyXG5cdFx0XHRcdGNvbnN0IHIgICAgICA9IHJvd3NbaV07XHJcblx0XHRcdFx0Y29uc3QgbGJsX2luID0gci5xdWVyeVNlbGVjdG9yKCB0aGlzLnVpLmxhYmVsICk7XHJcblx0XHRcdFx0Y29uc3QgdmFsX2luID0gci5xdWVyeVNlbGVjdG9yKCB0aGlzLnVpLnZhbHVlICk7XHJcblx0XHRcdFx0aWYgKCAhdmFsX2luICkgY29udGludWU7XHJcblxyXG5cdFx0XHRcdGlmICggZGlmZmVycyApIHtcclxuXHRcdFx0XHRcdC8vIFJlLWVuYWJsZSAmIHNob3cgdmFsdWUgaW5wdXRcclxuXHRcdFx0XHRcdHZhbF9pbi5yZW1vdmVBdHRyaWJ1dGUoICdkaXNhYmxlZCcgKTtcclxuXHRcdFx0XHRcdHZhbF9pbi5zdHlsZS5kaXNwbGF5ID0gJyc7XHJcblxyXG5cdFx0XHRcdFx0Ly8gSWYgd2UgaGF2ZSBhIGNhY2hlZCBjdXN0b20gdmFsdWUgYW5kIHRoZSByb3cgd2Fzbid0IGVkaXRlZCB3aGlsZSBPRkYsIHJlc3RvcmUgaXRcclxuXHRcdFx0XHRcdGNvbnN0IGhhc0NhY2hlICAgPSAhIXZhbF9pbi5kYXRhc2V0LmNhY2hlZF92YWx1ZTtcclxuXHRcdFx0XHRcdGNvbnN0IHVzZXJFZGl0ZWQgPSByLmRhdGFzZXQudmFsdWVfdXNlcl90b3VjaGVkID09PSAnMSc7XHJcblxyXG5cdFx0XHRcdFx0aWYgKCBoYXNDYWNoZSAmJiAhdXNlckVkaXRlZCApIHtcclxuXHRcdFx0XHRcdFx0dmFsX2luLnZhbHVlID0gdmFsX2luLmRhdGFzZXQuY2FjaGVkX3ZhbHVlO1xyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICggIWhhc0NhY2hlICkge1xyXG5cdFx0XHRcdFx0XHQvLyBObyBjYWNoZTogaWYgdmFsdWUgaXMganVzdCBhIG1pcnJvcmVkIGxhYmVsLCBvZmZlciBhIHRva2VuaXplZCBkZWZhdWx0XHJcblx0XHRcdFx0XHRcdGNvbnN0IGxibCAgICAgID0gbGJsX2luID8gbGJsX2luLnZhbHVlIDogJyc7XHJcblx0XHRcdFx0XHRcdGNvbnN0IG1pcnJvcmVkID0gdGhpcy5idWlsZF92YWx1ZV9mcm9tX2xhYmVsKCBsYmwsIC8qZGlmZmVycz0qL2ZhbHNlICk7XHJcblx0XHRcdFx0XHRcdGlmICggdmFsX2luLnZhbHVlID09PSBtaXJyb3JlZCApIHtcclxuXHRcdFx0XHRcdFx0XHR2YWxfaW4udmFsdWUgPSB0aGlzLmJ1aWxkX3ZhbHVlX2Zyb21fbGFiZWwoIGxibCwgLypkaWZmZXJzPSovdHJ1ZSApO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdC8vIE9OIC0+IE9GRjogY2FjaGUgb25jZSwgdGhlbiBtaXJyb3JcclxuXHRcdFx0XHRcdGlmICggIXZhbF9pbi5kYXRhc2V0LmNhY2hlZF92YWx1ZSApIHtcclxuXHRcdFx0XHRcdFx0dmFsX2luLmRhdGFzZXQuY2FjaGVkX3ZhbHVlID0gdmFsX2luLnZhbHVlIHx8ICcnO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0Y29uc3QgbGJsICAgID0gbGJsX2luID8gbGJsX2luLnZhbHVlIDogJyc7XHJcblx0XHRcdFx0XHR2YWxfaW4udmFsdWUgPSB0aGlzLmJ1aWxkX3ZhbHVlX2Zyb21fbGFiZWwoIGxibCwgLypkaWZmZXJzPSovZmFsc2UgKTtcclxuXHJcblx0XHRcdFx0XHR2YWxfaW4uc2V0QXR0cmlidXRlKCAnZGlzYWJsZWQnLCAnZGlzYWJsZWQnICk7XHJcblx0XHRcdFx0XHR2YWxfaW4uc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuXHRcdFx0XHRcdC8vIE5PVEU6IGRvIE5PVCBtYXJrIGFzIHVzZXJfdG91Y2hlZCBoZXJlXHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogUmV0dXJuIHdoZXRoZXIgdGhpcyByb3figJlzIHZhbHVlIGhhcyBiZWVuIGVkaXRlZCBieSB1c2VyLlxyXG5cdFx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcm93XHJcblx0XHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIGlzX3Jvd192YWx1ZV91c2VyX3RvdWNoZWQocm93KSB7XHJcblx0XHRcdHJldHVybiByb3c/LmRhdGFzZXQ/LnZhbHVlX3VzZXJfdG91Y2hlZCA9PT0gJzEnO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogTWFyayB0aGlzIHJvd+KAmXMgdmFsdWUgYXMgZWRpdGVkIGJ5IHVzZXIuXHJcblx0XHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSByb3dcclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIG1hcmtfcm93X3ZhbHVlX3VzZXJfdG91Y2hlZChyb3cpIHtcclxuXHRcdFx0aWYgKCByb3cgKSByb3cuZGF0YXNldC52YWx1ZV91c2VyX3RvdWNoZWQgPSAnMSc7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBJbml0aWFsaXplIOKAnGZyZXNobmVzc+KAnSBmbGFncyBvbiBhIHJvdyAodmFsdWUgdW50b3VjaGVkKS5cclxuXHRcdCAqIENhbGwgb24gY3JlYXRpb24vYXBwZW5kIG9mIHJvd3MuXHJcblx0XHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSByb3dcclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIGluaXRfcm93X2ZyZXNoX2ZsYWdzKHJvdykge1xyXG5cdFx0XHRpZiAoIHJvdyApIHtcclxuXHRcdFx0XHRpZiAoICFyb3cuZGF0YXNldC52YWx1ZV91c2VyX3RvdWNoZWQgKSB7XHJcblx0XHRcdFx0XHRyb3cuZGF0YXNldC52YWx1ZV91c2VyX3RvdWNoZWQgPSAnMCc7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gLS0tLSBkZWZhdWx0cyAocGFja3MgY2FuIG92ZXJyaWRlKSAtLS0tXHJcblx0XHRzdGF0aWMgZ2V0X2RlZmF1bHRzKCkge1xyXG5cdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdHR5cGUgICAgICAgICA6IHRoaXMua2luZCxcclxuXHRcdFx0XHRsYWJlbCAgICAgICAgOiAnU2VsZWN0JyxcclxuXHRcdFx0XHRuYW1lICAgICAgICAgOiAnJyxcclxuXHRcdFx0XHRodG1sX2lkICAgICAgOiAnJyxcclxuXHRcdFx0XHRwbGFjZWhvbGRlciAgOiAnLS0tIFNlbGVjdCAtLS0nLFxyXG5cdFx0XHRcdHJlcXVpcmVkICAgICA6IGZhbHNlLFxyXG5cdFx0XHRcdG11bHRpcGxlICAgICA6IGZhbHNlLFxyXG5cdFx0XHRcdHNpemUgICAgICAgICA6IG51bGwsXHJcblx0XHRcdFx0Y3NzY2xhc3MgICAgIDogJycsXHJcblx0XHRcdFx0aGVscCAgICAgICAgIDogJycsXHJcblx0XHRcdFx0ZGVmYXVsdF92YWx1ZTogJycsXHJcblx0XHRcdFx0b3B0aW9ucyAgICAgIDogW1xyXG5cdFx0XHRcdFx0eyBsYWJlbDogJ09wdGlvbiAxJywgdmFsdWU6ICdPcHRpb24gMScsIHNlbGVjdGVkOiBmYWxzZSB9LFxyXG5cdFx0XHRcdFx0eyBsYWJlbDogJ09wdGlvbiAyJywgdmFsdWU6ICdPcHRpb24gMicsIHNlbGVjdGVkOiBmYWxzZSB9LFxyXG5cdFx0XHRcdFx0eyBsYWJlbDogJ09wdGlvbiAzJywgdmFsdWU6ICdPcHRpb24gMycsIHNlbGVjdGVkOiBmYWxzZSB9LFxyXG5cdFx0XHRcdFx0eyBsYWJlbDogJ09wdGlvbiA0JywgdmFsdWU6ICdPcHRpb24gNCcsIHNlbGVjdGVkOiBmYWxzZSB9XHJcblx0XHRcdFx0XSxcclxuXHRcdFx0XHRtaW5fd2lkdGggICAgOiAnMjQwcHgnXHJcblx0XHRcdH07XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gLS0tLSBwcmV2aWV3IHJlbmRlciAoaWRlbXBvdGVudCkgLS0tLVxyXG5cdFx0c3RhdGljIHJlbmRlcihlbCwgZGF0YSwgY3R4KSB7XHJcblx0XHRcdGlmICggIWVsICkgcmV0dXJuO1xyXG5cclxuXHRcdFx0Y29uc3QgZCA9IHRoaXMubm9ybWFsaXplX2RhdGEoIGRhdGEgKTtcclxuXHJcblx0XHRcdGlmICggZC5taW5fd2lkdGggIT0gbnVsbCApIHtcclxuXHRcdFx0XHRlbC5kYXRhc2V0Lm1pbl93aWR0aCA9IFN0cmluZyggZC5taW5fd2lkdGggKTtcclxuXHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0ZWwuc3R5bGUuc2V0UHJvcGVydHkoICctLXdwYmMtY29sLW1pbicsIFN0cmluZyggZC5taW5fd2lkdGggKSApO1xyXG5cdFx0XHRcdH0gY2F0Y2ggKCBfICkge1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoIGQuaHRtbF9pZCAhPSBudWxsICkgZWwuZGF0YXNldC5odG1sX2lkID0gU3RyaW5nKCBkLmh0bWxfaWQgfHwgJycgKTtcclxuXHRcdFx0aWYgKCBkLmNzc2NsYXNzICE9IG51bGwgKSBlbC5kYXRhc2V0LmNzc2NsYXNzID0gU3RyaW5nKCBkLmNzc2NsYXNzIHx8ICcnICk7XHJcblx0XHRcdGlmICggZC5wbGFjZWhvbGRlciAhPSBudWxsICkgZWwuZGF0YXNldC5wbGFjZWhvbGRlciA9IFN0cmluZyggZC5wbGFjZWhvbGRlciB8fCAnJyApO1xyXG5cclxuXHRcdFx0Y29uc3QgdHBsID0gdGhpcy5nZXRfdGVtcGxhdGUoIHRoaXMudGVtcGxhdGVfaWQgKTtcclxuXHRcdFx0aWYgKCB0eXBlb2YgdHBsICE9PSAnZnVuY3Rpb24nICkge1xyXG5cdFx0XHRcdGVsLmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPVwid3BiY19iZmJfX2Vycm9yXCIgcm9sZT1cImFsZXJ0XCI+VGVtcGxhdGUgbm90IGZvdW5kOiAnICsgdGhpcy50ZW1wbGF0ZV9pZCArICcuPC9kaXY+JztcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0ZWwuaW5uZXJIVE1MID0gdHBsKCBkICk7XHJcblx0XHRcdH0gY2F0Y2ggKCBlICkge1xyXG5cdFx0XHRcdHdpbmRvdy5fd3BiYz8uZGV2Py5lcnJvcj8uKCAnU2VsZWN0X0Jhc2UucmVuZGVyJywgZSApO1xyXG5cdFx0XHRcdGVsLmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPVwid3BiY19iZmJfX2Vycm9yXCIgcm9sZT1cImFsZXJ0XCI+RXJyb3IgcmVuZGVyaW5nIGZpZWxkIHByZXZpZXcuPC9kaXY+JztcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGVsLmRhdGFzZXQudHlwZSA9IGQudHlwZSB8fCB0aGlzLmtpbmQ7XHJcblx0XHRcdGVsLnNldEF0dHJpYnV0ZSggJ2RhdGEtbGFiZWwnLCAoZC5sYWJlbCAhPSBudWxsID8gU3RyaW5nKCBkLmxhYmVsICkgOiAnJykgKTtcclxuXHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0Q29yZS5VST8uV1BCQ19CRkJfT3ZlcmxheT8uZW5zdXJlPy4oIGN0eD8uYnVpbGRlciwgZWwgKTtcclxuXHRcdFx0fSBjYXRjaCAoIF8gKSB7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICggIWVsLmRhdGFzZXQub3B0aW9ucyAmJiBBcnJheS5pc0FycmF5KCBkLm9wdGlvbnMgKSAmJiBkLm9wdGlvbnMubGVuZ3RoICkge1xyXG5cdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHRlbC5kYXRhc2V0Lm9wdGlvbnMgPSBKU09OLnN0cmluZ2lmeSggZC5vcHRpb25zICk7XHJcblx0XHRcdFx0fSBjYXRjaCAoIF8gKSB7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gLS0tLSBkcm9wIHNlZWRpbmcgKG9wdGlvbnMgKyBwbGFjZWhvbGRlcikgLS0tLVxyXG5cdFx0c3RhdGljIG9uX2ZpZWxkX2Ryb3AoZGF0YSwgZWwsIG1ldGEpIHtcclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRzdXBlci5vbl9maWVsZF9kcm9wPy4oIGRhdGEsIGVsLCBtZXRhICk7XHJcblx0XHRcdH0gY2F0Y2ggKCBfICkge1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRjb25zdCBpc19kcm9wID0gKG1ldGEgJiYgbWV0YS5jb250ZXh0ID09PSAnZHJvcCcpO1xyXG5cclxuXHRcdFx0aWYgKCBpc19kcm9wICkge1xyXG5cdFx0XHRcdGlmICggIUFycmF5LmlzQXJyYXkoIGRhdGEub3B0aW9ucyApIHx8ICFkYXRhLm9wdGlvbnMubGVuZ3RoICkge1xyXG5cdFx0XHRcdFx0Y29uc3Qgb3B0cyAgID0gKHRoaXMuZ2V0X2RlZmF1bHRzKCkub3B0aW9ucyB8fCBbXSkubWFwKCAobykgPT4gKHtcclxuXHRcdFx0XHRcdFx0bGFiZWwgICA6IG8ubGFiZWwsXHJcblx0XHRcdFx0XHRcdHZhbHVlICAgOiBvLnZhbHVlLFxyXG5cdFx0XHRcdFx0XHRzZWxlY3RlZDogISFvLnNlbGVjdGVkXHJcblx0XHRcdFx0XHR9KSApO1xyXG5cdFx0XHRcdFx0ZGF0YS5vcHRpb25zID0gb3B0cztcclxuXHRcdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHRcdGVsLmRhdGFzZXQub3B0aW9ucyA9IEpTT04uc3RyaW5naWZ5KCBvcHRzICk7XHJcblx0XHRcdFx0XHRcdGVsLmRpc3BhdGNoRXZlbnQoIG5ldyBDdXN0b21FdmVudCggJ3dwYmNfYmZiX2ZpZWxkX2RhdGFfY2hhbmdlZCcsIHsgYnViYmxlczogdHJ1ZSxcclxuXHRcdFx0XHRcdFx0XHRkZXRhaWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoge1xyXG5cdFx0XHRcdFx0XHRcdFx0a2V5ICA6ICdvcHRpb25zJyxcclxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlOiBvcHRzXHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9ICkgKTtcclxuXHRcdFx0XHRcdFx0Q29yZS5TdHJ1Y3R1cmU/LnVwZGF0ZV9maWVsZF9wcm9wPy4oIGVsLCAnb3B0aW9ucycsIG9wdHMgKTtcclxuXHRcdFx0XHRcdH0gY2F0Y2ggKCBfICkge1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Y29uc3QgcGggPSAoZGF0YS5wbGFjZWhvbGRlciA/PyAnJykudG9TdHJpbmcoKS50cmltKCk7XHJcblx0XHRcdFx0aWYgKCAhcGggKSB7XHJcblx0XHRcdFx0XHRjb25zdCBkZmx0ICAgICAgID0gdGhpcy5nZXRfZGVmYXVsdHMoKS5wbGFjZWhvbGRlciB8fCAnLS0tIFNlbGVjdCAtLS0nO1xyXG5cdFx0XHRcdFx0ZGF0YS5wbGFjZWhvbGRlciA9IGRmbHQ7XHJcblx0XHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0XHRlbC5kYXRhc2V0LnBsYWNlaG9sZGVyID0gU3RyaW5nKCBkZmx0ICk7XHJcblx0XHRcdFx0XHRcdGVsLmRpc3BhdGNoRXZlbnQoIG5ldyBDdXN0b21FdmVudCggJ3dwYmNfYmZiX2ZpZWxkX2RhdGFfY2hhbmdlZCcsIHsgYnViYmxlczogdHJ1ZSxcclxuXHRcdFx0XHRcdFx0XHRkZXRhaWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoge1xyXG5cdFx0XHRcdFx0XHRcdFx0a2V5ICA6ICdwbGFjZWhvbGRlcicsXHJcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogZGZsdFxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fSApICk7XHJcblx0XHRcdFx0XHRcdENvcmUuU3RydWN0dXJlPy51cGRhdGVfZmllbGRfcHJvcD8uKCBlbCwgJ3BsYWNlaG9sZGVyJywgZGZsdCApO1xyXG5cdFx0XHRcdFx0fSBjYXRjaCAoIF8gKSB7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcblx0XHQvLyBJbnNwZWN0b3IgaGVscGVycyAoc25ha2VfY2FzZSlcclxuXHRcdC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cdFx0c3RhdGljIGdldF9wYW5lbF9yb290KGVsKSB7XHJcblx0XHRcdHJldHVybiBlbD8uY2xvc2VzdD8uKCAnLndwYmNfYmZiX19pbnNwZWN0b3JfX2JvZHknICkgfHwgZWw/LmNsb3Nlc3Q/LiggJy53cGJjX2JmYl9faW5zcGVjdG9yJyApIHx8IG51bGw7XHJcblx0XHR9XHJcblxyXG5cdFx0c3RhdGljIGdldF9saXN0KHBhbmVsKSB7XHJcblx0XHRcdHJldHVybiBwYW5lbCA/IHBhbmVsLnF1ZXJ5U2VsZWN0b3IoIHRoaXMudWkubGlzdCApIDogbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHRzdGF0aWMgZ2V0X2hvbGRlcihwYW5lbCkge1xyXG5cdFx0XHRyZXR1cm4gcGFuZWwgPyBwYW5lbC5xdWVyeVNlbGVjdG9yKCB0aGlzLnVpLmhvbGRlciApIDogbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHRzdGF0aWMgbWFrZV91aWQoKSB7XHJcblx0XHRcdHJldHVybiAnd3BiY19pbnNfYXV0b19vcHRfJyArIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoIDM2ICkuc2xpY2UoIDIsIDEwICk7XHJcblx0XHR9XHJcblxyXG5cdFx0c3RhdGljIGFwcGVuZF9yb3cocGFuZWwsIGRhdGEpIHtcclxuXHRcdFx0Y29uc3QgbGlzdCA9IHRoaXMuZ2V0X2xpc3QoIHBhbmVsICk7XHJcblx0XHRcdGlmICggIWxpc3QgKSByZXR1cm47XHJcblxyXG5cdFx0XHRjb25zdCBpZHggID0gbGlzdC5jaGlsZHJlbi5sZW5ndGg7XHJcblx0XHRcdGNvbnN0IHJvd2QgPSBPYmplY3QuYXNzaWduKCB7IGxhYmVsOiAnJywgdmFsdWU6ICcnLCBzZWxlY3RlZDogZmFsc2UsIGluZGV4OiBpZHggfSwgKGRhdGEgfHwge30pICk7XHJcblx0XHRcdGlmICggIXJvd2QudWlkICkgcm93ZC51aWQgPSB0aGlzLm1ha2VfdWlkKCk7XHJcblxyXG5cdFx0XHRjb25zdCB0cGxfaWQgPSB0aGlzLm9wdGlvbl9yb3dfdGVtcGxhdGVfaWQ7XHJcblx0XHRcdGNvbnN0IHRwbCAgICA9ICh3aW5kb3cud3AgJiYgd3AudGVtcGxhdGUpID8gd3AudGVtcGxhdGUoIHRwbF9pZCApIDogbnVsbDtcclxuXHRcdFx0Y29uc3QgaHRtbCAgID0gdHBsID8gdHBsKCByb3dkICkgOiBudWxsO1xyXG5cclxuXHRcdFx0Ly8gSW4gYXBwZW5kX3JvdygpIC0+IGZhbGxiYWNrIEhUTUwuXHJcblx0XHRcdGNvbnN0IHdyYXAgICAgID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKTtcclxuXHRcdFx0d3JhcC5pbm5lckhUTUwgPSBodG1sIHx8IChcclxuXHRcdFx0XHQnPGRpdiBjbGFzcz1cIndwYmNfYmZiX19vcHRpb25zX3Jvd1wiIGRhdGEtaW5kZXg9XCInICsgKHJvd2QuaW5kZXggfHwgMCkgKyAnXCI+JyArXHJcblx0XHRcdFx0XHQnPHNwYW4gY2xhc3M9XCJ3cGJjX2JmYl9fZHJhZy1oYW5kbGVcIj48c3BhbiBjbGFzcz1cIndwYmNfaWNuX2RyYWdfaW5kaWNhdG9yXCI+PC9zcGFuPjwvc3Bhbj4nICtcclxuXHRcdFx0XHRcdCc8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cIndwYmNfYmZiX19vcHQtbGFiZWxcIiBwbGFjZWhvbGRlcj1cIkxhYmVsXCIgdmFsdWU9XCInICsgKHJvd2QubGFiZWwgfHwgJycpICsgJ1wiPicgK1xyXG5cdFx0XHRcdFx0JzxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwid3BiY19iZmJfX29wdC12YWx1ZVwiIHBsYWNlaG9sZGVyPVwiVmFsdWVcIiB2YWx1ZT1cIicgKyAocm93ZC52YWx1ZSB8fCAnJykgKyAnXCI+JyArXHJcblx0XHRcdFx0XHQnPGRpdiBjbGFzcz1cIndwYmNfYmZiX19vcHQtc2VsZWN0ZWRcIj4nICtcclxuXHRcdFx0XHRcdFx0JzxkaXYgY2xhc3M9XCJpbnNwZWN0b3JfX2NvbnRyb2wgd3BiY191aV9fdG9nZ2xlXCI+JyArXHJcblx0XHRcdFx0XHRcdFx0JzxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cIndwYmNfYmZiX19vcHQtc2VsZWN0ZWQtY2hrIGluc3BlY3Rvcl9faW5wdXRcIiBpZD1cIicgKyByb3dkLnVpZCArICdcIiByb2xlPVwic3dpdGNoXCIgJyArIChyb3dkLnNlbGVjdGVkID8gJ2NoZWNrZWQgYXJpYS1jaGVja2VkPVwidHJ1ZVwiJyA6ICdhcmlhLWNoZWNrZWQ9XCJmYWxzZVwiJykgKyAnPicgK1xyXG5cdFx0XHRcdFx0XHRcdCc8bGFiZWwgY2xhc3M9XCJ3cGJjX3VpX190b2dnbGVfaWNvbl9yYWRpb1wiIGZvcj1cIicgKyByb3dkLnVpZCArICdcIj48L2xhYmVsPicgK1xyXG5cdFx0XHRcdFx0XHRcdCc8bGFiZWwgY2xhc3M9XCJ3cGJjX3VpX190b2dnbGVfbGFiZWxcIiBmb3I9XCInICsgcm93ZC51aWQgKyAnXCI+RGVmYXVsdDwvbGFiZWw+JyArXHJcblx0XHRcdFx0XHRcdCc8L2Rpdj4nICtcclxuXHRcdFx0XHRcdCc8L2Rpdj4nICtcclxuXHRcdFx0XHRcdC8vIDMtZG90IGRyb3Bkb3duICh1c2VzIGV4aXN0aW5nIHBsdWdpbiBkcm9wZG93biBKUykuXHJcblx0XHRcdFx0XHQnPGRpdiBjbGFzcz1cIndwYmNfdWlfZWwgd3BiY191aV9lbF9jb250YWluZXIgd3BiY191aV9lbF9fZHJvcGRvd25cIj4nICtcclxuXHRcdFx0XHRcdFx0JzxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIiBkYXRhLXRvZ2dsZT1cIndwYmNfZHJvcGRvd25cIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIiBjbGFzcz1cInVsX2Ryb3Bkb3duX21lbnVfdG9nZ2xlXCI+JyArXHJcblx0XHRcdFx0XHRcdFx0JzxpIGNsYXNzPVwibWVudV9pY29uIGljb24tMXggd3BiY19pY25fbW9yZV92ZXJ0XCI+PC9pPicgK1xyXG5cdFx0XHRcdFx0XHQnPC9hPicgK1xyXG5cdFx0XHRcdFx0XHQnPHVsIGNsYXNzPVwidWxfZHJvcGRvd25fbWVudVwiIHJvbGU9XCJtZW51XCIgc3R5bGU9XCJyaWdodDowcHg7IGxlZnQ6YXV0bztcIj4nICtcclxuXHRcdFx0XHRcdFx0XHQnPGxpPicgK1xyXG5cdFx0XHRcdFx0XHRcdFx0JzxhIGNsYXNzPVwidWxfZHJvcGRvd25fbWVudV9saV9hY3Rpb25cIiBkYXRhLWFjdGlvbj1cImFkZF9hZnRlclwiIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIj4nICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0J0FkZCBOZXcnICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0JzxpIGNsYXNzPVwibWVudV9pY29uIGljb24tMXggd3BiY19pY25fYWRkX2NpcmNsZVwiPjwvaT4nICtcclxuXHRcdFx0XHRcdFx0XHRcdCc8L2E+JyArXHJcblx0XHRcdFx0XHRcdFx0JzwvbGk+JyArXHJcblx0XHRcdFx0XHRcdFx0JzxsaT4nICtcclxuXHRcdFx0XHRcdFx0XHRcdCc8YSBjbGFzcz1cInVsX2Ryb3Bkb3duX21lbnVfbGlfYWN0aW9uXCIgZGF0YS1hY3Rpb249XCJkdXBsaWNhdGVcIiBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCI+JyArXHJcblx0XHRcdFx0XHRcdFx0XHRcdCdEdXBsaWNhdGUnICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0JzxpIGNsYXNzPVwibWVudV9pY29uIGljb24tMXggd3BiY19pY25fY29udGVudF9jb3B5XCI+PC9pPicgK1xyXG5cdFx0XHRcdFx0XHRcdFx0JzwvYT4nICtcclxuXHRcdFx0XHRcdFx0XHQnPC9saT4nICtcclxuXHRcdFx0XHRcdFx0XHQnPGxpIGNsYXNzPVwiZGl2aWRlclwiPjwvbGk+JyArXHJcblx0XHRcdFx0XHRcdFx0JzxsaT4nICtcclxuXHRcdFx0XHRcdFx0XHRcdCc8YSBjbGFzcz1cInVsX2Ryb3Bkb3duX21lbnVfbGlfYWN0aW9uXCIgZGF0YS1hY3Rpb249XCJyZW1vdmVcIiBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCI+JyArXHJcblx0XHRcdFx0XHRcdFx0XHRcdCdSZW1vdmUnICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0JzxpIGNsYXNzPVwibWVudV9pY29uIGljb24tMXggd3BiY19pY25fZGVsZXRlX291dGxpbmVcIj48L2k+JyArXHJcblx0XHRcdFx0XHRcdFx0XHQnPC9hPicgK1xyXG5cdFx0XHRcdFx0XHRcdCc8L2xpPicgK1xyXG5cdFx0XHRcdFx0XHQnPC91bD4nICtcclxuXHRcdFx0XHRcdCc8L2Rpdj4nICtcclxuXHRcdFx0XHQnPC9kaXY+J1xyXG5cdFx0XHQpO1xyXG5cclxuXHRcdFx0Y29uc3Qgbm9kZSA9IHdyYXAuZmlyc3RFbGVtZW50Q2hpbGQ7XHJcblx0XHRcdCBpZiAoISBub2RlKSB7XHJcblx0XHRcdFx0IHJldHVybjtcclxuXHRcdFx0IH1cclxuXHRcdFx0Ly8gcHJlLWhpZGUgVmFsdWUgaW5wdXQgaWYgdG9nZ2xlIGlzIE9GRiAqKmJlZm9yZSoqIGFwcGVuZGluZy5cclxuXHRcdFx0Y29uc3QgZGlmZmVycyA9IHRoaXMuaXNfdmFsdWVfZGlmZmVyc19lbmFibGVkKCBwYW5lbCApO1xyXG5cdFx0XHRjb25zdCB2YWxJbiAgID0gbm9kZS5xdWVyeVNlbGVjdG9yKCB0aGlzLnVpLnZhbHVlICk7XHJcblx0XHRcdGNvbnN0IGxibEluICAgPSBub2RlLnF1ZXJ5U2VsZWN0b3IoIHRoaXMudWkubGFiZWwgKTtcclxuXHJcblx0XHRcdGlmICggIWRpZmZlcnMgJiYgdmFsSW4gKSB7XHJcblx0XHRcdFx0aWYgKCAhdmFsSW4uZGF0YXNldC5jYWNoZWRfdmFsdWUgKSB7XHJcblx0XHRcdFx0XHR2YWxJbi5kYXRhc2V0LmNhY2hlZF92YWx1ZSA9IHZhbEluLnZhbHVlIHx8ICcnO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAoIGxibEluICkgdmFsSW4udmFsdWUgPSB0aGlzLmJ1aWxkX3ZhbHVlX2Zyb21fbGFiZWwoIGxibEluLnZhbHVlLCBmYWxzZSApO1xyXG5cdFx0XHRcdHZhbEluLnNldEF0dHJpYnV0ZSggJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJyApO1xyXG5cdFx0XHRcdHZhbEluLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcblx0XHRcdH1cclxuXHJcblxyXG5cdFx0XHR0aGlzLmluaXRfcm93X2ZyZXNoX2ZsYWdzKCBub2RlICk7XHJcblx0XHRcdGxpc3QuYXBwZW5kQ2hpbGQoIG5vZGUgKTtcclxuXHJcblx0XHRcdC8vIEtlZXAgeW91ciBleGlzdGluZyBwb3N0LWFwcGVuZCBzeW5jIGFzIGEgc2FmZXR5IG5ldFxyXG5cdFx0XHR0aGlzLnN5bmNfdmFsdWVfaW5wdXRzX3Zpc2liaWxpdHkoIHBhbmVsICk7XHJcblx0XHR9XHJcblxyXG5cdFx0c3RhdGljIGNsb3NlX2Ryb3Bkb3duKGFuY2hvcl9lbCkge1xyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdHZhciByb290ID0gYW5jaG9yX2VsPy5jbG9zZXN0Py4oIHRoaXMudWkubWVudV9yb290ICk7XHJcblx0XHRcdFx0aWYgKCByb290ICkge1xyXG5cdFx0XHRcdFx0Ly8gSWYgeW91ciBkcm9wZG93biB0b2dnbGVyIHRvZ2dsZXMgYSBjbGFzcyBsaWtlICdvcGVuJywgY2xvc2UgaXQuXHJcblx0XHRcdFx0XHRyb290LmNsYXNzTGlzdC5yZW1vdmUoICdvcGVuJyApO1xyXG5cdFx0XHRcdFx0Ly8gT3IgaWYgaXQgcmVsaWVzIG9uIGFyaWEtZXhwYW5kZWQgb24gdGhlIHRvZ2dsZS5cclxuXHRcdFx0XHRcdHZhciB0ID0gcm9vdC5xdWVyeVNlbGVjdG9yKCB0aGlzLnVpLm1lbnVfdG9nZ2xlICk7XHJcblx0XHRcdFx0XHRpZiAoIHQgKSB7XHJcblx0XHRcdFx0XHRcdHQuc2V0QXR0cmlidXRlKCAnYXJpYS1leHBhbmRlZCcsICdmYWxzZScgKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gY2F0Y2ggKCBfICkgeyB9XHJcblx0XHR9XHJcblxyXG5cdFx0c3RhdGljIGluc2VydF9hZnRlcihuZXdfbm9kZSwgcmVmX25vZGUpIHtcclxuXHRcdFx0aWYgKCByZWZfbm9kZT8ucGFyZW50Tm9kZSApIHtcclxuXHRcdFx0XHRpZiAoIHJlZl9ub2RlLm5leHRTaWJsaW5nICkge1xyXG5cdFx0XHRcdFx0cmVmX25vZGUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIG5ld19ub2RlLCByZWZfbm9kZS5uZXh0U2libGluZyApO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRyZWZfbm9kZS5wYXJlbnROb2RlLmFwcGVuZENoaWxkKCBuZXdfbm9kZSApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHN0YXRpYyBjb21taXRfb3B0aW9ucyhwYW5lbCkge1xyXG5cdFx0XHRjb25zdCBsaXN0ICAgPSB0aGlzLmdldF9saXN0KCBwYW5lbCApO1xyXG5cdFx0XHRjb25zdCBob2xkZXIgPSB0aGlzLmdldF9ob2xkZXIoIHBhbmVsICk7XHJcblx0XHRcdGlmICggIWxpc3QgfHwgIWhvbGRlciApIHJldHVybjtcclxuXHJcblx0XHRcdGNvbnN0IGRpZmZlcnMgPSB0aGlzLmlzX3ZhbHVlX2RpZmZlcnNfZW5hYmxlZCggcGFuZWwgKTtcclxuXHJcblx0XHRcdGNvbnN0IHJvd3MgICAgPSBsaXN0LnF1ZXJ5U2VsZWN0b3JBbGwoIHRoaXMudWkucm93ICk7XHJcblx0XHRcdGNvbnN0IG9wdGlvbnMgPSBbXTtcclxuXHRcdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKyApIHtcclxuXHRcdFx0XHRjb25zdCByICAgICAgPSByb3dzW2ldO1xyXG5cdFx0XHRcdGNvbnN0IGxibF9pbiA9IHIucXVlcnlTZWxlY3RvciggdGhpcy51aS5sYWJlbCApO1xyXG5cdFx0XHRcdGNvbnN0IHZhbF9pbiA9IHIucXVlcnlTZWxlY3RvciggdGhpcy51aS52YWx1ZSApO1xyXG5cdFx0XHRcdGNvbnN0IGNoayAgICA9IHIucXVlcnlTZWxlY3RvciggdGhpcy51aS50b2dnbGUgKTtcclxuXHJcblx0XHRcdFx0Y29uc3QgbGJsID0gKGxibF9pbiAmJiBsYmxfaW4udmFsdWUpIHx8ICcnO1xyXG5cdFx0XHRcdGxldCB2YWwgICA9ICh2YWxfaW4gJiYgdmFsX2luLnZhbHVlKSB8fCAnJztcclxuXHJcblx0XHRcdFx0Ly8gSWYgc2luZ2xlLWlucHV0IG1vZGUgLT4gaGFyZCBtaXJyb3IgdG8gbGFiZWwuXHJcblx0XHRcdFx0aWYgKCAhIGRpZmZlcnMgKSB7XHJcblx0XHRcdFx0XHQvLyBzaW5nbGUtaW5wdXQgbW9kZTogbWlycm9yIExhYmVsLCBtaW5pbWFsIGVzY2FwaW5nIChubyBzbHVnKS5cclxuXHRcdFx0XHRcdHZhbCA9IHRoaXMuYnVpbGRfdmFsdWVfZnJvbV9sYWJlbCggbGJsLCAvKmRpZmZlcnM9Ki9mYWxzZSApO1xyXG5cdFx0XHRcdFx0aWYgKCB2YWxfaW4gKSB7XHJcblx0XHRcdFx0XHRcdHZhbF9pbi52YWx1ZSA9IHZhbDsgICAvLyBrZWVwIGhpZGRlbiBpbnB1dCBpbiBzeW5jIGZvciBhbnkgcHJldmlld3MvZGVidWcuXHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRjb25zdCBzZWwgPSAhIShjaGsgJiYgY2hrLmNoZWNrZWQpO1xyXG5cdFx0XHRcdG9wdGlvbnMucHVzaCggeyBsYWJlbDogbGJsLCB2YWx1ZTogdmFsLCBzZWxlY3RlZDogc2VsIH0gKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRob2xkZXIudmFsdWUgPSBKU09OLnN0cmluZ2lmeSggb3B0aW9ucyApO1xyXG5cdFx0XHRcdGhvbGRlci5kaXNwYXRjaEV2ZW50KCBuZXcgRXZlbnQoICdpbnB1dCcsIHsgYnViYmxlczogdHJ1ZSB9ICkgKTtcclxuXHRcdFx0XHRob2xkZXIuZGlzcGF0Y2hFdmVudCggbmV3IEV2ZW50KCAnY2hhbmdlJywgeyBidWJibGVzOiB0cnVlIH0gKSApO1xyXG5cdFx0XHRcdHBhbmVsLmRpc3BhdGNoRXZlbnQoIG5ldyBDdXN0b21FdmVudCggJ3dwYmNfYmZiX2ZpZWxkX2RhdGFfY2hhbmdlZCcsIHtcclxuXHRcdFx0XHRcdGJ1YmJsZXM6IHRydWUsIGRldGFpbDoge1xyXG5cdFx0XHRcdFx0XHRrZXk6ICdvcHRpb25zJywgdmFsdWU6IG9wdGlvbnNcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9ICkgKTtcclxuXHRcdFx0fSBjYXRjaCAoIF8gKSB7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHRoaXMuc3luY19kZWZhdWx0X3ZhbHVlX2xvY2soIHBhbmVsICk7XHJcblx0XHRcdHRoaXMuc3luY19wbGFjZWhvbGRlcl9sb2NrKCBwYW5lbCApO1xyXG5cclxuXHRcdFx0Ly8gTWlycm9yIHRvIHRoZSBzZWxlY3RlZCBmaWVsZCBlbGVtZW50IHNvIGNhbnZhcy9leHBvcnQgc2VlcyBjdXJyZW50IG9wdGlvbnMgaW1tZWRpYXRlbHkuXHJcblx0XHRcdGNvbnN0IGZpZWxkID0gcGFuZWwuX19zZWxlY3RiYXNlX2ZpZWxkXHJcblx0XHRcdFx0fHwgZG9jdW1lbnQucXVlcnlTZWxlY3RvciggJy53cGJjX2JmYl9fZmllbGQuaXMtc2VsZWN0ZWQsIC53cGJjX2JmYl9fZmllbGQtLXNlbGVjdGVkJyApO1xyXG5cdFx0XHRpZiAoIGZpZWxkICkge1xyXG5cdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHRmaWVsZC5kYXRhc2V0Lm9wdGlvbnMgPSBKU09OLnN0cmluZ2lmeSggb3B0aW9ucyApO1xyXG5cdFx0XHRcdH0gY2F0Y2ggKCBfICkge1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRDb3JlLlN0cnVjdHVyZT8udXBkYXRlX2ZpZWxkX3Byb3A/LiggZmllbGQsICdvcHRpb25zJywgb3B0aW9ucyApO1xyXG5cdFx0XHRcdGZpZWxkLmRpc3BhdGNoRXZlbnQoIG5ldyBDdXN0b21FdmVudCggJ3dwYmNfYmZiX2ZpZWxkX2RhdGFfY2hhbmdlZCcsIHtcclxuXHRcdFx0XHRcdGJ1YmJsZXM6IHRydWUsIGRldGFpbDogeyBrZXk6ICdvcHRpb25zJywgdmFsdWU6IG9wdGlvbnMgfVxyXG5cdFx0XHRcdH0gKSApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cclxuXHRcdHN0YXRpYyBlbnN1cmVfc29ydGFibGUocGFuZWwpIHtcclxuXHJcblx0XHRcdGNvbnN0IGxpc3QgPSB0aGlzLmdldF9saXN0KCBwYW5lbCApO1xyXG5cdFx0XHRpZiAoICEgbGlzdCApIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0Y29uc3QgZXhpc3RpbmcgPSB3aW5kb3cuU29ydGFibGU/LmdldD8uKCBsaXN0ICk7XHJcblx0XHRcdFx0aWYgKCBleGlzdGluZyApIHtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGNvbnN0IGJ1aWxkZXIgPSB3aW5kb3cud3BiY19iZmJfYXBpPy5nZXRfYnVpbGRlcj8uKCkgfHwgd2luZG93LndwYmNfYmZiIHx8IG51bGw7XHJcblxyXG5cdFx0XHRcdC8vIFByZWZlciB0aGUgc2hhcmVkIFNvcnRhYmxlIG1hbmFnZXIgc28gdGhlIHNpZGViYXIgbGlzdCB1c2VzXHJcblx0XHRcdFx0Ly8gdGhlIGRlZGljYXRlZCBcInNpbXBsZV9saXN0XCIgY29uZmlnIGluc3RlYWQgb2YgdGhlIGNhbnZhcyBjb25maWcuXHJcblx0XHRcdFx0aWYgKCBidWlsZGVyICYmIGJ1aWxkZXIuc29ydGFibGUgJiYgdHlwZW9mIGJ1aWxkZXIuc29ydGFibGUuZW5zdXJlID09PSAnZnVuY3Rpb24nICkge1xyXG5cclxuXHRcdFx0XHRcdGJ1aWxkZXIuc29ydGFibGUuZW5zdXJlKFxyXG5cdFx0XHRcdFx0XHRsaXN0LFxyXG5cdFx0XHRcdFx0XHQnY2FudmFzJyxcclxuXHRcdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRcdHNvcnRhYmxlX2tpbmQgICAgIDogJ3NpbXBsZV9saXN0JyxcclxuXHRcdFx0XHRcdFx0XHRoYW5kbGVfc2VsZWN0b3IgICA6IHRoaXMudWkuZHJhZ19oYW5kbGUsXHJcblx0XHRcdFx0XHRcdFx0ZHJhZ2dhYmxlX3NlbGVjdG9yOiB0aGlzLnVpLnJvdyxcclxuXHRcdFx0XHRcdFx0XHRvblVwZGF0ZSAgICAgICAgICA6ICgpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuY29tbWl0X29wdGlvbnMoIHBhbmVsICk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0XHR9IGVsc2UgaWYgKCB3aW5kb3cuU29ydGFibGU/LmNyZWF0ZSApIHtcclxuXHRcdFx0XHRcdC8vIEZhbGxiYWNrIGlmIGJ1aWxkZXIgaXMgbm90IHJlYWR5IGZvciBzb21lIHJlYXNvbi5cclxuXHRcdFx0XHRcdHdpbmRvdy5Tb3J0YWJsZS5jcmVhdGUoXHJcblx0XHRcdFx0XHRcdGxpc3QsXHJcblx0XHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0XHRoYW5kbGUgICAgICAgICAgIDogdGhpcy51aS5kcmFnX2hhbmRsZSxcclxuXHRcdFx0XHRcdFx0XHRkcmFnZ2FibGUgICAgICAgIDogdGhpcy51aS5yb3csXHJcblx0XHRcdFx0XHRcdFx0YW5pbWF0aW9uICAgICAgICA6IDEyMCxcclxuXHRcdFx0XHRcdFx0XHRmb3JjZUZhbGxiYWNrICAgIDogdHJ1ZSxcclxuXHRcdFx0XHRcdFx0XHRmYWxsYmFja09uQm9keSAgIDogZmFsc2UsXHJcblx0XHRcdFx0XHRcdFx0ZmFsbGJhY2tUb2xlcmFuY2U6IDgsXHJcblx0XHRcdFx0XHRcdFx0cmVtb3ZlQ2xvbmVPbkhpZGU6IHRydWUsXHJcblx0XHRcdFx0XHRcdFx0b25VcGRhdGUgICAgICAgICA6ICgpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuY29tbWl0X29wdGlvbnMoIHBhbmVsICk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0bGlzdC5kYXRhc2V0LnNvcnRhYmxlX2luaXQgPSAnMSc7XHJcblxyXG5cdFx0XHR9IGNhdGNoICggZSApIHtcclxuXHRcdFx0XHR3aW5kb3cuX3dwYmM/LmRldj8uZXJyb3I/LiggJ1NlbGVjdF9CYXNlLmVuc3VyZV9zb3J0YWJsZScsIGUgKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHN0YXRpYyByZWJ1aWxkX2lmX2VtcHR5KHBhbmVsKSB7XHJcblx0XHRcdGNvbnN0IGxpc3QgICA9IHRoaXMuZ2V0X2xpc3QoIHBhbmVsICk7XHJcblx0XHRcdGNvbnN0IGhvbGRlciA9IHRoaXMuZ2V0X2hvbGRlciggcGFuZWwgKTtcclxuXHRcdFx0aWYgKCAhbGlzdCB8fCAhaG9sZGVyIHx8IGxpc3QuY2hpbGRyZW4ubGVuZ3RoICkgcmV0dXJuO1xyXG5cclxuXHRcdFx0bGV0IGRhdGEgPSBbXTtcclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRkYXRhID0gSlNPTi5wYXJzZSggaG9sZGVyLnZhbHVlIHx8ICdbXScgKTtcclxuXHRcdFx0fSBjYXRjaCAoIF8gKSB7XHJcblx0XHRcdFx0ZGF0YSA9IFtdO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoICFBcnJheS5pc0FycmF5KCBkYXRhICkgfHwgIWRhdGEubGVuZ3RoICkge1xyXG5cdFx0XHRcdGRhdGEgPSAodGhpcy5nZXRfZGVmYXVsdHMoKS5vcHRpb25zIHx8IFtdKS5zbGljZSggMCApO1xyXG5cdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHRob2xkZXIudmFsdWUgPSBKU09OLnN0cmluZ2lmeSggZGF0YSApO1xyXG5cdFx0XHRcdFx0aG9sZGVyLmRpc3BhdGNoRXZlbnQoIG5ldyBFdmVudCggJ2lucHV0JywgeyBidWJibGVzOiB0cnVlIH0gKSApO1xyXG5cdFx0XHRcdFx0aG9sZGVyLmRpc3BhdGNoRXZlbnQoIG5ldyBFdmVudCggJ2NoYW5nZScsIHsgYnViYmxlczogdHJ1ZSB9ICkgKTtcclxuXHRcdFx0XHR9IGNhdGNoICggXyApIHtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGZvciAoIGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKysgKSB7XHJcblx0XHRcdFx0dGhpcy5hcHBlbmRfcm93KCBwYW5lbCwge1xyXG5cdFx0XHRcdFx0bGFiZWwgICA6IGRhdGFbaV0/LmxhYmVsIHx8ICcnLFxyXG5cdFx0XHRcdFx0dmFsdWUgICA6IGRhdGFbaV0/LnZhbHVlIHx8ICcnLFxyXG5cdFx0XHRcdFx0c2VsZWN0ZWQ6ICEhZGF0YVtpXT8uc2VsZWN0ZWQsXHJcblx0XHRcdFx0XHRpbmRleCAgIDogaSxcclxuXHRcdFx0XHRcdHVpZCAgICAgOiB0aGlzLm1ha2VfdWlkKClcclxuXHRcdFx0XHR9ICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHRoaXMuc3luY19kZWZhdWx0X3ZhbHVlX2xvY2soIHBhbmVsICk7XHJcblx0XHRcdHRoaXMuc3luY19wbGFjZWhvbGRlcl9sb2NrKCBwYW5lbCApO1xyXG5cdFx0XHR0aGlzLnN5bmNfdmFsdWVfaW5wdXRzX3Zpc2liaWxpdHkoIHBhbmVsICk7XHJcblx0XHR9XHJcblxyXG5cdFx0c3RhdGljIGhhc19yb3dfZGVmYXVsdHMocGFuZWwpIHtcclxuXHRcdFx0Y29uc3QgY2hlY2tzID0gcGFuZWw/LnF1ZXJ5U2VsZWN0b3JBbGwoIHRoaXMudWkudG9nZ2xlICk7XHJcblx0XHRcdGlmICggIWNoZWNrcz8ubGVuZ3RoICkgcmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCBjaGVja3MubGVuZ3RoOyBpKysgKSBpZiAoIGNoZWNrc1tpXS5jaGVja2VkICkgcmV0dXJuIHRydWU7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRzdGF0aWMgaXNfbXVsdGlwbGVfZW5hYmxlZChwYW5lbCkge1xyXG5cdFx0XHRjb25zdCBjaGsgPSBwYW5lbD8ucXVlcnlTZWxlY3RvciggdGhpcy51aS5tdWx0aXBsZV9jaGsgKTtcclxuXHRcdFx0cmV0dXJuICEhKGNoayAmJiBjaGsuY2hlY2tlZCk7XHJcblx0XHR9XHJcblxyXG5cdFx0c3RhdGljIGhhc190ZXh0X2RlZmF1bHRfdmFsdWUocGFuZWwpIHtcclxuXHRcdFx0Y29uc3QgZHYgPSBwYW5lbD8ucXVlcnlTZWxlY3RvciggdGhpcy51aS5kZWZhdWx0X3RleHQgKTtcclxuXHRcdFx0cmV0dXJuICEhKGR2ICYmIFN0cmluZyggZHYudmFsdWUgfHwgJycgKS50cmltKCkubGVuZ3RoKTtcclxuXHRcdH1cclxuXHJcblx0XHRzdGF0aWMgc3luY19kZWZhdWx0X3ZhbHVlX2xvY2socGFuZWwpIHtcclxuXHRcdFx0Y29uc3QgaW5wdXQgPSBwYW5lbD8ucXVlcnlTZWxlY3RvciggdGhpcy51aS5kZWZhdWx0X3RleHQgKTtcclxuXHRcdFx0Y29uc3Qgbm90ZSAgPSBwYW5lbD8ucXVlcnlTZWxlY3RvciggJy5qcy1kZWZhdWx0LXZhbHVlLW5vdGUnICk7XHJcblx0XHRcdGlmICggIWlucHV0ICkgcmV0dXJuO1xyXG5cclxuXHRcdFx0Y29uc3QgbG9jayAgICAgPSB0aGlzLmhhc19yb3dfZGVmYXVsdHMoIHBhbmVsICk7XHJcblx0XHRcdGlucHV0LmRpc2FibGVkID0gISFsb2NrO1xyXG5cdFx0XHRpZiAoIGxvY2sgKSB7XHJcblx0XHRcdFx0aW5wdXQuc2V0QXR0cmlidXRlKCAnYXJpYS1kaXNhYmxlZCcsICd0cnVlJyApO1xyXG5cdFx0XHRcdGlmICggbm90ZSApIG5vdGUuc3R5bGUuZGlzcGxheSA9ICcnO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGlucHV0LnJlbW92ZUF0dHJpYnV0ZSggJ2FyaWEtZGlzYWJsZWQnICk7XHJcblx0XHRcdFx0aWYgKCBub3RlICkgbm90ZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0c3RhdGljIHN5bmNfcGxhY2Vob2xkZXJfbG9jayhwYW5lbCkge1xyXG5cdFx0XHRjb25zdCBpbnB1dCA9IHBhbmVsPy5xdWVyeVNlbGVjdG9yKCB0aGlzLnVpLnBsYWNlaG9sZGVyX2lucHV0ICk7XHJcblx0XHRcdGNvbnN0IG5vdGUgID0gcGFuZWw/LnF1ZXJ5U2VsZWN0b3IoIHRoaXMudWkucGxhY2Vob2xkZXJfbm90ZSApO1xyXG5cclxuXHRcdFx0Ly8gTkVXOiBjb21wdXRlIG11bHRpcGxlIGFuZCB0b2dnbGUgcm93IHZpc2liaWxpdHlcclxuXHRcdFx0Y29uc3QgaXNNdWx0aXBsZSAgICAgPSB0aGlzLmlzX211bHRpcGxlX2VuYWJsZWQoIHBhbmVsICk7XHJcblx0XHRcdGNvbnN0IHBsYWNlaG9sZGVyUm93ID0gaW5wdXQ/LmNsb3Nlc3QoICcuaW5zcGVjdG9yX19yb3cnICkgfHwgbnVsbDtcclxuXHRcdFx0Y29uc3Qgc2l6ZUlucHV0ICAgICAgPSBwYW5lbD8ucXVlcnlTZWxlY3RvciggdGhpcy51aS5zaXplX2lucHV0ICkgfHwgbnVsbDtcclxuXHRcdFx0Y29uc3Qgc2l6ZVJvdyAgICAgICAgPSBzaXplSW5wdXQ/LmNsb3Nlc3QoICcuaW5zcGVjdG9yX19yb3cnICkgfHwgbnVsbDtcclxuXHJcblx0XHRcdC8vIFNob3cgcGxhY2Vob2xkZXIgb25seSBmb3Igc2luZ2xlLXNlbGVjdDsgc2hvdyBzaXplIG9ubHkgZm9yIG11bHRpcGxlXHJcblx0XHRcdGlmICggcGxhY2Vob2xkZXJSb3cgKSBwbGFjZWhvbGRlclJvdy5zdHlsZS5kaXNwbGF5ID0gaXNNdWx0aXBsZSA/ICdub25lJyA6ICcnO1xyXG5cdFx0XHRpZiAoIHNpemVSb3cgKSBzaXplUm93LnN0eWxlLmRpc3BsYXkgPSBpc011bHRpcGxlID8gJycgOiAnbm9uZSc7XHJcblxyXG5cdFx0XHQvLyBFeGlzdGluZyBiZWhhdmlvciAoa2VlcCBhcy1pcylcclxuXHRcdFx0aWYgKCAhaW5wdXQgKSByZXR1cm47XHJcblxyXG5cdFx0XHRjb25zdCBsb2NrID0gaXNNdWx0aXBsZSB8fCB0aGlzLmhhc19yb3dfZGVmYXVsdHMoIHBhbmVsICkgfHwgdGhpcy5oYXNfdGV4dF9kZWZhdWx0X3ZhbHVlKCBwYW5lbCApO1xyXG5cdFx0XHRpZiAoIG5vdGUgJiYgIW5vdGUuaWQgKSBub3RlLmlkID0gJ3dwYmNfcGxhY2Vob2xkZXJfbm90ZV8nICsgTWF0aC5yYW5kb20oKS50b1N0cmluZyggMzYgKS5zbGljZSggMiwgMTAgKTtcclxuXHJcblx0XHRcdGlucHV0LmRpc2FibGVkID0gISFsb2NrO1xyXG5cdFx0XHRpZiAoIGxvY2sgKSB7XHJcblx0XHRcdFx0aW5wdXQuc2V0QXR0cmlidXRlKCAnYXJpYS1kaXNhYmxlZCcsICd0cnVlJyApO1xyXG5cdFx0XHRcdGlmICggbm90ZSApIHtcclxuXHRcdFx0XHRcdG5vdGUuc3R5bGUuZGlzcGxheSA9ICcnO1xyXG5cdFx0XHRcdFx0aW5wdXQuc2V0QXR0cmlidXRlKCAnYXJpYS1kZXNjcmliZWRieScsIG5vdGUuaWQgKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0aW5wdXQucmVtb3ZlQXR0cmlidXRlKCAnYXJpYS1kaXNhYmxlZCcgKTtcclxuXHRcdFx0XHRpbnB1dC5yZW1vdmVBdHRyaWJ1dGUoICdhcmlhLWRlc2NyaWJlZGJ5JyApO1xyXG5cdFx0XHRcdGlmICggbm90ZSApIG5vdGUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHN0YXRpYyBlbmZvcmNlX3NpbmdsZV9kZWZhdWx0KHBhbmVsLCBjbGlja2VkKSB7XHJcblx0XHRcdGlmICggdGhpcy5pc19tdWx0aXBsZV9lbmFibGVkKCBwYW5lbCApICkgcmV0dXJuO1xyXG5cclxuXHRcdFx0Y29uc3QgY2hlY2tzID0gcGFuZWw/LnF1ZXJ5U2VsZWN0b3JBbGwoIHRoaXMudWkudG9nZ2xlICk7XHJcblx0XHRcdGlmICggIWNoZWNrcz8ubGVuZ3RoICkgcmV0dXJuO1xyXG5cclxuXHRcdFx0aWYgKCBjbGlja2VkICYmIGNsaWNrZWQuY2hlY2tlZCApIHtcclxuXHRcdFx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCBjaGVja3MubGVuZ3RoOyBpKysgKSBpZiAoIGNoZWNrc1tpXSAhPT0gY2xpY2tlZCApIHtcclxuXHRcdFx0XHRcdGNoZWNrc1tpXS5jaGVja2VkID0gZmFsc2U7XHJcblx0XHRcdFx0XHRjaGVja3NbaV0uc2V0QXR0cmlidXRlKCAnYXJpYS1jaGVja2VkJywgJ2ZhbHNlJyApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRjbGlja2VkLnNldEF0dHJpYnV0ZSggJ2FyaWEtY2hlY2tlZCcsICd0cnVlJyApO1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0bGV0IGtlcHQgPSBmYWxzZTtcclxuXHRcdFx0Zm9yICggbGV0IGogPSAwOyBqIDwgY2hlY2tzLmxlbmd0aDsgaisrICkgaWYgKCBjaGVja3Nbal0uY2hlY2tlZCApIHtcclxuXHRcdFx0XHRpZiAoICFrZXB0ICkge1xyXG5cdFx0XHRcdFx0a2VwdCA9IHRydWU7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGNoZWNrc1tqXS5jaGVja2VkID0gZmFsc2U7XHJcblx0XHRcdFx0XHRjaGVja3Nbal0uc2V0QXR0cmlidXRlKCAnYXJpYS1jaGVja2VkJywgJ2ZhbHNlJyApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0dGhpcy5zeW5jX2RlZmF1bHRfdmFsdWVfbG9jayggcGFuZWwgKTtcclxuXHRcdFx0dGhpcy5zeW5jX3BsYWNlaG9sZGVyX2xvY2soIHBhbmVsICk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gLS0tLSBvbmUtdGltZSBib290c3RyYXAgb2YgYSBwYW5lbCAtLS0tXHJcblx0XHRzdGF0aWMgYm9vdHN0cmFwX3BhbmVsKHBhbmVsKSB7XHJcblx0XHRcdGlmICggIXBhbmVsICkgcmV0dXJuO1xyXG5cdFx0XHRpZiAoICFwYW5lbC5xdWVyeVNlbGVjdG9yKCAnLndwYmNfYmZiX19vcHRpb25zX2VkaXRvcicgKSApIHJldHVybjsgLy8gb25seSBzZWxlY3QtbGlrZSBVSXNcclxuXHRcdFx0aWYgKCBwYW5lbC5kYXRhc2V0LnNlbGVjdGJhc2VfYm9vdHN0cmFwcGVkID09PSAnMScgKSB7XHJcblx0XHRcdFx0dGhpcy5lbnN1cmVfc29ydGFibGUoIHBhbmVsICk7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHR0aGlzLnJlYnVpbGRfaWZfZW1wdHkoIHBhbmVsICk7XHJcblx0XHRcdHRoaXMuZW5zdXJlX3NvcnRhYmxlKCBwYW5lbCApO1xyXG5cdFx0XHRwYW5lbC5kYXRhc2V0LnNlbGVjdGJhc2VfYm9vdHN0cmFwcGVkID0gJzEnO1xyXG5cclxuXHRcdFx0dGhpcy5zeW5jX2RlZmF1bHRfdmFsdWVfbG9jayggcGFuZWwgKTtcclxuXHRcdFx0dGhpcy5zeW5jX3BsYWNlaG9sZGVyX2xvY2soIHBhbmVsICk7XHJcblx0XHRcdHRoaXMuc3luY192YWx1ZV9pbnB1dHNfdmlzaWJpbGl0eSggcGFuZWwgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyAtLS0tIGhvb2sgaW50byBpbnNwZWN0b3IgbGlmZWN5Y2xlIChmaXJlcyBPTkNFKSAtLS0tXHJcblx0XHRzdGF0aWMgd2lyZV9vbmNlKCkge1xyXG5cdFx0XHRpZiAoIENvcmUuX19zZWxlY3RiYXNlX3dpcmVkICkgcmV0dXJuO1xyXG5cdFx0XHRDb3JlLl9fc2VsZWN0YmFzZV93aXJlZCA9IHRydWU7XHJcblxyXG5cdFx0XHRjb25zdCBvbl9yZWFkeV9vcl9yZW5kZXIgPSAoZXYpID0+IHtcclxuXHRcdFx0XHRjb25zdCBwYW5lbCA9IGV2Py5kZXRhaWw/LnBhbmVsO1xyXG5cdFx0XHRcdGNvbnN0IGZpZWxkID0gZXY/LmRldGFpbD8uZWwgfHwgZXY/LmRldGFpbD8uZmllbGQgfHwgbnVsbDtcclxuXHRcdFx0XHRpZiAoICFwYW5lbCApIHJldHVybjtcclxuXHRcdFx0XHRpZiAoIGZpZWxkICkgcGFuZWwuX19zZWxlY3RiYXNlX2ZpZWxkID0gZmllbGQ7XHJcblx0XHRcdFx0dGhpcy5ib290c3RyYXBfcGFuZWwoIHBhbmVsICk7XHJcblx0XHRcdFx0Ly8gSWYgdGhlIGluc3BlY3RvciByb290IHdhcyByZW1vdW50ZWQsIGVuc3VyZSByb290IGxpc3RlbmVycyBhcmUgKHJlKWJvdW5kLlxyXG5cdFx0XHRcdHRoaXMud2lyZV9yb290X2xpc3RlbmVycygpO1xyXG5cdFx0XHR9O1xyXG5cclxuXHRcdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggJ3dwYmNfYmZiX2luc3BlY3Rvcl9yZWFkeScsIG9uX3JlYWR5X29yX3JlbmRlciApO1xyXG5cdFx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCAnd3BiY19iZmJfaW5zcGVjdG9yX3JlbmRlcicsIG9uX3JlYWR5X29yX3JlbmRlciApO1xyXG5cclxuXHRcdFx0dGhpcy53aXJlX3Jvb3RfbGlzdGVuZXJzKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0c3RhdGljIHdpcmVfcm9vdF9saXN0ZW5lcnMoKSB7XHJcblxyXG5cdFx0XHQvLyBJZiBhbHJlYWR5IHdpcmVkIEFORCB0aGUgc3RvcmVkIHJvb3QgaXMgc3RpbGwgaW4gdGhlIERPTSwgYmFpbCBvdXQuXHJcblx0XHRcdGlmICggdGhpcy5fX3Jvb3Rfd2lyZWQgJiYgdGhpcy5fX3Jvb3Rfbm9kZT8uaXNDb25uZWN0ZWQgKSByZXR1cm47XHJcblxyXG5cdFx0XHRjb25zdCByb290ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICd3cGJjX2JmYl9faW5zcGVjdG9yJyApO1xyXG5cdFx0XHRpZiAoICFyb290ICkge1xyXG5cdFx0XHRcdC8vIFJvb3QgbWlzc2luZyAoZS5nLiwgU1BBIHJlLXJlbmRlcikg4oCUIGNsZWFyIGZsYWdzIHNvIHdlIGNhbiB3aXJlIGxhdGVyLlxyXG5cdFx0XHRcdHRoaXMuX19yb290X3dpcmVkID0gZmFsc2U7XHJcblx0XHRcdFx0dGhpcy5fX3Jvb3Rfbm9kZSAgPSBudWxsO1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0dGhpcy5fX3Jvb3Rfbm9kZSAgICAgICAgICAgICAgICAgICA9IHJvb3Q7XHJcblx0XHRcdHRoaXMuX19yb290X3dpcmVkICAgICAgICAgICAgICAgICAgPSB0cnVlO1xyXG5cdFx0XHRyb290LmRhdGFzZXQuc2VsZWN0YmFzZV9yb290X3dpcmVkID0gJzEnO1xyXG5cclxuXHRcdFx0Y29uc3QgZ2V0X3BhbmVsID0gKHRhcmdldCkgPT5cclxuXHRcdFx0XHR0YXJnZXQ/LmNsb3Nlc3Q/LiggJy53cGJjX2JmYl9faW5zcGVjdG9yX19ib2R5JyApIHx8XHJcblx0XHRcdFx0cm9vdC5xdWVyeVNlbGVjdG9yKCAnLndwYmNfYmZiX19pbnNwZWN0b3JfX2JvZHknICkgfHwgbnVsbDtcclxuXHJcblx0XHRcdC8vIENsaWNrIGhhbmRsZXJzOiBhZGQgLyBkZWxldGUgLyBkdXBsaWNhdGVcclxuXHRcdFx0cm9vdC5hZGRFdmVudExpc3RlbmVyKCAnY2xpY2snLCAoZSkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHBhbmVsID0gZ2V0X3BhbmVsKCBlLnRhcmdldCApO1xyXG5cdFx0XHRcdGlmICggIXBhbmVsICkgcmV0dXJuO1xyXG5cclxuXHRcdFx0XHR0aGlzLmJvb3RzdHJhcF9wYW5lbCggcGFuZWwgKTtcclxuXHJcblx0XHRcdFx0Y29uc3QgdWkgPSB0aGlzLnVpO1xyXG5cclxuXHRcdFx0XHQvLyBFeGlzdGluZyBcIkFkZCBvcHRpb25cIiBidXR0b24gKHRvcCB0b29sYmFyKVxyXG5cdFx0XHRcdGNvbnN0IGFkZCA9IGUudGFyZ2V0LmNsb3Nlc3Q/LiggdWkuYWRkX2J0biApO1xyXG5cdFx0XHRcdGlmICggYWRkICkge1xyXG5cdFx0XHRcdFx0dGhpcy5hcHBlbmRfcm93KCBwYW5lbCwgeyBsYWJlbDogJycsIHZhbHVlOiAnJywgc2VsZWN0ZWQ6IGZhbHNlIH0gKTtcclxuXHRcdFx0XHRcdHRoaXMuY29tbWl0X29wdGlvbnMoIHBhbmVsICk7XHJcblx0XHRcdFx0XHR0aGlzLnN5bmNfdmFsdWVfaW5wdXRzX3Zpc2liaWxpdHkoIHBhbmVsICk7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBEcm9wZG93biBtZW51IGFjdGlvbnMuXHJcblx0XHRcdFx0Y29uc3QgbWVudV9hY3Rpb24gPSBlLnRhcmdldC5jbG9zZXN0Py4oIHVpLm1lbnVfYWN0aW9uICk7XHJcblx0XHRcdFx0aWYgKCBtZW51X2FjdGlvbiApIHtcclxuXHRcdFx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcclxuXHRcdFx0XHRcdGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG5cdFx0XHRcdFx0Y29uc3QgYWN0aW9uID0gKG1lbnVfYWN0aW9uLmdldEF0dHJpYnV0ZSggJ2RhdGEtYWN0aW9uJyApIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xyXG5cdFx0XHRcdFx0Y29uc3Qgcm93ICAgID0gbWVudV9hY3Rpb24uY2xvc2VzdD8uKCB1aS5yb3cgKTtcclxuXHJcblx0XHRcdFx0XHRpZiAoICFyb3cgKSB7XHJcblx0XHRcdFx0XHRcdHRoaXMuY2xvc2VfZHJvcGRvd24oIG1lbnVfYWN0aW9uICk7XHJcblx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAoICdhZGRfYWZ0ZXInID09PSBhY3Rpb24gKSB7XHJcblx0XHRcdFx0XHRcdC8vIEFkZCBlbXB0eSByb3cgYWZ0ZXIgY3VycmVudFxyXG5cdFx0XHRcdFx0XHRjb25zdCBwcmV2X2NvdW50ID0gdGhpcy5nZXRfbGlzdCggcGFuZWwgKT8uY2hpbGRyZW4ubGVuZ3RoIHx8IDA7XHJcblx0XHRcdFx0XHRcdHRoaXMuYXBwZW5kX3JvdyggcGFuZWwsIHsgbGFiZWw6ICcnLCB2YWx1ZTogJycsIHNlbGVjdGVkOiBmYWxzZSB9ICk7XHJcblx0XHRcdFx0XHRcdC8vIE1vdmUgdGhlIG5ld2x5IGFkZGVkIGxhc3Qgcm93IGp1c3QgYWZ0ZXIgY3VycmVudCByb3cgdG8gcHJlc2VydmUgXCJhZGQgYWZ0ZXJcIlxyXG5cdFx0XHRcdFx0XHRjb25zdCBsaXN0ID0gdGhpcy5nZXRfbGlzdCggcGFuZWwgKTtcclxuXHRcdFx0XHRcdFx0aWYgKCBsaXN0ICYmIGxpc3QubGFzdEVsZW1lbnRDaGlsZCAmJiBsaXN0Lmxhc3RFbGVtZW50Q2hpbGQgIT09IHJvdyApIHtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmluc2VydF9hZnRlciggbGlzdC5sYXN0RWxlbWVudENoaWxkLCByb3cgKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR0aGlzLmNvbW1pdF9vcHRpb25zKCBwYW5lbCApO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnN5bmNfdmFsdWVfaW5wdXRzX3Zpc2liaWxpdHkoIHBhbmVsICk7XHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCAnZHVwbGljYXRlJyA9PT0gYWN0aW9uICkge1xyXG5cdFx0XHRcdFx0XHRjb25zdCBsYmwgPSAocm93LnF1ZXJ5U2VsZWN0b3IoIHVpLmxhYmVsICkgfHwge30pLnZhbHVlIHx8ICcnO1xyXG5cdFx0XHRcdFx0XHRjb25zdCB2YWwgPSAocm93LnF1ZXJ5U2VsZWN0b3IoIHVpLnZhbHVlICkgfHwge30pLnZhbHVlIHx8ICcnO1xyXG5cdFx0XHRcdFx0XHRjb25zdCBzZWwgPSAhISgocm93LnF1ZXJ5U2VsZWN0b3IoIHVpLnRvZ2dsZSApIHx8IHt9KS5jaGVja2VkKTtcclxuXHRcdFx0XHRcdFx0dGhpcy5hcHBlbmRfcm93KCBwYW5lbCwgeyBsYWJlbDogbGJsLCB2YWx1ZTogdmFsLCBzZWxlY3RlZDogc2VsLCB1aWQ6IHRoaXMubWFrZV91aWQoKSB9ICk7XHJcblx0XHRcdFx0XHRcdC8vIFBsYWNlIHRoZSBuZXcgcm93IHJpZ2h0IGFmdGVyIHRoZSBjdXJyZW50LlxyXG5cdFx0XHRcdFx0XHRjb25zdCBsaXN0ID0gdGhpcy5nZXRfbGlzdCggcGFuZWwgKTtcclxuXHJcblx0XHRcdFx0XHRcdGlmICggbGlzdCAmJiBsaXN0Lmxhc3RFbGVtZW50Q2hpbGQgJiYgbGlzdC5sYXN0RWxlbWVudENoaWxkICE9PSByb3cgKSB7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5pbnNlcnRfYWZ0ZXIoIGxpc3QubGFzdEVsZW1lbnRDaGlsZCwgcm93ICk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0dGhpcy5lbmZvcmNlX3NpbmdsZV9kZWZhdWx0KCBwYW5lbCwgbnVsbCApO1xyXG5cdFx0XHRcdFx0XHR0aGlzLmNvbW1pdF9vcHRpb25zKCBwYW5lbCApO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnN5bmNfdmFsdWVfaW5wdXRzX3Zpc2liaWxpdHkoIHBhbmVsICk7XHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCAncmVtb3ZlJyA9PT0gYWN0aW9uICkge1xyXG5cdFx0XHRcdFx0XHRpZiAoIHJvdyAmJiByb3cucGFyZW50Tm9kZSApIHJvdy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCByb3cgKTtcclxuXHRcdFx0XHRcdFx0dGhpcy5jb21taXRfb3B0aW9ucyggcGFuZWwgKTtcclxuXHRcdFx0XHRcdFx0dGhpcy5zeW5jX3ZhbHVlX2lucHV0c192aXNpYmlsaXR5KCBwYW5lbCApO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdHRoaXMuY2xvc2VfZHJvcGRvd24oIG1lbnVfYWN0aW9uICk7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0fSwgdHJ1ZSApO1xyXG5cclxuXHJcblx0XHRcdC8vIElucHV0IGRlbGVnYXRpb24uXHJcblx0XHRcdHJvb3QuYWRkRXZlbnRMaXN0ZW5lciggJ2lucHV0JywgKGUpID0+IHtcclxuXHRcdFx0XHRjb25zdCBwYW5lbCA9IGdldF9wYW5lbCggZS50YXJnZXQgKTtcclxuXHRcdFx0XHRpZiAoICEgcGFuZWwgKSB7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGNvbnN0IHVpICAgICAgICAgICAgICAgID0gdGhpcy51aTtcclxuXHRcdFx0XHRjb25zdCBpc19sYWJlbF9vcl92YWx1ZSA9IGUudGFyZ2V0LmNsYXNzTGlzdD8uY29udGFpbnMoICd3cGJjX2JmYl9fb3B0LWxhYmVsJyApIHx8IGUudGFyZ2V0LmNsYXNzTGlzdD8uY29udGFpbnMoICd3cGJjX2JmYl9fb3B0LXZhbHVlJyApO1xyXG5cdFx0XHRcdGNvbnN0IGlzX3RvZ2dsZSAgICAgICAgID0gZS50YXJnZXQuY2xhc3NMaXN0Py5jb250YWlucyggJ3dwYmNfYmZiX19vcHQtc2VsZWN0ZWQtY2hrJyApO1xyXG5cdFx0XHRcdGNvbnN0IGlzX211bHRpcGxlICAgICAgID0gZS50YXJnZXQubWF0Y2hlcz8uKCB1aS5tdWx0aXBsZV9jaGsgKTtcclxuXHRcdFx0XHRjb25zdCBpc19kZWZhdWx0X3RleHQgICA9IGUudGFyZ2V0Lm1hdGNoZXM/LiggdWkuZGVmYXVsdF90ZXh0ICk7XHJcblx0XHRcdFx0Y29uc3QgaXNfdmFsdWVfZGlmZmVycyAgPSBlLnRhcmdldC5tYXRjaGVzPy4oIHVpLnZhbHVlX2RpZmZlcnNfY2hrICk7XHJcblxyXG5cdFx0XHRcdC8vIEhhbmRsZSBcInZhbHVlIGRpZmZlcnNcIiB0b2dnbGUgbGl2ZVxyXG5cdFx0XHRcdGlmICggaXNfdmFsdWVfZGlmZmVycyApIHtcclxuXHRcdFx0XHRcdHRoaXMuc3luY192YWx1ZV9pbnB1dHNfdmlzaWJpbGl0eSggcGFuZWwgKTtcclxuXHRcdFx0XHRcdHRoaXMuY29tbWl0X29wdGlvbnMoIHBhbmVsICk7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBUcmFjayB3aGVuIHRoZSB1c2VyIGVkaXRzIFZBTFVFIGV4cGxpY2l0bHlcclxuXHRcdFx0XHRpZiAoIGUudGFyZ2V0LmNsYXNzTGlzdD8uY29udGFpbnMoICd3cGJjX2JmYl9fb3B0LXZhbHVlJyApICkge1xyXG5cdFx0XHRcdFx0Y29uc3Qgcm93ID0gZS50YXJnZXQuY2xvc2VzdCggdGhpcy51aS5yb3cgKTtcclxuXHRcdFx0XHRcdHRoaXMubWFya19yb3dfdmFsdWVfdXNlcl90b3VjaGVkKCByb3cgKTtcclxuXHRcdFx0XHRcdC8vIEtlZXAgdGhlIGNhY2hlIHVwZGF0ZWQgc28gdG9nZ2xpbmcgT0ZGL09OIGxhdGVyIHJlc3RvcmVzIHRoZSBsYXRlc3QgY3VzdG9tIHZhbHVlXHJcblx0XHRcdFx0XHRlLnRhcmdldC5kYXRhc2V0LmNhY2hlZF92YWx1ZSA9IGUudGFyZ2V0LnZhbHVlIHx8ICcnO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gQXV0by1maWxsIFZBTFVFIGZyb20gTEFCRUwgaWYgdmFsdWUgaXMgZnJlc2ggKGFuZCBkaWZmZXJzIGlzIE9OKTsgaWYgZGlmZmVycyBpcyBPRkYsIHdlIG1pcnJvciBhbnl3YXkgaW4gY29tbWl0XHJcblx0XHRcdFx0aWYgKCBlLnRhcmdldC5jbGFzc0xpc3Q/LmNvbnRhaW5zKCAnd3BiY19iZmJfX29wdC1sYWJlbCcgKSApIHtcclxuXHRcdFx0XHRcdGNvbnN0IHJvdyAgICAgPSBlLnRhcmdldC5jbG9zZXN0KCB1aS5yb3cgKTtcclxuXHRcdFx0XHRcdGNvbnN0IHZhbF9pbiAgPSByb3c/LnF1ZXJ5U2VsZWN0b3IoIHVpLnZhbHVlICk7XHJcblx0XHRcdFx0XHRjb25zdCBkaWZmZXJzID0gdGhpcy5pc192YWx1ZV9kaWZmZXJzX2VuYWJsZWQoIHBhbmVsICk7XHJcblxyXG5cdFx0XHRcdFx0aWYgKCB2YWxfaW4gKSB7XHJcblx0XHRcdFx0XHRcdGlmICggIWRpZmZlcnMgKSB7XHJcblx0XHRcdFx0XHRcdFx0Ly8gc2luZ2xlLWlucHV0IG1vZGU6IG1pcnJvciBodW1hbiBsYWJlbCB3aXRoIG1pbmltYWwgZXNjYXBpbmdcclxuXHRcdFx0XHRcdFx0XHR2YWxfaW4udmFsdWUgPSB0aGlzLmJ1aWxkX3ZhbHVlX2Zyb21fbGFiZWwoIGUudGFyZ2V0LnZhbHVlLCBmYWxzZSApO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCAhdGhpcy5pc19yb3dfdmFsdWVfdXNlcl90b3VjaGVkKCByb3cgKSApIHtcclxuXHRcdFx0XHRcdFx0XHQvLyBzZXBhcmF0ZS12YWx1ZSBtb2RlLCBvbmx5IHdoaWxlIGZyZXNoXHJcblx0XHRcdFx0XHRcdFx0dmFsX2luLnZhbHVlID0gdGhpcy5idWlsZF92YWx1ZV9mcm9tX2xhYmVsKCBlLnRhcmdldC52YWx1ZSwgdHJ1ZSApO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cclxuXHJcblx0XHRcdFx0aWYgKCBpc19sYWJlbF9vcl92YWx1ZSB8fCBpc190b2dnbGUgfHwgaXNfbXVsdGlwbGUgKSB7XHJcblx0XHRcdFx0XHRpZiAoIGlzX3RvZ2dsZSApIGUudGFyZ2V0LnNldEF0dHJpYnV0ZSggJ2FyaWEtY2hlY2tlZCcsIGUudGFyZ2V0LmNoZWNrZWQgPyAndHJ1ZScgOiAnZmFsc2UnICk7XHJcblx0XHRcdFx0XHRpZiAoIGlzX3RvZ2dsZSB8fCBpc19tdWx0aXBsZSApIHRoaXMuZW5mb3JjZV9zaW5nbGVfZGVmYXVsdCggcGFuZWwsIGlzX3RvZ2dsZSA/IGUudGFyZ2V0IDogbnVsbCApO1xyXG5cdFx0XHRcdFx0dGhpcy5jb21taXRfb3B0aW9ucyggcGFuZWwgKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGlmICggaXNfZGVmYXVsdF90ZXh0ICkge1xyXG5cdFx0XHRcdFx0dGhpcy5zeW5jX2RlZmF1bHRfdmFsdWVfbG9jayggcGFuZWwgKTtcclxuXHRcdFx0XHRcdHRoaXMuc3luY19wbGFjZWhvbGRlcl9sb2NrKCBwYW5lbCApO1xyXG5cdFx0XHRcdFx0Y29uc3QgaG9sZGVyID0gdGhpcy5nZXRfaG9sZGVyKCBwYW5lbCApO1xyXG5cdFx0XHRcdFx0aWYgKCBob2xkZXIgKSB7XHJcblx0XHRcdFx0XHRcdGhvbGRlci5kaXNwYXRjaEV2ZW50KCBuZXcgRXZlbnQoICdpbnB1dCcsIHsgYnViYmxlczogdHJ1ZSB9ICkgKTtcclxuXHRcdFx0XHRcdFx0aG9sZGVyLmRpc3BhdGNoRXZlbnQoIG5ldyBFdmVudCggJ2NoYW5nZScsIHsgYnViYmxlczogdHJ1ZSB9ICkgKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sIHRydWUgKTtcclxuXHJcblxyXG5cdFx0XHQvLyBDaGFuZ2UgZGVsZWdhdGlvblxyXG5cdFx0XHRyb290LmFkZEV2ZW50TGlzdGVuZXIoICdjaGFuZ2UnLCAoZSkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHBhbmVsID0gZ2V0X3BhbmVsKCBlLnRhcmdldCApO1xyXG5cdFx0XHRcdGlmICggIXBhbmVsICkgcmV0dXJuO1xyXG5cclxuXHRcdFx0XHRjb25zdCB1aSAgICAgICAgPSB0aGlzLnVpO1xyXG5cdFx0XHRcdGNvbnN0IGlzX3RvZ2dsZSA9IGUudGFyZ2V0LmNsYXNzTGlzdD8uY29udGFpbnMoICd3cGJjX2JmYl9fb3B0LXNlbGVjdGVkLWNoaycgKTtcclxuXHRcdFx0XHRjb25zdCBpc19tdWx0aSAgPSBlLnRhcmdldC5tYXRjaGVzPy4oIHVpLm11bHRpcGxlX2NoayApO1xyXG5cdFx0XHRcdGlmICggIWlzX3RvZ2dsZSAmJiAhaXNfbXVsdGkgKSByZXR1cm47XHJcblxyXG5cdFx0XHRcdGlmICggaXNfdG9nZ2xlICkgZS50YXJnZXQuc2V0QXR0cmlidXRlKCAnYXJpYS1jaGVja2VkJywgZS50YXJnZXQuY2hlY2tlZCA/ICd0cnVlJyA6ICdmYWxzZScgKTtcclxuXHRcdFx0XHR0aGlzLmVuZm9yY2Vfc2luZ2xlX2RlZmF1bHQoIHBhbmVsLCBpc190b2dnbGUgPyBlLnRhcmdldCA6IG51bGwgKTtcclxuXHRcdFx0XHR0aGlzLmNvbW1pdF9vcHRpb25zKCBwYW5lbCApO1xyXG5cdFx0XHR9LCB0cnVlICk7XHJcblxyXG5cdFx0XHQvLyBMYXp5IGJvb3RzdHJhcFxyXG5cdFx0XHRyb290LmFkZEV2ZW50TGlzdGVuZXIoICdtb3VzZWVudGVyJywgKGUpID0+IHtcclxuXHRcdFx0XHRjb25zdCBwYW5lbCA9IGdldF9wYW5lbCggZS50YXJnZXQgKTtcclxuXHRcdFx0XHRpZiAoIHBhbmVsICYmIGUudGFyZ2V0Py5jbG9zZXN0Py4oIHRoaXMudWkubGlzdCApICkgdGhpcy5ib290c3RyYXBfcGFuZWwoIHBhbmVsICk7XHJcblx0XHRcdH0sIHRydWUgKTtcclxuXHJcblx0XHRcdHJvb3QuYWRkRXZlbnRMaXN0ZW5lciggJ21vdXNlZG93bicsIChlKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgcGFuZWwgPSBnZXRfcGFuZWwoIGUudGFyZ2V0ICk7XHJcblx0XHRcdFx0aWYgKCBwYW5lbCAmJiBlLnRhcmdldD8uY2xvc2VzdD8uKCB0aGlzLnVpLmRyYWdfaGFuZGxlICkgKSB0aGlzLmJvb3RzdHJhcF9wYW5lbCggcGFuZWwgKTtcclxuXHRcdFx0fSwgdHJ1ZSApO1xyXG5cdFx0fVxyXG5cclxuXHR9O1xyXG5cclxuXHR0cnkgeyBDb3JlLldQQkNfQkZCX1NlbGVjdF9CYXNlLndpcmVfb25jZSgpOyB9IGNhdGNoIChfKSB7fVxyXG5cdC8vIFRyeSBpbW1lZGlhdGVseSAoaWYgcm9vdCBpcyBhbHJlYWR5IGluIERPTSksIHRoZW4gYWdhaW4gb24gRE9NQ29udGVudExvYWRlZC5cclxuXHRDb3JlLldQQkNfQkZCX1NlbGVjdF9CYXNlLndpcmVfcm9vdF9saXN0ZW5lcnMoKTtcclxuXHJcblx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsICgpID0+IHsgQ29yZS5XUEJDX0JGQl9TZWxlY3RfQmFzZS53aXJlX3Jvb3RfbGlzdGVuZXJzKCk7ICB9KTtcclxuXHJcbn0oIHdpbmRvdyApKTsiLCIvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuLy8gPT0gRmlsZSAgL2luY2x1ZGVzL3BhZ2UtZm9ybS1idWlsZGVyL19vdXQvY29yZS9iZmItdWkuanMgPT0gfCAyMDI1LTA5LTEwIDE1OjQ3XHJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4oZnVuY3Rpb24gKHcsIGQpIHtcclxuXHQndXNlIHN0cmljdCc7XHJcblxyXG5cdC8vIFNpbmdsZSBnbG9iYWwgbmFtZXNwYWNlIChpZGVtcG90ZW50ICYgbG9hZC1vcmRlciBzYWZlKS5cclxuXHRjb25zdCBDb3JlID0gKHcuV1BCQ19CRkJfQ29yZSA9IHcuV1BCQ19CRkJfQ29yZSB8fCB7fSk7XHJcblx0Y29uc3QgVUkgICA9IChDb3JlLlVJID0gQ29yZS5VSSB8fCB7fSk7XHJcblxyXG5cdC8vIC0tLSBIaWdobGlnaHQgRWxlbWVudCwgIGxpa2UgR2VuZXJhdG9yIGJybiAgLSAgVGlueSBVSSBoZWxwZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdFVJLl9wdWxzZV90aW1lcnMgPSBVSS5fcHVsc2VfdGltZXJzIHx8IG5ldyBNYXAoKTsgLy8gZWwgLT4gdGltZXJfaWRcclxuXHRVSS5fcHVsc2VfbWV0YSAgID0gVUkuX3B1bHNlX21ldGEgICB8fCBuZXcgTWFwKCk7IC8vIGVsIC0+IHsgdG9rZW4sIGxhc3RfdHMsIGRlYm91bmNlX2lkLCBjb2xvcl9zZXQgfVxyXG5cdC8vIFB1bHNlIHR1bmluZyAobWlsbGlzZWNvbmRzKS5cclxuXHRVSS5QVUxTRV9USFJPVFRMRV9NUyAgPSBOdW1iZXIuaXNGaW5pdGUoIFVJLlBVTFNFX1RIUk9UVExFX01TICkgPyBVSS5QVUxTRV9USFJPVFRMRV9NUyA6IDUwMDtcclxuXHRVSS5QVUxTRV9ERUJPVU5DRV9NUyAgPSBOdW1iZXIuaXNGaW5pdGUoIFVJLlBVTFNFX0RFQk9VTkNFX01TICkgPyBVSS5QVUxTRV9ERUJPVU5DRV9NUyA6IDc1MDtcclxuXHJcblx0Ly8gRGVib3VuY2UgU1RSVUNUVVJFX0NIQU5HRSBmb3IgY29udGludW91cyBpbnNwZWN0b3IgY29udHJvbHMgKHNsaWRlcnMgLyBzY3J1YmJpbmcpLlxyXG5cdC8vIFR1bmU6IDE4MC4uMzUwIGlzIHVzdWFsbHkgYSBzd2VldCBzcG90LlxyXG5cdFVJLlNUUlVDVFVSRV9DSEFOR0VfREVCT1VOQ0VfTVMgPSBOdW1iZXIuaXNGaW5pdGUoIFVJLlNUUlVDVFVSRV9DSEFOR0VfREVCT1VOQ0VfTVMgKSA/IFVJLlNUUlVDVFVSRV9DSEFOR0VfREVCT1VOQ0VfTVMgOiAxODA7XHJcblx0Ly8gQ2hhbmdlIHRoaXMgdG8gdHVuZSBzcGVlZDogNTAuLjEyMCBtcyBpcyBhIGdvb2QgcmFuZ2UuIENhbiBiZSBjb25maWd1cmVkIGluIDxkaXYgZGF0YS1sZW4tZ3JvdXAgZGF0YS1sZW4tdGhyb3R0bGU9XCIxODBcIj4uLi48L2Rpdj4uXHJcblx0VUkuVkFMVUVfU0xJREVSX1RIUk9UVExFX01TID0gTnVtYmVyLmlzRmluaXRlKCBVSS5WQUxVRV9TTElERVJfVEhST1RUTEVfTVMgKSA/IFVJLlZBTFVFX1NMSURFUl9USFJPVFRMRV9NUyA6IDEyMDtcclxuXHJcblx0LyoqXHJcblx0ICogQ2FuY2VsIGFueSBydW5uaW5nIHB1bHNlIHNlcXVlbmNlIGZvciBhbiBlbGVtZW50LlxyXG5cdCAqIFVzZXMgdG9rZW4gaW52YWxpZGF0aW9uIHNvIGFscmVhZHktc2NoZWR1bGVkIGNhbGxiYWNrcyBiZWNvbWUgbm8tb3BzLlxyXG5cdCAqXHJcblx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxcclxuXHQgKi9cclxuXHRVSS5jYW5jZWxfcHVsc2UgPSBmdW5jdGlvbiAoZWwpIHtcclxuXHRcdGlmICggIWVsICkgeyByZXR1cm47IH1cclxuXHRcdHRyeSB7XHJcblx0XHRcdGNsZWFyVGltZW91dCggVUkuX3B1bHNlX3RpbWVycy5nZXQoIGVsICkgKTtcclxuXHRcdH0gY2F0Y2ggKCBfICkge31cclxuXHRcdFVJLl9wdWxzZV90aW1lcnMuZGVsZXRlKCBlbCApO1xyXG5cclxuXHRcdHZhciBtZXRhID0gVUkuX3B1bHNlX21ldGEuZ2V0KCBlbCApIHx8IHt9O1xyXG5cdFx0bWV0YS50b2tlbiA9IChOdW1iZXIuaXNGaW5pdGUoIG1ldGEudG9rZW4gKSA/IG1ldGEudG9rZW4gOiAwKSArIDE7XHJcblx0XHRtZXRhLmNvbG9yX3NldCA9IGZhbHNlO1xyXG5cdFx0dHJ5IHsgZWwuY2xhc3NMaXN0LnJlbW92ZSggJ3dwYmNfYmZiX19zY3JvbGwtcHVsc2UnLCAnd3BiY19iZmJfX2hpZ2hsaWdodC1wdWxzZScgKTsgfSBjYXRjaCAoIF8gKSB7fVxyXG5cdFx0dHJ5IHsgZWwuc3R5bGUucmVtb3ZlUHJvcGVydHkoICctLXdwYmMtYmZiLXB1bHNlLWNvbG9yJyApOyB9IGNhdGNoICggXyApIHt9XHJcblx0XHRVSS5fcHVsc2VfbWV0YS5zZXQoIGVsLCBtZXRhICk7XHJcblx0XHR0cnkgeyBjbGVhclRpbWVvdXQoIG1ldGEuZGVib3VuY2VfaWQgKTsgfSBjYXRjaCAoIF8gKSB7fVxyXG5cdFx0bWV0YS5kZWJvdW5jZV9pZCA9IDA7XHJcblx0fTtcclxuXHJcblx0LyoqXHJcblx0ICogRm9yY2UtcmVzdGFydCBhIENTUyBhbmltYXRpb24gb24gYSBjbGFzcy5cclxuXHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbFxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBjbHNcclxuXHQgKi9cclxuXHRVSS5fcmVzdGFydF9jc3NfYW5pbWF0aW9uID0gZnVuY3Rpb24gKGVsLCBjbHMpIHtcclxuXHRcdGlmICggISBlbCApIHsgcmV0dXJuOyB9XHJcblx0XHR0cnkge1xyXG5cdFx0XHRlbC5jbGFzc0xpc3QucmVtb3ZlKCBjbHMgKTtcclxuXHRcdH0gY2F0Y2ggKCBfICkge31cclxuXHRcdC8vIEZvcmNlIHJlZmxvdyBzbyB0aGUgbmV4dCBhZGQoKSByZXRyaWdnZXJzIHRoZSBrZXlmcmFtZXMuXHJcblx0XHR2b2lkIGVsLm9mZnNldFdpZHRoO1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0ZWwuY2xhc3NMaXN0LmFkZCggY2xzICk7XHJcblx0XHR9IGNhdGNoICggXyApIHt9XHJcblx0fTtcclxuXHJcblx0LyoqXHJcblx0XHRTaW5nbGUgcHVsc2UgKGJhY2stY29tcGF0KS5cclxuXHRcdEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsXHJcblx0XHRAcGFyYW0ge251bWJlcn0gZHVyX21zXHJcblx0ICovXHJcblx0VUkucHVsc2Vfb25jZSA9IGZ1bmN0aW9uIChlbCwgZHVyX21zKSB7XHJcblx0XHRpZiAoICEgZWwgKSB7IHJldHVybjsgfVxyXG5cdFx0dmFyIGNscyA9ICd3cGJjX2JmYl9fc2Nyb2xsLXB1bHNlJztcclxuXHRcdHZhciBtcyAgPSBOdW1iZXIuaXNGaW5pdGUoIGR1cl9tcyApID8gZHVyX21zIDogNzAwO1xyXG5cclxuXHRcdFVJLmNhbmNlbF9wdWxzZSggZWwgKTtcclxuXHJcblx0XHR2YXIgbWV0YSAgPSBVSS5fcHVsc2VfbWV0YS5nZXQoIGVsICkgfHwge307XHJcblx0XHR2YXIgdG9rZW4gPSAoTnVtYmVyLmlzRmluaXRlKCBtZXRhLnRva2VuICkgPyBtZXRhLnRva2VuIDogMCkgKyAxO1xyXG5cdFx0bWV0YS50b2tlbiA9IHRva2VuO1xyXG5cdFx0VUkuX3B1bHNlX21ldGEuc2V0KCBlbCwgbWV0YSApO1xyXG5cclxuXHRcdFVJLl9yZXN0YXJ0X2Nzc19hbmltYXRpb24oIGVsLCBjbHMgKTtcclxuXHRcdHZhciB0ID0gc2V0VGltZW91dCggZnVuY3Rpb24gKCkge1xyXG5cdFx0XHQvLyBpZ25vcmUgaWYgYSBuZXdlciBwdWxzZSBzdGFydGVkLlxyXG5cdFx0XHR2YXIgbSA9IFVJLl9wdWxzZV9tZXRhLmdldCggZWwgKSB8fCB7fTtcclxuXHRcdFx0aWYgKCBtLnRva2VuICE9PSB0b2tlbiApIHsgcmV0dXJuOyB9XHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0ZWwuY2xhc3NMaXN0LnJlbW92ZSggY2xzICk7XHJcblx0XHRcdH0gY2F0Y2ggKCBfICkge31cclxuXHRcdFx0VUkuX3B1bHNlX3RpbWVycy5kZWxldGUoIGVsICk7XHJcblx0XHR9LCBtcyApO1xyXG5cdFx0VUkuX3B1bHNlX3RpbWVycy5zZXQoIGVsLCB0ICk7XHJcblx0fTtcclxuXHJcblx0LyoqXHJcblx0XHRNdWx0aS1ibGluayBzZXF1ZW5jZSB3aXRoIG9wdGlvbmFsIHBlci1jYWxsIGNvbG9yIG92ZXJyaWRlLlxyXG5cdFx0QHBhcmFtIHtIVE1MRWxlbWVudH0gZWxcclxuXHRcdEBwYXJhbSB7bnVtYmVyfSBbdGltZXM9M11cclxuXHRcdEBwYXJhbSB7bnVtYmVyfSBbb25fbXM9MjgwXVxyXG5cdFx0QHBhcmFtIHtudW1iZXJ9IFtvZmZfbXM9MTgwXVxyXG5cdFx0QHBhcmFtIHtzdHJpbmd9IFtoZXhfY29sb3JdIE9wdGlvbmFsIENTUyBjb2xvciAoZS5nLiAnI2ZmNGQ0Zicgb3IgJ3JnYiguLi4pJykuXHJcblx0ICovXHJcblx0VUkucHVsc2Vfc2VxdWVuY2UgPSBmdW5jdGlvbiAoZWwsIHRpbWVzLCBvbl9tcywgb2ZmX21zLCBoZXhfY29sb3IpIHtcclxuXHRcdGlmICggIWVsIHx8ICFkLmJvZHkuY29udGFpbnMoIGVsICkgKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdHZhciBjbHMgICA9ICd3cGJjX2JmYl9faGlnaGxpZ2h0LXB1bHNlJztcclxuXHRcdHZhciBjb3VudCA9IE51bWJlci5pc0Zpbml0ZSggdGltZXMgKSA/IHRpbWVzIDogMjtcclxuXHRcdHZhciBvbiAgICA9IE51bWJlci5pc0Zpbml0ZSggb25fbXMgKSA/IG9uX21zIDogMjgwO1xyXG5cdFx0dmFyIG9mZiAgID0gTnVtYmVyLmlzRmluaXRlKCBvZmZfbXMgKSA/IG9mZl9tcyA6IDE4MDtcclxuXHJcblx0XHQvLyBUaHJvdHRsZTogYXZvaWQgcmVmbG93IHNwYW0gaWYgY2FsbGVkIHJlcGVhdGVkbHkgd2hpbGUgdHlwaW5nL2RyYWdnaW5nLlxyXG5cdFx0dmFyIG1ldGEgPSBVSS5fcHVsc2VfbWV0YS5nZXQoIGVsICkgfHwge307XHJcblx0XHR2YXIgbm93ICA9IERhdGUubm93KCk7XHJcblx0XHR2YXIgdGhyb3R0bGVfbXMgPSBOdW1iZXIuaXNGaW5pdGUoIFVJLlBVTFNFX1RIUk9UVExFX01TICkgPyBVSS5QVUxTRV9USFJPVFRMRV9NUyA6IDEyMDtcclxuXHRcdGlmICggTnVtYmVyLmlzRmluaXRlKCBtZXRhLmxhc3RfdHMgKSAmJiAobm93IC0gbWV0YS5sYXN0X3RzKSA8IHRocm90dGxlX21zICkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRtZXRhLmxhc3RfdHMgPSBub3c7XHJcblxyXG5cdFx0Ly8gY2FuY2VsIGFueSBydW5uaW5nIHB1bHNlIGFuZCByZXNldCBjbGFzcyAodG9rZW4gaW52YWxpZGF0aW9uKS5cclxuXHRcdFVJLmNhbmNlbF9wdWxzZSggZWwgKTtcclxuXHJcblx0XHQvLyBuZXcgdG9rZW4gZm9yIHRoaXMgcnVuXHJcblx0XHR2YXIgdG9rZW4gPSAoTnVtYmVyLmlzRmluaXRlKCBtZXRhLnRva2VuICkgPyBtZXRhLnRva2VuIDogMCkgKyAxO1xyXG5cdFx0bWV0YS50b2tlbiA9IHRva2VuO1xyXG5cclxuXHRcdHZhciBoYXZlX2NvbG9yID0gISFoZXhfY29sb3IgJiYgdHlwZW9mIGhleF9jb2xvciA9PT0gJ3N0cmluZyc7XHJcblx0XHRpZiAoIGhhdmVfY29sb3IgKSB7XHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0ZWwuc3R5bGUuc2V0UHJvcGVydHkoICctLXdwYmMtYmZiLXB1bHNlLWNvbG9yJywgaGV4X2NvbG9yICk7XHJcblx0XHRcdH0gY2F0Y2ggKCBfICkge31cclxuXHRcdFx0bWV0YS5jb2xvcl9zZXQgPSB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0VUkuX3B1bHNlX21ldGEuc2V0KCBlbCwgbWV0YSApO1xyXG5cclxuXHRcdHZhciBpID0gMDtcclxuXHRcdChmdW5jdGlvbiB0aWNrKCkge1xyXG5cdFx0XHR2YXIgbSA9IFVJLl9wdWxzZV9tZXRhLmdldCggZWwgKSB8fCB7fTtcclxuXHRcdFx0aWYgKCBtLnRva2VuICE9PSB0b2tlbiApIHtcclxuXHRcdFx0XHQvLyBjYW5jZWxlZC9yZXBsYWNlZFxyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoIGkgPj0gY291bnQgKSB7XHJcblx0XHRcdFx0VUkuX3B1bHNlX3RpbWVycy5kZWxldGUoIGVsICk7XHJcblx0XHRcdFx0aWYgKCBoYXZlX2NvbG9yICkge1xyXG5cdFx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdFx0ZWwuc3R5bGUucmVtb3ZlUHJvcGVydHkoICctLXdwYmMtYmZiLXB1bHNlLWNvbG9yJyApO1xyXG5cdFx0XHRcdFx0fSBjYXRjaCAoIF8gKSB7fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0VUkuX3Jlc3RhcnRfY3NzX2FuaW1hdGlvbiggZWwsIGNscyApO1xyXG5cdFx0XHRVSS5fcHVsc2VfdGltZXJzLnNldCggZWwsIHNldFRpbWVvdXQoIGZ1bmN0aW9uICgpIHsgICAgIC8vIE9OIC0+IE9GRlxyXG5cdFx0XHRcdHZhciBtMiA9IFVJLl9wdWxzZV9tZXRhLmdldCggZWwgKSB8fCB7fTtcclxuXHRcdFx0XHRpZiAoIG0yLnRva2VuICE9PSB0b2tlbiApIHsgcmV0dXJuOyB9XHJcblx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdGVsLmNsYXNzTGlzdC5yZW1vdmUoIGNscyApO1xyXG5cdFx0XHRcdH0gY2F0Y2ggKCBfICkge1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRVSS5fcHVsc2VfdGltZXJzLnNldCggZWwsIHNldFRpbWVvdXQoIGZ1bmN0aW9uICgpIHsgLy8gT0ZGIGdhcCAtPiBuZXh0XHJcblx0XHRcdFx0XHR2YXIgbTMgPSBVSS5fcHVsc2VfbWV0YS5nZXQoIGVsICkgfHwge307XHJcblx0XHRcdFx0XHRpZiAoIG0zLnRva2VuICE9PSB0b2tlbiApIHsgcmV0dXJuOyB9XHJcblx0XHRcdFx0XHRpKys7XHJcblx0XHRcdFx0XHR0aWNrKCk7XHJcblx0XHRcdFx0fSwgb2ZmICkgKTtcclxuXHRcdFx0fSwgb24gKSApO1xyXG5cdFx0fSkoKTtcclxuXHR9O1xyXG5cclxuXHJcblx0LyoqXHJcblx0ICogRGVib3VuY2VkIHF1ZXJ5ICsgcHVsc2UuXHJcblx0ICogVXNlZnVsIGZvciBgaW5wdXRgIGV2ZW50cyAoc2xpZGVycyAvIHR5cGluZykgdG8gYXZvaWQgZm9yY2VkIHJlZmxvdyBzcGFtLlxyXG5cdCAqXHJcblx0ICogQHBhcmFtIHtIVE1MRWxlbWVudHxzdHJpbmd9IHJvb3Rfb3Jfc2VsZWN0b3JcclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3JcclxuXHQgKiBAcGFyYW0ge251bWJlcn0gd2FpdF9tc1xyXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSBbYV1cclxuXHQgKiBAcGFyYW0ge251bWJlcn0gW2JdXHJcblx0ICogQHBhcmFtIHtudW1iZXJ9IFtjXVxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBbY29sb3JdXHJcblx0ICovXHJcblx0VUkucHVsc2VfcXVlcnlfZGVib3VuY2VkID0gZnVuY3Rpb24gKHJvb3Rfb3Jfc2VsZWN0b3IsIHNlbGVjdG9yLCB3YWl0X21zLCBhLCBiLCBjLCBjb2xvcikge1xyXG5cdFx0dmFyIHJvb3QgPSAodHlwZW9mIHJvb3Rfb3Jfc2VsZWN0b3IgPT09ICdzdHJpbmcnKSA/IGQgOiAocm9vdF9vcl9zZWxlY3RvciB8fCBkKTtcclxuXHRcdHZhciBzZWwgID0gKHR5cGVvZiByb290X29yX3NlbGVjdG9yID09PSAnc3RyaW5nJykgPyByb290X29yX3NlbGVjdG9yIDogc2VsZWN0b3I7XHJcblx0XHRpZiAoICFzZWwgKSB7IHJldHVybjsgfVxyXG5cdFx0dmFyIGVsID0gcm9vdC5xdWVyeVNlbGVjdG9yKCBzZWwgKTtcclxuXHRcdGlmICggIWVsICkgeyByZXR1cm47IH1cclxuXHJcblx0XHR2YXIgZGVmX21zID0gTnVtYmVyLmlzRmluaXRlKCBVSS5QVUxTRV9ERUJPVU5DRV9NUyApID8gVUkuUFVMU0VfREVCT1VOQ0VfTVMgOiAxMjA7XHJcblx0XHR2YXIgbXMgICAgID0gTnVtYmVyLmlzRmluaXRlKCB3YWl0X21zICkgPyB3YWl0X21zIDogZGVmX21zO1xyXG5cdFx0dmFyIG1ldGEgPSBVSS5fcHVsc2VfbWV0YS5nZXQoIGVsICkgfHwge307XHJcblx0XHR0cnkgeyBjbGVhclRpbWVvdXQoIG1ldGEuZGVib3VuY2VfaWQgKTsgfSBjYXRjaCAoIF8gKSB7fVxyXG5cdFx0bWV0YS5kZWJvdW5jZV9pZCA9IHNldFRpbWVvdXQoIGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0VUkucHVsc2Vfc2VxdWVuY2UoIGVsLCBhLCBiLCBjLCBjb2xvciApO1xyXG5cdFx0fSwgbXMgKTtcclxuXHRcdFVJLl9wdWxzZV9tZXRhLnNldCggZWwsIG1ldGEgKTtcclxuXHR9O1xyXG5cclxuXHQvKipcclxuXHRcdFF1ZXJ5ICsgcHVsc2U6XHJcblx0XHQoQkMpIElmIG9ubHkgM3JkIGFyZyBpcyBhIG51bWJlciBhbmQgbm8gNHRoLzV0aCAtPiBzaW5nbGUgbG9uZyBwdWxzZS5cclxuXHRcdE90aGVyd2lzZSAtPiBzdHJvbmcgc2VxdWVuY2UgKGRlZmF1bHRzIDPDlzI4MC8xODApLlxyXG5cdFx0T3B0aW9uYWwgNnRoIGFyZzogY29sb3IuXHJcblx0XHRAcGFyYW0ge0hUTUxFbGVtZW50fHN0cmluZ30gcm9vdF9vcl9zZWxlY3RvclxyXG5cdFx0QHBhcmFtIHtzdHJpbmd9IFtzZWxlY3Rvcl1cclxuXHRcdEBwYXJhbSB7bnVtYmVyfSBbYV1cclxuXHRcdEBwYXJhbSB7bnVtYmVyfSBbYl1cclxuXHJcblx0XHRAcGFyYW0ge251bWJlcn0gW2NdXHJcblxyXG5cdFx0QHBhcmFtIHtzdHJpbmd9IFtjb2xvcl1cclxuXHQgKi9cclxuXHRVSS5wdWxzZV9xdWVyeSA9IGZ1bmN0aW9uIChyb290X29yX3NlbGVjdG9yLCBzZWxlY3RvciwgYSwgYiwgYywgY29sb3IpIHtcclxuXHRcdHZhciByb290ID0gKHR5cGVvZiByb290X29yX3NlbGVjdG9yID09PSAnc3RyaW5nJykgPyBkIDogKHJvb3Rfb3Jfc2VsZWN0b3IgfHwgZCk7XHJcblx0XHR2YXIgc2VsICA9ICh0eXBlb2Ygcm9vdF9vcl9zZWxlY3RvciA9PT0gJ3N0cmluZycpID8gcm9vdF9vcl9zZWxlY3RvciA6IHNlbGVjdG9yO1xyXG5cdFx0aWYgKCAhc2VsICkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0dmFyIGVsID0gcm9vdC5xdWVyeVNlbGVjdG9yKCBzZWwgKTtcclxuXHRcdGlmICggIWVsICkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG4vLyBCYWNrLWNvbXBhdDogVUkucHVsc2VRdWVyeShyb290LCBzZWwsIGR1cl9tcylcclxuXHRcdGlmICggTnVtYmVyLmlzRmluaXRlKCBhICkgJiYgYiA9PT0gdW5kZWZpbmVkICYmIGMgPT09IHVuZGVmaW5lZCApIHtcclxuXHRcdFx0cmV0dXJuIFVJLnB1bHNlX29uY2UoIGVsLCBhICk7XHJcblx0XHR9XHJcbi8vIE5ldzogc2VxdWVuY2U7IHBhcmFtcyBvcHRpb25hbDsgc3VwcG9ydHMgb3B0aW9uYWwgY29sb3IuXHJcblx0XHRVSS5wdWxzZV9zZXF1ZW5jZSggZWwsIGEsIGIsIGMsIGNvbG9yICk7XHJcblx0fTtcclxuXHJcblx0LyoqXHJcblx0Q29udmVuaWVuY2UgaGVscGVyIChzbmFrZV9jYXNlKSB0byBjYWxsIGEgc3Ryb25nIHB1bHNlIHdpdGggb3B0aW9ucy5cclxuXHJcblx0QHBhcmFtIHtIVE1MRWxlbWVudH0gZWxcclxuXHJcblx0QHBhcmFtIHtPYmplY3R9IFtvcHRzXVxyXG5cclxuXHRAcGFyYW0ge251bWJlcn0gW29wdHMudGltZXM9M11cclxuXHJcblx0QHBhcmFtIHtudW1iZXJ9IFtvcHRzLm9uX21zPTI4MF1cclxuXHJcblx0QHBhcmFtIHtudW1iZXJ9IFtvcHRzLm9mZl9tcz0xODBdXHJcblxyXG5cdEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5jb2xvcl1cclxuXHQgKi9cclxuXHRVSS5wdWxzZV9zZXF1ZW5jZV9zdHJvbmcgPSBmdW5jdGlvbiAoZWwsIG9wdHMpIHtcclxuXHRcdG9wdHMgPSBvcHRzIHx8IHt9O1xyXG5cdFx0VUkucHVsc2Vfc2VxdWVuY2UoXHJcblx0XHRcdGVsLFxyXG5cdFx0XHROdW1iZXIuaXNGaW5pdGUoIG9wdHMudGltZXMgKSA/IG9wdHMudGltZXMgOiAzLFxyXG5cdFx0XHROdW1iZXIuaXNGaW5pdGUoIG9wdHMub25fbXMgKSA/IG9wdHMub25fbXMgOiAyODAsXHJcblx0XHRcdE51bWJlci5pc0Zpbml0ZSggb3B0cy5vZmZfbXMgKSA/IG9wdHMub2ZmX21zIDogMTgwLFxyXG5cdFx0XHRvcHRzLmNvbG9yXHJcblx0XHQpO1xyXG5cdH07XHJcblxyXG5cclxuXHQvKipcclxuXHQgKiBCYXNlIGNsYXNzIGZvciBCRkIgbW9kdWxlcy5cclxuXHQgKi9cclxuXHRVSS5XUEJDX0JGQl9Nb2R1bGUgPSBjbGFzcyB7XHJcblx0XHQvKiogQHBhcmFtIHtXUEJDX0Zvcm1fQnVpbGRlcn0gYnVpbGRlciAqL1xyXG5cdFx0Y29uc3RydWN0b3IoYnVpbGRlcikge1xyXG5cdFx0XHR0aGlzLmJ1aWxkZXIgPSBidWlsZGVyO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKiBJbml0aWFsaXplIHRoZSBtb2R1bGUuICovXHJcblx0XHRpbml0KCkge1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKiBDbGVhbnVwIHRoZSBtb2R1bGUuICovXHJcblx0XHRkZXN0cm95KCkge1xyXG5cdFx0fVxyXG5cdH07XHJcblxyXG5cdC8qKlxyXG5cdCAqIENlbnRyYWwgb3ZlcmxheS9jb250cm9scyBtYW5hZ2VyIGZvciBmaWVsZHMvc2VjdGlvbnMuXHJcblx0ICogUHVyZSBVSSBjb21wb3NpdGlvbjsgYWxsIGFjdGlvbnMgcm91dGUgYmFjayBpbnRvIHRoZSBidWlsZGVyIGluc3RhbmNlLlxyXG5cdCAqL1xyXG5cdFVJLldQQkNfQkZCX092ZXJsYXkgPSBjbGFzcyB7XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBFbnN1cmUgYW4gb3ZlcmxheSBleGlzdHMgYW5kIGlzIHdpcmVkIHVwIG9uIHRoZSBlbGVtZW50LlxyXG5cdFx0ICogQHBhcmFtIHtXUEJDX0Zvcm1fQnVpbGRlcn0gYnVpbGRlclxyXG5cdFx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWwgLSBmaWVsZCBvciBzZWN0aW9uIGVsZW1lbnRcclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIGVuc3VyZShidWlsZGVyLCBlbCkge1xyXG5cclxuXHRcdFx0aWYgKCAhZWwgKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblx0XHRcdGNvbnN0IGlzU2VjdGlvbiA9IGVsLmNsYXNzTGlzdC5jb250YWlucyggJ3dwYmNfYmZiX19zZWN0aW9uJyApO1xyXG5cclxuXHRcdFx0Ly8gbGV0IG92ZXJsYXkgPSBlbC5xdWVyeVNlbGVjdG9yKCBDb3JlLldQQkNfQkZCX0RPTS5TRUxFQ1RPUlMub3ZlcmxheSApO1xyXG5cdFx0XHRsZXQgb3ZlcmxheSA9IGVsLnF1ZXJ5U2VsZWN0b3IoIGA6c2NvcGUgPiAke0NvcmUuV1BCQ19CRkJfRE9NLlNFTEVDVE9SUy5vdmVybGF5fWAgKTtcclxuXHRcdFx0aWYgKCAhb3ZlcmxheSApIHtcclxuXHRcdFx0XHRvdmVybGF5ID0gQ29yZS5XUEJDX0Zvcm1fQnVpbGRlcl9IZWxwZXIuY3JlYXRlX2VsZW1lbnQoICdkaXYnLCAnd3BiY19iZmJfX292ZXJsYXktY29udHJvbHMnICk7XHJcblx0XHRcdFx0ZWwucHJlcGVuZCggb3ZlcmxheSApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBEcmFnIGhhbmRsZS5cclxuXHRcdFx0aWYgKCAhb3ZlcmxheS5xdWVyeVNlbGVjdG9yKCAnLndwYmNfYmZiX19kcmFnLWhhbmRsZScgKSApIHtcclxuXHRcdFx0XHRjb25zdCBkcmFnQ2xhc3MgPSBpc1NlY3Rpb24gPyAnd3BiY19iZmJfX2RyYWctaGFuZGxlIHNlY3Rpb24tZHJhZy1oYW5kbGUnIDogJ3dwYmNfYmZiX19kcmFnLWhhbmRsZSc7XHJcblx0XHRcdFx0b3ZlcmxheS5hcHBlbmRDaGlsZChcclxuXHRcdFx0XHRcdENvcmUuV1BCQ19Gb3JtX0J1aWxkZXJfSGVscGVyLmNyZWF0ZV9lbGVtZW50KCAnc3BhbicsIGRyYWdDbGFzcywgJzxzcGFuIGNsYXNzPVwid3BiY19pY25fZHJhZ19pbmRpY2F0b3JcIj48L3NwYW4+JyApXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gU0VUVElOR1MgYnV0dG9uIChzaG93biBmb3IgYm90aCBmaWVsZHMgJiBzZWN0aW9ucykuXHJcblx0XHRcdGlmICggIW92ZXJsYXkucXVlcnlTZWxlY3RvciggJy53cGJjX2JmYl9fc2V0dGluZ3MtYnRuJyApICkge1xyXG5cdFx0XHRcdGNvbnN0IHNldHRpbmdzX2J0biAgID0gQ29yZS5XUEJDX0Zvcm1fQnVpbGRlcl9IZWxwZXIuY3JlYXRlX2VsZW1lbnQoICdidXR0b24nLCAnd3BiY19iZmJfX3NldHRpbmdzLWJ0bicsICc8aSBjbGFzcz1cIm1lbnVfaWNvbiBpY29uLTF4IHdwYmNfaWNuX3NldHRpbmdzXCI+PC9pPicgKTtcclxuXHRcdFx0XHRzZXR0aW5nc19idG4udHlwZSAgICA9ICdidXR0b24nO1xyXG5cdFx0XHRcdHNldHRpbmdzX2J0bi50aXRsZSAgID0gJ09wZW4gc2V0dGluZ3MnO1xyXG5cdFx0XHRcdHNldHRpbmdzX2J0bi5vbmNsaWNrID0gKGUpID0+IHtcclxuXHRcdFx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcclxuXHRcdFx0XHRcdC8vIFNlbGVjdCBUSElTIGVsZW1lbnQgYW5kIHNjcm9sbCBpdCBpbnRvIHZpZXcuXHJcblx0XHRcdFx0XHRidWlsZGVyLnNlbGVjdF9maWVsZCggZWwsIHsgc2Nyb2xsSW50b1ZpZXc6IHRydWUgfSApO1xyXG5cclxuXHRcdFx0XHRcdC8vIEF1dG8tb3BlbiBJbnNwZWN0b3IgZnJvbSB0aGUgb3ZlcmxheSDigJxTZXR0aW5nc+KAnSBidXR0b24uXHJcblx0XHRcdFx0XHR3cGJjX2JmYl9fZGlzcGF0Y2hfZXZlbnRfc2FmZShcclxuXHRcdFx0XHRcdFx0J3dwYmNfYmZiOnNob3dfcGFuZWwnLFxyXG5cdFx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdFx0cGFuZWxfaWQ6ICd3cGJjX2JmYl9faW5zcGVjdG9yJyxcclxuXHRcdFx0XHRcdFx0XHR0YWJfaWQgIDogJ3dwYmNfdGFiX2luc3BlY3RvcidcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0KTtcclxuXHJcblx0XHRcdFx0XHQvLyBUcnkgdG8gYnJpbmcgdGhlIGluc3BlY3RvciBpbnRvIHZpZXcgLyBmb2N1cyBmaXJzdCBpbnB1dC5cclxuXHRcdFx0XHRcdGNvbnN0IGlucyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnd3BiY19iZmJfX2luc3BlY3RvcicgKTtcclxuXHRcdFx0XHRcdGlmICggaW5zICkge1xyXG5cdFx0XHRcdFx0XHRpbnMuc2Nyb2xsSW50b1ZpZXcoIHsgYmVoYXZpb3I6ICdzbW9vdGgnLCBibG9jazogJ25lYXJlc3QnIH0gKTtcclxuXHRcdFx0XHRcdFx0Ly8gRm9jdXMgZmlyc3QgaW50ZXJhY3RpdmUgY29udHJvbCAoYmVzdC1lZmZvcnQpLlxyXG5cdFx0XHRcdFx0XHRzZXRUaW1lb3V0KCAoKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgZm9jdXNhYmxlID0gaW5zLnF1ZXJ5U2VsZWN0b3IoICdpbnB1dCxzZWxlY3QsdGV4dGFyZWEsYnV0dG9uLFtjb250ZW50ZWRpdGFibGVdLFt0YWJpbmRleF06bm90KFt0YWJpbmRleD1cIi0xXCJdKScgKTtcclxuXHRcdFx0XHRcdFx0XHRmb2N1c2FibGU/LmZvY3VzPy4oKTtcclxuXHRcdFx0XHRcdFx0fSwgMjYwICk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fTtcclxuXHJcblx0XHRcdFx0b3ZlcmxheS5hcHBlbmRDaGlsZCggc2V0dGluZ3NfYnRuICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdG92ZXJsYXkuc2V0QXR0cmlidXRlKCAncm9sZScsICd0b29sYmFyJyApO1xyXG5cdFx0XHRvdmVybGF5LnNldEF0dHJpYnV0ZSggJ2FyaWEtbGFiZWwnLCBlbC5jbGFzc0xpc3QuY29udGFpbnMoICd3cGJjX2JmYl9fc2VjdGlvbicgKSA/ICdTZWN0aW9uIHRvb2xzJyA6ICdGaWVsZCB0b29scycgKTtcclxuXHJcblx0XHRcdHJldHVybiBvdmVybGF5O1xyXG5cdFx0fVxyXG5cdH07XHJcblxyXG5cdC8qKlxyXG5cdCAqIFdQQkMgTGF5b3V0IENoaXBzIGhlbHBlciAtIHZpc3VhbCBsYXlvdXQgcGlja2VyIChjaGlwcyksIGUuZy4sIFwiNTAlLzUwJVwiLCB0byBhIHNlY3Rpb24gb3ZlcmxheS5cclxuXHQgKlxyXG5cdCAqIFJlbmRlcnMgRXF1YWwvUHJlc2V0cy9DdXN0b20gY2hpcHMgaW50byBhIGhvc3QgY29udGFpbmVyIGFuZCB3aXJlcyB0aGVtIHRvIGFwcGx5IHRoZSBsYXlvdXQuXHJcblx0ICovXHJcblx0VUkuV1BCQ19CRkJfTGF5b3V0X0NoaXBzID0gY2xhc3Mge1xyXG5cclxuXHRcdC8qKiBSZWFkIHBlci1jb2x1bW4gbWluIChweCkgZnJvbSBDU1MgdmFyIHNldCBieSB0aGUgZ3VhcmQuICovXHJcblx0XHRzdGF0aWMgX2dldF9jb2xfbWluX3B4KGNvbCkge1xyXG5cdFx0XHRjb25zdCB2ID0gZ2V0Q29tcHV0ZWRTdHlsZSggY29sICkuZ2V0UHJvcGVydHlWYWx1ZSggJy0td3BiYy1jb2wtbWluJyApIHx8ICcwJztcclxuXHRcdFx0Y29uc3QgbiA9IHBhcnNlRmxvYXQoIHYgKTtcclxuXHRcdFx0cmV0dXJuIE51bWJlci5pc0Zpbml0ZSggbiApID8gTWF0aC5tYXgoIDAsIG4gKSA6IDA7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBUdXJuIHJhdyB3ZWlnaHRzIChlLmcuIFsxLDFdLCBbMiwxLDFdKSBpbnRvIGVmZmVjdGl2ZSBcImF2YWlsYWJsZS0lXCIgYmFzZXMgdGhhdFxyXG5cdFx0ICogKGEpIHN1bSB0byB0aGUgcm93J3MgYXZhaWxhYmxlICUsIGFuZCAoYikgbWVldCBldmVyeSBjb2x1bW4ncyBtaW4gcHguXHJcblx0XHQgKiBSZXR1cm5zIGFuIGFycmF5IG9mIGJhc2VzIChudW1iZXJzKSBvciBudWxsIGlmIGltcG9zc2libGUgdG8gc2F0aXNmeSBtaW5zLlxyXG5cdFx0ICovXHJcblx0XHRzdGF0aWMgX2ZpdF93ZWlnaHRzX3Jlc3BlY3RpbmdfbWluKGJ1aWxkZXIsIHJvdywgd2VpZ2h0cykge1xyXG5cdFx0XHRjb25zdCBjb2xzID0gQXJyYXkuZnJvbSggcm93LnF1ZXJ5U2VsZWN0b3JBbGwoICc6c2NvcGUgPiAud3BiY19iZmJfX2NvbHVtbicgKSApO1xyXG5cdFx0XHRjb25zdCBuICAgID0gY29scy5sZW5ndGg7XHJcblx0XHRcdGlmICggIW4gKSByZXR1cm4gbnVsbDtcclxuXHRcdFx0aWYgKCAhQXJyYXkuaXNBcnJheSggd2VpZ2h0cyApIHx8IHdlaWdodHMubGVuZ3RoICE9PSBuICkgcmV0dXJuIG51bGw7XHJcblxyXG5cdFx0XHQvLyBhdmFpbGFibGUgJSBhZnRlciBnYXBzIChmcm9tIExheW91dFNlcnZpY2UpXHJcblx0XHRcdGNvbnN0IGdwICAgICAgID0gYnVpbGRlci5jb2xfZ2FwX3BlcmNlbnQ7XHJcblx0XHRcdGNvbnN0IGVmZiAgICAgID0gYnVpbGRlci5sYXlvdXQuY29tcHV0ZV9lZmZlY3RpdmVfYmFzZXNfZnJvbV9yb3coIHJvdywgZ3AgKTtcclxuXHRcdFx0Y29uc3QgYXZhaWxQY3QgPSBlZmYuYXZhaWxhYmxlOyAgICAgICAgICAgICAgIC8vIGUuZy4gOTQgaWYgMiBjb2xzIGFuZCAzJSBnYXBcclxuXHRcdFx0Y29uc3Qgcm93UHggICAgPSByb3cuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XHJcblx0XHRcdGNvbnN0IGF2YWlsUHggID0gcm93UHggKiAoYXZhaWxQY3QgLyAxMDApO1xyXG5cclxuXHRcdFx0Ly8gY29sbGVjdCBtaW5pbWEgaW4gJSBvZiBcImF2YWlsYWJsZVwiXHJcblx0XHRcdGNvbnN0IG1pblBjdCA9IGNvbHMubWFwKCAoYykgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IG1pblB4ID0gVUkuV1BCQ19CRkJfTGF5b3V0X0NoaXBzLl9nZXRfY29sX21pbl9weCggYyApO1xyXG5cdFx0XHRcdGlmICggYXZhaWxQeCA8PSAwICkgcmV0dXJuIDA7XHJcblx0XHRcdFx0cmV0dXJuIChtaW5QeCAvIGF2YWlsUHgpICogYXZhaWxQY3Q7XHJcblx0XHRcdH0gKTtcclxuXHJcblx0XHRcdC8vIElmIG1pbnMgYWxvbmUgZG9uJ3QgZml0LCBiYWlsLlxyXG5cdFx0XHRjb25zdCBzdW1NaW4gPSBtaW5QY3QucmVkdWNlKCAoYSwgYikgPT4gYSArIGIsIDAgKTtcclxuXHRcdFx0aWYgKCBzdW1NaW4gPiBhdmFpbFBjdCAtIDFlLTYgKSB7XHJcblx0XHRcdFx0cmV0dXJuIG51bGw7IC8vIGltcG9zc2libGUgdG8gcmVzcGVjdCBtaW5zOyBkb24ndCBhcHBseSBwcmVzZXRcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gVGFyZ2V0IHBlcmNlbnRhZ2VzIGZyb20gd2VpZ2h0cywgbm9ybWFsaXplZCB0byBhdmFpbFBjdC5cclxuXHRcdFx0Y29uc3Qgd1N1bSAgICAgID0gd2VpZ2h0cy5yZWR1Y2UoIChhLCB3KSA9PiBhICsgKE51bWJlciggdyApIHx8IDApLCAwICkgfHwgbjtcclxuXHRcdFx0Y29uc3QgdGFyZ2V0UGN0ID0gd2VpZ2h0cy5tYXAoICh3KSA9PiAoKE51bWJlciggdyApIHx8IDApIC8gd1N1bSkgKiBhdmFpbFBjdCApO1xyXG5cclxuXHRcdFx0Ly8gTG9jayBjb2x1bW5zIHRoYXQgd291bGQgYmUgYmVsb3cgbWluLCB0aGVuIGRpc3RyaWJ1dGUgdGhlIHJlbWFpbmRlclxyXG5cdFx0XHQvLyBhY3Jvc3MgdGhlIHJlbWFpbmluZyBjb2x1bW5zIHByb3BvcnRpb25hbGx5IHRvIHRoZWlyIHRhcmdldFBjdC5cclxuXHRcdFx0Y29uc3QgbG9ja2VkICA9IG5ldyBBcnJheSggbiApLmZpbGwoIGZhbHNlICk7XHJcblx0XHRcdGxldCBsb2NrZWRTdW0gPSAwO1xyXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCBuOyBpKysgKSB7XHJcblx0XHRcdFx0aWYgKCB0YXJnZXRQY3RbaV0gPCBtaW5QY3RbaV0gKSB7XHJcblx0XHRcdFx0XHRsb2NrZWRbaV0gPSB0cnVlO1xyXG5cdFx0XHRcdFx0bG9ja2VkU3VtICs9IG1pblBjdFtpXTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGxldCByZW1haW5pbmcgICAgID0gYXZhaWxQY3QgLSBsb2NrZWRTdW07XHJcblx0XHRcdGNvbnN0IGZyZWVJZHggICAgID0gW107XHJcblx0XHRcdGxldCBmcmVlVGFyZ2V0U3VtID0gMDtcclxuXHRcdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgbjsgaSsrICkge1xyXG5cdFx0XHRcdGlmICggIWxvY2tlZFtpXSApIHtcclxuXHRcdFx0XHRcdGZyZWVJZHgucHVzaCggaSApO1xyXG5cdFx0XHRcdFx0ZnJlZVRhcmdldFN1bSArPSB0YXJnZXRQY3RbaV07XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRjb25zdCByZXN1bHQgPSBuZXcgQXJyYXkoIG4gKS5maWxsKCAwICk7XHJcblx0XHRcdC8vIFNlZWQgbG9ja2VkIHdpdGggdGhlaXIgbWluaW1hLlxyXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCBuOyBpKysgKSB7XHJcblx0XHRcdFx0aWYgKCBsb2NrZWRbaV0gKSByZXN1bHRbaV0gPSBtaW5QY3RbaV07XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICggZnJlZUlkeC5sZW5ndGggPT09IDAgKSB7XHJcblx0XHRcdFx0Ly8gZXZlcnl0aGluZyBsb2NrZWQgZXhhY3RseSBhdCBtaW47IGFueSBsZWZ0b3ZlciAoc2hvdWxkbid0IGhhcHBlbilcclxuXHRcdFx0XHQvLyB3b3VsZCBiZSBpZ25vcmVkIHRvIGtlZXAgc2ltcGxpY2l0eSBhbmQgc3RhYmlsaXR5LlxyXG5cdFx0XHRcdHJldHVybiByZXN1bHQ7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICggcmVtYWluaW5nIDw9IDAgKSB7XHJcblx0XHRcdFx0Ly8gbm90aGluZyBsZWZ0IHRvIGRpc3RyaWJ1dGU7IGtlZXAgZXhhY3RseSBtaW5zIG9uIGxvY2tlZCxcclxuXHRcdFx0XHQvLyBub3RoaW5nIGZvciBmcmVlIChkZWdlbmVyYXRlIGJ1dCBjb25zaXN0ZW50KVxyXG5cdFx0XHRcdHJldHVybiByZXN1bHQ7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICggZnJlZVRhcmdldFN1bSA8PSAwICkge1xyXG5cdFx0XHRcdC8vIGRpc3RyaWJ1dGUgZXF1YWxseSBhbW9uZyBmcmVlIGNvbHVtbnNcclxuXHRcdFx0XHRjb25zdCBlYWNoID0gcmVtYWluaW5nIC8gZnJlZUlkeC5sZW5ndGg7XHJcblx0XHRcdFx0ZnJlZUlkeC5mb3JFYWNoKCAoaSkgPT4gKHJlc3VsdFtpXSA9IGVhY2gpICk7XHJcblx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gRGlzdHJpYnV0ZSByZW1haW5pbmcgcHJvcG9ydGlvbmFsbHkgdG8gZnJlZSBjb2x1bW5zJyB0YXJnZXRQY3RcclxuXHRcdFx0ZnJlZUlkeC5mb3JFYWNoKCAoaSkgPT4ge1xyXG5cdFx0XHRcdHJlc3VsdFtpXSA9IHJlbWFpbmluZyAqICh0YXJnZXRQY3RbaV0gLyBmcmVlVGFyZ2V0U3VtKTtcclxuXHRcdFx0fSApO1xyXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKiBBcHBseSBhIHByZXNldCBidXQgZ3VhcmQgaXQgYnkgbWluaW1hOyByZXR1cm5zIHRydWUgaWYgYXBwbGllZCwgZmFsc2UgaWYgc2tpcHBlZC4gKi9cclxuXHRcdHN0YXRpYyBfYXBwbHlfcHJlc2V0X3dpdGhfbWluX2d1YXJkKGJ1aWxkZXIsIHNlY3Rpb25fZWwsIHdlaWdodHMpIHtcclxuXHRcdFx0Y29uc3Qgcm93ID0gc2VjdGlvbl9lbC5xdWVyeVNlbGVjdG9yKCAnOnNjb3BlID4gLndwYmNfYmZiX19yb3cnICk7XHJcblx0XHRcdGlmICggIXJvdyApIHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRcdGNvbnN0IGZpdHRlZCA9IFVJLldQQkNfQkZCX0xheW91dF9DaGlwcy5fZml0X3dlaWdodHNfcmVzcGVjdGluZ19taW4oIGJ1aWxkZXIsIHJvdywgd2VpZ2h0cyApO1xyXG5cdFx0XHRpZiAoICFmaXR0ZWQgKSB7XHJcblx0XHRcdFx0YnVpbGRlcj8uX2Fubm91bmNlPy4oICdOb3QgZW5vdWdoIHNwYWNlIGZvciB0aGlzIGxheW91dCBiZWNhdXNlIG9mIGZpZWxkc+KAmSBtaW5pbXVtIHdpZHRocy4nICk7XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBgZml0dGVkYCBhbHJlYWR5IHN1bXMgdG8gdGhlIHJvd+KAmXMgYXZhaWxhYmxlICUsIHNvIHdlIGNhbiBhcHBseSBiYXNlcyBkaXJlY3RseS5cclxuXHRcdFx0YnVpbGRlci5sYXlvdXQuYXBwbHlfYmFzZXNfdG9fcm93KCByb3csIGZpdHRlZCApO1xyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBCdWlsZCBhbmQgYXBwZW5kIGxheW91dCBjaGlwcyBmb3IgYSBzZWN0aW9uLlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7V1BCQ19Gb3JtX0J1aWxkZXJ9IGJ1aWxkZXIgLSBUaGUgZm9ybSBidWlsZGVyIGluc3RhbmNlLlxyXG5cdFx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gc2VjdGlvbl9lbCAtIFRoZSAud3BiY19iZmJfX3NlY3Rpb24gZWxlbWVudC5cclxuXHRcdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGhvc3RfZWwgLSBDb250YWluZXIgd2hlcmUgY2hpcHMgc2hvdWxkIGJlIHJlbmRlcmVkLlxyXG5cdFx0ICogQHJldHVybnMge3ZvaWR9XHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyByZW5kZXJfZm9yX3NlY3Rpb24oYnVpbGRlciwgc2VjdGlvbl9lbCwgaG9zdF9lbCkge1xyXG5cclxuXHRcdFx0aWYgKCAhYnVpbGRlciB8fCAhc2VjdGlvbl9lbCB8fCAhaG9zdF9lbCApIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGNvbnN0IHJvdyA9IHNlY3Rpb25fZWwucXVlcnlTZWxlY3RvciggJzpzY29wZSA+IC53cGJjX2JmYl9fcm93JyApO1xyXG5cdFx0XHRpZiAoICFyb3cgKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRjb25zdCBjb2xzID0gcm93LnF1ZXJ5U2VsZWN0b3JBbGwoICc6c2NvcGUgPiAud3BiY19iZmJfX2NvbHVtbicgKS5sZW5ndGggfHwgMTtcclxuXHJcblx0XHRcdC8vIENsZWFyIGhvc3QuXHJcblx0XHRcdGhvc3RfZWwuaW5uZXJIVE1MID0gJyc7XHJcblxyXG5cdFx0XHQvLyBFcXVhbCBjaGlwLlxyXG5cdFx0XHRob3N0X2VsLmFwcGVuZENoaWxkKFxyXG5cdFx0XHRcdFVJLldQQkNfQkZCX0xheW91dF9DaGlwcy5fbWFrZV9jaGlwKCBidWlsZGVyLCBzZWN0aW9uX2VsLCBBcnJheSggY29scyApLmZpbGwoIDEgKSwgJ0VxdWFsJyApXHJcblx0XHRcdCk7XHJcblxyXG5cdFx0XHQvLyBQcmVzZXRzIGJhc2VkIG9uIGNvbHVtbiBjb3VudC5cclxuXHRcdFx0Y29uc3QgcHJlc2V0cyA9IGJ1aWxkZXIubGF5b3V0LmJ1aWxkX3ByZXNldHNfZm9yX2NvbHVtbnMoIGNvbHMgKTtcclxuXHRcdFx0cHJlc2V0cy5mb3JFYWNoKCAod2VpZ2h0cykgPT4ge1xyXG5cdFx0XHRcdGhvc3RfZWwuYXBwZW5kQ2hpbGQoXHJcblx0XHRcdFx0XHRVSS5XUEJDX0JGQl9MYXlvdXRfQ2hpcHMuX21ha2VfY2hpcCggYnVpbGRlciwgc2VjdGlvbl9lbCwgd2VpZ2h0cywgbnVsbCApXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fSApO1xyXG5cclxuXHRcdFx0Ly8gQ3VzdG9tIGNoaXAuXHJcblx0XHRcdGNvbnN0IGN1c3RvbUJ0biAgICAgICA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdidXR0b24nICk7XHJcblx0XHRcdGN1c3RvbUJ0bi50eXBlICAgICAgICA9ICdidXR0b24nO1xyXG5cdFx0XHRjdXN0b21CdG4uY2xhc3NOYW1lICAgPSAnd3BiY19iZmJfX2xheW91dF9jaGlwJztcclxuXHRcdFx0Y3VzdG9tQnRuLnRleHRDb250ZW50ID0gJ0N1c3RvbeKApic7XHJcblx0XHRcdGN1c3RvbUJ0bi50aXRsZSAgICAgICA9IGBFbnRlciAke2NvbHN9IHBlcmNlbnRhZ2VzYDtcclxuXHRcdFx0Y3VzdG9tQnRuLmFkZEV2ZW50TGlzdGVuZXIoICdjbGljaycsICgpID0+IHtcclxuXHRcdFx0XHRjb25zdCBleGFtcGxlID0gKGNvbHMgPT09IDIpID8gJzUwLDUwJyA6IChjb2xzID09PSAzID8gJzIwLDYwLDIwJyA6ICcyNSwyNSwyNSwyNScpO1xyXG5cdFx0XHRcdGNvbnN0IHRleHQgICAgPSBwcm9tcHQoIGBFbnRlciAke2NvbHN9IHBlcmNlbnRhZ2VzIChjb21tYSBvciBzcGFjZSBzZXBhcmF0ZWQpOmAsIGV4YW1wbGUgKTtcclxuXHRcdFx0XHRpZiAoIHRleHQgPT0gbnVsbCApIHJldHVybjtcclxuXHRcdFx0XHRjb25zdCB3ZWlnaHRzID0gYnVpbGRlci5sYXlvdXQucGFyc2Vfd2VpZ2h0cyggdGV4dCApO1xyXG5cdFx0XHRcdGlmICggd2VpZ2h0cy5sZW5ndGggIT09IGNvbHMgKSB7XHJcblx0XHRcdFx0XHRhbGVydCggYFBsZWFzZSBlbnRlciBleGFjdGx5ICR7Y29sc30gbnVtYmVycy5gICk7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdC8vIE9MRDpcclxuXHRcdFx0XHQvLyBidWlsZGVyLmxheW91dC5hcHBseV9sYXlvdXRfcHJlc2V0KCBzZWN0aW9uX2VsLCB3ZWlnaHRzLCBidWlsZGVyLmNvbF9nYXBfcGVyY2VudCApO1xyXG5cdFx0XHRcdC8vIEd1YXJkZWQgYXBwbHk6LlxyXG5cdFx0XHRcdGlmICggIVVJLldQQkNfQkZCX0xheW91dF9DaGlwcy5fYXBwbHlfcHJlc2V0X3dpdGhfbWluX2d1YXJkKCBidWlsZGVyLCBzZWN0aW9uX2VsLCB3ZWlnaHRzICkgKSB7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGhvc3RfZWwucXVlcnlTZWxlY3RvckFsbCggJy53cGJjX2JmYl9fbGF5b3V0X2NoaXAnICkuZm9yRWFjaCggYyA9PiBjLmNsYXNzTGlzdC5yZW1vdmUoICdpcy1hY3RpdmUnICkgKTtcclxuXHRcdFx0XHRjdXN0b21CdG4uY2xhc3NMaXN0LmFkZCggJ2lzLWFjdGl2ZScgKTtcclxuXHRcdFx0fSApO1xyXG5cdFx0XHRob3N0X2VsLmFwcGVuZENoaWxkKCBjdXN0b21CdG4gKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIENyZWF0ZSBhIHNpbmdsZSBsYXlvdXQgY2hpcCBidXR0b24uXHJcblx0XHQgKlxyXG5cdFx0ICogQHByaXZhdGVcclxuXHRcdCAqIEBwYXJhbSB7V1BCQ19Gb3JtX0J1aWxkZXJ9IGJ1aWxkZXJcclxuXHRcdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHNlY3Rpb25fZWxcclxuXHRcdCAqIEBwYXJhbSB7bnVtYmVyW119IHdlaWdodHNcclxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfG51bGx9IGxhYmVsXHJcblx0XHQgKiBAcmV0dXJucyB7SFRNTEJ1dHRvbkVsZW1lbnR9XHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBfbWFrZV9jaGlwKGJ1aWxkZXIsIHNlY3Rpb25fZWwsIHdlaWdodHMsIGxhYmVsID0gbnVsbCkge1xyXG5cclxuXHRcdFx0Y29uc3QgYnRuICAgICA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdidXR0b24nICk7XHJcblx0XHRcdGJ0bi50eXBlICAgICAgPSAnYnV0dG9uJztcclxuXHRcdFx0YnRuLmNsYXNzTmFtZSA9ICd3cGJjX2JmYl9fbGF5b3V0X2NoaXAnO1xyXG5cclxuXHRcdFx0Y29uc3QgdGl0bGUgPSBsYWJlbCB8fCBidWlsZGVyLmxheW91dC5mb3JtYXRfcHJlc2V0X2xhYmVsKCB3ZWlnaHRzICk7XHJcblx0XHRcdGJ0bi50aXRsZSAgID0gdGl0bGU7XHJcblxyXG5cdFx0XHQvLyBWaXN1YWwgbWluaWF0dXJlLlxyXG5cdFx0XHRjb25zdCB2aXMgICAgID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKTtcclxuXHRcdFx0dmlzLmNsYXNzTmFtZSA9ICd3cGJjX2JmYl9fbGF5b3V0X2NoaXAtdmlzJztcclxuXHRcdFx0Y29uc3Qgc3VtICAgICA9IHdlaWdodHMucmVkdWNlKCAoYSwgYikgPT4gYSArIChOdW1iZXIoIGIgKSB8fCAwKSwgMCApIHx8IDE7XHJcblx0XHRcdHdlaWdodHMuZm9yRWFjaCggKHcpID0+IHtcclxuXHRcdFx0XHRjb25zdCBiYXIgICAgICA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdzcGFuJyApO1xyXG5cdFx0XHRcdGJhci5zdHlsZS5mbGV4ID0gYDAgMCBjYWxjKCAkeygoTnVtYmVyKCB3ICkgfHwgMCkgLyBzdW0gKiAxMDApLnRvRml4ZWQoIDMgKX0lIC0gMS41cHggKWA7XHJcblx0XHRcdFx0dmlzLmFwcGVuZENoaWxkKCBiYXIgKTtcclxuXHRcdFx0fSApO1xyXG5cdFx0XHRidG4uYXBwZW5kQ2hpbGQoIHZpcyApO1xyXG5cclxuXHRcdFx0Y29uc3QgdHh0ICAgICAgID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ3NwYW4nICk7XHJcblx0XHRcdHR4dC5jbGFzc05hbWUgICA9ICd3cGJjX2JmYl9fbGF5b3V0X2NoaXAtbGFiZWwnO1xyXG5cdFx0XHR0eHQudGV4dENvbnRlbnQgPSBsYWJlbCB8fCBidWlsZGVyLmxheW91dC5mb3JtYXRfcHJlc2V0X2xhYmVsKCB3ZWlnaHRzICk7XHJcblx0XHRcdGJ0bi5hcHBlbmRDaGlsZCggdHh0ICk7XHJcblxyXG5cdFx0XHRidG4uYWRkRXZlbnRMaXN0ZW5lciggJ2NsaWNrJywgKCkgPT4ge1xyXG5cdFx0XHRcdC8vIE9MRDpcclxuXHRcdFx0XHQvLyBidWlsZGVyLmxheW91dC5hcHBseV9sYXlvdXRfcHJlc2V0KCBzZWN0aW9uX2VsLCB3ZWlnaHRzLCBidWlsZGVyLmNvbF9nYXBfcGVyY2VudCApO1xyXG5cclxuXHRcdFx0XHQvLyBORVc6XHJcblx0XHRcdFx0aWYgKCAhVUkuV1BCQ19CRkJfTGF5b3V0X0NoaXBzLl9hcHBseV9wcmVzZXRfd2l0aF9taW5fZ3VhcmQoIGJ1aWxkZXIsIHNlY3Rpb25fZWwsIHdlaWdodHMgKSApIHtcclxuXHRcdFx0XHRcdHJldHVybjsgLy8gZG8gbm90IHRvZ2dsZSBhY3RpdmUgaWYgd2UgZGlkbid0IGNoYW5nZSBsYXlvdXRcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGJ0bi5wYXJlbnRFbGVtZW50Py5xdWVyeVNlbGVjdG9yQWxsKCAnLndwYmNfYmZiX19sYXlvdXRfY2hpcCcgKS5mb3JFYWNoKCBjID0+IGMuY2xhc3NMaXN0LnJlbW92ZSggJ2lzLWFjdGl2ZScgKSApO1xyXG5cdFx0XHRcdGJ0bi5jbGFzc0xpc3QuYWRkKCAnaXMtYWN0aXZlJyApO1xyXG5cdFx0XHR9ICk7XHJcblxyXG5cdFx0XHRyZXR1cm4gYnRuO1xyXG5cdFx0fVxyXG5cdH07XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNlbGVjdGlvbiBjb250cm9sbGVyIGZvciBmaWVsZHMgYW5kIGFubm91bmNlbWVudHMuXHJcblx0ICovXHJcblx0VUkuV1BCQ19CRkJfU2VsZWN0aW9uX0NvbnRyb2xsZXIgPSBjbGFzcyBleHRlbmRzIFVJLldQQkNfQkZCX01vZHVsZSB7XHJcblxyXG5cdFx0aW5pdCgpIHtcclxuXHJcblx0XHRcdHRoaXMuX3NlbGVjdGVkX3VpZCAgICAgICAgICAgICAgPSBudWxsO1xyXG5cdFx0XHR0aGlzLmJ1aWxkZXIuc2VsZWN0X2ZpZWxkICAgICAgID0gdGhpcy5zZWxlY3RfZmllbGQuYmluZCggdGhpcyApO1xyXG5cdFx0XHR0aGlzLmJ1aWxkZXIuZ2V0X3NlbGVjdGVkX2ZpZWxkID0gdGhpcy5nZXRfc2VsZWN0ZWRfZmllbGQuYmluZCggdGhpcyApO1xyXG5cdFx0XHR0aGlzLl9vbl9jbGVhciAgICAgICAgICAgICAgICAgID0gdGhpcy5vbl9jbGVhci5iaW5kKCB0aGlzICk7XHJcblxyXG5cdFx0XHQvLyBDZW50cmFsaXplZCBkZWxldGUgY29tbWFuZCB1c2VkIGJ5IGtleWJvYXJkICsgaW5zcGVjdG9yICsgb3ZlcmxheS5cclxuXHRcdFx0dGhpcy5idWlsZGVyLmRlbGV0ZV9pdGVtID0gKGVsKSA9PiB7XHJcblx0XHRcdFx0aWYgKCAhZWwgKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Y29uc3QgYiAgICAgICAgPSB0aGlzLmJ1aWxkZXI7XHJcblx0XHRcdFx0Y29uc3QgbmVpZ2hib3IgPSBiLl9maW5kX25laWdoYm9yX3NlbGVjdGFibGU/LiggZWwgKSB8fCBudWxsO1xyXG5cdFx0XHRcdGVsLnJlbW92ZSgpO1xyXG5cdFx0XHRcdC8vIFVzZSBsb2NhbCBDb3JlIGNvbnN0YW50cyAobm90IGEgZ2xvYmFsKSB0byBhdm9pZCBSZWZlcmVuY2VFcnJvcnMuXHJcblx0XHRcdFx0Yi5idXM/LmVtaXQ/LiggQ29yZS5XUEJDX0JGQl9FdmVudHMuRklFTERfUkVNT1ZFLCB7IGVsLCBpZDogZWw/LmRhdGFzZXQ/LmlkLCB1aWQ6IGVsPy5kYXRhc2V0Py51aWQgfSApO1xyXG5cdFx0XHRcdGIudXNhZ2U/LnVwZGF0ZV9wYWxldHRlX3VpPy4oKTtcclxuXHRcdFx0XHQvLyBOb3RpZnkgZ2VuZXJpYyBzdHJ1Y3R1cmUgbGlzdGVuZXJzLCB0b286XHJcblx0XHRcdFx0Yi5idXM/LmVtaXQ/LiggQ29yZS5XUEJDX0JGQl9FdmVudHMuU1RSVUNUVVJFX0NIQU5HRSwgeyByZWFzb246ICdkZWxldGUnLCBlbCB9ICk7XHJcblx0XHRcdFx0Ly8gRGVmZXIgc2VsZWN0aW9uIGEgdGljayBzbyB0aGUgRE9NIGlzIGZ1bGx5IHNldHRsZWQgYmVmb3JlIEluc3BlY3RvciBoeWRyYXRlcy5cclxuXHRcdFx0XHRyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoICgpID0+IHtcclxuXHRcdFx0XHRcdC8vIFRoaXMgY2FsbHMgaW5zcGVjdG9yLmJpbmRfdG9fZmllbGQoKSBhbmQgb3BlbnMgdGhlIEluc3BlY3RvciBwYW5lbC5cclxuXHRcdFx0XHRcdGIuc2VsZWN0X2ZpZWxkPy4oIG5laWdoYm9yIHx8IG51bGwsIHsgc2Nyb2xsSW50b1ZpZXc6ICEhbmVpZ2hib3IgfSApO1xyXG5cdFx0XHRcdH0gKTtcclxuXHRcdFx0XHRyZXR1cm4gbmVpZ2hib3I7XHJcblx0XHRcdH07XHJcblx0XHRcdHRoaXMuYnVpbGRlci5idXMub24oIENvcmUuV1BCQ19CRkJfRXZlbnRzLkNMRUFSX1NFTEVDVElPTiwgdGhpcy5fb25fY2xlYXIgKTtcclxuXHRcdFx0dGhpcy5idWlsZGVyLmJ1cy5vbiggQ29yZS5XUEJDX0JGQl9FdmVudHMuU1RSVUNUVVJFX0xPQURFRCwgdGhpcy5fb25fY2xlYXIgKTtcclxuXHRcdFx0Ly8gZGVsZWdhdGVkIGNsaWNrIHNlbGVjdGlvbiAoY2FwdHVyZSBlbnN1cmVzIHdlIHdpbiBiZWZvcmUgYnViYmxpbmcgdG8gY29udGFpbmVycykuXHJcblx0XHRcdHRoaXMuX29uX2NhbnZhc19jbGljayA9IHRoaXMuX2hhbmRsZV9jYW52YXNfY2xpY2suYmluZCggdGhpcyApO1xyXG5cdFx0XHR0aGlzLmJ1aWxkZXIucGFnZXNfY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoICdjbGljaycsIHRoaXMuX29uX2NhbnZhc19jbGljaywgdHJ1ZSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdGRlc3Ryb3koKSB7XHJcblx0XHRcdHRoaXMuYnVpbGRlci5idXMub2ZmKCBDb3JlLldQQkNfQkZCX0V2ZW50cy5DTEVBUl9TRUxFQ1RJT04sIHRoaXMuX29uX2NsZWFyICk7XHJcblxyXG5cdFx0XHRpZiAoIHRoaXMuX29uX2NhbnZhc19jbGljayApIHtcclxuXHRcdFx0XHR0aGlzLmJ1aWxkZXIucGFnZXNfY29udGFpbmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoICdjbGljaycsIHRoaXMuX29uX2NhbnZhc19jbGljaywgdHJ1ZSApO1xyXG5cdFx0XHRcdHRoaXMuX29uX2NhbnZhc19jbGljayA9IG51bGw7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIERlbGVnYXRlZCBjYW52YXMgY2xpY2sgLT4gc2VsZWN0IGNsb3Nlc3QgZmllbGQvc2VjdGlvbiAoaW5uZXIgYmVhdHMgb3V0ZXIpLlxyXG5cdFx0ICogQHByaXZhdGVcclxuXHRcdCAqIEBwYXJhbSB7TW91c2VFdmVudH0gZVxyXG5cdFx0ICovXHJcblx0XHRfaGFuZGxlX2NhbnZhc19jbGljayhlKSB7XHJcblx0XHRcdGNvbnN0IHJvb3QgPSB0aGlzLmJ1aWxkZXIucGFnZXNfY29udGFpbmVyO1xyXG5cdFx0XHRpZiAoICFyb290ICkgcmV0dXJuO1xyXG5cclxuXHRcdFx0Ly8gSWdub3JlIGNsaWNrcyBvbiBjb250cm9scy9oYW5kbGVzL3Jlc2l6ZXJzLCBldGMuXHJcblx0XHRcdGNvbnN0IElHTk9SRSA9IFtcclxuXHRcdFx0XHQnLndwYmNfYmZiX19vdmVybGF5LWNvbnRyb2xzJyxcclxuXHRcdFx0XHQnLndwYmNfYmZiX19sYXlvdXRfcGlja2VyJyxcclxuXHRcdFx0XHQnLndwYmNfYmZiX19kcmFnLWhhbmRsZScsXHJcblx0XHRcdFx0Jy53cGJjX2JmYl9fZmllbGQtcmVtb3ZlLWJ0bicsXHJcblx0XHRcdFx0Jy53cGJjX2JmYl9fZmllbGQtbW92ZS11cCcsXHJcblx0XHRcdFx0Jy53cGJjX2JmYl9fZmllbGQtbW92ZS1kb3duJyxcclxuXHRcdFx0XHQnLndwYmNfYmZiX19jb2x1bW4tcmVzaXplcidcclxuXHRcdFx0XS5qb2luKCAnLCcgKTtcclxuXHJcblx0XHRcdGlmICggZS50YXJnZXQuY2xvc2VzdCggSUdOT1JFICkgKSB7XHJcblx0XHRcdFx0cmV0dXJuOyAvLyBsZXQgdGhvc2UgY29udHJvbHMgZG8gdGhlaXIgb3duIHRoaW5nLlxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBGaW5kIHRoZSBjbG9zZXN0IHNlbGVjdGFibGUgKGZpZWxkIE9SIHNlY3Rpb24pIGZyb20gdGhlIGNsaWNrIHRhcmdldC5cclxuXHRcdFx0bGV0IGhpdCA9IGUudGFyZ2V0LmNsb3Nlc3Q/LihcclxuXHRcdFx0XHRgJHtDb3JlLldQQkNfQkZCX0RPTS5TRUxFQ1RPUlMudmFsaWRGaWVsZH0sICR7Q29yZS5XUEJDX0JGQl9ET00uU0VMRUNUT1JTLnNlY3Rpb259LCAud3BiY19iZmJfX2NvbHVtbmBcclxuXHRcdFx0KTtcclxuXHJcblx0XHRcdGlmICggIWhpdCB8fCAhcm9vdC5jb250YWlucyggaGl0ICkgKSB7XHJcblx0XHRcdFx0dGhpcy5zZWxlY3RfZmllbGQoIG51bGwgKTsgICAgICAgICAgIC8vIENsZWFyIHNlbGVjdGlvbiBvbiBibGFuayBjbGljay5cclxuXHRcdFx0XHRyZXR1cm47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRW1wdHkgc3BhY2UgaXMgaGFuZGxlZCBlbHNld2hlcmUuXHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIE5FVzogaWYgdXNlciBjbGlja2VkIGEgQ09MVU1OIC0+IHJlbWVtYmVyIHRhYiBrZXkgb24gaXRzIFNFQ1RJT04sIGJ1dCBzdGlsbCBzZWxlY3QgdGhlIHNlY3Rpb24uXHJcblx0XHRcdGxldCBwcmVzZWxlY3RfdGFiX2tleSA9IG51bGw7XHJcblx0XHRcdGlmICggaGl0LmNsYXNzTGlzdC5jb250YWlucyggJ3dwYmNfYmZiX19jb2x1bW4nICkgKSB7XHJcblx0XHRcdFx0Y29uc3Qgcm93ICA9IGhpdC5jbG9zZXN0KCAnLndwYmNfYmZiX19yb3cnICk7XHJcblx0XHRcdFx0Y29uc3QgY29scyA9IHJvdyA/IEFycmF5LmZyb20oIHJvdy5xdWVyeVNlbGVjdG9yQWxsKCAnOnNjb3BlID4gLndwYmNfYmZiX19jb2x1bW4nICkgKSA6IFtdO1xyXG5cdFx0XHRcdGNvbnN0IGlkeCAgPSBNYXRoLm1heCggMCwgY29scy5pbmRleE9mKCBoaXQgKSApO1xyXG5cdFx0XHRcdGNvbnN0IHNlYyAgPSBoaXQuY2xvc2VzdCggJy53cGJjX2JmYl9fc2VjdGlvbicgKTtcclxuXHRcdFx0XHRpZiAoIHNlYyApIHtcclxuXHRcdFx0XHRcdHByZXNlbGVjdF90YWJfa2V5ID0gU3RyaW5nKCBpZHggKyAxICk7ICAgICAgICAgICAgICAvLyB0YWJzIGFyZSAxLWJhc2VkIGluIHVpLWNvbHVtbi1zdHlsZXMuanNcclxuXHRcdFx0XHRcdC8vIEhpbnQgZm9yIHRoZSByZW5kZXJlciAoaXQgcmVhZHMgdGhpcyBCRUZPUkUgcmVuZGVyaW5nIGFuZCByZXN0b3JlcyB0aGUgdGFiKS5cclxuXHRcdFx0XHRcdHNlYy5kYXRhc2V0LmNvbF9zdHlsZXNfYWN0aXZlX3RhYiA9IHByZXNlbGVjdF90YWJfa2V5O1xyXG5cdFx0XHRcdFx0Ly8gcHJvbW90ZSBzZWxlY3Rpb24gdG8gdGhlIHNlY3Rpb24gKHNhbWUgVVggYXMgYmVmb3JlKS5cclxuXHRcdFx0XHRcdGhpdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IHNlYztcclxuXHRcdFx0XHRcdC8vIE5FVzogdmlzdWFsbHkgbWFyayB3aGljaCBjb2x1bW4gaXMgYmVpbmcgZWRpdGVkXHJcblx0XHRcdFx0XHRpZiAoIFVJICYmIFVJLldQQkNfQkZCX0NvbHVtbl9TdHlsZXMgJiYgVUkuV1BCQ19CRkJfQ29sdW1uX1N0eWxlcy5zZXRfc2VsZWN0ZWRfY29sX2ZsYWcgKSB7XHJcblx0XHRcdFx0XHRcdFVJLldQQkNfQkZCX0NvbHVtbl9TdHlsZXMuc2V0X3NlbGVjdGVkX2NvbF9mbGFnKCBzZWMsIHByZXNlbGVjdF90YWJfa2V5ICk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBTZWxlY3QgYW5kIHN0b3AgYnViYmxpbmcgc28gb3V0ZXIgY29udGFpbmVycyBkb27igJl0IHJlc2VsZWN0IGEgcGFyZW50LlxyXG5cdFx0XHR0aGlzLnNlbGVjdF9maWVsZCggaGl0ICk7XHJcblx0XHRcdGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG5cdFx0XHQvLyBBbHNvIHNldCB0aGUgdGFiIGFmdGVyIHRoZSBpbnNwZWN0b3IgcmVuZGVycyAod29ya3MgZXZlbiBpZiBpdCB3YXMgYWxyZWFkeSBvcGVuKS5cclxuXHRcdFx0aWYgKCBwcmVzZWxlY3RfdGFiX2tleSApIHtcclxuXHRcdFx0XHQod2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSB8fCBzZXRUaW1lb3V0KSggZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdFx0Y29uc3QgaW5zICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnd3BiY19iZmJfX2luc3BlY3RvcicgKTtcclxuXHRcdFx0XHRcdFx0Y29uc3QgdGFicyA9IGlucyAmJiBpbnMucXVlcnlTZWxlY3RvciggJ1tkYXRhLWJmYi1zbG90PVwiY29sdW1uX3N0eWxlc1wiXSBbZGF0YS13cGJjLXRhYnNdJyApO1xyXG5cdFx0XHRcdFx0XHRpZiAoIHRhYnMgJiYgd2luZG93LndwYmNfdWlfdGFicyAmJiB0eXBlb2Ygd2luZG93LndwYmNfdWlfdGFicy5zZXRfYWN0aXZlID09PSAnZnVuY3Rpb24nICkge1xyXG5cdFx0XHRcdFx0XHRcdHdpbmRvdy53cGJjX3VpX3RhYnMuc2V0X2FjdGl2ZSggdGFicywgcHJlc2VsZWN0X3RhYl9rZXkgKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSBjYXRjaCAoIF9lICkge1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0sIDAgKTtcclxuXHJcblx0XHRcdFx0Ly8gUG9saXRlbHkgYXNrIHRoZSBJbnNwZWN0b3IgdG8gZm9jdXMvb3BlbiB0aGUgXCJDb2x1bW4gU3R5bGVzXCIgZ3JvdXAgYW5kIHRhYi5cclxuXHRcdFx0XHR3cGJjX2JmYl9fZGlzcGF0Y2hfZXZlbnRfc2FmZShcclxuXHRcdFx0XHRcdCd3cGJjX2JmYjppbnNwZWN0b3JfZm9jdXMnLFxyXG5cdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRncm91cCAgOiAnY29sdW1uX3N0eWxlcycsXHJcblx0XHRcdFx0XHRcdHRhYl9rZXk6IHByZXNlbGVjdF90YWJfa2V5XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFNlbGVjdCBhIGZpZWxkIGVsZW1lbnQgb3IgY2xlYXIgc2VsZWN0aW9uLlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR8bnVsbH0gZmllbGRfZWxcclxuXHRcdCAqIEBwYXJhbSB7e3Njcm9sbEludG9WaWV3PzogYm9vbGVhbn19IFtvcHRzID0ge31dXHJcblx0XHQgKi9cclxuXHRcdHNlbGVjdF9maWVsZChmaWVsZF9lbCwgeyBzY3JvbGxJbnRvVmlldyA9IGZhbHNlIH0gPSB7fSkge1xyXG5cdFx0XHRjb25zdCByb290ICAgPSB0aGlzLmJ1aWxkZXIucGFnZXNfY29udGFpbmVyO1xyXG5cdFx0XHRjb25zdCBwcmV2RWwgPSB0aGlzLmdldF9zZWxlY3RlZF9maWVsZD8uKCkgfHwgbnVsbDsgICAvLyB0aGUgb25lIHdl4oCZcmUgbGVhdmluZy5cclxuXHJcblx0XHRcdC8vIElnbm9yZSBlbGVtZW50cyBub3QgaW4gdGhlIGNhbnZhcy5cclxuXHRcdFx0aWYgKCBmaWVsZF9lbCAmJiAhcm9vdC5jb250YWlucyggZmllbGRfZWwgKSApIHtcclxuXHRcdFx0XHRmaWVsZF9lbCA9IG51bGw7IC8vIHRyZWF0IGFzIFwibm8gc2VsZWN0aW9uXCIuXHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIE5FVzogaWYgd2UgYXJlIGxlYXZpbmcgYSBzZWN0aW9uLCBjbGVhciBpdHMgY29sdW1uIGhpZ2hsaWdodFxyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0cHJldkVsICYmIHByZXZFbCAhPT0gZmllbGRfZWwgJiZcclxuXHRcdFx0XHRwcmV2RWwuY2xhc3NMaXN0Py5jb250YWlucyggJ3dwYmNfYmZiX19zZWN0aW9uJyApICYmXHJcblx0XHRcdFx0VUk/LldQQkNfQkZCX0NvbHVtbl9TdHlsZXM/LmNsZWFyX3NlbGVjdGVkX2NvbF9mbGFnXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdFVJLldQQkNfQkZCX0NvbHVtbl9TdHlsZXMuY2xlYXJfc2VsZWN0ZWRfY29sX2ZsYWcoIHByZXZFbCApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBJZiB3ZSdyZSBsZWF2aW5nIGEgZmllbGQsIHBlcm1hbmVudGx5IHN0b3AgYXV0by1uYW1lIGZvciBpdC5cclxuXHRcdFx0aWYgKCBwcmV2RWwgJiYgcHJldkVsICE9PSBmaWVsZF9lbCAmJiBwcmV2RWwuY2xhc3NMaXN0Py5jb250YWlucyggJ3dwYmNfYmZiX19maWVsZCcgKSApIHtcclxuXHRcdFx0XHRwcmV2RWwuZGF0YXNldC5hdXRvbmFtZSA9ICcwJztcclxuXHRcdFx0XHRwcmV2RWwuZGF0YXNldC5mcmVzaCAgICA9ICcwJztcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cm9vdC5xdWVyeVNlbGVjdG9yQWxsKCAnLmlzLXNlbGVjdGVkJyApLmZvckVhY2goIChuKSA9PiB7XHJcblx0XHRcdFx0bi5jbGFzc0xpc3QucmVtb3ZlKCAnaXMtc2VsZWN0ZWQnICk7XHJcblx0XHRcdH0gKTtcclxuXHRcdFx0aWYgKCAhZmllbGRfZWwgKSB7XHJcblx0XHRcdFx0Y29uc3QgcHJldiAgICAgICAgID0gdGhpcy5fc2VsZWN0ZWRfdWlkIHx8IG51bGw7XHJcblx0XHRcdFx0dGhpcy5fc2VsZWN0ZWRfdWlkID0gbnVsbDtcclxuXHRcdFx0XHR0aGlzLmJ1aWxkZXIuaW5zcGVjdG9yPy5jbGVhcj8uKCk7XHJcblx0XHRcdFx0cm9vdC5jbGFzc0xpc3QucmVtb3ZlKCAnaGFzLXNlbGVjdGlvbicgKTtcclxuXHRcdFx0XHR0aGlzLmJ1aWxkZXIuYnVzLmVtaXQoIENvcmUuV1BCQ19CRkJfRXZlbnRzLkNMRUFSX1NFTEVDVElPTiwgeyBwcmV2X3VpZDogcHJldiwgc291cmNlOiAnYnVpbGRlcicgfSApO1xyXG5cclxuXHRcdFx0XHQvLyBBdXRvLW9wZW4gXCJBZGQgRmllbGRzXCIgd2hlbiBub3RoaW5nIGlzIHNlbGVjdGVkLlxyXG5cdFx0XHRcdHdwYmNfYmZiX19kaXNwYXRjaF9ldmVudF9zYWZlKFxyXG5cdFx0XHRcdFx0J3dwYmNfYmZiOnNob3dfcGFuZWwnLFxyXG5cdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRwYW5lbF9pZDogJ3dwYmNfYmZiX19wYWxldHRlX2FkZF9uZXcnLFxyXG5cdFx0XHRcdFx0XHR0YWJfaWQgIDogJ3dwYmNfdGFiX2xpYnJhcnknXHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0KTtcclxuXHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblx0XHRcdGZpZWxkX2VsLmNsYXNzTGlzdC5hZGQoICdpcy1zZWxlY3RlZCcgKTtcclxuXHRcdFx0dGhpcy5fc2VsZWN0ZWRfdWlkID0gZmllbGRfZWwuZ2V0QXR0cmlidXRlKCAnZGF0YS11aWQnICkgfHwgbnVsbDtcclxuXHJcblx0XHRcdC8vIEZhbGxiYWNrOiBlbnN1cmUgc2VjdGlvbnMgYW5ub3VuY2UgdGhlbXNlbHZlcyBhcyB0eXBlPVwic2VjdGlvblwiLlxyXG5cdFx0XHRpZiAoIGZpZWxkX2VsLmNsYXNzTGlzdC5jb250YWlucyggJ3dwYmNfYmZiX19zZWN0aW9uJyApICYmICFmaWVsZF9lbC5kYXRhc2V0LnR5cGUgKSB7XHJcblx0XHRcdFx0ZmllbGRfZWwuZGF0YXNldC50eXBlID0gJ3NlY3Rpb24nO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoIHNjcm9sbEludG9WaWV3ICkge1xyXG5cdFx0XHRcdGZpZWxkX2VsLnNjcm9sbEludG9WaWV3KCB7IGJlaGF2aW9yOiAnc21vb3RoJywgYmxvY2s6ICdjZW50ZXInIH0gKTtcclxuXHRcdFx0fVxyXG5cdFx0XHR0aGlzLmJ1aWxkZXIuaW5zcGVjdG9yPy5iaW5kX3RvX2ZpZWxkPy4oIGZpZWxkX2VsICk7XHJcblxyXG5cdFx0XHQvLyBGYWxsYmFjazogZW5zdXJlIGluc3BlY3RvciBlbmhhbmNlcnMgKGluY2wuIFZhbHVlU2xpZGVyKSBydW4gZXZlcnkgYmluZC5cclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRjb25zdCBpbnMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ3dwYmNfYmZiX19pbnNwZWN0b3InIClcclxuXHRcdFx0XHRcdHx8IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoICcud3BiY19iZmJfX2luc3BlY3RvcicgKTtcclxuXHRcdFx0XHRpZiAoIGlucyApIHtcclxuXHRcdFx0XHRcdFVJLkluc3BlY3RvckVuaGFuY2Vycz8uc2Nhbj8uKCBpbnMgKTsgICAgICAgICAgICAgIC8vIHJ1bnMgYWxsIGVuaGFuY2Vyc1xyXG5cdFx0XHRcdFx0VUkuV1BCQ19CRkJfVmFsdWVTbGlkZXI/LmluaXRfb24/LiggaW5zICk7ICAgICAgICAgLy8gZXh0cmEgYmVsdC1hbmQtc3VzcGVuZGVyc1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBjYXRjaCAoIF8gKSB7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIE5FVzogd2hlbiBzZWxlY3RpbmcgYSBzZWN0aW9uLCByZWZsZWN0IGl0cyBhY3RpdmUgdGFiIGFzIHRoZSBoaWdobGlnaHRlZCBjb2x1bW4uXHJcblx0XHRcdGlmICggZmllbGRfZWwuY2xhc3NMaXN0LmNvbnRhaW5zKCAnd3BiY19iZmJfX3NlY3Rpb24nICkgJiZcclxuXHRcdFx0XHRVST8uV1BCQ19CRkJfQ29sdW1uX1N0eWxlcz8uc2V0X3NlbGVjdGVkX2NvbF9mbGFnICkge1xyXG5cdFx0XHRcdHZhciBrID0gKGZpZWxkX2VsLmRhdGFzZXQgJiYgZmllbGRfZWwuZGF0YXNldC5jb2xfc3R5bGVzX2FjdGl2ZV90YWIpXHJcblx0XHRcdFx0XHQ/IGZpZWxkX2VsLmRhdGFzZXQuY29sX3N0eWxlc19hY3RpdmVfdGFiIDogJzEnO1xyXG5cdFx0XHRcdFVJLldQQkNfQkZCX0NvbHVtbl9TdHlsZXMuc2V0X3NlbGVjdGVkX2NvbF9mbGFnKCBmaWVsZF9lbCwgayApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBLZWVwIHNlY3Rpb25zICYgZmllbGRzIGluIHRoZSBzYW1lIGZsb3c6XHJcblx0XHRcdC8vIDEpIEdlbmVyaWMgaHlkcmF0b3IgZm9yIHNpbXBsZSBkYXRhc2V0LWJhY2tlZCBjb250cm9scy5cclxuXHRcdFx0aWYgKCBmaWVsZF9lbCApIHtcclxuXHRcdFx0XHRVSS5XUEJDX0JGQl9JbnNwZWN0b3JfQnJpZGdlLl9nZW5lcmljX2h5ZHJhdGVfY29udHJvbHM/LiggdGhpcy5idWlsZGVyLCBmaWVsZF9lbCApO1xyXG5cdFx0XHRcdFVJLldQQkNfQkZCX0luc3BlY3Rvcl9CcmlkZ2UuX2h5ZHJhdGVfc3BlY2lhbF9jb250cm9scz8uKCB0aGlzLmJ1aWxkZXIsIGZpZWxkX2VsICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIEF1dG8tb3BlbiBJbnNwZWN0b3Igd2hlbiBhIHVzZXIgc2VsZWN0cyBhIGZpZWxkL3NlY3Rpb24gLlxyXG5cdFx0XHR3cGJjX2JmYl9fZGlzcGF0Y2hfZXZlbnRfc2FmZShcclxuXHRcdFx0XHQnd3BiY19iZmI6c2hvd19wYW5lbCcsXHJcblx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0cGFuZWxfaWQ6ICd3cGJjX2JmYl9faW5zcGVjdG9yJyxcclxuXHRcdFx0XHRcdHRhYl9pZCAgOiAnd3BiY190YWJfaW5zcGVjdG9yJ1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0KTtcclxuXHJcblx0XHRcdHJvb3QuY2xhc3NMaXN0LmFkZCggJ2hhcy1zZWxlY3Rpb24nICk7XHJcblx0XHRcdHRoaXMuYnVpbGRlci5idXMuZW1pdCggQ29yZS5XUEJDX0JGQl9FdmVudHMuU0VMRUNULCB7IHVpZDogdGhpcy5fc2VsZWN0ZWRfdWlkLCBlbDogZmllbGRfZWwgfSApO1xyXG5cdFx0XHRjb25zdCBsYWJlbCA9IGZpZWxkX2VsPy5xdWVyeVNlbGVjdG9yKCAnLndwYmNfYmZiX19maWVsZC1sYWJlbCcgKT8udGV4dENvbnRlbnQgfHwgKGZpZWxkX2VsLmNsYXNzTGlzdC5jb250YWlucyggJ3dwYmNfYmZiX19zZWN0aW9uJyApID8gJ3NlY3Rpb24nIDogJycpIHx8IGZpZWxkX2VsPy5kYXRhc2V0Py5pZCB8fCAnaXRlbSc7XHJcblx0XHRcdHRoaXMuYnVpbGRlci5fYW5ub3VuY2UoICdTZWxlY3RlZCAnICsgbGFiZWwgKyAnLicgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKiogQHJldHVybnMge0hUTUxFbGVtZW50fG51bGx9ICovXHJcblx0XHRnZXRfc2VsZWN0ZWRfZmllbGQoKSB7XHJcblx0XHRcdGlmICggIXRoaXMuX3NlbGVjdGVkX3VpZCApIHtcclxuXHRcdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdFx0fVxyXG5cdFx0XHRjb25zdCBlc2NfYXR0ciA9IENvcmUuV1BCQ19CRkJfU2FuaXRpemUuZXNjX2F0dHJfdmFsdWVfZm9yX3NlbGVjdG9yKCB0aGlzLl9zZWxlY3RlZF91aWQgKTtcclxuXHRcdFx0cmV0dXJuIHRoaXMuYnVpbGRlci5wYWdlc19jb250YWluZXIucXVlcnlTZWxlY3RvciggYC53cGJjX2JmYl9fZmllbGRbZGF0YS11aWQ9XCIke2VzY19hdHRyfVwiXSwgLndwYmNfYmZiX19zZWN0aW9uW2RhdGEtdWlkPVwiJHtlc2NfYXR0cn1cIl1gICk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqIEBwYXJhbSB7Q3VzdG9tRXZlbnR9IGV2ICovXHJcblx0XHRvbl9jbGVhcihldikge1xyXG5cdFx0XHRjb25zdCBzcmMgPSBldj8uZGV0YWlsPy5zb3VyY2UgPz8gZXY/LnNvdXJjZTtcclxuXHRcdFx0aWYgKCBzcmMgIT09ICdidWlsZGVyJyApIHtcclxuXHRcdFx0XHR0aGlzLnNlbGVjdF9maWVsZCggbnVsbCApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdH07XHJcblxyXG5cdC8qKlxyXG5cdCAqIEJyaWRnZXMgdGhlIGJ1aWxkZXIgd2l0aCB0aGUgSW5zcGVjdG9yIGFuZCBzYW5pdGl6ZXMgaWQvbmFtZSBlZGl0cy5cclxuXHQgKi9cclxuXHRVSS5XUEJDX0JGQl9JbnNwZWN0b3JfQnJpZGdlID0gY2xhc3MgZXh0ZW5kcyBVSS5XUEJDX0JGQl9Nb2R1bGUge1xyXG5cclxuXHRcdGluaXQoKSB7XHJcblx0XHRcdHRoaXMuX2F0dGFjaF9pbnNwZWN0b3IoKTtcclxuXHRcdFx0dGhpcy5fYmluZF9pZF9zYW5pdGl6ZXIoKTtcclxuXHRcdFx0dGhpcy5fb3Blbl9pbnNwZWN0b3JfYWZ0ZXJfZmllbGRfYWRkZWQoKTtcclxuXHRcdFx0dGhpcy5fYmluZF9mb2N1c19zaG9ydGN1dHMoKTtcclxuXHRcdH1cclxuXHJcblx0XHRfYXR0YWNoX2luc3BlY3RvcigpIHtcclxuXHRcdFx0Y29uc3QgYiAgICAgID0gdGhpcy5idWlsZGVyO1xyXG5cdFx0XHRjb25zdCBhdHRhY2ggPSAoKSA9PiB7XHJcblx0XHRcdFx0aWYgKCB0eXBlb2Ygd2luZG93LldQQkNfQkZCX0luc3BlY3RvciA9PT0gJ2Z1bmN0aW9uJyApIHtcclxuXHRcdFx0XHRcdGIuaW5zcGVjdG9yID0gbmV3IFdQQkNfQkZCX0luc3BlY3RvciggZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICd3cGJjX2JmYl9faW5zcGVjdG9yJyApLCBiICk7XHJcblx0XHRcdFx0XHR0aGlzLl9iaW5kX2lkX3Nhbml0aXplcigpO1xyXG5cdFx0XHRcdFx0ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ3dwYmNfYmZiX2luc3BlY3Rvcl9yZWFkeScsIGF0dGFjaCApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fTtcclxuXHRcdFx0Ly8gRW5zdXJlIHdlIGJpbmQgYWZ0ZXIgbGF0ZSByZWFkeSBhcyB3ZWxsLlxyXG5cdFx0XHRpZiAoIHR5cGVvZiB3aW5kb3cuV1BCQ19CRkJfSW5zcGVjdG9yID09PSAnZnVuY3Rpb24nICkge1xyXG5cdFx0XHRcdGF0dGFjaCgpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGIuaW5zcGVjdG9yID0ge1xyXG5cdFx0XHRcdFx0YmluZF90b19maWVsZCgpIHtcclxuXHRcdFx0XHRcdH0sIGNsZWFyKCkge1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH07XHJcblx0XHRcdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggJ3dwYmNfYmZiX2luc3BlY3Rvcl9yZWFkeScsIGF0dGFjaCApO1xyXG5cdFx0XHRcdHNldFRpbWVvdXQoIGF0dGFjaCwgMCApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBMaXN0ZW4gZm9yIFwiZm9jdXNcIiBoaW50cyBmcm9tIHRoZSBjYW52YXMgYW5kIG9wZW4gdGhlIHJpZ2h0IGdyb3VwL3RhYi5cclxuXHRcdCAqIC0gU3VwcG9ydHM6IGdyb3VwID09PSAnY29sdW1uX3N0eWxlcydcclxuXHRcdCAqIC0gQWxzbyBzY3JvbGxzIHRoZSBncm91cCBpbnRvIHZpZXcuXHJcblx0XHQgKi9cclxuXHRcdF9iaW5kX2ZvY3VzX3Nob3J0Y3V0cygpIHtcclxuXHRcdFx0LyoqIEBwYXJhbSB7Q3VzdG9tRXZlbnR9IGUgKi9cclxuXHRcdFx0Y29uc3Qgb25fZm9jdXMgPSAoZSkgPT4ge1xyXG5cdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHRjb25zdCBncnBfa2V5ID0gZSAmJiBlLmRldGFpbCAmJiBlLmRldGFpbC5ncm91cDtcclxuXHRcdFx0XHRcdGNvbnN0IHRhYl9rZXkgPSBlICYmIGUuZGV0YWlsICYmIGUuZGV0YWlsLnRhYl9rZXk7XHJcblx0XHRcdFx0XHRpZiAoICFncnBfa2V5ICkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0Y29uc3QgaW5zID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICd3cGJjX2JmYl9faW5zcGVjdG9yJyApIHx8IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoICcud3BiY19iZmJfX2luc3BlY3RvcicgKTtcclxuXHRcdFx0XHRcdGlmICggIWlucyApIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmICggZ3JwX2tleSA9PT0gJ2NvbHVtbl9zdHlsZXMnICkge1xyXG5cdFx0XHRcdFx0XHQvLyBGaW5kIHRoZSBDb2x1bW4gU3R5bGVzIHNsb3QvZ3JvdXAuXHJcblx0XHRcdFx0XHRcdGNvbnN0IHNsb3QgPSBpbnMucXVlcnlTZWxlY3RvciggJ1tkYXRhLWJmYi1zbG90PVwiY29sdW1uX3N0eWxlc1wiXScgKSB8fCBpbnMucXVlcnlTZWxlY3RvciggJ1tkYXRhLWluc3BlY3Rvci1ncm91cC1rZXk9XCJjb2x1bW5fc3R5bGVzXCJdJyApO1xyXG5cdFx0XHRcdFx0XHRpZiAoIHNsb3QgKSB7XHJcblx0XHRcdFx0XHRcdFx0Ly8gT3BlbiBjb2xsYXBzaWJsZSBjb250YWluZXIgaWYgcHJlc2VudC5cclxuXHRcdFx0XHRcdFx0XHRjb25zdCBncm91cF93cmFwID0gc2xvdC5jbG9zZXN0KCAnLmluc3BlY3Rvcl9fZ3JvdXAnICkgfHwgc2xvdC5jbG9zZXN0KCAnW2RhdGEtaW5zcGVjdG9yLWdyb3VwXScgKTtcclxuXHRcdFx0XHRcdFx0XHRpZiAoIGdyb3VwX3dyYXAgJiYgIWdyb3VwX3dyYXAuY2xhc3NMaXN0LmNvbnRhaW5zKCAnaXMtb3BlbicgKSApIHtcclxuXHRcdFx0XHRcdFx0XHRcdGdyb3VwX3dyYXAuY2xhc3NMaXN0LmFkZCggJ2lzLW9wZW4nICk7XHJcblx0XHRcdFx0XHRcdFx0XHQvLyBNaXJyb3IgQVJJQSBzdGF0ZSBpZiB5b3VyIGhlYWRlciB1c2VzIGFyaWEtZXhwYW5kZWQuXHJcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBoZWFkZXJfYnRuID0gZ3JvdXBfd3JhcC5xdWVyeVNlbGVjdG9yKCAnW2FyaWEtZXhwYW5kZWRdJyApO1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCBoZWFkZXJfYnRuICkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRoZWFkZXJfYnRuLnNldEF0dHJpYnV0ZSggJ2FyaWEtZXhwYW5kZWQnLCAndHJ1ZScgKTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdC8vIE9wdGlvbmFsOiBzZXQgdGhlIHJlcXVlc3RlZCB0YWIga2V5IGlmIHRhYnMgZXhpc3QgaW4gdGhpcyBncm91cC5cclxuXHRcdFx0XHRcdFx0XHRpZiAoIHRhYl9rZXkgKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRjb25zdCB0YWJzID0gc2xvdC5xdWVyeVNlbGVjdG9yKCAnW2RhdGEtd3BiYy10YWJzXScgKTtcclxuXHRcdFx0XHRcdFx0XHRcdGlmICggdGFicyAmJiB3aW5kb3cud3BiY191aV90YWJzICYmIHR5cGVvZiB3aW5kb3cud3BiY191aV90YWJzLnNldF9hY3RpdmUgPT09ICdmdW5jdGlvbicgKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHdpbmRvdy53cGJjX3VpX3RhYnMuc2V0X2FjdGl2ZSggdGFicywgU3RyaW5nKCB0YWJfa2V5ICkgKTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdC8vIEJyaW5nIGludG8gdmlldyBmb3IgY29udmVuaWVuY2UuXHJcblx0XHRcdFx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdFx0XHRcdC8vIFVuY29tbWVudCAoT25seSAgaWYgbmVlZGVkKSB0aGlzIHRvIEFVVE8gU0NST0xMIHRvICBzcGVjaWZpYyBDT0xVTU4gaW4gdGhlIHNlY3Rpb246LlxyXG5cdFx0XHRcdFx0XHRcdFx0Ly8gc2xvdC5zY3JvbGxJbnRvVmlldyggeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnbmVhcmVzdCcgfSApO1xyXG5cdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKCBfZSApIHt9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9IGNhdGNoICggX2UgKSB7fVxyXG5cdFx0XHR9O1xyXG5cclxuXHRcdFx0dGhpcy5fb25faW5zcGVjdG9yX2ZvY3VzID0gb25fZm9jdXM7XHJcblx0XHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoICd3cGJjX2JmYjppbnNwZWN0b3JfZm9jdXMnLCBvbl9mb2N1cywgdHJ1ZSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdGRlc3Ryb3koKSB7XHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0aWYgKCB0aGlzLl9vbl9pbnNwZWN0b3JfZm9jdXMgKSB7XHJcblx0XHRcdFx0XHRkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCAnd3BiY19iZmI6aW5zcGVjdG9yX2ZvY3VzJywgdGhpcy5fb25faW5zcGVjdG9yX2ZvY3VzLCB0cnVlICk7XHJcblx0XHRcdFx0XHR0aGlzLl9vbl9pbnNwZWN0b3JfZm9jdXMgPSBudWxsO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBjYXRjaCAoIF9lICkge1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogSHlkcmF0ZSBpbnNwZWN0b3IgaW5wdXRzIGZvciBcInNwZWNpYWxcIiBrZXlzIHRoYXQgd2UgaGFuZGxlIGV4cGxpY2l0bHkuXHJcblx0XHQgKiBXb3JrcyBmb3IgYm90aCBmaWVsZHMgYW5kIHNlY3Rpb25zLlxyXG5cdFx0ICogQHBhcmFtIHtXUEJDX0Zvcm1fQnVpbGRlcn0gYnVpbGRlclxyXG5cdFx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gc2VsXHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBfaHlkcmF0ZV9zcGVjaWFsX2NvbnRyb2xzKGJ1aWxkZXIsIHNlbCkge1xyXG5cdFx0XHRjb25zdCBpbnMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ3dwYmNfYmZiX19pbnNwZWN0b3InICk7XHJcblx0XHRcdGlmICggIWlucyB8fCAhc2VsICkgcmV0dXJuO1xyXG5cclxuXHRcdFx0Y29uc3Qgc2V0VmFsID0gKGtleSwgdmFsKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgY3RybCA9IGlucy5xdWVyeVNlbGVjdG9yKCBgW2RhdGEtaW5zcGVjdG9yLWtleT1cIiR7a2V5fVwiXWAgKTtcclxuXHRcdFx0XHRpZiAoIGN0cmwgJiYgJ3ZhbHVlJyBpbiBjdHJsICkgY3RybC52YWx1ZSA9IFN0cmluZyggdmFsID8/ICcnICk7XHJcblx0XHRcdH07XHJcblxyXG5cdFx0XHQvLyBJbnRlcm5hbCBpZCAvIG5hbWUgLyBwdWJsaWMgaHRtbF9pZC5cclxuXHRcdFx0c2V0VmFsKCAnaWQnLCBzZWwuZ2V0QXR0cmlidXRlKCAnZGF0YS1pZCcgKSB8fCAnJyApO1xyXG5cdFx0XHRzZXRWYWwoICduYW1lJywgc2VsLmdldEF0dHJpYnV0ZSggJ2RhdGEtbmFtZScgKSB8fCAnJyApO1xyXG5cdFx0XHRzZXRWYWwoICdodG1sX2lkJywgc2VsLmdldEF0dHJpYnV0ZSggJ2RhdGEtaHRtbF9pZCcgKSB8fCAnJyApO1xyXG5cclxuXHRcdFx0Ly8gU2VjdGlvbi1vbmx5IGV4dHJhcyBhcmUgaGFybWxlc3MgdG8gc2V0IGZvciBmaWVsZHMgKGNvbnRyb2xzIG1heSBub3QgZXhpc3QpLlxyXG5cdFx0XHRzZXRWYWwoICdjc3NjbGFzcycsIHNlbC5nZXRBdHRyaWJ1dGUoICdkYXRhLWNzc2NsYXNzJyApIHx8ICcnICk7XHJcblx0XHRcdHNldFZhbCggJ2xhYmVsJywgc2VsLmdldEF0dHJpYnV0ZSggJ2RhdGEtbGFiZWwnICkgfHwgJycgKTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBIeWRyYXRlIGluc3BlY3RvciBpbnB1dHMgdGhhdCBkZWNsYXJlIGEgZ2VuZXJpYyBkYXRhc2V0IG1hcHBpbmcgdmlhXHJcblx0XHQgKiBbZGF0YS1pbnNwZWN0b3Ita2V5XSBidXQgZG8gTk9UIGRlY2xhcmUgYSBjdXN0b20gdmFsdWVfZnJvbSBhZGFwdGVyLlxyXG5cdFx0ICogVGhpcyBtYWtlcyBzZWN0aW9ucyBmb2xsb3cgdGhlIHNhbWUgZGF0YSBmbG93IGFzIGZpZWxkcyB3aXRoIGFsbW9zdCBubyBnbHVlLlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7V1BCQ19Gb3JtX0J1aWxkZXJ9IGJ1aWxkZXJcclxuXHRcdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHNlbCAtIGN1cnJlbnRseSBzZWxlY3RlZCBmaWVsZC9zZWN0aW9uXHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBfZ2VuZXJpY19oeWRyYXRlX2NvbnRyb2xzKGJ1aWxkZXIsIHNlbCkge1xyXG5cdFx0XHRjb25zdCBpbnMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ3dwYmNfYmZiX19pbnNwZWN0b3InICk7XHJcblx0XHRcdGlmICggIWlucyB8fCAhc2VsICkgcmV0dXJuO1xyXG5cclxuXHRcdFx0Y29uc3QgU0tJUCA9IC9eKGlkfG5hbWV8aHRtbF9pZHxjc3NjbGFzc3xsYWJlbCkkLzsgLy8gaGFuZGxlZCBieSBfaHlkcmF0ZV9zcGVjaWFsX2NvbnRyb2xzXHJcblxyXG5cdFx0XHQvLyBORVc6IHJlYWQgc2NoZW1hIGZvciB0aGUgc2VsZWN0ZWQgZWxlbWVudOKAmXMgdHlwZS5cclxuXHRcdFx0Y29uc3Qgc2NoZW1hcyAgICAgPSB3aW5kb3cuV1BCQ19CRkJfU2NoZW1hcyB8fCB7fTtcclxuXHRcdFx0Y29uc3QgdHlwZUtleSAgICAgPSAoc2VsLmRhdGFzZXQgJiYgc2VsLmRhdGFzZXQudHlwZSkgfHwgJyc7XHJcblx0XHRcdGNvbnN0IHNjaGVtYUVudHJ5ID0gc2NoZW1hc1t0eXBlS2V5XSB8fCBudWxsO1xyXG5cdFx0XHRjb25zdCBwcm9wc1NjaGVtYSA9IChzY2hlbWFFbnRyeSAmJiBzY2hlbWFFbnRyeS5zY2hlbWEgJiYgc2NoZW1hRW50cnkuc2NoZW1hLnByb3BzKSA/IHNjaGVtYUVudHJ5LnNjaGVtYS5wcm9wcyA6IHt9O1xyXG5cdFx0XHRjb25zdCBoYXNPd24gICAgICA9IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsLmJpbmQoIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkgKTtcclxuXHRcdFx0Y29uc3QgZ2V0RGVmYXVsdCAgPSAoa2V5KSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgbWV0YSA9IHByb3BzU2NoZW1hW2tleV07XHJcblx0XHRcdFx0cmV0dXJuIChtZXRhICYmIGhhc093biggbWV0YSwgJ2RlZmF1bHQnICkpID8gbWV0YS5kZWZhdWx0IDogdW5kZWZpbmVkO1xyXG5cdFx0XHR9O1xyXG5cclxuXHRcdFx0aW5zLnF1ZXJ5U2VsZWN0b3JBbGwoICdbZGF0YS1pbnNwZWN0b3Ita2V5XScgKS5mb3JFYWNoKCAoY3RybCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IGtleSA9IFN0cmluZyggY3RybC5kYXRhc2V0Py5pbnNwZWN0b3JLZXkgfHwgJycgKS50b0xvd2VyQ2FzZSgpO1xyXG5cdFx0XHRcdGlmICggIWtleSB8fCBTS0lQLnRlc3QoIGtleSApICkgcmV0dXJuO1xyXG5cclxuXHRcdFx0XHQvLyBFbGVtZW50LWxldmVsIGxvY2suXHJcblx0XHRcdFx0Y29uc3QgZGwgPSAoY3RybC5kYXRhc2V0Py5sb2NrZWQgfHwgJycpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG5cdFx0XHRcdGlmICggZGwgPT09ICcxJyB8fCBkbCA9PT0gJ3RydWUnIHx8IGRsID09PSAneWVzJyApIHJldHVybjtcclxuXHJcblx0XHRcdFx0Ly8gUmVzcGVjdCBleHBsaWNpdCBhZGFwdGVycy5cclxuXHRcdFx0XHRpZiAoIGN0cmwuZGF0YXNldD8udmFsdWVfZnJvbSB8fCBjdHJsLmRhdGFzZXQ/LnZhbHVlRnJvbSApIHJldHVybjtcclxuXHJcblx0XHRcdFx0Y29uc3QgcmF3ICAgICAgPSBzZWwuZGF0YXNldCA/IHNlbC5kYXRhc2V0W2tleV0gOiB1bmRlZmluZWQ7XHJcblx0XHRcdFx0Y29uc3QgaGFzUmF3ICAgPSBzZWwuZGF0YXNldCA/IGhhc093biggc2VsLmRhdGFzZXQsIGtleSApIDogZmFsc2U7XHJcblx0XHRcdFx0Y29uc3QgZGVmVmFsdWUgPSBnZXREZWZhdWx0KCBrZXkgKTtcclxuXHJcblx0XHRcdFx0Ly8gQmVzdC1lZmZvcnQgY29udHJvbCB0eXBpbmcgd2l0aCBzY2hlbWEgZGVmYXVsdCBmYWxsYmFjayB3aGVuIHZhbHVlIGlzIGFic2VudC5cclxuXHJcblx0XHRcdFx0aWYgKCBjdHJsIGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCAmJiAoY3RybC50eXBlID09PSAnY2hlY2tib3gnIHx8IGN0cmwudHlwZSA9PT0gJ3JhZGlvJykgKSB7XG5cdFx0XHRcdFx0Ly8gSWYgZGF0YXNldCBpcyBtaXNzaW5nIHRoZSBrZXkgZW50aXJlbHkgLT4gdXNlIHNjaGVtYSBkZWZhdWx0IChib29sZWFuKS5cblx0XHRcdFx0XHRpZiAoICFoYXNSYXcgKSB7XG5cdFx0XHRcdFx0XHRjdHJsLmNoZWNrZWQgPSAhIWRlZlZhbHVlO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQvLyBBbiBleHBsaWNpdCBlbXB0eSB2YWx1ZSBpcyB0aGUgbGVnYWN5IHBlcnNpc3RlZCByZXByZXNlbnRhdGlvbiBvZiBmYWxzZS5cblx0XHRcdFx0XHRcdGN0cmwuY2hlY2tlZCA9IENvcmUuV1BCQ19CRkJfU2FuaXRpemUuY29lcmNlX2Jvb2xlYW4oIHJhdywgZmFsc2UgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAoICd2YWx1ZScgaW4gY3RybCApIHtcclxuXHRcdFx0XHRcdGlmICggaGFzUmF3ICkge1xyXG5cdFx0XHRcdFx0XHRjdHJsLnZhbHVlID0gKHJhdyAhPSBudWxsKSA/IFN0cmluZyggcmF3ICkgOiAnJztcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdGN0cmwudmFsdWUgPSAoZGVmVmFsdWUgPT0gbnVsbCkgPyAnJyA6IFN0cmluZyggZGVmVmFsdWUgKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gKTtcclxuXHRcdH1cclxuXHJcblx0XHRfYmluZF9pZF9zYW5pdGl6ZXIoKSB7XHJcblx0XHRcdGNvbnN0IGIgICA9IHRoaXMuYnVpbGRlcjtcclxuXHRcdFx0Y29uc3QgaW5zID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICd3cGJjX2JmYl9faW5zcGVjdG9yJyApO1xyXG5cdFx0XHRpZiAoICEgaW5zICkge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoIGlucy5fX3dwYmNfYmZiX2lkX3Nhbml0aXplcl9ib3VuZCApIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0aW5zLl9fd3BiY19iZmJfaWRfc2FuaXRpemVyX2JvdW5kID0gdHJ1ZTtcclxuXHJcblx0XHRcdGNvbnN0IGhhbmRsZXIgPSAoZSkgPT4ge1xyXG5cclxuXHRcdFx0XHRjb25zdCB0ID0gZS50YXJnZXQ7XHJcblx0XHRcdFx0aWYgKCAhdCB8fCAhKCd2YWx1ZScgaW4gdCkgKSB7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGNvbnN0IGtleSAgICAgICA9ICh0LmRhdGFzZXQ/Lmluc3BlY3RvcktleSB8fCAnJykudG9Mb3dlckNhc2UoKTtcclxuXHRcdFx0XHRjb25zdCBzZWwgICAgICAgPSBiLmdldF9zZWxlY3RlZF9maWVsZD8uKCk7XHJcblx0XHRcdFx0Y29uc3QgaXNTZWN0aW9uID0gc2VsPy5jbGFzc0xpc3Q/LmNvbnRhaW5zKCAnd3BiY19iZmJfX3NlY3Rpb24nICk7XHJcblx0XHRcdFx0aWYgKCAhc2VsICkgcmV0dXJuO1xyXG5cclxuXHRcdFx0XHQvLyBVbmlmaWVkIGVtaXR0ZXIgdGhhdCBhbHdheXMgaW5jbHVkZXMgdGhlIGVsZW1lbnQgcmVmZXJlbmNlLlxyXG5cdFx0XHRcdGNvbnN0IEVWICAgICAgICAgICAgICA9IENvcmUuV1BCQ19CRkJfRXZlbnRzO1xyXG5cdFx0XHRcdC8vIFNUUlVDVFVSRV9DSEFOR0UgY2FuIGJlIFwiZXhwZW5zaXZlXCIgYmVjYXVzZSBvdGhlciBsaXN0ZW5lcnMgbWF5IHRyaWdnZXIgZnVsbCBjYW52YXMgcmVmcmVzaC5cclxuXHRcdFx0XHQvLyBEZWJvdW5jZSBvbmx5IGNvbnRpbnVvdXMgY29udHJvbHMgKGUuZy4gdmFsdWUgc2xpZGVyIHNjcnViYmluZykgb24gdGhlIElOUFVUIHBoYXNlLlxyXG5cdFx0XHRcdGNvbnN0IGVuc3VyZV9zY19kZWJvdW5jZV9zdGF0ZSA9ICgpID0+IHtcclxuXHRcdFx0XHRcdGlmICggYi5fX3dwYmNfYmZiX3NjX2RlYm91bmNlX3N0YXRlICkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gYi5fX3dwYmNfYmZiX3NjX2RlYm91bmNlX3N0YXRlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0Yi5fX3dwYmNfYmZiX3NjX2RlYm91bmNlX3N0YXRlID0geyB0aW1lcl9pZDogMCwgcGVuZGluZ19wYXlsb2FkOiBudWxsIH07XHJcblx0XHRcdFx0XHRyZXR1cm4gYi5fX3dwYmNfYmZiX3NjX2RlYm91bmNlX3N0YXRlO1xyXG5cdFx0XHRcdH07XHJcblxyXG5cdFx0XHRcdGNvbnN0IGNhbmNlbF9zY19kZWJvdW5jZWRfZW1pdCA9ICgpID0+IHtcclxuXHRcdFx0XHRcdGNvbnN0IHN0ID0gYi5fX3dwYmNfYmZiX3NjX2RlYm91bmNlX3N0YXRlO1xyXG5cdFx0XHRcdFx0aWYgKCAhc3QgKSByZXR1cm47XHJcblx0XHRcdFx0XHR0cnkgeyBjbGVhclRpbWVvdXQoIHN0LnRpbWVyX2lkICk7IH0gY2F0Y2ggKCBfICkge31cclxuXHRcdFx0XHRcdHN0LnRpbWVyX2lkICAgICAgICA9IDA7XHJcblx0XHRcdFx0XHRzdC5wZW5kaW5nX3BheWxvYWQgPSBudWxsO1xyXG5cdFx0XHRcdH07XHJcblxyXG5cdFx0XHRcdGNvbnN0IGJ1c19lbWl0X2NoYW5nZSA9IChyZWFzb24sIGV4dHJhID0ge30pID0+IHtcclxuXHRcdFx0XHRcdC8vIElmIHdl4oCZcmUgY29tbWl0dGluZyBzb21ldGhpbmcgKGNoYW5nZS9ibHVyL2V0YyksIGRyb3AgYW55IHBlbmRpbmcgXCJpbnB1dFwiIGVtaXQuXHJcblx0XHRcdFx0XHRjYW5jZWxfc2NfZGVib3VuY2VkX2VtaXQoKTtcclxuXHRcdFx0XHRcdGIuYnVzPy5lbWl0Py4oIEVWLlNUUlVDVFVSRV9DSEFOR0UsIHsgcmVhc29uLCBlbDogc2VsLCAuLi5leHRyYSB9ICk7XHJcblx0XHRcdFx0fTtcclxuXHJcblx0XHRcdFx0Y29uc3QgYnVzX2VtaXRfY2hhbmdlX2RlYm91bmNlZCA9IChyZWFzb24sIGV4dHJhID0ge30sIHdhaXRfbXMpID0+IHtcclxuXHRcdFx0XHRcdGNvbnN0IHN0ID0gZW5zdXJlX3NjX2RlYm91bmNlX3N0YXRlKCk7XHJcblx0XHRcdFx0XHRjb25zdCBtcyA9IE51bWJlci5pc0Zpbml0ZSggd2FpdF9tcyApXHJcblx0XHRcdFx0XHRcdD8gd2FpdF9tc1xyXG5cdFx0XHRcdFx0XHQ6IChOdW1iZXIuaXNGaW5pdGUoIFVJLlNUUlVDVFVSRV9DSEFOR0VfREVCT1VOQ0VfTVMgKSA/IFVJLlNUUlVDVFVSRV9DSEFOR0VfREVCT1VOQ0VfTVMgOiAyNDApO1xyXG5cclxuXHRcdFx0XHRcdC8vIENhcHR1cmUgdGhlIENVUlJFTlQgc2VsZWN0ZWQgZWxlbWVudCBpbnRvIHRoZSBwYXlsb2FkIG5vdyAoc3RhYmxlIHJlZikuXHJcblx0XHRcdFx0XHRzdC5wZW5kaW5nX3BheWxvYWQgPSB7IHJlYXNvbiwgZWw6IHNlbCwgLi4uZXh0cmEsIGRlYm91bmNlZDogdHJ1ZSB9O1xyXG5cclxuXHRcdFx0XHRcdHRyeSB7IGNsZWFyVGltZW91dCggc3QudGltZXJfaWQgKTsgfSBjYXRjaCAoIF8gKSB7fVxyXG5cdFx0XHRcdFx0c3QudGltZXJfaWQgPSBzZXRUaW1lb3V0KCBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdFx0XHRcdHN0LnRpbWVyX2lkID0gMDtcclxuXHRcdFx0XHRcdFx0Y29uc3QgcGF5bG9hZCA9IHN0LnBlbmRpbmdfcGF5bG9hZDtcclxuXHRcdFx0XHRcdFx0c3QucGVuZGluZ19wYXlsb2FkID0gbnVsbDtcclxuXHRcdFx0XHRcdFx0aWYgKCBwYXlsb2FkICkge1xyXG5cdFx0XHRcdFx0XHRcdGIuYnVzPy5lbWl0Py4oIEVWLlNUUlVDVFVSRV9DSEFOR0UsIHBheWxvYWQgKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSwgbXMgKTtcclxuXHRcdFx0XHR9O1xyXG5cclxuXHRcdFx0XHQvLyAtLS0tIEZJRUxEL1NFQ1RJT046IGludGVybmFsIGlkIC0tLS1cclxuXHRcdFx0XHRpZiAoIGtleSA9PT0gJ2lkJyApIHtcclxuXHRcdFx0XHRcdGNvbnN0IHVuaXF1ZSA9IGIuaWQuc2V0X2ZpZWxkX2lkKCBzZWwsIHQudmFsdWUgKTtcclxuXHRcdFx0XHRcdGlmICggYi5wcmV2aWV3X21vZGUgJiYgIWlzU2VjdGlvbiApIHtcclxuXHRcdFx0XHRcdFx0Yi5yZW5kZXJfcHJldmlldyggc2VsICk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRpZiAoIHQudmFsdWUgIT09IHVuaXF1ZSApIHtcclxuXHRcdFx0XHRcdFx0dC52YWx1ZSA9IHVuaXF1ZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGJ1c19lbWl0X2NoYW5nZSggJ2lkLWNoYW5nZScgKTtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIC0tLS0gRklFTEQvU0VDVElPTjogcHVibGljIEhUTUwgaWQgLS0tLVxyXG5cdFx0XHRcdGlmICgga2V5ID09PSAnaHRtbF9pZCcgKSB7XHJcblx0XHRcdFx0XHRjb25zdCBhcHBsaWVkID0gYi5pZC5zZXRfZmllbGRfaHRtbF9pZCggc2VsLCB0LnZhbHVlICk7XHJcblx0XHRcdFx0XHQvLyBGb3Igc2VjdGlvbnMsIGFsc28gc2V0IHRoZSByZWFsIERPTSBpZCBzbyBhbmNob3JzL0NTUyBjYW4gdGFyZ2V0IGl0LlxyXG5cdFx0XHRcdFx0aWYgKCBpc1NlY3Rpb24gKSB7XHJcblx0XHRcdFx0XHRcdHNlbC5pZCA9IGFwcGxpZWQgfHwgJyc7XHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCBiLnByZXZpZXdfbW9kZSApIHtcclxuXHRcdFx0XHRcdFx0Yi5yZW5kZXJfcHJldmlldyggc2VsICk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRpZiAoIHQudmFsdWUgIT09IGFwcGxpZWQgKSB7XHJcblx0XHRcdFx0XHRcdHQudmFsdWUgPSBhcHBsaWVkO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0YnVzX2VtaXRfY2hhbmdlKCAnaHRtbC1pZC1jaGFuZ2UnICk7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyAtLS0tIEZJRUxEUyBPTkxZOiBuYW1lIC0tLS1cclxuXHRcdFx0XHRpZiAoIGtleSA9PT0gJ25hbWUnICYmICFpc1NlY3Rpb24gKSB7XHJcblxyXG5cdFx0XHRcdFx0Ly8gTGl2ZSB0eXBpbmc6IHNhbml0aXplIG9ubHkgKE5PIHVuaXF1ZW5lc3MgeWV0KSB0byBhdm9pZCBcIi0yXCIgc3BhbVxyXG5cdFx0XHRcdFx0aWYgKCBlLnR5cGUgPT09ICdpbnB1dCcgKSB7XHJcblx0XHRcdFx0XHRcdGNvbnN0IGJlZm9yZSAgICA9IHQudmFsdWU7XHJcblx0XHRcdFx0XHRcdGNvbnN0IHNhbml0aXplZCA9IENvcmUuV1BCQ19CRkJfU2FuaXRpemUuc2FuaXRpemVfaHRtbF9uYW1lKCBiZWZvcmUgKTtcclxuXHRcdFx0XHRcdFx0aWYgKCBiZWZvcmUgIT09IHNhbml0aXplZCApIHtcclxuXHRcdFx0XHRcdFx0XHQvLyBvcHRpb25hbDogcHJlc2VydmUgY2FyZXQgdG8gYXZvaWQganVtcFxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IHNlbFN0YXJ0ID0gdC5zZWxlY3Rpb25TdGFydCwgc2VsRW5kID0gdC5zZWxlY3Rpb25FbmQ7XHJcblx0XHRcdFx0XHRcdFx0dC52YWx1ZSAgICAgICAgPSBzYW5pdGl6ZWQ7XHJcblx0XHRcdFx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdFx0XHRcdHQuc2V0U2VsZWN0aW9uUmFuZ2UoIHNlbFN0YXJ0LCBzZWxFbmQgKTtcclxuXHRcdFx0XHRcdFx0XHR9IGNhdGNoICggXyApIHtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0cmV0dXJuOyAvLyB1bmlxdWVuZXNzIG9uIGNoYW5nZS9ibHVyXHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0Ly8gQ29tbWl0IChjaGFuZ2UvYmx1cilcclxuXHRcdFx0XHRcdGNvbnN0IHJhdyA9IFN0cmluZyggdC52YWx1ZSA/PyAnJyApLnRyaW0oKTtcclxuXHJcblx0XHRcdFx0XHRpZiAoICFyYXcgKSB7XHJcblx0XHRcdFx0XHRcdC8vIFJFU0VFRDoga2VlcCBuYW1lIG5vbi1lbXB0eSBhbmQgcHJvdmlzaW9uYWwgKGF1dG9uYW1lIHN0YXlzIE9OKVxyXG5cdFx0XHRcdFx0XHRjb25zdCBTICAgID0gQ29yZS5XUEJDX0JGQl9TYW5pdGl6ZTtcclxuXHRcdFx0XHRcdFx0Y29uc3QgYmFzZSA9IFMuc2FuaXRpemVfaHRtbF9uYW1lKCBzZWwuZ2V0QXR0cmlidXRlKCAnZGF0YS1pZCcgKSB8fCBzZWwuZGF0YXNldC5pZCB8fCBzZWwuZGF0YXNldC50eXBlIHx8ICdmaWVsZCcgKTtcclxuXHRcdFx0XHRcdFx0Y29uc3QgdW5pcSA9IGIuaWQuZW5zdXJlX3VuaXF1ZV9maWVsZF9uYW1lKCBiYXNlLCBzZWwgKTtcclxuXHJcblx0XHRcdFx0XHRcdHNlbC5zZXRBdHRyaWJ1dGUoICdkYXRhLW5hbWUnLCB1bmlxICk7XHJcblx0XHRcdFx0XHRcdHNlbC5kYXRhc2V0LmF1dG9uYW1lICAgICAgICAgID0gJzEnO1xyXG5cdFx0XHRcdFx0XHRzZWwuZGF0YXNldC5uYW1lX3VzZXJfdG91Y2hlZCA9ICcwJztcclxuXHJcblx0XHRcdFx0XHRcdC8vIEtlZXAgRE9NIGluIHN5bmMgaWYgd2XigJlyZSBub3QgcmUtcmVuZGVyaW5nXHJcblx0XHRcdFx0XHRcdGlmICggIWIucHJldmlld19tb2RlICkge1xyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IGN0cmwgPSBzZWwucXVlcnlTZWxlY3RvciggJ2lucHV0LHRleHRhcmVhLHNlbGVjdCcgKTtcclxuXHRcdFx0XHRcdFx0XHRpZiAoIGN0cmwgKSBjdHJsLnNldEF0dHJpYnV0ZSggJ25hbWUnLCB1bmlxICk7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0Yi5yZW5kZXJfcHJldmlldyggc2VsICk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdGlmICggdC52YWx1ZSAhPT0gdW5pcSApIHQudmFsdWUgPSB1bmlxO1xyXG5cdFx0XHRcdFx0XHRidXNfZW1pdF9jaGFuZ2UoICduYW1lLXJlc2VlZCcgKTtcclxuXHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdC8vIE5vbi1lbXB0eSBjb21taXQ6IHVzZXIgdGFrZXMgY29udHJvbDsgZGlzYWJsZSBhdXRvbmFtZSBnb2luZyBmb3J3YXJkXHJcblx0XHRcdFx0XHRzZWwuZGF0YXNldC5uYW1lX3VzZXJfdG91Y2hlZCA9ICcxJztcclxuXHRcdFx0XHRcdHNlbC5kYXRhc2V0LmF1dG9uYW1lICAgICAgICAgID0gJzAnO1xyXG5cclxuXHRcdFx0XHRcdGNvbnN0IHNhbml0aXplZCA9IENvcmUuV1BCQ19CRkJfU2FuaXRpemUuc2FuaXRpemVfaHRtbF9uYW1lKCByYXcgKTtcclxuXHRcdFx0XHRcdGNvbnN0IHVuaXF1ZSAgICA9IGIuaWQuc2V0X2ZpZWxkX25hbWUoIHNlbCwgc2FuaXRpemVkICk7XHJcblxyXG5cdFx0XHRcdFx0aWYgKCAhYi5wcmV2aWV3X21vZGUgKSB7XHJcblx0XHRcdFx0XHRcdGNvbnN0IGN0cmwgPSBzZWwucXVlcnlTZWxlY3RvciggJ2lucHV0LHRleHRhcmVhLHNlbGVjdCcgKTtcclxuXHRcdFx0XHRcdFx0aWYgKCBjdHJsICkgY3RybC5zZXRBdHRyaWJ1dGUoICduYW1lJywgdW5pcXVlICk7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRiLnJlbmRlcl9wcmV2aWV3KCBzZWwgKTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAoIHQudmFsdWUgIT09IHVuaXF1ZSApIHQudmFsdWUgPSB1bmlxdWU7XHJcblx0XHRcdFx0XHRidXNfZW1pdF9jaGFuZ2UoICduYW1lLWNoYW5nZScgKTtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIC0tLS0gU0VDVElPTlMgJiBGSUVMRFM6IGNzc2NsYXNzIChsaXZlIGFwcGx5OyBubyByZS1yZW5kZXIpIC0tLS1cclxuXHRcdFx0XHRpZiAoIGtleSA9PT0gJ2Nzc2NsYXNzJyApIHtcclxuXHRcdFx0XHRcdGNvbnN0IG5leHQgICAgICAgPSBDb3JlLldQQkNfQkZCX1Nhbml0aXplLnNhbml0aXplX2Nzc19jbGFzc2xpc3QoIHQudmFsdWUgfHwgJycgKTtcclxuXHRcdFx0XHRcdGNvbnN0IGRlc2lyZWRBcnIgPSBuZXh0LnNwbGl0KCAvXFxzKy8gKS5maWx0ZXIoIEJvb2xlYW4gKTtcclxuXHRcdFx0XHRcdGNvbnN0IGRlc2lyZWRTZXQgPSBuZXcgU2V0KCBkZXNpcmVkQXJyICk7XHJcblxyXG5cdFx0XHRcdFx0Ly8gQ29yZSBjbGFzc2VzIGFyZSBuZXZlciB0b3VjaGVkLlxyXG5cdFx0XHRcdFx0Y29uc3QgaXNDb3JlID0gKGNscykgPT4gY2xzID09PSAnaXMtc2VsZWN0ZWQnIHx8IGNscy5zdGFydHNXaXRoKCAnd3BiY18nICk7XHJcblxyXG5cdFx0XHRcdFx0Ly8gU25hcHNob3QgYmVmb3JlIG11dGF0aW5nIChET01Ub2tlbkxpc3QgaXMgbGl2ZSkuXHJcblx0XHRcdFx0XHRjb25zdCBiZWZvcmVDbGFzc2VzID0gQXJyYXkuZnJvbSggc2VsLmNsYXNzTGlzdCApO1xyXG5cdFx0XHRcdFx0Y29uc3QgY3VzdG9tQmVmb3JlICA9IGJlZm9yZUNsYXNzZXMuZmlsdGVyKCAoYykgPT4gIWlzQ29yZSggYyApICk7XHJcblxyXG5cdFx0XHRcdFx0Ly8gUmVtb3ZlIHN0cmF5IG5vbi1jb3JlIGNsYXNzZXMgbm90IGluIGRlc2lyZWQuXHJcblx0XHRcdFx0XHRjdXN0b21CZWZvcmUuZm9yRWFjaCggKGMpID0+IHtcclxuXHRcdFx0XHRcdFx0aWYgKCAhZGVzaXJlZFNldC5oYXMoIGMgKSApIHNlbC5jbGFzc0xpc3QucmVtb3ZlKCBjICk7XHJcblx0XHRcdFx0XHR9ICk7XHJcblxyXG5cdFx0XHRcdFx0Ly8gQWRkIG1pc3NpbmcgZGVzaXJlZCBjbGFzc2VzIGluIG9uZSBnby5cclxuXHRcdFx0XHRcdGNvbnN0IG1pc3NpbmcgPSBkZXNpcmVkQXJyLmZpbHRlciggKGMpID0+ICFjdXN0b21CZWZvcmUuaW5jbHVkZXMoIGMgKSApO1xyXG5cdFx0XHRcdFx0aWYgKCBtaXNzaW5nLmxlbmd0aCApIHNlbC5jbGFzc0xpc3QuYWRkKCAuLi5taXNzaW5nICk7XHJcblxyXG5cdFx0XHRcdFx0Ly8gS2VlcCBkYXRhc2V0IGluIHN5bmMgKGF2b2lkIHVzZWxlc3MgYXR0cmlidXRlIHdyaXRlcykuXHJcblx0XHRcdFx0XHRpZiAoIHNlbC5nZXRBdHRyaWJ1dGUoICdkYXRhLWNzc2NsYXNzJyApICE9PSBuZXh0ICkge1xyXG5cdFx0XHRcdFx0XHRzZWwuc2V0QXR0cmlidXRlKCAnZGF0YS1jc3NjbGFzcycsIG5leHQgKTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHQvLyBFbWl0IG9ubHkgaWYgc29tZXRoaW5nIGFjdHVhbGx5IGNoYW5nZWQuXHJcblx0XHRcdFx0XHRjb25zdCBhZnRlckNsYXNzZXMgPSBBcnJheS5mcm9tKCBzZWwuY2xhc3NMaXN0ICk7XHJcblx0XHRcdFx0XHRjb25zdCBjaGFuZ2VkICAgICAgPSBhZnRlckNsYXNzZXMubGVuZ3RoICE9PSBiZWZvcmVDbGFzc2VzLmxlbmd0aCB8fCBiZWZvcmVDbGFzc2VzLnNvbWUoIChjLCBpKSA9PiBjICE9PSBhZnRlckNsYXNzZXNbaV0gKTtcclxuXHJcblx0XHRcdFx0XHRjb25zdCBkZXRhaWwgPSB7IGtleTogJ2Nzc2NsYXNzJywgcGhhc2U6IGUudHlwZSB9O1xyXG5cdFx0XHRcdFx0aWYgKCBpc1NlY3Rpb24gKSB7XHJcblx0XHRcdFx0XHRcdGJ1c19lbWl0X2NoYW5nZSggJ2Nzc2NsYXNzLWNoYW5nZScsIGRldGFpbCApO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0YnVzX2VtaXRfY2hhbmdlKCAncHJvcC1jaGFuZ2UnLCBkZXRhaWwgKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblxyXG5cclxuXHRcdFx0XHQvLyAtLS0tIFNFQ1RJT05TOiBsYWJlbCAtLS0tXHJcblx0XHRcdFx0aWYgKCBpc1NlY3Rpb24gJiYga2V5ID09PSAnbGFiZWwnICkge1xyXG5cdFx0XHRcdFx0Y29uc3QgdmFsID0gU3RyaW5nKCB0LnZhbHVlID8/ICcnICk7XHJcblx0XHRcdFx0XHRzZWwuc2V0QXR0cmlidXRlKCAnZGF0YS1sYWJlbCcsIHZhbCApO1xyXG5cdFx0XHRcdFx0YnVzX2VtaXRfY2hhbmdlKCAnbGFiZWwtY2hhbmdlJyApO1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gLS0tLSBGSUVMRFM6IGxhYmVsIChhdXRvLW5hbWUgd2hpbGUgdHlwaW5nOyBmcmVlemUgb24gY29tbWl0KSAtLS0tXHJcblx0XHRcdFx0aWYgKCAhaXNTZWN0aW9uICYmIGtleSA9PT0gJ2xhYmVsJyApIHtcclxuXHRcdFx0XHRcdGNvbnN0IHZhbCAgICAgICAgID0gU3RyaW5nKCB0LnZhbHVlID8/ICcnICk7XHJcblx0XHRcdFx0XHRzZWwuZGF0YXNldC5sYWJlbCA9IHZhbDtcclxuXHJcblx0XHRcdFx0XHQvLyB3aGlsZSB0eXBpbmcsIGFsbG93IGF1dG8tbmFtZSAoaWYgZmxhZ3MgcGVybWl0KVxyXG5cdFx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdFx0Q29yZS5XUEJDX0JGQl9GaWVsZF9CYXNlLm1heWJlX2F1dG9uYW1lX2Zyb21fbGFiZWwoIGIsIHNlbCwgdmFsICk7XHJcblx0XHRcdFx0XHR9IGNhdGNoICggXyApIHtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHQvLyBpZiB1c2VyIGNvbW1pdHRlZCB0aGUgbGFiZWwgKGJsdXIvY2hhbmdlKSwgZnJlZXplIGZ1dHVyZSBhdXRvLW5hbWVcclxuXHRcdFx0XHRcdGlmICggZS50eXBlICE9PSAnaW5wdXQnICkge1xyXG5cdFx0XHRcdFx0XHRzZWwuZGF0YXNldC5hdXRvbmFtZSA9ICcwJzsgICAvLyBzdG9wIGZ1dHVyZSBsYWJlbC0+bmFtZSBzeW5jXHJcblx0XHRcdFx0XHRcdHNlbC5kYXRhc2V0LmZyZXNoICAgID0gJzAnOyAgIC8vIGFsc28ga2lsbCB0aGUgXCJmcmVzaFwiIGVzY2FwZSBoYXRjaFxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdC8vIE9wdGlvbmFsIFVJIG5pY2V0eTogZGlzYWJsZSBOYW1lIHdoZW4gYXV0byBpcyBPTiwgZW5hYmxlIHdoZW4gT0ZGXHJcblx0XHRcdFx0XHRjb25zdCBpbnMgICAgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnd3BiY19iZmJfX2luc3BlY3RvcicgKTtcclxuXHRcdFx0XHRcdGNvbnN0IG5hbWVDdHJsID0gaW5zPy5xdWVyeVNlbGVjdG9yKCAnW2RhdGEtaW5zcGVjdG9yLWtleT1cIm5hbWVcIl0nICk7XHJcblx0XHRcdFx0XHRpZiAoIG5hbWVDdHJsICkge1xyXG5cdFx0XHRcdFx0XHRjb25zdCBhdXRvQWN0aXZlID1cclxuXHRcdFx0XHRcdFx0XHRcdCAgKHNlbC5kYXRhc2V0LmF1dG9uYW1lID8/ICcxJykgIT09ICcwJyAmJlxyXG5cdFx0XHRcdFx0XHRcdFx0ICBzZWwuZGF0YXNldC5uYW1lX3VzZXJfdG91Y2hlZCAhPT0gJzEnICYmXHJcblx0XHRcdFx0XHRcdFx0XHQgIHNlbC5kYXRhc2V0Lndhc19sb2FkZWQgIT09ICcxJztcclxuXHRcdFx0XHRcdFx0bmFtZUN0cmwudG9nZ2xlQXR0cmlidXRlKCAnZGlzYWJsZWQnLCBhdXRvQWN0aXZlICk7XHJcblx0XHRcdFx0XHRcdGlmICggYXV0b0FjdGl2ZSAmJiAhbmFtZUN0cmwucGxhY2Vob2xkZXIgKSB7XHJcblx0XHRcdFx0XHRcdFx0bmFtZUN0cmwucGxhY2Vob2xkZXIgPSBiPy5pMThuPy5hdXRvX2Zyb21fbGFiZWwgPz8gJ2F1dG8g4oCUIGZyb20gbGFiZWwnO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGlmICggIWF1dG9BY3RpdmUgJiYgbmFtZUN0cmwucGxhY2Vob2xkZXIgPT09IChiPy5pMThuPy5hdXRvX2Zyb21fbGFiZWwgPz8gJ2F1dG8g4oCUIGZyb20gbGFiZWwnKSApIHtcclxuXHRcdFx0XHRcdFx0XHRuYW1lQ3RybC5wbGFjZWhvbGRlciA9ICcnO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0Ly8gQWx3YXlzIHJlLXJlbmRlciB0aGUgcHJldmlldyBzbyBsYWJlbCBjaGFuZ2VzIGFyZSB2aXNpYmxlIGltbWVkaWF0ZWx5LlxyXG5cdFx0XHRcdFx0Yi5yZW5kZXJfcHJldmlldyggc2VsICk7XHJcblx0XHRcdFx0XHRidXNfZW1pdF9jaGFuZ2UoICdsYWJlbC1jaGFuZ2UnICk7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cclxuXHJcblx0XHRcdFx0Ly8gLS0tLSBERUZBVUxUIChHRU5FUklDKTogZGF0YXNldCB3cml0ZXIgZm9yIGJvdGggZmllbGRzICYgc2VjdGlvbnMgLS0tLVxyXG5cdFx0XHRcdC8vIEFueSBpbnNwZWN0b3IgY29udHJvbCB3aXRoIFtkYXRhLWluc3BlY3Rvci1rZXldIHRoYXQgZG9lc24ndCBoYXZlIGEgY3VzdG9tXHJcblx0XHRcdFx0Ly8gYWRhcHRlci92YWx1ZV9mcm9tIHdpbGwgc2ltcGx5IHJlYWQvd3JpdGUgc2VsLmRhdGFzZXRba2V5XS5cclxuXHRcdFx0XHRpZiAoIGtleSApIHtcclxuXHJcblx0XHRcdFx0XHRjb25zdCBzZWxmTG9ja2VkID0gL14oMXx0cnVlfHllcykkL2kudGVzdCggKHQuZGF0YXNldD8ubG9ja2VkIHx8ICcnKS50cmltKCkgKTtcclxuXHRcdFx0XHRcdGlmICggc2VsZkxvY2tlZCApIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdC8vIFNraXAga2V5cyB3ZSBoYW5kbGVkIGFib3ZlIHRvIGF2b2lkIGRvdWJsZSB3b3JrLlxyXG5cdFx0XHRcdFx0aWYgKCBrZXkgPT09ICdpZCcgfHwga2V5ID09PSAnbmFtZScgfHwga2V5ID09PSAnaHRtbF9pZCcgfHwga2V5ID09PSAnY3NzY2xhc3MnIHx8IGtleSA9PT0gJ2xhYmVsJyApIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0bGV0IG5leHRWYWwgPSAnJztcblx0XHRcdFx0XHRpZiAoIHQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50ICYmICh0LnR5cGUgPT09ICdjaGVja2JveCcgfHwgdC50eXBlID09PSAncmFkaW8nKSApIHtcblx0XHRcdFx0XHRcdC8vIFBlcnNpc3QgYm90aCBib29sZWFuIHN0YXRlcyBleHBsaWNpdGx5IHNvIHNjaGVtYSBkZWZhdWx0cyBjYW5ub3QgcmVwbGFjZSBmYWxzZS5cblx0XHRcdFx0XHRcdG5leHRWYWwgPSB0LmNoZWNrZWQgPyAndHJ1ZScgOiAnZmFsc2UnO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoICd2YWx1ZScgaW4gdCApIHtcclxuXHRcdFx0XHRcdFx0bmV4dFZhbCA9IFN0cmluZyggdC52YWx1ZSA/PyAnJyApO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0Ly8gUGVyc2lzdCB0byBkYXRhc2V0LlxyXG5cdFx0XHRcdFx0aWYgKCBzZWw/LmRhdGFzZXQgKSBzZWwuZGF0YXNldFtrZXldID0gbmV4dFZhbDtcclxuXHJcblx0XHRcdFx0XHQvLyBHZW5lcmF0b3IgY29udHJvbHMgYXJlIFwiVUkgaW5wdXRzXCIg4oCUIGF2b2lkIFNUUlVDVFVSRV9DSEFOR0Ugc3BhbSB3aGlsZSBkcmFnZ2luZy90eXBpbmcuXHJcblx0XHRcdFx0XHRjb25zdCBpc19nZW5fa2V5ID0gKGtleS5pbmRleE9mKCAnZ2VuXycgKSA9PT0gMCk7XHJcblxyXG5cdFx0XHRcdFx0Ly8gUmUtcmVuZGVyIG9uIHZpc3VhbCBrZXlzIHNvIHByZXZpZXcgc3RheXMgaW4gc3luYyAoY2FsZW5kYXIgbGFiZWwvaGVscCwgZXRjLikuXHJcblx0XHRcdFx0XHRjb25zdCB2aXN1YWxLZXlzID0gbmV3IFNldCggWyAnaGVscCcsICdwbGFjZWhvbGRlcicsICdtaW5fd2lkdGgnLCAnY3NzY2xhc3MnIF0gKTtcclxuXHRcdFx0XHRcdGlmICggIWlzU2VjdGlvbiAmJiAodmlzdWFsS2V5cy5oYXMoIGtleSApIHx8IGtleS5zdGFydHNXaXRoKCAndWlfJyApKSApIHtcclxuXHRcdFx0XHRcdFx0Ly8gTGlnaHQgaGV1cmlzdGljOiBvbmx5IHJlLXJlbmRlciBvbiBjb21taXQgZm9yIGhlYXZ5IGlucHV0czsgbGl2ZSBmb3Igc2hvcnQgb25lcyBpcyBmaW5lLlxyXG5cdFx0XHRcdFx0XHRpZiAoIGUudHlwZSA9PT0gJ2NoYW5nZScgfHwga2V5ID09PSAnaGVscCcgfHwga2V5ID09PSAncGxhY2Vob2xkZXInICkge1xyXG5cdFx0XHRcdFx0XHRcdGIucmVuZGVyX3ByZXZpZXcoIHNlbCApO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0aWYgKCAhKGlzX2dlbl9rZXkgJiYgZS50eXBlID09PSAnaW5wdXQnKSApIHtcclxuXHRcdFx0XHRcdFx0Ly8gRGVib3VuY2UgY29udGludW91cyB2YWx1ZSBzbGlkZXIgaW5wdXQgZXZlbnRzIHRvIGF2b2lkIGZ1bGwtY2FudmFzIHJlZnJlc2ggc3BhbS5cclxuXHRcdFx0XHRcdFx0Ly8gV2UgZGV0ZWN0IHRoZSBzbGlkZXIgZ3JvdXAgdmlhIFtkYXRhLWxlbi1ncm91cF0gd3JhcHBlci5cclxuXHRcdFx0XHRcdFx0Y29uc3QgaXNfbGVuX2dyb3VwX2N0cmwgPSAhISh0ICYmIHQuY2xvc2VzdCAmJiB0LmNsb3Nlc3QoICdbZGF0YS1sZW4tZ3JvdXBdJyApKTtcclxuXHJcblx0XHRcdFx0XHRcdGlmICggaXNfbGVuX2dyb3VwX2N0cmwgJiYgZS50eXBlID09PSAnaW5wdXQnICkge1xyXG5cdFx0XHRcdFx0XHRcdGJ1c19lbWl0X2NoYW5nZV9kZWJvdW5jZWQoICdwcm9wLWNoYW5nZScsIHsga2V5LCBwaGFzZTogZS50eXBlIH0gKTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRidXNfZW1pdF9jaGFuZ2UoICdwcm9wLWNoYW5nZScsIHsga2V5LCBwaGFzZTogZS50eXBlIH0gKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fTtcclxuXHJcblx0XHRcdGlucy5hZGRFdmVudExpc3RlbmVyKCAnY2hhbmdlJywgaGFuZGxlciwgdHJ1ZSApO1xyXG5cdFx0XHQvLyByZWZsZWN0IGluc3RhbnRseSB3aGlsZSB0eXBpbmcgYXMgd2VsbC5cclxuXHRcdFx0aW5zLmFkZEV2ZW50TGlzdGVuZXIoICdpbnB1dCcsIGhhbmRsZXIsIHRydWUgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIE9wZW4gSW5zcGVjdG9yIGFmdGVyIGEgZmllbGQgaXMgYWRkZWQuXHJcblx0XHQgKiBAcHJpdmF0ZVxyXG5cdFx0ICovXHJcblx0XHRfb3Blbl9pbnNwZWN0b3JfYWZ0ZXJfZmllbGRfYWRkZWQoKSB7XHJcblx0XHRcdGNvbnN0IEVWID0gQ29yZS5XUEJDX0JGQl9FdmVudHM7XHJcblx0XHRcdHRoaXMuYnVpbGRlcj8uYnVzPy5vbj8uKCBFVi5GSUVMRF9BREQsIChlKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgZWwgPSBlPy5kZXRhaWw/LmVsIHx8IG51bGw7XHJcblx0XHRcdFx0aWYgKCBlbCAmJiB0aGlzLmJ1aWxkZXI/LnNlbGVjdF9maWVsZCApIHtcclxuXHRcdFx0XHRcdHRoaXMuYnVpbGRlci5zZWxlY3RfZmllbGQoIGVsLCB7IHNjcm9sbEludG9WaWV3OiB0cnVlIH0gKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Ly8gU2hvdyBJbnNwZWN0b3IgUGFsZXR0ZS5cclxuXHRcdFx0XHR3cGJjX2JmYl9fZGlzcGF0Y2hfZXZlbnRfc2FmZShcclxuXHRcdFx0XHRcdCd3cGJjX2JmYjpzaG93X3BhbmVsJyxcclxuXHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0cGFuZWxfaWQ6ICd3cGJjX2JmYl9faW5zcGVjdG9yJyxcclxuXHRcdFx0XHRcdFx0dGFiX2lkICA6ICd3cGJjX3RhYl9pbnNwZWN0b3InXHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fSApO1xyXG5cdFx0fVxyXG5cdH07XHJcblxyXG5cdC8qKlxyXG5cdCAqIEtleWJvYXJkIHNob3J0Y3V0cyBmb3Igc2VsZWN0aW9uLCBkZWxldGlvbiwgYW5kIG1vdmVtZW50LlxyXG5cdCAqL1xyXG5cdFVJLldQQkNfQkZCX0tleWJvYXJkX0NvbnRyb2xsZXIgPSBjbGFzcyBleHRlbmRzIFVJLldQQkNfQkZCX01vZHVsZSB7XHJcblx0XHRpbml0KCkge1xyXG5cdFx0XHR0aGlzLl9vbl9rZXkgPSB0aGlzLm9uX2tleS5iaW5kKCB0aGlzICk7XHJcblx0XHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoICdrZXlkb3duJywgdGhpcy5fb25fa2V5LCB0cnVlICk7XHJcblx0XHR9XHJcblxyXG5cdFx0ZGVzdHJveSgpIHtcclxuXHRcdFx0ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ2tleWRvd24nLCB0aGlzLl9vbl9rZXksIHRydWUgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKiogQHBhcmFtIHtLZXlib2FyZEV2ZW50fSBlICovXHJcblx0XHRvbl9rZXkoZSkge1xyXG5cdFx0XHRjb25zdCBiICAgICAgICAgPSB0aGlzLmJ1aWxkZXI7XHJcblx0XHRcdGNvbnN0IGlzX3R5cGluZyA9IHRoaXMuX2lzX3R5cGluZ19hbnl3aGVyZSgpO1xyXG5cdFx0XHRpZiAoIGUua2V5ID09PSAnRXNjYXBlJyApIHtcclxuXHRcdFx0XHRpZiAoIGlzX3R5cGluZyApIHtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0dGhpcy5idWlsZGVyLmJ1cy5lbWl0KCBDb3JlLldQQkNfQkZCX0V2ZW50cy5DTEVBUl9TRUxFQ1RJT04sIHsgc291cmNlOiAnZXNjJyB9ICk7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblx0XHRcdGNvbnN0IHNlbGVjdGVkID0gYi5nZXRfc2VsZWN0ZWRfZmllbGQ/LigpO1xyXG5cdFx0XHRpZiAoICFzZWxlY3RlZCB8fCBpc190eXBpbmcgKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICggZS5rZXkgPT09ICdEZWxldGUnIHx8IGUua2V5ID09PSAnQmFja3NwYWNlJyApIHtcclxuXHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XHJcblx0XHRcdFx0Yi5kZWxldGVfaXRlbT8uKCBzZWxlY3RlZCApO1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoIChlLmFsdEtleSB8fCBlLmN0cmxLZXkgfHwgZS5tZXRhS2V5KSAmJiAoZS5rZXkgPT09ICdBcnJvd1VwJyB8fCBlLmtleSA9PT0gJ0Fycm93RG93bicpICYmICFlLnNoaWZ0S2V5ICkge1xyXG5cdFx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcclxuXHRcdFx0XHRjb25zdCBkaXIgPSAoZS5rZXkgPT09ICdBcnJvd1VwJykgPyAndXAnIDogJ2Rvd24nO1xyXG5cdFx0XHRcdGIubW92ZV9pdGVtPy4oIHNlbGVjdGVkLCBkaXIgKTtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKCBlLmtleSA9PT0gJ0VudGVyJyApIHtcclxuXHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XHJcblx0XHRcdFx0Yi5zZWxlY3RfZmllbGQoIHNlbGVjdGVkLCB7IHNjcm9sbEludG9WaWV3OiB0cnVlIH0gKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8qKiBAcmV0dXJucyB7Ym9vbGVhbn0gKi9cclxuXHRcdF9pc190eXBpbmdfYW55d2hlcmUoKSB7XHJcblx0XHRcdGNvbnN0IGEgICA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XHJcblx0XHRcdGNvbnN0IHRhZyA9IGE/LnRhZ05hbWU7XHJcblx0XHRcdGlmICggdGFnID09PSAnSU5QVVQnIHx8IHRhZyA9PT0gJ1RFWFRBUkVBJyB8fCB0YWcgPT09ICdTRUxFQ1QnIHx8IChhPy5pc0NvbnRlbnRFZGl0YWJsZSA9PT0gdHJ1ZSkgKSB7XHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdH1cclxuXHRcdFx0Y29uc3QgaW5zID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICd3cGJjX2JmYl9faW5zcGVjdG9yJyApO1xyXG5cdFx0XHRyZXR1cm4gISEoaW5zICYmIGEgJiYgaW5zLmNvbnRhaW5zKCBhICkpO1xyXG5cdFx0fVxyXG5cdH07XHJcblxyXG5cdC8qKlxyXG5cdCAqIENvbHVtbiByZXNpemUgbG9naWMgZm9yIHNlY3Rpb24gcm93cy5cclxuXHQgKi9cclxuXHRVSS5XUEJDX0JGQl9SZXNpemVfQ29udHJvbGxlciA9IGNsYXNzIGV4dGVuZHMgVUkuV1BCQ19CRkJfTW9kdWxlIHtcclxuXHRcdGluaXQoKSB7XHJcblx0XHRcdHRoaXMuYnVpbGRlci5pbml0X3Jlc2l6ZV9oYW5kbGVyID0gdGhpcy5oYW5kbGVfcmVzaXplLmJpbmQoIHRoaXMgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIHJlYWQgdGhlIENTUyB2YXIgKGtlcHQgbG9jYWwgc28gaXQgZG9lc27igJl0IGRlcGVuZCBvbiB0aGUgTWluLVdpZHRoIG1vZHVsZSlcclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0gY29sXHJcblx0XHQgKiBAcmV0dXJucyB7bnVtYmVyfG51bWJlcn1cclxuXHRcdCAqIEBwcml2YXRlXHJcblx0XHQgKi9cclxuXHRcdF9nZXRfY29sX21pbl9weChjb2wpIHtcclxuXHRcdFx0Y29uc3QgdiA9IGdldENvbXB1dGVkU3R5bGUoIGNvbCApLmdldFByb3BlcnR5VmFsdWUoICctLXdwYmMtY29sLW1pbicgKSB8fCAnMCc7XHJcblx0XHRcdGNvbnN0IG4gPSBwYXJzZUZsb2F0KCB2ICk7XHJcblx0XHRcdHJldHVybiBOdW1iZXIuaXNGaW5pdGUoIG4gKSA/IE1hdGgubWF4KCAwLCBuICkgOiAwO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKiBAcGFyYW0ge01vdXNlRXZlbnR9IGUgKi9cclxuXHRcdGhhbmRsZV9yZXNpemUoZSkge1xyXG5cdFx0XHRjb25zdCBiID0gdGhpcy5idWlsZGVyO1xyXG5cdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XHJcblx0XHRcdGlmICggZS5idXR0b24gIT09IDAgKSByZXR1cm47XHJcblxyXG5cdFx0XHRjb25zdCByZXNpemVyICAgPSBlLmN1cnJlbnRUYXJnZXQ7XHJcblx0XHRcdGNvbnN0IHJvd19lbCAgICA9IHJlc2l6ZXIucGFyZW50RWxlbWVudDtcclxuXHRcdFx0Y29uc3QgY29scyAgICAgID0gQXJyYXkuZnJvbSggcm93X2VsLnF1ZXJ5U2VsZWN0b3JBbGwoICc6c2NvcGUgPiAud3BiY19iZmJfX2NvbHVtbicgKSApO1xyXG5cdFx0XHRjb25zdCBsZWZ0X2NvbCAgPSByZXNpemVyPy5wcmV2aW91c0VsZW1lbnRTaWJsaW5nO1xyXG5cdFx0XHRjb25zdCByaWdodF9jb2wgPSByZXNpemVyPy5uZXh0RWxlbWVudFNpYmxpbmc7XHJcblx0XHRcdGlmICggIWxlZnRfY29sIHx8ICFyaWdodF9jb2wgfHwgIWxlZnRfY29sLmNsYXNzTGlzdC5jb250YWlucyggJ3dwYmNfYmZiX19jb2x1bW4nICkgfHwgIXJpZ2h0X2NvbC5jbGFzc0xpc3QuY29udGFpbnMoICd3cGJjX2JmYl9fY29sdW1uJyApICkgcmV0dXJuO1xyXG5cclxuXHRcdFx0Y29uc3QgbGVmdF9pbmRleCAgPSBjb2xzLmluZGV4T2YoIGxlZnRfY29sICk7XHJcblx0XHRcdGNvbnN0IHJpZ2h0X2luZGV4ID0gY29scy5pbmRleE9mKCByaWdodF9jb2wgKTtcclxuXHRcdFx0aWYgKCBsZWZ0X2luZGV4ID09PSAtMSB8fCByaWdodF9pbmRleCAhPT0gbGVmdF9pbmRleCArIDEgKSByZXR1cm47XHJcblxyXG5cdFx0XHRjb25zdCBzdGFydF94ICAgICAgICA9IGUuY2xpZW50WDtcclxuXHRcdFx0Y29uc3QgbGVmdF9zdGFydF9weCAgPSBsZWZ0X2NvbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcclxuXHRcdFx0Y29uc3QgcmlnaHRfc3RhcnRfcHggPSByaWdodF9jb2wuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XHJcblx0XHRcdGNvbnN0IHBhaXJfcHggICAgICAgID0gTWF0aC5tYXgoIDAsIGxlZnRfc3RhcnRfcHggKyByaWdodF9zdGFydF9weCApO1xyXG5cclxuXHRcdFx0Y29uc3QgZ3AgICAgICAgICA9IGIuY29sX2dhcF9wZXJjZW50O1xyXG5cdFx0XHRjb25zdCBjb21wdXRlZCAgID0gYi5sYXlvdXQuY29tcHV0ZV9lZmZlY3RpdmVfYmFzZXNfZnJvbV9yb3coIHJvd19lbCwgZ3AgKTtcclxuXHRcdFx0Y29uc3QgYXZhaWxhYmxlICA9IGNvbXB1dGVkLmF2YWlsYWJsZTsgICAgICAgICAgICAgICAgIC8vICUgb2YgdGhlIOKAnGZ1bGwgMTAw4oCdIGFmdGVyIGdhcHNcclxuXHRcdFx0Y29uc3QgYmFzZXMgICAgICA9IGNvbXB1dGVkLmJhc2VzLnNsaWNlKCAwICk7ICAgICAgICAgICAgLy8gY3VycmVudCBlZmZlY3RpdmUgJVxyXG5cdFx0XHRjb25zdCBwYWlyX2F2YWlsID0gYmFzZXNbbGVmdF9pbmRleF0gKyBiYXNlc1tyaWdodF9pbmRleF07XHJcblxyXG5cdFx0XHQvLyBCYWlsIGlmIHdlIGNhbuKAmXQgY29tcHV0ZSBzYW5lIGRlbHRhcy5cclxuXHRcdFx0aWYgKCFwYWlyX3B4IHx8ICFOdW1iZXIuaXNGaW5pdGUocGFpcl9hdmFpbCkgfHwgcGFpcl9hdmFpbCA8PSAwKSByZXR1cm47XHJcblxyXG5cdFx0XHQvLyAtLS0gTUlOIENMQU1QUyAocGl4ZWxzKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0XHRcdGNvbnN0IHBjdFRvUHggICAgICAgPSAocGN0KSA9PiAocGFpcl9weCAqIChwY3QgLyBwYWlyX2F2YWlsKSk7IC8vIHBhaXItbG9jYWwgcGVyY2VudCAtPiBweFxyXG5cdFx0XHRjb25zdCBnZW5lcmljTWluUGN0ID0gTWF0aC5taW4oIDAuMSwgYXZhaWxhYmxlICk7ICAgICAgICAgICAgICAgICAgLy8gb3JpZ2luYWwgMC4xJSBmbG9vciAoaW4g4oCcYXZhaWxhYmxlICXigJ0gc3BhY2UpXHJcblx0XHRcdGNvbnN0IGdlbmVyaWNNaW5QeCAgPSBwY3RUb1B4KCBnZW5lcmljTWluUGN0ICk7XHJcblxyXG5cdFx0XHRjb25zdCBsZWZ0TWluUHggID0gTWF0aC5tYXgoIHRoaXMuX2dldF9jb2xfbWluX3B4KCBsZWZ0X2NvbCApLCBnZW5lcmljTWluUHggKTtcclxuXHRcdFx0Y29uc3QgcmlnaHRNaW5QeCA9IE1hdGgubWF4KCB0aGlzLl9nZXRfY29sX21pbl9weCggcmlnaHRfY29sICksIGdlbmVyaWNNaW5QeCApO1xyXG5cclxuXHRcdFx0Ly8gZnJlZXplIHRleHQgc2VsZWN0aW9uICsgY3Vyc29yXHJcblx0XHRcdGNvbnN0IHByZXZfdXNlcl9zZWxlY3QgICAgICAgICA9IGRvY3VtZW50LmJvZHkuc3R5bGUudXNlclNlbGVjdDtcclxuXHRcdFx0ZG9jdW1lbnQuYm9keS5zdHlsZS51c2VyU2VsZWN0ID0gJ25vbmUnO1xyXG5cdFx0XHRyb3dfZWwuc3R5bGUuY3Vyc29yICAgICAgICAgICAgPSAnY29sLXJlc2l6ZSc7XHJcblxyXG5cdFx0XHRjb25zdCBvbl9tb3VzZV9tb3ZlID0gKGV2KSA9PiB7XHJcblx0XHRcdFx0aWYgKCAhcGFpcl9weCApIHJldHVybjtcclxuXHJcblx0XHRcdFx0Ly8gd29yayBpbiBwaXhlbHMsIGNsYW1wIGJ5IGVhY2ggc2lkZeKAmXMgbWluXHJcblx0XHRcdFx0Y29uc3QgZGVsdGFfcHggICA9IGV2LmNsaWVudFggLSBzdGFydF94O1xyXG5cdFx0XHRcdGxldCBuZXdMZWZ0UHggICAgPSBsZWZ0X3N0YXJ0X3B4ICsgZGVsdGFfcHg7XHJcblx0XHRcdFx0bmV3TGVmdFB4ICAgICAgICA9IE1hdGgubWF4KCBsZWZ0TWluUHgsIE1hdGgubWluKCBwYWlyX3B4IC0gcmlnaHRNaW5QeCwgbmV3TGVmdFB4ICkgKTtcclxuXHRcdFx0XHRjb25zdCBuZXdSaWdodFB4ID0gcGFpcl9weCAtIG5ld0xlZnRQeDtcclxuXHJcblx0XHRcdFx0Ly8gdHJhbnNsYXRlIGJhY2sgdG8gcGFpci1sb2NhbCBwZXJjZW50YWdlc1xyXG5cdFx0XHRcdGNvbnN0IG5ld0xlZnRQY3QgICAgICA9IChuZXdMZWZ0UHggLyBwYWlyX3B4KSAqIHBhaXJfYXZhaWw7XHJcblx0XHRcdFx0Y29uc3QgbmV3QmFzZXMgICAgICAgID0gYmFzZXMuc2xpY2UoIDAgKTtcclxuXHRcdFx0XHRuZXdCYXNlc1tsZWZ0X2luZGV4XSAgPSBuZXdMZWZ0UGN0O1xyXG5cdFx0XHRcdG5ld0Jhc2VzW3JpZ2h0X2luZGV4XSA9IHBhaXJfYXZhaWwgLSBuZXdMZWZ0UGN0O1xyXG5cclxuXHRcdFx0XHRiLmxheW91dC5hcHBseV9iYXNlc190b19yb3coIHJvd19lbCwgbmV3QmFzZXMgKTtcclxuXHRcdFx0fTtcclxuXHJcblx0XHRcdGNvbnN0IG9uX21vdXNlX3VwID0gKCkgPT4ge1xyXG5cdFx0XHRcdGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoICdtb3VzZW1vdmUnLCBvbl9tb3VzZV9tb3ZlICk7XHJcblx0XHRcdFx0ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ21vdXNldXAnLCBvbl9tb3VzZV91cCApO1xyXG5cdFx0XHRcdHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCAnbW91c2V1cCcsIG9uX21vdXNlX3VwICk7XHJcblx0XHRcdFx0ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ21vdXNlbGVhdmUnLCBvbl9tb3VzZV91cCApO1xyXG5cdFx0XHRcdGRvY3VtZW50LmJvZHkuc3R5bGUudXNlclNlbGVjdCA9IHByZXZfdXNlcl9zZWxlY3QgfHwgJyc7XHJcblx0XHRcdFx0cm93X2VsLnN0eWxlLmN1cnNvciAgICAgICAgICAgID0gJyc7XHJcblxyXG5cdFx0XHRcdC8vIG5vcm1hbGl6ZSB0byB0aGUgcm934oCZcyBhdmFpbGFibGUgJSBhZ2FpblxyXG5cdFx0XHRcdGNvbnN0IG5vcm1hbGl6ZWQgPSBiLmxheW91dC5jb21wdXRlX2VmZmVjdGl2ZV9iYXNlc19mcm9tX3Jvdyggcm93X2VsLCBncCApO1xyXG5cdFx0XHRcdGIubGF5b3V0LmFwcGx5X2Jhc2VzX3RvX3Jvdyggcm93X2VsLCBub3JtYWxpemVkLmJhc2VzICk7XHJcblx0XHRcdH07XHJcblxyXG5cdFx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCAnbW91c2Vtb3ZlJywgb25fbW91c2VfbW92ZSApO1xyXG5cdFx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCAnbW91c2V1cCcsIG9uX21vdXNlX3VwICk7XHJcblx0XHRcdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCAnbW91c2V1cCcsIG9uX21vdXNlX3VwICk7XHJcblx0XHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoICdtb3VzZWxlYXZlJywgb25fbW91c2VfdXAgKTtcclxuXHRcdH1cclxuXHJcblx0fTtcclxuXHJcblx0LyoqXHJcblx0ICogUGFnZSBhbmQgc2VjdGlvbiBjcmVhdGlvbiwgcmVidWlsZGluZywgYW5kIG5lc3RlZCBTb3J0YWJsZSBzZXR1cC5cclxuXHQgKi9cclxuXHRVSS5XUEJDX0JGQl9QYWdlc19TZWN0aW9ucyA9IGNsYXNzIGV4dGVuZHMgVUkuV1BCQ19CRkJfTW9kdWxlIHtcclxuXHJcblx0XHRpbml0KCkge1xyXG5cdFx0XHR0aGlzLmJ1aWxkZXIuYWRkX3BhZ2UgICAgICAgICAgICAgICAgICA9IChvcHRzKSA9PiB0aGlzLmFkZF9wYWdlKCBvcHRzICk7XHJcblx0XHRcdHRoaXMuYnVpbGRlci5hZGRfc2VjdGlvbiAgICAgICAgICAgICAgID0gKGNvbnRhaW5lciwgY29scykgPT4gdGhpcy5hZGRfc2VjdGlvbiggY29udGFpbmVyLCBjb2xzICk7XHJcblx0XHRcdHRoaXMuYnVpbGRlci5yZWJ1aWxkX3NlY3Rpb24gICAgICAgICAgID0gKHNlY3Rpb25fZGF0YSwgY29udGFpbmVyKSA9PiB0aGlzLnJlYnVpbGRfc2VjdGlvbiggc2VjdGlvbl9kYXRhLCBjb250YWluZXIgKTtcclxuXHRcdFx0dGhpcy5idWlsZGVyLmluaXRfYWxsX25lc3RlZF9zb3J0YWJsZXMgPSAoZWwpID0+IHRoaXMuaW5pdF9hbGxfbmVzdGVkX3NvcnRhYmxlcyggZWwgKTtcclxuXHRcdFx0dGhpcy5idWlsZGVyLmluaXRfc2VjdGlvbl9zb3J0YWJsZSAgICAgPSAoZWwpID0+IHRoaXMuaW5pdF9zZWN0aW9uX3NvcnRhYmxlKCBlbCApO1xyXG5cdFx0XHR0aGlzLmJ1aWxkZXIucGFnZXNfc2VjdGlvbnMgICAgICAgICAgICA9IHRoaXM7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBHaXZlIGV2ZXJ5IGZpZWxkL3NlY3Rpb24gaW4gYSBjbG9uZWQgc3VidHJlZSBhIGZyZXNoIGRhdGEtdWlkIHNvXHJcblx0XHQgKiB1bmlxdWVuZXNzIGNoZWNrcyBkb24ndCBleGNsdWRlIHRoZWlyIG9yaWdpbmFscy5cclxuXHRcdCAqL1xyXG5cdFx0X3JldGFnX3VpZHNfaW5fc3VidHJlZShyb290KSB7XHJcblx0XHRcdGNvbnN0IGIgPSB0aGlzLmJ1aWxkZXI7XHJcblx0XHRcdGlmICggIXJvb3QgKSByZXR1cm47XHJcblx0XHRcdGNvbnN0IG5vZGVzID0gW107XHJcblx0XHRcdGlmICggcm9vdC5jbGFzc0xpc3Q/LmNvbnRhaW5zKCAnd3BiY19iZmJfX3NlY3Rpb24nICkgfHwgcm9vdC5jbGFzc0xpc3Q/LmNvbnRhaW5zKCAnd3BiY19iZmJfX2ZpZWxkJyApICkge1xyXG5cdFx0XHRcdG5vZGVzLnB1c2goIHJvb3QgKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRub2Rlcy5wdXNoKCAuLi5yb290LnF1ZXJ5U2VsZWN0b3JBbGwoICcud3BiY19iZmJfX3NlY3Rpb24sIC53cGJjX2JmYl9fZmllbGQnICkgKTtcclxuXHRcdFx0bm9kZXMuZm9yRWFjaCggKGVsKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgcHJlZml4ICAgPSBlbC5jbGFzc0xpc3QuY29udGFpbnMoICd3cGJjX2JmYl9fc2VjdGlvbicgKSA/ICdzJyA6ICdmJztcclxuXHRcdFx0XHRlbC5kYXRhc2V0LnVpZCA9IGAke3ByZWZpeH0tJHsrK2IuX3VpZF9jb3VudGVyfS0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZyggMzYgKS5zbGljZSggMiwgNyApfWA7XHJcblx0XHRcdH0gKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEJ1bXAgXCJmb29cIiwgXCJmb28tMlwiLCBcImZvby0zXCIsIC4uLlxyXG5cdFx0ICovXHJcblx0XHRfbWFrZV91bmlxdWUoYmFzZSwgdGFrZW4pIHtcclxuXHRcdFx0Y29uc3QgcyA9IENvcmUuV1BCQ19CRkJfU2FuaXRpemU7XHJcblx0XHRcdGxldCB2ICAgPSBTdHJpbmcoIGJhc2UgfHwgJycgKTtcclxuXHRcdFx0aWYgKCAhdiApIHYgPSAnZmllbGQnO1xyXG5cdFx0XHRjb25zdCBtICA9IHYubWF0Y2goIC8tKFxcZCspJC8gKTtcclxuXHRcdFx0bGV0IG4gICAgPSBtID8gKHBhcnNlSW50KCBtWzFdLCAxMCApIHx8IDEpIDogMTtcclxuXHRcdFx0bGV0IHN0ZW0gPSBtID8gdi5yZXBsYWNlKCAvLVxcZCskLywgJycgKSA6IHY7XHJcblx0XHRcdHdoaWxlICggdGFrZW4uaGFzKCB2ICkgKSB7XHJcblx0XHRcdFx0biA9IE1hdGgubWF4KCAyLCBuICsgMSApO1xyXG5cdFx0XHRcdHYgPSBgJHtzdGVtfS0ke259YDtcclxuXHRcdFx0fVxyXG5cdFx0XHR0YWtlbi5hZGQoIHYgKTtcclxuXHRcdFx0cmV0dXJuIHY7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBTdHJpY3QsIG9uZS1wYXNzIGRlLWR1cGxpY2F0aW9uIGZvciBhIG5ld2x5LWluc2VydGVkIHN1YnRyZWUuXHJcblx0XHQgKiAtIEVuc3VyZXMgdW5pcXVlIGRhdGEtaWQgKGludGVybmFsKSwgZGF0YS1uYW1lIChmaWVsZHMpLCBkYXRhLWh0bWxfaWQgKHB1YmxpYylcclxuXHRcdCAqIC0gQWxzbyB1cGRhdGVzIERPTTogPHNlY3Rpb24gaWQ+LCA8aW5wdXQgaWQ+LCA8bGFiZWwgZm9yPiwgYW5kIGlucHV0W25hbWVdLlxyXG5cdFx0ICovXHJcblx0XHRfZGVkdXBlX3N1YnRyZWVfc3RyaWN0KHJvb3QpIHtcclxuXHRcdFx0Y29uc3QgYiA9IHRoaXMuYnVpbGRlcjtcclxuXHRcdFx0Y29uc3QgcyA9IENvcmUuV1BCQ19CRkJfU2FuaXRpemU7XHJcblx0XHRcdGlmICggIXJvb3QgfHwgIWI/LnBhZ2VzX2NvbnRhaW5lciApIHJldHVybjtcclxuXHJcblx0XHRcdC8vIDEpIEJ1aWxkIFwidGFrZW5cIiBzZXRzIGZyb20gb3V0c2lkZSB0aGUgc3VidHJlZS5cclxuXHRcdFx0Y29uc3QgdGFrZW5EYXRhSWQgICA9IG5ldyBTZXQoKTtcclxuXHRcdFx0Y29uc3QgdGFrZW5EYXRhTmFtZSA9IG5ldyBTZXQoKTtcclxuXHRcdFx0Y29uc3QgdGFrZW5IdG1sSWQgICA9IG5ldyBTZXQoKTtcclxuXHRcdFx0Y29uc3QgdGFrZW5Eb21JZCAgICA9IG5ldyBTZXQoKTtcclxuXHJcblx0XHRcdC8vIEFsbCBmaWVsZHMvc2VjdGlvbnMgb3V0c2lkZSByb290XHJcblx0XHRcdGIucGFnZXNfY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoICcud3BiY19iZmJfX2ZpZWxkLCAud3BiY19iZmJfX3NlY3Rpb24nICkuZm9yRWFjaCggZWwgPT4ge1xyXG5cdFx0XHRcdGlmICggcm9vdC5jb250YWlucyggZWwgKSApIHJldHVybjtcclxuXHRcdFx0XHRjb25zdCBkaWQgID0gZWwuZ2V0QXR0cmlidXRlKCAnZGF0YS1pZCcgKTtcclxuXHRcdFx0XHRjb25zdCBkbmFtID0gZWwuZ2V0QXR0cmlidXRlKCAnZGF0YS1uYW1lJyApO1xyXG5cdFx0XHRcdGNvbnN0IGhpZCAgPSBlbC5nZXRBdHRyaWJ1dGUoICdkYXRhLWh0bWxfaWQnICk7XHJcblx0XHRcdFx0aWYgKCBkaWQgKSB0YWtlbkRhdGFJZC5hZGQoIGRpZCApO1xyXG5cdFx0XHRcdGlmICggZG5hbSApIHRha2VuRGF0YU5hbWUuYWRkKCBkbmFtICk7XHJcblx0XHRcdFx0aWYgKCBoaWQgKSB0YWtlbkh0bWxJZC5hZGQoIGhpZCApO1xyXG5cdFx0XHR9ICk7XHJcblxyXG5cdFx0XHQvLyBBbGwgRE9NIGlkcyBvdXRzaWRlIHJvb3QgKGxhYmVscywgaW5wdXRzLCBhbnl0aGluZylcclxuXHRcdFx0ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCggJ1tpZF0nICkuZm9yRWFjaCggZWwgPT4ge1xyXG5cdFx0XHRcdGlmICggcm9vdC5jb250YWlucyggZWwgKSApIHJldHVybjtcclxuXHRcdFx0XHRpZiAoIGVsLmlkICkgdGFrZW5Eb21JZC5hZGQoIGVsLmlkICk7XHJcblx0XHRcdH0gKTtcclxuXHJcblx0XHRcdGNvbnN0IG5vZGVzID0gW107XHJcblx0XHRcdGlmICggcm9vdC5jbGFzc0xpc3Q/LmNvbnRhaW5zKCAnd3BiY19iZmJfX3NlY3Rpb24nICkgfHwgcm9vdC5jbGFzc0xpc3Q/LmNvbnRhaW5zKCAnd3BiY19iZmJfX2ZpZWxkJyApICkge1xyXG5cdFx0XHRcdG5vZGVzLnB1c2goIHJvb3QgKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRub2Rlcy5wdXNoKCAuLi5yb290LnF1ZXJ5U2VsZWN0b3JBbGwoICcud3BiY19iZmJfX3NlY3Rpb24sIC53cGJjX2JmYl9fZmllbGQnICkgKTtcclxuXHJcblx0XHRcdC8vIDIpIFdhbGsgdGhlIHN1YnRyZWUgYW5kIGZpeCBjb2xsaXNpb25zIGRldGVybWluaXN0aWNhbGx5LlxyXG5cdFx0XHRub2Rlcy5mb3JFYWNoKCBlbCA9PiB7XHJcblx0XHRcdFx0Y29uc3QgaXNGaWVsZCAgID0gZWwuY2xhc3NMaXN0LmNvbnRhaW5zKCAnd3BiY19iZmJfX2ZpZWxkJyApO1xyXG5cdFx0XHRcdGNvbnN0IGlzU2VjdGlvbiA9IGVsLmNsYXNzTGlzdC5jb250YWlucyggJ3dwYmNfYmZiX19zZWN0aW9uJyApO1xyXG5cclxuXHRcdFx0XHQvLyBJTlRFUk5BTCBkYXRhLWlkXHJcblx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0Y29uc3QgcmF3ICA9IGVsLmdldEF0dHJpYnV0ZSggJ2RhdGEtaWQnICkgfHwgJyc7XHJcblx0XHRcdFx0XHRjb25zdCBiYXNlID0gcy5zYW5pdGl6ZV9odG1sX2lkKCByYXcgKSB8fCAoaXNTZWN0aW9uID8gJ3NlY3Rpb24nIDogJ2ZpZWxkJyk7XHJcblx0XHRcdFx0XHRjb25zdCB1bmlxID0gdGhpcy5fbWFrZV91bmlxdWUoIGJhc2UsIHRha2VuRGF0YUlkICk7XHJcblx0XHRcdFx0XHRpZiAoIHVuaXEgIT09IHJhdyApIGVsLnNldEF0dHJpYnV0ZSggJ2RhdGEtaWQnLCB1bmlxICk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBIVE1MIG5hbWUgKGZpZWxkcyBvbmx5KVxyXG5cdFx0XHRcdGlmICggaXNGaWVsZCApIHtcclxuXHRcdFx0XHRcdGNvbnN0IHJhdyA9IGVsLmdldEF0dHJpYnV0ZSggJ2RhdGEtbmFtZScgKSB8fCAnJztcclxuXHRcdFx0XHRcdGlmICggcmF3ICkge1xyXG5cdFx0XHRcdFx0XHRjb25zdCBiYXNlID0gcy5zYW5pdGl6ZV9odG1sX25hbWUoIHJhdyApO1xyXG5cdFx0XHRcdFx0XHRjb25zdCB1bmlxID0gdGhpcy5fbWFrZV91bmlxdWUoIGJhc2UsIHRha2VuRGF0YU5hbWUgKTtcclxuXHRcdFx0XHRcdFx0aWYgKCB1bmlxICE9PSByYXcgKSB7XHJcblx0XHRcdFx0XHRcdFx0ZWwuc2V0QXR0cmlidXRlKCAnZGF0YS1uYW1lJywgdW5pcSApO1xyXG5cdFx0XHRcdFx0XHRcdC8vIFVwZGF0ZSBpbm5lciBjb250cm9sIGltbWVkaWF0ZWx5XHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgaW5wdXQgPSBlbC5xdWVyeVNlbGVjdG9yKCAnaW5wdXQsIHRleHRhcmVhLCBzZWxlY3QnICk7XHJcblx0XHRcdFx0XHRcdFx0aWYgKCBpbnB1dCApIGlucHV0LnNldEF0dHJpYnV0ZSggJ25hbWUnLCB1bmlxICk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIFB1YmxpYyBIVE1MIGlkIChmaWVsZHMgKyBzZWN0aW9ucylcclxuXHRcdFx0XHR7XHJcblx0XHRcdFx0XHRjb25zdCByYXcgPSBlbC5nZXRBdHRyaWJ1dGUoICdkYXRhLWh0bWxfaWQnICkgfHwgJyc7XHJcblx0XHRcdFx0XHRpZiAoIHJhdyApIHtcclxuXHRcdFx0XHRcdFx0Y29uc3QgYmFzZSAgICAgICAgICA9IHMuc2FuaXRpemVfaHRtbF9pZCggcmF3ICk7XHJcblx0XHRcdFx0XHRcdC8vIFJlc2VydmUgYWdhaW5zdCBCT1RIIGtub3duIGRhdGEtaHRtbF9pZCBhbmQgcmVhbCBET00gaWRzLlxyXG5cdFx0XHRcdFx0XHRjb25zdCBjb21iaW5lZFRha2VuID0gbmV3IFNldCggWyAuLi50YWtlbkh0bWxJZCwgLi4udGFrZW5Eb21JZCBdICk7XHJcblx0XHRcdFx0XHRcdGxldCBjYW5kaWRhdGUgICAgICAgPSB0aGlzLl9tYWtlX3VuaXF1ZSggYmFzZSwgY29tYmluZWRUYWtlbiApO1xyXG5cdFx0XHRcdFx0XHQvLyBSZWNvcmQgaW50byB0aGUgcmVhbCBzZXRzIHNvIGZ1dHVyZSBjaGVja3Mgc2VlIHRoZSByZXNlcnZhdGlvbi5cclxuXHRcdFx0XHRcdFx0dGFrZW5IdG1sSWQuYWRkKCBjYW5kaWRhdGUgKTtcclxuXHRcdFx0XHRcdFx0dGFrZW5Eb21JZC5hZGQoIGNhbmRpZGF0ZSApO1xyXG5cclxuXHRcdFx0XHRcdFx0aWYgKCBjYW5kaWRhdGUgIT09IHJhdyApIGVsLnNldEF0dHJpYnV0ZSggJ2RhdGEtaHRtbF9pZCcsIGNhbmRpZGF0ZSApO1xyXG5cclxuXHRcdFx0XHRcdFx0Ly8gUmVmbGVjdCB0byBET00gaW1tZWRpYXRlbHlcclxuXHRcdFx0XHRcdFx0aWYgKCBpc1NlY3Rpb24gKSB7XHJcblx0XHRcdFx0XHRcdFx0ZWwuaWQgPSBjYW5kaWRhdGUgfHwgJyc7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgaW5wdXQgPSBlbC5xdWVyeVNlbGVjdG9yKCAnaW5wdXQsIHRleHRhcmVhLCBzZWxlY3QnICk7XHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbGFiZWwgPSBlbC5xdWVyeVNlbGVjdG9yKCAnbGFiZWwud3BiY19iZmJfX2ZpZWxkLWxhYmVsJyApO1xyXG5cdFx0XHRcdFx0XHRcdGlmICggaW5wdXQgKSBpbnB1dC5pZCA9IGNhbmRpZGF0ZSB8fCAnJztcclxuXHRcdFx0XHRcdFx0XHRpZiAoIGxhYmVsICkgbGFiZWwuaHRtbEZvciA9IGNhbmRpZGF0ZSB8fCAnJztcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICggaXNTZWN0aW9uICkge1xyXG5cdFx0XHRcdFx0XHQvLyBFbnN1cmUgbm8gc3RhbGUgRE9NIGlkIGlmIGRhdGEtaHRtbF9pZCB3YXMgY2xlYXJlZFxyXG5cdFx0XHRcdFx0XHRlbC5yZW1vdmVBdHRyaWJ1dGUoICdpZCcgKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gKTtcclxuXHRcdH1cclxuXHJcblx0XHRfbWFrZV9hZGRfY29sdW1uc19jb250cm9sKHBhZ2VfZWwsIHNlY3Rpb25fY29udGFpbmVyLCBpbnNlcnRfcG9zID0gJ2JvdHRvbScpIHtcclxuXHJcblx0XHRcdC8vIEFjY2VwdCBpbnNlcnRfcG9zICgndG9wJ3wnYm90dG9tJyksIGRlZmF1bHQgJ2JvdHRvbScuXHJcblxyXG5cdFx0XHRjb25zdCB0cGwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ3dwYmNfYmZiX19hZGRfY29sdW1uc190ZW1wbGF0ZScgKTtcclxuXHRcdFx0aWYgKCAhdHBsICkge1xyXG5cdFx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBDbG9uZSAqY29udGVudHMqIChub3QgdGhlIGlkKSwgdW5oaWRlLCBhbmQgYWRkIGEgcGFnZS1zY29wZWQgY2xhc3MuXHJcblx0XHRcdGNvbnN0IHNyYyA9ICh0cGwuY29udGVudCAmJiB0cGwuY29udGVudC5maXJzdEVsZW1lbnRDaGlsZCkgPyB0cGwuY29udGVudC5maXJzdEVsZW1lbnRDaGlsZCA6IHRwbC5maXJzdEVsZW1lbnRDaGlsZDtcclxuXHRcdFx0aWYgKCAhc3JjICkge1xyXG5cdFx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRjb25zdCBjbG9uZSA9IHNyYy5jbG9uZU5vZGUoIHRydWUgKTtcclxuXHRcdFx0Y2xvbmUucmVtb3ZlQXR0cmlidXRlKCAnaGlkZGVuJyApO1xyXG5cdFx0XHRpZiAoIGNsb25lLmlkICkge1xyXG5cdFx0XHRcdGNsb25lLnJlbW92ZUF0dHJpYnV0ZSggJ2lkJyApO1xyXG5cdFx0XHR9XHJcblx0XHRcdGNsb25lLnF1ZXJ5U2VsZWN0b3JBbGwoICdbaWRdJyApLmZvckVhY2goIG4gPT4gbi5yZW1vdmVBdHRyaWJ1dGUoICdpZCcgKSApO1xyXG5cclxuXHRcdFx0Ly8gTWFyayB3aGVyZSB0aGlzIGNvbnRyb2wgaW5zZXJ0cyBzZWN0aW9ucy5cclxuXHRcdFx0Y2xvbmUuZGF0YXNldC5pbnNlcnQgPSBpbnNlcnRfcG9zOyAvLyAndG9wJyB8ICdib3R0b20nXHJcblxyXG5cdFx0XHQvLyAvLyBPcHRpb25hbCBVSSBoaW50IGZvciB1c2VycyAoa2VlcHMgZXhpc3RpbmcgbWFya3VwIGludGFjdCkuXHJcblx0XHRcdC8vIGNvbnN0IGhpbnQgPSBjbG9uZS5xdWVyeVNlbGVjdG9yKCAnLm5hdi10YWItdGV4dCAuc2VsZWN0ZWRfdmFsdWUnICk7XHJcblx0XHRcdC8vIGlmICggaGludCApIHtcclxuXHRcdFx0Ly8gXHRoaW50LnRleHRDb250ZW50ID0gKGluc2VydF9wb3MgPT09ICd0b3AnKSA/ICcgKGFkZCBhdCB0b3ApJyA6ICcgKGFkZCBhdCBib3R0b20pJztcclxuXHRcdFx0Ly8gfVxyXG5cclxuXHRcdFx0Ly8gQ2xpY2sgb24gb3B0aW9ucyAtIGFkZCBzZWN0aW9uIHdpdGggTiBjb2x1bW5zLlxyXG5cdFx0XHRjbG9uZS5hZGRFdmVudExpc3RlbmVyKCAnY2xpY2snLCAoZSkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IGEgPSBlLnRhcmdldC5jbG9zZXN0KCAnLnVsX2Ryb3Bkb3duX21lbnVfbGlfYWN0aW9uX2FkZF9zZWN0aW9ucycgKTtcclxuXHRcdFx0XHRpZiAoICFhICkge1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG5cdFx0XHRcdC8vIFJlYWQgTiBlaXRoZXIgZnJvbSBkYXRhLWNvbHMgb3IgZmFsbGJhY2sgdG8gcGFyc2luZyB0ZXh0IGxpa2UgXCIzIENvbHVtbnNcIi5cclxuXHRcdFx0XHRsZXQgY29scyA9IHBhcnNlSW50KCBhLmRhdGFzZXQuY29scyB8fCAoYS50ZXh0Q29udGVudC5tYXRjaCggL1xcYihcXGQrKVxccypDb2x1bW4vaSApPy5bMV0gPz8gJzEnKSwgMTAgKTtcclxuXHRcdFx0XHRjb2xzICAgICA9IE1hdGgubWF4KCAxLCBNYXRoLm1pbiggNCwgY29scyApICk7XHJcblxyXG5cdFx0XHRcdC8vIE5FVzogaG9ub3IgdGhlIGNvbnRyb2wncyBpbnNlcnRpb24gcG9zaXRpb25cclxuXHRcdFx0XHR0aGlzLmFkZF9zZWN0aW9uKCBzZWN0aW9uX2NvbnRhaW5lciwgY29scywgaW5zZXJ0X3BvcyApO1xyXG5cclxuXHRcdFx0XHQvLyBSZWZsZWN0IGxhc3QgY2hvaWNlICh1bmNoYW5nZWQpXHJcblx0XHRcdFx0Y29uc3QgdmFsID0gY2xvbmUucXVlcnlTZWxlY3RvciggJy5zZWxlY3RlZF92YWx1ZScgKTtcclxuXHRcdFx0XHRpZiAoIHZhbCApIHtcclxuXHRcdFx0XHRcdHZhbC50ZXh0Q29udGVudCA9IGAgKCR7Y29sc30pYDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gKTtcclxuXHJcblx0XHRcdHJldHVybiBjbG9uZTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEBwYXJhbSB7e3Njcm9sbD86IGJvb2xlYW59fSBbb3B0cyA9IHt9XVxyXG5cdFx0ICogQHJldHVybnMge0hUTUxFbGVtZW50fVxyXG5cdFx0ICovXHJcblx0XHRhZGRfcGFnZSh7IHNjcm9sbCA9IHRydWUgfSA9IHt9KSB7XHJcblx0XHRcdGNvbnN0IGIgICAgICAgPSB0aGlzLmJ1aWxkZXI7XHJcblx0XHRcdGNvbnN0IHBhZ2VfZWwgPSBDb3JlLldQQkNfRm9ybV9CdWlsZGVyX0hlbHBlci5jcmVhdGVfZWxlbWVudCggJ2RpdicsICd3cGJjX2JmYl9fcGFuZWwgd3BiY19iZmJfX3BhbmVsLS1wcmV2aWV3ICB3cGJjX2JmYl9mb3JtIHdwYmNfY29udGFpbmVyIHdwYmNfZm9ybSB3cGJjX2NvbnRhaW5lcl9ib29raW5nX2Zvcm0nICk7XHJcblx0XHRcdHBhZ2VfZWwuc2V0QXR0cmlidXRlKCAnZGF0YS1wYWdlJywgKytiLnBhZ2VfY291bnRlciApO1xyXG5cclxuXHRcdFx0Ly8gXCJQYWdlIDEgfCBYXCIgLSBSZW5kZXIgcGFnZSBUaXRsZSB3aXRoIFJlbW92ZSBYIGJ1dHRvbi5cclxuXHRcdFx0Y29uc3QgY29udHJvbHNfaHRtbCA9IFVJLnJlbmRlcl93cF90ZW1wbGF0ZSggJ3dwYmMtYmZiLXRwbC1wYWdlLXJlbW92ZScsIHsgcGFnZV9udW1iZXI6IGIucGFnZV9jb3VudGVyIH0gKTtcclxuXHRcdFx0cGFnZV9lbC5pbm5lckhUTUwgICA9IGNvbnRyb2xzX2h0bWwgKyAnPGRpdiBjbGFzcz1cIndwYmNfYmZiX19mb3JtX3ByZXZpZXdfc2VjdGlvbl9jb250YWluZXIgd3BiY193aXphcmRfX2JvcmRlcl9jb250YWluZXJcIj48L2Rpdj4nO1xyXG5cclxuXHRcdFx0Yi5wYWdlc19jb250YWluZXIuYXBwZW5kQ2hpbGQoIHBhZ2VfZWwgKTtcclxuXHRcdFx0aWYgKCBzY3JvbGwgKSB7XHJcblx0XHRcdFx0cGFnZV9lbC5zY3JvbGxJbnRvVmlldyggeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnc3RhcnQnIH0gKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Y29uc3Qgc2VjdGlvbl9jb250YWluZXIgICAgICAgICA9IHBhZ2VfZWwucXVlcnlTZWxlY3RvciggJy53cGJjX2JmYl9fZm9ybV9wcmV2aWV3X3NlY3Rpb25fY29udGFpbmVyJyApO1xyXG5cdFx0XHRjb25zdCBzZWN0aW9uX2NvdW50X29uX2FkZF9wYWdlID0gMjtcclxuXHRcdFx0dGhpcy5pbml0X3NlY3Rpb25fc29ydGFibGUoIHNlY3Rpb25fY29udGFpbmVyICk7XHJcblx0XHRcdHRoaXMuYWRkX3NlY3Rpb24oIHNlY3Rpb25fY29udGFpbmVyLCBzZWN0aW9uX2NvdW50X29uX2FkZF9wYWdlICk7XHJcblxyXG5cdFx0XHQvLyBEcm9wZG93biBjb250cm9sIGNsb25lZCBmcm9tIHRoZSBoaWRkZW4gdGVtcGxhdGUuXHJcblx0XHRcdGNvbnN0IGNvbnRyb2xzX2hvc3RfdG9wID0gcGFnZV9lbC5xdWVyeVNlbGVjdG9yKCAnLndwYmNfYmZiX19jb250cm9scycgKTtcclxuXHRcdFx0Y29uc3QgY3RybF90b3AgICAgICAgICAgPSB0aGlzLl9tYWtlX2FkZF9jb2x1bW5zX2NvbnRyb2woIHBhZ2VfZWwsIHNlY3Rpb25fY29udGFpbmVyLCAndG9wJyApO1xyXG5cdFx0XHRpZiAoIGN0cmxfdG9wICkge1xyXG5cdFx0XHRcdGNvbnRyb2xzX2hvc3RfdG9wLmFwcGVuZENoaWxkKCBjdHJsX3RvcCApO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vIEJvdHRvbSBjb250cm9sIGJhciBhZnRlciB0aGUgc2VjdGlvbiBjb250YWluZXIuXHJcblx0XHRcdGNvbnN0IGNvbnRyb2xzX2hvc3RfYm90dG9tID0gQ29yZS5XUEJDX0Zvcm1fQnVpbGRlcl9IZWxwZXIuY3JlYXRlX2VsZW1lbnQoICdkaXYnLCAnd3BiY19iZmJfX2NvbnRyb2xzIHdwYmNfYmZiX19jb250cm9scy0tYm90dG9tJyApO1xyXG5cdFx0XHRzZWN0aW9uX2NvbnRhaW5lci5hZnRlciggY29udHJvbHNfaG9zdF9ib3R0b20gKTtcclxuXHRcdFx0Y29uc3QgY3RybF9ib3R0b20gPSB0aGlzLl9tYWtlX2FkZF9jb2x1bW5zX2NvbnRyb2woIHBhZ2VfZWwsIHNlY3Rpb25fY29udGFpbmVyLCAnYm90dG9tJyApO1xyXG5cdFx0XHRpZiAoIGN0cmxfYm90dG9tICkge1xyXG5cdFx0XHRcdGNvbnRyb2xzX2hvc3RfYm90dG9tLmFwcGVuZENoaWxkKCBjdHJsX2JvdHRvbSApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4gcGFnZV9lbDtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGNvbnRhaW5lclxyXG5cdFx0ICogQHBhcmFtIHtudW1iZXJ9ICAgICAgY29sc1xyXG5cdFx0ICogQHBhcmFtIHsndG9wJ3wnYm90dG9tJ30gW2luc2VydF9wb3M9J2JvdHRvbSddICAvLyBORVdcclxuXHRcdCAqL1xyXG5cdFx0YWRkX3NlY3Rpb24oY29udGFpbmVyLCBjb2xzLCBpbnNlcnRfcG9zID0gJ2JvdHRvbScpIHtcclxuXHRcdFx0Y29uc3QgYiA9IHRoaXMuYnVpbGRlcjtcclxuXHRcdFx0Y29scyAgICA9IE1hdGgubWF4KCAxLCBwYXJzZUludCggY29scywgMTAgKSB8fCAxICk7XHJcblxyXG5cdFx0XHRjb25zdCBzZWN0aW9uID0gQ29yZS5XUEJDX0Zvcm1fQnVpbGRlcl9IZWxwZXIuY3JlYXRlX2VsZW1lbnQoICdkaXYnLCAnd3BiY19iZmJfX3NlY3Rpb24nICk7XHJcblx0XHRcdHNlY3Rpb24uc2V0QXR0cmlidXRlKCAnZGF0YS1pZCcsIGBzZWN0aW9uLSR7KytiLnNlY3Rpb25fY291bnRlcn0tJHtEYXRlLm5vdygpfWAgKTtcclxuXHRcdFx0c2VjdGlvbi5zZXRBdHRyaWJ1dGUoICdkYXRhLXVpZCcsIGBzLSR7KytiLl91aWRfY291bnRlcn0tJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoIDM2ICkuc2xpY2UoIDIsIDcgKX1gICk7XHJcblx0XHRcdHNlY3Rpb24uc2V0QXR0cmlidXRlKCAnZGF0YS10eXBlJywgJ3NlY3Rpb24nICk7XHJcblx0XHRcdHNlY3Rpb24uc2V0QXR0cmlidXRlKCAnZGF0YS1sYWJlbCcsICdTZWN0aW9uJyApO1xyXG5cdFx0XHRzZWN0aW9uLnNldEF0dHJpYnV0ZSggJ2RhdGEtY29sdW1ucycsIFN0cmluZyggY29scyApICk7XHJcblx0XHRcdC8vIERvIG5vdCBwZXJzaXN0IG9yIHNlZWQgcGVyLWNvbHVtbiBzdHlsZXMgYnkgZGVmYXVsdCAob3B0LWluIHZpYSBpbnNwZWN0b3IpLlxyXG5cclxuXHRcdFx0Y29uc3Qgcm93ID0gQ29yZS5XUEJDX0Zvcm1fQnVpbGRlcl9IZWxwZXIuY3JlYXRlX2VsZW1lbnQoICdkaXYnLCAnd3BiY19iZmJfX3JvdyB3cGJjX19yb3cnICk7XHJcblx0XHRcdGZvciAoIGxldCBpID0gMDsgaSA8IGNvbHM7IGkrKyApIHtcclxuXHRcdFx0XHRjb25zdCBjb2wgICAgICAgICAgID0gQ29yZS5XUEJDX0Zvcm1fQnVpbGRlcl9IZWxwZXIuY3JlYXRlX2VsZW1lbnQoICdkaXYnLCAnd3BiY19iZmJfX2NvbHVtbiB3cGJjX19maWVsZCcgKTtcclxuXHRcdFx0XHRjb2wuc3R5bGUuZmxleEJhc2lzID0gKDEwMCAvIGNvbHMpICsgJyUnO1xyXG5cdFx0XHRcdC8vIE5vIGRlZmF1bHQgQ1NTIHZhcnMgaGVyZTsgcmVhbCBjb2x1bW5zIHJlbWFpbiB1bmFmZmVjdGVkIHVudGlsIHVzZXIgYWN0aXZhdGVzIHN0eWxlcy5cclxuXHRcdFx0XHRiLmluaXRfc29ydGFibGU/LiggY29sICk7XHJcblx0XHRcdFx0cm93LmFwcGVuZENoaWxkKCBjb2wgKTtcclxuXHRcdFx0XHRpZiAoIGkgPCBjb2xzIC0gMSApIHtcclxuXHRcdFx0XHRcdGNvbnN0IHJlc2l6ZXIgPSBDb3JlLldQQkNfRm9ybV9CdWlsZGVyX0hlbHBlci5jcmVhdGVfZWxlbWVudCggJ2RpdicsICd3cGJjX2JmYl9fY29sdW1uLXJlc2l6ZXInICk7XHJcblx0XHRcdFx0XHRyZXNpemVyLmFkZEV2ZW50TGlzdGVuZXIoICdtb3VzZWRvd24nLCBiLmluaXRfcmVzaXplX2hhbmRsZXIgKTtcclxuXHRcdFx0XHRcdHJvdy5hcHBlbmRDaGlsZCggcmVzaXplciApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRzZWN0aW9uLmFwcGVuZENoaWxkKCByb3cgKTtcclxuXHRcdFx0Yi5sYXlvdXQuc2V0X2VxdWFsX2Jhc2VzKCByb3csIGIuY29sX2dhcF9wZXJjZW50ICk7XHJcblx0XHRcdGIuYWRkX292ZXJsYXlfdG9vbGJhciggc2VjdGlvbiApO1xyXG5cdFx0XHRzZWN0aW9uLnNldEF0dHJpYnV0ZSggJ3RhYmluZGV4JywgJzAnICk7XHJcblx0XHRcdHRoaXMuaW5pdF9hbGxfbmVzdGVkX3NvcnRhYmxlcyggc2VjdGlvbiApO1xyXG5cclxuXHRcdFx0Ly8gSW5zZXJ0aW9uIHBvbGljeTogdG9wIHwgYm90dG9tLlxyXG5cdFx0XHRpZiAoIGluc2VydF9wb3MgPT09ICd0b3AnICYmIGNvbnRhaW5lci5maXJzdEVsZW1lbnRDaGlsZCApIHtcclxuXHRcdFx0XHRjb250YWluZXIuaW5zZXJ0QmVmb3JlKCBzZWN0aW9uLCBjb250YWluZXIuZmlyc3RFbGVtZW50Q2hpbGQgKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRjb250YWluZXIuYXBwZW5kQ2hpbGQoIHNlY3Rpb24gKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IHNlY3Rpb25fZGF0YVxyXG5cdFx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gY29udGFpbmVyXHJcblx0XHQgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9IFRoZSByZWJ1aWx0IHNlY3Rpb24gZWxlbWVudC5cclxuXHRcdCAqL1xyXG5cdFx0cmVidWlsZF9zZWN0aW9uKHNlY3Rpb25fZGF0YSwgY29udGFpbmVyKSB7XHJcblx0XHRcdGNvbnN0IGIgICAgICAgICA9IHRoaXMuYnVpbGRlcjtcclxuXHRcdFx0Y29uc3QgY29sc19kYXRhID0gQXJyYXkuaXNBcnJheSggc2VjdGlvbl9kYXRhPy5jb2x1bW5zICkgPyBzZWN0aW9uX2RhdGEuY29sdW1ucyA6IFtdO1xyXG5cdFx0XHR0aGlzLmFkZF9zZWN0aW9uKCBjb250YWluZXIsIGNvbHNfZGF0YS5sZW5ndGggfHwgMSApO1xyXG5cdFx0XHRjb25zdCBzZWN0aW9uID0gY29udGFpbmVyLmxhc3RFbGVtZW50Q2hpbGQ7XHJcblx0XHRcdGlmICggIXNlY3Rpb24uZGF0YXNldC51aWQgKSB7XHJcblx0XHRcdFx0c2VjdGlvbi5zZXRBdHRyaWJ1dGUoICdkYXRhLXVpZCcsIGBzLSR7KytiLl91aWRfY291bnRlcn0tJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoIDM2ICkuc2xpY2UoIDIsIDcgKX1gICk7XHJcblx0XHRcdH1cclxuXHRcdFx0c2VjdGlvbi5zZXRBdHRyaWJ1dGUoICdkYXRhLWlkJywgc2VjdGlvbl9kYXRhPy5pZCB8fCBgc2VjdGlvbi0keysrYi5zZWN0aW9uX2NvdW50ZXJ9LSR7RGF0ZS5ub3coKX1gICk7XHJcblx0XHRcdHNlY3Rpb24uc2V0QXR0cmlidXRlKCAnZGF0YS10eXBlJywgJ3NlY3Rpb24nICk7XHJcblx0XHRcdHNlY3Rpb24uc2V0QXR0cmlidXRlKCAnZGF0YS1sYWJlbCcsIHNlY3Rpb25fZGF0YT8ubGFiZWwgfHwgJ1NlY3Rpb24nICk7XHJcblx0XHRcdHNlY3Rpb24uc2V0QXR0cmlidXRlKCAnZGF0YS1jb2x1bW5zJywgU3RyaW5nKCAoc2VjdGlvbl9kYXRhPy5jb2x1bW5zIHx8IFtdKS5sZW5ndGggfHwgMSApICk7XHJcblx0XHRcdC8vIFBlcnNpc3RlZCBhdHRyaWJ1dGVzXHJcblx0XHRcdGlmICggc2VjdGlvbl9kYXRhPy5odG1sX2lkICkge1xyXG5cdFx0XHRcdHNlY3Rpb24uc2V0QXR0cmlidXRlKCAnZGF0YS1odG1sX2lkJywgU3RyaW5nKCBzZWN0aW9uX2RhdGEuaHRtbF9pZCApICk7XHJcblx0XHRcdFx0Ly8gZ2l2ZSB0aGUgY29udGFpbmVyIGEgcmVhbCBpZCBzbyBhbmNob3JzL0NTUyBjYW4gdGFyZ2V0IGl0XHJcblx0XHRcdFx0c2VjdGlvbi5pZCA9IFN0cmluZyggc2VjdGlvbl9kYXRhLmh0bWxfaWQgKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gTkVXOiByZXN0b3JlIHBlcnNpc3RlZCBwZXItY29sdW1uIHN0eWxlcyAocmF3IEpTT04gc3RyaW5nKS5cclxuXHRcdFx0aWYgKCBzZWN0aW9uX2RhdGE/LmNvbF9zdHlsZXMgIT0gbnVsbCApIHtcclxuXHRcdFx0XHRjb25zdCBqc29uID0gU3RyaW5nKCBzZWN0aW9uX2RhdGEuY29sX3N0eWxlcyApO1xyXG5cdFx0XHRcdHNlY3Rpb24uc2V0QXR0cmlidXRlKCAnZGF0YS1jb2xfc3R5bGVzJywganNvbiApO1xyXG5cdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHRzZWN0aW9uLmRhdGFzZXQuY29sX3N0eWxlcyA9IGpzb247XHJcblx0XHRcdFx0fSBjYXRjaCAoIF9lICkge1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHQvLyAoTm8gcmVuZGVyX3ByZXZpZXcoKSBjYWxsIGhlcmUgb24gcHVycG9zZTogc2VjdGlvbnPigJkgYnVpbGRlciBET00gdXNlcyAud3BiY19iZmJfX3Jvdy8ud3BiY19iZmJfX2NvbHVtbi4pXHJcblxyXG5cclxuXHRcdFx0aWYgKCBzZWN0aW9uX2RhdGE/LmNzc2NsYXNzICkge1xyXG5cdFx0XHRcdHNlY3Rpb24uc2V0QXR0cmlidXRlKCAnZGF0YS1jc3NjbGFzcycsIFN0cmluZyggc2VjdGlvbl9kYXRhLmNzc2NsYXNzICkgKTtcclxuXHRcdFx0XHQvLyBrZWVwIGNvcmUgY2xhc3NlcywgdGhlbiBhZGQgY3VzdG9tIGNsYXNzKGVzKVxyXG5cdFx0XHRcdFN0cmluZyggc2VjdGlvbl9kYXRhLmNzc2NsYXNzICkuc3BsaXQoIC9cXHMrLyApLmZpbHRlciggQm9vbGVhbiApLmZvckVhY2goIGNscyA9PiBzZWN0aW9uLmNsYXNzTGlzdC5hZGQoIGNscyApICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGNvbnN0IHJvdyA9IHNlY3Rpb24ucXVlcnlTZWxlY3RvciggJy53cGJjX2JmYl9fcm93JyApO1xyXG5cdFx0XHQvLyBEZWxlZ2F0ZSBwYXJzaW5nICsgYWN0aXZhdGlvbiArIGFwcGxpY2F0aW9uIHRvIHRoZSBDb2x1bW4gU3R5bGVzIHNlcnZpY2UuXHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0Y29uc3QganNvbiA9IHNlY3Rpb24uZ2V0QXR0cmlidXRlKCAnZGF0YS1jb2xfc3R5bGVzJyApXHJcblx0XHRcdFx0XHR8fCAoc2VjdGlvbi5kYXRhc2V0ID8gKHNlY3Rpb24uZGF0YXNldC5jb2xfc3R5bGVzIHx8ICcnKSA6ICcnKTtcclxuXHRcdFx0XHRjb25zdCBhcnIgID0gVUkuV1BCQ19CRkJfQ29sdW1uX1N0eWxlcy5wYXJzZV9jb2xfc3R5bGVzKCBqc29uICk7XHJcblx0XHRcdFx0VUkuV1BCQ19CRkJfQ29sdW1uX1N0eWxlcy5hcHBseSggc2VjdGlvbiwgYXJyICk7XHJcblx0XHRcdH0gY2F0Y2ggKCBfZSApIHtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Y29sc19kYXRhLmZvckVhY2goIChjb2xfZGF0YSwgaW5kZXgpID0+IHtcclxuXHRcdFx0XHRjb25zdCBjb2x1bW5zX29ubHkgID0gcm93LnF1ZXJ5U2VsZWN0b3JBbGwoICc6c2NvcGUgPiAud3BiY19iZmJfX2NvbHVtbicgKTtcclxuXHRcdFx0XHRjb25zdCBjb2wgICAgICAgICAgID0gY29sdW1uc19vbmx5W2luZGV4XTtcclxuXHRcdFx0XHRjb2wuc3R5bGUuZmxleEJhc2lzID0gY29sX2RhdGEud2lkdGggfHwgJzEwMCUnO1xyXG5cdFx0XHRcdChjb2xfZGF0YS5pdGVtcyB8fCBbXSkuZm9yRWFjaCggKGl0ZW0pID0+IHtcclxuXHRcdFx0XHRcdGlmICggIWl0ZW0gfHwgIWl0ZW0udHlwZSApIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKCBpdGVtLnR5cGUgPT09ICdmaWVsZCcgKSB7XHJcblx0XHRcdFx0XHRcdGNvbnN0IGVsID0gYi5idWlsZF9maWVsZCggaXRlbS5kYXRhICk7XHJcblx0XHRcdFx0XHRcdGlmICggZWwgKSB7XHJcblx0XHRcdFx0XHRcdFx0Y29sLmFwcGVuZENoaWxkKCBlbCApO1xyXG5cdFx0XHRcdFx0XHRcdGIudHJpZ2dlcl9maWVsZF9kcm9wX2NhbGxiYWNrKCBlbCwgJ2xvYWQnICk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKCBpdGVtLnR5cGUgPT09ICdzZWN0aW9uJyApIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5yZWJ1aWxkX3NlY3Rpb24oIGl0ZW0uZGF0YSwgY29sICk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSApO1xyXG5cdFx0XHR9ICk7XHJcblx0XHRcdGNvbnN0IGNvbXB1dGVkID0gYi5sYXlvdXQuY29tcHV0ZV9lZmZlY3RpdmVfYmFzZXNfZnJvbV9yb3coIHJvdywgYi5jb2xfZ2FwX3BlcmNlbnQgKTtcclxuXHRcdFx0Yi5sYXlvdXQuYXBwbHlfYmFzZXNfdG9fcm93KCByb3csIGNvbXB1dGVkLmJhc2VzICk7XHJcblx0XHRcdHRoaXMuaW5pdF9hbGxfbmVzdGVkX3NvcnRhYmxlcyggc2VjdGlvbiApO1xyXG5cclxuXHRcdFx0Ly8gTkVXOiByZXRhZyBVSURzIGZpcnN0IChzbyB1bmlxdWVuZXNzIGNoZWNrcyBkb24ndCBleGNsdWRlIG9yaWdpbmFscyksIHRoZW4gZGVkdXBlIGFsbCBrZXlzLlxyXG5cdFx0XHR0aGlzLl9yZXRhZ191aWRzX2luX3N1YnRyZWUoIHNlY3Rpb24gKTtcclxuXHRcdFx0dGhpcy5fZGVkdXBlX3N1YnRyZWVfc3RyaWN0KCBzZWN0aW9uICk7XHJcblx0XHRcdHJldHVybiBzZWN0aW9uO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBjb250YWluZXIgKi9cclxuXHRcdGluaXRfYWxsX25lc3RlZF9zb3J0YWJsZXMoY29udGFpbmVyKSB7XHJcblx0XHRcdGNvbnN0IGIgPSB0aGlzLmJ1aWxkZXI7XHJcblx0XHRcdGlmICggY29udGFpbmVyLmNsYXNzTGlzdC5jb250YWlucyggJ3dwYmNfYmZiX19mb3JtX3ByZXZpZXdfc2VjdGlvbl9jb250YWluZXInICkgKSB7XHJcblx0XHRcdFx0dGhpcy5pbml0X3NlY3Rpb25fc29ydGFibGUoIGNvbnRhaW5lciApO1xyXG5cdFx0XHR9XHJcblx0XHRcdGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCAnLndwYmNfYmZiX19zZWN0aW9uJyApLmZvckVhY2goIChzZWN0aW9uKSA9PiB7XHJcblx0XHRcdFx0c2VjdGlvbi5xdWVyeVNlbGVjdG9yQWxsKCAnLndwYmNfYmZiX19jb2x1bW4nICkuZm9yRWFjaCggKGNvbCkgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy5pbml0X3NlY3Rpb25fc29ydGFibGUoIGNvbCApO1xyXG5cdFx0XHRcdH0gKTtcclxuXHRcdFx0fSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBjb250YWluZXIgKi9cclxuXHRcdGluaXRfc2VjdGlvbl9zb3J0YWJsZShjb250YWluZXIpIHtcclxuXHRcdFx0Y29uc3QgYiA9IHRoaXMuYnVpbGRlcjtcclxuXHRcdFx0aWYgKCAhY29udGFpbmVyICkge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cdFx0XHRjb25zdCBpc19jb2x1bW4gICAgPSBjb250YWluZXIuY2xhc3NMaXN0LmNvbnRhaW5zKCAnd3BiY19iZmJfX2NvbHVtbicgKTtcclxuXHRcdFx0Y29uc3QgaXNfdG9wX2xldmVsID0gY29udGFpbmVyLmNsYXNzTGlzdC5jb250YWlucyggJ3dwYmNfYmZiX19mb3JtX3ByZXZpZXdfc2VjdGlvbl9jb250YWluZXInICk7XHJcblx0XHRcdGlmICggIWlzX2NvbHVtbiAmJiAhaXNfdG9wX2xldmVsICkge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cdFx0XHRiLmluaXRfc29ydGFibGU/LiggY29udGFpbmVyICk7XHJcblx0XHR9XHJcblx0fTtcclxuXHJcblx0LyoqXHJcblx0ICogU2VyaWFsaXphdGlvbiBhbmQgZGVzZXJpYWxpemF0aW9uIG9mIHBhZ2VzL3NlY3Rpb25zL2ZpZWxkcy5cclxuXHQgKi9cclxuXHRVSS5XUEJDX0JGQl9TdHJ1Y3R1cmVfSU8gPSBjbGFzcyBleHRlbmRzIFVJLldQQkNfQkZCX01vZHVsZSB7XG5cdFx0aW5pdCgpIHtcblx0XHRcdHRoaXMuYnVpbGRlci5nZXRfc3RydWN0dXJlICAgICAgICA9ICgpID0+IHRoaXMuc2VyaWFsaXplKCk7XG5cdFx0XHR0aGlzLmJ1aWxkZXIubG9hZF9zYXZlZF9zdHJ1Y3R1cmUgPSAocywgb3B0cykgPT4gdGhpcy5kZXNlcmlhbGl6ZSggcywgb3B0cyApO1xuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIE5vcm1hbGl6ZSBvcHRpb24gdmFsdWVzIHdoZW4gYSBmaWVsZCBleHBsaWNpdGx5IGRpc2FibGVzIHNlcGFyYXRlIHZhbHVlcy5cblx0XHQgKlxuXHRcdCAqIE9sZGVyIEJ1aWxkZXIgdmVyc2lvbnMgcGVyc2lzdGVkIGFuIHVuY2hlY2tlZCB2YWx1ZV9kaWZmZXJzIHRvZ2dsZSBhcyBhblxuXHRcdCAqIGVtcHR5IHN0cmluZy4gVHJlYXQgdGhhdCBleHBsaWNpdCBsZWdhY3kgdmFsdWUgYXMgZmFsc2UsIHdoaWxlIHJldGFpbmluZ1xuXHRcdCAqIHRoZSBzY2hlbWEgZGVmYXVsdCB3aGVuIHRoZSBwcm9wZXJ0eSBpcyBnZW51aW5lbHkgYWJzZW50LlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IGZpZWxkX2RhdGEgU2VyaWFsaXplZCBmaWVsZCBkYXRhLlxuXHRcdCAqIEByZXR1cm5zIHtPYmplY3R9IE5vcm1hbGl6ZWQgc2VyaWFsaXplZCBmaWVsZCBkYXRhLlxuXHRcdCAqL1xuXHRcdF9ub3JtYWxpemVfZmllbGRfb3B0aW9uX3ZhbHVlcyhmaWVsZF9kYXRhKSB7XG5cdFx0XHRjb25zdCBoYXNfdmFsdWVfZGlmZmVycyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCggZmllbGRfZGF0YSwgJ3ZhbHVlX2RpZmZlcnMnICk7XG5cdFx0XHRpZiAoICFoYXNfdmFsdWVfZGlmZmVycyApIHtcblx0XHRcdFx0cmV0dXJuIGZpZWxkX2RhdGE7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHZhbHVlX2RpZmZlcnMgICA9IENvcmUuV1BCQ19CRkJfU2FuaXRpemUuY29lcmNlX2Jvb2xlYW4oIGZpZWxkX2RhdGEudmFsdWVfZGlmZmVycywgZmFsc2UgKTtcblx0XHRcdGZpZWxkX2RhdGEudmFsdWVfZGlmZmVycyA9IHZhbHVlX2RpZmZlcnM7XG5cblx0XHRcdGlmICggIXZhbHVlX2RpZmZlcnMgJiYgQXJyYXkuaXNBcnJheSggZmllbGRfZGF0YS5vcHRpb25zICkgKSB7XG5cdFx0XHRcdGZpZWxkX2RhdGEub3B0aW9ucyA9IGZpZWxkX2RhdGEub3B0aW9ucy5tYXAoICggb3B0aW9uX3JlY29yZCApID0+IHtcblx0XHRcdFx0XHRpZiAoICFvcHRpb25fcmVjb3JkIHx8IHR5cGVvZiBvcHRpb25fcmVjb3JkICE9PSAnb2JqZWN0JyApIHtcblx0XHRcdFx0XHRcdHJldHVybiBvcHRpb25fcmVjb3JkO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiBPYmplY3QuYXNzaWduKFxuXHRcdFx0XHRcdFx0e30sXG5cdFx0XHRcdFx0XHRvcHRpb25fcmVjb3JkLFxuXHRcdFx0XHRcdFx0eyB2YWx1ZTogU3RyaW5nKCBvcHRpb25fcmVjb3JkLmxhYmVsID09IG51bGwgPyAnJyA6IG9wdGlvbl9yZWNvcmQubGFiZWwgKSB9XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZmllbGRfZGF0YTtcblx0XHR9XG5cblx0XHQvKiogQHJldHVybnMge0FycmF5fSAqL1xuXHRcdHNlcmlhbGl6ZSgpIHtcblx0XHRcdGNvbnN0IGIgPSB0aGlzLmJ1aWxkZXI7XHJcblx0XHRcdHRoaXMuX25vcm1hbGl6ZV9pZHMoKTtcclxuXHRcdFx0dGhpcy5fbm9ybWFsaXplX25hbWVzKCk7XHJcblx0XHRcdGNvbnN0IHBhZ2VzID0gW107XHJcblx0XHRcdGIucGFnZXNfY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoICcud3BiY19iZmJfX3BhbmVsLS1wcmV2aWV3JyApLmZvckVhY2goIChwYWdlX2VsLCBwYWdlX2luZGV4KSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgY29udGFpbmVyID0gcGFnZV9lbC5xdWVyeVNlbGVjdG9yKCAnLndwYmNfYmZiX19mb3JtX3ByZXZpZXdfc2VjdGlvbl9jb250YWluZXInICk7XHJcblx0XHRcdFx0Y29uc3QgY29udGVudCAgID0gW107XHJcblx0XHRcdFx0aWYgKCAhY29udGFpbmVyICkge1xyXG5cdFx0XHRcdFx0cGFnZXMucHVzaCggeyBwYWdlOiBwYWdlX2luZGV4ICsgMSwgY29udGVudCB9ICk7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCAnOnNjb3BlID4gKicgKS5mb3JFYWNoKCAoY2hpbGQpID0+IHtcclxuXHRcdFx0XHRcdGlmICggY2hpbGQuY2xhc3NMaXN0LmNvbnRhaW5zKCAnd3BiY19iZmJfX3NlY3Rpb24nICkgKSB7XHJcblx0XHRcdFx0XHRcdGNvbnRlbnQucHVzaCggeyB0eXBlOiAnc2VjdGlvbicsIGRhdGE6IHRoaXMuc2VyaWFsaXplX3NlY3Rpb24oIGNoaWxkICkgfSApO1xyXG5cdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRpZiAoIGNoaWxkLmNsYXNzTGlzdC5jb250YWlucyggJ3dwYmNfYmZiX19maWVsZCcgKSApIHtcclxuXHRcdFx0XHRcdFx0aWYgKCBjaGlsZC5jbGFzc0xpc3QuY29udGFpbnMoICdpcy1pbnZhbGlkJyApICkge1xyXG5cdFx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRjb25zdCBmX2RhdGEgPSB0aGlzLl9ub3JtYWxpemVfZmllbGRfb3B0aW9uX3ZhbHVlcyhcblx0XHRcdFx0XHRcdFx0Q29yZS5XUEJDX0Zvcm1fQnVpbGRlcl9IZWxwZXIuZ2V0X2FsbF9kYXRhX2F0dHJpYnV0ZXMoIGNoaWxkIClcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHQvLyBEcm9wIGVwaGVtZXJhbC9lZGl0b3Itb25seSBmbGFnc1xyXG5cdFx0XHRcdFx0XHRbICd1aWQnLCAnZnJlc2gnLCAnYXV0b25hbWUnLCAnd2FzX2xvYWRlZCcsICduYW1lX3VzZXJfdG91Y2hlZCcgXVxyXG5cdFx0XHRcdFx0XHRcdC5mb3JFYWNoKCBrID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdGlmICggayBpbiBmX2RhdGEgKSBkZWxldGUgZl9kYXRhW2tdO1xyXG5cdFx0XHRcdFx0XHRcdH0gKTtcclxuXHRcdFx0XHRcdFx0Y29udGVudC5wdXNoKCB7IHR5cGU6ICdmaWVsZCcsIGRhdGE6IGZfZGF0YSB9ICk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSApO1xyXG5cdFx0XHRcdHBhZ2VzLnB1c2goIHsgcGFnZTogcGFnZV9pbmRleCArIDEsIGNvbnRlbnQgfSApO1xyXG5cdFx0XHR9ICk7XHJcblx0XHRcdHJldHVybiBwYWdlcztcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHNlY3Rpb25fZWxcclxuXHRcdCAqIEByZXR1cm5zIHt7aWQ6c3RyaW5nLGxhYmVsOnN0cmluZyxodG1sX2lkOnN0cmluZyxjc3NjbGFzczpzdHJpbmcsY29sX3N0eWxlczpzdHJpbmcsY29sdW1uczpBcnJheX19XHJcblx0XHQgKi9cclxuXHRcdHNlcmlhbGl6ZV9zZWN0aW9uKHNlY3Rpb25fZWwpIHtcclxuXHRcdFx0Y29uc3Qgcm93ID0gc2VjdGlvbl9lbC5xdWVyeVNlbGVjdG9yKCAnOnNjb3BlID4gLndwYmNfYmZiX19yb3cnICk7XHJcblxyXG5cdFx0XHQvLyBORVc6IHJlYWQgcGVyLWNvbHVtbiBzdHlsZXMgZnJvbSBkYXRhc2V0L2F0dHJpYnV0ZXMgKHVuZGVyc2NvcmUgJiBoeXBoZW4pXHJcblx0XHRcdHZhciBjb2xfc3R5bGVzX3JhdyA9XHJcblx0XHRcdFx0XHRzZWN0aW9uX2VsLmdldEF0dHJpYnV0ZSggJ2RhdGEtY29sX3N0eWxlcycgKSB8fFxyXG5cdFx0XHRcdFx0KHNlY3Rpb25fZWwuZGF0YXNldCA/IChzZWN0aW9uX2VsLmRhdGFzZXQuY29sX3N0eWxlcykgOiAnJykgfHxcclxuXHRcdFx0XHRcdCcnO1xyXG5cclxuXHRcdFx0Y29uc3QgYmFzZSA9IHtcclxuXHRcdFx0XHRpZCAgICAgICAgOiBzZWN0aW9uX2VsLmRhdGFzZXQuaWQsXHJcblx0XHRcdFx0bGFiZWwgICAgIDogc2VjdGlvbl9lbC5kYXRhc2V0LmxhYmVsIHx8ICcnLFxyXG5cdFx0XHRcdGh0bWxfaWQgICA6IHNlY3Rpb25fZWwuZGF0YXNldC5odG1sX2lkIHx8ICcnLFxyXG5cdFx0XHRcdGNzc2NsYXNzICA6IHNlY3Rpb25fZWwuZGF0YXNldC5jc3NjbGFzcyB8fCAnJyxcclxuXHRcdFx0XHRjb2xfc3R5bGVzOiBTdHJpbmcoIGNvbF9zdHlsZXNfcmF3ICkgICAgICAgIC8vIDwtLSBORVc6IGtlZXAgYXMgcmF3IEpTT04gc3RyaW5nXHJcblx0XHRcdH07XHJcblxyXG5cdFx0XHRpZiAoICFyb3cgKSB7XHJcblx0XHRcdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oIHt9LCBiYXNlLCB7IGNvbHVtbnM6IFtdIH0gKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Y29uc3QgY29sdW1ucyA9IFtdO1xyXG5cdFx0XHRyb3cucXVlcnlTZWxlY3RvckFsbCggJzpzY29wZSA+IC53cGJjX2JmYl9fY29sdW1uJyApLmZvckVhY2goIGZ1bmN0aW9uIChjb2wpIHtcclxuXHRcdFx0XHRjb25zdCB3aWR0aCA9IGNvbC5zdHlsZS5mbGV4QmFzaXMgfHwgJzEwMCUnO1xyXG5cdFx0XHRcdGNvbnN0IGl0ZW1zID0gW107XHJcblx0XHRcdFx0QXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbCggY29sLmNoaWxkcmVuLCBmdW5jdGlvbiAoY2hpbGQpIHtcclxuXHRcdFx0XHRcdGlmICggY2hpbGQuY2xhc3NMaXN0LmNvbnRhaW5zKCAnd3BiY19iZmJfX3NlY3Rpb24nICkgKSB7XHJcblx0XHRcdFx0XHRcdGl0ZW1zLnB1c2goIHsgdHlwZTogJ3NlY3Rpb24nLCBkYXRhOiB0aGlzLnNlcmlhbGl6ZV9zZWN0aW9uKCBjaGlsZCApIH0gKTtcclxuXHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKCBjaGlsZC5jbGFzc0xpc3QuY29udGFpbnMoICd3cGJjX2JmYl9fZmllbGQnICkgKSB7XHJcblx0XHRcdFx0XHRcdGlmICggY2hpbGQuY2xhc3NMaXN0LmNvbnRhaW5zKCAnaXMtaW52YWxpZCcgKSApIHtcclxuXHRcdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0Y29uc3QgZl9kYXRhID0gdGhpcy5fbm9ybWFsaXplX2ZpZWxkX29wdGlvbl92YWx1ZXMoXG5cdFx0XHRcdFx0XHRcdENvcmUuV1BCQ19Gb3JtX0J1aWxkZXJfSGVscGVyLmdldF9hbGxfZGF0YV9hdHRyaWJ1dGVzKCBjaGlsZCApXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0WyAndWlkJywgJ2ZyZXNoJywgJ2F1dG9uYW1lJywgJ3dhc19sb2FkZWQnLCAnbmFtZV91c2VyX3RvdWNoZWQnIF0uZm9yRWFjaCggZnVuY3Rpb24gKGspIHtcclxuXHRcdFx0XHRcdFx0XHRpZiAoIGsgaW4gZl9kYXRhICkge1xyXG5cdFx0XHRcdFx0XHRcdFx0ZGVsZXRlIGZfZGF0YVtrXTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH0gKTtcclxuXHRcdFx0XHRcdFx0aXRlbXMucHVzaCggeyB0eXBlOiAnZmllbGQnLCBkYXRhOiBmX2RhdGEgfSApO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0uYmluZCggdGhpcyApICk7XHJcblx0XHRcdFx0Y29sdW1ucy5wdXNoKCB7IHdpZHRoOiB3aWR0aCwgaXRlbXM6IGl0ZW1zIH0gKTtcclxuXHRcdFx0fS5iaW5kKCB0aGlzICkgKTtcclxuXHJcblx0XHRcdC8vIENsYW1wIHBlcnNpc3RlZCBjb2xfc3R5bGVzIHRvIHRoZSBhY3R1YWwgbnVtYmVyIG9mIGNvbHVtbnMgb24gU2F2ZS5cclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRjb25zdCBjb2xDb3VudCA9IGNvbHVtbnMubGVuZ3RoO1xyXG5cdFx0XHRcdGNvbnN0IHJhdyAgICAgID0gU3RyaW5nKCBjb2xfc3R5bGVzX3JhdyB8fCAnJyApLnRyaW0oKTtcclxuXHJcblx0XHRcdFx0aWYgKCByYXcgKSB7XHJcblx0XHRcdFx0XHRsZXQgYXJyID0gW107XHJcblx0XHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0XHRjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKCByYXcgKTtcclxuXHRcdFx0XHRcdFx0YXJyICAgICAgICAgID0gQXJyYXkuaXNBcnJheSggcGFyc2VkICkgPyBwYXJzZWQgOiAocGFyc2VkICYmIEFycmF5LmlzQXJyYXkoIHBhcnNlZC5jb2x1bW5zICkgPyBwYXJzZWQuY29sdW1ucyA6IFtdKTtcclxuXHRcdFx0XHRcdH0gY2F0Y2ggKCBfZSApIHtcclxuXHRcdFx0XHRcdFx0YXJyID0gW107XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0aWYgKCBjb2xDb3VudCA8PSAwICkge1xyXG5cdFx0XHRcdFx0XHRiYXNlLmNvbF9zdHlsZXMgPSAnW10nO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0aWYgKCBhcnIubGVuZ3RoID4gY29sQ291bnQgKSBhcnIubGVuZ3RoID0gY29sQ291bnQ7XHJcblx0XHRcdFx0XHRcdHdoaWxlICggYXJyLmxlbmd0aCA8IGNvbENvdW50ICkgYXJyLnB1c2goIHt9ICk7XHJcblx0XHRcdFx0XHRcdGJhc2UuY29sX3N0eWxlcyA9IEpTT04uc3RyaW5naWZ5KCBhcnIgKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0YmFzZS5jb2xfc3R5bGVzID0gJyc7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGNhdGNoICggX2UgKSB7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHJldHVybiBPYmplY3QuYXNzaWduKCB7fSwgYmFzZSwgeyBjb2x1bW5zOiBjb2x1bW5zIH0gKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEBwYXJhbSB7QXJyYXl9IHN0cnVjdHVyZVxyXG5cdFx0ICogQHBhcmFtIHt7ZGVmZXJJZlR5cGluZz86IGJvb2xlYW59fSBbb3B0cyA9IHt9XVxyXG5cdFx0ICovXHJcblx0XHRkZXNlcmlhbGl6ZShzdHJ1Y3R1cmUsIHsgZGVmZXJJZlR5cGluZyA9IHRydWUgfSA9IHt9KSB7XHJcblx0XHRcdGNvbnN0IGIgPSB0aGlzLmJ1aWxkZXI7XHJcblx0XHRcdGlmICggZGVmZXJJZlR5cGluZyAmJiB0aGlzLl9pc190eXBpbmdfaW5faW5zcGVjdG9yKCkgKSB7XHJcblx0XHRcdFx0Y2xlYXJUaW1lb3V0KCB0aGlzLl9kZWZlcl90aW1lciApO1xyXG5cdFx0XHRcdHRoaXMuX2RlZmVyX3RpbWVyID0gc2V0VGltZW91dCggKCkgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy5kZXNlcmlhbGl6ZSggc3RydWN0dXJlLCB7IGRlZmVySWZUeXBpbmc6IGZhbHNlIH0gKTtcclxuXHRcdFx0XHR9LCAxNTAgKTtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0Yi5wYWdlc19jb250YWluZXIuaW5uZXJIVE1MID0gJyc7XHJcblx0XHRcdGIucGFnZV9jb3VudGVyICAgICAgICAgICAgICA9IDA7XHJcblx0XHRcdChzdHJ1Y3R1cmUgfHwgW10pLmZvckVhY2goIChwYWdlX2RhdGEpID0+IHtcclxuXHRcdFx0XHRjb25zdCBwYWdlX2VsICAgICAgICAgICAgICAgPSBiLnBhZ2VzX3NlY3Rpb25zLmFkZF9wYWdlKCB7IHNjcm9sbDogZmFsc2UgfSApO1xyXG5cdFx0XHRcdGNvbnN0IHNlY3Rpb25fY29udGFpbmVyICAgICA9IHBhZ2VfZWwucXVlcnlTZWxlY3RvciggJy53cGJjX2JmYl9fZm9ybV9wcmV2aWV3X3NlY3Rpb25fY29udGFpbmVyJyApO1xyXG5cdFx0XHRcdHNlY3Rpb25fY29udGFpbmVyLmlubmVySFRNTCA9ICcnO1xyXG5cdFx0XHRcdGIuaW5pdF9zZWN0aW9uX3NvcnRhYmxlPy4oIHNlY3Rpb25fY29udGFpbmVyICk7XHJcblx0XHRcdFx0KHBhZ2VfZGF0YS5jb250ZW50IHx8IFtdKS5mb3JFYWNoKCAoaXRlbSkgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKCBpdGVtLnR5cGUgPT09ICdzZWN0aW9uJyApIHtcclxuXHRcdFx0XHRcdFx0Ly8gTm93IHJldHVybnMgdGhlIGVsZW1lbnQ7IGF0dHJpYnV0ZXMgKGluY2wuIGNvbF9zdHlsZXMpIGFyZSBhcHBsaWVkIGluc2lkZSByZWJ1aWxkLlxyXG5cdFx0XHRcdFx0XHRiLnBhZ2VzX3NlY3Rpb25zLnJlYnVpbGRfc2VjdGlvbiggaXRlbS5kYXRhLCBzZWN0aW9uX2NvbnRhaW5lciApO1xyXG5cdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRpZiAoIGl0ZW0udHlwZSA9PT0gJ2ZpZWxkJyApIHtcclxuXHRcdFx0XHRcdFx0Y29uc3QgZWwgPSBiLmJ1aWxkX2ZpZWxkKCBpdGVtLmRhdGEgKTtcclxuXHRcdFx0XHRcdFx0aWYgKCBlbCApIHtcclxuXHRcdFx0XHRcdFx0XHRzZWN0aW9uX2NvbnRhaW5lci5hcHBlbmRDaGlsZCggZWwgKTtcclxuXHRcdFx0XHRcdFx0XHRiLnRyaWdnZXJfZmllbGRfZHJvcF9jYWxsYmFjayggZWwsICdsb2FkJyApO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSApO1xyXG5cdFx0XHR9ICk7XHJcblx0XHRcdGIudXNhZ2U/LnVwZGF0ZV9wYWxldHRlX3VpPy4oKTtcclxuXHRcdFx0Yi5idXMuZW1pdCggQ29yZS5XUEJDX0JGQl9FdmVudHMuU1RSVUNUVVJFX0xPQURFRCwgeyBzdHJ1Y3R1cmUgfSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdF9ub3JtYWxpemVfaWRzKCkge1xyXG5cdFx0XHRjb25zdCBiID0gdGhpcy5idWlsZGVyO1xyXG5cdFx0XHRiLnBhZ2VzX2NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCAnLndwYmNfYmZiX19wYW5lbC0tcHJldmlldyAud3BiY19iZmJfX2ZpZWxkOm5vdCguaXMtaW52YWxpZCknICkuZm9yRWFjaCggKGVsKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgZGF0YSA9IENvcmUuV1BCQ19Gb3JtX0J1aWxkZXJfSGVscGVyLmdldF9hbGxfZGF0YV9hdHRyaWJ1dGVzKCBlbCApO1xyXG5cdFx0XHRcdGNvbnN0IHdhbnQgPSBDb3JlLldQQkNfQkZCX1Nhbml0aXplLnNhbml0aXplX2h0bWxfaWQoIGRhdGEuaWQgfHwgJycgKSB8fCAnZmllbGQnO1xyXG5cdFx0XHRcdGNvbnN0IHVuaXEgPSBiLmlkLmVuc3VyZV91bmlxdWVfZmllbGRfaWQoIHdhbnQsIGVsICk7XHJcblx0XHRcdFx0aWYgKCBkYXRhLmlkICE9PSB1bmlxICkge1xyXG5cdFx0XHRcdFx0ZWwuc2V0QXR0cmlidXRlKCAnZGF0YS1pZCcsIHVuaXEgKTtcclxuXHRcdFx0XHRcdGlmICggYi5wcmV2aWV3X21vZGUgKSB7XHJcblx0XHRcdFx0XHRcdGIucmVuZGVyX3ByZXZpZXcoIGVsICk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9ICk7XHJcblx0XHR9XHJcblxyXG5cdFx0X25vcm1hbGl6ZV9uYW1lcygpIHtcclxuXHRcdFx0Y29uc3QgYiA9IHRoaXMuYnVpbGRlcjtcclxuXHRcdFx0Yi5wYWdlc19jb250YWluZXIucXVlcnlTZWxlY3RvckFsbCggJy53cGJjX2JmYl9fcGFuZWwtLXByZXZpZXcgLndwYmNfYmZiX19maWVsZDpub3QoLmlzLWludmFsaWQpJyApLmZvckVhY2goIChlbCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IGRhdGEgPSBDb3JlLldQQkNfRm9ybV9CdWlsZGVyX0hlbHBlci5nZXRfYWxsX2RhdGFfYXR0cmlidXRlcyggZWwgKTtcclxuXHRcdFx0XHRjb25zdCBiYXNlID0gQ29yZS5XUEJDX0JGQl9TYW5pdGl6ZS5zYW5pdGl6ZV9odG1sX25hbWUoIChkYXRhLm5hbWUgIT0gbnVsbCkgPyBkYXRhLm5hbWUgOiBkYXRhLmlkICkgfHwgJ2ZpZWxkJztcclxuXHRcdFx0XHRjb25zdCB1bmlxID0gYi5pZC5lbnN1cmVfdW5pcXVlX2ZpZWxkX25hbWUoIGJhc2UsIGVsICk7XHJcblx0XHRcdFx0aWYgKCBkYXRhLm5hbWUgIT09IHVuaXEgKSB7XHJcblx0XHRcdFx0XHRlbC5zZXRBdHRyaWJ1dGUoICdkYXRhLW5hbWUnLCB1bmlxICk7XHJcblx0XHRcdFx0XHRpZiAoIGIucHJldmlld19tb2RlICkge1xyXG5cdFx0XHRcdFx0XHRiLnJlbmRlcl9wcmV2aWV3KCBlbCApO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKiBAcmV0dXJucyB7Ym9vbGVhbn0gKi9cclxuXHRcdF9pc190eXBpbmdfaW5faW5zcGVjdG9yKCkge1xyXG5cdFx0XHRjb25zdCBpbnMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ3dwYmNfYmZiX19pbnNwZWN0b3InICk7XHJcblx0XHRcdHJldHVybiAhIShpbnMgJiYgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAmJiBpbnMuY29udGFpbnMoIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgKSk7XHJcblx0XHR9XHJcblx0fTtcclxuXHJcblx0LyoqXHJcblx0ICogTWluaW1hbCwgc3RhbmRhbG9uZSBndWFyZCB0aGF0IGVuZm9yY2VzIHBlci1jb2x1bW4gbWluIHdpZHRocyBiYXNlZCBvbiBmaWVsZHMnIGRhdGEtbWluX3dpZHRoLlxyXG5cdCAqXHJcblx0ICogQHR5cGUge1VJLldQQkNfQkZCX01pbl9XaWR0aF9HdWFyZH1cclxuXHQgKi9cclxuXHRVSS5XUEJDX0JGQl9NaW5fV2lkdGhfR3VhcmQgPSBjbGFzcyBleHRlbmRzIFVJLldQQkNfQkZCX01vZHVsZSB7XHJcblxyXG5cdFx0Y29uc3RydWN0b3IoYnVpbGRlcikge1xyXG5cdFx0XHRzdXBlciggYnVpbGRlciApO1xyXG5cdFx0XHR0aGlzLl9vbl9maWVsZF9hZGQgICAgICAgID0gdGhpcy5fb25fZmllbGRfYWRkLmJpbmQoIHRoaXMgKTtcclxuXHRcdFx0dGhpcy5fb25fZmllbGRfcmVtb3ZlICAgICA9IHRoaXMuX29uX2ZpZWxkX3JlbW92ZS5iaW5kKCB0aGlzICk7XHJcblx0XHRcdHRoaXMuX29uX3N0cnVjdHVyZV9sb2FkZWQgPSB0aGlzLl9vbl9zdHJ1Y3R1cmVfbG9hZGVkLmJpbmQoIHRoaXMgKTtcclxuXHRcdFx0dGhpcy5fb25fc3RydWN0dXJlX2NoYW5nZSA9IHRoaXMuX29uX3N0cnVjdHVyZV9jaGFuZ2UuYmluZCggdGhpcyApO1xyXG5cdFx0XHR0aGlzLl9vbl93aW5kb3dfcmVzaXplICAgID0gdGhpcy5fb25fd2luZG93X3Jlc2l6ZS5iaW5kKCB0aGlzICk7XHJcblxyXG5cdFx0XHR0aGlzLl9wZW5kaW5nX3Jvd3MgPSBuZXcgU2V0KCk7XHJcblx0XHRcdHRoaXMuX3BlbmRpbmdfYWxsICA9IGZhbHNlO1xyXG5cdFx0XHR0aGlzLl9yYWZfaWQgICAgICAgPSAwO1xyXG5cdFx0fVxyXG5cclxuXHRcdGluaXQoKSB7XHJcblx0XHRcdGNvbnN0IEVWID0gQ29yZS5XUEJDX0JGQl9FdmVudHM7XHJcblx0XHRcdHRoaXMuYnVpbGRlcj8uYnVzPy5vbj8uKCBFVi5GSUVMRF9BREQsIHRoaXMuX29uX2ZpZWxkX2FkZCApO1xyXG5cdFx0XHR0aGlzLmJ1aWxkZXI/LmJ1cz8ub24/LiggRVYuRklFTERfUkVNT1ZFLCB0aGlzLl9vbl9maWVsZF9yZW1vdmUgKTtcclxuXHRcdFx0dGhpcy5idWlsZGVyPy5idXM/Lm9uPy4oIEVWLlNUUlVDVFVSRV9MT0FERUQsIHRoaXMuX29uX3N0cnVjdHVyZV9sb2FkZWQgKTtcclxuXHRcdFx0Ly8gUmVmcmVzaCBzZWxlY3RpdmVseSBvbiBzdHJ1Y3R1cmUgY2hhbmdlIChOT1Qgb24gZXZlcnkgcHJvcCBpbnB1dCkuXHJcblx0XHRcdHRoaXMuYnVpbGRlcj8uYnVzPy5vbj8uKCBFVi5TVFJVQ1RVUkVfQ0hBTkdFLCB0aGlzLl9vbl9zdHJ1Y3R1cmVfY2hhbmdlICk7XHJcblxyXG5cdFx0XHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciggJ3Jlc2l6ZScsIHRoaXMuX29uX3dpbmRvd19yZXNpemUsIHsgcGFzc2l2ZTogdHJ1ZSB9ICk7XHJcblx0XHRcdHRoaXMuX3NjaGVkdWxlX3JlZnJlc2hfYWxsKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0ZGVzdHJveSgpIHtcclxuXHRcdFx0Y29uc3QgRVYgPSBDb3JlLldQQkNfQkZCX0V2ZW50cztcclxuXHRcdFx0dGhpcy5idWlsZGVyPy5idXM/Lm9mZj8uKCBFVi5GSUVMRF9BREQsIHRoaXMuX29uX2ZpZWxkX2FkZCApO1xyXG5cdFx0XHR0aGlzLmJ1aWxkZXI/LmJ1cz8ub2ZmPy4oIEVWLkZJRUxEX1JFTU9WRSwgdGhpcy5fb25fZmllbGRfcmVtb3ZlICk7XHJcblx0XHRcdHRoaXMuYnVpbGRlcj8uYnVzPy5vZmY/LiggRVYuU1RSVUNUVVJFX0xPQURFRCwgdGhpcy5fb25fc3RydWN0dXJlX2xvYWRlZCApO1xyXG5cdFx0XHR0aGlzLmJ1aWxkZXI/LmJ1cz8ub2ZmPy4oIEVWLlNUUlVDVFVSRV9DSEFOR0UsIHRoaXMuX29uX3N0cnVjdHVyZV9jaGFuZ2UgKTtcclxuXHRcdFx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoICdyZXNpemUnLCB0aGlzLl9vbl93aW5kb3dfcmVzaXplICk7XHJcblx0XHR9XHJcblxyXG5cdFx0X29uX2ZpZWxkX2FkZChlKSB7XHJcblx0XHRcdHRoaXMuX3NjaGVkdWxlX3JlZnJlc2hfYWxsKCk7XHJcblx0XHRcdC8vIGlmIHlvdSByZWFsbHkgd2FudCB0byBiZSBtaW5pbWFsIHdvcmsgaGVyZSwga2VlcCB5b3VyIHJvdy1vbmx5IHZlcnNpb24uXHJcblx0XHR9XHJcblxyXG5cdFx0X29uX2ZpZWxkX3JlbW92ZShlKSB7XHJcblx0XHRcdGNvbnN0IHNyY19lbCA9IGU/LmRldGFpbD8uZWwgfHwgbnVsbDtcclxuXHRcdFx0Y29uc3Qgcm93ICAgID0gKHNyY19lbCAmJiBzcmNfZWwuY2xvc2VzdCkgPyBzcmNfZWwuY2xvc2VzdCggJy53cGJjX2JmYl9fcm93JyApIDogbnVsbDtcclxuXHRcdFx0aWYgKCByb3cgKSB7XHJcblx0XHRcdFx0dGhpcy5fc2NoZWR1bGVfcmVmcmVzaF9yb3coIHJvdyApO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMuX3NjaGVkdWxlX3JlZnJlc2hfYWxsKCk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRfb25fc3RydWN0dXJlX2xvYWRlZCgpIHtcclxuXHRcdFx0dGhpcy5fc2NoZWR1bGVfcmVmcmVzaF9hbGwoKTtcclxuXHRcdH1cclxuXHJcblx0XHRfb25fc3RydWN0dXJlX2NoYW5nZShlKSB7XHJcblx0XHRcdGNvbnN0IHJlYXNvbiA9IGU/LmRldGFpbD8ucmVhc29uIHx8ICcnO1xyXG5cdFx0XHRjb25zdCBrZXkgICAgPSBlPy5kZXRhaWw/LmtleSB8fCAnJztcclxuXHJcblx0XHRcdC8vIElnbm9yZSBub2lzeSBwcm9wIGNoYW5nZXMgdGhhdCBkb24ndCBhZmZlY3QgbWluIHdpZHRocy5cclxuXHRcdFx0aWYgKCByZWFzb24gPT09ICdwcm9wLWNoYW5nZScgJiYga2V5ICE9PSAnbWluX3dpZHRoJyApIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGNvbnN0IGVsICA9IGU/LmRldGFpbD8uZWwgfHwgbnVsbDtcclxuXHRcdFx0Y29uc3Qgcm93ID0gZWw/LmNsb3Nlc3Q/LiggJy53cGJjX2JmYl9fcm93JyApIHx8IG51bGw7XHJcblx0XHRcdGlmICggcm93ICkge1xyXG5cdFx0XHRcdHRoaXMuX3NjaGVkdWxlX3JlZnJlc2hfcm93KCByb3cgKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHR0aGlzLl9zY2hlZHVsZV9yZWZyZXNoX2FsbCgpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0X29uX3dpbmRvd19yZXNpemUoKSB7XHJcblx0XHRcdHRoaXMuX3NjaGVkdWxlX3JlZnJlc2hfYWxsKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0X3NjaGVkdWxlX3JlZnJlc2hfcm93KHJvd19lbCkge1xyXG5cdFx0XHRpZiAoICFyb3dfZWwgKSByZXR1cm47XHJcblx0XHRcdHRoaXMuX3BlbmRpbmdfcm93cy5hZGQoIHJvd19lbCApO1xyXG5cdFx0XHR0aGlzLl9raWNrX3JhZigpO1xyXG5cdFx0fVxyXG5cclxuXHRcdF9zY2hlZHVsZV9yZWZyZXNoX2FsbCgpIHtcclxuXHRcdFx0dGhpcy5fcGVuZGluZ19hbGwgPSB0cnVlO1xyXG5cdFx0XHR0aGlzLl9wZW5kaW5nX3Jvd3MuY2xlYXIoKTtcclxuXHRcdFx0dGhpcy5fa2lja19yYWYoKTtcclxuXHRcdH1cclxuXHJcblx0XHRfa2lja19yYWYoKSB7XHJcblx0XHRcdGlmICggdGhpcy5fcmFmX2lkICkgcmV0dXJuO1xyXG5cdFx0XHR0aGlzLl9yYWZfaWQgPSAod2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSB8fCBzZXRUaW1lb3V0KSggKCkgPT4ge1xyXG5cdFx0XHRcdHRoaXMuX3JhZl9pZCA9IDA7XHJcblx0XHRcdFx0aWYgKCB0aGlzLl9wZW5kaW5nX2FsbCApIHtcclxuXHRcdFx0XHRcdHRoaXMuX3BlbmRpbmdfYWxsID0gZmFsc2U7XHJcblx0XHRcdFx0XHR0aGlzLnJlZnJlc2hfYWxsKCk7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGNvbnN0IHJvd3MgPSBBcnJheS5mcm9tKCB0aGlzLl9wZW5kaW5nX3Jvd3MgKTtcclxuXHRcdFx0XHR0aGlzLl9wZW5kaW5nX3Jvd3MuY2xlYXIoKTtcclxuXHRcdFx0XHRyb3dzLmZvckVhY2goIChyKSA9PiB0aGlzLnJlZnJlc2hfcm93KCByICkgKTtcclxuXHRcdFx0fSwgMCApO1xyXG5cdFx0fVxyXG5cclxuXHJcblx0XHRyZWZyZXNoX2FsbCgpIHtcclxuXHRcdFx0dGhpcy5idWlsZGVyPy5wYWdlc19jb250YWluZXJcclxuXHRcdFx0XHQ/LnF1ZXJ5U2VsZWN0b3JBbGw/LiggJy53cGJjX2JmYl9fcm93JyApXHJcblx0XHRcdFx0Py5mb3JFYWNoPy4oIChyb3cpID0+IHRoaXMucmVmcmVzaF9yb3coIHJvdyApICk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmVmcmVzaF9yb3cocm93X2VsKSB7XHJcblx0XHRcdGlmICggIXJvd19lbCApIHJldHVybjtcclxuXHJcblx0XHRcdGNvbnN0IGNvbHMgPSByb3dfZWwucXVlcnlTZWxlY3RvckFsbCggJzpzY29wZSA+IC53cGJjX2JmYl9fY29sdW1uJyApO1xyXG5cclxuXHRcdFx0Ly8gMSkgUmVjYWxjdWxhdGUgZWFjaCBjb2x1bW7igJlzIHJlcXVpcmVkIG1pbiBweCBhbmQgd3JpdGUgaXQgdG8gdGhlIENTUyB2YXIuXHJcblx0XHRcdGNvbHMuZm9yRWFjaCggKGNvbCkgPT4gdGhpcy5hcHBseV9jb2xfbWluKCBjb2wgKSApO1xyXG5cclxuXHRcdFx0Ly8gMikgRW5mb3JjZSBpdCBhdCB0aGUgQ1NTIGxldmVsIHJpZ2h0IGF3YXkgc28gbGF5b3V0IGNhbuKAmXQgcmVuZGVyIG5hcnJvd2VyLlxyXG5cdFx0XHRjb2xzLmZvckVhY2goIChjb2wpID0+IHtcclxuXHRcdFx0XHRjb25zdCBweCAgICAgICAgICAgPSBwYXJzZUZsb2F0KCBnZXRDb21wdXRlZFN0eWxlKCBjb2wgKS5nZXRQcm9wZXJ0eVZhbHVlKCAnLS13cGJjLWNvbC1taW4nICkgfHwgJzAnICkgfHwgMDtcclxuXHRcdFx0XHRjb2wuc3R5bGUubWluV2lkdGggPSBweCA+IDAgPyBNYXRoLnJvdW5kKCBweCApICsgJ3B4JyA6ICcnO1xyXG5cdFx0XHR9ICk7XHJcblxyXG5cdFx0XHQvLyAzKSBOb3JtYWxpemUgY3VycmVudCBiYXNlcyBzbyB0aGUgcm93IHJlc3BlY3RzIGFsbCBtaW5zIHdpdGhvdXQgb3ZlcmZsb3cuXHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0Y29uc3QgYiAgID0gdGhpcy5idWlsZGVyO1xyXG5cdFx0XHRcdGNvbnN0IGdwICA9IGIuY29sX2dhcF9wZXJjZW50O1xyXG5cdFx0XHRcdGNvbnN0IGVmZiA9IGIubGF5b3V0LmNvbXB1dGVfZWZmZWN0aXZlX2Jhc2VzX2Zyb21fcm93KCByb3dfZWwsIGdwICk7ICAvLyB7IGJhc2VzLCBhdmFpbGFibGUgfVxyXG5cdFx0XHRcdC8vIFJlLWZpdCAqY3VycmVudCogYmFzZXMgYWdhaW5zdCBtaW5zIChzYW1lIGFsZ29yaXRobSBsYXlvdXQgY2hpcHMgdXNlKS5cclxuXHRcdFx0XHRjb25zdCBmaXR0ZWQgPSBVSS5XUEJDX0JGQl9MYXlvdXRfQ2hpcHMuX2ZpdF93ZWlnaHRzX3Jlc3BlY3RpbmdfbWluKCBiLCByb3dfZWwsIGVmZi5iYXNlcyApO1xyXG5cdFx0XHRcdGlmICggQXJyYXkuaXNBcnJheSggZml0dGVkICkgKSB7XHJcblx0XHRcdFx0XHRjb25zdCBjaGFuZ2VkID0gZml0dGVkLnNvbWUoICh2LCBpKSA9PiBNYXRoLmFicyggdiAtIGVmZi5iYXNlc1tpXSApID4gMC4wMSApO1xyXG5cdFx0XHRcdFx0aWYgKCBjaGFuZ2VkICkge1xyXG5cdFx0XHRcdFx0XHRiLmxheW91dC5hcHBseV9iYXNlc190b19yb3coIHJvd19lbCwgZml0dGVkICk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGNhdGNoICggZSApIHtcclxuXHRcdFx0XHR3Ll93cGJjPy5kZXY/LmVycm9yPy4oICdXUEJDX0JGQl9NaW5fV2lkdGhfR3VhcmQgLSByZWZyZXNoX3JvdycsIGUgKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGFwcGx5X2NvbF9taW4oY29sX2VsKSB7XHJcblx0XHRcdGlmICggIWNvbF9lbCApIHJldHVybjtcclxuXHRcdFx0bGV0IG1heF9weCAgICA9IDA7XHJcblx0XHRcdGNvbnN0IGNvbFJlY3QgPSBjb2xfZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcblx0XHRcdGNvbF9lbC5xdWVyeVNlbGVjdG9yQWxsKCAnOnNjb3BlID4gLndwYmNfYmZiX19maWVsZCcgKS5mb3JFYWNoKCAoZmllbGQpID0+IHtcclxuXHRcdFx0XHRjb25zdCByYXcgPSBmaWVsZC5nZXRBdHRyaWJ1dGUoICdkYXRhLW1pbl93aWR0aCcgKTtcclxuXHRcdFx0XHRsZXQgcHggICAgPSAwO1xyXG5cdFx0XHRcdGlmICggcmF3ICkge1xyXG5cdFx0XHRcdFx0Y29uc3QgcyA9IFN0cmluZyggcmF3ICkudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcblx0XHRcdFx0XHRpZiAoIHMuZW5kc1dpdGgoICclJyApICkge1xyXG5cdFx0XHRcdFx0XHRjb25zdCBuID0gcGFyc2VGbG9hdCggcyApO1xyXG5cdFx0XHRcdFx0XHRpZiAoIE51bWJlci5pc0Zpbml0ZSggbiApICYmIGNvbFJlY3Qud2lkdGggPiAwICkge1xyXG5cdFx0XHRcdFx0XHRcdHB4ID0gKG4gLyAxMDApICogY29sUmVjdC53aWR0aDtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRweCA9IDA7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdHB4ID0gdGhpcy5wYXJzZV9sZW5fcHgoIHMgKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0Y29uc3QgY3MgPSBnZXRDb21wdXRlZFN0eWxlKCBmaWVsZCApO1xyXG5cdFx0XHRcdFx0cHggICAgICAgPSBwYXJzZUZsb2F0KCBjcy5taW5XaWR0aCB8fCAnMCcgKSB8fCAwO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAoIHB4ID4gbWF4X3B4ICkgbWF4X3B4ID0gcHg7XHJcblx0XHRcdH0gKTtcclxuXHRcdFx0Y29sX2VsLnN0eWxlLnNldFByb3BlcnR5KCAnLS13cGJjLWNvbC1taW4nLCBtYXhfcHggPiAwID8gTWF0aC5yb3VuZCggbWF4X3B4ICkgKyAncHgnIDogJzBweCcgKTtcclxuXHRcdH1cclxuXHJcblx0XHRwYXJzZV9sZW5fcHgodmFsdWUpIHtcclxuXHRcdFx0aWYgKCB2YWx1ZSA9PSBudWxsICkgcmV0dXJuIDA7XHJcblx0XHRcdGNvbnN0IHMgPSBTdHJpbmcoIHZhbHVlICkudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcblx0XHRcdGlmICggcyA9PT0gJycgKSByZXR1cm4gMDtcclxuXHRcdFx0aWYgKCBzLmVuZHNXaXRoKCAncHgnICkgKSB7XHJcblx0XHRcdFx0Y29uc3QgbiA9IHBhcnNlRmxvYXQoIHMgKTtcclxuXHRcdFx0XHRyZXR1cm4gTnVtYmVyLmlzRmluaXRlKCBuICkgPyBuIDogMDtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoIHMuZW5kc1dpdGgoICdyZW0nICkgfHwgcy5lbmRzV2l0aCggJ2VtJyApICkge1xyXG5cdFx0XHRcdGNvbnN0IG4gICAgPSBwYXJzZUZsb2F0KCBzICk7XHJcblx0XHRcdFx0Y29uc3QgYmFzZSA9IHBhcnNlRmxvYXQoIGdldENvbXB1dGVkU3R5bGUoIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCApLmZvbnRTaXplICkgfHwgMTY7XHJcblx0XHRcdFx0cmV0dXJuIE51bWJlci5pc0Zpbml0ZSggbiApID8gbiAqIGJhc2UgOiAwO1xyXG5cdFx0XHR9XHJcblx0XHRcdGNvbnN0IG4gPSBwYXJzZUZsb2F0KCBzICk7XHJcblx0XHRcdHJldHVybiBOdW1iZXIuaXNGaW5pdGUoIG4gKSA/IG4gOiAwO1xyXG5cdFx0fVxyXG5cdH07XHJcblxyXG5cdC8qKlxyXG5cdCAqIFdQQkNfQkZCX1RvZ2dsZV9Ob3JtYWxpemVyXHJcblx0ICpcclxuXHQgKiBDb252ZXJ0cyBwbGFpbiBjaGVja2JveGVzIGludG8gdG9nZ2xlIFVJOlxyXG5cdCAqIDxkaXYgY2xhc3M9XCJpbnNwZWN0b3JfX2NvbnRyb2wgd3BiY191aV9fdG9nZ2xlXCI+XHJcblx0ICogICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgaWQ9XCJ7dW5pcXVlfVwiIGRhdGEtaW5zcGVjdG9yLWtleT1cIi4uLlwiIGNsYXNzPVwiaW5zcGVjdG9yX19pbnB1dFwiIHJvbGU9XCJzd2l0Y2hcIlxyXG5cdCAqIGFyaWEtY2hlY2tlZD1cInRydWV8ZmFsc2VcIj5cclxuXHQgKiAgIDxsYWJlbCBjbGFzcz1cIndwYmNfdWlfX3RvZ2dsZV9pY29uXCIgIGZvcj1cInt1bmlxdWV9XCI+PC9sYWJlbD5cclxuXHQgKiAgIDxsYWJlbCBjbGFzcz1cIndwYmNfdWlfX3RvZ2dsZV9sYWJlbFwiIGZvcj1cInt1bmlxdWV9XCI+TGFiZWw8L2xhYmVsPlxyXG5cdCAqIDwvZGl2PlxyXG5cdCAqXHJcblx0ICogLSBTa2lwcyBpbnB1dHMgYWxyZWFkeSBpbnNpZGUgYC53cGJjX3VpX190b2dnbGVgLlxyXG5cdCAqIC0gUmV1c2VzIGFuIGV4aXN0aW5nIDxsYWJlbCBmb3I9XCIuLi5cIj4gdGV4dCBpZiBwcmVzZW50OyBvdGhlcndpc2UgZmFsbHMgYmFjayB0byBuZWFyYnkgbGFiZWxzIG9yIGF0dHJpYnV0ZXMuXHJcblx0ICogLSBBdXRvLWdlbmVyYXRlcyBhIHVuaXF1ZSBpZCB3aGVuIGFic2VudC5cclxuXHQgKi9cclxuXHRVSS5XUEJDX0JGQl9Ub2dnbGVfTm9ybWFsaXplciA9IGNsYXNzIHtcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFVwZ3JhZGUgYWxsIHJhdyBjaGVja2JveGVzIGluIGEgY29udGFpbmVyIHRvIHRvZ2dsZXMuXHJcblx0XHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSByb290X2VsXHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyB1cGdyYWRlX2NoZWNrYm94ZXNfaW4ocm9vdF9lbCkge1xyXG5cclxuXHRcdFx0aWYgKCAhcm9vdF9lbCB8fCAhcm9vdF9lbC5xdWVyeVNlbGVjdG9yQWxsICkge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0dmFyIGlucHV0cyA9IHJvb3RfZWwucXVlcnlTZWxlY3RvckFsbCggJ2lucHV0W3R5cGU9XCJjaGVja2JveFwiXScgKTtcclxuXHRcdFx0aWYgKCAhaW5wdXRzLmxlbmd0aCApIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoIGlucHV0cywgZnVuY3Rpb24gKGlucHV0KSB7XHJcblxyXG5cdFx0XHRcdC8vIDEpIFNraXAgaWYgYWxyZWFkeSBpbnNpZGUgdG9nZ2xlIHdyYXBwZXIuXHJcblx0XHRcdFx0aWYgKCBpbnB1dC5jbG9zZXN0KCAnLndwYmNfdWlfX3RvZ2dsZScgKSApIHtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Ly8gU2tpcCByb3dzIC8gd2hlcmUgaW5wdXQgY2hlY2tib3ggZXhwbGljaXRseSBtYXJrZWQgd2l0aCAgYXR0cmlidXRlICdkYXRhLXdwYmMtdWktbm8tdG9nZ2xlJy5cclxuXHRcdFx0XHRpZiAoIGlucHV0Lmhhc0F0dHJpYnV0ZSggJ2RhdGEtd3BiYy11aS1uby10b2dnbGUnICkgKSB7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyAyKSBFbnN1cmUgdW5pcXVlIGlkOyBwcmVmZXIgZXhpc3RpbmcuXHJcblx0XHRcdFx0dmFyIGlucHV0X2lkID0gaW5wdXQuZ2V0QXR0cmlidXRlKCAnaWQnICk7XHJcblx0XHRcdFx0aWYgKCAhaW5wdXRfaWQgKSB7XHJcblx0XHRcdFx0XHR2YXIga2V5ICA9IChpbnB1dC5kYXRhc2V0ICYmIGlucHV0LmRhdGFzZXQuaW5zcGVjdG9yS2V5KSA/IFN0cmluZyggaW5wdXQuZGF0YXNldC5pbnNwZWN0b3JLZXkgKSA6ICdvcHQnO1xyXG5cdFx0XHRcdFx0aW5wdXRfaWQgPSBVSS5XUEJDX0JGQl9Ub2dnbGVfTm9ybWFsaXplci5nZW5lcmF0ZV91bmlxdWVfaWQoICd3cGJjX2luc19hdXRvXycgKyBrZXkgKyAnXycgKTtcclxuXHRcdFx0XHRcdGlucHV0LnNldEF0dHJpYnV0ZSggJ2lkJywgaW5wdXRfaWQgKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIDMpIEZpbmQgYmVzdCBsYWJlbCB0ZXh0LlxyXG5cdFx0XHRcdHZhciBsYWJlbF90ZXh0ID0gVUkuV1BCQ19CRkJfVG9nZ2xlX05vcm1hbGl6ZXIucmVzb2x2ZV9sYWJlbF90ZXh0KCByb290X2VsLCBpbnB1dCwgaW5wdXRfaWQgKTtcclxuXHJcblx0XHRcdFx0Ly8gNCkgQnVpbGQgdGhlIHRvZ2dsZSB3cmFwcGVyLlxyXG5cdFx0XHRcdHZhciB3cmFwcGVyICAgICAgID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKTtcclxuXHRcdFx0XHR3cmFwcGVyLmNsYXNzTmFtZSA9ICdpbnNwZWN0b3JfX2NvbnRyb2wgd3BiY191aV9fdG9nZ2xlJztcclxuXHJcblx0XHRcdFx0Ly8gS2VlcCBvcmlnaW5hbCBpbnB1dDsganVzdCBtb3ZlIGl0IGludG8gd3JhcHBlci5cclxuXHRcdFx0XHRpbnB1dC5jbGFzc0xpc3QuYWRkKCAnaW5zcGVjdG9yX19pbnB1dCcgKTtcclxuXHRcdFx0XHRpbnB1dC5zZXRBdHRyaWJ1dGUoICdyb2xlJywgJ3N3aXRjaCcgKTtcclxuXHRcdFx0XHRpbnB1dC5zZXRBdHRyaWJ1dGUoICdhcmlhLWNoZWNrZWQnLCBpbnB1dC5jaGVja2VkID8gJ3RydWUnIDogJ2ZhbHNlJyApO1xyXG5cclxuXHRcdFx0XHR2YXIgaWNvbl9sYWJlbCAgICAgICA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdsYWJlbCcgKTtcclxuXHRcdFx0XHRpY29uX2xhYmVsLmNsYXNzTmFtZSA9ICd3cGJjX3VpX190b2dnbGVfaWNvbic7XHJcblx0XHRcdFx0aWNvbl9sYWJlbC5zZXRBdHRyaWJ1dGUoICdmb3InLCBpbnB1dF9pZCApO1xyXG5cclxuXHRcdFx0XHR2YXIgdGV4dF9sYWJlbCAgICAgICA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdsYWJlbCcgKTtcclxuXHRcdFx0XHR0ZXh0X2xhYmVsLmNsYXNzTmFtZSA9ICd3cGJjX3VpX190b2dnbGVfbGFiZWwnO1xyXG5cdFx0XHRcdHRleHRfbGFiZWwuc2V0QXR0cmlidXRlKCAnZm9yJywgaW5wdXRfaWQgKTtcclxuXHRcdFx0XHR0ZXh0X2xhYmVsLmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSggbGFiZWxfdGV4dCApICk7XHJcblxyXG5cdFx0XHRcdC8vIDUpIEluc2VydCB3cmFwcGVyIGludG8gRE9NIG5lYXIgdGhlIGlucHV0LlxyXG5cdFx0XHRcdC8vICAgIFByZWZlcnJlZDogcmVwbGFjZSB0aGUgb3JpZ2luYWwgbGFiZWxlZCByb3cgaWYgaXQgbWF0Y2hlcyB0eXBpY2FsIGluc3BlY3RvciBsYXlvdXQuXHJcblx0XHRcdFx0dmFyIHJlcGxhY2VkID0gVUkuV1BCQ19CRkJfVG9nZ2xlX05vcm1hbGl6ZXIudHJ5X3JlcGxhY2Vfa25vd25fcm93KCBpbnB1dCwgd3JhcHBlciwgbGFiZWxfdGV4dCApO1xyXG5cclxuXHRcdFx0XHRpZiAoICFyZXBsYWNlZCApIHtcclxuXHRcdFx0XHRcdGlmICggIWlucHV0LnBhcmVudE5vZGUgKSByZXR1cm47IC8vIE5FVyBndWFyZFxyXG5cdFx0XHRcdFx0Ly8gRmFsbGJhY2s6IGp1c3Qgd3JhcCB0aGUgaW5wdXQgaW4gcGxhY2UgYW5kIGFwcGVuZCBsYWJlbHMuXHJcblx0XHRcdFx0XHRpbnB1dC5wYXJlbnROb2RlLmluc2VydEJlZm9yZSggd3JhcHBlciwgaW5wdXQgKTtcclxuXHRcdFx0XHRcdHdyYXBwZXIuYXBwZW5kQ2hpbGQoIGlucHV0ICk7XHJcblx0XHRcdFx0XHR3cmFwcGVyLmFwcGVuZENoaWxkKCBpY29uX2xhYmVsICk7XHJcblx0XHRcdFx0XHR3cmFwcGVyLmFwcGVuZENoaWxkKCB0ZXh0X2xhYmVsICk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyA2KSBBUklBIHN5bmMgb24gY2hhbmdlLlxyXG5cdFx0XHRcdGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoICdjaGFuZ2UnLCBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdFx0XHRpbnB1dC5zZXRBdHRyaWJ1dGUoICdhcmlhLWNoZWNrZWQnLCBpbnB1dC5jaGVja2VkID8gJ3RydWUnIDogJ2ZhbHNlJyApO1xyXG5cdFx0XHRcdH0gKTtcclxuXHRcdFx0fSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogR2VuZXJhdGUgYSB1bmlxdWUgaWQgd2l0aCBhIGdpdmVuIHByZWZpeC5cclxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBwcmVmaXhcclxuXHRcdCAqIEByZXR1cm5zIHtzdHJpbmd9XHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBnZW5lcmF0ZV91bmlxdWVfaWQocHJlZml4KSB7XHJcblx0XHRcdHZhciBiYXNlID0gU3RyaW5nKCBwcmVmaXggfHwgJ3dwYmNfaW5zX2F1dG9fJyApO1xyXG5cdFx0XHR2YXIgdWlkICA9IE1hdGgucmFuZG9tKCkudG9TdHJpbmcoIDM2ICkuc2xpY2UoIDIsIDggKTtcclxuXHRcdFx0dmFyIGlkICAgPSBiYXNlICsgdWlkO1xyXG5cdFx0XHQvLyBNaW5pbWFsIGNvbGxpc2lvbiBndWFyZCBpbiB0aGUgY3VycmVudCBkb2N1bWVudCBzY29wZS5cclxuXHRcdFx0d2hpbGUgKCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggaWQgKSApIHtcclxuXHRcdFx0XHR1aWQgPSBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKCAzNiApLnNsaWNlKCAyLCA4ICk7XHJcblx0XHRcdFx0aWQgID0gYmFzZSArIHVpZDtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gaWQ7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBSZXNvbHZlIHRoZSBiZXN0IGh1bWFuIGxhYmVsIGZvciBhbiBpbnB1dC5cclxuXHRcdCAqIFByaW9yaXR5OlxyXG5cdFx0ICogIDEpIDxsYWJlbCBmb3I9XCJ7aWR9XCI+dGV4dDwvbGFiZWw+XHJcblx0XHQgKiAgMikgbmVhcmVzdCBzaWJsaW5nL3BhcmVudCAuaW5zcGVjdG9yX19sYWJlbCB0ZXh0XHJcblx0XHQgKiAgMykgaW5wdXQuZ2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJykgfHwgZGF0YS1sYWJlbCB8fCBkYXRhLWluc3BlY3Rvci1rZXkgfHwgbmFtZSB8fCAnT3B0aW9uJ1xyXG5cdFx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcm9vdF9lbFxyXG5cdFx0ICogQHBhcmFtIHtIVE1MSW5wdXRFbGVtZW50fSBpbnB1dFxyXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IGlucHV0X2lkXHJcblx0XHQgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG5cdFx0ICovXHJcblx0XHRzdGF0aWMgcmVzb2x2ZV9sYWJlbF90ZXh0KHJvb3RfZWwsIGlucHV0LCBpbnB1dF9pZCkge1xyXG5cdFx0XHQvLyBmb3I9IGFzc29jaWF0aW9uXHJcblx0XHRcdGlmICggaW5wdXRfaWQgKSB7XHJcblx0XHRcdFx0dmFyIGFzc29jID0gcm9vdF9lbC5xdWVyeVNlbGVjdG9yKCAnbGFiZWxbZm9yPVwiJyArIFVJLldQQkNfQkZCX1RvZ2dsZV9Ob3JtYWxpemVyLmNzc19lc2NhcGUoIGlucHV0X2lkICkgKyAnXCJdJyApO1xyXG5cdFx0XHRcdGlmICggYXNzb2MgJiYgYXNzb2MudGV4dENvbnRlbnQgKSB7XHJcblx0XHRcdFx0XHR2YXIgdHh0ID0gYXNzb2MudGV4dENvbnRlbnQudHJpbSgpO1xyXG5cdFx0XHRcdFx0Ly8gUmVtb3ZlIHRoZSBvbGQgbGFiZWwgZnJvbSBET007IGl0cyB0ZXh0IHdpbGwgYmUgdXNlZCBieSB0b2dnbGUuXHJcblx0XHRcdFx0XHRhc3NvYy5wYXJlbnROb2RlICYmIGFzc29jLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIGFzc29jICk7XHJcblx0XHRcdFx0XHRpZiAoIHR4dCApIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHR4dDtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIG5lYXJieSBpbnNwZWN0b3IgbGFiZWxcclxuXHRcdFx0dmFyIG5lYXJfbGFiZWwgPSBpbnB1dC5jbG9zZXN0KCAnLmluc3BlY3Rvcl9fcm93JyApO1xyXG5cdFx0XHRpZiAoIG5lYXJfbGFiZWwgKSB7XHJcblx0XHRcdFx0dmFyIGlsID0gbmVhcl9sYWJlbC5xdWVyeVNlbGVjdG9yKCAnLmluc3BlY3Rvcl9fbGFiZWwnICk7XHJcblx0XHRcdFx0aWYgKCBpbCAmJiBpbC50ZXh0Q29udGVudCApIHtcclxuXHRcdFx0XHRcdHZhciB0MiA9IGlsLnRleHRDb250ZW50LnRyaW0oKTtcclxuXHRcdFx0XHRcdC8vIElmIHRoaXMgcm93IGhhZCB0aGUgc3RhbmRhcmQgbGFiZWwrY29udHJvbCwgZHJvcCB0aGUgb2xkIHRleHQgbGFiZWwgdG8gYXZvaWQgZHVwbGljYXRlcy5cclxuXHRcdFx0XHRcdGlsLnBhcmVudE5vZGUgJiYgaWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggaWwgKTtcclxuXHRcdFx0XHRcdGlmICggdDIgKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiB0MjtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIGZhbGxiYWNrc1xyXG5cdFx0XHR2YXIgYXJpYSA9IGlucHV0LmdldEF0dHJpYnV0ZSggJ2FyaWEtbGFiZWwnICk7XHJcblx0XHRcdGlmICggYXJpYSApIHtcclxuXHRcdFx0XHRyZXR1cm4gYXJpYTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoIGlucHV0LmRhdGFzZXQgJiYgaW5wdXQuZGF0YXNldC5sYWJlbCApIHtcclxuXHRcdFx0XHRyZXR1cm4gU3RyaW5nKCBpbnB1dC5kYXRhc2V0LmxhYmVsICk7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKCBpbnB1dC5kYXRhc2V0ICYmIGlucHV0LmRhdGFzZXQuaW5zcGVjdG9yS2V5ICkge1xyXG5cdFx0XHRcdHJldHVybiBTdHJpbmcoIGlucHV0LmRhdGFzZXQuaW5zcGVjdG9yS2V5ICk7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKCBpbnB1dC5uYW1lICkge1xyXG5cdFx0XHRcdHJldHVybiBTdHJpbmcoIGlucHV0Lm5hbWUgKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gJ09wdGlvbic7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBUcnkgdG8gcmVwbGFjZSBhIGtub3duIGluc3BlY3RvciByb3cgcGF0dGVybiB3aXRoIGEgdG9nZ2xlIHdyYXBwZXIuXHJcblx0XHQgKiBQYXR0ZXJuczpcclxuXHRcdCAqICA8ZGl2Lmluc3BlY3Rvcl9fcm93PlxyXG5cdFx0ICogICAgPGxhYmVsLmluc3BlY3Rvcl9fbGFiZWw+VGV4dDwvbGFiZWw+XHJcblx0XHQgKiAgICA8ZGl2Lmluc3BlY3Rvcl9fY29udHJvbD4gW2lucHV0W3R5cGU9Y2hlY2tib3hdXSA8L2Rpdj5cclxuXHRcdCAqICA8L2Rpdj5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge0hUTUxJbnB1dEVsZW1lbnR9IGlucHV0XHJcblx0XHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSB3cmFwcGVyXHJcblx0XHQgKiBAcmV0dXJucyB7Ym9vbGVhbn0gcmVwbGFjZWRcclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIHRyeV9yZXBsYWNlX2tub3duX3JvdyhpbnB1dCwgd3JhcHBlciwgbGFiZWxfdGV4dCkge1xyXG5cdFx0XHR2YXIgcm93ICAgICAgID0gaW5wdXQuY2xvc2VzdCggJy5pbnNwZWN0b3JfX3JvdycgKTtcclxuXHRcdFx0dmFyIGN0cmxfd3JhcCA9IGlucHV0LnBhcmVudEVsZW1lbnQ7XHJcblxyXG5cdFx0XHRpZiAoIHJvdyAmJiBjdHJsX3dyYXAgJiYgY3RybF93cmFwLmNsYXNzTGlzdC5jb250YWlucyggJ2luc3BlY3Rvcl9fY29udHJvbCcgKSApIHtcclxuXHRcdFx0XHQvLyBDbGVhciBjb250cm9sIHdyYXAgYW5kIHJlaW5zZXJ0IHRvZ2dsZSBzdHJ1Y3R1cmUuXHJcblx0XHRcdFx0d2hpbGUgKCBjdHJsX3dyYXAuZmlyc3RDaGlsZCApIHtcclxuXHRcdFx0XHRcdGN0cmxfd3JhcC5yZW1vdmVDaGlsZCggY3RybF93cmFwLmZpcnN0Q2hpbGQgKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cm93LmNsYXNzTGlzdC5hZGQoICdpbnNwZWN0b3JfX3Jvdy0tdG9nZ2xlJyApO1xyXG5cclxuXHRcdFx0XHRjdHJsX3dyYXAuY2xhc3NMaXN0LmFkZCggJ3dwYmNfdWlfX3RvZ2dsZScgKTtcclxuXHRcdFx0XHRjdHJsX3dyYXAuYXBwZW5kQ2hpbGQoIGlucHV0ICk7XHJcblxyXG5cdFx0XHRcdHZhciBpbnB1dF9pZCAgICAgICA9IGlucHV0LmdldEF0dHJpYnV0ZSggJ2lkJyApO1xyXG5cdFx0XHRcdHZhciBpY29uX2xibCAgICAgICA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdsYWJlbCcgKTtcclxuXHRcdFx0XHRpY29uX2xibC5jbGFzc05hbWUgPSAnd3BiY191aV9fdG9nZ2xlX2ljb24nO1xyXG5cdFx0XHRcdGljb25fbGJsLnNldEF0dHJpYnV0ZSggJ2ZvcicsIGlucHV0X2lkICk7XHJcblxyXG5cdFx0XHRcdHZhciB0ZXh0X2xibCAgICAgICA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdsYWJlbCcgKTtcclxuXHRcdFx0XHR0ZXh0X2xibC5jbGFzc05hbWUgPSAnd3BiY191aV9fdG9nZ2xlX2xhYmVsJztcclxuXHRcdFx0XHR0ZXh0X2xibC5zZXRBdHRyaWJ1dGUoICdmb3InLCBpbnB1dF9pZCApO1xyXG5cdFx0XHRcdGlmICggbGFiZWxfdGV4dCApIHtcclxuXHRcdFx0XHRcdHRleHRfbGJsLmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSggbGFiZWxfdGV4dCApICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdC8vIElmIHRoZSByb3cgcHJldmlvdXNseSBoYWQgYSAuaW5zcGVjdG9yX19sYWJlbCAod2UgcmVtb3ZlZCBpdCBpbiByZXNvbHZlX2xhYmVsX3RleHQpLFxyXG5cdFx0XHRcdC8vIHdlIGludGVudGlvbmFsbHkgZG8gTk9UIHJlY3JlYXRlIGl0OyB0aGUgdG9nZ2xlIHRleHQgbGFiZWwgYmVjb21lcyB0aGUgdmlzaWJsZSBvbmUuXHJcblx0XHRcdFx0Ly8gVGhlIHRleHQgY29udGVudCBpcyBhbHJlYWR5IHJlc29sdmVkIGluIHJlc29sdmVfbGFiZWxfdGV4dCgpIGFuZCBzZXQgYmVsb3cgYnkgY2FsbGVyLlxyXG5cclxuXHRcdFx0XHRjdHJsX3dyYXAuYXBwZW5kQ2hpbGQoIGljb25fbGJsICk7XHJcblx0XHRcdFx0Y3RybF93cmFwLmFwcGVuZENoaWxkKCB0ZXh0X2xibCApO1xyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBOb3QgYSBrbm93biBwYXR0ZXJuOyBjYWxsZXIgd2lsbCB3cmFwIGluIHBsYWNlLlxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBDU1MuZXNjYXBlIHBvbHlmaWxsIGZvciBzZWxlY3RvcnMuXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gc1xyXG5cdFx0ICogQHJldHVybnMge3N0cmluZ31cclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIGNzc19lc2NhcGUocykge1xyXG5cdFx0XHRzID0gU3RyaW5nKCBzICk7XHJcblx0XHRcdGlmICggd2luZG93LkNTUyAmJiB0eXBlb2Ygd2luZG93LkNTUy5lc2NhcGUgPT09ICdmdW5jdGlvbicgKSB7XHJcblx0XHRcdFx0cmV0dXJuIHdpbmRvdy5DU1MuZXNjYXBlKCBzICk7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIHMucmVwbGFjZSggLyhbXlxcdy1dKS9nLCAnXFxcXCQxJyApO1xyXG5cdFx0fVxyXG5cdH07XHJcblxyXG5cdC8qKlxyXG5cdCAqIEFwcGx5IGFsbCBVSSBub3JtYWxpemVycy9lbmhhbmNlcnMgdG8gYSBjb250YWluZXIgKHBvc3QtcmVuZGVyKS5cclxuXHQgKiBLZWVwIHRoaXMgZmlsZSBzbWFsbCBhbmQgYWRkIG1vcmUgbm9ybWFsaXplcnMgbGF0ZXIgaW4gb25lIHBsYWNlLlxyXG5cdCAqXHJcblx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcm9vdFxyXG5cdCAqL1xyXG5cdFVJLmFwcGx5X3Bvc3RfcmVuZGVyID0gZnVuY3Rpb24gKHJvb3QpIHtcclxuXHRcdGlmICggIXJvb3QgKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdHRyeSB7XHJcblx0XHRcdFVJLldQQkNfQkZCX1ZhbHVlU2xpZGVyPy5pbml0X29uPy4oIHJvb3QgKTtcclxuXHRcdH0gY2F0Y2ggKCBlICkgeyAvKiBub29wICovXHJcblx0XHR9XHJcblx0XHR0cnkge1xyXG5cdFx0XHR2YXIgVCA9IFVJLldQQkNfQkZCX1RvZ2dsZV9Ob3JtYWxpemVyO1xyXG5cdFx0XHRpZiAoIFQgJiYgdHlwZW9mIFQudXBncmFkZV9jaGVja2JveGVzX2luID09PSAnZnVuY3Rpb24nICkge1xyXG5cdFx0XHRcdFQudXBncmFkZV9jaGVja2JveGVzX2luKCByb290ICk7XHJcblx0XHRcdH1cclxuXHRcdH0gY2F0Y2ggKCBlICkge1xyXG5cdFx0XHR3Ll93cGJjPy5kZXY/LmVycm9yPy4oICdhcHBseV9wb3N0X3JlbmRlci50b2dnbGUnLCBlICk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQWNjZXNzaWJpbGl0eToga2VlcCBhcmlhLWNoZWNrZWQgaW4gc3luYyBmb3IgYWxsIHRvZ2dsZXMgaW5zaWRlIHJvb3QuXHJcblx0XHR0cnkge1xyXG5cdFx0XHRyb290LnF1ZXJ5U2VsZWN0b3JBbGwoICcud3BiY191aV9fdG9nZ2xlIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXScgKS5mb3JFYWNoKCBmdW5jdGlvbiAoY2IpIHtcclxuXHRcdFx0XHRpZiAoIGNiLl9fd3BiY19hcmlhX2hvb2tlZCApIHtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Y2IuX193cGJjX2FyaWFfaG9va2VkID0gdHJ1ZTtcclxuXHRcdFx0XHRjYi5zZXRBdHRyaWJ1dGUoICdhcmlhLWNoZWNrZWQnLCBjYi5jaGVja2VkID8gJ3RydWUnIDogJ2ZhbHNlJyApO1xyXG5cdFx0XHRcdC8vIERlbGVnYXRlIOKAmGNoYW5nZeKAmSBqdXN0IG9uY2UgcGVyIHJlbmRlciDigJMgbmF0aXZlIGRlbGVnYXRpb24gc3RpbGwgd29ya3MgZmluZSBmb3IgeW91ciBsb2dpYy5cclxuXHRcdFx0XHRjYi5hZGRFdmVudExpc3RlbmVyKCAnY2hhbmdlJywgKCkgPT4ge1xyXG5cdFx0XHRcdFx0Y2Iuc2V0QXR0cmlidXRlKCAnYXJpYS1jaGVja2VkJywgY2IuY2hlY2tlZCA/ICd0cnVlJyA6ICdmYWxzZScgKTtcclxuXHRcdFx0XHR9LCB7IHBhc3NpdmU6IHRydWUgfSApO1xyXG5cdFx0XHR9ICk7XHJcblx0XHR9IGNhdGNoICggZSApIHtcclxuXHRcdFx0dy5fd3BiYz8uZGV2Py5lcnJvcj8uKCAnYXBwbHlfcG9zdF9yZW5kZXIuYXJpYScsIGUgKTtcclxuXHRcdH1cclxuXHR9O1xyXG5cclxuXHRVSS5JbnNwZWN0b3JFbmhhbmNlcnMgPSBVSS5JbnNwZWN0b3JFbmhhbmNlcnMgfHwgKGZ1bmN0aW9uICgpIHtcclxuXHRcdHZhciByZWdzID0gW107XHJcblxyXG5cdFx0ZnVuY3Rpb24gcmVnaXN0ZXIobmFtZSwgc2VsZWN0b3IsIGluaXQsIGRlc3Ryb3kpIHtcclxuXHRcdFx0cmVncy5wdXNoKCB7IG5hbWUsIHNlbGVjdG9yLCBpbml0LCBkZXN0cm95IH0gKTtcclxuXHRcdH1cclxuXHJcblx0XHRmdW5jdGlvbiBzY2FuKHJvb3QpIHtcclxuXHRcdFx0aWYgKCAhcm9vdCApIHJldHVybjtcclxuXHRcdFx0cmVncy5mb3JFYWNoKCBmdW5jdGlvbiAocikge1xyXG5cdFx0XHRcdHJvb3QucXVlcnlTZWxlY3RvckFsbCggci5zZWxlY3RvciApLmZvckVhY2goIGZ1bmN0aW9uIChub2RlKSB7XHJcblx0XHRcdFx0XHRub2RlLl9fd3BiY19laCA9IG5vZGUuX193cGJjX2VoIHx8IHt9O1xyXG5cdFx0XHRcdFx0aWYgKCBub2RlLl9fd3BiY19laFtyLm5hbWVdICkgcmV0dXJuO1xyXG5cdFx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdFx0ci5pbml0ICYmIHIuaW5pdCggbm9kZSwgcm9vdCApO1xyXG5cdFx0XHRcdFx0XHRub2RlLl9fd3BiY19laFtyLm5hbWVdID0gdHJ1ZTtcclxuXHRcdFx0XHRcdH0gY2F0Y2ggKCBfZSApIHtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9ICk7XHJcblx0XHRcdH0gKTtcclxuXHRcdH1cclxuXHJcblx0XHRmdW5jdGlvbiBkZXN0cm95KHJvb3QpIHtcclxuXHRcdFx0aWYgKCAhcm9vdCApIHJldHVybjtcclxuXHRcdFx0cmVncy5mb3JFYWNoKCBmdW5jdGlvbiAocikge1xyXG5cdFx0XHRcdHJvb3QucXVlcnlTZWxlY3RvckFsbCggci5zZWxlY3RvciApLmZvckVhY2goIGZ1bmN0aW9uIChub2RlKSB7XHJcblx0XHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0XHRyLmRlc3Ryb3kgJiYgci5kZXN0cm95KCBub2RlLCByb290ICk7XHJcblx0XHRcdFx0XHR9IGNhdGNoICggX2UgKSB7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRpZiAoIG5vZGUuX193cGJjX2VoICkgZGVsZXRlIG5vZGUuX193cGJjX2VoW3IubmFtZV07XHJcblx0XHRcdFx0fSApO1xyXG5cdFx0XHR9ICk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHsgcmVnaXN0ZXIsIHNjYW4sIGRlc3Ryb3kgfTtcclxuXHR9KSgpO1xyXG5cclxuXHRVSS5XUEJDX0JGQl9WYWx1ZVNsaWRlciA9IHtcclxuXHRcdGluaXRfb24ocm9vdCkge1xyXG5cdFx0XHR2YXIgZ3JvdXBzID0gKHJvb3Qubm9kZVR5cGUgPT09IDEgPyBbIHJvb3QgXSA6IFtdKS5jb25jYXQoIFtdLnNsaWNlLmNhbGwoIHJvb3QucXVlcnlTZWxlY3RvckFsbD8uKCAnW2RhdGEtbGVuLWdyb3VwXScgKSB8fCBbXSApICk7XHJcblx0XHRcdGdyb3Vwcy5mb3JFYWNoKCBmdW5jdGlvbiAoZykge1xyXG5cdFx0XHRcdGlmICggIWcubWF0Y2hlcyB8fCAhZy5tYXRjaGVzKCAnW2RhdGEtbGVuLWdyb3VwXScgKSApIHJldHVybjtcclxuXHRcdFx0XHRpZiAoIGcuX193cGJjX2xlbl93aXJlZCApIHJldHVybjtcclxuXHJcblx0XHRcdFx0dmFyIG51bWJlciA9IGcucXVlcnlTZWxlY3RvciggJ1tkYXRhLWxlbi12YWx1ZV0nICk7XHJcblx0XHRcdFx0dmFyIHJhbmdlICA9IGcucXVlcnlTZWxlY3RvciggJ1tkYXRhLWxlbi1yYW5nZV0nICk7XHJcblx0XHRcdFx0dmFyIHVuaXQgICA9IGcucXVlcnlTZWxlY3RvciggJ1tkYXRhLWxlbi11bml0XScgKTtcclxuXHJcblx0XHRcdFx0aWYgKCAhbnVtYmVyIHx8ICFyYW5nZSApIHJldHVybjtcclxuXHJcblx0XHRcdFx0Ly8gTWlycm9yIGNvbnN0cmFpbnRzIGlmIG1pc3Npbmcgb24gdGhlIHJhbmdlLlxyXG5cdFx0XHRcdFsgJ21pbicsICdtYXgnLCAnc3RlcCcgXS5mb3JFYWNoKCBmdW5jdGlvbiAoYSkge1xyXG5cdFx0XHRcdFx0aWYgKCAhcmFuZ2UuaGFzQXR0cmlidXRlKCBhICkgJiYgbnVtYmVyLmhhc0F0dHJpYnV0ZSggYSApICkge1xyXG5cdFx0XHRcdFx0XHRyYW5nZS5zZXRBdHRyaWJ1dGUoIGEsIG51bWJlci5nZXRBdHRyaWJ1dGUoIGEgKSApO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0gKTtcclxuXHJcblxyXG5cdFx0XHRcdGZ1bmN0aW9uIHN5bmNfcmFuZ2VfZnJvbV9udW1iZXIoKSB7XHJcblx0XHRcdFx0XHRpZiAoIHJhbmdlLnZhbHVlICE9PSBudW1iZXIudmFsdWUgKSB7XHJcblx0XHRcdFx0XHRcdHJhbmdlLnZhbHVlID0gbnVtYmVyLnZhbHVlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0ZnVuY3Rpb24gZGlzcGF0Y2hfaW5wdXQoZWwpIHtcclxuXHRcdFx0XHRcdHRyeSB7IGVsLmRpc3BhdGNoRXZlbnQoIG5ldyBFdmVudCggJ2lucHV0JywgeyBidWJibGVzOiB0cnVlIH0gKSApOyB9IGNhdGNoICggX2UgKSB7fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRmdW5jdGlvbiBkaXNwYXRjaF9jaGFuZ2UoZWwpIHtcclxuXHRcdFx0XHRcdHRyeSB7IGVsLmRpc3BhdGNoRXZlbnQoIG5ldyBFdmVudCggJ2NoYW5nZScsIHsgYnViYmxlczogdHJ1ZSB9ICkgKTsgfSBjYXRjaCAoIF9lICkge31cclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIFRocm90dGxlIHJhbmdlLT5udW1iZXIgc3luY2luZyAodGltZS1iYXNlZCkuXHJcblx0XHRcdFx0dmFyIHRpbWVyX2lkICAgICAgID0gMDtcclxuXHRcdFx0XHR2YXIgcGVuZGluZ192YWwgICAgPSBudWxsO1xyXG5cdFx0XHRcdHZhciBwZW5kaW5nX2NoYW5nZSA9IGZhbHNlO1xyXG5cdFx0XHRcdHZhciBsYXN0X2ZsdXNoX3RzICA9IDA7XHJcblxyXG5cdFx0XHRcdC8vIENoYW5nZSB0aGlzIHRvIHR1bmUgc3BlZWQ6IDUwLi4xMjAgbXMgaXMgYSBnb29kIHJhbmdlLlxyXG5cdFx0XHRcdHZhciBtaW5faW50ZXJ2YWxfbXMgPSBwYXJzZUludCggZy5kYXRhc2V0LmxlblRocm90dGxlIHx8IFVJLlZBTFVFX1NMSURFUl9USFJPVFRMRV9NUywgMTAgKTtcclxuXHRcdFx0XHRtaW5faW50ZXJ2YWxfbXMgPSBOdW1iZXIuaXNGaW5pdGUoIG1pbl9pbnRlcnZhbF9tcyApID8gTWF0aC5tYXgoIDAsIG1pbl9pbnRlcnZhbF9tcyApIDogMTIwO1xyXG5cclxuXHRcdFx0XHRmdW5jdGlvbiBmbHVzaF9yYW5nZV90b19udW1iZXIoKSB7XHJcblx0XHRcdFx0XHR0aW1lcl9pZCA9IDA7XHJcblxyXG5cdFx0XHRcdFx0aWYgKCBwZW5kaW5nX3ZhbCA9PSBudWxsICkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0dmFyIG5leHQgICAgPSBTdHJpbmcoIHBlbmRpbmdfdmFsICk7XHJcblx0XHRcdFx0XHRwZW5kaW5nX3ZhbCA9IG51bGw7XHJcblxyXG5cdFx0XHRcdFx0aWYgKCBudW1iZXIudmFsdWUgIT09IG5leHQgKSB7XHJcblx0XHRcdFx0XHRcdG51bWJlci52YWx1ZSA9IG5leHQ7XHJcblx0XHRcdFx0XHRcdC8vIElNUE9SVEFOVDogb25seSAnaW5wdXQnIHdoaWxlIGRyYWdnaW5nLlxyXG5cdFx0XHRcdFx0XHRkaXNwYXRjaF9pbnB1dCggbnVtYmVyICk7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0aWYgKCBwZW5kaW5nX2NoYW5nZSApIHtcclxuXHRcdFx0XHRcdFx0cGVuZGluZ19jaGFuZ2UgPSBmYWxzZTtcclxuXHRcdFx0XHRcdFx0ZGlzcGF0Y2hfY2hhbmdlKCBudW1iZXIgKTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRsYXN0X2ZsdXNoX3RzID0gRGF0ZS5ub3coKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGZ1bmN0aW9uIHNjaGVkdWxlX3JhbmdlX3RvX251bWJlcih2YWwsIGVtaXRfY2hhbmdlKSB7XHJcblx0XHRcdFx0XHRwZW5kaW5nX3ZhbCA9IHZhbDtcclxuXHRcdFx0XHRcdGlmICggZW1pdF9jaGFuZ2UgKSB7XHJcblx0XHRcdFx0XHRcdHBlbmRpbmdfY2hhbmdlID0gdHJ1ZTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHQvLyBJZiBjb21taXQgcmVxdWVzdGVkLCBmbHVzaCBpbW1lZGlhdGVseS5cclxuXHRcdFx0XHRcdGlmICggcGVuZGluZ19jaGFuZ2UgKSB7XHJcblx0XHRcdFx0XHRcdGlmICggdGltZXJfaWQgKSB7XHJcblx0XHRcdFx0XHRcdFx0Y2xlYXJUaW1lb3V0KCB0aW1lcl9pZCApO1xyXG5cdFx0XHRcdFx0XHRcdHRpbWVyX2lkID0gMDtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRmbHVzaF9yYW5nZV90b19udW1iZXIoKTtcclxuXHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdHZhciBub3cgICA9IERhdGUubm93KCk7XHJcblx0XHRcdFx0XHR2YXIgZGVsdGEgPSBub3cgLSBsYXN0X2ZsdXNoX3RzO1xyXG5cclxuXHRcdFx0XHRcdC8vIElmIGVub3VnaCB0aW1lIHBhc3NlZCwgZmx1c2ggaW1tZWRpYXRlbHk7IGVsc2Ugc2NoZWR1bGUuXHJcblx0XHRcdFx0XHRpZiAoIGRlbHRhID49IG1pbl9pbnRlcnZhbF9tcyApIHtcclxuXHRcdFx0XHRcdFx0Zmx1c2hfcmFuZ2VfdG9fbnVtYmVyKCk7XHJcblx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAoIHRpbWVyX2lkICkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0dGltZXJfaWQgPSBzZXRUaW1lb3V0KCBmbHVzaF9yYW5nZV90b19udW1iZXIsIE1hdGgubWF4KCAwLCBtaW5faW50ZXJ2YWxfbXMgLSBkZWx0YSApICk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRmdW5jdGlvbiBvbl9udW1iZXJfaW5wdXQoKSB7XHJcblx0XHRcdFx0XHRzeW5jX3JhbmdlX2Zyb21fbnVtYmVyKCk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRmdW5jdGlvbiBvbl9udW1iZXJfY2hhbmdlKCkge1xyXG5cdFx0XHRcdFx0c3luY19yYW5nZV9mcm9tX251bWJlcigpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0ZnVuY3Rpb24gb25fcmFuZ2VfaW5wdXQoKSB7XHJcblx0XHRcdFx0XHRzY2hlZHVsZV9yYW5nZV90b19udW1iZXIoIHJhbmdlLnZhbHVlLCBmYWxzZSApO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0ZnVuY3Rpb24gb25fcmFuZ2VfY2hhbmdlKCkge1xyXG5cdFx0XHRcdFx0c2NoZWR1bGVfcmFuZ2VfdG9fbnVtYmVyKCByYW5nZS52YWx1ZSwgdHJ1ZSApO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0bnVtYmVyLmFkZEV2ZW50TGlzdGVuZXIoICdpbnB1dCcsICBvbl9udW1iZXJfaW5wdXQgKTtcclxuXHRcdFx0XHRudW1iZXIuYWRkRXZlbnRMaXN0ZW5lciggJ2NoYW5nZScsIG9uX251bWJlcl9jaGFuZ2UgKTtcclxuXHRcdFx0XHRyYW5nZS5hZGRFdmVudExpc3RlbmVyKCAnaW5wdXQnLCAgb25fcmFuZ2VfaW5wdXQgKTtcclxuXHRcdFx0XHRyYW5nZS5hZGRFdmVudExpc3RlbmVyKCAnY2hhbmdlJywgb25fcmFuZ2VfY2hhbmdlICk7XHJcblxyXG5cdFx0XHRcdGlmICggdW5pdCApIHtcclxuXHRcdFx0XHRcdHVuaXQuYWRkRXZlbnRMaXN0ZW5lciggJ2NoYW5nZScsIGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0XHRcdFx0Ly8gV2UganVzdCBudWRnZSB0aGUgbnVtYmVyIHNvIHVwc3RyZWFtIGhhbmRsZXJzIHJlLXJ1bi5cclxuXHRcdFx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdFx0XHRudW1iZXIuZGlzcGF0Y2hFdmVudCggbmV3IEV2ZW50KCAnaW5wdXQnLCB7IGJ1YmJsZXM6IHRydWUgfSApICk7XHJcblx0XHRcdFx0XHRcdH0gY2F0Y2ggKCBfZSApIHtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSApO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gSW5pdGlhbCBzeW5jXHJcblx0XHRcdFx0c3luY19yYW5nZV9mcm9tX251bWJlcigpO1xyXG5cclxuXHRcdFx0XHRnLl9fd3BiY19sZW5fd2lyZWQgPSB7XHJcblx0XHRcdFx0XHRkZXN0cm95KCkge1xyXG5cdFx0XHRcdFx0XHRudW1iZXIucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ2lucHV0JywgIG9uX251bWJlcl9pbnB1dCApO1xyXG5cdFx0XHRcdFx0XHRudW1iZXIucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ2NoYW5nZScsIG9uX251bWJlcl9jaGFuZ2UgKTtcclxuXHRcdFx0XHRcdFx0cmFuZ2UucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ2lucHV0JywgIG9uX3JhbmdlX2lucHV0ICk7XHJcblx0XHRcdFx0XHRcdHJhbmdlLnJlbW92ZUV2ZW50TGlzdGVuZXIoICdjaGFuZ2UnLCBvbl9yYW5nZV9jaGFuZ2UgKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9O1xyXG5cdFx0XHR9ICk7XHJcblx0XHR9LFxyXG5cdFx0ZGVzdHJveV9vbihyb290KSB7XHJcblx0XHRcdHZhciBncm91cHMgPSAocm9vdCAmJiByb290Lm5vZGVUeXBlID09PSAxID8gWyByb290IF0gOiBbXSkuY29uY2F0KFxyXG5cdFx0XHRcdFtdLnNsaWNlLmNhbGwoIHJvb3QucXVlcnlTZWxlY3RvckFsbD8uKCAnW2RhdGEtbGVuLWdyb3VwXScgKSB8fCBbXSApXHJcblx0XHRcdCk7XHJcblx0XHRcdGdyb3Vwcy5mb3JFYWNoKCBmdW5jdGlvbiAoZykge1xyXG5cdFx0XHRcdGlmICggIWcubWF0Y2hlcyB8fCAhZy5tYXRjaGVzKCAnW2RhdGEtbGVuLWdyb3VwXScgKSApIHJldHVybjtcclxuXHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0Zy5fX3dwYmNfbGVuX3dpcmVkICYmIGcuX193cGJjX2xlbl93aXJlZC5kZXN0cm95ICYmIGcuX193cGJjX2xlbl93aXJlZC5kZXN0cm95KCk7XHJcblx0XHRcdFx0fSBjYXRjaCAoIF9lICkge1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRkZWxldGUgZy5fX3dwYmNfbGVuX3dpcmVkO1xyXG5cdFx0XHR9ICk7XHJcblx0XHR9XHJcblx0fTtcclxuXHJcblx0Ly8gUmVnaXN0ZXIgd2l0aCB0aGUgZ2xvYmFsIGVuaGFuY2VycyBodWIuXHJcblx0VUkuSW5zcGVjdG9yRW5oYW5jZXJzICYmIFVJLkluc3BlY3RvckVuaGFuY2Vycy5yZWdpc3RlcihcclxuXHRcdCd2YWx1ZS1zbGlkZXInLFxyXG5cdFx0J1tkYXRhLWxlbi1ncm91cF0nLFxyXG5cdFx0ZnVuY3Rpb24gKGVsLCBfcm9vdCkge1xyXG5cdFx0XHRVSS5XUEJDX0JGQl9WYWx1ZVNsaWRlci5pbml0X29uKCBlbCApO1xyXG5cdFx0fSxcclxuXHRcdGZ1bmN0aW9uIChlbCwgX3Jvb3QpIHtcclxuXHRcdFx0VUkuV1BCQ19CRkJfVmFsdWVTbGlkZXIuZGVzdHJveV9vbiggZWwgKTtcclxuXHRcdH1cclxuXHQpO1xyXG5cclxuXHQvLyBTaW5nbGUsIGxvYWQtb3JkZXItc2FmZSBwYXRjaCBzbyBlbmhhbmNlcnMgYXV0by1ydW4gb24gZXZlcnkgYmluZC5cclxuXHQoZnVuY3Rpb24gcGF0Y2hJbnNwZWN0b3JFbmhhbmNlcnMoKSB7XHJcblx0XHRmdW5jdGlvbiBhcHBseVBhdGNoKCkge1xyXG5cdFx0XHR2YXIgSW5zcGVjdG9yID0gdy5XUEJDX0JGQl9JbnNwZWN0b3I7XHJcblx0XHRcdGlmICggIUluc3BlY3RvciB8fCBJbnNwZWN0b3IuX193cGJjX2VuaGFuY2Vyc19wYXRjaGVkICkgcmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRJbnNwZWN0b3IuX193cGJjX2VuaGFuY2Vyc19wYXRjaGVkID0gdHJ1ZTtcclxuXHRcdFx0dmFyIG9yaWcgICAgICAgICAgICAgICAgICAgICAgICAgICA9IEluc3BlY3Rvci5wcm90b3R5cGUuYmluZF90b19maWVsZDtcclxuXHRcdFx0SW5zcGVjdG9yLnByb3RvdHlwZS5iaW5kX3RvX2ZpZWxkICA9IGZ1bmN0aW9uIChlbCkge1xyXG5cdFx0XHRcdG9yaWcuY2FsbCggdGhpcywgZWwgKTtcclxuXHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0dmFyIGlucyA9IHRoaXMucGFuZWxcclxuXHRcdFx0XHRcdFx0fHwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICd3cGJjX2JmYl9faW5zcGVjdG9yJyApXHJcblx0XHRcdFx0XHRcdHx8IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoICcud3BiY19iZmJfX2luc3BlY3RvcicgKTtcclxuXHRcdFx0XHRcdFVJLkluc3BlY3RvckVuaGFuY2VycyAmJiBVSS5JbnNwZWN0b3JFbmhhbmNlcnMuc2NhbiggaW5zICk7XHJcblx0XHRcdFx0fSBjYXRjaCAoIF9lICkge1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fTtcclxuXHRcdFx0Ly8gSW5pdGlhbCBzY2FuIGlmIHRoZSBET00gaXMgYWxyZWFkeSBwcmVzZW50LlxyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdHZhciBpbnNFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnd3BiY19iZmJfX2luc3BlY3RvcicgKVxyXG5cdFx0XHRcdFx0fHwgZG9jdW1lbnQucXVlcnlTZWxlY3RvciggJy53cGJjX2JmYl9faW5zcGVjdG9yJyApO1xyXG5cdFx0XHRcdFVJLkluc3BlY3RvckVuaGFuY2VycyAmJiBVSS5JbnNwZWN0b3JFbmhhbmNlcnMuc2NhbiggaW5zRWwgKTtcclxuXHRcdFx0fSBjYXRjaCAoIF9lICkge1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIFRyeSBub3c7IGlmIEluc3BlY3RvciBpc27igJl0IGRlZmluZWQgeWV0LCBwYXRjaCB3aGVuIGl0IGJlY29tZXMgcmVhZHkuXHJcblx0XHRpZiAoICFhcHBseVBhdGNoKCkgKSB7XHJcblx0XHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXHJcblx0XHRcdFx0J3dwYmNfYmZiX2luc3BlY3Rvcl9yZWFkeScsXHJcblx0XHRcdFx0ZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRcdFx0YXBwbHlQYXRjaCgpO1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0eyBvbmNlOiB0cnVlIH1cclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHR9KSgpO1xyXG5cclxufSggd2luZG93LCBkb2N1bWVudCApKTtcclxuIiwiLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbi8vID09IEZpbGUgIC9pbmNsdWRlcy9wYWdlLWZvcm0tYnVpbGRlci9fX2pzL2NvcmUvYmZiLXN5bmMtY29kZS10b29scy10YWIuanMgICB8IDIwMjYtMDQtMDYgfCAxNjozOFxyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuKGZ1bmN0aW9uICggdywgZCApIHtcclxuXHQndXNlIHN0cmljdCc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIERpc3BhdGNoIHJlcXVlc3QgdG8gc2hvdyBhIHJpZ2h0IHNpZGViYXIgcGFuZWwuXHJcblx0ICpcclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gcGFuZWxfaWRcclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdGFiX2lkXHJcblx0ICpcclxuXHQgKiBAcmV0dXJuIHt2b2lkfVxyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIHdwYmNfYmZiX19kaXNwYXRjaF9zaG93X3BhbmVsKCBwYW5lbF9pZCwgdGFiX2lkICkge1xyXG5cclxuXHRcdHZhciBldmVudF9kZXRhaWw7XHJcblxyXG5cdFx0aWYgKCAhIHBhbmVsX2lkIHx8ICEgdGFiX2lkICkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0ZXZlbnRfZGV0YWlsID0ge1xyXG5cdFx0XHRwYW5lbF9pZDogcGFuZWxfaWQsXHJcblx0XHRcdHRhYl9pZCAgOiB0YWJfaWRcclxuXHRcdH07XHJcblxyXG5cdFx0aWYgKCB0eXBlb2Ygdy53cGJjX2JmYl9fZGlzcGF0Y2hfZXZlbnRfc2FmZSA9PT0gJ2Z1bmN0aW9uJyApIHtcclxuXHRcdFx0dy53cGJjX2JmYl9fZGlzcGF0Y2hfZXZlbnRfc2FmZSggJ3dwYmNfYmZiOnNob3dfcGFuZWwnLCBldmVudF9kZXRhaWwgKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdGQuZGlzcGF0Y2hFdmVudChcclxuXHRcdFx0bmV3IEN1c3RvbUV2ZW50KFxyXG5cdFx0XHRcdCd3cGJjX2JmYjpzaG93X3BhbmVsJyxcclxuXHRcdFx0XHR7XHJcblx0XHRcdFx0XHRkZXRhaWw6IGV2ZW50X2RldGFpbFxyXG5cdFx0XHRcdH1cclxuXHRcdFx0KVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFN5bmMgcmlnaHQgc2lkZWJhciB3aXRoIHRvcCBtb2RlIHRhYnMuXHJcblx0ICpcclxuXHQgKiBVc2VzIHRvcCB0YWJzIG5hdiBhdHRyaWJ1dGUgYGRhdGEtYWN0aXZlLXRhYmAgYXMgdGhlIHNvdXJjZSBvZiB0cnV0aC5cclxuXHQgKiBUaGlzIGF2b2lkcyBmYWxzZSBkZXRlY3Rpb24gb24gaW5pdGlhbCBwYWdlIGxvYWQsIGJlY2F1c2UgdG9wIHBhbmVscyBhcmVcclxuXHQgKiBoaWRkZW4gYnkgaW5saW5lIHN0eWxlIGBkaXNwbGF5Om5vbmVgLCBub3QgYnkgdGhlIGBoaWRkZW5gIGF0dHJpYnV0ZS5cclxuXHQgKi9cclxuXHRjbGFzcyBXUEJDX0JGQl9Nb2RlX1JpZ2h0YmFyX1N5bmMge1xyXG5cclxuXHRcdGNvbnN0cnVjdG9yKCkge1xyXG5cdFx0XHR0aGlzLnRvcF90YWJzX25hdiAgICAgID0gbnVsbDtcclxuXHRcdFx0dGhpcy5hZHZhbmNlZF90YWJfd3JhcCA9IG51bGw7XHJcblx0XHRcdHRoaXMuYWR2YW5jZWRfcGFuZWwgICAgPSBudWxsO1xyXG5cdFx0XHR0aGlzLm11dGF0aW9uX29ic2VydmVyID0gbnVsbDtcclxuXHRcdFx0dGhpcy5sYXN0X21vZGUgICAgICAgICA9ICcnO1xyXG5cdFx0XHR0aGlzLnN5bmNfcmlnaHRiYXJfbW9kZSA9IHRoaXMuc3luY19yaWdodGJhcl9tb2RlLmJpbmQoIHRoaXMgKTtcclxuXHRcdFx0dGhpcy5oYW5kbGVfY2xpY2sgICAgICA9IHRoaXMuaGFuZGxlX2NsaWNrLmJpbmQoIHRoaXMgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEluaXQgY29udHJvbGxlci5cclxuXHRcdCAqXHJcblx0XHQgKiBAcmV0dXJuIHt2b2lkfVxyXG5cdFx0ICovXHJcblx0XHRpbml0KCkge1xyXG5cdFx0XHR0aGlzLnRvcF90YWJzX25hdiAgICAgID0gZC5nZXRFbGVtZW50QnlJZCggJ3dwYmNfYmZiX190b3BfaG9yaXNvbnRhbF9uYXYnICk7XHJcblx0XHRcdHRoaXMuYWR2YW5jZWRfdGFiX3dyYXAgPSBkLnF1ZXJ5U2VsZWN0b3IoICcud3BiY19iZmJfX3JpZ2h0YmFyX3RhYl93cmFwLS1hZHZhbmNlZF90b29scycgKTtcclxuXHRcdFx0dGhpcy5hZHZhbmNlZF9wYW5lbCAgICA9IGQuZ2V0RWxlbWVudEJ5SWQoICd3cGJjX2JmYl9faW5zcGVjdG9yX2FkdmFuY2VkX3Rvb2xzJyApO1xyXG5cclxuXHRcdFx0aWYgKCAhIHRoaXMuYWR2YW5jZWRfdGFiX3dyYXAgfHwgISB0aGlzLmFkdmFuY2VkX3BhbmVsICkge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gT2JzZXJ2ZSBhY3RpdmUgdGFiIGNoYW5nZXMgaW4gdGhlIHRvcCB0YWJzIG5hdi5cclxuXHRcdFx0aWYgKCB0aGlzLnRvcF90YWJzX25hdiApIHtcclxuXHRcdFx0XHR0aGlzLm11dGF0aW9uX29ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoIHRoaXMuc3luY19yaWdodGJhcl9tb2RlICk7XHJcblx0XHRcdFx0dGhpcy5tdXRhdGlvbl9vYnNlcnZlci5vYnNlcnZlKFxyXG5cdFx0XHRcdFx0dGhpcy50b3BfdGFic19uYXYsXHJcblx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdGF0dHJpYnV0ZXMgICAgIDogdHJ1ZSxcclxuXHRcdFx0XHRcdFx0YXR0cmlidXRlRmlsdGVyOiBbICdkYXRhLWFjdGl2ZS10YWInIF1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBGYWxsYmFjayBmb3IgY2xpY2stZHJpdmVuIHN3aXRjaGluZy5cclxuXHRcdFx0ZC5hZGRFdmVudExpc3RlbmVyKCAnY2xpY2snLCB0aGlzLmhhbmRsZV9jbGljaywgdHJ1ZSApO1xyXG5cclxuXHRcdFx0Ly8gSW5pdGlhbCBzeW5jLlxyXG5cdFx0XHR0aGlzLnN5bmNfcmlnaHRiYXJfbW9kZSgpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogR2V0IGFjdGl2ZSB0b3AgdGFiIGlkLlxyXG5cdFx0ICpcclxuXHRcdCAqIFByaW9yaXR5OlxyXG5cdFx0ICogMS4gZGF0YS1hY3RpdmUtdGFiIGZyb20gdG9wIHRhYnMgbmF2XHJcblx0XHQgKiAyLiBhY3RpdmUgQ1NTIGNsYXNzIGluIG5hdlxyXG5cdFx0ICogMy4gdmlzaWJsZSB0b3AgcGFuZWwgZmFsbGJhY2tcclxuXHRcdCAqXHJcblx0XHQgKiBAcmV0dXJuIHtzdHJpbmd9XHJcblx0XHQgKi9cclxuXHRcdGdldF9hY3RpdmVfdG9wX3RhYl9pZCgpIHtcclxuXHRcdFx0dmFyIGFjdGl2ZV90YWJfaWQgPSAnJztcclxuXHRcdFx0dmFyIGFjdGl2ZV9saW5rICAgPSBudWxsO1xyXG5cdFx0XHR2YXIgYWR2YW5jZWRfcGFuZWwgPSBudWxsO1xyXG5cdFx0XHR2YXIgYnVpbGRlcl9wYW5lbCAgPSBudWxsO1xyXG5cclxuXHRcdFx0aWYgKCB0aGlzLnRvcF90YWJzX25hdiApIHtcclxuXHRcdFx0XHRhY3RpdmVfdGFiX2lkID0gU3RyaW5nKCB0aGlzLnRvcF90YWJzX25hdi5nZXRBdHRyaWJ1dGUoICdkYXRhLWFjdGl2ZS10YWInICkgfHwgJycgKS50cmltKCk7XHJcblx0XHRcdFx0aWYgKCAnJyAhPT0gYWN0aXZlX3RhYl9pZCApIHtcclxuXHRcdFx0XHRcdHJldHVybiBhY3RpdmVfdGFiX2lkO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0YWN0aXZlX2xpbmsgPSB0aGlzLnRvcF90YWJzX25hdi5xdWVyeVNlbGVjdG9yKCAnLndwYmNfdWlfZWxfX2hvcmlzX25hdl9pdGVtLmFjdGl2ZSBbZGF0YS13cGJjLWJmYi10YWJdJyApO1xyXG5cdFx0XHRcdGlmICggYWN0aXZlX2xpbmsgKSB7XHJcblx0XHRcdFx0XHRhY3RpdmVfdGFiX2lkID0gU3RyaW5nKCBhY3RpdmVfbGluay5nZXRBdHRyaWJ1dGUoICdkYXRhLXdwYmMtYmZiLXRhYicgKSB8fCAnJyApLnRyaW0oKTtcclxuXHRcdFx0XHRcdGlmICggJycgIT09IGFjdGl2ZV90YWJfaWQgKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiBhY3RpdmVfdGFiX2lkO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gRmluYWwgZmFsbGJhY2s6IGRldGVjdCB2aXNpYmxlIHBhbmVsLlxyXG5cdFx0XHRhZHZhbmNlZF9wYW5lbCA9IGQucXVlcnlTZWxlY3RvciggJy53cGJjX2JmYl9fdG9wX3RhYl9zZWN0aW9uX19hZHZhbmNlZF90YWInICk7XHJcblx0XHRcdGJ1aWxkZXJfcGFuZWwgID0gZC5xdWVyeVNlbGVjdG9yKCAnLndwYmNfYmZiX190b3BfdGFiX3NlY3Rpb25fX2J1aWxkZXJfdGFiJyApO1xyXG5cclxuXHRcdFx0aWYgKCB0aGlzLmlzX2VsZW1lbnRfdmlzaWJsZSggYWR2YW5jZWRfcGFuZWwgKSApIHtcclxuXHRcdFx0XHRyZXR1cm4gJ2FkdmFuY2VkX3RhYic7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKCB0aGlzLmlzX2VsZW1lbnRfdmlzaWJsZSggYnVpbGRlcl9wYW5lbCApICkge1xyXG5cdFx0XHRcdHJldHVybiAnYnVpbGRlcl90YWInO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4gJyc7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBDaGVjayBlbGVtZW50IHZpc2liaWxpdHkuXHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHtIVE1MRWxlbWVudHxudWxsfSBlbFxyXG5cdFx0ICpcclxuXHRcdCAqIEByZXR1cm4ge2Jvb2xlYW59XHJcblx0XHQgKi9cclxuXHRcdGlzX2VsZW1lbnRfdmlzaWJsZSggZWwgKSB7XHJcblx0XHRcdHZhciBzdHlsZTtcclxuXHJcblx0XHRcdGlmICggISBlbCApIHtcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHN0eWxlID0gdy5nZXRDb21wdXRlZFN0eWxlKCBlbCApO1xyXG5cclxuXHRcdFx0aWYgKCAhIHN0eWxlICkge1xyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKCAnbm9uZScgPT09IHN0eWxlLmRpc3BsYXkgKSB7XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoICdoaWRkZW4nID09PSBzdHlsZS52aXNpYmlsaXR5ICkge1xyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBDaGVjayBpZiBBZHZhbmNlZCBNb2RlIGlzIGFjdGl2ZS5cclxuXHRcdCAqXHJcblx0XHQgKiBAcmV0dXJuIHtib29sZWFufVxyXG5cdFx0ICovXHJcblx0XHRpc19hZHZhbmNlZF9tb2RlX2FjdGl2ZSgpIHtcclxuXHRcdFx0cmV0dXJuICggJ2FkdmFuY2VkX3RhYicgPT09IHRoaXMuZ2V0X2FjdGl2ZV90b3BfdGFiX2lkKCkgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFNob3cgQ29kZSBUb29scyB0YWIgYnV0dG9uLlxyXG5cdFx0ICpcclxuXHRcdCAqIEByZXR1cm4ge3ZvaWR9XHJcblx0XHQgKi9cclxuXHRcdHNob3dfYWR2YW5jZWRfdG9vbHNfdGFiKCkge1xyXG5cdFx0XHR0aGlzLmFkdmFuY2VkX3RhYl93cmFwLnJlbW92ZUF0dHJpYnV0ZSggJ2hpZGRlbicgKTtcclxuXHRcdFx0dGhpcy5hZHZhbmNlZF90YWJfd3JhcC5zZXRBdHRyaWJ1dGUoICdhcmlhLWhpZGRlbicsICdmYWxzZScgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEhpZGUgQ29kZSBUb29scyB0YWIgYnV0dG9uLlxyXG5cdFx0ICpcclxuXHRcdCAqIEByZXR1cm4ge3ZvaWR9XHJcblx0XHQgKi9cclxuXHRcdGhpZGVfYWR2YW5jZWRfdG9vbHNfdGFiKCkge1xyXG5cdFx0XHR0aGlzLmFkdmFuY2VkX3RhYl93cmFwLnNldEF0dHJpYnV0ZSggJ2hpZGRlbicsICd0cnVlJyApO1xyXG5cdFx0XHR0aGlzLmFkdmFuY2VkX3RhYl93cmFwLnNldEF0dHJpYnV0ZSggJ2FyaWEtaGlkZGVuJywgJ3RydWUnICk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBDaGVjayBpZiBDb2RlIFRvb2xzIHBhbmVsIGlzIGN1cnJlbnRseSBhY3RpdmUuXHJcblx0XHQgKlxyXG5cdFx0ICogQHJldHVybiB7Ym9vbGVhbn1cclxuXHRcdCAqL1xyXG5cdFx0aXNfYWR2YW5jZWRfdG9vbHNfcGFuZWxfYWN0aXZlKCkge1xyXG5cdFx0XHRyZXR1cm4gISEgKCB0aGlzLmFkdmFuY2VkX3BhbmVsICYmICEgdGhpcy5hZHZhbmNlZF9wYW5lbC5oYXNBdHRyaWJ1dGUoICdoaWRkZW4nICkgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIE9wZW4gQ29kZSBUb29scyBwYW5lbC5cclxuXHRcdCAqXHJcblx0XHQgKiBAcmV0dXJuIHt2b2lkfVxyXG5cdFx0ICovXHJcblx0XHRvcGVuX2FkdmFuY2VkX3Rvb2xzX3BhbmVsKCkge1xyXG5cdFx0XHR3cGJjX2JmYl9fZGlzcGF0Y2hfc2hvd19wYW5lbCggJ3dwYmNfYmZiX19pbnNwZWN0b3JfYWR2YW5jZWRfdG9vbHMnLCAnd3BiY190YWJfYWR2YW5jZWRfdG9vbHMnICk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBPcGVuIGRlZmF1bHQgYnVpbGRlciByaWdodGJhciBwYW5lbC5cclxuXHRcdCAqXHJcblx0XHQgKiBAcmV0dXJuIHt2b2lkfVxyXG5cdFx0ICovXHJcblx0XHRvcGVuX2RlZmF1bHRfdmlzdWFsX3BhbmVsKCkge1xyXG5cdFx0XHR3cGJjX2JmYl9fZGlzcGF0Y2hfc2hvd19wYW5lbCggJ3dwYmNfYmZiX19wYWxldHRlX2FkZF9uZXcnLCAnd3BiY190YWJfbGlicmFyeScgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFN5bmMgcmlnaHRiYXIgbW9kZSB3aXRoIHRvcCB0YWJzIG1vZGUuXHJcblx0XHQgKlxyXG5cdFx0ICogQHJldHVybiB7dm9pZH1cclxuXHRcdCAqL1xyXG5cdFx0c3luY19yaWdodGJhcl9tb2RlKCkge1xyXG5cdFx0XHR2YXIgaXNfYWR2YW5jZWRfbW9kZSA9IHRoaXMuaXNfYWR2YW5jZWRfbW9kZV9hY3RpdmUoKTtcclxuXHJcblx0XHRcdGlmICggaXNfYWR2YW5jZWRfbW9kZSApIHtcclxuXHRcdFx0XHR0aGlzLnNob3dfYWR2YW5jZWRfdG9vbHNfdGFiKCk7XHJcblxyXG5cdFx0XHRcdGlmICggJ2FkdmFuY2VkJyAhPT0gdGhpcy5sYXN0X21vZGUgKSB7XHJcblx0XHRcdFx0XHR0aGlzLm9wZW5fYWR2YW5jZWRfdG9vbHNfcGFuZWwoKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHRoaXMubGFzdF9tb2RlID0gJ2FkdmFuY2VkJztcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICggdGhpcy5pc19hZHZhbmNlZF90b29sc19wYW5lbF9hY3RpdmUoKSApIHtcclxuXHRcdFx0XHR0aGlzLm9wZW5fZGVmYXVsdF92aXN1YWxfcGFuZWwoKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0dGhpcy5oaWRlX2FkdmFuY2VkX3Rvb2xzX3RhYigpO1xyXG5cdFx0XHR0aGlzLmxhc3RfbW9kZSA9ICdidWlsZGVyJztcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEZhbGxiYWNrIGNsaWNrIGhhbmRsZXIgZm9yIHRvcCB0YWJzLlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XHJcblx0XHQgKlxyXG5cdFx0ICogQHJldHVybiB7dm9pZH1cclxuXHRcdCAqL1xyXG5cdFx0aGFuZGxlX2NsaWNrKCBldmVudCApIHtcclxuXHRcdFx0dmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldC5jbG9zZXN0KCAnW2RhdGEtd3BiYy1iZmItdGFiXScgKTtcclxuXHRcdFx0dmFyIHRoaXNfb2JqID0gdGhpcztcclxuXHJcblx0XHRcdGlmICggISB0YXJnZXQgKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRzZXRUaW1lb3V0KFxyXG5cdFx0XHRcdGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0XHRcdHRoaXNfb2JqLnN5bmNfcmlnaHRiYXJfbW9kZSgpO1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0MFxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0aWYgKCBkLnJlYWR5U3RhdGUgPT09ICdsb2FkaW5nJyApIHtcclxuXHRcdGQuYWRkRXZlbnRMaXN0ZW5lcihcclxuXHRcdFx0J0RPTUNvbnRlbnRMb2FkZWQnLFxyXG5cdFx0XHRmdW5jdGlvbiAoKSB7XHJcblx0XHRcdFx0KCBuZXcgV1BCQ19CRkJfTW9kZV9SaWdodGJhcl9TeW5jKCkgKS5pbml0KCk7XHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblx0fSBlbHNlIHtcclxuXHRcdCggbmV3IFdQQkNfQkZCX01vZGVfUmlnaHRiYXJfU3luYygpICkuaW5pdCgpO1xyXG5cdH1cclxuXHJcbn0pKCB3aW5kb3csIGRvY3VtZW50ICk7IiwiLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbi8vID09IEZpbGUgIC9pbmNsdWRlcy9wYWdlLWZvcm0tYnVpbGRlci9fb3V0L2NvcmUvYmZiLWluc3BlY3Rvci5qcyA9PSBUaW1lIHBvaW50OiAyMDI1LTA5LTA2IDE0OjA4XHJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4oZnVuY3Rpb24gKHcpIHtcclxuXHQndXNlIHN0cmljdCc7XHJcblxyXG5cdC8vIDEpIEFjdGlvbnMgcmVnaXN0cnkuXHJcblxyXG5cdC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgKGN0eDogSW5zcGVjdG9yQWN0aW9uQ29udGV4dCkgPT4gdm9pZD59ICovXHJcblx0Y29uc3QgX19JTlNQRUNUT1JfQUNUSU9OU19NQVBfXyA9IE9iamVjdC5jcmVhdGUoIG51bGwgKTtcclxuXHJcblx0Ly8gQnVpbHQtaW5zLlxyXG5cdF9fSU5TUEVDVE9SX0FDVElPTlNfTUFQX19bJ2Rlc2VsZWN0J10gPSAoeyBidWlsZGVyIH0pID0+IHtcclxuXHRcdGJ1aWxkZXI/LnNlbGVjdF9maWVsZD8uKCBudWxsICk7XHJcblx0fTtcclxuXHJcblx0X19JTlNQRUNUT1JfQUNUSU9OU19NQVBfX1snc2Nyb2xsdG8nXSA9ICh7IGJ1aWxkZXIsIGVsIH0pID0+IHtcclxuXHRcdGlmICggIWVsIHx8ICFkb2N1bWVudC5ib2R5LmNvbnRhaW5zKCBlbCApICkgcmV0dXJuO1xyXG5cdFx0YnVpbGRlcj8uc2VsZWN0X2ZpZWxkPy4oIGVsLCB7IHNjcm9sbEludG9WaWV3OiB0cnVlIH0gKTtcclxuXHRcdGVsLmNsYXNzTGlzdC5hZGQoICd3cGJjX2JmYl9fc2Nyb2xsLXB1bHNlJyApO1xyXG5cdFx0c2V0VGltZW91dCggKCkgPT4gZWwuY2xhc3NMaXN0LnJlbW92ZSggJ3dwYmNfYmZiX19zY3JvbGwtcHVsc2UnICksIDcwMCApO1xyXG5cdH07XHJcblxyXG5cdF9fSU5TUEVDVE9SX0FDVElPTlNfTUFQX19bJ21vdmUtdXAnXSA9ICh7IGJ1aWxkZXIsIGVsIH0pID0+IHtcclxuXHRcdGlmICggIWVsICkgcmV0dXJuO1xyXG5cdFx0YnVpbGRlcj8ubW92ZV9pdGVtPy4oIGVsLCAndXAnICk7XHJcblx0XHQvLyBTY3JvbGwgYWZ0ZXIgdGhlIERPTSBoYXMgc2V0dGxlZC5cclxuXHRcdHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiBfX0lOU1BFQ1RPUl9BQ1RJT05TX01BUF9fWydzY3JvbGx0byddKHsgYnVpbGRlciwgZWwgfSkpO1xyXG5cdH07XHJcblxyXG5cdF9fSU5TUEVDVE9SX0FDVElPTlNfTUFQX19bJ21vdmUtZG93biddID0gKHsgYnVpbGRlciwgZWwgfSkgPT4ge1xyXG5cdFx0aWYgKCAhZWwgKSByZXR1cm47XHJcblx0XHRidWlsZGVyPy5tb3ZlX2l0ZW0/LiggZWwsICdkb3duJyApO1xyXG5cdFx0Ly8gU2Nyb2xsIGFmdGVyIHRoZSBET00gaGFzIHNldHRsZWQuXHJcblx0XHRyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gX19JTlNQRUNUT1JfQUNUSU9OU19NQVBfX1snc2Nyb2xsdG8nXSh7IGJ1aWxkZXIsIGVsIH0pKTtcclxuXHR9O1xyXG5cclxuXHRfX0lOU1BFQ1RPUl9BQ1RJT05TX01BUF9fWydkZWxldGUnXSA9ICh7IGJ1aWxkZXIsIGVsLCBjb25maXJtID0gdy5jb25maXJtIH0pID0+IHtcclxuXHRcdGlmICggIWVsICkgcmV0dXJuO1xyXG5cdFx0Y29uc3QgaXNfZmllbGQgPSBlbC5jbGFzc0xpc3QuY29udGFpbnMoICd3cGJjX2JmYl9fZmllbGQnICk7XHJcblx0XHRjb25zdCBsYWJlbCAgICA9IGlzX2ZpZWxkXHJcblx0XHRcdD8gKGVsLnF1ZXJ5U2VsZWN0b3IoICcud3BiY19iZmJfX2ZpZWxkLWxhYmVsJyApPy50ZXh0Q29udGVudCB8fCBlbC5kYXRhc2V0Py5pZCB8fCAnZmllbGQnKVxyXG5cdFx0XHQ6IChlbC5kYXRhc2V0Py5pZCB8fCAnc2VjdGlvbicpO1xyXG5cclxuXHRcdFVJLk1vZGFsX0NvbmZpcm1fRGVsZXRlLm9wZW4oIGxhYmVsLCAoKSA9PiB7XHJcblx0XHRcdC8vIENlbnRyYWwgY29tbWFuZCB3aWxsIHJlbW92ZSwgZW1pdCBldmVudHMsIGFuZCByZXNlbGVjdCBuZWlnaGJvciAod2hpY2ggcmUtYmluZHMgSW5zcGVjdG9yKS5cclxuXHRcdFx0YnVpbGRlcj8uZGVsZXRlX2l0ZW0/LiggZWwgKTtcclxuXHRcdH0gKTtcclxuXHJcblx0fTtcclxuXHJcblx0X19JTlNQRUNUT1JfQUNUSU9OU19NQVBfX1snZHVwbGljYXRlJ10gPSAoeyBidWlsZGVyLCBlbCB9KSA9PiB7XHJcblx0XHRpZiAoICFlbCApIHJldHVybjtcclxuXHRcdGNvbnN0IGNsb25lID0gYnVpbGRlcj8uZHVwbGljYXRlX2l0ZW0/LiggZWwgKTtcclxuXHRcdGlmICggY2xvbmUgKSBidWlsZGVyPy5zZWxlY3RfZmllbGQ/LiggY2xvbmUsIHsgc2Nyb2xsSW50b1ZpZXc6IHRydWUgfSApO1xyXG5cdH07XHJcblxyXG5cdC8vIFB1YmxpYyBBUEkuXHJcblx0dy5XUEJDX0JGQl9JbnNwZWN0b3JfQWN0aW9ucyA9IHtcclxuXHRcdHJ1bihuYW1lLCBjdHgpIHtcclxuXHRcdFx0Y29uc3QgZm4gPSBfX0lOU1BFQ1RPUl9BQ1RJT05TX01BUF9fW25hbWVdO1xyXG5cdFx0XHRpZiAoIHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJyApIGZuKCBjdHggKTtcclxuXHRcdFx0ZWxzZSBjb25zb2xlLndhcm4oICdXUEJDLiBJbnNwZWN0b3IgYWN0aW9uIG5vdCBmb3VuZDonLCBuYW1lICk7XHJcblx0XHR9LFxyXG5cdFx0cmVnaXN0ZXIobmFtZSwgaGFuZGxlcikge1xyXG5cdFx0XHRpZiAoICFuYW1lIHx8IHR5cGVvZiBoYW5kbGVyICE9PSAnZnVuY3Rpb24nICkge1xyXG5cdFx0XHRcdHRocm93IG5ldyBFcnJvciggJ3JlZ2lzdGVyKG5hbWUsIGhhbmRsZXIpOiBpbnZhbGlkIGFyZ3VtZW50cycgKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRfX0lOU1BFQ1RPUl9BQ1RJT05TX01BUF9fW25hbWVdID0gaGFuZGxlcjtcclxuXHRcdH0sXHJcblx0XHRoYXMobmFtZSkge1xyXG5cdFx0XHRyZXR1cm4gdHlwZW9mIF9fSU5TUEVDVE9SX0FDVElPTlNfTUFQX19bbmFtZV0gPT09ICdmdW5jdGlvbic7XHJcblx0XHR9XHJcblx0fTtcclxuXHJcblx0Ly8gMikgSW5zcGVjdG9yIEZhY3RvcnkuXHJcblxyXG5cdHZhciBVSSA9ICh3LldQQkNfQkZCX0NvcmUuVUkgPSB3LldQQkNfQkZCX0NvcmUuVUkgfHwge30pO1xyXG5cclxuXHQvLyBHbG9iYWwgSHlicmlkKysgcmVnaXN0cmllcyAoa2VlcCBwdWJsaWMpLlxyXG5cdHcud3BiY19iZmJfaW5zcGVjdG9yX2ZhY3Rvcnlfc2xvdHMgICAgICA9IHcud3BiY19iZmJfaW5zcGVjdG9yX2ZhY3Rvcnlfc2xvdHMgfHwge307XHJcblx0dy53cGJjX2JmYl9pbnNwZWN0b3JfZmFjdG9yeV92YWx1ZV9mcm9tID0gdy53cGJjX2JmYl9pbnNwZWN0b3JfZmFjdG9yeV92YWx1ZV9mcm9tIHx8IHt9O1xyXG5cclxuXHQvLyBEZWZpbmUgRmFjdG9yeSBvbmx5IGlmIG1pc3NpbmcgKG5vIGVhcmx5IHJldHVybiBmb3IgdGhlIHdob2xlIGJ1bmRsZSkuXHJcblx0Ly8gYWx3YXlzIGRlZmluZS9yZXBsYWNlIEZhY3RvcnlcclxuXHR7XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBVdGlsaXR5OiBjcmVhdGUgZWxlbWVudCB3aXRoIGF0dHJpYnV0ZXMgYW5kIGNoaWxkcmVuLlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSB0YWdcclxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0PX0gYXR0cnNcclxuXHRcdCAqIEBwYXJhbSB7KE5vZGV8c3RyaW5nfEFycmF5PE5vZGV8c3RyaW5nPik9fSBjaGlsZHJlblxyXG5cdFx0ICogQHJldHVybnMge0hUTUxFbGVtZW50fVxyXG5cdFx0ICovXHJcblx0XHRmdW5jdGlvbiBlbCh0YWcsIGF0dHJzLCBjaGlsZHJlbikge1xyXG5cdFx0XHR2YXIgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIHRhZyApO1xyXG5cdFx0XHRpZiAoIGF0dHJzICkge1xyXG5cdFx0XHRcdE9iamVjdC5rZXlzKCBhdHRycyApLmZvckVhY2goIGZ1bmN0aW9uIChrKSB7XHJcblx0XHRcdFx0XHR2YXIgdiA9IGF0dHJzW2tdO1xyXG5cdFx0XHRcdFx0aWYgKCB2ID09IG51bGwgKSByZXR1cm47XHJcblx0XHRcdFx0XHRpZiAoIGsgPT09ICdjbGFzcycgKSB7XHJcblx0XHRcdFx0XHRcdG5vZGUuY2xhc3NOYW1lID0gdjtcclxuXHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKCBrID09PSAnZGF0YXNldCcgKSB7XHJcblx0XHRcdFx0XHRcdE9iamVjdC5rZXlzKCB2ICkuZm9yRWFjaCggZnVuY3Rpb24gKGRrKSB7XHJcblx0XHRcdFx0XHRcdFx0bm9kZS5kYXRhc2V0W2RrXSA9IFN0cmluZyggdltka10gKTtcclxuXHRcdFx0XHRcdFx0fSApO1xyXG5cdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRpZiAoIGsgPT09ICdjaGVja2VkJyAmJiB0eXBlb2YgdiA9PT0gJ2Jvb2xlYW4nICkge1xyXG5cdFx0XHRcdFx0XHRpZiAoIHYgKSBub2RlLnNldEF0dHJpYnV0ZSggJ2NoZWNrZWQnLCAnY2hlY2tlZCcgKTtcclxuXHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKCBrID09PSAnZGlzYWJsZWQnICYmIHR5cGVvZiB2ID09PSAnYm9vbGVhbicgKSB7XHJcblx0XHRcdFx0XHRcdGlmICggdiApIG5vZGUuc2V0QXR0cmlidXRlKCAnZGlzYWJsZWQnLCAnZGlzYWJsZWQnICk7XHJcblx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdC8vIG5vcm1hbGl6ZSBib29sZWFuIGF0dHJpYnV0ZXMgdG8gc3RyaW5ncy5cclxuXHRcdFx0XHRcdGlmICggdHlwZW9mIHYgPT09ICdib29sZWFuJyApIHtcclxuXHRcdFx0XHRcdFx0bm9kZS5zZXRBdHRyaWJ1dGUoIGssIHYgPyAndHJ1ZScgOiAnZmFsc2UnICk7XHJcblx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdG5vZGUuc2V0QXR0cmlidXRlKCBrLCBTdHJpbmcoIHYgKSApO1xyXG5cdFx0XHRcdH0gKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoIGNoaWxkcmVuICkge1xyXG5cdFx0XHRcdChBcnJheS5pc0FycmF5KCBjaGlsZHJlbiApID8gY2hpbGRyZW4gOiBbIGNoaWxkcmVuIF0pLmZvckVhY2goIGZ1bmN0aW9uIChjKSB7XHJcblx0XHRcdFx0XHRpZiAoIGMgPT0gbnVsbCApIHJldHVybjtcclxuXHRcdFx0XHRcdG5vZGUuYXBwZW5kQ2hpbGQoICh0eXBlb2YgYyA9PT0gJ3N0cmluZycpID8gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIGMgKSA6IGMgKTtcclxuXHRcdFx0XHR9ICk7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIG5vZGU7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBCdWlsZCBhIHRvZ2dsZSBjb250cm9sIHJvdyAoY2hlY2tib3ggcmVuZGVyZWQgYXMgdG9nZ2xlKS5cclxuXHRcdCAqXHJcblx0XHQgKiBTdHJ1Y3R1cmU6XHJcblx0XHQgKiA8ZGl2IGNsYXNzPVwiaW5zcGVjdG9yX19yb3cgaW5zcGVjdG9yX19yb3ctLXRvZ2dsZVwiPlxyXG5cdFx0ICogICA8ZGl2IGNsYXNzPVwiaW5zcGVjdG9yX19jb250cm9sIHdwYmNfdWlfX3RvZ2dsZVwiPlxyXG5cdFx0ICogICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBpZD1cIklEXCIgZGF0YS1pbnNwZWN0b3Ita2V5PVwiS0VZXCIgY2xhc3M9XCJpbnNwZWN0b3JfX2lucHV0XCIgY2hlY2tlZD5cclxuXHRcdCAqICAgICA8bGFiZWwgY2xhc3M9XCJ3cGJjX3VpX190b2dnbGVfaWNvblwiICBmb3I9XCJJRFwiPjwvbGFiZWw+XHJcblx0XHQgKiAgICAgPGxhYmVsIGNsYXNzPVwid3BiY191aV9fdG9nZ2xlX2xhYmVsXCIgZm9yPVwiSURcIj5MYWJlbCB0ZXh0PC9sYWJlbD5cclxuXHRcdCAqICAgPC9kaXY+XHJcblx0XHQgKiA8L2Rpdj5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRfaWRcclxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcclxuXHRcdCAqIEBwYXJhbSB7Ym9vbGVhbn0gY2hlY2tlZFxyXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IGxhYmVsX3RleHRcclxuXHRcdCAqIEByZXR1cm5zIHtIVE1MRWxlbWVudH1cclxuXHRcdCAqL1xyXG5cdFx0ZnVuY3Rpb24gYnVpbGRfdG9nZ2xlX3JvdyggaW5wdXRfaWQsIGtleSwgY2hlY2tlZCwgbGFiZWxfdGV4dCApIHtcclxuXHJcblx0XHRcdHZhciByb3dfZWwgICAgPSBlbCggJ2RpdicsIHsgJ2NsYXNzJzogJ2luc3BlY3Rvcl9fcm93IGluc3BlY3Rvcl9fcm93LS10b2dnbGUnIH0gKTtcclxuXHRcdFx0dmFyIGN0cmxfd3JhcCA9IGVsKCAnZGl2JywgeyAnY2xhc3MnOiAnaW5zcGVjdG9yX19jb250cm9sIHdwYmNfdWlfX3RvZ2dsZScgfSApO1xyXG5cclxuXHRcdFx0dmFyIGlucHV0X2VsID0gZWwoICdpbnB1dCcsIHtcclxuXHRcdFx0XHRpZCAgICAgICAgICAgICAgICAgIDogaW5wdXRfaWQsXHJcblx0XHRcdFx0dHlwZSAgICAgICAgICAgICAgICA6ICdjaGVja2JveCcsXHJcblx0XHRcdFx0J2RhdGEtaW5zcGVjdG9yLWtleSc6IGtleSxcclxuXHRcdFx0XHQnY2xhc3MnICAgICAgICAgICAgIDogJ2luc3BlY3Rvcl9faW5wdXQnLFxyXG5cdFx0XHRcdGNoZWNrZWQgICAgICAgICAgICAgOiAhIWNoZWNrZWQsXHJcblx0XHRcdFx0cm9sZSAgICAgICAgICAgICAgICA6ICdzd2l0Y2gnLFxyXG5cdFx0XHRcdCdhcmlhLWNoZWNrZWQnICAgICAgOiAhIWNoZWNrZWRcclxuXHRcdFx0fSApO1xyXG5cdFx0XHR2YXIgaWNvbl9sYmwgPSBlbCggJ2xhYmVsJywgeyAnY2xhc3MnOiAnd3BiY191aV9fdG9nZ2xlX2ljb24nLCAnZm9yJzogaW5wdXRfaWQgfSApO1xyXG5cdFx0XHR2YXIgdGV4dF9sYmwgPSBlbCggJ2xhYmVsJywgeyAnY2xhc3MnOiAnd3BiY191aV9fdG9nZ2xlX2xhYmVsJywgJ2Zvcic6IGlucHV0X2lkIH0sIGxhYmVsX3RleHQgfHwgJycgKTtcclxuXHJcblx0XHRcdGN0cmxfd3JhcC5hcHBlbmRDaGlsZCggaW5wdXRfZWwgKTtcclxuXHRcdFx0Y3RybF93cmFwLmFwcGVuZENoaWxkKCBpY29uX2xibCApO1xyXG5cdFx0XHRjdHJsX3dyYXAuYXBwZW5kQ2hpbGQoIHRleHRfbGJsICk7XHJcblxyXG5cdFx0XHRyb3dfZWwuYXBwZW5kQ2hpbGQoIGN0cmxfd3JhcCApO1xyXG5cdFx0XHRyZXR1cm4gcm93X2VsO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdCAqIFV0aWxpdHk6IGNob29zZSBpbml0aWFsIHZhbHVlIGZyb20gZGF0YSBvciBzY2hlbWEgZGVmYXVsdC5cclxuXHQgKi9cclxuXHRcdGZ1bmN0aW9uIGdldF9pbml0aWFsX3ZhbHVlKGtleSwgZGF0YSwgcHJvcHNfc2NoZW1hKSB7XHJcblx0XHRcdGlmICggZGF0YSAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoIGRhdGEsIGtleSApICkgcmV0dXJuIGRhdGFba2V5XTtcclxuXHRcdFx0dmFyIG1ldGEgPSBwcm9wc19zY2hlbWEgJiYgcHJvcHNfc2NoZW1hW2tleV07XHJcblx0XHRcdHJldHVybiAobWV0YSAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoIG1ldGEsICdkZWZhdWx0JyApKSA/IG1ldGEuZGVmYXVsdCA6ICcnO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdCAqIFV0aWxpdHk6IGNvZXJjZSB2YWx1ZSBieSBzY2hlbWEgdHlwZS5cclxuXHQgKi9cclxuXHJcblxyXG5cdFx0ZnVuY3Rpb24gY29lcmNlX2J5X3R5cGUodmFsdWUsIHR5cGUpIHtcclxuXHRcdFx0c3dpdGNoICggdHlwZSApIHtcclxuXHRcdFx0XHRjYXNlICdudW1iZXInOlxyXG5cdFx0XHRcdGNhc2UgJ2ludCc6XHJcblx0XHRcdFx0Y2FzZSAnZmxvYXQnOlxyXG5cdFx0XHRcdFx0aWYgKCB2YWx1ZSA9PT0gJycgfHwgdmFsdWUgPT0gbnVsbCApIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuICcnO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0dmFyIG4gPSBOdW1iZXIoIHZhbHVlICk7XHJcblx0XHRcdFx0XHRyZXR1cm4gaXNOYU4oIG4gKSA/ICcnIDogbjtcclxuXHRcdFx0XHRjYXNlICdib29sZWFuJzpcclxuXHRcdFx0XHRcdHJldHVybiAhIXZhbHVlO1xyXG5cdFx0XHRcdGNhc2UgJ2FycmF5JzpcclxuXHRcdFx0XHRcdHJldHVybiBBcnJheS5pc0FycmF5KCB2YWx1ZSApID8gdmFsdWUgOiBbXTtcclxuXHRcdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdFx0cmV0dXJuICh2YWx1ZSA9PSBudWxsKSA/ICcnIDogU3RyaW5nKCB2YWx1ZSApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0ICogTm9ybWFsaXplIDxzZWxlY3Q+IG9wdGlvbnMgKGFycmF5IG9mIHt2YWx1ZSxsYWJlbH0gb3IgbWFwIHt2YWx1ZTpsYWJlbH0pLlxyXG5cdCAqL1xyXG5cdFx0ZnVuY3Rpb24gbm9ybWFsaXplX3NlbGVjdF9vcHRpb25zKG9wdGlvbnMpIHtcclxuXHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCBvcHRpb25zICkgKSB7XHJcblx0XHRcdFx0cmV0dXJuIG9wdGlvbnMubWFwKCBmdW5jdGlvbiAobykge1xyXG5cdFx0XHRcdFx0aWYgKCB0eXBlb2YgbyA9PT0gJ29iamVjdCcgJiYgbyAmJiAndmFsdWUnIGluIG8gKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiB7IHZhbHVlOiBTdHJpbmcoIG8udmFsdWUgKSwgbGFiZWw6IFN0cmluZyggby5sYWJlbCB8fCBvLnZhbHVlICkgfTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHJldHVybiB7IHZhbHVlOiBTdHJpbmcoIG8gKSwgbGFiZWw6IFN0cmluZyggbyApIH07XHJcblx0XHRcdFx0fSApO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICggb3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucyA9PT0gJ29iamVjdCcgKSB7XHJcblx0XHRcdFx0cmV0dXJuIE9iamVjdC5rZXlzKCBvcHRpb25zICkubWFwKCBmdW5jdGlvbiAoaykge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHsgdmFsdWU6IFN0cmluZyggayApLCBsYWJlbDogU3RyaW5nKCBvcHRpb25zW2tdICkgfTtcclxuXHRcdFx0XHR9ICk7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIFtdO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKiBQYXJzZSBhIENTUyBsZW5ndGggbGlrZSBcIjEyMHB4XCIgb3IgXCI4MCVcIiBpbnRvIHsgdmFsdWU6bnVtYmVyLCB1bml0OnN0cmluZyB9LiAqL1xyXG5cdFx0ZnVuY3Rpb24gcGFyc2VfbGVuKHZhbHVlLCBmYWxsYmFja191bml0KSB7XHJcblx0XHRcdHZhbHVlID0gKHZhbHVlID09IG51bGwpID8gJycgOiBTdHJpbmcoIHZhbHVlICkudHJpbSgpO1xyXG5cdFx0XHR2YXIgbSA9IHZhbHVlLm1hdGNoKCAvXigtP1xcZCsoPzpcXC5cXGQrKT8pKHB4fCV8cmVtfGVtKSQvaSApO1xyXG5cdFx0XHRpZiAoIG0gKSB7XHJcblx0XHRcdFx0cmV0dXJuIHsgdmFsdWU6IHBhcnNlRmxvYXQoIG1bMV0gKSwgdW5pdDogbVsyXS50b0xvd2VyQ2FzZSgpIH07XHJcblx0XHRcdH1cclxuXHRcdFx0Ly8gcGxhaW4gbnVtYmVyIC0+IGFzc3VtZSBmYWxsYmFjayB1bml0XHJcblx0XHRcdGlmICggdmFsdWUgIT09ICcnICYmICFpc05hTiggTnVtYmVyKCB2YWx1ZSApICkgKSB7XHJcblx0XHRcdFx0cmV0dXJuIHsgdmFsdWU6IE51bWJlciggdmFsdWUgKSwgdW5pdDogKGZhbGxiYWNrX3VuaXQgfHwgJ3B4JykgfTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4geyB2YWx1ZTogMCwgdW5pdDogKGZhbGxiYWNrX3VuaXQgfHwgJ3B4JykgfTtcclxuXHRcdH1cclxuXHJcblx0XHQvKiogQ2xhbXAgaGVscGVyLiAqL1xyXG5cdFx0ZnVuY3Rpb24gY2xhbXBfbnVtKHYsIG1pbiwgbWF4KSB7XHJcblx0XHRcdGlmICggdHlwZW9mIHYgIT09ICdudW1iZXInIHx8IGlzTmFOKCB2ICkgKSByZXR1cm4gKG1pbiAhPSBudWxsID8gbWluIDogMCk7XHJcblx0XHRcdGlmICggbWluICE9IG51bGwgJiYgdiA8IG1pbiApIHYgPSBtaW47XHJcblx0XHRcdGlmICggbWF4ICE9IG51bGwgJiYgdiA+IG1heCApIHYgPSBtYXg7XHJcblx0XHRcdHJldHVybiB2O1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEluaXRpYWxpemUgQ29sb3JpcyBwaWNrZXJzIGluIGEgZ2l2ZW4gcm9vdC5cclxuXHRcdC8vIFJlbGllcyBvbiBDb2xvcmlzIGJlaW5nIGVucXVldWVkIChzZWUgYmZiLWJvb3RzdHJhcC5waHApLlxyXG5cdFx0ZnVuY3Rpb24gaW5pdF9jb2xvcmlzX3BpY2tlcnMocm9vdCkge1xyXG5cdFx0XHRpZiAoICFyb290IHx8ICF3LkNvbG9yaXMgKSByZXR1cm47XHJcblx0XHRcdC8vIE1hcmsgaW5wdXRzIHdlIHdhbnQgQ29sb3JpcyB0byBoYW5kbGUuXHJcblx0XHRcdHZhciBpbnB1dHMgPSByb290LnF1ZXJ5U2VsZWN0b3JBbGwoICdpbnB1dFtkYXRhLWluc3BlY3Rvci10eXBlPVwiY29sb3JcIl0nICk7XHJcblx0XHRcdGlmICggIWlucHV0cy5sZW5ndGggKSByZXR1cm47XHJcblxyXG5cdFx0XHQvLyBBZGQgYSBzdGFibGUgY2xhc3MgZm9yIENvbG9yaXMgdGFyZ2V0aW5nOyBhdm9pZCBkb3VibGUtaW5pdGlhbGl6aW5nLlxyXG5cdFx0XHRpbnB1dHMuZm9yRWFjaCggZnVuY3Rpb24gKGlucHV0KSB7XHJcblx0XHRcdFx0aWYgKCBpbnB1dC5jbGFzc0xpc3QuY29udGFpbnMoICd3cGJjX2JmYl9jb2xvcmlzJyApICkgcmV0dXJuO1xyXG5cdFx0XHRcdGlucHV0LmNsYXNzTGlzdC5hZGQoICd3cGJjX2JmYl9jb2xvcmlzJyApO1xyXG5cdFx0XHR9ICk7XHJcblxyXG5cdFx0XHQvLyBDcmVhdGUvcmVmcmVzaCBhIENvbG9yaXMgaW5zdGFuY2UgYm91bmQgdG8gdGhlc2UgaW5wdXRzLlxyXG5cdFx0XHQvLyBLZWVwIEhFWCBvdXRwdXQgdG8gbWF0Y2ggc2NoZW1hIGRlZmF1bHRzIChlLmcuLCBcIiNlMGUwZTBcIikuXHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0dy5Db2xvcmlzKCB7XHJcblx0XHRcdFx0XHRlbCAgICAgICA6ICcud3BiY19iZmJfY29sb3JpcycsXHJcblx0XHRcdFx0XHRhbHBoYSAgICA6IGZhbHNlLFxyXG5cdFx0XHRcdFx0Zm9ybWF0ICAgOiAnaGV4JyxcclxuXHRcdFx0XHRcdHRoZW1lTW9kZTogJ2F1dG8nXHJcblx0XHRcdFx0fSApO1xyXG5cdFx0XHRcdC8vIENvbG9yaXMgYWxyZWFkeSBkaXNwYXRjaGVzICdpbnB1dCcgZXZlbnRzIG9uIHZhbHVlIGNoYW5nZXMuXHJcblx0XHRcdH0gY2F0Y2ggKCBlICkge1xyXG5cdFx0XHRcdC8vIE5vbi1mYXRhbDogaWYgQ29sb3JpcyB0aHJvd3MgKHJhcmUpLCB0aGUgdGV4dCBpbnB1dCBzdGlsbCB3b3Jrcy5cclxuXHRcdFx0XHRjb25zb2xlLndhcm4oICdXUEJDIEluc3BlY3RvcjogQ29sb3JpcyBpbml0IGZhaWxlZDonLCBlICk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEJ1aWxkOiBzbGlkZXIgKyBudW1iZXIgaW4gb25lIHJvdyAod3JpdGVzIHRvIGEgc2luZ2xlIGRhdGEga2V5KS5cclxuXHRcdCAqIENvbnRyb2wgbWV0YTogeyB0eXBlOidyYW5nZV9udW1iZXInLCBrZXksIGxhYmVsLCBtaW4sIG1heCwgc3RlcCB9XHJcblx0XHQgKi9cclxuXHRcdGZ1bmN0aW9uIGJ1aWxkX3JhbmdlX251bWJlcl9yb3coaW5wdXRfaWQsIGtleSwgbGFiZWxfdGV4dCwgdmFsdWUsIG1ldGEpIHtcclxuXHRcdFx0dmFyIHJvd19lbCAgID0gZWwoJ2RpdicsIHsgJ2NsYXNzJzogJ2luc3BlY3Rvcl9fcm93JyB9KTtcclxuXHRcdFx0dmFyIGxhYmVsX2VsID0gZWwoJ2xhYmVsJywgeyAnZm9yJzogaW5wdXRfaWQsICdjbGFzcyc6ICdpbnNwZWN0b3JfX2xhYmVsJyB9LCBsYWJlbF90ZXh0IHx8IGtleSB8fCAnJyk7XHJcblx0XHRcdHZhciBjdHJsICAgICA9IGVsKCdkaXYnLCB7ICdjbGFzcyc6ICdpbnNwZWN0b3JfX2NvbnRyb2wnIH0pO1xyXG5cclxuXHRcdFx0dmFyIG1pbiAgPSAobWV0YSAmJiBtZXRhLm1pbiAhPSBudWxsKSAgPyBtZXRhLm1pbiAgOiAwO1xyXG5cdFx0XHR2YXIgbWF4ICA9IChtZXRhICYmIG1ldGEubWF4ICE9IG51bGwpICA/IG1ldGEubWF4ICA6IDEwMDtcclxuXHRcdFx0dmFyIHN0ZXAgPSAobWV0YSAmJiBtZXRhLnN0ZXAgIT0gbnVsbCkgPyBtZXRhLnN0ZXAgOiAxO1xyXG5cclxuXHRcdFx0dmFyIGdyb3VwID0gZWwoJ2RpdicsIHsgJ2NsYXNzJzogJ3dwYmNfbGVuX2dyb3VwIHdwYmNfaW5saW5lX2lucHV0cycsICdkYXRhLWxlbi1ncm91cCc6IGtleSB9KTtcclxuXHJcblx0XHRcdHZhciByYW5nZSA9IGVsKCdpbnB1dCcsIHtcclxuXHRcdFx0XHR0eXBlIDogJ3JhbmdlJyxcclxuXHRcdFx0XHQnY2xhc3MnOiAnaW5zcGVjdG9yX19pbnB1dCcsXHJcblx0XHRcdFx0J2RhdGEtbGVuLXJhbmdlJzogJycsXHJcblx0XHRcdFx0bWluICA6IFN0cmluZyhtaW4pLFxyXG5cdFx0XHRcdG1heCAgOiBTdHJpbmcobWF4KSxcclxuXHRcdFx0XHRzdGVwIDogU3RyaW5nKHN0ZXApLFxyXG5cdFx0XHRcdHZhbHVlOiBTdHJpbmcodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PT0gJycgPyBtaW4gOiB2YWx1ZSlcclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0XHR2YXIgbnVtID0gZWwoJ2lucHV0Jywge1xyXG5cdFx0XHRcdGlkICAgOiBpbnB1dF9pZCxcclxuXHRcdFx0XHR0eXBlIDogJ251bWJlcicsXHJcblx0XHRcdFx0J2NsYXNzJzogJ2luc3BlY3Rvcl9faW5wdXQgaW5zcGVjdG9yX193XzMwJyxcclxuXHRcdFx0XHQnZGF0YS1sZW4tdmFsdWUnOiAnJyxcclxuXHRcdFx0XHQnZGF0YS1pbnNwZWN0b3Ita2V5Jzoga2V5LFxyXG5cdFx0XHRcdG1pbiAgOiBTdHJpbmcobWluKSxcclxuXHRcdFx0XHRtYXggIDogU3RyaW5nKG1heCksXHJcblx0XHRcdFx0c3RlcCA6IFN0cmluZyhzdGVwKSxcclxuXHRcdFx0XHR2YWx1ZTogKHZhbHVlID09IG51bGwgfHwgdmFsdWUgPT09ICcnKSA/IFN0cmluZyhtaW4pIDogU3RyaW5nKHZhbHVlKVxyXG5cdFx0XHR9KTtcclxuXHJcblx0XHRcdGdyb3VwLmFwcGVuZENoaWxkKHJhbmdlKTtcclxuXHRcdFx0Z3JvdXAuYXBwZW5kQ2hpbGQobnVtKTtcclxuXHRcdFx0Y3RybC5hcHBlbmRDaGlsZChncm91cCk7XHJcblx0XHRcdHJvd19lbC5hcHBlbmRDaGlsZChsYWJlbF9lbCk7XHJcblx0XHRcdHJvd19lbC5hcHBlbmRDaGlsZChjdHJsKTtcclxuXHRcdFx0cmV0dXJuIHJvd19lbDtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEJ1aWxkOiAobnVtYmVyICsgdW5pdCkgKyBzbGlkZXIsIHdyaXRpbmcgYSAqc2luZ2xlKiBjb21iaW5lZCBzdHJpbmcgdG8gYGtleWAuXHJcblx0XHQgKiBDb250cm9sIG1ldGE6XHJcblx0XHQgKiB7XHJcblx0XHQgKiAgIHR5cGU6J2xlbicsIGtleSwgbGFiZWwsIHVuaXRzOlsncHgnLCclJywncmVtJywnZW0nXSxcclxuXHRcdCAqICAgc2xpZGVyOiB7IHB4OnttaW46MCxtYXg6NTEyLHN0ZXA6MX0sICclJzp7bWluOjAsbWF4OjEwMCxzdGVwOjF9LCByZW06e21pbjowLG1heDoxMCxzdGVwOjAuMX0sIGVtOnsuLi59IH0sXHJcblx0XHQgKiAgIGZhbGxiYWNrX3VuaXQ6J3B4J1xyXG5cdFx0ICogfVxyXG5cdFx0ICovXHJcblx0XHRmdW5jdGlvbiBidWlsZF9sZW5fY29tcG91bmRfcm93KGNvbnRyb2wsIHByb3BzX3NjaGVtYSwgZGF0YSwgdWlkKSB7XHJcblx0XHRcdHZhciBrZXkgICAgICAgID0gY29udHJvbC5rZXk7XHJcblx0XHRcdHZhciBsYWJlbF90ZXh0ID0gY29udHJvbC5sYWJlbCB8fCBrZXkgfHwgJyc7XHJcblx0XHRcdHZhciBkZWZfc3RyICAgID0gZ2V0X2luaXRpYWxfdmFsdWUoIGtleSwgZGF0YSwgcHJvcHNfc2NoZW1hICk7XHJcblx0XHRcdHZhciBmYWxsYmFja191ID0gY29udHJvbC5mYWxsYmFja191bml0IHx8ICdweCc7XHJcblx0XHRcdHZhciBwYXJzZWQgICAgID0gcGFyc2VfbGVuKCBkZWZfc3RyLCBmYWxsYmFja191ICk7XHJcblxyXG5cdFx0XHR2YXIgcm93ICAgPSBlbCggJ2RpdicsIHsgJ2NsYXNzJzogJ2luc3BlY3Rvcl9fcm93JyB9ICk7XHJcblx0XHRcdHZhciBsYWJlbCA9IGVsKCAnbGFiZWwnLCB7ICdjbGFzcyc6ICdpbnNwZWN0b3JfX2xhYmVsJyB9LCBsYWJlbF90ZXh0ICk7XHJcblx0XHRcdHZhciBjdHJsICA9IGVsKCAnZGl2JywgeyAnY2xhc3MnOiAnaW5zcGVjdG9yX19jb250cm9sJyB9ICk7XHJcblxyXG5cdFx0XHR2YXIgdW5pdHMgICAgICA9IEFycmF5LmlzQXJyYXkoIGNvbnRyb2wudW5pdHMgKSAmJiBjb250cm9sLnVuaXRzLmxlbmd0aCA/IGNvbnRyb2wudW5pdHMgOiBbICdweCcsICclJywgJ3JlbScsICdlbScgXTtcclxuXHRcdFx0dmFyIHNsaWRlcl9tYXAgPSBjb250cm9sLnNsaWRlciB8fCB7XHJcblx0XHRcdFx0J3B4JyA6IHsgbWluOiAwLCBtYXg6IDUxMiwgc3RlcDogMSB9LFxyXG5cdFx0XHRcdCclJyAgOiB7IG1pbjogMCwgbWF4OiAxMDAsIHN0ZXA6IDEgfSxcclxuXHRcdFx0XHQncmVtJzogeyBtaW46IDAsIG1heDogMTAsIHN0ZXA6IDAuMSB9LFxyXG5cdFx0XHRcdCdlbScgOiB7IG1pbjogMCwgbWF4OiAxMCwgc3RlcDogMC4xIH1cclxuXHRcdFx0fTtcclxuXHJcblx0XHRcdC8vIEhvc3Qgd2l0aCBhIGhpZGRlbiBpbnB1dCB0aGF0IGNhcnJpZXMgZGF0YS1pbnNwZWN0b3Ita2V5IHRvIHJldXNlIHRoZSBzdGFuZGFyZCBoYW5kbGVyLlxyXG5cdFx0XHR2YXIgZ3JvdXAgPSBlbCggJ2RpdicsIHsgJ2NsYXNzJzogJ3dwYmNfbGVuX2dyb3VwJywgJ2RhdGEtbGVuLWdyb3VwJzoga2V5IH0gKTtcclxuXHJcblx0XHRcdHZhciBpbmxpbmUgPSBlbCggJ2RpdicsIHsgJ2NsYXNzJzogJ3dwYmNfaW5saW5lX2lucHV0cycgfSApO1xyXG5cclxuXHRcdFx0dmFyIG51bSA9IGVsKCAnaW5wdXQnLCB7XHJcblx0XHRcdFx0dHlwZSAgICAgICAgICAgIDogJ251bWJlcicsXHJcblx0XHRcdFx0J2NsYXNzJyAgICAgICAgIDogJ2luc3BlY3Rvcl9faW5wdXQnLFxyXG5cdFx0XHRcdCdkYXRhLWxlbi12YWx1ZSc6ICcnLFxyXG5cdFx0XHRcdG1pbiAgICAgICAgICAgICA6ICcwJyxcclxuXHRcdFx0XHRzdGVwICAgICAgICAgICAgOiAnYW55JyxcclxuXHRcdFx0XHR2YWx1ZSAgICAgICAgICAgOiBTdHJpbmcoIHBhcnNlZC52YWx1ZSApXHJcblx0XHRcdH0gKTtcclxuXHJcblx0XHRcdHZhciBzZWwgPSBlbCggJ3NlbGVjdCcsIHsgJ2NsYXNzJzogJ2luc3BlY3Rvcl9faW5wdXQnLCAnZGF0YS1sZW4tdW5pdCc6ICcnIH0gKTtcclxuXHRcdFx0dW5pdHMuZm9yRWFjaCggZnVuY3Rpb24gKHUpIHtcclxuXHRcdFx0XHR2YXIgb3B0ID0gZWwoICdvcHRpb24nLCB7IHZhbHVlOiB1IH0sIHUgKTtcclxuXHRcdFx0XHRpZiAoIHUgPT09IHBhcnNlZC51bml0ICkgb3B0LnNldEF0dHJpYnV0ZSggJ3NlbGVjdGVkJywgJ3NlbGVjdGVkJyApO1xyXG5cdFx0XHRcdHNlbC5hcHBlbmRDaGlsZCggb3B0ICk7XHJcblx0XHRcdH0gKTtcclxuXHJcblx0XHRcdGlubGluZS5hcHBlbmRDaGlsZCggbnVtICk7XHJcblx0XHRcdGlubGluZS5hcHBlbmRDaGlsZCggc2VsICk7XHJcblxyXG5cdFx0XHQvLyBTbGlkZXIgKHVuaXQtYXdhcmUpXHJcblx0XHRcdHZhciBjdXJyZW50ID0gc2xpZGVyX21hcFtwYXJzZWQudW5pdF0gfHwgc2xpZGVyX21hcFt1bml0c1swXV07XHJcblx0XHRcdHZhciByYW5nZSAgID0gZWwoICdpbnB1dCcsIHtcclxuXHRcdFx0XHR0eXBlICAgICAgICAgICAgOiAncmFuZ2UnLFxyXG5cdFx0XHRcdCdjbGFzcycgICAgICAgICA6ICdpbnNwZWN0b3JfX2lucHV0JyxcclxuXHRcdFx0XHQnZGF0YS1sZW4tcmFuZ2UnOiAnJyxcclxuXHRcdFx0XHRtaW4gICAgICAgICAgICAgOiBTdHJpbmcoIGN1cnJlbnQubWluICksXHJcblx0XHRcdFx0bWF4ICAgICAgICAgICAgIDogU3RyaW5nKCBjdXJyZW50Lm1heCApLFxyXG5cdFx0XHRcdHN0ZXAgICAgICAgICAgICA6IFN0cmluZyggY3VycmVudC5zdGVwICksXHJcblx0XHRcdFx0dmFsdWUgICAgICAgICAgIDogU3RyaW5nKCBjbGFtcF9udW0oIHBhcnNlZC52YWx1ZSwgY3VycmVudC5taW4sIGN1cnJlbnQubWF4ICkgKVxyXG5cdFx0XHR9ICk7XHJcblxyXG5cdFx0XHQvLyBIaWRkZW4gd3JpdGVyIGlucHV0IHRoYXQgdGhlIGRlZmF1bHQgSW5zcGVjdG9yIGhhbmRsZXIgd2lsbCBjYXRjaC5cclxuXHRcdFx0dmFyIGhpZGRlbiA9IGVsKCAnaW5wdXQnLCB7XHJcblx0XHRcdFx0dHlwZSAgICAgICAgICAgICAgICA6ICd0ZXh0JyxcclxuXHRcdFx0XHQnY2xhc3MnICAgICAgICAgICAgIDogJ2luc3BlY3Rvcl9faW5wdXQnLFxyXG5cdFx0XHRcdHN0eWxlICAgICAgICAgICAgICAgOiAnZGlzcGxheTpub25lJyxcclxuXHRcdFx0XHQnYXJpYS1oaWRkZW4nICAgICAgIDogJ3RydWUnLFxyXG5cdFx0XHRcdHRhYmluZGV4ICAgICAgICAgICAgOiAnLTEnLFxyXG5cdFx0XHRcdGlkICAgICAgICAgICAgICAgICAgOiAnd3BiY19pbnNfJyArIGtleSArICdfJyArIHVpZCArICdfbGVuX2hpZGRlbicsXHJcblx0XHRcdFx0J2RhdGEtaW5zcGVjdG9yLWtleSc6IGtleSxcclxuXHRcdFx0XHR2YWx1ZSAgICAgICAgICAgICAgIDogKFN0cmluZyggcGFyc2VkLnZhbHVlICkgKyBwYXJzZWQudW5pdClcclxuXHRcdFx0fSApO1xyXG5cclxuXHRcdFx0Z3JvdXAuYXBwZW5kQ2hpbGQoIGlubGluZSApO1xyXG5cdFx0XHRncm91cC5hcHBlbmRDaGlsZCggcmFuZ2UgKTtcclxuXHRcdFx0Z3JvdXAuYXBwZW5kQ2hpbGQoIGhpZGRlbiApO1xyXG5cclxuXHRcdFx0Y3RybC5hcHBlbmRDaGlsZCggZ3JvdXAgKTtcclxuXHRcdFx0cm93LmFwcGVuZENoaWxkKCBsYWJlbCApO1xyXG5cdFx0XHRyb3cuYXBwZW5kQ2hpbGQoIGN0cmwgKTtcclxuXHRcdFx0cmV0dXJuIHJvdztcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFdpcmUgc3luY2luZyBmb3IgYW55IC53cGJjX2xlbl9ncm91cCBpbnNpZGUgYSBnaXZlbiByb290IChwYW5lbCkuXHJcblx0XHQgKiAtIHJhbmdlIOKHhCBudW1iZXIgc3luY1xyXG5cdFx0ICogLSB1bml0IHN3aXRjaGVzIHVwZGF0ZSBzbGlkZXIgYm91bmRzXHJcblx0XHQgKiAtIGhpZGRlbiB3cml0ZXIgKGlmIHByZXNlbnQpIGdldHMgdXBkYXRlZCBhbmQgZW1pdHMgJ2lucHV0J1xyXG5cdFx0ICovXHJcblx0XHRmdW5jdGlvbiB3aXJlX2xlbl9ncm91cChyb290KSB7XHJcblx0XHRcdGlmICggIXJvb3QgKSByZXR1cm47XHJcblxyXG5cdFx0XHRmdW5jdGlvbiBmaW5kX2dyb3VwKGVsKSB7XHJcblx0XHRcdFx0cmV0dXJuIGVsICYmIGVsLmNsb3Nlc3QgJiYgZWwuY2xvc2VzdCggJy53cGJjX2xlbl9ncm91cCcgKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cm9vdC5hZGRFdmVudExpc3RlbmVyKCAnaW5wdXQnLCBmdW5jdGlvbiAoZSkge1xyXG5cdFx0XHRcdHZhciB0ID0gZS50YXJnZXQ7XHJcblx0XHRcdFx0Ly8gU2xpZGVyIG1vdmVkIC0+IHVwZGF0ZSBudW1iZXIgKGFuZCB3cml0ZXIvaGlkZGVuKVxyXG5cdFx0XHRcdGlmICggdCAmJiB0Lmhhc0F0dHJpYnV0ZSggJ2RhdGEtbGVuLXJhbmdlJyApICkge1xyXG5cdFx0XHRcdFx0dmFyIGcgPSBmaW5kX2dyb3VwKCB0ICk7XHJcblx0XHRcdFx0XHRpZiAoICFnICkgcmV0dXJuO1xyXG5cdFx0XHRcdFx0dmFyIG51bSA9IGcucXVlcnlTZWxlY3RvciggJ1tkYXRhLWxlbi12YWx1ZV0nICk7XHJcblx0XHRcdFx0XHRpZiAoIG51bSApIHtcclxuXHRcdFx0XHRcdFx0bnVtLnZhbHVlID0gdC52YWx1ZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHZhciB3cml0ZXIgPSBnLnF1ZXJ5U2VsZWN0b3IoICdbZGF0YS1pbnNwZWN0b3Ita2V5XScgKTtcclxuXHRcdFx0XHRcdGlmICggd3JpdGVyICYmIHdyaXRlci50eXBlID09PSAndGV4dCcgKSB7XHJcblx0XHRcdFx0XHRcdHZhciB1bml0ICAgICA9IGcucXVlcnlTZWxlY3RvciggJ1tkYXRhLWxlbi11bml0XScgKTtcclxuXHRcdFx0XHRcdFx0dW5pdCAgICAgICAgID0gdW5pdCA/IHVuaXQudmFsdWUgOiAncHgnO1xyXG5cdFx0XHRcdFx0XHR3cml0ZXIudmFsdWUgPSBTdHJpbmcoIHQudmFsdWUgKSArIFN0cmluZyggdW5pdCApO1xyXG5cdFx0XHRcdFx0XHQvLyB0cmlnZ2VyIHN0YW5kYXJkIGluc3BlY3RvciBoYW5kbGVyOlxyXG5cdFx0XHRcdFx0XHR3cml0ZXIuZGlzcGF0Y2hFdmVudCggbmV3IEV2ZW50KCAnaW5wdXQnLCB7IGJ1YmJsZXM6IHRydWUgfSApICk7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHQvLyBQbGFpbiByYW5nZV9udW1iZXIgY2FzZSAobnVtYmVyIGhhcyBkYXRhLWluc3BlY3Rvci1rZXkpIC0+IGZpcmUgaW5wdXQgb24gbnVtYmVyXHJcblx0XHRcdFx0XHRcdGlmICggbnVtICYmIG51bS5oYXNBdHRyaWJ1dGUoICdkYXRhLWluc3BlY3Rvci1rZXknICkgKSB7XHJcblx0XHRcdFx0XHRcdFx0bnVtLmRpc3BhdGNoRXZlbnQoIG5ldyBFdmVudCggJ2lucHV0JywgeyBidWJibGVzOiB0cnVlIH0gKSApO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBOdW1iZXIgdHlwZWQgLT4gdXBkYXRlIHNsaWRlciBhbmQgd3JpdGVyL2hpZGRlblxyXG5cdFx0XHRcdGlmICggdCAmJiB0Lmhhc0F0dHJpYnV0ZSggJ2RhdGEtbGVuLXZhbHVlJyApICkge1xyXG5cdFx0XHRcdFx0dmFyIGcgPSBmaW5kX2dyb3VwKCB0ICk7XHJcblx0XHRcdFx0XHRpZiAoICFnICkgcmV0dXJuO1xyXG5cdFx0XHRcdFx0dmFyIHIgPSBnLnF1ZXJ5U2VsZWN0b3IoICdbZGF0YS1sZW4tcmFuZ2VdJyApO1xyXG5cdFx0XHRcdFx0aWYgKCByICkge1xyXG5cdFx0XHRcdFx0XHQvLyBjbGFtcCB3aXRoaW4gc2xpZGVyIGJvdW5kcyBpZiBwcmVzZW50XHJcblx0XHRcdFx0XHRcdHZhciBtaW4gPSBOdW1iZXIoIHIubWluICk7XHJcblx0XHRcdFx0XHRcdHZhciBtYXggPSBOdW1iZXIoIHIubWF4ICk7XHJcblx0XHRcdFx0XHRcdHZhciB2ICAgPSBOdW1iZXIoIHQudmFsdWUgKTtcclxuXHRcdFx0XHRcdFx0aWYgKCAhaXNOYU4oIHYgKSApIHtcclxuXHRcdFx0XHRcdFx0XHR2ICAgICAgID0gY2xhbXBfbnVtKCB2LCBpc05hTiggbWluICkgPyB1bmRlZmluZWQgOiBtaW4sIGlzTmFOKCBtYXggKSA/IHVuZGVmaW5lZCA6IG1heCApO1xyXG5cdFx0XHRcdFx0XHRcdHIudmFsdWUgPSBTdHJpbmcoIHYgKTtcclxuXHRcdFx0XHRcdFx0XHRpZiAoIFN0cmluZyggdiApICE9PSB0LnZhbHVlICkgdC52YWx1ZSA9IFN0cmluZyggdiApO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR2YXIgd3JpdGVyID0gZy5xdWVyeVNlbGVjdG9yKCAnW2RhdGEtaW5zcGVjdG9yLWtleV0nICk7XHJcblx0XHRcdFx0XHRpZiAoIHdyaXRlciAmJiB3cml0ZXIudHlwZSA9PT0gJ3RleHQnICkge1xyXG5cdFx0XHRcdFx0XHR2YXIgdW5pdCAgICAgPSBnLnF1ZXJ5U2VsZWN0b3IoICdbZGF0YS1sZW4tdW5pdF0nICk7XHJcblx0XHRcdFx0XHRcdHVuaXQgICAgICAgICA9IHVuaXQgPyB1bml0LnZhbHVlIDogJ3B4JztcclxuXHRcdFx0XHRcdFx0d3JpdGVyLnZhbHVlID0gU3RyaW5nKCB0LnZhbHVlIHx8IDAgKSArIFN0cmluZyggdW5pdCApO1xyXG5cdFx0XHRcdFx0XHR3cml0ZXIuZGlzcGF0Y2hFdmVudCggbmV3IEV2ZW50KCAnaW5wdXQnLCB7IGJ1YmJsZXM6IHRydWUgfSApICk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHQvLyBlbHNlOiBudW1iZXIgaXRzZWxmIGxpa2VseSBjYXJyaWVzIGRhdGEtaW5zcGVjdG9yLWtleSAocmFuZ2VfbnVtYmVyKTsgZGVmYXVsdCBoYW5kbGVyIHdpbGwgcnVuLlxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSwgdHJ1ZSApO1xyXG5cclxuXHRcdFx0cm9vdC5hZGRFdmVudExpc3RlbmVyKCAnY2hhbmdlJywgZnVuY3Rpb24gKGUpIHtcclxuXHRcdFx0XHR2YXIgdCA9IGUudGFyZ2V0O1xyXG5cdFx0XHRcdC8vIFVuaXQgY2hhbmdlZCAtPiB1cGRhdGUgc2xpZGVyIGxpbWl0cyBhbmQgd3JpdGVyL2hpZGRlblxyXG5cdFx0XHRcdGlmICggdCAmJiB0Lmhhc0F0dHJpYnV0ZSggJ2RhdGEtbGVuLXVuaXQnICkgKSB7XHJcblx0XHRcdFx0XHR2YXIgZyA9IGZpbmRfZ3JvdXAoIHQgKTtcclxuXHRcdFx0XHRcdGlmICggIWcgKSByZXR1cm47XHJcblxyXG5cdFx0XHRcdFx0Ly8gRmluZCB0aGUgY29udHJvbCBtZXRhIHZpYSBhIGRhdGEgYXR0cmlidXRlIG9uIGdyb3VwIGlmIHByb3ZpZGVkXHJcblx0XHRcdFx0XHQvLyAoRmFjdG9yeSBwYXRoIHNldHMgbm90aGluZyBoZXJlOyB3ZSByZS1kZXJpdmUgZnJvbSBjdXJyZW50IHNsaWRlciBib3VuZHMuKVxyXG5cdFx0XHRcdFx0dmFyIHIgICAgICA9IGcucXVlcnlTZWxlY3RvciggJ1tkYXRhLWxlbi1yYW5nZV0nICk7XHJcblx0XHRcdFx0XHR2YXIgbnVtICAgID0gZy5xdWVyeVNlbGVjdG9yKCAnW2RhdGEtbGVuLXZhbHVlXScgKTtcclxuXHRcdFx0XHRcdHZhciB3cml0ZXIgPSBnLnF1ZXJ5U2VsZWN0b3IoICdbZGF0YS1pbnNwZWN0b3Ita2V5XScgKTtcclxuXHRcdFx0XHRcdHZhciB1bml0ICAgPSB0LnZhbHVlIHx8ICdweCc7XHJcblxyXG5cdFx0XHRcdFx0Ly8gQWRqdXN0IHNsaWRlciBib3VuZHMgaGV1cmlzdGljYWxseSAobWF0Y2ggRmFjdG9yeSBkZWZhdWx0cylcclxuXHRcdFx0XHRcdHZhciBib3VuZHNfYnlfdW5pdCA9IHtcclxuXHRcdFx0XHRcdFx0J3B4JyA6IHsgbWluOiAwLCBtYXg6IDUxMiwgc3RlcDogMSB9LFxyXG5cdFx0XHRcdFx0XHQnJScgIDogeyBtaW46IDAsIG1heDogMTAwLCBzdGVwOiAxIH0sXHJcblx0XHRcdFx0XHRcdCdyZW0nOiB7IG1pbjogMCwgbWF4OiAxMCwgc3RlcDogMC4xIH0sXHJcblx0XHRcdFx0XHRcdCdlbScgOiB7IG1pbjogMCwgbWF4OiAxMCwgc3RlcDogMC4xIH1cclxuXHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHRpZiAoIHIgKSB7XHJcblx0XHRcdFx0XHRcdHZhciBiICA9IGJvdW5kc19ieV91bml0W3VuaXRdIHx8IGJvdW5kc19ieV91bml0WydweCddO1xyXG5cdFx0XHRcdFx0XHRyLm1pbiAgPSBTdHJpbmcoIGIubWluICk7XHJcblx0XHRcdFx0XHRcdHIubWF4ICA9IFN0cmluZyggYi5tYXggKTtcclxuXHRcdFx0XHRcdFx0ci5zdGVwID0gU3RyaW5nKCBiLnN0ZXAgKTtcclxuXHRcdFx0XHRcdFx0Ly8gY2xhbXAgdG8gbmV3IGJvdW5kc1xyXG5cdFx0XHRcdFx0XHR2YXIgdiAgPSBOdW1iZXIoIG51bSAmJiBudW0udmFsdWUgPyBudW0udmFsdWUgOiByLnZhbHVlICk7XHJcblx0XHRcdFx0XHRcdGlmICggIWlzTmFOKCB2ICkgKSB7XHJcblx0XHRcdFx0XHRcdFx0diAgICAgICA9IGNsYW1wX251bSggdiwgYi5taW4sIGIubWF4ICk7XHJcblx0XHRcdFx0XHRcdFx0ci52YWx1ZSA9IFN0cmluZyggdiApO1xyXG5cdFx0XHRcdFx0XHRcdGlmICggbnVtICkgbnVtLnZhbHVlID0gU3RyaW5nKCB2ICk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGlmICggd3JpdGVyICYmIHdyaXRlci50eXBlID09PSAndGV4dCcgKSB7XHJcblx0XHRcdFx0XHRcdHZhciB2ICAgICAgICA9IG51bSAmJiBudW0udmFsdWUgPyBudW0udmFsdWUgOiAociA/IHIudmFsdWUgOiAnMCcpO1xyXG5cdFx0XHRcdFx0XHR3cml0ZXIudmFsdWUgPSBTdHJpbmcoIHYgKSArIFN0cmluZyggdW5pdCApO1xyXG5cdFx0XHRcdFx0XHR3cml0ZXIuZGlzcGF0Y2hFdmVudCggbmV3IEV2ZW50KCAnaW5wdXQnLCB7IGJ1YmJsZXM6IHRydWUgfSApICk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LCB0cnVlICk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cdFx0Ly8gPT0gIEMgTyBOIFQgUiBPIEwgID09XHJcblx0XHQvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcblxyXG5cdFx0LyoqXHJcblx0ICogU2NoZW1hID4gSW5zcGVjdG9yID4gQ29udHJvbCBFbGVtZW50LCBlLmcuIElucHV0ISAgQnVpbGQgYSBzaW5nbGUgY29udHJvbCByb3c6XHJcblx0ICogPGRpdiBjbGFzcz1cImluc3BlY3Rvcl9fcm93XCI+XHJcblx0ICogICA8bGFiZWwgY2xhc3M9XCJpbnNwZWN0b3JfX2xhYmVsXCIgZm9yPVwiLi4uXCI+TGFiZWw8L2xhYmVsPlxyXG5cdCAqICAgPGRpdiBjbGFzcz1cImluc3BlY3Rvcl9fY29udHJvbFwiPjxpbnB1dHx0ZXh0YXJlYXxzZWxlY3QgY2xhc3M9XCJpbnNwZWN0b3JfX2lucHV0XCIgLi4uPjwvZGl2PlxyXG5cdCAqIDwvZGl2PlxyXG5cdCAqXHJcblx0ICogQHBhcmFtIHtPYmplY3R9IGNvbnRyb2wgICAgICAgICAgIC0gc2NoZW1hIGNvbnRyb2wgbWV0YSAoe3R5cGUsa2V5LGxhYmVsLC4uLn0pXHJcblx0ICogQHBhcmFtIHtPYmplY3R9IHByb3BzX3NjaGVtYSAgICAgIC0gc2NoZW1hLnByb3BzXHJcblx0ICogQHBhcmFtIHtPYmplY3R9IGRhdGEgICAgICAgICAgICAgIC0gY3VycmVudCBlbGVtZW50IGRhdGEtKiBtYXBcclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdWlkICAgICAgICAgICAgICAgLSB1bmlxdWUgc3VmZml4IGZvciBpbnB1dCBpZHNcclxuXHQgKiBAcGFyYW0ge09iamVjdH0gY3R4ICAgICAgICAgICAgICAgLSB7IGVsLCBidWlsZGVyLCB0eXBlLCBkYXRhIH1cclxuXHQgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9XHJcblx0ICovXHJcblx0XHRmdW5jdGlvbiBidWlsZF9jb250cm9sKGNvbnRyb2wsIHByb3BzX3NjaGVtYSwgZGF0YSwgdWlkLCBjdHgpIHtcclxuXHRcdFx0dmFyIHR5cGUgPSBjb250cm9sLnR5cGU7XHJcblx0XHRcdHZhciBrZXkgID0gY29udHJvbC5rZXk7XHJcblxyXG5cdFx0XHR2YXIgbGFiZWxfdGV4dCA9IGNvbnRyb2wubGFiZWwgfHwga2V5IHx8ICcnO1xyXG5cdFx0XHR2YXIgcHJvcF9tZXRhICA9IChrZXkgPyAocHJvcHNfc2NoZW1hW2tleV0gfHwgeyB0eXBlOiAnc3RyaW5nJyB9KSA6IHsgdHlwZTogJ3N0cmluZycgfSk7XHJcblx0XHRcdHZhciB2YWx1ZSAgICAgID0gY29lcmNlX2J5X3R5cGUoIGdldF9pbml0aWFsX3ZhbHVlKCBrZXksIGRhdGEsIHByb3BzX3NjaGVtYSApLCBwcm9wX21ldGEudHlwZSApO1xyXG5cdFx0Ly8gQWxsb3cgdmFsdWVfZnJvbSBvdmVycmlkZSAoY29tcHV0ZWQgYXQgcmVuZGVyLXRpbWUpLlxyXG5cdFx0aWYgKCBjb250cm9sICYmIGNvbnRyb2wudmFsdWVfZnJvbSAmJiB3LndwYmNfYmZiX2luc3BlY3Rvcl9mYWN0b3J5X3ZhbHVlX2Zyb21bY29udHJvbC52YWx1ZV9mcm9tXSApIHtcclxuXHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0dmFyIGNvbXB1dGVkID0gdy53cGJjX2JmYl9pbnNwZWN0b3JfZmFjdG9yeV92YWx1ZV9mcm9tW2NvbnRyb2wudmFsdWVfZnJvbV0oIGN0eCB8fCB7fSApO1xyXG5cdFx0XHRcdFx0dmFsdWUgICAgICAgID0gY29lcmNlX2J5X3R5cGUoIGNvbXB1dGVkLCBwcm9wX21ldGEudHlwZSApO1xyXG5cdFx0XHRcdH0gY2F0Y2ggKCBlICkge1xyXG5cdFx0XHRcdFx0Y29uc29sZS53YXJuKCAndmFsdWVfZnJvbSBmYWlsZWQgZm9yJywgY29udHJvbC52YWx1ZV9mcm9tLCBlICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHR2YXIgaW5wdXRfaWQgPSAnd3BiY19pbnNfJyArIGtleSArICdfJyArIHVpZDtcclxuXHJcblx0XHRcdHZhciByb3dfZWwgICAgPSBlbCggJ2RpdicsIHsgJ2NsYXNzJzogJ2luc3BlY3Rvcl9fcm93JyB9ICk7XHJcblx0XHRcdHZhciBsYWJlbF9lbCAgPSBlbCggJ2xhYmVsJywgeyAnZm9yJzogaW5wdXRfaWQsICdjbGFzcyc6ICdpbnNwZWN0b3JfX2xhYmVsJyB9LCBsYWJlbF90ZXh0ICk7XHJcblx0XHRcdHZhciBjdHJsX3dyYXAgPSBlbCggJ2RpdicsIHsgJ2NsYXNzJzogJ2luc3BlY3Rvcl9fY29udHJvbCcgfSApO1xyXG5cclxuXHRcdFx0dmFyIGZpZWxkX2VsO1xyXG5cclxuXHRcdC8vIC0tLSBzbG90IGhvc3QgKG5hbWVkIFVJIGluamVjdGlvbikgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHRcdGlmICggdHlwZSA9PT0gJ3Nsb3QnICYmIGNvbnRyb2wuc2xvdCApIHtcclxuXHRcdFx0Ly8gYWRkIGEgbWFya2VyIGNsYXNzIGZvciB0aGUgbGF5b3V0IGNoaXBzIHJvd1xyXG5cdFx0XHR2YXIgY2xhc3NlcyA9ICdpbnNwZWN0b3JfX3JvdyBpbnNwZWN0b3JfX3Jvdy0tc2xvdCc7XHJcblx0XHRcdGlmICggY29udHJvbC5zbG90ID09PSAnbGF5b3V0X2NoaXBzJyApIGNsYXNzZXMgKz0gJyBpbnNwZWN0b3JfX3Jvdy0tbGF5b3V0LWNoaXBzJztcclxuXHJcblx0XHRcdHZhciBzbG90X3JvdyA9IGVsKCAnZGl2JywgeyAnY2xhc3MnOiBjbGFzc2VzIH0gKTtcclxuXHJcblx0XHRcdGlmICggbGFiZWxfdGV4dCApIHNsb3Rfcm93LmFwcGVuZENoaWxkKCBlbCggJ2xhYmVsJywgeyAnY2xhc3MnOiAnaW5zcGVjdG9yX19sYWJlbCcgfSwgbGFiZWxfdGV4dCApICk7XHJcblxyXG5cdFx0XHQvLyBhZGQgYSBkYXRhIGF0dHJpYnV0ZSBvbiB0aGUgaG9zdCBzbyBib3RoIENTUyBhbmQgdGhlIHNhZmV0eS1uZXQgY2FuIHRhcmdldCBpdFxyXG5cdFx0XHR2YXIgaG9zdF9hdHRycyA9IHsgJ2NsYXNzJzogJ2luc3BlY3Rvcl9fY29udHJvbCcgfTtcclxuXHRcdFx0aWYgKCBjb250cm9sLnNsb3QgPT09ICdsYXlvdXRfY2hpcHMnICkgaG9zdF9hdHRyc1snZGF0YS1iZmItc2xvdCddID0gJ2xheW91dF9jaGlwcyc7XHJcblxyXG5cdFx0XHR2YXIgc2xvdF9ob3N0ID0gZWwoICdkaXYnLCBob3N0X2F0dHJzICk7XHJcblx0XHRcdHNsb3Rfcm93LmFwcGVuZENoaWxkKCBzbG90X2hvc3QgKTtcclxuXHJcblx0XHRcdHZhciBzbG90X2ZuID0gdy53cGJjX2JmYl9pbnNwZWN0b3JfZmFjdG9yeV9zbG90c1tjb250cm9sLnNsb3RdO1xyXG5cdFx0XHRpZiAoIHR5cGVvZiBzbG90X2ZuID09PSAnZnVuY3Rpb24nICkge1xyXG5cdFx0XHRcdHNldFRpbWVvdXQoIGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHRcdHNsb3RfZm4oIHNsb3RfaG9zdCwgY3R4IHx8IHt9ICk7XHJcblx0XHRcdFx0XHR9IGNhdGNoICggZSApIHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS53YXJuKCAnc2xvdCBcIicgKyBjb250cm9sLnNsb3QgKyAnXCIgZmFpbGVkOicsIGUgKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9LCAwICk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0c2xvdF9ob3N0LmFwcGVuZENoaWxkKCBlbCggJ2RpdicsIHsgJ2NsYXNzJzogJ3dwYmNfYmZiX19zbG90X19taXNzaW5nJyB9LCAnW3Nsb3Q6ICcgKyBjb250cm9sLnNsb3QgKyAnXScgKSApO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBzbG90X3JvdztcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0XHRpZiAoIHR5cGUgPT09ICd0ZXh0YXJlYScgKSB7XHJcblx0XHRcdFx0ZmllbGRfZWwgPSBlbCggJ3RleHRhcmVhJywge1xyXG5cdFx0XHRcdFx0aWQgICAgICAgICAgICAgICAgICA6IGlucHV0X2lkLFxyXG5cdFx0XHRcdFx0J2RhdGEtaW5zcGVjdG9yLWtleSc6IGtleSxcclxuXHRcdFx0XHRcdHJvd3MgICAgICAgICAgICAgICAgOiBjb250cm9sLnJvd3MgfHwgMyxcclxuXHRcdFx0XHRcdCdjbGFzcycgICAgICAgICAgICAgOiAnaW5zcGVjdG9yX19pbnB1dCdcclxuXHRcdFx0XHR9LCAodmFsdWUgPT0gbnVsbCA/ICcnIDogU3RyaW5nKCB2YWx1ZSApKSApO1xyXG5cdFx0XHR9IGVsc2UgaWYgKCB0eXBlID09PSAnc2VsZWN0JyApIHtcclxuXHRcdFx0XHRmaWVsZF9lbCA9IGVsKCAnc2VsZWN0Jywge1xyXG5cdFx0XHRcdFx0aWQgICAgICAgICAgICAgICAgICA6IGlucHV0X2lkLFxyXG5cdFx0XHRcdFx0J2RhdGEtaW5zcGVjdG9yLWtleSc6IGtleSxcclxuXHRcdFx0XHRcdCdjbGFzcycgICAgICAgICAgICAgOiAnaW5zcGVjdG9yX19pbnB1dCdcclxuXHRcdFx0XHR9ICk7XHJcblx0XHRcdFx0bm9ybWFsaXplX3NlbGVjdF9vcHRpb25zKCBjb250cm9sLm9wdGlvbnMgfHwgW10gKS5mb3JFYWNoKCBmdW5jdGlvbiAob3B0KSB7XHJcblx0XHRcdFx0XHR2YXIgb3B0X2VsID0gZWwoICdvcHRpb24nLCB7IHZhbHVlOiBvcHQudmFsdWUgfSwgb3B0LmxhYmVsICk7XHJcblx0XHRcdFx0XHRpZiAoIFN0cmluZyggdmFsdWUgKSA9PT0gb3B0LnZhbHVlICkgb3B0X2VsLnNldEF0dHJpYnV0ZSggJ3NlbGVjdGVkJywgJ3NlbGVjdGVkJyApO1xyXG5cdFx0XHRcdFx0ZmllbGRfZWwuYXBwZW5kQ2hpbGQoIG9wdF9lbCApO1xyXG5cdFx0XHRcdH0gKTtcclxuXHRcdFx0fSBlbHNlIGlmICggdHlwZSA9PT0gJ2NoZWNrYm94JyApIHtcclxuXHRcdFx0XHQvLyBmaWVsZF9lbCA9IGVsKCAnaW5wdXQnLCB7IGlkOiBpbnB1dF9pZCwgdHlwZTogJ2NoZWNrYm94JywgJ2RhdGEtaW5zcGVjdG9yLWtleSc6IGtleSwgY2hlY2tlZDogISF2YWx1ZSwgJ2NsYXNzJzogJ2luc3BlY3Rvcl9faW5wdXQnIH0gKTsgLy8uXHJcblxyXG5cdFx0XHRcdC8vIFJlbmRlciBhcyB0b2dnbGUgVUkgaW5zdGVhZCBvZiBsYWJlbC1sZWZ0ICsgY2hlY2tib3guICBOb3RlOiB3ZSByZXR1cm4gdGhlIGZ1bGwgdG9nZ2xlIHJvdyBoZXJlIGFuZCBza2lwIHRoZSBkZWZhdWx0IHJvdy9sYWJlbCBmbG93IGJlbG93LlxyXG5cdFx0XHRcdHJldHVybiBidWlsZF90b2dnbGVfcm93KCBpbnB1dF9pZCwga2V5LCAhIXZhbHVlLCBsYWJlbF90ZXh0ICk7XHJcblxyXG5cdFx0XHR9IGVsc2UgaWYgKCB0eXBlID09PSAncmFuZ2VfbnVtYmVyJyApIHtcclxuXHRcdFx0XHQvLyAtLS0gbmV3OiBzbGlkZXIgKyBudW1iZXIgKHNpbmdsZSBrZXkpLlxyXG5cdFx0XHRcdHZhciBybl9pZCAgPSAnd3BiY19pbnNfJyArIGtleSArICdfJyArIHVpZDtcclxuXHRcdFx0XHR2YXIgcm5fdmFsID0gdmFsdWU7IC8vIGZyb20gZ2V0X2luaXRpYWxfdmFsdWUvcHJvcF9tZXRhIGFscmVhZHkuXHJcblx0XHRcdFx0cmV0dXJuIGJ1aWxkX3JhbmdlX251bWJlcl9yb3coIHJuX2lkLCBrZXksIGxhYmVsX3RleHQsIHJuX3ZhbCwgY29udHJvbCApO1xyXG5cclxuXHRcdFx0fSBlbHNlIGlmICggdHlwZSA9PT0gJ2xlbicgKSB7XHJcblx0XHRcdFx0Ly8gLS0tIG5ldzogbGVuZ3RoIGNvbXBvdW5kICh2YWx1ZSt1bml0K3NsaWRlciAtPiB3cml0ZXMgYSBzaW5nbGUgc3RyaW5nIGtleSkuXHJcblx0XHRcdFx0cmV0dXJuIGJ1aWxkX2xlbl9jb21wb3VuZF9yb3coIGNvbnRyb2wsIHByb3BzX3NjaGVtYSwgZGF0YSwgdWlkICk7XHJcblxyXG5cdFx0XHR9IGVsc2UgaWYgKCB0eXBlID09PSAnY29sb3InICkge1xyXG5cdFx0XHRcdC8vIENvbG9yIHBpY2tlciAoQ29sb3JpcykuIFN0b3JlIGFzIHN0cmluZyAoZS5nLiwgXCIjZTBlMGUwXCIpLlxyXG5cdFx0XHRcdGZpZWxkX2VsID0gZWwoICdpbnB1dCcsIHtcclxuXHRcdFx0XHRcdGlkICAgICAgICAgICAgICAgICAgIDogaW5wdXRfaWQsXHJcblx0XHRcdFx0XHR0eXBlICAgICAgICAgICAgICAgICA6ICd0ZXh0JyxcclxuXHRcdFx0XHRcdCdkYXRhLWluc3BlY3Rvci1rZXknIDoga2V5LFxyXG5cdFx0XHRcdFx0J2RhdGEtaW5zcGVjdG9yLXR5cGUnOiAnY29sb3InLFxyXG5cdFx0XHRcdFx0J2RhdGEtY29sb3JpcycgICAgICAgOiAnJyxcclxuXHRcdFx0XHRcdCdjbGFzcycgICAgICAgICAgICAgIDogJ2luc3BlY3Rvcl9faW5wdXQnLFxyXG5cdFx0XHRcdFx0J2RhdGEtZGVmYXVsdC1jb2xvcicgOiAoIHZhbHVlICE9IG51bGwgJiYgdmFsdWUgIT09ICcnID8gU3RyaW5nKHZhbHVlKSA6IChjb250cm9sLnBsYWNlaG9sZGVyIHx8ICcnKSApXHJcblx0XHRcdFx0fSApO1xyXG5cdFx0XHRcdGlmICggdmFsdWUgIT09ICcnICkge1xyXG5cdFx0XHRcdFx0ZmllbGRfZWwudmFsdWUgPSBTdHJpbmcoIHZhbHVlICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdC8vIHRleHQvbnVtYmVyIGRlZmF1bHQuXHJcblx0XHRcdFx0dmFyIGF0dHJzID0ge1xyXG5cdFx0XHRcdFx0aWQgICAgICAgICAgICAgICAgICA6IGlucHV0X2lkLFxyXG5cdFx0XHRcdFx0dHlwZSAgICAgICAgICAgICAgICA6ICh0eXBlID09PSAnbnVtYmVyJykgPyAnbnVtYmVyJyA6ICd0ZXh0JyxcclxuXHRcdFx0XHRcdCdkYXRhLWluc3BlY3Rvci1rZXknOiBrZXksXHJcblx0XHRcdFx0XHQnY2xhc3MnICAgICAgICAgICAgIDogJ2luc3BlY3Rvcl9faW5wdXQnXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0Ly8gbnVtYmVyIGNvbnN0cmFpbnRzIChzY2hlbWEgb3IgY29udHJvbClcclxuXHRcdFx0XHRpZiAoIHR5cGUgPT09ICdudW1iZXInICkge1xyXG5cdFx0XHRcdFx0aWYgKCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoIHByb3BfbWV0YSwgJ21pbicgKSApIGF0dHJzLm1pbiA9IHByb3BfbWV0YS5taW47XHJcblx0XHRcdFx0XHRpZiAoIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCggcHJvcF9tZXRhLCAnbWF4JyApICkgYXR0cnMubWF4ID0gcHJvcF9tZXRhLm1heDtcclxuXHRcdFx0XHRcdGlmICggT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKCBwcm9wX21ldGEsICdzdGVwJyApICkgYXR0cnMuc3RlcCA9IHByb3BfbWV0YS5zdGVwO1xyXG5cdFx0XHRcdFx0aWYgKCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoIGNvbnRyb2wsICdtaW4nICkgKSBhdHRycy5taW4gPSBjb250cm9sLm1pbjtcclxuXHRcdFx0XHRcdGlmICggT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKCBjb250cm9sLCAnbWF4JyApICkgYXR0cnMubWF4ID0gY29udHJvbC5tYXg7XHJcblx0XHRcdFx0XHRpZiAoIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCggY29udHJvbCwgJ3N0ZXAnICkgKSBhdHRycy5zdGVwID0gY29udHJvbC5zdGVwO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRmaWVsZF9lbCA9IGVsKCAnaW5wdXQnLCBhdHRycyApO1xyXG5cdFx0XHRcdGlmICggdmFsdWUgIT09ICcnICkgZmllbGRfZWwudmFsdWUgPSBTdHJpbmcoIHZhbHVlICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGN0cmxfd3JhcC5hcHBlbmRDaGlsZCggZmllbGRfZWwgKTtcclxuXHRcdFx0cm93X2VsLmFwcGVuZENoaWxkKCBsYWJlbF9lbCApO1xyXG5cdFx0XHRyb3dfZWwuYXBwZW5kQ2hpbGQoIGN0cmxfd3JhcCApO1xyXG5cdFx0XHRyZXR1cm4gcm93X2VsO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogU2NoZW1hID4gSW5zcGVjdG9yID4gR3JvdXBzISBCdWlsZCBhbiBpbnNwZWN0b3IgZ3JvdXAgKGNvbGxhcHNpYmxlKS5cclxuXHRcdCAqIFN0cnVjdHVyZTpcclxuXHRcdCAqIDxzZWN0aW9uIGNsYXNzPVwid3BiY19iZmJfX2luc3BlY3Rvcl9fZ3JvdXAgd3BiY191aV9fY29sbGFwc2libGVfZ3JvdXAgaXMtb3BlblwiIGRhdGEtZ3JvdXA9XCIuLi5cIj5cclxuXHRcdCAqICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJncm91cF9faGVhZGVyXCIgcm9sZT1cImJ1dHRvblwiIGFyaWEtZXhwYW5kZWQ9XCJ0cnVlXCIgYXJpYS1jb250cm9scz1cIndwYmNfY29sbGFwc2libGVfcGFuZWxfWFwiPlxyXG5cdFx0ICogICAgIDxoMz5Hcm91cCBUaXRsZTwvaDM+XHJcblx0XHQgKiAgICAgPGkgY2xhc3M9XCJ3cGJjX3VpX2VsX192ZXJ0X21lbnVfcm9vdF9zZWN0aW9uX2ljb24gbWVudV9pY29uIGljb24tMXggd3BiYy1iaS1jaGV2cm9uLXJpZ2h0XCI+PC9pPlxyXG5cdFx0ICogICA8L2J1dHRvbj5cclxuXHRcdCAqICAgPGRpdiBjbGFzcz1cImdyb3VwX19maWVsZHNcIiBpZD1cIndwYmNfY29sbGFwc2libGVfcGFuZWxfWFwiIGFyaWEtaGlkZGVuPVwiZmFsc2VcIj4g4oCmcm93c+KApiA8L2Rpdj5cclxuXHRcdCAqIDwvc2VjdGlvbj5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gZ3JvdXBcclxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wc19zY2hlbWFcclxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gdWlkXHJcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gY3R4XHJcblx0XHQgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9XHJcblx0XHQgKi9cclxuXHRcdGZ1bmN0aW9uIGJ1aWxkX2dyb3VwKGdyb3VwLCBwcm9wc19zY2hlbWEsIGRhdGEsIHVpZCwgY3R4KSB7XHJcblx0XHRcdHZhciBpc19vcGVuICA9ICEhZ3JvdXAub3BlbjtcclxuXHRcdFx0dmFyIHBhbmVsX2lkID0gJ3dwYmNfY29sbGFwc2libGVfcGFuZWxfJyArIHVpZCArICdfJyArIChncm91cC5rZXkgfHwgJ2cnKTtcclxuXHJcblx0XHRcdHZhciBzZWN0aW9uID0gZWwoICdzZWN0aW9uJywge1xyXG5cdFx0XHRcdCdjbGFzcycgICAgIDogJ3dwYmNfYmZiX19pbnNwZWN0b3JfX2dyb3VwIHdwYmNfdWlfX2NvbGxhcHNpYmxlX2dyb3VwJyArIChpc19vcGVuID8gJyBpcy1vcGVuJyA6ICcnKSxcclxuXHRcdFx0XHQnZGF0YS1ncm91cCc6IGdyb3VwLmtleSB8fCAnJ1xyXG5cdFx0XHR9ICk7XHJcblxyXG5cdFx0XHR2YXIgaGVhZGVyX2J0biA9IGVsKCAnYnV0dG9uJywge1xyXG5cdFx0XHRcdHR5cGUgICAgICAgICAgIDogJ2J1dHRvbicsXHJcblx0XHRcdFx0J2NsYXNzJyAgICAgICAgOiAnZ3JvdXBfX2hlYWRlcicsXHJcblx0XHRcdFx0cm9sZSAgICAgICAgICAgOiAnYnV0dG9uJyxcclxuXHRcdFx0XHQnYXJpYS1leHBhbmRlZCc6IGlzX29wZW4gPyAndHJ1ZScgOiAnZmFsc2UnLFxyXG5cdFx0XHRcdCdhcmlhLWNvbnRyb2xzJzogcGFuZWxfaWRcclxuXHRcdFx0fSwgW1xyXG5cdFx0XHRcdGVsKCAnaDMnLCBudWxsLCBncm91cC50aXRsZSB8fCBncm91cC5sYWJlbCB8fCBncm91cC5rZXkgfHwgJycgKSxcclxuXHRcdFx0XHRlbCggJ2knLCB7ICdjbGFzcyc6ICd3cGJjX3VpX2VsX192ZXJ0X21lbnVfcm9vdF9zZWN0aW9uX2ljb24gbWVudV9pY29uIGljb24tMXggd3BiYy1iaS1jaGV2cm9uLXJpZ2h0JyB9IClcclxuXHRcdFx0XSApO1xyXG5cclxuXHRcdFx0dmFyIGZpZWxkcyA9IGVsKCAnZGl2Jywge1xyXG5cdFx0XHRcdCdjbGFzcycgICAgICA6ICdncm91cF9fZmllbGRzJyxcclxuXHRcdFx0XHRpZCAgICAgICAgICAgOiBwYW5lbF9pZCxcclxuXHRcdFx0XHQnYXJpYS1oaWRkZW4nOiBpc19vcGVuID8gJ2ZhbHNlJyA6ICd0cnVlJ1xyXG5cdFx0XHR9ICk7XHJcblxyXG5cdFx0XHRmdW5jdGlvbiBhc0FycmF5KHgpIHtcclxuXHRcdFx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIHggKSApIHJldHVybiB4O1xyXG5cdFx0XHRcdGlmICggeCAmJiB0eXBlb2YgeCA9PT0gJ29iamVjdCcgKSByZXR1cm4gT2JqZWN0LnZhbHVlcyggeCApO1xyXG5cdFx0XHRcdHJldHVybiB4ICE9IG51bGwgPyBbIHggXSA6IFtdO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRhc0FycmF5KCBncm91cC5jb250cm9scyApLmZvckVhY2goIGZ1bmN0aW9uIChjb250cm9sKSB7XHJcblx0XHRcdFx0ZmllbGRzLmFwcGVuZENoaWxkKCBidWlsZF9jb250cm9sKCBjb250cm9sLCBwcm9wc19zY2hlbWEsIGRhdGEsIHVpZCwgY3R4ICkgKTtcclxuXHRcdFx0fSApO1xyXG5cclxuXHRcdFx0c2VjdGlvbi5hcHBlbmRDaGlsZCggaGVhZGVyX2J0biApO1xyXG5cdFx0XHRzZWN0aW9uLmFwcGVuZENoaWxkKCBmaWVsZHMgKTtcclxuXHRcdFx0cmV0dXJuIHNlY3Rpb247XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBTY2hlbWEgPiBJbnNwZWN0b3IgPiBIZWFkZXIhIEJ1aWxkIGluc3BlY3RvciBoZWFkZXIgd2l0aCBhY3Rpb24gYnV0dG9ucyB3aXJlZCB0byBleGlzdGluZyBkYXRhLWFjdGlvbiBoYW5kbGVycy5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGhlYWRlcl9hY3Rpb25zXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gICAgICAgIHRpdGxlX3RleHRcclxuXHRcdCAqIEByZXR1cm5zIHtIVE1MRWxlbWVudH1cclxuXHRcdCAqL1xyXG5cdFx0ZnVuY3Rpb24gYnVpbGRfaGVhZGVyKGluc3BlY3Rvcl91aSwgdGl0bGVfZmFsbGJhY2ssIHNjaGVtYV9mb3JfdHlwZSkge1xyXG5cclxuXHRcdFx0aW5zcGVjdG9yX3VpICAgICAgPSBpbnNwZWN0b3JfdWkgfHwge307XHJcblx0XHRcdHNjaGVtYV9mb3JfdHlwZSAgID0gc2NoZW1hX2Zvcl90eXBlIHx8IHt9O1xyXG5cdFx0XHR2YXIgdmFyaWFudCAgICAgICA9IGluc3BlY3Rvcl91aS5oZWFkZXJfdmFyaWFudCB8fCAnbWluaW1hbCc7XHJcblx0XHRcdHZhciBoZWFkZXJBY3Rpb25zID0gaW5zcGVjdG9yX3VpLmhlYWRlcl9hY3Rpb25zXHJcblx0XHRcdFx0fHwgc2NoZW1hX2Zvcl90eXBlLmhlYWRlcl9hY3Rpb25zXHJcblx0XHRcdFx0fHwgWyAnZGVzZWxlY3QnLCAnc2Nyb2xsdG8nLCAnbW92ZS11cCcsICdtb3ZlLWRvd24nLCAnZHVwbGljYXRlJywgJ2RlbGV0ZScgXTtcclxuXHJcblx0XHRcdHZhciB0aXRsZSAgICAgICA9IGluc3BlY3Rvcl91aS50aXRsZSB8fCB0aXRsZV9mYWxsYmFjayB8fCAnJztcclxuXHRcdFx0dmFyIGRlc2NyaXB0aW9uID0gaW5zcGVjdG9yX3VpLmRlc2NyaXB0aW9uIHx8ICcnO1xyXG5cclxuXHRcdFx0Ly8gaGVscGVyIHRvIGNyZWF0ZSBhIGJ1dHRvbiBmb3IgZWl0aGVyIGhlYWRlciBzdHlsZVxyXG5cdFx0XHRmdW5jdGlvbiBhY3Rpb25CdG4oYWN0LCBtaW5pbWFsKSB7XHJcblx0XHRcdFx0aWYgKCBtaW5pbWFsICkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIGVsKCAnYnV0dG9uJywgeyB0eXBlOiAnYnV0dG9uJywgJ2NsYXNzJzogJ2J1dHRvbi1saW5rJywgJ2RhdGEtYWN0aW9uJzogYWN0IH0sICcnICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdC8vIHRvb2xiYXIgdmFyaWFudCAocmljaClcclxuXHRcdFx0XHR2YXIgaWNvbk1hcCA9IHtcclxuXHRcdFx0XHRcdCdkZXNlbGVjdCcgOiAnd3BiY19pY25fcmVtb3ZlX2RvbmUnLFxyXG5cdFx0XHRcdFx0J3Njcm9sbHRvJyA6ICd3cGJjX2ljbl9hZHNfY2xpY2sgZmlsdGVyX2NlbnRlcl9mb2N1cycsXHJcblx0XHRcdFx0XHQnbW92ZS11cCcgIDogJ3dwYmNfaWNuX2Fycm93X3Vwd2FyZCcsXHJcblx0XHRcdFx0XHQnbW92ZS1kb3duJzogJ3dwYmNfaWNuX2Fycm93X2Rvd253YXJkJyxcclxuXHRcdFx0XHRcdCdkdXBsaWNhdGUnOiAnd3BiY19pY25fY29udGVudF9jb3B5JyxcclxuXHRcdFx0XHRcdCdkZWxldGUnICAgOiAnd3BiY19pY25fZGVsZXRlX291dGxpbmUnXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0XHR2YXIgY2xhc3NlcyA9ICdidXR0b24gYnV0dG9uLXNlY29uZGFyeSB3cGJjX3VpX2NvbnRyb2wgd3BiY191aV9idXR0b24nO1xyXG5cdFx0XHRcdGlmICggYWN0ID09PSAnZGVsZXRlJyApIGNsYXNzZXMgKz0gJyB3cGJjX3VpX2J1dHRvbl9kYW5nZXIgYnV0dG9uLWxpbmstZGVsZXRlJztcclxuXHJcblx0XHRcdFx0dmFyIGJ0biA9IGVsKCAnYnV0dG9uJywge1xyXG5cdFx0XHRcdFx0dHlwZSAgICAgICAgIDogJ2J1dHRvbicsXHJcblx0XHRcdFx0XHQnY2xhc3MnICAgICAgOiBjbGFzc2VzLFxyXG5cdFx0XHRcdFx0J2RhdGEtYWN0aW9uJzogYWN0LFxyXG5cdFx0XHRcdFx0J2FyaWEtbGFiZWwnIDogYWN0LnJlcGxhY2UoIC8tL2csICcgJyApXHJcblx0XHRcdFx0fSApO1xyXG5cclxuXHRcdFx0XHRpZiAoIGFjdCA9PT0gJ2RlbGV0ZScgKSB7XHJcblx0XHRcdFx0XHRidG4uYXBwZW5kQ2hpbGQoIGVsKCAnc3BhbicsIHsgJ2NsYXNzJzogJ2luLWJ1dHRvbi10ZXh0JyB9LCAnRGVsZXRlJyApICk7XHJcblx0XHRcdFx0XHRidG4uYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCAnICcgKSApOyAvLyBtaW5vciBzcGFjaW5nIGJlZm9yZSBpY29uXHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGJ0bi5hcHBlbmRDaGlsZCggZWwoICdpJywgeyAnY2xhc3MnOiAnbWVudV9pY29uIGljb24tMXggJyArIChpY29uTWFwW2FjdF0gfHwgJycpIH0gKSApO1xyXG5cdFx0XHRcdHJldHVybiBidG47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vID09PSBtaW5pbWFsIGhlYWRlciAoZXhpc3RpbmcgbG9vazsgZGVmYXVsdCkgPT09XHJcblx0XHRcdGlmICggdmFyaWFudCAhPT0gJ3Rvb2xiYXInICkge1xyXG5cdFx0XHRcdHZhciBoZWFkZXIgPSBlbCggJ2hlYWRlcicsIHsgJ2NsYXNzJzogJ3dwYmNfYmZiX19pbnNwZWN0b3JfX2hlYWRlcicgfSApO1xyXG5cdFx0XHRcdGhlYWRlci5hcHBlbmRDaGlsZCggZWwoICdoMycsIG51bGwsIHRpdGxlIHx8ICcnICkgKTtcclxuXHJcblx0XHRcdFx0dmFyIGFjdGlvbnMgPSBlbCggJ2RpdicsIHsgJ2NsYXNzJzogJ3dwYmNfYmZiX19pbnNwZWN0b3JfX2hlYWRlcl9hY3Rpb25zJyB9ICk7XHJcblx0XHRcdFx0aGVhZGVyQWN0aW9ucy5mb3JFYWNoKCBmdW5jdGlvbiAoYWN0KSB7XHJcblx0XHRcdFx0XHRhY3Rpb25zLmFwcGVuZENoaWxkKCBhY3Rpb25CdG4oIGFjdCwgLyptaW5pbWFsKi90cnVlICkgKTtcclxuXHRcdFx0XHR9ICk7XHJcblx0XHRcdFx0aGVhZGVyLmFwcGVuZENoaWxkKCBhY3Rpb25zICk7XHJcblx0XHRcdFx0cmV0dXJuIGhlYWRlcjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gPT09IHRvb2xiYXIgaGVhZGVyIChyaWNoIHRpdGxlL2Rlc2MgKyBncm91cGVkIGJ1dHRvbnMpID09PVxyXG5cdFx0XHR2YXIgcm9vdCA9IGVsKCAnZGl2JywgeyAnY2xhc3MnOiAnd3BiY19iZmJfX2luc3BlY3Rvcl9faGVhZCcgfSApO1xyXG5cdFx0XHR2YXIgd3JhcCA9IGVsKCAnZGl2JywgeyAnY2xhc3MnOiAnaGVhZGVyX2NvbnRhaW5lcicgfSApO1xyXG5cdFx0XHR2YXIgbGVmdCA9IGVsKCAnZGl2JywgeyAnY2xhc3MnOiAnaGVhZGVyX3RpdGxlX2NvbnRlbnQnIH0gKTtcclxuXHRcdFx0dmFyIGgzICAgPSBlbCggJ2gzJywgeyAnY2xhc3MnOiAndGl0bGUnIH0sIHRpdGxlIHx8ICcnICk7XHJcblx0XHRcdGxlZnQuYXBwZW5kQ2hpbGQoIGgzICk7XHJcblx0XHRcdGlmICggZGVzY3JpcHRpb24gKSB7XHJcblx0XHRcdFx0bGVmdC5hcHBlbmRDaGlsZCggZWwoICdkaXYnLCB7ICdjbGFzcyc6ICdkZXNjJyB9LCBkZXNjcmlwdGlvbiApICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHZhciByaWdodCA9IGVsKCAnZGl2JywgeyAnY2xhc3MnOiAnYWN0aW9ucyB3cGJjX2FqeF90b29sYmFyIHdwYmNfbm9fYm9yZGVycycgfSApO1xyXG5cdFx0XHR2YXIgdWlDICAgPSBlbCggJ2RpdicsIHsgJ2NsYXNzJzogJ3VpX2NvbnRhaW5lciB1aV9jb250YWluZXJfc21hbGwnIH0gKTtcclxuXHRcdFx0dmFyIHVpRyAgID0gZWwoICdkaXYnLCB7ICdjbGFzcyc6ICd1aV9ncm91cCcgfSApO1xyXG5cclxuXHRcdFx0Ly8gU3BsaXQgaW50byB2aXN1YWwgZ3JvdXBzOiBmaXJzdCAyLCBuZXh0IDIsIHRoZW4gdGhlIHJlc3QuXHJcblx0XHRcdHZhciBnMSA9IGVsKCAnZGl2JywgeyAnY2xhc3MnOiAndWlfZWxlbWVudCcgfSApO1xyXG5cdFx0XHR2YXIgZzIgPSBlbCggJ2RpdicsIHsgJ2NsYXNzJzogJ3VpX2VsZW1lbnQnIH0gKTtcclxuXHRcdFx0dmFyIGczID0gZWwoICdkaXYnLCB7ICdjbGFzcyc6ICd1aV9lbGVtZW50JyB9ICk7XHJcblxyXG5cdFx0XHRoZWFkZXJBY3Rpb25zLnNsaWNlKCAwLCAyICkuZm9yRWFjaCggZnVuY3Rpb24gKGFjdCkge1xyXG5cdFx0XHRcdGcxLmFwcGVuZENoaWxkKCBhY3Rpb25CdG4oIGFjdCwgZmFsc2UgKSApO1xyXG5cdFx0XHR9ICk7XHJcblx0XHRcdGhlYWRlckFjdGlvbnMuc2xpY2UoIDIsIDQgKS5mb3JFYWNoKCBmdW5jdGlvbiAoYWN0KSB7XHJcblx0XHRcdFx0ZzIuYXBwZW5kQ2hpbGQoIGFjdGlvbkJ0biggYWN0LCBmYWxzZSApICk7XHJcblx0XHRcdH0gKTtcclxuXHRcdFx0aGVhZGVyQWN0aW9ucy5zbGljZSggNCApLmZvckVhY2goIGZ1bmN0aW9uIChhY3QpIHtcclxuXHRcdFx0XHRnMy5hcHBlbmRDaGlsZCggYWN0aW9uQnRuKCBhY3QsIGZhbHNlICkgKTtcclxuXHRcdFx0fSApO1xyXG5cclxuXHRcdFx0dWlHLmFwcGVuZENoaWxkKCBnMSApO1xyXG5cdFx0XHR1aUcuYXBwZW5kQ2hpbGQoIGcyICk7XHJcblx0XHRcdHVpRy5hcHBlbmRDaGlsZCggZzMgKTtcclxuXHRcdFx0dWlDLmFwcGVuZENoaWxkKCB1aUcgKTtcclxuXHRcdFx0cmlnaHQuYXBwZW5kQ2hpbGQoIHVpQyApO1xyXG5cclxuXHRcdFx0d3JhcC5hcHBlbmRDaGlsZCggbGVmdCApO1xyXG5cdFx0XHR3cmFwLmFwcGVuZENoaWxkKCByaWdodCApO1xyXG5cdFx0XHRyb290LmFwcGVuZENoaWxkKCB3cmFwICk7XHJcblxyXG5cdFx0XHRyZXR1cm4gcm9vdDtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0ZnVuY3Rpb24gZmFjdG9yeV9yZW5kZXIocGFuZWxfZWwsIHNjaGVtYV9mb3JfdHlwZSwgZGF0YSwgb3B0cykge1xyXG5cdFx0XHRpZiAoICFwYW5lbF9lbCApIHJldHVybiBwYW5lbF9lbDtcclxuXHJcblx0XHRcdHNjaGVtYV9mb3JfdHlwZSAgPSBzY2hlbWFfZm9yX3R5cGUgfHwge307XHJcblx0XHRcdHZhciBwcm9wc19zY2hlbWEgPSAoc2NoZW1hX2Zvcl90eXBlLnNjaGVtYSAmJiBzY2hlbWFfZm9yX3R5cGUuc2NoZW1hLnByb3BzKSA/IHNjaGVtYV9mb3JfdHlwZS5zY2hlbWEucHJvcHMgOiB7fTtcclxuXHRcdFx0dmFyIGluc3BlY3Rvcl91aSA9IChzY2hlbWFfZm9yX3R5cGUuaW5zcGVjdG9yX3VpIHx8IHt9KTtcclxuXHRcdFx0dmFyIGdyb3VwcyAgICAgICA9IGluc3BlY3Rvcl91aS5ncm91cHMgfHwgW107XHJcblxyXG5cdFx0XHR2YXIgaGVhZGVyX2FjdGlvbnMgPSBpbnNwZWN0b3JfdWkuaGVhZGVyX2FjdGlvbnMgfHwgc2NoZW1hX2Zvcl90eXBlLmhlYWRlcl9hY3Rpb25zIHx8IFtdO1xyXG5cdFx0XHR2YXIgdGl0bGVfdGV4dCAgICAgPSAob3B0cyAmJiBvcHRzLnRpdGxlKSB8fCBpbnNwZWN0b3JfdWkudGl0bGUgfHwgc2NoZW1hX2Zvcl90eXBlLmxhYmVsIHx8IChkYXRhICYmIGRhdGEubGFiZWwpIHx8ICcnO1xyXG5cclxuXHRcdC8vIFByZXBhcmUgcmVuZGVyaW5nIGNvbnRleHQgZm9yIHNsb3RzL3ZhbHVlX2Zyb20sIGV0Yy5cclxuXHRcdFx0dmFyIGN0eCA9IHtcclxuXHRcdFx0XHRlbCAgICAgOiBvcHRzICYmIG9wdHMuZWwgfHwgbnVsbCxcclxuXHRcdFx0XHRidWlsZGVyOiBvcHRzICYmIG9wdHMuYnVpbGRlciB8fCBudWxsLFxyXG5cdFx0XHRcdHR5cGUgICA6IG9wdHMgJiYgb3B0cy50eXBlIHx8IG51bGwsXHJcblx0XHRcdFx0ZGF0YSAgIDogZGF0YSB8fCB7fVxyXG5cdFx0XHR9O1xyXG5cclxuXHRcdFx0Ly8gY2xlYXIgcGFuZWwuXHJcblx0XHRcdHdoaWxlICggcGFuZWxfZWwuZmlyc3RDaGlsZCApIHBhbmVsX2VsLnJlbW92ZUNoaWxkKCBwYW5lbF9lbC5maXJzdENoaWxkICk7XHJcblxyXG5cdFx0XHR2YXIgdWlkID0gTWF0aC5yYW5kb20oKS50b1N0cmluZyggMzYgKS5zbGljZSggMiwgOCApO1xyXG5cclxuXHRcdFx0Ly8gaGVhZGVyLlxyXG5cdFx0XHRwYW5lbF9lbC5hcHBlbmRDaGlsZCggYnVpbGRfaGVhZGVyKCBpbnNwZWN0b3JfdWksIHRpdGxlX3RleHQsIHNjaGVtYV9mb3JfdHlwZSApICk7XHJcblxyXG5cclxuXHRcdFx0Ly8gZ3JvdXBzLlxyXG5cdFx0XHRncm91cHMuZm9yRWFjaCggZnVuY3Rpb24gKGcpIHtcclxuXHRcdFx0XHRwYW5lbF9lbC5hcHBlbmRDaGlsZCggYnVpbGRfZ3JvdXAoIGcsIHByb3BzX3NjaGVtYSwgZGF0YSB8fCB7fSwgdWlkLCBjdHggKSApO1xyXG5cdFx0XHR9ICk7XHJcblxyXG5cdFx0XHQvLyBBUklBIHN5bmMgZm9yIHRvZ2dsZXMgY3JlYXRlZCBoZXJlIChlbnN1cmUgYXJpYS1jaGVja2VkIG1hdGNoZXMgc3RhdGUpLlxyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdC8vIENlbnRyYWxpemVkIFVJIG5vcm1hbGl6ZXJzICh0b2dnbGVzICsgQTExeSk6IGhhbmRsZWQgaW4gQ29yZS5cclxuXHRcdFx0XHRVSS5hcHBseV9wb3N0X3JlbmRlciggcGFuZWxfZWwgKTtcclxuXHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0d2lyZV9sZW5fZ3JvdXAoIHBhbmVsX2VsICk7XHJcblx0XHRcdFx0XHQvLyBJbml0aWFsaXplIENvbG9yaXMgb24gY29sb3IgaW5wdXRzIHJlbmRlcmVkIGluIHRoaXMgcGFuZWwuXHJcblx0XHRcdFx0XHRpbml0X2NvbG9yaXNfcGlja2VycyggcGFuZWxfZWwgKTtcclxuXHRcdFx0XHR9IGNhdGNoICggXyApIHsgfVxyXG5cdFx0XHR9IGNhdGNoICggXyApIHsgfVxyXG5cclxuXHRcdFx0cmV0dXJuIHBhbmVsX2VsO1xyXG5cdFx0fVxyXG5cclxuXHRcdFVJLldQQkNfQkZCX0luc3BlY3Rvcl9GYWN0b3J5ID0geyByZW5kZXI6IGZhY3RvcnlfcmVuZGVyIH07ICAgLy8gb3ZlcndyaXRlL3JlZnJlc2hcclxuXHJcblx0XHQvLyAtLS0tIEJ1aWx0LWluIHNsb3QgKyB2YWx1ZV9mcm9tIGZvciBTZWN0aW9ucyAtLS0tXHJcblxyXG5cdFx0ZnVuY3Rpb24gc2xvdF9sYXlvdXRfY2hpcHMoaG9zdCwgY3R4KSB7XHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0dmFyIEwgPSB3LldQQkNfQkZCX0NvcmUgJiYgIHcuV1BCQ19CRkJfQ29yZS5VSSAmJiB3LldQQkNfQkZCX0NvcmUuVUkuV1BCQ19CRkJfTGF5b3V0X0NoaXBzO1xyXG5cdFx0XHRcdGlmICggTCAmJiB0eXBlb2YgTC5yZW5kZXJfZm9yX3NlY3Rpb24gPT09ICdmdW5jdGlvbicgKSB7XHJcblx0XHRcdFx0XHRMLnJlbmRlcl9mb3Jfc2VjdGlvbiggY3R4LmJ1aWxkZXIsIGN0eC5lbCwgaG9zdCApO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRob3N0LmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSggJ1tsYXlvdXRfY2hpcHMgbm90IGF2YWlsYWJsZV0nICkgKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gY2F0Y2ggKCBlICkge1xyXG5cdFx0XHRcdGNvbnNvbGUud2FybiggJ3dwYmNfYmZiX3Nsb3RfbGF5b3V0X2NoaXBzIGZhaWxlZDonLCBlICk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHR3LndwYmNfYmZiX2luc3BlY3Rvcl9mYWN0b3J5X3Nsb3RzLmxheW91dF9jaGlwcyA9IHNsb3RfbGF5b3V0X2NoaXBzO1xyXG5cclxuXHRcdGZ1bmN0aW9uIHZhbHVlX2Zyb21fY29tcHV0ZV9zZWN0aW9uX2NvbHVtbnMoY3R4KSB7XHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0dmFyIHJvdyA9IGN0eCAmJiBjdHguZWwgJiYgY3R4LmVsLnF1ZXJ5U2VsZWN0b3IgJiYgY3R4LmVsLnF1ZXJ5U2VsZWN0b3IoICc6c2NvcGUgPiAud3BiY19iZmJfX3JvdycgKTtcclxuXHRcdFx0XHRpZiAoICFyb3cgKSByZXR1cm4gMTtcclxuXHRcdFx0XHR2YXIgbiA9IHJvdy5xdWVyeVNlbGVjdG9yQWxsKCAnOnNjb3BlID4gLndwYmNfYmZiX19jb2x1bW4nICkubGVuZ3RoIHx8IDE7XHJcblx0XHRcdFx0aWYgKCBuIDwgMSApIG4gPSAxO1xyXG5cdFx0XHRcdGlmICggbiA+IDQgKSBuID0gNDtcclxuXHRcdFx0XHRyZXR1cm4gbjtcclxuXHRcdFx0fSBjYXRjaCAoIF8gKSB7XHJcblx0XHRcdFx0cmV0dXJuIDE7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHR3LndwYmNfYmZiX2luc3BlY3Rvcl9mYWN0b3J5X3ZhbHVlX2Zyb20uY29tcHV0ZV9zZWN0aW9uX2NvbHVtbnMgPSB2YWx1ZV9mcm9tX2NvbXB1dGVfc2VjdGlvbl9jb2x1bW5zO1xyXG5cdH1cclxuXHJcblx0Ly8gMykgSW5zcGVjdG9yIGNsYXNzLlxyXG5cclxuXHRjbGFzcyBXUEJDX0JGQl9JbnNwZWN0b3Ige1xyXG5cclxuXHRcdGNvbnN0cnVjdG9yKHBhbmVsX2VsLCBidWlsZGVyKSB7XHJcblx0XHRcdHRoaXMucGFuZWwgICAgICAgICA9IHBhbmVsX2VsIHx8IHRoaXMuX2NyZWF0ZV9mYWxsYmFja19wYW5lbCgpO1xyXG5cdFx0XHR0aGlzLmJ1aWxkZXIgICAgICAgPSBidWlsZGVyO1xyXG5cdFx0XHR0aGlzLnNlbGVjdGVkX2VsICAgPSBudWxsO1xyXG5cdFx0XHR0aGlzLl9yZW5kZXJfdGltZXIgPSBudWxsO1xyXG5cclxuXHRcdFx0dGhpcy5fb25fZGVsZWdhdGVkX2lucHV0ICA9IChlKSA9PiB0aGlzLl9hcHBseV9jb250cm9sX2Zyb21fZXZlbnQoIGUgKTtcclxuXHRcdFx0dGhpcy5fb25fZGVsZWdhdGVkX2NoYW5nZSA9IChlKSA9PiB0aGlzLl9hcHBseV9jb250cm9sX2Zyb21fZXZlbnQoIGUgKTtcclxuXHRcdFx0dGhpcy5wYW5lbC5hZGRFdmVudExpc3RlbmVyKCAnaW5wdXQnLCB0aGlzLl9vbl9kZWxlZ2F0ZWRfaW5wdXQsIHRydWUgKTtcclxuXHRcdFx0dGhpcy5wYW5lbC5hZGRFdmVudExpc3RlbmVyKCAnY2hhbmdlJywgdGhpcy5fb25fZGVsZWdhdGVkX2NoYW5nZSwgdHJ1ZSApO1xyXG5cclxuXHRcdFx0dGhpcy5fb25fZGVsZWdhdGVkX2NsaWNrID0gKGUpID0+IHtcclxuXHRcdFx0XHRjb25zdCBidG4gPSBlLnRhcmdldC5jbG9zZXN0KCAnW2RhdGEtYWN0aW9uXScgKTtcclxuXHRcdFx0XHRpZiAoICFidG4gfHwgIXRoaXMucGFuZWwuY29udGFpbnMoIGJ0biApICkgcmV0dXJuO1xyXG5cdFx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcclxuXHRcdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cclxuXHRcdFx0XHRjb25zdCBhY3Rpb24gPSBidG4uZ2V0QXR0cmlidXRlKCAnZGF0YS1hY3Rpb24nICk7XHJcblx0XHRcdFx0Y29uc3QgZWwgICAgID0gdGhpcy5zZWxlY3RlZF9lbDtcclxuXHRcdFx0XHRpZiAoICFlbCApIHJldHVybjtcclxuXHJcblx0XHRcdFx0dy5XUEJDX0JGQl9JbnNwZWN0b3JfQWN0aW9ucz8ucnVuKCBhY3Rpb24sIHtcclxuXHRcdFx0XHRcdGJ1aWxkZXI6IHRoaXMuYnVpbGRlcixcclxuXHRcdFx0XHRcdGVsLFxyXG5cdFx0XHRcdFx0cGFuZWwgIDogdGhpcy5wYW5lbCxcclxuXHRcdFx0XHRcdGV2ZW50ICA6IGVcclxuXHRcdFx0XHR9ICk7XHJcblxyXG5cdFx0XHRcdGlmICggYWN0aW9uID09PSAnZGVsZXRlJyApIHRoaXMuY2xlYXIoKTtcclxuXHRcdFx0fTtcclxuXHRcdFx0dGhpcy5wYW5lbC5hZGRFdmVudExpc3RlbmVyKCAnY2xpY2snLCB0aGlzLl9vbl9kZWxlZ2F0ZWRfY2xpY2sgKTtcclxuXHRcdH1cclxuXHJcblx0XHRfcG9zdF9yZW5kZXJfdWkoKSB7XHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0dmFyIFVJID0gdy5XUEJDX0JGQl9Db3JlICYmIHcuV1BCQ19CRkJfQ29yZS5VSTtcclxuXHRcdFx0XHRpZiAoIFVJICYmIHR5cGVvZiBVSS5hcHBseV9wb3N0X3JlbmRlciA9PT0gJ2Z1bmN0aW9uJyApIHtcclxuXHRcdFx0XHRcdFVJLmFwcGx5X3Bvc3RfcmVuZGVyKCB0aGlzLnBhbmVsICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdC8vIE5FVzogd2lyZSBzbGlkZXIvbnVtYmVyL3VuaXQgc3luY2luZyBmb3IgbGVuZ3RoICYgcmFuZ2VfbnVtYmVyIGdyb3Vwcy5cclxuXHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0d2lyZV9sZW5fZ3JvdXAoIHRoaXMucGFuZWwgKTtcclxuXHRcdFx0XHRcdGluaXRfY29sb3Jpc19waWNrZXJzKCB0aGlzLnBhbmVsICk7XHJcblx0XHRcdFx0fSBjYXRjaCAoIF8gKSB7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGNhdGNoICggZSApIHtcclxuXHRcdFx0XHRfd3BiYz8uZGV2Py5lcnJvcj8uKCAnaW5zcGVjdG9yLl9wb3N0X3JlbmRlcl91aScsIGUgKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHJcblx0XHRfYXBwbHlfY29udHJvbF9mcm9tX2V2ZW50KGUpIHtcclxuXHRcdFx0aWYgKCAhdGhpcy5wYW5lbC5jb250YWlucyggZS50YXJnZXQgKSApIHJldHVybjtcclxuXHJcblx0XHRcdGNvbnN0IHQgICA9IC8qKiBAdHlwZSB7SFRNTElucHV0RWxlbWVudHxIVE1MVGV4dEFyZWFFbGVtZW50fEhUTUxTZWxlY3RFbGVtZW50fSAqLyAoZS50YXJnZXQpO1xyXG5cdFx0XHRjb25zdCBrZXkgPSB0Py5kYXRhc2V0Py5pbnNwZWN0b3JLZXk7XHJcblx0XHRcdGlmICggIWtleSApIHJldHVybjtcclxuXHJcblx0XHRcdGNvbnN0IGVsID0gdGhpcy5zZWxlY3RlZF9lbDtcclxuXHRcdFx0aWYgKCAhZWwgfHwgIWRvY3VtZW50LmJvZHkuY29udGFpbnMoIGVsICkgKSByZXR1cm47XHJcblxyXG5cdFx0XHRsZXQgdjtcclxuXHRcdFx0aWYgKCB0IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCAmJiB0LnR5cGUgPT09ICdjaGVja2JveCcgKSB7XHJcblx0XHRcdFx0diA9ICEhdC5jaGVja2VkO1xyXG5cdFx0XHRcdHQuc2V0QXR0cmlidXRlKCAnYXJpYS1jaGVja2VkJywgdiA/ICd0cnVlJyA6ICdmYWxzZScgKTsgICAgICAgICAvLyBLZWVwIEFSSUEgc3RhdGUgaW4gc3luYyBmb3IgdG9nZ2xlcyAoc2NoZW1hIGFuZCB0ZW1wbGF0ZSBwYXRocykuXHJcblx0XHRcdH0gZWxzZSBpZiAoIHQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50ICYmIHQudHlwZSA9PT0gJ251bWJlcicgKSB7XHJcblx0XHRcdFx0diA9ICh0LnZhbHVlID09PSAnJyA/ICcnIDogTnVtYmVyKCB0LnZhbHVlICkpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHYgPSB0LnZhbHVlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoIGtleSA9PT0gJ2lkJyApIHtcclxuXHRcdFx0XHRjb25zdCB1bmlxdWUgPSB0aGlzLmJ1aWxkZXI/LmlkPy5zZXRfZmllbGRfaWQ/LiggZWwsIHYgKTtcclxuXHRcdFx0XHRpZiAoIHVuaXF1ZSAhPSBudWxsICYmIHQudmFsdWUgIT09IHVuaXF1ZSApIHQudmFsdWUgPSB1bmlxdWU7XHJcblxyXG5cdFx0XHR9IGVsc2UgaWYgKCBrZXkgPT09ICduYW1lJyApIHtcclxuXHRcdFx0XHRjb25zdCB1bmlxdWUgPSB0aGlzLmJ1aWxkZXI/LmlkPy5zZXRfZmllbGRfbmFtZT8uKCBlbCwgdiApO1xyXG5cdFx0XHRcdGlmICggdW5pcXVlICE9IG51bGwgJiYgdC52YWx1ZSAhPT0gdW5pcXVlICkgdC52YWx1ZSA9IHVuaXF1ZTtcclxuXHJcblx0XHRcdH0gZWxzZSBpZiAoIGtleSA9PT0gJ2h0bWxfaWQnICkge1xyXG5cdFx0XHRcdGNvbnN0IGFwcGxpZWQgPSB0aGlzLmJ1aWxkZXI/LmlkPy5zZXRfZmllbGRfaHRtbF9pZD8uKCBlbCwgdiApO1xyXG5cdFx0XHRcdGlmICggYXBwbGllZCAhPSBudWxsICYmIHQudmFsdWUgIT09IGFwcGxpZWQgKSB0LnZhbHVlID0gYXBwbGllZDtcclxuXHJcblx0XHRcdH0gZWxzZSBpZiAoIGtleSA9PT0gJ2NvbHVtbnMnICYmIGVsLmNsYXNzTGlzdC5jb250YWlucyggJ3dwYmNfYmZiX19zZWN0aW9uJyApICkge1xyXG5cdFx0XHRcdGNvbnN0IHZfaW50ID0gcGFyc2VJbnQoIFN0cmluZyggdiApLCAxMCApO1xyXG5cdFx0XHRcdGlmICggTnVtYmVyLmlzRmluaXRlKCB2X2ludCApICkge1xyXG5cdFx0XHRcdFx0Y29uc3QgY2xhbXBlZCA9IHcuV1BCQ19CRkJfQ29yZS5XUEJDX0JGQl9TYW5pdGl6ZS5jbGFtcCggdl9pbnQsIDEsIDQgKTtcclxuXHRcdFx0XHRcdHRoaXMuYnVpbGRlcj8uc2V0X3NlY3Rpb25fY29sdW1ucz8uKCBlbCwgY2xhbXBlZCApO1xyXG5cdFx0XHRcdFx0aWYgKCBTdHJpbmcoIGNsYW1wZWQgKSAhPT0gdC52YWx1ZSApIHQudmFsdWUgPSBTdHJpbmcoIGNsYW1wZWQgKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGlmICggdCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQgJiYgdC50eXBlID09PSAnY2hlY2tib3gnICkge1xyXG5cdFx0XHRcdFx0ZWwuc2V0QXR0cmlidXRlKCAnZGF0YS0nICsga2V5LCBTdHJpbmcoICEhdiApICk7XHJcblx0XHRcdFx0fSBlbHNlIGlmICggdCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQgJiYgdC50eXBlID09PSAnbnVtYmVyJyApIHtcclxuXHRcdFx0XHRcdGlmICggdC52YWx1ZSA9PT0gJycgfHwgIU51bWJlci5pc0Zpbml0ZSggdiApICkge1xyXG5cdFx0XHRcdFx0XHRlbC5yZW1vdmVBdHRyaWJ1dGUoICdkYXRhLScgKyBrZXkgKTtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdGVsLnNldEF0dHJpYnV0ZSggJ2RhdGEtJyArIGtleSwgU3RyaW5nKCB2ICkgKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9IGVsc2UgaWYgKCB2ID09IG51bGwgKSB7XHJcblx0XHRcdFx0XHRlbC5yZW1vdmVBdHRyaWJ1dGUoICdkYXRhLScgKyBrZXkgKTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0ZWwuc2V0QXR0cmlidXRlKCAnZGF0YS0nICsga2V5LCAodHlwZW9mIHYgPT09ICdvYmplY3QnKSA/IEpTT04uc3RyaW5naWZ5KCB2ICkgOiBTdHJpbmcoIHYgKSApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gVXBkYXRlIHByZXZpZXcvb3ZlcmxheVxyXG5cdFx0XHRpZiAoIGVsLmNsYXNzTGlzdC5jb250YWlucyggJ3dwYmNfYmZiX19maWVsZCcgKSApIHtcclxuXHRcdFx0XHRpZiAoIHRoaXMuYnVpbGRlcj8ucHJldmlld19tb2RlICkgdGhpcy5idWlsZGVyLnJlbmRlcl9wcmV2aWV3KCBlbCApO1xyXG5cdFx0XHRcdGVsc2UgdGhpcy5idWlsZGVyLmFkZF9vdmVybGF5X3Rvb2xiYXIoIGVsICk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0dGhpcy5idWlsZGVyLmFkZF9vdmVybGF5X3Rvb2xiYXIoIGVsICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICggdGhpcy5fbmVlZHNfcmVyZW5kZXIoIGVsLCBrZXksIGUgKSApIHtcclxuXHRcdFx0XHR0aGlzLl9zY2hlZHVsZV9yZW5kZXJfcHJlc2VydmluZ19mb2N1cyggMCApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0X25lZWRzX3JlcmVuZGVyKGVsLCBrZXksIF9lKSB7XHJcblx0XHRcdGlmICggZWwuY2xhc3NMaXN0LmNvbnRhaW5zKCAnd3BiY19iZmJfX3NlY3Rpb24nICkgJiYga2V5ID09PSAnY29sdW1ucycgKSByZXR1cm4gdHJ1ZTtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGJpbmRfdG9fZmllbGQoZmllbGRfZWwpIHtcclxuXHRcdFx0dGhpcy5zZWxlY3RlZF9lbCA9IGZpZWxkX2VsO1xyXG5cdFx0XHR0aGlzLnJlbmRlcigpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNsZWFyKCkge1xyXG5cdFx0XHR0aGlzLnNlbGVjdGVkX2VsID0gbnVsbDtcclxuXHRcdFx0aWYgKCB0aGlzLl9yZW5kZXJfdGltZXIgKSB7XHJcblx0XHRcdFx0Y2xlYXJUaW1lb3V0KCB0aGlzLl9yZW5kZXJfdGltZXIgKTtcclxuXHRcdFx0XHR0aGlzLl9yZW5kZXJfdGltZXIgPSBudWxsO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vIEFsc28gY2xlYXIgdGhlIHNlY3Rpb24tY29scyBoaW50IG9uIGVtcHR5IHN0YXRlLlxyXG5cdFx0XHR0aGlzLnBhbmVsLnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS1iZmItc2VjdGlvbi1jb2xzJyk7XHJcblx0XHRcdHRoaXMucGFuZWwuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9XCJ3cGJjX2JmYl9faW5zcGVjdG9yX19lbXB0eVwiPlNlbGVjdCBhIGZpZWxkIHRvIGVkaXQgaXRzIG9wdGlvbnMuPC9kaXY+JztcclxuXHRcdH1cclxuXHJcblx0XHRfc2NoZWR1bGVfcmVuZGVyX3ByZXNlcnZpbmdfZm9jdXMoZGVsYXkgPSAyMDApIHtcclxuXHRcdFx0Y29uc3QgYWN0aXZlICAgID0gLyoqIEB0eXBlIHtIVE1MSW5wdXRFbGVtZW50fEhUTUxUZXh0QXJlYUVsZW1lbnR8SFRNTEVsZW1lbnR8bnVsbH0gKi8gKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpO1xyXG5cdFx0XHRjb25zdCBhY3RpdmVLZXkgPSBhY3RpdmU/LmRhdGFzZXQ/Lmluc3BlY3RvcktleSB8fCBudWxsO1xyXG5cdFx0XHRsZXQgc2VsU3RhcnQgICAgPSBudWxsLCBzZWxFbmQgPSBudWxsO1xyXG5cclxuXHRcdFx0aWYgKCBhY3RpdmUgJiYgJ3NlbGVjdGlvblN0YXJ0JyBpbiBhY3RpdmUgJiYgJ3NlbGVjdGlvbkVuZCcgaW4gYWN0aXZlICkge1xyXG5cdFx0XHRcdC8vIEB0cy1pZ25vcmVcclxuXHRcdFx0XHRzZWxTdGFydCA9IGFjdGl2ZS5zZWxlY3Rpb25TdGFydDtcclxuXHRcdFx0XHQvLyBAdHMtaWdub3JlXHJcblx0XHRcdFx0c2VsRW5kICAgPSBhY3RpdmUuc2VsZWN0aW9uRW5kO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoIHRoaXMuX3JlbmRlcl90aW1lciApIGNsZWFyVGltZW91dCggdGhpcy5fcmVuZGVyX3RpbWVyICk7XHJcblx0XHRcdHRoaXMuX3JlbmRlcl90aW1lciA9IC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gKHNldFRpbWVvdXQoICgpID0+IHtcclxuXHRcdFx0XHR0aGlzLnJlbmRlcigpO1xyXG5cdFx0XHRcdGlmICggYWN0aXZlS2V5ICkge1xyXG5cdFx0XHRcdFx0Y29uc3QgbmV4dCA9IC8qKiBAdHlwZSB7SFRNTElucHV0RWxlbWVudHxIVE1MVGV4dEFyZWFFbGVtZW50fEhUTUxFbGVtZW50fG51bGx9ICovIChcclxuXHRcdFx0XHRcdFx0dGhpcy5wYW5lbC5xdWVyeVNlbGVjdG9yKCBgW2RhdGEtaW5zcGVjdG9yLWtleT1cIiR7YWN0aXZlS2V5fVwiXWAgKVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdGlmICggbmV4dCApIHtcclxuXHRcdFx0XHRcdFx0bmV4dC5mb2N1cygpO1xyXG5cdFx0XHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0XHRcdGlmICggc2VsU3RhcnQgIT0gbnVsbCAmJiBzZWxFbmQgIT0gbnVsbCAmJiB0eXBlb2YgbmV4dC5zZXRTZWxlY3Rpb25SYW5nZSA9PT0gJ2Z1bmN0aW9uJyApIHtcclxuXHRcdFx0XHRcdFx0XHRcdC8vIEB0cy1pZ25vcmVcclxuXHRcdFx0XHRcdFx0XHRcdG5leHQuc2V0U2VsZWN0aW9uUmFuZ2UoIHNlbFN0YXJ0LCBzZWxFbmQgKTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH0gY2F0Y2goIGUgKXsgX3dwYmM/LmRldj8uZXJyb3IoICdfcmVuZGVyX3RpbWVyJywgZSApOyB9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LCBkZWxheSApKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZW5kZXIoKSB7XHJcblxyXG5cdFx0XHRjb25zdCBlbCA9IHRoaXMuc2VsZWN0ZWRfZWw7XHJcblx0XHRcdGlmICggIWVsIHx8ICFkb2N1bWVudC5ib2R5LmNvbnRhaW5zKCBlbCApICkgcmV0dXJuIHRoaXMuY2xlYXIoKTtcclxuXHJcblx0XHRcdC8vIFJlc2V0IHNlY3Rpb24tY29scyBoaW50IHVubGVzcyB3ZSBzZXQgaXQgbGF0ZXIgZm9yIGEgc2VjdGlvbi5cclxuXHRcdFx0dGhpcy5wYW5lbC5yZW1vdmVBdHRyaWJ1dGUoICdkYXRhLWJmYi1zZWN0aW9uLWNvbHMnICk7XHJcblxyXG5cdFx0XHRjb25zdCBwcmV2X3Njcm9sbCA9IHRoaXMucGFuZWwuc2Nyb2xsVG9wO1xyXG5cclxuXHRcdFx0Ly8gU2VjdGlvblxyXG5cdFx0XHRpZiAoIGVsLmNsYXNzTGlzdC5jb250YWlucyggJ3dwYmNfYmZiX19zZWN0aW9uJyApICkge1xyXG5cdFx0XHRcdGxldCB0cGwgPSBudWxsO1xyXG5cdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHR0cGwgPSAody53cCAmJiB3cC50ZW1wbGF0ZSAmJiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ3RtcGwtd3BiYy1iZmItaW5zcGVjdG9yLXNlY3Rpb24nICkpID8gd3AudGVtcGxhdGUoICd3cGJjLWJmYi1pbnNwZWN0b3Itc2VjdGlvbicgKSA6IG51bGw7XHJcblx0XHRcdFx0fSBjYXRjaCAoIF8gKSB7XHJcblx0XHRcdFx0XHR0cGwgPSBudWxsO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aWYgKCB0cGwgKSB7XHJcblx0XHRcdFx0XHR0aGlzLnBhbmVsLmlubmVySFRNTCA9IHRwbCgge30gKTtcclxuXHRcdFx0XHRcdHRoaXMuX2VuZm9yY2VfZGVmYXVsdF9ncm91cF9vcGVuKCk7XHJcblx0XHRcdFx0XHR0aGlzLl9zZXRfcGFuZWxfc2VjdGlvbl9jb2xzKCBlbCApO1xyXG5cdFx0XHRcdFx0dGhpcy5fcG9zdF9yZW5kZXJfdWkoKTtcclxuXHRcdFx0XHRcdHRoaXMucGFuZWwuc2Nyb2xsVG9wID0gcHJldl9zY3JvbGw7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRjb25zdCBGYWN0b3J5ID0gdy5XUEJDX0JGQl9Db3JlLlVJICYmIHcuV1BCQ19CRkJfQ29yZS5VSS5XUEJDX0JGQl9JbnNwZWN0b3JfRmFjdG9yeTtcclxuXHRcdFx0XHRjb25zdCBzY2hlbWFzID0gdy5XUEJDX0JGQl9TY2hlbWFzIHx8IHt9O1xyXG5cdFx0XHRcdGNvbnN0IGVudHJ5ICAgPSBzY2hlbWFzWydzZWN0aW9uJ10gfHwgbnVsbDtcclxuXHRcdFx0XHRpZiAoIGVudHJ5ICYmIEZhY3RvcnkgKSB7XHJcblx0XHRcdFx0XHR0aGlzLnBhbmVsLmlubmVySFRNTCA9ICcnO1xyXG5cdFx0XHRcdFx0RmFjdG9yeS5yZW5kZXIoXHJcblx0XHRcdFx0XHRcdHRoaXMucGFuZWwsXHJcblx0XHRcdFx0XHRcdGVudHJ5LFxyXG5cdFx0XHRcdFx0XHR7fSxcclxuXHRcdFx0XHRcdFx0eyBlbCwgYnVpbGRlcjogdGhpcy5idWlsZGVyLCB0eXBlOiAnc2VjdGlvbicsIHRpdGxlOiBlbnRyeS5sYWJlbCB8fCAnU2VjdGlvbicgfVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdHRoaXMuX2VuZm9yY2VfZGVmYXVsdF9ncm91cF9vcGVuKCk7XHJcblxyXG5cdFx0XHRcdFx0Ly8gLS0tIFNhZmV0eSBuZXQ6IGlmIGZvciBhbnkgcmVhc29uIHRoZSBzbG90IGRpZG7igJl0IHJlbmRlciBjaGlwcywgaW5qZWN0IHRoZW0gbm93LlxyXG5cdFx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdFx0Y29uc3QgaGFzU2xvdEhvc3QgPVxyXG5cdFx0XHRcdFx0XHRcdFx0ICB0aGlzLnBhbmVsLnF1ZXJ5U2VsZWN0b3IoICdbZGF0YS1iZmItc2xvdD1cImxheW91dF9jaGlwc1wiXScgKSB8fFxyXG5cdFx0XHRcdFx0XHRcdFx0ICB0aGlzLnBhbmVsLnF1ZXJ5U2VsZWN0b3IoICcuaW5zcGVjdG9yX19yb3ctLWxheW91dC1jaGlwcyAud3BiY19iZmJfX2xheW91dF9jaGlwcycgKSB8fFxyXG5cdFx0XHRcdFx0XHRcdFx0ICB0aGlzLnBhbmVsLnF1ZXJ5U2VsZWN0b3IoICcjd3BiY19iZmJfX2xheW91dF9jaGlwc19ob3N0JyApO1xyXG5cclxuXHRcdFx0XHRcdFx0Y29uc3QgaGFzQ2hpcHMgPVxyXG5cdFx0XHRcdFx0XHRcdFx0ICAhIXRoaXMucGFuZWwucXVlcnlTZWxlY3RvciggJy53cGJjX2JmYl9fbGF5b3V0X2NoaXAnICk7XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAoICFoYXNDaGlwcyApIHtcclxuXHRcdFx0XHRcdFx0XHQvLyBDcmVhdGUgYSBob3N0IGlmIG1pc3NpbmcgYW5kIHJlbmRlciBjaGlwcyBpbnRvIGl0LlxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IGhvc3QgPSAoZnVuY3Rpb24gZW5zdXJlSG9zdChyb290KSB7XHJcblx0XHRcdFx0XHRcdFx0XHRsZXQgaCA9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0cm9vdC5xdWVyeVNlbGVjdG9yKCAnW2RhdGEtYmZiLXNsb3Q9XCJsYXlvdXRfY2hpcHNcIl0nICkgfHxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyb290LnF1ZXJ5U2VsZWN0b3IoICcuaW5zcGVjdG9yX19yb3ctLWxheW91dC1jaGlwcyAud3BiY19iZmJfX2xheW91dF9jaGlwcycgKSB8fFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJvb3QucXVlcnlTZWxlY3RvciggJyN3cGJjX2JmYl9fbGF5b3V0X2NoaXBzX2hvc3QnICk7XHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoIGggKSByZXR1cm4gaDtcclxuXHRcdFx0XHRcdFx0XHRcdC8vIEZhbGxiYWNrIGhvc3QgaW5zaWRlIChvciBhZnRlcikgdGhlIOKAnGxheW91dOKAnSBncm91cFxyXG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgZmllbGRzICAgID1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgIHJvb3QucXVlcnlTZWxlY3RvciggJy53cGJjX2JmYl9faW5zcGVjdG9yX19ncm91cFtkYXRhLWdyb3VwPVwibGF5b3V0XCJdIC5ncm91cF9fZmllbGRzJyApIHx8XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICByb290LnF1ZXJ5U2VsZWN0b3IoICcuZ3JvdXBfX2ZpZWxkcycgKSB8fCByb290O1xyXG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qgcm93ICAgICAgID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKTtcclxuXHRcdFx0XHRcdFx0XHRcdHJvdy5jbGFzc05hbWUgICA9ICdpbnNwZWN0b3JfX3JvdyBpbnNwZWN0b3JfX3Jvdy0tbGF5b3V0LWNoaXBzJztcclxuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGxhYiAgICAgICA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdsYWJlbCcgKTtcclxuXHRcdFx0XHRcdFx0XHRcdGxhYi5jbGFzc05hbWUgICA9ICdpbnNwZWN0b3JfX2xhYmVsJztcclxuXHRcdFx0XHRcdFx0XHRcdGxhYi50ZXh0Q29udGVudCA9ICdMYXlvdXQnO1xyXG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgY3RsICAgICAgID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKTtcclxuXHRcdFx0XHRcdFx0XHRcdGN0bC5jbGFzc05hbWUgICA9ICdpbnNwZWN0b3JfX2NvbnRyb2wnO1xyXG5cdFx0XHRcdFx0XHRcdFx0aCAgICAgICAgICAgICAgID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKTtcclxuXHRcdFx0XHRcdFx0XHRcdGguY2xhc3NOYW1lICAgICA9ICd3cGJjX2JmYl9fbGF5b3V0X2NoaXBzJztcclxuXHRcdFx0XHRcdFx0XHRcdGguc2V0QXR0cmlidXRlKCAnZGF0YS1iZmItc2xvdCcsICdsYXlvdXRfY2hpcHMnICk7XHJcblx0XHRcdFx0XHRcdFx0XHRjdGwuYXBwZW5kQ2hpbGQoIGggKTtcclxuXHRcdFx0XHRcdFx0XHRcdHJvdy5hcHBlbmRDaGlsZCggbGFiICk7XHJcblx0XHRcdFx0XHRcdFx0XHRyb3cuYXBwZW5kQ2hpbGQoIGN0bCApO1xyXG5cdFx0XHRcdFx0XHRcdFx0ZmllbGRzLmFwcGVuZENoaWxkKCByb3cgKTtcclxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBoO1xyXG5cdFx0XHRcdFx0XHRcdH0pKCB0aGlzLnBhbmVsICk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IEwgPSAody5XUEJDX0JGQl9Db3JlICYmIHcuV1BCQ19CRkJfQ29yZS5VSSAmJiB3LldQQkNfQkZCX0NvcmUuVUkuV1BCQ19CRkJfTGF5b3V0X0NoaXBzKSA7XHJcblx0XHRcdFx0XHRcdFx0aWYgKCBMICYmIHR5cGVvZiBMLnJlbmRlcl9mb3Jfc2VjdGlvbiA9PT0gJ2Z1bmN0aW9uJyApIHtcclxuXHRcdFx0XHRcdFx0XHRcdGhvc3QuaW5uZXJIVE1MID0gJyc7XHJcblx0XHRcdFx0XHRcdFx0XHRMLnJlbmRlcl9mb3Jfc2VjdGlvbiggdGhpcy5idWlsZGVyLCBlbCwgaG9zdCApO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSBjYXRjaCggZSApeyBfd3BiYz8uZGV2Py5lcnJvciggJ1dQQkNfQkZCX0luc3BlY3RvciAtIHJlbmRlcicsIGUgKTsgfVxyXG5cclxuXHRcdFx0XHRcdHRoaXMuX3NldF9wYW5lbF9zZWN0aW9uX2NvbHMoIGVsICk7XHJcblx0XHRcdFx0XHR0aGlzLnBhbmVsLnNjcm9sbFRvcCA9IHByZXZfc2Nyb2xsO1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0dGhpcy5wYW5lbC5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz1cIndwYmNfYmZiX19pbnNwZWN0b3JfX2VtcHR5XCI+U2VsZWN0IGEgZmllbGQgdG8gZWRpdCBpdHMgb3B0aW9ucy48L2Rpdj4nO1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gRmllbGRcclxuXHRcdFx0aWYgKCAhZWwuY2xhc3NMaXN0LmNvbnRhaW5zKCAnd3BiY19iZmJfX2ZpZWxkJyApICkgcmV0dXJuIHRoaXMuY2xlYXIoKTtcclxuXHJcblx0XHRcdGNvbnN0IGRhdGEgPSB3LldQQkNfQkZCX0NvcmUuV1BCQ19Gb3JtX0J1aWxkZXJfSGVscGVyLmdldF9hbGxfZGF0YV9hdHRyaWJ1dGVzKCBlbCApO1xyXG5cdFx0XHRjb25zdCB0eXBlID0gZGF0YS50eXBlIHx8ICd0ZXh0JztcclxuXHJcblx0XHRcdGZ1bmN0aW9uIF9nZXRfdHBsKGlkKSB7XHJcblx0XHRcdFx0aWYgKCAhdy53cCB8fCAhd3AudGVtcGxhdGUgKSByZXR1cm4gbnVsbDtcclxuXHRcdFx0XHRpZiAoICFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ3RtcGwtJyArIGlkICkgKSByZXR1cm4gbnVsbDtcclxuXHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHdwLnRlbXBsYXRlKCBpZCApO1xyXG5cdFx0XHRcdH0gY2F0Y2ggKCBlICkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRjb25zdCB0cGxfaWQgICAgICA9IGB3cGJjLWJmYi1pbnNwZWN0b3ItJHt0eXBlfWA7XHJcblx0XHRcdGNvbnN0IHRwbCAgICAgICAgID0gX2dldF90cGwoIHRwbF9pZCApO1xyXG5cdFx0XHRjb25zdCBnZW5lcmljX3RwbCA9IF9nZXRfdHBsKCAnd3BiYy1iZmItaW5zcGVjdG9yLWdlbmVyaWMnICk7XHJcblxyXG5cdFx0XHRjb25zdCBzY2hlbWFzICAgICAgICAgPSB3LldQQkNfQkZCX1NjaGVtYXMgfHwge307XHJcblx0XHRcdGNvbnN0IHNjaGVtYV9mb3JfdHlwZSA9IHNjaGVtYXNbdHlwZV0gfHwgbnVsbDtcclxuXHRcdFx0Y29uc3QgRmFjdG9yeSAgICAgICAgID0gdy5XUEJDX0JGQl9Db3JlLlVJICYmIHcuV1BCQ19CRkJfQ29yZS5VSS5XUEJDX0JGQl9JbnNwZWN0b3JfRmFjdG9yeTtcclxuXHJcblx0XHRcdGlmICggdHBsICkge1xyXG5cdFx0XHRcdC8vIE5FVzogbWVyZ2Ugc2NoZW1hIGRlZmF1bHRzIHNvIG1pc3Npbmcga2V5cyAoZXNwLiBib29sZWFucykgaG9ub3IgZGVmYXVsdHMgb24gZmlyc3QgcGFpbnRcclxuXHRcdFx0XHRjb25zdCBoYXNPd24gPSBGdW5jdGlvbi5jYWxsLmJpbmQoIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkgKTtcclxuXHRcdFx0XHRjb25zdCBwcm9wcyAgPSAoc2NoZW1hX2Zvcl90eXBlICYmIHNjaGVtYV9mb3JfdHlwZS5zY2hlbWEgJiYgc2NoZW1hX2Zvcl90eXBlLnNjaGVtYS5wcm9wcykgPyBzY2hlbWFfZm9yX3R5cGUuc2NoZW1hLnByb3BzIDoge307XHJcblx0XHRcdFx0Y29uc3QgbWVyZ2VkID0geyAuLi5kYXRhIH07XG5cdFx0XHRcdGlmICggcHJvcHMgKSB7XG5cdFx0XHRcdFx0T2JqZWN0LmtleXMoIHByb3BzICkuZm9yRWFjaCggKGspID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IG1ldGEgPSBwcm9wc1trXSB8fCB7fTtcblx0XHRcdFx0XHRcdGlmICggIWhhc093biggZGF0YSwgayApICkge1xuXHRcdFx0XHRcdFx0XHRpZiAoIGhhc093biggbWV0YSwgJ2RlZmF1bHQnICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gQ29lcmNlIGJvb2xlYW5zIHRvIGEgcmVhbCBib29sZWFuOyBsZWF2ZSBvdGhlcnMgYXMtaXNcblx0XHRcdFx0XHRcdFx0XHRtZXJnZWRba10gPSAobWV0YS50eXBlID09PSAnYm9vbGVhbicpID8gISFtZXRhLmRlZmF1bHQgOiBtZXRhLmRlZmF1bHQ7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIG1ldGEudHlwZSA9PT0gJ2Jvb2xlYW4nICkge1xuXHRcdFx0XHRcdFx0XHQvLyBFeHBsaWNpdCBlbXB0eSB2YWx1ZXMgYXJlIGxlZ2FjeSB1bmNoZWNrZWQgYm9vbGVhbnMsIG5vdCBtaXNzaW5nIGRlZmF1bHRzLlxuXHRcdFx0XHRcdFx0XHRtZXJnZWRba10gPSB3LldQQkNfQkZCX0NvcmUuV1BCQ19CRkJfU2FuaXRpemUuY29lcmNlX2Jvb2xlYW4oIGRhdGFba10sIGZhbHNlICk7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCBkYXRhW2tdID09PSAnJyAmJiBoYXNPd24oIG1ldGEsICdkZWZhdWx0JyApICkge1xuXHRcdFx0XHRcdFx0XHRtZXJnZWRba10gPSBtZXRhLmRlZmF1bHQ7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSApO1xuXHRcdFx0XHR9XHJcblx0XHRcdFx0dGhpcy5wYW5lbC5pbm5lckhUTUwgPSB0cGwoIG1lcmdlZCApO1xyXG5cclxuXHRcdFx0XHR0aGlzLl9wb3N0X3JlbmRlcl91aSgpO1xyXG5cdFx0XHR9IGVsc2UgaWYgKCBzY2hlbWFfZm9yX3R5cGUgJiYgRmFjdG9yeSApIHtcclxuXHRcdFx0XHR0aGlzLnBhbmVsLmlubmVySFRNTCA9ICcnO1xyXG5cdFx0XHRcdEZhY3RvcnkucmVuZGVyKFxyXG5cdFx0XHRcdFx0dGhpcy5wYW5lbCxcclxuXHRcdFx0XHRcdHNjaGVtYV9mb3JfdHlwZSxcclxuXHRcdFx0XHRcdHsgLi4uZGF0YSB9LFxyXG5cdFx0XHRcdFx0eyBlbCwgYnVpbGRlcjogdGhpcy5idWlsZGVyLCB0eXBlLCB0aXRsZTogZGF0YS5sYWJlbCB8fCAnJyB9XHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHQvLyBFbnN1cmUgdG9nZ2xlIG5vcm1hbGl6ZXJzIGFuZCBzbGlkZXIvbnVtYmVyL3VuaXQgd2lyaW5nIGFyZSBhdHRhY2hlZC5cclxuXHRcdFx0XHR0aGlzLl9wb3N0X3JlbmRlcl91aSgpO1xyXG5cdFx0XHR9IGVsc2UgaWYgKCBnZW5lcmljX3RwbCApIHtcclxuXHRcdFx0XHR0aGlzLnBhbmVsLmlubmVySFRNTCA9IGdlbmVyaWNfdHBsKCB7IC4uLmRhdGEgfSApO1xyXG5cdFx0XHRcdHRoaXMuX3Bvc3RfcmVuZGVyX3VpKCk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblxyXG5cdFx0XHRcdGNvbnN0IG1zZyAgICAgICAgICAgID0gYFRoZXJlIGFyZSBubyBJbnNwZWN0b3Igd3AudGVtcGxhdGUgXCIke3RwbF9pZH1cIiBvciBTY2hlbWEgZm9yIHRoaXMgXCIke1N0cmluZyggdHlwZSB8fCAnJyApfVwiIGVsZW1lbnQuYDtcclxuXHRcdFx0XHR0aGlzLnBhbmVsLmlubmVySFRNTCA9ICcnO1xyXG5cdFx0XHRcdGNvbnN0IGRpdiAgICAgICAgICAgID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKTtcclxuXHRcdFx0XHRkaXYuY2xhc3NOYW1lICAgICAgICA9ICd3cGJjX2JmYl9faW5zcGVjdG9yX19lbXB0eSc7XHJcblx0XHRcdFx0ZGl2LnRleHRDb250ZW50ICAgICAgPSBtc2c7IC8vIHNhZmUuXHJcblx0XHRcdFx0dGhpcy5wYW5lbC5hcHBlbmRDaGlsZCggZGl2ICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHRoaXMuX2VuZm9yY2VfZGVmYXVsdF9ncm91cF9vcGVuKCk7XHJcblx0XHRcdHRoaXMucGFuZWwuc2Nyb2xsVG9wID0gcHJldl9zY3JvbGw7XHJcblx0XHR9XHJcblxyXG5cdFx0X2VuZm9yY2VfZGVmYXVsdF9ncm91cF9vcGVuKCkge1xyXG5cdFx0XHRjb25zdCBncm91cHMgPSBBcnJheS5mcm9tKCB0aGlzLnBhbmVsLnF1ZXJ5U2VsZWN0b3JBbGwoICcud3BiY19iZmJfX2luc3BlY3Rvcl9fZ3JvdXAnICkgKTtcclxuXHRcdFx0aWYgKCAhZ3JvdXBzLmxlbmd0aCApIHJldHVybjtcclxuXHJcblx0XHRcdGxldCBmb3VuZCA9IGZhbHNlO1xyXG5cdFx0XHRncm91cHMuZm9yRWFjaCggKGcpID0+IHtcclxuXHRcdFx0XHRpZiAoICFmb3VuZCAmJiBnLmNsYXNzTGlzdC5jb250YWlucyggJ2lzLW9wZW4nICkgKSB7XHJcblx0XHRcdFx0XHRmb3VuZCA9IHRydWU7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGlmICggZy5jbGFzc0xpc3QuY29udGFpbnMoICdpcy1vcGVuJyApICkge1xyXG5cdFx0XHRcdFx0XHRnLmNsYXNzTGlzdC5yZW1vdmUoICdpcy1vcGVuJyApO1xyXG5cdFx0XHRcdFx0XHRnLmRpc3BhdGNoRXZlbnQoIG5ldyBFdmVudCggJ3dwYmM6Y29sbGFwc2libGU6Y2xvc2UnLCB7IGJ1YmJsZXM6IHRydWUgfSApICk7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRnLmNsYXNzTGlzdC5yZW1vdmUoICdpcy1vcGVuJyApO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSApO1xyXG5cclxuXHRcdFx0aWYgKCAhZm91bmQgKSB7XHJcblx0XHRcdFx0Z3JvdXBzWzBdLmNsYXNzTGlzdC5hZGQoICdpcy1vcGVuJyApO1xyXG5cdFx0XHRcdGdyb3Vwc1swXS5kaXNwYXRjaEV2ZW50KCBuZXcgRXZlbnQoICd3cGJjOmNvbGxhcHNpYmxlOm9wZW4nLCB7IGJ1YmJsZXM6IHRydWUgfSApICk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFNldCBkYXRhLWJmYi1zZWN0aW9uLWNvbHMgb24gdGhlIGluc3BlY3RvciBwYW5lbCBiYXNlZCBvbiB0aGUgY3VycmVudCBzZWN0aW9uLlxyXG5cdFx0ICogVXNlcyB0aGUgcmVnaXN0ZXJlZCBjb21wdXRlIGZuIGlmIGF2YWlsYWJsZTsgZmFsbHMgYmFjayB0byBkaXJlY3QgRE9NLlxyXG5cdFx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gc2VjdGlvbkVsXHJcblx0XHQgKi9cclxuXHRcdF9zZXRfcGFuZWxfc2VjdGlvbl9jb2xzKHNlY3Rpb25FbCkge1xyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdC8vIFByZWZlciB0aGUgYWxyZWFkeS1yZWdpc3RlcmVkIHZhbHVlX2Zyb20gaGVscGVyIGlmIHByZXNlbnQuXHJcblx0XHRcdFx0dmFyIGNvbXB1dGUgPSB3LndwYmNfYmZiX2luc3BlY3Rvcl9mYWN0b3J5X3ZhbHVlX2Zyb20gJiYgdy53cGJjX2JmYl9pbnNwZWN0b3JfZmFjdG9yeV92YWx1ZV9mcm9tLmNvbXB1dGVfc2VjdGlvbl9jb2x1bW5zO1xyXG5cclxuXHRcdFx0XHR2YXIgY29scyA9IDE7XHJcblx0XHRcdFx0aWYgKCB0eXBlb2YgY29tcHV0ZSA9PT0gJ2Z1bmN0aW9uJyApIHtcclxuXHRcdFx0XHRcdGNvbHMgPSBjb21wdXRlKCB7IGVsOiBzZWN0aW9uRWwgfSApIHx8IDE7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdC8vIEZhbGxiYWNrOiBjb21wdXRlIGRpcmVjdGx5IGZyb20gdGhlIERPTS5cclxuXHRcdFx0XHRcdHZhciByb3cgPSBzZWN0aW9uRWwgJiYgc2VjdGlvbkVsLnF1ZXJ5U2VsZWN0b3IoICc6c2NvcGUgPiAud3BiY19iZmJfX3JvdycgKTtcclxuXHRcdFx0XHRcdGNvbHMgICAgPSByb3cgPyAocm93LnF1ZXJ5U2VsZWN0b3JBbGwoICc6c2NvcGUgPiAud3BiY19iZmJfX2NvbHVtbicgKS5sZW5ndGggfHwgMSkgOiAxO1xyXG5cdFx0XHRcdFx0aWYgKCBjb2xzIDwgMSApIGNvbHMgPSAxO1xyXG5cdFx0XHRcdFx0aWYgKCBjb2xzID4gNCApIGNvbHMgPSA0O1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHR0aGlzLnBhbmVsLnNldEF0dHJpYnV0ZSggJ2RhdGEtYmZiLXNlY3Rpb24tY29scycsIFN0cmluZyggY29scyApICk7XHJcblx0XHRcdH0gY2F0Y2ggKCBfICkge1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cclxuXHRcdF9jcmVhdGVfZmFsbGJhY2tfcGFuZWwoKSB7XHJcblx0XHRcdGNvbnN0IHAgICAgID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKTtcclxuXHRcdFx0cC5pZCAgICAgICAgPSAnd3BiY19iZmJfX2luc3BlY3Rvcic7XHJcblx0XHRcdHAuY2xhc3NOYW1lID0gJ3dwYmNfYmZiX19pbnNwZWN0b3InO1xyXG5cdFx0XHRkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKCBwICk7XHJcblx0XHRcdHJldHVybiAvKiogQHR5cGUge0hUTUxEaXZFbGVtZW50fSAqLyAocCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyBFeHBvcnQgY2xhc3MgKyByZWFkeSBzaWduYWwuXHJcblx0dy5XUEJDX0JGQl9JbnNwZWN0b3IgPSBXUEJDX0JGQl9JbnNwZWN0b3I7XHJcblx0ZG9jdW1lbnQuZGlzcGF0Y2hFdmVudCggbmV3IEV2ZW50KCAnd3BiY19iZmJfaW5zcGVjdG9yX3JlYWR5JyApICk7XHJcblxyXG59KSggd2luZG93ICk7XHJcbiJdLCJtYXBwaW5ncyI6ImFBQUE7QUFDQTtBQUNBO0FBQ0EsVUFBQUEsQ0FBQSxFQUNBLGFBRUE7QUFDQSxNQUFBQyxJQUFBLENBQUFELENBQUEsQ0FBQUUsYUFBQSxDQUFBRixDQUFBLENBQUFFLGFBQUEsS0FDQSxNQUFBQyxFQUFBLENBQUFGLElBQUEsQ0FBQUUsRUFBQSxDQUFBRixJQUFBLENBQUFFLEVBQUEsS0FFQTtBQUNBO0FBQ0E7QUFDQSxJQUNBRixJQUFBLENBQUFHLGlCQUFBLE9BRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBLE9BQUFDLFFBQUFDLENBQUEsRUFDQSxPQUFBTixDQUFBLENBQUFPLEdBQUEsRUFBQVAsQ0FBQSxDQUFBTyxHQUFBLENBQUFDLE1BQUEsQ0FBQVIsQ0FBQSxDQUFBTyxHQUFBLENBQUFDLE1BQUEsQ0FBQUMsTUFBQSxDQUFBSCxDQUFBLEdBQUFHLE1BQUEsQ0FBQUgsQ0FBQSxFQUFBSSxPQUFBLHFCQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBLE9BQUFDLDRCQUFBQyxDQUFBLEVBQ0EsT0FBQUgsTUFBQSxDQUFBRyxDQUFBLEVBQ0FGLE9BQUEsZUFDQUEsT0FBQSxhQUNBQSxPQUFBLGVBQ0FBLE9BQUEsY0FDQSxDQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FDQSxPQUFBRyxpQkFBQUQsQ0FB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