-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy path467.9024a6a4.iframe.bundle.js
2 lines (2 loc) · 261 KB
/
467.9024a6a4.iframe.bundle.js
1
2
(self.webpackChunkblockly_mooc=self.webpackChunkblockly_mooc||[]).push([[467],{"./src/code-studio/clientState.js":(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";var _utils=__webpack_require__("./src/utils.js"),_activityUtils=__webpack_require__("./src/code-studio/activityUtils.js"),sessionStorage=window.sessionStorage,clientState=module.exports={};function levelProgressByScript(){var progressJson=sessionStorage.getItem("progress");try{return progressJson?JSON.parse(progressJson):{}}catch(e){return{}}}function recordVisualElementSeen(visualElementType,visualElementId){var elementSeen,elementSeenJson=sessionStorage.getItem(visualElementType)||"{}";try{(elementSeen=JSON.parse(elementSeenJson))[visualElementId]=!0,(0,_utils.trySetSessionStorage)(visualElementType,JSON.stringify(elementSeen))}catch(e){(elementSeen={})[visualElementId]=!0,(0,_utils.trySetSessionStorage)(visualElementType,JSON.stringify(elementSeen))}}function hasSeenVisualElement(visualElementType,visualElementId){var elementSeenJson=sessionStorage.getItem(visualElementType)||"{}";try{return!0===JSON.parse(elementSeenJson)[visualElementId]}catch(e){return!1}}function createKey(scriptName,levelId,prefix){return(prefix?prefix+"_":"")+scriptName+"_"+levelId}clientState.queryParams=__webpack_require__("./src/code-studio/utils.js").queryParams,clientState.EXPIRY_DAYS=365,clientState.MAXIMUM_CACHABLE_RESULT=999,clientState.reset=function(){try{sessionStorage.clear()}catch(e){}},clientState.clearProgress=function(){sessionStorage.removeItem("progress"),sessionStorage.removeItem("lines"),function removeItemsWithPrefix(sessionStorage,prefix){Object.keys(sessionStorage).filter((function(key){return key.startsWith(prefix)})).forEach((function(key){return sessionStorage.removeItem(key)}))}(sessionStorage,"source_")},clientState.sourceForLevel=function(scriptName,levelId,timestamp){var data=sessionStorage.getItem(createKey(scriptName,levelId,"source"));if(data){var parsed;try{parsed=JSON.parse(data)}catch(e){return}if(!timestamp||parsed.timestamp>timestamp)return parsed.source}},clientState.writeSourceForLevel=function(scriptName,levelId,timestamp,source){void 0!==source&&(0,_utils.trySetSessionStorage)(createKey(scriptName,levelId,"source"),JSON.stringify({source,timestamp}))},clientState.trackProgress=function(scriptName,levelId,testResult){if(testResult&&!(testResult>clientState.MAXIMUM_CACHABLE_RESULT)){var progressData=levelProgressByScript();progressData[scriptName]||(progressData[scriptName]={});var savedResult=progressData[scriptName][levelId]||0,mergedResult=(0,_activityUtils.mergeActivityResult)(savedResult,testResult);mergedResult!==savedResult&&(progressData[scriptName][levelId]=mergedResult,(0,_utils.trySetSessionStorage)("progress",JSON.stringify(progressData)))}},clientState.levelProgress=function(scriptName){return levelProgressByScript()[scriptName]||{}},clientState.hasSeenVideo=function(videoId){return hasSeenVisualElement("video",videoId)},clientState.recordVideoSeen=function(videoId){recordVisualElementSeen("video",videoId)},clientState.hasSeenCallout=function(calloutId){return hasSeenVisualElement("callout",calloutId)},clientState.recordCalloutSeen=function(calloutId){recordVisualElementSeen("callout",calloutId)}},"./src/code-studio/isRtlRedux.js":(__unused_webpack_module,exports)=>{"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=function locale(){var state=arguments.length>0&&void 0!==arguments[0]&&arguments[0],action=arguments.length>1?arguments[1]:void 0;if(action.type===SET_RTL)return action.isRtl;return state},exports.isRtlFromDOM=isRtlFromDOM,exports.setRtlFromDOM=exports.setRtl=void 0;var SET_RTL="isRtl/SET_RTL",setRtl=exports.setRtl=function setRtl(isRtl){return{type:SET_RTL,isRtl}};exports.setRtlFromDOM=function setRtlFromDOM(){return setRtl(isRtlFromDOM())};function isRtlFromDOM(){var head=document.getElementsByTagName("head")[0];if(head&&head.parentElement){var dir=head.parentElement.getAttribute("dir");return!(!dir||"rtl"!==dir.toLowerCase())}return!1}},"./src/code-studio/url_test.js":module=>{module.exports=function testImageAccess(url){var element,successCallback=arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(){},failureCallback=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(){},timeoutMs=arguments.length>3&&void 0!==arguments[3]?arguments[3]:5e3,videoElement=arguments.length>4&&void 0!==arguments[4]&&arguments[4];element=videoElement?document.createElement("video"):new Image;var called=!1;function finish(callback){return function(){called||(called=!0,window.clearTimeout(timeout),callback())}}var timeout=window.setTimeout(finish(failureCallback),timeoutMs);element.onerror=finish(failureCallback),videoElement?element.ondurationchange=finish(successCallback):element.onload=finish(successCallback),element.src=url,window.testImages=window.testImages||[],window.testImages.push(element)}},"./src/commonStyles.js":(module,__unused_webpack_exports,__webpack_require__)=>{var commonStyles=module.exports,styleConstants=__webpack_require__("./src/styleConstants.js"),color=__webpack_require__("./src/util/color.js");commonStyles.hidden={display:"none"},commonStyles.purpleHeader={height:styleConstants["workspace-headers-height"],backgroundColor:color.purple,color:color.white,overflowY:"hidden",WebkitUserSelect:"none",MozUserSelect:"none",msUserSelect:"none",userSelect:"none"},commonStyles.purpleHeaderUnfocused={backgroundColor:color.lighter_purple,color:color.neutral_white},commonStyles.teacherBlueHeader={backgroundColor:color.cyan,color:color.lightest_cyan},commonStyles.teacherHeaderUnfocused={color:color.dark_charcoal},commonStyles.minecraftHeader={backgroundColor:"#3b3b3b",color:color.white},commonStyles.button={paddingTop:5,paddingBottom:5,fontSize:14},commonStyles.bubble={color:color.black,marginBottom:10,position:"relative",cursor:"pointer"}},"./src/dom.js":(__unused_webpack_module,exports)=>{exports.addReadyListener=function(callback){"complete"===document.readyState?setTimeout(callback,1):window.addEventListener("load",callback,!1)},exports.getTouchEventName=function(eventName){var key,isIE11Touch=window.navigator.pointerEnabled,isIE10Touch=window.navigator.msPointerEnabled;if(isIE11Touch?key="ie11":isIE10Touch?key="ie10":!(isIE11Touch||isIE10Touch)&&(key="standard"),key&&TOUCH_MAP[eventName])return TOUCH_MAP[eventName][key]};var addEvent=function addEvent(element,eventName,handler){var suppressTouchDefault=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],boundEvents={},bindEvent=function bindEvent(type,eventName,handler){element.addEventListener(eventName,handler,!1),boundEvents[type]={name:eventName,handler}},unbindEvent=function unbindEvent(type){var eventInfo=boundEvents[type];eventInfo&&(element.removeEventListener(eventInfo.name,eventInfo.handler),delete boundEvents[type])};bindEvent("click",eventName,handler);var touchEvent=exports.getTouchEventName(eventName);return touchEvent&&bindEvent("touch",touchEvent,(function(e){suppressTouchDefault&&e.preventDefault();["pointerdown","MSPointerDown","pointermove","MSPointerMove","pointerup","MSPointerUp"].includes(touchEvent)&&unbindEvent("click"),null==handler||handler.call(this,e)})),function(){unbindEvent("click"),unbindEvent("touch")}};exports.addMouseDownTouchEvent=function(element,handler){return addEvent(element,"mousedown",handler)},exports.addMouseUpTouchEvent=function(element,handler){return addEvent(element,"mouseup",handler,!(arguments.length>2&&void 0!==arguments[2])||arguments[2])},exports.addMouseMoveTouchEvent=function(element,handler){return addEvent(element,"mousemove",handler)},exports.addClickTouchEvent=function(element,handler){return addEvent(element,"click",handler)};var TOUCH_MAP={click:{standard:"touchstart",ie10:"MSPointerDown",ie11:"pointerdown"},mousedown:{standard:"touchstart",ie10:"MSPointerDown",ie11:"pointerdown"},mouseup:{standard:"touchend",ie10:"MSPointerUp",ie11:"pointerup"},mousemove:{standard:"touchmove",ie10:"MSPointerMove",ie11:"pointermove"}};exports.TOUCH_MAP=TOUCH_MAP,exports.isMobile=function(){return/Mobile|iP(hone|od|ad)|Android|BlackBerry|IEMobile/.test(window.navigator.userAgent)},exports.isWindowsTouch=function(){return/MSIE.*Touch/.test(window.navigator.userAgent)},exports.isAndroid=function(){return/Android/.test(window.navigator.userAgent)},exports.isIOS=function(){return/iP(hone|od|ad)/.test(window.navigator.userAgent)},exports.isIPad=function(){return/iPad/i.test(window.navigator.userAgent)}},"./src/redux/authoredHints.js":(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=function reducer(){var state=arguments.length>0&&void 0!==arguments[0]?arguments[0]:authoredHintsInitialState,action=arguments.length>1?arguments[1]:void 0;if(action.type===ENQUEUE_HINTS){var _bisect2=function _slicedToArray(r,e){return function _arrayWithHoles(r){if(Array.isArray(r))return r}(r)||function _iterableToArrayLimit(r,l){var t=null==r?null:"undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(null!=t){var e,n,i,u,a=[],f=!0,o=!1;try{if(i=(t=t.call(r)).next,0===l){if(Object(t)!==t)return;f=!1}else for(;!(f=(e=i.call(t)).done)&&(a.push(e.value),a.length!==l);f=!0);}catch(r){o=!0,n=r}finally{try{if(!f&&null!=t.return&&(u=t.return(),Object(u)!==u))return}finally{if(o)throw n}}return a}}(r,e)||function _unsupportedIterableToArray(r,a){if(r){if("string"==typeof r)return _arrayLikeToArray(r,a);var t={}.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(r,a):void 0}}(r,e)||function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}((0,_utils.bisect)(action.hints,(function(hint){return-1!==action.hintsUsedIds.indexOf(hint.hintId)})),2),seen=_bisect2[0],unseen=_bisect2[1];return Object.assign({},state,{unseenHints:state.unseenHints.concat(unseen),seenHints:state.seenHints.concat(seen)})}if(action.type===SHOW_NEXT_HINT){var nextHint=Object.assign({},state.unseenHints[0],{alreadySeen:!0});return Object.assign({},state,{unseenHints:state.unseenHints.slice(1),seenHints:state.seenHints.concat([nextHint])})}if(action.type===DISPLAY_MISSING_BLOCK_HINTS){var seenHints=state.seenHints.filter((function(seenHint){return"contextual"!==seenHint.hintType||action.hints.some((function(newHint){return seenHint.hintId===newHint.hintId}))})),newHintsToEnqueue=action.hints.filter((function(newHint){return state.seenHints.every((function(seenHint){return newHint.hintId!==seenHint.hintId}))})),unseenNonContextualHints=state.unseenHints.filter((function(hint){return"contextual"!==hint.hintType})),newUnseenHints=newHintsToEnqueue.filter((function(hint){return!hint.alreadySeen})).concat(unseenNonContextualHints),newSeenHints=seenHints.concat(newHintsToEnqueue.filter((function(hint){return hint.alreadySeen})));return Object.assign({},state,{unseenHints:newUnseenHints,seenHints:newSeenHints})}return state},exports.showNextHint=exports.enqueueHints=exports.displayMissingBlockHints=void 0;var _utils=__webpack_require__("./src/utils.js");function _arrayLikeToArray(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e<a;e++)n[e]=r[e];return n}var ENQUEUE_HINTS="authoredHints/ENQUEUE_HINTS",SHOW_NEXT_HINT="authoredHints/SHOW_NEXT_HINT",DISPLAY_MISSING_BLOCK_HINTS="authoredHints/DISPLAY_MISSING_BLOCK_HINTS",authoredHintsInitialState={seenHints:[],unseenHints:[]};exports.enqueueHints=function enqueueHints(hints,hintsUsedIds){return{type:ENQUEUE_HINTS,hints,hintsUsedIds}},exports.showNextHint=function showNextHint(){return{type:SHOW_NEXT_HINT}},exports.displayMissingBlockHints=function displayMissingBlockHints(hints){return{type:DISPLAY_MISSING_BLOCK_HINTS,hints}}},"./src/redux/feedback.js":(__unused_webpack_module,exports)=>{"use strict";function _typeof(o){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,o)}return t}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(t),!0).forEach((function(r){_defineProperty(e,r,t[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}))}return e}function _defineProperty(e,r,t){return(r=function _toPropertyKey(t){var i=function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}(t,"string");return"symbol"==_typeof(i)?i:i+""}(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=function reducer(){var state=arguments.length>0&&void 0!==arguments[0]?arguments[0]:initialState,action=arguments.length>1?arguments[1]:void 0;if(action.type===SHOW_FEEDBACK){var displayingShareControls=action.displayingShareControls;return _objectSpread(_objectSpread({},state),{},{displayingFeedback:!0,displayingShareControls})}if(action.type===HIDE_FEEDBACK)return _objectSpread(_objectSpread({},state),{},{displayingFeedback:!1});if(action.type===SET_BLOCK_LIMIT){var blockLimit=action.blockLimit;return _objectSpread(_objectSpread({},state),{},{blockLimit})}if(action.type===SET_FEEDBACK_DATA){var isChallenge=action.isChallenge,isPerfect=action.isPerfect,blocksUsed=action.blocksUsed,displayFunometer=action.displayFunometer,studentCode=action.studentCode,feedbackImage=action.feedbackImage;return _objectSpread(_objectSpread({},state),{},{isChallenge,isPerfect,blocksUsed,displayFunometer,studentCode,feedbackImage})}if(action.type===SET_ACHIEVEMENTS){var achievements=action.achievements;return _objectSpread(_objectSpread({},state),{},{achievements})}return state},exports.showFeedback=exports.setFeedbackData=exports.setBlockLimit=exports.setAchievements=exports.hideFeedback=void 0;var SHOW_FEEDBACK="feedback/show_feedback",HIDE_FEEDBACK="feedback/hide_feedback",SET_ACHIEVEMENTS="feedback/set_achievemnts",SET_BLOCK_LIMIT="feedback/set_block_limit",SET_FEEDBACK_DATA="feedback/set_data",initialState={displayingFeedback:!1,displayingCode:!1,displayingShareControls:!1,isChallenge:!1,isPerfect:!0,blocksUsed:0,blockLimit:void 0,achievements:[],displayFunometer:!0,studentCode:{message:"",code:""},feedbackImage:null};exports.showFeedback=function showFeedback(){return{type:SHOW_FEEDBACK,displayingShareControls:arguments.length>0&&void 0!==arguments[0]&&arguments[0]}},exports.hideFeedback=function hideFeedback(){return{type:HIDE_FEEDBACK}},exports.setBlockLimit=function setBlockLimit(blockLimit){return{type:SET_BLOCK_LIMIT,blockLimit}},exports.setFeedbackData=function setFeedbackData(props){return _objectSpread({type:SET_FEEDBACK_DATA},props)},exports.setAchievements=function setAchievements(achievements){return{type:SET_ACHIEVEMENTS,achievements}}},"./src/redux/instructions.js":(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=function reducer(){var state=arguments.length>0&&void 0!==arguments[0]?arguments[0]:_objectSpread({},instructionsInitialState),action=arguments.length>1?arguments[1]:void 0;if(action.type===SET_CONSTANTS){if(state.shortInstructions||state.longInstructions)throw new Error("instructions constants already set");var noInstructionsWhenCollapsed=action.noInstructionsWhenCollapsed,shortInstructions=action.shortInstructions,shortInstructions2=action.shortInstructions2,longInstructions=action.longInstructions,dynamicInstructions=action.dynamicInstructions,hasContainedLevels=action.hasContainedLevels,overlayVisible=action.overlayVisible,teacherMarkdown=action.teacherMarkdown,levelVideos=action.levelVideos,mapReference=action.mapReference,referenceLinks=action.referenceLinks,muteBackgroundMusic=action.muteBackgroundMusic,unmuteBackgroundMusic=action.unmuteBackgroundMusic,programmingEnvironment=action.programmingEnvironment,isCollapsed=state.isCollapsed;return longInstructions||hasContainedLevels||(isCollapsed=!0),Object.assign({},state,{noInstructionsWhenCollapsed,shortInstructions,shortInstructions2,longInstructions,dynamicInstructions,teacherMarkdown,hasContainedLevels,overlayVisible,isCollapsed,levelVideos,mapReference,referenceLinks,muteBackgroundMusic,unmuteBackgroundMusic,programmingEnvironment})}if(action.type===TOGGLE_INSTRUCTIONS_COLLAPSED)return Object.assign({},state,{isCollapsed:!state.isCollapsed});if(action.type===SET_INSTRUCTIONS_RENDERED_HEIGHT&&state.allowResize)return Object.assign({},state,{renderedHeight:action.height,expandedHeight:state.isCollapsed?state.expandedHeight:action.height});if(action.type===SET_INSTRUCTIONS_MAX_HEIGHT_NEEDED&&state.allowResize)return Object.assign({},state,{maxNeededHeight:action.maxNeededHeight});if(action.type===SET_INSTRUCTIONS_MAX_HEIGHT_AVAILABLE&&action.maxAvailableHeight!==state.maxAvailableHeight&&state.allowResize)return Object.assign({},state,{maxAvailableHeight:action.maxAvailableHeight,renderedHeight:Math.min(action.maxAvailableHeight,state.renderedHeight),expandedHeight:Math.min(action.maxAvailableHeight,state.expandedHeight)});if(action.type===SET_ALLOW_INSTRUCTIONS_RESIZE)return _objectSpread(_objectSpread({},state),{},{allowResize:action.allowResize});if(action.type===SET_HAS_AUTHORED_HINTS)return Object.assign({},state,{hasAuthoredHints:action.hasAuthoredHints});if(action.type===SET_TTS_AUTOPLAY_ENABLED_FOR_LEVEL)return Object.assign({},state,{ttsAutoplayEnabledForLevel:action.ttsAutoplayEnabledForLevel});if(action.type===SET_CODE_REVIEW_ENABLED_FOR_LEVEL)return Object.assign({},state,{codeReviewEnabledForLevel:action.codeReviewEnabledForLevel});if(action.type===SET_FEEDBACK)return Object.assign({},state,{feedback:action.feedback});if(action.type===HIDE_OVERLAY)return state.dynamicInstructionsDismissCallback&&state.dynamicInstructionsDismissCallback(),Object.assign({},state,{overlayVisible:!1});if(action.type===SET_DYNAMIC_INSTRUCTIONS_DEFAULTS)return Object.assign({},state,{dynamicInstructionsDefaults:action.dynamicInstructionsDefaults});if(action.type===SET_DYNAMIC_INSTRUCTIONS_KEY)return Object.assign({},state,{dynamicInstructionsKey:action.dynamicInstructionsKey,overlayVisible:action.options&&action.options.showOverlay});if(action.type===SET_DYNAMIC_INSTRUCTIONS_DISMISS_CALLBACK)return Object.assign({},state,{dynamicInstructionsDismissCallback:action.dynamicInstructionsDismissCallback});if(action.type===SET_TA_RUBRIC)return Object.assign({},state,{taRubric:action.taRubric});return state},exports.determineInstructionsConstants=void 0,exports.getDynamicInstructions=function getDynamicInstructions(state){if(!state.dynamicInstructionsDefaults&&!state.dynamicInstructions)return;return _objectSpread(_objectSpread({},state.dynamicInstructionsDefaults),state.dynamicInstructions&&JSON.parse(state.dynamicInstructions))},exports.toggleInstructionsCollapsed=exports.substituteInstructionImages=exports.setTtsAutoplayEnabledForLevel=exports.setTaRubric=exports.setInstructionsRenderedHeight=exports.setInstructionsMaxHeightNeeded=exports.setInstructionsMaxHeightAvailable=exports.setInstructionsConstants=exports.setHasAuthoredHints=exports.setFeedback=exports.setDynamicInstructionsOverlayDismissCallback=exports.setDynamicInstructionsKey=exports.setDynamicInstructionsDefaults=exports.setCodeReviewEnabledForLevel=exports.setAllowInstructionsResize=exports.hideOverlay=void 0;var _utils=__webpack_require__("./src/utils.js");function _typeof(o){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,o)}return t}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(t),!0).forEach((function(r){_defineProperty(e,r,t[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}))}return e}function _defineProperty(e,r,t){return(r=function _toPropertyKey(t){var i=function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}(t,"string");return"symbol"==_typeof(i)?i:i+""}(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}var SET_CONSTANTS="instructions/SET_CONSTANTS",TOGGLE_INSTRUCTIONS_COLLAPSED="instructions/TOGGLE_INSTRUCTIONS_COLLAPSED",SET_INSTRUCTIONS_RENDERED_HEIGHT="instructions/SET_INSTRUCTIONS_RENDERED_HEIGHT",SET_INSTRUCTIONS_MAX_HEIGHT_NEEDED="instructions/SET_INSTRUCTIONS_MAX_HEIGHT_NEEDED",SET_INSTRUCTIONS_MAX_HEIGHT_AVAILABLE="instructions/SET_INSTRUCTIONS_MAX_HEIGHT_AVAILABLE",SET_ALLOW_INSTRUCTIONS_RESIZE="instructions/SET_ALLOW_INSTRUCTIONS_RESIZE",SET_HAS_AUTHORED_HINTS="instructions/SET_HAS_AUTHORED_HINTS",SET_FEEDBACK="instructions/SET_FEEDBACK",HIDE_OVERLAY="instructions/HIDE_OVERLAY",SET_DYNAMIC_INSTRUCTIONS_DEFAULTS="instructions/SET_DYNAMIC_INSTRUCTIONS_DEFAULTS",SET_DYNAMIC_INSTRUCTIONS_KEY="instructions/SET_DYNAMIC_INSTRUCTIONS_KEY",SET_DYNAMIC_INSTRUCTIONS_DISMISS_CALLBACK="instructions/SET_DYNAMIC_INSTRUCTIONS_DISMISS_CALLBACK",SET_TTS_AUTOPLAY_ENABLED_FOR_LEVEL="instructions/SET_TTS_AUTOPLAY_ENABLED_FOR_LEVEL",SET_CODE_REVIEW_ENABLED_FOR_LEVEL="instructions/SET_CODE_REVIEW_ENABLED_FOR_LEVEL",SET_TA_RUBRIC="instructions/SET_TA_RUBRIC",instructionsInitialState={noInstructionsWhenCollapsed:!1,shortInstructions:void 0,shortInstructions2:void 0,longInstructions:void 0,dynamicInstructions:void 0,dynamicInstructionsDefaults:void 0,dynamicInstructionsKey:void 0,teacherMarkdown:void 0,hasContainedLevels:!1,isCollapsed:!1,renderedHeight:0,expandedHeight:0,maxNeededHeight:1/0,maxAvailableHeight:1/0,allowResize:!0,hasAuthoredHints:!1,ttsAutoplayEnabledForLevel:!1,codeReviewEnabledForLevel:!1,overlayVisible:!1,levelVideos:[],mapReference:void 0,referenceLinks:[],muteBackgroundMusic:function muteBackgroundMusic(){},unmuteBackgroundMusic:function unmuteBackgroundMusic(){},programmingEnvironment:null,taRubric:null};exports.setInstructionsConstants=function setInstructionsConstants(_ref){var noInstructionsWhenCollapsed=_ref.noInstructionsWhenCollapsed,shortInstructions=_ref.shortInstructions,shortInstructions2=_ref.shortInstructions2,longInstructions=_ref.longInstructions,dynamicInstructions=_ref.dynamicInstructions,hasContainedLevels=_ref.hasContainedLevels,overlayVisible=_ref.overlayVisible,teacherMarkdown=_ref.teacherMarkdown,levelVideos=_ref.levelVideos,mapReference=_ref.mapReference,referenceLinks=_ref.referenceLinks,muteBackgroundMusic=_ref.muteBackgroundMusic,unmuteBackgroundMusic=_ref.unmuteBackgroundMusic,programmingEnvironment=_ref.programmingEnvironment;return{type:SET_CONSTANTS,noInstructionsWhenCollapsed,shortInstructions,shortInstructions2,longInstructions,dynamicInstructions,hasContainedLevels,overlayVisible,teacherMarkdown,levelVideos,mapReference,referenceLinks,muteBackgroundMusic,unmuteBackgroundMusic,programmingEnvironment}},exports.setInstructionsRenderedHeight=function setInstructionsRenderedHeight(height){return{type:SET_INSTRUCTIONS_RENDERED_HEIGHT,height}},exports.toggleInstructionsCollapsed=function toggleInstructionsCollapsed(){return{type:TOGGLE_INSTRUCTIONS_COLLAPSED}},exports.setInstructionsMaxHeightNeeded=function setInstructionsMaxHeightNeeded(height){return{type:SET_INSTRUCTIONS_MAX_HEIGHT_NEEDED,maxNeededHeight:height}},exports.setInstructionsMaxHeightAvailable=function setInstructionsMaxHeightAvailable(height){return{type:SET_INSTRUCTIONS_MAX_HEIGHT_AVAILABLE,maxAvailableHeight:height}},exports.setAllowInstructionsResize=function setAllowInstructionsResize(allowResize){return{type:SET_ALLOW_INSTRUCTIONS_RESIZE,allowResize}},exports.setHasAuthoredHints=function setHasAuthoredHints(hasAuthoredHints){return{type:SET_HAS_AUTHORED_HINTS,hasAuthoredHints}},exports.setTtsAutoplayEnabledForLevel=function setTtsAutoplayEnabledForLevel(ttsAutoplayEnabledForLevel){return{type:SET_TTS_AUTOPLAY_ENABLED_FOR_LEVEL,ttsAutoplayEnabledForLevel}},exports.setCodeReviewEnabledForLevel=function setCodeReviewEnabledForLevel(codeReviewEnabledForLevel){return{type:SET_CODE_REVIEW_ENABLED_FOR_LEVEL,codeReviewEnabledForLevel}},exports.setFeedback=function setFeedback(feedback){return{type:SET_FEEDBACK,feedback}},exports.hideOverlay=function hideOverlay(){return{type:HIDE_OVERLAY}},exports.setDynamicInstructionsDefaults=function setDynamicInstructionsDefaults(dynamicInstructionsDefaults){return{type:SET_DYNAMIC_INSTRUCTIONS_DEFAULTS,dynamicInstructionsDefaults}},exports.setDynamicInstructionsKey=function setDynamicInstructionsKey(dynamicInstructionsKey,options){return{type:SET_DYNAMIC_INSTRUCTIONS_KEY,dynamicInstructionsKey,options}},exports.setDynamicInstructionsOverlayDismissCallback=function setDynamicInstructionsOverlayDismissCallback(dynamicInstructionsDismissCallback){return{type:SET_DYNAMIC_INSTRUCTIONS_DISMISS_CALLBACK,dynamicInstructionsDismissCallback}},exports.setTaRubric=function setTaRubric(taRubric){return{type:SET_TA_RUBRIC,taRubric}};var substituteInstructionImages=exports.substituteInstructionImages=function substituteInstructionImages(htmlText,substitutions){if(!htmlText)return htmlText;for(var prop in substitutions){var imageUrl=substitutions[prop],substitutionHtml='<span class="instructionsImageContainer">'+'<img src="'.concat(imageUrl,'" class="instructionsImage"/>')+"</span>",re=new RegExp("\\["+prop+"\\]","g");htmlText=htmlText.replace(re,substitutionHtml)}return htmlText};exports.determineInstructionsConstants=function determineInstructionsConstants(config){var shortInstructions2,level=config.level,noInstructionsWhenCollapsed=config.noInstructionsWhenCollapsed,hasContainedLevels=config.hasContainedLevels,teacherMarkdown=config.teacherMarkdown,muteBackgroundMusic=config.muteBackgroundMusic,unmuteBackgroundMusic=config.unmuteBackgroundMusic,instructions2=level.instructions2,inputOutputTable=level.inputOutputTable,levelVideos=level.levelVideos,mapReference=level.mapReference,referenceLinks=level.referenceLinks,programmingEnvironment=level.programmingEnvironment,longInstructions=level.longInstructions,shortInstructions=level.shortInstructions,dynamicInstructions=level.dynamicInstructions;noInstructionsWhenCollapsed?(shortInstructions&&!longInstructions&&(longInstructions=shortInstructions),shortInstructions=void 0):(shortInstructions2=instructions2,shortInstructions===longInstructions&&(longInstructions=void 0),inputOutputTable&&(longInstructions=longInstructions||shortInstructions),config.skin.instructions2ImageSubstitutions&&(longInstructions=substituteInstructionImages(longInstructions,config.skin.instructions2ImageSubstitutions),shortInstructions=substituteInstructionImages(shortInstructions,config.skin.instructions2ImageSubstitutions),shortInstructions2=substituteInstructionImages(shortInstructions2,config.skin.instructions2ImageSubstitutions)),config.skin.replaceInstructions&&(longInstructions=config.skin.replaceInstructions(longInstructions),shortInstructions=config.skin.replaceInstructions(shortInstructions)));var hasInstructionsToShow=shortInstructions||longInstructions,overlaySeen=(0,_utils.tryGetLocalStorage)("instructionsOverlaySeenOnce",!1),shouldShowOverlay=hasInstructionsToShow&&!hasContainedLevels&&(config.level.instructionsImportant||1===config.levelPosition||!overlaySeen);return shouldShowOverlay&&(0,_utils.trySetLocalStorage)("instructionsOverlaySeenOnce",!0),{noInstructionsWhenCollapsed:!!noInstructionsWhenCollapsed,overlayVisible:!!shouldShowOverlay,shortInstructions,shortInstructions2,longInstructions,dynamicInstructions,teacherMarkdown,hasContainedLevels,levelVideos,mapReference,referenceLinks,muteBackgroundMusic,unmuteBackgroundMusic,programmingEnvironment}}},"./src/redux/instructionsDialog.js":(__unused_webpack_module,exports)=>{"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.closeDialog=void 0,exports.default=function reducer(){var state=arguments.length>0&&void 0!==arguments[0]?arguments[0]:initialState,action=arguments.length>1?arguments[1]:void 0;if(action.type===OPEN_DIALOG){if(!0===state.open)throw new Error("dialog is already open");return{open:!0,imgOnly:action.imgOnly,imgUrl:action.imgUrl}}if(action.type===CLOSE_DIALOG){if(!1===state.open)throw new Error("dialog is already closed");return{open:!1}}return state},exports.openDialog=void 0;var OPEN_DIALOG="instructionsDialog/OPEN_DIALOG",CLOSE_DIALOG="instructionsDialog/CLOSE_DIALOG",initialState={open:!1,imgOnly:!1};exports.openDialog=function openDialog(_ref){var imgOnly=_ref.imgOnly,imgUrl=_ref.imgUrl;return{type:OPEN_DIALOG,imgOnly,imgUrl}},exports.closeDialog=function closeDialog(){return{type:CLOSE_DIALOG}}},"./src/redux/pageConstants.js":(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=function reducer(){var state=arguments.length>0&&void 0!==arguments[0]?arguments[0]:initialState,action=arguments.length>1?arguments[1]:void 0;if(action.type===SET_PAGE_CONSTANTS)return Object.keys(action.props).forEach((function(key){if(!ALLOWED_KEYS.has(key))throw new Error('Property "'.concat(key,'" may not be set using the ').concat(action.type," action."));if(state[key]!==initialState[key]&&state[key]!==action.props[key])throw new Error("Can't change value of key \"".concat(key,'".'))})),_.assign({},state,action.props);return state},exports.setPageConstants=function setPageConstants(props){return{type:SET_PAGE_CONSTANTS,props}};var _=__webpack_require__("./node_modules/lodash/lodash.js"),SET_PAGE_CONSTANTS="pageConstants/SET_PAGE_CONSTANTS",ALLOWED_KEYS=new Set(["skinId","showNextHint","ttsShortInstructionsUrl","ttsLongInstructionsUrl","assetUrl","canHaveFeedbackReviewState","exampleSolutions","isViewingAsInstructorInTraining","channelId","codeOwnersName","hasDataMode","hasDesignMode","inStartBlocksMode","inToolboxBlocksMode","isChallengeLevel","isEmbedView","isResponsive","isIframeEmbed","isReadOnlyWorkspace","isCodeReviewing","isViewingOwnProject","hasBackgroundMusic","displayNotStartedBanner","displayOldVersionBanner","isShareView","isProjectLevel","isSubmittable","isSubmitted","noInstructionsWhenCollapsed","puzzleNumber","lessonTotal","showDebugButtons","showDebugConsole","showDebugWatch","showDebugSlider","debugConsoleDisabled","showMakerToggle","locale","hasContainedLevels","isDroplet","isBlockly","isBramble","isMinecraft","runButtonText","visualizationHasPadding","visualizationInWorkspace","hideCoordinateOverlay","hideSource","hideRunButton","hideResetButton","playspacePhoneFrame","noVisualization","pinWorkspaceToBottom","smallStaticAvatar","failureAvatar","aniGifURL","inputOutputTable","showAnimationMode","startInAnimationTab","allAnimationsSingleFrame","nonResponsiveVisualizationColumnWidth","is13Plus","isSignedIn","isEditingStartSources","userId","isK1","textToSpeechEnabled","documentationUrl","appType","nextLevelUrl","currentScriptLevelUrl","isProjectTemplateLevel","showProjectTemplateWorkspaceIcon","serverLevelId","serverProjectLevelId","serverScriptId","exportApp","widgetMode","librariesEnabled","validationEnabled","aiEnabled","aiModelId","aiModelName","isCurriculumLevel","recaptchaSiteKey"]),initialState={assetUrl:function assetUrl(){}}},"./src/redux/runState.js":(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=function reducer(state,action){if(state=state||initialState,action.type===SET_IS_RUNNING)return _lodash.default.assign({},state,{isRunning:action.isRunning,isDebuggerPaused:!1!==action.isRunning&&state.isDebuggerPaused,isDebuggingSprites:!1!==action.isRunning&&state.isDebuggingSprites});if(action.type===SET_IS_EDIT_WHILE_RUN)return _lodash.default.assign({},state,{isEditWhileRun:action.isEditWhileRun});if(action.type===SET_IS_DEBUGGER_PAUSED)return _lodash.default.assign({},state,{isRunning:!!action.isDebuggerPaused||state.isRunning,isDebuggerPaused:action.isDebuggerPaused,nextStep:action.nextStep});if(action.type===SET_STEP_SPEED&&"number"==typeof action.stepSpeed)return _lodash.default.assign({},state,{stepSpeed:action.stepSpeed});if(action.type===SET_AWAITING_CONTAINED_RESPONSE&&state.awaitingContainedResponse!==action.awaitingContainedResponse)return _objectSpread(_objectSpread({},state),{},{awaitingContainedResponse:action.awaitingContainedResponse});if(action.type===SET_IS_DEBUGGING_SPRITES&&state.isRunning)return _objectSpread(_objectSpread({},state),{},{isDebuggingSprites:action.isDebuggingSprites});return state},exports.setStepSpeed=exports.setIsRunning=exports.setIsEditWhileRun=exports.setIsDebuggingSprites=exports.setIsDebuggerPaused=exports.setAwaitingContainedResponse=void 0;var _lodash=function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}(__webpack_require__("./node_modules/lodash/lodash.js"));function _typeof(o){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,o)}return t}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(t),!0).forEach((function(r){_defineProperty(e,r,t[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}))}return e}function _defineProperty(e,r,t){return(r=function _toPropertyKey(t){var i=function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}(t,"string");return"symbol"==_typeof(i)?i:i+""}(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}var SET_IS_RUNNING="runState/SET_IS_RUNNING",SET_IS_EDIT_WHILE_RUN="runState/SET_IS_EDIT_WHILE_RUN",SET_IS_DEBUGGER_PAUSED="runState/SET_IS_DEBUGGER_PAUSED",SET_STEP_SPEED="runState/SET_STEP_SPEED",SET_AWAITING_CONTAINED_RESPONSE="runState/SET_AWAITING_CONTAINED_RESPONSE",SET_IS_DEBUGGING_SPRITES="runState/SET_IS_DEBUGGING_SPRITES",initialState={isRunning:!1,isEditWhileRun:!1,isDebuggerPaused:!1,nextStep:null,stepSpeed:1,isDebuggingSprites:!1,awaitingContainedResponse:!1};exports.setIsRunning=function setIsRunning(isRunning){return{type:SET_IS_RUNNING,isRunning}},exports.setIsEditWhileRun=function setIsEditWhileRun(isEditWhileRun){return{type:SET_IS_EDIT_WHILE_RUN,isEditWhileRun}},exports.setIsDebuggerPaused=function setIsDebuggerPaused(isDebuggerPaused,nextStep){return{type:SET_IS_DEBUGGER_PAUSED,isDebuggerPaused,nextStep}},exports.setStepSpeed=function setStepSpeed(stepSpeed){return{type:SET_STEP_SPEED,stepSpeed}},exports.setAwaitingContainedResponse=function setAwaitingContainedResponse(awaitingContainedResponse){return{type:SET_AWAITING_CONTAINED_RESPONSE,awaitingContainedResponse}},exports.setIsDebuggingSprites=function setIsDebuggingSprites(isDebuggingSprites){return{type:SET_IS_DEBUGGING_SPRITES,isDebuggingSprites}}},"./src/redux/studioAppActivity.js":(__unused_webpack_module,exports)=>{"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=function reducer(){var state=arguments.length>0&&void 0!==arguments[0]?arguments[0]:studioAppActivityInitialState,action=arguments.length>1?arguments[1]:void 0;if(action.type===SET_START_IDLE)return Object.assign({},state,{isIdle:!0,idleStart:(new Date).getTime()});if(action.type===SET_END_IDLE){if(state.idleStart){var newIdleTime=state.idleTimeSinceLastReport+timeSinceIdleStart(state);return Object.assign({},state,{isIdle:!1,idleTimeSinceLastReport:newIdleTime})}return state}if(action.type===RESET_IDLE_TIME){var idleStart=state.isIdle?(new Date).getTime():null;return Object.assign({},state,{idleTimeSinceLastReport:0,idleStart})}return state},exports.setStartIdle=exports.setEndIdle=exports.resetIdleTime=exports.getIdleTimeSinceLastReport=void 0;var SET_START_IDLE="studioAppActivity/SET_START_IDLE",SET_END_IDLE="studioAppActivity/SET_END_IDLE",RESET_IDLE_TIME="studioAppActivity/RESET_IDLE_TIME",studioAppActivityInitialState={idleTimeSinceLastReport:0,idleStart:null,isIdle:!1};var timeSinceIdleStart=function timeSinceIdleStart(state){return(new Date).getTime()-state.idleStart};exports.setStartIdle=function setStartIdle(){return{type:SET_START_IDLE}},exports.setEndIdle=function setEndIdle(){return{type:SET_END_IDLE}},exports.resetIdleTime=function resetIdleTime(){return{type:RESET_IDLE_TIME}},exports.getIdleTimeSinceLastReport=function getIdleTimeSinceLastReport(state){return state.isIdle?state.idleTimeSinceLastReport+timeSinceIdleStart(state):state.idleTimeSinceLastReport}},"./src/redux/watchedExpressions.js":(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.add=void 0,exports.default=function reducer(){var state=arguments.length>0&&void 0!==arguments[0]?arguments[0]:watchedExpressionsInitialState,action=arguments.length>1?arguments[1]:void 0;if(action.type===ADD_EXPRESSION){var expression=action.expression,uuid=(0,_utils.createUuid)();return state.push(_immutable.default.Map({expression,uuid}))}if(action.type===UPDATE_VALUE){var value=action.value,_expression=action.expression;return state.map((function(e){return e.get("expression")===_expression?_immutable.default.Map({lastValue:value,expression:_expression,uuid:e.get("uuid")}):e}))}if(action.type===REMOVE_EXPRESSION)return state.filter((function(e){return e.get("expression")!==action.expression}));return state},exports.update=exports.remove=void 0;var _immutable=function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}(__webpack_require__("./node_modules/immutable/dist/immutable.js")),_utils=__webpack_require__("./src/utils.js");var ADD_EXPRESSION="watchedExpressions/ADD_EXPRESSION",REMOVE_EXPRESSION="watchedExpressions/REMOVE_EXPRESSION",UPDATE_VALUE="watchedExpressions/UPDATE_VALUE",watchedExpressionsInitialState=_immutable.default.List();exports.add=function add(expression){return{type:ADD_EXPRESSION,expression}},exports.remove=function remove(expression){return{type:REMOVE_EXPRESSION,expression}},exports.update=function update(expression,value){return{type:UPDATE_VALUE,expression,value}}},"./src/styleConstants.js":module=>{module.exports={"workspace-headers-height":30,"resize-bar-width":13,"delete-opacity":"0.5","content-width":970}},"./src/templates/EnhancedSafeMarkdown.jsx":(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.UnconnectedExpandableImagesWrapper=exports.ExpandableImagesWrapper=exports.ClickableTextWrapper=void 0;var _propTypes=_interopRequireDefault(__webpack_require__("./node_modules/prop-types/index.js")),_react=_interopRequireDefault(__webpack_require__("./node_modules/react/index.js")),_reactDom=_interopRequireDefault(__webpack_require__("./node_modules/react-dom/index.js")),_reactRedux=__webpack_require__("./node_modules/react-redux/es/index.js"),_instructionsDialog=__webpack_require__("./src/redux/instructionsDialog.js"),_SafeMarkdown=_interopRequireDefault(__webpack_require__("./src/templates/SafeMarkdown.jsx")),_expandableImages=__webpack_require__("./src/templates/utils/expandableImages.js");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function _typeof(o){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}function _inheritsLoose(t,o){t.prototype=Object.create(o.prototype),t.prototype.constructor=t,_setPrototypeOf(t,o)}function _setPrototypeOf(t,e){return _setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},_setPrototypeOf(t,e)}function _defineProperty(e,r,t){return(r=function _toPropertyKey(t){var i=function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}(t,"string");return"symbol"==_typeof(i)?i:i+""}(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}var UnconnectedExpandableImagesWrapper=exports.UnconnectedExpandableImagesWrapper=function(_React$Component){function UnconnectedExpandableImagesWrapper(){return _React$Component.apply(this,arguments)||this}_inheritsLoose(UnconnectedExpandableImagesWrapper,_React$Component);var _proto=UnconnectedExpandableImagesWrapper.prototype;return _proto.componentDidMount=function componentDidMount(){this.postRenderHook()},_proto.componentDidUpdate=function componentDidUpdate(prevProps){this.postRenderHook()},_proto.postRenderHook=function postRenderHook(){var thisNode=_reactDom.default.findDOMNode(this);(0,_expandableImages.renderExpandableImages)(thisNode,this.props.showImageDialog)},_proto.render=function render(){return this.props.children},UnconnectedExpandableImagesWrapper}(_react.default.Component);_defineProperty(UnconnectedExpandableImagesWrapper,"propTypes",{showImageDialog:_propTypes.default.func.isRequired,children:_propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.node),_propTypes.default.node]).isRequired});var ExpandableImagesWrapper=exports.ExpandableImagesWrapper=(0,_reactRedux.connect)(null,(function(dispatch){return{showImageDialog:function showImageDialog(imgUrl){dispatch((0,_instructionsDialog.openDialog)({imgOnly:!0,imgUrl}))}}}))(UnconnectedExpandableImagesWrapper),ClickableTextWrapper=exports.ClickableTextWrapper=function(_React$Component2){function ClickableTextWrapper(){return _React$Component2.apply(this,arguments)||this}_inheritsLoose(ClickableTextWrapper,_React$Component2);var _proto2=ClickableTextWrapper.prototype;return _proto2.componentDidMount=function componentDidMount(){this.postRenderHook()},_proto2.componentDidUpdate=function componentDidUpdate(prevProps){this.postRenderHook()},_proto2.postRenderHook=function postRenderHook(){var thisNode=_reactDom.default.findDOMNode(this);this.renderClickableText(thisNode)},_proto2.renderClickableText=function renderClickableText(node){var _this=this;node.querySelectorAll("b.clickable-text").forEach((function(clickableText,index){var id=clickableText.dataset.id,extraClass=" clickable-text-with-glow clickable-text-".concat(index);clickableText.className.includes(extraClass)||(clickableText.className+=extraClass),clickableText.setAttribute("role","button"),clickableText.setAttribute("tabIndex","0"),clickableText.onclick=function(){return _this.props.handleInstructionsTextClick(id)},clickableText.onkeydown=function(event){"Enter"===event.key&&clickableText.click()}}))},_proto2.render=function render(){return this.props.children},ClickableTextWrapper}(_react.default.Component);_defineProperty(ClickableTextWrapper,"propTypes",{handleInstructionsTextClick:_propTypes.default.func.isRequired,children:_propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.node),_propTypes.default.node]).isRequired}),_defineProperty(exports.default=function(_React$Component3){function EnhancedSafeMarkdown(){return _React$Component3.apply(this,arguments)||this}return _inheritsLoose(EnhancedSafeMarkdown,_React$Component3),EnhancedSafeMarkdown.prototype.render=function render(){var result=_react.default.createElement(_SafeMarkdown.default,{markdown:this.props.markdown,openExternalLinksInNewTab:this.props.openExternalLinksInNewTab,className:this.props.className});return this.props.expandableImages&&(result=_react.default.createElement(ExpandableImagesWrapper,null,result)),this.props.handleInstructionsTextClick&&(result=_react.default.createElement(ClickableTextWrapper,{handleInstructionsTextClick:this.props.handleInstructionsTextClick},result)),result},EnhancedSafeMarkdown}(_react.default.Component),"propTypes",{markdown:_propTypes.default.string.isRequired,openExternalLinksInNewTab:_propTypes.default.bool,expandableImages:_propTypes.default.bool,className:_propTypes.default.string,handleInstructionsTextClick:_propTypes.default.func})},"./src/templates/Lightbulb.jsx":(module,exports,__webpack_require__)=>{"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var _propTypes=_interopRequireDefault(__webpack_require__("./node_modules/prop-types/index.js")),_react=_interopRequireDefault(__webpack_require__("./node_modules/react/index.js")),_color=_interopRequireDefault(__webpack_require__("./src/util/color.js"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function _typeof(o){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}function _setPrototypeOf(t,e){return _setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},_setPrototypeOf(t,e)}function _defineProperty(e,r,t){return(r=function _toPropertyKey(t){var i=function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}(t,"string");return"symbol"==_typeof(i)?i:i+""}(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}var Lightbulb=exports.default=function(_React$Component){function Lightbulb(){return _React$Component.apply(this,arguments)||this}return function _inheritsLoose(t,o){t.prototype=Object.create(o.prototype),t.prototype.constructor=t,_setPrototypeOf(t,o)}(Lightbulb,_React$Component),Lightbulb.prototype.render=function render(){var bulbDisplay,numberCircle,countDisplay;if(this.props.isMinecraft){var href=this.props.lit?"iVBORw0KGgoAAAANSUhEUgAAAAsAAAAOCAYAAAD5YeaVAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAACzSURBVHjalJExDsIwDEW/GzbYG4m5A505BzuH6cQpEGdg6TlYWLp0rpSOiHZrZIaGCsfNwJcsR8mT/fVDkGJokToAYNdVyO1ZkqZcuEyA+RHgFsgOc3EL9s2ykQT4K3Oau68BKkCmxAYp+VpdZfhDCh7GSfS1WITvYZyw2waHwS8A+k4mu7+g7x/RqEJEF4tdV/H7dWf2DcefpNK43gjAM5SUgq21yTQU7JxLwmvGOfX+GQDlKDxFgn7+bgAAAABJRU5ErkJggg==":"iVBORw0KGgoAAAANSUhEUgAAAAsAAAAOCAYAAAD5YeaVAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4AsRFQUQP8g1cwAAAKpJREFUKM+VkbENxCAMRR+nK1JHAmWCZIVMkWHZAyktmSCioKbzVRfBGYr7jRF+sj8fQytBy6gDIN579n1vSOfcw71qcF1Xcs5Ya7HWknMmpfRsNDVYa9s2AGKMzPOMc443A8UY1d2LP6TgUkpTe7E0vkspTNME8PgFzHeyOY6D67qaSTXYsyXeeznPU1JK8vtJKo0QAiGE7gMVvCzLMA0F3/c9hHvGZdT/APfyQc3umPvfAAAAAElFTkSuQmCC";bulbDisplay=_react.default.createElement("g",{className:this.props.shouldAnimate?"animate-hint":""},_react.default.createElement("image",{width:"450",height:"450",x:"80",y:"140",className:"pixelated",xlinkHref:"data:image/png;base64,"+href}))}else bulbDisplay=_react.default.createElement("g",{className:this.props.shouldAnimate?"animate-hint":""},_react.default.createElement("g",{transform:this.props.isRtl?"translate(0,200) scale(10.0,10.0)":"translate(245,200) scale(10.0,10.0)"},_react.default.createElement("path",{d:"M22 33H8.25C7.39062 30.3359 5.67188 27.9297 3.95312 25.6094C3.52344 25.0078 3.09375 24.4062 2.66406 23.8047C0.945312 21.3125 0 18.3906 0 15.125C0 6.78906 6.70312 0 15.125 0C23.4609 0 30.25 6.78906 30.25 15.2109C30.25 18.3906 29.2188 21.3125 27.5 23.8047C27.0703 24.4062 26.6406 25.0078 26.2109 25.6094C24.4922 27.9297 22.7734 30.3359 22 33ZM15.125 44C11.2578 44 8.25 40.9922 8.25 37.125V35.75H22V37.125C22 40.9922 18.9062 44 15.125 44ZM8.25 15.125C8.25 11.3438 11.2578 8.25 15.125 8.25C15.8125 8.25 16.5 7.64844 16.5 6.875C16.5 6.1875 15.8125 5.5 15.125 5.5C9.79688 5.5 5.5 9.88281 5.5 15.125C5.5 15.8984 6.10156 16.5 6.875 16.5C7.5625 16.5 8.25 15.8984 8.25 15.125Z",fill:"#1892E3"}),_react.default.createElement("path",{d:"M8.25 15.125C8.25 11.3438 11.2578 8.25 15.125 8.25C15.8125 8.25 16.5 7.64844 16.5 6.875C16.5 6.1875 15.8125 5.5 15.125 5.5C9.79688 5.5 5.5 9.88281 5.5 15.125C5.5 15.8984 6.10156 16.5 6.875 16.5C7.5625 16.5 8.25 15.8984 8.25 15.125Z",fill:"#1892E3"}),_react.default.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M13.75 6.875C14.4375 6.875 15.125 7.5625 15.125 8.33594C15.125 9.02344 14.4375 9.625 13.75 9.625C11.4297 9.625 9.625 11.5156 9.625 13.75C9.625 14.5234 8.9375 15.125 8.25 15.125C7.47656 15.125 6.875 14.5234 6.875 13.75C6.875 9.96875 9.88281 6.875 13.75 6.875Z",fill:"white"})));if(this.props.lit&&this.props.count){var countText=this.props.count>9?"9+":this.props.count;this.props.isMinecraft?countDisplay=_react.default.createElement("g",null,_react.default.createElement("text",{id:"hintCount",x:"400",y:"700",style:styles.countMinecraft},countText)):(countDisplay=_react.default.createElement("g",null,_react.default.createElement("text",{id:"hintCount",x:this.props.isRtl?"380":"495",y:"380",style:styles.count},countText)),numberCircle=_react.default.createElement("g",{className:this.props.shouldAnimate?"animate-hint":""},_react.default.createElement("circle",{cx:this.props.isRtl?"315":"565",cy:"310",r:"125",fill:_color.default.white,stroke:_color.default.blockly_flyout_gray,strokeWidth:"16"})))}return _react.default.createElement("svg",{width:this.props.size,height:this.props.size,style:this.props.style,viewBox:"0 0 612 792"},bulbDisplay,numberCircle,countDisplay)},Lightbulb}(_react.default.Component);_defineProperty(Lightbulb,"propTypes",{shouldAnimate:_propTypes.default.bool,count:_propTypes.default.number,lit:_propTypes.default.bool,size:_propTypes.default.number,style:_propTypes.default.object,isMinecraft:_propTypes.default.bool,isRtl:_propTypes.default.bool}),_defineProperty(Lightbulb,"defaultProps",{shouldAnimate:!1,count:0,lit:!0,size:40,style:{}});var styles={count:{fontWeight:"bold",fontSize:"200px",fill:_color.default.light_info_500,fontFamily:"Verdana, Geneva, sans-serif"},countMinecraft:{fontWeight:"bold",fontSize:"400px",fill:_color.default.white,stroke:_color.default.black,strokeWidth:"30px",fontFamily:"Verdana, Geneva, sans-serif"}};module.exports=exports.default},"./src/templates/instructions/AniGifPreview.jsx":(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.ImagePreview=void 0;var _propTypes=_interopRequireDefault(__webpack_require__("./node_modules/prop-types/index.js")),_radium=_interopRequireDefault(__webpack_require__("./node_modules/radium/es/index.js")),_react=_interopRequireDefault(__webpack_require__("./node_modules/react/index.js")),_reactRedux=__webpack_require__("./node_modules/react-redux/es/index.js"),_instructionsDialog=__webpack_require__("./src/redux/instructionsDialog.js");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function _typeof(o){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}function _setPrototypeOf(t,e){return _setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},_setPrototypeOf(t,e)}var ImagePreviewUnwrapped=function(_React$Component){function ImagePreviewUnwrapped(){return _React$Component.apply(this,arguments)||this}return function _inheritsLoose(t,o){t.prototype=Object.create(o.prototype),t.prototype.constructor=t,_setPrototypeOf(t,o)}(ImagePreviewUnwrapped,_React$Component),ImagePreviewUnwrapped.prototype.render=function render(){return _react.default.createElement("div",{id:"ani-gif-preview-wrapper",style:styles.wrapper},_react.default.createElement("div",{id:"ani-gif-preview",style:[styles.aniGifPreview(this.props.url),this.props.noVisualization&&styles.bigPreview],onClick:this.props.showInstructionsDialog}))},ImagePreviewUnwrapped}(_react.default.Component);!function _defineProperty(e,r,t){return(r=function _toPropertyKey(t){var i=function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}(t,"string");return"symbol"==_typeof(i)?i:i+""}(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}(ImagePreviewUnwrapped,"propTypes",{url:_propTypes.default.string.isRequired,showInstructionsDialog:_propTypes.default.func.isRequired,noVisualization:_propTypes.default.bool.isRequired});var styles={wrapper:{display:"inline-block",position:"relative"},aniGifPreview:function aniGifPreview(url){return{cursor:"pointer",backgroundImage:"url('".concat(url,"')")}},bigPreview:{width:240,height:180,backgroundSize:"240px 180px"}},ImagePreview=exports.ImagePreview=(0,_radium.default)(ImagePreviewUnwrapped);exports.default=(0,_reactRedux.connect)((function(state){return{url:state.pageConstants.aniGifURL,noVisualization:state.pageConstants.noVisualization}}),(function(dispatch){return{showInstructionsDialog:function showInstructionsDialog(){dispatch((0,_instructionsDialog.openDialog)({imgOnly:!0}))}}}))(ImagePreview)},"./src/templates/instructions/ExampleImage.jsx":(module,exports,__webpack_require__)=>{"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=ExampleImage;var _propTypes=_interopRequireDefault(__webpack_require__("./node_modules/prop-types/index.js")),_react=_interopRequireDefault(__webpack_require__("./node_modules/react/index.js")),_color=_interopRequireDefault(__webpack_require__("./src/util/color.js"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function ExampleImage(_ref){var src=_ref.src;return _react.default.createElement("img",{style:styles.img,src,alt:""})}ExampleImage.propTypes={src:_propTypes.default.string.isRequired};var styles={img:{boxShadow:"0 10px 13px -11px ".concat(_color.default.black),border:"2px solid ".concat(_color.default.light_gray),borderRadius:25,boxSizing:"border-box"}};module.exports=exports.default},"./src/templates/instructions/ImmersiveReaderButton.jsx":(module,exports,__webpack_require__)=>{"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var _immersiveReaderSdk=__webpack_require__("./node_modules/@microsoft/immersive-reader-sdk/lib/immersive-reader-sdk.js"),_classnames=_interopRequireDefault(__webpack_require__("./node_modules/classnames/index.js")),_jsCookie=_interopRequireDefault(__webpack_require__("./node_modules/js-cookie/src/js.cookie.js")),_propTypes=_interopRequireDefault(__webpack_require__("./node_modules/prop-types/index.js")),_react=function _interopRequireWildcard(e,r){if(!r&&e&&e.__esModule)return e;if(null===e||"object"!=_typeof(e)&&"function"!=typeof e)return{default:e};var t=_getRequireWildcardCache(r);if(t&&t.has(e))return t.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var u in e)if("default"!==u&&{}.hasOwnProperty.call(e,u)){var i=a?Object.getOwnPropertyDescriptor(e,u):null;i&&(i.get||i.set)?Object.defineProperty(n,u,i):n[u]=e[u]}return n.default=e,t&&t.set(e,n),n}(__webpack_require__("./node_modules/react/index.js")),_immersive_reader=_interopRequireDefault(__webpack_require__("./src/util/immersive_reader.js"));function _getRequireWildcardCache(e){if("function"!=typeof WeakMap)return null;var r=new WeakMap,t=new WeakMap;return(_getRequireWildcardCache=function _getRequireWildcardCache(e){return e?t:r})(e)}function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function _typeof(o){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}function _setPrototypeOf(t,e){return _setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},_setPrototypeOf(t,e)}var ImmersiveReaderButton=function(_Component){function ImmersiveReaderButton(){return _Component.apply(this,arguments)||this}!function _inheritsLoose(t,o){t.prototype=Object.create(o.prototype),t.prototype.constructor=t,_setPrototypeOf(t,o)}(ImmersiveReaderButton,_Component);var _proto=ImmersiveReaderButton.prototype;return _proto.componentDidMount=function componentDidMount(){this.shouldRender()&&!this.renderButtonsCalled&&((0,_immersiveReaderSdk.renderButtons)({elements:[this.container]}),this.renderButtonsCalled=!0)},_proto.handleKeyDown=function handleKeyDown(event,locale,title,text){"Enter"!==event.key&&" "!==event.key||((0,_immersive_reader.default)(locale,title,text),event.preventDefault())},_proto.render=function render(){var _this=this,_this$props=this.props,title=_this$props.title,text=_this$props.text,hasRoundBorders=_this$props.hasRoundBorders,isLegacyStyles=_this$props.isLegacyStyles,locale=_jsCookie.default.get("language_")||"en-US";return this.shouldRender()?_react.default.createElement("div",{tabIndex:0,role:"button",ref:function ref(el){return _this.container=el},className:(0,_classnames.default)("immersive-reader-button",isLegacyStyles&&"immersive-reader-button-legacy-styles"),"data-button-style":"icon",style:{borderRadius:hasRoundBorders?4:"4px 0 0 4px"},"data-locale":locale,onClick:function onClick(){(0,_immersive_reader.default)(locale,title,text)},onKeyDown:function onKeyDown(e){return _this.handleKeyDown(e,locale,title,text)}}):null},_proto.shouldRender=function shouldRender(){return!!this.props.text},ImmersiveReaderButton}(_react.Component);!function _defineProperty(e,r,t){return(r=function _toPropertyKey(t){var i=function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}(t,"string");return"symbol"==_typeof(i)?i:i+""}(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}(ImmersiveReaderButton,"propTypes",{title:_propTypes.default.string,text:_propTypes.default.string,hasRoundBorders:_propTypes.default.bool,isLegacyStyles:_propTypes.default.bool});exports.default=ImmersiveReaderButton;module.exports=exports.default},"./src/templates/instructions/InputOutputTable.jsx":(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";var _propTypes=_interopRequireDefault(__webpack_require__("./node_modules/prop-types/index.js")),_react=_interopRequireDefault(__webpack_require__("./node_modules/react/index.js"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}var InputOutputTable=function InputOutputTable(props){return _react.default.createElement("div",null,_react.default.createElement("table",null,_react.default.createElement("tbody",null,_react.default.createElement("tr",null,_react.default.createElement("th",null,"Input"),_react.default.createElement("th",null,"Output")),props.data.map((function(item,index){return _react.default.createElement("tr",{key:index},_react.default.createElement("td",null,item[0]),_react.default.createElement("td",null,item[1]))})))))};InputOutputTable.propTypes={data:_propTypes.default.arrayOf(_propTypes.default.arrayOf(_propTypes.default.number)).isRequired},module.exports=InputOutputTable},"./src/templates/instructions/Instructions.jsx":(module,exports,__webpack_require__)=>{"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var _propTypes=_interopRequireDefault(__webpack_require__("./node_modules/prop-types/index.js")),_react=_interopRequireDefault(__webpack_require__("./node_modules/react/index.js")),_locale=_interopRequireDefault(__webpack_require__("./src/util/locale-do-not-import.js")),_AniGifPreview=_interopRequireDefault(__webpack_require__("./src/templates/instructions/AniGifPreview.jsx")),_ExampleImage=_interopRequireDefault(__webpack_require__("./src/templates/instructions/ExampleImage.jsx")),_ImmersiveReaderButton=_interopRequireDefault(__webpack_require__("./src/templates/instructions/ImmersiveReaderButton.jsx")),_InputOutputTable=_interopRequireDefault(__webpack_require__("./src/templates/instructions/InputOutputTable.jsx")),_MarkdownInstructions=_interopRequireDefault(__webpack_require__("./src/templates/instructions/MarkdownInstructions.jsx"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function _typeof(o){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}function _setPrototypeOf(t,e){return _setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},_setPrototypeOf(t,e)}!function _defineProperty(e,r,t){return(r=function _toPropertyKey(t){var i=function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}(t,"string");return"symbol"==_typeof(i)?i:i+""}(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}(exports.default=function(_React$Component){function Instructions(){return _React$Component.apply(this,arguments)||this}return function _inheritsLoose(t,o){t.prototype=Object.create(o.prototype),t.prototype.constructor=t,_setPrototypeOf(t,o)}(Instructions,_React$Component),Instructions.prototype.render=function render(){var _this$props=this.props,inTopPane=_this$props.inTopPane,instructions=_this$props.instructions,onResize=_this$props.onResize,isBlockly=_this$props.isBlockly,isImmersiveButtonHasRoundBorders=_this$props.isImmersiveButtonHasRoundBorders,isLegacyImmersiveStyles=_this$props.isLegacyImmersiveStyles,noInstructionsWhenCollapsed=_this$props.noInstructionsWhenCollapsed,inputOutputTable=_this$props.inputOutputTable,imgURL=_this$props.imgURL,authoredHints=_this$props.authoredHints;return _react.default.createElement("div",{style:inTopPane?styles.inTopPane:styles.notInTopPane},instructions&&_react.default.createElement(_react.default.Fragment,null,_react.default.createElement(_ImmersiveReaderButton.default,{title:_locale.default.instructions(),text:instructions,hasRoundBorders:isImmersiveButtonHasRoundBorders,isLegacyStyles:isLegacyImmersiveStyles}),_react.default.createElement(_MarkdownInstructions.default,{markdown:instructions,onResize,inTopPane,isBlockly,noInstructionsWhenCollapsed})),inputOutputTable&&_react.default.createElement(_InputOutputTable.default,{data:inputOutputTable}),imgURL&&!inTopPane&&_react.default.createElement(_ExampleImage.default,{src:imgURL}),imgURL&&inTopPane&&_react.default.createElement(_AniGifPreview.default,null),authoredHints)},Instructions}(_react.default.Component),"propTypes",{instructions:_propTypes.default.string,imgURL:_propTypes.default.string,authoredHints:_propTypes.default.element,inputOutputTable:_propTypes.default.arrayOf(_propTypes.default.arrayOf(_propTypes.default.number)),inTopPane:_propTypes.default.bool,onResize:_propTypes.default.func,isBlockly:_propTypes.default.bool,isImmersiveButtonHasRoundBorders:_propTypes.default.bool,isLegacyImmersiveStyles:_propTypes.default.bool,noInstructionsWhenCollapsed:_propTypes.default.bool});var styles={inTopPane:{overflow:"hidden"},notInTopPane:{overflow:"auto"}};module.exports=exports.default},"./src/templates/instructions/MarkdownInstructions.jsx":(module,exports,__webpack_require__)=>{"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var _jquery=_interopRequireDefault(__webpack_require__("./node_modules/jquery/dist/jquery.js")),_propTypes=_interopRequireDefault(__webpack_require__("./node_modules/prop-types/index.js")),_radium=_interopRequireDefault(__webpack_require__("./node_modules/radium/es/index.js")),_react=_interopRequireDefault(__webpack_require__("./node_modules/react/index.js")),_reactDom=_interopRequireDefault(__webpack_require__("./node_modules/react-dom/index.js")),_EnhancedSafeMarkdown=_interopRequireDefault(__webpack_require__("./src/templates/EnhancedSafeMarkdown.jsx")),_utils=__webpack_require__("./src/templates/instructions/utils.js");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function _typeof(o){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}function _setPrototypeOf(t,e){return _setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},_setPrototypeOf(t,e)}function _defineProperty(e,r,t){return(r=function _toPropertyKey(t){var i=function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}(t,"string");return"symbol"==_typeof(i)?i:i+""}(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}var MarkdownInstructions=function(_React$Component){function MarkdownInstructions(){return _React$Component.apply(this,arguments)||this}!function _inheritsLoose(t,o){t.prototype=Object.create(o.prototype),t.prototype.constructor=t,_setPrototypeOf(t,o)}(MarkdownInstructions,_React$Component);var _proto=MarkdownInstructions.prototype;return _proto.componentDidMount=function componentDidMount(){this.configureMarkdown_()},_proto.componentDidUpdate=function componentDidUpdate(prevProps){prevProps.markdown!==this.props.markdown&&this.configureMarkdown_()},_proto.componentWillUnmount=function componentWillUnmount(){var detailsDOM=(0,_jquery.default)(_reactDom.default.findDOMNode(this)).find("details");detailsDOM.details&&detailsDOM.off("toggle.details.TopInstructions")},_proto.configureMarkdown_=function configureMarkdown_(){var _this=this;if(this.props.onResize){var thisNode=_reactDom.default.findDOMNode(this),detailsDOM=(0,_jquery.default)(thisNode).find("details");detailsDOM.details&&(detailsDOM.details(),detailsDOM.on({"toggle.details.TopInstructions":function toggleDetailsTopInstructions(){_this.props.onResize()}})),this.props.isBlockly&&Blockly.BlockSpace.onMainBlockSpaceCreated((function(){(0,_utils.convertXmlToBlockly)(_reactDom.default.findDOMNode(_this)),_this.props.onResize()})),(0,_jquery.default)(thisNode).find("img").load(this.props.onResize)}},_proto.render=function render(){var _this$props=this.props,inTopPane=_this$props.inTopPane,markdown=_this$props.markdown,canCollapse=!this.props.noInstructionsWhenCollapsed;return _react.default.createElement("div",{className:"instructions-markdown",style:[styles.standard,inTopPane&&styles.inTopPane,inTopPane&&canCollapse&&styles.inTopPaneCanCollapse]},_react.default.createElement(_EnhancedSafeMarkdown.default,{markdown,expandableImages:!0}))},MarkdownInstructions}(_react.default.Component);_defineProperty(MarkdownInstructions,"propTypes",{markdown:_propTypes.default.string.isRequired,noInstructionsWhenCollapsed:_propTypes.default.bool,onResize:_propTypes.default.func,inTopPane:_propTypes.default.bool,isBlockly:_propTypes.default.bool,showImageDialog:_propTypes.default.func}),_defineProperty(MarkdownInstructions,"defaultProps",{noInstructionsWhenCollapsed:!1});var styles={standard:{marginBottom:35,paddingTop:19},inTopPane:{marginTop:10,marginBottom:10,paddingTop:0},inTopPaneCanCollapse:{marginTop:0,marginBottom:0}};exports.default=(0,_radium.default)(MarkdownInstructions);module.exports=exports.default},"./src/templates/instructions/utils.js":(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.convertXmlToBlockly=function convertXmlToBlockly(xmlContainer,isRtl){Array.from(xmlContainer.getElementsByClassName("readonly-block-space-container")).forEach((function(container){return container.remove()}));var xmls=xmlContainer.getElementsByTagName("xml");Array.prototype.forEach.call(xmls,(function(xml){if(!xml.getElementsByTagName("svg").length){!function removeCommentNodes(root){var commentWalker=document.createTreeWalker(root,NodeFilter.SHOW_COMMENT,{acceptNode:function acceptNode(node){return NodeFilter.FILTER_ACCEPT}},!1),last=commentWalker.nextNode();if(last){for(;commentWalker.nextNode();)last.remove(),last=commentWalker.currentNode;last.remove()}}(xml);var inline="P"===xml.parentNode.tagName,blockSpaceContainer=document.createElement(inline?"span":"div");blockSpaceContainer.classList.add("readonly-block-space-container"),inline&&(blockSpaceContainer.style.display="inline-block"),xml.parentNode.insertBefore(blockSpaceContainer,xml),xml.style.display="none";var blockSpace=Blockly.createEmbeddedWorkspace(blockSpaceContainer,xml,{noScrolling:!0,inline,rtl:isRtl}),withPadding=!inline,metrics=blockSpace.getMetrics();Blockly.addChangeListener(blockSpace,(function(){var oldHeight=metrics.contentHeight,oldWidth=metrics.contentWidth,newHeight=blockSpace.getMetrics().contentHeight,newWidth=blockSpace.getMetrics().contentWidth;newHeight===oldHeight&&newWidth===oldWidth||(shrinkBlockSpaceContainer(blockSpace,withPadding),metrics=blockSpace.getMetrics())})),shrinkBlockSpaceContainer(blockSpace,withPadding)}}))},exports.getOuterHeight=function getOuterHeight(component){var includeMargin=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return(0,_jquery.default)(_reactDom.default.findDOMNode(component)).outerHeight(includeMargin)},exports.hasInstructions=function hasInstructions(shortInstructions,longInstructions,hasContainedLevels){return!!(shortInstructions||longInstructions||hasContainedLevels)},exports.scrollBy=function scrollBy(element,deltaY){var animate=arguments.length>2&&void 0!==arguments[2]?arguments[2]:400,newScrollTop=element.scrollTop+deltaY;scrollTo(element,newScrollTop,animate)},exports.scrollTo=scrollTo,exports.shouldDisplayChatTips=function shouldDisplayChatTips(skinId){switch(skinId){case"jigsaw":case"infinity":case"anna":case"elsa":case"craft":case"hoc2015":case"hoc2015x":return!1;default:return!0}},exports.shrinkBlockSpaceContainer=shrinkBlockSpaceContainer;var _jquery=_interopRequireDefault(__webpack_require__("./node_modules/jquery/dist/jquery.js")),_reactDom=_interopRequireDefault(__webpack_require__("./node_modules/react-dom/index.js"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function scrollTo(element,scrollTop){var animate=arguments.length>2&&void 0!==arguments[2]?arguments[2]:400;if(animate){var $elem=(0,_jquery.default)(element);$elem.is(":animated")||$elem.animate({scrollTop},animate)}else element.scrollTop=scrollTop}function shrinkBlockSpaceContainer(blockSpace,withPadding){var container=blockSpace.getContainer(),metrics=blockSpace.getMetrics(),height=metrics.contentHeight,width=metrics.contentWidth;withPadding&&(height+=2*metrics.contentTop,width+=metrics.contentLeft),container.style.height=height+"px",container.style.width=width+"px",Blockly.cdoUtils.workspaceSvgResize(blockSpace)}},"./src/templates/utils/expandableImages.js":(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.renderExpandableImages=function renderExpandableImages(node,showImageDialog){for(var expandableImages=node.querySelectorAll(".expandable-image"),_loop=function _loop(){var expandableImg=expandableImages[i];_reactDom.default.render(_react.default.createElement(_AniGifPreview.ImagePreview,{url:expandableImg.dataset.url,noVisualization:!1,showInstructionsDialog:function showInstructionsDialog(){return showImageDialog(expandableImg.dataset.url)}}),expandableImg)},i=0;i<expandableImages.length;i++)_loop()};var _react=_interopRequireDefault(__webpack_require__("./node_modules/react/index.js")),_reactDom=_interopRequireDefault(__webpack_require__("./node_modules/react-dom/index.js")),_AniGifPreview=__webpack_require__("./src/templates/instructions/AniGifPreview.jsx");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}},"./src/util/immersive_reader.js":(module,exports,__webpack_require__)=>{"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=function handleLaunchImmersiveReader(locale,title,text){(function getTokenAndSubdomainAsync(){return new Promise((function(resolve,reject){$.ajax({url:"/api/immersive_reader_token",type:"GET",success:function success(data){data.error?reject(data.error):resolve(data)}})}))})().then((function(response){var token=response.token,subdomain=response.subdomain,data={title,chunks:[{content:sanitizeText(text),lang:locale}]};(0,_immersiveReaderSdk.launchAsync)(token,subdomain,data,{uiZIndex:2113})})).catch((function(error){console.error(error)}))};var _immersiveReaderSdk=__webpack_require__("./node_modules/@microsoft/immersive-reader-sdk/lib/immersive-reader-sdk.js");function sanitizeText(text){return text?text=(text=text.replace(/<[^>]*>/g,"")).replace(/[`*]/g,""):text}module.exports=exports.default},"./src/redux/blockly.ts":(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";var _a;Object.defineProperty(exports,"__esModule",{value:!0}),exports.setFailedToGenerateCode=exports.setHasIncompatibleSources=void 0;var blocklySlice=(0,__webpack_require__("./node_modules/@reduxjs/toolkit/dist/redux-toolkit.esm.js").createSlice)({name:"blockly",initialState:{hasIncompatibleSources:!1,failedToGenerateCode:!1},reducers:{setHasIncompatibleSources:function(state,action){state.hasIncompatibleSources=action.payload},setFailedToGenerateCode:function(state,action){state.failedToGenerateCode=action.payload}}});exports.setHasIncompatibleSources=(_a=blocklySlice.actions).setHasIncompatibleSources,exports.setFailedToGenerateCode=_a.setFailedToGenerateCode,exports.default=blocklySlice.reducer},"./src/redux/layout.ts":(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.getVisualizationScale=exports.setVisualizationScale=void 0;var toolkit_1=__webpack_require__("./node_modules/@reduxjs/toolkit/dist/redux-toolkit.esm.js"),layoutSlice=(0,toolkit_1.createSlice)({name:"layout",initialState:{visualizationScale:null},reducers:{setVisualizationScale:function(state,action){state.visualizationScale=action.payload}}});exports.setVisualizationScale=layoutSlice.actions.setVisualizationScale;exports.getVisualizationScale=(0,toolkit_1.createSelector)((function(state){return state.layout}),(function(state){return null==state?void 0:state.visualizationScale})),exports.default=layoutSlice.reducer}}]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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SUFOcEJnTyxJQVFYLENBQUMzakIsT0FBQUMsUUFBQUEsUUFBQWdoQixPLHVPQzVERCxJQWVNMkssY0FBZSxFQWZyQixpRkFlcUJDLGFBQVksQ0FDL0IvaUIsS0FBTSxVQUNOc0YsYUFWaUMsQ0FHakMwZCx3QkFBd0IsRUFFeEJDLHNCQUFzQixHQU10QkMsU0FBVSxDQUNSQywwQkFBeUIsU0FBQzFvQixNQUFPRyxRQUMvQkgsTUFBTXVvQix1QkFBeUJwb0IsT0FBT3dvQixPQUN4QyxFQUNBQyx3QkFBdUIsU0FBQzVvQixNQUFPRyxRQUM3QkgsTUFBTXdvQixxQkFBdUJyb0IsT0FBT3dvQixPQUN0QyxLQUlVLFFBQUFELDJCQUFELEdBQ1hMLGFBQWFRLFNBQU8sMEJBRG1CLFFBQUFELHdCQUF1QiwyQkFHaEUsZ0JBQWVQLGFBQWFuaEIsTyx5TkM5QjVCLCtGQVVNNGhCLGFBQWMsWUFBQVIsYUFBWSxDQUM5Qi9pQixLQUFNLFNBQ05zRixhQU5nQyxDQUNoQ2tlLG1CQUFvQixNQU1wQk4sU0FBVSxDQUNSTyxzQkFBcUIsU0FBQ2hwQixNQUFPRyxRQUMzQkgsTUFBTStvQixtQkFBcUI1b0IsT0FBT3dvQixPQUNwQyxLQUlVLFFBQUFLLHNCQUF5QkYsWUFBWUQsUUFBTyxzQkFJN0MsUUFBQUksdUJBQXdCLFlBQUFDLGlCQUZsQixTQUFDbHBCLE9BQWlDLE9BQUFBLE1BQU1tcEIsTUFBTixJQUluRCxTQUFBbnBCLE9BQVMsT0FBQUEsaUJBQUssRUFBTEEsTUFBTytvQixrQkFBUCxJQUdYLGdCQUFlRCxZQUFZNWhCLE8iLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9zcmMvY29kZS1zdHVkaW8vY2xpZW50U3RhdGUuanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vc3JjL2NvZGUtc3R1ZGlvL2lzUnRsUmVkdXguanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vc3JjL2NvZGUtc3R1ZGlvL3VybF90ZXN0LmpzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL3NyYy9jb21tb25TdHlsZXMuanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vc3JjL2RvbS5qcyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9zcmMvcmVkdXgvYXV0aG9yZWRIaW50cy5qcyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9zcmMvcmVkdXgvZmVlZGJhY2suanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vc3JjL3JlZHV4L2luc3RydWN0aW9ucy5qcyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9zcmMvcmVkdXgvaW5zdHJ1Y3Rpb25zRGlhbG9nLmpzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL3NyYy9yZWR1eC9wYWdlQ29uc3RhbnRzLmpzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL3NyYy9yZWR1eC9ydW5TdGF0ZS5qcyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9zcmMvcmVkdXgvc3R1ZGlvQXBwQWN0aXZpdHkuanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vc3JjL3JlZHV4L3dhdGNoZWRFeHByZXNzaW9ucy5qcyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9zcmMvc3R5bGVDb25zdGFudHMuanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vc3JjL3RlbXBsYXRlcy9FbmhhbmNlZFNhZmVNYXJrZG93bi5qc3giLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vc3JjL3RlbXBsYXRlcy9MaWdodGJ1bGIuanN4Iiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL3NyYy90ZW1wbGF0ZXMvaW5zdHJ1Y3Rpb25zL0FuaUdpZlByZXZpZXcuanN4Iiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL3NyYy90ZW1wbGF0ZXMvaW5zdHJ1Y3Rpb25zL0V4YW1wbGVJbWFnZS5qc3giLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vc3JjL3RlbXBsYXRlcy9pbnN0cnVjdGlvbnMvSW1tZXJzaXZlUmVhZGVyQnV0dG9uLmpzeCIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9zcmMvdGVtcGxhdGVzL2luc3RydWN0aW9ucy9JbnB1dE91dHB1dFRhYmxlLmpzeCIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9zcmMvdGVtcGxhdGVzL2luc3RydWN0aW9ucy9JbnN0cnVjdGlvbnMuanN4Iiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL3NyYy90ZW1wbGF0ZXMvaW5zdHJ1Y3Rpb25zL01hcmtkb3duSW5zdHJ1Y3Rpb25zLmpzeCIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9zcmMvdGVtcGxhdGVzL2luc3RydWN0aW9ucy91dGlscy5qcyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9zcmMvdGVtcGxhdGVzL3V0aWxzL2V4cGFuZGFibGVJbWFnZXMuanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vc3JjL3V0aWwvaW1tZXJzaXZlX3JlYWRlci5qcyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9zcmMvcmVkdXgvYmxvY2tseS50cyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9zcmMvcmVkdXgvbGF5b3V0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGUgSGVscGVyIGZ1bmN0aW9ucyBmb3IgYWNjZXNzaW5nIGNsaWVudCBzdGF0ZS4gVGhpcyBzdGF0ZSBpcyBzdG9yZWQgaW4gYVxuICogICAgICAgY29tYmluYXRpb24gb2YgY29va2llcyBhbmQgSFRNTDUgd2ViIHN0b3JhZ2UuXG4gKi9cbmltcG9ydCB7dHJ5U2V0U2Vzc2lvblN0b3JhZ2V9IGZyb20gJy4uL3V0aWxzJztcblxuaW1wb3J0IHttZXJnZUFjdGl2aXR5UmVzdWx0fSBmcm9tICcuL2FjdGl2aXR5VXRpbHMnO1xuXG4vLyBOb3RlOiBzZXNzaW9uU3RvcmFnZSBpcyBub3Qgc2hhcmVkIGJldHdlZW4gdGFicy5cbnZhciBzZXNzaW9uU3RvcmFnZSA9IHdpbmRvdy5zZXNzaW9uU3RvcmFnZTtcblxudmFyIGNsaWVudFN0YXRlID0gKG1vZHVsZS5leHBvcnRzID0ge30pO1xuXG5jbGllbnRTdGF0ZS5xdWVyeVBhcmFtcyA9IHJlcXVpcmUoJy4vdXRpbHMnKS5xdWVyeVBhcmFtcztcblxuLyoqXG4gKiBOdW1iZXIgb2YgZGF5cyBiZWZvcmUgY2xpZW50IHN0YXRlIGNvb2tpZSBleHBpcmVzLlxuICogQHR5cGUge251bWJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbmNsaWVudFN0YXRlLkVYUElSWV9EQVlTID0gMzY1O1xuXG4vKipcbiAqIFZhbHVlcyBsYXJnZXIgdGhhbiB0aGlzIHJlc3VsdCBhcmUgc2VydmVyLWRlcGVuZGVudCBhbmQgc2hvdWxkbid0IGJlIGNhY2hlZFxuICogaW4gY2xpZW50IHN0b3JhZ2UuXG4gKi9cbmNsaWVudFN0YXRlLk1BWElNVU1fQ0FDSEFCTEVfUkVTVUxUID0gOTk5O1xuXG5jbGllbnRTdGF0ZS5yZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICBzZXNzaW9uU3RvcmFnZS5jbGVhcigpO1xuICB9IGNhdGNoIChlKSB7fVxufTtcblxuLyoqXG4gKiBDbGVhciBwcm9ncmVzcy1yZWxhdGVkIHZhbHVlcyBmcm9tIHNlc3Npb24gc3RvcmFnZS5cbiAqL1xuY2xpZW50U3RhdGUuY2xlYXJQcm9ncmVzcyA9IGZ1bmN0aW9uICgpIHtcbiAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgncHJvZ3Jlc3MnKTtcbiAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgnbGluZXMnKTtcbiAgcmVtb3ZlSXRlbXNXaXRoUHJlZml4KHNlc3Npb25TdG9yYWdlLCAnc291cmNlXycpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjbGllbnQtY2FjaGVkIGNvcHkgb2YgdGhlIGxldmVsIHNvdXJjZSBmb3IgdGhlIGdpdmVuIHNjcmlwdFxuICogbGV2ZWwsIGlmIGl0J3MgbmV3ZXIgdGhhbiB0aGUgZ2l2ZW4gdGltZXN0YW1wLlxuICogQHBhcmFtIHtzdHJpbmd9IHNjcmlwdE5hbWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBsZXZlbElkXG4gKiBAcGFyYW0ge251bWJlcj19IHRpbWVzdGFtcFxuICogQHJldHVybnMge3N0cmluZ3x1bmRlZmluZWR9IENhY2hlZCBjb3B5IG9mIHRoZSBsZXZlbCBzb3VyY2UsIG9yIHVuZGVmaW5lZCBpZlxuICogICB0aGUgY2FjaGVkIGNvcHkgaXMgbWlzc2luZy9zdGFsZS5cbiAqL1xuY2xpZW50U3RhdGUuc291cmNlRm9yTGV2ZWwgPSBmdW5jdGlvbiAoc2NyaXB0TmFtZSwgbGV2ZWxJZCwgdGltZXN0YW1wKSB7XG4gIHZhciBkYXRhID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShjcmVhdGVLZXkoc2NyaXB0TmFtZSwgbGV2ZWxJZCwgJ3NvdXJjZScpKTtcbiAgaWYgKGRhdGEpIHtcbiAgICB2YXIgcGFyc2VkO1xuICAgIHRyeSB7XG4gICAgICBwYXJzZWQgPSBKU09OLnBhcnNlKGRhdGEpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aW1lc3RhbXAgfHwgcGFyc2VkLnRpbWVzdGFtcCA+IHRpbWVzdGFtcCkge1xuICAgICAgcmV0dXJuIHBhcnNlZC5zb3VyY2U7XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIENhY2hlIGEgY29weSBvZiB0aGUgbGV2ZWwgc291cmNlIGFsb25nIHdpdGggYSB0aW1lc3RhbXAuXG4gKiBAcGFyYW0ge3N0cmluZ30gc2NyaXB0TmFtZVxuICogQHBhcmFtIHtudW1iZXJ9IGxldmVsSWRcbiAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lc3RhbXBcbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2VcbiAqL1xuY2xpZW50U3RhdGUud3JpdGVTb3VyY2VGb3JMZXZlbCA9IGZ1bmN0aW9uIChcbiAgc2NyaXB0TmFtZSxcbiAgbGV2ZWxJZCxcbiAgdGltZXN0YW1wLFxuICBzb3VyY2Vcbikge1xuICBpZiAoc291cmNlID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdHJ5U2V0U2Vzc2lvblN0b3JhZ2UoXG4gICAgY3JlYXRlS2V5KHNjcmlwdE5hbWUsIGxldmVsSWQsICdzb3VyY2UnKSxcbiAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgIHRpbWVzdGFtcDogdGltZXN0YW1wLFxuICAgIH0pXG4gICk7XG59O1xuXG4vKipcbiAqIE1lcmdlcyB0aGUgZ2l2ZW4gdGVzdFJlc3VsdCBmb3IgdGhlIGdpdmVuIGxldmVsIGludG8gdGhlIHByb2dyZXNzXG4gKiBkYXRhIHN0b3JlZCBpbiBzZXNzaW9uIHN0b3JhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gc2NyaXB0TmFtZVxuICogQHBhcmFtIHtudW1iZXJ9IGxldmVsSWRcbiAqIEBwYXJhbSB7VGVzdFJlc3VsdHN9IHRlc3RSZXN1bHRcbiAqL1xuY2xpZW50U3RhdGUudHJhY2tQcm9ncmVzcyA9IGZ1bmN0aW9uIChzY3JpcHROYW1lLCBsZXZlbElkLCB0ZXN0UmVzdWx0KSB7XG4gIC8vIHRlc3RSZXN1bHQgdmFsdWVzID4gMTAwMCBhcmUgZm9yIHNlcnZlciB1c2Ugb25seSBhbmQgc2hvdWxkIG5vdCBiZSBzdG9yZWRcbiAgLy8gbG9jYWxseVxuICBpZiAoIXRlc3RSZXN1bHQgfHwgdGVzdFJlc3VsdCA+IGNsaWVudFN0YXRlLk1BWElNVU1fQ0FDSEFCTEVfUkVTVUxUKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcHJvZ3Jlc3NEYXRhID0gbGV2ZWxQcm9ncmVzc0J5U2NyaXB0KCk7XG4gIGlmICghcHJvZ3Jlc3NEYXRhW3NjcmlwdE5hbWVdKSB7XG4gICAgcHJvZ3Jlc3NEYXRhW3NjcmlwdE5hbWVdID0ge307XG4gIH1cbiAgY29uc3Qgc2F2ZWRSZXN1bHQgPSBwcm9ncmVzc0RhdGFbc2NyaXB0TmFtZV1bbGV2ZWxJZF0gfHwgMDtcbiAgY29uc3QgbWVyZ2VkUmVzdWx0ID0gbWVyZ2VBY3Rpdml0eVJlc3VsdChzYXZlZFJlc3VsdCwgdGVzdFJlc3VsdCk7XG5cbiAgaWYgKG1lcmdlZFJlc3VsdCAhPT0gc2F2ZWRSZXN1bHQpIHtcbiAgICBwcm9ncmVzc0RhdGFbc2NyaXB0TmFtZV1bbGV2ZWxJZF0gPSBtZXJnZWRSZXN1bHQ7XG4gICAgdHJ5U2V0U2Vzc2lvblN0b3JhZ2UoJ3Byb2dyZXNzJywgSlNPTi5zdHJpbmdpZnkocHJvZ3Jlc3NEYXRhKSk7XG4gIH1cbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgbGV2ZWwgcHJvZ3Jlc3MgbWFwIGZvciB0aGUgZ2l2ZW4gc2NyaXB0LlxuICogQHBhcmFtIHtzdHJpbmd9IHNjcmlwdE5hbWUgVGhlIHNjcmlwdCBuYW1lXG4gKiBAcmV0dXJucyB7T2JqZWN0PG51bWJlciwgbnVtYmVyPn0gbWFwIGZyb20gbGV2ZWxJZCAtPiB0ZXN0UmVzdWx0XG4gKi9cbmNsaWVudFN0YXRlLmxldmVsUHJvZ3Jlc3MgPSBmdW5jdGlvbiAoc2NyaXB0TmFtZSkge1xuICB2YXIgcHJvZ3Jlc3NNYXAgPSBsZXZlbFByb2dyZXNzQnlTY3JpcHQoKTtcbiAgcmV0dXJuIHByb2dyZXNzTWFwW3NjcmlwdE5hbWVdIHx8IHt9O1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgbWFwIGZyb20gc2NyaXB0IG5hbWUgdG8gbGV2ZWwgcHJvZ3Jlc3MgbWFwXG4gKiBAcmV0dXJuIHtPYmplY3Q8U3RyaW5nLCBPYmplY3Q+fVxuICovXG5mdW5jdGlvbiBsZXZlbFByb2dyZXNzQnlTY3JpcHQoKSB7XG4gIHZhciBwcm9ncmVzc0pzb24gPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdwcm9ncmVzcycpO1xuICB0cnkge1xuICAgIHJldHVybiBwcm9ncmVzc0pzb24gPyBKU09OLnBhcnNlKHByb2dyZXNzSnNvbikgOiB7fTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIFJlY292ZXIgZnJvbSBtYWxmb3JtZWQgZGF0YS5cbiAgICByZXR1cm4ge307XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSB1c2VyIGhhcyBzZWVuIGEgZ2l2ZW4gdmlkZW8gYmFzZWQgb24gY29udGVudHMgb2YgdGhlIGxvY2FsIHN0b3JhZ2VcbiAqIEBwYXJhbSB2aWRlb0lkXG4gKiBAcmV0dXJucyB7Kn1cbiAqL1xuY2xpZW50U3RhdGUuaGFzU2VlblZpZGVvID0gZnVuY3Rpb24gKHZpZGVvSWQpIHtcbiAgcmV0dXJuIGhhc1NlZW5WaXN1YWxFbGVtZW50KCd2aWRlbycsIHZpZGVvSWQpO1xufTtcblxuLyoqXG4gKiBSZWNvcmRzIHRoYXQgYSB1c2VyIGhhcyBzZWVuIGEgZ2l2ZW4gdmlkZW8gaW4gbG9jYWwgc3RvcmFnZVxuICogQHBhcmFtIHZpZGVvSWRcbiAqL1xuY2xpZW50U3RhdGUucmVjb3JkVmlkZW9TZWVuID0gZnVuY3Rpb24gKHZpZGVvSWQpIHtcbiAgcmVjb3JkVmlzdWFsRWxlbWVudFNlZW4oJ3ZpZGVvJywgdmlkZW9JZCk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHVzZXIgaGFzIHNlZW4gdGhlIGdpdmVuIGNhbGxvdXQgYmFzZWQgb24gY29udGVudHMgb2YgdGhlIGxvY2FsIHN0b3JhZ2VcbiAqIEBwYXJhbSBjYWxsb3V0SWRcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5jbGllbnRTdGF0ZS5oYXNTZWVuQ2FsbG91dCA9IGZ1bmN0aW9uIChjYWxsb3V0SWQpIHtcbiAgcmV0dXJuIGhhc1NlZW5WaXN1YWxFbGVtZW50KCdjYWxsb3V0JywgY2FsbG91dElkKTtcbn07XG5cbi8qKlxuICogUmVjb3JkcyB0aGF0IGEgdXNlciBoYXMgc2VlbiBhIGdpdmVuIGNhbGxvdXQgaW4gbG9jYWwgc3RvcmFnZVxuICogQHBhcmFtIGNhbGxvdXRJZFxuICovXG5jbGllbnRTdGF0ZS5yZWNvcmRDYWxsb3V0U2VlbiA9IGZ1bmN0aW9uIChjYWxsb3V0SWQpIHtcbiAgcmVjb3JkVmlzdWFsRWxlbWVudFNlZW4oJ2NhbGxvdXQnLCBjYWxsb3V0SWQpO1xufTtcblxuLyoqXG4gKiBQcml2YXRlIGhlbHBlciBmb3IgdmlkZW9zIGFuZCBjYWxsb3V0cyAtIHBlcnNpc3RzIGluZm8gaW4gdGhlIGxvY2FsIHN0b3JhZ2UgdGhhdCBhIGdpdmVuIGVsZW1lbnQgaGFzIGJlZW4gc2VlblxuICogQHBhcmFtIHZpc3VhbEVsZW1lbnRUeXBlXG4gKiBAcGFyYW0gdmlzdWFsRWxlbWVudElkXG4gKi9cbmZ1bmN0aW9uIHJlY29yZFZpc3VhbEVsZW1lbnRTZWVuKHZpc3VhbEVsZW1lbnRUeXBlLCB2aXN1YWxFbGVtZW50SWQpIHtcbiAgdmFyIGVsZW1lbnRTZWVuSnNvbiA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0odmlzdWFsRWxlbWVudFR5cGUpIHx8ICd7fSc7XG4gIHZhciBlbGVtZW50U2VlbjtcbiAgdHJ5IHtcbiAgICBlbGVtZW50U2VlbiA9IEpTT04ucGFyc2UoZWxlbWVudFNlZW5Kc29uKTtcbiAgICBlbGVtZW50U2Vlblt2aXN1YWxFbGVtZW50SWRdID0gdHJ1ZTtcbiAgICB0cnlTZXRTZXNzaW9uU3RvcmFnZSh2aXN1YWxFbGVtZW50VHlwZSwgSlNPTi5zdHJpbmdpZnkoZWxlbWVudFNlZW4pKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vU29tZXRoaW5nIHdlbnQgd3JvbmcgcGFyc2luZyB0aGUganNvbi4gQmxvdyBpdCB1cCBhbmQganVzdCBwdXQgaW4gdGhlIG5ldyBjYWxsb3V0XG4gICAgZWxlbWVudFNlZW4gPSB7fTtcbiAgICBlbGVtZW50U2Vlblt2aXN1YWxFbGVtZW50SWRdID0gdHJ1ZTtcbiAgICB0cnlTZXRTZXNzaW9uU3RvcmFnZSh2aXN1YWxFbGVtZW50VHlwZSwgSlNPTi5zdHJpbmdpZnkoZWxlbWVudFNlZW4pKTtcbiAgfVxufVxuXG4vKipcbiAqIFByaXZhdGUgaGVscGVyIGZvciB2aWRlb3MgYW5kIGNhbGxvdXRzIC0gbG9va3MgaW4gbG9jYWwgc3RvcmFnZSB0byBzZWUgaWYgdGhlIGVsZW1lbnQgaGFzIGJlZW4gc2VlblxuICogQHBhcmFtIHZpc3VhbEVsZW1lbnRUeXBlXG4gKiBAcGFyYW0gdmlzdWFsRWxlbWVudElkXG4gKi9cbmZ1bmN0aW9uIGhhc1NlZW5WaXN1YWxFbGVtZW50KHZpc3VhbEVsZW1lbnRUeXBlLCB2aXN1YWxFbGVtZW50SWQpIHtcbiAgdmFyIGVsZW1lbnRTZWVuSnNvbiA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0odmlzdWFsRWxlbWVudFR5cGUpIHx8ICd7fSc7XG4gIHRyeSB7XG4gICAgdmFyIGVsZW1lbnRTZWVuID0gSlNPTi5wYXJzZShlbGVtZW50U2Vlbkpzb24pO1xuICAgIHJldHVybiBlbGVtZW50U2Vlblt2aXN1YWxFbGVtZW50SWRdID09PSB0cnVlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlcyBzdGFuZGFyZGl6ZWQga2V5cyBmb3Igc3RvcmluZyB2YWx1ZXMgaW4gc2Vzc2lvblN0b3JhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gc2NyaXB0TmFtZVxuICogQHBhcmFtIHtudW1iZXJ9IGxldmVsSWRcbiAqIEBwYXJhbSB7c3RyaW5nPX0gcHJlZml4XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUtleShzY3JpcHROYW1lLCBsZXZlbElkLCBwcmVmaXgpIHtcbiAgcmV0dXJuIChwcmVmaXggPyBwcmVmaXggKyAnXycgOiAnJykgKyBzY3JpcHROYW1lICsgJ18nICsgbGV2ZWxJZDtcbn1cblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBpdGVtcyBmcm9tIHRoZSBnaXZlbiBzZXNzaW9uU3RvcmFnZSBvYmplY3QgdGhhdCBzdGFydCB3aXRoIHRoZVxuICogZ2l2ZW4gcHJlZml4LlxuICpcbiAqIEBwYXJhbSB7U3RvcmFnZX0gc2Vzc2lvblN0b3JhZ2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcmVmaXhcbiAqL1xuZnVuY3Rpb24gcmVtb3ZlSXRlbXNXaXRoUHJlZml4KHNlc3Npb25TdG9yYWdlLCBwcmVmaXgpIHtcbiAgT2JqZWN0LmtleXMoc2Vzc2lvblN0b3JhZ2UpXG4gICAgLmZpbHRlcihrZXkgPT4ga2V5LnN0YXJ0c1dpdGgocHJlZml4KSlcbiAgICAuZm9yRWFjaChrZXkgPT4gc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbShrZXkpKTtcbn1cbiIsImNvbnN0IFNFVF9SVEwgPSAnaXNSdGwvU0VUX1JUTCc7XG5leHBvcnQgY29uc3Qgc2V0UnRsID0gaXNSdGwgPT4gKHt0eXBlOiBTRVRfUlRMLCBpc1J0bH0pO1xuZXhwb3J0IGNvbnN0IHNldFJ0bEZyb21ET00gPSAoKSA9PiBzZXRSdGwoaXNSdGxGcm9tRE9NKCkpO1xuXG4vLyBEYXNoYm9hcmQgc2lnbmFscyB3aGV0aGVyIG9yIG5vdCB3ZSdyZSBpbiBydGwgYnkgc2V0dGluZyBcImRpclwiIG9uIHRoZSByb290XG4vLyBlbGVtZW50LiBJbiBhbiBpZGVhbCB3b3JsZCwgcmVkdXggd291bGQgYmUgdGhlIHNvdXJjZSBvZiB0cnV0aCwgYnV0IHdlIGhhdmVcbi8vIENTUyBzZWxlY3RvcnMgdGhhdCBkZXBlbmQgb24gdGhpcyBET00gc3RhdGUsIHNvbWUgb2Ygd2hpY2ggYXJlIHVzZWQgaW4gY2FzZXNcbi8vIHdoZXJlIHdlIGRvbid0IGhhdmUgcmVkdXguXG4vLyBJbnN0ZWFkIHdlIGhhdmUgdGhlIERPTSBjb250aW51ZSB0byBiZSB0aGUgc291cmNlIG9mIHRydXRoLCBhbmQgc2V0IG91ciBzdG9yZVxuLy8gc3RhdGUgYWNjb3JkaW5nbHkgc28gdGhhdCBjb21wb25lbnRzIGNhbiBhY2Nlc3MgdGhpcyBpbmZvLlxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGxvb2tzIGF0IHRoZSBET00gYW5kIGRlY2lkZXMgd2hldGhlciBvciBub3Qgd2UncmUgaW4gUlRMIG1vZGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1J0bEZyb21ET00oKSB7XG4gIGNvbnN0IGhlYWQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdO1xuICBpZiAoaGVhZCAmJiBoZWFkLnBhcmVudEVsZW1lbnQpIHtcbiAgICBjb25zdCBkaXIgPSBoZWFkLnBhcmVudEVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkaXInKTtcbiAgICByZXR1cm4gISEoZGlyICYmIGRpci50b0xvd2VyQ2FzZSgpID09PSAncnRsJyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxvY2FsZShzdGF0ZSA9IGZhbHNlLCBhY3Rpb24pIHtcbiAgaWYgKGFjdGlvbi50eXBlID09PSBTRVRfUlRMKSB7XG4gICAgcmV0dXJuIGFjdGlvbi5pc1J0bDtcbiAgfVxuICByZXR1cm4gc3RhdGU7XG59XG4iLCIvLyBUZXN0cyB3aGV0aGVyIHRoZSBicm93c2VyIGNhbiBhY2Nlc3MgYW4gaW1hZ2UgVVJMLlxuLy8gVXNlZnVsIGFzIGEgd29ya2Fyb3VuZCBmb3IgQ09SUyBzZWN1cml0eSB0byB0ZXN0IGFjY2VzcyB0byBhbiBvcmlnaW4uXG5mdW5jdGlvbiB0ZXN0SW1hZ2VBY2Nlc3MoXG4gIHVybCxcbiAgc3VjY2Vzc0NhbGxiYWNrID0gKCkgPT4ge30sXG4gIGZhaWx1cmVDYWxsYmFjayA9ICgpID0+IHt9LFxuICB0aW1lb3V0TXMgPSA1MDAwLFxuICB2aWRlb0VsZW1lbnQgPSBmYWxzZVxuKSB7XG4gIHZhciBlbGVtZW50O1xuICBpZiAodmlkZW9FbGVtZW50KSB7XG4gICAgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3ZpZGVvJyk7XG4gIH0gZWxzZSB7XG4gICAgZWxlbWVudCA9IG5ldyBJbWFnZSgpO1xuICB9XG4gIHZhciBjYWxsZWQgPSBmYWxzZTtcbiAgZnVuY3Rpb24gZmluaXNoKGNhbGxiYWNrKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChjYWxsZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY2FsbGVkID0gdHJ1ZTtcbiAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH07XG4gIH1cbiAgdmFyIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dChmaW5pc2goZmFpbHVyZUNhbGxiYWNrKSwgdGltZW91dE1zKTtcbiAgZWxlbWVudC5vbmVycm9yID0gZmluaXNoKGZhaWx1cmVDYWxsYmFjayk7XG4gIGlmICh2aWRlb0VsZW1lbnQpIHtcbiAgICBlbGVtZW50Lm9uZHVyYXRpb25jaGFuZ2UgPSBmaW5pc2goc3VjY2Vzc0NhbGxiYWNrKTtcbiAgfSBlbHNlIHtcbiAgICBlbGVtZW50Lm9ubG9hZCA9IGZpbmlzaChzdWNjZXNzQ2FsbGJhY2spO1xuICB9XG4gIGVsZW1lbnQuc3JjID0gdXJsO1xuICAvLyBzdG9yZSBhIHJlZmVyZW5jZSB0byB0aGUgZWxlbWVudCBzbyBpdCBkb2Vzbid0IGdldCBjb2xsZWN0ZWRcbiAgd2luZG93LnRlc3RJbWFnZXMgPSB3aW5kb3cudGVzdEltYWdlcyB8fCBbXTtcbiAgd2luZG93LnRlc3RJbWFnZXMucHVzaChlbGVtZW50KTtcbn1cbm1vZHVsZS5leHBvcnRzID0gdGVzdEltYWdlQWNjZXNzO1xuIiwiLy8gQXMgd2UgbW92ZSBmcm9tIGlubGluZSBjc3MgdG8gY3NzIG1vZHVsZXMgd2UgYXJlIHRlbXBvcmFyaWx5IGR1cGxpY2F0aW5nIHRoaXNcbi8vIGludG8gdGhlIGNzcyBtb2R1bGUgY29tbW9uLXN0eWxlcy5tb2R1bGUuc2Nzcy5cbi8vIEFueSBjaGFuZ2VzIGluIG9uZSBzaG91bGQgYmUgbWFkZSBpbiB0aGUgb3RoZXIgdG8gYXBwbHkgdG8gYWxsIGNvbXBvbmVudHMuXG52YXIgY29tbW9uU3R5bGVzID0gbW9kdWxlLmV4cG9ydHM7XG52YXIgc3R5bGVDb25zdGFudHMgPSByZXF1aXJlKCcuL3N0eWxlQ29uc3RhbnRzJyk7XG52YXIgY29sb3IgPSByZXF1aXJlKCcuL3V0aWwvY29sb3InKTtcblxuY29tbW9uU3R5bGVzLmhpZGRlbiA9IHtcbiAgZGlzcGxheTogJ25vbmUnLFxufTtcblxuY29tbW9uU3R5bGVzLnB1cnBsZUhlYWRlciA9IHtcbiAgaGVpZ2h0OiBzdHlsZUNvbnN0YW50c1snd29ya3NwYWNlLWhlYWRlcnMtaGVpZ2h0J10sXG4gIGJhY2tncm91bmRDb2xvcjogY29sb3IucHVycGxlLFxuICBjb2xvcjogY29sb3Iud2hpdGUsXG4gIG92ZXJmbG93WTogJ2hpZGRlbicsXG4gIFdlYmtpdFVzZXJTZWxlY3Q6ICdub25lJyxcbiAgTW96VXNlclNlbGVjdDogJ25vbmUnLFxuICBtc1VzZXJTZWxlY3Q6ICdub25lJyxcbiAgdXNlclNlbGVjdDogJ25vbmUnLFxufTtcblxuY29tbW9uU3R5bGVzLnB1cnBsZUhlYWRlclVuZm9jdXNlZCA9IHtcbiAgYmFja2dyb3VuZENvbG9yOiBjb2xvci5saWdodGVyX3B1cnBsZSxcbiAgY29sb3I6IGNvbG9yLm5ldXRyYWxfd2hpdGUsXG59O1xuXG5jb21tb25TdHlsZXMudGVhY2hlckJsdWVIZWFkZXIgPSB7XG4gIGJhY2tncm91bmRDb2xvcjogY29sb3IuY3lhbixcbiAgY29sb3I6IGNvbG9yLmxpZ2h0ZXN0X2N5YW4sXG59O1xuXG5jb21tb25TdHlsZXMudGVhY2hlckhlYWRlclVuZm9jdXNlZCA9IHtcbiAgY29sb3I6IGNvbG9yLmRhcmtfY2hhcmNvYWwsXG59O1xuXG5jb21tb25TdHlsZXMubWluZWNyYWZ0SGVhZGVyID0ge1xuICBiYWNrZ3JvdW5kQ29sb3I6ICcjM2IzYjNiJyxcbiAgY29sb3I6IGNvbG9yLndoaXRlLFxufTtcblxuY29tbW9uU3R5bGVzLmJ1dHRvbiA9IHtcbiAgcGFkZGluZ1RvcDogNSxcbiAgcGFkZGluZ0JvdHRvbTogNSxcbiAgZm9udFNpemU6IDE0LFxufTtcblxuLy8gRGl2IGNvbnRhaW4gaW5zdHJ1Y3Rpb25zLCBlaXRoZXIgYmVsb3cgdmlzdWFsaXphdGlvbiBvciBpbiB0b3AgaW5zdHJ1Y3Rpb25zXG4vLyBNYXkgbm90IG5lZWQgYSBjb21tb24gbG9jYXRpb24gb25jZSBldmVyeXRoaW5nIGlzIGluIHRvcCBpbnN0cnVjdGlvbnNcbmNvbW1vblN0eWxlcy5idWJibGUgPSB7XG4gIGNvbG9yOiBjb2xvci5ibGFjayxcbiAgbWFyZ2luQm90dG9tOiAxMCxcbiAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gIGN1cnNvcjogJ3BvaW50ZXInLFxufTtcbiIsImV4cG9ydHMuYWRkUmVhZHlMaXN0ZW5lciA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2NvbXBsZXRlJykge1xuICAgIHNldFRpbWVvdXQoY2FsbGJhY2ssIDEpO1xuICB9IGVsc2Uge1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgY2FsbGJhY2ssIGZhbHNlKTtcbiAgfVxufTtcblxuZXhwb3J0cy5nZXRUb3VjaEV2ZW50TmFtZSA9IGZ1bmN0aW9uIChldmVudE5hbWUpIHtcbiAgdmFyIGlzSUUxMVRvdWNoID0gd2luZG93Lm5hdmlnYXRvci5wb2ludGVyRW5hYmxlZDtcbiAgdmFyIGlzSUUxMFRvdWNoID0gd2luZG93Lm5hdmlnYXRvci5tc1BvaW50ZXJFbmFibGVkO1xuICB2YXIgaXNTdGFuZGFyZFRvdWNoID0gIShpc0lFMTFUb3VjaCB8fCBpc0lFMTBUb3VjaCk7XG5cbiAgdmFyIGtleTtcbiAgaWYgKGlzSUUxMVRvdWNoKSB7XG4gICAga2V5ID0gJ2llMTEnO1xuICB9IGVsc2UgaWYgKGlzSUUxMFRvdWNoKSB7XG4gICAga2V5ID0gJ2llMTAnO1xuICB9IGVsc2UgaWYgKGlzU3RhbmRhcmRUb3VjaCkge1xuICAgIGtleSA9ICdzdGFuZGFyZCc7XG4gIH1cbiAgaWYgKGtleSAmJiBUT1VDSF9NQVBbZXZlbnROYW1lXSkge1xuICAgIHJldHVybiBUT1VDSF9NQVBbZXZlbnROYW1lXVtrZXldO1xuICB9XG59O1xuXG4vKipcbiAqIEFkZCBhbiBldmVudCBsaXN0ZW5lclxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZVxuICogQHBhcmFtIHtmdW5jdGlvbikgaGFuZGxlclxuICogQHBhcmFtIHtib29sZWFufSBzdXBwcmVzc1RvdWNoRGVmYXVsdCAtIFNob3VsZCB3ZSBwcmV2ZW50RGVmYXVsdCBvbiB0b3VjaCBldmVudHNcbiAqL1xudmFyIGFkZEV2ZW50ID0gZnVuY3Rpb24gKFxuICBlbGVtZW50LFxuICBldmVudE5hbWUsXG4gIGhhbmRsZXIsXG4gIHN1cHByZXNzVG91Y2hEZWZhdWx0ID0gdHJ1ZVxuKSB7XG4gIC8vIFNjb3BlIGJvdW5kIGV2ZW50IG1hcCB0byB0aGlzIGFkZEV2ZW50IGNhbGwgLSB3ZSBvbmx5IHByb3ZpZGUgZm9yIHVuYmluZGluZ1xuICAvLyB3aGF0IHdlIGJpbmQgcmlnaHQgaGVyZS5cbiAgdmFyIGJvdW5kRXZlbnRzID0ge307XG5cbiAgdmFyIGJpbmRFdmVudCA9IGZ1bmN0aW9uICh0eXBlLCBldmVudE5hbWUsIGhhbmRsZXIpIHtcbiAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBoYW5kbGVyLCBmYWxzZSk7XG4gICAgYm91bmRFdmVudHNbdHlwZV0gPSB7bmFtZTogZXZlbnROYW1lLCBoYW5kbGVyOiBoYW5kbGVyfTtcbiAgfTtcblxuICB2YXIgdW5iaW5kRXZlbnQgPSBmdW5jdGlvbiAodHlwZSkge1xuICAgIHZhciBldmVudEluZm8gPSBib3VuZEV2ZW50c1t0eXBlXTtcbiAgICBpZiAoZXZlbnRJbmZvKSB7XG4gICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRJbmZvLm5hbWUsIGV2ZW50SW5mby5oYW5kbGVyKTtcbiAgICAgIGRlbGV0ZSBib3VuZEV2ZW50c1t0eXBlXTtcbiAgICB9XG4gIH07XG5cbiAgLy8gQWRkIGNsaWNrIGhhbmRsZXJcbiAgYmluZEV2ZW50KCdjbGljaycsIGV2ZW50TmFtZSwgaGFuZGxlcik7XG5cbiAgLy8gT3B0aW9uYWxseSBhZGQgdG91Y2ggaGFuZGxlclxuICB2YXIgdG91Y2hFdmVudCA9IGV4cG9ydHMuZ2V0VG91Y2hFdmVudE5hbWUoZXZlbnROYW1lKTtcbiAgaWYgKHRvdWNoRXZlbnQpIHtcbiAgICBiaW5kRXZlbnQoJ3RvdWNoJywgdG91Y2hFdmVudCwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIC8vIFN0b3AgbW91c2UgZXZlbnRzIGFuZCBzdXBwcmVzcyBkZWZhdWx0IGV2ZW50IGhhbmRsZXIgdG8gcHJldmVudFxuICAgICAgLy8gdW5pbnRlbnRpb25hbCBkb3VibGUtY2xpY2tpbmdcbiAgICAgIGlmIChzdXBwcmVzc1RvdWNoRGVmYXVsdCkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG5cbiAgICAgIC8vIC0tLS0gV29ya2Fyb3VuZCBmb3IgSUUgMTEgKDIwMTkpIC0tLS1cbiAgICAgIC8vIEJhY2tncm91bmQ6IFByZXZlbnREZWZhdWx0IGlzIG5vdCByZWNvZ25pemVkIGluIElFLiBJbiBJRSAxMSwgYSBjbGlja1xuICAgICAgLy8gZXZlbnQgd2lsbCBmaXJlIHRoZSBmb2xsb3dpbmcgZXZlbnRzOlxuICAgICAgLy8gTVNQb2ludGVyRG93biAtPiBwb2ludGVyZG93biAtPiBNU1BvaW50ZXJVcCAtPiBwb2ludGVydXAgLT4gY2xpY2tcbiAgICAgIC8vIFRoaXMgZXhhY3Qgc2FtZSBzZXF1ZW5jZSBvZiBldmVudHMgaGFwcGVucyB3aGV0aGVyIHRoZSBldmVudCBvcmlnaW5hdGVkXG4gICAgICAvLyBmcm9tIGEgdG91Y2gsIGEgdHJhY2twYWQsIG9yIGEgbW91c2UuIG1vdXNlZG93biwgbW91c2V1cCwgYW5kIG1vdXNlbW92ZVxuICAgICAgLy8gZXZlbnRzIGJlaGF2ZSBzaW1pbGFybHkuIEJlY2F1c2Ugb2YgdGhpcyBiZWhhdmlvciwgd2UgY2FuIChhbmQgc2hvdWxkKVxuICAgICAgLy8gcmVtb3ZlIHRoZSBldmVudCBoYW5kbGVycyB0aGF0IGFyZSBub3Qgc3BlY2lmaWMgdG8gSUUgMTEgYXMgc29vbiBhcyBhblxuICAgICAgLy8gSUUgMTEgZXZlbnQgaXMgZmlyZWQuIFRoaXMgd2lsbCBwcmV2ZW50IGR1cGxpY2F0ZSBldmVudHMgZnJvbSBoYXBwZW5pbmdcbiAgICAgIC8vIHN1Y2ggYXMgZG91YmxlIGNsaWNrLlxuICAgICAgbGV0IElFRXZlbnRzID0gW1xuICAgICAgICAncG9pbnRlcmRvd24nLFxuICAgICAgICAnTVNQb2ludGVyRG93bicsXG4gICAgICAgICdwb2ludGVybW92ZScsXG4gICAgICAgICdNU1BvaW50ZXJNb3ZlJyxcbiAgICAgICAgJ3BvaW50ZXJ1cCcsXG4gICAgICAgICdNU1BvaW50ZXJVcCcsXG4gICAgICBdO1xuICAgICAgaWYgKElFRXZlbnRzLmluY2x1ZGVzKHRvdWNoRXZlbnQpKSB7XG4gICAgICAgIHVuYmluZEV2ZW50KCdjbGljaycpO1xuICAgICAgfVxuXG4gICAgICBoYW5kbGVyPy5jYWxsKHRoaXMsIGUpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gUmV0dXJuIGZ1bmN0aW9uIHRoYXQgdW5iaW5kcyBhbGwgaGFuZGxlcnNcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB1bmJpbmRFdmVudCgnY2xpY2snKTtcbiAgICB1bmJpbmRFdmVudCgndG91Y2gnKTtcbiAgfTtcbn07XG5cbmV4cG9ydHMuYWRkTW91c2VEb3duVG91Y2hFdmVudCA9IGZ1bmN0aW9uIChlbGVtZW50LCBoYW5kbGVyKSB7XG4gIHJldHVybiBhZGRFdmVudChlbGVtZW50LCAnbW91c2Vkb3duJywgaGFuZGxlcik7XG59O1xuXG5leHBvcnRzLmFkZE1vdXNlVXBUb3VjaEV2ZW50ID0gZnVuY3Rpb24gKFxuICBlbGVtZW50LFxuICBoYW5kbGVyLFxuICBzdXBwcmVzc1RvdWNoRGVmYXVsdCA9IHRydWVcbikge1xuICByZXR1cm4gYWRkRXZlbnQoZWxlbWVudCwgJ21vdXNldXAnLCBoYW5kbGVyLCBzdXBwcmVzc1RvdWNoRGVmYXVsdCk7XG59O1xuXG5leHBvcnRzLmFkZE1vdXNlTW92ZVRvdWNoRXZlbnQgPSBmdW5jdGlvbiAoZWxlbWVudCwgaGFuZGxlcikge1xuICByZXR1cm4gYWRkRXZlbnQoZWxlbWVudCwgJ21vdXNlbW92ZScsIGhhbmRsZXIpO1xufTtcblxuZXhwb3J0cy5hZGRDbGlja1RvdWNoRXZlbnQgPSBmdW5jdGlvbiAoZWxlbWVudCwgaGFuZGxlcikge1xuICByZXR1cm4gYWRkRXZlbnQoZWxlbWVudCwgJ2NsaWNrJywgaGFuZGxlcik7XG59O1xuXG4vLyBBIG1hcCBmcm9tIHN0YW5kYXJkIHRvdWNoIGV2ZW50cyB0byB2YXJpb3VzIGFsaWFzZXMuXG52YXIgVE9VQ0hfTUFQID0ge1xuICAvLyAgSW5jb21wbGV0ZSBsaXN0LCBhZGQgYXMgbmVlZGVkLlxuICBjbGljazoge1xuICAgIHN0YW5kYXJkOiAndG91Y2hzdGFydCcsXG4gICAgaWUxMDogJ01TUG9pbnRlckRvd24nLFxuICAgIGllMTE6ICdwb2ludGVyZG93bicsXG4gIH0sXG4gIG1vdXNlZG93bjoge1xuICAgIHN0YW5kYXJkOiAndG91Y2hzdGFydCcsXG4gICAgaWUxMDogJ01TUG9pbnRlckRvd24nLFxuICAgIGllMTE6ICdwb2ludGVyZG93bicsXG4gIH0sXG4gIG1vdXNldXA6IHtcbiAgICBzdGFuZGFyZDogJ3RvdWNoZW5kJyxcbiAgICBpZTEwOiAnTVNQb2ludGVyVXAnLFxuICAgIGllMTE6ICdwb2ludGVydXAnLFxuICB9LFxuICBtb3VzZW1vdmU6IHtcbiAgICBzdGFuZGFyZDogJ3RvdWNobW92ZScsXG4gICAgaWUxMDogJ01TUG9pbnRlck1vdmUnLFxuICAgIGllMTE6ICdwb2ludGVybW92ZScsXG4gIH0sXG59O1xuZXhwb3J0cy5UT1VDSF9NQVAgPSBUT1VDSF9NQVA7XG5cbmV4cG9ydHMuaXNNb2JpbGUgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciByZWcgPSAvTW9iaWxlfGlQKGhvbmV8b2R8YWQpfEFuZHJvaWR8QmxhY2tCZXJyeXxJRU1vYmlsZS87XG4gIHJldHVybiByZWcudGVzdCh3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCk7XG59O1xuXG5leHBvcnRzLmlzV2luZG93c1RvdWNoID0gZnVuY3Rpb24gKCkge1xuICB2YXIgcmVnID0gL01TSUUuKlRvdWNoLztcbiAgcmV0dXJuIHJlZy50ZXN0KHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KTtcbn07XG5cbmV4cG9ydHMuaXNBbmRyb2lkID0gZnVuY3Rpb24gKCkge1xuICB2YXIgcmVnID0gL0FuZHJvaWQvO1xuICByZXR1cm4gcmVnLnRlc3Qod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQpO1xufTtcblxuZXhwb3J0cy5pc0lPUyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlZyA9IC9pUChob25lfG9kfGFkKS87XG4gIHJldHVybiByZWcudGVzdCh3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCk7XG59O1xuXG5leHBvcnRzLmlzSVBhZCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlZyA9IC9pUGFkL2k7XG4gIHJldHVybiByZWcudGVzdCh3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCk7XG59O1xuIiwiY29uc3QgRU5RVUVVRV9ISU5UUyA9ICdhdXRob3JlZEhpbnRzL0VOUVVFVUVfSElOVFMnO1xuY29uc3QgU0hPV19ORVhUX0hJTlQgPSAnYXV0aG9yZWRIaW50cy9TSE9XX05FWFRfSElOVCc7XG5jb25zdCBESVNQTEFZX01JU1NJTkdfQkxPQ0tfSElOVFMgPSAnYXV0aG9yZWRIaW50cy9ESVNQTEFZX01JU1NJTkdfQkxPQ0tfSElOVFMnO1xuXG5pbXBvcnQge2Jpc2VjdH0gZnJvbSAnLi4vdXRpbHMnO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEF1dGhvcmVkSGludFxuICogQHByb3BlcnR5IHtzdHJpbmd9IG1hcmtkb3duXG4gKiBAcHJvcGVydHkge3N0cmluZ30gaGludElkXG4gKiBAcHJvcGVydHkge3N0cmluZ30gaGludENsYXNzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gaGludFR5cGVcbiAqIEBwcm9wZXJ0eSB7P0FycmF5PEFycmF5Pj59IGhpbnRQYXRoXG4gKiBAcHJvcGVydHkge3N0cmluZ30gaGludFZpZGVvXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGFscmVhZHlTZWVuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdHRzTWVzc2FnZVxuICogQHByb3BlcnR5IHtFbGVtZW50fSBibG9ja1xuICovXG5cbmNvbnN0IGF1dGhvcmVkSGludHNJbml0aWFsU3RhdGUgPSB7XG4gIC8qKlxuICAgKiBAdHlwZSB7IUF1dGhvcmVkSGludFtdfVxuICAgKi9cbiAgc2VlbkhpbnRzOiBbXSxcblxuICAvKipcbiAgICogQHR5cGUgeyFBdXRob3JlZEhpbnRbXX1cbiAgICovXG4gIHVuc2VlbkhpbnRzOiBbXSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZHVjZXIoc3RhdGUgPSBhdXRob3JlZEhpbnRzSW5pdGlhbFN0YXRlLCBhY3Rpb24pIHtcbiAgaWYgKGFjdGlvbi50eXBlID09PSBFTlFVRVVFX0hJTlRTKSB7XG4gICAgY29uc3QgW3NlZW4sIHVuc2Vlbl0gPSBiaXNlY3QoXG4gICAgICBhY3Rpb24uaGludHMsXG4gICAgICBoaW50ID0+IGFjdGlvbi5oaW50c1VzZWRJZHMuaW5kZXhPZihoaW50LmhpbnRJZCkgIT09IC0xXG4gICAgKTtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICAgIHVuc2VlbkhpbnRzOiBzdGF0ZS51bnNlZW5IaW50cy5jb25jYXQodW5zZWVuKSxcbiAgICAgIHNlZW5IaW50czogc3RhdGUuc2VlbkhpbnRzLmNvbmNhdChzZWVuKSxcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChhY3Rpb24udHlwZSA9PT0gU0hPV19ORVhUX0hJTlQpIHtcbiAgICBjb25zdCBuZXh0SGludCA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnVuc2VlbkhpbnRzWzBdLCB7XG4gICAgICBhbHJlYWR5U2VlbjogdHJ1ZSxcbiAgICB9KTtcblxuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgICAgdW5zZWVuSGludHM6IHN0YXRlLnVuc2VlbkhpbnRzLnNsaWNlKDEpLFxuICAgICAgc2VlbkhpbnRzOiBzdGF0ZS5zZWVuSGludHMuY29uY2F0KFtuZXh0SGludF0pLFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKGFjdGlvbi50eXBlID09PSBESVNQTEFZX01JU1NJTkdfQkxPQ0tfSElOVFMpIHtcbiAgICAvLyBhbnkgY29udGV4dHVhbCBoaW50cyBhbHJlYWR5IGRpc3BsYXllZCBidXQgbm90IGluIHRoaXMgbmV3IHNldFxuICAgIC8vIHNob3VsZCBiZSByZW1vdmVkXG4gICAgY29uc3Qgc2VlbkhpbnRzID0gc3RhdGUuc2VlbkhpbnRzLmZpbHRlcihzZWVuSGludCA9PiB7XG4gICAgICBpZiAoc2VlbkhpbnQuaGludFR5cGUgPT09ICdjb250ZXh0dWFsJykge1xuICAgICAgICByZXR1cm4gYWN0aW9uLmhpbnRzLnNvbWUobmV3SGludCA9PiBzZWVuSGludC5oaW50SWQgPT09IG5ld0hpbnQuaGludElkKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG5cbiAgICAvLyBhbnkgaGludHMgd2UgaW50ZW5kIHRvIGVucXVldWUgdGhhdCBhcmUgYWxyZWFkeSBkaXNwbGF5ZWQgc2hvdWxkXG4gICAgLy8gbm90IGJlIGVucXVldWVkIHRvIGJlIGRpc3BsYXllZCBhZ2Fpbi5cbiAgICBjb25zdCBuZXdIaW50c1RvRW5xdWV1ZSA9IGFjdGlvbi5oaW50cy5maWx0ZXIobmV3SGludCA9PlxuICAgICAgc3RhdGUuc2VlbkhpbnRzLmV2ZXJ5KHNlZW5IaW50ID0+IG5ld0hpbnQuaGludElkICE9PSBzZWVuSGludC5oaW50SWQpXG4gICAgKTtcblxuICAgIC8vIGFueSBjdXJyZW50bHktZW5xdWV1ZWQgY29udGV4dHVhbCBoaW50cyBzaG91bGQgYmUgcmVtb3ZlZFxuICAgIGNvbnN0IHVuc2Vlbk5vbkNvbnRleHR1YWxIaW50cyA9IHN0YXRlLnVuc2VlbkhpbnRzLmZpbHRlcihcbiAgICAgIGhpbnQgPT4gaGludC5oaW50VHlwZSAhPT0gJ2NvbnRleHR1YWwnXG4gICAgKTtcblxuICAgIC8vIHVuc2VlbiBjb250ZXh0dWFsIGhpbnRzIGdvIHRvIGZyb250IG9mIHF1ZXVlXG4gICAgY29uc3QgbmV3VW5zZWVuSGludHMgPSBuZXdIaW50c1RvRW5xdWV1ZVxuICAgICAgLmZpbHRlcihoaW50ID0+ICFoaW50LmFscmVhZHlTZWVuKVxuICAgICAgLmNvbmNhdCh1bnNlZW5Ob25Db250ZXh0dWFsSGludHMpO1xuXG4gICAgLy8gc2VlbiBjb250ZXh0dWFsIGhpbnRzIGdvIHRvIGJhY2sgb2YgcXVldWVcbiAgICBjb25zdCBuZXdTZWVuSGludHMgPSBzZWVuSGludHMuY29uY2F0KFxuICAgICAgbmV3SGludHNUb0VucXVldWUuZmlsdGVyKGhpbnQgPT4gaGludC5hbHJlYWR5U2VlbilcbiAgICApO1xuXG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gICAgICB1bnNlZW5IaW50czogbmV3VW5zZWVuSGludHMsXG4gICAgICBzZWVuSGludHM6IG5ld1NlZW5IaW50cyxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuZXhwb3J0IGNvbnN0IGVucXVldWVIaW50cyA9IChoaW50cywgaGludHNVc2VkSWRzKSA9PiAoe1xuICB0eXBlOiBFTlFVRVVFX0hJTlRTLFxuICBoaW50cyxcbiAgaGludHNVc2VkSWRzLFxufSk7XG5cbmV4cG9ydCBjb25zdCBzaG93TmV4dEhpbnQgPSAoKSA9PiAoe1xuICB0eXBlOiBTSE9XX05FWFRfSElOVCxcbn0pO1xuXG5leHBvcnQgY29uc3QgZGlzcGxheU1pc3NpbmdCbG9ja0hpbnRzID0gaGludHMgPT4gKHtcbiAgdHlwZTogRElTUExBWV9NSVNTSU5HX0JMT0NLX0hJTlRTLFxuICBoaW50cyxcbn0pO1xuIiwiLyoqIEBmaWxlIFN0b3JlIGZlZWRiYWNrIGFib3V0IHRoZSBzdHVkZW50J3Mgc29sdXRpb24gKi9cblxuY29uc3QgU0hPV19GRUVEQkFDSyA9ICdmZWVkYmFjay9zaG93X2ZlZWRiYWNrJztcbmNvbnN0IEhJREVfRkVFREJBQ0sgPSAnZmVlZGJhY2svaGlkZV9mZWVkYmFjayc7XG5jb25zdCBTRVRfQUNISUVWRU1FTlRTID0gJ2ZlZWRiYWNrL3NldF9hY2hpZXZlbW50cyc7XG5jb25zdCBTRVRfQkxPQ0tfTElNSVQgPSAnZmVlZGJhY2svc2V0X2Jsb2NrX2xpbWl0JztcbmNvbnN0IFNFVF9GRUVEQkFDS19EQVRBID0gJ2ZlZWRiYWNrL3NldF9kYXRhJztcblxuY29uc3QgaW5pdGlhbFN0YXRlID0ge1xuICBkaXNwbGF5aW5nRmVlZGJhY2s6IGZhbHNlLFxuICBkaXNwbGF5aW5nQ29kZTogZmFsc2UsXG4gIGRpc3BsYXlpbmdTaGFyZUNvbnRyb2xzOiBmYWxzZSxcblxuICBpc0NoYWxsZW5nZTogZmFsc2UsXG4gIGlzUGVyZmVjdDogdHJ1ZSxcbiAgYmxvY2tzVXNlZDogMCxcbiAgYmxvY2tMaW1pdDogdW5kZWZpbmVkLFxuICBhY2hpZXZlbWVudHM6IFtdLFxuICBkaXNwbGF5RnVub21ldGVyOiB0cnVlLFxuICBzdHVkZW50Q29kZToge1xuICAgIG1lc3NhZ2U6ICcnLFxuICAgIGNvZGU6ICcnLFxuICB9LFxuICBmZWVkYmFja0ltYWdlOiBudWxsLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVkdWNlcihzdGF0ZSA9IGluaXRpYWxTdGF0ZSwgYWN0aW9uKSB7XG4gIGlmIChhY3Rpb24udHlwZSA9PT0gU0hPV19GRUVEQkFDSykge1xuICAgIGNvbnN0IHtkaXNwbGF5aW5nU2hhcmVDb250cm9sc30gPSBhY3Rpb247XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgZGlzcGxheWluZ0ZlZWRiYWNrOiB0cnVlLFxuICAgICAgZGlzcGxheWluZ1NoYXJlQ29udHJvbHMsXG4gICAgfTtcbiAgfVxuICBpZiAoYWN0aW9uLnR5cGUgPT09IEhJREVfRkVFREJBQ0spIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBkaXNwbGF5aW5nRmVlZGJhY2s6IGZhbHNlLFxuICAgIH07XG4gIH1cbiAgaWYgKGFjdGlvbi50eXBlID09PSBTRVRfQkxPQ0tfTElNSVQpIHtcbiAgICBjb25zdCB7YmxvY2tMaW1pdH0gPSBhY3Rpb247XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgYmxvY2tMaW1pdCxcbiAgICB9O1xuICB9XG4gIGlmIChhY3Rpb24udHlwZSA9PT0gU0VUX0ZFRURCQUNLX0RBVEEpIHtcbiAgICBjb25zdCB7XG4gICAgICBpc0NoYWxsZW5nZSxcbiAgICAgIGlzUGVyZmVjdCxcbiAgICAgIGJsb2Nrc1VzZWQsXG4gICAgICBkaXNwbGF5RnVub21ldGVyLFxuICAgICAgc3R1ZGVudENvZGUsXG4gICAgICBmZWVkYmFja0ltYWdlLFxuICAgIH0gPSBhY3Rpb247XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgaXNDaGFsbGVuZ2UsXG4gICAgICBpc1BlcmZlY3QsXG4gICAgICBibG9ja3NVc2VkLFxuICAgICAgZGlzcGxheUZ1bm9tZXRlcixcbiAgICAgIHN0dWRlbnRDb2RlLFxuICAgICAgZmVlZGJhY2tJbWFnZSxcbiAgICB9O1xuICB9XG4gIGlmIChhY3Rpb24udHlwZSA9PT0gU0VUX0FDSElFVkVNRU5UUykge1xuICAgIGNvbnN0IHthY2hpZXZlbWVudHN9ID0gYWN0aW9uO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGFjaGlldmVtZW50cyxcbiAgICB9O1xuICB9XG4gIHJldHVybiBzdGF0ZTtcbn1cblxuZXhwb3J0IGNvbnN0IHNob3dGZWVkYmFjayA9IChkaXNwbGF5aW5nU2hhcmVDb250cm9scyA9IGZhbHNlKSA9PiAoe1xuICB0eXBlOiBTSE9XX0ZFRURCQUNLLFxuICBkaXNwbGF5aW5nU2hhcmVDb250cm9scyxcbn0pO1xuXG5leHBvcnQgY29uc3QgaGlkZUZlZWRiYWNrID0gKCkgPT4gKHtcbiAgdHlwZTogSElERV9GRUVEQkFDSyxcbn0pO1xuXG5leHBvcnQgY29uc3Qgc2V0QmxvY2tMaW1pdCA9IGJsb2NrTGltaXQgPT4gKHtcbiAgdHlwZTogU0VUX0JMT0NLX0xJTUlULFxuICBibG9ja0xpbWl0LFxufSk7XG5cbmV4cG9ydCBjb25zdCBzZXRGZWVkYmFja0RhdGEgPSBwcm9wcyA9PiAoe1xuICB0eXBlOiBTRVRfRkVFREJBQ0tfREFUQSxcbiAgLi4ucHJvcHMsXG59KTtcblxuZXhwb3J0IGNvbnN0IHNldEFjaGlldmVtZW50cyA9IGFjaGlldmVtZW50cyA9PiAoe1xuICB0eXBlOiBTRVRfQUNISUVWRU1FTlRTLFxuICBhY2hpZXZlbWVudHMsXG59KTtcbiIsIi8qKlxuICogQSBkdWNrIG1vZHVsZSBmb3IgaW5zdHJ1Y3Rpb25zLCBwYXJ0aWN1bGFybHkgaW5zdHJ1Y3Rpb25zIHRoYXQgd2Ugc2hvdyBpblxuICogdGhlIHRvcCBwYW5lIGFib3ZlIHRoZSBjb2RlIHdvcmtzcGFjZS4gVGhpcyBtb2R1bGUgY29udGFpbnMgYm90aCB0aGUgYWN0aW9uc1xuICogdGhhdCBhcmUgcmVxdWlyZWQgZm9yIHRoaXMgZmVhdHVyZSwgYW5kIHRoZSByZWR1Y2VyIHRoYXQgc2V0cyBzdGF0ZSBiYXNlZFxuICogb2ZmIG9mIHRob3NlIGFjdGlvbnMuXG4gKi9cblxuaW1wb3J0IHt0cnlTZXRMb2NhbFN0b3JhZ2UsIHRyeUdldExvY2FsU3RvcmFnZX0gZnJvbSAnLi4vdXRpbHMnO1xuXG5jb25zdCBTRVRfQ09OU1RBTlRTID0gJ2luc3RydWN0aW9ucy9TRVRfQ09OU1RBTlRTJztcbmNvbnN0IFRPR0dMRV9JTlNUUlVDVElPTlNfQ09MTEFQU0VEID1cbiAgJ2luc3RydWN0aW9ucy9UT0dHTEVfSU5TVFJVQ1RJT05TX0NPTExBUFNFRCc7XG5jb25zdCBTRVRfSU5TVFJVQ1RJT05TX1JFTkRFUkVEX0hFSUdIVCA9XG4gICdpbnN0cnVjdGlvbnMvU0VUX0lOU1RSVUNUSU9OU19SRU5ERVJFRF9IRUlHSFQnO1xuY29uc3QgU0VUX0lOU1RSVUNUSU9OU19NQVhfSEVJR0hUX05FRURFRCA9XG4gICdpbnN0cnVjdGlvbnMvU0VUX0lOU1RSVUNUSU9OU19NQVhfSEVJR0hUX05FRURFRCc7XG5jb25zdCBTRVRfSU5TVFJVQ1RJT05TX01BWF9IRUlHSFRfQVZBSUxBQkxFID1cbiAgJ2luc3RydWN0aW9ucy9TRVRfSU5TVFJVQ1RJT05TX01BWF9IRUlHSFRfQVZBSUxBQkxFJztcbmNvbnN0IFNFVF9BTExPV19JTlNUUlVDVElPTlNfUkVTSVpFID1cbiAgJ2luc3RydWN0aW9ucy9TRVRfQUxMT1dfSU5TVFJVQ1RJT05TX1JFU0laRSc7XG5jb25zdCBTRVRfSEFTX0FVVEhPUkVEX0hJTlRTID0gJ2luc3RydWN0aW9ucy9TRVRfSEFTX0FVVEhPUkVEX0hJTlRTJztcbmNvbnN0IFNFVF9GRUVEQkFDSyA9ICdpbnN0cnVjdGlvbnMvU0VUX0ZFRURCQUNLJztcbmNvbnN0IEhJREVfT1ZFUkxBWSA9ICdpbnN0cnVjdGlvbnMvSElERV9PVkVSTEFZJztcbmNvbnN0IFNFVF9EWU5BTUlDX0lOU1RSVUNUSU9OU19ERUZBVUxUUyA9XG4gICdpbnN0cnVjdGlvbnMvU0VUX0RZTkFNSUNfSU5TVFJVQ1RJT05TX0RFRkFVTFRTJztcbmNvbnN0IFNFVF9EWU5BTUlDX0lOU1RSVUNUSU9OU19LRVkgPVxuICAnaW5zdHJ1Y3Rpb25zL1NFVF9EWU5BTUlDX0lOU1RSVUNUSU9OU19LRVknO1xuY29uc3QgTE9DQUxTVE9SQUdFX09WRVJMQVlfU0VFTl9GTEFHID0gJ2luc3RydWN0aW9uc092ZXJsYXlTZWVuT25jZSc7XG5jb25zdCBTRVRfRFlOQU1JQ19JTlNUUlVDVElPTlNfRElTTUlTU19DQUxMQkFDSyA9XG4gICdpbnN0cnVjdGlvbnMvU0VUX0RZTkFNSUNfSU5TVFJVQ1RJT05TX0RJU01JU1NfQ0FMTEJBQ0snO1xuY29uc3QgU0VUX1RUU19BVVRPUExBWV9FTkFCTEVEX0ZPUl9MRVZFTCA9XG4gICdpbnN0cnVjdGlvbnMvU0VUX1RUU19BVVRPUExBWV9FTkFCTEVEX0ZPUl9MRVZFTCc7XG5jb25zdCBTRVRfQ09ERV9SRVZJRVdfRU5BQkxFRF9GT1JfTEVWRUwgPVxuICAnaW5zdHJ1Y3Rpb25zL1NFVF9DT0RFX1JFVklFV19FTkFCTEVEX0ZPUl9MRVZFTCc7XG5jb25zdCBTRVRfVEFfUlVCUklDID0gJ2luc3RydWN0aW9ucy9TRVRfVEFfUlVCUklDJztcblxuLyoqXG4gKiBTb21lIHNjZW5hcmlvczpcbiAqICgxKSBQcm9qZWN0cyBsZXZlbCB3L28gaW5zdHJ1Y3Rpb25zOiBzaG9ydEluc3RydWN0aW9ucyBhbmQgbG9uZ0luc3RydWN0aW9uc1xuICogICAgIHdpbGwgYm90aCBiZSB1bmRlZmluZWRcbiAqICgyKSBDU1AgbGV2ZWw6IEp1c3QgbG9uZ0luc3RydWN0aW9uc1xuICogKDMpIENTRiBsZXZlbCB3aXRoIG9ubHkgb25lIHNldCBvZiBpbnN0cnVjdGlvbnM6IEp1c3Qgc2hvcnRJbnN0cnVjdGlvbnNcbiAqICg0KSBDU0YgbGV2ZWwgd2l0aCB0d28gc2V0cyBvZiBpbnN0cnVjdGlvbnM6IHNob3J0SW5zdHJ1Y3Rpb25zIGFuZFxuICogICAgIGxvbmdJbnN0cnVjdGlvbnMgd2lsbCBib3RoIGJlIHNldC5cbiAqICg1KSBDU0YgbGV2ZWwgd2l0aCBqdXN0IGxvbmcgaW5zdHJ1Y3Rpb25zXG4gKi9cbmNvbnN0IGluc3RydWN0aW9uc0luaXRpYWxTdGF0ZSA9IHtcbiAgbm9JbnN0cnVjdGlvbnNXaGVuQ29sbGFwc2VkOiBmYWxzZSxcbiAgc2hvcnRJbnN0cnVjdGlvbnM6IHVuZGVmaW5lZCxcbiAgc2hvcnRJbnN0cnVjdGlvbnMyOiB1bmRlZmluZWQsXG4gIGxvbmdJbnN0cnVjdGlvbnM6IHVuZGVmaW5lZCxcbiAgZHluYW1pY0luc3RydWN0aW9uczogdW5kZWZpbmVkLFxuICBkeW5hbWljSW5zdHJ1Y3Rpb25zRGVmYXVsdHM6IHVuZGVmaW5lZCxcbiAgZHluYW1pY0luc3RydWN0aW9uc0tleTogdW5kZWZpbmVkLFxuICB0ZWFjaGVyTWFya2Rvd246IHVuZGVmaW5lZCxcbiAgaGFzQ29udGFpbmVkTGV2ZWxzOiBmYWxzZSxcbiAgaXNDb2xsYXBzZWQ6IGZhbHNlLFxuICAvLyBUaGUgYW1vdW50IG9mIHZlcnRpY2FsIHNwYWNlIGNvbnN1bWVkIGJ5IHRoZSBUb3BJbnN0cnVjdGlvbnMgY29tcG9uZW50XG4gIHJlbmRlcmVkSGVpZ2h0OiAwLFxuICAvLyBUaGUgYW1vdW50IG9mIHZlcnRpY2FsIHNwYWNlIGNvbnN1bWVkIGJ5IHRoZSBUb3BJbnN0cnVjdGlvbnMgY29tcG9uZW50XG4gIC8vIHdoZW4gaXQgaXMgbm90IGNvbGxhcHNlZFxuICBleHBhbmRlZEhlaWdodDogMCxcbiAgLy8gVGhlIG1heGltdW0gYW1vdW50IG9mIHZlcnRpY2FsIHNwYWNlIG5lZWRlZCBieSB0aGUgVG9wSW5zdHJ1Y3Rpb25zIGNvbXBvbmVudC5cbiAgbWF4TmVlZGVkSGVpZ2h0OiBJbmZpbml0eSxcbiAgLy8gVGhlIG1heGltdW0gaGVpZ2h0IHdlJ2xsIGFsbG93IHRoZSByZXNpemVyIHRvIGRyYWcgdG8uIFRoaXMgaXMgYmFzZWQgaW5cbiAgLy8gcGFydCBvZmYgb2YgdGhlIHNpemUgb2YgdGhlIGNvZGUgd29ya3NwYWNlLlxuICBtYXhBdmFpbGFibGVIZWlnaHQ6IEluZmluaXR5LFxuICBhbGxvd1Jlc2l6ZTogdHJ1ZSxcbiAgaGFzQXV0aG9yZWRIaW50czogZmFsc2UsXG4gIC8vIHJlcHJlc2VudHMgaWYgdGhlIHVzZXIgaXMgaW4gYW55IHVuYXJjaGl2ZWQgc2VjdGlvbiB3aGVyZSB0dHMgYXV0b3BsYXkgaXMgZW5hYmxlZFxuICAvLyBsb2dpYyBkZWZpbmVkIGluIHNjcmlwdF9sZXZlbHNfY29udHJvbGxlciNzaG93XG4gIHR0c0F1dG9wbGF5RW5hYmxlZEZvckxldmVsOiBmYWxzZSxcbiAgY29kZVJldmlld0VuYWJsZWRGb3JMZXZlbDogZmFsc2UsXG4gIG92ZXJsYXlWaXNpYmxlOiBmYWxzZSxcbiAgbGV2ZWxWaWRlb3M6IFtdLFxuICBtYXBSZWZlcmVuY2U6IHVuZGVmaW5lZCxcbiAgcmVmZXJlbmNlTGlua3M6IFtdLFxuICBtdXRlQmFja2dyb3VuZE11c2ljOiAoKSA9PiB7fSxcbiAgdW5tdXRlQmFja2dyb3VuZE11c2ljOiAoKSA9PiB7fSxcbiAgcHJvZ3JhbW1pbmdFbnZpcm9ubWVudDogbnVsbCxcbiAgdGFSdWJyaWM6IG51bGwsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWR1Y2VyKHN0YXRlID0gey4uLmluc3RydWN0aW9uc0luaXRpYWxTdGF0ZX0sIGFjdGlvbikge1xuICBpZiAoYWN0aW9uLnR5cGUgPT09IFNFVF9DT05TVEFOVFMpIHtcbiAgICBpZiAoc3RhdGUuc2hvcnRJbnN0cnVjdGlvbnMgfHwgc3RhdGUubG9uZ0luc3RydWN0aW9ucykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnN0cnVjdGlvbnMgY29uc3RhbnRzIGFscmVhZHkgc2V0Jyk7XG4gICAgfVxuICAgIGNvbnN0IHtcbiAgICAgIG5vSW5zdHJ1Y3Rpb25zV2hlbkNvbGxhcHNlZCxcbiAgICAgIHNob3J0SW5zdHJ1Y3Rpb25zLFxuICAgICAgc2hvcnRJbnN0cnVjdGlvbnMyLFxuICAgICAgbG9uZ0luc3RydWN0aW9ucyxcbiAgICAgIGR5bmFtaWNJbnN0cnVjdGlvbnMsXG4gICAgICBoYXNDb250YWluZWRMZXZlbHMsXG4gICAgICBvdmVybGF5VmlzaWJsZSxcbiAgICAgIHRlYWNoZXJNYXJrZG93bixcbiAgICAgIGxldmVsVmlkZW9zLFxuICAgICAgbWFwUmVmZXJlbmNlLFxuICAgICAgcmVmZXJlbmNlTGlua3MsXG4gICAgICBtdXRlQmFja2dyb3VuZE11c2ljLFxuICAgICAgdW5tdXRlQmFja2dyb3VuZE11c2ljLFxuICAgICAgcHJvZ3JhbW1pbmdFbnZpcm9ubWVudCxcbiAgICB9ID0gYWN0aW9uO1xuICAgIGxldCBpc0NvbGxhcHNlZCA9IHN0YXRlLmlzQ29sbGFwc2VkO1xuICAgIGlmICghbG9uZ0luc3RydWN0aW9ucyAmJiAhaGFzQ29udGFpbmVkTGV2ZWxzKSB7XG4gICAgICAvLyBJZiB3ZSBvbmx5IGhhdmUgc2hvcnQgaW5zdHJ1Y3Rpb25zLCB3ZSB3YW50IHRvIGJlIGluIGNvbGxhcHNlZCBtb2RlXG4gICAgICBpc0NvbGxhcHNlZCA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgICAgbm9JbnN0cnVjdGlvbnNXaGVuQ29sbGFwc2VkLFxuICAgICAgc2hvcnRJbnN0cnVjdGlvbnMsXG4gICAgICBzaG9ydEluc3RydWN0aW9uczIsXG4gICAgICBsb25nSW5zdHJ1Y3Rpb25zLFxuICAgICAgZHluYW1pY0luc3RydWN0aW9ucyxcbiAgICAgIHRlYWNoZXJNYXJrZG93bixcbiAgICAgIGhhc0NvbnRhaW5lZExldmVscyxcbiAgICAgIG92ZXJsYXlWaXNpYmxlLFxuICAgICAgaXNDb2xsYXBzZWQsXG4gICAgICBsZXZlbFZpZGVvcyxcbiAgICAgIG1hcFJlZmVyZW5jZSxcbiAgICAgIHJlZmVyZW5jZUxpbmtzLFxuICAgICAgbXV0ZUJhY2tncm91bmRNdXNpYyxcbiAgICAgIHVubXV0ZUJhY2tncm91bmRNdXNpYyxcbiAgICAgIHByb2dyYW1taW5nRW52aXJvbm1lbnQsXG4gICAgfSk7XG4gIH1cblxuICBpZiAoYWN0aW9uLnR5cGUgPT09IFRPR0dMRV9JTlNUUlVDVElPTlNfQ09MTEFQU0VEKSB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gICAgICBpc0NvbGxhcHNlZDogIXN0YXRlLmlzQ29sbGFwc2VkLFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKGFjdGlvbi50eXBlID09PSBTRVRfSU5TVFJVQ1RJT05TX1JFTkRFUkVEX0hFSUdIVCAmJiBzdGF0ZS5hbGxvd1Jlc2l6ZSkge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgICAgcmVuZGVyZWRIZWlnaHQ6IGFjdGlvbi5oZWlnaHQsXG4gICAgICBleHBhbmRlZEhlaWdodDogIXN0YXRlLmlzQ29sbGFwc2VkID8gYWN0aW9uLmhlaWdodCA6IHN0YXRlLmV4cGFuZGVkSGVpZ2h0LFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKGFjdGlvbi50eXBlID09PSBTRVRfSU5TVFJVQ1RJT05TX01BWF9IRUlHSFRfTkVFREVEICYmIHN0YXRlLmFsbG93UmVzaXplKSB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gICAgICBtYXhOZWVkZWRIZWlnaHQ6IGFjdGlvbi5tYXhOZWVkZWRIZWlnaHQsXG4gICAgfSk7XG4gIH1cblxuICBpZiAoXG4gICAgYWN0aW9uLnR5cGUgPT09IFNFVF9JTlNUUlVDVElPTlNfTUFYX0hFSUdIVF9BVkFJTEFCTEUgJiZcbiAgICBhY3Rpb24ubWF4QXZhaWxhYmxlSGVpZ2h0ICE9PSBzdGF0ZS5tYXhBdmFpbGFibGVIZWlnaHQgJiZcbiAgICBzdGF0ZS5hbGxvd1Jlc2l6ZVxuICApIHtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICAgIG1heEF2YWlsYWJsZUhlaWdodDogYWN0aW9uLm1heEF2YWlsYWJsZUhlaWdodCxcbiAgICAgIHJlbmRlcmVkSGVpZ2h0OiBNYXRoLm1pbihhY3Rpb24ubWF4QXZhaWxhYmxlSGVpZ2h0LCBzdGF0ZS5yZW5kZXJlZEhlaWdodCksXG4gICAgICBleHBhbmRlZEhlaWdodDogTWF0aC5taW4oYWN0aW9uLm1heEF2YWlsYWJsZUhlaWdodCwgc3RhdGUuZXhwYW5kZWRIZWlnaHQpLFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKGFjdGlvbi50eXBlID09PSBTRVRfQUxMT1dfSU5TVFJVQ1RJT05TX1JFU0laRSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGFsbG93UmVzaXplOiBhY3Rpb24uYWxsb3dSZXNpemUsXG4gICAgfTtcbiAgfVxuXG4gIGlmIChhY3Rpb24udHlwZSA9PT0gU0VUX0hBU19BVVRIT1JFRF9ISU5UUykge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgICAgaGFzQXV0aG9yZWRIaW50czogYWN0aW9uLmhhc0F1dGhvcmVkSGludHMsXG4gICAgfSk7XG4gIH1cblxuICBpZiAoYWN0aW9uLnR5cGUgPT09IFNFVF9UVFNfQVVUT1BMQVlfRU5BQkxFRF9GT1JfTEVWRUwpIHtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICAgIHR0c0F1dG9wbGF5RW5hYmxlZEZvckxldmVsOiBhY3Rpb24udHRzQXV0b3BsYXlFbmFibGVkRm9yTGV2ZWwsXG4gICAgfSk7XG4gIH1cblxuICBpZiAoYWN0aW9uLnR5cGUgPT09IFNFVF9DT0RFX1JFVklFV19FTkFCTEVEX0ZPUl9MRVZFTCkge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgICAgY29kZVJldmlld0VuYWJsZWRGb3JMZXZlbDogYWN0aW9uLmNvZGVSZXZpZXdFbmFibGVkRm9yTGV2ZWwsXG4gICAgfSk7XG4gIH1cblxuICBpZiAoYWN0aW9uLnR5cGUgPT09IFNFVF9GRUVEQkFDSykge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgICAgZmVlZGJhY2s6IGFjdGlvbi5mZWVkYmFjayxcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChhY3Rpb24udHlwZSA9PT0gSElERV9PVkVSTEFZKSB7XG4gICAgaWYgKHN0YXRlLmR5bmFtaWNJbnN0cnVjdGlvbnNEaXNtaXNzQ2FsbGJhY2spIHtcbiAgICAgIHN0YXRlLmR5bmFtaWNJbnN0cnVjdGlvbnNEaXNtaXNzQ2FsbGJhY2soKTtcbiAgICB9XG5cbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICAgIG92ZXJsYXlWaXNpYmxlOiBmYWxzZSxcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChhY3Rpb24udHlwZSA9PT0gU0VUX0RZTkFNSUNfSU5TVFJVQ1RJT05TX0RFRkFVTFRTKSB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gICAgICBkeW5hbWljSW5zdHJ1Y3Rpb25zRGVmYXVsdHM6IGFjdGlvbi5keW5hbWljSW5zdHJ1Y3Rpb25zRGVmYXVsdHMsXG4gICAgfSk7XG4gIH1cblxuICBpZiAoYWN0aW9uLnR5cGUgPT09IFNFVF9EWU5BTUlDX0lOU1RSVUNUSU9OU19LRVkpIHtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICAgIGR5bmFtaWNJbnN0cnVjdGlvbnNLZXk6IGFjdGlvbi5keW5hbWljSW5zdHJ1Y3Rpb25zS2V5LFxuICAgICAgb3ZlcmxheVZpc2libGU6IGFjdGlvbi5vcHRpb25zICYmIGFjdGlvbi5vcHRpb25zLnNob3dPdmVybGF5LFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKGFjdGlvbi50eXBlID09PSBTRVRfRFlOQU1JQ19JTlNUUlVDVElPTlNfRElTTUlTU19DQUxMQkFDSykge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgICAgZHluYW1pY0luc3RydWN0aW9uc0Rpc21pc3NDYWxsYmFjazpcbiAgICAgICAgYWN0aW9uLmR5bmFtaWNJbnN0cnVjdGlvbnNEaXNtaXNzQ2FsbGJhY2ssXG4gICAgfSk7XG4gIH1cblxuICBpZiAoYWN0aW9uLnR5cGUgPT09IFNFVF9UQV9SVUJSSUMpIHtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICAgIHRhUnVicmljOiBhY3Rpb24udGFSdWJyaWMsXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59XG5cbmV4cG9ydCBjb25zdCBzZXRJbnN0cnVjdGlvbnNDb25zdGFudHMgPSAoe1xuICBub0luc3RydWN0aW9uc1doZW5Db2xsYXBzZWQsXG4gIHNob3J0SW5zdHJ1Y3Rpb25zLFxuICBzaG9ydEluc3RydWN0aW9uczIsXG4gIGxvbmdJbnN0cnVjdGlvbnMsXG4gIGR5bmFtaWNJbnN0cnVjdGlvbnMsXG4gIGhhc0NvbnRhaW5lZExldmVscyxcbiAgb3ZlcmxheVZpc2libGUsXG4gIHRlYWNoZXJNYXJrZG93bixcbiAgbGV2ZWxWaWRlb3MsXG4gIG1hcFJlZmVyZW5jZSxcbiAgcmVmZXJlbmNlTGlua3MsXG4gIG11dGVCYWNrZ3JvdW5kTXVzaWMsXG4gIHVubXV0ZUJhY2tncm91bmRNdXNpYyxcbiAgcHJvZ3JhbW1pbmdFbnZpcm9ubWVudCxcbn0pID0+ICh7XG4gIHR5cGU6IFNFVF9DT05TVEFOVFMsXG4gIG5vSW5zdHJ1Y3Rpb25zV2hlbkNvbGxhcHNlZCxcbiAgc2hvcnRJbnN0cnVjdGlvbnMsXG4gIHNob3J0SW5zdHJ1Y3Rpb25zMixcbiAgbG9uZ0luc3RydWN0aW9ucyxcbiAgZHluYW1pY0luc3RydWN0aW9ucyxcbiAgaGFzQ29udGFpbmVkTGV2ZWxzLFxuICBvdmVybGF5VmlzaWJsZSxcbiAgdGVhY2hlck1hcmtkb3duLFxuICBsZXZlbFZpZGVvcyxcbiAgbWFwUmVmZXJlbmNlLFxuICByZWZlcmVuY2VMaW5rcyxcbiAgbXV0ZUJhY2tncm91bmRNdXNpYyxcbiAgdW5tdXRlQmFja2dyb3VuZE11c2ljLFxuICBwcm9ncmFtbWluZ0Vudmlyb25tZW50LFxufSk7XG5cbmV4cG9ydCBjb25zdCBzZXRJbnN0cnVjdGlvbnNSZW5kZXJlZEhlaWdodCA9IGhlaWdodCA9PiAoe1xuICB0eXBlOiBTRVRfSU5TVFJVQ1RJT05TX1JFTkRFUkVEX0hFSUdIVCxcbiAgaGVpZ2h0LFxufSk7XG5cbi8qKlxuICogVG9nZ2xlcyB3aGV0aGVyIGluc3RydWN0aW9ucyBhcmUgY3VycmVudGx5IGNvbGxhcHNlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUluc3RydWN0aW9uc0NvbGxhcHNlZCA9ICgpID0+ICh7XG4gIHR5cGU6IFRPR0dMRV9JTlNUUlVDVElPTlNfQ09MTEFQU0VELFxufSk7XG5cbi8qKlxuICogU2V0cyB0aGUgbWF4aW11bSBhbW91bnQgb2YgaGVpZ2h0IG5lZWQgYnkgb3VyIGluc3RydWN0aW9ucyBjb21wb25lbnQgaWYgaXRcbiAqIHdlcmUgdG8gcmVuZGVyIGl0c2VsZiB3aXRoIG5vIHNjcm9sbGJhcnNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEluc3RydWN0aW9uc01heEhlaWdodE5lZWRlZCA9IGhlaWdodCA9PiAoe1xuICB0eXBlOiBTRVRfSU5TVFJVQ1RJT05TX01BWF9IRUlHSFRfTkVFREVELFxuICBtYXhOZWVkZWRIZWlnaHQ6IGhlaWdodCxcbn0pO1xuXG4vKipcbiAqIFNldCB0aGUgbWF4IGhlaWdodCBvZiB0aGUgaW5zdHJ1Y3Rpb25zIHBhbmVsXG4gKiBAcGFyYW0ge251bWJlcn0gbWF4QXZhaWxhYmxlSGVpZ2h0IC0gRG9uJ3QgbGV0IHVzZXIgZHJhZyBpbnN0cnVjdGlvbnMgcGFuZSB0byBiZVxuICogICBsYXJnZXIgdGhhbiB0aGlzIG51bWJlci5cbiAqL1xuZXhwb3J0IGNvbnN0IHNldEluc3RydWN0aW9uc01heEhlaWdodEF2YWlsYWJsZSA9IGhlaWdodCA9PiAoe1xuICB0eXBlOiBTRVRfSU5TVFJVQ1RJT05TX01BWF9IRUlHSFRfQVZBSUxBQkxFLFxuICBtYXhBdmFpbGFibGVIZWlnaHQ6IGhlaWdodCxcbn0pO1xuXG5leHBvcnQgY29uc3Qgc2V0QWxsb3dJbnN0cnVjdGlvbnNSZXNpemUgPSBhbGxvd1Jlc2l6ZSA9PiAoe1xuICB0eXBlOiBTRVRfQUxMT1dfSU5TVFJVQ1RJT05TX1JFU0laRSxcbiAgYWxsb3dSZXNpemUsXG59KTtcblxuZXhwb3J0IGNvbnN0IHNldEhhc0F1dGhvcmVkSGludHMgPSBoYXNBdXRob3JlZEhpbnRzID0+ICh7XG4gIHR5cGU6IFNFVF9IQVNfQVVUSE9SRURfSElOVFMsXG4gIGhhc0F1dGhvcmVkSGludHMsXG59KTtcblxuZXhwb3J0IGNvbnN0IHNldFR0c0F1dG9wbGF5RW5hYmxlZEZvckxldmVsID0gdHRzQXV0b3BsYXlFbmFibGVkRm9yTGV2ZWwgPT4gKHtcbiAgdHlwZTogU0VUX1RUU19BVVRPUExBWV9FTkFCTEVEX0ZPUl9MRVZFTCxcbiAgdHRzQXV0b3BsYXlFbmFibGVkRm9yTGV2ZWwsXG59KTtcblxuZXhwb3J0IGNvbnN0IHNldENvZGVSZXZpZXdFbmFibGVkRm9yTGV2ZWwgPSBjb2RlUmV2aWV3RW5hYmxlZEZvckxldmVsID0+ICh7XG4gIHR5cGU6IFNFVF9DT0RFX1JFVklFV19FTkFCTEVEX0ZPUl9MRVZFTCxcbiAgY29kZVJldmlld0VuYWJsZWRGb3JMZXZlbCxcbn0pO1xuXG5leHBvcnQgY29uc3Qgc2V0RmVlZGJhY2sgPSBmZWVkYmFjayA9PiAoe1xuICB0eXBlOiBTRVRfRkVFREJBQ0ssXG4gIGZlZWRiYWNrLFxufSk7XG5cbmV4cG9ydCBjb25zdCBoaWRlT3ZlcmxheSA9ICgpID0+ICh7XG4gIHR5cGU6IEhJREVfT1ZFUkxBWSxcbn0pO1xuXG5leHBvcnQgY29uc3Qgc2V0RHluYW1pY0luc3RydWN0aW9uc0RlZmF1bHRzID0gZHluYW1pY0luc3RydWN0aW9uc0RlZmF1bHRzID0+ICh7XG4gIHR5cGU6IFNFVF9EWU5BTUlDX0lOU1RSVUNUSU9OU19ERUZBVUxUUyxcbiAgZHluYW1pY0luc3RydWN0aW9uc0RlZmF1bHRzLFxufSk7XG5cbmV4cG9ydCBjb25zdCBzZXREeW5hbWljSW5zdHJ1Y3Rpb25zS2V5ID0gKGR5bmFtaWNJbnN0cnVjdGlvbnNLZXksIG9wdGlvbnMpID0+ICh7XG4gIHR5cGU6IFNFVF9EWU5BTUlDX0lOU1RSVUNUSU9OU19LRVksXG4gIGR5bmFtaWNJbnN0cnVjdGlvbnNLZXksXG4gIG9wdGlvbnMsXG59KTtcblxuZXhwb3J0IGNvbnN0IHNldER5bmFtaWNJbnN0cnVjdGlvbnNPdmVybGF5RGlzbWlzc0NhbGxiYWNrID1cbiAgZHluYW1pY0luc3RydWN0aW9uc0Rpc21pc3NDYWxsYmFjayA9PiAoe1xuICAgIHR5cGU6IFNFVF9EWU5BTUlDX0lOU1RSVUNUSU9OU19ESVNNSVNTX0NBTExCQUNLLFxuICAgIGR5bmFtaWNJbnN0cnVjdGlvbnNEaXNtaXNzQ2FsbGJhY2ssXG4gIH0pO1xuXG5leHBvcnQgY29uc3Qgc2V0VGFSdWJyaWMgPSB0YVJ1YnJpYyA9PiAoe1xuICB0eXBlOiBTRVRfVEFfUlVCUklDLFxuICB0YVJ1YnJpYyxcbn0pO1xuXG4vLyBIRUxQRVJTXG5cbi8qKlxuICogR2l2ZW4gaW5zdHJ1Y3Rpb25zIHRoYXQgbG9vayBzb21ldGhpbmcgbGlrZVxuICogICAnW3B1ZmZlcnBpZ10gPGI+UHVmZmVyIFBpZ3M8L2I+IHJvYW0gYXJvdW5kIHNsb3dseTxici8+J1xuICogUmVwbGFjZXMgW3B1ZmZlcnBpZ10gd2l0aCB0aGUgYXBwcm9wcmlhdGUgaW1hZ2UgaHRtbC5cbiAqIEluIG1vc3QgY2FzZXMsIG5vIHN1YnN0aXR1dGlvbnMgd2lsbCBiZSBuZWNlc3NhcnkgYW5kIHRoaXMgbWV0aG9kIHdpbGwganVzdFxuICogcmV0dXJuIHRoZSBwYXNzZWQgaW4gaHRtbFRleHQuIFN1YnN0aXR1dGlvbnMgY3VycmVudGx5IG9ubHkgZXhpc3QgZm9yIHN0YXIgd2Fycy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBodG1sVGV4dFxuICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywgc3RyaW5nPn0gW3N1YnN0aXR1dGlvbnNdIERpY3Rpb25hcnkgc3RyaW5ncyAoa2V5cykgdG9cbiAqICAgcmVwbGFjZW1lbnQgdmFsdWVzLlxuICovXG5leHBvcnQgY29uc3Qgc3Vic3RpdHV0ZUluc3RydWN0aW9uSW1hZ2VzID0gKGh0bWxUZXh0LCBzdWJzdGl0dXRpb25zKSA9PiB7XG4gIGlmICghaHRtbFRleHQpIHtcbiAgICByZXR1cm4gaHRtbFRleHQ7XG4gIH1cblxuICBmb3IgKGxldCBwcm9wIGluIHN1YnN0aXR1dGlvbnMpIHtcbiAgICBjb25zdCBpbWFnZVVybCA9IHN1YnN0aXR1dGlvbnNbcHJvcF07XG4gICAgY29uc3Qgc3Vic3RpdHV0aW9uSHRtbCA9XG4gICAgICAnPHNwYW4gY2xhc3M9XCJpbnN0cnVjdGlvbnNJbWFnZUNvbnRhaW5lclwiPicgK1xuICAgICAgYDxpbWcgc3JjPVwiJHtpbWFnZVVybH1cIiBjbGFzcz1cImluc3RydWN0aW9uc0ltYWdlXCIvPmAgK1xuICAgICAgJzwvc3Bhbj4nO1xuICAgIGNvbnN0IHJlID0gbmV3IFJlZ0V4cCgnXFxcXFsnICsgcHJvcCArICdcXFxcXScsICdnJyk7XG4gICAgaHRtbFRleHQgPSBodG1sVGV4dC5yZXBsYWNlKHJlLCBzdWJzdGl0dXRpb25IdG1sKTtcbiAgfVxuXG4gIHJldHVybiBodG1sVGV4dDtcbn07XG5cbi8qKlxuICogR2l2ZW4gYSBwYXJ0aWN1bGFyIHNldCBvZiBjb25maWcgb3B0aW9ucywgZGV0ZXJtaW5lcyB3aGF0IG91ciBpbnN0cnVjdGlvbnNcbiAqIGNvbnN0YW50cyBzaG91bGQgYmVcbiAqIEBwYXJhbSB7QXBwT3B0aW9uc0NvbmZpZ30gY29uZmlnXG4gKiBAcGFyYW0ge3N0cmluZ30gY29uZmlnLmxldmVsLnNob3J0SW5zdHJ1Y3Rpb25zXG4gKiBAcGFyYW0ge3N0cmluZ30gY29uZmlnLmxldmVsLmluc3RydWN0aW9uczJcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb25maWcubGV2ZWwubG9uZ0luc3RydWN0aW9uc1xuICogQHBhcmFtIHtzdHJpbmd9IGNvbmZpZy5sZXZlbC5keW5hbWljSW5zdHJ1Y3Rpb25zXG4gKiBAcGFyYW0ge2FycmF5fSBjb25maWcubGV2ZWwuaW5wdXRPdXRwdXRUYWJsZVxuICogQHBhcmFtIHthcnJheX0gY29uZmlnLmxldmVsLmxldmVsVmlkZW9zXG4gKiBAcGFyYW0ge3N0aXJuZ30gY29uZmlnLmxldmVsLm1hcFJlZmVyZW5jZSxcbiAqIEBwYXJhbSB7YXJyYXl9IGNvbmZpZy5sZXZlbC5yZWZlcmVuY2VMaW5rcyxcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb25maWcubG9jYWxlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGNvbmZpZy5ub0luc3RydWN0aW9uc1doZW5Db2xsYXBzZWRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gY29uZmlnLmhhc0NvbnRhaW5lZExldmVsc1xuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZy5za2luLmluc3RydWN0aW9uczJJbWFnZVN1YnN0aXR1dGlvbnNcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb25maWcubGV2ZWwucHJvZ3JhbW1pbmdFbnZpcm9ubWVudFxuICogQHJldHVybnMge09iamVjdH1cbiAqL1xuZXhwb3J0IGNvbnN0IGRldGVybWluZUluc3RydWN0aW9uc0NvbnN0YW50cyA9IGNvbmZpZyA9PiB7XG4gIGNvbnN0IHtcbiAgICBsZXZlbCxcbiAgICBub0luc3RydWN0aW9uc1doZW5Db2xsYXBzZWQsXG4gICAgaGFzQ29udGFpbmVkTGV2ZWxzLFxuICAgIHRlYWNoZXJNYXJrZG93bixcbiAgICBtdXRlQmFja2dyb3VuZE11c2ljLFxuICAgIHVubXV0ZUJhY2tncm91bmRNdXNpYyxcbiAgfSA9IGNvbmZpZztcblxuICBjb25zdCB7XG4gICAgaW5zdHJ1Y3Rpb25zMixcbiAgICBpbnB1dE91dHB1dFRhYmxlLFxuICAgIGxldmVsVmlkZW9zLFxuICAgIG1hcFJlZmVyZW5jZSxcbiAgICByZWZlcmVuY2VMaW5rcyxcbiAgICBwcm9ncmFtbWluZ0Vudmlyb25tZW50LFxuICB9ID0gbGV2ZWw7XG5cbiAgbGV0IHtsb25nSW5zdHJ1Y3Rpb25zLCBzaG9ydEluc3RydWN0aW9ucywgZHluYW1pY0luc3RydWN0aW9uc30gPSBsZXZlbDtcblxuICBsZXQgc2hvcnRJbnN0cnVjdGlvbnMyO1xuXG4gIGlmIChub0luc3RydWN0aW9uc1doZW5Db2xsYXBzZWQpIHtcbiAgICAvLyBDU1AgbW9kZSAtIFdlIGRvbnQgY2FyZSBhYm91dCBsb2NhbGUsIGFuZCBhbHdheXMgd2FudCB0byBzaG93IEVuZ2xpc2hcblxuICAgIC8vIE5ldmVyIHVzZSBzaG9ydCBpbnN0cnVjdGlvbnMgaW4gQ1NQLiBJZiB0aGF0J3MgYWxsIHdlIGhhdmUsIG1ha2UgdGhlbVxuICAgIC8vIG91ciBsb25nSW5zdHJ1Y3Rpb25zIGluc3RlYWRcbiAgICBpZiAoc2hvcnRJbnN0cnVjdGlvbnMgJiYgIWxvbmdJbnN0cnVjdGlvbnMpIHtcbiAgICAgIGxvbmdJbnN0cnVjdGlvbnMgPSBzaG9ydEluc3RydWN0aW9ucztcbiAgICB9XG4gICAgc2hvcnRJbnN0cnVjdGlvbnMgPSB1bmRlZmluZWQ7XG4gIH0gZWxzZSB7XG4gICAgc2hvcnRJbnN0cnVjdGlvbnMyID0gaW5zdHJ1Y3Rpb25zMjtcblxuICAgIC8vIGlmIHRoZSB0d28gc2V0cyBvZiBpbnN0cnVjdGlvbnMgYXJlIGlkZW50aWNhbCwgb25seSB1c2UgdGhlIHNob3J0XG4gICAgLy8gdmVyc2lvbiAoc3VjaCB0aGF0IHdlIGRvbnQgZW5kIHVwIG1pbmltaXppbmcvZXhwYW5kaW5nIGJldHdlZW5cbiAgICAvLyB0d28gaWRlbnRpY2FsIHNldHMpLlxuICAgIGlmIChzaG9ydEluc3RydWN0aW9ucyA9PT0gbG9uZ0luc3RydWN0aW9ucykge1xuICAgICAgbG9uZ0luc3RydWN0aW9ucyA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyBJbiB0aGUgY2FzZSB3aGVyZSB3ZSBoYXZlIGFuIGlucHV0IG91dHB1dCB0YWJsZSwgd2Ugd2FudCB0byBlbnN1cmUgd2VcbiAgICAvLyBoYXZlIGxvbmcgaW5zdHJ1Y3Rpb25zIChldmVuIGlmIGlkZW50aWNhbCB0byBzaG9ydCBpbnN0cnVjdGlvbnMpIHNpbmNlXG4gICAgLy8gd2Ugb25seSBzaG93IHRoZSBpbnB1dE91dHB1dFRhYmxlIGluIG5vbi1jb2xsYXBzZWQgbW9kZS5cbiAgICBpZiAoaW5wdXRPdXRwdXRUYWJsZSkge1xuICAgICAgbG9uZ0luc3RydWN0aW9ucyA9IGxvbmdJbnN0cnVjdGlvbnMgfHwgc2hvcnRJbnN0cnVjdGlvbnM7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZy5za2luLmluc3RydWN0aW9uczJJbWFnZVN1YnN0aXR1dGlvbnMpIHtcbiAgICAgIGxvbmdJbnN0cnVjdGlvbnMgPSBzdWJzdGl0dXRlSW5zdHJ1Y3Rpb25JbWFnZXMoXG4gICAgICAgIGxvbmdJbnN0cnVjdGlvbnMsXG4gICAgICAgIGNvbmZpZy5za2luLmluc3RydWN0aW9uczJJbWFnZVN1YnN0aXR1dGlvbnNcbiAgICAgICk7XG4gICAgICBzaG9ydEluc3RydWN0aW9ucyA9IHN1YnN0aXR1dGVJbnN0cnVjdGlvbkltYWdlcyhcbiAgICAgICAgc2hvcnRJbnN0cnVjdGlvbnMsXG4gICAgICAgIGNvbmZpZy5za2luLmluc3RydWN0aW9uczJJbWFnZVN1YnN0aXR1dGlvbnNcbiAgICAgICk7XG4gICAgICBzaG9ydEluc3RydWN0aW9uczIgPSBzdWJzdGl0dXRlSW5zdHJ1Y3Rpb25JbWFnZXMoXG4gICAgICAgIHNob3J0SW5zdHJ1Y3Rpb25zMixcbiAgICAgICAgY29uZmlnLnNraW4uaW5zdHJ1Y3Rpb25zMkltYWdlU3Vic3RpdHV0aW9uc1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLnNraW4ucmVwbGFjZUluc3RydWN0aW9ucykge1xuICAgICAgbG9uZ0luc3RydWN0aW9ucyA9IGNvbmZpZy5za2luLnJlcGxhY2VJbnN0cnVjdGlvbnMobG9uZ0luc3RydWN0aW9ucyk7XG4gICAgICBzaG9ydEluc3RydWN0aW9ucyA9IGNvbmZpZy5za2luLnJlcGxhY2VJbnN0cnVjdGlvbnMoc2hvcnRJbnN0cnVjdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIC8vIElmIHRoZSBsZXZlbCBoYXMgaW5zdHJ1Y3Rpb25zIHRvIHNob3csIHdlIHdpbGwgaW4gc29tZSBzaXR1YXRpb25zXG4gIC8vIHdhbnQgdG8gc2hvdyBhbiBvdmVybGF5LlxuICBsZXQgaGFzSW5zdHJ1Y3Rpb25zVG9TaG93ID0gc2hvcnRJbnN0cnVjdGlvbnMgfHwgbG9uZ0luc3RydWN0aW9ucztcbiAgLy8gSWYgdGhlIGxldmVsIGlzIHNwZWNpZmljYWxseSBmbGFnZ2VkIGFzIGhhdmluZyBpbXBvcnRhbnRcbiAgLy8gaW5zdHJ1Y3Rpb25zIG9yIGlmIGl0IGlzIHRoZSBmaXJzdCBsZXZlbCBpbiB0aGUgbGVzc29uLCBhbHdheXMgc2hvd1xuICAvLyB0aGUgb3ZlcmxheS4gT3RoZXJ3aXNlLCBzaG93IGl0IGV4YWN0bHkgb25jZSBvbiB0aGUgdmVyeSBmaXJzdFxuICAvLyBsZXZlbCBhIHVzZXIgbG9va3MgYXQuXG4gIGxldCBvdmVybGF5U2VlbiA9IHRyeUdldExvY2FsU3RvcmFnZShMT0NBTFNUT1JBR0VfT1ZFUkxBWV9TRUVOX0ZMQUcsIGZhbHNlKTtcbiAgbGV0IHNob3VsZFNob3dPdmVybGF5ID1cbiAgICBoYXNJbnN0cnVjdGlvbnNUb1Nob3cgJiZcbiAgICAhaGFzQ29udGFpbmVkTGV2ZWxzICYmXG4gICAgKGNvbmZpZy5sZXZlbC5pbnN0cnVjdGlvbnNJbXBvcnRhbnQgfHxcbiAgICAgIGNvbmZpZy5sZXZlbFBvc2l0aW9uID09PSAxIHx8XG4gICAgICAhb3ZlcmxheVNlZW4pO1xuICBpZiAoc2hvdWxkU2hvd092ZXJsYXkpIHtcbiAgICB0cnlTZXRMb2NhbFN0b3JhZ2UoTE9DQUxTVE9SQUdFX09WRVJMQVlfU0VFTl9GTEFHLCB0cnVlKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbm9JbnN0cnVjdGlvbnNXaGVuQ29sbGFwc2VkOiAhIW5vSW5zdHJ1Y3Rpb25zV2hlbkNvbGxhcHNlZCxcbiAgICBvdmVybGF5VmlzaWJsZTogISFzaG91bGRTaG93T3ZlcmxheSxcbiAgICBzaG9ydEluc3RydWN0aW9ucyxcbiAgICBzaG9ydEluc3RydWN0aW9uczIsXG4gICAgbG9uZ0luc3RydWN0aW9ucyxcbiAgICBkeW5hbWljSW5zdHJ1Y3Rpb25zLFxuICAgIHRlYWNoZXJNYXJrZG93bixcbiAgICBoYXNDb250YWluZWRMZXZlbHMsXG4gICAgbGV2ZWxWaWRlb3MsXG4gICAgbWFwUmVmZXJlbmNlLFxuICAgIHJlZmVyZW5jZUxpbmtzLFxuICAgIG11dGVCYWNrZ3JvdW5kTXVzaWMsXG4gICAgdW5tdXRlQmFja2dyb3VuZE11c2ljLFxuICAgIHByb2dyYW1taW5nRW52aXJvbm1lbnQsXG4gIH07XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RHluYW1pY0luc3RydWN0aW9ucyhzdGF0ZSkge1xuICBpZiAoIXN0YXRlLmR5bmFtaWNJbnN0cnVjdGlvbnNEZWZhdWx0cyAmJiAhc3RhdGUuZHluYW1pY0luc3RydWN0aW9ucykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLmR5bmFtaWNJbnN0cnVjdGlvbnNEZWZhdWx0cyxcbiAgICAuLi4oc3RhdGUuZHluYW1pY0luc3RydWN0aW9ucyAmJiBKU09OLnBhcnNlKHN0YXRlLmR5bmFtaWNJbnN0cnVjdGlvbnMpKSxcbiAgfTtcbn1cbiIsImNvbnN0IE9QRU5fRElBTE9HID0gJ2luc3RydWN0aW9uc0RpYWxvZy9PUEVOX0RJQUxPRyc7XG5jb25zdCBDTE9TRV9ESUFMT0cgPSAnaW5zdHJ1Y3Rpb25zRGlhbG9nL0NMT1NFX0RJQUxPRyc7XG5cbmNvbnN0IGluaXRpYWxTdGF0ZSA9IHtcbiAgb3BlbjogZmFsc2UsXG4gIGltZ09ubHk6IGZhbHNlLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVkdWNlcihzdGF0ZSA9IGluaXRpYWxTdGF0ZSwgYWN0aW9uKSB7XG4gIGlmIChhY3Rpb24udHlwZSA9PT0gT1BFTl9ESUFMT0cpIHtcbiAgICBpZiAoc3RhdGUub3BlbiA9PT0gdHJ1ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdkaWFsb2cgaXMgYWxyZWFkeSBvcGVuJyk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBvcGVuOiB0cnVlLFxuICAgICAgaW1nT25seTogYWN0aW9uLmltZ09ubHksXG4gICAgICBpbWdVcmw6IGFjdGlvbi5pbWdVcmwsXG4gICAgfTtcbiAgfVxuXG4gIGlmIChhY3Rpb24udHlwZSA9PT0gQ0xPU0VfRElBTE9HKSB7XG4gICAgaWYgKHN0YXRlLm9wZW4gPT09IGZhbHNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2RpYWxvZyBpcyBhbHJlYWR5IGNsb3NlZCcpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgb3BlbjogZmFsc2UsXG4gICAgfTtcbiAgfVxuICByZXR1cm4gc3RhdGU7XG59XG5cbmV4cG9ydCBjb25zdCBvcGVuRGlhbG9nID0gKHtpbWdPbmx5LCBpbWdVcmx9KSA9PiAoe1xuICB0eXBlOiBPUEVOX0RJQUxPRyxcbiAgaW1nT25seSxcbiAgaW1nVXJsLFxufSk7XG5cbmV4cG9ydCBjb25zdCBjbG9zZURpYWxvZyA9ICgpID0+ICh7dHlwZTogQ0xPU0VfRElBTE9HfSk7XG4iLCJ2YXIgXyA9IHJlcXVpcmUoJ2xvZGFzaCcpO1xuXG52YXIgU0VUX1BBR0VfQ09OU1RBTlRTID0gJ3BhZ2VDb25zdGFudHMvU0VUX1BBR0VfQ09OU1RBTlRTJztcblxudmFyIEFMTE9XRURfS0VZUyA9IG5ldyBTZXQoW1xuICAnc2tpbklkJyxcbiAgJ3Nob3dOZXh0SGludCcsXG4gICd0dHNTaG9ydEluc3RydWN0aW9uc1VybCcsXG4gICd0dHNMb25nSW5zdHJ1Y3Rpb25zVXJsJyxcbiAgJ2Fzc2V0VXJsJyxcbiAgJ2NhbkhhdmVGZWVkYmFja1Jldmlld1N0YXRlJyxcbiAgJ2V4YW1wbGVTb2x1dGlvbnMnLFxuICAnaXNWaWV3aW5nQXNJbnN0cnVjdG9ySW5UcmFpbmluZycsXG4gICdjaGFubmVsSWQnLFxuICAnY29kZU93bmVyc05hbWUnLFxuICAnaGFzRGF0YU1vZGUnLFxuICAnaGFzRGVzaWduTW9kZScsXG4gICdpblN0YXJ0QmxvY2tzTW9kZScsXG4gICdpblRvb2xib3hCbG9ja3NNb2RlJyxcbiAgJ2lzQ2hhbGxlbmdlTGV2ZWwnLFxuICAnaXNFbWJlZFZpZXcnLFxuICAnaXNSZXNwb25zaXZlJyxcbiAgJ2lzSWZyYW1lRW1iZWQnLFxuICAnaXNSZWFkT25seVdvcmtzcGFjZScsXG4gICdpc0NvZGVSZXZpZXdpbmcnLFxuICAnaXNWaWV3aW5nT3duUHJvamVjdCcsXG4gICdoYXNCYWNrZ3JvdW5kTXVzaWMnLFxuICAnZGlzcGxheU5vdFN0YXJ0ZWRCYW5uZXInLFxuICAnZGlzcGxheU9sZFZlcnNpb25CYW5uZXInLFxuICAnaXNTaGFyZVZpZXcnLFxuICAnaXNQcm9qZWN0TGV2ZWwnLFxuICAnaXNTdWJtaXR0YWJsZScsXG4gICdpc1N1Ym1pdHRlZCcsXG4gICdub0luc3RydWN0aW9uc1doZW5Db2xsYXBzZWQnLFxuICAncHV6emxlTnVtYmVyJyxcbiAgJ2xlc3NvblRvdGFsJyxcbiAgJ3Nob3dEZWJ1Z0J1dHRvbnMnLFxuICAnc2hvd0RlYnVnQ29uc29sZScsXG4gICdzaG93RGVidWdXYXRjaCcsXG4gICdzaG93RGVidWdTbGlkZXInLFxuICAnZGVidWdDb25zb2xlRGlzYWJsZWQnLFxuICAnc2hvd01ha2VyVG9nZ2xlJyxcbiAgJ2xvY2FsZScsXG4gICdoYXNDb250YWluZWRMZXZlbHMnLFxuICAnaXNEcm9wbGV0JyxcbiAgJ2lzQmxvY2tseScsXG4gICdpc0JyYW1ibGUnLFxuICAnaXNNaW5lY3JhZnQnLFxuICAncnVuQnV0dG9uVGV4dCcsXG4gICd2aXN1YWxpemF0aW9uSGFzUGFkZGluZycsXG4gICd2aXN1YWxpemF0aW9uSW5Xb3Jrc3BhY2UnLFxuICAnaGlkZUNvb3JkaW5hdGVPdmVybGF5JyxcbiAgJ2hpZGVTb3VyY2UnLFxuICAnaGlkZVJ1bkJ1dHRvbicsXG4gICdoaWRlUmVzZXRCdXR0b24nLFxuICAncGxheXNwYWNlUGhvbmVGcmFtZScsXG4gICdub1Zpc3VhbGl6YXRpb24nLFxuICAncGluV29ya3NwYWNlVG9Cb3R0b20nLFxuICAnc21hbGxTdGF0aWNBdmF0YXInLFxuICAnZmFpbHVyZUF2YXRhcicsXG4gICdhbmlHaWZVUkwnLFxuICAnaW5wdXRPdXRwdXRUYWJsZScsXG4gICdzaG93QW5pbWF0aW9uTW9kZScsXG4gICdzdGFydEluQW5pbWF0aW9uVGFiJyxcbiAgJ2FsbEFuaW1hdGlvbnNTaW5nbGVGcmFtZScsXG4gICdub25SZXNwb25zaXZlVmlzdWFsaXphdGlvbkNvbHVtbldpZHRoJyxcbiAgJ2lzMTNQbHVzJyxcbiAgJ2lzU2lnbmVkSW4nLFxuICAnaXNFZGl0aW5nU3RhcnRTb3VyY2VzJyxcbiAgJ3VzZXJJZCcsXG4gICdpc0sxJyxcbiAgJ3RleHRUb1NwZWVjaEVuYWJsZWQnLFxuICAnZG9jdW1lbnRhdGlvblVybCcsXG4gICdhcHBUeXBlJyxcbiAgJ25leHRMZXZlbFVybCcsXG4gICdjdXJyZW50U2NyaXB0TGV2ZWxVcmwnLFxuICAnaXNQcm9qZWN0VGVtcGxhdGVMZXZlbCcsXG4gICdzaG93UHJvamVjdFRlbXBsYXRlV29ya3NwYWNlSWNvbicsXG4gICdzZXJ2ZXJMZXZlbElkJyxcbiAgJ3NlcnZlclByb2plY3RMZXZlbElkJyxcbiAgJ3NlcnZlclNjcmlwdElkJyxcbiAgJ2V4cG9ydEFwcCcsXG4gICd3aWRnZXRNb2RlJyxcbiAgJ2xpYnJhcmllc0VuYWJsZWQnLFxuICAndmFsaWRhdGlvbkVuYWJsZWQnLFxuICAnYWlFbmFibGVkJyxcbiAgJ2FpTW9kZWxJZCcsXG4gICdhaU1vZGVsTmFtZScsXG4gICdpc0N1cnJpY3VsdW1MZXZlbCcsXG4gICdyZWNhcHRjaGFTaXRlS2V5Jyxcbl0pO1xuXG5jb25zdCBpbml0aWFsU3RhdGUgPSB7XG4gIGFzc2V0VXJsKCkge30sXG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWR1Y2VyKHN0YXRlID0gaW5pdGlhbFN0YXRlLCBhY3Rpb24pIHtcbiAgaWYgKGFjdGlvbi50eXBlID09PSBTRVRfUEFHRV9DT05TVEFOVFMpIHtcbiAgICBPYmplY3Qua2V5cyhhY3Rpb24ucHJvcHMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgaWYgKCFBTExPV0VEX0tFWVMuaGFzKGtleSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBQcm9wZXJ0eSBcIiR7a2V5fVwiIG1heSBub3QgYmUgc2V0IHVzaW5nIHRoZSAke2FjdGlvbi50eXBlfSBhY3Rpb24uYFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBzdGF0ZVtrZXldICE9PSBpbml0aWFsU3RhdGVba2V5XSAmJlxuICAgICAgICBzdGF0ZVtrZXldICE9PSBhY3Rpb24ucHJvcHNba2V5XVxuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2FuJ3QgY2hhbmdlIHZhbHVlIG9mIGtleSBcIiR7a2V5fVwiLmApO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBfLmFzc2lnbih7fSwgc3RhdGUsIGFjdGlvbi5wcm9wcyk7XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59XG5cbi8qKlxuICogUHVzaCBsb3RzIG9mIHBhZ2UgY29uc3RhbnRzIGludG8gdGhlIHN0b3JlLlxuICogU2hvdWxkIGJlIGNhbGxlZCBkdXJpbmcgbGV2ZWwgaW5pdC4gRXhwZWN0YXRpb24gaXMgdGhhdCB0aGVzZSBwcm9wZXJ0aWVzXG4gKiBuZXZlciBjaGFuZ2Ugb25jZSBzZXQuXG4gKiBBbnkgcHJvcGVydGllcyBvbWl0dGVkIGZyb20gdGhlIHByb3BzIGFyZ3VtZW50IGFyZSBub3Qgc2V0IGluIHRoZSBzdGF0ZS5cbiAqXG4gKiBAcGFyYW0geyFPYmplY3R9IHByb3BzXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbcHJvcHMuYXNzZXRVcmxdIC0gSGVscGVyIGZ1bmN0aW9uIGZvciByZXRyaWV2aW5nXG4gKiAgICAgICAgYXNzZXRzIGZvciB0aGlzIHBhcnRpY3VsYXIgbGV2ZWwgdHlwZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Byb3BzLmlzRGVzaWduTW9kZUhpZGRlbl0gLSBXaGV0aGVyIHRoZSBsZXZlbCByZXN0cmljdHNcbiAqICAgICAgICB1c2Ugb2YgZGVzaWduIG1vZGUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwcm9wcy5pc0VtYmVkVmlld10gLSBXaGV0aGVyIHRoZSBsZXZlbCBpcyBiZWluZyBlbWJlZGRlZFxuICogICAgICAgIGluIGFuIGlGcmFtZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Byb3BzLmlzUmVhZE9ubHlXb3Jrc3BhY2VdIC0gV2hldGhlciB0aGUgbG9hZGVkIGxldmVsXG4gKiAgICAgICAgc2hvdWxkIHJlc3RyaWN0IGVkaXRpbmcgdGhlIHN0dWRlbnQgY29kZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Byb3BzLmlzU2hhcmVWaWV3XSAtIFdoZXRoZXIgd2UgYXJlIGRpc3BsYXlpbmcgdGhlIGxldmVsXG4gKiAgICAgICAgb24gYSBzaGFyZSBwYWdlLlxuICogLi4uXG4gKiBAcmV0dXJucyB7e3R5cGU6IHN0cmluZywgcHJvcHM6IE9iamVjdH19XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRQYWdlQ29uc3RhbnRzKHByb3BzKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogU0VUX1BBR0VfQ09OU1RBTlRTLFxuICAgIHByb3BzOiBwcm9wcyxcbiAgfTtcbn1cbiIsIi8qKlxuICogVGhpcyBkdWNrIG1vZHVsZSB0cmFja3Mgd2hldGhlciB0aGUgY3VycmVudCBhcHAncyBydW4gc3RhdGUuXG4gKi9cbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5cbmNvbnN0IFNFVF9JU19SVU5OSU5HID0gJ3J1blN0YXRlL1NFVF9JU19SVU5OSU5HJztcbmNvbnN0IFNFVF9JU19FRElUX1dISUxFX1JVTiA9ICdydW5TdGF0ZS9TRVRfSVNfRURJVF9XSElMRV9SVU4nO1xuY29uc3QgU0VUX0lTX0RFQlVHR0VSX1BBVVNFRCA9ICdydW5TdGF0ZS9TRVRfSVNfREVCVUdHRVJfUEFVU0VEJztcbmNvbnN0IFNFVF9TVEVQX1NQRUVEID0gJ3J1blN0YXRlL1NFVF9TVEVQX1NQRUVEJztcbmNvbnN0IFNFVF9BV0FJVElOR19DT05UQUlORURfUkVTUE9OU0UgPVxuICAncnVuU3RhdGUvU0VUX0FXQUlUSU5HX0NPTlRBSU5FRF9SRVNQT05TRSc7XG5jb25zdCBTRVRfSVNfREVCVUdHSU5HX1NQUklURVMgPSAncnVuU3RhdGUvU0VUX0lTX0RFQlVHR0lOR19TUFJJVEVTJztcblxuY29uc3QgaW5pdGlhbFN0YXRlID0ge1xuICBpc1J1bm5pbmc6IGZhbHNlLFxuICBpc0VkaXRXaGlsZVJ1bjogZmFsc2UsXG4gIGlzRGVidWdnZXJQYXVzZWQ6IGZhbHNlLFxuICBuZXh0U3RlcDogbnVsbCxcbiAgc3RlcFNwZWVkOiAxLFxuICBpc0RlYnVnZ2luZ1Nwcml0ZXM6IGZhbHNlLFxuICAvLyB0cnVlIHdoZW4gd2FpdGluZyBmb3IgdXNlciB0byBwcm92aWRlIGFuIGFuc3dlciB0byBhIGNvbnRhaW5lZCBsZXZlbFxuICBhd2FpdGluZ0NvbnRhaW5lZFJlc3BvbnNlOiBmYWxzZSxcbn07XG5cbi8qKlxuICogUmVkdWNlciBmb3IgcnVuU3RhdGUuIEl0IHNob3VsZCBiZSBpbXBvc3NpYmxlIHRvIGJlIGRlYnVnZ2luZyBpZiBub3QgcnVubmluZy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVkdWNlcihzdGF0ZSwgYWN0aW9uKSB7XG4gIHN0YXRlID0gc3RhdGUgfHwgaW5pdGlhbFN0YXRlO1xuXG4gIGlmIChhY3Rpb24udHlwZSA9PT0gU0VUX0lTX1JVTk5JTkcpIHtcbiAgICByZXR1cm4gXy5hc3NpZ24oe30sIHN0YXRlLCB7XG4gICAgICBpc1J1bm5pbmc6IGFjdGlvbi5pc1J1bm5pbmcsXG4gICAgICBpc0RlYnVnZ2VyUGF1c2VkOlxuICAgICAgICBhY3Rpb24uaXNSdW5uaW5nID09PSBmYWxzZSA/IGZhbHNlIDogc3RhdGUuaXNEZWJ1Z2dlclBhdXNlZCxcbiAgICAgIGlzRGVidWdnaW5nU3ByaXRlczpcbiAgICAgICAgYWN0aW9uLmlzUnVubmluZyA9PT0gZmFsc2UgPyBmYWxzZSA6IHN0YXRlLmlzRGVidWdnaW5nU3ByaXRlcyxcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChhY3Rpb24udHlwZSA9PT0gU0VUX0lTX0VESVRfV0hJTEVfUlVOKSB7XG4gICAgcmV0dXJuIF8uYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgICAgaXNFZGl0V2hpbGVSdW46IGFjdGlvbi5pc0VkaXRXaGlsZVJ1bixcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChhY3Rpb24udHlwZSA9PT0gU0VUX0lTX0RFQlVHR0VSX1BBVVNFRCkge1xuICAgIHJldHVybiBfLmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICAgIGlzUnVubmluZzogYWN0aW9uLmlzRGVidWdnZXJQYXVzZWQgPyB0cnVlIDogc3RhdGUuaXNSdW5uaW5nLFxuICAgICAgaXNEZWJ1Z2dlclBhdXNlZDogYWN0aW9uLmlzRGVidWdnZXJQYXVzZWQsXG4gICAgICBuZXh0U3RlcDogYWN0aW9uLm5leHRTdGVwLFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKGFjdGlvbi50eXBlID09PSBTRVRfU1RFUF9TUEVFRCkge1xuICAgIGlmICh0eXBlb2YgYWN0aW9uLnN0ZXBTcGVlZCA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiBfLmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICAgICAgc3RlcFNwZWVkOiBhY3Rpb24uc3RlcFNwZWVkLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGFjdGlvbi50eXBlID09PSBTRVRfQVdBSVRJTkdfQ09OVEFJTkVEX1JFU1BPTlNFKSB7XG4gICAgaWYgKHN0YXRlLmF3YWl0aW5nQ29udGFpbmVkUmVzcG9uc2UgIT09IGFjdGlvbi5hd2FpdGluZ0NvbnRhaW5lZFJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgYXdhaXRpbmdDb250YWluZWRSZXNwb25zZTogYWN0aW9uLmF3YWl0aW5nQ29udGFpbmVkUmVzcG9uc2UsXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGlmIChhY3Rpb24udHlwZSA9PT0gU0VUX0lTX0RFQlVHR0lOR19TUFJJVEVTICYmIHN0YXRlLmlzUnVubmluZykge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGlzRGVidWdnaW5nU3ByaXRlczogYWN0aW9uLmlzRGVidWdnaW5nU3ByaXRlcyxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNSdW5uaW5nIC0gV2hldGhlciB0aGUgYXBwIGlzIGN1cnJlbnRseSBydW5uaW5nIG9yIG5vdC5cbiAqL1xuZXhwb3J0IGNvbnN0IHNldElzUnVubmluZyA9IGlzUnVubmluZyA9PiAoe1xuICB0eXBlOiBTRVRfSVNfUlVOTklORyxcbiAgaXNSdW5uaW5nOiBpc1J1bm5pbmcsXG59KTtcblxuLyoqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzUnVubmluZyAtIFdoZXRoZXIgdGhlIGFwcCBpcyBjdXJyZW50bHkgcnVubmluZyBvciBub3QuXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRJc0VkaXRXaGlsZVJ1biA9IGlzRWRpdFdoaWxlUnVuID0+ICh7XG4gIHR5cGU6IFNFVF9JU19FRElUX1dISUxFX1JVTixcbiAgaXNFZGl0V2hpbGVSdW46IGlzRWRpdFdoaWxlUnVuLFxufSk7XG5cbi8qKlxuICogQHBhcmFtIHtib29sZWFufSBpc0RlYnVnZ2VyUGF1c2VkIC0gV2hldGhlciB0aGUgYXBwIGlzIGN1cnJlbnRseSBwYXVzZWQgaW4gdGhlXG4gKiAgIGRlYnVnZ2VyXG4gKiBAcGFyYW0ge0pTSW50ZXJwcmV0ZXIuU3RlcFR5cGV9IG5leHRTdGVwIC0gdGhlIG5leHQgc3RlcCBvZiB0aGUgaW50ZXJwcmV0ZXJcbiAqL1xuZXhwb3J0IGNvbnN0IHNldElzRGVidWdnZXJQYXVzZWQgPSAoaXNEZWJ1Z2dlclBhdXNlZCwgbmV4dFN0ZXApID0+ICh7XG4gIHR5cGU6IFNFVF9JU19ERUJVR0dFUl9QQVVTRUQsXG4gIGlzRGVidWdnZXJQYXVzZWQ6IGlzRGVidWdnZXJQYXVzZWQsXG4gIG5leHRTdGVwLFxufSk7XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHN0ZXBTcGVlZCAtIE5ldyBzdGVwIHNwZWVkIGZvciBzdHVkZW50IGNvZGUgZXhlY3V0aW9uLFxuICogICAgICAgIGluIHJhbmdlIDAuLjEuXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRTdGVwU3BlZWQgPSBzdGVwU3BlZWQgPT4gKHtcbiAgdHlwZTogU0VUX1NURVBfU1BFRUQsXG4gIHN0ZXBTcGVlZCxcbn0pO1xuXG5leHBvcnQgY29uc3Qgc2V0QXdhaXRpbmdDb250YWluZWRSZXNwb25zZSA9IGF3YWl0aW5nQ29udGFpbmVkUmVzcG9uc2UgPT4gKHtcbiAgdHlwZTogU0VUX0FXQUlUSU5HX0NPTlRBSU5FRF9SRVNQT05TRSxcbiAgYXdhaXRpbmdDb250YWluZWRSZXNwb25zZSxcbn0pO1xuXG4vKipcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNEZWJ1Z2dpbmdTcHJpdGVzIC0gV2hldGhlciB0aGUgYXBwIGlzIGN1cnJlbnRseSBkZWJ1Z2dpbmdcbiAqICAgICAgICBzcHJpdGVzIG9yIG5vdC5cbiAqL1xuZXhwb3J0IGNvbnN0IHNldElzRGVidWdnaW5nU3ByaXRlcyA9IGlzRGVidWdnaW5nU3ByaXRlcyA9PiAoe1xuICB0eXBlOiBTRVRfSVNfREVCVUdHSU5HX1NQUklURVMsXG4gIGlzRGVidWdnaW5nU3ByaXRlczogaXNEZWJ1Z2dpbmdTcHJpdGVzLFxufSk7XG4iLCJjb25zdCBTRVRfU1RBUlRfSURMRSA9ICdzdHVkaW9BcHBBY3Rpdml0eS9TRVRfU1RBUlRfSURMRSc7XG5jb25zdCBTRVRfRU5EX0lETEUgPSAnc3R1ZGlvQXBwQWN0aXZpdHkvU0VUX0VORF9JRExFJztcbmNvbnN0IFJFU0VUX0lETEVfVElNRSA9ICdzdHVkaW9BcHBBY3Rpdml0eS9SRVNFVF9JRExFX1RJTUUnO1xuXG5jb25zdCBzdHVkaW9BcHBBY3Rpdml0eUluaXRpYWxTdGF0ZSA9IHtcbiAgaWRsZVRpbWVTaW5jZUxhc3RSZXBvcnQ6IDAsXG4gIGlkbGVTdGFydDogbnVsbCxcbiAgaXNJZGxlOiBmYWxzZSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZHVjZXIoc3RhdGUgPSBzdHVkaW9BcHBBY3Rpdml0eUluaXRpYWxTdGF0ZSwgYWN0aW9uKSB7XG4gIGlmIChhY3Rpb24udHlwZSA9PT0gU0VUX1NUQVJUX0lETEUpIHtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICAgIGlzSWRsZTogdHJ1ZSxcbiAgICAgIGlkbGVTdGFydDogbmV3IERhdGUoKS5nZXRUaW1lKCksXG4gICAgfSk7XG4gIH1cblxuICBpZiAoYWN0aW9uLnR5cGUgPT09IFNFVF9FTkRfSURMRSkge1xuICAgIGlmIChzdGF0ZS5pZGxlU3RhcnQpIHtcbiAgICAgIGNvbnN0IG5ld0lkbGVUaW1lID1cbiAgICAgICAgc3RhdGUuaWRsZVRpbWVTaW5jZUxhc3RSZXBvcnQgKyB0aW1lU2luY2VJZGxlU3RhcnQoc3RhdGUpO1xuXG4gICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICAgICAgaXNJZGxlOiBmYWxzZSxcbiAgICAgICAgaWRsZVRpbWVTaW5jZUxhc3RSZXBvcnQ6IG5ld0lkbGVUaW1lLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gIH1cblxuICBpZiAoYWN0aW9uLnR5cGUgPT09IFJFU0VUX0lETEVfVElNRSkge1xuICAgIGNvbnN0IGlkbGVTdGFydCA9IHN0YXRlLmlzSWRsZSA/IG5ldyBEYXRlKCkuZ2V0VGltZSgpIDogbnVsbDtcblxuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgICAgaWRsZVRpbWVTaW5jZUxhc3RSZXBvcnQ6IDAsXG4gICAgICBpZGxlU3RhcnQsXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59XG5cbmNvbnN0IHRpbWVTaW5jZUlkbGVTdGFydCA9IHN0YXRlID0+IHtcbiAgY29uc3Qgbm93ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gIHJldHVybiBub3cgLSBzdGF0ZS5pZGxlU3RhcnQ7XG59O1xuXG5leHBvcnQgY29uc3Qgc2V0U3RhcnRJZGxlID0gKCkgPT4gKHtcbiAgdHlwZTogU0VUX1NUQVJUX0lETEUsXG59KTtcblxuZXhwb3J0IGNvbnN0IHNldEVuZElkbGUgPSAoKSA9PiAoe1xuICB0eXBlOiBTRVRfRU5EX0lETEUsXG59KTtcblxuZXhwb3J0IGNvbnN0IHJlc2V0SWRsZVRpbWUgPSAoKSA9PiAoe1xuICB0eXBlOiBSRVNFVF9JRExFX1RJTUUsXG59KTtcblxuZXhwb3J0IGNvbnN0IGdldElkbGVUaW1lU2luY2VMYXN0UmVwb3J0ID0gc3RhdGUgPT4ge1xuICBpZiAoc3RhdGUuaXNJZGxlKSB7XG4gICAgcmV0dXJuIHN0YXRlLmlkbGVUaW1lU2luY2VMYXN0UmVwb3J0ICsgdGltZVNpbmNlSWRsZVN0YXJ0KHN0YXRlKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gc3RhdGUuaWRsZVRpbWVTaW5jZUxhc3RSZXBvcnQ7XG4gIH1cbn07XG4iLCJpbXBvcnQgSW1tdXRhYmxlIGZyb20gJ2ltbXV0YWJsZSc7XG5cbmltcG9ydCB7Y3JlYXRlVXVpZH0gZnJvbSAnLi4vdXRpbHMnO1xuXG4vKipcbiAqIER1Y2sgbW9kdWxlIGZvciBXYXRjaGVycyBleHByZXNzaW9uIHVwZGF0aW5nL2Rpc3BhdGNoaW5nLlxuICovXG5cbi8qKlxuICogQUNUSU9OIENPTlNUQU5UU1xuICovXG5jb25zdCBBRERfRVhQUkVTU0lPTiA9ICd3YXRjaGVkRXhwcmVzc2lvbnMvQUREX0VYUFJFU1NJT04nO1xuY29uc3QgUkVNT1ZFX0VYUFJFU1NJT04gPSAnd2F0Y2hlZEV4cHJlc3Npb25zL1JFTU9WRV9FWFBSRVNTSU9OJztcbmNvbnN0IFVQREFURV9WQUxVRSA9ICd3YXRjaGVkRXhwcmVzc2lvbnMvVVBEQVRFX1ZBTFVFJztcblxuLyoqXG4gKiBSRURVQ0VSU1xuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gV2F0Y2hlZEV4cHJlc3Npb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBleHByZXNzaW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbGFzdFZhbHVlXG4gKi9cblxuLyoqXG4gKiBAdHlwZSB7QXJyYXkuPFdhdGNoZWRFeHByZXNzaW9uPn1cbiAqL1xuY29uc3Qgd2F0Y2hlZEV4cHJlc3Npb25zSW5pdGlhbFN0YXRlID0gSW1tdXRhYmxlLkxpc3QoKTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVkdWNlcihcbiAgc3RhdGUgPSB3YXRjaGVkRXhwcmVzc2lvbnNJbml0aWFsU3RhdGUsXG4gIGFjdGlvblxuKSB7XG4gIGlmIChhY3Rpb24udHlwZSA9PT0gQUREX0VYUFJFU1NJT04pIHtcbiAgICBjb25zdCB7ZXhwcmVzc2lvbn0gPSBhY3Rpb247XG4gICAgY29uc3QgdXVpZCA9IGNyZWF0ZVV1aWQoKTtcbiAgICByZXR1cm4gc3RhdGUucHVzaChJbW11dGFibGUuTWFwKHtleHByZXNzaW9uLCB1dWlkfSkpO1xuICB9XG5cbiAgaWYgKGFjdGlvbi50eXBlID09PSBVUERBVEVfVkFMVUUpIHtcbiAgICBjb25zdCB7dmFsdWUsIGV4cHJlc3Npb259ID0gYWN0aW9uO1xuICAgIHJldHVybiBzdGF0ZS5tYXAoZSA9PlxuICAgICAgZS5nZXQoJ2V4cHJlc3Npb24nKSA9PT0gZXhwcmVzc2lvblxuICAgICAgICA/IEltbXV0YWJsZS5NYXAoe1xuICAgICAgICAgICAgbGFzdFZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIGV4cHJlc3Npb24sXG4gICAgICAgICAgICB1dWlkOiBlLmdldCgndXVpZCcpLFxuICAgICAgICAgIH0pXG4gICAgICAgIDogZVxuICAgICk7XG4gIH1cblxuICBpZiAoYWN0aW9uLnR5cGUgPT09IFJFTU9WRV9FWFBSRVNTSU9OKSB7XG4gICAgcmV0dXJuIHN0YXRlLmZpbHRlcihlID0+IGUuZ2V0KCdleHByZXNzaW9uJykgIT09IGFjdGlvbi5leHByZXNzaW9uKTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuLyoqXG4gKiBBQ1RJT04gQ1JFQVRPUlNcbiAqICAoZS5nLiBmdW5jdGlvbiBkb0FUaGluZyhuKSB7IHJldHVybiB7dHlwZTogRE9fQV9USElORywgYXJnOiBufTsgfSlcbiAqL1xuXG5leHBvcnQgY29uc3QgYWRkID0gZXhwcmVzc2lvbiA9PiAoe1xuICB0eXBlOiBBRERfRVhQUkVTU0lPTixcbiAgZXhwcmVzc2lvbixcbn0pO1xuXG5leHBvcnQgY29uc3QgcmVtb3ZlID0gZXhwcmVzc2lvbiA9PiAoe1xuICB0eXBlOiBSRU1PVkVfRVhQUkVTU0lPTixcbiAgZXhwcmVzc2lvbixcbn0pO1xuXG5leHBvcnQgY29uc3QgdXBkYXRlID0gKGV4cHJlc3Npb24sIHZhbHVlKSA9PiAoe1xuICB0eXBlOiBVUERBVEVfVkFMVUUsXG4gIGV4cHJlc3Npb24sXG4gIHZhbHVlLFxufSk7XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuXG4vLyBhcHBzL3NyYy9zdHlsZUNvbnN0YW50cy5qc1xuLy8gR0VORVJBVEVEIEZJTEU6IERPIE5PVCBNT0RJRlkgRElSRUNUTFlcbi8vIFRoaXMgZ2VuZXJhdGVkIGZpbGUgZXhwb3J0cyBhbGwgdmFyaWFibGVzIGRlZmluZWQgaW4gc2hhcmVkL2Nzcy9zdHlsZS1jb25zdGFudHMuc2Nzc1xuLy8gZm9yIHVzZSBpbiBKYXZhU2NyaXB0LiBUaGUgZ2VuZXJhdG9yIHNjcmlwdCBpcyBjb252ZXJ0LXNjc3MtdmFyaWFibGVzLmpzXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgXCJ3b3Jrc3BhY2UtaGVhZGVycy1oZWlnaHRcIjogMzAsXG4gIFwicmVzaXplLWJhci13aWR0aFwiOiAxMyxcbiAgXCJkZWxldGUtb3BhY2l0eVwiOiBcIjAuNVwiLFxuICBcImNvbnRlbnQtd2lkdGhcIjogOTcwLFxufTtcbiIsImltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSc7XG5pbXBvcnQge2Nvbm5lY3R9IGZyb20gJ3JlYWN0LXJlZHV4JztcblxuaW1wb3J0IHtvcGVuRGlhbG9nfSBmcm9tICdAY2RvL2FwcHMvcmVkdXgvaW5zdHJ1Y3Rpb25zRGlhbG9nJztcblxuaW1wb3J0IFNhZmVNYXJrZG93biBmcm9tICcuL1NhZmVNYXJrZG93bic7XG5pbXBvcnQge3JlbmRlckV4cGFuZGFibGVJbWFnZXN9IGZyb20gJy4vdXRpbHMvZXhwYW5kYWJsZUltYWdlcyc7XG5cbmV4cG9ydCBjbGFzcyBVbmNvbm5lY3RlZEV4cGFuZGFibGVJbWFnZXNXcmFwcGVyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICBzaG93SW1hZ2VEaWFsb2c6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgY2hpbGRyZW46IFByb3BUeXBlcy5vbmVPZlR5cGUoW1xuICAgICAgUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm5vZGUpLFxuICAgICAgUHJvcFR5cGVzLm5vZGUsXG4gICAgXSkuaXNSZXF1aXJlZCxcbiAgfTtcblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICB0aGlzLnBvc3RSZW5kZXJIb29rKCk7XG4gIH1cblxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzKSB7XG4gICAgLy8gVE9ETzogZG8gd2UgbmVlZCB0byBkbyBhbnkga2luZCBvZiBjbGVhbnVwIGhlcmU/IE9yIG90aGVyd2lzZSBkb1xuICAgIC8vIHNvbWV0aGluZyBtb3JlIHByZWNpc2UgdGhhbiBjYWxsaW5nIHRoZSBtZXRob2QgYWdhaW4gd2hlbiB3ZSdyZVxuICAgIC8vIHJlc3BvbmRpbmcgdG8gYW4gdXBkYXRlIHJhdGhlciB0aGFuIGFuIGluaXRpYWwgcmVuZGVyP1xuICAgIHRoaXMucG9zdFJlbmRlckhvb2soKTtcbiAgfVxuXG4gIHBvc3RSZW5kZXJIb29rKCkge1xuICAgIGNvbnN0IHRoaXNOb2RlID0gUmVhY3RET00uZmluZERPTU5vZGUodGhpcyk7XG4gICAgcmVuZGVyRXhwYW5kYWJsZUltYWdlcyh0aGlzTm9kZSwgdGhpcy5wcm9wcy5zaG93SW1hZ2VEaWFsb2cpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNoaWxkcmVuO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBFeHBhbmRhYmxlSW1hZ2VzV3JhcHBlciA9IGNvbm5lY3QobnVsbCwgZGlzcGF0Y2ggPT4gKHtcbiAgc2hvd0ltYWdlRGlhbG9nKGltZ1VybCkge1xuICAgIGRpc3BhdGNoKFxuICAgICAgb3BlbkRpYWxvZyh7XG4gICAgICAgIGltZ09ubHk6IHRydWUsXG4gICAgICAgIGltZ1VybCxcbiAgICAgIH0pXG4gICAgKTtcbiAgfSxcbn0pKShVbmNvbm5lY3RlZEV4cGFuZGFibGVJbWFnZXNXcmFwcGVyKTtcblxuLy8gQ2xpY2thYmxlIHRleHQgY2FuIGJlIGFkZGVkIHZpYSBtYXJrZG93biBpbnN0cnVjdGlvbnMgbGlrZSB0aGlzOlxuLy8gICBbcGxheV0oI2NsaWNrYWJsZT1wbGF5LXNvdW5kLWJsb2NrKVxuLy9cbi8vIFRoaXMgY29kZSB3aWxsIHJlcGxhY2UgYW55IGxpbmsgdGhhdCBoYWQgI2NsaWNrYWJsZT1baWRdXG4vLyB3aXRoIGJvbGQgY2xpY2thYmxlIHRleHQgdGhhdCwgd2hlbiBjbGlja2VkLCB3aWxsIGNhbGwgdGhlXG4vLyBwcm92aWRlZCBoYW5kbGVJbnN0cnVjdGlvbnNUZXh0Q2xpY2sgZnVuY3Rpb24gd2l0aCB0aGUgSUQuXG4vL1xuLy8gVGhlIGNsaWNrYWJsZSB0ZXh0IHN1cHBvcnQgaW4gb3VyIHJlbWFyay1wbHVnaW5zIHJlcG8gaGFzXG4vLyBkb25lIHNvbWUgaW50ZXJtZWRpYXRlIHdvcmsgYnkgY29udmVydGluZyB0aG9zZSBsaW5rcyBpbnRvXG4vLyB0aGUgZm9sbG93aW5nIEhUTUwgZm9ybWF0OlxuLy8gICA8YiBkYXRhLWlkPVwiaWRcIiBjbGFzcz1cImNsaWNrYWJsZS10ZXh0XCI+dGV4dDwvYj5cbmV4cG9ydCBjbGFzcyBDbGlja2FibGVUZXh0V3JhcHBlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgaGFuZGxlSW5zdHJ1Y3Rpb25zVGV4dENsaWNrOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIGNoaWxkcmVuOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtcbiAgICAgIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5ub2RlKSxcbiAgICAgIFByb3BUeXBlcy5ub2RlLFxuICAgIF0pLmlzUmVxdWlyZWQsXG4gIH07XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdGhpcy5wb3N0UmVuZGVySG9vaygpO1xuICB9XG5cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcykge1xuICAgIC8vIFRPRE86IGRvIHdlIG5lZWQgdG8gZG8gYW55IGtpbmQgb2YgY2xlYW51cCBoZXJlPyBPciBvdGhlcndpc2UgZG9cbiAgICAvLyBzb21ldGhpbmcgbW9yZSBwcmVjaXNlIHRoYW4gY2FsbGluZyB0aGUgbWV0aG9kIGFnYWluIHdoZW4gd2UncmVcbiAgICAvLyByZXNwb25kaW5nIHRvIGFuIHVwZGF0ZSByYXRoZXIgdGhhbiBhbiBpbml0aWFsIHJlbmRlcj9cbiAgICB0aGlzLnBvc3RSZW5kZXJIb29rKCk7XG4gIH1cblxuICBwb3N0UmVuZGVySG9vaygpIHtcbiAgICBjb25zdCB0aGlzTm9kZSA9IFJlYWN0RE9NLmZpbmRET01Ob2RlKHRoaXMpO1xuICAgIHRoaXMucmVuZGVyQ2xpY2thYmxlVGV4dCh0aGlzTm9kZSk7XG4gIH1cblxuICByZW5kZXJDbGlja2FibGVUZXh0KG5vZGUpIHtcbiAgICBjb25zdCBjbGlja2FibGVUZXh0QWxsID0gbm9kZS5xdWVyeVNlbGVjdG9yQWxsKCdiLmNsaWNrYWJsZS10ZXh0Jyk7XG4gICAgY2xpY2thYmxlVGV4dEFsbC5mb3JFYWNoKChjbGlja2FibGVUZXh0LCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgaWQgPSBjbGlja2FibGVUZXh0LmRhdGFzZXQuaWQ7XG4gICAgICBjb25zdCBleHRyYUNsYXNzID0gYCBjbGlja2FibGUtdGV4dC13aXRoLWdsb3cgY2xpY2thYmxlLXRleHQtJHtpbmRleH1gO1xuICAgICAgaWYgKCFjbGlja2FibGVUZXh0LmNsYXNzTmFtZS5pbmNsdWRlcyhleHRyYUNsYXNzKSkge1xuICAgICAgICBjbGlja2FibGVUZXh0LmNsYXNzTmFtZSArPSBleHRyYUNsYXNzO1xuICAgICAgfVxuICAgICAgY2xpY2thYmxlVGV4dC5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAnYnV0dG9uJyk7XG4gICAgICBjbGlja2FibGVUZXh0LnNldEF0dHJpYnV0ZSgndGFiSW5kZXgnLCAnMCcpO1xuICAgICAgY2xpY2thYmxlVGV4dC5vbmNsaWNrID0gKCkgPT4gdGhpcy5wcm9wcy5oYW5kbGVJbnN0cnVjdGlvbnNUZXh0Q2xpY2soaWQpO1xuICAgICAgY2xpY2thYmxlVGV4dC5vbmtleWRvd24gPSBldmVudCA9PiB7XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgICAgICBjbGlja2FibGVUZXh0LmNsaWNrKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY2hpbGRyZW47XG4gIH1cbn1cblxuLyoqXG4gKiBBIHdyYXBwZXIgZm9yIG91ciBTYWZlTWFya2Rvd24gY29tcG9uZW50IHdoaWNoIGFkZHMgc29tZSBleHRyYVxuICogZnVuY3Rpb25hbGl0eS5cbiAqXG4gKiBSaWdodCBub3csIHRoYXQgZXh0cmEgZnVuY3Rpb25hbGl0eSBpcyBsaW1pdGVkIHRvOlxuICogICAtIFN1cHBvcnQgZm9yIHRoZSBcImV4cGFuZGFibGUgaW1hZ2VzXCIgZnVuY3Rpb25hbGl0eS5cbiAqICAgLSBTdXBwb3J0IGZvciBjbGlja2FibGUgdGV4dCB0aGF0IHNob3dzIGEgY2FsbG91dC5cbiAqXG4gKiBCdXQgdGhlIGludGVudCBpcyBmb3IgdGhpcyB0byBzZXJ2ZSBhcyBhIGNvbW1vbiBwbGFjZSB0byBpbXBsZW1lbnQgYWxsIG9mXG4gKiB0aGUgb3RoZXIgdGhpbmdzIHdlIGRvIG9uIF90b3BfIG9mIG1hcmtkb3duOyBlbWJlZGRlZCBCbG9ja2x5LCBsaW5rc1xuICogYXV0b21hdGljYWxseSBvcGVuaW5nIGluIGEgbmV3IHRhYiwgZXRjLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmhhbmNlZFNhZmVNYXJrZG93biBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgbWFya2Rvd246IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBvcGVuRXh0ZXJuYWxMaW5rc0luTmV3VGFiOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBleHBhbmRhYmxlSW1hZ2VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgaGFuZGxlSW5zdHJ1Y3Rpb25zVGV4dENsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgfTtcblxuICByZW5kZXIoKSB7XG4gICAgLy8gVGhlIGJhc2ljIGlkZWEgaGVyZSBpcyB0aGF0IHdlIHN0YXJ0IHdpdGgganVzdCBhIGJhc2ljIFNhZmUgTWFya2Rvd25cbiAgICAvLyBjb21wb25lbnQuIFdlIHRoZW4gY2hvb3NlIHdoaWNoIHN1YnNldCBvZiBlbmhhbmNlbWVudHMgd2Ugd2FudCB0byBhZGQgYnlcbiAgICAvLyB3cmFwcGluZyB0aGUgY29tcG9uZW50IGluIG90aGVyIGNvbXBvbmVudHMgd2hpY2ggZWFjaCBhZGQgdGhlaXIgb3duXG4gICAgLy8gc2VsZi1jb250YWluZWQgZnVuY3Rpb25hbGl0eS5cbiAgICAvL1xuICAgIC8vIFJpZ2h0IG5vdywgdGhhdCdzIGp1c3QgZXhwYW5kYWJsZSBpbWFnZXMgYW5kIGNsaWNrYWJsZSB0ZXh0LiBCdXQgd2VcbiAgICAvLyBjb3VsZCAoc2hvdWxkPykgdGFrZSB0aGUgXCJvcGVuIGV4dGVybmFsIGxpbmtzXCIgZnVuY3Rpb25hbGl0eSBvdXQgb2ZcbiAgICAvLyBTYWZlTWFya2Rvd24gYW5kIGFkZCBpdCBoZXJlOyBJIGV4cGVjdCB3ZSBhbG1vc3QgY2VydGFpbmx5IHdpbGwgcHV0IHRoZVxuICAgIC8vIFwicmVuZGVyIGJsb2NrbHkgYmxvY2tzXCIgZnVuY3Rpb25hbGl0eSBpbiBoZXJlLCB0b28uXG4gICAgbGV0IHJlc3VsdCA9IChcbiAgICAgIDxTYWZlTWFya2Rvd25cbiAgICAgICAgbWFya2Rvd249e3RoaXMucHJvcHMubWFya2Rvd259XG4gICAgICAgIG9wZW5FeHRlcm5hbExpbmtzSW5OZXdUYWI9e3RoaXMucHJvcHMub3BlbkV4dGVybmFsTGlua3NJbk5ld1RhYn1cbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnByb3BzLmNsYXNzTmFtZX1cbiAgICAgIC8+XG4gICAgKTtcblxuICAgIGlmICh0aGlzLnByb3BzLmV4cGFuZGFibGVJbWFnZXMpIHtcbiAgICAgIHJlc3VsdCA9IDxFeHBhbmRhYmxlSW1hZ2VzV3JhcHBlcj57cmVzdWx0fTwvRXhwYW5kYWJsZUltYWdlc1dyYXBwZXI+O1xuICAgIH1cblxuICAgIGlmICh0aGlzLnByb3BzLmhhbmRsZUluc3RydWN0aW9uc1RleHRDbGljaykge1xuICAgICAgcmVzdWx0ID0gKFxuICAgICAgICA8Q2xpY2thYmxlVGV4dFdyYXBwZXJcbiAgICAgICAgICBoYW5kbGVJbnN0cnVjdGlvbnNUZXh0Q2xpY2s9e3RoaXMucHJvcHMuaGFuZGxlSW5zdHJ1Y3Rpb25zVGV4dENsaWNrfVxuICAgICAgICA+XG4gICAgICAgICAge3Jlc3VsdH1cbiAgICAgICAgPC9DbGlja2FibGVUZXh0V3JhcHBlcj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxuIiwiaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCBjb2xvciBmcm9tICdAY2RvL2FwcHMvdXRpbC9jb2xvcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExpZ2h0YnVsYiBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgc2hvdWxkQW5pbWF0ZTogUHJvcFR5cGVzLmJvb2wsXG4gICAgY291bnQ6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgbGl0OiBQcm9wVHlwZXMuYm9vbCxcbiAgICBzaXplOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIHN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGlzTWluZWNyYWZ0OiBQcm9wVHlwZXMuYm9vbCxcbiAgICBpc1J0bDogUHJvcFR5cGVzLmJvb2wsXG4gIH07XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICBzaG91bGRBbmltYXRlOiBmYWxzZSxcbiAgICBjb3VudDogMCxcbiAgICBsaXQ6IHRydWUsXG4gICAgc2l6ZTogNDAsXG4gICAgc3R5bGU6IHt9LFxuICB9O1xuXG4gIHJlbmRlcigpIHtcbiAgICBsZXQgYnVsYkRpc3BsYXk7XG4gICAgbGV0IG51bWJlckNpcmNsZTtcblxuICAgIGlmICh0aGlzLnByb3BzLmlzTWluZWNyYWZ0KSB7XG4gICAgICBjb25zdCBocmVmID0gdGhpcy5wcm9wcy5saXRcbiAgICAgICAgPyAnaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFzQUFBQU9DQVlBQUFENVllYVZBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQScgK1xuICAgICAgICAgICdJR05JVWswQUFIb2xBQUNBZ3dBQStmOEFBSURwQUFCMU1BQUE2bUFBQURxWUFBQVhiNUpmeFVZQUFBQ3pTVVJCVkhqYWxKRXhEc0l3JyArXG4gICAgICAgICAgJ0RFVy9HemJZRzRtNUE1MDVCenVINmNRcEVHZGc2VGxZV0xwMHJwU09pSFpyWklhR0NzZk53SmNzUjhtVC9mVkRrR0pva1RvQVlOZFYnICtcbiAgICAgICAgICAneU8xWmtxWmN1RXlBK1JIZ0ZzZ09jM0VMOXMyeWtRVDRLM09hdTY4QktrQ214QVlwK1ZwZFpmaERDaDdHU2ZTMVdJVHZZWnl3MndhSCcgK1xuICAgICAgICAgICd3UzhBK2s0bXU3K2c3eC9ScUVKRUY0dGRWL0g3ZFdmMkRjZWZwTks0M2dqQU01U1VncTIxeVRRVTdKeEx3bXZHT2ZYK0dRRGxLRHhGJyArXG4gICAgICAgICAgJ2duNytiZ0FBQUFCSlJVNUVya0pnZ2c9PSdcbiAgICAgICAgOiAnaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFzQUFBQU9DQVlBQUFENVllYVZBQUFBQm1KTFIwUUEvd0QvQVArZ3ZhZVRBQUFBQ1hCSScgK1xuICAgICAgICAgICdXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFCM1JKVFVVSDRBc1JGUVVRUDhnMWN3QUFBS3BKUkVGVUtNK1ZrYkVOeENBTVJSK25LMUpIJyArXG4gICAgICAgICAgJ0FtV0NaSVZNa1dIWkF5a3RtU0Npb0tielZSZkJHWXI3alJGK3NqOGZReXRCeTZnRElONTc5bjF2U09mY3c3MXFjRjFYY3M1WWE3SFcnICtcbiAgICAgICAgICAna25NbXBmUnNORFZZYTlzMkFHS016UE9NYzQ0M0E4VVkxZDJMUDZUZ1VrcFRlN0UwdmtzcFROTUU4UGdGekhleU9ZNkQ2N3FhU1RYWScgK1xuICAgICAgICAgICdzeVhlZXpuUFUxSks4dnRKS28wUUFpR0U3Z01WdkN6TE1BMEYzL2M5aEh2R1pkVC9BUGZ5UWMzdW1QdmZBQUFBQUVsRlRrU3VRbUNDJztcblxuICAgICAgYnVsYkRpc3BsYXkgPSAoXG4gICAgICAgIDxnIGNsYXNzTmFtZT17dGhpcy5wcm9wcy5zaG91bGRBbmltYXRlID8gJ2FuaW1hdGUtaGludCcgOiAnJ30+XG4gICAgICAgICAgPGltYWdlXG4gICAgICAgICAgICB3aWR0aD1cIjQ1MFwiXG4gICAgICAgICAgICBoZWlnaHQ9XCI0NTBcIlxuICAgICAgICAgICAgeD1cIjgwXCJcbiAgICAgICAgICAgIHk9XCIxNDBcIlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwicGl4ZWxhdGVkXCJcbiAgICAgICAgICAgIHhsaW5rSHJlZj17J2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwnICsgaHJlZn1cbiAgICAgICAgICAvPlxuICAgICAgICA8L2c+XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBidWxiRGlzcGxheSA9IChcbiAgICAgICAgPGcgY2xhc3NOYW1lPXt0aGlzLnByb3BzLnNob3VsZEFuaW1hdGUgPyAnYW5pbWF0ZS1oaW50JyA6ICcnfT5cbiAgICAgICAgICA8Z1xuICAgICAgICAgICAgdHJhbnNmb3JtPXtcbiAgICAgICAgICAgICAgdGhpcy5wcm9wcy5pc1J0bFxuICAgICAgICAgICAgICAgID8gJ3RyYW5zbGF0ZSgwLDIwMCkgc2NhbGUoMTAuMCwxMC4wKSdcbiAgICAgICAgICAgICAgICA6ICd0cmFuc2xhdGUoMjQ1LDIwMCkgc2NhbGUoMTAuMCwxMC4wKSdcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICBkPVwiTTIyIDMzSDguMjVDNy4zOTA2MiAzMC4zMzU5IDUuNjcxODggMjcuOTI5NyAzLjk1MzEyIDI1LjYwOTRDMy41MjM0NCAyNS4wMDc4IDMuMDkzNzUgMjQuNDA2MiAyLjY2NDA2IDIzLjgwNDdDMC45NDUzMTIgMjEuMzEyNSAwIDE4LjM5MDYgMCAxNS4xMjVDMCA2Ljc4OTA2IDYuNzAzMTIgMCAxNS4xMjUgMEMyMy40NjA5IDAgMzAuMjUgNi43ODkwNiAzMC4yNSAxNS4yMTA5QzMwLjI1IDE4LjM5MDYgMjkuMjE4OCAyMS4zMTI1IDI3LjUgMjMuODA0N0MyNy4wNzAzIDI0LjQwNjIgMjYuNjQwNiAyNS4wMDc4IDI2LjIxMDkgMjUuNjA5NEMyNC40OTIyIDI3LjkyOTcgMjIuNzczNCAzMC4zMzU5IDIyIDMzWk0xNS4xMjUgNDRDMTEuMjU3OCA0NCA4LjI1IDQwLjk5MjIgOC4yNSAzNy4xMjVWMzUuNzVIMjJWMzcuMTI1QzIyIDQwLjk5MjIgMTguOTA2MiA0NCAxNS4xMjUgNDRaTTguMjUgMTUuMTI1QzguMjUgMTEuMzQzOCAxMS4yNTc4IDguMjUgMTUuMTI1IDguMjVDMTUuODEyNSA4LjI1IDE2LjUgNy42NDg0NCAxNi41IDYuODc1QzE2LjUgNi4xODc1IDE1LjgxMjUgNS41IDE1LjEyNSA1LjVDOS43OTY4OCA1LjUgNS41IDkuODgyODEgNS41IDE1LjEyNUM1LjUgMTUuODk4NCA2LjEwMTU2IDE2LjUgNi44NzUgMTYuNUM3LjU2MjUgMTYuNSA4LjI1IDE1Ljg5ODQgOC4yNSAxNS4xMjVaXCJcbiAgICAgICAgICAgICAgZmlsbD1cIiMxODkyRTNcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgIGQ9XCJNOC4yNSAxNS4xMjVDOC4yNSAxMS4zNDM4IDExLjI1NzggOC4yNSAxNS4xMjUgOC4yNUMxNS44MTI1IDguMjUgMTYuNSA3LjY0ODQ0IDE2LjUgNi44NzVDMTYuNSA2LjE4NzUgMTUuODEyNSA1LjUgMTUuMTI1IDUuNUM5Ljc5Njg4IDUuNSA1LjUgOS44ODI4MSA1LjUgMTUuMTI1QzUuNSAxNS44OTg0IDYuMTAxNTYgMTYuNSA2Ljg3NSAxNi41QzcuNTYyNSAxNi41IDguMjUgMTUuODk4NCA4LjI1IDE1LjEyNVpcIlxuICAgICAgICAgICAgICBmaWxsPVwiIzE4OTJFM1wiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgZmlsbFJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICAgICAgY2xpcFJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICAgICAgZD1cIk0xMy43NSA2Ljg3NUMxNC40Mzc1IDYuODc1IDE1LjEyNSA3LjU2MjUgMTUuMTI1IDguMzM1OTRDMTUuMTI1IDkuMDIzNDQgMTQuNDM3NSA5LjYyNSAxMy43NSA5LjYyNUMxMS40Mjk3IDkuNjI1IDkuNjI1IDExLjUxNTYgOS42MjUgMTMuNzVDOS42MjUgMTQuNTIzNCA4LjkzNzUgMTUuMTI1IDguMjUgMTUuMTI1QzcuNDc2NTYgMTUuMTI1IDYuODc1IDE0LjUyMzQgNi44NzUgMTMuNzVDNi44NzUgOS45Njg3NSA5Ljg4MjgxIDYuODc1IDEzLjc1IDYuODc1WlwiXG4gICAgICAgICAgICAgIGZpbGw9XCJ3aGl0ZVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZz5cbiAgICAgICAgPC9nPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgY291bnREaXNwbGF5O1xuICAgIGlmICh0aGlzLnByb3BzLmxpdCAmJiB0aGlzLnByb3BzLmNvdW50KSB7XG4gICAgICAvLyBJZiB0aGVyZSBhcmUgbW9yZSB0aGFuIG5pbmUgaGludHMsIHNpbXBseSBkaXNwbGF5IFwiOStcIlxuICAgICAgY29uc3QgY291bnRUZXh0ID0gdGhpcy5wcm9wcy5jb3VudCA+IDkgPyAnOSsnIDogdGhpcy5wcm9wcy5jb3VudDtcbiAgICAgIGlmICh0aGlzLnByb3BzLmlzTWluZWNyYWZ0KSB7XG4gICAgICAgIGNvdW50RGlzcGxheSA9IChcbiAgICAgICAgICA8Zz5cbiAgICAgICAgICAgIDx0ZXh0IGlkPVwiaGludENvdW50XCIgeD1cIjQwMFwiIHk9XCI3MDBcIiBzdHlsZT17c3R5bGVzLmNvdW50TWluZWNyYWZ0fT5cbiAgICAgICAgICAgICAge2NvdW50VGV4dH1cbiAgICAgICAgICAgIDwvdGV4dD5cbiAgICAgICAgICA8L2c+XG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb3VudERpc3BsYXkgPSAoXG4gICAgICAgICAgPGc+XG4gICAgICAgICAgICA8dGV4dFxuICAgICAgICAgICAgICBpZD1cImhpbnRDb3VudFwiXG4gICAgICAgICAgICAgIHg9e3RoaXMucHJvcHMuaXNSdGwgPyAnMzgwJyA6ICc0OTUnfVxuICAgICAgICAgICAgICB5PVwiMzgwXCJcbiAgICAgICAgICAgICAgc3R5bGU9e3N0eWxlcy5jb3VudH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge2NvdW50VGV4dH1cbiAgICAgICAgICAgIDwvdGV4dD5cbiAgICAgICAgICA8L2c+XG4gICAgICAgICk7XG4gICAgICAgIG51bWJlckNpcmNsZSA9IChcbiAgICAgICAgICA8ZyBjbGFzc05hbWU9e3RoaXMucHJvcHMuc2hvdWxkQW5pbWF0ZSA/ICdhbmltYXRlLWhpbnQnIDogJyd9PlxuICAgICAgICAgICAgPGNpcmNsZVxuICAgICAgICAgICAgICBjeD17dGhpcy5wcm9wcy5pc1J0bCA/ICczMTUnIDogJzU2NSd9XG4gICAgICAgICAgICAgIGN5PVwiMzEwXCJcbiAgICAgICAgICAgICAgcj1cIjEyNVwiXG4gICAgICAgICAgICAgIGZpbGw9e2NvbG9yLndoaXRlfVxuICAgICAgICAgICAgICBzdHJva2U9e2NvbG9yLmJsb2NrbHlfZmx5b3V0X2dyYXl9XG4gICAgICAgICAgICAgIHN0cm9rZVdpZHRoPVwiMTZcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2c+XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxzdmdcbiAgICAgICAgd2lkdGg9e3RoaXMucHJvcHMuc2l6ZX1cbiAgICAgICAgaGVpZ2h0PXt0aGlzLnByb3BzLnNpemV9XG4gICAgICAgIHN0eWxlPXt0aGlzLnByb3BzLnN0eWxlfVxuICAgICAgICB2aWV3Qm94PVwiMCAwIDYxMiA3OTJcIlxuICAgICAgPlxuICAgICAgICB7YnVsYkRpc3BsYXl9XG4gICAgICAgIHtudW1iZXJDaXJjbGV9XG4gICAgICAgIHtjb3VudERpc3BsYXl9XG4gICAgICA8L3N2Zz5cbiAgICApO1xuICB9XG59XG5cbmNvbnN0IHN0eWxlcyA9IHtcbiAgY291bnQ6IHtcbiAgICBmb250V2VpZ2h0OiAnYm9sZCcsXG4gICAgZm9udFNpemU6ICcyMDBweCcsXG4gICAgZmlsbDogY29sb3IubGlnaHRfaW5mb181MDAsXG4gICAgZm9udEZhbWlseTogJ1ZlcmRhbmEsIEdlbmV2YSwgc2Fucy1zZXJpZicsXG4gIH0sXG4gIGNvdW50TWluZWNyYWZ0OiB7XG4gICAgZm9udFdlaWdodDogJ2JvbGQnLFxuICAgIGZvbnRTaXplOiAnNDAwcHgnLFxuICAgIGZpbGw6IGNvbG9yLndoaXRlLFxuICAgIHN0cm9rZTogY29sb3IuYmxhY2ssXG4gICAgc3Ryb2tlV2lkdGg6ICczMHB4JyxcbiAgICBmb250RmFtaWx5OiAnVmVyZGFuYSwgR2VuZXZhLCBzYW5zLXNlcmlmJyxcbiAgfSxcbn07XG4iLCJpbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFJhZGl1bSBmcm9tICdyYWRpdW0nOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtaW1wb3J0c1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7Y29ubmVjdH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuXG5pbXBvcnQge29wZW5EaWFsb2d9IGZyb20gJy4uLy4uL3JlZHV4L2luc3RydWN0aW9uc0RpYWxvZyc7XG5cbmNsYXNzIEltYWdlUHJldmlld1Vud3JhcHBlZCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgdXJsOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgc2hvd0luc3RydWN0aW9uc0RpYWxvZzogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBub1Zpc3VhbGl6YXRpb246IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIH07XG5cbiAgcmVuZGVyKCkge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGlkPVwiYW5pLWdpZi1wcmV2aWV3LXdyYXBwZXJcIiBzdHlsZT17c3R5bGVzLndyYXBwZXJ9PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgaWQ9XCJhbmktZ2lmLXByZXZpZXdcIlxuICAgICAgICAgIHN0eWxlPXtbXG4gICAgICAgICAgICBzdHlsZXMuYW5pR2lmUHJldmlldyh0aGlzLnByb3BzLnVybCksXG4gICAgICAgICAgICB0aGlzLnByb3BzLm5vVmlzdWFsaXphdGlvbiAmJiBzdHlsZXMuYmlnUHJldmlldyxcbiAgICAgICAgICBdfVxuICAgICAgICAgIG9uQ2xpY2s9e3RoaXMucHJvcHMuc2hvd0luc3RydWN0aW9uc0RpYWxvZ31cbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuY29uc3Qgc3R5bGVzID0ge1xuICB3cmFwcGVyOiB7XG4gICAgZGlzcGxheTogJ2lubGluZS1ibG9jaycsXG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gIH0sXG4gIGFuaUdpZlByZXZpZXc6IHVybCA9PiAoe1xuICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgIGJhY2tncm91bmRJbWFnZTogYHVybCgnJHt1cmx9JylgLFxuICB9KSxcbiAgLy8gSW4gSmlnc2F3IGxldmVscywgd2Ugd2FudCBhbmlnaWYgcHJldmlldyB0byBiZSBsYXJnZXIgKG5vcm1hbGx5IGl0J3MgODB4NjApXG4gIGJpZ1ByZXZpZXc6IHtcbiAgICB3aWR0aDogMjQwLFxuICAgIGhlaWdodDogMTgwLFxuICAgIGJhY2tncm91bmRTaXplOiAnMjQwcHggMTgwcHgnLFxuICB9LFxufTtcblxuZXhwb3J0IGNvbnN0IEltYWdlUHJldmlldyA9IFJhZGl1bShJbWFnZVByZXZpZXdVbndyYXBwZWQpO1xuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChcbiAgc3RhdGUgPT4gKHtcbiAgICB1cmw6IHN0YXRlLnBhZ2VDb25zdGFudHMuYW5pR2lmVVJMLFxuICAgIG5vVmlzdWFsaXphdGlvbjogc3RhdGUucGFnZUNvbnN0YW50cy5ub1Zpc3VhbGl6YXRpb24sXG4gIH0pLFxuICBkaXNwYXRjaCA9PiAoe1xuICAgIHNob3dJbnN0cnVjdGlvbnNEaWFsb2coKSB7XG4gICAgICBkaXNwYXRjaChvcGVuRGlhbG9nKHtpbWdPbmx5OiB0cnVlfSkpO1xuICAgIH0sXG4gIH0pXG4pKEltYWdlUHJldmlldyk7XG4iLCJpbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IGNvbG9yIGZyb20gJ0BjZG8vYXBwcy91dGlsL2NvbG9yJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRXhhbXBsZUltYWdlKHtzcmN9KSB7XG4gIC8vIFRPRE86IEExMXkyNzkgKGh0dHBzOi8vY29kZWRvdG9yZy5hdGxhc3NpYW4ubmV0L2Jyb3dzZS9BMTFZLTI3OSlcbiAgLy8gVmVyaWZ5IG9yIHVwZGF0ZSB0aGlzIGFsdC10ZXh0IGFzIG5lY2Vzc2FyeVxuICByZXR1cm4gPGltZyBzdHlsZT17c3R5bGVzLmltZ30gc3JjPXtzcmN9IGFsdD1cIlwiIC8+O1xufVxuXG5FeGFtcGxlSW1hZ2UucHJvcFR5cGVzID0ge1xuICBzcmM6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbn07XG5cbmNvbnN0IHN0eWxlcyA9IHtcbiAgaW1nOiB7XG4gICAgLy8gU3R5bGVzIGJlbG93IGFyZSB0YWtlbiBmcm9tIC5leGFtcGxlLWltYWdlIGluIGFwcGxpY2F0aW9uLnNjc3MuXG4gICAgLy8gVGhleSBhcmUgcmVpbXBsZW1lbnRlZCBoZXJlIHRvIGRlY291cGxlIHRoaXMgY29tcG9uZW50IGZyb21cbiAgICAvLyBiYWNrZW5kIHN0eWxpbmcuXG4gICAgYm94U2hhZG93OiBgMCAxMHB4IDEzcHggLTExcHggJHtjb2xvci5ibGFja31gLFxuICAgIGJvcmRlcjogYDJweCBzb2xpZCAke2NvbG9yLmxpZ2h0X2dyYXl9YCxcbiAgICBib3JkZXJSYWRpdXM6IDI1LFxuICAgIGJveFNpemluZzogJ2JvcmRlci1ib3gnLFxuICB9LFxufTtcbiIsImltcG9ydCB7cmVuZGVyQnV0dG9uc30gZnJvbSAnQG1pY3Jvc29mdC9pbW1lcnNpdmUtcmVhZGVyLXNkayc7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBjb29raWVzIGZyb20gJ2pzLWNvb2tpZSc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFJlYWN0LCB7Q29tcG9uZW50fSBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCBoYW5kbGVMYXVuY2hJbW1lcnNpdmVSZWFkZXIgZnJvbSAnQGNkby9hcHBzL3V0aWwvaW1tZXJzaXZlX3JlYWRlcic7XG5cbmNsYXNzIEltbWVyc2l2ZVJlYWRlckJ1dHRvbiBleHRlbmRzIENvbXBvbmVudCB7XG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgdGl0bGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgdGV4dDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBoYXNSb3VuZEJvcmRlcnM6IFByb3BUeXBlcy5ib29sLFxuICAgIC8vIFRPRE86IFtQaGFzZSAyXSBUaGlzIGlzIGEgc3dpdGNoIGZvciBsZWdhY3kgc3R5bGVzIG5lZWRlZCB0byByZXZlcnQgSmF2YWxhYiByZWJyYW5kaW5nIGNoYW5nZXMuXG4gICAgLy8gIG9uY2Ugd2UgdXBkYXRlIEphdmFsYWIgdG8gbmV3IHN0eWxlcyB3ZSdsbCBuZWVkIHRvIHJlbW92ZSB0aGlzIHByb3AgYW5kIGFsbCBvZiBpdCdzIHVzYWdlXG4gICAgLy8gIG1vcmUgaW5mbyBoZXJlOiBodHRwczovL2dpdGh1Yi5jb20vY29kZS1kb3Qtb3JnL2NvZGUtZG90LW9yZy9wdWxsLzUwOTI0XG4gICAgaXNMZWdhY3lTdHlsZXM6IFByb3BUeXBlcy5ib29sLFxuICB9O1xuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIGlmICh0aGlzLnNob3VsZFJlbmRlcigpICYmICF0aGlzLnJlbmRlckJ1dHRvbnNDYWxsZWQpIHtcbiAgICAgIC8vIEFwcGxpZXMgaW5saW5lIHN0eWxpbmcgdG8gdGhlIC5pbW1lcnNpdmUtcmVhZGVyLWJ1dHRvbiBlbGVtZW50c1xuICAgICAgcmVuZGVyQnV0dG9ucyh7XG4gICAgICAgIGVsZW1lbnRzOiBbdGhpcy5jb250YWluZXJdLFxuICAgICAgfSk7XG4gICAgICAvLyBNYWtlIHN1cmUgcmVuZGVyQnV0dG9ucygpIGlzIG9ubHkgY2FsbGVkIG9uY2UuXG4gICAgICB0aGlzLnJlbmRlckJ1dHRvbnNDYWxsZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUtleURvd24oZXZlbnQsIGxvY2FsZSwgdGl0bGUsIHRleHQpIHtcbiAgICAvLyBzaG91bGQgdHJpZ2dlciBidXR0b24gcHJlc3Mgb24gZW50ZXIgb3Igc3BhY2UgcHJlc3NlZFxuICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicgfHwgZXZlbnQua2V5ID09PSAnICcpIHtcbiAgICAgIGhhbmRsZUxhdW5jaEltbWVyc2l2ZVJlYWRlcihsb2NhbGUsIHRpdGxlLCB0ZXh0KTtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHt0aXRsZSwgdGV4dCwgaGFzUm91bmRCb3JkZXJzLCBpc0xlZ2FjeVN0eWxlc30gPSB0aGlzLnByb3BzO1xuICAgIC8vIEdldCB0aGUgY3VycmVudCBsYW5ndWFnZSBmcm9tIHRoZSBsYW5ndWFnZSBjb29raWUuXG4gICAgY29uc3QgbG9jYWxlID0gY29va2llcy5nZXQoJ2xhbmd1YWdlXycpIHx8ICdlbi1VUyc7XG5cbiAgICBpZiAoIXRoaXMuc2hvdWxkUmVuZGVyKCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIHRhYkluZGV4PXswfVxuICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgcmVmPXtlbCA9PiAodGhpcy5jb250YWluZXIgPSBlbCl9XG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhcbiAgICAgICAgICAnaW1tZXJzaXZlLXJlYWRlci1idXR0b24nLFxuICAgICAgICAgIGlzTGVnYWN5U3R5bGVzICYmICdpbW1lcnNpdmUtcmVhZGVyLWJ1dHRvbi1sZWdhY3ktc3R5bGVzJ1xuICAgICAgICApfVxuICAgICAgICBkYXRhLWJ1dHRvbi1zdHlsZT17J2ljb24nfVxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIGJvcmRlclJhZGl1czogaGFzUm91bmRCb3JkZXJzID8gNCA6ICc0cHggMCAwIDRweCcsXG4gICAgICAgIH19XG4gICAgICAgIGRhdGEtbG9jYWxlPXtsb2NhbGV9XG4gICAgICAgIG9uQ2xpY2s9e2Z1bmN0aW9uICgpIHtcbiAgICAgICAgICBoYW5kbGVMYXVuY2hJbW1lcnNpdmVSZWFkZXIobG9jYWxlLCB0aXRsZSwgdGV4dCk7XG4gICAgICAgIH19XG4gICAgICAgIG9uS2V5RG93bj17ZSA9PiB0aGlzLmhhbmRsZUtleURvd24oZSwgbG9jYWxlLCB0aXRsZSwgdGV4dCl9XG4gICAgICAvPlxuICAgICk7XG4gIH1cblxuICAvLyBEZXRlcm1pbmVzIGlmIHRoaXMgYnV0dG9uIHNob3VsZCBiZSByZW5kZXJlZC5cbiAgc2hvdWxkUmVuZGVyKCkge1xuICAgIC8vIElmIHRoZXJlIGlzIG5vIHRleHQsIHRoZW4gc2tpcCByZW5kZXJpbmcgaXQuXG4gICAgcmV0dXJuICEhdGhpcy5wcm9wcy50ZXh0O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEltbWVyc2l2ZVJlYWRlckJ1dHRvbjtcbiIsImltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG4vKipcbiAqIEEgdGFibGUgb2YgaW5wdXRzIGFuZCBleHBlY3RlZCBvdXRwdXRzIHRoYXQgaXMgb25seSB1c2VkIGJ5IENhbGMgYW5kIFN0dWRpby5cbiAqL1xudmFyIElucHV0T3V0cHV0VGFibGUgPSBmdW5jdGlvbiAocHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2PlxuICAgICAgPHRhYmxlPlxuICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgPHRyPlxuICAgICAgICAgICAgPHRoPklucHV0PC90aD5cbiAgICAgICAgICAgIDx0aD5PdXRwdXQ8L3RoPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgICAge3Byb3BzLmRhdGEubWFwKGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPHRyIGtleT17aW5kZXh9PlxuICAgICAgICAgICAgICAgIDx0ZD57aXRlbVswXX08L3RkPlxuICAgICAgICAgICAgICAgIDx0ZD57aXRlbVsxXX08L3RkPlxuICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KX1cbiAgICAgICAgPC90Ym9keT5cbiAgICAgIDwvdGFibGU+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuSW5wdXRPdXRwdXRUYWJsZS5wcm9wVHlwZXMgPSB7XG4gIGRhdGE6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5udW1iZXIpKS5pc1JlcXVpcmVkLFxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBJbnB1dE91dHB1dFRhYmxlO1xuIiwiaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCBpMThuIGZyb20gJ0BjZG8vbG9jYWxlJztcblxuaW1wb3J0IEFuaUdpZlByZXZpZXcgZnJvbSAnLi9BbmlHaWZQcmV2aWV3JztcbmltcG9ydCBFeGFtcGxlSW1hZ2UgZnJvbSAnLi9FeGFtcGxlSW1hZ2UnO1xuaW1wb3J0IEltbWVyc2l2ZVJlYWRlckJ1dHRvbiBmcm9tICcuL0ltbWVyc2l2ZVJlYWRlckJ1dHRvbic7XG5pbXBvcnQgSW5wdXRPdXRwdXRUYWJsZSBmcm9tICcuL0lucHV0T3V0cHV0VGFibGUnO1xuaW1wb3J0IE1hcmtkb3duSW5zdHJ1Y3Rpb25zIGZyb20gJy4vTWFya2Rvd25JbnN0cnVjdGlvbnMnO1xuXG4vKipcbiAqIEEgY29tcG9uZW50IGZvciBkaXNwbGF5aW5nIG91ciBsZXZlbCBpbnN0cnVjdGlvbnMgdGV4dCwgYW5kIHBvc3NpYmx5IGFsc29cbiAqIGF1dGhvcmVkIGhpbnRzIFVJIGFuZC9vciBhbiBhbmlnaWYuIFRoZXNlIGluc3RydWN0aW9ucyBjYW4gYXBwZWFyIGluIHRoZSB0b3BcbiAqIHBhbmUgb3IgaW4gYSBtb2RhbCBkaWFsb2cuIEluIHRoZSBsYXR0ZXIgY2FzZSwgd2Ugd2lsbCBzb21ldGltZXMgc2hvdyBqdXN0XG4gKiB0aGUgYW5pZ2lmIChpbiB0aGlzIGNhc2UgdGhlIGluc3RydWN0aW9ucyBwcm9wIG1heSBiZSB1bmRlZmluZWQpLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbnN0cnVjdGlvbnMgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIGluc3RydWN0aW9uczogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBpbWdVUkw6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgYXV0aG9yZWRIaW50czogUHJvcFR5cGVzLmVsZW1lbnQsXG4gICAgaW5wdXRPdXRwdXRUYWJsZTogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm51bWJlcikpLFxuICAgIGluVG9wUGFuZTogUHJvcFR5cGVzLmJvb2wsXG4gICAgb25SZXNpemU6IFByb3BUeXBlcy5mdW5jLFxuICAgIGlzQmxvY2tseTogUHJvcFR5cGVzLmJvb2wsXG4gICAgaXNJbW1lcnNpdmVCdXR0b25IYXNSb3VuZEJvcmRlcnM6IFByb3BUeXBlcy5ib29sLFxuICAgIC8vIFRPRE86IFtQaGFzZSAyXSBUaGlzIGlzIGEgc3dpdGNoIGZvciBsZWdhY3kgc3R5bGVzIG5lZWRlZCB0byByZXZlcnQgSmF2YWxhYiByZWJyYW5kaW5nIGNoYW5nZXMuXG4gICAgLy8gIG9uY2Ugd2UgdXBkYXRlIEphdmFsYWIgdG8gbmV3IHN0eWxlcyB3ZSdsbCBuZWVkIHRvIHJlbW92ZSB0aGlzIHByb3AgYW5kIGFsbCBvZiBpdCdzIHVzYWdlXG4gICAgLy8gIG1vcmUgaW5mbyBoZXJlOiBodHRwczovL2dpdGh1Yi5jb20vY29kZS1kb3Qtb3JnL2NvZGUtZG90LW9yZy9wdWxsLzUwOTI0XG4gICAgaXNMZWdhY3lJbW1lcnNpdmVTdHlsZXM6IFByb3BUeXBlcy5ib29sLFxuICAgIG5vSW5zdHJ1Y3Rpb25zV2hlbkNvbGxhcHNlZDogUHJvcFR5cGVzLmJvb2wsXG4gIH07XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGluVG9wUGFuZSxcbiAgICAgIGluc3RydWN0aW9ucyxcbiAgICAgIG9uUmVzaXplLFxuICAgICAgaXNCbG9ja2x5LFxuICAgICAgaXNJbW1lcnNpdmVCdXR0b25IYXNSb3VuZEJvcmRlcnMsXG4gICAgICBpc0xlZ2FjeUltbWVyc2l2ZVN0eWxlcyxcbiAgICAgIG5vSW5zdHJ1Y3Rpb25zV2hlbkNvbGxhcHNlZCxcbiAgICAgIGlucHV0T3V0cHV0VGFibGUsXG4gICAgICBpbWdVUkwsXG4gICAgICBhdXRob3JlZEhpbnRzLFxuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgc3R5bGU9e2luVG9wUGFuZSA/IHN0eWxlcy5pblRvcFBhbmUgOiBzdHlsZXMubm90SW5Ub3BQYW5lfT5cbiAgICAgICAge2luc3RydWN0aW9ucyAmJiAoXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIDxJbW1lcnNpdmVSZWFkZXJCdXR0b25cbiAgICAgICAgICAgICAgdGl0bGU9e2kxOG4uaW5zdHJ1Y3Rpb25zKCl9XG4gICAgICAgICAgICAgIHRleHQ9e2luc3RydWN0aW9uc31cbiAgICAgICAgICAgICAgaGFzUm91bmRCb3JkZXJzPXtpc0ltbWVyc2l2ZUJ1dHRvbkhhc1JvdW5kQm9yZGVyc31cbiAgICAgICAgICAgICAgaXNMZWdhY3lTdHlsZXM9e2lzTGVnYWN5SW1tZXJzaXZlU3R5bGVzfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxNYXJrZG93bkluc3RydWN0aW9uc1xuICAgICAgICAgICAgICBtYXJrZG93bj17aW5zdHJ1Y3Rpb25zfVxuICAgICAgICAgICAgICBvblJlc2l6ZT17b25SZXNpemV9XG4gICAgICAgICAgICAgIGluVG9wUGFuZT17aW5Ub3BQYW5lfVxuICAgICAgICAgICAgICBpc0Jsb2NrbHk9e2lzQmxvY2tseX1cbiAgICAgICAgICAgICAgbm9JbnN0cnVjdGlvbnNXaGVuQ29sbGFwc2VkPXtub0luc3RydWN0aW9uc1doZW5Db2xsYXBzZWR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvPlxuICAgICAgICApfVxuICAgICAgICB7aW5wdXRPdXRwdXRUYWJsZSAmJiA8SW5wdXRPdXRwdXRUYWJsZSBkYXRhPXtpbnB1dE91dHB1dFRhYmxlfSAvPn1cbiAgICAgICAge2ltZ1VSTCAmJiAhaW5Ub3BQYW5lICYmIDxFeGFtcGxlSW1hZ2Ugc3JjPXtpbWdVUkx9IC8+fVxuICAgICAgICB7aW1nVVJMICYmIGluVG9wUGFuZSAmJiA8QW5pR2lmUHJldmlldyAvPn1cbiAgICAgICAge2F1dGhvcmVkSGludHN9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cbmNvbnN0IHN0eWxlcyA9IHtcbiAgaW5Ub3BQYW5lOiB7XG4gICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICB9LFxuICBub3RJblRvcFBhbmU6IHtcbiAgICBvdmVyZmxvdzogJ2F1dG8nLFxuICB9LFxufTtcbiIsImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFJhZGl1bSBmcm9tICdyYWRpdW0nOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtaW1wb3J0c1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nO1xuXG5pbXBvcnQgRW5oYW5jZWRTYWZlTWFya2Rvd24gZnJvbSAnLi4vRW5oYW5jZWRTYWZlTWFya2Rvd24nO1xuXG5pbXBvcnQge2NvbnZlcnRYbWxUb0Jsb2NrbHl9IGZyb20gJy4vdXRpbHMnO1xuXG5jbGFzcyBNYXJrZG93bkluc3RydWN0aW9ucyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgbWFya2Rvd246IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBub0luc3RydWN0aW9uc1doZW5Db2xsYXBzZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgIG9uUmVzaXplOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBpblRvcFBhbmU6IFByb3BUeXBlcy5ib29sLFxuICAgIGlzQmxvY2tseTogUHJvcFR5cGVzLmJvb2wsXG4gICAgc2hvd0ltYWdlRGlhbG9nOiBQcm9wVHlwZXMuZnVuYyxcbiAgfTtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgIG5vSW5zdHJ1Y3Rpb25zV2hlbkNvbGxhcHNlZDogZmFsc2UsXG4gIH07XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdGhpcy5jb25maWd1cmVNYXJrZG93bl8oKTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgICBpZiAocHJldlByb3BzLm1hcmtkb3duICE9PSB0aGlzLnByb3BzLm1hcmtkb3duKSB7XG4gICAgICB0aGlzLmNvbmZpZ3VyZU1hcmtkb3duXygpO1xuICAgIH1cbiAgfVxuXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIGNvbnN0IGRldGFpbHNET00gPSAkKFJlYWN0RE9NLmZpbmRET01Ob2RlKHRoaXMpKS5maW5kKCdkZXRhaWxzJyk7XG4gICAgaWYgKGRldGFpbHNET00uZGV0YWlscykge1xuICAgICAgZGV0YWlsc0RPTS5vZmYoJ3RvZ2dsZS5kZXRhaWxzLlRvcEluc3RydWN0aW9ucycpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBdHRhY2ggYW55IG5lY2Vzc2FyeSBqUXVlcnkgdG8gb3VyIG1hcmtkb3duXG4gICAqL1xuICBjb25maWd1cmVNYXJrZG93bl8oKSB7XG4gICAgaWYgKCF0aGlzLnByb3BzLm9uUmVzaXplKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdGhpc05vZGUgPSBSZWFjdERPTS5maW5kRE9NTm9kZSh0aGlzKTtcbiAgICAvLyBJZiB3ZSBoYXZlIHRoZSBqUXVlcnkgZGV0YWlscyBwbHVnaW4sIGVuYWJsZSBpdHMgdXNhZ2Ugb24gYW55IGRldGFpbHNcbiAgICAvLyBlbGVtZW50c1xuICAgIGNvbnN0IGRldGFpbHNET00gPSAkKHRoaXNOb2RlKS5maW5kKCdkZXRhaWxzJyk7XG4gICAgaWYgKGRldGFpbHNET00uZGV0YWlscykge1xuICAgICAgZGV0YWlsc0RPTS5kZXRhaWxzKCk7XG4gICAgICBkZXRhaWxzRE9NLm9uKHtcbiAgICAgICAgJ3RvZ2dsZS5kZXRhaWxzLlRvcEluc3RydWN0aW9ucyc6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLnByb3BzLm9uUmVzaXplKCk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wcm9wcy5pc0Jsb2NrbHkpIHtcbiAgICAgIC8vIENvbnZlcnQgYW55IGlubGluZSBYTUwgaW50byBibG9ja2x5IGJsb2Nrcy4gTm90ZSB0aGF0IHdlIHdhbnQgdG9cbiAgICAgIC8vIG1ha2Ugc3VyZSB3ZSBkb24ndCBpbml0aWFsaXplIGFueSBibG9ja3NwYWNlIGJlZm9yZSB0aGUgbWFpblxuICAgICAgLy8gYmxvY2sgc3BhY2UgaGFzIGJlZW4gY3JlYXRlZCwgbGVzdCB3ZSB2aW9sYXRlIHNvbWUgYXNzdW1wdGlvbnNcbiAgICAgIC8vIGJsb2NrbHkgaGFzLlxuICAgICAgQmxvY2tseS5CbG9ja1NwYWNlLm9uTWFpbkJsb2NrU3BhY2VDcmVhdGVkKCgpID0+IHtcbiAgICAgICAgY29udmVydFhtbFRvQmxvY2tseShSZWFjdERPTS5maW5kRE9NTm9kZSh0aGlzKSk7XG4gICAgICAgIHRoaXMucHJvcHMub25SZXNpemUoKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFBhcmVudCBuZWVkcyB0byByZWFkanVzdCBzb21lIHNpemluZyBhZnRlciBpbWFnZXMgaGF2ZSBsb2FkZWRcbiAgICAkKHRoaXNOb2RlKS5maW5kKCdpbWcnKS5sb2FkKHRoaXMucHJvcHMub25SZXNpemUpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtpblRvcFBhbmUsIG1hcmtkb3dufSA9IHRoaXMucHJvcHM7XG5cbiAgICBjb25zdCBjYW5Db2xsYXBzZSA9ICF0aGlzLnByb3BzLm5vSW5zdHJ1Y3Rpb25zV2hlbkNvbGxhcHNlZDtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9XCJpbnN0cnVjdGlvbnMtbWFya2Rvd25cIlxuICAgICAgICBzdHlsZT17W1xuICAgICAgICAgIHN0eWxlcy5zdGFuZGFyZCxcbiAgICAgICAgICBpblRvcFBhbmUgJiYgc3R5bGVzLmluVG9wUGFuZSxcbiAgICAgICAgICBpblRvcFBhbmUgJiYgY2FuQ29sbGFwc2UgJiYgc3R5bGVzLmluVG9wUGFuZUNhbkNvbGxhcHNlLFxuICAgICAgICBdfVxuICAgICAgPlxuICAgICAgICA8RW5oYW5jZWRTYWZlTWFya2Rvd24gbWFya2Rvd249e21hcmtkb3dufSBleHBhbmRhYmxlSW1hZ2VzIC8+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cbmNvbnN0IHN0eWxlcyA9IHtcbiAgc3RhbmRhcmQ6IHtcbiAgICBtYXJnaW5Cb3R0b206IDM1LFxuICAgIHBhZGRpbmdUb3A6IDE5LFxuICB9LFxuICBpblRvcFBhbmU6IHtcbiAgICBtYXJnaW5Ub3A6IDEwLFxuICAgIG1hcmdpbkJvdHRvbTogMTAsXG4gICAgcGFkZGluZ1RvcDogMCxcbiAgfSxcbiAgaW5Ub3BQYW5lQ2FuQ29sbGFwc2U6IHtcbiAgICBtYXJnaW5Ub3A6IDAsXG4gICAgbWFyZ2luQm90dG9tOiAwLFxuICB9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgUmFkaXVtKE1hcmtkb3duSW5zdHJ1Y3Rpb25zKTtcbiIsImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5pbXBvcnQgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJztcblxuLyoqXG4gKiBDaGVja3MgdGhlIGdpdmVuIGlucHV0cyB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgaW5zdHJ1Y3Rpb24gcGFuZWwgc2hvdWxkIGJlIGRpc3BsYXllZFxuICogQHBhcmFtIHtzdHJpbmd9IHNob3J0SW5zdHJ1Y3Rpb25zXG4gKiBAcGFyYW0ge3N0cmluZ30gbG9uZ0luc3RydWN0aW9uc1xuICogQHBhcmFtIHtib29sZWFufSBoYXNDb250YWluZWRMZXZlbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc0luc3RydWN0aW9ucyhcbiAgc2hvcnRJbnN0cnVjdGlvbnMsXG4gIGxvbmdJbnN0cnVjdGlvbnMsXG4gIGhhc0NvbnRhaW5lZExldmVsc1xuKSB7XG4gIHJldHVybiAhIShzaG9ydEluc3RydWN0aW9ucyB8fCBsb25nSW5zdHJ1Y3Rpb25zIHx8IGhhc0NvbnRhaW5lZExldmVscyk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtSZWFjdENvbXBvbmVudH0gY29tcG9uZW50XG4gKiBAcGFyYW0ge2Jvb2xlYW59IGluY2x1ZGVNYXJnaW5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSBjdXJyZW50IGNvbXB1dGVkIGhlaWdodCBpbiBwaXhlbHMgb2YgdGhlIHNwZWNpZmllZCBjb21wb25lbnQsXG4gKiBpbmNsdWRpbmcgcGFkZGluZywgYm9yZGVyLCBhbmQgKG9wdGlvbmFsbHkpIG1hcmdpbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRPdXRlckhlaWdodChjb21wb25lbnQsIGluY2x1ZGVNYXJnaW4gPSBmYWxzZSkge1xuICByZXR1cm4gJChSZWFjdERPTS5maW5kRE9NTm9kZShjb21wb25lbnQpKS5vdXRlckhlaWdodChpbmNsdWRlTWFyZ2luKTtcbn1cblxuLyoqXG4gKiBNYW51YWxseSBzY3JvbGxzIHRoZSBzcGVjaWZpZWQgZWxlbWVudCBieSB0aGUgc3BlY2lmaWVkIGRlbHRhXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgVGhlIGVsZW1lbnQgdG8gc2Nyb2xsXG4gKiBAcGFyYW0ge251bWJlcn0gZGVsdGFZIFRoZSBkaXN0YW5jZSAocG9zaXRpdmUgb3IgbmVnYXRpdmUpIGluIHBpeGVsc1xuICogICAgICAgIHRvIHNjcm9sbCBieVxuICogQHBhcmFtIHtudW1iZXJ9IGFuaW1hdGUgSWYgc3BlY2lmaWVkLCB0aGUgYW5pbWF0aW9uIHRpbWUgaW4gbXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbEJ5KGVsZW1lbnQsIGRlbHRhWSwgYW5pbWF0ZSA9IDQwMCkge1xuICBjb25zdCBuZXdTY3JvbGxUb3AgPSBlbGVtZW50LnNjcm9sbFRvcCArIGRlbHRhWTtcbiAgc2Nyb2xsVG8oZWxlbWVudCwgbmV3U2Nyb2xsVG9wLCBhbmltYXRlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFRvKGVsZW1lbnQsIHNjcm9sbFRvcCwgYW5pbWF0ZSA9IDQwMCkge1xuICBpZiAoYW5pbWF0ZSkge1xuICAgIGxldCAkZWxlbSA9ICQoZWxlbWVudCk7XG4gICAgaWYgKCEkZWxlbS5pcygnOmFuaW1hdGVkJykpIHtcbiAgICAgICRlbGVtLmFuaW1hdGUoXG4gICAgICAgIHtcbiAgICAgICAgICBzY3JvbGxUb3A6IHNjcm9sbFRvcCxcbiAgICAgICAgfSxcbiAgICAgICAgYW5pbWF0ZVxuICAgICAgKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZWxlbWVudC5zY3JvbGxUb3AgPSBzY3JvbGxUb3A7XG4gIH1cbn1cblxuLyoqXG4gKiBTaHJpbmsgdGhlIERPTSBlbGVtZW50IGNvbnRhaW5pbmcgdGhlIGdpdmVuIGJsb2NrU3BhY2UgdG8gdGhlIG1pbmltdW0gc2l6ZVxuICogcmVxdWlyZWQgdG8gY29udGFpbiB0aGUgYmxvY2sgc3BhY2VcbiAqIEBwYXJhbSB7QmxvY2tTcGFjZX0gYmxvY2tTcGFjZSAtIHRoZSBCbG9ja2x5IEJsb2NrU3BhY2UgdG8gcmVzaXplXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHdpdGhQYWRkaW5nIC0gd2hldGhlciBvciBub3QgdG8gaW5jbHVkZSBwYWRkaW5nXG4gKiBAc2VlIGNvbnZlcnRYbWxUb0Jsb2NrbHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNocmlua0Jsb2NrU3BhY2VDb250YWluZXIoYmxvY2tTcGFjZSwgd2l0aFBhZGRpbmcpIHtcbiAgY29uc3QgY29udGFpbmVyID0gYmxvY2tTcGFjZS5nZXRDb250YWluZXIoKTtcblxuICAvLyBjYWxjdWxhdGUgdGhlIG1pbmltdW0gcmVxdWlyZWQgc2l6ZSBmb3IgdGhlIGNvbnRhaW5lclxuICBjb25zdCBtZXRyaWNzID0gYmxvY2tTcGFjZS5nZXRNZXRyaWNzKCk7XG4gIGxldCBoZWlnaHQgPSBtZXRyaWNzLmNvbnRlbnRIZWlnaHQ7XG4gIGxldCB3aWR0aCA9IG1ldHJpY3MuY29udGVudFdpZHRoO1xuXG4gIGlmICh3aXRoUGFkZGluZykge1xuICAgIGhlaWdodCArPSBtZXRyaWNzLmNvbnRlbnRUb3AgKiAyO1xuICAgIHdpZHRoICs9IG1ldHJpY3MuY29udGVudExlZnQ7XG4gIH1cblxuICAvLyBhbmQgc2hyaW5rIGl0LCB0cmlnZ2VyaW5nIGEgYmxvY2tzcGFjZSByZXNpemUgd2hlbiB3ZSBkbyBzb1xuICBjb250YWluZXIuc3R5bGUuaGVpZ2h0ID0gaGVpZ2h0ICsgJ3B4JztcbiAgY29udGFpbmVyLnN0eWxlLndpZHRoID0gd2lkdGggKyAncHgnO1xuICBCbG9ja2x5LmNkb1V0aWxzLndvcmtzcGFjZVN2Z1Jlc2l6ZShibG9ja1NwYWNlKTtcbn1cblxuLyoqXG4gKiBSZW1vdmUgYWxsIENvbW1lbnQgbm9kZXMgZnJvbSBhIE5vZGUgdHJlZVxuICogQHBhcmFtIHtOb2RlfSByb290XG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUNvbW1lbnROb2Rlcyhyb290KSB7XG4gIGNvbnN0IGNvbW1lbnRXYWxrZXIgPSBkb2N1bWVudC5jcmVhdGVUcmVlV2Fsa2VyKFxuICAgIHJvb3QsXG4gICAgTm9kZUZpbHRlci5TSE9XX0NPTU1FTlQsXG4gICAge2FjY2VwdE5vZGU6IG5vZGUgPT4gTm9kZUZpbHRlci5GSUxURVJfQUNDRVBUfSxcbiAgICBmYWxzZVxuICApO1xuICAvLyBjb21tZW50V2Fsa2VyLmN1cnJlbnROb2RlIHdpbGwgYWx3YXlzIGVxdWFsIHRoZSByb290IHRvIHN0YXJ0IHdpdGgsIHNvXG4gIC8vIGNhbGwgbmV4dE5vZGUgdG8gbW92ZSBpdCBvbiB0byB0aGUgZmlyc3QgQ29tbWVudCBub2RlXG4gIGxldCBsYXN0ID0gY29tbWVudFdhbGtlci5uZXh0Tm9kZSgpO1xuICAvLyBpZiB0aGVyZSBhcmUgYW55IENvbW1lbnQgbm9kZXMgaW4gdGhlIHRyZWUsIHRoZSBmaXJzdCBvbmUgd2lsbCBub3cgYmVcbiAgLy8gZm91bmQgYXQgY29tbWVudFdhbGtlci5jdXJyZW50Tm9kZS4gSWYgd2UgcmVtb3ZlIGl0IHJpZ2h0IGF3YXksIHRoZW5cbiAgLy8gY29tbWVudFdhbGtlciB3b24ndCBiZSBhYmxlIHRvIGZpbmQgdGhlIG5leHQgbm9kZSwgc2luY2UgaXQgdHJpZXMgdG8gZG8gc29cbiAgLy8gYnkgd2Fsa2luZyB0aGUgYWN0dWFsIERPTSB0cmVlIGZyb20gaXRzIGN1cnJlbnQuIFRoZXJlZm9yZSB3ZSBvbmx5IHJlbW92ZVxuICAvLyBub2RlcyBhcyBjb21tZW50V2Fsa2VyIF9wYXNzZXNfIHRoZW0sIG5vdCBvbmNlIGl0IGFycml2ZXMuXG4gIGlmIChsYXN0KSB7XG4gICAgd2hpbGUgKGNvbW1lbnRXYWxrZXIubmV4dE5vZGUoKSkge1xuICAgICAgbGFzdC5yZW1vdmUoKTtcbiAgICAgIGxhc3QgPSBjb21tZW50V2Fsa2VyLmN1cnJlbnROb2RlO1xuICAgIH1cbiAgICBsYXN0LnJlbW92ZSgpO1xuICB9XG59XG5cbi8qKlxuICogQ29udmVydHMgYW55IGlubGluZSBYTUwgaW4gdGhlIGNvbnRhaW5lciBlbGVtZW50IGludG8gZW1iZWRkZWRcbiAqIHJlYWQtb25seSB3b3Jrc3BhY2VzIGluIGxvbmcgaW5zdHJ1Y3Rpb25zIG9yIGF1dGhvcmVkIGhpbnRzIGluIHRoZSBJbnN0cnVjdGlvbnMgcGFuZWwuXG4gKiBAcGFyYW0ge0VsZW1lbnR9IHhtbENvbnRhaW5lciBUaGUgZWxlbWVudCBpbiB3aGljaCB0byBzZWFyY2ggZm9yIFhNTFxuICogQHBhcmFtIHtCb29sZWFufSBpc1J0bCBUcnVlIGlmIHdlIGFyZSBkaXNwbGF5aW5nIGluIFJUTFxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFhtbFRvQmxvY2tseSh4bWxDb250YWluZXIsIGlzUnRsKSB7XG4gIC8vIGJsb2NrU3BhY2VDb250YWluZXJzIGFyZSBlbGVtZW50cyAoZGl2IG9yIHNwYW4pIHRoYXQgY29udGFpbiBlbWJlZGRlZCB3b3Jrc3BhY2VzXG4gIC8vIFdlIGFkZCB0aGUgY2xhc3MgbmFtZSAncmVhZG9ubHktYmxvY2stc3BhY2UtY29udGFpbmVyJyB0byB0aGVzZSBlbGVtZW50cyB3aGVuIHRoZXkgYXJlIGNyZWF0ZWRcbiAgLy8gc28gdGhhdCB0aGV5IGNhbiBiZSBlYXNpbHkgcmVtb3ZlZCAgdG8gcHJldmVudCB0aGUgZHVwbGljYXRpb24gb2YgYmxvY2tzIHdoZW4gdG9nZ2xpbmdcbiAgLy8gYmV0d2VlbiBsb25nL3Nob3J0IGluc3RydWN0aW9ucyBvciB3aGVuIHRoZSBibG9ja3MgYXJlIHJlbmRlcmVkIGluIHRoZSBsZXZlbGJ1aWxkZXJcbiAgLy8gZWRpdCBtb2RlLlxuICBBcnJheS5mcm9tKFxuICAgIHhtbENvbnRhaW5lci5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdyZWFkb25seS1ibG9jay1zcGFjZS1jb250YWluZXInKVxuICApLmZvckVhY2goY29udGFpbmVyID0+IGNvbnRhaW5lci5yZW1vdmUoKSk7XG5cbiAgY29uc3QgeG1scyA9IHhtbENvbnRhaW5lci5nZXRFbGVtZW50c0J5VGFnTmFtZSgneG1sJyk7XG4gIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoeG1scywgZnVuY3Rpb24gKHhtbCkge1xuICAgIC8vIFNraXAgY29udmVyc2lvbiBpZiBYTUwgYWxyZWFkeSBoYXMgYSBibG9ja3NwYWNlXG4gICAgaWYgKHhtbC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc3ZnJykubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gT3VyIFhNTCBpcyBvY2Nhc2lvbmFsbHkgZ2VuZXJhdGVkIGJ5IFJlYWN0LCBzbyB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB0b1xuICAgIC8vIHJlbW92ZSB0aG9zZSBgcmVhY3QtdGV4dGAgY29tbWVudHMgUmVhY3QgbGlrZXMgdG8gYWRkLiBUaGlzIGRvZXMgbWFrZVxuICAgIC8vIHRoaW5ncyBoYXJkZXIgZm9yIFJlYWN0IHdoZW4gaXQgdHJpZXMgdG8gdXBkYXRlLCBzbyBpZGVhbGx5IHdlJ2QgZmluZCBhXG4gICAgLy8gd2F5IHRvIGRvIHRoaXMgd2l0aG91dCBmaWdodGluZyBSZWFjdCBsaWtlIHRoaXMuIFBlcmhhcHMgZG8gYWxsIG9mIHRoaXNcbiAgICAvLyBkaXJlY3RseSBpbiBSZWFjdD9cbiAgICByZW1vdmVDb21tZW50Tm9kZXMoeG1sKTtcblxuICAgIC8vIGVtYmVkZGVkIGJsb2NrcyBjYW4gYmUgZGlzcGxheWVkIGVpdGhlciBcImlubGluZVwiIGFzIHBhcnQgb2YgYSBwYXJhZ3JhcGhcbiAgICAvLyBvciBcImJsb2NrXCIgYWxsIG9uIHRoZWlyIG93bi4gXCJibG9ja1wiIGlzIHRoZSBkZWZhdWx0LlxuICAgIGNvbnN0IGlubGluZSA9IHhtbC5wYXJlbnROb2RlLnRhZ05hbWUgPT09ICdQJztcblxuICAgIC8vIGNyZWF0ZSBhIGNvbnRhaW5lciBhbmQgaW5zZXJ0IHRoZSBibG9ja3NwYWNlIGludG8gaXRcbiAgICBjb25zdCBibG9ja1NwYWNlQ29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpbmxpbmUgPyAnc3BhbicgOiAnZGl2Jyk7XG4gICAgYmxvY2tTcGFjZUNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCdyZWFkb25seS1ibG9jay1zcGFjZS1jb250YWluZXInKTtcbiAgICBpZiAoaW5saW5lKSB7XG4gICAgICAvLyBTVkdzIGRvbid0IHBsYXkgbmljZWx5IGlmIHRoZXkncmUgcmVuZGVyZWQgaW50byBwdXJlbHkgaW5saW5lIGVsZW1lbnRzLFxuICAgICAgLy8gc28gaWYgb3VyIGNvbnRhaW5lciBpcyBhIHNwYW4gaXQgc2hvdWxkIGJlIGlubGluZS1ibG9ja1xuICAgICAgYmxvY2tTcGFjZUNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZS1ibG9jayc7XG4gICAgfVxuXG4gICAgeG1sLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGJsb2NrU3BhY2VDb250YWluZXIsIHhtbCk7XG5cbiAgICAvLyBEb24ndCByZW5kZXIgdGhlIHJhdyBYTUxcbiAgICB4bWwuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICBjb25zdCBibG9ja1NwYWNlID0gQmxvY2tseS5jcmVhdGVFbWJlZGRlZFdvcmtzcGFjZShcbiAgICAgIGJsb2NrU3BhY2VDb250YWluZXIsXG4gICAgICB4bWwsXG4gICAgICB7XG4gICAgICAgIG5vU2Nyb2xsaW5nOiB0cnVlLFxuICAgICAgICBpbmxpbmU6IGlubGluZSxcbiAgICAgICAgcnRsOiBpc1J0bCxcbiAgICAgIH1cbiAgICApO1xuXG4gICAgLy8gZ2l2ZSBibG9jayBlbWJlZHMgbW9yZSBwYWRkaW5nIHRoYW4gaW5saW5lXG4gICAgY29uc3Qgd2l0aFBhZGRpbmcgPSAhaW5saW5lO1xuXG4gICAgLy8gZmluYWxseSwgc2hyaW5rIHRoZSBjb250YWluZXIgdG8gZXhhY3RseSBjb250YWluIHRoZSBibG9ja3NwYWNlLiBOb3RlXG4gICAgLy8gdGhhdCBzb21lIGJsb2NrcyAobGlrZSBLMSBoYXJ2ZXN0ZXIgYmxvY2tzLCB3aGljaCB1c2UgRmllbGRJbWFnZXMpIGNhblxuICAgIC8vIHJlc2l6ZSBhZnRlciBpbml0aWFsIHJlbmRlciwgc28gd2UgYWxzbyB3YW50IHRvIHJlc2l6ZSB0aGUgY29udGFpbmVyXG4gICAgLy8gd2hlbmV2ZXIgYSBibG9ja1NwYWNlQ2hhbmdlIHJlc3VsdHMgaW4gdGhlIGNvbnRlbnQgc2l6ZSBjaGFuZ2luZy5cbiAgICBsZXQgbWV0cmljcyA9IGJsb2NrU3BhY2UuZ2V0TWV0cmljcygpO1xuICAgIEJsb2NrbHkuYWRkQ2hhbmdlTGlzdGVuZXIoYmxvY2tTcGFjZSwgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgb2xkSGVpZ2h0ID0gbWV0cmljcy5jb250ZW50SGVpZ2h0O1xuICAgICAgY29uc3Qgb2xkV2lkdGggPSBtZXRyaWNzLmNvbnRlbnRXaWR0aDtcbiAgICAgIGNvbnN0IG5ld0hlaWdodCA9IGJsb2NrU3BhY2UuZ2V0TWV0cmljcygpLmNvbnRlbnRIZWlnaHQ7XG4gICAgICBjb25zdCBuZXdXaWR0aCA9IGJsb2NrU3BhY2UuZ2V0TWV0cmljcygpLmNvbnRlbnRXaWR0aDtcblxuICAgICAgLy8gaWYgdGhlIGJsb2Nrc3BhY2UncyBjb250ZW50IHNpemUgaGFzIGNoYW5nZWQsIGtpY2sgb2ZmIGFub3RoZXIgc3luYyBhbmRcbiAgICAgIC8vIHNhdmUgdGhlIG5ldyBtZXRyaWNzIGFzIHRoZSBvbGQgb25lc1xuICAgICAgaWYgKG5ld0hlaWdodCAhPT0gb2xkSGVpZ2h0IHx8IG5ld1dpZHRoICE9PSBvbGRXaWR0aCkge1xuICAgICAgICBzaHJpbmtCbG9ja1NwYWNlQ29udGFpbmVyKGJsb2NrU3BhY2UsIHdpdGhQYWRkaW5nKTtcbiAgICAgICAgbWV0cmljcyA9IGJsb2NrU3BhY2UuZ2V0TWV0cmljcygpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgc2hyaW5rQmxvY2tTcGFjZUNvbnRhaW5lcihibG9ja1NwYWNlLCB3aXRoUGFkZGluZyk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2hvdWxkRGlzcGxheUNoYXRUaXBzKHNraW5JZCkge1xuICAvKmVzbGludC1kaXNhYmxlIG5vLWZhbGx0aHJvdWdoKi9cbiAgc3dpdGNoIChza2luSWQpIHtcbiAgICAvLyBza2lucyB3aXRob3V0IGF2YXRhcnNcbiAgICBjYXNlICdqaWdzYXcnOlxuICAgIC8vIHNraW5zIHdpdGggbGljZW5zZWQgYXZhdGFyc1xuICAgIGNhc2UgJ2luZmluaXR5JzpcbiAgICBjYXNlICdhbm5hJzpcbiAgICBjYXNlICdlbHNhJzpcbiAgICBjYXNlICdjcmFmdCc6XG4gICAgLy8gc3RhciB3YXJzXG4gICAgY2FzZSAnaG9jMjAxNSc6XG4gICAgY2FzZSAnaG9jMjAxNXgnOlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvKmVzbGludC1lbmFibGUgbm8tZmFsbHRocm91Z2gqL1xufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nO1xuXG5pbXBvcnQge0ltYWdlUHJldmlld30gZnJvbSAnLi4vaW5zdHJ1Y3Rpb25zL0FuaUdpZlByZXZpZXcnO1xuXG4vKipcbiAqIEEgYmFzaWMgaGVscGVyIGZ1bmN0aW9uIHRvIGVuYWJsZSB0aGUgXCJleHBhbmRhYmxlIGltYWdlc1wiIHdlIHVzZSBpbiBvdXJcbiAqICAgICBjdXJyaWN1bHVtIGNvbnRlbnQuXG4gKlxuICogQHBhcmFtIHtFbGVtZW50fSBub2RlIC0gVGhlIERPTSBub2RlIGNvbnRhaW5pbmcgdGhlIGltYWdlcy4gU3VwcG9ydHMgbm9kZXNcbiAqICAgICB3aXRoIG11bHRpcGxlIGNvbnRhaW5lZCBpbWFnZXMuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBzaG93SW1hZ2VEaWFsb2cgLSBUaGUgbWV0aG9kIHRvIGNhbGwgd2hlbiB0aGUgdXNlciBjbGlja3NcbiAqICAgICBvbiB0aGUgaW1hZ2UsIHdoaWNoIHdpbGwgc2hvdyB0aGUgbW9kYWwgZGlhbG9nIGNvbnRhaW5pbmcgdGhlIGV4cGFuZGVkXG4gKiAgICAgaW1hZ2UuXG4gKlxuICogQHNlZSBAY2RvL2FwcHMvc3JjL3RlbXBsYXRlcy9wbHVnaW5zL2V4cGFuZGFibGVJbWFnZXMuanNcbiAqIEBzZWUgQGNkby9hcHBzL3NyYy9yZWR1eC9pbnN0cnVjdGlvbnNEaWFsb2cuanNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlckV4cGFuZGFibGVJbWFnZXMobm9kZSwgc2hvd0ltYWdlRGlhbG9nKSB7XG4gIGNvbnN0IGV4cGFuZGFibGVJbWFnZXMgPSBub2RlLnF1ZXJ5U2VsZWN0b3JBbGwoJy5leHBhbmRhYmxlLWltYWdlJyk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZXhwYW5kYWJsZUltYWdlcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGV4cGFuZGFibGVJbWcgPSBleHBhbmRhYmxlSW1hZ2VzW2ldO1xuXG4gICAgLypcbiAgICAgKiBUT0RPOiBXaGVuIHRoaXMgbWV0aG9kIGlzIHVzZWQgaW4gdGhlIGNvbnRleHQgb2YgYW4gZXhpc3RpbmcgUmVhY3RcbiAgICAgKiBjb21wb25lbnQsIGl0IHJhaXNlcyB0aGUgZm9sbG93aW5nIHdhcm5pbmc6XG4gICAgICpcbiAgICAgKiA+IFJlcGxhY2luZyBSZWFjdC1yZW5kZXJlZCBjaGlsZHJlbiB3aXRoIGEgbmV3IHJvb3QgY29tcG9uZW50LiBJZiB5b3VcbiAgICAgKiA+IGludGVuZGVkIHRvIHVwZGF0ZSB0aGUgY2hpbGRyZW4gb2YgdGhpcyBub2RlLCB5b3Ugc2hvdWxkIGluc3RlYWQgaGF2ZVxuICAgICAqID4gdGhlIGV4aXN0aW5nIGNoaWxkcmVuIHVwZGF0ZSB0aGVpciBzdGF0ZSBhbmQgcmVuZGVyIHRoZSBuZXcgY29tcG9uZW50c1xuICAgICAqID4gaW5zdGVhZCBvZiBjYWxsaW5nIFJlYWN0RE9NLnJlbmRlci5cbiAgICAgKlxuICAgICAqIFdlIHNob3VsZCBwcm9iYWJseSByZWJ1aWxkIHRoaXMgaW4gc3VjaCBhIHdheSBhcyB0byBub3QgdmlvbGF0ZSBSZWFjdCdzXG4gICAgICogZXhwZWN0YXRpb25zIGxpa2UgdGhpcy5cbiAgICAgKi9cbiAgICBSZWFjdERPTS5yZW5kZXIoXG4gICAgICA8SW1hZ2VQcmV2aWV3XG4gICAgICAgIHVybD17ZXhwYW5kYWJsZUltZy5kYXRhc2V0LnVybH1cbiAgICAgICAgbm9WaXN1YWxpemF0aW9uPXtmYWxzZX1cbiAgICAgICAgc2hvd0luc3RydWN0aW9uc0RpYWxvZz17KCkgPT5cbiAgICAgICAgICBzaG93SW1hZ2VEaWFsb2coZXhwYW5kYWJsZUltZy5kYXRhc2V0LnVybClcbiAgICAgICAgfVxuICAgICAgLz4sXG4gICAgICBleHBhbmRhYmxlSW1nXG4gICAgKTtcbiAgfVxufVxuIiwiaW1wb3J0IHtsYXVuY2hBc3luY30gZnJvbSAnQG1pY3Jvc29mdC9pbW1lcnNpdmUtcmVhZGVyLXNkayc7XG5cbi8qKlxuICogR2VuZXJhdGVzIGEgdGVtcG9yYXJ5IGF1dGhlbnRpY2F0aW9uIHRva2VuIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGNhbGwgdGhlIEltbWVyc2l2ZSBSZWFkZXIgQVBJLlxuICogQHJldHVybnMge1Byb21pc2U8dW5rbm93bj59IHsgdG9rZW46IDxhdXRoX3Rva2VuPiwgc3ViZG9tYWluOiA8YXp1cmVfc3ViZG9tYWluPiB9XG4gKi9cbmZ1bmN0aW9uIGdldFRva2VuQW5kU3ViZG9tYWluQXN5bmMoKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgJC5hamF4KHtcbiAgICAgIHVybDogJy9hcGkvaW1tZXJzaXZlX3JlYWRlcl90b2tlbicsXG4gICAgICB0eXBlOiAnR0VUJyxcbiAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIGlmIChkYXRhLmVycm9yKSB7XG4gICAgICAgICAgcmVqZWN0KGRhdGEuZXJyb3IpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIENsaWNrIGhhbmRsZXIgZm9yIHRoZSBJbW1lcnNpdmUgUmVhZGVyIEJ1dHRvbiB3aGljaCB3aWxsIHRha2UgdGhlIGdpdmVuIHRleHQgYW5kIGxhdW5jaCB0aGUgTWljcm9zb2Z0IEltbWVyc2l2ZVxuICogUmVhZGVyIGludGVyZmFjZS4gVGhpcyBpbnRlcmZhY2UgZ2l2ZXMgc3R1ZGVudCdzIG1hbnkgdG9vbHMgdG8gY29udHJvbCBob3cgdGhlIHRleHQgaXMgcHJlc2VudGVkIHRoZW0uXG4gKiBAcGFyYW0gbG9jYWxlIFRoZSBsb2NhbGUgb2YgdGhlIHRleHQgZS5nLiAnZW4tVVMnLCAnYXItU0EnLCBldGMuXG4gKiBAcGFyYW0gdGl0bGUgVGhlIG9wdGlvbmFsIHRpdGxlIHRvIHNob3cgYWJvdmUgdGhlIGdpdmVuIHRleHQgaW4gdGhlIEltbWVyc2l2ZSBSZWFkZXIuXG4gKiBAcGFyYW0gdGV4dCBUaGUgdGV4dCB0aGUgdXNlciB0aGUgd2FudHMgdG8gcmVhZCBtb3JlIGVhc2lseS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaGFuZGxlTGF1bmNoSW1tZXJzaXZlUmVhZGVyKGxvY2FsZSwgdGl0bGUsIHRleHQpIHtcbiAgZ2V0VG9rZW5BbmRTdWJkb21haW5Bc3luYygpXG4gICAgLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICBjb25zdCB0b2tlbiA9IHJlc3BvbnNlLnRva2VuO1xuICAgICAgY29uc3Qgc3ViZG9tYWluID0gcmVzcG9uc2Uuc3ViZG9tYWluO1xuICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgdGl0bGU6IHRpdGxlLFxuICAgICAgICBjaHVua3M6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb250ZW50OiBzYW5pdGl6ZVRleHQodGV4dCksXG4gICAgICAgICAgICBsYW5nOiBsb2NhbGUsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgICBsYXVuY2hBc3luYyh0b2tlbiwgc3ViZG9tYWluLCBkYXRhLCB7dWlaSW5kZXg6IDIxMTN9KTtcbiAgICB9KVxuICAgIC5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBzYW5pdGl6ZVRleHQodGV4dCkge1xuICBpZiAoIXRleHQpIHtcbiAgICByZXR1cm4gdGV4dDtcbiAgfVxuICAvLyBTdHJpcCBYTUxcbiAgdGV4dCA9IHRleHQucmVwbGFjZSgvPFtePl0qPi9nLCAnJyk7XG5cbiAgLy8gU3RyaXAgbWFya2Rvd24gY2hhcmFjdGVyc1xuICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9bYCpdL2csICcnKTtcbiAgcmV0dXJuIHRleHQ7XG59XG4iLCJpbXBvcnQge1BheWxvYWRBY3Rpb24sIGNyZWF0ZVNsaWNlfSBmcm9tICdAcmVkdXhqcy90b29sa2l0JztcblxuZXhwb3J0IGludGVyZmFjZSBCbG9ja2x5U3RhdGUge1xuICBoYXNJbmNvbXBhdGlibGVTb3VyY2VzOiBib29sZWFuO1xuICBmYWlsZWRUb0dlbmVyYXRlQ29kZTogYm9vbGVhbjtcbn1cblxuY29uc3QgaW5pdGlhbFN0YXRlOiBCbG9ja2x5U3RhdGUgPSB7XG4gIC8vIGhhc0luY29tcGF0aWJsZVNvdXJjZXMgaXMgc2V0IHRvIHRydWUgaWYgd2UgdHJ5IHRvIGxvYWQganNvbiBzb3VyY2VzIGluXG4gIC8vIENETyBCbG9ja2x5LCB3aGljaCBvbmx5IHN1cHBvcnRzIHhtbC5cbiAgaGFzSW5jb21wYXRpYmxlU291cmNlczogZmFsc2UsXG4gIC8vIElmIHdlIGZhaWxlZCB0byBnZW5lcmF0ZSBjb2RlIGZyb20gYmxvY2tzIGZvciBhbnkgcmVhc29uLlxuICBmYWlsZWRUb0dlbmVyYXRlQ29kZTogZmFsc2UsXG59O1xuXG5jb25zdCBibG9ja2x5U2xpY2UgPSBjcmVhdGVTbGljZSh7XG4gIG5hbWU6ICdibG9ja2x5JyxcbiAgaW5pdGlhbFN0YXRlLFxuICByZWR1Y2Vyczoge1xuICAgIHNldEhhc0luY29tcGF0aWJsZVNvdXJjZXMoc3RhdGUsIGFjdGlvbjogUGF5bG9hZEFjdGlvbjxib29sZWFuPikge1xuICAgICAgc3RhdGUuaGFzSW5jb21wYXRpYmxlU291cmNlcyA9IGFjdGlvbi5wYXlsb2FkO1xuICAgIH0sXG4gICAgc2V0RmFpbGVkVG9HZW5lcmF0ZUNvZGUoc3RhdGUsIGFjdGlvbjogUGF5bG9hZEFjdGlvbjxib29sZWFuPikge1xuICAgICAgc3RhdGUuZmFpbGVkVG9HZW5lcmF0ZUNvZGUgPSBhY3Rpb24ucGF5bG9hZDtcbiAgICB9LFxuICB9LFxufSk7XG5cbmV4cG9ydCBjb25zdCB7c2V0SGFzSW5jb21wYXRpYmxlU291cmNlcywgc2V0RmFpbGVkVG9HZW5lcmF0ZUNvZGV9ID1cbiAgYmxvY2tseVNsaWNlLmFjdGlvbnM7XG5cbmV4cG9ydCBkZWZhdWx0IGJsb2NrbHlTbGljZS5yZWR1Y2VyO1xuIiwiLyoqIEBmaWxlIFRyYWNrIHRoZSBhcHAncyBsYXlvdXQgKi9cbmltcG9ydCB7UGF5bG9hZEFjdGlvbiwgY3JlYXRlU2VsZWN0b3IsIGNyZWF0ZVNsaWNlfSBmcm9tICdAcmVkdXhqcy90b29sa2l0JztcblxuZXhwb3J0IGludGVyZmFjZSBMYXlvdXRTdGF0ZSB7XG4gIHZpc3VhbGl6YXRpb25TY2FsZTogbnVtYmVyIHwgbnVsbDtcbn1cblxuY29uc3QgaW5pdGlhbFN0YXRlOiBMYXlvdXRTdGF0ZSA9IHtcbiAgdmlzdWFsaXphdGlvblNjYWxlOiBudWxsLFxufTtcblxuY29uc3QgbGF5b3V0U2xpY2UgPSBjcmVhdGVTbGljZSh7XG4gIG5hbWU6ICdsYXlvdXQnLFxuICBpbml0aWFsU3RhdGUsXG4gIHJlZHVjZXJzOiB7XG4gICAgc2V0VmlzdWFsaXphdGlvblNjYWxlKHN0YXRlLCBhY3Rpb246IFBheWxvYWRBY3Rpb248bnVtYmVyPikge1xuICAgICAgc3RhdGUudmlzdWFsaXphdGlvblNjYWxlID0gYWN0aW9uLnBheWxvYWQ7XG4gICAgfSxcbiAgfSxcbn0pO1xuXG5leHBvcnQgY29uc3Qge3NldFZpc3VhbGl6YXRpb25TY2FsZX0gPSBsYXlvdXRTbGljZS5hY3Rpb25zO1xuXG5jb25zdCBzZWxlY3RTZWxmID0gKHN0YXRlOiB7bGF5b3V0OiBMYXlvdXRTdGF0ZX0pID0+IHN0YXRlLmxheW91dDtcblxuZXhwb3J0IGNvbnN0IGdldFZpc3VhbGl6YXRpb25TY2FsZSA9IGNyZWF0ZVNlbGVjdG9yKFxuICBzZWxlY3RTZWxmLFxuICBzdGF0ZSA9PiBzdGF0ZT8udmlzdWFsaXphdGlvblNjYWxlXG4pO1xuXG5leHBvcnQgZGVmYXVsdCBsYXlvdXRTbGljZS5yZWR1Y2VyO1xuIl0sIm5hbWVzIjpbIl91dGlscyIsInJlcXVpcmUiLCJfYWN0aXZpdHlVdGlscyIsInNlc3Npb25TdG9yYWdlIiwid2luZG93IiwiY2xpZW50U3RhdGUiLCJtb2R1bGUiLCJleHBvcnRzIiwibGV2ZWxQcm9ncmVzc0J5U2NyaXB0IiwicHJvZ3Jlc3NKc29uIiwiZ2V0SXRlbSIsIkpTT04iLCJwYXJzZSIsImUiLCJyZWNvcmRWaXN1YWxFbGVtZW50U2VlbiIsInZpc3VhbEVsZW1lbnRUeXBlIiwidmlzdWFsRWxlbWVudElkIiwiZWxlbWVudFNlZW4iLCJlbGVtZW50U2Vlbkpzb24iLCJ0cnlTZXRTZXNzaW9uU3RvcmFnZSIsInN0cmluZ2lmeSIsImhhc1NlZW5WaXN1YWxFbGVtZW50IiwiY3JlYXRlS2V5Iiwic2NyaXB0TmFtZSIsImxldmVsSWQiLCJwcmVmaXgiLCJxdWVyeVBhcmFtcyIsIkVYUElSWV9EQVlTIiwiTUFYSU1VTV9DQUNIQUJMRV9SRVNVTFQiLCJyZXNldCIsImNsZWFyIiwiY2xlYXJQcm9ncmVzcyIsInJlbW92ZUl0ZW0iLCJyZW1vdmVJdGVtc1dpdGhQcmVmaXgiLCJPYmplY3QiLCJrZXlzIiwiZmlsdGVyIiwia2V5Iiwic3RhcnRzV2l0aCIsImZvckVhY2giLCJzb3VyY2VGb3JMZXZlbCIsInRpbWVzdGFtcCIsImRhdGEiLCJwYXJzZWQiLCJzb3VyY2UiLCJ3cml0ZVNvdXJjZUZvckxldmVsIiwidW5kZWZpbmVkIiwidHJhY2tQcm9ncmVzcyIsInRlc3RSZXN1bHQiLCJwcm9ncmVzc0RhdGEiLCJzYXZlZFJlc3VsdCIsIm1lcmdlZFJlc3VsdCIsIm1lcmdlQWN0aXZpdHlSZXN1bHQiLCJsZXZlbFByb2dyZXNzIiwiaGFzU2VlblZpZGVvIiwidmlkZW9JZCIsInJlY29yZFZpZGVvU2VlbiIsImhhc1NlZW5DYWxsb3V0IiwiY2FsbG91dElkIiwicmVjb3JkQ2FsbG91dFNlZW4iLCJsb2NhbGUiLCJzdGF0ZSIsImFyZ3VtZW50cyIsImxlbmd0aCIsImFjdGlvbiIsInR5cGUiLCJTRVRfUlRMIiwiaXNSdGwiLCJzZXRSdGwiLCJzZXRSdGxGcm9tRE9NIiwiaXNSdGxGcm9tRE9NIiwiaGVhZCIsImRvY3VtZW50IiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJwYXJlbnRFbGVtZW50IiwiZGlyIiwiZ2V0QXR0cmlidXRlIiwidG9Mb3dlckNhc2UiLCJ0ZXN0SW1hZ2VBY2Nlc3MiLCJ1cmwiLCJlbGVtZW50Iiwic3VjY2Vzc0NhbGxiYWNrIiwiZmFpbHVyZUNhbGxiYWNrIiwidGltZW91dE1zIiwidmlkZW9FbGVtZW50IiwiY3JlYXRlRWxlbWVudCIsIkltYWdlIiwiY2FsbGVkIiwiZmluaXNoIiwiY2FsbGJhY2siLCJjbGVhclRpbWVvdXQiLCJ0aW1lb3V0Iiwic2V0VGltZW91dCIsIm9uZXJyb3IiLCJvbmR1cmF0aW9uY2hhbmdlIiwib25sb2FkIiwic3JjIiwidGVzdEltYWdlcyIsInB1c2giLCJjb21tb25TdHlsZXMiLCJzdHlsZUNvbnN0YW50cyIsImNvbG9yIiwiaGlkZGVuIiwiZGlzcGxheSIsInB1cnBsZUhlYWRlciIsImhlaWdodCIsImJhY2tncm91bmRDb2xvciIsInB1cnBsZSIsIndoaXRlIiwib3ZlcmZsb3dZIiwiV2Via2l0VXNlclNlbGVjdCIsIk1velVzZXJTZWxlY3QiLCJtc1VzZXJTZWxlY3QiLCJ1c2VyU2VsZWN0IiwicHVycGxlSGVhZGVyVW5mb2N1c2VkIiwibGlnaHRlcl9wdXJwbGUiLCJuZXV0cmFsX3doaXRlIiwidGVhY2hlckJsdWVIZWFkZXIiLCJjeWFuIiwibGlnaHRlc3RfY3lhbiIsInRlYWNoZXJIZWFkZXJVbmZvY3VzZWQiLCJkYXJrX2NoYXJjb2FsIiwibWluZWNyYWZ0SGVhZGVyIiwiYnV0dG9uIiwicGFkZGluZ1RvcCIsInBhZGRpbmdCb3R0b20iLCJmb250U2l6ZSIsImJ1YmJsZSIsImJsYWNrIiwibWFyZ2luQm90dG9tIiwicG9zaXRpb24iLCJjdXJzb3IiLCJhZGRSZWFkeUxpc3RlbmVyIiwicmVhZHlTdGF0ZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJnZXRUb3VjaEV2ZW50TmFtZSIsImV2ZW50TmFtZSIsImlzSUUxMVRvdWNoIiwibmF2aWdhdG9yIiwicG9pbnRlckVuYWJsZWQiLCJpc0lFMTBUb3VjaCIsIm1zUG9pbnRlckVuYWJsZWQiLCJUT1VDSF9NQVAiLCJhZGRFdmVudCIsImhhbmRsZXIiLCJzdXBwcmVzc1RvdWNoRGVmYXVsdCIsImJvdW5kRXZlbnRzIiwiYmluZEV2ZW50IiwibmFtZSIsInVuYmluZEV2ZW50IiwiZXZlbnRJbmZvIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInRvdWNoRXZlbnQiLCJwcmV2ZW50RGVmYXVsdCIsImluY2x1ZGVzIiwiY2FsbCIsInRoaXMiLCJhZGRNb3VzZURvd25Ub3VjaEV2ZW50IiwiYWRkTW91c2VVcFRvdWNoRXZlbnQiLCJhZGRNb3VzZU1vdmVUb3VjaEV2ZW50IiwiYWRkQ2xpY2tUb3VjaEV2ZW50IiwiY2xpY2siLCJzdGFuZGFyZCIsImllMTAiLCJpZTExIiwibW91c2Vkb3duIiwibW91c2V1cCIsIm1vdXNlbW92ZSIsImlzTW9iaWxlIiwidGVzdCIsInVzZXJBZ2VudCIsImlzV2luZG93c1RvdWNoIiwiaXNBbmRyb2lkIiwiaXNJT1MiLCJpc0lQYWQiLCJyZWR1Y2VyIiwiYXV0aG9yZWRIaW50c0luaXRpYWxTdGF0ZSIsIkVOUVVFVUVfSElOVFMiLCJfYmlzZWN0MiIsIl9zbGljZWRUb0FycmF5IiwiciIsIl9hcnJheVdpdGhIb2xlcyIsIkFycmF5IiwiaXNBcnJheSIsIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsImwiLCJ0IiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJuIiwiaSIsInUiLCJhIiwiZiIsIm8iLCJuZXh0IiwiZG9uZSIsInZhbHVlIiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJmcm9tIiwiX25vbkl0ZXJhYmxlUmVzdCIsIlR5cGVFcnJvciIsImJpc2VjdCIsImhpbnRzIiwiaGludCIsImhpbnRzVXNlZElkcyIsImluZGV4T2YiLCJoaW50SWQiLCJzZWVuIiwidW5zZWVuIiwiYXNzaWduIiwidW5zZWVuSGludHMiLCJjb25jYXQiLCJzZWVuSGludHMiLCJTSE9XX05FWFRfSElOVCIsIm5leHRIaW50IiwiYWxyZWFkeVNlZW4iLCJESVNQTEFZX01JU1NJTkdfQkxPQ0tfSElOVFMiLCJzZWVuSGludCIsImhpbnRUeXBlIiwic29tZSIsIm5ld0hpbnQiLCJuZXdIaW50c1RvRW5xdWV1ZSIsImV2ZXJ5IiwidW5zZWVuTm9uQ29udGV4dHVhbEhpbnRzIiwibmV3VW5zZWVuSGludHMiLCJuZXdTZWVuSGludHMiLCJlbnF1ZXVlSGludHMiLCJzaG93TmV4dEhpbnQiLCJkaXNwbGF5TWlzc2luZ0Jsb2NrSGludHMiLCJpbml0aWFsU3RhdGUiLCJTSE9XX0ZFRURCQUNLIiwiZGlzcGxheWluZ1NoYXJlQ29udHJvbHMiLCJfb2JqZWN0U3ByZWFkIiwiZGlzcGxheWluZ0ZlZWRiYWNrIiwiSElERV9GRUVEQkFDSyIsIlNFVF9CTE9DS19MSU1JVCIsImJsb2NrTGltaXQiLCJTRVRfRkVFREJBQ0tfREFUQSIsImlzQ2hhbGxlbmdlIiwiaXNQZXJmZWN0IiwiYmxvY2tzVXNlZCIsImRpc3BsYXlGdW5vbWV0ZXIiLCJzdHVkZW50Q29kZSIsImZlZWRiYWNrSW1hZ2UiLCJTRVRfQUNISUVWRU1FTlRTIiwiYWNoaWV2ZW1lbnRzIiwiZGlzcGxheWluZ0NvZGUiLCJtZXNzYWdlIiwiY29kZSIsInNob3dGZWVkYmFjayIsImhpZGVGZWVkYmFjayIsInNldEJsb2NrTGltaXQiLCJzZXRGZWVkYmFja0RhdGEiLCJwcm9wcyIsInNldEFjaGlldmVtZW50cyIsImluc3RydWN0aW9uc0luaXRpYWxTdGF0ZSIsIlNFVF9DT05TVEFOVFMiLCJzaG9ydEluc3RydWN0aW9ucyIsImxvbmdJbnN0cnVjdGlvbnMiLCJFcnJvciIsIm5vSW5zdHJ1Y3Rpb25zV2hlbkNvbGxhcHNlZCIsInNob3J0SW5zdHJ1Y3Rpb25zMiIsImR5bmFtaWNJbnN0cnVjdGlvbnMiLCJoYXNDb250YWluZWRMZXZlbHMiLCJvdmVybGF5VmlzaWJsZSIsInRlYWNoZXJNYXJrZG93biIsImxldmVsVmlkZW9zIiwibWFwUmVmZXJlbmNlIiwicmVmZXJlbmNlTGlua3MiLCJtdXRlQmFja2dyb3VuZE11c2ljIiwidW5tdXRlQmFja2dyb3VuZE11c2ljIiwicHJvZ3JhbW1pbmdFbnZpcm9ubWVudCIsImlzQ29sbGFwc2VkIiwiVE9HR0xFX0lOU1RSVUNUSU9OU19DT0xMQVBTRUQiLCJTRVRfSU5TVFJVQ1RJT05TX1JFTkRFUkVEX0hFSUdIVCIsImFsbG93UmVzaXplIiwicmVuZGVyZWRIZWlnaHQiLCJleHBhbmRlZEhlaWdodCIsIlNFVF9JTlNUUlVDVElPTlNfTUFYX0hFSUdIVF9ORUVERUQiLCJtYXhOZWVkZWRIZWlnaHQiLCJTRVRfSU5TVFJVQ1RJT05TX01BWF9IRUlHSFRfQVZBSUxBQkxFIiwibWF4QXZhaWxhYmxlSGVpZ2h0IiwiTWF0aCIsIm1pbiIsIlNFVF9BTExPV19JTlNUUlVDVElPTlNfUkVTSVpFIiwiU0VUX0hBU19BVVRIT1JFRF9ISU5UUyIsImhhc0F1dGhvcmVkSGludHMiLCJTRVRfVFRTX0FVVE9QTEFZX0VOQUJMRURfRk9SX0xFVkVMIiwidHRzQXV0b3BsYXlFbmFibGVkRm9yTGV2ZWwiLCJTRVRfQ09ERV9SRVZJRVdfRU5BQkxFRF9GT1JfTEVWRUwiLCJjb2RlUmV2aWV3RW5hYmxlZEZvckxldmVsIiwiU0VUX0ZFRURCQUNLIiwiZmVlZGJhY2siLCJISURFX09WRVJMQVkiLCJkeW5hbWljSW5zdHJ1Y3Rpb25zRGlzbWlzc0NhbGxiYWNrIiwiU0VUX0RZTkFNSUNfSU5TVFJVQ1RJT05TX0RFRkFVTFRTIiwiZHluYW1pY0luc3RydWN0aW9uc0RlZmF1bHRzIiwiU0VUX0RZTkFNSUNfSU5TVFJVQ1RJT05TX0tFWSIsImR5bmFtaWNJbnN0cnVjdGlvbnNLZXkiLCJvcHRpb25zIiwic2hvd092ZXJsYXkiLCJTRVRfRFlOQU1JQ19JTlNUUlVDVElPTlNfRElTTUlTU19DQUxMQkFDSyIsIlNFVF9UQV9SVUJSSUMiLCJ0YVJ1YnJpYyIsImdldER5bmFtaWNJbnN0cnVjdGlvbnMiLCJfdHlwZW9mIiwicHJvdG90eXBlIiwib3duS2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJhcHBseSIsIl9kZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJfdG9Qcm9wZXJ0eUtleSIsIl90b1ByaW1pdGl2ZSIsInRvUHJpbWl0aXZlIiwiU3RyaW5nIiwiTnVtYmVyIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJJbmZpbml0eSIsInNldEluc3RydWN0aW9uc0NvbnN0YW50cyIsIl9yZWYiLCJzZXRJbnN0cnVjdGlvbnNSZW5kZXJlZEhlaWdodCIsInRvZ2dsZUluc3RydWN0aW9uc0NvbGxhcHNlZCIsInNldEluc3RydWN0aW9uc01heEhlaWdodE5lZWRlZCIsInNldEluc3RydWN0aW9uc01heEhlaWdodEF2YWlsYWJsZSIsInNldEFsbG93SW5zdHJ1Y3Rpb25zUmVzaXplIiwic2V0SGFzQXV0aG9yZWRIaW50cyIsInNldFR0c0F1dG9wbGF5RW5hYmxlZEZvckxldmVsIiwic2V0Q29kZVJldmlld0VuYWJsZWRGb3JMZXZlbCIsInNldEZlZWRiYWNrIiwiaGlkZU92ZXJsYXkiLCJzZXREeW5hbWljSW5zdHJ1Y3Rpb25zRGVmYXVsdHMiLCJzZXREeW5hbWljSW5zdHJ1Y3Rpb25zS2V5Iiwic2V0RHluYW1pY0luc3RydWN0aW9uc092ZXJsYXlEaXNtaXNzQ2FsbGJhY2siLCJzZXRUYVJ1YnJpYyIsInN1YnN0aXR1dGVJbnN0cnVjdGlvbkltYWdlcyIsImh0bWxUZXh0Iiwic3Vic3RpdHV0aW9ucyIsInByb3AiLCJpbWFnZVVybCIsInN1YnN0aXR1dGlvbkh0bWwiLCJyZSIsIlJlZ0V4cCIsInJlcGxhY2UiLCJkZXRlcm1pbmVJbnN0cnVjdGlvbnNDb25zdGFudHMiLCJjb25maWciLCJsZXZlbCIsImluc3RydWN0aW9uczIiLCJpbnB1dE91dHB1dFRhYmxlIiwic2tpbiIsImluc3RydWN0aW9uczJJbWFnZVN1YnN0aXR1dGlvbnMiLCJyZXBsYWNlSW5zdHJ1Y3Rpb25zIiwiaGFzSW5zdHJ1Y3Rpb25zVG9TaG93Iiwib3ZlcmxheVNlZW4iLCJ0cnlHZXRMb2NhbFN0b3JhZ2UiLCJzaG91bGRTaG93T3ZlcmxheSIsImluc3RydWN0aW9uc0ltcG9ydGFudCIsImxldmVsUG9zaXRpb24iLCJ0cnlTZXRMb2NhbFN0b3JhZ2UiLCJPUEVOX0RJQUxPRyIsIm9wZW4iLCJpbWdPbmx5IiwiaW1nVXJsIiwiQ0xPU0VfRElBTE9HIiwib3BlbkRpYWxvZyIsImNsb3NlRGlhbG9nIiwiU0VUX1BBR0VfQ09OU1RBTlRTIiwiQUxMT1dFRF9LRVlTIiwiaGFzIiwiXyIsInNldFBhZ2VDb25zdGFudHMiLCJTZXQiLCJhc3NldFVybCIsIlNFVF9JU19SVU5OSU5HIiwiaXNSdW5uaW5nIiwiaXNEZWJ1Z2dlclBhdXNlZCIsImlzRGVidWdnaW5nU3ByaXRlcyIsIlNFVF9JU19FRElUX1dISUxFX1JVTiIsImlzRWRpdFdoaWxlUnVuIiwiU0VUX0lTX0RFQlVHR0VSX1BBVVNFRCIsIm5leHRTdGVwIiwiU0VUX1NURVBfU1BFRUQiLCJzdGVwU3BlZWQiLCJTRVRfQVdBSVRJTkdfQ09OVEFJTkVEX1JFU1BPTlNFIiwiYXdhaXRpbmdDb250YWluZWRSZXNwb25zZSIsIlNFVF9JU19ERUJVR0dJTkdfU1BSSVRFUyIsIl9sb2Rhc2giLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX19lc01vZHVsZSIsInNldElzUnVubmluZyIsInNldElzRWRpdFdoaWxlUnVuIiwic2V0SXNEZWJ1Z2dlclBhdXNlZCIsInNldFN0ZXBTcGVlZCIsInNldEF3YWl0aW5nQ29udGFpbmVkUmVzcG9uc2UiLCJzZXRJc0RlYnVnZ2luZ1Nwcml0ZXMiLCJzdHVkaW9BcHBBY3Rpdml0eUluaXRpYWxTdGF0ZSIsIlNFVF9TVEFSVF9JRExFIiwiaXNJZGxlIiwiaWRsZVN0YXJ0IiwiRGF0ZSIsImdldFRpbWUiLCJTRVRfRU5EX0lETEUiLCJuZXdJZGxlVGltZSIsImlkbGVUaW1lU2luY2VMYXN0UmVwb3J0IiwidGltZVNpbmNlSWRsZVN0YXJ0IiwiUkVTRVRfSURMRV9USU1FIiwic2V0U3RhcnRJZGxlIiwic2V0RW5kSWRsZSIsInJlc2V0SWRsZVRpbWUiLCJnZXRJZGxlVGltZVNpbmNlTGFzdFJlcG9ydCIsIndhdGNoZWRFeHByZXNzaW9uc0luaXRpYWxTdGF0ZSIsIkFERF9FWFBSRVNTSU9OIiwiZXhwcmVzc2lvbiIsInV1aWQiLCJjcmVhdGVVdWlkIiwiSW1tdXRhYmxlIiwiTWFwIiwiVVBEQVRFX1ZBTFVFIiwibWFwIiwiZ2V0IiwibGFzdFZhbHVlIiwiUkVNT1ZFX0VYUFJFU1NJT04iLCJfaW1tdXRhYmxlIiwiTGlzdCIsImFkZCIsInJlbW92ZSIsInVwZGF0ZSIsIl9wcm9wVHlwZXMiLCJfcmVhY3QiLCJfcmVhY3REb20iLCJfcmVhY3RSZWR1eCIsIl9pbnN0cnVjdGlvbnNEaWFsb2ciLCJfU2FmZU1hcmtkb3duIiwiX2V4cGFuZGFibGVJbWFnZXMiLCJfaW5oZXJpdHNMb29zZSIsImNyZWF0ZSIsIl9zZXRQcm90b3R5cGVPZiIsInNldFByb3RvdHlwZU9mIiwiYmluZCIsIl9fcHJvdG9fXyIsIlVuY29ubmVjdGVkRXhwYW5kYWJsZUltYWdlc1dyYXBwZXIiLCJfUmVhY3QkQ29tcG9uZW50IiwiX3Byb3RvIiwiY29tcG9uZW50RGlkTW91bnQiLCJwb3N0UmVuZGVySG9vayIsImNvbXBvbmVudERpZFVwZGF0ZSIsInByZXZQcm9wcyIsInRoaXNOb2RlIiwiUmVhY3RET00iLCJmaW5kRE9NTm9kZSIsInJlbmRlckV4cGFuZGFibGVJbWFnZXMiLCJzaG93SW1hZ2VEaWFsb2ciLCJyZW5kZXIiLCJjaGlsZHJlbiIsIlJlYWN0IiwiQ29tcG9uZW50IiwiUHJvcFR5cGVzIiwiZnVuYyIsImlzUmVxdWlyZWQiLCJvbmVPZlR5cGUiLCJhcnJheU9mIiwibm9kZSIsIkV4cGFuZGFibGVJbWFnZXNXcmFwcGVyIiwiY29ubmVjdCIsImRpc3BhdGNoIiwiQ2xpY2thYmxlVGV4dFdyYXBwZXIiLCJfUmVhY3QkQ29tcG9uZW50MiIsIl9wcm90bzIiLCJyZW5kZXJDbGlja2FibGVUZXh0IiwiX3RoaXMiLCJxdWVyeVNlbGVjdG9yQWxsIiwiY2xpY2thYmxlVGV4dCIsImluZGV4IiwiaWQiLCJkYXRhc2V0IiwiZXh0cmFDbGFzcyIsImNsYXNzTmFtZSIsInNldEF0dHJpYnV0ZSIsIm9uY2xpY2siLCJoYW5kbGVJbnN0cnVjdGlvbnNUZXh0Q2xpY2siLCJvbmtleWRvd24iLCJldmVudCIsIl9SZWFjdCRDb21wb25lbnQzIiwiRW5oYW5jZWRTYWZlTWFya2Rvd24iLCJyZXN1bHQiLCJtYXJrZG93biIsIm9wZW5FeHRlcm5hbExpbmtzSW5OZXdUYWIiLCJleHBhbmRhYmxlSW1hZ2VzIiwic3RyaW5nIiwiYm9vbCIsIl9jb2xvciIsIkxpZ2h0YnVsYiIsImJ1bGJEaXNwbGF5IiwibnVtYmVyQ2lyY2xlIiwiY291bnREaXNwbGF5IiwiaXNNaW5lY3JhZnQiLCJocmVmIiwibGl0Iiwic2hvdWxkQW5pbWF0ZSIsIndpZHRoIiwieCIsInkiLCJ4bGlua0hyZWYiLCJ0cmFuc2Zvcm0iLCJkIiwiZmlsbCIsImZpbGxSdWxlIiwiY2xpcFJ1bGUiLCJjb3VudCIsImNvdW50VGV4dCIsInN0eWxlIiwic3R5bGVzIiwiY291bnRNaW5lY3JhZnQiLCJjeCIsImN5Iiwic3Ryb2tlIiwiYmxvY2tseV9mbHlvdXRfZ3JheSIsInN0cm9rZVdpZHRoIiwic2l6ZSIsInZpZXdCb3giLCJudW1iZXIiLCJvYmplY3QiLCJmb250V2VpZ2h0IiwibGlnaHRfaW5mb181MDAiLCJmb250RmFtaWx5IiwiZGVmYXVsdCIsIl9yYWRpdW0iLCJJbWFnZVByZXZpZXdVbndyYXBwZWQiLCJ3cmFwcGVyIiwiYW5pR2lmUHJldmlldyIsIm5vVmlzdWFsaXphdGlvbiIsImJpZ1ByZXZpZXciLCJvbkNsaWNrIiwic2hvd0luc3RydWN0aW9uc0RpYWxvZyIsImJhY2tncm91bmRJbWFnZSIsImJhY2tncm91bmRTaXplIiwiSW1hZ2VQcmV2aWV3IiwiUmFkaXVtIiwicGFnZUNvbnN0YW50cyIsImFuaUdpZlVSTCIsIkV4YW1wbGVJbWFnZSIsImltZyIsImFsdCIsInByb3BUeXBlcyIsImJveFNoYWRvdyIsImJvcmRlciIsImxpZ2h0X2dyYXkiLCJib3JkZXJSYWRpdXMiLCJib3hTaXppbmciLCJfaW1tZXJzaXZlUmVhZGVyU2RrIiwiX2NsYXNzbmFtZXMiLCJfanNDb29raWUiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImhhc093blByb3BlcnR5Iiwic2V0IiwiX2ltbWVyc2l2ZV9yZWFkZXIiLCJXZWFrTWFwIiwiSW1tZXJzaXZlUmVhZGVyQnV0dG9uIiwiX0NvbXBvbmVudCIsInNob3VsZFJlbmRlciIsInJlbmRlckJ1dHRvbnNDYWxsZWQiLCJyZW5kZXJCdXR0b25zIiwiZWxlbWVudHMiLCJjb250YWluZXIiLCJoYW5kbGVLZXlEb3duIiwidGl0bGUiLCJ0ZXh0IiwiaGFuZGxlTGF1bmNoSW1tZXJzaXZlUmVhZGVyIiwiX3RoaXMkcHJvcHMiLCJoYXNSb3VuZEJvcmRlcnMiLCJpc0xlZ2FjeVN0eWxlcyIsImNvb2tpZXMiLCJ0YWJJbmRleCIsInJvbGUiLCJyZWYiLCJlbCIsImNsYXNzTmFtZXMiLCJvbktleURvd24iLCJJbnB1dE91dHB1dFRhYmxlIiwiaXRlbSIsIl9sb2NhbGUiLCJfQW5pR2lmUHJldmlldyIsIl9FeGFtcGxlSW1hZ2UiLCJfSW1tZXJzaXZlUmVhZGVyQnV0dG9uIiwiX0lucHV0T3V0cHV0VGFibGUiLCJfTWFya2Rvd25JbnN0cnVjdGlvbnMiLCJJbnN0cnVjdGlvbnMiLCJpblRvcFBhbmUiLCJpbnN0cnVjdGlvbnMiLCJvblJlc2l6ZSIsImlzQmxvY2tseSIsImlzSW1tZXJzaXZlQnV0dG9uSGFzUm91bmRCb3JkZXJzIiwiaXNMZWdhY3lJbW1lcnNpdmVTdHlsZXMiLCJpbWdVUkwiLCJhdXRob3JlZEhpbnRzIiwibm90SW5Ub3BQYW5lIiwiRnJhZ21lbnQiLCJpMThuIiwib3ZlcmZsb3ciLCJfanF1ZXJ5IiwiX0VuaGFuY2VkU2FmZU1hcmtkb3duIiwiTWFya2Rvd25JbnN0cnVjdGlvbnMiLCJjb25maWd1cmVNYXJrZG93bl8iLCJjb21wb25lbnRXaWxsVW5tb3VudCIsImRldGFpbHNET00iLCIkIiwiZmluZCIsImRldGFpbHMiLCJvZmYiLCJvbiIsInRvZ2dsZURldGFpbHNUb3BJbnN0cnVjdGlvbnMiLCJCbG9ja2x5IiwiQmxvY2tTcGFjZSIsIm9uTWFpbkJsb2NrU3BhY2VDcmVhdGVkIiwiY29udmVydFhtbFRvQmxvY2tseSIsImxvYWQiLCJjYW5Db2xsYXBzZSIsImluVG9wUGFuZUNhbkNvbGxhcHNlIiwibWFyZ2luVG9wIiwieG1sQ29udGFpbmVyIiwiZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSIsInhtbHMiLCJ4bWwiLCJyZW1vdmVDb21tZW50Tm9kZXMiLCJyb290IiwiY29tbWVudFdhbGtlciIsImNyZWF0ZVRyZWVXYWxrZXIiLCJOb2RlRmlsdGVyIiwiU0hPV19DT01NRU5UIiwiYWNjZXB0Tm9kZSIsIkZJTFRFUl9BQ0NFUFQiLCJsYXN0IiwibmV4dE5vZGUiLCJjdXJyZW50Tm9kZSIsImlubGluZSIsInBhcmVudE5vZGUiLCJ0YWdOYW1lIiwiYmxvY2tTcGFjZUNvbnRhaW5lciIsImNsYXNzTGlzdCIsImluc2VydEJlZm9yZSIsImJsb2NrU3BhY2UiLCJjcmVhdGVFbWJlZGRlZFdvcmtzcGFjZSIsIm5vU2Nyb2xsaW5nIiwicnRsIiwid2l0aFBhZGRpbmciLCJtZXRyaWNzIiwiZ2V0TWV0cmljcyIsImFkZENoYW5nZUxpc3RlbmVyIiwib2xkSGVpZ2h0IiwiY29udGVudEhlaWdodCIsIm9sZFdpZHRoIiwiY29udGVudFdpZHRoIiwibmV3SGVpZ2h0IiwibmV3V2lkdGgiLCJzaHJpbmtCbG9ja1NwYWNlQ29udGFpbmVyIiwiZ2V0T3V0ZXJIZWlnaHQiLCJjb21wb25lbnQiLCJpbmNsdWRlTWFyZ2luIiwib3V0ZXJIZWlnaHQiLCJoYXNJbnN0cnVjdGlvbnMiLCJzY3JvbGxCeSIsImRlbHRhWSIsImFuaW1hdGUiLCJuZXdTY3JvbGxUb3AiLCJzY3JvbGxUb3AiLCJzY3JvbGxUbyIsInNob3VsZERpc3BsYXlDaGF0VGlwcyIsInNraW5JZCIsIiRlbGVtIiwiaXMiLCJnZXRDb250YWluZXIiLCJjb250ZW50VG9wIiwiY29udGVudExlZnQiLCJjZG9VdGlscyIsIndvcmtzcGFjZVN2Z1Jlc2l6ZSIsIl9sb29wIiwiZXhwYW5kYWJsZUltZyIsImdldFRva2VuQW5kU3ViZG9tYWluQXN5bmMiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImFqYXgiLCJzdWNjZXNzIiwiZXJyb3IiLCJ0aGVuIiwicmVzcG9uc2UiLCJ0b2tlbiIsInN1YmRvbWFpbiIsImNodW5rcyIsImNvbnRlbnQiLCJzYW5pdGl6ZVRleHQiLCJsYW5nIiwibGF1bmNoQXN5bmMiLCJ1aVpJbmRleCIsImNvbnNvbGUiLCJibG9ja2x5U2xpY2UiLCJjcmVhdGVTbGljZSIsImhhc0luY29tcGF0aWJsZVNvdXJjZXMiLCJmYWlsZWRUb0dlbmVyYXRlQ29kZSIsInJlZHVjZXJzIiwic2V0SGFzSW5jb21wYXRpYmxlU291cmNlcyIsInBheWxvYWQiLCJzZXRGYWlsZWRUb0dlbmVyYXRlQ29kZSIsImFjdGlvbnMiLCJsYXlvdXRTbGljZSIsInZpc3VhbGl6YXRpb25TY2FsZSIsInNldFZpc3VhbGl6YXRpb25TY2FsZSIsImdldFZpc3VhbGl6YXRpb25TY2FsZSIsImNyZWF0ZVNlbGVjdG9yIiwibGF5b3V0Il0sInNvdXJjZVJvb3QiOiIifQ==